summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/linux_builds.yml37
-rw-r--r--.github/workflows/static_checks.yml2
-rw-r--r--.mailmap1
-rw-r--r--AUTHORS.md5
-rw-r--r--COPYRIGHT.txt15
-rw-r--r--DONORS.md45
-rw-r--r--README.md19
-rw-r--r--SConstruct25
-rw-r--r--core/config/project_settings.cpp125
-rw-r--r--core/config/project_settings.h13
-rw-r--r--core/core_bind.cpp27
-rw-r--r--core/core_bind.h8
-rw-r--r--core/core_builders.py4
-rw-r--r--core/core_constants.cpp653
-rw-r--r--core/debugger/remote_debugger.cpp2
-rw-r--r--core/extension/gdnative_interface.cpp21
-rw-r--r--core/extension/gdnative_interface.h5
-rw-r--r--core/input/gamecontrollerdb.txt1038
-rw-r--r--core/input/input.cpp215
-rw-r--r--core/input/input.h24
-rw-r--r--core/input/input_enums.h184
-rw-r--r--core/input/input_event.cpp156
-rw-r--r--core/input/input_event.h24
-rw-r--r--core/input/input_map.cpp172
-rw-r--r--core/io/config_file.cpp4
-rw-r--r--core/io/http_client.cpp3
-rw-r--r--core/io/image.cpp72
-rw-r--r--core/io/image.h9
-rw-r--r--core/io/packed_data_container.cpp4
-rw-r--r--core/io/pck_packer.cpp3
-rw-r--r--core/io/pck_packer.h2
-rw-r--r--core/io/resource.h1
-rw-r--r--core/io/resource_format_binary.cpp8
-rw-r--r--core/io/resource_importer.h4
-rw-r--r--core/math/a_star.cpp4
-rw-r--r--core/math/aabb.cpp2
-rw-r--r--core/math/aabb.h4
-rw-r--r--core/math/basis.cpp4
-rw-r--r--core/math/bvh.h2
-rw-r--r--core/math/bvh_pair.inc2
-rw-r--r--core/math/color.cpp96
-rw-r--r--core/math/color.h4
-rw-r--r--core/math/convex_hull.cpp2
-rw-r--r--core/math/delaunay_2d.h4
-rw-r--r--core/math/expression.cpp6
-rw-r--r--core/math/geometry_2d.h3
-rw-r--r--core/math/math_funcs.cpp4
-rw-r--r--core/math/math_funcs.h18
-rw-r--r--core/math/quaternion.h7
-rw-r--r--core/math/transform_2d.cpp6
-rw-r--r--core/math/vector2.cpp4
-rw-r--r--core/math/vector2.h2
-rw-r--r--core/math/vector3.h2
-rw-r--r--core/math/vector3i.h2
-rw-r--r--core/object/object.cpp13
-rw-r--r--core/object/object.h2
-rw-r--r--core/object/script_language.cpp2
-rw-r--r--core/object/undo_redo.cpp2
-rw-r--r--core/os/keyboard.cpp709
-rw-r--r--core/os/keyboard.h539
-rw-r--r--core/os/midi_driver.cpp18
-rw-r--r--core/os/os.cpp9
-rw-r--r--core/os/os.h4
-rw-r--r--core/string/node_path.cpp6
-rw-r--r--core/string/translation.cpp2
-rw-r--r--core/string/ustring.cpp30
-rw-r--r--core/string/ustring.h2
-rw-r--r--core/templates/bin_sorted_array.h2
-rw-r--r--core/templates/cowdata.h2
-rw-r--r--core/templates/local_vector.h6
-rw-r--r--core/templates/ordered_hash_map.h6
-rw-r--r--core/templates/thread_work_pool.cpp2
-rw-r--r--core/templates/thread_work_pool.h24
-rw-r--r--core/templates/vector.h4
-rw-r--r--core/templates/vmap.h2
-rw-r--r--core/templates/vset.h2
-rw-r--r--core/typedefs.h7
-rw-r--r--core/variant/array.cpp74
-rw-r--r--core/variant/array.h5
-rw-r--r--core/variant/binder_common.h2
-rw-r--r--core/variant/dictionary.cpp62
-rw-r--r--core/variant/dictionary.h3
-rw-r--r--core/variant/variant.cpp84
-rw-r--r--core/variant/variant.h25
-rw-r--r--core/variant/variant_call.cpp46
-rw-r--r--core/variant/variant_parser.cpp73
-rw-r--r--core/variant/variant_parser.h2
-rw-r--r--core/variant/variant_setget.cpp18
-rw-r--r--core/variant/variant_utility.cpp18
-rw-r--r--doc/classes/@GlobalScope.xml103
-rw-r--r--doc/classes/AABB.xml48
-rw-r--r--doc/classes/AnimatedSprite2D.xml2
-rw-r--r--doc/classes/AnimatedSprite3D.xml2
-rw-r--r--doc/classes/Animation.xml42
-rw-r--r--doc/classes/AnimationNode.xml3
-rw-r--r--doc/classes/AnimationNodeAdd2.xml2
-rw-r--r--doc/classes/AnimationNodeAdd3.xml2
-rw-r--r--doc/classes/AnimationNodeAnimation.xml11
-rw-r--r--doc/classes/AnimationNodeBlend2.xml2
-rw-r--r--doc/classes/AnimationNodeBlend3.xml2
-rw-r--r--doc/classes/AnimationNodeBlendSpace1D.xml2
-rw-r--r--doc/classes/AnimationNodeBlendSpace2D.xml2
-rw-r--r--doc/classes/AnimationNodeBlendTree.xml2
-rw-r--r--doc/classes/AnimationNodeOneShot.xml2
-rw-r--r--doc/classes/AnimationNodeOutput.xml2
-rw-r--r--doc/classes/AnimationNodeStateMachine.xml2
-rw-r--r--doc/classes/AnimationNodeStateMachinePlayback.xml2
-rw-r--r--doc/classes/AnimationNodeStateMachineTransition.xml4
-rw-r--r--doc/classes/AnimationNodeTimeScale.xml2
-rw-r--r--doc/classes/AnimationNodeTimeSeek.xml2
-rw-r--r--doc/classes/AnimationNodeTransition.xml2
-rw-r--r--doc/classes/AnimationPlayer.xml4
-rw-r--r--doc/classes/AnimationTree.xml2
-rw-r--r--doc/classes/Area2D.xml29
-rw-r--r--doc/classes/Area3D.xml29
-rw-r--r--doc/classes/Array.xml24
-rw-r--r--doc/classes/ArrayMesh.xml2
-rw-r--r--doc/classes/AudioEffectDistortion.xml2
-rw-r--r--doc/classes/AudioEffectFilter.xml2
-rw-r--r--doc/classes/AudioEffectHighShelfFilter.xml2
-rw-r--r--doc/classes/AudioEffectLowShelfFilter.xml2
-rw-r--r--doc/classes/AudioEffectRecord.xml2
-rw-r--r--doc/classes/AudioServer.xml2
-rw-r--r--doc/classes/AudioStream.xml2
-rw-r--r--doc/classes/AudioStreamPlayer.xml2
-rw-r--r--doc/classes/AudioStreamPlayer2D.xml2
-rw-r--r--doc/classes/AudioStreamPlayer3D.xml2
-rw-r--r--doc/classes/AudioStreamSample.xml2
-rw-r--r--doc/classes/BaseButton.xml2
-rw-r--r--doc/classes/BaseMaterial3D.xml2
-rw-r--r--doc/classes/Basis.xml13
-rw-r--r--doc/classes/BitMap.xml2
-rw-r--r--doc/classes/Button.xml1
-rw-r--r--doc/classes/CPUParticles2D.xml2
-rw-r--r--doc/classes/CPUParticles3D.xml2
-rw-r--r--doc/classes/CanvasItem.xml4
-rw-r--r--doc/classes/CanvasLayer.xml4
-rw-r--r--doc/classes/CharFXTransform.xml2
-rw-r--r--doc/classes/CharacterBody2D.xml4
-rw-r--r--doc/classes/CharacterBody3D.xml2
-rw-r--r--doc/classes/CodeEdit.xml1
-rw-r--r--doc/classes/CollisionObject2D.xml4
-rw-r--r--doc/classes/CollisionObject3D.xml4
-rw-r--r--doc/classes/CollisionShape2D.xml2
-rw-r--r--doc/classes/CollisionShape3D.xml2
-rw-r--r--doc/classes/Color.xml33
-rw-r--r--doc/classes/Control.xml20
-rw-r--r--doc/classes/Dictionary.xml2
-rw-r--r--doc/classes/DirectionalLight3D.xml2
-rw-r--r--doc/classes/Directory.xml2
-rw-r--r--doc/classes/DisplayServer.xml2
-rw-r--r--doc/classes/EditorImportPlugin.xml10
-rw-r--r--doc/classes/EditorInspectorPlugin.xml19
-rw-r--r--doc/classes/EditorNode3DGizmoPlugin.xml2
-rw-r--r--doc/classes/EditorPaths.xml30
-rw-r--r--doc/classes/EditorPlugin.xml2
-rw-r--r--doc/classes/EditorProperty.xml10
-rw-r--r--doc/classes/EditorResourcePicker.xml3
-rw-r--r--doc/classes/EditorSceneFormatImporter.xml13
-rw-r--r--doc/classes/EditorScenePostImport.xml2
-rw-r--r--doc/classes/EditorScenePostImportPlugin.xml4
-rw-r--r--doc/classes/Engine.xml2
-rw-r--r--doc/classes/Environment.xml9
-rw-r--r--doc/classes/File.xml4
-rw-r--r--doc/classes/FontData.xml52
-rw-r--r--doc/classes/GPUParticles2D.xml2
-rw-r--r--doc/classes/GPUParticles3D.xml2
-rw-r--r--doc/classes/GeometryInstance3D.xml12
-rw-r--r--doc/classes/Gradient.xml20
-rw-r--r--doc/classes/GradientTexture1D.xml (renamed from doc/classes/GradientTexture.xml)4
-rw-r--r--doc/classes/GraphEdit.xml2
-rw-r--r--doc/classes/GraphNode.xml4
-rw-r--r--doc/classes/HTTPClient.xml4
-rw-r--r--doc/classes/HTTPRequest.xml4
-rw-r--r--doc/classes/Image.xml14
-rw-r--r--doc/classes/ImageTexture.xml2
-rw-r--r--doc/classes/Input.xml11
-rw-r--r--doc/classes/InputEvent.xml4
-rw-r--r--doc/classes/InputEventAction.xml2
-rw-r--r--doc/classes/InputEventJoypadButton.xml2
-rw-r--r--doc/classes/InputEventJoypadMotion.xml2
-rw-r--r--doc/classes/InputEventKey.xml6
-rw-r--r--doc/classes/InputEventMouse.xml4
-rw-r--r--doc/classes/InputEventMouseButton.xml2
-rw-r--r--doc/classes/InputEventMouseMotion.xml2
-rw-r--r--doc/classes/InputEventScreenDrag.xml4
-rw-r--r--doc/classes/InputEventScreenTouch.xml2
-rw-r--r--doc/classes/InputEventWithModifiers.xml2
-rw-r--r--doc/classes/InputMap.xml2
-rw-r--r--doc/classes/JNISingleton.xml2
-rw-r--r--doc/classes/JavaScript.xml4
-rw-r--r--doc/classes/Label.xml2
-rw-r--r--doc/classes/Light2D.xml2
-rw-r--r--doc/classes/Light3D.xml2
-rw-r--r--doc/classes/LightOccluder2D.xml2
-rw-r--r--doc/classes/LightmapGI.xml4
-rw-r--r--doc/classes/LineEdit.xml3
-rw-r--r--doc/classes/MenuButton.xml3
-rw-r--r--doc/classes/MeshInstance2D.xml2
-rw-r--r--doc/classes/MultiMesh.xml4
-rw-r--r--doc/classes/MultiMeshInstance3D.xml6
-rw-r--r--doc/classes/MultiplayerPeer.xml2
-rw-r--r--doc/classes/Mutex.xml2
-rw-r--r--doc/classes/NavigationObstacle2D.xml8
-rw-r--r--doc/classes/NavigationObstacle3D.xml8
-rw-r--r--doc/classes/NavigationPolygon.xml4
-rw-r--r--doc/classes/Node.xml29
-rw-r--r--doc/classes/Node2D.xml2
-rw-r--r--doc/classes/Node3D.xml2
-rw-r--r--doc/classes/OS.xml33
-rw-r--r--doc/classes/Object.xml7
-rw-r--r--doc/classes/OmniLight3D.xml2
-rw-r--r--doc/classes/PCKPacker.xml4
-rw-r--r--doc/classes/PackedByteArray.xml2
-rw-r--r--doc/classes/PackedColorArray.xml2
-rw-r--r--doc/classes/PackedFloat32Array.xml2
-rw-r--r--doc/classes/PackedFloat64Array.xml2
-rw-r--r--doc/classes/PackedInt32Array.xml2
-rw-r--r--doc/classes/PackedInt64Array.xml2
-rw-r--r--doc/classes/PackedScene.xml8
-rw-r--r--doc/classes/PackedStringArray.xml2
-rw-r--r--doc/classes/PackedVector2Array.xml2
-rw-r--r--doc/classes/PackedVector3Array.xml2
-rw-r--r--doc/classes/ParticlesMaterial.xml2
-rw-r--r--doc/classes/PhysicalBone3D.xml22
-rw-r--r--doc/classes/PhysicalSkyMaterial.xml4
-rw-r--r--doc/classes/PhysicsBody2D.xml8
-rw-r--r--doc/classes/PhysicsBody3D.xml8
-rw-r--r--doc/classes/PhysicsDirectBodyState2D.xml9
-rw-r--r--doc/classes/PhysicsDirectBodyState3D.xml9
-rw-r--r--doc/classes/PhysicsDirectSpaceState2D.xml56
-rw-r--r--doc/classes/PhysicsDirectSpaceState3D.xml41
-rw-r--r--doc/classes/PhysicsPointQueryParameters2D.xml31
-rw-r--r--doc/classes/PhysicsPointQueryParameters3D.xml28
-rw-r--r--doc/classes/PhysicsRayQueryParameters2D.xml34
-rw-r--r--doc/classes/PhysicsRayQueryParameters3D.xml37
-rw-r--r--doc/classes/PhysicsServer2D.xml72
-rw-r--r--doc/classes/PhysicsServer3D.xml80
-rw-r--r--doc/classes/PhysicsShapeQueryParameters2D.xml4
-rw-r--r--doc/classes/PhysicsShapeQueryParameters3D.xml7
-rw-r--r--doc/classes/Plane.xml8
-rw-r--r--doc/classes/PopupMenu.xml27
-rw-r--r--doc/classes/ProjectSettings.xml56
-rw-r--r--doc/classes/Quaternion.xml17
-rw-r--r--doc/classes/RandomNumberGenerator.xml2
-rw-r--r--doc/classes/RayCast2D.xml9
-rw-r--r--doc/classes/RayCast3D.xml9
-rw-r--r--doc/classes/Rect2.xml31
-rw-r--r--doc/classes/Rect2i.xml25
-rw-r--r--doc/classes/RefCounted.xml2
-rw-r--r--doc/classes/ReferenceRect.xml2
-rw-r--r--doc/classes/ReflectionProbe.xml2
-rw-r--r--doc/classes/RenderingServer.xml50
-rw-r--r--doc/classes/Resource.xml4
-rw-r--r--doc/classes/ResourceImporter.xml2
-rw-r--r--doc/classes/RichTextEffect.xml2
-rw-r--r--doc/classes/RichTextLabel.xml8
-rw-r--r--doc/classes/RigidDynamicBody2D.xml20
-rw-r--r--doc/classes/RigidDynamicBody3D.xml22
-rw-r--r--doc/classes/RootMotionView.xml2
-rw-r--r--doc/classes/SceneState.xml4
-rw-r--r--doc/classes/SceneTree.xml4
-rw-r--r--doc/classes/Script.xml2
-rw-r--r--doc/classes/Semaphore.xml2
-rw-r--r--doc/classes/Shader.xml6
-rw-r--r--doc/classes/ShaderMaterial.xml2
-rw-r--r--doc/classes/Shape2D.xml2
-rw-r--r--doc/classes/Shape3D.xml2
-rw-r--r--doc/classes/ShapeCast2D.xml157
-rw-r--r--doc/classes/Skeleton2D.xml2
-rw-r--r--doc/classes/SoftDynamicBody3D.xml6
-rw-r--r--doc/classes/SpotLight3D.xml2
-rw-r--r--doc/classes/SpringArm3D.xml2
-rw-r--r--doc/classes/StandardMaterial3D.xml2
-rw-r--r--doc/classes/StreamPeerSSL.xml2
-rw-r--r--doc/classes/String.xml16
-rw-r--r--doc/classes/SubViewport.xml4
-rw-r--r--doc/classes/TextEdit.xml29
-rw-r--r--doc/classes/TextParagraph.xml3
-rw-r--r--doc/classes/TextServer.xml77
-rw-r--r--doc/classes/TextServerExtension.xml68
-rw-r--r--doc/classes/Theme.xml2
-rw-r--r--doc/classes/Thread.xml4
-rw-r--r--doc/classes/TileMap.xml2
-rw-r--r--doc/classes/TileMapPattern.xml2
-rw-r--r--doc/classes/TileSet.xml2
-rw-r--r--doc/classes/TileSetAtlasSource.xml19
-rw-r--r--doc/classes/Transform2D.xml13
-rw-r--r--doc/classes/Transform3D.xml14
-rw-r--r--doc/classes/Translation.xml4
-rw-r--r--doc/classes/TranslationServer.xml4
-rw-r--r--doc/classes/Tween.xml12
-rw-r--r--doc/classes/Variant.xml2
-rw-r--r--doc/classes/Vector2.xml39
-rw-r--r--doc/classes/Vector2i.xml47
-rw-r--r--doc/classes/Vector3.xml40
-rw-r--r--doc/classes/Vector3i.xml47
-rw-r--r--doc/classes/Viewport.xml40
-rw-r--r--doc/classes/VisualShaderNode.xml2
-rw-r--r--doc/classes/VisualShaderNodeCustom.xml8
-rw-r--r--doc/classes/VisualShaderNodeInput.xml2
-rw-r--r--doc/classes/VisualShaderNodeParticleEmitter.xml6
-rw-r--r--doc/classes/VisualShaderNodeParticleMeshEmitter.xml17
-rw-r--r--doc/classes/VoxelGI.xml12
-rw-r--r--doc/classes/Window.xml8
-rw-r--r--doc/classes/World2D.xml2
-rw-r--r--doc/classes/World3D.xml2
-rw-r--r--doc/classes/WorldEnvironment.xml2
-rw-r--r--doc/classes/XRCamera3D.xml2
-rw-r--r--doc/classes/XRController3D.xml2
-rw-r--r--doc/classes/XRInterface.xml2
-rw-r--r--doc/classes/XROrigin3D.xml2
-rw-r--r--doc/classes/XRPositionalTracker.xml2
-rw-r--r--doc/classes/XRServer.xml2
-rw-r--r--doc/classes/float.xml13
-rw-r--r--doc/classes/int.xml6
-rwxr-xr-xdoc/tools/make_rst.py280
-rw-r--r--doc/translations/ar.po1884
-rw-r--r--doc/translations/ca.po2374
-rw-r--r--doc/translations/classes.pot1873
-rw-r--r--doc/translations/cs.po2013
-rw-r--r--doc/translations/de.po2716
-rw-r--r--doc/translations/el.po1873
-rw-r--r--doc/translations/es.po2071
-rw-r--r--doc/translations/fa.po1873
-rw-r--r--doc/translations/fi.po1889
-rw-r--r--doc/translations/fil.po1873
-rw-r--r--doc/translations/fr.po2043
-rw-r--r--doc/translations/gl.po1873
-rw-r--r--doc/translations/hi.po1873
-rw-r--r--doc/translations/hu.po1909
-rw-r--r--doc/translations/id.po1886
-rw-r--r--doc/translations/it.po2518
-rw-r--r--doc/translations/ja.po1947
-rw-r--r--doc/translations/ko.po1907
-rw-r--r--doc/translations/lv.po1908
-rw-r--r--doc/translations/mr.po1873
-rw-r--r--doc/translations/nb.po69473
-rw-r--r--doc/translations/nl.po1890
-rw-r--r--doc/translations/pl.po2007
-rw-r--r--doc/translations/pt_BR.po3052
-rw-r--r--doc/translations/ro.po2107
-rw-r--r--doc/translations/ru.po2275
-rw-r--r--doc/translations/sk.po1882
-rw-r--r--doc/translations/sr_Cyrl.po1899
-rw-r--r--doc/translations/sv.po69464
-rw-r--r--doc/translations/th.po1874
-rw-r--r--doc/translations/tl.po69539
-rw-r--r--doc/translations/tr.po1942
-rw-r--r--doc/translations/uk.po1892
-rw-r--r--doc/translations/vi.po1972
-rw-r--r--doc/translations/zh_CN.po13900
-rw-r--r--doc/translations/zh_TW.po1873
-rw-r--r--drivers/SCsub5
-rw-r--r--drivers/gles3/rasterizer_gles3.cpp2
-rw-r--r--drivers/gles3/rasterizer_scene_gles3.cpp2
-rw-r--r--drivers/gles3/rasterizer_scene_gles3.h2
-rw-r--r--drivers/gles3/rasterizer_storage_gles3.cpp36
-rw-r--r--drivers/gles3/rasterizer_storage_gles3.h6
-rw-r--r--drivers/gles3/shader_compiler_gles3.cpp18
-rw-r--r--drivers/pulseaudio/audio_driver_pulseaudio.cpp35
-rw-r--r--drivers/unix/os_unix.cpp2
-rw-r--r--drivers/vulkan/rendering_device_vulkan.cpp1
-rw-r--r--drivers/vulkan/vulkan_context.cpp18
-rw-r--r--drivers/vulkan/vulkan_context.h12
-rw-r--r--drivers/wasapi/audio_driver_wasapi.cpp33
-rw-r--r--editor/SCsub4
-rw-r--r--editor/action_map_editor.cpp34
-rw-r--r--editor/animation_bezier_editor.cpp120
-rw-r--r--editor/animation_bezier_editor.h17
-rw-r--r--editor/animation_track_editor.cpp193
-rw-r--r--editor/animation_track_editor.h3
-rw-r--r--editor/animation_track_editor_plugins.cpp4
-rw-r--r--editor/code_editor.cpp18
-rw-r--r--editor/connections_dialog.cpp6
-rw-r--r--editor/create_dialog.cpp10
-rw-r--r--editor/debugger/editor_performance_profiler.cpp2
-rw-r--r--editor/debugger/editor_profiler.cpp4
-rw-r--r--editor/debugger/editor_visual_profiler.cpp4
-rw-r--r--editor/debugger/script_editor_debugger.cpp50
-rw-r--r--editor/debugger/script_editor_debugger.h4
-rw-r--r--editor/dependency_editor.cpp4
-rw-r--r--editor/doc_tools.cpp2
-rw-r--r--editor/editor_audio_buses.cpp12
-rw-r--r--editor/editor_autoload_settings.cpp12
-rw-r--r--editor/editor_builders.py8
-rw-r--r--editor/editor_command_palette.cpp8
-rw-r--r--editor/editor_command_palette.h2
-rw-r--r--editor/editor_data.cpp8
-rw-r--r--editor/editor_export.cpp12
-rw-r--r--editor/editor_export.h2
-rw-r--r--editor/editor_file_dialog.cpp40
-rw-r--r--editor/editor_file_system.cpp10
-rw-r--r--editor/editor_help.cpp26
-rw-r--r--editor/editor_help_search.cpp8
-rw-r--r--editor/editor_inspector.cpp400
-rw-r--r--editor/editor_inspector.h23
-rw-r--r--editor/editor_layouts_dialog.cpp6
-rw-r--r--editor/editor_log.cpp10
-rw-r--r--editor/editor_node.cpp184
-rw-r--r--editor/editor_node.h1
-rw-r--r--editor/editor_properties.cpp57
-rw-r--r--editor/editor_properties.h5
-rw-r--r--editor/editor_properties_array_dict.cpp23
-rw-r--r--editor/editor_resource_picker.cpp16
-rw-r--r--editor/editor_resource_picker.h2
-rw-r--r--editor/editor_run.cpp4
-rw-r--r--editor/editor_settings.cpp21
-rw-r--r--editor/editor_settings.h4
-rw-r--r--editor/editor_spin_slider.cpp24
-rw-r--r--editor/editor_themes.cpp6
-rw-r--r--editor/editor_toaster.cpp13
-rw-r--r--editor/editor_vcs_interface.cpp21
-rw-r--r--editor/editor_vcs_interface.h6
-rw-r--r--editor/editor_zoom_widget.cpp10
-rw-r--r--editor/filesystem_dock.cpp31
-rw-r--r--editor/icons/GradientTexture1D.svg (renamed from editor/icons/GradientTexture.svg)0
-rw-r--r--editor/icons/InterpCubic.svg2
-rw-r--r--editor/icons/InterpLinear.svg2
-rw-r--r--editor/icons/InterpWrapClamp.svg2
-rw-r--r--editor/icons/InterpWrapLoop.svg2
-rw-r--r--editor/icons/KeyEasedSelected.svg1
-rw-r--r--editor/icons/KeyValueEased.svg1
-rw-r--r--editor/icons/MirrorX.svg1
-rw-r--r--editor/icons/MirrorY.svg1
-rw-r--r--editor/icons/PingPongLoop.svg1
-rw-r--r--editor/icons/ReverseGradient.svg1
-rw-r--r--editor/icons/RotateLeft.svg1
-rw-r--r--editor/icons/RotateRight.svg1
-rw-r--r--editor/icons/ShapeCast2D.svg1
-rw-r--r--editor/icons/TrackCapture.svg2
-rw-r--r--editor/icons/TrackDiscrete.svg2
-rw-r--r--editor/icons/TrackTrigger.svg2
-rw-r--r--editor/import/collada.cpp8
-rw-r--r--editor/import/dynamicfont_import_settings.cpp4
-rw-r--r--editor/import/editor_import_collada.cpp4
-rw-r--r--editor/import/editor_import_plugin.cpp14
-rw-r--r--editor/import/editor_import_plugin.h8
-rw-r--r--editor/import/resource_importer_bitmask.cpp4
-rw-r--r--editor/import/resource_importer_bitmask.h4
-rw-r--r--editor/import/resource_importer_bmfont.cpp33
-rw-r--r--editor/import/resource_importer_bmfont.h4
-rw-r--r--editor/import/resource_importer_csv_translation.cpp4
-rw-r--r--editor/import/resource_importer_csv_translation.h4
-rw-r--r--editor/import/resource_importer_dynamicfont.cpp10
-rw-r--r--editor/import/resource_importer_dynamicfont.h4
-rw-r--r--editor/import/resource_importer_image.cpp4
-rw-r--r--editor/import/resource_importer_image.h4
-rw-r--r--editor/import/resource_importer_imagefont.cpp4
-rw-r--r--editor/import/resource_importer_imagefont.h4
-rw-r--r--editor/import/resource_importer_layered_texture.cpp4
-rw-r--r--editor/import/resource_importer_layered_texture.h4
-rw-r--r--editor/import/resource_importer_obj.cpp14
-rw-r--r--editor/import/resource_importer_obj.h4
-rw-r--r--editor/import/resource_importer_scene.cpp89
-rw-r--r--editor/import/resource_importer_scene.h16
-rw-r--r--editor/import/resource_importer_shader_file.cpp4
-rw-r--r--editor/import/resource_importer_shader_file.h4
-rw-r--r--editor/import/resource_importer_texture.cpp7
-rw-r--r--editor/import/resource_importer_texture.h4
-rw-r--r--editor/import/resource_importer_texture_atlas.cpp8
-rw-r--r--editor/import/resource_importer_texture_atlas.h4
-rw-r--r--editor/import/resource_importer_wav.cpp6
-rw-r--r--editor/import/resource_importer_wav.h4
-rw-r--r--editor/import/scene_import_settings.cpp10
-rw-r--r--editor/import_defaults_editor.cpp4
-rw-r--r--editor/import_dock.cpp30
-rw-r--r--editor/import_dock.h2
-rw-r--r--editor/localization_editor.cpp8
-rw-r--r--editor/plugin_config_dialog.cpp2
-rw-r--r--editor/plugins/abstract_polygon_2d_editor.cpp26
-rw-r--r--editor/plugins/animation_blend_space_1d_editor.cpp12
-rw-r--r--editor/plugins/animation_blend_space_2d_editor.cpp14
-rw-r--r--editor/plugins/animation_blend_tree_editor_plugin.cpp4
-rw-r--r--editor/plugins/animation_player_editor_plugin.cpp17
-rw-r--r--editor/plugins/animation_state_machine_editor.cpp14
-rw-r--r--editor/plugins/asset_library_editor_plugin.cpp2
-rw-r--r--editor/plugins/audio_stream_editor_plugin.cpp4
-rw-r--r--editor/plugins/canvas_item_editor_plugin.cpp281
-rw-r--r--editor/plugins/canvas_item_editor_plugin.h10
-rw-r--r--editor/plugins/collision_polygon_3d_editor_plugin.cpp14
-rw-r--r--editor/plugins/collision_shape_2d_editor_plugin.cpp6
-rw-r--r--editor/plugins/curve_editor_plugin.cpp14
-rw-r--r--editor/plugins/debugger_editor_plugin.cpp6
-rw-r--r--editor/plugins/editor_preview_plugins.cpp56
-rw-r--r--editor/plugins/editor_preview_plugins.h32
-rw-r--r--editor/plugins/gradient_editor_plugin.cpp45
-rw-r--r--editor/plugins/gradient_editor_plugin.h16
-rw-r--r--editor/plugins/mesh_editor_plugin.cpp2
-rw-r--r--editor/plugins/mesh_instance_3d_editor_plugin.cpp12
-rw-r--r--editor/plugins/node_3d_editor_plugin.cpp236
-rw-r--r--editor/plugins/ot_features_plugin.cpp6
-rw-r--r--editor/plugins/ot_features_plugin.h2
-rw-r--r--editor/plugins/path_2d_editor_plugin.cpp12
-rw-r--r--editor/plugins/path_3d_editor_plugin.cpp6
-rw-r--r--editor/plugins/polygon_2d_editor_plugin.cpp20
-rw-r--r--editor/plugins/root_motion_editor_plugin.cpp12
-rw-r--r--editor/plugins/root_motion_editor_plugin.h2
-rw-r--r--editor/plugins/script_editor_plugin.cpp168
-rw-r--r--editor/plugins/script_editor_plugin.h1
-rw-r--r--editor/plugins/script_text_editor.cpp126
-rw-r--r--editor/plugins/shader_editor_plugin.cpp16
-rw-r--r--editor/plugins/skeleton_2d_editor_plugin.cpp20
-rw-r--r--editor/plugins/skeleton_2d_editor_plugin.h2
-rw-r--r--editor/plugins/skeleton_3d_editor_plugin.cpp6
-rw-r--r--editor/plugins/sprite_frames_editor_plugin.cpp16
-rw-r--r--editor/plugins/style_box_editor_plugin.cpp7
-rw-r--r--editor/plugins/style_box_editor_plugin.h2
-rw-r--r--editor/plugins/text_control_editor_plugin.cpp375
-rw-r--r--editor/plugins/text_control_editor_plugin.h119
-rw-r--r--editor/plugins/text_editor.cpp29
-rw-r--r--editor/plugins/texture_3d_editor_plugin.cpp2
-rw-r--r--editor/plugins/texture_editor_plugin.cpp2
-rw-r--r--editor/plugins/texture_layered_editor_plugin.cpp4
-rw-r--r--editor/plugins/texture_region_editor_plugin.cpp12
-rw-r--r--editor/plugins/theme_editor_plugin.cpp8
-rw-r--r--editor/plugins/theme_editor_plugin.h2
-rw-r--r--editor/plugins/theme_editor_preview.cpp5
-rw-r--r--editor/plugins/tiles/tile_atlas_view.cpp4
-rw-r--r--editor/plugins/tiles/tile_data_editors.cpp145
-rw-r--r--editor/plugins/tiles/tile_data_editors.h11
-rw-r--r--editor/plugins/tiles/tile_map_editor.cpp761
-rw-r--r--editor/plugins/tiles/tile_map_editor.h37
-rw-r--r--editor/plugins/tiles/tile_proxies_manager_dialog.cpp2
-rw-r--r--editor/plugins/tiles/tile_set_atlas_source_editor.cpp204
-rw-r--r--editor/plugins/tiles/tile_set_atlas_source_editor.h36
-rw-r--r--editor/plugins/tiles/tile_set_editor.cpp10
-rw-r--r--editor/plugins/tiles/tile_set_editor.h6
-rw-r--r--editor/plugins/tiles/tile_set_scenes_collection_source_editor.cpp10
-rw-r--r--editor/plugins/tiles/tile_set_scenes_collection_source_editor.h5
-rw-r--r--editor/plugins/tiles/tiles_editor_plugin.cpp19
-rw-r--r--editor/plugins/tiles/tiles_editor_plugin.h6
-rw-r--r--editor/plugins/version_control_editor_plugin.cpp35
-rw-r--r--editor/plugins/version_control_editor_plugin.h4
-rw-r--r--editor/plugins/visual_shader_editor_plugin.cpp285
-rw-r--r--editor/plugins/visual_shader_editor_plugin.h29
-rw-r--r--editor/project_export.cpp5
-rw-r--r--editor/project_manager.cpp302
-rw-r--r--editor/property_editor.cpp50
-rw-r--r--editor/property_editor.h1
-rw-r--r--editor/property_selector.cpp8
-rw-r--r--editor/quick_open.cpp8
-rw-r--r--editor/rename_dialog.cpp7
-rw-r--r--editor/rename_dialog.h7
-rw-r--r--editor/scene_tree_dock.cpp104
-rw-r--r--editor/scene_tree_dock.h6
-rw-r--r--editor/script_create_dialog.cpp26
-rw-r--r--editor/script_create_dialog.h4
-rw-r--r--editor/settings_config_dialog.cpp6
-rw-r--r--editor/shader_create_dialog.cpp7
-rw-r--r--editor/shader_create_dialog.h2
-rw-r--r--editor/translations/af.po8
-rw-r--r--editor/translations/ar.po64
-rw-r--r--editor/translations/az.po8
-rw-r--r--editor/translations/bg.po12
-rw-r--r--editor/translations/bn.po16
-rw-r--r--editor/translations/br.po8
-rw-r--r--editor/translations/ca.po16
-rw-r--r--editor/translations/cs.po608
-rw-r--r--editor/translations/da.po119
-rw-r--r--editor/translations/de.po28
-rw-r--r--editor/translations/editor.pot8
-rw-r--r--editor/translations/el.po16
-rw-r--r--editor/translations/eo.po12
-rw-r--r--editor/translations/es.po29
-rw-r--r--editor/translations/es_AR.po16
-rw-r--r--editor/translations/et.po8
-rw-r--r--editor/translations/eu.po8
-rw-r--r--editor/translations/fa.po12
-rw-r--r--editor/translations/fi.po40
-rw-r--r--editor/translations/fil.po17
-rw-r--r--editor/translations/fr.po16
-rw-r--r--editor/translations/ga.po8
-rw-r--r--editor/translations/gl.po16
-rw-r--r--editor/translations/he.po16
-rw-r--r--editor/translations/hi.po23
-rw-r--r--editor/translations/hr.po8
-rw-r--r--editor/translations/hu.po40
-rw-r--r--editor/translations/id.po42
-rw-r--r--editor/translations/is.po8
-rw-r--r--editor/translations/it.po1535
-rw-r--r--editor/translations/ja.po22
-rw-r--r--editor/translations/ka.po8
-rw-r--r--editor/translations/km.po8
-rw-r--r--editor/translations/ko.po306
-rw-r--r--editor/translations/lt.po8
-rw-r--r--editor/translations/lv.po1872
-rw-r--r--editor/translations/mi.po8
-rw-r--r--editor/translations/mk.po23
-rw-r--r--editor/translations/ml.po8
-rw-r--r--editor/translations/mr.po8
-rw-r--r--editor/translations/ms.po8
-rw-r--r--editor/translations/nb.po20
-rw-r--r--editor/translations/nl.po36
-rw-r--r--editor/translations/or.po8
-rw-r--r--editor/translations/pl.po54
-rw-r--r--editor/translations/pr.po8
-rw-r--r--editor/translations/pt.po20
-rw-r--r--editor/translations/pt_BR.po582
-rw-r--r--editor/translations/ro.po114
-rw-r--r--editor/translations/ru.po23
-rw-r--r--editor/translations/si.po8
-rw-r--r--editor/translations/sk.po8
-rw-r--r--editor/translations/sl.po12
-rw-r--r--editor/translations/sq.po8
-rw-r--r--editor/translations/sr_Cyrl.po46
-rw-r--r--editor/translations/sr_Latn.po8
-rw-r--r--editor/translations/sv.po186
-rw-r--r--editor/translations/ta.po8
-rw-r--r--editor/translations/te.po8
-rw-r--r--editor/translations/th.po16
-rw-r--r--editor/translations/tl.po13819
-rw-r--r--editor/translations/tr.po307
-rw-r--r--editor/translations/tt.po8
-rw-r--r--editor/translations/tzm.po8
-rw-r--r--editor/translations/uk.po16
-rw-r--r--editor/translations/ur_PK.po8
-rw-r--r--editor/translations/vi.po16
-rw-r--r--editor/translations/zh_CN.po34
-rw-r--r--editor/translations/zh_HK.po12
-rw-r--r--editor/translations/zh_TW.po31
-rw-r--r--glsl_builders.py13
-rw-r--r--main/main.cpp48
-rw-r--r--methods.py2
-rw-r--r--misc/dist/html/editor.html10
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/af.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/ar.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/az.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/bg.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/bn.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/br.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/ca.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/cs.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/da.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/de.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/el.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/eo.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/es.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/es_AR.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/et.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/eu.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/fa.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/fi.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/fil.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/fr.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/ga.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/gl.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/he.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/hi.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/hr.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/hu.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/id.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/is.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/it.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/ja.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/ka.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/km.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/ko.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/lt.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/lv.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/mi.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/mk.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/ml.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/mr.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/ms.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/nb.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/nl.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/or.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/pl.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/pt.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/pt_BR.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/ro.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/ru.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/si.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/sk.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/sl.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/sq.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/sr-Cyrl.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/sr-Latn.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/sv.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/ta.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/te.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/th.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/tr.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/tt.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/tzm.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/uk.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/ur_PK.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/vi.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/zh_CN.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/zh_HK.lproj/InfoPlist.strings0
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/zh_TW.lproj/InfoPlist.strings0
-rw-r--r--misc/hooks/README.md2
-rwxr-xr-xmisc/hooks/pre-commit-black2
-rw-r--r--modules/bullet/area_bullet.cpp180
-rw-r--r--modules/bullet/area_bullet.h58
-rw-r--r--modules/bullet/bullet_physics_server.cpp17
-rw-r--r--modules/bullet/bullet_physics_server.h4
-rw-r--r--modules/bullet/collision_object_bullet.cpp17
-rw-r--r--modules/bullet/collision_object_bullet.h6
-rw-r--r--modules/bullet/rigid_body_bullet.cpp2
-rw-r--r--modules/bullet/soft_body_bullet.cpp2
-rw-r--r--modules/bullet/space_bullet.cpp150
-rw-r--r--modules/csg/csg.cpp16
-rw-r--r--modules/csg/csg_shape.cpp4
-rw-r--r--modules/csg/doc_classes/CSGShape3D.xml4
-rw-r--r--modules/denoise/config.py8
-rw-r--r--modules/enet/doc_classes/ENetMultiplayerPeer.xml2
-rw-r--r--modules/fbx/editor_scene_importer_fbx.cpp2
-rw-r--r--modules/gdnative/doc_classes/GDNativeLibrary.xml4
-rw-r--r--modules/gdnative/include/nativescript/godot_nativescript.h2
-rw-r--r--modules/gdnative/videodecoder/video_stream_gdnative.cpp2
-rw-r--r--modules/gdscript/doc_classes/@GDScript.xml16
-rw-r--r--modules/gdscript/doc_classes/GDScript.xml2
-rw-r--r--modules/gdscript/gdscript.cpp24
-rw-r--r--modules/gdscript/gdscript.h1
-rw-r--r--modules/gdscript/gdscript_analyzer.cpp2
-rw-r--r--modules/gdscript/gdscript_parser.cpp102
-rw-r--r--modules/gdscript/gdscript_tokenizer.cpp18
-rw-r--r--modules/gdscript/gdscript_tokenizer.h1
-rw-r--r--modules/gdscript/gdscript_utility_functions.cpp19
-rw-r--r--modules/gdscript/gdscript_vm.cpp2
-rw-r--r--modules/gdscript/gdscript_warning.cpp5
-rw-r--r--modules/gdscript/gdscript_warning.h1
-rw-r--r--modules/gdscript/language_server/gdscript_extend_parser.cpp2
-rw-r--r--modules/gdscript/language_server/gdscript_language_protocol.cpp2
-rw-r--r--modules/gdscript/language_server/gdscript_language_protocol.h2
-rw-r--r--modules/gdscript/tests/scripts/parser/errors/mixing_tabs_spaces.out2
-rw-r--r--modules/gdscript/tests/scripts/parser/warnings/shadowed_global_identifier.gd2
-rw-r--r--modules/gdscript/tests/scripts/parser/warnings/shadowed_global_identifier.out9
-rw-r--r--modules/gltf/doc_classes/GLTFMesh.xml2
-rw-r--r--modules/gltf/gltf_document.cpp62
-rw-r--r--modules/gltf/gltf_document.h3
-rw-r--r--modules/gltf/gltf_mesh.cpp11
-rw-r--r--modules/gltf/gltf_mesh.h3
-rw-r--r--modules/gridmap/doc_classes/GridMap.xml4
-rw-r--r--modules/gridmap/grid_map_editor_plugin.cpp64
-rw-r--r--modules/lightmapper_rd/lm_compute.glsl46
-rw-r--r--modules/minimp3/audio_stream_mp3.cpp6
-rw-r--r--modules/minimp3/resource_importer_mp3.cpp4
-rw-r--r--modules/minimp3/resource_importer_mp3.h4
-rw-r--r--modules/mono/build_scripts/make_android_mono_config.py4
-rw-r--r--modules/mono/csharp_script.cpp10
-rw-r--r--modules/mono/doc_classes/CSharpScript.xml7
-rw-r--r--modules/mono/doc_classes/GodotSharp.xml29
-rw-r--r--modules/mono/glue/GodotSharp/GodotSharp/Core/AABB.cs33
-rw-r--r--modules/mono/glue/GodotSharp/GodotSharp/Core/Basis.cs41
-rw-r--r--modules/mono/glue/GodotSharp/GodotSharp/Core/Color.cs172
-rw-r--r--modules/mono/glue/GodotSharp/GodotSharp/Core/Colors.cs2
-rw-r--r--modules/mono/glue/GodotSharp/GodotSharp/Core/Dictionary.cs6
-rw-r--r--modules/mono/glue/GodotSharp/GodotSharp/Core/GD.cs19
-rw-r--r--modules/mono/glue/GodotSharp/GodotSharp/Core/Mathf.cs18
-rw-r--r--modules/mono/glue/GodotSharp/GodotSharp/Core/Plane.cs31
-rw-r--r--modules/mono/glue/GodotSharp/GodotSharp/Core/Quaternion.cs128
-rw-r--r--modules/mono/glue/GodotSharp/GodotSharp/Core/Rect2.cs22
-rw-r--r--modules/mono/glue/GodotSharp/GodotSharp/Core/Rect2i.cs14
-rw-r--r--modules/mono/glue/GodotSharp/GodotSharp/Core/StringExtensions.cs2
-rw-r--r--modules/mono/glue/GodotSharp/GodotSharp/Core/Transform2D.cs39
-rw-r--r--modules/mono/glue/GodotSharp/GodotSharp/Core/Transform3D.cs39
-rw-r--r--modules/mono/glue/GodotSharp/GodotSharp/Core/Vector2.cs171
-rw-r--r--modules/mono/glue/GodotSharp/GodotSharp/Core/Vector2i.cs182
-rw-r--r--modules/mono/glue/GodotSharp/GodotSharp/Core/Vector3.cs167
-rw-r--r--modules/mono/glue/GodotSharp/GodotSharp/Core/Vector3i.cs194
-rw-r--r--modules/mono/glue/collections_glue.cpp4
-rw-r--r--modules/mono/glue/gd_glue.cpp23
-rw-r--r--modules/mono/mono_gd/gd_mono.cpp2
-rw-r--r--modules/navigation/godot_navigation_server.cpp8
-rw-r--r--modules/navigation/navigation_mesh_generator.cpp3
-rw-r--r--modules/ogg/ogg_packet_sequence.cpp6
-rw-r--r--modules/opensimplex/doc_classes/NoiseTexture.xml5
-rw-r--r--modules/opensimplex/noise_texture.cpp2
-rw-r--r--modules/opensimplex/noise_texture.h3
-rw-r--r--modules/raycast/config.py2
-rw-r--r--modules/text_server_adv/text_server_adv.cpp121
-rw-r--r--modules/text_server_adv/text_server_adv.h18
-rw-r--r--modules/text_server_fb/text_server_fb.cpp137
-rw-r--r--modules/text_server_fb/text_server_fb.h18
-rw-r--r--modules/theora/video_stream_theora.cpp2
-rw-r--r--modules/tinyexr/SCsub3
-rw-r--r--modules/tinyexr/image_loader_tinyexr.cpp2
-rw-r--r--modules/tinyexr/image_saver_tinyexr.cpp2
-rw-r--r--modules/upnp/SCsub4
-rw-r--r--modules/upnp/upnp.cpp6
-rw-r--r--modules/upnp/upnp.h2
-rw-r--r--modules/upnp/upnp_device.cpp2
-rw-r--r--modules/visual_script/SCsub3
-rw-r--r--modules/visual_script/doc_classes/VisualScript.xml2
-rw-r--r--modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml74
-rw-r--r--modules/visual_script/editor/visual_script_editor.cpp (renamed from modules/visual_script/visual_script_editor.cpp)386
-rw-r--r--modules/visual_script/editor/visual_script_editor.h (renamed from modules/visual_script/visual_script_editor.h)4
-rw-r--r--modules/visual_script/editor/visual_script_property_selector.cpp (renamed from modules/visual_script/visual_script_property_selector.cpp)18
-rw-r--r--modules/visual_script/editor/visual_script_property_selector.h (renamed from modules/visual_script/visual_script_property_selector.h)0
-rw-r--r--modules/visual_script/register_types.cpp3
-rw-r--r--modules/visual_script/visual_script.cpp6
-rw-r--r--modules/visual_script/visual_script_builtin_funcs.cpp52
-rw-r--r--modules/visual_script/visual_script_builtin_funcs.h4
-rw-r--r--modules/visual_script/visual_script_expression.cpp8
-rw-r--r--modules/visual_script/visual_script_func_nodes.cpp12
-rw-r--r--modules/visual_script/visual_script_nodes.cpp12
-rw-r--r--modules/visual_script/visual_script_yield_nodes.cpp4
-rw-r--r--modules/vorbis/audio_stream_ogg_vorbis.cpp2
-rw-r--r--modules/vorbis/resource_importer_ogg_vorbis.cpp4
-rw-r--r--modules/vorbis/resource_importer_ogg_vorbis.h4
-rw-r--r--modules/webp/SCsub1
-rw-r--r--modules/websocket/SCsub3
-rw-r--r--platform/android/android_input_handler.cpp76
-rw-r--r--platform/android/android_input_handler.h6
-rw-r--r--platform/android/android_keys_utils.cpp6
-rw-r--r--platform/android/android_keys_utils.h184
-rw-r--r--platform/android/display_server_android.cpp4
-rw-r--r--platform/android/export/export_plugin.cpp64
-rw-r--r--platform/android/export/gradle_export_util.cpp22
-rw-r--r--platform/android/export/gradle_export_util.h15
-rw-r--r--platform/android/java/app/AndroidManifest.xml5
-rw-r--r--platform/android/java/app/config.gradle4
-rw-r--r--platform/android/java/lib/AndroidManifest.xml3
-rw-r--r--platform/android/java/lib/src/org/godotengine/godot/Godot.java12
-rw-r--r--platform/android/java/lib/src/org/godotengine/godot/GodotGLRenderView.java25
-rw-r--r--platform/android/java/lib/src/org/godotengine/godot/GodotIO.java29
-rw-r--r--platform/android/java/lib/src/org/godotengine/godot/GodotLib.java3
-rw-r--r--platform/android/java/lib/src/org/godotengine/godot/GodotRenderer.java2
-rw-r--r--platform/android/java/lib/src/org/godotengine/godot/utils/GLUtils.java1
-rw-r--r--platform/android/java/lib/src/org/godotengine/godot/vulkan/VkRenderer.kt2
-rw-r--r--platform/android/java/lib/src/org/godotengine/godot/xr/XRMode.java2
-rw-r--r--platform/android/java/lib/src/org/godotengine/godot/xr/regular/RegularFallbackConfigChooser.java3
-rw-r--r--platform/android/java_godot_lib_jni.cpp29
-rw-r--r--platform/android/java_godot_lib_jni.h2
-rw-r--r--platform/android/os_android.cpp7
-rw-r--r--platform/android/os_android.h1
-rw-r--r--platform/iphone/display_server_iphone.mm2
-rw-r--r--platform/iphone/export/export_plugin.cpp10
-rw-r--r--platform/iphone/joypad_iphone.mm44
-rw-r--r--platform/iphone/keyboard_input_view.mm8
-rw-r--r--platform/javascript/detect.py21
-rw-r--r--platform/javascript/display_server_javascript.cpp151
-rw-r--r--platform/javascript/display_server_javascript.h9
-rw-r--r--platform/javascript/dom_keys.inc26
-rw-r--r--platform/javascript/export/export_plugin.cpp4
-rw-r--r--platform/javascript/js/libs/library_godot_input.js14
-rw-r--r--platform/javascript/os_javascript.cpp2
-rw-r--r--platform/javascript/os_javascript.h2
-rw-r--r--platform/linuxbsd/crash_handler_linuxbsd.cpp2
-rw-r--r--platform/linuxbsd/detect.py12
-rw-r--r--platform/linuxbsd/display_server_x11.cpp364
-rw-r--r--platform/linuxbsd/display_server_x11.h4
-rw-r--r--platform/linuxbsd/joypad_linux.cpp16
-rw-r--r--platform/linuxbsd/joypad_linux.h2
-rw-r--r--platform/linuxbsd/key_mapping_x11.cpp498
-rw-r--r--platform/linuxbsd/key_mapping_x11.h6
-rw-r--r--platform/osx/SCsub2
-rw-r--r--platform/osx/context_gl_osx.mm161
-rw-r--r--platform/osx/crash_handler_osx.mm7
-rw-r--r--platform/osx/detect.py9
-rw-r--r--platform/osx/display_server_osx.h19
-rw-r--r--platform/osx/display_server_osx.mm561
-rw-r--r--platform/osx/export/export_plugin.cpp17
-rw-r--r--platform/osx/gl_manager_osx.h106
-rw-r--r--platform/osx/gl_manager_osx.mm233
-rw-r--r--platform/osx/joypad_osx.cpp35
-rw-r--r--platform/osx/joypad_osx.h4
-rw-r--r--platform/osx/os_osx.h4
-rw-r--r--platform/osx/os_osx.mm81
-rw-r--r--platform/uwp/export/export_plugin.cpp2
-rw-r--r--platform/uwp/joypad_uwp.cpp12
-rw-r--r--platform/uwp/os_uwp.h4
-rw-r--r--platform/windows/detect.py10
-rw-r--r--platform/windows/display_server_windows.cpp69
-rw-r--r--platform/windows/display_server_windows.h2
-rw-r--r--platform/windows/gl_manager_windows.cpp7
-rw-r--r--platform/windows/joypad_windows.cpp30
-rw-r--r--platform/windows/key_mapping_windows.cpp538
-rw-r--r--platform/windows/key_mapping_windows.h4
-rw-r--r--platform/windows/os_windows.cpp16
-rw-r--r--scene/2d/area_2d.cpp123
-rw-r--r--scene/2d/area_2d.h28
-rw-r--r--scene/2d/audio_stream_player_2d.cpp10
-rw-r--r--scene/2d/camera_2d.cpp3
-rw-r--r--scene/2d/collision_object_2d.cpp2
-rw-r--r--scene/2d/cpu_particles_2d.cpp2
-rw-r--r--scene/2d/light_2d.cpp2
-rw-r--r--scene/2d/line_2d.cpp2
-rw-r--r--scene/2d/navigation_obstacle_2d.cpp65
-rw-r--r--scene/2d/navigation_obstacle_2d.h17
-rw-r--r--scene/2d/navigation_region_2d.cpp10
-rw-r--r--scene/2d/physics_body_2d.cpp66
-rw-r--r--scene/2d/physics_body_2d.h20
-rw-r--r--scene/2d/polygon_2d.cpp13
-rw-r--r--scene/2d/ray_cast_2d.cpp32
-rw-r--r--scene/2d/ray_cast_2d.h5
-rw-r--r--scene/2d/shape_cast_2d.cpp459
-rw-r--r--scene/2d/shape_cast_2d.h120
-rw-r--r--scene/2d/skeleton_2d.cpp2
-rw-r--r--scene/2d/sprite_2d.cpp2
-rw-r--r--scene/2d/tile_map.cpp39
-rw-r--r--scene/3d/area_3d.cpp124
-rw-r--r--scene/3d/area_3d.h29
-rw-r--r--scene/3d/audio_stream_player_3d.cpp10
-rw-r--r--scene/3d/camera_3d.cpp6
-rw-r--r--scene/3d/collision_object_3d.cpp2
-rw-r--r--scene/3d/cpu_particles_3d.cpp2
-rw-r--r--scene/3d/decal.cpp5
-rw-r--r--scene/3d/fog_volume.cpp1
-rw-r--r--scene/3d/gpu_particles_collision_3d.cpp6
-rw-r--r--scene/3d/light_3d.cpp6
-rw-r--r--scene/3d/lightmap_gi.cpp6
-rw-r--r--scene/3d/mesh_instance_3d.cpp14
-rw-r--r--scene/3d/navigation_obstacle_3d.cpp65
-rw-r--r--scene/3d/navigation_obstacle_3d.h17
-rw-r--r--scene/3d/node_3d.cpp4
-rw-r--r--scene/3d/occluder_instance_3d.cpp7
-rw-r--r--scene/3d/physics_body_3d.cpp128
-rw-r--r--scene/3d/physics_body_3d.h40
-rw-r--r--scene/3d/ray_cast_3d.cpp32
-rw-r--r--scene/3d/ray_cast_3d.h9
-rw-r--r--scene/3d/reflection_probe.cpp6
-rw-r--r--scene/3d/skeleton_3d.cpp16
-rw-r--r--scene/3d/soft_dynamic_body_3d.cpp2
-rw-r--r--scene/3d/spring_arm_3d.cpp27
-rw-r--r--scene/3d/vehicle_body_3d.cpp8
-rw-r--r--scene/3d/voxel_gi.cpp4
-rw-r--r--scene/animation/animation_blend_space_1d.cpp12
-rw-r--r--scene/animation/animation_blend_space_2d.cpp31
-rw-r--r--scene/animation/animation_blend_tree.cpp87
-rw-r--r--scene/animation/animation_blend_tree.h26
-rw-r--r--scene/animation/animation_node_state_machine.cpp20
-rw-r--r--scene/animation/animation_player.cpp143
-rw-r--r--scene/animation/animation_player.h2
-rw-r--r--scene/animation/animation_tree.cpp281
-rw-r--r--scene/animation/animation_tree.h4
-rw-r--r--scene/animation/tween.cpp2
-rw-r--r--scene/audio/audio_stream_player.cpp2
-rw-r--r--scene/gui/base_button.cpp6
-rw-r--r--scene/gui/base_button.h6
-rw-r--r--scene/gui/box_container.cpp2
-rw-r--r--scene/gui/code_edit.cpp69
-rw-r--r--scene/gui/color_picker.cpp24
-rw-r--r--scene/gui/control.cpp10
-rw-r--r--scene/gui/control.h2
-rw-r--r--scene/gui/dialogs.cpp2
-rw-r--r--scene/gui/file_dialog.cpp6
-rw-r--r--scene/gui/gradient_edit.cpp116
-rw-r--r--scene/gui/gradient_edit.h7
-rw-r--r--scene/gui/graph_edit.cpp73
-rw-r--r--scene/gui/graph_edit.h5
-rw-r--r--scene/gui/graph_node.cpp4
-rw-r--r--scene/gui/item_list.cpp25
-rw-r--r--scene/gui/label.cpp10
-rw-r--r--scene/gui/line_edit.cpp141
-rw-r--r--scene/gui/line_edit.h9
-rw-r--r--scene/gui/menu_button.cpp74
-rw-r--r--scene/gui/menu_button.h9
-rw-r--r--scene/gui/option_button.cpp2
-rw-r--r--scene/gui/popup.cpp4
-rw-r--r--scene/gui/popup_menu.cpp265
-rw-r--r--scene/gui/popup_menu.h30
-rw-r--r--scene/gui/range.cpp14
-rw-r--r--scene/gui/range.h1
-rw-r--r--scene/gui/rich_text_label.cpp100
-rw-r--r--scene/gui/rich_text_label.h2
-rw-r--r--scene/gui/scroll_bar.cpp8
-rw-r--r--scene/gui/scroll_container.cpp14
-rw-r--r--scene/gui/slider.cpp6
-rw-r--r--scene/gui/spin_box.cpp16
-rw-r--r--scene/gui/split_container.cpp2
-rw-r--r--scene/gui/tab_bar.cpp14
-rw-r--r--scene/gui/tab_container.cpp2
-rw-r--r--scene/gui/text_edit.cpp244
-rw-r--r--scene/gui/text_edit.h28
-rw-r--r--scene/gui/tree.cpp66
-rw-r--r--scene/gui/tree.h4
-rw-r--r--scene/main/canvas_item.cpp1
-rw-r--r--scene/main/canvas_layer.cpp2
-rw-r--r--scene/main/node.cpp76
-rw-r--r--scene/main/node.h10
-rw-r--r--scene/main/resource_preloader.cpp2
-rw-r--r--scene/main/viewport.cpp194
-rw-r--r--scene/main/viewport.h34
-rw-r--r--scene/main/window.cpp7
-rw-r--r--scene/main/window.h1
-rw-r--r--scene/property_utils.cpp188
-rw-r--r--scene/property_utils.h (renamed from platform/osx/context_gl_osx.h)57
-rw-r--r--scene/register_scene_types.cpp6
-rw-r--r--scene/resources/animation.cpp871
-rw-r--r--scene/resources/animation.h40
-rw-r--r--scene/resources/audio_stream_sample.cpp8
-rw-r--r--scene/resources/audio_stream_sample.h2
-rw-r--r--scene/resources/bit_map.cpp2
-rw-r--r--scene/resources/camera_effects.cpp2
-rw-r--r--scene/resources/concave_polygon_shape_3d.cpp2
-rw-r--r--scene/resources/curve.cpp14
-rw-r--r--scene/resources/default_theme/default_theme.cpp2
-rw-r--r--scene/resources/environment.cpp20
-rw-r--r--scene/resources/font.cpp69
-rw-r--r--scene/resources/font.h9
-rw-r--r--scene/resources/gradient.cpp32
-rw-r--r--scene/resources/gradient.h57
-rw-r--r--scene/resources/importer_mesh.cpp2
-rw-r--r--scene/resources/material.cpp12
-rw-r--r--scene/resources/mesh.cpp4
-rw-r--r--scene/resources/mesh_data_tool.cpp2
-rw-r--r--scene/resources/navigation_mesh.cpp4
-rw-r--r--scene/resources/packed_scene.cpp218
-rw-r--r--scene/resources/packed_scene.h16
-rw-r--r--scene/resources/particles_material.cpp2
-rw-r--r--scene/resources/polygon_path_finder.cpp2
-rw-r--r--scene/resources/resource_format_text.cpp8
-rw-r--r--scene/resources/shader.cpp36
-rw-r--r--scene/resources/shader.h6
-rw-r--r--scene/resources/skeleton_modification_2d_ccdik.cpp4
-rw-r--r--scene/resources/skeleton_modification_2d_jiggle.cpp8
-rw-r--r--scene/resources/skeleton_modification_3d_jiggle.cpp8
-rw-r--r--scene/resources/skeleton_modification_stack_2d.cpp3
-rw-r--r--scene/resources/skeleton_modification_stack_3d.cpp5
-rw-r--r--scene/resources/skin.cpp2
-rw-r--r--scene/resources/sky_material.cpp16
-rw-r--r--scene/resources/sprite_frames.cpp4
-rw-r--r--scene/resources/style_box.cpp2
-rw-r--r--scene/resources/syntax_highlighter.cpp2
-rw-r--r--scene/resources/text_paragraph.cpp14
-rw-r--r--scene/resources/text_paragraph.h3
-rw-r--r--scene/resources/texture.cpp50
-rw-r--r--scene/resources/texture.h11
-rw-r--r--scene/resources/tile_set.cpp342
-rw-r--r--scene/resources/tile_set.h44
-rw-r--r--scene/resources/visual_shader.cpp69
-rw-r--r--scene/resources/visual_shader.h9
-rw-r--r--scene/resources/visual_shader_nodes.cpp17
-rw-r--r--scene/resources/visual_shader_particle_nodes.cpp508
-rw-r--r--scene/resources/visual_shader_particle_nodes.h64
-rw-r--r--scene/resources/world_3d.cpp4
-rw-r--r--servers/audio_server.cpp22
-rw-r--r--servers/camera_server.cpp2
-rw-r--r--servers/display_server.cpp2
-rw-r--r--servers/display_server_headless.h16
-rw-r--r--servers/physics_2d/godot_area_2d.cpp156
-rw-r--r--servers/physics_2d/godot_area_2d.h24
-rw-r--r--servers/physics_2d/godot_area_pair_2d.cpp30
-rw-r--r--servers/physics_2d/godot_area_pair_2d.h3
-rw-r--r--servers/physics_2d/godot_body_2d.cpp191
-rw-r--r--servers/physics_2d/godot_body_2d.h29
-rw-r--r--servers/physics_2d/godot_body_direct_state_2d.cpp8
-rw-r--r--servers/physics_2d/godot_body_direct_state_2d.h1
-rw-r--r--servers/physics_2d/godot_body_pair_2d.cpp7
-rw-r--r--servers/physics_2d/godot_collision_object_2d.cpp2
-rw-r--r--servers/physics_2d/godot_physics_server_2d.cpp35
-rw-r--r--servers/physics_2d/godot_physics_server_2d.h7
-rw-r--r--servers/physics_2d/godot_space_2d.cpp137
-rw-r--r--servers/physics_2d/godot_space_2d.h15
-rw-r--r--servers/physics_2d/godot_step_2d.cpp10
-rw-r--r--servers/physics_3d/godot_area_3d.cpp154
-rw-r--r--servers/physics_3d/godot_area_3d.h25
-rw-r--r--servers/physics_3d/godot_area_pair_3d.cpp47
-rw-r--r--servers/physics_3d/godot_area_pair_3d.h4
-rw-r--r--servers/physics_3d/godot_body_3d.cpp183
-rw-r--r--servers/physics_3d/godot_body_3d.h26
-rw-r--r--servers/physics_3d/godot_body_direct_state_3d.cpp8
-rw-r--r--servers/physics_3d/godot_body_direct_state_3d.h1
-rw-r--r--servers/physics_3d/godot_body_pair_3d.cpp21
-rw-r--r--servers/physics_3d/godot_collision_object_3d.cpp4
-rw-r--r--servers/physics_3d/godot_collision_solver_3d.cpp8
-rw-r--r--servers/physics_3d/godot_collision_solver_3d_sat.cpp79
-rw-r--r--servers/physics_3d/godot_physics_server_3d.cpp35
-rw-r--r--servers/physics_3d/godot_physics_server_3d.h7
-rw-r--r--servers/physics_3d/godot_shape_3d.cpp40
-rw-r--r--servers/physics_3d/godot_shape_3d.h45
-rw-r--r--servers/physics_3d/godot_soft_body_3d.cpp104
-rw-r--r--servers/physics_3d/godot_soft_body_3d.h27
-rw-r--r--servers/physics_3d/godot_space_3d.cpp116
-rw-r--r--servers/physics_3d/godot_space_3d.h12
-rw-r--r--servers/physics_3d/godot_step_3d.cpp10
-rw-r--r--servers/physics_server_2d.cpp276
-rw-r--r--servers/physics_server_2d.h227
-rw-r--r--servers/physics_server_2d_wrap_mt.h7
-rw-r--r--servers/physics_server_3d.cpp233
-rw-r--r--servers/physics_server_3d.h231
-rw-r--r--servers/physics_server_3d_wrap_mt.h7
-rw-r--r--servers/register_server_types.cpp8
-rw-r--r--servers/rendering/rasterizer_dummy.h8
-rw-r--r--servers/rendering/renderer_canvas_cull.h2
-rw-r--r--servers/rendering/renderer_compositor.h3
-rw-r--r--servers/rendering/renderer_rd/cluster_builder_rd.cpp8
-rw-r--r--servers/rendering/renderer_rd/effects_rd.cpp59
-rw-r--r--servers/rendering/renderer_rd/effects_rd.h24
-rw-r--r--servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp82
-rw-r--r--servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.h9
-rw-r--r--servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.cpp17
-rw-r--r--servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.h4
-rw-r--r--servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.cpp14
-rw-r--r--servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.h3
-rw-r--r--servers/rendering/renderer_rd/forward_mobile/scene_shader_forward_mobile.cpp17
-rw-r--r--servers/rendering/renderer_rd/forward_mobile/scene_shader_forward_mobile.h4
-rw-r--r--servers/rendering/renderer_rd/renderer_canvas_render_rd.cpp19
-rw-r--r--servers/rendering/renderer_rd/renderer_canvas_render_rd.h4
-rw-r--r--servers/rendering/renderer_rd/renderer_compositor_rd.cpp6
-rw-r--r--servers/rendering/renderer_rd/renderer_compositor_rd.h2
-rw-r--r--servers/rendering/renderer_rd/renderer_scene_gi_rd.cpp16
-rw-r--r--servers/rendering/renderer_rd/renderer_scene_render_rd.cpp231
-rw-r--r--servers/rendering/renderer_rd/renderer_scene_render_rd.h19
-rw-r--r--servers/rendering/renderer_rd/renderer_scene_sky_rd.cpp15
-rw-r--r--servers/rendering/renderer_rd/renderer_scene_sky_rd.h4
-rw-r--r--servers/rendering/renderer_rd/renderer_storage_rd.cpp171
-rw-r--r--servers/rendering/renderer_rd/renderer_storage_rd.h24
-rw-r--r--servers/rendering/renderer_rd/shader_compiler_rd.cpp21
-rw-r--r--servers/rendering/renderer_rd/shader_rd.cpp3
-rw-r--r--servers/rendering/renderer_rd/shaders/fsr_upscale.glsl173
-rw-r--r--servers/rendering/renderer_rd/shaders/scene_forward_clustered.glsl31
-rw-r--r--servers/rendering/renderer_rd/shaders/scene_forward_clustered_inc.glsl3
-rw-r--r--servers/rendering/renderer_rd/shaders/scene_forward_lights_inc.glsl37
-rw-r--r--servers/rendering/renderer_rd/shaders/scene_forward_mobile.glsl27
-rw-r--r--servers/rendering/renderer_rd/shaders/scene_forward_mobile_inc.glsl3
-rw-r--r--servers/rendering/renderer_rd/shaders/volumetric_fog.glsl38
-rw-r--r--servers/rendering/renderer_rd/shaders/volumetric_fog_process.glsl35
-rw-r--r--servers/rendering/renderer_scene.h2
-rw-r--r--servers/rendering/renderer_scene_cull.cpp5
-rw-r--r--servers/rendering/renderer_scene_cull.h17
-rw-r--r--servers/rendering/renderer_scene_render.h2
-rw-r--r--servers/rendering/renderer_storage.h4
-rw-r--r--servers/rendering/renderer_viewport.cpp110
-rw-r--r--servers/rendering/renderer_viewport.h15
-rw-r--r--servers/rendering/rendering_device.h1
-rw-r--r--servers/rendering/rendering_device_binds.h2
-rw-r--r--servers/rendering/rendering_server_default.cpp26
-rw-r--r--servers/rendering/rendering_server_default.h20
-rw-r--r--servers/rendering/shader_language.cpp31
-rw-r--r--servers/rendering_server.cpp44
-rw-r--r--servers/rendering_server.h21
-rw-r--r--servers/text/text_server_extension.cpp69
-rw-r--r--servers/text/text_server_extension.h22
-rw-r--r--servers/text_server.cpp47
-rw-r--r--servers/text_server.h21
-rw-r--r--servers/xr_server.cpp4
-rw-r--r--tests/SCsub5
-rw-r--r--tests/core/io/test_config_file.h (renamed from tests/test_config_file.h)1
-rw-r--r--tests/core/io/test_file_access.h (renamed from tests/test_file_access.h)3
-rw-r--r--tests/core/io/test_image.h (renamed from tests/test_image.h)54
-rw-r--r--tests/core/io/test_json.h (renamed from tests/test_json.h)0
-rw-r--r--tests/core/io/test_marshalls.h (renamed from tests/test_marshalls.h)0
-rw-r--r--tests/core/io/test_pck_packer.h (renamed from tests/test_pck_packer.h)30
-rw-r--r--tests/core/io/test_resource.h (renamed from tests/test_resource.h)0
-rw-r--r--tests/core/io/test_xml_parser.h (renamed from tests/test_xml_parser.h)3
-rw-r--r--tests/core/math/test_aabb.h (renamed from tests/test_aabb.h)34
-rw-r--r--tests/core/math/test_astar.h (renamed from tests/test_astar.h)5
-rw-r--r--tests/core/math/test_basis.h (renamed from tests/test_basis.h)3
-rw-r--r--tests/core/math/test_color.h (renamed from tests/test_color.h)2
-rw-r--r--tests/core/math/test_expression.h (renamed from tests/test_expression.h)0
-rw-r--r--tests/core/math/test_geometry_2d.h (renamed from tests/test_geometry_2d.h)1
-rw-r--r--tests/core/math/test_geometry_3d.h (renamed from tests/test_geometry_3d.h)4
-rw-r--r--tests/core/math/test_math.cpp (renamed from tests/test_math.cpp)14
-rw-r--r--tests/core/math/test_math.h (renamed from tests/test_math.h)2
-rw-r--r--tests/core/math/test_random_number_generator.h (renamed from tests/test_random_number_generator.h)0
-rw-r--r--tests/core/math/test_rect2.h (renamed from tests/test_rect2.h)136
-rw-r--r--tests/core/object/test_class_db.h (renamed from tests/test_class_db.h)9
-rw-r--r--tests/core/object/test_method_bind.h (renamed from tests/test_method_bind.h)4
-rw-r--r--tests/core/object/test_object.h (renamed from tests/test_object.h)4
-rw-r--r--tests/core/string/test_node_path.h (renamed from tests/test_node_path.h)2
-rw-r--r--tests/core/string/test_string.h (renamed from tests/test_string.h)14
-rw-r--r--tests/core/string/test_translation.h (renamed from tests/test_translation.h)3
-rw-r--r--tests/core/templates/test_command_queue.h (renamed from tests/test_command_queue.h)4
-rw-r--r--tests/core/templates/test_list.h (renamed from tests/test_list.h)0
-rw-r--r--tests/core/templates/test_local_vector.h (renamed from tests/test_local_vector.h)24
-rw-r--r--tests/core/templates/test_lru.h (renamed from tests/test_lru.h)1
-rw-r--r--tests/core/templates/test_oa_hash_map.cpp (renamed from tests/test_oa_hash_map.cpp)0
-rw-r--r--tests/core/templates/test_oa_hash_map.h (renamed from tests/test_oa_hash_map.h)2
-rw-r--r--tests/core/templates/test_ordered_hash_map.h (renamed from tests/test_ordered_hash_map.h)3
-rw-r--r--tests/core/templates/test_paged_array.h (renamed from tests/test_paged_array.h)0
-rw-r--r--tests/core/templates/test_vector.h (renamed from tests/test_vector.h)34
-rw-r--r--tests/core/test_crypto.h (renamed from tests/test_crypto.h)1
-rw-r--r--tests/core/test_hashing_context.h (renamed from tests/test_hashing_context.h)0
-rw-r--r--tests/core/test_time.h (renamed from tests/test_time.h)0
-rw-r--r--tests/core/variant/test_array.h (renamed from tests/test_array.h)250
-rw-r--r--tests/core/variant/test_dictionary.h505
-rw-r--r--tests/core/variant/test_variant.h (renamed from tests/test_variant.h)211
-rw-r--r--tests/scene/test_code_edit.h (renamed from tests/test_code_edit.h)117
-rw-r--r--tests/scene/test_curve.h (renamed from tests/test_curve.h)2
-rw-r--r--tests/scene/test_gradient.h (renamed from tests/test_gradient.h)2
-rw-r--r--tests/scene/test_gui.cpp (renamed from tests/test_gui.cpp)13
-rw-r--r--tests/scene/test_gui.h (renamed from tests/test_gui.h)2
-rw-r--r--tests/scene/test_path_3d.h (renamed from tests/test_path_3d.h)1
-rw-r--r--tests/scene/test_path_follow_2d.h (renamed from tests/test_path_follow_2d.h)1
-rw-r--r--tests/scene/test_path_follow_3d.h (renamed from tests/test_path_follow_3d.h)1
-rw-r--r--tests/servers/test_physics_2d.cpp (renamed from tests/test_physics_2d.cpp)13
-rw-r--r--tests/servers/test_physics_2d.h (renamed from tests/test_physics_2d.h)2
-rw-r--r--tests/servers/test_physics_3d.cpp (renamed from tests/test_physics_3d.cpp)10
-rw-r--r--tests/servers/test_physics_3d.h (renamed from tests/test_physics_3d.h)2
-rw-r--r--tests/servers/test_render.cpp (renamed from tests/test_render.cpp)5
-rw-r--r--tests/servers/test_render.h (renamed from tests/test_render.h)4
-rw-r--r--tests/servers/test_shader_lang.cpp (renamed from tests/test_shader_lang.cpp)5
-rw-r--r--tests/servers/test_shader_lang.h (renamed from tests/test_shader_lang.h)2
-rw-r--r--tests/servers/test_text_server.h (renamed from tests/test_text_server.h)0
-rw-r--r--tests/test_dictionary.h159
-rw-r--r--tests/test_macros.h9
-rw-r--r--tests/test_main.cpp102
-rw-r--r--tests/test_tools.h2
-rw-r--r--tests/test_utils.cpp2
-rw-r--r--tests/test_utils.h2
-rw-r--r--thirdparty/README.md90
-rw-r--r--thirdparty/amd-fsr/ffx_a.h2656
-rw-r--r--thirdparty/amd-fsr/ffx_fsr1.h1199
-rw-r--r--thirdparty/amd-fsr/license.txt19
-rw-r--r--thirdparty/basis_universal/encoder/apg_bmp.c4
-rw-r--r--thirdparty/basis_universal/encoder/basisu_bc7enc.cpp37
-rw-r--r--thirdparty/basis_universal/encoder/basisu_bc7enc.h1
-rw-r--r--thirdparty/basis_universal/encoder/basisu_comp.cpp10
-rw-r--r--thirdparty/basis_universal/encoder/basisu_enc.cpp4
-rw-r--r--thirdparty/basis_universal/encoder/basisu_enc.h10
-rw-r--r--thirdparty/basis_universal/encoder/basisu_resampler.cpp8
-rw-r--r--thirdparty/basis_universal/encoder/cppspmd_sse.h34
-rw-r--r--thirdparty/basis_universal/transcoder/basisu_transcoder.cpp4
-rw-r--r--thirdparty/certs/ca-certificates.crt159
-rw-r--r--thirdparty/embree/common/sys/platform.h2
-rw-r--r--thirdparty/embree/kernels/common/rtcore.h2
-rw-r--r--thirdparty/embree/patches/godot-changes-noexcept.patch4
-rw-r--r--thirdparty/graphite/ChangeLog238
-rw-r--r--thirdparty/graphite/src/Pass.cpp9
-rw-r--r--thirdparty/harfbuzz/src/hb-aat-layout-bsln-table.hh4
-rw-r--r--thirdparty/harfbuzz/src/hb-aat-layout-common.hh18
-rw-r--r--thirdparty/harfbuzz/src/hb-aat-layout-just-table.hh8
-rw-r--r--thirdparty/harfbuzz/src/hb-aat-layout-kerx-table.hh14
-rw-r--r--thirdparty/harfbuzz/src/hb-aat-layout-morx-table.hh42
-rw-r--r--thirdparty/harfbuzz/src/hb-algs.hh99
-rw-r--r--thirdparty/harfbuzz/src/hb-array.hh14
-rw-r--r--thirdparty/harfbuzz/src/hb-atomic.hh10
-rw-r--r--thirdparty/harfbuzz/src/hb-bimap.hh15
-rw-r--r--thirdparty/harfbuzz/src/hb-bit-set-invertible.hh18
-rw-r--r--thirdparty/harfbuzz/src/hb-bit-set.hh25
-rw-r--r--thirdparty/harfbuzz/src/hb-buffer.cc42
-rw-r--r--thirdparty/harfbuzz/src/hb-buffer.h7
-rw-r--r--thirdparty/harfbuzz/src/hb-buffer.hh1
-rw-r--r--thirdparty/harfbuzz/src/hb-debug.hh8
-rw-r--r--thirdparty/harfbuzz/src/hb-directwrite.cc36
-rw-r--r--thirdparty/harfbuzz/src/hb-dispatch.hh2
-rw-r--r--thirdparty/harfbuzz/src/hb-font.hh14
-rw-r--r--thirdparty/harfbuzz/src/hb-iter.hh14
-rw-r--r--thirdparty/harfbuzz/src/hb-map.hh69
-rw-r--r--thirdparty/harfbuzz/src/hb-meta.hh197
-rw-r--r--thirdparty/harfbuzz/src/hb-mutex.hh37
-rw-r--r--thirdparty/harfbuzz/src/hb-open-type.hh49
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-cff-common.hh2
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-cmap-table.hh4
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-color-cbdt-table.hh8
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-color-colr-table.hh741
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-color-colrv1-closure.hh53
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-glyf-table.hh4
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-head-table.hh4
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-kern-table.hh8
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-layout-base-table.hh2
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-layout-common.hh118
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-layout-gdef-table.hh10
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-layout-gpos-table.hh52
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-layout-gsub-table.hh156
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-layout-gsubgpos.hh251
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-layout-jstf-table.hh2
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-layout.cc44
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-layout.hh6
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-math-table.hh333
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-name.h30
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-shape-complex-arabic-fallback.hh14
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-shape-complex-arabic.cc2
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-shape-complex-indic.cc3
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-shape-complex-khmer.hh4
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-shape-complex-myanmar-machine.hh473
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-shape-complex-myanmar.cc2
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-shape-complex-myanmar.hh10
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-shape-complex-use-machine.hh533
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-shape-complex-use-table.hh350
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-shape-complex-use.cc1
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-shape-normalize.cc5
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-shape-normalize.hh1
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-shape.cc12
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-var-common.hh264
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-var-hvar-table.hh88
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-vorg-table.hh2
-rw-r--r--thirdparty/harfbuzz/src/hb-repacker.hh737
-rw-r--r--thirdparty/harfbuzz/src/hb-sanitize.hh6
-rw-r--r--thirdparty/harfbuzz/src/hb-serialize.hh62
-rw-r--r--thirdparty/harfbuzz/src/hb-set-digest.hh14
-rw-r--r--thirdparty/harfbuzz/src/hb-set.hh32
-rw-r--r--thirdparty/harfbuzz/src/hb-style.cc4
-rw-r--r--thirdparty/harfbuzz/src/hb-subset-input.hh22
-rw-r--r--thirdparty/harfbuzz/src/hb-subset-plan.cc76
-rw-r--r--thirdparty/harfbuzz/src/hb-subset-plan.hh1
-rw-r--r--thirdparty/harfbuzz/src/hb-subset.cc4
-rw-r--r--thirdparty/harfbuzz/src/hb-subset.hh6
-rw-r--r--thirdparty/harfbuzz/src/hb-unicode.hh5
-rw-r--r--thirdparty/harfbuzz/src/hb-vector.hh57
-rw-r--r--thirdparty/harfbuzz/src/hb-version.h6
-rw-r--r--thirdparty/harfbuzz/src/hb.hh1
-rw-r--r--thirdparty/libogg/framing.c9
-rw-r--r--thirdparty/libogg/ogg/config_types.h15
-rw-r--r--thirdparty/libvorbis/COPYING2
-rw-r--r--thirdparty/libvorbis/analysis.c2
-rw-r--r--thirdparty/libvorbis/backends.h2
-rw-r--r--thirdparty/libvorbis/barkmel.c2
-rw-r--r--thirdparty/libvorbis/bitrate.c2
-rw-r--r--thirdparty/libvorbis/bitrate.h2
-rw-r--r--thirdparty/libvorbis/block.c2
-rw-r--r--thirdparty/libvorbis/books/coupled/res_books_51.h2
-rw-r--r--thirdparty/libvorbis/books/coupled/res_books_stereo.h2
-rw-r--r--thirdparty/libvorbis/books/floor/floor_books.h2
-rw-r--r--thirdparty/libvorbis/books/uncoupled/res_books_uncoupled.h2
-rw-r--r--thirdparty/libvorbis/codebook.c2
-rw-r--r--thirdparty/libvorbis/codebook.h2
-rw-r--r--thirdparty/libvorbis/codec_internal.h2
-rw-r--r--thirdparty/libvorbis/envelope.c2
-rw-r--r--thirdparty/libvorbis/envelope.h2
-rw-r--r--thirdparty/libvorbis/floor0.c2
-rw-r--r--thirdparty/libvorbis/floor1.c2
-rw-r--r--thirdparty/libvorbis/highlevel.h2
-rw-r--r--thirdparty/libvorbis/info.c22
-rw-r--r--thirdparty/libvorbis/lookup.c2
-rw-r--r--thirdparty/libvorbis/lookup.h2
-rw-r--r--thirdparty/libvorbis/lookup_data.h2
-rw-r--r--thirdparty/libvorbis/lpc.c2
-rw-r--r--thirdparty/libvorbis/lpc.h2
-rw-r--r--thirdparty/libvorbis/lsp.c5
-rw-r--r--thirdparty/libvorbis/lsp.h2
-rw-r--r--thirdparty/libvorbis/mapping0.c2
-rw-r--r--thirdparty/libvorbis/masking.h2
-rw-r--r--thirdparty/libvorbis/mdct.c2
-rw-r--r--thirdparty/libvorbis/mdct.h2
-rw-r--r--thirdparty/libvorbis/misc.h2
-rw-r--r--thirdparty/libvorbis/modes/floor_all.h2
-rw-r--r--thirdparty/libvorbis/modes/psych_11.h2
-rw-r--r--thirdparty/libvorbis/modes/psych_16.h2
-rw-r--r--thirdparty/libvorbis/modes/psych_44.h2
-rw-r--r--thirdparty/libvorbis/modes/psych_8.h2
-rw-r--r--thirdparty/libvorbis/modes/residue_16.h2
-rw-r--r--thirdparty/libvorbis/modes/residue_44.h2
-rw-r--r--thirdparty/libvorbis/modes/residue_44p51.h2
-rw-r--r--thirdparty/libvorbis/modes/residue_44u.h2
-rw-r--r--thirdparty/libvorbis/modes/residue_8.h2
-rw-r--r--thirdparty/libvorbis/modes/setup_11.h2
-rw-r--r--thirdparty/libvorbis/modes/setup_16.h2
-rw-r--r--thirdparty/libvorbis/modes/setup_22.h2
-rw-r--r--thirdparty/libvorbis/modes/setup_32.h2
-rw-r--r--thirdparty/libvorbis/modes/setup_44.h2
-rw-r--r--thirdparty/libvorbis/modes/setup_44p51.h2
-rw-r--r--thirdparty/libvorbis/modes/setup_44u.h2
-rw-r--r--thirdparty/libvorbis/modes/setup_8.h2
-rw-r--r--thirdparty/libvorbis/modes/setup_X.h2
-rw-r--r--thirdparty/libvorbis/os.h13
-rw-r--r--thirdparty/libvorbis/psy.c26
-rw-r--r--thirdparty/libvorbis/psy.h2
-rw-r--r--thirdparty/libvorbis/psytune.c2
-rw-r--r--thirdparty/libvorbis/registry.c2
-rw-r--r--thirdparty/libvorbis/registry.h2
-rw-r--r--thirdparty/libvorbis/res0.c5
-rw-r--r--thirdparty/libvorbis/scales.h2
-rw-r--r--thirdparty/libvorbis/sharedbook.c17
-rw-r--r--thirdparty/libvorbis/smallft.c2
-rw-r--r--thirdparty/libvorbis/smallft.h2
-rw-r--r--thirdparty/libvorbis/synthesis.c2
-rw-r--r--thirdparty/libvorbis/vorbis/codec.h2
-rw-r--r--thirdparty/libvorbis/vorbis/vorbisenc.h2
-rw-r--r--thirdparty/libvorbis/vorbis/vorbisfile.h2
-rw-r--r--thirdparty/libvorbis/vorbisenc.c5
-rw-r--r--thirdparty/libvorbis/vorbisfile.c25
-rw-r--r--thirdparty/libvorbis/window.c2
-rw-r--r--thirdparty/libvorbis/window.h2
-rw-r--r--thirdparty/libwebp/AUTHORS9
-rw-r--r--thirdparty/libwebp/src/dec/alpha_dec.c2
-rw-r--r--thirdparty/libwebp/src/dec/buffer_dec.c10
-rw-r--r--thirdparty/libwebp/src/dec/frame_dec.c2
-rw-r--r--thirdparty/libwebp/src/dec/io_dec.c151
-rw-r--r--thirdparty/libwebp/src/dec/vp8_dec.c14
-rw-r--r--thirdparty/libwebp/src/dec/vp8i_dec.h4
-rw-r--r--thirdparty/libwebp/src/dec/vp8l_dec.c23
-rw-r--r--thirdparty/libwebp/src/dec/webp_dec.c17
-rw-r--r--thirdparty/libwebp/src/dec/webpi_dec.h4
-rw-r--r--thirdparty/libwebp/src/demux/anim_decode.c23
-rw-r--r--thirdparty/libwebp/src/demux/demux.c25
-rw-r--r--thirdparty/libwebp/src/dsp/alpha_processing.c73
-rw-r--r--thirdparty/libwebp/src/dsp/alpha_processing_neon.c21
-rw-r--r--thirdparty/libwebp/src/dsp/alpha_processing_sse2.c42
-rw-r--r--thirdparty/libwebp/src/dsp/alpha_processing_sse41.c6
-rw-r--r--thirdparty/libwebp/src/dsp/cost.c4
-rw-r--r--thirdparty/libwebp/src/dsp/cpu.c45
-rw-r--r--thirdparty/libwebp/src/dsp/dec.c6
-rw-r--r--thirdparty/libwebp/src/dsp/dec_neon.c68
-rw-r--r--thirdparty/libwebp/src/dsp/dsp.h106
-rw-r--r--thirdparty/libwebp/src/dsp/enc.c6
-rw-r--r--thirdparty/libwebp/src/dsp/filters.c4
-rw-r--r--thirdparty/libwebp/src/dsp/filters_sse2.c5
-rw-r--r--thirdparty/libwebp/src/dsp/lossless.c66
-rw-r--r--thirdparty/libwebp/src/dsp/lossless.h17
-rw-r--r--thirdparty/libwebp/src/dsp/lossless_common.h13
-rw-r--r--thirdparty/libwebp/src/dsp/lossless_enc.c198
-rw-r--r--thirdparty/libwebp/src/dsp/lossless_enc_sse2.c133
-rw-r--r--thirdparty/libwebp/src/dsp/lossless_enc_sse41.c121
-rw-r--r--thirdparty/libwebp/src/dsp/lossless_sse2.c1
-rw-r--r--thirdparty/libwebp/src/dsp/lossless_sse41.c132
-rw-r--r--thirdparty/libwebp/src/dsp/rescaler.c11
-rw-r--r--thirdparty/libwebp/src/dsp/ssim.c2
-rw-r--r--thirdparty/libwebp/src/dsp/upsampling.c10
-rw-r--r--thirdparty/libwebp/src/dsp/yuv.c20
-rw-r--r--thirdparty/libwebp/src/enc/alpha_enc.c8
-rw-r--r--thirdparty/libwebp/src/enc/analysis_enc.c60
-rw-r--r--thirdparty/libwebp/src/enc/backward_references_enc.c201
-rw-r--r--thirdparty/libwebp/src/enc/backward_references_enc.h20
-rw-r--r--thirdparty/libwebp/src/enc/config_enc.c5
-rw-r--r--thirdparty/libwebp/src/enc/frame_enc.c20
-rw-r--r--thirdparty/libwebp/src/enc/histogram_enc.c11
-rw-r--r--thirdparty/libwebp/src/enc/histogram_enc.h6
-rw-r--r--thirdparty/libwebp/src/enc/picture_csp_enc.c14
-rw-r--r--thirdparty/libwebp/src/enc/picture_rescale_enc.c61
-rw-r--r--thirdparty/libwebp/src/enc/picture_tools_enc.c31
-rw-r--r--thirdparty/libwebp/src/enc/syntax_enc.c2
-rw-r--r--thirdparty/libwebp/src/enc/vp8i_enc.h13
-rw-r--r--thirdparty/libwebp/src/enc/vp8l_enc.c669
-rw-r--r--thirdparty/libwebp/src/enc/vp8li_enc.h4
-rw-r--r--thirdparty/libwebp/src/enc/webp_enc.c2
-rw-r--r--thirdparty/libwebp/src/mux/anim_encode.c16
-rw-r--r--thirdparty/libwebp/src/mux/muxedit.c2
-rw-r--r--thirdparty/libwebp/src/mux/muxi.h4
-rw-r--r--thirdparty/libwebp/src/mux/muxread.c6
-rw-r--r--thirdparty/libwebp/src/utils/bit_reader_inl_utils.h9
-rw-r--r--thirdparty/libwebp/src/utils/bit_reader_utils.c7
-rw-r--r--thirdparty/libwebp/src/utils/bit_reader_utils.h10
-rw-r--r--thirdparty/libwebp/src/utils/bit_writer_utils.c4
-rw-r--r--thirdparty/libwebp/src/utils/color_cache_utils.c22
-rw-r--r--thirdparty/libwebp/src/utils/huffman_encode_utils.c3
-rw-r--r--thirdparty/libwebp/src/utils/huffman_encode_utils.h2
-rw-r--r--thirdparty/libwebp/src/utils/rescaler_utils.c114
-rw-r--r--thirdparty/libwebp/src/utils/rescaler_utils.h13
-rw-r--r--thirdparty/libwebp/src/utils/utils.c11
-rw-r--r--thirdparty/libwebp/src/utils/utils.h28
-rw-r--r--thirdparty/libwebp/src/webp/decode.h2
-rw-r--r--thirdparty/libwebp/src/webp/encode.h8
-rw-r--r--thirdparty/meshoptimizer/clusterizer.cpp3
-rw-r--r--thirdparty/meshoptimizer/meshoptimizer.h29
-rw-r--r--thirdparty/meshoptimizer/simplifier.cpp20
-rw-r--r--thirdparty/meshoptimizer/vertexcodec.cpp4
-rw-r--r--thirdparty/meshoptimizer/vertexfilter.cpp156
-rw-r--r--thirdparty/miniupnpc/LICENSE3
-rw-r--r--thirdparty/miniupnpc/include/igd_desc_parse.h (renamed from thirdparty/miniupnpc/miniupnpc/igd_desc_parse.h)0
-rw-r--r--thirdparty/miniupnpc/include/miniupnpc.h (renamed from thirdparty/miniupnpc/miniupnpc/miniupnpc.h)4
-rw-r--r--thirdparty/miniupnpc/include/miniupnpc_declspec.h (renamed from thirdparty/miniupnpc/miniupnpc/miniupnpc_declspec.h)0
-rw-r--r--thirdparty/miniupnpc/include/miniupnpctypes.h (renamed from thirdparty/miniupnpc/miniupnpc/miniupnpctypes.h)6
-rw-r--r--thirdparty/miniupnpc/include/miniwget.h (renamed from thirdparty/miniupnpc/miniupnpc/miniwget.h)0
-rw-r--r--thirdparty/miniupnpc/include/portlistingparse.h (renamed from thirdparty/miniupnpc/miniupnpc/portlistingparse.h)0
-rw-r--r--thirdparty/miniupnpc/include/upnpcommands.h (renamed from thirdparty/miniupnpc/miniupnpc/upnpcommands.h)0
-rw-r--r--thirdparty/miniupnpc/include/upnpdev.h (renamed from thirdparty/miniupnpc/miniupnpc/upnpdev.h)6
-rw-r--r--thirdparty/miniupnpc/include/upnpreplyparse.h (renamed from thirdparty/miniupnpc/miniupnpc/upnpreplyparse.h)0
-rw-r--r--thirdparty/miniupnpc/src/addr_is_reserved.c (renamed from thirdparty/miniupnpc/miniupnpc/addr_is_reserved.c)2
-rw-r--r--thirdparty/miniupnpc/src/addr_is_reserved.h (renamed from thirdparty/miniupnpc/miniupnpc/addr_is_reserved.h)0
-rw-r--r--thirdparty/miniupnpc/src/codelength.h (renamed from thirdparty/miniupnpc/miniupnpc/codelength.h)0
-rw-r--r--thirdparty/miniupnpc/src/connecthostport.c (renamed from thirdparty/miniupnpc/miniupnpc/connecthostport.c)0
-rw-r--r--thirdparty/miniupnpc/src/connecthostport.h (renamed from thirdparty/miniupnpc/miniupnpc/connecthostport.h)0
-rw-r--r--thirdparty/miniupnpc/src/igd_desc_parse.c (renamed from thirdparty/miniupnpc/miniupnpc/igd_desc_parse.c)0
-rw-r--r--thirdparty/miniupnpc/src/minisoap.c (renamed from thirdparty/miniupnpc/miniupnpc/minisoap.c)0
-rw-r--r--thirdparty/miniupnpc/src/minisoap.h (renamed from thirdparty/miniupnpc/miniupnpc/minisoap.h)0
-rw-r--r--thirdparty/miniupnpc/src/minissdpc.c (renamed from thirdparty/miniupnpc/miniupnpc/minissdpc.c)35
-rw-r--r--thirdparty/miniupnpc/src/minissdpc.h (renamed from thirdparty/miniupnpc/miniupnpc/minissdpc.h)0
-rw-r--r--thirdparty/miniupnpc/src/miniupnpc.c (renamed from thirdparty/miniupnpc/miniupnpc/miniupnpc.c)0
-rw-r--r--thirdparty/miniupnpc/src/miniupnpc_socketdef.h (renamed from thirdparty/miniupnpc/miniupnpc/miniupnpc_socketdef.h)0
-rw-r--r--thirdparty/miniupnpc/src/miniupnpcstrings.h (renamed from thirdparty/miniupnpc/miniupnpc/miniupnpcstrings.h)2
-rw-r--r--thirdparty/miniupnpc/src/miniwget.c (renamed from thirdparty/miniupnpc/miniupnpc/miniwget.c)0
-rw-r--r--thirdparty/miniupnpc/src/miniwget_private.h (renamed from thirdparty/miniupnpc/miniupnpc/miniwget_private.h)0
-rw-r--r--thirdparty/miniupnpc/src/minixml.c (renamed from thirdparty/miniupnpc/miniupnpc/minixml.c)0
-rw-r--r--thirdparty/miniupnpc/src/minixml.h (renamed from thirdparty/miniupnpc/miniupnpc/minixml.h)0
-rw-r--r--thirdparty/miniupnpc/src/minixmlvalid.c (renamed from thirdparty/miniupnpc/miniupnpc/minixmlvalid.c)0
-rw-r--r--thirdparty/miniupnpc/src/portlistingparse.c (renamed from thirdparty/miniupnpc/miniupnpc/portlistingparse.c)0
-rw-r--r--thirdparty/miniupnpc/src/receivedata.c (renamed from thirdparty/miniupnpc/miniupnpc/receivedata.c)0
-rw-r--r--thirdparty/miniupnpc/src/receivedata.h (renamed from thirdparty/miniupnpc/miniupnpc/receivedata.h)0
-rw-r--r--thirdparty/miniupnpc/src/upnpcommands.c (renamed from thirdparty/miniupnpc/miniupnpc/upnpcommands.c)0
-rw-r--r--thirdparty/miniupnpc/src/upnpdev.c (renamed from thirdparty/miniupnpc/miniupnpc/upnpdev.c)0
-rw-r--r--thirdparty/miniupnpc/src/upnpreplyparse.c (renamed from thirdparty/miniupnpc/miniupnpc/upnpreplyparse.c)0
-rw-r--r--thirdparty/miniupnpc/src/win32_snprintf.h (renamed from thirdparty/miniupnpc/miniupnpc/win32_snprintf.h)0
-rw-r--r--thirdparty/pcre2/AUTHORS8
-rw-r--r--thirdparty/pcre2/LICENCE8
-rw-r--r--thirdparty/pcre2/src/config.h107
-rw-r--r--thirdparty/pcre2/src/pcre2.h12
-rw-r--r--thirdparty/pcre2/src/pcre2_auto_possess.c13
-rw-r--r--thirdparty/pcre2/src/pcre2_compile.c86
-rw-r--r--thirdparty/pcre2/src/pcre2_dfa_match.c69
-rw-r--r--thirdparty/pcre2/src/pcre2_error.c3
-rw-r--r--thirdparty/pcre2/src/pcre2_jit_compile.c89
-rw-r--r--thirdparty/pcre2/src/pcre2_jit_simd_inc.h819
-rw-r--r--thirdparty/pcre2/src/pcre2_match.c77
-rw-r--r--thirdparty/pcre2/src/pcre2_tables.c347
-rw-r--r--thirdparty/pcre2/src/pcre2_ucd.c6060
-rw-r--r--thirdparty/pcre2/src/pcre2_ucp.h8
-rw-r--r--thirdparty/pcre2/src/sljit/sljitConfigInternal.h14
-rw-r--r--thirdparty/pcre2/src/sljit/sljitExecAllocator.c124
-rw-r--r--thirdparty/pcre2/src/sljit/sljitLir.c25
-rw-r--r--thirdparty/pcre2/src/sljit/sljitLir.h76
-rw-r--r--thirdparty/pcre2/src/sljit/sljitNativeARM_32.c23
-rw-r--r--thirdparty/pcre2/src/sljit/sljitNativeARM_64.c21
-rw-r--r--thirdparty/pcre2/src/sljit/sljitNativeARM_T2_32.c21
-rw-r--r--thirdparty/pcre2/src/sljit/sljitNativeMIPS_32.c2
-rw-r--r--thirdparty/pcre2/src/sljit/sljitNativeMIPS_64.c2
-rw-r--r--thirdparty/pcre2/src/sljit/sljitNativeMIPS_common.c16
-rw-r--r--thirdparty/pcre2/src/sljit/sljitNativePPC_32.c26
-rw-r--r--thirdparty/pcre2/src/sljit/sljitNativePPC_64.c32
-rw-r--r--thirdparty/pcre2/src/sljit/sljitNativePPC_common.c93
-rw-r--r--thirdparty/pcre2/src/sljit/sljitNativeS390X.c1780
-rw-r--r--thirdparty/pcre2/src/sljit/sljitNativeSPARC_32.c3
-rw-r--r--thirdparty/pcre2/src/sljit/sljitNativeSPARC_common.c18
-rw-r--r--thirdparty/pcre2/src/sljit/sljitNativeX86_common.c2
-rw-r--r--thirdparty/pcre2/src/sljit/sljitUtils.c10
-rw-r--r--thirdparty/pcre2/src/sljit/sljitWXExecAllocator.c8
-rw-r--r--thirdparty/tinyexr/tinyexr.cc4
-rw-r--r--thirdparty/tinyexr/tinyexr.h9052
-rw-r--r--thirdparty/wslay/config.h (renamed from thirdparty/wslay/includes/config.h)2
-rw-r--r--thirdparty/wslay/patches/msvcfix.diff (renamed from thirdparty/wslay/msvcfix.diff)7
-rw-r--r--thirdparty/wslay/wslay/wslay.h (renamed from thirdparty/wslay/includes/wslay/wslay.h)140
-rw-r--r--thirdparty/wslay/wslay/wslayver.h (renamed from thirdparty/wslay/includes/wslay/wslayver.h)0
-rw-r--r--thirdparty/wslay/wslay_event.c887
-rw-r--r--thirdparty/wslay/wslay_event.h20
-rw-r--r--thirdparty/wslay/wslay_frame.c306
-rw-r--r--thirdparty/wslay/wslay_frame.h1
-rw-r--r--thirdparty/wslay/wslay_macro.h (renamed from thirdparty/wslay/wslay_stack.h)25
-rw-r--r--thirdparty/wslay/wslay_net.c5
-rw-r--r--thirdparty/wslay/wslay_queue.c98
-rw-r--r--thirdparty/wslay/wslay_queue.h22
-rw-r--r--thirdparty/wslay/wslay_stack.c86
-rw-r--r--thirdparty/xatlas/xatlas.cpp2108
-rw-r--r--thirdparty/xatlas/xatlas.h36
-rw-r--r--thirdparty/zstd/common/bitstream.h2
-rw-r--r--thirdparty/zstd/common/compiler.h3
-rw-r--r--thirdparty/zstd/common/cpu.h2
-rw-r--r--thirdparty/zstd/common/debug.c2
-rw-r--r--thirdparty/zstd/common/debug.h2
-rw-r--r--thirdparty/zstd/common/entropy_common.c2
-rw-r--r--thirdparty/zstd/common/error_private.c2
-rw-r--r--thirdparty/zstd/common/error_private.h6
-rw-r--r--thirdparty/zstd/common/fse.h4
-rw-r--r--thirdparty/zstd/common/fse_decompress.c40
-rw-r--r--thirdparty/zstd/common/huf.h5
-rw-r--r--thirdparty/zstd/common/mem.h8
-rw-r--r--thirdparty/zstd/common/pool.c2
-rw-r--r--thirdparty/zstd/common/pool.h2
-rw-r--r--thirdparty/zstd/common/xxhash.c6
-rw-r--r--thirdparty/zstd/common/xxhash.h2
-rw-r--r--thirdparty/zstd/common/zstd_common.c2
-rw-r--r--thirdparty/zstd/common/zstd_deps.h2
-rw-r--r--thirdparty/zstd/common/zstd_internal.h30
-rw-r--r--thirdparty/zstd/common/zstd_trace.h154
-rw-r--r--thirdparty/zstd/compress/fse_compress.c2
-rw-r--r--thirdparty/zstd/compress/hist.c2
-rw-r--r--thirdparty/zstd/compress/hist.h2
-rw-r--r--thirdparty/zstd/compress/huf_compress.c79
-rw-r--r--thirdparty/zstd/compress/zstd_compress.c1863
-rw-r--r--thirdparty/zstd/compress/zstd_compress_internal.h208
-rw-r--r--thirdparty/zstd/compress/zstd_compress_literals.c8
-rw-r--r--thirdparty/zstd/compress/zstd_compress_literals.h2
-rw-r--r--thirdparty/zstd/compress/zstd_compress_sequences.c20
-rw-r--r--thirdparty/zstd/compress/zstd_compress_sequences.h2
-rw-r--r--thirdparty/zstd/compress/zstd_compress_superblock.c289
-rw-r--r--thirdparty/zstd/compress/zstd_compress_superblock.h2
-rw-r--r--thirdparty/zstd/compress/zstd_cwksp.h195
-rw-r--r--thirdparty/zstd/compress/zstd_double_fast.c6
-rw-r--r--thirdparty/zstd/compress/zstd_double_fast.h2
-rw-r--r--thirdparty/zstd/compress/zstd_fast.c10
-rw-r--r--thirdparty/zstd/compress/zstd_fast.h2
-rw-r--r--thirdparty/zstd/compress/zstd_lazy.c1056
-rw-r--r--thirdparty/zstd/compress/zstd_lazy.h40
-rw-r--r--thirdparty/zstd/compress/zstd_ldm.c462
-rw-r--r--thirdparty/zstd/compress/zstd_ldm.h5
-rw-r--r--thirdparty/zstd/compress/zstd_ldm_geartab.h103
-rw-r--r--thirdparty/zstd/compress/zstd_opt.c2
-rw-r--r--thirdparty/zstd/compress/zstd_opt.h2
-rw-r--r--thirdparty/zstd/compress/zstdmt_compress.c32
-rw-r--r--thirdparty/zstd/compress/zstdmt_compress.h10
-rw-r--r--thirdparty/zstd/decompress/huf_decompress.c87
-rw-r--r--thirdparty/zstd/decompress/zstd_ddict.c2
-rw-r--r--thirdparty/zstd/decompress/zstd_ddict.h2
-rw-r--r--thirdparty/zstd/decompress/zstd_decompress.c253
-rw-r--r--thirdparty/zstd/decompress/zstd_decompress_block.c92
-rw-r--r--thirdparty/zstd/decompress/zstd_decompress_block.h2
-rw-r--r--thirdparty/zstd/decompress/zstd_decompress_internal.h19
-rw-r--r--thirdparty/zstd/zstd.h325
-rw-r--r--thirdparty/zstd/zstd_errors.h (renamed from thirdparty/zstd/common/zstd_errors.h)2
-rw-r--r--version.py1
1574 files changed, 317227 insertions, 65372 deletions
diff --git a/.github/workflows/linux_builds.yml b/.github/workflows/linux_builds.yml
index f6d11e2efe..44d0cb041f 100644
--- a/.github/workflows/linux_builds.yml
+++ b/.github/workflows/linux_builds.yml
@@ -18,13 +18,15 @@ jobs:
fail-fast: false
matrix:
include:
- - name: Editor (target=release_debug, tools=yes, tests=yes)
- cache-name: linux-editor
+ - name: Editor w/ Mono (target=release_debug, tools=yes, tests=yes)
+ cache-name: linux-editor-mono
target: release_debug
tools: true
- tests: true
+ tests: false # Disabled due freeze caused by mix Mono build and CI
+ sconsflags: module_mono_enabled=yes mono_glue=no
doc-test: true
- bin: "./bin/godot.linuxbsd.opt.tools.64"
+ bin: "./bin/godot.linuxbsd.opt.tools.64.mono"
+ build-mono: true
artifact: true
- name: Editor and sanitizers (target=debug, tools=yes, tests=yes, use_asan=yes, use_ubsan=yes)
@@ -36,6 +38,7 @@ jobs:
proj-test: true
godot-cpp-test: true
bin: "./bin/godot.linuxbsd.tools.64s"
+ build-mono: false
# Skip 2GiB artifact speeding up action.
artifact: false
@@ -45,6 +48,15 @@ jobs:
tools: false
tests: false
sconsflags: module_mono_enabled=yes mono_glue=no debug_symbols=no
+ build-mono: false
+ artifact: true
+
+ - name: Minimal Template (target=release, tools=no, everything disabled)
+ cache-name: linux-template-minimal
+ target: release
+ tools: false
+ tests: false
+ sconsflags: modules_enabled_by_default=no disable_3d=yes disable_advanced_gui=yes deprecated=no minizip=no
artifact: true
steps:
@@ -80,11 +92,26 @@ jobs:
tools: ${{ matrix.tools }}
tests: ${{ matrix.tests }}
+ - name: Generate Mono glue
+ if: ${{ matrix.build-mono }}
+ run: |
+ ${{ matrix.bin }} --headless --generate-mono-glue modules/mono/glue || true
+
+ # Rebuild with mono
+ - name: Compilation (mono_glue=yes)
+ uses: ./.github/actions/godot-build
+ if: ${{ matrix.build-mono }}
+ with:
+ sconsflags: ${{ env.SCONSFLAGS }} ${{ matrix.sconsflags }} mono_glue=yes
+ platform: linuxbsd
+ target: ${{ matrix.target }}
+ tools: ${{ matrix.tools }}
+
# Execute unit tests for the editor
- name: Unit tests
if: ${{ matrix.tests }}
run: |
- ${{ matrix.bin }} --test
+ ${{ matrix.bin }} --test --headless
# Check class reference
- name: Check for class reference updates
diff --git a/.github/workflows/static_checks.yml b/.github/workflows/static_checks.yml
index e457066c6c..1f8888885a 100644
--- a/.github/workflows/static_checks.yml
+++ b/.github/workflows/static_checks.yml
@@ -27,7 +27,7 @@ jobs:
sudo apt-get install -qq dos2unix recode clang-format-13
sudo update-alternatives --remove-all clang-format
sudo update-alternatives --install /usr/bin/clang-format clang-format /usr/bin/clang-format-13 100
- sudo pip3 install black==20.8b1 pygments
+ sudo pip3 install black==21.10b0 pygments
- name: File formatting checks (file_format.sh)
run: |
diff --git a/.mailmap b/.mailmap
index 1fa6466f4d..0c01b02681 100644
--- a/.mailmap
+++ b/.mailmap
@@ -82,6 +82,7 @@ Liz Haas <27thLiz@gmail.com> <liu.gam3@gmail.com>
Liz Haas <27thLiz@gmail.com> <hinsbart@gmail.com>
Liz Haas <27thLiz@gmail.com> <hinsbart@users.noreply.github.com>
Liz Haas <27thLiz@gmail.com> <entenflugstuhl@gmail.com>
+Manuele Finocchiaro <m4nu3lf@gmail.com>
Manuel Strey <manuel.strey@gmx.de>
Marcel Admiraal <madmiraal@users.noreply.github.com>
Marcelo Fernandez <marcelofg55@gmail.com>
diff --git a/AUTHORS.md b/AUTHORS.md
index a86bc3ffe4..f58afc2b17 100644
--- a/AUTHORS.md
+++ b/AUTHORS.md
@@ -49,6 +49,7 @@ name is available.
Bhuvan Vemula (Bhu1-V)
Błażej Szczygieł (zaps166)
Bojidar Marinov (bojidar-bg)
+ Brian Semrau (briansemrau)
Bruno Lourenço (MadEqua)
bruvzg
Cameron Reikes (creikey)
@@ -108,6 +109,7 @@ name is available.
Ilaria Cislaghi (QbieShay)
Indah Sylvia (ISylvox)
J08nY
+ Jake Young (Duroxxigar)
Jakub Grzesik (kubecz3k)
James Buck (jbuck3)
Jean-Michel Bernard (jmb462)
@@ -133,8 +135,8 @@ name is available.
Liz Haas (27thLiz)
Lucien Menassol (Kanabenki)
Lyuma
- m4nu3lf
Maganty Rushyendra (mrushyendra)
+ Manuele Finocchiaro (m4nu3lf)
Marcel Admiraal (madmiraal)
Marcelo Fernandez (marcelofg55)
Marc Gilleron (Zylann)
@@ -212,6 +214,7 @@ name is available.
박한얼 (volzhs)
V. Vamsi Krishna (vkbsb)
Wilhem Barbier (nounoursheureux)
+ William Deurwaarder (williamd67)
Will Nations (willnationsdev)
Wilson E. Alvarez (Rubonnek)
Xavier Cho (mysticfall)
diff --git a/COPYRIGHT.txt b/COPYRIGHT.txt
index ca7f065bd6..07b5d4042d 100644
--- a/COPYRIGHT.txt
+++ b/COPYRIGHT.txt
@@ -120,6 +120,11 @@ Copyright: 2007, Starbreeze Studios
2014-2021, Godot Engine contributors.
License: Expat and Zlib
+Files: ./thirdparty/amd-fsr/
+Comment: AMD FidelityFX Super Resolution
+Copyright: 2021, Advanced Micro Devices, Inc.
+License: Expat
+
Files: ./thirdparty/basis_universal/
Comment: Basis Universal
Copyright: 2019, Binomial LLC.
@@ -266,7 +271,7 @@ Copyright: lieff
License: CC0-1.0
Files: ./thirdparty/miniupnpc/
-Comment: MiniUPnPc
+Comment: MiniUPnP Project
Copyright: 2005-2021, Thomas Bernard
License: BSD-3-clause
@@ -369,8 +374,8 @@ License: Apache-2.0
Files: ./thirdparty/pcre2/
Comment: PCRE2
-Copyright: 1997-2020, University of Cambridge
- 2009-2020, Zoltan Herczeg
+Copyright: 1997-2021, University of Cambridge
+ 2009-2021, Zoltan Herczeg
License: BSD-3-clause
Files: ./thirdparty/pvrtccompressor/
@@ -400,7 +405,7 @@ License: Expat
Files: ./thirdparty/tinyexr/
Comment: TinyEXR
-Copyright: 2014-2020, Syoyo Fujita
+Copyright: 2014-2021, Syoyo Fujita
2002, Industrial Light & Magic, a division of Lucas Digital Ltd. LLC
License: BSD-3-clause
@@ -447,7 +452,7 @@ License: Zlib
Files: ./thirdparty/zstd/
Comment: Zstandard
-Copyright: 2016-2020, Facebook, Inc.
+Copyright: 2016-2021, Facebook, Inc.
License: BSD-3-clause
diff --git a/DONORS.md b/DONORS.md
index 0bc6d5898f..33a68650d9 100644
--- a/DONORS.md
+++ b/DONORS.md
@@ -40,8 +40,8 @@ generous deed immortalized in the next stable release of Godot Engine.
## Mini sponsors
AD Ford
- alex brown
Andrew Bowen
+ Andrew Dunai
Angry Skull
anti666
blurp
@@ -59,7 +59,6 @@ generous deed immortalized in the next stable release of Godot Engine.
GameDev.net
Hein-Pieter van Braam
Jasper Brooks
- Jay Sistar
Jeffery Chiu
John G Gentzel
Jonah Stich
@@ -119,9 +118,7 @@ generous deed immortalized in the next stable release of Godot Engine.
Markus Wiesner
Mathieu
Matthew Hillier
- Michael
Mick
- Monster Vial
Officine Pixel S.n.c.
Patrick Brock
Paul E Hansen
@@ -149,6 +146,7 @@ generous deed immortalized in the next stable release of Godot Engine.
Adam Nakonieczny
Adam Nelson
+ Adrian Adamiak
Alexander Erlemann
Alexander J Maynard
Alex Khayrullin
@@ -186,10 +184,10 @@ generous deed immortalized in the next stable release of Godot Engine.
Dimitri Nüscheler
Donn Eddy
Edgar Sun
- Eric
Eric Brand
Eugenio Hugo Salgüero Jáñez
EXUREI
+ Felix Winterhalter
flesk
foxydevloper
Fransiska
@@ -199,7 +197,9 @@ generous deed immortalized in the next stable release of Godot Engine.
General Chicken
Geoffroy Warin
GGGames.org
+ Giorgi Khmaladze
gisora
+ GlassBrick
GrayDwarf
Guilherme Felipe de C. G. da Silva
Harvey Fong
@@ -227,14 +227,12 @@ generous deed immortalized in the next stable release of Godot Engine.
Joshua Lesperance
Juan Velandia
Judd
- Julián Absatz
Julian Todd
Juraj Móza
JUSTIN CARROLL
Kelteseth
kickmaniac
kinfox
- Kis Levente Lorand
Kos
Lakshaya Goel
Laszlo Kiss
@@ -258,10 +256,8 @@ generous deed immortalized in the next stable release of Godot Engine.
Mecha Kaiju X
medecau
Michael
- Michael Bordießer-Krauth
Michael Dürwald
Michael Policastro
- MightyPossum
MikadoSC
Mike Barbee
minz1
@@ -276,6 +272,7 @@ generous deed immortalized in the next stable release of Godot Engine.
Paul Von Zimmerman
Pavel Kotlyar
Pete Goodwin
+ Peter Richmond
Petr Malac
PhaineOfCatz
Piotr Wyszyński
@@ -283,22 +280,20 @@ generous deed immortalized in the next stable release of Godot Engine.
Raymond Harris
Rene Tailleur
Rhodochrone
+ Rickard Hermanson
Rob
Robert McDermott
Robert Willes
Rob McInroy
Rocknight Studios
- Rodrigo Favarete
Romeo Disca
Ronnie Ashlock
Ronny Mühle
Ryan Scott
Samuel Hummerstone
Samuel Judd
- Samuel Smart
Sean Morgan
Sebastian Hutter
- Sébastien
Serban Serafimescu
Sergey Fonaryov
Sergey Minakov
@@ -318,13 +313,14 @@ generous deed immortalized in the next stable release of Godot Engine.
Tobias Bocanegra
Tobias Raggl
Todd Smith
+ Tom Wor
Torbulous
toto bibi
Troy Kinsella
Turntsnaco
tweaklab
+ Tyler Chase
Valryia
- VikFro
Vincent Cloutier
Vlad Ceru Opran
VoidPointer
@@ -338,6 +334,7 @@ generous deed immortalized in the next stable release of Godot Engine.
## Silver donors
1D_Inc
+ Aaron Mayfield
Aaron Oldenburg
A. B.
Actual_Dio
@@ -370,7 +367,6 @@ generous deed immortalized in the next stable release of Godot Engine.
Alex (Well Done Games)
Allan Davis
Allen Schade
- Aloehart
Anders Marstein Kruke
Andre Stackhouse
Andrew Groot
@@ -393,7 +389,6 @@ generous deed immortalized in the next stable release of Godot Engine.
AzulCrescent
Balázs Batári
Baptiste Le Bourhis
- Bartosz Bielecki
bcat
Benedikt
Benoit Jauvin-Girard
@@ -418,7 +413,6 @@ generous deed immortalized in the next stable release of Godot Engine.
Bronson Zgeb
Bruno Hurth
Burney Waring
- bwhirt
c64cosmin
Caleb Gartner
Caleb Makela
@@ -432,12 +426,12 @@ generous deed immortalized in the next stable release of Godot Engine.
Chad Steadman
Chris Chapin
Chris Langford
- Christian Clavet
Christian Mauduit
Christian Winter
Christoffer Dahlblom
Christophe Gagnier
Christopher Chin
+ Christoph Woinke
Chris Truebe
Cody Parker
Conall O
@@ -468,7 +462,6 @@ generous deed immortalized in the next stable release of Godot Engine.
Douglas Plumley
Dragontrapper
Dr Ewan Murray
- Dr.Raccoon
Duobix
Duodecimal
DurrDiss
@@ -520,7 +513,6 @@ generous deed immortalized in the next stable release of Godot Engine.
Ian ORourke
Ian Williams
IndustrialRobot
- Ivan Nikolaev
iveks
Jackson Harmer
Jacob D
@@ -540,7 +532,6 @@ generous deed immortalized in the next stable release of Godot Engine.
JARKKO PARVIAINEN
Jason Bolton
Jason Evans
- Jason Malcolm-Herzmark
Jason Uechi
Jeff Hungerford
Jeff Messer
@@ -563,6 +554,7 @@ generous deed immortalized in the next stable release of Godot Engine.
Jonatan R
Jonathan Bieber
Jonathan G
+ Jonathan Turner
Jon Bonazza
Jon Sully
Jordan West
@@ -571,6 +563,7 @@ generous deed immortalized in the next stable release of Godot Engine.
Jorge Araya Navarro
Jose C. Rubio
Joseph Catrambone
+ Josh P
Josh Taylor
Joshua Heidrich
jromkjrom
@@ -637,6 +630,7 @@ generous deed immortalized in the next stable release of Godot Engine.
Martin Liška
Martin Trbola
Martin Zabinski
+ Mathieu Meissonnier
Matt Edwards
Matthew Booe
Matt Sylvia
@@ -652,9 +646,11 @@ generous deed immortalized in the next stable release of Godot Engine.
Michael Bruce-Lockhart
Michael Haney
Michael Morrison
+ Michael Toporkov
Michał Skwarek
Michel Candries
MidoriBunn 'tis BS
+ Mikael Nordenberg
Mikayla
Mike
Mike Birkhead
@@ -683,7 +679,6 @@ generous deed immortalized in the next stable release of Godot Engine.
Niclas Eriksen
Nicolas Goll-Perrier
Nicolas Rosset
- Nicolas SAN AGUSTIN
Nils Nordmark
Nima Farid
Noel Billig
@@ -695,6 +690,7 @@ generous deed immortalized in the next stable release of Godot Engine.
oscar1000108
Oscar Domingo
Pascal
+ Patrick Indermühle
Patrick Nafarrete
Paul Gieske
Paweł Kowal
@@ -717,6 +713,7 @@ generous deed immortalized in the next stable release of Godot Engine.
Rainer Amler
Rami Hanano
Rammeow
+ red1939
Remi Rampin
Reneator
René Habermann
@@ -738,7 +735,6 @@ generous deed immortalized in the next stable release of Godot Engine.
Ryan Groom
Sam Caulfield
Sam Edson
- Samuel Egger
Scott Longley
Sean Lynch
Sean Wall
@@ -764,6 +760,7 @@ generous deed immortalized in the next stable release of Godot Engine.
Spencer Everhart
Squirrel
Stéphane Roussel
+ Stephen Rice
Steve Cloete
Steven Drovie
summerblind
@@ -809,20 +806,22 @@ generous deed immortalized in the next stable release of Godot Engine.
Vaida Narušė
Vaughan Ling
Victor
+ VikFro
Vincent Foulon
Vi Watch
Vladimir Savin
Vladislav Smirnov
VoxelVisions.com
Wapiti .
+ Watchinofoye
werner mendizabal
Wiley Thompson
William Edwards
William F Siqueira
William Hogben
Wyatt Goodin
- x1212
xenomat
+ yakcyll
Yan Shi
Yegor Smirnov
Zak Stephens
diff --git a/README.md b/README.md
index 8ddddf0e63..a7e67f8946 100644
--- a/README.md
+++ b/README.md
@@ -10,8 +10,8 @@
**[Godot Engine](https://godotengine.org) is a feature-packed, cross-platform
game engine to create 2D and 3D games from a unified interface.** It provides a
-comprehensive set of common tools, so that users can focus on making games
-without having to reinvent the wheel. Games can be exported in one click to a
+comprehensive set of [common tools](https://godotengine.org/features), so that users can focus on making games
+without having to reinvent the wheel. Games can be exported with one click to a
number of platforms, including the major desktop platforms (Linux, macOS,
Windows), mobile platforms (Android, iOS), as well as Web-based platforms
(HTML5) and
@@ -19,18 +19,19 @@ Windows), mobile platforms (Android, iOS), as well as Web-based platforms
## Free, open source and community-driven
-Godot is completely free and open source under the very permissive MIT license.
+Godot is completely free and open source under the very permissive [MIT license](https://godotengine.org/license).
No strings attached, no royalties, nothing. The users' games are theirs, down
to the last line of engine code. Godot's development is fully independent and
community-driven, empowering users to help shape their engine to match their
expectations. It is supported by the [Software Freedom Conservancy](https://sfconservancy.org/)
not-for-profit.
-Before being open sourced in February 2014, Godot had been developed by Juan
-Linietsky and Ariel Manzur (both still maintaining the project) for several
+Before being open sourced in [February 2014](https://github.com/godotengine/godot/commit/0b806ee0fc9097fa7bda7ac0109191c9c5e0a1ac),
+Godot had been developed by [Juan Linietsky](https://github.com/reduz) and
+[Ariel Manzur](https://github.com/punto-) (both still maintaining the project) for several
years as an in-house engine, used to publish several work-for-hire titles.
-![Screenshot of a 3D scene in Godot Engine](https://raw.githubusercontent.com/godotengine/godot-design/master/screenshots/editor_tps_demo_1920x1080.jpg)
+![Screenshot of a 3D scene in the Godot Engine editor](https://raw.githubusercontent.com/godotengine/godot-design/master/screenshots/editor_tps_demo_1920x1080.jpg)
## Getting the engine
@@ -49,7 +50,7 @@ for compilation instructions for every supported platform.
Godot is not only an engine but an ever-growing community of users and engine
developers. The main community channels are listed [on the homepage](https://godotengine.org/community).
-To get in touch with the engine developers, the best way is to join the
+The best way to get in touch with the core engine developers is to join the
[Godot Contributors Chat](https://chat.godotengine.org).
To get started contributing to the project, see the [contributing guide](CONTRIBUTING.md).
@@ -62,8 +63,8 @@ It is maintained by the Godot community in its own [GitHub repository](https://g
The [class reference](https://docs.godotengine.org/en/latest/classes/)
is also accessible from the Godot editor.
-The official demos are maintained in their own [GitHub repository](https://github.com/godotengine/godot-demo-projects)
-as well.
+We also maintain official demos in their own [GitHub repository](https://github.com/godotengine/godot-demo-projects)
+as well as a list of [awesome Godot community resources](https://github.com/godotengine/awesome-godot).
There are also a number of other
[learning resources](https://docs.godotengine.org/en/latest/community/tutorials.html)
diff --git a/SConstruct b/SConstruct
index 78e3d28337..83bd1560ff 100644
--- a/SConstruct
+++ b/SConstruct
@@ -16,7 +16,6 @@ from collections import OrderedDict
import methods
import glsl_builders
import gles3_builders
-from platform_methods import run_in_subprocess
# Scan possible build platforms
@@ -132,6 +131,7 @@ opts.Add(BoolVariable("deprecated", "Enable deprecated features", True))
opts.Add(BoolVariable("minizip", "Enable ZIP archive support using minizip", True))
opts.Add(BoolVariable("xaudio2", "Enable the XAudio2 audio driver", False))
opts.Add(BoolVariable("vulkan", "Enable the vulkan video driver", True))
+opts.Add(BoolVariable("opengl3", "Enable the OpenGL/GLES3 video driver", True))
opts.Add("custom_modules", "A list of comma-separated directory paths containing custom modules to build.", "")
opts.Add(BoolVariable("custom_modules_recursive", "Detect custom modules recursively for each specified path.", True))
opts.Add(BoolVariable("use_volk", "Use the volk library to load the Vulkan loader dynamically", True))
@@ -300,6 +300,13 @@ opts.Update(env_base)
env_base["platform"] = selected_platform # Must always be re-set after calling opts.Update().
Help(opts.GenerateHelpText(env_base))
+# Detect and print a warning listing unknown SCons variables to ease troubleshooting.
+unknown = opts.UnknownVariables()
+if unknown:
+ print("WARNING: Unknown SCons variables were passed and will be ignored:")
+ for item in unknown.items():
+ print(" " + item[0] + "=" + item[1])
+
# add default include paths
env_base.Prepend(CPPPATH=["#"])
@@ -705,20 +712,14 @@ if selected_platform in platform_list:
suffix="glsl.gen.h",
src_suffix=".glsl",
),
+ "GLES3_GLSL": env.Builder(
+ action=env.Run(gles3_builders.build_gles3_headers, 'Building GLES3 GLSL header: "$TARGET"'),
+ suffix="glsl.gen.h",
+ src_suffix=".glsl",
+ ),
}
env.Append(BUILDERS=GLSL_BUILDERS)
- if not env["platform"] == "server":
- env.Append(
- BUILDERS={
- "GLES3_GLSL": env.Builder(
- action=run_in_subprocess(gles3_builders.build_gles3_headers),
- suffix="glsl.gen.h",
- src_suffix=".glsl",
- )
- }
- )
-
scons_cache_path = os.environ.get("SCONS_CACHE")
if scons_cache_path != None:
CacheDir(scons_cache_path)
diff --git a/core/config/project_settings.cpp b/core/config/project_settings.cpp
index f37e7f5956..0e15edc29f 100644
--- a/core/config/project_settings.cpp
+++ b/core/config/project_settings.cpp
@@ -41,6 +41,9 @@
#include "core/os/keyboard.h"
#include "core/os/os.h"
#include "core/variant/variant_parser.h"
+#include "core/version.h"
+
+#include "modules/modules_enabled.gen.h" // For mono.
const String ProjectSettings::PROJECT_DATA_DIR_NAME_SUFFIX = "godot";
@@ -62,10 +65,81 @@ String ProjectSettings::get_resource_path() const {
return resource_path;
}
+String ProjectSettings::get_safe_project_name() const {
+ String safe_name = OS::get_singleton()->get_safe_dir_name(get("application/config/name"));
+ if (safe_name.is_empty()) {
+ safe_name = "UnnamedProject";
+ }
+ return safe_name;
+}
+
String ProjectSettings::get_imported_files_path() const {
return get_project_data_path().plus_file("imported");
}
+// Returns the features that a project must have when opened with this build of Godot.
+// This is used by the project manager to provide the initial_settings for config/features.
+const PackedStringArray ProjectSettings::get_required_features() {
+ PackedStringArray features = PackedStringArray();
+ features.append(VERSION_BRANCH);
+#ifdef REAL_T_IS_DOUBLE
+ features.append("Double Precision");
+#endif
+ return features;
+}
+
+// Returns the features supported by this build of Godot. Includes all required features.
+const PackedStringArray ProjectSettings::_get_supported_features() {
+ PackedStringArray features = get_required_features();
+#ifdef MODULE_MONO_ENABLED
+ features.append("C#");
+#endif
+ // Allow pinning to a specific patch number or build type by marking
+ // them as supported. They're only used if the user adds them manually.
+ features.append(VERSION_BRANCH "." _MKSTR(VERSION_PATCH));
+ features.append(VERSION_FULL_CONFIG);
+ features.append(VERSION_FULL_BUILD);
+ // For now, assume Vulkan is always supported.
+ // This should be removed if it's possible to build the editor without Vulkan.
+ features.append("Vulkan Clustered");
+ features.append("Vulkan Mobile");
+ return features;
+}
+
+// Returns the features that this project needs but this build of Godot lacks.
+const PackedStringArray ProjectSettings::get_unsupported_features(const PackedStringArray &p_project_features) {
+ PackedStringArray unsupported_features = PackedStringArray();
+ PackedStringArray supported_features = singleton->_get_supported_features();
+ for (int i = 0; i < p_project_features.size(); i++) {
+ if (!supported_features.has(p_project_features[i])) {
+ unsupported_features.append(p_project_features[i]);
+ }
+ }
+ unsupported_features.sort();
+ return unsupported_features;
+}
+
+// Returns the features that both this project has and this build of Godot has, ensuring required features exist.
+const PackedStringArray ProjectSettings::_trim_to_supported_features(const PackedStringArray &p_project_features) {
+ // Remove unsupported features if present.
+ PackedStringArray features = PackedStringArray(p_project_features);
+ PackedStringArray supported_features = _get_supported_features();
+ for (int i = p_project_features.size() - 1; i > -1; i--) {
+ if (!supported_features.has(p_project_features[i])) {
+ features.remove_at(i);
+ }
+ }
+ // Add required features if not present.
+ PackedStringArray required_features = get_required_features();
+ for (int i = 0; i < required_features.size(); i++) {
+ if (!features.has(required_features[i])) {
+ features.append(required_features[i]);
+ }
+ }
+ features.sort();
+ return features;
+}
+
String ProjectSettings::localize_path(const String &p_path) const {
if (resource_path.is_empty() || p_path.begins_with("res://") || p_path.begins_with("user://") ||
(p_path.is_absolute_path() && !p_path.begins_with(resource_path))) {
@@ -368,12 +442,12 @@ void ProjectSettings::_convert_to_last_version(int p_from_version) {
* If a project file is found, load it or fail.
* If nothing was found, error out.
*/
-Error ProjectSettings::_setup(const String &p_path, const String &p_main_pack, bool p_upwards) {
+Error ProjectSettings::_setup(const String &p_path, const String &p_main_pack, bool p_upwards, bool p_ignore_override) {
// If looking for files in a network client, use it directly
if (FileAccessNetworkClient::get_singleton()) {
Error err = _load_settings_text_or_binary("res://project.godot", "res://project.binary");
- if (err == OK) {
+ if (err == OK && !p_ignore_override) {
// Optional, we don't mind if it fails
_load_settings_text("res://override.cfg");
}
@@ -387,7 +461,7 @@ Error ProjectSettings::_setup(const String &p_path, const String &p_main_pack, b
ERR_FAIL_COND_V_MSG(!ok, ERR_CANT_OPEN, "Cannot open resource pack '" + p_main_pack + "'.");
Error err = _load_settings_text_or_binary("res://project.godot", "res://project.binary");
- if (err == OK) {
+ if (err == OK && !p_ignore_override) {
// Load override from location of the main pack
// Optional, we don't mind if it fails
_load_settings_text(p_main_pack.get_base_dir().plus_file("override.cfg"));
@@ -437,7 +511,7 @@ Error ProjectSettings::_setup(const String &p_path, const String &p_main_pack, b
// If we opened our package, try and load our project.
if (found) {
Error err = _load_settings_text_or_binary("res://project.godot", "res://project.binary");
- if (err == OK) {
+ if (err == OK && !p_ignore_override) {
// Load override from location of the executable.
// Optional, we don't mind if it fails.
_load_settings_text(exec_path.get_base_dir().plus_file("override.cfg"));
@@ -458,7 +532,7 @@ Error ProjectSettings::_setup(const String &p_path, const String &p_main_pack, b
}
Error err = _load_settings_text_or_binary("res://project.godot", "res://project.binary");
- if (err == OK) {
+ if (err == OK && !p_ignore_override) {
// Optional, we don't mind if it fails.
_load_settings_text("res://override.cfg");
}
@@ -481,7 +555,7 @@ Error ProjectSettings::_setup(const String &p_path, const String &p_main_pack, b
resource_path = current_dir;
resource_path = resource_path.replace("\\", "/"); // Windows path to Unix path just in case.
err = _load_settings_text_or_binary(current_dir.plus_file("project.godot"), current_dir.plus_file("project.binary"));
- if (err == OK) {
+ if (err == OK && !p_ignore_override) {
// Optional, we don't mind if it fails.
_load_settings_text(current_dir.plus_file("override.cfg"));
found = true;
@@ -513,8 +587,8 @@ Error ProjectSettings::_setup(const String &p_path, const String &p_main_pack, b
return OK;
}
-Error ProjectSettings::setup(const String &p_path, const String &p_main_pack, bool p_upwards) {
- Error err = _setup(p_path, p_main_pack, p_upwards);
+Error ProjectSettings::setup(const String &p_path, const String &p_main_pack, bool p_upwards, bool p_ignore_override) {
+ Error err = _setup(p_path, p_main_pack, p_upwards, p_ignore_override);
if (err == OK) {
String custom_settings = GLOBAL_DEF("application/config/project_settings_override", "");
if (custom_settings != "") {
@@ -666,6 +740,13 @@ Error ProjectSettings::_load_settings_text_or_binary(const String &p_text_path,
return err;
}
+Error ProjectSettings::load_custom(const String &p_path) {
+ if (p_path.ends_with(".binary")) {
+ return _load_settings_binary(p_path);
+ }
+ return _load_settings_text(p_path);
+}
+
int ProjectSettings::get_order(const String &p_name) const {
ERR_FAIL_COND_V_MSG(!props.has(p_name), -1, "Request for nonexistent project setting: " + p_name + ".");
return props[p_name].order;
@@ -845,6 +926,34 @@ Error ProjectSettings::_save_custom_bnd(const String &p_file) { // add other par
Error ProjectSettings::save_custom(const String &p_path, const CustomMap &p_custom, const Vector<String> &p_custom_features, bool p_merge_with_current) {
ERR_FAIL_COND_V_MSG(p_path == "", ERR_INVALID_PARAMETER, "Project settings save path cannot be empty.");
+ PackedStringArray project_features = has_setting("application/config/features") ? (PackedStringArray)get_setting("application/config/features") : PackedStringArray();
+ // If there is no feature list currently present, force one to generate.
+ if (project_features.is_empty()) {
+ project_features = ProjectSettings::get_required_features();
+ }
+ // Check the rendering API.
+ const String rendering_api = has_setting("rendering/quality/driver/driver_name") ? (String)get_setting("rendering/quality/driver/driver_name") : String();
+ if (rendering_api != "") {
+ // Add the rendering API as a project feature if it doesn't already exist.
+ if (!project_features.has(rendering_api)) {
+ project_features.append(rendering_api);
+ }
+ }
+ // Check for the existence of a csproj file.
+ if (FileAccess::exists(get_resource_path().plus_file(get_safe_project_name() + ".csproj"))) {
+ // If there is a csproj file, add the C# feature if it doesn't already exist.
+ if (!project_features.has("C#")) {
+ project_features.append("C#");
+ }
+ } else {
+ // If there isn't a csproj file, remove the C# feature if it exists.
+ if (project_features.has("C#")) {
+ project_features.remove_at(project_features.find("C#"));
+ }
+ }
+ project_features = _trim_to_supported_features(project_features);
+ set_setting("application/config/features", project_features);
+
Set<_VCSort> vclist;
if (p_merge_with_current) {
diff --git a/core/config/project_settings.h b/core/config/project_settings.h
index ca37401751..5b74356337 100644
--- a/core/config/project_settings.h
+++ b/core/config/project_settings.h
@@ -48,6 +48,8 @@ public:
//properties that are not for built in values begin from this value, so builtin ones are displayed first
NO_BUILTIN_ORDER_BASE = 1 << 16
};
+ const static PackedStringArray get_required_features();
+ const static PackedStringArray get_unsupported_features(const PackedStringArray &p_project_features);
struct AutoloadInfo {
StringName name;
@@ -111,13 +113,16 @@ protected:
Error _save_custom_bnd(const String &p_file);
+ const static PackedStringArray _get_supported_features();
+ const static PackedStringArray _trim_to_supported_features(const PackedStringArray &p_project_features);
+
void _convert_to_last_version(int p_from_version);
bool _load_resource_pack(const String &p_pack, bool p_replace_files = true, int p_offset = 0);
void _add_property_info_bind(const Dictionary &p_info);
- Error _setup(const String &p_path, const String &p_main_pack, bool p_upwards = false);
+ Error _setup(const String &p_path, const String &p_main_pack, bool p_upwards = false, bool p_ignore_override = false);
void _add_builtin_input_map();
@@ -125,7 +130,7 @@ protected:
static void _bind_methods();
public:
- static const int CONFIG_VERSION = 4;
+ static const int CONFIG_VERSION = 5;
void set_setting(const String &p_setting, const Variant &p_value);
Variant get_setting(const String &p_setting) const;
@@ -146,6 +151,7 @@ public:
String get_project_data_dir_name() const;
String get_project_data_path() const;
String get_resource_path() const;
+ String get_safe_project_name() const;
String get_imported_files_path() const;
static ProjectSettings *get_singleton();
@@ -156,8 +162,9 @@ public:
void set_builtin_order(const String &p_name);
bool is_builtin_setting(const String &p_name) const;
- Error setup(const String &p_path, const String &p_main_pack, bool p_upwards = false);
+ Error setup(const String &p_path, const String &p_main_pack, bool p_upwards = false, bool p_ignore_override = false);
+ Error load_custom(const String &p_path);
Error save_custom(const String &p_path = "", const CustomMap &p_custom = CustomMap(), const Vector<String> &p_custom_features = Vector<String>(), bool p_merge_with_current = true);
Error save();
void set_custom_property_info(const String &p_prop, const PropertyInfo &p_info);
diff --git a/core/core_bind.cpp b/core/core_bind.cpp
index afd82939ca..0bf6efc96d 100644
--- a/core/core_bind.cpp
+++ b/core/core_bind.cpp
@@ -235,6 +235,19 @@ int OS::execute(const String &p_path, const Vector<String> &p_arguments, Array r
return exitcode;
}
+int OS::create_instance(const Vector<String> &p_arguments) {
+ List<String> args;
+ for (int i = 0; i < p_arguments.size(); i++) {
+ args.push_back(p_arguments[i]);
+ }
+ ::OS::ProcessID pid = 0;
+ Error err = ::OS::get_singleton()->create_instance(args, &pid);
+ if (err != OK) {
+ return -1;
+ }
+ return pid;
+}
+
int OS::create_process(const String &p_path, const Vector<String> &p_arguments) {
List<String> args;
for (int i = 0; i < p_arguments.size(); i++) {
@@ -302,6 +315,10 @@ Error OS::set_thread_name(const String &p_name) {
return ::Thread::get_caller_id();
};
+::Thread::ID OS::get_main_thread_id() const {
+ return ::Thread::get_main_id();
+};
+
bool OS::has_feature(const String &p_feature) const {
return ::OS::get_singleton()->has_feature(p_feature);
}
@@ -489,15 +506,15 @@ String OS::get_system_dir(SystemDir p_dir, bool p_shared_storage) const {
return ::OS::get_singleton()->get_system_dir(::OS::SystemDir(p_dir), p_shared_storage);
}
-String OS::get_keycode_string(uint32_t p_code) const {
+String OS::get_keycode_string(Key p_code) const {
return ::keycode_get_string(p_code);
}
-bool OS::is_keycode_unicode(uint32_t p_unicode) const {
- return ::keycode_has_unicode(p_unicode);
+bool OS::is_keycode_unicode(char32_t p_unicode) const {
+ return ::keycode_has_unicode((Key)p_unicode);
}
-int OS::find_keycode_from_string(const String &p_code) const {
+Key OS::find_keycode_from_string(const String &p_code) const {
return find_keycode(p_code);
}
@@ -537,6 +554,7 @@ void OS::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_executable_path"), &OS::get_executable_path);
ClassDB::bind_method(D_METHOD("execute", "path", "arguments", "output", "read_stderr"), &OS::execute, DEFVAL(Array()), DEFVAL(false));
ClassDB::bind_method(D_METHOD("create_process", "path", "arguments"), &OS::create_process);
+ ClassDB::bind_method(D_METHOD("create_instance", "arguments"), &OS::create_instance);
ClassDB::bind_method(D_METHOD("kill", "pid"), &OS::kill);
ClassDB::bind_method(D_METHOD("shell_open", "uri"), &OS::shell_open);
ClassDB::bind_method(D_METHOD("get_process_id"), &OS::get_process_id);
@@ -587,6 +605,7 @@ void OS::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_thread_name", "name"), &OS::set_thread_name);
ClassDB::bind_method(D_METHOD("get_thread_caller_id"), &OS::get_thread_caller_id);
+ ClassDB::bind_method(D_METHOD("get_main_thread_id"), &OS::get_main_thread_id);
ClassDB::bind_method(D_METHOD("has_feature", "tag_name"), &OS::has_feature);
diff --git a/core/core_bind.h b/core/core_bind.h
index 010d1e2419..4bacfa720c 100644
--- a/core/core_bind.h
+++ b/core/core_bind.h
@@ -165,6 +165,7 @@ public:
String get_executable_path() const;
int execute(const String &p_path, const Vector<String> &p_arguments, Array r_output = Array(), bool p_read_stderr = false);
int create_process(const String &p_path, const Vector<String> &p_arguments);
+ int create_instance(const Vector<String> &p_arguments);
Error kill(int p_pid);
Error shell_open(String p_uri);
@@ -194,9 +195,9 @@ public:
String get_unique_id() const;
- String get_keycode_string(uint32_t p_code) const;
- bool is_keycode_unicode(uint32_t p_unicode) const;
- int find_keycode_from_string(const String &p_code) const;
+ String get_keycode_string(Key p_code) const;
+ bool is_keycode_unicode(char32_t p_unicode) const;
+ Key find_keycode_from_string(const String &p_code) const;
void set_use_file_access_save_and_swap(bool p_enable);
@@ -236,6 +237,7 @@ public:
Error set_thread_name(const String &p_name);
Thread::ID get_thread_caller_id() const;
+ Thread::ID get_main_thread_id() const;
bool has_feature(const String &p_feature) const;
diff --git a/core/core_builders.py b/core/core_builders.py
index 004475faa7..b07daa80ae 100644
--- a/core/core_builders.py
+++ b/core/core_builders.py
@@ -35,7 +35,9 @@ def make_certs_header(target, source, env):
decomp_size = len(buf)
import zlib
- buf = zlib.compress(buf)
+ # Use maximum zlib compression level to further reduce file size
+ # (at the cost of initial build times).
+ buf = zlib.compress(buf, zlib.Z_BEST_COMPRESSION)
g.write("/* THIS FILE IS GENERATED DO NOT EDIT */\n")
g.write("#ifndef CERTS_COMPRESSED_GEN_H\n")
diff --git a/core/core_constants.cpp b/core/core_constants.cpp
index b2d5a8fdf1..dd1754f010 100644
--- a/core/core_constants.cpp
+++ b/core/core_constants.cpp
@@ -71,6 +71,16 @@ static Vector<_CoreConstant> _global_constants;
#define BIND_CORE_ENUM_CONSTANT(m_constant) \
_global_constants.push_back(_CoreConstant(__constant_get_enum_name(m_constant, #m_constant), #m_constant, m_constant));
+// This just binds enum classes as if they were regular enum constants.
+#define BIND_CORE_ENUM_CLASS_CONSTANT(m_enum, m_prefix, m_member) \
+ _global_constants.push_back(_CoreConstant(__constant_get_enum_name(m_enum::m_member, #m_prefix "_" #m_member), #m_prefix "_" #m_member, (int)m_enum::m_member));
+
+#define BIND_CORE_ENUM_CLASS_CONSTANT_CUSTOM(m_enum, m_name, m_member) \
+ _global_constants.push_back(_CoreConstant(__constant_get_enum_name(m_enum::m_member, #m_name), #m_name, (int)m_enum::m_member));
+
+#define BIND_CORE_ENUM_CLASS_CONSTANT_NO_VAL(m_enum, m_prefix, m_member) \
+ _global_constants.push_back(_CoreConstant(__constant_get_enum_name(m_enum::m_member, #m_prefix "_" #m_member), #m_prefix "_" #m_member, (int)m_enum::m_member, true));
+
#define BIND_CORE_ENUM_CONSTANT_CUSTOM(m_custom_name, m_constant) \
_global_constants.push_back(_CoreConstant(__constant_get_enum_name(m_constant, #m_constant), m_custom_name, m_constant));
@@ -91,6 +101,16 @@ static Vector<_CoreConstant> _global_constants;
#define BIND_CORE_ENUM_CONSTANT(m_constant) \
_global_constants.push_back(_CoreConstant(#m_constant, m_constant));
+// This just binds enum classes as if they were regular enum constants.
+#define BIND_CORE_ENUM_CLASS_CONSTANT(m_enum, m_prefix, m_member) \
+ _global_constants.push_back(_CoreConstant(#m_prefix "_" #m_member, (int)m_enum::m_member));
+
+#define BIND_CORE_ENUM_CLASS_CONSTANT_CUSTOM(m_enum, m_name, m_member) \
+ _global_constants.push_back(_CoreConstant(#m_name, (int)m_enum::m_member));
+
+#define BIND_CORE_ENUM_CLASS_CONSTANT_NO_VAL(m_enum, m_prefix, m_member) \
+ _global_constants.push_back(_CoreConstant(#m_prefix "_" #m_member, (int)m_enum::m_member));
+
#define BIND_CORE_ENUM_CONSTANT_CUSTOM(m_custom_name, m_constant) \
_global_constants.push_back(_CoreConstant(m_custom_name, m_constant));
@@ -144,326 +164,317 @@ void register_global_constants() {
BIND_CORE_ENUM_CONSTANT(INLINE_ALIGN_CENTER);
BIND_CORE_ENUM_CONSTANT(INLINE_ALIGN_BOTTOM);
- // huge list of keys
- BIND_CORE_CONSTANT(SPKEY);
-
- BIND_CORE_ENUM_CONSTANT(KEY_ESCAPE);
- BIND_CORE_ENUM_CONSTANT(KEY_TAB);
- BIND_CORE_ENUM_CONSTANT(KEY_BACKTAB);
- BIND_CORE_ENUM_CONSTANT(KEY_BACKSPACE);
- BIND_CORE_ENUM_CONSTANT(KEY_ENTER);
- BIND_CORE_ENUM_CONSTANT(KEY_KP_ENTER);
- BIND_CORE_ENUM_CONSTANT(KEY_INSERT);
- BIND_CORE_ENUM_CONSTANT(KEY_DELETE);
- BIND_CORE_ENUM_CONSTANT(KEY_PAUSE);
- BIND_CORE_ENUM_CONSTANT(KEY_PRINT);
- BIND_CORE_ENUM_CONSTANT(KEY_SYSREQ);
- BIND_CORE_ENUM_CONSTANT(KEY_CLEAR);
- BIND_CORE_ENUM_CONSTANT(KEY_HOME);
- BIND_CORE_ENUM_CONSTANT(KEY_END);
- BIND_CORE_ENUM_CONSTANT(KEY_LEFT);
- BIND_CORE_ENUM_CONSTANT(KEY_UP);
- BIND_CORE_ENUM_CONSTANT(KEY_RIGHT);
- BIND_CORE_ENUM_CONSTANT(KEY_DOWN);
- BIND_CORE_ENUM_CONSTANT(KEY_PAGEUP);
- BIND_CORE_ENUM_CONSTANT(KEY_PAGEDOWN);
- BIND_CORE_ENUM_CONSTANT(KEY_SHIFT);
- BIND_CORE_ENUM_CONSTANT(KEY_CTRL);
- BIND_CORE_ENUM_CONSTANT(KEY_META);
- BIND_CORE_ENUM_CONSTANT(KEY_ALT);
- BIND_CORE_ENUM_CONSTANT(KEY_CAPSLOCK);
- BIND_CORE_ENUM_CONSTANT(KEY_NUMLOCK);
- BIND_CORE_ENUM_CONSTANT(KEY_SCROLLLOCK);
- BIND_CORE_ENUM_CONSTANT(KEY_F1);
- BIND_CORE_ENUM_CONSTANT(KEY_F2);
- BIND_CORE_ENUM_CONSTANT(KEY_F3);
- BIND_CORE_ENUM_CONSTANT(KEY_F4);
- BIND_CORE_ENUM_CONSTANT(KEY_F5);
- BIND_CORE_ENUM_CONSTANT(KEY_F6);
- BIND_CORE_ENUM_CONSTANT(KEY_F7);
- BIND_CORE_ENUM_CONSTANT(KEY_F8);
- BIND_CORE_ENUM_CONSTANT(KEY_F9);
- BIND_CORE_ENUM_CONSTANT(KEY_F10);
- BIND_CORE_ENUM_CONSTANT(KEY_F11);
- BIND_CORE_ENUM_CONSTANT(KEY_F12);
- BIND_CORE_ENUM_CONSTANT(KEY_F13);
- BIND_CORE_ENUM_CONSTANT(KEY_F14);
- BIND_CORE_ENUM_CONSTANT(KEY_F15);
- BIND_CORE_ENUM_CONSTANT(KEY_F16);
- BIND_CORE_ENUM_CONSTANT(KEY_KP_MULTIPLY);
- BIND_CORE_ENUM_CONSTANT(KEY_KP_DIVIDE);
- BIND_CORE_ENUM_CONSTANT(KEY_KP_SUBTRACT);
- BIND_CORE_ENUM_CONSTANT(KEY_KP_PERIOD);
- BIND_CORE_ENUM_CONSTANT(KEY_KP_ADD);
- BIND_CORE_ENUM_CONSTANT(KEY_KP_0);
- BIND_CORE_ENUM_CONSTANT(KEY_KP_1);
- BIND_CORE_ENUM_CONSTANT(KEY_KP_2);
- BIND_CORE_ENUM_CONSTANT(KEY_KP_3);
- BIND_CORE_ENUM_CONSTANT(KEY_KP_4);
- BIND_CORE_ENUM_CONSTANT(KEY_KP_5);
- BIND_CORE_ENUM_CONSTANT(KEY_KP_6);
- BIND_CORE_ENUM_CONSTANT(KEY_KP_7);
- BIND_CORE_ENUM_CONSTANT(KEY_KP_8);
- BIND_CORE_ENUM_CONSTANT(KEY_KP_9);
- BIND_CORE_ENUM_CONSTANT(KEY_SUPER_L);
- BIND_CORE_ENUM_CONSTANT(KEY_SUPER_R);
- BIND_CORE_ENUM_CONSTANT(KEY_MENU);
- BIND_CORE_ENUM_CONSTANT(KEY_HYPER_L);
- BIND_CORE_ENUM_CONSTANT(KEY_HYPER_R);
- BIND_CORE_ENUM_CONSTANT(KEY_HELP);
- BIND_CORE_ENUM_CONSTANT(KEY_DIRECTION_L);
- BIND_CORE_ENUM_CONSTANT(KEY_DIRECTION_R);
- BIND_CORE_ENUM_CONSTANT(KEY_BACK);
- BIND_CORE_ENUM_CONSTANT(KEY_FORWARD);
- BIND_CORE_ENUM_CONSTANT(KEY_STOP);
- BIND_CORE_ENUM_CONSTANT(KEY_REFRESH);
- BIND_CORE_ENUM_CONSTANT(KEY_VOLUMEDOWN);
- BIND_CORE_ENUM_CONSTANT(KEY_VOLUMEMUTE);
- BIND_CORE_ENUM_CONSTANT(KEY_VOLUMEUP);
- BIND_CORE_ENUM_CONSTANT(KEY_BASSBOOST);
- BIND_CORE_ENUM_CONSTANT(KEY_BASSUP);
- BIND_CORE_ENUM_CONSTANT(KEY_BASSDOWN);
- BIND_CORE_ENUM_CONSTANT(KEY_TREBLEUP);
- BIND_CORE_ENUM_CONSTANT(KEY_TREBLEDOWN);
- BIND_CORE_ENUM_CONSTANT(KEY_MEDIAPLAY);
- BIND_CORE_ENUM_CONSTANT(KEY_MEDIASTOP);
- BIND_CORE_ENUM_CONSTANT(KEY_MEDIAPREVIOUS);
- BIND_CORE_ENUM_CONSTANT(KEY_MEDIANEXT);
- BIND_CORE_ENUM_CONSTANT(KEY_MEDIARECORD);
- BIND_CORE_ENUM_CONSTANT(KEY_HOMEPAGE);
- BIND_CORE_ENUM_CONSTANT(KEY_FAVORITES);
- BIND_CORE_ENUM_CONSTANT(KEY_SEARCH);
- BIND_CORE_ENUM_CONSTANT(KEY_STANDBY);
- BIND_CORE_ENUM_CONSTANT(KEY_OPENURL);
- BIND_CORE_ENUM_CONSTANT(KEY_LAUNCHMAIL);
- BIND_CORE_ENUM_CONSTANT(KEY_LAUNCHMEDIA);
- BIND_CORE_ENUM_CONSTANT(KEY_LAUNCH0);
- BIND_CORE_ENUM_CONSTANT(KEY_LAUNCH1);
- BIND_CORE_ENUM_CONSTANT(KEY_LAUNCH2);
- BIND_CORE_ENUM_CONSTANT(KEY_LAUNCH3);
- BIND_CORE_ENUM_CONSTANT(KEY_LAUNCH4);
- BIND_CORE_ENUM_CONSTANT(KEY_LAUNCH5);
- BIND_CORE_ENUM_CONSTANT(KEY_LAUNCH6);
- BIND_CORE_ENUM_CONSTANT(KEY_LAUNCH7);
- BIND_CORE_ENUM_CONSTANT(KEY_LAUNCH8);
- BIND_CORE_ENUM_CONSTANT(KEY_LAUNCH9);
- BIND_CORE_ENUM_CONSTANT(KEY_LAUNCHA);
- BIND_CORE_ENUM_CONSTANT(KEY_LAUNCHB);
- BIND_CORE_ENUM_CONSTANT(KEY_LAUNCHC);
- BIND_CORE_ENUM_CONSTANT(KEY_LAUNCHD);
- BIND_CORE_ENUM_CONSTANT(KEY_LAUNCHE);
- BIND_CORE_ENUM_CONSTANT(KEY_LAUNCHF);
-
- BIND_CORE_ENUM_CONSTANT(KEY_UNKNOWN);
- BIND_CORE_ENUM_CONSTANT(KEY_SPACE);
- BIND_CORE_ENUM_CONSTANT(KEY_EXCLAM);
- BIND_CORE_ENUM_CONSTANT(KEY_QUOTEDBL);
- BIND_CORE_ENUM_CONSTANT(KEY_NUMBERSIGN);
- BIND_CORE_ENUM_CONSTANT(KEY_DOLLAR);
- BIND_CORE_ENUM_CONSTANT(KEY_PERCENT);
- BIND_CORE_ENUM_CONSTANT(KEY_AMPERSAND);
- BIND_CORE_ENUM_CONSTANT(KEY_APOSTROPHE);
- BIND_CORE_ENUM_CONSTANT(KEY_PARENLEFT);
- BIND_CORE_ENUM_CONSTANT(KEY_PARENRIGHT);
- BIND_CORE_ENUM_CONSTANT(KEY_ASTERISK);
- BIND_CORE_ENUM_CONSTANT(KEY_PLUS);
- BIND_CORE_ENUM_CONSTANT(KEY_COMMA);
- BIND_CORE_ENUM_CONSTANT(KEY_MINUS);
- BIND_CORE_ENUM_CONSTANT(KEY_PERIOD);
- BIND_CORE_ENUM_CONSTANT(KEY_SLASH);
- BIND_CORE_ENUM_CONSTANT(KEY_0);
- BIND_CORE_ENUM_CONSTANT(KEY_1);
- BIND_CORE_ENUM_CONSTANT(KEY_2);
- BIND_CORE_ENUM_CONSTANT(KEY_3);
- BIND_CORE_ENUM_CONSTANT(KEY_4);
- BIND_CORE_ENUM_CONSTANT(KEY_5);
- BIND_CORE_ENUM_CONSTANT(KEY_6);
- BIND_CORE_ENUM_CONSTANT(KEY_7);
- BIND_CORE_ENUM_CONSTANT(KEY_8);
- BIND_CORE_ENUM_CONSTANT(KEY_9);
- BIND_CORE_ENUM_CONSTANT(KEY_COLON);
- BIND_CORE_ENUM_CONSTANT(KEY_SEMICOLON);
- BIND_CORE_ENUM_CONSTANT(KEY_LESS);
- BIND_CORE_ENUM_CONSTANT(KEY_EQUAL);
- BIND_CORE_ENUM_CONSTANT(KEY_GREATER);
- BIND_CORE_ENUM_CONSTANT(KEY_QUESTION);
- BIND_CORE_ENUM_CONSTANT(KEY_AT);
- BIND_CORE_ENUM_CONSTANT(KEY_A);
- BIND_CORE_ENUM_CONSTANT(KEY_B);
- BIND_CORE_ENUM_CONSTANT(KEY_C);
- BIND_CORE_ENUM_CONSTANT(KEY_D);
- BIND_CORE_ENUM_CONSTANT(KEY_E);
- BIND_CORE_ENUM_CONSTANT(KEY_F);
- BIND_CORE_ENUM_CONSTANT(KEY_G);
- BIND_CORE_ENUM_CONSTANT(KEY_H);
- BIND_CORE_ENUM_CONSTANT(KEY_I);
- BIND_CORE_ENUM_CONSTANT(KEY_J);
- BIND_CORE_ENUM_CONSTANT(KEY_K);
- BIND_CORE_ENUM_CONSTANT(KEY_L);
- BIND_CORE_ENUM_CONSTANT(KEY_M);
- BIND_CORE_ENUM_CONSTANT(KEY_N);
- BIND_CORE_ENUM_CONSTANT(KEY_O);
- BIND_CORE_ENUM_CONSTANT(KEY_P);
- BIND_CORE_ENUM_CONSTANT(KEY_Q);
- BIND_CORE_ENUM_CONSTANT(KEY_R);
- BIND_CORE_ENUM_CONSTANT(KEY_S);
- BIND_CORE_ENUM_CONSTANT(KEY_T);
- BIND_CORE_ENUM_CONSTANT(KEY_U);
- BIND_CORE_ENUM_CONSTANT(KEY_V);
- BIND_CORE_ENUM_CONSTANT(KEY_W);
- BIND_CORE_ENUM_CONSTANT(KEY_X);
- BIND_CORE_ENUM_CONSTANT(KEY_Y);
- BIND_CORE_ENUM_CONSTANT(KEY_Z);
- BIND_CORE_ENUM_CONSTANT(KEY_BRACKETLEFT);
- BIND_CORE_ENUM_CONSTANT(KEY_BACKSLASH);
- BIND_CORE_ENUM_CONSTANT(KEY_BRACKETRIGHT);
- BIND_CORE_ENUM_CONSTANT(KEY_ASCIICIRCUM);
- BIND_CORE_ENUM_CONSTANT(KEY_UNDERSCORE);
- BIND_CORE_ENUM_CONSTANT(KEY_QUOTELEFT);
- BIND_CORE_ENUM_CONSTANT(KEY_BRACELEFT);
- BIND_CORE_ENUM_CONSTANT(KEY_BAR);
- BIND_CORE_ENUM_CONSTANT(KEY_BRACERIGHT);
- BIND_CORE_ENUM_CONSTANT(KEY_ASCIITILDE);
- BIND_CORE_ENUM_CONSTANT(KEY_NOBREAKSPACE);
- BIND_CORE_ENUM_CONSTANT(KEY_EXCLAMDOWN);
- BIND_CORE_ENUM_CONSTANT(KEY_CENT);
- BIND_CORE_ENUM_CONSTANT(KEY_STERLING);
- BIND_CORE_ENUM_CONSTANT(KEY_CURRENCY);
- BIND_CORE_ENUM_CONSTANT(KEY_YEN);
- BIND_CORE_ENUM_CONSTANT(KEY_BROKENBAR);
- BIND_CORE_ENUM_CONSTANT(KEY_SECTION);
- BIND_CORE_ENUM_CONSTANT(KEY_DIAERESIS);
- BIND_CORE_ENUM_CONSTANT(KEY_COPYRIGHT);
- BIND_CORE_ENUM_CONSTANT(KEY_ORDFEMININE);
- BIND_CORE_ENUM_CONSTANT(KEY_GUILLEMOTLEFT);
- BIND_CORE_ENUM_CONSTANT(KEY_NOTSIGN);
- BIND_CORE_ENUM_CONSTANT(KEY_HYPHEN);
- BIND_CORE_ENUM_CONSTANT(KEY_REGISTERED);
- BIND_CORE_ENUM_CONSTANT(KEY_MACRON);
- BIND_CORE_ENUM_CONSTANT(KEY_DEGREE);
- BIND_CORE_ENUM_CONSTANT(KEY_PLUSMINUS);
- BIND_CORE_ENUM_CONSTANT(KEY_TWOSUPERIOR);
- BIND_CORE_ENUM_CONSTANT(KEY_THREESUPERIOR);
- BIND_CORE_ENUM_CONSTANT(KEY_ACUTE);
- BIND_CORE_ENUM_CONSTANT(KEY_MU);
- BIND_CORE_ENUM_CONSTANT(KEY_PARAGRAPH);
- BIND_CORE_ENUM_CONSTANT(KEY_PERIODCENTERED);
- BIND_CORE_ENUM_CONSTANT(KEY_CEDILLA);
- BIND_CORE_ENUM_CONSTANT(KEY_ONESUPERIOR);
- BIND_CORE_ENUM_CONSTANT(KEY_MASCULINE);
- BIND_CORE_ENUM_CONSTANT(KEY_GUILLEMOTRIGHT);
- BIND_CORE_ENUM_CONSTANT(KEY_ONEQUARTER);
- BIND_CORE_ENUM_CONSTANT(KEY_ONEHALF);
- BIND_CORE_ENUM_CONSTANT(KEY_THREEQUARTERS);
- BIND_CORE_ENUM_CONSTANT(KEY_QUESTIONDOWN);
- BIND_CORE_ENUM_CONSTANT(KEY_AGRAVE);
- BIND_CORE_ENUM_CONSTANT(KEY_AACUTE);
- BIND_CORE_ENUM_CONSTANT(KEY_ACIRCUMFLEX);
- BIND_CORE_ENUM_CONSTANT(KEY_ATILDE);
- BIND_CORE_ENUM_CONSTANT(KEY_ADIAERESIS);
- BIND_CORE_ENUM_CONSTANT(KEY_ARING);
- BIND_CORE_ENUM_CONSTANT(KEY_AE);
- BIND_CORE_ENUM_CONSTANT(KEY_CCEDILLA);
- BIND_CORE_ENUM_CONSTANT(KEY_EGRAVE);
- BIND_CORE_ENUM_CONSTANT(KEY_EACUTE);
- BIND_CORE_ENUM_CONSTANT(KEY_ECIRCUMFLEX);
- BIND_CORE_ENUM_CONSTANT(KEY_EDIAERESIS);
- BIND_CORE_ENUM_CONSTANT(KEY_IGRAVE);
- BIND_CORE_ENUM_CONSTANT(KEY_IACUTE);
- BIND_CORE_ENUM_CONSTANT(KEY_ICIRCUMFLEX);
- BIND_CORE_ENUM_CONSTANT(KEY_IDIAERESIS);
- BIND_CORE_ENUM_CONSTANT(KEY_ETH);
- BIND_CORE_ENUM_CONSTANT(KEY_NTILDE);
- BIND_CORE_ENUM_CONSTANT(KEY_OGRAVE);
- BIND_CORE_ENUM_CONSTANT(KEY_OACUTE);
- BIND_CORE_ENUM_CONSTANT(KEY_OCIRCUMFLEX);
- BIND_CORE_ENUM_CONSTANT(KEY_OTILDE);
- BIND_CORE_ENUM_CONSTANT(KEY_ODIAERESIS);
- BIND_CORE_ENUM_CONSTANT(KEY_MULTIPLY);
- BIND_CORE_ENUM_CONSTANT(KEY_OOBLIQUE);
- BIND_CORE_ENUM_CONSTANT(KEY_UGRAVE);
- BIND_CORE_ENUM_CONSTANT(KEY_UACUTE);
- BIND_CORE_ENUM_CONSTANT(KEY_UCIRCUMFLEX);
- BIND_CORE_ENUM_CONSTANT(KEY_UDIAERESIS);
- BIND_CORE_ENUM_CONSTANT(KEY_YACUTE);
- BIND_CORE_ENUM_CONSTANT(KEY_THORN);
- BIND_CORE_ENUM_CONSTANT(KEY_SSHARP);
-
- BIND_CORE_ENUM_CONSTANT(KEY_DIVISION);
- BIND_CORE_ENUM_CONSTANT(KEY_YDIAERESIS);
-
- BIND_CORE_ENUM_CONSTANT(KEY_CODE_MASK);
- BIND_CORE_ENUM_CONSTANT(KEY_MODIFIER_MASK);
-
- BIND_CORE_ENUM_CONSTANT(KEY_MASK_SHIFT);
- BIND_CORE_ENUM_CONSTANT(KEY_MASK_ALT);
- BIND_CORE_ENUM_CONSTANT(KEY_MASK_META);
- BIND_CORE_ENUM_CONSTANT(KEY_MASK_CTRL);
- BIND_CORE_ENUM_CONSTANT_NO_VAL(KEY_MASK_CMD);
- BIND_CORE_ENUM_CONSTANT(KEY_MASK_KPAD);
- BIND_CORE_ENUM_CONSTANT(KEY_MASK_GROUP_SWITCH);
-
- // mouse
- BIND_CORE_ENUM_CONSTANT(MOUSE_BUTTON_LEFT);
- BIND_CORE_ENUM_CONSTANT(MOUSE_BUTTON_RIGHT);
- BIND_CORE_ENUM_CONSTANT(MOUSE_BUTTON_MIDDLE);
- BIND_CORE_ENUM_CONSTANT(MOUSE_BUTTON_XBUTTON1);
- BIND_CORE_ENUM_CONSTANT(MOUSE_BUTTON_XBUTTON2);
- BIND_CORE_ENUM_CONSTANT(MOUSE_BUTTON_WHEEL_UP);
- BIND_CORE_ENUM_CONSTANT(MOUSE_BUTTON_WHEEL_DOWN);
- BIND_CORE_ENUM_CONSTANT(MOUSE_BUTTON_WHEEL_LEFT);
- BIND_CORE_ENUM_CONSTANT(MOUSE_BUTTON_WHEEL_RIGHT);
- BIND_CORE_ENUM_CONSTANT(MOUSE_BUTTON_MASK_LEFT);
- BIND_CORE_ENUM_CONSTANT(MOUSE_BUTTON_MASK_RIGHT);
- BIND_CORE_ENUM_CONSTANT(MOUSE_BUTTON_MASK_MIDDLE);
- BIND_CORE_ENUM_CONSTANT(MOUSE_BUTTON_MASK_XBUTTON1);
- BIND_CORE_ENUM_CONSTANT(MOUSE_BUTTON_MASK_XBUTTON2);
-
- // Joypad buttons
- BIND_CORE_ENUM_CONSTANT(JOY_BUTTON_INVALID);
- BIND_CORE_ENUM_CONSTANT(JOY_BUTTON_A);
- BIND_CORE_ENUM_CONSTANT(JOY_BUTTON_B);
- BIND_CORE_ENUM_CONSTANT(JOY_BUTTON_X);
- BIND_CORE_ENUM_CONSTANT(JOY_BUTTON_Y);
- BIND_CORE_ENUM_CONSTANT(JOY_BUTTON_BACK);
- BIND_CORE_ENUM_CONSTANT(JOY_BUTTON_GUIDE);
- BIND_CORE_ENUM_CONSTANT(JOY_BUTTON_START);
- BIND_CORE_ENUM_CONSTANT(JOY_BUTTON_LEFT_STICK);
- BIND_CORE_ENUM_CONSTANT(JOY_BUTTON_RIGHT_STICK);
- BIND_CORE_ENUM_CONSTANT(JOY_BUTTON_LEFT_SHOULDER);
- BIND_CORE_ENUM_CONSTANT(JOY_BUTTON_RIGHT_SHOULDER);
- BIND_CORE_ENUM_CONSTANT(JOY_BUTTON_DPAD_UP);
- BIND_CORE_ENUM_CONSTANT(JOY_BUTTON_DPAD_DOWN);
- BIND_CORE_ENUM_CONSTANT(JOY_BUTTON_DPAD_LEFT);
- BIND_CORE_ENUM_CONSTANT(JOY_BUTTON_DPAD_RIGHT);
- BIND_CORE_ENUM_CONSTANT(JOY_BUTTON_MISC1);
- BIND_CORE_ENUM_CONSTANT(JOY_BUTTON_PADDLE1);
- BIND_CORE_ENUM_CONSTANT(JOY_BUTTON_PADDLE2);
- BIND_CORE_ENUM_CONSTANT(JOY_BUTTON_PADDLE3);
- BIND_CORE_ENUM_CONSTANT(JOY_BUTTON_PADDLE4);
- BIND_CORE_ENUM_CONSTANT(JOY_BUTTON_TOUCHPAD);
- BIND_CORE_ENUM_CONSTANT(JOY_BUTTON_SDL_MAX);
- BIND_CORE_ENUM_CONSTANT(JOY_BUTTON_MAX);
-
- // Joypad axes
- BIND_CORE_ENUM_CONSTANT(JOY_AXIS_INVALID);
- BIND_CORE_ENUM_CONSTANT(JOY_AXIS_LEFT_X);
- BIND_CORE_ENUM_CONSTANT(JOY_AXIS_LEFT_Y);
- BIND_CORE_ENUM_CONSTANT(JOY_AXIS_RIGHT_X);
- BIND_CORE_ENUM_CONSTANT(JOY_AXIS_RIGHT_Y);
- BIND_CORE_ENUM_CONSTANT(JOY_AXIS_TRIGGER_LEFT);
- BIND_CORE_ENUM_CONSTANT(JOY_AXIS_TRIGGER_RIGHT);
- BIND_CORE_ENUM_CONSTANT(JOY_AXIS_SDL_MAX);
- BIND_CORE_ENUM_CONSTANT(JOY_AXIS_MAX);
-
- // midi
- BIND_CORE_ENUM_CONSTANT(MIDI_MESSAGE_NOTE_OFF);
- BIND_CORE_ENUM_CONSTANT(MIDI_MESSAGE_NOTE_ON);
- BIND_CORE_ENUM_CONSTANT(MIDI_MESSAGE_AFTERTOUCH);
- BIND_CORE_ENUM_CONSTANT(MIDI_MESSAGE_CONTROL_CHANGE);
- BIND_CORE_ENUM_CONSTANT(MIDI_MESSAGE_PROGRAM_CHANGE);
- BIND_CORE_ENUM_CONSTANT(MIDI_MESSAGE_CHANNEL_PRESSURE);
- BIND_CORE_ENUM_CONSTANT(MIDI_MESSAGE_PITCH_BEND);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, SPECIAL);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, ESCAPE);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, TAB);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, BACKTAB);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, BACKSPACE);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, ENTER);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, KP_ENTER);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, INSERT);
+ BIND_CORE_ENUM_CLASS_CONSTANT_CUSTOM(Key, KEY_DELETE, KEY_DELETE);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, PAUSE);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, PRINT);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, SYSREQ);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, CLEAR);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, HOME);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, END);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, LEFT);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, UP);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, RIGHT);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, DOWN);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, PAGEUP);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, PAGEDOWN);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, SHIFT);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, CTRL);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, META);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, ALT);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, CAPSLOCK);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, NUMLOCK);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, SCROLLLOCK);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, F1);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, F2);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, F3);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, F4);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, F5);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, F6);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, F7);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, F8);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, F9);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, F10);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, F11);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, F12);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, F13);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, F14);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, F15);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, F16);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, KP_MULTIPLY);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, KP_DIVIDE);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, KP_SUBTRACT);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, KP_PERIOD);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, KP_ADD);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, KP_0);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, KP_1);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, KP_2);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, KP_3);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, KP_4);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, KP_5);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, KP_6);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, KP_7);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, KP_8);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, KP_9);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, SUPER_L);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, SUPER_R);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, MENU);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, HYPER_L);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, HYPER_R);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, HELP);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, DIRECTION_L);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, DIRECTION_R);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, BACK);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, FORWARD);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, STOP);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, REFRESH);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, VOLUMEDOWN);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, VOLUMEMUTE);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, VOLUMEUP);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, BASSBOOST);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, BASSUP);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, BASSDOWN);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, TREBLEUP);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, TREBLEDOWN);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, MEDIAPLAY);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, MEDIASTOP);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, MEDIAPREVIOUS);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, MEDIANEXT);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, MEDIARECORD);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, HOMEPAGE);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, FAVORITES);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, SEARCH);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, STANDBY);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, OPENURL);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, LAUNCHMAIL);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, LAUNCHMEDIA);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, LAUNCH0);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, LAUNCH1);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, LAUNCH2);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, LAUNCH3);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, LAUNCH4);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, LAUNCH5);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, LAUNCH6);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, LAUNCH7);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, LAUNCH8);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, LAUNCH9);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, LAUNCHA);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, LAUNCHB);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, LAUNCHC);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, LAUNCHD);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, LAUNCHE);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, LAUNCHF);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, UNKNOWN);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, SPACE);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, EXCLAM);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, QUOTEDBL);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, NUMBERSIGN);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, DOLLAR);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, PERCENT);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, AMPERSAND);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, APOSTROPHE);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, PARENLEFT);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, PARENRIGHT);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, ASTERISK);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, PLUS);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, COMMA);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, MINUS);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, PERIOD);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, SLASH);
+ BIND_CORE_ENUM_CLASS_CONSTANT_CUSTOM(Key, KEY_0, KEY_0);
+ BIND_CORE_ENUM_CLASS_CONSTANT_CUSTOM(Key, KEY_1, KEY_1);
+ BIND_CORE_ENUM_CLASS_CONSTANT_CUSTOM(Key, KEY_2, KEY_2);
+ BIND_CORE_ENUM_CLASS_CONSTANT_CUSTOM(Key, KEY_3, KEY_3);
+ BIND_CORE_ENUM_CLASS_CONSTANT_CUSTOM(Key, KEY_4, KEY_4);
+ BIND_CORE_ENUM_CLASS_CONSTANT_CUSTOM(Key, KEY_5, KEY_5);
+ BIND_CORE_ENUM_CLASS_CONSTANT_CUSTOM(Key, KEY_6, KEY_6);
+ BIND_CORE_ENUM_CLASS_CONSTANT_CUSTOM(Key, KEY_7, KEY_7);
+ BIND_CORE_ENUM_CLASS_CONSTANT_CUSTOM(Key, KEY_8, KEY_8);
+ BIND_CORE_ENUM_CLASS_CONSTANT_CUSTOM(Key, KEY_9, KEY_9);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, COLON);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, SEMICOLON);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, LESS);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, EQUAL);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, GREATER);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, QUESTION);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, AT);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, A);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, B);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, C);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, D);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, E);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, F);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, G);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, H);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, I);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, J);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, K);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, L);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, M);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, N);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, O);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, P);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, Q);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, R);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, S);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, T);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, U);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, V);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, W);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, X);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, Y);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, Z);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, BRACKETLEFT);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, BACKSLASH);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, BRACKETRIGHT);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, ASCIICIRCUM);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, UNDERSCORE);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, QUOTELEFT);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, BRACELEFT);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, BAR);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, BRACERIGHT);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, ASCIITILDE);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, NOBREAKSPACE);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, EXCLAMDOWN);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, CENT);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, STERLING);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, CURRENCY);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, YEN);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, BROKENBAR);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, SECTION);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, DIAERESIS);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, COPYRIGHT);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, ORDFEMININE);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, GUILLEMOTLEFT);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, NOTSIGN);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, HYPHEN);
+ BIND_CORE_ENUM_CLASS_CONSTANT_CUSTOM(Key, KEY_REGISTERED, KEY_REGISTERED);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, MACRON);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, DEGREE);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, PLUSMINUS);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, TWOSUPERIOR);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, THREESUPERIOR);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, ACUTE);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, MU);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, PARAGRAPH);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, PERIODCENTERED);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, CEDILLA);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, ONESUPERIOR);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, MASCULINE);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, GUILLEMOTRIGHT);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, ONEQUARTER);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, ONEHALF);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, THREEQUARTERS);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, QUESTIONDOWN);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, AGRAVE);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, AACUTE);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, ACIRCUMFLEX);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, ATILDE);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, ADIAERESIS);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, ARING);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, AE);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, CCEDILLA);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, EGRAVE);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, EACUTE);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, ECIRCUMFLEX);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, EDIAERESIS);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, IGRAVE);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, IACUTE);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, ICIRCUMFLEX);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, IDIAERESIS);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, ETH);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, NTILDE);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, OGRAVE);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, OACUTE);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, OCIRCUMFLEX);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, OTILDE);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, ODIAERESIS);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, MULTIPLY);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, OOBLIQUE);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, UGRAVE);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, UACUTE);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, UCIRCUMFLEX);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, UDIAERESIS);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, YACUTE);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, THORN);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, SSHARP);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, DIVISION);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, YDIAERESIS);
+
+ BIND_CORE_ENUM_CLASS_CONSTANT_CUSTOM(KeyModifierMask, KEY_CODE_MASK, CODE_MASK);
+ BIND_CORE_ENUM_CLASS_CONSTANT_CUSTOM(KeyModifierMask, KEY_MODIFIER_MASK, MODIFIER_MASK);
+ BIND_CORE_ENUM_CLASS_CONSTANT(KeyModifierMask, KEY_MASK, SHIFT);
+ BIND_CORE_ENUM_CLASS_CONSTANT(KeyModifierMask, KEY_MASK, ALT);
+ BIND_CORE_ENUM_CLASS_CONSTANT(KeyModifierMask, KEY_MASK, META);
+ BIND_CORE_ENUM_CLASS_CONSTANT(KeyModifierMask, KEY_MASK, CTRL);
+ BIND_CORE_ENUM_CLASS_CONSTANT_NO_VAL(KeyModifierMask, KEY_MASK, CMD);
+ BIND_CORE_ENUM_CLASS_CONSTANT(KeyModifierMask, KEY_MASK, KPAD);
+ BIND_CORE_ENUM_CLASS_CONSTANT(KeyModifierMask, KEY_MASK, GROUP_SWITCH);
+
+ BIND_CORE_ENUM_CLASS_CONSTANT(MouseButton, MOUSE_BUTTON, LEFT);
+ BIND_CORE_ENUM_CLASS_CONSTANT(MouseButton, MOUSE_BUTTON, RIGHT);
+ BIND_CORE_ENUM_CLASS_CONSTANT(MouseButton, MOUSE_BUTTON, MIDDLE);
+ BIND_CORE_ENUM_CLASS_CONSTANT(MouseButton, MOUSE_BUTTON, WHEEL_UP);
+ BIND_CORE_ENUM_CLASS_CONSTANT(MouseButton, MOUSE_BUTTON, WHEEL_DOWN);
+ BIND_CORE_ENUM_CLASS_CONSTANT(MouseButton, MOUSE_BUTTON, WHEEL_LEFT);
+ BIND_CORE_ENUM_CLASS_CONSTANT(MouseButton, MOUSE_BUTTON, WHEEL_RIGHT);
+ BIND_CORE_ENUM_CLASS_CONSTANT_CUSTOM(MouseButton, MOUSE_BUTTON_XBUTTON1, MB_XBUTTON1);
+ BIND_CORE_ENUM_CLASS_CONSTANT_CUSTOM(MouseButton, MOUSE_BUTTON_XBUTTON2, MB_XBUTTON2);
+ BIND_CORE_ENUM_CLASS_CONSTANT(MouseButton, MOUSE_BUTTON, MASK_LEFT);
+ BIND_CORE_ENUM_CLASS_CONSTANT(MouseButton, MOUSE_BUTTON, MASK_RIGHT);
+ BIND_CORE_ENUM_CLASS_CONSTANT(MouseButton, MOUSE_BUTTON, MASK_MIDDLE);
+ BIND_CORE_ENUM_CLASS_CONSTANT(MouseButton, MOUSE_BUTTON, MASK_XBUTTON1);
+ BIND_CORE_ENUM_CLASS_CONSTANT(MouseButton, MOUSE_BUTTON, MASK_XBUTTON2);
+
+ BIND_CORE_ENUM_CLASS_CONSTANT(JoyButton, JOY_BUTTON, INVALID);
+ BIND_CORE_ENUM_CLASS_CONSTANT(JoyButton, JOY_BUTTON, A);
+ BIND_CORE_ENUM_CLASS_CONSTANT(JoyButton, JOY_BUTTON, B);
+ BIND_CORE_ENUM_CLASS_CONSTANT(JoyButton, JOY_BUTTON, X);
+ BIND_CORE_ENUM_CLASS_CONSTANT(JoyButton, JOY_BUTTON, Y);
+ BIND_CORE_ENUM_CLASS_CONSTANT(JoyButton, JOY_BUTTON, BACK);
+ BIND_CORE_ENUM_CLASS_CONSTANT(JoyButton, JOY_BUTTON, GUIDE);
+ BIND_CORE_ENUM_CLASS_CONSTANT(JoyButton, JOY_BUTTON, START);
+ BIND_CORE_ENUM_CLASS_CONSTANT(JoyButton, JOY_BUTTON, LEFT_STICK);
+ BIND_CORE_ENUM_CLASS_CONSTANT(JoyButton, JOY_BUTTON, RIGHT_STICK);
+ BIND_CORE_ENUM_CLASS_CONSTANT(JoyButton, JOY_BUTTON, LEFT_SHOULDER);
+ BIND_CORE_ENUM_CLASS_CONSTANT(JoyButton, JOY_BUTTON, RIGHT_SHOULDER);
+ BIND_CORE_ENUM_CLASS_CONSTANT(JoyButton, JOY_BUTTON, DPAD_UP);
+ BIND_CORE_ENUM_CLASS_CONSTANT(JoyButton, JOY_BUTTON, DPAD_DOWN);
+ BIND_CORE_ENUM_CLASS_CONSTANT(JoyButton, JOY_BUTTON, DPAD_LEFT);
+ BIND_CORE_ENUM_CLASS_CONSTANT(JoyButton, JOY_BUTTON, DPAD_RIGHT);
+ BIND_CORE_ENUM_CLASS_CONSTANT(JoyButton, JOY_BUTTON, MISC1);
+ BIND_CORE_ENUM_CLASS_CONSTANT(JoyButton, JOY_BUTTON, PADDLE1);
+ BIND_CORE_ENUM_CLASS_CONSTANT(JoyButton, JOY_BUTTON, PADDLE2);
+ BIND_CORE_ENUM_CLASS_CONSTANT(JoyButton, JOY_BUTTON, PADDLE3);
+ BIND_CORE_ENUM_CLASS_CONSTANT(JoyButton, JOY_BUTTON, PADDLE4);
+ BIND_CORE_ENUM_CLASS_CONSTANT(JoyButton, JOY_BUTTON, TOUCHPAD);
+ BIND_CORE_ENUM_CLASS_CONSTANT(JoyButton, JOY_BUTTON, SDL_MAX);
+ BIND_CORE_ENUM_CLASS_CONSTANT(JoyButton, JOY_BUTTON, MAX);
+
+ BIND_CORE_ENUM_CLASS_CONSTANT(JoyAxis, JOY_AXIS, INVALID);
+ BIND_CORE_ENUM_CLASS_CONSTANT(JoyAxis, JOY_AXIS, LEFT_X);
+ BIND_CORE_ENUM_CLASS_CONSTANT(JoyAxis, JOY_AXIS, LEFT_Y);
+ BIND_CORE_ENUM_CLASS_CONSTANT(JoyAxis, JOY_AXIS, RIGHT_X);
+ BIND_CORE_ENUM_CLASS_CONSTANT(JoyAxis, JOY_AXIS, RIGHT_Y);
+ BIND_CORE_ENUM_CLASS_CONSTANT(JoyAxis, JOY_AXIS, TRIGGER_LEFT);
+ BIND_CORE_ENUM_CLASS_CONSTANT(JoyAxis, JOY_AXIS, TRIGGER_RIGHT);
+ BIND_CORE_ENUM_CLASS_CONSTANT(JoyAxis, JOY_AXIS, SDL_MAX);
+ BIND_CORE_ENUM_CLASS_CONSTANT(JoyAxis, JOY_AXIS, MAX);
+
+ BIND_CORE_ENUM_CLASS_CONSTANT(MIDIMessage, MIDI_MESSAGE, NOTE_OFF);
+ BIND_CORE_ENUM_CLASS_CONSTANT(MIDIMessage, MIDI_MESSAGE, NOTE_ON);
+ BIND_CORE_ENUM_CLASS_CONSTANT(MIDIMessage, MIDI_MESSAGE, AFTERTOUCH);
+ BIND_CORE_ENUM_CLASS_CONSTANT(MIDIMessage, MIDI_MESSAGE, CONTROL_CHANGE);
+ BIND_CORE_ENUM_CLASS_CONSTANT(MIDIMessage, MIDI_MESSAGE, PROGRAM_CHANGE);
+ BIND_CORE_ENUM_CLASS_CONSTANT(MIDIMessage, MIDI_MESSAGE, CHANNEL_PRESSURE);
+ BIND_CORE_ENUM_CLASS_CONSTANT(MIDIMessage, MIDI_MESSAGE, PITCH_BEND);
// error list
@@ -598,7 +609,7 @@ void register_global_constants() {
BIND_CORE_ENUM_CONSTANT(PROPERTY_USAGE_DEFAULT);
BIND_CORE_ENUM_CONSTANT(PROPERTY_USAGE_DEFAULT_INTL);
- BIND_CORE_ENUM_CONSTANT(PROPERTY_USAGE_NOEDITOR);
+ BIND_CORE_ENUM_CONSTANT(PROPERTY_USAGE_NO_EDITOR);
BIND_CORE_ENUM_CONSTANT(METHOD_FLAG_NORMAL);
BIND_CORE_ENUM_CONSTANT(METHOD_FLAG_EDITOR);
diff --git a/core/debugger/remote_debugger.cpp b/core/debugger/remote_debugger.cpp
index 4607bd2f3f..87e65e592a 100644
--- a/core/debugger/remote_debugger.cpp
+++ b/core/debugger/remote_debugger.cpp
@@ -475,7 +475,7 @@ void RemoteDebugger::_err_handler(void *p_this, const char *p_func, const char *
}
// send_error will lock internally.
- rd->script_debugger->send_error(p_func, p_file, p_line, p_err, p_descr, p_editor_notify, p_type, si);
+ rd->script_debugger->send_error(String::utf8(p_func), String::utf8(p_file), p_line, String::utf8(p_err), String::utf8(p_descr), p_editor_notify, p_type, si);
}
void RemoteDebugger::_print_handler(void *p_this, const String &p_string, bool p_error) {
diff --git a/core/extension/gdnative_interface.cpp b/core/extension/gdnative_interface.cpp
index 4770c9c65f..19988a26cb 100644
--- a/core/extension/gdnative_interface.cpp
+++ b/core/extension/gdnative_interface.cpp
@@ -774,13 +774,25 @@ static GDNativeTypePtr gdnative_packed_vector3_array_operator_index_const(const
static GDNativeVariantPtr gdnative_array_operator_index(GDNativeTypePtr p_self, GDNativeInt p_index) {
Array *self = (Array *)p_self;
ERR_FAIL_INDEX_V(p_index, self->size(), nullptr);
- return (GDNativeTypePtr)&self[p_index];
+ return (GDNativeVariantPtr)&self->operator[](p_index);
}
static GDNativeVariantPtr gdnative_array_operator_index_const(const GDNativeTypePtr p_self, GDNativeInt p_index) {
const Array *self = (const Array *)p_self;
ERR_FAIL_INDEX_V(p_index, self->size(), nullptr);
- return (GDNativeTypePtr)&self[p_index];
+ return (GDNativeVariantPtr)&self->operator[](p_index);
+}
+
+/* Dictionary functions */
+
+static GDNativeVariantPtr gdnative_dictionary_operator_index(GDNativeTypePtr p_self, const GDNativeVariantPtr p_key) {
+ Dictionary *self = (Dictionary *)p_self;
+ return (GDNativeVariantPtr)&self->operator[](*(const Variant *)p_key);
+}
+
+static GDNativeVariantPtr gdnative_dictionary_operator_index_const(const GDNativeTypePtr p_self, const GDNativeVariantPtr p_key) {
+ const Dictionary *self = (const Dictionary *)p_self;
+ return (GDNativeVariantPtr)&self->operator[](*(const Variant *)p_key);
}
/* OBJECT API */
@@ -1001,6 +1013,11 @@ void gdnative_setup_interface(GDNativeInterface *p_interface) {
gdni.array_operator_index = gdnative_array_operator_index;
gdni.array_operator_index_const = gdnative_array_operator_index_const;
+ /* Dictionary functions */
+
+ gdni.dictionary_operator_index = gdnative_dictionary_operator_index;
+ gdni.dictionary_operator_index_const = gdnative_dictionary_operator_index_const;
+
/* OBJECT */
gdni.object_method_bind_call = gdnative_object_method_bind_call;
diff --git a/core/extension/gdnative_interface.h b/core/extension/gdnative_interface.h
index 8f8cb5a3e0..e411a9d85b 100644
--- a/core/extension/gdnative_interface.h
+++ b/core/extension/gdnative_interface.h
@@ -417,6 +417,11 @@ typedef struct {
GDNativeVariantPtr (*array_operator_index)(GDNativeTypePtr p_self, GDNativeInt p_index); // p_self should be an Array ptr
GDNativeVariantPtr (*array_operator_index_const)(const GDNativeTypePtr p_self, GDNativeInt p_index); // p_self should be an Array ptr
+ /* Dictionary functions */
+
+ GDNativeVariantPtr (*dictionary_operator_index)(GDNativeTypePtr p_self, const GDNativeVariantPtr p_key); // p_self should be an Dictionary ptr
+ GDNativeVariantPtr (*dictionary_operator_index_const)(const GDNativeTypePtr p_self, const GDNativeVariantPtr p_key); // p_self should be an Dictionary ptr
+
/* OBJECT */
void (*object_method_bind_call)(const GDNativeMethodBindPtr p_method_bind, GDNativeObjectPtr p_instance, const GDNativeVariantPtr *p_args, GDNativeInt p_arg_count, GDNativeVariantPtr r_ret, GDNativeCallError *r_error);
diff --git a/core/input/gamecontrollerdb.txt b/core/input/gamecontrollerdb.txt
index f136d83496..0da8f8dfdb 100644
--- a/core/input/gamecontrollerdb.txt
+++ b/core/input/gamecontrollerdb.txt
@@ -1,11 +1,15 @@
-# Game Controller DB for SDL in 2.0.9 format
+# Game Controller DB for SDL in 2.0.16 format
# Source: https://github.com/gabomdq/SDL_GameControllerDB
# Windows
03000000fa2d00000100000000000000,3DRUDDER,leftx:a0,lefty:a1,rightx:a5,righty:a2,platform:Windows,
-03000000c82d00002038000000000000,8bitdo,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows,
+03000000d0160000600a000000000000,4Play,a:b1,b:b3,back:b4,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b6,leftstick:b14,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b15,righttrigger:b9,rightx:a3,righty:a4,start:b5,x:b0,y:b2,platform:Windows,
+03000000d0160000040d000000000000,4Play,a:b1,b:b3,back:b4,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b6,leftstick:b14,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b15,righttrigger:b9,rightx:a3,righty:a4,start:b5,x:b0,y:b2,platform:Windows,
+03000000d0160000050d000000000000,4Play,a:b1,b:b3,back:b4,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b6,leftstick:b14,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b15,righttrigger:b9,rightx:a3,righty:a4,start:b5,x:b0,y:b2,platform:Windows,
+03000000d0160000060d000000000000,4Play,a:b1,b:b3,back:b4,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b6,leftstick:b14,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b15,righttrigger:b9,rightx:a3,righty:a4,start:b5,x:b0,y:b2,platform:Windows,
+03000000d0160000070d000000000000,4Play,a:b1,b:b3,back:b4,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b6,leftstick:b14,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b15,righttrigger:b9,rightx:a3,righty:a4,start:b5,x:b0,y:b2,platform:Windows,
03000000c82d00000951000000000000,8BitDo Dogbone Modkit,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,start:b11,platform:Windows,
-03000000c82d000011ab000000000000,8BitDo F30,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows,
+03000000c82d000011ab000000000000,8BitDo F30 Arcade Joystick,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows,
03000000c82d00001038000000000000,8BitDo F30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b4,y:b3,platform:Windows,
03000000c82d00000090000000000000,8BitDo FC30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows,
03000000c82d00000650000000000000,8BitDo M30,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:a4,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,start:b11,x:b3,y:b4,platform:Windows,
@@ -14,12 +18,16 @@
03000000c82d00000310000000000000,8BitDo N30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Windows,
03000000c82d00002028000000000000,8BitDo N30,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b4,y:b3,platform:Windows,
03000000c82d00008010000000000000,8BitDo N30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Windows,
+03000000c82d0000e002000000000000,8BitDo N30,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,start:b6,platform:Windows,
03000000c82d00000451000000000000,8BitDo N30 Modkit,a:b1,b:b0,back:b10,dpdown:+a2,dpleft:-a0,dpright:+a0,dpup:-a2,start:b11,platform:Windows,
03000000c82d00000190000000000000,8BitDo N30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows,
03000000c82d00001590000000000000,8BitDo N30 Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b4,y:b3,platform:Windows,
03000000c82d00006528000000000000,8BitDo N30 Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows,
+03000000c82d000012ab000000000000,8BitDo NES30,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Windows,
+03000000c82d00002038000000000000,8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows,
03000000022000000090000000000000,8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows,
03000000203800000900000000000000,8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows,
+03000000c82d00000751000000000000,8BitDo P30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,start:b11,x:b3,y:b4,platform:Windows,
03000000c82d00000360000000000000,8BitDo Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows,
03000000c82d00002867000000000000,8BitDo S30 Modkit,a:b0,b:b1,dpdown:+a2,dpleft:-a0,dpright:+a0,dpup:-a2,leftshoulder:b8,lefttrigger:b9,rightshoulder:b6,righttrigger:b7,start:b11,x:b3,y:b4,platform:Windows,
03000000c82d00000130000000000000,8BitDo SF30,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b4,y:b3,platform:Windows,
@@ -36,6 +44,7 @@
03000000c82d00000351000000000000,8BitDo SN30 Modkit,a:b1,b:b0,back:b10,dpdown:+a2,dpleft:-a0,dpright:+a0,dpup:-a2,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Windows,
03000000c82d00000160000000000000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Windows,
03000000c82d00000161000000000000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Windows,
+03000000c82d00000021000000000000,8BitDo SN30 Pro,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows,
03000000c82d00000121000000000000,8BitDo SN30 Pro for Android,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
03000000c82d00000260000000000000,8BitDo SN30 Pro+,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Windows,
03000000c82d00000261000000000000,8BitDo SN30 Pro+,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Windows,
@@ -43,12 +52,19 @@
03000000c82d00001890000000000000,8BitDo Zero 2,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Windows,
03000000c82d00003032000000000000,8BitDo Zero 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Windows,
03000000a00500003232000000000000,8Bitdo Zero GamePad,a:b0,b:b1,back:b10,dpdown:+a2,dpleft:-a0,dpright:+a0,dpup:-a2,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Windows,
-03000000a30c00002700000000000000,Astro City Mini,a:b2,b:b1,back:b8,leftx:a3,lefty:a4,rightshoulder:b4,righttrigger:b5,start:b9,x:b3,y:b0,platform:Windows,
-03000000a30c00002800000000000000,Astro City Mini,a:b2,b:b1,back:b8,leftx:a3,lefty:a4,rightshoulder:b4,righttrigger:b5,start:b9,x:b3,y:b0,platform:Windows,
-030000008f0e00001200000000000000,Acme GA-02,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b2,y:b3,platform:Windows,
-03000000c01100000355000011010000,ACRUX USB GAME PAD,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
-03000000fa190000f0ff000000000000,Acteck AGJ-3200,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
+03000000d81d00000e00000000000000,AC02,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b11,righttrigger:b3,rightx:a2,righty:a5,start:b8,x:b4,y:b5,platform:Windows,
+030000008f0e00001200000000000000,Acme GA02,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b2,y:b3,platform:Windows,
+03000000c01100000355000000000000,Acrux,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000fa190000f0ff000000000000,Acteck AGJ 3200,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
+030000006d0400000bc2000000000000,Action Pad,a:b0,b:b1,back:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b8,lefttrigger:a5~,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b5,righttrigger:a2~,start:b8,x:b3,y:b4,platform:Windows,
+03000000d1180000402c000000000000,ADT1,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a3,rightx:a2,righty:a5,x:b3,y:b4,platform:Windows,
030000006f0e00001413000000000000,Afterglow,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+030000006f0e00001301000000000000,Afterglow,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+030000006f0e00003901000000000000,Afterglow,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+030000006f0e00001302000000000000,Afterglow,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+03000000ab1200000103000000000000,Afterglow,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+030000006f0e00001304000000000000,Afterglow,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+03000000ad1b000000f9000000000000,Afterglow,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
03000000341a00003608000000000000,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
030000006f0e00000263000000000000,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
030000006f0e00001101000000000000,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
@@ -56,68 +72,147 @@
030000006f0e00001402000000000000,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
030000006f0e00001901000000000000,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
030000006f0e00001a01000000000000,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
-03000000d62000001d57000000000000,Airflo PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000120c00000288000000000000,Nyko Air Flo Xbox Controller,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Windows,
+03000000d62000001d57000000000000,Nyko Airflo PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
03000000491900001904000000000000,Amazon Luna Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b9,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b7,x:b2,y:b3,platform:Windows,
03000000710100001904000000000000,Amazon Luna Controller,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b11,leftshoulder:b5,leftstick:b8,leftx:a0,lefty:a1,misc1:b9,rightshoulder:b4,rightstick:b7,rightx:a3,righty:a4,start:b6,x:b3,y:b2,platform:Windows,
+03000000830500000160000000000000,Arcade,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b3,x:b4,y:b4,platform:Windows,
+03000000120c0000100e000000000000,Armor 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000869800002500000000000000,Astro C40 TR PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000a30c00002700000000000000,Astro City Mini,a:b2,b:b1,back:b8,leftx:a3,lefty:a4,rightshoulder:b4,righttrigger:b5,start:b9,x:b3,y:b0,platform:Windows,
+03000000a30c00002800000000000000,Astro City Mini,a:b2,b:b1,back:b8,leftx:a3,lefty:a4,rightshoulder:b4,righttrigger:b5,start:b9,x:b3,y:b0,platform:Windows,
03000000ef0500000300000000000000,AxisPad,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a2,start:b11,x:b0,y:b1,platform:Windows,
+03000000fd0500000230000000000000,AxisPad,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a5,start:b11,x:b0,y:b1,platform:Windows,
03000000d6200000e557000000000000,Batarang,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000e4150000103f000000000000,Batarang,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
03000000c01100001352000000000000,Battalife Joystick,a:b6,b:b7,back:b2,leftshoulder:b0,leftx:a0,lefty:a1,rightshoulder:b1,start:b3,x:b4,y:b5,platform:Windows,
030000006f0e00003201000000000000,Battlefield 4 PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000ad1b000001f9000000000000,BB 070,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
03000000d62000002a79000000000000,BDA PS4 Fightpad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0500000208000000000000,Belkin Nostromo N40,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,rightx:a5,righty:a2,start:b9,x:b2,y:b3,platform:Windows,
03000000bc2000006012000000000000,Betop 2126F,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
03000000bc2000000055000000000000,Betop BFM Gamepad,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
03000000bc2000006312000000000000,Betop Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
-03000000bc2000006321000000000000,BETOP CONTROLLER,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
+03000000bc2000006321000000000000,Betop Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
03000000bc2000006412000000000000,Betop Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
03000000c01100000555000000000000,Betop Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
03000000c01100000655000000000000,Betop Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
03000000790000000700000000000000,Betop Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b3,y:b0,platform:Windows,
03000000808300000300000000000000,Betop Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b3,y:b0,platform:Windows,
+030000006f0e00006401000000000000,BF One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a2,righty:a5,start:b7,x:b2,y:b3,platform:Windows,
+03000000300f00000202000000000000,Bigben,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a5,righty:a2,start:b7,x:b2,y:b3,platform:Windows,
+030000006b1400000209000000000000,Bigben,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
030000006b1400000055000000000000,Bigben PS3 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
030000006b1400000103000000000000,Bigben PS3 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Windows,
-03000000120c0000210e000000000000,Brook Mars,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000380700008232000000000000,Brawlpad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000120c0000210e000000000000,Brook Mars PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000120c0000200e000000000000,Brook Mars PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
0300000066f700000500000000000000,BrutalLegendTest,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b3,platform:Windows,
-03000000d81d00000b00000000000000,BUFFALO BSGP1601 Series ,a:b5,b:b3,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b9,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b13,x:b4,y:b2,platform:Windows,
+03000000d81d00000b00000000000000,BUFFALO BSGP1601 Series,a:b5,b:b3,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b9,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b13,x:b4,y:b2,platform:Windows,
+030000006d04000042c2000000000000,ChillStream,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
03000000e82000006058000000000000,Cideko AK08b,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
03000000457500000401000000000000,Cobra,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
-030000005e0400008e02000000000000,Controller (XBOX 360 For Windows),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:-a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
-030000005e040000a102000000000000,Controller (Xbox 360 Wireless Receiver for Windows),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:-a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
-030000005e040000ff02000000000000,Controller (Xbox One For Windows) - Wired,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:-a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
-030000005e040000ea02000000000000,Controller (Xbox One For Windows) - Wireless,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:-a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+030000000b0400003365000000000000,Competition Pro,a:b0,b:b1,back:b2,leftx:a0,lefty:a1,start:b3,platform:Windows,
+030000005e0400008e02000000000000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:-a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+030000005e040000a102000000000000,Xbox 360 Wireless Receiver,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:-a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+030000005e040000ff02000000000000,Wired Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:-a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+030000005e040000ea02000000000000,Wireless Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:-a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+030000004c050000c505000000000000,CronusMax Adapter,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000d8140000cefa000000000000,Cthulhu,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000d814000007cd000000000000,Cthulhu,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000380700006352000000000000,Mad Catz CTRLR,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
03000000260900008888000000000000,Cyber Gadget GameCube Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:a4,rightx:a2,righty:a3~,start:b7,x:b2,y:b3,platform:Windows,
+030000003807000002cb000000000000,Cyborg,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
03000000a306000022f6000000000000,Cyborg V.3 Rumble Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:+a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:-a3,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Windows,
+03000000f806000000a3000000000000,DA Leader,a:b7,b:b6,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b0,leftstick:b8,lefttrigger:b1,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b9,righttrigger:b3,rightx:a2,righty:a3,start:b12,x:b4,y:b5,platform:Windows,
+030000001a1c00000001000000000000,Datel,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
03000000451300000830000000000000,Defender Game Racer X7,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
030000007d0400000840000000000000,Destroyer Tiltpad,+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b1,b:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,x:b0,y:b3,platform:Windows,
+03000000c0160000e105000000000000,Dual,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Windows,
03000000791d00000103000000000000,Dual Box WII,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
+030000007c1800000006000000000000,Dual Compat,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b3,platform:Windows,
+030000004f040000070f000000000000,Dual Power,a:b8,b:b9,back:b4,dpdown:b1,dpleft:b2,dpright:b3,dpup:b0,leftshoulder:b13,leftstick:b6,lefttrigger:b14,leftx:a0,lefty:a1,rightshoulder:b12,rightstick:b7,righttrigger:b15,start:b5,x:b10,y:b11,platform:Windows,
+030000004f04000012b3000000000000,Dual Power 3,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Windows,
+030000004f04000020b3000000000000,Dual Trigger,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Windows,
03000000bd12000002e0000000000000,Dual USB Vibration Joystick,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b9,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b10,righttrigger:b5,rightx:a3,righty:a2,start:b11,x:b3,y:b0,platform:Windows,
+03000000ff1100003133000000000000,DualForce,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b0,y:b1,platform:Windows,
030000008f0e00000910000000000000,DualShock 2,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b9,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b10,righttrigger:b5,rightx:a3,righty:a2,start:b11,x:b3,y:b0,platform:Windows,
-030000006f0e00003001000000000000,EA SPORTS PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000317300000100000000000000,DualShock 3,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows,
+030000006f0e00003001000000000000,EA Sports PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000fc0400000250000000000000,Easy Grip,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b9,x:b3,y:b4,platform:Windows,
+030000006e0500000a20000000000000,Elecom DUX60 MMO Gamepad,a:b2,b:b3,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,leftstick:b14,lefttrigger:b12,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b15,righttrigger:b13,rightx:a3,righty:a4,start:b20,x:b0,y:b1,platform:Windows,
03000000b80500000410000000000000,Elecom Gamepad,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b1,platform:Windows,
03000000b80500000610000000000000,Elecom Gamepad,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b1,platform:Windows,
+030000006e0500000520000000000000,Elecom P301U,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b0,y:b1,platform:Windows,
+03000000411200004450000000000000,Elecom U1012,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b0,y:b1,platform:Windows,
+030000006e0500000320000000000000,Elecom U3613M (DInput),a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b0,y:b1,platform:Windows,
+030000006e0500000e20000000000000,Elecom U3912T,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b0,y:b1,platform:Windows,
+030000006e0500000f20000000000000,Elecom U4013S,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b0,y:b1,platform:Windows,
+030000006e0500001320000000000000,Elecom U4113,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+030000006e0500001020000000000000,Elecom U4113S,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a2,start:b11,x:b0,y:b1,platform:Windows,
+030000006e0500000720000000000000,Elecom W01U,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b1,platform:Windows,
03000000120c0000f61c000000000000,Elite,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000242f000000b7000000000000,ESM 9110,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Windows,
+03000000101c0000181c000000000000,Essential,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b4,leftx:a1,lefty:a0,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows,
030000008f0e00000f31000000000000,EXEQ,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Windows,
03000000341a00000108000000000000,EXEQ RF USB Gamepad 8206,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
-030000006f0e00008401000000000000,Faceoff Deluxe+ Audio Wired Controller for Nintendo Switch,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000801000000900000000000000,8BitDo F30 Arcade Stick,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows,
+03000000008000000210000000000000,8BitDo F30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows,
+03000000c82d00001028000000000000,8BitDo F30 Arcade Joystick,a:b0,b:b1,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Windows,
+030000003512000011ab000000000000,8BitDo F30 Arcade Joystick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000790000003018000000000000,F300,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
+03000000242f00003900000000000000,F300 Elite,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+030000006d0400001dc2000000000000,Logitech F310,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+030000006d0400001ec2000000000000,Logitech F510,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+030000006d0400001fc2000000000000,Logitech F710,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+030000006f0e00008401000000000000,Faceoff Deluxe Audio Wired Controller for Nintendo Switch,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
030000006f0e00008001000000000000,Faceoff Wired Pro Controller for Nintendo Switch,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
-03000000852100000201000000000000,FF-GP1,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000021000000090000000000000,FC30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,leftstick:b13,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b9,rightstick:b14,righttrigger:b7,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows,
+0300000011040000c600000000000000,FC801,a:b0,b:b1,back:b6,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b7,x:b2,y:b3,platform:Windows,
+030000004f04000008d0000000000000,Ferrari 150,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000852100000201000000000000,FF GP1,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
030000000d0f00008500000000000000,Fighting Commander 2016 PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
030000000d0f00008400000000000000,Fighting Commander 5,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
030000000d0f00008700000000000000,Fighting Stick mini 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
030000000d0f00008800000000000000,Fighting Stick mini 4,a:b1,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b8,x:b0,y:b3,platform:Windows,
030000000d0f00002700000000000000,FIGHTING STICK V3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
+03000000ad1b000028f0000000000000,Fightpad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b11,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+03000000ad1b00002ef0000000000000,Fightpad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+03000000380700002847000000000000,FightPad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b11,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+03000000ad1b000038f0000000000000,Fightpad TE,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b8,rightshoulder:b5,righttrigger:b9,start:b7,x:b2,y:b3,platform:Windows,
+03000000380700008031000000000000,FightStick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000380700008731000000000000,FightStick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000380700001847000000000000,FightStick,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b8,rightshoulder:b5,righttrigger:b9,start:b7,x:b2,y:b3,platform:Windows,
+030000003807000038b7000000000000,FightStick TE,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b8,rightshoulder:b5,righttrigger:b9,start:b7,x:b2,y:b3,platform:Windows,
78696e70757403000000000000000000,Fightstick TES,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,start:b7,x:b2,y:b3,platform:Windows,
+03000000f806000001a3000000000000,Firestorm,a:b9,b:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b0,leftstick:b10,lefttrigger:b1,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b11,righttrigger:b3,start:b12,x:b8,y:b4,platform:Windows,
+03000000b50700000399000000000000,Firestorm 2,a:b2,b:b4,back:b10,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b8,righttrigger:b9,start:b11,x:b3,y:b5,platform:Windows,
+03000000b50700001302000000000000,Firestorm D3,a:b0,b:b2,leftshoulder:b4,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,x:b1,y:b3,platform:Windows,
+03000000b40400001024000000000000,Flydigi Apex,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows,
+03000000151900004000000000000000,Flydigi Vader 2,a:b11,b:b10,back:b3,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b7,leftstick:b1,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b0,righttrigger:b4,rightx:a3,righty:a4,start:b2,x:b9,y:b8,platform:Windows,
+03000000b40400001124000000000000,Flydigi Vader 2,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b12,lefttrigger:b8,leftx:a0,lefty:a1,paddle1:b4,paddle2:b5,paddle4:b17,rightshoulder:b7,rightstick:b13,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b2,y:b3,platform:Windows,
+030000008305000000a0000000000000,G08XU,a:b0,b:b1,back:b4,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b5,x:b2,y:b3,platform:Windows,
+03000000ac0500002d02000000000000,G2U,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows,
03000000790000002201000000000000,Game Controller for PC,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
0300000066f700000100000000000000,Game VIB Joystick,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a2,start:b11,x:b0,y:b1,platform:Windows,
+03000000430b00000500000000000000,GameCube,a:b0,b:b2,dpdown:b10,dpleft:b8,dpright:b9,dpup:b11,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:a3,rightx:a5,righty:a2,start:b7,x:b1,y:b3,platform:Windows,
+03000000341a000005f7000000000000,GameCube,a:b2,b:b3,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b1,y:b0,platform:Windows,
+03000000790000004718000000000000,GameCube,a:b1,b:b0,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b2,y:b3,platform:Windows,
03000000260900002625000000000000,Gamecube Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b6,lefttrigger:a4,leftx:a0,lefty:a1,righttrigger:a5,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Windows,
-03000000790000004618000000000000,GameCube Controller Adapter,a:b1,b:b2,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,rightx:a5,righty:a2,start:b9,x:b0,y:b3,platform:Windows,
-030000008f0e00000d31000000000000,GAMEPAD 3 TURBO,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000790000004618000000000000,GameCube Controller Adapter,a:b1,b:b0,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,rightx:a5,righty:a2,start:b9,x:b2,y:b3,platform:Windows,
+030000008f0e00000d31000000000000,Gamepad 3 Turbo,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
03000000280400000140000000000000,GamePad Pro USB,a:b1,b:b2,back:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
03000000ac0500003d03000000000000,GameSir,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
03000000ac0500004d04000000000000,GameSir,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
+030000004c0e00001035000000000000,Gamester,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Windows,
+030000000d0f00001110000000000000,GameStick Bluetooth Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows,
+0300000047530000616d000000000000,GameStop,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
03000000ffff00000000000000000000,GameStop Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
03000000c01100000140000000000000,GameStop PS4 Fun Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
-030000009b2800003200000000000000,GC/N64 to USB v3.4,a:b0,b:b7,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,lefttrigger:+a5,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:+a2,rightx:a3,righty:a4,start:b3,x:b1,y:b8,platform:Windows,
-030000009b2800006000000000000000,GC/N64 to USB v3.6,a:b0,b:b7,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,lefttrigger:+a5,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:+a2,rightx:a3,righty:a4,start:b3,x:b1,y:b8,platform:Windows,
+03000000b62500000100000000000000,Gametel GT004 01,a:b3,b:b0,dpdown:b10,dpleft:b9,dpright:b8,dpup:b11,leftshoulder:b4,rightshoulder:b5,start:b7,x:b1,y:b2,platform:Windows,
+030000008f0e00001411000000000000,Gamo2 Divaller PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000120c0000a857000000000000,Gator Claw,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000c9110000f055000000000000,GC100XF,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
030000008305000009a0000000000000,Genius,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
030000008305000031b0000000000000,Genius Maxfire Blaze 3,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
03000000451300000010000000000000,Genius Maxfire Grandias 12,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
@@ -127,50 +222,96 @@
03000000f025000021c1000000000000,Gioteck PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
03000000f0250000c383000000000000,Gioteck VX2 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
03000000f0250000c483000000000000,Gioteck VX2 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
+030000004f04000026b3000000000000,GP XID,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+0300000079000000d418000000000000,GPD Win,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+03000000c6240000025b000000000000,GPX,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
030000007d0400000540000000000000,Gravis Eliminator GamePad Pro,a:b1,b:b2,back:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
+030000007d0400000340000000000000,Gravis G44011 Xterminator,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,rightx:a2,start:b9,x:b3,y:b4,platform:Windows,
+030000008f0e00000610000000000000,GreenAsia,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b9,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b10,righttrigger:b5,rightx:a5,righty:a2,start:b11,x:b3,y:b0,platform:Windows,
+03000000ac0500006b05000000000000,GT2a,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows,
03000000341a00000302000000000000,Hama Scorpad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000fd0500003902000000000000,Hammerhead,a:b3,b:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b2,lefttrigger:b8,rightshoulder:b7,rightstick:b5,righttrigger:b9,start:b10,x:b0,y:b1,platform:Windows,
+03000000fd0500002a26000000000000,Hammerhead FX,a:b3,b:b4,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b0,y:b1,platform:Windows,
+03000000fd0500002f26000000000000,Hammerhead FX,a:b4,b:b5,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b1,y:b2,platform:Windows,
030000000d0f00004900000000000000,Hatsune Miku Sho Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
-030000001008000001e1000000000000,Havit HV-G60,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b3,y:b0,platform:Windows,
-03000000d81400000862000000000000,HitBox Edition Cthulhu+,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b5,lefttrigger:b4,rightshoulder:b7,righttrigger:b6,start:b9,x:b0,y:b3,platform:Windows,
-03000000632500002605000000000000,HJD-X,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
+030000001008000001e1000000000000,Havit HV G60,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b3,y:b0,platform:Windows,
+030000000d0f00000c00000000000000,HEXT,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+030000000d0f00000d00000000000000,Hori Fighting Stick EX2,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Windows,
+030000000d0f00003701000000000000,Hori Fighting Stick Mini,a:b1,b:b0,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b3,y:b2,platform:Windows,
+030000000d0f00002100000000000000,Hori Fighting Stick V3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f00001000000000000000,Hori Fighting Stick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+030000000f0d00000010000000000000,Hori Fighting Stick 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,rightstick:b11,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
+03000000d81400000862000000000000,HitBox Edition Cthulhu,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b5,lefttrigger:b4,rightshoulder:b7,righttrigger:b6,start:b9,x:b0,y:b3,platform:Windows,
+03000000632500002605000000000000,HJD X,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
+030000000d0f00000a00000000000000,Hori DOA,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+030000000d0f00008600000000000000,Hori Fighting Commander,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+030000000d0f0000ba00000000000000,Hori Fighting Commander,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
030000000d0f00002d00000000000000,Hori Fighting Commander 3 Pro,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
-030000000d0f00005f00000000000000,Hori Fighting Commander 4 (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
-030000000d0f00005e00000000000000,Hori Fighting Commander 4 (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f00005f00000000000000,Hori Fighting Commander 4 PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f00005e00000000000000,Hori Fighting Commander 4 PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f00005100000000000000,Hori Fighting Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f00003200000000000000,Hori Fighting Stick 3W,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f0000c000000000000000,Hori Fighting Stick 4,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
030000000d0f00004000000000000000,Hori Fighting Stick Mini 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b5,lefttrigger:b4,rightshoulder:b7,righttrigger:b6,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f0000a000000000000000,Hori Grip TAC4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b13,x:b0,y:b3,platform:Windows,
+030000000d0f00000101000000000000,Hori Mini Hatsune Miku FT,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
030000000d0f00005400000000000000,Hori Pad 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
030000000d0f00000900000000000000,Hori Pad 3 Turbo,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
030000000d0f00004d00000000000000,Hori Pad A,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f00003801000000000000,Hori PC Engine Mini Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,start:b9,platform:Windows,
030000000d0f00009200000000000000,Hori Pokken Tournament DX Pro Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
-030000000d0f00001600000000007803,HORI Real Arcade Pro EX-SE (Xbox 360),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,start:b7,x:b2,y:b3,platform:Windows,
030000000d0f00009c00000000000000,Hori TAC Pro,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f0000c900000000000000,Hori Taiko Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f00002301000000000000,Hori Wired PS4 Controller Light,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows,
030000000d0f0000c100000000000000,Horipad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
-030000000d0f00006e00000000000000,HORIPAD 4 (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
-030000000d0f00006600000000000000,HORIPAD 4 (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f00006400000000000000,Horipad 3TP,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f00001300000000000000,Horipad 3W,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f00006e00000000000000,Horipad 4 PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f00006600000000000000,Horipad 4 PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
030000000d0f00005500000000000000,Horipad 4 FPS,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
-030000000d0f0000ee00000000000000,HORIPAD mini4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
-03000000250900000017000000000000,HRAP2 on PS/SS/N64 Joypad to USB BOX,a:b2,b:b1,back:b9,leftshoulder:b5,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b6,start:b8,x:b3,y:b0,platform:Windows,
+030000000d0f00004200000000000000,Horipad A,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+030000005b1c00002400000000000000,Horipad Mini,a:b3,b:b4,back:b7,leftshoulder:b2,leftx:a0,lefty:a1,rightshoulder:b5,start:b6,x:b0,y:b1,platform:Windows,
+030000000d0f0000ee00000000000000,Horipad Mini 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f00006700000000000000,Horipad One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+030000000d0f0000dc00000000000000,Horipad Switch,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+03000000ad1b000001f5000000000000,Horipad EXT2,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+030000000d0f00002600000000000000,Hori Real Arcade Pro 3P,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f00004b00000000000000,Hori Real Arcade Pro 3W,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f00003d00000000000000,Hori Real Arcade Pro N3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b10,leftstick:b4,lefttrigger:b11,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b6,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f0000ae00000000000000,Hori Real Arcade Pro N4,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+030000000d0f0000d800000000000000,Hori Real Arcade Pro S,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Windows,
+030000000d0f0000aa00000000000000,Hori Real Arcade Pro S,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f0000af00000000000000,Hori Real Arcade Pro VHS,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f00001b00000000000000,Hori Real Arcade Pro VX,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+03000000ad1b000002f5000000000000,Hori Real Arcade Pro VX,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b07,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b08,righttrigger:b11,rightx:a2,righty:a5,start:b6,x:b2,y:b3,platform:Windows,
+03000000250900000017000000000000,Joypad to USB Adapter,a:b2,b:b1,back:b9,leftshoulder:b5,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b6,start:b8,x:b3,y:b0,platform:Windows,
+030000000d0f00008c00000000000000,Hori Real Arcade Pro P4,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+030000000d0f00006f00000000000000,Hori Real Arcade Pro 4 VLX,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
030000008f0e00001330000000000000,HuiJia SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b9,x:b3,y:b0,platform:Windows,
03000000d81d00000f00000000000000,iBUFFALO BSGP1204 Series,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
03000000d81d00001000000000000000,iBUFFALO BSGP1204P Series,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
-03000000830500006020000000000000,iBuffalo SNES Controller,a:b1,b:b0,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b7,x:b3,y:b2,platform:Windows,
+030000005c0a00000285000000000000,iDroidCon,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b4,y:b6,platform:Windows,
+03000000696400006964000000000000,iDroidCon Bluetooth Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
03000000b50700001403000000000000,Impact Black,a:b2,b:b3,back:b8,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Windows,
-030000006f0e00002401000000000000,INJUSTICE FightStick PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
-03000000ac0500002c02000000000000,IPEGA,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,leftstick:b13,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b9,rightstick:b14,righttrigger:b7,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
-03000000491900000204000000000000,Ipega PG-9023,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
-03000000491900000304000000000000,Ipega PG-9087 - Bluetooth Gamepad,+righty:+a5,-righty:-a4,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,start:b11,x:b3,y:b4,platform:Windows,
-030000006e0500000a20000000000000,JC-DUX60 ELECOM MMO Gamepad,a:b2,b:b3,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,leftstick:b14,lefttrigger:b12,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b15,righttrigger:b13,rightx:a3,righty:a4,start:b20,x:b0,y:b1,platform:Windows,
-030000006e0500000520000000000000,JC-P301U,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b0,y:b1,platform:Windows,
-030000006e0500000320000000000000,JC-U3613M (DInput),a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b0,y:b1,platform:Windows,
-030000006e0500000720000000000000,JC-W01U,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b1,platform:Windows,
+030000006f0e00002401000000000000,Injustice FightStick PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
+03000000830500005130000000000000,InterAct ActionPad,a:b0,b:b1,back:b8,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b9,x:b3,y:b4,platform:Windows,
+03000000fd0500005302000000000000,InterAct ProPad,a:b3,b:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,x:b0,y:b1,platform:Windows,
+03000000ac0500002c02000000000000,Ipega Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,leftstick:b13,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b9,rightstick:b14,righttrigger:b7,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
+03000000491900000204000000000000,Ipega PG9023,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
+03000000491900000304000000000000,Ipega PG9087 - Bluetooth Gamepad,+righty:+a5,-righty:-a4,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,start:b11,x:b3,y:b4,platform:Windows,
030000007e0500000620000000000000,Joy-Con (L),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b13,leftshoulder:b4,leftstick:b10,rightshoulder:b5,start:b8,x:b2,y:b3,platform:Windows,
-030000007e0500000620000001000000,Joy-Con (L),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b13,leftshoulder:b4,leftstick:b10,rightshoulder:b5,start:b8,x:b2,y:b3,platform:Windows,
030000007e0500000720000000000000,Joy-Con (R),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b12,leftshoulder:b4,leftstick:b11,rightshoulder:b5,start:b9,x:b2,y:b3,platform:Windows,
-030000007e0500000720000001000000,Joy-Con (R),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b12,leftshoulder:b4,leftstick:b11,rightshoulder:b5,start:b9,x:b2,y:b3,platform:Windows,
-03000000bd12000003c0000010010000,Joypad Alpha Shock,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
-03000000bd12000003c0000000000000,JY-P70UR,a:b1,b:b0,back:b5,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b8,rightstick:b11,righttrigger:b9,rightx:a3,righty:a2,start:b4,x:b3,y:b2,platform:Windows,
+03000000bd12000003c0000000000000,Joypad Alpha Shock,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000ff1100004033000000000000,JPD FFB,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a2,start:b15,x:b3,y:b0,platform:Windows,
03000000242f00002d00000000000000,JYS Wireless Adapter,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
03000000242f00008a00000000000000,JYS Wireless Adapter,a:b1,b:b4,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b0,y:b3,platform:Windows,
+03000000c4100000c082000000000000,KADE,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000828200000180000000000000,Keio,a:b4,b:b5,back:b8,leftshoulder:b2,lefttrigger:b3,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,start:b9,x:b0,y:b1,platform:Windows,
03000000790000000200000000000000,King PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b3,y:b0,platform:Windows,
+03000000bd12000001e0000000000000,Leadership,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows,
+030000008f0e00001300000000000000,Logic3,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
+030000006f0e00000103000000000000,Logic3,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+030000006f0e00000104000000000000,Logic3,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
030000006d040000d1ca000000000000,Logitech ChillStream,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
030000006d040000d2ca000000000000,Logitech Cordless Precision,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
030000006d04000011c2000000000000,Logitech Cordless Wingman,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b5,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b2,righttrigger:b7,rightx:a3,righty:a4,x:b4,platform:Windows,
@@ -178,21 +319,24 @@
030000006d04000018c2000000000000,Logitech F510 Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
030000006d04000019c2000000000000,Logitech F710 Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
030000006d0400001ac2000000000000,Logitech Precision Gamepad,a:b1,b:b2,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
+030000006d04000009c2000000000000,Logitech WingMan,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b8,x:b3,y:b4,platform:Windows,
030000006d0400000ac2000000000000,Logitech WingMan RumblePad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,rightx:a3,righty:a4,x:b3,y:b4,platform:Windows,
-03000000380700006652000000000000,Mad Catz C.T.R.L.R,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Windows,
-03000000380700005032000000000000,Mad Catz FightPad PRO (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
-03000000380700005082000000000000,Mad Catz FightPad PRO (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
-03000000380700008433000000000000,Mad Catz FightStick TE S+ (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
-03000000380700008483000000000000,Mad Catz FightStick TE S+ (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
-03000000380700008134000000000000,Mad Catz FightStick TE2+ PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b7,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b4,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
-03000000380700008184000000000000,Mad Catz FightStick TE2+ PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b5,leftstick:b10,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
-03000000380700006252000000000000,Mad Catz Micro C.T.R.L.R,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Windows,
+03000000380700005645000000000000,Lynx,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+03000000222200006000000000000000,Macally,a:b1,b:b2,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b33,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000380700006652000000000000,Mad Catz CTRLR,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Windows,
+03000000380700005032000000000000,Mad Catz FightPad Pro PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000380700005082000000000000,Mad Catz FightPad PRO PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000380700008433000000000000,Mad Catz FightStick TE S PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000380700008483000000000000,Mad Catz FightStick TE S PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000380700008134000000000000,Mad Catz FightStick TE2 PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b7,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b4,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000380700008184000000000000,Mad Catz FightStick TE2 PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b5,leftstick:b10,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000380700006252000000000000,Mad Catz Micro CTRLR,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Windows,
03000000380700008034000000000000,Mad Catz TE2 PS3 Fightstick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
03000000380700008084000000000000,Mad Catz TE2 PS4 Fightstick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
-03000000380700008532000000000000,Madcatz Arcade Fightstick TE S PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
-03000000380700003888000000000000,Madcatz Arcade Fightstick TE S+ PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
-03000000380700001888000000000000,MadCatz SFIV FightStick PS3,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b5,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b4,righttrigger:b6,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
-03000000380700008081000000000000,MADCATZ SFV Arcade FightStick Alpha PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000380700008532000000000000,Mad Catz Arcade Fightstick TE S PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000380700003888000000000000,Mad Catz Arcade Fightstick TE S Plus PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000380700001888000000000000,Mad Catz SFIV FightStick PS3,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b5,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b4,righttrigger:b6,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
+03000000380700008081000000000000,Mad Catz SFV Arcade FightStick Alpha PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
030000002a0600001024000000000000,Matricom,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:Windows,
030000009f000000adbb000000000000,MaxJoypad Virtual Controller,a:b1,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows,
03000000250900000128000000000000,Mayflash Arcade Stick,a:b1,b:b2,back:b8,leftshoulder:b0,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b3,righttrigger:b7,start:b9,x:b5,y:b6,platform:Windows,
@@ -205,36 +349,69 @@
0300000025090000e803000000000000,Mayflash Wii Classic Controller,a:b1,b:b0,back:b8,dpdown:b13,dpleft:b12,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Windows,
03000000790000000018000000000000,Mayflash WiiU Pro Game Controller Adapter (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
03000000790000002418000000000000,Mega Drive,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,rightshoulder:b2,start:b9,x:b3,y:b4,platform:Windows,
+0300000079000000ae18000000000000,Mega Drive,a:b0,b:b1,back:b7,dpdown:b14,dpleft:b15,dpright:b13,dpup:b2,rightshoulder:b6,righttrigger:b2,start:b9,x:b3,y:b4,platform:Windows,
+03000000c0160000990a000000000000,Mega Drive,a:b0,b:b1,leftx:a0,lefty:a1,righttrigger:b2,start:b3,platform:Windows,
+030000005e0400000300000000000000,Microsoft SideWinder,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b8,x:b3,y:b4,platform:Windows,
+030000005e0400000700000000000000,Microsoft SideWinder,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b9,x:b3,y:b4,platform:Windows,
+030000005e0400002700000000000000,Microsoft SideWinder,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,rightshoulder:b4,righttrigger:b5,x:b2,y:b3,platform:Windows,
+030000005e0400000e00000000000000,Microsoft SideWinder Freestyle Pro,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,start:b8,x:b3,y:b4,platform:Windows,
+03000000280d00000202000000000000,Miller Lite Cantroller,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,start:b5,x:b2,y:b3,platform:Windows,
+030000005b1c00002500000000000000,Mini,a:b3,b:b4,back:b7,leftshoulder:b2,leftx:a0,lefty:a1,rightshoulder:b5,start:b6,x:b0,y:b1,platform:Windows,
+03000000ad1b000023f0000000000000,MLG,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a6,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Windows,
+03000000ad1b00003ef0000000000000,MLG FightStick TE,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b8,rightshoulder:b5,righttrigger:b9,start:b7,x:b2,y:b3,platform:Windows,
03000000380700006382000000000000,MLG GamePad PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
-03000000c62400002a89000000000000,MOGA XP5-A Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
-03000000c62400002b89000000000000,MOGA XP5-A Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
-03000000c62400001a89000000000000,MOGA XP5-X Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
-03000000c62400001b89000000000000,MOGA XP5-X Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
+03000000d6200000e589000000000000,Moga 2,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a2,righty:a5,start:b7,x:b2,y:b3,platform:Windows,
+03000000d62000007162000000000000,Moga Pro,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a2,righty:a5,start:b7,x:b2,y:b3,platform:Windows,
+03000000d6200000ad0d000000000000,Moga Pro,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+03000000c62400002a89000000000000,Moga XP5A Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
+03000000c62400002b89000000000000,Moga XP5A Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
+03000000c62400001a89000000000000,Moga XP5X Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
+03000000c62400001b89000000000000,Moga XP5X Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
03000000efbe0000edfe000000000000,Monect Virtual Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b0,platform:Windows,
03000000250900006688000000000000,MP-8866 Super Dual Box,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows,
-030000006b140000010c000000000000,NACON GC-400ES,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
-03000000921200004b46000000000000,NES 2-port Adapter,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,start:b11,platform:Windows,
-03000000790000004518000000000000,NEXILUX GAMECUBE Controller Adapter,platform:Windows,a:b1,b:b0,x:b2,y:b3,start:b9,rightshoulder:b7,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a5,righty:a2,lefttrigger:a3,righttrigger:a4,
+03000000f70600000100000000000000,N64 Controller,a:b1,b:b2,back:b3,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b6,lefttrigger:b0,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,start:b8,x:b4,y:b5,platform:Windows,
+030000006b140000010c000000000000,Nacon GC 400ES,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
+030000006b1400001106000000000000,Nacon Revolution 3 PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+030000006b140000100d000000000000,Nacon Revolution Infinity PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+030000006b140000080d000000000000,Nacon Revolution Unlimited Pro Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000bd12000001c0000000000000,Nebular,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a5,righty:a2,start:b9,x:b3,y:b0,platform:Windows,
+03000000eb0300000000000000000000,NeGcon USB Adapter,a:a2,b:b13,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,lefttrigger:a4,leftx:a1,righttrigger:b11,start:b3,x:a3,y:b12,platform:Windows,
+0300000038070000efbe000000000000,NEO SE,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+03000000000f00000100000000000000,NES Controller,a:b1,b:b0,back:b2,leftx:a0,lefty:a1,start:b3,platform:Windows,
+03000000571d00002100000000000000,NES Controller,a:b0,b:b1,back:b2,leftx:a0,lefty:a1,start:b3,platform:Windows,
+03000000921200004346000000000000,NES Controller,a:b0,b:b1,back:b2,leftx:a0,lefty:a1,start:b3,platform:Windows,
+03000000921200004b46000000000000,NES 2 port Adapter,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,start:b11,platform:Windows,
+03000000790000004518000000000000,NEXILUX GameCube Controller Adapter,a:b1,b:b0,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b2,y:b3,platform:Windows,
030000001008000001e5000000000000,NEXT SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,righttrigger:b6,start:b9,x:b3,y:b0,platform:Windows,
+03000000050b00000045000000000000,Nexus,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b10,x:b2,y:b3,platform:Windows,
03000000152000000182000000000000,NGDS,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b3,y:b0,platform:Windows,
-03000000bd12000015d0000000000000,Nintendo Retrolink USB Super SNES Classic Controller,a:b2,b:b1,back:b8,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Windows,
030000007e0500000920000000000000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
030000000d0500000308000000000000,Nostromo N45,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b12,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b10,x:b2,y:b3,platform:Windows,
+03000000d620000013a7000000000000,NSW wired controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
03000000550900001472000000000000,NVIDIA Controller v01.04,a:b11,b:b10,back:b13,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b7,leftstick:b5,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b4,righttrigger:a5,rightx:a3,righty:a6,start:b3,x:b9,y:b8,platform:Windows,
-030000004b120000014d000000000000,NYKO AIRFLO,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:a3,leftstick:a0,lefttrigger:b6,rightshoulder:b5,rightstick:a2,righttrigger:b7,start:b9,x:b2,y:b3,platform:Windows,
+03000000550900001072000000000000,NVIDIA Shield,a:b9,b:b8,back:b11,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b3,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b2,righttrigger:a4,rightx:a2,righty:a5,start:b0,x:b7,y:b6,platform:Windows,
+030000005509000000b4000000000000,NVIDIA Virtual Gamepad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:-a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+030000004b120000014d000000000000,Nyko Airflo,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:a3,leftstick:a0,lefttrigger:b6,rightshoulder:b5,rightstick:a2,righttrigger:b7,start:b9,x:b2,y:b3,platform:Windows,
03000000782300000a10000000000000,Onlive Wireless Controller,a:b15,b:b14,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b11,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b13,y:b12,platform:Windows,
+030000000d0f00000401000000000000,Onyx,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+030000008916000001fd000000000000,Onza CE,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a3,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+030000008916000000fd000000000000,Onza TE,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
03000000d62000006d57000000000000,OPP PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
030000006b14000001a1000000000000,Orange Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b2,y:b3,platform:Windows,
03000000362800000100000000000000,OUYA Game Controller,a:b0,b:b3,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b14,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:b13,rightx:a3,righty:a4,x:b1,y:b2,platform:Windows,
03000000120c0000f60e000000000000,P4 Wired Gamepad,a:b1,b:b2,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b5,lefttrigger:b7,rightshoulder:b4,righttrigger:b6,start:b9,x:b0,y:b3,platform:Windows,
+030000006f0e00008501000000000000,PDP Fightpad Pro,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b0,platform:Windows,
030000006f0e00000901000000000000,PDP Versus Fighting Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
-030000008f0e00000300000000000000,Piranha xtreme,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows,
030000004c050000da0c000000000000,PlayStation Classic Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b4,rightshoulder:b7,righttrigger:b5,start:b9,x:b3,y:b0,platform:Windows,
+03000000d9040000160f000000000000,Playstation Controller Adapter,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows,
030000004c0500003713000000000000,PlayStation Vita,a:b1,b:b2,back:b8,dpdown:b13,dpleft:b15,dpright:b14,dpup:b12,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Windows,
03000000d62000006dca000000000000,PowerA Pro Ex,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+030000006d04000084ca000000000000,Precision,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Windows,
03000000d62000009557000000000000,Pro Elite PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000c62400001a53000000000000,Pro Ex Mini,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
03000000d62000009f31000000000000,Pro Ex mini PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
03000000d6200000c757000000000000,Pro Ex mini PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000120c0000110e000000000000,Pro5,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
03000000632500002306000000000000,PS Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Windows,
03000000e30500009605000000000000,PS to USB convert cable,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows,
03000000100800000100000000000000,PS1 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows,
@@ -244,122 +421,281 @@
03000000666600006706000000000000,PS2 Controller,a:b2,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b6,leftstick:b9,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b10,righttrigger:b5,rightx:a2,righty:a3,start:b11,x:b3,y:b0,platform:Windows,
030000006b1400000303000000000000,PS2 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
030000009d0d00001330000000000000,PS2 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
+03000000250900000088000000000000,PS2 Controllera:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows,
+03000000250900006888000000000000,PS2 Controllera:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b6,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows,
+03000000ba2200000701000000000000,Technology Innovation PS2 Adapter,a:b0,b:b1,x:b3,y:b2,back:b8,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a2,lefttrigger:b6,righttrigger:b7,platform:Windows,
+03000000430b00000300000000000000,EMS Production PS2 Adapter,a:b2,b:b1,x:b3,y:b0,back:b8,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b6,rightshoulder:b7,dpup:b12,dpdown:b14,dpleft:b15,dpright:b13,leftx:a0,lefty:a1,rightx:a3,righty:a2,lefttrigger:b4,righttrigger:b5,platform:Windows,
03000000250900000500000000000000,PS3 Controller,a:b2,b:b1,back:b9,dpdown:h0.8,dpleft:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b0,y:b3,platform:Windows,
030000004c0500006802000000000000,PS3 Controller,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b10,lefttrigger:a3~,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:a4~,rightx:a2,righty:a5,start:b8,x:b3,y:b0,platform:Windows,
03000000632500007505000000000000,PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
03000000888800000803000000000000,PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.8,dpleft:h0.4,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b9,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:b7,rightx:a3,righty:a4,start:b11,x:b0,y:b3,platform:Windows,
030000008f0e00001431000000000000,PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000120a00000100000000000000,PS3 Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows,
+030000008f0e00000300000000000000,PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b3,y:b0,platform:Windows,
+030000004f1f00000800000000000000,PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
+03000000ba2200002010000000000000,PS3 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a5,righty:a2,start:b9,x:b3,y:b2,platform:Windows,
+03000000120c00001cf1000000000000,PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000888800000804000000000000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,leftshoulder:b10,leftstick:b1,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Windows,
+03000000120c00001307000000000000,PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000250900000118000000000000,PS3 Controller,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows,
+03000000250900000218000000000000,PS3 Controller,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows,
+03000000120c0000f90e000000000000,PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
030000003807000056a8000000000000,PS3 RF pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
-03000000100000008200000000000000,PS360+ v1.66,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:h0.4,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
+03000000100000008200000000000000,PS360 v1.66,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:h0.4,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
030000004c050000a00b000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
030000004c050000c405000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
030000004c050000cc09000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000120c00000807000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000120c0000a957000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000120c0000aa57000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000120e0000120c000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000160e0000120c000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+030000001a1e0000120c000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000120c0000f21c000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000120c0000f31c000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000120c0000f41c000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000120c0000f51c000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000120c0000f10e000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000120c0000130e000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000120c0000150e000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000120c0000f70e000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000120c0000180e000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000120c00001e0e000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000120c0000111e000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000120c0000121e000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000120c0000181e000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000120c0000191e000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
030000004c050000e60c000000000000,PS5 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
03000000ff000000cb01000000000000,PSP,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b7,x:b2,y:b3,platform:Windows,
-03000000300f00000011000000000000,QanBa Arcade JoyStick 1008,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b10,x:b0,y:b3,platform:Windows,
-03000000300f00001611000000000000,QanBa Arcade JoyStick 4018,a:b1,b:b2,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b8,x:b0,y:b3,platform:Windows,
-03000000222c00000020000000000000,QANBA DRONE ARCADE JOYSTICK,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,rightshoulder:b5,righttrigger:a4,start:b9,x:b0,y:b3,platform:Windows,
-03000000300f00001210000000000000,QanBa Joystick Plus,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,rightshoulder:b5,start:b9,x:b2,y:b3,platform:Windows,
-03000000341a00000104000000000000,QanBa Joystick Q4RAF,a:b5,b:b6,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b0,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b3,righttrigger:b7,start:b9,x:b1,y:b2,platform:Windows,
-03000000222c00000223000000000000,Qanba Obsidian Arcade Joystick PS3 Mode,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
-03000000222c00000023000000000000,Qanba Obsidian Arcade Joystick PS4 Mode,a:b1,b:b2,back:b13,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000830500005020000000000000,PSX,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b2,y:b3,platform:Windows,
+03000000300f00000111000000000000,Qanba 2,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000300f00000211000000000000,Qanba 2P,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
+03000000300f00000011000000000000,Qanba Arcade Stick 1008,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b10,x:b0,y:b3,platform:Windows,
+03000000300f00001611000000000000,Qanba Arcade Stick 4018,a:b1,b:b2,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b8,x:b0,y:b3,platform:Windows,
+03000000222c00000020000000000000,Qanba Drone Arcade Stick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,rightshoulder:b5,righttrigger:a4,start:b9,x:b0,y:b3,platform:Windows,
+03000000300f00001210000000000000,Qanba Joystick Plus,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,rightshoulder:b5,start:b9,x:b2,y:b3,platform:Windows,
+03000000341a00000104000000000000,Qanba Joystick Q4RAF,a:b5,b:b6,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b0,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b3,righttrigger:b7,start:b9,x:b1,y:b2,platform:Windows,
+03000000300f00001211000000000000,Qanba Joystick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000222c00000223000000000000,Qanba Obsidian Arcade Stick PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000222c00000023000000000000,Qanba Obsidian Arcade Stick PS4,a:b1,b:b2,back:b13,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+030000008a2400006682000000000000,R1 Mobile Controller,a:b3,b:b1,back:b7,leftx:a0,lefty:a1,start:b6,x:b4,y:b0,platform:Windows,
+03000000086700006626000000000000,RadioShack,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b3,y:b0,platform:Windows,
+030000009b2800002300000000000000,Raphnet Technologies 3DO USB Adapter,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b2,start:b3,platform:Windows,
+030000009b2800006900000000000000,Raphnet Technologies 3DO USB Adapter,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b2,start:b3,platform:Windows,
+030000009b2800000800000000000000,Raphnet Technologies Dreamcast USB Adapter,a:b2,b:b1,dpdown:b5,dpleft:b6,dpright:b7,dpup:b4,lefttrigger:a2,leftx:a0,righttrigger:a3,righty:a1,start:b3,x:b10,y:b9,platform:Windows,
+030000009b2800003200000000000000,Raphnet Technologies GC/N64 to USB v3.4,a:b0,b:b7,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,lefttrigger:+a5,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:+a2,rightx:a3,righty:a4,start:b3,x:b1,y:b8,platform:Windows,
+030000009b2800006000000000000000,Raphnet Technologies GC/N64 to USB v3.6,a:b0,b:b7,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,lefttrigger:+a5,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:+a2,rightx:a3,righty:a4,start:b3,x:b1,y:b8,platform:Windows,
+030000009b2800001800000000000000,Raphnet Technologies Jaguar USB Adapter,a:b2,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b0,righttrigger:b10,start:b3,x:b11,y:b12,platform:Windows,
+030000009b2800000200000000000000,Raphnet Technologies NES USB Adapter,a:b7,b:b6,back:b5,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,start:b4,platform:Windows,
+030000009b2800004300000000000000,Raphnet Technologies Saturn,a:b0,b:b1,dpdown:b13,dpleft:b14,dpright:b15,dpup:b12,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b8,x:b3,y:b4,platform:Windows,
+030000009b2800000500000000000000,Raphnet Technologies Saturn Adapter 2.0,a:b1,b:b2,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,start:b9,x:b0,y:b3,platform:Windows,
+030000009b2800000300000000000000,Raphnet Technologies SNES USB Adapter,a:b0,b:b4,back:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b1,y:b5,platform:Windows,
+030000009b2800005600000000000000,Raphnet Technologies SNES USB Adapter,a:b1,b:b4,back:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b0,y:b5,platform:Windows,
+030000009b2800005700000000000000,Raphnet Technologies SNES USB Adapter,a:b1,b:b4,back:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b0,y:b5,platform:Windows,
+030000009b2800001e00000000000000,Raphnet Technologies Vectrex USB Adapter,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a1,lefty:a2,x:b2,y:b3,platform:Windows,
+030000009b2800002b00000000000000,Raphnet Technologies Wii Classic USB Adapter,a:b1,b:b4,back:b2,dpdown:b13,dpleft:b14,dpright:b15,dpup:b12,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a3,righty:a4,start:b3,x:b0,y:b5,platform:Windows,
+030000009b2800002c00000000000000,Raphnet Technologies Wii Classic USB Adapter,a:b1,b:b4,back:b2,dpdown:b13,dpleft:b14,dpright:b15,dpup:b12,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a3,righty:a4,start:b3,x:b0,y:b5,platform:Windows,
03000000321500000003000000000000,Razer Hydra,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
-03000000321500000204000000000000,Razer Panthera (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
-03000000321500000104000000000000,Razer Panthera (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000321500000204000000000000,Razer Panthera PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000321500000104000000000000,Razer Panthera PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000321500000010000000000000,Razer Raiju,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
03000000321500000507000000000000,Razer Raiju Mobile,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
03000000321500000707000000000000,Razer Raiju Mobile,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
+03000000321500000710000000000000,Razer Raiju TE,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000321500000a10000000000000,Razer Raiju TE,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000321500000410000000000000,Razer Raiju UE,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000321500000910000000000000,Razer Raiju UE,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
03000000321500000011000000000000,Razer Raion Fightpad for PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
03000000321500000009000000000000,Razer Serval,+lefty:+a2,-lefty:-a1,a:b0,b:b1,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,leftx:a0,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
-030000000d0f00001100000000000000,REAL ARCADE PRO.3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,rightstick:b11,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
-030000000d0f00006a00000000000000,Real Arcade Pro.4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
-030000000d0f00006b00000000000000,Real Arcade Pro.4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
-030000000d0f00008a00000000000000,Real Arcade Pro.4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
-030000000d0f00008b00000000000000,Real Arcade Pro.4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
-030000000d0f00007000000000000000,REAL ARCADE PRO.4 VLX,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,rightstick:b11,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
-030000000d0f00002200000000000000,REAL ARCADE Pro.V3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
-030000000d0f00005b00000000000000,Real Arcade Pro.V4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
-030000000d0f00005c00000000000000,Real Arcade Pro.V4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
-03000000790000001100000000000000,Retrolink SNES Controller,a:b2,b:b1,back:b8,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,leftshoulder:b4,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Windows,
-03000000bd12000013d0000000000000,Retrolink USB SEGA Saturn Classic,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b5,lefttrigger:b6,rightshoulder:b2,righttrigger:b7,start:b8,x:b3,y:b4,platform:Windows,
+030000000d0f00001100000000000000,Hori Real Arcade Pro 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,rightstick:b11,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f00006a00000000000000,Hori Real Arcade Pro 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f00006b00000000000000,Hori Real Arcade Pro 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f00008a00000000000000,Hori Real Arcade Pro 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f00008b00000000000000,Hori Real Arcade Pro 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f00007000000000000000,Hori Real Arcade Pro 4 VLX,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,rightstick:b11,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f00002200000000000000,Hori Real Arcade Pro V3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f00005b00000000000000,Hori Real Arcade Pro V4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f00005c00000000000000,Hori Real Arcade Pro V4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000830500006020000000000000,Retro Controller,a:b0,b:b1,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,lefttrigger:b5,rightshoulder:b8,righttrigger:b9,start:b7,x:b2,y:b3,platform:Windows,
+03000000790000001100000000000000,Retro Controller,a:b1,b:b2,back:b8,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,leftshoulder:b6,lefttrigger:b7,rightshoulder:b4,righttrigger:b5,start:b9,x:b0,y:b3,platform:Windows,
+03000000c82d00000290000000000000,Retrobit 64,a:b3,b:b9,back:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b0,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b10,start:b11,x:b4,y:b8,platform:Windows,
+03000000c82d00003038000000000000,Retrobit 64,a:b3,b:b9,back:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b0,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b10,start:b11,x:b4,y:b8,platform:Windows,
+03000000bd12000013d0000000000000,Retrolink USB Sega Saturn Classic,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b5,lefttrigger:b6,rightshoulder:b2,righttrigger:b7,start:b8,x:b3,y:b4,platform:Windows,
+03000000bd12000015d0000000000000,Retrolink USB Super SNES Classic Controller,a:b2,b:b1,back:b8,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Windows,
0300000000f000000300000000000000,RetroUSB.com RetroPad,a:b1,b:b5,back:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b0,y:b4,platform:Windows,
0300000000f00000f100000000000000,RetroUSB.com Super RetroPort,a:b1,b:b5,back:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b0,y:b4,platform:Windows,
+03000000830500000960000000000000,Revenger,a:b0,b:b1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b3,x:b4,y:b5,platform:Windows,
030000006b140000010d000000000000,Revolution Pro Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
-030000006b140000020d000000000000,Revolution Pro Controller 2(1/2),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+030000006b140000020d000000000000,Revolution Pro Controller 2,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
030000006b140000130d000000000000,Revolution Pro Controller 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+030000006f0e00004601000000000000,Rock Candy,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+030000006f0e00001f01000000000000,Rock Candy,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
030000006f0e00001e01000000000000,Rock Candy PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
030000006f0e00002801000000000000,Rock Candy PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
030000006f0e00002f01000000000000,Rock Candy PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
-030000004f04000003d0000000000000,run'n'drive,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b7,leftshoulder:a3,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:a4,rightstick:b11,righttrigger:b5,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000c6240000fefa000000000000,Rock Candy Controller,a:b0,b:b1,x:b2,y:b3,back:b6,guide:b8,start:b7,leftstick:b9,rightstick:b10,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,platform:Windows,
+030000004f04000001d0000000000000,Rumble Force,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Windows,
+030000004f04000009d0000000000000,Run N Drive,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+030000004f04000003d0000000000000,Run N Drive,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b7,leftshoulder:a3,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:a4,rightstick:b11,righttrigger:b5,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000c6240000045d000000000000,Sabertooth,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+030000008916000000fe000000000000,Sabertooth,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
03000000a30600001af5000000000000,Saitek Cyborg,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Windows,
03000000a306000023f6000000000000,Saitek Cyborg V.1 Game pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Windows,
03000000300f00001201000000000000,Saitek Dual Analog Pad,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Windows,
03000000a30600000701000000000000,Saitek P220,a:b2,b:b3,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b7,rightshoulder:b4,righttrigger:b5,x:b0,y:b1,platform:Windows,
03000000a30600000cff000000000000,Saitek P2500 Force Rumble Pad,a:b2,b:b3,back:b11,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b10,x:b0,y:b1,platform:Windows,
+03000000a30600000d5f000000000000,Saitek P2600,a:b1,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a3,righty:a2,start:b8,x:b0,y:b3,platform:Windows,
+03000000a30600000dff000000000000,Saitek P2600,a:b1,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a5,righty:a2,start:b8,x:b0,y:b3,platform:Windows,
03000000a30600000c04000000000000,Saitek P2900,a:b1,b:b2,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b3,platform:Windows,
+03000000a306000018f5000000000000,Saitek P3200,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Windows,
03000000300f00001001000000000000,Saitek P480 Rumble Pad,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Windows,
+03000000a30600000901000000000000,Saitek P880,a:b2,b:b3,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b8,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b9,righttrigger:b5,rightx:a3,righty:a2,x:b0,y:b1,platform:Windows,
03000000a30600000b04000000000000,Saitek P990,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b3,platform:Windows,
-03000000a30600000b04000000010000,Saitek P990 Dual Analog Pad,a:b1,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b8,x:b0,y:b3,platform:Windows,
+03000000a30600000b04000000000000,Saitek P990 Dual Analog Pad,a:b1,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b8,x:b0,y:b3,platform:Windows,
03000000a30600002106000000000000,Saitek PS1000,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Windows,
03000000a306000020f6000000000000,Saitek PS2700,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Windows,
03000000300f00001101000000000000,Saitek Rumble Pad,a:b2,b:b3,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Windows,
+03000000e804000000a0000000000000,Samsung EIGP20,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
+03000000c01100000252000000000000,Sanwa Easy Grip,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b9,x:b3,y:b4,platform:Windows,
+03000000bd12000003c0000000000000,Sanwa JYP70UR,a:b1,b:b0,back:b5,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b8,rightstick:b11,righttrigger:b9,rightx:a3,righty:a2,start:b4,x:b3,y:b2,platform:Windows,
+03000000c01100004350000000000000,Sanwa Micro Grip P3,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,x:b3,y:b2,platform:Windows,
+03000000c01100004150000000000000,Sanwa Micro Grip Pro,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Windows,
+03000000411200004550000000000000,Sanwa Micro Grip Pro,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a1,righty:a2,start:b9,x:b1,y:b3,platform:Windows,
+03000000c01100004450000000000000,Sanwa Online Grip,a:b0,b:b1,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b8,rightstick:b11,righttrigger:b9,rightx:a3,righty:a2,start:b14,x:b3,y:b4,platform:Windows,
03000000730700000401000000000000,Sanwa PlayOnline Mobile,a:b0,b:b1,back:b2,leftx:a0,lefty:a1,start:b3,platform:Windows,
-0300000000050000289b000000000000,Saturn_Adapter_2.0,a:b1,b:b2,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,start:b9,x:b0,y:b3,platform:Windows,
-030000009b2800000500000000000000,Saturn_Adapter_2.0,a:b1,b:b2,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,start:b9,x:b0,y:b3,platform:Windows,
-03000000a30c00002500000000000000,Sega Genesis Mini 3B controller,a:b2,b:b1,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,righttrigger:b5,start:b9,platform:Windows,
-03000000a30c00002400000000000000,Sega Mega Drive Mini 6B controller,a:b2,b:b1,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,rightshoulder:b4,righttrigger:b5,start:b9,x:b3,y:b0,platform:Windows,
-03000000341a00000208000000000000,SL-6555-SBK,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:-a4,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a4,rightx:a3,righty:a2,start:b7,x:b2,y:b3,platform:Windows,
-03000000341a00000908000000000000,SL-6566,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
-030000008f0e00000800000000000000,SpeedLink Strike FX,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
+03000000830500006120000000000000,Sanwa Smart Grip II,a:b0,b:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,x:b1,y:b3,platform:Windows,
+03000000c01100000051000000000000,Satechi Bluetooth Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows,
+03000000730700000601000000000000,Sega Saturn Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b9,x:b3,y:b4,platform:Windows,
+03000000b40400000a01000000000000,Sega Saturn Controller,a:b0,b:b1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b8,x:b3,y:b4,platform:Windows,
+0300000000f000000800000000000000,Sega Saturn Controller,a:b1,b:b2,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b3,start:b0,x:b5,y:b6,platform:Windows,
+0300000000050000289b000000000000,Sega Saturn Adapter 2,a:b1,b:b2,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,start:b9,x:b0,y:b3,platform:Windows,
+030000004f04000028b3000000000000,Score A,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000952e00002577000000000000,Scuf PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000a30c00002500000000000000,Sega Genesis Mini 3B Controller,a:b2,b:b1,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,righttrigger:b5,start:b9,platform:Windows,
+03000000a30c00002400000000000000,Sega Mega Drive Mini 6B Controller,a:b2,b:b1,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,rightshoulder:b4,righttrigger:b5,start:b9,x:b3,y:b0,platform:Windows,
+030000003b07000004a1000000000000,SFX,a:b0,b:b2,back:b7,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b9,righttrigger:b5,start:b8,x:b1,y:b3,platform:Windows,
+03000000120c00001c1e000000000000,SnakeByte GamePad 4S PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000571d00002000000000000000,SNES Controller,a:b0,b:b1,back:b6,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b7,x:b2,y:b3,platform:Windows,
+030000008b2800000300000000000000,SNES Controller,a:b0,b:b4,back:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b1,y:b5,platform:Windows,
+03000000921200004653000000000000,SNES Controller,a:b0,b:b4,back:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b1,y:b5,platform:Windows,
+0300000003040000c197000000000000,SNES Controller,a:b0,b:b4,back:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b1,y:b5,platform:Windows,
+0300000081170000960a000000000000,SNES Controller,a:b4,b:b0,back:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b5,y:b1,platform:Windows,
+03000000811700009d0a000000000000,SNES Controller,a:b0,b:b4,back:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b1,y:b5,platform:Windows,
+03000000341a00000208000000000000,Speedlink 6555,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:-a4,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a4,rightx:a3,righty:a2,start:b7,x:b2,y:b3,platform:Windows,
+03000000341a00000908000000000000,Speedlink 6566,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
+030000008f0e00000800000000000000,Speedlink Strike FX,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
03000000c01100000591000000000000,Speedlink Torid,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
03000000d11800000094000000000000,Stadia Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:b12,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:b11,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:Windows,
+03000000de280000fc11000000000000,Steam Virtual Gamepad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+03000000de280000ff11000000000000,Steam Virtual Gamepad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:-a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+03000000120c0000160e000000000000,Steel Play Metaltech PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
03000000110100001914000000000000,SteelSeries,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftstick:b13,lefttrigger:b6,leftx:a0,lefty:a1,rightstick:b14,righttrigger:b7,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
03000000381000001214000000000000,SteelSeries Free,a:b0,b:b1,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Windows,
03000000110100003114000000000000,SteelSeries Stratus Duo,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
03000000381000001814000000000000,SteelSeries Stratus XL,a:b0,b:b1,back:b18,dpdown:b13,dpleft:b14,dpright:b15,dpup:b12,guide:b19,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b2,y:b3,platform:Windows,
-03000000790000001c18000000000000,STK-7024X,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
-03000000ff1100003133000000000000,SVEN X-PAD,a:b2,b:b3,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a4,start:b5,x:b0,y:b1,platform:Windows,
+03000000790000001c18000000000000,STK 7024X,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
+03000000381000003014000000000000,Stratus Duo,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+03000000381000003114000000000000,Stratus Duo,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+03000000380700003847000000000000,Street Fighter Fighting Stick TE,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b11,start:b7,x:b2,y:b3,platform:Windows,
+030000001f08000001e4000000000000,Super Famicom Controller,a:b2,b:b1,back:b8,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Windows,
+03000000790000000418000000000000,Super Famicom Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b33,rightshoulder:b5,start:b7,x:b2,y:b3,platform:Windows,
03000000d620000011a7000000000000,Switch,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
-03000000457500002211000000000000,SZMY-POWER PC Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
-030000004f04000007d0000000000000,T Mini Wireless,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
-030000004f0400000ab1000000000000,T.16000M,a:b0,b:b1,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b11,leftshoulder:b4,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,start:b10,x:b2,y:b3,platform:Windows,
+030000000d0f0000f600000000000000,Switch Hori Pad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
+03000000457500002211000000000000,Szmy Power PC Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+030000004f04000007d0000000000000,TMini Wireless,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+030000004f0400000ab1000000000000,T16000M,a:b0,b:b1,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b11,leftshoulder:b4,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,start:b10,x:b2,y:b3,platform:Windows,
+030000000d0f00007b00000000000000,TAC GEAR,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000d814000001a0000000000000,TE Kitty,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
03000000fa1900000706000000000000,Team 5,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
03000000b50700001203000000000000,Techmobility X6-38V,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Windows,
+03000000790000002601000000000000,TGZ,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b3,y:b0,platform:Windows,
030000004f04000015b3000000000000,Thrustmaster Dual Analog 4,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Windows,
-030000004f04000023b3000000000000,Thrustmaster Dual Trigger 3-in-1,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+030000004f04000023b3000000000000,Thrustmaster Dual Trigger 3 in 1,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
030000004f0400000ed0000000000000,ThrustMaster eSwap PRO Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
030000004f04000000b3000000000000,Thrustmaster Firestorm Dual Power,a:b0,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b11,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b10,x:b1,y:b3,platform:Windows,
030000004f04000004b3000000000000,Thrustmaster Firestorm Dual Power 3,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Windows,
+030000006d04000088ca000000000000,Thunderpad,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Windows,
03000000666600000488000000000000,TigerGame PS/PS2 Game Controller Adapter,a:b2,b:b1,back:b9,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows,
03000000d62000006000000000000000,Tournament PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000c01100000055000000000000,Tronsmart,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
030000005f140000c501000000000000,Trust Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
03000000b80500000210000000000000,Trust Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
030000004f04000087b6000000000000,TWCS Throttle,dpdown:b8,dpleft:b9,dpright:b7,dpup:b6,leftstick:b5,lefttrigger:-a5,leftx:a0,lefty:a1,righttrigger:+a5,platform:Windows,
+03000000411200000450000000000000,Twin Shock,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b9,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b10,righttrigger:b5,rightx:a3,righty:a4,start:b11,x:b3,y:b0,platform:Windows,
03000000d90400000200000000000000,TwinShock PS2,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows,
-030000006e0500001320000000000000,U4113,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
03000000101c0000171c000000000000,uRage Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
-03000000300f00000701000000000000,USB 4-Axis 12-Button Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows,
-03000000341a00002308000000000000,USB gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
-030000005509000000b4000000000000,USB gamepad,a:b10,b:b11,back:b5,dpdown:b1,dpleft:b2,dpright:b3,dpup:b0,guide:b14,leftshoulder:b8,leftstick:b6,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b9,rightstick:b7,righttrigger:a5,rightx:a2,righty:a3,start:b4,x:b12,y:b13,platform:Windows,
-030000006b1400000203000000000000,USB gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
-03000000790000000a00000000000000,USB gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b3,y:b0,platform:Windows,
-03000000f0250000c183000000000000,USB gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
-03000000ff1100004133000000000000,USB gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a4,righty:a2,start:b9,x:b3,y:b0,platform:Windows,
-03000000632500002305000000000000,USB Vibration Joystick (BM),a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
+03000000242f00006e00000000000000,USB Game Controller,a:b1,b:b4,back:b10,leftshoulder:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b9,righttrigger:b7,rightx:a2,righty:a5,start:b11,x:b0,y:b3,platform:Windows,
+03000000b50700001503000000000000,USB Game Controller,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a5,righty:a2,start:b9,x:b0,y:b1,platform:Windows,
+03000000b404000081c6000000000000,USB Game Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b3,y:b0,platform:Windows,
+03000000666600000188000000000000,USB Game Controller,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows,
+03000000666600000288000000000000,USB Game Controller,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows,
+03000000300f00000701000000000000,USB Game Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows,
+03000000bd12000012d0000000000000,USB Game Controller,a:b0,b:b1,back:b6,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b7,x:b2,y:b3,platform:Windows,
+030000000b0400003065000000000000,USB Game Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b3,y:b0,platform:Windows,
+03000000341a00002308000000000000,USB Game Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
+030000006b1400000203000000000000,USB Game Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
+03000000790000000a00000000000000,USB Game Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b3,y:b0,platform:Windows,
+03000000f0250000c183000000000000,USB Game Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000ff1100004133000000000000,USB Game Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a4,righty:a2,start:b9,x:b3,y:b0,platform:Windows,
+03000000632500002305000000000000,USB Vibration Joystick,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
03000000790000001a18000000000000,Venom,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
03000000790000001b18000000000000,Venom Arcade Joystick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
030000006f0e00000302000000000000,Victrix Pro Fight Stick for PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
030000006f0e00000702000000000000,Victrix Pro Fight Stick for PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
0300000034120000adbe000000000000,vJoy Device,a:b0,b:b1,back:b15,dpdown:b6,dpleft:b7,dpright:b8,dpup:b5,guide:b16,leftshoulder:b9,leftstick:b13,lefttrigger:b11,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b14,righttrigger:b12,rightx:a3,righty:a4,start:b4,x:b2,y:b3,platform:Windows,
+03000000120c0000ab57000000000000,Warrior Joypad JS083,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+030000007e0500003003000000000000,WiiU Pro,a:b0,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b16,dpup:b13,leftshoulder:b6,leftstick:b11,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b12,righttrigger:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Windows,
+0300000032150000030a000000000000,Wildcat,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+0300000032150000140a000000000000,Wolverine,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+03000000ad1b000016f0000000000000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+030000005e0400009102000000000000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+03000000ad1b00008e02000000000000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+03000000c62400000053000000000000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+03000000380700002644000000000000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b7,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a2,righty:a5,start:b8,x:b2,y:b3,platform:Windows,
+03000000380700002045000000000000,Xbox 360 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+030000005e0400001907000000000000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+03000000380700001647000000000000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+03000000380700002647000000000000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+03000000380700003647000000000000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a7,righty:a5,start:b7,x:b2,y:b3,platform:Windows,
+030000003807000026b7000000000000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+03000000c6240000fdfa000000000000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+03000000ad1b000000fd000000000000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+03000000ad1b000001fd000000000000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+030000002e160000efbe000000000000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b10,rightshoulder:b5,righttrigger:b11,start:b7,x:b2,y:b3,platform:Windows,
030000005e0400000a0b000000000000,Xbox Adaptive Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:-a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+030000002a0600002000000000000000,Xbox Controller,a:b0,b:b1,back:b13,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,leftshoulder:b5,leftstick:b14,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b15,righttrigger:b7,rightx:a2,righty:a5,start:b12,x:b2,y:b3,platform:Windows,
+030000005e0400000202000000000000,Xbox Controller,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Windows,
+030000005e0400008502000000000000,Xbox Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+030000005e0400008702000000000000,Xbox Controller,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b9,righttrigger:b7,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Windows,
+030000005e0400008902000000000000,Xbox Controller,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b10,leftstick:b8,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b9,righttrigger:b4,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Windows,
+03000000380700001645000000000000,Xbox Controller,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Windows,
+03000000380700002645000000000000,Xbox Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+03000000380700003645000000000000,Xbox Controller,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Windows,
+03000000380700008645000000000000,Xbox Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+03000000120c00001088000000000000,Xbox Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2~,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5~,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+03000000300f00008888000000000000,Xbox Controller,a:b0,b:b1,back:b7,dpdown:b13,dpleft:b10,dpright:b11,dpup:b12,leftshoulder:b5,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Windows,
+03000000120c00000a88000000000000,Xbox Controller,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a2,righty:a4,start:b6,x:b2,y:b3,platform:Windows,
+030000000d0f00006300000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+030000005e040000e002000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+030000005e040000d102000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+030000005e040000e302000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+030000006f0e0000a802000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+030000006f0e0000c802000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+030000005e040000dd02000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+030000005e040000fd02000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+03000000c62400003a54000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+030000005e0400000c0b000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
030000005e040000130b000000000000,Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
03000000341a00000608000000000000,Xeox,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
-03000000450c00002043000000000000,XEOX Gamepad SL-6556-BK,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
-03000000ac0500005b05000000000000,Xiaoji Gamesir-G3w,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
+03000000450c00002043000000000000,Xeox Gamepad SL6556BK,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
+030000006f0e00000300000000000000,XGear,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a5,righty:a2,start:b9,x:b3,y:b0,platform:Windows,
+03000000ac0500005b05000000000000,Xiaoji Gamesir G3w,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
03000000172700004431000000000000,XiaoMi Game Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b20,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a7,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows,
03000000786901006e70000000000000,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
-03000000790000004f18000000000000,ZD-T Android,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
-03000000120c0000101e000000000000,ZEROPLUS P4 Wired Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000790000004f18000000000000,ZDT Android Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
+03000000120c0000101e000000000000,Zeroplus P4 Wired Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+030000007e0500001720000000000000,Nintendo Switch SNES Controller,a:b0,b:b1,x:b2,y:b3,back:b8,start:b9,-leftx:h0.8,+leftx:h0.2,-lefty:h0.1,+lefty:h0.4,leftshoulder:b4,rightshoulder:b5,lefttrigger:b6,righttrigger:b7,platform:Windows,
# Mac OS X
030000008f0e00000300000009010000,2In1 USB Joystick,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Mac OS X,
@@ -369,13 +705,15 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
03000000c82d00005106000000010000,8BitDo M30 Gamepad,a:b1,b:b0,back:b10,guide:b2,leftshoulder:b6,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,start:b11,x:b4,y:b3,platform:Mac OS X,
03000000c82d00001590000001000000,8BitDo N30 Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X,
03000000c82d00006528000000010000,8BitDo N30 Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X,
+03000000c82d000012ab000001000000,8BitDo NES30,a:b0,b:b1,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Mac OS X,
+03000000c82d00002028000000010000,8BitDo NES30,a:b0,b:b1,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Mac OS X,
030000003512000012ab000001000000,8BitDo NES30 Gamepad,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Mac OS X,
03000000022000000090000001000000,8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X,
03000000203800000900000000010000,8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X,
03000000c82d00000190000001000000,8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X,
03000000102800000900000000000000,8Bitdo SFC30 GamePad Joystick,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Mac OS X,
03000000c82d00001290000001000000,8BitDo SN30 Gamepad,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Mac OS X,
-03000000c82d00004028000000010000,8Bitdo SN30 GamePad,a:b1,b:b0,x:b4,y:b3,back:b10,start:b11,leftshoulder:b6,rightshoulder:b7,dpup:-a1,dpdown:+a1,dpleft:-a0,dpright:+a0,platform:Mac OS X,
+03000000c82d00004028000000010000,8Bitdo SN30 GamePad,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Mac OS X,
03000000c82d00000160000001000000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X,
03000000c82d00000161000000010000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b4,y:b3,platform:Mac OS X,
03000000c82d00000260000001000000,8BitDo SN30 Pro+,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X,
@@ -385,42 +723,45 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
03000000c82d00003032000000010000,8BitDo Zero 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,rightx:a2,righty:a31,start:b11,x:b4,y:b3,platform:Mac OS X,
03000000a00500003232000008010000,8Bitdo Zero GamePad,a:b0,b:b1,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Mac OS X,
03000000a00500003232000009010000,8Bitdo Zero GamePad,a:b0,b:b1,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Mac OS X,
+03000000491900001904000001010000,Amazon Luna Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b9,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b7,x:b2,y:b3,platform:Mac OS X,
+03000000710100001904000000010000,Amazon Luna Controller,a:b0,b:b1,back:b11,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b9,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Mac OS X,
03000000a30c00002700000003030000,Astro City Mini,a:b2,b:b1,back:b8,leftx:a3,lefty:a4,rightshoulder:b4,righttrigger:b5,start:b9,x:b3,y:b0,platform:Mac OS X,
03000000a30c00002800000003030000,Astro City Mini,a:b2,b:b1,back:b8,leftx:a3,lefty:a4,rightshoulder:b4,righttrigger:b5,start:b9,x:b3,y:b0,platform:Mac OS X,
03000000050b00000045000031000000,ASUS Gamepad,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X,
03000000ef0500000300000000020000,AxisPad,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a2,start:b11,x:b0,y:b1,platform:Mac OS X,
-03000000491900001904000001010000,Amazon Luna Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b9,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b7,x:b2,y:b3,platform:Mac OS X,
-03000000710100001904000000010000,Amazon Luna Controller,a:b0,b:b1,back:b11,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b9,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Mac OS X,
03000000c62400001a89000000010000,BDA MOGA XP5-X Plus,a:b0,b:b1,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b14,leftshoulder:b6,leftstick:b15,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b16,righttrigger:a4,rightx:a2,righty:a3,start:b13,x:b3,y:b4,platform:Mac OS X,
03000000c62400001b89000000010000,BDA MOGA XP5-X Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
03000000d62000002a79000000010000,BDA PS4 Fightpad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
-03000000120c0000200e000000010000,Brook Mars,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
-03000000120c0000210e000000010000,Brook Mars,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
+03000000120c0000200e000000010000,Brook Mars PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
+03000000120c0000210e000000010000,Brook Mars PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
030000008305000031b0000000000000,Cideko AK08b,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
03000000260900008888000088020000,Cyber Gadget GameCube Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:a5,rightx:a2,righty:a3~,start:b7,x:b2,y:b3,platform:Mac OS X,
03000000a306000022f6000001030000,Cyborg V.3 Rumble Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:+a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:-a3,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Mac OS X,
+030000000d0f00008400000000010000,Fighting Commander,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
+030000000d0f00008500000000010000,Fighting Commander,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
+03000000151900004000000001000000,Flydigi Vader 2,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X,
+03000000b40400001124000000000000,Flydigi Vader 2,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b12,lefttrigger:b8,leftx:a0,lefty:a1,paddle1:b4,paddle2:b5,paddle3:b17,rightshoulder:b7,rightstick:b13,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b2,y:b3,platform:Mac OS X,
03000000790000004618000000010000,GameCube Controller Adapter,a:b4,b:b0,dpdown:b56,dpleft:b60,dpright:b52,dpup:b48,lefttrigger:a12,leftx:a0,lefty:a4,rightshoulder:b28,righttrigger:a16,rightx:a20,righty:a8,start:b36,x:b8,y:b12,platform:Mac OS X,
-03000000ad1b000001f9000000000000,Gamestop BB-070 X360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
+03000000ad1b000001f9000000000000,Gamestop BB070 X360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
0500000047532047616d657061640000,GameStop Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X,
03000000c01100000140000000010000,GameStop PS4 Fun Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
030000006f0e00000102000000000000,GameStop Xbox 360 Wired Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
030000007d0400000540000001010000,Gravis Eliminator GamePad Pro,a:b1,b:b2,back:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X,
03000000280400000140000000020000,Gravis Gamepad Pro,a:b1,b:b2,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X,
-030000008f0e00000300000007010000,GreenAsia Inc. USB Joystick,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Mac OS X,
+030000008f0e00000300000007010000,GreenAsia USB Joystick,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Mac OS X,
030000000d0f00002d00000000100000,Hori Fighting Commander 3 Pro,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
-030000000d0f00005f00000000010000,Hori Fighting Commander 4 (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
-030000000d0f00005e00000000010000,Hori Fighting Commander 4 (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
-030000000d0f00005f00000000000000,HORI Fighting Commander 4 PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
-030000000d0f00005e00000000000000,HORI Fighting Commander 4 PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
-030000000d0f00004d00000000000000,HORI Gem Pad 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
+030000000d0f00005f00000000010000,Hori Fighting Commander 4 PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
+030000000d0f00005e00000000010000,Hori Fighting Commander 4 PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
+030000000d0f00005f00000000000000,Hori Fighting Commander 4 PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
+030000000d0f00005e00000000000000,Hori Fighting Commander 4 PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
+030000000d0f00004d00000000000000,Hori Gem Pad 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
030000000d0f00009200000000010000,Hori Pokken Tournament DX Pro Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X,
-030000000d0f00006e00000000010000,HORIPAD 4 (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
-030000000d0f00006600000000010000,HORIPAD 4 (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
-030000000d0f00006600000000000000,HORIPAD FPS PLUS 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
-030000000d0f0000ee00000000010000,HORIPAD mini4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
+030000000d0f00006e00000000010000,Horipad 4 PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
+030000000d0f00006600000000010000,Horipad 4 PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
+030000000d0f00006600000000000000,Horipad FPS Plus 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
+030000000d0f0000ee00000000010000,Horipad Mini 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
030000008f0e00001330000011010000,HuiJia SNES Controller,a:b4,b:b2,back:b16,dpdown:+a2,dpleft:-a0,dpright:+a0,dpup:-a2,leftshoulder:b12,rightshoulder:b14,start:b18,x:b6,y:b0,platform:Mac OS X,
-03000000830500006020000000010000,iBuffalo SNES Controller,a:b1,b:b0,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b7,x:b3,y:b2,platform:Mac OS X,
-03000000830500006020000000000000,iBuffalo USB 2-axis 8-button Gamepad,a:b1,b:b0,back:b6,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b7,x:b3,y:b2,platform:Mac OS X,
+03000000830500006020000000000000,iBuffalo Gamepad,a:b1,b:b0,back:b6,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b7,x:b3,y:b2,platform:Mac OS X,
030000007e0500000620000001000000,Joy-Con (L),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b13,leftshoulder:b4,leftstick:b10,rightshoulder:b5,start:b8,x:b2,y:b3,platform:Mac OS X,
030000007e0500000720000001000000,Joy-Con (R),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b12,leftshoulder:b4,leftstick:b11,rightshoulder:b5,start:b9,x:b2,y:b3,platform:Mac OS X,
03000000242f00002d00000007010000,JYS Wireless Adapter,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Mac OS X,
@@ -429,7 +770,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
030000006d04000016c2000014040000,Logitech Dual Action,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
030000006d04000016c2000000000000,Logitech F310 Gamepad (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
030000006d04000018c2000000000000,Logitech F510 Gamepad (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
-030000006d04000019c2000005030000,Logitech F710,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
+030000006d04000019c2000005030000,Logitech F710 Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
030000006d0400001fc2000000000000,Logitech F710 Gamepad (XInput),a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
030000006d04000018c2000000010000,Logitech RumblePad 2 USB,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3~,start:b9,x:b0,y:b3,platform:Mac OS X,
030000006d04000019c2000000000000,Logitech Wireless Gamepad (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
@@ -437,7 +778,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
03000000380700005082000000010000,Mad Catz FightPad PRO (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
03000000380700008433000000010000,Mad Catz FightStick TE S+ (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
03000000380700008483000000010000,Mad Catz FightStick TE S+ (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
-03000000790000000600000007010000,Marvo GT-004,a:b2,b:b1,x:b3,y:b0,back:b8,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,platform:Mac OS X,
+03000000790000000600000007010000,Marvo GT-004,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Mac OS X,
03000000790000004418000000010000,Mayflash GameCube Controller,a:b1,b:b2,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b0,y:b3,platform:Mac OS X,
03000000242f00007300000000020000,Mayflash Magic NS,a:b1,b:b4,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b0,y:b3,platform:Mac OS X,
0300000079000000d218000026010000,Mayflash Magic NS,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Mac OS X,
@@ -445,21 +786,21 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
0300000025090000e803000000000000,Mayflash Wii Classic Controller,a:b1,b:b0,back:b8,dpdown:b13,dpleft:b12,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Mac OS X,
03000000790000000018000000010000,Mayflash Wii U Pro Controller Adapter,a:b4,b:b8,back:b32,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b16,leftstick:b40,lefttrigger:b24,leftx:a0,lefty:a4,rightshoulder:b20,rightstick:b44,righttrigger:b28,rightx:a8,righty:a12,start:b36,x:b0,y:b12,platform:Mac OS X,
03000000790000000018000000000000,Mayflash WiiU Pro Game Controller Adapter (DInput),a:b4,b:b8,back:b32,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b16,leftstick:b40,lefttrigger:b24,leftx:a0,lefty:a4,rightshoulder:b20,rightstick:b44,righttrigger:b28,rightx:a8,righty:a12,start:b36,x:b0,y:b12,platform:Mac OS X,
-03000000d8140000cecf000000000000,MC Cthulhu,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X,
-030000005e0400002700000001010000,Microsoft SideWinder Plug & Play Game Pad,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,lefttrigger:b4,leftx:a0,lefty:a1,righttrigger:b5,x:b2,y:b3,platform:Mac OS X,
+03000000d8140000cecf000000000000,Cthulhu,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X,
+030000005e0400002700000001010000,Microsoft SideWinder Game Pad,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,lefttrigger:b4,leftx:a0,lefty:a1,righttrigger:b5,x:b2,y:b3,platform:Mac OS X,
03000000d62000007162000001000000,Moga Pro 2 HID,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Mac OS X,
-03000000c62400002a89000000010000,MOGA XP5-A Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b21,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
-03000000c62400002b89000000010000,MOGA XP5-A Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
+03000000c62400002a89000000010000,MOGA XP5A Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b21,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
+03000000c62400002b89000000010000,MOGA XP5A Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
03000000632500007505000000020000,NEOGEO mini PAD Controller,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,start:b9,x:b2,y:b3,platform:Mac OS X,
03000000921200004b46000003020000,NES 2-port Adapter,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,start:b11,platform:Mac OS X,
030000001008000001e5000006010000,NEXT SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,righttrigger:b6,start:b9,x:b3,y:b0,platform:Mac OS X,
-03000000d620000011a7000000020000,Nintendo Switch Core (Plus) Wired Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
+03000000d620000011a7000000020000,Nintendo Switch Core Plus Wired Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
03000000d620000011a7000010050000,Nintendo Switch PowerA Wired Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
030000007e0500000920000000000000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X,
030000007e0500000920000001000000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X,
03000000550900001472000025050000,NVIDIA Controller v01.04,a:b0,b:b1,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b4,leftstick:b7,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a5,start:b6,x:b2,y:b3,platform:Mac OS X,
030000006f0e00000901000002010000,PDP Versus Fighting Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X,
-030000008f0e00000300000000000000,Piranha xtreme,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Mac OS X,
+030000008f0e00000300000000000000,Piranha Xtreme PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Mac OS X,
030000004c050000da0c000000010000,Playstation Classic Controller,a:b2,b:b1,back:b8,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,start:b9,x:b3,y:b0,platform:Mac OS X,
030000004c0500003713000000010000,PlayStation Vita,a:b1,b:b2,back:b8,dpdown:b13,dpleft:b15,dpright:b14,dpup:b12,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Mac OS X,
03000000d62000006dca000000010000,PowerA Pro Ex,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
@@ -472,15 +813,17 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
030000004c050000cc09000000010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
050000004c050000e60c000000010000,PS5 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
030000008916000000fd000000000000,Razer Onza TE,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
-03000000321500000204000000010000,Razer Panthera (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
-03000000321500000104000000010000,Razer Panthera (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
-03000000321500000010000000010000,Razer RAIJU,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
+03000000321500000204000000010000,Razer Panthera PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
+03000000321500000104000000010000,Razer Panthera PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
+03000000321500000010000000010000,Razer Raiju,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
03000000321500000507000001010000,Razer Raiju Mobile,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b21,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
03000000321500000011000000010000,Razer Raion Fightpad for PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
03000000321500000009000000020000,Razer Serval,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Mac OS X,
030000003215000000090000163a0000,Razer Serval,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Mac OS X,
0300000032150000030a000000000000,Razer Wildcat,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
-03000000790000001100000000000000,Retrolink Classic Controller,a:b2,b:b1,back:b8,leftshoulder:b4,leftx:a3,lefty:a4,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Mac OS X,
+03000000830500006020000000010000,Retro Controller,a:b0,b:b1,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,lefttrigger:b5,rightshoulder:b8,righttrigger:b9,start:b7,x:b2,y:b3,platform:Mac OS X,
+03000000790000001100000000000000,Retro Controller,a:b1,b:b2,back:b8,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,leftshoulder:b6,lefttrigger:b7,rightshoulder:b4,righttrigger:b5,start:b9,x:b0,y:b3,platform:Mac OS X,
+03000000790000001100000005010000,Retro Controller,a:b1,b:b2,back:b8,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,leftshoulder:b6,lefttrigger:b7,rightshoulder:b5,righttrigger:b4,start:b9,x:b0,y:b3,platform:Mac OS X,
03000000790000001100000006010000,Retrolink SNES Controller,a:b2,b:b1,back:b8,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,leftshoulder:b4,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Mac OS X,
030000006b140000010d000000010000,Revolution Pro Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
030000006b140000130d000000010000,Revolution Pro Controller 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
@@ -498,10 +841,12 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
03000000110100002014000000000000,SteelSeries Nimbus,a:b0,b:b1,dpdown:b9,dpleft:b11,dpright:b10,dpup:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b12,x:b2,y:b3,platform:Mac OS X,
03000000110100002014000001000000,SteelSeries Nimbus,a:b0,b:b1,dpdown:b9,dpleft:b11,dpright:b10,dpup:b8,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3~,x:b2,y:b3,platform:Mac OS X,
03000000381000002014000001000000,SteelSeries Nimbus,a:b0,b:b1,dpdown:b9,dpleft:b11,dpright:b10,dpup:b8,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3~,x:b2,y:b3,platform:Mac OS X,
+05000000484944204465766963650000,SteelSeries Nimbus Plus,a:b0,b:b1,back:b15,dpdown:b11,dpleft:b13,dpright:b12,dpup:b10,guide:b16,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3~,start:b14,x:b2,y:b3,platform:Mac OS X,
+05000000556e6b6e6f776e2048494400,SteelSeries Nimbus Plus,a:b0,b:b1,back:b15,dpdown:b11,dpleft:b13,dpright:b12,dpup:b10,guide:b16,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3~,start:b14,x:b2,y:b3,platform:Mac OS X,
050000004e696d6275732b0000000000,SteelSeries Nimbus Plus,a:b0,b:b1,back:b15,dpdown:b11,dpleft:b13,dpright:b12,dpup:b10,guide:b16,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3~,start:b14,x:b2,y:b3,platform:Mac OS X,
03000000110100001714000000000000,SteelSeries Stratus XL,a:b0,b:b1,dpdown:b9,dpleft:b11,dpright:b10,dpup:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3~,start:b12,x:b2,y:b3,platform:Mac OS X,
03000000110100001714000020010000,SteelSeries Stratus XL,a:b0,b:b1,dpdown:b9,dpleft:b11,dpright:b10,dpup:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3~,start:b12,x:b2,y:b3,platform:Mac OS X,
-03000000457500002211000000010000,SZMY-POWER PC Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
+03000000457500002211000000010000,SZMY Power PC Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
030000004f04000015b3000000000000,Thrustmaster Dual Analog 3.2,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Mac OS X,
030000004f0400000ed0000000020000,ThrustMaster eSwap PRO Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
030000004f04000000b3000000000000,Thrustmaster Firestorm Dual Power,a:b0,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b11,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,rightx:a2,righty:a3,start:b10,x:b1,y:b3,platform:Mac OS X,
@@ -513,7 +858,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
03000000791d00000103000009010000,Wii Classic Controller,a:b2,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,guide:b10,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Mac OS X,
050000005769696d6f74652028303000,Wii Remote,a:b4,b:b5,back:b7,dpdown:b3,dpleft:b0,dpright:b1,dpup:b2,guide:b8,leftshoulder:b11,lefttrigger:b12,leftx:a0,lefty:a1,start:b6,x:b10,y:b9,platform:Mac OS X,
050000005769696d6f74652028313800,Wii U Pro Controller,a:b16,b:b15,back:b7,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b8,leftshoulder:b19,leftstick:b23,lefttrigger:b21,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b24,righttrigger:b22,rightx:a2,righty:a3,start:b6,x:b18,y:b17,platform:Mac OS X,
-030000005e0400008e02000000000000,X360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
+030000005e0400008e02000000000000,Xbox 360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
030000006f0e00000104000000000000,Xbox 360 Wired Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
03000000c6240000045d000000000000,Xbox 360 Wired Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
030000005e0400000a0b000000000000,Xbox Adaptive Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
@@ -524,28 +869,33 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
030000005e040000e302000000000000,Xbox One Wired Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
030000005e040000130b000001050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
030000005e040000130b000005050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
+030000005e040000130b000009050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
+030000005e040000200b000011050000,Xbox Wireless Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
030000005e040000e002000000000000,Xbox Wireless Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Mac OS X,
030000005e040000e002000003090000,Xbox Wireless Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Mac OS X,
030000005e040000ea02000000000000,Xbox Wireless Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
030000005e040000fd02000003090000,Xbox Wireless Controller,a:b0,b:b1,back:b16,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
03000000172700004431000029010000,XiaoMi Game Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a6,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Mac OS X,
-03000000120c0000100e000000010000,ZEROPLUS P4 Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
-03000000120c0000101e000000010000,ZEROPLUS P4 Wired Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
+03000000120c0000100e000000010000,Zeroplus P4 Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
+03000000120c0000101e000000010000,Zeroplus P4 Wired Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
# Linux
+03000000021000000090000011010000,8BitDo FC30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
03000000c82d00000090000011010000,8BitDo FC30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
05000000c82d00001038000000010000,8Bitdo FC30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
05000000c82d00005106000000010000,8BitDo M30,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,start:b11,x:b3,y:b4,platform:Linux,
03000000c82d00001590000011010000,8BitDo N30 Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
05000000c82d00006528000000010000,8BitDo N30 Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
+03000000008000000210000011010000,8BitDo NES30,a:b1,b:b2,back:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,
03000000c82d00000310000011010000,8BitDo NES30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b7,lefttrigger:b6,rightshoulder:b9,righttrigger:b8,start:b11,x:b3,y:b4,platform:Linux,
05000000c82d00008010000000010000,8BitDo NES30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b7,lefttrigger:b6,rightshoulder:b9,righttrigger:b8,start:b11,x:b3,y:b4,platform:Linux,
03000000022000000090000011010000,8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
05000000203800000900000000010000,8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
05000000c82d00002038000000010000,8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
-03000000c82d00000190000011010000,8Bitdo NES30 Pro 8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
+03000000c82d00000190000011010000,8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
05000000c82d00000060000000010000,8BitDo SF30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
05000000c82d00000061000000010000,8Bitdo SF30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
+030000003512000021ab000010010000,8BitDo SFC30,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Linux,
03000000c82d000021ab000010010000,8BitDo SFC30,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Linux,
030000003512000012ab000010010000,8Bitdo SFC30 GamePad,a:b2,b:b1,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b7,x:b3,y:b0,platform:Linux,
05000000102800000900000000010000,8Bitdo SFC30 GamePad,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Linux,
@@ -566,12 +916,12 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
050000005e040000e002000030110000,8BitDo Zero 2 (XInput),a:b0,b:b1,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b7,x:b2,y:b3,platform:Linux,
05000000a00500003232000001000000,8Bitdo Zero GamePad,a:b0,b:b1,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Linux,
05000000a00500003232000008010000,8Bitdo Zero GamePad,a:b0,b:b1,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Linux,
-03000000c01100000355000011010000,ACRUX USB GAME PAD,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+03000000c01100000355000011010000,Acrux Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
030000006f0e00001302000000010000,Afterglow,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
030000006f0e00003901000020060000,Afterglow Controller for Xbox One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
030000006f0e00003901000000430000,Afterglow Prismatic Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
030000006f0e00003901000013020000,Afterglow Prismatic Wired Controller 048-007-NA,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-03000000100000008200000011010000,Akishop Customs PS360+ v1.66,a:b1,b:b2,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,
+03000000100000008200000011010000,Akishop Customs PS360 v1.66,a:b1,b:b2,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,
030000007c1800000006000010010000,Alienware Dual Compatible Game Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b3,platform:Linux,
05000000491900000204000021000000,Amazon Fire Game Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b17,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b12,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
03000000491900001904000011010000,Amazon Luna Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b9,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b7,x:b2,y:b3,platform:Linux,
@@ -579,80 +929,86 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
03000000790000003018000011010000,Arcade Fightstick F300,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,
03000000a30c00002700000011010000,Astro City Mini,a:b2,b:b1,back:b8,leftx:a0,lefty:a1,rightshoulder:b4,righttrigger:b5,start:b9,x:b3,y:b0,platform:Linux,
03000000a30c00002800000011010000,Astro City Mini,a:b2,b:b1,back:b8,leftx:a0,lefty:a1,rightshoulder:b4,righttrigger:b5,start:b9,x:b3,y:b0,platform:Linux,
-05000000050b00000045000031000000,ASUS Gamepad,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b6,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b10,x:b2,y:b3,platform:Linux,
-05000000050b00000045000040000000,ASUS Gamepad,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b6,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b10,x:b2,y:b3,platform:Linux,
+05000000050b00000045000031000000,Asus Gamepad,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b6,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b10,x:b2,y:b3,platform:Linux,
+05000000050b00000045000040000000,Asus Gamepad,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b6,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b10,x:b2,y:b3,platform:Linux,
03000000503200000110000000000000,Atari Classic Controller,a:b0,back:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b4,start:b3,x:b1,platform:Linux,
05000000503200000110000000000000,Atari Classic Controller,a:b0,back:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b4,start:b3,x:b1,platform:Linux,
-03000000503200000210000000000000,Atari Game Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b2,platform:Linux,
+03000000503200000210000000000000,Atari Game Controller,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a4,rightx:a2,righty:a3,start:b8,x:b2,y:b3,platform:Linux,
05000000503200000210000000000000,Atari Game Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b2,platform:Linux,
03000000120c00000500000010010000,AxisPad,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a2,start:b11,x:b0,y:b1,platform:Linux,
03000000ef0500000300000000010000,AxisPad,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a2,start:b11,x:b0,y:b1,platform:Linux,
-03000000c62400001b89000011010000,BDA MOGA XP5-X Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
+03000000c62400001b89000011010000,BDA MOGA XP5X Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
03000000d62000002a79000011010000,BDA PS4 Fightpad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
-03000000c21100000791000011010000,Be1 GC101 Controller 1.03 mode,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
-03000000c31100000791000011010000,Be1 GC101 GAMEPAD 1.03 mode,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
-030000005e0400008e02000003030000,Be1 GC101 Xbox 360 Controller mode,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-03000000666600006706000000010000,boom PSX to PC Converter,a:b2,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b6,leftstick:b9,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b10,righttrigger:b5,rightx:a2,righty:a3,start:b11,x:b3,y:b0,platform:Linux,
-03000000120c0000200e000011010000,Brook Mars,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
-03000000120c0000210e000011010000,Brook Mars,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+03000000c21100000791000011010000,Be1 GC101 Controller 1.03,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
+03000000c31100000791000011010000,Be1 GC101 GAMEPAD 1.03,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
+030000005e0400008e02000003030000,Be1 GC101 Xbox 360,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+05000000bc2000000055000001000000,BETOP AX1 BFM,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
+030000006b1400000209000011010000,Bigben,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+03000000666600006706000000010000,Boom PSX to PC Converter,a:b2,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b6,leftstick:b9,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b10,righttrigger:b5,rightx:a2,righty:a3,start:b11,x:b3,y:b0,platform:Linux,
+03000000120c0000200e000011010000,Brook Mars PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
+03000000120c0000210e000011010000,Brook Mars PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
03000000120c0000f70e000011010000,Brook Universal Fighting Board,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,rightstick:b11,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,
-03000000ffff0000ffff000000010000,Chinese-made Xbox Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b4,platform:Linux,
+03000000ffff0000ffff000000010000,Xbox Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b4,platform:Linux,
03000000e82000006058000001010000,Cideko AK08b,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
030000000b0400003365000000010000,Competition Pro,a:b0,b:b1,back:b2,leftx:a0,lefty:a1,start:b3,platform:Linux,
03000000260900008888000000010000,Cyber Gadget GameCube Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:a5,rightx:a2,righty:a3~,start:b7,x:b2,y:b3,platform:Linux,
-03000000a306000022f6000011010000,Cyborg V.3 Rumble Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:+a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:-a3,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Linux,
-03000000b40400000a01000000010000,CYPRESS USB Gamepad,a:b0,b:b1,back:b5,guide:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b8,x:b3,y:b4,platform:Linux,
-03000000790000000600000010010000,DragonRise Inc. Generic USB Joystick,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b3,y:b0,platform:Linux,
+03000000a306000022f6000011010000,Cyborg V3 Rumble Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:+a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:-a3,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Linux,
030000004f04000004b3000010010000,Dual Power 2,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Linux,
030000006f0e00003001000001010000,EA Sports PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
-03000000341a000005f7000010010000,GameCube {HuiJia USB box},a:b1,b:b2,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b0,y:b3,platform:Linux,
+03000000c11100000191000011010000,EasySMX,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
+030000006e0500000320000010010000,Elecom U3613M,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b0,y:b1,platform:Linux,
+03000000b40400001124000011010000,Flydigi Vader 2,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b12,lefttrigger:a5,leftx:a0,lefty:a1,paddle1:b2,paddle2:b5,paddle4:b17,rightshoulder:b7,rightstick:b13,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
+05000000151900004000000001000000,Flydigi Vader 2,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
+03000000341a000005f7000010010000,HuiJia GameCube Controller Adpater,a:b1,b:b2,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b0,y:b3,platform:Linux,
03000000bc2000000055000011010000,GameSir G3w,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
+05000000ac0500002d0200001b010000,Gamesir G4s,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b33,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
0500000047532047616d657061640000,GameStop Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
030000006f0e00000104000000010000,Gamestop Logic3 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-030000008f0e00000800000010010000,Gasia Co. Ltd PS(R) Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
-030000006f0e00001304000000010000,Generic X-Box pad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000008f0e00000800000010010000,Gasia PlayStation Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
+030000006f0e00001304000000010000,Xbox Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
03000000451300000010000010010000,Genius Maxfire Grandias 12,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
-03000000f0250000c183000010010000,Goodbetterbest Ltd USB Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+03000000f0250000c183000010010000,Goodbetterbest Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
0300000079000000d418000000010000,GPD Win 2 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
030000007d0400000540000000010000,Gravis Eliminator GamePad Pro,a:b1,b:b2,back:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,
-03000000280400000140000000010000,Gravis GamePad Pro USB ,a:b1,b:b2,back:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,
-030000008f0e00000610000000010000,GreenAsia Electronics 4Axes 12Keys GamePad ,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b9,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b10,righttrigger:b5,rightx:a3,righty:a2,start:b11,x:b3,y:b0,platform:Linux,
-030000008f0e00001200000010010000,GreenAsia Inc. USB Joystick,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b2,y:b3,platform:Linux,
+03000000280400000140000000010000,Gravis GamePad Pro USB,a:b1,b:b2,back:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,
+030000008f0e00000610000000010000,GreenAsia Electronics Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b9,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b10,righttrigger:b5,rightx:a3,righty:a2,start:b11,x:b3,y:b0,platform:Linux,
+030000008f0e00001200000010010000,GreenAsia USB Joystick,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b2,y:b3,platform:Linux,
0500000047532067616d657061640000,GS gamepad,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
03000000f0250000c383000010010000,GT VX2,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
06000000adde0000efbe000002010000,Hidromancer Game Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-03000000d81400000862000011010000,HitBox (PS3/PC) Analog Mode,a:b1,b:b2,back:b8,guide:b9,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b12,x:b0,y:b3,platform:Linux,
-03000000c9110000f055000011010000,HJC Game GAMEPAD,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
-03000000632500002605000010010000,HJD-X,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
-030000000d0f00000d00000000010000,hori,a:b0,b:b6,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b3,leftx:b4,lefty:b5,rightshoulder:b7,start:b9,x:b1,y:b2,platform:Linux,
-030000000d0f00001000000011010000,HORI CO. LTD. FIGHTING STICK 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,
-030000000d0f0000c100000011010000,HORI CO. LTD. HORIPAD S,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b13,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
-030000000d0f00006a00000011010000,HORI CO. LTD. Real Arcade Pro.4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
-030000000d0f00006b00000011010000,HORI CO. LTD. Real Arcade Pro.4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
-030000000d0f00002200000011010000,HORI CO. LTD. REAL ARCADE Pro.V3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,
-030000000d0f00008500000010010000,HORI Fighting Commander,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+03000000d81400000862000011010000,HitBox PS3 PC Analog Mode,a:b1,b:b2,back:b8,guide:b9,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b12,x:b0,y:b3,platform:Linux,
+03000000c9110000f055000011010000,HJC Game Gamepqd,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
+03000000300f00001210000010010000,Qanba Joystick Plus,a:b0,b:b1,back:b8,leftshoulder:b5,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b4,righttrigger:b6,start:b9,x:b2,y:b3,platform:Linux,
+03000000632500002605000010010000,HJDX,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
+030000000d0f00000d00000000010000,Hori,a:b0,b:b6,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b3,rightshoulder:b7,start:b9,x:b1,y:b2,platform:Linux,
+030000000d0f00001000000011010000,Hori Fighting Stick 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,
+030000000d0f0000c100000011010000,Horipad S,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b13,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+030000000d0f00006a00000011010000,Hori Real Arcade Pro 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
+030000000d0f00006b00000011010000,Hori Real Arcade Pro 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+030000000d0f00002200000011010000,Hori Real Arcade Pro 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,
+030000000d0f00008500000010010000,Hori Fighting Commander,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
030000000d0f00008600000002010000,Hori Fighting Commander,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
-030000000d0f00005f00000011010000,Hori Fighting Commander 4 (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
-030000000d0f00005e00000011010000,Hori Fighting Commander 4 (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
+030000000d0f00005f00000011010000,Hori Fighting Commander 4 PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+030000000d0f00005e00000011010000,Hori Fighting Commander 4 PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
+030000000d0f00005001000009040000,Hori Fighting Commander OCTA,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
03000000ad1b000001f5000033050000,Hori Pad EX Turbo 2,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000000d0f00003801000011010000,Hori PC Engine Mini Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,start:b9,platform:Linux,
030000000d0f00009200000011010000,Hori Pokken Tournament DX Pro Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,
-030000000d0f0000aa00000011010000,HORI Real Arcade Pro,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
-030000000d0f0000d800000072056800,HORI Real Arcade Pro S,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Linux,
-030000000d0f00001600000000010000,Hori Real Arcade Pro.EX-SE (Xbox 360),a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b2,y:b3,platform:Linux,
-030000000d0f00006e00000011010000,HORIPAD 4 (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
-030000000d0f00006600000011010000,HORIPAD 4 (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
-030000000d0f0000ee00000011010000,HORIPAD mini4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
-030000000d0f00006700000001010000,HORIPAD ONE,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000000d0f0000aa00000011010000,Hori Real Arcade Pro,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
+030000000d0f0000d800000072056800,Hori Real Arcade Pro S,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Linux,
+030000000d0f00001600000000010000,Hori Real Arcade Pro EXSE,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b2,y:b3,platform:Linux,
+030000000d0f00006e00000011010000,Horipad 4 PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+030000000d0f00006600000011010000,Horipad 4 PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
+030000000d0f0000ee00000011010000,Horipad Mini 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
+030000000d0f00006700000001010000,Horipad One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
030000008f0e00001330000010010000,HuiJia SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b9,x:b3,y:b0,platform:Linux,
03000000242e00008816000001010000,Hyperkin X91,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-03000000830500006020000010010000,iBuffalo SNES Controller,a:b1,b:b0,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b7,x:b3,y:b2,platform:Linux,
-050000006964726f69643a636f6e0000,idroid:con,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
-03000000b50700001503000010010000,impact,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Linux,
-03000000d80400008200000003000000,IMS PCU#0 Gamepad Interface,a:b1,b:b0,back:b4,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,start:b5,x:b3,y:b2,platform:Linux,
-03000000fd0500000030000000010000,InterAct GoPad I-73000 (Fighting Game Layout),a:b3,b:b4,back:b6,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,start:b7,x:b0,y:b1,platform:Linux,
-0500000049190000020400001b010000,Ipega PG-9069 - Bluetooth Gamepad,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b161,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
-03000000632500007505000011010000,Ipega PG-9099 - Bluetooth Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
-030000006e0500000320000010010000,JC-U3613M - DirectInput Mode,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b0,y:b1,platform:Linux,
+050000006964726f69643a636f6e0000,idroidcon Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+03000000b50700001503000010010000,Impact,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Linux,
+03000000d80400008200000003000000,IMS PCU0 Gamepad,a:b1,b:b0,back:b4,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,start:b5,x:b3,y:b2,platform:Linux,
+03000000fd0500000030000000010000,InterAct GoPad I73000,a:b3,b:b4,back:b6,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,start:b7,x:b0,y:b1,platform:Linux,
+0500000049190000020400001b010000,Ipega PG 9069 Bluetooth Gamepad,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b161,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
+03000000632500007505000011010000,Ipega PG 9099 Bluetooth Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
03000000300f00001001000010010000,Jess Tech Dual Analog Rumble Pad,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Linux,
03000000300f00000b01000010010000,Jess Tech GGE909 PC Recoil Pad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Linux,
03000000ba2200002010000001010000,Jess Technology USB Game Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Linux,
@@ -664,7 +1020,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
03000000242f00002d00000011010000,JYS Wireless Adapter,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
03000000242f00008a00000011010000,JYS Wireless Adapter,a:b1,b:b4,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b0,y:b3,platform:Linux,
030000006f0e00000103000000020000,Logic3 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-030000006d040000d1ca000000000000,Logitech ChillStream,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+030000006d040000d1ca000000000000,Logitech Chillstream,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
030000006d04000019c2000010010000,Logitech Cordless RumblePad 2,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
030000006d04000016c2000010010000,Logitech Dual Action,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
030000006d04000016c2000011010000,Logitech Dual Action,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
@@ -673,24 +1029,25 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
030000006d0400001ec2000020200000,Logitech F510 Gamepad (XInput),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
030000006d04000019c2000011010000,Logitech F710 Gamepad (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
030000006d0400001fc2000005030000,Logitech F710 Gamepad (XInput),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-030000006d0400000ac2000010010000,Logitech Inc. WingMan RumblePad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,rightx:a3,righty:a4,x:b3,y:b4,platform:Linux,
+030000006d0400000ac2000010010000,Logitech WingMan RumblePad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,rightx:a3,righty:a4,x:b3,y:b4,platform:Linux,
030000006d04000018c2000010010000,Logitech RumblePad 2,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
030000006d04000011c2000010010000,Logitech WingMan Cordless RumblePad,a:b0,b:b1,back:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b6,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b10,rightx:a3,righty:a4,start:b8,x:b3,y:b4,platform:Linux,
-050000004d4f435554452d3035305800,M54-PC,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
-05000000380700006652000025010000,Mad Catz C.T.R.L.R ,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
-03000000380700005032000011010000,Mad Catz FightPad PRO (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
-03000000380700005082000011010000,Mad Catz FightPad PRO (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
+050000004d4f435554452d3035335800,Mocute 053X,a:b0,b:b1,x:b2,y:b3,back:b8,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,platform:Linux
+050000004d4f435554452d3035305800,Mocute 054X,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
+05000000380700006652000025010000,Mad Catz CTRLR,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+03000000380700005032000011010000,Mad Catz FightPad PRO PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+03000000380700005082000011010000,Mad Catz FightPad PRO PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
03000000ad1b00002ef0000090040000,Mad Catz Fightpad SFxT,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,start:b7,x:b2,y:b3,platform:Linux,
-03000000380700008034000011010000,Mad Catz fightstick (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
-03000000380700008084000011010000,Mad Catz fightstick (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
-03000000380700008433000011010000,Mad Catz FightStick TE S+ (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
-03000000380700008483000011010000,Mad Catz FightStick TE S+ (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
+03000000380700008034000011010000,Mad Catz fightstick PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+03000000380700008084000011010000,Mad Catz fightstick PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
+03000000380700008433000011010000,Mad Catz FightStick TE S PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+03000000380700008483000011010000,Mad Catz FightStick TE S PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
03000000380700001647000010040000,Mad Catz Wired Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-03000000380700003847000090040000,Mad Catz Wired Xbox 360 Controller (SFIV),a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
+03000000380700003847000090040000,Mad Catz Wired Xbox 360 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
03000000ad1b000016f0000090040000,Mad Catz Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
03000000380700001888000010010000,MadCatz PC USB Wired Stick 8818,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
03000000380700003888000010010000,MadCatz PC USB Wired Stick 8838,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:a0,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
-03000000242f0000f700000001010000,Magic-S Pro,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+03000000242f0000f700000001010000,Mayflash Magic S Pro,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
03000000120c00000500000000010000,Manta Dualshock 2,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b2,y:b3,platform:Linux,
03000000790000004418000010010000,Mayflash GameCube Controller,a:b1,b:b0,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b2,y:b3,platform:Linux,
03000000790000004318000010010000,Mayflash GameCube Controller Adapter,a:b1,b:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b0,y:b3,platform:Linux,
@@ -700,29 +1057,31 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
0300000025090000e803000001010000,Mayflash Wii Classic Controller,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:a4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:a5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Linux,
03000000780000000600000010010000,Microntek USB Joystick,a:b2,b:b1,back:b8,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,start:b9,x:b3,y:b0,platform:Linux,
030000005e0400000e00000000010000,Microsoft SideWinder,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,rightshoulder:b7,start:b8,x:b3,y:b4,platform:Linux,
-030000005e0400008e02000004010000,Microsoft X-Box 360 pad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-030000005e0400008e02000062230000,Microsoft X-Box 360 pad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-050000005e040000050b000003090000,Microsoft X-Box One Elite 2 pad,a:b0,b:b1,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a6,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
-030000005e040000e302000003020000,Microsoft X-Box One Elite pad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-030000005e040000d102000001010000,Microsoft X-Box One pad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-030000005e040000dd02000003020000,Microsoft X-Box One pad (Firmware 2015),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-030000005e040000d102000003020000,Microsoft X-Box One pad v2,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-030000005e0400008502000000010000,Microsoft X-Box pad (Japan),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b4,platform:Linux,
-030000005e0400008902000021010000,Microsoft X-Box pad v2 (US),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b4,platform:Linux,
-030000005e040000000b000008040000,Microsoft Xbox One Elite 2 pad - Wired,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-030000005e040000ea02000008040000,Microsoft Xbox One S pad - Wired,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-03000000c62400001a53000000010000,Mini PE,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000005e0400000700000000010000,Microsoft SideWinder Game Pad USB,a:b0,b:b1,back:b8,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b9,x:b3,y:b4,platform:Linux,
+030000005e0400008e02000004010000,Microsoft Xbox 360 pad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000005e0400008e02000062230000,Microsoft Xbox 360 pad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+050000005e040000050b000003090000,Microsoft Xbox One Elite 2 pad,a:b0,b:b1,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a6,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
+030000005e040000e302000003020000,Microsoft Xbox One Elite pad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000005e040000d102000001010000,Microsoft Xbox One pad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000005e040000dd02000003020000,Microsoft Xbox One pad 2015,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000005e040000d102000003020000,Microsoft Xbox One pad v2,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000005e0400008502000000010000,Microsoft Xbox pad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b4,platform:Linux,
+030000005e0400008902000021010000,Microsoft Xbox pad v2,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b4,platform:Linux,
+030000005e040000000b000008040000,Microsoft Xbox One Elite 2 pad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000005e040000ea02000008040000,Microsoft Xbox One S pad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+03000000c62400001a53000000010000,PowerA Mini Pro Ex,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
03000000030000000300000002000000,Miroof,a:b1,b:b0,back:b6,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b7,x:b3,y:b2,platform:Linux,
05000000d6200000e589000001000000,Moga 2 HID,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Linux,
05000000d6200000ad0d000001000000,Moga Pro,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Linux,
05000000d62000007162000001000000,Moga Pro 2 HID,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Linux,
-03000000c62400002b89000011010000,MOGA XP5-A Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
-05000000c62400002a89000000010000,MOGA XP5-A Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b22,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
-05000000c62400001a89000000010000,MOGA XP5-X Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
-03000000250900006688000000010000,MP-8866 Super Dual Box,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Linux,
-030000006b140000010c000010010000,NACON GC-400ES,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
+03000000c62400002b89000011010000,MOGA XP5A Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
+05000000c62400002a89000000010000,MOGA XP5A Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b22,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
+05000000c62400001a89000000010000,MOGA XP5X Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
+03000000250900006688000000010000,MP8866 Super Dual Box,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Linux,
+030000006b140000010c000010010000,Nacon GC 400ES,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
030000000d0f00000900000010010000,Natec Genesis P44,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
-03000000790000004518000010010000,NEXILUX GAMECUBE Controller Adapter,a:b1,b:b0,x:b2,y:b3,start:b9,rightshoulder:b7,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a5,righty:a2,lefttrigger:a3,righttrigger:a4,platform:Linux,
+030000004f1f00000800000011010000,Neogeo PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,
+03000000790000004518000010010000,Nexilux GameCube Controller Adapter,a:b1,b:b0,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b2,y:b3,platform:Linux,
030000001008000001e5000010010000,NEXT SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,righttrigger:b6,start:b9,x:b3,y:b0,platform:Linux,
060000007e0500003713000000000000,Nintendo 3DS,a:b0,b:b1,back:b8,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Linux,
060000007e0500000820000000000000,Nintendo Combined Joy-Cons (joycond),a:b0,b:b1,back:b9,dpdown:b15,dpleft:b16,dpright:b17,dpup:b14,guide:b11,leftshoulder:b5,leftstick:b12,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b13,righttrigger:b8,rightx:a2,righty:a3,start:b10,x:b3,y:b2,platform:Linux,
@@ -741,36 +1100,42 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
03000000550900001472000011010000,NVIDIA Controller v01.04,a:b0,b:b1,back:b14,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b16,leftshoulder:b4,leftstick:b7,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a5,start:b6,x:b2,y:b3,platform:Linux,
05000000550900001472000001000000,NVIDIA Controller v01.04,a:b0,b:b1,back:b14,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b16,leftshoulder:b4,leftstick:b7,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a5,start:b6,x:b2,y:b3,platform:Linux,
03000000451300000830000010010000,NYKO CORE,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
-19000000010000000100000001010000,odroidgo2_joypad,a:b1,b:b0,dpdown:b7,dpleft:b8,dpright:b9,dpup:b6,guide:b10,leftshoulder:b4,leftstick:b12,lefttrigger:b11,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b13,righttrigger:b14,start:b15,x:b2,y:b3,platform:Linux,
-19000000010000000200000011000000,odroidgo2_joypad_v11,a:b1,b:b0,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b12,leftshoulder:b4,leftstick:b14,lefttrigger:b13,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b15,righttrigger:b16,start:b17,x:b2,y:b3,platform:Linux,
-030000005e0400000202000000010000,Old Xbox pad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b4,platform:Linux,
+19000000010000000100000001010000,odroidgo2 joypad,a:b1,b:b0,dpdown:b7,dpleft:b8,dpright:b9,dpup:b6,guide:b10,leftshoulder:b4,leftstick:b12,lefttrigger:b11,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b13,righttrigger:b14,start:b15,x:b2,y:b3,platform:Linux,
+19000000010000000200000011000000,odroidgo2 joypad v11,a:b1,b:b0,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b12,leftshoulder:b4,leftstick:b14,lefttrigger:b13,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b15,righttrigger:b16,start:b17,x:b2,y:b3,platform:Linux,
+030000005e0400000202000000010000,Xbox pad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b4,platform:Linux,
03000000c0160000dc27000001010000,OnyxSoft Dual JoyDivision,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b6,x:b2,y:b3,platform:Linux,
05000000362800000100000002010000,OUYA Game Controller,a:b0,b:b3,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b14,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,x:b1,y:b2,platform:Linux,
05000000362800000100000003010000,OUYA Game Controller,a:b0,b:b3,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b14,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,x:b1,y:b2,platform:Linux,
03000000830500005020000010010000,Padix Co. Ltd. Rockfire PSX/USB Bridge,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b2,y:b3,platform:Linux,
03000000790000001c18000011010000,PC Game Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
03000000ff1100003133000010010000,PC Game Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
-030000006f0e0000b802000001010000,PDP AFTERGLOW Wired Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-030000006f0e0000b802000013020000,PDP AFTERGLOW Wired Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000006f0e0000b802000001010000,PDP Afterglow Wired Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000006f0e0000b802000013020000,PDP Afterglow Wired Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
030000006f0e00006401000001010000,PDP Battlefield One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-030000006f0e00008001000011010000,PDP CO. LTD. Faceoff Wired Pro Controller for Nintendo Switch,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+030000006f0e00008001000011010000,PDP Faceoff Wired Pro Controller for Nintendo Switch,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
030000006f0e00003101000000010000,PDP EA Sports Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
030000006f0e0000c802000012010000,PDP Kingdom Hearts Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
030000006f0e00008701000011010000,PDP Rock Candy Wired Controller for Nintendo Switch,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b13,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
+03000000c6240000fefa000000010000,Rock Candy Xbox 360 Controller, a:b0,b:b1,x:b2,y:b3,back:b6,guide:b8,start:b7,leftstick:b9,rightstick:b10,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,platform:Linux,
030000006f0e00000901000011010000,PDP Versus Fighting Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,
030000006f0e0000a802000023020000,PDP Wired Controller for Xbox One,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
030000006f0e00008501000011010000,PDP Wired Fight Pad Pro for Nintendo Switch,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
-0500000049190000030400001b010000,PG-9099,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
-05000000491900000204000000000000,PG-9118,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
+0500000049190000030400001b010000,Ipega PG9099,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
+05000000491900000204000000000000,Ipega PG9118,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
030000004c050000da0c000011010000,Playstation Controller,a:b2,b:b1,back:b8,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,start:b9,x:b3,y:b0,platform:Linux,
+03000000d9040000160f000000010000,Playstation Controller Adapter,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Linux,
030000004c0500003713000011010000,PlayStation Vita,a:b1,b:b2,back:b8,dpdown:b13,dpleft:b15,dpright:b14,dpup:b12,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Linux,
03000000c62400000053000000010000,PowerA,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
03000000c62400003a54000001010000,PowerA 1428124-01,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
03000000d62000006dca000011010000,PowerA Pro Ex,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
03000000d62000000228000001010000,PowerA Wired Controller for Xbox One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-03000000c62400001a58000001010000,PowerA Xbox One Cabled,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+03000000d62000000220000001010000,PowerA Wired Controller for Xbox One and Xbox Series S and X,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Linux,
+03000000c62400001a58000001010000,PowerA Xbox One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
03000000c62400001a54000001010000,PowerA Xbox One Mini Wired Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+03000000d620000013a7000011010000,Nintendo Switch PowerA Wired Controller,a:b1,b:b2,x:b0,y:b3,back:b8,guide:b12,start:b9,leftshoulder:b4,rightshoulder:b5,leftstick:b10,rightstick:b11,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,platform:Linux,
030000006d040000d2ca000011010000,Precision Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+03000000ba2200000701000001010000,Technology Innovation PS2 Adapter,b:b1,a:b0,x:b3,y:b2,start:b9,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a5,righty:a2,lefttrigger:b6,righttrigger:b7,platform:Linux,
+03000000430b00000300000000010000,EMS Production PS2 Adapter,b:b1,a:b2,x:b3,y:b0,start:b9,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b6,rightshoulder:b7,dpup:b12,dpleft:b15,dpdown:b14,dpright:b13,leftx:a0,lefty:a1,rightx:a5,righty:a2,lefttrigger:b4,righttrigger:b5,platform:Linux,
03000000ff1100004133000010010000,PS2 Controller,a:b2,b:b1,back:b8,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,start:b9,x:b3,y:b0,platform:Linux,
03000000341a00003608000011010000,PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
030000004c0500006802000010010000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Linux,
@@ -802,18 +1167,20 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
030000004c050000e60c000011010000,PS5 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
050000004c050000e60c000000010000,PS5 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
03000000ff000000cb01000010010000,PSP,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b7,x:b2,y:b3,platform:Linux,
-03000000300f00001211000011010000,QanBa Arcade JoyStick,a:b2,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b5,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b6,start:b9,x:b1,y:b3,platform:Linux,
+03000000300f00001211000011010000,Qanba Arcade Joystick,a:b2,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b5,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b6,start:b9,x:b1,y:b3,platform:Linux,
030000009b2800004200000001010000,Raphnet Technologies Dual NES to USB v2.0,a:b0,b:b1,back:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,start:b3,platform:Linux,
030000009b2800003200000001010000,Raphnet Technologies GC/N64 to USB v3.4,a:b0,b:b7,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,rightx:a3,righty:a4,start:b3,x:b1,y:b8,platform:Linux,
030000009b2800006000000001010000,Raphnet Technologies GC/N64 to USB v3.6,a:b0,b:b7,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,rightx:a3,righty:a4,start:b3,x:b1,y:b8,platform:Linux,
030000009b2800000300000001010000,raphnet.net 4nes4snes v1.5,a:b0,b:b4,back:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b1,y:b5,platform:Linux,
030000008916000001fd000024010000,Razer Onza Classic Edition,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
030000008916000000fd000024010000,Razer Onza Tournament Edition,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-03000000321500000204000011010000,Razer Panthera (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
-03000000321500000104000011010000,Razer Panthera (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
+03000000321500000204000011010000,Razer Panthera PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+03000000321500000104000011010000,Razer Panthera PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
03000000321500000810000011010000,Razer Panthera Evo Arcade Stick for PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b13,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
-03000000321500000010000011010000,Razer RAIJU,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
+03000000321500000010000011010000,Razer Rainu,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
03000000321500000507000000010000,Razer Raiju Mobile,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b21,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
+05000000321500000a10000001000000,Razer Raiju Tournament Edition,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b13,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
+03000000321500000710000000010000,Razer Raiju Tournament Edition Wired,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b13,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
03000000321500000011000011010000,Razer Raion Fightpad for PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
030000008916000000fe000024010000,Razer Sabertooth,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
03000000c6240000045d000024010000,Razer Sabertooth,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
@@ -821,7 +1188,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
03000000321500000009000011010000,Razer Serval,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Linux,
050000003215000000090000163a0000,Razer Serval,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Linux,
0300000032150000030a000001010000,Razer Wildcat,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-03000000790000001100000010010000,Retrolink SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Linux,
+03000000790000001100000010010000,Retro Controller,a:b1,b:b2,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b7,rightshoulder:b4,righttrigger:b5,start:b9,x:b0,y:b3,platform:Linux,
0300000081170000990a000001010000,Retronic Adapter,a:b0,leftx:a0,lefty:a1,platform:Linux,
0300000000f000000300000000010000,RetroPad,a:b1,b:b5,back:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b0,y:b4,platform:Linux,
030000006b140000010d000011010000,Revolution Pro Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
@@ -837,20 +1204,22 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
03000000300f00001201000010010000,Saitek P380,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Linux,
03000000a30600000901000000010000,Saitek P880,a:b2,b:b3,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a2,x:b0,y:b1,platform:Linux,
03000000a30600000b04000000010000,Saitek P990 Dual Analog Pad,a:b1,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b8,x:b0,y:b3,platform:Linux,
-03000000a306000018f5000010010000,Saitek PLC Saitek P3200 Rumble Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Linux,
+03000000a306000018f5000010010000,Saitek P3200 Rumble Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Linux,
03000000a306000020f6000011010000,Saitek PS2700 Rumble Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Linux,
03000000d81d00000e00000010010000,Savior,a:b0,b:b1,back:b8,leftshoulder:b6,leftstick:b10,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b11,righttrigger:b3,start:b9,x:b4,y:b5,platform:Linux,
-03000000f025000021c1000010010000,ShanWan Gioteck PS3 Wired Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
-03000000632500007505000010010000,SHANWAN PS3/PC Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
-03000000bc2000000055000010010000,ShanWan PS3/PC Wired GamePad,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
-030000005f140000c501000010010000,SHANWAN Trust Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
+03000000a30c00002500000011010000,Sega Genesis Mini 3B controller,a:b2,b:b1,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,righttrigger:b5,start:b9,platform:Linux,
+030000001f08000001e4000010010000,SFC Controller,a:b2,b:b1,back:b8,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Linux,
+03000000f025000021c1000010010000,Shanwan Gioteck PS3 Wired Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
+03000000632500007505000010010000,Shanwan PS3 PC Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
+03000000bc2000000055000010010000,Shanwan PS3 PC Wired GamePad,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
+030000005f140000c501000010010000,Shanwan Trust Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
03000000632500002305000010010000,ShanWan USB Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
-03000000341a00000908000010010000,SL-6566,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
+03000000341a00000908000010010000,SL6566,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
030000004c050000e60c000011810000,Sony DualSense,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux,
-050000004c050000e60c000000810000,Sony DualSense ,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux,
+050000004c050000e60c000000810000,Sony DualSense,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux,
03000000250900000500000000010000,Sony PS2 pad with SmartJoy adapter,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Linux,
-030000005e0400008e02000073050000,Speedlink TORID Wireless Gamepad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-030000005e0400008e02000020200000,SpeedLink XEOX Pro Analog Gamepad pad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000005e0400008e02000073050000,Speedlink Torid Wireless Gamepad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000005e0400008e02000020200000,SpeedLink Xeox Pro Analog Gamepad pad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
03000000d11800000094000011010000,Stadia Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Linux,
03000000de2800000112000001000000,Steam Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,paddle1:b11,paddle2:b10,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Linux,
03000000de2800000211000001000000,Steam Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,paddle1:b11,paddle2:b10,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Linux,
@@ -870,13 +1239,13 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
030000003b07000004a1000000010000,Suncom SFX Plus for USB,a:b0,b:b2,back:b7,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b9,righttrigger:b5,start:b8,x:b1,y:b3,platform:Linux,
03000000666600000488000000010000,Super Joy Box 5 Pro,a:b2,b:b1,back:b9,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Linux,
0300000000f00000f100000000010000,Super RetroPort,a:b1,b:b5,back:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b0,y:b4,platform:Linux,
-03000000457500002211000010010000,SZMY-POWER CO. LTD. GAMEPAD,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
-030000008f0e00000d31000010010000,SZMY-POWER CO. LTD. GAMEPAD 3 TURBO,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
-030000008f0e00001431000010010000,SZMY-POWER CO. LTD. PS3 gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+03000000457500002211000010010000,SZMY Power Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
+030000008f0e00000d31000010010000,SZMY Power 3 Turbo,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+030000008f0e00001431000010010000,SZMY Power PS3 gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
030000004f04000020b3000010010000,Thrustmaster 2 in 1 DT,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Linux,
030000004f04000015b3000010010000,Thrustmaster Dual Analog 4,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Linux,
-030000004f04000023b3000000010000,Thrustmaster Dual Trigger 3-in-1,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
-030000004f0400000ed0000011010000,ThrustMaster eSwap PRO Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
+030000004f04000023b3000000010000,Thrustmaster Dual Trigger 3 in 1,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
+030000004f0400000ed0000011010000,Thrustmaster eSwap PRO Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
03000000b50700000399000000010000,Thrustmaster Firestorm Digital 2,a:b2,b:b4,back:b11,leftshoulder:b6,leftstick:b10,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b8,rightstick:b0,righttrigger:b9,start:b1,x:b3,y:b5,platform:Linux,
030000004f04000003b3000010010000,Thrustmaster Firestorm Dual Analog 2,a:b0,b:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b9,rightx:a2,righty:a3,x:b1,y:b3,platform:Linux,
030000004f04000000b3000010010000,Thrustmaster Firestorm Dual Power,a:b0,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b11,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b10,x:b1,y:b3,platform:Linux,
@@ -887,49 +1256,62 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
030000004f04000007d0000000010000,Thrustmaster T Mini Wireless,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
030000004f04000012b3000010010000,Thrustmaster vibrating gamepad,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Linux,
03000000bd12000015d0000010010000,Tomee SNES USB Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Linux,
-03000000d814000007cd000011010000,Toodles 2008 Chimp PC/PS3,a:b0,b:b1,back:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b3,y:b2,platform:Linux,
+03000000d814000007cd000011010000,Toodles 2008 Chimp PC PS3,a:b0,b:b1,back:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b3,y:b2,platform:Linux,
030000005e0400008e02000070050000,Torid,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
03000000c01100000591000011010000,Torid,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
03000000100800000100000010010000,Twin USB PS2 Adapter,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Linux,
03000000100800000300000010010000,USB Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Linux,
03000000790000000600000007010000,USB gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b3,y:b0,platform:Linux,
03000000790000001100000000010000,USB Gamepad1,a:b2,b:b1,back:b8,dpdown:a0,dpleft:a1,dpright:a2,dpup:a4,start:b9,platform:Linux,
+03000000790000001100000011010000,USB Saturn Controller,a:b1,b:b2,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b7,rightshoulder:b5,righttrigger:b4,start:b9,x:b0,y:b3,platform:Linux,
+03000000790000002201000011010000,USB Saturn Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b5,rightshoulder:b6,righttrigger:b7,start:b9,x:b2,y:b3,platform:Linux,
+03000000b40400000a01000000010000,USB Saturn Pad,a:b0,b:b1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b8,x:b3,y:b4,platform:Linux,
030000006f0e00000302000011010000,Victrix Pro Fight Stick for PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,
030000006f0e00000702000011010000,Victrix Pro Fight Stick for PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,
-05000000ac0500003232000001000000,VR-BOX,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b2,y:b3,platform:Linux,
+05000000ac0500003232000001000000,VR Box Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b2,y:b3,platform:Linux,
03000000791d00000103000010010000,Wii Classic Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
050000000d0f0000f600000001000000,Wireless HORIPAD Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
-030000005e0400008e02000010010000,X360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-030000005e0400008e02000014010000,X360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-030000005e0400001907000000010000,X360 Wireless Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-030000005e0400009102000007010000,X360 Wireless Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-030000005e040000a102000000010000,X360 Wireless Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-030000005e040000a102000007010000,X360 Wireless Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000005e0400008e02000010010000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000005e0400008e02000014010000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000005e0400001907000000010000,Xbox 360 Wireless Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000005e0400009102000007010000,Xbox 360 Wireless Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000005e040000a102000000010000,Xbox 360 Wireless Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000005e040000a102000007010000,Xbox 360 Wireless Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
0000000058626f782033363020576900,Xbox 360 Wireless Controller,a:b0,b:b1,back:b14,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,guide:b7,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Linux,
-030000005e040000a102000014010000,Xbox 360 Wireless Receiver (XBOX),a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-0000000058626f782047616d65706100,Xbox Gamepad (userspace driver),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Linux,
+030000005e040000a102000014010000,Xbox 360 Wireless Receiver,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+0000000058626f782047616d65706100,Xbox Gamepad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Linux,
+030000005e0400000a0b000005040000,Xbox One Controller,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b11,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Linux,
030000005e040000d102000002010000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
050000005e040000fd02000030110000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+050000005e040000e302000002090000,Xbox One Elite,a:b0,b:b1,back:b136,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a6,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
050000005e040000050b000002090000,Xbox One Elite Series 2,a:b0,b:b1,back:b136,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a6,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
030000005e040000ea02000000000000,Xbox One Wireless Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
050000005e040000e002000003090000,Xbox One Wireless Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
050000005e040000fd02000003090000,Xbox One Wireless Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b16,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
030000005e040000ea02000001030000,Xbox One Wireless Controller (Model 1708),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+060000005e040000120b000007050000,Xbox One Wireless Controller (Model 1914),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
030000005e040000120b000001050000,Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
030000005e040000130b000005050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
050000005e040000130b000001050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
050000005e040000130b000005050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
-030000005e040000120b000005050000,XBox Series pad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-030000005e0400008e02000000010000,xbox360 Wireless EasySMX,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-03000000450c00002043000010010000,XEOX Gamepad SL-6556-BK,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
-03000000ac0500005b05000010010000,Xiaoji Gamesir-G3w,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
+030000005e040000120b000005050000,Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000005e0400008e02000000010000,Xbox 360 Wireless EasySMX,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+03000000450c00002043000010010000,XEOX Gamepad SL6556 BK,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
+03000000ac0500005b05000010010000,Xiaoji Gamesir G3w,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
05000000172700004431000029010000,XiaoMi Game Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b20,leftshoulder:b6,leftstick:b13,lefttrigger:a7,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a6,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Linux,
-03000000c0160000e105000001010000,Xin-Mo Xin-Mo Dual Arcade,a:b4,b:b3,back:b6,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b9,leftshoulder:b2,leftx:a0,lefty:a1,rightshoulder:b5,start:b7,x:b1,y:b0,platform:Linux,
+03000000c0160000e105000001010000,XinMo Dual Arcade,a:b4,b:b3,back:b6,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b9,leftshoulder:b2,leftx:a0,lefty:a1,rightshoulder:b5,start:b7,x:b1,y:b0,platform:Linux,
xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-03000000120c0000100e000011010000,ZEROPLUS P4 Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
-03000000120c0000101e000011010000,ZEROPLUS P4 Wired Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
+03000000120c0000100e000011010000,Zeroplus P4 Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
+03000000120c0000101e000011010000,Zeroplus P4 Wired Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
# Android
+38653964633230666463343334313533,8BitDo Adapter,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+34343439373236623466343934376233,8BitDo FC30 Pro,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b28,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b29,righttrigger:b7,start:b5,x:b30,y:b2,platform:Android,
+33656266353630643966653238646264,8BitDo M30,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b20,righttrigger:a5,start:b10,x:b19,y:b2,platform:Android,
+39366630663062373237616566353437,8BitDo M30,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,righttrigger:b18,start:b6,x:b2,y:b3,platform:Android,
+64653533313537373934323436343563,8BitDo M30,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:a4,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b9,righttrigger:b10,start:b6,x:b2,y:b3,platform:Android,
+66356438346136366337386437653934,8BitDo M30,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,righttrigger:b10,start:b18,x:b19,y:b2,platform:Android,
+66393064393162303732356665666366,8BitDo M30,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,righttrigger:a5,start:b6,x:b2,y:b3,platform:Android,
05000000c82d000006500000ffff3f00,8BitDo M30 Gamepad,a:b1,b:b0,back:b4,guide:b17,leftshoulder:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b10,righttrigger:a4,start:b6,x:b3,y:b2,platform:Android,
05000000c82d000051060000ffff3f00,8BitDo M30 Gamepad,a:b1,b:b0,back:b4,guide:b17,leftshoulder:b9,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,righttrigger:a5,start:b6,x:b3,y:b2,platform:Android,
05000000c82d000015900000ffff3f00,8BitDo N30 Pro 2,a:b1,b:b0,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android,
@@ -938,60 +1320,152 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
050000002038000009000000ffff3f00,8BitDo NES30 Pro,a:b1,b:b0,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android,
05000000c82d000000600000ffff3f00,8BitDo SF30 Pro,a:b1,b:b0,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:b15,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b16,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android,
05000000c82d000000610000ffff3f00,8BitDo SF30 Pro,a:b1,b:b0,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android,
+38426974646f20534633302050726f00,8BitDo SF30 Pro,a:b1,b:b0,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b15,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b16,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b17,platform:Android,
+61623334636338643233383735326439,8BitDo SFC30,a:b0,b:b1,back:b4,leftshoulder:b3,leftx:a0,lefty:a1,rightshoulder:b31,start:b5,x:b30,y:b2,platform:Android,
05000000c82d000012900000ffff3f00,8BitDo SN30 Gamepad,a:b1,b:b0,back:b4,leftshoulder:b9,leftx:a0,lefty:a1,rightshoulder:b10,start:b6,x:b3,y:b2,platform:Android,
05000000c82d000062280000ffff3f00,8BitDo SN30 Gamepad,a:b1,b:b0,back:b4,leftshoulder:b9,leftx:a0,lefty:a1,rightshoulder:b10,start:b6,x:b3,y:b2,platform:Android,
+35383531346263653330306238353131,8BitDo SN30 PP,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
05000000c82d000001600000ffff3f00,8BitDo SN30 Pro,a:b1,b:b0,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android,
+36653638656632326235346264663661,8BitDo SN30 Pro Plus,a:b0,b:b1,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b18,x:b19,y:b2,platform:Android,
+38303232393133383836366330346462,8BitDo SN30 Pro Plus,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b17,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b18,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b19,y:b2,platform:Android,
+38346630346135363335366265656666,8BitDo SN30 Pro Plus,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android,
+66306331643531333230306437353936,8BitDo SN30 Pro Plus,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android,
05000000c82d000002600000ffff0f00,8BitDo SN30 Pro+,a:b1,b:b0,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b17,leftshoulder:b9,leftstick:b7,lefttrigger:b15,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b16,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android,
050000002028000009000000ffff3f00,8BitDo SNES30 Gamepad,a:b1,b:b0,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android,
050000003512000020ab000000780f00,8BitDo SNES30 Gamepad,a:b21,b:b20,back:b30,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b26,rightshoulder:b27,start:b31,x:b24,y:b23,platform:Android,
+33666663316164653937326237613331,8BitDo Zero,a:b0,b:b1,back:b15,leftshoulder:b9,leftx:a0,lefty:a1,rightshoulder:b10,start:b6,x:b2,y:b3,platform:Android,
05000000c82d000018900000ffff0f00,8BitDo Zero 2,a:b1,b:b0,back:b4,leftshoulder:b9,leftx:a0,lefty:a1,rightshoulder:b10,start:b6,x:b3,y:b2,platform:Android,
05000000c82d000030320000ffff0f00,8BitDo Zero 2,a:b1,b:b0,back:b4,leftshoulder:b9,leftx:a0,lefty:a1,rightshoulder:b10,start:b6,x:b3,y:b2,platform:Android,
-38383337343564366131323064613561,Brook Mars,a:b1,b:b19,back:b17,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b18,x:b0,y:b2,platform:Android,
+33663434393362303033616630346337,8BitDo Zero 2,a:b0,b:b1,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftx:a0,lefty:a1,rightshoulder:b20,start:b18,x:b19,y:b2,platform:Android,
+34656330626361666438323266633963,8BitDo Zero 2,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b20,start:b10,x:b19,y:b2,platform:Android,
+63396666386564393334393236386630,8BitDo Zero 2,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftx:a0,lefty:a1,rightshoulder:b10,start:b6,x:b3,y:b2,platform:Android,
+63633435623263373466343461646430,8BitDo Zero 2,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftx:a0,lefty:a1,rightshoulder:b10,start:b6,x:b2,y:b3,platform:Android,
+32333634613735616163326165323731,Amazon Luna Game Controller,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,x:b2,y:b3,platform:Android,
+38383337343564366131323064613561,Brook Mars PS4 Controller,a:b1,b:b19,back:b17,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b18,x:b0,y:b2,platform:Android,
+33323763323132376537376266393366,Dual Strike,a:b24,b:b23,back:b25,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b27,lefttrigger:b29,rightshoulder:b78,rightx:a0,righty:a1~,start:b26,x:b22,y:b21,platform:Android,
+30363230653635633863366338623265,Evo VR,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,x:b2,y:b3,platform:Android,
+05000000b404000011240000dfff3f00,Flydigi Vader 2,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,paddle1:b17,paddle2:b18,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
05000000bc20000000550000ffff3f00,GameSir G3w,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+34323662653333636330306631326233,Google Nexus,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+35383633353935396534393230616564,Google Stadia Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
05000000d6020000e5890000dfff3f00,GPD XD Plus,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a4,rightx:a2,righty:a5,start:b6,x:b2,y:b3,platform:Android,
0500000031366332860c44aadfff0f00,GS Gamepad,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:b15,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b16,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
-0500000083050000602000000ffe0000,iBuffalo SNES Controller,a:b1,b:b0,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b15,rightshoulder:b16,start:b10,x:b3,y:b2,platform:Android,
+66633030656131663837396562323935,Hori Battle,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Android,
+35623466343433653739346434636330,Hori Fighting Commander 3 Pro,a:b1,b:b19,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,righttrigger:b10,rightx:a2,righty:a3,start:b18,x:b0,y:b2,platform:Android,
+65656436646661313232656661616130,Hori PC Engine Mini Controller,a:b1,b:b19,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,start:b18,platform:Android,
+31303433326562636431653534636633,Hori Real Arcade Pro 3,a:b1,b:b19,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,righttrigger:b10,rightx:a2,righty:a3,start:b18,x:b0,y:b2,platform:Android,
+0500000083050000602000000ffe0000,iBuffalo SNES Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b15,rightshoulder:b16,start:b10,x:b2,y:b3,platform:Android,
+64306137363261396266353433303531,InterAct GoPad,a:b24,b:b25,leftshoulder:b23,lefttrigger:b27,leftx:a0,lefty:a1,rightshoulder:b26,righttrigger:b28,x:b21,y:b22,platform:Android,
+65346535636333663931613264643164,Joy Con,a:b21,b:b22,back:b29,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b25,lefttrigger:b27,leftx:a0,lefty:a1,rightshoulder:b26,righttrigger:b28,rightx:a2,righty:a3,start:b30,x:b23,y:b24,platform:Android,
+33346566643039343630376565326335,Joy Con (L),a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b15,rightshoulder:b20,start:b17,x:b19,y:b2,platform:Android,
+35313531613435623366313835326238,Joy Con (L),a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b15,rightshoulder:b20,start:b17,x:b19,y:b2,platform:Android,
+39363561613936303237333537383931,Joy Con (R),a:b0,b:b1,back:b5,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b15,rightshoulder:b20,start:b18,x:b19,y:b2,platform:Android,
+38383665633039363066383334653465,Joy Con (R),a:b0,b:b1,back:b5,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b15,rightshoulder:b20,start:b18,x:b19,y:b2,platform:Android,
+39656136363638323036303865326464,JYS Aapter,a:b1,b:b19,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b18,x:b0,y:b2,platform:Android,
+63316564383539663166353034616434,JYS Adapter,a:b1,b:b3,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b0,y:b2,platform:Android,
+64623163333561643339623235373232,Logitech F310,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+35623364393661626231343866613337,Logitech F710,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+64396331333230326333313330336533,Logitech F710,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+30363066623539323534363639323363,Magic NS,a:b1,b:b19,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b18,x:b0,y:b2,platform:Android,
+31353762393935386662336365626334,Magic NS,a:b1,b:b19,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b18,x:b0,y:b2,platform:Android,
+39623565346366623931666633323530,Magic NS,a:b1,b:b3,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b0,y:b2,platform:Android,
+32303165626138343962363666346165,Mars,a:b1,b:b19,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b18,x:b0,y:b2,platform:Android,
+31323564663862633234646330373138,Mega Drive,a:b23,b:b22,leftx:a0,lefty:a1,rightshoulder:b25,righttrigger:b26,start:b30,x:b24,y:b21,platform:Android,
+37333564393261653735306132613061,Mega Drive,a:b21,b:b22,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b26,lefttrigger:b28,rightshoulder:b27,righttrigger:b23,start:b30,x:b24,y:b25,platform:Android,
+64363363336633363736393038313464,Mega Drive,a:b1,b:b0,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,start:b9,x:b2,y:b3,platform:Android,
64633436313965656664373634323364,Microsoft X-Box 360 pad,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,x:b2,y:b3,platform:Android,
+32386235353630393033393135613831,Microsoft Xbox Series Controller,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+33343361376163623438613466616531,Mocute M053,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+39306635663061636563316166303966,Mocute M053,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
7573622067616d657061642020202020,NEXT SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,righttrigger:b6,start:b9,x:b3,y:b0,platform:Android,
050000007e05000009200000ffff0f00,Nintendo Switch Pro Controller,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b3,leftstick:b4,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b16,x:b17,y:b2,platform:Android,
+34323437396534643531326161633738,Nintendo Switch Pro Controller,a:b0,b:b1,back:b15,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,misc1:b5,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
37336435666338653565313731303834,NVIDIA Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
4e564944494120436f72706f72617469,NVIDIA Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
61363931656135336130663561616264,NVIDIA Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
050000005509000003720000cf7f3f00,NVIDIA Controller v01.01,a:b0,b:b1,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
050000005509000010720000ffff3f00,NVIDIA Controller v01.03,a:b0,b:b1,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
050000005509000014720000df7f3f00,NVIDIA Controller v01.04,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a4,rightx:a2,righty:a5,start:b6,x:b2,y:b3,platform:Android,
+61653962353232366130326530363061,Pokken,a:b1,b:b19,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,lefttrigger:b9,rightshoulder:b20,righttrigger:b10,start:b18,x:b0,y:b2,platform:Android,
+32666633663735353234363064386132,PS2,a:b23,b:b22,back:b29,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b27,lefttrigger:b25,leftx:a0,lefty:a1,rightshoulder:b28,righttrigger:b26,rightx:a3,righty:a2,start:b30,x:b24,y:b21,platform:Android,
+61363034663839376638653463633865,PS3,a:b0,b:b1,back:b15,dpdown:a14,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+66366539656564653432353139356536,PS3,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+66383132326164626636313737373037,PS3,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
050000004c05000068020000dfff3f00,PS3 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+30303839663330346632363232623138,PS4,a:b1,b:b17,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:a4,rightx:a2,righty:a5,start:b16,x:b0,y:b2,platform:Android,
+31326235383662333266633463653332,PS4,a:b1,b:b16,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:a4,rightx:a2,righty:a5,start:b17,x:b0,y:b2,platform:Android,
+31663838336334393132303338353963,PS4,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+34613139376634626133336530386430,PS4,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+37626233336235343937333961353732,PS4,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+38393161636261653636653532386639,PS4,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+63313733393535663339656564343962,PS4,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+63393662363836383439353064663939,PS4,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+65366465656364636137653363376531,PS4,a:b1,b:b19,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b18,x:b0,y:b2,platform:Android,
+66613532303965383534396638613230,PS4,a:b1,b:b19,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a5,start:b18,x:b0,y:b2,platform:Android,
030000004c050000cc09000000006800,PS4 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
050000004c050000c405000000783f00,PS4 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
050000004c050000c4050000fffe3f00,PS4 Controller,a:b1,b:b17,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b3,leftstick:b4,lefttrigger:+a3,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:+a4,rightx:a2,righty:a5,start:b16,x:b0,y:b2,platform:Android,
050000004c050000c4050000ffff3f00,PS4 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
050000004c050000cc090000fffe3f00,PS4 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
050000004c050000cc090000ffff3f00,PS4 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+31373231336561636235613666323035,PS4 Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
35643031303033326130316330353564,PS4 Controller,a:b1,b:b17,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b3,leftstick:b4,lefttrigger:+a3,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:+a4,rightx:a2,righty:a5,start:b16,x:b0,y:b2,platform:Android,
050000004c050000e60c0000fffe3f00,PS5 Controller,a:b1,b:b17,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b3,leftstick:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:a4,rightx:a2,righty:a5,start:b16,x:b0,y:b2,platform:Android,
+62653335326261303663356263626339,PSX,a:b19,b:b1,back:b17,leftshoulder:b9,lefttrigger:b3,leftx:a0,lefty:a1,rightshoulder:b10,righttrigger:b20,start:b18,x:b2,y:b0,platform:Android,
+64336263393933626535303339616332,Qanba 4RAF,a:b0,b:b1,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b20,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b3,righttrigger:b9,rightx:a2,righty:a3,start:b18,x:b19,y:b2,platform:Android,
+36626666353861663864336130363137,Razer Junglecat,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
62653861643333663663383332396665,Razer Kishi,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
050000003215000005070000ffff3f00,Razer Raiju Mobile,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
050000003215000007070000ffff3f00,Razer Raiju Mobile,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
050000003215000000090000bf7f3f00,Razer Serval,a:b0,b:b1,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,x:b2,y:b3,platform:Android,
+61343739353764363165343237303336,Retro Controller,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b17,lefttrigger:b18,leftx:a0,lefty:a1,start:b10,x:b2,y:b3,platform:Android,
+38653130373365613538333235303036,Retroid Pocket 2,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+64363363336633363736393038313463,Retrolink,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,start:b6,platform:Android,
+33373336396634316434323337666361,RumblePad 2,a:b22,b:b23,back:b29,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b25,lefttrigger:b27,leftx:a0,lefty:a1,rightshoulder:b26,righttrigger:b28,rightx:a2,righty:a3,start:b30,x:b21,y:b24,platform:Android,
+66386565396238363534313863353065,Sanwa Mobile,a:b21,b:b22,leftshoulder:b23,leftx:a0,lefty:a1,rightshoulder:b24,platform:Android,
+32383165316333383766336338373261,Saturn,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:a4,righttrigger:a5,x:b2,y:b3,platform:Android,
+37316565396364386635383230353365,Saturn,a:b21,b:b22,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b26,lefttrigger:b28,rightshoulder:b27,righttrigger:b23,start:b30,x:b24,y:b25,platform:Android,
+38613865396530353338373763623431,Saturn,a:b0,b:b1,leftshoulder:b9,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b20,righttrigger:b19,start:b17,x:b2,y:b3,platform:Android,
+61316232336262373631343137633631,Saturn,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:a4,righttrigger:a5,x:b2,y:b3,platform:Android,
+30353835333338613130373363646337,SG H510,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b17,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b18,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b19,y:b2,platform:Android,
+66386262366536653765333235343634,SG H510,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,x:b2,y:b3,platform:Android,
+66633132393363353531373465633064,SG H510,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b17,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b18,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b19,y:b2,platform:Android,
+30306461613834333439303734316539,Microsoft SideWinder Pro,a:b0,b:b1,leftshoulder:b20,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b19,righttrigger:b10,start:b17,x:b2,y:b3,platform:Android,
+62653761636366393366613135366338,SN30 PP,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android,
+38376662666661636265313264613039,SNES,a:b0,b:b1,back:b9,leftshoulder:b3,leftx:a0,lefty:a1,rightshoulder:b20,start:b10,x:b19,y:b2,platform:Android,
32633532643734376632656664383733,Sony DualSense,a:b1,b:b19,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a5,start:b18,x:b0,y:b2,platform:Android,
61303162353165316365336436343139,Sony DualSense,a:b1,b:b19,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a5,start:b18,x:b0,y:b2,platform:Android,
+63303964303462366136616266653561,Sony PSP,a:b21,b:b22,back:b27,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b25,leftx:a0,lefty:a1,rightshoulder:b26,start:b28,x:b23,y:b24,platform:Android,
+63376637643462343766333462383235,Sony Vita,a:b1,b:b19,back:b17,leftshoulder:b3,leftx:a0,lefty:a1,rightshoulder:b20,rightx:a3,righty:a4,start:b18,x:b0,y:b2,platform:Android,
05000000de2800000511000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Android,
05000000de2800000611000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Android,
+0500000011010000201400000f7e0f00,SteelSeries Nimbus,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,righttrigger:b10,rightx:a2,righty:a3,x:b19,y:b2,platform:Android,
050000004f0400000ed00000fffe3f00,ThrustMaster eSwap PRO Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
5477696e20555342204a6f7973746963,Twin USB Joystick,a:b22,b:b21,back:b28,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b26,leftstick:b30,lefttrigger:b24,leftx:a0,lefty:a1,rightshoulder:b27,rightstick:b31,righttrigger:b25,rightx:a3,righty:a2,start:b29,x:b23,y:b20,platform:Android,
+30623739343039643830333266346439,Valve Steam Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,leftx:a0,lefty:a1,paddle1:b23,paddle2:b24,rightshoulder:b10,rightstick:b8,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+31643365666432386133346639383937,Valve Steam Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,leftx:a0,lefty:a1,paddle1:b23,paddle2:b24,rightshoulder:b10,rightstick:b8,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+30386438313564306161393537333663,Wii Classic,a:b23,b:b22,back:b29,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b27,lefttrigger:b25,leftx:a0,lefty:a1,rightshoulder:b28,righttrigger:b26,rightx:a2,righty:a3,start:b30,x:b24,y:b21,platform:Android,
+33333034646336346339646538643633,Wii Classic,a:b23,b:b22,back:b29,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b27,lefttrigger:b25,leftx:a0,lefty:a1,rightshoulder:b28,righttrigger:b26,rightx:a2,righty:a3,start:b30,x:b24,y:b21,platform:Android,
30306539356238653637313730656134,Wireless HORIPAD Switch Pro Controller,a:b0,b:b1,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b18,x:b19,y:b2,platform:Android,
+30396232393162346330326334636566,Xbox 360,a:b0,b:b1,back:b4,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+38313038323730383864666463383533,Xbox 360,a:b0,b:b1,back:b4,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+65353331386662343338643939643636,Xbox 360,a:b0,b:b1,back:b4,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+65613532386633373963616462363038,Xbox 360,a:b0,b:b1,back:b4,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
050000005e0400008e02000000783f00,Xbox 360 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+33356661323266333733373865656366,Xbox One Controller,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+35623965373264386238353433656138,Xbox One Controller,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
050000005e040000000b000000783f00,Xbox One Elite 2 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Android,
050000005e040000e002000000783f00,Xbox One S Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
050000005e040000ea02000000783f00,Xbox One S Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
050000005e040000fd020000ff7f3f00,Xbox One S Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
050000005e040000e00200000ffe3f00,Xbox One Wireless Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,leftstick:b15,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b16,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b17,y:b2,platform:Android,
-050000005e040000fd020000ffff3f00,Xbox One Wireless Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+050000005e040000fd020000ffff3f00,Xbox One Wireless Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
050000005e040000120b000000783f00,Xbox Series Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Android,
050000005e040000130b0000ffff3f00,Xbox Series Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
65633038363832353634653836396239,Xbox Series Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
050000005e04000091020000ff073f00,Xbox Wireless Controller,a:b0,b:b1,back:b4,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Android,
34356136633366613530316338376136,Xbox Wireless Controller,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b3,leftstick:b15,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b16,righttrigger:a5,rightx:a3,righty:a4,x:b17,y:b2,platform:Android,
+36616131643361333337396261666433,Xbox Wireless Controller,a:b0,b:b1,back:b15,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
050000001727000044310000ffff3f00,XiaoMi Game Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a7,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a6,rightx:a2,righty:a5,start:b6,x:b2,y:b3,platform:Android,
# iOS
@@ -1017,5 +1491,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
05000000de2800000611000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:iOS,
050000005e040000050b0000df070001,Xbox Elite Wireless Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,paddle1:b10,paddle2:b12,paddle3:b11,paddle4:b13,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:iOS,
050000005e040000050b0000ff070001,Xbox Elite Wireless Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,paddle1:b11,paddle2:b13,paddle3:b12,paddle4:b14,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:iOS,
+050000005e040000130b0000df870001,Xbox Series X Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,misc1:b10,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:iOS,
+050000005e040000130b0000ff870001,Xbox Series X Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:iOS,
050000005e040000e0020000df070000,Xbox Wireless Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:iOS,
050000005e040000e0020000ff070000,Xbox Wireless Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:iOS,
diff --git a/core/input/input.cpp b/core/input/input.cpp
index 12028efc56..342ab3b704 100644
--- a/core/input/input.cpp
+++ b/core/input/input.cpp
@@ -35,7 +35,7 @@
#include "core/input/input_map.h"
#include "core/os/os.h"
-static const char *_joy_buttons[JOY_BUTTON_SDL_MAX] = {
+static const char *_joy_buttons[(size_t)JoyButton::SDL_MAX] = {
"a",
"b",
"x",
@@ -59,7 +59,7 @@ static const char *_joy_buttons[JOY_BUTTON_SDL_MAX] = {
"touchpad",
};
-static const char *_joy_axes[JOY_AXIS_SDL_MAX] = {
+static const char *_joy_axes[(size_t)JoyAxis::SDL_MAX] = {
"leftx",
"lefty",
"rightx",
@@ -91,6 +91,7 @@ Input::MouseMode Input::get_mouse_mode() const {
void Input::_bind_methods() {
ClassDB::bind_method(D_METHOD("is_key_pressed", "keycode"), &Input::is_key_pressed);
+ ClassDB::bind_method(D_METHOD("is_physical_key_pressed", "keycode"), &Input::is_physical_key_pressed);
ClassDB::bind_method(D_METHOD("is_mouse_button_pressed", "button"), &Input::is_mouse_button_pressed);
ClassDB::bind_method(D_METHOD("is_joy_button_pressed", "device", "button"), &Input::is_joy_button_pressed);
ClassDB::bind_method(D_METHOD("is_action_pressed", "action", "exact_match"), &Input::is_action_pressed, DEFVAL(false));
@@ -223,13 +224,22 @@ bool Input::is_key_pressed(Key p_keycode) const {
return keys_pressed.has(p_keycode);
}
+bool Input::is_physical_key_pressed(Key p_keycode) const {
+ _THREAD_SAFE_METHOD_
+ return physical_keys_pressed.has(p_keycode);
+}
+
bool Input::is_mouse_button_pressed(MouseButton p_button) const {
_THREAD_SAFE_METHOD_
- return (mouse_button_mask & (1 << (p_button - 1))) != 0;
+ return (mouse_button_mask & mouse_button_to_mask(p_button)) != MouseButton::NONE;
+}
+
+static JoyAxis _combine_device(JoyAxis p_value, int p_device) {
+ return JoyAxis((int)p_value | (p_device << 20));
}
-static int _combine_device(int p_value, int p_device) {
- return p_value | (p_device << 20);
+static JoyButton _combine_device(JoyButton p_value, int p_device) {
+ return JoyButton((int)p_value | (p_device << 20));
}
bool Input::is_joy_button_pressed(int p_device, JoyButton p_button) const {
@@ -338,7 +348,7 @@ Vector2 Input::get_vector(const StringName &p_negative_x, const StringName &p_po
float Input::get_joy_axis(int p_device, JoyAxis p_axis) const {
_THREAD_SAFE_METHOD_
- int c = _combine_device(p_axis, p_device);
+ JoyAxis c = _combine_device(p_axis, p_device);
if (_joy_axis.has(c)) {
return _joy_axis[c];
} else {
@@ -412,11 +422,11 @@ void Input::joy_connection_changed(int p_idx, bool p_connected, String p_name, S
js.mapping = mapping;
} else {
js.connected = false;
- for (int i = 0; i < JOY_BUTTON_MAX; i++) {
- int c = _combine_device(i, p_idx);
+ for (int i = 0; i < (int)JoyButton::MAX; i++) {
+ JoyButton c = _combine_device((JoyButton)i, p_idx);
joy_buttons_pressed.erase(c);
}
- for (int i = 0; i < JOY_AXIS_MAX; i++) {
+ for (int i = 0; i < (int)JoyAxis::MAX; i++) {
set_joy_axis(p_idx, (JoyAxis)i, 0.0f);
}
}
@@ -454,21 +464,28 @@ void Input::_parse_input_event_impl(const Ref<InputEvent> &p_event, bool p_is_em
// require additional handling by this class.
Ref<InputEventKey> k = p_event;
- if (k.is_valid() && !k->is_echo() && k->get_keycode() != 0) {
+ if (k.is_valid() && !k->is_echo() && k->get_keycode() != Key::NONE) {
if (k->is_pressed()) {
keys_pressed.insert(k->get_keycode());
} else {
keys_pressed.erase(k->get_keycode());
}
}
+ if (k.is_valid() && !k->is_echo() && k->get_physical_keycode() != Key::NONE) {
+ if (k->is_pressed()) {
+ physical_keys_pressed.insert(k->get_physical_keycode());
+ } else {
+ physical_keys_pressed.erase(k->get_physical_keycode());
+ }
+ }
Ref<InputEventMouseButton> mb = p_event;
if (mb.is_valid()) {
if (mb->is_pressed()) {
- mouse_button_mask |= (MouseButton)(1 << (mb->get_button_index() - 1));
+ mouse_button_mask |= mouse_button_to_mask(mb->get_button_index());
} else {
- mouse_button_mask &= (MouseButton) ~(1 << (mb->get_button_index() - 1));
+ mouse_button_mask &= ~mouse_button_to_mask(mb->get_button_index());
}
Point2 pos = mb->get_global_position();
@@ -476,7 +493,7 @@ void Input::_parse_input_event_impl(const Ref<InputEvent> &p_event, bool p_is_em
set_mouse_position(pos);
}
- if (event_dispatch_function && emulate_touch_from_mouse && !p_is_emulated && mb->get_button_index() == 1) {
+ if (event_dispatch_function && emulate_touch_from_mouse && !p_is_emulated && mb->get_button_index() == MouseButton::LEFT) {
Ref<InputEventScreenTouch> touch_event;
touch_event.instantiate();
touch_event->set_pressed(mb->is_pressed());
@@ -493,7 +510,7 @@ void Input::_parse_input_event_impl(const Ref<InputEvent> &p_event, bool p_is_em
set_mouse_position(pos);
}
- if (event_dispatch_function && emulate_touch_from_mouse && !p_is_emulated && mm->get_button_mask() & 1) {
+ if (event_dispatch_function && emulate_touch_from_mouse && !p_is_emulated && (mm->get_button_mask() & MouseButton::LEFT) != MouseButton::NONE) {
Ref<InputEventScreenDrag> drag_event;
drag_event.instantiate();
@@ -539,11 +556,11 @@ void Input::_parse_input_event_impl(const Ref<InputEvent> &p_event, bool p_is_em
button_event->set_position(st->get_position());
button_event->set_global_position(st->get_position());
button_event->set_pressed(st->is_pressed());
- button_event->set_button_index(MOUSE_BUTTON_LEFT);
+ button_event->set_button_index(MouseButton::LEFT);
if (st->is_pressed()) {
- button_event->set_button_mask(MouseButton(mouse_button_mask | MOUSE_BUTTON_MASK_LEFT));
+ button_event->set_button_mask(MouseButton(mouse_button_mask | MouseButton::MASK_LEFT));
} else {
- button_event->set_button_mask(MouseButton(mouse_button_mask & ~MOUSE_BUTTON_MASK_LEFT));
+ button_event->set_button_mask(MouseButton(mouse_button_mask & ~MouseButton::MASK_LEFT));
}
_parse_input_event_impl(button_event, true);
@@ -576,7 +593,7 @@ void Input::_parse_input_event_impl(const Ref<InputEvent> &p_event, bool p_is_em
Ref<InputEventJoypadButton> jb = p_event;
if (jb.is_valid()) {
- int c = _combine_device(jb->get_button_index(), jb->get_device());
+ JoyButton c = _combine_device(jb->get_button_index(), jb->get_device());
if (jb->is_pressed()) {
joy_buttons_pressed.insert(c);
@@ -624,7 +641,7 @@ void Input::_parse_input_event_impl(const Ref<InputEvent> &p_event, bool p_is_em
void Input::set_joy_axis(int p_device, JoyAxis p_axis, float p_value) {
_THREAD_SAFE_METHOD_
- int c = _combine_device(p_axis, p_device);
+ JoyAxis c = _combine_device(p_axis, p_device);
_joy_axis[c] = p_value;
}
@@ -692,7 +709,7 @@ Point2 Input::get_last_mouse_speed() const {
return mouse_speed_track.speed;
}
-int Input::get_mouse_button_mask() const {
+MouseButton Input::get_mouse_button_mask() const {
return mouse_button_mask; // do not trust OS implementation, should remove it - OS::get_singleton()->get_mouse_button_state();
}
@@ -710,11 +727,11 @@ Point2i Input::warp_mouse_motion(const Ref<InputEventMouseMotion> &p_motion, con
// detect the warp: if the relative distance is greater than the half of the size of the relevant rect
// (checked per each axis), it will be considered as the consequence of a former pointer warp.
- const Point2i rel_sgn(p_motion->get_relative().x >= 0.0f ? 1 : -1, p_motion->get_relative().y >= 0.0 ? 1 : -1);
+ const Point2i rel_sign(p_motion->get_relative().x >= 0.0f ? 1 : -1, p_motion->get_relative().y >= 0.0 ? 1 : -1);
const Size2i warp_margin = p_rect.size * 0.5f;
const Point2i rel_warped(
- Math::fmod(p_motion->get_relative().x + rel_sgn.x * warp_margin.x, p_rect.size.x) - rel_sgn.x * warp_margin.x,
- Math::fmod(p_motion->get_relative().y + rel_sgn.y * warp_margin.y, p_rect.size.y) - rel_sgn.y * warp_margin.y);
+ Math::fmod(p_motion->get_relative().x + rel_sign.x * warp_margin.x, p_rect.size.x) - rel_sign.x * warp_margin.x,
+ Math::fmod(p_motion->get_relative().y + rel_sign.y * warp_margin.y, p_rect.size.y) - rel_sign.y * warp_margin.y);
const Point2i pos_local = p_motion->get_global_position() - p_rect.position;
const Point2i pos_warped(Math::fposmod(pos_local.x, p_rect.size.x), Math::fposmod(pos_local.y, p_rect.size.y));
@@ -771,8 +788,8 @@ void Input::ensure_touch_mouse_raised() {
button_event->set_position(mouse_pos);
button_event->set_global_position(mouse_pos);
button_event->set_pressed(false);
- button_event->set_button_index(MOUSE_BUTTON_LEFT);
- button_event->set_button_mask(MouseButton(mouse_button_mask & ~MOUSE_BUTTON_MASK_LEFT));
+ button_event->set_button_index(MouseButton::LEFT);
+ button_event->set_button_mask(MouseButton(mouse_button_mask & ~MouseButton::MASK_LEFT));
_parse_input_event_impl(button_event, true);
}
@@ -858,6 +875,7 @@ void Input::release_pressed_events() {
flush_buffered_events(); // this is needed to release actions strengths
keys_pressed.clear();
+ physical_keys_pressed.clear();
joy_buttons_pressed.clear();
_joy_axis.clear();
@@ -876,10 +894,10 @@ void Input::joy_button(int p_device, JoyButton p_button, bool p_pressed) {
_THREAD_SAFE_METHOD_;
Joypad &joy = joy_names[p_device];
//printf("got button %i, mapping is %i\n", p_button, joy.mapping);
- if (joy.last_buttons[p_button] == p_pressed) {
+ if (joy.last_buttons[(size_t)p_button] == p_pressed) {
return;
}
- joy.last_buttons[p_button] = p_pressed;
+ joy.last_buttons[(size_t)p_button] = p_pressed;
if (joy.mapping == -1) {
_button_event(p_device, p_button, p_pressed);
return;
@@ -901,16 +919,16 @@ void Input::joy_button(int p_device, JoyButton p_button, bool p_pressed) {
void Input::joy_axis(int p_device, JoyAxis p_axis, const JoyAxisValue &p_value) {
_THREAD_SAFE_METHOD_;
- ERR_FAIL_INDEX(p_axis, JOY_AXIS_MAX);
+ ERR_FAIL_INDEX((int)p_axis, (int)JoyAxis::MAX);
Joypad &joy = joy_names[p_device];
- if (joy.last_axis[p_axis] == p_value.value) {
+ if (joy.last_axis[(size_t)p_axis] == p_value.value) {
return;
}
//when changing direction quickly, insert fake event to release pending inputmap actions
- float last = joy.last_axis[p_axis];
+ float last = joy.last_axis[(size_t)p_axis];
if (p_value.min == 0 && (last < 0.25 || last > 0.75) && (last - 0.5) * (p_value.value - 0.5) < 0) {
JoyAxisValue jx;
jx.min = p_value.min;
@@ -923,7 +941,7 @@ void Input::joy_axis(int p_device, JoyAxis p_axis, const JoyAxisValue &p_value)
joy_axis(p_device, p_axis, jx);
}
- joy.last_axis[p_axis] = p_value.value;
+ joy.last_axis[(size_t)p_axis] = p_value.value;
float val = p_value.min == 0 ? -1.0f + 2.0f * p_value.value : p_value.value;
if (joy.mapping == -1) {
@@ -935,32 +953,32 @@ void Input::joy_axis(int p_device, JoyAxis p_axis, const JoyAxisValue &p_value)
if (map.type == TYPE_BUTTON) {
bool pressed = map.value > 0.5;
- if (pressed == joy_buttons_pressed.has(_combine_device(map.index, p_device))) {
+ if (pressed == joy_buttons_pressed.has(_combine_device((JoyButton)map.index, p_device))) {
// Button already pressed or released; so ignore.
return;
}
_button_event(p_device, (JoyButton)map.index, pressed);
// Ensure opposite D-Pad button is also released.
- switch (map.index) {
- case JOY_BUTTON_DPAD_UP:
- if (joy_buttons_pressed.has(_combine_device(JOY_BUTTON_DPAD_DOWN, p_device))) {
- _button_event(p_device, JOY_BUTTON_DPAD_DOWN, false);
+ switch ((JoyButton)map.index) {
+ case JoyButton::DPAD_UP:
+ if (joy_buttons_pressed.has(_combine_device(JoyButton::DPAD_DOWN, p_device))) {
+ _button_event(p_device, JoyButton::DPAD_DOWN, false);
}
break;
- case JOY_BUTTON_DPAD_DOWN:
- if (joy_buttons_pressed.has(_combine_device(JOY_BUTTON_DPAD_UP, p_device))) {
- _button_event(p_device, JOY_BUTTON_DPAD_UP, false);
+ case JoyButton::DPAD_DOWN:
+ if (joy_buttons_pressed.has(_combine_device(JoyButton::DPAD_UP, p_device))) {
+ _button_event(p_device, JoyButton::DPAD_UP, false);
}
break;
- case JOY_BUTTON_DPAD_LEFT:
- if (joy_buttons_pressed.has(_combine_device(JOY_BUTTON_DPAD_RIGHT, p_device))) {
- _button_event(p_device, JOY_BUTTON_DPAD_RIGHT, false);
+ case JoyButton::DPAD_LEFT:
+ if (joy_buttons_pressed.has(_combine_device(JoyButton::DPAD_RIGHT, p_device))) {
+ _button_event(p_device, JoyButton::DPAD_RIGHT, false);
}
break;
- case JOY_BUTTON_DPAD_RIGHT:
- if (joy_buttons_pressed.has(_combine_device(JOY_BUTTON_DPAD_LEFT, p_device))) {
- _button_event(p_device, JOY_BUTTON_DPAD_LEFT, false);
+ case JoyButton::DPAD_RIGHT:
+ if (joy_buttons_pressed.has(_combine_device(JoyButton::DPAD_LEFT, p_device))) {
+ _button_event(p_device, JoyButton::DPAD_LEFT, false);
}
break;
default:
@@ -977,27 +995,27 @@ void Input::joy_axis(int p_device, JoyAxis p_axis, const JoyAxisValue &p_value)
//printf("invalid mapping\n");
}
-void Input::joy_hat(int p_device, int p_val) {
+void Input::joy_hat(int p_device, HatMask p_val) {
_THREAD_SAFE_METHOD_;
const Joypad &joy = joy_names[p_device];
- JoyEvent map[HAT_MAX];
+ JoyEvent map[(size_t)HatDir::MAX];
- map[HatDir::HAT_UP].type = TYPE_BUTTON;
- map[HatDir::HAT_UP].index = JOY_BUTTON_DPAD_UP;
- map[HatDir::HAT_UP].value = 0;
+ map[(size_t)HatDir::UP].type = TYPE_BUTTON;
+ map[(size_t)HatDir::UP].index = (int)JoyButton::DPAD_UP;
+ map[(size_t)HatDir::UP].value = 0;
- map[HatDir::HAT_RIGHT].type = TYPE_BUTTON;
- map[HatDir::HAT_RIGHT].index = JOY_BUTTON_DPAD_RIGHT;
- map[HatDir::HAT_RIGHT].value = 0;
+ map[(size_t)HatDir::RIGHT].type = TYPE_BUTTON;
+ map[(size_t)HatDir::RIGHT].index = (int)JoyButton::DPAD_RIGHT;
+ map[(size_t)HatDir::RIGHT].value = 0;
- map[HatDir::HAT_DOWN].type = TYPE_BUTTON;
- map[HatDir::HAT_DOWN].index = JOY_BUTTON_DPAD_DOWN;
- map[HatDir::HAT_DOWN].value = 0;
+ map[(size_t)HatDir::DOWN].type = TYPE_BUTTON;
+ map[(size_t)HatDir::DOWN].index = (int)JoyButton::DPAD_DOWN;
+ map[(size_t)HatDir::DOWN].value = 0;
- map[HatDir::HAT_LEFT].type = TYPE_BUTTON;
- map[HatDir::HAT_LEFT].index = JOY_BUTTON_DPAD_LEFT;
- map[HatDir::HAT_LEFT].value = 0;
+ map[(size_t)HatDir::LEFT].type = TYPE_BUTTON;
+ map[(size_t)HatDir::LEFT].index = (int)JoyButton::DPAD_LEFT;
+ map[(size_t)HatDir::LEFT].value = 0;
if (joy.mapping != -1) {
_get_mapped_hat_events(map_db[joy.mapping], (HatDir)0, map);
@@ -1005,18 +1023,18 @@ void Input::joy_hat(int p_device, int p_val) {
int cur_val = joy_names[p_device].hat_current;
- for (int hat_direction = 0, hat_mask = 1; hat_direction < HAT_MAX; hat_direction++, hat_mask <<= 1) {
- if ((p_val & hat_mask) != (cur_val & hat_mask)) {
+ for (int hat_direction = 0, hat_mask = 1; hat_direction < (int)HatDir::MAX; hat_direction++, hat_mask <<= 1) {
+ if (((int)p_val & hat_mask) != (cur_val & hat_mask)) {
if (map[hat_direction].type == TYPE_BUTTON) {
- _button_event(p_device, (JoyButton)map[hat_direction].index, p_val & hat_mask);
+ _button_event(p_device, (JoyButton)map[hat_direction].index, (int)p_val & hat_mask);
}
if (map[hat_direction].type == TYPE_AXIS) {
- _axis_event(p_device, (JoyAxis)map[hat_direction].index, (p_val & hat_mask) ? map[hat_direction].value : 0.0);
+ _axis_event(p_device, (JoyAxis)map[hat_direction].index, ((int)p_val & hat_mask) ? map[hat_direction].value : 0.0);
}
}
}
- joy_names[p_device].hat_current = p_val;
+ joy_names[p_device].hat_current = (int)p_val;
}
void Input::_button_event(int p_device, JoyButton p_index, bool p_pressed) {
@@ -1049,10 +1067,10 @@ Input::JoyEvent Input::_get_mapped_button_event(const JoyDeviceMapping &mapping,
event.type = binding.outputType;
switch (binding.outputType) {
case TYPE_BUTTON:
- event.index = binding.output.button;
+ event.index = (int)binding.output.button;
return event;
case TYPE_AXIS:
- event.index = binding.output.axis.axis;
+ event.index = (int)binding.output.axis.axis;
switch (binding.output.axis.range) {
case POSITIVE_HALF_AXIS:
event.value = 1;
@@ -1104,7 +1122,7 @@ Input::JoyEvent Input::_get_mapped_axis_event(const JoyDeviceMapping &mapping, J
}
switch (binding.outputType) {
case TYPE_BUTTON:
- event.index = binding.output.button;
+ event.index = (int)binding.output.button;
switch (binding.input.axis.range) {
case POSITIVE_HALF_AXIS:
event.value = shifted_positive_value;
@@ -1121,7 +1139,7 @@ Input::JoyEvent Input::_get_mapped_axis_event(const JoyDeviceMapping &mapping, J
}
return event;
case TYPE_AXIS:
- event.index = binding.output.axis.axis;
+ event.index = (int)binding.output.axis.axis;
event.value = value;
if (binding.output.axis.range != binding.input.axis.range) {
switch (binding.output.axis.range) {
@@ -1150,43 +1168,43 @@ void Input::_get_mapped_hat_events(const JoyDeviceMapping &mapping, HatDir p_hat
for (int i = 0; i < mapping.bindings.size(); i++) {
const JoyBinding binding = mapping.bindings[i];
if (binding.inputType == TYPE_HAT && binding.input.hat.hat == p_hat) {
- int hat_direction;
+ HatDir hat_direction;
switch (binding.input.hat.hat_mask) {
- case HatMask::HAT_MASK_UP:
- hat_direction = HatDir::HAT_UP;
+ case HatMask::UP:
+ hat_direction = HatDir::UP;
break;
- case HatMask::HAT_MASK_RIGHT:
- hat_direction = HatDir::HAT_RIGHT;
+ case HatMask::RIGHT:
+ hat_direction = HatDir::RIGHT;
break;
- case HatMask::HAT_MASK_DOWN:
- hat_direction = HatDir::HAT_DOWN;
+ case HatMask::DOWN:
+ hat_direction = HatDir::DOWN;
break;
- case HatMask::HAT_MASK_LEFT:
- hat_direction = HatDir::HAT_LEFT;
+ case HatMask::LEFT:
+ hat_direction = HatDir::LEFT;
break;
default:
ERR_PRINT_ONCE("Joypad button mapping error.");
continue;
}
- r_events[hat_direction].type = binding.outputType;
+ r_events[(size_t)hat_direction].type = binding.outputType;
switch (binding.outputType) {
case TYPE_BUTTON:
- r_events[hat_direction].index = binding.output.button;
+ r_events[(size_t)hat_direction].index = (int)binding.output.button;
break;
case TYPE_AXIS:
- r_events[hat_direction].index = binding.output.axis.axis;
+ r_events[(size_t)hat_direction].index = (int)binding.output.axis.axis;
switch (binding.output.axis.range) {
case POSITIVE_HALF_AXIS:
- r_events[hat_direction].value = 1;
+ r_events[(size_t)hat_direction].value = 1;
break;
case NEGATIVE_HALF_AXIS:
- r_events[hat_direction].value = -1;
+ r_events[(size_t)hat_direction].value = -1;
break;
case FULL_AXIS:
// It doesn't make sense for a hat direction to map to a full axis,
// but keeping as a default for a trigger with a positive half-axis.
- r_events[hat_direction].value = 1;
+ r_events[(size_t)hat_direction].value = 1;
break;
}
break;
@@ -1198,21 +1216,21 @@ void Input::_get_mapped_hat_events(const JoyDeviceMapping &mapping, HatDir p_hat
}
JoyButton Input::_get_output_button(String output) {
- for (int i = 0; i < JOY_BUTTON_SDL_MAX; i++) {
+ for (int i = 0; i < (int)JoyButton::SDL_MAX; i++) {
if (output == _joy_buttons[i]) {
return JoyButton(i);
}
}
- return JoyButton::JOY_BUTTON_INVALID;
+ return JoyButton::INVALID;
}
JoyAxis Input::_get_output_axis(String output) {
- for (int i = 0; i < JOY_AXIS_SDL_MAX; i++) {
+ for (int i = 0; i < (int)JoyAxis::SDL_MAX; i++) {
if (output == _joy_axes[i]) {
return JoyAxis(i);
}
}
- return JoyAxis::JOY_AXIS_INVALID;
+ return JoyAxis::INVALID;
}
void Input::parse_mapping(String p_mapping) {
@@ -1239,7 +1257,7 @@ void Input::parse_mapping(String p_mapping) {
String output = entry[idx].get_slice(":", 0).replace(" ", "");
String input = entry[idx].get_slice(":", 1).replace(" ", "");
ERR_CONTINUE_MSG(output.length() < 1 || input.length() < 2,
- String(entry[idx] + "\nInvalid device mapping entry: " + entry[idx]));
+ vformat("Invalid device mapping entry \"%s\" in mapping:\n%s", entry[idx], p_mapping));
if (output == "platform" || output == "hint") {
continue;
@@ -1247,7 +1265,8 @@ void Input::parse_mapping(String p_mapping) {
JoyAxisRange output_range = FULL_AXIS;
if (output[0] == '+' || output[0] == '-') {
- ERR_CONTINUE_MSG(output.length() < 2, String(entry[idx] + "\nInvalid output: " + entry[idx]));
+ ERR_CONTINUE_MSG(output.length() < 2,
+ vformat("Invalid output entry \"%s\" in mapping:\n%s", entry[idx], p_mapping));
if (output[0] == '+') {
output_range = POSITIVE_HALF_AXIS;
} else if (output[0] == '-') {
@@ -1272,16 +1291,16 @@ void Input::parse_mapping(String p_mapping) {
JoyButton output_button = _get_output_button(output);
JoyAxis output_axis = _get_output_axis(output);
- ERR_CONTINUE_MSG(output_button == JOY_BUTTON_INVALID && output_axis == JOY_AXIS_INVALID,
- String(entry[idx] + "\nUnrecognised output string: " + output));
- ERR_CONTINUE_MSG(output_button != JOY_BUTTON_INVALID && output_axis != JOY_AXIS_INVALID,
- String("BUG: Output string matched both button and axis: " + output));
+ ERR_CONTINUE_MSG(output_button == JoyButton::INVALID && output_axis == JoyAxis::INVALID,
+ vformat("Unrecognised output string \"%s\" in mapping:\n%s", output, p_mapping));
+ ERR_CONTINUE_MSG(output_button != JoyButton::INVALID && output_axis != JoyAxis::INVALID,
+ vformat("Output string \"%s\" matched both button and axis in mapping:\n%s", output, p_mapping));
JoyBinding binding;
- if (output_button != JOY_BUTTON_INVALID) {
+ if (output_button != JoyButton::INVALID) {
binding.outputType = TYPE_BUTTON;
binding.output.button = output_button;
- } else if (output_axis != JOY_AXIS_INVALID) {
+ } else if (output_axis != JoyAxis::INVALID) {
binding.outputType = TYPE_AXIS;
binding.output.axis.axis = output_axis;
binding.output.axis.range = output_range;
@@ -1300,13 +1319,13 @@ void Input::parse_mapping(String p_mapping) {
break;
case 'h':
ERR_CONTINUE_MSG(input.length() != 4 || input[2] != '.',
- String(entry[idx] + "\nInvalid hat input: " + input));
+ vformat("Invalid had input \"%s\" in mapping:\n%s", input, p_mapping));
binding.inputType = TYPE_HAT;
binding.input.hat.hat = (HatDir)input.substr(1, 1).to_int();
binding.input.hat.hat_mask = static_cast<HatMask>(input.substr(3).to_int());
break;
default:
- ERR_CONTINUE_MSG(true, String(entry[idx] + "\nUnrecognised input string: " + input));
+ ERR_CONTINUE_MSG(true, vformat("Unrecognized input string \"%s\" in mapping:\n%s", input, p_mapping));
}
mapping.bindings.push_back(binding);
@@ -1332,7 +1351,7 @@ void Input::add_joy_mapping(String p_mapping, bool p_update_existing) {
void Input::remove_joy_mapping(String p_guid) {
for (int i = map_db.size() - 1; i >= 0; i--) {
if (p_guid == map_db[i].uid) {
- map_db.remove(i);
+ map_db.remove_at(i);
}
}
for (KeyValue<int, Joypad> &E : joy_names) {
diff --git a/core/input/input.h b/core/input/input.h
index f63138a875..faec654a3c 100644
--- a/core/input/input.h
+++ b/core/input/input.h
@@ -85,11 +85,12 @@ public:
typedef void (*EventDispatchFunc)(const Ref<InputEvent> &p_event);
private:
- int mouse_button_mask = 0;
+ MouseButton mouse_button_mask = MouseButton::NONE;
- Set<int> keys_pressed;
- Set<int> joy_buttons_pressed;
- Map<int, float> _joy_axis;
+ Set<Key> physical_keys_pressed;
+ Set<Key> keys_pressed;
+ Set<JoyButton> joy_buttons_pressed;
+ Map<JoyAxis, float> _joy_axis;
//Map<StringName,int> custom_action_press;
Vector3 gravity;
Vector3 accelerometer;
@@ -133,9 +134,9 @@ private:
StringName name;
StringName uid;
bool connected = false;
- bool last_buttons[JOY_BUTTON_MAX] = { false };
- float last_axis[JOY_AXIS_MAX] = { 0.0f };
- int last_hat = HatMask::HAT_MASK_CENTER;
+ bool last_buttons[(size_t)JoyButton::MAX] = { false };
+ float last_axis[(size_t)JoyAxis::MAX] = { 0.0f };
+ HatMask last_hat = HatMask::CENTER;
int mapping = -1;
int hat_current = 0;
};
@@ -162,7 +163,7 @@ private:
struct JoyEvent {
int type;
- int index;
+ int index; // Can be either JoyAxis or JoyButton.
float value;
};
@@ -206,7 +207,7 @@ private:
JoyEvent _get_mapped_button_event(const JoyDeviceMapping &mapping, JoyButton p_button);
JoyEvent _get_mapped_axis_event(const JoyDeviceMapping &mapping, JoyAxis p_axis, float p_value);
- void _get_mapped_hat_events(const JoyDeviceMapping &mapping, HatDir p_hat, JoyEvent r_events[HAT_MAX]);
+ void _get_mapped_hat_events(const JoyDeviceMapping &mapping, HatDir p_hat, JoyEvent r_events[(size_t)HatDir::MAX]);
JoyButton _get_output_button(String output);
JoyAxis _get_output_axis(String output);
void _button_event(int p_device, JoyButton p_index, bool p_pressed);
@@ -247,6 +248,7 @@ public:
static Input *get_singleton();
bool is_key_pressed(Key p_keycode) const;
+ bool is_physical_key_pressed(Key p_keycode) const;
bool is_mouse_button_pressed(MouseButton p_button) const;
bool is_joy_button_pressed(int p_device, JoyButton p_button) const;
bool is_action_pressed(const StringName &p_action, bool p_exact = false) const;
@@ -273,7 +275,7 @@ public:
Point2 get_mouse_position() const;
Point2 get_last_mouse_speed() const;
- int get_mouse_button_mask() const;
+ MouseButton get_mouse_button_mask() const;
void warp_mouse_position(const Vector2 &p_to);
Point2i warp_mouse_motion(const Ref<InputEventMouseMotion> &p_motion, const Rect2 &p_rect);
@@ -312,7 +314,7 @@ public:
void parse_mapping(String p_mapping);
void joy_button(int p_device, JoyButton p_button, bool p_pressed);
void joy_axis(int p_device, JoyAxis p_axis, const JoyAxisValue &p_value);
- void joy_hat(int p_device, int p_val);
+ void joy_hat(int p_device, HatMask p_val);
void add_joy_mapping(String p_mapping, bool p_update_existing = false);
void remove_joy_mapping(String p_guid);
diff --git a/core/input/input_enums.h b/core/input/input_enums.h
index 4479a85bfe..8601007ac9 100644
--- a/core/input/input_enums.h
+++ b/core/input/input_enums.h
@@ -31,90 +31,106 @@
#ifndef INPUT_ENUMS_H
#define INPUT_ENUMS_H
-enum HatDir {
- HAT_UP = 0,
- HAT_RIGHT = 1,
- HAT_DOWN = 2,
- HAT_LEFT = 3,
- HAT_MAX = 4,
+enum class HatDir {
+ UP = 0,
+ RIGHT = 1,
+ DOWN = 2,
+ LEFT = 3,
+ MAX = 4,
};
-enum HatMask {
- HAT_MASK_CENTER = 0,
- HAT_MASK_UP = 1,
- HAT_MASK_RIGHT = 2,
- HAT_MASK_DOWN = 4,
- HAT_MASK_LEFT = 8,
+enum class HatMask {
+ CENTER = 0,
+ UP = 1,
+ RIGHT = 2,
+ DOWN = 4,
+ LEFT = 8,
};
-enum JoyAxis {
- JOY_AXIS_INVALID = -1,
- JOY_AXIS_LEFT_X = 0,
- JOY_AXIS_LEFT_Y = 1,
- JOY_AXIS_RIGHT_X = 2,
- JOY_AXIS_RIGHT_Y = 3,
- JOY_AXIS_TRIGGER_LEFT = 4,
- JOY_AXIS_TRIGGER_RIGHT = 5,
- JOY_AXIS_SDL_MAX = 6,
- JOY_AXIS_MAX = 10, // OpenVR supports up to 5 Joysticks making a total of 10 axes.
+enum class JoyAxis {
+ INVALID = -1,
+ LEFT_X = 0,
+ LEFT_Y = 1,
+ RIGHT_X = 2,
+ RIGHT_Y = 3,
+ TRIGGER_LEFT = 4,
+ TRIGGER_RIGHT = 5,
+ SDL_MAX = 6,
+ MAX = 10, // OpenVR supports up to 5 Joysticks making a total of 10 axes.
};
-enum JoyButton {
- JOY_BUTTON_INVALID = -1,
- JOY_BUTTON_A = 0,
- JOY_BUTTON_B = 1,
- JOY_BUTTON_X = 2,
- JOY_BUTTON_Y = 3,
- JOY_BUTTON_BACK = 4,
- JOY_BUTTON_GUIDE = 5,
- JOY_BUTTON_START = 6,
- JOY_BUTTON_LEFT_STICK = 7,
- JOY_BUTTON_RIGHT_STICK = 8,
- JOY_BUTTON_LEFT_SHOULDER = 9,
- JOY_BUTTON_RIGHT_SHOULDER = 10,
- JOY_BUTTON_DPAD_UP = 11,
- JOY_BUTTON_DPAD_DOWN = 12,
- JOY_BUTTON_DPAD_LEFT = 13,
- JOY_BUTTON_DPAD_RIGHT = 14,
- JOY_BUTTON_MISC1 = 15,
- JOY_BUTTON_PADDLE1 = 16,
- JOY_BUTTON_PADDLE2 = 17,
- JOY_BUTTON_PADDLE3 = 18,
- JOY_BUTTON_PADDLE4 = 19,
- JOY_BUTTON_TOUCHPAD = 20,
- JOY_BUTTON_SDL_MAX = 21,
- JOY_BUTTON_MAX = 36, // Android supports up to 36 buttons.
+enum class JoyButton {
+ INVALID = -1,
+ A = 0,
+ B = 1,
+ X = 2,
+ Y = 3,
+ BACK = 4,
+ GUIDE = 5,
+ START = 6,
+ LEFT_STICK = 7,
+ RIGHT_STICK = 8,
+ LEFT_SHOULDER = 9,
+ RIGHT_SHOULDER = 10,
+ DPAD_UP = 11,
+ DPAD_DOWN = 12,
+ DPAD_LEFT = 13,
+ DPAD_RIGHT = 14,
+ MISC1 = 15,
+ PADDLE1 = 16,
+ PADDLE2 = 17,
+ PADDLE3 = 18,
+ PADDLE4 = 19,
+ TOUCHPAD = 20,
+ SDL_MAX = 21,
+ MAX = 36, // Android supports up to 36 buttons.
};
-enum MIDIMessage {
- MIDI_MESSAGE_NONE = 0,
- MIDI_MESSAGE_NOTE_OFF = 0x8,
- MIDI_MESSAGE_NOTE_ON = 0x9,
- MIDI_MESSAGE_AFTERTOUCH = 0xA,
- MIDI_MESSAGE_CONTROL_CHANGE = 0xB,
- MIDI_MESSAGE_PROGRAM_CHANGE = 0xC,
- MIDI_MESSAGE_CHANNEL_PRESSURE = 0xD,
- MIDI_MESSAGE_PITCH_BEND = 0xE,
+enum class MIDIMessage {
+ NONE = 0,
+ NOTE_OFF = 0x8,
+ NOTE_ON = 0x9,
+ AFTERTOUCH = 0xA,
+ CONTROL_CHANGE = 0xB,
+ PROGRAM_CHANGE = 0xC,
+ CHANNEL_PRESSURE = 0xD,
+ PITCH_BEND = 0xE,
};
-enum MouseButton {
- MOUSE_BUTTON_NONE = 0,
- MOUSE_BUTTON_LEFT = 1,
- MOUSE_BUTTON_RIGHT = 2,
- MOUSE_BUTTON_MIDDLE = 3,
- MOUSE_BUTTON_WHEEL_UP = 4,
- MOUSE_BUTTON_WHEEL_DOWN = 5,
- MOUSE_BUTTON_WHEEL_LEFT = 6,
- MOUSE_BUTTON_WHEEL_RIGHT = 7,
- MOUSE_BUTTON_XBUTTON1 = 8,
- MOUSE_BUTTON_XBUTTON2 = 9,
- MOUSE_BUTTON_MASK_LEFT = (1 << (MOUSE_BUTTON_LEFT - 1)),
- MOUSE_BUTTON_MASK_RIGHT = (1 << (MOUSE_BUTTON_RIGHT - 1)),
- MOUSE_BUTTON_MASK_MIDDLE = (1 << (MOUSE_BUTTON_MIDDLE - 1)),
- MOUSE_BUTTON_MASK_XBUTTON1 = (1 << (MOUSE_BUTTON_XBUTTON1 - 1)),
- MOUSE_BUTTON_MASK_XBUTTON2 = (1 << (MOUSE_BUTTON_XBUTTON2 - 1)),
+enum class MouseButton {
+ NONE = 0,
+ LEFT = 1,
+ RIGHT = 2,
+ MIDDLE = 3,
+ WHEEL_UP = 4,
+ WHEEL_DOWN = 5,
+ WHEEL_LEFT = 6,
+ WHEEL_RIGHT = 7,
+ MB_XBUTTON1 = 8, // "XBUTTON1" is a reserved word on Windows.
+ MB_XBUTTON2 = 9, // "XBUTTON2" is a reserved word on Windows.
+ MASK_LEFT = (1 << (LEFT - 1)),
+ MASK_RIGHT = (1 << (RIGHT - 1)),
+ MASK_MIDDLE = (1 << (MIDDLE - 1)),
+ MASK_XBUTTON1 = (1 << (MB_XBUTTON1 - 1)),
+ MASK_XBUTTON2 = (1 << (MB_XBUTTON2 - 1)),
};
+inline MouseButton mouse_button_to_mask(MouseButton button) {
+ return MouseButton(1 << ((int)button - 1));
+}
+
+inline MouseButton operator&(MouseButton a, MouseButton b) {
+ return (MouseButton)((int)a & (int)b);
+}
+
+inline MouseButton operator|(MouseButton a, MouseButton b) {
+ return (MouseButton)((int)a | (int)b);
+}
+
+inline MouseButton operator^(MouseButton a, MouseButton b) {
+ return (MouseButton)((int)a ^ (int)b);
+}
+
inline MouseButton &operator|=(MouseButton &a, MouseButton b) {
return (MouseButton &)((int &)a |= (int)b);
}
@@ -123,4 +139,28 @@ inline MouseButton &operator&=(MouseButton &a, MouseButton b) {
return (MouseButton &)((int &)a &= (int)b);
}
+inline MouseButton operator~(MouseButton a) {
+ return (MouseButton)(~(int)a);
+}
+
+inline HatMask operator|(HatMask a, HatMask b) {
+ return (HatMask)((int)a | (int)b);
+}
+
+inline HatMask operator&(HatMask a, HatMask b) {
+ return (HatMask)((int)a & (int)b);
+}
+
+inline HatMask &operator&=(HatMask &a, HatMask b) {
+ return (HatMask &)((int &)a &= (int)b);
+}
+
+inline HatMask &operator|=(HatMask &a, HatMask b) {
+ return (HatMask &)((int &)a |= (int)b);
+}
+
+inline HatMask operator~(HatMask a) {
+ return (HatMask)(~(int)a);
+}
+
#endif // INPUT_ENUMS_H
diff --git a/core/input/input_event.cpp b/core/input/input_event.cpp
index af3190bb17..ccde8838e1 100644
--- a/core/input/input_event.cpp
+++ b/core/input/input_event.cpp
@@ -203,19 +203,19 @@ void InputEventWithModifiers::set_modifiers_from_event(const InputEventWithModif
set_meta_pressed(event->is_meta_pressed());
}
-uint32_t InputEventWithModifiers::get_modifiers_mask() const {
- uint32_t mask = 0;
+Key InputEventWithModifiers::get_modifiers_mask() const {
+ Key mask = Key::NONE;
if (is_ctrl_pressed()) {
- mask |= KEY_MASK_CTRL;
+ mask |= KeyModifierMask::CTRL;
}
if (is_shift_pressed()) {
- mask |= KEY_MASK_SHIFT;
+ mask |= KeyModifierMask::SHIFT;
}
if (is_alt_pressed()) {
- mask |= KEY_MASK_ALT;
+ mask |= KeyModifierMask::ALT;
}
if (is_meta_pressed()) {
- mask |= KEY_MASK_META;
+ mask |= KeyModifierMask::META;
}
return mask;
}
@@ -224,16 +224,16 @@ String InputEventWithModifiers::as_text() const {
Vector<String> mod_names;
if (is_ctrl_pressed()) {
- mod_names.push_back(find_keycode_name(KEY_CTRL));
+ mod_names.push_back(find_keycode_name(Key::CTRL));
}
if (is_shift_pressed()) {
- mod_names.push_back(find_keycode_name(KEY_SHIFT));
+ mod_names.push_back(find_keycode_name(Key::SHIFT));
}
if (is_alt_pressed()) {
- mod_names.push_back(find_keycode_name(KEY_ALT));
+ mod_names.push_back(find_keycode_name(Key::ALT));
}
if (is_meta_pressed()) {
- mod_names.push_back(find_keycode_name(KEY_META));
+ mod_names.push_back(find_keycode_name(Key::META));
}
if (!mod_names.is_empty()) {
@@ -325,12 +325,12 @@ Key InputEventKey::get_physical_keycode() const {
return physical_keycode;
}
-void InputEventKey::set_unicode(uint32_t p_unicode) {
+void InputEventKey::set_unicode(char32_t p_unicode) {
unicode = p_unicode;
emit_changed();
}
-uint32_t InputEventKey::get_unicode() const {
+char32_t InputEventKey::get_unicode() const {
return unicode;
}
@@ -343,18 +343,18 @@ bool InputEventKey::is_echo() const {
return echo;
}
-uint32_t InputEventKey::get_keycode_with_modifiers() const {
+Key InputEventKey::get_keycode_with_modifiers() const {
return keycode | get_modifiers_mask();
}
-uint32_t InputEventKey::get_physical_keycode_with_modifiers() const {
+Key InputEventKey::get_physical_keycode_with_modifiers() const {
return physical_keycode | get_modifiers_mask();
}
String InputEventKey::as_text() const {
String kc;
- if (keycode == 0) {
+ if (keycode == Key::NONE) {
kc = keycode_get_string(physical_keycode) + " (" + RTR("Physical") + ")";
} else {
kc = keycode_get_string(keycode);
@@ -374,11 +374,11 @@ String InputEventKey::to_string() {
String kc = "";
String physical = "false";
- if (keycode == 0) {
- kc = itos(physical_keycode) + " (" + keycode_get_string(physical_keycode) + ")";
+ if (keycode == Key::NONE) {
+ kc = itos((int64_t)physical_keycode) + " (" + keycode_get_string(physical_keycode) + ")";
physical = "true";
} else {
- kc = itos(keycode) + " (" + keycode_get_string(keycode) + ")";
+ kc = itos((int64_t)keycode) + " (" + keycode_get_string(keycode) + ")";
}
String mods = InputEventWithModifiers::as_text();
@@ -390,22 +390,22 @@ String InputEventKey::to_string() {
Ref<InputEventKey> InputEventKey::create_reference(Key p_keycode) {
Ref<InputEventKey> ie;
ie.instantiate();
- ie->set_keycode(p_keycode & KEY_CODE_MASK);
- ie->set_unicode(p_keycode & KEY_CODE_MASK);
+ ie->set_keycode(p_keycode & KeyModifierMask::CODE_MASK);
+ ie->set_unicode(char32_t(p_keycode & KeyModifierMask::CODE_MASK));
- if (p_keycode & KEY_MASK_SHIFT) {
+ if ((p_keycode & KeyModifierMask::SHIFT) != Key::NONE) {
ie->set_shift_pressed(true);
}
- if (p_keycode & KEY_MASK_ALT) {
+ if ((p_keycode & KeyModifierMask::ALT) != Key::NONE) {
ie->set_alt_pressed(true);
}
- if (p_keycode & KEY_MASK_CTRL) {
+ if ((p_keycode & KeyModifierMask::CTRL) != Key::NONE) {
ie->set_ctrl_pressed(true);
}
- if (p_keycode & KEY_MASK_CMD) {
+ if ((p_keycode & KeyModifierMask::CMD) != Key::NONE) {
ie->set_command_pressed(true);
}
- if (p_keycode & KEY_MASK_META) {
+ if ((p_keycode & KeyModifierMask::META) != Key::NONE) {
ie->set_meta_pressed(true);
}
@@ -419,14 +419,14 @@ bool InputEventKey::action_match(const Ref<InputEvent> &p_event, bool *p_pressed
}
bool match = false;
- if (get_keycode() == 0) {
- uint32_t code = get_physical_keycode_with_modifiers();
- uint32_t event_code = key->get_physical_keycode_with_modifiers();
+ if (get_keycode() == Key::NONE) {
+ Key code = get_physical_keycode_with_modifiers();
+ Key event_code = key->get_physical_keycode_with_modifiers();
match = get_physical_keycode() == key->get_physical_keycode() && (!key->is_pressed() || (code & event_code) == code);
} else {
- uint32_t code = get_keycode_with_modifiers();
- uint32_t event_code = key->get_keycode_with_modifiers();
+ Key code = get_keycode_with_modifiers();
+ Key event_code = key->get_keycode_with_modifiers();
match = get_keycode() == key->get_keycode() && (!key->is_pressed() || (code & event_code) == code);
}
@@ -452,7 +452,7 @@ bool InputEventKey::is_match(const Ref<InputEvent> &p_event, bool p_exact_match)
return false;
}
- if (keycode == 0) {
+ if (keycode == Key::NONE) {
return physical_keycode == key->physical_keycode &&
(!p_exact_match || get_modifiers_mask() == key->get_modifiers_mask());
} else {
@@ -487,12 +487,12 @@ void InputEventKey::_bind_methods() {
///////////////////////////////////
-void InputEventMouse::set_button_mask(int p_mask) {
+void InputEventMouse::set_button_mask(MouseButton p_mask) {
button_mask = p_mask;
emit_changed();
}
-int InputEventMouse::get_button_mask() const {
+MouseButton InputEventMouse::get_button_mask() const {
return button_mask;
}
@@ -637,21 +637,21 @@ String InputEventMouseButton::as_text() const {
String full_string = mods_text == "" ? "" : mods_text + "+";
// Button
- int idx = get_button_index();
+ MouseButton idx = get_button_index();
switch (idx) {
- case MOUSE_BUTTON_LEFT:
- case MOUSE_BUTTON_RIGHT:
- case MOUSE_BUTTON_MIDDLE:
- case MOUSE_BUTTON_WHEEL_UP:
- case MOUSE_BUTTON_WHEEL_DOWN:
- case MOUSE_BUTTON_WHEEL_LEFT:
- case MOUSE_BUTTON_WHEEL_RIGHT:
- case MOUSE_BUTTON_XBUTTON1:
- case MOUSE_BUTTON_XBUTTON2:
- full_string += RTR(_mouse_button_descriptions[idx - 1]); // button index starts from 1, array index starts from 0, so subtract 1
+ case MouseButton::LEFT:
+ case MouseButton::RIGHT:
+ case MouseButton::MIDDLE:
+ case MouseButton::WHEEL_UP:
+ case MouseButton::WHEEL_DOWN:
+ case MouseButton::WHEEL_LEFT:
+ case MouseButton::WHEEL_RIGHT:
+ case MouseButton::MB_XBUTTON1:
+ case MouseButton::MB_XBUTTON2:
+ full_string += RTR(_mouse_button_descriptions[(size_t)idx - 1]); // button index starts from 1, array index starts from 0, so subtract 1
break;
default:
- full_string += RTR("Button") + " #" + itos(idx);
+ full_string += RTR("Button") + " #" + itos((int64_t)idx);
break;
}
@@ -667,20 +667,20 @@ String InputEventMouseButton::to_string() {
String p = is_pressed() ? "true" : "false";
String d = double_click ? "true" : "false";
- int idx = get_button_index();
- String button_string = itos(idx);
+ MouseButton idx = get_button_index();
+ String button_string = itos((int64_t)idx);
switch (idx) {
- case MOUSE_BUTTON_LEFT:
- case MOUSE_BUTTON_RIGHT:
- case MOUSE_BUTTON_MIDDLE:
- case MOUSE_BUTTON_WHEEL_UP:
- case MOUSE_BUTTON_WHEEL_DOWN:
- case MOUSE_BUTTON_WHEEL_LEFT:
- case MOUSE_BUTTON_WHEEL_RIGHT:
- case MOUSE_BUTTON_XBUTTON1:
- case MOUSE_BUTTON_XBUTTON2:
- button_string += " (" + RTR(_mouse_button_descriptions[idx - 1]) + ")"; // button index starts from 1, array index starts from 0, so subtract 1
+ case MouseButton::LEFT:
+ case MouseButton::RIGHT:
+ case MouseButton::MIDDLE:
+ case MouseButton::WHEEL_UP:
+ case MouseButton::WHEEL_DOWN:
+ case MouseButton::WHEEL_LEFT:
+ case MouseButton::WHEEL_RIGHT:
+ case MouseButton::MB_XBUTTON1:
+ case MouseButton::MB_XBUTTON2:
+ button_string += " (" + RTR(_mouse_button_descriptions[(size_t)idx - 1]) + ")"; // button index starts from 1, array index starts from 0, so subtract 1
break;
default:
break;
@@ -778,23 +778,23 @@ String InputEventMouseMotion::as_text() const {
}
String InputEventMouseMotion::to_string() {
- int button_mask = get_button_mask();
- String button_mask_string = itos(button_mask);
- switch (get_button_mask()) {
- case MOUSE_BUTTON_MASK_LEFT:
- button_mask_string += " (" + RTR(_mouse_button_descriptions[MOUSE_BUTTON_LEFT - 1]) + ")";
+ MouseButton button_mask = get_button_mask();
+ String button_mask_string = itos((int64_t)button_mask);
+ switch (button_mask) {
+ case MouseButton::MASK_LEFT:
+ button_mask_string += " (" + RTR(_mouse_button_descriptions[(size_t)MouseButton::LEFT - 1]) + ")";
break;
- case MOUSE_BUTTON_MASK_MIDDLE:
- button_mask_string += " (" + RTR(_mouse_button_descriptions[MOUSE_BUTTON_MIDDLE - 1]) + ")";
+ case MouseButton::MASK_MIDDLE:
+ button_mask_string += " (" + RTR(_mouse_button_descriptions[(size_t)MouseButton::MIDDLE - 1]) + ")";
break;
- case MOUSE_BUTTON_MASK_RIGHT:
- button_mask_string += " (" + RTR(_mouse_button_descriptions[MOUSE_BUTTON_RIGHT - 1]) + ")";
+ case MouseButton::MASK_RIGHT:
+ button_mask_string += " (" + RTR(_mouse_button_descriptions[(size_t)MouseButton::RIGHT - 1]) + ")";
break;
- case MOUSE_BUTTON_MASK_XBUTTON1:
- button_mask_string += " (" + RTR(_mouse_button_descriptions[MOUSE_BUTTON_XBUTTON1 - 1]) + ")";
+ case MouseButton::MASK_XBUTTON1:
+ button_mask_string += " (" + RTR(_mouse_button_descriptions[(size_t)MouseButton::MB_XBUTTON1 - 1]) + ")";
break;
- case MOUSE_BUTTON_MASK_XBUTTON2:
- button_mask_string += " (" + RTR(_mouse_button_descriptions[MOUSE_BUTTON_XBUTTON2 - 1]) + ")";
+ case MouseButton::MASK_XBUTTON2:
+ button_mask_string += " (" + RTR(_mouse_button_descriptions[(size_t)MouseButton::MB_XBUTTON2 - 1]) + ")";
break;
default:
break;
@@ -869,7 +869,7 @@ void InputEventMouseMotion::_bind_methods() {
///////////////////////////////////
void InputEventJoypadMotion::set_axis(JoyAxis p_axis) {
- ERR_FAIL_INDEX(p_axis, JOY_AXIS_MAX);
+ ERR_FAIL_COND(p_axis < JoyAxis::LEFT_X || p_axis > JoyAxis::MAX);
axis = p_axis;
emit_changed();
@@ -938,7 +938,7 @@ bool InputEventJoypadMotion::is_match(const Ref<InputEvent> &p_event, bool p_exa
(!p_exact_match || ((axis_value < 0) == (jm->axis_value < 0)));
}
-static const char *_joy_axis_descriptions[JOY_AXIS_MAX] = {
+static const char *_joy_axis_descriptions[(size_t)JoyAxis::MAX] = {
TTRC("Left Stick X-Axis, Joystick 0 X-Axis"),
TTRC("Left Stick Y-Axis, Joystick 0 Y-Axis"),
TTRC("Right Stick X-Axis, Joystick 1 X-Axis"),
@@ -952,7 +952,7 @@ static const char *_joy_axis_descriptions[JOY_AXIS_MAX] = {
};
String InputEventJoypadMotion::as_text() const {
- String desc = axis < JOY_AXIS_MAX ? RTR(_joy_axis_descriptions[axis]) : TTR("Unknown Joypad Axis");
+ String desc = axis < JoyAxis::MAX ? RTR(_joy_axis_descriptions[(size_t)axis]) : TTR("Unknown Joypad Axis");
return vformat(TTR("Joypad Motion on Axis %d (%s) with Value %.2f"), axis, desc, axis_value);
}
@@ -1032,7 +1032,7 @@ bool InputEventJoypadButton::is_match(const Ref<InputEvent> &p_event, bool p_exa
return button_index == button->button_index;
}
-static const char *_joy_button_descriptions[JOY_BUTTON_SDL_MAX] = {
+static const char *_joy_button_descriptions[(size_t)JoyButton::SDL_MAX] = {
TTRC("Bottom Action, Sony Cross, Xbox A, Nintendo B"),
TTRC("Right Action, Sony Circle, Xbox B, Nintendo A"),
TTRC("Left Action, Sony Square, Xbox X, Nintendo Y"),
@@ -1057,10 +1057,10 @@ static const char *_joy_button_descriptions[JOY_BUTTON_SDL_MAX] = {
};
String InputEventJoypadButton::as_text() const {
- String text = "Joypad Button " + itos(button_index);
+ String text = "Joypad Button " + itos((int64_t)button_index);
- if (button_index >= 0 && button_index < JOY_BUTTON_SDL_MAX) {
- text += vformat(" (%s)", _joy_button_descriptions[button_index]);
+ if (button_index > JoyButton::INVALID && button_index < JoyButton::SDL_MAX) {
+ text += vformat(" (%s)", _joy_button_descriptions[(size_t)button_index]);
}
if (pressure != 0) {
@@ -1506,7 +1506,7 @@ int InputEventMIDI::get_controller_value() const {
}
String InputEventMIDI::as_text() const {
- return vformat(RTR("MIDI Input on Channel=%s Message=%s"), itos(channel), itos(message));
+ return vformat(RTR("MIDI Input on Channel=%s Message=%s"), itos(channel), itos((int64_t)message));
}
String InputEventMIDI::to_string() {
diff --git a/core/input/input_event.h b/core/input/input_event.h
index 3fc8078a09..70046e4491 100644
--- a/core/input/input_event.h
+++ b/core/input/input_event.h
@@ -151,7 +151,7 @@ public:
void set_modifiers_from_event(const InputEventWithModifiers *event);
- uint32_t get_modifiers_mask() const;
+ Key get_modifiers_mask() const;
virtual String as_text() const override;
virtual String to_string() override;
@@ -164,8 +164,8 @@ class InputEventKey : public InputEventWithModifiers {
bool pressed = false; /// otherwise release
- Key keycode = KEY_NONE; // Key enum, without modifier masks.
- Key physical_keycode = KEY_NONE;
+ Key keycode = Key::NONE; // Key enum, without modifier masks.
+ Key physical_keycode = Key::NONE;
uint32_t unicode = 0; ///unicode
bool echo = false; /// true if this is an echo key
@@ -183,14 +183,14 @@ public:
void set_physical_keycode(Key p_keycode);
Key get_physical_keycode() const;
- void set_unicode(uint32_t p_unicode);
- uint32_t get_unicode() const;
+ void set_unicode(char32_t p_unicode);
+ char32_t get_unicode() const;
void set_echo(bool p_enable);
virtual bool is_echo() const override;
- uint32_t get_keycode_with_modifiers() const;
- uint32_t get_physical_keycode_with_modifiers() const;
+ Key get_keycode_with_modifiers() const;
+ Key get_physical_keycode_with_modifiers() const;
virtual bool action_match(const Ref<InputEvent> &p_event, bool *p_pressed, float *p_strength, float *p_raw_strength, float p_deadzone) const override;
virtual bool is_match(const Ref<InputEvent> &p_event, bool p_exact_match = true) const override;
@@ -208,7 +208,7 @@ public:
class InputEventMouse : public InputEventWithModifiers {
GDCLASS(InputEventMouse, InputEventWithModifiers);
- int button_mask = 0;
+ MouseButton button_mask = MouseButton::NONE;
Vector2 pos;
Vector2 global_pos;
@@ -217,8 +217,8 @@ protected:
static void _bind_methods();
public:
- void set_button_mask(int p_mask);
- int get_button_mask() const;
+ void set_button_mask(MouseButton p_mask);
+ MouseButton get_button_mask() const;
void set_position(const Vector2 &p_pos);
Vector2 get_position() const;
@@ -233,7 +233,7 @@ class InputEventMouseButton : public InputEventMouse {
GDCLASS(InputEventMouseButton, InputEventMouse);
float factor = 1;
- MouseButton button_index = MOUSE_BUTTON_NONE;
+ MouseButton button_index = MouseButton::NONE;
bool pressed = false; //otherwise released
bool double_click = false; //last even less than double click time
@@ -501,7 +501,7 @@ class InputEventMIDI : public InputEvent {
GDCLASS(InputEventMIDI, InputEvent);
int channel = 0;
- MIDIMessage message = MIDI_MESSAGE_NONE;
+ MIDIMessage message = MIDIMessage::NONE;
int pitch = 0;
int velocity = 0;
int instrument = 0;
diff --git a/core/input/input_map.cpp b/core/input/input_map.cpp
index 1ec4299093..84e1313756 100644
--- a/core/input/input_map.cpp
+++ b/core/input/input_map.cpp
@@ -381,320 +381,320 @@ const OrderedHashMap<String, List<Ref<InputEvent>>> &InputMap::get_builtins() {
}
List<Ref<InputEvent>> inputs;
- inputs.push_back(InputEventKey::create_reference(KEY_ENTER));
- inputs.push_back(InputEventKey::create_reference(KEY_KP_ENTER));
- inputs.push_back(InputEventKey::create_reference(KEY_SPACE));
+ inputs.push_back(InputEventKey::create_reference(Key::ENTER));
+ inputs.push_back(InputEventKey::create_reference(Key::KP_ENTER));
+ inputs.push_back(InputEventKey::create_reference(Key::SPACE));
default_builtin_cache.insert("ui_accept", inputs);
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventJoypadButton::create_reference(JOY_BUTTON_Y));
- inputs.push_back(InputEventKey::create_reference(KEY_SPACE));
+ inputs.push_back(InputEventJoypadButton::create_reference(JoyButton::Y));
+ inputs.push_back(InputEventKey::create_reference(Key::SPACE));
default_builtin_cache.insert("ui_select", inputs);
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_ESCAPE));
+ inputs.push_back(InputEventKey::create_reference(Key::ESCAPE));
default_builtin_cache.insert("ui_cancel", inputs);
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_TAB));
+ inputs.push_back(InputEventKey::create_reference(Key::TAB));
default_builtin_cache.insert("ui_focus_next", inputs);
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_TAB | KEY_MASK_SHIFT));
+ inputs.push_back(InputEventKey::create_reference(Key::TAB | KeyModifierMask::SHIFT));
default_builtin_cache.insert("ui_focus_prev", inputs);
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_LEFT));
- inputs.push_back(InputEventJoypadButton::create_reference(JOY_BUTTON_DPAD_LEFT));
+ inputs.push_back(InputEventKey::create_reference(Key::LEFT));
+ inputs.push_back(InputEventJoypadButton::create_reference(JoyButton::DPAD_LEFT));
default_builtin_cache.insert("ui_left", inputs);
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_RIGHT));
- inputs.push_back(InputEventJoypadButton::create_reference(JOY_BUTTON_DPAD_RIGHT));
+ inputs.push_back(InputEventKey::create_reference(Key::RIGHT));
+ inputs.push_back(InputEventJoypadButton::create_reference(JoyButton::DPAD_RIGHT));
default_builtin_cache.insert("ui_right", inputs);
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_UP));
- inputs.push_back(InputEventJoypadButton::create_reference(JOY_BUTTON_DPAD_UP));
+ inputs.push_back(InputEventKey::create_reference(Key::UP));
+ inputs.push_back(InputEventJoypadButton::create_reference(JoyButton::DPAD_UP));
default_builtin_cache.insert("ui_up", inputs);
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_DOWN));
- inputs.push_back(InputEventJoypadButton::create_reference(JOY_BUTTON_DPAD_DOWN));
+ inputs.push_back(InputEventKey::create_reference(Key::DOWN));
+ inputs.push_back(InputEventJoypadButton::create_reference(JoyButton::DPAD_DOWN));
default_builtin_cache.insert("ui_down", inputs);
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_PAGEUP));
+ inputs.push_back(InputEventKey::create_reference(Key::PAGEUP));
default_builtin_cache.insert("ui_page_up", inputs);
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_PAGEDOWN));
+ inputs.push_back(InputEventKey::create_reference(Key::PAGEDOWN));
default_builtin_cache.insert("ui_page_down", inputs);
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_HOME));
+ inputs.push_back(InputEventKey::create_reference(Key::HOME));
default_builtin_cache.insert("ui_home", inputs);
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_END));
+ inputs.push_back(InputEventKey::create_reference(Key::END));
default_builtin_cache.insert("ui_end", inputs);
// ///// UI basic Shortcuts /////
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_X | KEY_MASK_CMD));
- inputs.push_back(InputEventKey::create_reference(KEY_DELETE | KEY_MASK_SHIFT));
+ inputs.push_back(InputEventKey::create_reference(Key::X | KeyModifierMask::CMD));
+ inputs.push_back(InputEventKey::create_reference(Key::KEY_DELETE | KeyModifierMask::SHIFT));
default_builtin_cache.insert("ui_cut", inputs);
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_C | KEY_MASK_CMD));
- inputs.push_back(InputEventKey::create_reference(KEY_INSERT | KEY_MASK_CMD));
+ inputs.push_back(InputEventKey::create_reference(Key::C | KeyModifierMask::CMD));
+ inputs.push_back(InputEventKey::create_reference(Key::INSERT | KeyModifierMask::CMD));
default_builtin_cache.insert("ui_copy", inputs);
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_V | KEY_MASK_CMD));
- inputs.push_back(InputEventKey::create_reference(KEY_INSERT | KEY_MASK_SHIFT));
+ inputs.push_back(InputEventKey::create_reference(Key::V | KeyModifierMask::CMD));
+ inputs.push_back(InputEventKey::create_reference(Key::INSERT | KeyModifierMask::SHIFT));
default_builtin_cache.insert("ui_paste", inputs);
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_Z | KEY_MASK_CMD));
+ inputs.push_back(InputEventKey::create_reference(Key::Z | KeyModifierMask::CMD));
default_builtin_cache.insert("ui_undo", inputs);
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_Z | KEY_MASK_CMD | KEY_MASK_SHIFT));
- inputs.push_back(InputEventKey::create_reference(KEY_Y | KEY_MASK_CMD));
+ inputs.push_back(InputEventKey::create_reference(Key::Z | KeyModifierMask::CMD | KeyModifierMask::SHIFT));
+ inputs.push_back(InputEventKey::create_reference(Key::Y | KeyModifierMask::CMD));
default_builtin_cache.insert("ui_redo", inputs);
// ///// UI Text Input Shortcuts /////
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_SPACE | KEY_MASK_CTRL));
+ inputs.push_back(InputEventKey::create_reference(Key::SPACE | KeyModifierMask::CTRL));
default_builtin_cache.insert("ui_text_completion_query", inputs);
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_ENTER));
- inputs.push_back(InputEventKey::create_reference(KEY_KP_ENTER));
+ inputs.push_back(InputEventKey::create_reference(Key::ENTER));
+ inputs.push_back(InputEventKey::create_reference(Key::KP_ENTER));
default_builtin_cache.insert("ui_text_completion_accept", inputs);
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_TAB));
+ inputs.push_back(InputEventKey::create_reference(Key::TAB));
default_builtin_cache.insert("ui_text_completion_replace", inputs);
// Newlines
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_ENTER));
- inputs.push_back(InputEventKey::create_reference(KEY_KP_ENTER));
+ inputs.push_back(InputEventKey::create_reference(Key::ENTER));
+ inputs.push_back(InputEventKey::create_reference(Key::KP_ENTER));
default_builtin_cache.insert("ui_text_newline", inputs);
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_ENTER | KEY_MASK_CMD));
- inputs.push_back(InputEventKey::create_reference(KEY_KP_ENTER | KEY_MASK_CMD));
+ inputs.push_back(InputEventKey::create_reference(Key::ENTER | KeyModifierMask::CMD));
+ inputs.push_back(InputEventKey::create_reference(Key::KP_ENTER | KeyModifierMask::CMD));
default_builtin_cache.insert("ui_text_newline_blank", inputs);
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_ENTER | KEY_MASK_SHIFT | KEY_MASK_CMD));
- inputs.push_back(InputEventKey::create_reference(KEY_KP_ENTER | KEY_MASK_SHIFT | KEY_MASK_CMD));
+ inputs.push_back(InputEventKey::create_reference(Key::ENTER | KeyModifierMask::SHIFT | KeyModifierMask::CMD));
+ inputs.push_back(InputEventKey::create_reference(Key::KP_ENTER | KeyModifierMask::SHIFT | KeyModifierMask::CMD));
default_builtin_cache.insert("ui_text_newline_above", inputs);
// Indentation
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_TAB));
+ inputs.push_back(InputEventKey::create_reference(Key::TAB));
default_builtin_cache.insert("ui_text_indent", inputs);
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_TAB | KEY_MASK_SHIFT));
+ inputs.push_back(InputEventKey::create_reference(Key::TAB | KeyModifierMask::SHIFT));
default_builtin_cache.insert("ui_text_dedent", inputs);
// Text Backspace and Delete
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_BACKSPACE));
- inputs.push_back(InputEventKey::create_reference(KEY_BACKSPACE | KEY_MASK_SHIFT));
+ inputs.push_back(InputEventKey::create_reference(Key::BACKSPACE));
+ inputs.push_back(InputEventKey::create_reference(Key::BACKSPACE | KeyModifierMask::SHIFT));
default_builtin_cache.insert("ui_text_backspace", inputs);
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_BACKSPACE | KEY_MASK_CMD));
+ inputs.push_back(InputEventKey::create_reference(Key::BACKSPACE | KeyModifierMask::CMD));
default_builtin_cache.insert("ui_text_backspace_word", inputs);
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_BACKSPACE | KEY_MASK_ALT));
+ inputs.push_back(InputEventKey::create_reference(Key::BACKSPACE | KeyModifierMask::ALT));
default_builtin_cache.insert("ui_text_backspace_word.macos", inputs);
inputs = List<Ref<InputEvent>>();
default_builtin_cache.insert("ui_text_backspace_all_to_left", inputs);
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_BACKSPACE | KEY_MASK_CMD));
+ inputs.push_back(InputEventKey::create_reference(Key::BACKSPACE | KeyModifierMask::CMD));
default_builtin_cache.insert("ui_text_backspace_all_to_left.macos", inputs);
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_DELETE));
+ inputs.push_back(InputEventKey::create_reference(Key::KEY_DELETE));
default_builtin_cache.insert("ui_text_delete", inputs);
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_DELETE | KEY_MASK_CMD));
+ inputs.push_back(InputEventKey::create_reference(Key::KEY_DELETE | KeyModifierMask::CMD));
default_builtin_cache.insert("ui_text_delete_word", inputs);
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_DELETE | KEY_MASK_ALT));
+ inputs.push_back(InputEventKey::create_reference(Key::KEY_DELETE | KeyModifierMask::ALT));
default_builtin_cache.insert("ui_text_delete_word.macos", inputs);
inputs = List<Ref<InputEvent>>();
default_builtin_cache.insert("ui_text_delete_all_to_right", inputs);
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_DELETE | KEY_MASK_CMD));
+ inputs.push_back(InputEventKey::create_reference(Key::KEY_DELETE | KeyModifierMask::CMD));
default_builtin_cache.insert("ui_text_delete_all_to_right.macos", inputs);
// Text Caret Movement Left/Right
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_LEFT));
+ inputs.push_back(InputEventKey::create_reference(Key::LEFT));
default_builtin_cache.insert("ui_text_caret_left", inputs);
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_LEFT | KEY_MASK_CMD));
+ inputs.push_back(InputEventKey::create_reference(Key::LEFT | KeyModifierMask::CMD));
default_builtin_cache.insert("ui_text_caret_word_left", inputs);
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_LEFT | KEY_MASK_ALT));
+ inputs.push_back(InputEventKey::create_reference(Key::LEFT | KeyModifierMask::ALT));
default_builtin_cache.insert("ui_text_caret_word_left.macos", inputs);
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_RIGHT));
+ inputs.push_back(InputEventKey::create_reference(Key::RIGHT));
default_builtin_cache.insert("ui_text_caret_right", inputs);
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_RIGHT | KEY_MASK_CMD));
+ inputs.push_back(InputEventKey::create_reference(Key::RIGHT | KeyModifierMask::CMD));
default_builtin_cache.insert("ui_text_caret_word_right", inputs);
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_RIGHT | KEY_MASK_ALT));
+ inputs.push_back(InputEventKey::create_reference(Key::RIGHT | KeyModifierMask::ALT));
default_builtin_cache.insert("ui_text_caret_word_right.macos", inputs);
// Text Caret Movement Up/Down
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_UP));
+ inputs.push_back(InputEventKey::create_reference(Key::UP));
default_builtin_cache.insert("ui_text_caret_up", inputs);
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_DOWN));
+ inputs.push_back(InputEventKey::create_reference(Key::DOWN));
default_builtin_cache.insert("ui_text_caret_down", inputs);
// Text Caret Movement Line Start/End
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_HOME));
+ inputs.push_back(InputEventKey::create_reference(Key::HOME));
default_builtin_cache.insert("ui_text_caret_line_start", inputs);
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_A | KEY_MASK_CTRL));
- inputs.push_back(InputEventKey::create_reference(KEY_LEFT | KEY_MASK_CMD));
+ inputs.push_back(InputEventKey::create_reference(Key::A | KeyModifierMask::CTRL));
+ inputs.push_back(InputEventKey::create_reference(Key::LEFT | KeyModifierMask::CMD));
default_builtin_cache.insert("ui_text_caret_line_start.macos", inputs);
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_END));
+ inputs.push_back(InputEventKey::create_reference(Key::END));
default_builtin_cache.insert("ui_text_caret_line_end", inputs);
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_E | KEY_MASK_CTRL));
- inputs.push_back(InputEventKey::create_reference(KEY_RIGHT | KEY_MASK_CMD));
+ inputs.push_back(InputEventKey::create_reference(Key::E | KeyModifierMask::CTRL));
+ inputs.push_back(InputEventKey::create_reference(Key::RIGHT | KeyModifierMask::CMD));
default_builtin_cache.insert("ui_text_caret_line_end.macos", inputs);
// Text Caret Movement Page Up/Down
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_PAGEUP));
+ inputs.push_back(InputEventKey::create_reference(Key::PAGEUP));
default_builtin_cache.insert("ui_text_caret_page_up", inputs);
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_PAGEDOWN));
+ inputs.push_back(InputEventKey::create_reference(Key::PAGEDOWN));
default_builtin_cache.insert("ui_text_caret_page_down", inputs);
// Text Caret Movement Document Start/End
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_HOME | KEY_MASK_CMD));
+ inputs.push_back(InputEventKey::create_reference(Key::HOME | KeyModifierMask::CMD));
default_builtin_cache.insert("ui_text_caret_document_start", inputs);
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_UP | KEY_MASK_CMD));
+ inputs.push_back(InputEventKey::create_reference(Key::UP | KeyModifierMask::CMD));
default_builtin_cache.insert("ui_text_caret_document_start.macos", inputs);
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_END | KEY_MASK_CMD));
+ inputs.push_back(InputEventKey::create_reference(Key::END | KeyModifierMask::CMD));
default_builtin_cache.insert("ui_text_caret_document_end", inputs);
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_DOWN | KEY_MASK_CMD));
+ inputs.push_back(InputEventKey::create_reference(Key::DOWN | KeyModifierMask::CMD));
default_builtin_cache.insert("ui_text_caret_document_end.macos", inputs);
// Text Scrolling
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_UP | KEY_MASK_CMD));
+ inputs.push_back(InputEventKey::create_reference(Key::UP | KeyModifierMask::CMD));
default_builtin_cache.insert("ui_text_scroll_up", inputs);
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_UP | KEY_MASK_CMD | KEY_MASK_ALT));
+ inputs.push_back(InputEventKey::create_reference(Key::UP | KeyModifierMask::CMD | KeyModifierMask::ALT));
default_builtin_cache.insert("ui_text_scroll_up.macos", inputs);
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_DOWN | KEY_MASK_CMD));
+ inputs.push_back(InputEventKey::create_reference(Key::DOWN | KeyModifierMask::CMD));
default_builtin_cache.insert("ui_text_scroll_down", inputs);
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_DOWN | KEY_MASK_CMD | KEY_MASK_ALT));
+ inputs.push_back(InputEventKey::create_reference(Key::DOWN | KeyModifierMask::CMD | KeyModifierMask::ALT));
default_builtin_cache.insert("ui_text_scroll_down.macos", inputs);
// Text Misc
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_A | KEY_MASK_CMD));
+ inputs.push_back(InputEventKey::create_reference(Key::A | KeyModifierMask::CMD));
default_builtin_cache.insert("ui_text_select_all", inputs);
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_D | KEY_MASK_CMD));
+ inputs.push_back(InputEventKey::create_reference(Key::D | KeyModifierMask::CMD));
default_builtin_cache.insert("ui_text_select_word_under_caret", inputs);
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_INSERT));
+ inputs.push_back(InputEventKey::create_reference(Key::INSERT));
default_builtin_cache.insert("ui_text_toggle_insert_mode", inputs);
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_MENU));
+ inputs.push_back(InputEventKey::create_reference(Key::MENU));
default_builtin_cache.insert("ui_menu", inputs);
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_ENTER));
- inputs.push_back(InputEventKey::create_reference(KEY_KP_ENTER));
+ inputs.push_back(InputEventKey::create_reference(Key::ENTER));
+ inputs.push_back(InputEventKey::create_reference(Key::KP_ENTER));
default_builtin_cache.insert("ui_text_submit", inputs);
// ///// UI Graph Shortcuts /////
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_D | KEY_MASK_CMD));
+ inputs.push_back(InputEventKey::create_reference(Key::D | KeyModifierMask::CMD));
default_builtin_cache.insert("ui_graph_duplicate", inputs);
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_DELETE));
+ inputs.push_back(InputEventKey::create_reference(Key::KEY_DELETE));
default_builtin_cache.insert("ui_graph_delete", inputs);
// ///// UI File Dialog Shortcuts /////
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_BACKSPACE));
+ inputs.push_back(InputEventKey::create_reference(Key::BACKSPACE));
default_builtin_cache.insert("ui_filedialog_up_one_level", inputs);
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_F5));
+ inputs.push_back(InputEventKey::create_reference(Key::F5));
default_builtin_cache.insert("ui_filedialog_refresh", inputs);
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_H));
+ inputs.push_back(InputEventKey::create_reference(Key::H));
default_builtin_cache.insert("ui_filedialog_show_hidden", inputs);
inputs = List<Ref<InputEvent>>();
- inputs.push_back(InputEventKey::create_reference(KEY_QUOTELEFT | KEY_MASK_CMD));
+ inputs.push_back(InputEventKey::create_reference(Key::QUOTELEFT | KeyModifierMask::CMD));
default_builtin_cache.insert("ui_swap_input_direction", inputs);
return default_builtin_cache;
diff --git a/core/io/config_file.cpp b/core/io/config_file.cpp
index 49fa73dab2..33f992e153 100644
--- a/core/io/config_file.cpp
+++ b/core/io/config_file.cpp
@@ -183,7 +183,9 @@ Error ConfigFile::_internal_save(FileAccess *file) {
if (E != values.front()) {
file->store_string("\n");
}
- file->store_string("[" + E.key() + "]\n\n");
+ if (E.key() != "") {
+ file->store_string("[" + E.key() + "]\n\n");
+ }
for (OrderedHashMap<String, Variant>::Element F = E.get().front(); F; F = F.next()) {
String vstr;
diff --git a/core/io/http_client.cpp b/core/io/http_client.cpp
index 5c1352c1b6..800ac779e5 100644
--- a/core/io/http_client.cpp
+++ b/core/io/http_client.cpp
@@ -85,8 +85,7 @@ String HTTPClient::query_string_from_dict(const Dictionary &p_dict) {
}
}
}
- query.erase(0, 1);
- return query;
+ return query.substr(1);
}
Dictionary HTTPClient::_get_response_headers_as_dictionary() {
diff --git a/core/io/image.cpp b/core/io/image.cpp
index b82e6637b4..3f34de132f 100644
--- a/core/io/image.cpp
+++ b/core/io/image.cpp
@@ -86,20 +86,14 @@ SaveEXRFunc Image::save_exr_func = nullptr;
SavePNGBufferFunc Image::save_png_buffer_func = nullptr;
-void Image::_put_pixelb(int p_x, int p_y, uint32_t p_pixelsize, uint8_t *p_data, const uint8_t *p_pixel) {
- uint32_t ofs = (p_y * width + p_x) * p_pixelsize;
-
- for (uint32_t i = 0; i < p_pixelsize; i++) {
- p_data[ofs + i] = p_pixel[i];
- }
+void Image::_put_pixelb(int p_x, int p_y, uint32_t p_pixel_size, uint8_t *p_data, const uint8_t *p_pixel) {
+ uint32_t ofs = (p_y * width + p_x) * p_pixel_size;
+ memcpy(p_data + ofs, p_pixel, p_pixel_size);
}
-void Image::_get_pixelb(int p_x, int p_y, uint32_t p_pixelsize, const uint8_t *p_data, uint8_t *p_pixel) {
- uint32_t ofs = (p_y * width + p_x) * p_pixelsize;
-
- for (uint32_t i = 0; i < p_pixelsize; i++) {
- p_pixel[i] = p_data[ofs + i];
- }
+void Image::_get_pixelb(int p_x, int p_y, uint32_t p_pixel_size, const uint8_t *p_data, uint8_t *p_pixel) {
+ uint32_t ofs = (p_y * width + p_x) * p_pixel_size;
+ memcpy(p_pixel, p_data + ofs, p_pixel_size);
}
int Image::get_format_pixel_size(Format p_format) {
@@ -2697,24 +2691,55 @@ void Image::blend_rect_mask(const Ref<Image> &p_src, const Ref<Image> &p_mask, c
}
}
-void Image::fill(const Color &c) {
+// Repeats `p_pixel` `p_count` times in consecutive memory.
+// Results in the original pixel and `p_count - 1` subsequent copies of it.
+void Image::_repeat_pixel_over_subsequent_memory(uint8_t *p_pixel, int p_pixel_size, int p_count) {
+ int offset = 1;
+ for (int stride = 1; offset + stride <= p_count; stride *= 2) {
+ memcpy(p_pixel + offset * p_pixel_size, p_pixel, stride * p_pixel_size);
+ offset += stride;
+ }
+ if (offset < p_count) {
+ memcpy(p_pixel + offset * p_pixel_size, p_pixel, (p_count - offset) * p_pixel_size);
+ }
+}
+
+void Image::fill(const Color &p_color) {
ERR_FAIL_COND_MSG(!_can_modify(format), "Cannot fill in compressed or custom image formats.");
- uint8_t *wp = data.ptrw();
- uint8_t *dst_data_ptr = wp;
+ uint8_t *dst_data_ptr = data.ptrw();
int pixel_size = get_format_pixel_size(format);
- // put first pixel with the format-aware API
- set_pixel(0, 0, c);
+ // Put first pixel with the format-aware API.
+ _set_color_at_ofs(dst_data_ptr, 0, p_color);
- for (int y = 0; y < height; y++) {
- for (int x = 0; x < width; x++) {
- uint8_t *dst = &dst_data_ptr[(y * width + x) * pixel_size];
+ _repeat_pixel_over_subsequent_memory(dst_data_ptr, pixel_size, width * height);
+}
- for (int k = 0; k < pixel_size; k++) {
- dst[k] = dst_data_ptr[k];
- }
+void Image::fill_rect(const Rect2 &p_rect, const Color &p_color) {
+ ERR_FAIL_COND_MSG(!_can_modify(format), "Cannot fill rect in compressed or custom image formats.");
+
+ Rect2i r = Rect2i(0, 0, width, height).intersection(p_rect.abs());
+ if (r.has_no_area()) {
+ return;
+ }
+
+ uint8_t *dst_data_ptr = data.ptrw();
+
+ int pixel_size = get_format_pixel_size(format);
+
+ // Put first pixel with the format-aware API.
+ uint8_t *rect_first_pixel_ptr = &dst_data_ptr[(r.position.y * width + r.position.x) * pixel_size];
+ _set_color_at_ofs(rect_first_pixel_ptr, 0, p_color);
+
+ if (r.size.x == width) {
+ // No need to fill rows separately.
+ _repeat_pixel_over_subsequent_memory(rect_first_pixel_ptr, pixel_size, width * r.size.y);
+ } else {
+ _repeat_pixel_over_subsequent_memory(rect_first_pixel_ptr, pixel_size, r.size.x);
+ for (int y = 1; y < r.size.y; y++) {
+ memcpy(rect_first_pixel_ptr + y * width * pixel_size, rect_first_pixel_ptr, r.size.x * pixel_size);
}
}
}
@@ -3160,6 +3185,7 @@ void Image::_bind_methods() {
ClassDB::bind_method(D_METHOD("blend_rect", "src", "src_rect", "dst"), &Image::blend_rect);
ClassDB::bind_method(D_METHOD("blend_rect_mask", "src", "mask", "src_rect", "dst"), &Image::blend_rect_mask);
ClassDB::bind_method(D_METHOD("fill", "color"), &Image::fill);
+ ClassDB::bind_method(D_METHOD("fill_rect", "rect", "color"), &Image::fill_rect);
ClassDB::bind_method(D_METHOD("get_used_rect"), &Image::get_used_rect);
ClassDB::bind_method(D_METHOD("get_rect", "rect"), &Image::get_rect);
diff --git a/core/io/image.h b/core/io/image.h
index d31a065aa7..9023463b08 100644
--- a/core/io/image.h
+++ b/core/io/image.h
@@ -190,8 +190,10 @@ private:
static int _get_dst_image_size(int p_width, int p_height, Format p_format, int &r_mipmaps, int p_mipmaps = -1, int *r_mm_width = nullptr, int *r_mm_height = nullptr);
bool _can_modify(Format p_format) const;
- _FORCE_INLINE_ void _put_pixelb(int p_x, int p_y, uint32_t p_pixelsize, uint8_t *p_data, const uint8_t *p_pixel);
- _FORCE_INLINE_ void _get_pixelb(int p_x, int p_y, uint32_t p_pixelsize, const uint8_t *p_data, uint8_t *p_pixel);
+ _FORCE_INLINE_ void _put_pixelb(int p_x, int p_y, uint32_t p_pixel_size, uint8_t *p_data, const uint8_t *p_pixel);
+ _FORCE_INLINE_ void _get_pixelb(int p_x, int p_y, uint32_t p_pixel_size, const uint8_t *p_data, uint8_t *p_pixel);
+
+ _FORCE_INLINE_ void _repeat_pixel_over_subsequent_memory(uint8_t *p_pixel, int p_pixel_size, int p_count);
void _set_data(const Dictionary &p_data);
Dictionary _get_data() const;
@@ -362,7 +364,8 @@ public:
void blit_rect_mask(const Ref<Image> &p_src, const Ref<Image> &p_mask, const Rect2 &p_src_rect, const Point2 &p_dest);
void blend_rect(const Ref<Image> &p_src, const Rect2 &p_src_rect, const Point2 &p_dest);
void blend_rect_mask(const Ref<Image> &p_src, const Ref<Image> &p_mask, const Rect2 &p_src_rect, const Point2 &p_dest);
- void fill(const Color &c);
+ void fill(const Color &p_color);
+ void fill_rect(const Rect2 &p_rect, const Color &p_color);
Rect2 get_used_rect() const;
Ref<Image> get_rect(const Rect2 &p_area) const;
diff --git a/core/io/packed_data_container.cpp b/core/io/packed_data_container.cpp
index 4a76f0191d..d34b5b6fe3 100644
--- a/core/io/packed_data_container.cpp
+++ b/core/io/packed_data_container.cpp
@@ -100,6 +100,7 @@ Variant PackedDataContainer::_iter_get_ofs(const Variant &p_iter, uint32_t p_off
}
Variant PackedDataContainer::_get_at_ofs(uint32_t p_ofs, const uint8_t *p_buf, bool &err) const {
+ ERR_FAIL_COND_V(p_ofs + 4 > (uint32_t)data.size(), Variant());
uint32_t type = decode_uint32(p_buf + p_ofs);
if (type == TYPE_ARRAY || type == TYPE_DICT) {
@@ -122,6 +123,7 @@ Variant PackedDataContainer::_get_at_ofs(uint32_t p_ofs, const uint8_t *p_buf, b
}
uint32_t PackedDataContainer::_type_at_ofs(uint32_t p_ofs) const {
+ ERR_FAIL_COND_V(p_ofs + 4 > (uint32_t)data.size(), 0);
const uint8_t *rd = data.ptr();
ERR_FAIL_COND_V(!rd, 0);
const uint8_t *r = &rd[p_ofs];
@@ -131,6 +133,7 @@ uint32_t PackedDataContainer::_type_at_ofs(uint32_t p_ofs) const {
}
int PackedDataContainer::_size(uint32_t p_ofs) const {
+ ERR_FAIL_COND_V(p_ofs + 4 > (uint32_t)data.size(), 0);
const uint8_t *rd = data.ptr();
ERR_FAIL_COND_V(!rd, 0);
const uint8_t *r = &rd[p_ofs];
@@ -149,6 +152,7 @@ int PackedDataContainer::_size(uint32_t p_ofs) const {
}
Variant PackedDataContainer::_key_at_ofs(uint32_t p_ofs, const Variant &p_key, bool &err) const {
+ ERR_FAIL_COND_V(p_ofs + 4 > (uint32_t)data.size(), Variant());
const uint8_t *rd = data.ptr();
if (!rd) {
err = true;
diff --git a/core/io/pck_packer.cpp b/core/io/pck_packer.cpp
index 806a95398f..8d75581342 100644
--- a/core/io/pck_packer.cpp
+++ b/core/io/pck_packer.cpp
@@ -47,13 +47,14 @@ static int _get_pad(int p_alignment, int p_n) {
}
void PCKPacker::_bind_methods() {
- ClassDB::bind_method(D_METHOD("pck_start", "pck_name", "alignment", "key", "encrypt_directory"), &PCKPacker::pck_start, DEFVAL(0), DEFVAL(String()), DEFVAL(false));
+ ClassDB::bind_method(D_METHOD("pck_start", "pck_name", "alignment", "key", "encrypt_directory"), &PCKPacker::pck_start, DEFVAL(32), DEFVAL("0000000000000000000000000000000000000000000000000000000000000000"), DEFVAL(false));
ClassDB::bind_method(D_METHOD("add_file", "pck_path", "source_path", "encrypt"), &PCKPacker::add_file, DEFVAL(false));
ClassDB::bind_method(D_METHOD("flush", "verbose"), &PCKPacker::flush, DEFVAL(false));
}
Error PCKPacker::pck_start(const String &p_file, int p_alignment, const String &p_key, bool p_encrypt_directory) {
ERR_FAIL_COND_V_MSG((p_key.is_empty() || !p_key.is_valid_hex_number(false) || p_key.length() != 64), ERR_CANT_CREATE, "Invalid Encryption Key (must be 64 characters long).");
+ ERR_FAIL_COND_V_MSG(p_alignment <= 0, ERR_CANT_CREATE, "Invalid alignment, must be greater then 0.");
String _key = p_key.to_lower();
key.resize(32);
diff --git a/core/io/pck_packer.h b/core/io/pck_packer.h
index 3d2ce8f240..bd8902a01d 100644
--- a/core/io/pck_packer.h
+++ b/core/io/pck_packer.h
@@ -58,7 +58,7 @@ class PCKPacker : public RefCounted {
Vector<File> files;
public:
- Error pck_start(const String &p_file, int p_alignment = 0, const String &p_key = String(), bool p_encrypt_directory = false);
+ Error pck_start(const String &p_file, int p_alignment = 32, const String &p_key = "0000000000000000000000000000000000000000000000000000000000000000", bool p_encrypt_directory = false);
Error add_file(const String &p_file, const String &p_src, bool p_encrypt = false);
Error flush(bool p_verbose = false);
diff --git a/core/io/resource.h b/core/io/resource.h
index 9ccc247887..109c0f6611 100644
--- a/core/io/resource.h
+++ b/core/io/resource.h
@@ -103,6 +103,7 @@ public:
virtual void set_path(const String &p_path, bool p_take_over = false);
String get_path() const;
+ _FORCE_INLINE_ bool is_built_in() const { return path_cache.is_empty() || path_cache.find("::") != -1 || path_cache.begins_with("local://"); }
static String generate_scene_unique_id();
void set_scene_unique_id(const String &p_id);
diff --git a/core/io/resource_format_binary.cpp b/core/io/resource_format_binary.cpp
index cbb033f6c6..a5a195f859 100644
--- a/core/io/resource_format_binary.cpp
+++ b/core/io/resource_format_binary.cpp
@@ -1572,7 +1572,7 @@ void ResourceFormatSaverBinaryInstance::write_variant(FileAccess *f, const Varia
return; // don't save it
}
- if (res->get_path().length() && res->get_path().find("::") == -1) {
+ if (!res->is_built_in()) {
f->store_32(OBJECT_EXTERNAL_RESOURCE_INDEX);
f->store_32(external_resources[res]);
} else {
@@ -1743,7 +1743,7 @@ void ResourceFormatSaverBinaryInstance::_find_resources(const Variant &p_variant
return;
}
- if (!p_main && (!bundle_resources) && res->get_path().length() && res->get_path().find("::") == -1) {
+ if (!p_main && (!bundle_resources) && !res->is_built_in()) {
if (res->get_path() == path) {
ERR_PRINT("Circular reference to resource being saved found: '" + local_path + "' will be null next time it's loaded.");
return;
@@ -1978,7 +1978,7 @@ Error ResourceFormatSaverBinaryInstance::save(const String &p_path, const RES &p
Set<String> used_unique_ids;
for (RES &r : saved_resources) {
- if (r->get_path() == "" || r->get_path().find("::") != -1) {
+ if (r->is_built_in()) {
if (r->get_scene_unique_id() != "") {
if (used_unique_ids.has(r->get_scene_unique_id())) {
r->set_scene_unique_id("");
@@ -1992,7 +1992,7 @@ Error ResourceFormatSaverBinaryInstance::save(const String &p_path, const RES &p
Map<RES, int> resource_map;
int res_index = 0;
for (RES &r : saved_resources) {
- if (r->get_path() == "" || r->get_path().find("::") != -1) {
+ if (r->is_built_in()) {
if (r->get_scene_unique_id() == "") {
String new_id;
diff --git a/core/io/resource_importer.h b/core/io/resource_importer.h
index a1cacbd306..cd583e2533 100644
--- a/core/io/resource_importer.h
+++ b/core/io/resource_importer.h
@@ -134,8 +134,8 @@ public:
virtual int get_preset_count() const { return 0; }
virtual String get_preset_name(int p_idx) const { return String(); }
- virtual void get_import_options(List<ImportOption> *r_options, int p_preset = 0) const = 0;
- virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const = 0;
+ virtual void get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset = 0) const = 0;
+ virtual bool get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const = 0;
virtual String get_option_group_file() const { return String(); }
virtual Error import(const String &p_source_file, const String &p_save_path, const Map<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = nullptr, Variant *r_metadata = nullptr) = 0;
diff --git a/core/math/a_star.cpp b/core/math/a_star.cpp
index 1079da75ef..8a44646ef9 100644
--- a/core/math/a_star.cpp
+++ b/core/math/a_star.cpp
@@ -344,7 +344,7 @@ bool AStar::_solve(Point *begin_point, Point *end_point) {
}
sorter.pop_heap(0, open_list.size(), open_list.ptrw()); // Remove the current point from the open list
- open_list.remove(open_list.size() - 1);
+ open_list.remove_at(open_list.size() - 1);
p->closed_pass = pass; // Mark the point as closed
for (OAHashMap<int, Point *>::Iterator it = p->neighbours.iter(); it.valid; it = p->neighbours.next_iter(it)) {
@@ -812,7 +812,7 @@ bool AStar2D::_solve(AStar::Point *begin_point, AStar::Point *end_point) {
}
sorter.pop_heap(0, open_list.size(), open_list.ptrw()); // Remove the current point from the open list
- open_list.remove(open_list.size() - 1);
+ open_list.remove_at(open_list.size() - 1);
p->closed_pass = astar.pass; // Mark the point as closed
for (OAHashMap<int, AStar::Point *>::Iterator it = p->neighbours.iter(); it.valid; it = p->neighbours.next_iter(it)) {
diff --git a/core/math/aabb.cpp b/core/math/aabb.cpp
index 51a1309f0e..f3e78c0080 100644
--- a/core/math/aabb.cpp
+++ b/core/math/aabb.cpp
@@ -33,7 +33,7 @@
#include "core/string/print_string.h"
#include "core/variant/variant.h"
-real_t AABB::get_area() const {
+real_t AABB::get_volume() const {
return size.x * size.y * size.z;
}
diff --git a/core/math/aabb.h b/core/math/aabb.h
index c458e61475..02ce2501a0 100644
--- a/core/math/aabb.h
+++ b/core/math/aabb.h
@@ -46,8 +46,8 @@ public:
Vector3 position;
Vector3 size;
- real_t get_area() const; /// get area
- _FORCE_INLINE_ bool has_no_area() const {
+ real_t get_volume() const;
+ _FORCE_INLINE_ bool has_no_volume() const {
return (size.x <= 0 || size.y <= 0 || size.z <= 0);
}
diff --git a/core/math/basis.cpp b/core/math/basis.cpp
index 3d893afb4d..566300c716 100644
--- a/core/math/basis.cpp
+++ b/core/math/basis.cpp
@@ -261,7 +261,7 @@ Vector3 Basis::get_scale_abs() const {
}
Vector3 Basis::get_scale_local() const {
- real_t det_sign = SGN(determinant());
+ real_t det_sign = SIGN(determinant());
return det_sign * Vector3(elements[0].length(), elements[1].length(), elements[2].length());
}
@@ -287,7 +287,7 @@ Vector3 Basis::get_scale() const {
// matrix elements.
//
// The rotation part of this decomposition is returned by get_rotation* functions.
- real_t det_sign = SGN(determinant());
+ real_t det_sign = SIGN(determinant());
return det_sign * get_scale_abs();
}
diff --git a/core/math/bvh.h b/core/math/bvh.h
index 65b8b102a3..c1eff02178 100644
--- a/core/math/bvh.h
+++ b/core/math/bvh.h
@@ -654,7 +654,7 @@ private:
// remove from changed items (not very efficient yet)
for (int n = 0; n < (int)changed_items.size(); n++) {
if (changed_items[n] == p_handle) {
- changed_items.remove_unordered(n);
+ changed_items.remove_at_unordered(n);
// because we are using an unordered remove,
// the last changed item will now be at spot 'n',
diff --git a/core/math/bvh_pair.inc b/core/math/bvh_pair.inc
index 839db59a3a..a12acec2b6 100644
--- a/core/math/bvh_pair.inc
+++ b/core/math/bvh_pair.inc
@@ -51,7 +51,7 @@ struct ItemPairs {
for (int n = 0; n < num_pairs; n++) {
if (extended_pairs[n].handle == h) {
userdata = extended_pairs[n].userdata;
- extended_pairs.remove_unordered(n);
+ extended_pairs.remove_at_unordered(n);
num_pairs--;
break;
}
diff --git a/core/math/color.cpp b/core/math/color.cpp
index dc86cacf8f..8310c342ed 100644
--- a/core/math/color.cpp
+++ b/core/math/color.cpp
@@ -107,6 +107,39 @@ uint64_t Color::to_rgba64() const {
return c;
}
+String _to_hex(float p_val) {
+ int v = Math::round(p_val * 255);
+ v = CLAMP(v, 0, 255);
+ String ret;
+
+ for (int i = 0; i < 2; i++) {
+ char32_t c[2] = { 0, 0 };
+ int lv = v & 0xF;
+ if (lv < 10) {
+ c[0] = '0' + lv;
+ } else {
+ c[0] = 'a' + lv - 10;
+ }
+
+ v >>= 4;
+ String cs = (const char32_t *)c;
+ ret = cs + ret;
+ }
+
+ return ret;
+}
+
+String Color::to_html(bool p_alpha) const {
+ String txt;
+ txt += _to_hex(r);
+ txt += _to_hex(g);
+ txt += _to_hex(b);
+ if (p_alpha) {
+ txt += _to_hex(a);
+ }
+ return txt;
+}
+
float Color::get_h() const {
float min = MIN(r, g);
min = MIN(min, b);
@@ -249,20 +282,6 @@ Color Color::hex64(uint64_t p_hex) {
return Color(r, g, b, a);
}
-Color Color::from_rgbe9995(uint32_t p_rgbe) {
- float r = p_rgbe & 0x1ff;
- float g = (p_rgbe >> 9) & 0x1ff;
- float b = (p_rgbe >> 18) & 0x1ff;
- float e = (p_rgbe >> 27);
- float m = Math::pow(2, e - 15.0 - 9.0);
-
- float rd = r * m;
- float gd = g * m;
- float bd = b * m;
-
- return Color(rd, gd, bd, 1.0f);
-}
-
static int _parse_col4(const String &p_str, int p_ofs) {
char character = p_str[p_ofs];
@@ -428,43 +447,24 @@ Color Color::from_string(const String &p_string, const Color &p_default) {
}
}
-String _to_hex(float p_val) {
- int v = Math::round(p_val * 255);
- v = CLAMP(v, 0, 255);
- String ret;
-
- for (int i = 0; i < 2; i++) {
- char32_t c[2] = { 0, 0 };
- int lv = v & 0xF;
- if (lv < 10) {
- c[0] = '0' + lv;
- } else {
- c[0] = 'a' + lv - 10;
- }
-
- v >>= 4;
- String cs = (const char32_t *)c;
- ret = cs + ret;
- }
-
- return ret;
+Color Color::from_hsv(float p_h, float p_s, float p_v, float p_alpha) {
+ Color c;
+ c.set_hsv(p_h, p_s, p_v, p_alpha);
+ return c;
}
-String Color::to_html(bool p_alpha) const {
- String txt;
- txt += _to_hex(r);
- txt += _to_hex(g);
- txt += _to_hex(b);
- if (p_alpha) {
- txt += _to_hex(a);
- }
- return txt;
-}
+Color Color::from_rgbe9995(uint32_t p_rgbe) {
+ float r = p_rgbe & 0x1ff;
+ float g = (p_rgbe >> 9) & 0x1ff;
+ float b = (p_rgbe >> 18) & 0x1ff;
+ float e = (p_rgbe >> 27);
+ float m = Math::pow(2, e - 15.0 - 9.0);
-Color Color::from_hsv(float p_h, float p_s, float p_v, float p_a) const {
- Color c;
- c.set_hsv(p_h, p_s, p_v, p_a);
- return c;
+ float rd = r * m;
+ float gd = g * m;
+ float bd = b * m;
+
+ return Color(rd, gd, bd, 1.0f);
}
Color::operator String() const {
diff --git a/core/math/color.h b/core/math/color.h
index a95dbf4f60..ffd0fd8f6e 100644
--- a/core/math/color.h
+++ b/core/math/color.h
@@ -51,6 +51,7 @@ struct Color {
uint64_t to_rgba64() const;
uint64_t to_argb64() const;
uint64_t to_abgr64() const;
+ String to_html(bool p_alpha = true) const;
float get_h() const;
float get_s() const;
float get_v() const;
@@ -189,8 +190,7 @@ struct Color {
static String get_named_color_name(int p_idx);
static Color get_named_color(int p_idx);
static Color from_string(const String &p_string, const Color &p_default);
- String to_html(bool p_alpha = true) const;
- Color from_hsv(float p_h, float p_s, float p_v, float p_a) const;
+ static Color from_hsv(float p_h, float p_s, float p_v, float p_alpha = 1.0);
static Color from_rgbe9995(uint32_t p_rgbe);
_FORCE_INLINE_ bool operator<(const Color &p_color) const; //used in set keys
diff --git a/core/math/convex_hull.cpp b/core/math/convex_hull.cpp
index f6560f1bea..2956e0cf09 100644
--- a/core/math/convex_hull.cpp
+++ b/core/math/convex_hull.cpp
@@ -1688,7 +1688,7 @@ real_t ConvexHullInternal::shrink(real_t p_amount, real_t p_clamp_amount) {
while (stack.size() > 0) {
Vertex *v = stack[stack.size() - 1];
- stack.remove(stack.size() - 1);
+ stack.remove_at(stack.size() - 1);
Edge *e = v->edges;
if (e) {
do {
diff --git a/core/math/delaunay_2d.h b/core/math/delaunay_2d.h
index 2f80cb5634..779ac96b79 100644
--- a/core/math/delaunay_2d.h
+++ b/core/math/delaunay_2d.h
@@ -123,7 +123,7 @@ public:
for (int j = 0; j < triangles.size(); j++) {
if (triangles[j].bad) {
- triangles.remove(j);
+ triangles.remove_at(j);
j--;
}
}
@@ -154,7 +154,7 @@ public:
}
}
if (invalid) {
- triangles.remove(i);
+ triangles.remove_at(i);
i--;
}
}
diff --git a/core/math/expression.cpp b/core/math/expression.cpp
index 05f2c8dac9..f366fd0499 100644
--- a/core/math/expression.cpp
+++ b/core/math/expression.cpp
@@ -1087,7 +1087,7 @@ Expression::ENode *Expression::_parse_expression() {
op->nodes[1] = nullptr;
expression.write[i].is_op = false;
expression.write[i].node = op;
- expression.remove(i + 1);
+ expression.remove_at(i + 1);
}
} else {
@@ -1119,8 +1119,8 @@ Expression::ENode *Expression::_parse_expression() {
//replace all 3 nodes by this operator and make it an expression
expression.write[next_op - 1].node = op;
- expression.remove(next_op);
- expression.remove(next_op);
+ expression.remove_at(next_op);
+ expression.remove_at(next_op);
}
}
diff --git a/core/math/geometry_2d.h b/core/math/geometry_2d.h
index 6010159597..028ac0f4eb 100644
--- a/core/math/geometry_2d.h
+++ b/core/math/geometry_2d.h
@@ -181,8 +181,7 @@ public:
D = Vector2(D.x * Bn.x + D.y * Bn.y, D.y * Bn.x - D.x * Bn.y);
// Fail if C x B and D x B have the same sign (segments don't intersect).
- // (equivalent to condition (C.y < 0 && D.y < CMP_EPSILON) || (C.y > 0 && D.y > CMP_EPSILON))
- if (C.y * D.y > CMP_EPSILON) {
+ if ((C.y < -CMP_EPSILON && D.y < -CMP_EPSILON) || (C.y > CMP_EPSILON && D.y > CMP_EPSILON)) {
return false;
}
diff --git a/core/math/math_funcs.cpp b/core/math/math_funcs.cpp
index bbed257f60..2b6d92fe0e 100644
--- a/core/math/math_funcs.cpp
+++ b/core/math/math_funcs.cpp
@@ -53,6 +53,10 @@ uint32_t Math::rand() {
return default_rand.rand();
}
+double Math::randfn(double mean, double deviation) {
+ return default_rand.randfn(mean, deviation);
+}
+
int Math::step_decimals(double p_step) {
static const int maxn = 10;
static const double sd[maxn] = {
diff --git a/core/math/math_funcs.h b/core/math/math_funcs.h
index baff10af98..8df45255c9 100644
--- a/core/math/math_funcs.h
+++ b/core/math/math_funcs.h
@@ -266,8 +266,8 @@ public:
float s = CLAMP((p_s - p_from) / (p_to - p_from), 0.0f, 1.0f);
return s * s * (3.0f - 2.0f * s);
}
- static _ALWAYS_INLINE_ double move_toward(double p_from, double p_to, double p_delta) { return abs(p_to - p_from) <= p_delta ? p_to : p_from + SGN(p_to - p_from) * p_delta; }
- static _ALWAYS_INLINE_ float move_toward(float p_from, float p_to, float p_delta) { return abs(p_to - p_from) <= p_delta ? p_to : p_from + SGN(p_to - p_from) * p_delta; }
+ static _ALWAYS_INLINE_ double move_toward(double p_from, double p_to, double p_delta) { return abs(p_to - p_from) <= p_delta ? p_to : p_from + SIGN(p_to - p_from) * p_delta; }
+ static _ALWAYS_INLINE_ float move_toward(float p_from, float p_to, float p_delta) { return abs(p_to - p_from) <= p_delta ? p_to : p_from + SIGN(p_to - p_from) * p_delta; }
static _ALWAYS_INLINE_ double linear2db(double p_linear) { return Math::log(p_linear) * 8.6858896380650365530225783783321; }
static _ALWAYS_INLINE_ float linear2db(float p_linear) { return Math::log(p_linear) * 8.6858896380650365530225783783321; }
@@ -291,6 +291,19 @@ public:
return is_zero_approx(range) ? min : value - (range * Math::floor((value - min) / range));
}
+ static _ALWAYS_INLINE_ float fract(float value) {
+ return value - floor(value);
+ }
+ static _ALWAYS_INLINE_ double fract(double value) {
+ return value - floor(value);
+ }
+ static _ALWAYS_INLINE_ float pingpong(float value, float length) {
+ return (length != 0.0f) ? abs(fract((value - length) / (length * 2.0f)) * length * 2.0f - length) : 0.0f;
+ }
+ static _ALWAYS_INLINE_ double pingpong(double value, double length) {
+ return (length != 0.0) ? abs(fract((value - length) / (length * 2.0)) * length * 2.0 - length) : 0.0;
+ }
+
// double only, as these functions are mainly used by the editor and not performance-critical,
static double ease(double p_x, double p_c);
static int step_decimals(double p_step);
@@ -305,6 +318,7 @@ public:
static uint32_t rand();
static _ALWAYS_INLINE_ double randd() { return (double)rand() / (double)Math::RANDOM_32BIT_MAX; }
static _ALWAYS_INLINE_ float randf() { return (float)rand() / (float)Math::RANDOM_32BIT_MAX; }
+ static double randfn(double mean, double deviation);
static double random(double from, double to);
static float random(float from, float to);
diff --git a/core/math/quaternion.h b/core/math/quaternion.h
index e20ea74eb4..d8d0c06672 100644
--- a/core/math/quaternion.h
+++ b/core/math/quaternion.h
@@ -86,13 +86,6 @@ public:
void operator*=(const Quaternion &p_q);
Quaternion operator*(const Quaternion &p_q) const;
- Quaternion operator*(const Vector3 &v) const {
- return Quaternion(w * v.x + y * v.z - z * v.y,
- w * v.y + z * v.x - x * v.z,
- w * v.z + x * v.y - y * v.x,
- -x * v.x - y * v.y - z * v.z);
- }
-
_FORCE_INLINE_ Vector3 xform(const Vector3 &v) const {
#ifdef MATH_CHECKS
ERR_FAIL_COND_V_MSG(!is_normalized(), v, "The quaternion must be normalized.");
diff --git a/core/math/transform_2d.cpp b/core/math/transform_2d.cpp
index df43c605f9..4bdeaa2a58 100644
--- a/core/math/transform_2d.cpp
+++ b/core/math/transform_2d.cpp
@@ -69,12 +69,12 @@ void Transform2D::rotate(const real_t p_phi) {
real_t Transform2D::get_skew() const {
real_t det = basis_determinant();
- return Math::acos(elements[0].normalized().dot(SGN(det) * elements[1].normalized())) - Math_PI * 0.5;
+ return Math::acos(elements[0].normalized().dot(SIGN(det) * elements[1].normalized())) - Math_PI * 0.5;
}
void Transform2D::set_skew(const real_t p_angle) {
real_t det = basis_determinant();
- elements[1] = SGN(det) * elements[0].rotated((Math_PI * 0.5 + p_angle)).normalized() * elements[1].length();
+ elements[1] = SIGN(det) * elements[0].rotated((Math_PI * 0.5 + p_angle)).normalized() * elements[1].length();
}
real_t Transform2D::get_rotation() const {
@@ -111,7 +111,7 @@ Transform2D::Transform2D(const real_t p_rot, const Size2 &p_scale, const real_t
}
Size2 Transform2D::get_scale() const {
- real_t det_sign = SGN(basis_determinant());
+ real_t det_sign = SIGN(basis_determinant());
return Size2(elements[0].length(), det_sign * elements[1].length());
}
diff --git a/core/math/vector2.cpp b/core/math/vector2.cpp
index 6259bdead0..718e94eee4 100644
--- a/core/math/vector2.cpp
+++ b/core/math/vector2.cpp
@@ -79,7 +79,7 @@ real_t Vector2::angle_to(const Vector2 &p_vector2) const {
}
real_t Vector2::angle_to_point(const Vector2 &p_vector2) const {
- return (*this - p_vector2).angle();
+ return (p_vector2 - *this).angle();
}
real_t Vector2::dot(const Vector2 &p_other) const {
@@ -91,7 +91,7 @@ real_t Vector2::cross(const Vector2 &p_other) const {
}
Vector2 Vector2::sign() const {
- return Vector2(SGN(x), SGN(y));
+ return Vector2(SIGN(x), SIGN(y));
}
Vector2 Vector2::floor() const {
diff --git a/core/math/vector2.h b/core/math/vector2.h
index 332c0475fa..0a7b9d3faf 100644
--- a/core/math/vector2.h
+++ b/core/math/vector2.h
@@ -345,7 +345,7 @@ struct Vector2i {
bool operator!=(const Vector2i &p_vec2) const;
real_t aspect() const { return width / (real_t)height; }
- Vector2i sign() const { return Vector2i(SGN(x), SGN(y)); }
+ Vector2i sign() const { return Vector2i(SIGN(x), SIGN(y)); }
Vector2i abs() const { return Vector2i(ABS(x), ABS(y)); }
Vector2i clamp(const Vector2i &p_min, const Vector2i &p_max) const;
diff --git a/core/math/vector3.h b/core/math/vector3.h
index dc9aa60458..02a56f684e 100644
--- a/core/math/vector3.h
+++ b/core/math/vector3.h
@@ -217,7 +217,7 @@ Vector3 Vector3::abs() const {
}
Vector3 Vector3::sign() const {
- return Vector3(SGN(x), SGN(y), SGN(z));
+ return Vector3(SIGN(x), SIGN(y), SIGN(z));
}
Vector3 Vector3::floor() const {
diff --git a/core/math/vector3i.h b/core/math/vector3i.h
index 9308d09045..10c28a5bb9 100644
--- a/core/math/vector3i.h
+++ b/core/math/vector3i.h
@@ -115,7 +115,7 @@ Vector3i Vector3i::abs() const {
}
Vector3i Vector3i::sign() const {
- return Vector3i(SGN(x), SGN(y), SGN(z));
+ return Vector3i(SIGN(x), SIGN(y), SIGN(z));
}
/* Operators */
diff --git a/core/object/object.cpp b/core/object/object.cpp
index e7d8b0e543..90bd697d37 100644
--- a/core/object/object.cpp
+++ b/core/object/object.cpp
@@ -628,7 +628,10 @@ void Object::get_property_list(List<PropertyInfo> *p_list, bool p_reversed) cons
script_instance->get_property_list(p_list);
}
- _get_property_listv(p_list, p_reversed);
+ if (_extension) {
+ p_list->push_back(PropertyInfo(Variant::NIL, _extension->class_name, PROPERTY_HINT_NONE, String(), PROPERTY_USAGE_CATEGORY));
+ ClassDB::get_property_list(_extension->class_name, p_list, true, this);
+ }
if (_extension && _extension->get_property_list) {
uint32_t pcount;
@@ -641,11 +644,13 @@ void Object::get_property_list(List<PropertyInfo> *p_list, bool p_reversed) cons
}
}
+ _get_property_listv(p_list, p_reversed);
+
if (!is_class("Script")) { // can still be set, but this is for user-friendliness
p_list->push_back(PropertyInfo(Variant::OBJECT, "script", PROPERTY_HINT_RESOURCE_TYPE, "Script", PROPERTY_USAGE_DEFAULT));
}
if (!metadata.is_empty()) {
- p_list->push_back(PropertyInfo(Variant::DICTIONARY, "__meta__", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL));
+ p_list->push_back(PropertyInfo(Variant::DICTIONARY, "__meta__", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL));
}
if (script_instance && !p_reversed) {
p_list->push_back(PropertyInfo(Variant::NIL, "Script Variables", PROPERTY_HINT_NONE, String(), PROPERTY_USAGE_CATEGORY));
@@ -1405,7 +1410,7 @@ void Object::_disconnect(const StringName &p_signal, const Callable &p_callable,
ERR_FAIL_COND_MSG(!s->slot_map.has(*p_callable.get_base_comparator()), "Disconnecting nonexistent signal '" + p_signal + "', callable: " + p_callable + ".");
- SignalData::Slot *slot = &s->slot_map[p_callable];
+ SignalData::Slot *slot = &s->slot_map[*p_callable.get_base_comparator()];
if (!p_force) {
slot->reference_count--; // by default is zero, if it was not referenced it will go below it
@@ -1475,7 +1480,7 @@ void Object::_clear_internal_resource_paths(const Variant &p_var) {
return;
}
- if (!r->get_path().begins_with("res://") || r->get_path().find("::") == -1) {
+ if (!r->is_built_in()) {
return; //not an internal resource
}
diff --git a/core/object/object.h b/core/object/object.h
index 759e2ccdee..218bc26dec 100644
--- a/core/object/object.h
+++ b/core/object/object.h
@@ -137,7 +137,7 @@ enum PropertyUsageFlags {
PROPERTY_USAGE_DEFAULT = PROPERTY_USAGE_STORAGE | PROPERTY_USAGE_EDITOR | PROPERTY_USAGE_NETWORK,
PROPERTY_USAGE_DEFAULT_INTL = PROPERTY_USAGE_STORAGE | PROPERTY_USAGE_EDITOR | PROPERTY_USAGE_NETWORK | PROPERTY_USAGE_INTERNATIONALIZED,
- PROPERTY_USAGE_NOEDITOR = PROPERTY_USAGE_STORAGE | PROPERTY_USAGE_NETWORK,
+ PROPERTY_USAGE_NO_EDITOR = PROPERTY_USAGE_STORAGE | PROPERTY_USAGE_NETWORK,
};
#define ADD_SIGNAL(m_signal) ::ClassDB::add_signal(get_class_static(), m_signal)
diff --git a/core/object/script_language.cpp b/core/object/script_language.cpp
index b0ce46ca2b..c2449e3ddc 100644
--- a/core/object/script_language.cpp
+++ b/core/object/script_language.cpp
@@ -549,7 +549,7 @@ void PlaceHolderScriptInstance::property_set_fallback(const StringName &p_name,
}
}
if (!found) {
- properties.push_back(PropertyInfo(p_value.get_type(), p_name, PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_SCRIPT_VARIABLE));
+ properties.push_back(PropertyInfo(p_value.get_type(), p_name, PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_SCRIPT_VARIABLE));
}
}
diff --git a/core/object/undo_redo.cpp b/core/object/undo_redo.cpp
index 07006e7968..3459506860 100644
--- a/core/object/undo_redo.cpp
+++ b/core/object/undo_redo.cpp
@@ -282,7 +282,7 @@ void UndoRedo::_pop_history_tail() {
}
}
- actions.remove(0);
+ actions.remove_at(0);
if (current_action >= 0) {
current_action--;
}
diff --git a/core/os/keyboard.cpp b/core/os/keyboard.cpp
index 4c5f0b5220..fdc43da7a5 100644
--- a/core/os/keyboard.cpp
+++ b/core/os/keyboard.cpp
@@ -33,400 +33,399 @@
#include "core/os/os.h"
struct _KeyCodeText {
- int code;
+ Key code;
const char *text;
};
static const _KeyCodeText _keycodes[] = {
/* clang-format off */
- {KEY_ESCAPE ,"Escape"},
- {KEY_TAB ,"Tab"},
- {KEY_BACKTAB ,"BackTab"},
- {KEY_BACKSPACE ,"BackSpace"},
- {KEY_ENTER ,"Enter"},
- {KEY_KP_ENTER ,"Kp Enter"},
- {KEY_INSERT ,"Insert"},
- {KEY_DELETE ,"Delete"},
- {KEY_PAUSE ,"Pause"},
- {KEY_PRINT ,"Print"},
- {KEY_SYSREQ ,"SysReq"},
- {KEY_CLEAR ,"Clear"},
- {KEY_HOME ,"Home"},
- {KEY_END ,"End"},
- {KEY_LEFT ,"Left"},
- {KEY_UP ,"Up"},
- {KEY_RIGHT ,"Right"},
- {KEY_DOWN ,"Down"},
- {KEY_PAGEUP ,"PageUp"},
- {KEY_PAGEDOWN ,"PageDown"},
- {KEY_SHIFT ,"Shift"},
- {KEY_CTRL ,"Ctrl"},
+ {Key::ESCAPE ,"Escape"},
+ {Key::TAB ,"Tab"},
+ {Key::BACKTAB ,"BackTab"},
+ {Key::BACKSPACE ,"BackSpace"},
+ {Key::ENTER ,"Enter"},
+ {Key::KP_ENTER ,"Kp Enter"},
+ {Key::INSERT ,"Insert"},
+ {Key::KEY_DELETE ,"Delete"},
+ {Key::PAUSE ,"Pause"},
+ {Key::PRINT ,"Print"},
+ {Key::SYSREQ ,"SysReq"},
+ {Key::CLEAR ,"Clear"},
+ {Key::HOME ,"Home"},
+ {Key::END ,"End"},
+ {Key::LEFT ,"Left"},
+ {Key::UP ,"Up"},
+ {Key::RIGHT ,"Right"},
+ {Key::DOWN ,"Down"},
+ {Key::PAGEUP ,"PageUp"},
+ {Key::PAGEDOWN ,"PageDown"},
+ {Key::SHIFT ,"Shift"},
+ {Key::CTRL ,"Ctrl"},
#ifdef OSX_ENABLED
- {KEY_META ,"Command"},
+ {Key::META ,"Command"},
#else
- {KEY_META ,"Meta"},
+ {Key::META ,"Meta"},
#endif
- {KEY_ALT ,"Alt"},
- {KEY_CAPSLOCK ,"CapsLock"},
- {KEY_NUMLOCK ,"NumLock"},
- {KEY_SCROLLLOCK ,"ScrollLock"},
- {KEY_F1 ,"F1"},
- {KEY_F2 ,"F2"},
- {KEY_F3 ,"F3"},
- {KEY_F4 ,"F4"},
- {KEY_F5 ,"F5"},
- {KEY_F6 ,"F6"},
- {KEY_F7 ,"F7"},
- {KEY_F8 ,"F8"},
- {KEY_F9 ,"F9"},
- {KEY_F10 ,"F10"},
- {KEY_F11 ,"F11"},
- {KEY_F12 ,"F12"},
- {KEY_F13 ,"F13"},
- {KEY_F14 ,"F14"},
- {KEY_F15 ,"F15"},
- {KEY_F16 ,"F16"},
- {KEY_KP_MULTIPLY ,"Kp Multiply"},
- {KEY_KP_DIVIDE ,"Kp Divide"},
- {KEY_KP_SUBTRACT ,"Kp Subtract"},
- {KEY_KP_PERIOD ,"Kp Period"},
- {KEY_KP_ADD ,"Kp Add"},
- {KEY_KP_0 ,"Kp 0"},
- {KEY_KP_1 ,"Kp 1"},
- {KEY_KP_2 ,"Kp 2"},
- {KEY_KP_3 ,"Kp 3"},
- {KEY_KP_4 ,"Kp 4"},
- {KEY_KP_5 ,"Kp 5"},
- {KEY_KP_6 ,"Kp 6"},
- {KEY_KP_7 ,"Kp 7"},
- {KEY_KP_8 ,"Kp 8"},
- {KEY_KP_9 ,"Kp 9"},
- {KEY_SUPER_L ,"Super L"},
- {KEY_SUPER_R ,"Super R"},
- {KEY_MENU ,"Menu"},
- {KEY_HYPER_L ,"Hyper L"},
- {KEY_HYPER_R ,"Hyper R"},
- {KEY_HELP ,"Help"},
- {KEY_DIRECTION_L ,"Direction L"},
- {KEY_DIRECTION_R ,"Direction R"},
- {KEY_BACK ,"Back"},
- {KEY_FORWARD ,"Forward"},
- {KEY_STOP ,"Stop"},
- {KEY_REFRESH ,"Refresh"},
- {KEY_VOLUMEDOWN ,"VolumeDown"},
- {KEY_VOLUMEMUTE ,"VolumeMute"},
- {KEY_VOLUMEUP ,"VolumeUp"},
- {KEY_BASSBOOST ,"BassBoost"},
- {KEY_BASSUP ,"BassUp"},
- {KEY_BASSDOWN ,"BassDown"},
- {KEY_TREBLEUP ,"TrebleUp"},
- {KEY_TREBLEDOWN ,"TrebleDown"},
- {KEY_MEDIAPLAY ,"MediaPlay"},
- {KEY_MEDIASTOP ,"MediaStop"},
- {KEY_MEDIAPREVIOUS ,"MediaPrevious"},
- {KEY_MEDIANEXT ,"MediaNext"},
- {KEY_MEDIARECORD ,"MediaRecord"},
- {KEY_HOMEPAGE ,"HomePage"},
- {KEY_FAVORITES ,"Favorites"},
- {KEY_SEARCH ,"Search"},
- {KEY_STANDBY ,"StandBy"},
- {KEY_LAUNCHMAIL ,"LaunchMail"},
- {KEY_LAUNCHMEDIA ,"LaunchMedia"},
- {KEY_LAUNCH0 ,"Launch0"},
- {KEY_LAUNCH1 ,"Launch1"},
- {KEY_LAUNCH2 ,"Launch2"},
- {KEY_LAUNCH3 ,"Launch3"},
- {KEY_LAUNCH4 ,"Launch4"},
- {KEY_LAUNCH5 ,"Launch5"},
- {KEY_LAUNCH6 ,"Launch6"},
- {KEY_LAUNCH7 ,"Launch7"},
- {KEY_LAUNCH8 ,"Launch8"},
- {KEY_LAUNCH9 ,"Launch9"},
- {KEY_LAUNCHA ,"LaunchA"},
- {KEY_LAUNCHB ,"LaunchB"},
- {KEY_LAUNCHC ,"LaunchC"},
- {KEY_LAUNCHD ,"LaunchD"},
- {KEY_LAUNCHE ,"LaunchE"},
- {KEY_LAUNCHF ,"LaunchF"},
-
- {KEY_UNKNOWN ,"Unknown"},
-
- {KEY_SPACE ,"Space"},
- {KEY_EXCLAM ,"Exclam"},
- {KEY_QUOTEDBL ,"QuoteDbl"},
- {KEY_NUMBERSIGN ,"NumberSign"},
- {KEY_DOLLAR ,"Dollar"},
- {KEY_PERCENT ,"Percent"},
- {KEY_AMPERSAND ,"Ampersand"},
- {KEY_APOSTROPHE ,"Apostrophe"},
- {KEY_PARENLEFT ,"ParenLeft"},
- {KEY_PARENRIGHT ,"ParenRight"},
- {KEY_ASTERISK ,"Asterisk"},
- {KEY_PLUS ,"Plus"},
- {KEY_COMMA ,"Comma"},
- {KEY_MINUS ,"Minus"},
- {KEY_PERIOD ,"Period"},
- {KEY_SLASH ,"Slash"},
- {KEY_0 ,"0"},
- {KEY_1 ,"1"},
- {KEY_2 ,"2"},
- {KEY_3 ,"3"},
- {KEY_4 ,"4"},
- {KEY_5 ,"5"},
- {KEY_6 ,"6"},
- {KEY_7 ,"7"},
- {KEY_8 ,"8"},
- {KEY_9 ,"9"},
- {KEY_COLON ,"Colon"},
- {KEY_SEMICOLON ,"Semicolon"},
- {KEY_LESS ,"Less"},
- {KEY_EQUAL ,"Equal"},
- {KEY_GREATER ,"Greater"},
- {KEY_QUESTION ,"Question"},
- {KEY_AT ,"At"},
- {KEY_A ,"A"},
- {KEY_B ,"B"},
- {KEY_C ,"C"},
- {KEY_D ,"D"},
- {KEY_E ,"E"},
- {KEY_F ,"F"},
- {KEY_G ,"G"},
- {KEY_H ,"H"},
- {KEY_I ,"I"},
- {KEY_J ,"J"},
- {KEY_K ,"K"},
- {KEY_L ,"L"},
- {KEY_M ,"M"},
- {KEY_N ,"N"},
- {KEY_O ,"O"},
- {KEY_P ,"P"},
- {KEY_Q ,"Q"},
- {KEY_R ,"R"},
- {KEY_S ,"S"},
- {KEY_T ,"T"},
- {KEY_U ,"U"},
- {KEY_V ,"V"},
- {KEY_W ,"W"},
- {KEY_X ,"X"},
- {KEY_Y ,"Y"},
- {KEY_Z ,"Z"},
- {KEY_BRACKETLEFT ,"BracketLeft"},
- {KEY_BACKSLASH ,"BackSlash"},
- {KEY_BRACKETRIGHT ,"BracketRight"},
- {KEY_ASCIICIRCUM ,"AsciiCircum"},
- {KEY_UNDERSCORE ,"UnderScore"},
- {KEY_QUOTELEFT ,"QuoteLeft"},
- {KEY_BRACELEFT ,"BraceLeft"},
- {KEY_BAR ,"Bar"},
- {KEY_BRACERIGHT ,"BraceRight"},
- {KEY_ASCIITILDE ,"AsciiTilde"},
- {KEY_NOBREAKSPACE ,"NoBreakSpace"},
- {KEY_EXCLAMDOWN ,"ExclamDown"},
- {KEY_CENT ,"Cent"},
- {KEY_STERLING ,"Sterling"},
- {KEY_CURRENCY ,"Currency"},
- {KEY_YEN ,"Yen"},
- {KEY_BROKENBAR ,"BrokenBar"},
- {KEY_SECTION ,"Section"},
- {KEY_DIAERESIS ,"Diaeresis"},
- {KEY_COPYRIGHT ,"Copyright"},
- {KEY_ORDFEMININE ,"Ordfeminine"},
- {KEY_GUILLEMOTLEFT ,"GuillemotLeft"},
- {KEY_NOTSIGN ,"NotSign"},
- {KEY_HYPHEN ,"Hyphen"},
- {KEY_REGISTERED ,"Registered"},
- {KEY_MACRON ,"Macron"},
- {KEY_DEGREE ,"Degree"},
- {KEY_PLUSMINUS ,"PlusMinus"},
- {KEY_TWOSUPERIOR ,"TwoSuperior"},
- {KEY_THREESUPERIOR ,"ThreeSuperior"},
- {KEY_ACUTE ,"Acute"},
- {KEY_MU ,"Mu"},
- {KEY_PARAGRAPH ,"Paragraph"},
- {KEY_PERIODCENTERED ,"PeriodCentered"},
- {KEY_CEDILLA ,"Cedilla"},
- {KEY_ONESUPERIOR ,"OneSuperior"},
- {KEY_MASCULINE ,"Masculine"},
- {KEY_GUILLEMOTRIGHT ,"GuillemotRight"},
- {KEY_ONEQUARTER ,"OneQuarter"},
- {KEY_ONEHALF ,"OneHalf"},
- {KEY_THREEQUARTERS ,"ThreeQuarters"},
- {KEY_QUESTIONDOWN ,"QuestionDown"},
- {KEY_AGRAVE ,"Agrave"},
- {KEY_AACUTE ,"Aacute"},
- {KEY_ACIRCUMFLEX ,"AcircumFlex"},
- {KEY_ATILDE ,"Atilde"},
- {KEY_ADIAERESIS ,"Adiaeresis"},
- {KEY_ARING ,"Aring"},
- {KEY_AE ,"Ae"},
- {KEY_CCEDILLA ,"Ccedilla"},
- {KEY_EGRAVE ,"Egrave"},
- {KEY_EACUTE ,"Eacute"},
- {KEY_ECIRCUMFLEX ,"Ecircumflex"},
- {KEY_EDIAERESIS ,"Ediaeresis"},
- {KEY_IGRAVE ,"Igrave"},
- {KEY_IACUTE ,"Iacute"},
- {KEY_ICIRCUMFLEX ,"Icircumflex"},
- {KEY_IDIAERESIS ,"Idiaeresis"},
- {KEY_ETH ,"Eth"},
- {KEY_NTILDE ,"Ntilde"},
- {KEY_OGRAVE ,"Ograve"},
- {KEY_OACUTE ,"Oacute"},
- {KEY_OCIRCUMFLEX ,"Ocircumflex"},
- {KEY_OTILDE ,"Otilde"},
- {KEY_ODIAERESIS ,"Odiaeresis"},
- {KEY_MULTIPLY ,"Multiply"},
- {KEY_OOBLIQUE ,"Ooblique"},
- {KEY_UGRAVE ,"Ugrave"},
- {KEY_UACUTE ,"Uacute"},
- {KEY_UCIRCUMFLEX ,"Ucircumflex"},
- {KEY_UDIAERESIS ,"Udiaeresis"},
- {KEY_YACUTE ,"Yacute"},
- {KEY_THORN ,"Thorn"},
- {KEY_SSHARP ,"Ssharp"},
-
- {KEY_DIVISION ,"Division"},
- {KEY_YDIAERESIS ,"Ydiaeresis"},
- {0 ,nullptr}
+ {Key::ALT ,"Alt"},
+ {Key::CAPSLOCK ,"CapsLock"},
+ {Key::NUMLOCK ,"NumLock"},
+ {Key::SCROLLLOCK ,"ScrollLock"},
+ {Key::F1 ,"F1"},
+ {Key::F2 ,"F2"},
+ {Key::F3 ,"F3"},
+ {Key::F4 ,"F4"},
+ {Key::F5 ,"F5"},
+ {Key::F6 ,"F6"},
+ {Key::F7 ,"F7"},
+ {Key::F8 ,"F8"},
+ {Key::F9 ,"F9"},
+ {Key::F10 ,"F10"},
+ {Key::F11 ,"F11"},
+ {Key::F12 ,"F12"},
+ {Key::F13 ,"F13"},
+ {Key::F14 ,"F14"},
+ {Key::F15 ,"F15"},
+ {Key::F16 ,"F16"},
+ {Key::KP_MULTIPLY ,"Kp Multiply"},
+ {Key::KP_DIVIDE ,"Kp Divide"},
+ {Key::KP_SUBTRACT ,"Kp Subtract"},
+ {Key::KP_PERIOD ,"Kp Period"},
+ {Key::KP_ADD ,"Kp Add"},
+ {Key::KP_0 ,"Kp 0"},
+ {Key::KP_1 ,"Kp 1"},
+ {Key::KP_2 ,"Kp 2"},
+ {Key::KP_3 ,"Kp 3"},
+ {Key::KP_4 ,"Kp 4"},
+ {Key::KP_5 ,"Kp 5"},
+ {Key::KP_6 ,"Kp 6"},
+ {Key::KP_7 ,"Kp 7"},
+ {Key::KP_8 ,"Kp 8"},
+ {Key::KP_9 ,"Kp 9"},
+ {Key::SUPER_L ,"Super L"},
+ {Key::SUPER_R ,"Super R"},
+ {Key::MENU ,"Menu"},
+ {Key::HYPER_L ,"Hyper L"},
+ {Key::HYPER_R ,"Hyper R"},
+ {Key::HELP ,"Help"},
+ {Key::DIRECTION_L ,"Direction L"},
+ {Key::DIRECTION_R ,"Direction R"},
+ {Key::BACK ,"Back"},
+ {Key::FORWARD ,"Forward"},
+ {Key::STOP ,"Stop"},
+ {Key::REFRESH ,"Refresh"},
+ {Key::VOLUMEDOWN ,"VolumeDown"},
+ {Key::VOLUMEMUTE ,"VolumeMute"},
+ {Key::VOLUMEUP ,"VolumeUp"},
+ {Key::BASSBOOST ,"BassBoost"},
+ {Key::BASSUP ,"BassUp"},
+ {Key::BASSDOWN ,"BassDown"},
+ {Key::TREBLEUP ,"TrebleUp"},
+ {Key::TREBLEDOWN ,"TrebleDown"},
+ {Key::MEDIAPLAY ,"MediaPlay"},
+ {Key::MEDIASTOP ,"MediaStop"},
+ {Key::MEDIAPREVIOUS ,"MediaPrevious"},
+ {Key::MEDIANEXT ,"MediaNext"},
+ {Key::MEDIARECORD ,"MediaRecord"},
+ {Key::HOMEPAGE ,"HomePage"},
+ {Key::FAVORITES ,"Favorites"},
+ {Key::SEARCH ,"Search"},
+ {Key::STANDBY ,"StandBy"},
+ {Key::LAUNCHMAIL ,"LaunchMail"},
+ {Key::LAUNCHMEDIA ,"LaunchMedia"},
+ {Key::LAUNCH0 ,"Launch0"},
+ {Key::LAUNCH1 ,"Launch1"},
+ {Key::LAUNCH2 ,"Launch2"},
+ {Key::LAUNCH3 ,"Launch3"},
+ {Key::LAUNCH4 ,"Launch4"},
+ {Key::LAUNCH5 ,"Launch5"},
+ {Key::LAUNCH6 ,"Launch6"},
+ {Key::LAUNCH7 ,"Launch7"},
+ {Key::LAUNCH8 ,"Launch8"},
+ {Key::LAUNCH9 ,"Launch9"},
+ {Key::LAUNCHA ,"LaunchA"},
+ {Key::LAUNCHB ,"LaunchB"},
+ {Key::LAUNCHC ,"LaunchC"},
+ {Key::LAUNCHD ,"LaunchD"},
+ {Key::LAUNCHE ,"LaunchE"},
+ {Key::LAUNCHF ,"LaunchF"},
+ {Key::UNKNOWN ,"Unknown"},
+ {Key::SPACE ,"Space"},
+ {Key::EXCLAM ,"Exclam"},
+ {Key::QUOTEDBL ,"QuoteDbl"},
+ {Key::NUMBERSIGN ,"NumberSign"},
+ {Key::DOLLAR ,"Dollar"},
+ {Key::PERCENT ,"Percent"},
+ {Key::AMPERSAND ,"Ampersand"},
+ {Key::APOSTROPHE ,"Apostrophe"},
+ {Key::PARENLEFT ,"ParenLeft"},
+ {Key::PARENRIGHT ,"ParenRight"},
+ {Key::ASTERISK ,"Asterisk"},
+ {Key::PLUS ,"Plus"},
+ {Key::COMMA ,"Comma"},
+ {Key::MINUS ,"Minus"},
+ {Key::PERIOD ,"Period"},
+ {Key::SLASH ,"Slash"},
+ {Key::KEY_0 ,"0"},
+ {Key::KEY_1 ,"1"},
+ {Key::KEY_2 ,"2"},
+ {Key::KEY_3 ,"3"},
+ {Key::KEY_4 ,"4"},
+ {Key::KEY_5 ,"5"},
+ {Key::KEY_6 ,"6"},
+ {Key::KEY_7 ,"7"},
+ {Key::KEY_8 ,"8"},
+ {Key::KEY_9 ,"9"},
+ {Key::COLON ,"Colon"},
+ {Key::SEMICOLON ,"Semicolon"},
+ {Key::LESS ,"Less"},
+ {Key::EQUAL ,"Equal"},
+ {Key::GREATER ,"Greater"},
+ {Key::QUESTION ,"Question"},
+ {Key::AT ,"At"},
+ {Key::A ,"A"},
+ {Key::B ,"B"},
+ {Key::C ,"C"},
+ {Key::D ,"D"},
+ {Key::E ,"E"},
+ {Key::F ,"F"},
+ {Key::G ,"G"},
+ {Key::H ,"H"},
+ {Key::I ,"I"},
+ {Key::J ,"J"},
+ {Key::K ,"K"},
+ {Key::L ,"L"},
+ {Key::M ,"M"},
+ {Key::N ,"N"},
+ {Key::O ,"O"},
+ {Key::P ,"P"},
+ {Key::Q ,"Q"},
+ {Key::R ,"R"},
+ {Key::S ,"S"},
+ {Key::T ,"T"},
+ {Key::U ,"U"},
+ {Key::V ,"V"},
+ {Key::W ,"W"},
+ {Key::X ,"X"},
+ {Key::Y ,"Y"},
+ {Key::Z ,"Z"},
+ {Key::BRACKETLEFT ,"BracketLeft"},
+ {Key::BACKSLASH ,"BackSlash"},
+ {Key::BRACKETRIGHT ,"BracketRight"},
+ {Key::ASCIICIRCUM ,"AsciiCircum"},
+ {Key::UNDERSCORE ,"UnderScore"},
+ {Key::QUOTELEFT ,"QuoteLeft"},
+ {Key::BRACELEFT ,"BraceLeft"},
+ {Key::BAR ,"Bar"},
+ {Key::BRACERIGHT ,"BraceRight"},
+ {Key::ASCIITILDE ,"AsciiTilde"},
+ {Key::NOBREAKSPACE ,"NoBreakSpace"},
+ {Key::EXCLAMDOWN ,"ExclamDown"},
+ {Key::CENT ,"Cent"},
+ {Key::STERLING ,"Sterling"},
+ {Key::CURRENCY ,"Currency"},
+ {Key::YEN ,"Yen"},
+ {Key::BROKENBAR ,"BrokenBar"},
+ {Key::SECTION ,"Section"},
+ {Key::DIAERESIS ,"Diaeresis"},
+ {Key::COPYRIGHT ,"Copyright"},
+ {Key::ORDFEMININE ,"Ordfeminine"},
+ {Key::GUILLEMOTLEFT ,"GuillemotLeft"},
+ {Key::NOTSIGN ,"NotSign"},
+ {Key::HYPHEN ,"Hyphen"},
+ {Key::KEY_REGISTERED ,"Registered"},
+ {Key::MACRON ,"Macron"},
+ {Key::DEGREE ,"Degree"},
+ {Key::PLUSMINUS ,"PlusMinus"},
+ {Key::TWOSUPERIOR ,"TwoSuperior"},
+ {Key::THREESUPERIOR ,"ThreeSuperior"},
+ {Key::ACUTE ,"Acute"},
+ {Key::MU ,"Mu"},
+ {Key::PARAGRAPH ,"Paragraph"},
+ {Key::PERIODCENTERED ,"PeriodCentered"},
+ {Key::CEDILLA ,"Cedilla"},
+ {Key::ONESUPERIOR ,"OneSuperior"},
+ {Key::MASCULINE ,"Masculine"},
+ {Key::GUILLEMOTRIGHT ,"GuillemotRight"},
+ {Key::ONEQUARTER ,"OneQuarter"},
+ {Key::ONEHALF ,"OneHalf"},
+ {Key::THREEQUARTERS ,"ThreeQuarters"},
+ {Key::QUESTIONDOWN ,"QuestionDown"},
+ {Key::AGRAVE ,"Agrave"},
+ {Key::AACUTE ,"Aacute"},
+ {Key::ACIRCUMFLEX ,"AcircumFlex"},
+ {Key::ATILDE ,"Atilde"},
+ {Key::ADIAERESIS ,"Adiaeresis"},
+ {Key::ARING ,"Aring"},
+ {Key::AE ,"Ae"},
+ {Key::CCEDILLA ,"Ccedilla"},
+ {Key::EGRAVE ,"Egrave"},
+ {Key::EACUTE ,"Eacute"},
+ {Key::ECIRCUMFLEX ,"Ecircumflex"},
+ {Key::EDIAERESIS ,"Ediaeresis"},
+ {Key::IGRAVE ,"Igrave"},
+ {Key::IACUTE ,"Iacute"},
+ {Key::ICIRCUMFLEX ,"Icircumflex"},
+ {Key::IDIAERESIS ,"Idiaeresis"},
+ {Key::ETH ,"Eth"},
+ {Key::NTILDE ,"Ntilde"},
+ {Key::OGRAVE ,"Ograve"},
+ {Key::OACUTE ,"Oacute"},
+ {Key::OCIRCUMFLEX ,"Ocircumflex"},
+ {Key::OTILDE ,"Otilde"},
+ {Key::ODIAERESIS ,"Odiaeresis"},
+ {Key::MULTIPLY ,"Multiply"},
+ {Key::OOBLIQUE ,"Ooblique"},
+ {Key::UGRAVE ,"Ugrave"},
+ {Key::UACUTE ,"Uacute"},
+ {Key::UCIRCUMFLEX ,"Ucircumflex"},
+ {Key::UDIAERESIS ,"Udiaeresis"},
+ {Key::YACUTE ,"Yacute"},
+ {Key::THORN ,"Thorn"},
+ {Key::SSHARP ,"Ssharp"},
+ {Key::DIVISION ,"Division"},
+ {Key::YDIAERESIS ,"Ydiaeresis"},
+ {Key::NONE ,nullptr}
/* clang-format on */
};
-bool keycode_has_unicode(uint32_t p_keycode) {
+bool keycode_has_unicode(Key p_keycode) {
switch (p_keycode) {
- case KEY_ESCAPE:
- case KEY_TAB:
- case KEY_BACKTAB:
- case KEY_BACKSPACE:
- case KEY_ENTER:
- case KEY_KP_ENTER:
- case KEY_INSERT:
- case KEY_DELETE:
- case KEY_PAUSE:
- case KEY_PRINT:
- case KEY_SYSREQ:
- case KEY_CLEAR:
- case KEY_HOME:
- case KEY_END:
- case KEY_LEFT:
- case KEY_UP:
- case KEY_RIGHT:
- case KEY_DOWN:
- case KEY_PAGEUP:
- case KEY_PAGEDOWN:
- case KEY_SHIFT:
- case KEY_CTRL:
- case KEY_META:
- case KEY_ALT:
- case KEY_CAPSLOCK:
- case KEY_NUMLOCK:
- case KEY_SCROLLLOCK:
- case KEY_F1:
- case KEY_F2:
- case KEY_F3:
- case KEY_F4:
- case KEY_F5:
- case KEY_F6:
- case KEY_F7:
- case KEY_F8:
- case KEY_F9:
- case KEY_F10:
- case KEY_F11:
- case KEY_F12:
- case KEY_F13:
- case KEY_F14:
- case KEY_F15:
- case KEY_F16:
- case KEY_SUPER_L:
- case KEY_SUPER_R:
- case KEY_MENU:
- case KEY_HYPER_L:
- case KEY_HYPER_R:
- case KEY_HELP:
- case KEY_DIRECTION_L:
- case KEY_DIRECTION_R:
- case KEY_BACK:
- case KEY_FORWARD:
- case KEY_STOP:
- case KEY_REFRESH:
- case KEY_VOLUMEDOWN:
- case KEY_VOLUMEMUTE:
- case KEY_VOLUMEUP:
- case KEY_BASSBOOST:
- case KEY_BASSUP:
- case KEY_BASSDOWN:
- case KEY_TREBLEUP:
- case KEY_TREBLEDOWN:
- case KEY_MEDIAPLAY:
- case KEY_MEDIASTOP:
- case KEY_MEDIAPREVIOUS:
- case KEY_MEDIANEXT:
- case KEY_MEDIARECORD:
- case KEY_HOMEPAGE:
- case KEY_FAVORITES:
- case KEY_SEARCH:
- case KEY_STANDBY:
- case KEY_OPENURL:
- case KEY_LAUNCHMAIL:
- case KEY_LAUNCHMEDIA:
- case KEY_LAUNCH0:
- case KEY_LAUNCH1:
- case KEY_LAUNCH2:
- case KEY_LAUNCH3:
- case KEY_LAUNCH4:
- case KEY_LAUNCH5:
- case KEY_LAUNCH6:
- case KEY_LAUNCH7:
- case KEY_LAUNCH8:
- case KEY_LAUNCH9:
- case KEY_LAUNCHA:
- case KEY_LAUNCHB:
- case KEY_LAUNCHC:
- case KEY_LAUNCHD:
- case KEY_LAUNCHE:
- case KEY_LAUNCHF:
+ case Key::ESCAPE:
+ case Key::TAB:
+ case Key::BACKTAB:
+ case Key::BACKSPACE:
+ case Key::ENTER:
+ case Key::KP_ENTER:
+ case Key::INSERT:
+ case Key::KEY_DELETE:
+ case Key::PAUSE:
+ case Key::PRINT:
+ case Key::SYSREQ:
+ case Key::CLEAR:
+ case Key::HOME:
+ case Key::END:
+ case Key::LEFT:
+ case Key::UP:
+ case Key::RIGHT:
+ case Key::DOWN:
+ case Key::PAGEUP:
+ case Key::PAGEDOWN:
+ case Key::SHIFT:
+ case Key::CTRL:
+ case Key::META:
+ case Key::ALT:
+ case Key::CAPSLOCK:
+ case Key::NUMLOCK:
+ case Key::SCROLLLOCK:
+ case Key::F1:
+ case Key::F2:
+ case Key::F3:
+ case Key::F4:
+ case Key::F5:
+ case Key::F6:
+ case Key::F7:
+ case Key::F8:
+ case Key::F9:
+ case Key::F10:
+ case Key::F11:
+ case Key::F12:
+ case Key::F13:
+ case Key::F14:
+ case Key::F15:
+ case Key::F16:
+ case Key::SUPER_L:
+ case Key::SUPER_R:
+ case Key::MENU:
+ case Key::HYPER_L:
+ case Key::HYPER_R:
+ case Key::HELP:
+ case Key::DIRECTION_L:
+ case Key::DIRECTION_R:
+ case Key::BACK:
+ case Key::FORWARD:
+ case Key::STOP:
+ case Key::REFRESH:
+ case Key::VOLUMEDOWN:
+ case Key::VOLUMEMUTE:
+ case Key::VOLUMEUP:
+ case Key::BASSBOOST:
+ case Key::BASSUP:
+ case Key::BASSDOWN:
+ case Key::TREBLEUP:
+ case Key::TREBLEDOWN:
+ case Key::MEDIAPLAY:
+ case Key::MEDIASTOP:
+ case Key::MEDIAPREVIOUS:
+ case Key::MEDIANEXT:
+ case Key::MEDIARECORD:
+ case Key::HOMEPAGE:
+ case Key::FAVORITES:
+ case Key::SEARCH:
+ case Key::STANDBY:
+ case Key::OPENURL:
+ case Key::LAUNCHMAIL:
+ case Key::LAUNCHMEDIA:
+ case Key::LAUNCH0:
+ case Key::LAUNCH1:
+ case Key::LAUNCH2:
+ case Key::LAUNCH3:
+ case Key::LAUNCH4:
+ case Key::LAUNCH5:
+ case Key::LAUNCH6:
+ case Key::LAUNCH7:
+ case Key::LAUNCH8:
+ case Key::LAUNCH9:
+ case Key::LAUNCHA:
+ case Key::LAUNCHB:
+ case Key::LAUNCHC:
+ case Key::LAUNCHD:
+ case Key::LAUNCHE:
+ case Key::LAUNCHF:
return false;
+ default: {
+ }
}
return true;
}
-String keycode_get_string(uint32_t p_code) {
+String keycode_get_string(Key p_code) {
String codestr;
- if (p_code & KEY_MASK_SHIFT) {
- codestr += find_keycode_name(KEY_SHIFT);
+ if ((p_code & KeyModifierMask::SHIFT) != Key::NONE) {
+ codestr += find_keycode_name(Key::SHIFT);
codestr += "+";
}
- if (p_code & KEY_MASK_ALT) {
- codestr += find_keycode_name(KEY_ALT);
+ if ((p_code & KeyModifierMask::ALT) != Key::NONE) {
+ codestr += find_keycode_name(Key::ALT);
codestr += "+";
}
- if (p_code & KEY_MASK_CTRL) {
- codestr += find_keycode_name(KEY_CTRL);
+ if ((p_code & KeyModifierMask::CTRL) != Key::NONE) {
+ codestr += find_keycode_name(Key::CTRL);
codestr += "+";
}
- if (p_code & KEY_MASK_META) {
- codestr += find_keycode_name(KEY_META);
+ if ((p_code & KeyModifierMask::META) != Key::NONE) {
+ codestr += find_keycode_name(Key::META);
codestr += "+";
}
- p_code &= KEY_CODE_MASK;
+ p_code &= KeyModifierMask::CODE_MASK;
const _KeyCodeText *kct = &_keycodes[0];
while (kct->text) {
- if (kct->code == (int)p_code) {
+ if (kct->code == p_code) {
codestr += kct->text;
return codestr;
}
kct++;
}
- codestr += String::chr(p_code);
+ codestr += String::chr((char32_t)p_code);
return codestr;
}
-int find_keycode(const String &p_code) {
+Key find_keycode(const String &p_code) {
const _KeyCodeText *kct = &_keycodes[0];
while (kct->text) {
@@ -436,10 +435,10 @@ int find_keycode(const String &p_code) {
kct++;
}
- return 0;
+ return Key::NONE;
}
-const char *find_keycode_name(int p_keycode) {
+const char *find_keycode_name(Key p_keycode) {
const _KeyCodeText *kct = &_keycodes[0];
while (kct->text) {
@@ -464,7 +463,7 @@ int keycode_get_count() {
}
int keycode_get_value_by_index(int p_index) {
- return _keycodes[p_index].code;
+ return (int)_keycodes[p_index].code;
}
const char *keycode_get_name_by_index(int p_index) {
diff --git a/core/os/keyboard.h b/core/os/keyboard.h
index 52174432d9..c780099553 100644
--- a/core/os/keyboard.h
+++ b/core/os/keyboard.h
@@ -33,148 +33,142 @@
#include "core/string/ustring.h"
-/*
- Special Key:
-
- The strategy here is similar to the one used by toolkits,
- which consists in leaving the 24 bits unicode range for printable
- characters, and use the upper 8 bits for special keys and
- modifiers. This way everything (char/keycode) can fit nicely in one 32 bits unsigned integer.
-*/
-enum {
- SPKEY = (1 << 24)
-};
-
-enum Key {
- KEY_NONE = 0,
+enum class Key {
+ NONE = 0,
+ // Special key: The strategy here is similar to the one used by toolkits,
+ // which consists in leaving the 24 bits unicode range for printable
+ // characters, and use the upper 8 bits for special keys and modifiers.
+ // This way everything (char/keycode) can fit nicely in one 32-bit
+ // integer (the enum's underlying type is `int` by default).
+ SPECIAL = (1 << 24),
/* CURSOR/FUNCTION/BROWSER/MULTIMEDIA/MISC KEYS */
- KEY_ESCAPE = SPKEY | 0x01,
- KEY_TAB = SPKEY | 0x02,
- KEY_BACKTAB = SPKEY | 0x03,
- KEY_BACKSPACE = SPKEY | 0x04,
- KEY_ENTER = SPKEY | 0x05,
- KEY_KP_ENTER = SPKEY | 0x06,
- KEY_INSERT = SPKEY | 0x07,
- KEY_DELETE = SPKEY | 0x08,
- KEY_PAUSE = SPKEY | 0x09,
- KEY_PRINT = SPKEY | 0x0A,
- KEY_SYSREQ = SPKEY | 0x0B,
- KEY_CLEAR = SPKEY | 0x0C,
- KEY_HOME = SPKEY | 0x0D,
- KEY_END = SPKEY | 0x0E,
- KEY_LEFT = SPKEY | 0x0F,
- KEY_UP = SPKEY | 0x10,
- KEY_RIGHT = SPKEY | 0x11,
- KEY_DOWN = SPKEY | 0x12,
- KEY_PAGEUP = SPKEY | 0x13,
- KEY_PAGEDOWN = SPKEY | 0x14,
- KEY_SHIFT = SPKEY | 0x15,
- KEY_CTRL = SPKEY | 0x16,
- KEY_META = SPKEY | 0x17,
- KEY_ALT = SPKEY | 0x18,
- KEY_CAPSLOCK = SPKEY | 0x19,
- KEY_NUMLOCK = SPKEY | 0x1A,
- KEY_SCROLLLOCK = SPKEY | 0x1B,
- KEY_F1 = SPKEY | 0x1C,
- KEY_F2 = SPKEY | 0x1D,
- KEY_F3 = SPKEY | 0x1E,
- KEY_F4 = SPKEY | 0x1F,
- KEY_F5 = SPKEY | 0x20,
- KEY_F6 = SPKEY | 0x21,
- KEY_F7 = SPKEY | 0x22,
- KEY_F8 = SPKEY | 0x23,
- KEY_F9 = SPKEY | 0x24,
- KEY_F10 = SPKEY | 0x25,
- KEY_F11 = SPKEY | 0x26,
- KEY_F12 = SPKEY | 0x27,
- KEY_F13 = SPKEY | 0x28,
- KEY_F14 = SPKEY | 0x29,
- KEY_F15 = SPKEY | 0x2A,
- KEY_F16 = SPKEY | 0x2B,
- KEY_KP_MULTIPLY = SPKEY | 0x81,
- KEY_KP_DIVIDE = SPKEY | 0x82,
- KEY_KP_SUBTRACT = SPKEY | 0x83,
- KEY_KP_PERIOD = SPKEY | 0x84,
- KEY_KP_ADD = SPKEY | 0x85,
- KEY_KP_0 = SPKEY | 0x86,
- KEY_KP_1 = SPKEY | 0x87,
- KEY_KP_2 = SPKEY | 0x88,
- KEY_KP_3 = SPKEY | 0x89,
- KEY_KP_4 = SPKEY | 0x8A,
- KEY_KP_5 = SPKEY | 0x8B,
- KEY_KP_6 = SPKEY | 0x8C,
- KEY_KP_7 = SPKEY | 0x8D,
- KEY_KP_8 = SPKEY | 0x8E,
- KEY_KP_9 = SPKEY | 0x8F,
- KEY_SUPER_L = SPKEY | 0x2C,
- KEY_SUPER_R = SPKEY | 0x2D,
- KEY_MENU = SPKEY | 0x2E,
- KEY_HYPER_L = SPKEY | 0x2F,
- KEY_HYPER_R = SPKEY | 0x30,
- KEY_HELP = SPKEY | 0x31,
- KEY_DIRECTION_L = SPKEY | 0x32,
- KEY_DIRECTION_R = SPKEY | 0x33,
- KEY_BACK = SPKEY | 0x40,
- KEY_FORWARD = SPKEY | 0x41,
- KEY_STOP = SPKEY | 0x42,
- KEY_REFRESH = SPKEY | 0x43,
- KEY_VOLUMEDOWN = SPKEY | 0x44,
- KEY_VOLUMEMUTE = SPKEY | 0x45,
- KEY_VOLUMEUP = SPKEY | 0x46,
- KEY_BASSBOOST = SPKEY | 0x47,
- KEY_BASSUP = SPKEY | 0x48,
- KEY_BASSDOWN = SPKEY | 0x49,
- KEY_TREBLEUP = SPKEY | 0x4A,
- KEY_TREBLEDOWN = SPKEY | 0x4B,
- KEY_MEDIAPLAY = SPKEY | 0x4C,
- KEY_MEDIASTOP = SPKEY | 0x4D,
- KEY_MEDIAPREVIOUS = SPKEY | 0x4E,
- KEY_MEDIANEXT = SPKEY | 0x4F,
- KEY_MEDIARECORD = SPKEY | 0x50,
- KEY_HOMEPAGE = SPKEY | 0x51,
- KEY_FAVORITES = SPKEY | 0x52,
- KEY_SEARCH = SPKEY | 0x53,
- KEY_STANDBY = SPKEY | 0x54,
- KEY_OPENURL = SPKEY | 0x55,
- KEY_LAUNCHMAIL = SPKEY | 0x56,
- KEY_LAUNCHMEDIA = SPKEY | 0x57,
- KEY_LAUNCH0 = SPKEY | 0x58,
- KEY_LAUNCH1 = SPKEY | 0x59,
- KEY_LAUNCH2 = SPKEY | 0x5A,
- KEY_LAUNCH3 = SPKEY | 0x5B,
- KEY_LAUNCH4 = SPKEY | 0x5C,
- KEY_LAUNCH5 = SPKEY | 0x5D,
- KEY_LAUNCH6 = SPKEY | 0x5E,
- KEY_LAUNCH7 = SPKEY | 0x5F,
- KEY_LAUNCH8 = SPKEY | 0x60,
- KEY_LAUNCH9 = SPKEY | 0x61,
- KEY_LAUNCHA = SPKEY | 0x62,
- KEY_LAUNCHB = SPKEY | 0x63,
- KEY_LAUNCHC = SPKEY | 0x64,
- KEY_LAUNCHD = SPKEY | 0x65,
- KEY_LAUNCHE = SPKEY | 0x66,
- KEY_LAUNCHF = SPKEY | 0x67,
+ ESCAPE = SPECIAL | 0x01,
+ TAB = SPECIAL | 0x02,
+ BACKTAB = SPECIAL | 0x03,
+ BACKSPACE = SPECIAL | 0x04,
+ ENTER = SPECIAL | 0x05,
+ KP_ENTER = SPECIAL | 0x06,
+ INSERT = SPECIAL | 0x07,
+ KEY_DELETE = SPECIAL | 0x08, // "DELETE" is a reserved word on Windows.
+ PAUSE = SPECIAL | 0x09,
+ PRINT = SPECIAL | 0x0A,
+ SYSREQ = SPECIAL | 0x0B,
+ CLEAR = SPECIAL | 0x0C,
+ HOME = SPECIAL | 0x0D,
+ END = SPECIAL | 0x0E,
+ LEFT = SPECIAL | 0x0F,
+ UP = SPECIAL | 0x10,
+ RIGHT = SPECIAL | 0x11,
+ DOWN = SPECIAL | 0x12,
+ PAGEUP = SPECIAL | 0x13,
+ PAGEDOWN = SPECIAL | 0x14,
+ SHIFT = SPECIAL | 0x15,
+ CTRL = SPECIAL | 0x16,
+ META = SPECIAL | 0x17,
+ ALT = SPECIAL | 0x18,
+ CAPSLOCK = SPECIAL | 0x19,
+ NUMLOCK = SPECIAL | 0x1A,
+ SCROLLLOCK = SPECIAL | 0x1B,
+ F1 = SPECIAL | 0x1C,
+ F2 = SPECIAL | 0x1D,
+ F3 = SPECIAL | 0x1E,
+ F4 = SPECIAL | 0x1F,
+ F5 = SPECIAL | 0x20,
+ F6 = SPECIAL | 0x21,
+ F7 = SPECIAL | 0x22,
+ F8 = SPECIAL | 0x23,
+ F9 = SPECIAL | 0x24,
+ F10 = SPECIAL | 0x25,
+ F11 = SPECIAL | 0x26,
+ F12 = SPECIAL | 0x27,
+ F13 = SPECIAL | 0x28,
+ F14 = SPECIAL | 0x29,
+ F15 = SPECIAL | 0x2A,
+ F16 = SPECIAL | 0x2B,
+ KP_MULTIPLY = SPECIAL | 0x81,
+ KP_DIVIDE = SPECIAL | 0x82,
+ KP_SUBTRACT = SPECIAL | 0x83,
+ KP_PERIOD = SPECIAL | 0x84,
+ KP_ADD = SPECIAL | 0x85,
+ KP_0 = SPECIAL | 0x86,
+ KP_1 = SPECIAL | 0x87,
+ KP_2 = SPECIAL | 0x88,
+ KP_3 = SPECIAL | 0x89,
+ KP_4 = SPECIAL | 0x8A,
+ KP_5 = SPECIAL | 0x8B,
+ KP_6 = SPECIAL | 0x8C,
+ KP_7 = SPECIAL | 0x8D,
+ KP_8 = SPECIAL | 0x8E,
+ KP_9 = SPECIAL | 0x8F,
+ SUPER_L = SPECIAL | 0x2C,
+ SUPER_R = SPECIAL | 0x2D,
+ MENU = SPECIAL | 0x2E,
+ HYPER_L = SPECIAL | 0x2F,
+ HYPER_R = SPECIAL | 0x30,
+ HELP = SPECIAL | 0x31,
+ DIRECTION_L = SPECIAL | 0x32,
+ DIRECTION_R = SPECIAL | 0x33,
+ BACK = SPECIAL | 0x40,
+ FORWARD = SPECIAL | 0x41,
+ STOP = SPECIAL | 0x42,
+ REFRESH = SPECIAL | 0x43,
+ VOLUMEDOWN = SPECIAL | 0x44,
+ VOLUMEMUTE = SPECIAL | 0x45,
+ VOLUMEUP = SPECIAL | 0x46,
+ BASSBOOST = SPECIAL | 0x47,
+ BASSUP = SPECIAL | 0x48,
+ BASSDOWN = SPECIAL | 0x49,
+ TREBLEUP = SPECIAL | 0x4A,
+ TREBLEDOWN = SPECIAL | 0x4B,
+ MEDIAPLAY = SPECIAL | 0x4C,
+ MEDIASTOP = SPECIAL | 0x4D,
+ MEDIAPREVIOUS = SPECIAL | 0x4E,
+ MEDIANEXT = SPECIAL | 0x4F,
+ MEDIARECORD = SPECIAL | 0x50,
+ HOMEPAGE = SPECIAL | 0x51,
+ FAVORITES = SPECIAL | 0x52,
+ SEARCH = SPECIAL | 0x53,
+ STANDBY = SPECIAL | 0x54,
+ OPENURL = SPECIAL | 0x55,
+ LAUNCHMAIL = SPECIAL | 0x56,
+ LAUNCHMEDIA = SPECIAL | 0x57,
+ LAUNCH0 = SPECIAL | 0x58,
+ LAUNCH1 = SPECIAL | 0x59,
+ LAUNCH2 = SPECIAL | 0x5A,
+ LAUNCH3 = SPECIAL | 0x5B,
+ LAUNCH4 = SPECIAL | 0x5C,
+ LAUNCH5 = SPECIAL | 0x5D,
+ LAUNCH6 = SPECIAL | 0x5E,
+ LAUNCH7 = SPECIAL | 0x5F,
+ LAUNCH8 = SPECIAL | 0x60,
+ LAUNCH9 = SPECIAL | 0x61,
+ LAUNCHA = SPECIAL | 0x62,
+ LAUNCHB = SPECIAL | 0x63,
+ LAUNCHC = SPECIAL | 0x64,
+ LAUNCHD = SPECIAL | 0x65,
+ LAUNCHE = SPECIAL | 0x66,
+ LAUNCHF = SPECIAL | 0x67,
- KEY_UNKNOWN = SPKEY | 0xFFFFFF,
+ UNKNOWN = SPECIAL | 0xFFFFFF,
/* PRINTABLE LATIN 1 CODES */
- KEY_SPACE = 0x0020,
- KEY_EXCLAM = 0x0021,
- KEY_QUOTEDBL = 0x0022,
- KEY_NUMBERSIGN = 0x0023,
- KEY_DOLLAR = 0x0024,
- KEY_PERCENT = 0x0025,
- KEY_AMPERSAND = 0x0026,
- KEY_APOSTROPHE = 0x0027,
- KEY_PARENLEFT = 0x0028,
- KEY_PARENRIGHT = 0x0029,
- KEY_ASTERISK = 0x002A,
- KEY_PLUS = 0x002B,
- KEY_COMMA = 0x002C,
- KEY_MINUS = 0x002D,
- KEY_PERIOD = 0x002E,
- KEY_SLASH = 0x002F,
+ SPACE = 0x0020,
+ EXCLAM = 0x0021,
+ QUOTEDBL = 0x0022,
+ NUMBERSIGN = 0x0023,
+ DOLLAR = 0x0024,
+ PERCENT = 0x0025,
+ AMPERSAND = 0x0026,
+ APOSTROPHE = 0x0027,
+ PARENLEFT = 0x0028,
+ PARENRIGHT = 0x0029,
+ ASTERISK = 0x002A,
+ PLUS = 0x002B,
+ COMMA = 0x002C,
+ MINUS = 0x002D,
+ PERIOD = 0x002E,
+ SLASH = 0x002F,
KEY_0 = 0x0030,
KEY_1 = 0x0031,
KEY_2 = 0x0032,
@@ -185,134 +179,133 @@ enum Key {
KEY_7 = 0x0037,
KEY_8 = 0x0038,
KEY_9 = 0x0039,
- KEY_COLON = 0x003A,
- KEY_SEMICOLON = 0x003B,
- KEY_LESS = 0x003C,
- KEY_EQUAL = 0x003D,
- KEY_GREATER = 0x003E,
- KEY_QUESTION = 0x003F,
- KEY_AT = 0x0040,
- KEY_A = 0x0041,
- KEY_B = 0x0042,
- KEY_C = 0x0043,
- KEY_D = 0x0044,
- KEY_E = 0x0045,
- KEY_F = 0x0046,
- KEY_G = 0x0047,
- KEY_H = 0x0048,
- KEY_I = 0x0049,
- KEY_J = 0x004A,
- KEY_K = 0x004B,
- KEY_L = 0x004C,
- KEY_M = 0x004D,
- KEY_N = 0x004E,
- KEY_O = 0x004F,
- KEY_P = 0x0050,
- KEY_Q = 0x0051,
- KEY_R = 0x0052,
- KEY_S = 0x0053,
- KEY_T = 0x0054,
- KEY_U = 0x0055,
- KEY_V = 0x0056,
- KEY_W = 0x0057,
- KEY_X = 0x0058,
- KEY_Y = 0x0059,
- KEY_Z = 0x005A,
- KEY_BRACKETLEFT = 0x005B,
- KEY_BACKSLASH = 0x005C,
- KEY_BRACKETRIGHT = 0x005D,
- KEY_ASCIICIRCUM = 0x005E,
- KEY_UNDERSCORE = 0x005F,
- KEY_QUOTELEFT = 0x0060,
- KEY_BRACELEFT = 0x007B,
- KEY_BAR = 0x007C,
- KEY_BRACERIGHT = 0x007D,
- KEY_ASCIITILDE = 0x007E,
- KEY_NOBREAKSPACE = 0x00A0,
- KEY_EXCLAMDOWN = 0x00A1,
- KEY_CENT = 0x00A2,
- KEY_STERLING = 0x00A3,
- KEY_CURRENCY = 0x00A4,
- KEY_YEN = 0x00A5,
- KEY_BROKENBAR = 0x00A6,
- KEY_SECTION = 0x00A7,
- KEY_DIAERESIS = 0x00A8,
- KEY_COPYRIGHT = 0x00A9,
- KEY_ORDFEMININE = 0x00AA,
- KEY_GUILLEMOTLEFT = 0x00AB,
- KEY_NOTSIGN = 0x00AC,
- KEY_HYPHEN = 0x00AD,
- KEY_REGISTERED = 0x00AE,
- KEY_MACRON = 0x00AF,
- KEY_DEGREE = 0x00B0,
- KEY_PLUSMINUS = 0x00B1,
- KEY_TWOSUPERIOR = 0x00B2,
- KEY_THREESUPERIOR = 0x00B3,
- KEY_ACUTE = 0x00B4,
- KEY_MU = 0x00B5,
- KEY_PARAGRAPH = 0x00B6,
- KEY_PERIODCENTERED = 0x00B7,
- KEY_CEDILLA = 0x00B8,
- KEY_ONESUPERIOR = 0x00B9,
- KEY_MASCULINE = 0x00BA,
- KEY_GUILLEMOTRIGHT = 0x00BB,
- KEY_ONEQUARTER = 0x00BC,
- KEY_ONEHALF = 0x00BD,
- KEY_THREEQUARTERS = 0x00BE,
- KEY_QUESTIONDOWN = 0x00BF,
- KEY_AGRAVE = 0x00C0,
- KEY_AACUTE = 0x00C1,
- KEY_ACIRCUMFLEX = 0x00C2,
- KEY_ATILDE = 0x00C3,
- KEY_ADIAERESIS = 0x00C4,
- KEY_ARING = 0x00C5,
- KEY_AE = 0x00C6,
- KEY_CCEDILLA = 0x00C7,
- KEY_EGRAVE = 0x00C8,
- KEY_EACUTE = 0x00C9,
- KEY_ECIRCUMFLEX = 0x00CA,
- KEY_EDIAERESIS = 0x00CB,
- KEY_IGRAVE = 0x00CC,
- KEY_IACUTE = 0x00CD,
- KEY_ICIRCUMFLEX = 0x00CE,
- KEY_IDIAERESIS = 0x00CF,
- KEY_ETH = 0x00D0,
- KEY_NTILDE = 0x00D1,
- KEY_OGRAVE = 0x00D2,
- KEY_OACUTE = 0x00D3,
- KEY_OCIRCUMFLEX = 0x00D4,
- KEY_OTILDE = 0x00D5,
- KEY_ODIAERESIS = 0x00D6,
- KEY_MULTIPLY = 0x00D7,
- KEY_OOBLIQUE = 0x00D8,
- KEY_UGRAVE = 0x00D9,
- KEY_UACUTE = 0x00DA,
- KEY_UCIRCUMFLEX = 0x00DB,
- KEY_UDIAERESIS = 0x00DC,
- KEY_YACUTE = 0x00DD,
- KEY_THORN = 0x00DE,
- KEY_SSHARP = 0x00DF,
+ COLON = 0x003A,
+ SEMICOLON = 0x003B,
+ LESS = 0x003C,
+ EQUAL = 0x003D,
+ GREATER = 0x003E,
+ QUESTION = 0x003F,
+ AT = 0x0040,
+ A = 0x0041,
+ B = 0x0042,
+ C = 0x0043,
+ D = 0x0044,
+ E = 0x0045,
+ F = 0x0046,
+ G = 0x0047,
+ H = 0x0048,
+ I = 0x0049,
+ J = 0x004A,
+ K = 0x004B,
+ L = 0x004C,
+ M = 0x004D,
+ N = 0x004E,
+ O = 0x004F,
+ P = 0x0050,
+ Q = 0x0051,
+ R = 0x0052,
+ S = 0x0053,
+ T = 0x0054,
+ U = 0x0055,
+ V = 0x0056,
+ W = 0x0057,
+ X = 0x0058,
+ Y = 0x0059,
+ Z = 0x005A,
+ BRACKETLEFT = 0x005B,
+ BACKSLASH = 0x005C,
+ BRACKETRIGHT = 0x005D,
+ ASCIICIRCUM = 0x005E,
+ UNDERSCORE = 0x005F,
+ QUOTELEFT = 0x0060,
+ BRACELEFT = 0x007B,
+ BAR = 0x007C,
+ BRACERIGHT = 0x007D,
+ ASCIITILDE = 0x007E,
+ NOBREAKSPACE = 0x00A0,
+ EXCLAMDOWN = 0x00A1,
+ CENT = 0x00A2,
+ STERLING = 0x00A3,
+ CURRENCY = 0x00A4,
+ YEN = 0x00A5,
+ BROKENBAR = 0x00A6,
+ SECTION = 0x00A7,
+ DIAERESIS = 0x00A8,
+ COPYRIGHT = 0x00A9,
+ ORDFEMININE = 0x00AA,
+ GUILLEMOTLEFT = 0x00AB,
+ NOTSIGN = 0x00AC,
+ HYPHEN = 0x00AD,
+ KEY_REGISTERED = 0x00AE, // "REGISTERED" is a reserved word on Windows.
+ MACRON = 0x00AF,
+ DEGREE = 0x00B0,
+ PLUSMINUS = 0x00B1,
+ TWOSUPERIOR = 0x00B2,
+ THREESUPERIOR = 0x00B3,
+ ACUTE = 0x00B4,
+ MU = 0x00B5,
+ PARAGRAPH = 0x00B6,
+ PERIODCENTERED = 0x00B7,
+ CEDILLA = 0x00B8,
+ ONESUPERIOR = 0x00B9,
+ MASCULINE = 0x00BA,
+ GUILLEMOTRIGHT = 0x00BB,
+ ONEQUARTER = 0x00BC,
+ ONEHALF = 0x00BD,
+ THREEQUARTERS = 0x00BE,
+ QUESTIONDOWN = 0x00BF,
+ AGRAVE = 0x00C0,
+ AACUTE = 0x00C1,
+ ACIRCUMFLEX = 0x00C2,
+ ATILDE = 0x00C3,
+ ADIAERESIS = 0x00C4,
+ ARING = 0x00C5,
+ AE = 0x00C6,
+ CCEDILLA = 0x00C7,
+ EGRAVE = 0x00C8,
+ EACUTE = 0x00C9,
+ ECIRCUMFLEX = 0x00CA,
+ EDIAERESIS = 0x00CB,
+ IGRAVE = 0x00CC,
+ IACUTE = 0x00CD,
+ ICIRCUMFLEX = 0x00CE,
+ IDIAERESIS = 0x00CF,
+ ETH = 0x00D0,
+ NTILDE = 0x00D1,
+ OGRAVE = 0x00D2,
+ OACUTE = 0x00D3,
+ OCIRCUMFLEX = 0x00D4,
+ OTILDE = 0x00D5,
+ ODIAERESIS = 0x00D6,
+ MULTIPLY = 0x00D7,
+ OOBLIQUE = 0x00D8,
+ UGRAVE = 0x00D9,
+ UACUTE = 0x00DA,
+ UCIRCUMFLEX = 0x00DB,
+ UDIAERESIS = 0x00DC,
+ YACUTE = 0x00DD,
+ THORN = 0x00DE,
+ SSHARP = 0x00DF,
- KEY_DIVISION = 0x00F7,
- KEY_YDIAERESIS = 0x00FF,
+ DIVISION = 0x00F7,
+ YDIAERESIS = 0x00FF,
+ END_LATIN1 = 0x0100,
};
-enum KeyModifierMask {
- KEY_CODE_MASK = ((1 << 25) - 1), ///< Apply this mask to any keycode to remove modifiers.
- KEY_MODIFIER_MASK = (0xFF << 24), ///< Apply this mask to isolate modifiers.
- KEY_MASK_SHIFT = (1 << 25),
- KEY_MASK_ALT = (1 << 26),
- KEY_MASK_META = (1 << 27),
- KEY_MASK_CTRL = (1 << 28),
+enum class KeyModifierMask {
+ CODE_MASK = ((1 << 25) - 1), ///< Apply this mask to any keycode to remove modifiers.
+ MODIFIER_MASK = (0xFF << 24), ///< Apply this mask to isolate modifiers.
+ SHIFT = (1 << 25),
+ ALT = (1 << 26),
+ META = (1 << 27),
+ CTRL = (1 << 28),
#ifdef APPLE_STYLE_KEYS
- KEY_MASK_CMD = KEY_MASK_META,
+ CMD = META,
#else
- KEY_MASK_CMD = KEY_MASK_CTRL,
+ CMD = CTRL,
#endif
-
- KEY_MASK_KPAD = (1 << 29),
- KEY_MASK_GROUP_SWITCH = (1 << 30)
- // bit 31 can't be used because variant uses regular 32 bits int as datatype
+ KPAD = (1 << 29),
+ GROUP_SWITCH = (1 << 30)
};
// To avoid having unnecessary operators, only define the ones that are needed.
@@ -325,10 +318,26 @@ inline Key &operator-=(Key &a, int b) {
return (Key &)((int &)a -= b);
}
+inline Key operator+(Key a, int b) {
+ return (Key)((int)a + (int)b);
+}
+
inline Key operator+(Key a, Key b) {
+ return (Key)((int)a + (int)b);
+}
+
+inline Key operator-(Key a, Key b) {
return (Key)((int)a - (int)b);
}
+inline Key operator&(Key a, Key b) {
+ return (Key)((int)a & (int)b);
+}
+
+inline Key operator|(Key a, Key b) {
+ return (Key)((int)a | (int)b);
+}
+
inline Key &operator|=(Key &a, Key b) {
return (Key &)((int &)a |= (int)b);
}
@@ -337,6 +346,10 @@ inline Key &operator|=(Key &a, KeyModifierMask b) {
return (Key &)((int &)a |= (int)b);
}
+inline Key &operator&=(Key &a, KeyModifierMask b) {
+ return (Key &)((int &)a &= (int)b);
+}
+
inline Key operator|(Key a, KeyModifierMask b) {
return (Key)((int)a | (int)b);
}
@@ -361,10 +374,10 @@ inline KeyModifierMask operator|(KeyModifierMask a, KeyModifierMask b) {
return (KeyModifierMask)((int)a | (int)b);
}
-String keycode_get_string(uint32_t p_code);
-bool keycode_has_unicode(uint32_t p_keycode);
-int find_keycode(const String &p_code);
-const char *find_keycode_name(int p_keycode);
+String keycode_get_string(Key p_code);
+bool keycode_has_unicode(Key p_keycode);
+Key find_keycode(const String &p_code);
+const char *find_keycode_name(Key p_keycode);
int keycode_get_count();
int keycode_get_value_by_index(int p_index);
const char *keycode_get_name_by_index(int p_index);
diff --git a/core/os/midi_driver.cpp b/core/os/midi_driver.cpp
index ee87346dfc..ee33eef83f 100644
--- a/core/os/midi_driver.cpp
+++ b/core/os/midi_driver.cpp
@@ -68,46 +68,46 @@ void MIDIDriver::receive_input_packet(uint64_t timestamp, uint8_t *data, uint32_
}
switch (event->get_message()) {
- case MIDI_MESSAGE_AFTERTOUCH:
+ case MIDIMessage::AFTERTOUCH:
if (length >= 2 + param_position) {
event->set_pitch(data[param_position]);
event->set_pressure(data[param_position + 1]);
}
break;
- case MIDI_MESSAGE_CONTROL_CHANGE:
+ case MIDIMessage::CONTROL_CHANGE:
if (length >= 2 + param_position) {
event->set_controller_number(data[param_position]);
event->set_controller_value(data[param_position + 1]);
}
break;
- case MIDI_MESSAGE_NOTE_ON:
- case MIDI_MESSAGE_NOTE_OFF:
+ case MIDIMessage::NOTE_ON:
+ case MIDIMessage::NOTE_OFF:
if (length >= 2 + param_position) {
event->set_pitch(data[param_position]);
event->set_velocity(data[param_position + 1]);
- if (event->get_message() == MIDI_MESSAGE_NOTE_ON && event->get_velocity() == 0) {
+ if (event->get_message() == MIDIMessage::NOTE_ON && event->get_velocity() == 0) {
// https://www.midi.org/forum/228-writing-midi-software-send-note-off,-or-zero-velocity-note-on
- event->set_message(MIDI_MESSAGE_NOTE_OFF);
+ event->set_message(MIDIMessage::NOTE_OFF);
}
}
break;
- case MIDI_MESSAGE_PITCH_BEND:
+ case MIDIMessage::PITCH_BEND:
if (length >= 2 + param_position) {
event->set_pitch((data[param_position + 1] << 7) | data[param_position]);
}
break;
- case MIDI_MESSAGE_PROGRAM_CHANGE:
+ case MIDIMessage::PROGRAM_CHANGE:
if (length >= 1 + param_position) {
event->set_instrument(data[param_position]);
}
break;
- case MIDI_MESSAGE_CHANNEL_PRESSURE:
+ case MIDIMessage::CHANNEL_PRESSURE:
if (length >= 1 + param_position) {
event->set_pressure(data[param_position]);
}
diff --git a/core/os/os.cpp b/core/os/os.cpp
index 5892f91ff3..03e251880f 100644
--- a/core/os/os.cpp
+++ b/core/os/os.cpp
@@ -440,6 +440,15 @@ bool OS::has_feature(const String &p_feature) {
if (p_feature == "riscv") {
return true;
}
+#elif defined(__powerpc__)
+#if defined(__powerpc64__)
+ if (p_feature == "ppc64") {
+ return true;
+ }
+#endif
+ if (p_feature == "ppc") {
+ return true;
+ }
#endif
if (_check_internal_feature_support(p_feature)) {
diff --git a/core/os/os.h b/core/os/os.h
index f02f600c58..3042696cce 100644
--- a/core/os/os.h
+++ b/core/os/os.h
@@ -151,6 +151,7 @@ public:
virtual String get_executable_path() const;
virtual Error execute(const String &p_path, const List<String> &p_arguments, String *r_pipe = nullptr, int *r_exitcode = nullptr, bool read_stderr = false, Mutex *p_pipe_mutex = nullptr) = 0;
virtual Error create_process(const String &p_path, const List<String> &p_arguments, ProcessID *r_child_id = nullptr) = 0;
+ virtual Error create_instance(const List<String> &p_arguments, ProcessID *r_child_id = nullptr) { return create_process(get_executable_path(), p_arguments, r_child_id); };
virtual Error kill(const ProcessID &p_pid) = 0;
virtual int get_process_id() const;
virtual void vibrate_handheld(int p_duration_ms = 500);
@@ -242,7 +243,7 @@ public:
void set_stdout_enabled(bool p_enabled);
void set_stderr_enabled(bool p_enabled);
- bool is_single_window() const;
+ virtual bool is_single_window() const;
virtual void disable_crash_handler() {}
virtual bool is_disable_crash_handler() const { return false; }
@@ -297,6 +298,7 @@ public:
virtual void set_exit_code(int p_code);
virtual int get_processor_count() const;
+ virtual int get_default_thread_pool_size() const { return get_processor_count(); }
virtual String get_unique_id() const;
diff --git a/core/string/node_path.cpp b/core/string/node_path.cpp
index 5fae13779e..7ab85ac9d0 100644
--- a/core/string/node_path.cpp
+++ b/core/string/node_path.cpp
@@ -293,12 +293,12 @@ void NodePath::simplify() {
break;
}
if (data->path[i].operator String() == ".") {
- data->path.remove(i);
+ data->path.remove_at(i);
i--;
} else if (i > 0 && data->path[i].operator String() == ".." && data->path[i - 1].operator String() != "." && data->path[i - 1].operator String() != "..") {
//remove both
- data->path.remove(i - 1);
- data->path.remove(i - 1);
+ data->path.remove_at(i - 1);
+ data->path.remove_at(i - 1);
i -= 2;
if (data->path.size() == 0) {
data->path.push_back(".");
diff --git a/core/string/translation.cpp b/core/string/translation.cpp
index 6ff31a4a02..b98aad9b58 100644
--- a/core/string/translation.cpp
+++ b/core/string/translation.cpp
@@ -938,7 +938,7 @@ void Translation::_bind_methods() {
GDVIRTUAL_BIND(_get_plural_message, "src_message", "src_plural_message", "n", "context");
GDVIRTUAL_BIND(_get_message, "src_message", "context");
- ADD_PROPERTY(PropertyInfo(Variant::DICTIONARY, "messages", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL), "_set_messages", "_get_messages");
+ ADD_PROPERTY(PropertyInfo(Variant::DICTIONARY, "messages", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL), "_set_messages", "_get_messages");
ADD_PROPERTY(PropertyInfo(Variant::STRING, "locale"), "set_locale", "get_locale");
}
diff --git a/core/string/ustring.cpp b/core/string/ustring.cpp
index 8d6da31cf3..320aae2ba4 100644
--- a/core/string/ustring.cpp
+++ b/core/string/ustring.cpp
@@ -38,6 +38,7 @@
#include "core/string/translation.h"
#include "core/string/ucaps.h"
#include "core/variant/variant.h"
+#include "core/version_generated.gen.h"
#include <stdio.h>
#include <stdlib.h>
@@ -952,10 +953,6 @@ const char32_t *String::get_data() const {
return size() ? &operator[](0) : &zero;
}
-void String::erase(int p_pos, int p_chars) {
- *this = left(MAX(p_pos, 0)) + substr(p_pos + p_chars, length() - ((p_pos + p_chars)));
-}
-
String String::capitalize() const {
String aux = this->camelcase_to_underscore(true).replace("_", " ").strip_edges();
String cap;
@@ -3673,15 +3670,15 @@ String String::simplify_path() const {
for (int i = 0; i < dirs.size(); i++) {
String d = dirs[i];
if (d == ".") {
- dirs.remove(i);
+ dirs.remove_at(i);
i--;
} else if (d == "..") {
if (i == 0) {
- dirs.remove(i);
+ dirs.remove_at(i);
i--;
} else {
- dirs.remove(i);
- dirs.remove(i - 1);
+ dirs.remove_at(i);
+ dirs.remove_at(i - 1);
i -= 2;
}
}
@@ -4420,7 +4417,7 @@ String String::property_name_encode() const {
// as well as '"', '=' or ' ' (32)
const char32_t *cstr = get_data();
for (int i = 0; cstr[i]; i++) {
- if (cstr[i] == '=' || cstr[i] == '"' || cstr[i] < 33 || cstr[i] > 126) {
+ if (cstr[i] == '=' || cstr[i] == '"' || cstr[i] == ';' || cstr[i] == '[' || cstr[i] == ']' || cstr[i] < 33 || cstr[i] > 126) {
return "\"" + c_escape_multiline() + "\"";
}
}
@@ -4872,15 +4869,20 @@ String TTRN(const String &p_text, const String &p_text_plural, int p_n, const St
return p_text_plural;
}
+/* DTR and DTRN are used for the documentation, handling descriptions extracted
+ * from the XML.
+ * They also replace `$DOCS_URL` with the actual URL to the documentation's branch,
+ * to allow dehardcoding it in the XML and doing proper substitutions everywhere.
+ */
String DTR(const String &p_text, const String &p_context) {
// Comes straight from the XML, so remove indentation and any trailing whitespace.
const String text = p_text.dedent().strip_edges();
if (TranslationServer::get_singleton()) {
- return TranslationServer::get_singleton()->doc_translate(text, p_context);
+ return String(TranslationServer::get_singleton()->doc_translate(text, p_context)).replace("$DOCS_URL", VERSION_DOCS_URL);
}
- return text;
+ return text.replace("$DOCS_URL", VERSION_DOCS_URL);
}
String DTRN(const String &p_text, const String &p_text_plural, int p_n, const String &p_context) {
@@ -4888,14 +4890,14 @@ String DTRN(const String &p_text, const String &p_text_plural, int p_n, const St
const String text_plural = p_text_plural.dedent().strip_edges();
if (TranslationServer::get_singleton()) {
- return TranslationServer::get_singleton()->doc_translate_plural(text, text_plural, p_n, p_context);
+ return String(TranslationServer::get_singleton()->doc_translate_plural(text, text_plural, p_n, p_context)).replace("$DOCS_URL", VERSION_DOCS_URL);
}
// Return message based on English plural rule if translation is not possible.
if (p_n == 1) {
- return text;
+ return text.replace("$DOCS_URL", VERSION_DOCS_URL);
}
- return text_plural;
+ return text_plural.replace("$DOCS_URL", VERSION_DOCS_URL);
}
#endif
diff --git a/core/string/ustring.h b/core/string/ustring.h
index 1d80ccf58d..f25c36f66c 100644
--- a/core/string/ustring.h
+++ b/core/string/ustring.h
@@ -209,7 +209,7 @@ public:
_FORCE_INLINE_ char32_t *ptrw() { return _cowdata.ptrw(); }
_FORCE_INLINE_ const char32_t *ptr() const { return _cowdata.ptr(); }
- void remove(int p_index) { _cowdata.remove(p_index); }
+ void remove_at(int p_index) { _cowdata.remove_at(p_index); }
_FORCE_INLINE_ void clear() { resize(0); }
diff --git a/core/templates/bin_sorted_array.h b/core/templates/bin_sorted_array.h
index be9d0b5475..8db3e7aeb8 100644
--- a/core/templates/bin_sorted_array.h
+++ b/core/templates/bin_sorted_array.h
@@ -112,7 +112,7 @@ public:
return current_idx;
}
- void remove(uint64_t p_idx) {
+ void remove_at(uint64_t p_idx) {
ERR_FAIL_COND(p_idx >= array.size());
uint64_t new_idx = move(p_idx, 0);
uint64_t swap_idx = array.size() - 1;
diff --git a/core/templates/cowdata.h b/core/templates/cowdata.h
index 9b8c0eb528..e79ca037db 100644
--- a/core/templates/cowdata.h
+++ b/core/templates/cowdata.h
@@ -167,7 +167,7 @@ public:
Error resize(int p_size);
- _FORCE_INLINE_ void remove(int p_index) {
+ _FORCE_INLINE_ void remove_at(int p_index) {
ERR_FAIL_INDEX(p_index, size());
T *p = ptrw();
int len = size();
diff --git a/core/templates/local_vector.h b/core/templates/local_vector.h
index 5704b8f230..3854e1e94c 100644
--- a/core/templates/local_vector.h
+++ b/core/templates/local_vector.h
@@ -70,7 +70,7 @@ public:
}
}
- void remove(U p_index) {
+ void remove_at(U p_index) {
ERR_FAIL_UNSIGNED_INDEX(p_index, count);
count--;
for (U i = p_index; i < count; i++) {
@@ -83,7 +83,7 @@ public:
/// Removes the item copying the last value into the position of the one to
/// remove. It's generally faster than `remove`.
- void remove_unordered(U p_index) {
+ void remove_at_unordered(U p_index) {
ERR_FAIL_INDEX(p_index, count);
count--;
if (count > p_index) {
@@ -97,7 +97,7 @@ public:
void erase(const T &p_val) {
int64_t idx = find(p_val);
if (idx >= 0) {
- remove(idx);
+ remove_at(idx);
}
}
diff --git a/core/templates/ordered_hash_map.h b/core/templates/ordered_hash_map.h
index 7a17eeb644..4996b88190 100644
--- a/core/templates/ordered_hash_map.h
+++ b/core/templates/ordered_hash_map.h
@@ -207,8 +207,12 @@ public:
(*list_element)->get().second = p_value;
return Element(*list_element);
}
- typename InternalList::Element *new_element = list.push_back(Pair<const K *, V>(nullptr, p_value));
+ // Incorrectly set the first value of the pair with a value that will
+ // be invalid as soon as we leave this function...
+ typename InternalList::Element *new_element = list.push_back(Pair<const K *, V>(&p_key, p_value));
+ // ...this is needed here in case the hashmap recursively reference itself...
typename InternalMap::Element *e = map.set(p_key, new_element);
+ // ...now we can set the right value !
new_element->get().first = &e->key();
return Element(new_element);
diff --git a/core/templates/thread_work_pool.cpp b/core/templates/thread_work_pool.cpp
index 17969a2c90..710f043a4a 100644
--- a/core/templates/thread_work_pool.cpp
+++ b/core/templates/thread_work_pool.cpp
@@ -47,7 +47,7 @@ void ThreadWorkPool::_thread_function(void *p_user) {
void ThreadWorkPool::init(int p_thread_count) {
ERR_FAIL_COND(threads != nullptr);
if (p_thread_count < 0) {
- p_thread_count = OS::get_singleton()->get_processor_count();
+ p_thread_count = OS::get_singleton()->get_default_thread_pool_size();
}
thread_count = p_thread_count;
diff --git a/core/templates/thread_work_pool.h b/core/templates/thread_work_pool.h
index b242648bc8..19096c496a 100644
--- a/core/templates/thread_work_pool.h
+++ b/core/templates/thread_work_pool.h
@@ -73,6 +73,7 @@ class ThreadWorkPool {
ThreadData *threads = nullptr;
uint32_t thread_count = 0;
+ uint32_t threads_working = 0;
BaseWork *current_work = nullptr;
static void _thread_function(void *p_user);
@@ -94,7 +95,9 @@ public:
current_work = w;
- for (uint32_t i = 0; i < thread_count; i++) {
+ threads_working = MIN(p_elements, thread_count);
+
+ for (uint32_t i = 0; i < threads_working; i++) {
threads[i].work = w;
threads[i].start.post();
}
@@ -117,19 +120,32 @@ public:
void end_work() {
ERR_FAIL_COND(current_work == nullptr);
- for (uint32_t i = 0; i < thread_count; i++) {
+ for (uint32_t i = 0; i < threads_working; i++) {
threads[i].completed.wait();
threads[i].work = nullptr;
}
+ threads_working = 0;
memdelete(current_work);
current_work = nullptr;
}
template <class C, class M, class U>
void do_work(uint32_t p_elements, C *p_instance, M p_method, U p_userdata) {
- begin_work(p_elements, p_instance, p_method, p_userdata);
- end_work();
+ switch (p_elements) {
+ case 0:
+ // Nothing to do, so do nothing.
+ break;
+ case 1:
+ // No value in pushing the work to another thread if it's a single job
+ // and we're going to wait for it to finish. Just run it right here.
+ (p_instance->*p_method)(0, p_userdata);
+ break;
+ default:
+ // Multiple jobs to do; commence threaded business.
+ begin_work(p_elements, p_instance, p_method, p_userdata);
+ end_work();
+ }
}
_FORCE_INLINE_ int get_thread_count() const { return thread_count; }
diff --git a/core/templates/vector.h b/core/templates/vector.h
index 98982c80d3..a955d49101 100644
--- a/core/templates/vector.h
+++ b/core/templates/vector.h
@@ -68,11 +68,11 @@ public:
_FORCE_INLINE_ bool append(const T &p_elem) { return push_back(p_elem); } //alias
void fill(T p_elem);
- void remove(int p_index) { _cowdata.remove(p_index); }
+ void remove_at(int p_index) { _cowdata.remove_at(p_index); }
void erase(const T &p_val) {
int idx = find(p_val);
if (idx >= 0) {
- remove(idx);
+ remove_at(idx);
}
}
void reverse();
diff --git a/core/templates/vmap.h b/core/templates/vmap.h
index 520e0b3720..2aa22f97cf 100644
--- a/core/templates/vmap.h
+++ b/core/templates/vmap.h
@@ -134,7 +134,7 @@ public:
if (pos < 0) {
return;
}
- _cowdata.remove(pos);
+ _cowdata.remove_at(pos);
}
int find(const T &p_val) const {
diff --git a/core/templates/vset.h b/core/templates/vset.h
index 6665651d42..94e7a17061 100644
--- a/core/templates/vset.h
+++ b/core/templates/vset.h
@@ -119,7 +119,7 @@ public:
if (pos < 0) {
return;
}
- _data.remove(pos);
+ _data.remove_at(pos);
}
int find(const T &p_val) const {
diff --git a/core/typedefs.h b/core/typedefs.h
index 8ca3d13e63..95bd423817 100644
--- a/core/typedefs.h
+++ b/core/typedefs.h
@@ -91,8 +91,8 @@
#define ABS(m_v) (((m_v) < 0) ? (-(m_v)) : (m_v))
#endif
-#ifndef SGN
-#define SGN(m_v) (((m_v) == 0) ? (0.0) : (((m_v) < 0) ? (-1.0) : (+1.0)))
+#ifndef SIGN
+#define SIGN(m_v) (((m_v) == 0) ? (0.0) : (((m_v) < 0) ? (-1.0) : (+1.0)))
#endif
#ifndef MIN
@@ -277,6 +277,9 @@ struct BuildIndexSequence : BuildIndexSequence<N - 1, N - 1, Is...> {};
template <size_t... Is>
struct BuildIndexSequence<0, Is...> : IndexSequence<Is...> {};
+// Limit the depth of recursive algorithms when dealing with Array/Dictionary
+#define MAX_RECURSION 100
+
#ifdef DEBUG_ENABLED
#define DEBUG_METHODS_ENABLED
#endif
diff --git a/core/variant/array.cpp b/core/variant/array.cpp
index b4d6dffc6f..b049c29688 100644
--- a/core/variant/array.cpp
+++ b/core/variant/array.cpp
@@ -97,11 +97,38 @@ void Array::clear() {
}
bool Array::operator==(const Array &p_array) const {
- return _p == p_array._p;
+ return recursive_equal(p_array, 0);
}
bool Array::operator!=(const Array &p_array) const {
- return !operator==(p_array);
+ return !recursive_equal(p_array, 0);
+}
+
+bool Array::recursive_equal(const Array &p_array, int recursion_count) const {
+ // Cheap checks
+ if (_p == p_array._p) {
+ return true;
+ }
+ const Vector<Variant> &a1 = _p->array;
+ const Vector<Variant> &a2 = p_array._p->array;
+ const int size = a1.size();
+ if (size != a2.size()) {
+ return false;
+ }
+
+ // Heavy O(n) check
+ if (recursion_count > MAX_RECURSION) {
+ ERR_PRINT("Max recursion reached");
+ return true;
+ }
+ recursion_count++;
+ for (int i = 0; i < size; i++) {
+ if (!a1[i].hash_compare(a2[i], recursion_count)) {
+ return false;
+ }
+ }
+
+ return true;
}
bool Array::operator<(const Array &p_array) const {
@@ -132,10 +159,20 @@ bool Array::operator>=(const Array &p_array) const {
}
uint32_t Array::hash() const {
- uint32_t h = hash_djb2_one_32(0);
+ return recursive_hash(0);
+}
+uint32_t Array::recursive_hash(int recursion_count) const {
+ if (recursion_count > MAX_RECURSION) {
+ ERR_PRINT("Max recursion reached");
+ return 0;
+ }
+
+ uint32_t h = hash_djb2_one_32(Variant::ARRAY);
+
+ recursion_count++;
for (int i = 0; i < _p->array.size(); i++) {
- h = hash_djb2_one_32(_p->array[i].hash(), h);
+ h = hash_djb2_one_32(_p->array[i].recursive_hash(recursion_count), h);
}
return h;
}
@@ -285,8 +322,8 @@ bool Array::has(const Variant &p_value) const {
return _p->array.find(p_value, 0) != -1;
}
-void Array::remove(int p_pos) {
- _p->array.remove(p_pos);
+void Array::remove_at(int p_pos) {
+ _p->array.remove_at(p_pos);
}
void Array::set(int p_idx, const Variant &p_value) {
@@ -300,12 +337,29 @@ const Variant &Array::get(int p_idx) const {
}
Array Array::duplicate(bool p_deep) const {
+ return recursive_duplicate(p_deep, 0);
+}
+
+Array Array::recursive_duplicate(bool p_deep, int recursion_count) const {
Array new_arr;
+
+ if (recursion_count > MAX_RECURSION) {
+ ERR_PRINT("Max recursion reached");
+ return new_arr;
+ }
+
int element_count = size();
new_arr.resize(element_count);
new_arr._p->typed = _p->typed;
- for (int i = 0; i < element_count; i++) {
- new_arr[i] = p_deep ? get(i).duplicate(p_deep) : get(i);
+ if (p_deep) {
+ recursion_count++;
+ for (int i = 0; i < element_count; i++) {
+ new_arr[i] = get(i).recursive_duplicate(true, recursion_count);
+ }
+ } else {
+ for (int i = 0; i < element_count; i++) {
+ new_arr[i] = get(i);
+ }
}
return new_arr;
@@ -522,7 +576,7 @@ Variant Array::pop_back() {
Variant Array::pop_front() {
if (!_p->array.is_empty()) {
const Variant ret = _p->array.get(0);
- _p->array.remove(0);
+ _p->array.remove_at(0);
return ret;
}
return Variant();
@@ -549,7 +603,7 @@ Variant Array::pop_at(int p_pos) {
_p->array.size()));
const Variant ret = _p->array.get(p_pos);
- _p->array.remove(p_pos);
+ _p->array.remove_at(p_pos);
return ret;
}
diff --git a/core/variant/array.h b/core/variant/array.h
index 4a1b25c4a9..5d2839dda7 100644
--- a/core/variant/array.h
+++ b/core/variant/array.h
@@ -63,8 +63,10 @@ public:
bool operator==(const Array &p_array) const;
bool operator!=(const Array &p_array) const;
+ bool recursive_equal(const Array &p_array, int recursion_count) const;
uint32_t hash() const;
+ uint32_t recursive_hash(int recursion_count) const;
void operator=(const Array &p_array);
void push_back(const Variant &p_value);
@@ -73,7 +75,7 @@ public:
Error resize(int p_new_size);
Error insert(int p_pos, const Variant &p_value);
- void remove(int p_pos);
+ void remove_at(int p_pos);
void fill(const Variant &p_value);
Variant front() const;
@@ -100,6 +102,7 @@ public:
Variant pop_at(int p_pos);
Array duplicate(bool p_deep = false) const;
+ Array recursive_duplicate(bool p_deep, int recursion_count) const;
Array slice(int p_begin, int p_end, int p_step = 1, bool p_deep = false) const;
Array filter(const Callable &p_callable) const;
diff --git a/core/variant/binder_common.h b/core/variant/binder_common.h
index f06d767cf5..98be62391f 100644
--- a/core/variant/binder_common.h
+++ b/core/variant/binder_common.h
@@ -80,7 +80,7 @@ struct VariantCaster<const T &> {
} \
typedef int64_t EncodeT; \
_FORCE_INLINE_ static void encode(m_enum p_val, const void *p_ptr) { \
- *(int64_t *)p_ptr = p_val; \
+ *(int64_t *)p_ptr = (int64_t)p_val; \
} \
};
diff --git a/core/variant/dictionary.cpp b/core/variant/dictionary.cpp
index 07b3a9a675..24d21386a7 100644
--- a/core/variant/dictionary.cpp
+++ b/core/variant/dictionary.cpp
@@ -188,11 +188,35 @@ bool Dictionary::erase(const Variant &p_key) {
}
bool Dictionary::operator==(const Dictionary &p_dictionary) const {
- return _p == p_dictionary._p;
+ return recursive_equal(p_dictionary, 0);
}
bool Dictionary::operator!=(const Dictionary &p_dictionary) const {
- return _p != p_dictionary._p;
+ return !recursive_equal(p_dictionary, 0);
+}
+
+bool Dictionary::recursive_equal(const Dictionary &p_dictionary, int recursion_count) const {
+ // Cheap checks
+ if (_p == p_dictionary._p) {
+ return true;
+ }
+ if (_p->variant_map.size() != p_dictionary._p->variant_map.size()) {
+ return false;
+ }
+
+ // Heavy O(n) check
+ if (recursion_count > MAX_RECURSION) {
+ ERR_PRINT("Max recursion reached");
+ return true;
+ }
+ recursion_count++;
+ for (OrderedHashMap<Variant, Variant, VariantHasher, VariantComparator>::ConstElement this_E = ((const OrderedHashMap<Variant, Variant, VariantHasher, VariantComparator> *)&_p->variant_map)->front(); this_E; this_E = this_E.next()) {
+ OrderedHashMap<Variant, Variant, VariantHasher, VariantComparator>::ConstElement other_E = ((const OrderedHashMap<Variant, Variant, VariantHasher, VariantComparator> *)&p_dictionary._p->variant_map)->find(this_E.key());
+ if (!other_E || !this_E.value().hash_compare(other_E.value(), recursion_count)) {
+ return false;
+ }
+ }
+ return true;
}
void Dictionary::_ref(const Dictionary &p_from) const {
@@ -225,11 +249,21 @@ void Dictionary::_unref() const {
}
uint32_t Dictionary::hash() const {
+ return recursive_hash(0);
+}
+
+uint32_t Dictionary::recursive_hash(int recursion_count) const {
+ if (recursion_count > MAX_RECURSION) {
+ ERR_PRINT("Max recursion reached");
+ return 0;
+ }
+
uint32_t h = hash_djb2_one_32(Variant::DICTIONARY);
+ recursion_count++;
for (OrderedHashMap<Variant, Variant, VariantHasher, VariantComparator>::Element E = _p->variant_map.front(); E; E = E.next()) {
- h = hash_djb2_one_32(E.key().hash(), h);
- h = hash_djb2_one_32(E.value().hash(), h);
+ h = hash_djb2_one_32(E.key().recursive_hash(recursion_count), h);
+ h = hash_djb2_one_32(E.value().recursive_hash(recursion_count), h);
}
return h;
@@ -286,10 +320,26 @@ const Variant *Dictionary::next(const Variant *p_key) const {
}
Dictionary Dictionary::duplicate(bool p_deep) const {
+ return recursive_duplicate(p_deep, 0);
+}
+
+Dictionary Dictionary::recursive_duplicate(bool p_deep, int recursion_count) const {
Dictionary n;
- for (OrderedHashMap<Variant, Variant, VariantHasher, VariantComparator>::Element E = _p->variant_map.front(); E; E = E.next()) {
- n[E.key()] = p_deep ? E.value().duplicate(true) : E.value();
+ if (recursion_count > MAX_RECURSION) {
+ ERR_PRINT("Max recursion reached");
+ return n;
+ }
+
+ if (p_deep) {
+ recursion_count++;
+ for (OrderedHashMap<Variant, Variant, VariantHasher, VariantComparator>::Element E = _p->variant_map.front(); E; E = E.next()) {
+ n[E.key().recursive_duplicate(true, recursion_count)] = E.value().recursive_duplicate(true, recursion_count);
+ }
+ } else {
+ for (OrderedHashMap<Variant, Variant, VariantHasher, VariantComparator>::Element E = _p->variant_map.front(); E; E = E.next()) {
+ n[E.key()] = E.value();
+ }
}
return n;
diff --git a/core/variant/dictionary.h b/core/variant/dictionary.h
index 4067ff9fd9..f8a2a7573f 100644
--- a/core/variant/dictionary.h
+++ b/core/variant/dictionary.h
@@ -70,8 +70,10 @@ public:
bool operator==(const Dictionary &p_dictionary) const;
bool operator!=(const Dictionary &p_dictionary) const;
+ bool recursive_equal(const Dictionary &p_dictionary, int recursion_count) const;
uint32_t hash() const;
+ uint32_t recursive_hash(int recursion_count) const;
void operator=(const Dictionary &p_dictionary);
const Variant *next(const Variant *p_key = nullptr) const;
@@ -80,6 +82,7 @@ public:
Array values() const;
Dictionary duplicate(bool p_deep = false) const;
+ Dictionary recursive_duplicate(bool p_deep, int recursion_count) const;
const void *id() const;
diff --git a/core/variant/variant.cpp b/core/variant/variant.cpp
index 1d70d4c506..c43ff8626e 100644
--- a/core/variant/variant.cpp
+++ b/core/variant/variant.cpp
@@ -784,16 +784,11 @@ bool Variant::can_convert_strict(Variant::Type p_type_from, Variant::Type p_type
}
bool Variant::operator==(const Variant &p_variant) const {
- if (type != p_variant.type) { //evaluation of operator== needs to be more strict
- return false;
- }
- bool v;
- Variant r;
- evaluate(OP_EQUAL, *this, p_variant, r, v);
- return r;
+ return hash_compare(p_variant);
}
bool Variant::operator!=(const Variant &p_variant) const {
+ // Don't use `!hash_compare(p_variant)` given it makes use of OP_EQUAL
if (type != p_variant.type) { //evaluation of operator== needs to be more strict
return true;
}
@@ -1617,25 +1612,23 @@ struct _VariantStrPair {
};
Variant::operator String() const {
- List<const void *> stack;
-
- return stringify(stack);
+ return stringify(0);
}
template <class T>
-String stringify_vector(const T &vec, List<const void *> &stack) {
+String stringify_vector(const T &vec, int recursion_count) {
String str("[");
for (int i = 0; i < vec.size(); i++) {
if (i > 0) {
str += ", ";
}
- str = str + Variant(vec[i]).stringify(stack);
+ str = str + Variant(vec[i]).stringify(recursion_count);
}
str += "]";
return str;
}
-String Variant::stringify(List<const void *> &stack) const {
+String Variant::stringify(int recursion_count) const {
switch (type) {
case NIL:
return "null";
@@ -1679,23 +1672,22 @@ String Variant::stringify(List<const void *> &stack) const {
return operator Color();
case DICTIONARY: {
const Dictionary &d = *reinterpret_cast<const Dictionary *>(_data._mem);
- if (stack.find(d.id())) {
+ if (recursion_count > MAX_RECURSION) {
+ ERR_PRINT("Max recursion reached");
return "{...}";
}
- stack.push_back(d.id());
-
- //const String *K=nullptr;
String str("{");
List<Variant> keys;
d.get_key_list(&keys);
Vector<_VariantStrPair> pairs;
- for (const Variant &E : keys) {
+ recursion_count++;
+ for (List<Variant>::Element *E = keys.front(); E; E = E->next()) {
_VariantStrPair sp;
- sp.key = E.stringify(stack);
- sp.value = d[E].stringify(stack);
+ sp.key = E->get().stringify(recursion_count);
+ sp.value = d[E->get()].stringify(recursion_count);
pairs.push_back(sp);
}
@@ -1710,46 +1702,43 @@ String Variant::stringify(List<const void *> &stack) const {
}
str += "}";
- stack.erase(d.id());
return str;
} break;
case PACKED_VECTOR2_ARRAY: {
- return stringify_vector(operator Vector<Vector2>(), stack);
+ return stringify_vector(operator Vector<Vector2>(), recursion_count);
} break;
case PACKED_VECTOR3_ARRAY: {
- return stringify_vector(operator Vector<Vector3>(), stack);
+ return stringify_vector(operator Vector<Vector3>(), recursion_count);
} break;
case PACKED_COLOR_ARRAY: {
- return stringify_vector(operator Vector<Color>(), stack);
+ return stringify_vector(operator Vector<Color>(), recursion_count);
} break;
case PACKED_STRING_ARRAY: {
- return stringify_vector(operator Vector<String>(), stack);
+ return stringify_vector(operator Vector<String>(), recursion_count);
} break;
case PACKED_BYTE_ARRAY: {
- return stringify_vector(operator Vector<uint8_t>(), stack);
+ return stringify_vector(operator Vector<uint8_t>(), recursion_count);
} break;
case PACKED_INT32_ARRAY: {
- return stringify_vector(operator Vector<int32_t>(), stack);
+ return stringify_vector(operator Vector<int32_t>(), recursion_count);
} break;
case PACKED_INT64_ARRAY: {
- return stringify_vector(operator Vector<int64_t>(), stack);
+ return stringify_vector(operator Vector<int64_t>(), recursion_count);
} break;
case PACKED_FLOAT32_ARRAY: {
- return stringify_vector(operator Vector<float>(), stack);
+ return stringify_vector(operator Vector<float>(), recursion_count);
} break;
case PACKED_FLOAT64_ARRAY: {
- return stringify_vector(operator Vector<double>(), stack);
+ return stringify_vector(operator Vector<double>(), recursion_count);
} break;
case ARRAY: {
Array arr = operator Array();
- if (stack.find(arr.id())) {
+ if (recursion_count > MAX_RECURSION) {
+ ERR_PRINT("Max recursion reached");
return "[...]";
}
- stack.push_back(arr.id());
- String str = stringify_vector(arr, stack);
-
- stack.erase(arr.id());
+ String str = stringify_vector(arr, recursion_count);
return str;
} break;
@@ -2768,6 +2757,10 @@ Variant::Variant(const Variant &p_variant) {
}
uint32_t Variant::hash() const {
+ return recursive_hash(0);
+}
+
+uint32_t Variant::recursive_hash(int recursion_count) const {
switch (type) {
case NIL: {
return 0;
@@ -2895,7 +2888,7 @@ uint32_t Variant::hash() const {
return reinterpret_cast<const NodePath *>(_data._mem)->hash();
} break;
case DICTIONARY: {
- return reinterpret_cast<const Dictionary *>(_data._mem)->hash();
+ return reinterpret_cast<const Dictionary *>(_data._mem)->recursive_hash(recursion_count);
} break;
case CALLABLE: {
@@ -2909,7 +2902,7 @@ uint32_t Variant::hash() const {
} break;
case ARRAY: {
const Array &arr = *reinterpret_cast<const Array *>(_data._mem);
- return arr.hash();
+ return arr.recursive_hash(recursion_count);
} break;
case PACKED_BYTE_ARRAY: {
@@ -3083,7 +3076,7 @@ uint32_t Variant::hash() const {
\
return true
-bool Variant::hash_compare(const Variant &p_variant) const {
+bool Variant::hash_compare(const Variant &p_variant, int recursion_count) const {
if (type != p_variant.type) {
return false;
}
@@ -3214,14 +3207,19 @@ bool Variant::hash_compare(const Variant &p_variant) const {
const Array &l = *(reinterpret_cast<const Array *>(_data._mem));
const Array &r = *(reinterpret_cast<const Array *>(p_variant._data._mem));
- if (l.size() != r.size()) {
+ if (!l.recursive_equal(r, recursion_count + 1)) {
return false;
}
- for (int i = 0; i < l.size(); ++i) {
- if (!l[i].hash_compare(r[i])) {
- return false;
- }
+ return true;
+ } break;
+
+ case DICTIONARY: {
+ const Dictionary &l = *(reinterpret_cast<const Dictionary *>(_data._mem));
+ const Dictionary &r = *(reinterpret_cast<const Dictionary *>(p_variant._data._mem));
+
+ if (!l.recursive_equal(r, recursion_count + 1)) {
+ return false;
}
return true;
diff --git a/core/variant/variant.h b/core/variant/variant.h
index d3f694e7ca..230ed33c0c 100644
--- a/core/variant/variant.h
+++ b/core/variant/variant.h
@@ -31,6 +31,7 @@
#ifndef VARIANT_H
#define VARIANT_H
+#include "core/input/input_enums.h"
#include "core/io/ip_address.h"
#include "core/math/aabb.h"
#include "core/math/basis.h"
@@ -43,6 +44,7 @@
#include "core/math/vector3.h"
#include "core/math/vector3i.h"
#include "core/object/object_id.h"
+#include "core/os/keyboard.h"
#include "core/string/node_path.h"
#include "core/string/ustring.h"
#include "core/templates/rid.h"
@@ -430,6 +432,21 @@ public:
Variant(const IPAddress &p_address);
+#define VARIANT_ENUM_CLASS_CONSTRUCTOR(m_enum) \
+ Variant(const m_enum &p_value) { \
+ type = INT; \
+ _data._int = (int64_t)p_value; \
+ }
+
+ // Only enum classes that need to be bound need this to be defined.
+ VARIANT_ENUM_CLASS_CONSTRUCTOR(JoyAxis)
+ VARIANT_ENUM_CLASS_CONSTRUCTOR(JoyButton)
+ VARIANT_ENUM_CLASS_CONSTRUCTOR(Key)
+ VARIANT_ENUM_CLASS_CONSTRUCTOR(MIDIMessage)
+ VARIANT_ENUM_CLASS_CONSTRUCTOR(MouseButton)
+
+#undef VARIANT_ENUM_CLASS_CONSTRUCTOR
+
// If this changes the table in variant_op must be updated
enum Operator {
//comparison
@@ -481,7 +498,8 @@ public:
static PTROperatorEvaluator get_ptr_operator_evaluator(Operator p_operator, Type p_type_a, Type p_type_b);
void zero();
- Variant duplicate(bool deep = false) const;
+ Variant duplicate(bool p_deep = false) const;
+ Variant recursive_duplicate(bool p_deep, int recursion_count) const;
static void blend(const Variant &a, const Variant &b, float c, Variant &r_dst);
static void interpolate(const Variant &a, const Variant &b, float c, Variant &r_dst);
@@ -659,10 +677,11 @@ public:
bool operator!=(const Variant &p_variant) const;
bool operator<(const Variant &p_variant) const;
uint32_t hash() const;
+ uint32_t recursive_hash(int recursion_count) const;
- bool hash_compare(const Variant &p_variant) const;
+ bool hash_compare(const Variant &p_variant, int recursion_count = 0) const;
bool booleanize() const;
- String stringify(List<const void *> &stack) const;
+ String stringify(int recursion_count = 0) const;
String to_json_string() const;
void static_assign(const Variant &p_variant);
diff --git a/core/variant/variant_call.cpp b/core/variant/variant_call.cpp
index ec3a6a5ca8..34b8b782d2 100644
--- a/core/variant/variant_call.cpp
+++ b/core/variant/variant_call.cpp
@@ -752,8 +752,9 @@ struct _VariantCall {
static PackedInt32Array func_PackedByteArray_decode_s32_array(PackedByteArray *p_instance) {
uint64_t size = p_instance->size();
- const uint8_t *r = p_instance->ptr();
PackedInt32Array dest;
+ ERR_FAIL_COND_V_MSG(size < sizeof(int32_t), dest, "Size didn't match array of size int32_t, maybe you are trying to convert to the wrong type?");
+ const uint8_t *r = p_instance->ptr();
dest.resize(size / sizeof(int32_t));
memcpy(dest.ptrw(), r, size);
return dest;
@@ -761,8 +762,9 @@ struct _VariantCall {
static PackedInt64Array func_PackedByteArray_decode_s64_array(PackedByteArray *p_instance) {
uint64_t size = p_instance->size();
- const uint8_t *r = p_instance->ptr();
PackedInt64Array dest;
+ ERR_FAIL_COND_V_MSG(size < sizeof(int64_t), dest, "Size didn't match array of size int64_t, maybe you are trying to convert to the wrong type?");
+ const uint8_t *r = p_instance->ptr();
dest.resize(size / sizeof(int64_t));
memcpy(dest.ptrw(), r, size);
return dest;
@@ -770,8 +772,9 @@ struct _VariantCall {
static PackedFloat32Array func_PackedByteArray_decode_float_array(PackedByteArray *p_instance) {
uint64_t size = p_instance->size();
- const uint8_t *r = p_instance->ptr();
PackedFloat32Array dest;
+ ERR_FAIL_COND_V_MSG(size < sizeof(float), dest, "Size didn't match array of size float, maybe you are trying to convert to the wrong type?");
+ const uint8_t *r = p_instance->ptr();
dest.resize(size / sizeof(float));
memcpy(dest.ptrw(), r, size);
return dest;
@@ -779,8 +782,9 @@ struct _VariantCall {
static PackedFloat64Array func_PackedByteArray_decode_double_array(PackedByteArray *p_instance) {
uint64_t size = p_instance->size();
- const uint8_t *r = p_instance->ptr();
PackedFloat64Array dest;
+ ERR_FAIL_COND_V_MSG(size < sizeof(double), dest, "Size didn't match array of size double, maybe you are trying to convert to the wrong type?");
+ const uint8_t *r = p_instance->ptr();
dest.resize(size / sizeof(double));
memcpy(dest.ptrw(), r, size);
return dest;
@@ -1366,6 +1370,7 @@ static void _register_variant_builtin_methods() {
bind_method(String, naturalnocasecmp_to, sarray("to"), varray());
bind_method(String, length, sarray(), varray());
bind_method(String, substr, sarray("from", "len"), varray(-1));
+ bind_method(String, get_slice, sarray("delimiter", "slice"), varray());
bind_methodv(String, find, static_cast<int (String::*)(const String &, int) const>(&String::find), sarray("what", "from"), varray(0));
bind_method(String, count, sarray("what", "from", "to"), varray(0, 0));
bind_method(String, countn, sarray("what", "from", "to"), varray(0, 0));
@@ -1407,8 +1412,6 @@ static void _register_variant_builtin_methods() {
bind_method(String, plus_file, sarray("file"), varray());
bind_method(String, unicode_at, sarray("at"), varray());
bind_method(String, dedent, sarray(), varray());
- // FIXME: String needs to be immutable when binding
- //bind_method(String, erase, sarray("position", "chars"), varray());
bind_method(String, hash, sarray(), varray());
bind_method(String, md5_text, sarray(), varray());
bind_method(String, sha1_text, sarray(), varray());
@@ -1417,8 +1420,6 @@ static void _register_variant_builtin_methods() {
bind_method(String, sha1_buffer, sarray(), varray());
bind_method(String, sha256_buffer, sarray(), varray());
bind_method(String, is_empty, sarray(), varray());
- // FIXME: Static function, not sure how to bind
- //bind_method(String, humanize_size, sarray("size"), varray());
bind_method(String, is_absolute_path, sarray(), varray());
bind_method(String, is_relative_path, sarray(), varray());
@@ -1630,17 +1631,15 @@ static void _register_variant_builtin_methods() {
bind_method(Color, to_argb64, sarray(), varray());
bind_method(Color, to_abgr64, sarray(), varray());
bind_method(Color, to_rgba64, sarray(), varray());
+ bind_method(Color, to_html, sarray("with_alpha"), varray(true));
bind_method(Color, clamp, sarray("min", "max"), varray(Color(0, 0, 0, 0), Color(1, 1, 1, 1)));
bind_method(Color, inverted, sarray(), varray());
bind_method(Color, lerp, sarray("to", "weight"), varray());
bind_method(Color, lightened, sarray("amount"), varray());
bind_method(Color, darkened, sarray("amount"), varray());
- bind_method(Color, to_html, sarray("with_alpha"), varray(true));
bind_method(Color, blend, sarray("over"), varray());
- // FIXME: Color is immutable, need to probably find a way to do this via constructor
- //ADDFUNC4R(COLOR, COLOR, Color, from_hsv, FLOAT, "h", FLOAT, "s", FLOAT, "v", FLOAT, "a", varray(1.0));
bind_method(Color, is_equal_approx, sarray("to"), varray());
bind_static_method(Color, hex, sarray("hex"), varray());
@@ -1652,6 +1651,7 @@ static void _register_variant_builtin_methods() {
bind_static_method(Color, get_named_color_name, sarray("idx"), varray());
bind_static_method(Color, get_named_color, sarray("idx"), varray());
bind_static_method(Color, from_string, sarray("str", "default"), varray());
+ bind_static_method(Color, from_hsv, sarray("h", "s", "v", "alpha"), varray(1.0));
bind_static_method(Color, from_rgbe9995, sarray("rgbe"), varray());
/* RID */
@@ -1747,8 +1747,8 @@ static void _register_variant_builtin_methods() {
bind_method(AABB, abs, sarray(), varray());
bind_method(AABB, get_center, sarray(), varray());
- bind_method(AABB, get_area, sarray(), varray());
- bind_method(AABB, has_no_area, sarray(), varray());
+ bind_method(AABB, get_volume, sarray(), varray());
+ bind_method(AABB, has_no_volume, sarray(), varray());
bind_method(AABB, has_no_surface, sarray(), varray());
bind_method(AABB, has_point, sarray("point"), varray());
bind_method(AABB, is_equal_approx, sarray("aabb"), varray());
@@ -1808,7 +1808,7 @@ static void _register_variant_builtin_methods() {
bind_method(Array, append_array, sarray("array"), varray());
bind_method(Array, resize, sarray("size"), varray());
bind_method(Array, insert, sarray("position", "value"), varray());
- bind_method(Array, remove, sarray("position"), varray());
+ bind_method(Array, remove_at, sarray("position"), varray());
bind_method(Array, fill, sarray("value"), varray());
bind_method(Array, erase, sarray("value"), varray());
bind_method(Array, front, sarray(), varray());
@@ -1842,7 +1842,7 @@ static void _register_variant_builtin_methods() {
bind_method(PackedByteArray, push_back, sarray("value"), varray());
bind_method(PackedByteArray, append, sarray("value"), varray());
bind_method(PackedByteArray, append_array, sarray("array"), varray());
- bind_method(PackedByteArray, remove, sarray("index"), varray());
+ bind_method(PackedByteArray, remove_at, sarray("index"), varray());
bind_method(PackedByteArray, insert, sarray("at_index", "value"), varray());
bind_method(PackedByteArray, fill, sarray("value"), varray());
bind_method(PackedByteArray, resize, sarray("new_size"), varray());
@@ -1903,7 +1903,7 @@ static void _register_variant_builtin_methods() {
bind_method(PackedInt32Array, push_back, sarray("value"), varray());
bind_method(PackedInt32Array, append, sarray("value"), varray());
bind_method(PackedInt32Array, append_array, sarray("array"), varray());
- bind_method(PackedInt32Array, remove, sarray("index"), varray());
+ bind_method(PackedInt32Array, remove_at, sarray("index"), varray());
bind_method(PackedInt32Array, insert, sarray("at_index", "value"), varray());
bind_method(PackedInt32Array, fill, sarray("value"), varray());
bind_method(PackedInt32Array, resize, sarray("new_size"), varray());
@@ -1923,7 +1923,7 @@ static void _register_variant_builtin_methods() {
bind_method(PackedInt64Array, push_back, sarray("value"), varray());
bind_method(PackedInt64Array, append, sarray("value"), varray());
bind_method(PackedInt64Array, append_array, sarray("array"), varray());
- bind_method(PackedInt64Array, remove, sarray("index"), varray());
+ bind_method(PackedInt64Array, remove_at, sarray("index"), varray());
bind_method(PackedInt64Array, insert, sarray("at_index", "value"), varray());
bind_method(PackedInt64Array, fill, sarray("value"), varray());
bind_method(PackedInt64Array, resize, sarray("new_size"), varray());
@@ -1943,7 +1943,7 @@ static void _register_variant_builtin_methods() {
bind_method(PackedFloat32Array, push_back, sarray("value"), varray());
bind_method(PackedFloat32Array, append, sarray("value"), varray());
bind_method(PackedFloat32Array, append_array, sarray("array"), varray());
- bind_method(PackedFloat32Array, remove, sarray("index"), varray());
+ bind_method(PackedFloat32Array, remove_at, sarray("index"), varray());
bind_method(PackedFloat32Array, insert, sarray("at_index", "value"), varray());
bind_method(PackedFloat32Array, fill, sarray("value"), varray());
bind_method(PackedFloat32Array, resize, sarray("new_size"), varray());
@@ -1963,7 +1963,7 @@ static void _register_variant_builtin_methods() {
bind_method(PackedFloat64Array, push_back, sarray("value"), varray());
bind_method(PackedFloat64Array, append, sarray("value"), varray());
bind_method(PackedFloat64Array, append_array, sarray("array"), varray());
- bind_method(PackedFloat64Array, remove, sarray("index"), varray());
+ bind_method(PackedFloat64Array, remove_at, sarray("index"), varray());
bind_method(PackedFloat64Array, insert, sarray("at_index", "value"), varray());
bind_method(PackedFloat64Array, fill, sarray("value"), varray());
bind_method(PackedFloat64Array, resize, sarray("new_size"), varray());
@@ -1983,7 +1983,7 @@ static void _register_variant_builtin_methods() {
bind_method(PackedStringArray, push_back, sarray("value"), varray());
bind_method(PackedStringArray, append, sarray("value"), varray());
bind_method(PackedStringArray, append_array, sarray("array"), varray());
- bind_method(PackedStringArray, remove, sarray("index"), varray());
+ bind_method(PackedStringArray, remove_at, sarray("index"), varray());
bind_method(PackedStringArray, insert, sarray("at_index", "value"), varray());
bind_method(PackedStringArray, fill, sarray("value"), varray());
bind_method(PackedStringArray, resize, sarray("new_size"), varray());
@@ -2003,7 +2003,7 @@ static void _register_variant_builtin_methods() {
bind_method(PackedVector2Array, push_back, sarray("value"), varray());
bind_method(PackedVector2Array, append, sarray("value"), varray());
bind_method(PackedVector2Array, append_array, sarray("array"), varray());
- bind_method(PackedVector2Array, remove, sarray("index"), varray());
+ bind_method(PackedVector2Array, remove_at, sarray("index"), varray());
bind_method(PackedVector2Array, insert, sarray("at_index", "value"), varray());
bind_method(PackedVector2Array, fill, sarray("value"), varray());
bind_method(PackedVector2Array, resize, sarray("new_size"), varray());
@@ -2023,7 +2023,7 @@ static void _register_variant_builtin_methods() {
bind_method(PackedVector3Array, push_back, sarray("value"), varray());
bind_method(PackedVector3Array, append, sarray("value"), varray());
bind_method(PackedVector3Array, append_array, sarray("array"), varray());
- bind_method(PackedVector3Array, remove, sarray("index"), varray());
+ bind_method(PackedVector3Array, remove_at, sarray("index"), varray());
bind_method(PackedVector3Array, insert, sarray("at_index", "value"), varray());
bind_method(PackedVector3Array, fill, sarray("value"), varray());
bind_method(PackedVector3Array, resize, sarray("new_size"), varray());
@@ -2043,7 +2043,7 @@ static void _register_variant_builtin_methods() {
bind_method(PackedColorArray, push_back, sarray("value"), varray());
bind_method(PackedColorArray, append, sarray("value"), varray());
bind_method(PackedColorArray, append_array, sarray("array"), varray());
- bind_method(PackedColorArray, remove, sarray("index"), varray());
+ bind_method(PackedColorArray, remove_at, sarray("index"), varray());
bind_method(PackedColorArray, insert, sarray("at_index", "value"), varray());
bind_method(PackedColorArray, fill, sarray("value"), varray());
bind_method(PackedColorArray, resize, sarray("new_size"), varray());
diff --git a/core/variant/variant_parser.cpp b/core/variant/variant_parser.cpp
index 221a8c4f98..3c19c2c706 100644
--- a/core/variant/variant_parser.cpp
+++ b/core/variant/variant_parser.cpp
@@ -1443,7 +1443,7 @@ static String rtos_fix(double p_value) {
}
}
-Error VariantWriter::write(const Variant &p_variant, StoreStringFunc p_store_string_func, void *p_store_string_ud, EncodeResourceFunc p_encode_res_func, void *p_encode_res_ud) {
+Error VariantWriter::write(const Variant &p_variant, StoreStringFunc p_store_string_func, void *p_store_string_ud, EncodeResourceFunc p_encode_res_func, void *p_encode_res_ud, int recursion_count) {
switch (p_variant.get_type()) {
case Variant::NIL: {
p_store_string_func(p_store_string_ud, "null");
@@ -1639,41 +1639,56 @@ Error VariantWriter::write(const Variant &p_variant, StoreStringFunc p_store_str
case Variant::DICTIONARY: {
Dictionary dict = p_variant;
-
- List<Variant> keys;
- dict.get_key_list(&keys);
- keys.sort();
-
- p_store_string_func(p_store_string_ud, "{\n");
- for (List<Variant>::Element *E = keys.front(); E; E = E->next()) {
- /*
- if (!_check_type(dict[E]))
- continue;
- */
- write(E->get(), p_store_string_func, p_store_string_ud, p_encode_res_func, p_encode_res_ud);
- p_store_string_func(p_store_string_ud, ": ");
- write(dict[E->get()], p_store_string_func, p_store_string_ud, p_encode_res_func, p_encode_res_ud);
- if (E->next()) {
- p_store_string_func(p_store_string_ud, ",\n");
- } else {
- p_store_string_func(p_store_string_ud, "\n");
+ if (recursion_count > MAX_RECURSION) {
+ ERR_PRINT("Max recursion reached");
+ p_store_string_func(p_store_string_ud, "{}");
+ } else {
+ recursion_count++;
+
+ List<Variant> keys;
+ dict.get_key_list(&keys);
+ keys.sort();
+
+ p_store_string_func(p_store_string_ud, "{\n");
+ for (List<Variant>::Element *E = keys.front(); E; E = E->next()) {
+ /*
+ if (!_check_type(dict[E->get()]))
+ continue;
+ */
+ write(E->get(), p_store_string_func, p_store_string_ud, p_encode_res_func, p_encode_res_ud, recursion_count);
+ p_store_string_func(p_store_string_ud, ": ");
+ write(dict[E->get()], p_store_string_func, p_store_string_ud, p_encode_res_func, p_encode_res_ud, recursion_count);
+ if (E->next()) {
+ p_store_string_func(p_store_string_ud, ",\n");
+ } else {
+ p_store_string_func(p_store_string_ud, "\n");
+ }
}
- }
- p_store_string_func(p_store_string_ud, "}");
+ p_store_string_func(p_store_string_ud, "}");
+ }
} break;
+
case Variant::ARRAY: {
- p_store_string_func(p_store_string_ud, "[");
- Array array = p_variant;
- int len = array.size();
- for (int i = 0; i < len; i++) {
- if (i > 0) {
- p_store_string_func(p_store_string_ud, ", ");
+ if (recursion_count > MAX_RECURSION) {
+ ERR_PRINT("Max recursion reached");
+ p_store_string_func(p_store_string_ud, "[]");
+ } else {
+ recursion_count++;
+
+ p_store_string_func(p_store_string_ud, "[");
+ Array array = p_variant;
+ int len = array.size();
+ for (int i = 0; i < len; i++) {
+ if (i > 0) {
+ p_store_string_func(p_store_string_ud, ", ");
+ }
+ write(array[i], p_store_string_func, p_store_string_ud, p_encode_res_func, p_encode_res_ud, recursion_count);
}
- write(array[i], p_store_string_func, p_store_string_ud, p_encode_res_func, p_encode_res_ud);
+
+ p_store_string_func(p_store_string_ud, "]");
}
- p_store_string_func(p_store_string_ud, "]");
} break;
diff --git a/core/variant/variant_parser.h b/core/variant/variant_parser.h
index 1ba26db6ed..2e4baa6fff 100644
--- a/core/variant/variant_parser.h
+++ b/core/variant/variant_parser.h
@@ -140,7 +140,7 @@ public:
typedef Error (*StoreStringFunc)(void *ud, const String &p_string);
typedef String (*EncodeResourceFunc)(void *ud, const RES &p_resource);
- static Error write(const Variant &p_variant, StoreStringFunc p_store_string_func, void *p_store_string_ud, EncodeResourceFunc p_encode_res_func, void *p_encode_res_ud);
+ static Error write(const Variant &p_variant, StoreStringFunc p_store_string_func, void *p_store_string_ud, EncodeResourceFunc p_encode_res_func, void *p_encode_res_ud, int recursion_count = 0);
static Error write_to_string(const Variant &p_variant, String &r_string, EncodeResourceFunc p_encode_res_func = nullptr, void *p_encode_res_ud = nullptr);
};
diff --git a/core/variant/variant_setget.cpp b/core/variant/variant_setget.cpp
index 4abb51ca7c..b6ad2d870e 100644
--- a/core/variant/variant_setget.cpp
+++ b/core/variant/variant_setget.cpp
@@ -704,7 +704,7 @@ struct VariantIndexedSetGet_String {
String *b = VariantGetInternalPtr<String>::get_ptr(base);
const String *v = VariantInternal::get_string(value);
if (v->length() == 0) {
- b->remove(index);
+ b->remove_at(index);
} else {
b->set(index, v->get(0));
}
@@ -723,7 +723,7 @@ struct VariantIndexedSetGet_String {
String *b = VariantGetInternalPtr<String>::get_ptr(base);
const String *v = VariantInternal::get_string(value);
if (v->length() == 0) {
- b->remove(index);
+ b->remove_at(index);
} else {
b->set(index, v->get(0));
}
@@ -738,7 +738,7 @@ struct VariantIndexedSetGet_String {
OOB_TEST(index, v.length());
const String &m = *reinterpret_cast<const String *>(member);
if (unlikely(m.length() == 0)) {
- v.remove(index);
+ v.remove_at(index);
} else {
v.set(index, m.unicode_at(0));
}
@@ -1824,11 +1824,15 @@ Variant Variant::iter_get(const Variant &r_iter, bool &r_valid) const {
return Variant();
}
-Variant Variant::duplicate(bool deep) const {
+Variant Variant::duplicate(bool p_deep) const {
+ return recursive_duplicate(p_deep, 0);
+}
+
+Variant Variant::recursive_duplicate(bool p_deep, int recursion_count) const {
switch (type) {
case OBJECT: {
/* breaks stuff :(
- if (deep && !_get_obj().ref.is_null()) {
+ if (p_deep && !_get_obj().ref.is_null()) {
Ref<Resource> resource = _get_obj().ref;
if (resource.is_valid()) {
return resource->duplicate(true);
@@ -1838,9 +1842,9 @@ Variant Variant::duplicate(bool deep) const {
return *this;
} break;
case DICTIONARY:
- return operator Dictionary().duplicate(deep);
+ return operator Dictionary().recursive_duplicate(p_deep, recursion_count);
case ARRAY:
- return operator Array().duplicate(deep);
+ return operator Array().recursive_duplicate(p_deep, recursion_count);
case PACKED_BYTE_ARRAY:
return operator Vector<uint8_t>().duplicate();
case PACKED_INT32_ARRAY:
diff --git a/core/variant/variant_utility.cpp b/core/variant/variant_utility.cpp
index 666b582e39..554b2f1c25 100644
--- a/core/variant/variant_utility.cpp
+++ b/core/variant/variant_utility.cpp
@@ -151,10 +151,10 @@ struct VariantUtilityFunctions {
r_error.error = Callable::CallError::CALL_OK;
switch (x.get_type()) {
case Variant::INT: {
- return SGN(VariantInternalAccessor<int64_t>::get(&x));
+ return SIGN(VariantInternalAccessor<int64_t>::get(&x));
} break;
case Variant::FLOAT: {
- return SGN(VariantInternalAccessor<double>::get(&x));
+ return SIGN(VariantInternalAccessor<double>::get(&x));
} break;
case Variant::VECTOR2: {
return VariantInternalAccessor<Vector2>::get(&x).sign();
@@ -176,11 +176,11 @@ struct VariantUtilityFunctions {
}
static inline double signf(double x) {
- return SGN(x);
+ return SIGN(x);
}
static inline int64_t signi(int64_t x) {
- return SGN(x);
+ return SIGN(x);
}
static inline double pow(double x, double y) {
@@ -275,6 +275,10 @@ struct VariantUtilityFunctions {
return Math::wrapf(value, min, max);
}
+ static inline double pingpong(double value, double length) {
+ return Math::pingpong(value, length);
+ }
+
static inline Variant max(const Variant **p_args, int p_argcount, Callable::CallError &r_error) {
if (p_argcount < 2) {
r_error.error = Callable::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS;
@@ -399,6 +403,10 @@ struct VariantUtilityFunctions {
return Math::randf();
}
+ static inline double randfn(double mean, double deviation) {
+ return Math::randfn(mean, deviation);
+ }
+
static inline int64_t randi_range(int64_t from, int64_t to) {
return Math::random((int32_t)from, (int32_t)to);
}
@@ -1226,6 +1234,7 @@ void Variant::_register_variant_utility_functions() {
FUNCBINDR(clampf, sarray("value", "min", "max"), Variant::UTILITY_FUNC_TYPE_MATH);
FUNCBINDR(nearest_po2, sarray("value"), Variant::UTILITY_FUNC_TYPE_MATH);
+ FUNCBINDR(pingpong, sarray("value", "length"), Variant::UTILITY_FUNC_TYPE_MATH);
// Random
@@ -1234,6 +1243,7 @@ void Variant::_register_variant_utility_functions() {
FUNCBINDR(randf, sarray(), Variant::UTILITY_FUNC_TYPE_RANDOM);
FUNCBINDR(randi_range, sarray("from", "to"), Variant::UTILITY_FUNC_TYPE_RANDOM);
FUNCBINDR(randf_range, sarray("from", "to"), Variant::UTILITY_FUNC_TYPE_RANDOM);
+ FUNCBINDR(randfn, sarray("mean", "deviation"), Variant::UTILITY_FUNC_TYPE_RANDOM);
FUNCBIND(seed, sarray("base"), Variant::UTILITY_FUNC_TYPE_RANDOM);
FUNCBINDR(rand_from_seed, sarray("seed"), Variant::UTILITY_FUNC_TYPE_RANDOM);
diff --git a/doc/classes/@GlobalScope.xml b/doc/classes/@GlobalScope.xml
index 4b710d5f12..41cc043a74 100644
--- a/doc/classes/@GlobalScope.xml
+++ b/doc/classes/@GlobalScope.xml
@@ -1,19 +1,41 @@
<?xml version="1.0" encoding="UTF-8" ?>
<class name="@GlobalScope" version="4.0">
<brief_description>
- Global scope constants and variables.
+ Global scope constants and functions.
</brief_description>
<description>
- Global scope constants and variables. This is all that resides in the globals, constants regarding error codes, keycodes, property hints, etc.
+ A list of global scope enumerated constants and built-in functions. This is all that resides in the globals, constants regarding error codes, keycodes, property hints, etc.
Singletons are also documented here, since they can be accessed from anywhere.
+ For the entries related to GDScript which can be accessed in any script see [@GDScript].
</description>
<tutorials>
+ <link title="Random number generation">$DOCS_URL/tutorials/math/random_number_generation.html</link>
</tutorials>
<methods>
<method name="abs">
<return type="Variant" />
<argument index="0" name="x" type="Variant" />
<description>
+ Returns the absolute value of a [Variant] parameter [code]x[/code] (i.e. non-negative value). Variant types [int], [float] (real), [Vector2], [Vector2i], [Vector3] and [Vector3i] are supported.
+ [codeblock]
+ var a = abs(-1)
+ # a is 1
+
+ var b = abs(-1.2)
+ # b is 1.2
+
+ var c = abs(Vector2(-3.5, -4))
+ # c is (3.5, 4)
+
+ var d = abs(Vector2i(-5, -6))
+ # d is (5, 6)
+
+ var e = abs(Vector3(-7, 8.5, -3.8))
+ # e is (7, 8.5, 3.8)
+
+ var f = abs(Vector3i(-7, -8, -9))
+ # f is (7, 8, 9)
+ [/codeblock]
</description>
</method>
<method name="absf">
@@ -118,6 +140,26 @@
<argument index="1" name="min" type="Variant" />
<argument index="2" name="max" type="Variant" />
<description>
+ Clamps the [Variant] [code]value[/code] and returns a value not less than [code]min[/code] and not more than [code]max[/code]. Variant types [int], [float] (real), [Vector2], [Vector2i], [Vector3] and [Vector3i] are supported.
+ [codeblock]
+ var a = clamp(-10, -1, 5)
+ # a is -1
+
+ var b = clamp(8.1, 0.9, 5.5)
+ # b is 5.5
+
+ var c = clamp(Vector2(-3.5, -4), Vector2(-3.2, -2), Vector2(2, 6.5))
+ # c is (-3.2, -2)
+
+ var d = clamp(Vector2i(7, 8), Vector2i(-3, -2), Vector2i(2, 6))
+ # d is (2, 6)
+
+ var e = clamp(Vector3(-7, 8.5, -3.8), Vector3(-3, -2, 5.4), Vector3(-2, 6, -4.1))
+ # e is (-3, -2, 5.4)
+
+ var f = clamp(Vector3i(-7, -8, -9), Vector3i(-1, 2, 3), Vector3i(-4, -5, -6))
+ # f is (-4, -5, -6)
+ [/codeblock]
</description>
</method>
<method name="clampf">
@@ -208,9 +250,9 @@
- 1.0: Linear
- Between -1.0 and 0.0 (exclusive): Ease out-in
- 0.0: Constant
- - Between 0.0 to 1.0 (exclusive): Ease in
+ - Between 0.0 to 1.0 (exclusive): Ease out
- 1.0: Linear
- - Greater than 1.0 (exclusive): Ease out
+ - Greater than 1.0 (exclusive): Ease in
[/codeblock]
[url=https://raw.githubusercontent.com/godotengine/godot-docs/master/img/ease_cheatsheet.png]ease() curve values cheatsheet[/url]
See also [method smoothstep]. If you need to perform more advanced transitions, use [Tween] or [AnimationPlayer].
@@ -347,6 +389,7 @@
<return type="bool" />
<argument index="0" name="id" type="int" />
<description>
+ Returns [code]true[/code] if the Object that corresponds to [code]instance_id[/code] is a valid object (e.g. has not been deleted from memory). All Objects have a unique instance ID.
</description>
</method>
<method name="is_instance_valid">
@@ -525,6 +568,26 @@
[b]Warning:[/b] Due to the way it is implemented, this function returns [code]0[/code] rather than [code]1[/code] for non-positive values of [code]value[/code] (in reality, 1 is the smallest integer power of 2).
</description>
</method>
+ <method name="pingpong">
+ <return type="float" />
+ <argument index="0" name="value" type="float" />
+ <argument index="1" name="length" type="float" />
+ <description>
+ Returns the [code]value[/code] wrapped between [code]0[/code] and the [code]length[/code]. If the limit is reached, the next value the function returned is decreased to the [code]0[/code] side or increased to the [code]length[/code] side (like a triangle wave). If [code]length[/code] is less than zero, it becomes positive.
+ [codeblock]
+ pingpong(-3.0, 3.0) # Returns 3
+ pingpong(-2.0, 3.0) # Returns 2
+ pingpong(-1.0, 3.0) # Returns 1
+ pingpong(0.0, 3.0) # Returns 0
+ pingpong(1.0, 3.0) # Returns 1
+ pingpong(2.0, 3.0) # Returns 2
+ pingpong(3.0, 3.0) # Returns 3
+ pingpong(4.0, 3.0) # Returns 2
+ pingpong(5.0, 3.0) # Returns 1
+ pingpong(6.0, 3.0) # Returns 0
+ [/codeblock]
+ </description>
+ </method>
<method name="posmod">
<return type="int" />
<argument index="0" name="x" type="int" />
@@ -662,6 +725,14 @@
[/codeblock]
</description>
</method>
+ <method name="randfn">
+ <return type="float" />
+ <argument index="0" name="mean" type="float" />
+ <argument index="1" name="deviation" type="float" />
+ <description>
+ Returns a normally-distributed pseudo-random floating point value using Box-Muller transform with the specified [code]mean[/code] and a standard [code]deviation[/code]. This is also called Gaussian distribution.
+ </description>
+ </method>
<method name="randi">
<return type="int" />
<description>
@@ -750,6 +821,14 @@
<return type="Variant" />
<argument index="0" name="x" type="Variant" />
<description>
+ Returns the sign of [code]x[/code] as same type of [Variant] as [code]x[/code] with each component being -1, 0 and 1 for each negative, zero and positive values respectivelu. Variant types [int], [float] (real), [Vector2], [Vector2i], [Vector3] and [Vector3i] are supported.
+ [codeblock]
+ sign(-6.0) # Returns -1
+ sign(0.0) # Returns 0
+ sign(6.0) # Returns 1
+
+ sign(Vector3(-6.0, 0.0, 6.0) # Returns (-1, 0, 1)
+ [/codeblock]
</description>
</method>
<method name="signf">
@@ -1182,7 +1261,7 @@
<constant name="INLINE_ALIGN_BOTTOM" value="14" enum="InlineAlign">
Aligns bottom of the inline object (e.g. image, table) to the bottom of the text. Equvalent to [code]INLINE_ALIGN_BOTTOM_TO | INLINE_ALIGN_TO_BOTTOM[/code].
</constant>
- <constant name="SPKEY" value="16777216">
+ <constant name="KEY_SPECIAL" value="16777216" enum="Key">
Keycodes with this bit applied are non-printable.
</constant>
<constant name="KEY_ESCAPE" value="16777217" enum="Key">
@@ -1947,12 +2026,6 @@
<constant name="MOUSE_BUTTON_MIDDLE" value="3" enum="MouseButton">
Middle mouse button.
</constant>
- <constant name="MOUSE_BUTTON_XBUTTON1" value="8" enum="MouseButton">
- Extra mouse button 1 (only present on some mice).
- </constant>
- <constant name="MOUSE_BUTTON_XBUTTON2" value="9" enum="MouseButton">
- Extra mouse button 2 (only present on some mice).
- </constant>
<constant name="MOUSE_BUTTON_WHEEL_UP" value="4" enum="MouseButton">
Mouse wheel up.
</constant>
@@ -1965,6 +2038,12 @@
<constant name="MOUSE_BUTTON_WHEEL_RIGHT" value="7" enum="MouseButton">
Mouse wheel right button (only present on some mice).
</constant>
+ <constant name="MOUSE_BUTTON_XBUTTON1" value="8" enum="MouseButton">
+ Extra mouse button 1 (only present on some mice).
+ </constant>
+ <constant name="MOUSE_BUTTON_XBUTTON2" value="9" enum="MouseButton">
+ Extra mouse button 2 (only present on some mice).
+ </constant>
<constant name="MOUSE_BUTTON_MASK_LEFT" value="1" enum="MouseButton">
Left mouse button mask.
</constant>
@@ -2453,7 +2532,7 @@
<constant name="PROPERTY_USAGE_DEFAULT_INTL" value="71" enum="PropertyUsageFlags">
Default usage for translatable strings (storage, editor, network and internationalized).
</constant>
- <constant name="PROPERTY_USAGE_NOEDITOR" value="5" enum="PropertyUsageFlags">
+ <constant name="PROPERTY_USAGE_NO_EDITOR" value="5" enum="PropertyUsageFlags">
Default usage but without showing the property in the editor (storage, network).
</constant>
<constant name="METHOD_FLAG_NORMAL" value="1" enum="MethodFlags">
diff --git a/doc/classes/AABB.xml b/doc/classes/AABB.xml
index d7b7a309ad..170cfea6f9 100644
--- a/doc/classes/AABB.xml
+++ b/doc/classes/AABB.xml
@@ -9,9 +9,9 @@
[b]Note:[/b] Unlike [Rect2], [AABB] does not have a variant that uses integer coordinates.
</description>
<tutorials>
- <link title="Math documentation index">https://docs.godotengine.org/en/latest/tutorials/math/index.html</link>
- <link title="Vector math">https://docs.godotengine.org/en/latest/tutorials/math/vector_math.html</link>
- <link title="Advanced vector math">https://docs.godotengine.org/en/latest/tutorials/math/vectors_advanced.html</link>
+ <link title="Math documentation index">$DOCS_URL/tutorials/math/index.html</link>
+ <link title="Vector math">$DOCS_URL/tutorials/math/vector_math.html</link>
+ <link title="Advanced vector math">$DOCS_URL/tutorials/math/vectors_advanced.html</link>
</tutorials>
<constructors>
<constructor name="AABB">
@@ -54,13 +54,22 @@
<return type="AABB" />
<argument index="0" name="to_point" type="Vector3" />
<description>
- Returns this [AABB] expanded to include a given point.
- </description>
- </method>
- <method name="get_area" qualifiers="const">
- <return type="float" />
- <description>
- Returns the volume of the [AABB].
+ Returns a copy of this [AABB] expanded to include a given point.
+ [b]Example:[/b]
+ [codeblocks]
+ [gdscript]
+ # position (-3, 2, 0), size (1, 1, 1)
+ var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))
+ # position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and Vector3(0, -1, 2)
+ var box2 = box.expand(Vector3(0, -1, 2))
+ [/gdscript]
+ [csharp]
+ // position (-3, 2, 0), size (1, 1, 1)
+ var box = new AABB(new Vector3(-3, 2, 0), new Vector3(1, 1, 1));
+ // position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and Vector3(0, -1, 2)
+ var box2 = box.Expand(new Vector3(0, -1, 2));
+ [/csharp]
+ [/codeblocks]
</description>
</method>
<method name="get_center" qualifiers="const">
@@ -119,6 +128,12 @@
Returns the support point in a given direction. This is useful for collision detection algorithms.
</description>
</method>
+ <method name="get_volume" qualifiers="const">
+ <return type="float" />
+ <description>
+ Returns the volume of the [AABB].
+ </description>
+ </method>
<method name="grow" qualifiers="const">
<return type="AABB" />
<argument index="0" name="by" type="float" />
@@ -126,16 +141,16 @@
Returns a copy of the [AABB] grown a given amount of units towards all the sides.
</description>
</method>
- <method name="has_no_area" qualifiers="const">
+ <method name="has_no_surface" qualifiers="const">
<return type="bool" />
<description>
- Returns [code]true[/code] if the [AABB] is flat or empty.
+ Returns [code]true[/code] if the [AABB] is empty.
</description>
</method>
- <method name="has_no_surface" qualifiers="const">
+ <method name="has_no_volume" qualifiers="const">
<return type="bool" />
<description>
- Returns [code]true[/code] if the [AABB] is empty.
+ Returns [code]true[/code] if the [AABB] is flat or empty.
</description>
</method>
<method name="has_point" qualifiers="const">
@@ -218,12 +233,15 @@
<return type="bool" />
<argument index="0" name="right" type="AABB" />
<description>
+ Returns [code]true[/code] if the vectors are not equal.
+ [b]Note:[/b] Due to floating-point precision errors, consider using [method is_equal_approx] instead, which is more reliable.
</description>
</operator>
<operator name="operator *">
<return type="AABB" />
<argument index="0" name="right" type="Transform3D" />
<description>
+ Inversely transforms (multiplies) the [AABB] by the given [Transform3D] transformation matrix.
</description>
</operator>
<operator name="operator ==">
@@ -235,6 +253,8 @@
<return type="bool" />
<argument index="0" name="right" type="AABB" />
<description>
+ Returns [code]true[/code] if the AABBs are exactly equal.
+ [b]Note:[/b] Due to floating-point precision errors, consider using [method is_equal_approx] instead, which is more reliable.
</description>
</operator>
</operators>
diff --git a/doc/classes/AnimatedSprite2D.xml b/doc/classes/AnimatedSprite2D.xml
index b468e1d109..789c6bd960 100644
--- a/doc/classes/AnimatedSprite2D.xml
+++ b/doc/classes/AnimatedSprite2D.xml
@@ -8,7 +8,7 @@
[b]Note:[/b] You can associate a set of normal or specular maps by creating additional [SpriteFrames] resources with a [code]_normal[/code] or [code]_specular[/code] suffix. For example, having 3 [SpriteFrames] resources [code]run[/code], [code]run_normal[/code], and [code]run_specular[/code] will make it so the [code]run[/code] animation uses normal and specular maps.
</description>
<tutorials>
- <link title="2D Sprite animation">https://docs.godotengine.org/en/latest/tutorials/2d/2d_sprite_animation.html</link>
+ <link title="2D Sprite animation">$DOCS_URL/tutorials/2d/2d_sprite_animation.html</link>
<link title="2D Dodge The Creeps Demo">https://godotengine.org/asset-library/asset/515</link>
</tutorials>
<methods>
diff --git a/doc/classes/AnimatedSprite3D.xml b/doc/classes/AnimatedSprite3D.xml
index 59d7553ef4..38a87c1b2b 100644
--- a/doc/classes/AnimatedSprite3D.xml
+++ b/doc/classes/AnimatedSprite3D.xml
@@ -7,7 +7,7 @@
Animations are created using a [SpriteFrames] resource, which can be configured in the editor via the SpriteFrames panel.
</description>
<tutorials>
- <link title="2D Sprite animation (also applies to 3D)">https://docs.godotengine.org/en/latest/tutorials/2d/2d_sprite_animation.html</link>
+ <link title="2D Sprite animation (also applies to 3D)">$DOCS_URL/tutorials/2d/2d_sprite_animation.html</link>
</tutorials>
<methods>
<method name="is_playing" qualifiers="const">
diff --git a/doc/classes/Animation.xml b/doc/classes/Animation.xml
index e3bb60f6de..bb4089d67e 100644
--- a/doc/classes/Animation.xml
+++ b/doc/classes/Animation.xml
@@ -28,7 +28,7 @@
Animations are just data containers, and must be added to nodes such as an [AnimationPlayer] to be played back. Animation tracks have different types, each with its own set of dedicated methods. Check [enum TrackType] to see available types.
</description>
<tutorials>
- <link title="Animation documentation index">https://docs.godotengine.org/en/latest/tutorials/animation/index.html</link>
+ <link title="Animation documentation index">$DOCS_URL/tutorials/animation/index.html</link>
</tutorials>
<methods>
<method name="add_track">
@@ -130,6 +130,14 @@
Sets the stream of the key identified by [code]key_idx[/code] to value [code]stream[/code]. The [code]track_idx[/code] must be the index of an Audio Track.
</description>
</method>
+ <method name="bezier_track_get_key_handle_mode" qualifiers="const">
+ <return type="int" />
+ <argument index="0" name="track_idx" type="int" />
+ <argument index="1" name="key_idx" type="int" />
+ <description>
+ Returns the handle mode of the key identified by [code]index[/code]. See [enum HandleMode] for possible values. The [code]track_idx[/code] must be the index of a Bezier Track.
+ </description>
+ </method>
<method name="bezier_track_get_key_in_handle" qualifiers="const">
<return type="Vector2" />
<argument index="0" name="track_idx" type="int" />
@@ -161,6 +169,7 @@
<argument index="2" name="value" type="float" />
<argument index="3" name="in_handle" type="Vector2" default="Vector2(0, 0)" />
<argument index="4" name="out_handle" type="Vector2" default="Vector2(0, 0)" />
+ <argument index="5" name="handle_mode" type="int" enum="Animation.HandleMode" default="1" />
<description>
Inserts a Bezier Track key at the given [code]time[/code] in seconds. The [code]track_idx[/code] must be the index of a Bezier Track.
[code]in_handle[/code] is the left-side weight of the added Bezier curve point, [code]out_handle[/code] is the right-side one, while [code]value[/code] is the actual value at this point.
@@ -174,11 +183,22 @@
Returns the interpolated value at the given [code]time[/code] (in seconds). The [code]track_idx[/code] must be the index of a Bezier Track.
</description>
</method>
+ <method name="bezier_track_set_key_handle_mode">
+ <return type="void" />
+ <argument index="0" name="track_idx" type="int" />
+ <argument index="1" name="key_idx" type="int" />
+ <argument index="2" name="key_handle_mode" type="int" enum="Animation.HandleMode" />
+ <argument index="3" name="balanced_value_time_ratio" type="float" default="1.0" />
+ <description>
+ Changes the handle mode of the keyframe at the given [code]index[/code]. See [enum HandleMode] for possible values. The [code]track_idx[/code] must be the index of a Bezier Track.
+ </description>
+ </method>
<method name="bezier_track_set_key_in_handle">
<return type="void" />
<argument index="0" name="track_idx" type="int" />
<argument index="1" name="key_idx" type="int" />
<argument index="2" name="in_handle" type="Vector2" />
+ <argument index="3" name="balanced_value_time_ratio" type="float" default="1.0" />
<description>
Sets the in handle of the key identified by [code]key_idx[/code] to value [code]in_handle[/code]. The [code]track_idx[/code] must be the index of a Bezier Track.
</description>
@@ -188,6 +208,7 @@
<argument index="0" name="track_idx" type="int" />
<argument index="1" name="key_idx" type="int" />
<argument index="2" name="out_handle" type="Vector2" />
+ <argument index="3" name="balanced_value_time_ratio" type="float" default="1.0" />
<description>
Sets the out handle of the key identified by [code]key_idx[/code] to value [code]out_handle[/code]. The [code]track_idx[/code] must be the index of a Bezier Track.
</description>
@@ -551,8 +572,8 @@
The total length of the animation (in seconds).
[b]Note:[/b] Length is not delimited by the last key, as this one may be before or after the end to ensure correct interpolation and looping.
</member>
- <member name="loop" type="bool" setter="set_loop" getter="has_loop" default="false">
- A flag indicating that the animation must loop. This is used for correct interpolation of animation cycles, and for hinting the player that it must restart the animation.
+ <member name="loop_mode" type="int" setter="set_loop_mode" getter="get_loop_mode" enum="Animation.LoopMode" default="0">
+ Determines the behavior of both ends of the animation timeline during animation playback. This is used for correct interpolation of animation cycles, and for hinting the player that it must restart the animation.
</member>
<member name="step" type="float" setter="set_step" getter="get_step" default="0.1">
The animation step value.
@@ -610,5 +631,20 @@
<constant name="UPDATE_CAPTURE" value="3" enum="UpdateMode">
Same as linear interpolation, but also interpolates from the current value (i.e. dynamically at runtime) if the first key isn't at 0 seconds.
</constant>
+ <constant name="LOOP_NONE" value="0" enum="LoopMode">
+ At both ends of the animation, the animation will stop playing.
+ </constant>
+ <constant name="LOOP_LINEAR" value="1" enum="LoopMode">
+ At both ends of the animation, the animation will be repeated without changing the playback direction.
+ </constant>
+ <constant name="LOOP_PINGPONG" value="2" enum="LoopMode">
+ Repeats playback and reverse playback at both ends of the animation.
+ </constant>
+ <constant name="HANDLE_MODE_FREE" value="0" enum="HandleMode">
+ Assigning the free handle mode to a Bezier Track's keyframe allows you to edit the keyframe's left and right handles independently from one another.
+ </constant>
+ <constant name="HANDLE_MODE_BALANCED" value="1" enum="HandleMode">
+ Assigning the balanced handle mode to a Bezier Track's keyframe makes it so the two handles of the keyframe always stay aligned when changing either the keyframe's left or right handle.
+ </constant>
</constants>
</class>
diff --git a/doc/classes/AnimationNode.xml b/doc/classes/AnimationNode.xml
index 173ff43d2a..c9d8ae9936 100644
--- a/doc/classes/AnimationNode.xml
+++ b/doc/classes/AnimationNode.xml
@@ -8,7 +8,7 @@
Inherit this when creating nodes mainly for use in [AnimationNodeBlendTree], otherwise [AnimationRootNode] should be used instead.
</description>
<tutorials>
- <link title="AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link>
+ <link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
</tutorials>
<methods>
<method name="_get_caption" qualifiers="virtual const">
@@ -73,6 +73,7 @@
<argument index="2" name="delta" type="float" />
<argument index="3" name="seeked" type="bool" />
<argument index="4" name="blend" type="float" />
+ <argument index="5" name="pingponged" type="int" default="0" />
<description>
Blend an animation by [code]blend[/code] amount (name must be valid in the linked [AnimationPlayer]). A [code]time[/code] and [code]delta[/code] may be passed, as well as whether [code]seek[/code] happened.
</description>
diff --git a/doc/classes/AnimationNodeAdd2.xml b/doc/classes/AnimationNodeAdd2.xml
index 20ee33209b..472f98a5b3 100644
--- a/doc/classes/AnimationNodeAdd2.xml
+++ b/doc/classes/AnimationNodeAdd2.xml
@@ -7,7 +7,7 @@
A resource to add to an [AnimationNodeBlendTree]. Blends two animations additively based on an amount value in the [code][0.0, 1.0][/code] range.
</description>
<tutorials>
- <link title="AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link>
+ <link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
</tutorials>
<members>
<member name="sync" type="bool" setter="set_use_sync" getter="is_using_sync" default="false">
diff --git a/doc/classes/AnimationNodeAdd3.xml b/doc/classes/AnimationNodeAdd3.xml
index 26738499bb..9ba4023b79 100644
--- a/doc/classes/AnimationNodeAdd3.xml
+++ b/doc/classes/AnimationNodeAdd3.xml
@@ -11,7 +11,7 @@
- A +add animation to blend with when the blend amount is in the [code][0.0, 1.0][/code] range
</description>
<tutorials>
- <link title="AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link>
+ <link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
<link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link>
</tutorials>
<members>
diff --git a/doc/classes/AnimationNodeAnimation.xml b/doc/classes/AnimationNodeAnimation.xml
index 668a35226f..3df92ad3d3 100644
--- a/doc/classes/AnimationNodeAnimation.xml
+++ b/doc/classes/AnimationNodeAnimation.xml
@@ -7,7 +7,7 @@
A resource to add to an [AnimationNodeBlendTree]. Only features one output set using the [member animation] property. Use it as an input for [AnimationNode] that blend animations together.
</description>
<tutorials>
- <link title="AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link>
+ <link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
<link title="3D Platformer Demo">https://godotengine.org/asset-library/asset/125</link>
<link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link>
</tutorials>
@@ -15,5 +15,14 @@
<member name="animation" type="StringName" setter="set_animation" getter="get_animation" default="&amp;&quot;&quot;">
Animation to use as an output. It is one of the animations provided by [member AnimationTree.anim_player].
</member>
+ <member name="play_mode" type="int" setter="set_play_mode" getter="get_play_mode" enum="AnimationNodeAnimation.PlayMode" default="0">
+ Determines the playback direction of the animation.
+ </member>
</members>
+ <constants>
+ <constant name="PLAY_MODE_FORWARD" value="0" enum="PlayMode">
+ </constant>
+ <constant name="PLAY_MODE_BACKWARD" value="1" enum="PlayMode">
+ </constant>
+ </constants>
</class>
diff --git a/doc/classes/AnimationNodeBlend2.xml b/doc/classes/AnimationNodeBlend2.xml
index 1f7a4c91c8..3b869bc299 100644
--- a/doc/classes/AnimationNodeBlend2.xml
+++ b/doc/classes/AnimationNodeBlend2.xml
@@ -7,7 +7,7 @@
A resource to add to an [AnimationNodeBlendTree]. Blends two animations linearly based on an amount value in the [code][0.0, 1.0][/code] range.
</description>
<tutorials>
- <link title="AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link>
+ <link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
<link title="3D Platformer Demo">https://godotengine.org/asset-library/asset/125</link>
<link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link>
</tutorials>
diff --git a/doc/classes/AnimationNodeBlend3.xml b/doc/classes/AnimationNodeBlend3.xml
index ed827e2535..ae8fce51f2 100644
--- a/doc/classes/AnimationNodeBlend3.xml
+++ b/doc/classes/AnimationNodeBlend3.xml
@@ -11,7 +11,7 @@
- A +blend animation to blend with when the blend amount is in the [code][0.0, 1.0][/code] range
</description>
<tutorials>
- <link title="AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link>
+ <link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
</tutorials>
<members>
<member name="sync" type="bool" setter="set_use_sync" getter="is_using_sync" default="false">
diff --git a/doc/classes/AnimationNodeBlendSpace1D.xml b/doc/classes/AnimationNodeBlendSpace1D.xml
index 6e55a79fd2..831542b64c 100644
--- a/doc/classes/AnimationNodeBlendSpace1D.xml
+++ b/doc/classes/AnimationNodeBlendSpace1D.xml
@@ -10,7 +10,7 @@
You can set the extents of the axis using the [member min_space] and [member max_space].
</description>
<tutorials>
- <link title="AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link>
+ <link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
</tutorials>
<methods>
<method name="add_blend_point">
diff --git a/doc/classes/AnimationNodeBlendSpace2D.xml b/doc/classes/AnimationNodeBlendSpace2D.xml
index 8d51f9aecc..77d1d872e5 100644
--- a/doc/classes/AnimationNodeBlendSpace2D.xml
+++ b/doc/classes/AnimationNodeBlendSpace2D.xml
@@ -9,7 +9,7 @@
You can add vertices to the blend space with [method add_blend_point] and automatically triangulate it by setting [member auto_triangles] to [code]true[/code]. Otherwise, use [method add_triangle] and [method remove_triangle] to create up the blend space by hand.
</description>
<tutorials>
- <link title="AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link>
+ <link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
<link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link>
</tutorials>
<methods>
diff --git a/doc/classes/AnimationNodeBlendTree.xml b/doc/classes/AnimationNodeBlendTree.xml
index da532dc059..a9f1f7acaa 100644
--- a/doc/classes/AnimationNodeBlendTree.xml
+++ b/doc/classes/AnimationNodeBlendTree.xml
@@ -7,7 +7,7 @@
This node may contain a sub-tree of any other blend type nodes, such as mix, blend2, blend3, one shot, etc. This is one of the most commonly used roots.
</description>
<tutorials>
- <link title="AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link>
+ <link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
</tutorials>
<methods>
<method name="add_node">
diff --git a/doc/classes/AnimationNodeOneShot.xml b/doc/classes/AnimationNodeOneShot.xml
index 2ecc0ae07b..116b54e39e 100644
--- a/doc/classes/AnimationNodeOneShot.xml
+++ b/doc/classes/AnimationNodeOneShot.xml
@@ -7,7 +7,7 @@
A resource to add to an [AnimationNodeBlendTree]. This node will execute a sub-animation and return once it finishes. Blend times for fading in and out can be customized, as well as filters.
</description>
<tutorials>
- <link title="AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link>
+ <link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
<link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link>
</tutorials>
<methods>
diff --git a/doc/classes/AnimationNodeOutput.xml b/doc/classes/AnimationNodeOutput.xml
index 34c96d13ea..6241a0fa49 100644
--- a/doc/classes/AnimationNodeOutput.xml
+++ b/doc/classes/AnimationNodeOutput.xml
@@ -6,7 +6,7 @@
<description>
</description>
<tutorials>
- <link title="AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link>
+ <link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
<link title="3D Platformer Demo">https://godotengine.org/asset-library/asset/125</link>
<link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link>
</tutorials>
diff --git a/doc/classes/AnimationNodeStateMachine.xml b/doc/classes/AnimationNodeStateMachine.xml
index 17ef565b3a..5adea7308d 100644
--- a/doc/classes/AnimationNodeStateMachine.xml
+++ b/doc/classes/AnimationNodeStateMachine.xml
@@ -18,7 +18,7 @@
[/codeblocks]
</description>
<tutorials>
- <link title="AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link>
+ <link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
</tutorials>
<methods>
<method name="add_node">
diff --git a/doc/classes/AnimationNodeStateMachinePlayback.xml b/doc/classes/AnimationNodeStateMachinePlayback.xml
index 15c6c96302..b299f8654a 100644
--- a/doc/classes/AnimationNodeStateMachinePlayback.xml
+++ b/doc/classes/AnimationNodeStateMachinePlayback.xml
@@ -18,7 +18,7 @@
[/codeblocks]
</description>
<tutorials>
- <link title="AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link>
+ <link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
</tutorials>
<methods>
<method name="get_current_length" qualifiers="const">
diff --git a/doc/classes/AnimationNodeStateMachineTransition.xml b/doc/classes/AnimationNodeStateMachineTransition.xml
index 763bba6e93..948e3506a9 100644
--- a/doc/classes/AnimationNodeStateMachineTransition.xml
+++ b/doc/classes/AnimationNodeStateMachineTransition.xml
@@ -5,11 +5,11 @@
<description>
</description>
<tutorials>
- <link title="AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link>
+ <link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
</tutorials>
<members>
<member name="advance_condition" type="StringName" setter="set_advance_condition" getter="get_advance_condition" default="&amp;&quot;&quot;">
- Turn on auto advance when this condition is set. The provided name will become a boolean parameter on the [AnimationTree] that can be controlled from code (see [url=https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html#controlling-from-code][/url]). For example, if [member AnimationTree.tree_root] is an [AnimationNodeStateMachine] and [member advance_condition] is set to [code]"idle"[/code]:
+ Turn on auto advance when this condition is set. The provided name will become a boolean parameter on the [AnimationTree] that can be controlled from code (see [url=$DOCS_URL/tutorials/animation/animation_tree.html#controlling-from-code][/url]). For example, if [member AnimationTree.tree_root] is an [AnimationNodeStateMachine] and [member advance_condition] is set to [code]"idle"[/code]:
[codeblocks]
[gdscript]
$animation_tree.set("parameters/conditions/idle", is_on_floor and (linear_velocity.x == 0))
diff --git a/doc/classes/AnimationNodeTimeScale.xml b/doc/classes/AnimationNodeTimeScale.xml
index 5b40b39bca..33e0127a52 100644
--- a/doc/classes/AnimationNodeTimeScale.xml
+++ b/doc/classes/AnimationNodeTimeScale.xml
@@ -7,7 +7,7 @@
Allows scaling the speed of the animation (or reversing it) in any children nodes. Setting it to 0 will pause the animation.
</description>
<tutorials>
- <link title="AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link>
+ <link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
<link title="3D Platformer Demo">https://godotengine.org/asset-library/asset/125</link>
</tutorials>
</class>
diff --git a/doc/classes/AnimationNodeTimeSeek.xml b/doc/classes/AnimationNodeTimeSeek.xml
index d927c663c8..868319272e 100644
--- a/doc/classes/AnimationNodeTimeSeek.xml
+++ b/doc/classes/AnimationNodeTimeSeek.xml
@@ -27,6 +27,6 @@
[/codeblocks]
</description>
<tutorials>
- <link title="AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link>
+ <link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
</tutorials>
</class>
diff --git a/doc/classes/AnimationNodeTransition.xml b/doc/classes/AnimationNodeTransition.xml
index b297832ac0..48961f51a5 100644
--- a/doc/classes/AnimationNodeTransition.xml
+++ b/doc/classes/AnimationNodeTransition.xml
@@ -7,7 +7,7 @@
Simple state machine for cases which don't require a more advanced [AnimationNodeStateMachine]. Animations can be connected to the inputs and transition times can be specified.
</description>
<tutorials>
- <link title="AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link>
+ <link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
<link title="3D Platformer Demo">https://godotengine.org/asset-library/asset/125</link>
<link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link>
</tutorials>
diff --git a/doc/classes/AnimationPlayer.xml b/doc/classes/AnimationPlayer.xml
index 2fd923df85..9f68edbc92 100644
--- a/doc/classes/AnimationPlayer.xml
+++ b/doc/classes/AnimationPlayer.xml
@@ -9,8 +9,8 @@
Updating the target properties of animations occurs at process time.
</description>
<tutorials>
- <link title="2D Sprite animation">https://docs.godotengine.org/en/latest/tutorials/2d/2d_sprite_animation.html</link>
- <link title="Animation documentation index">https://docs.godotengine.org/en/latest/tutorials/animation/index.html</link>
+ <link title="2D Sprite animation">$DOCS_URL/tutorials/2d/2d_sprite_animation.html</link>
+ <link title="Animation documentation index">$DOCS_URL/tutorials/animation/index.html</link>
<link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link>
</tutorials>
<methods>
diff --git a/doc/classes/AnimationTree.xml b/doc/classes/AnimationTree.xml
index 40dcd950d7..48c5398074 100644
--- a/doc/classes/AnimationTree.xml
+++ b/doc/classes/AnimationTree.xml
@@ -8,7 +8,7 @@
[b]Note:[/b] When linked with an [AnimationPlayer], several properties and methods of the corresponding [AnimationPlayer] will not function as expected. Playback and transitions should be handled using only the [AnimationTree] and its constituent [AnimationNode](s). The [AnimationPlayer] node should be used solely for adding, deleting, and editing animations.
</description>
<tutorials>
- <link title="Using AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link>
+ <link title="Using AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
<link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link>
</tutorials>
<methods>
diff --git a/doc/classes/Area2D.xml b/doc/classes/Area2D.xml
index c6a3f87042..0f7e6799be 100644
--- a/doc/classes/Area2D.xml
+++ b/doc/classes/Area2D.xml
@@ -7,7 +7,7 @@
2D area that detects [CollisionObject2D] nodes overlapping, entering, or exiting. Can also alter or override local physics parameters (gravity, damping) and route audio to a custom audio bus.
</description>
<tutorials>
- <link title="Using Area2D">https://docs.godotengine.org/en/latest/tutorials/physics/using_area_2d.html</link>
+ <link title="Using Area2D">$DOCS_URL/tutorials/physics/using_area_2d.html</link>
<link title="2D Dodge The Creeps Demo">https://godotengine.org/asset-library/asset/515</link>
<link title="2D Pong Demo">https://godotengine.org/asset-library/asset/121</link>
<link title="2D Platformer Demo">https://godotengine.org/asset-library/asset/120</link>
@@ -50,6 +50,9 @@
The rate at which objects stop spinning in this area. Represents the angular velocity lost per second.
See [member ProjectSettings.physics/2d/default_angular_damp] for more details about damping.
</member>
+ <member name="angular_damp_space_override" type="int" setter="set_angular_damp_space_override_mode" getter="get_angular_damp_space_override_mode" enum="Area2D.SpaceOverride" default="0">
+ Override mode for angular damping calculations within this area. See [enum SpaceOverride] for possible values.
+ </member>
<member name="audio_bus_name" type="StringName" setter="set_audio_bus_name" getter="get_audio_bus_name" default="&amp;&quot;Master&quot;">
The name of the area's audio bus.
</member>
@@ -57,21 +60,30 @@
If [code]true[/code], the area's audio bus overrides the default audio bus.
</member>
<member name="gravity" type="float" setter="set_gravity" getter="get_gravity" default="980.0">
- The area's gravity intensity (in pixels per second squared). This value multiplies the gravity vector. This is useful to alter the force of gravity without altering its direction.
+ The area's gravity intensity (in pixels per second squared). This value multiplies the gravity direction. This is useful to alter the force of gravity without altering its direction.
</member>
- <member name="gravity_distance_scale" type="float" setter="set_gravity_distance_scale" getter="get_gravity_distance_scale" default="0.0">
- The falloff factor for point gravity. The greater the value, the faster gravity decreases with distance.
+ <member name="gravity_direction" type="Vector2" setter="set_gravity_direction" getter="get_gravity_direction" default="Vector2(0, 1)">
+ The area's gravity vector (not normalized).
</member>
<member name="gravity_point" type="bool" setter="set_gravity_is_point" getter="is_gravity_a_point" default="false">
- If [code]true[/code], gravity is calculated from a point (set via [member gravity_vec]). See also [member space_override].
+ If [code]true[/code], gravity is calculated from a point (set via [member gravity_point_center]). See also [member gravity_space_override].
</member>
- <member name="gravity_vec" type="Vector2" setter="set_gravity_vector" getter="get_gravity_vector" default="Vector2(0, 1)">
- The area's gravity vector (not normalized). If gravity is a point (see [member gravity_point]), this will be the point of attraction.
+ <member name="gravity_point_center" type="Vector2" setter="set_gravity_point_center" getter="get_gravity_point_center" default="Vector2(0, 1)">
+ If gravity is a point (see [member gravity_point]), this will be the point of attraction.
+ </member>
+ <member name="gravity_point_distance_scale" type="float" setter="set_gravity_point_distance_scale" getter="get_gravity_point_distance_scale" default="0.0">
+ The falloff factor for point gravity. The greater the value, the faster gravity decreases with distance.
+ </member>
+ <member name="gravity_space_override" type="int" setter="set_gravity_space_override_mode" getter="get_gravity_space_override_mode" enum="Area2D.SpaceOverride" default="0">
+ Override mode for gravity calculations within this area. See [enum SpaceOverride] for possible values.
</member>
<member name="linear_damp" type="float" setter="set_linear_damp" getter="get_linear_damp" default="0.1">
The rate at which objects stop moving in this area. Represents the linear velocity lost per second.
See [member ProjectSettings.physics/2d/default_linear_damp] for more details about damping.
</member>
+ <member name="linear_damp_space_override" type="int" setter="set_linear_damp_space_override_mode" getter="get_linear_damp_space_override_mode" enum="Area2D.SpaceOverride" default="0">
+ Override mode for linear damping calculations within this area. See [enum SpaceOverride] for possible values.
+ </member>
<member name="monitorable" type="bool" setter="set_monitorable" getter="is_monitorable" default="true">
If [code]true[/code], other monitoring areas can detect this area.
</member>
@@ -81,9 +93,6 @@
<member name="priority" type="float" setter="set_priority" getter="get_priority" default="0.0">
The area's priority. Higher priority areas are processed first.
</member>
- <member name="space_override" type="int" setter="set_space_override_mode" getter="get_space_override_mode" enum="Area2D.SpaceOverride" default="0">
- Override mode for gravity and damping calculations within this area. See [enum SpaceOverride] for possible values.
- </member>
</members>
<signals>
<signal name="area_entered">
diff --git a/doc/classes/Area3D.xml b/doc/classes/Area3D.xml
index 14225c52a4..450ed44307 100644
--- a/doc/classes/Area3D.xml
+++ b/doc/classes/Area3D.xml
@@ -48,6 +48,9 @@
The rate at which objects stop spinning in this area. Represents the angular velocity lost per second.
See [member ProjectSettings.physics/3d/default_angular_damp] for more details about damping.
</member>
+ <member name="angular_damp_space_override" type="int" setter="set_angular_damp_space_override_mode" getter="get_angular_damp_space_override_mode" enum="Area3D.SpaceOverride" default="0">
+ Override mode for angular damping calculations within this area. See [enum SpaceOverride] for possible values.
+ </member>
<member name="audio_bus_name" type="StringName" setter="set_audio_bus_name" getter="get_audio_bus_name" default="&amp;&quot;Master&quot;">
The name of the area's audio bus.
</member>
@@ -55,21 +58,30 @@
If [code]true[/code], the area's audio bus overrides the default audio bus.
</member>
<member name="gravity" type="float" setter="set_gravity" getter="get_gravity" default="9.8">
- The area's gravity intensity (in meters per second squared). This value multiplies the gravity vector. This is useful to alter the force of gravity without altering its direction.
+ The area's gravity intensity (in meters per second squared). This value multiplies the gravity direction. This is useful to alter the force of gravity without altering its direction.
</member>
- <member name="gravity_distance_scale" type="float" setter="set_gravity_distance_scale" getter="get_gravity_distance_scale" default="0.0">
- The falloff factor for point gravity. The greater the value, the faster gravity decreases with distance.
+ <member name="gravity_direction" type="Vector3" setter="set_gravity_direction" getter="get_gravity_direction" default="Vector3(0, -1, 0)">
+ The area's gravity vector (not normalized).
</member>
<member name="gravity_point" type="bool" setter="set_gravity_is_point" getter="is_gravity_a_point" default="false">
- If [code]true[/code], gravity is calculated from a point (set via [member gravity_vec]). See also [member space_override].
+ If [code]true[/code], gravity is calculated from a point (set via [member gravity_point_center]). See also [member gravity_space_override].
+ </member>
+ <member name="gravity_point_center" type="Vector3" setter="set_gravity_point_center" getter="get_gravity_point_center" default="Vector3(0, -1, 0)">
+ If gravity is a point (see [member gravity_point]), this will be the point of attraction.
+ </member>
+ <member name="gravity_point_distance_scale" type="float" setter="set_gravity_point_distance_scale" getter="get_gravity_point_distance_scale" default="0.0">
+ The falloff factor for point gravity. The greater the value, the faster gravity decreases with distance.
</member>
- <member name="gravity_vec" type="Vector3" setter="set_gravity_vector" getter="get_gravity_vector" default="Vector3(0, -1, 0)">
- The area's gravity vector (not normalized). If gravity is a point (see [member gravity_point]), this will be the point of attraction.
+ <member name="gravity_space_override" type="int" setter="set_gravity_space_override_mode" getter="get_gravity_space_override_mode" enum="Area3D.SpaceOverride" default="0">
+ Override mode for gravity calculations within this area. See [enum SpaceOverride] for possible values.
</member>
<member name="linear_damp" type="float" setter="set_linear_damp" getter="get_linear_damp" default="0.1">
The rate at which objects stop moving in this area. Represents the linear velocity lost per second.
See [member ProjectSettings.physics/3d/default_linear_damp] for more details about damping.
</member>
+ <member name="linear_damp_space_override" type="int" setter="set_linear_damp_space_override_mode" getter="get_linear_damp_space_override_mode" enum="Area3D.SpaceOverride" default="0">
+ Override mode for linear damping calculations within this area. See [enum SpaceOverride] for possible values.
+ </member>
<member name="monitorable" type="bool" setter="set_monitorable" getter="is_monitorable" default="true">
If [code]true[/code], other monitoring areas can detect this area.
</member>
@@ -91,9 +103,6 @@
<member name="reverb_bus_uniformity" type="float" setter="set_reverb_uniformity" getter="get_reverb_uniformity" default="0.0">
The degree to which this area's reverb is a uniform effect. Ranges from [code]0[/code] to [code]1[/code] with [code]0.1[/code] precision.
</member>
- <member name="space_override" type="int" setter="set_space_override_mode" getter="get_space_override_mode" enum="Area3D.SpaceOverride" default="0">
- Override mode for gravity and damping calculations within this area. See [enum SpaceOverride] for possible values.
- </member>
<member name="wind_attenuation_factor" type="float" setter="set_wind_attenuation_factor" getter="get_wind_attenuation_factor" default="0.0">
The exponential rate at which wind force decreases with distance from its origin.
</member>
@@ -138,7 +147,7 @@
<argument index="2" name="area_shape_index" type="int" />
<argument index="3" name="local_shape_index" type="int" />
<description>
- Emitted when one of another Area3D's [Shape3D]s enters one of this Area3D's [Shape3D]s. Requires [member monitoring] to be set to [code]true[/code].
+ Emitted when one of another Area3D's [Shape3D]s exits one of this Area3D's [Shape3D]s. Requires [member monitoring] to be set to [code]true[/code].
[code]area_rid[/code] the [RID] of the other Area3D's [CollisionObject3D] used by the [PhysicsServer3D].
[code]area[/code] the other Area3D.
[code]area_shape_index[/code] the index of the [Shape3D] of the other Area3D used by the [PhysicsServer3D]. Get the [CollisionShape3D] node with [code]area.shape_owner_get_owner(area_shape_index)[/code].
diff --git a/doc/classes/Array.xml b/doc/classes/Array.xml
index 275b217247..d505ee98cc 100644
--- a/doc/classes/Array.xml
+++ b/doc/classes/Array.xml
@@ -194,7 +194,7 @@
<return type="void" />
<argument index="0" name="value" type="Variant" />
<description>
- Removes the first occurrence of a value from the array. To remove an element by index, use [method remove] instead.
+ Removes the first occurrence of a value from the array. To remove an element by index, use [method remove_at] instead.
[b]Note:[/b] This method acts in-place and doesn't return a value.
[b]Note:[/b] On large arrays, this method will be slower if the removed element is close to the beginning of the array (index 0). This is because all elements placed after the removed element have to be reindexed.
</description>
@@ -400,7 +400,7 @@
[/codeblock]
</description>
</method>
- <method name="remove">
+ <method name="remove_at">
<return type="void" />
<argument index="0" name="position" type="int" />
<description>
@@ -477,15 +477,19 @@
[b]Note:[/b] You cannot randomize the return value as the heapsort algorithm expects a deterministic result. Doing so will result in unexpected behavior.
[codeblocks]
[gdscript]
- class MyCustomSorter:
- static func sort_ascending(a, b):
- if a[0] &lt; b[0]:
- return true
- return false
+ func sort_ascending(a, b):
+ if a[0] &lt; b[0]:
+ return true
+ return false
- var my_items = [[5, "Potato"], [9, "Rice"], [4, "Tomato"]]
- my_items.sort_custom(MyCustomSorter.sort_ascending)
- print(my_items) # Prints [[4, Tomato], [5, Potato], [9, Rice]].
+ func _ready():
+ var my_items = [[5, "Potato"], [9, "Rice"], [4, "Tomato"]]
+ my_items.sort_custom(sort_ascending)
+ print(my_items) # Prints [[4, Tomato], [5, Potato], [9, Rice]].
+
+ # Descending, lambda version.
+ my_items.sort_custom(func(a, b): return a[0] &gt; b[0])
+ print(my_items) # Prints [[9, Rice], [5, Potato], [4, Tomato]].
[/gdscript]
[csharp]
// There is no custom sort support for Godot.Collections.Array
diff --git a/doc/classes/ArrayMesh.xml b/doc/classes/ArrayMesh.xml
index 7b77462322..c986947dfb 100644
--- a/doc/classes/ArrayMesh.xml
+++ b/doc/classes/ArrayMesh.xml
@@ -47,7 +47,7 @@
[b]Note:[/b] Godot uses clockwise [url=https://learnopengl.com/Advanced-OpenGL/Face-culling]winding order[/url] for front faces of triangle primitive modes.
</description>
<tutorials>
- <link title="Procedural geometry using the ArrayMesh">https://docs.godotengine.org/en/latest/tutorials/3d/procedural_geometry/arraymesh.html</link>
+ <link title="Procedural geometry using the ArrayMesh">$DOCS_URL/tutorials/3d/procedural_geometry/arraymesh.html</link>
</tutorials>
<methods>
<method name="add_blend_shape">
diff --git a/doc/classes/AudioEffectDistortion.xml b/doc/classes/AudioEffectDistortion.xml
index 600ca93028..ed1cb789e0 100644
--- a/doc/classes/AudioEffectDistortion.xml
+++ b/doc/classes/AudioEffectDistortion.xml
@@ -9,7 +9,7 @@
By distorting the waveform the frequency content change, which will often make the sound "crunchy" or "abrasive". For games, it can simulate sound coming from some saturated device or speaker very efficiently.
</description>
<tutorials>
- <link title="Audio buses">https://docs.godotengine.org/en/latest/tutorials/audio/audio_buses.html</link>
+ <link title="Audio buses">$DOCS_URL/tutorials/audio/audio_buses.html</link>
</tutorials>
<members>
<member name="drive" type="float" setter="set_drive" getter="get_drive" default="0.0">
diff --git a/doc/classes/AudioEffectFilter.xml b/doc/classes/AudioEffectFilter.xml
index 5b43646077..4fb1c0e7c9 100644
--- a/doc/classes/AudioEffectFilter.xml
+++ b/doc/classes/AudioEffectFilter.xml
@@ -7,7 +7,7 @@
Allows frequencies other than the [member cutoff_hz] to pass.
</description>
<tutorials>
- <link title="Audio buses">https://docs.godotengine.org/en/latest/tutorials/audio/audio_buses.html</link>
+ <link title="Audio buses">$DOCS_URL/tutorials/audio/audio_buses.html</link>
</tutorials>
<members>
<member name="cutoff_hz" type="float" setter="set_cutoff" getter="get_cutoff" default="2000.0">
diff --git a/doc/classes/AudioEffectHighShelfFilter.xml b/doc/classes/AudioEffectHighShelfFilter.xml
index c572824448..28498f6d8e 100644
--- a/doc/classes/AudioEffectHighShelfFilter.xml
+++ b/doc/classes/AudioEffectHighShelfFilter.xml
@@ -6,6 +6,6 @@
<description>
</description>
<tutorials>
- <link title="Audio buses">https://docs.godotengine.org/en/latest/tutorials/audio/audio_buses.html</link>
+ <link title="Audio buses">$DOCS_URL/tutorials/audio/audio_buses.html</link>
</tutorials>
</class>
diff --git a/doc/classes/AudioEffectLowShelfFilter.xml b/doc/classes/AudioEffectLowShelfFilter.xml
index e78dbf9732..4c839dc257 100644
--- a/doc/classes/AudioEffectLowShelfFilter.xml
+++ b/doc/classes/AudioEffectLowShelfFilter.xml
@@ -6,6 +6,6 @@
<description>
</description>
<tutorials>
- <link title="Audio buses">https://docs.godotengine.org/en/latest/tutorials/audio/audio_buses.html</link>
+ <link title="Audio buses">$DOCS_URL/tutorials/audio/audio_buses.html</link>
</tutorials>
</class>
diff --git a/doc/classes/AudioEffectRecord.xml b/doc/classes/AudioEffectRecord.xml
index b32206726d..0b6c5287cf 100644
--- a/doc/classes/AudioEffectRecord.xml
+++ b/doc/classes/AudioEffectRecord.xml
@@ -7,7 +7,7 @@
Allows the user to record sound from a microphone. It sets and gets the format in which the audio file will be recorded (8-bit, 16-bit, or compressed). It checks whether or not the recording is active, and if it is, records the sound. It then returns the recorded sample.
</description>
<tutorials>
- <link title="Recording with microphone">https://docs.godotengine.org/en/latest/tutorials/audio/recording_with_microphone.html</link>
+ <link title="Recording with microphone">$DOCS_URL/tutorials/audio/recording_with_microphone.html</link>
<link title="Audio Mic Record Demo">https://godotengine.org/asset-library/asset/527</link>
</tutorials>
<methods>
diff --git a/doc/classes/AudioServer.xml b/doc/classes/AudioServer.xml
index 66fa57cb52..b868cce077 100644
--- a/doc/classes/AudioServer.xml
+++ b/doc/classes/AudioServer.xml
@@ -7,7 +7,7 @@
[AudioServer] is a low-level server interface for audio access. It is in charge of creating sample data (playable audio) as well as its playback via a voice interface.
</description>
<tutorials>
- <link title="Audio buses">https://docs.godotengine.org/en/latest/tutorials/audio/audio_buses.html</link>
+ <link title="Audio buses">$DOCS_URL/tutorials/audio/audio_buses.html</link>
<link title="Audio Device Changer Demo">https://godotengine.org/asset-library/asset/525</link>
<link title="Audio Mic Record Demo">https://godotengine.org/asset-library/asset/527</link>
<link title="Audio Spectrum Demo">https://godotengine.org/asset-library/asset/528</link>
diff --git a/doc/classes/AudioStream.xml b/doc/classes/AudioStream.xml
index cff7199c4a..722ff802e7 100644
--- a/doc/classes/AudioStream.xml
+++ b/doc/classes/AudioStream.xml
@@ -7,7 +7,7 @@
Base class for audio streams. Audio streams are used for sound effects and music playback, and support WAV (via [AudioStreamSample]) and OGG (via [AudioStreamOGGVorbis]) file formats.
</description>
<tutorials>
- <link title="Audio streams">https://docs.godotengine.org/en/latest/tutorials/audio/audio_streams.html</link>
+ <link title="Audio streams">$DOCS_URL/tutorials/audio/audio_streams.html</link>
<link title="Audio Generator Demo">https://godotengine.org/asset-library/asset/526</link>
<link title="Audio Mic Record Demo">https://godotengine.org/asset-library/asset/527</link>
<link title="Audio Spectrum Demo">https://godotengine.org/asset-library/asset/528</link>
diff --git a/doc/classes/AudioStreamPlayer.xml b/doc/classes/AudioStreamPlayer.xml
index b692ae858e..d20aaff1e8 100644
--- a/doc/classes/AudioStreamPlayer.xml
+++ b/doc/classes/AudioStreamPlayer.xml
@@ -8,7 +8,7 @@
To play audio positionally, use [AudioStreamPlayer2D] or [AudioStreamPlayer3D] instead of [AudioStreamPlayer].
</description>
<tutorials>
- <link title="Audio streams">https://docs.godotengine.org/en/latest/tutorials/audio/audio_streams.html</link>
+ <link title="Audio streams">$DOCS_URL/tutorials/audio/audio_streams.html</link>
<link title="2D Dodge The Creeps Demo">https://godotengine.org/asset-library/asset/515</link>
<link title="Audio Device Changer Demo">https://godotengine.org/asset-library/asset/525</link>
<link title="Audio Generator Demo">https://godotengine.org/asset-library/asset/526</link>
diff --git a/doc/classes/AudioStreamPlayer2D.xml b/doc/classes/AudioStreamPlayer2D.xml
index 9c76eefbf9..0ad161a6fe 100644
--- a/doc/classes/AudioStreamPlayer2D.xml
+++ b/doc/classes/AudioStreamPlayer2D.xml
@@ -9,7 +9,7 @@
[b]Note:[/b] Hiding an [AudioStreamPlayer2D] node does not disable its audio output. To temporarily disable an [AudioStreamPlayer2D]'s audio output, set [member volume_db] to a very low value like [code]-100[/code] (which isn't audible to human hearing).
</description>
<tutorials>
- <link title="Audio streams">https://docs.godotengine.org/en/latest/tutorials/audio/audio_streams.html</link>
+ <link title="Audio streams">$DOCS_URL/tutorials/audio/audio_streams.html</link>
</tutorials>
<methods>
<method name="get_playback_position">
diff --git a/doc/classes/AudioStreamPlayer3D.xml b/doc/classes/AudioStreamPlayer3D.xml
index e8a78d5a4c..ce8a6693db 100644
--- a/doc/classes/AudioStreamPlayer3D.xml
+++ b/doc/classes/AudioStreamPlayer3D.xml
@@ -10,7 +10,7 @@
[b]Note:[/b] Hiding an [AudioStreamPlayer3D] node does not disable its audio output. To temporarily disable an [AudioStreamPlayer3D]'s audio output, set [member unit_db] to a very low value like [code]-100[/code] (which isn't audible to human hearing).
</description>
<tutorials>
- <link title="Audio streams">https://docs.godotengine.org/en/latest/tutorials/audio/audio_streams.html</link>
+ <link title="Audio streams">$DOCS_URL/tutorials/audio/audio_streams.html</link>
</tutorials>
<methods>
<method name="get_playback_position">
diff --git a/doc/classes/AudioStreamSample.xml b/doc/classes/AudioStreamSample.xml
index 7e1155d89b..df7b5ff1c7 100644
--- a/doc/classes/AudioStreamSample.xml
+++ b/doc/classes/AudioStreamSample.xml
@@ -61,7 +61,7 @@
<constant name="LOOP_FORWARD" value="1" enum="LoopMode">
Audio loops the data between [member loop_begin] and [member loop_end], playing forward only.
</constant>
- <constant name="LOOP_PING_PONG" value="2" enum="LoopMode">
+ <constant name="LOOP_PINGPONG" value="2" enum="LoopMode">
Audio loops the data between [member loop_begin] and [member loop_end], playing back and forth.
</constant>
<constant name="LOOP_BACKWARD" value="3" enum="LoopMode">
diff --git a/doc/classes/BaseButton.xml b/doc/classes/BaseButton.xml
index 889c703b07..981b3167d9 100644
--- a/doc/classes/BaseButton.xml
+++ b/doc/classes/BaseButton.xml
@@ -50,7 +50,7 @@
<member name="button_group" type="ButtonGroup" setter="set_button_group" getter="get_button_group">
The [ButtonGroup] associated with the button. Not to be confused with node groups.
</member>
- <member name="button_mask" type="int" setter="set_button_mask" getter="get_button_mask" default="1">
+ <member name="button_mask" type="int" setter="set_button_mask" getter="get_button_mask" enum="MouseButton" default="1">
Binary mask to choose which mouse buttons this button will respond to.
To allow both left-click and right-click, use [code]MOUSE_BUTTON_MASK_LEFT | MOUSE_BUTTON_MASK_RIGHT[/code].
</member>
diff --git a/doc/classes/BaseMaterial3D.xml b/doc/classes/BaseMaterial3D.xml
index 818ab50030..f0f49f89d5 100644
--- a/doc/classes/BaseMaterial3D.xml
+++ b/doc/classes/BaseMaterial3D.xml
@@ -7,7 +7,7 @@
This provides a default material with a wide variety of rendering features and properties without the need to write shader code. See the tutorial below for details.
</description>
<tutorials>
- <link title="Standard Material 3D">https://docs.godotengine.org/en/latest/tutorials/3d/standard_material_3d.html</link>
+ <link title="Standard Material 3D">$DOCS_URL/tutorials/3d/standard_material_3d.html</link>
</tutorials>
<methods>
<method name="get_feature" qualifiers="const">
diff --git a/doc/classes/Basis.xml b/doc/classes/Basis.xml
index 8ef9cd2e7c..bf3d20c11c 100644
--- a/doc/classes/Basis.xml
+++ b/doc/classes/Basis.xml
@@ -10,9 +10,9 @@
For more information, read the "Matrices and transforms" documentation article.
</description>
<tutorials>
- <link title="Math documentation index">https://docs.godotengine.org/en/latest/tutorials/math/index.html</link>
- <link title="Matrices and transforms">https://docs.godotengine.org/en/latest/tutorials/math/matrices_and_transforms.html</link>
- <link title="Using 3D transforms">https://docs.godotengine.org/en/latest/tutorials/3d/using_transforms.html</link>
+ <link title="Math documentation index">$DOCS_URL/tutorials/math/index.html</link>
+ <link title="Matrices and transforms">$DOCS_URL/tutorials/math/matrices_and_transforms.html</link>
+ <link title="Using 3D transforms">$DOCS_URL/tutorials/3d/using_transforms.html</link>
<link title="Matrix Transform Demo">https://godotengine.org/asset-library/asset/584</link>
<link title="3D Platformer Demo">https://godotengine.org/asset-library/asset/125</link>
<link title="3D Voxel Demo">https://godotengine.org/asset-library/asset/676</link>
@@ -232,18 +232,22 @@
<return type="bool" />
<argument index="0" name="right" type="Basis" />
<description>
+ Returns [code]true[/code] if the [Basis] matrices are not equal.
+ [b]Note:[/b] Due to floating-point precision errors, consider using [method is_equal_approx] instead, which is more reliable.
</description>
</operator>
<operator name="operator *">
<return type="Basis" />
<argument index="0" name="right" type="Basis" />
<description>
+ Composes these two basis matrices by multiplying them together. This has the effect of transforming the second basis (the child) by the first basis (the parent).
</description>
</operator>
<operator name="operator *">
<return type="Vector3" />
<argument index="0" name="right" type="Vector3" />
<description>
+ Transforms (multiplies) the [Vector3] by the given [Basis] matrix.
</description>
</operator>
<operator name="operator *">
@@ -269,12 +273,15 @@
<return type="bool" />
<argument index="0" name="right" type="Basis" />
<description>
+ Returns [code]true[/code] if the [Basis] matrices are exactly equal.
+ [b]Note:[/b] Due to floating-point precision errors, consider using [method is_equal_approx] instead, which is more reliable.
</description>
</operator>
<operator name="operator []">
<return type="Vector3" />
<argument index="0" name="index" type="int" />
<description>
+ Access basis components using their index. [code]b[0][/code] is equivalent to [code]b.x[/code], [code]b[1][/code] is equivalent to [code]b.y[/code], and [code]b[2][/code] is equivalent to [code]b.z[/code].
</description>
</operator>
</operators>
diff --git a/doc/classes/BitMap.xml b/doc/classes/BitMap.xml
index 0997896260..dc655ee3b0 100644
--- a/doc/classes/BitMap.xml
+++ b/doc/classes/BitMap.xml
@@ -48,7 +48,7 @@
<argument index="0" name="pixels" type="int" />
<argument index="1" name="rect" type="Rect2" />
<description>
- Applies morphological dilation to the bitmap. The first argument is the dilation amount, Rect2 is the area where the dilation will be applied.
+ Applies morphological dilation or erosion to the bitmap. If [code]pixels[/code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] is negative, erosion is applied to the bitmap. [code]rect[/code] defines the area where the morphological operation is applied. Pixels located outside the [code]rect[/code] are unaffected by [method grow_mask].
</description>
</method>
<method name="opaque_to_polygons" qualifiers="const">
diff --git a/doc/classes/Button.xml b/doc/classes/Button.xml
index ba55fda59c..055d5091c7 100644
--- a/doc/classes/Button.xml
+++ b/doc/classes/Button.xml
@@ -78,6 +78,7 @@
</member>
<member name="icon" type="Texture2D" setter="set_button_icon" getter="get_button_icon">
Button's icon, if text is present the icon will be placed before the text.
+ To edit margin and spacing of the icon, use [theme_item hseparation] theme property and [code]content_margin_*[/code] properties of the used [StyleBox]es.
</member>
<member name="icon_align" type="int" setter="set_icon_align" getter="get_icon_align" enum="Button.TextAlign" default="0">
Specifies if the icon should be aligned to the left, right, or center of a button. Uses the same [enum TextAlign] constants as the text alignment. If centered, text will draw on top of the icon.
diff --git a/doc/classes/CPUParticles2D.xml b/doc/classes/CPUParticles2D.xml
index 9226140c1a..0505d8ad36 100644
--- a/doc/classes/CPUParticles2D.xml
+++ b/doc/classes/CPUParticles2D.xml
@@ -8,7 +8,7 @@
See also [GPUParticles2D], which provides the same functionality with hardware acceleration, but may not run on older devices.
</description>
<tutorials>
- <link title="Particle systems (2D)">https://docs.godotengine.org/en/latest/tutorials/2d/particle_systems_2d.html</link>
+ <link title="Particle systems (2D)">$DOCS_URL/tutorials/2d/particle_systems_2d.html</link>
</tutorials>
<methods>
<method name="convert_from_particles">
diff --git a/doc/classes/CPUParticles3D.xml b/doc/classes/CPUParticles3D.xml
index fe8c354427..ad491465f2 100644
--- a/doc/classes/CPUParticles3D.xml
+++ b/doc/classes/CPUParticles3D.xml
@@ -126,7 +126,7 @@
Each particle's initial color. To have particle display color in a [BaseMaterial3D] make sure to set [member BaseMaterial3D.vertex_color_use_as_albedo] to [code]true[/code].
</member>
<member name="color_ramp" type="Gradient" setter="set_color_ramp" getter="get_color_ramp">
- Each particle's color will vary along this [GradientTexture] over its lifetime (multiplied with [member color]).
+ Each particle's color will vary along this [GradientTexture1D] over its lifetime (multiplied with [member color]).
</member>
<member name="damping_curve" type="Curve" setter="set_param_curve" getter="get_param_curve">
Damping will vary along this [Curve].
diff --git a/doc/classes/CanvasItem.xml b/doc/classes/CanvasItem.xml
index 7be18c1d5c..98437ef296 100644
--- a/doc/classes/CanvasItem.xml
+++ b/doc/classes/CanvasItem.xml
@@ -12,8 +12,8 @@
[b]Note:[/b] Unless otherwise specified, all methods that have angle parameters must have angles specified as [i]radians[/i]. To convert degrees to radians, use [method @GlobalScope.deg2rad].
</description>
<tutorials>
- <link title="Viewport and canvas transforms">https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html</link>
- <link title="Custom drawing in 2D">https://docs.godotengine.org/en/latest/tutorials/2d/custom_drawing_in_2d.html</link>
+ <link title="Viewport and canvas transforms">$DOCS_URL/tutorials/2d/2d_transforms.html</link>
+ <link title="Custom drawing in 2D">$DOCS_URL/tutorials/2d/custom_drawing_in_2d.html</link>
<link title="Audio Spectrum Demo">https://godotengine.org/asset-library/asset/528</link>
</tutorials>
<methods>
diff --git a/doc/classes/CanvasLayer.xml b/doc/classes/CanvasLayer.xml
index 2f99f94893..9ee5ce0dcb 100644
--- a/doc/classes/CanvasLayer.xml
+++ b/doc/classes/CanvasLayer.xml
@@ -7,8 +7,8 @@
Canvas drawing layer. [CanvasItem] nodes that are direct or indirect children of a [CanvasLayer] will be drawn in that layer. The layer is a numeric index that defines the draw order. The default 2D scene renders with index 0, so a [CanvasLayer] with index -1 will be drawn below, and one with index 1 will be drawn above. This is very useful for HUDs (in layer 1+ or above), or backgrounds (in layer -1 or below).
</description>
<tutorials>
- <link title="Viewport and canvas transforms">https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html</link>
- <link title="Canvas layers">https://docs.godotengine.org/en/latest/tutorials/2d/canvas_layers.html</link>
+ <link title="Viewport and canvas transforms">$DOCS_URL/tutorials/2d/2d_transforms.html</link>
+ <link title="Canvas layers">$DOCS_URL/tutorials/2d/canvas_layers.html</link>
<link title="2D Dodge The Creeps Demo">https://godotengine.org/asset-library/asset/515</link>
</tutorials>
<methods>
diff --git a/doc/classes/CharFXTransform.xml b/doc/classes/CharFXTransform.xml
index b11d9c341a..d467c8a51d 100644
--- a/doc/classes/CharFXTransform.xml
+++ b/doc/classes/CharFXTransform.xml
@@ -7,7 +7,7 @@
By setting various properties on this object, you can control how individual characters will be displayed in a [RichTextEffect].
</description>
<tutorials>
- <link title="BBCode in RichTextLabel">https://docs.godotengine.org/en/latest/tutorials/ui/bbcode_in_richtextlabel.html</link>
+ <link title="BBCode in RichTextLabel">$DOCS_URL/tutorials/ui/bbcode_in_richtextlabel.html</link>
<link title="RichTextEffect test project (third-party)">https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project</link>
</tutorials>
<members>
diff --git a/doc/classes/CharacterBody2D.xml b/doc/classes/CharacterBody2D.xml
index e14c2dc110..0f573dcd66 100644
--- a/doc/classes/CharacterBody2D.xml
+++ b/doc/classes/CharacterBody2D.xml
@@ -9,8 +9,8 @@
[b]Kinematic motion:[/b] Character bodies can also be used for kinematic motion (same functionality as [AnimatableBody2D]), which allows them to be moved by code and push other bodies on their path.
</description>
<tutorials>
- <link title="Kinematic character (2D)">https://docs.godotengine.org/en/latest/tutorials/physics/kinematic_character_2d.html</link>
- <link title="Using KinematicBody2D">https://docs.godotengine.org/en/latest/tutorials/physics/using_kinematic_body_2d.html</link>
+ <link title="Kinematic character (2D)">$DOCS_URL/tutorials/physics/kinematic_character_2d.html</link>
+ <link title="Using KinematicBody2D">$DOCS_URL/tutorials/physics/using_kinematic_body_2d.html</link>
<link title="2D Kinematic Character Demo">https://godotengine.org/asset-library/asset/113</link>
<link title="2D Platformer Demo">https://godotengine.org/asset-library/asset/120</link>
</tutorials>
diff --git a/doc/classes/CharacterBody3D.xml b/doc/classes/CharacterBody3D.xml
index 24b26fb16e..c70ce8acf9 100644
--- a/doc/classes/CharacterBody3D.xml
+++ b/doc/classes/CharacterBody3D.xml
@@ -9,7 +9,7 @@
[b]Kinematic motion:[/b] Character bodies can also be used for kinematic motion (same functionality as [AnimatableBody3D]), which allows them to be moved by code and push other bodies on their path.
</description>
<tutorials>
- <link title="Kinematic character (2D)">https://docs.godotengine.org/en/latest/tutorials/physics/kinematic_character_2d.html</link>
+ <link title="Kinematic character (2D)">$DOCS_URL/tutorials/physics/kinematic_character_2d.html</link>
<link title="3D Kinematic Character Demo">https://godotengine.org/asset-library/asset/126</link>
<link title="3D Platformer Demo">https://godotengine.org/asset-library/asset/125</link>
<link title="3D Voxel Demo">https://godotengine.org/asset-library/asset/676</link>
diff --git a/doc/classes/CodeEdit.xml b/doc/classes/CodeEdit.xml
index bd1f3af436..bb1a4a79f0 100644
--- a/doc/classes/CodeEdit.xml
+++ b/doc/classes/CodeEdit.xml
@@ -494,7 +494,6 @@
<member name="line_length_guidelines" type="int[]" setter="set_line_length_guidelines" getter="get_line_length_guidelines" default="[]">
Draws vertical lines at the provided columns. The first entry is considered a main hard guideline and is draw more prominently
</member>
- <member name="structured_text_bidi_override_options" type="Array" setter="set_structured_text_bidi_override_options" getter="get_structured_text_bidi_override_options" override="true" default="[]" />
<member name="symbol_lookup_on_click" type="bool" setter="set_symbol_lookup_on_click_enabled" getter="is_symbol_lookup_on_click_enabled" default="false">
Set when a validated word from [signal symbol_validate] is clicked, the [signal symbol_lookup] should be emitted.
</member>
diff --git a/doc/classes/CollisionObject2D.xml b/doc/classes/CollisionObject2D.xml
index ba1ee3909d..63492bf9a0 100644
--- a/doc/classes/CollisionObject2D.xml
+++ b/doc/classes/CollisionObject2D.xml
@@ -198,11 +198,11 @@
<members>
<member name="collision_layer" type="int" setter="set_collision_layer" getter="get_collision_layer" default="1">
The physics layers this CollisionObject2D is in. Collision objects can exist in one or more of 32 different layers. See also [member collision_mask].
- [b]Note:[/b] Object A can detect a contact with object B only if object B is in any of the layers that object A scans. See [url=https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
+ [b]Note:[/b] Object A can detect a contact with object B only if object B is in any of the layers that object A scans. See [url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
</member>
<member name="collision_mask" type="int" setter="set_collision_mask" getter="get_collision_mask" default="1">
The physics layers this CollisionObject2D scans. Collision objects can scan one or more of 32 different layers. See also [member collision_layer].
- [b]Note:[/b] Object A can detect a contact with object B only if object B is in any of the layers that object A scans. See [url=https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
+ [b]Note:[/b] Object A can detect a contact with object B only if object B is in any of the layers that object A scans. See [url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
</member>
<member name="disable_mode" type="int" setter="set_disable_mode" getter="get_disable_mode" enum="CollisionObject2D.DisableMode" default="0">
Defines the behavior in physics when [member Node.process_mode] is set to [constant Node.PROCESS_MODE_DISABLED]. See [enum DisableMode] for more details about the different modes.
diff --git a/doc/classes/CollisionObject3D.xml b/doc/classes/CollisionObject3D.xml
index 19bcdcbb27..33305471b8 100644
--- a/doc/classes/CollisionObject3D.xml
+++ b/doc/classes/CollisionObject3D.xml
@@ -170,11 +170,11 @@
<members>
<member name="collision_layer" type="int" setter="set_collision_layer" getter="get_collision_layer" default="1">
The physics layers this CollisionObject3D [b]is in[/b]. Collision objects can exist in one or more of 32 different layers. See also [member collision_mask].
- [b]Note:[/b] Object A can detect a contact with object B only if object B is in any of the layers that object A scans. See [url=https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
+ [b]Note:[/b] Object A can detect a contact with object B only if object B is in any of the layers that object A scans. See [url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
</member>
<member name="collision_mask" type="int" setter="set_collision_mask" getter="get_collision_mask" default="1">
The physics layers this CollisionObject3D [b]scans[/b]. Collision objects can scan one or more of 32 different layers. See also [member collision_layer].
- [b]Note:[/b] Object A can detect a contact with object B only if object B is in any of the layers that object A scans. See [url=https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
+ [b]Note:[/b] Object A can detect a contact with object B only if object B is in any of the layers that object A scans. See [url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
</member>
<member name="disable_mode" type="int" setter="set_disable_mode" getter="get_disable_mode" enum="CollisionObject3D.DisableMode" default="0">
Defines the behavior in physics when [member Node.process_mode] is set to [constant Node.PROCESS_MODE_DISABLED]. See [enum DisableMode] for more details about the different modes.
diff --git a/doc/classes/CollisionShape2D.xml b/doc/classes/CollisionShape2D.xml
index 5159b2b15b..c86bf18f24 100644
--- a/doc/classes/CollisionShape2D.xml
+++ b/doc/classes/CollisionShape2D.xml
@@ -7,7 +7,7 @@
Editor facility for creating and editing collision shapes in 2D space. You can use this node to represent all sorts of collision shapes, for example, add this to an [Area2D] to give it a detection shape, or add it to a [PhysicsBody2D] to create a solid object. [b]IMPORTANT[/b]: this is an Editor-only helper to create shapes, use [method CollisionObject2D.shape_owner_get_shape] to get the actual shape.
</description>
<tutorials>
- <link title="Physics introduction">https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html</link>
+ <link title="Physics introduction">$DOCS_URL/tutorials/physics/physics_introduction.html</link>
<link title="2D Dodge The Creeps Demo">https://godotengine.org/asset-library/asset/515</link>
<link title="2D Pong Demo">https://godotengine.org/asset-library/asset/121</link>
<link title="2D Kinematic Character Demo">https://godotengine.org/asset-library/asset/113</link>
diff --git a/doc/classes/CollisionShape3D.xml b/doc/classes/CollisionShape3D.xml
index 84e362c38b..0f96d7c191 100644
--- a/doc/classes/CollisionShape3D.xml
+++ b/doc/classes/CollisionShape3D.xml
@@ -7,7 +7,7 @@
Editor facility for creating and editing collision shapes in 3D space. You can use this node to represent all sorts of collision shapes, for example, add this to an [Area3D] to give it a detection shape, or add it to a [PhysicsBody3D] to create a solid object. [b]IMPORTANT[/b]: this is an Editor-only helper to create shapes, use [method CollisionObject3D.shape_owner_get_shape] to get the actual shape.
</description>
<tutorials>
- <link title="Physics introduction">https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html</link>
+ <link title="Physics introduction">$DOCS_URL/tutorials/physics/physics_introduction.html</link>
<link title="3D Kinematic Character Demo">https://godotengine.org/asset-library/asset/126</link>
<link title="3D Platformer Demo">https://godotengine.org/asset-library/asset/125</link>
<link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link>
diff --git a/doc/classes/Color.xml b/doc/classes/Color.xml
index 71ec225cf6..22fb853b40 100644
--- a/doc/classes/Color.xml
+++ b/doc/classes/Color.xml
@@ -147,6 +147,24 @@
<description>
</description>
</method>
+ <method name="from_hsv" qualifiers="static">
+ <return type="Color" />
+ <argument index="0" name="h" type="float" />
+ <argument index="1" name="s" type="float" />
+ <argument index="2" name="v" type="float" />
+ <argument index="3" name="alpha" type="float" default="1.0" />
+ <description>
+ Constructs a color from an [url=https://en.wikipedia.org/wiki/HSL_and_HSV]HSV profile[/url]. [code]h[/code] (hue), [code]s[/code] (saturation), and [code]v[/code] (value) are typically between 0 and 1.
+ [codeblocks]
+ [gdscript]
+ var c = Color.from_hsv(0.58, 0.5, 0.79, 0.8)
+ [/gdscript]
+ [csharp]
+ var c = Color.FromHsv(0.58f, 0.5f, 0.79f, 0.8f);
+ [/csharp]
+ [/codeblocks]
+ </description>
+ </method>
<method name="from_rgbe9995" qualifiers="static">
<return type="Color" />
<argument index="0" name="rgbe" type="int" />
@@ -863,54 +881,64 @@
<return type="bool" />
<argument index="0" name="right" type="Color" />
<description>
+ Returns [code]true[/code] if the colors are not equal.
+ [b]Note:[/b] Due to floating-point precision errors, consider using [method is_equal_approx] instead, which is more reliable.
</description>
</operator>
<operator name="operator *">
<return type="Color" />
<argument index="0" name="right" type="Color" />
<description>
+ Multiplies each component of the [Color] by the components of the given [Color].
</description>
</operator>
<operator name="operator *">
<return type="Color" />
<argument index="0" name="right" type="float" />
<description>
+ Multiplies each component of the [Color] by the given [float].
</description>
</operator>
<operator name="operator *">
<return type="Color" />
<argument index="0" name="right" type="int" />
<description>
+ Multiplies each component of the [Color] by the given [int].
</description>
</operator>
<operator name="operator +">
<return type="Color" />
<argument index="0" name="right" type="Color" />
<description>
+ Adds each component of the [Color] with the components of the given [Color].
</description>
</operator>
<operator name="operator -">
<return type="Color" />
<argument index="0" name="right" type="Color" />
<description>
+ Subtracts each component of the [Color] by the components of the given [Color].
</description>
</operator>
<operator name="operator /">
<return type="Color" />
<argument index="0" name="right" type="Color" />
<description>
+ Divides each component of the [Color] by the components of the given [Color].
</description>
</operator>
<operator name="operator /">
<return type="Color" />
<argument index="0" name="right" type="float" />
<description>
+ Divides each component of the [Color] by the given [float].
</description>
</operator>
<operator name="operator /">
<return type="Color" />
<argument index="0" name="right" type="int" />
<description>
+ Divides each component of the [Color] by the given [int].
</description>
</operator>
<operator name="operator ==">
@@ -922,22 +950,27 @@
<return type="bool" />
<argument index="0" name="right" type="Color" />
<description>
+ Returns [code]true[/code] if the colors are exactly equal.
+ [b]Note:[/b] Due to floating-point precision errors, consider using [method is_equal_approx] instead, which is more reliable.
</description>
</operator>
<operator name="operator []">
<return type="float" />
<argument index="0" name="index" type="int" />
<description>
+ Access color components using their index. [code]c[0][/code] is equivalent to [code]c.r[/code], [code]c[1][/code] is equivalent to [code]c.g[/code], [code]c[2][/code] is equivalent to [code]c.b[/code], and [code]c[3][/code] is equivalent to [code]c.a[/code].
</description>
</operator>
<operator name="operator unary+">
<return type="Color" />
<description>
+ Returns the same value as if the [code]+[/code] was not there. Unary [code]+[/code] does nothing, but sometimes it can make your code more readable.
</description>
</operator>
<operator name="operator unary-">
<return type="Color" />
<description>
+ Inverts the given color. This is equivalent to [code]Color.WHITE - c[/code] or [code]Color(1 - c.r, 1 - c.g, 1 - c.b, 1 - c.a)[/code].
</description>
</operator>
</operators>
diff --git a/doc/classes/Control.xml b/doc/classes/Control.xml
index 63e3eb7a5f..8739e0157d 100644
--- a/doc/classes/Control.xml
+++ b/doc/classes/Control.xml
@@ -16,9 +16,9 @@
[b]Note:[/b] Theme items are [i]not[/i] [Object] properties. This means you can't access their values using [method Object.get] and [method Object.set]. Instead, use the [code]get_theme_*[/code] and [code]add_theme_*_override[/code] methods provided by this class.
</description>
<tutorials>
- <link title="GUI documentation index">https://docs.godotengine.org/en/latest/tutorials/ui/index.html</link>
- <link title="Custom drawing in 2D">https://docs.godotengine.org/en/latest/tutorials/2d/custom_drawing_in_2d.html</link>
- <link title="Control node gallery">https://docs.godotengine.org/en/latest/tutorials/ui/control_node_gallery.html</link>
+ <link title="GUI documentation index">$DOCS_URL/tutorials/ui/index.html</link>
+ <link title="Custom drawing in 2D">$DOCS_URL/tutorials/2d/custom_drawing_in_2d.html</link>
+ <link title="Control node gallery">$DOCS_URL/tutorials/ui/control_node_gallery.html</link>
<link title="All GUI Demos">https://github.com/godotengine/godot-demo-projects/tree/master/gui</link>
</tutorials>
<methods>
@@ -654,6 +654,12 @@
See [method add_theme_stylebox_override].
</description>
</method>
+ <method name="is_drag_successful" qualifiers="const">
+ <return type="bool" />
+ <description>
+ Returns [code]true[/code] if drag operation is successful.
+ </description>
+ </method>
<method name="is_layout_rtl" qualifiers="const">
<return type="bool" />
<description>
@@ -714,6 +720,12 @@
Removes a local override for a theme [StyleBox] with the specified [code]name[/code] previously added by [method add_theme_stylebox_override] or via the Inspector dock.
</description>
</method>
+ <method name="reset_size">
+ <return type="void" />
+ <description>
+ Resets the size to [method get_combined_minimum_size]. This is equivalent to calling [code]set_size(Vector2())[/code] (or any size below the minimum).
+ </description>
+ </method>
<method name="set_anchor">
<return type="void" />
<argument index="0" name="side" type="int" enum="Side" />
@@ -1043,7 +1055,7 @@
</member>
<member name="rect_scale" type="Vector2" setter="set_scale" getter="get_scale" default="Vector2(1, 1)">
The node's scale, relative to its [member rect_size]. Change this property to scale the node around its [member rect_pivot_offset]. The Control's [member hint_tooltip] will also scale according to this value.
- [b]Note:[/b] This property is mainly intended to be used for animation purposes. Text inside the Control will look pixelated or blurry when the Control is scaled. To support multiple resolutions in your project, use an appropriate viewport stretch mode as described in the [url=https://docs.godotengine.org/en/latest/tutorials/viewports/multiple_resolutions.html]documentation[/url] instead of scaling Controls individually.
+ [b]Note:[/b] This property is mainly intended to be used for animation purposes. Text inside the Control will look pixelated or blurry when the Control is scaled. To support multiple resolutions in your project, use an appropriate viewport stretch mode as described in the [url=$DOCS_URL/tutorials/viewports/multiple_resolutions.html]documentation[/url] instead of scaling Controls individually.
[b]Note:[/b] If the Control node is a child of a [Container] node, the scale will be reset to [code]Vector2(1, 1)[/code] when the scene is instantiated. To set the Control's scale when it's instantiated, wait for one frame using [code]await get_tree().process_frame[/code] then set its [member rect_scale] property.
</member>
<member name="rect_size" type="Vector2" setter="_set_size" getter="get_size" default="Vector2(0, 0)">
diff --git a/doc/classes/Dictionary.xml b/doc/classes/Dictionary.xml
index d661da5dd0..7218e3bcb0 100644
--- a/doc/classes/Dictionary.xml
+++ b/doc/classes/Dictionary.xml
@@ -177,7 +177,7 @@
[b]Note:[/b] When declaring a dictionary with [code]const[/code], the dictionary itself can still be mutated by defining the values of individual keys. Using [code]const[/code] will only prevent assigning the constant with another value after it was initialized.
</description>
<tutorials>
- <link title="GDScript basics: Dictionary">https://docs.godotengine.org/en/latest/tutorials/scripting/gdscript/gdscript_basics.html#dictionary</link>
+ <link title="GDScript basics: Dictionary">$DOCS_URL/tutorials/scripting/gdscript/gdscript_basics.html#dictionary</link>
<link title="3D Voxel Demo">https://godotengine.org/asset-library/asset/676</link>
<link title="OS Test Demo">https://godotengine.org/asset-library/asset/677</link>
</tutorials>
diff --git a/doc/classes/DirectionalLight3D.xml b/doc/classes/DirectionalLight3D.xml
index 44d982cbcc..661dbef07c 100644
--- a/doc/classes/DirectionalLight3D.xml
+++ b/doc/classes/DirectionalLight3D.xml
@@ -7,7 +7,7 @@
A directional light is a type of [Light3D] node that models an infinite number of parallel rays covering the entire scene. It is used for lights with strong intensity that are located far away from the scene to model sunlight or moonlight. The worldspace location of the DirectionalLight3D transform (origin) is ignored. Only the basis is used to determine light direction.
</description>
<tutorials>
- <link title="Lights and shadows">https://docs.godotengine.org/en/latest/tutorials/3d/lights_and_shadows.html</link>
+ <link title="Lights and shadows">$DOCS_URL/tutorials/3d/lights_and_shadows.html</link>
</tutorials>
<members>
<member name="directional_shadow_blend_splits" type="bool" setter="set_blend_splits" getter="is_blend_splits_enabled" default="false">
diff --git a/doc/classes/Directory.xml b/doc/classes/Directory.xml
index 93f04ff2a2..cd4b8fde1e 100644
--- a/doc/classes/Directory.xml
+++ b/doc/classes/Directory.xml
@@ -54,7 +54,7 @@
[/codeblocks]
</description>
<tutorials>
- <link title="File system">https://docs.godotengine.org/en/latest/tutorials/scripting/filesystem.html</link>
+ <link title="File system">$DOCS_URL/tutorials/scripting/filesystem.html</link>
</tutorials>
<methods>
<method name="change_dir">
diff --git a/doc/classes/DisplayServer.xml b/doc/classes/DisplayServer.xml
index 92d6a220d2..1ca69057b4 100644
--- a/doc/classes/DisplayServer.xml
+++ b/doc/classes/DisplayServer.xml
@@ -901,7 +901,7 @@
</constant>
<constant name="WINDOW_MODE_FULLSCREEN" value="3" enum="WindowMode">
Fullscreen window mode. Note that this is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless window is used to emulate fullscreen. On macOS, a new desktop is used to display the running project.
- Regardless of the platform, enabling fullscreen will change the window size to match the monitor's size. Therefore, make sure your project supports [url=https://docs.godotengine.org/en/latest/tutorials/rendering/multiple_resolutions.html]multiple resolutions[/url] when enabling fullscreen mode.
+ Regardless of the platform, enabling fullscreen will change the window size to match the monitor's size. Therefore, make sure your project supports [url=$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple resolutions[/url] when enabling fullscreen mode.
</constant>
<constant name="WINDOW_FLAG_RESIZE_DISABLED" value="0" enum="WindowFlags">
</constant>
diff --git a/doc/classes/EditorImportPlugin.xml b/doc/classes/EditorImportPlugin.xml
index cb33f159ef..1f98781bbd 100644
--- a/doc/classes/EditorImportPlugin.xml
+++ b/doc/classes/EditorImportPlugin.xml
@@ -111,12 +111,13 @@
To use [EditorImportPlugin], register it using the [method EditorPlugin.add_import_plugin] method first.
</description>
<tutorials>
- <link title="Import plugins">https://docs.godotengine.org/en/latest/tutorials/plugins/editor/import_plugins.html</link>
+ <link title="Import plugins">$DOCS_URL/tutorials/plugins/editor/import_plugins.html</link>
</tutorials>
<methods>
<method name="_get_import_options" qualifiers="virtual const">
<return type="Array" />
- <argument index="0" name="preset_index" type="int" />
+ <argument index="0" name="path" type="String" />
+ <argument index="1" name="preset_index" type="int" />
<description>
Gets the options and default values for the preset at this index. Returns an Array of Dictionaries with the following keys: [code]name[/code], [code]default_value[/code], [code]property_hint[/code] (optional), [code]hint_string[/code] (optional), [code]usage[/code] (optional).
</description>
@@ -135,8 +136,9 @@
</method>
<method name="_get_option_visibility" qualifiers="virtual const">
<return type="bool" />
- <argument index="0" name="option_name" type="StringName" />
- <argument index="1" name="options" type="Dictionary" />
+ <argument index="0" name="path" type="String" />
+ <argument index="1" name="option_name" type="StringName" />
+ <argument index="2" name="options" type="Dictionary" />
<description>
This method can be overridden to hide specific import options if conditions are met. This is mainly useful for hiding options that depend on others if one of them is disabled. For example:
[codeblocks]
diff --git a/doc/classes/EditorInspectorPlugin.xml b/doc/classes/EditorInspectorPlugin.xml
index f65e974d47..08f17cc5b2 100644
--- a/doc/classes/EditorInspectorPlugin.xml
+++ b/doc/classes/EditorInspectorPlugin.xml
@@ -13,7 +13,7 @@
To use [EditorInspectorPlugin], register it using the [method EditorPlugin.add_inspector_plugin] method first.
</description>
<tutorials>
- <link title="Inspector plugins">https://docs.godotengine.org/en/latest/tutorials/plugins/editor/inspector_plugins.html</link>
+ <link title="Inspector plugins">$DOCS_URL/tutorials/plugins/editor/inspector_plugins.html</link>
</tutorials>
<methods>
<method name="_can_handle" qualifiers="virtual const">
@@ -25,8 +25,9 @@
</method>
<method name="_parse_begin" qualifiers="virtual">
<return type="void" />
+ <argument index="0" name="object" type="Object" />
<description>
- Called to allow adding controls at the beginning of the list.
+ Called to allow adding controls at the beginning of the property list for [code]object[/code].
</description>
</method>
<method name="_parse_category" qualifiers="virtual">
@@ -34,12 +35,22 @@
<argument index="0" name="object" type="Object" />
<argument index="1" name="category" type="String" />
<description>
+ Called to allow adding controls at the beginning of a category in the property list for [code]object[/code].
</description>
</method>
<method name="_parse_end" qualifiers="virtual">
<return type="void" />
+ <argument index="0" name="object" type="Object" />
+ <description>
+ Called to allow adding controls at the end of the property list for [code]object[/code].
+ </description>
+ </method>
+ <method name="_parse_group" qualifiers="virtual">
+ <return type="void" />
+ <argument index="0" name="object" type="Object" />
+ <argument index="1" name="group" type="String" />
<description>
- Called to allow adding controls at the end of the list.
+ Called to allow adding controls at the beginning of a group or a sub-group in the property list for [code]object[/code].
</description>
</method>
<method name="_parse_property" qualifiers="virtual">
@@ -52,7 +63,7 @@
<argument index="5" name="usage_flags" type="int" />
<argument index="6" name="wide" type="bool" />
<description>
- Called to allow adding property specific editors to the inspector. Usually these inherit [EditorProperty]. Returning [code]true[/code] removes the built-in editor for this property, otherwise allows to insert a custom editor before the built-in one.
+ Called to allow adding property-specific editors to the property list for [code]object[/code]. The added editor control must extend [EditorProperty]. Returning [code]true[/code] removes the built-in editor for this property, otherwise allows to insert a custom editor before the built-in one.
</description>
</method>
<method name="add_custom_control">
diff --git a/doc/classes/EditorNode3DGizmoPlugin.xml b/doc/classes/EditorNode3DGizmoPlugin.xml
index 08423c4577..3bcd9e7764 100644
--- a/doc/classes/EditorNode3DGizmoPlugin.xml
+++ b/doc/classes/EditorNode3DGizmoPlugin.xml
@@ -8,7 +8,7 @@
To use [EditorNode3DGizmoPlugin], register it using the [method EditorPlugin.add_spatial_gizmo_plugin] method first.
</description>
<tutorials>
- <link title="Spatial gizmo plugins">https://docs.godotengine.org/en/latest/tutorials/plugins/editor/spatial_gizmos.html</link>
+ <link title="Spatial gizmo plugins">$DOCS_URL/tutorials/plugins/editor/spatial_gizmos.html</link>
</tutorials>
<methods>
<method name="_can_be_hidden" qualifiers="virtual const">
diff --git a/doc/classes/EditorPaths.xml b/doc/classes/EditorPaths.xml
index 92a2cff27f..c4d4c92afe 100644
--- a/doc/classes/EditorPaths.xml
+++ b/doc/classes/EditorPaths.xml
@@ -1,35 +1,65 @@
<?xml version="1.0" encoding="UTF-8" ?>
<class name="EditorPaths" inherits="Object" version="4.0">
<brief_description>
+ Editor-only singleton that returns paths to various OS-specific data folders and files.
</brief_description>
<description>
+ This editor-only singleton returns OS-specific paths to various data folders and files. It can be used in editor plugins to ensure files are saved in the correct location on each operating system.
+ [b]Note:[/b] This singleton is not accessible in exported projects. Attempting to access it in an exported project will result in a script error as the singleton won't be declared. To prevent script errors in exported projects, use [method Engine.has_singleton] to check whether the singleton is available before using it.
+ [b]Note:[/b] Godot complies with the [url=https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html]XDG Base Directory Specification[/url] on [i]all[/i] platforms. You can override environment variables following the specification to change the editor and project data paths.
</description>
<tutorials>
+ <link title="File paths in Godot projects">https://docs.godotengine.org/en/latest/tutorials/io/data_paths.html</link>
</tutorials>
<methods>
<method name="get_cache_dir" qualifiers="const">
<return type="String" />
<description>
+ Returns the absolute path to the user's cache folder. This folder should be used for temporary data that can be removed safely whenever the editor is closed (such as generated resource thumbnails).
+ [b]Default paths per platform:[/b]
+ [codeblock]
+ - Windows: %LOCALAPPDATA%\Godot\
+ - macOS: ~/Library/Caches/Godot/
+ - Linux: ~/.cache/godot/
+ [/codeblock]
</description>
</method>
<method name="get_config_dir" qualifiers="const">
<return type="String" />
<description>
+ Returns the absolute path to the user's configuration folder. This folder should be used for [i]persistent[/i] user configuration files.
+ [b]Default paths per platform:[/b]
+ [codeblock]
+ - Windows: %APPDATA%\Godot\ (same as `get_data_dir()`)
+ - macOS: ~/Library/Application Support/Godot/ (same as `get_data_dir()`)
+ - Linux: ~/.config/godot/
+ [/codeblock]
</description>
</method>
<method name="get_data_dir" qualifiers="const">
<return type="String" />
<description>
+ Returns the absolute path to the user's data folder. This folder should be used for [i]persistent[/i] user data files such as installed export templates.
+ [b]Default paths per platform:[/b]
+ [codeblock]
+ - Windows: %APPDATA%\Godot\ (same as `get_config_dir()`)
+ - macOS: ~/Library/Application Support/Godot/ (same as `get_config_dir()`)
+ - Linux: ~/.local/share/godot/
+ [/codeblock]
</description>
</method>
<method name="get_self_contained_file" qualifiers="const">
<return type="String" />
<description>
+ Returns the absolute path to the self-contained file that makes the current Godot editor instance be considered as self-contained. Returns an empty string if the current Godot editor instance isn't self-contained. See also [method is_self_contained].
</description>
</method>
<method name="is_self_contained" qualifiers="const">
<return type="bool" />
<description>
+ Returns [code]true[/code] if the editor is marked as self-contained, [code]false[/code] otherwise. When self-contained mode is enabled, user configuration, data and cache files are saved in an [code]editor_data/[/code] folder next to the editor binary. This makes portable usage easier and ensures the Godot editor minimizes file writes outside its own folder. Self-contained mode is not available for exported projects.
+ Self-contained mode can be enabled by creating a file named [code]._sc_[/code] or [code]_sc_[/code] in the same folder as the editor binary while the editor is not running. See also [method get_self_contained_file].
+ [b]Note:[/b] The Steam release of Godot uses self-contained mode by default.
</description>
</method>
</methods>
diff --git a/doc/classes/EditorPlugin.xml b/doc/classes/EditorPlugin.xml
index 8df6d721d4..7b0a300782 100644
--- a/doc/classes/EditorPlugin.xml
+++ b/doc/classes/EditorPlugin.xml
@@ -7,7 +7,7 @@
Plugins are used by the editor to extend functionality. The most common types of plugins are those which edit a given node or resource type, import plugins and export plugins. See also [EditorScript] to add functions to the editor.
</description>
<tutorials>
- <link title="Editor plugins documentation index">https://docs.godotengine.org/en/latest/tutorials/plugins/editor/index.html</link>
+ <link title="Editor plugins documentation index">$DOCS_URL/tutorials/plugins/editor/index.html</link>
</tutorials>
<methods>
<method name="_apply_changes" qualifiers="virtual">
diff --git a/doc/classes/EditorProperty.xml b/doc/classes/EditorProperty.xml
index 5f342e6dc2..5ae034c3ba 100644
--- a/doc/classes/EditorProperty.xml
+++ b/doc/classes/EditorProperty.xml
@@ -110,7 +110,7 @@
</signal>
<signal name="property_checked">
<argument index="0" name="property" type="StringName" />
- <argument index="1" name="bool" type="String" />
+ <argument index="1" name="checked" type="bool" />
<description>
Emitted when a property was checked. Used internally.
</description>
@@ -134,6 +134,14 @@
Emit it if you want to key a property with a single value.
</description>
</signal>
+ <signal name="property_pinned">
+ <argument index="0" name="property" type="StringName" />
+ <argument index="1" name="pinned" type="bool" />
+ <description>
+ Emit it if you want to mark (or unmark) the value of a property for being saved regardless of being equal to the default value.
+ The default value is the one the property will get when the node is just instantiated and can come from an ancestor scene in the inheritance/instancing chain, a script or a builtin class.
+ </description>
+ </signal>
<signal name="resource_selected">
<argument index="0" name="path" type="String" />
<argument index="1" name="resource" type="Resource" />
diff --git a/doc/classes/EditorResourcePicker.xml b/doc/classes/EditorResourcePicker.xml
index 9c490cbb3e..b26b6f9527 100644
--- a/doc/classes/EditorResourcePicker.xml
+++ b/doc/classes/EditorResourcePicker.xml
@@ -62,8 +62,9 @@
</signal>
<signal name="resource_selected">
<argument index="0" name="resource" type="Resource" />
+ <argument index="1" name="edit" type="bool" />
<description>
- Emitted when the resource value was set and user clicked to edit it.
+ Emitted when the resource value was set and user clicked to edit it. When [code]edit[/code] is [code]true[/code], the signal was caused by the context menu "Edit" option.
</description>
</signal>
</signals>
diff --git a/doc/classes/EditorSceneFormatImporter.xml b/doc/classes/EditorSceneFormatImporter.xml
index 6dbd80604e..5b5d6c4598 100644
--- a/doc/classes/EditorSceneFormatImporter.xml
+++ b/doc/classes/EditorSceneFormatImporter.xml
@@ -20,6 +20,19 @@
<description>
</description>
</method>
+ <method name="_get_import_options" qualifiers="virtual">
+ <return type="void" />
+ <argument index="0" name="path" type="String" />
+ <description>
+ </description>
+ </method>
+ <method name="_get_option_visibility" qualifiers="virtual const">
+ <return type="Variant" />
+ <argument index="0" name="path" type="String" />
+ <argument index="1" name="option" type="String" />
+ <description>
+ </description>
+ </method>
<method name="_import_animation" qualifiers="virtual">
<return type="Animation" />
<argument index="0" name="path" type="String" />
diff --git a/doc/classes/EditorScenePostImport.xml b/doc/classes/EditorScenePostImport.xml
index 8a731a6d1d..d90af6ed9e 100644
--- a/doc/classes/EditorScenePostImport.xml
+++ b/doc/classes/EditorScenePostImport.xml
@@ -52,7 +52,7 @@
[/codeblocks]
</description>
<tutorials>
- <link title="Importing 3D scenes: Custom script">https://docs.godotengine.org/en/latest/tutorials/assets_pipeline/importing_scenes.html#custom-script</link>
+ <link title="Importing 3D scenes: Custom script">$DOCS_URL/tutorials/assets_pipeline/importing_scenes.html#custom-script</link>
</tutorials>
<methods>
<method name="_post_import" qualifiers="virtual">
diff --git a/doc/classes/EditorScenePostImportPlugin.xml b/doc/classes/EditorScenePostImportPlugin.xml
index 07d8fa28b9..904b22d9d3 100644
--- a/doc/classes/EditorScenePostImportPlugin.xml
+++ b/doc/classes/EditorScenePostImportPlugin.xml
@@ -11,6 +11,7 @@
<methods>
<method name="_get_import_options" qualifiers="virtual">
<return type="void" />
+ <argument index="0" name="path" type="String" />
<description>
Override to add general import options. These will appear in the main import dock on the editor. Add options via [method add_import_option] and [method add_import_option_advanced].
</description>
@@ -40,7 +41,8 @@
</method>
<method name="_get_option_visibility" qualifiers="virtual const">
<return type="Variant" />
- <argument index="0" name="option" type="String" />
+ <argument index="0" name="path" type="String" />
+ <argument index="1" name="option" type="String" />
<description>
Return true or false whether a given option should be visible. Return null to ignore.
</description>
diff --git a/doc/classes/Engine.xml b/doc/classes/Engine.xml
index f05a216301..9756b26dee 100644
--- a/doc/classes/Engine.xml
+++ b/doc/classes/Engine.xml
@@ -157,7 +157,7 @@
else:
simulate_physics()
[/codeblock]
- See [url=https://docs.godotengine.org/en/latest/tutorials/plugins/running_code_in_the_editor.html]Running code in the editor[/url] in the documentation for more information.
+ See [url=$DOCS_URL/tutorials/plugins/running_code_in_the_editor.html]Running code in the editor[/url] in the documentation for more information.
[b]Note:[/b] To detect whether the script is run from an editor [i]build[/i] (e.g. when pressing [kbd]F5[/kbd]), use [method OS.has_feature] with the [code]"editor"[/code] argument instead. [code]OS.has_feature("editor")[/code] will evaluate to [code]true[/code] both when the code is running in the editor and when running the project from the editor, but it will evaluate to [code]false[/code] when the code is run from an exported project.
</description>
</method>
diff --git a/doc/classes/Environment.xml b/doc/classes/Environment.xml
index 88c4689b5f..c3d1dc4ab6 100644
--- a/doc/classes/Environment.xml
+++ b/doc/classes/Environment.xml
@@ -11,8 +11,8 @@
- Adjustments
</description>
<tutorials>
- <link title="Environment and post-processing">https://docs.godotengine.org/en/latest/tutorials/3d/environment_and_post_processing.html</link>
- <link title="Light transport in game engines">https://docs.godotengine.org/en/latest/tutorials/3d/high_dynamic_range.html</link>
+ <link title="Environment and post-processing">$DOCS_URL/tutorials/3d/environment_and_post_processing.html</link>
+ <link title="Light transport in game engines">$DOCS_URL/tutorials/3d/high_dynamic_range.html</link>
<link title="3D Material Testers Demo">https://godotengine.org/asset-library/asset/123</link>
<link title="2D HDR Demo">https://godotengine.org/asset-library/asset/110</link>
<link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link>
@@ -39,7 +39,7 @@
The global brightness value of the rendered scene. Effective only if [code]adjustment_enabled[/code] is [code]true[/code].
</member>
<member name="adjustment_color_correction" type="Texture" setter="set_adjustment_color_correction" getter="get_adjustment_color_correction">
- The [Texture2D] or [Texture3D] lookup table (LUT) to use for the built-in post-process color grading. Can use a [GradientTexture] for a 1-dimensional LUT, or a [Texture3D] for a more complex LUT. Effective only if [code]adjustment_enabled[/code] is [code]true[/code].
+ The [Texture2D] or [Texture3D] lookup table (LUT) to use for the built-in post-process color grading. Can use a [GradientTexture1D] for a 1-dimensional LUT, or a [Texture3D] for a more complex LUT. Effective only if [code]adjustment_enabled[/code] is [code]true[/code].
</member>
<member name="adjustment_contrast" type="float" setter="set_adjustment_contrast" getter="get_adjustment_contrast" default="1.0">
The global contrast value of the rendered scene (default value is 1). Effective only if [code]adjustment_enabled[/code] is [code]true[/code].
@@ -171,7 +171,8 @@
<member name="sdfgi_cascades" type="int" setter="set_sdfgi_cascades" getter="get_sdfgi_cascades" enum="Environment.SDFGICascades" default="1">
</member>
<member name="sdfgi_enabled" type="bool" setter="set_sdfgi_enabled" getter="is_sdfgi_enabled" default="false">
- If [code]true[/code], enables signed distance field global illumination.
+ If [code]true[/code], enables signed distance field global illumination for meshes that have their [member GeometryInstance3D.gi_mode] set to [constant GeometryInstance3D.GI_MODE_BAKED]. SDFGI is a real-time global illumination technique that works well with procedurally generated and user-built levels, including in situations where geometry is created during gameplay. The signed distance field is automatically generated around the camera as it moves. Dynamic lights are supported, but dynamic occluders and emissive surfaces are not.
+ [b]Performance:[/b] SDFGI is relatively demanding on the GPU and is not suited to low-end hardware such as integrated graphics (consider [LightmapGI] instead). To improve SDFGI performance, enable [member ProjectSettings.rendering/global_illumination/gi/use_half_resolution] in the Project Settings.
[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light leaks (avoid one-sided walls). For interior levels, enclose your level geometry in a sufficiently large box and bridge the loops to close the mesh.
</member>
<member name="sdfgi_energy" type="float" setter="set_sdfgi_energy" getter="get_sdfgi_energy" default="1.0">
diff --git a/doc/classes/File.xml b/doc/classes/File.xml
index 811aeb8aab..276c1f0223 100644
--- a/doc/classes/File.xml
+++ b/doc/classes/File.xml
@@ -40,12 +40,12 @@
}
[/csharp]
[/codeblocks]
- In the example above, the file will be saved in the user data folder as specified in the [url=https://docs.godotengine.org/en/latest/tutorials/io/data_paths.html]Data paths[/url] documentation.
+ In the example above, the file will be saved in the user data folder as specified in the [url=$DOCS_URL/tutorials/io/data_paths.html]Data paths[/url] documentation.
[b]Note:[/b] To access project resources once exported, it is recommended to use [ResourceLoader] instead of the [File] API, as some files are converted to engine-specific formats and their original source files might not be present in the exported PCK package.
[b]Note:[/b] Files are automatically closed only if the process exits "normally" (such as by clicking the window manager's close button or pressing [b]Alt + F4[/b]). If you stop the project execution by pressing [b]F8[/b] while the project is running, the file won't be closed as the game process will be killed. You can work around this by calling [method flush] at regular intervals.
</description>
<tutorials>
- <link title="File system">https://docs.godotengine.org/en/latest/tutorials/scripting/filesystem.html</link>
+ <link title="File system">$DOCS_URL/tutorials/scripting/filesystem.html</link>
<link title="3D Voxel Demo">https://godotengine.org/asset-library/asset/676</link>
</tutorials>
<methods>
diff --git a/doc/classes/FontData.xml b/doc/classes/FontData.xml
index 04932ddd2d..c403d238c5 100644
--- a/doc/classes/FontData.xml
+++ b/doc/classes/FontData.xml
@@ -93,6 +93,30 @@
Returns font descent (number of pixels below the baseline).
</description>
</method>
+ <method name="get_fixed_size" qualifiers="const">
+ <return type="int" />
+ <description>
+ Returns font fixed size.
+ </description>
+ </method>
+ <method name="get_font_name" qualifiers="const">
+ <return type="String" />
+ <description>
+ Returns font family name.
+ </description>
+ </method>
+ <method name="get_font_style" qualifiers="const">
+ <return type="int" />
+ <description>
+ Returns font style flags, see [enum TextServer.FontStyle].
+ </description>
+ </method>
+ <method name="get_font_style_name" qualifiers="const">
+ <return type="String" />
+ <description>
+ Returns font style name.
+ </description>
+ </method>
<method name="get_glyph_advance" qualifiers="const">
<return type="Vector2" />
<argument index="0" name="cache_index" type="int" />
@@ -463,6 +487,34 @@
Sets the font descent (number of pixels below the baseline).
</description>
</method>
+ <method name="set_fixed_size">
+ <return type="void" />
+ <argument index="0" name="fixed_size" type="int" />
+ <description>
+ Sets the fixed size for the font.
+ </description>
+ </method>
+ <method name="set_font_name">
+ <return type="void" />
+ <argument index="0" name="name" type="String" />
+ <description>
+ Sets the font family name.
+ </description>
+ </method>
+ <method name="set_font_style">
+ <return type="void" />
+ <argument index="0" name="style" type="int" />
+ <description>
+ Sets the font style flags, see [enum TextServer.FontStyle].
+ </description>
+ </method>
+ <method name="set_font_style_name">
+ <return type="void" />
+ <argument index="0" name="name" type="String" />
+ <description>
+ Sets the font style name.
+ </description>
+ </method>
<method name="set_force_autohinter">
<return type="void" />
<argument index="0" name="force_autohinter" type="bool" />
diff --git a/doc/classes/GPUParticles2D.xml b/doc/classes/GPUParticles2D.xml
index 72bd6a6411..72adc49742 100644
--- a/doc/classes/GPUParticles2D.xml
+++ b/doc/classes/GPUParticles2D.xml
@@ -8,7 +8,7 @@
Use the [code]process_material[/code] property to add a [ParticlesMaterial] to configure particle appearance and behavior. Alternatively, you can add a [ShaderMaterial] which will be applied to all particles.
</description>
<tutorials>
- <link title="Particle systems (2D)">https://docs.godotengine.org/en/latest/tutorials/2d/particle_systems_2d.html</link>
+ <link title="Particle systems (2D)">$DOCS_URL/tutorials/2d/particle_systems_2d.html</link>
<link title="2D Dodge The Creeps Demo">https://godotengine.org/asset-library/asset/515</link>
</tutorials>
<methods>
diff --git a/doc/classes/GPUParticles3D.xml b/doc/classes/GPUParticles3D.xml
index 0bed561de3..771056cb93 100644
--- a/doc/classes/GPUParticles3D.xml
+++ b/doc/classes/GPUParticles3D.xml
@@ -8,7 +8,7 @@
Use the [code]process_material[/code] property to add a [ParticlesMaterial] to configure particle appearance and behavior. Alternatively, you can add a [ShaderMaterial] which will be applied to all particles.
</description>
<tutorials>
- <link title="Controlling thousands of fish with Particles">https://docs.godotengine.org/en/latest/tutorials/performance/vertex_animation/controlling_thousands_of_fish.html</link>
+ <link title="Controlling thousands of fish with Particles">$DOCS_URL/tutorials/performance/vertex_animation/controlling_thousands_of_fish.html</link>
<link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link>
</tutorials>
<methods>
diff --git a/doc/classes/GeometryInstance3D.xml b/doc/classes/GeometryInstance3D.xml
index 0a2c0fbe81..b8514c67b8 100644
--- a/doc/classes/GeometryInstance3D.xml
+++ b/doc/classes/GeometryInstance3D.xml
@@ -38,8 +38,10 @@
The extra distance added to the GeometryInstance3D's bounding box ([AABB]) to increase its cull box.
</member>
<member name="gi_lightmap_scale" type="int" setter="set_lightmap_scale" getter="get_lightmap_scale" enum="GeometryInstance3D.LightmapScale" default="0">
+ The texel density to use for lightmapping in [LightmapGI]. Greater scale values provide higher resolution in the lightmap, which can result in sharper shadows for lights that have both direct and indirect light baked. However, greater scale values will also increase the space taken by the mesh in the lightmap texture, which increases the memory, storage, and bake time requirements. When using a single mesh at different scales, consider adjusting this value to keep the lightmap texel density consistent across meshes.
</member>
<member name="gi_mode" type="int" setter="set_gi_mode" getter="get_gi_mode" enum="GeometryInstance3D.GIMode" default="0">
+ The global illumination mode to use for the whole geometry. Use a mode that matches the purpose
</member>
<member name="ignore_occlusion_culling" type="bool" setter="set_ignore_occlusion_culling" getter="is_ignoring_occlusion_culling" default="false">
</member>
@@ -70,7 +72,7 @@
</members>
<constants>
<constant name="SHADOW_CASTING_SETTING_OFF" value="0" enum="ShadowCastingSetting">
- Will not cast any shadows.
+ Will not cast any shadows. Use this to improve performance for small geometry that is unlikely to cast noticeable shadows (such as debris).
</constant>
<constant name="SHADOW_CASTING_SETTING_ON" value="1" enum="ShadowCastingSetting">
Will cast shadows from all visible faces in the GeometryInstance3D.
@@ -85,20 +87,28 @@
In other words, the actual mesh will not be visible, only the shadows casted from the mesh will be.
</constant>
<constant name="GI_MODE_DISABLED" value="0" enum="GIMode">
+ Disabled global illumination mode. Use for dynamic objects that do not contribute to global illumination (such as characters). When using [VoxelGI] and SDFGI, the geometry will [i]receive[/i] indirect lighting and reflections but will not be considered in GI baking. When using [LightmapGI], the object will receive indirect lighting using lightmap probes instead of using the lightmap texture.
</constant>
<constant name="GI_MODE_BAKED" value="1" enum="GIMode">
+ Baked global illumination mode. Use for static objects that contribute to global illumination (such as level geometry). This GI mode is effective when using [VoxelGI], SDFGI and [LightmapGI].
</constant>
<constant name="GI_MODE_DYNAMIC" value="2" enum="GIMode">
+ Dynamic global illumination mode. Use for dynamic objects that contribute to global illumination. This GI mode is only effective when using [VoxelGI], but it has a higher performance impact than [constant GI_MODE_BAKED].
</constant>
<constant name="LIGHTMAP_SCALE_1X" value="0" enum="LightmapScale">
+ The standard texel density for lightmapping with [LightmapGI].
</constant>
<constant name="LIGHTMAP_SCALE_2X" value="1" enum="LightmapScale">
+ Multiplies texel density by 2× for lightmapping with [LightmapGI]. To ensure consistency in texel density, use this when scaling a mesh by a factor between 1.5 and 3.0.
</constant>
<constant name="LIGHTMAP_SCALE_4X" value="2" enum="LightmapScale">
+ Multiplies texel density by 4× for lightmapping with [LightmapGI]. To ensure consistency in texel density, use this when scaling a mesh by a factor between 3.0 and 6.0.
</constant>
<constant name="LIGHTMAP_SCALE_8X" value="3" enum="LightmapScale">
+ Multiplies texel density by 8× for lightmapping with [LightmapGI]. To ensure consistency in texel density, use this when scaling a mesh by a factor greater than 6.0.
</constant>
<constant name="LIGHTMAP_SCALE_MAX" value="4" enum="LightmapScale">
+ Represents the size of the [enum LightmapScale] enum.
</constant>
<constant name="VISIBILITY_RANGE_FADE_DISABLED" value="0" enum="VisibilityRangeFadeMode">
Will not fade itself nor its visibility dependencies, hysteresis will be used instead. See [member visibility_range_begin] and [member Node3D.visibility_parent] for more information.
diff --git a/doc/classes/Gradient.xml b/doc/classes/Gradient.xml
index 93cef07b79..baba71b453 100644
--- a/doc/classes/Gradient.xml
+++ b/doc/classes/Gradient.xml
@@ -51,6 +51,12 @@
Removes the color at the index [code]point[/code].
</description>
</method>
+ <method name="reverse">
+ <return type="void" />
+ <description>
+ Reverses/mirrors the gradient.
+ </description>
+ </method>
<method name="set_color">
<return type="void" />
<argument index="0" name="point" type="int" />
@@ -72,8 +78,22 @@
<member name="colors" type="PackedColorArray" setter="set_colors" getter="get_colors" default="PackedColorArray(0, 0, 0, 1, 1, 1, 1, 1)">
Gradient's colors returned as a [PackedColorArray].
</member>
+ <member name="interpolation_mode" type="int" setter="set_interpolation_mode" getter="get_interpolation_mode" enum="Gradient.InterpolationMode" default="0">
+ Defines how the colors between points of the gradient are interpolated. See [enum InterpolationMode] for available modes.
+ </member>
<member name="offsets" type="PackedFloat32Array" setter="set_offsets" getter="get_offsets" default="PackedFloat32Array(0, 1)">
Gradient's offsets returned as a [PackedFloat32Array].
</member>
</members>
+ <constants>
+ <constant name="GRADIENT_INTERPOLATE_LINEAR" value="0" enum="InterpolationMode">
+ Linear interpolation.
+ </constant>
+ <constant name="GRADIENT_INTERPOLATE_CONSTANT" value="1" enum="InterpolationMode">
+ Constant interpolation, color changes abruptly at each point and stays uniform between. This might cause visible aliasing when used for a gradient texture in some cases.
+ </constant>
+ <constant name="GRADIENT_INTERPOLATE_CUBIC" value="2" enum="InterpolationMode">
+ Cubic interpolation.
+ </constant>
+ </constants>
</class>
diff --git a/doc/classes/GradientTexture.xml b/doc/classes/GradientTexture1D.xml
index 0f0f0b1a37..223439956c 100644
--- a/doc/classes/GradientTexture.xml
+++ b/doc/classes/GradientTexture1D.xml
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="GradientTexture" inherits="Texture2D" version="4.0">
+<class name="GradientTexture1D" inherits="Texture2D" version="4.0">
<brief_description>
Gradient-filled texture.
</brief_description>
<description>
- GradientTexture uses a [Gradient] to fill the texture data. The gradient will be filled from left to right using colors obtained from the gradient. This means the texture does not necessarily represent an exact copy of the gradient, but instead an interpolation of samples obtained from the gradient at fixed steps (see [member width]).
+ GradientTexture1D uses a [Gradient] to fill the texture data. The gradient will be filled from left to right using colors obtained from the gradient. This means the texture does not necessarily represent an exact copy of the gradient, but instead an interpolation of samples obtained from the gradient at fixed steps (see [member width]).
</description>
<tutorials>
</tutorials>
diff --git a/doc/classes/GraphEdit.xml b/doc/classes/GraphEdit.xml
index 673bf19122..e962992491 100644
--- a/doc/classes/GraphEdit.xml
+++ b/doc/classes/GraphEdit.xml
@@ -141,7 +141,7 @@
<argument index="3" name="to_port" type="int" />
<argument index="4" name="amount" type="float" />
<description>
- Sets the coloration of the connection between [code]from[/code]'s [code]from_port[/code] and [code]to[/code]'s [code]to_port[/code] with the color provided in the [code]activity[/code] theme property.
+ Sets the coloration of the connection between [code]from[/code]'s [code]from_port[/code] and [code]to[/code]'s [code]to_port[/code] with the color provided in the [theme_item activity] theme property.
</description>
</method>
<method name="set_selected">
diff --git a/doc/classes/GraphNode.xml b/doc/classes/GraphNode.xml
index ff6271d2aa..e9226f7c1d 100644
--- a/doc/classes/GraphNode.xml
+++ b/doc/classes/GraphNode.xml
@@ -285,10 +285,10 @@
No overlay is shown.
</constant>
<constant name="OVERLAY_BREAKPOINT" value="1" enum="Overlay">
- Show overlay set in the [code]breakpoint[/code] theme property.
+ Show overlay set in the [theme_item breakpoint] theme property.
</constant>
<constant name="OVERLAY_POSITION" value="2" enum="Overlay">
- Show overlay set in the [code]position[/code] theme property.
+ Show overlay set in the [theme_item position] theme property.
</constant>
</constants>
<theme_items>
diff --git a/doc/classes/HTTPClient.xml b/doc/classes/HTTPClient.xml
index 9f33c400f4..a50983853d 100644
--- a/doc/classes/HTTPClient.xml
+++ b/doc/classes/HTTPClient.xml
@@ -15,8 +15,8 @@
[b]Warning:[/b] SSL/TLS certificate revocation and certificate pinning are currently not supported. Revoked certificates are accepted as long as they are otherwise valid. If this is a concern, you may want to use automatically managed certificates with a short validity period.
</description>
<tutorials>
- <link title="HTTP client class">https://docs.godotengine.org/en/latest/tutorials/networking/http_client_class.html</link>
- <link title="SSL certificates">https://docs.godotengine.org/en/latest/tutorials/networking/ssl_certificates.html</link>
+ <link title="HTTP client class">$DOCS_URL/tutorials/networking/http_client_class.html</link>
+ <link title="SSL certificates">$DOCS_URL/tutorials/networking/ssl_certificates.html</link>
</tutorials>
<methods>
<method name="close">
diff --git a/doc/classes/HTTPRequest.xml b/doc/classes/HTTPRequest.xml
index 558e51aefe..aaaf863c69 100644
--- a/doc/classes/HTTPRequest.xml
+++ b/doc/classes/HTTPRequest.xml
@@ -153,8 +153,8 @@
[b]Gzipped response bodies[/b]: HTTPRequest will automatically handle decompression of response bodies. A [code]Accept-Encoding[/code] header will be automatically added to each of your requests, unless one is already specified. Any response with a [code]Content-Encoding: gzip[/code] header will automatically be decompressed and delivered to you as uncompressed bytes.
</description>
<tutorials>
- <link title="Making HTTP requests">https://docs.godotengine.org/en/latest/tutorials/networking/http_request_class.html</link>
- <link title="SSL certificates">https://docs.godotengine.org/en/latest/tutorials/networking/ssl_certificates.html</link>
+ <link title="Making HTTP requests">$DOCS_URL/tutorials/networking/http_request_class.html</link>
+ <link title="SSL certificates">$DOCS_URL/tutorials/networking/ssl_certificates.html</link>
</tutorials>
<methods>
<method name="cancel_request">
diff --git a/doc/classes/Image.xml b/doc/classes/Image.xml
index 492bddca1f..8a4bbee0fa 100644
--- a/doc/classes/Image.xml
+++ b/doc/classes/Image.xml
@@ -9,7 +9,7 @@
[b]Note:[/b] The maximum image size is 16384×16384 pixels due to graphics hardware limitations. Larger images may fail to import.
</description>
<tutorials>
- <link title="Importing images">https://docs.godotengine.org/en/latest/tutorials/assets_pipeline/importing_images.html</link>
+ <link title="Importing images">$DOCS_URL/tutorials/assets_pipeline/importing_images.html</link>
</tutorials>
<methods>
<method name="adjust_bcs">
@@ -154,7 +154,15 @@
<return type="void" />
<argument index="0" name="color" type="Color" />
<description>
- Fills the image with a given [Color].
+ Fills the image with [code]color[/code].
+ </description>
+ </method>
+ <method name="fill_rect">
+ <return type="void" />
+ <argument index="0" name="rect" type="Rect2" />
+ <argument index="1" name="color" type="Color" />
+ <description>
+ Fills [code]rect[/code] with [code]color[/code].
</description>
</method>
<method name="fix_alpha_edges">
@@ -278,7 +286,7 @@
<return type="int" enum="Error" />
<argument index="0" name="path" type="String" />
<description>
- Loads an image from file [code]path[/code]. See [url=https://docs.godotengine.org/en/latest/getting_started/workflow/assets/importing_images.html#supported-image-formats]Supported image formats[/url] for a list of supported image formats and limitations.
+ Loads an image from file [code]path[/code]. See [url=$DOCS_URL/getting_started/workflow/assets/importing_images.html#supported-image-formats]Supported image formats[/url] for a list of supported image formats and limitations.
[b]Warning:[/b] This method should only be used in the editor or in cases when you need to load external images at run-time, such as images located at the [code]user://[/code] directory, and may not work in exported projects.
See also [ImageTexture] description for usage examples.
</description>
diff --git a/doc/classes/ImageTexture.xml b/doc/classes/ImageTexture.xml
index af7178db95..3f96d357b6 100644
--- a/doc/classes/ImageTexture.xml
+++ b/doc/classes/ImageTexture.xml
@@ -28,7 +28,7 @@
[b]Note:[/b] The maximum texture size is 16384×16384 pixels due to graphics hardware limitations.
</description>
<tutorials>
- <link title="Importing images">https://docs.godotengine.org/en/latest/tutorials/assets_pipeline/importing_images.html</link>
+ <link title="Importing images">$DOCS_URL/tutorials/assets_pipeline/importing_images.html</link>
</tutorials>
<methods>
<method name="create_from_image">
diff --git a/doc/classes/Input.xml b/doc/classes/Input.xml
index 1fded42db2..cd5ba2e17f 100644
--- a/doc/classes/Input.xml
+++ b/doc/classes/Input.xml
@@ -7,7 +7,7 @@
A singleton that deals with inputs. This includes key presses, mouse buttons and movement, joypads, and input actions. Actions and their events can be set in the [b]Input Map[/b] tab in the [b]Project &gt; Project Settings[/b], or with the [InputMap] class.
</description>
<tutorials>
- <link title="Inputs documentation index">https://docs.godotengine.org/en/latest/tutorials/inputs/index.html</link>
+ <link title="Inputs documentation index">$DOCS_URL/tutorials/inputs/index.html</link>
<link title="2D Dodge The Creeps Demo">https://godotengine.org/asset-library/asset/515</link>
<link title="3D Voxel Demo">https://godotengine.org/asset-library/asset/676</link>
</tutorials>
@@ -155,7 +155,7 @@
</description>
</method>
<method name="get_mouse_button_mask" qualifiers="const">
- <return type="int" />
+ <return type="int" enum="MouseButton" />
<description>
Returns mouse buttons as a bitmask. If multiple mouse buttons are pressed at the same time, the bits are added together.
</description>
@@ -236,6 +236,13 @@
Returns [code]true[/code] if you are pressing the mouse button specified with [enum MouseButton].
</description>
</method>
+ <method name="is_physical_key_pressed" qualifiers="const">
+ <return type="bool" />
+ <argument index="0" name="keycode" type="int" enum="Key" />
+ <description>
+ Returns [code]true[/code] if you are pressing the key in the physical location on the 101/102-key US QWERTY keyboard. You can pass a [enum Key] constant.
+ </description>
+ </method>
<method name="joy_connection_changed">
<return type="void" />
<argument index="0" name="device" type="int" />
diff --git a/doc/classes/InputEvent.xml b/doc/classes/InputEvent.xml
index 9dc8fbeffa..09fbe776bf 100644
--- a/doc/classes/InputEvent.xml
+++ b/doc/classes/InputEvent.xml
@@ -7,8 +7,8 @@
Base class of all sort of input event. See [method Node._input].
</description>
<tutorials>
- <link title="InputEvent">https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html</link>
- <link title="Viewport and canvas transforms">https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html</link>
+ <link title="InputEvent">$DOCS_URL/tutorials/inputs/inputevent.html</link>
+ <link title="Viewport and canvas transforms">$DOCS_URL/tutorials/2d/2d_transforms.html</link>
<link title="2D Dodge The Creeps Demo">https://godotengine.org/asset-library/asset/515</link>
<link title="3D Voxel Demo">https://godotengine.org/asset-library/asset/676</link>
</tutorials>
diff --git a/doc/classes/InputEventAction.xml b/doc/classes/InputEventAction.xml
index f09af1a34d..e9c280732a 100644
--- a/doc/classes/InputEventAction.xml
+++ b/doc/classes/InputEventAction.xml
@@ -7,7 +7,7 @@
Contains a generic action which can be targeted from several types of inputs. Actions can be created from the [b]Input Map[/b] tab in the [b]Project &gt; Project Settings[/b] menu. See [method Node._input].
</description>
<tutorials>
- <link title="InputEvent: Actions">https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html#actions</link>
+ <link title="InputEvent: Actions">$DOCS_URL/tutorials/inputs/inputevent.html#actions</link>
<link title="2D Dodge The Creeps Demo">https://godotengine.org/asset-library/asset/515</link>
<link title="3D Voxel Demo">https://godotengine.org/asset-library/asset/676</link>
</tutorials>
diff --git a/doc/classes/InputEventJoypadButton.xml b/doc/classes/InputEventJoypadButton.xml
index ff82913385..3e625c1003 100644
--- a/doc/classes/InputEventJoypadButton.xml
+++ b/doc/classes/InputEventJoypadButton.xml
@@ -7,7 +7,7 @@
Input event type for gamepad buttons. For gamepad analog sticks and joysticks, see [InputEventJoypadMotion].
</description>
<tutorials>
- <link title="InputEvent">https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html</link>
+ <link title="InputEvent">$DOCS_URL/tutorials/inputs/inputevent.html</link>
</tutorials>
<members>
<member name="button_index" type="int" setter="set_button_index" getter="get_button_index" enum="JoyButton" default="0">
diff --git a/doc/classes/InputEventJoypadMotion.xml b/doc/classes/InputEventJoypadMotion.xml
index 92161974ba..b3f9013553 100644
--- a/doc/classes/InputEventJoypadMotion.xml
+++ b/doc/classes/InputEventJoypadMotion.xml
@@ -7,7 +7,7 @@
Stores information about joystick motions. One [InputEventJoypadMotion] represents one axis at a time.
</description>
<tutorials>
- <link title="InputEvent">https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html</link>
+ <link title="InputEvent">$DOCS_URL/tutorials/inputs/inputevent.html</link>
</tutorials>
<members>
<member name="axis" type="int" setter="set_axis" getter="get_axis" enum="JoyAxis" default="0">
diff --git a/doc/classes/InputEventKey.xml b/doc/classes/InputEventKey.xml
index 9cf6872655..8044bf5b99 100644
--- a/doc/classes/InputEventKey.xml
+++ b/doc/classes/InputEventKey.xml
@@ -7,18 +7,18 @@
Stores key presses on the keyboard. Supports key presses, key releases and [member echo] events.
</description>
<tutorials>
- <link title="InputEvent">https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html</link>
+ <link title="InputEvent">$DOCS_URL/tutorials/inputs/inputevent.html</link>
</tutorials>
<methods>
<method name="get_keycode_with_modifiers" qualifiers="const">
- <return type="int" />
+ <return type="int" enum="Key" />
<description>
Returns the keycode combined with modifier keys such as [kbd]Shift[/kbd] or [kbd]Alt[/kbd]. See also [InputEventWithModifiers].
To get a human-readable representation of the [InputEventKey] with modifiers, use [code]OS.get_keycode_string(event.get_keycode_with_modifiers())[/code] where [code]event[/code] is the [InputEventKey].
</description>
</method>
<method name="get_physical_keycode_with_modifiers" qualifiers="const">
- <return type="int" />
+ <return type="int" enum="Key" />
<description>
Returns the physical keycode combined with modifier keys such as [kbd]Shift[/kbd] or [kbd]Alt[/kbd]. See also [InputEventWithModifiers].
To get a human-readable representation of the [InputEventKey] with modifiers, use [code]OS.get_keycode_string(event.get_physical_keycode_with_modifiers())[/code] where [code]event[/code] is the [InputEventKey].
diff --git a/doc/classes/InputEventMouse.xml b/doc/classes/InputEventMouse.xml
index b06068aff3..4878090996 100644
--- a/doc/classes/InputEventMouse.xml
+++ b/doc/classes/InputEventMouse.xml
@@ -7,10 +7,10 @@
Stores general mouse events information.
</description>
<tutorials>
- <link title="InputEvent">https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html</link>
+ <link title="InputEvent">$DOCS_URL/tutorials/inputs/inputevent.html</link>
</tutorials>
<members>
- <member name="button_mask" type="int" setter="set_button_mask" getter="get_button_mask" default="0">
+ <member name="button_mask" type="int" setter="set_button_mask" getter="get_button_mask" enum="MouseButton" default="0">
The mouse button mask identifier, one of or a bitwise combination of the [enum MouseButton] button masks.
</member>
<member name="global_position" type="Vector2" setter="set_global_position" getter="get_global_position" default="Vector2(0, 0)">
diff --git a/doc/classes/InputEventMouseButton.xml b/doc/classes/InputEventMouseButton.xml
index dcfe0d6c71..699217525e 100644
--- a/doc/classes/InputEventMouseButton.xml
+++ b/doc/classes/InputEventMouseButton.xml
@@ -7,7 +7,7 @@
Contains mouse click information. See [method Node._input].
</description>
<tutorials>
- <link title="Mouse and input coordinates">https://docs.godotengine.org/en/latest/tutorials/inputs/mouse_and_input_coordinates.html</link>
+ <link title="Mouse and input coordinates">$DOCS_URL/tutorials/inputs/mouse_and_input_coordinates.html</link>
</tutorials>
<members>
<member name="button_index" type="int" setter="set_button_index" getter="get_button_index" enum="MouseButton" default="0">
diff --git a/doc/classes/InputEventMouseMotion.xml b/doc/classes/InputEventMouseMotion.xml
index 9a0156510e..bd1ae367c2 100644
--- a/doc/classes/InputEventMouseMotion.xml
+++ b/doc/classes/InputEventMouseMotion.xml
@@ -8,7 +8,7 @@
[b]Note:[/b] By default, this event is only emitted once per frame rendered at most. If you need more precise input reporting, call [method Input.set_use_accumulated_input] with [code]false[/code] to make events emitted as often as possible. If you use InputEventMouseMotion to draw lines, consider implementing [url=https://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to avoid visible gaps in lines if the user is moving the mouse quickly.
</description>
<tutorials>
- <link title="Mouse and input coordinates">https://docs.godotengine.org/en/latest/tutorials/inputs/mouse_and_input_coordinates.html</link>
+ <link title="Mouse and input coordinates">$DOCS_URL/tutorials/inputs/mouse_and_input_coordinates.html</link>
<link title="3D Voxel Demo">https://godotengine.org/asset-library/asset/676</link>
</tutorials>
<members>
diff --git a/doc/classes/InputEventScreenDrag.xml b/doc/classes/InputEventScreenDrag.xml
index 373936225b..19c26e3a98 100644
--- a/doc/classes/InputEventScreenDrag.xml
+++ b/doc/classes/InputEventScreenDrag.xml
@@ -7,7 +7,7 @@
Contains screen drag information. See [method Node._input].
</description>
<tutorials>
- <link title="InputEvent">https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html</link>
+ <link title="InputEvent">$DOCS_URL/tutorials/inputs/inputevent.html</link>
</tutorials>
<members>
<member name="index" type="int" setter="set_index" getter="get_index" default="0">
@@ -17,7 +17,7 @@
The drag position.
</member>
<member name="relative" type="Vector2" setter="set_relative" getter="get_relative" default="Vector2(0, 0)">
- The drag position relative to its start position.
+ The drag position relative to the previous position (position at the last frame).
</member>
<member name="speed" type="Vector2" setter="set_speed" getter="get_speed" default="Vector2(0, 0)">
The drag speed.
diff --git a/doc/classes/InputEventScreenTouch.xml b/doc/classes/InputEventScreenTouch.xml
index c731044c98..0694b2eabc 100644
--- a/doc/classes/InputEventScreenTouch.xml
+++ b/doc/classes/InputEventScreenTouch.xml
@@ -8,7 +8,7 @@
Stores multi-touch press/release information. Supports touch press, touch release and [member index] for multi-touch count and order.
</description>
<tutorials>
- <link title="InputEvent">https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html</link>
+ <link title="InputEvent">$DOCS_URL/tutorials/inputs/inputevent.html</link>
</tutorials>
<members>
<member name="index" type="int" setter="set_index" getter="get_index" default="0">
diff --git a/doc/classes/InputEventWithModifiers.xml b/doc/classes/InputEventWithModifiers.xml
index 1b9212bf65..cd4a8aecd0 100644
--- a/doc/classes/InputEventWithModifiers.xml
+++ b/doc/classes/InputEventWithModifiers.xml
@@ -7,7 +7,7 @@
Contains keys events information with modifiers support like [kbd]Shift[/kbd] or [kbd]Alt[/kbd]. See [method Node._input].
</description>
<tutorials>
- <link title="InputEvent">https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html</link>
+ <link title="InputEvent">$DOCS_URL/tutorials/inputs/inputevent.html</link>
</tutorials>
<members>
<member name="alt_pressed" type="bool" setter="set_alt_pressed" getter="is_alt_pressed" default="false">
diff --git a/doc/classes/InputMap.xml b/doc/classes/InputMap.xml
index 855d5b5d71..24f220e892 100644
--- a/doc/classes/InputMap.xml
+++ b/doc/classes/InputMap.xml
@@ -7,7 +7,7 @@
Manages all [InputEventAction] which can be created/modified from the project settings menu [b]Project &gt; Project Settings &gt; Input Map[/b] or in code with [method add_action] and [method action_add_event]. See [method Node._input].
</description>
<tutorials>
- <link title="InputEvent: InputMap">https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html#inputmap</link>
+ <link title="InputEvent: InputMap">$DOCS_URL/tutorials/inputs/inputevent.html#inputmap</link>
</tutorials>
<methods>
<method name="action_add_event">
diff --git a/doc/classes/JNISingleton.xml b/doc/classes/JNISingleton.xml
index ce39e1f567..c887f72767 100644
--- a/doc/classes/JNISingleton.xml
+++ b/doc/classes/JNISingleton.xml
@@ -7,6 +7,6 @@
The JNISingleton is implemented only in the Android export. It's used to call methods and connect signals from an Android plugin written in Java or Kotlin. Methods and signals can be called and connected to the JNISingleton as if it is a Node. See [url=https://en.wikipedia.org/wiki/Java_Native_Interface]Java Native Interface - Wikipedia[/url] for more information.
</description>
<tutorials>
- <link title="Creating Android plugins">https://docs.godotengine.org/en/latest/tutorials/platform/android/android_plugin.html#doc-android-plugin</link>
+ <link title="Creating Android plugins">$DOCS_URL/tutorials/platform/android/android_plugin.html#doc-android-plugin</link>
</tutorials>
</class>
diff --git a/doc/classes/JavaScript.xml b/doc/classes/JavaScript.xml
index 2bb2666df4..aeaf8ac1f5 100644
--- a/doc/classes/JavaScript.xml
+++ b/doc/classes/JavaScript.xml
@@ -5,10 +5,10 @@
</brief_description>
<description>
The JavaScript singleton is implemented only in the HTML5 export. It's used to access the browser's JavaScript context. This allows interaction with embedding pages or calling third-party JavaScript APIs.
- [b]Note:[/b] This singleton can be disabled at build-time to improve security. By default, the JavaScript singleton is enabled. Official export templates also have the JavaScript singleton enabled. See [url=https://docs.godotengine.org/en/latest/development/compiling/compiling_for_web.html]Compiling for the Web[/url] in the documentation for more information.
+ [b]Note:[/b] This singleton can be disabled at build-time to improve security. By default, the JavaScript singleton is enabled. Official export templates also have the JavaScript singleton enabled. See [url=$DOCS_URL/development/compiling/compiling_for_web.html]Compiling for the Web[/url] in the documentation for more information.
</description>
<tutorials>
- <link title="Exporting for the Web: Calling JavaScript from script">https://docs.godotengine.org/en/latest/tutorials/export/exporting_for_web.html#calling-javascript-from-script</link>
+ <link title="Exporting for the Web: Calling JavaScript from script">$DOCS_URL/tutorials/export/exporting_for_web.html#calling-javascript-from-script</link>
</tutorials>
<methods>
<method name="create_callback">
diff --git a/doc/classes/Label.xml b/doc/classes/Label.xml
index 3c349e052f..24ebf08c36 100644
--- a/doc/classes/Label.xml
+++ b/doc/classes/Label.xml
@@ -194,7 +194,7 @@
The vertical offset of the text's shadow.
</theme_item>
<theme_item name="shadow_outline_size" data_type="constant" type="int" default="1">
- Shadow outline size. If set to 1 or greater, the shadow will be displayed around the whole text as an outline.
+ The size of the shadow outline.
</theme_item>
</theme_items>
</class>
diff --git a/doc/classes/Light2D.xml b/doc/classes/Light2D.xml
index 918e8a5c8a..039425b15f 100644
--- a/doc/classes/Light2D.xml
+++ b/doc/classes/Light2D.xml
@@ -8,7 +8,7 @@
[b]Note:[/b] Light2D can also be used as a mask.
</description>
<tutorials>
- <link title="2D lights and shadows">https://docs.godotengine.org/en/latest/tutorials/2d/2d_lights_and_shadows.html</link>
+ <link title="2D lights and shadows">$DOCS_URL/tutorials/2d/2d_lights_and_shadows.html</link>
</tutorials>
<methods>
<method name="get_height" qualifiers="const">
diff --git a/doc/classes/Light3D.xml b/doc/classes/Light3D.xml
index dbda22d618..009ad1f609 100644
--- a/doc/classes/Light3D.xml
+++ b/doc/classes/Light3D.xml
@@ -7,7 +7,7 @@
Light3D is the [i]abstract[/i] base class for light nodes. As it can't be instantiated, it shouldn't be used directly. Other types of light nodes inherit from it. Light3D contains the common variables and parameters used for lighting.
</description>
<tutorials>
- <link title="3D lights and shadows">https://docs.godotengine.org/en/latest/tutorials/3d/lights_and_shadows.html</link>
+ <link title="3D lights and shadows">$DOCS_URL/tutorials/3d/lights_and_shadows.html</link>
<link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link>
</tutorials>
<methods>
diff --git a/doc/classes/LightOccluder2D.xml b/doc/classes/LightOccluder2D.xml
index ba795a29a1..d883128ac3 100644
--- a/doc/classes/LightOccluder2D.xml
+++ b/doc/classes/LightOccluder2D.xml
@@ -7,7 +7,7 @@
Occludes light cast by a Light2D, casting shadows. The LightOccluder2D must be provided with an [OccluderPolygon2D] in order for the shadow to be computed.
</description>
<tutorials>
- <link title="2D lights and shadows">https://docs.godotengine.org/en/latest/tutorials/2d/2d_lights_and_shadows.html</link>
+ <link title="2D lights and shadows">$DOCS_URL/tutorials/2d/2d_lights_and_shadows.html</link>
</tutorials>
<members>
<member name="occluder" type="OccluderPolygon2D" setter="set_occluder_polygon" getter="get_occluder_polygon">
diff --git a/doc/classes/LightmapGI.xml b/doc/classes/LightmapGI.xml
index 0cdf9f820f..b7d4c93fd5 100644
--- a/doc/classes/LightmapGI.xml
+++ b/doc/classes/LightmapGI.xml
@@ -1,8 +1,12 @@
<?xml version="1.0" encoding="UTF-8" ?>
<class name="LightmapGI" inherits="VisualInstance3D" version="4.0">
<brief_description>
+ Computes and stores baked lightmaps for fast global illumination.
</brief_description>
<description>
+ The [LightmapGI] node is used to compute and store baked lightmaps. Lightmaps are used to provide high-quality indirect lighting with very little light leaking. [LightmapGI] can also provide rough reflections using spherical harmonics if [member directional] is enabled. Dynamic objects can receive indirect lighting thanks to [i]light probes[/i], which can be automatically placed by setting [member generate_probes_subdiv]. Additional lightmap probes can also be added by creating [LightmapProbe] nodes. The downside is that lightmaps are fully static and cannot be baked in an exported project. Baking a [LightmapGI] node is also slower compared to [VoxelGI].
+ [b]Procedural generation:[/b] Lightmap baking functionality is only available in the editor. This means [LightmapGI] is not suited to procedurally generated or user-built levels. For procedurally generated or user-built levels, use [VoxelGI] or SDFGI instead (see [member Environment.sdfgi_enabled]).
+ [b]Performance:[/b] [LightmapGI] provides the best possible run-time performance for global illumination. It is suitable for low-end hardware including integrated graphics and mobile devices.
</description>
<tutorials>
</tutorials>
diff --git a/doc/classes/LineEdit.xml b/doc/classes/LineEdit.xml
index f79ba5a16f..a75bd2f704 100644
--- a/doc/classes/LineEdit.xml
+++ b/doc/classes/LineEdit.xml
@@ -196,6 +196,9 @@
<member name="expand_to_text_length" type="bool" setter="set_expand_to_text_length_enabled" getter="is_expand_to_text_length_enabled" default="false">
If [code]true[/code], the [LineEdit] width will increase to stay longer than the [member text]. It will [b]not[/b] compress if the [member text] is shortened.
</member>
+ <member name="flat" type="bool" setter="set_flat" getter="is_flat" default="false">
+ If [code]true[/code], the [LineEdit] don't display decoration.
+ </member>
<member name="focus_mode" type="int" setter="set_focus_mode" getter="get_focus_mode" override="true" enum="Control.FocusMode" default="2" />
<member name="language" type="String" setter="set_language" getter="get_language" default="&quot;&quot;">
Language code used for line-breaking and text shaping algorithms, if left empty current locale is used instead.
diff --git a/doc/classes/MenuButton.xml b/doc/classes/MenuButton.xml
index 41ba1fcd0f..7f9d3d96dc 100644
--- a/doc/classes/MenuButton.xml
+++ b/doc/classes/MenuButton.xml
@@ -30,6 +30,9 @@
<member name="action_mode" type="int" setter="set_action_mode" getter="get_action_mode" override="true" enum="BaseButton.ActionMode" default="0" />
<member name="flat" type="bool" setter="set_flat" getter="is_flat" override="true" default="true" />
<member name="focus_mode" type="int" setter="set_focus_mode" getter="get_focus_mode" override="true" enum="Control.FocusMode" default="0" />
+ <member name="items_count" type="int" setter="set_item_count" getter="get_item_count" default="0">
+ The number of items currently in the list.
+ </member>
<member name="switch_on_hover" type="bool" setter="set_switch_on_hover" getter="is_switch_on_hover" default="false">
If [code]true[/code], when the cursor hovers above another [MenuButton] within the same parent which also has [code]switch_on_hover[/code] enabled, it will close the current [MenuButton] and open the other one.
</member>
diff --git a/doc/classes/MeshInstance2D.xml b/doc/classes/MeshInstance2D.xml
index c7b66c8ea3..6873edb3ae 100644
--- a/doc/classes/MeshInstance2D.xml
+++ b/doc/classes/MeshInstance2D.xml
@@ -7,7 +7,7 @@
Node used for displaying a [Mesh] in 2D. Can be constructed from an existing [Sprite2D] via a tool in the editor toolbar. Select "Sprite2D" then "Convert to Mesh2D", select settings in popup and press "Create Mesh2D".
</description>
<tutorials>
- <link title="2D meshes">https://docs.godotengine.org/en/latest/tutorials/2d/2d_meshes.html</link>
+ <link title="2D meshes">$DOCS_URL/tutorials/2d/2d_meshes.html</link>
</tutorials>
<members>
<member name="mesh" type="Mesh" setter="set_mesh" getter="get_mesh">
diff --git a/doc/classes/MultiMesh.xml b/doc/classes/MultiMesh.xml
index 7890bbcc33..cf3b395b7b 100644
--- a/doc/classes/MultiMesh.xml
+++ b/doc/classes/MultiMesh.xml
@@ -10,8 +10,8 @@
Since instances may have any behavior, the AABB used for visibility must be provided by the user.
</description>
<tutorials>
- <link title="Animating thousands of fish with MultiMeshInstance">https://docs.godotengine.org/en/latest/tutorials/performance/vertex_animation/animating_thousands_of_fish.html</link>
- <link title="Optimization using MultiMeshes">https://docs.godotengine.org/en/latest/tutorials/performance/using_multimesh.html</link>
+ <link title="Animating thousands of fish with MultiMeshInstance">$DOCS_URL/tutorials/performance/vertex_animation/animating_thousands_of_fish.html</link>
+ <link title="Optimization using MultiMeshes">$DOCS_URL/tutorials/performance/using_multimesh.html</link>
</tutorials>
<methods>
<method name="get_aabb" qualifiers="const">
diff --git a/doc/classes/MultiMeshInstance3D.xml b/doc/classes/MultiMeshInstance3D.xml
index 158579e952..d78a045aca 100644
--- a/doc/classes/MultiMeshInstance3D.xml
+++ b/doc/classes/MultiMeshInstance3D.xml
@@ -8,9 +8,9 @@
This is useful to optimize the rendering of a high amount of instances of a given mesh (for example trees in a forest or grass strands).
</description>
<tutorials>
- <link title="Animating thousands of fish with MultiMeshInstance">https://docs.godotengine.org/en/latest/tutorials/performance/vertex_animation/animating_thousands_of_fish.html</link>
- <link title="Using MultiMeshInstance">https://docs.godotengine.org/en/latest/tutorials/3d/using_multi_mesh_instance.html</link>
- <link title="Optimization using MultiMeshes">https://docs.godotengine.org/en/latest/tutorials/performance/using_multimesh.html</link>
+ <link title="Animating thousands of fish with MultiMeshInstance">$DOCS_URL/tutorials/performance/vertex_animation/animating_thousands_of_fish.html</link>
+ <link title="Using MultiMeshInstance">$DOCS_URL/tutorials/3d/using_multi_mesh_instance.html</link>
+ <link title="Optimization using MultiMeshes">$DOCS_URL/tutorials/performance/using_multimesh.html</link>
</tutorials>
<members>
<member name="multimesh" type="MultiMesh" setter="set_multimesh" getter="get_multimesh">
diff --git a/doc/classes/MultiplayerPeer.xml b/doc/classes/MultiplayerPeer.xml
index 67d3161aba..b7bd7bef36 100644
--- a/doc/classes/MultiplayerPeer.xml
+++ b/doc/classes/MultiplayerPeer.xml
@@ -9,7 +9,7 @@
[b]Note:[/b] When exporting to Android, make sure to enable the [code]INTERNET[/code] permission in the Android export preset before exporting the project or using one-click deploy. Otherwise, network communication of any kind will be blocked by Android.
</description>
<tutorials>
- <link title="High-level multiplayer">https://docs.godotengine.org/en/latest/tutorials/networking/high_level_multiplayer.html</link>
+ <link title="High-level multiplayer">$DOCS_URL/tutorials/networking/high_level_multiplayer.html</link>
<link title="WebRTC Signaling Demo">https://godotengine.org/asset-library/asset/537</link>
</tutorials>
<methods>
diff --git a/doc/classes/Mutex.xml b/doc/classes/Mutex.xml
index a840cb2ec7..90c81686b1 100644
--- a/doc/classes/Mutex.xml
+++ b/doc/classes/Mutex.xml
@@ -7,7 +7,7 @@
A synchronization mutex (mutual exclusion). This is used to synchronize multiple [Thread]s, and is equivalent to a binary [Semaphore]. It guarantees that only one thread can ever acquire the lock at a time. A mutex can be used to protect a critical section; however, be careful to avoid deadlocks.
</description>
<tutorials>
- <link title="Using multiple threads">https://docs.godotengine.org/en/latest/tutorials/performance/using_multiple_threads.html</link>
+ <link title="Using multiple threads">$DOCS_URL/tutorials/performance/using_multiple_threads.html</link>
</tutorials>
<methods>
<method name="lock">
diff --git a/doc/classes/NavigationObstacle2D.xml b/doc/classes/NavigationObstacle2D.xml
index 462532d49a..b73d7f2bec 100644
--- a/doc/classes/NavigationObstacle2D.xml
+++ b/doc/classes/NavigationObstacle2D.xml
@@ -8,4 +8,12 @@
</description>
<tutorials>
</tutorials>
+ <members>
+ <member name="estimate_radius" type="bool" setter="set_estimate_radius" getter="is_radius_estimated" default="true">
+ Enables radius estimation algorithm which uses parent's collision shapes to determine the obstacle radius.
+ </member>
+ <member name="radius" type="float" setter="set_radius" getter="get_radius" default="1.0">
+ The radius of the agent. Used only if [member estimate_radius] is set to false.
+ </member>
+ </members>
</class>
diff --git a/doc/classes/NavigationObstacle3D.xml b/doc/classes/NavigationObstacle3D.xml
index c0cb7befef..c126c0430f 100644
--- a/doc/classes/NavigationObstacle3D.xml
+++ b/doc/classes/NavigationObstacle3D.xml
@@ -8,4 +8,12 @@
</description>
<tutorials>
</tutorials>
+ <members>
+ <member name="estimate_radius" type="bool" setter="set_estimate_radius" getter="is_radius_estimated" default="true">
+ Enables radius estimation algorithm which uses parent's collision shapes to determine the obstacle radius.
+ </member>
+ <member name="radius" type="float" setter="set_radius" getter="get_radius" default="1.0">
+ The radius of the agent. Used only if [member estimate_radius] is set to false.
+ </member>
+ </members>
</class>
diff --git a/doc/classes/NavigationPolygon.xml b/doc/classes/NavigationPolygon.xml
index 5b5b7c42ef..7ecdca8793 100644
--- a/doc/classes/NavigationPolygon.xml
+++ b/doc/classes/NavigationPolygon.xml
@@ -28,7 +28,7 @@
var polygon = NavigationPolygon.new()
var vertices = PackedVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, 50), Vector2(50, 0)])
polygon.vertices = vertices
- var indices = PackedInt32Array(0, 3, 1)
+ var indices = PackedInt32Array([0, 1, 2, 3])
polygon.add_polygon(indices)
$NavigationRegion2D.navpoly = polygon
[/gdscript]
@@ -36,7 +36,7 @@
var polygon = new NavigationPolygon();
var vertices = new Vector2[] { new Vector2(0, 0), new Vector2(0, 50), new Vector2(50, 50), new Vector2(50, 0) };
polygon.Vertices = vertices;
- var indices = new int[] { 0, 3, 1 };
+ var indices = new int[] { 0, 1, 2, 3 };
polygon.AddPolygon(indices);
GetNode&lt;NavigationRegion2D&gt;("NavigationRegion2D").Navpoly = polygon;
[/csharp]
diff --git a/doc/classes/Node.xml b/doc/classes/Node.xml
index 843db8c174..c75b2e305e 100644
--- a/doc/classes/Node.xml
+++ b/doc/classes/Node.xml
@@ -17,7 +17,7 @@
[b]Networking with nodes:[/b] After connecting to a server (or making one, see [ENetMultiplayerPeer]), it is possible to use the built-in RPC (remote procedure call) system to communicate over the network. By calling [method rpc] with a method name, it will be called locally and in all connected peers (peers = clients and the server that accepts connections). To identify which node receives the RPC call, Godot will use its [NodePath] (make sure node names are the same on all peers). Also, take a look at the high-level networking tutorial and corresponding demos.
</description>
<tutorials>
- <link title="Nodes and scenes">https://docs.godotengine.org/en/latest/getting_started/step_by_step/nodes_and_scenes.htmltml</link>
+ <link title="Nodes and scenes">$DOCS_URL/getting_started/step_by_step/nodes_and_scenes.html</link>
<link title="All Demos">https://github.com/godotengine/godot-demo-projects/</link>
</tutorials>
<methods>
@@ -228,16 +228,19 @@
If [code]include_internal[/code] is [code]false[/code], the returned array won't include internal children (see [code]internal[/code] parameter in [method add_child]).
</description>
</method>
- <method name="get_editor_description" qualifiers="const">
- <return type="String" />
- <description>
- </description>
- </method>
<method name="get_groups" qualifiers="const">
<return type="Array" />
<description>
Returns an array listing the groups that the node is a member of.
[b]Note:[/b] For performance reasons, the order of node groups is [i]not[/i] guaranteed. The order of node groups should not be relied upon as it can vary across project runs.
+ [b]Note:[/b] The engine uses some group names internally (all starting with an underscore). To avoid conflicts with internal groups, do not add custom groups whose name starts with an underscore. To exclude internal groups while looping over [method get_groups], use the following snippet:
+ [codeblock]
+ # Stores the node's non-internal groups only (as an array of Strings).
+ var non_internal_groups = []
+ for group in get_groups():
+ if not group.begins_with("_"):
+ non_internal_groups.push_back(group)
+ [/codeblock]
</description>
</method>
<method name="get_index" qualifiers="const">
@@ -568,6 +571,7 @@
<description>
Replaces a node in a scene by the given one. Subscriptions that pass through this node will be lost.
If [code]keep_groups[/code] is [code]true[/code], the [code]node[/code] is added to the same groups that the replaced node is in.
+ Note that the replaced node is not automatically freed, so you either need to keep it in a variable for later use or free it using [method Object.free].
</description>
</method>
<method name="request_ready">
@@ -618,12 +622,6 @@
Sets the editable children state of [code]node[/code] relative to this node. This method is only intended for use with editor tooling.
</description>
</method>
- <method name="set_editor_description">
- <return type="void" />
- <argument index="0" name="editor_description" type="String" />
- <description>
- </description>
- </method>
<method name="set_multiplayer_authority">
<return type="void" />
<argument index="0" name="id" type="int" />
@@ -702,6 +700,9 @@
<member name="custom_multiplayer" type="MultiplayerAPI" setter="set_custom_multiplayer" getter="get_custom_multiplayer">
The override to the default [MultiplayerAPI]. Set to [code]null[/code] to use the default [SceneTree] one.
</member>
+ <member name="editor_description" type="String" setter="set_editor_description" getter="get_editor_description" default="&quot;&quot;">
+ Add a custom description to a node.
+ </member>
<member name="multiplayer" type="MultiplayerAPI" setter="" getter="get_multiplayer">
The [MultiplayerAPI] instance associated with this node. Either the [member custom_multiplayer], or the default SceneTree one (if inside tree).
</member>
@@ -790,8 +791,8 @@
<constant name="NOTIFICATION_DRAG_END" value="22">
Notification received when a drag ends.
</constant>
- <constant name="NOTIFICATION_PATH_CHANGED" value="23">
- Notification received when the node's [NodePath] changed.
+ <constant name="NOTIFICATION_PATH_RENAMED" value="23">
+ Notification received when the node's name or one of its parents' name is changed. This notification is [i]not[/i] received when the node is removed from the scene tree to be added to another parent later on.
</constant>
<constant name="NOTIFICATION_INTERNAL_PROCESS" value="25">
Notification received every frame when the internal process flag is set (see [method set_process_internal]).
diff --git a/doc/classes/Node2D.xml b/doc/classes/Node2D.xml
index ef5f9ee5c9..b8bf342680 100644
--- a/doc/classes/Node2D.xml
+++ b/doc/classes/Node2D.xml
@@ -7,7 +7,7 @@
A 2D game object, with a transform (position, rotation, and scale). All 2D nodes, including physics objects and sprites, inherit from Node2D. Use Node2D as a parent node to move, scale and rotate children in a 2D project. Also gives control of the node's render order.
</description>
<tutorials>
- <link title="Custom drawing in 2D">https://docs.godotengine.org/en/latest/tutorials/2d/custom_drawing_in_2d.html</link>
+ <link title="Custom drawing in 2D">$DOCS_URL/tutorials/2d/custom_drawing_in_2d.html</link>
<link title="All 2D Demos">https://github.com/godotengine/godot-demo-projects/tree/master/2d</link>
</tutorials>
<methods>
diff --git a/doc/classes/Node3D.xml b/doc/classes/Node3D.xml
index 2ca664e2b5..1036c1fbcf 100644
--- a/doc/classes/Node3D.xml
+++ b/doc/classes/Node3D.xml
@@ -9,7 +9,7 @@
[b]Note:[/b] Unless otherwise specified, all methods that have angle parameters must have angles specified as [i]radians[/i]. To convert degrees to radians, use [method @GlobalScope.deg2rad].
</description>
<tutorials>
- <link title="Introduction to 3D">https://docs.godotengine.org/en/latest/tutorials/3d/introduction_to_3d.html</link>
+ <link title="Introduction to 3D">$DOCS_URL/tutorials/3d/introduction_to_3d.html</link>
<link title="All 3D Demos">https://github.com/godotengine/godot-demo-projects/tree/master/3d</link>
</tutorials>
<methods>
diff --git a/doc/classes/OS.xml b/doc/classes/OS.xml
index 03a3ac053d..7088844547 100644
--- a/doc/classes/OS.xml
+++ b/doc/classes/OS.xml
@@ -31,12 +31,21 @@
[b]Note:[/b] This method is implemented on Linux, macOS and Windows.
</description>
</method>
+ <method name="create_instance">
+ <return type="int" />
+ <argument index="0" name="arguments" type="PackedStringArray" />
+ <description>
+ Creates a new instance of Godot that runs independently. The [code]arguments[/code] are used in the given order and separated by a space.
+ If the process creation succeeds, the method will return the new process ID, which you can use to monitor the process (and potentially terminate it with [method kill]). If the process creation fails, the method will return [code]-1[/code].
+ [b]Note:[/b] This method is implemented on Android, iOS, Linux, macOS and Windows.
+ </description>
+ </method>
<method name="create_process">
<return type="int" />
<argument index="0" name="path" type="String" />
<argument index="1" name="arguments" type="PackedStringArray" />
<description>
- Creates a new process that runs independently of Godot. It will not terminate if Godot terminates. The file specified in [code]path[/code] must exist and be executable. Platform path resolution will be used. The [code]arguments[/code] are used in the given order and separated by a space.
+ Creates a new process that runs independently of Godot. It will not terminate if Godot terminates. The path specified in [code]path[/code] must exist and be executable file or macOS .app bundle. Platform path resolution will be used. The [code]arguments[/code] are used in the given order and separated by a space.
If the process creation succeeds, the method will return the new process ID, which you can use to monitor the process (and potentially terminate it with [method kill]). If the process creation fails, the method will return [code]-1[/code].
For example, running another instance of the project:
[codeblocks]
@@ -49,7 +58,7 @@
[/codeblocks]
See [method execute] if you wish to run an external command and retrieve the results.
[b]Note:[/b] This method is implemented on Android, iOS, Linux, macOS and Windows.
- [b]Note:[/b] On macOS, sandboxed applications are limited to run only embedded helper executables, specified during export.
+ [b]Note:[/b] On macOS, sandboxed applications are limited to run only embedded helper executables, specified during export or system .app bundle, system .app bundles will ignore arguments.
</description>
</method>
<method name="delay_msec" qualifiers="const">
@@ -124,7 +133,7 @@
</description>
</method>
<method name="find_keycode_from_string" qualifiers="const">
- <return type="int" />
+ <return type="int" enum="Key" />
<argument index="0" name="string" type="String" />
<description>
Returns the keycode of the given string (e.g. "Escape").
@@ -133,7 +142,7 @@
<method name="get_cache_dir" qualifiers="const">
<return type="String" />
<description>
- Returns the [i]global[/i] cache data directory according to the operating system's standards. On desktop platforms, this path can be overridden by setting the [code]XDG_CACHE_HOME[/code] environment variable before starting the project. See [url=https://docs.godotengine.org/en/latest/tutorials/io/data_paths.html]File paths in Godot projects[/url] in the documentation for more information. See also [method get_config_dir] and [method get_data_dir].
+ Returns the [i]global[/i] cache data directory according to the operating system's standards. On desktop platforms, this path can be overridden by setting the [code]XDG_CACHE_HOME[/code] environment variable before starting the project. See [url=$DOCS_URL/tutorials/io/data_paths.html]File paths in Godot projects[/url] in the documentation for more information. See also [method get_config_dir] and [method get_data_dir].
Not to be confused with [method get_user_data_dir], which returns the [i]project-specific[/i] user data path.
</description>
</method>
@@ -170,7 +179,7 @@
<method name="get_config_dir" qualifiers="const">
<return type="String" />
<description>
- Returns the [i]global[/i] user configuration directory according to the operating system's standards. On desktop platforms, this path can be overridden by setting the [code]XDG_CONFIG_HOME[/code] environment variable before starting the project. See [url=https://docs.godotengine.org/en/latest/tutorials/io/data_paths.html]File paths in Godot projects[/url] in the documentation for more information. See also [method get_cache_dir] and [method get_data_dir].
+ Returns the [i]global[/i] user configuration directory according to the operating system's standards. On desktop platforms, this path can be overridden by setting the [code]XDG_CONFIG_HOME[/code] environment variable before starting the project. See [url=$DOCS_URL/tutorials/io/data_paths.html]File paths in Godot projects[/url] in the documentation for more information. See also [method get_cache_dir] and [method get_data_dir].
Not to be confused with [method get_user_data_dir], which returns the [i]project-specific[/i] user data path.
</description>
</method>
@@ -185,7 +194,7 @@
<method name="get_data_dir" qualifiers="const">
<return type="String" />
<description>
- Returns the [i]global[/i] user data directory according to the operating system's standards. On desktop platforms, this path can be overridden by setting the [code]XDG_DATA_HOME[/code] environment variable before starting the project. See [url=https://docs.godotengine.org/en/latest/tutorials/io/data_paths.html]File paths in Godot projects[/url] in the documentation for more information. See also [method get_cache_dir] and [method get_config_dir].
+ Returns the [i]global[/i] user data directory according to the operating system's standards. On desktop platforms, this path can be overridden by setting the [code]XDG_DATA_HOME[/code] environment variable before starting the project. See [url=$DOCS_URL/tutorials/io/data_paths.html]File paths in Godot projects[/url] in the documentation for more information. See also [method get_cache_dir] and [method get_config_dir].
Not to be confused with [method get_user_data_dir], which returns the [i]project-specific[/i] user data path.
</description>
</method>
@@ -201,6 +210,7 @@
<return type="String" />
<description>
Returns the path to the current engine executable.
+ [b]Note:[/b] On macOS, always use [method create_instance] instead of relying on executable path.
</description>
</method>
<method name="get_granted_permissions" qualifiers="const">
@@ -212,7 +222,7 @@
</method>
<method name="get_keycode_string" qualifiers="const">
<return type="String" />
- <argument index="0" name="code" type="int" />
+ <argument index="0" name="code" type="int" enum="Key" />
<description>
Returns the given keycode as a string (e.g. Return values: [code]"Escape"[/code], [code]"Shift+Escape"[/code]).
See also [member InputEventKey.keycode] and [method InputEventKey.get_keycode_with_modifiers].
@@ -236,6 +246,13 @@
This can be used to narrow down fully specified locale strings to only the "common" language code, when you don't need the additional information about country code or variants. For example, for a French Canadian user with [code]fr_CA[/code] locale, this would return [code]fr[/code].
</description>
</method>
+ <method name="get_main_thread_id" qualifiers="const">
+ <return type="int" />
+ <description>
+ Returns the ID of the main thread. See [method get_thread_caller_id].
+ [b]Note:[/b] Thread IDs are not deterministic and may be reused across application restarts.
+ </description>
+ </method>
<method name="get_model_name" qualifiers="const">
<return type="String" />
<description>
@@ -322,7 +339,7 @@
<return type="bool" />
<argument index="0" name="tag_name" type="String" />
<description>
- Returns [code]true[/code] if the feature for the given feature tag is supported in the currently running instance, depending on the platform, build, etc. Can be used to check whether you're currently running a debug build, on a certain platform or arch, etc. Refer to the [url=https://docs.godotengine.org/en/latest/getting_started/workflow/export/feature_tags.html]Feature Tags[/url] documentation for more details.
+ Returns [code]true[/code] if the feature for the given feature tag is supported in the currently running instance, depending on the platform, build, etc. Can be used to check whether you're currently running a debug build, on a certain platform or arch, etc. Refer to the [url=$DOCS_URL/getting_started/workflow/export/feature_tags.html]Feature Tags[/url] documentation for more details.
[b]Note:[/b] Tag names are case-sensitive.
</description>
</method>
diff --git a/doc/classes/Object.xml b/doc/classes/Object.xml
index 5a84364b92..860e252805 100644
--- a/doc/classes/Object.xml
+++ b/doc/classes/Object.xml
@@ -29,7 +29,7 @@
[b]Note:[/b] Unlike references to a [RefCounted], references to an Object stored in a variable can become invalid without warning. Therefore, it's recommended to use [RefCounted] for data classes instead of [Object].
</description>
<tutorials>
- <link title="When and how to avoid using nodes for everything">https://docs.godotengine.org/en/latest/tutorials/best_practices/node_alternatives.html</link>
+ <link title="When and how to avoid using nodes for everything">$DOCS_URL/tutorials/best_practices/node_alternatives.html</link>
</tutorials>
<methods>
<method name="_get" qualifiers="virtual">
@@ -350,6 +350,7 @@
<argument index="0" name="property" type="NodePath" />
<description>
Gets the object's property indexed by the given [NodePath]. The node path should be relative to the current object and can use the colon character ([code]:[/code]) to access nested properties. Examples: [code]"position:x"[/code] or [code]"material:next_pass:blend_mode"[/code].
+ [b]Note:[/b] Even though the method takes [NodePath] argument, it doesn't support actual paths to [Node]s in the scene tree, only colon-separated sub-property paths. For the purpose of nodes, use [method Node.get_node_and_resource] instead.
</description>
</method>
<method name="get_instance_id" qualifiers="const">
@@ -567,7 +568,7 @@
<description>
Translates a message using translation catalogs configured in the Project Settings. An additional context could be used to specify the translation context.
Only works if message translation is enabled (which it is by default), otherwise it returns the [code]message[/code] unchanged. See [method set_message_translation].
- See [url=https://docs.godotengine.org/en/latest/tutorials/i18n/internationalizing_games.html]Internationalizing games[/url] for examples of the usage of this method.
+ See [url=$DOCS_URL/tutorials/i18n/internationalizing_games.html]Internationalizing games[/url] for examples of the usage of this method.
</description>
</method>
<method name="tr_n" qualifiers="const">
@@ -581,7 +582,7 @@
Only works if message translation is enabled (which it is by default), otherwise it returns the [code]message[/code] or [code]plural_message[/code] unchanged. See [method set_message_translation].
The number [code]n[/code] is the number or quantity of the plural object. It will be used to guide the translation system to fetch the correct plural form for the selected language.
[b]Note:[/b] Negative and floating-point values usually represent physical entities for which singular and plural don't clearly apply. In such cases, use [method tr].
- See [url=https://docs.godotengine.org/en/latest/tutorials/i18n/localization_using_gettext.html]Localization using gettext[/url] for examples of the usage of this method.
+ See [url=$DOCS_URL/tutorials/i18n/localization_using_gettext.html]Localization using gettext[/url] for examples of the usage of this method.
</description>
</method>
</methods>
diff --git a/doc/classes/OmniLight3D.xml b/doc/classes/OmniLight3D.xml
index e8d5977199..013ad0cc42 100644
--- a/doc/classes/OmniLight3D.xml
+++ b/doc/classes/OmniLight3D.xml
@@ -7,7 +7,7 @@
An Omnidirectional light is a type of [Light3D] that emits light in all directions. The light is attenuated by distance and this attenuation can be configured by changing its energy, radius, and attenuation parameters.
</description>
<tutorials>
- <link title="3D lights and shadows">https://docs.godotengine.org/en/latest/tutorials/3d/lights_and_shadows.html</link>
+ <link title="3D lights and shadows">$DOCS_URL/tutorials/3d/lights_and_shadows.html</link>
</tutorials>
<members>
<member name="omni_attenuation" type="float" setter="set_param" getter="get_param" default="1.0">
diff --git a/doc/classes/PCKPacker.xml b/doc/classes/PCKPacker.xml
index 28508c85e0..b5e7b32225 100644
--- a/doc/classes/PCKPacker.xml
+++ b/doc/classes/PCKPacker.xml
@@ -43,8 +43,8 @@
<method name="pck_start">
<return type="int" enum="Error" />
<argument index="0" name="pck_name" type="String" />
- <argument index="1" name="alignment" type="int" default="0" />
- <argument index="2" name="key" type="String" default="&quot;&quot;" />
+ <argument index="1" name="alignment" type="int" default="32" />
+ <argument index="2" name="key" type="String" default="&quot;0000000000000000000000000000000000000000000000000000000000000000&quot;" />
<argument index="3" name="encrypt_directory" type="bool" default="false" />
<description>
Creates a new PCK file with the name [code]pck_name[/code]. The [code].pck[/code] file extension isn't added automatically, so it should be part of [code]pck_name[/code] (even though it's not required).
diff --git a/doc/classes/PackedByteArray.xml b/doc/classes/PackedByteArray.xml
index f951df1eb7..fd098481e4 100644
--- a/doc/classes/PackedByteArray.xml
+++ b/doc/classes/PackedByteArray.xml
@@ -332,7 +332,7 @@
Appends an element at the end of the array.
</description>
</method>
- <method name="remove">
+ <method name="remove_at">
<return type="void" />
<argument index="0" name="index" type="int" />
<description>
diff --git a/doc/classes/PackedColorArray.xml b/doc/classes/PackedColorArray.xml
index 4aa8a19630..f69c5504da 100644
--- a/doc/classes/PackedColorArray.xml
+++ b/doc/classes/PackedColorArray.xml
@@ -95,7 +95,7 @@
Appends a value to the array.
</description>
</method>
- <method name="remove">
+ <method name="remove_at">
<return type="void" />
<argument index="0" name="index" type="int" />
<description>
diff --git a/doc/classes/PackedFloat32Array.xml b/doc/classes/PackedFloat32Array.xml
index 68fb45a62a..ccac607386 100644
--- a/doc/classes/PackedFloat32Array.xml
+++ b/doc/classes/PackedFloat32Array.xml
@@ -96,7 +96,7 @@
Appends an element at the end of the array.
</description>
</method>
- <method name="remove">
+ <method name="remove_at">
<return type="void" />
<argument index="0" name="index" type="int" />
<description>
diff --git a/doc/classes/PackedFloat64Array.xml b/doc/classes/PackedFloat64Array.xml
index 740591a0c0..b164283b3e 100644
--- a/doc/classes/PackedFloat64Array.xml
+++ b/doc/classes/PackedFloat64Array.xml
@@ -96,7 +96,7 @@
Appends an element at the end of the array.
</description>
</method>
- <method name="remove">
+ <method name="remove_at">
<return type="void" />
<argument index="0" name="index" type="int" />
<description>
diff --git a/doc/classes/PackedInt32Array.xml b/doc/classes/PackedInt32Array.xml
index 7a01bb6c7c..c6ff31ebdd 100644
--- a/doc/classes/PackedInt32Array.xml
+++ b/doc/classes/PackedInt32Array.xml
@@ -96,7 +96,7 @@
Appends a value to the array.
</description>
</method>
- <method name="remove">
+ <method name="remove_at">
<return type="void" />
<argument index="0" name="index" type="int" />
<description>
diff --git a/doc/classes/PackedInt64Array.xml b/doc/classes/PackedInt64Array.xml
index c7b69d4ad5..ff48eb1aad 100644
--- a/doc/classes/PackedInt64Array.xml
+++ b/doc/classes/PackedInt64Array.xml
@@ -96,7 +96,7 @@
Appends a value to the array.
</description>
</method>
- <method name="remove">
+ <method name="remove_at">
<return type="void" />
<argument index="0" name="index" type="int" />
<description>
diff --git a/doc/classes/PackedScene.xml b/doc/classes/PackedScene.xml
index 618123855f..d3a770b35b 100644
--- a/doc/classes/PackedScene.xml
+++ b/doc/classes/PackedScene.xml
@@ -5,7 +5,7 @@
</brief_description>
<description>
A simplified interface to a scene file. Provides access to operations and checks that can be performed on the scene resource itself.
- Can be used to save a node to a file. When saving, the node as well as all the nodes it owns get saved (see [code]owner[/code] property on [Node]).
+ Can be used to save a node to a file. When saving, the node as well as all the nodes it owns get saved (see [member Node.owner] property).
[b]Note:[/b] The node doesn't need to own itself.
[b]Example of loading a saved scene:[/b]
[codeblocks]
@@ -22,7 +22,7 @@
AddChild(scene);
[/csharp]
[/codeblocks]
- [b]Example of saving a node with different owners:[/b] The following example creates 3 objects: [code]Node2D[/code] ([code]node[/code]), [code]RigidDynamicBody2D[/code] ([code]body[/code]) and [code]CollisionObject2D[/code] ([code]collision[/code]). [code]collision[/code] is a child of [code]body[/code] which is a child of [code]node[/code]. Only [code]body[/code] is owned by [code]node[/code] and [code]pack[/code] will therefore only save those two nodes, but not [code]collision[/code].
+ [b]Example of saving a node with different owners:[/b] The following example creates 3 objects: [Node2D] ([code]node[/code]), [RigidDynamicBody2D] ([code]body[/code]) and [CollisionObject2D] ([code]collision[/code]). [code]collision[/code] is a child of [code]body[/code] which is a child of [code]node[/code]. Only [code]body[/code] is owned by [code]node[/code] and [code]pack[/code] will therefore only save those two nodes, but not [code]collision[/code].
[codeblocks]
[gdscript]
# Create the objects.
@@ -121,5 +121,9 @@
If passed to [method instantiate], provides local scene resources to the local scene. Only the main scene should receive the main edit state.
[b]Note:[/b] Only available in editor builds.
</constant>
+ <constant name="GEN_EDIT_STATE_MAIN_INHERITED" value="3" enum="GenEditState">
+ It's similar to [constant GEN_EDIT_STATE_MAIN], but for the case where the scene is being instantiated to be the base of another one.
+ [b]Note:[/b] Only available in editor builds.
+ </constant>
</constants>
</class>
diff --git a/doc/classes/PackedStringArray.xml b/doc/classes/PackedStringArray.xml
index dfebfb718b..4204277ea2 100644
--- a/doc/classes/PackedStringArray.xml
+++ b/doc/classes/PackedStringArray.xml
@@ -96,7 +96,7 @@
Appends a string element at end of the array.
</description>
</method>
- <method name="remove">
+ <method name="remove_at">
<return type="void" />
<argument index="0" name="index" type="int" />
<description>
diff --git a/doc/classes/PackedVector2Array.xml b/doc/classes/PackedVector2Array.xml
index bf9b7e97d4..e6a7b2fa41 100644
--- a/doc/classes/PackedVector2Array.xml
+++ b/doc/classes/PackedVector2Array.xml
@@ -96,7 +96,7 @@
Inserts a [Vector2] at the end.
</description>
</method>
- <method name="remove">
+ <method name="remove_at">
<return type="void" />
<argument index="0" name="index" type="int" />
<description>
diff --git a/doc/classes/PackedVector3Array.xml b/doc/classes/PackedVector3Array.xml
index b439f8f217..6992bbca01 100644
--- a/doc/classes/PackedVector3Array.xml
+++ b/doc/classes/PackedVector3Array.xml
@@ -95,7 +95,7 @@
Inserts a [Vector3] at the end.
</description>
</method>
- <method name="remove">
+ <method name="remove_at">
<return type="void" />
<argument index="0" name="index" type="int" />
<description>
diff --git a/doc/classes/ParticlesMaterial.xml b/doc/classes/ParticlesMaterial.xml
index 3b583f5c89..2cc0d8f2b0 100644
--- a/doc/classes/ParticlesMaterial.xml
+++ b/doc/classes/ParticlesMaterial.xml
@@ -128,7 +128,7 @@
Each particle's initial color. If the [GPUParticles2D]'s [code]texture[/code] is defined, it will be multiplied by this color. To have particle display color in a [BaseMaterial3D] make sure to set [member BaseMaterial3D.vertex_color_use_as_albedo] to [code]true[/code].
</member>
<member name="color_ramp" type="Texture2D" setter="set_color_ramp" getter="get_color_ramp">
- Each particle's color will vary along this [GradientTexture] over its lifetime (multiplied with [member color]).
+ Each particle's color will vary along this [GradientTexture1D] over its lifetime (multiplied with [member color]).
</member>
<member name="damping_curve" type="Texture2D" setter="set_param_texture" getter="get_param_texture">
Damping will vary along this [CurveTexture].
diff --git a/doc/classes/PhysicalBone3D.xml b/doc/classes/PhysicalBone3D.xml
index 710e96239b..a9963d59e8 100644
--- a/doc/classes/PhysicalBone3D.xml
+++ b/doc/classes/PhysicalBone3D.xml
@@ -37,8 +37,12 @@
</method>
</methods>
<members>
- <member name="angular_damp" type="float" setter="set_angular_damp" getter="get_angular_damp" default="-1.0">
- Damps the body's rotation if greater than [code]0[/code].
+ <member name="angular_damp" type="float" setter="set_angular_damp" getter="get_angular_damp" default="0.0">
+ Damps the body's rotation. By default, the body will use the [b]Default Angular Damp[/b] in [b]Project &gt; Project Settings &gt; Physics &gt; 3d[/b] or any value override set by an [Area3D] the body is in. Depending on [member angular_damp_mode], you can set [member angular_damp] to be added to or to replace the body's damping value.
+ See [member ProjectSettings.physics/3d/default_angular_damp] for more details about damping.
+ </member>
+ <member name="angular_damp_mode" type="int" setter="set_angular_damp_mode" getter="get_angular_damp_mode" enum="PhysicalBone3D.DampMode" default="0">
+ Defines how [member angular_damp] is applied. See [enum DampMode] for possible values.
</member>
<member name="body_offset" type="Transform3D" setter="set_body_offset" getter="get_body_offset" default="Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)">
Sets the body's transform.
@@ -64,14 +68,24 @@
<member name="joint_type" type="int" setter="set_joint_type" getter="get_joint_type" enum="PhysicalBone3D.JointType" default="0">
Sets the joint type. See [enum JointType] for possible values.
</member>
- <member name="linear_damp" type="float" setter="set_linear_damp" getter="get_linear_damp" default="-1.0">
- Damps the body's movement if greater than [code]0[/code].
+ <member name="linear_damp" type="float" setter="set_linear_damp" getter="get_linear_damp" default="0.0">
+ Damps the body's movement. By default, the body will use the [b]Default Linear Damp[/b] in [b]Project &gt; Project Settings &gt; Physics &gt; 3d[/b] or any value override set by an [Area3D] the body is in. Depending on [member linear_damp_mode], you can set [member linear_damp] to be added to or to replace the body's damping value.
+ See [member ProjectSettings.physics/3d/default_linear_damp] for more details about damping.
+ </member>
+ <member name="linear_damp_mode" type="int" setter="set_linear_damp_mode" getter="get_linear_damp_mode" enum="PhysicalBone3D.DampMode" default="0">
+ Defines how [member linear_damp] is applied. See [enum DampMode] for possible values.
</member>
<member name="mass" type="float" setter="set_mass" getter="get_mass" default="1.0">
The body's mass.
</member>
</members>
<constants>
+ <constant name="DAMP_MODE_COMBINE" value="0" enum="DampMode">
+ In this mode, the body's damping value is added to any value set in areas or the default value.
+ </constant>
+ <constant name="DAMP_MODE_REPLACE" value="1" enum="DampMode">
+ In this mode, the body's damping value replaces any value set in areas or the default value.
+ </constant>
<constant name="JOINT_TYPE_NONE" value="0" enum="JointType">
</constant>
<constant name="JOINT_TYPE_PIN" value="1" enum="JointType">
diff --git a/doc/classes/PhysicalSkyMaterial.xml b/doc/classes/PhysicalSkyMaterial.xml
index b90f52a70d..e1e50a2b51 100644
--- a/doc/classes/PhysicalSkyMaterial.xml
+++ b/doc/classes/PhysicalSkyMaterial.xml
@@ -23,7 +23,7 @@
<member name="mie_coefficient" type="float" setter="set_mie_coefficient" getter="get_mie_coefficient" default="0.005">
Controls the strength of mie scattering for the sky. Mie scattering results from light colliding with larger particles (like water). On earth, mie scattering results in a whitish color around the sun and horizon.
</member>
- <member name="mie_color" type="Color" setter="set_mie_color" getter="get_mie_color" default="Color(0.36, 0.56, 0.82, 1)">
+ <member name="mie_color" type="Color" setter="set_mie_color" getter="get_mie_color" default="Color(0.63, 0.77, 0.92, 1)">
Controls the [Color] of the mie scattering effect. While not physically accurate, this allows for the creation of alien looking planets.
</member>
<member name="mie_eccentricity" type="float" setter="set_mie_eccentricity" getter="get_mie_eccentricity" default="0.8">
@@ -35,7 +35,7 @@
<member name="rayleigh_coefficient" type="float" setter="set_rayleigh_coefficient" getter="get_rayleigh_coefficient" default="2.0">
Controls the strength of the Rayleigh scattering. Rayleigh scattering results from light colliding with small particles. It is responsible for the blue color of the sky.
</member>
- <member name="rayleigh_color" type="Color" setter="set_rayleigh_color" getter="get_rayleigh_color" default="Color(0.056, 0.14, 0.3, 1)">
+ <member name="rayleigh_color" type="Color" setter="set_rayleigh_color" getter="get_rayleigh_color" default="Color(0.26, 0.41, 0.58, 1)">
Controls the [Color] of the Rayleigh scattering. While not physically accurate, this allows for the creation of alien looking planets. For example, setting this to a red [Color] results in a Mars looking atmosphere with a corresponding blue sunset.
</member>
<member name="sun_disk_scale" type="float" setter="set_sun_disk_scale" getter="get_sun_disk_scale" default="1.0">
diff --git a/doc/classes/PhysicsBody2D.xml b/doc/classes/PhysicsBody2D.xml
index e108ab6298..08f9de53ca 100644
--- a/doc/classes/PhysicsBody2D.xml
+++ b/doc/classes/PhysicsBody2D.xml
@@ -7,7 +7,7 @@
PhysicsBody2D is an abstract base class for implementing a physics body. All *Body2D types inherit from it.
</description>
<tutorials>
- <link title="Physics introduction">https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html</link>
+ <link title="Physics introduction">$DOCS_URL/tutorials/physics/physics_introduction.html</link>
</tutorials>
<methods>
<method name="add_collision_exception_with">
@@ -30,7 +30,7 @@
<argument index="2" name="safe_margin" type="float" default="0.08" />
<description>
Moves the body along the vector [code]linear_velocity[/code]. This method should be used in [method Node._physics_process] (or in a method called by [method Node._physics_process]), as it uses the physics step's [code]delta[/code] value automatically in calculations. Otherwise, the simulation will run at an incorrect speed.
- The body will stop if it collides. Returns a [KinematicCollision2D], which contains information about the collision.
+ The body will stop if it collides. Returns a [KinematicCollision2D], which contains information about the collision when stopped, or when touching another body along the motion.
If [code]test_only[/code] is [code]true[/code], the body does not move but the would-be collision information is given.
[code]safe_margin[/code] is the extra margin used for collision recovery (see [member CharacterBody2D.collision/safe_margin] for more details).
</description>
@@ -50,8 +50,8 @@
<argument index="3" name="safe_margin" type="float" default="0.08" />
<description>
Checks for collisions without moving the body. This method should be used in [method Node._physics_process] (or in a method called by [method Node._physics_process]), as it uses the physics step's [code]delta[/code] value automatically in calculations. Otherwise, the simulation will run at an incorrect speed.
- Virtually sets the node's position, scale and rotation to that of the given [Transform2D], then tries to move the body along the vector [code]linear_velocity[/code]. Returns [code]true[/code] if a collision would occur.
- [code]collision[/code] is an optional object of type [KinematicCollision2D], which contains additional information about the collision (should there be one).
+ Virtually sets the node's position, scale and rotation to that of the given [Transform2D], then tries to move the body along the vector [code]linear_velocity[/code]. Returns [code]true[/code] if a collision would stop the body from moving along the whole path.
+ [code]collision[/code] is an optional object of type [KinematicCollision2D], which contains additional information about the collision when stopped, or when touching another body along the motion.
[code]safe_margin[/code] is the extra margin used for collision recovery (see [member CharacterBody2D.collision/safe_margin] for more details).
</description>
</method>
diff --git a/doc/classes/PhysicsBody3D.xml b/doc/classes/PhysicsBody3D.xml
index 8718c0caa2..3c52850eec 100644
--- a/doc/classes/PhysicsBody3D.xml
+++ b/doc/classes/PhysicsBody3D.xml
@@ -7,7 +7,7 @@
PhysicsBody3D is an abstract base class for implementing a physics body. All *Body types inherit from it.
</description>
<tutorials>
- <link title="Physics introduction">https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html</link>
+ <link title="Physics introduction">$DOCS_URL/tutorials/physics/physics_introduction.html</link>
</tutorials>
<methods>
<method name="add_collision_exception_with">
@@ -38,7 +38,7 @@
<argument index="3" name="max_collisions" type="int" default="1" />
<description>
Moves the body along the vector [code]linear_velocity[/code]. This method should be used in [method Node._physics_process] (or in a method called by [method Node._physics_process]), as it uses the physics step's [code]delta[/code] value automatically in calculations. Otherwise, the simulation will run at an incorrect speed.
- The body will stop if it collides. Returns a [KinematicCollision3D], which contains information about the collision.
+ The body will stop if it collides. Returns a [KinematicCollision3D], which contains information about the collision when stopped, or when touching another body along the motion.
If [code]test_only[/code] is [code]true[/code], the body does not move but the would-be collision information is given.
[code]safe_margin[/code] is the extra margin used for collision recovery (see [member CharacterBody3D.collision/safe_margin] for more details).
[code]max_collisions[/code] allows to retrieve more than one collision result.
@@ -68,8 +68,8 @@
<argument index="4" name="max_collisions" type="int" default="1" />
<description>
Checks for collisions without moving the body. This method should be used in [method Node._physics_process] (or in a method called by [method Node._physics_process]), as it uses the physics step's [code]delta[/code] value automatically in calculations. Otherwise, the simulation will run at an incorrect speed.
- Virtually sets the node's position, scale and rotation to that of the given [Transform3D], then tries to move the body along the vector [code]linear_velocity[/code]. Returns [code]true[/code] if a collision would occur.
- [code]collision[/code] is an optional object of type [KinematicCollision3D], which contains additional information about the collision (should there be one).
+ Virtually sets the node's position, scale and rotation to that of the given [Transform3D], then tries to move the body along the vector [code]linear_velocity[/code]. Returns [code]true[/code] if a collision would stop the body from moving along the whole path.
+ [code]collision[/code] is an optional object of type [KinematicCollision3D], which contains additional information about the collision when stopped, or when touching another body along the motion.
[code]safe_margin[/code] is the extra margin used for collision recovery (see [member CharacterBody3D.collision/safe_margin] for more details).
[code]max_collisions[/code] allows to retrieve more than one collision result.
</description>
diff --git a/doc/classes/PhysicsDirectBodyState2D.xml b/doc/classes/PhysicsDirectBodyState2D.xml
index aa189f17f4..c33bd930be 100644
--- a/doc/classes/PhysicsDirectBodyState2D.xml
+++ b/doc/classes/PhysicsDirectBodyState2D.xml
@@ -7,8 +7,8 @@
Provides direct access to a physics body in the [PhysicsServer2D], allowing safe changes to physics properties. This object is passed via the direct state callback of dynamic bodies, and is intended for changing the direct state of that body. See [method RigidDynamicBody2D._integrate_forces].
</description>
<tutorials>
- <link title="Physics introduction">https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html</link>
- <link title="Ray-casting">https://docs.godotengine.org/en/latest/tutorials/physics/ray-casting.html</link>
+ <link title="Physics introduction">$DOCS_URL/tutorials/physics/physics_introduction.html</link>
+ <link title="Ray-casting">$DOCS_URL/tutorials/physics/ray-casting.html</link>
</tutorials>
<methods>
<method name="add_central_force">
@@ -150,7 +150,10 @@
The body's rotational velocity.
</member>
<member name="center_of_mass" type="Vector2" setter="" getter="get_center_of_mass">
- The body's center of mass.
+ The body's center of mass position relative to the body's center in the global coordinate system.
+ </member>
+ <member name="center_of_mass_local" type="Vector2" setter="" getter="get_center_of_mass_local">
+ The body's center of mass position in the body's local coordinate system.
</member>
<member name="inverse_inertia" type="float" setter="" getter="get_inverse_inertia">
The inverse of the inertia of the body.
diff --git a/doc/classes/PhysicsDirectBodyState3D.xml b/doc/classes/PhysicsDirectBodyState3D.xml
index 9bc5dbd6b9..7aa46dec2f 100644
--- a/doc/classes/PhysicsDirectBodyState3D.xml
+++ b/doc/classes/PhysicsDirectBodyState3D.xml
@@ -7,8 +7,8 @@
Provides direct access to a physics body in the [PhysicsServer3D], allowing safe changes to physics properties. This object is passed via the direct state callback of dynamic bodies, and is intended for changing the direct state of that body. See [method RigidDynamicBody3D._integrate_forces].
</description>
<tutorials>
- <link title="Physics introduction">https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html</link>
- <link title="Ray-casting">https://docs.godotengine.org/en/latest/tutorials/physics/ray-casting.html</link>
+ <link title="Physics introduction">$DOCS_URL/tutorials/physics/physics_introduction.html</link>
+ <link title="Ray-casting">$DOCS_URL/tutorials/physics/ray-casting.html</link>
</tutorials>
<methods>
<method name="add_central_force">
@@ -159,7 +159,10 @@
The body's rotational velocity.
</member>
<member name="center_of_mass" type="Vector3" setter="" getter="get_center_of_mass">
- The body's center of mass.
+ The body's center of mass position relative to the body's center in the global coordinate system.
+ </member>
+ <member name="center_of_mass_local" type="Vector3" setter="" getter="get_center_of_mass_local">
+ The body's center of mass position in the body's local coordinate system.
</member>
<member name="inverse_inertia" type="Vector3" setter="" getter="get_inverse_inertia">
The inverse of the inertia of the body.
diff --git a/doc/classes/PhysicsDirectSpaceState2D.xml b/doc/classes/PhysicsDirectSpaceState2D.xml
index 887b382267..fb82aaf36a 100644
--- a/doc/classes/PhysicsDirectSpaceState2D.xml
+++ b/doc/classes/PhysicsDirectSpaceState2D.xml
@@ -7,13 +7,13 @@
Direct access object to a space in the [PhysicsServer2D]. It's used mainly to do queries against objects and areas residing in a given space.
</description>
<tutorials>
- <link title="Physics introduction">https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html</link>
- <link title="Ray-casting">https://docs.godotengine.org/en/latest/tutorials/physics/ray-casting.html</link>
+ <link title="Physics introduction">$DOCS_URL/tutorials/physics/physics_introduction.html</link>
+ <link title="Ray-casting">$DOCS_URL/tutorials/physics/ray-casting.html</link>
</tutorials>
<methods>
<method name="cast_motion">
<return type="Array" />
- <argument index="0" name="shape" type="PhysicsShapeQueryParameters2D" />
+ <argument index="0" name="parameters" type="PhysicsShapeQueryParameters2D" />
<description>
Checks how far a [Shape2D] can move without colliding. All the parameters for the query, including the shape and the motion, are supplied through a [PhysicsShapeQueryParameters2D] object.
Returns an array with the safe and unsafe proportions (between 0 and 1) of the motion. The safe proportion is the maximum fraction of the motion that can be made without a collision. The unsafe proportion is the minimum fraction of the distance that must be moved for a collision. If no collision is detected a result of [code][1.0, 1.0][/code] will be returned.
@@ -22,7 +22,7 @@
</method>
<method name="collide_shape">
<return type="Array" />
- <argument index="0" name="shape" type="PhysicsShapeQueryParameters2D" />
+ <argument index="0" name="parameters" type="PhysicsShapeQueryParameters2D" />
<argument index="1" name="max_results" type="int" default="32" />
<description>
Checks the intersections of a shape, given through a [PhysicsShapeQueryParameters2D] object, against the space. The resulting array contains a list of points where the shape intersects another. Like with [method intersect_shape], the number of returned results can be limited to save processing time.
@@ -31,7 +31,7 @@
</method>
<method name="get_rest_info">
<return type="Dictionary" />
- <argument index="0" name="shape" type="PhysicsShapeQueryParameters2D" />
+ <argument index="0" name="parameters" type="PhysicsShapeQueryParameters2D" />
<description>
Checks the intersections of a shape, given through a [PhysicsShapeQueryParameters2D] object, against the space. If it collides with more than one shape, the nearest one is selected. If the shape did not intersect anything, then an empty dictionary is returned instead.
[b]Note:[/b] This method does not take into account the [code]motion[/code] property of the object. The returned object is a dictionary containing the following fields:
@@ -45,68 +45,38 @@
</method>
<method name="intersect_point">
<return type="Array" />
- <argument index="0" name="point" type="Vector2" />
+ <argument index="0" name="parameters" type="PhysicsPointQueryParameters2D" />
<argument index="1" name="max_results" type="int" default="32" />
- <argument index="2" name="exclude" type="Array" default="[]" />
- <argument index="3" name="collision_mask" type="int" default="4294967295" />
- <argument index="4" name="collide_with_bodies" type="bool" default="true" />
- <argument index="5" name="collide_with_areas" type="bool" default="false" />
<description>
- Checks whether a point is inside any solid shape. The shapes the point is inside of are returned in an array containing dictionaries with the following fields:
+ Checks whether a point is inside any solid shape. Position and other parameters are defined through [PhysicsPointQueryParameters2D]. The shapes the point is inside of are returned in an array containing dictionaries with the following fields:
[code]collider[/code]: The colliding object.
[code]collider_id[/code]: The colliding object's ID.
[code]rid[/code]: The intersecting object's [RID].
[code]shape[/code]: The shape index of the colliding shape.
- Additionally, the method can take an [code]exclude[/code] array of objects or [RID]s that are to be excluded from collisions, a [code]collision_mask[/code] bitmask representing the physics layers to detect (all layers by default), or booleans to determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, respectively.
- [b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in [code]Segments[/code] build mode are not solid shapes. Therefore, they will not be detected.
- </description>
- </method>
- <method name="intersect_point_on_canvas">
- <return type="Array" />
- <argument index="0" name="point" type="Vector2" />
- <argument index="1" name="canvas_instance_id" type="int" />
- <argument index="2" name="max_results" type="int" default="32" />
- <argument index="3" name="exclude" type="Array" default="[]" />
- <argument index="4" name="collision_mask" type="int" default="4294967295" />
- <argument index="5" name="collide_with_bodies" type="bool" default="true" />
- <argument index="6" name="collide_with_areas" type="bool" default="false" />
- <description>
- Checks whether a point is inside any solid shape, in a specific canvas layer given by [code]canvas_instance_id[/code]. The shapes the point is inside of are returned in an array containing dictionaries with the following fields:
- [code]collider[/code]: The colliding object.
- [code]collider_id[/code]: The colliding object's ID.
- [code]rid[/code]: The intersecting object's [RID].
- [code]shape[/code]: The shape index of the colliding shape.
- Additionally, the method can take an [code]exclude[/code] array of objects or [RID]s that are to be excluded from collisions, a [code]collision_mask[/code] bitmask representing the physics layers to detect (all layers by default), or booleans to determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, respectively.
+ The number of intersections can be limited with the [code]max_results[/code] parameter, to reduce the processing time.
[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in [code]Segments[/code] build mode are not solid shapes. Therefore, they will not be detected.
</description>
</method>
<method name="intersect_ray">
<return type="Dictionary" />
- <argument index="0" name="from" type="Vector2" />
- <argument index="1" name="to" type="Vector2" />
- <argument index="2" name="exclude" type="Array" default="[]" />
- <argument index="3" name="collision_mask" type="int" default="4294967295" />
- <argument index="4" name="collide_with_bodies" type="bool" default="true" />
- <argument index="5" name="collide_with_areas" type="bool" default="false" />
+ <argument index="0" name="parameters" type="PhysicsRayQueryParameters2D" />
<description>
- Intersects a ray in a given space. The returned object is a dictionary with the following fields:
+ Intersects a ray in a given space. Ray position and other parameters are defined through [PhysicsRayQueryParameters2D]. The returned object is a dictionary with the following fields:
[code]collider[/code]: The colliding object.
[code]collider_id[/code]: The colliding object's ID.
- [code]normal[/code]: The object's surface normal at the intersection point.
+ [code]normal[/code]: The object's surface normal at the intersection point, or [code]Vector2(0, 0)[/code] if the ray starts inside the shape and [member PhysicsRayQueryParameters2D.hit_from_inside] is [code]true[/code].
[code]position[/code]: The intersection point.
[code]rid[/code]: The intersecting object's [RID].
[code]shape[/code]: The shape index of the colliding shape.
If the ray did not intersect anything, then an empty dictionary is returned instead.
- Additionally, the method can take an [code]exclude[/code] array of objects or [RID]s that are to be excluded from collisions, a [code]collision_mask[/code] bitmask representing the physics layers to detect (all layers by default), or booleans to determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, respectively.
</description>
</method>
<method name="intersect_shape">
<return type="Array" />
- <argument index="0" name="shape" type="PhysicsShapeQueryParameters2D" />
+ <argument index="0" name="parameters" type="PhysicsShapeQueryParameters2D" />
<argument index="1" name="max_results" type="int" default="32" />
<description>
- Checks the intersections of a shape, given through a [PhysicsShapeQueryParameters2D] object, against the space.
- [b]Note:[/b] This method does not take into account the [code]motion[/code] property of the object. The intersected shapes are returned in an array containing dictionaries with the following fields:
+ Checks the intersections of a shape, given through a [PhysicsShapeQueryParameters2D] object, against the space. The intersected shapes are returned in an array containing dictionaries with the following fields:
[code]collider[/code]: The colliding object.
[code]collider_id[/code]: The colliding object's ID.
[code]rid[/code]: The intersecting object's [RID].
diff --git a/doc/classes/PhysicsDirectSpaceState3D.xml b/doc/classes/PhysicsDirectSpaceState3D.xml
index 8c37072f29..177fca9ce3 100644
--- a/doc/classes/PhysicsDirectSpaceState3D.xml
+++ b/doc/classes/PhysicsDirectSpaceState3D.xml
@@ -7,14 +7,13 @@
Direct access object to a space in the [PhysicsServer3D]. It's used mainly to do queries against objects and areas residing in a given space.
</description>
<tutorials>
- <link title="Physics introduction">https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html</link>
- <link title="Ray-casting">https://docs.godotengine.org/en/latest/tutorials/physics/ray-casting.html</link>
+ <link title="Physics introduction">$DOCS_URL/tutorials/physics/physics_introduction.html</link>
+ <link title="Ray-casting">$DOCS_URL/tutorials/physics/ray-casting.html</link>
</tutorials>
<methods>
<method name="cast_motion">
<return type="Array" />
- <argument index="0" name="shape" type="PhysicsShapeQueryParameters3D" />
- <argument index="1" name="motion" type="Vector3" />
+ <argument index="0" name="parameters" type="PhysicsShapeQueryParameters3D" />
<description>
Checks how far a [Shape3D] can move without colliding. All the parameters for the query, including the shape, are supplied through a [PhysicsShapeQueryParameters3D] object.
Returns an array with the safe and unsafe proportions (between 0 and 1) of the motion. The safe proportion is the maximum fraction of the motion that can be made without a collision. The unsafe proportion is the minimum fraction of the distance that must be moved for a collision. If no collision is detected a result of [code][1.0, 1.0][/code] will be returned.
@@ -23,16 +22,17 @@
</method>
<method name="collide_shape">
<return type="Array" />
- <argument index="0" name="shape" type="PhysicsShapeQueryParameters3D" />
+ <argument index="0" name="parameters" type="PhysicsShapeQueryParameters3D" />
<argument index="1" name="max_results" type="int" default="32" />
<description>
Checks the intersections of a shape, given through a [PhysicsShapeQueryParameters3D] object, against the space. The resulting array contains a list of points where the shape intersects another. Like with [method intersect_shape], the number of returned results can be limited to save processing time.
Returned points are a list of pairs of contact points. For each pair the first one is in the shape passed in [PhysicsShapeQueryParameters3D] object, second one is in the collided shape from the physics space.
+ [b]Note:[/b] This method does not take into account the [code]motion[/code] property of the object.
</description>
</method>
<method name="get_rest_info">
<return type="Dictionary" />
- <argument index="0" name="shape" type="PhysicsShapeQueryParameters3D" />
+ <argument index="0" name="parameters" type="PhysicsShapeQueryParameters3D" />
<description>
Checks the intersections of a shape, given through a [PhysicsShapeQueryParameters3D] object, against the space. If it collides with more than one shape, the nearest one is selected. The returned object is a dictionary containing the following fields:
[code]collider_id[/code]: The colliding object's ID.
@@ -42,31 +42,39 @@
[code]rid[/code]: The intersecting object's [RID].
[code]shape[/code]: The shape index of the colliding shape.
If the shape did not intersect anything, then an empty dictionary is returned instead.
+ [b]Note:[/b] This method does not take into account the [code]motion[/code] property of the object.
+ </description>
+ </method>
+ <method name="intersect_point">
+ <return type="Array" />
+ <argument index="0" name="parameters" type="PhysicsPointQueryParameters3D" />
+ <argument index="1" name="max_results" type="int" default="32" />
+ <description>
+ Checks whether a point is inside any solid shape. Position and other parameters are defined through [PhysicsPointQueryParameters3D]. The shapes the point is inside of are returned in an array containing dictionaries with the following fields:
+ [code]collider[/code]: The colliding object.
+ [code]collider_id[/code]: The colliding object's ID.
+ [code]rid[/code]: The intersecting object's [RID].
+ [code]shape[/code]: The shape index of the colliding shape.
+ The number of intersections can be limited with the [code]max_results[/code] parameter, to reduce the processing time.
</description>
</method>
<method name="intersect_ray">
<return type="Dictionary" />
- <argument index="0" name="from" type="Vector3" />
- <argument index="1" name="to" type="Vector3" />
- <argument index="2" name="exclude" type="Array" default="[]" />
- <argument index="3" name="collision_mask" type="int" default="4294967295" />
- <argument index="4" name="collide_with_bodies" type="bool" default="true" />
- <argument index="5" name="collide_with_areas" type="bool" default="false" />
+ <argument index="0" name="parameters" type="PhysicsRayQueryParameters3D" />
<description>
- Intersects a ray in a given space. The returned object is a dictionary with the following fields:
+ Intersects a ray in a given space. Ray position and other parameters are defined through [PhysicsRayQueryParameters3D]. The returned object is a dictionary with the following fields:
[code]collider[/code]: The colliding object.
[code]collider_id[/code]: The colliding object's ID.
- [code]normal[/code]: The object's surface normal at the intersection point.
+ [code]normal[/code]: The object's surface normal at the intersection point, or [code]Vector3(0, 0, 0)[/code] if the ray starts inside the shape and [member PhysicsRayQueryParameters3D.hit_from_inside] is [code]true[/code].
[code]position[/code]: The intersection point.
[code]rid[/code]: The intersecting object's [RID].
[code]shape[/code]: The shape index of the colliding shape.
If the ray did not intersect anything, then an empty dictionary is returned instead.
- Additionally, the method can take an [code]exclude[/code] array of objects or [RID]s that are to be excluded from collisions, a [code]collision_mask[/code] bitmask representing the physics layers to detect (all layers by default), or booleans to determine if the ray should collide with [PhysicsBody3D]s or [Area3D]s, respectively.
</description>
</method>
<method name="intersect_shape">
<return type="Array" />
- <argument index="0" name="shape" type="PhysicsShapeQueryParameters3D" />
+ <argument index="0" name="parameters" type="PhysicsShapeQueryParameters3D" />
<argument index="1" name="max_results" type="int" default="32" />
<description>
Checks the intersections of a shape, given through a [PhysicsShapeQueryParameters3D] object, against the space. The intersected shapes are returned in an array containing dictionaries with the following fields:
@@ -75,6 +83,7 @@
[code]rid[/code]: The intersecting object's [RID].
[code]shape[/code]: The shape index of the colliding shape.
The number of intersections can be limited with the [code]max_results[/code] parameter, to reduce the processing time.
+ [b]Note:[/b] This method does not take into account the [code]motion[/code] property of the object.
</description>
</method>
</methods>
diff --git a/doc/classes/PhysicsPointQueryParameters2D.xml b/doc/classes/PhysicsPointQueryParameters2D.xml
new file mode 100644
index 0000000000..b4cb2145cf
--- /dev/null
+++ b/doc/classes/PhysicsPointQueryParameters2D.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<class name="PhysicsPointQueryParameters2D" inherits="RefCounted" version="4.0">
+ <brief_description>
+ Parameters to be sent to a 2D point physics query.
+ </brief_description>
+ <description>
+ This class contains the position and other parameters to be used for [method PhysicsDirectSpaceState2D.intersect_point].
+ </description>
+ <tutorials>
+ </tutorials>
+ <members>
+ <member name="canvas_instance_id" type="int" setter="set_canvas_instance_id" getter="get_canvas_instance_id" default="0">
+ If different from [code]0[/code], restricts the query to a specific canvas layer specified by its instance id. See [method Object.get_instance_id].
+ </member>
+ <member name="collide_with_areas" type="bool" setter="set_collide_with_areas" getter="is_collide_with_areas_enabled" default="false">
+ If [code]true[/code], the query will take [Area2D]s into account.
+ </member>
+ <member name="collide_with_bodies" type="bool" setter="set_collide_with_bodies" getter="is_collide_with_bodies_enabled" default="true">
+ If [code]true[/code], the query will take [PhysicsBody2D]s into account.
+ </member>
+ <member name="collision_mask" type="int" setter="set_collision_mask" getter="get_collision_mask" default="4294967295">
+ The physics layers the query will detect (as a bitmask). By default, all collision layers are detected. See [url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
+ </member>
+ <member name="exclude" type="Array" setter="set_exclude" getter="get_exclude" default="[]">
+ The list of objects or object [RID]s that will be excluded from collisions.
+ </member>
+ <member name="position" type="Vector2" setter="set_position" getter="get_position" default="Vector2(0, 0)">
+ The position being queried for, in global coordinates.
+ </member>
+ </members>
+</class>
diff --git a/doc/classes/PhysicsPointQueryParameters3D.xml b/doc/classes/PhysicsPointQueryParameters3D.xml
new file mode 100644
index 0000000000..51e8f8c5b4
--- /dev/null
+++ b/doc/classes/PhysicsPointQueryParameters3D.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<class name="PhysicsPointQueryParameters3D" inherits="RefCounted" version="4.0">
+ <brief_description>
+ Parameters to be sent to a 3D point physics query.
+ </brief_description>
+ <description>
+ This class contains the position and other parameters to be used for [method PhysicsDirectSpaceState3D.intersect_point].
+ </description>
+ <tutorials>
+ </tutorials>
+ <members>
+ <member name="collide_with_areas" type="bool" setter="set_collide_with_areas" getter="is_collide_with_areas_enabled" default="false">
+ If [code]true[/code], the query will take [Area3D]s into account.
+ </member>
+ <member name="collide_with_bodies" type="bool" setter="set_collide_with_bodies" getter="is_collide_with_bodies_enabled" default="true">
+ If [code]true[/code], the query will take [PhysicsBody3D]s into account.
+ </member>
+ <member name="collision_mask" type="int" setter="set_collision_mask" getter="get_collision_mask" default="4294967295">
+ The physics layers the query will detect (as a bitmask). By default, all collision layers are detected. See [url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
+ </member>
+ <member name="exclude" type="Array" setter="set_exclude" getter="get_exclude" default="[]">
+ The list of objects or object [RID]s that will be excluded from collisions.
+ </member>
+ <member name="position" type="Vector3" setter="set_position" getter="get_position" default="Vector3(0, 0, 0)">
+ The position being queried for, in global coordinates.
+ </member>
+ </members>
+</class>
diff --git a/doc/classes/PhysicsRayQueryParameters2D.xml b/doc/classes/PhysicsRayQueryParameters2D.xml
new file mode 100644
index 0000000000..7e317c18bf
--- /dev/null
+++ b/doc/classes/PhysicsRayQueryParameters2D.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<class name="PhysicsRayQueryParameters2D" inherits="RefCounted" version="4.0">
+ <brief_description>
+ Parameters to be sent to a 2D ray physics query.
+ </brief_description>
+ <description>
+ This class contains the ray position and other parameters to be used for [method PhysicsDirectSpaceState2D.intersect_ray].
+ </description>
+ <tutorials>
+ </tutorials>
+ <members>
+ <member name="collide_with_areas" type="bool" setter="set_collide_with_areas" getter="is_collide_with_areas_enabled" default="false">
+ If [code]true[/code], the query will take [Area2D]s into account.
+ </member>
+ <member name="collide_with_bodies" type="bool" setter="set_collide_with_bodies" getter="is_collide_with_bodies_enabled" default="true">
+ If [code]true[/code], the query will take [PhysicsBody2D]s into account.
+ </member>
+ <member name="collision_mask" type="int" setter="set_collision_mask" getter="get_collision_mask" default="4294967295">
+ The physics layers the query will detect (as a bitmask). By default, all collision layers are detected. See [url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
+ </member>
+ <member name="exclude" type="Array" setter="set_exclude" getter="get_exclude" default="[]">
+ The list of objects or object [RID]s that will be excluded from collisions.
+ </member>
+ <member name="from" type="Vector2" setter="set_from" getter="get_from" default="Vector2(0, 0)">
+ The starting point of the ray being queried for, in global coordinates.
+ </member>
+ <member name="hit_from_inside" type="bool" setter="set_hit_from_inside" getter="is_hit_from_inside_enabled" default="false">
+ If [code]true[/code], the query will detect a hit when starting inside shapes. In this case the collision normal will be [code]Vector2(0, 0)[/code]. Does not affect concave polygon shapes.
+ </member>
+ <member name="to" type="Vector2" setter="set_to" getter="get_to" default="Vector2(0, 0)">
+ The ending point of the ray being queried for, in global coordinates.
+ </member>
+ </members>
+</class>
diff --git a/doc/classes/PhysicsRayQueryParameters3D.xml b/doc/classes/PhysicsRayQueryParameters3D.xml
new file mode 100644
index 0000000000..c378325a3c
--- /dev/null
+++ b/doc/classes/PhysicsRayQueryParameters3D.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<class name="PhysicsRayQueryParameters3D" inherits="RefCounted" version="4.0">
+ <brief_description>
+ Parameters to be sent to a 3D ray physics query.
+ </brief_description>
+ <description>
+ This class contains the ray position and other parameters to be used for [method PhysicsDirectSpaceState3D.intersect_ray].
+ </description>
+ <tutorials>
+ </tutorials>
+ <members>
+ <member name="collide_with_areas" type="bool" setter="set_collide_with_areas" getter="is_collide_with_areas_enabled" default="false">
+ If [code]true[/code], the query will take [Area3D]s into account.
+ </member>
+ <member name="collide_with_bodies" type="bool" setter="set_collide_with_bodies" getter="is_collide_with_bodies_enabled" default="true">
+ If [code]true[/code], the query will take [PhysicsBody3D]s into account.
+ </member>
+ <member name="collision_mask" type="int" setter="set_collision_mask" getter="get_collision_mask" default="4294967295">
+ The physics layers the query will detect (as a bitmask). By default, all collision layers are detected. See [url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
+ </member>
+ <member name="exclude" type="Array" setter="set_exclude" getter="get_exclude" default="[]">
+ The list of objects or object [RID]s that will be excluded from collisions.
+ </member>
+ <member name="from" type="Vector3" setter="set_from" getter="get_from" default="Vector3(0, 0, 0)">
+ The starting point of the ray being queried for, in global coordinates.
+ </member>
+ <member name="hit_back_faces" type="bool" setter="set_hit_back_faces" getter="is_hit_back_faces_enabled" default="true">
+ If [code]true[/code], the query will hit back faces with concave polygon shapes with back face enabled or heightmap shapes.
+ </member>
+ <member name="hit_from_inside" type="bool" setter="set_hit_from_inside" getter="is_hit_from_inside_enabled" default="false">
+ If [code]true[/code], the query will detect a hit when starting inside shapes. In this case the collision normal will be [code]Vector3(0, 0, 0)[/code]. Does not affect concave polygon shapes or heightmap shapes.
+ </member>
+ <member name="to" type="Vector3" setter="set_to" getter="get_to" default="Vector3(0, 0, 0)">
+ The ending point of the ray being queried for, in global coordinates.
+ </member>
+ </members>
+</class>
diff --git a/doc/classes/PhysicsServer2D.xml b/doc/classes/PhysicsServer2D.xml
index d55feff829..868b58ea9f 100644
--- a/doc/classes/PhysicsServer2D.xml
+++ b/doc/classes/PhysicsServer2D.xml
@@ -98,13 +98,6 @@
Returns the space assigned to the area.
</description>
</method>
- <method name="area_get_space_override_mode" qualifiers="const">
- <return type="int" enum="PhysicsServer2D.AreaSpaceOverrideMode" />
- <argument index="0" name="area" type="RID" />
- <description>
- Returns the space override mode for the area.
- </description>
- </method>
<method name="area_get_transform" qualifiers="const">
<return type="Transform2D" />
<argument index="0" name="area" type="RID" />
@@ -123,8 +116,7 @@
<method name="area_set_area_monitor_callback">
<return type="void" />
<argument index="0" name="area" type="RID" />
- <argument index="1" name="receiver" type="Object" />
- <argument index="2" name="method" type="StringName" />
+ <argument index="1" name="callback" type="Callable" />
<description>
</description>
</method>
@@ -147,8 +139,7 @@
<method name="area_set_monitor_callback">
<return type="void" />
<argument index="0" name="area" type="RID" />
- <argument index="1" name="receiver" type="Object" />
- <argument index="2" name="method" type="StringName" />
+ <argument index="1" name="callback" type="Callable" />
<description>
Sets the function to call when any body/area enters or exits the area. This callback will be called for any object interacting with the area, and takes five parameters:
1: [constant AREA_BODY_ADDED] or [constant AREA_BODY_REMOVED], depending on whether the object entered or exited the area.
@@ -209,14 +200,6 @@
Assigns a space to the area.
</description>
</method>
- <method name="area_set_space_override_mode">
- <return type="void" />
- <argument index="0" name="area" type="RID" />
- <argument index="1" name="mode" type="int" enum="PhysicsServer2D.AreaSpaceOverrideMode" />
- <description>
- Sets the space override mode for the area. See [enum AreaSpaceOverrideMode] for a list of available modes.
- </description>
- </method>
<method name="area_set_transform">
<return type="void" />
<argument index="0" name="area" type="RID" />
@@ -348,7 +331,7 @@
<return type="PhysicsDirectBodyState2D" />
<argument index="0" name="body" type="RID" />
<description>
- Returns the [PhysicsDirectBodyState2D] of the body.
+ Returns the [PhysicsDirectBodyState2D] of the body. Returns [code]null[/code] if the body is destroyed or removed from the physics space.
</description>
</method>
<method name="body_get_max_contacts_reported" qualifiers="const">
@@ -857,28 +840,37 @@
<constant name="SHAPE_CUSTOM" value="8" enum="ShapeType">
This constant is used internally by the engine. Any attempt to create this kind of shape results in an error.
</constant>
- <constant name="AREA_PARAM_GRAVITY" value="0" enum="AreaParameter">
+ <constant name="AREA_PARAM_GRAVITY_OVERRIDE_MODE" value="0" enum="AreaParameter">
+ Constant to set/get gravity override mode in an area. See [enum AreaSpaceOverrideMode] for possible values.
+ </constant>
+ <constant name="AREA_PARAM_GRAVITY" value="1" enum="AreaParameter">
Constant to set/get gravity strength in an area.
</constant>
- <constant name="AREA_PARAM_GRAVITY_VECTOR" value="1" enum="AreaParameter">
+ <constant name="AREA_PARAM_GRAVITY_VECTOR" value="2" enum="AreaParameter">
Constant to set/get gravity vector/center in an area.
</constant>
- <constant name="AREA_PARAM_GRAVITY_IS_POINT" value="2" enum="AreaParameter">
+ <constant name="AREA_PARAM_GRAVITY_IS_POINT" value="3" enum="AreaParameter">
Constant to set/get whether the gravity vector of an area is a direction, or a center point.
</constant>
- <constant name="AREA_PARAM_GRAVITY_DISTANCE_SCALE" value="3" enum="AreaParameter">
+ <constant name="AREA_PARAM_GRAVITY_DISTANCE_SCALE" value="4" enum="AreaParameter">
Constant to set/get the falloff factor for point gravity of an area. The greater this value is, the faster the strength of gravity decreases with the square of distance.
</constant>
- <constant name="AREA_PARAM_GRAVITY_POINT_ATTENUATION" value="4" enum="AreaParameter">
+ <constant name="AREA_PARAM_GRAVITY_POINT_ATTENUATION" value="5" enum="AreaParameter">
This constant was used to set/get the falloff factor for point gravity. It has been superseded by [constant AREA_PARAM_GRAVITY_DISTANCE_SCALE].
</constant>
- <constant name="AREA_PARAM_LINEAR_DAMP" value="5" enum="AreaParameter">
- Constant to set/get the linear dampening factor of an area.
+ <constant name="AREA_PARAM_LINEAR_DAMP_OVERRIDE_MODE" value="6" enum="AreaParameter">
+ Constant to set/get linear damping override mode in an area. See [enum AreaSpaceOverrideMode] for possible values.
+ </constant>
+ <constant name="AREA_PARAM_LINEAR_DAMP" value="7" enum="AreaParameter">
+ Constant to set/get the linear damping factor of an area.
+ </constant>
+ <constant name="AREA_PARAM_ANGULAR_DAMP_OVERRIDE_MODE" value="8" enum="AreaParameter">
+ Constant to set/get angular damping override mode in an area. See [enum AreaSpaceOverrideMode] for possible values.
</constant>
- <constant name="AREA_PARAM_ANGULAR_DAMP" value="6" enum="AreaParameter">
- Constant to set/get the angular dampening factor of an area.
+ <constant name="AREA_PARAM_ANGULAR_DAMP" value="9" enum="AreaParameter">
+ Constant to set/get the angular damping factor of an area.
</constant>
- <constant name="AREA_PARAM_PRIORITY" value="7" enum="AreaParameter">
+ <constant name="AREA_PARAM_PRIORITY" value="10" enum="AreaParameter">
Constant to set/get the priority (order of processing) of an area.
</constant>
<constant name="AREA_SPACE_OVERRIDE_DISABLED" value="0" enum="AreaSpaceOverrideMode">
@@ -921,20 +913,32 @@
Constant to set/get a body's inertia.
</constant>
<constant name="BODY_PARAM_CENTER_OF_MASS" value="4" enum="BodyParameter">
- Constant to set/get a body's center of mass.
+ Constant to set/get a body's center of mass position in the body's local coordinate system.
</constant>
<constant name="BODY_PARAM_GRAVITY_SCALE" value="5" enum="BodyParameter">
Constant to set/get a body's gravity multiplier.
</constant>
- <constant name="BODY_PARAM_LINEAR_DAMP" value="6" enum="BodyParameter">
+ <constant name="BODY_PARAM_LINEAR_DAMP_MODE" value="6" enum="BodyParameter">
+ Constant to set/get a body's linear dampening mode. See [enum BodyDampMode] for possible values.
+ </constant>
+ <constant name="BODY_PARAM_ANGULAR_DAMP_MODE" value="7" enum="BodyParameter">
+ Constant to set/get a body's angular dampening mode. See [enum BodyDampMode] for possible values.
+ </constant>
+ <constant name="BODY_PARAM_LINEAR_DAMP" value="8" enum="BodyParameter">
Constant to set/get a body's linear dampening factor.
</constant>
- <constant name="BODY_PARAM_ANGULAR_DAMP" value="7" enum="BodyParameter">
+ <constant name="BODY_PARAM_ANGULAR_DAMP" value="9" enum="BodyParameter">
Constant to set/get a body's angular dampening factor.
</constant>
- <constant name="BODY_PARAM_MAX" value="8" enum="BodyParameter">
+ <constant name="BODY_PARAM_MAX" value="10" enum="BodyParameter">
Represents the size of the [enum BodyParameter] enum.
</constant>
+ <constant name="BODY_DAMP_MODE_COMBINE" value="0" enum="BodyDampMode">
+ The body's damping value is added to any value set in areas or the default value.
+ </constant>
+ <constant name="BODY_DAMP_MODE_REPLACE" value="1" enum="BodyDampMode">
+ The body's damping value replaces any value set in areas or the default value.
+ </constant>
<constant name="BODY_STATE_TRANSFORM" value="0" enum="BodyState">
Constant to set/get the current transform matrix of the body.
</constant>
diff --git a/doc/classes/PhysicsServer3D.xml b/doc/classes/PhysicsServer3D.xml
index 0e32d1defa..dd8003be1d 100644
--- a/doc/classes/PhysicsServer3D.xml
+++ b/doc/classes/PhysicsServer3D.xml
@@ -85,13 +85,6 @@
Returns the space assigned to the area.
</description>
</method>
- <method name="area_get_space_override_mode" qualifiers="const">
- <return type="int" enum="PhysicsServer3D.AreaSpaceOverrideMode" />
- <argument index="0" name="area" type="RID" />
- <description>
- Returns the space override mode for the area.
- </description>
- </method>
<method name="area_get_transform" qualifiers="const">
<return type="Transform3D" />
<argument index="0" name="area" type="RID" />
@@ -110,8 +103,7 @@
<method name="area_set_area_monitor_callback">
<return type="void" />
<argument index="0" name="area" type="RID" />
- <argument index="1" name="receiver" type="Object" />
- <argument index="2" name="method" type="StringName" />
+ <argument index="1" name="callback" type="Callable" />
<description>
</description>
</method>
@@ -134,8 +126,7 @@
<method name="area_set_monitor_callback">
<return type="void" />
<argument index="0" name="area" type="RID" />
- <argument index="1" name="receiver" type="Object" />
- <argument index="2" name="method" type="StringName" />
+ <argument index="1" name="callback" type="Callable" />
<description>
Sets the function to call when any body/area enters or exits the area. This callback will be called for any object interacting with the area, and takes five parameters:
1: [constant AREA_BODY_ADDED] or [constant AREA_BODY_REMOVED], depending on whether the object entered or exited the area.
@@ -203,14 +194,6 @@
Assigns a space to the area.
</description>
</method>
- <method name="area_set_space_override_mode">
- <return type="void" />
- <argument index="0" name="area" type="RID" />
- <argument index="1" name="mode" type="int" enum="PhysicsServer3D.AreaSpaceOverrideMode" />
- <description>
- Sets the space override mode for the area. The modes are described in the [enum AreaSpaceOverrideMode] constants.
- </description>
- </method>
<method name="area_set_transform">
<return type="void" />
<argument index="0" name="area" type="RID" />
@@ -322,7 +305,7 @@
<return type="PhysicsDirectBodyState3D" />
<argument index="0" name="body" type="RID" />
<description>
- Returns the [PhysicsDirectBodyState3D] of the body.
+ Returns the [PhysicsDirectBodyState3D] of the body. Returns [code]null[/code] if the body is destroyed or removed from the physics space.
</description>
</method>
<method name="body_get_max_contacts_reported" qualifiers="const">
@@ -1213,40 +1196,49 @@
<constant name="SHAPE_CUSTOM" value="10" enum="ShapeType">
This constant is used internally by the engine. Any attempt to create this kind of shape results in an error.
</constant>
- <constant name="AREA_PARAM_GRAVITY" value="0" enum="AreaParameter">
+ <constant name="AREA_PARAM_GRAVITY_OVERRIDE_MODE" value="0" enum="AreaParameter">
+ Constant to set/get gravity override mode in an area. See [enum AreaSpaceOverrideMode] for possible values.
+ </constant>
+ <constant name="AREA_PARAM_GRAVITY" value="1" enum="AreaParameter">
Constant to set/get gravity strength in an area.
</constant>
- <constant name="AREA_PARAM_GRAVITY_VECTOR" value="1" enum="AreaParameter">
+ <constant name="AREA_PARAM_GRAVITY_VECTOR" value="2" enum="AreaParameter">
Constant to set/get gravity vector/center in an area.
</constant>
- <constant name="AREA_PARAM_GRAVITY_IS_POINT" value="2" enum="AreaParameter">
+ <constant name="AREA_PARAM_GRAVITY_IS_POINT" value="3" enum="AreaParameter">
Constant to set/get whether the gravity vector of an area is a direction, or a center point.
</constant>
- <constant name="AREA_PARAM_GRAVITY_DISTANCE_SCALE" value="3" enum="AreaParameter">
+ <constant name="AREA_PARAM_GRAVITY_DISTANCE_SCALE" value="4" enum="AreaParameter">
Constant to set/get the falloff factor for point gravity of an area. The greater this value is, the faster the strength of gravity decreases with the square of distance.
</constant>
- <constant name="AREA_PARAM_GRAVITY_POINT_ATTENUATION" value="4" enum="AreaParameter">
+ <constant name="AREA_PARAM_GRAVITY_POINT_ATTENUATION" value="5" enum="AreaParameter">
This constant was used to set/get the falloff factor for point gravity. It has been superseded by [constant AREA_PARAM_GRAVITY_DISTANCE_SCALE].
</constant>
- <constant name="AREA_PARAM_LINEAR_DAMP" value="5" enum="AreaParameter">
- Constant to set/get the linear dampening factor of an area.
+ <constant name="AREA_PARAM_LINEAR_DAMP_OVERRIDE_MODE" value="6" enum="AreaParameter">
+ Constant to set/get linear damping override mode in an area. See [enum AreaSpaceOverrideMode] for possible values.
+ </constant>
+ <constant name="AREA_PARAM_LINEAR_DAMP" value="7" enum="AreaParameter">
+ Constant to set/get the linear damping factor of an area.
+ </constant>
+ <constant name="AREA_PARAM_ANGULAR_DAMP_OVERRIDE_MODE" value="8" enum="AreaParameter">
+ Constant to set/get angular damping override mode in an area. See [enum AreaSpaceOverrideMode] for possible values.
</constant>
- <constant name="AREA_PARAM_ANGULAR_DAMP" value="6" enum="AreaParameter">
- Constant to set/get the angular dampening factor of an area.
+ <constant name="AREA_PARAM_ANGULAR_DAMP" value="9" enum="AreaParameter">
+ Constant to set/get the angular damping factor of an area.
</constant>
- <constant name="AREA_PARAM_PRIORITY" value="7" enum="AreaParameter">
+ <constant name="AREA_PARAM_PRIORITY" value="10" enum="AreaParameter">
Constant to set/get the priority (order of processing) of an area.
</constant>
- <constant name="AREA_PARAM_WIND_FORCE_MAGNITUDE" value="8" enum="AreaParameter">
+ <constant name="AREA_PARAM_WIND_FORCE_MAGNITUDE" value="11" enum="AreaParameter">
Constant to set/get the magnitude of area-specific wind force.
</constant>
- <constant name="AREA_PARAM_WIND_SOURCE" value="9" enum="AreaParameter">
+ <constant name="AREA_PARAM_WIND_SOURCE" value="12" enum="AreaParameter">
Constant to set/get the 3D vector that specifies the origin from which an area-specific wind blows.
</constant>
- <constant name="AREA_PARAM_WIND_DIRECTION" value="10" enum="AreaParameter">
+ <constant name="AREA_PARAM_WIND_DIRECTION" value="13" enum="AreaParameter">
Constant to set/get the 3D vector that specifies the direction in which an area-specific wind blows.
</constant>
- <constant name="AREA_PARAM_WIND_ATTENUATION_FACTOR" value="11" enum="AreaParameter">
+ <constant name="AREA_PARAM_WIND_ATTENUATION_FACTOR" value="14" enum="AreaParameter">
Constant to set/get the exponential rate at which wind force decreases with distance from its origin.
</constant>
<constant name="AREA_SPACE_OVERRIDE_DISABLED" value="0" enum="AreaSpaceOverrideMode">
@@ -1289,20 +1281,32 @@
Constant to set/get a body's inertia.
</constant>
<constant name="BODY_PARAM_CENTER_OF_MASS" value="4" enum="BodyParameter">
- Constant to set/get a body's center of mass.
+ Constant to set/get a body's center of mass position in the body's local coordinate system.
</constant>
<constant name="BODY_PARAM_GRAVITY_SCALE" value="5" enum="BodyParameter">
Constant to set/get a body's gravity multiplier.
</constant>
- <constant name="BODY_PARAM_LINEAR_DAMP" value="6" enum="BodyParameter">
+ <constant name="BODY_PARAM_LINEAR_DAMP_MODE" value="6" enum="BodyParameter">
+ Constant to set/get a body's linear dampening mode. See [enum BodyDampMode] for possible values.
+ </constant>
+ <constant name="BODY_PARAM_ANGULAR_DAMP_MODE" value="7" enum="BodyParameter">
+ Constant to set/get a body's angular dampening mode. See [enum BodyDampMode] for possible values.
+ </constant>
+ <constant name="BODY_PARAM_LINEAR_DAMP" value="8" enum="BodyParameter">
Constant to set/get a body's linear dampening factor.
</constant>
- <constant name="BODY_PARAM_ANGULAR_DAMP" value="7" enum="BodyParameter">
+ <constant name="BODY_PARAM_ANGULAR_DAMP" value="9" enum="BodyParameter">
Constant to set/get a body's angular dampening factor.
</constant>
- <constant name="BODY_PARAM_MAX" value="8" enum="BodyParameter">
+ <constant name="BODY_PARAM_MAX" value="10" enum="BodyParameter">
Represents the size of the [enum BodyParameter] enum.
</constant>
+ <constant name="BODY_DAMP_MODE_COMBINE" value="0" enum="BodyDampMode">
+ The body's damping value is added to any value set in areas or the default value.
+ </constant>
+ <constant name="BODY_DAMP_MODE_REPLACE" value="1" enum="BodyDampMode">
+ The body's damping value replaces any value set in areas or the default value.
+ </constant>
<constant name="BODY_STATE_TRANSFORM" value="0" enum="BodyState">
Constant to set/get the current transform matrix of the body.
</constant>
diff --git a/doc/classes/PhysicsShapeQueryParameters2D.xml b/doc/classes/PhysicsShapeQueryParameters2D.xml
index 6035b662ea..455f0b67dc 100644
--- a/doc/classes/PhysicsShapeQueryParameters2D.xml
+++ b/doc/classes/PhysicsShapeQueryParameters2D.xml
@@ -4,7 +4,7 @@
Parameters to be sent to a 2D shape physics query.
</brief_description>
<description>
- This class contains the shape and other parameters for 2D intersection/collision queries.
+ This class contains the shape and other parameters for [PhysicsDirectSpaceState2D] intersection/collision queries.
</description>
<tutorials>
</tutorials>
@@ -16,7 +16,7 @@
If [code]true[/code], the query will take [PhysicsBody2D]s into account.
</member>
<member name="collision_mask" type="int" setter="set_collision_mask" getter="get_collision_mask" default="4294967295">
- The physics layers the query will detect (as a bitmask). By default, all collision layers are detected. See [url=https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
+ The physics layers the query will detect (as a bitmask). By default, all collision layers are detected. See [url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
</member>
<member name="exclude" type="Array" setter="set_exclude" getter="get_exclude" default="[]">
The list of objects or object [RID]s that will be excluded from collisions.
diff --git a/doc/classes/PhysicsShapeQueryParameters3D.xml b/doc/classes/PhysicsShapeQueryParameters3D.xml
index 1a289ff9d0..789ce0a6c3 100644
--- a/doc/classes/PhysicsShapeQueryParameters3D.xml
+++ b/doc/classes/PhysicsShapeQueryParameters3D.xml
@@ -4,7 +4,7 @@
Parameters to be sent to a 3D shape physics query.
</brief_description>
<description>
- This class contains the shape and other parameters for 3D intersection/collision queries.
+ This class contains the shape and other parameters for [PhysicsDirectSpaceState3D] intersection/collision queries.
</description>
<tutorials>
</tutorials>
@@ -16,7 +16,7 @@
If [code]true[/code], the query will take [PhysicsBody3D]s into account.
</member>
<member name="collision_mask" type="int" setter="set_collision_mask" getter="get_collision_mask" default="4294967295">
- The physics layers the query will detect (as a bitmask). By default, all collision layers are detected. See [url=https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
+ The physics layers the query will detect (as a bitmask). By default, all collision layers are detected. See [url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
</member>
<member name="exclude" type="Array" setter="set_exclude" getter="get_exclude" default="[]">
The list of objects or object [RID]s that will be excluded from collisions.
@@ -24,6 +24,9 @@
<member name="margin" type="float" setter="set_margin" getter="get_margin" default="0.0">
The collision margin for the shape.
</member>
+ <member name="motion" type="Vector3" setter="set_motion" getter="get_motion" default="Vector3(0, 0, 0)">
+ The motion of the shape being queried for.
+ </member>
<member name="shape" type="Resource" setter="set_shape" getter="get_shape">
The [Shape3D] that will be used for collision/intersection queries. This stores the actual reference which avoids the shape to be released while being used for queries, so always prefer using this over [member shape_rid].
</member>
diff --git a/doc/classes/Plane.xml b/doc/classes/Plane.xml
index a20607d0a7..37a8e00b49 100644
--- a/doc/classes/Plane.xml
+++ b/doc/classes/Plane.xml
@@ -7,7 +7,7 @@
Plane represents a normalized plane equation. Basically, "normal" is the normal of the plane (a,b,c normalized), and "d" is the distance from the origin to the plane (in the direction of "normal"). "Over" or "Above" the plane is considered the side of the plane towards where the normal is pointing.
</description>
<tutorials>
- <link title="Math documentation index">https://docs.godotengine.org/en/latest/tutorials/math/index.html</link>
+ <link title="Math documentation index">$DOCS_URL/tutorials/math/index.html</link>
</tutorials>
<constructors>
<constructor name="Plane">
@@ -180,6 +180,8 @@
<return type="bool" />
<argument index="0" name="right" type="Plane" />
<description>
+ Returns [code]true[/code] if the planes are not equal.
+ [b]Note:[/b] Due to floating-point precision errors, consider using [method is_equal_approx] instead, which is more reliable.
</description>
</operator>
<operator name="operator ==">
@@ -191,16 +193,20 @@
<return type="bool" />
<argument index="0" name="right" type="Plane" />
<description>
+ Returns [code]true[/code] if the planes are exactly equal.
+ [b]Note:[/b] Due to floating-point precision errors, consider using [method is_equal_approx] instead, which is more reliable.
</description>
</operator>
<operator name="operator unary+">
<return type="Plane" />
<description>
+ Returns the same value as if the [code]+[/code] was not there. Unary [code]+[/code] does nothing, but sometimes it can make your code more readable.
</description>
</operator>
<operator name="operator unary-">
<return type="Plane" />
<description>
+ Returns the negative value of the [Plane]. This is the same as writing [code]Plane(-p.normal, -p.d)[/code]. This operation flips the direction of the normal vector and also flips the distance value, resulting in a Plane that is in the same place, but facing the opposite direction.
</description>
</operator>
</operators>
diff --git a/doc/classes/PopupMenu.xml b/doc/classes/PopupMenu.xml
index 2208c12e56..4eb3ef34b4 100644
--- a/doc/classes/PopupMenu.xml
+++ b/doc/classes/PopupMenu.xml
@@ -15,7 +15,7 @@
<return type="void" />
<argument index="0" name="label" type="String" />
<argument index="1" name="id" type="int" default="-1" />
- <argument index="2" name="accel" type="int" default="0" />
+ <argument index="2" name="accel" type="int" enum="Key" default="0" />
<description>
Adds a new checkable item with text [code]label[/code].
An [code]id[/code] can optionally be provided, as well as an accelerator ([code]accel[/code]). If no [code]id[/code] is provided, one will be created from the index. If no [code]accel[/code] is provided then the default [code]0[/code] will be assigned to it. See [method get_item_accelerator] for more info on accelerators.
@@ -38,7 +38,7 @@
<argument index="0" name="texture" type="Texture2D" />
<argument index="1" name="label" type="String" />
<argument index="2" name="id" type="int" default="-1" />
- <argument index="3" name="accel" type="int" default="0" />
+ <argument index="3" name="accel" type="int" enum="Key" default="0" />
<description>
Adds a new checkable item with text [code]label[/code] and icon [code]texture[/code].
An [code]id[/code] can optionally be provided, as well as an accelerator ([code]accel[/code]). If no [code]id[/code] is provided, one will be created from the index. If no [code]accel[/code] is provided then the default [code]0[/code] will be assigned to it. See [method get_item_accelerator] for more info on accelerators.
@@ -62,7 +62,7 @@
<argument index="0" name="texture" type="Texture2D" />
<argument index="1" name="label" type="String" />
<argument index="2" name="id" type="int" default="-1" />
- <argument index="3" name="accel" type="int" default="0" />
+ <argument index="3" name="accel" type="int" enum="Key" default="0" />
<description>
Adds a new item with text [code]label[/code] and icon [code]texture[/code].
An [code]id[/code] can optionally be provided, as well as an accelerator ([code]accel[/code]). If no [code]id[/code] is provided, one will be created from the index. If no [code]accel[/code] is provided then the default [code]0[/code] will be assigned to it. See [method get_item_accelerator] for more info on accelerators.
@@ -73,7 +73,7 @@
<argument index="0" name="texture" type="Texture2D" />
<argument index="1" name="label" type="String" />
<argument index="2" name="id" type="int" default="-1" />
- <argument index="3" name="accel" type="int" default="0" />
+ <argument index="3" name="accel" type="int" enum="Key" default="0" />
<description>
Same as [method add_icon_check_item], but uses a radio check button.
</description>
@@ -103,7 +103,7 @@
<return type="void" />
<argument index="0" name="label" type="String" />
<argument index="1" name="id" type="int" default="-1" />
- <argument index="2" name="accel" type="int" default="0" />
+ <argument index="2" name="accel" type="int" enum="Key" default="0" />
<description>
Adds a new item with text [code]label[/code].
An [code]id[/code] can optionally be provided, as well as an accelerator ([code]accel[/code]). If no [code]id[/code] is provided, one will be created from the index. If no [code]accel[/code] is provided then the default [code]0[/code] will be assigned to it. See [method get_item_accelerator] for more info on accelerators.
@@ -115,7 +115,7 @@
<argument index="1" name="max_states" type="int" />
<argument index="2" name="default_state" type="int" default="0" />
<argument index="3" name="id" type="int" default="-1" />
- <argument index="4" name="accel" type="int" default="0" />
+ <argument index="4" name="accel" type="int" enum="Key" default="0" />
<description>
Adds a new multistate item with text [code]label[/code].
Contrarily to normal binary items, multistate items can have more than two states, as defined by [code]max_states[/code]. Each press or activate of the item will increase the state by one. The default value is defined by [code]default_state[/code].
@@ -126,7 +126,7 @@
<return type="void" />
<argument index="0" name="label" type="String" />
<argument index="1" name="id" type="int" default="-1" />
- <argument index="2" name="accel" type="int" default="0" />
+ <argument index="2" name="accel" type="int" enum="Key" default="0" />
<description>
Adds a new radio check button with text [code]label[/code].
An [code]id[/code] can optionally be provided, as well as an accelerator ([code]accel[/code]). If no [code]id[/code] is provided, one will be created from the index. If no [code]accel[/code] is provided then the default [code]0[/code] will be assigned to it. See [method get_item_accelerator] for more info on accelerators.
@@ -193,18 +193,12 @@
</description>
</method>
<method name="get_item_accelerator" qualifiers="const">
- <return type="int" />
+ <return type="int" enum="Key" />
<argument index="0" name="idx" type="int" />
<description>
Returns the accelerator of the item at index [code]idx[/code]. Accelerators are special combinations of keys that activate the item, no matter which control is focused.
</description>
</method>
- <method name="get_item_count" qualifiers="const">
- <return type="int" />
- <description>
- Returns the number of items in the [PopupMenu].
- </description>
- </method>
<method name="get_item_icon" qualifiers="const">
<return type="Texture2D" />
<argument index="0" name="idx" type="int" />
@@ -339,7 +333,7 @@
<method name="set_item_accelerator">
<return type="void" />
<argument index="0" name="idx" type="int" />
- <argument index="1" name="accel" type="int" />
+ <argument index="1" name="accel" type="int" enum="Key" />
<description>
Sets the accelerator of the item at index [code]idx[/code]. Accelerators are special combinations of keys that activate the item, no matter which control is focused.
</description>
@@ -511,6 +505,9 @@
<member name="hide_on_state_item_selection" type="bool" setter="set_hide_on_state_item_selection" getter="is_hide_on_state_item_selection" default="false">
If [code]true[/code], hides the [PopupMenu] when a state item is selected.
</member>
+ <member name="items_count" type="int" setter="set_item_count" getter="get_item_count" default="0">
+ The number of items currently in the list.
+ </member>
<member name="submenu_popup_delay" type="float" setter="set_submenu_popup_delay" getter="get_submenu_popup_delay" default="0.3">
Sets the delay time in seconds for the submenu item to popup on mouse hovering. If the popup menu is added as a child of another (acting as a submenu), it will inherit the delay time of the parent menu item.
</member>
diff --git a/doc/classes/ProjectSettings.xml b/doc/classes/ProjectSettings.xml
index 5563695811..7fdac7ccd4 100644
--- a/doc/classes/ProjectSettings.xml
+++ b/doc/classes/ProjectSettings.xml
@@ -6,8 +6,8 @@
<description>
Contains global variables accessible from everywhere. Use [method get_setting], [method set_setting] or [method has_setting] to access them. Variables stored in [code]project.godot[/code] are also loaded into ProjectSettings, making this object very useful for reading custom game configuration options.
When naming a Project Settings property, use the full path to the setting including the category. For example, [code]"application/config/name"[/code] for the project name. Category and property names can be viewed in the Project Settings dialog.
- [b]Feature tags:[/b] Project settings can be overridden for specific platforms and configurations (debug, release, ...) using [url=https://docs.godotengine.org/en/latest/tutorials/export/feature_tags.html]feature tags[/url].
- [b]Overriding:[/b] Any project setting can be overridden by creating a file named [code]override.cfg[/code] in the project's root directory. This can also be used in exported projects by placing this file in the same directory as the project binary. Overriding will still take the base project settings' [url=https://docs.godotengine.org/en/latest/tutorials/export/feature_tags.html]feature tags[/url] in account. Therefore, make sure to [i]also[/i] override the setting with the desired feature tags if you want them to override base project settings on all platforms and configurations.
+ [b]Feature tags:[/b] Project settings can be overridden for specific platforms and configurations (debug, release, ...) using [url=$DOCS_URL/tutorials/export/feature_tags.html]feature tags[/url].
+ [b]Overriding:[/b] Any project setting can be overridden by creating a file named [code]override.cfg[/code] in the project's root directory. This can also be used in exported projects by placing this file in the same directory as the project binary. Overriding will still take the base project settings' [url=$DOCS_URL/tutorials/export/feature_tags.html]feature tags[/url] in account. Therefore, make sure to [i]also[/i] override the setting with the desired feature tags if you want them to override base project settings on all platforms and configurations.
</description>
<tutorials>
<link title="3D Physics Tests Demo">https://godotengine.org/asset-library/asset/675</link>
@@ -87,7 +87,7 @@
<return type="String" />
<argument index="0" name="path" type="String" />
<description>
- Returns the absolute, native OS path corresponding to the localized [code]path[/code] (starting with [code]res://[/code] or [code]user://[/code]). The returned path will vary depending on the operating system and user preferences. See [url=https://docs.godotengine.org/en/latest/tutorials/io/data_paths.html]File paths in Godot projects[/url] to see what those paths convert to. See also [method localize_path].
+ Returns the absolute, native OS path corresponding to the localized [code]path[/code] (starting with [code]res://[/code] or [code]user://[/code]). The returned path will vary depending on the operating system and user preferences. See [url=$DOCS_URL/tutorials/io/data_paths.html]File paths in Godot projects[/url] to see what those paths convert to. See also [method localize_path].
[b]Note:[/b] [method globalize_path] with [code]res://[/code] will not work in an exported project. Instead, prepend the executable's base directory to the path when running from an exported project:
[codeblock]
var path = ""
@@ -196,13 +196,17 @@
Background color for the boot splash.
</member>
<member name="application/boot_splash/fullsize" type="bool" setter="" getter="" default="true">
- If [code]true[/code], scale the boot splash image to the full window length when engine starts. If [code]false[/code], the engine will leave it at the default pixel size.
+ If [code]true[/code], scale the boot splash image to the full window size (preserving the aspect ratio) when the engine starts. If [code]false[/code], the engine will leave it at the default pixel size.
</member>
<member name="application/boot_splash/image" type="String" setter="" getter="" default="&quot;&quot;">
- Path to an image used as the boot splash.
+ Path to an image used as the boot splash. If left empty, the default Godot Engine splash will be displayed instead.
+ [b]Note:[/b] Only effective if [member application/boot_splash/show_image] is [code]true[/code].
+ </member>
+ <member name="application/boot_splash/show_image" type="bool" setter="" getter="" default="true">
+ If [code]true[/code], displays the image specified in [member application/boot_splash/image] when the engine starts. If [code]false[/code], only displays the plain color specified in [member application/boot_splash/bg_color].
</member>
<member name="application/boot_splash/use_filter" type="bool" setter="" getter="" default="true">
- If [code]true[/code], applies linear filtering when scaling the image (recommended for high resolution artwork). If [code]false[/code], uses nearest-neighbor interpolation (recommended for pixel art).
+ If [code]true[/code], applies linear filtering when scaling the image (recommended for high-resolution artwork). If [code]false[/code], uses nearest-neighbor interpolation (recommended for pixel art).
</member>
<member name="application/config/custom_user_dir_name" type="String" setter="" getter="" default="&quot;&quot;">
This user directory is used for storing persistent data ([code]user://[/code] filesystem). If left empty, [code]user://[/code] resolves to a project-specific folder in Godot's own configuration folder (see [method OS.get_user_data_dir]). If a custom directory name is defined, this name will be used instead and appended to the system-specific user data directory (same parent folder as the Godot configuration folder documented in [method OS.get_user_data_dir]).
@@ -219,7 +223,7 @@
</member>
<member name="application/config/name" type="String" setter="" getter="" default="&quot;&quot;">
The project's name. It is used both by the Project Manager and by exporters. The project name can be translated by translating its value in localization files. The window title will be set to match the project name automatically on startup.
- [b]Note:[/b] Changing this value will also change the user data folder's path if [member application/config/use_custom_user_dir] is [code]false[/code]. After renaming the project, you will no longer be able to access existing data in [code]user://[/code] unless you rename the old folder to match the new project name. See [url=https://docs.godotengine.org/en/latest/tutorials/io/data_paths.html]Data paths[/url] in the documentation for more information.
+ [b]Note:[/b] Changing this value will also change the user data folder's path if [member application/config/use_custom_user_dir] is [code]false[/code]. After renaming the project, you will no longer be able to access existing data in [code]user://[/code] unless you rename the old folder to match the new project name. See [url=$DOCS_URL/tutorials/io/data_paths.html]Data paths[/url] in the documentation for more information.
</member>
<member name="application/config/project_settings_override" type="String" setter="" getter="" default="&quot;&quot;">
Specifies a file to override project settings. For example: [code]user://custom_settings.cfg[/code]. See "Overriding" in the [ProjectSettings] class description at the top for more information.
@@ -289,7 +293,9 @@
Safer override for [member audio/driver/mix_rate] in the Web platform. Here [code]0[/code] means "let the browser choose" (since some browsers do not like forcing the mix rate).
</member>
<member name="audio/driver/output_latency" type="int" setter="" getter="" default="15">
- Output latency in milliseconds for audio. Lower values will result in lower audio latency at the cost of increased CPU usage. Low values may result in audible cracking on slower hardware.
+ Specifies the preferred output latency in milliseconds for audio. Lower values will result in lower audio latency at the cost of increased CPU usage. Low values may result in audible cracking on slower hardware.
+ Audio output latency may be constrained by the host operating system and audio hardware drivers. If the host can not provide the specified audio output latency then Godot will attempt to use the nearest latency allowed by the host. As such you should always use [method AudioServer.get_output_latency] to determine the actual audio output latency.
+ [b]Note:[/b] This setting is ignored on all versions of Windows prior to Windows 10.
</member>
<member name="audio/driver/output_latency.web" type="int" setter="" getter="" default="50">
Safer override for [member audio/driver/output_latency] in the Web platform, to avoid audio issues especially on mobile devices.
@@ -366,6 +372,9 @@
<member name="debug/gdscript/warnings/return_value_discarded" type="bool" setter="" getter="" default="true">
If [code]true[/code], enables warnings when calling a function without using its return value (by assigning it to a variable or using it as a function argument). Such return values are sometimes used to denote possible errors using the [enum Error] enum.
</member>
+ <member name="debug/gdscript/warnings/shadowed_global_identifier" type="bool" setter="" getter="" default="true">
+ If [code]true[/code], enables warnings when defining a local or subclass member variable, signal, or enum that would have the same name as a built-in function or global class name, which possibly shadow it.
+ </member>
<member name="debug/gdscript/warnings/shadowed_variable" type="bool" setter="" getter="" default="true">
If [code]true[/code], enables warnings when defining a local or subclass member variable that would shadow a variable at an upper level (such as a member variable).
</member>
@@ -493,7 +502,7 @@
</member>
<member name="display/window/size/fullscreen" type="bool" setter="" getter="" default="false">
Sets the main window to full screen when the project starts. Note that this is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless window is used to emulate fullscreen. On macOS, a new desktop is used to display the running project.
- Regardless of the platform, enabling fullscreen will change the window size to match the monitor's size. Therefore, make sure your project supports [url=https://docs.godotengine.org/en/latest/tutorials/rendering/multiple_resolutions.html]multiple resolutions[/url] when enabling fullscreen mode.
+ Regardless of the platform, enabling fullscreen will change the window size to match the monitor's size. Therefore, make sure your project supports [url=$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple resolutions[/url] when enabling fullscreen mode.
[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5.
</member>
<member name="display/window/size/height" type="int" setter="" getter="" default="600">
@@ -1315,9 +1324,9 @@
</member>
<member name="mono/profiler/enabled" type="bool" setter="" getter="" default="false">
</member>
- <member name="mono/project/auto_update_project" type="bool" setter="" getter="" default="true">
- </member>
- <member name="mono/unhandled_exception_policy" type="int" setter="" getter="" default="0">
+ <member name="mono/runtime/unhandled_exception_policy" type="int" setter="" getter="" default="0">
+ The policy to use for unhandled Mono (C#) exceptions. The default "Terminate Application" exits the project as soon as an unhandled exception is thrown. "Log Error" logs an error message to the console instead, and will not interrupt the project execution when an unhandled exception is thrown.
+ [b]Note:[/b] The unhandled exception policy is always set to "Log Error" in the editor, which also includes C# [code]tool[/code] scripts running within the editor as well as editor plugin code.
</member>
<member name="navigation/2d/default_cell_size" type="int" setter="" getter="" default="10">
Default cell size for 2D navigation maps. See [method NavigationServer2D.map_set_cell_size].
@@ -1497,12 +1506,8 @@
</member>
<member name="rendering/2d/snap/snap_2d_vertices_to_pixel" type="bool" setter="" getter="" default="false">
</member>
- <member name="rendering/3d/viewport/scale" type="float" setter="" getter="" default="1.0">
- Scales the 3D render buffer based on the viewport size and displays the result with linear filtering. Values lower than [code]1.0[/code] can be used to speed up 3D rendering at the cost of quality (undersampling). Values greater than [code]1.0[/code] can be used to improve 3D rendering quality at a high performance cost (supersampling). See also [member rendering/anti_aliasing/quality/msaa] for multi-sample antialiasing, which is significantly cheaper but only smoothens the edges of polygons.
- [b]Note:[/b] This property is only read when the project starts. To change the 3D rendering resolution scale at runtime, set [member Viewport.scale_3d] instead.
- </member>
<member name="rendering/anti_aliasing/quality/msaa" type="int" setter="" getter="" default="0">
- Sets the number of MSAA samples to use (as a power of two). MSAA is used to reduce aliasing around the edges of polygons. A higher MSAA value results in smoother edges but can be significantly slower on some hardware. See also [member rendering/3d/viewport/scale] for supersampling, which provides higher quality but is much more expensive.
+ Sets the number of MSAA samples to use (as a power of two). MSAA is used to reduce aliasing around the edges of polygons. A higher MSAA value results in smoother edges but can be significantly slower on some hardware. See also bilinear scaling 3d [member rendering/scaling_3d/mode] for supersampling, which provides higher quality but is much more expensive.
</member>
<member name="rendering/anti_aliasing/quality/screen_space_aa" type="int" setter="" getter="" default="0">
Sets the screen-space antialiasing mode for the default screen [Viewport]. Screen-space antialiasing works by selectively blurring edges in a post-process shader. It differs from MSAA which takes multiple coverage samples while rendering objects. Screen-space AA methods are typically faster than MSAA and will smooth out specular aliasing, but tend to make scenes appear blurry.
@@ -1557,8 +1562,9 @@
<member name="rendering/driver/depth_prepass/enable" type="bool" setter="" getter="" default="true">
If [code]true[/code], performs a previous depth pass before rendering materials. This increases performance in scenes with high overdraw, when complex materials and lighting are used.
</member>
- <member name="rendering/driver/driver_name" type="String" setter="" getter="" default="&quot;Vulkan&quot;">
- The video driver to use (currently only "Vulkan" is implemented).
+ <member name="rendering/driver/driver_name" type="String" setter="" getter="" default="&quot;vulkan&quot;">
+ The video driver to use.
+ [b]Note:[/b] OpenGL support is currently incomplete. Only basic 2D rendering is supported, and single-window mode is required for correct operation.
[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--rendering-driver[/code] command line argument.
[b]FIXME:[/b] No longer valid after DisplayServer split:
In such cases, this property is not updated, so use [code]OS.get_current_video_driver[/code] to query it at run-time.
@@ -1708,6 +1714,18 @@
<member name="rendering/reflections/sky_reflections/texture_array_reflections.mobile" type="bool" setter="" getter="" default="false">
Lower-end override for [member rendering/reflections/sky_reflections/texture_array_reflections] on mobile devices, due to performance concerns or driver support.
</member>
+ <member name="rendering/scaling_3d/fsr_mipmap_bias" type="float" setter="" getter="" default="0.0">
+ Affects the final texture sharpness by reading from a lower or higher mipmap. Negative values make textures sharper, while positive values make textures blurrier. When using FSR, this value is used to adjust the mipmap bias calculated internally which is based on the selected quality. The formula for this is [code]-log2(1.0 / scale) + mipmap_bias[/code]
+ </member>
+ <member name="rendering/scaling_3d/fsr_sharpness" type="float" setter="" getter="" default="0.2">
+ Determines how sharp the upscaled image will be when using the FSR upscaling mode. Sharpness halves with every whole number. Values go from 0.0 (sharpest) to 2.0. Values above 2.0 won't make a visible difference.
+ </member>
+ <member name="rendering/scaling_3d/mode" type="int" setter="" getter="" default="0">
+ Sets the scaling 3D mode. Bilinear scaling renders at different resolution to either undersample or supersample the viewport. FidelityFX Super Resolution 1.0, abbreviated to FSR, is an upscaling technology that produces high quality images at fast framerates by using a spatially aware upscaling algorithm. FSR is slightly more expensive than bilinear, but it produces significantly higher image quality. FSR should be used where possible.
+ </member>
+ <member name="rendering/scaling_3d/scale" type="float" setter="" getter="" default="1.0">
+ Scales the 3D render buffer based on the viewport size uses an image filter specified in [member rendering/scaling_3d/mode] to scale the output image to the full viewport size. Values lower than [code]1.0[/code] can be used to speed up 3D rendering at the cost of quality (undersampling). Values greater than [code]1.0[/code] are only valid for bilinear mode and can be used to improve 3D rendering quality at a high performance cost (supersampling). See also [member rendering/anti_aliasing/quality/msaa] for multi-sample antialiasing, which is significantly cheaper but only smoothens the edges of polygons.
+ </member>
<member name="rendering/shader_compiler/shader_cache/compress" type="bool" setter="" getter="" default="true">
</member>
<member name="rendering/shader_compiler/shader_cache/enabled" type="bool" setter="" getter="" default="true">
diff --git a/doc/classes/Quaternion.xml b/doc/classes/Quaternion.xml
index 95b2316bf3..9fa2d9b60b 100644
--- a/doc/classes/Quaternion.xml
+++ b/doc/classes/Quaternion.xml
@@ -9,7 +9,7 @@
Due to its compactness and the way it is stored in memory, certain operations (obtaining axis-angle and performing SLERP, in particular) are more efficient and robust against floating-point errors.
</description>
<tutorials>
- <link title="Using 3D transforms">https://docs.godotengine.org/en/latest/tutorials/3d/using_transforms.html#interpolating-with-quaternions</link>
+ <link title="Using 3D transforms">$DOCS_URL/tutorials/3d/using_transforms.html#interpolating-with-quaternions</link>
<link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link>
</tutorials>
<constructors>
@@ -195,54 +195,64 @@
<return type="bool" />
<argument index="0" name="right" type="Quaternion" />
<description>
+ Returns [code]true[/code] if the quaternions are not equal.
+ [b]Note:[/b] Due to floating-point precision errors, consider using [method is_equal_approx] instead, which is more reliable.
</description>
</operator>
<operator name="operator *">
<return type="Quaternion" />
<argument index="0" name="right" type="Quaternion" />
<description>
+ Composes these two quaternions by multiplying them together. This has the effect of rotating the second quaternion (the child) by the first quaternion (the parent).
</description>
</operator>
<operator name="operator *">
<return type="Vector3" />
<argument index="0" name="right" type="Vector3" />
<description>
+ Rotates (multiplies) the [Vector3] by the given [Quaternion].
</description>
</operator>
<operator name="operator *">
<return type="Quaternion" />
<argument index="0" name="right" type="float" />
<description>
+ Multiplies each component of the [Quaternion] by the given value. This operation is not meaningful on its own, but it can be used as a part of a larger expression.
</description>
</operator>
<operator name="operator *">
<return type="Quaternion" />
<argument index="0" name="right" type="int" />
<description>
+ Multiplies each component of the [Quaternion] by the given value. This operation is not meaningful on its own, but it can be used as a part of a larger expression.
</description>
</operator>
<operator name="operator +">
<return type="Quaternion" />
<argument index="0" name="right" type="Quaternion" />
<description>
+ Adds each component of the left [Quaternion] to the right [Quaternion]. This operation is not meaningful on its own, but it can be used as a part of a larger expression, such as approximating an intermediate rotation between two nearby rotations.
</description>
</operator>
<operator name="operator -">
<return type="Quaternion" />
<argument index="0" name="right" type="Quaternion" />
<description>
+ Subtracts each component of the left [Quaternion] by the right [Quaternion]. This operation is not meaningful on its own, but it can be used as a part of a larger expression.
</description>
</operator>
<operator name="operator /">
<return type="Quaternion" />
<argument index="0" name="right" type="float" />
<description>
+ Divides each component of the [Quaternion] by the given value. This operation is not meaningful on its own, but it can be used as a part of a larger expression.
</description>
</operator>
<operator name="operator /">
<return type="Quaternion" />
<argument index="0" name="right" type="int" />
<description>
+ Divides each component of the [Quaternion] by the given value. This operation is not meaningful on its own, but it can be used as a part of a larger expression.
</description>
</operator>
<operator name="operator ==">
@@ -254,22 +264,27 @@
<return type="bool" />
<argument index="0" name="right" type="Quaternion" />
<description>
+ Returns [code]true[/code] if the quaternions are exactly equal.
+ [b]Note:[/b] Due to floating-point precision errors, consider using [method is_equal_approx] instead, which is more reliable.
</description>
</operator>
<operator name="operator []">
<return type="float" />
<argument index="0" name="index" type="int" />
<description>
+ Access quaternion components using their index. [code]q[0][/code] is equivalent to [code]q.x[/code], [code]q[1][/code] is equivalent to [code]q.y[/code], [code]q[2][/code] is equivalent to [code]q.z[/code], and [code]q[3][/code] is equivalent to [code]q.w[/code].
</description>
</operator>
<operator name="operator unary+">
<return type="Quaternion" />
<description>
+ Returns the same value as if the [code]+[/code] was not there. Unary [code]+[/code] does nothing, but sometimes it can make your code more readable.
</description>
</operator>
<operator name="operator unary-">
<return type="Quaternion" />
<description>
+ Returns the negative value of the [Quaternion]. This is the same as writing [code]Quaternion(-q.x, -q.y, -q.z, -q.w)[/code]. This operation results in a quaternion that represents the same rotation.
</description>
</operator>
</operators>
diff --git a/doc/classes/RandomNumberGenerator.xml b/doc/classes/RandomNumberGenerator.xml
index c011755df1..53d1554272 100644
--- a/doc/classes/RandomNumberGenerator.xml
+++ b/doc/classes/RandomNumberGenerator.xml
@@ -16,7 +16,7 @@
[b]Note:[/b] The default values of [member seed] and [member state] properties are pseudo-random, and changes when calling [method randomize]. The [code]0[/code] value documented here is a placeholder, and not the actual default seed.
</description>
<tutorials>
- <link title="Random number generation">https://docs.godotengine.org/en/latest/tutorials/math/random_number_generation.html</link>
+ <link title="Random number generation">$DOCS_URL/tutorials/math/random_number_generation.html</link>
</tutorials>
<methods>
<method name="randf">
diff --git a/doc/classes/RayCast2D.xml b/doc/classes/RayCast2D.xml
index 592c074a77..fe2885378a 100644
--- a/doc/classes/RayCast2D.xml
+++ b/doc/classes/RayCast2D.xml
@@ -11,7 +11,7 @@
RayCast2D calculates intersection every physics frame (see [Node]), and the result is cached so it can be used later until the next frame. If multiple queries are required between physics frames (or during the same frame) use [method force_raycast_update] after adjusting the raycast.
</description>
<tutorials>
- <link title="Ray-casting">https://docs.godotengine.org/en/latest/tutorials/physics/ray-casting.html</link>
+ <link title="Ray-casting">$DOCS_URL/tutorials/physics/ray-casting.html</link>
</tutorials>
<methods>
<method name="add_exception">
@@ -63,7 +63,7 @@
<method name="get_collision_normal" qualifiers="const">
<return type="Vector2" />
<description>
- Returns the normal of the intersecting object's shape at the collision point.
+ Returns the normal of the intersecting object's shape at the collision point, or [code]Vector2(0, 0)[/code] if the ray starts inside the shape and [member hit_from_inside] is [code]true[/code].
</description>
</method>
<method name="get_collision_point" qualifiers="const">
@@ -110,7 +110,7 @@
If [code]true[/code], collision with [PhysicsBody2D]s will be reported.
</member>
<member name="collision_mask" type="int" setter="set_collision_mask" getter="get_collision_mask" default="1">
- The ray's collision mask. Only objects in at least one collision layer enabled in the mask will be detected. See [url=https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
+ The ray's collision mask. Only objects in at least one collision layer enabled in the mask will be detected. See [url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
</member>
<member name="enabled" type="bool" setter="set_enabled" getter="is_enabled" default="true">
If [code]true[/code], collisions will be reported.
@@ -118,6 +118,9 @@
<member name="exclude_parent" type="bool" setter="set_exclude_parent_body" getter="get_exclude_parent_body" default="true">
If [code]true[/code], the parent node will be excluded from collision detection.
</member>
+ <member name="hit_from_inside" type="bool" setter="set_hit_from_inside" getter="is_hit_from_inside_enabled" default="false">
+ If [code]true[/code], the ray will detect a hit when starting inside shapes. In this case the collision normal will be [code]Vector2(0, 0)[/code]. Does not affect concave polygon shapes.
+ </member>
<member name="target_position" type="Vector2" setter="set_target_position" getter="get_target_position" default="Vector2(0, 50)">
The ray's destination point, relative to the RayCast's [code]position[/code].
</member>
diff --git a/doc/classes/RayCast3D.xml b/doc/classes/RayCast3D.xml
index c7253e81c4..8abd3f84b1 100644
--- a/doc/classes/RayCast3D.xml
+++ b/doc/classes/RayCast3D.xml
@@ -11,7 +11,7 @@
RayCast3D calculates intersection every physics frame (see [Node]), and the result is cached so it can be used later until the next frame. If multiple queries are required between physics frames (or during the same frame), use [method force_raycast_update] after adjusting the raycast.
</description>
<tutorials>
- <link title="Ray-casting">https://docs.godotengine.org/en/latest/tutorials/physics/ray-casting.html</link>
+ <link title="Ray-casting">$DOCS_URL/tutorials/physics/ray-casting.html</link>
<link title="3D Voxel Demo">https://godotengine.org/asset-library/asset/676</link>
</tutorials>
<methods>
@@ -65,7 +65,7 @@
<method name="get_collision_normal" qualifiers="const">
<return type="Vector3" />
<description>
- Returns the normal of the intersecting object's shape at the collision point.
+ Returns the normal of the intersecting object's shape at the collision point, or [code]Vector3(0, 0, 0)[/code] if the ray starts inside the shape and [member hit_from_inside] is [code]true[/code].
</description>
</method>
<method name="get_collision_point" qualifiers="const">
@@ -112,7 +112,7 @@
If [code]true[/code], collision with [PhysicsBody3D]s will be reported.
</member>
<member name="collision_mask" type="int" setter="set_collision_mask" getter="get_collision_mask" default="1">
- The ray's collision mask. Only objects in at least one collision layer enabled in the mask will be detected. See [url=https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
+ The ray's collision mask. Only objects in at least one collision layer enabled in the mask will be detected. See [url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
</member>
<member name="debug_shape_custom_color" type="Color" setter="set_debug_shape_custom_color" getter="get_debug_shape_custom_color" default="Color(0, 0, 0, 1)">
The custom color to use to draw the shape in the editor and at run-time if [b]Visible Collision Shapes[/b] is enabled in the [b]Debug[/b] menu. This color will be highlighted at run-time if the [RayCast3D] is colliding with something.
@@ -127,6 +127,9 @@
<member name="exclude_parent" type="bool" setter="set_exclude_parent_body" getter="get_exclude_parent_body" default="true">
If [code]true[/code], collisions will be ignored for this RayCast3D's immediate parent.
</member>
+ <member name="hit_from_inside" type="bool" setter="set_hit_from_inside" getter="is_hit_from_inside_enabled" default="false">
+ If [code]true[/code], the ray will detect a hit when starting inside shapes. In this case the collision normal will be [code]Vector3(0, 0, 0)[/code]. Does not affect shapes with no volume like concave polygon or heightmap.
+ </member>
<member name="target_position" type="Vector3" setter="set_target_position" getter="get_target_position" default="Vector3(0, -1, 0)">
The ray's destination point, relative to the RayCast's [code]position[/code].
</member>
diff --git a/doc/classes/Rect2.xml b/doc/classes/Rect2.xml
index 01bec10ed8..4dc3859ca5 100644
--- a/doc/classes/Rect2.xml
+++ b/doc/classes/Rect2.xml
@@ -9,9 +9,9 @@
The 3D counterpart to [Rect2] is [AABB].
</description>
<tutorials>
- <link title="Math documentation index">https://docs.godotengine.org/en/latest/tutorials/math/index.html</link>
- <link title="Vector math">https://docs.godotengine.org/en/latest/tutorials/math/vector_math.html</link>
- <link title="Advanced vector math">https://docs.godotengine.org/en/latest/tutorials/math/vectors_advanced.html</link>
+ <link title="Math documentation index">$DOCS_URL/tutorials/math/index.html</link>
+ <link title="Vector math">$DOCS_URL/tutorials/math/vector_math.html</link>
+ <link title="Advanced vector math">$DOCS_URL/tutorials/math/vectors_advanced.html</link>
</tutorials>
<constructors>
<constructor name="Rect2">
@@ -71,7 +71,22 @@
<return type="Rect2" />
<argument index="0" name="to" type="Vector2" />
<description>
- Returns this [Rect2] expanded to include a given point.
+ Returns a copy of this [Rect2] expanded to include a given point.
+ [b]Example:[/b]
+ [codeblocks]
+ [gdscript]
+ # position (-3, 2), size (1, 1)
+ var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))
+ # position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)
+ var rect2 = rect.expand(Vector2(0, -1))
+ [/gdscript]
+ [csharp]
+ # position (-3, 2), size (1, 1)
+ var rect = new Rect2(new Vector2(-3, 2), new Vector2(1, 1));
+ # position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)
+ var rect2 = rect.Expand(new Vector2(0, -1));
+ [/csharp]
+ [/codeblocks]
</description>
</method>
<method name="get_area" qualifiers="const">
@@ -121,7 +136,8 @@
<return type="bool" />
<argument index="0" name="point" type="Vector2" />
<description>
- Returns [code]true[/code] if the [Rect2] contains a point.
+ Returns [code]true[/code] if the [Rect2] contains a point. By convention, the right and bottom edges of the [Rect2] are considered exclusive, so points on these edges are [b]not[/b] included.
+ [b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative size[/i]. Use [method abs] to get a positive sized equivalent rectangle to check for contained points.
</description>
</method>
<method name="intersection" qualifiers="const">
@@ -178,12 +194,15 @@
<return type="bool" />
<argument index="0" name="right" type="Rect2" />
<description>
+ Returns [code]true[/code] if the rectangles are not equal.
+ [b]Note:[/b] Due to floating-point precision errors, consider using [method is_equal_approx] instead, which is more reliable.
</description>
</operator>
<operator name="operator *">
<return type="Rect2" />
<argument index="0" name="right" type="Transform2D" />
<description>
+ Inversely transforms (multiplies) the [Rect2] by the given [Transform2D] transformation matrix.
</description>
</operator>
<operator name="operator ==">
@@ -195,6 +214,8 @@
<return type="bool" />
<argument index="0" name="right" type="Rect2" />
<description>
+ Returns [code]true[/code] if the rectangles are exactly equal.
+ [b]Note:[/b] Due to floating-point precision errors, consider using [method is_equal_approx] instead, which is more reliable.
</description>
</operator>
</operators>
diff --git a/doc/classes/Rect2i.xml b/doc/classes/Rect2i.xml
index fc27c64fa5..d66b589ec1 100644
--- a/doc/classes/Rect2i.xml
+++ b/doc/classes/Rect2i.xml
@@ -8,8 +8,8 @@
It uses integer coordinates. If you need floating-point coordinates, use [Rect2] instead.
</description>
<tutorials>
- <link title="Math documentation index">https://docs.godotengine.org/en/latest/tutorials/math/index.html</link>
- <link title="Vector math">https://docs.godotengine.org/en/latest/tutorials/math/vector_math.html</link>
+ <link title="Math documentation index">$DOCS_URL/tutorials/math/index.html</link>
+ <link title="Vector math">$DOCS_URL/tutorials/math/vector_math.html</link>
</tutorials>
<constructors>
<constructor name="Rect2i">
@@ -69,7 +69,21 @@
<return type="Rect2i" />
<argument index="0" name="to" type="Vector2i" />
<description>
- Returns this [Rect2i] expanded to include a given point.
+ Returns a copy of this [Rect2i] expanded to include a given point.
+ [codeblocks]
+ [gdscript]
+ # position (-3, 2), size (1, 1)
+ var rect = Rect2i(Vector2i(-3, 2), Vector2i(1, 1))
+ # position (-3, -1), size (3, 4), so we fit both rect and Vector2i(0, -1)
+ var rect2 = rect.expand(Vector2i(0, -1))
+ [/gdscript]
+ [csharp]
+ # position (-3, 2), size (1, 1)
+ var rect = new Rect2i(new Vector2i(-3, 2), new Vector2i(1, 1));
+ # position (-3, -1), size (3, 4), so we fit both rect and Vector2i(0, -1)
+ var rect2 = rect.Expand(new Vector2i(0, -1));
+ [/csharp]
+ [/codeblocks]
</description>
</method>
<method name="get_area" qualifiers="const">
@@ -120,7 +134,8 @@
<return type="bool" />
<argument index="0" name="point" type="Vector2i" />
<description>
- Returns [code]true[/code] if the [Rect2i] contains a point.
+ Returns [code]true[/code] if the [Rect2i] contains a point. By convention, the right and bottom edges of the [Rect2i] are considered exclusive, so points on these edges are [b]not[/b] included.
+ [b]Note:[/b] This method is not reliable for [Rect2i] with a [i]negative size[/i]. Use [method abs] to get a positive sized equivalent rectangle to check for contained points.
</description>
</method>
<method name="intersection" qualifiers="const">
@@ -169,6 +184,7 @@
<return type="bool" />
<argument index="0" name="right" type="Rect2i" />
<description>
+ Returns [code]true[/code] if the rectangles are not equal.
</description>
</operator>
<operator name="operator ==">
@@ -180,6 +196,7 @@
<return type="bool" />
<argument index="0" name="right" type="Rect2i" />
<description>
+ Returns [code]true[/code] if the rectangles are equal.
</description>
</operator>
</operators>
diff --git a/doc/classes/RefCounted.xml b/doc/classes/RefCounted.xml
index de314fbcb7..378df6f155 100644
--- a/doc/classes/RefCounted.xml
+++ b/doc/classes/RefCounted.xml
@@ -10,7 +10,7 @@
[b]Note:[/b] In C#, reference-counted objects will not be freed instantly after they are no longer in use. Instead, garbage collection will run periodically and will free reference-counted objects that are no longer in use. This means that unused ones will linger on for a while before being removed.
</description>
<tutorials>
- <link title="When and how to avoid using nodes for everything">https://docs.godotengine.org/en/latest/tutorials/best_practices/node_alternatives.html</link>
+ <link title="When and how to avoid using nodes for everything">$DOCS_URL/tutorials/best_practices/node_alternatives.html</link>
</tutorials>
<methods>
<method name="init_ref">
diff --git a/doc/classes/ReferenceRect.xml b/doc/classes/ReferenceRect.xml
index 1db6879b45..99ad067469 100644
--- a/doc/classes/ReferenceRect.xml
+++ b/doc/classes/ReferenceRect.xml
@@ -16,7 +16,7 @@
Sets the border width of the [ReferenceRect]. The border grows both inwards and outwards with respect to the rectangle box.
</member>
<member name="editor_only" type="bool" setter="set_editor_only" getter="get_editor_only" default="true">
- If set to [code]true[/code], the [ReferenceRect] will only be visible while in editor. Otherwise, [ReferenceRect] will be visible in game.
+ If [code]true[/code], the [ReferenceRect] will only be visible while in editor. Otherwise, [ReferenceRect] will be visible in the running project.
</member>
</members>
</class>
diff --git a/doc/classes/ReflectionProbe.xml b/doc/classes/ReflectionProbe.xml
index 7f2bd118d6..8bf8534334 100644
--- a/doc/classes/ReflectionProbe.xml
+++ b/doc/classes/ReflectionProbe.xml
@@ -8,7 +8,7 @@
The [ReflectionProbe] is used to create high-quality reflections at the cost of performance. It can be combined with [VoxelGI]s and Screen Space Reflections to achieve high quality reflections. [ReflectionProbe]s render all objects within their [member cull_mask], so updating them can be quite expensive. It is best to update them once with the important static objects and then leave them.
</description>
<tutorials>
- <link title="Reflection probes">https://docs.godotengine.org/en/latest/tutorials/3d/reflection_probes.html</link>
+ <link title="Reflection probes">$DOCS_URL/tutorials/3d/reflection_probes.html</link>
</tutorials>
<members>
<member name="ambient_color" type="Color" setter="set_ambient_color" getter="get_ambient_color" default="Color(0, 0, 0, 1)">
diff --git a/doc/classes/RenderingServer.xml b/doc/classes/RenderingServer.xml
index 86e66a5738..0700650a91 100644
--- a/doc/classes/RenderingServer.xml
+++ b/doc/classes/RenderingServer.xml
@@ -15,7 +15,7 @@
In 2D, all visible objects are some form of canvas item. In order to be visible, a canvas item needs to be the child of a canvas attached to a viewport, or it needs to be the child of another canvas item that is eventually attached to the canvas.
</description>
<tutorials>
- <link title="Optimization using Servers">https://docs.godotengine.org/en/latest/tutorials/performance/using_servers.html</link>
+ <link title="Optimization using Servers">$DOCS_URL/tutorials/performance/using_servers.html</link>
</tutorials>
<methods>
<method name="bake_render_uv2">
@@ -2575,12 +2575,9 @@
</method>
<method name="request_frame_drawn_callback">
<return type="void" />
- <argument index="0" name="where" type="Object" />
- <argument index="1" name="method" type="StringName" />
- <argument index="2" name="userdata" type="Variant" />
+ <argument index="0" name="callable" type="Callable" />
<description>
- Schedules a callback to the corresponding named [code]method[/code] on [code]where[/code] after a frame has been drawn.
- The callback method must use only 1 argument which will be called with [code]userdata[/code].
+ Schedules a callback to the given callable after a frame has been drawn.
</description>
</method>
<method name="scenario_create">
@@ -2664,8 +2661,10 @@
<return type="RID" />
<argument index="0" name="shader" type="RID" />
<argument index="1" name="param" type="StringName" />
+ <argument index="2" name="index" type="int" default="0" />
<description>
Returns a default texture from a shader searched by name.
+ [b]Note:[/b] If the sampler array is used use [code]index[/code] to access the specified texture.
</description>
</method>
<method name="shader_get_param_default" qualifiers="const">
@@ -2687,8 +2686,10 @@
<argument index="0" name="shader" type="RID" />
<argument index="1" name="param" type="StringName" />
<argument index="2" name="texture" type="RID" />
+ <argument index="3" name="index" type="int" default="0" />
<description>
Sets a shader's default texture. Overwrites the texture given by name.
+ [b]Note:[/b] If the sampler array is used use [code]index[/code] to access the specified texture.
</description>
</method>
<method name="shadows_quality_set">
@@ -3099,6 +3100,22 @@
If [code]true[/code], rendering of a viewport's environment is disabled.
</description>
</method>
+ <method name="viewport_set_fsr_mipmap_bias">
+ <return type="void" />
+ <argument index="0" name="viewport" type="RID" />
+ <argument index="1" name="mipmap_bias" type="float" />
+ <description>
+ Affects the final texture sharpness by reading from a lower or higher mipmap. Negative values make textures sharper, while positive values make textures blurrier. When using FSR, this value is used to adjust the mipmap bias calculated internally which is based on the selected quality. The formula for this is [code]-log2(1.0 / scale) + mipmap_bias[/code]
+ </description>
+ </method>
+ <method name="viewport_set_fsr_sharpness">
+ <return type="void" />
+ <argument index="0" name="viewport" type="RID" />
+ <argument index="1" name="sharpness" type="float" />
+ <description>
+ Determines how sharp the upscaled image will be when using the FSR upscaling mode. Sharpness halves with every whole number. Values go from 0.0 (sharpest) to 2.0. Values above 2.0 won't make a visible difference.
+ </description>
+ </method>
<method name="viewport_set_global_canvas_transform">
<return type="void" />
<argument index="0" name="viewport" type="RID" />
@@ -3150,12 +3167,21 @@
If [code]true[/code], render the contents of the viewport directly to screen. This allows a low-level optimization where you can skip drawing a viewport to the root viewport. While this optimization can result in a significant increase in speed (especially on older devices), it comes at a cost of usability. When this is enabled, you cannot read from the viewport or from the [code]SCREEN_TEXTURE[/code]. You also lose the benefit of certain window settings, such as the various stretch modes. Another consequence to be aware of is that in 2D the rendering happens in window coordinates, so if you have a viewport that is double the size of the window, and you set this, then only the portion that fits within the window will be drawn, no automatic scaling is possible, even if your game scene is significantly larger than the window size.
</description>
</method>
- <method name="viewport_set_scale_3d">
+ <method name="viewport_set_scaling_3d_mode">
+ <return type="void" />
+ <argument index="0" name="viewport" type="RID" />
+ <argument index="1" name="scaling_3d_mode" type="int" enum="RenderingServer.ViewportScaling3DMode" />
+ <description>
+ Sets scaling 3d mode. Bilinear scaling renders at different resolution to either undersample or supersample the viewport. FidelityFX Super Resolution 1.0, abbreviated to FSR, is an upscaling technology that produces high quality images at fast framerates by using a spatially aware upscaling algorithm. FSR is slightly more expensive than bilinear, but it produces significantly higher image quality. FSR should be used where possible.
+ </description>
+ </method>
+ <method name="viewport_set_scaling_3d_scale">
<return type="void" />
<argument index="0" name="viewport" type="RID" />
<argument index="1" name="scale" type="float" />
<description>
- Sets the scale at which we render 3D contents.
+ Scales the 3D render buffer based on the viewport size uses an image filter specified in [enum ViewportScaling3DMode] to scale the output image to the full viewport size. Values lower than [code]1.0[/code] can be used to speed up 3D rendering at the cost of quality (undersampling). Values greater than [code]1.0[/code] are only valid for bilinear mode and can be used to improve 3D rendering quality at a high performance cost (supersampling). See also [enum ViewportMSAA] for multi-sample antialiasing, which is significantly cheaper but only smoothens the edges of polygons.
+ When using FSR upscaling, AMD recommends exposing the following values as preset options to users "Ultra Quality: 0.77", "Quality: 0.67", "Balanced: 0.59", "Performance: 0.5" instead of exposing the entire scale.
</description>
</method>
<method name="viewport_set_scenario">
@@ -3843,6 +3869,14 @@
<constant name="FOG_VOLUME_SHAPE_WORLD" value="2" enum="FogVolumeShape">
[FogVolume] will have no shape, will cover the whole world and will not be culled.
</constant>
+ <constant name="VIEWPORT_SCALING_3D_MODE_BILINEAR" value="0" enum="ViewportScaling3DMode">
+ Enables bilinear scaling on 3D viewports. The amount of scaling can be set using [member Viewport.scaling_3d_scale]. Values less then [code]1.0[/code] will result in undersampling while values greater than [code]1.0[/code] will result in supersampling. A value of [code]1.0[/code] disables scaling.
+ </constant>
+ <constant name="VIEWPORT_SCALING_3D_MODE_FSR" value="1" enum="ViewportScaling3DMode">
+ Enables FSR upscaling on 3D viewports. The amount of scaling can be set using [member Viewport.scaling_3d_scale]. Values less then [code]1.0[/code] will be result in the viewport being upscaled using FSR. Values greater than [code]1.0[/code] are not supported and bilinear supersampling will be used instead. A value of [code]1.0[/code] disables scaling.
+ </constant>
+ <constant name="VIEWPORT_SCALING_3D_MODE_MAX" value="2" enum="ViewportScaling3DMode">
+ </constant>
<constant name="VIEWPORT_UPDATE_DISABLED" value="0" enum="ViewportUpdateMode">
Do not update the viewport.
</constant>
diff --git a/doc/classes/Resource.xml b/doc/classes/Resource.xml
index 327183893b..02d1c7e97d 100644
--- a/doc/classes/Resource.xml
+++ b/doc/classes/Resource.xml
@@ -8,8 +8,8 @@
[b]Note:[/b] In C#, resources will not be freed instantly after they are no longer in use. Instead, garbage collection will run periodically and will free resources that are no longer in use. This means that unused resources will linger on for a while before being removed.
</description>
<tutorials>
- <link title="Resources">https://docs.godotengine.org/en/latest/tutorials/scripting/resources.html</link>
- <link title="When and how to avoid using nodes for everything">https://docs.godotengine.org/en/latest/tutorials/best_practices/node_alternatives.html</link>
+ <link title="Resources">$DOCS_URL/tutorials/scripting/resources.html</link>
+ <link title="When and how to avoid using nodes for everything">$DOCS_URL/tutorials/best_practices/node_alternatives.html</link>
</tutorials>
<methods>
<method name="duplicate" qualifiers="const">
diff --git a/doc/classes/ResourceImporter.xml b/doc/classes/ResourceImporter.xml
index 9f551ad1d2..f20b55fbc8 100644
--- a/doc/classes/ResourceImporter.xml
+++ b/doc/classes/ResourceImporter.xml
@@ -7,7 +7,7 @@
This is the base class for the resource importers implemented in core. To implement your own resource importers using editor plugins, see [EditorImportPlugin].
</description>
<tutorials>
- <link title="Import plugins">https://docs.godotengine.org/en/latest/tutorials/plugins/editor/import_plugins.html</link>
+ <link title="Import plugins">$DOCS_URL/tutorials/plugins/editor/import_plugins.html</link>
</tutorials>
<constants>
<constant name="IMPORT_ORDER_DEFAULT" value="0" enum="ImportOrder">
diff --git a/doc/classes/RichTextEffect.xml b/doc/classes/RichTextEffect.xml
index 62323722f7..4329ccfdf5 100644
--- a/doc/classes/RichTextEffect.xml
+++ b/doc/classes/RichTextEffect.xml
@@ -19,7 +19,7 @@
[b]Note:[/b] As soon as a [RichTextLabel] contains at least one [RichTextEffect], it will continuously process the effect unless the project is paused. This may impact battery life negatively.
</description>
<tutorials>
- <link title="BBCode in RichTextLabel">https://docs.godotengine.org/en/latest/tutorials/ui/bbcode_in_richtextlabel.html</link>
+ <link title="BBCode in RichTextLabel">$DOCS_URL/tutorials/ui/bbcode_in_richtextlabel.html</link>
<link title="RichTextEffect test project (third-party)">https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project</link>
</tutorials>
<methods>
diff --git a/doc/classes/RichTextLabel.xml b/doc/classes/RichTextLabel.xml
index 0fd25615ba..6bfaca8928 100644
--- a/doc/classes/RichTextLabel.xml
+++ b/doc/classes/RichTextLabel.xml
@@ -11,7 +11,7 @@
[b]Note:[/b] Unlike [Label], RichTextLabel doesn't have a [i]property[/i] to horizontally align text to the center. Instead, enable [member bbcode_enabled] and surround the text in a [code][center][/code] tag as follows: [code][center]Example[/center][/code]. There is currently no built-in way to vertically align text either, but this can be emulated by relying on anchors/containers and the [member fit_content_height] property.
</description>
<tutorials>
- <link title="BBCode in RichTextLabel">https://docs.godotengine.org/en/latest/tutorials/ui/bbcode_in_richtextlabel.html</link>
+ <link title="BBCode in RichTextLabel">$DOCS_URL/tutorials/ui/bbcode_in_richtextlabel.html</link>
<link title="GUI Rich Text/BBcode Demo">https://godotengine.org/asset-library/asset/132</link>
<link title="OS Test Demo">https://godotengine.org/asset-library/asset/677</link>
</tutorials>
@@ -586,15 +586,15 @@
<theme_item name="selection_color" data_type="color" type="Color" default="Color(0.1, 0.1, 1, 0.8)">
The color of the selection box.
</theme_item>
- <theme_item name="shadow_as_outline" data_type="constant" type="int" default="0">
- Boolean value. If 1 ([code]true[/code]), the shadow will be displayed around the whole text as an outline.
- </theme_item>
<theme_item name="shadow_offset_x" data_type="constant" type="int" default="1">
The horizontal offset of the font's shadow.
</theme_item>
<theme_item name="shadow_offset_y" data_type="constant" type="int" default="1">
The vertical offset of the font's shadow.
</theme_item>
+ <theme_item name="shadow_outline_size" data_type="constant" type="int" default="1">
+ The size of the shadow outline.
+ </theme_item>
<theme_item name="table_border" data_type="color" type="Color" default="Color(0, 0, 0, 0)">
The default cell border color.
</theme_item>
diff --git a/doc/classes/RigidDynamicBody2D.xml b/doc/classes/RigidDynamicBody2D.xml
index f503884192..b8680b99b3 100644
--- a/doc/classes/RigidDynamicBody2D.xml
+++ b/doc/classes/RigidDynamicBody2D.xml
@@ -82,10 +82,13 @@
</method>
</methods>
<members>
- <member name="angular_damp" type="float" setter="set_angular_damp" getter="get_angular_damp" default="-1.0">
- Damps the body's [member angular_velocity]. If [code]-1[/code], the body will use the [b]Default Angular Damp[/b] defined in [b]Project &gt; Project Settings &gt; Physics &gt; 2d[/b].
+ <member name="angular_damp" type="float" setter="set_angular_damp" getter="get_angular_damp" default="0.0">
+ Damps the body's rotation. By default, the body will use the [b]Default Angular Damp[/b] in [b]Project &gt; Project Settings &gt; Physics &gt; 2d[/b] or any value override set by an [Area2D] the body is in. Depending on [member angular_damp_mode], you can set [member angular_damp] to be added to or to replace the body's damping value.
See [member ProjectSettings.physics/2d/default_angular_damp] for more details about damping.
</member>
+ <member name="angular_damp_mode" type="int" setter="set_angular_damp_mode" getter="get_angular_damp_mode" enum="RigidDynamicBody2D.DampMode" default="0">
+ Defines how [member angular_damp] is applied. See [enum DampMode] for possible values.
+ </member>
<member name="angular_velocity" type="float" setter="set_angular_velocity" getter="get_angular_velocity" default="0.0">
The body's rotational velocity.
</member>
@@ -135,10 +138,13 @@
The body's moment of inertia. This is like mass, but for rotation: it determines how much torque it takes to rotate the body. The moment of inertia is usually computed automatically from the mass and the shapes, but this property allows you to set a custom value.
If set to [code]0[/code], inertia is automatically computed (default value).
</member>
- <member name="linear_damp" type="float" setter="set_linear_damp" getter="get_linear_damp" default="-1.0">
- Damps the body's [member linear_velocity]. If [code]-1[/code], the body will use the [b]Default Linear Damp[/b] in [b]Project &gt; Project Settings &gt; Physics &gt; 2d[/b].
+ <member name="linear_damp" type="float" setter="set_linear_damp" getter="get_linear_damp" default="0.0">
+ Damps the body's movement. By default, the body will use the [b]Default Linear Damp[/b] in [b]Project &gt; Project Settings &gt; Physics &gt; 2d[/b] or any value override set by an [Area2D] the body is in. Depending on [member linear_damp_mode], you can set [member linear_damp] to be added to or to replace the body's damping value.
See [member ProjectSettings.physics/2d/default_linear_damp] for more details about damping.
</member>
+ <member name="linear_damp_mode" type="int" setter="set_linear_damp_mode" getter="get_linear_damp_mode" enum="RigidDynamicBody2D.DampMode" default="0">
+ Defines how [member linear_damp] is applied. See [enum DampMode] for possible values.
+ </member>
<member name="linear_velocity" type="Vector2" setter="set_linear_velocity" getter="get_linear_velocity" default="Vector2(0, 0)">
The body's linear velocity.
</member>
@@ -217,6 +223,12 @@
<constant name="CENTER_OF_MASS_MODE_CUSTOM" value="1" enum="CenterOfMassMode">
In this mode, the body's center of mass is set through [member center_of_mass]. Defaults to the body's origin position.
</constant>
+ <constant name="DAMP_MODE_COMBINE" value="0" enum="DampMode">
+ In this mode, the body's damping value is added to any value set in areas or the default value.
+ </constant>
+ <constant name="DAMP_MODE_REPLACE" value="1" enum="DampMode">
+ In this mode, the body's damping value replaces any value set in areas or the default value.
+ </constant>
<constant name="CCD_MODE_DISABLED" value="0" enum="CCDMode">
Continuous collision detection disabled. This is the fastest way to detect body collisions, but can miss small, fast-moving objects.
</constant>
diff --git a/doc/classes/RigidDynamicBody3D.xml b/doc/classes/RigidDynamicBody3D.xml
index 6c8d190704..c75055e0df 100644
--- a/doc/classes/RigidDynamicBody3D.xml
+++ b/doc/classes/RigidDynamicBody3D.xml
@@ -10,7 +10,7 @@
If you need to override the default physics behavior, you can write a custom force integration function. See [member custom_integrator].
</description>
<tutorials>
- <link title="Physics introduction">https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html</link>
+ <link title="Physics introduction">$DOCS_URL/tutorials/physics/physics_introduction.html</link>
<link title="3D Truck Town Demo">https://godotengine.org/asset-library/asset/524</link>
<link title="3D Physics Tests Demo">https://godotengine.org/asset-library/asset/675</link>
</tutorials>
@@ -91,10 +91,13 @@
</method>
</methods>
<members>
- <member name="angular_damp" type="float" setter="set_angular_damp" getter="get_angular_damp" default="-1.0">
- Damps RigidDynamicBody3D's rotational forces.
+ <member name="angular_damp" type="float" setter="set_angular_damp" getter="get_angular_damp" default="0.0">
+ Damps the body's rotation. By default, the body will use the [b]Default Angular Damp[/b] in [b]Project &gt; Project Settings &gt; Physics &gt; 3d[/b] or any value override set by an [Area3D] the body is in. Depending on [member angular_damp_mode], you can set [member angular_damp] to be added to or to replace the body's damping value.
See [member ProjectSettings.physics/3d/default_angular_damp] for more details about damping.
</member>
+ <member name="angular_damp_mode" type="int" setter="set_angular_damp_mode" getter="get_angular_damp_mode" enum="RigidDynamicBody3D.DampMode" default="0">
+ Defines how [member angular_damp] is applied. See [enum DampMode] for possible values.
+ </member>
<member name="angular_velocity" type="Vector3" setter="set_angular_velocity" getter="get_angular_velocity" default="Vector3(0, 0, 0)">
RigidDynamicBody3D's rotational velocity.
</member>
@@ -138,10 +141,13 @@
The body's moment of inertia. This is like mass, but for rotation: it determines how much torque it takes to rotate the body on each axis. The moment of inertia is usually computed automatically from the mass and the shapes, but this property allows you to set a custom value.
If set to [code]Vector3.ZERO[/code], inertia is automatically computed (default value).
</member>
- <member name="linear_damp" type="float" setter="set_linear_damp" getter="get_linear_damp" default="-1.0">
- The body's linear damp. Cannot be less than -1.0. If this value is different from -1.0, any linear damp derived from the world or areas will be overridden.
+ <member name="linear_damp" type="float" setter="set_linear_damp" getter="get_linear_damp" default="0.0">
+ Damps the body's movement. By default, the body will use the [b]Default Linear Damp[/b] in [b]Project &gt; Project Settings &gt; Physics &gt; 3d[/b] or any value override set by an [Area3D] the body is in. Depending on [member linear_damp_mode], you can set [member linear_damp] to be added to or to replace the body's damping value.
See [member ProjectSettings.physics/3d/default_linear_damp] for more details about damping.
</member>
+ <member name="linear_damp_mode" type="int" setter="set_linear_damp_mode" getter="get_linear_damp_mode" enum="RigidDynamicBody3D.DampMode" default="0">
+ Defines how [member linear_damp] is applied. See [enum DampMode] for possible values.
+ </member>
<member name="linear_velocity" type="Vector3" setter="set_linear_velocity" getter="get_linear_velocity" default="Vector3(0, 0, 0)">
The body's linear velocity. Can be used sporadically, but [b]don't set this every frame[/b], because physics may run in another thread and runs at a different granularity. Use [method _integrate_forces] as your process loop for precise control of the body state.
</member>
@@ -222,5 +228,11 @@
<constant name="CENTER_OF_MASS_MODE_CUSTOM" value="1" enum="CenterOfMassMode">
In this mode, the body's center of mass is set through [member center_of_mass]. Defaults to the body's origin position.
</constant>
+ <constant name="DAMP_MODE_COMBINE" value="0" enum="DampMode">
+ In this mode, the body's damping value is added to any value set in areas or the default value.
+ </constant>
+ <constant name="DAMP_MODE_REPLACE" value="1" enum="DampMode">
+ In this mode, the body's damping value replaces any value set in areas or the default value.
+ </constant>
</constants>
</class>
diff --git a/doc/classes/RootMotionView.xml b/doc/classes/RootMotionView.xml
index 5db13de44f..203a48996f 100644
--- a/doc/classes/RootMotionView.xml
+++ b/doc/classes/RootMotionView.xml
@@ -8,7 +8,7 @@
[b]Note:[/b] [RootMotionView] is only visible in the editor. It will be hidden automatically in the running project, and will also be converted to a plain [Node] in the running project. This means a script attached to a [RootMotionView] node [i]must[/i] have [code]extends Node[/code] instead of [code]extends RootMotionView[/code]. Additionally, it must not be a [code]@tool[/code] script.
</description>
<tutorials>
- <link title="Using AnimationTree - Root motion">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html#root-motion</link>
+ <link title="Using AnimationTree - Root motion">$DOCS_URL/tutorials/animation/animation_tree.html#root-motion</link>
</tutorials>
<members>
<member name="animation_path" type="NodePath" setter="set_animation_path" getter="get_animation_path">
diff --git a/doc/classes/SceneState.xml b/doc/classes/SceneState.xml
index 1c3bac9270..9a22b24825 100644
--- a/doc/classes/SceneState.xml
+++ b/doc/classes/SceneState.xml
@@ -168,5 +168,9 @@
If passed to [method PackedScene.instantiate], provides local scene resources to the local scene. Only the main scene should receive the main edit state.
[b]Note:[/b] Only available in editor builds.
</constant>
+ <constant name="GEN_EDIT_STATE_MAIN_INHERITED" value="3" enum="GenEditState">
+ If passed to [method PackedScene.instantiate], it's similar to [constant GEN_EDIT_STATE_MAIN], but for the case where the scene is being instantiated to be the base of another one.
+ [b]Note:[/b] Only available in editor builds.
+ </constant>
</constants>
</class>
diff --git a/doc/classes/SceneTree.xml b/doc/classes/SceneTree.xml
index 6d0ec44b69..c1dca44896 100644
--- a/doc/classes/SceneTree.xml
+++ b/doc/classes/SceneTree.xml
@@ -9,8 +9,8 @@
[SceneTree] is the default [MainLoop] implementation used by scenes, and is thus in charge of the game loop.
</description>
<tutorials>
- <link title="SceneTree">https://docs.godotengine.org/en/latest/tutorials/scripting/scene_tree.html</link>
- <link title="Multiple resolutions">https://docs.godotengine.org/en/latest/tutorials/rendering/multiple_resolutions.html</link>
+ <link title="SceneTree">$DOCS_URL/tutorials/scripting/scene_tree.html</link>
+ <link title="Multiple resolutions">$DOCS_URL/tutorials/rendering/multiple_resolutions.html</link>
</tutorials>
<methods>
<method name="call_group" qualifiers="vararg">
diff --git a/doc/classes/Script.xml b/doc/classes/Script.xml
index 7c59e87848..ab88bdaa73 100644
--- a/doc/classes/Script.xml
+++ b/doc/classes/Script.xml
@@ -8,7 +8,7 @@
The [code]new[/code] method of a script subclass creates a new instance. [method Object.set_script] extends an existing object, if that object's class matches one of the script's base classes.
</description>
<tutorials>
- <link title="Scripting documentation index">https://docs.godotengine.org/en/latest/tutorials/scripting/index.html</link>
+ <link title="Scripting documentation index">$DOCS_URL/tutorials/scripting/index.html</link>
</tutorials>
<methods>
<method name="can_instantiate" qualifiers="const">
diff --git a/doc/classes/Semaphore.xml b/doc/classes/Semaphore.xml
index 9ff9cc0c87..9e1d8012b7 100644
--- a/doc/classes/Semaphore.xml
+++ b/doc/classes/Semaphore.xml
@@ -7,7 +7,7 @@
A synchronization semaphore which can be used to synchronize multiple [Thread]s. Initialized to zero on creation. Be careful to avoid deadlocks. For a binary version, see [Mutex].
</description>
<tutorials>
- <link title="Using multiple threads">https://docs.godotengine.org/en/latest/tutorials/performance/using_multiple_threads.html</link>
+ <link title="Using multiple threads">$DOCS_URL/tutorials/performance/using_multiple_threads.html</link>
</tutorials>
<methods>
<method name="post">
diff --git a/doc/classes/Shader.xml b/doc/classes/Shader.xml
index 99e38e969d..d81b4bc372 100644
--- a/doc/classes/Shader.xml
+++ b/doc/classes/Shader.xml
@@ -7,15 +7,17 @@
This class allows you to define a custom shader program that can be used by a [ShaderMaterial]. Shaders allow you to write your own custom behavior for rendering objects or updating particle information. For a detailed explanation and usage, please see the tutorials linked below.
</description>
<tutorials>
- <link title="Shaders documentation index">https://docs.godotengine.org/en/latest/tutorials/shaders/index.html</link>
+ <link title="Shaders documentation index">$DOCS_URL/tutorials/shaders/index.html</link>
</tutorials>
<methods>
<method name="get_default_texture_param" qualifiers="const">
<return type="Texture2D" />
<argument index="0" name="param" type="StringName" />
+ <argument index="1" name="index" type="int" default="0" />
<description>
Returns the texture that is set as default for the specified parameter.
[b]Note:[/b] [code]param[/code] must match the name of the uniform in the code exactly.
+ [b]Note:[/b] If the sampler array is used use [code]index[/code] to access the specified texture.
</description>
</method>
<method name="get_mode" qualifiers="const">
@@ -36,9 +38,11 @@
<return type="void" />
<argument index="0" name="param" type="StringName" />
<argument index="1" name="texture" type="Texture2D" />
+ <argument index="2" name="index" type="int" default="0" />
<description>
Sets the default texture to be used with a texture uniform. The default is used if a texture is not set in the [ShaderMaterial].
[b]Note:[/b] [code]param[/code] must match the name of the uniform in the code exactly.
+ [b]Note:[/b] If the sampler array is used use [code]index[/code] to access the specified texture.
</description>
</method>
</methods>
diff --git a/doc/classes/ShaderMaterial.xml b/doc/classes/ShaderMaterial.xml
index d5fc3fd210..04f0fac104 100644
--- a/doc/classes/ShaderMaterial.xml
+++ b/doc/classes/ShaderMaterial.xml
@@ -7,7 +7,7 @@
A material that uses a custom [Shader] program to render either items to screen or process particles. You can create multiple materials for the same shader but configure different values for the uniforms defined in the shader.
</description>
<tutorials>
- <link title="Shaders documentation index">https://docs.godotengine.org/en/latest/tutorials/shaders/index.html</link>
+ <link title="Shaders documentation index">$DOCS_URL/tutorials/shaders/index.html</link>
</tutorials>
<methods>
<method name="get_shader_param" qualifiers="const">
diff --git a/doc/classes/Shape2D.xml b/doc/classes/Shape2D.xml
index 04f91d19da..9746519173 100644
--- a/doc/classes/Shape2D.xml
+++ b/doc/classes/Shape2D.xml
@@ -7,7 +7,7 @@
Base class for all 2D shapes. All 2D shape types inherit from this.
</description>
<tutorials>
- <link title="Physics introduction">https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html</link>
+ <link title="Physics introduction">$DOCS_URL/tutorials/physics/physics_introduction.html</link>
</tutorials>
<methods>
<method name="collide">
diff --git a/doc/classes/Shape3D.xml b/doc/classes/Shape3D.xml
index 96f8833486..67af52768f 100644
--- a/doc/classes/Shape3D.xml
+++ b/doc/classes/Shape3D.xml
@@ -7,7 +7,7 @@
Base class for all 3D shape resources. Nodes that inherit from this can be used as shapes for a [PhysicsBody3D] or [Area3D] objects.
</description>
<tutorials>
- <link title="Physics introduction">https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html</link>
+ <link title="Physics introduction">$DOCS_URL/tutorials/physics/physics_introduction.html</link>
</tutorials>
<methods>
<method name="get_debug_mesh">
diff --git a/doc/classes/ShapeCast2D.xml b/doc/classes/ShapeCast2D.xml
new file mode 100644
index 0000000000..74ebafe069
--- /dev/null
+++ b/doc/classes/ShapeCast2D.xml
@@ -0,0 +1,157 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<class name="ShapeCast2D" inherits="Node2D" version="4.0">
+ <brief_description>
+ Node for physics collision sweep and immediate overlap queries. Similar to the [RayCast2D] node.
+ </brief_description>
+ <description>
+ Shape casting allows to detect collision objects by sweeping the [member shape] along the cast direction determined by [member target_position] (useful for things like beam weapons).
+ Immediate collision overlaps can be done with the [member target_position] set to [code]Vector2(0, 0)[/code] and by calling [method force_shapecast_update] within the same [b]physics_frame[/b]. This also helps to overcome some limitations of [Area2D] when used as a continuous detection area, often requiring waiting a couple of frames before collision information is available to [Area2D] nodes, and when using the signals creates unnecessary complexity.
+ The node can detect multiple collision objects, but usually the first detected collision
+ [b]Note:[/b] shape casting is more computationally expensive compared to ray casting.
+ </description>
+ <tutorials>
+ </tutorials>
+ <methods>
+ <method name="add_exception">
+ <return type="void" />
+ <argument index="0" name="node" type="Object" />
+ <description>
+ Adds a collision exception so the shape does not report collisions with the specified node.
+ </description>
+ </method>
+ <method name="add_exception_rid">
+ <return type="void" />
+ <argument index="0" name="rid" type="RID" />
+ <description>
+ Adds a collision exception so the shape does not report collisions with the specified [RID].
+ </description>
+ </method>
+ <method name="clear_exceptions">
+ <return type="void" />
+ <description>
+ Removes all collision exceptions for this shape.
+ </description>
+ </method>
+ <method name="force_shapecast_update">
+ <return type="void" />
+ <description>
+ Updates the collision information for the shape. Use this method to update the collision information immediately instead of waiting for the next [code]_physics_process[/code] call, for example if the shape or its parent has changed state.
+ [b]Note:[/b] [code]enabled == true[/code] is not required for this to work.
+ </description>
+ </method>
+ <method name="get_closest_collision_safe_fraction" qualifiers="const">
+ <return type="float" />
+ <description>
+ The fraction of the motion (between 0 and 1) of how far the shape can move without triggering a collision. The motion is determined by [member target_position].
+ </description>
+ </method>
+ <method name="get_closest_collision_unsafe_fraction" qualifiers="const">
+ <return type="float" />
+ <description>
+ The fraction of the motion (between 0 and 1) when the shape triggers a collision. The motion is determined by [member target_position].
+ </description>
+ </method>
+ <method name="get_collider" qualifiers="const">
+ <return type="Object" />
+ <argument index="0" name="index" type="int" />
+ <description>
+ Returns the [Object] of one of the multiple collisions at [code]index[/code], or [code]null[/code] if no object is intersecting the shape (i.e. [method is_colliding] returns [code]false[/code]).
+ </description>
+ </method>
+ <method name="get_collider_shape" qualifiers="const">
+ <return type="int" />
+ <argument index="0" name="index" type="int" />
+ <description>
+ Returns the shape ID of one of the multiple collisions at [code]index[/code] that the shape intersects, or [code]0[/code] if no object is intersecting the shape (i.e. [method is_colliding] returns [code]false[/code]).
+ </description>
+ </method>
+ <method name="get_collision_count" qualifiers="const">
+ <return type="int" />
+ <description>
+ The number of collisions detected at the point of impact. Use this to iterate over multiple collisions as provided by [method get_collider], [method get_collider_shape], [method get_collision_point], and [method get_collision_normal] methods.
+ </description>
+ </method>
+ <method name="get_collision_mask_value" qualifiers="const">
+ <return type="bool" />
+ <argument index="0" name="layer_number" type="int" />
+ <description>
+ Returns whether or not the specified layer of the [member collision_mask] is enabled, given a [code]layer_number[/code] between 1 and 32.
+ </description>
+ </method>
+ <method name="get_collision_normal" qualifiers="const">
+ <return type="Vector2" />
+ <argument index="0" name="index" type="int" />
+ <description>
+ Returns the normal containing one of the multiple collisions at [code]index[/code] of the intersecting object.
+ </description>
+ </method>
+ <method name="get_collision_point" qualifiers="const">
+ <return type="Vector2" />
+ <argument index="0" name="index" type="int" />
+ <description>
+ Returns the collision point containing one of the multiple collisions at [code]index[/code] at which the shape intersects the object.
+ [b]Note:[/b] this point is in the [b]global[/b] coordinate system.
+ </description>
+ </method>
+ <method name="is_colliding" qualifiers="const">
+ <return type="bool" />
+ <description>
+ Returns whether any object is intersecting with the shape's vector (considering the vector length).
+ </description>
+ </method>
+ <method name="remove_exception">
+ <return type="void" />
+ <argument index="0" name="node" type="Object" />
+ <description>
+ Removes a collision exception so the shape does report collisions with the specified node.
+ </description>
+ </method>
+ <method name="remove_exception_rid">
+ <return type="void" />
+ <argument index="0" name="rid" type="RID" />
+ <description>
+ Removes a collision exception so the shape does report collisions with the specified [RID].
+ </description>
+ </method>
+ <method name="set_collision_mask_value">
+ <return type="void" />
+ <argument index="0" name="layer_number" type="int" />
+ <argument index="1" name="value" type="bool" />
+ <description>
+ Based on [code]value[/code], enables or disables the specified layer in the [member collision_mask], given a [code]layer_number[/code] between 1 and 32.
+ </description>
+ </method>
+ </methods>
+ <members>
+ <member name="collide_with_areas" type="bool" setter="set_collide_with_areas" getter="is_collide_with_areas_enabled" default="false">
+ If [code]true[/code], collision with [Area2D]s will be reported.
+ </member>
+ <member name="collide_with_bodies" type="bool" setter="set_collide_with_bodies" getter="is_collide_with_bodies_enabled" default="true">
+ If [code]true[/code], collision with [PhysicsBody2D]s will be reported.
+ </member>
+ <member name="collision_mask" type="int" setter="set_collision_mask" getter="get_collision_mask" default="1">
+ The shape's collision mask. Only objects in at least one collision layer enabled in the mask will be detected.
+ </member>
+ <member name="collision_result" type="Array" setter="" getter="_get_collision_result" default="[]">
+ A complete collision information. The data returned is the same as in the [method PhysicsDirectSpaceState2D.get_rest_info] method.
+ </member>
+ <member name="enabled" type="bool" setter="set_enabled" getter="is_enabled" default="true">
+ If [code]true[/code], collisions will be reported.
+ </member>
+ <member name="exclude_parent" type="bool" setter="set_exclude_parent_body" getter="get_exclude_parent_body" default="true">
+ If [code]true[/code], the parent node will be excluded from collision detection.
+ </member>
+ <member name="margin" type="float" setter="set_margin" getter="get_margin" default="0.0">
+ The collision margin for the shape. A larger margin helps detecting collisions more consistently, at the cost of precision.
+ </member>
+ <member name="max_results" type="int" setter="set_max_results" getter="get_max_results" default="32">
+ The number of intersections can be limited with this parameter, to reduce the processing time.
+ </member>
+ <member name="shape" type="Shape2D" setter="set_shape" getter="get_shape">
+ Any [Shape2D] derived shape used for collision queries.
+ </member>
+ <member name="target_position" type="Vector2" setter="set_target_position" getter="get_target_position" default="Vector2(0, 50)">
+ The shape's destination point, relative to this node's [code]position[/code].
+ </member>
+ </members>
+</class>
diff --git a/doc/classes/Skeleton2D.xml b/doc/classes/Skeleton2D.xml
index 7aa06985bf..20bec14795 100644
--- a/doc/classes/Skeleton2D.xml
+++ b/doc/classes/Skeleton2D.xml
@@ -8,7 +8,7 @@
To setup different types of inverse kinematics for the given Skeleton2D, a [SkeletonModificationStack2D] should be created. They can be applied by creating the desired number of modifications, which can be done by increasing [member SkeletonModificationStack2D.modification_count].
</description>
<tutorials>
- <link title="2D skeletons">https://docs.godotengine.org/en/latest/tutorials/animation/2d_skeletons.html</link>
+ <link title="2D skeletons">$DOCS_URL/tutorials/animation/2d_skeletons.html</link>
</tutorials>
<methods>
<method name="execute_modifications">
diff --git a/doc/classes/SoftDynamicBody3D.xml b/doc/classes/SoftDynamicBody3D.xml
index f999f77e78..fceebddf35 100644
--- a/doc/classes/SoftDynamicBody3D.xml
+++ b/doc/classes/SoftDynamicBody3D.xml
@@ -7,7 +7,7 @@
A deformable physics body. Used to create elastic or deformable objects such as cloth, rubber, or other flexible materials.
</description>
<tutorials>
- <link title="SoftBody">https://docs.godotengine.org/en/latest/tutorials/physics/soft_body.html</link>
+ <link title="SoftBody">$DOCS_URL/tutorials/physics/soft_body.html</link>
</tutorials>
<methods>
<method name="add_collision_exception_with">
@@ -92,11 +92,11 @@
<members>
<member name="collision_layer" type="int" setter="set_collision_layer" getter="get_collision_layer" default="1">
The physics layers this SoftDynamicBody3D [b]is in[/b]. Collision objects can exist in one or more of 32 different layers. See also [member collision_mask].
- [b]Note:[/b] Object A can detect a contact with object B only if object B is in any of the layers that object A scans. See [url=https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
+ [b]Note:[/b] Object A can detect a contact with object B only if object B is in any of the layers that object A scans. See [url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
</member>
<member name="collision_mask" type="int" setter="set_collision_mask" getter="get_collision_mask" default="1">
The physics layers this SoftDynamicBody3D [b]scans[/b]. Collision objects can scan one or more of 32 different layers. See also [member collision_layer].
- [b]Note:[/b] Object A can detect a contact with object B only if object B is in any of the layers that object A scans. See [url=https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
+ [b]Note:[/b] Object A can detect a contact with object B only if object B is in any of the layers that object A scans. See [url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
</member>
<member name="damping_coefficient" type="float" setter="set_damping_coefficient" getter="get_damping_coefficient" default="0.01">
</member>
diff --git a/doc/classes/SpotLight3D.xml b/doc/classes/SpotLight3D.xml
index 8c10ec36a8..f9f9a62baa 100644
--- a/doc/classes/SpotLight3D.xml
+++ b/doc/classes/SpotLight3D.xml
@@ -7,7 +7,7 @@
A Spotlight is a type of [Light3D] node that emits lights in a specific direction, in the shape of a cone. The light is attenuated through the distance. This attenuation can be configured by changing the energy, radius and attenuation parameters of [Light3D].
</description>
<tutorials>
- <link title="3D lights and shadows">https://docs.godotengine.org/en/latest/tutorials/3d/lights_and_shadows.html</link>
+ <link title="3D lights and shadows">$DOCS_URL/tutorials/3d/lights_and_shadows.html</link>
<link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link>
</tutorials>
<members>
diff --git a/doc/classes/SpringArm3D.xml b/doc/classes/SpringArm3D.xml
index 2cd8fa71cf..a54578cff4 100644
--- a/doc/classes/SpringArm3D.xml
+++ b/doc/classes/SpringArm3D.xml
@@ -41,7 +41,7 @@
</methods>
<members>
<member name="collision_mask" type="int" setter="set_collision_mask" getter="get_collision_mask" default="1">
- The layers against which the collision check shall be done. See [url=https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
+ The layers against which the collision check shall be done. See [url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
</member>
<member name="margin" type="float" setter="set_margin" getter="get_margin" default="0.01">
When the collision check is made, a candidate length for the SpringArm3D is given.
diff --git a/doc/classes/StandardMaterial3D.xml b/doc/classes/StandardMaterial3D.xml
index 43ba95e345..1a8bf0e202 100644
--- a/doc/classes/StandardMaterial3D.xml
+++ b/doc/classes/StandardMaterial3D.xml
@@ -5,6 +5,6 @@
<description>
</description>
<tutorials>
- <link title="Standard Material 3D">https://docs.godotengine.org/en/latest/tutorials/3d/standard_material_3d.html</link>
+ <link title="Standard Material 3D">$DOCS_URL/tutorials/3d/standard_material_3d.html</link>
</tutorials>
</class>
diff --git a/doc/classes/StreamPeerSSL.xml b/doc/classes/StreamPeerSSL.xml
index 50389f912d..5e6e07fe36 100644
--- a/doc/classes/StreamPeerSSL.xml
+++ b/doc/classes/StreamPeerSSL.xml
@@ -8,7 +8,7 @@
[b]Note:[/b] When exporting to Android, make sure to enable the [code]INTERNET[/code] permission in the Android export preset before exporting the project or using one-click deploy. Otherwise, network communication of any kind will be blocked by Android.
</description>
<tutorials>
- <link title="SSL certificates">https://docs.godotengine.org/en/latest/tutorials/networking/ssl_certificates.html</link>
+ <link title="SSL certificates">$DOCS_URL/tutorials/networking/ssl_certificates.html</link>
</tutorials>
<methods>
<method name="accept_stream">
diff --git a/doc/classes/String.xml b/doc/classes/String.xml
index 1190d90190..ce902c1216 100644
--- a/doc/classes/String.xml
+++ b/doc/classes/String.xml
@@ -7,7 +7,7 @@
This is the built-in string class (and the one used by GDScript). It supports Unicode and provides all necessary means for string handling. Strings are reference-counted and use a copy-on-write approach, so passing them around is cheap in resources.
</description>
<tutorials>
- <link title="GDScript format strings">https://docs.godotengine.org/en/latest/tutorials/scripting/gdscript/gdscript_format_string.html</link>
+ <link title="GDScript format strings">$DOCS_URL/tutorials/scripting/gdscript/gdscript_format_string.html</link>
</tutorials>
<constructors>
<constructor name="String">
@@ -202,6 +202,19 @@
If the string is a valid file path, returns the filename.
</description>
</method>
+ <method name="get_slice" qualifiers="const">
+ <return type="String" />
+ <argument index="0" name="delimiter" type="String" />
+ <argument index="1" name="slice" type="int" />
+ <description>
+ Splits a string using a [code]delimiter[/code] and returns a substring at index [code]slice[/code]. Returns an empty string if the index doesn't exist.
+ This is a more performant alternative to [method split] for cases when you need only one element from the array at a fixed index.
+ Example:
+ [codeblock]
+ print("i/am/example/string".get_slice("/", 2)) # Prints 'example'.
+ [/codeblock]
+ </description>
+ </method>
<method name="hash" qualifiers="const">
<return type="int" />
<description>
@@ -602,6 +615,7 @@
<description>
Splits the string by a [code]delimiter[/code] string and returns an array of the substrings. The [code]delimiter[/code] can be of any length.
If [code]maxsplit[/code] is specified, it defines the number of splits to do from the left up to [code]maxsplit[/code]. The default value of [code]0[/code] means that all items are split.
+ If you need only one element from the array at a specific index, [method get_slice] is a more performant option.
Example:
[codeblocks]
[gdscript]
diff --git a/doc/classes/SubViewport.xml b/doc/classes/SubViewport.xml
index c2a76b587f..f0b85cdad5 100644
--- a/doc/classes/SubViewport.xml
+++ b/doc/classes/SubViewport.xml
@@ -6,8 +6,8 @@
<description>
</description>
<tutorials>
- <link title="Using Viewports">https://docs.godotengine.org/en/latest/tutorials/rendering/viewports.html</link>
- <link title="Viewport and canvas transforms">https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html</link>
+ <link title="Using Viewports">$DOCS_URL/tutorials/rendering/viewports.html</link>
+ <link title="Viewport and canvas transforms">$DOCS_URL/tutorials/2d/2d_transforms.html</link>
<link title="GUI in 3D Demo">https://godotengine.org/asset-library/asset/127</link>
<link title="3D in 2D Demo">https://godotengine.org/asset-library/asset/128</link>
<link title="2D in 3D Demo">https://godotengine.org/asset-library/asset/129</link>
diff --git a/doc/classes/TextEdit.xml b/doc/classes/TextEdit.xml
index b8e2f7f03c..16d8595b4e 100644
--- a/doc/classes/TextEdit.xml
+++ b/doc/classes/TextEdit.xml
@@ -233,8 +233,9 @@
<method name="get_line_column_at_pos" qualifiers="const">
<return type="Vector2i" />
<argument index="0" name="position" type="Vector2i" />
+ <argument index="1" name="allow_out_of_bounds" type="bool" default="true" />
<description>
- Returns the line and column at the given position. In the returned vector, [code]x[/code] is the column, [code]y[/code] is the line.
+ Returns the line and column at the given position. In the returned vector, [code]x[/code] is the column, [code]y[/code] is the line. If [code]allow_out_of_bounds[/code] is [code]false[/code] and the position is not over the text, both vector values will be set to [code]-1[/code].
</description>
</method>
<method name="get_line_count" qualifiers="const">
@@ -361,6 +362,24 @@
Returns OpenType feature [code]tag[/code].
</description>
</method>
+ <method name="get_pos_at_line_column" qualifiers="const">
+ <return type="Vector2i" />
+ <argument index="0" name="line" type="int" />
+ <argument index="1" name="column" type="int" />
+ <description>
+ Returns the local position for the given [code]line[/code] and [code]column[/code]. If [code]x[/code] or [code]y[/code] of the returned vector equal [code]-1[/code], the position is outside of the viewable area of the control.
+ [b]Note:[/b] The Y position corresponds to the bottom side of the line. Use [method get_rect_at_line_column] to get the top side position.
+ </description>
+ </method>
+ <method name="get_rect_at_line_column" qualifiers="const">
+ <return type="Rect2i" />
+ <argument index="0" name="line" type="int" />
+ <argument index="1" name="column" type="int" />
+ <description>
+ Returns the local position and size for the grapheme at the given [code]line[/code] and [code]column[/code]. If [code]x[/code] or [code]y[/code] position of the returned rect equal [code]-1[/code], the position is outside of the viewable area of the control.
+ [b]Note:[/b] The Y position of the returned rect corresponds to the top side of the line, unlike [method get_pos_at_line_column] which returns the bottom side.
+ </description>
+ </method>
<method name="get_saved_version" qualifiers="const">
<return type="int" />
<description>
@@ -453,6 +472,14 @@
Returns the number of visible lines, including wrapped text.
</description>
</method>
+ <method name="get_visible_line_count_in_range" qualifiers="const">
+ <return type="int" />
+ <argument index="0" name="from_line" type="int" />
+ <argument index="1" name="to_line" type="int" />
+ <description>
+ Returns the total number of visible + wrapped lines between the two lines.
+ </description>
+ </method>
<method name="get_word_at_pos" qualifiers="const">
<return type="String" />
<argument index="0" name="position" type="Vector2" />
diff --git a/doc/classes/TextParagraph.xml b/doc/classes/TextParagraph.xml
index 5bd6b0572c..a7122b827e 100644
--- a/doc/classes/TextParagraph.xml
+++ b/doc/classes/TextParagraph.xml
@@ -278,6 +278,9 @@
<member name="align" type="int" setter="set_align" getter="get_align" enum="HAlign" default="0">
Paragraph horizontal alignment.
</member>
+ <member name="custom_punctuation" type="String" setter="set_custom_punctuation" getter="get_custom_punctuation" default="&quot;&quot;">
+ Custom punctuation character list, used for word breaking. If set to empty string, server defaults are used.
+ </member>
<member name="direction" type="int" setter="set_direction" getter="get_direction" enum="TextServer.Direction" default="0">
Text writing direction.
</member>
diff --git a/doc/classes/TextServer.xml b/doc/classes/TextServer.xml
index 3e32afe370..512078c56c 100644
--- a/doc/classes/TextServer.xml
+++ b/doc/classes/TextServer.xml
@@ -254,6 +254,13 @@
Returns source font size used to generate MSDF textures.
</description>
</method>
+ <method name="font_get_name" qualifiers="const">
+ <return type="String" />
+ <argument index="0" name="font_rid" type="RID" />
+ <description>
+ Returns font family name.
+ </description>
+ </method>
<method name="font_get_oversampling" qualifiers="const">
<return type="float" />
<argument index="0" name="font_rid" type="RID" />
@@ -300,6 +307,20 @@
Returns extra spacing added between glyphs in pixels.
</description>
</method>
+ <method name="font_get_style" qualifiers="const">
+ <return type="int" />
+ <argument index="0" name="font_rid" type="RID" />
+ <description>
+ Returns font style flags, see [enum FontStyle].
+ </description>
+ </method>
+ <method name="font_get_style_name" qualifiers="const">
+ <return type="String" />
+ <argument index="0" name="font_rid" type="RID" />
+ <description>
+ Returns font style name.
+ </description>
+ </method>
<method name="font_get_supported_chars" qualifiers="const">
<return type="String" />
<argument index="0" name="font_rid" type="RID" />
@@ -634,6 +655,14 @@
[b]Note:[/b] MSDF font rendering does not render glyphs with overlapping shapes correctly. Overlapping shapes are not valid per the OpenType standard, but are still commonly found in many font files, especially those converted by Google Fonts. To avoid issues with overlapping glyphs, consider downloading the font file directly from the type foundry instead of relying on Google Fonts.
</description>
</method>
+ <method name="font_set_name">
+ <return type="void" />
+ <argument index="0" name="font_rid" type="RID" />
+ <argument index="1" name="name" type="String" />
+ <description>
+ Sets the font family name.
+ </description>
+ </method>
<method name="font_set_oversampling">
<return type="void" />
<argument index="0" name="font_rid" type="RID" />
@@ -670,6 +699,22 @@
Sets extra spacing added between glyphs in pixels.
</description>
</method>
+ <method name="font_set_style">
+ <return type="void" />
+ <argument index="0" name="font_rid" type="RID" />
+ <argument index="1" name="style" type="int" />
+ <description>
+ Sets the font style flags, see [enum FontStyle].
+ </description>
+ </method>
+ <method name="font_set_style_name">
+ <return type="void" />
+ <argument index="0" name="font_rid" type="RID" />
+ <argument index="1" name="name" type="String" />
+ <description>
+ Set the font style name.
+ </description>
+ </method>
<method name="font_set_texture_image">
<return type="void" />
<argument index="0" name="font_rid" type="RID" />
@@ -917,6 +962,13 @@
Returns shapes of the carets corresponding to the character offset [code]position[/code] in the text. Returned caret shape is 1 pixel wide rectangle.
</description>
</method>
+ <method name="shaped_text_get_custom_punctuation" qualifiers="const">
+ <return type="String" />
+ <argument index="0" name="shaped" type="RID" />
+ <description>
+ Returns custom punctuation character list, used for word breaking. If set to empty string, server defaults are used.
+ </description>
+ </method>
<method name="shaped_text_get_descent" qualifiers="const">
<return type="float" />
<argument index="0" name="shaped" type="RID" />
@@ -976,6 +1028,14 @@
Returns text glyphs in the visual order.
</description>
</method>
+ <method name="shaped_text_get_grapheme_bounds" qualifiers="const">
+ <return type="Vector2" />
+ <argument index="0" name="shaped" type="RID" />
+ <argument index="1" name="pos" type="int" />
+ <description>
+ Returns composite character's bounds as offsets from the start of the line.
+ </description>
+ </method>
<method name="shaped_text_get_line_breaks" qualifiers="const">
<return type="PackedInt32Array" />
<argument index="0" name="shaped" type="RID" />
@@ -1167,6 +1227,14 @@
Override ranges should cover full source text without overlaps. BiDi algorithm will be used on each range separately.
</description>
</method>
+ <method name="shaped_text_set_custom_punctuation">
+ <return type="void" />
+ <argument index="0" name="shaped" type="RID" />
+ <argument index="1" name="punct" type="String" />
+ <description>
+ Sets custom punctuation character list, used for word breaking. If set to empty string, server defaults are used.
+ </description>
+ </method>
<method name="shaped_text_set_direction">
<return type="void" />
<argument index="0" name="shaped" type="RID" />
@@ -1402,5 +1470,14 @@
<constant name="SPACING_BOTTOM" value="3" enum="SpacingType">
Spacing at the bottom of the line.
</constant>
+ <constant name="FONT_BOLD" value="1" enum="FontStyle">
+ Font is bold.
+ </constant>
+ <constant name="FONT_ITALIC" value="2" enum="FontStyle">
+ Font is italic or oblique.
+ </constant>
+ <constant name="FONT_FIXED_WIDTH" value="4" enum="FontStyle">
+ Font have fixed-width characters.
+ </constant>
</constants>
</class>
diff --git a/doc/classes/TextServerExtension.xml b/doc/classes/TextServerExtension.xml
index 99382d5463..32f8107e0a 100644
--- a/doc/classes/TextServerExtension.xml
+++ b/doc/classes/TextServerExtension.xml
@@ -254,6 +254,13 @@
Returns source font size used to generate MSDF textures.
</description>
</method>
+ <method name="_font_get_name" qualifiers="virtual const">
+ <return type="String" />
+ <argument index="0" name="font_rid" type="RID" />
+ <description>
+ Returns font family name.
+ </description>
+ </method>
<method name="_font_get_oversampling" qualifiers="virtual const">
<return type="float" />
<argument index="0" name="font_rid" type="RID" />
@@ -300,6 +307,20 @@
Returns extra spacing added between glyphs in pixels.
</description>
</method>
+ <method name="_font_get_style" qualifiers="virtual const">
+ <return type="int" />
+ <argument index="0" name="font_rid" type="RID" />
+ <description>
+ Returns font style flags, see [enum TextServer.FontStyle].
+ </description>
+ </method>
+ <method name="_font_get_style_name" qualifiers="virtual const">
+ <return type="String" />
+ <argument index="0" name="font_rid" type="RID" />
+ <description>
+ Returns font style name.
+ </description>
+ </method>
<method name="_font_get_supported_chars" qualifiers="virtual const">
<return type="String" />
<argument index="0" name="font_rid" type="RID" />
@@ -641,6 +662,14 @@
If set to [code]true[/code], glyphs of all sizes are rendered using single multichannel signed distance field generated from the dynamic font vector data.
</description>
</method>
+ <method name="_font_set_name" qualifiers="virtual">
+ <return type="void" />
+ <argument index="0" name="font_rid" type="RID" />
+ <argument index="1" name="name" type="String" />
+ <description>
+ Sets the font family name.
+ </description>
+ </method>
<method name="_font_set_oversampling" qualifiers="virtual">
<return type="void" />
<argument index="0" name="font_rid" type="RID" />
@@ -677,6 +706,22 @@
Sets extra spacing added between glyphs in pixels.
</description>
</method>
+ <method name="_font_set_style" qualifiers="virtual">
+ <return type="void" />
+ <argument index="0" name="font_rid" type="RID" />
+ <argument index="1" name="style" type="int" />
+ <description>
+ Sets the font style flags, see [enum TextServer.FontStyle].
+ </description>
+ </method>
+ <method name="_font_set_style_name" qualifiers="virtual">
+ <return type="void" />
+ <argument index="0" name="font_rid" type="RID" />
+ <argument index="1" name="name_style" type="String" />
+ <description>
+ Sets the font style name.
+ </description>
+ </method>
<method name="_font_set_texture_image" qualifiers="virtual">
<return type="void" />
<argument index="0" name="font_rid" type="RID" />
@@ -924,6 +969,13 @@
Returns shapes of the carets corresponding to the character offset [code]position[/code] in the text. Returned caret shape is 1 pixel wide rectangle.
</description>
</method>
+ <method name="_shaped_text_get_custom_punctuation" qualifiers="virtual const">
+ <return type="String" />
+ <argument index="0" name="shaped" type="RID" />
+ <description>
+ Returns custom punctuation character list, used for word breaking. If set to empty string, server defaults are used.
+ </description>
+ </method>
<method name="_shaped_text_get_descent" qualifiers="virtual const">
<return type="float" />
<argument index="0" name="shaped" type="RID" />
@@ -985,6 +1037,14 @@
Copies text glyphs in the visual order, into preallocated array of the size returned by [method _shaped_text_get_glyph_count].
</description>
</method>
+ <method name="_shaped_text_get_grapheme_bounds" qualifiers="virtual const">
+ <return type="Vector2" />
+ <argument index="0" name="shaped" type="RID" />
+ <argument index="1" name="pos" type="int" />
+ <description>
+ Returns composite character's bounds as offsets from the start of the line.
+ </description>
+ </method>
<method name="_shaped_text_get_line_breaks" qualifiers="virtual const">
<return type="PackedInt32Array" />
<argument index="0" name="shaped" type="RID" />
@@ -1176,6 +1236,14 @@
Override ranges should cover full source text without overlaps. BiDi algorithm will be used on each range separately.
</description>
</method>
+ <method name="_shaped_text_set_custom_punctuation" qualifiers="virtual">
+ <return type="void" />
+ <argument index="0" name="shaped" type="RID" />
+ <argument index="1" name="punct" type="String" />
+ <description>
+ Sets custom punctuation character list, used for word breaking. If set to empty string, server defaults are used.
+ </description>
+ </method>
<method name="_shaped_text_set_direction" qualifiers="virtual">
<return type="void" />
<argument index="0" name="shaped" type="RID" />
diff --git a/doc/classes/Theme.xml b/doc/classes/Theme.xml
index 52a419ce0f..d1a48fda55 100644
--- a/doc/classes/Theme.xml
+++ b/doc/classes/Theme.xml
@@ -8,7 +8,7 @@
Theme resources can alternatively be loaded by writing them in a [code].theme[/code] file, see the documentation for more information.
</description>
<tutorials>
- <link title="GUI skinning">https://docs.godotengine.org/en/latest/tutorials/ui/gui_skinning.html</link>
+ <link title="GUI skinning">$DOCS_URL/tutorials/ui/gui_skinning.html</link>
</tutorials>
<methods>
<method name="clear">
diff --git a/doc/classes/Thread.xml b/doc/classes/Thread.xml
index eb2df8a4f9..bd9a6c865a 100644
--- a/doc/classes/Thread.xml
+++ b/doc/classes/Thread.xml
@@ -8,8 +8,8 @@
[b]Note:[/b] Breakpoints won't break on code if it's running in a thread. This is a current limitation of the GDScript debugger.
</description>
<tutorials>
- <link title="Using multiple threads">https://docs.godotengine.org/en/latest/tutorials/performance/using_multiple_threads.html</link>
- <link title="Thread-safe APIs">https://docs.godotengine.org/en/latest/tutorials/performance/thread_safe_apis.html</link>
+ <link title="Using multiple threads">$DOCS_URL/tutorials/performance/using_multiple_threads.html</link>
+ <link title="Thread-safe APIs">$DOCS_URL/tutorials/performance/thread_safe_apis.html</link>
<link title="3D Voxel Demo">https://godotengine.org/asset-library/asset/676</link>
</tutorials>
<methods>
diff --git a/doc/classes/TileMap.xml b/doc/classes/TileMap.xml
index 22d61c7285..6e552e3649 100644
--- a/doc/classes/TileMap.xml
+++ b/doc/classes/TileMap.xml
@@ -7,7 +7,7 @@
Node for 2D tile-based maps. Tilemaps use a [TileSet] which contain a list of tiles which are used to create grid-based maps. A TileMap may have several layers, layouting tiles on top of each other.
</description>
<tutorials>
- <link title="Using Tilemaps">https://docs.godotengine.org/en/latest/tutorials/2d/using_tilemaps.html</link>
+ <link title="Using Tilemaps">$DOCS_URL/tutorials/2d/using_tilemaps.html</link>
<link title="2D Platformer Demo">https://godotengine.org/asset-library/asset/120</link>
<link title="2D Isometric Demo">https://godotengine.org/asset-library/asset/112</link>
<link title="2D Hexagonal Demo">https://godotengine.org/asset-library/asset/111</link>
diff --git a/doc/classes/TileMapPattern.xml b/doc/classes/TileMapPattern.xml
index 4c46625423..ab7c95bb7b 100644
--- a/doc/classes/TileMapPattern.xml
+++ b/doc/classes/TileMapPattern.xml
@@ -59,7 +59,7 @@
<method name="remove_cell">
<return type="void" />
<argument index="0" name="coords" type="Vector2i" />
- <argument index="1" name="arg1" type="bool" />
+ <argument index="1" name="update_size" type="bool" />
<description>
Remove the cell at the given coordinates.
</description>
diff --git a/doc/classes/TileSet.xml b/doc/classes/TileSet.xml
index 45d6f9ca6c..5d9065f823 100644
--- a/doc/classes/TileSet.xml
+++ b/doc/classes/TileSet.xml
@@ -13,7 +13,7 @@
See the functions to add new layers for more information.
</description>
<tutorials>
- <link title="Using Tilemaps">https://docs.godotengine.org/en/latest/tutorials/2d/using_tilemaps.html</link>
+ <link title="Using Tilemaps">$DOCS_URL/tutorials/2d/using_tilemaps.html</link>
<link title="2D Platformer Demo">https://godotengine.org/asset-library/asset/120</link>
<link title="2D Isometric Demo">https://godotengine.org/asset-library/asset/112</link>
<link title="2D Hexagonal Demo">https://godotengine.org/asset-library/asset/111</link>
diff --git a/doc/classes/TileSetAtlasSource.xml b/doc/classes/TileSetAtlasSource.xml
index 881a1c3d07..6580c6bd4c 100644
--- a/doc/classes/TileSetAtlasSource.xml
+++ b/doc/classes/TileSetAtlasSource.xml
@@ -45,6 +45,21 @@
Returns the alternative ID a following call to [method create_alternative_tile] would return.
</description>
</method>
+ <method name="get_runtime_texture" qualifiers="const">
+ <return type="Texture2D" />
+ <description>
+ If [member use_texture_padding] is [code]false[/code], returns [member texture]. Otherwise, returns and internal [ImageTexture] created that includes the padding.
+ </description>
+ </method>
+ <method name="get_runtime_tile_texture_region" qualifiers="const">
+ <return type="Rect2i" />
+ <argument index="0" name="atlas_coords" type="Vector2i" />
+ <argument index="1" name="frame" type="int" />
+ <description>
+ Returns the region of the tile at coordinates [code]atlas_coords[/code] for frame [code]frame[/code] inside the texture returned by [method get_runtime_texture].
+ [b]Note:[/b] If [member use_texture_padding] is [code]false[/code], returns the same as [method get_tile_texture_region].
+ </description>
+ </method>
<method name="get_tile_animation_columns" qualifiers="const">
<return type="int" />
<argument index="0" name="atlas_coords" type="Vector2i" />
@@ -232,5 +247,9 @@
<member name="texture_region_size" type="Vector2i" setter="set_texture_region_size" getter="get_texture_region_size" default="Vector2i(16, 16)">
The base tile size in the texture (in pixel). This size must be bigger than the TileSet's [code]tile_size[/code] value.
</member>
+ <member name="use_texture_padding" type="bool" setter="set_use_texture_padding" getter="get_use_texture_padding" default="true">
+ If [code]true[/code], generates an internal texture with an additional one pixel padding around each tile. Texture padding avoids a common artifact where lines appear between tiles.
+ Disabling this setting might lead a small performance improvement, as generating the internal texture requires both memory and processing time when the TileSetAtlasSource resource is modified.
+ </member>
</members>
</class>
diff --git a/doc/classes/Transform2D.xml b/doc/classes/Transform2D.xml
index ab7632e08e..be41cdde99 100644
--- a/doc/classes/Transform2D.xml
+++ b/doc/classes/Transform2D.xml
@@ -8,8 +8,8 @@
For more information, read the "Matrices and transforms" documentation article.
</description>
<tutorials>
- <link title="Math documentation index">https://docs.godotengine.org/en/latest/tutorials/math/index.html</link>
- <link title="Matrices and transforms">https://docs.godotengine.org/en/latest/tutorials/math/matrices_and_transforms.html</link>
+ <link title="Math documentation index">$DOCS_URL/tutorials/math/index.html</link>
+ <link title="Matrices and transforms">$DOCS_URL/tutorials/math/matrices_and_transforms.html</link>
<link title="Matrix Transform Demo">https://godotengine.org/asset-library/asset/584</link>
<link title="2.5D Demo">https://godotengine.org/asset-library/asset/583</link>
</tutorials>
@@ -213,30 +213,36 @@
<return type="bool" />
<argument index="0" name="right" type="Transform2D" />
<description>
+ Returns [code]true[/code] if the transforms are not equal.
+ [b]Note:[/b] Due to floating-point precision errors, consider using [method is_equal_approx] instead, which is more reliable.
</description>
</operator>
<operator name="operator *">
<return type="PackedVector2Array" />
<argument index="0" name="right" type="PackedVector2Array" />
<description>
+ Transforms (multiplies) each element of the [Vector2] array by the given [Transform2D] matrix.
</description>
</operator>
<operator name="operator *">
<return type="Transform2D" />
<argument index="0" name="right" type="Transform2D" />
<description>
+ Composes these two transformation matrices by multiplying them together. This has the effect of transforming the second transform (the child) by the first transform (the parent).
</description>
</operator>
<operator name="operator *">
<return type="Rect2" />
<argument index="0" name="right" type="Rect2" />
<description>
+ Transforms (multiplies) the [Rect2] by the given [Transform2D] matrix.
</description>
</operator>
<operator name="operator *">
<return type="Vector2" />
<argument index="0" name="right" type="Vector2" />
<description>
+ Transforms (multiplies) the [Vector2] by the given [Transform2D] matrix.
</description>
</operator>
<operator name="operator *">
@@ -262,12 +268,15 @@
<return type="bool" />
<argument index="0" name="right" type="Transform2D" />
<description>
+ Returns [code]true[/code] if the transforms are exactly equal.
+ [b]Note:[/b] Due to floating-point precision errors, consider using [method is_equal_approx] instead, which is more reliable.
</description>
</operator>
<operator name="operator []">
<return type="Vector2" />
<argument index="0" name="index" type="int" />
<description>
+ Access transform components using their index. [code]t[0][/code] is equivalent to [code]t.x[/code], [code]t[1][/code] is equivalent to [code]t.y[/code], and [code]t[2][/code] is equivalent to [code]t.origin[/code].
</description>
</operator>
</operators>
diff --git a/doc/classes/Transform3D.xml b/doc/classes/Transform3D.xml
index 8c4965abb4..511574f6aa 100644
--- a/doc/classes/Transform3D.xml
+++ b/doc/classes/Transform3D.xml
@@ -8,9 +8,9 @@
For more information, read the "Matrices and transforms" documentation article.
</description>
<tutorials>
- <link title="Math documentation index">https://docs.godotengine.org/en/latest/tutorials/math/index.html</link>
- <link title="Matrices and transforms">https://docs.godotengine.org/en/latest/tutorials/math/matrices_and_transforms.html</link>
- <link title="Using 3D transforms">https://docs.godotengine.org/en/latest/tutorials/3d/using_transforms.html</link>
+ <link title="Math documentation index">$DOCS_URL/tutorials/math/index.html</link>
+ <link title="Matrices and transforms">$DOCS_URL/tutorials/math/matrices_and_transforms.html</link>
+ <link title="Using 3D transforms">$DOCS_URL/tutorials/3d/using_transforms.html</link>
<link title="Matrix Transform Demo">https://godotengine.org/asset-library/asset/584</link>
<link title="3D Platformer Demo">https://godotengine.org/asset-library/asset/125</link>
<link title="2.5D Demo">https://godotengine.org/asset-library/asset/583</link>
@@ -147,30 +147,36 @@
<return type="bool" />
<argument index="0" name="right" type="Transform3D" />
<description>
+ Returns [code]true[/code] if the transforms are not equal.
+ [b]Note:[/b] Due to floating-point precision errors, consider using [method is_equal_approx] instead, which is more reliable.
</description>
</operator>
<operator name="operator *">
<return type="PackedVector3Array" />
<argument index="0" name="right" type="PackedVector3Array" />
<description>
+ Transforms (multiplies) each element of the [Vector3] array by the given [Transform3D] matrix.
</description>
</operator>
<operator name="operator *">
<return type="Transform3D" />
<argument index="0" name="right" type="Transform3D" />
<description>
+ Composes these two transformation matrices by multiplying them together. This has the effect of transforming the second transform (the child) by the first transform (the parent).
</description>
</operator>
<operator name="operator *">
<return type="AABB" />
<argument index="0" name="right" type="AABB" />
<description>
+ Transforms (multiplies) the [AABB] by the given [Transform3D] matrix.
</description>
</operator>
<operator name="operator *">
<return type="Vector3" />
<argument index="0" name="right" type="Vector3" />
<description>
+ Transforms (multiplies) the [Vector3] by the given [Transform3D] matrix.
</description>
</operator>
<operator name="operator *">
@@ -196,6 +202,8 @@
<return type="bool" />
<argument index="0" name="right" type="Transform3D" />
<description>
+ Returns [code]true[/code] if the transforms are exactly equal.
+ [b]Note:[/b] Due to floating-point precision errors, consider using [method is_equal_approx] instead, which is more reliable.
</description>
</operator>
</operators>
diff --git a/doc/classes/Translation.xml b/doc/classes/Translation.xml
index 2a0695d42e..defebf7ab4 100644
--- a/doc/classes/Translation.xml
+++ b/doc/classes/Translation.xml
@@ -7,8 +7,8 @@
Translations are resources that can be loaded and unloaded on demand. They map a string to another string.
</description>
<tutorials>
- <link title="Internationalizing games">https://docs.godotengine.org/en/latest/tutorials/i18n/internationalizing_games.html</link>
- <link title="Locales">https://docs.godotengine.org/en/latest/tutorials/i18n/locales.html</link>
+ <link title="Internationalizing games">$DOCS_URL/tutorials/i18n/internationalizing_games.html</link>
+ <link title="Locales">$DOCS_URL/tutorials/i18n/locales.html</link>
</tutorials>
<methods>
<method name="_get_message" qualifiers="virtual const">
diff --git a/doc/classes/TranslationServer.xml b/doc/classes/TranslationServer.xml
index 8a6fa3571a..519e1cb041 100644
--- a/doc/classes/TranslationServer.xml
+++ b/doc/classes/TranslationServer.xml
@@ -7,8 +7,8 @@
Server that manages all translations. Translations can be set to it and removed from it.
</description>
<tutorials>
- <link title="Internationalizing games">https://docs.godotengine.org/en/latest/tutorials/i18n/internationalizing_games.html</link>
- <link title="Locales">https://docs.godotengine.org/en/latest/tutorials/i18n/locales.html</link>
+ <link title="Internationalizing games">$DOCS_URL/tutorials/i18n/internationalizing_games.html</link>
+ <link title="Locales">$DOCS_URL/tutorials/i18n/locales.html</link>
</tutorials>
<methods>
<method name="add_translation">
diff --git a/doc/classes/Tween.xml b/doc/classes/Tween.xml
index 488a5aa340..05c83f0423 100644
--- a/doc/classes/Tween.xml
+++ b/doc/classes/Tween.xml
@@ -74,17 +74,17 @@
</method>
<method name="interpolate_value">
<return type="Variant" />
- <argument index="0" name="trans_type" type="Variant" />
- <argument index="1" name="ease_type" type="Variant" />
+ <argument index="0" name="initial_value" type="Variant" />
+ <argument index="1" name="delta_value" type="Variant" />
<argument index="2" name="elapsed_time" type="float" />
- <argument index="3" name="initial_value" type="float" />
- <argument index="4" name="delta_value" type="int" enum="Tween.TransitionType" />
- <argument index="5" name="duration" type="int" enum="Tween.EaseType" />
+ <argument index="3" name="duration" type="float" />
+ <argument index="4" name="trans_type" type="int" enum="Tween.TransitionType" />
+ <argument index="5" name="ease_type" type="int" enum="Tween.EaseType" />
<description>
This method can be used for manual interpolation of a value, when you don't want [Tween] to do animating for you. It's similar to [method @GlobalScope.lerp], but with support for custom transition and easing.
- [code]elapsed_time[/code] is the time in seconds that passed after the interping started and it's used to control the position of the interpolation. E.g. when it's equal to half of the [code]duration[/code], the interpolated value will be halfway between initial and final values. This value can also be greater than [code]duration[/code] or lower than 0, which will extrapolate the value.
[code]initial_value[/code] is the starting value of the interpolation.
[code]delta_value[/code] is the change of the value in the interpolation, i.e. it's equal to [code]final_value - initial_value[/code].
+ [code]elapsed_time[/code] is the time in seconds that passed after the interpolation started and it's used to control the position of the interpolation. E.g. when it's equal to half of the [code]duration[/code], the interpolated value will be halfway between initial and final values. This value can also be greater than [code]duration[/code] or lower than 0, which will extrapolate the value.
[code]duration[/code] is the total time of the interpolation.
[b]Note:[/b] If [code]duration[/code] is equal to [code]0[/code], the method will always return the final value, regardless of [code]elapsed_time[/code] provided.
</description>
diff --git a/doc/classes/Variant.xml b/doc/classes/Variant.xml
index 88644e2f8a..b8649a2836 100644
--- a/doc/classes/Variant.xml
+++ b/doc/classes/Variant.xml
@@ -72,6 +72,6 @@
Modifications to a container will modify all references to it. A [Mutex] should be created to lock it if multi-threaded access is desired.
</description>
<tutorials>
- <link title="Variant class">https://docs.godotengine.org/en/latest/development/cpp/variant_class.html</link>
+ <link title="Variant class">$DOCS_URL/development/cpp/variant_class.html</link>
</tutorials>
</class>
diff --git a/doc/classes/Vector2.xml b/doc/classes/Vector2.xml
index eaaf41561a..595af6222c 100644
--- a/doc/classes/Vector2.xml
+++ b/doc/classes/Vector2.xml
@@ -9,9 +9,9 @@
[b]Note:[/b] In a boolean context, a Vector2 will evaluate to [code]false[/code] if it's equal to [code]Vector2(0, 0)[/code]. Otherwise, a Vector2 will always evaluate to [code]true[/code].
</description>
<tutorials>
- <link title="Math documentation index">https://docs.godotengine.org/en/latest/tutorials/math/index.html</link>
- <link title="Vector math">https://docs.godotengine.org/en/latest/tutorials/math/vector_math.html</link>
- <link title="Advanced vector math">https://docs.godotengine.org/en/latest/tutorials/math/vectors_advanced.html</link>
+ <link title="Math documentation index">$DOCS_URL/tutorials/math/index.html</link>
+ <link title="Vector math">$DOCS_URL/tutorials/math/vector_math.html</link>
+ <link title="Advanced vector math">$DOCS_URL/tutorials/math/vectors_advanced.html</link>
<link title="3Blue1Brown Essence of Linear Algebra">https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab</link>
<link title="Matrix Transform Demo">https://godotengine.org/asset-library/asset/584</link>
<link title="All 2D Demos">https://github.com/godotengine/godot-demo-projects/tree/master/2d</link>
@@ -75,6 +75,7 @@
<argument index="0" name="to" type="Vector2" />
<description>
Returns the angle between the line connecting the two points and the X axis, in radians.
+ [code]a.angle_to_point(b)[/code] is equivalent of doing [code](b - a).angle()[/code].
[url=https://raw.githubusercontent.com/godotengine/godot-docs/master/img/vector2_angle_to_point.png]Illustration of the returned angle.[/url]
</description>
</method>
@@ -351,72 +352,97 @@
<return type="bool" />
<argument index="0" name="right" type="Vector2" />
<description>
+ Returns [code]true[/code] if the vectors are not equal.
+ [b]Note:[/b] Due to floating-point precision errors, consider using [method is_equal_approx] instead, which is more reliable.
</description>
</operator>
<operator name="operator *">
<return type="Vector2" />
<argument index="0" name="right" type="Vector2" />
<description>
+ Multiplies each component of the [Vector2] by the components of the given [Vector2].
+ [codeblock]
+ print(Vector2(10, 20) * Vector2(3, 4)) # Prints "(30, 80)"
+ [/codeblock]
</description>
</operator>
<operator name="operator *">
<return type="Vector2" />
<argument index="0" name="right" type="Transform2D" />
<description>
+ Inversely transforms (multiplies) the [Vector2] by the given [Transform2D] transformation matrix.
</description>
</operator>
<operator name="operator *">
<return type="Vector2" />
<argument index="0" name="right" type="float" />
<description>
+ Multiplies each component of the [Vector2] by the given [float].
</description>
</operator>
<operator name="operator *">
<return type="Vector2" />
<argument index="0" name="right" type="int" />
<description>
+ Multiplies each component of the [Vector2] by the given [int].
</description>
</operator>
<operator name="operator +">
<return type="Vector2" />
<argument index="0" name="right" type="Vector2" />
<description>
+ Adds each component of the [Vector2] by the components of the given [Vector2].
+ [codeblock]
+ print(Vector2(10, 20) + Vector2(3, 4)) # Prints "(13, 24)"
+ [/codeblock]
</description>
</operator>
<operator name="operator -">
<return type="Vector2" />
<argument index="0" name="right" type="Vector2" />
<description>
+ Subtracts each component of the [Vector2] by the components of the given [Vector2].
+ [codeblock]
+ print(Vector2(10, 20) - Vector2(3, 4)) # Prints "(7, 16)"
+ [/codeblock]
</description>
</operator>
<operator name="operator /">
<return type="Vector2" />
<argument index="0" name="right" type="Vector2" />
<description>
+ Divides each component of the [Vector2] by the components of the given [Vector2].
+ [codeblock]
+ print(Vector2(10, 20) / Vector2(2, 5)) # Prints "(5, 4)"
+ [/codeblock]
</description>
</operator>
<operator name="operator /">
<return type="Vector2" />
<argument index="0" name="right" type="float" />
<description>
+ Divides each component of the [Vector2] by the given [float].
</description>
</operator>
<operator name="operator /">
<return type="Vector2" />
<argument index="0" name="right" type="int" />
<description>
+ Divides each component of the [Vector2] by the given [int].
</description>
</operator>
<operator name="operator &lt;">
<return type="bool" />
<argument index="0" name="right" type="Vector2" />
<description>
+ Compares two [Vector2] vectors by first checking if the X value of the left vector is less than the X value of the [code]right[/code] vector. If the X values are exactly equal, then it repeats this check with the Y values of the two vectors. This operator is useful for sorting vectors.
</description>
</operator>
<operator name="operator &lt;=">
<return type="bool" />
<argument index="0" name="right" type="Vector2" />
<description>
+ Compares two [Vector2] vectors by first checking if the X value of the left vector is less than or equal to the X value of the [code]right[/code] vector. If the X values are exactly equal, then it repeats this check with the Y values of the two vectors. This operator is useful for sorting vectors.
</description>
</operator>
<operator name="operator ==">
@@ -428,34 +454,41 @@
<return type="bool" />
<argument index="0" name="right" type="Vector2" />
<description>
+ Returns [code]true[/code] if the vectors are exactly equal.
+ [b]Note:[/b] Due to floating-point precision errors, consider using [method is_equal_approx] instead, which is more reliable.
</description>
</operator>
<operator name="operator &gt;">
<return type="bool" />
<argument index="0" name="right" type="Vector2" />
<description>
+ Compares two [Vector2] vectors by first checking if the X value of the left vector is greater than the X value of the [code]right[/code] vector. If the X values are exactly equal, then it repeats this check with the Y values of the two vectors. This operator is useful for sorting vectors.
</description>
</operator>
<operator name="operator &gt;=">
<return type="bool" />
<argument index="0" name="right" type="Vector2" />
<description>
+ Compares two [Vector2] vectors by first checking if the X value of the left vector is greater than or equal to the X value of the [code]right[/code] vector. If the X values are exactly equal, then it repeats this check with the Y values of the two vectors. This operator is useful for sorting vectors.
</description>
</operator>
<operator name="operator []">
<return type="float" />
<argument index="0" name="index" type="int" />
<description>
+ Access vector components using their index. [code]v[0][/code] is equivalent to [code]v.x[/code], and [code]v[1][/code] is equivalent to [code]v.y[/code].
</description>
</operator>
<operator name="operator unary+">
<return type="Vector2" />
<description>
+ Returns the same value as if the [code]+[/code] was not there. Unary [code]+[/code] does nothing, but sometimes it can make your code more readable.
</description>
</operator>
<operator name="operator unary-">
<return type="Vector2" />
<description>
+ Returns the negative value of the [Vector2]. This is the same as writing [code]Vector2(-v.x, -v.y)[/code]. This operation flips the direction of the vector while keeping the same magnitude. With floats, the number zero can be either positive or negative.
</description>
</operator>
</operators>
diff --git a/doc/classes/Vector2i.xml b/doc/classes/Vector2i.xml
index 71882e5b0c..62362409a5 100644
--- a/doc/classes/Vector2i.xml
+++ b/doc/classes/Vector2i.xml
@@ -9,8 +9,8 @@
[b]Note:[/b] In a boolean context, a Vector2i will evaluate to [code]false[/code] if it's equal to [code]Vector2i(0, 0)[/code]. Otherwise, a Vector2i will always evaluate to [code]true[/code].
</description>
<tutorials>
- <link title="Math documentation index">https://docs.godotengine.org/en/latest/tutorials/math/index.html</link>
- <link title="Vector math">https://docs.godotengine.org/en/latest/tutorials/math/vector_math.html</link>
+ <link title="Math documentation index">$DOCS_URL/tutorials/math/index.html</link>
+ <link title="Vector math">$DOCS_URL/tutorials/math/vector_math.html</link>
<link title="3Blue1Brown Essence of Linear Algebra">https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab</link>
</tutorials>
<constructors>
@@ -115,78 +115,115 @@
<return type="bool" />
<argument index="0" name="right" type="Vector2i" />
<description>
+ Returns [code]true[/code] if the vectors are not equal.
</description>
</operator>
<operator name="operator %">
<return type="Vector2i" />
<argument index="0" name="right" type="Vector2i" />
<description>
+ Gets the remainder of each component of the [Vector2i] with the components of the given [Vector2i]. This operation uses truncated division, which is often not desired as it does not work well with negative numbers. Consider using [method @GlobalScope.posmod] instead if you want to handle negative numbers.
+ [codeblock]
+ print(Vector2i(10, -20) % Vector2i(7, 8)) # Prints "(3, -4)"
+ [/codeblock]
</description>
</operator>
<operator name="operator %">
<return type="Vector2i" />
<argument index="0" name="right" type="int" />
<description>
+ Gets the remainder of each component of the [Vector2i] with the the given [int]. This operation uses truncated division, which is often not desired as it does not work well with negative numbers. Consider using [method @GlobalScope.posmod] instead if you want to handle negative numbers.
+ [codeblock]
+ print(Vector2i(10, -20) % 7) # Prints "(3, -6)"
+ [/codeblock]
</description>
</operator>
<operator name="operator *">
<return type="Vector2i" />
<argument index="0" name="right" type="Vector2i" />
<description>
+ Multiplies each component of the [Vector2i] by the components of the given [Vector2i].
+ [codeblock]
+ print(Vector2i(10, 20) * Vector2i(3, 4)) # Prints "(30, 80)"
+ [/codeblock]
</description>
</operator>
<operator name="operator *">
<return type="Vector2i" />
<argument index="0" name="right" type="float" />
<description>
+ Multiplies each component of the [Vector2i] by the given [float] truncated to an integer.
+ [codeblock]
+ print(Vector2i(10, 20) * 0.9) # Prints "(0, 0)"
+ [/codeblock]
</description>
</operator>
<operator name="operator *">
<return type="Vector2i" />
<argument index="0" name="right" type="int" />
<description>
+ Multiplies each component of the [Vector2i] by the given [int].
</description>
</operator>
<operator name="operator +">
<return type="Vector2i" />
<argument index="0" name="right" type="Vector2i" />
<description>
+ Adds each component of the [Vector2i] by the components of the given [Vector2i].
+ [codeblock]
+ print(Vector2i(10, 20) + Vector2i(3, 4)) # Prints "(13, 24)"
+ [/codeblock]
</description>
</operator>
<operator name="operator -">
<return type="Vector2i" />
<argument index="0" name="right" type="Vector2i" />
<description>
+ Subtracts each component of the [Vector2i] by the components of the given [Vector2i].
+ [codeblock]
+ print(Vector2i(10, 20) - Vector2i(3, 4)) # Prints "(7, 16)"
+ [/codeblock]
</description>
</operator>
<operator name="operator /">
<return type="Vector2i" />
<argument index="0" name="right" type="Vector2i" />
<description>
+ Divides each component of the [Vector2i] by the components of the given [Vector2i].
+ [codeblock]
+ print(Vector2i(10, 20) / Vector2i(2, 5)) # Prints "(5, 4)"
+ [/codeblock]
</description>
</operator>
<operator name="operator /">
<return type="Vector2i" />
<argument index="0" name="right" type="float" />
<description>
+ Divides each component of the [Vector2i] by the given [float] truncated to an integer.
+ [codeblock]
+ print(Vector2i(10, 20) / 2.9) # Prints "(5, 10)"
+ [/codeblock]
</description>
</operator>
<operator name="operator /">
<return type="Vector2i" />
<argument index="0" name="right" type="int" />
<description>
+ Divides each component of the [Vector2i] by the given [int].
</description>
</operator>
<operator name="operator &lt;">
<return type="bool" />
<argument index="0" name="right" type="Vector2i" />
<description>
+ Compares two [Vector2i] vectors by first checking if the X value of the left vector is less than the X value of the [code]right[/code] vector. If the X values are exactly equal, then it repeats this check with the Y values of the two vectors. This operator is useful for sorting vectors.
</description>
</operator>
<operator name="operator &lt;=">
<return type="bool" />
<argument index="0" name="right" type="Vector2i" />
<description>
+ Compares two [Vector2i] vectors by first checking if the X value of the left vector is less than or equal to the X value of the [code]right[/code] vector. If the X values are exactly equal, then it repeats this check with the Y values of the two vectors. This operator is useful for sorting vectors.
</description>
</operator>
<operator name="operator ==">
@@ -198,34 +235,40 @@
<return type="bool" />
<argument index="0" name="right" type="Vector2i" />
<description>
+ Returns [code]true[/code] if the vectors are equal.
</description>
</operator>
<operator name="operator &gt;">
<return type="bool" />
<argument index="0" name="right" type="Vector2i" />
<description>
+ Compares two [Vector2i] vectors by first checking if the X value of the left vector is greater than the X value of the [code]right[/code] vector. If the X values are exactly equal, then it repeats this check with the Y values of the two vectors. This operator is useful for sorting vectors.
</description>
</operator>
<operator name="operator &gt;=">
<return type="bool" />
<argument index="0" name="right" type="Vector2i" />
<description>
+ Compares two [Vector2i] vectors by first checking if the X value of the left vector is greater than or equal to the X value of the [code]right[/code] vector. If the X values are exactly equal, then it repeats this check with the Y values of the two vectors. This operator is useful for sorting vectors.
</description>
</operator>
<operator name="operator []">
<return type="int" />
<argument index="0" name="index" type="int" />
<description>
+ Access vector components using their index. [code]v[0][/code] is equivalent to [code]v.x[/code], and [code]v[1][/code] is equivalent to [code]v.y[/code].
</description>
</operator>
<operator name="operator unary+">
<return type="Vector2i" />
<description>
+ Returns the same value as if the [code]+[/code] was not there. Unary [code]+[/code] does nothing, but sometimes it can make your code more readable.
</description>
</operator>
<operator name="operator unary-">
<return type="Vector2i" />
<description>
+ Returns the negative value of the [Vector2i]. This is the same as writing [code]Vector2i(-v.x, -v.y)[/code]. This operation flips the direction of the vector while keeping the same magnitude.
</description>
</operator>
</operators>
diff --git a/doc/classes/Vector3.xml b/doc/classes/Vector3.xml
index a94cc0086f..62d467c505 100644
--- a/doc/classes/Vector3.xml
+++ b/doc/classes/Vector3.xml
@@ -9,9 +9,9 @@
[b]Note:[/b] In a boolean context, a Vector3 will evaluate to [code]false[/code] if it's equal to [code]Vector3(0, 0, 0)[/code]. Otherwise, a Vector3 will always evaluate to [code]true[/code].
</description>
<tutorials>
- <link title="Math documentation index">https://docs.godotengine.org/en/latest/tutorials/math/index.html</link>
- <link title="Vector math">https://docs.godotengine.org/en/latest/tutorials/math/vector_math.html</link>
- <link title="Advanced vector math">https://docs.godotengine.org/en/latest/tutorials/math/vectors_advanced.html</link>
+ <link title="Math documentation index">$DOCS_URL/tutorials/math/index.html</link>
+ <link title="Vector math">$DOCS_URL/tutorials/math/vector_math.html</link>
+ <link title="Advanced vector math">$DOCS_URL/tutorials/math/vectors_advanced.html</link>
<link title="3Blue1Brown Essence of Linear Algebra">https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab</link>
<link title="Matrix Transform Demo">https://godotengine.org/asset-library/asset/584</link>
<link title="All 3D Demos">https://github.com/godotengine/godot-demo-projects/tree/master/3d</link>
@@ -367,84 +367,111 @@
<return type="bool" />
<argument index="0" name="right" type="Vector3" />
<description>
+ Returns [code]true[/code] if the vectors are not equal.
+ [b]Note:[/b] Due to floating-point precision errors, consider using [method is_equal_approx] instead, which is more reliable.
</description>
</operator>
<operator name="operator *">
<return type="Vector3" />
<argument index="0" name="right" type="Vector3" />
<description>
+ Multiplies each component of the [Vector3] by the components of the given [Vector3].
+ [codeblock]
+ print(Vector3(10, 20, 30) * Vector3(3, 4, 5)) # Prints "(30, 80, 150)"
+ [/codeblock]
</description>
</operator>
<operator name="operator *">
<return type="Vector3" />
<argument index="0" name="right" type="Basis" />
<description>
+ Inversely transforms (multiplies) the [Vector3] by the given [Basis] matrix.
</description>
</operator>
<operator name="operator *">
<return type="Vector3" />
<argument index="0" name="right" type="Quaternion" />
<description>
+ Inversely transforms (multiplies) the [Vector3] by the given [Quaternion].
</description>
</operator>
<operator name="operator *">
<return type="Vector3" />
<argument index="0" name="right" type="Transform3D" />
<description>
+ Inversely transforms (multiplies) the [Vector3] by the given [Transform3D] transformation matrix.
</description>
</operator>
<operator name="operator *">
<return type="Vector3" />
<argument index="0" name="right" type="float" />
<description>
+ Multiplies each component of the [Vector3] by the given [float].
</description>
</operator>
<operator name="operator *">
<return type="Vector3" />
<argument index="0" name="right" type="int" />
<description>
+ Multiplies each component of the [Vector3] by the given [int].
</description>
</operator>
<operator name="operator +">
<return type="Vector3" />
<argument index="0" name="right" type="Vector3" />
<description>
+ Adds each component of the [Vector3] by the components of the given [Vector3].
+ [codeblock]
+ print(Vector3(10, 20, 30) + Vector3(3, 4, 5)) # Prints "(13, 24, 35)"
+ [/codeblock]
</description>
</operator>
<operator name="operator -">
<return type="Vector3" />
<argument index="0" name="right" type="Vector3" />
<description>
+ Subtracts each component of the [Vector3] by the components of the given [Vector3].
+ [codeblock]
+ print(Vector3(10, 20, 30) - Vector3(3, 4, 5)) # Prints "(7, 16, 25)"
+ [/codeblock]
</description>
</operator>
<operator name="operator /">
<return type="Vector3" />
<argument index="0" name="right" type="Vector3" />
<description>
+ Divides each component of the [Vector3] by the components of the given [Vector3].
+ [codeblock]
+ print(Vector3(10, 20, 30) / Vector3(2, 5, 3)) # Prints "(5, 4, 10)"
+ [/codeblock]
</description>
</operator>
<operator name="operator /">
<return type="Vector3" />
<argument index="0" name="right" type="float" />
<description>
+ Divides each component of the [Vector3] by the given [float].
</description>
</operator>
<operator name="operator /">
<return type="Vector3" />
<argument index="0" name="right" type="int" />
<description>
+ Divides each component of the [Vector3] by the given [int].
</description>
</operator>
<operator name="operator &lt;">
<return type="bool" />
<argument index="0" name="right" type="Vector3" />
<description>
+ Compares two [Vector3] vectors by first checking if the X value of the left vector is less than the X value of the [code]right[/code] vector. If the X values are exactly equal, then it repeats this check with the Y values of the two vectors, and then with the Z values. This operator is useful for sorting vectors.
</description>
</operator>
<operator name="operator &lt;=">
<return type="bool" />
<argument index="0" name="right" type="Vector3" />
<description>
+ Compares two [Vector3] vectors by first checking if the X value of the left vector is less than or equal to the X value of the [code]right[/code] vector. If the X values are exactly equal, then it repeats this check with the Y values of the two vectors, and then with the Z values. This operator is useful for sorting vectors.
</description>
</operator>
<operator name="operator ==">
@@ -456,34 +483,41 @@
<return type="bool" />
<argument index="0" name="right" type="Vector3" />
<description>
+ Returns [code]true[/code] if the vectors are exactly equal.
+ [b]Note:[/b] Due to floating-point precision errors, consider using [method is_equal_approx] instead, which is more reliable.
</description>
</operator>
<operator name="operator &gt;">
<return type="bool" />
<argument index="0" name="right" type="Vector3" />
<description>
+ Compares two [Vector3] vectors by first checking if the X value of the left vector is greater than the X value of the [code]right[/code] vector. If the X values are exactly equal, then it repeats this check with the Y values of the two vectors, and then with the Z values. This operator is useful for sorting vectors.
</description>
</operator>
<operator name="operator &gt;=">
<return type="bool" />
<argument index="0" name="right" type="Vector3" />
<description>
+ Compares two [Vector3] vectors by first checking if the X value of the left vector is greater than or equal to the X value of the [code]right[/code] vector. If the X values are exactly equal, then it repeats this check with the Y values of the two vectors, and then with the Z values. This operator is useful for sorting vectors.
</description>
</operator>
<operator name="operator []">
<return type="float" />
<argument index="0" name="index" type="int" />
<description>
+ Access vector components using their index. [code]v[0][/code] is equivalent to [code]v.x[/code], [code]v[1][/code] is equivalent to [code]v.y[/code], and [code]v[2][/code] is equivalent to [code]v.z[/code].
</description>
</operator>
<operator name="operator unary+">
<return type="Vector3" />
<description>
+ Returns the same value as if the [code]+[/code] was not there. Unary [code]+[/code] does nothing, but sometimes it can make your code more readable.
</description>
</operator>
<operator name="operator unary-">
<return type="Vector3" />
<description>
+ Returns the negative value of the [Vector3]. This is the same as writing [code]Vector3(-v.x, -v.y, -v.z)[/code]. This operation flips the direction of the vector while keeping the same magnitude. With floats, the number zero can be either positive or negative.
</description>
</operator>
</operators>
diff --git a/doc/classes/Vector3i.xml b/doc/classes/Vector3i.xml
index 5cd458a2be..17febdea83 100644
--- a/doc/classes/Vector3i.xml
+++ b/doc/classes/Vector3i.xml
@@ -9,8 +9,8 @@
[b]Note:[/b] In a boolean context, a Vector3i will evaluate to [code]false[/code] if it's equal to [code]Vector3i(0, 0, 0)[/code]. Otherwise, a Vector3i will always evaluate to [code]true[/code].
</description>
<tutorials>
- <link title="Math documentation index">https://docs.godotengine.org/en/latest/tutorials/math/index.html</link>
- <link title="Vector math">https://docs.godotengine.org/en/latest/tutorials/math/vector_math.html</link>
+ <link title="Math documentation index">$DOCS_URL/tutorials/math/index.html</link>
+ <link title="Vector math">$DOCS_URL/tutorials/math/vector_math.html</link>
<link title="3Blue1Brown Essence of Linear Algebra">https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab</link>
</tutorials>
<constructors>
@@ -133,78 +133,115 @@
<return type="bool" />
<argument index="0" name="right" type="Vector3i" />
<description>
+ Returns [code]true[/code] if the vectors are not equal.
</description>
</operator>
<operator name="operator %">
<return type="Vector3i" />
<argument index="0" name="right" type="Vector3i" />
<description>
+ Gets the remainder of each component of the [Vector3i] with the components of the given [Vector3i]. This operation uses truncated division, which is often not desired as it does not work well with negative numbers. Consider using [method @GlobalScope.posmod] instead if you want to handle negative numbers.
+ [codeblock]
+ print(Vector3i(10, -20, 30) % Vector3i(7, 8, 9)) # Prints "(3, -4, 3)"
+ [/codeblock]
</description>
</operator>
<operator name="operator %">
<return type="Vector3i" />
<argument index="0" name="right" type="int" />
<description>
+ Gets the remainder of each component of the [Vector3i] with the the given [int]. This operation uses truncated division, which is often not desired as it does not work well with negative numbers. Consider using [method @GlobalScope.posmod] instead if you want to handle negative numbers.
+ [codeblock]
+ print(Vector2i(10, -20, 30) % 7) # Prints "(3, -6, 2)"
+ [/codeblock]
</description>
</operator>
<operator name="operator *">
<return type="Vector3i" />
<argument index="0" name="right" type="Vector3i" />
<description>
+ Multiplies each component of the [Vector3i] by the components of the given [Vector3i].
+ [codeblock]
+ print(Vector3i(10, 20, 30) * Vector3i(3, 4, 5)) # Prints "(30, 80, 150)"
+ [/codeblock]
</description>
</operator>
<operator name="operator *">
<return type="Vector3i" />
<argument index="0" name="right" type="float" />
<description>
+ Multiplies each component of the [Vector3i] by the given [float] truncated to an integer.
+ [codeblock]
+ print(Vector3i(10, 20, 30) * 0.9) # Prints "(0, 0, 0)"
+ [/codeblock]
</description>
</operator>
<operator name="operator *">
<return type="Vector3i" />
<argument index="0" name="right" type="int" />
<description>
+ Multiplies each component of the [Vector3i] by the given [int].
</description>
</operator>
<operator name="operator +">
<return type="Vector3i" />
<argument index="0" name="right" type="Vector3i" />
<description>
+ Adds each component of the [Vector3i] by the components of the given [Vector3i].
+ [codeblock]
+ print(Vector3i(10, 20, 30) + Vector3i(3, 4, 5)) # Prints "(13, 24, 35)"
+ [/codeblock]
</description>
</operator>
<operator name="operator -">
<return type="Vector3i" />
<argument index="0" name="right" type="Vector3i" />
<description>
+ Subtracts each component of the [Vector3i] by the components of the given [Vector3i].
+ [codeblock]
+ print(Vector3i(10, 20, 30) - Vector3i(3, 4, 5)) # Prints "(7, 16, 25)"
+ [/codeblock]
</description>
</operator>
<operator name="operator /">
<return type="Vector3i" />
<argument index="0" name="right" type="Vector3i" />
<description>
+ Divides each component of the [Vector3i] by the components of the given [Vector3i].
+ [codeblock]
+ print(Vector3i(10, 20, 30) / Vector3i(2, 5, 3)) # Prints "(5, 4, 10)"
+ [/codeblock]
</description>
</operator>
<operator name="operator /">
<return type="Vector3i" />
<argument index="0" name="right" type="float" />
<description>
+ Divides each component of the [Vector3i] by the given [float] truncated to an integer.
+ [codeblock]
+ print(Vector3i(10, 20, 30) / 2.9) # Prints "(5, 10, 15)"
+ [/codeblock]
</description>
</operator>
<operator name="operator /">
<return type="Vector3i" />
<argument index="0" name="right" type="int" />
<description>
+ Divides each component of the [Vector3i] by the given [int].
</description>
</operator>
<operator name="operator &lt;">
<return type="bool" />
<argument index="0" name="right" type="Vector3i" />
<description>
+ Compares two [Vector3i] vectors by first checking if the X value of the left vector is less than the X value of the [code]right[/code] vector. If the X values are exactly equal, then it repeats this check with the Y values of the two vectors, and then with the Z values. This operator is useful for sorting vectors.
</description>
</operator>
<operator name="operator &lt;=">
<return type="bool" />
<argument index="0" name="right" type="Vector3i" />
<description>
+ Compares two [Vector3i] vectors by first checking if the X value of the left vector is less than or equal to the X value of the [code]right[/code] vector. If the X values are exactly equal, then it repeats this check with the Y values of the two vectors, and then with the Z values. This operator is useful for sorting vectors.
</description>
</operator>
<operator name="operator ==">
@@ -216,34 +253,40 @@
<return type="bool" />
<argument index="0" name="right" type="Vector3i" />
<description>
+ Returns [code]true[/code] if the vectors are equal.
</description>
</operator>
<operator name="operator &gt;">
<return type="bool" />
<argument index="0" name="right" type="Vector3i" />
<description>
+ Compares two [Vector3i] vectors by first checking if the X value of the left vector is greater than the X value of the [code]right[/code] vector. If the X values are exactly equal, then it repeats this check with the Y values of the two vectors, and then with the Z values. This operator is useful for sorting vectors.
</description>
</operator>
<operator name="operator &gt;=">
<return type="bool" />
<argument index="0" name="right" type="Vector3i" />
<description>
+ Compares two [Vector3i] vectors by first checking if the X value of the left vector is greater than or equal to the X value of the [code]right[/code] vector. If the X values are exactly equal, then it repeats this check with the Y values of the two vectors, and then with the Z values. This operator is useful for sorting vectors.
</description>
</operator>
<operator name="operator []">
<return type="int" />
<argument index="0" name="index" type="int" />
<description>
+ Access vector components using their index. [code]v[0][/code] is equivalent to [code]v.x[/code], [code]v[1][/code] is equivalent to [code]v.y[/code], and [code]v[2][/code] is equivalent to [code]v.z[/code].
</description>
</operator>
<operator name="operator unary+">
<return type="Vector3i" />
<description>
+ Returns the same value as if the [code]+[/code] was not there. Unary [code]+[/code] does nothing, but sometimes it can make your code more readable.
</description>
</operator>
<operator name="operator unary-">
<return type="Vector3i" />
<description>
+ Returns the negative value of the [Vector3i]. This is the same as writing [code]Vector3i(-v.x, -v.y, -v.z)[/code]. This operation flips the direction of the vector while keeping the same magnitude.
</description>
</operator>
</operators>
diff --git a/doc/classes/Viewport.xml b/doc/classes/Viewport.xml
index e79cf0d233..0418f29808 100644
--- a/doc/classes/Viewport.xml
+++ b/doc/classes/Viewport.xml
@@ -12,8 +12,8 @@
Finally, viewports can also behave as render targets, in which case they will not be visible unless the associated texture is used to draw.
</description>
<tutorials>
- <link title="Using Viewports">https://docs.godotengine.org/en/latest/tutorials/rendering/viewports.html</link>
- <link title="Viewport and canvas transforms">https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html</link>
+ <link title="Using Viewports">$DOCS_URL/tutorials/rendering/viewports.html</link>
+ <link title="Viewport and canvas transforms">$DOCS_URL/tutorials/2d/2d_transforms.html</link>
<link title="GUI in 3D Demo">https://godotengine.org/asset-library/asset/127</link>
<link title="3D in 2D Demo">https://godotengine.org/asset-library/asset/128</link>
<link title="2D in 3D Demo">https://godotengine.org/asset-library/asset/129</link>
@@ -107,6 +107,12 @@
Returns the drag data from the GUI, that was previously returned by [method Control._get_drag_data].
</description>
</method>
+ <method name="gui_is_drag_successful" qualifiers="const">
+ <return type="bool" />
+ <description>
+ Returns [code]true[/code] if the drag operation is successful.
+ </description>
+ </method>
<method name="gui_is_dragging" qualifiers="const">
<return type="bool" />
<description>
@@ -188,6 +194,14 @@
<member name="disable_3d" type="bool" setter="set_disable_3d" getter="is_3d_disabled" default="false">
Disable 3D rendering (but keep 2D rendering).
</member>
+ <member name="fsr_mipmap_bias" type="float" setter="set_fsr_mipmap_bias" getter="get_fsr_mipmap_bias" default="0.0">
+ Affects the final texture sharpness by reading from a lower or higher mipmap when using FSR. Mipmap bias does nothing when FSR is not being used. Negative values make textures sharper, while positive values make textures blurrier. This value is used to adjust the mipmap bias calculated internally which is based on the selected quality. The formula for this is [code]-log2(1.0 / scale) + mipmap_bias[/code]. This updates the rendering server's mipmap bias when called
+ To control this property on the root viewport, set the [member ProjectSettings.rendering/scaling_3d/fsr_mipmap_bias] project setting.
+ </member>
+ <member name="fsr_sharpness" type="float" setter="set_fsr_sharpness" getter="get_fsr_sharpness" default="0.2">
+ Determines how sharp the upscaled image will be when using the FSR upscaling mode. Sharpness halves with every whole number. Values go from 0.0 (sharpest) to 2.0. Values above 2.0 won't make a visible difference.
+ To control this property on the root viewport, set the [member ProjectSettings.rendering/scaling_3d/fsr_sharpness] project setting.
+ </member>
<member name="global_canvas_transform" type="Transform2D" setter="set_global_canvas_transform" getter="get_global_canvas_transform">
The global canvas transform of the viewport. The canvas transform is relative to this.
</member>
@@ -204,7 +218,7 @@
<member name="lod_threshold" type="float" setter="set_lod_threshold" getter="get_lod_threshold" default="1.0">
</member>
<member name="msaa" type="int" setter="set_msaa" getter="get_msaa" enum="Viewport.MSAA" default="0">
- The multisample anti-aliasing mode. A higher number results in smoother edges at the cost of significantly worse performance. A value of 2 or 4 is best unless targeting very high-end systems. See also [member scale_3d] for supersampling, which provides higher quality but is much more expensive.
+ The multisample anti-aliasing mode. A higher number results in smoother edges at the cost of significantly worse performance. A value of 2 or 4 is best unless targeting very high-end systems. See also bilinear scaling 3d [member scaling_3d_mode] for supersampling, which provides higher quality but is much more expensive.
</member>
<member name="own_world_3d" type="bool" setter="set_use_own_world_3d" getter="is_using_own_world_3d" default="false">
If [code]true[/code], the viewport will use the [World3D] defined in [member world_3d].
@@ -212,9 +226,14 @@
<member name="physics_object_picking" type="bool" setter="set_physics_object_picking" getter="get_physics_object_picking" default="false">
If [code]true[/code], the objects rendered by viewport become subjects of mouse picking process.
</member>
- <member name="scale_3d" type="float" setter="set_scale_3d" getter="get_scale_3d" default="1.0">
- Scales the 3D render buffer based on the viewport size and displays the result with linear filtering. Values lower than [code]1.0[/code] can be used to speed up 3D rendering at the cost of quality (undersampling). Values greater than [code]1.0[/code] can be used to improve 3D rendering quality at a high performance cost (supersampling). See also [member msaa] for multi-sample antialiasing, which is significantly cheaper but only smoothens the edges of polygons.
- To control this property on the root viewport, set the [member ProjectSettings.rendering/3d/viewport/scale] project setting.
+ <member name="scaling_3d_mode" type="int" setter="set_scaling_3d_mode" getter="get_scaling_3d_mode" enum="Viewport.Scaling3DMode" default="0">
+ Sets scaling 3d mode. Bilinear scaling renders at different resolution to either undersample or supersample the viewport. FidelityFX Super Resolution 1.0, abbreviated to FSR, is an upscaling technology that produces high quality images at fast framerates by using a spatially aware upscaling algorithm. FSR is slightly more expensive than bilinear, but it produces significantly higher image quality. FSR should be used where possible.
+ To control this property on the root viewport, set the [member ProjectSettings.rendering/scaling_3d/mode] project setting.
+ </member>
+ <member name="scaling_3d_scale" type="float" setter="set_scaling_3d_scale" getter="get_scaling_3d_scale" default="1.0">
+ Scales the 3D render buffer based on the viewport size uses an image filter specified in [member ProjectSettings.rendering/scaling_3d/mode] to scale the output image to the full viewport size. Values lower than [code]1.0[/code] can be used to speed up 3D rendering at the cost of quality (undersampling). Values greater than [code]1.0[/code] are only valid for bilinear mode and can be used to improve 3D rendering quality at a high performance cost (supersampling). See also [member ProjectSettings.rendering/anti_aliasing/quality/msaa] for multi-sample antialiasing, which is significantly cheaper but only smoothens the edges of polygons.
+ When using FSR upscaling, AMD recommends exposing the following values as preset options to users "Ultra Quality: 0.77", "Quality: 0.67", "Balanced: 0.59", "Performance: 0.5" instead of exposing the entire scale.
+ To control this property on the root viewport, set the [member ProjectSettings.rendering/scaling_3d/scale] project setting.
</member>
<member name="screen_space_aa" type="int" setter="set_screen_space_aa" getter="get_screen_space_aa" enum="Viewport.ScreenSpaceAA" default="0">
Sets the screen-space antialiasing method used. Screen-space antialiasing works by selectively blurring edges in a post-process shader. It differs from MSAA which takes multiple coverage samples while rendering objects. Screen-space AA methods are typically faster than MSAA and will smooth out specular aliasing, but tend to make scenes appear blurry.
@@ -300,6 +319,15 @@
<constant name="SHADOW_ATLAS_QUADRANT_SUBDIV_MAX" value="7" enum="ShadowAtlasQuadrantSubdiv">
Represents the size of the [enum ShadowAtlasQuadrantSubdiv] enum.
</constant>
+ <constant name="SCALING_3D_MODE_BILINEAR" value="0" enum="Scaling3DMode">
+ Enables bilinear scaling on 3D viewports. The amount of scaling can be set using [member scaling_3d_scale]. Values less then [code]1.0[/code] will result in undersampling while values greater than [code]1.0[/code] will result in supersampling. A value of [code]1.0[/code] disables scaling.
+ </constant>
+ <constant name="SCALING_3D_MODE_FSR" value="1" enum="Scaling3DMode">
+ Enables FSR upscaling on 3D viewports. The amount of scaling can be set using [member scaling_3d_scale]. Values less then [code]1.0[/code] will be result in the viewport being upscaled using FSR. Values greater than [code]1.0[/code] are not supported and bilinear supersampling will be used instead. A value of [code]1.0[/code] disables scaling.
+ </constant>
+ <constant name="SCALING_3D_MODE_MAX" value="2" enum="Scaling3DMode">
+ Represents the size of the [enum Scaling3DMode] enum.
+ </constant>
<constant name="MSAA_DISABLED" value="0" enum="MSAA">
Multisample antialiasing mode disabled. This is the default value, and is also the fastest setting.
</constant>
diff --git a/doc/classes/VisualShaderNode.xml b/doc/classes/VisualShaderNode.xml
index b752e94490..cebe7f215f 100644
--- a/doc/classes/VisualShaderNode.xml
+++ b/doc/classes/VisualShaderNode.xml
@@ -7,7 +7,7 @@
Visual shader graphs consist of various nodes. Each node in the graph is a separate object and they are represented as a rectangular boxes with title and a set of properties. Each node has also connection ports that allow to connect it to another nodes and control the flow of the shader.
</description>
<tutorials>
- <link title="VisualShaders">https://docs.godotengine.org/en/latest/tutorials/shaders/visual_shaders.html</link>
+ <link title="VisualShaders">$DOCS_URL/tutorials/shaders/visual_shaders.html</link>
</tutorials>
<methods>
<method name="clear_default_input_values">
diff --git a/doc/classes/VisualShaderNodeCustom.xml b/doc/classes/VisualShaderNodeCustom.xml
index b87b59c3e4..995f2796dd 100644
--- a/doc/classes/VisualShaderNodeCustom.xml
+++ b/doc/classes/VisualShaderNodeCustom.xml
@@ -13,7 +13,7 @@
[/codeblock]
</description>
<tutorials>
- <link title="Visual Shader plugins">https://docs.godotengine.org/en/latest/tutorials/plugins/editor/visual_shader_plugins.html</link>
+ <link title="Visual Shader plugins">$DOCS_URL/tutorials/plugins/editor/visual_shader_plugins.html</link>
</tutorials>
<methods>
<method name="_get_category" qualifiers="virtual const">
@@ -27,8 +27,8 @@
<return type="String" />
<argument index="0" name="input_vars" type="PackedStringArray" />
<argument index="1" name="output_vars" type="String[]" />
- <argument index="2" name="mode" type="int" />
- <argument index="3" name="type" type="int" />
+ <argument index="2" name="mode" type="int" enum="Shader.Mode" />
+ <argument index="3" name="type" type="int" enum="VisualShader.Type" />
<description>
Override this method to define the actual shader code of the associated custom node. The shader code should be returned as a string, which can have multiple lines (the [code]"""[/code] multiline string construct can be used for convenience).
The [code]input_vars[/code] and [code]output_vars[/code] arrays contain the string names of the various input and output variables, as defined by [code]_get_input_*[/code] and [code]_get_output_*[/code] virtual methods in this class.
@@ -46,7 +46,7 @@
</method>
<method name="_get_global_code" qualifiers="virtual const">
<return type="String" />
- <argument index="0" name="mode" type="int" />
+ <argument index="0" name="mode" type="int" enum="Shader.Mode" />
<description>
Override this method to add shader code on top of the global shader, to define your own standard library of reusable methods, varyings, constants, uniforms, etc. The shader code should be returned as a string, which can have multiple lines (the [code]"""[/code] multiline string construct can be used for convenience).
Be careful with this functionality as it can cause name conflicts with other custom nodes, so be sure to give the defined entities unique names.
diff --git a/doc/classes/VisualShaderNodeInput.xml b/doc/classes/VisualShaderNodeInput.xml
index 46d7dd6322..a7b501c6a0 100644
--- a/doc/classes/VisualShaderNodeInput.xml
+++ b/doc/classes/VisualShaderNodeInput.xml
@@ -7,7 +7,7 @@
Gives access to input variables (built-ins) available for the shader. See the shading reference for the list of available built-ins for each shader type (check [code]Tutorials[/code] section for link).
</description>
<tutorials>
- <link title="Shading reference index">https://docs.godotengine.org/en/latest/tutorials/shaders/shader_reference/index.html</link>
+ <link title="Shading reference index">$DOCS_URL/tutorials/shaders/shader_reference/index.html</link>
</tutorials>
<methods>
<method name="get_input_real_name" qualifiers="const">
diff --git a/doc/classes/VisualShaderNodeParticleEmitter.xml b/doc/classes/VisualShaderNodeParticleEmitter.xml
index 03ceb3adea..fa46b25fa9 100644
--- a/doc/classes/VisualShaderNodeParticleEmitter.xml
+++ b/doc/classes/VisualShaderNodeParticleEmitter.xml
@@ -1,9 +1,15 @@
<?xml version="1.0" encoding="UTF-8" ?>
<class name="VisualShaderNodeParticleEmitter" inherits="VisualShaderNode" version="4.0">
<brief_description>
+ A base class for particle emitters.
</brief_description>
<description>
</description>
<tutorials>
</tutorials>
+ <members>
+ <member name="mode_2d" type="bool" setter="set_mode_2d" getter="is_mode_2d" default="false">
+ If [code]true[/code], the result of this emitter is projected to 2D space. By default it is [code]false[/code] and meant for use in 3D space.
+ </member>
+ </members>
</class>
diff --git a/doc/classes/VisualShaderNodeParticleMeshEmitter.xml b/doc/classes/VisualShaderNodeParticleMeshEmitter.xml
new file mode 100644
index 0000000000..7abb330fd3
--- /dev/null
+++ b/doc/classes/VisualShaderNodeParticleMeshEmitter.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<class name="VisualShaderNodeParticleMeshEmitter" inherits="VisualShaderNodeParticleEmitter" version="4.0">
+ <brief_description>
+ </brief_description>
+ <description>
+ </description>
+ <tutorials>
+ </tutorials>
+ <members>
+ <member name="mesh" type="Mesh" setter="set_mesh" getter="get_mesh">
+ </member>
+ <member name="surface_index" type="int" setter="set_surface_index" getter="get_surface_index" default="0">
+ </member>
+ <member name="use_all_surfaces" type="bool" setter="set_use_all_surfaces" getter="is_use_all_surfaces" default="true">
+ </member>
+ </members>
+</class>
diff --git a/doc/classes/VoxelGI.xml b/doc/classes/VoxelGI.xml
index f6470782ee..2c3605aa1c 100644
--- a/doc/classes/VoxelGI.xml
+++ b/doc/classes/VoxelGI.xml
@@ -4,12 +4,13 @@
Real-time global illumination (GI) probe.
</brief_description>
<description>
- [VoxelGI]s are used to provide high-quality real-time indirect light to scenes. They precompute the effect of objects that emit light and the effect of static geometry to simulate the behavior of complex light in real-time. [VoxelGI]s need to be baked before using, however, once baked, dynamic objects will receive light from them. Further, lights can be fully dynamic or baked.
- Having [VoxelGI]s in a scene can be expensive, the quality of the probe can be turned down in exchange for better performance in the [ProjectSettings] using [member ProjectSettings.rendering/global_illumination/voxel_gi/quality].
- [b]Note:[/b] Meshes should have sufficiently thick walls to avoid light leaks (avoid one-sided walls). For interior levels, enclose your level geometry in a sufficiently large box and bridge the loops to close the mesh.
+ [VoxelGI]s are used to provide high-quality real-time indirect light and reflections to scenes. They precompute the effect of objects that emit light and the effect of static geometry to simulate the behavior of complex light in real-time. [VoxelGI]s need to be baked before having a visible effect. However, once baked, dynamic objects will receive light from them. Furthermore, lights can be fully dynamic or baked.
+ [b]Procedural generation:[/b] [VoxelGI] can be baked in an exported project, which makes it suitable for procedurally generated or user-built levels as long as all the geometry is generated in advance. For games where geometry is generated at any time during gameplay, SDFGI is more suitable (see [member Environment.sdfgi_enabled]).
+ [b]Performance:[/b] [VoxelGI] is relatively demanding on the GPU and is not suited to low-end hardware such as integrated graphics (consider [LightmapGI] instead). To improve performance, adjust [member ProjectSettings.rendering/global_illumination/voxel_gi/quality] and enable [member ProjectSettings.rendering/global_illumination/gi/use_half_resolution] in the Project Settings. To provide a fallback for low-end hardware, consider adding an option to disable [VoxelGI] in your project's options menus. A [VoxelGI] node can be disabled by hiding it.
+ [b]Note:[/b] Meshes should have sufficiently thick walls to avoid light leaks (avoid one-sided walls). For interior levels, enclose your level geometry in a sufficiently large box and bridge the loops to close the mesh. To further prevent light leaks, you can also strategically place temporary [MeshInstance3D] nodes with their [member GeometryInstance3D.gi_mode] set to [constant GeometryInstance3D.GI_MODE_BAKED]. These temporary nodes can then be hidden after baking the [VoxelGI] node.
</description>
<tutorials>
- <link title="GI probes">https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html</link>
+ <link title="GI probes">$DOCS_URL/tutorials/3d/gi_probes.html</link>
<link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link>
</tutorials>
<methods>
@@ -19,6 +20,7 @@
<argument index="1" name="create_visual_debug" type="bool" default="false" />
<description>
Bakes the effect from all [GeometryInstance3D]s marked with [constant GeometryInstance3D.GI_MODE_BAKED] and [Light3D]s marked with either [constant Light3D.BAKE_DYNAMIC] or [constant Light3D.BAKE_STATIC]. If [code]create_visual_debug[/code] is [code]true[/code], after baking the light, this will generate a [MultiMesh] that has a cube representing each solid cell with each cube colored to the cell's albedo color. This can be used to visualize the [VoxelGI]'s data and debug any issues that may be occurring.
+ [b]Note:[/b] [method bake] works from the editor and in exported projects. This makes it suitable for procedurally generated or user-built levels. Baking a [VoxelGI] node generally takes from 5 to 20 seconds in most scenes. Reducing [member subdiv] can speed up baking.
</description>
</method>
<method name="debug_bake">
@@ -50,7 +52,7 @@
Use 256 subdivisions.
</constant>
<constant name="SUBDIV_512" value="3" enum="Subdiv">
- Use 512 subdivisions. This is the highest quality setting, but the slowest. On lower-end hardware this could cause the GPU to stall.
+ Use 512 subdivisions. This is the highest quality setting, but the slowest. On lower-end hardware, this could cause the GPU to stall.
</constant>
<constant name="SUBDIV_MAX" value="4" enum="Subdiv">
Represents the size of the [enum Subdiv] enum.
diff --git a/doc/classes/Window.xml b/doc/classes/Window.xml
index 0653c8b453..3fee1feae8 100644
--- a/doc/classes/Window.xml
+++ b/doc/classes/Window.xml
@@ -230,6 +230,12 @@
<description>
</description>
</method>
+ <method name="reset_size">
+ <return type="void" />
+ <description>
+ Resets the size to the minimum size, which is the max of [member min_size] and (if [member wrap_controls] is enabled) [method get_contents_minimum_size]. This is equivalent to calling [code]set_size(Vector2i())[/code] (or any size below the minimum).
+ </description>
+ </method>
<method name="set_flag">
<return type="void" />
<argument index="0" name="flag" type="int" enum="Window.Flags" />
@@ -384,7 +390,7 @@
</constant>
<constant name="MODE_FULLSCREEN" value="3" enum="Mode">
Fullscreen window mode. Note that this is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless window is used to emulate fullscreen. On macOS, a new desktop is used to display the running project.
- Regardless of the platform, enabling fullscreen will change the window size to match the monitor's size. Therefore, make sure your project supports [url=https://docs.godotengine.org/en/latest/tutorials/rendering/multiple_resolutions.html]multiple resolutions[/url] when enabling fullscreen mode.
+ Regardless of the platform, enabling fullscreen will change the window size to match the monitor's size. Therefore, make sure your project supports [url=$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple resolutions[/url] when enabling fullscreen mode.
</constant>
<constant name="FLAG_RESIZE_DISABLED" value="0" enum="Flags">
The window's ability to be resized.
diff --git a/doc/classes/World2D.xml b/doc/classes/World2D.xml
index a6a4701dd4..47ab4b3612 100644
--- a/doc/classes/World2D.xml
+++ b/doc/classes/World2D.xml
@@ -7,7 +7,7 @@
Class that has everything pertaining to a 2D world. A physics space, a visual scenario and a sound space. 2D nodes register their resources into the current 2D world.
</description>
<tutorials>
- <link title="Ray-casting">https://docs.godotengine.org/en/latest/tutorials/physics/ray-casting.html</link>
+ <link title="Ray-casting">$DOCS_URL/tutorials/physics/ray-casting.html</link>
</tutorials>
<members>
<member name="canvas" type="RID" setter="" getter="get_canvas">
diff --git a/doc/classes/World3D.xml b/doc/classes/World3D.xml
index 136ca2c598..fd2f96985c 100644
--- a/doc/classes/World3D.xml
+++ b/doc/classes/World3D.xml
@@ -7,7 +7,7 @@
Class that has everything pertaining to a world. A physics space, a visual scenario and a sound space. Node3D nodes register their resources into the current world.
</description>
<tutorials>
- <link title="Ray-casting">https://docs.godotengine.org/en/latest/tutorials/physics/ray-casting.html</link>
+ <link title="Ray-casting">$DOCS_URL/tutorials/physics/ray-casting.html</link>
</tutorials>
<members>
<member name="camera_effects" type="CameraEffects" setter="set_camera_effects" getter="get_camera_effects">
diff --git a/doc/classes/WorldEnvironment.xml b/doc/classes/WorldEnvironment.xml
index bd25a74c5b..793479e074 100644
--- a/doc/classes/WorldEnvironment.xml
+++ b/doc/classes/WorldEnvironment.xml
@@ -9,7 +9,7 @@
The [WorldEnvironment] allows the user to specify default lighting parameters (e.g. ambient lighting), various post-processing effects (e.g. SSAO, DOF, Tonemapping), and how to draw the background (e.g. solid color, skybox). Usually, these are added in order to improve the realism/color balance of the scene.
</description>
<tutorials>
- <link title="Environment and post-processing">https://docs.godotengine.org/en/latest/tutorials/3d/environment_and_post_processing.html</link>
+ <link title="Environment and post-processing">$DOCS_URL/tutorials/3d/environment_and_post_processing.html</link>
<link title="3D Material Testers Demo">https://godotengine.org/asset-library/asset/123</link>
<link title="2D HDR Demo">https://godotengine.org/asset-library/asset/110</link>
<link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link>
diff --git a/doc/classes/XRCamera3D.xml b/doc/classes/XRCamera3D.xml
index 31f05ca06c..ca81f5b169 100644
--- a/doc/classes/XRCamera3D.xml
+++ b/doc/classes/XRCamera3D.xml
@@ -8,6 +8,6 @@
The position and orientation of this node is automatically updated by the XR Server to represent the location of the HMD if such tracking is available and can thus be used by game logic. Note that, in contrast to the XR Controller, the render thread has access to the most up-to-date tracking data of the HMD and the location of the XRCamera3D can lag a few milliseconds behind what is used for rendering as a result.
</description>
<tutorials>
- <link title="VR documentation index">https://docs.godotengine.org/en/latest/tutorials/vr/index.html</link>
+ <link title="VR documentation index">$DOCS_URL/tutorials/vr/index.html</link>
</tutorials>
</class>
diff --git a/doc/classes/XRController3D.xml b/doc/classes/XRController3D.xml
index eb91196e00..0e2785f246 100644
--- a/doc/classes/XRController3D.xml
+++ b/doc/classes/XRController3D.xml
@@ -10,7 +10,7 @@
As many XR runtimes now use a configurable action map all inputs are named.
</description>
<tutorials>
- <link title="VR documentation index">https://docs.godotengine.org/en/latest/tutorials/vr/index.html</link>
+ <link title="VR documentation index">$DOCS_URL/tutorials/vr/index.html</link>
</tutorials>
<methods>
<method name="get_axis" qualifiers="const">
diff --git a/doc/classes/XRInterface.xml b/doc/classes/XRInterface.xml
index 7ae70f97a2..3b03447ed1 100644
--- a/doc/classes/XRInterface.xml
+++ b/doc/classes/XRInterface.xml
@@ -8,7 +8,7 @@
Interfaces should be written in such a way that simply enabling them will give us a working setup. You can query the available interfaces through [XRServer].
</description>
<tutorials>
- <link title="VR documentation index">https://docs.godotengine.org/en/latest/tutorials/vr/index.html</link>
+ <link title="VR documentation index">$DOCS_URL/tutorials/vr/index.html</link>
</tutorials>
<methods>
<method name="get_camera_feed_id">
diff --git a/doc/classes/XROrigin3D.xml b/doc/classes/XROrigin3D.xml
index 0d8acfeb1b..fc15102976 100644
--- a/doc/classes/XROrigin3D.xml
+++ b/doc/classes/XROrigin3D.xml
@@ -10,7 +10,7 @@
For example, if your character is driving a car, the XROrigin3D node should be a child node of this car. Or, if you're implementing a teleport system to move your character, you should change the position of this node.
</description>
<tutorials>
- <link title="VR documentation index">https://docs.godotengine.org/en/latest/tutorials/vr/index.html</link>
+ <link title="VR documentation index">$DOCS_URL/tutorials/vr/index.html</link>
</tutorials>
<members>
<member name="world_scale" type="float" setter="set_world_scale" getter="get_world_scale" default="1.0">
diff --git a/doc/classes/XRPositionalTracker.xml b/doc/classes/XRPositionalTracker.xml
index bd6a518835..439bcfc382 100644
--- a/doc/classes/XRPositionalTracker.xml
+++ b/doc/classes/XRPositionalTracker.xml
@@ -9,7 +9,7 @@
The [XRController3D] and [XRAnchor3D] both consume objects of this type and should be used in your project. The positional trackers are just under-the-hood objects that make this all work. These are mostly exposed so that GDExtension-based interfaces can interact with them.
</description>
<tutorials>
- <link title="VR documentation index">https://docs.godotengine.org/en/latest/tutorials/vr/index.html</link>
+ <link title="VR documentation index">$DOCS_URL/tutorials/vr/index.html</link>
</tutorials>
<methods>
<method name="get_input" qualifiers="const">
diff --git a/doc/classes/XRServer.xml b/doc/classes/XRServer.xml
index 87164ebb52..3a7fdea8d0 100644
--- a/doc/classes/XRServer.xml
+++ b/doc/classes/XRServer.xml
@@ -7,7 +7,7 @@
The AR/VR server is the heart of our Advanced and Virtual Reality solution and handles all the processing.
</description>
<tutorials>
- <link title="VR documentation index">https://docs.godotengine.org/en/latest/tutorials/vr/index.html</link>
+ <link title="VR documentation index">$DOCS_URL/tutorials/vr/index.html</link>
</tutorials>
<methods>
<method name="add_interface">
diff --git a/doc/classes/float.xml b/doc/classes/float.xml
index 8231173bac..c96360e6ba 100644
--- a/doc/classes/float.xml
+++ b/doc/classes/float.xml
@@ -72,7 +72,7 @@
<return type="Quaternion" />
<argument index="0" name="right" type="Quaternion" />
<description>
- Multiplies each component of the [Quaternion] by the given [float].
+ Multiplies each component of the [Quaternion] by the given [float]. This operation is not meaningful on its own, but it can be used as a part of a larger expression.
</description>
</operator>
<operator name="operator *">
@@ -81,7 +81,7 @@
<description>
Multiplies each component of the [Vector2] by the given [float].
[codeblock]
- print(2.5 * Vector2(1, 1)) # Vector2(2.5, 2.5)
+ print(2.5 * Vector2(1, 3)) # Prints "(2.5, 7.5)"
[/codeblock]
</description>
</operator>
@@ -89,9 +89,9 @@
<return type="Vector2i" />
<argument index="0" name="right" type="Vector2i" />
<description>
- Multiplies each component of the [Vector2i] by the given [float].
+ Multiplies each component of the [Vector2i] by the given [float] truncated to an integer.
[codeblock]
- print(2.0 * Vector2i(1, 1)) # Vector2i(2.0, 2.0)
+ print(0.9 * Vector2i(10, 20)) # Prints "(0, 0)"
[/codeblock]
</description>
</operator>
@@ -106,7 +106,10 @@
<return type="Vector3i" />
<argument index="0" name="right" type="Vector3i" />
<description>
- Multiplies each component of the [Vector3i] by the given [float].
+ Multiplies each component of the [Vector3i] by the given [float] truncated to an integer.
+ [codeblock]
+ print(0.9 * Vector3i(10, 20, 30)) # Prints "(0, 0, 0)"
+ [/codeblock]
</description>
</operator>
<operator name="operator *">
diff --git a/doc/classes/int.xml b/doc/classes/int.xml
index 94c2601e4a..bb36d83741 100644
--- a/doc/classes/int.xml
+++ b/doc/classes/int.xml
@@ -91,11 +91,11 @@
<return type="int" />
<argument index="0" name="right" type="int" />
<description>
- Returns the result of the modulo operator for two integers, i.e. the remainder after dividing both numbers.
+ Returns the remainder after dividing two integers. This operation uses truncated division, which is often not desired as it does not work well with negative numbers. Consider using [method @GlobalScope.posmod] instead if you want to handle negative numbers.
[codeblock]
print(5 % 2) # 1
print(12 % 4) # 0
- print(12 % 2) # 2
+ print(-5 % 3) # -2
[/codeblock]
</description>
</operator>
@@ -121,12 +121,14 @@
<return type="Color" />
<argument index="0" name="right" type="Color" />
<description>
+ Multiplies each component of the [Color] by the given [int].
</description>
</operator>
<operator name="operator *">
<return type="Quaternion" />
<argument index="0" name="right" type="Quaternion" />
<description>
+ Multiplies each component of the [Quaternion] by the given [int]. This operation is not meaningful on its own, but it can be used as a part of a larger expression.
</description>
</operator>
<operator name="operator *">
diff --git a/doc/tools/make_rst.py b/doc/tools/make_rst.py
index ad9e5f4897..b5e5cf8fa7 100755
--- a/doc/tools/make_rst.py
+++ b/doc/tools/make_rst.py
@@ -11,10 +11,8 @@ from collections import OrderedDict
# Uncomment to do type checks. I have it commented out so it works below Python 3.5
# from typing import List, Dict, TextIO, Tuple, Iterable, Optional, DefaultDict, Any, Union
-# http(s)://docs.godotengine.org/<langcode>/<tag>/path/to/page.html(#fragment-tag)
-GODOT_DOCS_PATTERN = re.compile(
- r"^http(?:s)?://docs\.godotengine\.org/(?:[a-zA-Z0-9.\-_]*)/(?:[a-zA-Z0-9.\-_]*)/(.*)\.html(#.*)?$"
-)
+# $DOCS_URL/path/to/page.html(#fragment-tag)
+GODOT_DOCS_PATTERN = re.compile(r"^\$DOCS_URL/(.*)\.html(#.*)?$")
def print_error(error, state): # type: (str, State) -> None
@@ -108,7 +106,9 @@ class ClassDef:
self.constants = OrderedDict() # type: OrderedDict[str, ConstantDef]
self.enums = OrderedDict() # type: OrderedDict[str, EnumDef]
self.properties = OrderedDict() # type: OrderedDict[str, PropertyDef]
+ self.constructors = OrderedDict() # type: OrderedDict[str, List[MethodDef]]
self.methods = OrderedDict() # type: OrderedDict[str, List[MethodDef]]
+ self.operators = OrderedDict() # type: OrderedDict[str, List[MethodDef]]
self.signals = OrderedDict() # type: OrderedDict[str, SignalDef]
self.theme_items = OrderedDict() # type: OrderedDict[str, ThemeItemDef]
self.inherits = None # type: Optional[str]
@@ -169,6 +169,34 @@ class State:
)
class_def.properties[property_name] = property_def
+ constructors = class_root.find("constructors")
+ if constructors is not None:
+ for constructor in constructors:
+ assert constructor.tag == "constructor"
+
+ method_name = constructor.attrib["name"]
+ qualifiers = constructor.get("qualifiers")
+
+ return_element = constructor.find("return")
+ if return_element is not None:
+ return_type = TypeName.from_element(return_element)
+
+ else:
+ return_type = TypeName("void")
+
+ params = parse_arguments(constructor)
+
+ desc_element = constructor.find("description")
+ method_desc = None
+ if desc_element is not None:
+ method_desc = desc_element.text
+
+ method_def = MethodDef(method_name, return_type, params, method_desc, qualifiers)
+ if method_name not in class_def.constructors:
+ class_def.constructors[method_name] = []
+
+ class_def.constructors[method_name].append(method_def)
+
methods = class_root.find("methods")
if methods is not None:
for method in methods:
@@ -197,6 +225,34 @@ class State:
class_def.methods[method_name].append(method_def)
+ operators = class_root.find("operators")
+ if operators is not None:
+ for operator in operators:
+ assert operator.tag == "operator"
+
+ method_name = operator.attrib["name"]
+ qualifiers = operator.get("qualifiers")
+
+ return_element = operator.find("return")
+ if return_element is not None:
+ return_type = TypeName.from_element(return_element)
+
+ else:
+ return_type = TypeName("void")
+
+ params = parse_arguments(operator)
+
+ desc_element = operator.find("description")
+ method_desc = None
+ if desc_element is not None:
+ method_desc = desc_element.text
+
+ method_def = MethodDef(method_name, return_type, params, method_desc, qualifiers)
+ if method_name not in class_def.operators:
+ class_def.operators[method_name] = []
+
+ class_def.operators[method_name].append(method_def)
+
constants = class_root.find("constants")
if constants is not None:
for constant in constants:
@@ -272,7 +328,7 @@ class State:
theme_item.text,
default_value,
)
- class_def.theme_items[theme_item_id] = theme_item_def
+ class_def.theme_items[theme_item_name] = theme_item_def
tutorials = class_root.find("tutorials")
if tutorials is not None:
@@ -471,13 +527,29 @@ def make_rst_class(class_def, state, dry_run, output_dir): # type: (ClassDef, S
ml.append((type_rst, ref, default))
format_table(f, ml, True)
- # Methods overview
+ # Constructors, Methods, Operators overview
+ if len(class_def.constructors) > 0:
+ f.write(make_heading("Constructors", "-"))
+ ml = []
+ for method_list in class_def.constructors.values():
+ for m in method_list:
+ ml.append(make_method_signature(class_def, m, "constructor", state))
+ format_table(f, ml)
+
if len(class_def.methods) > 0:
f.write(make_heading("Methods", "-"))
ml = []
for method_list in class_def.methods.values():
for m in method_list:
- ml.append(make_method_signature(class_def, m, True, state))
+ ml.append(make_method_signature(class_def, m, "method", state))
+ format_table(f, ml)
+
+ if len(class_def.operators) > 0:
+ f.write(make_heading("Operators", "-"))
+ ml = []
+ for method_list in class_def.operators.values():
+ for m in method_list:
+ ml.append(make_method_signature(class_def, m, "operator", state))
format_table(f, ml)
# Theme properties
@@ -501,7 +573,7 @@ def make_rst_class(class_def, state, dry_run, output_dir): # type: (ClassDef, S
f.write("----\n\n")
f.write(".. _class_{}_signal_{}:\n\n".format(class_name, signal.name))
- _, signature = make_method_signature(class_def, signal, False, state)
+ _, signature = make_method_signature(class_def, signal, "", state)
f.write("- {}\n\n".format(signature))
if signal.description is not None and signal.description.strip() != "":
@@ -582,7 +654,27 @@ def make_rst_class(class_def, state, dry_run, output_dir): # type: (ClassDef, S
index += 1
- # Method descriptions
+ # Constructor, Method, Operator descriptions
+ if len(class_def.constructors) > 0:
+ f.write(make_heading("Constructor Descriptions", "-"))
+ index = 0
+
+ for method_list in class_def.constructors.values():
+ for i, m in enumerate(method_list):
+ if index != 0:
+ f.write("----\n\n")
+
+ if i == 0:
+ f.write(".. _class_{}_constructor_{}:\n\n".format(class_name, m.name))
+
+ ret_type, signature = make_method_signature(class_def, m, "", state)
+ f.write("- {} {}\n\n".format(ret_type, signature))
+
+ if m.description is not None and m.description.strip() != "":
+ f.write(rstize_text(m.description.strip(), state) + "\n\n")
+
+ index += 1
+
if len(class_def.methods) > 0:
f.write(make_heading("Method Descriptions", "-"))
index = 0
@@ -595,7 +687,31 @@ def make_rst_class(class_def, state, dry_run, output_dir): # type: (ClassDef, S
if i == 0:
f.write(".. _class_{}_method_{}:\n\n".format(class_name, m.name))
- ret_type, signature = make_method_signature(class_def, m, False, state)
+ ret_type, signature = make_method_signature(class_def, m, "", state)
+ f.write("- {} {}\n\n".format(ret_type, signature))
+
+ if m.description is not None and m.description.strip() != "":
+ f.write(rstize_text(m.description.strip(), state) + "\n\n")
+
+ index += 1
+
+ if len(class_def.operators) > 0:
+ f.write(make_heading("Operator Descriptions", "-"))
+ index = 0
+
+ for method_list in class_def.operators.values():
+ for i, m in enumerate(method_list):
+ if index != 0:
+ f.write("----\n\n")
+
+ if i == 0:
+ f.write(
+ ".. _class_{}_operator_{}_{}:\n\n".format(
+ class_name, sanitize_operator_name(m.name, state), m.return_type.type_name
+ )
+ )
+
+ ret_type, signature = make_method_signature(class_def, m, "", state)
f.write("- {} {}\n\n".format(ret_type, signature))
if m.description is not None and m.description.strip() != "":
@@ -739,16 +855,11 @@ def rstize_text(text, state): # type: (str, State) -> str
# Handle [tags]
inside_code = False
- inside_url = False
- url_has_name = False
- url_link = ""
pos = 0
tag_depth = 0
previous_pos = 0
while True:
pos = text.find("[", pos)
- if inside_url and (pos > previous_pos):
- url_has_name = True
if pos == -1:
break
@@ -794,6 +905,7 @@ def rstize_text(text, state): # type: (str, State) -> str
or cmd.startswith("member")
or cmd.startswith("signal")
or cmd.startswith("constant")
+ or cmd.startswith("theme_item")
):
param = tag_text[space_pos + 1 :]
@@ -810,16 +922,33 @@ def rstize_text(text, state): # type: (str, State) -> str
ref_type = ""
if class_param in state.classes:
class_def = state.classes[class_param]
+ if cmd.startswith("constructor"):
+ if method_param not in class_def.constructors:
+ print_error(
+ "Unresolved constructor '{}', file: {}".format(param, state.current_class), state
+ )
+ ref_type = "_constructor"
if cmd.startswith("method"):
if method_param not in class_def.methods:
print_error("Unresolved method '{}', file: {}".format(param, state.current_class), state)
ref_type = "_method"
+ if cmd.startswith("operator"):
+ if method_param not in class_def.operators:
+ print_error("Unresolved operator '{}', file: {}".format(param, state.current_class), state)
+ ref_type = "_operator"
elif cmd.startswith("member"):
if method_param not in class_def.properties:
print_error("Unresolved member '{}', file: {}".format(param, state.current_class), state)
ref_type = "_property"
+ elif cmd.startswith("theme_item"):
+ if method_param not in class_def.theme_items:
+ print_error(
+ "Unresolved theme item '{}', file: {}".format(param, state.current_class), state
+ )
+ ref_type = "_theme_{}".format(class_def.theme_items[method_param].data_name)
+
elif cmd.startswith("signal"):
if method_param not in class_def.signals:
print_error("Unresolved signal '{}', file: {}".format(param, state.current_class), state)
@@ -867,17 +996,23 @@ def rstize_text(text, state): # type: (str, State) -> str
elif cmd.find("image=") == 0:
tag_text = "" # '![](' + cmd[6:] + ')'
elif cmd.find("url=") == 0:
- url_link = cmd[4:]
- tag_text = "`"
- tag_depth += 1
- inside_url = True
- url_has_name = False
- elif cmd == "/url":
- tag_text = ("" if url_has_name else url_link) + " <" + url_link + ">`__"
- tag_depth -= 1
- escape_post = True
- inside_url = False
- url_has_name = False
+ # URLs are handled in full here as we need to extract the optional link
+ # title to use `make_link`.
+ link_url = cmd[4:]
+ endurl_pos = text.find("[/url]", endq_pos + 1)
+ if endurl_pos == -1:
+ print_error(
+ "Tag depth mismatch for [url]: no closing [/url], file: {}".format(state.current_class), state
+ )
+ break
+ link_title = text[endq_pos + 1 : endurl_pos]
+ tag_text = make_link(link_url, link_title)
+
+ pre_text = text[:pos]
+ text = pre_text + tag_text + text[endurl_pos + 6 :]
+ pos = len(pre_text) + len(tag_text)
+ previous_pos = pos
+ continue
elif cmd == "center":
tag_depth += 1
tag_text = ""
@@ -1046,24 +1181,26 @@ def make_enum(t, state): # type: (str, State) -> str
def make_method_signature(
- class_def, method_def, make_ref, state
-): # type: (ClassDef, Union[MethodDef, SignalDef], bool, State) -> Tuple[str, str]
+ class_def, method_def, ref_type, state
+): # type: (ClassDef, Union[MethodDef, SignalDef], str, State) -> Tuple[str, str]
ret_type = " "
- ref_type = "signal"
if isinstance(method_def, MethodDef):
ret_type = method_def.return_type.to_rst(state)
- ref_type = "method"
-
- # FIXME: Need to add proper support for operator methods, but generating a unique
- # and valid ref for them is not trivial.
- if method_def.name.startswith("operator "):
- make_ref = False
out = ""
- if make_ref:
- out += ":ref:`{0}<class_{1}_{2}_{0}>` ".format(method_def.name, class_def.name, ref_type)
+ if ref_type != "":
+ if ref_type == "operator":
+ out += ":ref:`{0}<class_{1}_{2}_{3}_{4}>` ".format(
+ method_def.name,
+ class_def.name,
+ ref_type,
+ sanitize_operator_name(method_def.name, state),
+ method_def.return_type.type_name,
+ )
+ else:
+ out += ":ref:`{0}<class_{1}_{2}_{0}>` ".format(method_def.name, class_def.name, ref_type)
else:
out += "**{}** ".format(method_def.name)
@@ -1122,21 +1259,78 @@ def make_link(url, title): # type: (str, str) -> str
if match.lastindex == 2:
# Doc reference with fragment identifier: emit direct link to section with reference to page, for example:
# `#calling-javascript-from-script in Exporting For Web`
- return "`" + groups[1] + " <../" + groups[0] + ".html" + groups[1] + ">`_ in :doc:`../" + groups[0] + "`"
- # Commented out alternative: Instead just emit:
- # `Subsection in Exporting For Web`
- # return "`Subsection <../" + groups[0] + ".html" + groups[1] + ">`__ in :doc:`../" + groups[0] + "`"
+ # Or use the title if provided.
+ if title != "":
+ return "`" + title + " <../" + groups[0] + ".html" + groups[1] + ">`__"
+ return "`" + groups[1] + " <../" + groups[0] + ".html" + groups[1] + ">`__ in :doc:`../" + groups[0] + "`"
elif match.lastindex == 1:
# Doc reference, for example:
# `Math`
+ if title != "":
+ return ":doc:`" + title + " <../" + groups[0] + ">`"
return ":doc:`../" + groups[0] + "`"
else:
# External link, for example:
# `http://enet.bespin.org/usergroup0.html`
if title != "":
return "`" + title + " <" + url + ">`__"
- else:
- return "`" + url + " <" + url + ">`__"
+ return "`" + url + " <" + url + ">`__"
+
+
+def sanitize_operator_name(dirty_name, state): # type: (str, State) -> str
+ clear_name = dirty_name.replace("operator ", "")
+
+ if clear_name == "!=":
+ clear_name = "neq"
+ elif clear_name == "==":
+ clear_name = "eq"
+
+ elif clear_name == "<":
+ clear_name = "lt"
+ elif clear_name == "<=":
+ clear_name = "lte"
+ elif clear_name == ">":
+ clear_name = "gt"
+ elif clear_name == ">=":
+ clear_name = "gte"
+
+ elif clear_name == "+":
+ clear_name = "sum"
+ elif clear_name == "-":
+ clear_name = "dif"
+ elif clear_name == "*":
+ clear_name = "mul"
+ elif clear_name == "/":
+ clear_name = "div"
+ elif clear_name == "%":
+ clear_name = "mod"
+
+ elif clear_name == "unary+":
+ clear_name = "unplus"
+ elif clear_name == "unary-":
+ clear_name = "unminus"
+
+ elif clear_name == "<<":
+ clear_name = "bwsl"
+ elif clear_name == ">>":
+ clear_name = "bwsr"
+ elif clear_name == "&":
+ clear_name = "bwand"
+ elif clear_name == "|":
+ clear_name = "bwor"
+ elif clear_name == "^":
+ clear_name = "bwxor"
+ elif clear_name == "~":
+ clear_name = "bwnot"
+
+ elif clear_name == "[]":
+ clear_name = "idx"
+
+ else:
+ clear_name = "xxx"
+ print_error("Unsupported operator type '{}', please add the missing rule.".format(dirty_name), state)
+
+ return clear_name
if __name__ == "__main__":
diff --git a/doc/translations/ar.po b/doc/translations/ar.po
index fdf08d3d61..c6dd82902f 100644
--- a/doc/translations/ar.po
+++ b/doc/translations/ar.po
@@ -11,12 +11,14 @@
# Kareem Abduljaleel <karemjaleel34@gmail.com>, 2021.
# Deleted User <noreply+32227@weblate.org>, 2021.
# xX-Void-Xx <arandomdude75@gmail.com>, 2021.
+# Alaa alden Aldroubi <alaa.aldroubi@gmail.com>, 2021.
+# يزن حمزه <yznhamzeh@gmail.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2021-07-22 15:34+0000\n"
-"Last-Translator: xX-Void-Xx <arandomdude75@gmail.com>\n"
+"PO-Revision-Date: 2021-10-31 13:40+0000\n"
+"Last-Translator: يزن حمزه <yznhamzeh@gmail.com>\n"
"Language-Team: Arabic <https://hosted.weblate.org/projects/godot-engine/"
"godot-class-reference/ar/>\n"
"Language: ar\n"
@@ -25,45 +27,45 @@ msgstr ""
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n"
-"X-Generator: Weblate 4.7.2-dev\n"
+"X-Generator: Weblate 4.9-dev\n"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Description"
msgstr "الوصÙ"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Tutorials"
msgstr "دورات تعليمية"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Properties"
msgstr "خاصيات"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Methods"
msgstr "Ø§Ù„Ø·ÙØ±Ù‚"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Theme Properties"
msgstr "خصائص الثÙمة"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Signals"
msgstr "الإشارات"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Enumerations"
msgstr "التعدادات"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Constants"
msgstr "الثوابت"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Property Descriptions"
msgstr "أوصا٠المÙلكية"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Method Descriptions"
msgstr "أوصا٠الدوال"
@@ -117,11 +119,10 @@ msgstr ""
"Ùˆ1.\n"
"[codeblock]\n"
"(red = ColorN(\"red\", 1\n"
-"[/codeblock]\n"
+"[codeblock/]\n"
"أسماء الألوان المدعومة هي Ù†ÙØ³ الثوابت Ø§Ù„Ù…Ø¹Ø±Ù‘ÙØ© ÙÙŠ [Color]."
#: modules/gdscript/doc_classes/@GDScript.xml:45
-#, fuzzy
msgid ""
"Returns the absolute value of parameter [code]s[/code] (i.e. positive "
"value).\n"
@@ -3673,112 +3674,121 @@ msgid ""
msgstr ""
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr ""
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
msgstr ""
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
msgstr ""
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
msgstr ""
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr ""
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr ""
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr ""
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
msgstr ""
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr ""
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
msgstr ""
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
msgstr ""
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr ""
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
"positive.\n"
@@ -4857,7 +4867,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -6293,21 +6303,25 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
#: doc/classes/Area.xml:17
msgid ""
-"Returns a list of intersecting [Area]s. For performance reasons (collisions "
-"are all processed at the same time) this list is modified once during the "
-"physics step, not immediately after objects are moved. Consider using "
-"signals instead."
+"Returns a list of intersecting [Area]s. The overlapping area's [member "
+"CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:23
+#: doc/classes/Area.xml:24
msgid ""
-"Returns a list of intersecting [PhysicsBody]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody]s. The overlapping body's "
+"[member CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:30
+#: doc/classes/Area.xml:32
msgid ""
"If [code]true[/code], the given area overlaps the Area.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6315,7 +6329,7 @@ msgid ""
"physics step. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:38
+#: doc/classes/Area.xml:40
msgid ""
"If [code]true[/code], the given physics body overlaps the Area.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6326,7 +6340,7 @@ msgid ""
"their tiles with collision shapes as a virtual physics body)."
msgstr ""
-#: doc/classes/Area.xml:46
+#: doc/classes/Area.xml:48
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
"velocity lost per second.\n"
@@ -6334,41 +6348,41 @@ msgid ""
"details about damping."
msgstr ""
-#: doc/classes/Area.xml:50 doc/classes/Area2D.xml:52
+#: doc/classes/Area.xml:52 doc/classes/Area2D.xml:54
msgid "The name of the area's audio bus."
msgstr ""
-#: doc/classes/Area.xml:53 doc/classes/Area2D.xml:55
+#: doc/classes/Area.xml:55 doc/classes/Area2D.xml:57
msgid ""
"If [code]true[/code], the area's audio bus overrides the default audio bus."
msgstr ""
-#: doc/classes/Area.xml:56
+#: doc/classes/Area.xml:58
msgid ""
"The area's gravity intensity (in meters per second squared). This value "
"multiplies the gravity vector. This is useful to alter the force of gravity "
"without altering its direction."
msgstr ""
-#: doc/classes/Area.xml:59 doc/classes/Area2D.xml:61
+#: doc/classes/Area.xml:61 doc/classes/Area2D.xml:63
msgid ""
"The falloff factor for point gravity. The greater the value, the faster "
"gravity decreases with distance."
msgstr ""
-#: doc/classes/Area.xml:62 doc/classes/Area2D.xml:64
+#: doc/classes/Area.xml:64 doc/classes/Area2D.xml:66
msgid ""
"If [code]true[/code], gravity is calculated from a point (set via [member "
"gravity_vec]). See also [member space_override]."
msgstr ""
-#: doc/classes/Area.xml:65 doc/classes/Area2D.xml:67
+#: doc/classes/Area.xml:67 doc/classes/Area2D.xml:69
msgid ""
"The area's gravity vector (not normalized). If gravity is a point (see "
"[member gravity_point]), this will be the point of attraction."
msgstr ""
-#: doc/classes/Area.xml:68
+#: doc/classes/Area.xml:70
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
"velocity lost per second.\n"
@@ -6376,61 +6390,61 @@ msgid ""
"about damping."
msgstr ""
-#: doc/classes/Area.xml:72 doc/classes/Area2D.xml:74
+#: doc/classes/Area.xml:74 doc/classes/Area2D.xml:76
msgid "If [code]true[/code], other monitoring areas can detect this area."
msgstr ""
-#: doc/classes/Area.xml:75 doc/classes/Area2D.xml:77
+#: doc/classes/Area.xml:77 doc/classes/Area2D.xml:79
msgid ""
"If [code]true[/code], the area detects bodies or areas entering and exiting "
"it."
msgstr ""
-#: doc/classes/Area.xml:78 doc/classes/Area2D.xml:80
+#: doc/classes/Area.xml:80 doc/classes/Area2D.xml:82
msgid "The area's priority. Higher priority areas are processed first."
msgstr ""
-#: doc/classes/Area.xml:81
+#: doc/classes/Area.xml:83
msgid ""
"The degree to which this area applies reverb to its associated audio. Ranges "
"from [code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
msgstr ""
-#: doc/classes/Area.xml:84
+#: doc/classes/Area.xml:86
msgid "If [code]true[/code], the area applies reverb to its associated audio."
msgstr ""
-#: doc/classes/Area.xml:87
+#: doc/classes/Area.xml:89
msgid "The reverb bus name to use for this area's associated audio."
msgstr ""
-#: doc/classes/Area.xml:90
+#: doc/classes/Area.xml:92
msgid ""
"The degree to which this area's reverb is a uniform effect. Ranges from "
"[code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
msgstr ""
-#: doc/classes/Area.xml:93 doc/classes/Area2D.xml:83
+#: doc/classes/Area.xml:95 doc/classes/Area2D.xml:85
msgid ""
"Override mode for gravity and damping calculations within this area. See "
"[enum SpaceOverride] for possible values."
msgstr ""
-#: doc/classes/Area.xml:100
+#: doc/classes/Area.xml:102
msgid ""
"Emitted when another Area enters this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
-#: doc/classes/Area.xml:107
+#: doc/classes/Area.xml:109
msgid ""
"Emitted when another Area exits this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
-#: doc/classes/Area.xml:117 doc/classes/Area.xml:130
+#: doc/classes/Area.xml:119 doc/classes/Area.xml:132
msgid ""
"Emitted when one of another Area's [Shape]s enters one of this Area's "
"[Shape]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6445,7 +6459,7 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:140
+#: doc/classes/Area.xml:142
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] enters this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -6454,7 +6468,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:147
+#: doc/classes/Area.xml:149
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] exits this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -6463,7 +6477,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:157 doc/classes/Area.xml:170
+#: doc/classes/Area.xml:159 doc/classes/Area.xml:172
msgid ""
"Emitted when one of a [PhysicsBody] or [GridMap]'s [Shape]s enters one of "
"this Area's [Shape]s. Requires [member monitoring] to be set to [code]true[/"
@@ -6480,29 +6494,29 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:180 doc/classes/Area2D.xml:170
+#: doc/classes/Area.xml:182 doc/classes/Area2D.xml:172
msgid "This area does not affect gravity/damping."
msgstr ""
-#: doc/classes/Area.xml:183 doc/classes/Area2D.xml:173
+#: doc/classes/Area.xml:185 doc/classes/Area2D.xml:175
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order)."
msgstr ""
-#: doc/classes/Area.xml:186 doc/classes/Area2D.xml:176
+#: doc/classes/Area.xml:188 doc/classes/Area2D.xml:178
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order), ignoring any lower priority areas."
msgstr ""
-#: doc/classes/Area.xml:189 doc/classes/Area2D.xml:179
+#: doc/classes/Area.xml:191 doc/classes/Area2D.xml:181
msgid ""
"This area replaces any gravity/damping, even the defaults, ignoring any "
"lower priority areas."
msgstr ""
-#: doc/classes/Area.xml:192 doc/classes/Area2D.xml:182
+#: doc/classes/Area.xml:194 doc/classes/Area2D.xml:184
msgid ""
"This area replaces any gravity/damping calculated so far (in [member "
"priority] order), but keeps calculating the rest of the areas."
@@ -6541,21 +6555,25 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
#: doc/classes/Area2D.xml:19
msgid ""
-"Returns a list of intersecting [Area2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [Area2D]s. The overlapping area's [member "
+"CollisionObject2D.collision_layer] must be part of this area's [member "
+"CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:25
+#: doc/classes/Area2D.xml:26
msgid ""
-"Returns a list of intersecting [PhysicsBody2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody2D]s. The overlapping body's "
+"[member CollisionObject2D.collision_layer] must be part of this area's "
+"[member CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:32
+#: doc/classes/Area2D.xml:34
msgid ""
"If [code]true[/code], the given area overlaps the Area2D.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6563,7 +6581,7 @@ msgid ""
"the physics step. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:40
+#: doc/classes/Area2D.xml:42
msgid ""
"If [code]true[/code], the given physics body overlaps the Area2D.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6574,7 +6592,7 @@ msgid ""
"register their tiles with collision shapes as a virtual physics body)."
msgstr ""
-#: doc/classes/Area2D.xml:48
+#: doc/classes/Area2D.xml:50
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
"velocity lost per second.\n"
@@ -6582,14 +6600,14 @@ msgid ""
"details about damping."
msgstr ""
-#: doc/classes/Area2D.xml:58
+#: doc/classes/Area2D.xml:60
msgid ""
"The area's gravity intensity (in pixels per second squared). This value "
"multiplies the gravity vector. This is useful to alter the force of gravity "
"without altering its direction."
msgstr ""
-#: doc/classes/Area2D.xml:70
+#: doc/classes/Area2D.xml:72
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
"velocity lost per second.\n"
@@ -6597,21 +6615,21 @@ msgid ""
"about damping."
msgstr ""
-#: doc/classes/Area2D.xml:90
+#: doc/classes/Area2D.xml:92
msgid ""
"Emitted when another Area2D enters this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-#: doc/classes/Area2D.xml:97
+#: doc/classes/Area2D.xml:99
msgid ""
"Emitted when another Area2D exits this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-#: doc/classes/Area2D.xml:107
+#: doc/classes/Area2D.xml:109
msgid ""
"Emitted when one of another Area2D's [Shape2D]s enters one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6626,7 +6644,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:120
+#: doc/classes/Area2D.xml:122
msgid ""
"Emitted when one of another Area2D's [Shape2D]s exits one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6641,7 +6659,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:130
+#: doc/classes/Area2D.xml:132
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] enters this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -6650,7 +6668,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:137
+#: doc/classes/Area2D.xml:139
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] exits this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -6659,7 +6677,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:147
+#: doc/classes/Area2D.xml:149
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s enters one "
"of this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -6678,7 +6696,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:160
+#: doc/classes/Area2D.xml:162
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s exits one of "
"this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -10249,42 +10267,47 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
-"no save path is provided it will try to match the path from the current "
+"no root node is provided, parent of this node will be used as root instead. "
+"If no save path is provided it will try to match the path from the current "
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -10298,62 +10321,62 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
msgid "The rotation of the baked custom sky."
msgstr ""
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -10361,35 +10384,35 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -10397,13 +10420,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -10415,66 +10438,78 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr ""
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
msgid "Baking was successful."
msgstr ""
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr ""
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
#, fuzzy
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr "ÙŠÙØ±Ø¬Ø¹ قيمة ظل الزاوية العكسي للمَعالم."
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr ""
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:133
+#: doc/classes/BakedLightmap.xml:132
+msgid ""
+"Returns if lightmapper can't be created. Unless you are using a custom "
+"lightmapper, please report this as bug."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:135
+msgid ""
+"There is no root node to start baking from. Either provide [code]from_node[/"
+"code] argument or attach this node to a parent that should be used as root."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:136
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:139
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:142
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -10930,8 +10965,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -11319,26 +11357,33 @@ msgid "Text [Color] used when the [Button] is disabled."
msgstr ""
#: doc/classes/Button.xml:77
-msgid "Text [Color] used when the [Button] is being hovered."
+msgid ""
+"Text [Color] used when the [Button] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/Button.xml:80
-msgid "Text [Color] used when the [Button] is being pressed."
+msgid "Text [Color] used when the [Button] is being hovered."
msgstr ""
#: doc/classes/Button.xml:83
-msgid "[StyleBox] used when the [Button] is being hovered."
+msgid "Text [Color] used when the [Button] is being pressed."
msgstr ""
#: doc/classes/Button.xml:86
-msgid "The horizontal space between [Button]'s icon and text."
+msgid "[StyleBox] used when the [Button] is being hovered."
msgstr ""
#: doc/classes/Button.xml:89
-msgid "Default [StyleBox] for the [Button]."
+msgid "The horizontal space between [Button]'s icon and text."
msgstr ""
#: doc/classes/Button.xml:92
+msgid "Default [StyleBox] for the [Button]."
+msgstr ""
+
+#: doc/classes/Button.xml:95
msgid "[StyleBox] used when the [Button] is being pressed."
msgstr ""
@@ -12811,80 +12856,96 @@ msgstr ""
msgid "The check icon to display when the [CheckBox] is checked."
msgstr ""
-#: doc/classes/CheckBox.xml:30
+#: doc/classes/CheckBox.xml:28
+msgid "The check icon to display when the [CheckBox] is checked and disabled."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:31
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is disabled."
msgstr ""
-#: doc/classes/CheckBox.xml:33
+#: doc/classes/CheckBox.xml:34
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is focused."
msgstr ""
-#: doc/classes/CheckBox.xml:36
+#: doc/classes/CheckBox.xml:37
msgid "The [Font] to use for the [CheckBox] text."
msgstr ""
-#: doc/classes/CheckBox.xml:39
+#: doc/classes/CheckBox.xml:40
msgid "The [CheckBox] text's font color."
msgstr ""
-#: doc/classes/CheckBox.xml:42
+#: doc/classes/CheckBox.xml:43
msgid "The [CheckBox] text's font color when it's disabled."
msgstr ""
-#: doc/classes/CheckBox.xml:45
+#: doc/classes/CheckBox.xml:46
+msgid ""
+"The [CheckBox] text's font color when it's focused. Only replaces the normal "
+"text color of the checkbox. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:49
msgid "The [CheckBox] text's font color when it's hovered."
msgstr ""
-#: doc/classes/CheckBox.xml:48
+#: doc/classes/CheckBox.xml:52
msgid "The [CheckBox] text's font color when it's hovered and pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:51
+#: doc/classes/CheckBox.xml:55
msgid "The [CheckBox] text's font color when it's pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:54
+#: doc/classes/CheckBox.xml:58
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered."
msgstr ""
-#: doc/classes/CheckBox.xml:57
+#: doc/classes/CheckBox.xml:61
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered and "
"pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:60
+#: doc/classes/CheckBox.xml:64
msgid "The separation between the check icon and the text (in pixels)."
msgstr ""
-#: doc/classes/CheckBox.xml:63 doc/classes/CheckButton.xml:58
+#: doc/classes/CheckBox.xml:67 doc/classes/CheckButton.xml:61
msgid "The [StyleBox] to display as a background."
msgstr ""
-#: doc/classes/CheckBox.xml:66
+#: doc/classes/CheckBox.xml:70
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:69
+#: doc/classes/CheckBox.xml:73
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is checked."
msgstr ""
-#: doc/classes/CheckBox.xml:74
+#: doc/classes/CheckBox.xml:78
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is unchecked."
msgstr ""
-#: doc/classes/CheckBox.xml:79
+#: doc/classes/CheckBox.xml:83
msgid "The check icon to display when the [CheckBox] is unchecked."
msgstr ""
+#: doc/classes/CheckBox.xml:86
+msgid ""
+"The check icon to display when the [CheckBox] is unchecked and disabled."
+msgstr ""
+
#: doc/classes/CheckButton.xml:4
msgid "Checkable button. See also [CheckBox]."
msgstr ""
@@ -12928,49 +12989,56 @@ msgid "The [CheckButton] text's font color when it's disabled."
msgstr ""
#: doc/classes/CheckButton.xml:40
-msgid "The [CheckButton] text's font color when it's hovered."
+msgid ""
+"The [CheckButton] text's font color when it's focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/CheckButton.xml:43
-msgid "The [CheckButton] text's font color when it's hovered and pressed."
+msgid "The [CheckButton] text's font color when it's hovered."
msgstr ""
#: doc/classes/CheckButton.xml:46
-msgid "The [CheckButton] text's font color when it's pressed."
+msgid "The [CheckButton] text's font color when it's hovered and pressed."
msgstr ""
#: doc/classes/CheckButton.xml:49
+msgid "The [CheckButton] text's font color when it's pressed."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:52
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered."
msgstr ""
-#: doc/classes/CheckButton.xml:52
+#: doc/classes/CheckButton.xml:55
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered "
"and pressed."
msgstr ""
-#: doc/classes/CheckButton.xml:55
+#: doc/classes/CheckButton.xml:58
msgid "The separation between the toggle icon and the text (in pixels)."
msgstr ""
-#: doc/classes/CheckButton.xml:61
+#: doc/classes/CheckButton.xml:64
msgid "The icon to display when the [CheckButton] is unchecked."
msgstr ""
-#: doc/classes/CheckButton.xml:64
+#: doc/classes/CheckButton.xml:67
msgid "The icon to display when the [CheckButton] is unchecked and disabled."
msgstr ""
-#: doc/classes/CheckButton.xml:67
+#: doc/classes/CheckButton.xml:70
msgid "The icon to display when the [CheckButton] is checked."
msgstr ""
-#: doc/classes/CheckButton.xml:70
+#: doc/classes/CheckButton.xml:73
msgid "The icon to display when the [CheckButton] is checked and disabled."
msgstr ""
-#: doc/classes/CheckButton.xml:73
+#: doc/classes/CheckButton.xml:76
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is pressed."
msgstr ""
@@ -14745,26 +14813,33 @@ msgid "Text [Color] used when the [ColorPickerButton] is disabled."
msgstr ""
#: doc/classes/ColorPickerButton.xml:80
-msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
+msgid ""
+"Text [Color] used when the [ColorPickerButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/ColorPickerButton.xml:83
-msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
+msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
msgstr ""
#: doc/classes/ColorPickerButton.xml:86
-msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
+msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
msgstr ""
#: doc/classes/ColorPickerButton.xml:89
-msgid "The horizontal space between [ColorPickerButton]'s icon and text."
+msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
msgstr ""
#: doc/classes/ColorPickerButton.xml:92
-msgid "Default [StyleBox] for the [ColorPickerButton]."
+msgid "The horizontal space between [ColorPickerButton]'s icon and text."
msgstr ""
#: doc/classes/ColorPickerButton.xml:95
+msgid "Default [StyleBox] for the [ColorPickerButton]."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:98
msgid "[StyleBox] used when the [ColorPickerButton] is being pressed."
msgstr ""
@@ -19998,7 +20073,8 @@ msgid ""
"get_resource_type]. They may optionally specify some import presets that "
"affect the import process. EditorImportPlugins are responsible for creating "
"the resources and saving them in the [code].import[/code] directory (see "
-"[member ProjectSettings.application/config/project_data_dir_name]).\n"
+"[member ProjectSettings.application/config/"
+"use_hidden_project_data_directory]).\n"
"Below is an example EditorImportPlugin that imports a [Mesh] from a file "
"with the extension \".special\" or \".spec\":\n"
"[codeblock]\n"
@@ -20125,7 +20201,7 @@ msgstr ""
msgid ""
"Gets the extension used to save this resource in the [code].import[/code] "
"directory (see [member ProjectSettings.application/config/"
-"project_data_dir_name])."
+"use_hidden_project_data_directory])."
msgstr ""
#: doc/classes/EditorImportPlugin.xml:130
@@ -21160,8 +21236,11 @@ msgstr ""
msgid "Emitted when the value of the edited resource was changed."
msgstr ""
-#: doc/classes/EditorResourcePicker.xml:89
-msgid "Emitted when the resource value was set and user clicked to edit it."
+#: doc/classes/EditorResourcePicker.xml:90
+msgid ""
+"Emitted when the resource value was set and user clicked to edit it. When "
+"[code]edit[/code] is [code]true[/code], the signal was caused by the context "
+"menu \"Edit\" option."
msgstr ""
#: doc/classes/EditorResourcePreview.xml:4
@@ -24911,21 +24990,32 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html"
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -24934,14 +25024,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -24951,80 +25045,80 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
msgstr ""
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr ""
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -27774,16 +27868,18 @@ msgstr ""
#: doc/classes/Image.xml:436
msgid ""
"OpenGL texture format [code]RED[/code] with a single component and a "
-"bitdepth of 8."
+"bitdepth of 8.\n"
+"[b]Note:[/b] When using the GLES2 backend, this uses the alpha channel "
+"instead of the red channel for storage."
msgstr ""
-#: doc/classes/Image.xml:439
+#: doc/classes/Image.xml:440
msgid ""
"OpenGL texture format [code]RG[/code] with two components and a bitdepth of "
"8 for each."
msgstr ""
-#: doc/classes/Image.xml:442
+#: doc/classes/Image.xml:443
msgid ""
"OpenGL texture format [code]RGB[/code] with three components, each with a "
"bitdepth of 8.\n"
@@ -27791,7 +27887,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:446
+#: doc/classes/Image.xml:447
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 8.\n"
@@ -27799,73 +27895,73 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:450
+#: doc/classes/Image.xml:451
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 4."
msgstr ""
-#: doc/classes/Image.xml:453
+#: doc/classes/Image.xml:454
msgid ""
"OpenGL texture format [code]GL_RGB5_A1[/code] where 5 bits of depth for each "
"component of RGB and one bit for alpha."
msgstr ""
-#: doc/classes/Image.xml:456
+#: doc/classes/Image.xml:457
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 32-"
"bit floating-point value."
msgstr ""
-#: doc/classes/Image.xml:459
+#: doc/classes/Image.xml:460
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:462
+#: doc/classes/Image.xml:463
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:465
+#: doc/classes/Image.xml:466
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:468
+#: doc/classes/Image.xml:469
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 16-"
"bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:471
+#: doc/classes/Image.xml:472
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:474
+#: doc/classes/Image.xml:475
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:477
+#: doc/classes/Image.xml:478
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:480
+#: doc/classes/Image.xml:481
msgid ""
"A special OpenGL texture format where the three color components have 9 bits "
"of precision and all three share a single 5-bit exponent."
msgstr ""
-#: doc/classes/Image.xml:483
+#: doc/classes/Image.xml:484
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 1, and is the smallest variation "
@@ -27875,7 +27971,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:487
+#: doc/classes/Image.xml:488
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 2, and color data is interpreted "
@@ -27885,7 +27981,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:491
+#: doc/classes/Image.xml:492
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format also known as Block Compression 3 or BC3 that contains 64 "
@@ -27896,7 +27992,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:495
+#: doc/classes/Image.xml:496
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -27904,7 +28000,7 @@ msgid ""
"DXT5 uses for the alpha channel."
msgstr ""
-#: doc/classes/Image.xml:498
+#: doc/classes/Image.xml:499
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -27912,7 +28008,7 @@ msgid ""
"algorithm that DXT5 uses for the alpha channel."
msgstr ""
-#: doc/classes/Image.xml:501
+#: doc/classes/Image.xml:502
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned normalized "
@@ -27921,21 +28017,21 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:505
+#: doc/classes/Image.xml:506
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with signed floating-point "
"RGB components."
msgstr ""
-#: doc/classes/Image.xml:508
+#: doc/classes/Image.xml:509
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned floating-point "
"RGB components."
msgstr ""
-#: doc/classes/Image.xml:511
+#: doc/classes/Image.xml:512
msgid ""
"Texture format used on PowerVR-supported mobile platforms, uses 2-bit color "
"depth with no alpha. More information can be found [url=https://en.wikipedia."
@@ -27944,25 +28040,25 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:515
+#: doc/classes/Image.xml:516
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with an "
"alpha component."
msgstr ""
-#: doc/classes/Image.xml:518
+#: doc/classes/Image.xml:519
msgid ""
"Similar to [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with 4-"
"bit color depth and no alpha."
msgstr ""
-#: doc/classes/Image.xml:521
+#: doc/classes/Image.xml:522
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC4[/url], but with an "
"alpha component."
msgstr ""
-#: doc/classes/Image.xml:524
+#: doc/classes/Image.xml:525
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC1]Ericsson Texture Compression format 1[/"
@@ -27970,7 +28066,7 @@ msgid ""
"standard. This format cannot store an alpha channel."
msgstr ""
-#: doc/classes/Image.xml:527
+#: doc/classes/Image.xml:528
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27978,7 +28074,7 @@ msgid ""
"unsigned data."
msgstr ""
-#: doc/classes/Image.xml:530
+#: doc/classes/Image.xml:531
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27986,7 +28082,7 @@ msgid ""
"channel of signed data."
msgstr ""
-#: doc/classes/Image.xml:533
+#: doc/classes/Image.xml:534
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27994,7 +28090,7 @@ msgid ""
"of unsigned data."
msgstr ""
-#: doc/classes/Image.xml:536
+#: doc/classes/Image.xml:537
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28002,7 +28098,7 @@ msgid ""
"channels of signed data."
msgstr ""
-#: doc/classes/Image.xml:539
+#: doc/classes/Image.xml:540
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28012,7 +28108,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:543
+#: doc/classes/Image.xml:544
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28022,7 +28118,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:547
+#: doc/classes/Image.xml:548
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28033,31 +28129,31 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:551
+#: doc/classes/Image.xml:552
msgid "Represents the size of the [enum Format] enum."
msgstr ""
-#: doc/classes/Image.xml:554
+#: doc/classes/Image.xml:555
msgid ""
"Performs nearest-neighbor interpolation. If the image is resized, it will be "
"pixelated."
msgstr ""
-#: doc/classes/Image.xml:557
+#: doc/classes/Image.xml:558
msgid ""
"Performs bilinear interpolation. If the image is resized, it will be blurry. "
"This mode is faster than [constant INTERPOLATE_CUBIC], but it results in "
"lower quality."
msgstr ""
-#: doc/classes/Image.xml:560
+#: doc/classes/Image.xml:561
msgid ""
"Performs cubic interpolation. If the image is resized, it will be blurry. "
"This mode often gives better results compared to [constant "
"INTERPOLATE_BILINEAR], at the cost of being slower."
msgstr ""
-#: doc/classes/Image.xml:563
+#: doc/classes/Image.xml:564
msgid ""
"Performs bilinear separately on the two most-suited mipmap levels, then "
"linearly interpolates between them.\n"
@@ -28072,55 +28168,55 @@ msgid ""
"a new set will be generated for the resulting image."
msgstr ""
-#: doc/classes/Image.xml:570
+#: doc/classes/Image.xml:571
msgid ""
"Performs Lanczos interpolation. This is the slowest image resizing mode, but "
"it typically gives the best results, especially when downscalng images."
msgstr ""
-#: doc/classes/Image.xml:573
+#: doc/classes/Image.xml:574
msgid "Image does not have alpha."
msgstr ""
-#: doc/classes/Image.xml:576
+#: doc/classes/Image.xml:577
msgid "Image stores alpha in a single bit."
msgstr ""
-#: doc/classes/Image.xml:579
+#: doc/classes/Image.xml:580
msgid "Image uses alpha."
msgstr ""
-#: doc/classes/Image.xml:582
+#: doc/classes/Image.xml:583
msgid "Use S3TC compression."
msgstr ""
-#: doc/classes/Image.xml:585
+#: doc/classes/Image.xml:586
msgid "Use PVRTC2 compression."
msgstr ""
-#: doc/classes/Image.xml:588
+#: doc/classes/Image.xml:589
msgid "Use PVRTC4 compression."
msgstr ""
-#: doc/classes/Image.xml:591
+#: doc/classes/Image.xml:592
msgid "Use ETC compression."
msgstr ""
-#: doc/classes/Image.xml:594
+#: doc/classes/Image.xml:595
msgid "Use ETC2 compression."
msgstr ""
-#: doc/classes/Image.xml:597
+#: doc/classes/Image.xml:598
msgid ""
"Source texture (before compression) is a regular texture. Default for all "
"textures."
msgstr ""
-#: doc/classes/Image.xml:600
+#: doc/classes/Image.xml:601
msgid "Source texture (before compression) is in sRGB space."
msgstr ""
-#: doc/classes/Image.xml:603
+#: doc/classes/Image.xml:604
msgid ""
"Source texture (before compression) is a normal texture (e.g. it can be "
"compressed into two channels)."
@@ -28345,6 +28441,17 @@ msgstr ""
#: doc/classes/Input.xml:43
msgid ""
+"Sends all input events which are in the current buffer to the game loop. "
+"These events may have been buffered as a result of accumulated input "
+"([method set_use_accumulated_input]) or agile input flushing ([member "
+"ProjectSettings.input_devices/buffering/agile_event_flushing]).\n"
+"The engine will already do this itself at key execution points (at least "
+"once per frame). However, this can be useful in advanced cases where you "
+"want precise control over the timing of event handling."
+msgstr ""
+
+#: doc/classes/Input.xml:50
+msgid ""
"Returns the acceleration of the device's accelerometer sensor, if the device "
"has one. Otherwise, the method returns [constant Vector3.ZERO].\n"
"Note this method returns an empty [Vector3] when running from the editor "
@@ -28356,7 +28463,7 @@ msgid ""
"the Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:53
+#: doc/classes/Input.xml:60
msgid ""
"Returns a value between 0 and 1 representing the raw intensity of the given "
"action, ignoring the action's deadzone. In most cases, you should use "
@@ -28366,7 +28473,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:62
+#: doc/classes/Input.xml:69
msgid ""
"Returns a value between 0 and 1 representing the intensity of the given "
"action. In a joypad, for example, the further away the axis (analog sticks "
@@ -28378,7 +28485,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:71
+#: doc/classes/Input.xml:78
msgid ""
"Get axis input by specifying two actions, one negative and one positive.\n"
"This is a shorthand for writing [code]Input."
@@ -28386,17 +28493,17 @@ msgid ""
"get_action_strength(\"negative_action\")[/code]."
msgstr ""
-#: doc/classes/Input.xml:78
+#: doc/classes/Input.xml:85
msgid ""
"Returns an [Array] containing the device IDs of all currently connected "
"joypads."
msgstr ""
-#: doc/classes/Input.xml:84
+#: doc/classes/Input.xml:91
msgid "Returns the currently assigned cursor shape (see [enum CursorShape])."
msgstr ""
-#: doc/classes/Input.xml:90
+#: doc/classes/Input.xml:97
msgid ""
"Returns the gravity of the device's accelerometer sensor, if the device has "
"one. Otherwise, the method returns [constant Vector3.ZERO].\n"
@@ -28406,7 +28513,7 @@ msgid ""
"Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:97
+#: doc/classes/Input.xml:104
msgid ""
"Returns the rotation rate in rad/s around a device's X, Y, and Z axes of the "
"gyroscope sensor, if the device has one. Otherwise, the method returns "
@@ -28415,53 +28522,53 @@ msgid ""
"it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:106
+#: doc/classes/Input.xml:113
msgid ""
"Returns the current value of the joypad axis at given index (see [enum "
"JoystickList])."
msgstr ""
-#: doc/classes/Input.xml:113
+#: doc/classes/Input.xml:120
msgid "Returns the index of the provided axis name."
msgstr ""
-#: doc/classes/Input.xml:120
+#: doc/classes/Input.xml:127
msgid ""
"Receives a [enum JoystickList] axis and returns its equivalent name as a "
"string."
msgstr ""
-#: doc/classes/Input.xml:127
+#: doc/classes/Input.xml:134
msgid "Returns the index of the provided button name."
msgstr ""
-#: doc/classes/Input.xml:134
+#: doc/classes/Input.xml:141
msgid ""
"Receives a gamepad button from [enum JoystickList] and returns its "
"equivalent name as a string."
msgstr ""
-#: doc/classes/Input.xml:141
+#: doc/classes/Input.xml:148
msgid ""
"Returns a SDL2-compatible device GUID on platforms that use gamepad "
"remapping. Returns [code]\"Default Gamepad\"[/code] otherwise."
msgstr ""
-#: doc/classes/Input.xml:148
+#: doc/classes/Input.xml:155
msgid "Returns the name of the joypad at the specified device index."
msgstr ""
-#: doc/classes/Input.xml:155
+#: doc/classes/Input.xml:162
msgid "Returns the duration of the current vibration effect in seconds."
msgstr ""
-#: doc/classes/Input.xml:162
+#: doc/classes/Input.xml:169
msgid ""
"Returns the strength of the joypad vibration: x is the strength of the weak "
"motor, and y is the strength of the strong motor."
msgstr ""
-#: doc/classes/Input.xml:168
+#: doc/classes/Input.xml:175
msgid ""
"Returns the mouse speed for the last time the cursor was moved, and this "
"until the next frame where the mouse moves. This means that even if the "
@@ -28469,7 +28576,7 @@ msgid ""
"motion."
msgstr ""
-#: doc/classes/Input.xml:174
+#: doc/classes/Input.xml:181
msgid ""
"Returns the magnetic field strength in micro-Tesla for all axes of the "
"device's magnetometer sensor, if the device has one. Otherwise, the method "
@@ -28478,17 +28585,17 @@ msgid ""
"platforms, it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:181
+#: doc/classes/Input.xml:188
msgid ""
"Returns mouse buttons as a bitmask. If multiple mouse buttons are pressed at "
"the same time, the bits are added together."
msgstr ""
-#: doc/classes/Input.xml:187
+#: doc/classes/Input.xml:194
msgid "Returns the mouse mode. See the constants for more information."
msgstr ""
-#: doc/classes/Input.xml:198
+#: doc/classes/Input.xml:205
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -28501,7 +28608,7 @@ msgid ""
"want (on the range of 0 to 1)."
msgstr ""
-#: doc/classes/Input.xml:208
+#: doc/classes/Input.xml:215
msgid ""
"Returns [code]true[/code] when the user starts pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user pressed down "
@@ -28513,7 +28620,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:218
+#: doc/classes/Input.xml:225
msgid ""
"Returns [code]true[/code] when the user stops pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user released the "
@@ -28523,7 +28630,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:227
+#: doc/classes/Input.xml:234
msgid ""
"Returns [code]true[/code] if you are pressing the action event. Note that if "
"an action has multiple buttons assigned and more than one of them is "
@@ -28534,13 +28641,13 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:236
+#: doc/classes/Input.xml:243
msgid ""
"Returns [code]true[/code] if you are pressing the joypad button (see [enum "
"JoystickList])."
msgstr ""
-#: doc/classes/Input.xml:243
+#: doc/classes/Input.xml:250
msgid ""
"Returns [code]true[/code] if the system knows the specified device. This "
"means that it sets all button and axis indices exactly as defined in [enum "
@@ -28548,19 +28655,19 @@ msgid ""
"but you can still retrieve events from them."
msgstr ""
-#: doc/classes/Input.xml:250
+#: doc/classes/Input.xml:257
msgid ""
"Returns [code]true[/code] if you are pressing the key. You can pass a [enum "
"KeyList] constant."
msgstr ""
-#: doc/classes/Input.xml:257
+#: doc/classes/Input.xml:264
msgid ""
"Returns [code]true[/code] if you are pressing the mouse button specified "
"with [enum ButtonList]."
msgstr ""
-#: doc/classes/Input.xml:267
+#: doc/classes/Input.xml:274
msgid ""
"Notifies the [Input] singleton that a connection has changed, to update the "
"state for the [code]device[/code] index.\n"
@@ -28569,7 +28676,7 @@ msgid ""
"triggered internally."
msgstr ""
-#: doc/classes/Input.xml:275
+#: doc/classes/Input.xml:282
msgid ""
"Feeds an [InputEvent] to the game. Can be used to artificially trigger input "
"events from code. Also generates [method Node._input] calls.\n"
@@ -28582,12 +28689,21 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Input.xml:289
+#: doc/classes/Input.xml:296
msgid ""
"Removes all mappings from the internal database that match the given GUID."
msgstr ""
-#: doc/classes/Input.xml:298
+#: doc/classes/Input.xml:303
+msgid ""
+"Sets the acceleration value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:313
msgid ""
"Sets a custom mouse cursor image, which is only visible inside the game "
"window. The hotspot can also be specified. Passing [code]null[/code] to the "
@@ -28602,7 +28718,7 @@ msgid ""
"compression mode can't be used for custom cursors."
msgstr ""
-#: doc/classes/Input.xml:309
+#: doc/classes/Input.xml:324
msgid ""
"Sets the default cursor shape to be used in the viewport instead of "
"[constant CURSOR_ARROW].\n"
@@ -28612,11 +28728,38 @@ msgid ""
"cursor immediately."
msgstr ""
-#: doc/classes/Input.xml:318
+#: doc/classes/Input.xml:333
+msgid ""
+"Sets the gravity value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:341
+msgid ""
+"Sets the value of the rotation rate of the gyroscope sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:349
+msgid ""
+"Sets the value of the magnetic field of the magnetometer sensor. Can be used "
+"for debugging on devices without a hardware sensor, for example in an editor "
+"on a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:357
msgid "Sets the mouse mode. See the constants for more information."
msgstr ""
-#: doc/classes/Input.xml:325
+#: doc/classes/Input.xml:364
msgid ""
"Enables or disables the accumulation of similar input events sent by the "
"operating system. When input accumulation is enabled, all input events "
@@ -28630,7 +28773,7 @@ msgid ""
"results that closely follow the actual input."
msgstr ""
-#: doc/classes/Input.xml:336
+#: doc/classes/Input.xml:375
msgid ""
"Starts to vibrate the joypad. Joypads usually come with two rumble motors, a "
"strong and a weak one. [code]weak_magnitude[/code] is the strength of the "
@@ -28643,34 +28786,34 @@ msgid ""
"few seconds."
msgstr ""
-#: doc/classes/Input.xml:344
+#: doc/classes/Input.xml:383
msgid "Stops the vibration of the joypad."
msgstr ""
-#: doc/classes/Input.xml:351
+#: doc/classes/Input.xml:390
msgid ""
"Vibrate Android and iOS devices.\n"
"[b]Note:[/b] It needs [code]VIBRATE[/code] permission for Android at export "
"settings. iOS does not support duration."
msgstr ""
-#: doc/classes/Input.xml:359
+#: doc/classes/Input.xml:398
msgid "Sets the mouse position to the specified vector."
msgstr ""
-#: doc/classes/Input.xml:368
+#: doc/classes/Input.xml:407
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
-#: doc/classes/Input.xml:374
+#: doc/classes/Input.xml:413
msgid "Makes the mouse cursor visible if it is hidden."
msgstr ""
-#: doc/classes/Input.xml:377
+#: doc/classes/Input.xml:416
msgid "Makes the mouse cursor hidden if it is visible."
msgstr ""
-#: doc/classes/Input.xml:380
+#: doc/classes/Input.xml:419
msgid ""
"Captures the mouse. The mouse will be hidden and its position locked at the "
"center of the screen.\n"
@@ -28678,83 +28821,83 @@ msgid ""
"need to use [member InputEventMouseMotion.relative]."
msgstr ""
-#: doc/classes/Input.xml:384
+#: doc/classes/Input.xml:423
msgid "Makes the mouse cursor visible but confines it to the game window."
msgstr ""
-#: doc/classes/Input.xml:387
+#: doc/classes/Input.xml:426
msgid "Arrow cursor. Standard, default pointing cursor."
msgstr ""
-#: doc/classes/Input.xml:390
+#: doc/classes/Input.xml:429
msgid ""
"I-beam cursor. Usually used to show where the text cursor will appear when "
"the mouse is clicked."
msgstr ""
-#: doc/classes/Input.xml:393
+#: doc/classes/Input.xml:432
msgid ""
"Pointing hand cursor. Usually used to indicate the pointer is over a link or "
"other interactable item."
msgstr ""
-#: doc/classes/Input.xml:396
+#: doc/classes/Input.xml:435
msgid ""
"Cross cursor. Typically appears over regions in which a drawing operation "
"can be performed or for selections."
msgstr ""
-#: doc/classes/Input.xml:399
+#: doc/classes/Input.xml:438
msgid ""
"Wait cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application is still usable during the "
"operation."
msgstr ""
-#: doc/classes/Input.xml:402
+#: doc/classes/Input.xml:441
msgid ""
"Busy cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application isn't usable during the "
"operation (e.g. something is blocking its main thread)."
msgstr ""
-#: doc/classes/Input.xml:405
+#: doc/classes/Input.xml:444
msgid "Drag cursor. Usually displayed when dragging something."
msgstr ""
-#: doc/classes/Input.xml:408
+#: doc/classes/Input.xml:447
msgid ""
"Can drop cursor. Usually displayed when dragging something to indicate that "
"it can be dropped at the current position."
msgstr ""
-#: doc/classes/Input.xml:411
+#: doc/classes/Input.xml:450
msgid ""
"Forbidden cursor. Indicates that the current action is forbidden (for "
"example, when dragging something) or that the control at a position is "
"disabled."
msgstr ""
-#: doc/classes/Input.xml:414
+#: doc/classes/Input.xml:453
msgid ""
"Vertical resize mouse cursor. A double-headed vertical arrow. It tells the "
"user they can resize the window or the panel vertically."
msgstr ""
-#: doc/classes/Input.xml:417
+#: doc/classes/Input.xml:456
msgid ""
"Horizontal resize mouse cursor. A double-headed horizontal arrow. It tells "
"the user they can resize the window or the panel horizontally."
msgstr ""
-#: doc/classes/Input.xml:420
+#: doc/classes/Input.xml:459
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the bottom left to the top right. It tells the user they can resize the "
"window or the panel both horizontally and vertically."
msgstr ""
-#: doc/classes/Input.xml:423
+#: doc/classes/Input.xml:462
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the top left to the bottom right, the opposite of [constant "
@@ -28762,23 +28905,23 @@ msgid ""
"both horizontally and vertically."
msgstr ""
-#: doc/classes/Input.xml:426
+#: doc/classes/Input.xml:465
msgid "Move cursor. Indicates that something can be moved."
msgstr ""
-#: doc/classes/Input.xml:429
+#: doc/classes/Input.xml:468
msgid ""
"Vertical split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_VSIZE]."
msgstr ""
-#: doc/classes/Input.xml:432
+#: doc/classes/Input.xml:471
msgid ""
"Horizontal split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_HSIZE]."
msgstr ""
-#: doc/classes/Input.xml:435
+#: doc/classes/Input.xml:474
msgid "Help cursor. Usually a question mark."
msgstr ""
@@ -29194,7 +29337,9 @@ msgid "The drag position."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -30507,7 +30652,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30572,22 +30718,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -30602,7 +30750,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -30610,19 +30758,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -30693,7 +30841,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30751,7 +30900,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -32037,14 +32188,21 @@ msgid "Default text [Color] of the [LinkButton]."
msgstr ""
#: doc/classes/LinkButton.xml:46
-msgid "Text [Color] used when the [LinkButton] is being hovered."
+msgid ""
+"Text [Color] used when the [LinkButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/LinkButton.xml:49
-msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgid "Text [Color] used when the [LinkButton] is being hovered."
msgstr ""
#: doc/classes/LinkButton.xml:52
+msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:55
msgid "The vertical space between the baseline of text and the underline."
msgstr ""
@@ -32537,26 +32695,33 @@ msgid "Text [Color] used when the [MenuButton] is disabled."
msgstr ""
#: doc/classes/MenuButton.xml:64
-msgid "Text [Color] used when the [MenuButton] is being hovered."
+msgid ""
+"Text [Color] used when the [MenuButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/MenuButton.xml:67
-msgid "Text [Color] used when the [MenuButton] is being pressed."
+msgid "Text [Color] used when the [MenuButton] is being hovered."
msgstr ""
#: doc/classes/MenuButton.xml:70
-msgid "[StyleBox] used when the [MenuButton] is being hovered."
+msgid "Text [Color] used when the [MenuButton] is being pressed."
msgstr ""
#: doc/classes/MenuButton.xml:73
-msgid "The horizontal space between [MenuButton]'s icon and text."
+msgid "[StyleBox] used when the [MenuButton] is being hovered."
msgstr ""
#: doc/classes/MenuButton.xml:76
-msgid "Default [StyleBox] for the [MenuButton]."
+msgid "The horizontal space between [MenuButton]'s icon and text."
msgstr ""
#: doc/classes/MenuButton.xml:79
+msgid "Default [StyleBox] for the [MenuButton]."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:82
msgid "[StyleBox] used when the [MenuButton] is being pressed."
msgstr ""
@@ -34290,7 +34455,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -37174,26 +37339,33 @@ msgid "Text [Color] used when the [OptionButton] is disabled."
msgstr ""
#: doc/classes/OptionButton.xml:212
-msgid "Text [Color] used when the [OptionButton] is being hovered."
+msgid ""
+"Text [Color] used when the [OptionButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/OptionButton.xml:215
-msgid "Text [Color] used when the [OptionButton] is being pressed."
+msgid "Text [Color] used when the [OptionButton] is being hovered."
msgstr ""
#: doc/classes/OptionButton.xml:218
-msgid "[StyleBox] used when the [OptionButton] is being hovered."
+msgid "Text [Color] used when the [OptionButton] is being pressed."
msgstr ""
#: doc/classes/OptionButton.xml:221
-msgid "The horizontal space between [OptionButton]'s icon and text."
+msgid "[StyleBox] used when the [OptionButton] is being hovered."
msgstr ""
#: doc/classes/OptionButton.xml:224
-msgid "Default [StyleBox] for the [OptionButton]."
+msgid "The horizontal space between [OptionButton]'s icon and text."
msgstr ""
#: doc/classes/OptionButton.xml:227
+msgid "Default [StyleBox] for the [OptionButton]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:230
msgid "[StyleBox] used when the [OptionButton] is being pressed."
msgstr ""
@@ -37599,7 +37771,7 @@ msgstr ""
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -37629,14 +37801,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -37646,7 +37818,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -40147,17 +40319,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -40175,11 +40373,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -40374,7 +40572,9 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-msgid "Returns the [Physics2DDirectBodyState] of the body."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
@@ -41177,6 +41377,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -41194,7 +41412,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -41308,7 +41526,9 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-msgid "Returns the [PhysicsDirectBodyState] of the body."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/PhysicsServer.xml:370
@@ -42290,27 +42510,27 @@ msgstr ""
msgid "Removes an element from the array by index."
msgstr ""
-#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolColorArray.xml:66
-#: doc/classes/PoolIntArray.xml:67 doc/classes/PoolRealArray.xml:67
-#: doc/classes/PoolStringArray.xml:74 doc/classes/PoolVector2Array.xml:67
-#: doc/classes/PoolVector3Array.xml:66
+#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolIntArray.xml:67
+#: doc/classes/PoolRealArray.xml:67
msgid ""
"Sets the size of the array. If the array is grown, reserves elements at the "
"end of the array. If the array is shrunk, truncates the array to the new "
-"size."
+"size.\n"
+"[b]Note:[/b] Added elements are not automatically initialized to 0 and will "
+"contain garbage, i.e. indeterminate values."
msgstr ""
-#: doc/classes/PoolByteArray.xml:121
+#: doc/classes/PoolByteArray.xml:122
msgid "Changes the byte at the given index."
msgstr ""
-#: doc/classes/PoolByteArray.xml:127 doc/classes/PoolColorArray.xml:79
-#: doc/classes/PoolRealArray.xml:80 doc/classes/PoolStringArray.xml:87
+#: doc/classes/PoolByteArray.xml:128 doc/classes/PoolColorArray.xml:79
+#: doc/classes/PoolRealArray.xml:81 doc/classes/PoolStringArray.xml:87
#: doc/classes/PoolVector2Array.xml:80 doc/classes/PoolVector3Array.xml:79
msgid "Returns the size of the array."
msgstr ""
-#: doc/classes/PoolByteArray.xml:135
+#: doc/classes/PoolByteArray.xml:136
msgid ""
"Returns the slice of the [PoolByteArray] between indices (inclusive) as a "
"new [PoolByteArray]. Any negative index is considered to be from the end of "
@@ -42342,6 +42562,14 @@ msgstr ""
msgid "Appends a value to the array."
msgstr ""
+#: doc/classes/PoolColorArray.xml:66 doc/classes/PoolStringArray.xml:74
+#: doc/classes/PoolVector2Array.xml:67 doc/classes/PoolVector3Array.xml:66
+msgid ""
+"Sets the size of the array. If the array is grown, reserves elements at the "
+"end of the array. If the array is shrunk, truncates the array to the new "
+"size."
+msgstr ""
+
#: doc/classes/PoolColorArray.xml:73
msgid "Changes the [Color] at the given index."
msgstr ""
@@ -42378,11 +42606,11 @@ msgid ""
"valid, or at the end of the array ([code]idx == size()[/code])."
msgstr ""
-#: doc/classes/PoolIntArray.xml:74
+#: doc/classes/PoolIntArray.xml:75
msgid "Changes the int at the given index."
msgstr ""
-#: doc/classes/PoolIntArray.xml:80
+#: doc/classes/PoolIntArray.xml:81
msgid "Returns the array size."
msgstr ""
@@ -42414,7 +42642,7 @@ msgstr ""
msgid "Appends a [PoolRealArray] at the end of this array."
msgstr ""
-#: doc/classes/PoolRealArray.xml:74
+#: doc/classes/PoolRealArray.xml:75
msgid "Changes the float at the given index."
msgstr ""
@@ -43681,18 +43909,6 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:204
msgid ""
-"The project data directory is used for storing project-specific data "
-"(metadata, shader cache, etc.).\n"
-"[b]Note:[/b] Restart the application after changing this setting.\n"
-"[b]Note:[/b] Changing this value can help on platforms or with third-party "
-"tools where specific directory patterns are disallowed. Only modify this "
-"setting if you know that your environment requires it, as changing the "
-"default can impact compatibility with some external tools or plugins which "
-"expect the default [code].import[/code] folder."
-msgstr ""
-
-#: doc/classes/ProjectSettings.xml:209
-msgid ""
"Specifies a file to override project settings. For example: [code]user://"
"custom_settings.cfg[/code]. See \"Overriding\" in the [ProjectSettings] "
"class description at the top for more information.\n"
@@ -43700,7 +43916,7 @@ msgid ""
"code] will still be read to override the project settings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:213
+#: doc/classes/ProjectSettings.xml:208
msgid ""
"If [code]true[/code], the project will save user data to its own user "
"directory (see [member application/config/custom_user_dir_name]). This "
@@ -43710,13 +43926,28 @@ msgid ""
"user data directory)/Godot/app_userdata/(project name)[/code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:216
+#: doc/classes/ProjectSettings.xml:211
+msgid ""
+"If [code]true[/code], the project will use a hidden directory ([code]."
+"import[/code]) for storing project-specific data (metadata, shader cache, "
+"etc.).\n"
+"If [code]false[/code], a non-hidden directory ([code]import[/code]) will be "
+"used instead.\n"
+"[b]Note:[/b] Restart the application after changing this setting.\n"
+"[b]Note:[/b] Changing this value can help on platforms or with third-party "
+"tools where hidden directory patterns are disallowed. Only modify this "
+"setting if you know that your environment requires it, as changing the "
+"default can impact compatibility with some external tools or plugins which "
+"expect the default [code].import[/code] folder."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:217
msgid ""
"Icon set in [code].ico[/code] format used on Windows to set the game's icon. "
"This is done automatically on start by calling [method OS.set_native_icon]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:219
+#: doc/classes/ProjectSettings.xml:220
msgid ""
"Time samples for frame deltas are subject to random variation introduced by "
"the platform, even when frames are displayed at regular intervals thanks to "
@@ -43730,14 +43961,14 @@ msgid ""
"adequate to render frames at the refresh rate."
msgstr ""
-#: doc/classes/ProjectSettings.xml:224
+#: doc/classes/ProjectSettings.xml:225
msgid ""
"[b]Experimental.[/b] Shifts the measurement of delta time for each frame to "
"just after the drawing has taken place. This may lead to more consistent "
"deltas and a reduction in frame stutters."
msgstr ""
-#: doc/classes/ProjectSettings.xml:227
+#: doc/classes/ProjectSettings.xml:228
msgid ""
"If [code]true[/code], disables printing to standard error. If [code]true[/"
"code], this also hides error and warning messages printed by [method "
@@ -43746,7 +43977,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:231
+#: doc/classes/ProjectSettings.xml:232
msgid ""
"If [code]true[/code], disables printing to standard output. This is "
"equivalent to starting the editor or project with the [code]--quiet[/code] "
@@ -43754,7 +43985,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:235
+#: doc/classes/ProjectSettings.xml:236
msgid ""
"If [code]true[/code], flushes the standard output stream every time a line "
"is printed. This affects both terminal logging and file logging.\n"
@@ -43770,20 +44001,20 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:241
+#: doc/classes/ProjectSettings.xml:242
msgid ""
"Debug build override for [member application/run/flush_stdout_on_print], as "
"performance is less important during debugging.\n"
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:245
+#: doc/classes/ProjectSettings.xml:246
msgid ""
"Forces a delay between frames in the main loop (in milliseconds). This may "
"be useful if you plan to disable vertical synchronization."
msgstr ""
-#: doc/classes/ProjectSettings.xml:248
+#: doc/classes/ProjectSettings.xml:249
msgid ""
"If [code]true[/code], enables low-processor usage mode. This setting only "
"works on desktop platforms. The screen is not redrawn if nothing changes "
@@ -43791,75 +44022,81 @@ msgid ""
"useless (and can hurt performance) in most games."
msgstr ""
-#: doc/classes/ProjectSettings.xml:251
+#: doc/classes/ProjectSettings.xml:252
msgid ""
"Amount of sleeping between frames when the low-processor usage mode is "
"enabled (in microseconds). Higher values will result in lower CPU usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:254
+#: doc/classes/ProjectSettings.xml:255
msgid "Path to the main scene file that will be loaded when the project runs."
msgstr ""
-#: doc/classes/ProjectSettings.xml:257 doc/classes/ProjectSettings.xml:260
+#: doc/classes/ProjectSettings.xml:258 doc/classes/ProjectSettings.xml:261
msgid ""
"Audio buses will disable automatically when sound goes below a given dB "
"threshold for a given time. This saves CPU as effects assigned to that bus "
"will no longer do any processing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:263
+#: doc/classes/ProjectSettings.xml:264
msgid ""
"Default [AudioBusLayout] resource file to use in the project, unless "
"overridden by the scene."
msgstr ""
-#: doc/classes/ProjectSettings.xml:266
+#: doc/classes/ProjectSettings.xml:267
msgid ""
"Specifies the audio driver to use. This setting is platform-dependent as "
"each platform supports different audio drivers. If left empty, the default "
"audio driver will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:269
+#: doc/classes/ProjectSettings.xml:270
msgid ""
"If [code]true[/code], microphone input will be allowed. This requires "
"appropriate permissions to be set when exporting to Android or iOS."
msgstr ""
-#: doc/classes/ProjectSettings.xml:272
+#: doc/classes/ProjectSettings.xml:273
msgid ""
"The mixing rate used for audio (in Hz). In general, it's better to not touch "
"this and leave it to the host operating system."
msgstr ""
-#: doc/classes/ProjectSettings.xml:275
+#: doc/classes/ProjectSettings.xml:276
msgid ""
"Safer override for [member audio/mix_rate] in the Web platform. Here "
"[code]0[/code] means \"let the browser choose\" (since some browsers do not "
"like forcing the mix rate)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:278
+#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:281
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:284
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:287
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43869,7 +44106,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:290
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43879,27 +44116,27 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:293
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:296
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
-#: doc/classes/ProjectSettings.xml:299
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:302
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -43907,81 +44144,81 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:305
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:308
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:311
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:314
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:317
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr ""
-#: doc/classes/ProjectSettings.xml:320
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:323
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:326
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:329
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:332
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:335
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:338
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:341
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -43989,109 +44226,109 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:344
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:347
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:350
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:353
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:356
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:359
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:362
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:365
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:368
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:371
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:374
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:377
+#: doc/classes/ProjectSettings.xml:380
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:380
+#: doc/classes/ProjectSettings.xml:383
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:383
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:386
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:389
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:392
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:395
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:398
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -44102,91 +44339,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:403
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:406
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:409
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:412
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:415
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:418
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:421
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:424
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:427
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:430
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:433
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:436
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:439
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr ""
-#: doc/classes/ProjectSettings.xml:442
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:445
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:448
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:451
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -44195,13 +44432,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:455
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:458
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -44211,7 +44448,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:463
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -44219,19 +44456,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:468
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:472
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:476
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -44245,45 +44482,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:481
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:484
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:488
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:491
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:494
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:497
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:500
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -44292,7 +44529,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:503
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -44303,7 +44540,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:507
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -44319,14 +44556,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:515
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:518
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -44334,49 +44571,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:521
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:524
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:529
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:532
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:535
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:538
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:541
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:544
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:547
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -44385,7 +44622,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:551
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44393,7 +44630,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:555
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44401,7 +44638,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:559
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44411,7 +44648,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:563
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -44420,7 +44657,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:567
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -44429,7 +44666,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:571
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44439,7 +44676,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:575
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44447,7 +44684,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:579
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -44457,7 +44694,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:583
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -44467,7 +44704,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:587
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44475,7 +44712,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:591
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -44484,7 +44721,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:595
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44492,7 +44729,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:599
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -44504,477 +44741,477 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:605
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:608
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:611
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:614
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:617
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:620
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:623
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:626
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:629
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:632
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:635
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:638
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:641
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:644
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:647
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:650
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:653
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:656
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:659
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:662
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:665
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:668
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:671
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:674
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:677
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:680
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:683
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:686
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:689
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:692
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:695
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:698
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:701
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:704
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:707
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:710
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:713
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:716
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:719
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:722
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:725
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:728
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:731
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:734
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:737
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:740
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:743
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:746
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:749
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:752
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:755
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:758
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:761
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:764
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:767
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:770
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:773
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:776
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:779
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:782
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:785
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:788
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:791
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:794
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:797
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:800
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:803
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:806
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:809
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:812
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:815
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:818
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:821
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:824
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:827
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:830
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:833
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:836
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:839
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:842
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:845
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:848
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:851
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:854
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:857
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:860
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:863
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:866
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:869
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:872
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:875
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:878
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:881
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr ""
-#: doc/classes/ProjectSettings.xml:884
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:887
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:890
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:893
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:896
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:899
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:902
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:905
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:908
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:911
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:914
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:917
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:920
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:923
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:926
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:929
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:932
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:935
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:938
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:941
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:946
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:949
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -44982,92 +45219,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:952
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:955
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:958
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:961
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:964
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:967
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:970
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:973
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:976
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:979
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:982
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:985
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:988
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:991
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:994
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:997
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1000
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1003
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -45077,33 +45314,33 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1007
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1010
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1013
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1017
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1021
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45116,7 +45353,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1025
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45128,7 +45365,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1033
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45140,7 +45377,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1041
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45153,7 +45390,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1045
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -45161,28 +45398,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1049
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1053
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1056
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1059
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -45192,25 +45429,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1063
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1066
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1069
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1072
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45223,7 +45460,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1076
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45235,7 +45472,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1084
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45247,7 +45484,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1092
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45260,13 +45497,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1096
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1099
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -45274,11 +45511,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1103
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1106
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -45292,7 +45529,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1112
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -45301,7 +45538,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1116
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -45317,7 +45554,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1121
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -45327,7 +45564,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1125
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45337,7 +45574,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1129
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -45348,7 +45585,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1133
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45358,7 +45595,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1137
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -45366,7 +45603,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1141
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -45377,7 +45614,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1145
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -45392,7 +45629,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1151
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -45401,13 +45638,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1156
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1159
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -45416,7 +45653,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1162
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -45426,7 +45663,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1165
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -45438,7 +45675,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1168
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -45448,24 +45685,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1171
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1174
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1177
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1180
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -45474,7 +45711,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1183
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -45482,7 +45719,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1186
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -45491,7 +45728,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1189
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -45501,7 +45738,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1193
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -45509,31 +45746,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1197
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1200
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1203
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1206
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1209
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -45541,7 +45778,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1212
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -45551,46 +45788,53 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1215
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1218
+#: doc/classes/ProjectSettings.xml:1221
+msgid ""
+"iOS specific override for [member rendering/gles2/compatibility/"
+"disable_half_float], due to poor support for half-float vertex compression "
+"on many devices."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1224
msgid ""
-"If [code]true[/code] and available on the target device, enables high "
-"floating point precision for all shader computations in GLES2.\n"
+"If [code]true[/code] and available on the target Android device, enables "
+"high floating point precision for all shader computations in GLES2.\n"
"[b]Warning:[/b] High floating point precision can be extremely slow on older "
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1225
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1228
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1231
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1234
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -45598,7 +45842,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1237
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -45608,7 +45852,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1240
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -45617,7 +45861,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1243
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -45626,20 +45870,20 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1246
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1249
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1252
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -45648,7 +45892,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1255
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -45656,7 +45900,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1258
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -45665,7 +45909,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -45675,20 +45919,20 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1267
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1274
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -45697,13 +45941,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -45713,46 +45957,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1293
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1296
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1299
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1302
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1305
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -45762,7 +46006,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -45774,7 +46018,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -45782,7 +46026,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1316
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -45790,7 +46034,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -45799,7 +46043,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1323
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -45813,7 +46057,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1328
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -45823,7 +46067,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1331
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -45832,7 +46076,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1334
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -45842,54 +46086,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1337
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1340
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1343
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1346
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1349
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1352
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1355
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1358
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -45900,61 +46144,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1365
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1368
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1371
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1374
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1377
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1380
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1383
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1386
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -45965,7 +46209,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -45974,26 +46218,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1393 doc/classes/ProjectSettings.xml:1396
#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1405
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1408
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1411
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -46004,20 +46248,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1418
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -46029,52 +46273,52 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1428
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1435
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1438
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1441
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1444
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1447
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1450
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1453
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -46082,7 +46326,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -46092,10 +46336,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -46104,10 +46348,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -46116,10 +46360,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -46128,10 +46372,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -46140,10 +46384,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -46807,40 +47051,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr ""
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -46848,14 +47106,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -49190,6 +49448,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -49207,7 +49481,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -49215,11 +49489,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -49229,19 +49503,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -54656,20 +54930,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -54680,28 +54959,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -54713,19 +54992,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
@@ -57512,26 +57791,33 @@ msgid "Text [Color] used when the [ToolButton] is disabled."
msgstr ""
#: doc/classes/ToolButton.xml:39
-msgid "Text [Color] used when the [ToolButton] is being hovered."
+msgid ""
+"Text [Color] used when the [ToolButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/ToolButton.xml:42
-msgid "Text [Color] used when the [ToolButton] is being pressed."
+msgid "Text [Color] used when the [ToolButton] is being hovered."
msgstr ""
#: doc/classes/ToolButton.xml:45
-msgid "[StyleBox] used when the [ToolButton] is being hovered."
+msgid "Text [Color] used when the [ToolButton] is being pressed."
msgstr ""
#: doc/classes/ToolButton.xml:48
-msgid "The horizontal space between [ToolButton]'s icon and text."
+msgid "[StyleBox] used when the [ToolButton] is being hovered."
msgstr ""
#: doc/classes/ToolButton.xml:51
-msgid "Default [StyleBox] for the [ToolButton]."
+msgid "The horizontal space between [ToolButton]'s icon and text."
msgstr ""
#: doc/classes/ToolButton.xml:54
+msgid "Default [StyleBox] for the [ToolButton]."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:57
msgid "[StyleBox] used when the [ToolButton] is being pressed."
msgstr ""
diff --git a/doc/translations/ca.po b/doc/translations/ca.po
index 3c108f984b..02a0705fef 100644
--- a/doc/translations/ca.po
+++ b/doc/translations/ca.po
@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2021-10-10 14:03+0000\n"
+"PO-Revision-Date: 2021-10-21 10:30+0000\n"
"Last-Translator: Xavier Gomez <hiulit@gmail.com>\n"
"Language-Team: Catalan <https://hosted.weblate.org/projects/godot-engine/"
"godot-class-reference/ca/>\n"
@@ -21,44 +21,43 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.9-dev\n"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Description"
msgstr "Descripció"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Tutorials"
msgstr "Tutorials"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Properties"
msgstr "Propietats"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Methods"
msgstr "Mètodes"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Theme Properties"
msgstr "Propietats del tema"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Signals"
msgstr "Senyals"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Enumerations"
msgstr "Enumeracions"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Constants"
msgstr "Constants"
-#: doc/tools/makerst.py
-#, fuzzy
+#: doc/tools/make_rst.py
msgid "Property Descriptions"
msgstr "Descripcions de la Propietat"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Method Descriptions"
msgstr "Descripcions dels Mètodes"
@@ -92,10 +91,10 @@ msgstr ""
"Retorna un color construït a partir dels nombres enters dels canals "
"vermells, verds, blaus i alfa. Cada canal ha de tenir 8 bits d'informació "
"que van del 0 al 255.\n"
-"[code] la xarxa R8 [/code]\n"
-"[code] G8 [/code] canal verd\n"
-"[code] B8 [/code] canal blau\n"
-"[code] A8 [/code] canal alfa\n"
+"[code]r8[/code] canal vermell\n"
+"[code]g8[/code] canal verd\n"
+"[code]b8[/code] canal blau\n"
+"[code]a8[/code] canal alfa\n"
"[codeblock]\n"
"vermell = Color8(255, 0, 0)\n"
"[/codeblock]"
@@ -164,12 +163,12 @@ msgid ""
msgstr ""
"Retorna l'arc de sinus de [code]s[/code] en radians. S'utilitza per a "
"obtenir l'angle de sinus [code]s[/code]. [code]s[/code] ha d'estar entre "
-"[code]-1.0[/ code] i [code]1.0[/code] (inclòs), en cas contrari, [method "
+"[code]-1.0[/code] i [code]1.0[/code] (inclòs), en cas contrari, [method "
"asin] retornarà [constant NAN].\n"
"[codeblock]\n"
"# s és 0.523599 o 30 graus si es converteix amb rad2deg(s)\n"
"s = asin(0.5)\n"
-"[/ codeblock]"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:78
msgid ""
@@ -3671,22 +3670,20 @@ msgstr ""
#: doc/classes/Rect2.xml:12 doc/classes/Transform.xml:11
#: doc/classes/Transform2D.xml:11 doc/classes/Vector2.xml:11
#: doc/classes/Vector3.xml:11
-#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/math/index.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/math/index.html"
+msgstr "https://docs.godotengine.org/en/3.4/tutorials/math/index.html"
#: doc/classes/AABB.xml:13 doc/classes/Rect2.xml:13 doc/classes/Vector2.xml:12
#: doc/classes/Vector3.xml:12
-#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/math/vector_math.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/math/index.html"
+msgstr "https://docs.godotengine.org/en/3.4/tutorials/math/vector_math.html"
#: doc/classes/AABB.xml:14 doc/classes/Rect2.xml:14 doc/classes/Vector2.xml:13
#: doc/classes/Vector3.xml:13
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/math/vectors_advanced.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/math/index.html"
+msgstr ""
+"https://docs.godotengine.org/en/3.4/tutorials/math/vectors_advanced.html"
#: doc/classes/AABB.xml:22
msgid "Constructs an [AABB] from a position and size."
@@ -3704,112 +3701,121 @@ msgid ""
msgstr ""
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr ""
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
msgstr ""
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
msgstr ""
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
msgstr ""
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr ""
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr ""
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr ""
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
msgstr ""
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr ""
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
msgstr ""
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
msgstr ""
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr ""
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
"positive.\n"
@@ -4013,10 +4019,10 @@ msgstr ""
#: doc/classes/AnimatedSprite.xml:11 doc/classes/AnimatedSprite3D.xml:10
#: doc/classes/AnimationPlayer.xml:13
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/2d/2d_sprite_animation.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html"
+msgstr ""
+"https://docs.godotengine.org/en/3.4/tutorials/2d/2d_sprite_animation.html"
#: doc/classes/AnimatedSprite.xml:12 doc/classes/Area2D.xml:11
#: doc/classes/AudioStreamPlayer.xml:12 doc/classes/Button.xml:24
@@ -4025,9 +4031,9 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html"
#: doc/classes/InputEvent.xml:12 doc/classes/InputEventAction.xml:11
#: doc/classes/Label.xml:12 doc/classes/Particles2D.xml:15
#: doc/classes/Timer.xml:11 doc/classes/VisibilityNotifier2D.xml:12
-#, fuzzy
msgid "https://godotengine.org/asset-library/asset/515"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgstr ""
+"https://docs.godotengine.org/en/3.4/tutorials/2d/2d_sprite_animation.html"
#: doc/classes/AnimatedSprite.xml:18 doc/classes/AnimatedSprite3D.xml:16
msgid "Returns [code]true[/code] if an animation is currently being played."
@@ -4241,9 +4247,9 @@ msgid ""
msgstr ""
#: doc/classes/Animation.xml:20 doc/classes/AnimationPlayer.xml:12
-#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/animation/index.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/animation/index.html"
+msgstr ""
+"https://docs.godotengine.org/en/3.4/tutorials/2d/2d_sprite_animation.html"
#: doc/classes/Animation.xml:28
msgid "Adds a track to the Animation."
@@ -4690,12 +4696,10 @@ msgstr ""
#: doc/classes/AnimationNodeTimeSeek.xml:21
#: doc/classes/AnimationNodeTransition.xml:10 doc/classes/AnimationTree.xml:11
#: doc/classes/AnimationTreePlayer.xml:12
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/animation/animation_tree.html"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree."
-"html"
+"https://docs.godotengine.org/en/3.4/tutorials/animation/animation_tree.html"
#: doc/classes/AnimationNode.xml:18
msgid ""
@@ -4887,16 +4891,15 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
#: doc/classes/Quat.xml:13 doc/classes/Skeleton.xml:13
#: doc/classes/SpotLight.xml:12 doc/classes/StaticBody.xml:12
#: doc/classes/WorldEnvironment.xml:15
-#, fuzzy
msgid "https://godotengine.org/asset-library/asset/678"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgstr "https://godotengine.org/asset-library/asset/678"
#: doc/classes/AnimationNodeAnimation.xml:4
msgid "Input animation to use in an [AnimationNodeBlendTree]."
@@ -4919,9 +4922,8 @@ msgstr ""
#: doc/classes/KinematicBody.xml:14 doc/classes/Mesh.xml:12
#: doc/classes/MeshInstance.xml:12 doc/classes/MeshLibrary.xml:11
#: doc/classes/ProjectSettings.xml:14 doc/classes/Transform.xml:15
-#, fuzzy
msgid "https://godotengine.org/asset-library/asset/125"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgstr "https://godotengine.org/asset-library/asset/125"
#: doc/classes/AnimationNodeAnimation.xml:18
msgid ""
@@ -6317,27 +6319,30 @@ msgstr ""
#: doc/classes/Area.xml:11 doc/classes/QuadMesh.xml:10
#: doc/classes/Viewport.xml:17 doc/classes/ViewportTexture.xml:11
-#, fuzzy
msgid "https://godotengine.org/asset-library/asset/127"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgstr "https://godotengine.org/asset-library/asset/127"
#: doc/classes/Area.xml:17
msgid ""
-"Returns a list of intersecting [Area]s. For performance reasons (collisions "
-"are all processed at the same time) this list is modified once during the "
-"physics step, not immediately after objects are moved. Consider using "
-"signals instead."
+"Returns a list of intersecting [Area]s. The overlapping area's [member "
+"CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:23
+#: doc/classes/Area.xml:24
msgid ""
-"Returns a list of intersecting [PhysicsBody]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody]s. The overlapping body's "
+"[member CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:30
+#: doc/classes/Area.xml:32
msgid ""
"If [code]true[/code], the given area overlaps the Area.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6345,7 +6350,7 @@ msgid ""
"physics step. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:38
+#: doc/classes/Area.xml:40
msgid ""
"If [code]true[/code], the given physics body overlaps the Area.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6356,7 +6361,7 @@ msgid ""
"their tiles with collision shapes as a virtual physics body)."
msgstr ""
-#: doc/classes/Area.xml:46
+#: doc/classes/Area.xml:48
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
"velocity lost per second.\n"
@@ -6364,41 +6369,41 @@ msgid ""
"details about damping."
msgstr ""
-#: doc/classes/Area.xml:50 doc/classes/Area2D.xml:52
+#: doc/classes/Area.xml:52 doc/classes/Area2D.xml:54
msgid "The name of the area's audio bus."
msgstr ""
-#: doc/classes/Area.xml:53 doc/classes/Area2D.xml:55
+#: doc/classes/Area.xml:55 doc/classes/Area2D.xml:57
msgid ""
"If [code]true[/code], the area's audio bus overrides the default audio bus."
msgstr ""
-#: doc/classes/Area.xml:56
+#: doc/classes/Area.xml:58
msgid ""
"The area's gravity intensity (in meters per second squared). This value "
"multiplies the gravity vector. This is useful to alter the force of gravity "
"without altering its direction."
msgstr ""
-#: doc/classes/Area.xml:59 doc/classes/Area2D.xml:61
+#: doc/classes/Area.xml:61 doc/classes/Area2D.xml:63
msgid ""
"The falloff factor for point gravity. The greater the value, the faster "
"gravity decreases with distance."
msgstr ""
-#: doc/classes/Area.xml:62 doc/classes/Area2D.xml:64
+#: doc/classes/Area.xml:64 doc/classes/Area2D.xml:66
msgid ""
"If [code]true[/code], gravity is calculated from a point (set via [member "
"gravity_vec]). See also [member space_override]."
msgstr ""
-#: doc/classes/Area.xml:65 doc/classes/Area2D.xml:67
+#: doc/classes/Area.xml:67 doc/classes/Area2D.xml:69
msgid ""
"The area's gravity vector (not normalized). If gravity is a point (see "
"[member gravity_point]), this will be the point of attraction."
msgstr ""
-#: doc/classes/Area.xml:68
+#: doc/classes/Area.xml:70
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
"velocity lost per second.\n"
@@ -6406,61 +6411,61 @@ msgid ""
"about damping."
msgstr ""
-#: doc/classes/Area.xml:72 doc/classes/Area2D.xml:74
+#: doc/classes/Area.xml:74 doc/classes/Area2D.xml:76
msgid "If [code]true[/code], other monitoring areas can detect this area."
msgstr ""
-#: doc/classes/Area.xml:75 doc/classes/Area2D.xml:77
+#: doc/classes/Area.xml:77 doc/classes/Area2D.xml:79
msgid ""
"If [code]true[/code], the area detects bodies or areas entering and exiting "
"it."
msgstr ""
-#: doc/classes/Area.xml:78 doc/classes/Area2D.xml:80
+#: doc/classes/Area.xml:80 doc/classes/Area2D.xml:82
msgid "The area's priority. Higher priority areas are processed first."
msgstr ""
-#: doc/classes/Area.xml:81
+#: doc/classes/Area.xml:83
msgid ""
"The degree to which this area applies reverb to its associated audio. Ranges "
"from [code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
msgstr ""
-#: doc/classes/Area.xml:84
+#: doc/classes/Area.xml:86
msgid "If [code]true[/code], the area applies reverb to its associated audio."
msgstr ""
-#: doc/classes/Area.xml:87
+#: doc/classes/Area.xml:89
msgid "The reverb bus name to use for this area's associated audio."
msgstr ""
-#: doc/classes/Area.xml:90
+#: doc/classes/Area.xml:92
msgid ""
"The degree to which this area's reverb is a uniform effect. Ranges from "
"[code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
msgstr ""
-#: doc/classes/Area.xml:93 doc/classes/Area2D.xml:83
+#: doc/classes/Area.xml:95 doc/classes/Area2D.xml:85
msgid ""
"Override mode for gravity and damping calculations within this area. See "
"[enum SpaceOverride] for possible values."
msgstr ""
-#: doc/classes/Area.xml:100
+#: doc/classes/Area.xml:102
msgid ""
"Emitted when another Area enters this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
-#: doc/classes/Area.xml:107
+#: doc/classes/Area.xml:109
msgid ""
"Emitted when another Area exits this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
-#: doc/classes/Area.xml:117 doc/classes/Area.xml:130
+#: doc/classes/Area.xml:119 doc/classes/Area.xml:132
msgid ""
"Emitted when one of another Area's [Shape]s enters one of this Area's "
"[Shape]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6475,7 +6480,7 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:140
+#: doc/classes/Area.xml:142
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] enters this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -6484,7 +6489,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:147
+#: doc/classes/Area.xml:149
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] exits this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -6493,7 +6498,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:157 doc/classes/Area.xml:170
+#: doc/classes/Area.xml:159 doc/classes/Area.xml:172
msgid ""
"Emitted when one of a [PhysicsBody] or [GridMap]'s [Shape]s enters one of "
"this Area's [Shape]s. Requires [member monitoring] to be set to [code]true[/"
@@ -6510,29 +6515,29 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:180 doc/classes/Area2D.xml:170
+#: doc/classes/Area.xml:182 doc/classes/Area2D.xml:172
msgid "This area does not affect gravity/damping."
msgstr ""
-#: doc/classes/Area.xml:183 doc/classes/Area2D.xml:173
+#: doc/classes/Area.xml:185 doc/classes/Area2D.xml:175
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order)."
msgstr ""
-#: doc/classes/Area.xml:186 doc/classes/Area2D.xml:176
+#: doc/classes/Area.xml:188 doc/classes/Area2D.xml:178
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order), ignoring any lower priority areas."
msgstr ""
-#: doc/classes/Area.xml:189 doc/classes/Area2D.xml:179
+#: doc/classes/Area.xml:191 doc/classes/Area2D.xml:181
msgid ""
"This area replaces any gravity/damping, even the defaults, ignoring any "
"lower priority areas."
msgstr ""
-#: doc/classes/Area.xml:192 doc/classes/Area2D.xml:182
+#: doc/classes/Area.xml:194 doc/classes/Area2D.xml:184
msgid ""
"This area replaces any gravity/damping calculated so far (in [member "
"priority] order), but keeps calculating the rest of the areas."
@@ -6550,42 +6555,43 @@ msgid ""
msgstr ""
#: doc/classes/Area2D.xml:10
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/physics/using_area_2d.html"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/using_area_2d.html"
+"https://docs.godotengine.org/en/3.4/tutorials/physics/using_area_2d.html"
#: doc/classes/Area2D.xml:12 doc/classes/CollisionShape2D.xml:12
#: doc/classes/RectangleShape2D.xml:10
-#, fuzzy
msgid "https://godotengine.org/asset-library/asset/121"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgstr "https://godotengine.org/asset-library/asset/121"
#: doc/classes/Area2D.xml:13 doc/classes/Camera2D.xml:12
#: doc/classes/KinematicBody2D.xml:15 doc/classes/TileMap.xml:12
#: doc/classes/TileSet.xml:12
-#, fuzzy
msgid "https://godotengine.org/asset-library/asset/120"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgstr "https://godotengine.org/asset-library/asset/120"
#: doc/classes/Area2D.xml:19
msgid ""
-"Returns a list of intersecting [Area2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [Area2D]s. The overlapping area's [member "
+"CollisionObject2D.collision_layer] must be part of this area's [member "
+"CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:25
+#: doc/classes/Area2D.xml:26
msgid ""
-"Returns a list of intersecting [PhysicsBody2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody2D]s. The overlapping body's "
+"[member CollisionObject2D.collision_layer] must be part of this area's "
+"[member CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:32
+#: doc/classes/Area2D.xml:34
msgid ""
"If [code]true[/code], the given area overlaps the Area2D.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6593,7 +6599,7 @@ msgid ""
"the physics step. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:40
+#: doc/classes/Area2D.xml:42
msgid ""
"If [code]true[/code], the given physics body overlaps the Area2D.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6604,7 +6610,7 @@ msgid ""
"register their tiles with collision shapes as a virtual physics body)."
msgstr ""
-#: doc/classes/Area2D.xml:48
+#: doc/classes/Area2D.xml:50
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
"velocity lost per second.\n"
@@ -6612,14 +6618,14 @@ msgid ""
"details about damping."
msgstr ""
-#: doc/classes/Area2D.xml:58
+#: doc/classes/Area2D.xml:60
msgid ""
"The area's gravity intensity (in pixels per second squared). This value "
"multiplies the gravity vector. This is useful to alter the force of gravity "
"without altering its direction."
msgstr ""
-#: doc/classes/Area2D.xml:70
+#: doc/classes/Area2D.xml:72
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
"velocity lost per second.\n"
@@ -6627,21 +6633,21 @@ msgid ""
"about damping."
msgstr ""
-#: doc/classes/Area2D.xml:90
+#: doc/classes/Area2D.xml:92
msgid ""
"Emitted when another Area2D enters this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-#: doc/classes/Area2D.xml:97
+#: doc/classes/Area2D.xml:99
msgid ""
"Emitted when another Area2D exits this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-#: doc/classes/Area2D.xml:107
+#: doc/classes/Area2D.xml:109
msgid ""
"Emitted when one of another Area2D's [Shape2D]s enters one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6656,7 +6662,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:120
+#: doc/classes/Area2D.xml:122
msgid ""
"Emitted when one of another Area2D's [Shape2D]s exits one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6671,7 +6677,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:130
+#: doc/classes/Area2D.xml:132
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] enters this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -6680,7 +6686,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:137
+#: doc/classes/Area2D.xml:139
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] exits this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -6689,7 +6695,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:147
+#: doc/classes/Area2D.xml:149
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s enters one "
"of this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -6708,7 +6714,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:160
+#: doc/classes/Area2D.xml:162
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s exits one of "
"this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -7145,12 +7151,11 @@ msgid ""
msgstr ""
#: doc/classes/ArrayMesh.xml:29
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/content/procedural_geometry/"
"arraymesh.html"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/content/procedural_geometry/"
+"https://docs.godotengine.org/en/3.4/tutorials/content/procedural_geometry/"
"arraymesh.html"
#: doc/classes/ArrayMesh.xml:36
@@ -7457,9 +7462,8 @@ msgstr ""
#: doc/classes/ARVRCamera.xml:11 doc/classes/ARVRController.xml:12
#: doc/classes/ARVRInterface.xml:11 doc/classes/ARVROrigin.xml:13
#: doc/classes/ARVRPositionalTracker.xml:12 doc/classes/ARVRServer.xml:10
-#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/vr/index.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgstr "https://docs.godotengine.org/en/3.4/tutorials/vr/index.html"
#: doc/classes/ARVRController.xml:4
msgid "A spatial node representing a spatially-tracked controller."
@@ -8582,9 +8586,8 @@ msgstr ""
#: doc/classes/AudioEffect.xml:10 doc/classes/AudioEffectRecord.xml:11
#: doc/classes/AudioServer.xml:12 doc/classes/AudioStream.xml:12
#: doc/classes/AudioStreamPlayer.xml:15
-#, fuzzy
msgid "https://godotengine.org/asset-library/asset/527"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgstr "https://godotengine.org/asset-library/asset/527"
#: doc/classes/AudioEffectAmplify.xml:4
msgid ""
@@ -8885,10 +8888,8 @@ msgstr ""
#: doc/classes/AudioEffectFilter.xml:10
#: doc/classes/AudioEffectHighShelfFilter.xml:9
#: doc/classes/AudioEffectLowShelfFilter.xml:9 doc/classes/AudioServer.xml:10
-#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/audio/audio_buses.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/audio_buses.html"
+msgstr "https://docs.godotengine.org/en/3.4/tutorials/audio/audio_buses.html"
#: doc/classes/AudioEffectDistortion.xml:18
msgid "Distortion power. Value can range from 0 to 1."
@@ -9278,12 +9279,11 @@ msgid ""
msgstr ""
#: doc/classes/AudioEffectRecord.xml:10
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/audio/"
"recording_with_microphone.html"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/"
+"https://docs.godotengine.org/en/3.4/tutorials/audio/"
"recording_with_microphone.html"
#: doc/classes/AudioEffectRecord.xml:17
@@ -9422,15 +9422,13 @@ msgid ""
msgstr ""
#: doc/classes/AudioServer.xml:11 doc/classes/AudioStreamPlayer.xml:13
-#, fuzzy
msgid "https://godotengine.org/asset-library/asset/525"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgstr "https://godotengine.org/asset-library/asset/525"
#: doc/classes/AudioServer.xml:13 doc/classes/AudioStream.xml:13
#: doc/classes/AudioStreamPlayer.xml:16 doc/classes/CanvasItem.xml:17
-#, fuzzy
msgid "https://godotengine.org/asset-library/asset/528"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgstr "https://godotengine.org/asset-library/asset/528"
#: doc/classes/AudioServer.xml:20
msgid "Adds a bus at [code]at_position[/code]."
@@ -9657,17 +9655,14 @@ msgstr ""
#: doc/classes/AudioStream.xml:10 doc/classes/AudioStreamPlayer.xml:11
#: doc/classes/AudioStreamPlayer2D.xml:12
#: doc/classes/AudioStreamPlayer3D.xml:13
-#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/audio/audio_streams.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/audio_streams.html"
+msgstr "https://docs.godotengine.org/en/3.4/tutorials/audio/audio_streams.html"
#: doc/classes/AudioStream.xml:11 doc/classes/AudioStreamGenerator.xml:12
#: doc/classes/AudioStreamGeneratorPlayback.xml:10
#: doc/classes/AudioStreamPlayback.xml:10 doc/classes/AudioStreamPlayer.xml:14
-#, fuzzy
msgid "https://godotengine.org/asset-library/asset/526"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgstr "https://godotengine.org/asset-library/asset/526"
#: doc/classes/AudioStream.xml:19
msgid "Returns the length of the audio stream in seconds."
@@ -10278,42 +10273,45 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
-#, fuzzy
+#: doc/classes/BakedLightmap.xml:12
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
+msgstr "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
-"no save path is provided it will try to match the path from the current "
+"no root node is provided, parent of this node will be used as root instead. "
+"If no save path is provided it will try to match the path from the current "
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -10327,62 +10325,62 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
msgid "The rotation of the baked custom sky."
msgstr ""
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -10390,35 +10388,35 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -10426,13 +10424,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -10444,65 +10442,77 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr ""
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
msgid "Baking was successful."
msgstr ""
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr ""
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr ""
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr ""
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:133
+#: doc/classes/BakedLightmap.xml:132
+msgid ""
+"Returns if lightmapper can't be created. Unless you are using a custom "
+"lightmapper, please report this as bug."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:135
+msgid ""
+"There is no root node to start baking from. Either provide [code]from_node[/"
+"code] argument or attach this node to a parent that should be used as root."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:136
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:139
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:142
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -10707,26 +10717,22 @@ msgstr ""
#: doc/classes/Basis.xml:14 doc/classes/Transform.xml:12
#: doc/classes/Transform2D.xml:12
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/math/matrices_and_transforms."
"html"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/math/"
-"matrices_and_transforms.html"
+"https://docs.godotengine.org/en/3.4/tutorials/math/matrices_and_transforms."
+"html"
#: doc/classes/Basis.xml:15 doc/classes/Transform.xml:13
-#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/using_transforms.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_transforms.html"
+msgstr "https://docs.godotengine.org/en/3.4/tutorials/3d/using_transforms.html"
#: doc/classes/Basis.xml:16 doc/classes/Line2D.xml:11
#: doc/classes/Transform.xml:14 doc/classes/Transform2D.xml:13
#: doc/classes/Vector2.xml:15 doc/classes/Vector3.xml:15
-#, fuzzy
msgid "https://godotengine.org/asset-library/asset/584"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgstr "https://godotengine.org/asset-library/asset/584"
#: doc/classes/Basis.xml:18 doc/classes/CylinderShape.xml:12
#: doc/classes/Dictionary.xml:88 doc/classes/DynamicFont.xml:18
@@ -10737,15 +10743,13 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
#: doc/classes/StaticBody.xml:13 doc/classes/SurfaceTool.xml:22
#: doc/classes/TextureButton.xml:12 doc/classes/TextureRect.xml:11
#: doc/classes/Thread.xml:13 doc/classes/VBoxContainer.xml:10
-#, fuzzy
msgid "https://godotengine.org/asset-library/asset/676"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgstr "https://godotengine.org/asset-library/asset/676"
#: doc/classes/Basis.xml:19 doc/classes/Line2D.xml:12
#: doc/classes/Transform.xml:16 doc/classes/Transform2D.xml:14
-#, fuzzy
msgid "https://godotengine.org/asset-library/asset/583"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgstr "https://godotengine.org/asset-library/asset/583"
#: doc/classes/Basis.xml:26
msgid "Constructs a pure rotation basis matrix from the given quaternion."
@@ -10958,8 +10962,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -11223,17 +11230,15 @@ msgstr ""
#: doc/classes/CylinderShape.xml:11 doc/classes/ProjectSettings.xml:13
#: doc/classes/RigidBody.xml:16 doc/classes/SphereShape.xml:10
#: doc/classes/StaticBody.xml:11
-#, fuzzy
msgid "https://godotengine.org/asset-library/asset/675"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgstr "https://godotengine.org/asset-library/asset/675"
#: doc/classes/BoxShape.xml:11 doc/classes/CollisionShape.xml:11
#: modules/gridmap/doc_classes/GridMap.xml:16 doc/classes/KinematicBody.xml:13
#: doc/classes/Mesh.xml:11 doc/classes/MeshInstance.xml:11
#: doc/classes/MeshLibrary.xml:10
-#, fuzzy
msgid "https://godotengine.org/asset-library/asset/126"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgstr "https://godotengine.org/asset-library/asset/126"
#: doc/classes/BoxShape.xml:18
msgid ""
@@ -11275,9 +11280,8 @@ msgstr ""
#: doc/classes/GridContainer.xml:12 doc/classes/OS.xml:10
#: doc/classes/PoolStringArray.xml:11 doc/classes/ProjectSettings.xml:15
#: doc/classes/ResourceLoader.xml:11 doc/classes/RichTextLabel.xml:17
-#, fuzzy
msgid "https://godotengine.org/asset-library/asset/677"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgstr "https://godotengine.org/asset-library/asset/677"
#: doc/classes/Button.xml:31
msgid ""
@@ -11347,26 +11351,33 @@ msgid "Text [Color] used when the [Button] is disabled."
msgstr ""
#: doc/classes/Button.xml:77
-msgid "Text [Color] used when the [Button] is being hovered."
+msgid ""
+"Text [Color] used when the [Button] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/Button.xml:80
-msgid "Text [Color] used when the [Button] is being pressed."
+msgid "Text [Color] used when the [Button] is being hovered."
msgstr ""
#: doc/classes/Button.xml:83
-msgid "[StyleBox] used when the [Button] is being hovered."
+msgid "Text [Color] used when the [Button] is being pressed."
msgstr ""
#: doc/classes/Button.xml:86
-msgid "The horizontal space between [Button]'s icon and text."
+msgid "[StyleBox] used when the [Button] is being hovered."
msgstr ""
#: doc/classes/Button.xml:89
-msgid "Default [StyleBox] for the [Button]."
+msgid "The horizontal space between [Button]'s icon and text."
msgstr ""
#: doc/classes/Button.xml:92
+msgid "Default [StyleBox] for the [Button]."
+msgstr ""
+
+#: doc/classes/Button.xml:95
msgid "[StyleBox] used when the [Button] is being pressed."
msgstr ""
@@ -11700,15 +11711,13 @@ msgstr ""
#: doc/classes/Camera2D.xml:13 doc/classes/TileMap.xml:13
#: doc/classes/TileSet.xml:13
-#, fuzzy
msgid "https://godotengine.org/asset-library/asset/112"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgstr "https://godotengine.org/asset-library/asset/112"
#: doc/classes/Camera2D.xml:14 doc/classes/Environment.xml:18
#: doc/classes/WorldEnvironment.xml:14
-#, fuzzy
msgid "https://godotengine.org/asset-library/asset/110"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgstr "https://godotengine.org/asset-library/asset/110"
#: doc/classes/Camera2D.xml:20
msgid "Aligns the camera to the tracked node."
@@ -12122,17 +12131,15 @@ msgstr ""
#: doc/classes/CanvasItem.xml:15 doc/classes/CanvasLayer.xml:10
#: doc/classes/InputEvent.xml:11 doc/classes/Viewport.xml:15
-#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/2d/2d_transforms.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html"
+msgstr "https://docs.godotengine.org/en/3.4/tutorials/2d/2d_transforms.html"
#: doc/classes/CanvasItem.xml:16 doc/classes/Control.xml:18
#: doc/classes/Node2D.xml:10
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/2d/custom_drawing_in_2d.html"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/custom_drawing_in_2d.html"
+"https://docs.godotengine.org/en/3.4/tutorials/2d/custom_drawing_in_2d.html"
#: doc/classes/CanvasItem.xml:23
msgid ""
@@ -12606,9 +12613,8 @@ msgid ""
msgstr ""
#: doc/classes/CanvasLayer.xml:11
-#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/2d/canvas_layers.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/2d/canvas_layers.html"
+msgstr "https://docs.godotengine.org/en/3.4/tutorials/2d/canvas_layers.html"
#: doc/classes/CanvasLayer.xml:18
msgid "Returns the RID of the canvas used by this layer."
@@ -12739,12 +12745,11 @@ msgstr ""
#: doc/classes/CharFXTransform.xml:10 doc/classes/RichTextEffect.xml:16
#: doc/classes/RichTextLabel.xml:15
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/gui/bbcode_in_richtextlabel."
"html"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/gui/bbcode_in_richtextlabel."
+"https://docs.godotengine.org/en/3.4/tutorials/gui/bbcode_in_richtextlabel."
"html"
#: doc/classes/CharFXTransform.xml:11 doc/classes/RichTextEffect.xml:17
@@ -12835,80 +12840,96 @@ msgstr ""
msgid "The check icon to display when the [CheckBox] is checked."
msgstr ""
-#: doc/classes/CheckBox.xml:30
+#: doc/classes/CheckBox.xml:28
+msgid "The check icon to display when the [CheckBox] is checked and disabled."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:31
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is disabled."
msgstr ""
-#: doc/classes/CheckBox.xml:33
+#: doc/classes/CheckBox.xml:34
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is focused."
msgstr ""
-#: doc/classes/CheckBox.xml:36
+#: doc/classes/CheckBox.xml:37
msgid "The [Font] to use for the [CheckBox] text."
msgstr ""
-#: doc/classes/CheckBox.xml:39
+#: doc/classes/CheckBox.xml:40
msgid "The [CheckBox] text's font color."
msgstr ""
-#: doc/classes/CheckBox.xml:42
+#: doc/classes/CheckBox.xml:43
msgid "The [CheckBox] text's font color when it's disabled."
msgstr ""
-#: doc/classes/CheckBox.xml:45
+#: doc/classes/CheckBox.xml:46
+msgid ""
+"The [CheckBox] text's font color when it's focused. Only replaces the normal "
+"text color of the checkbox. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:49
msgid "The [CheckBox] text's font color when it's hovered."
msgstr ""
-#: doc/classes/CheckBox.xml:48
+#: doc/classes/CheckBox.xml:52
msgid "The [CheckBox] text's font color when it's hovered and pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:51
+#: doc/classes/CheckBox.xml:55
msgid "The [CheckBox] text's font color when it's pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:54
+#: doc/classes/CheckBox.xml:58
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered."
msgstr ""
-#: doc/classes/CheckBox.xml:57
+#: doc/classes/CheckBox.xml:61
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered and "
"pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:60
+#: doc/classes/CheckBox.xml:64
msgid "The separation between the check icon and the text (in pixels)."
msgstr ""
-#: doc/classes/CheckBox.xml:63 doc/classes/CheckButton.xml:58
+#: doc/classes/CheckBox.xml:67 doc/classes/CheckButton.xml:61
msgid "The [StyleBox] to display as a background."
msgstr ""
-#: doc/classes/CheckBox.xml:66
+#: doc/classes/CheckBox.xml:70
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:69
+#: doc/classes/CheckBox.xml:73
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is checked."
msgstr ""
-#: doc/classes/CheckBox.xml:74
+#: doc/classes/CheckBox.xml:78
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is unchecked."
msgstr ""
-#: doc/classes/CheckBox.xml:79
+#: doc/classes/CheckBox.xml:83
msgid "The check icon to display when the [CheckBox] is unchecked."
msgstr ""
+#: doc/classes/CheckBox.xml:86
+msgid ""
+"The check icon to display when the [CheckBox] is unchecked and disabled."
+msgstr ""
+
#: doc/classes/CheckButton.xml:4
msgid "Checkable button. See also [CheckBox]."
msgstr ""
@@ -12952,49 +12973,56 @@ msgid "The [CheckButton] text's font color when it's disabled."
msgstr ""
#: doc/classes/CheckButton.xml:40
-msgid "The [CheckButton] text's font color when it's hovered."
+msgid ""
+"The [CheckButton] text's font color when it's focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/CheckButton.xml:43
-msgid "The [CheckButton] text's font color when it's hovered and pressed."
+msgid "The [CheckButton] text's font color when it's hovered."
msgstr ""
#: doc/classes/CheckButton.xml:46
-msgid "The [CheckButton] text's font color when it's pressed."
+msgid "The [CheckButton] text's font color when it's hovered and pressed."
msgstr ""
#: doc/classes/CheckButton.xml:49
+msgid "The [CheckButton] text's font color when it's pressed."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:52
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered."
msgstr ""
-#: doc/classes/CheckButton.xml:52
+#: doc/classes/CheckButton.xml:55
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered "
"and pressed."
msgstr ""
-#: doc/classes/CheckButton.xml:55
+#: doc/classes/CheckButton.xml:58
msgid "The separation between the toggle icon and the text (in pixels)."
msgstr ""
-#: doc/classes/CheckButton.xml:61
+#: doc/classes/CheckButton.xml:64
msgid "The icon to display when the [CheckButton] is unchecked."
msgstr ""
-#: doc/classes/CheckButton.xml:64
+#: doc/classes/CheckButton.xml:67
msgid "The icon to display when the [CheckButton] is unchecked and disabled."
msgstr ""
-#: doc/classes/CheckButton.xml:67
+#: doc/classes/CheckButton.xml:70
msgid "The icon to display when the [CheckButton] is checked."
msgstr ""
-#: doc/classes/CheckButton.xml:70
+#: doc/classes/CheckButton.xml:73
msgid "The icon to display when the [CheckButton] is checked and disabled."
msgstr ""
-#: doc/classes/CheckButton.xml:73
+#: doc/classes/CheckButton.xml:76
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is pressed."
msgstr ""
@@ -13635,13 +13663,12 @@ msgstr ""
#: doc/classes/PhysicsBody2D.xml:10 doc/classes/PhysicsDirectBodyState.xml:10
#: doc/classes/PhysicsDirectSpaceState.xml:10 doc/classes/RigidBody.xml:14
#: doc/classes/Shape.xml:10 doc/classes/Shape2D.xml:10
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/physics/physics_introduction."
"html"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"physics_introduction.html"
+"https://docs.godotengine.org/en/3.4/tutorials/physics/physics_introduction."
+"html"
#: doc/classes/CollisionShape.xml:19
msgid ""
@@ -13680,9 +13707,8 @@ msgstr ""
#: doc/classes/CollisionShape2D.xml:13 doc/classes/KinematicBody2D.xml:14
#: doc/classes/RectangleShape2D.xml:11 doc/classes/TileMap.xml:17
#: doc/classes/TileSet.xml:17
-#, fuzzy
msgid "https://godotengine.org/asset-library/asset/113"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgstr "https://godotengine.org/asset-library/asset/113"
#: doc/classes/CollisionShape2D.xml:19
msgid ""
@@ -13727,19 +13753,16 @@ msgid ""
msgstr ""
#: doc/classes/Color.xml:14 doc/classes/ColorPickerButton.xml:13
-#, fuzzy
msgid "https://godotengine.org/asset-library/asset/517"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgstr "https://godotengine.org/asset-library/asset/517"
#: doc/classes/Color.xml:15 doc/classes/ColorPicker.xml:11
-#, fuzzy
msgid "https://godotengine.org/asset-library/asset/146"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgstr "https://godotengine.org/asset-library/asset/146"
#: doc/classes/Color.xml:16 doc/classes/ColorPickerButton.xml:12
-#, fuzzy
msgid "https://godotengine.org/asset-library/asset/133"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgstr "https://godotengine.org/asset-library/asset/133"
#: doc/classes/Color.xml:23
msgid ""
@@ -14769,26 +14792,33 @@ msgid "Text [Color] used when the [ColorPickerButton] is disabled."
msgstr ""
#: doc/classes/ColorPickerButton.xml:80
-msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
+msgid ""
+"Text [Color] used when the [ColorPickerButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/ColorPickerButton.xml:83
-msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
+msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
msgstr ""
#: doc/classes/ColorPickerButton.xml:86
-msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
+msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
msgstr ""
#: doc/classes/ColorPickerButton.xml:89
-msgid "The horizontal space between [ColorPickerButton]'s icon and text."
+msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
msgstr ""
#: doc/classes/ColorPickerButton.xml:92
-msgid "Default [StyleBox] for the [ColorPickerButton]."
+msgid "The horizontal space between [ColorPickerButton]'s icon and text."
msgstr ""
#: doc/classes/ColorPickerButton.xml:95
+msgid "Default [StyleBox] for the [ColorPickerButton]."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:98
msgid "[StyleBox] used when the [ColorPickerButton] is being pressed."
msgstr ""
@@ -15186,22 +15216,18 @@ msgid ""
msgstr ""
#: doc/classes/Control.xml:17
-#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/gui/index.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/gui/index.html"
+msgstr "https://docs.godotengine.org/en/3.4/tutorials/gui/index.html"
#: doc/classes/Control.xml:19
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/gui/control_node_gallery.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/gui/index.html"
+msgstr ""
+"https://docs.godotengine.org/en/3.4/tutorials/gui/control_node_gallery.html"
#: doc/classes/Control.xml:20
-#, fuzzy
msgid "https://github.com/godotengine/godot-demo-projects/tree/master/gui"
-msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
+msgstr "https://github.com/godotengine/godot-demo-projects/tree/master/gui"
#: doc/classes/Control.xml:26
msgid ""
@@ -17226,11 +17252,10 @@ msgid ""
msgstr ""
#: doc/classes/CPUParticles2D.xml:12 doc/classes/Particles2D.xml:14
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/2d/particle_systems_2d.html"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/particle_systems_2d.html"
+"https://docs.godotengine.org/en/3.4/tutorials/2d/particle_systems_2d.html"
#: doc/classes/CPUParticles2D.xml:19
msgid ""
@@ -17941,13 +17966,12 @@ msgid ""
msgstr ""
#: modules/mono/doc_classes/CSharpScript.xml:11
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/3.4/getting_started/scripting/c_sharp/index."
"html"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/c_sharp/"
-"index.html"
+"https://docs.godotengine.org/en/3.4/getting_started/scripting/c_sharp/index."
+"html"
#: modules/mono/doc_classes/CSharpScript.xml:18
#: modules/gdnative/doc_classes/PluginScript.xml:13
@@ -18827,12 +18851,11 @@ msgid ""
msgstr ""
#: doc/classes/Dictionary.xml:87
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/3.4/getting_started/scripting/gdscript/"
"gdscript_basics.html#dictionary"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
+"https://docs.godotengine.org/en/3.4/getting_started/scripting/gdscript/"
"gdscript_basics.html#dictionary"
#: doc/classes/Dictionary.xml:94
@@ -18928,11 +18951,10 @@ msgstr ""
#: doc/classes/DirectionalLight.xml:10 doc/classes/Light.xml:10
#: doc/classes/OmniLight.xml:11 doc/classes/SpotLight.xml:11
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/3d/lights_and_shadows.html"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/lights_and_shadows.html"
+"https://docs.godotengine.org/en/3.4/tutorials/3d/lights_and_shadows.html"
#: doc/classes/DirectionalLight.xml:16
msgid ""
@@ -19057,13 +19079,12 @@ msgid ""
msgstr ""
#: doc/classes/Directory.xml:28 doc/classes/File.xml:28
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/3.4/getting_started/step_by_step/filesystem."
"html"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/step_by_step/"
-"filesystem.html"
+"https://docs.godotengine.org/en/3.4/getting_started/step_by_step/filesystem."
+"html"
#: doc/classes/Directory.xml:35
msgid ""
@@ -20018,7 +20039,8 @@ msgid ""
"get_resource_type]. They may optionally specify some import presets that "
"affect the import process. EditorImportPlugins are responsible for creating "
"the resources and saving them in the [code].import[/code] directory (see "
-"[member ProjectSettings.application/config/project_data_dir_name]).\n"
+"[member ProjectSettings.application/config/"
+"use_hidden_project_data_directory]).\n"
"Below is an example EditorImportPlugin that imports a [Mesh] from a file "
"with the extension \".special\" or \".spec\":\n"
"[codeblock]\n"
@@ -20064,13 +20086,12 @@ msgid ""
msgstr ""
#: doc/classes/EditorImportPlugin.xml:51 doc/classes/ResourceImporter.xml:10
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/plugins/editor/import_plugins."
"html"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
+"https://docs.godotengine.org/en/3.4/tutorials/plugins/editor/import_plugins."
+"html"
#: doc/classes/EditorImportPlugin.xml:58
msgid ""
@@ -20145,7 +20166,7 @@ msgstr ""
msgid ""
"Gets the extension used to save this resource in the [code].import[/code] "
"directory (see [member ProjectSettings.application/config/"
-"project_data_dir_name])."
+"use_hidden_project_data_directory])."
msgstr ""
#: doc/classes/EditorImportPlugin.xml:130
@@ -20246,13 +20267,12 @@ msgid ""
msgstr ""
#: doc/classes/EditorInspectorPlugin.xml:16
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/plugins/editor/"
"inspector_plugins.html"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
+"https://docs.godotengine.org/en/3.4/tutorials/plugins/editor/"
+"inspector_plugins.html"
#: doc/classes/EditorInspectorPlugin.xml:23
msgid "Adds a custom control, which is not necessarily a property editor."
@@ -20506,10 +20526,9 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml:10
-#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/plugins/editor/index.html"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/index.html"
+"https://docs.godotengine.org/en/3.4/tutorials/plugins/editor/index.html"
#: doc/classes/EditorPlugin.xml:18
msgid ""
@@ -21180,8 +21199,11 @@ msgstr ""
msgid "Emitted when the value of the edited resource was changed."
msgstr ""
-#: doc/classes/EditorResourcePicker.xml:89
-msgid "Emitted when the resource value was set and user clicked to edit it."
+#: doc/classes/EditorResourcePicker.xml:90
+msgid ""
+"Emitted when the resource value was set and user clicked to edit it. When "
+"[code]edit[/code] is [code]true[/code], the signal was caused by the context "
+"menu \"Edit\" option."
msgstr ""
#: doc/classes/EditorResourcePreview.xml:4
@@ -21362,12 +21384,11 @@ msgid ""
msgstr ""
#: doc/classes/EditorScenePostImport.xml:29
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/3.4/getting_started/workflow/assets/"
"importing_scenes.html#custom-script"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/assets/"
+"https://docs.godotengine.org/en/3.4/getting_started/workflow/assets/"
"importing_scenes.html#custom-script"
#: doc/classes/EditorScenePostImport.xml:35
@@ -21783,13 +21804,12 @@ msgid ""
msgstr ""
#: doc/classes/EditorSpatialGizmoPlugin.xml:10
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/plugins/editor/spatial_gizmos."
"html"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"spatial_gizmos.html"
+"https://docs.godotengine.org/en/3.4/tutorials/plugins/editor/spatial_gizmos."
+"html"
#: doc/classes/EditorSpatialGizmoPlugin.xml:18
msgid ""
@@ -22299,27 +22319,24 @@ msgid ""
msgstr ""
#: doc/classes/Environment.xml:15 doc/classes/WorldEnvironment.xml:12
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/3d/"
"environment_and_post_processing.html"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/"
+"https://docs.godotengine.org/en/3.4/tutorials/3d/"
"environment_and_post_processing.html"
#: doc/classes/Environment.xml:16
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/3d/high_dynamic_range.html"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/high_dynamic_range.html"
+"https://docs.godotengine.org/en/3.4/tutorials/3d/high_dynamic_range.html"
#: doc/classes/Environment.xml:17 doc/classes/Material.xml:10
#: doc/classes/Mesh.xml:10 doc/classes/MeshInstance.xml:10
#: doc/classes/WorldEnvironment.xml:13
-#, fuzzy
msgid "https://godotengine.org/asset-library/asset/123"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgstr "https://godotengine.org/asset-library/asset/123"
#: doc/classes/Environment.xml:26
msgid ""
@@ -23820,22 +23837,20 @@ msgid ""
msgstr ""
#: modules/gdnative/doc_classes/GDNativeLibrary.xml:10
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/plugins/gdnative/gdnative-c-"
"example.html"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/gdnative/gdnative-c-"
+"https://docs.godotengine.org/en/3.4/tutorials/plugins/gdnative/gdnative-c-"
"example.html"
#: modules/gdnative/doc_classes/GDNativeLibrary.xml:11
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/plugins/gdnative/gdnative-cpp-"
"example.html"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/gdnative/gdnative-"
-"cpp-example.html"
+"https://docs.godotengine.org/en/3.4/tutorials/plugins/gdnative/gdnative-cpp-"
+"example.html"
#: modules/gdnative/doc_classes/GDNativeLibrary.xml:17
msgid ""
@@ -23907,13 +23922,12 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/GDScript.xml:11
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/3.4/getting_started/scripting/gdscript/index."
"html"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"index.html"
+"https://docs.godotengine.org/en/3.4/getting_started/scripting/gdscript/index."
+"html"
#: modules/gdscript/doc_classes/GDScript.xml:17
msgid "Returns byte code for the script source code."
@@ -24930,21 +24944,31 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:13
-#, fuzzy
+#: doc/classes/GIProbe.xml:15
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html"
+msgstr "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -24953,14 +24977,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -24970,80 +24998,80 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
msgstr ""
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr ""
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -25876,10 +25904,8 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml:14
-#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/using_gridmaps.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
+msgstr "https://docs.godotengine.org/en/3.4/tutorials/3d/using_gridmaps.html"
#: modules/gridmap/doc_classes/GridMap.xml:22
msgid "Clear all cells."
@@ -26477,22 +26503,20 @@ msgid ""
msgstr ""
#: doc/classes/HTTPClient.xml:16
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/networking/http_client_class."
"html"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"http_client_class.html"
+"https://docs.godotengine.org/en/3.4/tutorials/networking/http_client_class."
+"html"
#: doc/classes/HTTPClient.xml:17 doc/classes/HTTPRequest.xml:71
#: doc/classes/StreamPeerSSL.xml:10
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/networking/ssl_certificates."
"html"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/ssl_certificates."
+"https://docs.godotengine.org/en/3.4/tutorials/networking/ssl_certificates."
"html"
#: doc/classes/HTTPClient.xml:23
@@ -27272,13 +27296,12 @@ msgid ""
msgstr ""
#: doc/classes/HTTPRequest.xml:70
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/networking/http_request_class."
"html"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"http_request_class.html"
+"https://docs.godotengine.org/en/3.4/tutorials/networking/http_request_class."
+"html"
#: doc/classes/HTTPRequest.xml:77
msgid "Cancels the current request."
@@ -27425,13 +27448,12 @@ msgid ""
msgstr ""
#: doc/classes/Image.xml:12 doc/classes/ImageTexture.xml:31
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/3.4/getting_started/workflow/assets/"
"importing_images.html"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/assets/"
-"importing_scenes.html#custom-script"
+"https://docs.godotengine.org/en/3.4/getting_started/workflow/assets/"
+"importing_images.html"
#: doc/classes/Image.xml:21
msgid ""
@@ -27791,16 +27813,18 @@ msgstr ""
#: doc/classes/Image.xml:436
msgid ""
"OpenGL texture format [code]RED[/code] with a single component and a "
-"bitdepth of 8."
+"bitdepth of 8.\n"
+"[b]Note:[/b] When using the GLES2 backend, this uses the alpha channel "
+"instead of the red channel for storage."
msgstr ""
-#: doc/classes/Image.xml:439
+#: doc/classes/Image.xml:440
msgid ""
"OpenGL texture format [code]RG[/code] with two components and a bitdepth of "
"8 for each."
msgstr ""
-#: doc/classes/Image.xml:442
+#: doc/classes/Image.xml:443
msgid ""
"OpenGL texture format [code]RGB[/code] with three components, each with a "
"bitdepth of 8.\n"
@@ -27808,7 +27832,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:446
+#: doc/classes/Image.xml:447
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 8.\n"
@@ -27816,73 +27840,73 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:450
+#: doc/classes/Image.xml:451
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 4."
msgstr ""
-#: doc/classes/Image.xml:453
+#: doc/classes/Image.xml:454
msgid ""
"OpenGL texture format [code]GL_RGB5_A1[/code] where 5 bits of depth for each "
"component of RGB and one bit for alpha."
msgstr ""
-#: doc/classes/Image.xml:456
+#: doc/classes/Image.xml:457
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 32-"
"bit floating-point value."
msgstr ""
-#: doc/classes/Image.xml:459
+#: doc/classes/Image.xml:460
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:462
+#: doc/classes/Image.xml:463
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:465
+#: doc/classes/Image.xml:466
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:468
+#: doc/classes/Image.xml:469
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 16-"
"bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:471
+#: doc/classes/Image.xml:472
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:474
+#: doc/classes/Image.xml:475
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:477
+#: doc/classes/Image.xml:478
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:480
+#: doc/classes/Image.xml:481
msgid ""
"A special OpenGL texture format where the three color components have 9 bits "
"of precision and all three share a single 5-bit exponent."
msgstr ""
-#: doc/classes/Image.xml:483
+#: doc/classes/Image.xml:484
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 1, and is the smallest variation "
@@ -27892,7 +27916,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:487
+#: doc/classes/Image.xml:488
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 2, and color data is interpreted "
@@ -27902,7 +27926,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:491
+#: doc/classes/Image.xml:492
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format also known as Block Compression 3 or BC3 that contains 64 "
@@ -27913,7 +27937,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:495
+#: doc/classes/Image.xml:496
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -27921,7 +27945,7 @@ msgid ""
"DXT5 uses for the alpha channel."
msgstr ""
-#: doc/classes/Image.xml:498
+#: doc/classes/Image.xml:499
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -27929,7 +27953,7 @@ msgid ""
"algorithm that DXT5 uses for the alpha channel."
msgstr ""
-#: doc/classes/Image.xml:501
+#: doc/classes/Image.xml:502
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned normalized "
@@ -27938,21 +27962,21 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:505
+#: doc/classes/Image.xml:506
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with signed floating-point "
"RGB components."
msgstr ""
-#: doc/classes/Image.xml:508
+#: doc/classes/Image.xml:509
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned floating-point "
"RGB components."
msgstr ""
-#: doc/classes/Image.xml:511
+#: doc/classes/Image.xml:512
msgid ""
"Texture format used on PowerVR-supported mobile platforms, uses 2-bit color "
"depth with no alpha. More information can be found [url=https://en.wikipedia."
@@ -27961,25 +27985,25 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:515
+#: doc/classes/Image.xml:516
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with an "
"alpha component."
msgstr ""
-#: doc/classes/Image.xml:518
+#: doc/classes/Image.xml:519
msgid ""
"Similar to [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with 4-"
"bit color depth and no alpha."
msgstr ""
-#: doc/classes/Image.xml:521
+#: doc/classes/Image.xml:522
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC4[/url], but with an "
"alpha component."
msgstr ""
-#: doc/classes/Image.xml:524
+#: doc/classes/Image.xml:525
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC1]Ericsson Texture Compression format 1[/"
@@ -27987,7 +28011,7 @@ msgid ""
"standard. This format cannot store an alpha channel."
msgstr ""
-#: doc/classes/Image.xml:527
+#: doc/classes/Image.xml:528
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27995,7 +28019,7 @@ msgid ""
"unsigned data."
msgstr ""
-#: doc/classes/Image.xml:530
+#: doc/classes/Image.xml:531
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28003,7 +28027,7 @@ msgid ""
"channel of signed data."
msgstr ""
-#: doc/classes/Image.xml:533
+#: doc/classes/Image.xml:534
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28011,7 +28035,7 @@ msgid ""
"of unsigned data."
msgstr ""
-#: doc/classes/Image.xml:536
+#: doc/classes/Image.xml:537
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28019,7 +28043,7 @@ msgid ""
"channels of signed data."
msgstr ""
-#: doc/classes/Image.xml:539
+#: doc/classes/Image.xml:540
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28029,7 +28053,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:543
+#: doc/classes/Image.xml:544
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28039,7 +28063,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:547
+#: doc/classes/Image.xml:548
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28050,31 +28074,31 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:551
+#: doc/classes/Image.xml:552
msgid "Represents the size of the [enum Format] enum."
msgstr ""
-#: doc/classes/Image.xml:554
+#: doc/classes/Image.xml:555
msgid ""
"Performs nearest-neighbor interpolation. If the image is resized, it will be "
"pixelated."
msgstr ""
-#: doc/classes/Image.xml:557
+#: doc/classes/Image.xml:558
msgid ""
"Performs bilinear interpolation. If the image is resized, it will be blurry. "
"This mode is faster than [constant INTERPOLATE_CUBIC], but it results in "
"lower quality."
msgstr ""
-#: doc/classes/Image.xml:560
+#: doc/classes/Image.xml:561
msgid ""
"Performs cubic interpolation. If the image is resized, it will be blurry. "
"This mode often gives better results compared to [constant "
"INTERPOLATE_BILINEAR], at the cost of being slower."
msgstr ""
-#: doc/classes/Image.xml:563
+#: doc/classes/Image.xml:564
msgid ""
"Performs bilinear separately on the two most-suited mipmap levels, then "
"linearly interpolates between them.\n"
@@ -28089,55 +28113,55 @@ msgid ""
"a new set will be generated for the resulting image."
msgstr ""
-#: doc/classes/Image.xml:570
+#: doc/classes/Image.xml:571
msgid ""
"Performs Lanczos interpolation. This is the slowest image resizing mode, but "
"it typically gives the best results, especially when downscalng images."
msgstr ""
-#: doc/classes/Image.xml:573
+#: doc/classes/Image.xml:574
msgid "Image does not have alpha."
msgstr ""
-#: doc/classes/Image.xml:576
+#: doc/classes/Image.xml:577
msgid "Image stores alpha in a single bit."
msgstr ""
-#: doc/classes/Image.xml:579
+#: doc/classes/Image.xml:580
msgid "Image uses alpha."
msgstr ""
-#: doc/classes/Image.xml:582
+#: doc/classes/Image.xml:583
msgid "Use S3TC compression."
msgstr ""
-#: doc/classes/Image.xml:585
+#: doc/classes/Image.xml:586
msgid "Use PVRTC2 compression."
msgstr ""
-#: doc/classes/Image.xml:588
+#: doc/classes/Image.xml:589
msgid "Use PVRTC4 compression."
msgstr ""
-#: doc/classes/Image.xml:591
+#: doc/classes/Image.xml:592
msgid "Use ETC compression."
msgstr ""
-#: doc/classes/Image.xml:594
+#: doc/classes/Image.xml:595
msgid "Use ETC2 compression."
msgstr ""
-#: doc/classes/Image.xml:597
+#: doc/classes/Image.xml:598
msgid ""
"Source texture (before compression) is a regular texture. Default for all "
"textures."
msgstr ""
-#: doc/classes/Image.xml:600
+#: doc/classes/Image.xml:601
msgid "Source texture (before compression) is in sRGB space."
msgstr ""
-#: doc/classes/Image.xml:603
+#: doc/classes/Image.xml:604
msgid ""
"Source texture (before compression) is a normal texture (e.g. it can be "
"compressed into two channels)."
@@ -28334,9 +28358,8 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml:10
-#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/inputs/index.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/inputs/index.html"
+msgstr "https://docs.godotengine.org/en/3.4/tutorials/inputs/index.html"
#: doc/classes/Input.xml:20
msgid ""
@@ -28361,6 +28384,17 @@ msgstr ""
#: doc/classes/Input.xml:43
msgid ""
+"Sends all input events which are in the current buffer to the game loop. "
+"These events may have been buffered as a result of accumulated input "
+"([method set_use_accumulated_input]) or agile input flushing ([member "
+"ProjectSettings.input_devices/buffering/agile_event_flushing]).\n"
+"The engine will already do this itself at key execution points (at least "
+"once per frame). However, this can be useful in advanced cases where you "
+"want precise control over the timing of event handling."
+msgstr ""
+
+#: doc/classes/Input.xml:50
+msgid ""
"Returns the acceleration of the device's accelerometer sensor, if the device "
"has one. Otherwise, the method returns [constant Vector3.ZERO].\n"
"Note this method returns an empty [Vector3] when running from the editor "
@@ -28372,7 +28406,7 @@ msgid ""
"the Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:53
+#: doc/classes/Input.xml:60
msgid ""
"Returns a value between 0 and 1 representing the raw intensity of the given "
"action, ignoring the action's deadzone. In most cases, you should use "
@@ -28382,7 +28416,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:62
+#: doc/classes/Input.xml:69
msgid ""
"Returns a value between 0 and 1 representing the intensity of the given "
"action. In a joypad, for example, the further away the axis (analog sticks "
@@ -28394,7 +28428,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:71
+#: doc/classes/Input.xml:78
msgid ""
"Get axis input by specifying two actions, one negative and one positive.\n"
"This is a shorthand for writing [code]Input."
@@ -28402,17 +28436,17 @@ msgid ""
"get_action_strength(\"negative_action\")[/code]."
msgstr ""
-#: doc/classes/Input.xml:78
+#: doc/classes/Input.xml:85
msgid ""
"Returns an [Array] containing the device IDs of all currently connected "
"joypads."
msgstr ""
-#: doc/classes/Input.xml:84
+#: doc/classes/Input.xml:91
msgid "Returns the currently assigned cursor shape (see [enum CursorShape])."
msgstr ""
-#: doc/classes/Input.xml:90
+#: doc/classes/Input.xml:97
msgid ""
"Returns the gravity of the device's accelerometer sensor, if the device has "
"one. Otherwise, the method returns [constant Vector3.ZERO].\n"
@@ -28422,7 +28456,7 @@ msgid ""
"Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:97
+#: doc/classes/Input.xml:104
msgid ""
"Returns the rotation rate in rad/s around a device's X, Y, and Z axes of the "
"gyroscope sensor, if the device has one. Otherwise, the method returns "
@@ -28431,53 +28465,53 @@ msgid ""
"it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:106
+#: doc/classes/Input.xml:113
msgid ""
"Returns the current value of the joypad axis at given index (see [enum "
"JoystickList])."
msgstr ""
-#: doc/classes/Input.xml:113
+#: doc/classes/Input.xml:120
msgid "Returns the index of the provided axis name."
msgstr ""
-#: doc/classes/Input.xml:120
+#: doc/classes/Input.xml:127
msgid ""
"Receives a [enum JoystickList] axis and returns its equivalent name as a "
"string."
msgstr ""
-#: doc/classes/Input.xml:127
+#: doc/classes/Input.xml:134
msgid "Returns the index of the provided button name."
msgstr ""
-#: doc/classes/Input.xml:134
+#: doc/classes/Input.xml:141
msgid ""
"Receives a gamepad button from [enum JoystickList] and returns its "
"equivalent name as a string."
msgstr ""
-#: doc/classes/Input.xml:141
+#: doc/classes/Input.xml:148
msgid ""
"Returns a SDL2-compatible device GUID on platforms that use gamepad "
"remapping. Returns [code]\"Default Gamepad\"[/code] otherwise."
msgstr ""
-#: doc/classes/Input.xml:148
+#: doc/classes/Input.xml:155
msgid "Returns the name of the joypad at the specified device index."
msgstr ""
-#: doc/classes/Input.xml:155
+#: doc/classes/Input.xml:162
msgid "Returns the duration of the current vibration effect in seconds."
msgstr ""
-#: doc/classes/Input.xml:162
+#: doc/classes/Input.xml:169
msgid ""
"Returns the strength of the joypad vibration: x is the strength of the weak "
"motor, and y is the strength of the strong motor."
msgstr ""
-#: doc/classes/Input.xml:168
+#: doc/classes/Input.xml:175
msgid ""
"Returns the mouse speed for the last time the cursor was moved, and this "
"until the next frame where the mouse moves. This means that even if the "
@@ -28485,7 +28519,7 @@ msgid ""
"motion."
msgstr ""
-#: doc/classes/Input.xml:174
+#: doc/classes/Input.xml:181
msgid ""
"Returns the magnetic field strength in micro-Tesla for all axes of the "
"device's magnetometer sensor, if the device has one. Otherwise, the method "
@@ -28494,17 +28528,17 @@ msgid ""
"platforms, it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:181
+#: doc/classes/Input.xml:188
msgid ""
"Returns mouse buttons as a bitmask. If multiple mouse buttons are pressed at "
"the same time, the bits are added together."
msgstr ""
-#: doc/classes/Input.xml:187
+#: doc/classes/Input.xml:194
msgid "Returns the mouse mode. See the constants for more information."
msgstr ""
-#: doc/classes/Input.xml:198
+#: doc/classes/Input.xml:205
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -28517,7 +28551,7 @@ msgid ""
"want (on the range of 0 to 1)."
msgstr ""
-#: doc/classes/Input.xml:208
+#: doc/classes/Input.xml:215
msgid ""
"Returns [code]true[/code] when the user starts pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user pressed down "
@@ -28529,7 +28563,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:218
+#: doc/classes/Input.xml:225
msgid ""
"Returns [code]true[/code] when the user stops pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user released the "
@@ -28539,7 +28573,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:227
+#: doc/classes/Input.xml:234
msgid ""
"Returns [code]true[/code] if you are pressing the action event. Note that if "
"an action has multiple buttons assigned and more than one of them is "
@@ -28550,13 +28584,13 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:236
+#: doc/classes/Input.xml:243
msgid ""
"Returns [code]true[/code] if you are pressing the joypad button (see [enum "
"JoystickList])."
msgstr ""
-#: doc/classes/Input.xml:243
+#: doc/classes/Input.xml:250
msgid ""
"Returns [code]true[/code] if the system knows the specified device. This "
"means that it sets all button and axis indices exactly as defined in [enum "
@@ -28564,19 +28598,19 @@ msgid ""
"but you can still retrieve events from them."
msgstr ""
-#: doc/classes/Input.xml:250
+#: doc/classes/Input.xml:257
msgid ""
"Returns [code]true[/code] if you are pressing the key. You can pass a [enum "
"KeyList] constant."
msgstr ""
-#: doc/classes/Input.xml:257
+#: doc/classes/Input.xml:264
msgid ""
"Returns [code]true[/code] if you are pressing the mouse button specified "
"with [enum ButtonList]."
msgstr ""
-#: doc/classes/Input.xml:267
+#: doc/classes/Input.xml:274
msgid ""
"Notifies the [Input] singleton that a connection has changed, to update the "
"state for the [code]device[/code] index.\n"
@@ -28585,7 +28619,7 @@ msgid ""
"triggered internally."
msgstr ""
-#: doc/classes/Input.xml:275
+#: doc/classes/Input.xml:282
msgid ""
"Feeds an [InputEvent] to the game. Can be used to artificially trigger input "
"events from code. Also generates [method Node._input] calls.\n"
@@ -28598,12 +28632,21 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Input.xml:289
+#: doc/classes/Input.xml:296
msgid ""
"Removes all mappings from the internal database that match the given GUID."
msgstr ""
-#: doc/classes/Input.xml:298
+#: doc/classes/Input.xml:303
+msgid ""
+"Sets the acceleration value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:313
msgid ""
"Sets a custom mouse cursor image, which is only visible inside the game "
"window. The hotspot can also be specified. Passing [code]null[/code] to the "
@@ -28618,7 +28661,7 @@ msgid ""
"compression mode can't be used for custom cursors."
msgstr ""
-#: doc/classes/Input.xml:309
+#: doc/classes/Input.xml:324
msgid ""
"Sets the default cursor shape to be used in the viewport instead of "
"[constant CURSOR_ARROW].\n"
@@ -28628,11 +28671,38 @@ msgid ""
"cursor immediately."
msgstr ""
-#: doc/classes/Input.xml:318
+#: doc/classes/Input.xml:333
+msgid ""
+"Sets the gravity value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:341
+msgid ""
+"Sets the value of the rotation rate of the gyroscope sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:349
+msgid ""
+"Sets the value of the magnetic field of the magnetometer sensor. Can be used "
+"for debugging on devices without a hardware sensor, for example in an editor "
+"on a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:357
msgid "Sets the mouse mode. See the constants for more information."
msgstr ""
-#: doc/classes/Input.xml:325
+#: doc/classes/Input.xml:364
msgid ""
"Enables or disables the accumulation of similar input events sent by the "
"operating system. When input accumulation is enabled, all input events "
@@ -28646,7 +28716,7 @@ msgid ""
"results that closely follow the actual input."
msgstr ""
-#: doc/classes/Input.xml:336
+#: doc/classes/Input.xml:375
msgid ""
"Starts to vibrate the joypad. Joypads usually come with two rumble motors, a "
"strong and a weak one. [code]weak_magnitude[/code] is the strength of the "
@@ -28659,34 +28729,34 @@ msgid ""
"few seconds."
msgstr ""
-#: doc/classes/Input.xml:344
+#: doc/classes/Input.xml:383
msgid "Stops the vibration of the joypad."
msgstr ""
-#: doc/classes/Input.xml:351
+#: doc/classes/Input.xml:390
msgid ""
"Vibrate Android and iOS devices.\n"
"[b]Note:[/b] It needs [code]VIBRATE[/code] permission for Android at export "
"settings. iOS does not support duration."
msgstr ""
-#: doc/classes/Input.xml:359
+#: doc/classes/Input.xml:398
msgid "Sets the mouse position to the specified vector."
msgstr ""
-#: doc/classes/Input.xml:368
+#: doc/classes/Input.xml:407
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
-#: doc/classes/Input.xml:374
+#: doc/classes/Input.xml:413
msgid "Makes the mouse cursor visible if it is hidden."
msgstr ""
-#: doc/classes/Input.xml:377
+#: doc/classes/Input.xml:416
msgid "Makes the mouse cursor hidden if it is visible."
msgstr ""
-#: doc/classes/Input.xml:380
+#: doc/classes/Input.xml:419
msgid ""
"Captures the mouse. The mouse will be hidden and its position locked at the "
"center of the screen.\n"
@@ -28694,83 +28764,83 @@ msgid ""
"need to use [member InputEventMouseMotion.relative]."
msgstr ""
-#: doc/classes/Input.xml:384
+#: doc/classes/Input.xml:423
msgid "Makes the mouse cursor visible but confines it to the game window."
msgstr ""
-#: doc/classes/Input.xml:387
+#: doc/classes/Input.xml:426
msgid "Arrow cursor. Standard, default pointing cursor."
msgstr ""
-#: doc/classes/Input.xml:390
+#: doc/classes/Input.xml:429
msgid ""
"I-beam cursor. Usually used to show where the text cursor will appear when "
"the mouse is clicked."
msgstr ""
-#: doc/classes/Input.xml:393
+#: doc/classes/Input.xml:432
msgid ""
"Pointing hand cursor. Usually used to indicate the pointer is over a link or "
"other interactable item."
msgstr ""
-#: doc/classes/Input.xml:396
+#: doc/classes/Input.xml:435
msgid ""
"Cross cursor. Typically appears over regions in which a drawing operation "
"can be performed or for selections."
msgstr ""
-#: doc/classes/Input.xml:399
+#: doc/classes/Input.xml:438
msgid ""
"Wait cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application is still usable during the "
"operation."
msgstr ""
-#: doc/classes/Input.xml:402
+#: doc/classes/Input.xml:441
msgid ""
"Busy cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application isn't usable during the "
"operation (e.g. something is blocking its main thread)."
msgstr ""
-#: doc/classes/Input.xml:405
+#: doc/classes/Input.xml:444
msgid "Drag cursor. Usually displayed when dragging something."
msgstr ""
-#: doc/classes/Input.xml:408
+#: doc/classes/Input.xml:447
msgid ""
"Can drop cursor. Usually displayed when dragging something to indicate that "
"it can be dropped at the current position."
msgstr ""
-#: doc/classes/Input.xml:411
+#: doc/classes/Input.xml:450
msgid ""
"Forbidden cursor. Indicates that the current action is forbidden (for "
"example, when dragging something) or that the control at a position is "
"disabled."
msgstr ""
-#: doc/classes/Input.xml:414
+#: doc/classes/Input.xml:453
msgid ""
"Vertical resize mouse cursor. A double-headed vertical arrow. It tells the "
"user they can resize the window or the panel vertically."
msgstr ""
-#: doc/classes/Input.xml:417
+#: doc/classes/Input.xml:456
msgid ""
"Horizontal resize mouse cursor. A double-headed horizontal arrow. It tells "
"the user they can resize the window or the panel horizontally."
msgstr ""
-#: doc/classes/Input.xml:420
+#: doc/classes/Input.xml:459
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the bottom left to the top right. It tells the user they can resize the "
"window or the panel both horizontally and vertically."
msgstr ""
-#: doc/classes/Input.xml:423
+#: doc/classes/Input.xml:462
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the top left to the bottom right, the opposite of [constant "
@@ -28778,23 +28848,23 @@ msgid ""
"both horizontally and vertically."
msgstr ""
-#: doc/classes/Input.xml:426
+#: doc/classes/Input.xml:465
msgid "Move cursor. Indicates that something can be moved."
msgstr ""
-#: doc/classes/Input.xml:429
+#: doc/classes/Input.xml:468
msgid ""
"Vertical split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_VSIZE]."
msgstr ""
-#: doc/classes/Input.xml:432
+#: doc/classes/Input.xml:471
msgid ""
"Horizontal split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_HSIZE]."
msgstr ""
-#: doc/classes/Input.xml:435
+#: doc/classes/Input.xml:474
msgid "Help cursor. Usually a question mark."
msgstr ""
@@ -28811,10 +28881,8 @@ msgstr ""
#: doc/classes/InputEventMouse.xml:10 doc/classes/InputEventScreenDrag.xml:10
#: doc/classes/InputEventScreenTouch.xml:11
#: doc/classes/InputEventWithModifiers.xml:10
-#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/inputs/inputevent.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html"
+msgstr "https://docs.godotengine.org/en/3.4/tutorials/inputs/inputevent.html"
#: doc/classes/InputEvent.xml:20
msgid ""
@@ -28926,12 +28994,10 @@ msgid ""
msgstr ""
#: doc/classes/InputEventAction.xml:10
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/inputs/inputevent.html#actions"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent."
-"html#actions"
+"https://docs.godotengine.org/en/3.4/tutorials/inputs/inputevent.html#actions"
#: doc/classes/InputEventAction.xml:18
msgid "The action's name. Actions are accessed via this [String]."
@@ -29116,12 +29182,11 @@ msgstr ""
#: doc/classes/InputEventMouseButton.xml:10
#: doc/classes/InputEventMouseMotion.xml:11
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/inputs/"
"mouse_and_input_coordinates.html"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/"
+"https://docs.godotengine.org/en/3.4/tutorials/inputs/"
"mouse_and_input_coordinates.html"
#: doc/classes/InputEventMouseButton.xml:16
@@ -29210,7 +29275,9 @@ msgid "The drag position."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -29287,12 +29354,10 @@ msgid ""
msgstr ""
#: doc/classes/InputMap.xml:10
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/inputs/inputevent.html#inputmap"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent."
-"html#inputmap"
+"https://docs.godotengine.org/en/3.4/tutorials/inputs/inputevent.html#inputmap"
#: doc/classes/InputMap.xml:18
msgid ""
@@ -30048,12 +30113,11 @@ msgid ""
msgstr ""
#: doc/classes/JavaScript.xml:11
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/3.4/getting_started/workflow/export/"
"exporting_for_web.html#calling-javascript-from-script"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/export/"
+"https://docs.godotengine.org/en/3.4/getting_started/workflow/export/"
"exporting_for_web.html#calling-javascript-from-script"
#: doc/classes/JavaScript.xml:19
@@ -30164,13 +30228,12 @@ msgid ""
msgstr ""
#: doc/classes/JNISingleton.xml:10
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/plugins/android/android_plugin."
"html"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
+"https://docs.godotengine.org/en/3.4/tutorials/plugins/android/android_plugin."
+"html"
#: doc/classes/Joint.xml:4
msgid "Base class for all 3D joints."
@@ -30185,9 +30248,8 @@ msgstr ""
#: doc/classes/Joint.xml:10 doc/classes/RigidBody.xml:15
#: doc/classes/VehicleBody.xml:12 doc/classes/VehicleWheel.xml:11
-#, fuzzy
msgid "https://godotengine.org/asset-library/asset/524"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgstr "https://godotengine.org/asset-library/asset/524"
#: doc/classes/Joint.xml:16
msgid ""
@@ -30437,13 +30499,12 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody.xml:12 doc/classes/KinematicBody2D.xml:12
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/physics/kinematic_character_2d."
"html"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"kinematic_character_2d.html"
+"https://docs.godotengine.org/en/3.4/tutorials/physics/kinematic_character_2d."
+"html"
#: doc/classes/KinematicBody.xml:23
msgid ""
@@ -30522,7 +30583,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30587,22 +30649,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -30617,7 +30681,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -30625,19 +30689,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -30666,12 +30730,11 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody2D.xml:13
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/physics/"
"using_kinematic_body_2d.html"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
+"https://docs.godotengine.org/en/3.4/tutorials/physics/"
"using_kinematic_body_2d.html"
#: doc/classes/KinematicBody2D.xml:22
@@ -30708,7 +30771,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30766,7 +30830,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -31305,12 +31371,10 @@ msgid ""
msgstr ""
#: doc/classes/Light2D.xml:11 doc/classes/LightOccluder2D.xml:10
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/2d/2d_lights_and_shadows.html"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/2d_lights_and_shadows."
-"html"
+"https://docs.godotengine.org/en/3.4/tutorials/2d/2d_lights_and_shadows.html"
#: doc/classes/Light2D.xml:17
msgid "The Light2D's [Color]."
@@ -32051,14 +32115,21 @@ msgid "Default text [Color] of the [LinkButton]."
msgstr ""
#: doc/classes/LinkButton.xml:46
-msgid "Text [Color] used when the [LinkButton] is being hovered."
+msgid ""
+"Text [Color] used when the [LinkButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/LinkButton.xml:49
-msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgid "Text [Color] used when the [LinkButton] is being hovered."
msgstr ""
#: doc/classes/LinkButton.xml:52
+msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:55
msgid "The vertical space between the baseline of text and the underline."
msgstr ""
@@ -32551,26 +32622,33 @@ msgid "Text [Color] used when the [MenuButton] is disabled."
msgstr ""
#: doc/classes/MenuButton.xml:64
-msgid "Text [Color] used when the [MenuButton] is being hovered."
+msgid ""
+"Text [Color] used when the [MenuButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/MenuButton.xml:67
-msgid "Text [Color] used when the [MenuButton] is being pressed."
+msgid "Text [Color] used when the [MenuButton] is being hovered."
msgstr ""
#: doc/classes/MenuButton.xml:70
-msgid "[StyleBox] used when the [MenuButton] is being hovered."
+msgid "Text [Color] used when the [MenuButton] is being pressed."
msgstr ""
#: doc/classes/MenuButton.xml:73
-msgid "The horizontal space between [MenuButton]'s icon and text."
+msgid "[StyleBox] used when the [MenuButton] is being hovered."
msgstr ""
#: doc/classes/MenuButton.xml:76
-msgid "Default [StyleBox] for the [MenuButton]."
+msgid "The horizontal space between [MenuButton]'s icon and text."
msgstr ""
#: doc/classes/MenuButton.xml:79
+msgid "Default [StyleBox] for the [MenuButton]."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:82
msgid "[StyleBox] used when the [MenuButton] is being pressed."
msgstr ""
@@ -33143,9 +33221,8 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance2D.xml:10
-#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/2d/2d_meshes.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/2d/2d_meshes.html"
+msgstr "https://docs.godotengine.org/en/3.4/tutorials/2d/2d_meshes.html"
#: doc/classes/MeshInstance2D.xml:16
msgid "The [Mesh] that will be drawn by the [MeshInstance2D]."
@@ -33379,22 +33456,20 @@ msgid ""
msgstr ""
#: doc/classes/MultiMesh.xml:13 doc/classes/MultiMeshInstance.xml:11
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/3d/vertex_animation/"
"animating_thousands_of_fish.html"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/vertex_animation/"
+"https://docs.godotengine.org/en/3.4/tutorials/3d/vertex_animation/"
"animating_thousands_of_fish.html"
#: doc/classes/MultiMesh.xml:14 doc/classes/MultiMeshInstance.xml:13
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/optimization/using_multimesh."
"html"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/optimization/"
-"using_multimesh.html"
+"https://docs.godotengine.org/en/3.4/tutorials/optimization/using_multimesh."
+"html"
#: doc/classes/MultiMesh.xml:20
msgid ""
@@ -33539,13 +33614,12 @@ msgid ""
msgstr ""
#: doc/classes/MultiMeshInstance.xml:12
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/3d/using_multi_mesh_instance."
"html"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/"
-"using_multi_mesh_instance.html"
+"https://docs.godotengine.org/en/3.4/tutorials/3d/using_multi_mesh_instance."
+"html"
#: doc/classes/MultiMeshInstance.xml:19
msgid ""
@@ -33791,13 +33865,12 @@ msgstr ""
#: doc/classes/Mutex.xml:10 doc/classes/Semaphore.xml:10
#: doc/classes/Thread.xml:11
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/threads/using_multiple_threads."
"html"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/threads/"
-"using_multiple_threads.html"
+"https://docs.godotengine.org/en/3.4/tutorials/threads/using_multiple_threads."
+"html"
#: doc/classes/Mutex.xml:16
msgid ""
@@ -33873,9 +33946,8 @@ msgid ""
msgstr ""
#: doc/classes/Navigation.xml:11 doc/classes/NavigationMesh.xml:10
-#, fuzzy
msgid "https://godotengine.org/asset-library/asset/124"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgstr "https://godotengine.org/asset-library/asset/124"
#: doc/classes/Navigation.xml:18 doc/classes/Navigation2D.xml:18
msgid ""
@@ -33955,9 +34027,8 @@ msgid ""
msgstr ""
#: doc/classes/Navigation2D.xml:11 doc/classes/NavigationPolygon.xml:27
-#, fuzzy
msgid "https://godotengine.org/asset-library/asset/117"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgstr "https://godotengine.org/asset-library/asset/117"
#: doc/classes/Navigation2D.xml:25
msgid ""
@@ -34295,7 +34366,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -34387,12 +34458,11 @@ msgstr ""
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:12
#: doc/classes/NetworkedMultiplayerPeer.xml:11
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/networking/"
"high_level_multiplayer.html"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
+"https://docs.godotengine.org/en/3.4/tutorials/networking/"
"high_level_multiplayer.html"
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:13
@@ -34638,9 +34708,8 @@ msgid ""
msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml:12
-#, fuzzy
msgid "https://godotengine.org/asset-library/asset/537"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgstr "https://godotengine.org/asset-library/asset/537"
#: doc/classes/NetworkedMultiplayerPeer.xml:18
msgid ""
@@ -34930,18 +34999,16 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml:20
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/3.4/getting_started/step_by_step/"
"scenes_and_nodes.html"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/step_by_step/"
+"https://docs.godotengine.org/en/3.4/getting_started/step_by_step/"
"scenes_and_nodes.html"
#: doc/classes/Node.xml:21
-#, fuzzy
msgid "https://github.com/godotengine/godot-demo-projects/"
-msgstr "https://github.com/godotengine/tps-demo"
+msgstr "https://github.com/godotengine/godot-demo-projects/"
#: doc/classes/Node.xml:27
msgid ""
@@ -35911,11 +35978,8 @@ msgid ""
msgstr ""
#: doc/classes/Node2D.xml:11 doc/classes/Vector2.xml:16
-#, fuzzy
msgid "https://github.com/godotengine/godot-demo-projects/tree/master/2d"
-msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
+msgstr "https://github.com/godotengine/godot-demo-projects/tree/master/2d"
#: doc/classes/Node2D.xml:18
msgid "Multiplies the current scale by the [code]ratio[/code] vector."
@@ -36082,9 +36146,8 @@ msgstr ""
#: doc/classes/NodePath.xml:26 doc/classes/PackedScene.xml:41
#: doc/classes/Panel.xml:10 doc/classes/PanelContainer.xml:10
#: doc/classes/TileMap.xml:16 doc/classes/TileSet.xml:16
-#, fuzzy
msgid "https://godotengine.org/asset-library/asset/520"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgstr "https://godotengine.org/asset-library/asset/520"
#: doc/classes/NodePath.xml:33
msgid ""
@@ -36297,22 +36360,20 @@ msgstr ""
#: doc/classes/Object.xml:24 doc/classes/Reference.xml:13
#: doc/classes/Resource.xml:12
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/3.4/getting_started/workflow/best_practices/"
"node_alternatives.html"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/"
-"best_practices/node_alternatives.html"
+"https://docs.godotengine.org/en/3.4/getting_started/workflow/best_practices/"
+"node_alternatives.html"
#: doc/classes/Object.xml:25
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/3.4/getting_started/scripting/gdscript/"
"gdscript_exports.html#advanced-exports"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"gdscript_basics.html#dictionary"
+"https://docs.godotengine.org/en/3.4/getting_started/scripting/gdscript/"
+"gdscript_exports.html#advanced-exports"
#: doc/classes/Object.xml:32
msgid ""
@@ -37179,26 +37240,33 @@ msgid "Text [Color] used when the [OptionButton] is disabled."
msgstr ""
#: doc/classes/OptionButton.xml:212
-msgid "Text [Color] used when the [OptionButton] is being hovered."
+msgid ""
+"Text [Color] used when the [OptionButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/OptionButton.xml:215
-msgid "Text [Color] used when the [OptionButton] is being pressed."
+msgid "Text [Color] used when the [OptionButton] is being hovered."
msgstr ""
#: doc/classes/OptionButton.xml:218
-msgid "[StyleBox] used when the [OptionButton] is being hovered."
+msgid "Text [Color] used when the [OptionButton] is being pressed."
msgstr ""
#: doc/classes/OptionButton.xml:221
-msgid "The horizontal space between [OptionButton]'s icon and text."
+msgid "[StyleBox] used when the [OptionButton] is being hovered."
msgstr ""
#: doc/classes/OptionButton.xml:224
-msgid "Default [StyleBox] for the [OptionButton]."
+msgid "The horizontal space between [OptionButton]'s icon and text."
msgstr ""
#: doc/classes/OptionButton.xml:227
+msgid "Default [StyleBox] for the [OptionButton]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:230
msgid "[StyleBox] used when the [OptionButton] is being pressed."
msgstr ""
@@ -37601,7 +37669,7 @@ msgstr ""
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -37631,14 +37699,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -37648,7 +37716,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -38877,15 +38945,13 @@ msgid ""
msgstr ""
#: doc/classes/Panel.xml:11
-#, fuzzy
msgid "https://godotengine.org/asset-library/asset/516"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgstr "https://godotengine.org/asset-library/asset/516"
#: doc/classes/Panel.xml:12 doc/classes/Skeleton.xml:12
#: doc/classes/SkeletonIK.xml:29
-#, fuzzy
msgid "https://godotengine.org/asset-library/asset/523"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgstr "https://godotengine.org/asset-library/asset/523"
#: doc/classes/Panel.xml:20
msgid "The style of this [Panel]."
@@ -39032,12 +39098,11 @@ msgid ""
msgstr ""
#: doc/classes/Particles.xml:13
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/3d/vertex_animation/"
"controlling_thousands_of_fish.html"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/vertex_animation/"
+"https://docs.godotengine.org/en/3.4/tutorials/3d/vertex_animation/"
"controlling_thousands_of_fish.html"
#: doc/classes/Particles.xml:20
@@ -39898,10 +39963,8 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:11 doc/classes/RayCast.xml:14
#: doc/classes/RayCast2D.xml:14 doc/classes/World.xml:10
#: doc/classes/World2D.xml:10
-#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/physics/ray-casting.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/ray-casting.html"
+msgstr "https://docs.godotengine.org/en/3.4/tutorials/physics/ray-casting.html"
#: doc/classes/Physics2DDirectBodyState.xml:18 doc/classes/RigidBody2D.xml:30
msgid "Adds a constant directional force without affecting rotation."
@@ -40133,17 +40196,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -40161,11 +40250,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -40360,7 +40449,9 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-msgid "Returns the [Physics2DDirectBodyState] of the body."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
@@ -41162,6 +41253,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -41179,7 +41288,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -41293,7 +41402,9 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-msgid "Returns the [PhysicsDirectBodyState] of the body."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/PhysicsServer.xml:370
@@ -42272,27 +42383,27 @@ msgstr ""
msgid "Removes an element from the array by index."
msgstr ""
-#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolColorArray.xml:66
-#: doc/classes/PoolIntArray.xml:67 doc/classes/PoolRealArray.xml:67
-#: doc/classes/PoolStringArray.xml:74 doc/classes/PoolVector2Array.xml:67
-#: doc/classes/PoolVector3Array.xml:66
+#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolIntArray.xml:67
+#: doc/classes/PoolRealArray.xml:67
msgid ""
"Sets the size of the array. If the array is grown, reserves elements at the "
"end of the array. If the array is shrunk, truncates the array to the new "
-"size."
+"size.\n"
+"[b]Note:[/b] Added elements are not automatically initialized to 0 and will "
+"contain garbage, i.e. indeterminate values."
msgstr ""
-#: doc/classes/PoolByteArray.xml:121
+#: doc/classes/PoolByteArray.xml:122
msgid "Changes the byte at the given index."
msgstr ""
-#: doc/classes/PoolByteArray.xml:127 doc/classes/PoolColorArray.xml:79
-#: doc/classes/PoolRealArray.xml:80 doc/classes/PoolStringArray.xml:87
+#: doc/classes/PoolByteArray.xml:128 doc/classes/PoolColorArray.xml:79
+#: doc/classes/PoolRealArray.xml:81 doc/classes/PoolStringArray.xml:87
#: doc/classes/PoolVector2Array.xml:80 doc/classes/PoolVector3Array.xml:79
msgid "Returns the size of the array."
msgstr ""
-#: doc/classes/PoolByteArray.xml:135
+#: doc/classes/PoolByteArray.xml:136
msgid ""
"Returns the slice of the [PoolByteArray] between indices (inclusive) as a "
"new [PoolByteArray]. Any negative index is considered to be from the end of "
@@ -42324,6 +42435,14 @@ msgstr ""
msgid "Appends a value to the array."
msgstr ""
+#: doc/classes/PoolColorArray.xml:66 doc/classes/PoolStringArray.xml:74
+#: doc/classes/PoolVector2Array.xml:67 doc/classes/PoolVector3Array.xml:66
+msgid ""
+"Sets the size of the array. If the array is grown, reserves elements at the "
+"end of the array. If the array is shrunk, truncates the array to the new "
+"size."
+msgstr ""
+
#: doc/classes/PoolColorArray.xml:73
msgid "Changes the [Color] at the given index."
msgstr ""
@@ -42360,11 +42479,11 @@ msgid ""
"valid, or at the end of the array ([code]idx == size()[/code])."
msgstr ""
-#: doc/classes/PoolIntArray.xml:74
+#: doc/classes/PoolIntArray.xml:75
msgid "Changes the int at the given index."
msgstr ""
-#: doc/classes/PoolIntArray.xml:80
+#: doc/classes/PoolIntArray.xml:81
msgid "Returns the array size."
msgstr ""
@@ -42396,7 +42515,7 @@ msgstr ""
msgid "Appends a [PoolRealArray] at the end of this array."
msgstr ""
-#: doc/classes/PoolRealArray.xml:74
+#: doc/classes/PoolRealArray.xml:75
msgid "Changes the float at the given index."
msgstr ""
@@ -42448,9 +42567,8 @@ msgstr ""
#: doc/classes/PoolVector2Array.xml:11 doc/classes/TileMap.xml:15
#: doc/classes/TileSet.xml:15
-#, fuzzy
msgid "https://godotengine.org/asset-library/asset/519"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgstr "https://godotengine.org/asset-library/asset/519"
#: doc/classes/PoolVector2Array.xml:18
msgid ""
@@ -43662,18 +43780,6 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:204
msgid ""
-"The project data directory is used for storing project-specific data "
-"(metadata, shader cache, etc.).\n"
-"[b]Note:[/b] Restart the application after changing this setting.\n"
-"[b]Note:[/b] Changing this value can help on platforms or with third-party "
-"tools where specific directory patterns are disallowed. Only modify this "
-"setting if you know that your environment requires it, as changing the "
-"default can impact compatibility with some external tools or plugins which "
-"expect the default [code].import[/code] folder."
-msgstr ""
-
-#: doc/classes/ProjectSettings.xml:209
-msgid ""
"Specifies a file to override project settings. For example: [code]user://"
"custom_settings.cfg[/code]. See \"Overriding\" in the [ProjectSettings] "
"class description at the top for more information.\n"
@@ -43681,7 +43787,7 @@ msgid ""
"code] will still be read to override the project settings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:213
+#: doc/classes/ProjectSettings.xml:208
msgid ""
"If [code]true[/code], the project will save user data to its own user "
"directory (see [member application/config/custom_user_dir_name]). This "
@@ -43691,13 +43797,28 @@ msgid ""
"user data directory)/Godot/app_userdata/(project name)[/code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:216
+#: doc/classes/ProjectSettings.xml:211
+msgid ""
+"If [code]true[/code], the project will use a hidden directory ([code]."
+"import[/code]) for storing project-specific data (metadata, shader cache, "
+"etc.).\n"
+"If [code]false[/code], a non-hidden directory ([code]import[/code]) will be "
+"used instead.\n"
+"[b]Note:[/b] Restart the application after changing this setting.\n"
+"[b]Note:[/b] Changing this value can help on platforms or with third-party "
+"tools where hidden directory patterns are disallowed. Only modify this "
+"setting if you know that your environment requires it, as changing the "
+"default can impact compatibility with some external tools or plugins which "
+"expect the default [code].import[/code] folder."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:217
msgid ""
"Icon set in [code].ico[/code] format used on Windows to set the game's icon. "
"This is done automatically on start by calling [method OS.set_native_icon]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:219
+#: doc/classes/ProjectSettings.xml:220
msgid ""
"Time samples for frame deltas are subject to random variation introduced by "
"the platform, even when frames are displayed at regular intervals thanks to "
@@ -43711,14 +43832,14 @@ msgid ""
"adequate to render frames at the refresh rate."
msgstr ""
-#: doc/classes/ProjectSettings.xml:224
+#: doc/classes/ProjectSettings.xml:225
msgid ""
"[b]Experimental.[/b] Shifts the measurement of delta time for each frame to "
"just after the drawing has taken place. This may lead to more consistent "
"deltas and a reduction in frame stutters."
msgstr ""
-#: doc/classes/ProjectSettings.xml:227
+#: doc/classes/ProjectSettings.xml:228
msgid ""
"If [code]true[/code], disables printing to standard error. If [code]true[/"
"code], this also hides error and warning messages printed by [method "
@@ -43727,7 +43848,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:231
+#: doc/classes/ProjectSettings.xml:232
msgid ""
"If [code]true[/code], disables printing to standard output. This is "
"equivalent to starting the editor or project with the [code]--quiet[/code] "
@@ -43735,7 +43856,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:235
+#: doc/classes/ProjectSettings.xml:236
msgid ""
"If [code]true[/code], flushes the standard output stream every time a line "
"is printed. This affects both terminal logging and file logging.\n"
@@ -43751,20 +43872,20 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:241
+#: doc/classes/ProjectSettings.xml:242
msgid ""
"Debug build override for [member application/run/flush_stdout_on_print], as "
"performance is less important during debugging.\n"
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:245
+#: doc/classes/ProjectSettings.xml:246
msgid ""
"Forces a delay between frames in the main loop (in milliseconds). This may "
"be useful if you plan to disable vertical synchronization."
msgstr ""
-#: doc/classes/ProjectSettings.xml:248
+#: doc/classes/ProjectSettings.xml:249
msgid ""
"If [code]true[/code], enables low-processor usage mode. This setting only "
"works on desktop platforms. The screen is not redrawn if nothing changes "
@@ -43772,75 +43893,81 @@ msgid ""
"useless (and can hurt performance) in most games."
msgstr ""
-#: doc/classes/ProjectSettings.xml:251
+#: doc/classes/ProjectSettings.xml:252
msgid ""
"Amount of sleeping between frames when the low-processor usage mode is "
"enabled (in microseconds). Higher values will result in lower CPU usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:254
+#: doc/classes/ProjectSettings.xml:255
msgid "Path to the main scene file that will be loaded when the project runs."
msgstr ""
-#: doc/classes/ProjectSettings.xml:257 doc/classes/ProjectSettings.xml:260
+#: doc/classes/ProjectSettings.xml:258 doc/classes/ProjectSettings.xml:261
msgid ""
"Audio buses will disable automatically when sound goes below a given dB "
"threshold for a given time. This saves CPU as effects assigned to that bus "
"will no longer do any processing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:263
+#: doc/classes/ProjectSettings.xml:264
msgid ""
"Default [AudioBusLayout] resource file to use in the project, unless "
"overridden by the scene."
msgstr ""
-#: doc/classes/ProjectSettings.xml:266
+#: doc/classes/ProjectSettings.xml:267
msgid ""
"Specifies the audio driver to use. This setting is platform-dependent as "
"each platform supports different audio drivers. If left empty, the default "
"audio driver will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:269
+#: doc/classes/ProjectSettings.xml:270
msgid ""
"If [code]true[/code], microphone input will be allowed. This requires "
"appropriate permissions to be set when exporting to Android or iOS."
msgstr ""
-#: doc/classes/ProjectSettings.xml:272
+#: doc/classes/ProjectSettings.xml:273
msgid ""
"The mixing rate used for audio (in Hz). In general, it's better to not touch "
"this and leave it to the host operating system."
msgstr ""
-#: doc/classes/ProjectSettings.xml:275
+#: doc/classes/ProjectSettings.xml:276
msgid ""
"Safer override for [member audio/mix_rate] in the Web platform. Here "
"[code]0[/code] means \"let the browser choose\" (since some browsers do not "
"like forcing the mix rate)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:278
+#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:281
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:284
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:287
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43850,7 +43977,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:290
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43860,27 +43987,27 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:293
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:296
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
-#: doc/classes/ProjectSettings.xml:299
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:302
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -43888,81 +44015,81 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:305
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:308
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:311
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:314
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:317
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr ""
-#: doc/classes/ProjectSettings.xml:320
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:323
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:326
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:329
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:332
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:335
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:338
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:341
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -43970,109 +44097,109 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:344
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:347
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:350
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:353
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:356
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:359
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:362
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:365
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:368
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:371
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:374
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:377
+#: doc/classes/ProjectSettings.xml:380
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:380
+#: doc/classes/ProjectSettings.xml:383
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:383
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:386
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:389
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:392
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:395
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:398
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -44083,91 +44210,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:403
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:406
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:409
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:412
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:415
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:418
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:421
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:424
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:427
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:430
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:433
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:436
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:439
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr ""
-#: doc/classes/ProjectSettings.xml:442
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:445
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:448
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:451
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -44176,13 +44303,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:455
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:458
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -44192,7 +44319,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:463
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -44200,19 +44327,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:468
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:472
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:476
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -44226,45 +44353,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:481
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:484
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:488
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:491
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:494
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:497
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:500
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -44273,7 +44400,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:503
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -44284,7 +44411,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:507
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -44300,14 +44427,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:515
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:518
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -44315,49 +44442,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:521
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:524
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:529
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:532
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:535
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:538
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:541
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:544
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:547
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -44366,7 +44493,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:551
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44374,7 +44501,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:555
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44382,7 +44509,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:559
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44392,7 +44519,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:563
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -44401,7 +44528,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:567
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -44410,7 +44537,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:571
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44420,7 +44547,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:575
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44428,7 +44555,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:579
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -44438,7 +44565,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:583
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -44448,7 +44575,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:587
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44456,7 +44583,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:591
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -44465,7 +44592,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:595
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44473,7 +44600,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:599
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -44485,477 +44612,477 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:605
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:608
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:611
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:614
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:617
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:620
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:623
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:626
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:629
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:632
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:635
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:638
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:641
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:644
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:647
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:650
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:653
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:656
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:659
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:662
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:665
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:668
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:671
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:674
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:677
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:680
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:683
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:686
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:689
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:692
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:695
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:698
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:701
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:704
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:707
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:710
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:713
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:716
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:719
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:722
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:725
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:728
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:731
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:734
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:737
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:740
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:743
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:746
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:749
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:752
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:755
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:758
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:761
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:764
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:767
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:770
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:773
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:776
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:779
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:782
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:785
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:788
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:791
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:794
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:797
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:800
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:803
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:806
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:809
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:812
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:815
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:818
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:821
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:824
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:827
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:830
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:833
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:836
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:839
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:842
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:845
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:848
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:851
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:854
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:857
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:860
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:863
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:866
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:869
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:872
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:875
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:878
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:881
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr ""
-#: doc/classes/ProjectSettings.xml:884
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:887
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:890
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:893
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:896
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:899
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:902
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:905
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:908
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:911
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:914
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:917
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:920
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:923
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:926
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:929
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:932
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:935
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:938
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:941
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:946
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:949
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -44963,92 +45090,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:952
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:955
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:958
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:961
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:964
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:967
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:970
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:973
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:976
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:979
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:982
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:985
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:988
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:991
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:994
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:997
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1000
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1003
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -45058,33 +45185,33 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1007
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1010
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1013
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1017
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1021
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45097,7 +45224,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1025
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45109,7 +45236,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1033
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45121,7 +45248,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1041
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45134,7 +45261,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1045
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -45142,28 +45269,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1049
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1053
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1056
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1059
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -45173,25 +45300,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1063
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1066
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1069
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1072
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45204,7 +45331,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1076
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45216,7 +45343,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1084
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45228,7 +45355,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1092
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45241,13 +45368,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1096
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1099
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -45255,11 +45382,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1103
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1106
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -45273,7 +45400,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1112
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -45282,7 +45409,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1116
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -45298,7 +45425,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1121
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -45308,7 +45435,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1125
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45318,7 +45445,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1129
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -45329,7 +45456,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1133
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45339,7 +45466,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1137
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -45347,7 +45474,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1141
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -45358,7 +45485,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1145
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -45373,7 +45500,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1151
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -45382,13 +45509,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1156
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1159
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -45397,7 +45524,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1162
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -45407,7 +45534,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1165
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -45419,7 +45546,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1168
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -45429,24 +45556,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1171
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1174
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1177
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1180
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -45455,7 +45582,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1183
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -45463,7 +45590,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1186
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -45472,7 +45599,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1189
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -45482,7 +45609,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1193
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -45490,31 +45617,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1197
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1200
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1203
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1206
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1209
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -45522,7 +45649,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1212
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -45532,46 +45659,53 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1215
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1218
+#: doc/classes/ProjectSettings.xml:1221
msgid ""
-"If [code]true[/code] and available on the target device, enables high "
-"floating point precision for all shader computations in GLES2.\n"
+"iOS specific override for [member rendering/gles2/compatibility/"
+"disable_half_float], due to poor support for half-float vertex compression "
+"on many devices."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1224
+msgid ""
+"If [code]true[/code] and available on the target Android device, enables "
+"high floating point precision for all shader computations in GLES2.\n"
"[b]Warning:[/b] High floating point precision can be extremely slow on older "
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1225
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1228
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1231
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1234
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -45579,7 +45713,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1237
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -45589,7 +45723,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1240
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -45598,7 +45732,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1243
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -45607,20 +45741,20 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1246
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1249
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1252
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -45629,7 +45763,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1255
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -45637,7 +45771,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1258
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -45646,7 +45780,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -45656,20 +45790,20 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1267
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1274
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -45678,13 +45812,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -45694,46 +45828,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1293
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1296
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1299
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1302
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1305
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -45743,7 +45877,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -45755,7 +45889,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -45763,7 +45897,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1316
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -45771,7 +45905,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -45780,7 +45914,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1323
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -45794,7 +45928,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1328
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -45804,7 +45938,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1331
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -45813,7 +45947,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1334
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -45823,54 +45957,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1337
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1340
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1343
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1346
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1349
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1352
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1355
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1358
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -45881,61 +46015,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1365
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1368
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1371
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1374
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1377
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1380
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1383
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1386
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -45946,7 +46080,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -45955,26 +46089,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1393 doc/classes/ProjectSettings.xml:1396
#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1405
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1408
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1411
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -45985,20 +46119,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1418
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -46010,52 +46144,52 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1428
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1435
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1438
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1441
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1444
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1447
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1450
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1453
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -46063,7 +46197,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -46073,10 +46207,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -46085,10 +46219,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -46097,10 +46231,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -46109,10 +46243,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -46121,10 +46255,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -46148,9 +46282,8 @@ msgstr ""
#: doc/classes/QuadMesh.xml:11 doc/classes/Viewport.xml:19
#: doc/classes/ViewportTexture.xml:13
-#, fuzzy
msgid "https://godotengine.org/asset-library/asset/129"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgstr "https://godotengine.org/asset-library/asset/129"
#: doc/classes/QuadMesh.xml:17
msgid "Offset of the generated Quad. Useful for particles."
@@ -46177,12 +46310,11 @@ msgid ""
msgstr ""
#: doc/classes/Quat.xml:12
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/3d/using_transforms."
"html#interpolating-with-quaternions"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_transforms."
+"https://docs.godotengine.org/en/3.4/tutorials/3d/using_transforms."
"html#interpolating-with-quaternions"
#: doc/classes/Quat.xml:20
@@ -46350,11 +46482,12 @@ msgid ""
msgstr ""
#: doc/classes/RandomNumberGenerator.xml:19
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/math/random_number_generation."
"html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/math/index.html"
+msgstr ""
+"https://docs.godotengine.org/en/3.4/tutorials/math/random_number_generation."
+"html"
#: doc/classes/RandomNumberGenerator.xml:25
msgid ""
@@ -46788,40 +46921,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr ""
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -46829,14 +46976,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -46953,10 +47100,9 @@ msgid ""
msgstr ""
#: doc/classes/ReflectionProbe.xml:13
-#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/reflection_probes.html"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/reflection_probes.html"
+"https://docs.godotengine.org/en/3.4/tutorials/3d/reflection_probes.html"
#: doc/classes/ReflectionProbe.xml:19
msgid ""
@@ -47330,13 +47476,12 @@ msgid ""
msgstr ""
#: doc/classes/Resource.xml:11
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/3.4/getting_started/step_by_step/resources."
"html"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/step_by_step/"
-"resources.html"
+"https://docs.godotengine.org/en/3.4/getting_started/step_by_step/resources."
+"html"
#: doc/classes/Resource.xml:18
msgid ""
@@ -47872,9 +48017,8 @@ msgid ""
msgstr ""
#: doc/classes/RichTextLabel.xml:16
-#, fuzzy
msgid "https://godotengine.org/asset-library/asset/132"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgstr "https://godotengine.org/asset-library/asset/132"
#: doc/classes/RichTextLabel.xml:26
msgid ""
@@ -48668,14 +48812,12 @@ msgid ""
msgstr ""
#: doc/classes/RigidBody2D.xml:15
-#, fuzzy
msgid "https://godotengine.org/asset-library/asset/119"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgstr "https://godotengine.org/asset-library/asset/119"
#: doc/classes/RigidBody2D.xml:16 doc/classes/Sprite.xml:10
-#, fuzzy
msgid "https://godotengine.org/asset-library/asset/148"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgstr "https://godotengine.org/asset-library/asset/148"
#: doc/classes/RigidBody2D.xml:23
msgid ""
@@ -49171,6 +49313,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -49188,7 +49346,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -49196,11 +49354,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -49210,19 +49368,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -49249,13 +49407,12 @@ msgid ""
msgstr ""
#: doc/classes/RootMotionView.xml:11
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree."
"html#root-motion"
msgstr ""
"https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree."
-"html"
+"html#root-motion"
#: doc/classes/RootMotionView.xml:17
msgid "Path to an [AnimationTree] node to use as a basis for root motion."
@@ -49454,22 +49611,20 @@ msgid ""
msgstr ""
#: doc/classes/SceneTree.xml:12
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/3.4/getting_started/step_by_step/scene_tree."
"html"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/step_by_step/"
-"scene_tree.html"
+"https://docs.godotengine.org/en/3.4/getting_started/step_by_step/scene_tree."
+"html"
#: doc/classes/SceneTree.xml:13
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/viewports/multiple_resolutions."
"html"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/viewports/"
-"multiple_resolutions.html"
+"https://docs.godotengine.org/en/3.4/tutorials/viewports/multiple_resolutions."
+"html"
#: doc/classes/SceneTree.xml:21
msgid ""
@@ -49914,13 +50069,12 @@ msgid ""
msgstr ""
#: doc/classes/Script.xml:11
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/3.4/getting_started/step_by_step/scripting."
"html"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/step_by_step/"
-"scripting.html"
+"https://docs.godotengine.org/en/3.4/getting_started/step_by_step/scripting."
+"html"
#: doc/classes/Script.xml:17
msgid "Returns [code]true[/code] if the script can be instanced."
@@ -50219,17 +50373,15 @@ msgid ""
msgstr ""
#: doc/classes/Shader.xml:10 doc/classes/ShaderMaterial.xml:11
-#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/shading/index.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/shading/index.html"
+msgstr "https://docs.godotengine.org/en/3.4/tutorials/shading/index.html"
#: doc/classes/Shader.xml:11
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/shading/your_first_shader/"
"what_are_shaders.html"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/shading/your_first_shader/"
+"https://docs.godotengine.org/en/3.4/tutorials/shading/your_first_shader/"
"what_are_shaders.html"
#: doc/classes/Shader.xml:18
@@ -50560,11 +50712,10 @@ msgid ""
msgstr ""
#: doc/classes/Skeleton2D.xml:10
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/animation/2d_skeletons.html"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/2d_skeletons.html"
+"https://docs.godotengine.org/en/3.4/tutorials/animation/2d_skeletons.html"
#: doc/classes/Skeleton2D.xml:17
msgid ""
@@ -50870,10 +51021,8 @@ msgid ""
msgstr ""
#: doc/classes/SoftBody.xml:10
-#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/physics/soft_body.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/soft_body.html"
+msgstr "https://docs.godotengine.org/en/3.4/tutorials/physics/soft_body.html"
#: doc/classes/SoftBody.xml:44
msgid "Returns local translation of a vertex in the surface array."
@@ -50957,18 +51106,14 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml:12
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/3d/introduction_to_3d.html"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/introduction_to_3d.html"
+"https://docs.godotengine.org/en/3.4/tutorials/3d/introduction_to_3d.html"
#: doc/classes/Spatial.xml:13 doc/classes/Vector3.xml:16
-#, fuzzy
msgid "https://github.com/godotengine/godot-demo-projects/tree/master/3d"
-msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
+msgstr "https://github.com/godotengine/godot-demo-projects/tree/master/3d"
#: doc/classes/Spatial.xml:25
msgid ""
@@ -51271,10 +51416,8 @@ msgid ""
msgstr ""
#: doc/classes/SpatialMaterial.xml:10
-#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/spatial_material.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/spatial_material.html"
+msgstr "https://docs.godotengine.org/en/3.4/tutorials/3d/spatial_material.html"
#: doc/classes/SpatialMaterial.xml:17
msgid "Returns [code]true[/code], if the specified [enum Feature] is enabled."
@@ -53289,12 +53432,11 @@ msgid ""
msgstr ""
#: doc/classes/String.xml:10
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/3.4/getting_started/scripting/gdscript/"
"gdscript_format_string.html"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
+"https://docs.godotengine.org/en/3.4/getting_started/scripting/gdscript/"
"gdscript_format_string.html"
#: doc/classes/String.xml:17
@@ -54637,20 +54779,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -54661,28 +54808,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -54694,19 +54841,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
@@ -56260,9 +56407,8 @@ msgid ""
msgstr ""
#: doc/classes/Theme.xml:11
-#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/gui/gui_skinning.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/gui/gui_skinning.html"
+msgstr "https://docs.godotengine.org/en/3.4/tutorials/gui/gui_skinning.html"
#: doc/classes/Theme.xml:17
msgid "Clears all values on the theme."
@@ -56630,12 +56776,10 @@ msgid ""
msgstr ""
#: doc/classes/Thread.xml:12
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/threads/thread_safe_apis.html"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/threads/thread_safe_apis."
-"html"
+"https://docs.godotengine.org/en/3.4/tutorials/threads/thread_safe_apis.html"
#: doc/classes/Thread.xml:19
msgid ""
@@ -56710,15 +56854,12 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml:11 doc/classes/TileSet.xml:11
-#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/2d/using_tilemaps.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/using_tilemaps.html"
+msgstr "https://docs.godotengine.org/en/3.4/tutorials/2d/using_tilemaps.html"
#: doc/classes/TileMap.xml:14 doc/classes/TileSet.xml:14
-#, fuzzy
msgid "https://godotengine.org/asset-library/asset/111"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgstr "https://godotengine.org/asset-library/asset/111"
#: doc/classes/TileMap.xml:23
msgid "Clears all cells."
@@ -57492,26 +57633,33 @@ msgid "Text [Color] used when the [ToolButton] is disabled."
msgstr ""
#: doc/classes/ToolButton.xml:39
-msgid "Text [Color] used when the [ToolButton] is being hovered."
+msgid ""
+"Text [Color] used when the [ToolButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/ToolButton.xml:42
-msgid "Text [Color] used when the [ToolButton] is being pressed."
+msgid "Text [Color] used when the [ToolButton] is being hovered."
msgstr ""
#: doc/classes/ToolButton.xml:45
-msgid "[StyleBox] used when the [ToolButton] is being hovered."
+msgid "Text [Color] used when the [ToolButton] is being pressed."
msgstr ""
#: doc/classes/ToolButton.xml:48
-msgid "The horizontal space between [ToolButton]'s icon and text."
+msgid "[StyleBox] used when the [ToolButton] is being hovered."
msgstr ""
#: doc/classes/ToolButton.xml:51
-msgid "Default [StyleBox] for the [ToolButton]."
+msgid "The horizontal space between [ToolButton]'s icon and text."
msgstr ""
#: doc/classes/ToolButton.xml:54
+msgid "Default [StyleBox] for the [ToolButton]."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:57
msgid "[StyleBox] used when the [ToolButton] is being pressed."
msgstr ""
@@ -57867,18 +58015,16 @@ msgid ""
msgstr ""
#: doc/classes/Translation.xml:10 doc/classes/TranslationServer.xml:10
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/i18n/internationalizing_games."
"html"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/i18n/"
-"internationalizing_games.html"
+"https://docs.godotengine.org/en/3.4/tutorials/i18n/internationalizing_games."
+"html"
#: doc/classes/Translation.xml:11 doc/classes/TranslationServer.xml:11
-#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/i18n/locales.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/i18n/locales.html"
+msgstr "https://docs.godotengine.org/en/3.4/tutorials/i18n/locales.html"
#: doc/classes/Translation.xml:18
msgid "Virtual method to override [method get_message]."
@@ -59888,10 +60034,8 @@ msgid ""
msgstr ""
#: doc/classes/Variant.xml:53
-#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/development/cpp/variant_class.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/development/cpp/variant_class.html"
+msgstr "https://docs.godotengine.org/en/3.4/development/cpp/variant_class.html"
#: doc/classes/VBoxContainer.xml:4
msgid "Vertical box container."
@@ -60791,29 +60935,24 @@ msgid ""
msgstr ""
#: doc/classes/Viewport.xml:16
-#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/viewports/index.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/viewports/index.html"
+msgstr "https://docs.godotengine.org/en/3.4/tutorials/viewports/index.html"
#: doc/classes/Viewport.xml:18 doc/classes/ViewportTexture.xml:12
-#, fuzzy
msgid "https://godotengine.org/asset-library/asset/128"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgstr "https://godotengine.org/asset-library/asset/128"
#: doc/classes/Viewport.xml:20
-#, fuzzy
msgid "https://godotengine.org/asset-library/asset/130"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgstr "https://godotengine.org/asset-library/asset/130"
#: doc/classes/Viewport.xml:21
-#, fuzzy
msgid "https://godotengine.org/asset-library/asset/541"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgstr "https://godotengine.org/asset-library/asset/541"
#: doc/classes/Viewport.xml:22 doc/classes/ViewportTexture.xml:14
-#, fuzzy
msgid "https://godotengine.org/asset-library/asset/586"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgstr "https://godotengine.org/asset-library/asset/586"
#: doc/classes/Viewport.xml:28
msgid ""
@@ -61634,13 +61773,12 @@ msgid ""
msgstr ""
#: modules/visual_script/doc_classes/VisualScript.xml:12
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/3.4/getting_started/scripting/visual_script/"
"index.html"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/"
-"visual_script/index.html"
+"https://docs.godotengine.org/en/3.4/getting_started/scripting/visual_script/"
+"index.html"
#: modules/visual_script/doc_classes/VisualScript.xml:19
msgid "Add a custom signal with the specified name to the VisualScript."
@@ -63401,12 +63539,10 @@ msgid ""
msgstr ""
#: doc/classes/VisualServer.xml:18
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/optimization/using_servers.html"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/optimization/using_servers."
-"html"
+"https://docs.godotengine.org/en/3.4/tutorials/optimization/using_servers.html"
#: doc/classes/VisualServer.xml:28
msgid "Sets images to be rendered in the window margin."
@@ -66508,11 +66644,10 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNode.xml:10
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/shading/visual_shaders.html"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/shading/visual_shaders.html"
+"https://docs.godotengine.org/en/3.4/tutorials/shading/visual_shaders.html"
#: doc/classes/VisualShaderNode.xml:16
msgid ""
@@ -66955,12 +67090,11 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeCustom.xml:16
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/plugins/editor/"
"visual_shader_plugins.html"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
+"https://docs.godotengine.org/en/3.4/tutorials/plugins/editor/"
"visual_shader_plugins.html"
#: doc/classes/VisualShaderNodeCustom.xml:22
@@ -67301,12 +67435,11 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeInput.xml:9
-#, fuzzy
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/shading/shading_reference/"
"index.html"
msgstr ""
-"https://docs.godotengine.org/en/stable/tutorials/shading/shading_reference/"
+"https://docs.godotengine.org/en/3.4/tutorials/shading/shading_reference/"
"index.html"
#: doc/classes/VisualShaderNodeInput.xml:20
@@ -67832,7 +67965,6 @@ msgid "Returns the arc-sine of the parameter."
msgstr ""
#: doc/classes/VisualShaderNodeVectorFunc.xml:50
-#, fuzzy
msgid "Returns the inverse hyperbolic sine of the parameter."
msgstr "Retorna el sinus hiperbòlic invers del paràmetre."
diff --git a/doc/translations/classes.pot b/doc/translations/classes.pot
index bc08fd3f2d..337c57fe7c 100644
--- a/doc/translations/classes.pot
+++ b/doc/translations/classes.pot
@@ -14,43 +14,43 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Description"
msgstr ""
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Tutorials"
msgstr ""
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Properties"
msgstr ""
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Methods"
msgstr ""
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Theme Properties"
msgstr ""
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Signals"
msgstr ""
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Enumerations"
msgstr ""
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Constants"
msgstr ""
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Property Descriptions"
msgstr ""
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Method Descriptions"
msgstr ""
@@ -3581,112 +3581,121 @@ msgid ""
msgstr ""
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr ""
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
msgstr ""
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
msgstr ""
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
msgstr ""
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr ""
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr ""
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr ""
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
msgstr ""
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr ""
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
msgstr ""
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
msgstr ""
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr ""
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
"positive.\n"
@@ -4758,7 +4767,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -6191,21 +6200,25 @@ msgstr ""
#: doc/classes/Area.xml:17
msgid ""
-"Returns a list of intersecting [Area]s. For performance reasons (collisions "
-"are all processed at the same time) this list is modified once during the "
-"physics step, not immediately after objects are moved. Consider using "
-"signals instead."
+"Returns a list of intersecting [Area]s. The overlapping area's [member "
+"CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:23
+#: doc/classes/Area.xml:24
msgid ""
-"Returns a list of intersecting [PhysicsBody]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody]s. The overlapping body's "
+"[member CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:30
+#: doc/classes/Area.xml:32
msgid ""
"If [code]true[/code], the given area overlaps the Area.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6213,7 +6226,7 @@ msgid ""
"physics step. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:38
+#: doc/classes/Area.xml:40
msgid ""
"If [code]true[/code], the given physics body overlaps the Area.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6224,7 +6237,7 @@ msgid ""
"their tiles with collision shapes as a virtual physics body)."
msgstr ""
-#: doc/classes/Area.xml:46
+#: doc/classes/Area.xml:48
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
"velocity lost per second.\n"
@@ -6232,41 +6245,41 @@ msgid ""
"details about damping."
msgstr ""
-#: doc/classes/Area.xml:50 doc/classes/Area2D.xml:52
+#: doc/classes/Area.xml:52 doc/classes/Area2D.xml:54
msgid "The name of the area's audio bus."
msgstr ""
-#: doc/classes/Area.xml:53 doc/classes/Area2D.xml:55
+#: doc/classes/Area.xml:55 doc/classes/Area2D.xml:57
msgid ""
"If [code]true[/code], the area's audio bus overrides the default audio bus."
msgstr ""
-#: doc/classes/Area.xml:56
+#: doc/classes/Area.xml:58
msgid ""
"The area's gravity intensity (in meters per second squared). This value "
"multiplies the gravity vector. This is useful to alter the force of gravity "
"without altering its direction."
msgstr ""
-#: doc/classes/Area.xml:59 doc/classes/Area2D.xml:61
+#: doc/classes/Area.xml:61 doc/classes/Area2D.xml:63
msgid ""
"The falloff factor for point gravity. The greater the value, the faster "
"gravity decreases with distance."
msgstr ""
-#: doc/classes/Area.xml:62 doc/classes/Area2D.xml:64
+#: doc/classes/Area.xml:64 doc/classes/Area2D.xml:66
msgid ""
"If [code]true[/code], gravity is calculated from a point (set via [member "
"gravity_vec]). See also [member space_override]."
msgstr ""
-#: doc/classes/Area.xml:65 doc/classes/Area2D.xml:67
+#: doc/classes/Area.xml:67 doc/classes/Area2D.xml:69
msgid ""
"The area's gravity vector (not normalized). If gravity is a point (see "
"[member gravity_point]), this will be the point of attraction."
msgstr ""
-#: doc/classes/Area.xml:68
+#: doc/classes/Area.xml:70
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
"velocity lost per second.\n"
@@ -6274,61 +6287,61 @@ msgid ""
"about damping."
msgstr ""
-#: doc/classes/Area.xml:72 doc/classes/Area2D.xml:74
+#: doc/classes/Area.xml:74 doc/classes/Area2D.xml:76
msgid "If [code]true[/code], other monitoring areas can detect this area."
msgstr ""
-#: doc/classes/Area.xml:75 doc/classes/Area2D.xml:77
+#: doc/classes/Area.xml:77 doc/classes/Area2D.xml:79
msgid ""
"If [code]true[/code], the area detects bodies or areas entering and exiting "
"it."
msgstr ""
-#: doc/classes/Area.xml:78 doc/classes/Area2D.xml:80
+#: doc/classes/Area.xml:80 doc/classes/Area2D.xml:82
msgid "The area's priority. Higher priority areas are processed first."
msgstr ""
-#: doc/classes/Area.xml:81
+#: doc/classes/Area.xml:83
msgid ""
"The degree to which this area applies reverb to its associated audio. Ranges "
"from [code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
msgstr ""
-#: doc/classes/Area.xml:84
+#: doc/classes/Area.xml:86
msgid "If [code]true[/code], the area applies reverb to its associated audio."
msgstr ""
-#: doc/classes/Area.xml:87
+#: doc/classes/Area.xml:89
msgid "The reverb bus name to use for this area's associated audio."
msgstr ""
-#: doc/classes/Area.xml:90
+#: doc/classes/Area.xml:92
msgid ""
"The degree to which this area's reverb is a uniform effect. Ranges from "
"[code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
msgstr ""
-#: doc/classes/Area.xml:93 doc/classes/Area2D.xml:83
+#: doc/classes/Area.xml:95 doc/classes/Area2D.xml:85
msgid ""
"Override mode for gravity and damping calculations within this area. See "
"[enum SpaceOverride] for possible values."
msgstr ""
-#: doc/classes/Area.xml:100
+#: doc/classes/Area.xml:102
msgid ""
"Emitted when another Area enters this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
-#: doc/classes/Area.xml:107
+#: doc/classes/Area.xml:109
msgid ""
"Emitted when another Area exits this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
-#: doc/classes/Area.xml:117 doc/classes/Area.xml:130
+#: doc/classes/Area.xml:119 doc/classes/Area.xml:132
msgid ""
"Emitted when one of another Area's [Shape]s enters one of this Area's "
"[Shape]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6343,7 +6356,7 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:140
+#: doc/classes/Area.xml:142
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] enters this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -6352,7 +6365,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:147
+#: doc/classes/Area.xml:149
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] exits this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -6361,7 +6374,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:157 doc/classes/Area.xml:170
+#: doc/classes/Area.xml:159 doc/classes/Area.xml:172
msgid ""
"Emitted when one of a [PhysicsBody] or [GridMap]'s [Shape]s enters one of "
"this Area's [Shape]s. Requires [member monitoring] to be set to [code]true[/"
@@ -6378,29 +6391,29 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:180 doc/classes/Area2D.xml:170
+#: doc/classes/Area.xml:182 doc/classes/Area2D.xml:172
msgid "This area does not affect gravity/damping."
msgstr ""
-#: doc/classes/Area.xml:183 doc/classes/Area2D.xml:173
+#: doc/classes/Area.xml:185 doc/classes/Area2D.xml:175
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order)."
msgstr ""
-#: doc/classes/Area.xml:186 doc/classes/Area2D.xml:176
+#: doc/classes/Area.xml:188 doc/classes/Area2D.xml:178
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order), ignoring any lower priority areas."
msgstr ""
-#: doc/classes/Area.xml:189 doc/classes/Area2D.xml:179
+#: doc/classes/Area.xml:191 doc/classes/Area2D.xml:181
msgid ""
"This area replaces any gravity/damping, even the defaults, ignoring any "
"lower priority areas."
msgstr ""
-#: doc/classes/Area.xml:192 doc/classes/Area2D.xml:182
+#: doc/classes/Area.xml:194 doc/classes/Area2D.xml:184
msgid ""
"This area replaces any gravity/damping calculated so far (in [member "
"priority] order), but keeps calculating the rest of the areas."
@@ -6435,21 +6448,25 @@ msgstr ""
#: doc/classes/Area2D.xml:19
msgid ""
-"Returns a list of intersecting [Area2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [Area2D]s. The overlapping area's [member "
+"CollisionObject2D.collision_layer] must be part of this area's [member "
+"CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:25
+#: doc/classes/Area2D.xml:26
msgid ""
-"Returns a list of intersecting [PhysicsBody2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody2D]s. The overlapping body's "
+"[member CollisionObject2D.collision_layer] must be part of this area's "
+"[member CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:32
+#: doc/classes/Area2D.xml:34
msgid ""
"If [code]true[/code], the given area overlaps the Area2D.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6457,7 +6474,7 @@ msgid ""
"the physics step. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:40
+#: doc/classes/Area2D.xml:42
msgid ""
"If [code]true[/code], the given physics body overlaps the Area2D.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6468,7 +6485,7 @@ msgid ""
"register their tiles with collision shapes as a virtual physics body)."
msgstr ""
-#: doc/classes/Area2D.xml:48
+#: doc/classes/Area2D.xml:50
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
"velocity lost per second.\n"
@@ -6476,14 +6493,14 @@ msgid ""
"details about damping."
msgstr ""
-#: doc/classes/Area2D.xml:58
+#: doc/classes/Area2D.xml:60
msgid ""
"The area's gravity intensity (in pixels per second squared). This value "
"multiplies the gravity vector. This is useful to alter the force of gravity "
"without altering its direction."
msgstr ""
-#: doc/classes/Area2D.xml:70
+#: doc/classes/Area2D.xml:72
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
"velocity lost per second.\n"
@@ -6491,21 +6508,21 @@ msgid ""
"about damping."
msgstr ""
-#: doc/classes/Area2D.xml:90
+#: doc/classes/Area2D.xml:92
msgid ""
"Emitted when another Area2D enters this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-#: doc/classes/Area2D.xml:97
+#: doc/classes/Area2D.xml:99
msgid ""
"Emitted when another Area2D exits this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-#: doc/classes/Area2D.xml:107
+#: doc/classes/Area2D.xml:109
msgid ""
"Emitted when one of another Area2D's [Shape2D]s enters one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6520,7 +6537,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:120
+#: doc/classes/Area2D.xml:122
msgid ""
"Emitted when one of another Area2D's [Shape2D]s exits one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6535,7 +6552,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:130
+#: doc/classes/Area2D.xml:132
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] enters this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -6544,7 +6561,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:137
+#: doc/classes/Area2D.xml:139
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] exits this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -6553,7 +6570,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:147
+#: doc/classes/Area2D.xml:149
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s enters one "
"of this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -6572,7 +6589,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:160
+#: doc/classes/Area2D.xml:162
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s exits one of "
"this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -10127,40 +10144,45 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
-"no save path is provided it will try to match the path from the current "
+"no root node is provided, parent of this node will be used as root instead. "
+"If no save path is provided it will try to match the path from the current "
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -10174,62 +10196,62 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
msgid "The rotation of the baked custom sky."
msgstr ""
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -10237,35 +10259,35 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -10273,13 +10295,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -10291,65 +10313,77 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr ""
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
msgid "Baking was successful."
msgstr ""
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr ""
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr ""
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr ""
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:133
+#: doc/classes/BakedLightmap.xml:132
+msgid ""
+"Returns if lightmapper can't be created. Unless you are using a custom "
+"lightmapper, please report this as bug."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:135
+msgid ""
+"There is no root node to start baking from. Either provide [code]from_node[/"
+"code] argument or attach this node to a parent that should be used as root."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:136
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:139
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:142
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -10797,8 +10831,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -11183,26 +11220,33 @@ msgid "Text [Color] used when the [Button] is disabled."
msgstr ""
#: doc/classes/Button.xml:77
-msgid "Text [Color] used when the [Button] is being hovered."
+msgid ""
+"Text [Color] used when the [Button] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/Button.xml:80
-msgid "Text [Color] used when the [Button] is being pressed."
+msgid "Text [Color] used when the [Button] is being hovered."
msgstr ""
#: doc/classes/Button.xml:83
-msgid "[StyleBox] used when the [Button] is being hovered."
+msgid "Text [Color] used when the [Button] is being pressed."
msgstr ""
#: doc/classes/Button.xml:86
-msgid "The horizontal space between [Button]'s icon and text."
+msgid "[StyleBox] used when the [Button] is being hovered."
msgstr ""
#: doc/classes/Button.xml:89
-msgid "Default [StyleBox] for the [Button]."
+msgid "The horizontal space between [Button]'s icon and text."
msgstr ""
#: doc/classes/Button.xml:92
+msgid "Default [StyleBox] for the [Button]."
+msgstr ""
+
+#: doc/classes/Button.xml:95
msgid "[StyleBox] used when the [Button] is being pressed."
msgstr ""
@@ -12661,80 +12705,96 @@ msgstr ""
msgid "The check icon to display when the [CheckBox] is checked."
msgstr ""
-#: doc/classes/CheckBox.xml:30
+#: doc/classes/CheckBox.xml:28
+msgid "The check icon to display when the [CheckBox] is checked and disabled."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:31
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is disabled."
msgstr ""
-#: doc/classes/CheckBox.xml:33
+#: doc/classes/CheckBox.xml:34
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is focused."
msgstr ""
-#: doc/classes/CheckBox.xml:36
+#: doc/classes/CheckBox.xml:37
msgid "The [Font] to use for the [CheckBox] text."
msgstr ""
-#: doc/classes/CheckBox.xml:39
+#: doc/classes/CheckBox.xml:40
msgid "The [CheckBox] text's font color."
msgstr ""
-#: doc/classes/CheckBox.xml:42
+#: doc/classes/CheckBox.xml:43
msgid "The [CheckBox] text's font color when it's disabled."
msgstr ""
-#: doc/classes/CheckBox.xml:45
+#: doc/classes/CheckBox.xml:46
+msgid ""
+"The [CheckBox] text's font color when it's focused. Only replaces the normal "
+"text color of the checkbox. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:49
msgid "The [CheckBox] text's font color when it's hovered."
msgstr ""
-#: doc/classes/CheckBox.xml:48
+#: doc/classes/CheckBox.xml:52
msgid "The [CheckBox] text's font color when it's hovered and pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:51
+#: doc/classes/CheckBox.xml:55
msgid "The [CheckBox] text's font color when it's pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:54
+#: doc/classes/CheckBox.xml:58
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered."
msgstr ""
-#: doc/classes/CheckBox.xml:57
+#: doc/classes/CheckBox.xml:61
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered and "
"pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:60
+#: doc/classes/CheckBox.xml:64
msgid "The separation between the check icon and the text (in pixels)."
msgstr ""
-#: doc/classes/CheckBox.xml:63 doc/classes/CheckButton.xml:58
+#: doc/classes/CheckBox.xml:67 doc/classes/CheckButton.xml:61
msgid "The [StyleBox] to display as a background."
msgstr ""
-#: doc/classes/CheckBox.xml:66
+#: doc/classes/CheckBox.xml:70
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:69
+#: doc/classes/CheckBox.xml:73
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is checked."
msgstr ""
-#: doc/classes/CheckBox.xml:74
+#: doc/classes/CheckBox.xml:78
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is unchecked."
msgstr ""
-#: doc/classes/CheckBox.xml:79
+#: doc/classes/CheckBox.xml:83
msgid "The check icon to display when the [CheckBox] is unchecked."
msgstr ""
+#: doc/classes/CheckBox.xml:86
+msgid ""
+"The check icon to display when the [CheckBox] is unchecked and disabled."
+msgstr ""
+
#: doc/classes/CheckButton.xml:4
msgid "Checkable button. See also [CheckBox]."
msgstr ""
@@ -12778,49 +12838,56 @@ msgid "The [CheckButton] text's font color when it's disabled."
msgstr ""
#: doc/classes/CheckButton.xml:40
-msgid "The [CheckButton] text's font color when it's hovered."
+msgid ""
+"The [CheckButton] text's font color when it's focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/CheckButton.xml:43
-msgid "The [CheckButton] text's font color when it's hovered and pressed."
+msgid "The [CheckButton] text's font color when it's hovered."
msgstr ""
#: doc/classes/CheckButton.xml:46
-msgid "The [CheckButton] text's font color when it's pressed."
+msgid "The [CheckButton] text's font color when it's hovered and pressed."
msgstr ""
#: doc/classes/CheckButton.xml:49
+msgid "The [CheckButton] text's font color when it's pressed."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:52
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered."
msgstr ""
-#: doc/classes/CheckButton.xml:52
+#: doc/classes/CheckButton.xml:55
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered "
"and pressed."
msgstr ""
-#: doc/classes/CheckButton.xml:55
+#: doc/classes/CheckButton.xml:58
msgid "The separation between the toggle icon and the text (in pixels)."
msgstr ""
-#: doc/classes/CheckButton.xml:61
+#: doc/classes/CheckButton.xml:64
msgid "The icon to display when the [CheckButton] is unchecked."
msgstr ""
-#: doc/classes/CheckButton.xml:64
+#: doc/classes/CheckButton.xml:67
msgid "The icon to display when the [CheckButton] is unchecked and disabled."
msgstr ""
-#: doc/classes/CheckButton.xml:67
+#: doc/classes/CheckButton.xml:70
msgid "The icon to display when the [CheckButton] is checked."
msgstr ""
-#: doc/classes/CheckButton.xml:70
+#: doc/classes/CheckButton.xml:73
msgid "The icon to display when the [CheckButton] is checked and disabled."
msgstr ""
-#: doc/classes/CheckButton.xml:73
+#: doc/classes/CheckButton.xml:76
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is pressed."
msgstr ""
@@ -14588,26 +14655,33 @@ msgid "Text [Color] used when the [ColorPickerButton] is disabled."
msgstr ""
#: doc/classes/ColorPickerButton.xml:80
-msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
+msgid ""
+"Text [Color] used when the [ColorPickerButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/ColorPickerButton.xml:83
-msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
+msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
msgstr ""
#: doc/classes/ColorPickerButton.xml:86
-msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
+msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
msgstr ""
#: doc/classes/ColorPickerButton.xml:89
-msgid "The horizontal space between [ColorPickerButton]'s icon and text."
+msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
msgstr ""
#: doc/classes/ColorPickerButton.xml:92
-msgid "Default [StyleBox] for the [ColorPickerButton]."
+msgid "The horizontal space between [ColorPickerButton]'s icon and text."
msgstr ""
#: doc/classes/ColorPickerButton.xml:95
+msgid "Default [StyleBox] for the [ColorPickerButton]."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:98
msgid "[StyleBox] used when the [ColorPickerButton] is being pressed."
msgstr ""
@@ -19819,7 +19893,8 @@ msgid ""
"get_resource_type]. They may optionally specify some import presets that "
"affect the import process. EditorImportPlugins are responsible for creating "
"the resources and saving them in the [code].import[/code] directory (see "
-"[member ProjectSettings.application/config/project_data_dir_name]).\n"
+"[member ProjectSettings.application/config/"
+"use_hidden_project_data_directory]).\n"
"Below is an example EditorImportPlugin that imports a [Mesh] from a file "
"with the extension \".special\" or \".spec\":\n"
"[codeblock]\n"
@@ -19943,7 +20018,7 @@ msgstr ""
msgid ""
"Gets the extension used to save this resource in the [code].import[/code] "
"directory (see [member ProjectSettings.application/config/"
-"project_data_dir_name])."
+"use_hidden_project_data_directory])."
msgstr ""
#: doc/classes/EditorImportPlugin.xml:130
@@ -20973,8 +21048,11 @@ msgstr ""
msgid "Emitted when the value of the edited resource was changed."
msgstr ""
-#: doc/classes/EditorResourcePicker.xml:89
-msgid "Emitted when the resource value was set and user clicked to edit it."
+#: doc/classes/EditorResourcePicker.xml:90
+msgid ""
+"Emitted when the resource value was set and user clicked to edit it. When "
+"[code]edit[/code] is [code]true[/code], the signal was caused by the context "
+"menu \"Edit\" option."
msgstr ""
#: doc/classes/EditorResourcePreview.xml:4
@@ -24702,20 +24780,31 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr ""
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -24724,14 +24813,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -24741,80 +24834,80 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
msgstr ""
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr ""
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -27548,16 +27641,18 @@ msgstr ""
#: doc/classes/Image.xml:436
msgid ""
"OpenGL texture format [code]RED[/code] with a single component and a "
-"bitdepth of 8."
+"bitdepth of 8.\n"
+"[b]Note:[/b] When using the GLES2 backend, this uses the alpha channel "
+"instead of the red channel for storage."
msgstr ""
-#: doc/classes/Image.xml:439
+#: doc/classes/Image.xml:440
msgid ""
"OpenGL texture format [code]RG[/code] with two components and a bitdepth of "
"8 for each."
msgstr ""
-#: doc/classes/Image.xml:442
+#: doc/classes/Image.xml:443
msgid ""
"OpenGL texture format [code]RGB[/code] with three components, each with a "
"bitdepth of 8.\n"
@@ -27565,7 +27660,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:446
+#: doc/classes/Image.xml:447
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 8.\n"
@@ -27573,73 +27668,73 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:450
+#: doc/classes/Image.xml:451
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 4."
msgstr ""
-#: doc/classes/Image.xml:453
+#: doc/classes/Image.xml:454
msgid ""
"OpenGL texture format [code]GL_RGB5_A1[/code] where 5 bits of depth for each "
"component of RGB and one bit for alpha."
msgstr ""
-#: doc/classes/Image.xml:456
+#: doc/classes/Image.xml:457
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 32-"
"bit floating-point value."
msgstr ""
-#: doc/classes/Image.xml:459
+#: doc/classes/Image.xml:460
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:462
+#: doc/classes/Image.xml:463
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:465
+#: doc/classes/Image.xml:466
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:468
+#: doc/classes/Image.xml:469
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 16-"
"bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:471
+#: doc/classes/Image.xml:472
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:474
+#: doc/classes/Image.xml:475
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:477
+#: doc/classes/Image.xml:478
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:480
+#: doc/classes/Image.xml:481
msgid ""
"A special OpenGL texture format where the three color components have 9 bits "
"of precision and all three share a single 5-bit exponent."
msgstr ""
-#: doc/classes/Image.xml:483
+#: doc/classes/Image.xml:484
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 1, and is the smallest variation "
@@ -27649,7 +27744,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:487
+#: doc/classes/Image.xml:488
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 2, and color data is interpreted "
@@ -27659,7 +27754,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:491
+#: doc/classes/Image.xml:492
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format also known as Block Compression 3 or BC3 that contains 64 "
@@ -27670,7 +27765,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:495
+#: doc/classes/Image.xml:496
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -27678,7 +27773,7 @@ msgid ""
"DXT5 uses for the alpha channel."
msgstr ""
-#: doc/classes/Image.xml:498
+#: doc/classes/Image.xml:499
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -27686,7 +27781,7 @@ msgid ""
"algorithm that DXT5 uses for the alpha channel."
msgstr ""
-#: doc/classes/Image.xml:501
+#: doc/classes/Image.xml:502
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned normalized "
@@ -27695,21 +27790,21 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:505
+#: doc/classes/Image.xml:506
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with signed floating-point "
"RGB components."
msgstr ""
-#: doc/classes/Image.xml:508
+#: doc/classes/Image.xml:509
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned floating-point "
"RGB components."
msgstr ""
-#: doc/classes/Image.xml:511
+#: doc/classes/Image.xml:512
msgid ""
"Texture format used on PowerVR-supported mobile platforms, uses 2-bit color "
"depth with no alpha. More information can be found [url=https://en.wikipedia."
@@ -27718,25 +27813,25 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:515
+#: doc/classes/Image.xml:516
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with an "
"alpha component."
msgstr ""
-#: doc/classes/Image.xml:518
+#: doc/classes/Image.xml:519
msgid ""
"Similar to [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with 4-"
"bit color depth and no alpha."
msgstr ""
-#: doc/classes/Image.xml:521
+#: doc/classes/Image.xml:522
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC4[/url], but with an "
"alpha component."
msgstr ""
-#: doc/classes/Image.xml:524
+#: doc/classes/Image.xml:525
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC1]Ericsson Texture Compression format 1[/"
@@ -27744,7 +27839,7 @@ msgid ""
"standard. This format cannot store an alpha channel."
msgstr ""
-#: doc/classes/Image.xml:527
+#: doc/classes/Image.xml:528
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27752,7 +27847,7 @@ msgid ""
"unsigned data."
msgstr ""
-#: doc/classes/Image.xml:530
+#: doc/classes/Image.xml:531
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27760,7 +27855,7 @@ msgid ""
"channel of signed data."
msgstr ""
-#: doc/classes/Image.xml:533
+#: doc/classes/Image.xml:534
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27768,7 +27863,7 @@ msgid ""
"of unsigned data."
msgstr ""
-#: doc/classes/Image.xml:536
+#: doc/classes/Image.xml:537
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27776,7 +27871,7 @@ msgid ""
"channels of signed data."
msgstr ""
-#: doc/classes/Image.xml:539
+#: doc/classes/Image.xml:540
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27786,7 +27881,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:543
+#: doc/classes/Image.xml:544
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27796,7 +27891,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:547
+#: doc/classes/Image.xml:548
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27807,31 +27902,31 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:551
+#: doc/classes/Image.xml:552
msgid "Represents the size of the [enum Format] enum."
msgstr ""
-#: doc/classes/Image.xml:554
+#: doc/classes/Image.xml:555
msgid ""
"Performs nearest-neighbor interpolation. If the image is resized, it will be "
"pixelated."
msgstr ""
-#: doc/classes/Image.xml:557
+#: doc/classes/Image.xml:558
msgid ""
"Performs bilinear interpolation. If the image is resized, it will be blurry. "
"This mode is faster than [constant INTERPOLATE_CUBIC], but it results in "
"lower quality."
msgstr ""
-#: doc/classes/Image.xml:560
+#: doc/classes/Image.xml:561
msgid ""
"Performs cubic interpolation. If the image is resized, it will be blurry. "
"This mode often gives better results compared to [constant "
"INTERPOLATE_BILINEAR], at the cost of being slower."
msgstr ""
-#: doc/classes/Image.xml:563
+#: doc/classes/Image.xml:564
msgid ""
"Performs bilinear separately on the two most-suited mipmap levels, then "
"linearly interpolates between them.\n"
@@ -27846,55 +27941,55 @@ msgid ""
"a new set will be generated for the resulting image."
msgstr ""
-#: doc/classes/Image.xml:570
+#: doc/classes/Image.xml:571
msgid ""
"Performs Lanczos interpolation. This is the slowest image resizing mode, but "
"it typically gives the best results, especially when downscalng images."
msgstr ""
-#: doc/classes/Image.xml:573
+#: doc/classes/Image.xml:574
msgid "Image does not have alpha."
msgstr ""
-#: doc/classes/Image.xml:576
+#: doc/classes/Image.xml:577
msgid "Image stores alpha in a single bit."
msgstr ""
-#: doc/classes/Image.xml:579
+#: doc/classes/Image.xml:580
msgid "Image uses alpha."
msgstr ""
-#: doc/classes/Image.xml:582
+#: doc/classes/Image.xml:583
msgid "Use S3TC compression."
msgstr ""
-#: doc/classes/Image.xml:585
+#: doc/classes/Image.xml:586
msgid "Use PVRTC2 compression."
msgstr ""
-#: doc/classes/Image.xml:588
+#: doc/classes/Image.xml:589
msgid "Use PVRTC4 compression."
msgstr ""
-#: doc/classes/Image.xml:591
+#: doc/classes/Image.xml:592
msgid "Use ETC compression."
msgstr ""
-#: doc/classes/Image.xml:594
+#: doc/classes/Image.xml:595
msgid "Use ETC2 compression."
msgstr ""
-#: doc/classes/Image.xml:597
+#: doc/classes/Image.xml:598
msgid ""
"Source texture (before compression) is a regular texture. Default for all "
"textures."
msgstr ""
-#: doc/classes/Image.xml:600
+#: doc/classes/Image.xml:601
msgid "Source texture (before compression) is in sRGB space."
msgstr ""
-#: doc/classes/Image.xml:603
+#: doc/classes/Image.xml:604
msgid ""
"Source texture (before compression) is a normal texture (e.g. it can be "
"compressed into two channels)."
@@ -28117,6 +28212,17 @@ msgstr ""
#: doc/classes/Input.xml:43
msgid ""
+"Sends all input events which are in the current buffer to the game loop. "
+"These events may have been buffered as a result of accumulated input "
+"([method set_use_accumulated_input]) or agile input flushing ([member "
+"ProjectSettings.input_devices/buffering/agile_event_flushing]).\n"
+"The engine will already do this itself at key execution points (at least "
+"once per frame). However, this can be useful in advanced cases where you "
+"want precise control over the timing of event handling."
+msgstr ""
+
+#: doc/classes/Input.xml:50
+msgid ""
"Returns the acceleration of the device's accelerometer sensor, if the device "
"has one. Otherwise, the method returns [constant Vector3.ZERO].\n"
"Note this method returns an empty [Vector3] when running from the editor "
@@ -28128,7 +28234,7 @@ msgid ""
"the Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:53
+#: doc/classes/Input.xml:60
msgid ""
"Returns a value between 0 and 1 representing the raw intensity of the given "
"action, ignoring the action's deadzone. In most cases, you should use "
@@ -28138,7 +28244,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:62
+#: doc/classes/Input.xml:69
msgid ""
"Returns a value between 0 and 1 representing the intensity of the given "
"action. In a joypad, for example, the further away the axis (analog sticks "
@@ -28150,7 +28256,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:71
+#: doc/classes/Input.xml:78
msgid ""
"Get axis input by specifying two actions, one negative and one positive.\n"
"This is a shorthand for writing [code]Input."
@@ -28158,17 +28264,17 @@ msgid ""
"get_action_strength(\"negative_action\")[/code]."
msgstr ""
-#: doc/classes/Input.xml:78
+#: doc/classes/Input.xml:85
msgid ""
"Returns an [Array] containing the device IDs of all currently connected "
"joypads."
msgstr ""
-#: doc/classes/Input.xml:84
+#: doc/classes/Input.xml:91
msgid "Returns the currently assigned cursor shape (see [enum CursorShape])."
msgstr ""
-#: doc/classes/Input.xml:90
+#: doc/classes/Input.xml:97
msgid ""
"Returns the gravity of the device's accelerometer sensor, if the device has "
"one. Otherwise, the method returns [constant Vector3.ZERO].\n"
@@ -28178,7 +28284,7 @@ msgid ""
"Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:97
+#: doc/classes/Input.xml:104
msgid ""
"Returns the rotation rate in rad/s around a device's X, Y, and Z axes of the "
"gyroscope sensor, if the device has one. Otherwise, the method returns "
@@ -28187,53 +28293,53 @@ msgid ""
"it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:106
+#: doc/classes/Input.xml:113
msgid ""
"Returns the current value of the joypad axis at given index (see [enum "
"JoystickList])."
msgstr ""
-#: doc/classes/Input.xml:113
+#: doc/classes/Input.xml:120
msgid "Returns the index of the provided axis name."
msgstr ""
-#: doc/classes/Input.xml:120
+#: doc/classes/Input.xml:127
msgid ""
"Receives a [enum JoystickList] axis and returns its equivalent name as a "
"string."
msgstr ""
-#: doc/classes/Input.xml:127
+#: doc/classes/Input.xml:134
msgid "Returns the index of the provided button name."
msgstr ""
-#: doc/classes/Input.xml:134
+#: doc/classes/Input.xml:141
msgid ""
"Receives a gamepad button from [enum JoystickList] and returns its "
"equivalent name as a string."
msgstr ""
-#: doc/classes/Input.xml:141
+#: doc/classes/Input.xml:148
msgid ""
"Returns a SDL2-compatible device GUID on platforms that use gamepad "
"remapping. Returns [code]\"Default Gamepad\"[/code] otherwise."
msgstr ""
-#: doc/classes/Input.xml:148
+#: doc/classes/Input.xml:155
msgid "Returns the name of the joypad at the specified device index."
msgstr ""
-#: doc/classes/Input.xml:155
+#: doc/classes/Input.xml:162
msgid "Returns the duration of the current vibration effect in seconds."
msgstr ""
-#: doc/classes/Input.xml:162
+#: doc/classes/Input.xml:169
msgid ""
"Returns the strength of the joypad vibration: x is the strength of the weak "
"motor, and y is the strength of the strong motor."
msgstr ""
-#: doc/classes/Input.xml:168
+#: doc/classes/Input.xml:175
msgid ""
"Returns the mouse speed for the last time the cursor was moved, and this "
"until the next frame where the mouse moves. This means that even if the "
@@ -28241,7 +28347,7 @@ msgid ""
"motion."
msgstr ""
-#: doc/classes/Input.xml:174
+#: doc/classes/Input.xml:181
msgid ""
"Returns the magnetic field strength in micro-Tesla for all axes of the "
"device's magnetometer sensor, if the device has one. Otherwise, the method "
@@ -28250,17 +28356,17 @@ msgid ""
"platforms, it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:181
+#: doc/classes/Input.xml:188
msgid ""
"Returns mouse buttons as a bitmask. If multiple mouse buttons are pressed at "
"the same time, the bits are added together."
msgstr ""
-#: doc/classes/Input.xml:187
+#: doc/classes/Input.xml:194
msgid "Returns the mouse mode. See the constants for more information."
msgstr ""
-#: doc/classes/Input.xml:198
+#: doc/classes/Input.xml:205
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -28273,7 +28379,7 @@ msgid ""
"want (on the range of 0 to 1)."
msgstr ""
-#: doc/classes/Input.xml:208
+#: doc/classes/Input.xml:215
msgid ""
"Returns [code]true[/code] when the user starts pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user pressed down "
@@ -28285,7 +28391,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:218
+#: doc/classes/Input.xml:225
msgid ""
"Returns [code]true[/code] when the user stops pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user released the "
@@ -28295,7 +28401,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:227
+#: doc/classes/Input.xml:234
msgid ""
"Returns [code]true[/code] if you are pressing the action event. Note that if "
"an action has multiple buttons assigned and more than one of them is "
@@ -28306,13 +28412,13 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:236
+#: doc/classes/Input.xml:243
msgid ""
"Returns [code]true[/code] if you are pressing the joypad button (see [enum "
"JoystickList])."
msgstr ""
-#: doc/classes/Input.xml:243
+#: doc/classes/Input.xml:250
msgid ""
"Returns [code]true[/code] if the system knows the specified device. This "
"means that it sets all button and axis indices exactly as defined in [enum "
@@ -28320,19 +28426,19 @@ msgid ""
"but you can still retrieve events from them."
msgstr ""
-#: doc/classes/Input.xml:250
+#: doc/classes/Input.xml:257
msgid ""
"Returns [code]true[/code] if you are pressing the key. You can pass a [enum "
"KeyList] constant."
msgstr ""
-#: doc/classes/Input.xml:257
+#: doc/classes/Input.xml:264
msgid ""
"Returns [code]true[/code] if you are pressing the mouse button specified "
"with [enum ButtonList]."
msgstr ""
-#: doc/classes/Input.xml:267
+#: doc/classes/Input.xml:274
msgid ""
"Notifies the [Input] singleton that a connection has changed, to update the "
"state for the [code]device[/code] index.\n"
@@ -28341,7 +28447,7 @@ msgid ""
"triggered internally."
msgstr ""
-#: doc/classes/Input.xml:275
+#: doc/classes/Input.xml:282
msgid ""
"Feeds an [InputEvent] to the game. Can be used to artificially trigger input "
"events from code. Also generates [method Node._input] calls.\n"
@@ -28354,12 +28460,21 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Input.xml:289
+#: doc/classes/Input.xml:296
msgid ""
"Removes all mappings from the internal database that match the given GUID."
msgstr ""
-#: doc/classes/Input.xml:298
+#: doc/classes/Input.xml:303
+msgid ""
+"Sets the acceleration value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:313
msgid ""
"Sets a custom mouse cursor image, which is only visible inside the game "
"window. The hotspot can also be specified. Passing [code]null[/code] to the "
@@ -28374,7 +28489,7 @@ msgid ""
"compression mode can't be used for custom cursors."
msgstr ""
-#: doc/classes/Input.xml:309
+#: doc/classes/Input.xml:324
msgid ""
"Sets the default cursor shape to be used in the viewport instead of "
"[constant CURSOR_ARROW].\n"
@@ -28384,11 +28499,38 @@ msgid ""
"cursor immediately."
msgstr ""
-#: doc/classes/Input.xml:318
+#: doc/classes/Input.xml:333
+msgid ""
+"Sets the gravity value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:341
+msgid ""
+"Sets the value of the rotation rate of the gyroscope sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:349
+msgid ""
+"Sets the value of the magnetic field of the magnetometer sensor. Can be used "
+"for debugging on devices without a hardware sensor, for example in an editor "
+"on a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:357
msgid "Sets the mouse mode. See the constants for more information."
msgstr ""
-#: doc/classes/Input.xml:325
+#: doc/classes/Input.xml:364
msgid ""
"Enables or disables the accumulation of similar input events sent by the "
"operating system. When input accumulation is enabled, all input events "
@@ -28402,7 +28544,7 @@ msgid ""
"results that closely follow the actual input."
msgstr ""
-#: doc/classes/Input.xml:336
+#: doc/classes/Input.xml:375
msgid ""
"Starts to vibrate the joypad. Joypads usually come with two rumble motors, a "
"strong and a weak one. [code]weak_magnitude[/code] is the strength of the "
@@ -28415,34 +28557,34 @@ msgid ""
"few seconds."
msgstr ""
-#: doc/classes/Input.xml:344
+#: doc/classes/Input.xml:383
msgid "Stops the vibration of the joypad."
msgstr ""
-#: doc/classes/Input.xml:351
+#: doc/classes/Input.xml:390
msgid ""
"Vibrate Android and iOS devices.\n"
"[b]Note:[/b] It needs [code]VIBRATE[/code] permission for Android at export "
"settings. iOS does not support duration."
msgstr ""
-#: doc/classes/Input.xml:359
+#: doc/classes/Input.xml:398
msgid "Sets the mouse position to the specified vector."
msgstr ""
-#: doc/classes/Input.xml:368
+#: doc/classes/Input.xml:407
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
-#: doc/classes/Input.xml:374
+#: doc/classes/Input.xml:413
msgid "Makes the mouse cursor visible if it is hidden."
msgstr ""
-#: doc/classes/Input.xml:377
+#: doc/classes/Input.xml:416
msgid "Makes the mouse cursor hidden if it is visible."
msgstr ""
-#: doc/classes/Input.xml:380
+#: doc/classes/Input.xml:419
msgid ""
"Captures the mouse. The mouse will be hidden and its position locked at the "
"center of the screen.\n"
@@ -28450,83 +28592,83 @@ msgid ""
"need to use [member InputEventMouseMotion.relative]."
msgstr ""
-#: doc/classes/Input.xml:384
+#: doc/classes/Input.xml:423
msgid "Makes the mouse cursor visible but confines it to the game window."
msgstr ""
-#: doc/classes/Input.xml:387
+#: doc/classes/Input.xml:426
msgid "Arrow cursor. Standard, default pointing cursor."
msgstr ""
-#: doc/classes/Input.xml:390
+#: doc/classes/Input.xml:429
msgid ""
"I-beam cursor. Usually used to show where the text cursor will appear when "
"the mouse is clicked."
msgstr ""
-#: doc/classes/Input.xml:393
+#: doc/classes/Input.xml:432
msgid ""
"Pointing hand cursor. Usually used to indicate the pointer is over a link or "
"other interactable item."
msgstr ""
-#: doc/classes/Input.xml:396
+#: doc/classes/Input.xml:435
msgid ""
"Cross cursor. Typically appears over regions in which a drawing operation "
"can be performed or for selections."
msgstr ""
-#: doc/classes/Input.xml:399
+#: doc/classes/Input.xml:438
msgid ""
"Wait cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application is still usable during the "
"operation."
msgstr ""
-#: doc/classes/Input.xml:402
+#: doc/classes/Input.xml:441
msgid ""
"Busy cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application isn't usable during the "
"operation (e.g. something is blocking its main thread)."
msgstr ""
-#: doc/classes/Input.xml:405
+#: doc/classes/Input.xml:444
msgid "Drag cursor. Usually displayed when dragging something."
msgstr ""
-#: doc/classes/Input.xml:408
+#: doc/classes/Input.xml:447
msgid ""
"Can drop cursor. Usually displayed when dragging something to indicate that "
"it can be dropped at the current position."
msgstr ""
-#: doc/classes/Input.xml:411
+#: doc/classes/Input.xml:450
msgid ""
"Forbidden cursor. Indicates that the current action is forbidden (for "
"example, when dragging something) or that the control at a position is "
"disabled."
msgstr ""
-#: doc/classes/Input.xml:414
+#: doc/classes/Input.xml:453
msgid ""
"Vertical resize mouse cursor. A double-headed vertical arrow. It tells the "
"user they can resize the window or the panel vertically."
msgstr ""
-#: doc/classes/Input.xml:417
+#: doc/classes/Input.xml:456
msgid ""
"Horizontal resize mouse cursor. A double-headed horizontal arrow. It tells "
"the user they can resize the window or the panel horizontally."
msgstr ""
-#: doc/classes/Input.xml:420
+#: doc/classes/Input.xml:459
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the bottom left to the top right. It tells the user they can resize the "
"window or the panel both horizontally and vertically."
msgstr ""
-#: doc/classes/Input.xml:423
+#: doc/classes/Input.xml:462
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the top left to the bottom right, the opposite of [constant "
@@ -28534,23 +28676,23 @@ msgid ""
"both horizontally and vertically."
msgstr ""
-#: doc/classes/Input.xml:426
+#: doc/classes/Input.xml:465
msgid "Move cursor. Indicates that something can be moved."
msgstr ""
-#: doc/classes/Input.xml:429
+#: doc/classes/Input.xml:468
msgid ""
"Vertical split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_VSIZE]."
msgstr ""
-#: doc/classes/Input.xml:432
+#: doc/classes/Input.xml:471
msgid ""
"Horizontal split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_HSIZE]."
msgstr ""
-#: doc/classes/Input.xml:435
+#: doc/classes/Input.xml:474
msgid "Help cursor. Usually a question mark."
msgstr ""
@@ -28958,7 +29100,9 @@ msgid "The drag position."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -30257,7 +30401,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30322,22 +30467,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -30352,7 +30499,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -30360,19 +30507,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -30440,7 +30587,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30498,7 +30646,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -31780,14 +31930,21 @@ msgid "Default text [Color] of the [LinkButton]."
msgstr ""
#: doc/classes/LinkButton.xml:46
-msgid "Text [Color] used when the [LinkButton] is being hovered."
+msgid ""
+"Text [Color] used when the [LinkButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/LinkButton.xml:49
-msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgid "Text [Color] used when the [LinkButton] is being hovered."
msgstr ""
#: doc/classes/LinkButton.xml:52
+msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:55
msgid "The vertical space between the baseline of text and the underline."
msgstr ""
@@ -32280,26 +32437,33 @@ msgid "Text [Color] used when the [MenuButton] is disabled."
msgstr ""
#: doc/classes/MenuButton.xml:64
-msgid "Text [Color] used when the [MenuButton] is being hovered."
+msgid ""
+"Text [Color] used when the [MenuButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/MenuButton.xml:67
-msgid "Text [Color] used when the [MenuButton] is being pressed."
+msgid "Text [Color] used when the [MenuButton] is being hovered."
msgstr ""
#: doc/classes/MenuButton.xml:70
-msgid "[StyleBox] used when the [MenuButton] is being hovered."
+msgid "Text [Color] used when the [MenuButton] is being pressed."
msgstr ""
#: doc/classes/MenuButton.xml:73
-msgid "The horizontal space between [MenuButton]'s icon and text."
+msgid "[StyleBox] used when the [MenuButton] is being hovered."
msgstr ""
#: doc/classes/MenuButton.xml:76
-msgid "Default [StyleBox] for the [MenuButton]."
+msgid "The horizontal space between [MenuButton]'s icon and text."
msgstr ""
#: doc/classes/MenuButton.xml:79
+msgid "Default [StyleBox] for the [MenuButton]."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:82
msgid "[StyleBox] used when the [MenuButton] is being pressed."
msgstr ""
@@ -34009,7 +34173,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -36875,26 +37039,33 @@ msgid "Text [Color] used when the [OptionButton] is disabled."
msgstr ""
#: doc/classes/OptionButton.xml:212
-msgid "Text [Color] used when the [OptionButton] is being hovered."
+msgid ""
+"Text [Color] used when the [OptionButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/OptionButton.xml:215
-msgid "Text [Color] used when the [OptionButton] is being pressed."
+msgid "Text [Color] used when the [OptionButton] is being hovered."
msgstr ""
#: doc/classes/OptionButton.xml:218
-msgid "[StyleBox] used when the [OptionButton] is being hovered."
+msgid "Text [Color] used when the [OptionButton] is being pressed."
msgstr ""
#: doc/classes/OptionButton.xml:221
-msgid "The horizontal space between [OptionButton]'s icon and text."
+msgid "[StyleBox] used when the [OptionButton] is being hovered."
msgstr ""
#: doc/classes/OptionButton.xml:224
-msgid "Default [StyleBox] for the [OptionButton]."
+msgid "The horizontal space between [OptionButton]'s icon and text."
msgstr ""
#: doc/classes/OptionButton.xml:227
+msgid "Default [StyleBox] for the [OptionButton]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:230
msgid "[StyleBox] used when the [OptionButton] is being pressed."
msgstr ""
@@ -37297,7 +37468,7 @@ msgstr ""
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -37327,14 +37498,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -37344,7 +37515,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -39822,17 +39993,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -39850,11 +40047,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -40049,7 +40246,9 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-msgid "Returns the [Physics2DDirectBodyState] of the body."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
@@ -40851,6 +41050,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -40868,7 +41085,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -40982,7 +41199,9 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-msgid "Returns the [PhysicsDirectBodyState] of the body."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/PhysicsServer.xml:370
@@ -41961,27 +42180,27 @@ msgstr ""
msgid "Removes an element from the array by index."
msgstr ""
-#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolColorArray.xml:66
-#: doc/classes/PoolIntArray.xml:67 doc/classes/PoolRealArray.xml:67
-#: doc/classes/PoolStringArray.xml:74 doc/classes/PoolVector2Array.xml:67
-#: doc/classes/PoolVector3Array.xml:66
+#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolIntArray.xml:67
+#: doc/classes/PoolRealArray.xml:67
msgid ""
"Sets the size of the array. If the array is grown, reserves elements at the "
"end of the array. If the array is shrunk, truncates the array to the new "
-"size."
+"size.\n"
+"[b]Note:[/b] Added elements are not automatically initialized to 0 and will "
+"contain garbage, i.e. indeterminate values."
msgstr ""
-#: doc/classes/PoolByteArray.xml:121
+#: doc/classes/PoolByteArray.xml:122
msgid "Changes the byte at the given index."
msgstr ""
-#: doc/classes/PoolByteArray.xml:127 doc/classes/PoolColorArray.xml:79
-#: doc/classes/PoolRealArray.xml:80 doc/classes/PoolStringArray.xml:87
+#: doc/classes/PoolByteArray.xml:128 doc/classes/PoolColorArray.xml:79
+#: doc/classes/PoolRealArray.xml:81 doc/classes/PoolStringArray.xml:87
#: doc/classes/PoolVector2Array.xml:80 doc/classes/PoolVector3Array.xml:79
msgid "Returns the size of the array."
msgstr ""
-#: doc/classes/PoolByteArray.xml:135
+#: doc/classes/PoolByteArray.xml:136
msgid ""
"Returns the slice of the [PoolByteArray] between indices (inclusive) as a "
"new [PoolByteArray]. Any negative index is considered to be from the end of "
@@ -42013,6 +42232,14 @@ msgstr ""
msgid "Appends a value to the array."
msgstr ""
+#: doc/classes/PoolColorArray.xml:66 doc/classes/PoolStringArray.xml:74
+#: doc/classes/PoolVector2Array.xml:67 doc/classes/PoolVector3Array.xml:66
+msgid ""
+"Sets the size of the array. If the array is grown, reserves elements at the "
+"end of the array. If the array is shrunk, truncates the array to the new "
+"size."
+msgstr ""
+
#: doc/classes/PoolColorArray.xml:73
msgid "Changes the [Color] at the given index."
msgstr ""
@@ -42049,11 +42276,11 @@ msgid ""
"valid, or at the end of the array ([code]idx == size()[/code])."
msgstr ""
-#: doc/classes/PoolIntArray.xml:74
+#: doc/classes/PoolIntArray.xml:75
msgid "Changes the int at the given index."
msgstr ""
-#: doc/classes/PoolIntArray.xml:80
+#: doc/classes/PoolIntArray.xml:81
msgid "Returns the array size."
msgstr ""
@@ -42085,7 +42312,7 @@ msgstr ""
msgid "Appends a [PoolRealArray] at the end of this array."
msgstr ""
-#: doc/classes/PoolRealArray.xml:74
+#: doc/classes/PoolRealArray.xml:75
msgid "Changes the float at the given index."
msgstr ""
@@ -43350,18 +43577,6 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:204
msgid ""
-"The project data directory is used for storing project-specific data "
-"(metadata, shader cache, etc.).\n"
-"[b]Note:[/b] Restart the application after changing this setting.\n"
-"[b]Note:[/b] Changing this value can help on platforms or with third-party "
-"tools where specific directory patterns are disallowed. Only modify this "
-"setting if you know that your environment requires it, as changing the "
-"default can impact compatibility with some external tools or plugins which "
-"expect the default [code].import[/code] folder."
-msgstr ""
-
-#: doc/classes/ProjectSettings.xml:209
-msgid ""
"Specifies a file to override project settings. For example: [code]user://"
"custom_settings.cfg[/code]. See \"Overriding\" in the [ProjectSettings] "
"class description at the top for more information.\n"
@@ -43369,7 +43584,7 @@ msgid ""
"code] will still be read to override the project settings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:213
+#: doc/classes/ProjectSettings.xml:208
msgid ""
"If [code]true[/code], the project will save user data to its own user "
"directory (see [member application/config/custom_user_dir_name]). This "
@@ -43379,13 +43594,28 @@ msgid ""
"user data directory)/Godot/app_userdata/(project name)[/code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:216
+#: doc/classes/ProjectSettings.xml:211
+msgid ""
+"If [code]true[/code], the project will use a hidden directory ([code]."
+"import[/code]) for storing project-specific data (metadata, shader cache, "
+"etc.).\n"
+"If [code]false[/code], a non-hidden directory ([code]import[/code]) will be "
+"used instead.\n"
+"[b]Note:[/b] Restart the application after changing this setting.\n"
+"[b]Note:[/b] Changing this value can help on platforms or with third-party "
+"tools where hidden directory patterns are disallowed. Only modify this "
+"setting if you know that your environment requires it, as changing the "
+"default can impact compatibility with some external tools or plugins which "
+"expect the default [code].import[/code] folder."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:217
msgid ""
"Icon set in [code].ico[/code] format used on Windows to set the game's icon. "
"This is done automatically on start by calling [method OS.set_native_icon]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:219
+#: doc/classes/ProjectSettings.xml:220
msgid ""
"Time samples for frame deltas are subject to random variation introduced by "
"the platform, even when frames are displayed at regular intervals thanks to "
@@ -43399,14 +43629,14 @@ msgid ""
"adequate to render frames at the refresh rate."
msgstr ""
-#: doc/classes/ProjectSettings.xml:224
+#: doc/classes/ProjectSettings.xml:225
msgid ""
"[b]Experimental.[/b] Shifts the measurement of delta time for each frame to "
"just after the drawing has taken place. This may lead to more consistent "
"deltas and a reduction in frame stutters."
msgstr ""
-#: doc/classes/ProjectSettings.xml:227
+#: doc/classes/ProjectSettings.xml:228
msgid ""
"If [code]true[/code], disables printing to standard error. If [code]true[/"
"code], this also hides error and warning messages printed by [method "
@@ -43415,7 +43645,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:231
+#: doc/classes/ProjectSettings.xml:232
msgid ""
"If [code]true[/code], disables printing to standard output. This is "
"equivalent to starting the editor or project with the [code]--quiet[/code] "
@@ -43423,7 +43653,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:235
+#: doc/classes/ProjectSettings.xml:236
msgid ""
"If [code]true[/code], flushes the standard output stream every time a line "
"is printed. This affects both terminal logging and file logging.\n"
@@ -43439,20 +43669,20 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:241
+#: doc/classes/ProjectSettings.xml:242
msgid ""
"Debug build override for [member application/run/flush_stdout_on_print], as "
"performance is less important during debugging.\n"
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:245
+#: doc/classes/ProjectSettings.xml:246
msgid ""
"Forces a delay between frames in the main loop (in milliseconds). This may "
"be useful if you plan to disable vertical synchronization."
msgstr ""
-#: doc/classes/ProjectSettings.xml:248
+#: doc/classes/ProjectSettings.xml:249
msgid ""
"If [code]true[/code], enables low-processor usage mode. This setting only "
"works on desktop platforms. The screen is not redrawn if nothing changes "
@@ -43460,75 +43690,81 @@ msgid ""
"useless (and can hurt performance) in most games."
msgstr ""
-#: doc/classes/ProjectSettings.xml:251
+#: doc/classes/ProjectSettings.xml:252
msgid ""
"Amount of sleeping between frames when the low-processor usage mode is "
"enabled (in microseconds). Higher values will result in lower CPU usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:254
+#: doc/classes/ProjectSettings.xml:255
msgid "Path to the main scene file that will be loaded when the project runs."
msgstr ""
-#: doc/classes/ProjectSettings.xml:257 doc/classes/ProjectSettings.xml:260
+#: doc/classes/ProjectSettings.xml:258 doc/classes/ProjectSettings.xml:261
msgid ""
"Audio buses will disable automatically when sound goes below a given dB "
"threshold for a given time. This saves CPU as effects assigned to that bus "
"will no longer do any processing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:263
+#: doc/classes/ProjectSettings.xml:264
msgid ""
"Default [AudioBusLayout] resource file to use in the project, unless "
"overridden by the scene."
msgstr ""
-#: doc/classes/ProjectSettings.xml:266
+#: doc/classes/ProjectSettings.xml:267
msgid ""
"Specifies the audio driver to use. This setting is platform-dependent as "
"each platform supports different audio drivers. If left empty, the default "
"audio driver will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:269
+#: doc/classes/ProjectSettings.xml:270
msgid ""
"If [code]true[/code], microphone input will be allowed. This requires "
"appropriate permissions to be set when exporting to Android or iOS."
msgstr ""
-#: doc/classes/ProjectSettings.xml:272
+#: doc/classes/ProjectSettings.xml:273
msgid ""
"The mixing rate used for audio (in Hz). In general, it's better to not touch "
"this and leave it to the host operating system."
msgstr ""
-#: doc/classes/ProjectSettings.xml:275
+#: doc/classes/ProjectSettings.xml:276
msgid ""
"Safer override for [member audio/mix_rate] in the Web platform. Here "
"[code]0[/code] means \"let the browser choose\" (since some browsers do not "
"like forcing the mix rate)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:278
+#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:281
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:284
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:287
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43538,7 +43774,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:290
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43548,27 +43784,27 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:293
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:296
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
-#: doc/classes/ProjectSettings.xml:299
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:302
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -43576,81 +43812,81 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:305
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:308
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:311
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:314
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:317
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr ""
-#: doc/classes/ProjectSettings.xml:320
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:323
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:326
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:329
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:332
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:335
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:338
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:341
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -43658,109 +43894,109 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:344
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:347
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:350
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:353
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:356
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:359
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:362
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:365
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:368
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:371
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:374
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:377
+#: doc/classes/ProjectSettings.xml:380
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:380
+#: doc/classes/ProjectSettings.xml:383
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:383
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:386
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:389
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:392
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:395
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:398
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -43771,91 +44007,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:403
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:406
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:409
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:412
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:415
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:418
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:421
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:424
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:427
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:430
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:433
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:436
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:439
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr ""
-#: doc/classes/ProjectSettings.xml:442
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:445
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:448
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:451
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -43864,13 +44100,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:455
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:458
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -43880,7 +44116,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:463
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -43888,19 +44124,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:468
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:472
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:476
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -43914,45 +44150,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:481
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:484
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:488
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:491
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:494
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:497
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:500
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -43961,7 +44197,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:503
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -43972,7 +44208,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:507
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -43988,14 +44224,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:515
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:518
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -44003,49 +44239,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:521
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:524
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:529
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:532
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:535
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:538
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:541
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:544
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:547
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -44054,7 +44290,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:551
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44062,7 +44298,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:555
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44070,7 +44306,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:559
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44080,7 +44316,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:563
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -44089,7 +44325,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:567
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -44098,7 +44334,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:571
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44108,7 +44344,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:575
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44116,7 +44352,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:579
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -44126,7 +44362,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:583
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -44136,7 +44372,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:587
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44144,7 +44380,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:591
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -44153,7 +44389,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:595
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44161,7 +44397,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:599
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -44173,477 +44409,477 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:605
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:608
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:611
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:614
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:617
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:620
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:623
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:626
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:629
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:632
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:635
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:638
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:641
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:644
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:647
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:650
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:653
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:656
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:659
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:662
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:665
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:668
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:671
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:674
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:677
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:680
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:683
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:686
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:689
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:692
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:695
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:698
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:701
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:704
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:707
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:710
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:713
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:716
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:719
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:722
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:725
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:728
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:731
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:734
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:737
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:740
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:743
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:746
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:749
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:752
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:755
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:758
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:761
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:764
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:767
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:770
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:773
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:776
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:779
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:782
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:785
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:788
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:791
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:794
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:797
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:800
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:803
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:806
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:809
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:812
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:815
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:818
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:821
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:824
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:827
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:830
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:833
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:836
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:839
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:842
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:845
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:848
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:851
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:854
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:857
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:860
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:863
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:866
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:869
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:872
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:875
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:878
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:881
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr ""
-#: doc/classes/ProjectSettings.xml:884
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:887
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:890
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:893
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:896
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:899
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:902
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:905
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:908
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:911
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:914
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:917
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:920
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:923
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:926
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:929
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:932
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:935
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:938
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:941
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:946
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:949
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -44651,92 +44887,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:952
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:955
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:958
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:961
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:964
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:967
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:970
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:973
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:976
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:979
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:982
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:985
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:988
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:991
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:994
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:997
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1000
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1003
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -44746,33 +44982,33 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1007
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1010
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1013
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1017
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1021
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -44785,7 +45021,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1025
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -44797,7 +45033,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1033
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -44809,7 +45045,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1041
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -44822,7 +45058,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1045
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -44830,28 +45066,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1049
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1053
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1056
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1059
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -44861,25 +45097,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1063
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1066
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1069
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1072
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -44892,7 +45128,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1076
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -44904,7 +45140,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1084
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -44916,7 +45152,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1092
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -44929,13 +45165,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1096
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1099
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -44943,11 +45179,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1103
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1106
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -44961,7 +45197,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1112
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -44970,7 +45206,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1116
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -44986,7 +45222,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1121
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -44996,7 +45232,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1125
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45006,7 +45242,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1129
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -45017,7 +45253,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1133
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45027,7 +45263,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1137
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -45035,7 +45271,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1141
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -45046,7 +45282,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1145
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -45061,7 +45297,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1151
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -45070,13 +45306,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1156
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1159
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -45085,7 +45321,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1162
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -45095,7 +45331,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1165
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -45107,7 +45343,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1168
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -45117,24 +45353,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1171
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1174
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1177
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1180
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -45143,7 +45379,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1183
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -45151,7 +45387,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1186
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -45160,7 +45396,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1189
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -45170,7 +45406,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1193
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -45178,31 +45414,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1197
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1200
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1203
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1206
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1209
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -45210,7 +45446,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1212
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -45220,46 +45456,53 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1215
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1218
+#: doc/classes/ProjectSettings.xml:1221
+msgid ""
+"iOS specific override for [member rendering/gles2/compatibility/"
+"disable_half_float], due to poor support for half-float vertex compression "
+"on many devices."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1224
msgid ""
-"If [code]true[/code] and available on the target device, enables high "
-"floating point precision for all shader computations in GLES2.\n"
+"If [code]true[/code] and available on the target Android device, enables "
+"high floating point precision for all shader computations in GLES2.\n"
"[b]Warning:[/b] High floating point precision can be extremely slow on older "
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1225
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1228
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1231
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1234
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -45267,7 +45510,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1237
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -45277,7 +45520,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1240
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -45286,7 +45529,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1243
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -45295,20 +45538,20 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1246
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1249
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1252
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -45317,7 +45560,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1255
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -45325,7 +45568,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1258
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -45334,7 +45577,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -45344,20 +45587,20 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1267
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1274
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -45366,13 +45609,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -45382,46 +45625,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1293
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1296
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1299
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1302
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1305
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -45431,7 +45674,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -45443,7 +45686,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -45451,7 +45694,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1316
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -45459,7 +45702,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -45468,7 +45711,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1323
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -45482,7 +45725,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1328
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -45492,7 +45735,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1331
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -45501,7 +45744,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1334
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -45511,54 +45754,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1337
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1340
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1343
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1346
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1349
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1352
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1355
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1358
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -45569,61 +45812,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1365
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1368
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1371
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1374
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1377
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1380
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1383
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1386
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -45634,7 +45877,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -45643,26 +45886,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1393 doc/classes/ProjectSettings.xml:1396
#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1405
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1408
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1411
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -45673,20 +45916,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1418
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -45698,52 +45941,52 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1428
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1435
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1438
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1441
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1444
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1447
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1450
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1453
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -45751,7 +45994,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -45761,10 +46004,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -45773,10 +46016,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -45785,10 +46028,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -45797,10 +46040,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -45809,10 +46052,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -46471,40 +46714,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr ""
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -46512,14 +46769,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -48846,6 +49103,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -48863,7 +49136,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -48871,11 +49144,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -48885,19 +49158,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -54282,20 +54555,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -54306,28 +54584,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -54339,19 +54617,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
@@ -57130,26 +57408,33 @@ msgid "Text [Color] used when the [ToolButton] is disabled."
msgstr ""
#: doc/classes/ToolButton.xml:39
-msgid "Text [Color] used when the [ToolButton] is being hovered."
+msgid ""
+"Text [Color] used when the [ToolButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/ToolButton.xml:42
-msgid "Text [Color] used when the [ToolButton] is being pressed."
+msgid "Text [Color] used when the [ToolButton] is being hovered."
msgstr ""
#: doc/classes/ToolButton.xml:45
-msgid "[StyleBox] used when the [ToolButton] is being hovered."
+msgid "Text [Color] used when the [ToolButton] is being pressed."
msgstr ""
#: doc/classes/ToolButton.xml:48
-msgid "The horizontal space between [ToolButton]'s icon and text."
+msgid "[StyleBox] used when the [ToolButton] is being hovered."
msgstr ""
#: doc/classes/ToolButton.xml:51
-msgid "Default [StyleBox] for the [ToolButton]."
+msgid "The horizontal space between [ToolButton]'s icon and text."
msgstr ""
#: doc/classes/ToolButton.xml:54
+msgid "Default [StyleBox] for the [ToolButton]."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:57
msgid "[StyleBox] used when the [ToolButton] is being pressed."
msgstr ""
diff --git a/doc/translations/cs.po b/doc/translations/cs.po
index 4fb544a0d3..f8a912bf24 100644
--- a/doc/translations/cs.po
+++ b/doc/translations/cs.po
@@ -10,12 +10,15 @@
# Pierre Stempin <pierre.stempin@gmail.com>, 2020.
# Václav Blažej <vaclavblazej@seznam.cz>, 2020.
# ProfJack <profjackcz@gmail.com>, 2021.
+# Daniel <dan@ger.cz>, 2021.
+# DomcaSuzi <dominio122@gmail.com>, 2021.
+# Tomas Dostal <tomas.dostal.cz@gmail.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2021-04-05 23:34+0000\n"
-"Last-Translator: ProfJack <profjackcz@gmail.com>\n"
+"PO-Revision-Date: 2021-10-31 13:40+0000\n"
+"Last-Translator: Tomas Dostal <tomas.dostal.cz@gmail.com>\n"
"Language-Team: Czech <https://hosted.weblate.org/projects/godot-engine/godot-"
"class-reference/cs/>\n"
"Language: cs\n"
@@ -23,51 +26,51 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
-"X-Generator: Weblate 4.6-dev\n"
+"X-Generator: Weblate 4.9-dev\n"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Description"
msgstr "Popis"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Tutorials"
-msgstr "Tutoriály"
+msgstr "Návody"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Properties"
msgstr "Vlastnosti"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Methods"
msgstr "Metody"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Theme Properties"
msgstr "Vlastnosti motivu"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Signals"
msgstr "Signály"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Enumerations"
msgstr "VýÄty"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Constants"
msgstr "Konstanty"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Property Descriptions"
msgstr "Popisy vlastnosti"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Method Descriptions"
msgstr "Popisy metod"
#: modules/gdscript/doc_classes/@GDScript.xml:4
msgid "Built-in GDScript functions."
-msgstr "Vestvavěné funkce GDScriptu."
+msgstr "Vestavěné funkce GDScriptu."
#: modules/gdscript/doc_classes/@GDScript.xml:7
msgid ""
@@ -119,7 +122,6 @@ msgstr ""
"Podporované názvy barev jsou stejné jako konstanty definované v [Color]."
#: modules/gdscript/doc_classes/@GDScript.xml:45
-#, fuzzy
msgid ""
"Returns the absolute value of parameter [code]s[/code] (i.e. positive "
"value).\n"
@@ -129,12 +131,10 @@ msgid ""
msgstr ""
"Vrátí absolutní hodnotu parametru [code]s[/code] (tj. kladná hodnota).\n"
"[codeblock]\n"
-"# a je 1\n"
-"a = abs(-1)\n"
+"a = abs(-1) # a je 1\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:55
-#, fuzzy
msgid ""
"Returns the arc cosine of [code]s[/code] in radians. Use to get the angle of "
"cosine [code]s[/code]. [code]s[/code] must be between [code]-1.0[/code] and "
@@ -146,14 +146,15 @@ msgid ""
"[/codeblock]"
msgstr ""
"Vrátí arcus funkce kosinus hodnoty [code]s[/code] v radiánech. Použijte pro "
-"získání úhlu kosinu [code]s[/code].\n"
+"získání úhlu kosinu [code]s[/code]. [code]s[/code] musí být mezi [code]-1.0[/"
+"code] a [code]1.0[/code] (vÄetnÄ›), jinak [method acos] vrací [constant "
+"NAN].\n"
"[codeblock]\n"
"# c je 0.523599 nebo 30 stupňů pokud je konvertováno pomocí rad2deg(s)\n"
"c = acos(0.866025)\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:66
-#, fuzzy
msgid ""
"Returns the arc sine of [code]s[/code] in radians. Use to get the angle of "
"sine [code]s[/code]. [code]s[/code] must be between [code]-1.0[/code] and "
@@ -165,14 +166,15 @@ msgid ""
"[/codeblock]"
msgstr ""
"Vrátí arcus funkce sinus hodnoty [code]s[/code] v radiánech. Použijte pro "
-"získání úhlu kosinu [code]s[/code].\n"
+"získání úhlu kosinu [code]s[/code]. [code]s[/code] musí být mezi [code]-1.0[/"
+"code] a [code]1.0[/code] (vÄetnÄ›), jinak [method asin] vrací [constant "
+"NAN].\n"
"[codeblock]\n"
"# s je 0.523599 nebo 30 stupňů pokud je konvertováno pomocí rad2deg(s)\n"
"s = asin(0.5)\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:78
-#, fuzzy
msgid ""
"Asserts that the [code]condition[/code] is [code]true[/code]. If the "
"[code]condition[/code] is [code]false[/code], an error is generated. When "
@@ -198,23 +200,27 @@ msgid ""
"a message with clarifying details\n"
"[/codeblock]"
msgstr ""
-"Potvrzuje, že [code]condition[/code] je [code]true[/code]. Pokud "
-"[code]condition[/code] je [code]false[/code] výsledkem bude error a program "
-"se zastaví dokud jej znovu nespustíme. Spustí se pouze v debug buildech, "
-"nebo pokud spouštíme hru v editoru. Používejte tuto funkci pro debugování, "
-"aby jste měli jistotu, že podmínka je [code]true[/code] v průběhu vývoje.\n"
-"Volitelný [code]message[/code] argument, pokud je přidán, je ukázán navíc ke "
-"generické \"Assertion failed\" zprávě. Toto můžete použít k poskytnutí "
-"detailnějších informací ohledně neúspěšného potvrzení.\n"
+"Potvrzuje, že [code]condition[/code] je [code]true[/code]. Pokud je "
+"[code]condition[/code] [code]false[/code], výsledkem bude chyba. Při "
+"spuštění z editoru bude spuštěný projekt rovněž pozastaven, dokud jej "
+"neobnovíte. Může být použito jako důraznější forma [method push_error] pro "
+"nahlášení chyb vývojářům projektu nebo uživatelům rozšíření.\n"
+"[b]Poznámka:[/b] Z výkonnostních důvodů se kód uvnitř [method assert] "
+"provádí pouze v ladících sestaveních nebo při spuštění projektu z editoru. "
+"Do volání [method assert] nezaÅ™azujte kód, který má vedlejší úÄinky. Jinak "
+"se projekt bude při exportu v režimu vydání chovat jinak.\n"
+"Nepovinný argument [code]message[/code], je-li zadán, se zobrazí navíc k "
+"obecné zprávě \"Assertion failed\". Můžete jej použít k uvedení dalších "
+"podrobností o tom, proÄ tvrzení selhalo.\n"
"[codeblock]\n"
-"# Představme si, že vždy chceme, aby rychlost byla mezi 0 a 20\n"
+"# Představme si, že vždy chceme, aby rychlost byla mezi 0 a 20.\n"
"speed = -10\n"
"assert(speed < 20) # True, program bude pokraÄovat\n"
"assert(speed >= 0) # False, program se ukonÄí\n"
"assert(speed >= 0 && speed < 20) # Můžete také skombinovat obě dvě podmínky "
-"do jednoho ověření\n"
+"do jednoho tvrzení\n"
"assert(speed < 20, \"speed = %f, but the speed limit is 20\" % speed) # "
-"Vypiště zprávu, která objasňuje detaily\n"
+"Vypíše zprávu, která objasňuje detaily\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:95
@@ -238,7 +244,6 @@ msgstr ""
"[/ codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:107
-#, fuzzy
msgid ""
"Returns the arc tangent of [code]y/x[/code] in radians. Use to get the angle "
"of tangent [code]y/x[/code]. To compute the value, the method takes into "
@@ -248,13 +253,12 @@ msgid ""
"a = atan2(0, -1) # a is 3.141593\n"
"[/codeblock]"
msgstr ""
-"Vrací arcus tangens [code]s[/code] v radianech. Používejte to abyste získali "
-"úhel z tangens úhlu používaného v trigonometrii: [code]atan(tan(angle)) == "
-"angle[/code].\n"
-"Metoda nemůže vědět do kterého kvadrantu bude úhel zasahovat. Pokud chcete "
-"přesný úhel použíjte funkci [method atan2].\n"
+"Vrací arcus tangens [code]y/x[/code] v radiánech. Slouží k získání úhlu "
+"teÄny [code]y/x[/code]. PÅ™i výpoÄtu hodnoty metoda zohledňuje znaménko obou "
+"argumentů, aby bylo možné urÄit kvadrant.\n"
+"Důležitá poznámka: Souřadnice Y je podle konvence na prvním místě.\n"
"[codeblock]\n"
-"a = atan(0.5) # a is 0.463648\n"
+"a = atan(0, -1) # a je 3.141593\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:119
@@ -283,7 +287,6 @@ msgstr ""
"polární soustavy souÅ™adnic (vzdálenost bodu od poÄátku a úhel)."
#: modules/gdscript/doc_classes/@GDScript.xml:135
-#, fuzzy
msgid ""
"Rounds [code]s[/code] upward (towards positive infinity), returning the "
"smallest whole number that is not less than [code]s[/code].\n"
@@ -293,12 +296,13 @@ msgid ""
"[/codeblock]\n"
"See also [method floor], [method round], [method stepify], and [int]."
msgstr ""
-"Zaokrouhlí [code]s[/code] nahoru a vrátí nejmenší integrální hodnotu, která "
-"není menší než hodnota [code]s[/code].\n"
+"Zaokrouhlí [code]s[/code] nahoru (ke kladnému nekoneÄnu) a vrátí nejmenší "
+"celoÄíselnou hodnotu, která není menší než [code]s[/code].\n"
"[codeblock]\n"
-"i = ceil(1.45) # i je 2\n"
-"i = ceil(1.001) # i je 2\n"
-"[/codeblock]"
+"a = ceil(1.45) # a je 2.0\n"
+"a = ceil(1.001) # a je 2.0\n"
+"[/codeblock]\n"
+"Viz také [method floor], [method round], [method stepify] a [int]."
#: modules/gdscript/doc_classes/@GDScript.xml:147
msgid ""
@@ -330,6 +334,13 @@ msgid ""
"a = clamp(15, 1, 20) # a is 15\n"
"[/codeblock]"
msgstr ""
+"Ořízne [code]value[/code] a vrátí hodnotu, která není menší než [code]min[/"
+"code] a větší než [code]max[/code].\n"
+"[codeblock]\n"
+"a = clamp(1000, 1, 20) # a je 20\n"
+"a = clamp(-10, 1, 20) # a je 1\n"
+"a = clamp(15, 1, 20) # a je 15\n"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:175
msgid ""
@@ -344,9 +355,18 @@ msgid ""
"print(a.length())\n"
"[/codeblock]"
msgstr ""
+"Převádí z jednoho typu na jiný tím nejlepším možným způsobem. Parametr "
+"[code]type[/code] používá hodnoty [enum Variant.Type].\n"
+"[codeblock]\n"
+"a = Vector2(1, 0)\n"
+"# Vypíše 1\n"
+"print(a.length())\n"
+"a = convert(a, TYPE_STRING)\n"
+"# Vypíše 6, protože \"(1, 0)\" má 6 znaků\n"
+"print(a.length())\n"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:190
-#, fuzzy
msgid ""
"Returns the cosine of angle [code]s[/code] in radians.\n"
"[codeblock]\n"
@@ -356,21 +376,20 @@ msgid ""
msgstr ""
"Vrací sinus úhlu [code]s[/code] v radiánech.\n"
"[codeblock]\n"
-"sin(0.523599) # Vrací 0.5\n"
+"a = cos(TAU) # a je 1.0\n"
+"a = cos(PI) # a je -1.0\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:201
-#, fuzzy
msgid ""
"Returns the hyperbolic cosine of [code]s[/code] in radians.\n"
"[codeblock]\n"
"print(cosh(1)) # Prints 1.543081\n"
"[/codeblock]"
msgstr ""
-"Vrátí hyperbolickou kosinusoidu [code]s[/code] v radiánech.\n"
+"Vrací hyperbolický kosinus [code]s[/code] v radiánech.\n"
"[codeblock]\n"
-"# Vypíše 1.543081\n"
-"print(cosh(1))\n"
+"print(cosh(1)) # Vypíše 1.543081\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:211
@@ -379,10 +398,9 @@ msgstr "Převede z decibelů na linearní energii (audio)."
#: modules/gdscript/doc_classes/@GDScript.xml:218
msgid "Deprecated alias for [method step_decimals]."
-msgstr ""
+msgstr "Zastaralý alias pro [method step_decimals]."
#: modules/gdscript/doc_classes/@GDScript.xml:227
-#, fuzzy
msgid ""
"[b]Note:[/b] [code]dectime[/code] has been deprecated and will be removed in "
"Godot 4.0, please use [method move_toward] instead.\n"
@@ -392,35 +410,33 @@ msgid ""
"a = dectime(60, 10, 0.1)) # a is 59.0\n"
"[/codeblock]"
msgstr ""
-"Vrátí výsledek [code]value[/code] snížený o [code]step[/code] * "
+"[b]Poznámka:[/b] [code]dectime[/code] je zastaralý a bude odstraněn v Godot "
+"4.0, místo toho prosím používejte [method move_toward].\n"
+"Vrací výsledek [code]value[/code] snížený o [code]step[/code] * "
"[code]amount[/code].\n"
"[codeblock]\n"
-"# a = 59\n"
-"a = dectime(60, 10, 0.1))\n"
+"a = dectime(60, 10, 0.1)) # a je 59.0\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:238
-#, fuzzy
msgid ""
"Converts an angle expressed in degrees to radians.\n"
"[codeblock]\n"
"r = deg2rad(180) # r is 3.141593\n"
"[/codeblock]"
msgstr ""
-"Vrátí stupně převedené na radiány.\n"
+"Převádí úhel vyjádřený ve stupních na radiány.\n"
"[codeblock]\n"
-"# r je 3.141593\n"
-"r = deg2rad(180)\n"
+"r = deg2rad(180) # r je 3.141593\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:248
-#, fuzzy
msgid ""
"Converts a dictionary (previously created with [method inst2dict]) back to "
"an instance. Useful for deserializing."
msgstr ""
-"PÅ™evede dříve pÅ™evedenou instanci na slovník, zpátky na instanci. UžiteÄné "
-"při deserializaci."
+"Převádí slovník (dříve vytvořený pomocí [method inst2dict]) zpět na "
+"instanci. UžiteÄné pÅ™i deserializaci."
#: modules/gdscript/doc_classes/@GDScript.xml:256
msgid ""
@@ -464,7 +480,6 @@ msgstr ""
"[/ codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:286
-#, fuzzy
msgid ""
"Rounds [code]s[/code] downward (towards negative infinity), returning the "
"largest whole number that is not more than [code]s[/code].\n"
@@ -482,15 +497,14 @@ msgstr ""
"nejvÄ›tší celé Äíslo, které není vÄ›tší než [code] s [/code].\n"
"[codeblock]\n"
"# a je 2,0\n"
-"a = podlaha (2,99)\n"
+"a = floor(2,99)\n"
"# a je -3,0\n"
-"a = podlaha (-2,99)\n"
+"a = floor(-2,99)\n"
"[/ codeblock]\n"
"[b] Poznámka: [/b] Tato metoda vrací float. Pokud potÅ™ebujete celé Äíslo, "
"můžete použít přímo [code] int (s) [/code]."
#: modules/gdscript/doc_classes/@GDScript.xml:301
-#, fuzzy
msgid ""
"Returns the floating-point remainder of [code]a/b[/code], keeping the sign "
"of [code]a[/code].\n"
@@ -502,8 +516,7 @@ msgstr ""
"Vrátí floatový zbytek operace [code]a/b[/code] a zachovává znaménko [code]a[/"
"code].\n"
"[codeblock]\n"
-"# Zbytek je 1.5\n"
-"var Zbytek = fmod(7, 5.5)\n"
+"var Zbytek = fmod(7, 5.5) # Zbytek je 1.5\n"
"[/codeblock]\n"
"Pro celoÄíselný zbytek (integerový) používejte % operátor."
@@ -712,6 +725,11 @@ msgid ""
"magnitude of the numbers.\n"
"Infinity values of the same sign are considered equal."
msgstr ""
+"Vrací [code]true[/code] pokud [code]a[/code] a [code]b[/code] se přibližně "
+"rovnají.\n"
+"Přibližně se myslí to, že [code]a[/code] a [code]b[/code] jsou v rozsahu "
+"epsilon každého z nich, které se mÄ›ní s rozsahem tÄ›chto Äísel.\n"
+"NekoneÄné hodnoty stejného znaménka jsou považovány za rovny."
#: modules/gdscript/doc_classes/@GDScript.xml:439
msgid ""
@@ -4075,112 +4093,121 @@ msgid ""
msgstr ""
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr ""
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
msgstr ""
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
msgstr ""
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
msgstr ""
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr ""
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr ""
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr ""
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
msgstr ""
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr ""
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
msgstr ""
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
msgstr ""
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr ""
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
"positive.\n"
@@ -5258,7 +5285,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -6693,21 +6720,25 @@ msgstr ""
#: doc/classes/Area.xml:17
msgid ""
-"Returns a list of intersecting [Area]s. For performance reasons (collisions "
-"are all processed at the same time) this list is modified once during the "
-"physics step, not immediately after objects are moved. Consider using "
-"signals instead."
+"Returns a list of intersecting [Area]s. The overlapping area's [member "
+"CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:23
+#: doc/classes/Area.xml:24
msgid ""
-"Returns a list of intersecting [PhysicsBody]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody]s. The overlapping body's "
+"[member CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:30
+#: doc/classes/Area.xml:32
msgid ""
"If [code]true[/code], the given area overlaps the Area.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6715,7 +6746,7 @@ msgid ""
"physics step. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:38
+#: doc/classes/Area.xml:40
msgid ""
"If [code]true[/code], the given physics body overlaps the Area.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6726,7 +6757,7 @@ msgid ""
"their tiles with collision shapes as a virtual physics body)."
msgstr ""
-#: doc/classes/Area.xml:46
+#: doc/classes/Area.xml:48
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
"velocity lost per second.\n"
@@ -6734,41 +6765,41 @@ msgid ""
"details about damping."
msgstr ""
-#: doc/classes/Area.xml:50 doc/classes/Area2D.xml:52
+#: doc/classes/Area.xml:52 doc/classes/Area2D.xml:54
msgid "The name of the area's audio bus."
msgstr ""
-#: doc/classes/Area.xml:53 doc/classes/Area2D.xml:55
+#: doc/classes/Area.xml:55 doc/classes/Area2D.xml:57
msgid ""
"If [code]true[/code], the area's audio bus overrides the default audio bus."
msgstr ""
-#: doc/classes/Area.xml:56
+#: doc/classes/Area.xml:58
msgid ""
"The area's gravity intensity (in meters per second squared). This value "
"multiplies the gravity vector. This is useful to alter the force of gravity "
"without altering its direction."
msgstr ""
-#: doc/classes/Area.xml:59 doc/classes/Area2D.xml:61
+#: doc/classes/Area.xml:61 doc/classes/Area2D.xml:63
msgid ""
"The falloff factor for point gravity. The greater the value, the faster "
"gravity decreases with distance."
msgstr ""
-#: doc/classes/Area.xml:62 doc/classes/Area2D.xml:64
+#: doc/classes/Area.xml:64 doc/classes/Area2D.xml:66
msgid ""
"If [code]true[/code], gravity is calculated from a point (set via [member "
"gravity_vec]). See also [member space_override]."
msgstr ""
-#: doc/classes/Area.xml:65 doc/classes/Area2D.xml:67
+#: doc/classes/Area.xml:67 doc/classes/Area2D.xml:69
msgid ""
"The area's gravity vector (not normalized). If gravity is a point (see "
"[member gravity_point]), this will be the point of attraction."
msgstr ""
-#: doc/classes/Area.xml:68
+#: doc/classes/Area.xml:70
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
"velocity lost per second.\n"
@@ -6776,61 +6807,61 @@ msgid ""
"about damping."
msgstr ""
-#: doc/classes/Area.xml:72 doc/classes/Area2D.xml:74
+#: doc/classes/Area.xml:74 doc/classes/Area2D.xml:76
msgid "If [code]true[/code], other monitoring areas can detect this area."
msgstr ""
-#: doc/classes/Area.xml:75 doc/classes/Area2D.xml:77
+#: doc/classes/Area.xml:77 doc/classes/Area2D.xml:79
msgid ""
"If [code]true[/code], the area detects bodies or areas entering and exiting "
"it."
msgstr ""
-#: doc/classes/Area.xml:78 doc/classes/Area2D.xml:80
+#: doc/classes/Area.xml:80 doc/classes/Area2D.xml:82
msgid "The area's priority. Higher priority areas are processed first."
msgstr ""
-#: doc/classes/Area.xml:81
+#: doc/classes/Area.xml:83
msgid ""
"The degree to which this area applies reverb to its associated audio. Ranges "
"from [code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
msgstr ""
-#: doc/classes/Area.xml:84
+#: doc/classes/Area.xml:86
msgid "If [code]true[/code], the area applies reverb to its associated audio."
msgstr ""
-#: doc/classes/Area.xml:87
+#: doc/classes/Area.xml:89
msgid "The reverb bus name to use for this area's associated audio."
msgstr ""
-#: doc/classes/Area.xml:90
+#: doc/classes/Area.xml:92
msgid ""
"The degree to which this area's reverb is a uniform effect. Ranges from "
"[code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
msgstr ""
-#: doc/classes/Area.xml:93 doc/classes/Area2D.xml:83
+#: doc/classes/Area.xml:95 doc/classes/Area2D.xml:85
msgid ""
"Override mode for gravity and damping calculations within this area. See "
"[enum SpaceOverride] for possible values."
msgstr ""
-#: doc/classes/Area.xml:100
+#: doc/classes/Area.xml:102
msgid ""
"Emitted when another Area enters this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
-#: doc/classes/Area.xml:107
+#: doc/classes/Area.xml:109
msgid ""
"Emitted when another Area exits this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
-#: doc/classes/Area.xml:117 doc/classes/Area.xml:130
+#: doc/classes/Area.xml:119 doc/classes/Area.xml:132
msgid ""
"Emitted when one of another Area's [Shape]s enters one of this Area's "
"[Shape]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6845,7 +6876,7 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:140
+#: doc/classes/Area.xml:142
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] enters this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -6854,7 +6885,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:147
+#: doc/classes/Area.xml:149
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] exits this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -6863,7 +6894,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:157 doc/classes/Area.xml:170
+#: doc/classes/Area.xml:159 doc/classes/Area.xml:172
msgid ""
"Emitted when one of a [PhysicsBody] or [GridMap]'s [Shape]s enters one of "
"this Area's [Shape]s. Requires [member monitoring] to be set to [code]true[/"
@@ -6880,29 +6911,29 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:180 doc/classes/Area2D.xml:170
+#: doc/classes/Area.xml:182 doc/classes/Area2D.xml:172
msgid "This area does not affect gravity/damping."
msgstr ""
-#: doc/classes/Area.xml:183 doc/classes/Area2D.xml:173
+#: doc/classes/Area.xml:185 doc/classes/Area2D.xml:175
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order)."
msgstr ""
-#: doc/classes/Area.xml:186 doc/classes/Area2D.xml:176
+#: doc/classes/Area.xml:188 doc/classes/Area2D.xml:178
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order), ignoring any lower priority areas."
msgstr ""
-#: doc/classes/Area.xml:189 doc/classes/Area2D.xml:179
+#: doc/classes/Area.xml:191 doc/classes/Area2D.xml:181
msgid ""
"This area replaces any gravity/damping, even the defaults, ignoring any "
"lower priority areas."
msgstr ""
-#: doc/classes/Area.xml:192 doc/classes/Area2D.xml:182
+#: doc/classes/Area.xml:194 doc/classes/Area2D.xml:184
msgid ""
"This area replaces any gravity/damping calculated so far (in [member "
"priority] order), but keeps calculating the rest of the areas."
@@ -6939,21 +6970,25 @@ msgstr ""
#: doc/classes/Area2D.xml:19
msgid ""
-"Returns a list of intersecting [Area2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [Area2D]s. The overlapping area's [member "
+"CollisionObject2D.collision_layer] must be part of this area's [member "
+"CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:25
+#: doc/classes/Area2D.xml:26
msgid ""
-"Returns a list of intersecting [PhysicsBody2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody2D]s. The overlapping body's "
+"[member CollisionObject2D.collision_layer] must be part of this area's "
+"[member CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:32
+#: doc/classes/Area2D.xml:34
msgid ""
"If [code]true[/code], the given area overlaps the Area2D.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6961,7 +6996,7 @@ msgid ""
"the physics step. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:40
+#: doc/classes/Area2D.xml:42
msgid ""
"If [code]true[/code], the given physics body overlaps the Area2D.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6972,7 +7007,7 @@ msgid ""
"register their tiles with collision shapes as a virtual physics body)."
msgstr ""
-#: doc/classes/Area2D.xml:48
+#: doc/classes/Area2D.xml:50
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
"velocity lost per second.\n"
@@ -6980,14 +7015,14 @@ msgid ""
"details about damping."
msgstr ""
-#: doc/classes/Area2D.xml:58
+#: doc/classes/Area2D.xml:60
msgid ""
"The area's gravity intensity (in pixels per second squared). This value "
"multiplies the gravity vector. This is useful to alter the force of gravity "
"without altering its direction."
msgstr ""
-#: doc/classes/Area2D.xml:70
+#: doc/classes/Area2D.xml:72
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
"velocity lost per second.\n"
@@ -6995,21 +7030,21 @@ msgid ""
"about damping."
msgstr ""
-#: doc/classes/Area2D.xml:90
+#: doc/classes/Area2D.xml:92
msgid ""
"Emitted when another Area2D enters this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-#: doc/classes/Area2D.xml:97
+#: doc/classes/Area2D.xml:99
msgid ""
"Emitted when another Area2D exits this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-#: doc/classes/Area2D.xml:107
+#: doc/classes/Area2D.xml:109
msgid ""
"Emitted when one of another Area2D's [Shape2D]s enters one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -7024,7 +7059,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:120
+#: doc/classes/Area2D.xml:122
msgid ""
"Emitted when one of another Area2D's [Shape2D]s exits one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -7039,7 +7074,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:130
+#: doc/classes/Area2D.xml:132
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] enters this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -7048,7 +7083,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:137
+#: doc/classes/Area2D.xml:139
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] exits this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -7057,7 +7092,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:147
+#: doc/classes/Area2D.xml:149
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s enters one "
"of this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -7076,7 +7111,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:160
+#: doc/classes/Area2D.xml:162
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s exits one of "
"this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -10650,42 +10685,47 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
-"no save path is provided it will try to match the path from the current "
+"no root node is provided, parent of this node will be used as root instead. "
+"If no save path is provided it will try to match the path from the current "
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -10699,62 +10739,62 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
msgid "The rotation of the baked custom sky."
msgstr ""
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -10762,35 +10802,35 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -10798,13 +10838,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -10816,66 +10856,78 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr ""
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
msgid "Baking was successful."
msgstr ""
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr ""
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
#, fuzzy
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr "Vrátí arkus tangent parametrů."
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr ""
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:133
+#: doc/classes/BakedLightmap.xml:132
+msgid ""
+"Returns if lightmapper can't be created. Unless you are using a custom "
+"lightmapper, please report this as bug."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:135
+msgid ""
+"There is no root node to start baking from. Either provide [code]from_node[/"
+"code] argument or attach this node to a parent that should be used as root."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:136
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:139
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:142
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -11326,8 +11378,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -11712,26 +11767,33 @@ msgid "Text [Color] used when the [Button] is disabled."
msgstr ""
#: doc/classes/Button.xml:77
-msgid "Text [Color] used when the [Button] is being hovered."
+msgid ""
+"Text [Color] used when the [Button] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/Button.xml:80
-msgid "Text [Color] used when the [Button] is being pressed."
+msgid "Text [Color] used when the [Button] is being hovered."
msgstr ""
#: doc/classes/Button.xml:83
-msgid "[StyleBox] used when the [Button] is being hovered."
+msgid "Text [Color] used when the [Button] is being pressed."
msgstr ""
#: doc/classes/Button.xml:86
-msgid "The horizontal space between [Button]'s icon and text."
+msgid "[StyleBox] used when the [Button] is being hovered."
msgstr ""
#: doc/classes/Button.xml:89
-msgid "Default [StyleBox] for the [Button]."
+msgid "The horizontal space between [Button]'s icon and text."
msgstr ""
#: doc/classes/Button.xml:92
+msgid "Default [StyleBox] for the [Button]."
+msgstr ""
+
+#: doc/classes/Button.xml:95
msgid "[StyleBox] used when the [Button] is being pressed."
msgstr ""
@@ -13200,80 +13262,96 @@ msgstr ""
msgid "The check icon to display when the [CheckBox] is checked."
msgstr ""
-#: doc/classes/CheckBox.xml:30
+#: doc/classes/CheckBox.xml:28
+msgid "The check icon to display when the [CheckBox] is checked and disabled."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:31
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is disabled."
msgstr ""
-#: doc/classes/CheckBox.xml:33
+#: doc/classes/CheckBox.xml:34
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is focused."
msgstr ""
-#: doc/classes/CheckBox.xml:36
+#: doc/classes/CheckBox.xml:37
msgid "The [Font] to use for the [CheckBox] text."
msgstr ""
-#: doc/classes/CheckBox.xml:39
+#: doc/classes/CheckBox.xml:40
msgid "The [CheckBox] text's font color."
msgstr ""
-#: doc/classes/CheckBox.xml:42
+#: doc/classes/CheckBox.xml:43
msgid "The [CheckBox] text's font color when it's disabled."
msgstr ""
-#: doc/classes/CheckBox.xml:45
+#: doc/classes/CheckBox.xml:46
+msgid ""
+"The [CheckBox] text's font color when it's focused. Only replaces the normal "
+"text color of the checkbox. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:49
msgid "The [CheckBox] text's font color when it's hovered."
msgstr ""
-#: doc/classes/CheckBox.xml:48
+#: doc/classes/CheckBox.xml:52
msgid "The [CheckBox] text's font color when it's hovered and pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:51
+#: doc/classes/CheckBox.xml:55
msgid "The [CheckBox] text's font color when it's pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:54
+#: doc/classes/CheckBox.xml:58
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered."
msgstr ""
-#: doc/classes/CheckBox.xml:57
+#: doc/classes/CheckBox.xml:61
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered and "
"pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:60
+#: doc/classes/CheckBox.xml:64
msgid "The separation between the check icon and the text (in pixels)."
msgstr ""
-#: doc/classes/CheckBox.xml:63 doc/classes/CheckButton.xml:58
+#: doc/classes/CheckBox.xml:67 doc/classes/CheckButton.xml:61
msgid "The [StyleBox] to display as a background."
msgstr ""
-#: doc/classes/CheckBox.xml:66
+#: doc/classes/CheckBox.xml:70
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:69
+#: doc/classes/CheckBox.xml:73
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is checked."
msgstr ""
-#: doc/classes/CheckBox.xml:74
+#: doc/classes/CheckBox.xml:78
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is unchecked."
msgstr ""
-#: doc/classes/CheckBox.xml:79
+#: doc/classes/CheckBox.xml:83
msgid "The check icon to display when the [CheckBox] is unchecked."
msgstr ""
+#: doc/classes/CheckBox.xml:86
+msgid ""
+"The check icon to display when the [CheckBox] is unchecked and disabled."
+msgstr ""
+
#: doc/classes/CheckButton.xml:4
msgid "Checkable button. See also [CheckBox]."
msgstr ""
@@ -13317,49 +13395,56 @@ msgid "The [CheckButton] text's font color when it's disabled."
msgstr ""
#: doc/classes/CheckButton.xml:40
-msgid "The [CheckButton] text's font color when it's hovered."
+msgid ""
+"The [CheckButton] text's font color when it's focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/CheckButton.xml:43
-msgid "The [CheckButton] text's font color when it's hovered and pressed."
+msgid "The [CheckButton] text's font color when it's hovered."
msgstr ""
#: doc/classes/CheckButton.xml:46
-msgid "The [CheckButton] text's font color when it's pressed."
+msgid "The [CheckButton] text's font color when it's hovered and pressed."
msgstr ""
#: doc/classes/CheckButton.xml:49
+msgid "The [CheckButton] text's font color when it's pressed."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:52
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered."
msgstr ""
-#: doc/classes/CheckButton.xml:52
+#: doc/classes/CheckButton.xml:55
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered "
"and pressed."
msgstr ""
-#: doc/classes/CheckButton.xml:55
+#: doc/classes/CheckButton.xml:58
msgid "The separation between the toggle icon and the text (in pixels)."
msgstr ""
-#: doc/classes/CheckButton.xml:61
+#: doc/classes/CheckButton.xml:64
msgid "The icon to display when the [CheckButton] is unchecked."
msgstr ""
-#: doc/classes/CheckButton.xml:64
+#: doc/classes/CheckButton.xml:67
msgid "The icon to display when the [CheckButton] is unchecked and disabled."
msgstr ""
-#: doc/classes/CheckButton.xml:67
+#: doc/classes/CheckButton.xml:70
msgid "The icon to display when the [CheckButton] is checked."
msgstr ""
-#: doc/classes/CheckButton.xml:70
+#: doc/classes/CheckButton.xml:73
msgid "The icon to display when the [CheckButton] is checked and disabled."
msgstr ""
-#: doc/classes/CheckButton.xml:73
+#: doc/classes/CheckButton.xml:76
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is pressed."
msgstr ""
@@ -15132,26 +15217,33 @@ msgid "Text [Color] used when the [ColorPickerButton] is disabled."
msgstr ""
#: doc/classes/ColorPickerButton.xml:80
-msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
+msgid ""
+"Text [Color] used when the [ColorPickerButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/ColorPickerButton.xml:83
-msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
+msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
msgstr ""
#: doc/classes/ColorPickerButton.xml:86
-msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
+msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
msgstr ""
#: doc/classes/ColorPickerButton.xml:89
-msgid "The horizontal space between [ColorPickerButton]'s icon and text."
+msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
msgstr ""
#: doc/classes/ColorPickerButton.xml:92
-msgid "Default [StyleBox] for the [ColorPickerButton]."
+msgid "The horizontal space between [ColorPickerButton]'s icon and text."
msgstr ""
#: doc/classes/ColorPickerButton.xml:95
+msgid "Default [StyleBox] for the [ColorPickerButton]."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:98
msgid "[StyleBox] used when the [ColorPickerButton] is being pressed."
msgstr ""
@@ -20410,7 +20502,8 @@ msgid ""
"get_resource_type]. They may optionally specify some import presets that "
"affect the import process. EditorImportPlugins are responsible for creating "
"the resources and saving them in the [code].import[/code] directory (see "
-"[member ProjectSettings.application/config/project_data_dir_name]).\n"
+"[member ProjectSettings.application/config/"
+"use_hidden_project_data_directory]).\n"
"Below is an example EditorImportPlugin that imports a [Mesh] from a file "
"with the extension \".special\" or \".spec\":\n"
"[codeblock]\n"
@@ -20537,7 +20630,7 @@ msgstr ""
msgid ""
"Gets the extension used to save this resource in the [code].import[/code] "
"directory (see [member ProjectSettings.application/config/"
-"project_data_dir_name])."
+"use_hidden_project_data_directory])."
msgstr ""
#: doc/classes/EditorImportPlugin.xml:130
@@ -21573,8 +21666,11 @@ msgstr ""
msgid "Emitted when the value of the edited resource was changed."
msgstr ""
-#: doc/classes/EditorResourcePicker.xml:89
-msgid "Emitted when the resource value was set and user clicked to edit it."
+#: doc/classes/EditorResourcePicker.xml:90
+msgid ""
+"Emitted when the resource value was set and user clicked to edit it. When "
+"[code]edit[/code] is [code]true[/code], the signal was caused by the context "
+"menu \"Edit\" option."
msgstr ""
#: doc/classes/EditorResourcePreview.xml:4
@@ -25328,21 +25424,32 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html"
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -25351,14 +25458,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -25368,80 +25479,80 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
msgstr ""
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr ""
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -28195,16 +28306,18 @@ msgstr ""
#: doc/classes/Image.xml:436
msgid ""
"OpenGL texture format [code]RED[/code] with a single component and a "
-"bitdepth of 8."
+"bitdepth of 8.\n"
+"[b]Note:[/b] When using the GLES2 backend, this uses the alpha channel "
+"instead of the red channel for storage."
msgstr ""
-#: doc/classes/Image.xml:439
+#: doc/classes/Image.xml:440
msgid ""
"OpenGL texture format [code]RG[/code] with two components and a bitdepth of "
"8 for each."
msgstr ""
-#: doc/classes/Image.xml:442
+#: doc/classes/Image.xml:443
msgid ""
"OpenGL texture format [code]RGB[/code] with three components, each with a "
"bitdepth of 8.\n"
@@ -28212,7 +28325,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:446
+#: doc/classes/Image.xml:447
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 8.\n"
@@ -28220,73 +28333,73 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:450
+#: doc/classes/Image.xml:451
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 4."
msgstr ""
-#: doc/classes/Image.xml:453
+#: doc/classes/Image.xml:454
msgid ""
"OpenGL texture format [code]GL_RGB5_A1[/code] where 5 bits of depth for each "
"component of RGB and one bit for alpha."
msgstr ""
-#: doc/classes/Image.xml:456
+#: doc/classes/Image.xml:457
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 32-"
"bit floating-point value."
msgstr ""
-#: doc/classes/Image.xml:459
+#: doc/classes/Image.xml:460
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:462
+#: doc/classes/Image.xml:463
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:465
+#: doc/classes/Image.xml:466
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:468
+#: doc/classes/Image.xml:469
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 16-"
"bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:471
+#: doc/classes/Image.xml:472
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:474
+#: doc/classes/Image.xml:475
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:477
+#: doc/classes/Image.xml:478
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:480
+#: doc/classes/Image.xml:481
msgid ""
"A special OpenGL texture format where the three color components have 9 bits "
"of precision and all three share a single 5-bit exponent."
msgstr ""
-#: doc/classes/Image.xml:483
+#: doc/classes/Image.xml:484
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 1, and is the smallest variation "
@@ -28296,7 +28409,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:487
+#: doc/classes/Image.xml:488
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 2, and color data is interpreted "
@@ -28306,7 +28419,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:491
+#: doc/classes/Image.xml:492
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format also known as Block Compression 3 or BC3 that contains 64 "
@@ -28317,7 +28430,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:495
+#: doc/classes/Image.xml:496
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -28325,7 +28438,7 @@ msgid ""
"DXT5 uses for the alpha channel."
msgstr ""
-#: doc/classes/Image.xml:498
+#: doc/classes/Image.xml:499
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -28333,7 +28446,7 @@ msgid ""
"algorithm that DXT5 uses for the alpha channel."
msgstr ""
-#: doc/classes/Image.xml:501
+#: doc/classes/Image.xml:502
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned normalized "
@@ -28342,21 +28455,21 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:505
+#: doc/classes/Image.xml:506
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with signed floating-point "
"RGB components."
msgstr ""
-#: doc/classes/Image.xml:508
+#: doc/classes/Image.xml:509
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned floating-point "
"RGB components."
msgstr ""
-#: doc/classes/Image.xml:511
+#: doc/classes/Image.xml:512
msgid ""
"Texture format used on PowerVR-supported mobile platforms, uses 2-bit color "
"depth with no alpha. More information can be found [url=https://en.wikipedia."
@@ -28365,25 +28478,25 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:515
+#: doc/classes/Image.xml:516
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with an "
"alpha component."
msgstr ""
-#: doc/classes/Image.xml:518
+#: doc/classes/Image.xml:519
msgid ""
"Similar to [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with 4-"
"bit color depth and no alpha."
msgstr ""
-#: doc/classes/Image.xml:521
+#: doc/classes/Image.xml:522
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC4[/url], but with an "
"alpha component."
msgstr ""
-#: doc/classes/Image.xml:524
+#: doc/classes/Image.xml:525
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC1]Ericsson Texture Compression format 1[/"
@@ -28391,7 +28504,7 @@ msgid ""
"standard. This format cannot store an alpha channel."
msgstr ""
-#: doc/classes/Image.xml:527
+#: doc/classes/Image.xml:528
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28399,7 +28512,7 @@ msgid ""
"unsigned data."
msgstr ""
-#: doc/classes/Image.xml:530
+#: doc/classes/Image.xml:531
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28407,7 +28520,7 @@ msgid ""
"channel of signed data."
msgstr ""
-#: doc/classes/Image.xml:533
+#: doc/classes/Image.xml:534
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28415,7 +28528,7 @@ msgid ""
"of unsigned data."
msgstr ""
-#: doc/classes/Image.xml:536
+#: doc/classes/Image.xml:537
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28423,7 +28536,7 @@ msgid ""
"channels of signed data."
msgstr ""
-#: doc/classes/Image.xml:539
+#: doc/classes/Image.xml:540
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28433,7 +28546,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:543
+#: doc/classes/Image.xml:544
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28443,7 +28556,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:547
+#: doc/classes/Image.xml:548
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28454,31 +28567,31 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:551
+#: doc/classes/Image.xml:552
msgid "Represents the size of the [enum Format] enum."
msgstr ""
-#: doc/classes/Image.xml:554
+#: doc/classes/Image.xml:555
msgid ""
"Performs nearest-neighbor interpolation. If the image is resized, it will be "
"pixelated."
msgstr ""
-#: doc/classes/Image.xml:557
+#: doc/classes/Image.xml:558
msgid ""
"Performs bilinear interpolation. If the image is resized, it will be blurry. "
"This mode is faster than [constant INTERPOLATE_CUBIC], but it results in "
"lower quality."
msgstr ""
-#: doc/classes/Image.xml:560
+#: doc/classes/Image.xml:561
msgid ""
"Performs cubic interpolation. If the image is resized, it will be blurry. "
"This mode often gives better results compared to [constant "
"INTERPOLATE_BILINEAR], at the cost of being slower."
msgstr ""
-#: doc/classes/Image.xml:563
+#: doc/classes/Image.xml:564
msgid ""
"Performs bilinear separately on the two most-suited mipmap levels, then "
"linearly interpolates between them.\n"
@@ -28493,55 +28606,55 @@ msgid ""
"a new set will be generated for the resulting image."
msgstr ""
-#: doc/classes/Image.xml:570
+#: doc/classes/Image.xml:571
msgid ""
"Performs Lanczos interpolation. This is the slowest image resizing mode, but "
"it typically gives the best results, especially when downscalng images."
msgstr ""
-#: doc/classes/Image.xml:573
+#: doc/classes/Image.xml:574
msgid "Image does not have alpha."
msgstr ""
-#: doc/classes/Image.xml:576
+#: doc/classes/Image.xml:577
msgid "Image stores alpha in a single bit."
msgstr ""
-#: doc/classes/Image.xml:579
+#: doc/classes/Image.xml:580
msgid "Image uses alpha."
msgstr ""
-#: doc/classes/Image.xml:582
+#: doc/classes/Image.xml:583
msgid "Use S3TC compression."
msgstr ""
-#: doc/classes/Image.xml:585
+#: doc/classes/Image.xml:586
msgid "Use PVRTC2 compression."
msgstr ""
-#: doc/classes/Image.xml:588
+#: doc/classes/Image.xml:589
msgid "Use PVRTC4 compression."
msgstr ""
-#: doc/classes/Image.xml:591
+#: doc/classes/Image.xml:592
msgid "Use ETC compression."
msgstr ""
-#: doc/classes/Image.xml:594
+#: doc/classes/Image.xml:595
msgid "Use ETC2 compression."
msgstr ""
-#: doc/classes/Image.xml:597
+#: doc/classes/Image.xml:598
msgid ""
"Source texture (before compression) is a regular texture. Default for all "
"textures."
msgstr ""
-#: doc/classes/Image.xml:600
+#: doc/classes/Image.xml:601
msgid "Source texture (before compression) is in sRGB space."
msgstr ""
-#: doc/classes/Image.xml:603
+#: doc/classes/Image.xml:604
msgid ""
"Source texture (before compression) is a normal texture (e.g. it can be "
"compressed into two channels)."
@@ -28766,6 +28879,17 @@ msgstr ""
#: doc/classes/Input.xml:43
msgid ""
+"Sends all input events which are in the current buffer to the game loop. "
+"These events may have been buffered as a result of accumulated input "
+"([method set_use_accumulated_input]) or agile input flushing ([member "
+"ProjectSettings.input_devices/buffering/agile_event_flushing]).\n"
+"The engine will already do this itself at key execution points (at least "
+"once per frame). However, this can be useful in advanced cases where you "
+"want precise control over the timing of event handling."
+msgstr ""
+
+#: doc/classes/Input.xml:50
+msgid ""
"Returns the acceleration of the device's accelerometer sensor, if the device "
"has one. Otherwise, the method returns [constant Vector3.ZERO].\n"
"Note this method returns an empty [Vector3] when running from the editor "
@@ -28777,7 +28901,7 @@ msgid ""
"the Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:53
+#: doc/classes/Input.xml:60
msgid ""
"Returns a value between 0 and 1 representing the raw intensity of the given "
"action, ignoring the action's deadzone. In most cases, you should use "
@@ -28787,7 +28911,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:62
+#: doc/classes/Input.xml:69
msgid ""
"Returns a value between 0 and 1 representing the intensity of the given "
"action. In a joypad, for example, the further away the axis (analog sticks "
@@ -28799,7 +28923,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:71
+#: doc/classes/Input.xml:78
msgid ""
"Get axis input by specifying two actions, one negative and one positive.\n"
"This is a shorthand for writing [code]Input."
@@ -28807,17 +28931,17 @@ msgid ""
"get_action_strength(\"negative_action\")[/code]."
msgstr ""
-#: doc/classes/Input.xml:78
+#: doc/classes/Input.xml:85
msgid ""
"Returns an [Array] containing the device IDs of all currently connected "
"joypads."
msgstr ""
-#: doc/classes/Input.xml:84
+#: doc/classes/Input.xml:91
msgid "Returns the currently assigned cursor shape (see [enum CursorShape])."
msgstr ""
-#: doc/classes/Input.xml:90
+#: doc/classes/Input.xml:97
msgid ""
"Returns the gravity of the device's accelerometer sensor, if the device has "
"one. Otherwise, the method returns [constant Vector3.ZERO].\n"
@@ -28827,7 +28951,7 @@ msgid ""
"Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:97
+#: doc/classes/Input.xml:104
msgid ""
"Returns the rotation rate in rad/s around a device's X, Y, and Z axes of the "
"gyroscope sensor, if the device has one. Otherwise, the method returns "
@@ -28836,53 +28960,53 @@ msgid ""
"it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:106
+#: doc/classes/Input.xml:113
msgid ""
"Returns the current value of the joypad axis at given index (see [enum "
"JoystickList])."
msgstr ""
-#: doc/classes/Input.xml:113
+#: doc/classes/Input.xml:120
msgid "Returns the index of the provided axis name."
msgstr ""
-#: doc/classes/Input.xml:120
+#: doc/classes/Input.xml:127
msgid ""
"Receives a [enum JoystickList] axis and returns its equivalent name as a "
"string."
msgstr ""
-#: doc/classes/Input.xml:127
+#: doc/classes/Input.xml:134
msgid "Returns the index of the provided button name."
msgstr ""
-#: doc/classes/Input.xml:134
+#: doc/classes/Input.xml:141
msgid ""
"Receives a gamepad button from [enum JoystickList] and returns its "
"equivalent name as a string."
msgstr ""
-#: doc/classes/Input.xml:141
+#: doc/classes/Input.xml:148
msgid ""
"Returns a SDL2-compatible device GUID on platforms that use gamepad "
"remapping. Returns [code]\"Default Gamepad\"[/code] otherwise."
msgstr ""
-#: doc/classes/Input.xml:148
+#: doc/classes/Input.xml:155
msgid "Returns the name of the joypad at the specified device index."
msgstr ""
-#: doc/classes/Input.xml:155
+#: doc/classes/Input.xml:162
msgid "Returns the duration of the current vibration effect in seconds."
msgstr ""
-#: doc/classes/Input.xml:162
+#: doc/classes/Input.xml:169
msgid ""
"Returns the strength of the joypad vibration: x is the strength of the weak "
"motor, and y is the strength of the strong motor."
msgstr ""
-#: doc/classes/Input.xml:168
+#: doc/classes/Input.xml:175
msgid ""
"Returns the mouse speed for the last time the cursor was moved, and this "
"until the next frame where the mouse moves. This means that even if the "
@@ -28890,7 +29014,7 @@ msgid ""
"motion."
msgstr ""
-#: doc/classes/Input.xml:174
+#: doc/classes/Input.xml:181
msgid ""
"Returns the magnetic field strength in micro-Tesla for all axes of the "
"device's magnetometer sensor, if the device has one. Otherwise, the method "
@@ -28899,17 +29023,17 @@ msgid ""
"platforms, it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:181
+#: doc/classes/Input.xml:188
msgid ""
"Returns mouse buttons as a bitmask. If multiple mouse buttons are pressed at "
"the same time, the bits are added together."
msgstr ""
-#: doc/classes/Input.xml:187
+#: doc/classes/Input.xml:194
msgid "Returns the mouse mode. See the constants for more information."
msgstr ""
-#: doc/classes/Input.xml:198
+#: doc/classes/Input.xml:205
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -28922,7 +29046,7 @@ msgid ""
"want (on the range of 0 to 1)."
msgstr ""
-#: doc/classes/Input.xml:208
+#: doc/classes/Input.xml:215
msgid ""
"Returns [code]true[/code] when the user starts pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user pressed down "
@@ -28934,7 +29058,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:218
+#: doc/classes/Input.xml:225
msgid ""
"Returns [code]true[/code] when the user stops pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user released the "
@@ -28944,7 +29068,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:227
+#: doc/classes/Input.xml:234
msgid ""
"Returns [code]true[/code] if you are pressing the action event. Note that if "
"an action has multiple buttons assigned and more than one of them is "
@@ -28955,13 +29079,13 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:236
+#: doc/classes/Input.xml:243
msgid ""
"Returns [code]true[/code] if you are pressing the joypad button (see [enum "
"JoystickList])."
msgstr ""
-#: doc/classes/Input.xml:243
+#: doc/classes/Input.xml:250
msgid ""
"Returns [code]true[/code] if the system knows the specified device. This "
"means that it sets all button and axis indices exactly as defined in [enum "
@@ -28969,19 +29093,19 @@ msgid ""
"but you can still retrieve events from them."
msgstr ""
-#: doc/classes/Input.xml:250
+#: doc/classes/Input.xml:257
msgid ""
"Returns [code]true[/code] if you are pressing the key. You can pass a [enum "
"KeyList] constant."
msgstr ""
-#: doc/classes/Input.xml:257
+#: doc/classes/Input.xml:264
msgid ""
"Returns [code]true[/code] if you are pressing the mouse button specified "
"with [enum ButtonList]."
msgstr ""
-#: doc/classes/Input.xml:267
+#: doc/classes/Input.xml:274
msgid ""
"Notifies the [Input] singleton that a connection has changed, to update the "
"state for the [code]device[/code] index.\n"
@@ -28990,7 +29114,7 @@ msgid ""
"triggered internally."
msgstr ""
-#: doc/classes/Input.xml:275
+#: doc/classes/Input.xml:282
msgid ""
"Feeds an [InputEvent] to the game. Can be used to artificially trigger input "
"events from code. Also generates [method Node._input] calls.\n"
@@ -29003,12 +29127,21 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Input.xml:289
+#: doc/classes/Input.xml:296
msgid ""
"Removes all mappings from the internal database that match the given GUID."
msgstr ""
-#: doc/classes/Input.xml:298
+#: doc/classes/Input.xml:303
+msgid ""
+"Sets the acceleration value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:313
msgid ""
"Sets a custom mouse cursor image, which is only visible inside the game "
"window. The hotspot can also be specified. Passing [code]null[/code] to the "
@@ -29023,7 +29156,7 @@ msgid ""
"compression mode can't be used for custom cursors."
msgstr ""
-#: doc/classes/Input.xml:309
+#: doc/classes/Input.xml:324
msgid ""
"Sets the default cursor shape to be used in the viewport instead of "
"[constant CURSOR_ARROW].\n"
@@ -29033,11 +29166,38 @@ msgid ""
"cursor immediately."
msgstr ""
-#: doc/classes/Input.xml:318
+#: doc/classes/Input.xml:333
+msgid ""
+"Sets the gravity value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:341
+msgid ""
+"Sets the value of the rotation rate of the gyroscope sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:349
+msgid ""
+"Sets the value of the magnetic field of the magnetometer sensor. Can be used "
+"for debugging on devices without a hardware sensor, for example in an editor "
+"on a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:357
msgid "Sets the mouse mode. See the constants for more information."
msgstr ""
-#: doc/classes/Input.xml:325
+#: doc/classes/Input.xml:364
msgid ""
"Enables or disables the accumulation of similar input events sent by the "
"operating system. When input accumulation is enabled, all input events "
@@ -29051,7 +29211,7 @@ msgid ""
"results that closely follow the actual input."
msgstr ""
-#: doc/classes/Input.xml:336
+#: doc/classes/Input.xml:375
msgid ""
"Starts to vibrate the joypad. Joypads usually come with two rumble motors, a "
"strong and a weak one. [code]weak_magnitude[/code] is the strength of the "
@@ -29064,34 +29224,34 @@ msgid ""
"few seconds."
msgstr ""
-#: doc/classes/Input.xml:344
+#: doc/classes/Input.xml:383
msgid "Stops the vibration of the joypad."
msgstr ""
-#: doc/classes/Input.xml:351
+#: doc/classes/Input.xml:390
msgid ""
"Vibrate Android and iOS devices.\n"
"[b]Note:[/b] It needs [code]VIBRATE[/code] permission for Android at export "
"settings. iOS does not support duration."
msgstr ""
-#: doc/classes/Input.xml:359
+#: doc/classes/Input.xml:398
msgid "Sets the mouse position to the specified vector."
msgstr ""
-#: doc/classes/Input.xml:368
+#: doc/classes/Input.xml:407
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
-#: doc/classes/Input.xml:374
+#: doc/classes/Input.xml:413
msgid "Makes the mouse cursor visible if it is hidden."
msgstr ""
-#: doc/classes/Input.xml:377
+#: doc/classes/Input.xml:416
msgid "Makes the mouse cursor hidden if it is visible."
msgstr ""
-#: doc/classes/Input.xml:380
+#: doc/classes/Input.xml:419
msgid ""
"Captures the mouse. The mouse will be hidden and its position locked at the "
"center of the screen.\n"
@@ -29099,83 +29259,83 @@ msgid ""
"need to use [member InputEventMouseMotion.relative]."
msgstr ""
-#: doc/classes/Input.xml:384
+#: doc/classes/Input.xml:423
msgid "Makes the mouse cursor visible but confines it to the game window."
msgstr ""
-#: doc/classes/Input.xml:387
+#: doc/classes/Input.xml:426
msgid "Arrow cursor. Standard, default pointing cursor."
msgstr ""
-#: doc/classes/Input.xml:390
+#: doc/classes/Input.xml:429
msgid ""
"I-beam cursor. Usually used to show where the text cursor will appear when "
"the mouse is clicked."
msgstr ""
-#: doc/classes/Input.xml:393
+#: doc/classes/Input.xml:432
msgid ""
"Pointing hand cursor. Usually used to indicate the pointer is over a link or "
"other interactable item."
msgstr ""
-#: doc/classes/Input.xml:396
+#: doc/classes/Input.xml:435
msgid ""
"Cross cursor. Typically appears over regions in which a drawing operation "
"can be performed or for selections."
msgstr ""
-#: doc/classes/Input.xml:399
+#: doc/classes/Input.xml:438
msgid ""
"Wait cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application is still usable during the "
"operation."
msgstr ""
-#: doc/classes/Input.xml:402
+#: doc/classes/Input.xml:441
msgid ""
"Busy cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application isn't usable during the "
"operation (e.g. something is blocking its main thread)."
msgstr ""
-#: doc/classes/Input.xml:405
+#: doc/classes/Input.xml:444
msgid "Drag cursor. Usually displayed when dragging something."
msgstr ""
-#: doc/classes/Input.xml:408
+#: doc/classes/Input.xml:447
msgid ""
"Can drop cursor. Usually displayed when dragging something to indicate that "
"it can be dropped at the current position."
msgstr ""
-#: doc/classes/Input.xml:411
+#: doc/classes/Input.xml:450
msgid ""
"Forbidden cursor. Indicates that the current action is forbidden (for "
"example, when dragging something) or that the control at a position is "
"disabled."
msgstr ""
-#: doc/classes/Input.xml:414
+#: doc/classes/Input.xml:453
msgid ""
"Vertical resize mouse cursor. A double-headed vertical arrow. It tells the "
"user they can resize the window or the panel vertically."
msgstr ""
-#: doc/classes/Input.xml:417
+#: doc/classes/Input.xml:456
msgid ""
"Horizontal resize mouse cursor. A double-headed horizontal arrow. It tells "
"the user they can resize the window or the panel horizontally."
msgstr ""
-#: doc/classes/Input.xml:420
+#: doc/classes/Input.xml:459
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the bottom left to the top right. It tells the user they can resize the "
"window or the panel both horizontally and vertically."
msgstr ""
-#: doc/classes/Input.xml:423
+#: doc/classes/Input.xml:462
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the top left to the bottom right, the opposite of [constant "
@@ -29183,23 +29343,23 @@ msgid ""
"both horizontally and vertically."
msgstr ""
-#: doc/classes/Input.xml:426
+#: doc/classes/Input.xml:465
msgid "Move cursor. Indicates that something can be moved."
msgstr ""
-#: doc/classes/Input.xml:429
+#: doc/classes/Input.xml:468
msgid ""
"Vertical split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_VSIZE]."
msgstr ""
-#: doc/classes/Input.xml:432
+#: doc/classes/Input.xml:471
msgid ""
"Horizontal split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_HSIZE]."
msgstr ""
-#: doc/classes/Input.xml:435
+#: doc/classes/Input.xml:474
msgid "Help cursor. Usually a question mark."
msgstr ""
@@ -29615,7 +29775,9 @@ msgid "The drag position."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -30928,7 +31090,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30993,22 +31156,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -31023,7 +31188,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -31031,19 +31196,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -31114,7 +31279,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -31172,7 +31338,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -32458,14 +32626,21 @@ msgid "Default text [Color] of the [LinkButton]."
msgstr ""
#: doc/classes/LinkButton.xml:46
-msgid "Text [Color] used when the [LinkButton] is being hovered."
+msgid ""
+"Text [Color] used when the [LinkButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/LinkButton.xml:49
-msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgid "Text [Color] used when the [LinkButton] is being hovered."
msgstr ""
#: doc/classes/LinkButton.xml:52
+msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:55
msgid "The vertical space between the baseline of text and the underline."
msgstr ""
@@ -32959,26 +33134,33 @@ msgid "Text [Color] used when the [MenuButton] is disabled."
msgstr ""
#: doc/classes/MenuButton.xml:64
-msgid "Text [Color] used when the [MenuButton] is being hovered."
+msgid ""
+"Text [Color] used when the [MenuButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/MenuButton.xml:67
-msgid "Text [Color] used when the [MenuButton] is being pressed."
+msgid "Text [Color] used when the [MenuButton] is being hovered."
msgstr ""
#: doc/classes/MenuButton.xml:70
-msgid "[StyleBox] used when the [MenuButton] is being hovered."
+msgid "Text [Color] used when the [MenuButton] is being pressed."
msgstr ""
#: doc/classes/MenuButton.xml:73
-msgid "The horizontal space between [MenuButton]'s icon and text."
+msgid "[StyleBox] used when the [MenuButton] is being hovered."
msgstr ""
#: doc/classes/MenuButton.xml:76
-msgid "Default [StyleBox] for the [MenuButton]."
+msgid "The horizontal space between [MenuButton]'s icon and text."
msgstr ""
#: doc/classes/MenuButton.xml:79
+msgid "Default [StyleBox] for the [MenuButton]."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:82
msgid "[StyleBox] used when the [MenuButton] is being pressed."
msgstr ""
@@ -34711,7 +34893,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -37596,26 +37778,33 @@ msgid "Text [Color] used when the [OptionButton] is disabled."
msgstr ""
#: doc/classes/OptionButton.xml:212
-msgid "Text [Color] used when the [OptionButton] is being hovered."
+msgid ""
+"Text [Color] used when the [OptionButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/OptionButton.xml:215
-msgid "Text [Color] used when the [OptionButton] is being pressed."
+msgid "Text [Color] used when the [OptionButton] is being hovered."
msgstr ""
#: doc/classes/OptionButton.xml:218
-msgid "[StyleBox] used when the [OptionButton] is being hovered."
+msgid "Text [Color] used when the [OptionButton] is being pressed."
msgstr ""
#: doc/classes/OptionButton.xml:221
-msgid "The horizontal space between [OptionButton]'s icon and text."
+msgid "[StyleBox] used when the [OptionButton] is being hovered."
msgstr ""
#: doc/classes/OptionButton.xml:224
-msgid "Default [StyleBox] for the [OptionButton]."
+msgid "The horizontal space between [OptionButton]'s icon and text."
msgstr ""
#: doc/classes/OptionButton.xml:227
+msgid "Default [StyleBox] for the [OptionButton]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:230
msgid "[StyleBox] used when the [OptionButton] is being pressed."
msgstr ""
@@ -38022,7 +38211,7 @@ msgstr ""
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -38052,14 +38241,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -38069,7 +38258,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -40576,17 +40765,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -40604,11 +40819,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -40803,7 +41018,9 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-msgid "Returns the [Physics2DDirectBodyState] of the body."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
@@ -41606,6 +41823,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -41623,7 +41858,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -41737,7 +41972,9 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-msgid "Returns the [PhysicsDirectBodyState] of the body."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/PhysicsServer.xml:370
@@ -42719,27 +42956,27 @@ msgstr ""
msgid "Removes an element from the array by index."
msgstr ""
-#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolColorArray.xml:66
-#: doc/classes/PoolIntArray.xml:67 doc/classes/PoolRealArray.xml:67
-#: doc/classes/PoolStringArray.xml:74 doc/classes/PoolVector2Array.xml:67
-#: doc/classes/PoolVector3Array.xml:66
+#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolIntArray.xml:67
+#: doc/classes/PoolRealArray.xml:67
msgid ""
"Sets the size of the array. If the array is grown, reserves elements at the "
"end of the array. If the array is shrunk, truncates the array to the new "
-"size."
+"size.\n"
+"[b]Note:[/b] Added elements are not automatically initialized to 0 and will "
+"contain garbage, i.e. indeterminate values."
msgstr ""
-#: doc/classes/PoolByteArray.xml:121
+#: doc/classes/PoolByteArray.xml:122
msgid "Changes the byte at the given index."
msgstr ""
-#: doc/classes/PoolByteArray.xml:127 doc/classes/PoolColorArray.xml:79
-#: doc/classes/PoolRealArray.xml:80 doc/classes/PoolStringArray.xml:87
+#: doc/classes/PoolByteArray.xml:128 doc/classes/PoolColorArray.xml:79
+#: doc/classes/PoolRealArray.xml:81 doc/classes/PoolStringArray.xml:87
#: doc/classes/PoolVector2Array.xml:80 doc/classes/PoolVector3Array.xml:79
msgid "Returns the size of the array."
msgstr ""
-#: doc/classes/PoolByteArray.xml:135
+#: doc/classes/PoolByteArray.xml:136
msgid ""
"Returns the slice of the [PoolByteArray] between indices (inclusive) as a "
"new [PoolByteArray]. Any negative index is considered to be from the end of "
@@ -42771,6 +43008,14 @@ msgstr ""
msgid "Appends a value to the array."
msgstr ""
+#: doc/classes/PoolColorArray.xml:66 doc/classes/PoolStringArray.xml:74
+#: doc/classes/PoolVector2Array.xml:67 doc/classes/PoolVector3Array.xml:66
+msgid ""
+"Sets the size of the array. If the array is grown, reserves elements at the "
+"end of the array. If the array is shrunk, truncates the array to the new "
+"size."
+msgstr ""
+
#: doc/classes/PoolColorArray.xml:73
msgid "Changes the [Color] at the given index."
msgstr ""
@@ -42807,11 +43052,11 @@ msgid ""
"valid, or at the end of the array ([code]idx == size()[/code])."
msgstr ""
-#: doc/classes/PoolIntArray.xml:74
+#: doc/classes/PoolIntArray.xml:75
msgid "Changes the int at the given index."
msgstr ""
-#: doc/classes/PoolIntArray.xml:80
+#: doc/classes/PoolIntArray.xml:81
msgid "Returns the array size."
msgstr ""
@@ -42843,7 +43088,7 @@ msgstr ""
msgid "Appends a [PoolRealArray] at the end of this array."
msgstr ""
-#: doc/classes/PoolRealArray.xml:74
+#: doc/classes/PoolRealArray.xml:75
msgid "Changes the float at the given index."
msgstr ""
@@ -44111,18 +44356,6 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:204
msgid ""
-"The project data directory is used for storing project-specific data "
-"(metadata, shader cache, etc.).\n"
-"[b]Note:[/b] Restart the application after changing this setting.\n"
-"[b]Note:[/b] Changing this value can help on platforms or with third-party "
-"tools where specific directory patterns are disallowed. Only modify this "
-"setting if you know that your environment requires it, as changing the "
-"default can impact compatibility with some external tools or plugins which "
-"expect the default [code].import[/code] folder."
-msgstr ""
-
-#: doc/classes/ProjectSettings.xml:209
-msgid ""
"Specifies a file to override project settings. For example: [code]user://"
"custom_settings.cfg[/code]. See \"Overriding\" in the [ProjectSettings] "
"class description at the top for more information.\n"
@@ -44130,7 +44363,7 @@ msgid ""
"code] will still be read to override the project settings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:213
+#: doc/classes/ProjectSettings.xml:208
msgid ""
"If [code]true[/code], the project will save user data to its own user "
"directory (see [member application/config/custom_user_dir_name]). This "
@@ -44140,13 +44373,28 @@ msgid ""
"user data directory)/Godot/app_userdata/(project name)[/code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:216
+#: doc/classes/ProjectSettings.xml:211
+msgid ""
+"If [code]true[/code], the project will use a hidden directory ([code]."
+"import[/code]) for storing project-specific data (metadata, shader cache, "
+"etc.).\n"
+"If [code]false[/code], a non-hidden directory ([code]import[/code]) will be "
+"used instead.\n"
+"[b]Note:[/b] Restart the application after changing this setting.\n"
+"[b]Note:[/b] Changing this value can help on platforms or with third-party "
+"tools where hidden directory patterns are disallowed. Only modify this "
+"setting if you know that your environment requires it, as changing the "
+"default can impact compatibility with some external tools or plugins which "
+"expect the default [code].import[/code] folder."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:217
msgid ""
"Icon set in [code].ico[/code] format used on Windows to set the game's icon. "
"This is done automatically on start by calling [method OS.set_native_icon]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:219
+#: doc/classes/ProjectSettings.xml:220
msgid ""
"Time samples for frame deltas are subject to random variation introduced by "
"the platform, even when frames are displayed at regular intervals thanks to "
@@ -44160,14 +44408,14 @@ msgid ""
"adequate to render frames at the refresh rate."
msgstr ""
-#: doc/classes/ProjectSettings.xml:224
+#: doc/classes/ProjectSettings.xml:225
msgid ""
"[b]Experimental.[/b] Shifts the measurement of delta time for each frame to "
"just after the drawing has taken place. This may lead to more consistent "
"deltas and a reduction in frame stutters."
msgstr ""
-#: doc/classes/ProjectSettings.xml:227
+#: doc/classes/ProjectSettings.xml:228
msgid ""
"If [code]true[/code], disables printing to standard error. If [code]true[/"
"code], this also hides error and warning messages printed by [method "
@@ -44176,7 +44424,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:231
+#: doc/classes/ProjectSettings.xml:232
msgid ""
"If [code]true[/code], disables printing to standard output. This is "
"equivalent to starting the editor or project with the [code]--quiet[/code] "
@@ -44184,7 +44432,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:235
+#: doc/classes/ProjectSettings.xml:236
msgid ""
"If [code]true[/code], flushes the standard output stream every time a line "
"is printed. This affects both terminal logging and file logging.\n"
@@ -44200,20 +44448,20 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:241
+#: doc/classes/ProjectSettings.xml:242
msgid ""
"Debug build override for [member application/run/flush_stdout_on_print], as "
"performance is less important during debugging.\n"
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:245
+#: doc/classes/ProjectSettings.xml:246
msgid ""
"Forces a delay between frames in the main loop (in milliseconds). This may "
"be useful if you plan to disable vertical synchronization."
msgstr ""
-#: doc/classes/ProjectSettings.xml:248
+#: doc/classes/ProjectSettings.xml:249
msgid ""
"If [code]true[/code], enables low-processor usage mode. This setting only "
"works on desktop platforms. The screen is not redrawn if nothing changes "
@@ -44221,75 +44469,81 @@ msgid ""
"useless (and can hurt performance) in most games."
msgstr ""
-#: doc/classes/ProjectSettings.xml:251
+#: doc/classes/ProjectSettings.xml:252
msgid ""
"Amount of sleeping between frames when the low-processor usage mode is "
"enabled (in microseconds). Higher values will result in lower CPU usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:254
+#: doc/classes/ProjectSettings.xml:255
msgid "Path to the main scene file that will be loaded when the project runs."
msgstr ""
-#: doc/classes/ProjectSettings.xml:257 doc/classes/ProjectSettings.xml:260
+#: doc/classes/ProjectSettings.xml:258 doc/classes/ProjectSettings.xml:261
msgid ""
"Audio buses will disable automatically when sound goes below a given dB "
"threshold for a given time. This saves CPU as effects assigned to that bus "
"will no longer do any processing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:263
+#: doc/classes/ProjectSettings.xml:264
msgid ""
"Default [AudioBusLayout] resource file to use in the project, unless "
"overridden by the scene."
msgstr ""
-#: doc/classes/ProjectSettings.xml:266
+#: doc/classes/ProjectSettings.xml:267
msgid ""
"Specifies the audio driver to use. This setting is platform-dependent as "
"each platform supports different audio drivers. If left empty, the default "
"audio driver will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:269
+#: doc/classes/ProjectSettings.xml:270
msgid ""
"If [code]true[/code], microphone input will be allowed. This requires "
"appropriate permissions to be set when exporting to Android or iOS."
msgstr ""
-#: doc/classes/ProjectSettings.xml:272
+#: doc/classes/ProjectSettings.xml:273
msgid ""
"The mixing rate used for audio (in Hz). In general, it's better to not touch "
"this and leave it to the host operating system."
msgstr ""
-#: doc/classes/ProjectSettings.xml:275
+#: doc/classes/ProjectSettings.xml:276
msgid ""
"Safer override for [member audio/mix_rate] in the Web platform. Here "
"[code]0[/code] means \"let the browser choose\" (since some browsers do not "
"like forcing the mix rate)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:278
+#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:281
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:284
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:287
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -44299,7 +44553,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:290
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -44309,27 +44563,27 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:293
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:296
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
-#: doc/classes/ProjectSettings.xml:299
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:302
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -44337,81 +44591,81 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:305
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:308
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:311
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:314
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:317
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr ""
-#: doc/classes/ProjectSettings.xml:320
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:323
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:326
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:329
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:332
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:335
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:338
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:341
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -44419,109 +44673,109 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:344
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:347
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:350
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:353
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:356
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:359
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:362
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:365
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:368
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:371
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:374
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:377
+#: doc/classes/ProjectSettings.xml:380
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:380
+#: doc/classes/ProjectSettings.xml:383
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:383
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:386
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:389
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:392
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:395
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:398
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -44532,91 +44786,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:403
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:406
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:409
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:412
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:415
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:418
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:421
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:424
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:427
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:430
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:433
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:436
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:439
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr ""
-#: doc/classes/ProjectSettings.xml:442
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:445
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:448
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:451
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -44625,13 +44879,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:455
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:458
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -44641,7 +44895,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:463
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -44649,19 +44903,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:468
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:472
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:476
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -44675,45 +44929,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:481
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:484
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:488
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:491
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:494
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:497
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:500
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -44722,7 +44976,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:503
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -44733,7 +44987,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:507
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -44749,14 +45003,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:515
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:518
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -44764,49 +45018,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:521
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:524
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:529
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:532
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:535
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:538
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:541
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:544
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:547
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -44815,7 +45069,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:551
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44823,7 +45077,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:555
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44831,7 +45085,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:559
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44841,7 +45095,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:563
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -44850,7 +45104,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:567
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -44859,7 +45113,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:571
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44869,7 +45123,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:575
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44877,7 +45131,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:579
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -44887,7 +45141,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:583
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -44897,7 +45151,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:587
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44905,7 +45159,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:591
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -44914,7 +45168,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:595
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44922,7 +45176,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:599
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -44934,477 +45188,477 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:605
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:608
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:611
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:614
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:617
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:620
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:623
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:626
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:629
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:632
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:635
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:638
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:641
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:644
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:647
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:650
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:653
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:656
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:659
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:662
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:665
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:668
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:671
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:674
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:677
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:680
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:683
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:686
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:689
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:692
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:695
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:698
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:701
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:704
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:707
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:710
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:713
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:716
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:719
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:722
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:725
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:728
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:731
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:734
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:737
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:740
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:743
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:746
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:749
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:752
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:755
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:758
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:761
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:764
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:767
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:770
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:773
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:776
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:779
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:782
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:785
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:788
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:791
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:794
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:797
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:800
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:803
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:806
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:809
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:812
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:815
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:818
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:821
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:824
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:827
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:830
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:833
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:836
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:839
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:842
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:845
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:848
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:851
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:854
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:857
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:860
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:863
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:866
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:869
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:872
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:875
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:878
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:881
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr ""
-#: doc/classes/ProjectSettings.xml:884
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:887
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:890
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:893
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:896
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:899
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:902
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:905
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:908
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:911
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:914
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:917
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:920
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:923
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:926
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:929
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:932
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:935
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:938
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:941
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:946
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:949
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -45412,92 +45666,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:952
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:955
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:958
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:961
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:964
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:967
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:970
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:973
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:976
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:979
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:982
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:985
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:988
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:991
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:994
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:997
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1000
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1003
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -45507,33 +45761,33 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1007
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1010
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1013
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1017
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1021
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45546,7 +45800,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1025
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45558,7 +45812,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1033
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45570,7 +45824,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1041
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45583,7 +45837,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1045
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -45591,28 +45845,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1049
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1053
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1056
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1059
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -45622,25 +45876,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1063
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1066
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1069
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1072
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45653,7 +45907,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1076
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45665,7 +45919,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1084
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45677,7 +45931,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1092
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45690,13 +45944,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1096
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1099
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -45704,11 +45958,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1103
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1106
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -45722,7 +45976,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1112
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -45731,7 +45985,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1116
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -45747,7 +46001,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1121
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -45757,7 +46011,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1125
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45767,7 +46021,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1129
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -45778,7 +46032,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1133
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45788,7 +46042,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1137
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -45796,7 +46050,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1141
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -45807,7 +46061,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1145
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -45822,7 +46076,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1151
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -45831,13 +46085,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1156
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1159
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -45846,7 +46100,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1162
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -45856,7 +46110,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1165
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -45868,7 +46122,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1168
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -45878,24 +46132,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1171
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1174
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1177
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1180
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -45904,7 +46158,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1183
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -45912,7 +46166,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1186
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -45921,7 +46175,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1189
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -45931,7 +46185,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1193
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -45939,31 +46193,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1197
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1200
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1203
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1206
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1209
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -45971,7 +46225,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1212
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -45981,46 +46235,53 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1215
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1218
+#: doc/classes/ProjectSettings.xml:1221
msgid ""
-"If [code]true[/code] and available on the target device, enables high "
-"floating point precision for all shader computations in GLES2.\n"
+"iOS specific override for [member rendering/gles2/compatibility/"
+"disable_half_float], due to poor support for half-float vertex compression "
+"on many devices."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1224
+msgid ""
+"If [code]true[/code] and available on the target Android device, enables "
+"high floating point precision for all shader computations in GLES2.\n"
"[b]Warning:[/b] High floating point precision can be extremely slow on older "
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1225
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1228
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1231
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1234
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -46028,7 +46289,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1237
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -46038,7 +46299,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1240
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -46047,7 +46308,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1243
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -46056,20 +46317,20 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1246
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1249
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1252
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -46078,7 +46339,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1255
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -46086,7 +46347,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1258
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -46095,7 +46356,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -46105,20 +46366,20 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1267
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1274
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -46127,13 +46388,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -46143,46 +46404,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1293
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1296
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1299
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1302
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1305
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -46192,7 +46453,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -46204,7 +46465,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -46212,7 +46473,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1316
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -46220,7 +46481,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -46229,7 +46490,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1323
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -46243,7 +46504,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1328
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -46253,7 +46514,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1331
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -46262,7 +46523,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1334
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -46272,54 +46533,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1337
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1340
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1343
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1346
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1349
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1352
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1355
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1358
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -46330,61 +46591,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1365
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1368
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1371
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1374
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1377
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1380
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1383
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1386
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -46395,7 +46656,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -46404,26 +46665,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1393 doc/classes/ProjectSettings.xml:1396
#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1405
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1408
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1411
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -46434,20 +46695,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1418
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -46459,52 +46720,52 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1428
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1435
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1438
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1441
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1444
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1447
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1450
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1453
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -46512,7 +46773,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -46522,10 +46783,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -46534,10 +46795,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -46546,10 +46807,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -46558,10 +46819,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -46570,10 +46831,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -47239,40 +47500,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr ""
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -47280,14 +47555,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -49621,6 +49896,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -49638,7 +49929,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -49646,11 +49937,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -49660,19 +49951,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -55094,20 +55385,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -55118,28 +55414,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -55151,19 +55447,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
@@ -57975,26 +58271,33 @@ msgid "Text [Color] used when the [ToolButton] is disabled."
msgstr ""
#: doc/classes/ToolButton.xml:39
-msgid "Text [Color] used when the [ToolButton] is being hovered."
+msgid ""
+"Text [Color] used when the [ToolButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/ToolButton.xml:42
-msgid "Text [Color] used when the [ToolButton] is being pressed."
+msgid "Text [Color] used when the [ToolButton] is being hovered."
msgstr ""
#: doc/classes/ToolButton.xml:45
-msgid "[StyleBox] used when the [ToolButton] is being hovered."
+msgid "Text [Color] used when the [ToolButton] is being pressed."
msgstr ""
#: doc/classes/ToolButton.xml:48
-msgid "The horizontal space between [ToolButton]'s icon and text."
+msgid "[StyleBox] used when the [ToolButton] is being hovered."
msgstr ""
#: doc/classes/ToolButton.xml:51
-msgid "Default [StyleBox] for the [ToolButton]."
+msgid "The horizontal space between [ToolButton]'s icon and text."
msgstr ""
#: doc/classes/ToolButton.xml:54
+msgid "Default [StyleBox] for the [ToolButton]."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:57
msgid "[StyleBox] used when the [ToolButton] is being pressed."
msgstr ""
diff --git a/doc/translations/de.po b/doc/translations/de.po
index 1a050d19c2..61fe8213cc 100644
--- a/doc/translations/de.po
+++ b/doc/translations/de.po
@@ -32,12 +32,18 @@
# Ron Eric Hackländer <mail@roneric.net>, 2021.
# Stephan Kerbl <stephankerbl@gmail.com>, 2021.
# jmih03 <joerni@mail.de>, 2021.
+# spoadr <spoadr@gmx.ch>, 2021.
+# Tim <tim14speckenwirth@gmail.com>, 2021.
+# user <online141@gmx.de>, 2021.
+# Jummit <jummit@web.de>, 2021.
+# Bastian <bastian.ike@gmail.com>, 2021.
+# KuhnChris <kuhnchris@kuhnchris.eu>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2021-06-28 22:34+0000\n"
-"Last-Translator: jmih03 <joerni@mail.de>\n"
+"PO-Revision-Date: 2021-11-18 13:37+0000\n"
+"Last-Translator: KuhnChris <kuhnchris@kuhnchris.eu>\n"
"Language-Team: German <https://hosted.weblate.org/projects/godot-engine/"
"godot-class-reference/de/>\n"
"Language: de\n"
@@ -45,45 +51,45 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.7.1-dev\n"
+"X-Generator: Weblate 4.9.1-dev\n"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Description"
msgstr "Beschreibung"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Tutorials"
msgstr "Anleitungen"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Properties"
msgstr "Eigenschaften"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Methods"
msgstr "Methoden"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Theme Properties"
msgstr "Theme-Eigenschaften"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Signals"
msgstr "Signale"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Enumerations"
msgstr "Aufzählungen"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Constants"
msgstr "Konstanten"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Property Descriptions"
msgstr "Eigenschaften-Beschreibung"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Method Descriptions"
msgstr "Methoden-Beschreibung"
@@ -144,7 +150,6 @@ msgstr ""
"Konstanten."
#: modules/gdscript/doc_classes/@GDScript.xml:45
-#, fuzzy
msgid ""
"Returns the absolute value of parameter [code]s[/code] (i.e. positive "
"value).\n"
@@ -155,12 +160,10 @@ msgstr ""
"Gibt den absoluten Wert des Parameters [code]s[/code] zurück (d.h. "
"vorzeichenloser Wert).\n"
"[codeblock]\n"
-"# a ist 1\n"
-"a = abs(-1)\n"
+"a = abs(-1) # a ist 1\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:55
-#, fuzzy
msgid ""
"Returns the arc cosine of [code]s[/code] in radians. Use to get the angle of "
"cosine [code]s[/code]. [code]s[/code] must be between [code]-1.0[/code] and "
@@ -171,15 +174,16 @@ msgid ""
"c = acos(0.866025)\n"
"[/codeblock]"
msgstr ""
-"Gibt den Bogenkosinus von [code]s[/code] in Bogenmaß zurück. Verwenden Sie "
-"diese Funktion, um den Winkel des Kosinus [code]s[/code] zu erhalten.\n"
+"Gibt den Arkuskosinus von [code]s[/code] in Bogenmaß zurück. Verwenden Sie "
+"diese Funktion, um den Winkel des Kosinus [code]s[/code] zu erhalten. "
+"[code]s[/code] muss zwischen [code]-1.0[/code] und [code]1.0[/code] "
+"(inklusiv) liegen, sonst wird [method acos] [constant NAN] zurückgeben.\n"
"[Codeblock]\n"
"# c ist 0,523599 oder 30 Grad, wenn mit rad2deg(s) umgerechnet\n"
"c = acos(0,866025)\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:66
-#, fuzzy
msgid ""
"Returns the arc sine of [code]s[/code] in radians. Use to get the angle of "
"sine [code]s[/code]. [code]s[/code] must be between [code]-1.0[/code] and "
@@ -190,15 +194,16 @@ msgid ""
"s = asin(0.5)\n"
"[/codeblock]"
msgstr ""
-"Gibt den Arcussinus von [code]s[/code] in Bogenmaß zurück. Verwenden Sie "
-"diese Funktion, um den Sinuswinkel [code]s[/code] zu erhalten.\n"
+"Gibt den Arkussinus von [code]s[/code] in Bogenmaß zurück. Verwenden Sie "
+"diese Funktion, um den Sinuswinkel [code]s[/code] zu erhalten. [code]s[/"
+"code] muss zwischen [code]-1.0[/code] und [code]1.0[/code] (inklusiv) "
+"liegen, sonst wird [method asin] [constant NAN] zurückgeben.\n"
"[Codeblock]\n"
"# s ist 0,523599 oder 30 Grad, wenn mit rad2deg(s) umgerechnet\n"
"s = asin(0,5)\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:78
-#, fuzzy
msgid ""
"Asserts that the [code]condition[/code] is [code]true[/code]. If the "
"[code]condition[/code] is [code]false[/code], an error is generated. When "
@@ -224,25 +229,27 @@ msgid ""
"a message with clarifying details\n"
"[/codeblock]"
msgstr ""
-"Stellt sicher, dass [code]Bedingung[/code] ist [code]true[/code]. Wenn "
-"[code]condition[/code] ist [code]false[/code], wird ein Fehler erzeugt, und "
-"das Programm wird angehalten, bis Sie es wieder aufnehmen. Wird nur in Debug-"
-"Builds oder beim Ausführen des Spiels vom Editor aus ausgeführt. Verwenden "
-"Sie sie für Debugging-Zwecke, um sicherzustellen, dass eine Aussage während "
-"der Entwicklung [code]true[/code] ist.\n"
-"Das optionale Argument [code]message[/code] wird, falls angegeben, "
-"zusätzlich zu der allgemeinen Meldung \"Zusicherung fehlgeschlagen\" "
-"angezeigt. Sie können dies verwenden, um zusätzliche Einzelheiten darüber "
-"anzugeben, warum die Zusicherung fehlgeschlagen ist.\n"
+"Stellt sicher, dass [code]condition[/code] [code]true[/code] ist. Wenn "
+"[code]condition[/code] [code]false[/code] ist wird ein Fehler erzeugt. Wenn "
+"das Spiel vom Editor aus gestartet wurde wird es außerdem pausiert. Zum "
+"Fortfahren muss es vom Editor aus fortgesetzt werden.\n"
+"[b]Hinweis:[/b] Der Code innerhalb von [method assert] wird nur in Debug-"
+"Builds oder beim Ausführen des Spiels vom Editor ausgeführt. Desswegen "
+"sollte kein Code mit Nebeneffekten (z.B.: ändern von Variablen) innerhalb "
+"der Argumente von [method assert] genutzt werden. Sonst wird sich das Spiel "
+"in exportierten Versionen anders verhalten als im Editor.\n"
+"Das optionale Argument [code]message[/code] wird, zusätzlich zu der "
+"allgemeinen Fehlermeldung angezeigt. Das kann verwendet werden um genauere "
+"Informationen zum Grund des Fehlers zu geben.\n"
"[codeblock]\n"
"# Angenommen, wir wollen immer eine Geschwindigkeit zwischen 0 und 20\n"
-"Geschwindigkeit = -10\n"
-"assert(Geschwindigkeit < 20) # Wahr, das Programm wird fortgesetzt\n"
-"assert(speed >= 0) # Falsch, das Programm wird gestoppt\n"
-"assert(speed >= 0 && speed < 20) # Sie können die beiden bedingten "
-"Anweisungen auch in einer Prüfung kombinieren\n"
-"assert(Geschwindigkeit < 20, \"Geschwindigkeit = %f, aber die "
-"Geschwindigkeitsbegrenzung beträgt 20\" % Geschwindigkeit) # Zeigt eine "
+"var geschwindigkeit = -10\n"
+"assert(geschwindigkeit < 20) # Wahr, das Programm wird fortgesetzt\n"
+"assert(geschwindigkeit >= 0) # Falsch, das Programm wird gestoppt\n"
+"assert(geschwindigkeit >= 0 and geschwindigkeit < 20) # Zwei Aussagen können "
+"in einer Prüfung zusammengefasst werden\n"
+"assert(geschwindigkeit < 20, \"Geschwindigkeit = %f, aber die "
+"Geschwindigkeitsbegrenzung beträgt 20\" % geschwindigkeit) # Zeigt eine "
"Nachricht mit klärenden Details\n"
"[/codeblock]"
@@ -313,7 +320,6 @@ msgstr ""
"Winkel)."
#: modules/gdscript/doc_classes/@GDScript.xml:135
-#, fuzzy
msgid ""
"Rounds [code]s[/code] upward (towards positive infinity), returning the "
"smallest whole number that is not less than [code]s[/code].\n"
@@ -325,10 +331,11 @@ msgid ""
msgstr ""
"Rundet [code]s[/code] nach oben auf und gibt die kleinste ganze Zahl zurück, "
"die nicht geringer ist als [code]s[/code].\n"
-"[Codeblock]\n"
-"i = ceil(1,45) # i ist 2\n"
-"i = ceil(1.001) # i ist 2\n"
-"[/codeblock]"
+"[codeblock]\n"
+"a = ceil(1.45) # a ist 2.0\n"
+"a = ceil(1.001) # a ist 2.0\n"
+"[/codeblock]\n"
+"Siehe auch [method floor], [method round], [method stepify] und [int]."
#: modules/gdscript/doc_classes/@GDScript.xml:147
msgid ""
@@ -341,17 +348,16 @@ msgid ""
"[/codeblock]\n"
"This is the inverse of [method ord]."
msgstr ""
-"Gibt ein Zeichen als Zeichenfolge des angegebenen Unicode-Codepunkts zurück "
-"(der mit ASCII-Code kompatibel ist).\n"
-"[Codeblock]\n"
-"a = char (65) # a ist \"A\"\n"
-"a = char (65 + 32) # a ist \"a\"\n"
-"a = char (8364) # a ist \"€\"\n"
-"[/ codeblock]\n"
+"Gibt ein Zeichen als Zeichenkette mit dem angegebenen Unicode-Codepunkt (der "
+"mit dem ASCII-Code kompatibel ist) zurück.\n"
+"[codeblock]\n"
+"a = char(65) # a ist \"A\"\n"
+"a = char(65 + 32) # a ist \"a\"\n"
+"a = char(8364) # a ist \"€\"\n"
+"[/codeblock]\n"
"Dies ist die Umkehrung von [method ord]."
#: modules/gdscript/doc_classes/@GDScript.xml:162
-#, fuzzy
msgid ""
"Clamps [code]value[/code] and returns a value not less than [code]min[/code] "
"and not more than [code]max[/code].\n"
@@ -364,13 +370,9 @@ msgstr ""
"Klammert [code]Wert[/code] und gibt einen Wert von nicht weniger als "
"[code]min[/code] und nicht mehr als [code]max[/code] zurück.\n"
"[codeblock]\n"
-"speed = 1000\n"
-"# a is 20\n"
-"a = clamp(speed, 1, 20)\n"
-"\n"
-"speed = -10\n"
-"# a is 1\n"
-"a = clamp(speed, 1, 20)\n"
+"a = clamp(1000, 1, 20) # a ist 20\n"
+"a = clamp(-10, 1, 20) # a ist 1\n"
+"a = clamp(15, 1, 20) # a ist 15\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:175
@@ -398,7 +400,6 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:190
-#, fuzzy
msgid ""
"Returns the cosine of angle [code]s[/code] in radians.\n"
"[codeblock]\n"
@@ -406,13 +407,13 @@ msgid ""
"a = cos(PI) # a is -1.0\n"
"[/codeblock]"
msgstr ""
-"Gibt den Sinus des Winkels [code]s[/code] in Radiant zurück.\n"
+"Gibt den Cosinus des Winkels [code]s[/code] in Radiant zurück.\n"
"[codeblock]\n"
-"sin(0.523599) # Returns 0.5\n"
+"a = cos(TAU) # a ist 1.0\n"
+"a = cos(PI) # a ist -1.0\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:201
-#, fuzzy
msgid ""
"Returns the hyperbolic cosine of [code]s[/code] in radians.\n"
"[codeblock]\n"
@@ -421,8 +422,7 @@ msgid ""
msgstr ""
"Gibt den hyperbolischen Kosinus von [code]s[/code] in Bogenmaß zurück.\n"
"[codeblock]\n"
-"# Prints 1.543081\n"
-"print(cosh(1))\n"
+"print(cosh(1)) # Gibt 1.543081 aus\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:211
@@ -431,10 +431,9 @@ msgstr "Konvertiert von Dezibel in lineare Energie (Audio)."
#: modules/gdscript/doc_classes/@GDScript.xml:218
msgid "Deprecated alias for [method step_decimals]."
-msgstr ""
+msgstr "Veralteter Alias für [method step_decimals]."
#: modules/gdscript/doc_classes/@GDScript.xml:227
-#, fuzzy
msgid ""
"[b]Note:[/b] [code]dectime[/code] has been deprecated and will be removed in "
"Godot 4.0, please use [method move_toward] instead.\n"
@@ -444,15 +443,15 @@ msgid ""
"a = dectime(60, 10, 0.1)) # a is 59.0\n"
"[/codeblock]"
msgstr ""
-"Gibt das Ergebnis von [code]Wert[/code] vermindert um [code]Schritt[/code] * "
-"[code]Betrag[/code] zurück.\n"
+"[b]Hinweis:[/b] [code]dectime[/code] ist veraltet und wird in Godot 4.0 "
+"entfernt. [method move_toward] kann stattdessen verwendet werden.\n"
+"Gibt das Ergebnis von [code]value[/code] vermindert um [code]step[/code] * "
+"[code]amount[/code] zurück.\n"
"[codeblock]\n"
-"# a = 59\n"
-"a = dectime(60, 10, 0.1))\n"
+"a = dectime(60, 10, 0.1)) # a ist 59.0\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:238
-#, fuzzy
msgid ""
"Converts an angle expressed in degrees to radians.\n"
"[codeblock]\n"
@@ -462,20 +461,19 @@ msgstr ""
"Rechnet einen im Gradmaß vorliegenden Winkel ins Bogenmaß um und gibt das "
"Ergebnis zurück.\n"
"[codeblock]\n"
-"# r is 3.141593\n"
-"r = deg2rad(180)\n"
+"r = deg2rad(180) # r ist 3.141593\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:248
-#, fuzzy
msgid ""
"Converts a dictionary (previously created with [method inst2dict]) back to "
"an instance. Useful for deserializing."
msgstr ""
-"Konvertiert eine zuvor konvertierte Instanz in ein Wörterbuch, zurück in "
-"eine Instanz. Nützlich für die Deserialisierung."
+"Konvertiert ein Wörterbuch (das zuvor mit [method inst2dict] erstellt wurde) "
+"zurück in eine Instanz. Nützlich für die Deserialisierung."
#: modules/gdscript/doc_classes/@GDScript.xml:256
+#, fuzzy
msgid ""
"Returns an \"eased\" value of [code]x[/code] based on an easing function "
"defined with [code]curve[/code]. This easing function is based on an "
@@ -495,6 +493,23 @@ msgid ""
"See also [method smoothstep]. If you need to perform more advanced "
"transitions, use [Tween] or [AnimationPlayer]."
msgstr ""
+"Gibt einen interpolierten Wert von [code]x[/code] basiert auf einer Funktion "
+"die durch [code]curve[/code] definiert wird. Die Funktion basiert auf einem "
+"Exponent. Die [code]curve[/code] kann jegliche Gleitkommazahl sein, von "
+"welchen diese spezifische Werte zu folgendem Verhalten führen:\n"
+"[codeblock]\n"
+"- Weniger als -1.0 (exclusiv): Beschleunige in-out\n"
+"- 1.0: Linear\n"
+"- Zwischen -1.0 und 0.0 (exclusiv): Beschleunige out-in\n"
+"- 0.0: Konstant\n"
+"- Zwischen 0.0 und 1.0 (exclusiv): Beschleunige in\n"
+"- 1.0: Linear\n"
+"- Mehr als 1.0 (exclusive): Beschleunige out\n"
+"[/codeblock]\n"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/"
+"ease_cheatsheet.png]ease() curve values cheatsheet[/url]\n"
+"Siehe auch [method smoothstep]. Falls du fortgeschrittene Übergänge "
+"erstellen möchtest, benutze [Tween] oder [AnimationPlayer]."
#: modules/gdscript/doc_classes/@GDScript.xml:274
msgid ""
@@ -517,7 +532,6 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:286
-#, fuzzy
msgid ""
"Rounds [code]s[/code] downward (towards negative infinity), returning the "
"largest whole number that is not more than [code]s[/code].\n"
@@ -535,16 +549,16 @@ msgstr ""
"Richtung negativ unendlich) und gibt die größte ganze Zahl zurück, die nicht "
"größer als [code]s[/code] ist.\n"
"[codeblock]\n"
-"# a is 2.0\n"
-"a = floor(2.99)\n"
-"# a is -3.0\n"
-"a = floor(-2.99)\n"
+"a = floor(2.45) # a ist 2.0\n"
+"a = floor(2.99) # a ist 2.0\n"
+"a = floor(-2.99) # a ist -3.0\n"
"[/codeblock]\n"
+"Siehe auch [method ceil], [method round], [method stepify], und [int].\n"
"[b]Hinweis:[/b] Diese Methode gibt eine Fließkommazahl zurück. Wenn Sie eine "
-"Ganzzahl benötigen, können Sie [code]int(s)[/code] direkt verwenden."
+"Ganzzahl benötigen und [code]s[/code] nicht negativ ist, können Sie "
+"[code]int(s)[/code] direkt verwenden."
#: modules/gdscript/doc_classes/@GDScript.xml:301
-#, fuzzy
msgid ""
"Returns the floating-point remainder of [code]a/b[/code], keeping the sign "
"of [code]a[/code].\n"
@@ -556,13 +570,11 @@ msgstr ""
"Gibt den Divisionsrest von [code]a/b[/code] mit Nachkommastellen zurück und "
"behält das Vorzeichen von [code]a[/code].\n"
"[codeblock]\n"
-"# Rest ist 1.5\n"
-"var rest = fmod(7, 5.5)\n"
+"var rest = fmod(7, 5.5) # rest ist 1.5\n"
"[/codeblock]\n"
"Für den Integer-Divisionsrest, den % Operator benutzen."
#: modules/gdscript/doc_classes/@GDScript.xml:313
-#, fuzzy
msgid ""
"Returns the floating-point modulus of [code]a/b[/code] that wraps equally in "
"positive and negative.\n"
@@ -585,24 +597,19 @@ msgstr ""
"Gibt den Fließkommamodulo von [code]a/b[/code] zurück, der gleichermaßen in "
"positiv und negativ umschlägt.\n"
"[codeblock]\n"
-"var i = -6\n"
-"while i < 5:\n"
-" prints(i, fposmod(i, 3))\n"
-" i += 1\n"
+"for i in 7:\n"
+" var x = 0.5 * i - 1.5\n"
+" print(\"%4.1f %4.1f %4.1f\" % [x, fmod(x, 1.5), fposmod(x, 1.5)])\n"
"[/codeblock]\n"
-"Produziert:\n"
+"Gibt aus:\n"
"[codeblock]\n"
-"-6 0\n"
-"-5 1\n"
-"-4 2\n"
-"-3 0\n"
-"-2 1\n"
-"-1 2\n"
-"0 0\n"
-"1 1\n"
-"2 2\n"
-"3 0\n"
-"4 1\n"
+"-1.5 -0.0 0.0\n"
+"-1.0 -1.0 0.5\n"
+"-0.5 -0.5 1.0\n"
+" 0.0 0.0 0.0\n"
+" 0.5 0.5 0.5\n"
+" 1.0 1.0 1.0\n"
+" 1.5 0.0 0.0\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:336
@@ -1229,6 +1236,16 @@ msgid ""
"distinguishes them from print messages used for debugging purposes, while "
"also displaying a stack trace when an error or warning is printed."
msgstr ""
+"Wandelt ein oder mehrere Argumente aller Typen bestmöglich in Zeichenketten "
+"um und gibt sie in der Konsole aus.\n"
+"[codeblock]\n"
+"var a = [1,2,3]\n"
+"print(\"a\",\"=\",a) # Schreibt \"a=[1,2,3]\n"
+"[/codeblock]\n"
+"[b]Hinweis:[/b] Benutze [method push_error] und [method push_warning] statt "
+"[method print] um Fehlermeldungen und Warnungen auszugeben. Sie "
+"unterscheiden sich von normalen Ausgaben und geben zusätzlich einen Stack-"
+"Trace aus."
#: modules/gdscript/doc_classes/@GDScript.xml:702
msgid "Like [method print], but prints only when used in debug mode."
@@ -1318,7 +1335,6 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:758
-#, fuzzy
msgid ""
"Pushes an error message to Godot's built-in debugger and to the OS "
"terminal.\n"
@@ -1330,12 +1346,16 @@ msgid ""
"print an error message and pause project execution in debug builds, use "
"[code]assert(false, \"test error\")[/code] instead."
msgstr ""
-"Gibt eine Fehlermeldung in Godot's integriertem Debugger und in der OS "
-"Konsole aus.\n"
+"Gibt eine Fehlermeldung an Godots integrierten Debugger und an das "
+"Betriebssystem-Terminal aus.\n"
"[codeblock]\n"
-"push_error(\"test error\") # Gibt\"test error\" im Debugger und im Terminal "
-"als Fehlermeldung aus\n"
-"[/codeblock]"
+"push_error(\"test error\") # Gibt \"test error\" als Fehleraufruf an "
+"Debugger und Terminal aus\n"
+"[/codeblock]\n"
+"[b]Hinweis:[/b] Fehler, die auf diese Weise ausgegeben werden, halten die "
+"Projektausführung nicht an. Um eine Fehlermeldung auszugeben und die "
+"Projektausführung in Debug-Builds anzuhalten, verwenden Sie stattdessen "
+"[code]assert(false, \"test error\")[/code]."
#: modules/gdscript/doc_classes/@GDScript.xml:769
msgid ""
@@ -1354,7 +1374,6 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:779
-#, fuzzy
msgid ""
"Converts an angle expressed in radians to degrees.\n"
"[codeblock]\n"
@@ -1503,7 +1522,6 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:884
-#, fuzzy
msgid ""
"Rounds [code]s[/code] to the nearest whole number, with halfway cases "
"rounded away from zero.\n"
@@ -1514,11 +1532,14 @@ msgid ""
"[/codeblock]\n"
"See also [method floor], [method ceil], [method stepify], and [int]."
msgstr ""
-"Rundet [code]s[/code] auf die nächste ganze Zahle, wobei Mittelwerte von "
-"Null weg gerundet werden.\n"
+"Rundet [code]s[/code] auf die nächstliegende ganze Zahl, wobei halbe Werte "
+"aufgerundet werden.\n"
"[codeblock]\n"
-"round(2.6) # Liefert 3\n"
-"[/codeblock]"
+"a = round(2.49) # a ist 2.0\n"
+"a = round(2.5) # a ist 3.0\n"
+"a = round(2.51) # a ist 3,0\n"
+"[/codeblock]\n"
+"Siehe auch [method floor], [method ceil], [method stepify], und [int]."
#: modules/gdscript/doc_classes/@GDScript.xml:897
msgid ""
@@ -1666,7 +1687,6 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:984
-#, fuzzy
msgid ""
"Snaps float value [code]s[/code] to a given [code]step[/code]. This can also "
"be used to round a floating point number to an arbitrary number of "
@@ -1681,9 +1701,10 @@ msgstr ""
"code]. Dies kann auch zum Runden einer Gleitkommazahl auf eine willkürliche "
"Anzahl von Dezimalzen genutzt werden.\n"
"[codeblock]\n"
-"stepify(100, 32) # Returns 96\n"
-"stepify(3.14159, 0.01) # Returns 3.14\n"
-"[/codeblock]"
+"stepify(100, 32) # Gibt 96.0 aus\n"
+"stepify(3.14159, 0.01) # Gibt 3.14 aus\n"
+"[/codeblock]\n"
+"Siehe auch [method ceil], [method floor], [method round], und [int]."
#: modules/gdscript/doc_classes/@GDScript.xml:995
#, fuzzy
@@ -1736,7 +1757,6 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:1030
-#, fuzzy
msgid ""
"Returns the hyperbolic tangent of [code]s[/code].\n"
"[codeblock]\n"
@@ -1744,7 +1764,7 @@ msgid ""
"b = tanh(a) # b is 0.6\n"
"[/codeblock]"
msgstr ""
-"Gibt den Hyperbeltangens von [code]s[/code] zurück.\n"
+"Gibt den hyperbolischen Tangens von [code]s[/code] zurück.\n"
"[codeblock]\n"
"a = log(2.0) # Returns 0.693147\n"
"tanh(a) # Returns 0.6\n"
@@ -2056,6 +2076,16 @@ msgid ""
"code] will not result in [constant INF] and will result in a run-time error "
"instead."
msgstr ""
+"Gleitkomma Darstellung von Unendlich. Diese ist das Ergebnis wenn bei einer "
+"Gleitkomma-Division durch [code]0[/code] geteilt wird. Benutze [code]-INF[/"
+"code] um minus Unendlich zu erhalten. Wird eine positive Gleitkommazahl "
+"durch [code]-0.0[/code] geteilt, so entsteht minus Unendlich. Also ist "
+"teilen durch [code]0.0[/code] nicht das gleiche wie teilen durch [code]-0.0[/"
+"code] (obwohl [code]0.0 == -0.0[/code] [code]true[/code] zurückgibt).\n"
+"[b]Bemerkung:[/b] Numerische Unendlichkeit existiert nur für "
+"gleitkommazahlen, es gibt kein Äquivalent für Ganzzahlen. Wird eine Ganzzahl "
+"durch [code]0[/code] geteilt, so resultiert das nicht in [constant INF], "
+"sondern produziert stattdessen einen Laufzeitfehler."
#: modules/gdscript/doc_classes/@GDScript.xml:1217
msgid ""
@@ -2069,6 +2099,16 @@ msgid ""
"[code]0[/code] will not result in [constant NAN] and will result in a run-"
"time error instead."
msgstr ""
+"Steht für \"Not a Number\" (\"keine Zahl\"). Der Wert stellt eine nicht "
+"zulässige Kommazahl dar. [constant NAN] hat spezielle EIgenschaften, zum "
+"Beispiel ist der Wert sich selbst nicht glich ([code]NAN==NAN[/code] gibt "
+"[code]false[/code] zurück). [constant NAN] ist die Ausgabe einiger "
+"ungültiger Operationen wie zum Beispiel die Division von [code]0.0[/code] "
+"mit [code]0.0[/code].\n"
+"[b]Hinweis:[/b] \"Not a Number\" ist ein Konzept, dass exklusiv für "
+"Kommazahlen gilt, und kein Gegenstück für Ganzzahlen besitzt. Die Ganzzahl "
+"[code]0[/code] durch [code]0[/code] zu teilen wird nicht [constant NAN] "
+"zurückgeben sondern einen Fehler auslösen."
#: doc/classes/@GlobalScope.xml:4
msgid "Global scope constants and variables."
@@ -3373,7 +3413,7 @@ msgstr "ungültige Zeitdauer."
#: doc/classes/@GlobalScope.xml:941
msgid "Gamepad button 0."
-msgstr ""
+msgstr "Gamepad-Taste 0."
#: doc/classes/@GlobalScope.xml:944
#, fuzzy
@@ -3387,83 +3427,83 @@ msgstr "Extra Maustaste 2 Maske."
#: doc/classes/@GlobalScope.xml:950
msgid "Gamepad button 3."
-msgstr ""
+msgstr "Gamepad-Taste 3."
#: doc/classes/@GlobalScope.xml:953
msgid "Gamepad button 4."
-msgstr ""
+msgstr "Gamepad-Taste 4."
#: doc/classes/@GlobalScope.xml:956
msgid "Gamepad button 5."
-msgstr ""
+msgstr "Gamepad-Taste 5."
#: doc/classes/@GlobalScope.xml:959
msgid "Gamepad button 6."
-msgstr ""
+msgstr "Gamepad-Taste 6."
#: doc/classes/@GlobalScope.xml:962
msgid "Gamepad button 7."
-msgstr ""
+msgstr "Gamepad-Taste 7."
#: doc/classes/@GlobalScope.xml:965
msgid "Gamepad button 8."
-msgstr ""
+msgstr "Gamepad-Taste 8."
#: doc/classes/@GlobalScope.xml:968
msgid "Gamepad button 9."
-msgstr ""
+msgstr "Gamepad-Taste 9."
#: doc/classes/@GlobalScope.xml:971
msgid "Gamepad button 10."
-msgstr ""
+msgstr "Gamepad-Taste 10."
#: doc/classes/@GlobalScope.xml:974
msgid "Gamepad button 11."
-msgstr ""
+msgstr "Gamepad-Taste 11."
#: doc/classes/@GlobalScope.xml:977
msgid "Gamepad button 12."
-msgstr ""
+msgstr "Gamepad-Taste 12."
#: doc/classes/@GlobalScope.xml:980
msgid "Gamepad button 13."
-msgstr ""
+msgstr "Gamepad-Taste 13."
#: doc/classes/@GlobalScope.xml:983
msgid "Gamepad button 14."
-msgstr ""
+msgstr "Gamepad-Taste 14."
#: doc/classes/@GlobalScope.xml:986
msgid "Gamepad button 15."
-msgstr ""
+msgstr "Gamepad-Taste 15."
#: doc/classes/@GlobalScope.xml:989
msgid "Gamepad button 16."
-msgstr ""
+msgstr "Gamepad-Taste 16."
#: doc/classes/@GlobalScope.xml:992
msgid "Gamepad button 17."
-msgstr ""
+msgstr "Gamepad-Taste 17."
#: doc/classes/@GlobalScope.xml:995
msgid "Gamepad button 18."
-msgstr ""
+msgstr "Gamepad-Taste 18."
#: doc/classes/@GlobalScope.xml:998
msgid "Gamepad button 19."
-msgstr ""
+msgstr "Gamepad-Taste 19."
#: doc/classes/@GlobalScope.xml:1001
msgid "Gamepad button 20."
-msgstr ""
+msgstr "Gamepad-Taste 20."
#: doc/classes/@GlobalScope.xml:1004
msgid "Gamepad button 21."
-msgstr ""
+msgstr "Gamepad-Taste 21."
#: doc/classes/@GlobalScope.xml:1007
msgid "Gamepad button 22."
-msgstr ""
+msgstr "Gamepad-Taste 22."
#: doc/classes/@GlobalScope.xml:1010
#, fuzzy
@@ -3472,19 +3512,19 @@ msgstr "Die maximale Anzahl der Tasten des Game Controllers."
#: doc/classes/@GlobalScope.xml:1013
msgid "DualShock circle button."
-msgstr ""
+msgstr "DualShock-Kreis-Taste."
#: doc/classes/@GlobalScope.xml:1016
msgid "DualShock X button."
-msgstr ""
+msgstr "DualShock-X-Taste."
#: doc/classes/@GlobalScope.xml:1019
msgid "DualShock square button."
-msgstr ""
+msgstr "DualShock-Quadrat-Taste."
#: doc/classes/@GlobalScope.xml:1022
msgid "DualShock triangle button."
-msgstr ""
+msgstr "DualShock-Dreieck-Taste."
#: doc/classes/@GlobalScope.xml:1025
#, fuzzy
@@ -3527,8 +3567,9 @@ msgid "Nintendo controller Y button."
msgstr "Game-Controller SDL-Taste A."
#: doc/classes/@GlobalScope.xml:1049
+#, fuzzy
msgid "Grip (side) buttons on a VR controller."
-msgstr ""
+msgstr "Grip (Seiten) Knopf an einem VR-Controller"
#: doc/classes/@GlobalScope.xml:1052
msgid "Push down on the touchpad or main joystick on a VR controller."
@@ -3543,44 +3584,49 @@ msgid ""
"A button on the right Oculus Touch controller, X button on the left "
"controller (also when used in OpenVR)."
msgstr ""
+"A-Taste auf dem rechten Oculus Touch Controller, X-Taste auf dem linken "
+"Controller (auch bei Verwendung in OpenVR)."
#: doc/classes/@GlobalScope.xml:1061
msgid ""
"B button on the right Oculus Touch controller, Y button on the left "
"controller (also when used in OpenVR)."
msgstr ""
+"B-Taste auf dem rechten Oculus Touch Controller, Y-Taste auf dem linken "
+"Controller (auch bei Verwendung in OpenVR)."
#: doc/classes/@GlobalScope.xml:1064
msgid "Menu button on either Oculus Touch controller."
-msgstr ""
+msgstr "Menütaste auf einem der beiden Oculus Touch Controller."
#: doc/classes/@GlobalScope.xml:1067
msgid "Menu button in OpenVR (Except when Oculus Touch controllers are used)."
msgstr ""
+"Menütaste in OpenVR (außer wenn Oculus Touch Controller verwendet werden)."
#: doc/classes/@GlobalScope.xml:1070
msgid "Gamepad button Select."
-msgstr ""
+msgstr "Gamepad-Taste Auswählen."
#: doc/classes/@GlobalScope.xml:1073
msgid "Gamepad button Start."
-msgstr ""
+msgstr "Gamepad-Taste Start."
#: doc/classes/@GlobalScope.xml:1076
msgid "Gamepad DPad up."
-msgstr ""
+msgstr "Gamepad DPad oben."
#: doc/classes/@GlobalScope.xml:1079
msgid "Gamepad DPad down."
-msgstr ""
+msgstr "Gamepad DPad unten."
#: doc/classes/@GlobalScope.xml:1082
msgid "Gamepad DPad left."
-msgstr ""
+msgstr "Gamepad DPad links."
#: doc/classes/@GlobalScope.xml:1085
msgid "Gamepad DPad right."
-msgstr ""
+msgstr "Gamepad DPad rechts."
#: doc/classes/@GlobalScope.xml:1088
#, fuzzy
@@ -3690,7 +3736,7 @@ msgstr ""
#: doc/classes/@GlobalScope.xml:1157
msgid "Represents the maximum number of joystick axes supported."
-msgstr ""
+msgstr "Stellt die maximale Anzahl der unterstützten Joystick-Achsen dar."
#: doc/classes/@GlobalScope.xml:1172
msgid "Gamepad left analog trigger."
@@ -3715,12 +3761,16 @@ msgid ""
"OpenVR touchpad X axis (Joystick axis on Oculus Touch and Windows MR "
"controllers)."
msgstr ""
+"OpenVR-Touchpad X-Achse (Joystick-Achse bei Oculus Touch und Windows MR-"
+"Controllern)."
#: doc/classes/@GlobalScope.xml:1187
msgid ""
"OpenVR touchpad Y axis (Joystick axis on Oculus Touch and Windows MR "
"controllers)."
msgstr ""
+"OpenVR-Touchpad Y-Achse (Joystick-Achse bei Oculus Touch und Windows MR-"
+"Controllern)."
#: doc/classes/@GlobalScope.xml:1190
msgid "MIDI note OFF message."
@@ -3992,15 +4042,14 @@ msgid ""
"or_greater,or_lesser\"[/code]."
msgstr ""
"Weist darauf hin, dass eine Integer- oder Float-Eigenschaft innerhalb eines "
-"Bereichs liegen sollte, der mit der Hinweiszeichenfolge [code]\"min,max\"[/"
+"Bereichs liegen sollte, der mit der Hinweiszeichenkette [code]\"min,max\"[/"
"code] oder [code]\"min,max,step\"[/code] angegeben wird. Die "
-"Hinweiszeichenfolge kann optional [code]\"oder_größer\"[/code] und/oder "
-"[code]\"oder_kleiner\"[/code] enthalten, um eine manuelle Eingabe oberhalb "
-"der Maximal- bzw. unterhalb der Minimalwerte zu ermöglichen. Beispiel: "
+"Hinweiszeichenkette kann optional [code]\"or_greater\"[/code] und/oder "
+"[code]\"or_lesser\"[/code] enthalten, um eine manuelle Eingabe oberhalb der "
+"Höchst- bzw. unterhalb der Mindestwerte zu ermöglichen. Beispiel: "
"[code]\"-360,360,1,or_greater,or_lesser\"[/code]."
#: doc/classes/@GlobalScope.xml:1373
-#, fuzzy
msgid ""
"Hints that a float property should be within an exponential range specified "
"via the hint string [code]\"min,max\"[/code] or [code]\"min,max,step\"[/"
@@ -4009,12 +4058,12 @@ msgid ""
"above the max or below the min values. Example: [code]\"0.01,100,0.01,"
"or_greater\"[/code]."
msgstr ""
-"Weist darauf hin, dass eine Integer- oder Float-Eigenschaft innerhalb eines "
-"exponentiellen Bereichs liegen sollte, der mit der Hinweiszeichenfolge "
-"[code]\"min,max\"[/code] oder [code]\"min,max,step\"[/code] angegeben wird. "
-"Die Hinweiszeichenfolge kann optional [code]\"oder_größer\"[/code] und/oder "
-"[code]\"oder_kleiner\"[/code] enthalten, um eine manuelle Eingabe oberhalb "
-"der Maximal- bzw. unterhalb der Minimalwerte zu ermöglichen. Beispiel: "
+"Weist darauf hin, dass eine Float-Eigenschaft innerhalb eines exponentiellen "
+"Bereichs liegen sollte, der durch die Hinweiszeichenkette [code]\"min,max\"[/"
+"code] oder [code]\"min,max,step\"[/code] festgelegt wird. Die "
+"Hinweiszeichenkettekann optional [code]\"or_greater\"[/code] und/oder "
+"[code]\"or_lesser\"[/code] enthalten, um eine manuelle Eingabe oberhalb der "
+"Maximal- bzw. unterhalb der Minimalwerte zu ermöglichen. Beispiel: "
"[code]\"0.01,100,0.01,or_greater\"[/code]."
#: doc/classes/@GlobalScope.xml:1376
@@ -4023,9 +4072,10 @@ msgid ""
"pick in a list specified via a hint string such as [code]\"Hello,Something,"
"Else\"[/code]."
msgstr ""
-"Weist darauf hin, dass eine Integer-, Float- oder String-Eigenschaft ein "
-"Aufzählungswert ist, der in einer über eine Hinweiszeichenfolge wie "
-"[code]\"Hello,Something,Else\"[/code] angegebenen Liste auszuwählen ist."
+"Weist darauf hin, dass es sich bei einer Integer-, Float- oder Zeichenketten-"
+"Eigenschaft um einen Aufzählungswert handelt, der in einer über eine "
+"Hinweiszeichenkette wie [code]\"Hello,Something,Else\"[/code] angegebenen "
+"Liste auszuwählen ist."
#: doc/classes/@GlobalScope.xml:1379
msgid ""
@@ -4127,16 +4177,16 @@ msgstr ""
"Dateidialog zum Auswählen des Pfades angezeigt."
#: doc/classes/@GlobalScope.xml:1415
-#, fuzzy
msgid ""
"Hints that a property is an instance of a [Resource]-derived type, "
"optionally specified via the hint string (e.g. [code]\"Texture\"[/code]). "
"Editing it will show a popup menu of valid resource types to instantiate."
msgstr ""
-"Weist darauf hin, dass eine Eigenschaft eine Instanz eines von [Ressource] "
-"abgeleiteten Typs ist, der optional über die Hinweiszeichenfolge angegeben "
-"wird (z. B. [code]\"Texture2D\"[/code]). Bei der Bearbeitung wird ein Popup-"
-"Menü mit gültigen Ressourcentypen zum Instanziieren angezeigt."
+"Weist darauf hin, dass es sich bei einer Eigenschaft um eine Instanz eines "
+"von [Ressource] abgeleiteten Typs handelt, der optional über die "
+"Hinweiszeichenkette angegeben wird (z. B. [code]\"Textur\"[/code]). Bei der "
+"Bearbeitung wird ein Popup-Menü mit gültigen Ressourcentypen zum "
+"Instanziieren angezeigt."
#: doc/classes/@GlobalScope.xml:1418
msgid ""
@@ -4511,6 +4561,12 @@ msgid ""
"[b]Note:[/b] Unlike [Rect2], [AABB] does not have a variant that uses "
"integer coordinates."
msgstr ""
+"[AABB] besteht aus einer Position, einer Größe und mehreren Hilfsfunktionen. "
+"Es wird für schnelle Überlappungstest genutzt.\n"
+"Es benutzt Kommazahlen für die Koordinaten. Das Gegenstück in 2D zu [AABB] "
+"ist [Rect2].\n"
+"[b]Hinweis:[/b] Im Gegensatz zu [Rect2] hat [AABB] keine Variante die "
+"Ganzzahlen statt Kommazahlen nutzt."
#: doc/classes/AABB.xml:12 doc/classes/Basis.xml:13 doc/classes/Plane.xml:10
#: doc/classes/Rect2.xml:12 doc/classes/Transform.xml:11
@@ -4554,22 +4610,31 @@ msgstr ""
"umschließt."
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
-msgstr "Gibt diesen [AABB] erweitert um einen gegebenen Punkt zurück."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
+msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr "Gibt die Lautstärke des [AABB] zurück."
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr "Liefert die Position der 8 Endpunkte des [AABB] im Raum."
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr "Liefert die normierte längste Achse des [AABB]."
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
@@ -4577,15 +4642,15 @@ msgstr ""
"Liefert den Index der längsten Achse des [AABB] (gemäß den [code]AXIS_*[/"
"code]-Konstanten von [Vector3])."
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr "Liefert die skalare Länge der längsten Achse des [AABB]."
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr "Liefert die normierte kürzeste Achse des [AABB]."
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
@@ -4593,11 +4658,11 @@ msgstr ""
"Liefert den Index der kürzesten Achse des [AABB] (gemäß [Vector3]::AXIS* "
"enum)."
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr "Liefert die skalare Länge der kürzesten Achse des [AABB]."
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
@@ -4605,7 +4670,7 @@ msgstr ""
"Gibt den Stützpunkt in einer bestimmten Richtung zurück. Dies ist nützlich "
"für Algorithmen zur Kollisionserkennung."
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
@@ -4613,19 +4678,19 @@ msgstr ""
"Gibt eine Kopie des [AABB] zurück, die um eine bestimmte Anzahl von "
"Einheiten nach allen Seiten gewachsen ist."
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr "Gibt [code]true[/code] zurück, wenn der [AABB] flach oder leer ist."
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr "Gibt [code]true[/code] zurück, wenn der [AABB] leer ist."
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr "Gibt [code]true[/code] zurück, wenn der [AABB] einen Punkt enthält."
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
@@ -4633,19 +4698,19 @@ msgstr ""
"Liefert die Schnittmenge zwischen zwei [AABB]. Bei einem Fehler wird ein "
"leerer AABB (Größe 0,0,0) zurückgegeben."
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr ""
"Gibt [code]true[/code] zurück, wenn sich das [AABB] mit einem anderen "
"überschneidet."
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
"Gibt [code]true[/code] zurück, wenn der [AABB] auf beiden Seiten einer Ebene "
"liegt."
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
@@ -4653,7 +4718,7 @@ msgstr ""
"Gibt [code]true[/code] zurück, wenn der [AABB] das Liniensegment zwischen "
"[code]from[/code] und [code]to[/code] schneidet."
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
@@ -4663,14 +4728,14 @@ msgstr ""
"annähernd gleich sind, indem die [Methode @GDScript.is_equal_approx] für "
"jede Komponente aufgerufen wird."
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
"Gibt ein größeres [AABB] zurück, das sowohl dieses [AABB] als auch "
"[code]mit[/code] enthält."
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
@@ -4678,11 +4743,11 @@ msgstr ""
"Endende Ecke. Dies wird berechnet als [code]Position + Größe[/code]. Wenn "
"Sie diesen Wert einstellen, wird die Größe geändert."
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr "Beginnende Ecke. Hat typischerweise niedrigere Werte als [Stabende]."
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
#, fuzzy
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
@@ -6174,7 +6239,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -8005,23 +8070,28 @@ msgstr "https://docs.godotengine.org/de/latest/tutorials/vr/index.html"
#: doc/classes/Area.xml:17
#, fuzzy
msgid ""
-"Returns a list of intersecting [Area]s. For performance reasons (collisions "
-"are all processed at the same time) this list is modified once during the "
-"physics step, not immediately after objects are moved. Consider using "
-"signals instead."
+"Returns a list of intersecting [Area]s. The overlapping area's [member "
+"CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-"Gibt eine Liste der sich schneidenden [Area2D]s zurück. Aus Leistungsgründen "
-"(Kollisionen werden alle gleichzeitig verarbeitet) wird diese Liste einmal "
-"während des Physikschritts geändert, nicht sofort nach dem Verschieben von "
-"Objekten. Erwägen Sie stattdessen die Verwendung von Signalen."
+"Gibt eine Liste der sich schneidenden [PhysicsBody2D]s zurück. Aus "
+"Leistungsgründen (Kollisionen werden alle gleichzeitig verarbeitet) wird "
+"diese Liste einmal während des Physikschritts geändert, nicht sofort nach "
+"dem Verschieben von Objekten. Erwägen Sie stattdessen die Verwendung von "
+"Signalen."
-#: doc/classes/Area.xml:23
+#: doc/classes/Area.xml:24
#, fuzzy
msgid ""
-"Returns a list of intersecting [PhysicsBody]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody]s. The overlapping body's "
+"[member CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
"Gibt eine Liste der sich schneidenden [PhysicsBody2D]s zurück. Aus "
"Leistungsgründen (Kollisionen werden alle gleichzeitig verarbeitet) wird "
@@ -8029,7 +8099,7 @@ msgstr ""
"dem Verschieben von Objekten. Erwägen Sie stattdessen die Verwendung von "
"Signalen."
-#: doc/classes/Area.xml:30
+#: doc/classes/Area.xml:32
#, fuzzy
msgid ""
"If [code]true[/code], the given area overlaps the Area.\n"
@@ -8043,7 +8113,7 @@ msgstr ""
"Überlappungen einmal pro Frame und vor dem Physikschritt aktualisiert. "
"Erwägen Sie stattdessen die Verwendung von Signalen."
-#: doc/classes/Area.xml:38
+#: doc/classes/Area.xml:40
#, fuzzy
msgid ""
"If [code]true[/code], the given physics body overlaps the Area.\n"
@@ -8064,7 +8134,7 @@ msgstr ""
"registrieren sie ihre Kacheln mit Kollisionsformen als virtuellen "
"Physikkörper)."
-#: doc/classes/Area.xml:46
+#: doc/classes/Area.xml:48
#, fuzzy
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
@@ -8076,18 +8146,18 @@ msgstr ""
"den Winkelgeschwindigkeitsverlust pro Sekunde dar. Die Werte reichen von "
"[code]0[/code] (keine Dämpfung) bis [code]1[/code] (volle Dämpfung)."
-#: doc/classes/Area.xml:50 doc/classes/Area2D.xml:52
+#: doc/classes/Area.xml:52 doc/classes/Area2D.xml:54
msgid "The name of the area's audio bus."
msgstr "Der Name des Audiobusses des Bereichs."
-#: doc/classes/Area.xml:53 doc/classes/Area2D.xml:55
+#: doc/classes/Area.xml:55 doc/classes/Area2D.xml:57
msgid ""
"If [code]true[/code], the area's audio bus overrides the default audio bus."
msgstr ""
"Wenn [code]true[/code], hat der Audiobus des Bereichs Vorrang vor dem "
"Standard-Audiobus."
-#: doc/classes/Area.xml:56
+#: doc/classes/Area.xml:58
#, fuzzy
msgid ""
"The area's gravity intensity (in meters per second squared). This value "
@@ -8098,7 +8168,7 @@ msgstr ""
"Wert multipliziert den Schwerkraftvektor. Dies ist nützlich, um die "
"Schwerkraft zu ändern, ohne ihre Richtung zu ändern."
-#: doc/classes/Area.xml:59 doc/classes/Area2D.xml:61
+#: doc/classes/Area.xml:61 doc/classes/Area2D.xml:63
msgid ""
"The falloff factor for point gravity. The greater the value, the faster "
"gravity decreases with distance."
@@ -8106,7 +8176,7 @@ msgstr ""
"Der Falloff-Faktor für die Punktgravitation. Je größer der Wert, desto "
"schneller nimmt die Schwerkraft mit der Entfernung ab."
-#: doc/classes/Area.xml:62 doc/classes/Area2D.xml:64
+#: doc/classes/Area.xml:64 doc/classes/Area2D.xml:66
msgid ""
"If [code]true[/code], gravity is calculated from a point (set via [member "
"gravity_vec]). See also [member space_override]."
@@ -8114,7 +8184,7 @@ msgstr ""
"Wenn [code]true[/code], wird die Schwerkraft von einem Punkt aus berechnet "
"(eingestellt über [member gravity_vec]). Siehe auch [member space_override]."
-#: doc/classes/Area.xml:65 doc/classes/Area2D.xml:67
+#: doc/classes/Area.xml:67 doc/classes/Area2D.xml:69
msgid ""
"The area's gravity vector (not normalized). If gravity is a point (see "
"[member gravity_point]), this will be the point of attraction."
@@ -8122,7 +8192,7 @@ msgstr ""
"Der Gravitationsvektor der Fläche (nicht normiert). Wenn die Schwerkraft ein "
"Punkt ist (siehe [member gravity_point]), wird dies der Anziehungspunkt sein."
-#: doc/classes/Area.xml:68
+#: doc/classes/Area.xml:70
#, fuzzy
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
@@ -8134,13 +8204,13 @@ msgstr ""
"den linearen Geschwindigkeitsverlust pro Sekunde dar. Die Werte reichen von "
"[code]0[/code] (keine Dämpfung) bis [code]1[/code] (volle Dämpfung)."
-#: doc/classes/Area.xml:72 doc/classes/Area2D.xml:74
+#: doc/classes/Area.xml:74 doc/classes/Area2D.xml:76
msgid "If [code]true[/code], other monitoring areas can detect this area."
msgstr ""
"Wenn [code]true[/code], können andere Überwachungsbereiche diesen Bereich "
"erkennen."
-#: doc/classes/Area.xml:75 doc/classes/Area2D.xml:77
+#: doc/classes/Area.xml:77 doc/classes/Area2D.xml:79
msgid ""
"If [code]true[/code], the area detects bodies or areas entering and exiting "
"it."
@@ -8148,52 +8218,54 @@ msgstr ""
"If [code]true[/code], erkennt die area ob andere Körper oder area's ihn "
"betreten oder verlassen."
-#: doc/classes/Area.xml:78 doc/classes/Area2D.xml:80
+#: doc/classes/Area.xml:80 doc/classes/Area2D.xml:82
msgid "The area's priority. Higher priority areas are processed first."
msgstr ""
"Die Area Priorität. Area's mit höherer Priorität werden zuerst bearbeitet."
-#: doc/classes/Area.xml:81
+#: doc/classes/Area.xml:83
msgid ""
"The degree to which this area applies reverb to its associated audio. Ranges "
"from [code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
msgstr ""
-#: doc/classes/Area.xml:84
+#: doc/classes/Area.xml:86
msgid "If [code]true[/code], the area applies reverb to its associated audio."
msgstr ""
-#: doc/classes/Area.xml:87
+#: doc/classes/Area.xml:89
msgid "The reverb bus name to use for this area's associated audio."
msgstr ""
-#: doc/classes/Area.xml:90
+#: doc/classes/Area.xml:92
msgid ""
"The degree to which this area's reverb is a uniform effect. Ranges from "
"[code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
msgstr ""
-#: doc/classes/Area.xml:93 doc/classes/Area2D.xml:83
+#: doc/classes/Area.xml:95 doc/classes/Area2D.xml:85
msgid ""
"Override mode for gravity and damping calculations within this area. See "
"[enum SpaceOverride] for possible values."
msgstr ""
+"Überschreibungsmodus für Schwerkraft- und Dämpfungsberechnungen innerhalb "
+"dieses Bereichs. Siehe [enum SpaceOverride] für mögliche Werte."
-#: doc/classes/Area.xml:100
+#: doc/classes/Area.xml:102
msgid ""
"Emitted when another Area enters this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
-#: doc/classes/Area.xml:107
+#: doc/classes/Area.xml:109
msgid ""
"Emitted when another Area exits this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
-#: doc/classes/Area.xml:117 doc/classes/Area.xml:130
+#: doc/classes/Area.xml:119 doc/classes/Area.xml:132
msgid ""
"Emitted when one of another Area's [Shape]s enters one of this Area's "
"[Shape]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -8208,7 +8280,7 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:140
+#: doc/classes/Area.xml:142
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] enters this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -8217,7 +8289,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:147
+#: doc/classes/Area.xml:149
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] exits this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -8226,7 +8298,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:157 doc/classes/Area.xml:170
+#: doc/classes/Area.xml:159 doc/classes/Area.xml:172
msgid ""
"Emitted when one of a [PhysicsBody] or [GridMap]'s [Shape]s enters one of "
"this Area's [Shape]s. Requires [member monitoring] to be set to [code]true[/"
@@ -8243,29 +8315,29 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:180 doc/classes/Area2D.xml:170
+#: doc/classes/Area.xml:182 doc/classes/Area2D.xml:172
msgid "This area does not affect gravity/damping."
-msgstr "Diese Area hat keinen Einfluss auf die Gravitation oder die Dämpfung."
+msgstr "Diese Area hat keinen Einfluss auf die Gravitation/Dämpfung."
-#: doc/classes/Area.xml:183 doc/classes/Area2D.xml:173
+#: doc/classes/Area.xml:185 doc/classes/Area2D.xml:175
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order)."
msgstr ""
-#: doc/classes/Area.xml:186 doc/classes/Area2D.xml:176
+#: doc/classes/Area.xml:188 doc/classes/Area2D.xml:178
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order), ignoring any lower priority areas."
msgstr ""
-#: doc/classes/Area.xml:189 doc/classes/Area2D.xml:179
+#: doc/classes/Area.xml:191 doc/classes/Area2D.xml:181
msgid ""
"This area replaces any gravity/damping, even the defaults, ignoring any "
"lower priority areas."
msgstr ""
-#: doc/classes/Area.xml:192 doc/classes/Area2D.xml:182
+#: doc/classes/Area.xml:194 doc/classes/Area2D.xml:184
msgid ""
"This area replaces any gravity/damping calculated so far (in [member "
"priority] order), but keeps calculating the rest of the areas."
@@ -8308,23 +8380,29 @@ msgid "https://godotengine.org/asset-library/asset/120"
msgstr "https://docs.godotengine.org/de/latest/tutorials/vr/index.html"
#: doc/classes/Area2D.xml:19
+#, fuzzy
msgid ""
-"Returns a list of intersecting [Area2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [Area2D]s. The overlapping area's [member "
+"CollisionObject2D.collision_layer] must be part of this area's [member "
+"CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
"Gibt eine Liste der sich schneidenden [Area2D]s zurück. Aus Leistungsgründen "
"(Kollisionen werden alle gleichzeitig verarbeitet) wird diese Liste einmal "
"während des Physikschritts geändert, nicht sofort nach dem Verschieben von "
"Objekten. Erwägen Sie stattdessen die Verwendung von Signalen."
-#: doc/classes/Area2D.xml:25
+#: doc/classes/Area2D.xml:26
+#, fuzzy
msgid ""
-"Returns a list of intersecting [PhysicsBody2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody2D]s. The overlapping body's "
+"[member CollisionObject2D.collision_layer] must be part of this area's "
+"[member CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
"Gibt eine Liste der sich schneidenden [PhysicsBody2D]s zurück. Aus "
"Leistungsgründen (Kollisionen werden alle gleichzeitig verarbeitet) wird "
@@ -8332,7 +8410,7 @@ msgstr ""
"dem Verschieben von Objekten. Erwägen Sie stattdessen die Verwendung von "
"Signalen."
-#: doc/classes/Area2D.xml:32
+#: doc/classes/Area2D.xml:34
#, fuzzy
msgid ""
"If [code]true[/code], the given area overlaps the Area2D.\n"
@@ -8346,7 +8424,7 @@ msgstr ""
"Überlappungen einmal pro Frame und vor dem Physikschritt aktualisiert. "
"Erwägen Sie stattdessen die Verwendung von Signalen."
-#: doc/classes/Area2D.xml:40
+#: doc/classes/Area2D.xml:42
#, fuzzy
msgid ""
"If [code]true[/code], the given physics body overlaps the Area2D.\n"
@@ -8367,7 +8445,7 @@ msgstr ""
"registrieren sie ihre Kacheln mit Kollisionsformen als virtuellen "
"Physikkörper)."
-#: doc/classes/Area2D.xml:48
+#: doc/classes/Area2D.xml:50
#, fuzzy
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
@@ -8379,7 +8457,7 @@ msgstr ""
"den Winkelgeschwindigkeitsverlust pro Sekunde dar. Die Werte reichen von "
"[code]0[/code] (keine Dämpfung) bis [code]1[/code] (volle Dämpfung)."
-#: doc/classes/Area2D.xml:58
+#: doc/classes/Area2D.xml:60
#, fuzzy
msgid ""
"The area's gravity intensity (in pixels per second squared). This value "
@@ -8390,7 +8468,7 @@ msgstr ""
"Wert multipliziert den Schwerkraftvektor. Dies ist nützlich, um die "
"Schwerkraft zu ändern, ohne ihre Richtung zu ändern."
-#: doc/classes/Area2D.xml:70
+#: doc/classes/Area2D.xml:72
#, fuzzy
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
@@ -8402,21 +8480,21 @@ msgstr ""
"den linearen Geschwindigkeitsverlust pro Sekunde dar. Die Werte reichen von "
"[code]0[/code] (keine Dämpfung) bis [code]1[/code] (volle Dämpfung)."
-#: doc/classes/Area2D.xml:90
+#: doc/classes/Area2D.xml:92
msgid ""
"Emitted when another Area2D enters this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-#: doc/classes/Area2D.xml:97
+#: doc/classes/Area2D.xml:99
msgid ""
"Emitted when another Area2D exits this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-#: doc/classes/Area2D.xml:107
+#: doc/classes/Area2D.xml:109
msgid ""
"Emitted when one of another Area2D's [Shape2D]s enters one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -8431,7 +8509,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:120
+#: doc/classes/Area2D.xml:122
msgid ""
"Emitted when one of another Area2D's [Shape2D]s exits one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -8446,7 +8524,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:130
+#: doc/classes/Area2D.xml:132
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] enters this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -8455,7 +8533,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:137
+#: doc/classes/Area2D.xml:139
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] exits this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -8464,7 +8542,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:147
+#: doc/classes/Area2D.xml:149
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s enters one "
"of this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -8483,7 +8561,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:160
+#: doc/classes/Area2D.xml:162
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s exits one of "
"this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -12080,42 +12158,47 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
"https://docs.godotengine.org/de/latest/tutorials/3d/using_gridmaps.html"
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
-"no save path is provided it will try to match the path from the current "
+"no root node is provided, parent of this node will be used as root instead. "
+"If no save path is provided it will try to match the path from the current "
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -12129,63 +12212,63 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
#, fuzzy
msgid "The rotation of the baked custom sky."
msgstr "Der Name des Audiobusses des Bereichs."
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -12193,35 +12276,35 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -12229,13 +12312,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -12247,67 +12330,79 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr ""
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
#, fuzzy
msgid "Baking was successful."
msgstr "Die Verbindung war erfolgreich."
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr "zu Zeit ungenutzt."
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
#, fuzzy
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr "Gibt den Arkuskosinus2 der Parameter zurück."
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr ""
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:133
+#: doc/classes/BakedLightmap.xml:132
+msgid ""
+"Returns if lightmapper can't be created. Unless you are using a custom "
+"lightmapper, please report this as bug."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:135
+msgid ""
+"There is no root node to start baking from. Either provide [code]from_node[/"
+"code] argument or attach this node to a parent that should be used as root."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:136
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:139
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:142
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -12767,8 +12862,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -13156,26 +13254,33 @@ msgid "Text [Color] used when the [Button] is disabled."
msgstr ""
#: doc/classes/Button.xml:77
-msgid "Text [Color] used when the [Button] is being hovered."
+msgid ""
+"Text [Color] used when the [Button] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/Button.xml:80
-msgid "Text [Color] used when the [Button] is being pressed."
+msgid "Text [Color] used when the [Button] is being hovered."
msgstr ""
#: doc/classes/Button.xml:83
-msgid "[StyleBox] used when the [Button] is being hovered."
+msgid "Text [Color] used when the [Button] is being pressed."
msgstr ""
#: doc/classes/Button.xml:86
-msgid "The horizontal space between [Button]'s icon and text."
+msgid "[StyleBox] used when the [Button] is being hovered."
msgstr ""
#: doc/classes/Button.xml:89
-msgid "Default [StyleBox] for the [Button]."
+msgid "The horizontal space between [Button]'s icon and text."
msgstr ""
#: doc/classes/Button.xml:92
+msgid "Default [StyleBox] for the [Button]."
+msgstr ""
+
+#: doc/classes/Button.xml:95
msgid "[StyleBox] used when the [Button] is being pressed."
msgstr ""
@@ -14666,80 +14771,96 @@ msgstr ""
msgid "The check icon to display when the [CheckBox] is checked."
msgstr ""
-#: doc/classes/CheckBox.xml:30
+#: doc/classes/CheckBox.xml:28
+msgid "The check icon to display when the [CheckBox] is checked and disabled."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:31
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is disabled."
msgstr ""
-#: doc/classes/CheckBox.xml:33
+#: doc/classes/CheckBox.xml:34
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is focused."
msgstr ""
-#: doc/classes/CheckBox.xml:36
+#: doc/classes/CheckBox.xml:37
msgid "The [Font] to use for the [CheckBox] text."
msgstr ""
-#: doc/classes/CheckBox.xml:39
+#: doc/classes/CheckBox.xml:40
msgid "The [CheckBox] text's font color."
msgstr ""
-#: doc/classes/CheckBox.xml:42
+#: doc/classes/CheckBox.xml:43
msgid "The [CheckBox] text's font color when it's disabled."
msgstr ""
-#: doc/classes/CheckBox.xml:45
+#: doc/classes/CheckBox.xml:46
+msgid ""
+"The [CheckBox] text's font color when it's focused. Only replaces the normal "
+"text color of the checkbox. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:49
msgid "The [CheckBox] text's font color when it's hovered."
msgstr ""
-#: doc/classes/CheckBox.xml:48
+#: doc/classes/CheckBox.xml:52
msgid "The [CheckBox] text's font color when it's hovered and pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:51
+#: doc/classes/CheckBox.xml:55
msgid "The [CheckBox] text's font color when it's pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:54
+#: doc/classes/CheckBox.xml:58
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered."
msgstr ""
-#: doc/classes/CheckBox.xml:57
+#: doc/classes/CheckBox.xml:61
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered and "
"pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:60
+#: doc/classes/CheckBox.xml:64
msgid "The separation between the check icon and the text (in pixels)."
msgstr ""
-#: doc/classes/CheckBox.xml:63 doc/classes/CheckButton.xml:58
+#: doc/classes/CheckBox.xml:67 doc/classes/CheckButton.xml:61
msgid "The [StyleBox] to display as a background."
msgstr ""
-#: doc/classes/CheckBox.xml:66
+#: doc/classes/CheckBox.xml:70
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:69
+#: doc/classes/CheckBox.xml:73
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is checked."
msgstr ""
-#: doc/classes/CheckBox.xml:74
+#: doc/classes/CheckBox.xml:78
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is unchecked."
msgstr ""
-#: doc/classes/CheckBox.xml:79
+#: doc/classes/CheckBox.xml:83
msgid "The check icon to display when the [CheckBox] is unchecked."
msgstr ""
+#: doc/classes/CheckBox.xml:86
+msgid ""
+"The check icon to display when the [CheckBox] is unchecked and disabled."
+msgstr ""
+
#: doc/classes/CheckButton.xml:4
msgid "Checkable button. See also [CheckBox]."
msgstr ""
@@ -14783,49 +14904,56 @@ msgid "The [CheckButton] text's font color when it's disabled."
msgstr ""
#: doc/classes/CheckButton.xml:40
-msgid "The [CheckButton] text's font color when it's hovered."
+msgid ""
+"The [CheckButton] text's font color when it's focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/CheckButton.xml:43
-msgid "The [CheckButton] text's font color when it's hovered and pressed."
+msgid "The [CheckButton] text's font color when it's hovered."
msgstr ""
#: doc/classes/CheckButton.xml:46
-msgid "The [CheckButton] text's font color when it's pressed."
+msgid "The [CheckButton] text's font color when it's hovered and pressed."
msgstr ""
#: doc/classes/CheckButton.xml:49
+msgid "The [CheckButton] text's font color when it's pressed."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:52
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered."
msgstr ""
-#: doc/classes/CheckButton.xml:52
+#: doc/classes/CheckButton.xml:55
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered "
"and pressed."
msgstr ""
-#: doc/classes/CheckButton.xml:55
+#: doc/classes/CheckButton.xml:58
msgid "The separation between the toggle icon and the text (in pixels)."
msgstr ""
-#: doc/classes/CheckButton.xml:61
+#: doc/classes/CheckButton.xml:64
msgid "The icon to display when the [CheckButton] is unchecked."
msgstr ""
-#: doc/classes/CheckButton.xml:64
+#: doc/classes/CheckButton.xml:67
msgid "The icon to display when the [CheckButton] is unchecked and disabled."
msgstr ""
-#: doc/classes/CheckButton.xml:67
+#: doc/classes/CheckButton.xml:70
msgid "The icon to display when the [CheckButton] is checked."
msgstr ""
-#: doc/classes/CheckButton.xml:70
+#: doc/classes/CheckButton.xml:73
msgid "The icon to display when the [CheckButton] is checked and disabled."
msgstr ""
-#: doc/classes/CheckButton.xml:73
+#: doc/classes/CheckButton.xml:76
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is pressed."
msgstr ""
@@ -14843,7 +14971,7 @@ msgstr ""
#: doc/classes/CircleShape2D.xml:15
msgid "The circle's radius."
-msgstr "Radius des Kreises"
+msgstr "Radius des Kreises."
#: doc/classes/ClassDB.xml:4
msgid "Class information repository."
@@ -15826,50 +15954,60 @@ msgstr ""
msgid ""
"The color's alpha (transparency) component, typically on the range of 0 to 1."
msgstr ""
+"Die Alpha-Komponente (Transparenz) der Farbe, normalerweise im Bereich von 0 "
+"bis 1."
#: doc/classes/Color.xml:245
msgid "Wrapper for [member a] that uses the range 0 to 255 instead of 0 to 1."
msgstr ""
+"Wrapper für [member a], der den Bereich 0 bis 255 anstelle von 0 bis 1 "
+"verwendet."
#: doc/classes/Color.xml:248
msgid "The color's blue component, typically on the range of 0 to 1."
-msgstr ""
+msgstr "Der Blauanteil der Farbe, normalerweise im Bereich von 0 bis 1."
#: doc/classes/Color.xml:251
msgid "Wrapper for [member b] that uses the range 0 to 255 instead of 0 to 1."
msgstr ""
+"Wrapper für [member b], der den Bereich 0 bis 255 anstelle von 0 bis 1 "
+"verwendet."
#: doc/classes/Color.xml:254
msgid "The color's green component, typically on the range of 0 to 1."
-msgstr ""
+msgstr "Der Grünanteil der Farbe, normalerweise im Bereich von 0 bis 1."
#: doc/classes/Color.xml:257
msgid "Wrapper for [member g] that uses the range 0 to 255 instead of 0 to 1."
msgstr ""
+"Wrapper für [member g], der den Bereich 0 bis 255 anstelle von 0 bis 1 "
+"verwendet."
#: doc/classes/Color.xml:260
msgid "The HSV hue of this color, on the range 0 to 1."
-msgstr ""
+msgstr "Der HSV-Farbton dieser Farbe, im Bereich von 0 bis 1."
#: doc/classes/Color.xml:263
msgid "The color's red component, typically on the range of 0 to 1."
-msgstr ""
+msgstr "Der Rotanteil der Farbe, normalerweise im Bereich von 0 bis 1."
#: doc/classes/Color.xml:266
msgid "Wrapper for [member r] that uses the range 0 to 255 instead of 0 to 1."
msgstr ""
+"Wrapper für [member r], der den Bereich 0 bis 255 anstelle von 0 bis 1 "
+"verwendet."
#: doc/classes/Color.xml:269
msgid "The HSV saturation of this color, on the range 0 to 1."
-msgstr ""
+msgstr "Die HSV-Sättigung dieser Farbe, im Bereich von 0 bis 1."
#: doc/classes/Color.xml:272
msgid "The HSV value (brightness) of this color, on the range 0 to 1."
-msgstr ""
+msgstr "Der HSV-Wert (Helligkeit) dieser Farbe, im Bereich von 0 bis 1."
#: doc/classes/Color.xml:277
msgid "Alice blue color."
-msgstr ""
+msgstr "Aliceblau Farbe."
#: doc/classes/Color.xml:280
msgid "Antique white color."
@@ -15877,7 +16015,7 @@ msgstr ""
#: doc/classes/Color.xml:283
msgid "Aqua color."
-msgstr "Farbe Aqua."
+msgstr "Aqua Farbe."
#: doc/classes/Color.xml:286
msgid "Aquamarine color."
@@ -15897,563 +16035,563 @@ msgstr "Biskuit Farbe."
#: doc/classes/Color.xml:298
msgid "Black color."
-msgstr ""
+msgstr "Schwarze Farbe."
#: doc/classes/Color.xml:301
msgid "Blanche almond color."
-msgstr ""
+msgstr "Blanche Mandel Farbe."
#: doc/classes/Color.xml:304
msgid "Blue color."
-msgstr ""
+msgstr "Blaue Farbe."
#: doc/classes/Color.xml:307
msgid "Blue violet color."
-msgstr ""
+msgstr "Blauviolette Farbe."
#: doc/classes/Color.xml:310
msgid "Brown color."
-msgstr ""
+msgstr "Braune Farbe."
#: doc/classes/Color.xml:313
msgid "Burly wood color."
-msgstr ""
+msgstr "Kräftige Holzfarbe."
#: doc/classes/Color.xml:316
msgid "Cadet blue color."
-msgstr ""
+msgstr "Kadettblaue Farbe."
#: doc/classes/Color.xml:319
msgid "Chartreuse color."
-msgstr ""
+msgstr "Chartreuse Farbe."
#: doc/classes/Color.xml:322
msgid "Chocolate color."
-msgstr ""
+msgstr "Schokolade Farbe."
#: doc/classes/Color.xml:325
msgid "Coral color."
-msgstr ""
+msgstr "Korallenrote Farbe."
#: doc/classes/Color.xml:328
msgid "Cornflower color."
-msgstr ""
+msgstr "Kornblumenblaue Farbe."
#: doc/classes/Color.xml:331
msgid "Corn silk color."
-msgstr ""
+msgstr "Maisseide Farbe."
#: doc/classes/Color.xml:334
msgid "Crimson color."
-msgstr ""
+msgstr "Karminrote Farbe."
#: doc/classes/Color.xml:337
msgid "Cyan color."
-msgstr ""
+msgstr "Cyan Farbe."
#: doc/classes/Color.xml:340
msgid "Dark blue color."
-msgstr "Dunkelblaue Farbe"
+msgstr "Dunkelblaue Farbe."
#: doc/classes/Color.xml:343
msgid "Dark cyan color."
-msgstr ""
+msgstr "Dunkelcyan Farben."
#: doc/classes/Color.xml:346
msgid "Dark goldenrod color."
-msgstr ""
+msgstr "Dunkle goldgelbe Farbe."
#: doc/classes/Color.xml:349
msgid "Dark gray color."
-msgstr "Dunkelgraue Farbe"
+msgstr "Dunkelgraue Farbe."
#: doc/classes/Color.xml:352
msgid "Dark green color."
-msgstr "Dunkelgrüne Farbe"
+msgstr "Dunkelgrüne Farbe."
#: doc/classes/Color.xml:355
msgid "Dark khaki color."
-msgstr ""
+msgstr "Dunkel Khaki Farbe."
#: doc/classes/Color.xml:358
msgid "Dark magenta color."
-msgstr ""
+msgstr "Dunkle Magenta Farbe."
#: doc/classes/Color.xml:361
msgid "Dark olive green color."
-msgstr ""
+msgstr "Dunkle olivgrüne Farbe."
#: doc/classes/Color.xml:364
msgid "Dark orange color."
-msgstr ""
+msgstr "Dunkelorange Farbe."
#: doc/classes/Color.xml:367
msgid "Dark orchid color."
-msgstr ""
+msgstr "Dunkle Orchidee Farbe."
#: doc/classes/Color.xml:370
msgid "Dark red color."
-msgstr ""
+msgstr "Dunkelrote Farbe."
#: doc/classes/Color.xml:373
msgid "Dark salmon color."
-msgstr ""
+msgstr "Dunkle lachsfarbene Farbe."
#: doc/classes/Color.xml:376
msgid "Dark sea green color."
-msgstr ""
+msgstr "Dunkle meergrüne Farbe."
#: doc/classes/Color.xml:379
msgid "Dark slate blue color."
-msgstr ""
+msgstr "Dunkle schieferblaue Farbe."
#: doc/classes/Color.xml:382
msgid "Dark slate gray color."
-msgstr ""
+msgstr "Dunkle schiefergraue Farbe."
#: doc/classes/Color.xml:385
msgid "Dark turquoise color."
-msgstr ""
+msgstr "Dunkeltürkise Farbe."
#: doc/classes/Color.xml:388
msgid "Dark violet color."
-msgstr ""
+msgstr "Dunkelviolette Farbe."
#: doc/classes/Color.xml:391
msgid "Deep pink color."
-msgstr ""
+msgstr "Tiefrosa Farbe."
#: doc/classes/Color.xml:394
msgid "Deep sky blue color."
-msgstr ""
+msgstr "Tiefe himmelblaue Farbe."
#: doc/classes/Color.xml:397
msgid "Dim gray color."
-msgstr ""
+msgstr "Gedämpfte graue Farbe."
#: doc/classes/Color.xml:400
msgid "Dodger blue color."
-msgstr ""
+msgstr "Dodgerblaue Farbe."
#: doc/classes/Color.xml:403
msgid "Firebrick color."
-msgstr ""
+msgstr "Feuerstein Farbe."
#: doc/classes/Color.xml:406
msgid "Floral white color."
-msgstr ""
+msgstr "Florale weiße Farbe."
#: doc/classes/Color.xml:409
msgid "Forest green color."
-msgstr ""
+msgstr "Waldgrüne Farbe."
#: doc/classes/Color.xml:412
msgid "Fuchsia color."
-msgstr ""
+msgstr "Fuchsia Farbe."
#: doc/classes/Color.xml:415
msgid "Gainsboro color."
-msgstr ""
+msgstr "Gainsboro Farbe."
#: doc/classes/Color.xml:418
msgid "Ghost white color."
-msgstr ""
+msgstr "Geisterweiße Farbe."
#: doc/classes/Color.xml:421
msgid "Gold color."
-msgstr ""
+msgstr "Goldene Farbe."
#: doc/classes/Color.xml:424
msgid "Goldenrod color."
-msgstr ""
+msgstr "Goldrute Farbe."
#: doc/classes/Color.xml:427
msgid "Gray color."
-msgstr ""
+msgstr "Graue Farbe."
#: doc/classes/Color.xml:430
msgid "Green color."
-msgstr ""
+msgstr "Grüne Farbe."
#: doc/classes/Color.xml:433
msgid "Green yellow color."
-msgstr ""
+msgstr "Grün-gelbe Farbe."
#: doc/classes/Color.xml:436
msgid "Honeydew color."
-msgstr ""
+msgstr "Honigtau Farbe."
#: doc/classes/Color.xml:439
msgid "Hot pink color."
-msgstr ""
+msgstr "Heiße rosa Farbe."
#: doc/classes/Color.xml:442
msgid "Indian red color."
-msgstr ""
+msgstr "Indisch rote Farbe."
#: doc/classes/Color.xml:445
msgid "Indigo color."
-msgstr ""
+msgstr "Indigo Farbe."
#: doc/classes/Color.xml:448
msgid "Ivory color."
-msgstr ""
+msgstr "Elfenbein Farbe."
#: doc/classes/Color.xml:451
msgid "Khaki color."
-msgstr ""
+msgstr "Khaki Farbe."
#: doc/classes/Color.xml:454
msgid "Lavender color."
-msgstr ""
+msgstr "Lavendel Farbe."
#: doc/classes/Color.xml:457
msgid "Lavender blush color."
-msgstr ""
+msgstr "Lavendelrote Farbe."
#: doc/classes/Color.xml:460
msgid "Lawn green color."
-msgstr ""
+msgstr "Rasengrüne Farbe."
#: doc/classes/Color.xml:463
msgid "Lemon chiffon color."
-msgstr ""
+msgstr "Zitrone Chiffon Farbe."
#: doc/classes/Color.xml:466
msgid "Light blue color."
-msgstr ""
+msgstr "Hellblaue Farbe."
#: doc/classes/Color.xml:469
msgid "Light coral color."
-msgstr ""
+msgstr "Helle korallenrote Farbe."
#: doc/classes/Color.xml:472
msgid "Light cyan color."
-msgstr ""
+msgstr "Helle Cyan Farbe."
#: doc/classes/Color.xml:475
msgid "Light goldenrod color."
-msgstr ""
+msgstr "Helle Goldrute Farbe."
#: doc/classes/Color.xml:478
msgid "Light gray color."
-msgstr ""
+msgstr "Hellgraue Farbe."
#: doc/classes/Color.xml:481
msgid "Light green color."
-msgstr ""
+msgstr "Hellgrüne Farbe."
#: doc/classes/Color.xml:484
msgid "Light pink color."
-msgstr ""
+msgstr "Hellrosa Farbe."
#: doc/classes/Color.xml:487
msgid "Light salmon color."
-msgstr ""
+msgstr "Helle lachsfarbene Farbe."
#: doc/classes/Color.xml:490
msgid "Light sea green color."
-msgstr ""
+msgstr "Helle meergrüne Farbe."
#: doc/classes/Color.xml:493
msgid "Light sky blue color."
-msgstr ""
+msgstr "Helle himmelblaue Farbe."
#: doc/classes/Color.xml:496
msgid "Light slate gray color."
-msgstr ""
+msgstr "Helle schiefergraue Farbe."
#: doc/classes/Color.xml:499
msgid "Light steel blue color."
-msgstr ""
+msgstr "Helle stahlblaue Farbe."
#: doc/classes/Color.xml:502
msgid "Light yellow color."
-msgstr ""
+msgstr "Hellgelbe Farbe."
#: doc/classes/Color.xml:505
msgid "Lime color."
-msgstr ""
+msgstr "Limette Farbe."
#: doc/classes/Color.xml:508
msgid "Lime green color."
-msgstr ""
+msgstr "Limonengrüne Farbe."
#: doc/classes/Color.xml:511
msgid "Linen color."
-msgstr ""
+msgstr "Leinen Farbe."
#: doc/classes/Color.xml:514
msgid "Magenta color."
-msgstr ""
+msgstr "Magenta Farbe."
#: doc/classes/Color.xml:517
msgid "Maroon color."
-msgstr ""
+msgstr "Kastanienbraune Farbe."
#: doc/classes/Color.xml:520
msgid "Medium aquamarine color."
-msgstr ""
+msgstr "Mittlere Aquamarin Farbe."
#: doc/classes/Color.xml:523
msgid "Medium blue color."
-msgstr ""
+msgstr "Mittelblaue Farbe."
#: doc/classes/Color.xml:526
msgid "Medium orchid color."
-msgstr ""
+msgstr "Mittlere Orchideen Farbe."
#: doc/classes/Color.xml:529
msgid "Medium purple color."
-msgstr ""
+msgstr "Mittlere violette Farbe."
#: doc/classes/Color.xml:532
msgid "Medium sea green color."
-msgstr ""
+msgstr "Mittlere meergrüne Farbe."
#: doc/classes/Color.xml:535
msgid "Medium slate blue color."
-msgstr ""
+msgstr "Mittlere schieferblaue Farbe."
#: doc/classes/Color.xml:538
msgid "Medium spring green color."
-msgstr ""
+msgstr "Mittlere frühlingsgrüne Farbe."
#: doc/classes/Color.xml:541
msgid "Medium turquoise color."
-msgstr ""
+msgstr "Mittlere türkise Farbe."
#: doc/classes/Color.xml:544
msgid "Medium violet red color."
-msgstr ""
+msgstr "Mittlere violettrote Farbe."
#: doc/classes/Color.xml:547
msgid "Midnight blue color."
-msgstr ""
+msgstr "Mitternachtsblaue Farbe."
#: doc/classes/Color.xml:550
msgid "Mint cream color."
-msgstr ""
+msgstr "Mint-Creme Farbe."
#: doc/classes/Color.xml:553
msgid "Misty rose color."
-msgstr ""
+msgstr "Neblige rosa Farbe."
#: doc/classes/Color.xml:556
msgid "Moccasin color."
-msgstr ""
+msgstr "Mokassin Farbe."
#: doc/classes/Color.xml:559
msgid "Navajo white color."
-msgstr ""
+msgstr "Navajo weiße Farbe."
#: doc/classes/Color.xml:562
msgid "Navy blue color."
-msgstr ""
+msgstr "Marineblaue Farbe."
#: doc/classes/Color.xml:565
msgid "Old lace color."
-msgstr ""
+msgstr "Alte Spitze Farbe."
#: doc/classes/Color.xml:568
msgid "Olive color."
-msgstr ""
+msgstr "Olive Farbe."
#: doc/classes/Color.xml:571
msgid "Olive drab color."
-msgstr ""
+msgstr "Olivgrüne Farbe."
#: doc/classes/Color.xml:574
msgid "Orange color."
-msgstr ""
+msgstr "Orange Farbe."
#: doc/classes/Color.xml:577
msgid "Orange red color."
-msgstr ""
+msgstr "Orangerote Farbe."
#: doc/classes/Color.xml:580
msgid "Orchid color."
-msgstr ""
+msgstr "Orchidee Farbe."
#: doc/classes/Color.xml:583
msgid "Pale goldenrod color."
-msgstr ""
+msgstr "Blasse Goldrute Farbe."
#: doc/classes/Color.xml:586
msgid "Pale green color."
-msgstr ""
+msgstr "Blassgrüne Farbe."
#: doc/classes/Color.xml:589
msgid "Pale turquoise color."
-msgstr ""
+msgstr "Blasse türkise Farbe."
#: doc/classes/Color.xml:592
msgid "Pale violet red color."
-msgstr ""
+msgstr "Blass violettrote Farbe."
#: doc/classes/Color.xml:595
msgid "Papaya whip color."
-msgstr ""
+msgstr "Papaya-Peitsche Farbe."
#: doc/classes/Color.xml:598
msgid "Peach puff color."
-msgstr ""
+msgstr "Pfirsich Puff Farbe."
#: doc/classes/Color.xml:601
msgid "Peru color."
-msgstr ""
+msgstr "Peru Farbe."
#: doc/classes/Color.xml:604
msgid "Pink color."
-msgstr ""
+msgstr "Rosa Farbe."
#: doc/classes/Color.xml:607
msgid "Plum color."
-msgstr ""
+msgstr "Pflaume Farbe."
#: doc/classes/Color.xml:610
msgid "Powder blue color."
-msgstr ""
+msgstr "Pulverblaue Farbe."
#: doc/classes/Color.xml:613
msgid "Purple color."
-msgstr ""
+msgstr "Violette Farbe."
#: doc/classes/Color.xml:616
msgid "Rebecca purple color."
-msgstr ""
+msgstr "Rebecca violette Farbe."
#: doc/classes/Color.xml:619
msgid "Red color."
-msgstr ""
+msgstr "Rote Farbe."
#: doc/classes/Color.xml:622
msgid "Rosy brown color."
-msgstr ""
+msgstr "Rosigbraune Farbe."
#: doc/classes/Color.xml:625
msgid "Royal blue color."
-msgstr ""
+msgstr "Königsblaue Farbe."
#: doc/classes/Color.xml:628
msgid "Saddle brown color."
-msgstr ""
+msgstr "Sattelbraune Farbe."
#: doc/classes/Color.xml:631
msgid "Salmon color."
-msgstr ""
+msgstr "Lachsfarbige Farbe."
#: doc/classes/Color.xml:634
msgid "Sandy brown color."
-msgstr ""
+msgstr "Sandige braune Farbe."
#: doc/classes/Color.xml:637
msgid "Sea green color."
-msgstr ""
+msgstr "Meeresgrüne Farbe."
#: doc/classes/Color.xml:640
msgid "Seashell color."
-msgstr ""
+msgstr "Muschel Farbe."
#: doc/classes/Color.xml:643
msgid "Sienna color."
-msgstr ""
+msgstr "Siena Farbe."
#: doc/classes/Color.xml:646
msgid "Silver color."
-msgstr ""
+msgstr "Silberne Farbe."
#: doc/classes/Color.xml:649
msgid "Sky blue color."
-msgstr ""
+msgstr "Himmelblaue Farbe."
#: doc/classes/Color.xml:652
msgid "Slate blue color."
-msgstr ""
+msgstr "Schieferblaue Farbe."
#: doc/classes/Color.xml:655
msgid "Slate gray color."
-msgstr ""
+msgstr "Schiefergraue Farbe."
#: doc/classes/Color.xml:658
msgid "Snow color."
-msgstr ""
+msgstr "Schnee Farbe."
#: doc/classes/Color.xml:661
msgid "Spring green color."
-msgstr ""
+msgstr "Frühlingsgrüne Farbe."
#: doc/classes/Color.xml:664
msgid "Steel blue color."
-msgstr ""
+msgstr "Stahlblaue Farbe."
#: doc/classes/Color.xml:667
msgid "Tan color."
-msgstr ""
+msgstr "Hellbraune Farbe."
#: doc/classes/Color.xml:670
msgid "Teal color."
-msgstr ""
+msgstr "Blaugrüne Farbe."
#: doc/classes/Color.xml:673
msgid "Thistle color."
-msgstr ""
+msgstr "Distel Farbe."
#: doc/classes/Color.xml:676
msgid "Tomato color."
-msgstr ""
+msgstr "Tomaten Farbe."
#: doc/classes/Color.xml:679
msgid "Transparent color (white with no alpha)."
-msgstr ""
+msgstr "Transparente Farbe (weiß ohne Alpha)."
#: doc/classes/Color.xml:682
msgid "Turquoise color."
-msgstr ""
+msgstr "Türkise Farbe."
#: doc/classes/Color.xml:685
msgid "Violet color."
-msgstr ""
+msgstr "Violette Farbe."
#: doc/classes/Color.xml:688
msgid "Web gray color."
-msgstr ""
+msgstr "Web graue Farbe."
#: doc/classes/Color.xml:691
msgid "Web green color."
-msgstr ""
+msgstr "Web grüne Farbe."
#: doc/classes/Color.xml:694
msgid "Web maroon color."
-msgstr ""
+msgstr "Web kastanienbraune Farbe."
#: doc/classes/Color.xml:697
msgid "Web purple color."
-msgstr ""
+msgstr "Web violette Farbe."
#: doc/classes/Color.xml:700
msgid "Wheat color."
-msgstr ""
+msgstr "Weizen Farbe."
#: doc/classes/Color.xml:703
msgid "White color."
-msgstr ""
+msgstr "Weiße Farbe."
#: doc/classes/Color.xml:706
msgid "White smoke color."
-msgstr ""
+msgstr "Rauchweiße Farbe."
#: doc/classes/Color.xml:709
msgid "Yellow color."
-msgstr ""
+msgstr "Gelbe Farbe."
#: doc/classes/Color.xml:712
msgid "Yellow green color."
-msgstr ""
+msgstr "Gelbgrüne Farbe."
#: doc/classes/ColorPicker.xml:4
msgid "Color picker control."
-msgstr ""
+msgstr "Farbauswahl-Steuerung."
#: doc/classes/ColorPicker.xml:7
msgid ""
@@ -16463,6 +16601,12 @@ msgid ""
"[ColorPickerButton] instead if you need a button that brings up a "
"[ColorPicker] in a pop-up."
msgstr ""
+"Zeigt ein Element zur Farbauswahl an. Nützlich für die Auswahl einer Farbe "
+"aus einem RGB/RGBA-Farbraum.\n"
+"[b]Hinweis:[/b] Dieses Steuerelement ist das Farbwähler-Element selbst. Sie "
+"können stattdessen einen [ColorPickerButton] verwenden, wenn Sie eine "
+"Schaltfläche benötigen, die einen [ColorPicker] in einem Popup-Fenster "
+"aufruft."
#: doc/classes/ColorPicker.xml:18
msgid ""
@@ -16470,19 +16614,25 @@ msgid ""
"in the color picker and the user will be able to select them.\n"
"[b]Note:[/b] The presets list is only for [i]this[/i] color picker."
msgstr ""
+"Fügt die angegebene Farbe zu einer Liste von Farbvorlagen hinzu. Die "
+"Vorlagen werden in der Farbauswahl angezeigt und der Benutzer kann sie "
+"auswählen.\n"
+"[b]Hinweis:[/b] Die Liste der Vorlagen gilt nur für [i]diesen[/i] Farbwähler."
#: doc/classes/ColorPicker.xml:26
msgid ""
"Removes the given color from the list of color presets of this color picker."
msgstr ""
+"Entfernt die angegebene Farbe aus der Liste der Farbvorlagen für diesen "
+"Farbwähler."
#: doc/classes/ColorPicker.xml:32
msgid "Returns the list of colors in the presets of the color picker."
-msgstr ""
+msgstr "Gibt die Liste der Farben in den Vorlagen des Farbwählers zurück."
#: doc/classes/ColorPicker.xml:38 doc/classes/ColorPickerButton.xml:33
msgid "The currently selected color."
-msgstr ""
+msgstr "Die aktuell ausgewählte Farbe."
#: doc/classes/ColorPicker.xml:41
msgid ""
@@ -16490,10 +16640,15 @@ msgid ""
"mouse button, otherwise it will apply immediately even in mouse motion event "
"(which can cause performance issues)."
msgstr ""
+"Wenn [code]true[/code], wird die Farbe erst angewendet, wenn der Benutzer "
+"die Maustaste loslässt, andernfalls wird sie auch bei Mausbewegungen sofort "
+"angewendet (was zu Leistungsproblemen führen kann)."
#: doc/classes/ColorPicker.xml:44
msgid "If [code]true[/code], shows an alpha channel slider (transparency)."
msgstr ""
+"Wenn [code]true[/code], wird ein Alphakanal-Schieberegler (Transparenz) "
+"angezeigt."
#: doc/classes/ColorPicker.xml:47
msgid ""
@@ -16501,14 +16656,20 @@ msgid ""
"sliders.\n"
"[b]Note:[/b] Cannot be enabled if raw mode is on."
msgstr ""
+"Wenn [code]true[/code], kann die Farbe mit den Schiebereglern Farbton/"
+"Sättigung/Wert bearbeitet werden.\n"
+"[b]Hinweis:[/b] Kann nicht aktiviert werden, wenn der Raw-Modus aktiviert "
+"ist."
#: doc/classes/ColorPicker.xml:51
msgid "If [code]true[/code], the \"add preset\" button is enabled."
msgstr ""
+"Wenn [code]true[/code], ist die Schaltfläche \"Vorlage hinzufügen\" "
+"aktiviert."
#: doc/classes/ColorPicker.xml:54
msgid "If [code]true[/code], saved color presets are visible."
-msgstr ""
+msgstr "Wenn [code]true[/code], sind gespeicherte Farbvorlagen sichtbar."
#: doc/classes/ColorPicker.xml:57
msgid ""
@@ -16517,56 +16678,66 @@ msgid ""
"tinting without darkening or rendering sprites in HDR).\n"
"[b]Note:[/b] Cannot be enabled if HSV mode is on."
msgstr ""
+"Wenn [code]true[/code], können die Farbwerte der R, G, B Komponenten über "
+"1.0 hinausgehen, was für bestimmte spezielle Operationen, die dies "
+"erfordern, verwendet werden kann (z. B. Abtönen ohne Abdunkeln oder Rendern "
+"von Sprites in HDR).\n"
+"[b]Hinweis:[/b] Kann nicht aktiviert werden, wenn der HSV-Modus aktiviert "
+"ist."
#: doc/classes/ColorPicker.xml:65
msgid "Emitted when the color is changed."
-msgstr ""
+msgstr "Wird ausgegeben, wenn die Farbe geändert wird."
#: doc/classes/ColorPicker.xml:71
msgid "Emitted when a preset is added."
-msgstr ""
+msgstr "Wird ausgegeben, wenn eine Vorlage hinzugefügt wird."
#: doc/classes/ColorPicker.xml:77
msgid "Emitted when a preset is removed."
-msgstr ""
+msgstr "Wird ausgegeben, wenn eine Vorlage entfernt wird."
#: doc/classes/ColorPicker.xml:85
msgid "The icon for the \"Add Preset\" button."
-msgstr ""
+msgstr "Das Symbol für die Schaltfläche \" Vorlage hinzufügen\"."
#: doc/classes/ColorPicker.xml:88
msgid "Custom texture for the hue selection slider on the right."
msgstr ""
+"Benutzerdefinierte Textur für den Schieberegler zur Farbauswahl auf der "
+"rechten Seite."
#: doc/classes/ColorPicker.xml:93
msgid "The width of the hue selection slider."
-msgstr ""
+msgstr "Die Breite des Schiebereglers für die Farbauswahl."
#: doc/classes/ColorPicker.xml:98
msgid "The margin around the [ColorPicker]."
-msgstr ""
+msgstr "Der Rand um den [ColorPicker]."
#: doc/classes/ColorPicker.xml:101
msgid ""
"The indicator used to signalize that the color value is outside the 0-1 "
"range."
msgstr ""
+"Der Indikator, der signalisiert, dass der Farbwert außerhalb des Bereichs "
+"0-1 liegt."
#: doc/classes/ColorPicker.xml:106
msgid "The icon for the screen color picker button."
-msgstr ""
+msgstr "Das Symbol für die Schaltfläche des Bildschirmfarbwählers."
#: doc/classes/ColorPicker.xml:109
msgid "The height of the saturation-value selection box."
-msgstr ""
+msgstr "Die Höhe des Auswahlfeldes für den Sättigungswert."
#: doc/classes/ColorPicker.xml:112
msgid "The width of the saturation-value selection box."
-msgstr ""
+msgstr "Die Breite des Auswahlfeldes für den Sättigungswert."
#: doc/classes/ColorPickerButton.xml:4
msgid "Button that pops out a [ColorPicker]."
-msgstr ""
+msgstr "Schaltfläche, die einen [ColorPicker] erscheinen lässt."
#: doc/classes/ColorPickerButton.xml:7
msgid ""
@@ -16578,6 +16749,15 @@ msgid ""
"preview swatch to be visible. Make sure to set [member Control."
"rect_min_size] to a big enough value to give the button enough space."
msgstr ""
+"Verkapselt einen [ColorPicker] und macht ihn durch Drücken einer "
+"Schaltfläche zugänglich. Durch Drücken der Schaltfläche wird die "
+"Sichtbarkeit des [ColorPicker] umgeschaltet.\n"
+"Siehe auch [BaseButton], das allgemeine Eigenschaften und Methoden im "
+"Zusammenhang mit diesem Node enthält.\n"
+"[b]Hinweis:[/b] Standardmäßig ist die Schaltfläche möglicherweise nicht "
+"breit genug, damit das Farbvorschaumuster sichtbar ist. Achte darauf, "
+"[member Control.rect_min_size] auf einen ausreichend großen Wert zu setzen, "
+"damit die Schaltfläche genügend Platz hat."
#: doc/classes/ColorPickerButton.xml:19
msgid ""
@@ -16586,6 +16766,11 @@ msgid ""
"may cause a crash. If you wish to hide it or any of its children, use their "
"[member CanvasItem.visible] property."
msgstr ""
+"Gibt den [ColorPicker] aus, den dieser Node umschaltet.\n"
+"[b]Warnung:[/b] Dies ist ein erforderlicher interner Node, sein Entfernen "
+"und Freigeben kann zu einem Absturz führen. Wenn Sie ihn oder eines seiner "
+"Kinder ausblenden möchten, verwenden Sie deren Eigenschaft [member "
+"CanvasItem.visible]."
#: doc/classes/ColorPickerButton.xml:26
msgid ""
@@ -16596,26 +16781,37 @@ msgid ""
"may cause a crash. If you wish to hide it or any of its children, use their "
"[member CanvasItem.visible] property."
msgstr ""
+"Gibt das [PopupPanel] des Steuerelements aus, mit dem Sie eine Verbindung zu "
+"Popup-Signalen herstellen können. So können Sie Ereignisse handhaben, wenn "
+"der Farbwähler angezeigt oder ausgeblendet wird.\n"
+"[b]Warnung:[/b] Dies ist ein erforderlicher interner Node, sein Entfernen "
+"und Freigeben kann zu einem Absturz führen. Wenn Sie ihn oder eines seiner "
+"Kinder ausblenden möchten, verwenden Sie deren Eigenschaft [member "
+"CanvasItem.visible]."
#: doc/classes/ColorPickerButton.xml:36
msgid ""
"If [code]true[/code], the alpha channel in the displayed [ColorPicker] will "
"be visible."
msgstr ""
+"Wenn [code]true[/code], wird der Alphakanal im angezeigten [ColorPicker] "
+"sichtbar sein."
#: doc/classes/ColorPickerButton.xml:44
msgid "Emitted when the color changes."
-msgstr ""
+msgstr "Wird ausgegeben, wenn sich die Farbe ändert."
#: doc/classes/ColorPickerButton.xml:49
msgid ""
"Emitted when the [ColorPicker] is created (the button is pressed for the "
"first time)."
msgstr ""
+"Wird ausgegeben, wenn der [ColorPicker] erstellt wird (wenn die Schaltfläche "
+"zum ersten Mal gedrückt wird)."
#: doc/classes/ColorPickerButton.xml:54
msgid "Emitted when the [ColorPicker] is closed."
-msgstr ""
+msgstr "Wird ausgegeben, wenn der [ColorPicker] geschlossen wird."
#: doc/classes/ColorPickerButton.xml:62
msgid "The background of the color preview rect on the button."
@@ -16645,26 +16841,33 @@ msgid "Text [Color] used when the [ColorPickerButton] is disabled."
msgstr ""
#: doc/classes/ColorPickerButton.xml:80
-msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
+msgid ""
+"Text [Color] used when the [ColorPickerButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/ColorPickerButton.xml:83
-msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
+msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
msgstr ""
#: doc/classes/ColorPickerButton.xml:86
-msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
+msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
msgstr ""
#: doc/classes/ColorPickerButton.xml:89
-msgid "The horizontal space between [ColorPickerButton]'s icon and text."
+msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
msgstr ""
#: doc/classes/ColorPickerButton.xml:92
-msgid "Default [StyleBox] for the [ColorPickerButton]."
+msgid "The horizontal space between [ColorPickerButton]'s icon and text."
msgstr ""
#: doc/classes/ColorPickerButton.xml:95
+msgid "Default [StyleBox] for the [ColorPickerButton]."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:98
msgid "[StyleBox] used when the [ColorPickerButton] is being pressed."
msgstr ""
@@ -21938,7 +22141,8 @@ msgid ""
"get_resource_type]. They may optionally specify some import presets that "
"affect the import process. EditorImportPlugins are responsible for creating "
"the resources and saving them in the [code].import[/code] directory (see "
-"[member ProjectSettings.application/config/project_data_dir_name]).\n"
+"[member ProjectSettings.application/config/"
+"use_hidden_project_data_directory]).\n"
"Below is an example EditorImportPlugin that imports a [Mesh] from a file "
"with the extension \".special\" or \".spec\":\n"
"[codeblock]\n"
@@ -22065,7 +22269,7 @@ msgstr ""
msgid ""
"Gets the extension used to save this resource in the [code].import[/code] "
"directory (see [member ProjectSettings.application/config/"
-"project_data_dir_name])."
+"use_hidden_project_data_directory])."
msgstr ""
#: doc/classes/EditorImportPlugin.xml:130
@@ -23107,8 +23311,11 @@ msgstr ""
msgid "Emitted when the value of the edited resource was changed."
msgstr "Gesendet wenn das Rechteck Element geändert wurde."
-#: doc/classes/EditorResourcePicker.xml:89
-msgid "Emitted when the resource value was set and user clicked to edit it."
+#: doc/classes/EditorResourcePicker.xml:90
+msgid ""
+"Emitted when the resource value was set and user clicked to edit it. When "
+"[code]edit[/code] is [code]true[/code], the signal was caused by the context "
+"menu \"Edit\" option."
msgstr ""
#: doc/classes/EditorResourcePreview.xml:4
@@ -26874,21 +27081,32 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr "https://docs.godotengine.org/de/latest/tutorials/3d/gi_probes.html"
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -26897,14 +27115,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -26914,36 +27136,36 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
#, fuzzy
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
@@ -26951,46 +27173,46 @@ msgstr ""
"Wenn [code]true[/code], wird die Sub-Animation nach Beendigung automatisch "
"neu gestartet."
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
msgstr ""
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr ""
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -29779,16 +30001,18 @@ msgstr ""
#: doc/classes/Image.xml:436
msgid ""
"OpenGL texture format [code]RED[/code] with a single component and a "
-"bitdepth of 8."
+"bitdepth of 8.\n"
+"[b]Note:[/b] When using the GLES2 backend, this uses the alpha channel "
+"instead of the red channel for storage."
msgstr ""
-#: doc/classes/Image.xml:439
+#: doc/classes/Image.xml:440
msgid ""
"OpenGL texture format [code]RG[/code] with two components and a bitdepth of "
"8 for each."
msgstr ""
-#: doc/classes/Image.xml:442
+#: doc/classes/Image.xml:443
msgid ""
"OpenGL texture format [code]RGB[/code] with three components, each with a "
"bitdepth of 8.\n"
@@ -29796,7 +30020,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:446
+#: doc/classes/Image.xml:447
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 8.\n"
@@ -29804,73 +30028,73 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:450
+#: doc/classes/Image.xml:451
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 4."
msgstr ""
-#: doc/classes/Image.xml:453
+#: doc/classes/Image.xml:454
msgid ""
"OpenGL texture format [code]GL_RGB5_A1[/code] where 5 bits of depth for each "
"component of RGB and one bit for alpha."
msgstr ""
-#: doc/classes/Image.xml:456
+#: doc/classes/Image.xml:457
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 32-"
"bit floating-point value."
msgstr ""
-#: doc/classes/Image.xml:459
+#: doc/classes/Image.xml:460
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:462
+#: doc/classes/Image.xml:463
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:465
+#: doc/classes/Image.xml:466
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:468
+#: doc/classes/Image.xml:469
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 16-"
"bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:471
+#: doc/classes/Image.xml:472
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:474
+#: doc/classes/Image.xml:475
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:477
+#: doc/classes/Image.xml:478
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:480
+#: doc/classes/Image.xml:481
msgid ""
"A special OpenGL texture format where the three color components have 9 bits "
"of precision and all three share a single 5-bit exponent."
msgstr ""
-#: doc/classes/Image.xml:483
+#: doc/classes/Image.xml:484
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 1, and is the smallest variation "
@@ -29880,7 +30104,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:487
+#: doc/classes/Image.xml:488
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 2, and color data is interpreted "
@@ -29890,7 +30114,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:491
+#: doc/classes/Image.xml:492
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format also known as Block Compression 3 or BC3 that contains 64 "
@@ -29901,7 +30125,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:495
+#: doc/classes/Image.xml:496
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -29909,7 +30133,7 @@ msgid ""
"DXT5 uses for the alpha channel."
msgstr ""
-#: doc/classes/Image.xml:498
+#: doc/classes/Image.xml:499
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -29917,7 +30141,7 @@ msgid ""
"algorithm that DXT5 uses for the alpha channel."
msgstr ""
-#: doc/classes/Image.xml:501
+#: doc/classes/Image.xml:502
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned normalized "
@@ -29926,21 +30150,21 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:505
+#: doc/classes/Image.xml:506
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with signed floating-point "
"RGB components."
msgstr ""
-#: doc/classes/Image.xml:508
+#: doc/classes/Image.xml:509
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned floating-point "
"RGB components."
msgstr ""
-#: doc/classes/Image.xml:511
+#: doc/classes/Image.xml:512
msgid ""
"Texture format used on PowerVR-supported mobile platforms, uses 2-bit color "
"depth with no alpha. More information can be found [url=https://en.wikipedia."
@@ -29949,25 +30173,25 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:515
+#: doc/classes/Image.xml:516
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with an "
"alpha component."
msgstr ""
-#: doc/classes/Image.xml:518
+#: doc/classes/Image.xml:519
msgid ""
"Similar to [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with 4-"
"bit color depth and no alpha."
msgstr ""
-#: doc/classes/Image.xml:521
+#: doc/classes/Image.xml:522
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC4[/url], but with an "
"alpha component."
msgstr ""
-#: doc/classes/Image.xml:524
+#: doc/classes/Image.xml:525
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC1]Ericsson Texture Compression format 1[/"
@@ -29975,7 +30199,7 @@ msgid ""
"standard. This format cannot store an alpha channel."
msgstr ""
-#: doc/classes/Image.xml:527
+#: doc/classes/Image.xml:528
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -29983,7 +30207,7 @@ msgid ""
"unsigned data."
msgstr ""
-#: doc/classes/Image.xml:530
+#: doc/classes/Image.xml:531
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -29991,7 +30215,7 @@ msgid ""
"channel of signed data."
msgstr ""
-#: doc/classes/Image.xml:533
+#: doc/classes/Image.xml:534
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -29999,7 +30223,7 @@ msgid ""
"of unsigned data."
msgstr ""
-#: doc/classes/Image.xml:536
+#: doc/classes/Image.xml:537
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -30007,7 +30231,7 @@ msgid ""
"channels of signed data."
msgstr ""
-#: doc/classes/Image.xml:539
+#: doc/classes/Image.xml:540
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -30017,7 +30241,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:543
+#: doc/classes/Image.xml:544
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -30027,7 +30251,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:547
+#: doc/classes/Image.xml:548
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -30038,31 +30262,31 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:551
+#: doc/classes/Image.xml:552
msgid "Represents the size of the [enum Format] enum."
msgstr ""
-#: doc/classes/Image.xml:554
+#: doc/classes/Image.xml:555
msgid ""
"Performs nearest-neighbor interpolation. If the image is resized, it will be "
"pixelated."
msgstr ""
-#: doc/classes/Image.xml:557
+#: doc/classes/Image.xml:558
msgid ""
"Performs bilinear interpolation. If the image is resized, it will be blurry. "
"This mode is faster than [constant INTERPOLATE_CUBIC], but it results in "
"lower quality."
msgstr ""
-#: doc/classes/Image.xml:560
+#: doc/classes/Image.xml:561
msgid ""
"Performs cubic interpolation. If the image is resized, it will be blurry. "
"This mode often gives better results compared to [constant "
"INTERPOLATE_BILINEAR], at the cost of being slower."
msgstr ""
-#: doc/classes/Image.xml:563
+#: doc/classes/Image.xml:564
msgid ""
"Performs bilinear separately on the two most-suited mipmap levels, then "
"linearly interpolates between them.\n"
@@ -30077,55 +30301,55 @@ msgid ""
"a new set will be generated for the resulting image."
msgstr ""
-#: doc/classes/Image.xml:570
+#: doc/classes/Image.xml:571
msgid ""
"Performs Lanczos interpolation. This is the slowest image resizing mode, but "
"it typically gives the best results, especially when downscalng images."
msgstr ""
-#: doc/classes/Image.xml:573
+#: doc/classes/Image.xml:574
msgid "Image does not have alpha."
msgstr ""
-#: doc/classes/Image.xml:576
+#: doc/classes/Image.xml:577
msgid "Image stores alpha in a single bit."
msgstr ""
-#: doc/classes/Image.xml:579
+#: doc/classes/Image.xml:580
msgid "Image uses alpha."
msgstr ""
-#: doc/classes/Image.xml:582
+#: doc/classes/Image.xml:583
msgid "Use S3TC compression."
msgstr ""
-#: doc/classes/Image.xml:585
+#: doc/classes/Image.xml:586
msgid "Use PVRTC2 compression."
msgstr ""
-#: doc/classes/Image.xml:588
+#: doc/classes/Image.xml:589
msgid "Use PVRTC4 compression."
msgstr ""
-#: doc/classes/Image.xml:591
+#: doc/classes/Image.xml:592
msgid "Use ETC compression."
msgstr ""
-#: doc/classes/Image.xml:594
+#: doc/classes/Image.xml:595
msgid "Use ETC2 compression."
msgstr ""
-#: doc/classes/Image.xml:597
+#: doc/classes/Image.xml:598
msgid ""
"Source texture (before compression) is a regular texture. Default for all "
"textures."
msgstr ""
-#: doc/classes/Image.xml:600
+#: doc/classes/Image.xml:601
msgid "Source texture (before compression) is in sRGB space."
msgstr ""
-#: doc/classes/Image.xml:603
+#: doc/classes/Image.xml:604
msgid ""
"Source texture (before compression) is a normal texture (e.g. it can be "
"compressed into two channels)."
@@ -30351,6 +30575,17 @@ msgstr ""
#: doc/classes/Input.xml:43
msgid ""
+"Sends all input events which are in the current buffer to the game loop. "
+"These events may have been buffered as a result of accumulated input "
+"([method set_use_accumulated_input]) or agile input flushing ([member "
+"ProjectSettings.input_devices/buffering/agile_event_flushing]).\n"
+"The engine will already do this itself at key execution points (at least "
+"once per frame). However, this can be useful in advanced cases where you "
+"want precise control over the timing of event handling."
+msgstr ""
+
+#: doc/classes/Input.xml:50
+msgid ""
"Returns the acceleration of the device's accelerometer sensor, if the device "
"has one. Otherwise, the method returns [constant Vector3.ZERO].\n"
"Note this method returns an empty [Vector3] when running from the editor "
@@ -30362,7 +30597,7 @@ msgid ""
"the Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:53
+#: doc/classes/Input.xml:60
msgid ""
"Returns a value between 0 and 1 representing the raw intensity of the given "
"action, ignoring the action's deadzone. In most cases, you should use "
@@ -30372,7 +30607,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:62
+#: doc/classes/Input.xml:69
msgid ""
"Returns a value between 0 and 1 representing the intensity of the given "
"action. In a joypad, for example, the further away the axis (analog sticks "
@@ -30384,7 +30619,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:71
+#: doc/classes/Input.xml:78
msgid ""
"Get axis input by specifying two actions, one negative and one positive.\n"
"This is a shorthand for writing [code]Input."
@@ -30392,17 +30627,17 @@ msgid ""
"get_action_strength(\"negative_action\")[/code]."
msgstr ""
-#: doc/classes/Input.xml:78
+#: doc/classes/Input.xml:85
msgid ""
"Returns an [Array] containing the device IDs of all currently connected "
"joypads."
msgstr ""
-#: doc/classes/Input.xml:84
+#: doc/classes/Input.xml:91
msgid "Returns the currently assigned cursor shape (see [enum CursorShape])."
msgstr ""
-#: doc/classes/Input.xml:90
+#: doc/classes/Input.xml:97
msgid ""
"Returns the gravity of the device's accelerometer sensor, if the device has "
"one. Otherwise, the method returns [constant Vector3.ZERO].\n"
@@ -30412,7 +30647,7 @@ msgid ""
"Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:97
+#: doc/classes/Input.xml:104
msgid ""
"Returns the rotation rate in rad/s around a device's X, Y, and Z axes of the "
"gyroscope sensor, if the device has one. Otherwise, the method returns "
@@ -30421,53 +30656,53 @@ msgid ""
"it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:106
+#: doc/classes/Input.xml:113
msgid ""
"Returns the current value of the joypad axis at given index (see [enum "
"JoystickList])."
msgstr ""
-#: doc/classes/Input.xml:113
+#: doc/classes/Input.xml:120
msgid "Returns the index of the provided axis name."
msgstr ""
-#: doc/classes/Input.xml:120
+#: doc/classes/Input.xml:127
msgid ""
"Receives a [enum JoystickList] axis and returns its equivalent name as a "
"string."
msgstr ""
-#: doc/classes/Input.xml:127
+#: doc/classes/Input.xml:134
msgid "Returns the index of the provided button name."
msgstr ""
-#: doc/classes/Input.xml:134
+#: doc/classes/Input.xml:141
msgid ""
"Receives a gamepad button from [enum JoystickList] and returns its "
"equivalent name as a string."
msgstr ""
-#: doc/classes/Input.xml:141
+#: doc/classes/Input.xml:148
msgid ""
"Returns a SDL2-compatible device GUID on platforms that use gamepad "
"remapping. Returns [code]\"Default Gamepad\"[/code] otherwise."
msgstr ""
-#: doc/classes/Input.xml:148
+#: doc/classes/Input.xml:155
msgid "Returns the name of the joypad at the specified device index."
msgstr ""
-#: doc/classes/Input.xml:155
+#: doc/classes/Input.xml:162
msgid "Returns the duration of the current vibration effect in seconds."
msgstr ""
-#: doc/classes/Input.xml:162
+#: doc/classes/Input.xml:169
msgid ""
"Returns the strength of the joypad vibration: x is the strength of the weak "
"motor, and y is the strength of the strong motor."
msgstr ""
-#: doc/classes/Input.xml:168
+#: doc/classes/Input.xml:175
msgid ""
"Returns the mouse speed for the last time the cursor was moved, and this "
"until the next frame where the mouse moves. This means that even if the "
@@ -30475,7 +30710,7 @@ msgid ""
"motion."
msgstr ""
-#: doc/classes/Input.xml:174
+#: doc/classes/Input.xml:181
msgid ""
"Returns the magnetic field strength in micro-Tesla for all axes of the "
"device's magnetometer sensor, if the device has one. Otherwise, the method "
@@ -30484,17 +30719,17 @@ msgid ""
"platforms, it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:181
+#: doc/classes/Input.xml:188
msgid ""
"Returns mouse buttons as a bitmask. If multiple mouse buttons are pressed at "
"the same time, the bits are added together."
msgstr ""
-#: doc/classes/Input.xml:187
+#: doc/classes/Input.xml:194
msgid "Returns the mouse mode. See the constants for more information."
msgstr ""
-#: doc/classes/Input.xml:198
+#: doc/classes/Input.xml:205
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -30507,7 +30742,7 @@ msgid ""
"want (on the range of 0 to 1)."
msgstr ""
-#: doc/classes/Input.xml:208
+#: doc/classes/Input.xml:215
msgid ""
"Returns [code]true[/code] when the user starts pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user pressed down "
@@ -30519,7 +30754,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:218
+#: doc/classes/Input.xml:225
msgid ""
"Returns [code]true[/code] when the user stops pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user released the "
@@ -30529,7 +30764,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:227
+#: doc/classes/Input.xml:234
msgid ""
"Returns [code]true[/code] if you are pressing the action event. Note that if "
"an action has multiple buttons assigned and more than one of them is "
@@ -30540,7 +30775,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:236
+#: doc/classes/Input.xml:243
#, fuzzy
msgid ""
"Returns [code]true[/code] if you are pressing the joypad button (see [enum "
@@ -30549,7 +30784,7 @@ msgstr ""
"Gibt [code]true[/code] zurück, wenn ein Übergang zwischen den übergebenen "
"Nodes existiert."
-#: doc/classes/Input.xml:243
+#: doc/classes/Input.xml:250
msgid ""
"Returns [code]true[/code] if the system knows the specified device. This "
"means that it sets all button and axis indices exactly as defined in [enum "
@@ -30557,20 +30792,20 @@ msgid ""
"but you can still retrieve events from them."
msgstr ""
-#: doc/classes/Input.xml:250
+#: doc/classes/Input.xml:257
#, fuzzy
msgid ""
"Returns [code]true[/code] if you are pressing the key. You can pass a [enum "
"KeyList] constant."
msgstr "Gibt [code]true[/code] zurück, wenn eine Animation abgespielt wird."
-#: doc/classes/Input.xml:257
+#: doc/classes/Input.xml:264
msgid ""
"Returns [code]true[/code] if you are pressing the mouse button specified "
"with [enum ButtonList]."
msgstr ""
-#: doc/classes/Input.xml:267
+#: doc/classes/Input.xml:274
msgid ""
"Notifies the [Input] singleton that a connection has changed, to update the "
"state for the [code]device[/code] index.\n"
@@ -30579,7 +30814,7 @@ msgid ""
"triggered internally."
msgstr ""
-#: doc/classes/Input.xml:275
+#: doc/classes/Input.xml:282
msgid ""
"Feeds an [InputEvent] to the game. Can be used to artificially trigger input "
"events from code. Also generates [method Node._input] calls.\n"
@@ -30592,12 +30827,21 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Input.xml:289
+#: doc/classes/Input.xml:296
msgid ""
"Removes all mappings from the internal database that match the given GUID."
msgstr ""
-#: doc/classes/Input.xml:298
+#: doc/classes/Input.xml:303
+msgid ""
+"Sets the acceleration value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:313
msgid ""
"Sets a custom mouse cursor image, which is only visible inside the game "
"window. The hotspot can also be specified. Passing [code]null[/code] to the "
@@ -30612,7 +30856,7 @@ msgid ""
"compression mode can't be used for custom cursors."
msgstr ""
-#: doc/classes/Input.xml:309
+#: doc/classes/Input.xml:324
msgid ""
"Sets the default cursor shape to be used in the viewport instead of "
"[constant CURSOR_ARROW].\n"
@@ -30622,11 +30866,38 @@ msgid ""
"cursor immediately."
msgstr ""
-#: doc/classes/Input.xml:318
+#: doc/classes/Input.xml:333
+msgid ""
+"Sets the gravity value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:341
+msgid ""
+"Sets the value of the rotation rate of the gyroscope sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:349
+msgid ""
+"Sets the value of the magnetic field of the magnetometer sensor. Can be used "
+"for debugging on devices without a hardware sensor, for example in an editor "
+"on a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:357
msgid "Sets the mouse mode. See the constants for more information."
msgstr ""
-#: doc/classes/Input.xml:325
+#: doc/classes/Input.xml:364
msgid ""
"Enables or disables the accumulation of similar input events sent by the "
"operating system. When input accumulation is enabled, all input events "
@@ -30640,7 +30911,7 @@ msgid ""
"results that closely follow the actual input."
msgstr ""
-#: doc/classes/Input.xml:336
+#: doc/classes/Input.xml:375
msgid ""
"Starts to vibrate the joypad. Joypads usually come with two rumble motors, a "
"strong and a weak one. [code]weak_magnitude[/code] is the strength of the "
@@ -30653,34 +30924,34 @@ msgid ""
"few seconds."
msgstr ""
-#: doc/classes/Input.xml:344
+#: doc/classes/Input.xml:383
msgid "Stops the vibration of the joypad."
msgstr ""
-#: doc/classes/Input.xml:351
+#: doc/classes/Input.xml:390
msgid ""
"Vibrate Android and iOS devices.\n"
"[b]Note:[/b] It needs [code]VIBRATE[/code] permission for Android at export "
"settings. iOS does not support duration."
msgstr ""
-#: doc/classes/Input.xml:359
+#: doc/classes/Input.xml:398
msgid "Sets the mouse position to the specified vector."
msgstr ""
-#: doc/classes/Input.xml:368
+#: doc/classes/Input.xml:407
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
-#: doc/classes/Input.xml:374
+#: doc/classes/Input.xml:413
msgid "Makes the mouse cursor visible if it is hidden."
msgstr ""
-#: doc/classes/Input.xml:377
+#: doc/classes/Input.xml:416
msgid "Makes the mouse cursor hidden if it is visible."
msgstr ""
-#: doc/classes/Input.xml:380
+#: doc/classes/Input.xml:419
msgid ""
"Captures the mouse. The mouse will be hidden and its position locked at the "
"center of the screen.\n"
@@ -30688,83 +30959,83 @@ msgid ""
"need to use [member InputEventMouseMotion.relative]."
msgstr ""
-#: doc/classes/Input.xml:384
+#: doc/classes/Input.xml:423
msgid "Makes the mouse cursor visible but confines it to the game window."
msgstr ""
-#: doc/classes/Input.xml:387
+#: doc/classes/Input.xml:426
msgid "Arrow cursor. Standard, default pointing cursor."
msgstr ""
-#: doc/classes/Input.xml:390
+#: doc/classes/Input.xml:429
msgid ""
"I-beam cursor. Usually used to show where the text cursor will appear when "
"the mouse is clicked."
msgstr ""
-#: doc/classes/Input.xml:393
+#: doc/classes/Input.xml:432
msgid ""
"Pointing hand cursor. Usually used to indicate the pointer is over a link or "
"other interactable item."
msgstr ""
-#: doc/classes/Input.xml:396
+#: doc/classes/Input.xml:435
msgid ""
"Cross cursor. Typically appears over regions in which a drawing operation "
"can be performed or for selections."
msgstr ""
-#: doc/classes/Input.xml:399
+#: doc/classes/Input.xml:438
msgid ""
"Wait cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application is still usable during the "
"operation."
msgstr ""
-#: doc/classes/Input.xml:402
+#: doc/classes/Input.xml:441
msgid ""
"Busy cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application isn't usable during the "
"operation (e.g. something is blocking its main thread)."
msgstr ""
-#: doc/classes/Input.xml:405
+#: doc/classes/Input.xml:444
msgid "Drag cursor. Usually displayed when dragging something."
msgstr ""
-#: doc/classes/Input.xml:408
+#: doc/classes/Input.xml:447
msgid ""
"Can drop cursor. Usually displayed when dragging something to indicate that "
"it can be dropped at the current position."
msgstr ""
-#: doc/classes/Input.xml:411
+#: doc/classes/Input.xml:450
msgid ""
"Forbidden cursor. Indicates that the current action is forbidden (for "
"example, when dragging something) or that the control at a position is "
"disabled."
msgstr ""
-#: doc/classes/Input.xml:414
+#: doc/classes/Input.xml:453
msgid ""
"Vertical resize mouse cursor. A double-headed vertical arrow. It tells the "
"user they can resize the window or the panel vertically."
msgstr ""
-#: doc/classes/Input.xml:417
+#: doc/classes/Input.xml:456
msgid ""
"Horizontal resize mouse cursor. A double-headed horizontal arrow. It tells "
"the user they can resize the window or the panel horizontally."
msgstr ""
-#: doc/classes/Input.xml:420
+#: doc/classes/Input.xml:459
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the bottom left to the top right. It tells the user they can resize the "
"window or the panel both horizontally and vertically."
msgstr ""
-#: doc/classes/Input.xml:423
+#: doc/classes/Input.xml:462
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the top left to the bottom right, the opposite of [constant "
@@ -30772,23 +31043,23 @@ msgid ""
"both horizontally and vertically."
msgstr ""
-#: doc/classes/Input.xml:426
+#: doc/classes/Input.xml:465
msgid "Move cursor. Indicates that something can be moved."
msgstr ""
-#: doc/classes/Input.xml:429
+#: doc/classes/Input.xml:468
msgid ""
"Vertical split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_VSIZE]."
msgstr ""
-#: doc/classes/Input.xml:432
+#: doc/classes/Input.xml:471
msgid ""
"Horizontal split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_HSIZE]."
msgstr ""
-#: doc/classes/Input.xml:435
+#: doc/classes/Input.xml:474
msgid "Help cursor. Usually a question mark."
msgstr ""
@@ -31204,7 +31475,9 @@ msgid "The drag position."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -32524,7 +32797,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -32589,22 +32863,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -32619,7 +32895,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -32627,19 +32903,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -32710,7 +32986,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -32768,7 +33045,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -34058,14 +34337,21 @@ msgid "Default text [Color] of the [LinkButton]."
msgstr ""
#: doc/classes/LinkButton.xml:46
-msgid "Text [Color] used when the [LinkButton] is being hovered."
+msgid ""
+"Text [Color] used when the [LinkButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/LinkButton.xml:49
-msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgid "Text [Color] used when the [LinkButton] is being hovered."
msgstr ""
#: doc/classes/LinkButton.xml:52
+msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:55
msgid "The vertical space between the baseline of text and the underline."
msgstr ""
@@ -34560,26 +34846,33 @@ msgid "Text [Color] used when the [MenuButton] is disabled."
msgstr ""
#: doc/classes/MenuButton.xml:64
-msgid "Text [Color] used when the [MenuButton] is being hovered."
+msgid ""
+"Text [Color] used when the [MenuButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/MenuButton.xml:67
-msgid "Text [Color] used when the [MenuButton] is being pressed."
+msgid "Text [Color] used when the [MenuButton] is being hovered."
msgstr ""
#: doc/classes/MenuButton.xml:70
-msgid "[StyleBox] used when the [MenuButton] is being hovered."
+msgid "Text [Color] used when the [MenuButton] is being pressed."
msgstr ""
#: doc/classes/MenuButton.xml:73
-msgid "The horizontal space between [MenuButton]'s icon and text."
+msgid "[StyleBox] used when the [MenuButton] is being hovered."
msgstr ""
#: doc/classes/MenuButton.xml:76
-msgid "Default [StyleBox] for the [MenuButton]."
+msgid "The horizontal space between [MenuButton]'s icon and text."
msgstr ""
#: doc/classes/MenuButton.xml:79
+msgid "Default [StyleBox] for the [MenuButton]."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:82
msgid "[StyleBox] used when the [MenuButton] is being pressed."
msgstr ""
@@ -36328,7 +36621,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -39215,26 +39508,33 @@ msgid "Text [Color] used when the [OptionButton] is disabled."
msgstr ""
#: doc/classes/OptionButton.xml:212
-msgid "Text [Color] used when the [OptionButton] is being hovered."
+msgid ""
+"Text [Color] used when the [OptionButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/OptionButton.xml:215
-msgid "Text [Color] used when the [OptionButton] is being pressed."
+msgid "Text [Color] used when the [OptionButton] is being hovered."
msgstr ""
#: doc/classes/OptionButton.xml:218
-msgid "[StyleBox] used when the [OptionButton] is being hovered."
+msgid "Text [Color] used when the [OptionButton] is being pressed."
msgstr ""
#: doc/classes/OptionButton.xml:221
-msgid "The horizontal space between [OptionButton]'s icon and text."
+msgid "[StyleBox] used when the [OptionButton] is being hovered."
msgstr ""
#: doc/classes/OptionButton.xml:224
-msgid "Default [StyleBox] for the [OptionButton]."
+msgid "The horizontal space between [OptionButton]'s icon and text."
msgstr ""
#: doc/classes/OptionButton.xml:227
+msgid "Default [StyleBox] for the [OptionButton]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:230
msgid "[StyleBox] used when the [OptionButton] is being pressed."
msgstr ""
@@ -39643,7 +39943,7 @@ msgstr "Gibt die Anzahl der Punkte im Überblendungsbereich zurück."
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -39673,14 +39973,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -39690,7 +39990,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -42220,17 +42520,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -42248,11 +42574,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -42447,9 +42773,10 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-#, fuzzy
-msgid "Returns the [Physics2DDirectBodyState] of the body."
-msgstr "Gibt die Größe des Arrays zurück."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
+msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
msgid ""
@@ -43251,6 +43578,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -43268,7 +43613,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -43382,9 +43727,10 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-#, fuzzy
-msgid "Returns the [PhysicsDirectBodyState] of the body."
-msgstr "Gibt die Größe des Arrays zurück."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
+msgstr ""
#: doc/classes/PhysicsServer.xml:370
msgid ""
@@ -44381,30 +44727,31 @@ msgstr ""
msgid "Removes an element from the array by index."
msgstr "Entfernt das Element der Arrays dessen Position übergeben wurde."
-#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolColorArray.xml:66
-#: doc/classes/PoolIntArray.xml:67 doc/classes/PoolRealArray.xml:67
-#: doc/classes/PoolStringArray.xml:74 doc/classes/PoolVector2Array.xml:67
-#: doc/classes/PoolVector3Array.xml:66
+#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolIntArray.xml:67
+#: doc/classes/PoolRealArray.xml:67
+#, fuzzy
msgid ""
"Sets the size of the array. If the array is grown, reserves elements at the "
"end of the array. If the array is shrunk, truncates the array to the new "
-"size."
+"size.\n"
+"[b]Note:[/b] Added elements are not automatically initialized to 0 and will "
+"contain garbage, i.e. indeterminate values."
msgstr ""
"Legt die Größe des Arrays fest. Sollte das Array dadurch wachsen, werden "
"neue Elemente am Ende des Arrays reserviert. Sollte es schrumpfen, werden "
"Elemente am Ende entsprechend weggeschnitten."
-#: doc/classes/PoolByteArray.xml:121
+#: doc/classes/PoolByteArray.xml:122
msgid "Changes the byte at the given index."
msgstr ""
-#: doc/classes/PoolByteArray.xml:127 doc/classes/PoolColorArray.xml:79
-#: doc/classes/PoolRealArray.xml:80 doc/classes/PoolStringArray.xml:87
+#: doc/classes/PoolByteArray.xml:128 doc/classes/PoolColorArray.xml:79
+#: doc/classes/PoolRealArray.xml:81 doc/classes/PoolStringArray.xml:87
#: doc/classes/PoolVector2Array.xml:80 doc/classes/PoolVector3Array.xml:79
msgid "Returns the size of the array."
msgstr "Gibt die Größe des Arrays zurück."
-#: doc/classes/PoolByteArray.xml:135
+#: doc/classes/PoolByteArray.xml:136
msgid ""
"Returns the slice of the [PoolByteArray] between indices (inclusive) as a "
"new [PoolByteArray]. Any negative index is considered to be from the end of "
@@ -44446,6 +44793,17 @@ msgstr "Hängt ein [PackedVector2Array] am Ende dieses Arrays an."
msgid "Appends a value to the array."
msgstr ""
+#: doc/classes/PoolColorArray.xml:66 doc/classes/PoolStringArray.xml:74
+#: doc/classes/PoolVector2Array.xml:67 doc/classes/PoolVector3Array.xml:66
+msgid ""
+"Sets the size of the array. If the array is grown, reserves elements at the "
+"end of the array. If the array is shrunk, truncates the array to the new "
+"size."
+msgstr ""
+"Legt die Größe des Arrays fest. Sollte das Array dadurch wachsen, werden "
+"neue Elemente am Ende des Arrays reserviert. Sollte es schrumpfen, werden "
+"Elemente am Ende entsprechend weggeschnitten."
+
#: doc/classes/PoolColorArray.xml:73
msgid "Changes the [Color] at the given index."
msgstr ""
@@ -44490,12 +44848,12 @@ msgstr ""
"Fügt ein neues Element an der übergebenen Position ein. Die Position muss "
"innerhalb des Arrays oder eins dahinter liegen([code]index == size()[/code])."
-#: doc/classes/PoolIntArray.xml:74
+#: doc/classes/PoolIntArray.xml:75
#, fuzzy
msgid "Changes the int at the given index."
msgstr "Ändert den [Vector2] am übergeben Index."
-#: doc/classes/PoolIntArray.xml:80
+#: doc/classes/PoolIntArray.xml:81
msgid "Returns the array size."
msgstr ""
@@ -44532,7 +44890,7 @@ msgstr ""
msgid "Appends a [PoolRealArray] at the end of this array."
msgstr "Hängt ein [PackedVector2Array] am Ende dieses Arrays an."
-#: doc/classes/PoolRealArray.xml:74
+#: doc/classes/PoolRealArray.xml:75
msgid "Changes the float at the given index."
msgstr ""
@@ -45843,18 +46201,6 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:204
msgid ""
-"The project data directory is used for storing project-specific data "
-"(metadata, shader cache, etc.).\n"
-"[b]Note:[/b] Restart the application after changing this setting.\n"
-"[b]Note:[/b] Changing this value can help on platforms or with third-party "
-"tools where specific directory patterns are disallowed. Only modify this "
-"setting if you know that your environment requires it, as changing the "
-"default can impact compatibility with some external tools or plugins which "
-"expect the default [code].import[/code] folder."
-msgstr ""
-
-#: doc/classes/ProjectSettings.xml:209
-msgid ""
"Specifies a file to override project settings. For example: [code]user://"
"custom_settings.cfg[/code]. See \"Overriding\" in the [ProjectSettings] "
"class description at the top for more information.\n"
@@ -45862,7 +46208,7 @@ msgid ""
"code] will still be read to override the project settings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:213
+#: doc/classes/ProjectSettings.xml:208
msgid ""
"If [code]true[/code], the project will save user data to its own user "
"directory (see [member application/config/custom_user_dir_name]). This "
@@ -45872,13 +46218,28 @@ msgid ""
"user data directory)/Godot/app_userdata/(project name)[/code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:216
+#: doc/classes/ProjectSettings.xml:211
+msgid ""
+"If [code]true[/code], the project will use a hidden directory ([code]."
+"import[/code]) for storing project-specific data (metadata, shader cache, "
+"etc.).\n"
+"If [code]false[/code], a non-hidden directory ([code]import[/code]) will be "
+"used instead.\n"
+"[b]Note:[/b] Restart the application after changing this setting.\n"
+"[b]Note:[/b] Changing this value can help on platforms or with third-party "
+"tools where hidden directory patterns are disallowed. Only modify this "
+"setting if you know that your environment requires it, as changing the "
+"default can impact compatibility with some external tools or plugins which "
+"expect the default [code].import[/code] folder."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:217
msgid ""
"Icon set in [code].ico[/code] format used on Windows to set the game's icon. "
"This is done automatically on start by calling [method OS.set_native_icon]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:219
+#: doc/classes/ProjectSettings.xml:220
msgid ""
"Time samples for frame deltas are subject to random variation introduced by "
"the platform, even when frames are displayed at regular intervals thanks to "
@@ -45892,14 +46253,14 @@ msgid ""
"adequate to render frames at the refresh rate."
msgstr ""
-#: doc/classes/ProjectSettings.xml:224
+#: doc/classes/ProjectSettings.xml:225
msgid ""
"[b]Experimental.[/b] Shifts the measurement of delta time for each frame to "
"just after the drawing has taken place. This may lead to more consistent "
"deltas and a reduction in frame stutters."
msgstr ""
-#: doc/classes/ProjectSettings.xml:227
+#: doc/classes/ProjectSettings.xml:228
msgid ""
"If [code]true[/code], disables printing to standard error. If [code]true[/"
"code], this also hides error and warning messages printed by [method "
@@ -45908,7 +46269,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:231
+#: doc/classes/ProjectSettings.xml:232
msgid ""
"If [code]true[/code], disables printing to standard output. This is "
"equivalent to starting the editor or project with the [code]--quiet[/code] "
@@ -45916,7 +46277,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:235
+#: doc/classes/ProjectSettings.xml:236
msgid ""
"If [code]true[/code], flushes the standard output stream every time a line "
"is printed. This affects both terminal logging and file logging.\n"
@@ -45932,20 +46293,20 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:241
+#: doc/classes/ProjectSettings.xml:242
msgid ""
"Debug build override for [member application/run/flush_stdout_on_print], as "
"performance is less important during debugging.\n"
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:245
+#: doc/classes/ProjectSettings.xml:246
msgid ""
"Forces a delay between frames in the main loop (in milliseconds). This may "
"be useful if you plan to disable vertical synchronization."
msgstr ""
-#: doc/classes/ProjectSettings.xml:248
+#: doc/classes/ProjectSettings.xml:249
msgid ""
"If [code]true[/code], enables low-processor usage mode. This setting only "
"works on desktop platforms. The screen is not redrawn if nothing changes "
@@ -45953,75 +46314,81 @@ msgid ""
"useless (and can hurt performance) in most games."
msgstr ""
-#: doc/classes/ProjectSettings.xml:251
+#: doc/classes/ProjectSettings.xml:252
msgid ""
"Amount of sleeping between frames when the low-processor usage mode is "
"enabled (in microseconds). Higher values will result in lower CPU usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:254
+#: doc/classes/ProjectSettings.xml:255
msgid "Path to the main scene file that will be loaded when the project runs."
msgstr ""
-#: doc/classes/ProjectSettings.xml:257 doc/classes/ProjectSettings.xml:260
+#: doc/classes/ProjectSettings.xml:258 doc/classes/ProjectSettings.xml:261
msgid ""
"Audio buses will disable automatically when sound goes below a given dB "
"threshold for a given time. This saves CPU as effects assigned to that bus "
"will no longer do any processing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:263
+#: doc/classes/ProjectSettings.xml:264
msgid ""
"Default [AudioBusLayout] resource file to use in the project, unless "
"overridden by the scene."
msgstr ""
-#: doc/classes/ProjectSettings.xml:266
+#: doc/classes/ProjectSettings.xml:267
msgid ""
"Specifies the audio driver to use. This setting is platform-dependent as "
"each platform supports different audio drivers. If left empty, the default "
"audio driver will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:269
+#: doc/classes/ProjectSettings.xml:270
msgid ""
"If [code]true[/code], microphone input will be allowed. This requires "
"appropriate permissions to be set when exporting to Android or iOS."
msgstr ""
-#: doc/classes/ProjectSettings.xml:272
+#: doc/classes/ProjectSettings.xml:273
msgid ""
"The mixing rate used for audio (in Hz). In general, it's better to not touch "
"this and leave it to the host operating system."
msgstr ""
-#: doc/classes/ProjectSettings.xml:275
+#: doc/classes/ProjectSettings.xml:276
msgid ""
"Safer override for [member audio/mix_rate] in the Web platform. Here "
"[code]0[/code] means \"let the browser choose\" (since some browsers do not "
"like forcing the mix rate)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:278
+#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:281
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:284
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:287
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -46031,7 +46398,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:290
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -46041,14 +46408,14 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:293
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:296
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
@@ -46056,14 +46423,14 @@ msgstr ""
"Aktiviert [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
-#: doc/classes/ProjectSettings.xml:299
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:302
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -46071,81 +46438,81 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:305
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:308
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:311
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:314
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:317
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr ""
-#: doc/classes/ProjectSettings.xml:320
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:323
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:326
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:329
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:332
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:335
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:338
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:341
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -46153,74 +46520,74 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:344
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:347
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:350
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:353
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:356
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:359
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:362
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:365
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:368
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:371
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:374
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:377
+#: doc/classes/ProjectSettings.xml:380
#, fuzzy
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
@@ -46228,38 +46595,38 @@ msgstr ""
"Wenn [code]true[/code], können andere Überwachungsbereiche diesen Bereich "
"erkennen."
-#: doc/classes/ProjectSettings.xml:380
+#: doc/classes/ProjectSettings.xml:383
#, fuzzy
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
msgstr "Wenn [code]true[/code], ist die Filterung aktiviert."
-#: doc/classes/ProjectSettings.xml:383
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:386
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:389
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:392
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:395
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:398
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -46270,91 +46637,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:403
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:406
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:409
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:412
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:415
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:418
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:421
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:424
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:427
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:430
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:433
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:436
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:439
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr ""
-#: doc/classes/ProjectSettings.xml:442
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:445
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:448
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:451
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -46363,13 +46730,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:455
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:458
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -46379,7 +46746,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:463
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -46387,19 +46754,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:468
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:472
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:476
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -46413,45 +46780,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:481
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:484
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:488
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:491
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:494
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:497
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:500
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -46460,7 +46827,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:503
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -46471,7 +46838,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:507
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -46487,14 +46854,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:515
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:518
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -46502,49 +46869,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:521
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:524
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:529
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:532
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:535
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:538
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:541
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:544
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:547
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -46553,7 +46920,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:551
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -46561,7 +46928,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:555
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -46569,7 +46936,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:559
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -46579,7 +46946,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:563
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -46588,7 +46955,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:567
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -46597,7 +46964,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:571
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -46607,7 +46974,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:575
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -46615,7 +46982,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:579
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -46625,7 +46992,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:583
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -46635,7 +47002,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:587
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -46643,7 +47010,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:591
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -46652,7 +47019,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:595
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -46660,7 +47027,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:599
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -46672,477 +47039,477 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:605
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:608
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:611
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:614
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:617
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:620
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:623
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:626
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:629
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:632
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:635
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:638
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:641
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:644
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:647
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:650
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:653
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:656
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:659
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:662
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:665
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:668
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:671
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:674
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:677
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:680
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:683
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:686
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:689
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:692
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:695
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:698
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:701
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:704
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:707
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:710
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:713
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:716
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:719
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:722
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:725
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:728
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:731
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:734
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:737
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:740
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:743
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:746
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:749
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:752
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:755
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:758
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:761
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:764
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:767
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:770
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:773
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:776
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:779
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:782
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:785
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:788
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:791
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:794
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:797
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:800
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:803
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:806
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:809
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:812
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:815
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:818
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:821
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:824
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:827
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:830
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:833
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:836
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:839
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:842
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:845
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:848
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:851
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:854
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:857
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:860
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:863
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:866
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:869
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:872
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:875
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:878
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:881
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr ""
-#: doc/classes/ProjectSettings.xml:884
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:887
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:890
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:893
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:896
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:899
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:902
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:905
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:908
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:911
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:914
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:917
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:920
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:923
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:926
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:929
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:932
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:935
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:938
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:941
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:946
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:949
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -47150,92 +47517,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:952
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:955
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:958
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:961
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:964
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:967
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:970
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:973
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:976
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:979
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:982
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:985
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:988
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:991
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:994
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:997
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1000
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1003
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -47245,33 +47612,33 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1007
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1010
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1013
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1017
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1021
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -47284,7 +47651,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1025
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -47296,7 +47663,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1033
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -47308,7 +47675,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1041
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -47321,7 +47688,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1045
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -47329,28 +47696,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1049
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1053
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1056
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1059
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -47360,25 +47727,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1063
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1066
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1069
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1072
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -47391,7 +47758,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1076
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -47403,7 +47770,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1084
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -47415,7 +47782,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1092
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -47428,13 +47795,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1096
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1099
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -47442,11 +47809,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1103
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1106
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -47460,7 +47827,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1112
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -47469,7 +47836,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1116
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -47485,7 +47852,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1121
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -47495,7 +47862,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1125
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -47505,7 +47872,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1129
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -47516,7 +47883,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1133
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -47526,7 +47893,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1137
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -47534,7 +47901,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1141
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -47545,7 +47912,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1145
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -47560,7 +47927,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1151
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -47569,13 +47936,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1156
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1159
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -47584,7 +47951,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1162
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -47594,7 +47961,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1165
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -47606,7 +47973,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1168
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -47616,24 +47983,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1171
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1174
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1177
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1180
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -47642,7 +48009,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1183
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -47650,7 +48017,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1186
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -47659,7 +48026,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1189
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -47669,7 +48036,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1193
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -47677,31 +48044,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1197
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1200
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1203
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1206
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1209
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -47709,7 +48076,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1212
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -47719,46 +48086,53 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1215
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1218
+#: doc/classes/ProjectSettings.xml:1221
msgid ""
-"If [code]true[/code] and available on the target device, enables high "
-"floating point precision for all shader computations in GLES2.\n"
+"iOS specific override for [member rendering/gles2/compatibility/"
+"disable_half_float], due to poor support for half-float vertex compression "
+"on many devices."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1224
+msgid ""
+"If [code]true[/code] and available on the target Android device, enables "
+"high floating point precision for all shader computations in GLES2.\n"
"[b]Warning:[/b] High floating point precision can be extremely slow on older "
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1225
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1228
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1231
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1234
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -47766,7 +48140,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1237
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -47776,7 +48150,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1240
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -47785,7 +48159,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1243
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -47794,20 +48168,20 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1246
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1249
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1252
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -47816,7 +48190,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1255
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -47824,7 +48198,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1258
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -47833,7 +48207,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -47843,20 +48217,20 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1267
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1274
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -47865,13 +48239,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -47881,46 +48255,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1293
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1296
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1299
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1302
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1305
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -47930,7 +48304,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -47942,7 +48316,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -47950,7 +48324,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1316
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -47958,7 +48332,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -47967,7 +48341,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1323
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -47981,7 +48355,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1328
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -47991,7 +48365,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1331
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -48000,7 +48374,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1334
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -48010,54 +48384,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1337
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1340
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1343
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1346
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1349
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1352
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1355
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1358
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -48068,61 +48442,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1365
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1368
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1371
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1374
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1377
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1380
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1383
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1386
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -48133,7 +48507,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -48142,26 +48516,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1393 doc/classes/ProjectSettings.xml:1396
#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1405
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1408
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1411
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -48172,20 +48546,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1418
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -48197,52 +48571,52 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1428
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1435
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1438
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1441
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1444
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1447
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1450
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1453
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -48250,7 +48624,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -48260,10 +48634,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -48272,10 +48646,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -48284,10 +48658,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -48296,10 +48670,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -48308,10 +48682,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -48345,7 +48719,7 @@ msgstr ""
#: doc/classes/QuadMesh.xml:20
msgid "Size on the X and Y axes."
-msgstr ""
+msgstr "Größe auf der X- und Y-Achse."
#: doc/classes/Quat.xml:4
msgid "Quaternion."
@@ -48374,7 +48748,7 @@ msgstr ""
#: doc/classes/Quat.xml:20
msgid "Constructs a quaternion from the given [Basis]."
-msgstr ""
+msgstr "Konstruiert ein Quaternion aus der gegebenen [Basis]."
#: doc/classes/Quat.xml:27
msgid ""
@@ -48382,12 +48756,18 @@ msgid ""
"angles (in the YXZ convention: when decomposing, first Z, then X, and Y "
"last), given in the vector format as (X angle, Y angle, Z angle)."
msgstr ""
+"Konstruiert ein Quaternion, das eine Drehung ausführt, die durch Euler-"
+"Winkel (in der YXZ-Konvention: bei der Zerlegung zuerst Z, dann X und Y "
+"zuletzt) angegeben wird, die im Vektorformat als (X-Winkel, Y-Winkel, Z-"
+"Winkel) angegeben wird."
#: doc/classes/Quat.xml:35
msgid ""
"Constructs a quaternion that will rotate around the given axis by the "
"specified angle. The axis must be a normalized vector."
msgstr ""
+"Konstruiert ein Quaternion, das sich um die angegebene Achse um den "
+"angegebenen Winkel dreht. Die Achse muss ein normalisierter Vektor sein."
#: doc/classes/Quat.xml:45
msgid "Constructs a quaternion defined by the given values."
@@ -48998,40 +49378,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr ""
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -49039,14 +49433,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -51393,6 +51787,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -51410,7 +51820,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -51418,11 +51828,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -51432,19 +51842,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -56923,20 +57333,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -56947,28 +57362,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -56980,19 +57395,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
@@ -59840,26 +60255,33 @@ msgid "Text [Color] used when the [ToolButton] is disabled."
msgstr ""
#: doc/classes/ToolButton.xml:39
-msgid "Text [Color] used when the [ToolButton] is being hovered."
+msgid ""
+"Text [Color] used when the [ToolButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/ToolButton.xml:42
-msgid "Text [Color] used when the [ToolButton] is being pressed."
+msgid "Text [Color] used when the [ToolButton] is being hovered."
msgstr ""
#: doc/classes/ToolButton.xml:45
-msgid "[StyleBox] used when the [ToolButton] is being hovered."
+msgid "Text [Color] used when the [ToolButton] is being pressed."
msgstr ""
#: doc/classes/ToolButton.xml:48
-msgid "The horizontal space between [ToolButton]'s icon and text."
+msgid "[StyleBox] used when the [ToolButton] is being hovered."
msgstr ""
#: doc/classes/ToolButton.xml:51
-msgid "Default [StyleBox] for the [ToolButton]."
+msgid "The horizontal space between [ToolButton]'s icon and text."
msgstr ""
#: doc/classes/ToolButton.xml:54
+msgid "Default [StyleBox] for the [ToolButton]."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:57
msgid "[StyleBox] used when the [ToolButton] is being pressed."
msgstr ""
@@ -72197,6 +72619,30 @@ msgstr ""
"Wenn [code]true[/code], dann werden untergeordnete Nodes sortiert, "
"anderenfalls wird die Sortierung deaktiviert."
+#~ msgid "Returns this [AABB] expanded to include a given point."
+#~ msgstr "Gibt diesen [AABB] erweitert um einen gegebenen Punkt zurück."
+
+#, fuzzy
+#~ msgid "Returns the [Physics2DDirectBodyState] of the body."
+#~ msgstr "Gibt die Größe des Arrays zurück."
+
+#, fuzzy
+#~ msgid "Returns the [PhysicsDirectBodyState] of the body."
+#~ msgstr "Gibt die Größe des Arrays zurück."
+
+#, fuzzy
+#~ msgid ""
+#~ "Returns a list of intersecting [Area]s. For performance reasons "
+#~ "(collisions are all processed at the same time) this list is modified "
+#~ "once during the physics step, not immediately after objects are moved. "
+#~ "Consider using signals instead."
+#~ msgstr ""
+#~ "Gibt eine Liste der sich schneidenden [Area2D]s zurück. Aus "
+#~ "Leistungsgründen (Kollisionen werden alle gleichzeitig verarbeitet) wird "
+#~ "diese Liste einmal während des Physikschritts geändert, nicht sofort nach "
+#~ "dem Verschieben von Objekten. Erwägen Sie stattdessen die Verwendung von "
+#~ "Signalen."
+
#~ msgid "Returns the label used for built-in text."
#~ msgstr "Gibt das für den eingebauten Text verwendete Label zurück."
diff --git a/doc/translations/el.po b/doc/translations/el.po
index 562bdf1235..55ac6a723e 100644
--- a/doc/translations/el.po
+++ b/doc/translations/el.po
@@ -23,43 +23,43 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.6-dev\n"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Description"
msgstr "ΠεÏιγÏαφή"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Tutorials"
msgstr "Οδηγοί"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Properties"
msgstr "Ιδιότητες"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Methods"
msgstr "ΣυναÏτήσεις"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Theme Properties"
msgstr "Ιδιότητες θέματος"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Signals"
msgstr "Σήματα"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Enumerations"
msgstr "ΑπαÏιθμήσεις"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Constants"
msgstr "ΣταθεÏές"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Property Descriptions"
msgstr "ΠεÏιγÏαφές ιδιοτήτων"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Method Descriptions"
msgstr "ΠεÏιγÏαφές μεθόδων"
@@ -3596,112 +3596,121 @@ msgid ""
msgstr ""
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr ""
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
msgstr ""
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
msgstr ""
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
msgstr ""
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr ""
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr ""
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr ""
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
msgstr ""
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr ""
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
msgstr ""
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
msgstr ""
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr ""
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
"positive.\n"
@@ -4780,7 +4789,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -6216,21 +6225,25 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
#: doc/classes/Area.xml:17
msgid ""
-"Returns a list of intersecting [Area]s. For performance reasons (collisions "
-"are all processed at the same time) this list is modified once during the "
-"physics step, not immediately after objects are moved. Consider using "
-"signals instead."
+"Returns a list of intersecting [Area]s. The overlapping area's [member "
+"CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:23
+#: doc/classes/Area.xml:24
msgid ""
-"Returns a list of intersecting [PhysicsBody]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody]s. The overlapping body's "
+"[member CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:30
+#: doc/classes/Area.xml:32
msgid ""
"If [code]true[/code], the given area overlaps the Area.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6238,7 +6251,7 @@ msgid ""
"physics step. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:38
+#: doc/classes/Area.xml:40
msgid ""
"If [code]true[/code], the given physics body overlaps the Area.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6249,7 +6262,7 @@ msgid ""
"their tiles with collision shapes as a virtual physics body)."
msgstr ""
-#: doc/classes/Area.xml:46
+#: doc/classes/Area.xml:48
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
"velocity lost per second.\n"
@@ -6257,41 +6270,41 @@ msgid ""
"details about damping."
msgstr ""
-#: doc/classes/Area.xml:50 doc/classes/Area2D.xml:52
+#: doc/classes/Area.xml:52 doc/classes/Area2D.xml:54
msgid "The name of the area's audio bus."
msgstr ""
-#: doc/classes/Area.xml:53 doc/classes/Area2D.xml:55
+#: doc/classes/Area.xml:55 doc/classes/Area2D.xml:57
msgid ""
"If [code]true[/code], the area's audio bus overrides the default audio bus."
msgstr ""
-#: doc/classes/Area.xml:56
+#: doc/classes/Area.xml:58
msgid ""
"The area's gravity intensity (in meters per second squared). This value "
"multiplies the gravity vector. This is useful to alter the force of gravity "
"without altering its direction."
msgstr ""
-#: doc/classes/Area.xml:59 doc/classes/Area2D.xml:61
+#: doc/classes/Area.xml:61 doc/classes/Area2D.xml:63
msgid ""
"The falloff factor for point gravity. The greater the value, the faster "
"gravity decreases with distance."
msgstr ""
-#: doc/classes/Area.xml:62 doc/classes/Area2D.xml:64
+#: doc/classes/Area.xml:64 doc/classes/Area2D.xml:66
msgid ""
"If [code]true[/code], gravity is calculated from a point (set via [member "
"gravity_vec]). See also [member space_override]."
msgstr ""
-#: doc/classes/Area.xml:65 doc/classes/Area2D.xml:67
+#: doc/classes/Area.xml:67 doc/classes/Area2D.xml:69
msgid ""
"The area's gravity vector (not normalized). If gravity is a point (see "
"[member gravity_point]), this will be the point of attraction."
msgstr ""
-#: doc/classes/Area.xml:68
+#: doc/classes/Area.xml:70
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
"velocity lost per second.\n"
@@ -6299,61 +6312,61 @@ msgid ""
"about damping."
msgstr ""
-#: doc/classes/Area.xml:72 doc/classes/Area2D.xml:74
+#: doc/classes/Area.xml:74 doc/classes/Area2D.xml:76
msgid "If [code]true[/code], other monitoring areas can detect this area."
msgstr ""
-#: doc/classes/Area.xml:75 doc/classes/Area2D.xml:77
+#: doc/classes/Area.xml:77 doc/classes/Area2D.xml:79
msgid ""
"If [code]true[/code], the area detects bodies or areas entering and exiting "
"it."
msgstr ""
-#: doc/classes/Area.xml:78 doc/classes/Area2D.xml:80
+#: doc/classes/Area.xml:80 doc/classes/Area2D.xml:82
msgid "The area's priority. Higher priority areas are processed first."
msgstr ""
-#: doc/classes/Area.xml:81
+#: doc/classes/Area.xml:83
msgid ""
"The degree to which this area applies reverb to its associated audio. Ranges "
"from [code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
msgstr ""
-#: doc/classes/Area.xml:84
+#: doc/classes/Area.xml:86
msgid "If [code]true[/code], the area applies reverb to its associated audio."
msgstr ""
-#: doc/classes/Area.xml:87
+#: doc/classes/Area.xml:89
msgid "The reverb bus name to use for this area's associated audio."
msgstr ""
-#: doc/classes/Area.xml:90
+#: doc/classes/Area.xml:92
msgid ""
"The degree to which this area's reverb is a uniform effect. Ranges from "
"[code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
msgstr ""
-#: doc/classes/Area.xml:93 doc/classes/Area2D.xml:83
+#: doc/classes/Area.xml:95 doc/classes/Area2D.xml:85
msgid ""
"Override mode for gravity and damping calculations within this area. See "
"[enum SpaceOverride] for possible values."
msgstr ""
-#: doc/classes/Area.xml:100
+#: doc/classes/Area.xml:102
msgid ""
"Emitted when another Area enters this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
-#: doc/classes/Area.xml:107
+#: doc/classes/Area.xml:109
msgid ""
"Emitted when another Area exits this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
-#: doc/classes/Area.xml:117 doc/classes/Area.xml:130
+#: doc/classes/Area.xml:119 doc/classes/Area.xml:132
msgid ""
"Emitted when one of another Area's [Shape]s enters one of this Area's "
"[Shape]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6368,7 +6381,7 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:140
+#: doc/classes/Area.xml:142
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] enters this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -6377,7 +6390,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:147
+#: doc/classes/Area.xml:149
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] exits this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -6386,7 +6399,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:157 doc/classes/Area.xml:170
+#: doc/classes/Area.xml:159 doc/classes/Area.xml:172
msgid ""
"Emitted when one of a [PhysicsBody] or [GridMap]'s [Shape]s enters one of "
"this Area's [Shape]s. Requires [member monitoring] to be set to [code]true[/"
@@ -6403,29 +6416,29 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:180 doc/classes/Area2D.xml:170
+#: doc/classes/Area.xml:182 doc/classes/Area2D.xml:172
msgid "This area does not affect gravity/damping."
msgstr ""
-#: doc/classes/Area.xml:183 doc/classes/Area2D.xml:173
+#: doc/classes/Area.xml:185 doc/classes/Area2D.xml:175
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order)."
msgstr ""
-#: doc/classes/Area.xml:186 doc/classes/Area2D.xml:176
+#: doc/classes/Area.xml:188 doc/classes/Area2D.xml:178
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order), ignoring any lower priority areas."
msgstr ""
-#: doc/classes/Area.xml:189 doc/classes/Area2D.xml:179
+#: doc/classes/Area.xml:191 doc/classes/Area2D.xml:181
msgid ""
"This area replaces any gravity/damping, even the defaults, ignoring any "
"lower priority areas."
msgstr ""
-#: doc/classes/Area.xml:192 doc/classes/Area2D.xml:182
+#: doc/classes/Area.xml:194 doc/classes/Area2D.xml:184
msgid ""
"This area replaces any gravity/damping calculated so far (in [member "
"priority] order), but keeps calculating the rest of the areas."
@@ -6464,21 +6477,25 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
#: doc/classes/Area2D.xml:19
msgid ""
-"Returns a list of intersecting [Area2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [Area2D]s. The overlapping area's [member "
+"CollisionObject2D.collision_layer] must be part of this area's [member "
+"CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:25
+#: doc/classes/Area2D.xml:26
msgid ""
-"Returns a list of intersecting [PhysicsBody2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody2D]s. The overlapping body's "
+"[member CollisionObject2D.collision_layer] must be part of this area's "
+"[member CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:32
+#: doc/classes/Area2D.xml:34
msgid ""
"If [code]true[/code], the given area overlaps the Area2D.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6486,7 +6503,7 @@ msgid ""
"the physics step. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:40
+#: doc/classes/Area2D.xml:42
msgid ""
"If [code]true[/code], the given physics body overlaps the Area2D.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6497,7 +6514,7 @@ msgid ""
"register their tiles with collision shapes as a virtual physics body)."
msgstr ""
-#: doc/classes/Area2D.xml:48
+#: doc/classes/Area2D.xml:50
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
"velocity lost per second.\n"
@@ -6505,14 +6522,14 @@ msgid ""
"details about damping."
msgstr ""
-#: doc/classes/Area2D.xml:58
+#: doc/classes/Area2D.xml:60
msgid ""
"The area's gravity intensity (in pixels per second squared). This value "
"multiplies the gravity vector. This is useful to alter the force of gravity "
"without altering its direction."
msgstr ""
-#: doc/classes/Area2D.xml:70
+#: doc/classes/Area2D.xml:72
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
"velocity lost per second.\n"
@@ -6520,21 +6537,21 @@ msgid ""
"about damping."
msgstr ""
-#: doc/classes/Area2D.xml:90
+#: doc/classes/Area2D.xml:92
msgid ""
"Emitted when another Area2D enters this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-#: doc/classes/Area2D.xml:97
+#: doc/classes/Area2D.xml:99
msgid ""
"Emitted when another Area2D exits this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-#: doc/classes/Area2D.xml:107
+#: doc/classes/Area2D.xml:109
msgid ""
"Emitted when one of another Area2D's [Shape2D]s enters one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6549,7 +6566,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:120
+#: doc/classes/Area2D.xml:122
msgid ""
"Emitted when one of another Area2D's [Shape2D]s exits one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6564,7 +6581,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:130
+#: doc/classes/Area2D.xml:132
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] enters this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -6573,7 +6590,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:137
+#: doc/classes/Area2D.xml:139
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] exits this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -6582,7 +6599,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:147
+#: doc/classes/Area2D.xml:149
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s enters one "
"of this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -6601,7 +6618,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:160
+#: doc/classes/Area2D.xml:162
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s exits one of "
"this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -10172,42 +10189,47 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
-"no save path is provided it will try to match the path from the current "
+"no root node is provided, parent of this node will be used as root instead. "
+"If no save path is provided it will try to match the path from the current "
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -10221,62 +10243,62 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
msgid "The rotation of the baked custom sky."
msgstr ""
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -10284,35 +10306,35 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -10320,13 +10342,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -10338,66 +10360,78 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr ""
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
msgid "Baking was successful."
msgstr ""
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr ""
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
#, fuzzy
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr "ΕπιστÏέφει το τόξο εφαπτομένης των παÏαμέτÏων."
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr ""
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:133
+#: doc/classes/BakedLightmap.xml:132
+msgid ""
+"Returns if lightmapper can't be created. Unless you are using a custom "
+"lightmapper, please report this as bug."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:135
+msgid ""
+"There is no root node to start baking from. Either provide [code]from_node[/"
+"code] argument or attach this node to a parent that should be used as root."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:136
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:139
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:142
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -10853,8 +10887,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -11242,26 +11279,33 @@ msgid "Text [Color] used when the [Button] is disabled."
msgstr ""
#: doc/classes/Button.xml:77
-msgid "Text [Color] used when the [Button] is being hovered."
+msgid ""
+"Text [Color] used when the [Button] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/Button.xml:80
-msgid "Text [Color] used when the [Button] is being pressed."
+msgid "Text [Color] used when the [Button] is being hovered."
msgstr ""
#: doc/classes/Button.xml:83
-msgid "[StyleBox] used when the [Button] is being hovered."
+msgid "Text [Color] used when the [Button] is being pressed."
msgstr ""
#: doc/classes/Button.xml:86
-msgid "The horizontal space between [Button]'s icon and text."
+msgid "[StyleBox] used when the [Button] is being hovered."
msgstr ""
#: doc/classes/Button.xml:89
-msgid "Default [StyleBox] for the [Button]."
+msgid "The horizontal space between [Button]'s icon and text."
msgstr ""
#: doc/classes/Button.xml:92
+msgid "Default [StyleBox] for the [Button]."
+msgstr ""
+
+#: doc/classes/Button.xml:95
msgid "[StyleBox] used when the [Button] is being pressed."
msgstr ""
@@ -12734,80 +12778,96 @@ msgstr ""
msgid "The check icon to display when the [CheckBox] is checked."
msgstr ""
-#: doc/classes/CheckBox.xml:30
+#: doc/classes/CheckBox.xml:28
+msgid "The check icon to display when the [CheckBox] is checked and disabled."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:31
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is disabled."
msgstr ""
-#: doc/classes/CheckBox.xml:33
+#: doc/classes/CheckBox.xml:34
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is focused."
msgstr ""
-#: doc/classes/CheckBox.xml:36
+#: doc/classes/CheckBox.xml:37
msgid "The [Font] to use for the [CheckBox] text."
msgstr ""
-#: doc/classes/CheckBox.xml:39
+#: doc/classes/CheckBox.xml:40
msgid "The [CheckBox] text's font color."
msgstr ""
-#: doc/classes/CheckBox.xml:42
+#: doc/classes/CheckBox.xml:43
msgid "The [CheckBox] text's font color when it's disabled."
msgstr ""
-#: doc/classes/CheckBox.xml:45
+#: doc/classes/CheckBox.xml:46
+msgid ""
+"The [CheckBox] text's font color when it's focused. Only replaces the normal "
+"text color of the checkbox. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:49
msgid "The [CheckBox] text's font color when it's hovered."
msgstr ""
-#: doc/classes/CheckBox.xml:48
+#: doc/classes/CheckBox.xml:52
msgid "The [CheckBox] text's font color when it's hovered and pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:51
+#: doc/classes/CheckBox.xml:55
msgid "The [CheckBox] text's font color when it's pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:54
+#: doc/classes/CheckBox.xml:58
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered."
msgstr ""
-#: doc/classes/CheckBox.xml:57
+#: doc/classes/CheckBox.xml:61
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered and "
"pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:60
+#: doc/classes/CheckBox.xml:64
msgid "The separation between the check icon and the text (in pixels)."
msgstr ""
-#: doc/classes/CheckBox.xml:63 doc/classes/CheckButton.xml:58
+#: doc/classes/CheckBox.xml:67 doc/classes/CheckButton.xml:61
msgid "The [StyleBox] to display as a background."
msgstr ""
-#: doc/classes/CheckBox.xml:66
+#: doc/classes/CheckBox.xml:70
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:69
+#: doc/classes/CheckBox.xml:73
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is checked."
msgstr ""
-#: doc/classes/CheckBox.xml:74
+#: doc/classes/CheckBox.xml:78
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is unchecked."
msgstr ""
-#: doc/classes/CheckBox.xml:79
+#: doc/classes/CheckBox.xml:83
msgid "The check icon to display when the [CheckBox] is unchecked."
msgstr ""
+#: doc/classes/CheckBox.xml:86
+msgid ""
+"The check icon to display when the [CheckBox] is unchecked and disabled."
+msgstr ""
+
#: doc/classes/CheckButton.xml:4
msgid "Checkable button. See also [CheckBox]."
msgstr ""
@@ -12851,49 +12911,56 @@ msgid "The [CheckButton] text's font color when it's disabled."
msgstr ""
#: doc/classes/CheckButton.xml:40
-msgid "The [CheckButton] text's font color when it's hovered."
+msgid ""
+"The [CheckButton] text's font color when it's focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/CheckButton.xml:43
-msgid "The [CheckButton] text's font color when it's hovered and pressed."
+msgid "The [CheckButton] text's font color when it's hovered."
msgstr ""
#: doc/classes/CheckButton.xml:46
-msgid "The [CheckButton] text's font color when it's pressed."
+msgid "The [CheckButton] text's font color when it's hovered and pressed."
msgstr ""
#: doc/classes/CheckButton.xml:49
+msgid "The [CheckButton] text's font color when it's pressed."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:52
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered."
msgstr ""
-#: doc/classes/CheckButton.xml:52
+#: doc/classes/CheckButton.xml:55
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered "
"and pressed."
msgstr ""
-#: doc/classes/CheckButton.xml:55
+#: doc/classes/CheckButton.xml:58
msgid "The separation between the toggle icon and the text (in pixels)."
msgstr ""
-#: doc/classes/CheckButton.xml:61
+#: doc/classes/CheckButton.xml:64
msgid "The icon to display when the [CheckButton] is unchecked."
msgstr ""
-#: doc/classes/CheckButton.xml:64
+#: doc/classes/CheckButton.xml:67
msgid "The icon to display when the [CheckButton] is unchecked and disabled."
msgstr ""
-#: doc/classes/CheckButton.xml:67
+#: doc/classes/CheckButton.xml:70
msgid "The icon to display when the [CheckButton] is checked."
msgstr ""
-#: doc/classes/CheckButton.xml:70
+#: doc/classes/CheckButton.xml:73
msgid "The icon to display when the [CheckButton] is checked and disabled."
msgstr ""
-#: doc/classes/CheckButton.xml:73
+#: doc/classes/CheckButton.xml:76
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is pressed."
msgstr ""
@@ -14668,26 +14735,33 @@ msgid "Text [Color] used when the [ColorPickerButton] is disabled."
msgstr ""
#: doc/classes/ColorPickerButton.xml:80
-msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
+msgid ""
+"Text [Color] used when the [ColorPickerButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/ColorPickerButton.xml:83
-msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
+msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
msgstr ""
#: doc/classes/ColorPickerButton.xml:86
-msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
+msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
msgstr ""
#: doc/classes/ColorPickerButton.xml:89
-msgid "The horizontal space between [ColorPickerButton]'s icon and text."
+msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
msgstr ""
#: doc/classes/ColorPickerButton.xml:92
-msgid "Default [StyleBox] for the [ColorPickerButton]."
+msgid "The horizontal space between [ColorPickerButton]'s icon and text."
msgstr ""
#: doc/classes/ColorPickerButton.xml:95
+msgid "Default [StyleBox] for the [ColorPickerButton]."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:98
msgid "[StyleBox] used when the [ColorPickerButton] is being pressed."
msgstr ""
@@ -19921,7 +19995,8 @@ msgid ""
"get_resource_type]. They may optionally specify some import presets that "
"affect the import process. EditorImportPlugins are responsible for creating "
"the resources and saving them in the [code].import[/code] directory (see "
-"[member ProjectSettings.application/config/project_data_dir_name]).\n"
+"[member ProjectSettings.application/config/"
+"use_hidden_project_data_directory]).\n"
"Below is an example EditorImportPlugin that imports a [Mesh] from a file "
"with the extension \".special\" or \".spec\":\n"
"[codeblock]\n"
@@ -20048,7 +20123,7 @@ msgstr ""
msgid ""
"Gets the extension used to save this resource in the [code].import[/code] "
"directory (see [member ProjectSettings.application/config/"
-"project_data_dir_name])."
+"use_hidden_project_data_directory])."
msgstr ""
#: doc/classes/EditorImportPlugin.xml:130
@@ -21083,8 +21158,11 @@ msgstr ""
msgid "Emitted when the value of the edited resource was changed."
msgstr ""
-#: doc/classes/EditorResourcePicker.xml:89
-msgid "Emitted when the resource value was set and user clicked to edit it."
+#: doc/classes/EditorResourcePicker.xml:90
+msgid ""
+"Emitted when the resource value was set and user clicked to edit it. When "
+"[code]edit[/code] is [code]true[/code], the signal was caused by the context "
+"menu \"Edit\" option."
msgstr ""
#: doc/classes/EditorResourcePreview.xml:4
@@ -24834,21 +24912,32 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html"
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -24857,14 +24946,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -24874,80 +24967,80 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
msgstr ""
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr ""
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -27697,16 +27790,18 @@ msgstr ""
#: doc/classes/Image.xml:436
msgid ""
"OpenGL texture format [code]RED[/code] with a single component and a "
-"bitdepth of 8."
+"bitdepth of 8.\n"
+"[b]Note:[/b] When using the GLES2 backend, this uses the alpha channel "
+"instead of the red channel for storage."
msgstr ""
-#: doc/classes/Image.xml:439
+#: doc/classes/Image.xml:440
msgid ""
"OpenGL texture format [code]RG[/code] with two components and a bitdepth of "
"8 for each."
msgstr ""
-#: doc/classes/Image.xml:442
+#: doc/classes/Image.xml:443
msgid ""
"OpenGL texture format [code]RGB[/code] with three components, each with a "
"bitdepth of 8.\n"
@@ -27714,7 +27809,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:446
+#: doc/classes/Image.xml:447
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 8.\n"
@@ -27722,73 +27817,73 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:450
+#: doc/classes/Image.xml:451
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 4."
msgstr ""
-#: doc/classes/Image.xml:453
+#: doc/classes/Image.xml:454
msgid ""
"OpenGL texture format [code]GL_RGB5_A1[/code] where 5 bits of depth for each "
"component of RGB and one bit for alpha."
msgstr ""
-#: doc/classes/Image.xml:456
+#: doc/classes/Image.xml:457
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 32-"
"bit floating-point value."
msgstr ""
-#: doc/classes/Image.xml:459
+#: doc/classes/Image.xml:460
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:462
+#: doc/classes/Image.xml:463
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:465
+#: doc/classes/Image.xml:466
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:468
+#: doc/classes/Image.xml:469
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 16-"
"bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:471
+#: doc/classes/Image.xml:472
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:474
+#: doc/classes/Image.xml:475
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:477
+#: doc/classes/Image.xml:478
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:480
+#: doc/classes/Image.xml:481
msgid ""
"A special OpenGL texture format where the three color components have 9 bits "
"of precision and all three share a single 5-bit exponent."
msgstr ""
-#: doc/classes/Image.xml:483
+#: doc/classes/Image.xml:484
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 1, and is the smallest variation "
@@ -27798,7 +27893,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:487
+#: doc/classes/Image.xml:488
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 2, and color data is interpreted "
@@ -27808,7 +27903,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:491
+#: doc/classes/Image.xml:492
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format also known as Block Compression 3 or BC3 that contains 64 "
@@ -27819,7 +27914,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:495
+#: doc/classes/Image.xml:496
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -27827,7 +27922,7 @@ msgid ""
"DXT5 uses for the alpha channel."
msgstr ""
-#: doc/classes/Image.xml:498
+#: doc/classes/Image.xml:499
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -27835,7 +27930,7 @@ msgid ""
"algorithm that DXT5 uses for the alpha channel."
msgstr ""
-#: doc/classes/Image.xml:501
+#: doc/classes/Image.xml:502
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned normalized "
@@ -27844,21 +27939,21 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:505
+#: doc/classes/Image.xml:506
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with signed floating-point "
"RGB components."
msgstr ""
-#: doc/classes/Image.xml:508
+#: doc/classes/Image.xml:509
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned floating-point "
"RGB components."
msgstr ""
-#: doc/classes/Image.xml:511
+#: doc/classes/Image.xml:512
msgid ""
"Texture format used on PowerVR-supported mobile platforms, uses 2-bit color "
"depth with no alpha. More information can be found [url=https://en.wikipedia."
@@ -27867,25 +27962,25 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:515
+#: doc/classes/Image.xml:516
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with an "
"alpha component."
msgstr ""
-#: doc/classes/Image.xml:518
+#: doc/classes/Image.xml:519
msgid ""
"Similar to [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with 4-"
"bit color depth and no alpha."
msgstr ""
-#: doc/classes/Image.xml:521
+#: doc/classes/Image.xml:522
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC4[/url], but with an "
"alpha component."
msgstr ""
-#: doc/classes/Image.xml:524
+#: doc/classes/Image.xml:525
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC1]Ericsson Texture Compression format 1[/"
@@ -27893,7 +27988,7 @@ msgid ""
"standard. This format cannot store an alpha channel."
msgstr ""
-#: doc/classes/Image.xml:527
+#: doc/classes/Image.xml:528
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27901,7 +27996,7 @@ msgid ""
"unsigned data."
msgstr ""
-#: doc/classes/Image.xml:530
+#: doc/classes/Image.xml:531
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27909,7 +28004,7 @@ msgid ""
"channel of signed data."
msgstr ""
-#: doc/classes/Image.xml:533
+#: doc/classes/Image.xml:534
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27917,7 +28012,7 @@ msgid ""
"of unsigned data."
msgstr ""
-#: doc/classes/Image.xml:536
+#: doc/classes/Image.xml:537
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27925,7 +28020,7 @@ msgid ""
"channels of signed data."
msgstr ""
-#: doc/classes/Image.xml:539
+#: doc/classes/Image.xml:540
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27935,7 +28030,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:543
+#: doc/classes/Image.xml:544
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27945,7 +28040,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:547
+#: doc/classes/Image.xml:548
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27956,31 +28051,31 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:551
+#: doc/classes/Image.xml:552
msgid "Represents the size of the [enum Format] enum."
msgstr ""
-#: doc/classes/Image.xml:554
+#: doc/classes/Image.xml:555
msgid ""
"Performs nearest-neighbor interpolation. If the image is resized, it will be "
"pixelated."
msgstr ""
-#: doc/classes/Image.xml:557
+#: doc/classes/Image.xml:558
msgid ""
"Performs bilinear interpolation. If the image is resized, it will be blurry. "
"This mode is faster than [constant INTERPOLATE_CUBIC], but it results in "
"lower quality."
msgstr ""
-#: doc/classes/Image.xml:560
+#: doc/classes/Image.xml:561
msgid ""
"Performs cubic interpolation. If the image is resized, it will be blurry. "
"This mode often gives better results compared to [constant "
"INTERPOLATE_BILINEAR], at the cost of being slower."
msgstr ""
-#: doc/classes/Image.xml:563
+#: doc/classes/Image.xml:564
msgid ""
"Performs bilinear separately on the two most-suited mipmap levels, then "
"linearly interpolates between them.\n"
@@ -27995,55 +28090,55 @@ msgid ""
"a new set will be generated for the resulting image."
msgstr ""
-#: doc/classes/Image.xml:570
+#: doc/classes/Image.xml:571
msgid ""
"Performs Lanczos interpolation. This is the slowest image resizing mode, but "
"it typically gives the best results, especially when downscalng images."
msgstr ""
-#: doc/classes/Image.xml:573
+#: doc/classes/Image.xml:574
msgid "Image does not have alpha."
msgstr ""
-#: doc/classes/Image.xml:576
+#: doc/classes/Image.xml:577
msgid "Image stores alpha in a single bit."
msgstr ""
-#: doc/classes/Image.xml:579
+#: doc/classes/Image.xml:580
msgid "Image uses alpha."
msgstr ""
-#: doc/classes/Image.xml:582
+#: doc/classes/Image.xml:583
msgid "Use S3TC compression."
msgstr ""
-#: doc/classes/Image.xml:585
+#: doc/classes/Image.xml:586
msgid "Use PVRTC2 compression."
msgstr ""
-#: doc/classes/Image.xml:588
+#: doc/classes/Image.xml:589
msgid "Use PVRTC4 compression."
msgstr ""
-#: doc/classes/Image.xml:591
+#: doc/classes/Image.xml:592
msgid "Use ETC compression."
msgstr ""
-#: doc/classes/Image.xml:594
+#: doc/classes/Image.xml:595
msgid "Use ETC2 compression."
msgstr ""
-#: doc/classes/Image.xml:597
+#: doc/classes/Image.xml:598
msgid ""
"Source texture (before compression) is a regular texture. Default for all "
"textures."
msgstr ""
-#: doc/classes/Image.xml:600
+#: doc/classes/Image.xml:601
msgid "Source texture (before compression) is in sRGB space."
msgstr ""
-#: doc/classes/Image.xml:603
+#: doc/classes/Image.xml:604
msgid ""
"Source texture (before compression) is a normal texture (e.g. it can be "
"compressed into two channels)."
@@ -28268,6 +28363,17 @@ msgstr ""
#: doc/classes/Input.xml:43
msgid ""
+"Sends all input events which are in the current buffer to the game loop. "
+"These events may have been buffered as a result of accumulated input "
+"([method set_use_accumulated_input]) or agile input flushing ([member "
+"ProjectSettings.input_devices/buffering/agile_event_flushing]).\n"
+"The engine will already do this itself at key execution points (at least "
+"once per frame). However, this can be useful in advanced cases where you "
+"want precise control over the timing of event handling."
+msgstr ""
+
+#: doc/classes/Input.xml:50
+msgid ""
"Returns the acceleration of the device's accelerometer sensor, if the device "
"has one. Otherwise, the method returns [constant Vector3.ZERO].\n"
"Note this method returns an empty [Vector3] when running from the editor "
@@ -28279,7 +28385,7 @@ msgid ""
"the Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:53
+#: doc/classes/Input.xml:60
msgid ""
"Returns a value between 0 and 1 representing the raw intensity of the given "
"action, ignoring the action's deadzone. In most cases, you should use "
@@ -28289,7 +28395,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:62
+#: doc/classes/Input.xml:69
msgid ""
"Returns a value between 0 and 1 representing the intensity of the given "
"action. In a joypad, for example, the further away the axis (analog sticks "
@@ -28301,7 +28407,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:71
+#: doc/classes/Input.xml:78
msgid ""
"Get axis input by specifying two actions, one negative and one positive.\n"
"This is a shorthand for writing [code]Input."
@@ -28309,17 +28415,17 @@ msgid ""
"get_action_strength(\"negative_action\")[/code]."
msgstr ""
-#: doc/classes/Input.xml:78
+#: doc/classes/Input.xml:85
msgid ""
"Returns an [Array] containing the device IDs of all currently connected "
"joypads."
msgstr ""
-#: doc/classes/Input.xml:84
+#: doc/classes/Input.xml:91
msgid "Returns the currently assigned cursor shape (see [enum CursorShape])."
msgstr ""
-#: doc/classes/Input.xml:90
+#: doc/classes/Input.xml:97
msgid ""
"Returns the gravity of the device's accelerometer sensor, if the device has "
"one. Otherwise, the method returns [constant Vector3.ZERO].\n"
@@ -28329,7 +28435,7 @@ msgid ""
"Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:97
+#: doc/classes/Input.xml:104
msgid ""
"Returns the rotation rate in rad/s around a device's X, Y, and Z axes of the "
"gyroscope sensor, if the device has one. Otherwise, the method returns "
@@ -28338,53 +28444,53 @@ msgid ""
"it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:106
+#: doc/classes/Input.xml:113
msgid ""
"Returns the current value of the joypad axis at given index (see [enum "
"JoystickList])."
msgstr ""
-#: doc/classes/Input.xml:113
+#: doc/classes/Input.xml:120
msgid "Returns the index of the provided axis name."
msgstr ""
-#: doc/classes/Input.xml:120
+#: doc/classes/Input.xml:127
msgid ""
"Receives a [enum JoystickList] axis and returns its equivalent name as a "
"string."
msgstr ""
-#: doc/classes/Input.xml:127
+#: doc/classes/Input.xml:134
msgid "Returns the index of the provided button name."
msgstr ""
-#: doc/classes/Input.xml:134
+#: doc/classes/Input.xml:141
msgid ""
"Receives a gamepad button from [enum JoystickList] and returns its "
"equivalent name as a string."
msgstr ""
-#: doc/classes/Input.xml:141
+#: doc/classes/Input.xml:148
msgid ""
"Returns a SDL2-compatible device GUID on platforms that use gamepad "
"remapping. Returns [code]\"Default Gamepad\"[/code] otherwise."
msgstr ""
-#: doc/classes/Input.xml:148
+#: doc/classes/Input.xml:155
msgid "Returns the name of the joypad at the specified device index."
msgstr ""
-#: doc/classes/Input.xml:155
+#: doc/classes/Input.xml:162
msgid "Returns the duration of the current vibration effect in seconds."
msgstr ""
-#: doc/classes/Input.xml:162
+#: doc/classes/Input.xml:169
msgid ""
"Returns the strength of the joypad vibration: x is the strength of the weak "
"motor, and y is the strength of the strong motor."
msgstr ""
-#: doc/classes/Input.xml:168
+#: doc/classes/Input.xml:175
msgid ""
"Returns the mouse speed for the last time the cursor was moved, and this "
"until the next frame where the mouse moves. This means that even if the "
@@ -28392,7 +28498,7 @@ msgid ""
"motion."
msgstr ""
-#: doc/classes/Input.xml:174
+#: doc/classes/Input.xml:181
msgid ""
"Returns the magnetic field strength in micro-Tesla for all axes of the "
"device's magnetometer sensor, if the device has one. Otherwise, the method "
@@ -28401,17 +28507,17 @@ msgid ""
"platforms, it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:181
+#: doc/classes/Input.xml:188
msgid ""
"Returns mouse buttons as a bitmask. If multiple mouse buttons are pressed at "
"the same time, the bits are added together."
msgstr ""
-#: doc/classes/Input.xml:187
+#: doc/classes/Input.xml:194
msgid "Returns the mouse mode. See the constants for more information."
msgstr ""
-#: doc/classes/Input.xml:198
+#: doc/classes/Input.xml:205
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -28424,7 +28530,7 @@ msgid ""
"want (on the range of 0 to 1)."
msgstr ""
-#: doc/classes/Input.xml:208
+#: doc/classes/Input.xml:215
msgid ""
"Returns [code]true[/code] when the user starts pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user pressed down "
@@ -28436,7 +28542,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:218
+#: doc/classes/Input.xml:225
msgid ""
"Returns [code]true[/code] when the user stops pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user released the "
@@ -28446,7 +28552,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:227
+#: doc/classes/Input.xml:234
msgid ""
"Returns [code]true[/code] if you are pressing the action event. Note that if "
"an action has multiple buttons assigned and more than one of them is "
@@ -28457,13 +28563,13 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:236
+#: doc/classes/Input.xml:243
msgid ""
"Returns [code]true[/code] if you are pressing the joypad button (see [enum "
"JoystickList])."
msgstr ""
-#: doc/classes/Input.xml:243
+#: doc/classes/Input.xml:250
msgid ""
"Returns [code]true[/code] if the system knows the specified device. This "
"means that it sets all button and axis indices exactly as defined in [enum "
@@ -28471,19 +28577,19 @@ msgid ""
"but you can still retrieve events from them."
msgstr ""
-#: doc/classes/Input.xml:250
+#: doc/classes/Input.xml:257
msgid ""
"Returns [code]true[/code] if you are pressing the key. You can pass a [enum "
"KeyList] constant."
msgstr ""
-#: doc/classes/Input.xml:257
+#: doc/classes/Input.xml:264
msgid ""
"Returns [code]true[/code] if you are pressing the mouse button specified "
"with [enum ButtonList]."
msgstr ""
-#: doc/classes/Input.xml:267
+#: doc/classes/Input.xml:274
msgid ""
"Notifies the [Input] singleton that a connection has changed, to update the "
"state for the [code]device[/code] index.\n"
@@ -28492,7 +28598,7 @@ msgid ""
"triggered internally."
msgstr ""
-#: doc/classes/Input.xml:275
+#: doc/classes/Input.xml:282
msgid ""
"Feeds an [InputEvent] to the game. Can be used to artificially trigger input "
"events from code. Also generates [method Node._input] calls.\n"
@@ -28505,12 +28611,21 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Input.xml:289
+#: doc/classes/Input.xml:296
msgid ""
"Removes all mappings from the internal database that match the given GUID."
msgstr ""
-#: doc/classes/Input.xml:298
+#: doc/classes/Input.xml:303
+msgid ""
+"Sets the acceleration value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:313
msgid ""
"Sets a custom mouse cursor image, which is only visible inside the game "
"window. The hotspot can also be specified. Passing [code]null[/code] to the "
@@ -28525,7 +28640,7 @@ msgid ""
"compression mode can't be used for custom cursors."
msgstr ""
-#: doc/classes/Input.xml:309
+#: doc/classes/Input.xml:324
msgid ""
"Sets the default cursor shape to be used in the viewport instead of "
"[constant CURSOR_ARROW].\n"
@@ -28535,11 +28650,38 @@ msgid ""
"cursor immediately."
msgstr ""
-#: doc/classes/Input.xml:318
+#: doc/classes/Input.xml:333
+msgid ""
+"Sets the gravity value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:341
+msgid ""
+"Sets the value of the rotation rate of the gyroscope sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:349
+msgid ""
+"Sets the value of the magnetic field of the magnetometer sensor. Can be used "
+"for debugging on devices without a hardware sensor, for example in an editor "
+"on a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:357
msgid "Sets the mouse mode. See the constants for more information."
msgstr ""
-#: doc/classes/Input.xml:325
+#: doc/classes/Input.xml:364
msgid ""
"Enables or disables the accumulation of similar input events sent by the "
"operating system. When input accumulation is enabled, all input events "
@@ -28553,7 +28695,7 @@ msgid ""
"results that closely follow the actual input."
msgstr ""
-#: doc/classes/Input.xml:336
+#: doc/classes/Input.xml:375
msgid ""
"Starts to vibrate the joypad. Joypads usually come with two rumble motors, a "
"strong and a weak one. [code]weak_magnitude[/code] is the strength of the "
@@ -28566,34 +28708,34 @@ msgid ""
"few seconds."
msgstr ""
-#: doc/classes/Input.xml:344
+#: doc/classes/Input.xml:383
msgid "Stops the vibration of the joypad."
msgstr ""
-#: doc/classes/Input.xml:351
+#: doc/classes/Input.xml:390
msgid ""
"Vibrate Android and iOS devices.\n"
"[b]Note:[/b] It needs [code]VIBRATE[/code] permission for Android at export "
"settings. iOS does not support duration."
msgstr ""
-#: doc/classes/Input.xml:359
+#: doc/classes/Input.xml:398
msgid "Sets the mouse position to the specified vector."
msgstr ""
-#: doc/classes/Input.xml:368
+#: doc/classes/Input.xml:407
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
-#: doc/classes/Input.xml:374
+#: doc/classes/Input.xml:413
msgid "Makes the mouse cursor visible if it is hidden."
msgstr ""
-#: doc/classes/Input.xml:377
+#: doc/classes/Input.xml:416
msgid "Makes the mouse cursor hidden if it is visible."
msgstr ""
-#: doc/classes/Input.xml:380
+#: doc/classes/Input.xml:419
msgid ""
"Captures the mouse. The mouse will be hidden and its position locked at the "
"center of the screen.\n"
@@ -28601,83 +28743,83 @@ msgid ""
"need to use [member InputEventMouseMotion.relative]."
msgstr ""
-#: doc/classes/Input.xml:384
+#: doc/classes/Input.xml:423
msgid "Makes the mouse cursor visible but confines it to the game window."
msgstr ""
-#: doc/classes/Input.xml:387
+#: doc/classes/Input.xml:426
msgid "Arrow cursor. Standard, default pointing cursor."
msgstr ""
-#: doc/classes/Input.xml:390
+#: doc/classes/Input.xml:429
msgid ""
"I-beam cursor. Usually used to show where the text cursor will appear when "
"the mouse is clicked."
msgstr ""
-#: doc/classes/Input.xml:393
+#: doc/classes/Input.xml:432
msgid ""
"Pointing hand cursor. Usually used to indicate the pointer is over a link or "
"other interactable item."
msgstr ""
-#: doc/classes/Input.xml:396
+#: doc/classes/Input.xml:435
msgid ""
"Cross cursor. Typically appears over regions in which a drawing operation "
"can be performed or for selections."
msgstr ""
-#: doc/classes/Input.xml:399
+#: doc/classes/Input.xml:438
msgid ""
"Wait cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application is still usable during the "
"operation."
msgstr ""
-#: doc/classes/Input.xml:402
+#: doc/classes/Input.xml:441
msgid ""
"Busy cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application isn't usable during the "
"operation (e.g. something is blocking its main thread)."
msgstr ""
-#: doc/classes/Input.xml:405
+#: doc/classes/Input.xml:444
msgid "Drag cursor. Usually displayed when dragging something."
msgstr ""
-#: doc/classes/Input.xml:408
+#: doc/classes/Input.xml:447
msgid ""
"Can drop cursor. Usually displayed when dragging something to indicate that "
"it can be dropped at the current position."
msgstr ""
-#: doc/classes/Input.xml:411
+#: doc/classes/Input.xml:450
msgid ""
"Forbidden cursor. Indicates that the current action is forbidden (for "
"example, when dragging something) or that the control at a position is "
"disabled."
msgstr ""
-#: doc/classes/Input.xml:414
+#: doc/classes/Input.xml:453
msgid ""
"Vertical resize mouse cursor. A double-headed vertical arrow. It tells the "
"user they can resize the window or the panel vertically."
msgstr ""
-#: doc/classes/Input.xml:417
+#: doc/classes/Input.xml:456
msgid ""
"Horizontal resize mouse cursor. A double-headed horizontal arrow. It tells "
"the user they can resize the window or the panel horizontally."
msgstr ""
-#: doc/classes/Input.xml:420
+#: doc/classes/Input.xml:459
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the bottom left to the top right. It tells the user they can resize the "
"window or the panel both horizontally and vertically."
msgstr ""
-#: doc/classes/Input.xml:423
+#: doc/classes/Input.xml:462
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the top left to the bottom right, the opposite of [constant "
@@ -28685,23 +28827,23 @@ msgid ""
"both horizontally and vertically."
msgstr ""
-#: doc/classes/Input.xml:426
+#: doc/classes/Input.xml:465
msgid "Move cursor. Indicates that something can be moved."
msgstr ""
-#: doc/classes/Input.xml:429
+#: doc/classes/Input.xml:468
msgid ""
"Vertical split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_VSIZE]."
msgstr ""
-#: doc/classes/Input.xml:432
+#: doc/classes/Input.xml:471
msgid ""
"Horizontal split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_HSIZE]."
msgstr ""
-#: doc/classes/Input.xml:435
+#: doc/classes/Input.xml:474
msgid "Help cursor. Usually a question mark."
msgstr ""
@@ -29117,7 +29259,9 @@ msgid "The drag position."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -30430,7 +30574,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30495,22 +30640,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -30525,7 +30672,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -30533,19 +30680,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -30616,7 +30763,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30674,7 +30822,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -31960,14 +32110,21 @@ msgid "Default text [Color] of the [LinkButton]."
msgstr ""
#: doc/classes/LinkButton.xml:46
-msgid "Text [Color] used when the [LinkButton] is being hovered."
+msgid ""
+"Text [Color] used when the [LinkButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/LinkButton.xml:49
-msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgid "Text [Color] used when the [LinkButton] is being hovered."
msgstr ""
#: doc/classes/LinkButton.xml:52
+msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:55
msgid "The vertical space between the baseline of text and the underline."
msgstr ""
@@ -32460,26 +32617,33 @@ msgid "Text [Color] used when the [MenuButton] is disabled."
msgstr ""
#: doc/classes/MenuButton.xml:64
-msgid "Text [Color] used when the [MenuButton] is being hovered."
+msgid ""
+"Text [Color] used when the [MenuButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/MenuButton.xml:67
-msgid "Text [Color] used when the [MenuButton] is being pressed."
+msgid "Text [Color] used when the [MenuButton] is being hovered."
msgstr ""
#: doc/classes/MenuButton.xml:70
-msgid "[StyleBox] used when the [MenuButton] is being hovered."
+msgid "Text [Color] used when the [MenuButton] is being pressed."
msgstr ""
#: doc/classes/MenuButton.xml:73
-msgid "The horizontal space between [MenuButton]'s icon and text."
+msgid "[StyleBox] used when the [MenuButton] is being hovered."
msgstr ""
#: doc/classes/MenuButton.xml:76
-msgid "Default [StyleBox] for the [MenuButton]."
+msgid "The horizontal space between [MenuButton]'s icon and text."
msgstr ""
#: doc/classes/MenuButton.xml:79
+msgid "Default [StyleBox] for the [MenuButton]."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:82
msgid "[StyleBox] used when the [MenuButton] is being pressed."
msgstr ""
@@ -34207,7 +34371,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -37091,26 +37255,33 @@ msgid "Text [Color] used when the [OptionButton] is disabled."
msgstr ""
#: doc/classes/OptionButton.xml:212
-msgid "Text [Color] used when the [OptionButton] is being hovered."
+msgid ""
+"Text [Color] used when the [OptionButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/OptionButton.xml:215
-msgid "Text [Color] used when the [OptionButton] is being pressed."
+msgid "Text [Color] used when the [OptionButton] is being hovered."
msgstr ""
#: doc/classes/OptionButton.xml:218
-msgid "[StyleBox] used when the [OptionButton] is being hovered."
+msgid "Text [Color] used when the [OptionButton] is being pressed."
msgstr ""
#: doc/classes/OptionButton.xml:221
-msgid "The horizontal space between [OptionButton]'s icon and text."
+msgid "[StyleBox] used when the [OptionButton] is being hovered."
msgstr ""
#: doc/classes/OptionButton.xml:224
-msgid "Default [StyleBox] for the [OptionButton]."
+msgid "The horizontal space between [OptionButton]'s icon and text."
msgstr ""
#: doc/classes/OptionButton.xml:227
+msgid "Default [StyleBox] for the [OptionButton]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:230
msgid "[StyleBox] used when the [OptionButton] is being pressed."
msgstr ""
@@ -37516,7 +37687,7 @@ msgstr ""
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -37546,14 +37717,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -37563,7 +37734,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -40052,17 +40223,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -40080,11 +40277,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -40279,7 +40476,9 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-msgid "Returns the [Physics2DDirectBodyState] of the body."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
@@ -41082,6 +41281,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -41099,7 +41316,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -41213,7 +41430,9 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-msgid "Returns the [PhysicsDirectBodyState] of the body."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/PhysicsServer.xml:370
@@ -42195,27 +42414,27 @@ msgstr ""
msgid "Removes an element from the array by index."
msgstr ""
-#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolColorArray.xml:66
-#: doc/classes/PoolIntArray.xml:67 doc/classes/PoolRealArray.xml:67
-#: doc/classes/PoolStringArray.xml:74 doc/classes/PoolVector2Array.xml:67
-#: doc/classes/PoolVector3Array.xml:66
+#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolIntArray.xml:67
+#: doc/classes/PoolRealArray.xml:67
msgid ""
"Sets the size of the array. If the array is grown, reserves elements at the "
"end of the array. If the array is shrunk, truncates the array to the new "
-"size."
+"size.\n"
+"[b]Note:[/b] Added elements are not automatically initialized to 0 and will "
+"contain garbage, i.e. indeterminate values."
msgstr ""
-#: doc/classes/PoolByteArray.xml:121
+#: doc/classes/PoolByteArray.xml:122
msgid "Changes the byte at the given index."
msgstr ""
-#: doc/classes/PoolByteArray.xml:127 doc/classes/PoolColorArray.xml:79
-#: doc/classes/PoolRealArray.xml:80 doc/classes/PoolStringArray.xml:87
+#: doc/classes/PoolByteArray.xml:128 doc/classes/PoolColorArray.xml:79
+#: doc/classes/PoolRealArray.xml:81 doc/classes/PoolStringArray.xml:87
#: doc/classes/PoolVector2Array.xml:80 doc/classes/PoolVector3Array.xml:79
msgid "Returns the size of the array."
msgstr ""
-#: doc/classes/PoolByteArray.xml:135
+#: doc/classes/PoolByteArray.xml:136
msgid ""
"Returns the slice of the [PoolByteArray] between indices (inclusive) as a "
"new [PoolByteArray]. Any negative index is considered to be from the end of "
@@ -42247,6 +42466,14 @@ msgstr ""
msgid "Appends a value to the array."
msgstr ""
+#: doc/classes/PoolColorArray.xml:66 doc/classes/PoolStringArray.xml:74
+#: doc/classes/PoolVector2Array.xml:67 doc/classes/PoolVector3Array.xml:66
+msgid ""
+"Sets the size of the array. If the array is grown, reserves elements at the "
+"end of the array. If the array is shrunk, truncates the array to the new "
+"size."
+msgstr ""
+
#: doc/classes/PoolColorArray.xml:73
msgid "Changes the [Color] at the given index."
msgstr ""
@@ -42283,11 +42510,11 @@ msgid ""
"valid, or at the end of the array ([code]idx == size()[/code])."
msgstr ""
-#: doc/classes/PoolIntArray.xml:74
+#: doc/classes/PoolIntArray.xml:75
msgid "Changes the int at the given index."
msgstr ""
-#: doc/classes/PoolIntArray.xml:80
+#: doc/classes/PoolIntArray.xml:81
msgid "Returns the array size."
msgstr ""
@@ -42319,7 +42546,7 @@ msgstr ""
msgid "Appends a [PoolRealArray] at the end of this array."
msgstr ""
-#: doc/classes/PoolRealArray.xml:74
+#: doc/classes/PoolRealArray.xml:75
msgid "Changes the float at the given index."
msgstr ""
@@ -43586,18 +43813,6 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:204
msgid ""
-"The project data directory is used for storing project-specific data "
-"(metadata, shader cache, etc.).\n"
-"[b]Note:[/b] Restart the application after changing this setting.\n"
-"[b]Note:[/b] Changing this value can help on platforms or with third-party "
-"tools where specific directory patterns are disallowed. Only modify this "
-"setting if you know that your environment requires it, as changing the "
-"default can impact compatibility with some external tools or plugins which "
-"expect the default [code].import[/code] folder."
-msgstr ""
-
-#: doc/classes/ProjectSettings.xml:209
-msgid ""
"Specifies a file to override project settings. For example: [code]user://"
"custom_settings.cfg[/code]. See \"Overriding\" in the [ProjectSettings] "
"class description at the top for more information.\n"
@@ -43605,7 +43820,7 @@ msgid ""
"code] will still be read to override the project settings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:213
+#: doc/classes/ProjectSettings.xml:208
msgid ""
"If [code]true[/code], the project will save user data to its own user "
"directory (see [member application/config/custom_user_dir_name]). This "
@@ -43615,13 +43830,28 @@ msgid ""
"user data directory)/Godot/app_userdata/(project name)[/code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:216
+#: doc/classes/ProjectSettings.xml:211
+msgid ""
+"If [code]true[/code], the project will use a hidden directory ([code]."
+"import[/code]) for storing project-specific data (metadata, shader cache, "
+"etc.).\n"
+"If [code]false[/code], a non-hidden directory ([code]import[/code]) will be "
+"used instead.\n"
+"[b]Note:[/b] Restart the application after changing this setting.\n"
+"[b]Note:[/b] Changing this value can help on platforms or with third-party "
+"tools where hidden directory patterns are disallowed. Only modify this "
+"setting if you know that your environment requires it, as changing the "
+"default can impact compatibility with some external tools or plugins which "
+"expect the default [code].import[/code] folder."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:217
msgid ""
"Icon set in [code].ico[/code] format used on Windows to set the game's icon. "
"This is done automatically on start by calling [method OS.set_native_icon]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:219
+#: doc/classes/ProjectSettings.xml:220
msgid ""
"Time samples for frame deltas are subject to random variation introduced by "
"the platform, even when frames are displayed at regular intervals thanks to "
@@ -43635,14 +43865,14 @@ msgid ""
"adequate to render frames at the refresh rate."
msgstr ""
-#: doc/classes/ProjectSettings.xml:224
+#: doc/classes/ProjectSettings.xml:225
msgid ""
"[b]Experimental.[/b] Shifts the measurement of delta time for each frame to "
"just after the drawing has taken place. This may lead to more consistent "
"deltas and a reduction in frame stutters."
msgstr ""
-#: doc/classes/ProjectSettings.xml:227
+#: doc/classes/ProjectSettings.xml:228
msgid ""
"If [code]true[/code], disables printing to standard error. If [code]true[/"
"code], this also hides error and warning messages printed by [method "
@@ -43651,7 +43881,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:231
+#: doc/classes/ProjectSettings.xml:232
msgid ""
"If [code]true[/code], disables printing to standard output. This is "
"equivalent to starting the editor or project with the [code]--quiet[/code] "
@@ -43659,7 +43889,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:235
+#: doc/classes/ProjectSettings.xml:236
msgid ""
"If [code]true[/code], flushes the standard output stream every time a line "
"is printed. This affects both terminal logging and file logging.\n"
@@ -43675,20 +43905,20 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:241
+#: doc/classes/ProjectSettings.xml:242
msgid ""
"Debug build override for [member application/run/flush_stdout_on_print], as "
"performance is less important during debugging.\n"
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:245
+#: doc/classes/ProjectSettings.xml:246
msgid ""
"Forces a delay between frames in the main loop (in milliseconds). This may "
"be useful if you plan to disable vertical synchronization."
msgstr ""
-#: doc/classes/ProjectSettings.xml:248
+#: doc/classes/ProjectSettings.xml:249
msgid ""
"If [code]true[/code], enables low-processor usage mode. This setting only "
"works on desktop platforms. The screen is not redrawn if nothing changes "
@@ -43696,75 +43926,81 @@ msgid ""
"useless (and can hurt performance) in most games."
msgstr ""
-#: doc/classes/ProjectSettings.xml:251
+#: doc/classes/ProjectSettings.xml:252
msgid ""
"Amount of sleeping between frames when the low-processor usage mode is "
"enabled (in microseconds). Higher values will result in lower CPU usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:254
+#: doc/classes/ProjectSettings.xml:255
msgid "Path to the main scene file that will be loaded when the project runs."
msgstr ""
-#: doc/classes/ProjectSettings.xml:257 doc/classes/ProjectSettings.xml:260
+#: doc/classes/ProjectSettings.xml:258 doc/classes/ProjectSettings.xml:261
msgid ""
"Audio buses will disable automatically when sound goes below a given dB "
"threshold for a given time. This saves CPU as effects assigned to that bus "
"will no longer do any processing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:263
+#: doc/classes/ProjectSettings.xml:264
msgid ""
"Default [AudioBusLayout] resource file to use in the project, unless "
"overridden by the scene."
msgstr ""
-#: doc/classes/ProjectSettings.xml:266
+#: doc/classes/ProjectSettings.xml:267
msgid ""
"Specifies the audio driver to use. This setting is platform-dependent as "
"each platform supports different audio drivers. If left empty, the default "
"audio driver will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:269
+#: doc/classes/ProjectSettings.xml:270
msgid ""
"If [code]true[/code], microphone input will be allowed. This requires "
"appropriate permissions to be set when exporting to Android or iOS."
msgstr ""
-#: doc/classes/ProjectSettings.xml:272
+#: doc/classes/ProjectSettings.xml:273
msgid ""
"The mixing rate used for audio (in Hz). In general, it's better to not touch "
"this and leave it to the host operating system."
msgstr ""
-#: doc/classes/ProjectSettings.xml:275
+#: doc/classes/ProjectSettings.xml:276
msgid ""
"Safer override for [member audio/mix_rate] in the Web platform. Here "
"[code]0[/code] means \"let the browser choose\" (since some browsers do not "
"like forcing the mix rate)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:278
+#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:281
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:284
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:287
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43774,7 +44010,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:290
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43784,27 +44020,27 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:293
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:296
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
-#: doc/classes/ProjectSettings.xml:299
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:302
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -43812,81 +44048,81 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:305
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:308
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:311
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:314
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:317
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr ""
-#: doc/classes/ProjectSettings.xml:320
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:323
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:326
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:329
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:332
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:335
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:338
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:341
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -43894,109 +44130,109 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:344
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:347
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:350
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:353
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:356
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:359
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:362
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:365
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:368
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:371
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:374
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:377
+#: doc/classes/ProjectSettings.xml:380
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:380
+#: doc/classes/ProjectSettings.xml:383
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:383
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:386
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:389
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:392
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:395
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:398
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -44007,91 +44243,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:403
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:406
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:409
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:412
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:415
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:418
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:421
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:424
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:427
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:430
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:433
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:436
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:439
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr ""
-#: doc/classes/ProjectSettings.xml:442
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:445
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:448
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:451
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -44100,13 +44336,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:455
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:458
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -44116,7 +44352,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:463
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -44124,19 +44360,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:468
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:472
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:476
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -44150,45 +44386,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:481
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:484
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:488
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:491
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:494
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:497
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:500
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -44197,7 +44433,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:503
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -44208,7 +44444,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:507
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -44224,14 +44460,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:515
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:518
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -44239,49 +44475,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:521
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:524
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:529
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:532
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:535
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:538
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:541
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:544
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:547
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -44290,7 +44526,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:551
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44298,7 +44534,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:555
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44306,7 +44542,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:559
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44316,7 +44552,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:563
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -44325,7 +44561,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:567
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -44334,7 +44570,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:571
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44344,7 +44580,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:575
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44352,7 +44588,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:579
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -44362,7 +44598,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:583
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -44372,7 +44608,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:587
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44380,7 +44616,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:591
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -44389,7 +44625,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:595
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44397,7 +44633,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:599
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -44409,477 +44645,477 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:605
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:608
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:611
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:614
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:617
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:620
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:623
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:626
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:629
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:632
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:635
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:638
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:641
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:644
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:647
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:650
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:653
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:656
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:659
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:662
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:665
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:668
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:671
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:674
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:677
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:680
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:683
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:686
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:689
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:692
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:695
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:698
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:701
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:704
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:707
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:710
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:713
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:716
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:719
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:722
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:725
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:728
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:731
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:734
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:737
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:740
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:743
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:746
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:749
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:752
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:755
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:758
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:761
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:764
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:767
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:770
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:773
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:776
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:779
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:782
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:785
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:788
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:791
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:794
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:797
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:800
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:803
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:806
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:809
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:812
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:815
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:818
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:821
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:824
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:827
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:830
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:833
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:836
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:839
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:842
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:845
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:848
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:851
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:854
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:857
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:860
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:863
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:866
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:869
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:872
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:875
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:878
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:881
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr ""
-#: doc/classes/ProjectSettings.xml:884
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:887
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:890
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:893
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:896
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:899
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:902
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:905
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:908
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:911
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:914
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:917
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:920
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:923
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:926
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:929
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:932
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:935
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:938
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:941
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:946
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:949
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -44887,92 +45123,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:952
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:955
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:958
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:961
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:964
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:967
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:970
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:973
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:976
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:979
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:982
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:985
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:988
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:991
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:994
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:997
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1000
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1003
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -44982,33 +45218,33 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1007
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1010
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1013
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1017
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1021
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45021,7 +45257,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1025
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45033,7 +45269,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1033
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45045,7 +45281,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1041
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45058,7 +45294,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1045
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -45066,28 +45302,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1049
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1053
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1056
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1059
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -45097,25 +45333,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1063
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1066
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1069
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1072
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45128,7 +45364,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1076
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45140,7 +45376,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1084
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45152,7 +45388,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1092
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45165,13 +45401,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1096
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1099
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -45179,11 +45415,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1103
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1106
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -45197,7 +45433,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1112
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -45206,7 +45442,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1116
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -45222,7 +45458,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1121
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -45232,7 +45468,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1125
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45242,7 +45478,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1129
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -45253,7 +45489,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1133
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45263,7 +45499,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1137
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -45271,7 +45507,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1141
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -45282,7 +45518,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1145
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -45297,7 +45533,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1151
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -45306,13 +45542,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1156
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1159
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -45321,7 +45557,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1162
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -45331,7 +45567,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1165
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -45343,7 +45579,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1168
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -45353,24 +45589,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1171
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1174
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1177
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1180
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -45379,7 +45615,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1183
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -45387,7 +45623,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1186
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -45396,7 +45632,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1189
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -45406,7 +45642,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1193
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -45414,31 +45650,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1197
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1200
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1203
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1206
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1209
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -45446,7 +45682,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1212
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -45456,46 +45692,53 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1215
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1218
+#: doc/classes/ProjectSettings.xml:1221
+msgid ""
+"iOS specific override for [member rendering/gles2/compatibility/"
+"disable_half_float], due to poor support for half-float vertex compression "
+"on many devices."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1224
msgid ""
-"If [code]true[/code] and available on the target device, enables high "
-"floating point precision for all shader computations in GLES2.\n"
+"If [code]true[/code] and available on the target Android device, enables "
+"high floating point precision for all shader computations in GLES2.\n"
"[b]Warning:[/b] High floating point precision can be extremely slow on older "
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1225
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1228
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1231
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1234
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -45503,7 +45746,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1237
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -45513,7 +45756,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1240
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -45522,7 +45765,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1243
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -45531,20 +45774,20 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1246
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1249
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1252
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -45553,7 +45796,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1255
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -45561,7 +45804,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1258
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -45570,7 +45813,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -45580,20 +45823,20 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1267
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1274
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -45602,13 +45845,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -45618,46 +45861,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1293
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1296
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1299
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1302
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1305
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -45667,7 +45910,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -45679,7 +45922,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -45687,7 +45930,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1316
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -45695,7 +45938,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -45704,7 +45947,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1323
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -45718,7 +45961,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1328
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -45728,7 +45971,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1331
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -45737,7 +45980,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1334
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -45747,54 +45990,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1337
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1340
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1343
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1346
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1349
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1352
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1355
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1358
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -45805,61 +46048,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1365
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1368
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1371
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1374
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1377
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1380
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1383
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1386
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -45870,7 +46113,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -45879,26 +46122,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1393 doc/classes/ProjectSettings.xml:1396
#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1405
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1408
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1411
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -45909,20 +46152,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1418
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -45934,52 +46177,52 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1428
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1435
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1438
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1441
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1444
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1447
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1450
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1453
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -45987,7 +46230,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -45997,10 +46240,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -46009,10 +46252,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -46021,10 +46264,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -46033,10 +46276,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -46045,10 +46288,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -46712,40 +46955,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr ""
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -46753,14 +47010,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -49095,6 +49352,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -49112,7 +49385,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -49120,11 +49393,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -49134,19 +49407,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -54561,20 +54834,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -54585,28 +54863,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -54618,19 +54896,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
@@ -57417,26 +57695,33 @@ msgid "Text [Color] used when the [ToolButton] is disabled."
msgstr ""
#: doc/classes/ToolButton.xml:39
-msgid "Text [Color] used when the [ToolButton] is being hovered."
+msgid ""
+"Text [Color] used when the [ToolButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/ToolButton.xml:42
-msgid "Text [Color] used when the [ToolButton] is being pressed."
+msgid "Text [Color] used when the [ToolButton] is being hovered."
msgstr ""
#: doc/classes/ToolButton.xml:45
-msgid "[StyleBox] used when the [ToolButton] is being hovered."
+msgid "Text [Color] used when the [ToolButton] is being pressed."
msgstr ""
#: doc/classes/ToolButton.xml:48
-msgid "The horizontal space between [ToolButton]'s icon and text."
+msgid "[StyleBox] used when the [ToolButton] is being hovered."
msgstr ""
#: doc/classes/ToolButton.xml:51
-msgid "Default [StyleBox] for the [ToolButton]."
+msgid "The horizontal space between [ToolButton]'s icon and text."
msgstr ""
#: doc/classes/ToolButton.xml:54
+msgid "Default [StyleBox] for the [ToolButton]."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:57
msgid "[StyleBox] used when the [ToolButton] is being pressed."
msgstr ""
diff --git a/doc/translations/es.po b/doc/translations/es.po
index 2b509c25cc..34325a7c1d 100644
--- a/doc/translations/es.po
+++ b/doc/translations/es.po
@@ -22,12 +22,15 @@
# Cameron Toms <cameron.toms@gmail.com>, 2021.
# Roderick Lagunas <rdcklinux@gmail.com>, 2021.
# Erick Figueroa <querecuto@hotmail.com>, 2021.
+# Anderson Guzman Abreu <chicobello1111@gmail.com>, 2021.
+# Fonspem None <fonspem@gmail.com>, 2021.
+# Andres David Calderón Jimenez <davidcampeon2007@gmail.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2021-08-12 02:34+0000\n"
-"Last-Translator: Javier Ocampos <xavier.ocampos@gmail.com>\n"
+"PO-Revision-Date: 2021-10-31 13:39+0000\n"
+"Last-Translator: Andres David Calderón Jimenez <davidcampeon2007@gmail.com>\n"
"Language-Team: Spanish <https://hosted.weblate.org/projects/godot-engine/"
"godot-class-reference/es/>\n"
"Language: es\n"
@@ -35,45 +38,45 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.8-dev\n"
+"X-Generator: Weblate 4.9-dev\n"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Description"
msgstr "Descripción"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Tutorials"
msgstr "Tutoriales"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Properties"
msgstr "Propiedades"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Methods"
msgstr "Métodos"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Theme Properties"
msgstr "Propiedades del Theme"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Signals"
msgstr "Señales"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Enumerations"
msgstr "Enumeraciones"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Constants"
msgstr "Constantes"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Property Descriptions"
msgstr "Descripciones de Propiedades"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Method Descriptions"
msgstr "Descripciones de Métodos"
@@ -87,9 +90,9 @@ msgid ""
"utilities. Everything else is provided by objects. (Keywords: builtin, built "
"in, global functions.)"
msgstr ""
-"Lista de funciones GDScript incorporadas primordiales. Funciunes Math y "
-"otras utilidades. Todo lo demás está proporcionado por objetos. (Palabras "
-"clave: incorporado, includido, funciones globales.)"
+"Lista de funciones primordiales e incorporadas de GDScript. Funciones "
+"matemáticas y otras utilidades. Todo lo demás está proporcionado por "
+"objetos. (Palabras clave: incorporado, includido, funciones globales.)"
#: modules/gdscript/doc_classes/@GDScript.xml:19
msgid ""
@@ -133,7 +136,6 @@ msgstr ""
"definidas en [Color]."
#: modules/gdscript/doc_classes/@GDScript.xml:45
-#, fuzzy
msgid ""
"Returns the absolute value of parameter [code]s[/code] (i.e. positive "
"value).\n"
@@ -144,8 +146,7 @@ msgstr ""
"Devuelve el valor absoluto del parámetro [code]s[/code] (es decir, un valor "
"positivo).\n"
"[codeblock]\n"
-"#a es 1\n"
-"a = abs(-1)\n"
+"a = abs(-1) #a es 1\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:55
@@ -417,7 +418,7 @@ msgstr "Convierte de decibeles a energía lineal (audio)."
#: modules/gdscript/doc_classes/@GDScript.xml:218
msgid "Deprecated alias for [method step_decimals]."
-msgstr ""
+msgstr "Alias obsoleto del [method step_decimals]."
#: modules/gdscript/doc_classes/@GDScript.xml:227
#, fuzzy
@@ -438,27 +439,25 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:238
-#, fuzzy
msgid ""
"Converts an angle expressed in degrees to radians.\n"
"[codeblock]\n"
"r = deg2rad(180) # r is 3.141593\n"
"[/codeblock]"
msgstr ""
-"Convierte un ángulo expresado en grados en radianes.\n"
+"Convierte un ángulo expresado en grados a radianes.\n"
"[codeblock]\n"
"# r es 3.141593\n"
"r = deg2rad(180)\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:248
-#, fuzzy
msgid ""
"Converts a dictionary (previously created with [method inst2dict]) back to "
"an instance. Useful for deserializing."
msgstr ""
-"Convierte una instancia previamente convertida en un diccionario, de nuevo "
-"en una instancia. Es útil para deserializar."
+"Convierte un diccionario (que fue creado previamente con [method inst2dict]) "
+"de nuevo a una instancia. Es útil para deserializar."
#: modules/gdscript/doc_classes/@GDScript.xml:256
msgid ""
@@ -1211,6 +1210,16 @@ msgid ""
"distinguishes them from print messages used for debugging purposes, while "
"also displaying a stack trace when an error or warning is printed."
msgstr ""
+"convierte uno o mas argumentos de cualquior tipo a una cadena de texto de la "
+"mejor manera posible, y los muestra en la consola.\n"
+"[codeblock]\n"
+"a=[1,2,3]\n"
+"print(\"a,\"=\",a)#Muestra a=[1,2,3]\n"
+"[/codeblock]\n"
+"[b]Note:[/b] considera usar [method push_error] y [method push_warning] para "
+"mostrar errores mensajes de advertencia en vez de [method print]. esto los "
+"distingue de mensajes en la consola usados por motivos de depuración, "
+"mientras muestra un trazo de cuando un error o advertencia se muestra."
#: modules/gdscript/doc_classes/@GDScript.xml:702
msgid "Like [method print], but prints only when used in debug mode."
@@ -2573,6 +2582,8 @@ msgstr "Tecla Dirección Derecha."
msgid ""
"Media back key. Not to be confused with the Back button on an Android device."
msgstr ""
+"Tecla para atrás en multimedia. No confundirlo con el botón hacia atrás en "
+"un dispositivo Android."
#: doc/classes/@GlobalScope.xml:344
#, fuzzy
@@ -4571,22 +4582,31 @@ msgstr ""
"Devuelve [code]true[/code] si este [AABB] contiene completamente a otro."
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
-msgstr "Devuelve este [AABB] ampliado para incluir un punto dado."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
+msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr "Devuelve el volumen del [AABB]."
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr "Obtiene la posición de los 8 puntos finales del [AABB] en el espacio."
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr "Devuelve el eje más largo normalizado del [AABB]."
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
@@ -4594,15 +4614,15 @@ msgstr ""
"Devuelve el indice del eje mas grande de [AABB] (segun la constante "
"[Vector3] [code]AXIS_*[/code])."
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr "Devuelve la longitud escalar del eje más largo del [AABB]."
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr "Devuelve el eje más corto normalizado de la [AABB]."
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
@@ -4610,11 +4630,11 @@ msgstr ""
"Devuelve el índice del eje más corto del [AABB] (según el enumerado "
"[Vector3]::AXIS* )."
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr "Devuelve la longitud escalar del eje más corto del [AABB]."
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
@@ -4622,7 +4642,7 @@ msgstr ""
"Devuelve el punto de apoyo en una dirección determinada. Esto es útil para "
"los algoritmos de detección de colisiones."
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
@@ -4630,19 +4650,19 @@ msgstr ""
"Devuelve una copia de la [AABB] crecida una cantidad dada de unidades hacia "
"todos los lados."
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr "Devuelve [code]true[/code] si el [AABB] es plano o vacío."
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr "Devuelve [code]true[/code] si el [AABB] está vacío."
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr "Devuelve [code]true[/code] si el [AABB] contiene un punto."
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
@@ -4650,16 +4670,16 @@ msgstr ""
"Devuelve la intersección entre dos [AABB]. Un AABB vacío (tamaño 0,0,0) se "
"devuelve al fallar."
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr "Devuelve [code]true[/code] si el [AABB] se solapa con otro."
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
"Devuelve [code]true[/code] si el [AABB] está a ambos lados de un plano."
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
@@ -4667,7 +4687,7 @@ msgstr ""
"Devuelve [code]true[/code] si el [AABB] intersecta el segmento de línea "
"entre [code]from[/code] y [code]to[/code]."
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
@@ -4677,14 +4697,14 @@ msgstr ""
"aproximadamente iguales, llamando al [método @GDScript.is_equal_aprox] en "
"cada componente."
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
"Devuelve un [AABB] más grande que contiene tanto este [AABB] como el "
"[code]with[/code]."
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
@@ -4692,12 +4712,12 @@ msgstr ""
"Esquina final. Esto se calcula como [code]position + size[/code]. Cambiar "
"esta propiedad cambia el tamaño."
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr ""
"Esquina de inicio. Normalmente tiene valores inferiores a [member end]."
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
#, fuzzy
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
@@ -4763,6 +4783,10 @@ msgid ""
"may cause a crash. If you wish to hide it or any of its children, use their "
"[member CanvasItem.visible] property."
msgstr ""
+"Retorna la instancia de el [Button] aceptar. \n"
+"[b]Warning:[/b] Esto es un nodo interno requerido, removerlo y liberarlo "
+"podría causar un crasheo. Si deseas esconder este o alguno de sus hijos, "
+"utiliza su propiedad [member CanvasItem.visible]."
#: doc/classes/AcceptDialog.xml:49
msgid ""
@@ -6163,7 +6187,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -7984,24 +8008,28 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
#: doc/classes/Area.xml:17
#, fuzzy
msgid ""
-"Returns a list of intersecting [Area]s. For performance reasons (collisions "
-"are all processed at the same time) this list is modified once during the "
-"physics step, not immediately after objects are moved. Consider using "
-"signals instead."
+"Returns a list of intersecting [Area]s. The overlapping area's [member "
+"CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-"Devuelve una lista de los [Area2D] que se intersectan. Por razones de "
+"Devuelve una lista de [PhysicsBody2D] que se intersectan. Por razones de "
"rendimiento (las colisiones se procesan todas al mismo tiempo) esta lista se "
"modifica una vez durante el paso de la física, no inmediatamente después de "
-"que los objetos se muevan. Considere la posibilidad de usar señales en su "
-"lugar."
+"que los objetos se muevan. Considere la posibilidad de utilizar señales en "
+"su lugar."
-#: doc/classes/Area.xml:23
+#: doc/classes/Area.xml:24
#, fuzzy
msgid ""
-"Returns a list of intersecting [PhysicsBody]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody]s. The overlapping body's "
+"[member CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
"Devuelve una lista de [PhysicsBody2D] que se intersectan. Por razones de "
"rendimiento (las colisiones se procesan todas al mismo tiempo) esta lista se "
@@ -8009,7 +8037,7 @@ msgstr ""
"que los objetos se muevan. Considere la posibilidad de utilizar señales en "
"su lugar."
-#: doc/classes/Area.xml:30
+#: doc/classes/Area.xml:32
#, fuzzy
msgid ""
"If [code]true[/code], the given area overlaps the Area.\n"
@@ -8023,7 +8051,7 @@ msgstr ""
"una vez por cuadro y antes del paso de física. Considere la posibilidad de "
"utilizar señales en su lugar."
-#: doc/classes/Area.xml:38
+#: doc/classes/Area.xml:40
#, fuzzy
msgid ""
"If [code]true[/code], the given physics body overlaps the Area.\n"
@@ -8044,7 +8072,7 @@ msgstr ""
"registran sus piezas con formas de colisión como un cuerpo de física "
"virtual)."
-#: doc/classes/Area.xml:46
+#: doc/classes/Area.xml:48
#, fuzzy
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
@@ -8056,18 +8084,18 @@ msgstr ""
"velocidad angular perdida por segundo. Los valores van desde [code]0[/code] "
"(sin amortiguación) hasta [code]1[/code] (amortiguación completa)."
-#: doc/classes/Area.xml:50 doc/classes/Area2D.xml:52
+#: doc/classes/Area.xml:52 doc/classes/Area2D.xml:54
msgid "The name of the area's audio bus."
msgstr "El nombre del bus de audio de la zona."
-#: doc/classes/Area.xml:53 doc/classes/Area2D.xml:55
+#: doc/classes/Area.xml:55 doc/classes/Area2D.xml:57
msgid ""
"If [code]true[/code], the area's audio bus overrides the default audio bus."
msgstr ""
"Si [code]true[/code], el área del bus de audio sobrescribe el bus de audio "
"por defecto."
-#: doc/classes/Area.xml:56
+#: doc/classes/Area.xml:58
#, fuzzy
msgid ""
"The area's gravity intensity (in meters per second squared). This value "
@@ -8078,7 +8106,7 @@ msgstr ""
"multiplica el vector de gravedad. Esto es útil para alterar la fuerza de "
"gravedad sin alterar su dirección."
-#: doc/classes/Area.xml:59 doc/classes/Area2D.xml:61
+#: doc/classes/Area.xml:61 doc/classes/Area2D.xml:63
msgid ""
"The falloff factor for point gravity. The greater the value, the faster "
"gravity decreases with distance."
@@ -8086,7 +8114,7 @@ msgstr ""
"El factor de caída para la gravedad puntual. Cuanto mayor es el valor, más "
"rápido disminuye la gravedad con la distancia."
-#: doc/classes/Area.xml:62 doc/classes/Area2D.xml:64
+#: doc/classes/Area.xml:64 doc/classes/Area2D.xml:66
msgid ""
"If [code]true[/code], gravity is calculated from a point (set via [member "
"gravity_vec]). See also [member space_override]."
@@ -8095,7 +8123,7 @@ msgstr ""
"(establecido mediante [member gravity_vec]). Ver también [member "
"space_override]."
-#: doc/classes/Area.xml:65 doc/classes/Area2D.xml:67
+#: doc/classes/Area.xml:67 doc/classes/Area2D.xml:69
msgid ""
"The area's gravity vector (not normalized). If gravity is a point (see "
"[member gravity_point]), this will be the point of attraction."
@@ -8103,7 +8131,7 @@ msgstr ""
"El vector de gravedad del área (no normalizado). Si la gravedad es un punto "
"(véase [member gravity_point]), éste será el punto de atracción."
-#: doc/classes/Area.xml:68
+#: doc/classes/Area.xml:70
#, fuzzy
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
@@ -8115,12 +8143,12 @@ msgstr ""
"velocidad lineal perdida por segundo. Los valores van desde [code]0[/code] "
"(sin amortiguación) hasta [code]1[/code] (amortiguación completa)."
-#: doc/classes/Area.xml:72 doc/classes/Area2D.xml:74
+#: doc/classes/Area.xml:74 doc/classes/Area2D.xml:76
msgid "If [code]true[/code], other monitoring areas can detect this area."
msgstr ""
"Si [code]true[/code], otras áreas de monitoreo pueden detectar esta área."
-#: doc/classes/Area.xml:75 doc/classes/Area2D.xml:77
+#: doc/classes/Area.xml:77 doc/classes/Area2D.xml:79
msgid ""
"If [code]true[/code], the area detects bodies or areas entering and exiting "
"it."
@@ -8128,12 +8156,12 @@ msgstr ""
"Si [code]true[/code], el área detecta cuerpos o áreas que entran y salen de "
"ella."
-#: doc/classes/Area.xml:78 doc/classes/Area2D.xml:80
+#: doc/classes/Area.xml:80 doc/classes/Area2D.xml:82
msgid "The area's priority. Higher priority areas are processed first."
msgstr ""
"La prioridad de la zona. Las áreas de mayor prioridad se procesan primero."
-#: doc/classes/Area.xml:81
+#: doc/classes/Area.xml:83
msgid ""
"The degree to which this area applies reverb to its associated audio. Ranges "
"from [code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
@@ -8141,18 +8169,18 @@ msgstr ""
"El grado en que esta área aplica reverberación a su audio asociado. Va de "
"[code]0[/code] a [code]1[/code] con una precisión de [code]0.1[/code]."
-#: doc/classes/Area.xml:84
+#: doc/classes/Area.xml:86
msgid "If [code]true[/code], the area applies reverb to its associated audio."
msgstr ""
"Si [code]true[/code], el área aplica reverberación a su audio asociado."
-#: doc/classes/Area.xml:87
+#: doc/classes/Area.xml:89
msgid "The reverb bus name to use for this area's associated audio."
msgstr ""
"El nombre del bus de reverberación que se usará para el audio asociado a "
"esta área."
-#: doc/classes/Area.xml:90
+#: doc/classes/Area.xml:92
msgid ""
"The degree to which this area's reverb is a uniform effect. Ranges from "
"[code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
@@ -8160,7 +8188,7 @@ msgstr ""
"El grado de reverberación de esta área es un efecto uniforme. Va de [code]0[/"
"code] a [code]1[/code] con una precisión de [code]0,1[/code]."
-#: doc/classes/Area.xml:93 doc/classes/Area2D.xml:83
+#: doc/classes/Area.xml:95 doc/classes/Area2D.xml:85
msgid ""
"Override mode for gravity and damping calculations within this area. See "
"[enum SpaceOverride] for possible values."
@@ -8168,7 +8196,7 @@ msgstr ""
"Modo de sobreescritura para los cálculos de gravedad y amortiguación dentro "
"de esta área. Ver [enum SpaceOverride] para los posibles valores."
-#: doc/classes/Area.xml:100
+#: doc/classes/Area.xml:102
#, fuzzy
msgid ""
"Emitted when another Area enters this Area. Requires [member monitoring] to "
@@ -8179,7 +8207,7 @@ msgstr ""
"Requiere que [member input_pickable] sea [code]true[/code] y que al menos un "
"bit [code]collision_layer[/code] esté activado."
-#: doc/classes/Area.xml:107
+#: doc/classes/Area.xml:109
#, fuzzy
msgid ""
"Emitted when another Area exits this Area. Requires [member monitoring] to "
@@ -8190,7 +8218,7 @@ msgstr ""
"Requiere que [member input_pickable] sea [code]true[/code] y que al menos un "
"bit [code]collision_layer[/code] esté activado."
-#: doc/classes/Area.xml:117 doc/classes/Area.xml:130
+#: doc/classes/Area.xml:119 doc/classes/Area.xml:132
msgid ""
"Emitted when one of another Area's [Shape]s enters one of this Area's "
"[Shape]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -8205,7 +8233,7 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:140
+#: doc/classes/Area.xml:142
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] enters this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -8214,7 +8242,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:147
+#: doc/classes/Area.xml:149
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] exits this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -8223,7 +8251,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:157 doc/classes/Area.xml:170
+#: doc/classes/Area.xml:159 doc/classes/Area.xml:172
msgid ""
"Emitted when one of a [PhysicsBody] or [GridMap]'s [Shape]s enters one of "
"this Area's [Shape]s. Requires [member monitoring] to be set to [code]true[/"
@@ -8240,11 +8268,11 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:180 doc/classes/Area2D.xml:170
+#: doc/classes/Area.xml:182 doc/classes/Area2D.xml:172
msgid "This area does not affect gravity/damping."
msgstr "Esta zona no afecta a la gravedad/amortiguación."
-#: doc/classes/Area.xml:183 doc/classes/Area2D.xml:173
+#: doc/classes/Area.xml:185 doc/classes/Area2D.xml:175
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order)."
@@ -8252,7 +8280,7 @@ msgstr ""
"Esta área añade sus valores de gravedad/amortiguación a lo que se ha "
"calculado hasta ahora (en el orden [member priority])."
-#: doc/classes/Area.xml:186 doc/classes/Area2D.xml:176
+#: doc/classes/Area.xml:188 doc/classes/Area2D.xml:178
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order), ignoring any lower priority areas."
@@ -8261,7 +8289,7 @@ msgstr ""
"calculado hasta ahora (en el orden [member priority]), ignorando cualquier "
"área de menor prioridad."
-#: doc/classes/Area.xml:189 doc/classes/Area2D.xml:179
+#: doc/classes/Area.xml:191 doc/classes/Area2D.xml:181
msgid ""
"This area replaces any gravity/damping, even the defaults, ignoring any "
"lower priority areas."
@@ -8269,7 +8297,7 @@ msgstr ""
"Esta área reemplaza cualquier gravedad/amortiguación, incluso las "
"predeterminadas, ignorando cualquier área de menor prioridad."
-#: doc/classes/Area.xml:192 doc/classes/Area2D.xml:182
+#: doc/classes/Area.xml:194 doc/classes/Area2D.xml:184
msgid ""
"This area replaces any gravity/damping calculated so far (in [member "
"priority] order), but keeps calculating the rest of the areas."
@@ -8314,11 +8342,14 @@ msgid "https://godotengine.org/asset-library/asset/120"
msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
#: doc/classes/Area2D.xml:19
+#, fuzzy
msgid ""
-"Returns a list of intersecting [Area2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [Area2D]s. The overlapping area's [member "
+"CollisionObject2D.collision_layer] must be part of this area's [member "
+"CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
"Devuelve una lista de los [Area2D] que se intersectan. Por razones de "
"rendimiento (las colisiones se procesan todas al mismo tiempo) esta lista se "
@@ -8326,12 +8357,15 @@ msgstr ""
"que los objetos se muevan. Considere la posibilidad de usar señales en su "
"lugar."
-#: doc/classes/Area2D.xml:25
+#: doc/classes/Area2D.xml:26
+#, fuzzy
msgid ""
-"Returns a list of intersecting [PhysicsBody2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody2D]s. The overlapping body's "
+"[member CollisionObject2D.collision_layer] must be part of this area's "
+"[member CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
"Devuelve una lista de [PhysicsBody2D] que se intersectan. Por razones de "
"rendimiento (las colisiones se procesan todas al mismo tiempo) esta lista se "
@@ -8339,7 +8373,7 @@ msgstr ""
"que los objetos se muevan. Considere la posibilidad de utilizar señales en "
"su lugar."
-#: doc/classes/Area2D.xml:32
+#: doc/classes/Area2D.xml:34
#, fuzzy
msgid ""
"If [code]true[/code], the given area overlaps the Area2D.\n"
@@ -8353,7 +8387,7 @@ msgstr ""
"una vez por cuadro y antes del paso de física. Considere la posibilidad de "
"utilizar señales en su lugar."
-#: doc/classes/Area2D.xml:40
+#: doc/classes/Area2D.xml:42
#, fuzzy
msgid ""
"If [code]true[/code], the given physics body overlaps the Area2D.\n"
@@ -8373,7 +8407,7 @@ msgstr ""
"de [TileMap] (aunque los TileMaps no son un cuerpo físico en sí mismos, "
"registran sus piezas con formas de colisión como un cuerpo físico virtual)."
-#: doc/classes/Area2D.xml:48
+#: doc/classes/Area2D.xml:50
#, fuzzy
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
@@ -8385,7 +8419,7 @@ msgstr ""
"velocidad angular perdida por segundo. Los valores van desde [code]0[/code] "
"(sin amortiguación) hasta [code]1[/code] (amortiguación completa)."
-#: doc/classes/Area2D.xml:58
+#: doc/classes/Area2D.xml:60
#, fuzzy
msgid ""
"The area's gravity intensity (in pixels per second squared). This value "
@@ -8396,7 +8430,7 @@ msgstr ""
"multiplica el vector de gravedad. Esto es útil para alterar la fuerza de "
"gravedad sin alterar su dirección."
-#: doc/classes/Area2D.xml:70
+#: doc/classes/Area2D.xml:72
#, fuzzy
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
@@ -8408,7 +8442,7 @@ msgstr ""
"velocidad lineal perdida por segundo. Los valores van desde [code]0[/code] "
"(sin amortiguación) hasta [code]1[/code] (amortiguación completa)."
-#: doc/classes/Area2D.xml:90
+#: doc/classes/Area2D.xml:92
#, fuzzy
msgid ""
"Emitted when another Area2D enters this Area2D. Requires [member monitoring] "
@@ -8419,7 +8453,7 @@ msgstr ""
"Requiere que [member input_pickable] sea [code]true[/code] y que al menos un "
"bit [code]collision_layer[/code] esté activado."
-#: doc/classes/Area2D.xml:97
+#: doc/classes/Area2D.xml:99
#, fuzzy
msgid ""
"Emitted when another Area2D exits this Area2D. Requires [member monitoring] "
@@ -8430,7 +8464,7 @@ msgstr ""
"Requiere que [member input_pickable] sea [code]true[/code] y que al menos un "
"bit [code]collision_layer[/code] esté activado."
-#: doc/classes/Area2D.xml:107
+#: doc/classes/Area2D.xml:109
msgid ""
"Emitted when one of another Area2D's [Shape2D]s enters one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -8445,7 +8479,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:120
+#: doc/classes/Area2D.xml:122
msgid ""
"Emitted when one of another Area2D's [Shape2D]s exits one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -8460,7 +8494,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:130
+#: doc/classes/Area2D.xml:132
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] enters this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -8469,7 +8503,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:137
+#: doc/classes/Area2D.xml:139
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] exits this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -8478,7 +8512,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:147
+#: doc/classes/Area2D.xml:149
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s enters one "
"of this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -8497,7 +8531,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:160
+#: doc/classes/Area2D.xml:162
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s exits one of "
"this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -8831,6 +8865,12 @@ msgid ""
"element is close to the beginning of the array (index 0). This is because "
"all elements placed after the newly inserted element have to be reindexed."
msgstr ""
+"Inserta un nuevo elemento en la posisción dada en el array. La posición debe "
+"ser valida, o al final de el array([code]pos == size()[/code].\n"
+"[b]Note:[/b] este metodo actua en el lugar y no devuelve ningún valor.\n"
+"[b]Note:[/b] en arrays largos, este metodo va a ser mas lento si el elemento "
+"incertado esta cerca al inicio del array (índice 0). Esto es por que todos "
+"los elementos despues del elemento incertado tienen que ser reindisados."
#: doc/classes/Array.xml:239 doc/classes/PoolByteArray.xml:96
#: doc/classes/PoolColorArray.xml:48 doc/classes/PoolIntArray.xml:49
@@ -13240,42 +13280,47 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
"https://docs.godotengine.org/es/latest/tutorials/3d/using_gridmaps.html"
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
-"no save path is provided it will try to match the path from the current "
+"no root node is provided, parent of this node will be used as root instead. "
+"If no save path is provided it will try to match the path from the current "
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -13289,52 +13334,52 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
#, fuzzy
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
@@ -13343,12 +13388,12 @@ msgstr ""
"El fondo utilizado cuando [member overlay] se establece en [constant "
"OVERLAY_POSITION]."
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
#, fuzzy
msgid "The rotation of the baked custom sky."
msgstr "La raíz de la escena editada."
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -13356,36 +13401,36 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
#, fuzzy
msgid "The calculated light data."
msgstr "La altura de la cápsula."
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -13393,13 +13438,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -13411,70 +13456,82 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
#, fuzzy
msgid "The default bake quality mode."
msgstr "La fuente por defecto."
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
#, fuzzy
msgid "Baking was successful."
msgstr "La conexion tuvo éxito."
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr "Actualmente sin uso."
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
#, fuzzy
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr "Devuelve el número de formas asignadas a un tile."
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
#, fuzzy
msgid "The size of the generated lightmaps is too large."
msgstr "El tamaño del plano generado."
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
#, fuzzy
msgid "Returns if user cancels baking."
msgstr "Devuelve el botón de cancelación."
-#: doc/classes/BakedLightmap.xml:133
+#: doc/classes/BakedLightmap.xml:132
+msgid ""
+"Returns if lightmapper can't be created. Unless you are using a custom "
+"lightmapper, please report this as bug."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:135
+msgid ""
+"There is no root node to start baking from. Either provide [code]from_node[/"
+"code] argument or attach this node to a parent that should be used as root."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:136
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:139
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:142
+#: doc/classes/BakedLightmap.xml:147
#, fuzzy
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -14062,8 +14119,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -14597,26 +14657,33 @@ msgid "Text [Color] used when the [Button] is disabled."
msgstr "[Color] del texto utilizado cuando el [Button] está desactivado."
#: doc/classes/Button.xml:77
+msgid ""
+"Text [Color] used when the [Button] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/Button.xml:80
msgid "Text [Color] used when the [Button] is being hovered."
msgstr "[Color] del texto usado cuando el [Button] tiene encima el cursor."
-#: doc/classes/Button.xml:80
+#: doc/classes/Button.xml:83
msgid "Text [Color] used when the [Button] is being pressed."
msgstr "[Color] del texto utilizado cuando se pulsa el [Button]."
-#: doc/classes/Button.xml:83
+#: doc/classes/Button.xml:86
msgid "[StyleBox] used when the [Button] is being hovered."
msgstr "[StyleBox] que se usa cuando el [Button] tiene encima el cursor."
-#: doc/classes/Button.xml:86
+#: doc/classes/Button.xml:89
msgid "The horizontal space between [Button]'s icon and text."
msgstr "El espacio horizontal entre el icono y el texto de [Button]."
-#: doc/classes/Button.xml:89
+#: doc/classes/Button.xml:92
msgid "Default [StyleBox] for the [Button]."
msgstr "[StyleBox] por defecto para el [Button]."
-#: doc/classes/Button.xml:92
+#: doc/classes/Button.xml:95
msgid "[StyleBox] used when the [Button] is being pressed."
msgstr "[StyleBox] que se usa cuando se presiona el [Button]."
@@ -16599,53 +16666,67 @@ msgstr ""
msgid "The check icon to display when the [CheckBox] is checked."
msgstr "El check icon que se muestra cuando se marca el [CheckBox]."
-#: doc/classes/CheckBox.xml:30
+#: doc/classes/CheckBox.xml:28
+#, fuzzy
+msgid "The check icon to display when the [CheckBox] is checked and disabled."
+msgstr ""
+"El icono que se muestra cuando el [CheckButton] está seleccionado y "
+"desactivado."
+
+#: doc/classes/CheckBox.xml:31
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is disabled."
msgstr ""
"El [StyleBox] a mostrar como fondo cuando el [CheckBox] está desactivado."
-#: doc/classes/CheckBox.xml:33
+#: doc/classes/CheckBox.xml:34
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is focused."
msgstr "El [StyleBox] a mostrar como fondo cuando se enfoca el [CheckBox]."
-#: doc/classes/CheckBox.xml:36
+#: doc/classes/CheckBox.xml:37
msgid "The [Font] to use for the [CheckBox] text."
msgstr "La [Font] a usar para el texto de [CheckBox]."
-#: doc/classes/CheckBox.xml:39
+#: doc/classes/CheckBox.xml:40
msgid "The [CheckBox] text's font color."
msgstr "El color de la fuente del texto [CheckBox]."
-#: doc/classes/CheckBox.xml:42
+#: doc/classes/CheckBox.xml:43
msgid "The [CheckBox] text's font color when it's disabled."
msgstr "El color de la fuente del texto [CheckBox] cuando está desactivado."
-#: doc/classes/CheckBox.xml:45
+#: doc/classes/CheckBox.xml:46
+msgid ""
+"The [CheckBox] text's font color when it's focused. Only replaces the normal "
+"text color of the checkbox. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:49
msgid "The [CheckBox] text's font color when it's hovered."
msgstr ""
"El color de la fuente del texto [CheckBox] cuando es cursor esta encima de "
"él."
-#: doc/classes/CheckBox.xml:48
+#: doc/classes/CheckBox.xml:52
msgid "The [CheckBox] text's font color when it's hovered and pressed."
msgstr ""
"El color de la fuente del texto del [CheckBox] cuando el cursor se encuentra "
"encima de él y se presiona."
-#: doc/classes/CheckBox.xml:51
+#: doc/classes/CheckBox.xml:55
msgid "The [CheckBox] text's font color when it's pressed."
msgstr "El color de la fuente del texto [CheckBox] cuando se presiona."
-#: doc/classes/CheckBox.xml:54
+#: doc/classes/CheckBox.xml:58
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered."
msgstr ""
"El [StyleBox] para mostrar como fondo cuando el cursor esta encima de el "
"[CheckBox]."
-#: doc/classes/CheckBox.xml:57
+#: doc/classes/CheckBox.xml:61
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered and "
"pressed."
@@ -16653,20 +16734,20 @@ msgstr ""
"El [StyleBox] a mostrar como fondo cuando el cursor se encuentra encima de "
"el [CheckBox] y se presiona."
-#: doc/classes/CheckBox.xml:60
+#: doc/classes/CheckBox.xml:64
msgid "The separation between the check icon and the text (in pixels)."
msgstr "La separación entre el check icon y el texto (en píxeles)."
-#: doc/classes/CheckBox.xml:63 doc/classes/CheckButton.xml:58
+#: doc/classes/CheckBox.xml:67 doc/classes/CheckButton.xml:61
msgid "The [StyleBox] to display as a background."
msgstr "El [StyleBox] para mostrar como fondo."
-#: doc/classes/CheckBox.xml:66
+#: doc/classes/CheckBox.xml:70
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is pressed."
msgstr "El [StyleBox] para mostrar como fondo cuando se pulsa el [CheckBox]."
-#: doc/classes/CheckBox.xml:69
+#: doc/classes/CheckBox.xml:73
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is checked."
@@ -16674,7 +16755,7 @@ msgstr ""
"Si el [CheckBox] está configurado como un botón de radio, el icono que se "
"muestra cuando se marca el [CheckBox]."
-#: doc/classes/CheckBox.xml:74
+#: doc/classes/CheckBox.xml:78
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is unchecked."
@@ -16682,10 +16763,18 @@ msgstr ""
"Si el [CheckBox] está configurado como un botón de radio, el icono que "
"aparece cuando el [CheckBox] esta deseleccionado."
-#: doc/classes/CheckBox.xml:79
+#: doc/classes/CheckBox.xml:83
msgid "The check icon to display when the [CheckBox] is unchecked."
msgstr "El check icon que aparece cuando el [CheckBox] está deseleccionado."
+#: doc/classes/CheckBox.xml:86
+#, fuzzy
+msgid ""
+"The check icon to display when the [CheckBox] is unchecked and disabled."
+msgstr ""
+"El icono que se muestra cuando el [CheckButton] está deseleccionado y "
+"desactivado."
+
#: doc/classes/CheckButton.xml:4
msgid "Checkable button. See also [CheckBox]."
msgstr "Botón chequeable. Véase también [CheckBox]."
@@ -16743,29 +16832,36 @@ msgstr ""
"desactivado."
#: doc/classes/CheckButton.xml:40
+msgid ""
+"The [CheckButton] text's font color when it's focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:43
msgid "The [CheckButton] text's font color when it's hovered."
msgstr ""
"El color de la fuente del texto del [CheckButton] cuando el cursor esta "
"encima de él."
-#: doc/classes/CheckButton.xml:43
+#: doc/classes/CheckButton.xml:46
msgid "The [CheckButton] text's font color when it's hovered and pressed."
msgstr ""
"El color de la fuente del texto del [CheckButton] cuando el cursor se "
"mantiene encima de él y se presiona."
-#: doc/classes/CheckButton.xml:46
+#: doc/classes/CheckButton.xml:49
msgid "The [CheckButton] text's font color when it's pressed."
msgstr "El color de la fuente del texto del [CheckButton] cuando se presiona."
-#: doc/classes/CheckButton.xml:49
+#: doc/classes/CheckButton.xml:52
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered."
msgstr ""
"El [StyleBox] a mostrar como fondo cuando el cursor esta encima de el "
"[CheckButton]."
-#: doc/classes/CheckButton.xml:52
+#: doc/classes/CheckButton.xml:55
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered "
"and pressed."
@@ -16773,31 +16869,31 @@ msgstr ""
"El [StyleBox] para mostrar como fondo cuando el cursor esta encima del "
"[CheckButton] y se presiona."
-#: doc/classes/CheckButton.xml:55
+#: doc/classes/CheckButton.xml:58
msgid "The separation between the toggle icon and the text (in pixels)."
msgstr "La separación entre el icono de conmutación y el texto (en píxeles)."
-#: doc/classes/CheckButton.xml:61
+#: doc/classes/CheckButton.xml:64
msgid "The icon to display when the [CheckButton] is unchecked."
msgstr "El icono que se muestra cuando el [CheckButton] está deseleccionado."
-#: doc/classes/CheckButton.xml:64
+#: doc/classes/CheckButton.xml:67
msgid "The icon to display when the [CheckButton] is unchecked and disabled."
msgstr ""
"El icono que se muestra cuando el [CheckButton] está deseleccionado y "
"desactivado."
-#: doc/classes/CheckButton.xml:67
+#: doc/classes/CheckButton.xml:70
msgid "The icon to display when the [CheckButton] is checked."
msgstr "El icono que se muestra cuando se selecciona el [CheckButton]."
-#: doc/classes/CheckButton.xml:70
+#: doc/classes/CheckButton.xml:73
msgid "The icon to display when the [CheckButton] is checked and disabled."
msgstr ""
"El icono que se muestra cuando el [CheckButton] está seleccionado y "
"desactivado."
-#: doc/classes/CheckButton.xml:73
+#: doc/classes/CheckButton.xml:76
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is pressed."
msgstr ""
@@ -19010,28 +19106,35 @@ msgstr ""
"[Color] del texto utilizado cuando el [ColorPickerButton] está desactivado."
#: doc/classes/ColorPickerButton.xml:80
+msgid ""
+"Text [Color] used when the [ColorPickerButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:83
msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
msgstr ""
"[Color] del texto usado cuando el [ColorpickerButtor] tiene el cursor encima."
-#: doc/classes/ColorPickerButton.xml:83
+#: doc/classes/ColorPickerButton.xml:86
msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
msgstr "[Color] del texto utilizado cuando se pulsa el [ColorPickerButton]."
-#: doc/classes/ColorPickerButton.xml:86
+#: doc/classes/ColorPickerButton.xml:89
msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
msgstr "[StyleBox] usado cuando el [ColorPickerButton] tiene el cursor encima."
-#: doc/classes/ColorPickerButton.xml:89
+#: doc/classes/ColorPickerButton.xml:92
msgid "The horizontal space between [ColorPickerButton]'s icon and text."
msgstr ""
"El espacio horizontal entre el icono y el texto de [ColorPickerButton]."
-#: doc/classes/ColorPickerButton.xml:92
+#: doc/classes/ColorPickerButton.xml:95
msgid "Default [StyleBox] for the [ColorPickerButton]."
msgstr "[StyleBox] por defecto para el [ColorPickerButton]."
-#: doc/classes/ColorPickerButton.xml:95
+#: doc/classes/ColorPickerButton.xml:98
msgid "[StyleBox] used when the [ColorPickerButton] is being pressed."
msgstr "[StyleBox] que se utiliza cuando se pulsa el [ColorPickerButton]."
@@ -26221,7 +26324,8 @@ msgid ""
"get_resource_type]. They may optionally specify some import presets that "
"affect the import process. EditorImportPlugins are responsible for creating "
"the resources and saving them in the [code].import[/code] directory (see "
-"[member ProjectSettings.application/config/project_data_dir_name]).\n"
+"[member ProjectSettings.application/config/"
+"use_hidden_project_data_directory]).\n"
"Below is an example EditorImportPlugin that imports a [Mesh] from a file "
"with the extension \".special\" or \".spec\":\n"
"[codeblock]\n"
@@ -26439,7 +26543,7 @@ msgstr ""
msgid ""
"Gets the extension used to save this resource in the [code].import[/code] "
"directory (see [member ProjectSettings.application/config/"
-"project_data_dir_name])."
+"use_hidden_project_data_directory])."
msgstr ""
"Obtiene la extensión utilizada para guardar este recurso en el directorio "
"[code].import[/code]."
@@ -27808,10 +27912,12 @@ msgstr ""
msgid "Emitted when the value of the edited resource was changed."
msgstr "Emitido cada vez que el recurso cambia."
-#: doc/classes/EditorResourcePicker.xml:89
-#, fuzzy
-msgid "Emitted when the resource value was set and user clicked to edit it."
-msgstr "Emitido cuando se selecciona un recurso en el inspector."
+#: doc/classes/EditorResourcePicker.xml:90
+msgid ""
+"Emitted when the resource value was set and user clicked to edit it. When "
+"[code]edit[/code] is [code]true[/code], the signal was caused by the context "
+"menu \"Edit\" option."
+msgstr ""
#: doc/classes/EditorResourcePreview.xml:4
msgid "Helper to generate previews of resources or files."
@@ -32972,10 +33078,21 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
@@ -32991,12 +33108,12 @@ msgstr ""
"puede ser rechazada a cambio de un mejor rendimiento en el [ProjectSettings] "
"usando [member ProjectSettings.rendering/quality/gi_probes/quality]."
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr "https://docs.godotengine.org/es/latest/tutorials/3d/gi_probes.html"
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
#, fuzzy
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
@@ -33006,7 +33123,11 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
"Cocina el efecto para todas las [GeometryInstance3D]s marcadas con [constant "
"GeometryInstance3D.GI_MODE_BAKED] y [Light3D]s marcadas con [constant "
@@ -33017,11 +33138,11 @@ msgstr ""
"puede ser usado para visualizar los datos del [GIProbe] y depurar cualquier "
"problema que pueda estar ocurriendo."
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr "Llama a [method bake] con [code]create_visual_debug[/code] activado."
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -33031,29 +33152,29 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr "El recurso [GIProbeData] que contiene los datos para este [GIProbe]."
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
@@ -33063,13 +33184,13 @@ msgstr ""
"grandes sin aumentar las subdivisiones con [member subdivisión], el tamaño "
"de cada celda aumentará y resultará en una menor iluminación detallada."
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
#, fuzzy
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
msgstr "Si [code]true[/code], se resalta la línea que contiene el cursor."
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
#, fuzzy
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
@@ -33078,13 +33199,13 @@ msgstr ""
"Sesgo normal usado para compensar la búsqueda de sombras por el objeto "
"normal. Puede ser usado para arreglar artefactos de auto-sombra."
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
@@ -33094,7 +33215,7 @@ msgstr ""
"número mayor resulta en un detalle más fino y por lo tanto en una mayor "
"calidad visual, mientras que un número menor resulta en un mejor rendimiento."
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
@@ -33103,24 +33224,25 @@ msgstr ""
"más rápido. Úsalo si puedes, pero sobre todo úsalo en el hardware de gama "
"baja."
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
"Utiliza 128 subdivisiones. Este es el ajuste de calidad predeterminado."
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr "Utilice 256 subdivisiones."
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
+#, fuzzy
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
"Use las subdivisiones 512. Este es el ajuste de mayor calidad, pero el más "
"lento. En el hardware de gama baja esto podría causar que la GPU se atasque."
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr "Representa el tamaño del enum [enum Subdiv]."
@@ -36839,14 +36961,19 @@ msgstr ""
"almacenado con 8 bits."
#: doc/classes/Image.xml:436
+#, fuzzy
msgid ""
"OpenGL texture format [code]RED[/code] with a single component and a "
-"bitdepth of 8."
+"bitdepth of 8.\n"
+"[b]Note:[/b] When using the GLES2 backend, this uses the alpha channel "
+"instead of the red channel for storage."
msgstr ""
-"Formato de textura OpenGL [code]RED[/code] con un solo componente y una "
-"profundidad de bits de 8."
+"Formato de textura OpenGL [code]RGB[/code] con tres componentes, cada uno "
+"con una profundidad de 8 bits.\n"
+"[b]Nota:[/b] Al crear una [ImageTexture], se realiza una conversión del "
+"espacio de color sRGB a lineal."
-#: doc/classes/Image.xml:439
+#: doc/classes/Image.xml:440
msgid ""
"OpenGL texture format [code]RG[/code] with two components and a bitdepth of "
"8 for each."
@@ -36854,7 +36981,7 @@ msgstr ""
"Formato de textura OpenGL [code]RG[/code] con dos componentes y una "
"profundidad de bits de 8 para cada uno."
-#: doc/classes/Image.xml:442
+#: doc/classes/Image.xml:443
msgid ""
"OpenGL texture format [code]RGB[/code] with three components, each with a "
"bitdepth of 8.\n"
@@ -36866,7 +36993,7 @@ msgstr ""
"[b]Nota:[/b] Al crear una [ImageTexture], se realiza una conversión del "
"espacio de color sRGB a lineal."
-#: doc/classes/Image.xml:446
+#: doc/classes/Image.xml:447
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 8.\n"
@@ -36878,7 +37005,7 @@ msgstr ""
"[b]Nota:[/b] Al crear una [ImageTexture], se realiza una conversión del "
"espacio de color sRGB a lineal."
-#: doc/classes/Image.xml:450
+#: doc/classes/Image.xml:451
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 4."
@@ -36886,7 +37013,7 @@ msgstr ""
"Formato de textura OpenGL [code]RGBA[/code] con cuatro componentes, cada uno "
"con una profundidad de bits de 4."
-#: doc/classes/Image.xml:453
+#: doc/classes/Image.xml:454
#, fuzzy
msgid ""
"OpenGL texture format [code]GL_RGB5_A1[/code] where 5 bits of depth for each "
@@ -36895,7 +37022,7 @@ msgstr ""
"Formato de textura OpenGL [code]RG[/code] con dos componentes y una "
"profundidad de bits de 8 para cada uno."
-#: doc/classes/Image.xml:456
+#: doc/classes/Image.xml:457
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 32-"
"bit floating-point value."
@@ -36903,7 +37030,7 @@ msgstr ""
"Formato de textura OpenGL [code]GL_R32F[/code] donde hay un componente, un "
"valor de 32 bits de punto flotante."
-#: doc/classes/Image.xml:459
+#: doc/classes/Image.xml:460
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 32-bit floating-point values."
@@ -36911,7 +37038,7 @@ msgstr ""
"Formato de textura OpenGL [code]GL_RG32F[/code] donde hay dos componentes, "
"cada uno con valores de 32 bits de real."
-#: doc/classes/Image.xml:462
+#: doc/classes/Image.xml:463
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 32-bit floating-point values."
@@ -36919,7 +37046,7 @@ msgstr ""
"Formato de textura OpenGL [code]GL_RGB32F[/code] donde hay tres componentes, "
"cada uno con valores de 32 bits real."
-#: doc/classes/Image.xml:465
+#: doc/classes/Image.xml:466
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 32-bit floating-point values."
@@ -36927,7 +37054,7 @@ msgstr ""
"Formato de textura OpenGL [code]GL_RGBA32F[/code] donde hay cuatro "
"componentes, cada uno con valores de 32 bits real."
-#: doc/classes/Image.xml:468
+#: doc/classes/Image.xml:469
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 16-"
"bit \"half-precision\" floating-point value."
@@ -36935,7 +37062,7 @@ msgstr ""
"Formato de textura OpenGL [code]GL_R32F[/code] donde hay un componente, un "
"valor de punto flotante de 16 bits de \"media precisión\" real."
-#: doc/classes/Image.xml:471
+#: doc/classes/Image.xml:472
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 16-bit \"half-precision\" floating-point value."
@@ -36943,7 +37070,7 @@ msgstr ""
"Formato de textura OpenGL [code]GL_RG32F[/code] donde hay dos componentes, "
"cada uno un valor de 16 bits de \"media precisión\" real."
-#: doc/classes/Image.xml:474
+#: doc/classes/Image.xml:475
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 16-bit \"half-precision\" floating-point value."
@@ -36951,7 +37078,7 @@ msgstr ""
"Formato de textura OpenGL [code]GL_RGB32F[/code] donde hay tres componentes, "
"cada uno de ellos un valor de 16 bits de \"media precisión\" real."
-#: doc/classes/Image.xml:477
+#: doc/classes/Image.xml:478
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 16-bit \"half-precision\" floating-point value."
@@ -36960,7 +37087,7 @@ msgstr ""
"componentes, cada uno de ellos un valor de 16 bits de \"media precisión\" "
"real."
-#: doc/classes/Image.xml:480
+#: doc/classes/Image.xml:481
msgid ""
"A special OpenGL texture format where the three color components have 9 bits "
"of precision and all three share a single 5-bit exponent."
@@ -36968,7 +37095,7 @@ msgstr ""
"Un formato especial de textura OpenGL donde los tres componentes de color "
"tienen 9 bits de precisión y los tres comparten un único exponente de 5 bits."
-#: doc/classes/Image.xml:483
+#: doc/classes/Image.xml:484
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 1, and is the smallest variation "
@@ -36984,7 +37111,7 @@ msgstr ""
"[b]Nota:[/b] Al crear una [ImageTexture], se realiza una conversión del "
"espacio de color sRGB a lineal."
-#: doc/classes/Image.xml:487
+#: doc/classes/Image.xml:488
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 2, and color data is interpreted "
@@ -37001,7 +37128,7 @@ msgstr ""
"[b]Nota:[/b] Al crear una [ImagenTexture], se realiza una conversión del "
"espacio de color sRGB a lineal."
-#: doc/classes/Image.xml:491
+#: doc/classes/Image.xml:492
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format also known as Block Compression 3 or BC3 that contains 64 "
@@ -37021,7 +37148,7 @@ msgstr ""
"[b]Nota:[/b] Al crear una [ImageTexture], se realiza una conversión del "
"espacio de color sRGB a lineal."
-#: doc/classes/Image.xml:495
+#: doc/classes/Image.xml:496
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -37033,7 +37160,7 @@ msgstr ""
"normalizando los datos del canal rojo utilizando el mismo algoritmo de "
"compresión que DXT5 utiliza para el canal alfa."
-#: doc/classes/Image.xml:498
+#: doc/classes/Image.xml:499
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -37045,7 +37172,7 @@ msgstr ""
"normalizando los datos de los canales rojo y verde utilizando el mismo "
"algoritmo de compresión que DXT5 utiliza para el canal alfa."
-#: doc/classes/Image.xml:501
+#: doc/classes/Image.xml:502
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned normalized "
@@ -37059,7 +37186,7 @@ msgstr ""
"[b]Nota:[/b] Al crear una [ImageTexture], se realiza una conversión del "
"espacio de color sRGB a lineal."
-#: doc/classes/Image.xml:505
+#: doc/classes/Image.xml:506
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with signed floating-point "
@@ -37069,7 +37196,7 @@ msgstr ""
"opengl/wiki/BPTC_Texture_Compression]BPTC[/url] con componentes RGB reales "
"firmados."
-#: doc/classes/Image.xml:508
+#: doc/classes/Image.xml:509
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned floating-point "
@@ -37079,7 +37206,7 @@ msgstr ""
"opengl/wiki/BPTC_Texture_Compression]BPTC[/url] con componentes RGB reales "
"sin firmar."
-#: doc/classes/Image.xml:511
+#: doc/classes/Image.xml:512
msgid ""
"Texture format used on PowerVR-supported mobile platforms, uses 2-bit color "
"depth with no alpha. More information can be found [url=https://en.wikipedia."
@@ -37093,7 +37220,7 @@ msgstr ""
"[b]Nota:[/b] Al crear una [ImageTexture], se realiza una conversión del "
"espacio de color sRGB a lineal."
-#: doc/classes/Image.xml:515
+#: doc/classes/Image.xml:516
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with an "
"alpha component."
@@ -37101,7 +37228,7 @@ msgstr ""
"Igual que [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], pero con un "
"componente alfa."
-#: doc/classes/Image.xml:518
+#: doc/classes/Image.xml:519
msgid ""
"Similar to [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with 4-"
"bit color depth and no alpha."
@@ -37109,7 +37236,7 @@ msgstr ""
"Similar a [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], pero con "
"una profundidad de color de 4 bits y sin alfa."
-#: doc/classes/Image.xml:521
+#: doc/classes/Image.xml:522
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC4[/url], but with an "
"alpha component."
@@ -37117,7 +37244,7 @@ msgstr ""
"Igual que [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC4[/url], pero con un "
"componente alfa."
-#: doc/classes/Image.xml:524
+#: doc/classes/Image.xml:525
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC1]Ericsson Texture Compression format 1[/"
@@ -37129,7 +37256,7 @@ msgstr ""
"es parte del estándar de gráficos OpenGL ES. Este formato no puede almacenar "
"un canal alfa."
-#: doc/classes/Image.xml:527
+#: doc/classes/Image.xml:528
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -37141,7 +37268,7 @@ msgstr ""
"Ericsson 2[/url] ([code]R11_EAC[/code] variant), que proporciona un canal de "
"datos sin firmar."
-#: doc/classes/Image.xml:530
+#: doc/classes/Image.xml:531
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -37153,7 +37280,7 @@ msgstr ""
"de Ericsson 2[/url] (variante de [code]SIGNED_R11_EAC[/code]), que "
"proporciona un canal de datos firmado."
-#: doc/classes/Image.xml:533
+#: doc/classes/Image.xml:534
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -37165,7 +37292,7 @@ msgstr ""
"de Ericsson 2[/url] ([code]RG11_EAC[/code] variant), que proporciona dos "
"canales de datos sin firmar."
-#: doc/classes/Image.xml:536
+#: doc/classes/Image.xml:537
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -37177,7 +37304,7 @@ msgstr ""
"de Ericsson 2[/url] (variante de [code]SIGNED_RG11_EAC[/code]), que "
"proporciona dos canales de datos firmados."
-#: doc/classes/Image.xml:539
+#: doc/classes/Image.xml:540
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -37193,7 +37320,7 @@ msgstr ""
"[b]Nota:[/b] Al crear una [ImageTexture], se realiza una conversión del "
"espacio de color sRGB a lineal."
-#: doc/classes/Image.xml:543
+#: doc/classes/Image.xml:544
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -37209,7 +37336,7 @@ msgstr ""
"[b]Nota:[/b] Al crear una [ImageTexture], se realiza una conversión del "
"espacio de color sRGB a lineal."
-#: doc/classes/Image.xml:547
+#: doc/classes/Image.xml:548
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -37227,11 +37354,11 @@ msgstr ""
"[b]Nota:[/b] Al crear una [ImageTexture], se realiza una conversión del "
"espacio de color sRGB a lineal."
-#: doc/classes/Image.xml:551
+#: doc/classes/Image.xml:552
msgid "Represents the size of the [enum Format] enum."
msgstr "Representa el tamaño del enum [enum Format]."
-#: doc/classes/Image.xml:554
+#: doc/classes/Image.xml:555
msgid ""
"Performs nearest-neighbor interpolation. If the image is resized, it will be "
"pixelated."
@@ -37239,7 +37366,7 @@ msgstr ""
"Realiza la interpolación del vecino más cercano. Si se cambia el tamaño de "
"la imagen, será pixelada."
-#: doc/classes/Image.xml:557
+#: doc/classes/Image.xml:558
msgid ""
"Performs bilinear interpolation. If the image is resized, it will be blurry. "
"This mode is faster than [constant INTERPOLATE_CUBIC], but it results in "
@@ -37249,7 +37376,7 @@ msgstr ""
"será borrosa. Este modo es más rápido que [constant INTERPOLATE_CUBIC], pero "
"da como resultado una menor calidad."
-#: doc/classes/Image.xml:560
+#: doc/classes/Image.xml:561
msgid ""
"Performs cubic interpolation. If the image is resized, it will be blurry. "
"This mode often gives better results compared to [constant "
@@ -37259,7 +37386,7 @@ msgstr ""
"borrosa. Este modo a menudo da mejores resultados en comparación con "
"[constanteINTERPOLATE_BILINEAR], a costa de ser más lento."
-#: doc/classes/Image.xml:563
+#: doc/classes/Image.xml:564
#, fuzzy
msgid ""
"Performs bilinear separately on the two most-suited mipmap levels, then "
@@ -37286,7 +37413,7 @@ msgstr ""
"Por otro lado, si la imagen ya tiene mipmaps, se usarán, y se generará un "
"nuevo conjunto para la imagen resultante."
-#: doc/classes/Image.xml:570
+#: doc/classes/Image.xml:571
msgid ""
"Performs Lanczos interpolation. This is the slowest image resizing mode, but "
"it typically gives the best results, especially when downscalng images."
@@ -37295,39 +37422,39 @@ msgstr ""
"imágenes más lento, pero suele dar los mejores resultados, especialmente "
"cuando se reducen las imágenes."
-#: doc/classes/Image.xml:573
+#: doc/classes/Image.xml:574
msgid "Image does not have alpha."
msgstr "La imagen no tiene alfa."
-#: doc/classes/Image.xml:576
+#: doc/classes/Image.xml:577
msgid "Image stores alpha in a single bit."
msgstr "La imagen almacena el alfa en un solo bit."
-#: doc/classes/Image.xml:579
+#: doc/classes/Image.xml:580
msgid "Image uses alpha."
msgstr "La imagen usa el alfa."
-#: doc/classes/Image.xml:582
+#: doc/classes/Image.xml:583
msgid "Use S3TC compression."
msgstr "Use la compresión S3TC."
-#: doc/classes/Image.xml:585
+#: doc/classes/Image.xml:586
msgid "Use PVRTC2 compression."
msgstr "Use la compresión PVRTC2."
-#: doc/classes/Image.xml:588
+#: doc/classes/Image.xml:589
msgid "Use PVRTC4 compression."
msgstr "Use la compresión PVRTC4."
-#: doc/classes/Image.xml:591
+#: doc/classes/Image.xml:592
msgid "Use ETC compression."
msgstr "Use la compresión ETC."
-#: doc/classes/Image.xml:594
+#: doc/classes/Image.xml:595
msgid "Use ETC2 compression."
msgstr "Use la compresión ETC2."
-#: doc/classes/Image.xml:597
+#: doc/classes/Image.xml:598
msgid ""
"Source texture (before compression) is a regular texture. Default for all "
"textures."
@@ -37335,12 +37462,12 @@ msgstr ""
"La textura de la fuente (antes de la compresión) es una textura regular. Por "
"defecto para todas las texturas."
-#: doc/classes/Image.xml:600
+#: doc/classes/Image.xml:601
msgid "Source texture (before compression) is in sRGB space."
msgstr ""
"La textura de la fuente (antes de la compresión) está en el espacio sRGB."
-#: doc/classes/Image.xml:603
+#: doc/classes/Image.xml:604
msgid ""
"Source texture (before compression) is a normal texture (e.g. it can be "
"compressed into two channels)."
@@ -37606,6 +37733,17 @@ msgstr ""
#: doc/classes/Input.xml:43
msgid ""
+"Sends all input events which are in the current buffer to the game loop. "
+"These events may have been buffered as a result of accumulated input "
+"([method set_use_accumulated_input]) or agile input flushing ([member "
+"ProjectSettings.input_devices/buffering/agile_event_flushing]).\n"
+"The engine will already do this itself at key execution points (at least "
+"once per frame). However, this can be useful in advanced cases where you "
+"want precise control over the timing of event handling."
+msgstr ""
+
+#: doc/classes/Input.xml:50
+msgid ""
"Returns the acceleration of the device's accelerometer sensor, if the device "
"has one. Otherwise, the method returns [constant Vector3.ZERO].\n"
"Note this method returns an empty [Vector3] when running from the editor "
@@ -37617,7 +37755,7 @@ msgid ""
"the Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:53
+#: doc/classes/Input.xml:60
msgid ""
"Returns a value between 0 and 1 representing the raw intensity of the given "
"action, ignoring the action's deadzone. In most cases, you should use "
@@ -37627,7 +37765,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:62
+#: doc/classes/Input.xml:69
#, fuzzy
msgid ""
"Returns a value between 0 and 1 representing the intensity of the given "
@@ -37645,7 +37783,7 @@ msgstr ""
"1. Si la acción se asigna a un control que no tiene un eje como el teclado, "
"el valor devuelto será 0 o 1."
-#: doc/classes/Input.xml:71
+#: doc/classes/Input.xml:78
msgid ""
"Get axis input by specifying two actions, one negative and one positive.\n"
"This is a shorthand for writing [code]Input."
@@ -37653,7 +37791,7 @@ msgid ""
"get_action_strength(\"negative_action\")[/code]."
msgstr ""
-#: doc/classes/Input.xml:78
+#: doc/classes/Input.xml:85
msgid ""
"Returns an [Array] containing the device IDs of all currently connected "
"joypads."
@@ -37661,12 +37799,12 @@ msgstr ""
"Devuelve un [Array] que contiene los Ids de los dispositivos de todos los "
"joypads conectados actualmente."
-#: doc/classes/Input.xml:84
+#: doc/classes/Input.xml:91
msgid "Returns the currently assigned cursor shape (see [enum CursorShape])."
msgstr ""
"Devuelve la forma del cursor actualmente asignada (véase [enum CursorShape])."
-#: doc/classes/Input.xml:90
+#: doc/classes/Input.xml:97
msgid ""
"Returns the gravity of the device's accelerometer sensor, if the device has "
"one. Otherwise, the method returns [constant Vector3.ZERO].\n"
@@ -37676,7 +37814,7 @@ msgid ""
"Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:97
+#: doc/classes/Input.xml:104
msgid ""
"Returns the rotation rate in rad/s around a device's X, Y, and Z axes of the "
"gyroscope sensor, if the device has one. Otherwise, the method returns "
@@ -37685,7 +37823,7 @@ msgid ""
"it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:106
+#: doc/classes/Input.xml:113
#, fuzzy
msgid ""
"Returns the current value of the joypad axis at given index (see [enum "
@@ -37694,11 +37832,11 @@ msgstr ""
"Devuelve el valor actual del eje del joypad en un índice determinado (véase "
"[enum JoyAxisList])."
-#: doc/classes/Input.xml:113
+#: doc/classes/Input.xml:120
msgid "Returns the index of the provided axis name."
msgstr "Devuelve el índice del nombre del eje suministrado."
-#: doc/classes/Input.xml:120
+#: doc/classes/Input.xml:127
#, fuzzy
msgid ""
"Receives a [enum JoystickList] axis and returns its equivalent name as a "
@@ -37707,11 +37845,11 @@ msgstr ""
"Recibe un eje [enum JoyAxisList] y devuelve su nombre equivalente como una "
"String."
-#: doc/classes/Input.xml:127
+#: doc/classes/Input.xml:134
msgid "Returns the index of the provided button name."
msgstr "Devuelve el índice del nombre del botón proporcionado."
-#: doc/classes/Input.xml:134
+#: doc/classes/Input.xml:141
#, fuzzy
msgid ""
"Receives a gamepad button from [enum JoystickList] and returns its "
@@ -37720,7 +37858,7 @@ msgstr ""
"Recibe un botón del gamepad de [enum JoyButtonList] y devuelve su nombre "
"equivalente en forma de cadena."
-#: doc/classes/Input.xml:141
+#: doc/classes/Input.xml:148
msgid ""
"Returns a SDL2-compatible device GUID on platforms that use gamepad "
"remapping. Returns [code]\"Default Gamepad\"[/code] otherwise."
@@ -37729,16 +37867,16 @@ msgstr ""
"usan remapeo de gamepad. Devuelve [code]\"Default Gamepad\"[/code] de otra "
"manera."
-#: doc/classes/Input.xml:148
+#: doc/classes/Input.xml:155
msgid "Returns the name of the joypad at the specified device index."
msgstr ""
"Devuelve el nombre del joypad en el índice del dispositivo especificado."
-#: doc/classes/Input.xml:155
+#: doc/classes/Input.xml:162
msgid "Returns the duration of the current vibration effect in seconds."
msgstr "Devuelve la duración del efecto de la vibración actual en segundos."
-#: doc/classes/Input.xml:162
+#: doc/classes/Input.xml:169
msgid ""
"Returns the strength of the joypad vibration: x is the strength of the weak "
"motor, and y is the strength of the strong motor."
@@ -37746,7 +37884,7 @@ msgstr ""
"Devuelve la fuerza de la vibración del joypad: x es la fuerza del motor "
"débil, e y es la fuerza del motor fuerte."
-#: doc/classes/Input.xml:168
+#: doc/classes/Input.xml:175
msgid ""
"Returns the mouse speed for the last time the cursor was moved, and this "
"until the next frame where the mouse moves. This means that even if the "
@@ -37758,7 +37896,7 @@ msgstr ""
"que aunque el ratón no se mueva, esta función seguirá devolviendo el valor "
"del último movimiento."
-#: doc/classes/Input.xml:174
+#: doc/classes/Input.xml:181
msgid ""
"Returns the magnetic field strength in micro-Tesla for all axes of the "
"device's magnetometer sensor, if the device has one. Otherwise, the method "
@@ -37767,7 +37905,7 @@ msgid ""
"platforms, it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:181
+#: doc/classes/Input.xml:188
msgid ""
"Returns mouse buttons as a bitmask. If multiple mouse buttons are pressed at "
"the same time, the bits are added together."
@@ -37775,11 +37913,11 @@ msgstr ""
"Devuelve los botones del ratón como una máscara de bits. Si se pulsan varios "
"botones del ratón al mismo tiempo, los bits se suman."
-#: doc/classes/Input.xml:187
+#: doc/classes/Input.xml:194
msgid "Returns the mouse mode. See the constants for more information."
msgstr "Devuelve el modo de ratón. Vea las constantes para más información."
-#: doc/classes/Input.xml:198
+#: doc/classes/Input.xml:205
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -37792,7 +37930,7 @@ msgid ""
"want (on the range of 0 to 1)."
msgstr ""
-#: doc/classes/Input.xml:208
+#: doc/classes/Input.xml:215
#, fuzzy
msgid ""
"Returns [code]true[/code] when the user starts pressing the action event, "
@@ -37810,7 +37948,7 @@ msgstr ""
"Esto es útil para el código que necesita ejecutarse sólo una vez cuando se "
"presiona una acción, en lugar de cada marco mientras se presiona."
-#: doc/classes/Input.xml:218
+#: doc/classes/Input.xml:225
#, fuzzy
msgid ""
"Returns [code]true[/code] when the user stops pressing the action event, "
@@ -37826,7 +37964,7 @@ msgstr ""
"Esto es útil para el código que necesita ejecutarse sólo una vez cuando se "
"presiona una acción, en lugar de cada marco mientras se presiona."
-#: doc/classes/Input.xml:227
+#: doc/classes/Input.xml:234
#, fuzzy
msgid ""
"Returns [code]true[/code] if you are pressing the action event. Note that if "
@@ -37842,7 +37980,7 @@ msgstr ""
"uno, al soltar un botón se liberará la acción, incluso si algún otro botón "
"asignado a esta acción sigue estando pulsado."
-#: doc/classes/Input.xml:236
+#: doc/classes/Input.xml:243
#, fuzzy
msgid ""
"Returns [code]true[/code] if you are pressing the joypad button (see [enum "
@@ -37851,7 +37989,7 @@ msgstr ""
"Devuelve [code]true[/code] si el ratón ha entrado en el botón y no lo ha "
"dejado todavía."
-#: doc/classes/Input.xml:243
+#: doc/classes/Input.xml:250
#, fuzzy
msgid ""
"Returns [code]true[/code] if the system knows the specified device. This "
@@ -37864,7 +38002,7 @@ msgstr ""
"espera que los joypads desconocidos coincidan con estas constantes, pero aún "
"así se pueden recuperar eventos de ellos."
-#: doc/classes/Input.xml:250
+#: doc/classes/Input.xml:257
#, fuzzy
msgid ""
"Returns [code]true[/code] if you are pressing the key. You can pass a [enum "
@@ -37873,7 +38011,7 @@ msgstr ""
"Devuelve [code]true[/code] si está pulsando la tecla en la disposición "
"actual del teclado. Puedes pasar una constante [enum KeyList]."
-#: doc/classes/Input.xml:257
+#: doc/classes/Input.xml:264
msgid ""
"Returns [code]true[/code] if you are pressing the mouse button specified "
"with [enum ButtonList]."
@@ -37881,7 +38019,7 @@ msgstr ""
"Devuelve [code]true[/code] si se pulsa el botón del ratón especificado con "
"[enum ButtonList]."
-#: doc/classes/Input.xml:267
+#: doc/classes/Input.xml:274
msgid ""
"Notifies the [Input] singleton that a connection has changed, to update the "
"state for the [code]device[/code] index.\n"
@@ -37895,7 +38033,7 @@ msgstr ""
"los scripts de usuario. Véase [signal joy_connection_changed] para la señal "
"emitida cuando se activa internamente."
-#: doc/classes/Input.xml:275
+#: doc/classes/Input.xml:282
msgid ""
"Feeds an [InputEvent] to the game. Can be used to artificially trigger input "
"events from code. Also generates [method Node._input] calls.\n"
@@ -37918,14 +38056,23 @@ msgstr ""
"Input.parse_input_event(evento)\n"
"[/codeblock]"
-#: doc/classes/Input.xml:289
+#: doc/classes/Input.xml:296
msgid ""
"Removes all mappings from the internal database that match the given GUID."
msgstr ""
"Elimina todos los mapeos de la base de datos interna que coincidan con la "
"GUID dada."
-#: doc/classes/Input.xml:298
+#: doc/classes/Input.xml:303
+msgid ""
+"Sets the acceleration value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:313
msgid ""
"Sets a custom mouse cursor image, which is only visible inside the game "
"window. The hotspot can also be specified. Passing [code]null[/code] to the "
@@ -37953,7 +38100,7 @@ msgstr ""
"modo de compresión [b]Video RAM[/b] no puede utilizarse para cursores "
"personalizados."
-#: doc/classes/Input.xml:309
+#: doc/classes/Input.xml:324
msgid ""
"Sets the default cursor shape to be used in the viewport instead of "
"[constant CURSOR_ARROW].\n"
@@ -37970,11 +38117,38 @@ msgstr ""
"[b]Nota:[/b] Este método genera un [InputEventMouseMotion] para actualizar "
"el cursor inmediatamente."
-#: doc/classes/Input.xml:318
+#: doc/classes/Input.xml:333
+msgid ""
+"Sets the gravity value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:341
+msgid ""
+"Sets the value of the rotation rate of the gyroscope sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:349
+msgid ""
+"Sets the value of the magnetic field of the magnetometer sensor. Can be used "
+"for debugging on devices without a hardware sensor, for example in an editor "
+"on a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:357
msgid "Sets the mouse mode. See the constants for more information."
msgstr "Establece el modo del ratón. Vea las constantes para más información."
-#: doc/classes/Input.xml:325
+#: doc/classes/Input.xml:364
msgid ""
"Enables or disables the accumulation of similar input events sent by the "
"operating system. When input accumulation is enabled, all input events "
@@ -38000,7 +38174,7 @@ msgstr ""
"el usuario está dibujando la línea para obtener resultados que sigan de "
"cerca la entrada real."
-#: doc/classes/Input.xml:336
+#: doc/classes/Input.xml:375
msgid ""
"Starts to vibrate the joypad. Joypads usually come with two rumble motors, a "
"strong and a weak one. [code]weak_magnitude[/code] is the strength of the "
@@ -38022,11 +38196,11 @@ msgstr ""
"efecto largas; se recomienda reiniciar un efecto si tiene que ser "
"reproducido durante más de unos pocos segundos."
-#: doc/classes/Input.xml:344
+#: doc/classes/Input.xml:383
msgid "Stops the vibration of the joypad."
msgstr "Detiene la vibración del joypad."
-#: doc/classes/Input.xml:351
+#: doc/classes/Input.xml:390
#, fuzzy
msgid ""
"Vibrate Android and iOS devices.\n"
@@ -38037,23 +38211,23 @@ msgstr ""
"[b]Nota:[/b] Necesita permiso de VIBRATE para Android en la configuración de "
"exportación. iOS no admite duración."
-#: doc/classes/Input.xml:359
+#: doc/classes/Input.xml:398
msgid "Sets the mouse position to the specified vector."
msgstr "Establece la posición del ratón en el vector especificado."
-#: doc/classes/Input.xml:368
+#: doc/classes/Input.xml:407
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr "Se emite cuando se ha conectado o desconectado un dispositivo joypad."
-#: doc/classes/Input.xml:374
+#: doc/classes/Input.xml:413
msgid "Makes the mouse cursor visible if it is hidden."
msgstr "Hace que el cursor del ratón sea visible si está oculto."
-#: doc/classes/Input.xml:377
+#: doc/classes/Input.xml:416
msgid "Makes the mouse cursor hidden if it is visible."
msgstr "Hace que el cursor del ratón se oculte si es visible."
-#: doc/classes/Input.xml:380
+#: doc/classes/Input.xml:419
msgid ""
"Captures the mouse. The mouse will be hidden and its position locked at the "
"center of the screen.\n"
@@ -38061,16 +38235,16 @@ msgid ""
"need to use [member InputEventMouseMotion.relative]."
msgstr ""
-#: doc/classes/Input.xml:384
+#: doc/classes/Input.xml:423
msgid "Makes the mouse cursor visible but confines it to the game window."
msgstr ""
"Hace visible el cursor del ratón pero lo limita a la ventana del juego."
-#: doc/classes/Input.xml:387
+#: doc/classes/Input.xml:426
msgid "Arrow cursor. Standard, default pointing cursor."
msgstr "Cursor de la flecha. Cursor puntero estándar y predeterminado."
-#: doc/classes/Input.xml:390
+#: doc/classes/Input.xml:429
msgid ""
"I-beam cursor. Usually used to show where the text cursor will appear when "
"the mouse is clicked."
@@ -38078,7 +38252,7 @@ msgstr ""
"Cursor del rayo I. Normalmente se usa para mostrar dónde aparecerá el cursor "
"de texto cuando se haga clic con el ratón."
-#: doc/classes/Input.xml:393
+#: doc/classes/Input.xml:432
msgid ""
"Pointing hand cursor. Usually used to indicate the pointer is over a link or "
"other interactable item."
@@ -38086,7 +38260,7 @@ msgstr ""
"Apuntando con el cursor de la mano. Normalmente se usa para indicar que el "
"puntero está sobre un enlace u otro elemento interactivo."
-#: doc/classes/Input.xml:396
+#: doc/classes/Input.xml:435
msgid ""
"Cross cursor. Typically appears over regions in which a drawing operation "
"can be performed or for selections."
@@ -38094,7 +38268,7 @@ msgstr ""
"Cursor en cruz. Normalmente aparece sobre las regiones en las que se puede "
"realizar una operación de dibujo o para realizar selecciones."
-#: doc/classes/Input.xml:399
+#: doc/classes/Input.xml:438
msgid ""
"Wait cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application is still usable during the "
@@ -38104,7 +38278,7 @@ msgstr ""
"operación. La forma del cursor indica que la aplicación sigue siendo "
"utilizable durante la operación."
-#: doc/classes/Input.xml:402
+#: doc/classes/Input.xml:441
msgid ""
"Busy cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application isn't usable during the "
@@ -38114,11 +38288,11 @@ msgstr ""
"operación. Esta forma de cursor denota que la aplicación no es utilizable "
"durante la operación (por ejemplo, algo está bloqueando su hilo principal)."
-#: doc/classes/Input.xml:405
+#: doc/classes/Input.xml:444
msgid "Drag cursor. Usually displayed when dragging something."
msgstr "Cursor de arrastre. Normalmente se muestra cuando se arrastra algo."
-#: doc/classes/Input.xml:408
+#: doc/classes/Input.xml:447
msgid ""
"Can drop cursor. Usually displayed when dragging something to indicate that "
"it can be dropped at the current position."
@@ -38126,7 +38300,7 @@ msgstr ""
"Puede soltar el cursor. Normalmente se muestra cuando se arrastra algo para "
"indicar que se puede soltar en la posición actual."
-#: doc/classes/Input.xml:411
+#: doc/classes/Input.xml:450
msgid ""
"Forbidden cursor. Indicates that the current action is forbidden (for "
"example, when dragging something) or that the control at a position is "
@@ -38135,7 +38309,7 @@ msgstr ""
"Cursor prohibido. Indica que la acción actual está prohibida (por ejemplo, "
"al arrastrar algo) o que el control en una posición está desactivado."
-#: doc/classes/Input.xml:414
+#: doc/classes/Input.xml:453
msgid ""
"Vertical resize mouse cursor. A double-headed vertical arrow. It tells the "
"user they can resize the window or the panel vertically."
@@ -38144,7 +38318,7 @@ msgstr ""
"dice al usuario que puede cambiar el tamaño de la ventana o del panel "
"verticalmente."
-#: doc/classes/Input.xml:417
+#: doc/classes/Input.xml:456
msgid ""
"Horizontal resize mouse cursor. A double-headed horizontal arrow. It tells "
"the user they can resize the window or the panel horizontally."
@@ -38153,7 +38327,7 @@ msgstr ""
"cabeza. Le dice al usuario que puede cambiar el tamaño de la ventana o del "
"panel horizontalmente."
-#: doc/classes/Input.xml:420
+#: doc/classes/Input.xml:459
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the bottom left to the top right. It tells the user they can resize the "
@@ -38164,7 +38338,7 @@ msgstr ""
"usuario que puede cambiar el tamaño de la ventana o del panel tanto "
"horizontal como verticalmente."
-#: doc/classes/Input.xml:423
+#: doc/classes/Input.xml:462
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the top left to the bottom right, the opposite of [constant "
@@ -38176,11 +38350,11 @@ msgstr ""
"a [constant CURSOR_BDIAGSIZE]. Le dice al usuario que puede cambiar el "
"tamaño de la ventana o del panel tanto horizontal como verticalmente."
-#: doc/classes/Input.xml:426
+#: doc/classes/Input.xml:465
msgid "Move cursor. Indicates that something can be moved."
msgstr "Mueve el cursor. Indica que algo puede ser movido."
-#: doc/classes/Input.xml:429
+#: doc/classes/Input.xml:468
msgid ""
"Vertical split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_VSIZE]."
@@ -38188,7 +38362,7 @@ msgstr ""
"Cursor del ratón dividido verticalmente. En Windows, es lo mismo que "
"[constant CURSOR_VSIZE]."
-#: doc/classes/Input.xml:432
+#: doc/classes/Input.xml:471
msgid ""
"Horizontal split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_HSIZE]."
@@ -38196,7 +38370,7 @@ msgstr ""
"Cursor del ratón dividido horizontalmente. En Windows, es lo mismo que "
"[constant CURSOR_HSIZE]."
-#: doc/classes/Input.xml:435
+#: doc/classes/Input.xml:474
msgid "Help cursor. Usually a question mark."
msgstr "Cursor de ayuda. Normalmente un signo de interrogación."
@@ -38764,7 +38938,10 @@ msgid "The drag position."
msgstr "La posición de arrastre."
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+#, fuzzy
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr "La posición de arrastre relativa a su posición inicial."
#: doc/classes/InputEventScreenDrag.xml:25
@@ -40475,7 +40652,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -40586,30 +40764,33 @@ msgstr ""
"axis_lock_motion_y] y [member axis_lock_motion_z]."
#: doc/classes/KinematicBody.xml:142
+#, fuzzy
msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
"Comprueba si hay colisiones sin mover el cuerpo. Virtualmente establece la "
"posición, escala y rotación del nodo a la de la [Transform] dada, luego "
"intenta mover el cuerpo a lo largo del vector [code]rel_vec[/code]. Devuelve "
"[code]true[/code] si se produce una colisión."
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr "Bloquea el movimiento del eje X del cuerpo."
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr "Bloquea el movimiento del eje X del cuerpo."
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr "Bloquea el movimiento del eje Z del cuerpo."
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -40624,7 +40805,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -40636,19 +40817,19 @@ msgstr ""
"[AnimationPlayer], por ejemplo en plataformas móviles. No uses [b]not[/b] "
"junto con las funciones [method move_and_slide] o [method move_and_collide]."
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -40753,10 +40934,12 @@ msgstr ""
"[/codeblock]"
#: doc/classes/KinematicBody2D.xml:87
+#, fuzzy
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -40856,11 +41039,14 @@ msgstr ""
"su lugar."
#: doc/classes/KinematicBody2D.xml:132
+#, fuzzy
msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
"Comprueba si hay colisiones sin mover el cuerpo. Virtualmente establece la "
"posición, escala y rotación del nodo a la de la [Transform2D] dada, luego "
@@ -42500,14 +42686,21 @@ msgid "Default text [Color] of the [LinkButton]."
msgstr "[Color] del texto predeterminado del [LinkButton]."
#: doc/classes/LinkButton.xml:46
+msgid ""
+"Text [Color] used when the [LinkButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:49
msgid "Text [Color] used when the [LinkButton] is being hovered."
msgstr "[Color] del texto usado cuando el [LinkButton] está siendo movido."
-#: doc/classes/LinkButton.xml:49
+#: doc/classes/LinkButton.xml:52
msgid "Text [Color] used when the [LinkButton] is being pressed."
msgstr "[Color] del texto utilizado cuando se pulsa el [LinkButton]."
-#: doc/classes/LinkButton.xml:52
+#: doc/classes/LinkButton.xml:55
msgid "The vertical space between the baseline of text and the underline."
msgstr "El espacio vertical entre la línea de base del texto y el subrayado."
@@ -43228,27 +43421,34 @@ msgid "Text [Color] used when the [MenuButton] is disabled."
msgstr "[Color] del texto utilizado cuando el [MenuButton] está desactivado."
#: doc/classes/MenuButton.xml:64
+msgid ""
+"Text [Color] used when the [MenuButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:67
msgid "Text [Color] used when the [MenuButton] is being hovered."
msgstr "[Color] del texto usado cuando el puntero esta sobre el [MenuButton]."
-#: doc/classes/MenuButton.xml:67
+#: doc/classes/MenuButton.xml:70
msgid "Text [Color] used when the [MenuButton] is being pressed."
msgstr "[Color] del texto utilizado cuando se pulsa el [MenuButton]."
-#: doc/classes/MenuButton.xml:70
+#: doc/classes/MenuButton.xml:73
msgid "[StyleBox] used when the [MenuButton] is being hovered."
msgstr ""
"[StyleBox] usado cuando el puntero del ratón esta sobre el [MenuButton]."
-#: doc/classes/MenuButton.xml:73
+#: doc/classes/MenuButton.xml:76
msgid "The horizontal space between [MenuButton]'s icon and text."
msgstr "El espacio horizontal entre el icono y el texto de [MenuButton]."
-#: doc/classes/MenuButton.xml:76
+#: doc/classes/MenuButton.xml:79
msgid "Default [StyleBox] for the [MenuButton]."
msgstr "[StyleBox] por defecto para el [MenuButton]."
-#: doc/classes/MenuButton.xml:79
+#: doc/classes/MenuButton.xml:82
msgid "[StyleBox] used when the [MenuButton] is being pressed."
msgstr "[StyleBox] que se utiliza cuando se pulsa el [MenuButton]."
@@ -45408,7 +45608,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -49610,27 +49810,34 @@ msgid "Text [Color] used when the [OptionButton] is disabled."
msgstr "[Color] del texto utilizado cuando el [OptionButton] está desactivado."
#: doc/classes/OptionButton.xml:212
+msgid ""
+"Text [Color] used when the [OptionButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:215
msgid "Text [Color] used when the [OptionButton] is being hovered."
msgstr "[Color] del texto usado cuando el [OptionButton] está siendo movido."
-#: doc/classes/OptionButton.xml:215
+#: doc/classes/OptionButton.xml:218
msgid "Text [Color] used when the [OptionButton] is being pressed."
msgstr "[Color] del texto utilizado cuando se pulsa el [OptionButton]."
-#: doc/classes/OptionButton.xml:218
+#: doc/classes/OptionButton.xml:221
msgid "[StyleBox] used when the [OptionButton] is being hovered."
msgstr ""
"[StyleBox] usado cuando el cursor se encuentra sobre el [OptionButton]."
-#: doc/classes/OptionButton.xml:221
+#: doc/classes/OptionButton.xml:224
msgid "The horizontal space between [OptionButton]'s icon and text."
msgstr "El espacio horizontal entre el icono de [OptionButton] y el texto."
-#: doc/classes/OptionButton.xml:224
+#: doc/classes/OptionButton.xml:227
msgid "Default [StyleBox] for the [OptionButton]."
msgstr "Por defecto, [StyleBox] para el [OptionButton]."
-#: doc/classes/OptionButton.xml:227
+#: doc/classes/OptionButton.xml:230
msgid "[StyleBox] used when the [OptionButton] is being pressed."
msgstr "[StyleBox] utilizado cuando se presiona el [OptionButton]."
@@ -50179,7 +50386,7 @@ msgstr "Devuelve el número de hilos disponibles en el host."
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -50212,17 +50419,22 @@ msgstr ""
"[b]Nota:[/b] Este método está implementado en el MacOS."
#: doc/classes/OS.xml:379
+#, fuzzy
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
+"Devuelve el factor de escala de la pantalla especificada por índice.\n"
+"[b]Nota:[/b] En macOS el valor devuelto es [code]2.0[/code] para la pantalla "
+"hiDPI (Retina), y [code]1.0[/code] para todos los demás casos.\n"
+"[b]Nota:[/b] Este método está implementado en macOS."
#: doc/classes/OS.xml:386
#, fuzzy
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -50236,7 +50448,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -53553,10 +53765,12 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
@@ -53578,7 +53792,47 @@ msgstr ""
"comprobar, o booleanos para determinar si el rayo debe colisionar con "
"[PhysicsBody2D]s o [Area2D]s, respectivamente."
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+#, fuzzy
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+"Comprueba si un punto está dentro de alguna forma. Las formas en las que el "
+"punto está dentro se devuelven en un array que contiene diccionarios con los "
+"siguientes campos:\n"
+"[code]collider[/code]: El objeto que colisiona.\n"
+"[code]collider_id[/code]: El ID del objeto que colisiona.\n"
+"[code]metadata[/code]: Los metadatos de la forma que se intersecta. Estos "
+"metadatos son diferentes de [method Object.get_meta], y se establecen con "
+"[method PhysicsServer2D.shape_set_data].\n"
+"[code]rid[/code]: El objeto que se intersecta es [RID].\n"
+"[code]shape[/code]: El índice de la forma de la forma que colisiona.\n"
+"Además, el método puede tomar un array [code]exclude[/code] de objetos o "
+"[RID]s que deben ser excluidos de las colisiones, una máscara de bits "
+"[code]collision_mask[/code] que representa las capas de física para "
+"comprobar, o booleanos para determinar si el rayo debe colisionar con "
+"[PhysicsBody2D]s o [Area2D]s, respectivamente."
+
+#: doc/classes/Physics2DDirectSpaceState.xml:96
#, fuzzy
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
@@ -53597,7 +53851,7 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
"Intersecta un rayo en un espacio determinado. El objeto devuelto es un "
@@ -53620,7 +53874,7 @@ msgstr ""
"comprobar, o booleanos para determinar si el rayo debe colisionar con "
"[PhysicsBody2D]s o [Area2D]s, respectivamente."
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
#, fuzzy
msgid ""
"Checks the intersections of a shape, given through a "
@@ -53870,9 +54124,10 @@ msgid "Returns the continuous collision detection mode."
msgstr "Devuelve el modo de detección de colisión continua."
#: doc/classes/Physics2DServer.xml:351
-#, fuzzy
-msgid "Returns the [Physics2DDirectBodyState] of the body."
-msgstr "Devuelve el [PhysicsDirectBodyState2D] del cuerpo."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
+msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
msgid ""
@@ -54922,6 +55177,41 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
#, fuzzy
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+"Intersecta un rayo en un espacio determinado. El objeto devuelto es un "
+"diccionario con los siguientes campos:\n"
+"[code]collider[/code]: El objeto que colisiona.\n"
+"[code]collider_id[/code]: El ID del objeto que colisiona.\n"
+"[code]normal[/code]: La normalidad de la superficie del objeto en el punto "
+"de intersección.\n"
+"[code]position[/code]: El punto de intersección.\n"
+"[code]rid[/code]: El objeto que intersecta [RID].\n"
+"[code]shape[/code]: El índice de la forma de la forma en colisión.\n"
+"Si el rayo no intersectó nada, entonces se devuelve un diccionario vacío en "
+"su lugar.\n"
+"Además, el método puede tomar un array [code]exclude[/code] de objetos o "
+"[RID]s que deben ser excluidos de las colisiones, una máscara de bits "
+"[code]collision_mask[/code] que representa las capas de física para "
+"comprobar, o booleanos para determinar si el rayo debe colisionar con "
+"[PhysicsBody3D]s o [Area3D]s, respectivamente."
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+#, fuzzy
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -54955,7 +55245,7 @@ msgstr ""
"comprobar, o booleanos para determinar si el rayo debe colisionar con "
"[PhysicsBody3D]s o [Area3D]s, respectivamente."
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
#, fuzzy
msgid ""
"Checks the intersections of a shape, given through a "
@@ -55113,8 +55403,12 @@ msgstr ""
#: doc/classes/PhysicsServer.xml:335
#, fuzzy
-msgid "Returns the [PhysicsDirectBodyState] of the body."
-msgstr "Devuelve el [PhysicsDirectBodyState2D] del cuerpo."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
+msgstr ""
+"Devuelve el valor inicial de la propiedad especificada. Devuelve [code]null[/"
+"code] si la propiedad no existe."
#: doc/classes/PhysicsServer.xml:370
msgid ""
@@ -56391,29 +56685,30 @@ msgstr "Concatena un elemen al final del array."
msgid "Removes an element from the array by index."
msgstr "Elimina un elemento del array por indice."
-#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolColorArray.xml:66
-#: doc/classes/PoolIntArray.xml:67 doc/classes/PoolRealArray.xml:67
-#: doc/classes/PoolStringArray.xml:74 doc/classes/PoolVector2Array.xml:67
-#: doc/classes/PoolVector3Array.xml:66
+#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolIntArray.xml:67
+#: doc/classes/PoolRealArray.xml:67
+#, fuzzy
msgid ""
"Sets the size of the array. If the array is grown, reserves elements at the "
"end of the array. If the array is shrunk, truncates the array to the new "
-"size."
+"size.\n"
+"[b]Note:[/b] Added elements are not automatically initialized to 0 and will "
+"contain garbage, i.e. indeterminate values."
msgstr ""
"Establece el tamaño del conjunto. Si el array crece, reserva elementos al "
"final del array. Si el array se reduce, trunca el array al nuevo tamaño."
-#: doc/classes/PoolByteArray.xml:121
+#: doc/classes/PoolByteArray.xml:122
msgid "Changes the byte at the given index."
msgstr "Cambia el byte en el índice dado."
-#: doc/classes/PoolByteArray.xml:127 doc/classes/PoolColorArray.xml:79
-#: doc/classes/PoolRealArray.xml:80 doc/classes/PoolStringArray.xml:87
+#: doc/classes/PoolByteArray.xml:128 doc/classes/PoolColorArray.xml:79
+#: doc/classes/PoolRealArray.xml:81 doc/classes/PoolStringArray.xml:87
#: doc/classes/PoolVector2Array.xml:80 doc/classes/PoolVector3Array.xml:79
msgid "Returns the size of the array."
msgstr "Devuelve el tamaño del array."
-#: doc/classes/PoolByteArray.xml:135
+#: doc/classes/PoolByteArray.xml:136
#, fuzzy
msgid ""
"Returns the slice of the [PoolByteArray] between indices (inclusive) as a "
@@ -56459,6 +56754,16 @@ msgstr "Añade un [PackedColorArray] al final de este array."
msgid "Appends a value to the array."
msgstr "Añade un valor al array."
+#: doc/classes/PoolColorArray.xml:66 doc/classes/PoolStringArray.xml:74
+#: doc/classes/PoolVector2Array.xml:67 doc/classes/PoolVector3Array.xml:66
+msgid ""
+"Sets the size of the array. If the array is grown, reserves elements at the "
+"end of the array. If the array is shrunk, truncates the array to the new "
+"size."
+msgstr ""
+"Establece el tamaño del conjunto. Si el array crece, reserva elementos al "
+"final del array. Si el array se reduce, trunca el array al nuevo tamaño."
+
#: doc/classes/PoolColorArray.xml:73
msgid "Changes the [Color] at the given index."
msgstr "Cambia el [Color] en el índice dado."
@@ -56516,12 +56821,12 @@ msgstr ""
"posición debe ser válida, o al final de la array ([code]idx == size()[/"
"code])."
-#: doc/classes/PoolIntArray.xml:74
+#: doc/classes/PoolIntArray.xml:75
#, fuzzy
msgid "Changes the int at the given index."
msgstr "Cambia el entero en el índice dado."
-#: doc/classes/PoolIntArray.xml:80
+#: doc/classes/PoolIntArray.xml:81
msgid "Returns the array size."
msgstr "Devuelve el tamaño del array."
@@ -56558,7 +56863,7 @@ msgstr ""
msgid "Appends a [PoolRealArray] at the end of this array."
msgstr "Añade un [PackedColorArray] al final de este array."
-#: doc/classes/PoolRealArray.xml:74
+#: doc/classes/PoolRealArray.xml:75
msgid "Changes the float at the given index."
msgstr "Cambia el real en el índice dado."
@@ -58251,18 +58556,6 @@ msgid ""
msgstr ""
#: doc/classes/ProjectSettings.xml:204
-msgid ""
-"The project data directory is used for storing project-specific data "
-"(metadata, shader cache, etc.).\n"
-"[b]Note:[/b] Restart the application after changing this setting.\n"
-"[b]Note:[/b] Changing this value can help on platforms or with third-party "
-"tools where specific directory patterns are disallowed. Only modify this "
-"setting if you know that your environment requires it, as changing the "
-"default can impact compatibility with some external tools or plugins which "
-"expect the default [code].import[/code] folder."
-msgstr ""
-
-#: doc/classes/ProjectSettings.xml:209
#, fuzzy
msgid ""
"Specifies a file to override project settings. For example: [code]user://"
@@ -58277,7 +58570,7 @@ msgstr ""
"leyendo [code]res://override.cfg[/code] para anular la configuración del "
"proyecto (véase la descripción de esta clase en la parte superior)."
-#: doc/classes/ProjectSettings.xml:213
+#: doc/classes/ProjectSettings.xml:208
msgid ""
"If [code]true[/code], the project will save user data to its own user "
"directory (see [member application/config/custom_user_dir_name]). This "
@@ -58295,7 +58588,22 @@ msgstr ""
"(directorio de datos de usuario del sistema operativo)/Godot/app_userdata/"
"(nombre del proyecto)[/code]."
-#: doc/classes/ProjectSettings.xml:216
+#: doc/classes/ProjectSettings.xml:211
+msgid ""
+"If [code]true[/code], the project will use a hidden directory ([code]."
+"import[/code]) for storing project-specific data (metadata, shader cache, "
+"etc.).\n"
+"If [code]false[/code], a non-hidden directory ([code]import[/code]) will be "
+"used instead.\n"
+"[b]Note:[/b] Restart the application after changing this setting.\n"
+"[b]Note:[/b] Changing this value can help on platforms or with third-party "
+"tools where hidden directory patterns are disallowed. Only modify this "
+"setting if you know that your environment requires it, as changing the "
+"default can impact compatibility with some external tools or plugins which "
+"expect the default [code].import[/code] folder."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:217
#, fuzzy
msgid ""
"Icon set in [code].ico[/code] format used on Windows to set the game's icon. "
@@ -58305,7 +58613,7 @@ msgstr ""
"juego. Esto se hace automáticamente al inicio llamando al [method "
"DisplayServer.set_native_icon]."
-#: doc/classes/ProjectSettings.xml:219
+#: doc/classes/ProjectSettings.xml:220
msgid ""
"Time samples for frame deltas are subject to random variation introduced by "
"the platform, even when frames are displayed at regular intervals thanks to "
@@ -58319,14 +58627,14 @@ msgid ""
"adequate to render frames at the refresh rate."
msgstr ""
-#: doc/classes/ProjectSettings.xml:224
+#: doc/classes/ProjectSettings.xml:225
msgid ""
"[b]Experimental.[/b] Shifts the measurement of delta time for each frame to "
"just after the drawing has taken place. This may lead to more consistent "
"deltas and a reduction in frame stutters."
msgstr ""
-#: doc/classes/ProjectSettings.xml:227
+#: doc/classes/ProjectSettings.xml:228
msgid ""
"If [code]true[/code], disables printing to standard error. If [code]true[/"
"code], this also hides error and warning messages printed by [method "
@@ -58335,7 +58643,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:231
+#: doc/classes/ProjectSettings.xml:232
msgid ""
"If [code]true[/code], disables printing to standard output. This is "
"equivalent to starting the editor or project with the [code]--quiet[/code] "
@@ -58343,7 +58651,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:235
+#: doc/classes/ProjectSettings.xml:236
msgid ""
"If [code]true[/code], flushes the standard output stream every time a line "
"is printed. This affects both terminal logging and file logging.\n"
@@ -58359,14 +58667,14 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:241
+#: doc/classes/ProjectSettings.xml:242
msgid ""
"Debug build override for [member application/run/flush_stdout_on_print], as "
"performance is less important during debugging.\n"
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:245
+#: doc/classes/ProjectSettings.xml:246
msgid ""
"Forces a delay between frames in the main loop (in milliseconds). This may "
"be useful if you plan to disable vertical synchronization."
@@ -58374,7 +58682,7 @@ msgstr ""
"Fuerza un retardo entre fotogramas en el bucle principal (en milisegundos). "
"Esto puede ser útil si planea deshabilitar la sincronización vertical."
-#: doc/classes/ProjectSettings.xml:248
+#: doc/classes/ProjectSettings.xml:249
msgid ""
"If [code]true[/code], enables low-processor usage mode. This setting only "
"works on desktop platforms. The screen is not redrawn if nothing changes "
@@ -58387,7 +58695,7 @@ msgstr ""
"aplicaciones y editores, pero es bastante inútil (y puede perjudicar el "
"rendimiento) en la mayoría de los juegos."
-#: doc/classes/ProjectSettings.xml:251
+#: doc/classes/ProjectSettings.xml:252
msgid ""
"Amount of sleeping between frames when the low-processor usage mode is "
"enabled (in microseconds). Higher values will result in lower CPU usage."
@@ -58396,13 +58704,13 @@ msgstr ""
"procesador bajo (en microsegundos). Valores más altos resultarán en un menor "
"uso de la CPU."
-#: doc/classes/ProjectSettings.xml:254
+#: doc/classes/ProjectSettings.xml:255
msgid "Path to the main scene file that will be loaded when the project runs."
msgstr ""
"Ruta al archivo de la escena principal que se cargará cuando se ejecute el "
"proyecto."
-#: doc/classes/ProjectSettings.xml:257 doc/classes/ProjectSettings.xml:260
+#: doc/classes/ProjectSettings.xml:258 doc/classes/ProjectSettings.xml:261
msgid ""
"Audio buses will disable automatically when sound goes below a given dB "
"threshold for a given time. This saves CPU as effects assigned to that bus "
@@ -58413,7 +58721,7 @@ msgstr ""
"CPU ya que los efectos asignados a ese bus ya no harán ningún tipo de "
"procesamiento."
-#: doc/classes/ProjectSettings.xml:263
+#: doc/classes/ProjectSettings.xml:264
msgid ""
"Default [AudioBusLayout] resource file to use in the project, unless "
"overridden by the scene."
@@ -58421,7 +58729,7 @@ msgstr ""
"Archivo de recursos [AudioBusLayout] por defecto para usar en el proyecto, a "
"menos que sea sobreescrito por la escena."
-#: doc/classes/ProjectSettings.xml:266
+#: doc/classes/ProjectSettings.xml:267
msgid ""
"Specifies the audio driver to use. This setting is platform-dependent as "
"each platform supports different audio drivers. If left empty, the default "
@@ -58432,7 +58740,7 @@ msgstr ""
"audio. Si se deja en blanco, se utilizará el controlador de audio "
"predeterminado."
-#: doc/classes/ProjectSettings.xml:269
+#: doc/classes/ProjectSettings.xml:270
msgid ""
"If [code]true[/code], microphone input will be allowed. This requires "
"appropriate permissions to be set when exporting to Android or iOS."
@@ -58440,7 +58748,7 @@ msgstr ""
"Si [code]true[/code], se permitirá la entrada del micrófono. Esto requiere "
"que se establezcan los permisos apropiados al exportar a Android o iOS."
-#: doc/classes/ProjectSettings.xml:272
+#: doc/classes/ProjectSettings.xml:273
#, fuzzy
msgid ""
"The mixing rate used for audio (in Hz). In general, it's better to not touch "
@@ -58449,25 +58757,27 @@ msgstr ""
"Tasa de mezcla utilizada para el audio. En general, es mejor no tocar esto y "
"dejarlo al sistema operativo del host."
-#: doc/classes/ProjectSettings.xml:275
+#: doc/classes/ProjectSettings.xml:276
msgid ""
"Safer override for [member audio/mix_rate] in the Web platform. Here "
"[code]0[/code] means \"let the browser choose\" (since some browsers do not "
"like forcing the mix rate)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:278
+#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-"La latencia de salida en milisegundos para el audio. Valores más bajos "
-"resultarán en una menor latencia de audio a costa de un mayor uso de la CPU. "
-"Valores bajos pueden resultar en un cracking audible en un hardware más "
-"lento."
-#: doc/classes/ProjectSettings.xml:281
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
@@ -58476,7 +58786,7 @@ msgstr ""
"plataforma web, para evitar problemas de audio especialmente en los "
"dispositivos móviles."
-#: doc/classes/ProjectSettings.xml:284
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
@@ -58484,7 +58794,7 @@ msgstr ""
"Ajustar el retardo de audio hardcode cuando se reproduce el video. Es mejor "
"dejar esto intacto a menos que sepas lo que estás haciendo."
-#: doc/classes/ProjectSettings.xml:287
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -58501,7 +58811,7 @@ msgstr ""
"[code]6[/code] pero podría cambiar en el futuro debido a las actualizaciones "
"subyacentes de zlib."
-#: doc/classes/ProjectSettings.xml:290
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -58518,7 +58828,7 @@ msgstr ""
"[code]6[/code] pero podría cambiar en el futuro debido a las actualizaciones "
"subyacentes de zlib."
-#: doc/classes/ProjectSettings.xml:293
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -58529,7 +58839,7 @@ msgstr ""
"pequeños a costa de la velocidad de compresión. La velocidad de "
"descompresión no se ve afectada por el nivel de compresión."
-#: doc/classes/ProjectSettings.xml:296
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
@@ -58537,7 +58847,7 @@ msgstr ""
"Habilita [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]la "
"coincidencia a larga distancia[/url] en Zstandard."
-#: doc/classes/ProjectSettings.xml:299
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
@@ -58548,7 +58858,7 @@ msgstr ""
"pueden resultar en una mejor compresión, pero requerirán más memoria al "
"comprimir y descomprimir."
-#: doc/classes/ProjectSettings.xml:302
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -58560,14 +58870,14 @@ msgstr ""
"ser usada cuando se portan proyectos antiguos (Godot 2), ya que el uso de "
"variables de miembros es el estilo preferido a partir de Godot 3."
-#: doc/classes/ProjectSettings.xml:305
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
"Si [code]true[/code], habilita las advertencias cuando se utiliza una "
"constante como función."
-#: doc/classes/ProjectSettings.xml:308
+#: doc/classes/ProjectSettings.xml:311
#, fuzzy
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
@@ -58576,7 +58886,7 @@ msgstr ""
"Si [code]true[/code], activa las advertencias cuando se utilizan palabras "
"clave obsoletas."
-#: doc/classes/ProjectSettings.xml:311
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
@@ -58586,7 +58896,7 @@ msgstr ""
"la configuración de [code]debug/gdscript/warnings/*[/code]). Si [code]false[/"
"code], desactiva todas las advertencias de GDScript."
-#: doc/classes/ProjectSettings.xml:314
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
@@ -58594,7 +58904,7 @@ msgstr ""
"Si [code]true[/code], los scripts de la carpeta [code]res://addons[/code] no "
"generarán advertencias."
-#: doc/classes/ProjectSettings.xml:317
+#: doc/classes/ProjectSettings.xml:320
#, fuzzy
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
@@ -58603,14 +58913,14 @@ msgstr ""
"Si [code]true[/code], habilita las advertencias cuando se utiliza una "
"función como si fuera una propiedad."
-#: doc/classes/ProjectSettings.xml:320
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:323
+#: doc/classes/ProjectSettings.xml:326
#, fuzzy
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
@@ -58619,7 +58929,7 @@ msgstr ""
"Si [code]true[/code], habilita las advertencias al asignar el resultado de "
"una función que devuelve [code]void[/code] a una variable."
-#: doc/classes/ProjectSettings.xml:326
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
@@ -58627,7 +58937,7 @@ msgstr ""
"Si [code]true[/code], habilita las advertencias cuando se utiliza una "
"función como si fuera una propiedad."
-#: doc/classes/ProjectSettings.xml:329
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
@@ -58635,7 +58945,7 @@ msgstr ""
"Si [code]true[/code], habilita advertencias cuando un operador ternario "
"puede emitir valores con tipos incompatibles."
-#: doc/classes/ProjectSettings.xml:332
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
@@ -58643,7 +58953,7 @@ msgstr ""
"Si [code]true[/code], habilita las advertencias al dividir un entero por "
"otro entero (la parte decimal será descartada)."
-#: doc/classes/ProjectSettings.xml:335
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
@@ -58652,7 +58962,7 @@ msgstr ""
"Si [code]true[/code], habilita las advertencias al pasar un valor de real a "
"una función que espera un número entero (se convertirá y perderá precisión)."
-#: doc/classes/ProjectSettings.xml:338
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
@@ -58660,7 +58970,7 @@ msgstr ""
"Si [code]true[/code], habilita las advertencias cuando se utiliza una "
"propiedad como si fuera una función."
-#: doc/classes/ProjectSettings.xml:341
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -58672,7 +58982,7 @@ msgstr ""
"como argumento de la función). Esos valores de retorno se utilizan a veces "
"para denotar posibles errores mediante el uso de enum [enum Error]."
-#: doc/classes/ProjectSettings.xml:344
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
@@ -58682,7 +58992,7 @@ msgstr ""
"miembro local o de subclase que ensombrecería una variable en un nivel "
"superior (como una variable miembro)."
-#: doc/classes/ProjectSettings.xml:347
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
@@ -58692,7 +59002,7 @@ msgstr ""
"que no tiene efecto en el código circundante, como escribir [code]2 + 2[/"
"code] como una declaración."
-#: doc/classes/ProjectSettings.xml:350
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
@@ -58702,14 +59012,14 @@ msgstr ""
"ternaria que no tiene efecto en el código circundante, como escribir "
"[code]42 si está activo o 0[/code] como una declaración."
-#: doc/classes/ProjectSettings.xml:353
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
"Si [code]true[/code], todas las advertencias serán reportadas como si fueran "
"errores."
-#: doc/classes/ProjectSettings.xml:356
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
@@ -58717,7 +59027,7 @@ msgstr ""
"Si [code]true[/code], habilita las advertencias cuando se utiliza una "
"variable que no fue asignada previamente."
-#: doc/classes/ProjectSettings.xml:359
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
@@ -58727,7 +59037,7 @@ msgstr ""
"utilizando un operador de asignación como [code]+=[/code] si la variable no "
"fue asignada previamente."
-#: doc/classes/ProjectSettings.xml:362
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
@@ -58736,7 +59046,7 @@ msgstr ""
"inalcanzable (como después de una declaración de [code]return[/code] que "
"siempre se ejecutará)."
-#: doc/classes/ProjectSettings.xml:365
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
@@ -58745,13 +59055,13 @@ msgstr ""
"expresión cuyo tipo puede no ser compatible con el parámetro de función "
"esperado."
-#: doc/classes/ProjectSettings.xml:368
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
"Si [code]true[/code], habilita las advertencias cuando se realiza un "
"lanzamiento inseguro."
-#: doc/classes/ProjectSettings.xml:371
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
@@ -58759,7 +59069,7 @@ msgstr ""
"Si [code]true[/code], habilita las advertencias al llamar a un método cuya "
"presencia no está garantizada en tiempo de compilación en la clase."
-#: doc/classes/ProjectSettings.xml:374
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
@@ -58768,7 +59078,7 @@ msgstr ""
"propiedad cuya presencia no está garantizada en tiempo de compilación en la "
"clase."
-#: doc/classes/ProjectSettings.xml:377
+#: doc/classes/ProjectSettings.xml:380
#, fuzzy
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
@@ -58776,7 +59086,7 @@ msgstr ""
"Si [code]true[/code], habilita las advertencias cuando una señal no es "
"utilizada."
-#: doc/classes/ProjectSettings.xml:380
+#: doc/classes/ProjectSettings.xml:383
#, fuzzy
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
@@ -58784,26 +59094,26 @@ msgstr ""
"Si [code]true[/code], habilita las advertencias cuando una variable local no "
"se utiliza."
-#: doc/classes/ProjectSettings.xml:383
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
"Si [code]true[/code], habilita las advertencias cuando una señal no es "
"utilizada."
-#: doc/classes/ProjectSettings.xml:386
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
"Si [code]true[/code], habilita las advertencias cuando una variable local no "
"se utiliza."
-#: doc/classes/ProjectSettings.xml:389
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:392
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
@@ -58811,12 +59121,12 @@ msgstr ""
"Si [code]true[/code], habilita las advertencias al asignar el resultado de "
"una función que devuelve [code]void[/code] a una variable."
-#: doc/classes/ProjectSettings.xml:395
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
"Mensaje que se mostrará antes del retroceso cuando el motor se crashea."
-#: doc/classes/ProjectSettings.xml:398
+#: doc/classes/ProjectSettings.xml:401
#, fuzzy
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
@@ -58838,21 +59148,21 @@ msgstr ""
"no en tiempo real de fotogramas estáticos, o para probar el proyecto en "
"condiciones de retardo."
-#: doc/classes/ProjectSettings.xml:403
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr "Máxima pila de llamadas permitida para depurar GDScript."
-#: doc/classes/ProjectSettings.xml:406
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
"Cantidad máxima de funciones por fotograma permitidas en la elaboración de "
"perfiles."
-#: doc/classes/ProjectSettings.xml:409
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr "Imprime fotogramas por segundo a una salida estándar cada segundo."
-#: doc/classes/ProjectSettings.xml:412
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
@@ -58862,13 +59172,13 @@ msgstr ""
"Muestra información como las fugas de memoria, qué escenas y recursos se "
"están cargando, etc."
-#: doc/classes/ProjectSettings.xml:415
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
"Máxima pila de llamadas en el guión visual, para evitar la recursividad "
"infinita."
-#: doc/classes/ProjectSettings.xml:418
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
@@ -58876,7 +59186,7 @@ msgstr ""
"Color de los puntos de contacto entre las formas de colisión, visible cuando "
"\"Formas de colisión visibles\" está activado en el menú de Depuración."
-#: doc/classes/ProjectSettings.xml:421
+#: doc/classes/ProjectSettings.xml:424
#, fuzzy
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
@@ -58885,7 +59195,7 @@ msgstr ""
"Color de las formas de colisión, visible cuando \"Formas de colisión visibles"
"\" está activado en el menú de Depuración."
-#: doc/classes/ProjectSettings.xml:424
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
@@ -58894,7 +59204,7 @@ msgstr ""
"cuando \"Formas de colisión visibles\" está activado en el menú de "
"Depuración."
-#: doc/classes/ProjectSettings.xml:427
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
@@ -58902,7 +59212,7 @@ msgstr ""
"Color de las formas de colisión, visible cuando \"Formas de colisión visibles"
"\" está activado en el menú de Depuración."
-#: doc/classes/ProjectSettings.xml:430
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
@@ -58910,7 +59220,7 @@ msgstr ""
"Color de la geometría de navegación desactivada, visible cuando la "
"\"Navegación visible\" está activada en el menú de depuración."
-#: doc/classes/ProjectSettings.xml:433
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
@@ -58918,21 +59228,21 @@ msgstr ""
"Color de la geometría de navegación, visible cuando la \"Navegación visible"
"\" está activada en el menú de depuración."
-#: doc/classes/ProjectSettings.xml:436
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr "Imagen personalizada para el cursor del ratón (limitada a 256×256)."
-#: doc/classes/ProjectSettings.xml:439
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr "Punto donde se encuentra la imagen personalizada del cursor del ratón."
-#: doc/classes/ProjectSettings.xml:442
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
"Desplazamiento de la posición de las sugerencias, en relación con el punto "
"donde se encuentra el cursor del ratón."
-#: doc/classes/ProjectSettings.xml:445
+#: doc/classes/ProjectSettings.xml:448
#, fuzzy
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
@@ -58943,7 +59253,7 @@ msgstr ""
"Esta configuración no tiene efecto en el escritorio de Linux, ya que los "
"fallos de conocimiento de DPI no están soportados allí."
-#: doc/classes/ProjectSettings.xml:448
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
@@ -58952,7 +59262,7 @@ msgstr ""
"inactividad), por lo que el salvapantallas no toma el control. Funciona en "
"plataformas de escritorio y móviles."
-#: doc/classes/ProjectSettings.xml:451
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -58961,7 +59271,7 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:455
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
@@ -58969,7 +59279,7 @@ msgstr ""
"Si [code]verdad[/code], el indicador de casa se oculta automáticamente. Esto "
"sólo afecta a los dispositivos iOS sin un botón de inicio físico."
-#: doc/classes/ProjectSettings.xml:458
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -58979,7 +59289,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:463
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -58987,19 +59297,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:468
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:472
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:476
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -59013,7 +59323,7 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:481
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
@@ -59023,14 +59333,14 @@ msgstr ""
"escritorio, este es el tamaño de ventana por defecto. Los ajustes del modo "
"de estiramiento también utilizan esto como referencia cuando está activado."
-#: doc/classes/ProjectSettings.xml:484
+#: doc/classes/ProjectSettings.xml:487
#, fuzzy
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr "Permite que la ventana sea redimensionada por defecto."
-#: doc/classes/ProjectSettings.xml:488
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
@@ -59038,7 +59348,7 @@ msgstr ""
"Si es mayor que cero, sobreescribe la altura de la ventana al ejecutar el "
"juego. Es útil para probar los modos de estiramiento."
-#: doc/classes/ProjectSettings.xml:491
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
@@ -59046,7 +59356,7 @@ msgstr ""
"Si es mayor que cero, anula el ancho de la ventana al ejecutar el juego. Es "
"útil para probar los modos de estiramiento."
-#: doc/classes/ProjectSettings.xml:494
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
@@ -59056,7 +59366,7 @@ msgstr ""
"escritorio, este es el tamaño de ventana por defecto. La configuración del "
"modo ampliado también utiliza esto como referencia cuando está activado."
-#: doc/classes/ProjectSettings.xml:497
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
@@ -59064,7 +59374,7 @@ msgstr ""
"Especifica el controlador de la tableta a utilizar. Si se deja vacío, se "
"utilizará el controlador predeterminado."
-#: doc/classes/ProjectSettings.xml:500
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -59079,7 +59389,7 @@ msgstr ""
"muchas plataformas la harán cumplir independientemente (como las plataformas "
"móviles y HTML5)."
-#: doc/classes/ProjectSettings.xml:503
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -59099,7 +59409,7 @@ msgstr ""
"han experimentado una reducción de la mitad de la velocidad de los cuadros "
"Vsync (por ejemplo, de 60 FPS a 30 FPS) al usarla."
-#: doc/classes/ProjectSettings.xml:507
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -59115,7 +59425,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:515
+#: doc/classes/ProjectSettings.xml:518
#, fuzzy
msgid ""
"Search path for project-specific script templates. Godot will search for "
@@ -59126,7 +59436,7 @@ msgstr ""
"plantillas de script se buscarán tanto en la ruta específica del editor como "
"en esta ruta específica del proyecto."
-#: doc/classes/ProjectSettings.xml:518
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -59139,7 +59449,7 @@ msgstr ""
"especialmente si utilizas scripts incorporados que se serializan en los "
"archivos de la escena."
-#: doc/classes/ProjectSettings.xml:521
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
@@ -59147,7 +59457,7 @@ msgstr ""
"Valor por defecto para [member ScrollContainer.scroll_deadzone], que se "
"utilizará para todos los [ScrollContainer]s a menos que se sobrescriba."
-#: doc/classes/ProjectSettings.xml:524
+#: doc/classes/ProjectSettings.xml:527
#, fuzzy
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
@@ -59156,7 +59466,7 @@ msgstr ""
"Si [code]true[/code], cambia los botones Cancelar y Aceptar en los diálogos "
"de Windows y UWP para seguir las convenciones de la interfaz."
-#: doc/classes/ProjectSettings.xml:529
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
@@ -59164,7 +59474,7 @@ msgstr ""
"Ruta a un archivo de recursos [Theme] personalizado para usar en el proyecto "
"([code]theme[/code] o genérico [code]tres[/code]/[code]res[/code] extension)."
-#: doc/classes/ProjectSettings.xml:532
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
@@ -59172,12 +59482,12 @@ msgstr ""
"Ruta a un recurso [Font] personalizado para usar como predeterminado para "
"todos los elementos de la interfaz gráfica de usuario del proyecto."
-#: doc/classes/ProjectSettings.xml:535
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
"Si [code]true[/code], se asegura de que el tema utilizado funciona con HiDPI."
-#: doc/classes/ProjectSettings.xml:538
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
@@ -59185,15 +59495,15 @@ msgstr ""
"Ajuste del temporizador para la búsqueda incremental en los controles de "
"[Tree], [ItemList], etc. (en milisegundos)."
-#: doc/classes/ProjectSettings.xml:541
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr "Temporizador para detectar la inactividad en [TextEdit] (en segundos)."
-#: doc/classes/ProjectSettings.xml:544
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr "Retraso predeterminado para las sugerencias (en segundos)."
-#: doc/classes/ProjectSettings.xml:547
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -59208,7 +59518,7 @@ msgstr ""
"[Control]s. Sin embargo, los eventos asignados a la acción pueden ser "
"modificados."
-#: doc/classes/ProjectSettings.xml:551
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -59221,7 +59531,7 @@ msgstr ""
"eliminar ya que son necesarias para la lógica interna de varios [Control]s. "
"Sin embargo, los eventos asignados a la acción pueden ser modificados."
-#: doc/classes/ProjectSettings.xml:555
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -59233,7 +59543,7 @@ msgstr ""
"eliminar ya que son necesarias para la lógica interna de varios [Control]s. "
"Sin embargo, los eventos asignados a la acción pueden ser modificados."
-#: doc/classes/ProjectSettings.xml:559
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -59250,7 +59560,7 @@ msgstr ""
"eliminar ya que son necesarias para la lógica interna de varios [Control]s. "
"Sin embargo, los eventos asignados a la acción pueden ser modificados."
-#: doc/classes/ProjectSettings.xml:563
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -59265,7 +59575,7 @@ msgstr ""
"eliminar ya que son necesarias para la lógica interna de varios [Control]s. "
"Sin embargo, los eventos asignados a la acción pueden ser modificados."
-#: doc/classes/ProjectSettings.xml:567
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -59280,7 +59590,7 @@ msgstr ""
"eliminar ya que son necesarias para la lógica interna de varios [Control]s. "
"Sin embargo, los eventos asignados a la acción pueden ser modificados."
-#: doc/classes/ProjectSettings.xml:571
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -59297,7 +59607,7 @@ msgstr ""
"eliminar ya que son necesarias para la lógica interna de varios [Control]s. "
"Sin embargo, los eventos asignados a la acción pueden ser modificados."
-#: doc/classes/ProjectSettings.xml:575
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -59309,7 +59619,7 @@ msgstr ""
"eliminar ya que son necesarias para la lógica interna de varios [Control]s. "
"Sin embargo, los eventos asignados a la acción pueden ser modificados."
-#: doc/classes/ProjectSettings.xml:579
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -59326,7 +59636,7 @@ msgstr ""
"eliminar ya que son necesarias para la lógica interna de varios [Control]s. "
"Sin embargo, los eventos asignados a la acción pueden ser modificados."
-#: doc/classes/ProjectSettings.xml:583
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -59343,7 +59653,7 @@ msgstr ""
"eliminar ya que son necesarias para la lógica interna de varios [Control]s. "
"Sin embargo, los eventos asignados a la acción pueden ser modificados."
-#: doc/classes/ProjectSettings.xml:587
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -59355,7 +59665,7 @@ msgstr ""
"eliminar ya que son necesarias para la lógica interna de varios [Control]s. "
"Sin embargo, los eventos asignados a la acción pueden ser modificados."
-#: doc/classes/ProjectSettings.xml:591
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -59369,7 +59679,7 @@ msgstr ""
"eliminar ya que son necesarias para la lógica interna de varios [Control]s. "
"Sin embargo, los eventos asignados a la acción pueden ser modificados."
-#: doc/classes/ProjectSettings.xml:595
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -59381,7 +59691,7 @@ msgstr ""
"eliminar ya que son necesarias para la lógica interna de varios [Control]s. "
"Sin embargo, los eventos asignados a la acción pueden ser modificados."
-#: doc/classes/ProjectSettings.xml:599
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -59393,7 +59703,7 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:605
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
@@ -59401,7 +59711,7 @@ msgstr ""
"Si [code]true[/code], envía eventos de entrada de ratón al tocar o deslizar "
"en la pantalla táctil."
-#: doc/classes/ProjectSettings.xml:608
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
@@ -59409,452 +59719,452 @@ msgstr ""
"Si [code]true[/code], envía eventos de entrada táctil al hacer clic o "
"arrastrar el ratón."
-#: doc/classes/ProjectSettings.xml:611
+#: doc/classes/ProjectSettings.xml:614
#, fuzzy
msgid "Default delay for touch events. This only affects iOS devices."
msgstr "Retraso predeterminado para las sugerencias (en segundos)."
-#: doc/classes/ProjectSettings.xml:614
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr "Nombre opcional para la capa 1 de la física 2D."
-#: doc/classes/ProjectSettings.xml:617
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr "Nombre opcional para la capa 10 de física 2D."
-#: doc/classes/ProjectSettings.xml:620
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr "Nombre opcional para la capa 11 de física 2D."
-#: doc/classes/ProjectSettings.xml:623
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr "Nombre opcional para la capa 12 de física 2D."
-#: doc/classes/ProjectSettings.xml:626
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr "Nombre opcional para la capa 13 de la física 2D."
-#: doc/classes/ProjectSettings.xml:629
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr "Nombre opcional para la capa 14 de la física 2D."
-#: doc/classes/ProjectSettings.xml:632
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr "Nombre opcional para la capa 15 de física 2D."
-#: doc/classes/ProjectSettings.xml:635
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr "Nombre opcional para la capa 15 de la física 2D."
-#: doc/classes/ProjectSettings.xml:638
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr "Nombre opcional para la capa 17 de la física 2D."
-#: doc/classes/ProjectSettings.xml:641
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr "Nombre opcional para la capa 18 de física 2D."
-#: doc/classes/ProjectSettings.xml:644
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr "Nombre opcional para la capa 19 de la física 2D."
-#: doc/classes/ProjectSettings.xml:647
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr "Nombre opcional para la capa 2 de física 2D."
-#: doc/classes/ProjectSettings.xml:650
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr "Nombre opcional para la capa 20 de física 2D."
-#: doc/classes/ProjectSettings.xml:653
+#: doc/classes/ProjectSettings.xml:656
#, fuzzy
msgid "Optional name for the 2D physics layer 21."
msgstr "Nombre opcional para la capa 2 de física 2D."
-#: doc/classes/ProjectSettings.xml:656
+#: doc/classes/ProjectSettings.xml:659
#, fuzzy
msgid "Optional name for the 2D physics layer 22."
msgstr "Nombre opcional para la capa 2 de física 2D."
-#: doc/classes/ProjectSettings.xml:659
+#: doc/classes/ProjectSettings.xml:662
#, fuzzy
msgid "Optional name for the 2D physics layer 23."
msgstr "Nombre opcional para la capa 2 de física 2D."
-#: doc/classes/ProjectSettings.xml:662
+#: doc/classes/ProjectSettings.xml:665
#, fuzzy
msgid "Optional name for the 2D physics layer 24."
msgstr "Nombre opcional para la capa 2 de física 2D."
-#: doc/classes/ProjectSettings.xml:665
+#: doc/classes/ProjectSettings.xml:668
#, fuzzy
msgid "Optional name for the 2D physics layer 25."
msgstr "Nombre opcional para la capa 2 de física 2D."
-#: doc/classes/ProjectSettings.xml:668
+#: doc/classes/ProjectSettings.xml:671
#, fuzzy
msgid "Optional name for the 2D physics layer 26."
msgstr "Nombre opcional para la capa 2 de física 2D."
-#: doc/classes/ProjectSettings.xml:671
+#: doc/classes/ProjectSettings.xml:674
#, fuzzy
msgid "Optional name for the 2D physics layer 27."
msgstr "Nombre opcional para la capa 2 de física 2D."
-#: doc/classes/ProjectSettings.xml:674
+#: doc/classes/ProjectSettings.xml:677
#, fuzzy
msgid "Optional name for the 2D physics layer 28."
msgstr "Nombre opcional para la capa 2 de física 2D."
-#: doc/classes/ProjectSettings.xml:677
+#: doc/classes/ProjectSettings.xml:680
#, fuzzy
msgid "Optional name for the 2D physics layer 29."
msgstr "Nombre opcional para la capa 2 de física 2D."
-#: doc/classes/ProjectSettings.xml:680
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr "Nombre opcional para la capa 3 de física 2D."
-#: doc/classes/ProjectSettings.xml:683
+#: doc/classes/ProjectSettings.xml:686
#, fuzzy
msgid "Optional name for the 2D physics layer 30."
msgstr "Nombre opcional para la capa 3 de física 2D."
-#: doc/classes/ProjectSettings.xml:686
+#: doc/classes/ProjectSettings.xml:689
#, fuzzy
msgid "Optional name for the 2D physics layer 31."
msgstr "Nombre opcional para la capa 3 de física 2D."
-#: doc/classes/ProjectSettings.xml:689
+#: doc/classes/ProjectSettings.xml:692
#, fuzzy
msgid "Optional name for the 2D physics layer 32."
msgstr "Nombre opcional para la capa 3 de física 2D."
-#: doc/classes/ProjectSettings.xml:692
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr "Nombre opcional para la capa 4 de física 2D."
-#: doc/classes/ProjectSettings.xml:695
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr "Nombre opcional para la capa 5 de física 2D."
-#: doc/classes/ProjectSettings.xml:698
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr "Nombre opcional para la capa 6 de física 2D."
-#: doc/classes/ProjectSettings.xml:701
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr "Nombre opcional para la capa 7 de física 2D."
-#: doc/classes/ProjectSettings.xml:704
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr "Nombre opcional para la capa 8 de física 2D."
-#: doc/classes/ProjectSettings.xml:707
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr "Nombre opcional para la capa 9 de física 2D."
-#: doc/classes/ProjectSettings.xml:710
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr "Nombre opcional para la capa 1 del renderizado 2D."
-#: doc/classes/ProjectSettings.xml:713
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr "Nombre opcional para la capa 10 del renderizado 2D."
-#: doc/classes/ProjectSettings.xml:716
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr "Nombre opcional para la capa 11 del renderizado 2D."
-#: doc/classes/ProjectSettings.xml:719
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr "Nombre opcional para la capa 12 del renderizado 2D."
-#: doc/classes/ProjectSettings.xml:722
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr "Nombre opcional para la capa 13 del renderizado 2D."
-#: doc/classes/ProjectSettings.xml:725
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr "Nombre opcional para la capa 14 del renderizado 2D."
-#: doc/classes/ProjectSettings.xml:728
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr "Nombre opcional para la capa 15 del renderizado 2D."
-#: doc/classes/ProjectSettings.xml:731
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr "Nombre opcional para la capa 16 del renderizado 2D."
-#: doc/classes/ProjectSettings.xml:734
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr "Nombre opcional para la capa 17 del renderizado 2D."
-#: doc/classes/ProjectSettings.xml:737
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr "Nombre opcional para la capa 18 del renderizado 2D."
-#: doc/classes/ProjectSettings.xml:740
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr "Nombre opcional para la capa 19 del renderizado 2D."
-#: doc/classes/ProjectSettings.xml:743
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr "Nombre opcional para la capa 2 del renderizado 2D."
-#: doc/classes/ProjectSettings.xml:746
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr "Nombre opcional para la capa 20 del renderizado 2D."
-#: doc/classes/ProjectSettings.xml:749
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr "Nombre opcional para la capa 3 del renderizado 2D."
-#: doc/classes/ProjectSettings.xml:752
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr "Nombre opcional para la capa 4 del renderizado 2D."
-#: doc/classes/ProjectSettings.xml:755
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr "Nombre opcional para la capa 5 del renderizado 2D."
-#: doc/classes/ProjectSettings.xml:758
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr "Nombre opcional para la capa 6 del renderizado 2D."
-#: doc/classes/ProjectSettings.xml:761
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr "Nombre opcional para la capa 7 del renderizado 2D."
-#: doc/classes/ProjectSettings.xml:764
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr "Nombre opcional para la capa 8 del renderizado 2D."
-#: doc/classes/ProjectSettings.xml:767
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr "Nombre opcional para la capa 9 del renderizado 2D."
-#: doc/classes/ProjectSettings.xml:770
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr "Nombre opcional para la capa 1 de la física 3D."
-#: doc/classes/ProjectSettings.xml:773
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr "Nombre opcional para la capa 10 de física 3D."
-#: doc/classes/ProjectSettings.xml:776
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr "Nombre opcional para la capa 11 de la física 3D."
-#: doc/classes/ProjectSettings.xml:779
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr "Nombre opcional para la capa 12 de física 3D."
-#: doc/classes/ProjectSettings.xml:782
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr "Nombre opcional para la capa 13 de la física 3D."
-#: doc/classes/ProjectSettings.xml:785
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr "Nombre opcional para la capa 14 de la física 3D."
-#: doc/classes/ProjectSettings.xml:788
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr "Nombre opcional para la capa 15 de la física 3D."
-#: doc/classes/ProjectSettings.xml:791
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr "Nombre opcional para la capa 16 de la física 3D."
-#: doc/classes/ProjectSettings.xml:794
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr "Nombre opcional para la capa 17 de la física 3D."
-#: doc/classes/ProjectSettings.xml:797
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr "Nombre opcional para la capa 18 de la física 3D."
-#: doc/classes/ProjectSettings.xml:800
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr "Nombre opcional para la capa 19 de la física 3D."
-#: doc/classes/ProjectSettings.xml:803
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr "Nombre opcional para la capa 2 de la física 3D."
-#: doc/classes/ProjectSettings.xml:806
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr "Nombre opcional para la capa 20 de física 3D."
-#: doc/classes/ProjectSettings.xml:809
+#: doc/classes/ProjectSettings.xml:812
#, fuzzy
msgid "Optional name for the 3D physics layer 21."
msgstr "Nombre opcional para la capa 2 de la física 3D."
-#: doc/classes/ProjectSettings.xml:812
+#: doc/classes/ProjectSettings.xml:815
#, fuzzy
msgid "Optional name for the 3D physics layer 22."
msgstr "Nombre opcional para la capa 2 de la física 3D."
-#: doc/classes/ProjectSettings.xml:815
+#: doc/classes/ProjectSettings.xml:818
#, fuzzy
msgid "Optional name for the 3D physics layer 23."
msgstr "Nombre opcional para la capa 2 de la física 3D."
-#: doc/classes/ProjectSettings.xml:818
+#: doc/classes/ProjectSettings.xml:821
#, fuzzy
msgid "Optional name for the 3D physics layer 24."
msgstr "Nombre opcional para la capa 2 de la física 3D."
-#: doc/classes/ProjectSettings.xml:821
+#: doc/classes/ProjectSettings.xml:824
#, fuzzy
msgid "Optional name for the 3D physics layer 25."
msgstr "Nombre opcional para la capa 2 de la física 3D."
-#: doc/classes/ProjectSettings.xml:824
+#: doc/classes/ProjectSettings.xml:827
#, fuzzy
msgid "Optional name for the 3D physics layer 26."
msgstr "Nombre opcional para la capa 2 de la física 3D."
-#: doc/classes/ProjectSettings.xml:827
+#: doc/classes/ProjectSettings.xml:830
#, fuzzy
msgid "Optional name for the 3D physics layer 27."
msgstr "Nombre opcional para la capa 2 de la física 3D."
-#: doc/classes/ProjectSettings.xml:830
+#: doc/classes/ProjectSettings.xml:833
#, fuzzy
msgid "Optional name for the 3D physics layer 28."
msgstr "Nombre opcional para la capa 2 de la física 3D."
-#: doc/classes/ProjectSettings.xml:833
+#: doc/classes/ProjectSettings.xml:836
#, fuzzy
msgid "Optional name for the 3D physics layer 29."
msgstr "Nombre opcional para la capa 2 de la física 3D."
-#: doc/classes/ProjectSettings.xml:836
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr "Nombre opcional para la capa 3 de física 3D."
-#: doc/classes/ProjectSettings.xml:839
+#: doc/classes/ProjectSettings.xml:842
#, fuzzy
msgid "Optional name for the 3D physics layer 30."
msgstr "Nombre opcional para la capa 3 de física 3D."
-#: doc/classes/ProjectSettings.xml:842
+#: doc/classes/ProjectSettings.xml:845
#, fuzzy
msgid "Optional name for the 3D physics layer 31."
msgstr "Nombre opcional para la capa 3 de física 3D."
-#: doc/classes/ProjectSettings.xml:845
+#: doc/classes/ProjectSettings.xml:848
#, fuzzy
msgid "Optional name for the 3D physics layer 32."
msgstr "Nombre opcional para la capa 3 de física 3D."
-#: doc/classes/ProjectSettings.xml:848
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr "Nombre opcional para la capa 4 de física 3D."
-#: doc/classes/ProjectSettings.xml:851
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr "Nombre opcional para la capa 5 de física 3D."
-#: doc/classes/ProjectSettings.xml:854
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr "Nombre opcional para la capa 6 de física 3D."
-#: doc/classes/ProjectSettings.xml:857
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr "Nombre opcional para la capa 7 de física 3D."
-#: doc/classes/ProjectSettings.xml:860
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr "Nombre opcional para la capa 8 de física 3D."
-#: doc/classes/ProjectSettings.xml:863
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr "Nombre opcional para la capa 9 de física 3D."
-#: doc/classes/ProjectSettings.xml:866
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr "Nombre opcional para la capa 1 del renderizado 3D."
-#: doc/classes/ProjectSettings.xml:869
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr "Nombre opcional para la capa 10 del renderizado 3D."
-#: doc/classes/ProjectSettings.xml:872
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr "Nombre opcional para la capa 11 del renderizado 3D."
-#: doc/classes/ProjectSettings.xml:875
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr "Nombre opcional para la capa 12 del renderizado 3D."
-#: doc/classes/ProjectSettings.xml:878
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr "Nombre opcional para la capa 13 del renderizado 3D."
-#: doc/classes/ProjectSettings.xml:881
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr "Nombre opcional para la capa 14 del renderizado 3D"
-#: doc/classes/ProjectSettings.xml:884
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr "Nombre opcional para la capa 15 del renderizado 3D."
-#: doc/classes/ProjectSettings.xml:887
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr "Nombre opcional para la capa 16 del renderizado 3D."
-#: doc/classes/ProjectSettings.xml:890
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr "Nombre opcional para la capa 17 del renderizado 3D."
-#: doc/classes/ProjectSettings.xml:893
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr "Nombre opcional para la capa 18 del renderizado 3D."
-#: doc/classes/ProjectSettings.xml:896
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr "Nombre opcional para la capa 19 del renderizado 3D."
-#: doc/classes/ProjectSettings.xml:899
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr "Nombre opcional para la capa 2 del renderizado 3D."
-#: doc/classes/ProjectSettings.xml:902
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr "Nombre opcional para la capa 20 del renderizado 3D."
-#: doc/classes/ProjectSettings.xml:905
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr "Nombre opcional para la capa 3 del renderizado 3D."
-#: doc/classes/ProjectSettings.xml:908
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr "Nombre opcional para la capa 4 del renderizado 3D."
-#: doc/classes/ProjectSettings.xml:911
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr "Nombre opcional para la capa 5 del renderizado 3D."
-#: doc/classes/ProjectSettings.xml:914
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr "Nombre opcional para la capa 6 del renderizado 3D."
-#: doc/classes/ProjectSettings.xml:917
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr "Nombre opcional para la capa 7 del renderizado 3D."
-#: doc/classes/ProjectSettings.xml:920
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr "Nombre opcional para la capa 8 del renderizado 3D."
-#: doc/classes/ProjectSettings.xml:923
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr "Nombre opcional para la capa 9 del renderizado 3D."
-#: doc/classes/ProjectSettings.xml:926
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
@@ -59862,7 +60172,7 @@ msgstr ""
"El lugar al que recurrir si una traducción no está disponible en un idioma "
"determinado. Si se deja vacío, se usará [code]en[/code] (inglés)."
-#: doc/classes/ProjectSettings.xml:929
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
@@ -59870,17 +60180,17 @@ msgstr ""
"Si no está vacío, este lugar se utilizará cuando se ejecute el proyecto "
"desde el editor."
-#: doc/classes/ProjectSettings.xml:932
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr "Si [code]true[/code], registra todos los resultados en archivos."
-#: doc/classes/ProjectSettings.xml:935
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:938
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
@@ -59888,13 +60198,13 @@ msgstr ""
"Camino a los registros dentro del proyecto. Se recomienda utilizar una ruta "
"[code]user://[/code]."
-#: doc/classes/ProjectSettings.xml:941
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
"Especifica la cantidad máxima de archivos de registro permitidos (utilizados "
"para la rotación)."
-#: doc/classes/ProjectSettings.xml:946
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
@@ -59903,7 +60213,7 @@ msgstr ""
"funciones. Si te quedas sin espacio en ella (verás un error), puedes "
"aumentar el tamaño aquí."
-#: doc/classes/ProjectSettings.xml:949
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -59915,7 +60225,7 @@ msgstr ""
"los solicite en los hilos. Si los servidores se paralizan con demasiada "
"frecuencia al cargar recursos en un hilo, aumente este número."
-#: doc/classes/ProjectSettings.xml:952
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
@@ -59925,7 +60235,7 @@ msgstr ""
"depurador. Por encima de este valor, el contenido se elimina. Esto ayuda a "
"no detener la conexión del depurador."
-#: doc/classes/ProjectSettings.xml:955
+#: doc/classes/ProjectSettings.xml:958
#, fuzzy
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
@@ -59936,7 +60246,7 @@ msgstr ""
"encima de este valor, el contenido se elimina. Esto ayuda a no detener la "
"conexión del depurador."
-#: doc/classes/ProjectSettings.xml:958
+#: doc/classes/ProjectSettings.xml:961
#, fuzzy
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
@@ -59947,7 +60257,7 @@ msgstr ""
"depurador. Por encima de este valor, el contenido se elimina. Esto ayuda a "
"no detener la conexión del depurador."
-#: doc/classes/ProjectSettings.xml:961
+#: doc/classes/ProjectSettings.xml:964
#, fuzzy
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
@@ -59958,7 +60268,7 @@ msgstr ""
"Por encima de este valor, el contenido se elimina. Esto ayuda a no detener "
"la conexión del depurador."
-#: doc/classes/ProjectSettings.xml:964
+#: doc/classes/ProjectSettings.xml:967
#, fuzzy
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
@@ -59968,52 +60278,52 @@ msgstr ""
"Tamaño por defecto del flujo de paquetes para deserializar los datos de "
"Godot. Por encima de este tamaño, los datos se eliminan."
-#: doc/classes/ProjectSettings.xml:967
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
"Tiempo de espera (en segundos) para los intentos de conexión usando TCP."
-#: doc/classes/ProjectSettings.xml:970
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr "Tamaño máximo (en kiB) para el buffer de entrada [WebRTCDataChannel]."
-#: doc/classes/ProjectSettings.xml:973
+#: doc/classes/ProjectSettings.xml:976
#, fuzzy
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr "Tamaño máximo (en kiB) para el buffer de entrada [WebRTCDataChannel]."
-#: doc/classes/ProjectSettings.xml:976
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:979
+#: doc/classes/ProjectSettings.xml:982
#, fuzzy
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr "Tamaño máximo (en kiB) para el buffer de entrada [WebRTCDataChannel]."
-#: doc/classes/ProjectSettings.xml:982
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:985
+#: doc/classes/ProjectSettings.xml:988
#, fuzzy
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr "Tamaño máximo (en kiB) para el buffer de entrada [WebRTCDataChannel]."
-#: doc/classes/ProjectSettings.xml:988
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:991
+#: doc/classes/ProjectSettings.xml:994
#, fuzzy
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr "Tamaño máximo (en kiB) para el buffer de entrada [WebRTCDataChannel]."
-#: doc/classes/ProjectSettings.xml:994
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:997
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
@@ -60022,12 +60332,12 @@ msgstr ""
"remoto. Los valores más altos disminuyen los efectos de la latencia a costa "
"de un mayor uso del ancho de banda."
-#: doc/classes/ProjectSettings.xml:1000
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
"Tamaño de la página utilizada por el sistema de archivos remoto (en bytes)."
-#: doc/classes/ProjectSettings.xml:1003
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -60044,7 +60354,7 @@ msgstr ""
"defecto.\n"
"En caso de duda, deje este ajuste vacío."
-#: doc/classes/ProjectSettings.xml:1007
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
@@ -60052,7 +60362,7 @@ msgstr ""
"Al crear los nombres de los nodos de forma automática, establezca el tipo de "
"carcasa en este proyecto. Esto es mayormente un ajuste de editor."
-#: doc/classes/ProjectSettings.xml:1010
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
@@ -60060,7 +60370,7 @@ msgstr ""
"Qué usar para separar el nombre del nodo del número. Esto es mayormente un "
"ajuste de editor."
-#: doc/classes/ProjectSettings.xml:1013
+#: doc/classes/ProjectSettings.xml:1016
#, fuzzy
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
@@ -60070,14 +60380,14 @@ msgstr ""
"Tamaño de la tabla hash usada para el algoritmo de la cuadrícula hash 2D de "
"fase ancha."
-#: doc/classes/ProjectSettings.xml:1017
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1021
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -60090,7 +60400,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1025
+#: doc/classes/ProjectSettings.xml:1028
#, fuzzy
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
@@ -60112,7 +60422,7 @@ msgstr ""
"PhysicsServer2D.AREA_PARAM_GRAVITY, 98)\n"
"[/codeblock]"
-#: doc/classes/ProjectSettings.xml:1033
+#: doc/classes/ProjectSettings.xml:1036
#, fuzzy
msgid ""
"The default gravity direction in 2D.\n"
@@ -60134,7 +60444,7 @@ msgstr ""
"get_space(), Servidor de Física2D.AREA_PARAM_GRAVITY_VECTOR, Vector2(0, 1))\n"
"[/codeblock]"
-#: doc/classes/ProjectSettings.xml:1041
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -60147,7 +60457,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1045
+#: doc/classes/ProjectSettings.xml:1048
#, fuzzy
msgid ""
"Threshold defining the surface size that constitutes a large object with "
@@ -60159,7 +60469,7 @@ msgstr ""
"con respecto a las células en el algoritmo de la cuadrícula hash 2D de fase "
"ancha."
-#: doc/classes/ProjectSettings.xml:1049
+#: doc/classes/ProjectSettings.xml:1052
#, fuzzy
msgid ""
"Sets which physics engine to use for 2D physics.\n"
@@ -60170,7 +60480,7 @@ msgstr ""
"\"DEFAULT\" y \"GodotPhysics2D\" son lo mismo, ya que actualmente no hay "
"ningún servidor de física 2D alternativo implementado."
-#: doc/classes/ProjectSettings.xml:1053
+#: doc/classes/ProjectSettings.xml:1056
#, fuzzy
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
@@ -60181,7 +60491,7 @@ msgstr ""
"inactivo. Ver [constant PhysicsServer2D."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
-#: doc/classes/ProjectSettings.xml:1056
+#: doc/classes/ProjectSettings.xml:1059
#, fuzzy
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
@@ -60192,7 +60502,7 @@ msgstr ""
"inactivo. Ver [constant PhysicsServer2D."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
-#: doc/classes/ProjectSettings.xml:1059
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -60208,7 +60518,7 @@ msgstr ""
"de un modelo de hilo multi-hilo para la física. Asegúrate de evaluar si te "
"da un rendimiento extra y no hay regresiones al usarlo."
-#: doc/classes/ProjectSettings.xml:1063
+#: doc/classes/ProjectSettings.xml:1066
#, fuzzy
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
@@ -60218,13 +60528,13 @@ msgstr ""
"ponga a dormir. Ver [constant PhysicsServer2D."
"SPACE_PARAM_BODY_TIME_TO_SLEEP]."
-#: doc/classes/ProjectSettings.xml:1066
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1069
+#: doc/classes/ProjectSettings.xml:1072
#, fuzzy
msgid ""
"Sets whether the 3D physics world will be created with support for "
@@ -60233,7 +60543,7 @@ msgstr ""
"Establece si el mundo de la física 3D se creará con soporte para la física "
"[SoftBody3D]. Sólo se aplica al motor de física de Bullet."
-#: doc/classes/ProjectSettings.xml:1072
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -60246,7 +60556,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1076
+#: doc/classes/ProjectSettings.xml:1079
#, fuzzy
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
@@ -60268,7 +60578,7 @@ msgstr ""
"PhysicsServer3D.AREA_PARAM_GRAVITY, 9.8)\n"
"[/codeblock]"
-#: doc/classes/ProjectSettings.xml:1084
+#: doc/classes/ProjectSettings.xml:1087
#, fuzzy
msgid ""
"The default gravity direction in 3D.\n"
@@ -60290,7 +60600,7 @@ msgstr ""
"PhysicsServer3D.AREA_PARAM_GRAVITY_VECTOR, Vector3(0, -1, 0))\n"
"[/codeblock]"
-#: doc/classes/ProjectSettings.xml:1092
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -60303,13 +60613,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1096
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1099
+#: doc/classes/ProjectSettings.xml:1102
#, fuzzy
msgid ""
"Sets which physics engine to use for 3D physics.\n"
@@ -60322,11 +60632,11 @@ msgstr ""
"org]Bullet[/url]. El motor de \"GodotPhysics3D\" sigue siendo soportado como "
"una alternativa."
-#: doc/classes/ProjectSettings.xml:1103
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr "Habilita [member Viewport.physics_object_picking] en el viewport raíz."
-#: doc/classes/ProjectSettings.xml:1106
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -60340,7 +60650,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1112
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -60355,7 +60665,7 @@ msgstr ""
"cambiar el FPS de física en tiempo de ejecución, establece [member Engine."
"iterations_per_second] en su lugar."
-#: doc/classes/ProjectSettings.xml:1116
+#: doc/classes/ProjectSettings.xml:1119
#, fuzzy
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
@@ -60380,7 +60690,7 @@ msgstr ""
"mayoría; los valores superiores a 2 podrían hacer que el juego reaccionara a "
"los fotogramas caídos con un retraso notable y no se recomiendan."
-#: doc/classes/ProjectSettings.xml:1121
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -60390,7 +60700,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1125
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -60400,7 +60710,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1129
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -60411,7 +60721,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1133
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -60421,7 +60731,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1137
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -60429,7 +60739,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1141
+#: doc/classes/ProjectSettings.xml:1144
#, fuzzy
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
@@ -60449,7 +60759,7 @@ msgstr ""
"backend de renderizado GLES2, y sólo a las plataformas de escritorio. No es "
"necesaria cuando se utiliza el backend de Vulkan."
-#: doc/classes/ProjectSettings.xml:1145
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -60464,7 +60774,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1151
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -60473,13 +60783,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1156
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1159
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -60488,7 +60798,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1162
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -60498,7 +60808,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1165
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -60510,7 +60820,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1168
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -60520,24 +60830,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1171
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1174
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1177
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1180
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -60546,7 +60856,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1183
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -60554,7 +60864,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1186
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -60563,7 +60873,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1189
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -60573,7 +60883,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1193
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -60581,31 +60891,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1197
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1200
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1203
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1206
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1209
+#: doc/classes/ProjectSettings.xml:1212
#, fuzzy
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
@@ -60619,7 +60929,7 @@ msgstr ""
"predeterminado de forma programada, utilice el [method RenderingServer."
"set_default_clear_color]."
-#: doc/classes/ProjectSettings.xml:1212
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -60635,46 +60945,53 @@ msgstr ""
"reserva, es mejor borrar [code]default_env.tres[/code], o especificar aquí "
"un entorno por defecto diferente."
-#: doc/classes/ProjectSettings.xml:1215
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1218
+#: doc/classes/ProjectSettings.xml:1221
msgid ""
-"If [code]true[/code] and available on the target device, enables high "
-"floating point precision for all shader computations in GLES2.\n"
+"iOS specific override for [member rendering/gles2/compatibility/"
+"disable_half_float], due to poor support for half-float vertex compression "
+"on many devices."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1224
+msgid ""
+"If [code]true[/code] and available on the target Android device, enables "
+"high floating point precision for all shader computations in GLES2.\n"
"[b]Warning:[/b] High floating point precision can be extremely slow on older "
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1225
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1228
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1231
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1234
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -60682,7 +60999,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1237
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -60692,7 +61009,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1240
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -60701,7 +61018,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1243
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -60710,14 +61027,14 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1246
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1249
+#: doc/classes/ProjectSettings.xml:1255
#, fuzzy
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
@@ -60728,7 +61045,7 @@ msgstr ""
"Este algoritmo sólo es compatible con las plataformas y consolas de "
"escritorio."
-#: doc/classes/ProjectSettings.xml:1252
+#: doc/classes/ProjectSettings.xml:1258
#, fuzzy
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
@@ -60745,7 +61062,7 @@ msgstr ""
"[code]6[/code] pero podría cambiar en el futuro debido a las actualizaciones "
"subyacentes de zlib."
-#: doc/classes/ProjectSettings.xml:1255
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -60753,7 +61070,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1258
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -60762,7 +61079,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -60772,13 +61089,13 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1267
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1277
#, fuzzy
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
@@ -60789,7 +61106,7 @@ msgstr ""
"cinematico. Si [code]false[/code], las colisiones se manejarán como un "
"cuerpo estático."
-#: doc/classes/ProjectSettings.xml:1274
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -60798,13 +61115,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -60814,14 +61131,14 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1296
#, fuzzy
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
@@ -60831,7 +61148,7 @@ msgstr ""
"size] en los dispositivos móviles, debido a problemas de rendimiento o de "
"compatibilidad con el controlador."
-#: doc/classes/ProjectSettings.xml:1293
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
@@ -60839,7 +61156,7 @@ msgstr ""
"Desactiva el paso previo de profundidad para algunos fabricantes de GPU "
"(normalmente móviles), ya que su arquitectura ya lo hace."
-#: doc/classes/ProjectSettings.xml:1296
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
@@ -60849,7 +61166,7 @@ msgstr ""
"renderizar los materiales. Esto aumenta el rendimiento en escenas con alto "
"sobregiro, cuando se utilizan materiales complejos e iluminación."
-#: doc/classes/ProjectSettings.xml:1299
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
@@ -60859,7 +61176,7 @@ msgstr ""
"en sombras más nítidas, a costa del rendimiento. El valor se redondeará a la "
"potencia más cercana de 2."
-#: doc/classes/ProjectSettings.xml:1302
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
@@ -60868,7 +61185,7 @@ msgstr ""
"directional_shadow/size] en los dispositivos móviles, debido a problemas de "
"rendimiento o de apoyo al driver."
-#: doc/classes/ProjectSettings.xml:1305
+#: doc/classes/ProjectSettings.xml:1311
#, fuzzy
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
@@ -60886,7 +61203,7 @@ msgstr ""
"[code]OS.get_current_video_driver[/code] para consultarla en tiempo de "
"ejecución."
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -60898,7 +61215,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -60906,7 +61223,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1316
+#: doc/classes/ProjectSettings.xml:1322
#, fuzzy
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
@@ -60921,7 +61238,7 @@ msgstr ""
"[b]Nota:[/b] La MSAA no está disponible en la exportación a HTML5 utilizando "
"el backend GLES2."
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -60930,7 +61247,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1323
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -60944,7 +61261,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1328
+#: doc/classes/ProjectSettings.xml:1334
#, fuzzy
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
@@ -60959,7 +61276,7 @@ msgstr ""
"la imagen se vea borrosa, especialmente en resoluciones más bajas. Puede "
"funcionar relativamente bien en resoluciones grandes como 1440p y 4K."
-#: doc/classes/ProjectSettings.xml:1331
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -60974,7 +61291,7 @@ msgstr ""
"de memoria. Si [code]false[/code], se utiliza el filtrado lineal de mipmaps "
"(también llamado \"filtrado trilíneo\")."
-#: doc/classes/ProjectSettings.xml:1334
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -60990,7 +61307,7 @@ msgstr ""
"[code]DEPTH_TEXTURE[/code] no estarán disponibles en los shaders y los "
"efectos de post-procesamiento no estarán disponibles en el [Environment]."
-#: doc/classes/ProjectSettings.xml:1337
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
@@ -61000,14 +61317,14 @@ msgstr ""
"framebuffer_allocation] en los dispositivos móviles, debido a problemas de "
"rendimiento o de compatibilidad con el controlador."
-#: doc/classes/ProjectSettings.xml:1340
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1343
+#: doc/classes/ProjectSettings.xml:1349
#, fuzzy
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
@@ -61017,27 +61334,27 @@ msgstr ""
"force_vertex_shading] en los dispositivos móviles, debido a problemas de "
"rendimiento o de compatibilidad con el controlador."
-#: doc/classes/ProjectSettings.xml:1346
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1349
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1352
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1355
+#: doc/classes/ProjectSettings.xml:1361
#, fuzzy
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
@@ -61048,7 +61365,7 @@ msgstr ""
"reflections/ggx_samples] en dispositivos móviles, debido a problemas de "
"rendimiento o de compatibilidad con el controlador."
-#: doc/classes/ProjectSettings.xml:1358
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -61059,7 +61376,7 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1368
#, fuzzy
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
@@ -61072,7 +61389,7 @@ msgstr ""
"significativamente más lento de calcular y utiliza [member rendering/quality/"
"reflections/roughness_layers] veces más memoria."
-#: doc/classes/ProjectSettings.xml:1365
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
@@ -61082,7 +61399,7 @@ msgstr ""
"reflections/texture_array_reflections] en dispositivos móviles, debido a "
"problemas de rendimiento o compatibilidad con el controlador."
-#: doc/classes/ProjectSettings.xml:1368
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
@@ -61090,7 +61407,7 @@ msgstr ""
"Si [code]true[/code], utiliza un modelo Blinn más rápido pero de menor "
"calidad para generar reflejos borrosos en lugar del modelo GGX."
-#: doc/classes/ProjectSettings.xml:1371
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
@@ -61100,7 +61417,7 @@ msgstr ""
"shadinging/force_blinn_over_ggx] en los dispositivos móviles, debido a "
"problemas de rendimiento o de soporte de los conductores."
-#: doc/classes/ProjectSettings.xml:1374
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
@@ -61108,7 +61425,7 @@ msgstr ""
"Si [code]true[/code], utiliza un modelo de iluminación de material Lambert "
"más rápido pero de menor calidad en lugar del Burley."
-#: doc/classes/ProjectSettings.xml:1377
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
@@ -61118,7 +61435,7 @@ msgstr ""
"shadinging/force_lambert_over_burley] en los dispositivos móviles, debido a "
"problemas de rendimiento o de apoyo al conductor."
-#: doc/classes/ProjectSettings.xml:1380
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
@@ -61129,7 +61446,7 @@ msgstr ""
"la calidad enormemente. Se puede utilizar para optimizar el rendimiento en "
"dispositivos móviles de gama baja."
-#: doc/classes/ProjectSettings.xml:1383
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
@@ -61139,7 +61456,7 @@ msgstr ""
"force_vertex_shading] en los dispositivos móviles, debido a problemas de "
"rendimiento o de compatibilidad con el controlador."
-#: doc/classes/ProjectSettings.xml:1386
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -61150,7 +61467,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -61159,8 +61476,8 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1393 doc/classes/ProjectSettings.xml:1396
#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
@@ -61168,7 +61485,7 @@ msgstr ""
"Tamaño del cuadrante de subdivisión para el mapeo de sombras. Ver la "
"documentación del mapeo de sombras."
-#: doc/classes/ProjectSettings.xml:1405
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
@@ -61176,7 +61493,7 @@ msgstr ""
"Tamaño para el atlas de sombras (usado para OmniLights y SpotLights). Vea la "
"documentación."
-#: doc/classes/ProjectSettings.xml:1408
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
@@ -61185,7 +61502,7 @@ msgstr ""
"size] en los dispositivos móviles, debido a problemas de rendimiento o de "
"compatibilidad con el controlador."
-#: doc/classes/ProjectSettings.xml:1411
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -61196,7 +61513,7 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1421
#, fuzzy
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
@@ -61206,14 +61523,14 @@ msgstr ""
"size] en los dispositivos móviles, debido a problemas de rendimiento o de "
"compatibilidad con el controlador."
-#: doc/classes/ProjectSettings.xml:1418
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -61225,47 +61542,47 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1428
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1435
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1438
+#: doc/classes/ProjectSettings.xml:1444
#, fuzzy
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr "La fuerza del efecto de dispersión del subsuelo."
-#: doc/classes/ProjectSettings.xml:1441
+#: doc/classes/ProjectSettings.xml:1447
#, fuzzy
msgid "Max radius used for subsurface scattering samples."
msgstr "La fuerza del efecto de dispersión del subsuelo."
-#: doc/classes/ProjectSettings.xml:1444
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1447
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1450
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
@@ -61275,7 +61592,7 @@ msgstr ""
"mejorar enormemente el rendimiento, pero la sincronización con el hilo "
"principal puede causar un poco más de temblor."
-#: doc/classes/ProjectSettings.xml:1453
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -61283,7 +61600,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1463
#, fuzzy
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
@@ -61294,14 +61611,14 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
"Si [code]true[/code], el importador de texturas importará texturas "
"comprimidas con VRAM usando el algoritmo BPTC. Este algoritmo de compresión "
"de texturas sólo está soportado en plataformas de escritorio, y sólo cuando "
"se utiliza el renderizador Vulkan."
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1467
#, fuzzy
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
@@ -61311,14 +61628,14 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
"Si [code]true[/code], el importador de texturas importará texturas "
"comprimidas con VRAM usando el algoritmo BPTC. Este algoritmo de compresión "
"de texturas sólo está soportado en plataformas de escritorio, y sólo cuando "
"se utiliza el renderizador Vulkan."
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1471
#, fuzzy
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
@@ -61328,14 +61645,14 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
"Si [code]true[/code], el importador de texturas importará texturas "
"comprimidas con VRAM usando el algoritmo BPTC. Este algoritmo de compresión "
"de texturas sólo está soportado en plataformas de escritorio, y sólo cuando "
"se utiliza el renderizador Vulkan."
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1475
#, fuzzy
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
@@ -61345,14 +61662,14 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
"Si [code]true[/code], el importador de texturas importará texturas "
"comprimidas con VRAM usando el algoritmo BPTC. Este algoritmo de compresión "
"de texturas sólo está soportado en plataformas de escritorio, y sólo cuando "
"se utiliza el renderizador Vulkan."
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1479
#, fuzzy
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
@@ -61362,14 +61679,14 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
"Si [code]true[/code], el importador de texturas importará texturas "
"comprimidas con VRAM usando el algoritmo BPTC. Este algoritmo de compresión "
"de texturas sólo está soportado en plataformas de escritorio, y sólo cuando "
"se utiliza el renderizador Vulkan."
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1483
#, fuzzy
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
@@ -62254,14 +62571,22 @@ msgstr ""
"Devuelve [code]true[/code] si este [Rect2] encierra completamente otro."
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
-msgstr "Devuelve este [Rect2] ampliado para incluir un punto determinado."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
+msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr "Devuelve el área de la [Rect2]."
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
@@ -62269,7 +62594,7 @@ msgstr ""
"Devuelve una copia del [Rect2] crecido una cantidad dada de unidades hacia "
"todos los lados."
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
@@ -62277,7 +62602,7 @@ msgstr ""
"Devuelve una copia del [Rect2] crecido una cantidad dada de unidades hacia "
"todos los lados."
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
@@ -62285,15 +62610,21 @@ msgstr ""
"Devuelve una copia del [Rect2] crecido una cantidad dada de unidades hacia "
"la dirección del [enum Margin]."
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr "Devuelve [code]true[/code] si la [Rect2] está plana o vacía."
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
-msgstr "Devuelve [code]true[/code] si la [Rect2] contiene un punto."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
+msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -62305,7 +62636,7 @@ msgstr ""
"Si [code]include_borders[/code] es [code]true[/code], también se considerará "
"que se superponen si sus bordes se tocan, incluso sin intersección."
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
@@ -62315,7 +62646,7 @@ msgstr ""
"aproximadamente iguales, llamando a [code]is_equal_approx[/code] en cada "
"componente."
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
"Devuelve un [Rect2] más grande que contiene este [Rect2] y [code]b[/code]."
@@ -65453,6 +65784,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -65470,7 +65817,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -65478,11 +65825,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -65492,19 +65839,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -72560,12 +72907,15 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-"Adición de vértices de una determinada superficie [Mesh] al array de "
-"vértices actual con la [Transform] especificada."
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
@@ -72573,13 +72923,13 @@ msgstr ""
"Llamado antes de añadir cualquier vértice. Toma el tipo primitivo como "
"argumento (por ejemplo, [constant Mesh.PRIMITIVE_TRIANGLES])."
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
"Despeja toda la información pasada a la herramienta de la superficie hasta "
"ahora."
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
#, fuzzy
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
@@ -72597,7 +72947,7 @@ msgstr ""
"constantes [code]ARRAY_COMPRESS_*[/code] en [enum Mesh.ArrayFormat] para "
"otras banderas."
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
@@ -72607,11 +72957,11 @@ msgstr ""
"add_surface_from_arrays]. De esta manera se puede seguir procesando los "
"datos de la malla usando la API [ArrayMesh]."
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr "Crea un array de vértices a partir de una [Mesh] existente."
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
@@ -72620,11 +72970,11 @@ msgstr ""
"[Mesh] existente. Esto puede ser usado para extraer una pose específica de "
"una forma de mezcla."
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr "Elimina el array de índices expandiendo el array de vértices."
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -72636,7 +72986,7 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
#, fuzzy
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
@@ -72645,7 +72995,7 @@ msgstr ""
"Genera un vector tangente para cada vértice. Requiere que cada vértice tenga "
"ya fijados los UV y los normales."
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
#, fuzzy
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
@@ -72654,7 +73004,7 @@ msgstr ""
"Encoge el array de vértices creando un array de índices (evita la "
"reutilización de los vértices)."
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
"Establece [Material] para ser usado por la [Mesh] que estás construyendo."
@@ -76202,31 +76552,38 @@ msgid "Text [Color] used when the [ToolButton] is disabled."
msgstr "[Color] del texto utilizado cuando el [Button] está desactivado."
#: doc/classes/ToolButton.xml:39
+msgid ""
+"Text [Color] used when the [ToolButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:42
#, fuzzy
msgid "Text [Color] used when the [ToolButton] is being hovered."
msgstr "[Color] del texto usado cuando el [Button] tiene encima el cursor."
-#: doc/classes/ToolButton.xml:42
+#: doc/classes/ToolButton.xml:45
#, fuzzy
msgid "Text [Color] used when the [ToolButton] is being pressed."
msgstr "[Color] del texto utilizado cuando se pulsa el [Button]."
-#: doc/classes/ToolButton.xml:45
+#: doc/classes/ToolButton.xml:48
#, fuzzy
msgid "[StyleBox] used when the [ToolButton] is being hovered."
msgstr "[StyleBox] que se usa cuando el [Button] tiene encima el cursor."
-#: doc/classes/ToolButton.xml:48
+#: doc/classes/ToolButton.xml:51
#, fuzzy
msgid "The horizontal space between [ToolButton]'s icon and text."
msgstr "El espacio horizontal entre el icono y el texto de [Button]."
-#: doc/classes/ToolButton.xml:51
+#: doc/classes/ToolButton.xml:54
#, fuzzy
msgid "Default [StyleBox] for the [ToolButton]."
msgstr "[StyleBox] por defecto para el [Button]."
-#: doc/classes/ToolButton.xml:54
+#: doc/classes/ToolButton.xml:57
#, fuzzy
msgid "[StyleBox] used when the [ToolButton] is being pressed."
msgstr "[StyleBox] que se usa cuando se presiona el [Button]."
@@ -92058,6 +92415,64 @@ msgstr ""
"Si es [code]true[/code], los nodos hijos son ordenados, de lo contrario el "
"ordenado está deshabilitado."
+#~ msgid "Returns this [AABB] expanded to include a given point."
+#~ msgstr "Devuelve este [AABB] ampliado para incluir un punto dado."
+
+#, fuzzy
+#~ msgid "Returns the [Physics2DDirectBodyState] of the body."
+#~ msgstr "Devuelve el [PhysicsDirectBodyState2D] del cuerpo."
+
+#, fuzzy
+#~ msgid "Returns the [PhysicsDirectBodyState] of the body."
+#~ msgstr "Devuelve el [PhysicsDirectBodyState2D] del cuerpo."
+
+#~ msgid ""
+#~ "Output latency in milliseconds for audio. Lower values will result in "
+#~ "lower audio latency at the cost of increased CPU usage. Low values may "
+#~ "result in audible cracking on slower hardware."
+#~ msgstr ""
+#~ "La latencia de salida en milisegundos para el audio. Valores más bajos "
+#~ "resultarán en una menor latencia de audio a costa de un mayor uso de la "
+#~ "CPU. Valores bajos pueden resultar en un cracking audible en un hardware "
+#~ "más lento."
+
+#~ msgid "Returns this [Rect2] expanded to include a given point."
+#~ msgstr "Devuelve este [Rect2] ampliado para incluir un punto determinado."
+
+#~ msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#~ msgstr "Devuelve [code]true[/code] si la [Rect2] contiene un punto."
+
+#~ msgid ""
+#~ "Append vertices from a given [Mesh] surface onto the current vertex array "
+#~ "with specified [Transform]."
+#~ msgstr ""
+#~ "Adición de vértices de una determinada superficie [Mesh] al array de "
+#~ "vértices actual con la [Transform] especificada."
+
+#, fuzzy
+#~ msgid ""
+#~ "Returns a list of intersecting [Area]s. For performance reasons "
+#~ "(collisions are all processed at the same time) this list is modified "
+#~ "once during the physics step, not immediately after objects are moved. "
+#~ "Consider using signals instead."
+#~ msgstr ""
+#~ "Devuelve una lista de los [Area2D] que se intersectan. Por razones de "
+#~ "rendimiento (las colisiones se procesan todas al mismo tiempo) esta lista "
+#~ "se modifica una vez durante el paso de la física, no inmediatamente "
+#~ "después de que los objetos se muevan. Considere la posibilidad de usar "
+#~ "señales en su lugar."
+
+#, fuzzy
+#~ msgid "Emitted when the resource value was set and user clicked to edit it."
+#~ msgstr "Emitido cuando se selecciona un recurso en el inspector."
+
+#~ msgid ""
+#~ "OpenGL texture format [code]RED[/code] with a single component and a "
+#~ "bitdepth of 8."
+#~ msgstr ""
+#~ "Formato de textura OpenGL [code]RED[/code] con un solo componente y una "
+#~ "profundidad de bits de 8."
+
#~ msgid "Returns the label used for built-in text."
#~ msgstr "Devuelve la etiqueta utilizada para el texto interno."
diff --git a/doc/translations/fa.po b/doc/translations/fa.po
index 20951755d0..b3ae3e927c 100644
--- a/doc/translations/fa.po
+++ b/doc/translations/fa.po
@@ -28,43 +28,43 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 4.7-dev\n"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Description"
msgstr "تعریÙ"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Tutorials"
msgstr "آموزش‌ها"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Properties"
msgstr "خصوصیات"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Methods"
msgstr "توابع"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Theme Properties"
msgstr "خصوصیات زمینه"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Signals"
msgstr "سیگنال‌ها"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Enumerations"
msgstr "شمارش ها"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Constants"
msgstr "ثابت ها"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Property Descriptions"
msgstr "توضیحات خصیصه"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Method Descriptions"
msgstr "توضیحات تابع"
@@ -4030,112 +4030,121 @@ msgid ""
msgstr ""
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr ""
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
msgstr ""
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
msgstr ""
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
msgstr ""
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr ""
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr ""
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr ""
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
msgstr ""
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr ""
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
msgstr ""
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
msgstr ""
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr ""
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
"positive.\n"
@@ -5213,7 +5222,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -6649,21 +6658,25 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
#: doc/classes/Area.xml:17
msgid ""
-"Returns a list of intersecting [Area]s. For performance reasons (collisions "
-"are all processed at the same time) this list is modified once during the "
-"physics step, not immediately after objects are moved. Consider using "
-"signals instead."
+"Returns a list of intersecting [Area]s. The overlapping area's [member "
+"CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:23
+#: doc/classes/Area.xml:24
msgid ""
-"Returns a list of intersecting [PhysicsBody]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody]s. The overlapping body's "
+"[member CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:30
+#: doc/classes/Area.xml:32
msgid ""
"If [code]true[/code], the given area overlaps the Area.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6671,7 +6684,7 @@ msgid ""
"physics step. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:38
+#: doc/classes/Area.xml:40
msgid ""
"If [code]true[/code], the given physics body overlaps the Area.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6682,7 +6695,7 @@ msgid ""
"their tiles with collision shapes as a virtual physics body)."
msgstr ""
-#: doc/classes/Area.xml:46
+#: doc/classes/Area.xml:48
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
"velocity lost per second.\n"
@@ -6690,41 +6703,41 @@ msgid ""
"details about damping."
msgstr ""
-#: doc/classes/Area.xml:50 doc/classes/Area2D.xml:52
+#: doc/classes/Area.xml:52 doc/classes/Area2D.xml:54
msgid "The name of the area's audio bus."
msgstr ""
-#: doc/classes/Area.xml:53 doc/classes/Area2D.xml:55
+#: doc/classes/Area.xml:55 doc/classes/Area2D.xml:57
msgid ""
"If [code]true[/code], the area's audio bus overrides the default audio bus."
msgstr ""
-#: doc/classes/Area.xml:56
+#: doc/classes/Area.xml:58
msgid ""
"The area's gravity intensity (in meters per second squared). This value "
"multiplies the gravity vector. This is useful to alter the force of gravity "
"without altering its direction."
msgstr ""
-#: doc/classes/Area.xml:59 doc/classes/Area2D.xml:61
+#: doc/classes/Area.xml:61 doc/classes/Area2D.xml:63
msgid ""
"The falloff factor for point gravity. The greater the value, the faster "
"gravity decreases with distance."
msgstr ""
-#: doc/classes/Area.xml:62 doc/classes/Area2D.xml:64
+#: doc/classes/Area.xml:64 doc/classes/Area2D.xml:66
msgid ""
"If [code]true[/code], gravity is calculated from a point (set via [member "
"gravity_vec]). See also [member space_override]."
msgstr ""
-#: doc/classes/Area.xml:65 doc/classes/Area2D.xml:67
+#: doc/classes/Area.xml:67 doc/classes/Area2D.xml:69
msgid ""
"The area's gravity vector (not normalized). If gravity is a point (see "
"[member gravity_point]), this will be the point of attraction."
msgstr ""
-#: doc/classes/Area.xml:68
+#: doc/classes/Area.xml:70
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
"velocity lost per second.\n"
@@ -6732,61 +6745,61 @@ msgid ""
"about damping."
msgstr ""
-#: doc/classes/Area.xml:72 doc/classes/Area2D.xml:74
+#: doc/classes/Area.xml:74 doc/classes/Area2D.xml:76
msgid "If [code]true[/code], other monitoring areas can detect this area."
msgstr ""
-#: doc/classes/Area.xml:75 doc/classes/Area2D.xml:77
+#: doc/classes/Area.xml:77 doc/classes/Area2D.xml:79
msgid ""
"If [code]true[/code], the area detects bodies or areas entering and exiting "
"it."
msgstr ""
-#: doc/classes/Area.xml:78 doc/classes/Area2D.xml:80
+#: doc/classes/Area.xml:80 doc/classes/Area2D.xml:82
msgid "The area's priority. Higher priority areas are processed first."
msgstr ""
-#: doc/classes/Area.xml:81
+#: doc/classes/Area.xml:83
msgid ""
"The degree to which this area applies reverb to its associated audio. Ranges "
"from [code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
msgstr ""
-#: doc/classes/Area.xml:84
+#: doc/classes/Area.xml:86
msgid "If [code]true[/code], the area applies reverb to its associated audio."
msgstr ""
-#: doc/classes/Area.xml:87
+#: doc/classes/Area.xml:89
msgid "The reverb bus name to use for this area's associated audio."
msgstr ""
-#: doc/classes/Area.xml:90
+#: doc/classes/Area.xml:92
msgid ""
"The degree to which this area's reverb is a uniform effect. Ranges from "
"[code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
msgstr ""
-#: doc/classes/Area.xml:93 doc/classes/Area2D.xml:83
+#: doc/classes/Area.xml:95 doc/classes/Area2D.xml:85
msgid ""
"Override mode for gravity and damping calculations within this area. See "
"[enum SpaceOverride] for possible values."
msgstr ""
-#: doc/classes/Area.xml:100
+#: doc/classes/Area.xml:102
msgid ""
"Emitted when another Area enters this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
-#: doc/classes/Area.xml:107
+#: doc/classes/Area.xml:109
msgid ""
"Emitted when another Area exits this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
-#: doc/classes/Area.xml:117 doc/classes/Area.xml:130
+#: doc/classes/Area.xml:119 doc/classes/Area.xml:132
msgid ""
"Emitted when one of another Area's [Shape]s enters one of this Area's "
"[Shape]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6801,7 +6814,7 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:140
+#: doc/classes/Area.xml:142
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] enters this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -6810,7 +6823,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:147
+#: doc/classes/Area.xml:149
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] exits this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -6819,7 +6832,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:157 doc/classes/Area.xml:170
+#: doc/classes/Area.xml:159 doc/classes/Area.xml:172
msgid ""
"Emitted when one of a [PhysicsBody] or [GridMap]'s [Shape]s enters one of "
"this Area's [Shape]s. Requires [member monitoring] to be set to [code]true[/"
@@ -6836,29 +6849,29 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:180 doc/classes/Area2D.xml:170
+#: doc/classes/Area.xml:182 doc/classes/Area2D.xml:172
msgid "This area does not affect gravity/damping."
msgstr ""
-#: doc/classes/Area.xml:183 doc/classes/Area2D.xml:173
+#: doc/classes/Area.xml:185 doc/classes/Area2D.xml:175
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order)."
msgstr ""
-#: doc/classes/Area.xml:186 doc/classes/Area2D.xml:176
+#: doc/classes/Area.xml:188 doc/classes/Area2D.xml:178
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order), ignoring any lower priority areas."
msgstr ""
-#: doc/classes/Area.xml:189 doc/classes/Area2D.xml:179
+#: doc/classes/Area.xml:191 doc/classes/Area2D.xml:181
msgid ""
"This area replaces any gravity/damping, even the defaults, ignoring any "
"lower priority areas."
msgstr ""
-#: doc/classes/Area.xml:192 doc/classes/Area2D.xml:182
+#: doc/classes/Area.xml:194 doc/classes/Area2D.xml:184
msgid ""
"This area replaces any gravity/damping calculated so far (in [member "
"priority] order), but keeps calculating the rest of the areas."
@@ -6897,21 +6910,25 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
#: doc/classes/Area2D.xml:19
msgid ""
-"Returns a list of intersecting [Area2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [Area2D]s. The overlapping area's [member "
+"CollisionObject2D.collision_layer] must be part of this area's [member "
+"CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:25
+#: doc/classes/Area2D.xml:26
msgid ""
-"Returns a list of intersecting [PhysicsBody2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody2D]s. The overlapping body's "
+"[member CollisionObject2D.collision_layer] must be part of this area's "
+"[member CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:32
+#: doc/classes/Area2D.xml:34
msgid ""
"If [code]true[/code], the given area overlaps the Area2D.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6919,7 +6936,7 @@ msgid ""
"the physics step. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:40
+#: doc/classes/Area2D.xml:42
msgid ""
"If [code]true[/code], the given physics body overlaps the Area2D.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6930,7 +6947,7 @@ msgid ""
"register their tiles with collision shapes as a virtual physics body)."
msgstr ""
-#: doc/classes/Area2D.xml:48
+#: doc/classes/Area2D.xml:50
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
"velocity lost per second.\n"
@@ -6938,14 +6955,14 @@ msgid ""
"details about damping."
msgstr ""
-#: doc/classes/Area2D.xml:58
+#: doc/classes/Area2D.xml:60
msgid ""
"The area's gravity intensity (in pixels per second squared). This value "
"multiplies the gravity vector. This is useful to alter the force of gravity "
"without altering its direction."
msgstr ""
-#: doc/classes/Area2D.xml:70
+#: doc/classes/Area2D.xml:72
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
"velocity lost per second.\n"
@@ -6953,21 +6970,21 @@ msgid ""
"about damping."
msgstr ""
-#: doc/classes/Area2D.xml:90
+#: doc/classes/Area2D.xml:92
msgid ""
"Emitted when another Area2D enters this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-#: doc/classes/Area2D.xml:97
+#: doc/classes/Area2D.xml:99
msgid ""
"Emitted when another Area2D exits this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-#: doc/classes/Area2D.xml:107
+#: doc/classes/Area2D.xml:109
msgid ""
"Emitted when one of another Area2D's [Shape2D]s enters one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6982,7 +6999,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:120
+#: doc/classes/Area2D.xml:122
msgid ""
"Emitted when one of another Area2D's [Shape2D]s exits one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6997,7 +7014,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:130
+#: doc/classes/Area2D.xml:132
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] enters this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -7006,7 +7023,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:137
+#: doc/classes/Area2D.xml:139
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] exits this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -7015,7 +7032,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:147
+#: doc/classes/Area2D.xml:149
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s enters one "
"of this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -7034,7 +7051,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:160
+#: doc/classes/Area2D.xml:162
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s exits one of "
"this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -10604,42 +10621,47 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
-"no save path is provided it will try to match the path from the current "
+"no root node is provided, parent of this node will be used as root instead. "
+"If no save path is provided it will try to match the path from the current "
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -10653,62 +10675,62 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
msgid "The rotation of the baked custom sky."
msgstr ""
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -10716,35 +10738,35 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -10752,13 +10774,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -10770,65 +10792,77 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr ""
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
msgid "Baking was successful."
msgstr ""
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr ""
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr ""
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr ""
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:133
+#: doc/classes/BakedLightmap.xml:132
+msgid ""
+"Returns if lightmapper can't be created. Unless you are using a custom "
+"lightmapper, please report this as bug."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:135
+msgid ""
+"There is no root node to start baking from. Either provide [code]from_node[/"
+"code] argument or attach this node to a parent that should be used as root."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:136
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:139
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:142
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -11284,8 +11318,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -11673,26 +11710,33 @@ msgid "Text [Color] used when the [Button] is disabled."
msgstr ""
#: doc/classes/Button.xml:77
-msgid "Text [Color] used when the [Button] is being hovered."
+msgid ""
+"Text [Color] used when the [Button] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/Button.xml:80
-msgid "Text [Color] used when the [Button] is being pressed."
+msgid "Text [Color] used when the [Button] is being hovered."
msgstr ""
#: doc/classes/Button.xml:83
-msgid "[StyleBox] used when the [Button] is being hovered."
+msgid "Text [Color] used when the [Button] is being pressed."
msgstr ""
#: doc/classes/Button.xml:86
-msgid "The horizontal space between [Button]'s icon and text."
+msgid "[StyleBox] used when the [Button] is being hovered."
msgstr ""
#: doc/classes/Button.xml:89
-msgid "Default [StyleBox] for the [Button]."
+msgid "The horizontal space between [Button]'s icon and text."
msgstr ""
#: doc/classes/Button.xml:92
+msgid "Default [StyleBox] for the [Button]."
+msgstr ""
+
+#: doc/classes/Button.xml:95
msgid "[StyleBox] used when the [Button] is being pressed."
msgstr ""
@@ -13161,80 +13205,96 @@ msgstr ""
msgid "The check icon to display when the [CheckBox] is checked."
msgstr ""
-#: doc/classes/CheckBox.xml:30
+#: doc/classes/CheckBox.xml:28
+msgid "The check icon to display when the [CheckBox] is checked and disabled."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:31
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is disabled."
msgstr ""
-#: doc/classes/CheckBox.xml:33
+#: doc/classes/CheckBox.xml:34
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is focused."
msgstr ""
-#: doc/classes/CheckBox.xml:36
+#: doc/classes/CheckBox.xml:37
msgid "The [Font] to use for the [CheckBox] text."
msgstr ""
-#: doc/classes/CheckBox.xml:39
+#: doc/classes/CheckBox.xml:40
msgid "The [CheckBox] text's font color."
msgstr ""
-#: doc/classes/CheckBox.xml:42
+#: doc/classes/CheckBox.xml:43
msgid "The [CheckBox] text's font color when it's disabled."
msgstr ""
-#: doc/classes/CheckBox.xml:45
+#: doc/classes/CheckBox.xml:46
+msgid ""
+"The [CheckBox] text's font color when it's focused. Only replaces the normal "
+"text color of the checkbox. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:49
msgid "The [CheckBox] text's font color when it's hovered."
msgstr ""
-#: doc/classes/CheckBox.xml:48
+#: doc/classes/CheckBox.xml:52
msgid "The [CheckBox] text's font color when it's hovered and pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:51
+#: doc/classes/CheckBox.xml:55
msgid "The [CheckBox] text's font color when it's pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:54
+#: doc/classes/CheckBox.xml:58
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered."
msgstr ""
-#: doc/classes/CheckBox.xml:57
+#: doc/classes/CheckBox.xml:61
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered and "
"pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:60
+#: doc/classes/CheckBox.xml:64
msgid "The separation between the check icon and the text (in pixels)."
msgstr ""
-#: doc/classes/CheckBox.xml:63 doc/classes/CheckButton.xml:58
+#: doc/classes/CheckBox.xml:67 doc/classes/CheckButton.xml:61
msgid "The [StyleBox] to display as a background."
msgstr ""
-#: doc/classes/CheckBox.xml:66
+#: doc/classes/CheckBox.xml:70
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:69
+#: doc/classes/CheckBox.xml:73
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is checked."
msgstr ""
-#: doc/classes/CheckBox.xml:74
+#: doc/classes/CheckBox.xml:78
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is unchecked."
msgstr ""
-#: doc/classes/CheckBox.xml:79
+#: doc/classes/CheckBox.xml:83
msgid "The check icon to display when the [CheckBox] is unchecked."
msgstr ""
+#: doc/classes/CheckBox.xml:86
+msgid ""
+"The check icon to display when the [CheckBox] is unchecked and disabled."
+msgstr ""
+
#: doc/classes/CheckButton.xml:4
msgid "Checkable button. See also [CheckBox]."
msgstr ""
@@ -13278,49 +13338,56 @@ msgid "The [CheckButton] text's font color when it's disabled."
msgstr ""
#: doc/classes/CheckButton.xml:40
-msgid "The [CheckButton] text's font color when it's hovered."
+msgid ""
+"The [CheckButton] text's font color when it's focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/CheckButton.xml:43
-msgid "The [CheckButton] text's font color when it's hovered and pressed."
+msgid "The [CheckButton] text's font color when it's hovered."
msgstr ""
#: doc/classes/CheckButton.xml:46
-msgid "The [CheckButton] text's font color when it's pressed."
+msgid "The [CheckButton] text's font color when it's hovered and pressed."
msgstr ""
#: doc/classes/CheckButton.xml:49
+msgid "The [CheckButton] text's font color when it's pressed."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:52
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered."
msgstr ""
-#: doc/classes/CheckButton.xml:52
+#: doc/classes/CheckButton.xml:55
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered "
"and pressed."
msgstr ""
-#: doc/classes/CheckButton.xml:55
+#: doc/classes/CheckButton.xml:58
msgid "The separation between the toggle icon and the text (in pixels)."
msgstr ""
-#: doc/classes/CheckButton.xml:61
+#: doc/classes/CheckButton.xml:64
msgid "The icon to display when the [CheckButton] is unchecked."
msgstr ""
-#: doc/classes/CheckButton.xml:64
+#: doc/classes/CheckButton.xml:67
msgid "The icon to display when the [CheckButton] is unchecked and disabled."
msgstr ""
-#: doc/classes/CheckButton.xml:67
+#: doc/classes/CheckButton.xml:70
msgid "The icon to display when the [CheckButton] is checked."
msgstr ""
-#: doc/classes/CheckButton.xml:70
+#: doc/classes/CheckButton.xml:73
msgid "The icon to display when the [CheckButton] is checked and disabled."
msgstr ""
-#: doc/classes/CheckButton.xml:73
+#: doc/classes/CheckButton.xml:76
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is pressed."
msgstr ""
@@ -15095,26 +15162,33 @@ msgid "Text [Color] used when the [ColorPickerButton] is disabled."
msgstr ""
#: doc/classes/ColorPickerButton.xml:80
-msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
+msgid ""
+"Text [Color] used when the [ColorPickerButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/ColorPickerButton.xml:83
-msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
+msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
msgstr ""
#: doc/classes/ColorPickerButton.xml:86
-msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
+msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
msgstr ""
#: doc/classes/ColorPickerButton.xml:89
-msgid "The horizontal space between [ColorPickerButton]'s icon and text."
+msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
msgstr ""
#: doc/classes/ColorPickerButton.xml:92
-msgid "Default [StyleBox] for the [ColorPickerButton]."
+msgid "The horizontal space between [ColorPickerButton]'s icon and text."
msgstr ""
#: doc/classes/ColorPickerButton.xml:95
+msgid "Default [StyleBox] for the [ColorPickerButton]."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:98
msgid "[StyleBox] used when the [ColorPickerButton] is being pressed."
msgstr ""
@@ -20344,7 +20418,8 @@ msgid ""
"get_resource_type]. They may optionally specify some import presets that "
"affect the import process. EditorImportPlugins are responsible for creating "
"the resources and saving them in the [code].import[/code] directory (see "
-"[member ProjectSettings.application/config/project_data_dir_name]).\n"
+"[member ProjectSettings.application/config/"
+"use_hidden_project_data_directory]).\n"
"Below is an example EditorImportPlugin that imports a [Mesh] from a file "
"with the extension \".special\" or \".spec\":\n"
"[codeblock]\n"
@@ -20471,7 +20546,7 @@ msgstr ""
msgid ""
"Gets the extension used to save this resource in the [code].import[/code] "
"directory (see [member ProjectSettings.application/config/"
-"project_data_dir_name])."
+"use_hidden_project_data_directory])."
msgstr ""
#: doc/classes/EditorImportPlugin.xml:130
@@ -21506,8 +21581,11 @@ msgstr ""
msgid "Emitted when the value of the edited resource was changed."
msgstr ""
-#: doc/classes/EditorResourcePicker.xml:89
-msgid "Emitted when the resource value was set and user clicked to edit it."
+#: doc/classes/EditorResourcePicker.xml:90
+msgid ""
+"Emitted when the resource value was set and user clicked to edit it. When "
+"[code]edit[/code] is [code]true[/code], the signal was caused by the context "
+"menu \"Edit\" option."
msgstr ""
#: doc/classes/EditorResourcePreview.xml:4
@@ -25256,21 +25334,32 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html"
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -25279,14 +25368,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -25296,80 +25389,80 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
msgstr ""
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr ""
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -28117,16 +28210,18 @@ msgstr ""
#: doc/classes/Image.xml:436
msgid ""
"OpenGL texture format [code]RED[/code] with a single component and a "
-"bitdepth of 8."
+"bitdepth of 8.\n"
+"[b]Note:[/b] When using the GLES2 backend, this uses the alpha channel "
+"instead of the red channel for storage."
msgstr ""
-#: doc/classes/Image.xml:439
+#: doc/classes/Image.xml:440
msgid ""
"OpenGL texture format [code]RG[/code] with two components and a bitdepth of "
"8 for each."
msgstr ""
-#: doc/classes/Image.xml:442
+#: doc/classes/Image.xml:443
msgid ""
"OpenGL texture format [code]RGB[/code] with three components, each with a "
"bitdepth of 8.\n"
@@ -28134,7 +28229,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:446
+#: doc/classes/Image.xml:447
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 8.\n"
@@ -28142,73 +28237,73 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:450
+#: doc/classes/Image.xml:451
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 4."
msgstr ""
-#: doc/classes/Image.xml:453
+#: doc/classes/Image.xml:454
msgid ""
"OpenGL texture format [code]GL_RGB5_A1[/code] where 5 bits of depth for each "
"component of RGB and one bit for alpha."
msgstr ""
-#: doc/classes/Image.xml:456
+#: doc/classes/Image.xml:457
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 32-"
"bit floating-point value."
msgstr ""
-#: doc/classes/Image.xml:459
+#: doc/classes/Image.xml:460
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:462
+#: doc/classes/Image.xml:463
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:465
+#: doc/classes/Image.xml:466
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:468
+#: doc/classes/Image.xml:469
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 16-"
"bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:471
+#: doc/classes/Image.xml:472
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:474
+#: doc/classes/Image.xml:475
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:477
+#: doc/classes/Image.xml:478
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:480
+#: doc/classes/Image.xml:481
msgid ""
"A special OpenGL texture format where the three color components have 9 bits "
"of precision and all three share a single 5-bit exponent."
msgstr ""
-#: doc/classes/Image.xml:483
+#: doc/classes/Image.xml:484
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 1, and is the smallest variation "
@@ -28218,7 +28313,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:487
+#: doc/classes/Image.xml:488
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 2, and color data is interpreted "
@@ -28228,7 +28323,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:491
+#: doc/classes/Image.xml:492
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format also known as Block Compression 3 or BC3 that contains 64 "
@@ -28239,7 +28334,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:495
+#: doc/classes/Image.xml:496
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -28247,7 +28342,7 @@ msgid ""
"DXT5 uses for the alpha channel."
msgstr ""
-#: doc/classes/Image.xml:498
+#: doc/classes/Image.xml:499
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -28255,7 +28350,7 @@ msgid ""
"algorithm that DXT5 uses for the alpha channel."
msgstr ""
-#: doc/classes/Image.xml:501
+#: doc/classes/Image.xml:502
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned normalized "
@@ -28264,21 +28359,21 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:505
+#: doc/classes/Image.xml:506
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with signed floating-point "
"RGB components."
msgstr ""
-#: doc/classes/Image.xml:508
+#: doc/classes/Image.xml:509
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned floating-point "
"RGB components."
msgstr ""
-#: doc/classes/Image.xml:511
+#: doc/classes/Image.xml:512
msgid ""
"Texture format used on PowerVR-supported mobile platforms, uses 2-bit color "
"depth with no alpha. More information can be found [url=https://en.wikipedia."
@@ -28287,25 +28382,25 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:515
+#: doc/classes/Image.xml:516
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with an "
"alpha component."
msgstr ""
-#: doc/classes/Image.xml:518
+#: doc/classes/Image.xml:519
msgid ""
"Similar to [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with 4-"
"bit color depth and no alpha."
msgstr ""
-#: doc/classes/Image.xml:521
+#: doc/classes/Image.xml:522
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC4[/url], but with an "
"alpha component."
msgstr ""
-#: doc/classes/Image.xml:524
+#: doc/classes/Image.xml:525
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC1]Ericsson Texture Compression format 1[/"
@@ -28313,7 +28408,7 @@ msgid ""
"standard. This format cannot store an alpha channel."
msgstr ""
-#: doc/classes/Image.xml:527
+#: doc/classes/Image.xml:528
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28321,7 +28416,7 @@ msgid ""
"unsigned data."
msgstr ""
-#: doc/classes/Image.xml:530
+#: doc/classes/Image.xml:531
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28329,7 +28424,7 @@ msgid ""
"channel of signed data."
msgstr ""
-#: doc/classes/Image.xml:533
+#: doc/classes/Image.xml:534
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28337,7 +28432,7 @@ msgid ""
"of unsigned data."
msgstr ""
-#: doc/classes/Image.xml:536
+#: doc/classes/Image.xml:537
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28345,7 +28440,7 @@ msgid ""
"channels of signed data."
msgstr ""
-#: doc/classes/Image.xml:539
+#: doc/classes/Image.xml:540
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28355,7 +28450,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:543
+#: doc/classes/Image.xml:544
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28365,7 +28460,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:547
+#: doc/classes/Image.xml:548
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28376,31 +28471,31 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:551
+#: doc/classes/Image.xml:552
msgid "Represents the size of the [enum Format] enum."
msgstr ""
-#: doc/classes/Image.xml:554
+#: doc/classes/Image.xml:555
msgid ""
"Performs nearest-neighbor interpolation. If the image is resized, it will be "
"pixelated."
msgstr ""
-#: doc/classes/Image.xml:557
+#: doc/classes/Image.xml:558
msgid ""
"Performs bilinear interpolation. If the image is resized, it will be blurry. "
"This mode is faster than [constant INTERPOLATE_CUBIC], but it results in "
"lower quality."
msgstr ""
-#: doc/classes/Image.xml:560
+#: doc/classes/Image.xml:561
msgid ""
"Performs cubic interpolation. If the image is resized, it will be blurry. "
"This mode often gives better results compared to [constant "
"INTERPOLATE_BILINEAR], at the cost of being slower."
msgstr ""
-#: doc/classes/Image.xml:563
+#: doc/classes/Image.xml:564
msgid ""
"Performs bilinear separately on the two most-suited mipmap levels, then "
"linearly interpolates between them.\n"
@@ -28415,55 +28510,55 @@ msgid ""
"a new set will be generated for the resulting image."
msgstr ""
-#: doc/classes/Image.xml:570
+#: doc/classes/Image.xml:571
msgid ""
"Performs Lanczos interpolation. This is the slowest image resizing mode, but "
"it typically gives the best results, especially when downscalng images."
msgstr ""
-#: doc/classes/Image.xml:573
+#: doc/classes/Image.xml:574
msgid "Image does not have alpha."
msgstr ""
-#: doc/classes/Image.xml:576
+#: doc/classes/Image.xml:577
msgid "Image stores alpha in a single bit."
msgstr ""
-#: doc/classes/Image.xml:579
+#: doc/classes/Image.xml:580
msgid "Image uses alpha."
msgstr ""
-#: doc/classes/Image.xml:582
+#: doc/classes/Image.xml:583
msgid "Use S3TC compression."
msgstr ""
-#: doc/classes/Image.xml:585
+#: doc/classes/Image.xml:586
msgid "Use PVRTC2 compression."
msgstr ""
-#: doc/classes/Image.xml:588
+#: doc/classes/Image.xml:589
msgid "Use PVRTC4 compression."
msgstr ""
-#: doc/classes/Image.xml:591
+#: doc/classes/Image.xml:592
msgid "Use ETC compression."
msgstr ""
-#: doc/classes/Image.xml:594
+#: doc/classes/Image.xml:595
msgid "Use ETC2 compression."
msgstr ""
-#: doc/classes/Image.xml:597
+#: doc/classes/Image.xml:598
msgid ""
"Source texture (before compression) is a regular texture. Default for all "
"textures."
msgstr ""
-#: doc/classes/Image.xml:600
+#: doc/classes/Image.xml:601
msgid "Source texture (before compression) is in sRGB space."
msgstr ""
-#: doc/classes/Image.xml:603
+#: doc/classes/Image.xml:604
msgid ""
"Source texture (before compression) is a normal texture (e.g. it can be "
"compressed into two channels)."
@@ -28687,6 +28782,17 @@ msgstr ""
#: doc/classes/Input.xml:43
msgid ""
+"Sends all input events which are in the current buffer to the game loop. "
+"These events may have been buffered as a result of accumulated input "
+"([method set_use_accumulated_input]) or agile input flushing ([member "
+"ProjectSettings.input_devices/buffering/agile_event_flushing]).\n"
+"The engine will already do this itself at key execution points (at least "
+"once per frame). However, this can be useful in advanced cases where you "
+"want precise control over the timing of event handling."
+msgstr ""
+
+#: doc/classes/Input.xml:50
+msgid ""
"Returns the acceleration of the device's accelerometer sensor, if the device "
"has one. Otherwise, the method returns [constant Vector3.ZERO].\n"
"Note this method returns an empty [Vector3] when running from the editor "
@@ -28698,7 +28804,7 @@ msgid ""
"the Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:53
+#: doc/classes/Input.xml:60
msgid ""
"Returns a value between 0 and 1 representing the raw intensity of the given "
"action, ignoring the action's deadzone. In most cases, you should use "
@@ -28708,7 +28814,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:62
+#: doc/classes/Input.xml:69
msgid ""
"Returns a value between 0 and 1 representing the intensity of the given "
"action. In a joypad, for example, the further away the axis (analog sticks "
@@ -28720,7 +28826,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:71
+#: doc/classes/Input.xml:78
msgid ""
"Get axis input by specifying two actions, one negative and one positive.\n"
"This is a shorthand for writing [code]Input."
@@ -28728,17 +28834,17 @@ msgid ""
"get_action_strength(\"negative_action\")[/code]."
msgstr ""
-#: doc/classes/Input.xml:78
+#: doc/classes/Input.xml:85
msgid ""
"Returns an [Array] containing the device IDs of all currently connected "
"joypads."
msgstr ""
-#: doc/classes/Input.xml:84
+#: doc/classes/Input.xml:91
msgid "Returns the currently assigned cursor shape (see [enum CursorShape])."
msgstr ""
-#: doc/classes/Input.xml:90
+#: doc/classes/Input.xml:97
msgid ""
"Returns the gravity of the device's accelerometer sensor, if the device has "
"one. Otherwise, the method returns [constant Vector3.ZERO].\n"
@@ -28748,7 +28854,7 @@ msgid ""
"Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:97
+#: doc/classes/Input.xml:104
msgid ""
"Returns the rotation rate in rad/s around a device's X, Y, and Z axes of the "
"gyroscope sensor, if the device has one. Otherwise, the method returns "
@@ -28757,53 +28863,53 @@ msgid ""
"it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:106
+#: doc/classes/Input.xml:113
msgid ""
"Returns the current value of the joypad axis at given index (see [enum "
"JoystickList])."
msgstr ""
-#: doc/classes/Input.xml:113
+#: doc/classes/Input.xml:120
msgid "Returns the index of the provided axis name."
msgstr ""
-#: doc/classes/Input.xml:120
+#: doc/classes/Input.xml:127
msgid ""
"Receives a [enum JoystickList] axis and returns its equivalent name as a "
"string."
msgstr ""
-#: doc/classes/Input.xml:127
+#: doc/classes/Input.xml:134
msgid "Returns the index of the provided button name."
msgstr ""
-#: doc/classes/Input.xml:134
+#: doc/classes/Input.xml:141
msgid ""
"Receives a gamepad button from [enum JoystickList] and returns its "
"equivalent name as a string."
msgstr ""
-#: doc/classes/Input.xml:141
+#: doc/classes/Input.xml:148
msgid ""
"Returns a SDL2-compatible device GUID on platforms that use gamepad "
"remapping. Returns [code]\"Default Gamepad\"[/code] otherwise."
msgstr ""
-#: doc/classes/Input.xml:148
+#: doc/classes/Input.xml:155
msgid "Returns the name of the joypad at the specified device index."
msgstr ""
-#: doc/classes/Input.xml:155
+#: doc/classes/Input.xml:162
msgid "Returns the duration of the current vibration effect in seconds."
msgstr ""
-#: doc/classes/Input.xml:162
+#: doc/classes/Input.xml:169
msgid ""
"Returns the strength of the joypad vibration: x is the strength of the weak "
"motor, and y is the strength of the strong motor."
msgstr ""
-#: doc/classes/Input.xml:168
+#: doc/classes/Input.xml:175
msgid ""
"Returns the mouse speed for the last time the cursor was moved, and this "
"until the next frame where the mouse moves. This means that even if the "
@@ -28811,7 +28917,7 @@ msgid ""
"motion."
msgstr ""
-#: doc/classes/Input.xml:174
+#: doc/classes/Input.xml:181
msgid ""
"Returns the magnetic field strength in micro-Tesla for all axes of the "
"device's magnetometer sensor, if the device has one. Otherwise, the method "
@@ -28820,17 +28926,17 @@ msgid ""
"platforms, it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:181
+#: doc/classes/Input.xml:188
msgid ""
"Returns mouse buttons as a bitmask. If multiple mouse buttons are pressed at "
"the same time, the bits are added together."
msgstr ""
-#: doc/classes/Input.xml:187
+#: doc/classes/Input.xml:194
msgid "Returns the mouse mode. See the constants for more information."
msgstr ""
-#: doc/classes/Input.xml:198
+#: doc/classes/Input.xml:205
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -28843,7 +28949,7 @@ msgid ""
"want (on the range of 0 to 1)."
msgstr ""
-#: doc/classes/Input.xml:208
+#: doc/classes/Input.xml:215
msgid ""
"Returns [code]true[/code] when the user starts pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user pressed down "
@@ -28855,7 +28961,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:218
+#: doc/classes/Input.xml:225
msgid ""
"Returns [code]true[/code] when the user stops pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user released the "
@@ -28865,7 +28971,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:227
+#: doc/classes/Input.xml:234
msgid ""
"Returns [code]true[/code] if you are pressing the action event. Note that if "
"an action has multiple buttons assigned and more than one of them is "
@@ -28876,13 +28982,13 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:236
+#: doc/classes/Input.xml:243
msgid ""
"Returns [code]true[/code] if you are pressing the joypad button (see [enum "
"JoystickList])."
msgstr ""
-#: doc/classes/Input.xml:243
+#: doc/classes/Input.xml:250
msgid ""
"Returns [code]true[/code] if the system knows the specified device. This "
"means that it sets all button and axis indices exactly as defined in [enum "
@@ -28890,19 +28996,19 @@ msgid ""
"but you can still retrieve events from them."
msgstr ""
-#: doc/classes/Input.xml:250
+#: doc/classes/Input.xml:257
msgid ""
"Returns [code]true[/code] if you are pressing the key. You can pass a [enum "
"KeyList] constant."
msgstr ""
-#: doc/classes/Input.xml:257
+#: doc/classes/Input.xml:264
msgid ""
"Returns [code]true[/code] if you are pressing the mouse button specified "
"with [enum ButtonList]."
msgstr ""
-#: doc/classes/Input.xml:267
+#: doc/classes/Input.xml:274
msgid ""
"Notifies the [Input] singleton that a connection has changed, to update the "
"state for the [code]device[/code] index.\n"
@@ -28911,7 +29017,7 @@ msgid ""
"triggered internally."
msgstr ""
-#: doc/classes/Input.xml:275
+#: doc/classes/Input.xml:282
msgid ""
"Feeds an [InputEvent] to the game. Can be used to artificially trigger input "
"events from code. Also generates [method Node._input] calls.\n"
@@ -28924,12 +29030,21 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Input.xml:289
+#: doc/classes/Input.xml:296
msgid ""
"Removes all mappings from the internal database that match the given GUID."
msgstr ""
-#: doc/classes/Input.xml:298
+#: doc/classes/Input.xml:303
+msgid ""
+"Sets the acceleration value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:313
msgid ""
"Sets a custom mouse cursor image, which is only visible inside the game "
"window. The hotspot can also be specified. Passing [code]null[/code] to the "
@@ -28944,7 +29059,7 @@ msgid ""
"compression mode can't be used for custom cursors."
msgstr ""
-#: doc/classes/Input.xml:309
+#: doc/classes/Input.xml:324
msgid ""
"Sets the default cursor shape to be used in the viewport instead of "
"[constant CURSOR_ARROW].\n"
@@ -28954,11 +29069,38 @@ msgid ""
"cursor immediately."
msgstr ""
-#: doc/classes/Input.xml:318
+#: doc/classes/Input.xml:333
+msgid ""
+"Sets the gravity value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:341
+msgid ""
+"Sets the value of the rotation rate of the gyroscope sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:349
+msgid ""
+"Sets the value of the magnetic field of the magnetometer sensor. Can be used "
+"for debugging on devices without a hardware sensor, for example in an editor "
+"on a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:357
msgid "Sets the mouse mode. See the constants for more information."
msgstr ""
-#: doc/classes/Input.xml:325
+#: doc/classes/Input.xml:364
msgid ""
"Enables or disables the accumulation of similar input events sent by the "
"operating system. When input accumulation is enabled, all input events "
@@ -28972,7 +29114,7 @@ msgid ""
"results that closely follow the actual input."
msgstr ""
-#: doc/classes/Input.xml:336
+#: doc/classes/Input.xml:375
msgid ""
"Starts to vibrate the joypad. Joypads usually come with two rumble motors, a "
"strong and a weak one. [code]weak_magnitude[/code] is the strength of the "
@@ -28985,34 +29127,34 @@ msgid ""
"few seconds."
msgstr ""
-#: doc/classes/Input.xml:344
+#: doc/classes/Input.xml:383
msgid "Stops the vibration of the joypad."
msgstr ""
-#: doc/classes/Input.xml:351
+#: doc/classes/Input.xml:390
msgid ""
"Vibrate Android and iOS devices.\n"
"[b]Note:[/b] It needs [code]VIBRATE[/code] permission for Android at export "
"settings. iOS does not support duration."
msgstr ""
-#: doc/classes/Input.xml:359
+#: doc/classes/Input.xml:398
msgid "Sets the mouse position to the specified vector."
msgstr ""
-#: doc/classes/Input.xml:368
+#: doc/classes/Input.xml:407
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
-#: doc/classes/Input.xml:374
+#: doc/classes/Input.xml:413
msgid "Makes the mouse cursor visible if it is hidden."
msgstr ""
-#: doc/classes/Input.xml:377
+#: doc/classes/Input.xml:416
msgid "Makes the mouse cursor hidden if it is visible."
msgstr ""
-#: doc/classes/Input.xml:380
+#: doc/classes/Input.xml:419
msgid ""
"Captures the mouse. The mouse will be hidden and its position locked at the "
"center of the screen.\n"
@@ -29020,83 +29162,83 @@ msgid ""
"need to use [member InputEventMouseMotion.relative]."
msgstr ""
-#: doc/classes/Input.xml:384
+#: doc/classes/Input.xml:423
msgid "Makes the mouse cursor visible but confines it to the game window."
msgstr ""
-#: doc/classes/Input.xml:387
+#: doc/classes/Input.xml:426
msgid "Arrow cursor. Standard, default pointing cursor."
msgstr ""
-#: doc/classes/Input.xml:390
+#: doc/classes/Input.xml:429
msgid ""
"I-beam cursor. Usually used to show where the text cursor will appear when "
"the mouse is clicked."
msgstr ""
-#: doc/classes/Input.xml:393
+#: doc/classes/Input.xml:432
msgid ""
"Pointing hand cursor. Usually used to indicate the pointer is over a link or "
"other interactable item."
msgstr ""
-#: doc/classes/Input.xml:396
+#: doc/classes/Input.xml:435
msgid ""
"Cross cursor. Typically appears over regions in which a drawing operation "
"can be performed or for selections."
msgstr ""
-#: doc/classes/Input.xml:399
+#: doc/classes/Input.xml:438
msgid ""
"Wait cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application is still usable during the "
"operation."
msgstr ""
-#: doc/classes/Input.xml:402
+#: doc/classes/Input.xml:441
msgid ""
"Busy cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application isn't usable during the "
"operation (e.g. something is blocking its main thread)."
msgstr ""
-#: doc/classes/Input.xml:405
+#: doc/classes/Input.xml:444
msgid "Drag cursor. Usually displayed when dragging something."
msgstr ""
-#: doc/classes/Input.xml:408
+#: doc/classes/Input.xml:447
msgid ""
"Can drop cursor. Usually displayed when dragging something to indicate that "
"it can be dropped at the current position."
msgstr ""
-#: doc/classes/Input.xml:411
+#: doc/classes/Input.xml:450
msgid ""
"Forbidden cursor. Indicates that the current action is forbidden (for "
"example, when dragging something) or that the control at a position is "
"disabled."
msgstr ""
-#: doc/classes/Input.xml:414
+#: doc/classes/Input.xml:453
msgid ""
"Vertical resize mouse cursor. A double-headed vertical arrow. It tells the "
"user they can resize the window or the panel vertically."
msgstr ""
-#: doc/classes/Input.xml:417
+#: doc/classes/Input.xml:456
msgid ""
"Horizontal resize mouse cursor. A double-headed horizontal arrow. It tells "
"the user they can resize the window or the panel horizontally."
msgstr ""
-#: doc/classes/Input.xml:420
+#: doc/classes/Input.xml:459
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the bottom left to the top right. It tells the user they can resize the "
"window or the panel both horizontally and vertically."
msgstr ""
-#: doc/classes/Input.xml:423
+#: doc/classes/Input.xml:462
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the top left to the bottom right, the opposite of [constant "
@@ -29104,23 +29246,23 @@ msgid ""
"both horizontally and vertically."
msgstr ""
-#: doc/classes/Input.xml:426
+#: doc/classes/Input.xml:465
msgid "Move cursor. Indicates that something can be moved."
msgstr ""
-#: doc/classes/Input.xml:429
+#: doc/classes/Input.xml:468
msgid ""
"Vertical split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_VSIZE]."
msgstr ""
-#: doc/classes/Input.xml:432
+#: doc/classes/Input.xml:471
msgid ""
"Horizontal split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_HSIZE]."
msgstr ""
-#: doc/classes/Input.xml:435
+#: doc/classes/Input.xml:474
msgid "Help cursor. Usually a question mark."
msgstr ""
@@ -29536,7 +29678,9 @@ msgid "The drag position."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -30848,7 +30992,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30913,22 +31058,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -30943,7 +31090,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -30951,19 +31098,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -31034,7 +31181,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -31092,7 +31240,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -32377,14 +32527,21 @@ msgid "Default text [Color] of the [LinkButton]."
msgstr ""
#: doc/classes/LinkButton.xml:46
-msgid "Text [Color] used when the [LinkButton] is being hovered."
+msgid ""
+"Text [Color] used when the [LinkButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/LinkButton.xml:49
-msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgid "Text [Color] used when the [LinkButton] is being hovered."
msgstr ""
#: doc/classes/LinkButton.xml:52
+msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:55
msgid "The vertical space between the baseline of text and the underline."
msgstr ""
@@ -32877,26 +33034,33 @@ msgid "Text [Color] used when the [MenuButton] is disabled."
msgstr ""
#: doc/classes/MenuButton.xml:64
-msgid "Text [Color] used when the [MenuButton] is being hovered."
+msgid ""
+"Text [Color] used when the [MenuButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/MenuButton.xml:67
-msgid "Text [Color] used when the [MenuButton] is being pressed."
+msgid "Text [Color] used when the [MenuButton] is being hovered."
msgstr ""
#: doc/classes/MenuButton.xml:70
-msgid "[StyleBox] used when the [MenuButton] is being hovered."
+msgid "Text [Color] used when the [MenuButton] is being pressed."
msgstr ""
#: doc/classes/MenuButton.xml:73
-msgid "The horizontal space between [MenuButton]'s icon and text."
+msgid "[StyleBox] used when the [MenuButton] is being hovered."
msgstr ""
#: doc/classes/MenuButton.xml:76
-msgid "Default [StyleBox] for the [MenuButton]."
+msgid "The horizontal space between [MenuButton]'s icon and text."
msgstr ""
#: doc/classes/MenuButton.xml:79
+msgid "Default [StyleBox] for the [MenuButton]."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:82
msgid "[StyleBox] used when the [MenuButton] is being pressed."
msgstr ""
@@ -34627,7 +34791,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -37511,26 +37675,33 @@ msgid "Text [Color] used when the [OptionButton] is disabled."
msgstr ""
#: doc/classes/OptionButton.xml:212
-msgid "Text [Color] used when the [OptionButton] is being hovered."
+msgid ""
+"Text [Color] used when the [OptionButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/OptionButton.xml:215
-msgid "Text [Color] used when the [OptionButton] is being pressed."
+msgid "Text [Color] used when the [OptionButton] is being hovered."
msgstr ""
#: doc/classes/OptionButton.xml:218
-msgid "[StyleBox] used when the [OptionButton] is being hovered."
+msgid "Text [Color] used when the [OptionButton] is being pressed."
msgstr ""
#: doc/classes/OptionButton.xml:221
-msgid "The horizontal space between [OptionButton]'s icon and text."
+msgid "[StyleBox] used when the [OptionButton] is being hovered."
msgstr ""
#: doc/classes/OptionButton.xml:224
-msgid "Default [StyleBox] for the [OptionButton]."
+msgid "The horizontal space between [OptionButton]'s icon and text."
msgstr ""
#: doc/classes/OptionButton.xml:227
+msgid "Default [StyleBox] for the [OptionButton]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:230
msgid "[StyleBox] used when the [OptionButton] is being pressed."
msgstr ""
@@ -37933,7 +38104,7 @@ msgstr ""
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -37963,14 +38134,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -37980,7 +38151,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -40477,17 +40648,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -40505,11 +40702,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -40704,7 +40901,9 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-msgid "Returns the [Physics2DDirectBodyState] of the body."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
@@ -41506,6 +41705,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -41523,7 +41740,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -41637,7 +41854,9 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-msgid "Returns the [PhysicsDirectBodyState] of the body."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/PhysicsServer.xml:370
@@ -42616,27 +42835,27 @@ msgstr ""
msgid "Removes an element from the array by index."
msgstr ""
-#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolColorArray.xml:66
-#: doc/classes/PoolIntArray.xml:67 doc/classes/PoolRealArray.xml:67
-#: doc/classes/PoolStringArray.xml:74 doc/classes/PoolVector2Array.xml:67
-#: doc/classes/PoolVector3Array.xml:66
+#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolIntArray.xml:67
+#: doc/classes/PoolRealArray.xml:67
msgid ""
"Sets the size of the array. If the array is grown, reserves elements at the "
"end of the array. If the array is shrunk, truncates the array to the new "
-"size."
+"size.\n"
+"[b]Note:[/b] Added elements are not automatically initialized to 0 and will "
+"contain garbage, i.e. indeterminate values."
msgstr ""
-#: doc/classes/PoolByteArray.xml:121
+#: doc/classes/PoolByteArray.xml:122
msgid "Changes the byte at the given index."
msgstr ""
-#: doc/classes/PoolByteArray.xml:127 doc/classes/PoolColorArray.xml:79
-#: doc/classes/PoolRealArray.xml:80 doc/classes/PoolStringArray.xml:87
+#: doc/classes/PoolByteArray.xml:128 doc/classes/PoolColorArray.xml:79
+#: doc/classes/PoolRealArray.xml:81 doc/classes/PoolStringArray.xml:87
#: doc/classes/PoolVector2Array.xml:80 doc/classes/PoolVector3Array.xml:79
msgid "Returns the size of the array."
msgstr ""
-#: doc/classes/PoolByteArray.xml:135
+#: doc/classes/PoolByteArray.xml:136
msgid ""
"Returns the slice of the [PoolByteArray] between indices (inclusive) as a "
"new [PoolByteArray]. Any negative index is considered to be from the end of "
@@ -42668,6 +42887,14 @@ msgstr ""
msgid "Appends a value to the array."
msgstr ""
+#: doc/classes/PoolColorArray.xml:66 doc/classes/PoolStringArray.xml:74
+#: doc/classes/PoolVector2Array.xml:67 doc/classes/PoolVector3Array.xml:66
+msgid ""
+"Sets the size of the array. If the array is grown, reserves elements at the "
+"end of the array. If the array is shrunk, truncates the array to the new "
+"size."
+msgstr ""
+
#: doc/classes/PoolColorArray.xml:73
msgid "Changes the [Color] at the given index."
msgstr ""
@@ -42704,11 +42931,11 @@ msgid ""
"valid, or at the end of the array ([code]idx == size()[/code])."
msgstr ""
-#: doc/classes/PoolIntArray.xml:74
+#: doc/classes/PoolIntArray.xml:75
msgid "Changes the int at the given index."
msgstr ""
-#: doc/classes/PoolIntArray.xml:80
+#: doc/classes/PoolIntArray.xml:81
msgid "Returns the array size."
msgstr ""
@@ -42740,7 +42967,7 @@ msgstr ""
msgid "Appends a [PoolRealArray] at the end of this array."
msgstr ""
-#: doc/classes/PoolRealArray.xml:74
+#: doc/classes/PoolRealArray.xml:75
msgid "Changes the float at the given index."
msgstr ""
@@ -44006,18 +44233,6 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:204
msgid ""
-"The project data directory is used for storing project-specific data "
-"(metadata, shader cache, etc.).\n"
-"[b]Note:[/b] Restart the application after changing this setting.\n"
-"[b]Note:[/b] Changing this value can help on platforms or with third-party "
-"tools where specific directory patterns are disallowed. Only modify this "
-"setting if you know that your environment requires it, as changing the "
-"default can impact compatibility with some external tools or plugins which "
-"expect the default [code].import[/code] folder."
-msgstr ""
-
-#: doc/classes/ProjectSettings.xml:209
-msgid ""
"Specifies a file to override project settings. For example: [code]user://"
"custom_settings.cfg[/code]. See \"Overriding\" in the [ProjectSettings] "
"class description at the top for more information.\n"
@@ -44025,7 +44240,7 @@ msgid ""
"code] will still be read to override the project settings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:213
+#: doc/classes/ProjectSettings.xml:208
msgid ""
"If [code]true[/code], the project will save user data to its own user "
"directory (see [member application/config/custom_user_dir_name]). This "
@@ -44035,13 +44250,28 @@ msgid ""
"user data directory)/Godot/app_userdata/(project name)[/code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:216
+#: doc/classes/ProjectSettings.xml:211
+msgid ""
+"If [code]true[/code], the project will use a hidden directory ([code]."
+"import[/code]) for storing project-specific data (metadata, shader cache, "
+"etc.).\n"
+"If [code]false[/code], a non-hidden directory ([code]import[/code]) will be "
+"used instead.\n"
+"[b]Note:[/b] Restart the application after changing this setting.\n"
+"[b]Note:[/b] Changing this value can help on platforms or with third-party "
+"tools where hidden directory patterns are disallowed. Only modify this "
+"setting if you know that your environment requires it, as changing the "
+"default can impact compatibility with some external tools or plugins which "
+"expect the default [code].import[/code] folder."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:217
msgid ""
"Icon set in [code].ico[/code] format used on Windows to set the game's icon. "
"This is done automatically on start by calling [method OS.set_native_icon]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:219
+#: doc/classes/ProjectSettings.xml:220
msgid ""
"Time samples for frame deltas are subject to random variation introduced by "
"the platform, even when frames are displayed at regular intervals thanks to "
@@ -44055,14 +44285,14 @@ msgid ""
"adequate to render frames at the refresh rate."
msgstr ""
-#: doc/classes/ProjectSettings.xml:224
+#: doc/classes/ProjectSettings.xml:225
msgid ""
"[b]Experimental.[/b] Shifts the measurement of delta time for each frame to "
"just after the drawing has taken place. This may lead to more consistent "
"deltas and a reduction in frame stutters."
msgstr ""
-#: doc/classes/ProjectSettings.xml:227
+#: doc/classes/ProjectSettings.xml:228
msgid ""
"If [code]true[/code], disables printing to standard error. If [code]true[/"
"code], this also hides error and warning messages printed by [method "
@@ -44071,7 +44301,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:231
+#: doc/classes/ProjectSettings.xml:232
msgid ""
"If [code]true[/code], disables printing to standard output. This is "
"equivalent to starting the editor or project with the [code]--quiet[/code] "
@@ -44079,7 +44309,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:235
+#: doc/classes/ProjectSettings.xml:236
msgid ""
"If [code]true[/code], flushes the standard output stream every time a line "
"is printed. This affects both terminal logging and file logging.\n"
@@ -44095,20 +44325,20 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:241
+#: doc/classes/ProjectSettings.xml:242
msgid ""
"Debug build override for [member application/run/flush_stdout_on_print], as "
"performance is less important during debugging.\n"
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:245
+#: doc/classes/ProjectSettings.xml:246
msgid ""
"Forces a delay between frames in the main loop (in milliseconds). This may "
"be useful if you plan to disable vertical synchronization."
msgstr ""
-#: doc/classes/ProjectSettings.xml:248
+#: doc/classes/ProjectSettings.xml:249
msgid ""
"If [code]true[/code], enables low-processor usage mode. This setting only "
"works on desktop platforms. The screen is not redrawn if nothing changes "
@@ -44116,75 +44346,81 @@ msgid ""
"useless (and can hurt performance) in most games."
msgstr ""
-#: doc/classes/ProjectSettings.xml:251
+#: doc/classes/ProjectSettings.xml:252
msgid ""
"Amount of sleeping between frames when the low-processor usage mode is "
"enabled (in microseconds). Higher values will result in lower CPU usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:254
+#: doc/classes/ProjectSettings.xml:255
msgid "Path to the main scene file that will be loaded when the project runs."
msgstr ""
-#: doc/classes/ProjectSettings.xml:257 doc/classes/ProjectSettings.xml:260
+#: doc/classes/ProjectSettings.xml:258 doc/classes/ProjectSettings.xml:261
msgid ""
"Audio buses will disable automatically when sound goes below a given dB "
"threshold for a given time. This saves CPU as effects assigned to that bus "
"will no longer do any processing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:263
+#: doc/classes/ProjectSettings.xml:264
msgid ""
"Default [AudioBusLayout] resource file to use in the project, unless "
"overridden by the scene."
msgstr ""
-#: doc/classes/ProjectSettings.xml:266
+#: doc/classes/ProjectSettings.xml:267
msgid ""
"Specifies the audio driver to use. This setting is platform-dependent as "
"each platform supports different audio drivers. If left empty, the default "
"audio driver will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:269
+#: doc/classes/ProjectSettings.xml:270
msgid ""
"If [code]true[/code], microphone input will be allowed. This requires "
"appropriate permissions to be set when exporting to Android or iOS."
msgstr ""
-#: doc/classes/ProjectSettings.xml:272
+#: doc/classes/ProjectSettings.xml:273
msgid ""
"The mixing rate used for audio (in Hz). In general, it's better to not touch "
"this and leave it to the host operating system."
msgstr ""
-#: doc/classes/ProjectSettings.xml:275
+#: doc/classes/ProjectSettings.xml:276
msgid ""
"Safer override for [member audio/mix_rate] in the Web platform. Here "
"[code]0[/code] means \"let the browser choose\" (since some browsers do not "
"like forcing the mix rate)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:278
+#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:281
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:284
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:287
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -44194,7 +44430,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:290
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -44204,27 +44440,27 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:293
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:296
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
-#: doc/classes/ProjectSettings.xml:299
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:302
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -44232,81 +44468,81 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:305
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:308
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:311
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:314
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:317
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr ""
-#: doc/classes/ProjectSettings.xml:320
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:323
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:326
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:329
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:332
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:335
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:338
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:341
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -44314,109 +44550,109 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:344
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:347
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:350
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:353
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:356
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:359
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:362
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:365
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:368
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:371
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:374
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:377
+#: doc/classes/ProjectSettings.xml:380
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:380
+#: doc/classes/ProjectSettings.xml:383
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:383
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:386
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:389
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:392
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:395
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:398
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -44427,91 +44663,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:403
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:406
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:409
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:412
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:415
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:418
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:421
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:424
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:427
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:430
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:433
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:436
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:439
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr ""
-#: doc/classes/ProjectSettings.xml:442
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:445
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:448
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:451
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -44520,13 +44756,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:455
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:458
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -44536,7 +44772,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:463
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -44544,19 +44780,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:468
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:472
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:476
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -44570,45 +44806,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:481
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:484
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:488
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:491
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:494
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:497
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:500
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -44617,7 +44853,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:503
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -44628,7 +44864,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:507
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -44644,14 +44880,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:515
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:518
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -44659,49 +44895,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:521
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:524
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:529
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:532
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:535
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:538
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:541
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:544
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:547
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -44710,7 +44946,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:551
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44718,7 +44954,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:555
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44726,7 +44962,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:559
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44736,7 +44972,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:563
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -44745,7 +44981,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:567
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -44754,7 +44990,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:571
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44764,7 +45000,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:575
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44772,7 +45008,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:579
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -44782,7 +45018,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:583
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -44792,7 +45028,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:587
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44800,7 +45036,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:591
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -44809,7 +45045,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:595
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44817,7 +45053,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:599
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -44829,477 +45065,477 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:605
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:608
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:611
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:614
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:617
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:620
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:623
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:626
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:629
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:632
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:635
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:638
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:641
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:644
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:647
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:650
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:653
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:656
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:659
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:662
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:665
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:668
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:671
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:674
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:677
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:680
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:683
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:686
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:689
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:692
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:695
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:698
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:701
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:704
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:707
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:710
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:713
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:716
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:719
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:722
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:725
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:728
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:731
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:734
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:737
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:740
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:743
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:746
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:749
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:752
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:755
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:758
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:761
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:764
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:767
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:770
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:773
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:776
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:779
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:782
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:785
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:788
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:791
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:794
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:797
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:800
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:803
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:806
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:809
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:812
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:815
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:818
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:821
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:824
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:827
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:830
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:833
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:836
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:839
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:842
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:845
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:848
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:851
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:854
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:857
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:860
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:863
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:866
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:869
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:872
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:875
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:878
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:881
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr ""
-#: doc/classes/ProjectSettings.xml:884
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:887
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:890
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:893
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:896
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:899
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:902
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:905
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:908
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:911
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:914
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:917
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:920
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:923
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:926
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:929
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:932
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:935
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:938
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:941
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:946
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:949
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -45307,92 +45543,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:952
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:955
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:958
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:961
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:964
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:967
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:970
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:973
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:976
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:979
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:982
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:985
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:988
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:991
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:994
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:997
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1000
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1003
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -45402,33 +45638,33 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1007
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1010
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1013
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1017
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1021
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45441,7 +45677,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1025
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45453,7 +45689,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1033
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45465,7 +45701,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1041
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45478,7 +45714,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1045
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -45486,28 +45722,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1049
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1053
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1056
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1059
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -45517,25 +45753,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1063
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1066
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1069
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1072
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45548,7 +45784,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1076
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45560,7 +45796,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1084
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45572,7 +45808,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1092
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45585,13 +45821,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1096
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1099
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -45599,11 +45835,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1103
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1106
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -45617,7 +45853,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1112
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -45626,7 +45862,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1116
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -45642,7 +45878,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1121
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -45652,7 +45888,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1125
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45662,7 +45898,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1129
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -45673,7 +45909,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1133
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45683,7 +45919,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1137
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -45691,7 +45927,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1141
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -45702,7 +45938,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1145
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -45717,7 +45953,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1151
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -45726,13 +45962,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1156
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1159
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -45741,7 +45977,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1162
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -45751,7 +45987,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1165
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -45763,7 +45999,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1168
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -45773,24 +46009,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1171
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1174
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1177
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1180
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -45799,7 +46035,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1183
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -45807,7 +46043,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1186
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -45816,7 +46052,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1189
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -45826,7 +46062,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1193
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -45834,31 +46070,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1197
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1200
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1203
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1206
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1209
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -45866,7 +46102,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1212
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -45876,46 +46112,53 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1215
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1218
+#: doc/classes/ProjectSettings.xml:1221
+msgid ""
+"iOS specific override for [member rendering/gles2/compatibility/"
+"disable_half_float], due to poor support for half-float vertex compression "
+"on many devices."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1224
msgid ""
-"If [code]true[/code] and available on the target device, enables high "
-"floating point precision for all shader computations in GLES2.\n"
+"If [code]true[/code] and available on the target Android device, enables "
+"high floating point precision for all shader computations in GLES2.\n"
"[b]Warning:[/b] High floating point precision can be extremely slow on older "
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1225
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1228
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1231
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1234
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -45923,7 +46166,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1237
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -45933,7 +46176,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1240
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -45942,7 +46185,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1243
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -45951,20 +46194,20 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1246
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1249
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1252
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -45973,7 +46216,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1255
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -45981,7 +46224,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1258
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -45990,7 +46233,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -46000,20 +46243,20 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1267
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1274
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -46022,13 +46265,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -46038,46 +46281,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1293
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1296
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1299
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1302
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1305
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -46087,7 +46330,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -46099,7 +46342,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -46107,7 +46350,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1316
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -46115,7 +46358,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -46124,7 +46367,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1323
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -46138,7 +46381,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1328
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -46148,7 +46391,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1331
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -46157,7 +46400,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1334
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -46167,54 +46410,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1337
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1340
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1343
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1346
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1349
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1352
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1355
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1358
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -46225,61 +46468,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1365
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1368
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1371
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1374
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1377
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1380
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1383
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1386
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -46290,7 +46533,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -46299,26 +46542,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1393 doc/classes/ProjectSettings.xml:1396
#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1405
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1408
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1411
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -46329,20 +46572,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1418
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -46354,52 +46597,52 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1428
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1435
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1438
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1441
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1444
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1447
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1450
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1453
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -46407,7 +46650,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -46417,10 +46660,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -46429,10 +46672,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -46441,10 +46684,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -46453,10 +46696,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -46465,10 +46708,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -47136,40 +47379,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr ""
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -47177,14 +47434,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -49519,6 +49776,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -49536,7 +49809,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -49544,11 +49817,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -49558,19 +49831,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -54985,20 +55258,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -55009,28 +55287,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -55042,19 +55320,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
@@ -57840,26 +58118,33 @@ msgid "Text [Color] used when the [ToolButton] is disabled."
msgstr ""
#: doc/classes/ToolButton.xml:39
-msgid "Text [Color] used when the [ToolButton] is being hovered."
+msgid ""
+"Text [Color] used when the [ToolButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/ToolButton.xml:42
-msgid "Text [Color] used when the [ToolButton] is being pressed."
+msgid "Text [Color] used when the [ToolButton] is being hovered."
msgstr ""
#: doc/classes/ToolButton.xml:45
-msgid "[StyleBox] used when the [ToolButton] is being hovered."
+msgid "Text [Color] used when the [ToolButton] is being pressed."
msgstr ""
#: doc/classes/ToolButton.xml:48
-msgid "The horizontal space between [ToolButton]'s icon and text."
+msgid "[StyleBox] used when the [ToolButton] is being hovered."
msgstr ""
#: doc/classes/ToolButton.xml:51
-msgid "Default [StyleBox] for the [ToolButton]."
+msgid "The horizontal space between [ToolButton]'s icon and text."
msgstr ""
#: doc/classes/ToolButton.xml:54
+msgid "Default [StyleBox] for the [ToolButton]."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:57
msgid "[StyleBox] used when the [ToolButton] is being pressed."
msgstr ""
diff --git a/doc/translations/fi.po b/doc/translations/fi.po
index 1fee7179f2..c28650af80 100644
--- a/doc/translations/fi.po
+++ b/doc/translations/fi.po
@@ -3,14 +3,16 @@
# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md).
# This file is distributed under the same license as the Godot source code.
#
-# Tapani Niemi <tapani.niemi@kapsi.fi>, 2020.
+# Tapani Niemi <tapani.niemi@kapsi.fi>, 2020, 2021.
# Pierre Stempin <pierre.stempin@gmail.com>, 2020.
+# Nekromanser <ari.taitto@protonmail.com>, 2021.
+# Leevi Laine <leeviervoemil@gmail.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2020-10-12 09:28+0000\n"
-"Last-Translator: Pierre Stempin <pierre.stempin@gmail.com>\n"
+"PO-Revision-Date: 2021-10-28 22:08+0000\n"
+"Last-Translator: Tapani Niemi <tapani.niemi@kapsi.fi>\n"
"Language-Team: Finnish <https://hosted.weblate.org/projects/godot-engine/"
"godot-class-reference/fi/>\n"
"Language: fi\n"
@@ -18,45 +20,45 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.3-dev\n"
+"X-Generator: Weblate 4.9-dev\n"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Description"
msgstr "Kuvaus"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Tutorials"
-msgstr "Oppaat"
+msgstr "Opetusohjelmat"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Properties"
msgstr "Ominaisuudet"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Methods"
msgstr "Metodit"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Theme Properties"
msgstr "Teeman ominaisuudet"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Signals"
msgstr "Signaalit"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Enumerations"
msgstr "Luetteloinnit"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Constants"
msgstr "Vakiot"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Property Descriptions"
msgstr "Ominaisuuksien kuvaukset"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Method Descriptions"
msgstr "Metodien kuvaukset"
@@ -116,6 +118,10 @@ msgid ""
"a = abs(-1) # a is 1\n"
"[/codeblock]"
msgstr ""
+"Palauttaa parametrin [code]s[/code] itseisarvon (eli positiivisen arvon).\n"
+"[codeblock]\n"
+"a = abs(-1) # a on 1\n"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:55
msgid ""
@@ -3603,112 +3609,121 @@ msgid ""
msgstr ""
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr ""
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
msgstr ""
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
msgstr ""
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
msgstr ""
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr ""
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr ""
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr ""
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
msgstr ""
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr ""
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
msgstr ""
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
msgstr ""
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr ""
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
"positive.\n"
@@ -4786,7 +4801,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -6225,21 +6240,25 @@ msgstr ""
#: doc/classes/Area.xml:17
msgid ""
-"Returns a list of intersecting [Area]s. For performance reasons (collisions "
-"are all processed at the same time) this list is modified once during the "
-"physics step, not immediately after objects are moved. Consider using "
-"signals instead."
+"Returns a list of intersecting [Area]s. The overlapping area's [member "
+"CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:23
+#: doc/classes/Area.xml:24
msgid ""
-"Returns a list of intersecting [PhysicsBody]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody]s. The overlapping body's "
+"[member CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:30
+#: doc/classes/Area.xml:32
msgid ""
"If [code]true[/code], the given area overlaps the Area.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6247,7 +6266,7 @@ msgid ""
"physics step. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:38
+#: doc/classes/Area.xml:40
msgid ""
"If [code]true[/code], the given physics body overlaps the Area.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6258,7 +6277,7 @@ msgid ""
"their tiles with collision shapes as a virtual physics body)."
msgstr ""
-#: doc/classes/Area.xml:46
+#: doc/classes/Area.xml:48
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
"velocity lost per second.\n"
@@ -6266,41 +6285,41 @@ msgid ""
"details about damping."
msgstr ""
-#: doc/classes/Area.xml:50 doc/classes/Area2D.xml:52
+#: doc/classes/Area.xml:52 doc/classes/Area2D.xml:54
msgid "The name of the area's audio bus."
msgstr ""
-#: doc/classes/Area.xml:53 doc/classes/Area2D.xml:55
+#: doc/classes/Area.xml:55 doc/classes/Area2D.xml:57
msgid ""
"If [code]true[/code], the area's audio bus overrides the default audio bus."
msgstr ""
-#: doc/classes/Area.xml:56
+#: doc/classes/Area.xml:58
msgid ""
"The area's gravity intensity (in meters per second squared). This value "
"multiplies the gravity vector. This is useful to alter the force of gravity "
"without altering its direction."
msgstr ""
-#: doc/classes/Area.xml:59 doc/classes/Area2D.xml:61
+#: doc/classes/Area.xml:61 doc/classes/Area2D.xml:63
msgid ""
"The falloff factor for point gravity. The greater the value, the faster "
"gravity decreases with distance."
msgstr ""
-#: doc/classes/Area.xml:62 doc/classes/Area2D.xml:64
+#: doc/classes/Area.xml:64 doc/classes/Area2D.xml:66
msgid ""
"If [code]true[/code], gravity is calculated from a point (set via [member "
"gravity_vec]). See also [member space_override]."
msgstr ""
-#: doc/classes/Area.xml:65 doc/classes/Area2D.xml:67
+#: doc/classes/Area.xml:67 doc/classes/Area2D.xml:69
msgid ""
"The area's gravity vector (not normalized). If gravity is a point (see "
"[member gravity_point]), this will be the point of attraction."
msgstr ""
-#: doc/classes/Area.xml:68
+#: doc/classes/Area.xml:70
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
"velocity lost per second.\n"
@@ -6308,61 +6327,61 @@ msgid ""
"about damping."
msgstr ""
-#: doc/classes/Area.xml:72 doc/classes/Area2D.xml:74
+#: doc/classes/Area.xml:74 doc/classes/Area2D.xml:76
msgid "If [code]true[/code], other monitoring areas can detect this area."
msgstr ""
-#: doc/classes/Area.xml:75 doc/classes/Area2D.xml:77
+#: doc/classes/Area.xml:77 doc/classes/Area2D.xml:79
msgid ""
"If [code]true[/code], the area detects bodies or areas entering and exiting "
"it."
msgstr ""
-#: doc/classes/Area.xml:78 doc/classes/Area2D.xml:80
+#: doc/classes/Area.xml:80 doc/classes/Area2D.xml:82
msgid "The area's priority. Higher priority areas are processed first."
msgstr ""
-#: doc/classes/Area.xml:81
+#: doc/classes/Area.xml:83
msgid ""
"The degree to which this area applies reverb to its associated audio. Ranges "
"from [code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
msgstr ""
-#: doc/classes/Area.xml:84
+#: doc/classes/Area.xml:86
msgid "If [code]true[/code], the area applies reverb to its associated audio."
msgstr ""
-#: doc/classes/Area.xml:87
+#: doc/classes/Area.xml:89
msgid "The reverb bus name to use for this area's associated audio."
msgstr ""
-#: doc/classes/Area.xml:90
+#: doc/classes/Area.xml:92
msgid ""
"The degree to which this area's reverb is a uniform effect. Ranges from "
"[code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
msgstr ""
-#: doc/classes/Area.xml:93 doc/classes/Area2D.xml:83
+#: doc/classes/Area.xml:95 doc/classes/Area2D.xml:85
msgid ""
"Override mode for gravity and damping calculations within this area. See "
"[enum SpaceOverride] for possible values."
msgstr ""
-#: doc/classes/Area.xml:100
+#: doc/classes/Area.xml:102
msgid ""
"Emitted when another Area enters this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
-#: doc/classes/Area.xml:107
+#: doc/classes/Area.xml:109
msgid ""
"Emitted when another Area exits this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
-#: doc/classes/Area.xml:117 doc/classes/Area.xml:130
+#: doc/classes/Area.xml:119 doc/classes/Area.xml:132
msgid ""
"Emitted when one of another Area's [Shape]s enters one of this Area's "
"[Shape]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6377,7 +6396,7 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:140
+#: doc/classes/Area.xml:142
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] enters this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -6386,7 +6405,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:147
+#: doc/classes/Area.xml:149
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] exits this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -6395,7 +6414,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:157 doc/classes/Area.xml:170
+#: doc/classes/Area.xml:159 doc/classes/Area.xml:172
msgid ""
"Emitted when one of a [PhysicsBody] or [GridMap]'s [Shape]s enters one of "
"this Area's [Shape]s. Requires [member monitoring] to be set to [code]true[/"
@@ -6412,29 +6431,29 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:180 doc/classes/Area2D.xml:170
+#: doc/classes/Area.xml:182 doc/classes/Area2D.xml:172
msgid "This area does not affect gravity/damping."
msgstr ""
-#: doc/classes/Area.xml:183 doc/classes/Area2D.xml:173
+#: doc/classes/Area.xml:185 doc/classes/Area2D.xml:175
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order)."
msgstr ""
-#: doc/classes/Area.xml:186 doc/classes/Area2D.xml:176
+#: doc/classes/Area.xml:188 doc/classes/Area2D.xml:178
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order), ignoring any lower priority areas."
msgstr ""
-#: doc/classes/Area.xml:189 doc/classes/Area2D.xml:179
+#: doc/classes/Area.xml:191 doc/classes/Area2D.xml:181
msgid ""
"This area replaces any gravity/damping, even the defaults, ignoring any "
"lower priority areas."
msgstr ""
-#: doc/classes/Area.xml:192 doc/classes/Area2D.xml:182
+#: doc/classes/Area.xml:194 doc/classes/Area2D.xml:184
msgid ""
"This area replaces any gravity/damping calculated so far (in [member "
"priority] order), but keeps calculating the rest of the areas."
@@ -6471,21 +6490,25 @@ msgstr ""
#: doc/classes/Area2D.xml:19
msgid ""
-"Returns a list of intersecting [Area2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [Area2D]s. The overlapping area's [member "
+"CollisionObject2D.collision_layer] must be part of this area's [member "
+"CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:25
+#: doc/classes/Area2D.xml:26
msgid ""
-"Returns a list of intersecting [PhysicsBody2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody2D]s. The overlapping body's "
+"[member CollisionObject2D.collision_layer] must be part of this area's "
+"[member CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:32
+#: doc/classes/Area2D.xml:34
msgid ""
"If [code]true[/code], the given area overlaps the Area2D.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6493,7 +6516,7 @@ msgid ""
"the physics step. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:40
+#: doc/classes/Area2D.xml:42
msgid ""
"If [code]true[/code], the given physics body overlaps the Area2D.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6504,7 +6527,7 @@ msgid ""
"register their tiles with collision shapes as a virtual physics body)."
msgstr ""
-#: doc/classes/Area2D.xml:48
+#: doc/classes/Area2D.xml:50
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
"velocity lost per second.\n"
@@ -6512,14 +6535,14 @@ msgid ""
"details about damping."
msgstr ""
-#: doc/classes/Area2D.xml:58
+#: doc/classes/Area2D.xml:60
msgid ""
"The area's gravity intensity (in pixels per second squared). This value "
"multiplies the gravity vector. This is useful to alter the force of gravity "
"without altering its direction."
msgstr ""
-#: doc/classes/Area2D.xml:70
+#: doc/classes/Area2D.xml:72
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
"velocity lost per second.\n"
@@ -6527,21 +6550,21 @@ msgid ""
"about damping."
msgstr ""
-#: doc/classes/Area2D.xml:90
+#: doc/classes/Area2D.xml:92
msgid ""
"Emitted when another Area2D enters this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-#: doc/classes/Area2D.xml:97
+#: doc/classes/Area2D.xml:99
msgid ""
"Emitted when another Area2D exits this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-#: doc/classes/Area2D.xml:107
+#: doc/classes/Area2D.xml:109
msgid ""
"Emitted when one of another Area2D's [Shape2D]s enters one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6556,7 +6579,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:120
+#: doc/classes/Area2D.xml:122
msgid ""
"Emitted when one of another Area2D's [Shape2D]s exits one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6571,7 +6594,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:130
+#: doc/classes/Area2D.xml:132
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] enters this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -6580,7 +6603,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:137
+#: doc/classes/Area2D.xml:139
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] exits this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -6589,7 +6612,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:147
+#: doc/classes/Area2D.xml:149
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s enters one "
"of this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -6608,7 +6631,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:160
+#: doc/classes/Area2D.xml:162
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s exits one of "
"this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -10175,42 +10198,47 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
-"no save path is provided it will try to match the path from the current "
+"no root node is provided, parent of this node will be used as root instead. "
+"If no save path is provided it will try to match the path from the current "
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -10224,62 +10252,62 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
msgid "The rotation of the baked custom sky."
msgstr ""
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -10287,35 +10315,35 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -10323,13 +10351,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -10341,66 +10369,78 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr ""
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
msgid "Baking was successful."
msgstr ""
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr ""
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
#, fuzzy
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr "Palauttaa parametrien arkustangentin."
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr ""
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:133
+#: doc/classes/BakedLightmap.xml:132
+msgid ""
+"Returns if lightmapper can't be created. Unless you are using a custom "
+"lightmapper, please report this as bug."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:135
+msgid ""
+"There is no root node to start baking from. Either provide [code]from_node[/"
+"code] argument or attach this node to a parent that should be used as root."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:136
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:139
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:142
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -10853,8 +10893,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -11239,26 +11282,33 @@ msgid "Text [Color] used when the [Button] is disabled."
msgstr ""
#: doc/classes/Button.xml:77
-msgid "Text [Color] used when the [Button] is being hovered."
+msgid ""
+"Text [Color] used when the [Button] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/Button.xml:80
-msgid "Text [Color] used when the [Button] is being pressed."
+msgid "Text [Color] used when the [Button] is being hovered."
msgstr ""
#: doc/classes/Button.xml:83
-msgid "[StyleBox] used when the [Button] is being hovered."
+msgid "Text [Color] used when the [Button] is being pressed."
msgstr ""
#: doc/classes/Button.xml:86
-msgid "The horizontal space between [Button]'s icon and text."
+msgid "[StyleBox] used when the [Button] is being hovered."
msgstr ""
#: doc/classes/Button.xml:89
-msgid "Default [StyleBox] for the [Button]."
+msgid "The horizontal space between [Button]'s icon and text."
msgstr ""
#: doc/classes/Button.xml:92
+msgid "Default [StyleBox] for the [Button]."
+msgstr ""
+
+#: doc/classes/Button.xml:95
msgid "[StyleBox] used when the [Button] is being pressed."
msgstr ""
@@ -12729,80 +12779,96 @@ msgstr ""
msgid "The check icon to display when the [CheckBox] is checked."
msgstr ""
-#: doc/classes/CheckBox.xml:30
+#: doc/classes/CheckBox.xml:28
+msgid "The check icon to display when the [CheckBox] is checked and disabled."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:31
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is disabled."
msgstr ""
-#: doc/classes/CheckBox.xml:33
+#: doc/classes/CheckBox.xml:34
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is focused."
msgstr ""
-#: doc/classes/CheckBox.xml:36
+#: doc/classes/CheckBox.xml:37
msgid "The [Font] to use for the [CheckBox] text."
msgstr ""
-#: doc/classes/CheckBox.xml:39
+#: doc/classes/CheckBox.xml:40
msgid "The [CheckBox] text's font color."
msgstr ""
-#: doc/classes/CheckBox.xml:42
+#: doc/classes/CheckBox.xml:43
msgid "The [CheckBox] text's font color when it's disabled."
msgstr ""
-#: doc/classes/CheckBox.xml:45
+#: doc/classes/CheckBox.xml:46
+msgid ""
+"The [CheckBox] text's font color when it's focused. Only replaces the normal "
+"text color of the checkbox. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:49
msgid "The [CheckBox] text's font color when it's hovered."
msgstr ""
-#: doc/classes/CheckBox.xml:48
+#: doc/classes/CheckBox.xml:52
msgid "The [CheckBox] text's font color when it's hovered and pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:51
+#: doc/classes/CheckBox.xml:55
msgid "The [CheckBox] text's font color when it's pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:54
+#: doc/classes/CheckBox.xml:58
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered."
msgstr ""
-#: doc/classes/CheckBox.xml:57
+#: doc/classes/CheckBox.xml:61
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered and "
"pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:60
+#: doc/classes/CheckBox.xml:64
msgid "The separation between the check icon and the text (in pixels)."
msgstr ""
-#: doc/classes/CheckBox.xml:63 doc/classes/CheckButton.xml:58
+#: doc/classes/CheckBox.xml:67 doc/classes/CheckButton.xml:61
msgid "The [StyleBox] to display as a background."
msgstr ""
-#: doc/classes/CheckBox.xml:66
+#: doc/classes/CheckBox.xml:70
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:69
+#: doc/classes/CheckBox.xml:73
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is checked."
msgstr ""
-#: doc/classes/CheckBox.xml:74
+#: doc/classes/CheckBox.xml:78
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is unchecked."
msgstr ""
-#: doc/classes/CheckBox.xml:79
+#: doc/classes/CheckBox.xml:83
msgid "The check icon to display when the [CheckBox] is unchecked."
msgstr ""
+#: doc/classes/CheckBox.xml:86
+msgid ""
+"The check icon to display when the [CheckBox] is unchecked and disabled."
+msgstr ""
+
#: doc/classes/CheckButton.xml:4
msgid "Checkable button. See also [CheckBox]."
msgstr ""
@@ -12846,49 +12912,56 @@ msgid "The [CheckButton] text's font color when it's disabled."
msgstr ""
#: doc/classes/CheckButton.xml:40
-msgid "The [CheckButton] text's font color when it's hovered."
+msgid ""
+"The [CheckButton] text's font color when it's focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/CheckButton.xml:43
-msgid "The [CheckButton] text's font color when it's hovered and pressed."
+msgid "The [CheckButton] text's font color when it's hovered."
msgstr ""
#: doc/classes/CheckButton.xml:46
-msgid "The [CheckButton] text's font color when it's pressed."
+msgid "The [CheckButton] text's font color when it's hovered and pressed."
msgstr ""
#: doc/classes/CheckButton.xml:49
+msgid "The [CheckButton] text's font color when it's pressed."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:52
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered."
msgstr ""
-#: doc/classes/CheckButton.xml:52
+#: doc/classes/CheckButton.xml:55
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered "
"and pressed."
msgstr ""
-#: doc/classes/CheckButton.xml:55
+#: doc/classes/CheckButton.xml:58
msgid "The separation between the toggle icon and the text (in pixels)."
msgstr ""
-#: doc/classes/CheckButton.xml:61
+#: doc/classes/CheckButton.xml:64
msgid "The icon to display when the [CheckButton] is unchecked."
msgstr ""
-#: doc/classes/CheckButton.xml:64
+#: doc/classes/CheckButton.xml:67
msgid "The icon to display when the [CheckButton] is unchecked and disabled."
msgstr ""
-#: doc/classes/CheckButton.xml:67
+#: doc/classes/CheckButton.xml:70
msgid "The icon to display when the [CheckButton] is checked."
msgstr ""
-#: doc/classes/CheckButton.xml:70
+#: doc/classes/CheckButton.xml:73
msgid "The icon to display when the [CheckButton] is checked and disabled."
msgstr ""
-#: doc/classes/CheckButton.xml:73
+#: doc/classes/CheckButton.xml:76
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is pressed."
msgstr ""
@@ -14660,26 +14733,33 @@ msgid "Text [Color] used when the [ColorPickerButton] is disabled."
msgstr ""
#: doc/classes/ColorPickerButton.xml:80
-msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
+msgid ""
+"Text [Color] used when the [ColorPickerButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/ColorPickerButton.xml:83
-msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
+msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
msgstr ""
#: doc/classes/ColorPickerButton.xml:86
-msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
+msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
msgstr ""
#: doc/classes/ColorPickerButton.xml:89
-msgid "The horizontal space between [ColorPickerButton]'s icon and text."
+msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
msgstr ""
#: doc/classes/ColorPickerButton.xml:92
-msgid "Default [StyleBox] for the [ColorPickerButton]."
+msgid "The horizontal space between [ColorPickerButton]'s icon and text."
msgstr ""
#: doc/classes/ColorPickerButton.xml:95
+msgid "Default [StyleBox] for the [ColorPickerButton]."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:98
msgid "[StyleBox] used when the [ColorPickerButton] is being pressed."
msgstr ""
@@ -19913,7 +19993,8 @@ msgid ""
"get_resource_type]. They may optionally specify some import presets that "
"affect the import process. EditorImportPlugins are responsible for creating "
"the resources and saving them in the [code].import[/code] directory (see "
-"[member ProjectSettings.application/config/project_data_dir_name]).\n"
+"[member ProjectSettings.application/config/"
+"use_hidden_project_data_directory]).\n"
"Below is an example EditorImportPlugin that imports a [Mesh] from a file "
"with the extension \".special\" or \".spec\":\n"
"[codeblock]\n"
@@ -20040,7 +20121,7 @@ msgstr ""
msgid ""
"Gets the extension used to save this resource in the [code].import[/code] "
"directory (see [member ProjectSettings.application/config/"
-"project_data_dir_name])."
+"use_hidden_project_data_directory])."
msgstr ""
#: doc/classes/EditorImportPlugin.xml:130
@@ -21075,8 +21156,11 @@ msgstr ""
msgid "Emitted when the value of the edited resource was changed."
msgstr ""
-#: doc/classes/EditorResourcePicker.xml:89
-msgid "Emitted when the resource value was set and user clicked to edit it."
+#: doc/classes/EditorResourcePicker.xml:90
+msgid ""
+"Emitted when the resource value was set and user clicked to edit it. When "
+"[code]edit[/code] is [code]true[/code], the signal was caused by the context "
+"menu \"Edit\" option."
msgstr ""
#: doc/classes/EditorResourcePreview.xml:4
@@ -24825,21 +24909,32 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html"
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -24848,14 +24943,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -24865,80 +24964,80 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
msgstr ""
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr ""
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -27694,16 +27793,18 @@ msgstr ""
#: doc/classes/Image.xml:436
msgid ""
"OpenGL texture format [code]RED[/code] with a single component and a "
-"bitdepth of 8."
+"bitdepth of 8.\n"
+"[b]Note:[/b] When using the GLES2 backend, this uses the alpha channel "
+"instead of the red channel for storage."
msgstr ""
-#: doc/classes/Image.xml:439
+#: doc/classes/Image.xml:440
msgid ""
"OpenGL texture format [code]RG[/code] with two components and a bitdepth of "
"8 for each."
msgstr ""
-#: doc/classes/Image.xml:442
+#: doc/classes/Image.xml:443
msgid ""
"OpenGL texture format [code]RGB[/code] with three components, each with a "
"bitdepth of 8.\n"
@@ -27711,7 +27812,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:446
+#: doc/classes/Image.xml:447
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 8.\n"
@@ -27719,73 +27820,73 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:450
+#: doc/classes/Image.xml:451
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 4."
msgstr ""
-#: doc/classes/Image.xml:453
+#: doc/classes/Image.xml:454
msgid ""
"OpenGL texture format [code]GL_RGB5_A1[/code] where 5 bits of depth for each "
"component of RGB and one bit for alpha."
msgstr ""
-#: doc/classes/Image.xml:456
+#: doc/classes/Image.xml:457
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 32-"
"bit floating-point value."
msgstr ""
-#: doc/classes/Image.xml:459
+#: doc/classes/Image.xml:460
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:462
+#: doc/classes/Image.xml:463
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:465
+#: doc/classes/Image.xml:466
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:468
+#: doc/classes/Image.xml:469
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 16-"
"bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:471
+#: doc/classes/Image.xml:472
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:474
+#: doc/classes/Image.xml:475
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:477
+#: doc/classes/Image.xml:478
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:480
+#: doc/classes/Image.xml:481
msgid ""
"A special OpenGL texture format where the three color components have 9 bits "
"of precision and all three share a single 5-bit exponent."
msgstr ""
-#: doc/classes/Image.xml:483
+#: doc/classes/Image.xml:484
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 1, and is the smallest variation "
@@ -27795,7 +27896,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:487
+#: doc/classes/Image.xml:488
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 2, and color data is interpreted "
@@ -27805,7 +27906,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:491
+#: doc/classes/Image.xml:492
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format also known as Block Compression 3 or BC3 that contains 64 "
@@ -27816,7 +27917,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:495
+#: doc/classes/Image.xml:496
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -27824,7 +27925,7 @@ msgid ""
"DXT5 uses for the alpha channel."
msgstr ""
-#: doc/classes/Image.xml:498
+#: doc/classes/Image.xml:499
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -27832,7 +27933,7 @@ msgid ""
"algorithm that DXT5 uses for the alpha channel."
msgstr ""
-#: doc/classes/Image.xml:501
+#: doc/classes/Image.xml:502
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned normalized "
@@ -27841,21 +27942,21 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:505
+#: doc/classes/Image.xml:506
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with signed floating-point "
"RGB components."
msgstr ""
-#: doc/classes/Image.xml:508
+#: doc/classes/Image.xml:509
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned floating-point "
"RGB components."
msgstr ""
-#: doc/classes/Image.xml:511
+#: doc/classes/Image.xml:512
msgid ""
"Texture format used on PowerVR-supported mobile platforms, uses 2-bit color "
"depth with no alpha. More information can be found [url=https://en.wikipedia."
@@ -27864,25 +27965,25 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:515
+#: doc/classes/Image.xml:516
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with an "
"alpha component."
msgstr ""
-#: doc/classes/Image.xml:518
+#: doc/classes/Image.xml:519
msgid ""
"Similar to [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with 4-"
"bit color depth and no alpha."
msgstr ""
-#: doc/classes/Image.xml:521
+#: doc/classes/Image.xml:522
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC4[/url], but with an "
"alpha component."
msgstr ""
-#: doc/classes/Image.xml:524
+#: doc/classes/Image.xml:525
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC1]Ericsson Texture Compression format 1[/"
@@ -27890,7 +27991,7 @@ msgid ""
"standard. This format cannot store an alpha channel."
msgstr ""
-#: doc/classes/Image.xml:527
+#: doc/classes/Image.xml:528
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27898,7 +27999,7 @@ msgid ""
"unsigned data."
msgstr ""
-#: doc/classes/Image.xml:530
+#: doc/classes/Image.xml:531
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27906,7 +28007,7 @@ msgid ""
"channel of signed data."
msgstr ""
-#: doc/classes/Image.xml:533
+#: doc/classes/Image.xml:534
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27914,7 +28015,7 @@ msgid ""
"of unsigned data."
msgstr ""
-#: doc/classes/Image.xml:536
+#: doc/classes/Image.xml:537
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27922,7 +28023,7 @@ msgid ""
"channels of signed data."
msgstr ""
-#: doc/classes/Image.xml:539
+#: doc/classes/Image.xml:540
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27932,7 +28033,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:543
+#: doc/classes/Image.xml:544
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27942,7 +28043,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:547
+#: doc/classes/Image.xml:548
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27953,31 +28054,31 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:551
+#: doc/classes/Image.xml:552
msgid "Represents the size of the [enum Format] enum."
msgstr ""
-#: doc/classes/Image.xml:554
+#: doc/classes/Image.xml:555
msgid ""
"Performs nearest-neighbor interpolation. If the image is resized, it will be "
"pixelated."
msgstr ""
-#: doc/classes/Image.xml:557
+#: doc/classes/Image.xml:558
msgid ""
"Performs bilinear interpolation. If the image is resized, it will be blurry. "
"This mode is faster than [constant INTERPOLATE_CUBIC], but it results in "
"lower quality."
msgstr ""
-#: doc/classes/Image.xml:560
+#: doc/classes/Image.xml:561
msgid ""
"Performs cubic interpolation. If the image is resized, it will be blurry. "
"This mode often gives better results compared to [constant "
"INTERPOLATE_BILINEAR], at the cost of being slower."
msgstr ""
-#: doc/classes/Image.xml:563
+#: doc/classes/Image.xml:564
msgid ""
"Performs bilinear separately on the two most-suited mipmap levels, then "
"linearly interpolates between them.\n"
@@ -27992,55 +28093,55 @@ msgid ""
"a new set will be generated for the resulting image."
msgstr ""
-#: doc/classes/Image.xml:570
+#: doc/classes/Image.xml:571
msgid ""
"Performs Lanczos interpolation. This is the slowest image resizing mode, but "
"it typically gives the best results, especially when downscalng images."
msgstr ""
-#: doc/classes/Image.xml:573
+#: doc/classes/Image.xml:574
msgid "Image does not have alpha."
msgstr ""
-#: doc/classes/Image.xml:576
+#: doc/classes/Image.xml:577
msgid "Image stores alpha in a single bit."
msgstr ""
-#: doc/classes/Image.xml:579
+#: doc/classes/Image.xml:580
msgid "Image uses alpha."
msgstr ""
-#: doc/classes/Image.xml:582
+#: doc/classes/Image.xml:583
msgid "Use S3TC compression."
msgstr ""
-#: doc/classes/Image.xml:585
+#: doc/classes/Image.xml:586
msgid "Use PVRTC2 compression."
msgstr ""
-#: doc/classes/Image.xml:588
+#: doc/classes/Image.xml:589
msgid "Use PVRTC4 compression."
msgstr ""
-#: doc/classes/Image.xml:591
+#: doc/classes/Image.xml:592
msgid "Use ETC compression."
msgstr ""
-#: doc/classes/Image.xml:594
+#: doc/classes/Image.xml:595
msgid "Use ETC2 compression."
msgstr ""
-#: doc/classes/Image.xml:597
+#: doc/classes/Image.xml:598
msgid ""
"Source texture (before compression) is a regular texture. Default for all "
"textures."
msgstr ""
-#: doc/classes/Image.xml:600
+#: doc/classes/Image.xml:601
msgid "Source texture (before compression) is in sRGB space."
msgstr ""
-#: doc/classes/Image.xml:603
+#: doc/classes/Image.xml:604
msgid ""
"Source texture (before compression) is a normal texture (e.g. it can be "
"compressed into two channels)."
@@ -28265,6 +28366,17 @@ msgstr ""
#: doc/classes/Input.xml:43
msgid ""
+"Sends all input events which are in the current buffer to the game loop. "
+"These events may have been buffered as a result of accumulated input "
+"([method set_use_accumulated_input]) or agile input flushing ([member "
+"ProjectSettings.input_devices/buffering/agile_event_flushing]).\n"
+"The engine will already do this itself at key execution points (at least "
+"once per frame). However, this can be useful in advanced cases where you "
+"want precise control over the timing of event handling."
+msgstr ""
+
+#: doc/classes/Input.xml:50
+msgid ""
"Returns the acceleration of the device's accelerometer sensor, if the device "
"has one. Otherwise, the method returns [constant Vector3.ZERO].\n"
"Note this method returns an empty [Vector3] when running from the editor "
@@ -28276,7 +28388,7 @@ msgid ""
"the Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:53
+#: doc/classes/Input.xml:60
msgid ""
"Returns a value between 0 and 1 representing the raw intensity of the given "
"action, ignoring the action's deadzone. In most cases, you should use "
@@ -28286,7 +28398,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:62
+#: doc/classes/Input.xml:69
msgid ""
"Returns a value between 0 and 1 representing the intensity of the given "
"action. In a joypad, for example, the further away the axis (analog sticks "
@@ -28298,7 +28410,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:71
+#: doc/classes/Input.xml:78
msgid ""
"Get axis input by specifying two actions, one negative and one positive.\n"
"This is a shorthand for writing [code]Input."
@@ -28306,17 +28418,17 @@ msgid ""
"get_action_strength(\"negative_action\")[/code]."
msgstr ""
-#: doc/classes/Input.xml:78
+#: doc/classes/Input.xml:85
msgid ""
"Returns an [Array] containing the device IDs of all currently connected "
"joypads."
msgstr ""
-#: doc/classes/Input.xml:84
+#: doc/classes/Input.xml:91
msgid "Returns the currently assigned cursor shape (see [enum CursorShape])."
msgstr ""
-#: doc/classes/Input.xml:90
+#: doc/classes/Input.xml:97
msgid ""
"Returns the gravity of the device's accelerometer sensor, if the device has "
"one. Otherwise, the method returns [constant Vector3.ZERO].\n"
@@ -28326,7 +28438,7 @@ msgid ""
"Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:97
+#: doc/classes/Input.xml:104
msgid ""
"Returns the rotation rate in rad/s around a device's X, Y, and Z axes of the "
"gyroscope sensor, if the device has one. Otherwise, the method returns "
@@ -28335,53 +28447,53 @@ msgid ""
"it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:106
+#: doc/classes/Input.xml:113
msgid ""
"Returns the current value of the joypad axis at given index (see [enum "
"JoystickList])."
msgstr ""
-#: doc/classes/Input.xml:113
+#: doc/classes/Input.xml:120
msgid "Returns the index of the provided axis name."
msgstr ""
-#: doc/classes/Input.xml:120
+#: doc/classes/Input.xml:127
msgid ""
"Receives a [enum JoystickList] axis and returns its equivalent name as a "
"string."
msgstr ""
-#: doc/classes/Input.xml:127
+#: doc/classes/Input.xml:134
msgid "Returns the index of the provided button name."
msgstr ""
-#: doc/classes/Input.xml:134
+#: doc/classes/Input.xml:141
msgid ""
"Receives a gamepad button from [enum JoystickList] and returns its "
"equivalent name as a string."
msgstr ""
-#: doc/classes/Input.xml:141
+#: doc/classes/Input.xml:148
msgid ""
"Returns a SDL2-compatible device GUID on platforms that use gamepad "
"remapping. Returns [code]\"Default Gamepad\"[/code] otherwise."
msgstr ""
-#: doc/classes/Input.xml:148
+#: doc/classes/Input.xml:155
msgid "Returns the name of the joypad at the specified device index."
msgstr ""
-#: doc/classes/Input.xml:155
+#: doc/classes/Input.xml:162
msgid "Returns the duration of the current vibration effect in seconds."
msgstr ""
-#: doc/classes/Input.xml:162
+#: doc/classes/Input.xml:169
msgid ""
"Returns the strength of the joypad vibration: x is the strength of the weak "
"motor, and y is the strength of the strong motor."
msgstr ""
-#: doc/classes/Input.xml:168
+#: doc/classes/Input.xml:175
msgid ""
"Returns the mouse speed for the last time the cursor was moved, and this "
"until the next frame where the mouse moves. This means that even if the "
@@ -28389,7 +28501,7 @@ msgid ""
"motion."
msgstr ""
-#: doc/classes/Input.xml:174
+#: doc/classes/Input.xml:181
msgid ""
"Returns the magnetic field strength in micro-Tesla for all axes of the "
"device's magnetometer sensor, if the device has one. Otherwise, the method "
@@ -28398,17 +28510,17 @@ msgid ""
"platforms, it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:181
+#: doc/classes/Input.xml:188
msgid ""
"Returns mouse buttons as a bitmask. If multiple mouse buttons are pressed at "
"the same time, the bits are added together."
msgstr ""
-#: doc/classes/Input.xml:187
+#: doc/classes/Input.xml:194
msgid "Returns the mouse mode. See the constants for more information."
msgstr ""
-#: doc/classes/Input.xml:198
+#: doc/classes/Input.xml:205
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -28421,7 +28533,7 @@ msgid ""
"want (on the range of 0 to 1)."
msgstr ""
-#: doc/classes/Input.xml:208
+#: doc/classes/Input.xml:215
msgid ""
"Returns [code]true[/code] when the user starts pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user pressed down "
@@ -28433,7 +28545,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:218
+#: doc/classes/Input.xml:225
msgid ""
"Returns [code]true[/code] when the user stops pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user released the "
@@ -28443,7 +28555,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:227
+#: doc/classes/Input.xml:234
msgid ""
"Returns [code]true[/code] if you are pressing the action event. Note that if "
"an action has multiple buttons assigned and more than one of them is "
@@ -28454,13 +28566,13 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:236
+#: doc/classes/Input.xml:243
msgid ""
"Returns [code]true[/code] if you are pressing the joypad button (see [enum "
"JoystickList])."
msgstr ""
-#: doc/classes/Input.xml:243
+#: doc/classes/Input.xml:250
msgid ""
"Returns [code]true[/code] if the system knows the specified device. This "
"means that it sets all button and axis indices exactly as defined in [enum "
@@ -28468,19 +28580,19 @@ msgid ""
"but you can still retrieve events from them."
msgstr ""
-#: doc/classes/Input.xml:250
+#: doc/classes/Input.xml:257
msgid ""
"Returns [code]true[/code] if you are pressing the key. You can pass a [enum "
"KeyList] constant."
msgstr ""
-#: doc/classes/Input.xml:257
+#: doc/classes/Input.xml:264
msgid ""
"Returns [code]true[/code] if you are pressing the mouse button specified "
"with [enum ButtonList]."
msgstr ""
-#: doc/classes/Input.xml:267
+#: doc/classes/Input.xml:274
msgid ""
"Notifies the [Input] singleton that a connection has changed, to update the "
"state for the [code]device[/code] index.\n"
@@ -28489,7 +28601,7 @@ msgid ""
"triggered internally."
msgstr ""
-#: doc/classes/Input.xml:275
+#: doc/classes/Input.xml:282
msgid ""
"Feeds an [InputEvent] to the game. Can be used to artificially trigger input "
"events from code. Also generates [method Node._input] calls.\n"
@@ -28502,12 +28614,21 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Input.xml:289
+#: doc/classes/Input.xml:296
msgid ""
"Removes all mappings from the internal database that match the given GUID."
msgstr ""
-#: doc/classes/Input.xml:298
+#: doc/classes/Input.xml:303
+msgid ""
+"Sets the acceleration value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:313
msgid ""
"Sets a custom mouse cursor image, which is only visible inside the game "
"window. The hotspot can also be specified. Passing [code]null[/code] to the "
@@ -28522,7 +28643,7 @@ msgid ""
"compression mode can't be used for custom cursors."
msgstr ""
-#: doc/classes/Input.xml:309
+#: doc/classes/Input.xml:324
msgid ""
"Sets the default cursor shape to be used in the viewport instead of "
"[constant CURSOR_ARROW].\n"
@@ -28532,11 +28653,38 @@ msgid ""
"cursor immediately."
msgstr ""
-#: doc/classes/Input.xml:318
+#: doc/classes/Input.xml:333
+msgid ""
+"Sets the gravity value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:341
+msgid ""
+"Sets the value of the rotation rate of the gyroscope sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:349
+msgid ""
+"Sets the value of the magnetic field of the magnetometer sensor. Can be used "
+"for debugging on devices without a hardware sensor, for example in an editor "
+"on a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:357
msgid "Sets the mouse mode. See the constants for more information."
msgstr ""
-#: doc/classes/Input.xml:325
+#: doc/classes/Input.xml:364
msgid ""
"Enables or disables the accumulation of similar input events sent by the "
"operating system. When input accumulation is enabled, all input events "
@@ -28550,7 +28698,7 @@ msgid ""
"results that closely follow the actual input."
msgstr ""
-#: doc/classes/Input.xml:336
+#: doc/classes/Input.xml:375
msgid ""
"Starts to vibrate the joypad. Joypads usually come with two rumble motors, a "
"strong and a weak one. [code]weak_magnitude[/code] is the strength of the "
@@ -28563,34 +28711,34 @@ msgid ""
"few seconds."
msgstr ""
-#: doc/classes/Input.xml:344
+#: doc/classes/Input.xml:383
msgid "Stops the vibration of the joypad."
msgstr ""
-#: doc/classes/Input.xml:351
+#: doc/classes/Input.xml:390
msgid ""
"Vibrate Android and iOS devices.\n"
"[b]Note:[/b] It needs [code]VIBRATE[/code] permission for Android at export "
"settings. iOS does not support duration."
msgstr ""
-#: doc/classes/Input.xml:359
+#: doc/classes/Input.xml:398
msgid "Sets the mouse position to the specified vector."
msgstr ""
-#: doc/classes/Input.xml:368
+#: doc/classes/Input.xml:407
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
-#: doc/classes/Input.xml:374
+#: doc/classes/Input.xml:413
msgid "Makes the mouse cursor visible if it is hidden."
msgstr ""
-#: doc/classes/Input.xml:377
+#: doc/classes/Input.xml:416
msgid "Makes the mouse cursor hidden if it is visible."
msgstr ""
-#: doc/classes/Input.xml:380
+#: doc/classes/Input.xml:419
msgid ""
"Captures the mouse. The mouse will be hidden and its position locked at the "
"center of the screen.\n"
@@ -28598,83 +28746,83 @@ msgid ""
"need to use [member InputEventMouseMotion.relative]."
msgstr ""
-#: doc/classes/Input.xml:384
+#: doc/classes/Input.xml:423
msgid "Makes the mouse cursor visible but confines it to the game window."
msgstr ""
-#: doc/classes/Input.xml:387
+#: doc/classes/Input.xml:426
msgid "Arrow cursor. Standard, default pointing cursor."
msgstr ""
-#: doc/classes/Input.xml:390
+#: doc/classes/Input.xml:429
msgid ""
"I-beam cursor. Usually used to show where the text cursor will appear when "
"the mouse is clicked."
msgstr ""
-#: doc/classes/Input.xml:393
+#: doc/classes/Input.xml:432
msgid ""
"Pointing hand cursor. Usually used to indicate the pointer is over a link or "
"other interactable item."
msgstr ""
-#: doc/classes/Input.xml:396
+#: doc/classes/Input.xml:435
msgid ""
"Cross cursor. Typically appears over regions in which a drawing operation "
"can be performed or for selections."
msgstr ""
-#: doc/classes/Input.xml:399
+#: doc/classes/Input.xml:438
msgid ""
"Wait cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application is still usable during the "
"operation."
msgstr ""
-#: doc/classes/Input.xml:402
+#: doc/classes/Input.xml:441
msgid ""
"Busy cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application isn't usable during the "
"operation (e.g. something is blocking its main thread)."
msgstr ""
-#: doc/classes/Input.xml:405
+#: doc/classes/Input.xml:444
msgid "Drag cursor. Usually displayed when dragging something."
msgstr ""
-#: doc/classes/Input.xml:408
+#: doc/classes/Input.xml:447
msgid ""
"Can drop cursor. Usually displayed when dragging something to indicate that "
"it can be dropped at the current position."
msgstr ""
-#: doc/classes/Input.xml:411
+#: doc/classes/Input.xml:450
msgid ""
"Forbidden cursor. Indicates that the current action is forbidden (for "
"example, when dragging something) or that the control at a position is "
"disabled."
msgstr ""
-#: doc/classes/Input.xml:414
+#: doc/classes/Input.xml:453
msgid ""
"Vertical resize mouse cursor. A double-headed vertical arrow. It tells the "
"user they can resize the window or the panel vertically."
msgstr ""
-#: doc/classes/Input.xml:417
+#: doc/classes/Input.xml:456
msgid ""
"Horizontal resize mouse cursor. A double-headed horizontal arrow. It tells "
"the user they can resize the window or the panel horizontally."
msgstr ""
-#: doc/classes/Input.xml:420
+#: doc/classes/Input.xml:459
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the bottom left to the top right. It tells the user they can resize the "
"window or the panel both horizontally and vertically."
msgstr ""
-#: doc/classes/Input.xml:423
+#: doc/classes/Input.xml:462
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the top left to the bottom right, the opposite of [constant "
@@ -28682,23 +28830,23 @@ msgid ""
"both horizontally and vertically."
msgstr ""
-#: doc/classes/Input.xml:426
+#: doc/classes/Input.xml:465
msgid "Move cursor. Indicates that something can be moved."
msgstr ""
-#: doc/classes/Input.xml:429
+#: doc/classes/Input.xml:468
msgid ""
"Vertical split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_VSIZE]."
msgstr ""
-#: doc/classes/Input.xml:432
+#: doc/classes/Input.xml:471
msgid ""
"Horizontal split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_HSIZE]."
msgstr ""
-#: doc/classes/Input.xml:435
+#: doc/classes/Input.xml:474
msgid "Help cursor. Usually a question mark."
msgstr ""
@@ -29114,7 +29262,9 @@ msgid "The drag position."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -30426,7 +30576,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30491,22 +30642,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -30521,7 +30674,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -30529,19 +30682,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -30612,7 +30765,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30670,7 +30824,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -31957,14 +32113,21 @@ msgid "Default text [Color] of the [LinkButton]."
msgstr ""
#: doc/classes/LinkButton.xml:46
-msgid "Text [Color] used when the [LinkButton] is being hovered."
+msgid ""
+"Text [Color] used when the [LinkButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/LinkButton.xml:49
-msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgid "Text [Color] used when the [LinkButton] is being hovered."
msgstr ""
#: doc/classes/LinkButton.xml:52
+msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:55
msgid "The vertical space between the baseline of text and the underline."
msgstr ""
@@ -32457,26 +32620,33 @@ msgid "Text [Color] used when the [MenuButton] is disabled."
msgstr ""
#: doc/classes/MenuButton.xml:64
-msgid "Text [Color] used when the [MenuButton] is being hovered."
+msgid ""
+"Text [Color] used when the [MenuButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/MenuButton.xml:67
-msgid "Text [Color] used when the [MenuButton] is being pressed."
+msgid "Text [Color] used when the [MenuButton] is being hovered."
msgstr ""
#: doc/classes/MenuButton.xml:70
-msgid "[StyleBox] used when the [MenuButton] is being hovered."
+msgid "Text [Color] used when the [MenuButton] is being pressed."
msgstr ""
#: doc/classes/MenuButton.xml:73
-msgid "The horizontal space between [MenuButton]'s icon and text."
+msgid "[StyleBox] used when the [MenuButton] is being hovered."
msgstr ""
#: doc/classes/MenuButton.xml:76
-msgid "Default [StyleBox] for the [MenuButton]."
+msgid "The horizontal space between [MenuButton]'s icon and text."
msgstr ""
#: doc/classes/MenuButton.xml:79
+msgid "Default [StyleBox] for the [MenuButton]."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:82
msgid "[StyleBox] used when the [MenuButton] is being pressed."
msgstr ""
@@ -34202,7 +34372,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -37084,26 +37254,33 @@ msgid "Text [Color] used when the [OptionButton] is disabled."
msgstr ""
#: doc/classes/OptionButton.xml:212
-msgid "Text [Color] used when the [OptionButton] is being hovered."
+msgid ""
+"Text [Color] used when the [OptionButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/OptionButton.xml:215
-msgid "Text [Color] used when the [OptionButton] is being pressed."
+msgid "Text [Color] used when the [OptionButton] is being hovered."
msgstr ""
#: doc/classes/OptionButton.xml:218
-msgid "[StyleBox] used when the [OptionButton] is being hovered."
+msgid "Text [Color] used when the [OptionButton] is being pressed."
msgstr ""
#: doc/classes/OptionButton.xml:221
-msgid "The horizontal space between [OptionButton]'s icon and text."
+msgid "[StyleBox] used when the [OptionButton] is being hovered."
msgstr ""
#: doc/classes/OptionButton.xml:224
-msgid "Default [StyleBox] for the [OptionButton]."
+msgid "The horizontal space between [OptionButton]'s icon and text."
msgstr ""
#: doc/classes/OptionButton.xml:227
+msgid "Default [StyleBox] for the [OptionButton]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:230
msgid "[StyleBox] used when the [OptionButton] is being pressed."
msgstr ""
@@ -37509,7 +37686,7 @@ msgstr ""
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -37539,14 +37716,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -37556,7 +37733,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -40043,17 +40220,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -40071,11 +40274,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -40270,7 +40473,9 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-msgid "Returns the [Physics2DDirectBodyState] of the body."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
@@ -41073,6 +41278,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -41090,7 +41313,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -41204,7 +41427,9 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-msgid "Returns the [PhysicsDirectBodyState] of the body."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/PhysicsServer.xml:370
@@ -42186,27 +42411,27 @@ msgstr ""
msgid "Removes an element from the array by index."
msgstr ""
-#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolColorArray.xml:66
-#: doc/classes/PoolIntArray.xml:67 doc/classes/PoolRealArray.xml:67
-#: doc/classes/PoolStringArray.xml:74 doc/classes/PoolVector2Array.xml:67
-#: doc/classes/PoolVector3Array.xml:66
+#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolIntArray.xml:67
+#: doc/classes/PoolRealArray.xml:67
msgid ""
"Sets the size of the array. If the array is grown, reserves elements at the "
"end of the array. If the array is shrunk, truncates the array to the new "
-"size."
+"size.\n"
+"[b]Note:[/b] Added elements are not automatically initialized to 0 and will "
+"contain garbage, i.e. indeterminate values."
msgstr ""
-#: doc/classes/PoolByteArray.xml:121
+#: doc/classes/PoolByteArray.xml:122
msgid "Changes the byte at the given index."
msgstr ""
-#: doc/classes/PoolByteArray.xml:127 doc/classes/PoolColorArray.xml:79
-#: doc/classes/PoolRealArray.xml:80 doc/classes/PoolStringArray.xml:87
+#: doc/classes/PoolByteArray.xml:128 doc/classes/PoolColorArray.xml:79
+#: doc/classes/PoolRealArray.xml:81 doc/classes/PoolStringArray.xml:87
#: doc/classes/PoolVector2Array.xml:80 doc/classes/PoolVector3Array.xml:79
msgid "Returns the size of the array."
msgstr ""
-#: doc/classes/PoolByteArray.xml:135
+#: doc/classes/PoolByteArray.xml:136
msgid ""
"Returns the slice of the [PoolByteArray] between indices (inclusive) as a "
"new [PoolByteArray]. Any negative index is considered to be from the end of "
@@ -42238,6 +42463,14 @@ msgstr ""
msgid "Appends a value to the array."
msgstr ""
+#: doc/classes/PoolColorArray.xml:66 doc/classes/PoolStringArray.xml:74
+#: doc/classes/PoolVector2Array.xml:67 doc/classes/PoolVector3Array.xml:66
+msgid ""
+"Sets the size of the array. If the array is grown, reserves elements at the "
+"end of the array. If the array is shrunk, truncates the array to the new "
+"size."
+msgstr ""
+
#: doc/classes/PoolColorArray.xml:73
msgid "Changes the [Color] at the given index."
msgstr ""
@@ -42274,11 +42507,11 @@ msgid ""
"valid, or at the end of the array ([code]idx == size()[/code])."
msgstr ""
-#: doc/classes/PoolIntArray.xml:74
+#: doc/classes/PoolIntArray.xml:75
msgid "Changes the int at the given index."
msgstr ""
-#: doc/classes/PoolIntArray.xml:80
+#: doc/classes/PoolIntArray.xml:81
msgid "Returns the array size."
msgstr ""
@@ -42310,7 +42543,7 @@ msgstr ""
msgid "Appends a [PoolRealArray] at the end of this array."
msgstr ""
-#: doc/classes/PoolRealArray.xml:74
+#: doc/classes/PoolRealArray.xml:75
msgid "Changes the float at the given index."
msgstr ""
@@ -43576,18 +43809,6 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:204
msgid ""
-"The project data directory is used for storing project-specific data "
-"(metadata, shader cache, etc.).\n"
-"[b]Note:[/b] Restart the application after changing this setting.\n"
-"[b]Note:[/b] Changing this value can help on platforms or with third-party "
-"tools where specific directory patterns are disallowed. Only modify this "
-"setting if you know that your environment requires it, as changing the "
-"default can impact compatibility with some external tools or plugins which "
-"expect the default [code].import[/code] folder."
-msgstr ""
-
-#: doc/classes/ProjectSettings.xml:209
-msgid ""
"Specifies a file to override project settings. For example: [code]user://"
"custom_settings.cfg[/code]. See \"Overriding\" in the [ProjectSettings] "
"class description at the top for more information.\n"
@@ -43595,7 +43816,7 @@ msgid ""
"code] will still be read to override the project settings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:213
+#: doc/classes/ProjectSettings.xml:208
msgid ""
"If [code]true[/code], the project will save user data to its own user "
"directory (see [member application/config/custom_user_dir_name]). This "
@@ -43605,13 +43826,28 @@ msgid ""
"user data directory)/Godot/app_userdata/(project name)[/code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:216
+#: doc/classes/ProjectSettings.xml:211
+msgid ""
+"If [code]true[/code], the project will use a hidden directory ([code]."
+"import[/code]) for storing project-specific data (metadata, shader cache, "
+"etc.).\n"
+"If [code]false[/code], a non-hidden directory ([code]import[/code]) will be "
+"used instead.\n"
+"[b]Note:[/b] Restart the application after changing this setting.\n"
+"[b]Note:[/b] Changing this value can help on platforms or with third-party "
+"tools where hidden directory patterns are disallowed. Only modify this "
+"setting if you know that your environment requires it, as changing the "
+"default can impact compatibility with some external tools or plugins which "
+"expect the default [code].import[/code] folder."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:217
msgid ""
"Icon set in [code].ico[/code] format used on Windows to set the game's icon. "
"This is done automatically on start by calling [method OS.set_native_icon]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:219
+#: doc/classes/ProjectSettings.xml:220
msgid ""
"Time samples for frame deltas are subject to random variation introduced by "
"the platform, even when frames are displayed at regular intervals thanks to "
@@ -43625,14 +43861,14 @@ msgid ""
"adequate to render frames at the refresh rate."
msgstr ""
-#: doc/classes/ProjectSettings.xml:224
+#: doc/classes/ProjectSettings.xml:225
msgid ""
"[b]Experimental.[/b] Shifts the measurement of delta time for each frame to "
"just after the drawing has taken place. This may lead to more consistent "
"deltas and a reduction in frame stutters."
msgstr ""
-#: doc/classes/ProjectSettings.xml:227
+#: doc/classes/ProjectSettings.xml:228
msgid ""
"If [code]true[/code], disables printing to standard error. If [code]true[/"
"code], this also hides error and warning messages printed by [method "
@@ -43641,7 +43877,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:231
+#: doc/classes/ProjectSettings.xml:232
msgid ""
"If [code]true[/code], disables printing to standard output. This is "
"equivalent to starting the editor or project with the [code]--quiet[/code] "
@@ -43649,7 +43885,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:235
+#: doc/classes/ProjectSettings.xml:236
msgid ""
"If [code]true[/code], flushes the standard output stream every time a line "
"is printed. This affects both terminal logging and file logging.\n"
@@ -43665,20 +43901,20 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:241
+#: doc/classes/ProjectSettings.xml:242
msgid ""
"Debug build override for [member application/run/flush_stdout_on_print], as "
"performance is less important during debugging.\n"
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:245
+#: doc/classes/ProjectSettings.xml:246
msgid ""
"Forces a delay between frames in the main loop (in milliseconds). This may "
"be useful if you plan to disable vertical synchronization."
msgstr ""
-#: doc/classes/ProjectSettings.xml:248
+#: doc/classes/ProjectSettings.xml:249
msgid ""
"If [code]true[/code], enables low-processor usage mode. This setting only "
"works on desktop platforms. The screen is not redrawn if nothing changes "
@@ -43686,75 +43922,81 @@ msgid ""
"useless (and can hurt performance) in most games."
msgstr ""
-#: doc/classes/ProjectSettings.xml:251
+#: doc/classes/ProjectSettings.xml:252
msgid ""
"Amount of sleeping between frames when the low-processor usage mode is "
"enabled (in microseconds). Higher values will result in lower CPU usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:254
+#: doc/classes/ProjectSettings.xml:255
msgid "Path to the main scene file that will be loaded when the project runs."
msgstr ""
-#: doc/classes/ProjectSettings.xml:257 doc/classes/ProjectSettings.xml:260
+#: doc/classes/ProjectSettings.xml:258 doc/classes/ProjectSettings.xml:261
msgid ""
"Audio buses will disable automatically when sound goes below a given dB "
"threshold for a given time. This saves CPU as effects assigned to that bus "
"will no longer do any processing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:263
+#: doc/classes/ProjectSettings.xml:264
msgid ""
"Default [AudioBusLayout] resource file to use in the project, unless "
"overridden by the scene."
msgstr ""
-#: doc/classes/ProjectSettings.xml:266
+#: doc/classes/ProjectSettings.xml:267
msgid ""
"Specifies the audio driver to use. This setting is platform-dependent as "
"each platform supports different audio drivers. If left empty, the default "
"audio driver will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:269
+#: doc/classes/ProjectSettings.xml:270
msgid ""
"If [code]true[/code], microphone input will be allowed. This requires "
"appropriate permissions to be set when exporting to Android or iOS."
msgstr ""
-#: doc/classes/ProjectSettings.xml:272
+#: doc/classes/ProjectSettings.xml:273
msgid ""
"The mixing rate used for audio (in Hz). In general, it's better to not touch "
"this and leave it to the host operating system."
msgstr ""
-#: doc/classes/ProjectSettings.xml:275
+#: doc/classes/ProjectSettings.xml:276
msgid ""
"Safer override for [member audio/mix_rate] in the Web platform. Here "
"[code]0[/code] means \"let the browser choose\" (since some browsers do not "
"like forcing the mix rate)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:278
+#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:281
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:284
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:287
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43764,7 +44006,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:290
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43774,27 +44016,27 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:293
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:296
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
-#: doc/classes/ProjectSettings.xml:299
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:302
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -43802,81 +44044,81 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:305
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:308
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:311
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:314
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:317
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr ""
-#: doc/classes/ProjectSettings.xml:320
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:323
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:326
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:329
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:332
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:335
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:338
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:341
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -43884,109 +44126,109 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:344
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:347
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:350
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:353
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:356
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:359
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:362
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:365
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:368
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:371
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:374
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:377
+#: doc/classes/ProjectSettings.xml:380
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:380
+#: doc/classes/ProjectSettings.xml:383
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:383
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:386
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:389
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:392
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:395
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:398
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -43997,91 +44239,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:403
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:406
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:409
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:412
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:415
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:418
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:421
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:424
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:427
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:430
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:433
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:436
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:439
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr ""
-#: doc/classes/ProjectSettings.xml:442
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:445
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:448
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:451
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -44090,13 +44332,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:455
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:458
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -44106,7 +44348,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:463
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -44114,19 +44356,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:468
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:472
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:476
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -44140,45 +44382,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:481
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:484
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:488
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:491
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:494
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:497
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:500
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -44187,7 +44429,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:503
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -44198,7 +44440,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:507
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -44214,14 +44456,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:515
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:518
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -44229,49 +44471,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:521
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:524
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:529
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:532
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:535
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:538
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:541
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:544
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:547
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -44280,7 +44522,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:551
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44288,7 +44530,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:555
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44296,7 +44538,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:559
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44306,7 +44548,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:563
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -44315,7 +44557,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:567
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -44324,7 +44566,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:571
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44334,7 +44576,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:575
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44342,7 +44584,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:579
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -44352,7 +44594,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:583
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -44362,7 +44604,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:587
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44370,7 +44612,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:591
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -44379,7 +44621,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:595
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44387,7 +44629,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:599
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -44399,477 +44641,477 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:605
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:608
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:611
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:614
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:617
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:620
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:623
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:626
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:629
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:632
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:635
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:638
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:641
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:644
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:647
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:650
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:653
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:656
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:659
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:662
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:665
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:668
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:671
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:674
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:677
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:680
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:683
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:686
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:689
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:692
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:695
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:698
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:701
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:704
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:707
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:710
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:713
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:716
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:719
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:722
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:725
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:728
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:731
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:734
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:737
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:740
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:743
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:746
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:749
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:752
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:755
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:758
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:761
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:764
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:767
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:770
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:773
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:776
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:779
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:782
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:785
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:788
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:791
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:794
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:797
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:800
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:803
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:806
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:809
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:812
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:815
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:818
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:821
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:824
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:827
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:830
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:833
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:836
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:839
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:842
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:845
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:848
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:851
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:854
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:857
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:860
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:863
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:866
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:869
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:872
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:875
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:878
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:881
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr ""
-#: doc/classes/ProjectSettings.xml:884
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:887
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:890
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:893
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:896
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:899
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:902
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:905
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:908
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:911
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:914
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:917
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:920
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:923
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:926
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:929
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:932
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:935
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:938
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:941
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:946
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:949
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -44877,92 +45119,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:952
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:955
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:958
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:961
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:964
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:967
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:970
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:973
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:976
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:979
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:982
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:985
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:988
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:991
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:994
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:997
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1000
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1003
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -44972,33 +45214,33 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1007
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1010
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1013
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1017
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1021
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45011,7 +45253,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1025
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45023,7 +45265,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1033
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45035,7 +45277,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1041
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45048,7 +45290,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1045
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -45056,28 +45298,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1049
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1053
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1056
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1059
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -45087,25 +45329,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1063
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1066
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1069
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1072
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45118,7 +45360,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1076
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45130,7 +45372,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1084
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45142,7 +45384,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1092
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45155,13 +45397,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1096
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1099
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -45169,11 +45411,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1103
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1106
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -45187,7 +45429,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1112
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -45196,7 +45438,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1116
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -45212,7 +45454,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1121
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -45222,7 +45464,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1125
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45232,7 +45474,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1129
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -45243,7 +45485,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1133
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45253,7 +45495,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1137
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -45261,7 +45503,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1141
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -45272,7 +45514,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1145
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -45287,7 +45529,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1151
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -45296,13 +45538,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1156
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1159
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -45311,7 +45553,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1162
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -45321,7 +45563,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1165
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -45333,7 +45575,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1168
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -45343,24 +45585,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1171
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1174
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1177
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1180
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -45369,7 +45611,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1183
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -45377,7 +45619,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1186
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -45386,7 +45628,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1189
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -45396,7 +45638,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1193
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -45404,31 +45646,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1197
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1200
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1203
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1206
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1209
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -45436,7 +45678,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1212
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -45446,46 +45688,53 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1215
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1218
+#: doc/classes/ProjectSettings.xml:1221
+msgid ""
+"iOS specific override for [member rendering/gles2/compatibility/"
+"disable_half_float], due to poor support for half-float vertex compression "
+"on many devices."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1224
msgid ""
-"If [code]true[/code] and available on the target device, enables high "
-"floating point precision for all shader computations in GLES2.\n"
+"If [code]true[/code] and available on the target Android device, enables "
+"high floating point precision for all shader computations in GLES2.\n"
"[b]Warning:[/b] High floating point precision can be extremely slow on older "
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1225
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1228
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1231
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1234
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -45493,7 +45742,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1237
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -45503,7 +45752,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1240
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -45512,7 +45761,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1243
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -45521,20 +45770,20 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1246
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1249
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1252
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -45543,7 +45792,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1255
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -45551,7 +45800,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1258
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -45560,7 +45809,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -45570,20 +45819,20 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1267
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1274
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -45592,13 +45841,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -45608,46 +45857,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1293
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1296
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1299
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1302
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1305
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -45657,7 +45906,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -45669,7 +45918,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -45677,7 +45926,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1316
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -45685,7 +45934,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -45694,7 +45943,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1323
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -45708,7 +45957,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1328
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -45718,7 +45967,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1331
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -45727,7 +45976,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1334
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -45737,54 +45986,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1337
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1340
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1343
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1346
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1349
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1352
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1355
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1358
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -45795,61 +46044,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1365
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1368
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1371
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1374
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1377
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1380
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1383
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1386
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -45860,7 +46109,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -45869,26 +46118,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1393 doc/classes/ProjectSettings.xml:1396
#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1405
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1408
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1411
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -45899,20 +46148,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1418
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -45924,52 +46173,52 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1428
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1435
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1438
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1441
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1444
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1447
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1450
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1453
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -45977,7 +46226,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -45987,10 +46236,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -45999,10 +46248,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -46011,10 +46260,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -46023,10 +46272,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -46035,10 +46284,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -46700,40 +46949,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr ""
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -46741,14 +47004,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -49079,6 +49342,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -49096,7 +49375,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -49104,11 +49383,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -49118,19 +49397,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -54545,20 +54824,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -54569,28 +54853,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -54602,19 +54886,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
@@ -57402,26 +57686,33 @@ msgid "Text [Color] used when the [ToolButton] is disabled."
msgstr ""
#: doc/classes/ToolButton.xml:39
-msgid "Text [Color] used when the [ToolButton] is being hovered."
+msgid ""
+"Text [Color] used when the [ToolButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/ToolButton.xml:42
-msgid "Text [Color] used when the [ToolButton] is being pressed."
+msgid "Text [Color] used when the [ToolButton] is being hovered."
msgstr ""
#: doc/classes/ToolButton.xml:45
-msgid "[StyleBox] used when the [ToolButton] is being hovered."
+msgid "Text [Color] used when the [ToolButton] is being pressed."
msgstr ""
#: doc/classes/ToolButton.xml:48
-msgid "The horizontal space between [ToolButton]'s icon and text."
+msgid "[StyleBox] used when the [ToolButton] is being hovered."
msgstr ""
#: doc/classes/ToolButton.xml:51
-msgid "Default [StyleBox] for the [ToolButton]."
+msgid "The horizontal space between [ToolButton]'s icon and text."
msgstr ""
#: doc/classes/ToolButton.xml:54
+msgid "Default [StyleBox] for the [ToolButton]."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:57
msgid "[StyleBox] used when the [ToolButton] is being pressed."
msgstr ""
diff --git a/doc/translations/fil.po b/doc/translations/fil.po
index 3874d2b91f..58fec62601 100644
--- a/doc/translations/fil.po
+++ b/doc/translations/fil.po
@@ -21,43 +21,43 @@ msgstr ""
"|| n % 10 == 6 || n % 10 == 9);\n"
"X-Generator: Weblate 4.3-dev\n"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Description"
msgstr "Paglalarawan"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Tutorials"
msgstr "Mga tutorial"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Properties"
msgstr ""
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Methods"
msgstr ""
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Theme Properties"
msgstr ""
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Signals"
msgstr ""
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Enumerations"
msgstr ""
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Constants"
msgstr ""
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Property Descriptions"
msgstr ""
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Method Descriptions"
msgstr ""
@@ -3591,112 +3591,121 @@ msgid ""
msgstr ""
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr ""
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
msgstr ""
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
msgstr ""
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
msgstr ""
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr ""
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr ""
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr ""
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
msgstr ""
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr ""
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
msgstr ""
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
msgstr ""
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr ""
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
"positive.\n"
@@ -4774,7 +4783,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -6210,21 +6219,25 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
#: doc/classes/Area.xml:17
msgid ""
-"Returns a list of intersecting [Area]s. For performance reasons (collisions "
-"are all processed at the same time) this list is modified once during the "
-"physics step, not immediately after objects are moved. Consider using "
-"signals instead."
+"Returns a list of intersecting [Area]s. The overlapping area's [member "
+"CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:23
+#: doc/classes/Area.xml:24
msgid ""
-"Returns a list of intersecting [PhysicsBody]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody]s. The overlapping body's "
+"[member CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:30
+#: doc/classes/Area.xml:32
msgid ""
"If [code]true[/code], the given area overlaps the Area.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6232,7 +6245,7 @@ msgid ""
"physics step. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:38
+#: doc/classes/Area.xml:40
msgid ""
"If [code]true[/code], the given physics body overlaps the Area.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6243,7 +6256,7 @@ msgid ""
"their tiles with collision shapes as a virtual physics body)."
msgstr ""
-#: doc/classes/Area.xml:46
+#: doc/classes/Area.xml:48
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
"velocity lost per second.\n"
@@ -6251,41 +6264,41 @@ msgid ""
"details about damping."
msgstr ""
-#: doc/classes/Area.xml:50 doc/classes/Area2D.xml:52
+#: doc/classes/Area.xml:52 doc/classes/Area2D.xml:54
msgid "The name of the area's audio bus."
msgstr ""
-#: doc/classes/Area.xml:53 doc/classes/Area2D.xml:55
+#: doc/classes/Area.xml:55 doc/classes/Area2D.xml:57
msgid ""
"If [code]true[/code], the area's audio bus overrides the default audio bus."
msgstr ""
-#: doc/classes/Area.xml:56
+#: doc/classes/Area.xml:58
msgid ""
"The area's gravity intensity (in meters per second squared). This value "
"multiplies the gravity vector. This is useful to alter the force of gravity "
"without altering its direction."
msgstr ""
-#: doc/classes/Area.xml:59 doc/classes/Area2D.xml:61
+#: doc/classes/Area.xml:61 doc/classes/Area2D.xml:63
msgid ""
"The falloff factor for point gravity. The greater the value, the faster "
"gravity decreases with distance."
msgstr ""
-#: doc/classes/Area.xml:62 doc/classes/Area2D.xml:64
+#: doc/classes/Area.xml:64 doc/classes/Area2D.xml:66
msgid ""
"If [code]true[/code], gravity is calculated from a point (set via [member "
"gravity_vec]). See also [member space_override]."
msgstr ""
-#: doc/classes/Area.xml:65 doc/classes/Area2D.xml:67
+#: doc/classes/Area.xml:67 doc/classes/Area2D.xml:69
msgid ""
"The area's gravity vector (not normalized). If gravity is a point (see "
"[member gravity_point]), this will be the point of attraction."
msgstr ""
-#: doc/classes/Area.xml:68
+#: doc/classes/Area.xml:70
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
"velocity lost per second.\n"
@@ -6293,61 +6306,61 @@ msgid ""
"about damping."
msgstr ""
-#: doc/classes/Area.xml:72 doc/classes/Area2D.xml:74
+#: doc/classes/Area.xml:74 doc/classes/Area2D.xml:76
msgid "If [code]true[/code], other monitoring areas can detect this area."
msgstr ""
-#: doc/classes/Area.xml:75 doc/classes/Area2D.xml:77
+#: doc/classes/Area.xml:77 doc/classes/Area2D.xml:79
msgid ""
"If [code]true[/code], the area detects bodies or areas entering and exiting "
"it."
msgstr ""
-#: doc/classes/Area.xml:78 doc/classes/Area2D.xml:80
+#: doc/classes/Area.xml:80 doc/classes/Area2D.xml:82
msgid "The area's priority. Higher priority areas are processed first."
msgstr ""
-#: doc/classes/Area.xml:81
+#: doc/classes/Area.xml:83
msgid ""
"The degree to which this area applies reverb to its associated audio. Ranges "
"from [code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
msgstr ""
-#: doc/classes/Area.xml:84
+#: doc/classes/Area.xml:86
msgid "If [code]true[/code], the area applies reverb to its associated audio."
msgstr ""
-#: doc/classes/Area.xml:87
+#: doc/classes/Area.xml:89
msgid "The reverb bus name to use for this area's associated audio."
msgstr ""
-#: doc/classes/Area.xml:90
+#: doc/classes/Area.xml:92
msgid ""
"The degree to which this area's reverb is a uniform effect. Ranges from "
"[code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
msgstr ""
-#: doc/classes/Area.xml:93 doc/classes/Area2D.xml:83
+#: doc/classes/Area.xml:95 doc/classes/Area2D.xml:85
msgid ""
"Override mode for gravity and damping calculations within this area. See "
"[enum SpaceOverride] for possible values."
msgstr ""
-#: doc/classes/Area.xml:100
+#: doc/classes/Area.xml:102
msgid ""
"Emitted when another Area enters this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
-#: doc/classes/Area.xml:107
+#: doc/classes/Area.xml:109
msgid ""
"Emitted when another Area exits this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
-#: doc/classes/Area.xml:117 doc/classes/Area.xml:130
+#: doc/classes/Area.xml:119 doc/classes/Area.xml:132
msgid ""
"Emitted when one of another Area's [Shape]s enters one of this Area's "
"[Shape]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6362,7 +6375,7 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:140
+#: doc/classes/Area.xml:142
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] enters this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -6371,7 +6384,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:147
+#: doc/classes/Area.xml:149
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] exits this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -6380,7 +6393,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:157 doc/classes/Area.xml:170
+#: doc/classes/Area.xml:159 doc/classes/Area.xml:172
msgid ""
"Emitted when one of a [PhysicsBody] or [GridMap]'s [Shape]s enters one of "
"this Area's [Shape]s. Requires [member monitoring] to be set to [code]true[/"
@@ -6397,29 +6410,29 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:180 doc/classes/Area2D.xml:170
+#: doc/classes/Area.xml:182 doc/classes/Area2D.xml:172
msgid "This area does not affect gravity/damping."
msgstr ""
-#: doc/classes/Area.xml:183 doc/classes/Area2D.xml:173
+#: doc/classes/Area.xml:185 doc/classes/Area2D.xml:175
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order)."
msgstr ""
-#: doc/classes/Area.xml:186 doc/classes/Area2D.xml:176
+#: doc/classes/Area.xml:188 doc/classes/Area2D.xml:178
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order), ignoring any lower priority areas."
msgstr ""
-#: doc/classes/Area.xml:189 doc/classes/Area2D.xml:179
+#: doc/classes/Area.xml:191 doc/classes/Area2D.xml:181
msgid ""
"This area replaces any gravity/damping, even the defaults, ignoring any "
"lower priority areas."
msgstr ""
-#: doc/classes/Area.xml:192 doc/classes/Area2D.xml:182
+#: doc/classes/Area.xml:194 doc/classes/Area2D.xml:184
msgid ""
"This area replaces any gravity/damping calculated so far (in [member "
"priority] order), but keeps calculating the rest of the areas."
@@ -6458,21 +6471,25 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
#: doc/classes/Area2D.xml:19
msgid ""
-"Returns a list of intersecting [Area2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [Area2D]s. The overlapping area's [member "
+"CollisionObject2D.collision_layer] must be part of this area's [member "
+"CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:25
+#: doc/classes/Area2D.xml:26
msgid ""
-"Returns a list of intersecting [PhysicsBody2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody2D]s. The overlapping body's "
+"[member CollisionObject2D.collision_layer] must be part of this area's "
+"[member CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:32
+#: doc/classes/Area2D.xml:34
msgid ""
"If [code]true[/code], the given area overlaps the Area2D.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6480,7 +6497,7 @@ msgid ""
"the physics step. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:40
+#: doc/classes/Area2D.xml:42
msgid ""
"If [code]true[/code], the given physics body overlaps the Area2D.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6491,7 +6508,7 @@ msgid ""
"register their tiles with collision shapes as a virtual physics body)."
msgstr ""
-#: doc/classes/Area2D.xml:48
+#: doc/classes/Area2D.xml:50
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
"velocity lost per second.\n"
@@ -6499,14 +6516,14 @@ msgid ""
"details about damping."
msgstr ""
-#: doc/classes/Area2D.xml:58
+#: doc/classes/Area2D.xml:60
msgid ""
"The area's gravity intensity (in pixels per second squared). This value "
"multiplies the gravity vector. This is useful to alter the force of gravity "
"without altering its direction."
msgstr ""
-#: doc/classes/Area2D.xml:70
+#: doc/classes/Area2D.xml:72
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
"velocity lost per second.\n"
@@ -6514,21 +6531,21 @@ msgid ""
"about damping."
msgstr ""
-#: doc/classes/Area2D.xml:90
+#: doc/classes/Area2D.xml:92
msgid ""
"Emitted when another Area2D enters this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-#: doc/classes/Area2D.xml:97
+#: doc/classes/Area2D.xml:99
msgid ""
"Emitted when another Area2D exits this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-#: doc/classes/Area2D.xml:107
+#: doc/classes/Area2D.xml:109
msgid ""
"Emitted when one of another Area2D's [Shape2D]s enters one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6543,7 +6560,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:120
+#: doc/classes/Area2D.xml:122
msgid ""
"Emitted when one of another Area2D's [Shape2D]s exits one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6558,7 +6575,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:130
+#: doc/classes/Area2D.xml:132
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] enters this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -6567,7 +6584,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:137
+#: doc/classes/Area2D.xml:139
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] exits this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -6576,7 +6593,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:147
+#: doc/classes/Area2D.xml:149
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s enters one "
"of this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -6595,7 +6612,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:160
+#: doc/classes/Area2D.xml:162
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s exits one of "
"this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -10165,42 +10182,47 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
-"no save path is provided it will try to match the path from the current "
+"no root node is provided, parent of this node will be used as root instead. "
+"If no save path is provided it will try to match the path from the current "
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -10214,62 +10236,62 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
msgid "The rotation of the baked custom sky."
msgstr ""
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -10277,35 +10299,35 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -10313,13 +10335,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -10331,65 +10353,77 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr ""
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
msgid "Baking was successful."
msgstr ""
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr ""
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr ""
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr ""
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:133
+#: doc/classes/BakedLightmap.xml:132
+msgid ""
+"Returns if lightmapper can't be created. Unless you are using a custom "
+"lightmapper, please report this as bug."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:135
+msgid ""
+"There is no root node to start baking from. Either provide [code]from_node[/"
+"code] argument or attach this node to a parent that should be used as root."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:136
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:139
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:142
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -10845,8 +10879,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -11234,26 +11271,33 @@ msgid "Text [Color] used when the [Button] is disabled."
msgstr ""
#: doc/classes/Button.xml:77
-msgid "Text [Color] used when the [Button] is being hovered."
+msgid ""
+"Text [Color] used when the [Button] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/Button.xml:80
-msgid "Text [Color] used when the [Button] is being pressed."
+msgid "Text [Color] used when the [Button] is being hovered."
msgstr ""
#: doc/classes/Button.xml:83
-msgid "[StyleBox] used when the [Button] is being hovered."
+msgid "Text [Color] used when the [Button] is being pressed."
msgstr ""
#: doc/classes/Button.xml:86
-msgid "The horizontal space between [Button]'s icon and text."
+msgid "[StyleBox] used when the [Button] is being hovered."
msgstr ""
#: doc/classes/Button.xml:89
-msgid "Default [StyleBox] for the [Button]."
+msgid "The horizontal space between [Button]'s icon and text."
msgstr ""
#: doc/classes/Button.xml:92
+msgid "Default [StyleBox] for the [Button]."
+msgstr ""
+
+#: doc/classes/Button.xml:95
msgid "[StyleBox] used when the [Button] is being pressed."
msgstr ""
@@ -12722,80 +12766,96 @@ msgstr ""
msgid "The check icon to display when the [CheckBox] is checked."
msgstr ""
-#: doc/classes/CheckBox.xml:30
+#: doc/classes/CheckBox.xml:28
+msgid "The check icon to display when the [CheckBox] is checked and disabled."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:31
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is disabled."
msgstr ""
-#: doc/classes/CheckBox.xml:33
+#: doc/classes/CheckBox.xml:34
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is focused."
msgstr ""
-#: doc/classes/CheckBox.xml:36
+#: doc/classes/CheckBox.xml:37
msgid "The [Font] to use for the [CheckBox] text."
msgstr ""
-#: doc/classes/CheckBox.xml:39
+#: doc/classes/CheckBox.xml:40
msgid "The [CheckBox] text's font color."
msgstr ""
-#: doc/classes/CheckBox.xml:42
+#: doc/classes/CheckBox.xml:43
msgid "The [CheckBox] text's font color when it's disabled."
msgstr ""
-#: doc/classes/CheckBox.xml:45
+#: doc/classes/CheckBox.xml:46
+msgid ""
+"The [CheckBox] text's font color when it's focused. Only replaces the normal "
+"text color of the checkbox. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:49
msgid "The [CheckBox] text's font color when it's hovered."
msgstr ""
-#: doc/classes/CheckBox.xml:48
+#: doc/classes/CheckBox.xml:52
msgid "The [CheckBox] text's font color when it's hovered and pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:51
+#: doc/classes/CheckBox.xml:55
msgid "The [CheckBox] text's font color when it's pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:54
+#: doc/classes/CheckBox.xml:58
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered."
msgstr ""
-#: doc/classes/CheckBox.xml:57
+#: doc/classes/CheckBox.xml:61
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered and "
"pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:60
+#: doc/classes/CheckBox.xml:64
msgid "The separation between the check icon and the text (in pixels)."
msgstr ""
-#: doc/classes/CheckBox.xml:63 doc/classes/CheckButton.xml:58
+#: doc/classes/CheckBox.xml:67 doc/classes/CheckButton.xml:61
msgid "The [StyleBox] to display as a background."
msgstr ""
-#: doc/classes/CheckBox.xml:66
+#: doc/classes/CheckBox.xml:70
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:69
+#: doc/classes/CheckBox.xml:73
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is checked."
msgstr ""
-#: doc/classes/CheckBox.xml:74
+#: doc/classes/CheckBox.xml:78
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is unchecked."
msgstr ""
-#: doc/classes/CheckBox.xml:79
+#: doc/classes/CheckBox.xml:83
msgid "The check icon to display when the [CheckBox] is unchecked."
msgstr ""
+#: doc/classes/CheckBox.xml:86
+msgid ""
+"The check icon to display when the [CheckBox] is unchecked and disabled."
+msgstr ""
+
#: doc/classes/CheckButton.xml:4
msgid "Checkable button. See also [CheckBox]."
msgstr ""
@@ -12839,49 +12899,56 @@ msgid "The [CheckButton] text's font color when it's disabled."
msgstr ""
#: doc/classes/CheckButton.xml:40
-msgid "The [CheckButton] text's font color when it's hovered."
+msgid ""
+"The [CheckButton] text's font color when it's focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/CheckButton.xml:43
-msgid "The [CheckButton] text's font color when it's hovered and pressed."
+msgid "The [CheckButton] text's font color when it's hovered."
msgstr ""
#: doc/classes/CheckButton.xml:46
-msgid "The [CheckButton] text's font color when it's pressed."
+msgid "The [CheckButton] text's font color when it's hovered and pressed."
msgstr ""
#: doc/classes/CheckButton.xml:49
+msgid "The [CheckButton] text's font color when it's pressed."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:52
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered."
msgstr ""
-#: doc/classes/CheckButton.xml:52
+#: doc/classes/CheckButton.xml:55
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered "
"and pressed."
msgstr ""
-#: doc/classes/CheckButton.xml:55
+#: doc/classes/CheckButton.xml:58
msgid "The separation between the toggle icon and the text (in pixels)."
msgstr ""
-#: doc/classes/CheckButton.xml:61
+#: doc/classes/CheckButton.xml:64
msgid "The icon to display when the [CheckButton] is unchecked."
msgstr ""
-#: doc/classes/CheckButton.xml:64
+#: doc/classes/CheckButton.xml:67
msgid "The icon to display when the [CheckButton] is unchecked and disabled."
msgstr ""
-#: doc/classes/CheckButton.xml:67
+#: doc/classes/CheckButton.xml:70
msgid "The icon to display when the [CheckButton] is checked."
msgstr ""
-#: doc/classes/CheckButton.xml:70
+#: doc/classes/CheckButton.xml:73
msgid "The icon to display when the [CheckButton] is checked and disabled."
msgstr ""
-#: doc/classes/CheckButton.xml:73
+#: doc/classes/CheckButton.xml:76
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is pressed."
msgstr ""
@@ -14656,26 +14723,33 @@ msgid "Text [Color] used when the [ColorPickerButton] is disabled."
msgstr ""
#: doc/classes/ColorPickerButton.xml:80
-msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
+msgid ""
+"Text [Color] used when the [ColorPickerButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/ColorPickerButton.xml:83
-msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
+msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
msgstr ""
#: doc/classes/ColorPickerButton.xml:86
-msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
+msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
msgstr ""
#: doc/classes/ColorPickerButton.xml:89
-msgid "The horizontal space between [ColorPickerButton]'s icon and text."
+msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
msgstr ""
#: doc/classes/ColorPickerButton.xml:92
-msgid "Default [StyleBox] for the [ColorPickerButton]."
+msgid "The horizontal space between [ColorPickerButton]'s icon and text."
msgstr ""
#: doc/classes/ColorPickerButton.xml:95
+msgid "Default [StyleBox] for the [ColorPickerButton]."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:98
msgid "[StyleBox] used when the [ColorPickerButton] is being pressed."
msgstr ""
@@ -19905,7 +19979,8 @@ msgid ""
"get_resource_type]. They may optionally specify some import presets that "
"affect the import process. EditorImportPlugins are responsible for creating "
"the resources and saving them in the [code].import[/code] directory (see "
-"[member ProjectSettings.application/config/project_data_dir_name]).\n"
+"[member ProjectSettings.application/config/"
+"use_hidden_project_data_directory]).\n"
"Below is an example EditorImportPlugin that imports a [Mesh] from a file "
"with the extension \".special\" or \".spec\":\n"
"[codeblock]\n"
@@ -20032,7 +20107,7 @@ msgstr ""
msgid ""
"Gets the extension used to save this resource in the [code].import[/code] "
"directory (see [member ProjectSettings.application/config/"
-"project_data_dir_name])."
+"use_hidden_project_data_directory])."
msgstr ""
#: doc/classes/EditorImportPlugin.xml:130
@@ -21067,8 +21142,11 @@ msgstr ""
msgid "Emitted when the value of the edited resource was changed."
msgstr ""
-#: doc/classes/EditorResourcePicker.xml:89
-msgid "Emitted when the resource value was set and user clicked to edit it."
+#: doc/classes/EditorResourcePicker.xml:90
+msgid ""
+"Emitted when the resource value was set and user clicked to edit it. When "
+"[code]edit[/code] is [code]true[/code], the signal was caused by the context "
+"menu \"Edit\" option."
msgstr ""
#: doc/classes/EditorResourcePreview.xml:4
@@ -24817,21 +24895,32 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html"
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -24840,14 +24929,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -24857,80 +24950,80 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
msgstr ""
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr ""
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -27678,16 +27771,18 @@ msgstr ""
#: doc/classes/Image.xml:436
msgid ""
"OpenGL texture format [code]RED[/code] with a single component and a "
-"bitdepth of 8."
+"bitdepth of 8.\n"
+"[b]Note:[/b] When using the GLES2 backend, this uses the alpha channel "
+"instead of the red channel for storage."
msgstr ""
-#: doc/classes/Image.xml:439
+#: doc/classes/Image.xml:440
msgid ""
"OpenGL texture format [code]RG[/code] with two components and a bitdepth of "
"8 for each."
msgstr ""
-#: doc/classes/Image.xml:442
+#: doc/classes/Image.xml:443
msgid ""
"OpenGL texture format [code]RGB[/code] with three components, each with a "
"bitdepth of 8.\n"
@@ -27695,7 +27790,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:446
+#: doc/classes/Image.xml:447
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 8.\n"
@@ -27703,73 +27798,73 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:450
+#: doc/classes/Image.xml:451
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 4."
msgstr ""
-#: doc/classes/Image.xml:453
+#: doc/classes/Image.xml:454
msgid ""
"OpenGL texture format [code]GL_RGB5_A1[/code] where 5 bits of depth for each "
"component of RGB and one bit for alpha."
msgstr ""
-#: doc/classes/Image.xml:456
+#: doc/classes/Image.xml:457
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 32-"
"bit floating-point value."
msgstr ""
-#: doc/classes/Image.xml:459
+#: doc/classes/Image.xml:460
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:462
+#: doc/classes/Image.xml:463
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:465
+#: doc/classes/Image.xml:466
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:468
+#: doc/classes/Image.xml:469
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 16-"
"bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:471
+#: doc/classes/Image.xml:472
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:474
+#: doc/classes/Image.xml:475
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:477
+#: doc/classes/Image.xml:478
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:480
+#: doc/classes/Image.xml:481
msgid ""
"A special OpenGL texture format where the three color components have 9 bits "
"of precision and all three share a single 5-bit exponent."
msgstr ""
-#: doc/classes/Image.xml:483
+#: doc/classes/Image.xml:484
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 1, and is the smallest variation "
@@ -27779,7 +27874,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:487
+#: doc/classes/Image.xml:488
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 2, and color data is interpreted "
@@ -27789,7 +27884,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:491
+#: doc/classes/Image.xml:492
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format also known as Block Compression 3 or BC3 that contains 64 "
@@ -27800,7 +27895,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:495
+#: doc/classes/Image.xml:496
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -27808,7 +27903,7 @@ msgid ""
"DXT5 uses for the alpha channel."
msgstr ""
-#: doc/classes/Image.xml:498
+#: doc/classes/Image.xml:499
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -27816,7 +27911,7 @@ msgid ""
"algorithm that DXT5 uses for the alpha channel."
msgstr ""
-#: doc/classes/Image.xml:501
+#: doc/classes/Image.xml:502
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned normalized "
@@ -27825,21 +27920,21 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:505
+#: doc/classes/Image.xml:506
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with signed floating-point "
"RGB components."
msgstr ""
-#: doc/classes/Image.xml:508
+#: doc/classes/Image.xml:509
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned floating-point "
"RGB components."
msgstr ""
-#: doc/classes/Image.xml:511
+#: doc/classes/Image.xml:512
msgid ""
"Texture format used on PowerVR-supported mobile platforms, uses 2-bit color "
"depth with no alpha. More information can be found [url=https://en.wikipedia."
@@ -27848,25 +27943,25 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:515
+#: doc/classes/Image.xml:516
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with an "
"alpha component."
msgstr ""
-#: doc/classes/Image.xml:518
+#: doc/classes/Image.xml:519
msgid ""
"Similar to [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with 4-"
"bit color depth and no alpha."
msgstr ""
-#: doc/classes/Image.xml:521
+#: doc/classes/Image.xml:522
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC4[/url], but with an "
"alpha component."
msgstr ""
-#: doc/classes/Image.xml:524
+#: doc/classes/Image.xml:525
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC1]Ericsson Texture Compression format 1[/"
@@ -27874,7 +27969,7 @@ msgid ""
"standard. This format cannot store an alpha channel."
msgstr ""
-#: doc/classes/Image.xml:527
+#: doc/classes/Image.xml:528
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27882,7 +27977,7 @@ msgid ""
"unsigned data."
msgstr ""
-#: doc/classes/Image.xml:530
+#: doc/classes/Image.xml:531
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27890,7 +27985,7 @@ msgid ""
"channel of signed data."
msgstr ""
-#: doc/classes/Image.xml:533
+#: doc/classes/Image.xml:534
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27898,7 +27993,7 @@ msgid ""
"of unsigned data."
msgstr ""
-#: doc/classes/Image.xml:536
+#: doc/classes/Image.xml:537
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27906,7 +28001,7 @@ msgid ""
"channels of signed data."
msgstr ""
-#: doc/classes/Image.xml:539
+#: doc/classes/Image.xml:540
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27916,7 +28011,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:543
+#: doc/classes/Image.xml:544
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27926,7 +28021,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:547
+#: doc/classes/Image.xml:548
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27937,31 +28032,31 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:551
+#: doc/classes/Image.xml:552
msgid "Represents the size of the [enum Format] enum."
msgstr ""
-#: doc/classes/Image.xml:554
+#: doc/classes/Image.xml:555
msgid ""
"Performs nearest-neighbor interpolation. If the image is resized, it will be "
"pixelated."
msgstr ""
-#: doc/classes/Image.xml:557
+#: doc/classes/Image.xml:558
msgid ""
"Performs bilinear interpolation. If the image is resized, it will be blurry. "
"This mode is faster than [constant INTERPOLATE_CUBIC], but it results in "
"lower quality."
msgstr ""
-#: doc/classes/Image.xml:560
+#: doc/classes/Image.xml:561
msgid ""
"Performs cubic interpolation. If the image is resized, it will be blurry. "
"This mode often gives better results compared to [constant "
"INTERPOLATE_BILINEAR], at the cost of being slower."
msgstr ""
-#: doc/classes/Image.xml:563
+#: doc/classes/Image.xml:564
msgid ""
"Performs bilinear separately on the two most-suited mipmap levels, then "
"linearly interpolates between them.\n"
@@ -27976,55 +28071,55 @@ msgid ""
"a new set will be generated for the resulting image."
msgstr ""
-#: doc/classes/Image.xml:570
+#: doc/classes/Image.xml:571
msgid ""
"Performs Lanczos interpolation. This is the slowest image resizing mode, but "
"it typically gives the best results, especially when downscalng images."
msgstr ""
-#: doc/classes/Image.xml:573
+#: doc/classes/Image.xml:574
msgid "Image does not have alpha."
msgstr ""
-#: doc/classes/Image.xml:576
+#: doc/classes/Image.xml:577
msgid "Image stores alpha in a single bit."
msgstr ""
-#: doc/classes/Image.xml:579
+#: doc/classes/Image.xml:580
msgid "Image uses alpha."
msgstr ""
-#: doc/classes/Image.xml:582
+#: doc/classes/Image.xml:583
msgid "Use S3TC compression."
msgstr ""
-#: doc/classes/Image.xml:585
+#: doc/classes/Image.xml:586
msgid "Use PVRTC2 compression."
msgstr ""
-#: doc/classes/Image.xml:588
+#: doc/classes/Image.xml:589
msgid "Use PVRTC4 compression."
msgstr ""
-#: doc/classes/Image.xml:591
+#: doc/classes/Image.xml:592
msgid "Use ETC compression."
msgstr ""
-#: doc/classes/Image.xml:594
+#: doc/classes/Image.xml:595
msgid "Use ETC2 compression."
msgstr ""
-#: doc/classes/Image.xml:597
+#: doc/classes/Image.xml:598
msgid ""
"Source texture (before compression) is a regular texture. Default for all "
"textures."
msgstr ""
-#: doc/classes/Image.xml:600
+#: doc/classes/Image.xml:601
msgid "Source texture (before compression) is in sRGB space."
msgstr ""
-#: doc/classes/Image.xml:603
+#: doc/classes/Image.xml:604
msgid ""
"Source texture (before compression) is a normal texture (e.g. it can be "
"compressed into two channels)."
@@ -28248,6 +28343,17 @@ msgstr ""
#: doc/classes/Input.xml:43
msgid ""
+"Sends all input events which are in the current buffer to the game loop. "
+"These events may have been buffered as a result of accumulated input "
+"([method set_use_accumulated_input]) or agile input flushing ([member "
+"ProjectSettings.input_devices/buffering/agile_event_flushing]).\n"
+"The engine will already do this itself at key execution points (at least "
+"once per frame). However, this can be useful in advanced cases where you "
+"want precise control over the timing of event handling."
+msgstr ""
+
+#: doc/classes/Input.xml:50
+msgid ""
"Returns the acceleration of the device's accelerometer sensor, if the device "
"has one. Otherwise, the method returns [constant Vector3.ZERO].\n"
"Note this method returns an empty [Vector3] when running from the editor "
@@ -28259,7 +28365,7 @@ msgid ""
"the Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:53
+#: doc/classes/Input.xml:60
msgid ""
"Returns a value between 0 and 1 representing the raw intensity of the given "
"action, ignoring the action's deadzone. In most cases, you should use "
@@ -28269,7 +28375,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:62
+#: doc/classes/Input.xml:69
msgid ""
"Returns a value between 0 and 1 representing the intensity of the given "
"action. In a joypad, for example, the further away the axis (analog sticks "
@@ -28281,7 +28387,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:71
+#: doc/classes/Input.xml:78
msgid ""
"Get axis input by specifying two actions, one negative and one positive.\n"
"This is a shorthand for writing [code]Input."
@@ -28289,17 +28395,17 @@ msgid ""
"get_action_strength(\"negative_action\")[/code]."
msgstr ""
-#: doc/classes/Input.xml:78
+#: doc/classes/Input.xml:85
msgid ""
"Returns an [Array] containing the device IDs of all currently connected "
"joypads."
msgstr ""
-#: doc/classes/Input.xml:84
+#: doc/classes/Input.xml:91
msgid "Returns the currently assigned cursor shape (see [enum CursorShape])."
msgstr ""
-#: doc/classes/Input.xml:90
+#: doc/classes/Input.xml:97
msgid ""
"Returns the gravity of the device's accelerometer sensor, if the device has "
"one. Otherwise, the method returns [constant Vector3.ZERO].\n"
@@ -28309,7 +28415,7 @@ msgid ""
"Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:97
+#: doc/classes/Input.xml:104
msgid ""
"Returns the rotation rate in rad/s around a device's X, Y, and Z axes of the "
"gyroscope sensor, if the device has one. Otherwise, the method returns "
@@ -28318,53 +28424,53 @@ msgid ""
"it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:106
+#: doc/classes/Input.xml:113
msgid ""
"Returns the current value of the joypad axis at given index (see [enum "
"JoystickList])."
msgstr ""
-#: doc/classes/Input.xml:113
+#: doc/classes/Input.xml:120
msgid "Returns the index of the provided axis name."
msgstr ""
-#: doc/classes/Input.xml:120
+#: doc/classes/Input.xml:127
msgid ""
"Receives a [enum JoystickList] axis and returns its equivalent name as a "
"string."
msgstr ""
-#: doc/classes/Input.xml:127
+#: doc/classes/Input.xml:134
msgid "Returns the index of the provided button name."
msgstr ""
-#: doc/classes/Input.xml:134
+#: doc/classes/Input.xml:141
msgid ""
"Receives a gamepad button from [enum JoystickList] and returns its "
"equivalent name as a string."
msgstr ""
-#: doc/classes/Input.xml:141
+#: doc/classes/Input.xml:148
msgid ""
"Returns a SDL2-compatible device GUID on platforms that use gamepad "
"remapping. Returns [code]\"Default Gamepad\"[/code] otherwise."
msgstr ""
-#: doc/classes/Input.xml:148
+#: doc/classes/Input.xml:155
msgid "Returns the name of the joypad at the specified device index."
msgstr ""
-#: doc/classes/Input.xml:155
+#: doc/classes/Input.xml:162
msgid "Returns the duration of the current vibration effect in seconds."
msgstr ""
-#: doc/classes/Input.xml:162
+#: doc/classes/Input.xml:169
msgid ""
"Returns the strength of the joypad vibration: x is the strength of the weak "
"motor, and y is the strength of the strong motor."
msgstr ""
-#: doc/classes/Input.xml:168
+#: doc/classes/Input.xml:175
msgid ""
"Returns the mouse speed for the last time the cursor was moved, and this "
"until the next frame where the mouse moves. This means that even if the "
@@ -28372,7 +28478,7 @@ msgid ""
"motion."
msgstr ""
-#: doc/classes/Input.xml:174
+#: doc/classes/Input.xml:181
msgid ""
"Returns the magnetic field strength in micro-Tesla for all axes of the "
"device's magnetometer sensor, if the device has one. Otherwise, the method "
@@ -28381,17 +28487,17 @@ msgid ""
"platforms, it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:181
+#: doc/classes/Input.xml:188
msgid ""
"Returns mouse buttons as a bitmask. If multiple mouse buttons are pressed at "
"the same time, the bits are added together."
msgstr ""
-#: doc/classes/Input.xml:187
+#: doc/classes/Input.xml:194
msgid "Returns the mouse mode. See the constants for more information."
msgstr ""
-#: doc/classes/Input.xml:198
+#: doc/classes/Input.xml:205
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -28404,7 +28510,7 @@ msgid ""
"want (on the range of 0 to 1)."
msgstr ""
-#: doc/classes/Input.xml:208
+#: doc/classes/Input.xml:215
msgid ""
"Returns [code]true[/code] when the user starts pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user pressed down "
@@ -28416,7 +28522,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:218
+#: doc/classes/Input.xml:225
msgid ""
"Returns [code]true[/code] when the user stops pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user released the "
@@ -28426,7 +28532,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:227
+#: doc/classes/Input.xml:234
msgid ""
"Returns [code]true[/code] if you are pressing the action event. Note that if "
"an action has multiple buttons assigned and more than one of them is "
@@ -28437,13 +28543,13 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:236
+#: doc/classes/Input.xml:243
msgid ""
"Returns [code]true[/code] if you are pressing the joypad button (see [enum "
"JoystickList])."
msgstr ""
-#: doc/classes/Input.xml:243
+#: doc/classes/Input.xml:250
msgid ""
"Returns [code]true[/code] if the system knows the specified device. This "
"means that it sets all button and axis indices exactly as defined in [enum "
@@ -28451,19 +28557,19 @@ msgid ""
"but you can still retrieve events from them."
msgstr ""
-#: doc/classes/Input.xml:250
+#: doc/classes/Input.xml:257
msgid ""
"Returns [code]true[/code] if you are pressing the key. You can pass a [enum "
"KeyList] constant."
msgstr ""
-#: doc/classes/Input.xml:257
+#: doc/classes/Input.xml:264
msgid ""
"Returns [code]true[/code] if you are pressing the mouse button specified "
"with [enum ButtonList]."
msgstr ""
-#: doc/classes/Input.xml:267
+#: doc/classes/Input.xml:274
msgid ""
"Notifies the [Input] singleton that a connection has changed, to update the "
"state for the [code]device[/code] index.\n"
@@ -28472,7 +28578,7 @@ msgid ""
"triggered internally."
msgstr ""
-#: doc/classes/Input.xml:275
+#: doc/classes/Input.xml:282
msgid ""
"Feeds an [InputEvent] to the game. Can be used to artificially trigger input "
"events from code. Also generates [method Node._input] calls.\n"
@@ -28485,12 +28591,21 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Input.xml:289
+#: doc/classes/Input.xml:296
msgid ""
"Removes all mappings from the internal database that match the given GUID."
msgstr ""
-#: doc/classes/Input.xml:298
+#: doc/classes/Input.xml:303
+msgid ""
+"Sets the acceleration value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:313
msgid ""
"Sets a custom mouse cursor image, which is only visible inside the game "
"window. The hotspot can also be specified. Passing [code]null[/code] to the "
@@ -28505,7 +28620,7 @@ msgid ""
"compression mode can't be used for custom cursors."
msgstr ""
-#: doc/classes/Input.xml:309
+#: doc/classes/Input.xml:324
msgid ""
"Sets the default cursor shape to be used in the viewport instead of "
"[constant CURSOR_ARROW].\n"
@@ -28515,11 +28630,38 @@ msgid ""
"cursor immediately."
msgstr ""
-#: doc/classes/Input.xml:318
+#: doc/classes/Input.xml:333
+msgid ""
+"Sets the gravity value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:341
+msgid ""
+"Sets the value of the rotation rate of the gyroscope sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:349
+msgid ""
+"Sets the value of the magnetic field of the magnetometer sensor. Can be used "
+"for debugging on devices without a hardware sensor, for example in an editor "
+"on a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:357
msgid "Sets the mouse mode. See the constants for more information."
msgstr ""
-#: doc/classes/Input.xml:325
+#: doc/classes/Input.xml:364
msgid ""
"Enables or disables the accumulation of similar input events sent by the "
"operating system. When input accumulation is enabled, all input events "
@@ -28533,7 +28675,7 @@ msgid ""
"results that closely follow the actual input."
msgstr ""
-#: doc/classes/Input.xml:336
+#: doc/classes/Input.xml:375
msgid ""
"Starts to vibrate the joypad. Joypads usually come with two rumble motors, a "
"strong and a weak one. [code]weak_magnitude[/code] is the strength of the "
@@ -28546,34 +28688,34 @@ msgid ""
"few seconds."
msgstr ""
-#: doc/classes/Input.xml:344
+#: doc/classes/Input.xml:383
msgid "Stops the vibration of the joypad."
msgstr ""
-#: doc/classes/Input.xml:351
+#: doc/classes/Input.xml:390
msgid ""
"Vibrate Android and iOS devices.\n"
"[b]Note:[/b] It needs [code]VIBRATE[/code] permission for Android at export "
"settings. iOS does not support duration."
msgstr ""
-#: doc/classes/Input.xml:359
+#: doc/classes/Input.xml:398
msgid "Sets the mouse position to the specified vector."
msgstr ""
-#: doc/classes/Input.xml:368
+#: doc/classes/Input.xml:407
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
-#: doc/classes/Input.xml:374
+#: doc/classes/Input.xml:413
msgid "Makes the mouse cursor visible if it is hidden."
msgstr ""
-#: doc/classes/Input.xml:377
+#: doc/classes/Input.xml:416
msgid "Makes the mouse cursor hidden if it is visible."
msgstr ""
-#: doc/classes/Input.xml:380
+#: doc/classes/Input.xml:419
msgid ""
"Captures the mouse. The mouse will be hidden and its position locked at the "
"center of the screen.\n"
@@ -28581,83 +28723,83 @@ msgid ""
"need to use [member InputEventMouseMotion.relative]."
msgstr ""
-#: doc/classes/Input.xml:384
+#: doc/classes/Input.xml:423
msgid "Makes the mouse cursor visible but confines it to the game window."
msgstr ""
-#: doc/classes/Input.xml:387
+#: doc/classes/Input.xml:426
msgid "Arrow cursor. Standard, default pointing cursor."
msgstr ""
-#: doc/classes/Input.xml:390
+#: doc/classes/Input.xml:429
msgid ""
"I-beam cursor. Usually used to show where the text cursor will appear when "
"the mouse is clicked."
msgstr ""
-#: doc/classes/Input.xml:393
+#: doc/classes/Input.xml:432
msgid ""
"Pointing hand cursor. Usually used to indicate the pointer is over a link or "
"other interactable item."
msgstr ""
-#: doc/classes/Input.xml:396
+#: doc/classes/Input.xml:435
msgid ""
"Cross cursor. Typically appears over regions in which a drawing operation "
"can be performed or for selections."
msgstr ""
-#: doc/classes/Input.xml:399
+#: doc/classes/Input.xml:438
msgid ""
"Wait cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application is still usable during the "
"operation."
msgstr ""
-#: doc/classes/Input.xml:402
+#: doc/classes/Input.xml:441
msgid ""
"Busy cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application isn't usable during the "
"operation (e.g. something is blocking its main thread)."
msgstr ""
-#: doc/classes/Input.xml:405
+#: doc/classes/Input.xml:444
msgid "Drag cursor. Usually displayed when dragging something."
msgstr ""
-#: doc/classes/Input.xml:408
+#: doc/classes/Input.xml:447
msgid ""
"Can drop cursor. Usually displayed when dragging something to indicate that "
"it can be dropped at the current position."
msgstr ""
-#: doc/classes/Input.xml:411
+#: doc/classes/Input.xml:450
msgid ""
"Forbidden cursor. Indicates that the current action is forbidden (for "
"example, when dragging something) or that the control at a position is "
"disabled."
msgstr ""
-#: doc/classes/Input.xml:414
+#: doc/classes/Input.xml:453
msgid ""
"Vertical resize mouse cursor. A double-headed vertical arrow. It tells the "
"user they can resize the window or the panel vertically."
msgstr ""
-#: doc/classes/Input.xml:417
+#: doc/classes/Input.xml:456
msgid ""
"Horizontal resize mouse cursor. A double-headed horizontal arrow. It tells "
"the user they can resize the window or the panel horizontally."
msgstr ""
-#: doc/classes/Input.xml:420
+#: doc/classes/Input.xml:459
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the bottom left to the top right. It tells the user they can resize the "
"window or the panel both horizontally and vertically."
msgstr ""
-#: doc/classes/Input.xml:423
+#: doc/classes/Input.xml:462
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the top left to the bottom right, the opposite of [constant "
@@ -28665,23 +28807,23 @@ msgid ""
"both horizontally and vertically."
msgstr ""
-#: doc/classes/Input.xml:426
+#: doc/classes/Input.xml:465
msgid "Move cursor. Indicates that something can be moved."
msgstr ""
-#: doc/classes/Input.xml:429
+#: doc/classes/Input.xml:468
msgid ""
"Vertical split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_VSIZE]."
msgstr ""
-#: doc/classes/Input.xml:432
+#: doc/classes/Input.xml:471
msgid ""
"Horizontal split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_HSIZE]."
msgstr ""
-#: doc/classes/Input.xml:435
+#: doc/classes/Input.xml:474
msgid "Help cursor. Usually a question mark."
msgstr ""
@@ -29097,7 +29239,9 @@ msgid "The drag position."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -30409,7 +30553,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30474,22 +30619,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -30504,7 +30651,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -30512,19 +30659,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -30595,7 +30742,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30653,7 +30801,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -31938,14 +32088,21 @@ msgid "Default text [Color] of the [LinkButton]."
msgstr ""
#: doc/classes/LinkButton.xml:46
-msgid "Text [Color] used when the [LinkButton] is being hovered."
+msgid ""
+"Text [Color] used when the [LinkButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/LinkButton.xml:49
-msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgid "Text [Color] used when the [LinkButton] is being hovered."
msgstr ""
#: doc/classes/LinkButton.xml:52
+msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:55
msgid "The vertical space between the baseline of text and the underline."
msgstr ""
@@ -32438,26 +32595,33 @@ msgid "Text [Color] used when the [MenuButton] is disabled."
msgstr ""
#: doc/classes/MenuButton.xml:64
-msgid "Text [Color] used when the [MenuButton] is being hovered."
+msgid ""
+"Text [Color] used when the [MenuButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/MenuButton.xml:67
-msgid "Text [Color] used when the [MenuButton] is being pressed."
+msgid "Text [Color] used when the [MenuButton] is being hovered."
msgstr ""
#: doc/classes/MenuButton.xml:70
-msgid "[StyleBox] used when the [MenuButton] is being hovered."
+msgid "Text [Color] used when the [MenuButton] is being pressed."
msgstr ""
#: doc/classes/MenuButton.xml:73
-msgid "The horizontal space between [MenuButton]'s icon and text."
+msgid "[StyleBox] used when the [MenuButton] is being hovered."
msgstr ""
#: doc/classes/MenuButton.xml:76
-msgid "Default [StyleBox] for the [MenuButton]."
+msgid "The horizontal space between [MenuButton]'s icon and text."
msgstr ""
#: doc/classes/MenuButton.xml:79
+msgid "Default [StyleBox] for the [MenuButton]."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:82
msgid "[StyleBox] used when the [MenuButton] is being pressed."
msgstr ""
@@ -34182,7 +34346,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -37066,26 +37230,33 @@ msgid "Text [Color] used when the [OptionButton] is disabled."
msgstr ""
#: doc/classes/OptionButton.xml:212
-msgid "Text [Color] used when the [OptionButton] is being hovered."
+msgid ""
+"Text [Color] used when the [OptionButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/OptionButton.xml:215
-msgid "Text [Color] used when the [OptionButton] is being pressed."
+msgid "Text [Color] used when the [OptionButton] is being hovered."
msgstr ""
#: doc/classes/OptionButton.xml:218
-msgid "[StyleBox] used when the [OptionButton] is being hovered."
+msgid "Text [Color] used when the [OptionButton] is being pressed."
msgstr ""
#: doc/classes/OptionButton.xml:221
-msgid "The horizontal space between [OptionButton]'s icon and text."
+msgid "[StyleBox] used when the [OptionButton] is being hovered."
msgstr ""
#: doc/classes/OptionButton.xml:224
-msgid "Default [StyleBox] for the [OptionButton]."
+msgid "The horizontal space between [OptionButton]'s icon and text."
msgstr ""
#: doc/classes/OptionButton.xml:227
+msgid "Default [StyleBox] for the [OptionButton]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:230
msgid "[StyleBox] used when the [OptionButton] is being pressed."
msgstr ""
@@ -37488,7 +37659,7 @@ msgstr ""
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -37518,14 +37689,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -37535,7 +37706,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -40020,17 +40191,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -40048,11 +40245,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -40247,7 +40444,9 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-msgid "Returns the [Physics2DDirectBodyState] of the body."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
@@ -41049,6 +41248,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -41066,7 +41283,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -41180,7 +41397,9 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-msgid "Returns the [PhysicsDirectBodyState] of the body."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/PhysicsServer.xml:370
@@ -42159,27 +42378,27 @@ msgstr ""
msgid "Removes an element from the array by index."
msgstr ""
-#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolColorArray.xml:66
-#: doc/classes/PoolIntArray.xml:67 doc/classes/PoolRealArray.xml:67
-#: doc/classes/PoolStringArray.xml:74 doc/classes/PoolVector2Array.xml:67
-#: doc/classes/PoolVector3Array.xml:66
+#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolIntArray.xml:67
+#: doc/classes/PoolRealArray.xml:67
msgid ""
"Sets the size of the array. If the array is grown, reserves elements at the "
"end of the array. If the array is shrunk, truncates the array to the new "
-"size."
+"size.\n"
+"[b]Note:[/b] Added elements are not automatically initialized to 0 and will "
+"contain garbage, i.e. indeterminate values."
msgstr ""
-#: doc/classes/PoolByteArray.xml:121
+#: doc/classes/PoolByteArray.xml:122
msgid "Changes the byte at the given index."
msgstr ""
-#: doc/classes/PoolByteArray.xml:127 doc/classes/PoolColorArray.xml:79
-#: doc/classes/PoolRealArray.xml:80 doc/classes/PoolStringArray.xml:87
+#: doc/classes/PoolByteArray.xml:128 doc/classes/PoolColorArray.xml:79
+#: doc/classes/PoolRealArray.xml:81 doc/classes/PoolStringArray.xml:87
#: doc/classes/PoolVector2Array.xml:80 doc/classes/PoolVector3Array.xml:79
msgid "Returns the size of the array."
msgstr ""
-#: doc/classes/PoolByteArray.xml:135
+#: doc/classes/PoolByteArray.xml:136
msgid ""
"Returns the slice of the [PoolByteArray] between indices (inclusive) as a "
"new [PoolByteArray]. Any negative index is considered to be from the end of "
@@ -42211,6 +42430,14 @@ msgstr ""
msgid "Appends a value to the array."
msgstr ""
+#: doc/classes/PoolColorArray.xml:66 doc/classes/PoolStringArray.xml:74
+#: doc/classes/PoolVector2Array.xml:67 doc/classes/PoolVector3Array.xml:66
+msgid ""
+"Sets the size of the array. If the array is grown, reserves elements at the "
+"end of the array. If the array is shrunk, truncates the array to the new "
+"size."
+msgstr ""
+
#: doc/classes/PoolColorArray.xml:73
msgid "Changes the [Color] at the given index."
msgstr ""
@@ -42247,11 +42474,11 @@ msgid ""
"valid, or at the end of the array ([code]idx == size()[/code])."
msgstr ""
-#: doc/classes/PoolIntArray.xml:74
+#: doc/classes/PoolIntArray.xml:75
msgid "Changes the int at the given index."
msgstr ""
-#: doc/classes/PoolIntArray.xml:80
+#: doc/classes/PoolIntArray.xml:81
msgid "Returns the array size."
msgstr ""
@@ -42283,7 +42510,7 @@ msgstr ""
msgid "Appends a [PoolRealArray] at the end of this array."
msgstr ""
-#: doc/classes/PoolRealArray.xml:74
+#: doc/classes/PoolRealArray.xml:75
msgid "Changes the float at the given index."
msgstr ""
@@ -43549,18 +43776,6 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:204
msgid ""
-"The project data directory is used for storing project-specific data "
-"(metadata, shader cache, etc.).\n"
-"[b]Note:[/b] Restart the application after changing this setting.\n"
-"[b]Note:[/b] Changing this value can help on platforms or with third-party "
-"tools where specific directory patterns are disallowed. Only modify this "
-"setting if you know that your environment requires it, as changing the "
-"default can impact compatibility with some external tools or plugins which "
-"expect the default [code].import[/code] folder."
-msgstr ""
-
-#: doc/classes/ProjectSettings.xml:209
-msgid ""
"Specifies a file to override project settings. For example: [code]user://"
"custom_settings.cfg[/code]. See \"Overriding\" in the [ProjectSettings] "
"class description at the top for more information.\n"
@@ -43568,7 +43783,7 @@ msgid ""
"code] will still be read to override the project settings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:213
+#: doc/classes/ProjectSettings.xml:208
msgid ""
"If [code]true[/code], the project will save user data to its own user "
"directory (see [member application/config/custom_user_dir_name]). This "
@@ -43578,13 +43793,28 @@ msgid ""
"user data directory)/Godot/app_userdata/(project name)[/code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:216
+#: doc/classes/ProjectSettings.xml:211
+msgid ""
+"If [code]true[/code], the project will use a hidden directory ([code]."
+"import[/code]) for storing project-specific data (metadata, shader cache, "
+"etc.).\n"
+"If [code]false[/code], a non-hidden directory ([code]import[/code]) will be "
+"used instead.\n"
+"[b]Note:[/b] Restart the application after changing this setting.\n"
+"[b]Note:[/b] Changing this value can help on platforms or with third-party "
+"tools where hidden directory patterns are disallowed. Only modify this "
+"setting if you know that your environment requires it, as changing the "
+"default can impact compatibility with some external tools or plugins which "
+"expect the default [code].import[/code] folder."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:217
msgid ""
"Icon set in [code].ico[/code] format used on Windows to set the game's icon. "
"This is done automatically on start by calling [method OS.set_native_icon]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:219
+#: doc/classes/ProjectSettings.xml:220
msgid ""
"Time samples for frame deltas are subject to random variation introduced by "
"the platform, even when frames are displayed at regular intervals thanks to "
@@ -43598,14 +43828,14 @@ msgid ""
"adequate to render frames at the refresh rate."
msgstr ""
-#: doc/classes/ProjectSettings.xml:224
+#: doc/classes/ProjectSettings.xml:225
msgid ""
"[b]Experimental.[/b] Shifts the measurement of delta time for each frame to "
"just after the drawing has taken place. This may lead to more consistent "
"deltas and a reduction in frame stutters."
msgstr ""
-#: doc/classes/ProjectSettings.xml:227
+#: doc/classes/ProjectSettings.xml:228
msgid ""
"If [code]true[/code], disables printing to standard error. If [code]true[/"
"code], this also hides error and warning messages printed by [method "
@@ -43614,7 +43844,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:231
+#: doc/classes/ProjectSettings.xml:232
msgid ""
"If [code]true[/code], disables printing to standard output. This is "
"equivalent to starting the editor or project with the [code]--quiet[/code] "
@@ -43622,7 +43852,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:235
+#: doc/classes/ProjectSettings.xml:236
msgid ""
"If [code]true[/code], flushes the standard output stream every time a line "
"is printed. This affects both terminal logging and file logging.\n"
@@ -43638,20 +43868,20 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:241
+#: doc/classes/ProjectSettings.xml:242
msgid ""
"Debug build override for [member application/run/flush_stdout_on_print], as "
"performance is less important during debugging.\n"
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:245
+#: doc/classes/ProjectSettings.xml:246
msgid ""
"Forces a delay between frames in the main loop (in milliseconds). This may "
"be useful if you plan to disable vertical synchronization."
msgstr ""
-#: doc/classes/ProjectSettings.xml:248
+#: doc/classes/ProjectSettings.xml:249
msgid ""
"If [code]true[/code], enables low-processor usage mode. This setting only "
"works on desktop platforms. The screen is not redrawn if nothing changes "
@@ -43659,75 +43889,81 @@ msgid ""
"useless (and can hurt performance) in most games."
msgstr ""
-#: doc/classes/ProjectSettings.xml:251
+#: doc/classes/ProjectSettings.xml:252
msgid ""
"Amount of sleeping between frames when the low-processor usage mode is "
"enabled (in microseconds). Higher values will result in lower CPU usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:254
+#: doc/classes/ProjectSettings.xml:255
msgid "Path to the main scene file that will be loaded when the project runs."
msgstr ""
-#: doc/classes/ProjectSettings.xml:257 doc/classes/ProjectSettings.xml:260
+#: doc/classes/ProjectSettings.xml:258 doc/classes/ProjectSettings.xml:261
msgid ""
"Audio buses will disable automatically when sound goes below a given dB "
"threshold for a given time. This saves CPU as effects assigned to that bus "
"will no longer do any processing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:263
+#: doc/classes/ProjectSettings.xml:264
msgid ""
"Default [AudioBusLayout] resource file to use in the project, unless "
"overridden by the scene."
msgstr ""
-#: doc/classes/ProjectSettings.xml:266
+#: doc/classes/ProjectSettings.xml:267
msgid ""
"Specifies the audio driver to use. This setting is platform-dependent as "
"each platform supports different audio drivers. If left empty, the default "
"audio driver will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:269
+#: doc/classes/ProjectSettings.xml:270
msgid ""
"If [code]true[/code], microphone input will be allowed. This requires "
"appropriate permissions to be set when exporting to Android or iOS."
msgstr ""
-#: doc/classes/ProjectSettings.xml:272
+#: doc/classes/ProjectSettings.xml:273
msgid ""
"The mixing rate used for audio (in Hz). In general, it's better to not touch "
"this and leave it to the host operating system."
msgstr ""
-#: doc/classes/ProjectSettings.xml:275
+#: doc/classes/ProjectSettings.xml:276
msgid ""
"Safer override for [member audio/mix_rate] in the Web platform. Here "
"[code]0[/code] means \"let the browser choose\" (since some browsers do not "
"like forcing the mix rate)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:278
+#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:281
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:284
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:287
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43737,7 +43973,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:290
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43747,27 +43983,27 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:293
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:296
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
-#: doc/classes/ProjectSettings.xml:299
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:302
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -43775,81 +44011,81 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:305
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:308
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:311
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:314
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:317
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr ""
-#: doc/classes/ProjectSettings.xml:320
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:323
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:326
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:329
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:332
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:335
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:338
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:341
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -43857,109 +44093,109 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:344
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:347
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:350
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:353
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:356
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:359
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:362
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:365
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:368
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:371
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:374
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:377
+#: doc/classes/ProjectSettings.xml:380
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:380
+#: doc/classes/ProjectSettings.xml:383
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:383
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:386
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:389
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:392
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:395
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:398
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -43970,91 +44206,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:403
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:406
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:409
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:412
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:415
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:418
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:421
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:424
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:427
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:430
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:433
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:436
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:439
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr ""
-#: doc/classes/ProjectSettings.xml:442
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:445
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:448
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:451
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -44063,13 +44299,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:455
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:458
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -44079,7 +44315,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:463
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -44087,19 +44323,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:468
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:472
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:476
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -44113,45 +44349,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:481
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:484
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:488
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:491
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:494
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:497
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:500
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -44160,7 +44396,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:503
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -44171,7 +44407,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:507
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -44187,14 +44423,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:515
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:518
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -44202,49 +44438,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:521
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:524
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:529
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:532
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:535
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:538
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:541
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:544
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:547
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -44253,7 +44489,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:551
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44261,7 +44497,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:555
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44269,7 +44505,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:559
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44279,7 +44515,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:563
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -44288,7 +44524,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:567
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -44297,7 +44533,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:571
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44307,7 +44543,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:575
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44315,7 +44551,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:579
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -44325,7 +44561,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:583
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -44335,7 +44571,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:587
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44343,7 +44579,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:591
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -44352,7 +44588,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:595
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44360,7 +44596,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:599
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -44372,477 +44608,477 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:605
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:608
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:611
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:614
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:617
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:620
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:623
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:626
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:629
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:632
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:635
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:638
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:641
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:644
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:647
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:650
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:653
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:656
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:659
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:662
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:665
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:668
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:671
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:674
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:677
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:680
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:683
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:686
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:689
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:692
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:695
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:698
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:701
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:704
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:707
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:710
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:713
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:716
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:719
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:722
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:725
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:728
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:731
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:734
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:737
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:740
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:743
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:746
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:749
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:752
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:755
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:758
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:761
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:764
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:767
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:770
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:773
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:776
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:779
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:782
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:785
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:788
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:791
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:794
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:797
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:800
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:803
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:806
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:809
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:812
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:815
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:818
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:821
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:824
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:827
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:830
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:833
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:836
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:839
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:842
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:845
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:848
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:851
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:854
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:857
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:860
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:863
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:866
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:869
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:872
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:875
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:878
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:881
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr ""
-#: doc/classes/ProjectSettings.xml:884
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:887
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:890
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:893
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:896
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:899
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:902
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:905
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:908
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:911
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:914
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:917
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:920
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:923
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:926
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:929
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:932
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:935
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:938
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:941
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:946
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:949
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -44850,92 +45086,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:952
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:955
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:958
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:961
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:964
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:967
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:970
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:973
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:976
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:979
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:982
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:985
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:988
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:991
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:994
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:997
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1000
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1003
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -44945,33 +45181,33 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1007
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1010
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1013
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1017
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1021
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -44984,7 +45220,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1025
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -44996,7 +45232,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1033
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45008,7 +45244,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1041
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45021,7 +45257,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1045
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -45029,28 +45265,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1049
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1053
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1056
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1059
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -45060,25 +45296,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1063
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1066
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1069
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1072
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45091,7 +45327,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1076
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45103,7 +45339,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1084
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45115,7 +45351,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1092
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45128,13 +45364,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1096
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1099
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -45142,11 +45378,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1103
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1106
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -45160,7 +45396,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1112
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -45169,7 +45405,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1116
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -45185,7 +45421,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1121
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -45195,7 +45431,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1125
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45205,7 +45441,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1129
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -45216,7 +45452,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1133
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45226,7 +45462,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1137
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -45234,7 +45470,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1141
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -45245,7 +45481,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1145
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -45260,7 +45496,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1151
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -45269,13 +45505,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1156
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1159
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -45284,7 +45520,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1162
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -45294,7 +45530,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1165
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -45306,7 +45542,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1168
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -45316,24 +45552,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1171
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1174
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1177
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1180
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -45342,7 +45578,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1183
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -45350,7 +45586,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1186
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -45359,7 +45595,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1189
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -45369,7 +45605,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1193
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -45377,31 +45613,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1197
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1200
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1203
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1206
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1209
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -45409,7 +45645,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1212
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -45419,46 +45655,53 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1215
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1218
+#: doc/classes/ProjectSettings.xml:1221
+msgid ""
+"iOS specific override for [member rendering/gles2/compatibility/"
+"disable_half_float], due to poor support for half-float vertex compression "
+"on many devices."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1224
msgid ""
-"If [code]true[/code] and available on the target device, enables high "
-"floating point precision for all shader computations in GLES2.\n"
+"If [code]true[/code] and available on the target Android device, enables "
+"high floating point precision for all shader computations in GLES2.\n"
"[b]Warning:[/b] High floating point precision can be extremely slow on older "
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1225
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1228
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1231
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1234
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -45466,7 +45709,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1237
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -45476,7 +45719,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1240
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -45485,7 +45728,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1243
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -45494,20 +45737,20 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1246
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1249
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1252
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -45516,7 +45759,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1255
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -45524,7 +45767,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1258
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -45533,7 +45776,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -45543,20 +45786,20 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1267
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1274
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -45565,13 +45808,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -45581,46 +45824,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1293
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1296
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1299
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1302
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1305
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -45630,7 +45873,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -45642,7 +45885,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -45650,7 +45893,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1316
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -45658,7 +45901,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -45667,7 +45910,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1323
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -45681,7 +45924,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1328
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -45691,7 +45934,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1331
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -45700,7 +45943,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1334
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -45710,54 +45953,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1337
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1340
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1343
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1346
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1349
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1352
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1355
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1358
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -45768,61 +46011,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1365
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1368
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1371
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1374
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1377
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1380
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1383
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1386
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -45833,7 +46076,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -45842,26 +46085,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1393 doc/classes/ProjectSettings.xml:1396
#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1405
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1408
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1411
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -45872,20 +46115,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1418
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -45897,52 +46140,52 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1428
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1435
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1438
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1441
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1444
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1447
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1450
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1453
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -45950,7 +46193,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -45960,10 +46203,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -45972,10 +46215,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -45984,10 +46227,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -45996,10 +46239,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -46008,10 +46251,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -46675,40 +46918,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr ""
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -46716,14 +46973,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -49058,6 +49315,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -49075,7 +49348,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -49083,11 +49356,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -49097,19 +49370,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -54524,20 +54797,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -54548,28 +54826,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -54581,19 +54859,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
@@ -57379,26 +57657,33 @@ msgid "Text [Color] used when the [ToolButton] is disabled."
msgstr ""
#: doc/classes/ToolButton.xml:39
-msgid "Text [Color] used when the [ToolButton] is being hovered."
+msgid ""
+"Text [Color] used when the [ToolButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/ToolButton.xml:42
-msgid "Text [Color] used when the [ToolButton] is being pressed."
+msgid "Text [Color] used when the [ToolButton] is being hovered."
msgstr ""
#: doc/classes/ToolButton.xml:45
-msgid "[StyleBox] used when the [ToolButton] is being hovered."
+msgid "Text [Color] used when the [ToolButton] is being pressed."
msgstr ""
#: doc/classes/ToolButton.xml:48
-msgid "The horizontal space between [ToolButton]'s icon and text."
+msgid "[StyleBox] used when the [ToolButton] is being hovered."
msgstr ""
#: doc/classes/ToolButton.xml:51
-msgid "Default [StyleBox] for the [ToolButton]."
+msgid "The horizontal space between [ToolButton]'s icon and text."
msgstr ""
#: doc/classes/ToolButton.xml:54
+msgid "Default [StyleBox] for the [ToolButton]."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:57
msgid "[StyleBox] used when the [ToolButton] is being pressed."
msgstr ""
diff --git a/doc/translations/fr.po b/doc/translations/fr.po
index aaa417b657..843666c2c2 100644
--- a/doc/translations/fr.po
+++ b/doc/translations/fr.po
@@ -44,13 +44,16 @@
# Tim Krief <tim@timkrief.com>, 2021.
# Rémi Verschelde <akien@godotengine.org>, 2021.
# blfr <contact.blfr@gmail.com>, 2021.
+# Urbain <urbain.lantres@tutanota.com>, 2021.
+# syns <jpo.drt@gmail.com>, 2021.
+# Gallonigher <meduse1500@ovh.fr>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-10-15 09:31+0000\n"
-"Last-Translator: Rémi Verschelde <akien@godotengine.org>\n"
+"PO-Revision-Date: 2021-11-12 13:49+0000\n"
+"Last-Translator: Gallonigher <meduse1500@ovh.fr>\n"
"Language-Team: French <https://hosted.weblate.org/projects/godot-engine/"
"godot-class-reference/fr/>\n"
"Language: fr\n"
@@ -58,45 +61,45 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 4.9-dev\n"
+"X-Generator: Weblate 4.9.1-dev\n"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Description"
msgstr "Description"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Tutorials"
msgstr "Tutoriels"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Properties"
msgstr "Propriétés"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Methods"
msgstr "Méthodes"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Theme Properties"
msgstr "Propriétés du thème"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Signals"
msgstr "Signaux"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Enumerations"
msgstr "Énumérations"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Constants"
msgstr "Constantes"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Property Descriptions"
msgstr "Description des propriétés"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Method Descriptions"
msgstr "Descriptions des méthodes"
@@ -236,27 +239,27 @@ msgid ""
"a message with clarifying details\n"
"[/codeblock]"
msgstr ""
-"Vérifie que la [code]condition[/code] est vraie ([code]true[/code]). Si la "
+"Vérifie que la [code]condition[/code] est vraie [code]true[/code]. Si la "
"[code]condition[/code] est fausse ([code]false[/code]), une erreur est "
"générée. Si le programme est lancé via l'éditeur, son exécution sera aussi "
"interrompue jusqu'à ce que vous le redémarriez. Cela peut être utilisé comme "
"une alternative plus radicale à [method push_error] pour rapporter des "
"erreurs aux développeurs de projets ou utilisateurs de plugins.\n"
"[b]Note :[/b] Par souci de performance, le code inclus dans [method assert] "
-"n'est exécuté dans dans les builds de débogage, ou quand vous lancez votre "
-"jeu depuis l'éditeur. N'incluez pas de code qui modifie l'état du script "
-"dans un appel à [method assert]. Sinon, votre projet aura un fonctionnement "
-"différent une fois exporté en build de production ([i]release[/i]).\n"
+"n'est exécuté dans les builds de débogage, ou quand vous lancez votre jeu "
+"depuis l'éditeur. N'incluez pas de code qui modifie l'état du script dans un "
+"appel à [method assert]. Sinon, votre projet aura un fonctionnement "
+"différent une fois exporté en build de production release.\n"
"L'argument facultatif [code]message[/code], s'il est donné, est affiché en "
-"plus du message générique « [i]Assertion failed[/i] » (Échec de "
-"l'assertion). Vous pouvez l'utiliser pour fournir des détails "
-"supplémentaires sur la raison de l'échec de l'assertion.\n"
+"plus du message générique \"Assertion failed\" (Échec de l'assertion). Vous "
+"pouvez l'utiliser pour fournir des détails supplémentaires sur la raison de "
+"l'échec de l'assertion.\n"
"[codeblock]\n"
"# Imaginez que nous voulons une vitesse toujours comprise entre 0 et 20.\n"
"speed = -10\n"
"assert(speed < 20) # Vrai, le programme continue\n"
"assert(speed >= 0) # Faux, le programme s'interrompt\n"
-"assert(speed >= 0 && speed < 20) # Vous pouvez aussi combiner les deux "
+"assert(speed >= 0 and speed < 20) # Vous pouvez aussi combiner les deux "
"conditions en une seule vérification\n"
"assert(speed < 20, \"speed = %f, mais la limite de vitesse est 20\" % speed) "
"# Affiche un message avec de plus amples détails\n"
@@ -501,6 +504,24 @@ msgid ""
"See also [method smoothstep]. If you need to perform more advanced "
"transitions, use [Tween] or [AnimationPlayer]."
msgstr ""
+"Retourne une valeur \"assouplie\" de [code]x[/code] sur la base d'une "
+"fonction d'assouplissement définie avec [code]curve[/code]. Cette fonction "
+"d'assouplissement est basée sur un exposant. [code]curve[/code] peut être un "
+"nombre à virgule flottante, avec des valeurs spécifiques conduisant aux "
+"comportements suivants:\n"
+"[codeblock]\n"
+"- Inférieur à -1.0 (exclusif): Ease in-out\n"
+"- 1.0: Linéaire\n"
+"- Entre -1.0 et 0.0 (exclusif): Ease out-in\n"
+"- 0.0: Constante\n"
+"- Entre 0.0 à 1.0 (exclusif): Ease in\n"
+"- 1.0: Linéaire\n"
+"- Supérieur à 1.0 (exclusif): Ease out\n"
+"[/codeblock]\n"
+"[url=https ://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/"
+"ease_cheatsheet.png]ease() curve values cheatsheet[/url]\n"
+"Voir également [méthode smoothstep]. Si vous avez besoin de réaliser des "
+"transitions plus avancées, utilisez [Tween] ou [AnimationPlayer]."
#: modules/gdscript/doc_classes/@GDScript.xml:274
msgid ""
@@ -591,7 +612,7 @@ msgstr ""
" var x = 0.5 * i - 1.5\n"
" print(\"%4.1f %4.1f %4.1f\" % [x, fmod(x, 1.5), fposmod(x, 1.5)])\n"
"[/codeblock]\n"
-"Donne :\n"
+"Donne:\n"
"[codeblock]\n"
"-1.5 -0.0 0.0\n"
"-1.0 -1.0 0.5\n"
@@ -1153,7 +1174,7 @@ msgstr ""
"for i in range(-3, 4):\n"
" print(\"%2d %2d %2d\" % [i, i % 3, posmod(i, 3)])\n"
"[/codeblock]\n"
-"Donne :\n"
+"Donne:\n"
"[codeblock]\n"
"-3 0 0\n"
"-2 -2 1\n"
@@ -1221,6 +1242,17 @@ msgid ""
"distinguishes them from print messages used for debugging purposes, while "
"also displaying a stack trace when an error or warning is printed."
msgstr ""
+"Converti un argument ou plus en chaine de caractères de la meilleur manière "
+"possible et les affiches dans la console\n"
+"[codeblock]\n"
+"a = [1, 2, 3]\n"
+"print(\"a\", \"=\", a) # Affiche a=[1, 2, 3]\n"
+"[/codeblock]\n"
+"[b]Note : [/b] Pensez à utiliser [method push_error] et [method "
+"push_warning] pour afficher les messages d'erreur et d'avertissement au lieu "
+"de [method print]. Cela les distingue des messages d'impression utilisés à "
+"des fins de débogage, tout en affichant une trace de la pile lorsqu'une "
+"erreur ou un avertissement est affiché."
#: modules/gdscript/doc_classes/@GDScript.xml:702
msgid "Like [method print], but prints only when used in debug mode."
@@ -3518,6 +3550,8 @@ msgid ""
"A button on the right Oculus Touch controller, X button on the left "
"controller (also when used in OpenVR)."
msgstr ""
+"Bouton A sur le contrôleur Oculus Touch de droite, bouton X sur le "
+"contrôleur de gauche (également en cas d'utilisation dans OpenVR)."
#: doc/classes/@GlobalScope.xml:1061
msgid ""
@@ -3535,7 +3569,7 @@ msgstr ""
#: doc/classes/@GlobalScope.xml:1070
msgid "Gamepad button Select."
-msgstr ""
+msgstr "Bouton Select de la manette."
#: doc/classes/@GlobalScope.xml:1073
msgid "Gamepad button Start."
@@ -3543,19 +3577,19 @@ msgstr ""
#: doc/classes/@GlobalScope.xml:1076
msgid "Gamepad DPad up."
-msgstr ""
+msgstr "DPad haut de la manette."
#: doc/classes/@GlobalScope.xml:1079
msgid "Gamepad DPad down."
-msgstr ""
+msgstr "DPad bas de la manette."
#: doc/classes/@GlobalScope.xml:1082
msgid "Gamepad DPad left."
-msgstr ""
+msgstr "DPad gauche de la manette."
#: doc/classes/@GlobalScope.xml:1085
msgid "Gamepad DPad right."
-msgstr ""
+msgstr "DPad droite de la manette."
#: doc/classes/@GlobalScope.xml:1088
#, fuzzy
@@ -3564,7 +3598,7 @@ msgstr "Bouton guide du contrôleur de jeu SDL."
#: doc/classes/@GlobalScope.xml:1091
msgid "Gamepad SDL miscellaneous button."
-msgstr ""
+msgstr "Bouton divers de la manette SDL."
#: doc/classes/@GlobalScope.xml:1094
#, fuzzy
@@ -3603,7 +3637,7 @@ msgstr "Axe du déclencheur gauche du contrôleur de jeu."
#: doc/classes/@GlobalScope.xml:1115
msgid "Gamepad left stick click."
-msgstr ""
+msgstr "Clic du stick gauche de la manette."
#: doc/classes/@GlobalScope.xml:1118
#, fuzzy
@@ -3617,11 +3651,11 @@ msgstr "Axe du déclencheur gauche du contrôleur de jeu."
#: doc/classes/@GlobalScope.xml:1124
msgid "Gamepad right stick click."
-msgstr ""
+msgstr "Clic du stick droit de la manette."
#: doc/classes/@GlobalScope.xml:1127 doc/classes/@GlobalScope.xml:1160
msgid "Gamepad left stick horizontal axis."
-msgstr ""
+msgstr "Axe horizontal du stick gauche de la manette."
#: doc/classes/@GlobalScope.xml:1130 doc/classes/@GlobalScope.xml:1163
#, fuzzy
@@ -3630,7 +3664,7 @@ msgstr "Axe X de la manette gauche du contrôleur de jeu."
#: doc/classes/@GlobalScope.xml:1133 doc/classes/@GlobalScope.xml:1166
msgid "Gamepad right stick horizontal axis."
-msgstr ""
+msgstr "Axe horizontal du stick droite de la manette."
#: doc/classes/@GlobalScope.xml:1136 doc/classes/@GlobalScope.xml:1169
#, fuzzy
@@ -3639,11 +3673,11 @@ msgstr "Axe X de la manette droite du contrôleur de jeu."
#: doc/classes/@GlobalScope.xml:1139
msgid "Generic gamepad axis 4."
-msgstr ""
+msgstr "Axe 4 de la manette générique."
#: doc/classes/@GlobalScope.xml:1142
msgid "Generic gamepad axis 5."
-msgstr ""
+msgstr "Axe 5 de la manette générique."
#: doc/classes/@GlobalScope.xml:1145
#, fuzzy
@@ -3657,11 +3691,11 @@ msgstr "Axe du déclencheur gauche du contrôleur de jeu."
#: doc/classes/@GlobalScope.xml:1151
msgid "Generic gamepad axis 8."
-msgstr ""
+msgstr "Axe 8 de la manette générique."
#: doc/classes/@GlobalScope.xml:1154
msgid "Generic gamepad axis 9."
-msgstr ""
+msgstr "Axe 9 de la manette générique."
#: doc/classes/@GlobalScope.xml:1157
#, fuzzy
@@ -3670,11 +3704,11 @@ msgstr "Nombre maximal de passes de tirage prises en charge."
#: doc/classes/@GlobalScope.xml:1172
msgid "Gamepad left analog trigger."
-msgstr ""
+msgstr "Gâchette analogique gauche de la manette."
#: doc/classes/@GlobalScope.xml:1175
msgid "Gamepad right analog trigger."
-msgstr ""
+msgstr "Gâchette analogique droite de la manette."
#: doc/classes/@GlobalScope.xml:1178
#, fuzzy
@@ -4104,15 +4138,14 @@ msgstr ""
"boîte de dialogue de fichier apparaîtra pour choisir le chemin."
#: doc/classes/@GlobalScope.xml:1415
-#, fuzzy
msgid ""
"Hints that a property is an instance of a [Resource]-derived type, "
"optionally specified via the hint string (e.g. [code]\"Texture\"[/code]). "
"Editing it will show a popup menu of valid resource types to instantiate."
msgstr ""
"Indice que la propriété est une instance d'un type dérivé de [Resource], "
-"spécifie optionnellement via le texte de l'indice (ex: [code]\"Texture2D\"[/"
-"code]) En l'éditant un menu contextuel apparaitra avec les types de "
+"spécifie optionnellement via le texte de l'indice (e.g. [code]\"Texture2D\"[/"
+"code]) En l'éditant un menu contextuel apparaîtra avec les types de "
"ressources valides a instancier."
#: doc/classes/@GlobalScope.xml:1418
@@ -4526,22 +4559,31 @@ msgstr ""
"autre."
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
-msgstr "Retourne cette [AABB] élargie pour inclure un point donné."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
+msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr "Retourne le volume de l'[AABB]."
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr "Récupère la position des 8 extrémités de l'[AABB] dans l'espace."
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr "Retourne normalisé l'axe le plus long de l'[AABB]."
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
@@ -4549,15 +4591,15 @@ msgstr ""
"Retourne l'index de l'axe le plus long de l'AABB] (d'après les constantes de "
"[code]AXIS_*[/code] de [Vector3])."
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr "Retourne la longueur scalaire de l'axe le plus long de l'[AABB]."
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr "Retourne l'axe le plus court normalisé de l'[AABB]."
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
@@ -4565,11 +4607,11 @@ msgstr ""
"Retourne l'index de l'axe le plus court de l'[AABB] (d'après l'énumération "
"[Vector3]::AXIS*)."
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr "Retourne la longueur scalaire de l’axe le plus court de l’[AABB]."
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
@@ -4577,7 +4619,7 @@ msgstr ""
"Retourne le point d'appui dans une direction donnée. Ceci est utile pour les "
"algorithmes de détection de collision."
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
@@ -4585,19 +4627,19 @@ msgstr ""
"Retourne une copie de l'[AABB] agrandie d'un nombre donné d'unités dans "
"toutes les directions."
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr "Retourne [code]true[/code] si l'[AABB] est plate ou vide."
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr "Retourne [code]true[/code] si l'[AABB] est vide."
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr "Retourne [code]true[/code] si l'[AABB] contient un point."
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
@@ -4605,16 +4647,16 @@ msgstr ""
"Retourne l’intersection entre deux [AABB]. Une AABB vide (taille 0,0,0) est "
"retournée en cas d’échec."
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr "Retourne [code]true[/code] si l'[AABB] chevauche une autre."
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
"Retourne [code]true[/code] si l'[AABB] est sur les deux côtés d'un plan."
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
@@ -4622,7 +4664,7 @@ msgstr ""
"Retourne [code]true[/code] si l'[AABB] coupe le segment de droite entre "
"[code]from[/code] et [code]to[/code]."
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
@@ -4632,14 +4674,14 @@ msgstr ""
"approximativement égales, en appelant [method @GDScript.is_equal_approx] sur "
"chaque composantes."
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
"retourne une [AABB] plus grande qui contient à la fois [AABB] et [code]with[/"
"code]."
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
@@ -4647,11 +4689,11 @@ msgstr ""
"Coin de fin. Calculé par [code]position + size[/code]. Changer cette valeur "
"changera aussi la taille."
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr "Coin de départ. A généralement des valeurs inférieures à [member end]."
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
#, fuzzy
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
@@ -4756,17 +4798,17 @@ msgid ""
"[FileDialog] to disable hiding the dialog when pressing OK."
msgstr ""
"Si [code]vrai[/code], la boîte de dialogue est cachée quand le bouton OK est "
-"poussé. Vous pouvez le mettre à [code]false[/code] si vous voulez, par "
+"pressé. Vous pouvez le mettre à [code]false[/code] si vous voulez, par "
"exemple, valider l'entrée quand le signal [signal confirmed] est reçu et "
"gérer la dissimulation de la boîte de dialogue dans votre propre logique.\n"
"[b]Note:[/b] Plusieurs nœuds dérivés de cette classe peuvent avoir une "
"valeur défaut différent et potentiellement leur propre logique intégrée qui "
"outrepassera ce réglage. Par exemple [FileDialog] fait défaut à [code]false[/"
"code], et contient sa propre logique pour valider l'entrée qui est appelée "
-"quand vous poussez OK, qui finit par cachant la boîte de dialogue si "
-"l'entrée est valide. Comme tel, cette propriété ne peut pas être utilisé en "
+"quand vous pressez OK, qui éventuellement cache le dialogue si l'entrée est "
+"valide. Comme tel, cette propriété ne peut pas être utilisé dans "
"[FileDialog] pour désactiver la dissimulation de la boîte de dialogue quand "
-"OK est poussé."
+"OK est pressé."
#: doc/classes/AcceptDialog.xml:69
msgid "The text displayed by the dialog."
@@ -5920,9 +5962,9 @@ msgid ""
"Gets all children nodes in order as a [code]name: node[/code] dictionary. "
"Only useful when inheriting [AnimationRootNode]."
msgstr ""
-"Obtient tous les nœuds enfants dans l'ordre en tant que dictionnaire de la "
-"forme [code]nom: nœud[/code]. Utile uniquement lorsque [AnimationRootNode] "
-"est hérité."
+"Obtient tous les nœuds enfants dans l'ordre en tant que dictionnaire "
+"[code]name: node[/code]. Utile uniquement lorsque [AnimationRootNode] est "
+"hérité."
#: doc/classes/AnimationNode.xml:79
msgid ""
@@ -6119,7 +6161,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -7641,21 +7683,25 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
#: doc/classes/Area.xml:17
msgid ""
-"Returns a list of intersecting [Area]s. For performance reasons (collisions "
-"are all processed at the same time) this list is modified once during the "
-"physics step, not immediately after objects are moved. Consider using "
-"signals instead."
+"Returns a list of intersecting [Area]s. The overlapping area's [member "
+"CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:23
+#: doc/classes/Area.xml:24
msgid ""
-"Returns a list of intersecting [PhysicsBody]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody]s. The overlapping body's "
+"[member CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:30
+#: doc/classes/Area.xml:32
msgid ""
"If [code]true[/code], the given area overlaps the Area.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -7663,7 +7709,7 @@ msgid ""
"physics step. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:38
+#: doc/classes/Area.xml:40
msgid ""
"If [code]true[/code], the given physics body overlaps the Area.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -7674,7 +7720,7 @@ msgid ""
"their tiles with collision shapes as a virtual physics body)."
msgstr ""
-#: doc/classes/Area.xml:46
+#: doc/classes/Area.xml:48
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
"velocity lost per second.\n"
@@ -7682,41 +7728,41 @@ msgid ""
"details about damping."
msgstr ""
-#: doc/classes/Area.xml:50 doc/classes/Area2D.xml:52
+#: doc/classes/Area.xml:52 doc/classes/Area2D.xml:54
msgid "The name of the area's audio bus."
msgstr ""
-#: doc/classes/Area.xml:53 doc/classes/Area2D.xml:55
+#: doc/classes/Area.xml:55 doc/classes/Area2D.xml:57
msgid ""
"If [code]true[/code], the area's audio bus overrides the default audio bus."
msgstr ""
-#: doc/classes/Area.xml:56
+#: doc/classes/Area.xml:58
msgid ""
"The area's gravity intensity (in meters per second squared). This value "
"multiplies the gravity vector. This is useful to alter the force of gravity "
"without altering its direction."
msgstr ""
-#: doc/classes/Area.xml:59 doc/classes/Area2D.xml:61
+#: doc/classes/Area.xml:61 doc/classes/Area2D.xml:63
msgid ""
"The falloff factor for point gravity. The greater the value, the faster "
"gravity decreases with distance."
msgstr ""
-#: doc/classes/Area.xml:62 doc/classes/Area2D.xml:64
+#: doc/classes/Area.xml:64 doc/classes/Area2D.xml:66
msgid ""
"If [code]true[/code], gravity is calculated from a point (set via [member "
"gravity_vec]). See also [member space_override]."
msgstr ""
-#: doc/classes/Area.xml:65 doc/classes/Area2D.xml:67
+#: doc/classes/Area.xml:67 doc/classes/Area2D.xml:69
msgid ""
"The area's gravity vector (not normalized). If gravity is a point (see "
"[member gravity_point]), this will be the point of attraction."
msgstr ""
-#: doc/classes/Area.xml:68
+#: doc/classes/Area.xml:70
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
"velocity lost per second.\n"
@@ -7724,61 +7770,61 @@ msgid ""
"about damping."
msgstr ""
-#: doc/classes/Area.xml:72 doc/classes/Area2D.xml:74
+#: doc/classes/Area.xml:74 doc/classes/Area2D.xml:76
msgid "If [code]true[/code], other monitoring areas can detect this area."
msgstr ""
-#: doc/classes/Area.xml:75 doc/classes/Area2D.xml:77
+#: doc/classes/Area.xml:77 doc/classes/Area2D.xml:79
msgid ""
"If [code]true[/code], the area detects bodies or areas entering and exiting "
"it."
msgstr ""
-#: doc/classes/Area.xml:78 doc/classes/Area2D.xml:80
+#: doc/classes/Area.xml:80 doc/classes/Area2D.xml:82
msgid "The area's priority. Higher priority areas are processed first."
msgstr ""
-#: doc/classes/Area.xml:81
+#: doc/classes/Area.xml:83
msgid ""
"The degree to which this area applies reverb to its associated audio. Ranges "
"from [code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
msgstr ""
-#: doc/classes/Area.xml:84
+#: doc/classes/Area.xml:86
msgid "If [code]true[/code], the area applies reverb to its associated audio."
msgstr ""
-#: doc/classes/Area.xml:87
+#: doc/classes/Area.xml:89
msgid "The reverb bus name to use for this area's associated audio."
msgstr ""
-#: doc/classes/Area.xml:90
+#: doc/classes/Area.xml:92
msgid ""
"The degree to which this area's reverb is a uniform effect. Ranges from "
"[code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
msgstr ""
-#: doc/classes/Area.xml:93 doc/classes/Area2D.xml:83
+#: doc/classes/Area.xml:95 doc/classes/Area2D.xml:85
msgid ""
"Override mode for gravity and damping calculations within this area. See "
"[enum SpaceOverride] for possible values."
msgstr ""
-#: doc/classes/Area.xml:100
+#: doc/classes/Area.xml:102
msgid ""
"Emitted when another Area enters this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
-#: doc/classes/Area.xml:107
+#: doc/classes/Area.xml:109
msgid ""
"Emitted when another Area exits this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
-#: doc/classes/Area.xml:117 doc/classes/Area.xml:130
+#: doc/classes/Area.xml:119 doc/classes/Area.xml:132
msgid ""
"Emitted when one of another Area's [Shape]s enters one of this Area's "
"[Shape]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -7793,7 +7839,7 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:140
+#: doc/classes/Area.xml:142
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] enters this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -7802,7 +7848,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:147
+#: doc/classes/Area.xml:149
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] exits this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -7811,7 +7857,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:157 doc/classes/Area.xml:170
+#: doc/classes/Area.xml:159 doc/classes/Area.xml:172
msgid ""
"Emitted when one of a [PhysicsBody] or [GridMap]'s [Shape]s enters one of "
"this Area's [Shape]s. Requires [member monitoring] to be set to [code]true[/"
@@ -7828,29 +7874,29 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:180 doc/classes/Area2D.xml:170
+#: doc/classes/Area.xml:182 doc/classes/Area2D.xml:172
msgid "This area does not affect gravity/damping."
msgstr ""
-#: doc/classes/Area.xml:183 doc/classes/Area2D.xml:173
+#: doc/classes/Area.xml:185 doc/classes/Area2D.xml:175
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order)."
msgstr ""
-#: doc/classes/Area.xml:186 doc/classes/Area2D.xml:176
+#: doc/classes/Area.xml:188 doc/classes/Area2D.xml:178
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order), ignoring any lower priority areas."
msgstr ""
-#: doc/classes/Area.xml:189 doc/classes/Area2D.xml:179
+#: doc/classes/Area.xml:191 doc/classes/Area2D.xml:181
msgid ""
"This area replaces any gravity/damping, even the defaults, ignoring any "
"lower priority areas."
msgstr ""
-#: doc/classes/Area.xml:192 doc/classes/Area2D.xml:182
+#: doc/classes/Area.xml:194 doc/classes/Area2D.xml:184
msgid ""
"This area replaces any gravity/damping calculated so far (in [member "
"priority] order), but keeps calculating the rest of the areas."
@@ -7889,21 +7935,25 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
#: doc/classes/Area2D.xml:19
msgid ""
-"Returns a list of intersecting [Area2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [Area2D]s. The overlapping area's [member "
+"CollisionObject2D.collision_layer] must be part of this area's [member "
+"CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:25
+#: doc/classes/Area2D.xml:26
msgid ""
-"Returns a list of intersecting [PhysicsBody2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody2D]s. The overlapping body's "
+"[member CollisionObject2D.collision_layer] must be part of this area's "
+"[member CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:32
+#: doc/classes/Area2D.xml:34
msgid ""
"If [code]true[/code], the given area overlaps the Area2D.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -7911,7 +7961,7 @@ msgid ""
"the physics step. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:40
+#: doc/classes/Area2D.xml:42
msgid ""
"If [code]true[/code], the given physics body overlaps the Area2D.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -7922,7 +7972,7 @@ msgid ""
"register their tiles with collision shapes as a virtual physics body)."
msgstr ""
-#: doc/classes/Area2D.xml:48
+#: doc/classes/Area2D.xml:50
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
"velocity lost per second.\n"
@@ -7930,14 +7980,14 @@ msgid ""
"details about damping."
msgstr ""
-#: doc/classes/Area2D.xml:58
+#: doc/classes/Area2D.xml:60
msgid ""
"The area's gravity intensity (in pixels per second squared). This value "
"multiplies the gravity vector. This is useful to alter the force of gravity "
"without altering its direction."
msgstr ""
-#: doc/classes/Area2D.xml:70
+#: doc/classes/Area2D.xml:72
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
"velocity lost per second.\n"
@@ -7945,21 +7995,21 @@ msgid ""
"about damping."
msgstr ""
-#: doc/classes/Area2D.xml:90
+#: doc/classes/Area2D.xml:92
msgid ""
"Emitted when another Area2D enters this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-#: doc/classes/Area2D.xml:97
+#: doc/classes/Area2D.xml:99
msgid ""
"Emitted when another Area2D exits this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-#: doc/classes/Area2D.xml:107
+#: doc/classes/Area2D.xml:109
msgid ""
"Emitted when one of another Area2D's [Shape2D]s enters one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -7974,7 +8024,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:120
+#: doc/classes/Area2D.xml:122
msgid ""
"Emitted when one of another Area2D's [Shape2D]s exits one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -7989,7 +8039,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:130
+#: doc/classes/Area2D.xml:132
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] enters this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -7998,7 +8048,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:137
+#: doc/classes/Area2D.xml:139
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] exits this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -8007,7 +8057,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:147
+#: doc/classes/Area2D.xml:149
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s enters one "
"of this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -8026,7 +8076,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:160
+#: doc/classes/Area2D.xml:162
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s exits one of "
"this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -11721,42 +11771,47 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
-"no save path is provided it will try to match the path from the current "
+"no root node is provided, parent of this node will be used as root instead. "
+"If no save path is provided it will try to match the path from the current "
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -11770,63 +11825,63 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
#, fuzzy
msgid "The rotation of the baked custom sky."
msgstr "La racine de la scène éditée."
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -11834,36 +11889,36 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
#, fuzzy
msgid "The calculated light data."
msgstr "La hauteur de la capsule."
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -11871,13 +11926,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -11889,70 +11944,82 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
#, fuzzy
msgid "The default bake quality mode."
msgstr "L'arrière-plan par défaut pour [GraphNode]."
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
#, fuzzy
msgid "Baking was successful."
msgstr "La connexion a réussi."
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr "Actuellement inutilisé."
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
#, fuzzy
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr "Renvoie l'arc tangente des paramètres."
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
#, fuzzy
msgid "The size of the generated lightmaps is too large."
msgstr "Taille du plan généré."
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
#, fuzzy
msgid "Returns if user cancels baking."
msgstr "Retourne le bouton d'annulation."
-#: doc/classes/BakedLightmap.xml:133
+#: doc/classes/BakedLightmap.xml:132
+msgid ""
+"Returns if lightmapper can't be created. Unless you are using a custom "
+"lightmapper, please report this as bug."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:135
+msgid ""
+"There is no root node to start baking from. Either provide [code]from_node[/"
+"code] argument or attach this node to a parent that should be used as root."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:136
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:139
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:142
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -12413,8 +12480,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -12814,26 +12884,33 @@ msgid "Text [Color] used when the [Button] is disabled."
msgstr ""
#: doc/classes/Button.xml:77
-msgid "Text [Color] used when the [Button] is being hovered."
+msgid ""
+"Text [Color] used when the [Button] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/Button.xml:80
-msgid "Text [Color] used when the [Button] is being pressed."
+msgid "Text [Color] used when the [Button] is being hovered."
msgstr ""
#: doc/classes/Button.xml:83
-msgid "[StyleBox] used when the [Button] is being hovered."
+msgid "Text [Color] used when the [Button] is being pressed."
msgstr ""
#: doc/classes/Button.xml:86
-msgid "The horizontal space between [Button]'s icon and text."
+msgid "[StyleBox] used when the [Button] is being hovered."
msgstr ""
#: doc/classes/Button.xml:89
+msgid "The horizontal space between [Button]'s icon and text."
+msgstr ""
+
+#: doc/classes/Button.xml:92
msgid "Default [StyleBox] for the [Button]."
msgstr "[StyleBox] par défaut pour le [Button]."
-#: doc/classes/Button.xml:92
+#: doc/classes/Button.xml:95
msgid "[StyleBox] used when the [Button] is being pressed."
msgstr ""
@@ -14400,80 +14477,98 @@ msgstr ""
msgid "The check icon to display when the [CheckBox] is checked."
msgstr ""
-#: doc/classes/CheckBox.xml:30
+#: doc/classes/CheckBox.xml:28
+#, fuzzy
+msgid "The check icon to display when the [CheckBox] is checked and disabled."
+msgstr "Icône à afficher lorsque le [CheckButton] est coché et désactivé."
+
+#: doc/classes/CheckBox.xml:31
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is disabled."
msgstr ""
-#: doc/classes/CheckBox.xml:33
+#: doc/classes/CheckBox.xml:34
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is focused."
msgstr ""
-#: doc/classes/CheckBox.xml:36
+#: doc/classes/CheckBox.xml:37
msgid "The [Font] to use for the [CheckBox] text."
msgstr ""
-#: doc/classes/CheckBox.xml:39
+#: doc/classes/CheckBox.xml:40
msgid "The [CheckBox] text's font color."
msgstr "La couleur de la police du texte [CheckBox]."
-#: doc/classes/CheckBox.xml:42
+#: doc/classes/CheckBox.xml:43
msgid "The [CheckBox] text's font color when it's disabled."
msgstr ""
-#: doc/classes/CheckBox.xml:45
+#: doc/classes/CheckBox.xml:46
+msgid ""
+"The [CheckBox] text's font color when it's focused. Only replaces the normal "
+"text color of the checkbox. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:49
msgid "The [CheckBox] text's font color when it's hovered."
msgstr ""
-#: doc/classes/CheckBox.xml:48
+#: doc/classes/CheckBox.xml:52
msgid "The [CheckBox] text's font color when it's hovered and pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:51
+#: doc/classes/CheckBox.xml:55
msgid "The [CheckBox] text's font color when it's pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:54
+#: doc/classes/CheckBox.xml:58
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered."
msgstr ""
-#: doc/classes/CheckBox.xml:57
+#: doc/classes/CheckBox.xml:61
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered and "
"pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:60
+#: doc/classes/CheckBox.xml:64
msgid "The separation between the check icon and the text (in pixels)."
msgstr ""
-#: doc/classes/CheckBox.xml:63 doc/classes/CheckButton.xml:58
+#: doc/classes/CheckBox.xml:67 doc/classes/CheckButton.xml:61
msgid "The [StyleBox] to display as a background."
msgstr ""
-#: doc/classes/CheckBox.xml:66
+#: doc/classes/CheckBox.xml:70
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:69
+#: doc/classes/CheckBox.xml:73
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is checked."
msgstr ""
-#: doc/classes/CheckBox.xml:74
+#: doc/classes/CheckBox.xml:78
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is unchecked."
msgstr ""
-#: doc/classes/CheckBox.xml:79
+#: doc/classes/CheckBox.xml:83
msgid "The check icon to display when the [CheckBox] is unchecked."
msgstr ""
+#: doc/classes/CheckBox.xml:86
+#, fuzzy
+msgid ""
+"The check icon to display when the [CheckBox] is unchecked and disabled."
+msgstr "Icône à afficher lorsque le [CheckButton] est coché et désactivé."
+
#: doc/classes/CheckButton.xml:4
msgid "Checkable button. See also [CheckBox]."
msgstr "Bouton à cocher. Voir aussi [CheckBox]."
@@ -14517,49 +14612,56 @@ msgid "The [CheckButton] text's font color when it's disabled."
msgstr ""
#: doc/classes/CheckButton.xml:40
-msgid "The [CheckButton] text's font color when it's hovered."
+msgid ""
+"The [CheckButton] text's font color when it's focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/CheckButton.xml:43
-msgid "The [CheckButton] text's font color when it's hovered and pressed."
+msgid "The [CheckButton] text's font color when it's hovered."
msgstr ""
#: doc/classes/CheckButton.xml:46
-msgid "The [CheckButton] text's font color when it's pressed."
+msgid "The [CheckButton] text's font color when it's hovered and pressed."
msgstr ""
#: doc/classes/CheckButton.xml:49
+msgid "The [CheckButton] text's font color when it's pressed."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:52
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered."
msgstr ""
-#: doc/classes/CheckButton.xml:52
+#: doc/classes/CheckButton.xml:55
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered "
"and pressed."
msgstr ""
-#: doc/classes/CheckButton.xml:55
+#: doc/classes/CheckButton.xml:58
msgid "The separation between the toggle icon and the text (in pixels)."
msgstr ""
-#: doc/classes/CheckButton.xml:61
+#: doc/classes/CheckButton.xml:64
msgid "The icon to display when the [CheckButton] is unchecked."
msgstr ""
-#: doc/classes/CheckButton.xml:64
+#: doc/classes/CheckButton.xml:67
msgid "The icon to display when the [CheckButton] is unchecked and disabled."
msgstr ""
-#: doc/classes/CheckButton.xml:67
+#: doc/classes/CheckButton.xml:70
msgid "The icon to display when the [CheckButton] is checked."
msgstr ""
-#: doc/classes/CheckButton.xml:70
+#: doc/classes/CheckButton.xml:73
msgid "The icon to display when the [CheckButton] is checked and disabled."
msgstr "Icône à afficher lorsque le [CheckButton] est coché et désactivé."
-#: doc/classes/CheckButton.xml:73
+#: doc/classes/CheckButton.xml:76
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is pressed."
msgstr ""
@@ -15347,7 +15449,6 @@ msgid ""
msgstr ""
#: doc/classes/Color.xml:37
-#, fuzzy
msgid ""
"Constructs a color from a 32-bit integer in RGBA format (each byte "
"represents a color channel).\n"
@@ -15355,10 +15456,10 @@ msgid ""
"var c = Color(274) # Similar to Color(0.0, 0.0, 0.004, 0.07)\n"
"[/codeblock]"
msgstr ""
-"Construit une couleur à partir d'une couleur existante, mais avec une valeur "
-"alpha personnalisée.\n"
+"Construit une couleur à partir d'un entier de 32 bits au format RGBA (chaque "
+"octet représente un canal de couleur).\n"
"[codeblock]\n"
-"var red = Color(Color.red, 0.5) # 50% de rouge transparent.\n"
+"var c = Color(274) # Similar to Color(0.0, 0.0, 0.004, 0.07)\n"
"[/codeblock]"
#: doc/classes/Color.xml:49
@@ -15499,7 +15600,6 @@ msgstr ""
"[/codeblock]"
#: doc/classes/Color.xml:158
-#, fuzzy
msgid ""
"Returns the linear interpolation with another color. The interpolation "
"factor [code]weight[/code] is between 0 and 1.\n"
@@ -15511,11 +15611,12 @@ msgid ""
"[/codeblock]"
msgstr ""
"Retourne l'interpolation linéaire avec une autre couleur. Le facteur "
-"d'interpolation [code]t[/code] est compris entre 0 et 1.\n"
+"d'interpolation [code]weight[/code] est compris entre 0 et 1.\n"
"[codeblock]\n"
"var c1 = Color(1.0, 0.0, 0.0)\n"
"var c2 = Color(0.0, 1.0, 0.0)\n"
-"var li_c = c1.lerp(c2, 0.5) # Une couleur d'une RGBA( 128, 128, 0, 255)\n"
+"var li_c = c1.linear_interpolate(c2, 0.5) # Equivalent to Color(0.5, 0.5, "
+"0.0)\n"
"[/codeblock]"
#: doc/classes/Color.xml:169
@@ -16510,26 +16611,33 @@ msgid "Text [Color] used when the [ColorPickerButton] is disabled."
msgstr ""
#: doc/classes/ColorPickerButton.xml:80
-msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
+msgid ""
+"Text [Color] used when the [ColorPickerButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/ColorPickerButton.xml:83
-msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
+msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
msgstr ""
#: doc/classes/ColorPickerButton.xml:86
-msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
+msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
msgstr ""
#: doc/classes/ColorPickerButton.xml:89
-msgid "The horizontal space between [ColorPickerButton]'s icon and text."
+msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
msgstr ""
#: doc/classes/ColorPickerButton.xml:92
+msgid "The horizontal space between [ColorPickerButton]'s icon and text."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:95
msgid "Default [StyleBox] for the [ColorPickerButton]."
msgstr "[StyleBox] par défaut pour le [ColorPickerButton]."
-#: doc/classes/ColorPickerButton.xml:95
+#: doc/classes/ColorPickerButton.xml:98
msgid "[StyleBox] used when the [ColorPickerButton] is being pressed."
msgstr ""
@@ -21888,7 +21996,8 @@ msgid ""
"get_resource_type]. They may optionally specify some import presets that "
"affect the import process. EditorImportPlugins are responsible for creating "
"the resources and saving them in the [code].import[/code] directory (see "
-"[member ProjectSettings.application/config/project_data_dir_name]).\n"
+"[member ProjectSettings.application/config/"
+"use_hidden_project_data_directory]).\n"
"Below is an example EditorImportPlugin that imports a [Mesh] from a file "
"with the extension \".special\" or \".spec\":\n"
"[codeblock]\n"
@@ -22015,7 +22124,7 @@ msgstr ""
msgid ""
"Gets the extension used to save this resource in the [code].import[/code] "
"directory (see [member ProjectSettings.application/config/"
-"project_data_dir_name])."
+"use_hidden_project_data_directory])."
msgstr ""
#: doc/classes/EditorImportPlugin.xml:130
@@ -22794,9 +22903,8 @@ msgid "Removes an import plugin registered by [method add_import_plugin]."
msgstr "Supprime un type personnalisé ajouté par [méthode add_custom_type]."
#: doc/classes/EditorPlugin.xml:423
-#, fuzzy
msgid "Removes an inspector plugin registered by [method add_import_plugin]"
-msgstr "Supprime un type personnalisé ajouté par [méthode add_custom_type]."
+msgstr "Supprime un type personnalisé ajouté par [méthode add_custom_type]"
#: doc/classes/EditorPlugin.xml:430
#, fuzzy
@@ -23073,10 +23181,12 @@ msgstr ""
msgid "Emitted when the value of the edited resource was changed."
msgstr "Émis à chaque fois que la ressource change."
-#: doc/classes/EditorResourcePicker.xml:89
-#, fuzzy
-msgid "Emitted when the resource value was set and user clicked to edit it."
-msgstr "Émis lorsqu'une interface est supprimée."
+#: doc/classes/EditorResourcePicker.xml:90
+msgid ""
+"Emitted when the resource value was set and user clicked to edit it. When "
+"[code]edit[/code] is [code]true[/code], the signal was caused by the context "
+"menu \"Edit\" option."
+msgstr ""
#: doc/classes/EditorResourcePreview.xml:4
msgid "Helper to generate previews of resources or files."
@@ -26908,21 +27018,32 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html"
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -26931,14 +27052,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr "Appelle [method bake] avec [code]create_visual_debug[/code] activé."
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -26948,61 +27073,61 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
#, fuzzy
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
msgstr "Si [code]true[/code], permet le défilement horizontal."
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
@@ -27011,22 +27136,26 @@ msgstr ""
"plus rapide. Utilisez-le si vous le pouvez, mais surtout utilisez-le sur du "
"matériel bas de gamme."
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
"Utilise 128 subdivisions. Il s’agit du paramètre de qualité par défaut."
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr "Utilise 256 subdivisions."
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
+#, fuzzy
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
+"Utilise 64 subdivisions. C’est le réglage de qualité la plus basse, mais le "
+"plus rapide. Utilisez-le si vous le pouvez, mais surtout utilisez-le sur du "
+"matériel bas de gamme."
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -29851,16 +29980,18 @@ msgstr ""
#: doc/classes/Image.xml:436
msgid ""
"OpenGL texture format [code]RED[/code] with a single component and a "
-"bitdepth of 8."
+"bitdepth of 8.\n"
+"[b]Note:[/b] When using the GLES2 backend, this uses the alpha channel "
+"instead of the red channel for storage."
msgstr ""
-#: doc/classes/Image.xml:439
+#: doc/classes/Image.xml:440
msgid ""
"OpenGL texture format [code]RG[/code] with two components and a bitdepth of "
"8 for each."
msgstr ""
-#: doc/classes/Image.xml:442
+#: doc/classes/Image.xml:443
msgid ""
"OpenGL texture format [code]RGB[/code] with three components, each with a "
"bitdepth of 8.\n"
@@ -29868,7 +29999,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:446
+#: doc/classes/Image.xml:447
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 8.\n"
@@ -29876,73 +30007,73 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:450
+#: doc/classes/Image.xml:451
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 4."
msgstr ""
-#: doc/classes/Image.xml:453
+#: doc/classes/Image.xml:454
msgid ""
"OpenGL texture format [code]GL_RGB5_A1[/code] where 5 bits of depth for each "
"component of RGB and one bit for alpha."
msgstr ""
-#: doc/classes/Image.xml:456
+#: doc/classes/Image.xml:457
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 32-"
"bit floating-point value."
msgstr ""
-#: doc/classes/Image.xml:459
+#: doc/classes/Image.xml:460
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:462
+#: doc/classes/Image.xml:463
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:465
+#: doc/classes/Image.xml:466
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:468
+#: doc/classes/Image.xml:469
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 16-"
"bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:471
+#: doc/classes/Image.xml:472
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:474
+#: doc/classes/Image.xml:475
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:477
+#: doc/classes/Image.xml:478
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:480
+#: doc/classes/Image.xml:481
msgid ""
"A special OpenGL texture format where the three color components have 9 bits "
"of precision and all three share a single 5-bit exponent."
msgstr ""
-#: doc/classes/Image.xml:483
+#: doc/classes/Image.xml:484
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 1, and is the smallest variation "
@@ -29952,7 +30083,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:487
+#: doc/classes/Image.xml:488
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 2, and color data is interpreted "
@@ -29962,7 +30093,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:491
+#: doc/classes/Image.xml:492
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format also known as Block Compression 3 or BC3 that contains 64 "
@@ -29973,7 +30104,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:495
+#: doc/classes/Image.xml:496
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -29981,7 +30112,7 @@ msgid ""
"DXT5 uses for the alpha channel."
msgstr ""
-#: doc/classes/Image.xml:498
+#: doc/classes/Image.xml:499
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -29989,7 +30120,7 @@ msgid ""
"algorithm that DXT5 uses for the alpha channel."
msgstr ""
-#: doc/classes/Image.xml:501
+#: doc/classes/Image.xml:502
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned normalized "
@@ -29998,21 +30129,21 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:505
+#: doc/classes/Image.xml:506
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with signed floating-point "
"RGB components."
msgstr ""
-#: doc/classes/Image.xml:508
+#: doc/classes/Image.xml:509
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned floating-point "
"RGB components."
msgstr ""
-#: doc/classes/Image.xml:511
+#: doc/classes/Image.xml:512
msgid ""
"Texture format used on PowerVR-supported mobile platforms, uses 2-bit color "
"depth with no alpha. More information can be found [url=https://en.wikipedia."
@@ -30021,7 +30152,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:515
+#: doc/classes/Image.xml:516
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with an "
"alpha component."
@@ -30029,19 +30160,19 @@ msgstr ""
"Même chose que [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], mais "
"avec une composante alpha."
-#: doc/classes/Image.xml:518
+#: doc/classes/Image.xml:519
msgid ""
"Similar to [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with 4-"
"bit color depth and no alpha."
msgstr ""
-#: doc/classes/Image.xml:521
+#: doc/classes/Image.xml:522
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC4[/url], but with an "
"alpha component."
msgstr ""
-#: doc/classes/Image.xml:524
+#: doc/classes/Image.xml:525
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC1]Ericsson Texture Compression format 1[/"
@@ -30049,7 +30180,7 @@ msgid ""
"standard. This format cannot store an alpha channel."
msgstr ""
-#: doc/classes/Image.xml:527
+#: doc/classes/Image.xml:528
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -30057,7 +30188,7 @@ msgid ""
"unsigned data."
msgstr ""
-#: doc/classes/Image.xml:530
+#: doc/classes/Image.xml:531
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -30065,7 +30196,7 @@ msgid ""
"channel of signed data."
msgstr ""
-#: doc/classes/Image.xml:533
+#: doc/classes/Image.xml:534
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -30073,7 +30204,7 @@ msgid ""
"of unsigned data."
msgstr ""
-#: doc/classes/Image.xml:536
+#: doc/classes/Image.xml:537
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -30081,7 +30212,7 @@ msgid ""
"channels of signed data."
msgstr ""
-#: doc/classes/Image.xml:539
+#: doc/classes/Image.xml:540
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -30091,7 +30222,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:543
+#: doc/classes/Image.xml:544
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -30101,7 +30232,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:547
+#: doc/classes/Image.xml:548
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -30112,31 +30243,31 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:551
+#: doc/classes/Image.xml:552
msgid "Represents the size of the [enum Format] enum."
msgstr ""
-#: doc/classes/Image.xml:554
+#: doc/classes/Image.xml:555
msgid ""
"Performs nearest-neighbor interpolation. If the image is resized, it will be "
"pixelated."
msgstr ""
-#: doc/classes/Image.xml:557
+#: doc/classes/Image.xml:558
msgid ""
"Performs bilinear interpolation. If the image is resized, it will be blurry. "
"This mode is faster than [constant INTERPOLATE_CUBIC], but it results in "
"lower quality."
msgstr ""
-#: doc/classes/Image.xml:560
+#: doc/classes/Image.xml:561
msgid ""
"Performs cubic interpolation. If the image is resized, it will be blurry. "
"This mode often gives better results compared to [constant "
"INTERPOLATE_BILINEAR], at the cost of being slower."
msgstr ""
-#: doc/classes/Image.xml:563
+#: doc/classes/Image.xml:564
msgid ""
"Performs bilinear separately on the two most-suited mipmap levels, then "
"linearly interpolates between them.\n"
@@ -30151,56 +30282,56 @@ msgid ""
"a new set will be generated for the resulting image."
msgstr ""
-#: doc/classes/Image.xml:570
+#: doc/classes/Image.xml:571
msgid ""
"Performs Lanczos interpolation. This is the slowest image resizing mode, but "
"it typically gives the best results, especially when downscalng images."
msgstr ""
-#: doc/classes/Image.xml:573
+#: doc/classes/Image.xml:574
msgid "Image does not have alpha."
msgstr "L’image n’a pas d’alpha."
-#: doc/classes/Image.xml:576
+#: doc/classes/Image.xml:577
msgid "Image stores alpha in a single bit."
msgstr ""
-#: doc/classes/Image.xml:579
+#: doc/classes/Image.xml:580
#, fuzzy
msgid "Image uses alpha."
msgstr "L'image utilise l'alpha."
-#: doc/classes/Image.xml:582
+#: doc/classes/Image.xml:583
msgid "Use S3TC compression."
msgstr "Utilisez la compression ST3TC."
-#: doc/classes/Image.xml:585
+#: doc/classes/Image.xml:586
msgid "Use PVRTC2 compression."
msgstr "Utilisez la compression PVRTC2."
-#: doc/classes/Image.xml:588
+#: doc/classes/Image.xml:589
msgid "Use PVRTC4 compression."
msgstr "Utilisez la compression PVRTC4."
-#: doc/classes/Image.xml:591
+#: doc/classes/Image.xml:592
msgid "Use ETC compression."
msgstr "Utilisez la compression ETC."
-#: doc/classes/Image.xml:594
+#: doc/classes/Image.xml:595
msgid "Use ETC2 compression."
msgstr "Utilisez la compression ETC2."
-#: doc/classes/Image.xml:597
+#: doc/classes/Image.xml:598
msgid ""
"Source texture (before compression) is a regular texture. Default for all "
"textures."
msgstr ""
-#: doc/classes/Image.xml:600
+#: doc/classes/Image.xml:601
msgid "Source texture (before compression) is in sRGB space."
msgstr ""
-#: doc/classes/Image.xml:603
+#: doc/classes/Image.xml:604
msgid ""
"Source texture (before compression) is a normal texture (e.g. it can be "
"compressed into two channels)."
@@ -30426,6 +30557,17 @@ msgstr ""
#: doc/classes/Input.xml:43
msgid ""
+"Sends all input events which are in the current buffer to the game loop. "
+"These events may have been buffered as a result of accumulated input "
+"([method set_use_accumulated_input]) or agile input flushing ([member "
+"ProjectSettings.input_devices/buffering/agile_event_flushing]).\n"
+"The engine will already do this itself at key execution points (at least "
+"once per frame). However, this can be useful in advanced cases where you "
+"want precise control over the timing of event handling."
+msgstr ""
+
+#: doc/classes/Input.xml:50
+msgid ""
"Returns the acceleration of the device's accelerometer sensor, if the device "
"has one. Otherwise, the method returns [constant Vector3.ZERO].\n"
"Note this method returns an empty [Vector3] when running from the editor "
@@ -30437,7 +30579,7 @@ msgid ""
"the Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:53
+#: doc/classes/Input.xml:60
msgid ""
"Returns a value between 0 and 1 representing the raw intensity of the given "
"action, ignoring the action's deadzone. In most cases, you should use "
@@ -30447,7 +30589,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:62
+#: doc/classes/Input.xml:69
msgid ""
"Returns a value between 0 and 1 representing the intensity of the given "
"action. In a joypad, for example, the further away the axis (analog sticks "
@@ -30459,7 +30601,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:71
+#: doc/classes/Input.xml:78
msgid ""
"Get axis input by specifying two actions, one negative and one positive.\n"
"This is a shorthand for writing [code]Input."
@@ -30467,17 +30609,17 @@ msgid ""
"get_action_strength(\"negative_action\")[/code]."
msgstr ""
-#: doc/classes/Input.xml:78
+#: doc/classes/Input.xml:85
msgid ""
"Returns an [Array] containing the device IDs of all currently connected "
"joypads."
msgstr ""
-#: doc/classes/Input.xml:84
+#: doc/classes/Input.xml:91
msgid "Returns the currently assigned cursor shape (see [enum CursorShape])."
msgstr ""
-#: doc/classes/Input.xml:90
+#: doc/classes/Input.xml:97
msgid ""
"Returns the gravity of the device's accelerometer sensor, if the device has "
"one. Otherwise, the method returns [constant Vector3.ZERO].\n"
@@ -30487,7 +30629,7 @@ msgid ""
"Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:97
+#: doc/classes/Input.xml:104
msgid ""
"Returns the rotation rate in rad/s around a device's X, Y, and Z axes of the "
"gyroscope sensor, if the device has one. Otherwise, the method returns "
@@ -30496,54 +30638,54 @@ msgid ""
"it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:106
+#: doc/classes/Input.xml:113
#, fuzzy
msgid ""
"Returns the current value of the joypad axis at given index (see [enum "
"JoystickList])."
msgstr "Retourne l'état actuel de ce canal, voir [enum ChannelState]."
-#: doc/classes/Input.xml:113
+#: doc/classes/Input.xml:120
msgid "Returns the index of the provided axis name."
msgstr ""
-#: doc/classes/Input.xml:120
+#: doc/classes/Input.xml:127
msgid ""
"Receives a [enum JoystickList] axis and returns its equivalent name as a "
"string."
msgstr ""
-#: doc/classes/Input.xml:127
+#: doc/classes/Input.xml:134
msgid "Returns the index of the provided button name."
msgstr ""
-#: doc/classes/Input.xml:134
+#: doc/classes/Input.xml:141
msgid ""
"Receives a gamepad button from [enum JoystickList] and returns its "
"equivalent name as a string."
msgstr ""
-#: doc/classes/Input.xml:141
+#: doc/classes/Input.xml:148
msgid ""
"Returns a SDL2-compatible device GUID on platforms that use gamepad "
"remapping. Returns [code]\"Default Gamepad\"[/code] otherwise."
msgstr ""
-#: doc/classes/Input.xml:148
+#: doc/classes/Input.xml:155
msgid "Returns the name of the joypad at the specified device index."
msgstr ""
-#: doc/classes/Input.xml:155
+#: doc/classes/Input.xml:162
msgid "Returns the duration of the current vibration effect in seconds."
msgstr ""
-#: doc/classes/Input.xml:162
+#: doc/classes/Input.xml:169
msgid ""
"Returns the strength of the joypad vibration: x is the strength of the weak "
"motor, and y is the strength of the strong motor."
msgstr ""
-#: doc/classes/Input.xml:168
+#: doc/classes/Input.xml:175
msgid ""
"Returns the mouse speed for the last time the cursor was moved, and this "
"until the next frame where the mouse moves. This means that even if the "
@@ -30551,7 +30693,7 @@ msgid ""
"motion."
msgstr ""
-#: doc/classes/Input.xml:174
+#: doc/classes/Input.xml:181
msgid ""
"Returns the magnetic field strength in micro-Tesla for all axes of the "
"device's magnetometer sensor, if the device has one. Otherwise, the method "
@@ -30560,17 +30702,17 @@ msgid ""
"platforms, it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:181
+#: doc/classes/Input.xml:188
msgid ""
"Returns mouse buttons as a bitmask. If multiple mouse buttons are pressed at "
"the same time, the bits are added together."
msgstr ""
-#: doc/classes/Input.xml:187
+#: doc/classes/Input.xml:194
msgid "Returns the mouse mode. See the constants for more information."
msgstr ""
-#: doc/classes/Input.xml:198
+#: doc/classes/Input.xml:205
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -30583,7 +30725,7 @@ msgid ""
"want (on the range of 0 to 1)."
msgstr ""
-#: doc/classes/Input.xml:208
+#: doc/classes/Input.xml:215
msgid ""
"Returns [code]true[/code] when the user starts pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user pressed down "
@@ -30595,7 +30737,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:218
+#: doc/classes/Input.xml:225
msgid ""
"Returns [code]true[/code] when the user stops pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user released the "
@@ -30605,7 +30747,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:227
+#: doc/classes/Input.xml:234
msgid ""
"Returns [code]true[/code] if you are pressing the action event. Note that if "
"an action has multiple buttons assigned and more than one of them is "
@@ -30616,7 +30758,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:236
+#: doc/classes/Input.xml:243
#, fuzzy
msgid ""
"Returns [code]true[/code] if you are pressing the joypad button (see [enum "
@@ -30625,7 +30767,7 @@ msgstr ""
"Retourne [code]true[/code] (vrai) si la chaîne de caractères finit par la "
"chaîne de caractères donnée."
-#: doc/classes/Input.xml:243
+#: doc/classes/Input.xml:250
msgid ""
"Returns [code]true[/code] if the system knows the specified device. This "
"means that it sets all button and axis indices exactly as defined in [enum "
@@ -30633,7 +30775,7 @@ msgid ""
"but you can still retrieve events from them."
msgstr ""
-#: doc/classes/Input.xml:250
+#: doc/classes/Input.xml:257
#, fuzzy
msgid ""
"Returns [code]true[/code] if you are pressing the key. You can pass a [enum "
@@ -30642,13 +30784,13 @@ msgstr ""
"Retourne [code]true[/code] (vrai) si la chaîne de caractères finit par la "
"chaîne de caractères donnée."
-#: doc/classes/Input.xml:257
+#: doc/classes/Input.xml:264
msgid ""
"Returns [code]true[/code] if you are pressing the mouse button specified "
"with [enum ButtonList]."
msgstr ""
-#: doc/classes/Input.xml:267
+#: doc/classes/Input.xml:274
msgid ""
"Notifies the [Input] singleton that a connection has changed, to update the "
"state for the [code]device[/code] index.\n"
@@ -30657,7 +30799,7 @@ msgid ""
"triggered internally."
msgstr ""
-#: doc/classes/Input.xml:275
+#: doc/classes/Input.xml:282
msgid ""
"Feeds an [InputEvent] to the game. Can be used to artificially trigger input "
"events from code. Also generates [method Node._input] calls.\n"
@@ -30670,12 +30812,21 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Input.xml:289
+#: doc/classes/Input.xml:296
msgid ""
"Removes all mappings from the internal database that match the given GUID."
msgstr ""
-#: doc/classes/Input.xml:298
+#: doc/classes/Input.xml:303
+msgid ""
+"Sets the acceleration value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:313
msgid ""
"Sets a custom mouse cursor image, which is only visible inside the game "
"window. The hotspot can also be specified. Passing [code]null[/code] to the "
@@ -30690,7 +30841,7 @@ msgid ""
"compression mode can't be used for custom cursors."
msgstr ""
-#: doc/classes/Input.xml:309
+#: doc/classes/Input.xml:324
msgid ""
"Sets the default cursor shape to be used in the viewport instead of "
"[constant CURSOR_ARROW].\n"
@@ -30700,11 +30851,38 @@ msgid ""
"cursor immediately."
msgstr ""
-#: doc/classes/Input.xml:318
+#: doc/classes/Input.xml:333
+msgid ""
+"Sets the gravity value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:341
+msgid ""
+"Sets the value of the rotation rate of the gyroscope sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:349
+msgid ""
+"Sets the value of the magnetic field of the magnetometer sensor. Can be used "
+"for debugging on devices without a hardware sensor, for example in an editor "
+"on a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:357
msgid "Sets the mouse mode. See the constants for more information."
msgstr ""
-#: doc/classes/Input.xml:325
+#: doc/classes/Input.xml:364
msgid ""
"Enables or disables the accumulation of similar input events sent by the "
"operating system. When input accumulation is enabled, all input events "
@@ -30718,7 +30896,7 @@ msgid ""
"results that closely follow the actual input."
msgstr ""
-#: doc/classes/Input.xml:336
+#: doc/classes/Input.xml:375
msgid ""
"Starts to vibrate the joypad. Joypads usually come with two rumble motors, a "
"strong and a weak one. [code]weak_magnitude[/code] is the strength of the "
@@ -30731,34 +30909,34 @@ msgid ""
"few seconds."
msgstr ""
-#: doc/classes/Input.xml:344
+#: doc/classes/Input.xml:383
msgid "Stops the vibration of the joypad."
msgstr "Arrête la vibration du joypad."
-#: doc/classes/Input.xml:351
+#: doc/classes/Input.xml:390
msgid ""
"Vibrate Android and iOS devices.\n"
"[b]Note:[/b] It needs [code]VIBRATE[/code] permission for Android at export "
"settings. iOS does not support duration."
msgstr ""
-#: doc/classes/Input.xml:359
+#: doc/classes/Input.xml:398
msgid "Sets the mouse position to the specified vector."
msgstr ""
-#: doc/classes/Input.xml:368
+#: doc/classes/Input.xml:407
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
-#: doc/classes/Input.xml:374
+#: doc/classes/Input.xml:413
msgid "Makes the mouse cursor visible if it is hidden."
msgstr ""
-#: doc/classes/Input.xml:377
+#: doc/classes/Input.xml:416
msgid "Makes the mouse cursor hidden if it is visible."
msgstr ""
-#: doc/classes/Input.xml:380
+#: doc/classes/Input.xml:419
msgid ""
"Captures the mouse. The mouse will be hidden and its position locked at the "
"center of the screen.\n"
@@ -30766,83 +30944,83 @@ msgid ""
"need to use [member InputEventMouseMotion.relative]."
msgstr ""
-#: doc/classes/Input.xml:384
+#: doc/classes/Input.xml:423
msgid "Makes the mouse cursor visible but confines it to the game window."
msgstr ""
-#: doc/classes/Input.xml:387
+#: doc/classes/Input.xml:426
msgid "Arrow cursor. Standard, default pointing cursor."
msgstr ""
-#: doc/classes/Input.xml:390
+#: doc/classes/Input.xml:429
msgid ""
"I-beam cursor. Usually used to show where the text cursor will appear when "
"the mouse is clicked."
msgstr ""
-#: doc/classes/Input.xml:393
+#: doc/classes/Input.xml:432
msgid ""
"Pointing hand cursor. Usually used to indicate the pointer is over a link or "
"other interactable item."
msgstr ""
-#: doc/classes/Input.xml:396
+#: doc/classes/Input.xml:435
msgid ""
"Cross cursor. Typically appears over regions in which a drawing operation "
"can be performed or for selections."
msgstr ""
-#: doc/classes/Input.xml:399
+#: doc/classes/Input.xml:438
msgid ""
"Wait cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application is still usable during the "
"operation."
msgstr ""
-#: doc/classes/Input.xml:402
+#: doc/classes/Input.xml:441
msgid ""
"Busy cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application isn't usable during the "
"operation (e.g. something is blocking its main thread)."
msgstr ""
-#: doc/classes/Input.xml:405
+#: doc/classes/Input.xml:444
msgid "Drag cursor. Usually displayed when dragging something."
msgstr ""
-#: doc/classes/Input.xml:408
+#: doc/classes/Input.xml:447
msgid ""
"Can drop cursor. Usually displayed when dragging something to indicate that "
"it can be dropped at the current position."
msgstr ""
-#: doc/classes/Input.xml:411
+#: doc/classes/Input.xml:450
msgid ""
"Forbidden cursor. Indicates that the current action is forbidden (for "
"example, when dragging something) or that the control at a position is "
"disabled."
msgstr ""
-#: doc/classes/Input.xml:414
+#: doc/classes/Input.xml:453
msgid ""
"Vertical resize mouse cursor. A double-headed vertical arrow. It tells the "
"user they can resize the window or the panel vertically."
msgstr ""
-#: doc/classes/Input.xml:417
+#: doc/classes/Input.xml:456
msgid ""
"Horizontal resize mouse cursor. A double-headed horizontal arrow. It tells "
"the user they can resize the window or the panel horizontally."
msgstr ""
-#: doc/classes/Input.xml:420
+#: doc/classes/Input.xml:459
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the bottom left to the top right. It tells the user they can resize the "
"window or the panel both horizontally and vertically."
msgstr ""
-#: doc/classes/Input.xml:423
+#: doc/classes/Input.xml:462
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the top left to the bottom right, the opposite of [constant "
@@ -30850,23 +31028,23 @@ msgid ""
"both horizontally and vertically."
msgstr ""
-#: doc/classes/Input.xml:426
+#: doc/classes/Input.xml:465
msgid "Move cursor. Indicates that something can be moved."
msgstr ""
-#: doc/classes/Input.xml:429
+#: doc/classes/Input.xml:468
msgid ""
"Vertical split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_VSIZE]."
msgstr ""
-#: doc/classes/Input.xml:432
+#: doc/classes/Input.xml:471
msgid ""
"Horizontal split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_HSIZE]."
msgstr ""
-#: doc/classes/Input.xml:435
+#: doc/classes/Input.xml:474
msgid "Help cursor. Usually a question mark."
msgstr ""
@@ -31287,7 +31465,9 @@ msgid "The drag position."
msgstr "La position de glissement."
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -32647,7 +32827,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -32712,22 +32893,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -32742,7 +32925,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -32750,19 +32933,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -32836,7 +33019,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -32894,7 +33078,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -34216,14 +34402,21 @@ msgid "Default text [Color] of the [LinkButton]."
msgstr ""
#: doc/classes/LinkButton.xml:46
-msgid "Text [Color] used when the [LinkButton] is being hovered."
+msgid ""
+"Text [Color] used when the [LinkButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/LinkButton.xml:49
-msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgid "Text [Color] used when the [LinkButton] is being hovered."
msgstr ""
#: doc/classes/LinkButton.xml:52
+msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:55
msgid "The vertical space between the baseline of text and the underline."
msgstr ""
@@ -34720,26 +34913,33 @@ msgid "Text [Color] used when the [MenuButton] is disabled."
msgstr ""
#: doc/classes/MenuButton.xml:64
-msgid "Text [Color] used when the [MenuButton] is being hovered."
+msgid ""
+"Text [Color] used when the [MenuButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/MenuButton.xml:67
-msgid "Text [Color] used when the [MenuButton] is being pressed."
+msgid "Text [Color] used when the [MenuButton] is being hovered."
msgstr ""
#: doc/classes/MenuButton.xml:70
-msgid "[StyleBox] used when the [MenuButton] is being hovered."
+msgid "Text [Color] used when the [MenuButton] is being pressed."
msgstr ""
#: doc/classes/MenuButton.xml:73
-msgid "The horizontal space between [MenuButton]'s icon and text."
+msgid "[StyleBox] used when the [MenuButton] is being hovered."
msgstr ""
#: doc/classes/MenuButton.xml:76
-msgid "Default [StyleBox] for the [MenuButton]."
+msgid "The horizontal space between [MenuButton]'s icon and text."
msgstr ""
#: doc/classes/MenuButton.xml:79
+msgid "Default [StyleBox] for the [MenuButton]."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:82
msgid "[StyleBox] used when the [MenuButton] is being pressed."
msgstr ""
@@ -36498,7 +36698,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -39426,26 +39626,33 @@ msgid "Text [Color] used when the [OptionButton] is disabled."
msgstr ""
#: doc/classes/OptionButton.xml:212
-msgid "Text [Color] used when the [OptionButton] is being hovered."
+msgid ""
+"Text [Color] used when the [OptionButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/OptionButton.xml:215
-msgid "Text [Color] used when the [OptionButton] is being pressed."
+msgid "Text [Color] used when the [OptionButton] is being hovered."
msgstr ""
#: doc/classes/OptionButton.xml:218
-msgid "[StyleBox] used when the [OptionButton] is being hovered."
+msgid "Text [Color] used when the [OptionButton] is being pressed."
msgstr ""
#: doc/classes/OptionButton.xml:221
-msgid "The horizontal space between [OptionButton]'s icon and text."
+msgid "[StyleBox] used when the [OptionButton] is being hovered."
msgstr ""
#: doc/classes/OptionButton.xml:224
-msgid "Default [StyleBox] for the [OptionButton]."
+msgid "The horizontal space between [OptionButton]'s icon and text."
msgstr ""
#: doc/classes/OptionButton.xml:227
+msgid "Default [StyleBox] for the [OptionButton]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:230
msgid "[StyleBox] used when the [OptionButton] is being pressed."
msgstr ""
@@ -39855,7 +40062,7 @@ msgstr "Retourne le nombre de formes assignées à une zone."
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -39885,14 +40092,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -39902,7 +40109,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -42448,17 +42655,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -42476,11 +42709,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -42691,7 +42924,9 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-msgid "Returns the [Physics2DDirectBodyState] of the body."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
@@ -43499,6 +43734,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -43516,7 +43769,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -43636,9 +43889,10 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-#, fuzzy
-msgid "Returns the [PhysicsDirectBodyState] of the body."
-msgstr "Retourne le [enum BitmaskMode] de l'autotile."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
+msgstr ""
#: doc/classes/PhysicsServer.xml:370
msgid ""
@@ -44665,27 +44919,27 @@ msgstr ""
msgid "Removes an element from the array by index."
msgstr ""
-#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolColorArray.xml:66
-#: doc/classes/PoolIntArray.xml:67 doc/classes/PoolRealArray.xml:67
-#: doc/classes/PoolStringArray.xml:74 doc/classes/PoolVector2Array.xml:67
-#: doc/classes/PoolVector3Array.xml:66
+#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolIntArray.xml:67
+#: doc/classes/PoolRealArray.xml:67
msgid ""
"Sets the size of the array. If the array is grown, reserves elements at the "
"end of the array. If the array is shrunk, truncates the array to the new "
-"size."
+"size.\n"
+"[b]Note:[/b] Added elements are not automatically initialized to 0 and will "
+"contain garbage, i.e. indeterminate values."
msgstr ""
-#: doc/classes/PoolByteArray.xml:121
+#: doc/classes/PoolByteArray.xml:122
msgid "Changes the byte at the given index."
msgstr ""
-#: doc/classes/PoolByteArray.xml:127 doc/classes/PoolColorArray.xml:79
-#: doc/classes/PoolRealArray.xml:80 doc/classes/PoolStringArray.xml:87
+#: doc/classes/PoolByteArray.xml:128 doc/classes/PoolColorArray.xml:79
+#: doc/classes/PoolRealArray.xml:81 doc/classes/PoolStringArray.xml:87
#: doc/classes/PoolVector2Array.xml:80 doc/classes/PoolVector3Array.xml:79
msgid "Returns the size of the array."
msgstr ""
-#: doc/classes/PoolByteArray.xml:135
+#: doc/classes/PoolByteArray.xml:136
msgid ""
"Returns the slice of the [PoolByteArray] between indices (inclusive) as a "
"new [PoolByteArray]. Any negative index is considered to be from the end of "
@@ -44719,6 +44973,14 @@ msgstr "Ajoute un [PackedVector3Array] à la fin de ce tableau."
msgid "Appends a value to the array."
msgstr ""
+#: doc/classes/PoolColorArray.xml:66 doc/classes/PoolStringArray.xml:74
+#: doc/classes/PoolVector2Array.xml:67 doc/classes/PoolVector3Array.xml:66
+msgid ""
+"Sets the size of the array. If the array is grown, reserves elements at the "
+"end of the array. If the array is shrunk, truncates the array to the new "
+"size."
+msgstr ""
+
#: doc/classes/PoolColorArray.xml:73
msgid "Changes the [Color] at the given index."
msgstr ""
@@ -44757,12 +45019,12 @@ msgid ""
"valid, or at the end of the array ([code]idx == size()[/code])."
msgstr ""
-#: doc/classes/PoolIntArray.xml:74
+#: doc/classes/PoolIntArray.xml:75
#, fuzzy
msgid "Changes the int at the given index."
msgstr "Modifie le [Vector2] à l’index donné."
-#: doc/classes/PoolIntArray.xml:80
+#: doc/classes/PoolIntArray.xml:81
msgid "Returns the array size."
msgstr "Retourne la taille du tableau."
@@ -44796,7 +45058,7 @@ msgstr ""
msgid "Appends a [PoolRealArray] at the end of this array."
msgstr "Ajoute un [PackedVector3Array] à la fin de ce tableau."
-#: doc/classes/PoolRealArray.xml:74
+#: doc/classes/PoolRealArray.xml:75
msgid "Changes the float at the given index."
msgstr ""
@@ -46099,18 +46361,6 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:204
msgid ""
-"The project data directory is used for storing project-specific data "
-"(metadata, shader cache, etc.).\n"
-"[b]Note:[/b] Restart the application after changing this setting.\n"
-"[b]Note:[/b] Changing this value can help on platforms or with third-party "
-"tools where specific directory patterns are disallowed. Only modify this "
-"setting if you know that your environment requires it, as changing the "
-"default can impact compatibility with some external tools or plugins which "
-"expect the default [code].import[/code] folder."
-msgstr ""
-
-#: doc/classes/ProjectSettings.xml:209
-msgid ""
"Specifies a file to override project settings. For example: [code]user://"
"custom_settings.cfg[/code]. See \"Overriding\" in the [ProjectSettings] "
"class description at the top for more information.\n"
@@ -46118,7 +46368,7 @@ msgid ""
"code] will still be read to override the project settings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:213
+#: doc/classes/ProjectSettings.xml:208
msgid ""
"If [code]true[/code], the project will save user data to its own user "
"directory (see [member application/config/custom_user_dir_name]). This "
@@ -46128,13 +46378,28 @@ msgid ""
"user data directory)/Godot/app_userdata/(project name)[/code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:216
+#: doc/classes/ProjectSettings.xml:211
+msgid ""
+"If [code]true[/code], the project will use a hidden directory ([code]."
+"import[/code]) for storing project-specific data (metadata, shader cache, "
+"etc.).\n"
+"If [code]false[/code], a non-hidden directory ([code]import[/code]) will be "
+"used instead.\n"
+"[b]Note:[/b] Restart the application after changing this setting.\n"
+"[b]Note:[/b] Changing this value can help on platforms or with third-party "
+"tools where hidden directory patterns are disallowed. Only modify this "
+"setting if you know that your environment requires it, as changing the "
+"default can impact compatibility with some external tools or plugins which "
+"expect the default [code].import[/code] folder."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:217
msgid ""
"Icon set in [code].ico[/code] format used on Windows to set the game's icon. "
"This is done automatically on start by calling [method OS.set_native_icon]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:219
+#: doc/classes/ProjectSettings.xml:220
msgid ""
"Time samples for frame deltas are subject to random variation introduced by "
"the platform, even when frames are displayed at regular intervals thanks to "
@@ -46148,14 +46413,14 @@ msgid ""
"adequate to render frames at the refresh rate."
msgstr ""
-#: doc/classes/ProjectSettings.xml:224
+#: doc/classes/ProjectSettings.xml:225
msgid ""
"[b]Experimental.[/b] Shifts the measurement of delta time for each frame to "
"just after the drawing has taken place. This may lead to more consistent "
"deltas and a reduction in frame stutters."
msgstr ""
-#: doc/classes/ProjectSettings.xml:227
+#: doc/classes/ProjectSettings.xml:228
msgid ""
"If [code]true[/code], disables printing to standard error. If [code]true[/"
"code], this also hides error and warning messages printed by [method "
@@ -46164,7 +46429,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:231
+#: doc/classes/ProjectSettings.xml:232
msgid ""
"If [code]true[/code], disables printing to standard output. This is "
"equivalent to starting the editor or project with the [code]--quiet[/code] "
@@ -46172,7 +46437,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:235
+#: doc/classes/ProjectSettings.xml:236
msgid ""
"If [code]true[/code], flushes the standard output stream every time a line "
"is printed. This affects both terminal logging and file logging.\n"
@@ -46188,20 +46453,20 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:241
+#: doc/classes/ProjectSettings.xml:242
msgid ""
"Debug build override for [member application/run/flush_stdout_on_print], as "
"performance is less important during debugging.\n"
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:245
+#: doc/classes/ProjectSettings.xml:246
msgid ""
"Forces a delay between frames in the main loop (in milliseconds). This may "
"be useful if you plan to disable vertical synchronization."
msgstr ""
-#: doc/classes/ProjectSettings.xml:248
+#: doc/classes/ProjectSettings.xml:249
msgid ""
"If [code]true[/code], enables low-processor usage mode. This setting only "
"works on desktop platforms. The screen is not redrawn if nothing changes "
@@ -46209,75 +46474,81 @@ msgid ""
"useless (and can hurt performance) in most games."
msgstr ""
-#: doc/classes/ProjectSettings.xml:251
+#: doc/classes/ProjectSettings.xml:252
msgid ""
"Amount of sleeping between frames when the low-processor usage mode is "
"enabled (in microseconds). Higher values will result in lower CPU usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:254
+#: doc/classes/ProjectSettings.xml:255
msgid "Path to the main scene file that will be loaded when the project runs."
msgstr ""
-#: doc/classes/ProjectSettings.xml:257 doc/classes/ProjectSettings.xml:260
+#: doc/classes/ProjectSettings.xml:258 doc/classes/ProjectSettings.xml:261
msgid ""
"Audio buses will disable automatically when sound goes below a given dB "
"threshold for a given time. This saves CPU as effects assigned to that bus "
"will no longer do any processing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:263
+#: doc/classes/ProjectSettings.xml:264
msgid ""
"Default [AudioBusLayout] resource file to use in the project, unless "
"overridden by the scene."
msgstr ""
-#: doc/classes/ProjectSettings.xml:266
+#: doc/classes/ProjectSettings.xml:267
msgid ""
"Specifies the audio driver to use. This setting is platform-dependent as "
"each platform supports different audio drivers. If left empty, the default "
"audio driver will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:269
+#: doc/classes/ProjectSettings.xml:270
msgid ""
"If [code]true[/code], microphone input will be allowed. This requires "
"appropriate permissions to be set when exporting to Android or iOS."
msgstr ""
-#: doc/classes/ProjectSettings.xml:272
+#: doc/classes/ProjectSettings.xml:273
msgid ""
"The mixing rate used for audio (in Hz). In general, it's better to not touch "
"this and leave it to the host operating system."
msgstr ""
-#: doc/classes/ProjectSettings.xml:275
+#: doc/classes/ProjectSettings.xml:276
msgid ""
"Safer override for [member audio/mix_rate] in the Web platform. Here "
"[code]0[/code] means \"let the browser choose\" (since some browsers do not "
"like forcing the mix rate)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:278
+#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:281
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:284
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:287
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -46287,7 +46558,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:290
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -46297,27 +46568,27 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:293
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:296
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
-#: doc/classes/ProjectSettings.xml:299
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:302
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -46325,81 +46596,81 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:305
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:308
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:311
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:314
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:317
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr ""
-#: doc/classes/ProjectSettings.xml:320
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:323
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:326
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:329
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:332
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:335
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:338
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:341
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -46407,112 +46678,112 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:344
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:347
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:350
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:353
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:356
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:359
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:362
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:365
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:368
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:371
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:374
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:377
+#: doc/classes/ProjectSettings.xml:380
#, fuzzy
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
msgstr ""
"Si [code]true[/code], le mouvement linéaire à travers l’axe Z est limité."
-#: doc/classes/ProjectSettings.xml:380
+#: doc/classes/ProjectSettings.xml:383
#, fuzzy
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
msgstr "Si [code]true[/code], le filtrage est activé."
-#: doc/classes/ProjectSettings.xml:383
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:386
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:389
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:392
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:395
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:398
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -46523,91 +46794,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:403
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr "Pile d’appels maximale autorisée pour le débogage de GDScript."
-#: doc/classes/ProjectSettings.xml:406
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:409
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:412
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:415
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:418
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:421
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:424
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:427
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:430
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:433
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:436
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:439
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr "Hotspot pour l’image de curseur de souris personnalisée."
-#: doc/classes/ProjectSettings.xml:442
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:445
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:448
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:451
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -46616,13 +46887,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:455
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:458
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -46632,7 +46903,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:463
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -46640,19 +46911,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:468
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:472
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:476
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -46666,45 +46937,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:481
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:484
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:488
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:491
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:494
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:497
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:500
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -46713,7 +46984,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:503
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -46724,7 +46995,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:507
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -46740,14 +47011,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:515
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:518
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -46755,49 +47026,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:521
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:524
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:529
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:532
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:535
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:538
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:541
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:544
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:547
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -46806,7 +47077,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:551
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -46814,7 +47085,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:555
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -46822,7 +47093,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:559
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -46832,7 +47103,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:563
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -46841,7 +47112,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:567
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -46850,7 +47121,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:571
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -46860,7 +47131,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:575
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -46868,7 +47139,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:579
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -46878,7 +47149,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:583
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -46888,7 +47159,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:587
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -46896,7 +47167,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:591
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -46905,7 +47176,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:595
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -46913,7 +47184,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:599
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -46925,478 +47196,478 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:605
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:608
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:611
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:614
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:617
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:620
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:623
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:626
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:629
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:632
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:635
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:638
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:641
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:644
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:647
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:650
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:653
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:656
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:659
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:662
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:665
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:668
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:671
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:674
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:677
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:680
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:683
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:686
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:689
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:692
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:695
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:698
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:701
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:704
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:707
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:710
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:713
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:716
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:719
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:722
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:725
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:728
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:731
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:734
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:737
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:740
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:743
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:746
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:749
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:752
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:755
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:758
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:761
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:764
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:767
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:770
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:773
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:776
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:779
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:782
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:785
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:788
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:791
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:794
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:797
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:800
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:803
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:806
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:809
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:812
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:815
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:818
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:821
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:824
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:827
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:830
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:833
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:836
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:839
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:842
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:845
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:848
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:851
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:854
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:857
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:860
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:863
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:866
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:869
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:872
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:875
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:878
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:881
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr ""
-#: doc/classes/ProjectSettings.xml:884
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:887
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:890
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:893
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:896
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:899
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:902
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:905
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:908
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:911
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:914
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:917
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:920
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:923
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:926
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:929
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:932
+#: doc/classes/ProjectSettings.xml:935
#, fuzzy
msgid "If [code]true[/code], logs all output to files."
msgstr "Si [code]true[/code], enregistre toutes les sorties aux fichiers."
-#: doc/classes/ProjectSettings.xml:935
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:938
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:941
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:946
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:949
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -47404,92 +47675,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:952
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:955
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:958
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:961
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:964
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:967
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:970
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:973
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:976
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:979
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:982
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:985
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:988
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:991
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:994
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:997
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1000
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1003
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -47499,19 +47770,19 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1007
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1010
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1013
+#: doc/classes/ProjectSettings.xml:1016
#, fuzzy
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
@@ -47521,14 +47792,14 @@ msgstr ""
"Taille de la table de hachage utilisée pour l'algorithme de grille de "
"hachage 2D à large phase."
-#: doc/classes/ProjectSettings.xml:1017
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1021
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -47541,7 +47812,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1025
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -47553,7 +47824,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1033
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -47565,7 +47836,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1041
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -47578,7 +47849,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1045
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -47586,28 +47857,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1049
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1053
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1056
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1059
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -47617,25 +47888,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1063
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1066
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1069
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1072
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -47648,7 +47919,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1076
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -47660,7 +47931,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1084
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -47672,7 +47943,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1092
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -47685,13 +47956,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1096
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1099
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -47699,11 +47970,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1103
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1106
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -47717,7 +47988,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1112
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -47726,7 +47997,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1116
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -47742,7 +48013,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1121
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -47752,7 +48023,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1125
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -47762,7 +48033,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1129
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -47773,7 +48044,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1133
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -47783,7 +48054,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1137
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -47791,7 +48062,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1141
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -47802,7 +48073,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1145
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -47817,7 +48088,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1151
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -47826,13 +48097,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1156
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1159
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -47841,7 +48112,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1162
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -47851,7 +48122,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1165
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -47863,7 +48134,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1168
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -47873,24 +48144,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1171
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1174
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1177
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1180
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -47899,7 +48170,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1183
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -47907,7 +48178,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1186
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -47916,7 +48187,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1189
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -47926,7 +48197,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1193
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -47934,31 +48205,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1197
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1200
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1203
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1206
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1209
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -47966,7 +48237,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1212
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -47976,46 +48247,53 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1215
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1218
+#: doc/classes/ProjectSettings.xml:1221
msgid ""
-"If [code]true[/code] and available on the target device, enables high "
-"floating point precision for all shader computations in GLES2.\n"
+"iOS specific override for [member rendering/gles2/compatibility/"
+"disable_half_float], due to poor support for half-float vertex compression "
+"on many devices."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1224
+msgid ""
+"If [code]true[/code] and available on the target Android device, enables "
+"high floating point precision for all shader computations in GLES2.\n"
"[b]Warning:[/b] High floating point precision can be extremely slow on older "
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1225
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1228
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1231
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1234
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -48023,7 +48301,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1237
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -48033,7 +48311,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1240
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -48042,7 +48320,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1243
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -48051,14 +48329,14 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1246
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1249
+#: doc/classes/ProjectSettings.xml:1255
#, fuzzy
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
@@ -48067,7 +48345,7 @@ msgstr ""
"Si [code]true[/code], la [SpinBox] sera modifiable. Sinon, elle sera en "
"lecture seule."
-#: doc/classes/ProjectSettings.xml:1252
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -48076,7 +48354,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1255
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -48084,7 +48362,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1258
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -48093,7 +48371,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -48103,13 +48381,13 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1267
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1277
#, fuzzy
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
@@ -48119,7 +48397,7 @@ msgstr ""
"Si [code]true[/code], l’état de la clé est pressé. Si [code]false[/code], "
"l’état de la clé est libéré."
-#: doc/classes/ProjectSettings.xml:1274
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -48128,13 +48406,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -48144,46 +48422,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1293
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1296
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1299
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1302
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1305
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -48193,7 +48471,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -48205,7 +48483,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -48213,7 +48491,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1316
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -48221,7 +48499,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -48230,7 +48508,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1323
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -48244,7 +48522,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1328
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -48254,7 +48532,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1331
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -48263,7 +48541,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1334
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -48273,54 +48551,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1337
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1340
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1343
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1346
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1349
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1352
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1355
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1358
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -48331,61 +48609,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1365
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1368
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1371
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1374
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1377
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1380
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1383
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1386
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -48396,7 +48674,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -48405,26 +48683,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1393 doc/classes/ProjectSettings.xml:1396
#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1405
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1408
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1411
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -48435,20 +48713,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1418
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -48460,52 +48738,52 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1428
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1435
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1438
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1441
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1444
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1447
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1450
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1453
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -48513,7 +48791,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -48523,10 +48801,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -48535,10 +48813,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -48547,10 +48825,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -48559,10 +48837,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -48571,10 +48849,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -49255,40 +49533,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr "Retourne la zone du [Rect2]."
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -49296,14 +49588,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -51658,6 +51950,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -51675,7 +51983,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -51683,11 +51991,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -51697,19 +52005,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -56107,7 +56415,6 @@ msgstr ""
"de la [code]position[/code]."
#: doc/classes/String.xml:272
-#, fuzzy
msgid ""
"Finds the first occurrence of a substring. Returns the starting position of "
"the substring or [code]-1[/code] if not found. Optionally, the initial "
@@ -56120,10 +56427,17 @@ msgid ""
" pass\n"
"[/codeblock]"
msgstr ""
-"Trouve la première occurence d'une sous-chaîne de caractères. Retourne la "
+"Trouve la première occurrence d'une sous-chaîne de caractères. Retourne la "
"position de départ de la sous-chaîne de caractères ou [code]-1[/code] si non "
"trouvée. Optionnellement, l'index de recherche initial peut être passé (en "
-"tant qu'argument) ."
+"tant qu'argument).\n"
+"[b]Note:[/b] Si vous voulez simplement savoir si une chaîne contient une "
+"sous-chaîne, utilisez l'opérateur [code]in[/code] comme suit:\n"
+"[codeblock]\n"
+"# Évaluera à `false`.\n"
+"if \"i\" in \"team\":\n"
+" pass\n"
+"[/codeblock]"
#: doc/classes/String.xml:285
msgid ""
@@ -57312,20 +57626,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -57336,28 +57655,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -57369,19 +57688,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
@@ -60276,31 +60595,38 @@ msgid "Text [Color] used when the [ToolButton] is disabled."
msgstr "Icône à afficher lorsque le [CheckButton] est coché et désactivé."
#: doc/classes/ToolButton.xml:39
-msgid "Text [Color] used when the [ToolButton] is being hovered."
+msgid ""
+"Text [Color] used when the [ToolButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/ToolButton.xml:42
+msgid "Text [Color] used when the [ToolButton] is being hovered."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:45
#, fuzzy
msgid "Text [Color] used when the [ToolButton] is being pressed."
msgstr ""
"Le [StyleBox] qui s'affiche en arrière-plan lorsque l'on appuie sur le "
"[CheckButton]."
-#: doc/classes/ToolButton.xml:45
+#: doc/classes/ToolButton.xml:48
msgid "[StyleBox] used when the [ToolButton] is being hovered."
msgstr ""
-#: doc/classes/ToolButton.xml:48
+#: doc/classes/ToolButton.xml:51
#, fuzzy
msgid "The horizontal space between [ToolButton]'s icon and text."
msgstr "L'espacement entre l'icône de l'élément et le texte."
-#: doc/classes/ToolButton.xml:51
+#: doc/classes/ToolButton.xml:54
#, fuzzy
msgid "Default [StyleBox] for the [ToolButton]."
msgstr "[StyleBox] par défaut pour le [Button]."
-#: doc/classes/ToolButton.xml:54
+#: doc/classes/ToolButton.xml:57
#, fuzzy
msgid "[StyleBox] used when the [ToolButton] is being pressed."
msgstr ""
@@ -72072,8 +72398,8 @@ msgid ""
"until you get a [signal connection_closed] signal to achieve the clean "
"close. See [method WebSocketPeer.close] for more details."
msgstr ""
-"Émis lorsque le serveur demande une fermeture propre. Vous devriez continuer "
-"à voter jusqu’à ce que vous obteniez un signal [signal connection_closed] "
+"Émit lorsque le serveur demande une fermeture propre. Vous devriez continuer "
+"à sonder jusqu'à ce que vous obteniez un signal [signal connection_closed] "
"pour obtenir la fermeture propre. Voir [method WebSocketPeer.close] pour "
"plus de détails."
@@ -72994,6 +73320,17 @@ msgstr ""
"Si [code]true[/code] (vrai), les nœuds enfants sont triés, sinon le tri est "
"désactivé."
+#~ msgid "Returns this [AABB] expanded to include a given point."
+#~ msgstr "Retourne cette [AABB] élargie pour inclure un point donné."
+
+#, fuzzy
+#~ msgid "Returns the [PhysicsDirectBodyState] of the body."
+#~ msgstr "Retourne le [enum BitmaskMode] de l'autotile."
+
+#, fuzzy
+#~ msgid "Emitted when the resource value was set and user clicked to edit it."
+#~ msgstr "Émis lorsqu'une interface est supprimée."
+
#~ msgid "Returns the label used for built-in text."
#~ msgstr "Retourne l’étiquette utilisée pour le texte intégré."
diff --git a/doc/translations/gl.po b/doc/translations/gl.po
index 46edb208d7..6cf999916b 100644
--- a/doc/translations/gl.po
+++ b/doc/translations/gl.po
@@ -21,43 +21,43 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.7-dev\n"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Description"
msgstr "Descrición"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Tutorials"
msgstr "Titoriais"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Properties"
msgstr "Propiedades"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Methods"
msgstr "Métodos"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Theme Properties"
msgstr "Propiedades do Tema"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Signals"
msgstr "Sinais"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Enumerations"
msgstr ""
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Constants"
msgstr "Constantes"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Property Descriptions"
msgstr "Descrición de Propiedades"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Method Descriptions"
msgstr "Descrición de Métodos"
@@ -3588,112 +3588,121 @@ msgid ""
msgstr ""
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr ""
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
msgstr ""
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
msgstr ""
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
msgstr ""
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr ""
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr ""
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr ""
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
msgstr ""
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr ""
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
msgstr ""
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
msgstr ""
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr ""
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
"positive.\n"
@@ -4765,7 +4774,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -6198,21 +6207,25 @@ msgstr ""
#: doc/classes/Area.xml:17
msgid ""
-"Returns a list of intersecting [Area]s. For performance reasons (collisions "
-"are all processed at the same time) this list is modified once during the "
-"physics step, not immediately after objects are moved. Consider using "
-"signals instead."
+"Returns a list of intersecting [Area]s. The overlapping area's [member "
+"CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:23
+#: doc/classes/Area.xml:24
msgid ""
-"Returns a list of intersecting [PhysicsBody]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody]s. The overlapping body's "
+"[member CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:30
+#: doc/classes/Area.xml:32
msgid ""
"If [code]true[/code], the given area overlaps the Area.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6220,7 +6233,7 @@ msgid ""
"physics step. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:38
+#: doc/classes/Area.xml:40
msgid ""
"If [code]true[/code], the given physics body overlaps the Area.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6231,7 +6244,7 @@ msgid ""
"their tiles with collision shapes as a virtual physics body)."
msgstr ""
-#: doc/classes/Area.xml:46
+#: doc/classes/Area.xml:48
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
"velocity lost per second.\n"
@@ -6239,41 +6252,41 @@ msgid ""
"details about damping."
msgstr ""
-#: doc/classes/Area.xml:50 doc/classes/Area2D.xml:52
+#: doc/classes/Area.xml:52 doc/classes/Area2D.xml:54
msgid "The name of the area's audio bus."
msgstr ""
-#: doc/classes/Area.xml:53 doc/classes/Area2D.xml:55
+#: doc/classes/Area.xml:55 doc/classes/Area2D.xml:57
msgid ""
"If [code]true[/code], the area's audio bus overrides the default audio bus."
msgstr ""
-#: doc/classes/Area.xml:56
+#: doc/classes/Area.xml:58
msgid ""
"The area's gravity intensity (in meters per second squared). This value "
"multiplies the gravity vector. This is useful to alter the force of gravity "
"without altering its direction."
msgstr ""
-#: doc/classes/Area.xml:59 doc/classes/Area2D.xml:61
+#: doc/classes/Area.xml:61 doc/classes/Area2D.xml:63
msgid ""
"The falloff factor for point gravity. The greater the value, the faster "
"gravity decreases with distance."
msgstr ""
-#: doc/classes/Area.xml:62 doc/classes/Area2D.xml:64
+#: doc/classes/Area.xml:64 doc/classes/Area2D.xml:66
msgid ""
"If [code]true[/code], gravity is calculated from a point (set via [member "
"gravity_vec]). See also [member space_override]."
msgstr ""
-#: doc/classes/Area.xml:65 doc/classes/Area2D.xml:67
+#: doc/classes/Area.xml:67 doc/classes/Area2D.xml:69
msgid ""
"The area's gravity vector (not normalized). If gravity is a point (see "
"[member gravity_point]), this will be the point of attraction."
msgstr ""
-#: doc/classes/Area.xml:68
+#: doc/classes/Area.xml:70
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
"velocity lost per second.\n"
@@ -6281,61 +6294,61 @@ msgid ""
"about damping."
msgstr ""
-#: doc/classes/Area.xml:72 doc/classes/Area2D.xml:74
+#: doc/classes/Area.xml:74 doc/classes/Area2D.xml:76
msgid "If [code]true[/code], other monitoring areas can detect this area."
msgstr ""
-#: doc/classes/Area.xml:75 doc/classes/Area2D.xml:77
+#: doc/classes/Area.xml:77 doc/classes/Area2D.xml:79
msgid ""
"If [code]true[/code], the area detects bodies or areas entering and exiting "
"it."
msgstr ""
-#: doc/classes/Area.xml:78 doc/classes/Area2D.xml:80
+#: doc/classes/Area.xml:80 doc/classes/Area2D.xml:82
msgid "The area's priority. Higher priority areas are processed first."
msgstr ""
-#: doc/classes/Area.xml:81
+#: doc/classes/Area.xml:83
msgid ""
"The degree to which this area applies reverb to its associated audio. Ranges "
"from [code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
msgstr ""
-#: doc/classes/Area.xml:84
+#: doc/classes/Area.xml:86
msgid "If [code]true[/code], the area applies reverb to its associated audio."
msgstr ""
-#: doc/classes/Area.xml:87
+#: doc/classes/Area.xml:89
msgid "The reverb bus name to use for this area's associated audio."
msgstr ""
-#: doc/classes/Area.xml:90
+#: doc/classes/Area.xml:92
msgid ""
"The degree to which this area's reverb is a uniform effect. Ranges from "
"[code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
msgstr ""
-#: doc/classes/Area.xml:93 doc/classes/Area2D.xml:83
+#: doc/classes/Area.xml:95 doc/classes/Area2D.xml:85
msgid ""
"Override mode for gravity and damping calculations within this area. See "
"[enum SpaceOverride] for possible values."
msgstr ""
-#: doc/classes/Area.xml:100
+#: doc/classes/Area.xml:102
msgid ""
"Emitted when another Area enters this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
-#: doc/classes/Area.xml:107
+#: doc/classes/Area.xml:109
msgid ""
"Emitted when another Area exits this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
-#: doc/classes/Area.xml:117 doc/classes/Area.xml:130
+#: doc/classes/Area.xml:119 doc/classes/Area.xml:132
msgid ""
"Emitted when one of another Area's [Shape]s enters one of this Area's "
"[Shape]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6350,7 +6363,7 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:140
+#: doc/classes/Area.xml:142
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] enters this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -6359,7 +6372,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:147
+#: doc/classes/Area.xml:149
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] exits this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -6368,7 +6381,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:157 doc/classes/Area.xml:170
+#: doc/classes/Area.xml:159 doc/classes/Area.xml:172
msgid ""
"Emitted when one of a [PhysicsBody] or [GridMap]'s [Shape]s enters one of "
"this Area's [Shape]s. Requires [member monitoring] to be set to [code]true[/"
@@ -6385,29 +6398,29 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:180 doc/classes/Area2D.xml:170
+#: doc/classes/Area.xml:182 doc/classes/Area2D.xml:172
msgid "This area does not affect gravity/damping."
msgstr ""
-#: doc/classes/Area.xml:183 doc/classes/Area2D.xml:173
+#: doc/classes/Area.xml:185 doc/classes/Area2D.xml:175
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order)."
msgstr ""
-#: doc/classes/Area.xml:186 doc/classes/Area2D.xml:176
+#: doc/classes/Area.xml:188 doc/classes/Area2D.xml:178
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order), ignoring any lower priority areas."
msgstr ""
-#: doc/classes/Area.xml:189 doc/classes/Area2D.xml:179
+#: doc/classes/Area.xml:191 doc/classes/Area2D.xml:181
msgid ""
"This area replaces any gravity/damping, even the defaults, ignoring any "
"lower priority areas."
msgstr ""
-#: doc/classes/Area.xml:192 doc/classes/Area2D.xml:182
+#: doc/classes/Area.xml:194 doc/classes/Area2D.xml:184
msgid ""
"This area replaces any gravity/damping calculated so far (in [member "
"priority] order), but keeps calculating the rest of the areas."
@@ -6442,21 +6455,25 @@ msgstr ""
#: doc/classes/Area2D.xml:19
msgid ""
-"Returns a list of intersecting [Area2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [Area2D]s. The overlapping area's [member "
+"CollisionObject2D.collision_layer] must be part of this area's [member "
+"CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:25
+#: doc/classes/Area2D.xml:26
msgid ""
-"Returns a list of intersecting [PhysicsBody2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody2D]s. The overlapping body's "
+"[member CollisionObject2D.collision_layer] must be part of this area's "
+"[member CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:32
+#: doc/classes/Area2D.xml:34
msgid ""
"If [code]true[/code], the given area overlaps the Area2D.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6464,7 +6481,7 @@ msgid ""
"the physics step. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:40
+#: doc/classes/Area2D.xml:42
msgid ""
"If [code]true[/code], the given physics body overlaps the Area2D.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6475,7 +6492,7 @@ msgid ""
"register their tiles with collision shapes as a virtual physics body)."
msgstr ""
-#: doc/classes/Area2D.xml:48
+#: doc/classes/Area2D.xml:50
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
"velocity lost per second.\n"
@@ -6483,14 +6500,14 @@ msgid ""
"details about damping."
msgstr ""
-#: doc/classes/Area2D.xml:58
+#: doc/classes/Area2D.xml:60
msgid ""
"The area's gravity intensity (in pixels per second squared). This value "
"multiplies the gravity vector. This is useful to alter the force of gravity "
"without altering its direction."
msgstr ""
-#: doc/classes/Area2D.xml:70
+#: doc/classes/Area2D.xml:72
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
"velocity lost per second.\n"
@@ -6498,21 +6515,21 @@ msgid ""
"about damping."
msgstr ""
-#: doc/classes/Area2D.xml:90
+#: doc/classes/Area2D.xml:92
msgid ""
"Emitted when another Area2D enters this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-#: doc/classes/Area2D.xml:97
+#: doc/classes/Area2D.xml:99
msgid ""
"Emitted when another Area2D exits this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-#: doc/classes/Area2D.xml:107
+#: doc/classes/Area2D.xml:109
msgid ""
"Emitted when one of another Area2D's [Shape2D]s enters one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6527,7 +6544,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:120
+#: doc/classes/Area2D.xml:122
msgid ""
"Emitted when one of another Area2D's [Shape2D]s exits one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6542,7 +6559,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:130
+#: doc/classes/Area2D.xml:132
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] enters this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -6551,7 +6568,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:137
+#: doc/classes/Area2D.xml:139
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] exits this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -6560,7 +6577,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:147
+#: doc/classes/Area2D.xml:149
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s enters one "
"of this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -6579,7 +6596,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:160
+#: doc/classes/Area2D.xml:162
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s exits one of "
"this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -10134,40 +10151,45 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
-"no save path is provided it will try to match the path from the current "
+"no root node is provided, parent of this node will be used as root instead. "
+"If no save path is provided it will try to match the path from the current "
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -10181,62 +10203,62 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
msgid "The rotation of the baked custom sky."
msgstr ""
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -10244,35 +10266,35 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -10280,13 +10302,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -10298,65 +10320,77 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr ""
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
msgid "Baking was successful."
msgstr ""
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr ""
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr ""
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr ""
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:133
+#: doc/classes/BakedLightmap.xml:132
+msgid ""
+"Returns if lightmapper can't be created. Unless you are using a custom "
+"lightmapper, please report this as bug."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:135
+msgid ""
+"There is no root node to start baking from. Either provide [code]from_node[/"
+"code] argument or attach this node to a parent that should be used as root."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:136
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:139
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:142
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -10804,8 +10838,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -11190,26 +11227,33 @@ msgid "Text [Color] used when the [Button] is disabled."
msgstr ""
#: doc/classes/Button.xml:77
-msgid "Text [Color] used when the [Button] is being hovered."
+msgid ""
+"Text [Color] used when the [Button] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/Button.xml:80
-msgid "Text [Color] used when the [Button] is being pressed."
+msgid "Text [Color] used when the [Button] is being hovered."
msgstr ""
#: doc/classes/Button.xml:83
-msgid "[StyleBox] used when the [Button] is being hovered."
+msgid "Text [Color] used when the [Button] is being pressed."
msgstr ""
#: doc/classes/Button.xml:86
-msgid "The horizontal space between [Button]'s icon and text."
+msgid "[StyleBox] used when the [Button] is being hovered."
msgstr ""
#: doc/classes/Button.xml:89
-msgid "Default [StyleBox] for the [Button]."
+msgid "The horizontal space between [Button]'s icon and text."
msgstr ""
#: doc/classes/Button.xml:92
+msgid "Default [StyleBox] for the [Button]."
+msgstr ""
+
+#: doc/classes/Button.xml:95
msgid "[StyleBox] used when the [Button] is being pressed."
msgstr ""
@@ -12668,80 +12712,96 @@ msgstr ""
msgid "The check icon to display when the [CheckBox] is checked."
msgstr ""
-#: doc/classes/CheckBox.xml:30
+#: doc/classes/CheckBox.xml:28
+msgid "The check icon to display when the [CheckBox] is checked and disabled."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:31
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is disabled."
msgstr ""
-#: doc/classes/CheckBox.xml:33
+#: doc/classes/CheckBox.xml:34
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is focused."
msgstr ""
-#: doc/classes/CheckBox.xml:36
+#: doc/classes/CheckBox.xml:37
msgid "The [Font] to use for the [CheckBox] text."
msgstr ""
-#: doc/classes/CheckBox.xml:39
+#: doc/classes/CheckBox.xml:40
msgid "The [CheckBox] text's font color."
msgstr ""
-#: doc/classes/CheckBox.xml:42
+#: doc/classes/CheckBox.xml:43
msgid "The [CheckBox] text's font color when it's disabled."
msgstr ""
-#: doc/classes/CheckBox.xml:45
+#: doc/classes/CheckBox.xml:46
+msgid ""
+"The [CheckBox] text's font color when it's focused. Only replaces the normal "
+"text color of the checkbox. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:49
msgid "The [CheckBox] text's font color when it's hovered."
msgstr ""
-#: doc/classes/CheckBox.xml:48
+#: doc/classes/CheckBox.xml:52
msgid "The [CheckBox] text's font color when it's hovered and pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:51
+#: doc/classes/CheckBox.xml:55
msgid "The [CheckBox] text's font color when it's pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:54
+#: doc/classes/CheckBox.xml:58
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered."
msgstr ""
-#: doc/classes/CheckBox.xml:57
+#: doc/classes/CheckBox.xml:61
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered and "
"pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:60
+#: doc/classes/CheckBox.xml:64
msgid "The separation between the check icon and the text (in pixels)."
msgstr ""
-#: doc/classes/CheckBox.xml:63 doc/classes/CheckButton.xml:58
+#: doc/classes/CheckBox.xml:67 doc/classes/CheckButton.xml:61
msgid "The [StyleBox] to display as a background."
msgstr ""
-#: doc/classes/CheckBox.xml:66
+#: doc/classes/CheckBox.xml:70
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:69
+#: doc/classes/CheckBox.xml:73
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is checked."
msgstr ""
-#: doc/classes/CheckBox.xml:74
+#: doc/classes/CheckBox.xml:78
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is unchecked."
msgstr ""
-#: doc/classes/CheckBox.xml:79
+#: doc/classes/CheckBox.xml:83
msgid "The check icon to display when the [CheckBox] is unchecked."
msgstr ""
+#: doc/classes/CheckBox.xml:86
+msgid ""
+"The check icon to display when the [CheckBox] is unchecked and disabled."
+msgstr ""
+
#: doc/classes/CheckButton.xml:4
msgid "Checkable button. See also [CheckBox]."
msgstr ""
@@ -12785,49 +12845,56 @@ msgid "The [CheckButton] text's font color when it's disabled."
msgstr ""
#: doc/classes/CheckButton.xml:40
-msgid "The [CheckButton] text's font color when it's hovered."
+msgid ""
+"The [CheckButton] text's font color when it's focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/CheckButton.xml:43
-msgid "The [CheckButton] text's font color when it's hovered and pressed."
+msgid "The [CheckButton] text's font color when it's hovered."
msgstr ""
#: doc/classes/CheckButton.xml:46
-msgid "The [CheckButton] text's font color when it's pressed."
+msgid "The [CheckButton] text's font color when it's hovered and pressed."
msgstr ""
#: doc/classes/CheckButton.xml:49
+msgid "The [CheckButton] text's font color when it's pressed."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:52
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered."
msgstr ""
-#: doc/classes/CheckButton.xml:52
+#: doc/classes/CheckButton.xml:55
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered "
"and pressed."
msgstr ""
-#: doc/classes/CheckButton.xml:55
+#: doc/classes/CheckButton.xml:58
msgid "The separation between the toggle icon and the text (in pixels)."
msgstr ""
-#: doc/classes/CheckButton.xml:61
+#: doc/classes/CheckButton.xml:64
msgid "The icon to display when the [CheckButton] is unchecked."
msgstr ""
-#: doc/classes/CheckButton.xml:64
+#: doc/classes/CheckButton.xml:67
msgid "The icon to display when the [CheckButton] is unchecked and disabled."
msgstr ""
-#: doc/classes/CheckButton.xml:67
+#: doc/classes/CheckButton.xml:70
msgid "The icon to display when the [CheckButton] is checked."
msgstr ""
-#: doc/classes/CheckButton.xml:70
+#: doc/classes/CheckButton.xml:73
msgid "The icon to display when the [CheckButton] is checked and disabled."
msgstr ""
-#: doc/classes/CheckButton.xml:73
+#: doc/classes/CheckButton.xml:76
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is pressed."
msgstr ""
@@ -14595,26 +14662,33 @@ msgid "Text [Color] used when the [ColorPickerButton] is disabled."
msgstr ""
#: doc/classes/ColorPickerButton.xml:80
-msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
+msgid ""
+"Text [Color] used when the [ColorPickerButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/ColorPickerButton.xml:83
-msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
+msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
msgstr ""
#: doc/classes/ColorPickerButton.xml:86
-msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
+msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
msgstr ""
#: doc/classes/ColorPickerButton.xml:89
-msgid "The horizontal space between [ColorPickerButton]'s icon and text."
+msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
msgstr ""
#: doc/classes/ColorPickerButton.xml:92
-msgid "Default [StyleBox] for the [ColorPickerButton]."
+msgid "The horizontal space between [ColorPickerButton]'s icon and text."
msgstr ""
#: doc/classes/ColorPickerButton.xml:95
+msgid "Default [StyleBox] for the [ColorPickerButton]."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:98
msgid "[StyleBox] used when the [ColorPickerButton] is being pressed."
msgstr ""
@@ -19826,7 +19900,8 @@ msgid ""
"get_resource_type]. They may optionally specify some import presets that "
"affect the import process. EditorImportPlugins are responsible for creating "
"the resources and saving them in the [code].import[/code] directory (see "
-"[member ProjectSettings.application/config/project_data_dir_name]).\n"
+"[member ProjectSettings.application/config/"
+"use_hidden_project_data_directory]).\n"
"Below is an example EditorImportPlugin that imports a [Mesh] from a file "
"with the extension \".special\" or \".spec\":\n"
"[codeblock]\n"
@@ -19950,7 +20025,7 @@ msgstr ""
msgid ""
"Gets the extension used to save this resource in the [code].import[/code] "
"directory (see [member ProjectSettings.application/config/"
-"project_data_dir_name])."
+"use_hidden_project_data_directory])."
msgstr ""
#: doc/classes/EditorImportPlugin.xml:130
@@ -20980,8 +21055,11 @@ msgstr ""
msgid "Emitted when the value of the edited resource was changed."
msgstr ""
-#: doc/classes/EditorResourcePicker.xml:89
-msgid "Emitted when the resource value was set and user clicked to edit it."
+#: doc/classes/EditorResourcePicker.xml:90
+msgid ""
+"Emitted when the resource value was set and user clicked to edit it. When "
+"[code]edit[/code] is [code]true[/code], the signal was caused by the context "
+"menu \"Edit\" option."
msgstr ""
#: doc/classes/EditorResourcePreview.xml:4
@@ -24709,20 +24787,31 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr ""
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -24731,14 +24820,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -24748,80 +24841,80 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
msgstr ""
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr ""
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -27555,16 +27648,18 @@ msgstr ""
#: doc/classes/Image.xml:436
msgid ""
"OpenGL texture format [code]RED[/code] with a single component and a "
-"bitdepth of 8."
+"bitdepth of 8.\n"
+"[b]Note:[/b] When using the GLES2 backend, this uses the alpha channel "
+"instead of the red channel for storage."
msgstr ""
-#: doc/classes/Image.xml:439
+#: doc/classes/Image.xml:440
msgid ""
"OpenGL texture format [code]RG[/code] with two components and a bitdepth of "
"8 for each."
msgstr ""
-#: doc/classes/Image.xml:442
+#: doc/classes/Image.xml:443
msgid ""
"OpenGL texture format [code]RGB[/code] with three components, each with a "
"bitdepth of 8.\n"
@@ -27572,7 +27667,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:446
+#: doc/classes/Image.xml:447
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 8.\n"
@@ -27580,73 +27675,73 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:450
+#: doc/classes/Image.xml:451
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 4."
msgstr ""
-#: doc/classes/Image.xml:453
+#: doc/classes/Image.xml:454
msgid ""
"OpenGL texture format [code]GL_RGB5_A1[/code] where 5 bits of depth for each "
"component of RGB and one bit for alpha."
msgstr ""
-#: doc/classes/Image.xml:456
+#: doc/classes/Image.xml:457
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 32-"
"bit floating-point value."
msgstr ""
-#: doc/classes/Image.xml:459
+#: doc/classes/Image.xml:460
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:462
+#: doc/classes/Image.xml:463
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:465
+#: doc/classes/Image.xml:466
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:468
+#: doc/classes/Image.xml:469
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 16-"
"bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:471
+#: doc/classes/Image.xml:472
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:474
+#: doc/classes/Image.xml:475
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:477
+#: doc/classes/Image.xml:478
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:480
+#: doc/classes/Image.xml:481
msgid ""
"A special OpenGL texture format where the three color components have 9 bits "
"of precision and all three share a single 5-bit exponent."
msgstr ""
-#: doc/classes/Image.xml:483
+#: doc/classes/Image.xml:484
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 1, and is the smallest variation "
@@ -27656,7 +27751,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:487
+#: doc/classes/Image.xml:488
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 2, and color data is interpreted "
@@ -27666,7 +27761,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:491
+#: doc/classes/Image.xml:492
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format also known as Block Compression 3 or BC3 that contains 64 "
@@ -27677,7 +27772,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:495
+#: doc/classes/Image.xml:496
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -27685,7 +27780,7 @@ msgid ""
"DXT5 uses for the alpha channel."
msgstr ""
-#: doc/classes/Image.xml:498
+#: doc/classes/Image.xml:499
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -27693,7 +27788,7 @@ msgid ""
"algorithm that DXT5 uses for the alpha channel."
msgstr ""
-#: doc/classes/Image.xml:501
+#: doc/classes/Image.xml:502
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned normalized "
@@ -27702,21 +27797,21 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:505
+#: doc/classes/Image.xml:506
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with signed floating-point "
"RGB components."
msgstr ""
-#: doc/classes/Image.xml:508
+#: doc/classes/Image.xml:509
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned floating-point "
"RGB components."
msgstr ""
-#: doc/classes/Image.xml:511
+#: doc/classes/Image.xml:512
msgid ""
"Texture format used on PowerVR-supported mobile platforms, uses 2-bit color "
"depth with no alpha. More information can be found [url=https://en.wikipedia."
@@ -27725,25 +27820,25 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:515
+#: doc/classes/Image.xml:516
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with an "
"alpha component."
msgstr ""
-#: doc/classes/Image.xml:518
+#: doc/classes/Image.xml:519
msgid ""
"Similar to [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with 4-"
"bit color depth and no alpha."
msgstr ""
-#: doc/classes/Image.xml:521
+#: doc/classes/Image.xml:522
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC4[/url], but with an "
"alpha component."
msgstr ""
-#: doc/classes/Image.xml:524
+#: doc/classes/Image.xml:525
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC1]Ericsson Texture Compression format 1[/"
@@ -27751,7 +27846,7 @@ msgid ""
"standard. This format cannot store an alpha channel."
msgstr ""
-#: doc/classes/Image.xml:527
+#: doc/classes/Image.xml:528
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27759,7 +27854,7 @@ msgid ""
"unsigned data."
msgstr ""
-#: doc/classes/Image.xml:530
+#: doc/classes/Image.xml:531
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27767,7 +27862,7 @@ msgid ""
"channel of signed data."
msgstr ""
-#: doc/classes/Image.xml:533
+#: doc/classes/Image.xml:534
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27775,7 +27870,7 @@ msgid ""
"of unsigned data."
msgstr ""
-#: doc/classes/Image.xml:536
+#: doc/classes/Image.xml:537
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27783,7 +27878,7 @@ msgid ""
"channels of signed data."
msgstr ""
-#: doc/classes/Image.xml:539
+#: doc/classes/Image.xml:540
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27793,7 +27888,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:543
+#: doc/classes/Image.xml:544
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27803,7 +27898,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:547
+#: doc/classes/Image.xml:548
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27814,31 +27909,31 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:551
+#: doc/classes/Image.xml:552
msgid "Represents the size of the [enum Format] enum."
msgstr ""
-#: doc/classes/Image.xml:554
+#: doc/classes/Image.xml:555
msgid ""
"Performs nearest-neighbor interpolation. If the image is resized, it will be "
"pixelated."
msgstr ""
-#: doc/classes/Image.xml:557
+#: doc/classes/Image.xml:558
msgid ""
"Performs bilinear interpolation. If the image is resized, it will be blurry. "
"This mode is faster than [constant INTERPOLATE_CUBIC], but it results in "
"lower quality."
msgstr ""
-#: doc/classes/Image.xml:560
+#: doc/classes/Image.xml:561
msgid ""
"Performs cubic interpolation. If the image is resized, it will be blurry. "
"This mode often gives better results compared to [constant "
"INTERPOLATE_BILINEAR], at the cost of being slower."
msgstr ""
-#: doc/classes/Image.xml:563
+#: doc/classes/Image.xml:564
msgid ""
"Performs bilinear separately on the two most-suited mipmap levels, then "
"linearly interpolates between them.\n"
@@ -27853,55 +27948,55 @@ msgid ""
"a new set will be generated for the resulting image."
msgstr ""
-#: doc/classes/Image.xml:570
+#: doc/classes/Image.xml:571
msgid ""
"Performs Lanczos interpolation. This is the slowest image resizing mode, but "
"it typically gives the best results, especially when downscalng images."
msgstr ""
-#: doc/classes/Image.xml:573
+#: doc/classes/Image.xml:574
msgid "Image does not have alpha."
msgstr ""
-#: doc/classes/Image.xml:576
+#: doc/classes/Image.xml:577
msgid "Image stores alpha in a single bit."
msgstr ""
-#: doc/classes/Image.xml:579
+#: doc/classes/Image.xml:580
msgid "Image uses alpha."
msgstr ""
-#: doc/classes/Image.xml:582
+#: doc/classes/Image.xml:583
msgid "Use S3TC compression."
msgstr ""
-#: doc/classes/Image.xml:585
+#: doc/classes/Image.xml:586
msgid "Use PVRTC2 compression."
msgstr ""
-#: doc/classes/Image.xml:588
+#: doc/classes/Image.xml:589
msgid "Use PVRTC4 compression."
msgstr ""
-#: doc/classes/Image.xml:591
+#: doc/classes/Image.xml:592
msgid "Use ETC compression."
msgstr ""
-#: doc/classes/Image.xml:594
+#: doc/classes/Image.xml:595
msgid "Use ETC2 compression."
msgstr ""
-#: doc/classes/Image.xml:597
+#: doc/classes/Image.xml:598
msgid ""
"Source texture (before compression) is a regular texture. Default for all "
"textures."
msgstr ""
-#: doc/classes/Image.xml:600
+#: doc/classes/Image.xml:601
msgid "Source texture (before compression) is in sRGB space."
msgstr ""
-#: doc/classes/Image.xml:603
+#: doc/classes/Image.xml:604
msgid ""
"Source texture (before compression) is a normal texture (e.g. it can be "
"compressed into two channels)."
@@ -28124,6 +28219,17 @@ msgstr ""
#: doc/classes/Input.xml:43
msgid ""
+"Sends all input events which are in the current buffer to the game loop. "
+"These events may have been buffered as a result of accumulated input "
+"([method set_use_accumulated_input]) or agile input flushing ([member "
+"ProjectSettings.input_devices/buffering/agile_event_flushing]).\n"
+"The engine will already do this itself at key execution points (at least "
+"once per frame). However, this can be useful in advanced cases where you "
+"want precise control over the timing of event handling."
+msgstr ""
+
+#: doc/classes/Input.xml:50
+msgid ""
"Returns the acceleration of the device's accelerometer sensor, if the device "
"has one. Otherwise, the method returns [constant Vector3.ZERO].\n"
"Note this method returns an empty [Vector3] when running from the editor "
@@ -28135,7 +28241,7 @@ msgid ""
"the Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:53
+#: doc/classes/Input.xml:60
msgid ""
"Returns a value between 0 and 1 representing the raw intensity of the given "
"action, ignoring the action's deadzone. In most cases, you should use "
@@ -28145,7 +28251,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:62
+#: doc/classes/Input.xml:69
msgid ""
"Returns a value between 0 and 1 representing the intensity of the given "
"action. In a joypad, for example, the further away the axis (analog sticks "
@@ -28157,7 +28263,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:71
+#: doc/classes/Input.xml:78
msgid ""
"Get axis input by specifying two actions, one negative and one positive.\n"
"This is a shorthand for writing [code]Input."
@@ -28165,17 +28271,17 @@ msgid ""
"get_action_strength(\"negative_action\")[/code]."
msgstr ""
-#: doc/classes/Input.xml:78
+#: doc/classes/Input.xml:85
msgid ""
"Returns an [Array] containing the device IDs of all currently connected "
"joypads."
msgstr ""
-#: doc/classes/Input.xml:84
+#: doc/classes/Input.xml:91
msgid "Returns the currently assigned cursor shape (see [enum CursorShape])."
msgstr ""
-#: doc/classes/Input.xml:90
+#: doc/classes/Input.xml:97
msgid ""
"Returns the gravity of the device's accelerometer sensor, if the device has "
"one. Otherwise, the method returns [constant Vector3.ZERO].\n"
@@ -28185,7 +28291,7 @@ msgid ""
"Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:97
+#: doc/classes/Input.xml:104
msgid ""
"Returns the rotation rate in rad/s around a device's X, Y, and Z axes of the "
"gyroscope sensor, if the device has one. Otherwise, the method returns "
@@ -28194,53 +28300,53 @@ msgid ""
"it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:106
+#: doc/classes/Input.xml:113
msgid ""
"Returns the current value of the joypad axis at given index (see [enum "
"JoystickList])."
msgstr ""
-#: doc/classes/Input.xml:113
+#: doc/classes/Input.xml:120
msgid "Returns the index of the provided axis name."
msgstr ""
-#: doc/classes/Input.xml:120
+#: doc/classes/Input.xml:127
msgid ""
"Receives a [enum JoystickList] axis and returns its equivalent name as a "
"string."
msgstr ""
-#: doc/classes/Input.xml:127
+#: doc/classes/Input.xml:134
msgid "Returns the index of the provided button name."
msgstr ""
-#: doc/classes/Input.xml:134
+#: doc/classes/Input.xml:141
msgid ""
"Receives a gamepad button from [enum JoystickList] and returns its "
"equivalent name as a string."
msgstr ""
-#: doc/classes/Input.xml:141
+#: doc/classes/Input.xml:148
msgid ""
"Returns a SDL2-compatible device GUID on platforms that use gamepad "
"remapping. Returns [code]\"Default Gamepad\"[/code] otherwise."
msgstr ""
-#: doc/classes/Input.xml:148
+#: doc/classes/Input.xml:155
msgid "Returns the name of the joypad at the specified device index."
msgstr ""
-#: doc/classes/Input.xml:155
+#: doc/classes/Input.xml:162
msgid "Returns the duration of the current vibration effect in seconds."
msgstr ""
-#: doc/classes/Input.xml:162
+#: doc/classes/Input.xml:169
msgid ""
"Returns the strength of the joypad vibration: x is the strength of the weak "
"motor, and y is the strength of the strong motor."
msgstr ""
-#: doc/classes/Input.xml:168
+#: doc/classes/Input.xml:175
msgid ""
"Returns the mouse speed for the last time the cursor was moved, and this "
"until the next frame where the mouse moves. This means that even if the "
@@ -28248,7 +28354,7 @@ msgid ""
"motion."
msgstr ""
-#: doc/classes/Input.xml:174
+#: doc/classes/Input.xml:181
msgid ""
"Returns the magnetic field strength in micro-Tesla for all axes of the "
"device's magnetometer sensor, if the device has one. Otherwise, the method "
@@ -28257,17 +28363,17 @@ msgid ""
"platforms, it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:181
+#: doc/classes/Input.xml:188
msgid ""
"Returns mouse buttons as a bitmask. If multiple mouse buttons are pressed at "
"the same time, the bits are added together."
msgstr ""
-#: doc/classes/Input.xml:187
+#: doc/classes/Input.xml:194
msgid "Returns the mouse mode. See the constants for more information."
msgstr ""
-#: doc/classes/Input.xml:198
+#: doc/classes/Input.xml:205
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -28280,7 +28386,7 @@ msgid ""
"want (on the range of 0 to 1)."
msgstr ""
-#: doc/classes/Input.xml:208
+#: doc/classes/Input.xml:215
msgid ""
"Returns [code]true[/code] when the user starts pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user pressed down "
@@ -28292,7 +28398,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:218
+#: doc/classes/Input.xml:225
msgid ""
"Returns [code]true[/code] when the user stops pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user released the "
@@ -28302,7 +28408,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:227
+#: doc/classes/Input.xml:234
msgid ""
"Returns [code]true[/code] if you are pressing the action event. Note that if "
"an action has multiple buttons assigned and more than one of them is "
@@ -28313,13 +28419,13 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:236
+#: doc/classes/Input.xml:243
msgid ""
"Returns [code]true[/code] if you are pressing the joypad button (see [enum "
"JoystickList])."
msgstr ""
-#: doc/classes/Input.xml:243
+#: doc/classes/Input.xml:250
msgid ""
"Returns [code]true[/code] if the system knows the specified device. This "
"means that it sets all button and axis indices exactly as defined in [enum "
@@ -28327,19 +28433,19 @@ msgid ""
"but you can still retrieve events from them."
msgstr ""
-#: doc/classes/Input.xml:250
+#: doc/classes/Input.xml:257
msgid ""
"Returns [code]true[/code] if you are pressing the key. You can pass a [enum "
"KeyList] constant."
msgstr ""
-#: doc/classes/Input.xml:257
+#: doc/classes/Input.xml:264
msgid ""
"Returns [code]true[/code] if you are pressing the mouse button specified "
"with [enum ButtonList]."
msgstr ""
-#: doc/classes/Input.xml:267
+#: doc/classes/Input.xml:274
msgid ""
"Notifies the [Input] singleton that a connection has changed, to update the "
"state for the [code]device[/code] index.\n"
@@ -28348,7 +28454,7 @@ msgid ""
"triggered internally."
msgstr ""
-#: doc/classes/Input.xml:275
+#: doc/classes/Input.xml:282
msgid ""
"Feeds an [InputEvent] to the game. Can be used to artificially trigger input "
"events from code. Also generates [method Node._input] calls.\n"
@@ -28361,12 +28467,21 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Input.xml:289
+#: doc/classes/Input.xml:296
msgid ""
"Removes all mappings from the internal database that match the given GUID."
msgstr ""
-#: doc/classes/Input.xml:298
+#: doc/classes/Input.xml:303
+msgid ""
+"Sets the acceleration value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:313
msgid ""
"Sets a custom mouse cursor image, which is only visible inside the game "
"window. The hotspot can also be specified. Passing [code]null[/code] to the "
@@ -28381,7 +28496,7 @@ msgid ""
"compression mode can't be used for custom cursors."
msgstr ""
-#: doc/classes/Input.xml:309
+#: doc/classes/Input.xml:324
msgid ""
"Sets the default cursor shape to be used in the viewport instead of "
"[constant CURSOR_ARROW].\n"
@@ -28391,11 +28506,38 @@ msgid ""
"cursor immediately."
msgstr ""
-#: doc/classes/Input.xml:318
+#: doc/classes/Input.xml:333
+msgid ""
+"Sets the gravity value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:341
+msgid ""
+"Sets the value of the rotation rate of the gyroscope sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:349
+msgid ""
+"Sets the value of the magnetic field of the magnetometer sensor. Can be used "
+"for debugging on devices without a hardware sensor, for example in an editor "
+"on a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:357
msgid "Sets the mouse mode. See the constants for more information."
msgstr ""
-#: doc/classes/Input.xml:325
+#: doc/classes/Input.xml:364
msgid ""
"Enables or disables the accumulation of similar input events sent by the "
"operating system. When input accumulation is enabled, all input events "
@@ -28409,7 +28551,7 @@ msgid ""
"results that closely follow the actual input."
msgstr ""
-#: doc/classes/Input.xml:336
+#: doc/classes/Input.xml:375
msgid ""
"Starts to vibrate the joypad. Joypads usually come with two rumble motors, a "
"strong and a weak one. [code]weak_magnitude[/code] is the strength of the "
@@ -28422,34 +28564,34 @@ msgid ""
"few seconds."
msgstr ""
-#: doc/classes/Input.xml:344
+#: doc/classes/Input.xml:383
msgid "Stops the vibration of the joypad."
msgstr ""
-#: doc/classes/Input.xml:351
+#: doc/classes/Input.xml:390
msgid ""
"Vibrate Android and iOS devices.\n"
"[b]Note:[/b] It needs [code]VIBRATE[/code] permission for Android at export "
"settings. iOS does not support duration."
msgstr ""
-#: doc/classes/Input.xml:359
+#: doc/classes/Input.xml:398
msgid "Sets the mouse position to the specified vector."
msgstr ""
-#: doc/classes/Input.xml:368
+#: doc/classes/Input.xml:407
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
-#: doc/classes/Input.xml:374
+#: doc/classes/Input.xml:413
msgid "Makes the mouse cursor visible if it is hidden."
msgstr ""
-#: doc/classes/Input.xml:377
+#: doc/classes/Input.xml:416
msgid "Makes the mouse cursor hidden if it is visible."
msgstr ""
-#: doc/classes/Input.xml:380
+#: doc/classes/Input.xml:419
msgid ""
"Captures the mouse. The mouse will be hidden and its position locked at the "
"center of the screen.\n"
@@ -28457,83 +28599,83 @@ msgid ""
"need to use [member InputEventMouseMotion.relative]."
msgstr ""
-#: doc/classes/Input.xml:384
+#: doc/classes/Input.xml:423
msgid "Makes the mouse cursor visible but confines it to the game window."
msgstr ""
-#: doc/classes/Input.xml:387
+#: doc/classes/Input.xml:426
msgid "Arrow cursor. Standard, default pointing cursor."
msgstr ""
-#: doc/classes/Input.xml:390
+#: doc/classes/Input.xml:429
msgid ""
"I-beam cursor. Usually used to show where the text cursor will appear when "
"the mouse is clicked."
msgstr ""
-#: doc/classes/Input.xml:393
+#: doc/classes/Input.xml:432
msgid ""
"Pointing hand cursor. Usually used to indicate the pointer is over a link or "
"other interactable item."
msgstr ""
-#: doc/classes/Input.xml:396
+#: doc/classes/Input.xml:435
msgid ""
"Cross cursor. Typically appears over regions in which a drawing operation "
"can be performed or for selections."
msgstr ""
-#: doc/classes/Input.xml:399
+#: doc/classes/Input.xml:438
msgid ""
"Wait cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application is still usable during the "
"operation."
msgstr ""
-#: doc/classes/Input.xml:402
+#: doc/classes/Input.xml:441
msgid ""
"Busy cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application isn't usable during the "
"operation (e.g. something is blocking its main thread)."
msgstr ""
-#: doc/classes/Input.xml:405
+#: doc/classes/Input.xml:444
msgid "Drag cursor. Usually displayed when dragging something."
msgstr ""
-#: doc/classes/Input.xml:408
+#: doc/classes/Input.xml:447
msgid ""
"Can drop cursor. Usually displayed when dragging something to indicate that "
"it can be dropped at the current position."
msgstr ""
-#: doc/classes/Input.xml:411
+#: doc/classes/Input.xml:450
msgid ""
"Forbidden cursor. Indicates that the current action is forbidden (for "
"example, when dragging something) or that the control at a position is "
"disabled."
msgstr ""
-#: doc/classes/Input.xml:414
+#: doc/classes/Input.xml:453
msgid ""
"Vertical resize mouse cursor. A double-headed vertical arrow. It tells the "
"user they can resize the window or the panel vertically."
msgstr ""
-#: doc/classes/Input.xml:417
+#: doc/classes/Input.xml:456
msgid ""
"Horizontal resize mouse cursor. A double-headed horizontal arrow. It tells "
"the user they can resize the window or the panel horizontally."
msgstr ""
-#: doc/classes/Input.xml:420
+#: doc/classes/Input.xml:459
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the bottom left to the top right. It tells the user they can resize the "
"window or the panel both horizontally and vertically."
msgstr ""
-#: doc/classes/Input.xml:423
+#: doc/classes/Input.xml:462
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the top left to the bottom right, the opposite of [constant "
@@ -28541,23 +28683,23 @@ msgid ""
"both horizontally and vertically."
msgstr ""
-#: doc/classes/Input.xml:426
+#: doc/classes/Input.xml:465
msgid "Move cursor. Indicates that something can be moved."
msgstr ""
-#: doc/classes/Input.xml:429
+#: doc/classes/Input.xml:468
msgid ""
"Vertical split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_VSIZE]."
msgstr ""
-#: doc/classes/Input.xml:432
+#: doc/classes/Input.xml:471
msgid ""
"Horizontal split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_HSIZE]."
msgstr ""
-#: doc/classes/Input.xml:435
+#: doc/classes/Input.xml:474
msgid "Help cursor. Usually a question mark."
msgstr ""
@@ -28965,7 +29107,9 @@ msgid "The drag position."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -30264,7 +30408,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30329,22 +30474,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -30359,7 +30506,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -30367,19 +30514,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -30447,7 +30594,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30505,7 +30653,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -31787,14 +31937,21 @@ msgid "Default text [Color] of the [LinkButton]."
msgstr ""
#: doc/classes/LinkButton.xml:46
-msgid "Text [Color] used when the [LinkButton] is being hovered."
+msgid ""
+"Text [Color] used when the [LinkButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/LinkButton.xml:49
-msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgid "Text [Color] used when the [LinkButton] is being hovered."
msgstr ""
#: doc/classes/LinkButton.xml:52
+msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:55
msgid "The vertical space between the baseline of text and the underline."
msgstr ""
@@ -32287,26 +32444,33 @@ msgid "Text [Color] used when the [MenuButton] is disabled."
msgstr ""
#: doc/classes/MenuButton.xml:64
-msgid "Text [Color] used when the [MenuButton] is being hovered."
+msgid ""
+"Text [Color] used when the [MenuButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/MenuButton.xml:67
-msgid "Text [Color] used when the [MenuButton] is being pressed."
+msgid "Text [Color] used when the [MenuButton] is being hovered."
msgstr ""
#: doc/classes/MenuButton.xml:70
-msgid "[StyleBox] used when the [MenuButton] is being hovered."
+msgid "Text [Color] used when the [MenuButton] is being pressed."
msgstr ""
#: doc/classes/MenuButton.xml:73
-msgid "The horizontal space between [MenuButton]'s icon and text."
+msgid "[StyleBox] used when the [MenuButton] is being hovered."
msgstr ""
#: doc/classes/MenuButton.xml:76
-msgid "Default [StyleBox] for the [MenuButton]."
+msgid "The horizontal space between [MenuButton]'s icon and text."
msgstr ""
#: doc/classes/MenuButton.xml:79
+msgid "Default [StyleBox] for the [MenuButton]."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:82
msgid "[StyleBox] used when the [MenuButton] is being pressed."
msgstr ""
@@ -34016,7 +34180,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -36882,26 +37046,33 @@ msgid "Text [Color] used when the [OptionButton] is disabled."
msgstr ""
#: doc/classes/OptionButton.xml:212
-msgid "Text [Color] used when the [OptionButton] is being hovered."
+msgid ""
+"Text [Color] used when the [OptionButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/OptionButton.xml:215
-msgid "Text [Color] used when the [OptionButton] is being pressed."
+msgid "Text [Color] used when the [OptionButton] is being hovered."
msgstr ""
#: doc/classes/OptionButton.xml:218
-msgid "[StyleBox] used when the [OptionButton] is being hovered."
+msgid "Text [Color] used when the [OptionButton] is being pressed."
msgstr ""
#: doc/classes/OptionButton.xml:221
-msgid "The horizontal space between [OptionButton]'s icon and text."
+msgid "[StyleBox] used when the [OptionButton] is being hovered."
msgstr ""
#: doc/classes/OptionButton.xml:224
-msgid "Default [StyleBox] for the [OptionButton]."
+msgid "The horizontal space between [OptionButton]'s icon and text."
msgstr ""
#: doc/classes/OptionButton.xml:227
+msgid "Default [StyleBox] for the [OptionButton]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:230
msgid "[StyleBox] used when the [OptionButton] is being pressed."
msgstr ""
@@ -37304,7 +37475,7 @@ msgstr ""
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -37334,14 +37505,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -37351,7 +37522,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -39829,17 +40000,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -39857,11 +40054,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -40056,7 +40253,9 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-msgid "Returns the [Physics2DDirectBodyState] of the body."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
@@ -40858,6 +41057,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -40875,7 +41092,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -40989,7 +41206,9 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-msgid "Returns the [PhysicsDirectBodyState] of the body."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/PhysicsServer.xml:370
@@ -41968,27 +42187,27 @@ msgstr ""
msgid "Removes an element from the array by index."
msgstr ""
-#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolColorArray.xml:66
-#: doc/classes/PoolIntArray.xml:67 doc/classes/PoolRealArray.xml:67
-#: doc/classes/PoolStringArray.xml:74 doc/classes/PoolVector2Array.xml:67
-#: doc/classes/PoolVector3Array.xml:66
+#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolIntArray.xml:67
+#: doc/classes/PoolRealArray.xml:67
msgid ""
"Sets the size of the array. If the array is grown, reserves elements at the "
"end of the array. If the array is shrunk, truncates the array to the new "
-"size."
+"size.\n"
+"[b]Note:[/b] Added elements are not automatically initialized to 0 and will "
+"contain garbage, i.e. indeterminate values."
msgstr ""
-#: doc/classes/PoolByteArray.xml:121
+#: doc/classes/PoolByteArray.xml:122
msgid "Changes the byte at the given index."
msgstr ""
-#: doc/classes/PoolByteArray.xml:127 doc/classes/PoolColorArray.xml:79
-#: doc/classes/PoolRealArray.xml:80 doc/classes/PoolStringArray.xml:87
+#: doc/classes/PoolByteArray.xml:128 doc/classes/PoolColorArray.xml:79
+#: doc/classes/PoolRealArray.xml:81 doc/classes/PoolStringArray.xml:87
#: doc/classes/PoolVector2Array.xml:80 doc/classes/PoolVector3Array.xml:79
msgid "Returns the size of the array."
msgstr ""
-#: doc/classes/PoolByteArray.xml:135
+#: doc/classes/PoolByteArray.xml:136
msgid ""
"Returns the slice of the [PoolByteArray] between indices (inclusive) as a "
"new [PoolByteArray]. Any negative index is considered to be from the end of "
@@ -42020,6 +42239,14 @@ msgstr ""
msgid "Appends a value to the array."
msgstr ""
+#: doc/classes/PoolColorArray.xml:66 doc/classes/PoolStringArray.xml:74
+#: doc/classes/PoolVector2Array.xml:67 doc/classes/PoolVector3Array.xml:66
+msgid ""
+"Sets the size of the array. If the array is grown, reserves elements at the "
+"end of the array. If the array is shrunk, truncates the array to the new "
+"size."
+msgstr ""
+
#: doc/classes/PoolColorArray.xml:73
msgid "Changes the [Color] at the given index."
msgstr ""
@@ -42056,11 +42283,11 @@ msgid ""
"valid, or at the end of the array ([code]idx == size()[/code])."
msgstr ""
-#: doc/classes/PoolIntArray.xml:74
+#: doc/classes/PoolIntArray.xml:75
msgid "Changes the int at the given index."
msgstr ""
-#: doc/classes/PoolIntArray.xml:80
+#: doc/classes/PoolIntArray.xml:81
msgid "Returns the array size."
msgstr ""
@@ -42092,7 +42319,7 @@ msgstr ""
msgid "Appends a [PoolRealArray] at the end of this array."
msgstr ""
-#: doc/classes/PoolRealArray.xml:74
+#: doc/classes/PoolRealArray.xml:75
msgid "Changes the float at the given index."
msgstr ""
@@ -43357,18 +43584,6 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:204
msgid ""
-"The project data directory is used for storing project-specific data "
-"(metadata, shader cache, etc.).\n"
-"[b]Note:[/b] Restart the application after changing this setting.\n"
-"[b]Note:[/b] Changing this value can help on platforms or with third-party "
-"tools where specific directory patterns are disallowed. Only modify this "
-"setting if you know that your environment requires it, as changing the "
-"default can impact compatibility with some external tools or plugins which "
-"expect the default [code].import[/code] folder."
-msgstr ""
-
-#: doc/classes/ProjectSettings.xml:209
-msgid ""
"Specifies a file to override project settings. For example: [code]user://"
"custom_settings.cfg[/code]. See \"Overriding\" in the [ProjectSettings] "
"class description at the top for more information.\n"
@@ -43376,7 +43591,7 @@ msgid ""
"code] will still be read to override the project settings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:213
+#: doc/classes/ProjectSettings.xml:208
msgid ""
"If [code]true[/code], the project will save user data to its own user "
"directory (see [member application/config/custom_user_dir_name]). This "
@@ -43386,13 +43601,28 @@ msgid ""
"user data directory)/Godot/app_userdata/(project name)[/code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:216
+#: doc/classes/ProjectSettings.xml:211
+msgid ""
+"If [code]true[/code], the project will use a hidden directory ([code]."
+"import[/code]) for storing project-specific data (metadata, shader cache, "
+"etc.).\n"
+"If [code]false[/code], a non-hidden directory ([code]import[/code]) will be "
+"used instead.\n"
+"[b]Note:[/b] Restart the application after changing this setting.\n"
+"[b]Note:[/b] Changing this value can help on platforms or with third-party "
+"tools where hidden directory patterns are disallowed. Only modify this "
+"setting if you know that your environment requires it, as changing the "
+"default can impact compatibility with some external tools or plugins which "
+"expect the default [code].import[/code] folder."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:217
msgid ""
"Icon set in [code].ico[/code] format used on Windows to set the game's icon. "
"This is done automatically on start by calling [method OS.set_native_icon]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:219
+#: doc/classes/ProjectSettings.xml:220
msgid ""
"Time samples for frame deltas are subject to random variation introduced by "
"the platform, even when frames are displayed at regular intervals thanks to "
@@ -43406,14 +43636,14 @@ msgid ""
"adequate to render frames at the refresh rate."
msgstr ""
-#: doc/classes/ProjectSettings.xml:224
+#: doc/classes/ProjectSettings.xml:225
msgid ""
"[b]Experimental.[/b] Shifts the measurement of delta time for each frame to "
"just after the drawing has taken place. This may lead to more consistent "
"deltas and a reduction in frame stutters."
msgstr ""
-#: doc/classes/ProjectSettings.xml:227
+#: doc/classes/ProjectSettings.xml:228
msgid ""
"If [code]true[/code], disables printing to standard error. If [code]true[/"
"code], this also hides error and warning messages printed by [method "
@@ -43422,7 +43652,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:231
+#: doc/classes/ProjectSettings.xml:232
msgid ""
"If [code]true[/code], disables printing to standard output. This is "
"equivalent to starting the editor or project with the [code]--quiet[/code] "
@@ -43430,7 +43660,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:235
+#: doc/classes/ProjectSettings.xml:236
msgid ""
"If [code]true[/code], flushes the standard output stream every time a line "
"is printed. This affects both terminal logging and file logging.\n"
@@ -43446,20 +43676,20 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:241
+#: doc/classes/ProjectSettings.xml:242
msgid ""
"Debug build override for [member application/run/flush_stdout_on_print], as "
"performance is less important during debugging.\n"
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:245
+#: doc/classes/ProjectSettings.xml:246
msgid ""
"Forces a delay between frames in the main loop (in milliseconds). This may "
"be useful if you plan to disable vertical synchronization."
msgstr ""
-#: doc/classes/ProjectSettings.xml:248
+#: doc/classes/ProjectSettings.xml:249
msgid ""
"If [code]true[/code], enables low-processor usage mode. This setting only "
"works on desktop platforms. The screen is not redrawn if nothing changes "
@@ -43467,75 +43697,81 @@ msgid ""
"useless (and can hurt performance) in most games."
msgstr ""
-#: doc/classes/ProjectSettings.xml:251
+#: doc/classes/ProjectSettings.xml:252
msgid ""
"Amount of sleeping between frames when the low-processor usage mode is "
"enabled (in microseconds). Higher values will result in lower CPU usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:254
+#: doc/classes/ProjectSettings.xml:255
msgid "Path to the main scene file that will be loaded when the project runs."
msgstr ""
-#: doc/classes/ProjectSettings.xml:257 doc/classes/ProjectSettings.xml:260
+#: doc/classes/ProjectSettings.xml:258 doc/classes/ProjectSettings.xml:261
msgid ""
"Audio buses will disable automatically when sound goes below a given dB "
"threshold for a given time. This saves CPU as effects assigned to that bus "
"will no longer do any processing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:263
+#: doc/classes/ProjectSettings.xml:264
msgid ""
"Default [AudioBusLayout] resource file to use in the project, unless "
"overridden by the scene."
msgstr ""
-#: doc/classes/ProjectSettings.xml:266
+#: doc/classes/ProjectSettings.xml:267
msgid ""
"Specifies the audio driver to use. This setting is platform-dependent as "
"each platform supports different audio drivers. If left empty, the default "
"audio driver will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:269
+#: doc/classes/ProjectSettings.xml:270
msgid ""
"If [code]true[/code], microphone input will be allowed. This requires "
"appropriate permissions to be set when exporting to Android or iOS."
msgstr ""
-#: doc/classes/ProjectSettings.xml:272
+#: doc/classes/ProjectSettings.xml:273
msgid ""
"The mixing rate used for audio (in Hz). In general, it's better to not touch "
"this and leave it to the host operating system."
msgstr ""
-#: doc/classes/ProjectSettings.xml:275
+#: doc/classes/ProjectSettings.xml:276
msgid ""
"Safer override for [member audio/mix_rate] in the Web platform. Here "
"[code]0[/code] means \"let the browser choose\" (since some browsers do not "
"like forcing the mix rate)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:278
+#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:281
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:284
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:287
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43545,7 +43781,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:290
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43555,27 +43791,27 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:293
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:296
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
-#: doc/classes/ProjectSettings.xml:299
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:302
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -43583,81 +43819,81 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:305
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:308
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:311
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:314
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:317
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr ""
-#: doc/classes/ProjectSettings.xml:320
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:323
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:326
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:329
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:332
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:335
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:338
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:341
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -43665,109 +43901,109 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:344
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:347
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:350
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:353
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:356
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:359
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:362
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:365
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:368
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:371
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:374
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:377
+#: doc/classes/ProjectSettings.xml:380
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:380
+#: doc/classes/ProjectSettings.xml:383
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:383
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:386
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:389
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:392
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:395
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:398
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -43778,91 +44014,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:403
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:406
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:409
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:412
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:415
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:418
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:421
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:424
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:427
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:430
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:433
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:436
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:439
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr ""
-#: doc/classes/ProjectSettings.xml:442
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:445
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:448
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:451
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -43871,13 +44107,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:455
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:458
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -43887,7 +44123,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:463
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -43895,19 +44131,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:468
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:472
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:476
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -43921,45 +44157,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:481
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:484
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:488
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:491
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:494
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:497
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:500
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -43968,7 +44204,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:503
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -43979,7 +44215,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:507
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -43995,14 +44231,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:515
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:518
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -44010,49 +44246,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:521
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:524
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:529
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:532
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:535
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:538
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:541
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:544
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:547
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -44061,7 +44297,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:551
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44069,7 +44305,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:555
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44077,7 +44313,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:559
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44087,7 +44323,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:563
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -44096,7 +44332,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:567
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -44105,7 +44341,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:571
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44115,7 +44351,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:575
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44123,7 +44359,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:579
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -44133,7 +44369,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:583
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -44143,7 +44379,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:587
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44151,7 +44387,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:591
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -44160,7 +44396,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:595
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44168,7 +44404,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:599
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -44180,477 +44416,477 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:605
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:608
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:611
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:614
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:617
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:620
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:623
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:626
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:629
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:632
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:635
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:638
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:641
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:644
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:647
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:650
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:653
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:656
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:659
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:662
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:665
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:668
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:671
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:674
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:677
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:680
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:683
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:686
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:689
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:692
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:695
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:698
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:701
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:704
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:707
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:710
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:713
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:716
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:719
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:722
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:725
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:728
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:731
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:734
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:737
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:740
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:743
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:746
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:749
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:752
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:755
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:758
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:761
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:764
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:767
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:770
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:773
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:776
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:779
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:782
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:785
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:788
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:791
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:794
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:797
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:800
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:803
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:806
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:809
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:812
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:815
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:818
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:821
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:824
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:827
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:830
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:833
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:836
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:839
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:842
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:845
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:848
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:851
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:854
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:857
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:860
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:863
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:866
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:869
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:872
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:875
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:878
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:881
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr ""
-#: doc/classes/ProjectSettings.xml:884
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:887
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:890
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:893
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:896
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:899
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:902
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:905
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:908
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:911
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:914
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:917
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:920
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:923
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:926
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:929
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:932
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:935
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:938
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:941
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:946
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:949
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -44658,92 +44894,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:952
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:955
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:958
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:961
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:964
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:967
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:970
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:973
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:976
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:979
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:982
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:985
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:988
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:991
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:994
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:997
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1000
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1003
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -44753,33 +44989,33 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1007
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1010
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1013
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1017
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1021
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -44792,7 +45028,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1025
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -44804,7 +45040,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1033
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -44816,7 +45052,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1041
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -44829,7 +45065,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1045
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -44837,28 +45073,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1049
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1053
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1056
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1059
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -44868,25 +45104,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1063
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1066
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1069
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1072
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -44899,7 +45135,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1076
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -44911,7 +45147,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1084
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -44923,7 +45159,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1092
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -44936,13 +45172,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1096
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1099
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -44950,11 +45186,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1103
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1106
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -44968,7 +45204,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1112
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -44977,7 +45213,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1116
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -44993,7 +45229,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1121
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -45003,7 +45239,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1125
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45013,7 +45249,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1129
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -45024,7 +45260,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1133
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45034,7 +45270,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1137
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -45042,7 +45278,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1141
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -45053,7 +45289,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1145
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -45068,7 +45304,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1151
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -45077,13 +45313,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1156
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1159
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -45092,7 +45328,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1162
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -45102,7 +45338,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1165
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -45114,7 +45350,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1168
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -45124,24 +45360,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1171
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1174
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1177
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1180
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -45150,7 +45386,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1183
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -45158,7 +45394,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1186
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -45167,7 +45403,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1189
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -45177,7 +45413,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1193
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -45185,31 +45421,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1197
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1200
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1203
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1206
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1209
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -45217,7 +45453,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1212
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -45227,46 +45463,53 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1215
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1218
+#: doc/classes/ProjectSettings.xml:1221
+msgid ""
+"iOS specific override for [member rendering/gles2/compatibility/"
+"disable_half_float], due to poor support for half-float vertex compression "
+"on many devices."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1224
msgid ""
-"If [code]true[/code] and available on the target device, enables high "
-"floating point precision for all shader computations in GLES2.\n"
+"If [code]true[/code] and available on the target Android device, enables "
+"high floating point precision for all shader computations in GLES2.\n"
"[b]Warning:[/b] High floating point precision can be extremely slow on older "
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1225
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1228
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1231
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1234
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -45274,7 +45517,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1237
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -45284,7 +45527,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1240
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -45293,7 +45536,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1243
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -45302,20 +45545,20 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1246
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1249
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1252
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -45324,7 +45567,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1255
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -45332,7 +45575,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1258
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -45341,7 +45584,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -45351,20 +45594,20 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1267
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1274
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -45373,13 +45616,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -45389,46 +45632,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1293
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1296
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1299
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1302
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1305
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -45438,7 +45681,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -45450,7 +45693,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -45458,7 +45701,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1316
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -45466,7 +45709,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -45475,7 +45718,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1323
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -45489,7 +45732,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1328
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -45499,7 +45742,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1331
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -45508,7 +45751,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1334
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -45518,54 +45761,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1337
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1340
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1343
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1346
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1349
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1352
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1355
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1358
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -45576,61 +45819,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1365
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1368
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1371
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1374
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1377
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1380
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1383
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1386
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -45641,7 +45884,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -45650,26 +45893,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1393 doc/classes/ProjectSettings.xml:1396
#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1405
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1408
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1411
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -45680,20 +45923,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1418
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -45705,52 +45948,52 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1428
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1435
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1438
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1441
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1444
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1447
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1450
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1453
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -45758,7 +46001,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -45768,10 +46011,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -45780,10 +46023,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -45792,10 +46035,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -45804,10 +46047,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -45816,10 +46059,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -46478,40 +46721,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr ""
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -46519,14 +46776,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -48853,6 +49110,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -48870,7 +49143,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -48878,11 +49151,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -48892,19 +49165,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -54289,20 +54562,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -54313,28 +54591,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -54346,19 +54624,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
@@ -57137,26 +57415,33 @@ msgid "Text [Color] used when the [ToolButton] is disabled."
msgstr ""
#: doc/classes/ToolButton.xml:39
-msgid "Text [Color] used when the [ToolButton] is being hovered."
+msgid ""
+"Text [Color] used when the [ToolButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/ToolButton.xml:42
-msgid "Text [Color] used when the [ToolButton] is being pressed."
+msgid "Text [Color] used when the [ToolButton] is being hovered."
msgstr ""
#: doc/classes/ToolButton.xml:45
-msgid "[StyleBox] used when the [ToolButton] is being hovered."
+msgid "Text [Color] used when the [ToolButton] is being pressed."
msgstr ""
#: doc/classes/ToolButton.xml:48
-msgid "The horizontal space between [ToolButton]'s icon and text."
+msgid "[StyleBox] used when the [ToolButton] is being hovered."
msgstr ""
#: doc/classes/ToolButton.xml:51
-msgid "Default [StyleBox] for the [ToolButton]."
+msgid "The horizontal space between [ToolButton]'s icon and text."
msgstr ""
#: doc/classes/ToolButton.xml:54
+msgid "Default [StyleBox] for the [ToolButton]."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:57
msgid "[StyleBox] used when the [ToolButton] is being pressed."
msgstr ""
diff --git a/doc/translations/hi.po b/doc/translations/hi.po
index 0f7e6689bc..942e7dc94d 100644
--- a/doc/translations/hi.po
+++ b/doc/translations/hi.po
@@ -19,43 +19,43 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 4.7-dev\n"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Description"
msgstr "विवरण"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Tutorials"
msgstr "शिकà¥à¤·à¤£"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Properties"
msgstr "विशेषता"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Methods"
msgstr "तरीकों"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Theme Properties"
msgstr "थीम विशेषता"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Signals"
msgstr "संकेत"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Enumerations"
msgstr "गणना"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Constants"
msgstr ""
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Property Descriptions"
msgstr ""
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Method Descriptions"
msgstr ""
@@ -3586,112 +3586,121 @@ msgid ""
msgstr ""
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr ""
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
msgstr ""
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
msgstr ""
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
msgstr ""
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr ""
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr ""
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr ""
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
msgstr ""
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr ""
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
msgstr ""
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
msgstr ""
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr ""
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
"positive.\n"
@@ -4763,7 +4772,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -6196,21 +6205,25 @@ msgstr ""
#: doc/classes/Area.xml:17
msgid ""
-"Returns a list of intersecting [Area]s. For performance reasons (collisions "
-"are all processed at the same time) this list is modified once during the "
-"physics step, not immediately after objects are moved. Consider using "
-"signals instead."
+"Returns a list of intersecting [Area]s. The overlapping area's [member "
+"CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:23
+#: doc/classes/Area.xml:24
msgid ""
-"Returns a list of intersecting [PhysicsBody]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody]s. The overlapping body's "
+"[member CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:30
+#: doc/classes/Area.xml:32
msgid ""
"If [code]true[/code], the given area overlaps the Area.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6218,7 +6231,7 @@ msgid ""
"physics step. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:38
+#: doc/classes/Area.xml:40
msgid ""
"If [code]true[/code], the given physics body overlaps the Area.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6229,7 +6242,7 @@ msgid ""
"their tiles with collision shapes as a virtual physics body)."
msgstr ""
-#: doc/classes/Area.xml:46
+#: doc/classes/Area.xml:48
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
"velocity lost per second.\n"
@@ -6237,41 +6250,41 @@ msgid ""
"details about damping."
msgstr ""
-#: doc/classes/Area.xml:50 doc/classes/Area2D.xml:52
+#: doc/classes/Area.xml:52 doc/classes/Area2D.xml:54
msgid "The name of the area's audio bus."
msgstr ""
-#: doc/classes/Area.xml:53 doc/classes/Area2D.xml:55
+#: doc/classes/Area.xml:55 doc/classes/Area2D.xml:57
msgid ""
"If [code]true[/code], the area's audio bus overrides the default audio bus."
msgstr ""
-#: doc/classes/Area.xml:56
+#: doc/classes/Area.xml:58
msgid ""
"The area's gravity intensity (in meters per second squared). This value "
"multiplies the gravity vector. This is useful to alter the force of gravity "
"without altering its direction."
msgstr ""
-#: doc/classes/Area.xml:59 doc/classes/Area2D.xml:61
+#: doc/classes/Area.xml:61 doc/classes/Area2D.xml:63
msgid ""
"The falloff factor for point gravity. The greater the value, the faster "
"gravity decreases with distance."
msgstr ""
-#: doc/classes/Area.xml:62 doc/classes/Area2D.xml:64
+#: doc/classes/Area.xml:64 doc/classes/Area2D.xml:66
msgid ""
"If [code]true[/code], gravity is calculated from a point (set via [member "
"gravity_vec]). See also [member space_override]."
msgstr ""
-#: doc/classes/Area.xml:65 doc/classes/Area2D.xml:67
+#: doc/classes/Area.xml:67 doc/classes/Area2D.xml:69
msgid ""
"The area's gravity vector (not normalized). If gravity is a point (see "
"[member gravity_point]), this will be the point of attraction."
msgstr ""
-#: doc/classes/Area.xml:68
+#: doc/classes/Area.xml:70
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
"velocity lost per second.\n"
@@ -6279,61 +6292,61 @@ msgid ""
"about damping."
msgstr ""
-#: doc/classes/Area.xml:72 doc/classes/Area2D.xml:74
+#: doc/classes/Area.xml:74 doc/classes/Area2D.xml:76
msgid "If [code]true[/code], other monitoring areas can detect this area."
msgstr ""
-#: doc/classes/Area.xml:75 doc/classes/Area2D.xml:77
+#: doc/classes/Area.xml:77 doc/classes/Area2D.xml:79
msgid ""
"If [code]true[/code], the area detects bodies or areas entering and exiting "
"it."
msgstr ""
-#: doc/classes/Area.xml:78 doc/classes/Area2D.xml:80
+#: doc/classes/Area.xml:80 doc/classes/Area2D.xml:82
msgid "The area's priority. Higher priority areas are processed first."
msgstr ""
-#: doc/classes/Area.xml:81
+#: doc/classes/Area.xml:83
msgid ""
"The degree to which this area applies reverb to its associated audio. Ranges "
"from [code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
msgstr ""
-#: doc/classes/Area.xml:84
+#: doc/classes/Area.xml:86
msgid "If [code]true[/code], the area applies reverb to its associated audio."
msgstr ""
-#: doc/classes/Area.xml:87
+#: doc/classes/Area.xml:89
msgid "The reverb bus name to use for this area's associated audio."
msgstr ""
-#: doc/classes/Area.xml:90
+#: doc/classes/Area.xml:92
msgid ""
"The degree to which this area's reverb is a uniform effect. Ranges from "
"[code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
msgstr ""
-#: doc/classes/Area.xml:93 doc/classes/Area2D.xml:83
+#: doc/classes/Area.xml:95 doc/classes/Area2D.xml:85
msgid ""
"Override mode for gravity and damping calculations within this area. See "
"[enum SpaceOverride] for possible values."
msgstr ""
-#: doc/classes/Area.xml:100
+#: doc/classes/Area.xml:102
msgid ""
"Emitted when another Area enters this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
-#: doc/classes/Area.xml:107
+#: doc/classes/Area.xml:109
msgid ""
"Emitted when another Area exits this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
-#: doc/classes/Area.xml:117 doc/classes/Area.xml:130
+#: doc/classes/Area.xml:119 doc/classes/Area.xml:132
msgid ""
"Emitted when one of another Area's [Shape]s enters one of this Area's "
"[Shape]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6348,7 +6361,7 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:140
+#: doc/classes/Area.xml:142
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] enters this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -6357,7 +6370,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:147
+#: doc/classes/Area.xml:149
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] exits this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -6366,7 +6379,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:157 doc/classes/Area.xml:170
+#: doc/classes/Area.xml:159 doc/classes/Area.xml:172
msgid ""
"Emitted when one of a [PhysicsBody] or [GridMap]'s [Shape]s enters one of "
"this Area's [Shape]s. Requires [member monitoring] to be set to [code]true[/"
@@ -6383,29 +6396,29 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:180 doc/classes/Area2D.xml:170
+#: doc/classes/Area.xml:182 doc/classes/Area2D.xml:172
msgid "This area does not affect gravity/damping."
msgstr ""
-#: doc/classes/Area.xml:183 doc/classes/Area2D.xml:173
+#: doc/classes/Area.xml:185 doc/classes/Area2D.xml:175
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order)."
msgstr ""
-#: doc/classes/Area.xml:186 doc/classes/Area2D.xml:176
+#: doc/classes/Area.xml:188 doc/classes/Area2D.xml:178
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order), ignoring any lower priority areas."
msgstr ""
-#: doc/classes/Area.xml:189 doc/classes/Area2D.xml:179
+#: doc/classes/Area.xml:191 doc/classes/Area2D.xml:181
msgid ""
"This area replaces any gravity/damping, even the defaults, ignoring any "
"lower priority areas."
msgstr ""
-#: doc/classes/Area.xml:192 doc/classes/Area2D.xml:182
+#: doc/classes/Area.xml:194 doc/classes/Area2D.xml:184
msgid ""
"This area replaces any gravity/damping calculated so far (in [member "
"priority] order), but keeps calculating the rest of the areas."
@@ -6440,21 +6453,25 @@ msgstr ""
#: doc/classes/Area2D.xml:19
msgid ""
-"Returns a list of intersecting [Area2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [Area2D]s. The overlapping area's [member "
+"CollisionObject2D.collision_layer] must be part of this area's [member "
+"CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:25
+#: doc/classes/Area2D.xml:26
msgid ""
-"Returns a list of intersecting [PhysicsBody2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody2D]s. The overlapping body's "
+"[member CollisionObject2D.collision_layer] must be part of this area's "
+"[member CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:32
+#: doc/classes/Area2D.xml:34
msgid ""
"If [code]true[/code], the given area overlaps the Area2D.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6462,7 +6479,7 @@ msgid ""
"the physics step. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:40
+#: doc/classes/Area2D.xml:42
msgid ""
"If [code]true[/code], the given physics body overlaps the Area2D.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6473,7 +6490,7 @@ msgid ""
"register their tiles with collision shapes as a virtual physics body)."
msgstr ""
-#: doc/classes/Area2D.xml:48
+#: doc/classes/Area2D.xml:50
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
"velocity lost per second.\n"
@@ -6481,14 +6498,14 @@ msgid ""
"details about damping."
msgstr ""
-#: doc/classes/Area2D.xml:58
+#: doc/classes/Area2D.xml:60
msgid ""
"The area's gravity intensity (in pixels per second squared). This value "
"multiplies the gravity vector. This is useful to alter the force of gravity "
"without altering its direction."
msgstr ""
-#: doc/classes/Area2D.xml:70
+#: doc/classes/Area2D.xml:72
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
"velocity lost per second.\n"
@@ -6496,21 +6513,21 @@ msgid ""
"about damping."
msgstr ""
-#: doc/classes/Area2D.xml:90
+#: doc/classes/Area2D.xml:92
msgid ""
"Emitted when another Area2D enters this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-#: doc/classes/Area2D.xml:97
+#: doc/classes/Area2D.xml:99
msgid ""
"Emitted when another Area2D exits this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-#: doc/classes/Area2D.xml:107
+#: doc/classes/Area2D.xml:109
msgid ""
"Emitted when one of another Area2D's [Shape2D]s enters one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6525,7 +6542,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:120
+#: doc/classes/Area2D.xml:122
msgid ""
"Emitted when one of another Area2D's [Shape2D]s exits one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6540,7 +6557,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:130
+#: doc/classes/Area2D.xml:132
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] enters this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -6549,7 +6566,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:137
+#: doc/classes/Area2D.xml:139
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] exits this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -6558,7 +6575,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:147
+#: doc/classes/Area2D.xml:149
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s enters one "
"of this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -6577,7 +6594,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:160
+#: doc/classes/Area2D.xml:162
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s exits one of "
"this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -10132,40 +10149,45 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
-"no save path is provided it will try to match the path from the current "
+"no root node is provided, parent of this node will be used as root instead. "
+"If no save path is provided it will try to match the path from the current "
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -10179,62 +10201,62 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
msgid "The rotation of the baked custom sky."
msgstr ""
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -10242,35 +10264,35 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -10278,13 +10300,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -10296,65 +10318,77 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr ""
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
msgid "Baking was successful."
msgstr ""
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr ""
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr ""
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr ""
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:133
+#: doc/classes/BakedLightmap.xml:132
+msgid ""
+"Returns if lightmapper can't be created. Unless you are using a custom "
+"lightmapper, please report this as bug."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:135
+msgid ""
+"There is no root node to start baking from. Either provide [code]from_node[/"
+"code] argument or attach this node to a parent that should be used as root."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:136
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:139
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:142
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -10802,8 +10836,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -11188,26 +11225,33 @@ msgid "Text [Color] used when the [Button] is disabled."
msgstr ""
#: doc/classes/Button.xml:77
-msgid "Text [Color] used when the [Button] is being hovered."
+msgid ""
+"Text [Color] used when the [Button] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/Button.xml:80
-msgid "Text [Color] used when the [Button] is being pressed."
+msgid "Text [Color] used when the [Button] is being hovered."
msgstr ""
#: doc/classes/Button.xml:83
-msgid "[StyleBox] used when the [Button] is being hovered."
+msgid "Text [Color] used when the [Button] is being pressed."
msgstr ""
#: doc/classes/Button.xml:86
-msgid "The horizontal space between [Button]'s icon and text."
+msgid "[StyleBox] used when the [Button] is being hovered."
msgstr ""
#: doc/classes/Button.xml:89
-msgid "Default [StyleBox] for the [Button]."
+msgid "The horizontal space between [Button]'s icon and text."
msgstr ""
#: doc/classes/Button.xml:92
+msgid "Default [StyleBox] for the [Button]."
+msgstr ""
+
+#: doc/classes/Button.xml:95
msgid "[StyleBox] used when the [Button] is being pressed."
msgstr ""
@@ -12666,80 +12710,96 @@ msgstr ""
msgid "The check icon to display when the [CheckBox] is checked."
msgstr ""
-#: doc/classes/CheckBox.xml:30
+#: doc/classes/CheckBox.xml:28
+msgid "The check icon to display when the [CheckBox] is checked and disabled."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:31
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is disabled."
msgstr ""
-#: doc/classes/CheckBox.xml:33
+#: doc/classes/CheckBox.xml:34
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is focused."
msgstr ""
-#: doc/classes/CheckBox.xml:36
+#: doc/classes/CheckBox.xml:37
msgid "The [Font] to use for the [CheckBox] text."
msgstr ""
-#: doc/classes/CheckBox.xml:39
+#: doc/classes/CheckBox.xml:40
msgid "The [CheckBox] text's font color."
msgstr ""
-#: doc/classes/CheckBox.xml:42
+#: doc/classes/CheckBox.xml:43
msgid "The [CheckBox] text's font color when it's disabled."
msgstr ""
-#: doc/classes/CheckBox.xml:45
+#: doc/classes/CheckBox.xml:46
+msgid ""
+"The [CheckBox] text's font color when it's focused. Only replaces the normal "
+"text color of the checkbox. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:49
msgid "The [CheckBox] text's font color when it's hovered."
msgstr ""
-#: doc/classes/CheckBox.xml:48
+#: doc/classes/CheckBox.xml:52
msgid "The [CheckBox] text's font color when it's hovered and pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:51
+#: doc/classes/CheckBox.xml:55
msgid "The [CheckBox] text's font color when it's pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:54
+#: doc/classes/CheckBox.xml:58
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered."
msgstr ""
-#: doc/classes/CheckBox.xml:57
+#: doc/classes/CheckBox.xml:61
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered and "
"pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:60
+#: doc/classes/CheckBox.xml:64
msgid "The separation between the check icon and the text (in pixels)."
msgstr ""
-#: doc/classes/CheckBox.xml:63 doc/classes/CheckButton.xml:58
+#: doc/classes/CheckBox.xml:67 doc/classes/CheckButton.xml:61
msgid "The [StyleBox] to display as a background."
msgstr ""
-#: doc/classes/CheckBox.xml:66
+#: doc/classes/CheckBox.xml:70
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:69
+#: doc/classes/CheckBox.xml:73
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is checked."
msgstr ""
-#: doc/classes/CheckBox.xml:74
+#: doc/classes/CheckBox.xml:78
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is unchecked."
msgstr ""
-#: doc/classes/CheckBox.xml:79
+#: doc/classes/CheckBox.xml:83
msgid "The check icon to display when the [CheckBox] is unchecked."
msgstr ""
+#: doc/classes/CheckBox.xml:86
+msgid ""
+"The check icon to display when the [CheckBox] is unchecked and disabled."
+msgstr ""
+
#: doc/classes/CheckButton.xml:4
msgid "Checkable button. See also [CheckBox]."
msgstr ""
@@ -12783,49 +12843,56 @@ msgid "The [CheckButton] text's font color when it's disabled."
msgstr ""
#: doc/classes/CheckButton.xml:40
-msgid "The [CheckButton] text's font color when it's hovered."
+msgid ""
+"The [CheckButton] text's font color when it's focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/CheckButton.xml:43
-msgid "The [CheckButton] text's font color when it's hovered and pressed."
+msgid "The [CheckButton] text's font color when it's hovered."
msgstr ""
#: doc/classes/CheckButton.xml:46
-msgid "The [CheckButton] text's font color when it's pressed."
+msgid "The [CheckButton] text's font color when it's hovered and pressed."
msgstr ""
#: doc/classes/CheckButton.xml:49
+msgid "The [CheckButton] text's font color when it's pressed."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:52
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered."
msgstr ""
-#: doc/classes/CheckButton.xml:52
+#: doc/classes/CheckButton.xml:55
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered "
"and pressed."
msgstr ""
-#: doc/classes/CheckButton.xml:55
+#: doc/classes/CheckButton.xml:58
msgid "The separation between the toggle icon and the text (in pixels)."
msgstr ""
-#: doc/classes/CheckButton.xml:61
+#: doc/classes/CheckButton.xml:64
msgid "The icon to display when the [CheckButton] is unchecked."
msgstr ""
-#: doc/classes/CheckButton.xml:64
+#: doc/classes/CheckButton.xml:67
msgid "The icon to display when the [CheckButton] is unchecked and disabled."
msgstr ""
-#: doc/classes/CheckButton.xml:67
+#: doc/classes/CheckButton.xml:70
msgid "The icon to display when the [CheckButton] is checked."
msgstr ""
-#: doc/classes/CheckButton.xml:70
+#: doc/classes/CheckButton.xml:73
msgid "The icon to display when the [CheckButton] is checked and disabled."
msgstr ""
-#: doc/classes/CheckButton.xml:73
+#: doc/classes/CheckButton.xml:76
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is pressed."
msgstr ""
@@ -14593,26 +14660,33 @@ msgid "Text [Color] used when the [ColorPickerButton] is disabled."
msgstr ""
#: doc/classes/ColorPickerButton.xml:80
-msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
+msgid ""
+"Text [Color] used when the [ColorPickerButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/ColorPickerButton.xml:83
-msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
+msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
msgstr ""
#: doc/classes/ColorPickerButton.xml:86
-msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
+msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
msgstr ""
#: doc/classes/ColorPickerButton.xml:89
-msgid "The horizontal space between [ColorPickerButton]'s icon and text."
+msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
msgstr ""
#: doc/classes/ColorPickerButton.xml:92
-msgid "Default [StyleBox] for the [ColorPickerButton]."
+msgid "The horizontal space between [ColorPickerButton]'s icon and text."
msgstr ""
#: doc/classes/ColorPickerButton.xml:95
+msgid "Default [StyleBox] for the [ColorPickerButton]."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:98
msgid "[StyleBox] used when the [ColorPickerButton] is being pressed."
msgstr ""
@@ -19824,7 +19898,8 @@ msgid ""
"get_resource_type]. They may optionally specify some import presets that "
"affect the import process. EditorImportPlugins are responsible for creating "
"the resources and saving them in the [code].import[/code] directory (see "
-"[member ProjectSettings.application/config/project_data_dir_name]).\n"
+"[member ProjectSettings.application/config/"
+"use_hidden_project_data_directory]).\n"
"Below is an example EditorImportPlugin that imports a [Mesh] from a file "
"with the extension \".special\" or \".spec\":\n"
"[codeblock]\n"
@@ -19948,7 +20023,7 @@ msgstr ""
msgid ""
"Gets the extension used to save this resource in the [code].import[/code] "
"directory (see [member ProjectSettings.application/config/"
-"project_data_dir_name])."
+"use_hidden_project_data_directory])."
msgstr ""
#: doc/classes/EditorImportPlugin.xml:130
@@ -20978,8 +21053,11 @@ msgstr ""
msgid "Emitted when the value of the edited resource was changed."
msgstr ""
-#: doc/classes/EditorResourcePicker.xml:89
-msgid "Emitted when the resource value was set and user clicked to edit it."
+#: doc/classes/EditorResourcePicker.xml:90
+msgid ""
+"Emitted when the resource value was set and user clicked to edit it. When "
+"[code]edit[/code] is [code]true[/code], the signal was caused by the context "
+"menu \"Edit\" option."
msgstr ""
#: doc/classes/EditorResourcePreview.xml:4
@@ -24707,20 +24785,31 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr ""
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -24729,14 +24818,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -24746,80 +24839,80 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
msgstr ""
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr ""
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -27553,16 +27646,18 @@ msgstr ""
#: doc/classes/Image.xml:436
msgid ""
"OpenGL texture format [code]RED[/code] with a single component and a "
-"bitdepth of 8."
+"bitdepth of 8.\n"
+"[b]Note:[/b] When using the GLES2 backend, this uses the alpha channel "
+"instead of the red channel for storage."
msgstr ""
-#: doc/classes/Image.xml:439
+#: doc/classes/Image.xml:440
msgid ""
"OpenGL texture format [code]RG[/code] with two components and a bitdepth of "
"8 for each."
msgstr ""
-#: doc/classes/Image.xml:442
+#: doc/classes/Image.xml:443
msgid ""
"OpenGL texture format [code]RGB[/code] with three components, each with a "
"bitdepth of 8.\n"
@@ -27570,7 +27665,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:446
+#: doc/classes/Image.xml:447
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 8.\n"
@@ -27578,73 +27673,73 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:450
+#: doc/classes/Image.xml:451
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 4."
msgstr ""
-#: doc/classes/Image.xml:453
+#: doc/classes/Image.xml:454
msgid ""
"OpenGL texture format [code]GL_RGB5_A1[/code] where 5 bits of depth for each "
"component of RGB and one bit for alpha."
msgstr ""
-#: doc/classes/Image.xml:456
+#: doc/classes/Image.xml:457
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 32-"
"bit floating-point value."
msgstr ""
-#: doc/classes/Image.xml:459
+#: doc/classes/Image.xml:460
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:462
+#: doc/classes/Image.xml:463
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:465
+#: doc/classes/Image.xml:466
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:468
+#: doc/classes/Image.xml:469
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 16-"
"bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:471
+#: doc/classes/Image.xml:472
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:474
+#: doc/classes/Image.xml:475
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:477
+#: doc/classes/Image.xml:478
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:480
+#: doc/classes/Image.xml:481
msgid ""
"A special OpenGL texture format where the three color components have 9 bits "
"of precision and all three share a single 5-bit exponent."
msgstr ""
-#: doc/classes/Image.xml:483
+#: doc/classes/Image.xml:484
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 1, and is the smallest variation "
@@ -27654,7 +27749,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:487
+#: doc/classes/Image.xml:488
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 2, and color data is interpreted "
@@ -27664,7 +27759,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:491
+#: doc/classes/Image.xml:492
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format also known as Block Compression 3 or BC3 that contains 64 "
@@ -27675,7 +27770,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:495
+#: doc/classes/Image.xml:496
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -27683,7 +27778,7 @@ msgid ""
"DXT5 uses for the alpha channel."
msgstr ""
-#: doc/classes/Image.xml:498
+#: doc/classes/Image.xml:499
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -27691,7 +27786,7 @@ msgid ""
"algorithm that DXT5 uses for the alpha channel."
msgstr ""
-#: doc/classes/Image.xml:501
+#: doc/classes/Image.xml:502
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned normalized "
@@ -27700,21 +27795,21 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:505
+#: doc/classes/Image.xml:506
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with signed floating-point "
"RGB components."
msgstr ""
-#: doc/classes/Image.xml:508
+#: doc/classes/Image.xml:509
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned floating-point "
"RGB components."
msgstr ""
-#: doc/classes/Image.xml:511
+#: doc/classes/Image.xml:512
msgid ""
"Texture format used on PowerVR-supported mobile platforms, uses 2-bit color "
"depth with no alpha. More information can be found [url=https://en.wikipedia."
@@ -27723,25 +27818,25 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:515
+#: doc/classes/Image.xml:516
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with an "
"alpha component."
msgstr ""
-#: doc/classes/Image.xml:518
+#: doc/classes/Image.xml:519
msgid ""
"Similar to [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with 4-"
"bit color depth and no alpha."
msgstr ""
-#: doc/classes/Image.xml:521
+#: doc/classes/Image.xml:522
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC4[/url], but with an "
"alpha component."
msgstr ""
-#: doc/classes/Image.xml:524
+#: doc/classes/Image.xml:525
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC1]Ericsson Texture Compression format 1[/"
@@ -27749,7 +27844,7 @@ msgid ""
"standard. This format cannot store an alpha channel."
msgstr ""
-#: doc/classes/Image.xml:527
+#: doc/classes/Image.xml:528
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27757,7 +27852,7 @@ msgid ""
"unsigned data."
msgstr ""
-#: doc/classes/Image.xml:530
+#: doc/classes/Image.xml:531
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27765,7 +27860,7 @@ msgid ""
"channel of signed data."
msgstr ""
-#: doc/classes/Image.xml:533
+#: doc/classes/Image.xml:534
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27773,7 +27868,7 @@ msgid ""
"of unsigned data."
msgstr ""
-#: doc/classes/Image.xml:536
+#: doc/classes/Image.xml:537
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27781,7 +27876,7 @@ msgid ""
"channels of signed data."
msgstr ""
-#: doc/classes/Image.xml:539
+#: doc/classes/Image.xml:540
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27791,7 +27886,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:543
+#: doc/classes/Image.xml:544
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27801,7 +27896,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:547
+#: doc/classes/Image.xml:548
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27812,31 +27907,31 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:551
+#: doc/classes/Image.xml:552
msgid "Represents the size of the [enum Format] enum."
msgstr ""
-#: doc/classes/Image.xml:554
+#: doc/classes/Image.xml:555
msgid ""
"Performs nearest-neighbor interpolation. If the image is resized, it will be "
"pixelated."
msgstr ""
-#: doc/classes/Image.xml:557
+#: doc/classes/Image.xml:558
msgid ""
"Performs bilinear interpolation. If the image is resized, it will be blurry. "
"This mode is faster than [constant INTERPOLATE_CUBIC], but it results in "
"lower quality."
msgstr ""
-#: doc/classes/Image.xml:560
+#: doc/classes/Image.xml:561
msgid ""
"Performs cubic interpolation. If the image is resized, it will be blurry. "
"This mode often gives better results compared to [constant "
"INTERPOLATE_BILINEAR], at the cost of being slower."
msgstr ""
-#: doc/classes/Image.xml:563
+#: doc/classes/Image.xml:564
msgid ""
"Performs bilinear separately on the two most-suited mipmap levels, then "
"linearly interpolates between them.\n"
@@ -27851,55 +27946,55 @@ msgid ""
"a new set will be generated for the resulting image."
msgstr ""
-#: doc/classes/Image.xml:570
+#: doc/classes/Image.xml:571
msgid ""
"Performs Lanczos interpolation. This is the slowest image resizing mode, but "
"it typically gives the best results, especially when downscalng images."
msgstr ""
-#: doc/classes/Image.xml:573
+#: doc/classes/Image.xml:574
msgid "Image does not have alpha."
msgstr ""
-#: doc/classes/Image.xml:576
+#: doc/classes/Image.xml:577
msgid "Image stores alpha in a single bit."
msgstr ""
-#: doc/classes/Image.xml:579
+#: doc/classes/Image.xml:580
msgid "Image uses alpha."
msgstr ""
-#: doc/classes/Image.xml:582
+#: doc/classes/Image.xml:583
msgid "Use S3TC compression."
msgstr ""
-#: doc/classes/Image.xml:585
+#: doc/classes/Image.xml:586
msgid "Use PVRTC2 compression."
msgstr ""
-#: doc/classes/Image.xml:588
+#: doc/classes/Image.xml:589
msgid "Use PVRTC4 compression."
msgstr ""
-#: doc/classes/Image.xml:591
+#: doc/classes/Image.xml:592
msgid "Use ETC compression."
msgstr ""
-#: doc/classes/Image.xml:594
+#: doc/classes/Image.xml:595
msgid "Use ETC2 compression."
msgstr ""
-#: doc/classes/Image.xml:597
+#: doc/classes/Image.xml:598
msgid ""
"Source texture (before compression) is a regular texture. Default for all "
"textures."
msgstr ""
-#: doc/classes/Image.xml:600
+#: doc/classes/Image.xml:601
msgid "Source texture (before compression) is in sRGB space."
msgstr ""
-#: doc/classes/Image.xml:603
+#: doc/classes/Image.xml:604
msgid ""
"Source texture (before compression) is a normal texture (e.g. it can be "
"compressed into two channels)."
@@ -28122,6 +28217,17 @@ msgstr ""
#: doc/classes/Input.xml:43
msgid ""
+"Sends all input events which are in the current buffer to the game loop. "
+"These events may have been buffered as a result of accumulated input "
+"([method set_use_accumulated_input]) or agile input flushing ([member "
+"ProjectSettings.input_devices/buffering/agile_event_flushing]).\n"
+"The engine will already do this itself at key execution points (at least "
+"once per frame). However, this can be useful in advanced cases where you "
+"want precise control over the timing of event handling."
+msgstr ""
+
+#: doc/classes/Input.xml:50
+msgid ""
"Returns the acceleration of the device's accelerometer sensor, if the device "
"has one. Otherwise, the method returns [constant Vector3.ZERO].\n"
"Note this method returns an empty [Vector3] when running from the editor "
@@ -28133,7 +28239,7 @@ msgid ""
"the Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:53
+#: doc/classes/Input.xml:60
msgid ""
"Returns a value between 0 and 1 representing the raw intensity of the given "
"action, ignoring the action's deadzone. In most cases, you should use "
@@ -28143,7 +28249,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:62
+#: doc/classes/Input.xml:69
msgid ""
"Returns a value between 0 and 1 representing the intensity of the given "
"action. In a joypad, for example, the further away the axis (analog sticks "
@@ -28155,7 +28261,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:71
+#: doc/classes/Input.xml:78
msgid ""
"Get axis input by specifying two actions, one negative and one positive.\n"
"This is a shorthand for writing [code]Input."
@@ -28163,17 +28269,17 @@ msgid ""
"get_action_strength(\"negative_action\")[/code]."
msgstr ""
-#: doc/classes/Input.xml:78
+#: doc/classes/Input.xml:85
msgid ""
"Returns an [Array] containing the device IDs of all currently connected "
"joypads."
msgstr ""
-#: doc/classes/Input.xml:84
+#: doc/classes/Input.xml:91
msgid "Returns the currently assigned cursor shape (see [enum CursorShape])."
msgstr ""
-#: doc/classes/Input.xml:90
+#: doc/classes/Input.xml:97
msgid ""
"Returns the gravity of the device's accelerometer sensor, if the device has "
"one. Otherwise, the method returns [constant Vector3.ZERO].\n"
@@ -28183,7 +28289,7 @@ msgid ""
"Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:97
+#: doc/classes/Input.xml:104
msgid ""
"Returns the rotation rate in rad/s around a device's X, Y, and Z axes of the "
"gyroscope sensor, if the device has one. Otherwise, the method returns "
@@ -28192,53 +28298,53 @@ msgid ""
"it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:106
+#: doc/classes/Input.xml:113
msgid ""
"Returns the current value of the joypad axis at given index (see [enum "
"JoystickList])."
msgstr ""
-#: doc/classes/Input.xml:113
+#: doc/classes/Input.xml:120
msgid "Returns the index of the provided axis name."
msgstr ""
-#: doc/classes/Input.xml:120
+#: doc/classes/Input.xml:127
msgid ""
"Receives a [enum JoystickList] axis and returns its equivalent name as a "
"string."
msgstr ""
-#: doc/classes/Input.xml:127
+#: doc/classes/Input.xml:134
msgid "Returns the index of the provided button name."
msgstr ""
-#: doc/classes/Input.xml:134
+#: doc/classes/Input.xml:141
msgid ""
"Receives a gamepad button from [enum JoystickList] and returns its "
"equivalent name as a string."
msgstr ""
-#: doc/classes/Input.xml:141
+#: doc/classes/Input.xml:148
msgid ""
"Returns a SDL2-compatible device GUID on platforms that use gamepad "
"remapping. Returns [code]\"Default Gamepad\"[/code] otherwise."
msgstr ""
-#: doc/classes/Input.xml:148
+#: doc/classes/Input.xml:155
msgid "Returns the name of the joypad at the specified device index."
msgstr ""
-#: doc/classes/Input.xml:155
+#: doc/classes/Input.xml:162
msgid "Returns the duration of the current vibration effect in seconds."
msgstr ""
-#: doc/classes/Input.xml:162
+#: doc/classes/Input.xml:169
msgid ""
"Returns the strength of the joypad vibration: x is the strength of the weak "
"motor, and y is the strength of the strong motor."
msgstr ""
-#: doc/classes/Input.xml:168
+#: doc/classes/Input.xml:175
msgid ""
"Returns the mouse speed for the last time the cursor was moved, and this "
"until the next frame where the mouse moves. This means that even if the "
@@ -28246,7 +28352,7 @@ msgid ""
"motion."
msgstr ""
-#: doc/classes/Input.xml:174
+#: doc/classes/Input.xml:181
msgid ""
"Returns the magnetic field strength in micro-Tesla for all axes of the "
"device's magnetometer sensor, if the device has one. Otherwise, the method "
@@ -28255,17 +28361,17 @@ msgid ""
"platforms, it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:181
+#: doc/classes/Input.xml:188
msgid ""
"Returns mouse buttons as a bitmask. If multiple mouse buttons are pressed at "
"the same time, the bits are added together."
msgstr ""
-#: doc/classes/Input.xml:187
+#: doc/classes/Input.xml:194
msgid "Returns the mouse mode. See the constants for more information."
msgstr ""
-#: doc/classes/Input.xml:198
+#: doc/classes/Input.xml:205
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -28278,7 +28384,7 @@ msgid ""
"want (on the range of 0 to 1)."
msgstr ""
-#: doc/classes/Input.xml:208
+#: doc/classes/Input.xml:215
msgid ""
"Returns [code]true[/code] when the user starts pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user pressed down "
@@ -28290,7 +28396,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:218
+#: doc/classes/Input.xml:225
msgid ""
"Returns [code]true[/code] when the user stops pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user released the "
@@ -28300,7 +28406,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:227
+#: doc/classes/Input.xml:234
msgid ""
"Returns [code]true[/code] if you are pressing the action event. Note that if "
"an action has multiple buttons assigned and more than one of them is "
@@ -28311,13 +28417,13 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:236
+#: doc/classes/Input.xml:243
msgid ""
"Returns [code]true[/code] if you are pressing the joypad button (see [enum "
"JoystickList])."
msgstr ""
-#: doc/classes/Input.xml:243
+#: doc/classes/Input.xml:250
msgid ""
"Returns [code]true[/code] if the system knows the specified device. This "
"means that it sets all button and axis indices exactly as defined in [enum "
@@ -28325,19 +28431,19 @@ msgid ""
"but you can still retrieve events from them."
msgstr ""
-#: doc/classes/Input.xml:250
+#: doc/classes/Input.xml:257
msgid ""
"Returns [code]true[/code] if you are pressing the key. You can pass a [enum "
"KeyList] constant."
msgstr ""
-#: doc/classes/Input.xml:257
+#: doc/classes/Input.xml:264
msgid ""
"Returns [code]true[/code] if you are pressing the mouse button specified "
"with [enum ButtonList]."
msgstr ""
-#: doc/classes/Input.xml:267
+#: doc/classes/Input.xml:274
msgid ""
"Notifies the [Input] singleton that a connection has changed, to update the "
"state for the [code]device[/code] index.\n"
@@ -28346,7 +28452,7 @@ msgid ""
"triggered internally."
msgstr ""
-#: doc/classes/Input.xml:275
+#: doc/classes/Input.xml:282
msgid ""
"Feeds an [InputEvent] to the game. Can be used to artificially trigger input "
"events from code. Also generates [method Node._input] calls.\n"
@@ -28359,12 +28465,21 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Input.xml:289
+#: doc/classes/Input.xml:296
msgid ""
"Removes all mappings from the internal database that match the given GUID."
msgstr ""
-#: doc/classes/Input.xml:298
+#: doc/classes/Input.xml:303
+msgid ""
+"Sets the acceleration value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:313
msgid ""
"Sets a custom mouse cursor image, which is only visible inside the game "
"window. The hotspot can also be specified. Passing [code]null[/code] to the "
@@ -28379,7 +28494,7 @@ msgid ""
"compression mode can't be used for custom cursors."
msgstr ""
-#: doc/classes/Input.xml:309
+#: doc/classes/Input.xml:324
msgid ""
"Sets the default cursor shape to be used in the viewport instead of "
"[constant CURSOR_ARROW].\n"
@@ -28389,11 +28504,38 @@ msgid ""
"cursor immediately."
msgstr ""
-#: doc/classes/Input.xml:318
+#: doc/classes/Input.xml:333
+msgid ""
+"Sets the gravity value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:341
+msgid ""
+"Sets the value of the rotation rate of the gyroscope sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:349
+msgid ""
+"Sets the value of the magnetic field of the magnetometer sensor. Can be used "
+"for debugging on devices without a hardware sensor, for example in an editor "
+"on a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:357
msgid "Sets the mouse mode. See the constants for more information."
msgstr ""
-#: doc/classes/Input.xml:325
+#: doc/classes/Input.xml:364
msgid ""
"Enables or disables the accumulation of similar input events sent by the "
"operating system. When input accumulation is enabled, all input events "
@@ -28407,7 +28549,7 @@ msgid ""
"results that closely follow the actual input."
msgstr ""
-#: doc/classes/Input.xml:336
+#: doc/classes/Input.xml:375
msgid ""
"Starts to vibrate the joypad. Joypads usually come with two rumble motors, a "
"strong and a weak one. [code]weak_magnitude[/code] is the strength of the "
@@ -28420,34 +28562,34 @@ msgid ""
"few seconds."
msgstr ""
-#: doc/classes/Input.xml:344
+#: doc/classes/Input.xml:383
msgid "Stops the vibration of the joypad."
msgstr ""
-#: doc/classes/Input.xml:351
+#: doc/classes/Input.xml:390
msgid ""
"Vibrate Android and iOS devices.\n"
"[b]Note:[/b] It needs [code]VIBRATE[/code] permission for Android at export "
"settings. iOS does not support duration."
msgstr ""
-#: doc/classes/Input.xml:359
+#: doc/classes/Input.xml:398
msgid "Sets the mouse position to the specified vector."
msgstr ""
-#: doc/classes/Input.xml:368
+#: doc/classes/Input.xml:407
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
-#: doc/classes/Input.xml:374
+#: doc/classes/Input.xml:413
msgid "Makes the mouse cursor visible if it is hidden."
msgstr ""
-#: doc/classes/Input.xml:377
+#: doc/classes/Input.xml:416
msgid "Makes the mouse cursor hidden if it is visible."
msgstr ""
-#: doc/classes/Input.xml:380
+#: doc/classes/Input.xml:419
msgid ""
"Captures the mouse. The mouse will be hidden and its position locked at the "
"center of the screen.\n"
@@ -28455,83 +28597,83 @@ msgid ""
"need to use [member InputEventMouseMotion.relative]."
msgstr ""
-#: doc/classes/Input.xml:384
+#: doc/classes/Input.xml:423
msgid "Makes the mouse cursor visible but confines it to the game window."
msgstr ""
-#: doc/classes/Input.xml:387
+#: doc/classes/Input.xml:426
msgid "Arrow cursor. Standard, default pointing cursor."
msgstr ""
-#: doc/classes/Input.xml:390
+#: doc/classes/Input.xml:429
msgid ""
"I-beam cursor. Usually used to show where the text cursor will appear when "
"the mouse is clicked."
msgstr ""
-#: doc/classes/Input.xml:393
+#: doc/classes/Input.xml:432
msgid ""
"Pointing hand cursor. Usually used to indicate the pointer is over a link or "
"other interactable item."
msgstr ""
-#: doc/classes/Input.xml:396
+#: doc/classes/Input.xml:435
msgid ""
"Cross cursor. Typically appears over regions in which a drawing operation "
"can be performed or for selections."
msgstr ""
-#: doc/classes/Input.xml:399
+#: doc/classes/Input.xml:438
msgid ""
"Wait cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application is still usable during the "
"operation."
msgstr ""
-#: doc/classes/Input.xml:402
+#: doc/classes/Input.xml:441
msgid ""
"Busy cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application isn't usable during the "
"operation (e.g. something is blocking its main thread)."
msgstr ""
-#: doc/classes/Input.xml:405
+#: doc/classes/Input.xml:444
msgid "Drag cursor. Usually displayed when dragging something."
msgstr ""
-#: doc/classes/Input.xml:408
+#: doc/classes/Input.xml:447
msgid ""
"Can drop cursor. Usually displayed when dragging something to indicate that "
"it can be dropped at the current position."
msgstr ""
-#: doc/classes/Input.xml:411
+#: doc/classes/Input.xml:450
msgid ""
"Forbidden cursor. Indicates that the current action is forbidden (for "
"example, when dragging something) or that the control at a position is "
"disabled."
msgstr ""
-#: doc/classes/Input.xml:414
+#: doc/classes/Input.xml:453
msgid ""
"Vertical resize mouse cursor. A double-headed vertical arrow. It tells the "
"user they can resize the window or the panel vertically."
msgstr ""
-#: doc/classes/Input.xml:417
+#: doc/classes/Input.xml:456
msgid ""
"Horizontal resize mouse cursor. A double-headed horizontal arrow. It tells "
"the user they can resize the window or the panel horizontally."
msgstr ""
-#: doc/classes/Input.xml:420
+#: doc/classes/Input.xml:459
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the bottom left to the top right. It tells the user they can resize the "
"window or the panel both horizontally and vertically."
msgstr ""
-#: doc/classes/Input.xml:423
+#: doc/classes/Input.xml:462
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the top left to the bottom right, the opposite of [constant "
@@ -28539,23 +28681,23 @@ msgid ""
"both horizontally and vertically."
msgstr ""
-#: doc/classes/Input.xml:426
+#: doc/classes/Input.xml:465
msgid "Move cursor. Indicates that something can be moved."
msgstr ""
-#: doc/classes/Input.xml:429
+#: doc/classes/Input.xml:468
msgid ""
"Vertical split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_VSIZE]."
msgstr ""
-#: doc/classes/Input.xml:432
+#: doc/classes/Input.xml:471
msgid ""
"Horizontal split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_HSIZE]."
msgstr ""
-#: doc/classes/Input.xml:435
+#: doc/classes/Input.xml:474
msgid "Help cursor. Usually a question mark."
msgstr ""
@@ -28963,7 +29105,9 @@ msgid "The drag position."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -30262,7 +30406,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30327,22 +30472,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -30357,7 +30504,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -30365,19 +30512,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -30445,7 +30592,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30503,7 +30651,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -31785,14 +31935,21 @@ msgid "Default text [Color] of the [LinkButton]."
msgstr ""
#: doc/classes/LinkButton.xml:46
-msgid "Text [Color] used when the [LinkButton] is being hovered."
+msgid ""
+"Text [Color] used when the [LinkButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/LinkButton.xml:49
-msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgid "Text [Color] used when the [LinkButton] is being hovered."
msgstr ""
#: doc/classes/LinkButton.xml:52
+msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:55
msgid "The vertical space between the baseline of text and the underline."
msgstr ""
@@ -32285,26 +32442,33 @@ msgid "Text [Color] used when the [MenuButton] is disabled."
msgstr ""
#: doc/classes/MenuButton.xml:64
-msgid "Text [Color] used when the [MenuButton] is being hovered."
+msgid ""
+"Text [Color] used when the [MenuButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/MenuButton.xml:67
-msgid "Text [Color] used when the [MenuButton] is being pressed."
+msgid "Text [Color] used when the [MenuButton] is being hovered."
msgstr ""
#: doc/classes/MenuButton.xml:70
-msgid "[StyleBox] used when the [MenuButton] is being hovered."
+msgid "Text [Color] used when the [MenuButton] is being pressed."
msgstr ""
#: doc/classes/MenuButton.xml:73
-msgid "The horizontal space between [MenuButton]'s icon and text."
+msgid "[StyleBox] used when the [MenuButton] is being hovered."
msgstr ""
#: doc/classes/MenuButton.xml:76
-msgid "Default [StyleBox] for the [MenuButton]."
+msgid "The horizontal space between [MenuButton]'s icon and text."
msgstr ""
#: doc/classes/MenuButton.xml:79
+msgid "Default [StyleBox] for the [MenuButton]."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:82
msgid "[StyleBox] used when the [MenuButton] is being pressed."
msgstr ""
@@ -34014,7 +34178,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -36880,26 +37044,33 @@ msgid "Text [Color] used when the [OptionButton] is disabled."
msgstr ""
#: doc/classes/OptionButton.xml:212
-msgid "Text [Color] used when the [OptionButton] is being hovered."
+msgid ""
+"Text [Color] used when the [OptionButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/OptionButton.xml:215
-msgid "Text [Color] used when the [OptionButton] is being pressed."
+msgid "Text [Color] used when the [OptionButton] is being hovered."
msgstr ""
#: doc/classes/OptionButton.xml:218
-msgid "[StyleBox] used when the [OptionButton] is being hovered."
+msgid "Text [Color] used when the [OptionButton] is being pressed."
msgstr ""
#: doc/classes/OptionButton.xml:221
-msgid "The horizontal space between [OptionButton]'s icon and text."
+msgid "[StyleBox] used when the [OptionButton] is being hovered."
msgstr ""
#: doc/classes/OptionButton.xml:224
-msgid "Default [StyleBox] for the [OptionButton]."
+msgid "The horizontal space between [OptionButton]'s icon and text."
msgstr ""
#: doc/classes/OptionButton.xml:227
+msgid "Default [StyleBox] for the [OptionButton]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:230
msgid "[StyleBox] used when the [OptionButton] is being pressed."
msgstr ""
@@ -37302,7 +37473,7 @@ msgstr ""
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -37332,14 +37503,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -37349,7 +37520,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -39827,17 +39998,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -39855,11 +40052,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -40054,7 +40251,9 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-msgid "Returns the [Physics2DDirectBodyState] of the body."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
@@ -40856,6 +41055,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -40873,7 +41090,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -40987,7 +41204,9 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-msgid "Returns the [PhysicsDirectBodyState] of the body."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/PhysicsServer.xml:370
@@ -41966,27 +42185,27 @@ msgstr ""
msgid "Removes an element from the array by index."
msgstr ""
-#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolColorArray.xml:66
-#: doc/classes/PoolIntArray.xml:67 doc/classes/PoolRealArray.xml:67
-#: doc/classes/PoolStringArray.xml:74 doc/classes/PoolVector2Array.xml:67
-#: doc/classes/PoolVector3Array.xml:66
+#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolIntArray.xml:67
+#: doc/classes/PoolRealArray.xml:67
msgid ""
"Sets the size of the array. If the array is grown, reserves elements at the "
"end of the array. If the array is shrunk, truncates the array to the new "
-"size."
+"size.\n"
+"[b]Note:[/b] Added elements are not automatically initialized to 0 and will "
+"contain garbage, i.e. indeterminate values."
msgstr ""
-#: doc/classes/PoolByteArray.xml:121
+#: doc/classes/PoolByteArray.xml:122
msgid "Changes the byte at the given index."
msgstr ""
-#: doc/classes/PoolByteArray.xml:127 doc/classes/PoolColorArray.xml:79
-#: doc/classes/PoolRealArray.xml:80 doc/classes/PoolStringArray.xml:87
+#: doc/classes/PoolByteArray.xml:128 doc/classes/PoolColorArray.xml:79
+#: doc/classes/PoolRealArray.xml:81 doc/classes/PoolStringArray.xml:87
#: doc/classes/PoolVector2Array.xml:80 doc/classes/PoolVector3Array.xml:79
msgid "Returns the size of the array."
msgstr ""
-#: doc/classes/PoolByteArray.xml:135
+#: doc/classes/PoolByteArray.xml:136
msgid ""
"Returns the slice of the [PoolByteArray] between indices (inclusive) as a "
"new [PoolByteArray]. Any negative index is considered to be from the end of "
@@ -42018,6 +42237,14 @@ msgstr ""
msgid "Appends a value to the array."
msgstr ""
+#: doc/classes/PoolColorArray.xml:66 doc/classes/PoolStringArray.xml:74
+#: doc/classes/PoolVector2Array.xml:67 doc/classes/PoolVector3Array.xml:66
+msgid ""
+"Sets the size of the array. If the array is grown, reserves elements at the "
+"end of the array. If the array is shrunk, truncates the array to the new "
+"size."
+msgstr ""
+
#: doc/classes/PoolColorArray.xml:73
msgid "Changes the [Color] at the given index."
msgstr ""
@@ -42054,11 +42281,11 @@ msgid ""
"valid, or at the end of the array ([code]idx == size()[/code])."
msgstr ""
-#: doc/classes/PoolIntArray.xml:74
+#: doc/classes/PoolIntArray.xml:75
msgid "Changes the int at the given index."
msgstr ""
-#: doc/classes/PoolIntArray.xml:80
+#: doc/classes/PoolIntArray.xml:81
msgid "Returns the array size."
msgstr ""
@@ -42090,7 +42317,7 @@ msgstr ""
msgid "Appends a [PoolRealArray] at the end of this array."
msgstr ""
-#: doc/classes/PoolRealArray.xml:74
+#: doc/classes/PoolRealArray.xml:75
msgid "Changes the float at the given index."
msgstr ""
@@ -43355,18 +43582,6 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:204
msgid ""
-"The project data directory is used for storing project-specific data "
-"(metadata, shader cache, etc.).\n"
-"[b]Note:[/b] Restart the application after changing this setting.\n"
-"[b]Note:[/b] Changing this value can help on platforms or with third-party "
-"tools where specific directory patterns are disallowed. Only modify this "
-"setting if you know that your environment requires it, as changing the "
-"default can impact compatibility with some external tools or plugins which "
-"expect the default [code].import[/code] folder."
-msgstr ""
-
-#: doc/classes/ProjectSettings.xml:209
-msgid ""
"Specifies a file to override project settings. For example: [code]user://"
"custom_settings.cfg[/code]. See \"Overriding\" in the [ProjectSettings] "
"class description at the top for more information.\n"
@@ -43374,7 +43589,7 @@ msgid ""
"code] will still be read to override the project settings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:213
+#: doc/classes/ProjectSettings.xml:208
msgid ""
"If [code]true[/code], the project will save user data to its own user "
"directory (see [member application/config/custom_user_dir_name]). This "
@@ -43384,13 +43599,28 @@ msgid ""
"user data directory)/Godot/app_userdata/(project name)[/code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:216
+#: doc/classes/ProjectSettings.xml:211
+msgid ""
+"If [code]true[/code], the project will use a hidden directory ([code]."
+"import[/code]) for storing project-specific data (metadata, shader cache, "
+"etc.).\n"
+"If [code]false[/code], a non-hidden directory ([code]import[/code]) will be "
+"used instead.\n"
+"[b]Note:[/b] Restart the application after changing this setting.\n"
+"[b]Note:[/b] Changing this value can help on platforms or with third-party "
+"tools where hidden directory patterns are disallowed. Only modify this "
+"setting if you know that your environment requires it, as changing the "
+"default can impact compatibility with some external tools or plugins which "
+"expect the default [code].import[/code] folder."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:217
msgid ""
"Icon set in [code].ico[/code] format used on Windows to set the game's icon. "
"This is done automatically on start by calling [method OS.set_native_icon]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:219
+#: doc/classes/ProjectSettings.xml:220
msgid ""
"Time samples for frame deltas are subject to random variation introduced by "
"the platform, even when frames are displayed at regular intervals thanks to "
@@ -43404,14 +43634,14 @@ msgid ""
"adequate to render frames at the refresh rate."
msgstr ""
-#: doc/classes/ProjectSettings.xml:224
+#: doc/classes/ProjectSettings.xml:225
msgid ""
"[b]Experimental.[/b] Shifts the measurement of delta time for each frame to "
"just after the drawing has taken place. This may lead to more consistent "
"deltas and a reduction in frame stutters."
msgstr ""
-#: doc/classes/ProjectSettings.xml:227
+#: doc/classes/ProjectSettings.xml:228
msgid ""
"If [code]true[/code], disables printing to standard error. If [code]true[/"
"code], this also hides error and warning messages printed by [method "
@@ -43420,7 +43650,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:231
+#: doc/classes/ProjectSettings.xml:232
msgid ""
"If [code]true[/code], disables printing to standard output. This is "
"equivalent to starting the editor or project with the [code]--quiet[/code] "
@@ -43428,7 +43658,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:235
+#: doc/classes/ProjectSettings.xml:236
msgid ""
"If [code]true[/code], flushes the standard output stream every time a line "
"is printed. This affects both terminal logging and file logging.\n"
@@ -43444,20 +43674,20 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:241
+#: doc/classes/ProjectSettings.xml:242
msgid ""
"Debug build override for [member application/run/flush_stdout_on_print], as "
"performance is less important during debugging.\n"
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:245
+#: doc/classes/ProjectSettings.xml:246
msgid ""
"Forces a delay between frames in the main loop (in milliseconds). This may "
"be useful if you plan to disable vertical synchronization."
msgstr ""
-#: doc/classes/ProjectSettings.xml:248
+#: doc/classes/ProjectSettings.xml:249
msgid ""
"If [code]true[/code], enables low-processor usage mode. This setting only "
"works on desktop platforms. The screen is not redrawn if nothing changes "
@@ -43465,75 +43695,81 @@ msgid ""
"useless (and can hurt performance) in most games."
msgstr ""
-#: doc/classes/ProjectSettings.xml:251
+#: doc/classes/ProjectSettings.xml:252
msgid ""
"Amount of sleeping between frames when the low-processor usage mode is "
"enabled (in microseconds). Higher values will result in lower CPU usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:254
+#: doc/classes/ProjectSettings.xml:255
msgid "Path to the main scene file that will be loaded when the project runs."
msgstr ""
-#: doc/classes/ProjectSettings.xml:257 doc/classes/ProjectSettings.xml:260
+#: doc/classes/ProjectSettings.xml:258 doc/classes/ProjectSettings.xml:261
msgid ""
"Audio buses will disable automatically when sound goes below a given dB "
"threshold for a given time. This saves CPU as effects assigned to that bus "
"will no longer do any processing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:263
+#: doc/classes/ProjectSettings.xml:264
msgid ""
"Default [AudioBusLayout] resource file to use in the project, unless "
"overridden by the scene."
msgstr ""
-#: doc/classes/ProjectSettings.xml:266
+#: doc/classes/ProjectSettings.xml:267
msgid ""
"Specifies the audio driver to use. This setting is platform-dependent as "
"each platform supports different audio drivers. If left empty, the default "
"audio driver will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:269
+#: doc/classes/ProjectSettings.xml:270
msgid ""
"If [code]true[/code], microphone input will be allowed. This requires "
"appropriate permissions to be set when exporting to Android or iOS."
msgstr ""
-#: doc/classes/ProjectSettings.xml:272
+#: doc/classes/ProjectSettings.xml:273
msgid ""
"The mixing rate used for audio (in Hz). In general, it's better to not touch "
"this and leave it to the host operating system."
msgstr ""
-#: doc/classes/ProjectSettings.xml:275
+#: doc/classes/ProjectSettings.xml:276
msgid ""
"Safer override for [member audio/mix_rate] in the Web platform. Here "
"[code]0[/code] means \"let the browser choose\" (since some browsers do not "
"like forcing the mix rate)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:278
+#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:281
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:284
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:287
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43543,7 +43779,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:290
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43553,27 +43789,27 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:293
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:296
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
-#: doc/classes/ProjectSettings.xml:299
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:302
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -43581,81 +43817,81 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:305
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:308
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:311
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:314
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:317
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr ""
-#: doc/classes/ProjectSettings.xml:320
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:323
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:326
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:329
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:332
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:335
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:338
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:341
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -43663,109 +43899,109 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:344
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:347
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:350
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:353
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:356
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:359
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:362
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:365
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:368
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:371
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:374
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:377
+#: doc/classes/ProjectSettings.xml:380
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:380
+#: doc/classes/ProjectSettings.xml:383
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:383
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:386
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:389
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:392
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:395
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:398
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -43776,91 +44012,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:403
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:406
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:409
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:412
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:415
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:418
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:421
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:424
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:427
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:430
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:433
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:436
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:439
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr ""
-#: doc/classes/ProjectSettings.xml:442
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:445
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:448
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:451
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -43869,13 +44105,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:455
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:458
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -43885,7 +44121,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:463
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -43893,19 +44129,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:468
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:472
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:476
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -43919,45 +44155,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:481
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:484
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:488
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:491
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:494
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:497
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:500
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -43966,7 +44202,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:503
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -43977,7 +44213,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:507
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -43993,14 +44229,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:515
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:518
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -44008,49 +44244,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:521
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:524
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:529
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:532
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:535
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:538
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:541
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:544
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:547
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -44059,7 +44295,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:551
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44067,7 +44303,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:555
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44075,7 +44311,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:559
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44085,7 +44321,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:563
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -44094,7 +44330,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:567
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -44103,7 +44339,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:571
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44113,7 +44349,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:575
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44121,7 +44357,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:579
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -44131,7 +44367,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:583
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -44141,7 +44377,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:587
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44149,7 +44385,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:591
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -44158,7 +44394,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:595
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44166,7 +44402,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:599
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -44178,477 +44414,477 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:605
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:608
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:611
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:614
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:617
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:620
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:623
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:626
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:629
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:632
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:635
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:638
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:641
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:644
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:647
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:650
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:653
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:656
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:659
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:662
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:665
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:668
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:671
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:674
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:677
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:680
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:683
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:686
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:689
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:692
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:695
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:698
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:701
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:704
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:707
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:710
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:713
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:716
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:719
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:722
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:725
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:728
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:731
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:734
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:737
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:740
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:743
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:746
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:749
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:752
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:755
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:758
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:761
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:764
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:767
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:770
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:773
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:776
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:779
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:782
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:785
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:788
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:791
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:794
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:797
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:800
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:803
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:806
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:809
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:812
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:815
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:818
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:821
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:824
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:827
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:830
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:833
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:836
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:839
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:842
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:845
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:848
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:851
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:854
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:857
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:860
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:863
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:866
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:869
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:872
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:875
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:878
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:881
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr ""
-#: doc/classes/ProjectSettings.xml:884
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:887
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:890
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:893
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:896
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:899
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:902
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:905
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:908
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:911
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:914
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:917
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:920
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:923
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:926
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:929
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:932
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:935
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:938
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:941
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:946
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:949
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -44656,92 +44892,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:952
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:955
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:958
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:961
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:964
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:967
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:970
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:973
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:976
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:979
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:982
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:985
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:988
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:991
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:994
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:997
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1000
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1003
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -44751,33 +44987,33 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1007
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1010
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1013
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1017
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1021
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -44790,7 +45026,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1025
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -44802,7 +45038,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1033
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -44814,7 +45050,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1041
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -44827,7 +45063,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1045
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -44835,28 +45071,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1049
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1053
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1056
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1059
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -44866,25 +45102,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1063
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1066
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1069
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1072
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -44897,7 +45133,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1076
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -44909,7 +45145,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1084
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -44921,7 +45157,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1092
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -44934,13 +45170,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1096
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1099
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -44948,11 +45184,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1103
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1106
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -44966,7 +45202,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1112
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -44975,7 +45211,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1116
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -44991,7 +45227,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1121
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -45001,7 +45237,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1125
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45011,7 +45247,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1129
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -45022,7 +45258,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1133
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45032,7 +45268,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1137
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -45040,7 +45276,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1141
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -45051,7 +45287,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1145
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -45066,7 +45302,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1151
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -45075,13 +45311,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1156
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1159
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -45090,7 +45326,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1162
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -45100,7 +45336,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1165
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -45112,7 +45348,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1168
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -45122,24 +45358,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1171
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1174
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1177
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1180
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -45148,7 +45384,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1183
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -45156,7 +45392,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1186
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -45165,7 +45401,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1189
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -45175,7 +45411,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1193
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -45183,31 +45419,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1197
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1200
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1203
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1206
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1209
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -45215,7 +45451,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1212
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -45225,46 +45461,53 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1215
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1218
+#: doc/classes/ProjectSettings.xml:1221
+msgid ""
+"iOS specific override for [member rendering/gles2/compatibility/"
+"disable_half_float], due to poor support for half-float vertex compression "
+"on many devices."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1224
msgid ""
-"If [code]true[/code] and available on the target device, enables high "
-"floating point precision for all shader computations in GLES2.\n"
+"If [code]true[/code] and available on the target Android device, enables "
+"high floating point precision for all shader computations in GLES2.\n"
"[b]Warning:[/b] High floating point precision can be extremely slow on older "
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1225
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1228
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1231
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1234
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -45272,7 +45515,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1237
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -45282,7 +45525,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1240
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -45291,7 +45534,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1243
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -45300,20 +45543,20 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1246
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1249
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1252
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -45322,7 +45565,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1255
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -45330,7 +45573,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1258
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -45339,7 +45582,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -45349,20 +45592,20 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1267
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1274
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -45371,13 +45614,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -45387,46 +45630,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1293
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1296
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1299
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1302
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1305
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -45436,7 +45679,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -45448,7 +45691,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -45456,7 +45699,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1316
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -45464,7 +45707,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -45473,7 +45716,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1323
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -45487,7 +45730,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1328
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -45497,7 +45740,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1331
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -45506,7 +45749,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1334
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -45516,54 +45759,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1337
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1340
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1343
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1346
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1349
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1352
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1355
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1358
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -45574,61 +45817,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1365
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1368
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1371
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1374
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1377
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1380
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1383
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1386
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -45639,7 +45882,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -45648,26 +45891,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1393 doc/classes/ProjectSettings.xml:1396
#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1405
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1408
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1411
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -45678,20 +45921,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1418
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -45703,52 +45946,52 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1428
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1435
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1438
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1441
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1444
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1447
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1450
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1453
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -45756,7 +45999,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -45766,10 +46009,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -45778,10 +46021,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -45790,10 +46033,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -45802,10 +46045,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -45814,10 +46057,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -46476,40 +46719,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr ""
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -46517,14 +46774,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -48851,6 +49108,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -48868,7 +49141,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -48876,11 +49149,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -48890,19 +49163,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -54287,20 +54560,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -54311,28 +54589,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -54344,19 +54622,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
@@ -57135,26 +57413,33 @@ msgid "Text [Color] used when the [ToolButton] is disabled."
msgstr ""
#: doc/classes/ToolButton.xml:39
-msgid "Text [Color] used when the [ToolButton] is being hovered."
+msgid ""
+"Text [Color] used when the [ToolButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/ToolButton.xml:42
-msgid "Text [Color] used when the [ToolButton] is being pressed."
+msgid "Text [Color] used when the [ToolButton] is being hovered."
msgstr ""
#: doc/classes/ToolButton.xml:45
-msgid "[StyleBox] used when the [ToolButton] is being hovered."
+msgid "Text [Color] used when the [ToolButton] is being pressed."
msgstr ""
#: doc/classes/ToolButton.xml:48
-msgid "The horizontal space between [ToolButton]'s icon and text."
+msgid "[StyleBox] used when the [ToolButton] is being hovered."
msgstr ""
#: doc/classes/ToolButton.xml:51
-msgid "Default [StyleBox] for the [ToolButton]."
+msgid "The horizontal space between [ToolButton]'s icon and text."
msgstr ""
#: doc/classes/ToolButton.xml:54
+msgid "Default [StyleBox] for the [ToolButton]."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:57
msgid "[StyleBox] used when the [ToolButton] is being pressed."
msgstr ""
diff --git a/doc/translations/hu.po b/doc/translations/hu.po
index e439716469..d4797ed27b 100644
--- a/doc/translations/hu.po
+++ b/doc/translations/hu.po
@@ -4,12 +4,15 @@
# This file is distributed under the same license as the Godot source code.
#
# Misi <varady.misi@gmail.com>, 2021.
+# Looky1173 <lgl1173and2006@gmail.com>, 2021.
+# Frontrider <frontrider@tutanota.com>, 2021.
+# Andras Virag <snowflake71@gmail.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2021-10-10 14:03+0000\n"
-"Last-Translator: Misi <varady.misi@gmail.com>\n"
+"PO-Revision-Date: 2021-11-15 21:14+0000\n"
+"Last-Translator: Andras Virag <snowflake71@gmail.com>\n"
"Language-Team: Hungarian <https://hosted.weblate.org/projects/godot-engine/"
"godot-class-reference/hu/>\n"
"Language: hu\n"
@@ -17,48 +20,45 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.9-dev\n"
+"X-Generator: Weblate 4.9.1-dev\n"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Description"
msgstr "Leírás"
-#: doc/tools/makerst.py
-#, fuzzy
+#: doc/tools/make_rst.py
msgid "Tutorials"
msgstr "Útmutatók"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Properties"
msgstr "Tulajdonságok"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Methods"
msgstr "Metódusok"
-#: doc/tools/makerst.py
-#, fuzzy
+#: doc/tools/make_rst.py
msgid "Theme Properties"
-msgstr "Téma Tulajdonságok"
+msgstr "Téma Tulajdonságai"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Signals"
msgstr "Jelzések"
-#: doc/tools/makerst.py
-#, fuzzy
+#: doc/tools/make_rst.py
msgid "Enumerations"
-msgstr "Számlálók"
+msgstr "Listák"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Constants"
-msgstr "Konstansok"
+msgstr "Ãllandók"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Property Descriptions"
-msgstr "Tulajdonság leírások"
+msgstr "Tulajdonság leírásai"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Method Descriptions"
msgstr "Metódus leírások"
@@ -1434,19 +1434,19 @@ msgstr ""
#: doc/classes/@GlobalScope.xml:104
msgid "Top-left corner."
-msgstr ""
+msgstr "Bal felső sarok."
#: doc/classes/@GlobalScope.xml:107
msgid "Top-right corner."
-msgstr ""
+msgstr "Jobb felső sarok."
#: doc/classes/@GlobalScope.xml:110
msgid "Bottom-right corner."
-msgstr ""
+msgstr "Jobb alsó sarok."
#: doc/classes/@GlobalScope.xml:113
msgid "Bottom-left corner."
-msgstr ""
+msgstr "Bal alsó sarok."
#: doc/classes/@GlobalScope.xml:116
msgid ""
@@ -1490,19 +1490,19 @@ msgstr ""
#: doc/classes/@GlobalScope.xml:143
msgid "Escape key."
-msgstr ""
+msgstr "Escape billentyű."
#: doc/classes/@GlobalScope.xml:146
msgid "Tab key."
-msgstr ""
+msgstr "Tab billentyű."
#: doc/classes/@GlobalScope.xml:149
msgid "Shift+Tab key."
-msgstr ""
+msgstr "Shift+Tab billentyű."
#: doc/classes/@GlobalScope.xml:152
msgid "Backspace key."
-msgstr ""
+msgstr "Backspace billentyű."
#: doc/classes/@GlobalScope.xml:155
msgid "Return key (on the main keyboard)."
@@ -3602,112 +3602,121 @@ msgid ""
msgstr ""
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr ""
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
msgstr ""
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
msgstr ""
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
msgstr ""
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr ""
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr ""
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr ""
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
msgstr ""
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr ""
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
msgstr ""
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
msgstr ""
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr ""
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
"positive.\n"
@@ -4779,7 +4788,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -6212,21 +6221,25 @@ msgstr ""
#: doc/classes/Area.xml:17
msgid ""
-"Returns a list of intersecting [Area]s. For performance reasons (collisions "
-"are all processed at the same time) this list is modified once during the "
-"physics step, not immediately after objects are moved. Consider using "
-"signals instead."
+"Returns a list of intersecting [Area]s. The overlapping area's [member "
+"CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:23
+#: doc/classes/Area.xml:24
msgid ""
-"Returns a list of intersecting [PhysicsBody]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody]s. The overlapping body's "
+"[member CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:30
+#: doc/classes/Area.xml:32
msgid ""
"If [code]true[/code], the given area overlaps the Area.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6234,7 +6247,7 @@ msgid ""
"physics step. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:38
+#: doc/classes/Area.xml:40
msgid ""
"If [code]true[/code], the given physics body overlaps the Area.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6245,7 +6258,7 @@ msgid ""
"their tiles with collision shapes as a virtual physics body)."
msgstr ""
-#: doc/classes/Area.xml:46
+#: doc/classes/Area.xml:48
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
"velocity lost per second.\n"
@@ -6253,41 +6266,41 @@ msgid ""
"details about damping."
msgstr ""
-#: doc/classes/Area.xml:50 doc/classes/Area2D.xml:52
+#: doc/classes/Area.xml:52 doc/classes/Area2D.xml:54
msgid "The name of the area's audio bus."
msgstr ""
-#: doc/classes/Area.xml:53 doc/classes/Area2D.xml:55
+#: doc/classes/Area.xml:55 doc/classes/Area2D.xml:57
msgid ""
"If [code]true[/code], the area's audio bus overrides the default audio bus."
msgstr ""
-#: doc/classes/Area.xml:56
+#: doc/classes/Area.xml:58
msgid ""
"The area's gravity intensity (in meters per second squared). This value "
"multiplies the gravity vector. This is useful to alter the force of gravity "
"without altering its direction."
msgstr ""
-#: doc/classes/Area.xml:59 doc/classes/Area2D.xml:61
+#: doc/classes/Area.xml:61 doc/classes/Area2D.xml:63
msgid ""
"The falloff factor for point gravity. The greater the value, the faster "
"gravity decreases with distance."
msgstr ""
-#: doc/classes/Area.xml:62 doc/classes/Area2D.xml:64
+#: doc/classes/Area.xml:64 doc/classes/Area2D.xml:66
msgid ""
"If [code]true[/code], gravity is calculated from a point (set via [member "
"gravity_vec]). See also [member space_override]."
msgstr ""
-#: doc/classes/Area.xml:65 doc/classes/Area2D.xml:67
+#: doc/classes/Area.xml:67 doc/classes/Area2D.xml:69
msgid ""
"The area's gravity vector (not normalized). If gravity is a point (see "
"[member gravity_point]), this will be the point of attraction."
msgstr ""
-#: doc/classes/Area.xml:68
+#: doc/classes/Area.xml:70
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
"velocity lost per second.\n"
@@ -6295,61 +6308,61 @@ msgid ""
"about damping."
msgstr ""
-#: doc/classes/Area.xml:72 doc/classes/Area2D.xml:74
+#: doc/classes/Area.xml:74 doc/classes/Area2D.xml:76
msgid "If [code]true[/code], other monitoring areas can detect this area."
msgstr ""
-#: doc/classes/Area.xml:75 doc/classes/Area2D.xml:77
+#: doc/classes/Area.xml:77 doc/classes/Area2D.xml:79
msgid ""
"If [code]true[/code], the area detects bodies or areas entering and exiting "
"it."
msgstr ""
-#: doc/classes/Area.xml:78 doc/classes/Area2D.xml:80
+#: doc/classes/Area.xml:80 doc/classes/Area2D.xml:82
msgid "The area's priority. Higher priority areas are processed first."
msgstr ""
-#: doc/classes/Area.xml:81
+#: doc/classes/Area.xml:83
msgid ""
"The degree to which this area applies reverb to its associated audio. Ranges "
"from [code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
msgstr ""
-#: doc/classes/Area.xml:84
+#: doc/classes/Area.xml:86
msgid "If [code]true[/code], the area applies reverb to its associated audio."
msgstr ""
-#: doc/classes/Area.xml:87
+#: doc/classes/Area.xml:89
msgid "The reverb bus name to use for this area's associated audio."
msgstr ""
-#: doc/classes/Area.xml:90
+#: doc/classes/Area.xml:92
msgid ""
"The degree to which this area's reverb is a uniform effect. Ranges from "
"[code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
msgstr ""
-#: doc/classes/Area.xml:93 doc/classes/Area2D.xml:83
+#: doc/classes/Area.xml:95 doc/classes/Area2D.xml:85
msgid ""
"Override mode for gravity and damping calculations within this area. See "
"[enum SpaceOverride] for possible values."
msgstr ""
-#: doc/classes/Area.xml:100
+#: doc/classes/Area.xml:102
msgid ""
"Emitted when another Area enters this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
-#: doc/classes/Area.xml:107
+#: doc/classes/Area.xml:109
msgid ""
"Emitted when another Area exits this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
-#: doc/classes/Area.xml:117 doc/classes/Area.xml:130
+#: doc/classes/Area.xml:119 doc/classes/Area.xml:132
msgid ""
"Emitted when one of another Area's [Shape]s enters one of this Area's "
"[Shape]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6364,7 +6377,7 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:140
+#: doc/classes/Area.xml:142
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] enters this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -6373,7 +6386,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:147
+#: doc/classes/Area.xml:149
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] exits this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -6382,7 +6395,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:157 doc/classes/Area.xml:170
+#: doc/classes/Area.xml:159 doc/classes/Area.xml:172
msgid ""
"Emitted when one of a [PhysicsBody] or [GridMap]'s [Shape]s enters one of "
"this Area's [Shape]s. Requires [member monitoring] to be set to [code]true[/"
@@ -6399,29 +6412,29 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:180 doc/classes/Area2D.xml:170
+#: doc/classes/Area.xml:182 doc/classes/Area2D.xml:172
msgid "This area does not affect gravity/damping."
msgstr ""
-#: doc/classes/Area.xml:183 doc/classes/Area2D.xml:173
+#: doc/classes/Area.xml:185 doc/classes/Area2D.xml:175
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order)."
msgstr ""
-#: doc/classes/Area.xml:186 doc/classes/Area2D.xml:176
+#: doc/classes/Area.xml:188 doc/classes/Area2D.xml:178
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order), ignoring any lower priority areas."
msgstr ""
-#: doc/classes/Area.xml:189 doc/classes/Area2D.xml:179
+#: doc/classes/Area.xml:191 doc/classes/Area2D.xml:181
msgid ""
"This area replaces any gravity/damping, even the defaults, ignoring any "
"lower priority areas."
msgstr ""
-#: doc/classes/Area.xml:192 doc/classes/Area2D.xml:182
+#: doc/classes/Area.xml:194 doc/classes/Area2D.xml:184
msgid ""
"This area replaces any gravity/damping calculated so far (in [member "
"priority] order), but keeps calculating the rest of the areas."
@@ -6456,21 +6469,25 @@ msgstr ""
#: doc/classes/Area2D.xml:19
msgid ""
-"Returns a list of intersecting [Area2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [Area2D]s. The overlapping area's [member "
+"CollisionObject2D.collision_layer] must be part of this area's [member "
+"CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:25
+#: doc/classes/Area2D.xml:26
msgid ""
-"Returns a list of intersecting [PhysicsBody2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody2D]s. The overlapping body's "
+"[member CollisionObject2D.collision_layer] must be part of this area's "
+"[member CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:32
+#: doc/classes/Area2D.xml:34
msgid ""
"If [code]true[/code], the given area overlaps the Area2D.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6478,7 +6495,7 @@ msgid ""
"the physics step. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:40
+#: doc/classes/Area2D.xml:42
msgid ""
"If [code]true[/code], the given physics body overlaps the Area2D.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6489,7 +6506,7 @@ msgid ""
"register their tiles with collision shapes as a virtual physics body)."
msgstr ""
-#: doc/classes/Area2D.xml:48
+#: doc/classes/Area2D.xml:50
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
"velocity lost per second.\n"
@@ -6497,14 +6514,14 @@ msgid ""
"details about damping."
msgstr ""
-#: doc/classes/Area2D.xml:58
+#: doc/classes/Area2D.xml:60
msgid ""
"The area's gravity intensity (in pixels per second squared). This value "
"multiplies the gravity vector. This is useful to alter the force of gravity "
"without altering its direction."
msgstr ""
-#: doc/classes/Area2D.xml:70
+#: doc/classes/Area2D.xml:72
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
"velocity lost per second.\n"
@@ -6512,21 +6529,21 @@ msgid ""
"about damping."
msgstr ""
-#: doc/classes/Area2D.xml:90
+#: doc/classes/Area2D.xml:92
msgid ""
"Emitted when another Area2D enters this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-#: doc/classes/Area2D.xml:97
+#: doc/classes/Area2D.xml:99
msgid ""
"Emitted when another Area2D exits this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-#: doc/classes/Area2D.xml:107
+#: doc/classes/Area2D.xml:109
msgid ""
"Emitted when one of another Area2D's [Shape2D]s enters one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6541,7 +6558,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:120
+#: doc/classes/Area2D.xml:122
msgid ""
"Emitted when one of another Area2D's [Shape2D]s exits one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6556,7 +6573,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:130
+#: doc/classes/Area2D.xml:132
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] enters this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -6565,7 +6582,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:137
+#: doc/classes/Area2D.xml:139
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] exits this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -6574,7 +6591,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:147
+#: doc/classes/Area2D.xml:149
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s enters one "
"of this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -6593,7 +6610,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:160
+#: doc/classes/Area2D.xml:162
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s exits one of "
"this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -10148,40 +10165,45 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
-"no save path is provided it will try to match the path from the current "
+"no root node is provided, parent of this node will be used as root instead. "
+"If no save path is provided it will try to match the path from the current "
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -10195,62 +10217,62 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
msgid "The rotation of the baked custom sky."
msgstr ""
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -10258,35 +10280,35 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -10294,13 +10316,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -10312,65 +10334,77 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr ""
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
msgid "Baking was successful."
msgstr ""
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr ""
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr ""
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr ""
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:133
+#: doc/classes/BakedLightmap.xml:132
+msgid ""
+"Returns if lightmapper can't be created. Unless you are using a custom "
+"lightmapper, please report this as bug."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:135
+msgid ""
+"There is no root node to start baking from. Either provide [code]from_node[/"
+"code] argument or attach this node to a parent that should be used as root."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:136
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:139
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:142
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -10818,8 +10852,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -11204,26 +11241,33 @@ msgid "Text [Color] used when the [Button] is disabled."
msgstr ""
#: doc/classes/Button.xml:77
-msgid "Text [Color] used when the [Button] is being hovered."
+msgid ""
+"Text [Color] used when the [Button] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/Button.xml:80
-msgid "Text [Color] used when the [Button] is being pressed."
+msgid "Text [Color] used when the [Button] is being hovered."
msgstr ""
#: doc/classes/Button.xml:83
-msgid "[StyleBox] used when the [Button] is being hovered."
+msgid "Text [Color] used when the [Button] is being pressed."
msgstr ""
#: doc/classes/Button.xml:86
-msgid "The horizontal space between [Button]'s icon and text."
+msgid "[StyleBox] used when the [Button] is being hovered."
msgstr ""
#: doc/classes/Button.xml:89
-msgid "Default [StyleBox] for the [Button]."
+msgid "The horizontal space between [Button]'s icon and text."
msgstr ""
#: doc/classes/Button.xml:92
+msgid "Default [StyleBox] for the [Button]."
+msgstr ""
+
+#: doc/classes/Button.xml:95
msgid "[StyleBox] used when the [Button] is being pressed."
msgstr ""
@@ -12682,80 +12726,96 @@ msgstr ""
msgid "The check icon to display when the [CheckBox] is checked."
msgstr ""
-#: doc/classes/CheckBox.xml:30
+#: doc/classes/CheckBox.xml:28
+msgid "The check icon to display when the [CheckBox] is checked and disabled."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:31
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is disabled."
msgstr ""
-#: doc/classes/CheckBox.xml:33
+#: doc/classes/CheckBox.xml:34
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is focused."
msgstr ""
-#: doc/classes/CheckBox.xml:36
+#: doc/classes/CheckBox.xml:37
msgid "The [Font] to use for the [CheckBox] text."
msgstr ""
-#: doc/classes/CheckBox.xml:39
+#: doc/classes/CheckBox.xml:40
msgid "The [CheckBox] text's font color."
msgstr ""
-#: doc/classes/CheckBox.xml:42
+#: doc/classes/CheckBox.xml:43
msgid "The [CheckBox] text's font color when it's disabled."
msgstr ""
-#: doc/classes/CheckBox.xml:45
+#: doc/classes/CheckBox.xml:46
+msgid ""
+"The [CheckBox] text's font color when it's focused. Only replaces the normal "
+"text color of the checkbox. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:49
msgid "The [CheckBox] text's font color when it's hovered."
msgstr ""
-#: doc/classes/CheckBox.xml:48
+#: doc/classes/CheckBox.xml:52
msgid "The [CheckBox] text's font color when it's hovered and pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:51
+#: doc/classes/CheckBox.xml:55
msgid "The [CheckBox] text's font color when it's pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:54
+#: doc/classes/CheckBox.xml:58
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered."
msgstr ""
-#: doc/classes/CheckBox.xml:57
+#: doc/classes/CheckBox.xml:61
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered and "
"pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:60
+#: doc/classes/CheckBox.xml:64
msgid "The separation between the check icon and the text (in pixels)."
msgstr ""
-#: doc/classes/CheckBox.xml:63 doc/classes/CheckButton.xml:58
+#: doc/classes/CheckBox.xml:67 doc/classes/CheckButton.xml:61
msgid "The [StyleBox] to display as a background."
msgstr ""
-#: doc/classes/CheckBox.xml:66
+#: doc/classes/CheckBox.xml:70
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:69
+#: doc/classes/CheckBox.xml:73
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is checked."
msgstr ""
-#: doc/classes/CheckBox.xml:74
+#: doc/classes/CheckBox.xml:78
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is unchecked."
msgstr ""
-#: doc/classes/CheckBox.xml:79
+#: doc/classes/CheckBox.xml:83
msgid "The check icon to display when the [CheckBox] is unchecked."
msgstr ""
+#: doc/classes/CheckBox.xml:86
+msgid ""
+"The check icon to display when the [CheckBox] is unchecked and disabled."
+msgstr ""
+
#: doc/classes/CheckButton.xml:4
msgid "Checkable button. See also [CheckBox]."
msgstr ""
@@ -12799,49 +12859,56 @@ msgid "The [CheckButton] text's font color when it's disabled."
msgstr ""
#: doc/classes/CheckButton.xml:40
-msgid "The [CheckButton] text's font color when it's hovered."
+msgid ""
+"The [CheckButton] text's font color when it's focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/CheckButton.xml:43
-msgid "The [CheckButton] text's font color when it's hovered and pressed."
+msgid "The [CheckButton] text's font color when it's hovered."
msgstr ""
#: doc/classes/CheckButton.xml:46
-msgid "The [CheckButton] text's font color when it's pressed."
+msgid "The [CheckButton] text's font color when it's hovered and pressed."
msgstr ""
#: doc/classes/CheckButton.xml:49
+msgid "The [CheckButton] text's font color when it's pressed."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:52
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered."
msgstr ""
-#: doc/classes/CheckButton.xml:52
+#: doc/classes/CheckButton.xml:55
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered "
"and pressed."
msgstr ""
-#: doc/classes/CheckButton.xml:55
+#: doc/classes/CheckButton.xml:58
msgid "The separation between the toggle icon and the text (in pixels)."
msgstr ""
-#: doc/classes/CheckButton.xml:61
+#: doc/classes/CheckButton.xml:64
msgid "The icon to display when the [CheckButton] is unchecked."
msgstr ""
-#: doc/classes/CheckButton.xml:64
+#: doc/classes/CheckButton.xml:67
msgid "The icon to display when the [CheckButton] is unchecked and disabled."
msgstr ""
-#: doc/classes/CheckButton.xml:67
+#: doc/classes/CheckButton.xml:70
msgid "The icon to display when the [CheckButton] is checked."
msgstr ""
-#: doc/classes/CheckButton.xml:70
+#: doc/classes/CheckButton.xml:73
msgid "The icon to display when the [CheckButton] is checked and disabled."
msgstr ""
-#: doc/classes/CheckButton.xml:73
+#: doc/classes/CheckButton.xml:76
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is pressed."
msgstr ""
@@ -14609,26 +14676,33 @@ msgid "Text [Color] used when the [ColorPickerButton] is disabled."
msgstr ""
#: doc/classes/ColorPickerButton.xml:80
-msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
+msgid ""
+"Text [Color] used when the [ColorPickerButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/ColorPickerButton.xml:83
-msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
+msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
msgstr ""
#: doc/classes/ColorPickerButton.xml:86
-msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
+msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
msgstr ""
#: doc/classes/ColorPickerButton.xml:89
-msgid "The horizontal space between [ColorPickerButton]'s icon and text."
+msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
msgstr ""
#: doc/classes/ColorPickerButton.xml:92
-msgid "Default [StyleBox] for the [ColorPickerButton]."
+msgid "The horizontal space between [ColorPickerButton]'s icon and text."
msgstr ""
#: doc/classes/ColorPickerButton.xml:95
+msgid "Default [StyleBox] for the [ColorPickerButton]."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:98
msgid "[StyleBox] used when the [ColorPickerButton] is being pressed."
msgstr ""
@@ -19840,7 +19914,8 @@ msgid ""
"get_resource_type]. They may optionally specify some import presets that "
"affect the import process. EditorImportPlugins are responsible for creating "
"the resources and saving them in the [code].import[/code] directory (see "
-"[member ProjectSettings.application/config/project_data_dir_name]).\n"
+"[member ProjectSettings.application/config/"
+"use_hidden_project_data_directory]).\n"
"Below is an example EditorImportPlugin that imports a [Mesh] from a file "
"with the extension \".special\" or \".spec\":\n"
"[codeblock]\n"
@@ -19964,7 +20039,7 @@ msgstr ""
msgid ""
"Gets the extension used to save this resource in the [code].import[/code] "
"directory (see [member ProjectSettings.application/config/"
-"project_data_dir_name])."
+"use_hidden_project_data_directory])."
msgstr ""
#: doc/classes/EditorImportPlugin.xml:130
@@ -20994,8 +21069,11 @@ msgstr ""
msgid "Emitted when the value of the edited resource was changed."
msgstr ""
-#: doc/classes/EditorResourcePicker.xml:89
-msgid "Emitted when the resource value was set and user clicked to edit it."
+#: doc/classes/EditorResourcePicker.xml:90
+msgid ""
+"Emitted when the resource value was set and user clicked to edit it. When "
+"[code]edit[/code] is [code]true[/code], the signal was caused by the context "
+"menu \"Edit\" option."
msgstr ""
#: doc/classes/EditorResourcePreview.xml:4
@@ -24723,20 +24801,31 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr ""
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -24745,14 +24834,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -24762,80 +24855,80 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
msgstr ""
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr ""
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -27569,16 +27662,18 @@ msgstr ""
#: doc/classes/Image.xml:436
msgid ""
"OpenGL texture format [code]RED[/code] with a single component and a "
-"bitdepth of 8."
+"bitdepth of 8.\n"
+"[b]Note:[/b] When using the GLES2 backend, this uses the alpha channel "
+"instead of the red channel for storage."
msgstr ""
-#: doc/classes/Image.xml:439
+#: doc/classes/Image.xml:440
msgid ""
"OpenGL texture format [code]RG[/code] with two components and a bitdepth of "
"8 for each."
msgstr ""
-#: doc/classes/Image.xml:442
+#: doc/classes/Image.xml:443
msgid ""
"OpenGL texture format [code]RGB[/code] with three components, each with a "
"bitdepth of 8.\n"
@@ -27586,7 +27681,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:446
+#: doc/classes/Image.xml:447
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 8.\n"
@@ -27594,73 +27689,73 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:450
+#: doc/classes/Image.xml:451
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 4."
msgstr ""
-#: doc/classes/Image.xml:453
+#: doc/classes/Image.xml:454
msgid ""
"OpenGL texture format [code]GL_RGB5_A1[/code] where 5 bits of depth for each "
"component of RGB and one bit for alpha."
msgstr ""
-#: doc/classes/Image.xml:456
+#: doc/classes/Image.xml:457
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 32-"
"bit floating-point value."
msgstr ""
-#: doc/classes/Image.xml:459
+#: doc/classes/Image.xml:460
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:462
+#: doc/classes/Image.xml:463
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:465
+#: doc/classes/Image.xml:466
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:468
+#: doc/classes/Image.xml:469
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 16-"
"bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:471
+#: doc/classes/Image.xml:472
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:474
+#: doc/classes/Image.xml:475
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:477
+#: doc/classes/Image.xml:478
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:480
+#: doc/classes/Image.xml:481
msgid ""
"A special OpenGL texture format where the three color components have 9 bits "
"of precision and all three share a single 5-bit exponent."
msgstr ""
-#: doc/classes/Image.xml:483
+#: doc/classes/Image.xml:484
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 1, and is the smallest variation "
@@ -27670,7 +27765,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:487
+#: doc/classes/Image.xml:488
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 2, and color data is interpreted "
@@ -27680,7 +27775,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:491
+#: doc/classes/Image.xml:492
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format also known as Block Compression 3 or BC3 that contains 64 "
@@ -27691,7 +27786,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:495
+#: doc/classes/Image.xml:496
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -27699,7 +27794,7 @@ msgid ""
"DXT5 uses for the alpha channel."
msgstr ""
-#: doc/classes/Image.xml:498
+#: doc/classes/Image.xml:499
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -27707,7 +27802,7 @@ msgid ""
"algorithm that DXT5 uses for the alpha channel."
msgstr ""
-#: doc/classes/Image.xml:501
+#: doc/classes/Image.xml:502
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned normalized "
@@ -27716,21 +27811,21 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:505
+#: doc/classes/Image.xml:506
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with signed floating-point "
"RGB components."
msgstr ""
-#: doc/classes/Image.xml:508
+#: doc/classes/Image.xml:509
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned floating-point "
"RGB components."
msgstr ""
-#: doc/classes/Image.xml:511
+#: doc/classes/Image.xml:512
msgid ""
"Texture format used on PowerVR-supported mobile platforms, uses 2-bit color "
"depth with no alpha. More information can be found [url=https://en.wikipedia."
@@ -27739,25 +27834,25 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:515
+#: doc/classes/Image.xml:516
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with an "
"alpha component."
msgstr ""
-#: doc/classes/Image.xml:518
+#: doc/classes/Image.xml:519
msgid ""
"Similar to [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with 4-"
"bit color depth and no alpha."
msgstr ""
-#: doc/classes/Image.xml:521
+#: doc/classes/Image.xml:522
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC4[/url], but with an "
"alpha component."
msgstr ""
-#: doc/classes/Image.xml:524
+#: doc/classes/Image.xml:525
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC1]Ericsson Texture Compression format 1[/"
@@ -27765,7 +27860,7 @@ msgid ""
"standard. This format cannot store an alpha channel."
msgstr ""
-#: doc/classes/Image.xml:527
+#: doc/classes/Image.xml:528
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27773,7 +27868,7 @@ msgid ""
"unsigned data."
msgstr ""
-#: doc/classes/Image.xml:530
+#: doc/classes/Image.xml:531
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27781,7 +27876,7 @@ msgid ""
"channel of signed data."
msgstr ""
-#: doc/classes/Image.xml:533
+#: doc/classes/Image.xml:534
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27789,7 +27884,7 @@ msgid ""
"of unsigned data."
msgstr ""
-#: doc/classes/Image.xml:536
+#: doc/classes/Image.xml:537
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27797,7 +27892,7 @@ msgid ""
"channels of signed data."
msgstr ""
-#: doc/classes/Image.xml:539
+#: doc/classes/Image.xml:540
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27807,7 +27902,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:543
+#: doc/classes/Image.xml:544
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27817,7 +27912,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:547
+#: doc/classes/Image.xml:548
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27828,31 +27923,31 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:551
+#: doc/classes/Image.xml:552
msgid "Represents the size of the [enum Format] enum."
msgstr ""
-#: doc/classes/Image.xml:554
+#: doc/classes/Image.xml:555
msgid ""
"Performs nearest-neighbor interpolation. If the image is resized, it will be "
"pixelated."
msgstr ""
-#: doc/classes/Image.xml:557
+#: doc/classes/Image.xml:558
msgid ""
"Performs bilinear interpolation. If the image is resized, it will be blurry. "
"This mode is faster than [constant INTERPOLATE_CUBIC], but it results in "
"lower quality."
msgstr ""
-#: doc/classes/Image.xml:560
+#: doc/classes/Image.xml:561
msgid ""
"Performs cubic interpolation. If the image is resized, it will be blurry. "
"This mode often gives better results compared to [constant "
"INTERPOLATE_BILINEAR], at the cost of being slower."
msgstr ""
-#: doc/classes/Image.xml:563
+#: doc/classes/Image.xml:564
msgid ""
"Performs bilinear separately on the two most-suited mipmap levels, then "
"linearly interpolates between them.\n"
@@ -27867,55 +27962,55 @@ msgid ""
"a new set will be generated for the resulting image."
msgstr ""
-#: doc/classes/Image.xml:570
+#: doc/classes/Image.xml:571
msgid ""
"Performs Lanczos interpolation. This is the slowest image resizing mode, but "
"it typically gives the best results, especially when downscalng images."
msgstr ""
-#: doc/classes/Image.xml:573
+#: doc/classes/Image.xml:574
msgid "Image does not have alpha."
msgstr ""
-#: doc/classes/Image.xml:576
+#: doc/classes/Image.xml:577
msgid "Image stores alpha in a single bit."
msgstr ""
-#: doc/classes/Image.xml:579
+#: doc/classes/Image.xml:580
msgid "Image uses alpha."
msgstr ""
-#: doc/classes/Image.xml:582
+#: doc/classes/Image.xml:583
msgid "Use S3TC compression."
msgstr ""
-#: doc/classes/Image.xml:585
+#: doc/classes/Image.xml:586
msgid "Use PVRTC2 compression."
msgstr ""
-#: doc/classes/Image.xml:588
+#: doc/classes/Image.xml:589
msgid "Use PVRTC4 compression."
msgstr ""
-#: doc/classes/Image.xml:591
+#: doc/classes/Image.xml:592
msgid "Use ETC compression."
msgstr ""
-#: doc/classes/Image.xml:594
+#: doc/classes/Image.xml:595
msgid "Use ETC2 compression."
msgstr ""
-#: doc/classes/Image.xml:597
+#: doc/classes/Image.xml:598
msgid ""
"Source texture (before compression) is a regular texture. Default for all "
"textures."
msgstr ""
-#: doc/classes/Image.xml:600
+#: doc/classes/Image.xml:601
msgid "Source texture (before compression) is in sRGB space."
msgstr ""
-#: doc/classes/Image.xml:603
+#: doc/classes/Image.xml:604
msgid ""
"Source texture (before compression) is a normal texture (e.g. it can be "
"compressed into two channels)."
@@ -28138,6 +28233,17 @@ msgstr ""
#: doc/classes/Input.xml:43
msgid ""
+"Sends all input events which are in the current buffer to the game loop. "
+"These events may have been buffered as a result of accumulated input "
+"([method set_use_accumulated_input]) or agile input flushing ([member "
+"ProjectSettings.input_devices/buffering/agile_event_flushing]).\n"
+"The engine will already do this itself at key execution points (at least "
+"once per frame). However, this can be useful in advanced cases where you "
+"want precise control over the timing of event handling."
+msgstr ""
+
+#: doc/classes/Input.xml:50
+msgid ""
"Returns the acceleration of the device's accelerometer sensor, if the device "
"has one. Otherwise, the method returns [constant Vector3.ZERO].\n"
"Note this method returns an empty [Vector3] when running from the editor "
@@ -28149,7 +28255,7 @@ msgid ""
"the Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:53
+#: doc/classes/Input.xml:60
msgid ""
"Returns a value between 0 and 1 representing the raw intensity of the given "
"action, ignoring the action's deadzone. In most cases, you should use "
@@ -28159,7 +28265,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:62
+#: doc/classes/Input.xml:69
msgid ""
"Returns a value between 0 and 1 representing the intensity of the given "
"action. In a joypad, for example, the further away the axis (analog sticks "
@@ -28171,7 +28277,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:71
+#: doc/classes/Input.xml:78
msgid ""
"Get axis input by specifying two actions, one negative and one positive.\n"
"This is a shorthand for writing [code]Input."
@@ -28179,17 +28285,17 @@ msgid ""
"get_action_strength(\"negative_action\")[/code]."
msgstr ""
-#: doc/classes/Input.xml:78
+#: doc/classes/Input.xml:85
msgid ""
"Returns an [Array] containing the device IDs of all currently connected "
"joypads."
msgstr ""
-#: doc/classes/Input.xml:84
+#: doc/classes/Input.xml:91
msgid "Returns the currently assigned cursor shape (see [enum CursorShape])."
msgstr ""
-#: doc/classes/Input.xml:90
+#: doc/classes/Input.xml:97
msgid ""
"Returns the gravity of the device's accelerometer sensor, if the device has "
"one. Otherwise, the method returns [constant Vector3.ZERO].\n"
@@ -28199,7 +28305,7 @@ msgid ""
"Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:97
+#: doc/classes/Input.xml:104
msgid ""
"Returns the rotation rate in rad/s around a device's X, Y, and Z axes of the "
"gyroscope sensor, if the device has one. Otherwise, the method returns "
@@ -28208,53 +28314,53 @@ msgid ""
"it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:106
+#: doc/classes/Input.xml:113
msgid ""
"Returns the current value of the joypad axis at given index (see [enum "
"JoystickList])."
msgstr ""
-#: doc/classes/Input.xml:113
+#: doc/classes/Input.xml:120
msgid "Returns the index of the provided axis name."
msgstr ""
-#: doc/classes/Input.xml:120
+#: doc/classes/Input.xml:127
msgid ""
"Receives a [enum JoystickList] axis and returns its equivalent name as a "
"string."
msgstr ""
-#: doc/classes/Input.xml:127
+#: doc/classes/Input.xml:134
msgid "Returns the index of the provided button name."
msgstr ""
-#: doc/classes/Input.xml:134
+#: doc/classes/Input.xml:141
msgid ""
"Receives a gamepad button from [enum JoystickList] and returns its "
"equivalent name as a string."
msgstr ""
-#: doc/classes/Input.xml:141
+#: doc/classes/Input.xml:148
msgid ""
"Returns a SDL2-compatible device GUID on platforms that use gamepad "
"remapping. Returns [code]\"Default Gamepad\"[/code] otherwise."
msgstr ""
-#: doc/classes/Input.xml:148
+#: doc/classes/Input.xml:155
msgid "Returns the name of the joypad at the specified device index."
msgstr ""
-#: doc/classes/Input.xml:155
+#: doc/classes/Input.xml:162
msgid "Returns the duration of the current vibration effect in seconds."
msgstr ""
-#: doc/classes/Input.xml:162
+#: doc/classes/Input.xml:169
msgid ""
"Returns the strength of the joypad vibration: x is the strength of the weak "
"motor, and y is the strength of the strong motor."
msgstr ""
-#: doc/classes/Input.xml:168
+#: doc/classes/Input.xml:175
msgid ""
"Returns the mouse speed for the last time the cursor was moved, and this "
"until the next frame where the mouse moves. This means that even if the "
@@ -28262,7 +28368,7 @@ msgid ""
"motion."
msgstr ""
-#: doc/classes/Input.xml:174
+#: doc/classes/Input.xml:181
msgid ""
"Returns the magnetic field strength in micro-Tesla for all axes of the "
"device's magnetometer sensor, if the device has one. Otherwise, the method "
@@ -28271,17 +28377,17 @@ msgid ""
"platforms, it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:181
+#: doc/classes/Input.xml:188
msgid ""
"Returns mouse buttons as a bitmask. If multiple mouse buttons are pressed at "
"the same time, the bits are added together."
msgstr ""
-#: doc/classes/Input.xml:187
+#: doc/classes/Input.xml:194
msgid "Returns the mouse mode. See the constants for more information."
msgstr ""
-#: doc/classes/Input.xml:198
+#: doc/classes/Input.xml:205
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -28294,7 +28400,7 @@ msgid ""
"want (on the range of 0 to 1)."
msgstr ""
-#: doc/classes/Input.xml:208
+#: doc/classes/Input.xml:215
msgid ""
"Returns [code]true[/code] when the user starts pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user pressed down "
@@ -28306,7 +28412,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:218
+#: doc/classes/Input.xml:225
msgid ""
"Returns [code]true[/code] when the user stops pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user released the "
@@ -28316,7 +28422,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:227
+#: doc/classes/Input.xml:234
msgid ""
"Returns [code]true[/code] if you are pressing the action event. Note that if "
"an action has multiple buttons assigned and more than one of them is "
@@ -28327,13 +28433,13 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:236
+#: doc/classes/Input.xml:243
msgid ""
"Returns [code]true[/code] if you are pressing the joypad button (see [enum "
"JoystickList])."
msgstr ""
-#: doc/classes/Input.xml:243
+#: doc/classes/Input.xml:250
msgid ""
"Returns [code]true[/code] if the system knows the specified device. This "
"means that it sets all button and axis indices exactly as defined in [enum "
@@ -28341,19 +28447,19 @@ msgid ""
"but you can still retrieve events from them."
msgstr ""
-#: doc/classes/Input.xml:250
+#: doc/classes/Input.xml:257
msgid ""
"Returns [code]true[/code] if you are pressing the key. You can pass a [enum "
"KeyList] constant."
msgstr ""
-#: doc/classes/Input.xml:257
+#: doc/classes/Input.xml:264
msgid ""
"Returns [code]true[/code] if you are pressing the mouse button specified "
"with [enum ButtonList]."
msgstr ""
-#: doc/classes/Input.xml:267
+#: doc/classes/Input.xml:274
msgid ""
"Notifies the [Input] singleton that a connection has changed, to update the "
"state for the [code]device[/code] index.\n"
@@ -28362,7 +28468,7 @@ msgid ""
"triggered internally."
msgstr ""
-#: doc/classes/Input.xml:275
+#: doc/classes/Input.xml:282
msgid ""
"Feeds an [InputEvent] to the game. Can be used to artificially trigger input "
"events from code. Also generates [method Node._input] calls.\n"
@@ -28375,12 +28481,21 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Input.xml:289
+#: doc/classes/Input.xml:296
msgid ""
"Removes all mappings from the internal database that match the given GUID."
msgstr ""
-#: doc/classes/Input.xml:298
+#: doc/classes/Input.xml:303
+msgid ""
+"Sets the acceleration value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:313
msgid ""
"Sets a custom mouse cursor image, which is only visible inside the game "
"window. The hotspot can also be specified. Passing [code]null[/code] to the "
@@ -28395,7 +28510,7 @@ msgid ""
"compression mode can't be used for custom cursors."
msgstr ""
-#: doc/classes/Input.xml:309
+#: doc/classes/Input.xml:324
msgid ""
"Sets the default cursor shape to be used in the viewport instead of "
"[constant CURSOR_ARROW].\n"
@@ -28405,11 +28520,38 @@ msgid ""
"cursor immediately."
msgstr ""
-#: doc/classes/Input.xml:318
+#: doc/classes/Input.xml:333
+msgid ""
+"Sets the gravity value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:341
+msgid ""
+"Sets the value of the rotation rate of the gyroscope sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:349
+msgid ""
+"Sets the value of the magnetic field of the magnetometer sensor. Can be used "
+"for debugging on devices without a hardware sensor, for example in an editor "
+"on a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:357
msgid "Sets the mouse mode. See the constants for more information."
msgstr ""
-#: doc/classes/Input.xml:325
+#: doc/classes/Input.xml:364
msgid ""
"Enables or disables the accumulation of similar input events sent by the "
"operating system. When input accumulation is enabled, all input events "
@@ -28423,7 +28565,7 @@ msgid ""
"results that closely follow the actual input."
msgstr ""
-#: doc/classes/Input.xml:336
+#: doc/classes/Input.xml:375
msgid ""
"Starts to vibrate the joypad. Joypads usually come with two rumble motors, a "
"strong and a weak one. [code]weak_magnitude[/code] is the strength of the "
@@ -28436,34 +28578,34 @@ msgid ""
"few seconds."
msgstr ""
-#: doc/classes/Input.xml:344
+#: doc/classes/Input.xml:383
msgid "Stops the vibration of the joypad."
msgstr ""
-#: doc/classes/Input.xml:351
+#: doc/classes/Input.xml:390
msgid ""
"Vibrate Android and iOS devices.\n"
"[b]Note:[/b] It needs [code]VIBRATE[/code] permission for Android at export "
"settings. iOS does not support duration."
msgstr ""
-#: doc/classes/Input.xml:359
+#: doc/classes/Input.xml:398
msgid "Sets the mouse position to the specified vector."
msgstr ""
-#: doc/classes/Input.xml:368
+#: doc/classes/Input.xml:407
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
-#: doc/classes/Input.xml:374
+#: doc/classes/Input.xml:413
msgid "Makes the mouse cursor visible if it is hidden."
msgstr ""
-#: doc/classes/Input.xml:377
+#: doc/classes/Input.xml:416
msgid "Makes the mouse cursor hidden if it is visible."
msgstr ""
-#: doc/classes/Input.xml:380
+#: doc/classes/Input.xml:419
msgid ""
"Captures the mouse. The mouse will be hidden and its position locked at the "
"center of the screen.\n"
@@ -28471,83 +28613,83 @@ msgid ""
"need to use [member InputEventMouseMotion.relative]."
msgstr ""
-#: doc/classes/Input.xml:384
+#: doc/classes/Input.xml:423
msgid "Makes the mouse cursor visible but confines it to the game window."
msgstr ""
-#: doc/classes/Input.xml:387
+#: doc/classes/Input.xml:426
msgid "Arrow cursor. Standard, default pointing cursor."
msgstr ""
-#: doc/classes/Input.xml:390
+#: doc/classes/Input.xml:429
msgid ""
"I-beam cursor. Usually used to show where the text cursor will appear when "
"the mouse is clicked."
msgstr ""
-#: doc/classes/Input.xml:393
+#: doc/classes/Input.xml:432
msgid ""
"Pointing hand cursor. Usually used to indicate the pointer is over a link or "
"other interactable item."
msgstr ""
-#: doc/classes/Input.xml:396
+#: doc/classes/Input.xml:435
msgid ""
"Cross cursor. Typically appears over regions in which a drawing operation "
"can be performed or for selections."
msgstr ""
-#: doc/classes/Input.xml:399
+#: doc/classes/Input.xml:438
msgid ""
"Wait cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application is still usable during the "
"operation."
msgstr ""
-#: doc/classes/Input.xml:402
+#: doc/classes/Input.xml:441
msgid ""
"Busy cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application isn't usable during the "
"operation (e.g. something is blocking its main thread)."
msgstr ""
-#: doc/classes/Input.xml:405
+#: doc/classes/Input.xml:444
msgid "Drag cursor. Usually displayed when dragging something."
msgstr ""
-#: doc/classes/Input.xml:408
+#: doc/classes/Input.xml:447
msgid ""
"Can drop cursor. Usually displayed when dragging something to indicate that "
"it can be dropped at the current position."
msgstr ""
-#: doc/classes/Input.xml:411
+#: doc/classes/Input.xml:450
msgid ""
"Forbidden cursor. Indicates that the current action is forbidden (for "
"example, when dragging something) or that the control at a position is "
"disabled."
msgstr ""
-#: doc/classes/Input.xml:414
+#: doc/classes/Input.xml:453
msgid ""
"Vertical resize mouse cursor. A double-headed vertical arrow. It tells the "
"user they can resize the window or the panel vertically."
msgstr ""
-#: doc/classes/Input.xml:417
+#: doc/classes/Input.xml:456
msgid ""
"Horizontal resize mouse cursor. A double-headed horizontal arrow. It tells "
"the user they can resize the window or the panel horizontally."
msgstr ""
-#: doc/classes/Input.xml:420
+#: doc/classes/Input.xml:459
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the bottom left to the top right. It tells the user they can resize the "
"window or the panel both horizontally and vertically."
msgstr ""
-#: doc/classes/Input.xml:423
+#: doc/classes/Input.xml:462
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the top left to the bottom right, the opposite of [constant "
@@ -28555,23 +28697,23 @@ msgid ""
"both horizontally and vertically."
msgstr ""
-#: doc/classes/Input.xml:426
+#: doc/classes/Input.xml:465
msgid "Move cursor. Indicates that something can be moved."
msgstr ""
-#: doc/classes/Input.xml:429
+#: doc/classes/Input.xml:468
msgid ""
"Vertical split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_VSIZE]."
msgstr ""
-#: doc/classes/Input.xml:432
+#: doc/classes/Input.xml:471
msgid ""
"Horizontal split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_HSIZE]."
msgstr ""
-#: doc/classes/Input.xml:435
+#: doc/classes/Input.xml:474
msgid "Help cursor. Usually a question mark."
msgstr ""
@@ -28979,7 +29121,9 @@ msgid "The drag position."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -30278,7 +30422,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30343,22 +30488,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -30373,7 +30520,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -30381,19 +30528,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -30461,7 +30608,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30519,7 +30667,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -31801,14 +31951,21 @@ msgid "Default text [Color] of the [LinkButton]."
msgstr ""
#: doc/classes/LinkButton.xml:46
-msgid "Text [Color] used when the [LinkButton] is being hovered."
+msgid ""
+"Text [Color] used when the [LinkButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/LinkButton.xml:49
-msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgid "Text [Color] used when the [LinkButton] is being hovered."
msgstr ""
#: doc/classes/LinkButton.xml:52
+msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:55
msgid "The vertical space between the baseline of text and the underline."
msgstr ""
@@ -32301,26 +32458,33 @@ msgid "Text [Color] used when the [MenuButton] is disabled."
msgstr ""
#: doc/classes/MenuButton.xml:64
-msgid "Text [Color] used when the [MenuButton] is being hovered."
+msgid ""
+"Text [Color] used when the [MenuButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/MenuButton.xml:67
-msgid "Text [Color] used when the [MenuButton] is being pressed."
+msgid "Text [Color] used when the [MenuButton] is being hovered."
msgstr ""
#: doc/classes/MenuButton.xml:70
-msgid "[StyleBox] used when the [MenuButton] is being hovered."
+msgid "Text [Color] used when the [MenuButton] is being pressed."
msgstr ""
#: doc/classes/MenuButton.xml:73
-msgid "The horizontal space between [MenuButton]'s icon and text."
+msgid "[StyleBox] used when the [MenuButton] is being hovered."
msgstr ""
#: doc/classes/MenuButton.xml:76
-msgid "Default [StyleBox] for the [MenuButton]."
+msgid "The horizontal space between [MenuButton]'s icon and text."
msgstr ""
#: doc/classes/MenuButton.xml:79
+msgid "Default [StyleBox] for the [MenuButton]."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:82
msgid "[StyleBox] used when the [MenuButton] is being pressed."
msgstr ""
@@ -34030,7 +34194,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -36896,26 +37060,33 @@ msgid "Text [Color] used when the [OptionButton] is disabled."
msgstr ""
#: doc/classes/OptionButton.xml:212
-msgid "Text [Color] used when the [OptionButton] is being hovered."
+msgid ""
+"Text [Color] used when the [OptionButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/OptionButton.xml:215
-msgid "Text [Color] used when the [OptionButton] is being pressed."
+msgid "Text [Color] used when the [OptionButton] is being hovered."
msgstr ""
#: doc/classes/OptionButton.xml:218
-msgid "[StyleBox] used when the [OptionButton] is being hovered."
+msgid "Text [Color] used when the [OptionButton] is being pressed."
msgstr ""
#: doc/classes/OptionButton.xml:221
-msgid "The horizontal space between [OptionButton]'s icon and text."
+msgid "[StyleBox] used when the [OptionButton] is being hovered."
msgstr ""
#: doc/classes/OptionButton.xml:224
-msgid "Default [StyleBox] for the [OptionButton]."
+msgid "The horizontal space between [OptionButton]'s icon and text."
msgstr ""
#: doc/classes/OptionButton.xml:227
+msgid "Default [StyleBox] for the [OptionButton]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:230
msgid "[StyleBox] used when the [OptionButton] is being pressed."
msgstr ""
@@ -37318,7 +37489,7 @@ msgstr ""
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -37348,14 +37519,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -37365,7 +37536,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -39843,17 +40014,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -39871,11 +40068,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -40070,7 +40267,9 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-msgid "Returns the [Physics2DDirectBodyState] of the body."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
@@ -40872,6 +41071,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -40889,7 +41106,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -41003,7 +41220,9 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-msgid "Returns the [PhysicsDirectBodyState] of the body."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/PhysicsServer.xml:370
@@ -41982,27 +42201,27 @@ msgstr ""
msgid "Removes an element from the array by index."
msgstr ""
-#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolColorArray.xml:66
-#: doc/classes/PoolIntArray.xml:67 doc/classes/PoolRealArray.xml:67
-#: doc/classes/PoolStringArray.xml:74 doc/classes/PoolVector2Array.xml:67
-#: doc/classes/PoolVector3Array.xml:66
+#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolIntArray.xml:67
+#: doc/classes/PoolRealArray.xml:67
msgid ""
"Sets the size of the array. If the array is grown, reserves elements at the "
"end of the array. If the array is shrunk, truncates the array to the new "
-"size."
+"size.\n"
+"[b]Note:[/b] Added elements are not automatically initialized to 0 and will "
+"contain garbage, i.e. indeterminate values."
msgstr ""
-#: doc/classes/PoolByteArray.xml:121
+#: doc/classes/PoolByteArray.xml:122
msgid "Changes the byte at the given index."
msgstr ""
-#: doc/classes/PoolByteArray.xml:127 doc/classes/PoolColorArray.xml:79
-#: doc/classes/PoolRealArray.xml:80 doc/classes/PoolStringArray.xml:87
+#: doc/classes/PoolByteArray.xml:128 doc/classes/PoolColorArray.xml:79
+#: doc/classes/PoolRealArray.xml:81 doc/classes/PoolStringArray.xml:87
#: doc/classes/PoolVector2Array.xml:80 doc/classes/PoolVector3Array.xml:79
msgid "Returns the size of the array."
msgstr ""
-#: doc/classes/PoolByteArray.xml:135
+#: doc/classes/PoolByteArray.xml:136
msgid ""
"Returns the slice of the [PoolByteArray] between indices (inclusive) as a "
"new [PoolByteArray]. Any negative index is considered to be from the end of "
@@ -42034,6 +42253,14 @@ msgstr ""
msgid "Appends a value to the array."
msgstr ""
+#: doc/classes/PoolColorArray.xml:66 doc/classes/PoolStringArray.xml:74
+#: doc/classes/PoolVector2Array.xml:67 doc/classes/PoolVector3Array.xml:66
+msgid ""
+"Sets the size of the array. If the array is grown, reserves elements at the "
+"end of the array. If the array is shrunk, truncates the array to the new "
+"size."
+msgstr ""
+
#: doc/classes/PoolColorArray.xml:73
msgid "Changes the [Color] at the given index."
msgstr ""
@@ -42070,11 +42297,11 @@ msgid ""
"valid, or at the end of the array ([code]idx == size()[/code])."
msgstr ""
-#: doc/classes/PoolIntArray.xml:74
+#: doc/classes/PoolIntArray.xml:75
msgid "Changes the int at the given index."
msgstr ""
-#: doc/classes/PoolIntArray.xml:80
+#: doc/classes/PoolIntArray.xml:81
msgid "Returns the array size."
msgstr ""
@@ -42106,7 +42333,7 @@ msgstr ""
msgid "Appends a [PoolRealArray] at the end of this array."
msgstr ""
-#: doc/classes/PoolRealArray.xml:74
+#: doc/classes/PoolRealArray.xml:75
msgid "Changes the float at the given index."
msgstr ""
@@ -43371,18 +43598,6 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:204
msgid ""
-"The project data directory is used for storing project-specific data "
-"(metadata, shader cache, etc.).\n"
-"[b]Note:[/b] Restart the application after changing this setting.\n"
-"[b]Note:[/b] Changing this value can help on platforms or with third-party "
-"tools where specific directory patterns are disallowed. Only modify this "
-"setting if you know that your environment requires it, as changing the "
-"default can impact compatibility with some external tools or plugins which "
-"expect the default [code].import[/code] folder."
-msgstr ""
-
-#: doc/classes/ProjectSettings.xml:209
-msgid ""
"Specifies a file to override project settings. For example: [code]user://"
"custom_settings.cfg[/code]. See \"Overriding\" in the [ProjectSettings] "
"class description at the top for more information.\n"
@@ -43390,7 +43605,7 @@ msgid ""
"code] will still be read to override the project settings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:213
+#: doc/classes/ProjectSettings.xml:208
msgid ""
"If [code]true[/code], the project will save user data to its own user "
"directory (see [member application/config/custom_user_dir_name]). This "
@@ -43400,13 +43615,28 @@ msgid ""
"user data directory)/Godot/app_userdata/(project name)[/code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:216
+#: doc/classes/ProjectSettings.xml:211
+msgid ""
+"If [code]true[/code], the project will use a hidden directory ([code]."
+"import[/code]) for storing project-specific data (metadata, shader cache, "
+"etc.).\n"
+"If [code]false[/code], a non-hidden directory ([code]import[/code]) will be "
+"used instead.\n"
+"[b]Note:[/b] Restart the application after changing this setting.\n"
+"[b]Note:[/b] Changing this value can help on platforms or with third-party "
+"tools where hidden directory patterns are disallowed. Only modify this "
+"setting if you know that your environment requires it, as changing the "
+"default can impact compatibility with some external tools or plugins which "
+"expect the default [code].import[/code] folder."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:217
msgid ""
"Icon set in [code].ico[/code] format used on Windows to set the game's icon. "
"This is done automatically on start by calling [method OS.set_native_icon]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:219
+#: doc/classes/ProjectSettings.xml:220
msgid ""
"Time samples for frame deltas are subject to random variation introduced by "
"the platform, even when frames are displayed at regular intervals thanks to "
@@ -43420,14 +43650,14 @@ msgid ""
"adequate to render frames at the refresh rate."
msgstr ""
-#: doc/classes/ProjectSettings.xml:224
+#: doc/classes/ProjectSettings.xml:225
msgid ""
"[b]Experimental.[/b] Shifts the measurement of delta time for each frame to "
"just after the drawing has taken place. This may lead to more consistent "
"deltas and a reduction in frame stutters."
msgstr ""
-#: doc/classes/ProjectSettings.xml:227
+#: doc/classes/ProjectSettings.xml:228
msgid ""
"If [code]true[/code], disables printing to standard error. If [code]true[/"
"code], this also hides error and warning messages printed by [method "
@@ -43436,7 +43666,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:231
+#: doc/classes/ProjectSettings.xml:232
msgid ""
"If [code]true[/code], disables printing to standard output. This is "
"equivalent to starting the editor or project with the [code]--quiet[/code] "
@@ -43444,7 +43674,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:235
+#: doc/classes/ProjectSettings.xml:236
msgid ""
"If [code]true[/code], flushes the standard output stream every time a line "
"is printed. This affects both terminal logging and file logging.\n"
@@ -43460,20 +43690,20 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:241
+#: doc/classes/ProjectSettings.xml:242
msgid ""
"Debug build override for [member application/run/flush_stdout_on_print], as "
"performance is less important during debugging.\n"
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:245
+#: doc/classes/ProjectSettings.xml:246
msgid ""
"Forces a delay between frames in the main loop (in milliseconds). This may "
"be useful if you plan to disable vertical synchronization."
msgstr ""
-#: doc/classes/ProjectSettings.xml:248
+#: doc/classes/ProjectSettings.xml:249
msgid ""
"If [code]true[/code], enables low-processor usage mode. This setting only "
"works on desktop platforms. The screen is not redrawn if nothing changes "
@@ -43481,75 +43711,81 @@ msgid ""
"useless (and can hurt performance) in most games."
msgstr ""
-#: doc/classes/ProjectSettings.xml:251
+#: doc/classes/ProjectSettings.xml:252
msgid ""
"Amount of sleeping between frames when the low-processor usage mode is "
"enabled (in microseconds). Higher values will result in lower CPU usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:254
+#: doc/classes/ProjectSettings.xml:255
msgid "Path to the main scene file that will be loaded when the project runs."
msgstr ""
-#: doc/classes/ProjectSettings.xml:257 doc/classes/ProjectSettings.xml:260
+#: doc/classes/ProjectSettings.xml:258 doc/classes/ProjectSettings.xml:261
msgid ""
"Audio buses will disable automatically when sound goes below a given dB "
"threshold for a given time. This saves CPU as effects assigned to that bus "
"will no longer do any processing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:263
+#: doc/classes/ProjectSettings.xml:264
msgid ""
"Default [AudioBusLayout] resource file to use in the project, unless "
"overridden by the scene."
msgstr ""
-#: doc/classes/ProjectSettings.xml:266
+#: doc/classes/ProjectSettings.xml:267
msgid ""
"Specifies the audio driver to use. This setting is platform-dependent as "
"each platform supports different audio drivers. If left empty, the default "
"audio driver will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:269
+#: doc/classes/ProjectSettings.xml:270
msgid ""
"If [code]true[/code], microphone input will be allowed. This requires "
"appropriate permissions to be set when exporting to Android or iOS."
msgstr ""
-#: doc/classes/ProjectSettings.xml:272
+#: doc/classes/ProjectSettings.xml:273
msgid ""
"The mixing rate used for audio (in Hz). In general, it's better to not touch "
"this and leave it to the host operating system."
msgstr ""
-#: doc/classes/ProjectSettings.xml:275
+#: doc/classes/ProjectSettings.xml:276
msgid ""
"Safer override for [member audio/mix_rate] in the Web platform. Here "
"[code]0[/code] means \"let the browser choose\" (since some browsers do not "
"like forcing the mix rate)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:278
+#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:281
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:284
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:287
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43559,7 +43795,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:290
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43569,27 +43805,27 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:293
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:296
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
-#: doc/classes/ProjectSettings.xml:299
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:302
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -43597,81 +43833,81 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:305
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:308
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:311
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:314
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:317
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr ""
-#: doc/classes/ProjectSettings.xml:320
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:323
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:326
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:329
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:332
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:335
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:338
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:341
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -43679,109 +43915,109 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:344
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:347
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:350
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:353
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:356
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:359
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:362
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:365
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:368
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:371
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:374
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:377
+#: doc/classes/ProjectSettings.xml:380
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:380
+#: doc/classes/ProjectSettings.xml:383
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:383
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:386
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:389
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:392
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:395
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:398
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -43792,91 +44028,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:403
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:406
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:409
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:412
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:415
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:418
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:421
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:424
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:427
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:430
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:433
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:436
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:439
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr ""
-#: doc/classes/ProjectSettings.xml:442
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:445
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:448
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:451
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -43885,13 +44121,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:455
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:458
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -43901,7 +44137,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:463
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -43909,19 +44145,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:468
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:472
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:476
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -43935,45 +44171,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:481
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:484
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:488
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:491
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:494
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:497
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:500
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -43982,7 +44218,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:503
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -43993,7 +44229,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:507
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -44009,14 +44245,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:515
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:518
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -44024,49 +44260,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:521
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:524
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:529
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:532
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:535
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:538
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:541
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:544
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:547
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -44075,7 +44311,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:551
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44083,7 +44319,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:555
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44091,7 +44327,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:559
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44101,7 +44337,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:563
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -44110,7 +44346,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:567
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -44119,7 +44355,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:571
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44129,7 +44365,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:575
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44137,7 +44373,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:579
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -44147,7 +44383,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:583
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -44157,7 +44393,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:587
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44165,7 +44401,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:591
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -44174,7 +44410,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:595
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44182,7 +44418,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:599
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -44194,477 +44430,477 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:605
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:608
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:611
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:614
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:617
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:620
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:623
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:626
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:629
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:632
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:635
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:638
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:641
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:644
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:647
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:650
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:653
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:656
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:659
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:662
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:665
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:668
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:671
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:674
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:677
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:680
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:683
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:686
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:689
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:692
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:695
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:698
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:701
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:704
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:707
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:710
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:713
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:716
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:719
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:722
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:725
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:728
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:731
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:734
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:737
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:740
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:743
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:746
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:749
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:752
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:755
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:758
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:761
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:764
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:767
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:770
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:773
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:776
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:779
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:782
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:785
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:788
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:791
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:794
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:797
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:800
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:803
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:806
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:809
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:812
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:815
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:818
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:821
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:824
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:827
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:830
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:833
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:836
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:839
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:842
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:845
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:848
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:851
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:854
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:857
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:860
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:863
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:866
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:869
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:872
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:875
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:878
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:881
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr ""
-#: doc/classes/ProjectSettings.xml:884
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:887
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:890
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:893
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:896
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:899
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:902
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:905
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:908
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:911
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:914
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:917
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:920
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:923
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:926
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:929
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:932
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:935
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:938
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:941
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:946
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:949
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -44672,92 +44908,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:952
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:955
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:958
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:961
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:964
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:967
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:970
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:973
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:976
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:979
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:982
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:985
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:988
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:991
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:994
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:997
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1000
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1003
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -44767,33 +45003,33 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1007
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1010
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1013
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1017
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1021
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -44806,7 +45042,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1025
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -44818,7 +45054,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1033
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -44830,7 +45066,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1041
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -44843,7 +45079,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1045
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -44851,28 +45087,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1049
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1053
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1056
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1059
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -44882,25 +45118,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1063
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1066
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1069
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1072
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -44913,7 +45149,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1076
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -44925,7 +45161,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1084
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -44937,7 +45173,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1092
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -44950,13 +45186,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1096
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1099
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -44964,11 +45200,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1103
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1106
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -44982,7 +45218,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1112
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -44991,7 +45227,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1116
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -45007,7 +45243,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1121
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -45017,7 +45253,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1125
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45027,7 +45263,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1129
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -45038,7 +45274,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1133
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45048,7 +45284,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1137
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -45056,7 +45292,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1141
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -45067,7 +45303,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1145
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -45082,7 +45318,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1151
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -45091,13 +45327,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1156
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1159
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -45106,7 +45342,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1162
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -45116,7 +45352,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1165
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -45128,7 +45364,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1168
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -45138,24 +45374,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1171
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1174
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1177
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1180
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -45164,7 +45400,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1183
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -45172,7 +45408,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1186
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -45181,7 +45417,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1189
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -45191,7 +45427,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1193
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -45199,31 +45435,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1197
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1200
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1203
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1206
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1209
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -45231,7 +45467,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1212
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -45241,46 +45477,53 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1215
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1218
+#: doc/classes/ProjectSettings.xml:1221
+msgid ""
+"iOS specific override for [member rendering/gles2/compatibility/"
+"disable_half_float], due to poor support for half-float vertex compression "
+"on many devices."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1224
msgid ""
-"If [code]true[/code] and available on the target device, enables high "
-"floating point precision for all shader computations in GLES2.\n"
+"If [code]true[/code] and available on the target Android device, enables "
+"high floating point precision for all shader computations in GLES2.\n"
"[b]Warning:[/b] High floating point precision can be extremely slow on older "
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1225
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1228
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1231
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1234
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -45288,7 +45531,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1237
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -45298,7 +45541,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1240
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -45307,7 +45550,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1243
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -45316,20 +45559,20 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1246
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1249
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1252
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -45338,7 +45581,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1255
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -45346,7 +45589,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1258
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -45355,7 +45598,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -45365,20 +45608,20 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1267
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1274
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -45387,13 +45630,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -45403,46 +45646,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1293
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1296
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1299
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1302
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1305
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -45452,7 +45695,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -45464,7 +45707,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -45472,7 +45715,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1316
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -45480,7 +45723,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -45489,7 +45732,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1323
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -45503,7 +45746,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1328
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -45513,7 +45756,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1331
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -45522,7 +45765,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1334
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -45532,54 +45775,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1337
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1340
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1343
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1346
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1349
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1352
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1355
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1358
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -45590,61 +45833,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1365
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1368
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1371
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1374
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1377
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1380
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1383
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1386
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -45655,7 +45898,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -45664,26 +45907,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1393 doc/classes/ProjectSettings.xml:1396
#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1405
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1408
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1411
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -45694,20 +45937,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1418
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -45719,52 +45962,52 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1428
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1435
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1438
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1441
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1444
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1447
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1450
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1453
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -45772,7 +46015,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -45782,10 +46025,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -45794,10 +46037,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -45806,10 +46049,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -45818,10 +46061,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -45830,10 +46073,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -46492,40 +46735,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr ""
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -46533,14 +46790,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -48867,6 +49124,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -48884,7 +49157,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -48892,11 +49165,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -48906,19 +49179,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -54303,20 +54576,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -54327,28 +54605,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -54360,19 +54638,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
@@ -57151,26 +57429,33 @@ msgid "Text [Color] used when the [ToolButton] is disabled."
msgstr ""
#: doc/classes/ToolButton.xml:39
-msgid "Text [Color] used when the [ToolButton] is being hovered."
+msgid ""
+"Text [Color] used when the [ToolButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/ToolButton.xml:42
-msgid "Text [Color] used when the [ToolButton] is being pressed."
+msgid "Text [Color] used when the [ToolButton] is being hovered."
msgstr ""
#: doc/classes/ToolButton.xml:45
-msgid "[StyleBox] used when the [ToolButton] is being hovered."
+msgid "Text [Color] used when the [ToolButton] is being pressed."
msgstr ""
#: doc/classes/ToolButton.xml:48
-msgid "The horizontal space between [ToolButton]'s icon and text."
+msgid "[StyleBox] used when the [ToolButton] is being hovered."
msgstr ""
#: doc/classes/ToolButton.xml:51
-msgid "Default [StyleBox] for the [ToolButton]."
+msgid "The horizontal space between [ToolButton]'s icon and text."
msgstr ""
#: doc/classes/ToolButton.xml:54
+msgid "Default [StyleBox] for the [ToolButton]."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:57
msgid "[StyleBox] used when the [ToolButton] is being pressed."
msgstr ""
diff --git a/doc/translations/id.po b/doc/translations/id.po
index 6d58474929..c19b00b573 100644
--- a/doc/translations/id.po
+++ b/doc/translations/id.po
@@ -9,12 +9,13 @@
# Hanz <hanzhaxors@gmail.com>, 2021.
# Naufal Adriansyah <naufaladrn90@gmail.com>, 2021.
# Hilman Hazazi <hafizd.muhammad.kren.403@gmail.com>, 2021.
+# Stephen Gunawan Susilo <gunawanstephen@yahoo.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2021-10-07 10:24+0000\n"
-"Last-Translator: Hilman Hazazi <hafizd.muhammad.kren.403@gmail.com>\n"
+"PO-Revision-Date: 2021-11-11 16:02+0000\n"
+"Last-Translator: Stephen Gunawan Susilo <gunawanstephen@yahoo.com>\n"
"Language-Team: Indonesian <https://hosted.weblate.org/projects/godot-engine/"
"godot-class-reference/id/>\n"
"Language: id\n"
@@ -22,45 +23,45 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 4.9-dev\n"
+"X-Generator: Weblate 4.9.1-dev\n"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Description"
msgstr "Deskripsi"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Tutorials"
msgstr "Tutorial"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Properties"
msgstr "Properti"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Methods"
msgstr "Metode"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Theme Properties"
msgstr "Properti Tema"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Signals"
msgstr "Sinyal"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Enumerations"
msgstr "Enumerasi"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Constants"
msgstr "Konstanta"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Property Descriptions"
msgstr "Deskripsi Properti"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Method Descriptions"
msgstr "Deskripsi Method"
@@ -119,7 +120,6 @@ msgstr ""
"dalam [Color]."
#: modules/gdscript/doc_classes/@GDScript.xml:45
-#, fuzzy
msgid ""
"Returns the absolute value of parameter [code]s[/code] (i.e. positive "
"value).\n"
@@ -127,11 +127,10 @@ msgid ""
"a = abs(-1) # a is 1\n"
"[/codeblock]"
msgstr ""
-"Mengembalikan nilai mutlak dari parameter [code]s[/code] (misal: nilai "
+"Mengembalikan nilai mutlak dari parameter [code]s[/code] (mis: nilai "
"positif).\n"
"[codeblock]\n"
-"# a adalah 1\n"
-"a = abs(-1)\n"
+"a = abs(-1) # a adalah 1\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:55
@@ -3795,112 +3794,121 @@ msgid ""
msgstr ""
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr ""
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
msgstr ""
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
msgstr ""
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
msgstr ""
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr ""
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr ""
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr ""
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
msgstr ""
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr ""
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
msgstr ""
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
msgstr ""
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr ""
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
"positive.\n"
@@ -4978,7 +4986,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -6414,21 +6422,25 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
#: doc/classes/Area.xml:17
msgid ""
-"Returns a list of intersecting [Area]s. For performance reasons (collisions "
-"are all processed at the same time) this list is modified once during the "
-"physics step, not immediately after objects are moved. Consider using "
-"signals instead."
+"Returns a list of intersecting [Area]s. The overlapping area's [member "
+"CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:23
+#: doc/classes/Area.xml:24
msgid ""
-"Returns a list of intersecting [PhysicsBody]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody]s. The overlapping body's "
+"[member CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:30
+#: doc/classes/Area.xml:32
msgid ""
"If [code]true[/code], the given area overlaps the Area.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6436,7 +6448,7 @@ msgid ""
"physics step. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:38
+#: doc/classes/Area.xml:40
msgid ""
"If [code]true[/code], the given physics body overlaps the Area.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6447,7 +6459,7 @@ msgid ""
"their tiles with collision shapes as a virtual physics body)."
msgstr ""
-#: doc/classes/Area.xml:46
+#: doc/classes/Area.xml:48
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
"velocity lost per second.\n"
@@ -6455,41 +6467,41 @@ msgid ""
"details about damping."
msgstr ""
-#: doc/classes/Area.xml:50 doc/classes/Area2D.xml:52
+#: doc/classes/Area.xml:52 doc/classes/Area2D.xml:54
msgid "The name of the area's audio bus."
msgstr ""
-#: doc/classes/Area.xml:53 doc/classes/Area2D.xml:55
+#: doc/classes/Area.xml:55 doc/classes/Area2D.xml:57
msgid ""
"If [code]true[/code], the area's audio bus overrides the default audio bus."
msgstr ""
-#: doc/classes/Area.xml:56
+#: doc/classes/Area.xml:58
msgid ""
"The area's gravity intensity (in meters per second squared). This value "
"multiplies the gravity vector. This is useful to alter the force of gravity "
"without altering its direction."
msgstr ""
-#: doc/classes/Area.xml:59 doc/classes/Area2D.xml:61
+#: doc/classes/Area.xml:61 doc/classes/Area2D.xml:63
msgid ""
"The falloff factor for point gravity. The greater the value, the faster "
"gravity decreases with distance."
msgstr ""
-#: doc/classes/Area.xml:62 doc/classes/Area2D.xml:64
+#: doc/classes/Area.xml:64 doc/classes/Area2D.xml:66
msgid ""
"If [code]true[/code], gravity is calculated from a point (set via [member "
"gravity_vec]). See also [member space_override]."
msgstr ""
-#: doc/classes/Area.xml:65 doc/classes/Area2D.xml:67
+#: doc/classes/Area.xml:67 doc/classes/Area2D.xml:69
msgid ""
"The area's gravity vector (not normalized). If gravity is a point (see "
"[member gravity_point]), this will be the point of attraction."
msgstr ""
-#: doc/classes/Area.xml:68
+#: doc/classes/Area.xml:70
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
"velocity lost per second.\n"
@@ -6497,61 +6509,61 @@ msgid ""
"about damping."
msgstr ""
-#: doc/classes/Area.xml:72 doc/classes/Area2D.xml:74
+#: doc/classes/Area.xml:74 doc/classes/Area2D.xml:76
msgid "If [code]true[/code], other monitoring areas can detect this area."
msgstr ""
-#: doc/classes/Area.xml:75 doc/classes/Area2D.xml:77
+#: doc/classes/Area.xml:77 doc/classes/Area2D.xml:79
msgid ""
"If [code]true[/code], the area detects bodies or areas entering and exiting "
"it."
msgstr ""
-#: doc/classes/Area.xml:78 doc/classes/Area2D.xml:80
+#: doc/classes/Area.xml:80 doc/classes/Area2D.xml:82
msgid "The area's priority. Higher priority areas are processed first."
msgstr ""
-#: doc/classes/Area.xml:81
+#: doc/classes/Area.xml:83
msgid ""
"The degree to which this area applies reverb to its associated audio. Ranges "
"from [code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
msgstr ""
-#: doc/classes/Area.xml:84
+#: doc/classes/Area.xml:86
msgid "If [code]true[/code], the area applies reverb to its associated audio."
msgstr ""
-#: doc/classes/Area.xml:87
+#: doc/classes/Area.xml:89
msgid "The reverb bus name to use for this area's associated audio."
msgstr ""
-#: doc/classes/Area.xml:90
+#: doc/classes/Area.xml:92
msgid ""
"The degree to which this area's reverb is a uniform effect. Ranges from "
"[code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
msgstr ""
-#: doc/classes/Area.xml:93 doc/classes/Area2D.xml:83
+#: doc/classes/Area.xml:95 doc/classes/Area2D.xml:85
msgid ""
"Override mode for gravity and damping calculations within this area. See "
"[enum SpaceOverride] for possible values."
msgstr ""
-#: doc/classes/Area.xml:100
+#: doc/classes/Area.xml:102
msgid ""
"Emitted when another Area enters this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
-#: doc/classes/Area.xml:107
+#: doc/classes/Area.xml:109
msgid ""
"Emitted when another Area exits this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
-#: doc/classes/Area.xml:117 doc/classes/Area.xml:130
+#: doc/classes/Area.xml:119 doc/classes/Area.xml:132
msgid ""
"Emitted when one of another Area's [Shape]s enters one of this Area's "
"[Shape]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6566,7 +6578,7 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:140
+#: doc/classes/Area.xml:142
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] enters this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -6575,7 +6587,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:147
+#: doc/classes/Area.xml:149
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] exits this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -6584,7 +6596,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:157 doc/classes/Area.xml:170
+#: doc/classes/Area.xml:159 doc/classes/Area.xml:172
msgid ""
"Emitted when one of a [PhysicsBody] or [GridMap]'s [Shape]s enters one of "
"this Area's [Shape]s. Requires [member monitoring] to be set to [code]true[/"
@@ -6601,29 +6613,29 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:180 doc/classes/Area2D.xml:170
+#: doc/classes/Area.xml:182 doc/classes/Area2D.xml:172
msgid "This area does not affect gravity/damping."
msgstr ""
-#: doc/classes/Area.xml:183 doc/classes/Area2D.xml:173
+#: doc/classes/Area.xml:185 doc/classes/Area2D.xml:175
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order)."
msgstr ""
-#: doc/classes/Area.xml:186 doc/classes/Area2D.xml:176
+#: doc/classes/Area.xml:188 doc/classes/Area2D.xml:178
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order), ignoring any lower priority areas."
msgstr ""
-#: doc/classes/Area.xml:189 doc/classes/Area2D.xml:179
+#: doc/classes/Area.xml:191 doc/classes/Area2D.xml:181
msgid ""
"This area replaces any gravity/damping, even the defaults, ignoring any "
"lower priority areas."
msgstr ""
-#: doc/classes/Area.xml:192 doc/classes/Area2D.xml:182
+#: doc/classes/Area.xml:194 doc/classes/Area2D.xml:184
msgid ""
"This area replaces any gravity/damping calculated so far (in [member "
"priority] order), but keeps calculating the rest of the areas."
@@ -6662,21 +6674,25 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
#: doc/classes/Area2D.xml:19
msgid ""
-"Returns a list of intersecting [Area2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [Area2D]s. The overlapping area's [member "
+"CollisionObject2D.collision_layer] must be part of this area's [member "
+"CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:25
+#: doc/classes/Area2D.xml:26
msgid ""
-"Returns a list of intersecting [PhysicsBody2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody2D]s. The overlapping body's "
+"[member CollisionObject2D.collision_layer] must be part of this area's "
+"[member CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:32
+#: doc/classes/Area2D.xml:34
msgid ""
"If [code]true[/code], the given area overlaps the Area2D.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6684,7 +6700,7 @@ msgid ""
"the physics step. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:40
+#: doc/classes/Area2D.xml:42
msgid ""
"If [code]true[/code], the given physics body overlaps the Area2D.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6695,7 +6711,7 @@ msgid ""
"register their tiles with collision shapes as a virtual physics body)."
msgstr ""
-#: doc/classes/Area2D.xml:48
+#: doc/classes/Area2D.xml:50
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
"velocity lost per second.\n"
@@ -6703,14 +6719,14 @@ msgid ""
"details about damping."
msgstr ""
-#: doc/classes/Area2D.xml:58
+#: doc/classes/Area2D.xml:60
msgid ""
"The area's gravity intensity (in pixels per second squared). This value "
"multiplies the gravity vector. This is useful to alter the force of gravity "
"without altering its direction."
msgstr ""
-#: doc/classes/Area2D.xml:70
+#: doc/classes/Area2D.xml:72
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
"velocity lost per second.\n"
@@ -6718,21 +6734,21 @@ msgid ""
"about damping."
msgstr ""
-#: doc/classes/Area2D.xml:90
+#: doc/classes/Area2D.xml:92
msgid ""
"Emitted when another Area2D enters this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-#: doc/classes/Area2D.xml:97
+#: doc/classes/Area2D.xml:99
msgid ""
"Emitted when another Area2D exits this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-#: doc/classes/Area2D.xml:107
+#: doc/classes/Area2D.xml:109
msgid ""
"Emitted when one of another Area2D's [Shape2D]s enters one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6747,7 +6763,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:120
+#: doc/classes/Area2D.xml:122
msgid ""
"Emitted when one of another Area2D's [Shape2D]s exits one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6762,7 +6778,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:130
+#: doc/classes/Area2D.xml:132
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] enters this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -6771,7 +6787,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:137
+#: doc/classes/Area2D.xml:139
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] exits this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -6780,7 +6796,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:147
+#: doc/classes/Area2D.xml:149
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s enters one "
"of this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -6799,7 +6815,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:160
+#: doc/classes/Area2D.xml:162
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s exits one of "
"this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -10369,42 +10385,47 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
-"no save path is provided it will try to match the path from the current "
+"no root node is provided, parent of this node will be used as root instead. "
+"If no save path is provided it will try to match the path from the current "
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -10418,62 +10439,62 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
msgid "The rotation of the baked custom sky."
msgstr ""
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -10481,35 +10502,35 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -10517,13 +10538,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -10535,65 +10556,77 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr ""
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
msgid "Baking was successful."
msgstr ""
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr ""
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr ""
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr ""
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:133
+#: doc/classes/BakedLightmap.xml:132
+msgid ""
+"Returns if lightmapper can't be created. Unless you are using a custom "
+"lightmapper, please report this as bug."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:135
+msgid ""
+"There is no root node to start baking from. Either provide [code]from_node[/"
+"code] argument or attach this node to a parent that should be used as root."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:136
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:139
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:142
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -11049,8 +11082,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -11438,26 +11474,33 @@ msgid "Text [Color] used when the [Button] is disabled."
msgstr ""
#: doc/classes/Button.xml:77
-msgid "Text [Color] used when the [Button] is being hovered."
+msgid ""
+"Text [Color] used when the [Button] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/Button.xml:80
-msgid "Text [Color] used when the [Button] is being pressed."
+msgid "Text [Color] used when the [Button] is being hovered."
msgstr ""
#: doc/classes/Button.xml:83
-msgid "[StyleBox] used when the [Button] is being hovered."
+msgid "Text [Color] used when the [Button] is being pressed."
msgstr ""
#: doc/classes/Button.xml:86
-msgid "The horizontal space between [Button]'s icon and text."
+msgid "[StyleBox] used when the [Button] is being hovered."
msgstr ""
#: doc/classes/Button.xml:89
-msgid "Default [StyleBox] for the [Button]."
+msgid "The horizontal space between [Button]'s icon and text."
msgstr ""
#: doc/classes/Button.xml:92
+msgid "Default [StyleBox] for the [Button]."
+msgstr ""
+
+#: doc/classes/Button.xml:95
msgid "[StyleBox] used when the [Button] is being pressed."
msgstr ""
@@ -12927,80 +12970,96 @@ msgstr ""
msgid "The check icon to display when the [CheckBox] is checked."
msgstr ""
-#: doc/classes/CheckBox.xml:30
+#: doc/classes/CheckBox.xml:28
+msgid "The check icon to display when the [CheckBox] is checked and disabled."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:31
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is disabled."
msgstr ""
-#: doc/classes/CheckBox.xml:33
+#: doc/classes/CheckBox.xml:34
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is focused."
msgstr ""
-#: doc/classes/CheckBox.xml:36
+#: doc/classes/CheckBox.xml:37
msgid "The [Font] to use for the [CheckBox] text."
msgstr ""
-#: doc/classes/CheckBox.xml:39
+#: doc/classes/CheckBox.xml:40
msgid "The [CheckBox] text's font color."
msgstr ""
-#: doc/classes/CheckBox.xml:42
+#: doc/classes/CheckBox.xml:43
msgid "The [CheckBox] text's font color when it's disabled."
msgstr ""
-#: doc/classes/CheckBox.xml:45
+#: doc/classes/CheckBox.xml:46
+msgid ""
+"The [CheckBox] text's font color when it's focused. Only replaces the normal "
+"text color of the checkbox. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:49
msgid "The [CheckBox] text's font color when it's hovered."
msgstr ""
-#: doc/classes/CheckBox.xml:48
+#: doc/classes/CheckBox.xml:52
msgid "The [CheckBox] text's font color when it's hovered and pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:51
+#: doc/classes/CheckBox.xml:55
msgid "The [CheckBox] text's font color when it's pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:54
+#: doc/classes/CheckBox.xml:58
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered."
msgstr ""
-#: doc/classes/CheckBox.xml:57
+#: doc/classes/CheckBox.xml:61
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered and "
"pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:60
+#: doc/classes/CheckBox.xml:64
msgid "The separation between the check icon and the text (in pixels)."
msgstr ""
-#: doc/classes/CheckBox.xml:63 doc/classes/CheckButton.xml:58
+#: doc/classes/CheckBox.xml:67 doc/classes/CheckButton.xml:61
msgid "The [StyleBox] to display as a background."
msgstr ""
-#: doc/classes/CheckBox.xml:66
+#: doc/classes/CheckBox.xml:70
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:69
+#: doc/classes/CheckBox.xml:73
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is checked."
msgstr ""
-#: doc/classes/CheckBox.xml:74
+#: doc/classes/CheckBox.xml:78
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is unchecked."
msgstr ""
-#: doc/classes/CheckBox.xml:79
+#: doc/classes/CheckBox.xml:83
msgid "The check icon to display when the [CheckBox] is unchecked."
msgstr ""
+#: doc/classes/CheckBox.xml:86
+msgid ""
+"The check icon to display when the [CheckBox] is unchecked and disabled."
+msgstr ""
+
#: doc/classes/CheckButton.xml:4
msgid "Checkable button. See also [CheckBox]."
msgstr ""
@@ -13044,49 +13103,56 @@ msgid "The [CheckButton] text's font color when it's disabled."
msgstr ""
#: doc/classes/CheckButton.xml:40
-msgid "The [CheckButton] text's font color when it's hovered."
+msgid ""
+"The [CheckButton] text's font color when it's focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/CheckButton.xml:43
-msgid "The [CheckButton] text's font color when it's hovered and pressed."
+msgid "The [CheckButton] text's font color when it's hovered."
msgstr ""
#: doc/classes/CheckButton.xml:46
-msgid "The [CheckButton] text's font color when it's pressed."
+msgid "The [CheckButton] text's font color when it's hovered and pressed."
msgstr ""
#: doc/classes/CheckButton.xml:49
+msgid "The [CheckButton] text's font color when it's pressed."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:52
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered."
msgstr ""
-#: doc/classes/CheckButton.xml:52
+#: doc/classes/CheckButton.xml:55
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered "
"and pressed."
msgstr ""
-#: doc/classes/CheckButton.xml:55
+#: doc/classes/CheckButton.xml:58
msgid "The separation between the toggle icon and the text (in pixels)."
msgstr ""
-#: doc/classes/CheckButton.xml:61
+#: doc/classes/CheckButton.xml:64
msgid "The icon to display when the [CheckButton] is unchecked."
msgstr ""
-#: doc/classes/CheckButton.xml:64
+#: doc/classes/CheckButton.xml:67
msgid "The icon to display when the [CheckButton] is unchecked and disabled."
msgstr ""
-#: doc/classes/CheckButton.xml:67
+#: doc/classes/CheckButton.xml:70
msgid "The icon to display when the [CheckButton] is checked."
msgstr ""
-#: doc/classes/CheckButton.xml:70
+#: doc/classes/CheckButton.xml:73
msgid "The icon to display when the [CheckButton] is checked and disabled."
msgstr ""
-#: doc/classes/CheckButton.xml:73
+#: doc/classes/CheckButton.xml:76
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is pressed."
msgstr ""
@@ -14861,26 +14927,33 @@ msgid "Text [Color] used when the [ColorPickerButton] is disabled."
msgstr ""
#: doc/classes/ColorPickerButton.xml:80
-msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
+msgid ""
+"Text [Color] used when the [ColorPickerButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/ColorPickerButton.xml:83
-msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
+msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
msgstr ""
#: doc/classes/ColorPickerButton.xml:86
-msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
+msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
msgstr ""
#: doc/classes/ColorPickerButton.xml:89
-msgid "The horizontal space between [ColorPickerButton]'s icon and text."
+msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
msgstr ""
#: doc/classes/ColorPickerButton.xml:92
-msgid "Default [StyleBox] for the [ColorPickerButton]."
+msgid "The horizontal space between [ColorPickerButton]'s icon and text."
msgstr ""
#: doc/classes/ColorPickerButton.xml:95
+msgid "Default [StyleBox] for the [ColorPickerButton]."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:98
msgid "[StyleBox] used when the [ColorPickerButton] is being pressed."
msgstr ""
@@ -20110,7 +20183,8 @@ msgid ""
"get_resource_type]. They may optionally specify some import presets that "
"affect the import process. EditorImportPlugins are responsible for creating "
"the resources and saving them in the [code].import[/code] directory (see "
-"[member ProjectSettings.application/config/project_data_dir_name]).\n"
+"[member ProjectSettings.application/config/"
+"use_hidden_project_data_directory]).\n"
"Below is an example EditorImportPlugin that imports a [Mesh] from a file "
"with the extension \".special\" or \".spec\":\n"
"[codeblock]\n"
@@ -20237,7 +20311,7 @@ msgstr ""
msgid ""
"Gets the extension used to save this resource in the [code].import[/code] "
"directory (see [member ProjectSettings.application/config/"
-"project_data_dir_name])."
+"use_hidden_project_data_directory])."
msgstr ""
#: doc/classes/EditorImportPlugin.xml:130
@@ -21272,8 +21346,11 @@ msgstr ""
msgid "Emitted when the value of the edited resource was changed."
msgstr ""
-#: doc/classes/EditorResourcePicker.xml:89
-msgid "Emitted when the resource value was set and user clicked to edit it."
+#: doc/classes/EditorResourcePicker.xml:90
+msgid ""
+"Emitted when the resource value was set and user clicked to edit it. When "
+"[code]edit[/code] is [code]true[/code], the signal was caused by the context "
+"menu \"Edit\" option."
msgstr ""
#: doc/classes/EditorResourcePreview.xml:4
@@ -25023,21 +25100,32 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html"
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -25046,14 +25134,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -25063,80 +25155,80 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
msgstr ""
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr ""
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -27884,16 +27976,18 @@ msgstr ""
#: doc/classes/Image.xml:436
msgid ""
"OpenGL texture format [code]RED[/code] with a single component and a "
-"bitdepth of 8."
+"bitdepth of 8.\n"
+"[b]Note:[/b] When using the GLES2 backend, this uses the alpha channel "
+"instead of the red channel for storage."
msgstr ""
-#: doc/classes/Image.xml:439
+#: doc/classes/Image.xml:440
msgid ""
"OpenGL texture format [code]RG[/code] with two components and a bitdepth of "
"8 for each."
msgstr ""
-#: doc/classes/Image.xml:442
+#: doc/classes/Image.xml:443
msgid ""
"OpenGL texture format [code]RGB[/code] with three components, each with a "
"bitdepth of 8.\n"
@@ -27901,7 +27995,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:446
+#: doc/classes/Image.xml:447
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 8.\n"
@@ -27909,73 +28003,73 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:450
+#: doc/classes/Image.xml:451
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 4."
msgstr ""
-#: doc/classes/Image.xml:453
+#: doc/classes/Image.xml:454
msgid ""
"OpenGL texture format [code]GL_RGB5_A1[/code] where 5 bits of depth for each "
"component of RGB and one bit for alpha."
msgstr ""
-#: doc/classes/Image.xml:456
+#: doc/classes/Image.xml:457
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 32-"
"bit floating-point value."
msgstr ""
-#: doc/classes/Image.xml:459
+#: doc/classes/Image.xml:460
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:462
+#: doc/classes/Image.xml:463
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:465
+#: doc/classes/Image.xml:466
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:468
+#: doc/classes/Image.xml:469
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 16-"
"bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:471
+#: doc/classes/Image.xml:472
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:474
+#: doc/classes/Image.xml:475
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:477
+#: doc/classes/Image.xml:478
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:480
+#: doc/classes/Image.xml:481
msgid ""
"A special OpenGL texture format where the three color components have 9 bits "
"of precision and all three share a single 5-bit exponent."
msgstr ""
-#: doc/classes/Image.xml:483
+#: doc/classes/Image.xml:484
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 1, and is the smallest variation "
@@ -27985,7 +28079,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:487
+#: doc/classes/Image.xml:488
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 2, and color data is interpreted "
@@ -27995,7 +28089,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:491
+#: doc/classes/Image.xml:492
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format also known as Block Compression 3 or BC3 that contains 64 "
@@ -28006,7 +28100,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:495
+#: doc/classes/Image.xml:496
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -28014,7 +28108,7 @@ msgid ""
"DXT5 uses for the alpha channel."
msgstr ""
-#: doc/classes/Image.xml:498
+#: doc/classes/Image.xml:499
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -28022,7 +28116,7 @@ msgid ""
"algorithm that DXT5 uses for the alpha channel."
msgstr ""
-#: doc/classes/Image.xml:501
+#: doc/classes/Image.xml:502
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned normalized "
@@ -28031,21 +28125,21 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:505
+#: doc/classes/Image.xml:506
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with signed floating-point "
"RGB components."
msgstr ""
-#: doc/classes/Image.xml:508
+#: doc/classes/Image.xml:509
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned floating-point "
"RGB components."
msgstr ""
-#: doc/classes/Image.xml:511
+#: doc/classes/Image.xml:512
msgid ""
"Texture format used on PowerVR-supported mobile platforms, uses 2-bit color "
"depth with no alpha. More information can be found [url=https://en.wikipedia."
@@ -28054,25 +28148,25 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:515
+#: doc/classes/Image.xml:516
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with an "
"alpha component."
msgstr ""
-#: doc/classes/Image.xml:518
+#: doc/classes/Image.xml:519
msgid ""
"Similar to [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with 4-"
"bit color depth and no alpha."
msgstr ""
-#: doc/classes/Image.xml:521
+#: doc/classes/Image.xml:522
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC4[/url], but with an "
"alpha component."
msgstr ""
-#: doc/classes/Image.xml:524
+#: doc/classes/Image.xml:525
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC1]Ericsson Texture Compression format 1[/"
@@ -28080,7 +28174,7 @@ msgid ""
"standard. This format cannot store an alpha channel."
msgstr ""
-#: doc/classes/Image.xml:527
+#: doc/classes/Image.xml:528
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28088,7 +28182,7 @@ msgid ""
"unsigned data."
msgstr ""
-#: doc/classes/Image.xml:530
+#: doc/classes/Image.xml:531
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28096,7 +28190,7 @@ msgid ""
"channel of signed data."
msgstr ""
-#: doc/classes/Image.xml:533
+#: doc/classes/Image.xml:534
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28104,7 +28198,7 @@ msgid ""
"of unsigned data."
msgstr ""
-#: doc/classes/Image.xml:536
+#: doc/classes/Image.xml:537
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28112,7 +28206,7 @@ msgid ""
"channels of signed data."
msgstr ""
-#: doc/classes/Image.xml:539
+#: doc/classes/Image.xml:540
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28122,7 +28216,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:543
+#: doc/classes/Image.xml:544
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28132,7 +28226,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:547
+#: doc/classes/Image.xml:548
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28143,31 +28237,31 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:551
+#: doc/classes/Image.xml:552
msgid "Represents the size of the [enum Format] enum."
msgstr ""
-#: doc/classes/Image.xml:554
+#: doc/classes/Image.xml:555
msgid ""
"Performs nearest-neighbor interpolation. If the image is resized, it will be "
"pixelated."
msgstr ""
-#: doc/classes/Image.xml:557
+#: doc/classes/Image.xml:558
msgid ""
"Performs bilinear interpolation. If the image is resized, it will be blurry. "
"This mode is faster than [constant INTERPOLATE_CUBIC], but it results in "
"lower quality."
msgstr ""
-#: doc/classes/Image.xml:560
+#: doc/classes/Image.xml:561
msgid ""
"Performs cubic interpolation. If the image is resized, it will be blurry. "
"This mode often gives better results compared to [constant "
"INTERPOLATE_BILINEAR], at the cost of being slower."
msgstr ""
-#: doc/classes/Image.xml:563
+#: doc/classes/Image.xml:564
msgid ""
"Performs bilinear separately on the two most-suited mipmap levels, then "
"linearly interpolates between them.\n"
@@ -28182,55 +28276,55 @@ msgid ""
"a new set will be generated for the resulting image."
msgstr ""
-#: doc/classes/Image.xml:570
+#: doc/classes/Image.xml:571
msgid ""
"Performs Lanczos interpolation. This is the slowest image resizing mode, but "
"it typically gives the best results, especially when downscalng images."
msgstr ""
-#: doc/classes/Image.xml:573
+#: doc/classes/Image.xml:574
msgid "Image does not have alpha."
msgstr ""
-#: doc/classes/Image.xml:576
+#: doc/classes/Image.xml:577
msgid "Image stores alpha in a single bit."
msgstr ""
-#: doc/classes/Image.xml:579
+#: doc/classes/Image.xml:580
msgid "Image uses alpha."
msgstr ""
-#: doc/classes/Image.xml:582
+#: doc/classes/Image.xml:583
msgid "Use S3TC compression."
msgstr ""
-#: doc/classes/Image.xml:585
+#: doc/classes/Image.xml:586
msgid "Use PVRTC2 compression."
msgstr ""
-#: doc/classes/Image.xml:588
+#: doc/classes/Image.xml:589
msgid "Use PVRTC4 compression."
msgstr ""
-#: doc/classes/Image.xml:591
+#: doc/classes/Image.xml:592
msgid "Use ETC compression."
msgstr ""
-#: doc/classes/Image.xml:594
+#: doc/classes/Image.xml:595
msgid "Use ETC2 compression."
msgstr ""
-#: doc/classes/Image.xml:597
+#: doc/classes/Image.xml:598
msgid ""
"Source texture (before compression) is a regular texture. Default for all "
"textures."
msgstr ""
-#: doc/classes/Image.xml:600
+#: doc/classes/Image.xml:601
msgid "Source texture (before compression) is in sRGB space."
msgstr ""
-#: doc/classes/Image.xml:603
+#: doc/classes/Image.xml:604
msgid ""
"Source texture (before compression) is a normal texture (e.g. it can be "
"compressed into two channels)."
@@ -28454,6 +28548,17 @@ msgstr ""
#: doc/classes/Input.xml:43
msgid ""
+"Sends all input events which are in the current buffer to the game loop. "
+"These events may have been buffered as a result of accumulated input "
+"([method set_use_accumulated_input]) or agile input flushing ([member "
+"ProjectSettings.input_devices/buffering/agile_event_flushing]).\n"
+"The engine will already do this itself at key execution points (at least "
+"once per frame). However, this can be useful in advanced cases where you "
+"want precise control over the timing of event handling."
+msgstr ""
+
+#: doc/classes/Input.xml:50
+msgid ""
"Returns the acceleration of the device's accelerometer sensor, if the device "
"has one. Otherwise, the method returns [constant Vector3.ZERO].\n"
"Note this method returns an empty [Vector3] when running from the editor "
@@ -28465,7 +28570,7 @@ msgid ""
"the Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:53
+#: doc/classes/Input.xml:60
msgid ""
"Returns a value between 0 and 1 representing the raw intensity of the given "
"action, ignoring the action's deadzone. In most cases, you should use "
@@ -28475,7 +28580,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:62
+#: doc/classes/Input.xml:69
msgid ""
"Returns a value between 0 and 1 representing the intensity of the given "
"action. In a joypad, for example, the further away the axis (analog sticks "
@@ -28487,7 +28592,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:71
+#: doc/classes/Input.xml:78
msgid ""
"Get axis input by specifying two actions, one negative and one positive.\n"
"This is a shorthand for writing [code]Input."
@@ -28495,17 +28600,17 @@ msgid ""
"get_action_strength(\"negative_action\")[/code]."
msgstr ""
-#: doc/classes/Input.xml:78
+#: doc/classes/Input.xml:85
msgid ""
"Returns an [Array] containing the device IDs of all currently connected "
"joypads."
msgstr ""
-#: doc/classes/Input.xml:84
+#: doc/classes/Input.xml:91
msgid "Returns the currently assigned cursor shape (see [enum CursorShape])."
msgstr ""
-#: doc/classes/Input.xml:90
+#: doc/classes/Input.xml:97
msgid ""
"Returns the gravity of the device's accelerometer sensor, if the device has "
"one. Otherwise, the method returns [constant Vector3.ZERO].\n"
@@ -28515,7 +28620,7 @@ msgid ""
"Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:97
+#: doc/classes/Input.xml:104
msgid ""
"Returns the rotation rate in rad/s around a device's X, Y, and Z axes of the "
"gyroscope sensor, if the device has one. Otherwise, the method returns "
@@ -28524,53 +28629,53 @@ msgid ""
"it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:106
+#: doc/classes/Input.xml:113
msgid ""
"Returns the current value of the joypad axis at given index (see [enum "
"JoystickList])."
msgstr ""
-#: doc/classes/Input.xml:113
+#: doc/classes/Input.xml:120
msgid "Returns the index of the provided axis name."
msgstr ""
-#: doc/classes/Input.xml:120
+#: doc/classes/Input.xml:127
msgid ""
"Receives a [enum JoystickList] axis and returns its equivalent name as a "
"string."
msgstr ""
-#: doc/classes/Input.xml:127
+#: doc/classes/Input.xml:134
msgid "Returns the index of the provided button name."
msgstr ""
-#: doc/classes/Input.xml:134
+#: doc/classes/Input.xml:141
msgid ""
"Receives a gamepad button from [enum JoystickList] and returns its "
"equivalent name as a string."
msgstr ""
-#: doc/classes/Input.xml:141
+#: doc/classes/Input.xml:148
msgid ""
"Returns a SDL2-compatible device GUID on platforms that use gamepad "
"remapping. Returns [code]\"Default Gamepad\"[/code] otherwise."
msgstr ""
-#: doc/classes/Input.xml:148
+#: doc/classes/Input.xml:155
msgid "Returns the name of the joypad at the specified device index."
msgstr ""
-#: doc/classes/Input.xml:155
+#: doc/classes/Input.xml:162
msgid "Returns the duration of the current vibration effect in seconds."
msgstr ""
-#: doc/classes/Input.xml:162
+#: doc/classes/Input.xml:169
msgid ""
"Returns the strength of the joypad vibration: x is the strength of the weak "
"motor, and y is the strength of the strong motor."
msgstr ""
-#: doc/classes/Input.xml:168
+#: doc/classes/Input.xml:175
msgid ""
"Returns the mouse speed for the last time the cursor was moved, and this "
"until the next frame where the mouse moves. This means that even if the "
@@ -28578,7 +28683,7 @@ msgid ""
"motion."
msgstr ""
-#: doc/classes/Input.xml:174
+#: doc/classes/Input.xml:181
msgid ""
"Returns the magnetic field strength in micro-Tesla for all axes of the "
"device's magnetometer sensor, if the device has one. Otherwise, the method "
@@ -28587,17 +28692,17 @@ msgid ""
"platforms, it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:181
+#: doc/classes/Input.xml:188
msgid ""
"Returns mouse buttons as a bitmask. If multiple mouse buttons are pressed at "
"the same time, the bits are added together."
msgstr ""
-#: doc/classes/Input.xml:187
+#: doc/classes/Input.xml:194
msgid "Returns the mouse mode. See the constants for more information."
msgstr ""
-#: doc/classes/Input.xml:198
+#: doc/classes/Input.xml:205
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -28610,7 +28715,7 @@ msgid ""
"want (on the range of 0 to 1)."
msgstr ""
-#: doc/classes/Input.xml:208
+#: doc/classes/Input.xml:215
msgid ""
"Returns [code]true[/code] when the user starts pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user pressed down "
@@ -28622,7 +28727,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:218
+#: doc/classes/Input.xml:225
msgid ""
"Returns [code]true[/code] when the user stops pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user released the "
@@ -28632,7 +28737,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:227
+#: doc/classes/Input.xml:234
msgid ""
"Returns [code]true[/code] if you are pressing the action event. Note that if "
"an action has multiple buttons assigned and more than one of them is "
@@ -28643,13 +28748,13 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:236
+#: doc/classes/Input.xml:243
msgid ""
"Returns [code]true[/code] if you are pressing the joypad button (see [enum "
"JoystickList])."
msgstr ""
-#: doc/classes/Input.xml:243
+#: doc/classes/Input.xml:250
msgid ""
"Returns [code]true[/code] if the system knows the specified device. This "
"means that it sets all button and axis indices exactly as defined in [enum "
@@ -28657,19 +28762,19 @@ msgid ""
"but you can still retrieve events from them."
msgstr ""
-#: doc/classes/Input.xml:250
+#: doc/classes/Input.xml:257
msgid ""
"Returns [code]true[/code] if you are pressing the key. You can pass a [enum "
"KeyList] constant."
msgstr ""
-#: doc/classes/Input.xml:257
+#: doc/classes/Input.xml:264
msgid ""
"Returns [code]true[/code] if you are pressing the mouse button specified "
"with [enum ButtonList]."
msgstr ""
-#: doc/classes/Input.xml:267
+#: doc/classes/Input.xml:274
msgid ""
"Notifies the [Input] singleton that a connection has changed, to update the "
"state for the [code]device[/code] index.\n"
@@ -28678,7 +28783,7 @@ msgid ""
"triggered internally."
msgstr ""
-#: doc/classes/Input.xml:275
+#: doc/classes/Input.xml:282
msgid ""
"Feeds an [InputEvent] to the game. Can be used to artificially trigger input "
"events from code. Also generates [method Node._input] calls.\n"
@@ -28691,12 +28796,21 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Input.xml:289
+#: doc/classes/Input.xml:296
msgid ""
"Removes all mappings from the internal database that match the given GUID."
msgstr ""
-#: doc/classes/Input.xml:298
+#: doc/classes/Input.xml:303
+msgid ""
+"Sets the acceleration value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:313
msgid ""
"Sets a custom mouse cursor image, which is only visible inside the game "
"window. The hotspot can also be specified. Passing [code]null[/code] to the "
@@ -28711,7 +28825,7 @@ msgid ""
"compression mode can't be used for custom cursors."
msgstr ""
-#: doc/classes/Input.xml:309
+#: doc/classes/Input.xml:324
msgid ""
"Sets the default cursor shape to be used in the viewport instead of "
"[constant CURSOR_ARROW].\n"
@@ -28721,11 +28835,38 @@ msgid ""
"cursor immediately."
msgstr ""
-#: doc/classes/Input.xml:318
+#: doc/classes/Input.xml:333
+msgid ""
+"Sets the gravity value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:341
+msgid ""
+"Sets the value of the rotation rate of the gyroscope sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:349
+msgid ""
+"Sets the value of the magnetic field of the magnetometer sensor. Can be used "
+"for debugging on devices without a hardware sensor, for example in an editor "
+"on a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:357
msgid "Sets the mouse mode. See the constants for more information."
msgstr ""
-#: doc/classes/Input.xml:325
+#: doc/classes/Input.xml:364
msgid ""
"Enables or disables the accumulation of similar input events sent by the "
"operating system. When input accumulation is enabled, all input events "
@@ -28739,7 +28880,7 @@ msgid ""
"results that closely follow the actual input."
msgstr ""
-#: doc/classes/Input.xml:336
+#: doc/classes/Input.xml:375
msgid ""
"Starts to vibrate the joypad. Joypads usually come with two rumble motors, a "
"strong and a weak one. [code]weak_magnitude[/code] is the strength of the "
@@ -28752,34 +28893,34 @@ msgid ""
"few seconds."
msgstr ""
-#: doc/classes/Input.xml:344
+#: doc/classes/Input.xml:383
msgid "Stops the vibration of the joypad."
msgstr ""
-#: doc/classes/Input.xml:351
+#: doc/classes/Input.xml:390
msgid ""
"Vibrate Android and iOS devices.\n"
"[b]Note:[/b] It needs [code]VIBRATE[/code] permission for Android at export "
"settings. iOS does not support duration."
msgstr ""
-#: doc/classes/Input.xml:359
+#: doc/classes/Input.xml:398
msgid "Sets the mouse position to the specified vector."
msgstr ""
-#: doc/classes/Input.xml:368
+#: doc/classes/Input.xml:407
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
-#: doc/classes/Input.xml:374
+#: doc/classes/Input.xml:413
msgid "Makes the mouse cursor visible if it is hidden."
msgstr ""
-#: doc/classes/Input.xml:377
+#: doc/classes/Input.xml:416
msgid "Makes the mouse cursor hidden if it is visible."
msgstr ""
-#: doc/classes/Input.xml:380
+#: doc/classes/Input.xml:419
msgid ""
"Captures the mouse. The mouse will be hidden and its position locked at the "
"center of the screen.\n"
@@ -28787,83 +28928,83 @@ msgid ""
"need to use [member InputEventMouseMotion.relative]."
msgstr ""
-#: doc/classes/Input.xml:384
+#: doc/classes/Input.xml:423
msgid "Makes the mouse cursor visible but confines it to the game window."
msgstr ""
-#: doc/classes/Input.xml:387
+#: doc/classes/Input.xml:426
msgid "Arrow cursor. Standard, default pointing cursor."
msgstr ""
-#: doc/classes/Input.xml:390
+#: doc/classes/Input.xml:429
msgid ""
"I-beam cursor. Usually used to show where the text cursor will appear when "
"the mouse is clicked."
msgstr ""
-#: doc/classes/Input.xml:393
+#: doc/classes/Input.xml:432
msgid ""
"Pointing hand cursor. Usually used to indicate the pointer is over a link or "
"other interactable item."
msgstr ""
-#: doc/classes/Input.xml:396
+#: doc/classes/Input.xml:435
msgid ""
"Cross cursor. Typically appears over regions in which a drawing operation "
"can be performed or for selections."
msgstr ""
-#: doc/classes/Input.xml:399
+#: doc/classes/Input.xml:438
msgid ""
"Wait cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application is still usable during the "
"operation."
msgstr ""
-#: doc/classes/Input.xml:402
+#: doc/classes/Input.xml:441
msgid ""
"Busy cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application isn't usable during the "
"operation (e.g. something is blocking its main thread)."
msgstr ""
-#: doc/classes/Input.xml:405
+#: doc/classes/Input.xml:444
msgid "Drag cursor. Usually displayed when dragging something."
msgstr ""
-#: doc/classes/Input.xml:408
+#: doc/classes/Input.xml:447
msgid ""
"Can drop cursor. Usually displayed when dragging something to indicate that "
"it can be dropped at the current position."
msgstr ""
-#: doc/classes/Input.xml:411
+#: doc/classes/Input.xml:450
msgid ""
"Forbidden cursor. Indicates that the current action is forbidden (for "
"example, when dragging something) or that the control at a position is "
"disabled."
msgstr ""
-#: doc/classes/Input.xml:414
+#: doc/classes/Input.xml:453
msgid ""
"Vertical resize mouse cursor. A double-headed vertical arrow. It tells the "
"user they can resize the window or the panel vertically."
msgstr ""
-#: doc/classes/Input.xml:417
+#: doc/classes/Input.xml:456
msgid ""
"Horizontal resize mouse cursor. A double-headed horizontal arrow. It tells "
"the user they can resize the window or the panel horizontally."
msgstr ""
-#: doc/classes/Input.xml:420
+#: doc/classes/Input.xml:459
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the bottom left to the top right. It tells the user they can resize the "
"window or the panel both horizontally and vertically."
msgstr ""
-#: doc/classes/Input.xml:423
+#: doc/classes/Input.xml:462
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the top left to the bottom right, the opposite of [constant "
@@ -28871,23 +29012,23 @@ msgid ""
"both horizontally and vertically."
msgstr ""
-#: doc/classes/Input.xml:426
+#: doc/classes/Input.xml:465
msgid "Move cursor. Indicates that something can be moved."
msgstr ""
-#: doc/classes/Input.xml:429
+#: doc/classes/Input.xml:468
msgid ""
"Vertical split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_VSIZE]."
msgstr ""
-#: doc/classes/Input.xml:432
+#: doc/classes/Input.xml:471
msgid ""
"Horizontal split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_HSIZE]."
msgstr ""
-#: doc/classes/Input.xml:435
+#: doc/classes/Input.xml:474
msgid "Help cursor. Usually a question mark."
msgstr ""
@@ -29303,7 +29444,9 @@ msgid "The drag position."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -30615,7 +30758,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30680,22 +30824,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -30710,7 +30856,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -30718,19 +30864,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -30801,7 +30947,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30859,7 +31006,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -32144,14 +32293,21 @@ msgid "Default text [Color] of the [LinkButton]."
msgstr ""
#: doc/classes/LinkButton.xml:46
-msgid "Text [Color] used when the [LinkButton] is being hovered."
+msgid ""
+"Text [Color] used when the [LinkButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/LinkButton.xml:49
-msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgid "Text [Color] used when the [LinkButton] is being hovered."
msgstr ""
#: doc/classes/LinkButton.xml:52
+msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:55
msgid "The vertical space between the baseline of text and the underline."
msgstr ""
@@ -32644,26 +32800,33 @@ msgid "Text [Color] used when the [MenuButton] is disabled."
msgstr ""
#: doc/classes/MenuButton.xml:64
-msgid "Text [Color] used when the [MenuButton] is being hovered."
+msgid ""
+"Text [Color] used when the [MenuButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/MenuButton.xml:67
-msgid "Text [Color] used when the [MenuButton] is being pressed."
+msgid "Text [Color] used when the [MenuButton] is being hovered."
msgstr ""
#: doc/classes/MenuButton.xml:70
-msgid "[StyleBox] used when the [MenuButton] is being hovered."
+msgid "Text [Color] used when the [MenuButton] is being pressed."
msgstr ""
#: doc/classes/MenuButton.xml:73
-msgid "The horizontal space between [MenuButton]'s icon and text."
+msgid "[StyleBox] used when the [MenuButton] is being hovered."
msgstr ""
#: doc/classes/MenuButton.xml:76
-msgid "Default [StyleBox] for the [MenuButton]."
+msgid "The horizontal space between [MenuButton]'s icon and text."
msgstr ""
#: doc/classes/MenuButton.xml:79
+msgid "Default [StyleBox] for the [MenuButton]."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:82
msgid "[StyleBox] used when the [MenuButton] is being pressed."
msgstr ""
@@ -34394,7 +34557,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -37278,26 +37441,33 @@ msgid "Text [Color] used when the [OptionButton] is disabled."
msgstr ""
#: doc/classes/OptionButton.xml:212
-msgid "Text [Color] used when the [OptionButton] is being hovered."
+msgid ""
+"Text [Color] used when the [OptionButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/OptionButton.xml:215
-msgid "Text [Color] used when the [OptionButton] is being pressed."
+msgid "Text [Color] used when the [OptionButton] is being hovered."
msgstr ""
#: doc/classes/OptionButton.xml:218
-msgid "[StyleBox] used when the [OptionButton] is being hovered."
+msgid "Text [Color] used when the [OptionButton] is being pressed."
msgstr ""
#: doc/classes/OptionButton.xml:221
-msgid "The horizontal space between [OptionButton]'s icon and text."
+msgid "[StyleBox] used when the [OptionButton] is being hovered."
msgstr ""
#: doc/classes/OptionButton.xml:224
-msgid "Default [StyleBox] for the [OptionButton]."
+msgid "The horizontal space between [OptionButton]'s icon and text."
msgstr ""
#: doc/classes/OptionButton.xml:227
+msgid "Default [StyleBox] for the [OptionButton]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:230
msgid "[StyleBox] used when the [OptionButton] is being pressed."
msgstr ""
@@ -37700,7 +37870,7 @@ msgstr ""
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -37730,14 +37900,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -37747,7 +37917,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -40246,17 +40416,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -40274,11 +40470,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -40473,7 +40669,9 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-msgid "Returns the [Physics2DDirectBodyState] of the body."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
@@ -41276,6 +41474,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -41293,7 +41509,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -41407,7 +41623,9 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-msgid "Returns the [PhysicsDirectBodyState] of the body."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/PhysicsServer.xml:370
@@ -42387,27 +42605,27 @@ msgstr ""
msgid "Removes an element from the array by index."
msgstr ""
-#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolColorArray.xml:66
-#: doc/classes/PoolIntArray.xml:67 doc/classes/PoolRealArray.xml:67
-#: doc/classes/PoolStringArray.xml:74 doc/classes/PoolVector2Array.xml:67
-#: doc/classes/PoolVector3Array.xml:66
+#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolIntArray.xml:67
+#: doc/classes/PoolRealArray.xml:67
msgid ""
"Sets the size of the array. If the array is grown, reserves elements at the "
"end of the array. If the array is shrunk, truncates the array to the new "
-"size."
+"size.\n"
+"[b]Note:[/b] Added elements are not automatically initialized to 0 and will "
+"contain garbage, i.e. indeterminate values."
msgstr ""
-#: doc/classes/PoolByteArray.xml:121
+#: doc/classes/PoolByteArray.xml:122
msgid "Changes the byte at the given index."
msgstr ""
-#: doc/classes/PoolByteArray.xml:127 doc/classes/PoolColorArray.xml:79
-#: doc/classes/PoolRealArray.xml:80 doc/classes/PoolStringArray.xml:87
+#: doc/classes/PoolByteArray.xml:128 doc/classes/PoolColorArray.xml:79
+#: doc/classes/PoolRealArray.xml:81 doc/classes/PoolStringArray.xml:87
#: doc/classes/PoolVector2Array.xml:80 doc/classes/PoolVector3Array.xml:79
msgid "Returns the size of the array."
msgstr ""
-#: doc/classes/PoolByteArray.xml:135
+#: doc/classes/PoolByteArray.xml:136
msgid ""
"Returns the slice of the [PoolByteArray] between indices (inclusive) as a "
"new [PoolByteArray]. Any negative index is considered to be from the end of "
@@ -42439,6 +42657,14 @@ msgstr ""
msgid "Appends a value to the array."
msgstr ""
+#: doc/classes/PoolColorArray.xml:66 doc/classes/PoolStringArray.xml:74
+#: doc/classes/PoolVector2Array.xml:67 doc/classes/PoolVector3Array.xml:66
+msgid ""
+"Sets the size of the array. If the array is grown, reserves elements at the "
+"end of the array. If the array is shrunk, truncates the array to the new "
+"size."
+msgstr ""
+
#: doc/classes/PoolColorArray.xml:73
msgid "Changes the [Color] at the given index."
msgstr ""
@@ -42475,11 +42701,11 @@ msgid ""
"valid, or at the end of the array ([code]idx == size()[/code])."
msgstr ""
-#: doc/classes/PoolIntArray.xml:74
+#: doc/classes/PoolIntArray.xml:75
msgid "Changes the int at the given index."
msgstr ""
-#: doc/classes/PoolIntArray.xml:80
+#: doc/classes/PoolIntArray.xml:81
msgid "Returns the array size."
msgstr ""
@@ -42511,7 +42737,7 @@ msgstr ""
msgid "Appends a [PoolRealArray] at the end of this array."
msgstr ""
-#: doc/classes/PoolRealArray.xml:74
+#: doc/classes/PoolRealArray.xml:75
msgid "Changes the float at the given index."
msgstr ""
@@ -43777,18 +44003,6 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:204
msgid ""
-"The project data directory is used for storing project-specific data "
-"(metadata, shader cache, etc.).\n"
-"[b]Note:[/b] Restart the application after changing this setting.\n"
-"[b]Note:[/b] Changing this value can help on platforms or with third-party "
-"tools where specific directory patterns are disallowed. Only modify this "
-"setting if you know that your environment requires it, as changing the "
-"default can impact compatibility with some external tools or plugins which "
-"expect the default [code].import[/code] folder."
-msgstr ""
-
-#: doc/classes/ProjectSettings.xml:209
-msgid ""
"Specifies a file to override project settings. For example: [code]user://"
"custom_settings.cfg[/code]. See \"Overriding\" in the [ProjectSettings] "
"class description at the top for more information.\n"
@@ -43796,7 +44010,7 @@ msgid ""
"code] will still be read to override the project settings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:213
+#: doc/classes/ProjectSettings.xml:208
msgid ""
"If [code]true[/code], the project will save user data to its own user "
"directory (see [member application/config/custom_user_dir_name]). This "
@@ -43806,13 +44020,28 @@ msgid ""
"user data directory)/Godot/app_userdata/(project name)[/code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:216
+#: doc/classes/ProjectSettings.xml:211
+msgid ""
+"If [code]true[/code], the project will use a hidden directory ([code]."
+"import[/code]) for storing project-specific data (metadata, shader cache, "
+"etc.).\n"
+"If [code]false[/code], a non-hidden directory ([code]import[/code]) will be "
+"used instead.\n"
+"[b]Note:[/b] Restart the application after changing this setting.\n"
+"[b]Note:[/b] Changing this value can help on platforms or with third-party "
+"tools where hidden directory patterns are disallowed. Only modify this "
+"setting if you know that your environment requires it, as changing the "
+"default can impact compatibility with some external tools or plugins which "
+"expect the default [code].import[/code] folder."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:217
msgid ""
"Icon set in [code].ico[/code] format used on Windows to set the game's icon. "
"This is done automatically on start by calling [method OS.set_native_icon]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:219
+#: doc/classes/ProjectSettings.xml:220
msgid ""
"Time samples for frame deltas are subject to random variation introduced by "
"the platform, even when frames are displayed at regular intervals thanks to "
@@ -43826,14 +44055,14 @@ msgid ""
"adequate to render frames at the refresh rate."
msgstr ""
-#: doc/classes/ProjectSettings.xml:224
+#: doc/classes/ProjectSettings.xml:225
msgid ""
"[b]Experimental.[/b] Shifts the measurement of delta time for each frame to "
"just after the drawing has taken place. This may lead to more consistent "
"deltas and a reduction in frame stutters."
msgstr ""
-#: doc/classes/ProjectSettings.xml:227
+#: doc/classes/ProjectSettings.xml:228
msgid ""
"If [code]true[/code], disables printing to standard error. If [code]true[/"
"code], this also hides error and warning messages printed by [method "
@@ -43842,7 +44071,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:231
+#: doc/classes/ProjectSettings.xml:232
msgid ""
"If [code]true[/code], disables printing to standard output. This is "
"equivalent to starting the editor or project with the [code]--quiet[/code] "
@@ -43850,7 +44079,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:235
+#: doc/classes/ProjectSettings.xml:236
msgid ""
"If [code]true[/code], flushes the standard output stream every time a line "
"is printed. This affects both terminal logging and file logging.\n"
@@ -43866,20 +44095,20 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:241
+#: doc/classes/ProjectSettings.xml:242
msgid ""
"Debug build override for [member application/run/flush_stdout_on_print], as "
"performance is less important during debugging.\n"
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:245
+#: doc/classes/ProjectSettings.xml:246
msgid ""
"Forces a delay between frames in the main loop (in milliseconds). This may "
"be useful if you plan to disable vertical synchronization."
msgstr ""
-#: doc/classes/ProjectSettings.xml:248
+#: doc/classes/ProjectSettings.xml:249
msgid ""
"If [code]true[/code], enables low-processor usage mode. This setting only "
"works on desktop platforms. The screen is not redrawn if nothing changes "
@@ -43887,75 +44116,81 @@ msgid ""
"useless (and can hurt performance) in most games."
msgstr ""
-#: doc/classes/ProjectSettings.xml:251
+#: doc/classes/ProjectSettings.xml:252
msgid ""
"Amount of sleeping between frames when the low-processor usage mode is "
"enabled (in microseconds). Higher values will result in lower CPU usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:254
+#: doc/classes/ProjectSettings.xml:255
msgid "Path to the main scene file that will be loaded when the project runs."
msgstr ""
-#: doc/classes/ProjectSettings.xml:257 doc/classes/ProjectSettings.xml:260
+#: doc/classes/ProjectSettings.xml:258 doc/classes/ProjectSettings.xml:261
msgid ""
"Audio buses will disable automatically when sound goes below a given dB "
"threshold for a given time. This saves CPU as effects assigned to that bus "
"will no longer do any processing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:263
+#: doc/classes/ProjectSettings.xml:264
msgid ""
"Default [AudioBusLayout] resource file to use in the project, unless "
"overridden by the scene."
msgstr ""
-#: doc/classes/ProjectSettings.xml:266
+#: doc/classes/ProjectSettings.xml:267
msgid ""
"Specifies the audio driver to use. This setting is platform-dependent as "
"each platform supports different audio drivers. If left empty, the default "
"audio driver will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:269
+#: doc/classes/ProjectSettings.xml:270
msgid ""
"If [code]true[/code], microphone input will be allowed. This requires "
"appropriate permissions to be set when exporting to Android or iOS."
msgstr ""
-#: doc/classes/ProjectSettings.xml:272
+#: doc/classes/ProjectSettings.xml:273
msgid ""
"The mixing rate used for audio (in Hz). In general, it's better to not touch "
"this and leave it to the host operating system."
msgstr ""
-#: doc/classes/ProjectSettings.xml:275
+#: doc/classes/ProjectSettings.xml:276
msgid ""
"Safer override for [member audio/mix_rate] in the Web platform. Here "
"[code]0[/code] means \"let the browser choose\" (since some browsers do not "
"like forcing the mix rate)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:278
+#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:281
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:284
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:287
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43965,7 +44200,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:290
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43975,27 +44210,27 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:293
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:296
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
-#: doc/classes/ProjectSettings.xml:299
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:302
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -44003,81 +44238,81 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:305
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:308
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:311
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:314
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:317
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr ""
-#: doc/classes/ProjectSettings.xml:320
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:323
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:326
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:329
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:332
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:335
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:338
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:341
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -44085,109 +44320,109 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:344
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:347
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:350
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:353
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:356
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:359
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:362
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:365
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:368
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:371
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:374
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:377
+#: doc/classes/ProjectSettings.xml:380
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:380
+#: doc/classes/ProjectSettings.xml:383
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:383
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:386
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:389
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:392
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:395
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:398
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -44198,91 +44433,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:403
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:406
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:409
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:412
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:415
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:418
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:421
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:424
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:427
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:430
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:433
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:436
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:439
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr ""
-#: doc/classes/ProjectSettings.xml:442
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:445
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:448
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:451
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -44291,13 +44526,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:455
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:458
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -44307,7 +44542,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:463
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -44315,19 +44550,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:468
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:472
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:476
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -44341,45 +44576,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:481
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:484
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:488
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:491
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:494
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:497
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:500
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -44388,7 +44623,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:503
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -44399,7 +44634,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:507
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -44415,14 +44650,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:515
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:518
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -44430,49 +44665,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:521
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:524
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:529
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:532
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:535
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:538
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:541
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:544
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:547
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -44481,7 +44716,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:551
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44489,7 +44724,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:555
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44497,7 +44732,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:559
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44507,7 +44742,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:563
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -44516,7 +44751,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:567
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -44525,7 +44760,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:571
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44535,7 +44770,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:575
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44543,7 +44778,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:579
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -44553,7 +44788,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:583
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -44563,7 +44798,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:587
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44571,7 +44806,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:591
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -44580,7 +44815,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:595
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44588,7 +44823,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:599
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -44600,477 +44835,477 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:605
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:608
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:611
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:614
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:617
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:620
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:623
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:626
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:629
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:632
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:635
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:638
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:641
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:644
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:647
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:650
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:653
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:656
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:659
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:662
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:665
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:668
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:671
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:674
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:677
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:680
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:683
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:686
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:689
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:692
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:695
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:698
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:701
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:704
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:707
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:710
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:713
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:716
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:719
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:722
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:725
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:728
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:731
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:734
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:737
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:740
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:743
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:746
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:749
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:752
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:755
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:758
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:761
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:764
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:767
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:770
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:773
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:776
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:779
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:782
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:785
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:788
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:791
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:794
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:797
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:800
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:803
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:806
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:809
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:812
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:815
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:818
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:821
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:824
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:827
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:830
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:833
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:836
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:839
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:842
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:845
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:848
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:851
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:854
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:857
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:860
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:863
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:866
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:869
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:872
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:875
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:878
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:881
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr ""
-#: doc/classes/ProjectSettings.xml:884
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:887
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:890
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:893
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:896
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:899
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:902
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:905
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:908
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:911
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:914
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:917
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:920
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:923
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:926
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:929
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:932
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:935
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:938
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:941
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:946
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:949
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -45078,92 +45313,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:952
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:955
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:958
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:961
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:964
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:967
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:970
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:973
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:976
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:979
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:982
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:985
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:988
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:991
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:994
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:997
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1000
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1003
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -45173,33 +45408,33 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1007
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1010
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1013
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1017
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1021
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45212,7 +45447,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1025
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45224,7 +45459,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1033
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45236,7 +45471,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1041
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45249,7 +45484,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1045
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -45257,28 +45492,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1049
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1053
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1056
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1059
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -45288,25 +45523,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1063
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1066
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1069
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1072
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45319,7 +45554,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1076
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45331,7 +45566,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1084
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45343,7 +45578,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1092
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45356,13 +45591,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1096
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1099
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -45370,11 +45605,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1103
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1106
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -45388,7 +45623,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1112
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -45397,7 +45632,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1116
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -45413,7 +45648,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1121
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -45423,7 +45658,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1125
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45433,7 +45668,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1129
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -45444,7 +45679,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1133
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45454,7 +45689,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1137
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -45462,7 +45697,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1141
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -45473,7 +45708,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1145
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -45488,7 +45723,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1151
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -45497,13 +45732,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1156
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1159
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -45512,7 +45747,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1162
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -45522,7 +45757,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1165
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -45534,7 +45769,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1168
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -45544,24 +45779,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1171
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1174
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1177
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1180
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -45570,7 +45805,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1183
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -45578,7 +45813,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1186
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -45587,7 +45822,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1189
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -45597,7 +45832,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1193
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -45605,31 +45840,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1197
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1200
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1203
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1206
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1209
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -45637,7 +45872,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1212
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -45647,46 +45882,53 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1215
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1218
+#: doc/classes/ProjectSettings.xml:1221
+msgid ""
+"iOS specific override for [member rendering/gles2/compatibility/"
+"disable_half_float], due to poor support for half-float vertex compression "
+"on many devices."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1224
msgid ""
-"If [code]true[/code] and available on the target device, enables high "
-"floating point precision for all shader computations in GLES2.\n"
+"If [code]true[/code] and available on the target Android device, enables "
+"high floating point precision for all shader computations in GLES2.\n"
"[b]Warning:[/b] High floating point precision can be extremely slow on older "
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1225
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1228
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1231
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1234
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -45694,7 +45936,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1237
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -45704,7 +45946,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1240
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -45713,7 +45955,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1243
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -45722,20 +45964,20 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1246
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1249
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1252
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -45744,7 +45986,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1255
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -45752,7 +45994,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1258
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -45761,7 +46003,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -45771,20 +46013,20 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1267
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1274
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -45793,13 +46035,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -45809,46 +46051,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1293
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1296
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1299
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1302
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1305
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -45858,7 +46100,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -45870,7 +46112,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -45878,7 +46120,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1316
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -45886,7 +46128,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -45895,7 +46137,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1323
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -45909,7 +46151,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1328
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -45919,7 +46161,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1331
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -45928,7 +46170,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1334
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -45938,54 +46180,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1337
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1340
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1343
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1346
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1349
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1352
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1355
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1358
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -45996,61 +46238,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1365
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1368
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1371
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1374
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1377
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1380
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1383
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1386
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -46061,7 +46303,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -46070,26 +46312,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1393 doc/classes/ProjectSettings.xml:1396
#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1405
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1408
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1411
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -46100,20 +46342,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1418
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -46125,52 +46367,52 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1428
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1435
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1438
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1441
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1444
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1447
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1450
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1453
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -46178,7 +46420,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -46188,10 +46430,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -46200,10 +46442,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -46212,10 +46454,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -46224,10 +46466,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -46236,10 +46478,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -46903,40 +47145,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr ""
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -46944,14 +47200,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -49286,6 +49542,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -49303,7 +49575,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -49311,11 +49583,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -49325,19 +49597,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -54752,20 +55024,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -54776,28 +55053,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -54809,19 +55086,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
@@ -57607,26 +57884,33 @@ msgid "Text [Color] used when the [ToolButton] is disabled."
msgstr ""
#: doc/classes/ToolButton.xml:39
-msgid "Text [Color] used when the [ToolButton] is being hovered."
+msgid ""
+"Text [Color] used when the [ToolButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/ToolButton.xml:42
-msgid "Text [Color] used when the [ToolButton] is being pressed."
+msgid "Text [Color] used when the [ToolButton] is being hovered."
msgstr ""
#: doc/classes/ToolButton.xml:45
-msgid "[StyleBox] used when the [ToolButton] is being hovered."
+msgid "Text [Color] used when the [ToolButton] is being pressed."
msgstr ""
#: doc/classes/ToolButton.xml:48
-msgid "The horizontal space between [ToolButton]'s icon and text."
+msgid "[StyleBox] used when the [ToolButton] is being hovered."
msgstr ""
#: doc/classes/ToolButton.xml:51
-msgid "Default [StyleBox] for the [ToolButton]."
+msgid "The horizontal space between [ToolButton]'s icon and text."
msgstr ""
#: doc/classes/ToolButton.xml:54
+msgid "Default [StyleBox] for the [ToolButton]."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:57
msgid "[StyleBox] used when the [ToolButton] is being pressed."
msgstr ""
diff --git a/doc/translations/it.po b/doc/translations/it.po
index 6b85de60f3..b5b5700045 100644
--- a/doc/translations/it.po
+++ b/doc/translations/it.po
@@ -20,12 +20,15 @@
# Daniele Basso <tiziodcaio@gmail.com>, 2021.
# Jacopo Farina <jacopo1.farina@gmail.com>, 2021.
# Riteo Siuga <riteo@posteo.net>, 2021.
+# ZeroKun265 <davidegiambirtone265@gmail.com>, 2021.
+# Andrea Montagna <fullmontis@gmail.com>, 2021.
+# Andrea Leganza <neogene@gmail.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2021-07-26 03:35+0000\n"
-"Last-Translator: Riteo Siuga <riteo@posteo.net>\n"
+"PO-Revision-Date: 2021-11-15 21:14+0000\n"
+"Last-Translator: Andrea Leganza <neogene@gmail.com>\n"
"Language-Team: Italian <https://hosted.weblate.org/projects/godot-engine/"
"godot-class-reference/it/>\n"
"Language: it\n"
@@ -33,45 +36,45 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.7.2-dev\n"
+"X-Generator: Weblate 4.9.1-dev\n"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Description"
msgstr "Descrizione"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Tutorials"
msgstr "Guide"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Properties"
msgstr "Proprietà"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Methods"
msgstr "Metodi"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Theme Properties"
msgstr "Proprietà del tema"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Signals"
msgstr "Segnali"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Enumerations"
msgstr "Enumerazioni"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Constants"
msgstr "Costanti"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Property Descriptions"
msgstr "Descrizioni delle proprietà"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Method Descriptions"
msgstr "Descrizioni del metodo"
@@ -130,7 +133,6 @@ msgstr ""
"I nomi dei colori supportati sono uguali alle costanti definite in [Color]."
#: modules/gdscript/doc_classes/@GDScript.xml:45
-#, fuzzy
msgid ""
"Returns the absolute value of parameter [code]s[/code] (i.e. positive "
"value).\n"
@@ -141,12 +143,10 @@ msgstr ""
"Ritorna il valore assoluto del parametro [code]s[/code] (ovvero un numero "
"positivo, sia intero che decimale).\n"
"[codeblock]\n"
-"# a è 1\n"
-"a = abs(-1)\n"
+"a = abs(-1) # a è 1\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:55
-#, fuzzy
msgid ""
"Returns the arc cosine of [code]s[/code] in radians. Use to get the angle of "
"cosine [code]s[/code]. [code]s[/code] must be between [code]-1.0[/code] and "
@@ -159,6 +159,7 @@ msgid ""
msgstr ""
"Restituisce l'arcocoseno di [code]s[/code] in radianti. Usato per prendere "
"l'angolo del coseno di [code]s[/code].\n"
+"[code]s[/code] deve essere compreso tra [code]1[/code] e [code] -1 [/code]\n"
"[codeblock]\n"
"# c è uguale a 0.523599 o 30 gradi se convertito con rad2deg(s)\n"
"c = acos(0.866025)\n"
@@ -184,7 +185,6 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:78
-#, fuzzy
msgid ""
"Asserts that the [code]condition[/code] is [code]true[/code]. If the "
"[code]condition[/code] is [code]false[/code], an error is generated. When "
@@ -210,7 +210,7 @@ msgid ""
"a message with clarifying details\n"
"[/codeblock]"
msgstr ""
-"Controlla che [code]condizion[/code] sia [code]true[/code]. Se "
+"Controlla che [code]condition[/code] sia [code]true[/code]. Se "
"[code]condition[/code] è [code]false[/code], un errore è generato ed il "
"programma viene fermato fin quando decidi di avviarlo di nuovo. Viene "
"eseguito soltanto nelle build di debug, o quando il gioco viene eseguito "
@@ -297,7 +297,6 @@ msgstr ""
"dall'origine ed un angolo)."
#: modules/gdscript/doc_classes/@GDScript.xml:135
-#, fuzzy
msgid ""
"Rounds [code]s[/code] upward (towards positive infinity), returning the "
"smallest whole number that is not less than [code]s[/code].\n"
@@ -307,12 +306,13 @@ msgid ""
"[/codeblock]\n"
"See also [method floor], [method round], [method stepify], and [int]."
msgstr ""
-"Arrotonda [code]s[/code] per eccesso, ritornando il più piccolo intero non "
-"minore di [code]s[/code].\n"
+"Arrotonda [code]s[/code] per eccesso (verso l'infinito positivo), ritornando "
+"il più piccolo intero non minore di [code]s[/code].\n"
"[codeblock]\n"
-"i = ceil(1.45) # i è 2\n"
-"i = ceil(1.001) # i è 2\n"
-"[/codeblock]"
+"a = ceil(1.45) # a è 2.0\n"
+"a = ceil(1.001) # a è 2.0\n"
+"[/codeblock]\n"
+"Vedi anche [method floor], [method round], [method stepify], e [int]."
#: modules/gdscript/doc_classes/@GDScript.xml:147
msgid ""
@@ -335,7 +335,6 @@ msgstr ""
"Questo è l'inverso di [method ord]."
#: modules/gdscript/doc_classes/@GDScript.xml:162
-#, fuzzy
msgid ""
"Clamps [code]value[/code] and returns a value not less than [code]min[/code] "
"and not more than [code]max[/code].\n"
@@ -348,13 +347,9 @@ msgstr ""
"Limita [code]value[/code] e ritorna un valore non minore di [code]min[/code] "
"e non maggiore di [code]max[/code].\n"
"[codeblock]\n"
-"speed = 1000\n"
-"# a è 20\n"
-"a = clamp(speed, 1, 20)\n"
-"\n"
-"speed = -10\n"
-"# a è 1\n"
-"a = clamp(speed, 1, 20)\n"
+"a = clamp(1000, 1, 20) # a è 20\n"
+"a = clamp(-10, 1, 20) # a è 1\n"
+"a = clamp(15, 1, 20) # a è 15\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:175
@@ -382,7 +377,6 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:190
-#, fuzzy
msgid ""
"Returns the cosine of angle [code]s[/code] in radians.\n"
"[codeblock]\n"
@@ -392,13 +386,11 @@ msgid ""
msgstr ""
"RItorna il coseno dell'angolo [code]s[/code] in radianti.\n"
"[codeblock]\n"
-"# Stampa 1 poi -1\n"
-"print(cos(PI * 2))\n"
-"print(cos(PI))\n"
+"a = cos(TAU) # a è 1.0\n"
+"a = cos(PI) # a è -1.0\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:201
-#, fuzzy
msgid ""
"Returns the hyperbolic cosine of [code]s[/code] in radians.\n"
"[codeblock]\n"
@@ -407,8 +399,7 @@ msgid ""
msgstr ""
"Ritorna il coseno iperbolico di [code]s[/code] in radianti.\n"
"[codeblock]\n"
-"# Stampa 1.543081\n"
-"print(cosh(1))\n"
+"print(cosh(1)) # Stampa 1.543081\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:211
@@ -417,10 +408,9 @@ msgstr "Converte da decibel a energia lineare (audio)."
#: modules/gdscript/doc_classes/@GDScript.xml:218
msgid "Deprecated alias for [method step_decimals]."
-msgstr ""
+msgstr "Alias deprecato per [method step_decimals]."
#: modules/gdscript/doc_classes/@GDScript.xml:227
-#, fuzzy
msgid ""
"[b]Note:[/b] [code]dectime[/code] has been deprecated and will be removed in "
"Godot 4.0, please use [method move_toward] instead.\n"
@@ -430,15 +420,15 @@ msgid ""
"a = dectime(60, 10, 0.1)) # a is 59.0\n"
"[/codeblock]"
msgstr ""
-"Restituisce il risultato di [code]valore[/code] diminuito di [code]step[/"
-"code]*[code]quantità[/code].\n"
+"[b]Nota bene:[/b] [code]dectime[/code] è oramai deprecato e verrà rimosso in "
+"Godot 4.0, si prega invece di usare [method move_toward].\n"
+"Ritorna il valore di [code]value[/code] diminuito di [code]step[/code] * "
+"[code]amount[/code].\n"
"[codeblock]\n"
-"# a = 59\n"
-"a = dectime(60, 10, 0.1))\n"
+"a = dectime(60, 10, 0.1)) # a è 59.0\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:238
-#, fuzzy
msgid ""
"Converts an angle expressed in degrees to radians.\n"
"[codeblock]\n"
@@ -447,18 +437,16 @@ msgid ""
msgstr ""
"Converte un angolo espresso in gradi in radianti.\n"
"[codeblock]\n"
-"# r è 3.141593\n"
-"r = deg2rad(180)\n"
+"r = deg2rad(180) # r è 3.141593\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:248
-#, fuzzy
msgid ""
"Converts a dictionary (previously created with [method inst2dict]) back to "
"an instance. Useful for deserializing."
msgstr ""
-"Converte un'istanza precedentemente convertita in un dizionario di nuovo in "
-"un istanza. Utile per la deserializzazione."
+"Riconverte un dizionario (precedentemente creato usando [method inst2dict]) "
+"in una istanza. Utile per la deserializzazione."
#: modules/gdscript/doc_classes/@GDScript.xml:256
msgid ""
@@ -480,6 +468,23 @@ msgid ""
"See also [method smoothstep]. If you need to perform more advanced "
"transitions, use [Tween] or [AnimationPlayer]."
msgstr ""
+"Ritorna un valore \"allentato\" di [code]x[/code] basato su una funzione di "
+"allentamento definita in [code]curve[/code]. Questa funzione è basata su un "
+"esponente. L'argomento [code]curve[/code] può essere qualunque numero "
+"decimale, con valori specifici che portano ai seguenti comportamenti:\n"
+"[codeblock]\n"
+"- Minore di -1.0 (exclusive): Ease in-out\n"
+"- 1.0: Lineare\n"
+"- Compreso tra -1.0 and 0.0 (non compresi): Ease out-in\n"
+"- 0.0: Costante\n"
+"- Compreso tra 0.0 to 1.0 (non compresi): Ease in\n"
+"- 1.0: Lineare\n"
+"- Maggiore di 1.0 (non compreso): Ease out\n"
+"[/codeblock]\n"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/"
+"ease_cheatsheet.png]ease() curve values cheatsheet[/url]\n"
+"Vedi anche [method smoothstep]. Se hai bisogno di transizioni più avanzate, "
+"usa [Tween] oppure [AnimationPlayer]."
#: modules/gdscript/doc_classes/@GDScript.xml:274
msgid ""
@@ -502,7 +507,6 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:286
-#, fuzzy
msgid ""
"Rounds [code]s[/code] downward (towards negative infinity), returning the "
"largest whole number that is not more than [code]s[/code].\n"
@@ -517,18 +521,18 @@ msgid ""
"directly."
msgstr ""
"Arrotonda [code]s[/code] verso il basso (all'infinito negativo), restituendo "
-"il più grande intero che è minore di [code]s[/code]\n"
+"il più grande intero minore di [code]s[/code].\n"
"[codeblock]\n"
-"# a è 2.0\n"
-"a = floor(2.99)\n"
-"# a è -3.0\n"
-"a = floor(-2.99)\n"
+"a = floor(2.45) # a è 2.0\n"
+"a = floor(2.99) # a è 2.0\n"
+"a = floor(-2.99) # a è -3.0\n"
"[/codeblock]\n"
-"[b]Nota:[/b] Questo metodo restituisce un float. Se ti serve un intero puoi "
-"direttamente usare [code]int(s)[/code]."
+"Vedi anche [method ceil], [method round], [method stepify], e [int].\n"
+"[b]Nota:[/b] Questo metodo restituisce un float. Se ti serve un intero e "
+"[code]s[/code] è un numero non negativo, puoi direttamente usare [code]int(s)"
+"[/code]."
#: modules/gdscript/doc_classes/@GDScript.xml:301
-#, fuzzy
msgid ""
"Returns the floating-point remainder of [code]a/b[/code], keeping the sign "
"of [code]a[/code].\n"
@@ -540,13 +544,11 @@ msgstr ""
"Restituisce il resto in virgola mobile di [code]a/b[/code], mantenendo il "
"segno di [code]a[/code].\n"
"[codeblock]\n"
-"# Il resto è 1.5\n"
-"var resto = fmod(7, 5.5)\n"
+"r = fmod(7, 5.5) # r è 1.5\n"
"[/codeblock]\n"
"Per l'operazione di resto intero, utilizzare l'operatore %."
#: modules/gdscript/doc_classes/@GDScript.xml:313
-#, fuzzy
msgid ""
"Returns the floating-point modulus of [code]a/b[/code] that wraps equally in "
"positive and negative.\n"
@@ -569,24 +571,19 @@ msgstr ""
"Restituisce il modulo in virgola mobile di [code]a/b[/code] che arrotonda "
"ugualmente in positivo e negativo.\n"
"[codeblock]\n"
-"var i = -6\n"
-"while i < 5:\n"
-" prints(i, fposmod(i, 3))\n"
-" i += 1\n"
+"for i in 7:\n"
+" var x = 0.5 * i - 1.5\n"
+" print(\"%4.1f %4.1f %4.1f\" % [x, fmod(x, 1.5), fposmod(x, 1.5)])\n"
"[/codeblock]\n"
"Produce:\n"
"[codeblock]\n"
-"-6 0\n"
-"-5 1\n"
-"-4 2\n"
-"-3 0\n"
-"-2 1\n"
-"-1 2\n"
-"0 0\n"
-"1 1\n"
-"2 2\n"
-"3 0\n"
-"4 1\n"
+"-1.5 -0.0 0.0\n"
+"-1.0 -1.0 0.5\n"
+"-0.5 -0.5 1.0\n"
+" 0.0 0.0 0.0\n"
+" 0.5 0.5 0.5\n"
+" 1.0 1.0 1.0\n"
+" 1.5 0.0 0.0\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:336
@@ -775,7 +772,7 @@ msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml:453
msgid ""
"Returns whether [code]s[/code] is a NaN (\"Not a Number\" or invalid) value."
-msgstr "Ritorna se[code]s[/code] è un valore NaN (Not-A-Number) o invalido."
+msgstr "Ritorna se [code]s[/code] è un valore NaN (Not-A-Number) o invalido."
#: modules/gdscript/doc_classes/@GDScript.xml:460
msgid ""
@@ -796,18 +793,18 @@ msgid ""
"len(a) # Returns 4\n"
"[/codeblock]"
msgstr ""
-"Restituisce la lunghezza della variante [code]var[/code]. La lunghezza è il "
-"conteggio dei caratteri della Stringa, il conteggio degli elementi "
-"dell'Array, la dimensione del Dizionario, ecc.\n"
-"[b]Nota:[/b] Genera un errore fatale se la Variante non può fornire una "
-"lunghezza.\n"
+"Restituisce la lunghezza della variabile Variant [code]var[/code]. La "
+"lunghezza è il conteggio dei caratteri di una variabile String, il conteggio "
+"degli elementi di una variabile Array, la dimensione di una variabile "
+"Dizionario, ecc.\n"
+"[b]Nota:[/b] Genera un errore fatale se la variable Variant non può fornire "
+"una lunghezza.\n"
"[codeblock]\n"
"a = [1, 2, 3, 4]\n"
"len(a) # Restituisce 4\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:482
-#, fuzzy
msgid ""
"Linearly interpolates between two values by a normalized value. This is the "
"opposite of [method inverse_lerp].\n"
@@ -821,13 +818,14 @@ msgid ""
"lerp(Vector2(1, 5), Vector2(3, 2), 0.5) # Returns Vector2(2, 3.5)\n"
"[/codeblock]"
msgstr ""
-"Interpola linearmente tra due valori con un valore normalizzato. Questo è "
-"l'opposto di [method inverse_lerp].\n"
-"Se gli argomenti [code]da [/code] e da [code]a[/code] sono di tipo [int] o "
+"Interpola linearmente tra due valori mediante un valore normalizzato. Questo "
+"metodo è l'opposto di [method inverse_lerp].\n"
+"Se gli argomenti [code]from[/code] e [code]to[/code] sono di tipo [int] o "
"[float], il valore di ritorno è un [float].\n"
"Se entrambi sono dello stesso tipo di vettore ([Vector2], [Vector3] o "
"[Color]), il valore di ritorno sarà dello stesso tipo ([code]lerp[/code] "
-"quindi chiama il metodo [code]lerp[/code] del tipo vettore).\n"
+"quindi chiama il metodo [code]linear_interpolate[/code] del vettore "
+"utilizzato).\n"
"[codeblock].\n"
"lerp(0, 4, 0.75) # Restituisce 3.0\n"
"lerp(Vector2(1, 5), Vector2(3, 2), 0.5) # Restituisce Vector2(2, 3.5)\n"
@@ -892,7 +890,6 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:527
-#, fuzzy
msgid ""
"Loads a resource from the filesystem located at [code]path[/code]. The "
"resource is loaded on the method call (unless it's referenced already "
@@ -914,15 +911,16 @@ msgid ""
"This method is a simplified version of [method ResourceLoader.load], which "
"can be used for more advanced scenarios."
msgstr ""
-"Carica una risorsa dai file system che si trova su [code]path[/code]. La "
-"risorsa è caricata nella chiamata del metodo (a meno che ci sia già un "
-"riferimento in un altro punto, per esempio un altro script o nella scena), "
-"che potrebbe causare un ritardo, specialmente quando si caricano le scene. "
-"Per evitare ritardi non necessari quando si carica qualcosa più volte, o si "
-"salva la risorsa in una variabile o si usa [method preload].\n"
+"Carica una risorsa dai file system posizionata in [code]path[/code]. La "
+"risorsa è caricata alla chiamata del metodo (a meno che non sia già "
+"indirizzato altrove, per esempio in un altro script o nella scena). Ciò "
+"potrebbe causare un ritardo, specialmente al caricamento delle scene. Per "
+"evitare ritardi superflui in caso di molteplici caricamenti, salvare la "
+"risorsa in una variabile o usare [method preload].\n"
"[b]Nota:[/b] I percorsi delle risorse possono essere ottenuti cliccando con "
-"il tasto destro su una risorsa nel riquadro File di sistema \"Copia percorso"
-"\" o trascinando il file dal riquadro File di sistema nello script.\n"
+"il tasto destro su una risorsa nel riquadro File di Sistema e scegliendo "
+"\"Copia percorso\" o trascinando il file dal riquadro File di Sistema nello "
+"script.\n"
"[codeblock]\n"
"# Carica una scena chiamata main che si trova alla radice della cartella di "
"progetto e salvala temporaneamente in una variabile.\n"
@@ -930,7 +928,9 @@ msgstr ""
"PackedScene.\n"
"[/codeblock]\n"
"[b]Importante:[/b] Il percorso deve essere assoluto, un percorso locale "
-"ritornerà [code]null[/code]."
+"ritornerà [code]null[/code].\n"
+"Questo metodo è una versione semplificata di [method ResourceLoader.load], "
+"che può essere usata in casi più avanzati."
#: modules/gdscript/doc_classes/@GDScript.xml:541
msgid ""
@@ -1059,7 +1059,6 @@ msgstr ""
"Questo metodo è l'opposto di [method char]."
#: modules/gdscript/doc_classes/@GDScript.xml:622
-#, fuzzy
msgid ""
"Parse JSON text to a Variant. (Use [method typeof] to check if the Variant's "
"type is what you expect.)\n"
@@ -1079,15 +1078,15 @@ msgid ""
"[/codeblock]\n"
"See also [JSON] for an alternative way to parse JSON text."
msgstr ""
-"Converte una stringa JSON in Variant. (Usa [method typeof] per controllare "
-"se la tipologia di Variant è quella prevista)\n"
-"[b]Nota:[/b] La specifica JSON non presenta tipi integer o float, ma solo "
+"Converte una stringa JSON in una variabile Variant. (Usa [method typeof] per "
+"controllare se la tipologia di Variant è quella prevista.)\n"
+"[b]Nota:[/b] La specifica JSON non definisce tipi integer o float, ma solo "
"tipi [i]number[/i]. Perciò convertire una stringa JSON convertirà tutti i "
"valori numerici in [float].\n"
"[b]Nota:[/b] Gli oggetti JSON non mantengono l'ordinamento delle chiavi come "
-"i dictionary Godot, quindi non dovresti dare per scontato che le chiavi "
-"siano in un certo ordine se un dictionary è stato costruito da JSON. Al "
-"contrario, gli array JSON mantengono l'ordine degli elementi.\n"
+"i tipi Dictionary di Godot, quindi non si deve assumere che le chiavi siano "
+"in un certo ordine se una variabile Dictionary è stata generata da JSON. Al "
+"contrario, gli array JSON mantengono l'ordine degli elementi:\n"
"[codeblock]\n"
"var p = JSON.parse('[\"hello\", \"world\", \"!\"]')\n"
"if typeof(p.result) == TYPE_ARRAY:\n"
@@ -1207,6 +1206,16 @@ msgid ""
"distinguishes them from print messages used for debugging purposes, while "
"also displaying a stack trace when an error or warning is printed."
msgstr ""
+"Converte uno o più argomenti di qualunque tipo in una striga e li stampa "
+"nella console.\n"
+"[codeblock]\n"
+"a = [1, 2, 3]\n"
+"print(\"a\", \"=\", a) # Stampa a=[1, 2, 3]\n"
+"[/codeblock]\n"
+"[b]Nota:[/b] Valuta l'utilizzo di [method push_error] e [method "
+"push_warning] per stampare messaggi di errore e di warning invece di "
+"utilizzare [method print]. Questa scelta permette di distinguerli dai "
+"messaggi di debug ed errore che vengono mostrati con la stack trace."
#: modules/gdscript/doc_classes/@GDScript.xml:702
msgid "Like [method print], but prints only when used in debug mode."
@@ -1215,7 +1224,6 @@ msgstr ""
"debug."
#: modules/gdscript/doc_classes/@GDScript.xml:708
-#, fuzzy
msgid ""
"Prints a stack track at code location, only works when running with debugger "
"turned on.\n"
@@ -1224,15 +1232,14 @@ msgid ""
"Frame 0 - res://test.gd:16 in function '_process'\n"
"[/codeblock]"
msgstr ""
-"Stampa un stack trace nella nel codice, funziona solo quando il debugger è "
-"acceso.\n"
+"Stampa un stack trace nella posizione del codice, funziona solo quando il "
+"debugger è attivato.\n"
"L'output nella console apparirà come:\n"
"[codeblock]\n"
"Frame 0 - res://test.gd:16 in function '_process'\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:718
-#, fuzzy
msgid ""
"Prints one or more arguments to strings in the best way possible to standard "
"error line.\n"
@@ -1241,7 +1248,7 @@ msgid ""
"[/codeblock]"
msgstr ""
"Stampa uno o più argomenti come stringhe nella migliore maniera possibile "
-"per standardizzare la linea dell'errore.\n"
+"sullo standard error.\n"
"[codeblock]\n"
"printerr(\"prints to stderr\")\n"
"[/codeblock]"
@@ -1298,7 +1305,6 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:758
-#, fuzzy
msgid ""
"Pushes an error message to Godot's built-in debugger and to the OS "
"terminal.\n"
@@ -1315,7 +1321,10 @@ msgstr ""
"[codeblock]\n"
"push_error(\"errore di prova\") # Stampa \"errore di prova\" al debugger e "
"al terminale con una error call\n"
-"[/codeblock]"
+"[/codeblock]\n"
+"[b]Nota:[/b] Questo tipo di stampa degli errori non interrompe l'esecuzione. "
+"Per stampare un messaggio d'errore e interrompere l'esecuzione nelle build "
+"di debug, è necessario adoperare [code]assert(false, \"test error\")[/code]."
#: modules/gdscript/doc_classes/@GDScript.xml:769
msgid ""
@@ -1347,7 +1356,6 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:790
-#, fuzzy
msgid ""
"Random range, any floating point value between [code]from[/code] and "
"[code]to[/code].\n"
@@ -1355,11 +1363,10 @@ msgid ""
"prints(rand_range(0, 1), rand_range(0, 1)) # Prints e.g. 0.135591 0.405263\n"
"[/codeblock]"
msgstr ""
-"Un range casuale, un qualsiasi numero con la virgola tra [code]from[/code] e "
-"[code]to[/code]\n"
+"Un range casuale, un qualsiasi numero in virgola mobile tra [code]from[/"
+"code] e [code]to[/code]\n"
"[codeblock]\n"
-"prints(rand_range(0, 1), rand_range(0, 1)) # Per esempio stampa 0.135591 "
-"0.405263\n"
+"prints(rand_range(0, 1), rand_range(0, 1)) # Stampa 0.135591 0.405263\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:800
@@ -1369,6 +1376,11 @@ msgid ""
"pseudo random number generator. The internal state of the current "
"implementation is 64 bits."
msgstr ""
+"Genera un numero pseudocasuale da un seed: fornendo un [code]seed[/code], "
+"viene restituito un array contenente sia il valore pseudocasuale generato "
+"che il nuovo sedd. Con \"Seed\" si intente un valore adoperato internamente "
+"dal generatore di valori pseudocasuali. La gestione di tale valore è a 64 "
+"bits."
#: modules/gdscript/doc_classes/@GDScript.xml:806
msgid ""
@@ -1377,6 +1389,11 @@ msgid ""
"randf() # Returns e.g. 0.375671\n"
"[/codeblock]"
msgstr ""
+"Restituisce un numero casuale in virgola mobile nell'intervallo [code][0, 1]"
+"[/code].\n"
+"[codeblock]\n"
+"randf() # Restituisce ad esempio 0.375671\n"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:815
msgid ""
@@ -1390,6 +1407,15 @@ msgid ""
"randi() % 100 + 1 # Returns random integer between 1 and 100\n"
"[/codeblock]"
msgstr ""
+"Restituisce un numero intero unsigned pseudocasuale di 32-bit. Adoperando "
+"l'operatore modulo/resto è possibile generare valori nell'intervallo [code]"
+"[0, N - 1][/code] (dove N è minore di 2^32).\n"
+"[codeblock]\n"
+"randi() # Restituisce un intero pseudocasuale tra 0 e 2^32 - 1\n"
+"randi() % 20 # Restituisce un intero pseudocasuale tra 0 e 19\n"
+"randi() % 100 # Restituisce un intero pseudocasuale tra 0 e 99\n"
+"randi() % 100 + 1 # Restituisce un intero pseudocasuale tra 1 e 100\n"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:827
msgid ""
@@ -1400,6 +1426,13 @@ msgid ""
" randomize()\n"
"[/codeblock]"
msgstr ""
+"Randomizza il seed (o lo stato interno) di un generatore di numeri "
+"pseudocasuali. L'implementazione attuale adopera un numero basato sul tempo "
+"per randomizzarlo nuovamente.\n"
+"[codeblock]\n"
+"func _ready():\n"
+" randomize()\n"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:837
msgid ""
@@ -1451,9 +1484,13 @@ msgid ""
"range_lerp(75, 0, 100, -1, 1) # Returns 0.5\n"
"[/codeblock]"
msgstr ""
+"Effettua una mappatura di un valore [code]value[/code] da un intervallo "
+"[code][istart, istop][/code] in [code][ostart, ostop][/code].\n"
+"[codeblock]\n"
+"range_lerp(75, 0, 100, -1, 1) # Restituisce 0.5\n"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:884
-#, fuzzy
msgid ""
"Rounds [code]s[/code] to the nearest whole number, with halfway cases "
"rounded away from zero.\n"
@@ -1467,8 +1504,11 @@ msgstr ""
"Arrotonda il risultato di [code]s[/code] al più vicino numero intero, e per "
"eccesso nei casi equidistanti.\n"
"[codeblock]\n"
-"round(2.6) # Ritorna 32\n"
-"[/codeblock]"
+"a = round(2.49) # a assume il valore 2.0\n"
+"a = round(2.5) # a assume il valore 3.0\n"
+"a = round(2.51) # a assume il valore 3.0\n"
+"[/codeblock]\n"
+"Consulta inoltre [method floor], [method ceil], [method stepify], e [int]."
#: modules/gdscript/doc_classes/@GDScript.xml:897
msgid ""
@@ -1478,6 +1518,11 @@ msgid ""
"seed(my_seed.hash())\n"
"[/codeblock]"
msgstr ""
+"Imposta il seed per il generatore di numeri casuali.\n"
+"[codeblock]\n"
+"my_seed = \"Godot Rocks\"\n"
+"seed(my_seed.hash())\n"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:908
msgid ""
@@ -1489,6 +1534,13 @@ msgid ""
"sign(6) # Returns 1\n"
"[/codeblock]"
msgstr ""
+"Restituisce il segno di un valore [code]s[/code]: -1 o 1 per indicare se il "
+"valore è < o > di 0 rispettivamente. Restituisce 0 se [code]s[/code] è 0.\n"
+"[codeblock]\n"
+"sign(-6) # Restituisce -1\n"
+"sign(0) # Restituisce 0\n"
+"sign(6) # Restituisce 1\n"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:920
msgid ""
@@ -1497,6 +1549,10 @@ msgid ""
"sin(0.523599) # Returns 0.5\n"
"[/codeblock]"
msgstr ""
+"Restituisce il seno dell'angolo [code]s[/code] in radianti.\n"
+"[codeblock]\n"
+"sin(0.523599) # Restituisce 0.5\n"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:930
msgid ""
@@ -1506,6 +1562,11 @@ msgid ""
"sinh(a) # Returns 0.75\n"
"[/codeblock]"
msgstr ""
+"Restituisce il seno iperbolico di [code]s[/code].\n"
+"[codeblock]\n"
+"a = log(2.0) # Restituisce 0.693147\n"
+"sinh(a) # Restituisce 0.75\n"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:943
msgid ""
@@ -1543,6 +1604,14 @@ msgid ""
"[b]Note:[/b] Negative values of [code]s[/code] return NaN. If you need "
"negative inputs, use [code]System.Numerics.Complex[/code] in C#."
msgstr ""
+"Restituisce la radice quadrata di [code]s[/code], dove [code]s[/code] è un "
+"numero non negativo.\n"
+"[codeblock]\n"
+"sqrt(9) # Restituisce 3\n"
+"[/codeblock]\n"
+"[b]Nota:[/b] Adoperando valori negativi [code]s[/code] viene restituito NaN. "
+"Se è necessario adoperare valori negativi è suggerito l'utilizzo di "
+"[code]System.Numerics.Complex[/code] in C#."
#: modules/gdscript/doc_classes/@GDScript.xml:971
msgid ""
@@ -1555,6 +1624,14 @@ msgid ""
"n = step_decimals(0.000000005) # n is 9\n"
"[/codeblock]"
msgstr ""
+"Restituisce la posizione della prima cifra diversa da zero dopo il "
+"separatore decimale. Il massimo valore restituito è 10, dovuto ad una scelta "
+"implementativa.\n"
+"[codeblock]\n"
+"n = step_decimals(5) # n è 0\n"
+"n = step_decimals(1.0005) # n è 4\n"
+"n = step_decimals(0.000000005) # n è 9\n"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:984
msgid ""
@@ -1597,6 +1674,13 @@ msgid ""
"print(b[\"a\"]) # Prints 1\n"
"[/codeblock]"
msgstr ""
+"Converte una stringa formattata restituita da [method var2str] nel valore "
+"originale.\n"
+"[codeblock]\n"
+"a = '{ \"a\": 1, \"b\": 2 }'\n"
+"b = str2var(a)\n"
+"print(b[\"a\"]) # Stampa 1\n"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:1020
msgid ""
@@ -1605,6 +1689,10 @@ msgid ""
"tan(deg2rad(45)) # Returns 1\n"
"[/codeblock]"
msgstr ""
+"Restituisce la tangente dell'angolo [code]s[/code] in radianti.\n"
+"[codeblock]\n"
+"tan(deg2rad(45)) # Restituisce 1\n"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:1030
#, fuzzy
@@ -1638,6 +1726,22 @@ msgid ""
"text will convert all numerical values to [float] types.\n"
"See also [JSON] for an alternative way to convert a [Variant] to JSON text."
msgstr ""
+"Converte una [Variant] [code]var[/code] in un testo in formato JSON e lo "
+"restituisce. È utile per serializzare dei dati per memorizzarli su un "
+"dispositivo o inviarli attraverso la rete.\n"
+"[codeblock]\n"
+"# Entrambi i numeri sono interi.\n"
+"a = { \"a\": 1, \"b\": 2 }\n"
+"b = to_json(a)\n"
+"print(b) # {\"a\":1, \"b\":2}\n"
+"# Entrambi i numeri sono float, anche se mostrati senza valore decimale.\n"
+"[/codeblock]\n"
+"[b]Nota:[/b] Le specifiche del formato JSON non fanno distinzione tra interi "
+"e float, ma descrivono solo un tipo numerico [i]number[/i]. Per tale motivo, "
+"convertire [Variant] in JSON effettuerà automaticamente la conversione dei "
+"valori da interi a [float].\n"
+"Consulta [JSON] per valutare le possibilità per effettuare la conversione di "
+"[Variant] in testo in formato JSON."
#: modules/gdscript/doc_classes/@GDScript.xml:1057
msgid ""
@@ -1647,6 +1751,12 @@ msgid ""
"type_exists(\"Variant\") # Returns false\n"
"[/codeblock]"
msgstr ""
+"Restituisce un booleano per confermare o no se una particolare classe è "
+"disponibile [ClassDB].\n"
+"[codeblock]\n"
+"type_exists(\"Sprite\") # Restituisce true\n"
+"type_exists(\"Variant\") # Restituisce false\n"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:1068
msgid ""
@@ -1674,6 +1784,16 @@ msgid ""
" push_error(\"Invalid JSON: \" + v)\n"
"[/codeblock]"
msgstr ""
+"Controlla che [code]json[/code] sia un dato JSON valido. Restituisce una "
+"stringa vuota in caso affermativo, un errore altrimenti.\n"
+"[codeblock]\n"
+"j = to_json([1, 2, 3])\n"
+"v = validate_json(j)\n"
+"if not v:\n"
+" print(\"Valid JSON.\")\n"
+"else:\n"
+" push_error(\"Invalid JSON: \" + v)\n"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:1098
msgid ""
@@ -1681,6 +1801,9 @@ msgid ""
"[code]true[/code] encoding objects is allowed (and can potentially include "
"code)."
msgstr ""
+"Converte una variabile in un array di byte. Quando il parametro "
+"[code]full_objects[/code] è [code]true[/code] è possibile convertire istanze "
+"di classi (incluso il codice presente)."
#: modules/gdscript/doc_classes/@GDScript.xml:1105
msgid ""
@@ -1698,6 +1821,19 @@ msgid ""
"}\n"
"[/codeblock]"
msgstr ""
+"Converte una Variant [code]var[/code] in una stringa formattata che può "
+"essere successivamente processata adoperando [method str2var].\n"
+"[codeblock]\n"
+"a = { \"a\": 1, \"b\": 2 }\n"
+"print(var2str(a))\n"
+"[/codeblock]\n"
+"prints\n"
+"[codeblock]\n"
+"{\n"
+"\"a\": 1,\n"
+"\"b\": 2\n"
+"}\n"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:1123
msgid ""
@@ -1708,6 +1844,12 @@ msgid ""
"something else. However, until the object is actually destroyed the weak "
"reference may return the object even if there are no strong references to it."
msgstr ""
+"Restituisce un riferimento debole/weak ad un oggetto.\n"
+"Un riferimento debole/weak non è sufficiente per mantenerlo in vita: se è "
+"l'unico riferimento rimasto il garbage collector è autorizzato a deallocarlo "
+"in un qualunque momento. Comunque, finché non sarà deallocato, tale "
+"riferimento consentirà di adoperare l'oggetto anche se non fossero presenti "
+"riferimenti forti/strong ad esso."
#: modules/gdscript/doc_classes/@GDScript.xml:1133
msgid ""
@@ -1750,6 +1892,22 @@ msgid ""
"[code]wrapi[/code] is more flexible than using the [method posmod] approach "
"by giving the user control over the minimum value."
msgstr ""
+"Limita un valore intero [code]value[/code] tra [code]min[/code] e [code]max[/"
+"code].\n"
+"È utilizzabile per creare comportamenti in loop o superfici infinite.\n"
+"[codeblock]\n"
+"# Ciclo infinito tra 5 e 9\n"
+"frame = wrapi(frame + 1, 5, 10)\n"
+"[/codeblock]\n"
+"[codeblock]\n"
+"# Viene restituito -2\n"
+"var result = wrapi(-6, -5, -1)\n"
+"[/codeblock]\n"
+"[b]Nota:[/b] Se [code]min[/code] è [code]0[/code], è equivalente ad "
+"utilizzare [method posmod], in tal caso si suggerisce di adoperare "
+"quest'ultimo.\n"
+"[code]wrapi[/code] è più utile rispetto a [method posmod] quando è "
+"necessario impostare anche il valore minimo."
#: modules/gdscript/doc_classes/@GDScript.xml:1176
msgid ""
@@ -1795,18 +1953,62 @@ msgid ""
"[code]GDScriptFunctionState[/code]. Notice [code]yield(get_tree(), "
"\"idle_frame\")[/code] from the above example."
msgstr ""
+"Interrompe l'esecuzione della funzione e ne restituisce lo stato attuale.\n"
+"Basta invocare [method GDScriptFunctionState.resume] su tale stato per far "
+"riprendere l'esecuzione. Questa operazione invalida lo stato. All'interno "
+"della funzione [code]yield()[/code] restituisce cosa è stato passato alla "
+"funzione [code]resume()[/code] .\n"
+"Il ripristino della funzione, quando viene passato un oggetto e un segnale, "
+"avviene quando l'oggetto invia tale segnale. In tal caso, [code]yield()[/"
+"code] restituisce il valore passato a [code]emit_signal()[/code] se il "
+"segnale accetta un solo un parametro, oppure un array di tutti i parametri "
+"passati a [code]emit_signal()[/code].\n"
+"You can also use [code]yield[/code] to wait for a function to finish:\n"
+"[codeblock]\n"
+"func _ready():\n"
+" yield(countdown(), \"completed\") # attendi che countdown() termini\n"
+" print('Ready')\n"
+"\n"
+"func countdown():\n"
+" yield(get_tree(), \"idle_frame\") # restituisce un GDScriptFunctionState "
+"object to _ready()\n"
+" print(3)\n"
+" yield(get_tree().create_timer(1.0), \"timeout\")\n"
+" print(2)\n"
+" yield(get_tree().create_timer(1.0), \"timeout\")\n"
+" print(1)\n"
+" yield(get_tree().create_timer(1.0), \"timeout\")\n"
+"\n"
+"# Stampa:\n"
+"# 3\n"
+"# 2\n"
+"# 1\n"
+"# Ready\n"
+"[/codeblock]\n"
+"Quando si utilizza yield su una funzione viene emesso il segnale "
+"[code]completed[/code] automaticamente quanto la funzione termina. Può "
+"essere inoltre adoperata come parametro [code]signal[/code] del metodo "
+"[code]yield[/code] per ripristinarne lo stato.\n"
+"Per adoperare yield su una funzione, è necessario che questa restituisca un "
+"[code]GDScriptFunctionState[/code]. Nota tale comportamento relativamente "
+"alla riga di codice [code]yield(get_tree(), \"idle_frame\")[/code] ."
#: modules/gdscript/doc_classes/@GDScript.xml:1207
msgid ""
"Constant that represents how many times the diameter of a circle fits around "
"its perimeter. This is equivalent to [code]TAU / 2[/code]."
msgstr ""
+"Constante che indica il rapporto tra diametro del cerchio e perimetro. This "
+"is equivalent to [code]TAU / 2[/code]."
#: modules/gdscript/doc_classes/@GDScript.xml:1210
msgid ""
"The circle constant, the circumference of the unit circle in radians. This "
"is equivalent to [code]PI * 2[/code], or 360 degrees in rotations."
msgstr ""
+"Lunghezza della circonferenza del cerchio di raggio unitario in radianti "
+"(Circonferenza = Pi * diametro). È equivalente a [code]PI * 2[/code], "
+"equivalente a 360°."
#: modules/gdscript/doc_classes/@GDScript.xml:1213
msgid ""
@@ -1834,6 +2036,15 @@ msgid ""
"[code]0[/code] will not result in [constant NAN] and will result in a run-"
"time error instead."
msgstr ""
+"\"Not a Number\", indica un valore in virgola mobile non valido. [constant "
+"NAN] ha proprietà particolari, ad esempio non è uguale a se stesso "
+"([code]NAN == NAN[/code] restituisce [code]false[/code]). E restituito in "
+"caso di operazioni non valide, come ad la una divisione del numero in "
+"virgola mobile [code]0.0[/code] per [code]0.0[/code].\n"
+"[b]Nota:[/b] \"Not a Number\" è correlato solo ad operazioni su numeri con "
+"virgola mobile, non ha quindi un corrispettivo per gli interi. La divisione "
+"dell'intero [code]0[/code] per [code]0[/code] non produrrà un [constant NAN] "
+"ma genererà un errore run-time."
#: doc/classes/@GlobalScope.xml:4
msgid "Global scope constants and variables."
@@ -1849,136 +2060,148 @@ msgstr ""
#: doc/classes/@GlobalScope.xml:16
msgid "The [ARVRServer] singleton."
-msgstr ""
+msgstr "Il singleton [ARVRServer]."
#: doc/classes/@GlobalScope.xml:19
msgid "The [AudioServer] singleton."
-msgstr ""
+msgstr "Il singleton [AudioServer]."
#: doc/classes/@GlobalScope.xml:22
msgid "The [CameraServer] singleton."
-msgstr ""
+msgstr "Il singleton [CameraServer]."
#: doc/classes/@GlobalScope.xml:25
msgid "The [ClassDB] singleton."
-msgstr ""
+msgstr "Il singleton [ClassDB]."
#: doc/classes/@GlobalScope.xml:28
msgid "The [Engine] singleton."
-msgstr ""
+msgstr "Il singleton [Engine]."
#: doc/classes/@GlobalScope.xml:31
msgid "The [Geometry] singleton."
-msgstr ""
+msgstr "Il singleton [Geometry]."
#: doc/classes/@GlobalScope.xml:34
msgid "The [IP] singleton."
-msgstr ""
+msgstr "Il singleton [IP]."
#: doc/classes/@GlobalScope.xml:37
msgid "The [Input] singleton."
-msgstr ""
+msgstr "Il singleton [Input]."
#: doc/classes/@GlobalScope.xml:40
msgid "The [InputMap] singleton."
-msgstr ""
+msgstr "Il singleton [InputMap]."
#: doc/classes/@GlobalScope.xml:43
msgid "The [JSON] singleton."
-msgstr ""
+msgstr "Il singleton [JSON]."
#: doc/classes/@GlobalScope.xml:46
msgid ""
"The [JavaClassWrapper] singleton.\n"
"[b]Note:[/b] Only implemented on Android."
msgstr ""
+"Il singleton [JavaClassWrapper].\n"
+"[b]Note:[/b] Disponibile solo per Android."
#: doc/classes/@GlobalScope.xml:50
msgid ""
"The [JavaScript] singleton.\n"
"[b]Note:[/b] Only implemented on HTML5."
msgstr ""
+"Il singleton [JavaScript].\n"
+"[b]Note:[/b] Disponibile solo per HTML5."
#: doc/classes/@GlobalScope.xml:54
msgid "The [Marshalls] singleton."
-msgstr ""
+msgstr "Il singleton [Marshalls]."
#: doc/classes/@GlobalScope.xml:57
msgid "The [EditorNavigationMeshGenerator] singleton."
-msgstr ""
+msgstr "Il singleton [EditorNavigationMeshGenerator]."
#: doc/classes/@GlobalScope.xml:60
msgid "The [OS] singleton."
-msgstr ""
+msgstr "Il singleton [OS]."
#: doc/classes/@GlobalScope.xml:63
msgid "The [Performance] singleton."
-msgstr ""
+msgstr "Il singleton [Performance]."
#: doc/classes/@GlobalScope.xml:66
msgid "The [Physics2DServer] singleton."
-msgstr ""
+msgstr "Il singleton [Physics2DServer]."
#: doc/classes/@GlobalScope.xml:69
msgid "The [PhysicsServer] singleton."
-msgstr ""
+msgstr "Il singleton [PhysicsServer]."
#: doc/classes/@GlobalScope.xml:72
msgid "The [ProjectSettings] singleton."
-msgstr ""
+msgstr "Il singleton [ProjectSettings]."
#: doc/classes/@GlobalScope.xml:75
msgid "The [ResourceLoader] singleton."
-msgstr ""
+msgstr "Il singleton [ResourceLoader]."
#: doc/classes/@GlobalScope.xml:78
msgid "The [ResourceSaver] singleton."
-msgstr ""
+msgstr "Il singleton [ResourceSaver]."
#: doc/classes/@GlobalScope.xml:81
msgid "The [TranslationServer] singleton."
-msgstr ""
+msgstr "Il singleton [TranslationServer]."
#: doc/classes/@GlobalScope.xml:84
msgid "The [VisualScriptEditor] singleton."
-msgstr ""
+msgstr "Il singleton [VisualScriptEditor]."
#: doc/classes/@GlobalScope.xml:87
msgid "The [VisualServer] singleton."
-msgstr ""
+msgstr "Il singleton [VisualServer]."
#: doc/classes/@GlobalScope.xml:92
msgid "Left margin, usually used for [Control] or [StyleBox]-derived classes."
msgstr ""
+"Margine sinistro, generalmente adoperato nelle classi figlie di [Control] "
+"oppure [StyleBox]."
#: doc/classes/@GlobalScope.xml:95
msgid "Top margin, usually used for [Control] or [StyleBox]-derived classes."
msgstr ""
+"Margine superiore, generalmente adoperato nelle classi figlie di [Control] o "
+"[StyleBox]."
#: doc/classes/@GlobalScope.xml:98
msgid "Right margin, usually used for [Control] or [StyleBox]-derived classes."
msgstr ""
+"Margine destro, generalmente adoperato nelle classi figlie di [Control] o "
+"[StyleBox]."
#: doc/classes/@GlobalScope.xml:101
msgid ""
"Bottom margin, usually used for [Control] or [StyleBox]-derived classes."
msgstr ""
+"Margine inferiore, generalmente adoperato nelle classi figlie di [Control] o "
+"[StyleBox]."
#: doc/classes/@GlobalScope.xml:104
msgid "Top-left corner."
-msgstr ""
+msgstr "Angolo superiore-sinistro."
#: doc/classes/@GlobalScope.xml:107
msgid "Top-right corner."
-msgstr ""
+msgstr "Angolo superiore-destro."
#: doc/classes/@GlobalScope.xml:110
msgid "Bottom-right corner."
-msgstr ""
+msgstr "Angolo inferiore-destro."
#: doc/classes/@GlobalScope.xml:113
msgid "Bottom-left corner."
-msgstr ""
+msgstr "Angolo inferiore-sinistro."
#: doc/classes/@GlobalScope.xml:116
msgid ""
@@ -2022,43 +2245,43 @@ msgstr ""
#: doc/classes/@GlobalScope.xml:143
msgid "Escape key."
-msgstr ""
+msgstr "Tasto ESC/Escape."
#: doc/classes/@GlobalScope.xml:146
msgid "Tab key."
-msgstr ""
+msgstr "Tasto TAB/Tabulazione."
#: doc/classes/@GlobalScope.xml:149
msgid "Shift+Tab key."
-msgstr ""
+msgstr "Tasto SHIFT+TAB."
#: doc/classes/@GlobalScope.xml:152
msgid "Backspace key."
-msgstr ""
+msgstr "Tasto backspace."
#: doc/classes/@GlobalScope.xml:155
msgid "Return key (on the main keyboard)."
-msgstr ""
+msgstr "Tasto return/invio (sulla tastiera principale)."
#: doc/classes/@GlobalScope.xml:158
msgid "Enter key on the numeric keypad."
-msgstr ""
+msgstr "Tasto return/enter sul tastierino numerico."
#: doc/classes/@GlobalScope.xml:161
msgid "Insert key."
-msgstr ""
+msgstr "Tasto INS/inserisci."
#: doc/classes/@GlobalScope.xml:164
msgid "Delete key."
-msgstr ""
+msgstr "Tasto DEL/Canc."
#: doc/classes/@GlobalScope.xml:167
msgid "Pause key."
-msgstr ""
+msgstr "Tasto Pausa/Pause."
#: doc/classes/@GlobalScope.xml:170
msgid "Print Screen key."
-msgstr ""
+msgstr "Tasto Stamp/Print Screen."
#: doc/classes/@GlobalScope.xml:173
msgid "System Request key."
@@ -2066,63 +2289,63 @@ msgstr ""
#: doc/classes/@GlobalScope.xml:176
msgid "Clear key."
-msgstr ""
+msgstr "Tasto Clear/Delete/Del."
#: doc/classes/@GlobalScope.xml:179
msgid "Home key."
-msgstr ""
+msgstr "Tasto Home/Inizio."
#: doc/classes/@GlobalScope.xml:182
msgid "End key."
-msgstr ""
+msgstr "Tasto End/Fine."
#: doc/classes/@GlobalScope.xml:185
msgid "Left arrow key."
-msgstr ""
+msgstr "Freccia cursore a sinistra."
#: doc/classes/@GlobalScope.xml:188
msgid "Up arrow key."
-msgstr ""
+msgstr "Freccia cursore alta."
#: doc/classes/@GlobalScope.xml:191
msgid "Right arrow key."
-msgstr ""
+msgstr "Freccia cursore destra."
#: doc/classes/@GlobalScope.xml:194
msgid "Down arrow key."
-msgstr ""
+msgstr "Freccia cursore in basso."
#: doc/classes/@GlobalScope.xml:197
msgid "Page Up key."
-msgstr ""
+msgstr "Tasto Page Up/Page ^."
#: doc/classes/@GlobalScope.xml:200
msgid "Page Down key."
-msgstr ""
+msgstr "Tasto Page Up/Page v."
#: doc/classes/@GlobalScope.xml:203
msgid "Shift key."
-msgstr ""
+msgstr "Tasto Shift/Maiuscola."
#: doc/classes/@GlobalScope.xml:206
msgid "Control key."
-msgstr ""
+msgstr "Tasto Control/CTRL."
#: doc/classes/@GlobalScope.xml:209
msgid "Meta key."
-msgstr ""
+msgstr "Tasto Meta/Command."
#: doc/classes/@GlobalScope.xml:212
msgid "Alt key."
-msgstr ""
+msgstr "Tasto Alt."
#: doc/classes/@GlobalScope.xml:215
msgid "Caps Lock key."
-msgstr ""
+msgstr "Tasto Caps Lock/Blocco maiuscole."
#: doc/classes/@GlobalScope.xml:218
msgid "Num Lock key."
-msgstr ""
+msgstr "Tasto Num Lock/Bloc num."
#: doc/classes/@GlobalScope.xml:221
msgid "Scroll Lock key."
@@ -2130,135 +2353,135 @@ msgstr ""
#: doc/classes/@GlobalScope.xml:224
msgid "F1 key."
-msgstr ""
+msgstr "Tasto F1."
#: doc/classes/@GlobalScope.xml:227
msgid "F2 key."
-msgstr ""
+msgstr "Tasto F2."
#: doc/classes/@GlobalScope.xml:230
msgid "F3 key."
-msgstr ""
+msgstr "Tasto F3."
#: doc/classes/@GlobalScope.xml:233
msgid "F4 key."
-msgstr ""
+msgstr "Tasto F4."
#: doc/classes/@GlobalScope.xml:236
msgid "F5 key."
-msgstr ""
+msgstr "Tasto F5."
#: doc/classes/@GlobalScope.xml:239
msgid "F6 key."
-msgstr ""
+msgstr "Tasto F6."
#: doc/classes/@GlobalScope.xml:242
msgid "F7 key."
-msgstr ""
+msgstr "Tasto F7."
#: doc/classes/@GlobalScope.xml:245
msgid "F8 key."
-msgstr ""
+msgstr "Tasto F8."
#: doc/classes/@GlobalScope.xml:248
msgid "F9 key."
-msgstr ""
+msgstr "Tasto F9."
#: doc/classes/@GlobalScope.xml:251
msgid "F10 key."
-msgstr ""
+msgstr "Tasto F10."
#: doc/classes/@GlobalScope.xml:254
msgid "F11 key."
-msgstr ""
+msgstr "Tasto F11."
#: doc/classes/@GlobalScope.xml:257
msgid "F12 key."
-msgstr ""
+msgstr "Tasto F12."
#: doc/classes/@GlobalScope.xml:260
msgid "F13 key."
-msgstr ""
+msgstr "Tasto F13."
#: doc/classes/@GlobalScope.xml:263
msgid "F14 key."
-msgstr ""
+msgstr "Tasto F14."
#: doc/classes/@GlobalScope.xml:266
msgid "F15 key."
-msgstr ""
+msgstr "Tasto F15."
#: doc/classes/@GlobalScope.xml:269
msgid "F16 key."
-msgstr ""
+msgstr "Tasto F16."
#: doc/classes/@GlobalScope.xml:272
msgid "Multiply (*) key on the numeric keypad."
-msgstr ""
+msgstr "Tasto */ Moltiplica sul tastierino numerico."
#: doc/classes/@GlobalScope.xml:275
msgid "Divide (/) key on the numeric keypad."
-msgstr ""
+msgstr "Tasto '/' / divisione sul tastierino numerico."
#: doc/classes/@GlobalScope.xml:278
msgid "Subtract (-) key on the numeric keypad."
-msgstr ""
+msgstr "Tasto - / Sottrazione sul tastierino numerico."
#: doc/classes/@GlobalScope.xml:281
msgid "Period (.) key on the numeric keypad."
-msgstr ""
+msgstr "Tasto . sul tastierino numerico."
#: doc/classes/@GlobalScope.xml:284
msgid "Add (+) key on the numeric keypad."
-msgstr ""
+msgstr "Tasto +/ Somma sul tastierino numerico."
#: doc/classes/@GlobalScope.xml:287
msgid "Number 0 on the numeric keypad."
-msgstr ""
+msgstr "Numero 0 sul tastierino numerico."
#: doc/classes/@GlobalScope.xml:290
msgid "Number 1 on the numeric keypad."
-msgstr ""
+msgstr "Numero 1 sul tastierino numerico."
#: doc/classes/@GlobalScope.xml:293
msgid "Number 2 on the numeric keypad."
-msgstr ""
+msgstr "Numero 2 sul tastierino numerico."
#: doc/classes/@GlobalScope.xml:296
msgid "Number 3 on the numeric keypad."
-msgstr ""
+msgstr "Numero 3 sul tastierino numerico."
#: doc/classes/@GlobalScope.xml:299
msgid "Number 4 on the numeric keypad."
-msgstr ""
+msgstr "Numero 4 sul tastierino numerico."
#: doc/classes/@GlobalScope.xml:302
msgid "Number 5 on the numeric keypad."
-msgstr ""
+msgstr "Numero 5 sul tastierino numerico."
#: doc/classes/@GlobalScope.xml:305
msgid "Number 6 on the numeric keypad."
-msgstr ""
+msgstr "Numero 6 sul tastierino numerico."
#: doc/classes/@GlobalScope.xml:308
msgid "Number 7 on the numeric keypad."
-msgstr ""
+msgstr "Numero 7 sul tastierino numerico."
#: doc/classes/@GlobalScope.xml:311
msgid "Number 8 on the numeric keypad."
-msgstr ""
+msgstr "Numero 8 sul tastierino numerico."
#: doc/classes/@GlobalScope.xml:314
msgid "Number 9 on the numeric keypad."
-msgstr ""
+msgstr "Numero 9 sul tastierino numerico."
#: doc/classes/@GlobalScope.xml:317
msgid "Left Super key (Windows key)."
-msgstr ""
+msgstr "Tasto 'Windows' sinistro."
#: doc/classes/@GlobalScope.xml:320
msgid "Right Super key (Windows key)."
-msgstr ""
+msgstr "Tasto 'Windows' destro."
#: doc/classes/@GlobalScope.xml:323
msgid "Context menu key."
@@ -4137,112 +4360,121 @@ msgid ""
msgstr ""
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr ""
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
msgstr ""
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
msgstr ""
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
msgstr ""
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr ""
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr ""
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr ""
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
msgstr ""
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr ""
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
msgstr ""
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
msgstr ""
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr ""
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
"positive.\n"
@@ -5321,7 +5553,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -6767,21 +6999,25 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
#: doc/classes/Area.xml:17
msgid ""
-"Returns a list of intersecting [Area]s. For performance reasons (collisions "
-"are all processed at the same time) this list is modified once during the "
-"physics step, not immediately after objects are moved. Consider using "
-"signals instead."
+"Returns a list of intersecting [Area]s. The overlapping area's [member "
+"CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:23
+#: doc/classes/Area.xml:24
msgid ""
-"Returns a list of intersecting [PhysicsBody]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody]s. The overlapping body's "
+"[member CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:30
+#: doc/classes/Area.xml:32
msgid ""
"If [code]true[/code], the given area overlaps the Area.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6789,7 +7025,7 @@ msgid ""
"physics step. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:38
+#: doc/classes/Area.xml:40
msgid ""
"If [code]true[/code], the given physics body overlaps the Area.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6800,7 +7036,7 @@ msgid ""
"their tiles with collision shapes as a virtual physics body)."
msgstr ""
-#: doc/classes/Area.xml:46
+#: doc/classes/Area.xml:48
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
"velocity lost per second.\n"
@@ -6808,41 +7044,41 @@ msgid ""
"details about damping."
msgstr ""
-#: doc/classes/Area.xml:50 doc/classes/Area2D.xml:52
+#: doc/classes/Area.xml:52 doc/classes/Area2D.xml:54
msgid "The name of the area's audio bus."
msgstr ""
-#: doc/classes/Area.xml:53 doc/classes/Area2D.xml:55
+#: doc/classes/Area.xml:55 doc/classes/Area2D.xml:57
msgid ""
"If [code]true[/code], the area's audio bus overrides the default audio bus."
msgstr ""
-#: doc/classes/Area.xml:56
+#: doc/classes/Area.xml:58
msgid ""
"The area's gravity intensity (in meters per second squared). This value "
"multiplies the gravity vector. This is useful to alter the force of gravity "
"without altering its direction."
msgstr ""
-#: doc/classes/Area.xml:59 doc/classes/Area2D.xml:61
+#: doc/classes/Area.xml:61 doc/classes/Area2D.xml:63
msgid ""
"The falloff factor for point gravity. The greater the value, the faster "
"gravity decreases with distance."
msgstr ""
-#: doc/classes/Area.xml:62 doc/classes/Area2D.xml:64
+#: doc/classes/Area.xml:64 doc/classes/Area2D.xml:66
msgid ""
"If [code]true[/code], gravity is calculated from a point (set via [member "
"gravity_vec]). See also [member space_override]."
msgstr ""
-#: doc/classes/Area.xml:65 doc/classes/Area2D.xml:67
+#: doc/classes/Area.xml:67 doc/classes/Area2D.xml:69
msgid ""
"The area's gravity vector (not normalized). If gravity is a point (see "
"[member gravity_point]), this will be the point of attraction."
msgstr ""
-#: doc/classes/Area.xml:68
+#: doc/classes/Area.xml:70
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
"velocity lost per second.\n"
@@ -6850,61 +7086,61 @@ msgid ""
"about damping."
msgstr ""
-#: doc/classes/Area.xml:72 doc/classes/Area2D.xml:74
+#: doc/classes/Area.xml:74 doc/classes/Area2D.xml:76
msgid "If [code]true[/code], other monitoring areas can detect this area."
msgstr ""
-#: doc/classes/Area.xml:75 doc/classes/Area2D.xml:77
+#: doc/classes/Area.xml:77 doc/classes/Area2D.xml:79
msgid ""
"If [code]true[/code], the area detects bodies or areas entering and exiting "
"it."
msgstr ""
-#: doc/classes/Area.xml:78 doc/classes/Area2D.xml:80
+#: doc/classes/Area.xml:80 doc/classes/Area2D.xml:82
msgid "The area's priority. Higher priority areas are processed first."
msgstr ""
-#: doc/classes/Area.xml:81
+#: doc/classes/Area.xml:83
msgid ""
"The degree to which this area applies reverb to its associated audio. Ranges "
"from [code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
msgstr ""
-#: doc/classes/Area.xml:84
+#: doc/classes/Area.xml:86
msgid "If [code]true[/code], the area applies reverb to its associated audio."
msgstr ""
-#: doc/classes/Area.xml:87
+#: doc/classes/Area.xml:89
msgid "The reverb bus name to use for this area's associated audio."
msgstr ""
-#: doc/classes/Area.xml:90
+#: doc/classes/Area.xml:92
msgid ""
"The degree to which this area's reverb is a uniform effect. Ranges from "
"[code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
msgstr ""
-#: doc/classes/Area.xml:93 doc/classes/Area2D.xml:83
+#: doc/classes/Area.xml:95 doc/classes/Area2D.xml:85
msgid ""
"Override mode for gravity and damping calculations within this area. See "
"[enum SpaceOverride] for possible values."
msgstr ""
-#: doc/classes/Area.xml:100
+#: doc/classes/Area.xml:102
msgid ""
"Emitted when another Area enters this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
-#: doc/classes/Area.xml:107
+#: doc/classes/Area.xml:109
msgid ""
"Emitted when another Area exits this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
-#: doc/classes/Area.xml:117 doc/classes/Area.xml:130
+#: doc/classes/Area.xml:119 doc/classes/Area.xml:132
msgid ""
"Emitted when one of another Area's [Shape]s enters one of this Area's "
"[Shape]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6919,7 +7155,7 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:140
+#: doc/classes/Area.xml:142
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] enters this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -6928,7 +7164,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:147
+#: doc/classes/Area.xml:149
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] exits this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -6937,7 +7173,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:157 doc/classes/Area.xml:170
+#: doc/classes/Area.xml:159 doc/classes/Area.xml:172
msgid ""
"Emitted when one of a [PhysicsBody] or [GridMap]'s [Shape]s enters one of "
"this Area's [Shape]s. Requires [member monitoring] to be set to [code]true[/"
@@ -6954,29 +7190,29 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:180 doc/classes/Area2D.xml:170
+#: doc/classes/Area.xml:182 doc/classes/Area2D.xml:172
msgid "This area does not affect gravity/damping."
msgstr ""
-#: doc/classes/Area.xml:183 doc/classes/Area2D.xml:173
+#: doc/classes/Area.xml:185 doc/classes/Area2D.xml:175
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order)."
msgstr ""
-#: doc/classes/Area.xml:186 doc/classes/Area2D.xml:176
+#: doc/classes/Area.xml:188 doc/classes/Area2D.xml:178
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order), ignoring any lower priority areas."
msgstr ""
-#: doc/classes/Area.xml:189 doc/classes/Area2D.xml:179
+#: doc/classes/Area.xml:191 doc/classes/Area2D.xml:181
msgid ""
"This area replaces any gravity/damping, even the defaults, ignoring any "
"lower priority areas."
msgstr ""
-#: doc/classes/Area.xml:192 doc/classes/Area2D.xml:182
+#: doc/classes/Area.xml:194 doc/classes/Area2D.xml:184
msgid ""
"This area replaces any gravity/damping calculated so far (in [member "
"priority] order), but keeps calculating the rest of the areas."
@@ -7015,21 +7251,25 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
#: doc/classes/Area2D.xml:19
msgid ""
-"Returns a list of intersecting [Area2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [Area2D]s. The overlapping area's [member "
+"CollisionObject2D.collision_layer] must be part of this area's [member "
+"CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:25
+#: doc/classes/Area2D.xml:26
msgid ""
-"Returns a list of intersecting [PhysicsBody2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody2D]s. The overlapping body's "
+"[member CollisionObject2D.collision_layer] must be part of this area's "
+"[member CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:32
+#: doc/classes/Area2D.xml:34
msgid ""
"If [code]true[/code], the given area overlaps the Area2D.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -7037,7 +7277,7 @@ msgid ""
"the physics step. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:40
+#: doc/classes/Area2D.xml:42
msgid ""
"If [code]true[/code], the given physics body overlaps the Area2D.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -7048,7 +7288,7 @@ msgid ""
"register their tiles with collision shapes as a virtual physics body)."
msgstr ""
-#: doc/classes/Area2D.xml:48
+#: doc/classes/Area2D.xml:50
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
"velocity lost per second.\n"
@@ -7056,14 +7296,14 @@ msgid ""
"details about damping."
msgstr ""
-#: doc/classes/Area2D.xml:58
+#: doc/classes/Area2D.xml:60
msgid ""
"The area's gravity intensity (in pixels per second squared). This value "
"multiplies the gravity vector. This is useful to alter the force of gravity "
"without altering its direction."
msgstr ""
-#: doc/classes/Area2D.xml:70
+#: doc/classes/Area2D.xml:72
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
"velocity lost per second.\n"
@@ -7071,21 +7311,21 @@ msgid ""
"about damping."
msgstr ""
-#: doc/classes/Area2D.xml:90
+#: doc/classes/Area2D.xml:92
msgid ""
"Emitted when another Area2D enters this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-#: doc/classes/Area2D.xml:97
+#: doc/classes/Area2D.xml:99
msgid ""
"Emitted when another Area2D exits this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-#: doc/classes/Area2D.xml:107
+#: doc/classes/Area2D.xml:109
msgid ""
"Emitted when one of another Area2D's [Shape2D]s enters one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -7100,7 +7340,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:120
+#: doc/classes/Area2D.xml:122
msgid ""
"Emitted when one of another Area2D's [Shape2D]s exits one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -7115,7 +7355,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:130
+#: doc/classes/Area2D.xml:132
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] enters this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -7124,7 +7364,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:137
+#: doc/classes/Area2D.xml:139
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] exits this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -7133,7 +7373,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:147
+#: doc/classes/Area2D.xml:149
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s enters one "
"of this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -7152,7 +7392,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:160
+#: doc/classes/Area2D.xml:162
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s exits one of "
"this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -10732,42 +10972,47 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
-"no save path is provided it will try to match the path from the current "
+"no root node is provided, parent of this node will be used as root instead. "
+"If no save path is provided it will try to match the path from the current "
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -10781,62 +11026,62 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
msgid "The rotation of the baked custom sky."
msgstr ""
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -10844,35 +11089,35 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -10880,13 +11125,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -10898,66 +11143,78 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr ""
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
msgid "Baking was successful."
msgstr ""
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr ""
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
#, fuzzy
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr "Restituisce l'arco-tangente dei parametri."
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr ""
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:133
+#: doc/classes/BakedLightmap.xml:132
+msgid ""
+"Returns if lightmapper can't be created. Unless you are using a custom "
+"lightmapper, please report this as bug."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:135
+msgid ""
+"There is no root node to start baking from. Either provide [code]from_node[/"
+"code] argument or attach this node to a parent that should be used as root."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:136
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:139
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:142
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -11413,8 +11670,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -11802,26 +12062,33 @@ msgid "Text [Color] used when the [Button] is disabled."
msgstr ""
#: doc/classes/Button.xml:77
-msgid "Text [Color] used when the [Button] is being hovered."
+msgid ""
+"Text [Color] used when the [Button] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/Button.xml:80
-msgid "Text [Color] used when the [Button] is being pressed."
+msgid "Text [Color] used when the [Button] is being hovered."
msgstr ""
#: doc/classes/Button.xml:83
-msgid "[StyleBox] used when the [Button] is being hovered."
+msgid "Text [Color] used when the [Button] is being pressed."
msgstr ""
#: doc/classes/Button.xml:86
-msgid "The horizontal space between [Button]'s icon and text."
+msgid "[StyleBox] used when the [Button] is being hovered."
msgstr ""
#: doc/classes/Button.xml:89
-msgid "Default [StyleBox] for the [Button]."
+msgid "The horizontal space between [Button]'s icon and text."
msgstr ""
#: doc/classes/Button.xml:92
+msgid "Default [StyleBox] for the [Button]."
+msgstr ""
+
+#: doc/classes/Button.xml:95
msgid "[StyleBox] used when the [Button] is being pressed."
msgstr ""
@@ -13295,80 +13562,96 @@ msgstr ""
msgid "The check icon to display when the [CheckBox] is checked."
msgstr ""
-#: doc/classes/CheckBox.xml:30
+#: doc/classes/CheckBox.xml:28
+msgid "The check icon to display when the [CheckBox] is checked and disabled."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:31
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is disabled."
msgstr ""
-#: doc/classes/CheckBox.xml:33
+#: doc/classes/CheckBox.xml:34
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is focused."
msgstr ""
-#: doc/classes/CheckBox.xml:36
+#: doc/classes/CheckBox.xml:37
msgid "The [Font] to use for the [CheckBox] text."
msgstr ""
-#: doc/classes/CheckBox.xml:39
+#: doc/classes/CheckBox.xml:40
msgid "The [CheckBox] text's font color."
msgstr ""
-#: doc/classes/CheckBox.xml:42
+#: doc/classes/CheckBox.xml:43
msgid "The [CheckBox] text's font color when it's disabled."
msgstr ""
-#: doc/classes/CheckBox.xml:45
+#: doc/classes/CheckBox.xml:46
+msgid ""
+"The [CheckBox] text's font color when it's focused. Only replaces the normal "
+"text color of the checkbox. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:49
msgid "The [CheckBox] text's font color when it's hovered."
msgstr ""
-#: doc/classes/CheckBox.xml:48
+#: doc/classes/CheckBox.xml:52
msgid "The [CheckBox] text's font color when it's hovered and pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:51
+#: doc/classes/CheckBox.xml:55
msgid "The [CheckBox] text's font color when it's pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:54
+#: doc/classes/CheckBox.xml:58
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered."
msgstr ""
-#: doc/classes/CheckBox.xml:57
+#: doc/classes/CheckBox.xml:61
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered and "
"pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:60
+#: doc/classes/CheckBox.xml:64
msgid "The separation between the check icon and the text (in pixels)."
msgstr ""
-#: doc/classes/CheckBox.xml:63 doc/classes/CheckButton.xml:58
+#: doc/classes/CheckBox.xml:67 doc/classes/CheckButton.xml:61
msgid "The [StyleBox] to display as a background."
msgstr ""
-#: doc/classes/CheckBox.xml:66
+#: doc/classes/CheckBox.xml:70
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:69
+#: doc/classes/CheckBox.xml:73
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is checked."
msgstr ""
-#: doc/classes/CheckBox.xml:74
+#: doc/classes/CheckBox.xml:78
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is unchecked."
msgstr ""
-#: doc/classes/CheckBox.xml:79
+#: doc/classes/CheckBox.xml:83
msgid "The check icon to display when the [CheckBox] is unchecked."
msgstr ""
+#: doc/classes/CheckBox.xml:86
+msgid ""
+"The check icon to display when the [CheckBox] is unchecked and disabled."
+msgstr ""
+
#: doc/classes/CheckButton.xml:4
msgid "Checkable button. See also [CheckBox]."
msgstr ""
@@ -13412,49 +13695,56 @@ msgid "The [CheckButton] text's font color when it's disabled."
msgstr ""
#: doc/classes/CheckButton.xml:40
-msgid "The [CheckButton] text's font color when it's hovered."
+msgid ""
+"The [CheckButton] text's font color when it's focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/CheckButton.xml:43
-msgid "The [CheckButton] text's font color when it's hovered and pressed."
+msgid "The [CheckButton] text's font color when it's hovered."
msgstr ""
#: doc/classes/CheckButton.xml:46
-msgid "The [CheckButton] text's font color when it's pressed."
+msgid "The [CheckButton] text's font color when it's hovered and pressed."
msgstr ""
#: doc/classes/CheckButton.xml:49
+msgid "The [CheckButton] text's font color when it's pressed."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:52
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered."
msgstr ""
-#: doc/classes/CheckButton.xml:52
+#: doc/classes/CheckButton.xml:55
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered "
"and pressed."
msgstr ""
-#: doc/classes/CheckButton.xml:55
+#: doc/classes/CheckButton.xml:58
msgid "The separation between the toggle icon and the text (in pixels)."
msgstr ""
-#: doc/classes/CheckButton.xml:61
+#: doc/classes/CheckButton.xml:64
msgid "The icon to display when the [CheckButton] is unchecked."
msgstr ""
-#: doc/classes/CheckButton.xml:64
+#: doc/classes/CheckButton.xml:67
msgid "The icon to display when the [CheckButton] is unchecked and disabled."
msgstr ""
-#: doc/classes/CheckButton.xml:67
+#: doc/classes/CheckButton.xml:70
msgid "The icon to display when the [CheckButton] is checked."
msgstr ""
-#: doc/classes/CheckButton.xml:70
+#: doc/classes/CheckButton.xml:73
msgid "The icon to display when the [CheckButton] is checked and disabled."
msgstr ""
-#: doc/classes/CheckButton.xml:73
+#: doc/classes/CheckButton.xml:76
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is pressed."
msgstr ""
@@ -15232,26 +15522,33 @@ msgid "Text [Color] used when the [ColorPickerButton] is disabled."
msgstr ""
#: doc/classes/ColorPickerButton.xml:80
-msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
+msgid ""
+"Text [Color] used when the [ColorPickerButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/ColorPickerButton.xml:83
-msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
+msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
msgstr ""
#: doc/classes/ColorPickerButton.xml:86
-msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
+msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
msgstr ""
#: doc/classes/ColorPickerButton.xml:89
-msgid "The horizontal space between [ColorPickerButton]'s icon and text."
+msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
msgstr ""
#: doc/classes/ColorPickerButton.xml:92
-msgid "Default [StyleBox] for the [ColorPickerButton]."
+msgid "The horizontal space between [ColorPickerButton]'s icon and text."
msgstr ""
#: doc/classes/ColorPickerButton.xml:95
+msgid "Default [StyleBox] for the [ColorPickerButton]."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:98
msgid "[StyleBox] used when the [ColorPickerButton] is being pressed."
msgstr ""
@@ -20510,7 +20807,8 @@ msgid ""
"get_resource_type]. They may optionally specify some import presets that "
"affect the import process. EditorImportPlugins are responsible for creating "
"the resources and saving them in the [code].import[/code] directory (see "
-"[member ProjectSettings.application/config/project_data_dir_name]).\n"
+"[member ProjectSettings.application/config/"
+"use_hidden_project_data_directory]).\n"
"Below is an example EditorImportPlugin that imports a [Mesh] from a file "
"with the extension \".special\" or \".spec\":\n"
"[codeblock]\n"
@@ -20637,7 +20935,7 @@ msgstr ""
msgid ""
"Gets the extension used to save this resource in the [code].import[/code] "
"directory (see [member ProjectSettings.application/config/"
-"project_data_dir_name])."
+"use_hidden_project_data_directory])."
msgstr ""
#: doc/classes/EditorImportPlugin.xml:130
@@ -21677,8 +21975,11 @@ msgstr ""
msgid "Emitted when the value of the edited resource was changed."
msgstr ""
-#: doc/classes/EditorResourcePicker.xml:89
-msgid "Emitted when the resource value was set and user clicked to edit it."
+#: doc/classes/EditorResourcePicker.xml:90
+msgid ""
+"Emitted when the resource value was set and user clicked to edit it. When "
+"[code]edit[/code] is [code]true[/code], the signal was caused by the context "
+"menu \"Edit\" option."
msgstr ""
#: doc/classes/EditorResourcePreview.xml:4
@@ -25432,21 +25733,32 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html"
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -25455,14 +25767,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -25472,36 +25788,36 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
#, fuzzy
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
@@ -25509,46 +25825,46 @@ msgstr ""
"Se [code] vero [/code], i nodi figli sono ordinati, altrimenti l'ordinamento "
"è disabilitato."
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
msgstr ""
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr ""
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -28313,16 +28629,18 @@ msgstr ""
#: doc/classes/Image.xml:436
msgid ""
"OpenGL texture format [code]RED[/code] with a single component and a "
-"bitdepth of 8."
+"bitdepth of 8.\n"
+"[b]Note:[/b] When using the GLES2 backend, this uses the alpha channel "
+"instead of the red channel for storage."
msgstr ""
-#: doc/classes/Image.xml:439
+#: doc/classes/Image.xml:440
msgid ""
"OpenGL texture format [code]RG[/code] with two components and a bitdepth of "
"8 for each."
msgstr ""
-#: doc/classes/Image.xml:442
+#: doc/classes/Image.xml:443
msgid ""
"OpenGL texture format [code]RGB[/code] with three components, each with a "
"bitdepth of 8.\n"
@@ -28330,7 +28648,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:446
+#: doc/classes/Image.xml:447
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 8.\n"
@@ -28338,73 +28656,73 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:450
+#: doc/classes/Image.xml:451
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 4."
msgstr ""
-#: doc/classes/Image.xml:453
+#: doc/classes/Image.xml:454
msgid ""
"OpenGL texture format [code]GL_RGB5_A1[/code] where 5 bits of depth for each "
"component of RGB and one bit for alpha."
msgstr ""
-#: doc/classes/Image.xml:456
+#: doc/classes/Image.xml:457
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 32-"
"bit floating-point value."
msgstr ""
-#: doc/classes/Image.xml:459
+#: doc/classes/Image.xml:460
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:462
+#: doc/classes/Image.xml:463
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:465
+#: doc/classes/Image.xml:466
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:468
+#: doc/classes/Image.xml:469
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 16-"
"bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:471
+#: doc/classes/Image.xml:472
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:474
+#: doc/classes/Image.xml:475
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:477
+#: doc/classes/Image.xml:478
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:480
+#: doc/classes/Image.xml:481
msgid ""
"A special OpenGL texture format where the three color components have 9 bits "
"of precision and all three share a single 5-bit exponent."
msgstr ""
-#: doc/classes/Image.xml:483
+#: doc/classes/Image.xml:484
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 1, and is the smallest variation "
@@ -28414,7 +28732,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:487
+#: doc/classes/Image.xml:488
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 2, and color data is interpreted "
@@ -28424,7 +28742,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:491
+#: doc/classes/Image.xml:492
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format also known as Block Compression 3 or BC3 that contains 64 "
@@ -28435,7 +28753,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:495
+#: doc/classes/Image.xml:496
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -28443,7 +28761,7 @@ msgid ""
"DXT5 uses for the alpha channel."
msgstr ""
-#: doc/classes/Image.xml:498
+#: doc/classes/Image.xml:499
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -28451,7 +28769,7 @@ msgid ""
"algorithm that DXT5 uses for the alpha channel."
msgstr ""
-#: doc/classes/Image.xml:501
+#: doc/classes/Image.xml:502
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned normalized "
@@ -28460,21 +28778,21 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:505
+#: doc/classes/Image.xml:506
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with signed floating-point "
"RGB components."
msgstr ""
-#: doc/classes/Image.xml:508
+#: doc/classes/Image.xml:509
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned floating-point "
"RGB components."
msgstr ""
-#: doc/classes/Image.xml:511
+#: doc/classes/Image.xml:512
msgid ""
"Texture format used on PowerVR-supported mobile platforms, uses 2-bit color "
"depth with no alpha. More information can be found [url=https://en.wikipedia."
@@ -28483,25 +28801,25 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:515
+#: doc/classes/Image.xml:516
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with an "
"alpha component."
msgstr ""
-#: doc/classes/Image.xml:518
+#: doc/classes/Image.xml:519
msgid ""
"Similar to [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with 4-"
"bit color depth and no alpha."
msgstr ""
-#: doc/classes/Image.xml:521
+#: doc/classes/Image.xml:522
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC4[/url], but with an "
"alpha component."
msgstr ""
-#: doc/classes/Image.xml:524
+#: doc/classes/Image.xml:525
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC1]Ericsson Texture Compression format 1[/"
@@ -28509,7 +28827,7 @@ msgid ""
"standard. This format cannot store an alpha channel."
msgstr ""
-#: doc/classes/Image.xml:527
+#: doc/classes/Image.xml:528
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28517,7 +28835,7 @@ msgid ""
"unsigned data."
msgstr ""
-#: doc/classes/Image.xml:530
+#: doc/classes/Image.xml:531
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28525,7 +28843,7 @@ msgid ""
"channel of signed data."
msgstr ""
-#: doc/classes/Image.xml:533
+#: doc/classes/Image.xml:534
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28533,7 +28851,7 @@ msgid ""
"of unsigned data."
msgstr ""
-#: doc/classes/Image.xml:536
+#: doc/classes/Image.xml:537
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28541,7 +28859,7 @@ msgid ""
"channels of signed data."
msgstr ""
-#: doc/classes/Image.xml:539
+#: doc/classes/Image.xml:540
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28551,7 +28869,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:543
+#: doc/classes/Image.xml:544
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28561,7 +28879,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:547
+#: doc/classes/Image.xml:548
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28572,31 +28890,31 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:551
+#: doc/classes/Image.xml:552
msgid "Represents the size of the [enum Format] enum."
msgstr ""
-#: doc/classes/Image.xml:554
+#: doc/classes/Image.xml:555
msgid ""
"Performs nearest-neighbor interpolation. If the image is resized, it will be "
"pixelated."
msgstr ""
-#: doc/classes/Image.xml:557
+#: doc/classes/Image.xml:558
msgid ""
"Performs bilinear interpolation. If the image is resized, it will be blurry. "
"This mode is faster than [constant INTERPOLATE_CUBIC], but it results in "
"lower quality."
msgstr ""
-#: doc/classes/Image.xml:560
+#: doc/classes/Image.xml:561
msgid ""
"Performs cubic interpolation. If the image is resized, it will be blurry. "
"This mode often gives better results compared to [constant "
"INTERPOLATE_BILINEAR], at the cost of being slower."
msgstr ""
-#: doc/classes/Image.xml:563
+#: doc/classes/Image.xml:564
msgid ""
"Performs bilinear separately on the two most-suited mipmap levels, then "
"linearly interpolates between them.\n"
@@ -28611,55 +28929,55 @@ msgid ""
"a new set will be generated for the resulting image."
msgstr ""
-#: doc/classes/Image.xml:570
+#: doc/classes/Image.xml:571
msgid ""
"Performs Lanczos interpolation. This is the slowest image resizing mode, but "
"it typically gives the best results, especially when downscalng images."
msgstr ""
-#: doc/classes/Image.xml:573
+#: doc/classes/Image.xml:574
msgid "Image does not have alpha."
msgstr ""
-#: doc/classes/Image.xml:576
+#: doc/classes/Image.xml:577
msgid "Image stores alpha in a single bit."
msgstr ""
-#: doc/classes/Image.xml:579
+#: doc/classes/Image.xml:580
msgid "Image uses alpha."
msgstr ""
-#: doc/classes/Image.xml:582
+#: doc/classes/Image.xml:583
msgid "Use S3TC compression."
msgstr ""
-#: doc/classes/Image.xml:585
+#: doc/classes/Image.xml:586
msgid "Use PVRTC2 compression."
msgstr ""
-#: doc/classes/Image.xml:588
+#: doc/classes/Image.xml:589
msgid "Use PVRTC4 compression."
msgstr ""
-#: doc/classes/Image.xml:591
+#: doc/classes/Image.xml:592
msgid "Use ETC compression."
msgstr ""
-#: doc/classes/Image.xml:594
+#: doc/classes/Image.xml:595
msgid "Use ETC2 compression."
msgstr ""
-#: doc/classes/Image.xml:597
+#: doc/classes/Image.xml:598
msgid ""
"Source texture (before compression) is a regular texture. Default for all "
"textures."
msgstr ""
-#: doc/classes/Image.xml:600
+#: doc/classes/Image.xml:601
msgid "Source texture (before compression) is in sRGB space."
msgstr ""
-#: doc/classes/Image.xml:603
+#: doc/classes/Image.xml:604
msgid ""
"Source texture (before compression) is a normal texture (e.g. it can be "
"compressed into two channels)."
@@ -28884,6 +29202,17 @@ msgstr ""
#: doc/classes/Input.xml:43
msgid ""
+"Sends all input events which are in the current buffer to the game loop. "
+"These events may have been buffered as a result of accumulated input "
+"([method set_use_accumulated_input]) or agile input flushing ([member "
+"ProjectSettings.input_devices/buffering/agile_event_flushing]).\n"
+"The engine will already do this itself at key execution points (at least "
+"once per frame). However, this can be useful in advanced cases where you "
+"want precise control over the timing of event handling."
+msgstr ""
+
+#: doc/classes/Input.xml:50
+msgid ""
"Returns the acceleration of the device's accelerometer sensor, if the device "
"has one. Otherwise, the method returns [constant Vector3.ZERO].\n"
"Note this method returns an empty [Vector3] when running from the editor "
@@ -28895,7 +29224,7 @@ msgid ""
"the Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:53
+#: doc/classes/Input.xml:60
msgid ""
"Returns a value between 0 and 1 representing the raw intensity of the given "
"action, ignoring the action's deadzone. In most cases, you should use "
@@ -28905,7 +29234,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:62
+#: doc/classes/Input.xml:69
msgid ""
"Returns a value between 0 and 1 representing the intensity of the given "
"action. In a joypad, for example, the further away the axis (analog sticks "
@@ -28917,7 +29246,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:71
+#: doc/classes/Input.xml:78
msgid ""
"Get axis input by specifying two actions, one negative and one positive.\n"
"This is a shorthand for writing [code]Input."
@@ -28925,17 +29254,17 @@ msgid ""
"get_action_strength(\"negative_action\")[/code]."
msgstr ""
-#: doc/classes/Input.xml:78
+#: doc/classes/Input.xml:85
msgid ""
"Returns an [Array] containing the device IDs of all currently connected "
"joypads."
msgstr ""
-#: doc/classes/Input.xml:84
+#: doc/classes/Input.xml:91
msgid "Returns the currently assigned cursor shape (see [enum CursorShape])."
msgstr ""
-#: doc/classes/Input.xml:90
+#: doc/classes/Input.xml:97
msgid ""
"Returns the gravity of the device's accelerometer sensor, if the device has "
"one. Otherwise, the method returns [constant Vector3.ZERO].\n"
@@ -28945,7 +29274,7 @@ msgid ""
"Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:97
+#: doc/classes/Input.xml:104
msgid ""
"Returns the rotation rate in rad/s around a device's X, Y, and Z axes of the "
"gyroscope sensor, if the device has one. Otherwise, the method returns "
@@ -28954,53 +29283,53 @@ msgid ""
"it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:106
+#: doc/classes/Input.xml:113
msgid ""
"Returns the current value of the joypad axis at given index (see [enum "
"JoystickList])."
msgstr ""
-#: doc/classes/Input.xml:113
+#: doc/classes/Input.xml:120
msgid "Returns the index of the provided axis name."
msgstr ""
-#: doc/classes/Input.xml:120
+#: doc/classes/Input.xml:127
msgid ""
"Receives a [enum JoystickList] axis and returns its equivalent name as a "
"string."
msgstr ""
-#: doc/classes/Input.xml:127
+#: doc/classes/Input.xml:134
msgid "Returns the index of the provided button name."
msgstr ""
-#: doc/classes/Input.xml:134
+#: doc/classes/Input.xml:141
msgid ""
"Receives a gamepad button from [enum JoystickList] and returns its "
"equivalent name as a string."
msgstr ""
-#: doc/classes/Input.xml:141
+#: doc/classes/Input.xml:148
msgid ""
"Returns a SDL2-compatible device GUID on platforms that use gamepad "
"remapping. Returns [code]\"Default Gamepad\"[/code] otherwise."
msgstr ""
-#: doc/classes/Input.xml:148
+#: doc/classes/Input.xml:155
msgid "Returns the name of the joypad at the specified device index."
msgstr ""
-#: doc/classes/Input.xml:155
+#: doc/classes/Input.xml:162
msgid "Returns the duration of the current vibration effect in seconds."
msgstr ""
-#: doc/classes/Input.xml:162
+#: doc/classes/Input.xml:169
msgid ""
"Returns the strength of the joypad vibration: x is the strength of the weak "
"motor, and y is the strength of the strong motor."
msgstr ""
-#: doc/classes/Input.xml:168
+#: doc/classes/Input.xml:175
msgid ""
"Returns the mouse speed for the last time the cursor was moved, and this "
"until the next frame where the mouse moves. This means that even if the "
@@ -29008,7 +29337,7 @@ msgid ""
"motion."
msgstr ""
-#: doc/classes/Input.xml:174
+#: doc/classes/Input.xml:181
msgid ""
"Returns the magnetic field strength in micro-Tesla for all axes of the "
"device's magnetometer sensor, if the device has one. Otherwise, the method "
@@ -29017,17 +29346,17 @@ msgid ""
"platforms, it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:181
+#: doc/classes/Input.xml:188
msgid ""
"Returns mouse buttons as a bitmask. If multiple mouse buttons are pressed at "
"the same time, the bits are added together."
msgstr ""
-#: doc/classes/Input.xml:187
+#: doc/classes/Input.xml:194
msgid "Returns the mouse mode. See the constants for more information."
msgstr ""
-#: doc/classes/Input.xml:198
+#: doc/classes/Input.xml:205
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -29040,7 +29369,7 @@ msgid ""
"want (on the range of 0 to 1)."
msgstr ""
-#: doc/classes/Input.xml:208
+#: doc/classes/Input.xml:215
msgid ""
"Returns [code]true[/code] when the user starts pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user pressed down "
@@ -29052,7 +29381,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:218
+#: doc/classes/Input.xml:225
msgid ""
"Returns [code]true[/code] when the user stops pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user released the "
@@ -29062,7 +29391,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:227
+#: doc/classes/Input.xml:234
msgid ""
"Returns [code]true[/code] if you are pressing the action event. Note that if "
"an action has multiple buttons assigned and more than one of them is "
@@ -29073,14 +29402,14 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:236
+#: doc/classes/Input.xml:243
#, fuzzy
msgid ""
"Returns [code]true[/code] if you are pressing the joypad button (see [enum "
"JoystickList])."
msgstr "Ritorna [code]true[/code] se [code]s[/code] è zero o quasi zero."
-#: doc/classes/Input.xml:243
+#: doc/classes/Input.xml:250
msgid ""
"Returns [code]true[/code] if the system knows the specified device. This "
"means that it sets all button and axis indices exactly as defined in [enum "
@@ -29088,20 +29417,20 @@ msgid ""
"but you can still retrieve events from them."
msgstr ""
-#: doc/classes/Input.xml:250
+#: doc/classes/Input.xml:257
#, fuzzy
msgid ""
"Returns [code]true[/code] if you are pressing the key. You can pass a [enum "
"KeyList] constant."
msgstr "Ritorna [code]true[/code] se [Rect2i] contiene un punto."
-#: doc/classes/Input.xml:257
+#: doc/classes/Input.xml:264
msgid ""
"Returns [code]true[/code] if you are pressing the mouse button specified "
"with [enum ButtonList]."
msgstr ""
-#: doc/classes/Input.xml:267
+#: doc/classes/Input.xml:274
msgid ""
"Notifies the [Input] singleton that a connection has changed, to update the "
"state for the [code]device[/code] index.\n"
@@ -29110,7 +29439,7 @@ msgid ""
"triggered internally."
msgstr ""
-#: doc/classes/Input.xml:275
+#: doc/classes/Input.xml:282
msgid ""
"Feeds an [InputEvent] to the game. Can be used to artificially trigger input "
"events from code. Also generates [method Node._input] calls.\n"
@@ -29123,12 +29452,21 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Input.xml:289
+#: doc/classes/Input.xml:296
msgid ""
"Removes all mappings from the internal database that match the given GUID."
msgstr ""
-#: doc/classes/Input.xml:298
+#: doc/classes/Input.xml:303
+msgid ""
+"Sets the acceleration value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:313
msgid ""
"Sets a custom mouse cursor image, which is only visible inside the game "
"window. The hotspot can also be specified. Passing [code]null[/code] to the "
@@ -29143,7 +29481,7 @@ msgid ""
"compression mode can't be used for custom cursors."
msgstr ""
-#: doc/classes/Input.xml:309
+#: doc/classes/Input.xml:324
msgid ""
"Sets the default cursor shape to be used in the viewport instead of "
"[constant CURSOR_ARROW].\n"
@@ -29153,11 +29491,38 @@ msgid ""
"cursor immediately."
msgstr ""
-#: doc/classes/Input.xml:318
+#: doc/classes/Input.xml:333
+msgid ""
+"Sets the gravity value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:341
+msgid ""
+"Sets the value of the rotation rate of the gyroscope sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:349
+msgid ""
+"Sets the value of the magnetic field of the magnetometer sensor. Can be used "
+"for debugging on devices without a hardware sensor, for example in an editor "
+"on a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:357
msgid "Sets the mouse mode. See the constants for more information."
msgstr ""
-#: doc/classes/Input.xml:325
+#: doc/classes/Input.xml:364
msgid ""
"Enables or disables the accumulation of similar input events sent by the "
"operating system. When input accumulation is enabled, all input events "
@@ -29171,7 +29536,7 @@ msgid ""
"results that closely follow the actual input."
msgstr ""
-#: doc/classes/Input.xml:336
+#: doc/classes/Input.xml:375
msgid ""
"Starts to vibrate the joypad. Joypads usually come with two rumble motors, a "
"strong and a weak one. [code]weak_magnitude[/code] is the strength of the "
@@ -29184,34 +29549,34 @@ msgid ""
"few seconds."
msgstr ""
-#: doc/classes/Input.xml:344
+#: doc/classes/Input.xml:383
msgid "Stops the vibration of the joypad."
msgstr ""
-#: doc/classes/Input.xml:351
+#: doc/classes/Input.xml:390
msgid ""
"Vibrate Android and iOS devices.\n"
"[b]Note:[/b] It needs [code]VIBRATE[/code] permission for Android at export "
"settings. iOS does not support duration."
msgstr ""
-#: doc/classes/Input.xml:359
+#: doc/classes/Input.xml:398
msgid "Sets the mouse position to the specified vector."
msgstr ""
-#: doc/classes/Input.xml:368
+#: doc/classes/Input.xml:407
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
-#: doc/classes/Input.xml:374
+#: doc/classes/Input.xml:413
msgid "Makes the mouse cursor visible if it is hidden."
msgstr ""
-#: doc/classes/Input.xml:377
+#: doc/classes/Input.xml:416
msgid "Makes the mouse cursor hidden if it is visible."
msgstr ""
-#: doc/classes/Input.xml:380
+#: doc/classes/Input.xml:419
msgid ""
"Captures the mouse. The mouse will be hidden and its position locked at the "
"center of the screen.\n"
@@ -29219,83 +29584,83 @@ msgid ""
"need to use [member InputEventMouseMotion.relative]."
msgstr ""
-#: doc/classes/Input.xml:384
+#: doc/classes/Input.xml:423
msgid "Makes the mouse cursor visible but confines it to the game window."
msgstr ""
-#: doc/classes/Input.xml:387
+#: doc/classes/Input.xml:426
msgid "Arrow cursor. Standard, default pointing cursor."
msgstr ""
-#: doc/classes/Input.xml:390
+#: doc/classes/Input.xml:429
msgid ""
"I-beam cursor. Usually used to show where the text cursor will appear when "
"the mouse is clicked."
msgstr ""
-#: doc/classes/Input.xml:393
+#: doc/classes/Input.xml:432
msgid ""
"Pointing hand cursor. Usually used to indicate the pointer is over a link or "
"other interactable item."
msgstr ""
-#: doc/classes/Input.xml:396
+#: doc/classes/Input.xml:435
msgid ""
"Cross cursor. Typically appears over regions in which a drawing operation "
"can be performed or for selections."
msgstr ""
-#: doc/classes/Input.xml:399
+#: doc/classes/Input.xml:438
msgid ""
"Wait cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application is still usable during the "
"operation."
msgstr ""
-#: doc/classes/Input.xml:402
+#: doc/classes/Input.xml:441
msgid ""
"Busy cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application isn't usable during the "
"operation (e.g. something is blocking its main thread)."
msgstr ""
-#: doc/classes/Input.xml:405
+#: doc/classes/Input.xml:444
msgid "Drag cursor. Usually displayed when dragging something."
msgstr ""
-#: doc/classes/Input.xml:408
+#: doc/classes/Input.xml:447
msgid ""
"Can drop cursor. Usually displayed when dragging something to indicate that "
"it can be dropped at the current position."
msgstr ""
-#: doc/classes/Input.xml:411
+#: doc/classes/Input.xml:450
msgid ""
"Forbidden cursor. Indicates that the current action is forbidden (for "
"example, when dragging something) or that the control at a position is "
"disabled."
msgstr ""
-#: doc/classes/Input.xml:414
+#: doc/classes/Input.xml:453
msgid ""
"Vertical resize mouse cursor. A double-headed vertical arrow. It tells the "
"user they can resize the window or the panel vertically."
msgstr ""
-#: doc/classes/Input.xml:417
+#: doc/classes/Input.xml:456
msgid ""
"Horizontal resize mouse cursor. A double-headed horizontal arrow. It tells "
"the user they can resize the window or the panel horizontally."
msgstr ""
-#: doc/classes/Input.xml:420
+#: doc/classes/Input.xml:459
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the bottom left to the top right. It tells the user they can resize the "
"window or the panel both horizontally and vertically."
msgstr ""
-#: doc/classes/Input.xml:423
+#: doc/classes/Input.xml:462
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the top left to the bottom right, the opposite of [constant "
@@ -29303,23 +29668,23 @@ msgid ""
"both horizontally and vertically."
msgstr ""
-#: doc/classes/Input.xml:426
+#: doc/classes/Input.xml:465
msgid "Move cursor. Indicates that something can be moved."
msgstr ""
-#: doc/classes/Input.xml:429
+#: doc/classes/Input.xml:468
msgid ""
"Vertical split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_VSIZE]."
msgstr ""
-#: doc/classes/Input.xml:432
+#: doc/classes/Input.xml:471
msgid ""
"Horizontal split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_HSIZE]."
msgstr ""
-#: doc/classes/Input.xml:435
+#: doc/classes/Input.xml:474
msgid "Help cursor. Usually a question mark."
msgstr ""
@@ -29735,7 +30100,9 @@ msgid "The drag position."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -31052,7 +31419,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -31117,22 +31485,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -31147,7 +31517,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -31155,19 +31525,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -31238,7 +31608,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -31296,7 +31667,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -32583,14 +32956,21 @@ msgid "Default text [Color] of the [LinkButton]."
msgstr ""
#: doc/classes/LinkButton.xml:46
-msgid "Text [Color] used when the [LinkButton] is being hovered."
+msgid ""
+"Text [Color] used when the [LinkButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/LinkButton.xml:49
-msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgid "Text [Color] used when the [LinkButton] is being hovered."
msgstr ""
#: doc/classes/LinkButton.xml:52
+msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:55
msgid "The vertical space between the baseline of text and the underline."
msgstr ""
@@ -33084,26 +33464,33 @@ msgid "Text [Color] used when the [MenuButton] is disabled."
msgstr ""
#: doc/classes/MenuButton.xml:64
-msgid "Text [Color] used when the [MenuButton] is being hovered."
+msgid ""
+"Text [Color] used when the [MenuButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/MenuButton.xml:67
-msgid "Text [Color] used when the [MenuButton] is being pressed."
+msgid "Text [Color] used when the [MenuButton] is being hovered."
msgstr ""
#: doc/classes/MenuButton.xml:70
-msgid "[StyleBox] used when the [MenuButton] is being hovered."
+msgid "Text [Color] used when the [MenuButton] is being pressed."
msgstr ""
#: doc/classes/MenuButton.xml:73
-msgid "The horizontal space between [MenuButton]'s icon and text."
+msgid "[StyleBox] used when the [MenuButton] is being hovered."
msgstr ""
#: doc/classes/MenuButton.xml:76
-msgid "Default [StyleBox] for the [MenuButton]."
+msgid "The horizontal space between [MenuButton]'s icon and text."
msgstr ""
#: doc/classes/MenuButton.xml:79
+msgid "Default [StyleBox] for the [MenuButton]."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:82
msgid "[StyleBox] used when the [MenuButton] is being pressed."
msgstr ""
@@ -34841,7 +35228,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -37728,26 +38115,33 @@ msgid "Text [Color] used when the [OptionButton] is disabled."
msgstr ""
#: doc/classes/OptionButton.xml:212
-msgid "Text [Color] used when the [OptionButton] is being hovered."
+msgid ""
+"Text [Color] used when the [OptionButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/OptionButton.xml:215
-msgid "Text [Color] used when the [OptionButton] is being pressed."
+msgid "Text [Color] used when the [OptionButton] is being hovered."
msgstr ""
#: doc/classes/OptionButton.xml:218
-msgid "[StyleBox] used when the [OptionButton] is being hovered."
+msgid "Text [Color] used when the [OptionButton] is being pressed."
msgstr ""
#: doc/classes/OptionButton.xml:221
-msgid "The horizontal space between [OptionButton]'s icon and text."
+msgid "[StyleBox] used when the [OptionButton] is being hovered."
msgstr ""
#: doc/classes/OptionButton.xml:224
-msgid "Default [StyleBox] for the [OptionButton]."
+msgid "The horizontal space between [OptionButton]'s icon and text."
msgstr ""
#: doc/classes/OptionButton.xml:227
+msgid "Default [StyleBox] for the [OptionButton]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:230
msgid "[StyleBox] used when the [OptionButton] is being pressed."
msgstr ""
@@ -38154,7 +38548,7 @@ msgstr ""
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -38184,14 +38578,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -38201,7 +38595,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -40719,17 +41113,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -40747,11 +41167,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -40946,7 +41366,9 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-msgid "Returns the [Physics2DDirectBodyState] of the body."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
@@ -41749,6 +42171,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -41766,7 +42206,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -41880,7 +42320,9 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-msgid "Returns the [PhysicsDirectBodyState] of the body."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/PhysicsServer.xml:370
@@ -42862,27 +43304,27 @@ msgstr ""
msgid "Removes an element from the array by index."
msgstr ""
-#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolColorArray.xml:66
-#: doc/classes/PoolIntArray.xml:67 doc/classes/PoolRealArray.xml:67
-#: doc/classes/PoolStringArray.xml:74 doc/classes/PoolVector2Array.xml:67
-#: doc/classes/PoolVector3Array.xml:66
+#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolIntArray.xml:67
+#: doc/classes/PoolRealArray.xml:67
msgid ""
"Sets the size of the array. If the array is grown, reserves elements at the "
"end of the array. If the array is shrunk, truncates the array to the new "
-"size."
+"size.\n"
+"[b]Note:[/b] Added elements are not automatically initialized to 0 and will "
+"contain garbage, i.e. indeterminate values."
msgstr ""
-#: doc/classes/PoolByteArray.xml:121
+#: doc/classes/PoolByteArray.xml:122
msgid "Changes the byte at the given index."
msgstr ""
-#: doc/classes/PoolByteArray.xml:127 doc/classes/PoolColorArray.xml:79
-#: doc/classes/PoolRealArray.xml:80 doc/classes/PoolStringArray.xml:87
+#: doc/classes/PoolByteArray.xml:128 doc/classes/PoolColorArray.xml:79
+#: doc/classes/PoolRealArray.xml:81 doc/classes/PoolStringArray.xml:87
#: doc/classes/PoolVector2Array.xml:80 doc/classes/PoolVector3Array.xml:79
msgid "Returns the size of the array."
msgstr ""
-#: doc/classes/PoolByteArray.xml:135
+#: doc/classes/PoolByteArray.xml:136
msgid ""
"Returns the slice of the [PoolByteArray] between indices (inclusive) as a "
"new [PoolByteArray]. Any negative index is considered to be from the end of "
@@ -42914,6 +43356,14 @@ msgstr ""
msgid "Appends a value to the array."
msgstr ""
+#: doc/classes/PoolColorArray.xml:66 doc/classes/PoolStringArray.xml:74
+#: doc/classes/PoolVector2Array.xml:67 doc/classes/PoolVector3Array.xml:66
+msgid ""
+"Sets the size of the array. If the array is grown, reserves elements at the "
+"end of the array. If the array is shrunk, truncates the array to the new "
+"size."
+msgstr ""
+
#: doc/classes/PoolColorArray.xml:73
msgid "Changes the [Color] at the given index."
msgstr ""
@@ -42950,11 +43400,11 @@ msgid ""
"valid, or at the end of the array ([code]idx == size()[/code])."
msgstr ""
-#: doc/classes/PoolIntArray.xml:74
+#: doc/classes/PoolIntArray.xml:75
msgid "Changes the int at the given index."
msgstr ""
-#: doc/classes/PoolIntArray.xml:80
+#: doc/classes/PoolIntArray.xml:81
msgid "Returns the array size."
msgstr ""
@@ -42986,7 +43436,7 @@ msgstr ""
msgid "Appends a [PoolRealArray] at the end of this array."
msgstr ""
-#: doc/classes/PoolRealArray.xml:74
+#: doc/classes/PoolRealArray.xml:75
msgid "Changes the float at the given index."
msgstr ""
@@ -44255,18 +44705,6 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:204
msgid ""
-"The project data directory is used for storing project-specific data "
-"(metadata, shader cache, etc.).\n"
-"[b]Note:[/b] Restart the application after changing this setting.\n"
-"[b]Note:[/b] Changing this value can help on platforms or with third-party "
-"tools where specific directory patterns are disallowed. Only modify this "
-"setting if you know that your environment requires it, as changing the "
-"default can impact compatibility with some external tools or plugins which "
-"expect the default [code].import[/code] folder."
-msgstr ""
-
-#: doc/classes/ProjectSettings.xml:209
-msgid ""
"Specifies a file to override project settings. For example: [code]user://"
"custom_settings.cfg[/code]. See \"Overriding\" in the [ProjectSettings] "
"class description at the top for more information.\n"
@@ -44274,7 +44712,7 @@ msgid ""
"code] will still be read to override the project settings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:213
+#: doc/classes/ProjectSettings.xml:208
msgid ""
"If [code]true[/code], the project will save user data to its own user "
"directory (see [member application/config/custom_user_dir_name]). This "
@@ -44284,13 +44722,28 @@ msgid ""
"user data directory)/Godot/app_userdata/(project name)[/code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:216
+#: doc/classes/ProjectSettings.xml:211
+msgid ""
+"If [code]true[/code], the project will use a hidden directory ([code]."
+"import[/code]) for storing project-specific data (metadata, shader cache, "
+"etc.).\n"
+"If [code]false[/code], a non-hidden directory ([code]import[/code]) will be "
+"used instead.\n"
+"[b]Note:[/b] Restart the application after changing this setting.\n"
+"[b]Note:[/b] Changing this value can help on platforms or with third-party "
+"tools where hidden directory patterns are disallowed. Only modify this "
+"setting if you know that your environment requires it, as changing the "
+"default can impact compatibility with some external tools or plugins which "
+"expect the default [code].import[/code] folder."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:217
msgid ""
"Icon set in [code].ico[/code] format used on Windows to set the game's icon. "
"This is done automatically on start by calling [method OS.set_native_icon]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:219
+#: doc/classes/ProjectSettings.xml:220
msgid ""
"Time samples for frame deltas are subject to random variation introduced by "
"the platform, even when frames are displayed at regular intervals thanks to "
@@ -44304,14 +44757,14 @@ msgid ""
"adequate to render frames at the refresh rate."
msgstr ""
-#: doc/classes/ProjectSettings.xml:224
+#: doc/classes/ProjectSettings.xml:225
msgid ""
"[b]Experimental.[/b] Shifts the measurement of delta time for each frame to "
"just after the drawing has taken place. This may lead to more consistent "
"deltas and a reduction in frame stutters."
msgstr ""
-#: doc/classes/ProjectSettings.xml:227
+#: doc/classes/ProjectSettings.xml:228
msgid ""
"If [code]true[/code], disables printing to standard error. If [code]true[/"
"code], this also hides error and warning messages printed by [method "
@@ -44320,7 +44773,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:231
+#: doc/classes/ProjectSettings.xml:232
msgid ""
"If [code]true[/code], disables printing to standard output. This is "
"equivalent to starting the editor or project with the [code]--quiet[/code] "
@@ -44328,7 +44781,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:235
+#: doc/classes/ProjectSettings.xml:236
msgid ""
"If [code]true[/code], flushes the standard output stream every time a line "
"is printed. This affects both terminal logging and file logging.\n"
@@ -44344,20 +44797,20 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:241
+#: doc/classes/ProjectSettings.xml:242
msgid ""
"Debug build override for [member application/run/flush_stdout_on_print], as "
"performance is less important during debugging.\n"
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:245
+#: doc/classes/ProjectSettings.xml:246
msgid ""
"Forces a delay between frames in the main loop (in milliseconds). This may "
"be useful if you plan to disable vertical synchronization."
msgstr ""
-#: doc/classes/ProjectSettings.xml:248
+#: doc/classes/ProjectSettings.xml:249
msgid ""
"If [code]true[/code], enables low-processor usage mode. This setting only "
"works on desktop platforms. The screen is not redrawn if nothing changes "
@@ -44365,75 +44818,81 @@ msgid ""
"useless (and can hurt performance) in most games."
msgstr ""
-#: doc/classes/ProjectSettings.xml:251
+#: doc/classes/ProjectSettings.xml:252
msgid ""
"Amount of sleeping between frames when the low-processor usage mode is "
"enabled (in microseconds). Higher values will result in lower CPU usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:254
+#: doc/classes/ProjectSettings.xml:255
msgid "Path to the main scene file that will be loaded when the project runs."
msgstr ""
-#: doc/classes/ProjectSettings.xml:257 doc/classes/ProjectSettings.xml:260
+#: doc/classes/ProjectSettings.xml:258 doc/classes/ProjectSettings.xml:261
msgid ""
"Audio buses will disable automatically when sound goes below a given dB "
"threshold for a given time. This saves CPU as effects assigned to that bus "
"will no longer do any processing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:263
+#: doc/classes/ProjectSettings.xml:264
msgid ""
"Default [AudioBusLayout] resource file to use in the project, unless "
"overridden by the scene."
msgstr ""
-#: doc/classes/ProjectSettings.xml:266
+#: doc/classes/ProjectSettings.xml:267
msgid ""
"Specifies the audio driver to use. This setting is platform-dependent as "
"each platform supports different audio drivers. If left empty, the default "
"audio driver will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:269
+#: doc/classes/ProjectSettings.xml:270
msgid ""
"If [code]true[/code], microphone input will be allowed. This requires "
"appropriate permissions to be set when exporting to Android or iOS."
msgstr ""
-#: doc/classes/ProjectSettings.xml:272
+#: doc/classes/ProjectSettings.xml:273
msgid ""
"The mixing rate used for audio (in Hz). In general, it's better to not touch "
"this and leave it to the host operating system."
msgstr ""
-#: doc/classes/ProjectSettings.xml:275
+#: doc/classes/ProjectSettings.xml:276
msgid ""
"Safer override for [member audio/mix_rate] in the Web platform. Here "
"[code]0[/code] means \"let the browser choose\" (since some browsers do not "
"like forcing the mix rate)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:278
+#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:281
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:284
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:287
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -44443,7 +44902,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:290
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -44453,27 +44912,27 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:293
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:296
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
-#: doc/classes/ProjectSettings.xml:299
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:302
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -44481,81 +44940,81 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:305
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:308
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:311
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:314
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:317
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr ""
-#: doc/classes/ProjectSettings.xml:320
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:323
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:326
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:329
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:332
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:335
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:338
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:341
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -44563,109 +45022,109 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:344
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:347
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:350
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:353
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:356
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:359
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:362
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:365
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:368
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:371
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:374
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:377
+#: doc/classes/ProjectSettings.xml:380
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:380
+#: doc/classes/ProjectSettings.xml:383
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:383
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:386
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:389
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:392
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:395
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:398
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -44676,91 +45135,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:403
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:406
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:409
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:412
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:415
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:418
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:421
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:424
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:427
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:430
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:433
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:436
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:439
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr ""
-#: doc/classes/ProjectSettings.xml:442
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:445
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:448
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:451
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -44769,13 +45228,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:455
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:458
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -44785,7 +45244,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:463
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -44793,19 +45252,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:468
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:472
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:476
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -44819,45 +45278,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:481
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:484
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:488
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:491
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:494
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:497
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:500
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -44866,7 +45325,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:503
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -44877,7 +45336,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:507
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -44893,14 +45352,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:515
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:518
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -44908,49 +45367,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:521
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:524
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:529
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:532
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:535
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:538
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:541
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:544
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:547
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -44959,7 +45418,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:551
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44967,7 +45426,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:555
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44975,7 +45434,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:559
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44985,7 +45444,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:563
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -44994,7 +45453,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:567
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -45003,7 +45462,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:571
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -45013,7 +45472,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:575
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -45021,7 +45480,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:579
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -45031,7 +45490,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:583
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -45041,7 +45500,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:587
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -45049,7 +45508,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:591
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -45058,7 +45517,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:595
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -45066,7 +45525,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:599
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -45078,477 +45537,477 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:605
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:608
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:611
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:614
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:617
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:620
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:623
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:626
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:629
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:632
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:635
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:638
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:641
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:644
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:647
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:650
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:653
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:656
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:659
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:662
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:665
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:668
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:671
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:674
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:677
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:680
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:683
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:686
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:689
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:692
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:695
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:698
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:701
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:704
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:707
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:710
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:713
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:716
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:719
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:722
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:725
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:728
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:731
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:734
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:737
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:740
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:743
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:746
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:749
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:752
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:755
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:758
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:761
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:764
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:767
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:770
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:773
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:776
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:779
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:782
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:785
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:788
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:791
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:794
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:797
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:800
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:803
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:806
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:809
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:812
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:815
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:818
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:821
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:824
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:827
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:830
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:833
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:836
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:839
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:842
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:845
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:848
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:851
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:854
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:857
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:860
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:863
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:866
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:869
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:872
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:875
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:878
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:881
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr ""
-#: doc/classes/ProjectSettings.xml:884
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:887
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:890
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:893
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:896
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:899
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:902
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:905
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:908
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:911
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:914
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:917
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:920
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:923
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:926
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:929
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:932
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:935
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:938
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:941
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:946
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:949
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -45556,92 +46015,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:952
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:955
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:958
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:961
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:964
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:967
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:970
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:973
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:976
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:979
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:982
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:985
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:988
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:991
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:994
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:997
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1000
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1003
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -45651,33 +46110,33 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1007
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1010
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1013
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1017
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1021
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45690,7 +46149,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1025
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45702,7 +46161,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1033
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45714,7 +46173,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1041
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45727,7 +46186,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1045
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -45735,28 +46194,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1049
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1053
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1056
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1059
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -45766,25 +46225,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1063
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1066
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1069
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1072
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45797,7 +46256,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1076
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45809,7 +46268,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1084
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45821,7 +46280,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1092
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45834,13 +46293,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1096
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1099
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -45848,11 +46307,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1103
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1106
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -45866,7 +46325,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1112
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -45875,7 +46334,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1116
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -45891,7 +46350,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1121
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -45901,7 +46360,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1125
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45911,7 +46370,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1129
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -45922,7 +46381,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1133
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45932,7 +46391,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1137
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -45940,7 +46399,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1141
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -45951,7 +46410,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1145
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -45966,7 +46425,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1151
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -45975,13 +46434,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1156
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1159
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -45990,7 +46449,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1162
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -46000,7 +46459,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1165
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -46012,7 +46471,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1168
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -46022,24 +46481,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1171
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1174
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1177
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1180
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -46048,7 +46507,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1183
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -46056,7 +46515,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1186
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -46065,7 +46524,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1189
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -46075,7 +46534,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1193
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -46083,31 +46542,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1197
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1200
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1203
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1206
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1209
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -46115,7 +46574,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1212
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -46125,46 +46584,53 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1215
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1218
+#: doc/classes/ProjectSettings.xml:1221
+msgid ""
+"iOS specific override for [member rendering/gles2/compatibility/"
+"disable_half_float], due to poor support for half-float vertex compression "
+"on many devices."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1224
msgid ""
-"If [code]true[/code] and available on the target device, enables high "
-"floating point precision for all shader computations in GLES2.\n"
+"If [code]true[/code] and available on the target Android device, enables "
+"high floating point precision for all shader computations in GLES2.\n"
"[b]Warning:[/b] High floating point precision can be extremely slow on older "
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1225
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1228
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1231
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1234
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -46172,7 +46638,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1237
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -46182,7 +46648,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1240
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -46191,7 +46657,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1243
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -46200,20 +46666,20 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1246
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1249
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1252
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -46222,7 +46688,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1255
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -46230,7 +46696,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1258
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -46239,7 +46705,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -46249,20 +46715,20 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1267
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1274
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -46271,13 +46737,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -46287,46 +46753,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1293
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1296
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1299
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1302
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1305
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -46336,7 +46802,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -46348,7 +46814,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -46356,7 +46822,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1316
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -46364,7 +46830,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -46373,7 +46839,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1323
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -46387,7 +46853,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1328
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -46397,7 +46863,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1331
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -46406,7 +46872,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1334
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -46416,54 +46882,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1337
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1340
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1343
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1346
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1349
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1352
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1355
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1358
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -46474,61 +46940,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1365
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1368
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1371
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1374
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1377
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1380
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1383
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1386
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -46539,7 +47005,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -46548,26 +47014,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1393 doc/classes/ProjectSettings.xml:1396
#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1405
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1408
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1411
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -46578,20 +47044,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1418
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -46603,52 +47069,52 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1428
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1435
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1438
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1441
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1444
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1447
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1450
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1453
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -46656,7 +47122,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -46666,10 +47132,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -46678,10 +47144,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -46690,10 +47156,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -46702,10 +47168,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -46714,10 +47180,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -47387,40 +47853,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr ""
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -47428,14 +47908,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -49771,6 +50251,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -49788,7 +50284,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -49796,11 +50292,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -49810,19 +50306,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -55252,20 +55748,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -55276,28 +55777,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -55309,19 +55810,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
@@ -58132,26 +58633,33 @@ msgid "Text [Color] used when the [ToolButton] is disabled."
msgstr ""
#: doc/classes/ToolButton.xml:39
-msgid "Text [Color] used when the [ToolButton] is being hovered."
+msgid ""
+"Text [Color] used when the [ToolButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/ToolButton.xml:42
-msgid "Text [Color] used when the [ToolButton] is being pressed."
+msgid "Text [Color] used when the [ToolButton] is being hovered."
msgstr ""
#: doc/classes/ToolButton.xml:45
-msgid "[StyleBox] used when the [ToolButton] is being hovered."
+msgid "Text [Color] used when the [ToolButton] is being pressed."
msgstr ""
#: doc/classes/ToolButton.xml:48
-msgid "The horizontal space between [ToolButton]'s icon and text."
+msgid "[StyleBox] used when the [ToolButton] is being hovered."
msgstr ""
#: doc/classes/ToolButton.xml:51
-msgid "Default [StyleBox] for the [ToolButton]."
+msgid "The horizontal space between [ToolButton]'s icon and text."
msgstr ""
#: doc/classes/ToolButton.xml:54
+msgid "Default [StyleBox] for the [ToolButton]."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:57
msgid "[StyleBox] used when the [ToolButton] is being pressed."
msgstr ""
@@ -60411,7 +60919,6 @@ msgid "Service type."
msgstr ""
#: modules/upnp/doc_classes/UPNPDevice.xml:66
-#, fuzzy
msgid "OK."
msgstr "OK."
@@ -60697,9 +61204,8 @@ msgstr ""
"Ritorna [code]true[/code] se il vettore è normalizzato, o falso altrimenti."
#: doc/classes/Vector2.xml:155 doc/classes/Vector3.xml:131
-#, fuzzy
msgid "Returns the length (magnitude) of this vector."
-msgstr "Restituisce la lunghezza (magnitudine) di questo vettore."
+msgstr "Restituisce la lunghezza di questo vettore."
#: doc/classes/Vector2.xml:161 doc/classes/Vector3.xml:137
msgid ""
@@ -70167,6 +70673,8 @@ msgid ""
"Gets the contents of a text node. This will raise an error in any other type "
"of node."
msgstr ""
+"Restituisce il contenuto del nodo di testo. Genera un errore se adoperato su "
+"un altro tipo di nodo."
#: doc/classes/XMLParser.xml:61
msgid ""
@@ -70174,6 +70682,8 @@ msgid ""
"current node type is neither [constant NODE_ELEMENT] nor [constant "
"NODE_ELEMENT_END]."
msgstr ""
+"Restituisce il nome del nodo corrente. Produce un errore se il nodo non "
+"appartiene a [constant NODE_ELEMENT] oppure a [constant NODE_ELEMENT_END]."
#: doc/classes/XMLParser.xml:67
msgid ""
@@ -70185,10 +70695,12 @@ msgstr ""
msgid ""
"Gets the type of the current node. Compare with [enum NodeType] constants."
msgstr ""
+"Restituisce il tipo del nodo attuale. Effettua il confronto adoperando le "
+"costanti [enum NodeType]."
#: doc/classes/XMLParser.xml:80
msgid "Check whether the current element has a certain attribute."
-msgstr ""
+msgstr "Verifica che l'elemento attuale abbia un certo attributo."
#: doc/classes/XMLParser.xml:86
msgid ""
@@ -70198,7 +70710,7 @@ msgstr ""
#: doc/classes/XMLParser.xml:93
msgid "Opens an XML file for parsing. This returns an error code."
-msgstr ""
+msgstr "Apre un file XML per effettuarne il parsing. Può restituire un errore."
#: doc/classes/XMLParser.xml:100
msgid "Opens an XML raw buffer for parsing. This returns an error code."
@@ -70234,23 +70746,23 @@ msgstr ""
#: doc/classes/XMLParser.xml:134
msgid "Text node."
-msgstr ""
+msgstr "Nodo Testo."
#: doc/classes/XMLParser.xml:137
msgid "Comment node."
-msgstr ""
+msgstr "Nodo Commento."
#: doc/classes/XMLParser.xml:140
msgid "CDATA content."
-msgstr ""
+msgstr "Contenuto CDATA."
#: doc/classes/XMLParser.xml:143
msgid "Unknown node."
-msgstr ""
+msgstr "Nodo sconosciuto."
#: doc/classes/YSort.xml:4
msgid "Sort all child nodes based on their Y positions."
-msgstr ""
+msgstr "Ordina tutti i nodi figli in base alla loro posizione Y."
#: doc/classes/YSort.xml:7
msgid ""
@@ -70262,6 +70774,12 @@ msgid ""
"the same space as the parent YSort, allowing to better organize a scene or "
"divide it in multiple ones, yet keep the unique sorting."
msgstr ""
+"Ordina tutti i nodi figli in base alla loro posizione Y. I nodi figli devono "
+"derivare da [CanvasItem]. I nodi con y maggiore saranno disegnati "
+"successivamente e quindi appariranno sopra gli altri. \n"
+"È possibile creare gerarchie di nodi ordinati rispetto all'asse Y. Nodi "
+"figli ordinati rispetto all'asse Y vengono organizzati rispetto "
+"all'ordinamento applicato al nodo padre."
#: doc/classes/YSort.xml:16
msgid ""
diff --git a/doc/translations/ja.po b/doc/translations/ja.po
index 370b853b00..a7a1436ccc 100644
--- a/doc/translations/ja.po
+++ b/doc/translations/ja.po
@@ -13,8 +13,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2021-09-27 16:04+0000\n"
-"Last-Translator: nitenook <admin@alterbaum.net>\n"
+"PO-Revision-Date: 2021-11-05 11:56+0000\n"
+"Last-Translator: Wataru Onuki <bettawat@yahoo.co.jp>\n"
"Language-Team: Japanese <https://hosted.weblate.org/projects/godot-engine/"
"godot-class-reference/ja/>\n"
"Language: ja\n"
@@ -24,43 +24,43 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 4.9-dev\n"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Description"
msgstr "説明"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Tutorials"
msgstr "ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Properties"
msgstr "プロパティ"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Methods"
msgstr "メソッド"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Theme Properties"
msgstr "テーマ プロパティ"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Signals"
msgstr "シグナル"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Enumerations"
msgstr "列挙型"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Constants"
msgstr "定数"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Property Descriptions"
msgstr "プロパティã®èª¬æ˜Ž"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Method Descriptions"
msgstr "メソッドã®èª¬æ˜Ž"
@@ -118,7 +118,6 @@ msgstr ""
"サãƒãƒ¼ãƒˆã•れる色ã®åå‰ã¯ [Color] ã«ã¦å®šæ•°ã¨ã—ã¦å®šç¾©ã•れã¦ã„ã‚‹ã‚‚ã®ã¨åŒæ§˜ã§ã™ã€‚"
#: modules/gdscript/doc_classes/@GDScript.xml:45
-#, fuzzy
msgid ""
"Returns the absolute value of parameter [code]s[/code] (i.e. positive "
"value).\n"
@@ -128,12 +127,10 @@ msgid ""
msgstr ""
"パラメータ [code]s[/code] ã®çµ¶å¯¾å€¤ (ã™ãªã‚ã¡æ­£ã®æ•°) ã‚’è¿”ã—ã¾ã™ã€‚\n"
"[codeblock]\n"
-"# a 㯠1 ã«\n"
-"a = abs(-1)\n"
+"a = abs(-1) # a 㯠1\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:55
-#, fuzzy
msgid ""
"Returns the arc cosine of [code]s[/code] in radians. Use to get the angle of "
"cosine [code]s[/code]. [code]s[/code] must be between [code]-1.0[/code] and "
@@ -145,7 +142,9 @@ msgid ""
"[/codeblock]"
msgstr ""
"[code]s[/code] ã®ã‚¢ãƒ¼ã‚¯ã‚³ã‚µã‚¤ãƒ³ã‚’ラジアンã§è¿”ã—ã¾ã™ã€‚コサイン [code]s[/code] "
-"ã®è§’度を得るã®ã«ä½¿ãˆã¾ã™ã€‚\n"
+"ã®è§’度を得るã®ã«ä½¿ãˆã¾ã™ã€‚ [code]s[/code] 㯠[code]-1.0[/code] ãŠã‚ˆã³ "
+"[code]1.0[/code] (ã‚’å«ã‚€) 範囲内ã€ãれ以外ã§ã¯ [method acos] 㯠[constant "
+"NAN] ã‚’è¿”ã—ã¾ã™ã€‚\n"
"[codeblock]\n"
"# c 㯠0.523599。rad2deg(s) ã§å¤‰æ›ã™ã‚Œã° 30 度。\n"
"c = acos(0.866025)\n"
@@ -460,6 +459,23 @@ msgid ""
"See also [method smoothstep]. If you need to perform more advanced "
"transitions, use [Tween] or [AnimationPlayer]."
msgstr ""
+"[code]curve[/code] ã§å®šç¾©ã•れãŸã‚¤ãƒ¼ã‚¸ãƒ³ã‚°é–¢æ•°ã«åŸºã¥ã„ã¦ã€[code]x[/code] ã®"
+"「イージングã•れãŸã€å€¤ã‚’è¿”ã—ã¾ã™ã€‚ã“ã®ã‚¤ãƒ¼ã‚¸ãƒ³ã‚°é–¢æ•°ã¯ã€æŒ‡æ•°ã«åŸºã¥ãã¾ã™ã€‚"
+"[code]curve[/code]ã¯ã„ã‹ãªã‚‹æµ®å‹•å°æ•°ç‚¹æ•°ã§ã‚‚指定ã§ãã€ç‰¹å®šã®å€¤ã§ä¸‹è¨˜ã®ã‚ˆã†ãª"
+"動作をã—ã¾ã™:\n"
+"[codeblock]\n"
+"- -1.0 未満: イーズインアウト\n"
+"- 1.0: ç›´ç·š\n"
+"- -1.0 è¶…ãˆã‹ã‚‰ 0.0 未満: イーズアウトイン\n"
+"- 0.0: ä¸å¤‰\n"
+"- 0.0 è¶…ãˆã‹ã‚‰ 1.0 未満: イーズイン\n"
+"- 1.0: ç›´ç·š\n"
+"- 1.0 è¶…ãˆ: イーズアウト\n"
+"[/codeblock]\n"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/"
+"ease_cheatsheet.png]ease() 曲線値ãƒãƒ¼ãƒˆã‚·ãƒ¼ãƒˆ[/url]\n"
+"[method smoothstep] ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。より高度ãªãƒˆãƒ©ãƒ³ã‚¸ã‚·ãƒ§ãƒ³ã‚’行ã†å¿…è¦ãŒ"
+"ã‚ã‚‹å ´åˆã¯ã€ [Tween] ã‚„ [AnimationPlayer] を使用ã—ã¦ãã ã•ã„。"
#: modules/gdscript/doc_classes/@GDScript.xml:274
msgid ""
@@ -4483,22 +4499,31 @@ msgstr ""
"ã“ã® [AABB] ãŒã‚‚ã†ã²ã¨ã¤ã‚’完全ã«å†…包ã™ã‚‹å ´åˆ [code]true[/code] ã‚’è¿”ã—ã¾ã™ã€‚"
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
-msgstr "与ãˆã‚‰ã‚ŒãŸãƒã‚¤ãƒ³ãƒˆã‚’å«ã‚€ã‚ˆã†æ‹¡å¤§ã—㟠[AABB] ã‚’è¿”ã—ã¾ã™ã€‚"
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
+msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr "[AABB] ã®ä½“ç©ã‚’è¿”ã—ã¾ã™ã€‚"
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr "空間ã«ã‚ã‚‹ [AABB] ã® 8 ãƒã‚¤ãƒ³ãƒˆã®ä½ç½®ã‚’è¿”ã—ã¾ã™ã€‚"
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr "[AABB] ã®æœ€é•·è»¸ã‚’æ­£è¦åŒ–ã—ã¦è¿”ã—ã¾ã™ã€‚"
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
@@ -4506,15 +4531,15 @@ msgstr ""
"[AABB] ã®æœ€é•·è»¸ã®ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã‚’è¿”ã—ã¾ã™ ([Vector3]ã® [code]AXIS_*[/code] 定数"
"ã«åŸºã¥ã)。"
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr "[AABB] ã®æœ€é•·è»¸ã®é•·ã•をスカラー数ã§è¿”ã—ã¾ã™ã€‚"
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr "[AABB] ã®æœ€çŸ­è»¸ã‚’æ­£è¦åŒ–ã—ã¦è¿”ã—ã¾ã™ã€‚"
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
@@ -4522,11 +4547,11 @@ msgstr ""
"[AABB] ã®æœ€çŸ­è»¸ã®ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã‚’è¿”ã—ã¾ã™ ([Vector3] ã® [code]AXIS_*[/code] 定"
"æ•°ã«åŸºã¥ã)。"
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr "[AABB] ã®æœ€çŸ­è»¸ã®é•·ã•をスカラー数ã§è¿”ã—ã¾ã™ã€‚"
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
@@ -4534,25 +4559,25 @@ msgstr ""
"指定ã—ãŸæ–¹å‘ã®ã‚µãƒãƒ¼ãƒˆãƒã‚¤ãƒ³ãƒˆã‚’è¿”ã—ã¾ã™ã€‚ã“れã¯ã€è¡çªæ¤œå‡ºã‚¢ãƒ«ã‚´ãƒªã‚ºãƒ å‘ã‘ã«"
"便利ã§ã™ã€‚"
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
msgstr "与ãˆã‚‰ã‚ŒãŸé‡ã ã‘免颿–¹å‘ã«æ‹¡å¤§ã—㟠[AABB] ã®ã‚³ãƒ”ーを返ã—ã¾ã™ã€‚"
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr "[AABB] ãŒå¹³å¦ã‚ã‚‹ã„ã¯ç©ºã§ã‚ã‚‹å ´åˆã« [code]true[/code] ã‚’è¿”ã—ã¾ã™ã€‚"
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr "[AABB] ãŒç©ºã§ã‚ã‚‹å ´åˆã« [code]true[/code] ã‚’è¿”ã—ã¾ã™ã€‚"
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr "[AABB] ãŒãƒã‚¤ãƒ³ãƒˆã‚’å«ã‚€å ´åˆã« [code]true[/code] ã‚’è¿”ã—ã¾ã™ã€‚"
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
@@ -4560,16 +4585,16 @@ msgstr ""
"2ã¤ã® [AABB] ã®äº¤å·®éƒ¨ã‚’è¿”ã—ã¾ã™ã€‚失敗ã—ãŸæ™‚ã¯ã€ç©ºã® AABB (大ãã• 0,0,0)ãŒè¿”り"
"ã¾ã™ã€‚"
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr ""
"ã“ã® [AABB] ãŒã‚‚ã†ä¸€æ–¹ã¨é‡ãªã£ã¦ã„ã‚‹ã¨ãã« [code]true[/code] ã‚’è¿”ã—ã¾ã™ã€‚"
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr "[AABB] ãŒç‰¹å®šã®å¹³é¢ã®ä¸¡å´ã«ã‚ã‚‹å ´åˆã€[code]true[/code] ã‚’è¿”ã—ã¾ã™ã€‚"
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
@@ -4577,7 +4602,7 @@ msgstr ""
"[code]from[/code] ã‹ã‚‰ [code]to[/code] ã¾ã§ã®ç·šåˆ†ã«ã“ã® [AABB] ãŒäº¤å·®ã—ã¦ã„れ"
"ã° [code]true[/code] ã‚’è¿”ã—ã¾ã™ã€‚"
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
@@ -4587,13 +4612,13 @@ msgstr ""
"ã™ã€‚ãれãžã‚Œã®ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆã§ [method @GDScript.is_equal_approx] ãŒå‘¼ã°ã‚Œã¾"
"ã™ã€‚"
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
"ã“ã® [AABB] 㨠[code]with[/code] を両方å«ã‚€ã€ã‚ˆã‚Šå¤§ã㪠[AABB] ã‚’è¿”ã—ã¾ã™ã€‚"
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
@@ -4601,11 +4626,11 @@ msgstr ""
"終端。ã“れ㯠[code]position + size[/code] ã¨ã—ã¦è¨ˆç®—ã•れã¾ã™ã€‚ã“ã®å€¤ã‚’変更ã™"
"ã‚‹ã¨ã€åŒæ™‚ã«å¤§ãã•も変ã‚りã¾ã™ã€‚"
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr "開始角。通常㯠[member end] よりも低ã„値をæŒã¡ã¾ã™ã€‚"
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
#, fuzzy
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
@@ -6039,7 +6064,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -7784,28 +7809,32 @@ msgstr "https://docs.godotengine.org/ja/latest/tutorials/vr/index.html"
#: doc/classes/Area.xml:17
#, fuzzy
msgid ""
-"Returns a list of intersecting [Area]s. For performance reasons (collisions "
-"are all processed at the same time) this list is modified once during the "
-"physics step, not immediately after objects are moved. Consider using "
-"signals instead."
+"Returns a list of intersecting [Area]s. The overlapping area's [member "
+"CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-"ç¾åœ¨äº¤å·®ã—ã¦ã„ã‚‹ [Area2D] ã®ãƒªã‚¹ãƒˆã‚’è¿”ã—ã¾ã™ã€‚性能上ã®ç†ç”±ã‹ã‚‰ (è¡çªã¯ã™ã¹ã¦"
-"åŒæ™‚ã«å‡¦ç†ã•れã¾ã™)ã€ã“ã®ãƒªã‚¹ãƒˆã¯ã‚ªãƒ–ジェクトãŒç§»å‹•ã—ãŸç›´å¾Œã§ã¯ãªãã€ç‰©ç†ã‚¹"
-"テップ中ã«ä¸€åº¦ã ã‘変更ã•れã¾ã™ã€‚代ã‚りã«ã‚·ã‚°ãƒŠãƒ«ã®ä½¿ç”¨ã‚’考ãˆã¦ãã ã•ã„。"
+"ç¾åœ¨äº¤å·®ã—ã¦ã„ã‚‹ [PhysicsBody2D] ã®ãƒªã‚¹ãƒˆã‚’è¿”ã—ã¾ã™ã€‚性能上ã®ç†ç”±ã‹ã‚‰ (è¡çªã¯"
+"ã™ã¹ã¦åŒæ™‚ã«å‡¦ç†ã•れã¾ã™)ã€ã“ã®ãƒªã‚¹ãƒˆã¯ã‚ªãƒ–ジェクトãŒç§»å‹•ã—ãŸç›´å¾Œã§ã¯ãªãã€ç‰©"
+"ç†ã‚¹ãƒ†ãƒƒãƒ—中ã«ä¸€åº¦ã ã‘変更ã•れã¾ã™ã€‚代ã‚りã«ã‚·ã‚°ãƒŠãƒ«ã®ä½¿ç”¨ã‚’考ãˆã¦ãã ã•ã„。"
-#: doc/classes/Area.xml:23
+#: doc/classes/Area.xml:24
#, fuzzy
msgid ""
-"Returns a list of intersecting [PhysicsBody]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody]s. The overlapping body's "
+"[member CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
"ç¾åœ¨äº¤å·®ã—ã¦ã„ã‚‹ [PhysicsBody2D] ã®ãƒªã‚¹ãƒˆã‚’è¿”ã—ã¾ã™ã€‚性能上ã®ç†ç”±ã‹ã‚‰ (è¡çªã¯"
"ã™ã¹ã¦åŒæ™‚ã«å‡¦ç†ã•れã¾ã™)ã€ã“ã®ãƒªã‚¹ãƒˆã¯ã‚ªãƒ–ジェクトãŒç§»å‹•ã—ãŸç›´å¾Œã§ã¯ãªãã€ç‰©"
"ç†ã‚¹ãƒ†ãƒƒãƒ—中ã«ä¸€åº¦ã ã‘変更ã•れã¾ã™ã€‚代ã‚りã«ã‚·ã‚°ãƒŠãƒ«ã®ä½¿ç”¨ã‚’考ãˆã¦ãã ã•ã„。"
-#: doc/classes/Area.xml:30
+#: doc/classes/Area.xml:32
#, fuzzy
msgid ""
"If [code]true[/code], the given area overlaps the Area.\n"
@@ -7819,7 +7848,7 @@ msgstr ""
"ん。性能ã®ãŸã‚ã«ã€ã‚ªãƒ¼ãƒãƒ¼ãƒ©ãƒƒãƒ—ã®ãƒªã‚¹ãƒˆã¯ãƒ•レームã”ã¨ã«ä¸€åº¦ã€ç‰©ç†ã‚¹ãƒ†ãƒƒãƒ—ã®"
"å‰ã«æ›´æ–°ã•れã¾ã™ã€‚代ã‚りã«ã‚·ã‚°ãƒŠãƒ«ã®ä½¿ç”¨ã‚’考ãˆã¦ãã ã•ã„。"
-#: doc/classes/Area.xml:38
+#: doc/classes/Area.xml:40
#, fuzzy
msgid ""
"If [code]true[/code], the given physics body overlaps the Area.\n"
@@ -7838,7 +7867,7 @@ msgstr ""
"定ã—ã¾ã™(GridMap自体ã¯ç‰©ç†ãƒœãƒ‡ã‚£ã§ã¯ã‚りã¾ã›ã‚“ãŒã€å®Ÿè³ªçš„ãªç‰©ç†ãƒœãƒ‡ã‚£ã¨ã—ã¦ã‚¿"
"イルã®ã‚³ãƒªã‚¸ãƒ§ãƒ³ã‚·ã‚§ã‚¤ãƒ—を登録ã—ã¦ã„ã¾ã™)。"
-#: doc/classes/Area.xml:46
+#: doc/classes/Area.xml:48
#, fuzzy
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
@@ -7850,18 +7879,18 @@ msgstr ""
"表ã—ã¾ã™ã€‚値ã®ç¯„囲㯠[code]0[/code] (減衰ãªã—) ã‹ã‚‰ [code]1[/code] (完全減"
"è¡°) ã§ã™ã€‚"
-#: doc/classes/Area.xml:50 doc/classes/Area2D.xml:52
+#: doc/classes/Area.xml:52 doc/classes/Area2D.xml:54
msgid "The name of the area's audio bus."
msgstr "エリアã®ã‚ªãƒ¼ãƒ‡ã‚£ã‚ªãƒã‚¹ã®åå‰ã§ã™ã€‚"
-#: doc/classes/Area.xml:53 doc/classes/Area2D.xml:55
+#: doc/classes/Area.xml:55 doc/classes/Area2D.xml:57
msgid ""
"If [code]true[/code], the area's audio bus overrides the default audio bus."
msgstr ""
"[code]true[/code] ã§ã‚れã°ã€ã“ã®ã‚¨ãƒªã‚¢ã®ã‚ªãƒ¼ãƒ‡ã‚£ã‚ªãƒã‚¹ã¯æ¨™æº–ã®ã‚ªãƒ¼ãƒ‡ã‚£ã‚ªãƒã‚¹"
"を上書ãã—ã¾ã™ã€‚"
-#: doc/classes/Area.xml:56
+#: doc/classes/Area.xml:58
#, fuzzy
msgid ""
"The area's gravity intensity (in meters per second squared). This value "
@@ -7871,7 +7900,7 @@ msgstr ""
"ã“ã®ã‚¨ãƒªã‚¢å†…ã§ã®é‡åŠ›ã®å¼·ã•ã§ã™ (範囲㯠-1024 ã‹ã‚‰ 1024)。ã“ã®å€¤ã§é‡åŠ›ãƒ™ã‚¯ãƒˆãƒ«"
"ã‚’ä¹—ç®—ã—ã¾ã™ã€‚ã“れã¯é‡åŠ›ã®æ–¹å‘を変ãˆãšã«é‡åŠ›ã®åŠ›ã‚’å¤‰ãˆã‚‹ã®ã«ä¾¿åˆ©ã§ã™ã€‚"
-#: doc/classes/Area.xml:59 doc/classes/Area2D.xml:61
+#: doc/classes/Area.xml:61 doc/classes/Area2D.xml:63
msgid ""
"The falloff factor for point gravity. The greater the value, the faster "
"gravity decreases with distance."
@@ -7879,7 +7908,7 @@ msgstr ""
"é‡åŠ›ç‚¹ã®æ¸›è¡°ä¿‚æ•°ã§ã™ã€‚値ãŒå¤§ãããªã‚‹ã»ã©ã€è·é›¢ã«ã‚ˆã‚‹é‡åŠ›ã®æ¸›å°‘ãŒæ—©ããªã‚Šã¾"
"ã™ã€‚"
-#: doc/classes/Area.xml:62 doc/classes/Area2D.xml:64
+#: doc/classes/Area.xml:64 doc/classes/Area2D.xml:66
msgid ""
"If [code]true[/code], gravity is calculated from a point (set via [member "
"gravity_vec]). See also [member space_override]."
@@ -7887,7 +7916,7 @@ msgstr ""
"[code]true[/code] ã§ã‚れã°ã€é‡åŠ›ã¯ç‰¹å®šã®ç‚¹ ([member gravity_vec] ã§è¨­å®š) ã‹ã‚‰"
"計算ã•れã¾ã™ã€‚[member space_override] ã‚‚å‚照。"
-#: doc/classes/Area.xml:65 doc/classes/Area2D.xml:67
+#: doc/classes/Area.xml:67 doc/classes/Area2D.xml:69
msgid ""
"The area's gravity vector (not normalized). If gravity is a point (see "
"[member gravity_point]), this will be the point of attraction."
@@ -7895,7 +7924,7 @@ msgstr ""
"ã“ã®ã‚¨ãƒªã‚¢ã®é‡åŠ›ãƒ™ã‚¯ãƒˆãƒ«ã§ã™ (未正è¦åŒ–)。もã—é‡åŠ›ãŒç‚¹ã§ã‚れ㰠([member "
"gravity_point] ã‚’å‚ç…§)ã€ã“れãŒé‡åŠ›ã®ç™ºç”Ÿåœ°ç‚¹ã«ãªã‚Šã¾ã™ã€‚"
-#: doc/classes/Area.xml:68
+#: doc/classes/Area.xml:70
#, fuzzy
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
@@ -7907,13 +7936,13 @@ msgstr ""
"ã¾ã™ã€‚値ã®ç¯„囲㯠[code]0[/code] (減衰ãªã—) ã‹ã‚‰ [code]1[/code] (完全減衰) ã§"
"ã™ã€‚"
-#: doc/classes/Area.xml:72 doc/classes/Area2D.xml:74
+#: doc/classes/Area.xml:74 doc/classes/Area2D.xml:76
msgid "If [code]true[/code], other monitoring areas can detect this area."
msgstr ""
"[code]true[/code] ã®ã¨ãã€ä»–ã®ãƒ¢ãƒ‹ã‚¿ãƒªãƒ³ã‚°ã—ã¦ã„るエリアãŒã“ã®ã‚¨ãƒªã‚¢ã‚’検出ã§"
"ãã¾ã™ã€‚"
-#: doc/classes/Area.xml:75 doc/classes/Area2D.xml:77
+#: doc/classes/Area.xml:77 doc/classes/Area2D.xml:79
msgid ""
"If [code]true[/code], the area detects bodies or areas entering and exiting "
"it."
@@ -7921,11 +7950,11 @@ msgstr ""
"[code]true[/code] ã®ã¨ãã€ã“ã®ã‚¨ãƒªã‚¢ã¯å…¥ã£ã¦ãã‚‹/出ã¦ã„ãボディやエリアを検出"
"ã—ã¾ã™ã€‚"
-#: doc/classes/Area.xml:78 doc/classes/Area2D.xml:80
+#: doc/classes/Area.xml:80 doc/classes/Area2D.xml:82
msgid "The area's priority. Higher priority areas are processed first."
msgstr "ã“ã®ã‚¨ãƒªã‚¢ã®å„ªå…ˆåº¦ã§ã™ã€‚高ã„優先度ã®ã‚¨ãƒªã‚¢ãŒå…ˆã«ãƒ—ロセスã•れã¾ã™ã€‚"
-#: doc/classes/Area.xml:81
+#: doc/classes/Area.xml:83
msgid ""
"The degree to which this area applies reverb to its associated audio. Ranges "
"from [code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
@@ -7933,16 +7962,16 @@ msgstr ""
"ã“ã®ã‚¨ãƒªã‚¢ãŒã€é–¢é€£ã™ã‚‹ã‚ªãƒ¼ãƒ‡ã‚£ã‚ªã«ãƒªãƒãƒ¼ãƒ–ã‚’é©ç”¨ã™ã‚‹åº¦åˆã„ã§ã™ã€‚範囲㯠"
"[code]0[/code] ã‹ã‚‰ [code]1[/code] ã¾ã§ã§ã€ç²¾åº¦ã¯ [code]0.1[/code] ã§ã™ã€‚"
-#: doc/classes/Area.xml:84
+#: doc/classes/Area.xml:86
msgid "If [code]true[/code], the area applies reverb to its associated audio."
msgstr ""
"[code]true[/code]ã®å ´åˆã€ã‚¨ãƒªã‚¢ã¯é–¢é€£ã™ã‚‹ã‚ªãƒ¼ãƒ‡ã‚£ã‚ªã«ãƒªãƒãƒ¼ãƒ–ã‚’é©ç”¨ã—ã¾ã™ã€‚"
-#: doc/classes/Area.xml:87
+#: doc/classes/Area.xml:89
msgid "The reverb bus name to use for this area's associated audio."
msgstr "ã“ã®ã‚¨ãƒªã‚¢ã®é–¢é€£ã‚ªãƒ¼ãƒ‡ã‚£ã‚ªã«ä½¿ç”¨ã™ã‚‹ã€ãƒªãƒãƒ¼ãƒ–ãƒã‚¹åã§ã™ã€‚"
-#: doc/classes/Area.xml:90
+#: doc/classes/Area.xml:92
msgid ""
"The degree to which this area's reverb is a uniform effect. Ranges from "
"[code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
@@ -7950,7 +7979,7 @@ msgstr ""
"ã“ã®ã‚¨ãƒªã‚¢ã®ãƒªãƒãƒ¼ãƒ–ãŒå‡ä¸€ãªåŠ¹æžœã‚’ç™ºæ®ã™ã‚‹åº¦åˆã„ã§ã™ã€‚[code]0[/code] ã‹ã‚‰ "
"[code]1[/code] ã¾ã§ã®ç¯„囲ã§ã€[code]0.1[/code] ã®ç²¾åº¦ã§è¨­å®šã—ã¾ã™ã€‚"
-#: doc/classes/Area.xml:93 doc/classes/Area2D.xml:83
+#: doc/classes/Area.xml:95 doc/classes/Area2D.xml:85
msgid ""
"Override mode for gravity and damping calculations within this area. See "
"[enum SpaceOverride] for possible values."
@@ -7958,21 +7987,21 @@ msgstr ""
"ã“ã®ã‚¨ãƒªã‚¢å†…ã«ãŠã‘ã‚‹é‡åŠ›ãƒ»æ¸›è¡°è¨ˆç®—ã®ã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰ãƒ¢ãƒ¼ãƒ‰ã§ã™ã€‚設定å¯èƒ½ãªå€¤ã¯"
"[enum SpaceOverride]ã‚’å‚ç…§ã—ã¦ãã ã•ã„。"
-#: doc/classes/Area.xml:100
+#: doc/classes/Area.xml:102
msgid ""
"Emitted when another Area enters this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
-#: doc/classes/Area.xml:107
+#: doc/classes/Area.xml:109
msgid ""
"Emitted when another Area exits this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
-#: doc/classes/Area.xml:117 doc/classes/Area.xml:130
+#: doc/classes/Area.xml:119 doc/classes/Area.xml:132
msgid ""
"Emitted when one of another Area's [Shape]s enters one of this Area's "
"[Shape]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -7987,7 +8016,7 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:140
+#: doc/classes/Area.xml:142
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] enters this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -7996,7 +8025,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:147
+#: doc/classes/Area.xml:149
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] exits this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -8005,7 +8034,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:157 doc/classes/Area.xml:170
+#: doc/classes/Area.xml:159 doc/classes/Area.xml:172
msgid ""
"Emitted when one of a [PhysicsBody] or [GridMap]'s [Shape]s enters one of "
"this Area's [Shape]s. Requires [member monitoring] to be set to [code]true[/"
@@ -8022,11 +8051,11 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:180 doc/classes/Area2D.xml:170
+#: doc/classes/Area.xml:182 doc/classes/Area2D.xml:172
msgid "This area does not affect gravity/damping."
msgstr "ã“ã®ã‚¨ãƒªã‚¢ã¯é‡åŠ›/減衰ã®ä½œç”¨ã‚’å—ã‘ã¾ã›ã‚“。"
-#: doc/classes/Area.xml:183 doc/classes/Area2D.xml:173
+#: doc/classes/Area.xml:185 doc/classes/Area2D.xml:175
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order)."
@@ -8034,7 +8063,7 @@ msgstr ""
"ã“ã®ã‚¨ãƒªã‚¢ã¯ã€ã“れã¾ã§ã«è¨ˆç®—ã•れãŸå€¤ã«é‡åŠ› / 減衰値を加算ã—ã¾ã™ ([member "
"priority] ã®é †)。"
-#: doc/classes/Area.xml:186 doc/classes/Area2D.xml:176
+#: doc/classes/Area.xml:188 doc/classes/Area2D.xml:178
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order), ignoring any lower priority areas."
@@ -8042,7 +8071,7 @@ msgstr ""
"ã“ã®ã‚¨ãƒªã‚¢ã¯ã€ã“れより優先度ã®ä½Žã„エリアを無視ã—ã¦ã€ã“れã¾ã§ã«è¨ˆç®—ã•れãŸã‚‚ã® "
"([member priority] ã®é †) ã«é‡åŠ› / 減衰値を加ãˆã¾ã™ã€‚"
-#: doc/classes/Area.xml:189 doc/classes/Area2D.xml:179
+#: doc/classes/Area.xml:191 doc/classes/Area2D.xml:181
msgid ""
"This area replaces any gravity/damping, even the defaults, ignoring any "
"lower priority areas."
@@ -8050,7 +8079,7 @@ msgstr ""
"ã“ã®ã‚¨ãƒªã‚¢ã¯ã€ã“れより優先度ã®ä½Žã„エリアを無視ã—ã¦ã€ãƒ‡ãƒ•ォルトã§ã‚ã£ã¦ã‚‚ã€é‡"
"力 / æ¸›è¡°å€¤ã‚’ç½®ãæ›ãˆã¾ã™ã€‚"
-#: doc/classes/Area.xml:192 doc/classes/Area2D.xml:182
+#: doc/classes/Area.xml:194 doc/classes/Area2D.xml:184
msgid ""
"This area replaces any gravity/damping calculated so far (in [member "
"priority] order), but keeps calculating the rest of the areas."
@@ -8095,28 +8124,34 @@ msgid "https://godotengine.org/asset-library/asset/120"
msgstr "https://docs.godotengine.org/ja/latest/tutorials/vr/index.html"
#: doc/classes/Area2D.xml:19
+#, fuzzy
msgid ""
-"Returns a list of intersecting [Area2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [Area2D]s. The overlapping area's [member "
+"CollisionObject2D.collision_layer] must be part of this area's [member "
+"CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
"ç¾åœ¨äº¤å·®ã—ã¦ã„ã‚‹ [Area2D] ã®ãƒªã‚¹ãƒˆã‚’è¿”ã—ã¾ã™ã€‚性能上ã®ç†ç”±ã‹ã‚‰ (è¡çªã¯ã™ã¹ã¦"
"åŒæ™‚ã«å‡¦ç†ã•れã¾ã™)ã€ã“ã®ãƒªã‚¹ãƒˆã¯ã‚ªãƒ–ジェクトãŒç§»å‹•ã—ãŸç›´å¾Œã§ã¯ãªãã€ç‰©ç†ã‚¹"
"テップ中ã«ä¸€åº¦ã ã‘変更ã•れã¾ã™ã€‚代ã‚りã«ã‚·ã‚°ãƒŠãƒ«ã®ä½¿ç”¨ã‚’考ãˆã¦ãã ã•ã„。"
-#: doc/classes/Area2D.xml:25
+#: doc/classes/Area2D.xml:26
+#, fuzzy
msgid ""
-"Returns a list of intersecting [PhysicsBody2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody2D]s. The overlapping body's "
+"[member CollisionObject2D.collision_layer] must be part of this area's "
+"[member CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
"ç¾åœ¨äº¤å·®ã—ã¦ã„ã‚‹ [PhysicsBody2D] ã®ãƒªã‚¹ãƒˆã‚’è¿”ã—ã¾ã™ã€‚性能上ã®ç†ç”±ã‹ã‚‰ (è¡çªã¯"
"ã™ã¹ã¦åŒæ™‚ã«å‡¦ç†ã•れã¾ã™)ã€ã“ã®ãƒªã‚¹ãƒˆã¯ã‚ªãƒ–ジェクトãŒç§»å‹•ã—ãŸç›´å¾Œã§ã¯ãªãã€ç‰©"
"ç†ã‚¹ãƒ†ãƒƒãƒ—中ã«ä¸€åº¦ã ã‘変更ã•れã¾ã™ã€‚代ã‚りã«ã‚·ã‚°ãƒŠãƒ«ã®ä½¿ç”¨ã‚’考ãˆã¦ãã ã•ã„。"
-#: doc/classes/Area2D.xml:32
+#: doc/classes/Area2D.xml:34
#, fuzzy
msgid ""
"If [code]true[/code], the given area overlaps the Area2D.\n"
@@ -8130,7 +8165,7 @@ msgstr ""
"ん。性能ã®ãŸã‚ã«ã€ã‚ªãƒ¼ãƒãƒ¼ãƒ©ãƒƒãƒ—ã®ãƒªã‚¹ãƒˆã¯ãƒ•レームã”ã¨ã«ä¸€åº¦ã€ç‰©ç†ã‚¹ãƒ†ãƒƒãƒ—ã®"
"å‰ã«æ›´æ–°ã•れã¾ã™ã€‚代ã‚りã«ã‚·ã‚°ãƒŠãƒ«ã®ä½¿ç”¨ã‚’考ãˆã¦ãã ã•ã„。"
-#: doc/classes/Area2D.xml:40
+#: doc/classes/Area2D.xml:42
#, fuzzy
msgid ""
"If [code]true[/code], the given physics body overlaps the Area2D.\n"
@@ -8150,7 +8185,7 @@ msgstr ""
"ã¾ã™ (TileMap自体ã¯ç‰©ç†ãƒœãƒ‡ã‚£ã§ã¯ã‚りã¾ã›ã‚“ãŒã€è¡çªã‚·ã‚§ã‚¤ãƒ—付ãã®ã‚¿ã‚¤ãƒ«ã‚’実際"
"ã®ç‰©ç†ãƒœãƒ‡ã‚£ã¨ã—ã¦ç™»éŒ²ã—ã¾ã™)。"
-#: doc/classes/Area2D.xml:48
+#: doc/classes/Area2D.xml:50
#, fuzzy
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
@@ -8162,7 +8197,7 @@ msgstr ""
"表ã—ã¾ã™ã€‚値ã®ç¯„囲㯠[code]0[/code] (減衰ãªã—) ã‹ã‚‰ [code]1[/code] (完全減"
"è¡°) ã§ã™ã€‚"
-#: doc/classes/Area2D.xml:58
+#: doc/classes/Area2D.xml:60
#, fuzzy
msgid ""
"The area's gravity intensity (in pixels per second squared). This value "
@@ -8172,7 +8207,7 @@ msgstr ""
"ã“ã®ã‚¨ãƒªã‚¢å†…ã§ã®é‡åŠ›ã®å¼·ã•ã§ã™ (範囲㯠-1024 ã‹ã‚‰ 1024)。ã“ã®å€¤ã§é‡åŠ›ãƒ™ã‚¯ãƒˆãƒ«"
"ã‚’ä¹—ç®—ã—ã¾ã™ã€‚ã“れã¯é‡åŠ›ã®æ–¹å‘を変ãˆãšã«é‡åŠ›ã®åŠ›ã‚’å¤‰ãˆã‚‹ã®ã«ä¾¿åˆ©ã§ã™ã€‚"
-#: doc/classes/Area2D.xml:70
+#: doc/classes/Area2D.xml:72
#, fuzzy
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
@@ -8184,21 +8219,21 @@ msgstr ""
"ã¾ã™ã€‚値ã®ç¯„囲㯠[code]0[/code] (減衰ãªã—) ã‹ã‚‰ [code]1[/code] (完全減衰) ã§"
"ã™ã€‚"
-#: doc/classes/Area2D.xml:90
+#: doc/classes/Area2D.xml:92
msgid ""
"Emitted when another Area2D enters this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-#: doc/classes/Area2D.xml:97
+#: doc/classes/Area2D.xml:99
msgid ""
"Emitted when another Area2D exits this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-#: doc/classes/Area2D.xml:107
+#: doc/classes/Area2D.xml:109
msgid ""
"Emitted when one of another Area2D's [Shape2D]s enters one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -8213,7 +8248,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:120
+#: doc/classes/Area2D.xml:122
msgid ""
"Emitted when one of another Area2D's [Shape2D]s exits one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -8228,7 +8263,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:130
+#: doc/classes/Area2D.xml:132
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] enters this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -8237,7 +8272,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:137
+#: doc/classes/Area2D.xml:139
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] exits this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -8246,7 +8281,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:147
+#: doc/classes/Area2D.xml:149
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s enters one "
"of this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -8265,7 +8300,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:160
+#: doc/classes/Area2D.xml:162
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s exits one of "
"this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -12606,42 +12641,47 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
"https://docs.godotengine.org/ja/latest/tutorials/3d/using_gridmaps.html"
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
-"no save path is provided it will try to match the path from the current "
+"no root node is provided, parent of this node will be used as root instead. "
+"If no save path is provided it will try to match the path from the current "
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -12655,63 +12695,63 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
#, fuzzy
msgid "The rotation of the baked custom sky."
msgstr "エリアã®ã‚ªãƒ¼ãƒ‡ã‚£ã‚ªãƒã‚¹ã®åå‰ã§ã™ã€‚"
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -12719,35 +12759,35 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -12755,13 +12795,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -12773,67 +12813,79 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr ""
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
#, fuzzy
msgid "Baking was successful."
msgstr "接続æˆåŠŸã€‚"
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr "ç¾åœ¨ã¯æœªä½¿ç”¨ã§ã™ã€‚"
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
#, fuzzy
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr "複数パラメータã®é€†ã‚¿ãƒ³ã‚¸ã‚§ãƒ³ãƒˆã‚’è¿”ã—ã¾ã™ã€‚"
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr ""
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:133
+#: doc/classes/BakedLightmap.xml:132
+msgid ""
+"Returns if lightmapper can't be created. Unless you are using a custom "
+"lightmapper, please report this as bug."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:135
+msgid ""
+"There is no root node to start baking from. Either provide [code]from_node[/"
+"code] argument or attach this node to a parent that should be used as root."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:136
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:139
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:142
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -13394,8 +13446,11 @@ msgstr "[code]true[/code]ã«ãªã£ã¦ã„るビットマップè¦ç´ ã®æ•°ã‚’è¿”ã
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -13731,7 +13786,7 @@ msgstr ""
#: doc/classes/Button.xml:4
msgid "Standard themed Button."
-msgstr "標準ã®ãƒ†ãƒ¼ãƒžãƒœã‚¿ãƒ³"
+msgstr "標準ã®ãƒ†ãƒ¼ãƒžãƒœã‚¿ãƒ³ã€‚"
#: doc/classes/Button.xml:7
msgid ""
@@ -13835,26 +13890,33 @@ msgid "Text [Color] used when the [Button] is disabled."
msgstr ""
#: doc/classes/Button.xml:77
-msgid "Text [Color] used when the [Button] is being hovered."
+msgid ""
+"Text [Color] used when the [Button] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/Button.xml:80
-msgid "Text [Color] used when the [Button] is being pressed."
+msgid "Text [Color] used when the [Button] is being hovered."
msgstr ""
#: doc/classes/Button.xml:83
-msgid "[StyleBox] used when the [Button] is being hovered."
+msgid "Text [Color] used when the [Button] is being pressed."
msgstr ""
#: doc/classes/Button.xml:86
-msgid "The horizontal space between [Button]'s icon and text."
+msgid "[StyleBox] used when the [Button] is being hovered."
msgstr ""
#: doc/classes/Button.xml:89
-msgid "Default [StyleBox] for the [Button]."
+msgid "The horizontal space between [Button]'s icon and text."
msgstr ""
#: doc/classes/Button.xml:92
+msgid "Default [StyleBox] for the [Button]."
+msgstr ""
+
+#: doc/classes/Button.xml:95
msgid "[StyleBox] used when the [Button] is being pressed."
msgstr ""
@@ -15338,80 +15400,96 @@ msgstr ""
msgid "The check icon to display when the [CheckBox] is checked."
msgstr ""
-#: doc/classes/CheckBox.xml:30
+#: doc/classes/CheckBox.xml:28
+msgid "The check icon to display when the [CheckBox] is checked and disabled."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:31
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is disabled."
msgstr ""
-#: doc/classes/CheckBox.xml:33
+#: doc/classes/CheckBox.xml:34
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is focused."
msgstr ""
-#: doc/classes/CheckBox.xml:36
+#: doc/classes/CheckBox.xml:37
msgid "The [Font] to use for the [CheckBox] text."
msgstr ""
-#: doc/classes/CheckBox.xml:39
+#: doc/classes/CheckBox.xml:40
msgid "The [CheckBox] text's font color."
msgstr ""
-#: doc/classes/CheckBox.xml:42
+#: doc/classes/CheckBox.xml:43
msgid "The [CheckBox] text's font color when it's disabled."
msgstr ""
-#: doc/classes/CheckBox.xml:45
+#: doc/classes/CheckBox.xml:46
+msgid ""
+"The [CheckBox] text's font color when it's focused. Only replaces the normal "
+"text color of the checkbox. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:49
msgid "The [CheckBox] text's font color when it's hovered."
msgstr ""
-#: doc/classes/CheckBox.xml:48
+#: doc/classes/CheckBox.xml:52
msgid "The [CheckBox] text's font color when it's hovered and pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:51
+#: doc/classes/CheckBox.xml:55
msgid "The [CheckBox] text's font color when it's pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:54
+#: doc/classes/CheckBox.xml:58
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered."
msgstr ""
-#: doc/classes/CheckBox.xml:57
+#: doc/classes/CheckBox.xml:61
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered and "
"pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:60
+#: doc/classes/CheckBox.xml:64
msgid "The separation between the check icon and the text (in pixels)."
msgstr ""
-#: doc/classes/CheckBox.xml:63 doc/classes/CheckButton.xml:58
+#: doc/classes/CheckBox.xml:67 doc/classes/CheckButton.xml:61
msgid "The [StyleBox] to display as a background."
msgstr ""
-#: doc/classes/CheckBox.xml:66
+#: doc/classes/CheckBox.xml:70
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:69
+#: doc/classes/CheckBox.xml:73
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is checked."
msgstr ""
-#: doc/classes/CheckBox.xml:74
+#: doc/classes/CheckBox.xml:78
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is unchecked."
msgstr ""
-#: doc/classes/CheckBox.xml:79
+#: doc/classes/CheckBox.xml:83
msgid "The check icon to display when the [CheckBox] is unchecked."
msgstr ""
+#: doc/classes/CheckBox.xml:86
+msgid ""
+"The check icon to display when the [CheckBox] is unchecked and disabled."
+msgstr ""
+
#: doc/classes/CheckButton.xml:4
msgid "Checkable button. See also [CheckBox]."
msgstr ""
@@ -15455,49 +15533,56 @@ msgid "The [CheckButton] text's font color when it's disabled."
msgstr ""
#: doc/classes/CheckButton.xml:40
-msgid "The [CheckButton] text's font color when it's hovered."
+msgid ""
+"The [CheckButton] text's font color when it's focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/CheckButton.xml:43
-msgid "The [CheckButton] text's font color when it's hovered and pressed."
+msgid "The [CheckButton] text's font color when it's hovered."
msgstr ""
#: doc/classes/CheckButton.xml:46
-msgid "The [CheckButton] text's font color when it's pressed."
+msgid "The [CheckButton] text's font color when it's hovered and pressed."
msgstr ""
#: doc/classes/CheckButton.xml:49
+msgid "The [CheckButton] text's font color when it's pressed."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:52
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered."
msgstr ""
-#: doc/classes/CheckButton.xml:52
+#: doc/classes/CheckButton.xml:55
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered "
"and pressed."
msgstr ""
-#: doc/classes/CheckButton.xml:55
+#: doc/classes/CheckButton.xml:58
msgid "The separation between the toggle icon and the text (in pixels)."
msgstr ""
-#: doc/classes/CheckButton.xml:61
+#: doc/classes/CheckButton.xml:64
msgid "The icon to display when the [CheckButton] is unchecked."
msgstr ""
-#: doc/classes/CheckButton.xml:64
+#: doc/classes/CheckButton.xml:67
msgid "The icon to display when the [CheckButton] is unchecked and disabled."
msgstr ""
-#: doc/classes/CheckButton.xml:67
+#: doc/classes/CheckButton.xml:70
msgid "The icon to display when the [CheckButton] is checked."
msgstr ""
-#: doc/classes/CheckButton.xml:70
+#: doc/classes/CheckButton.xml:73
msgid "The icon to display when the [CheckButton] is checked and disabled."
msgstr ""
-#: doc/classes/CheckButton.xml:73
+#: doc/classes/CheckButton.xml:76
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is pressed."
msgstr ""
@@ -17317,26 +17402,33 @@ msgid "Text [Color] used when the [ColorPickerButton] is disabled."
msgstr ""
#: doc/classes/ColorPickerButton.xml:80
-msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
+msgid ""
+"Text [Color] used when the [ColorPickerButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/ColorPickerButton.xml:83
-msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
+msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
msgstr ""
#: doc/classes/ColorPickerButton.xml:86
-msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
+msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
msgstr ""
#: doc/classes/ColorPickerButton.xml:89
-msgid "The horizontal space between [ColorPickerButton]'s icon and text."
+msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
msgstr ""
#: doc/classes/ColorPickerButton.xml:92
-msgid "Default [StyleBox] for the [ColorPickerButton]."
+msgid "The horizontal space between [ColorPickerButton]'s icon and text."
msgstr ""
#: doc/classes/ColorPickerButton.xml:95
+msgid "Default [StyleBox] for the [ColorPickerButton]."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:98
msgid "[StyleBox] used when the [ColorPickerButton] is being pressed."
msgstr ""
@@ -22651,7 +22743,8 @@ msgid ""
"get_resource_type]. They may optionally specify some import presets that "
"affect the import process. EditorImportPlugins are responsible for creating "
"the resources and saving them in the [code].import[/code] directory (see "
-"[member ProjectSettings.application/config/project_data_dir_name]).\n"
+"[member ProjectSettings.application/config/"
+"use_hidden_project_data_directory]).\n"
"Below is an example EditorImportPlugin that imports a [Mesh] from a file "
"with the extension \".special\" or \".spec\":\n"
"[codeblock]\n"
@@ -22778,7 +22871,7 @@ msgstr ""
msgid ""
"Gets the extension used to save this resource in the [code].import[/code] "
"directory (see [member ProjectSettings.application/config/"
-"project_data_dir_name])."
+"use_hidden_project_data_directory])."
msgstr ""
#: doc/classes/EditorImportPlugin.xml:130
@@ -23823,10 +23916,12 @@ msgstr ""
msgid "Emitted when the value of the edited resource was changed."
msgstr "オーディオå†ç”ŸãŒåœæ­¢ã—ãŸã¨ãã«ç™ºä¿¡ã•れã¾ã™ã€‚"
-#: doc/classes/EditorResourcePicker.xml:89
-#, fuzzy
-msgid "Emitted when the resource value was set and user clicked to edit it."
-msgstr "インスペクタã§ãƒªã‚½ãƒ¼ã‚¹ãŒé¸æŠžã•れãŸã¨ãã«ç™ºä¿¡ã€‚"
+#: doc/classes/EditorResourcePicker.xml:90
+msgid ""
+"Emitted when the resource value was set and user clicked to edit it. When "
+"[code]edit[/code] is [code]true[/code], the signal was caused by the context "
+"menu \"Edit\" option."
+msgstr ""
#: doc/classes/EditorResourcePreview.xml:4
msgid "Helper to generate previews of resources or files."
@@ -27594,10 +27689,21 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
@@ -27612,12 +27718,12 @@ msgstr ""
"[member ProjectSettings.rendering/quality/gi_probes/quality]ã§ãƒ—ローブã®å“質"
"を下ã’れã°ã€ãƒ‘フォーマンスをå‘上ã•ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr "https://docs.godotengine.org/ja/latest/tutorials/3d/gi_probes.html"
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -27626,14 +27732,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -27643,81 +27753,81 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
#, fuzzy
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
msgstr "[code]true[/code] ã®å ´åˆã€åå°„ã«ãŠã‘る空ã®å¯„与ãŒç„¡è¦–ã•れã¾ã™ã€‚"
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
msgstr ""
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr ""
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -30504,16 +30614,18 @@ msgstr ""
#: doc/classes/Image.xml:436
msgid ""
"OpenGL texture format [code]RED[/code] with a single component and a "
-"bitdepth of 8."
+"bitdepth of 8.\n"
+"[b]Note:[/b] When using the GLES2 backend, this uses the alpha channel "
+"instead of the red channel for storage."
msgstr ""
-#: doc/classes/Image.xml:439
+#: doc/classes/Image.xml:440
msgid ""
"OpenGL texture format [code]RG[/code] with two components and a bitdepth of "
"8 for each."
msgstr ""
-#: doc/classes/Image.xml:442
+#: doc/classes/Image.xml:443
msgid ""
"OpenGL texture format [code]RGB[/code] with three components, each with a "
"bitdepth of 8.\n"
@@ -30521,7 +30633,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:446
+#: doc/classes/Image.xml:447
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 8.\n"
@@ -30529,73 +30641,73 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:450
+#: doc/classes/Image.xml:451
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 4."
msgstr ""
-#: doc/classes/Image.xml:453
+#: doc/classes/Image.xml:454
msgid ""
"OpenGL texture format [code]GL_RGB5_A1[/code] where 5 bits of depth for each "
"component of RGB and one bit for alpha."
msgstr ""
-#: doc/classes/Image.xml:456
+#: doc/classes/Image.xml:457
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 32-"
"bit floating-point value."
msgstr ""
-#: doc/classes/Image.xml:459
+#: doc/classes/Image.xml:460
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:462
+#: doc/classes/Image.xml:463
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:465
+#: doc/classes/Image.xml:466
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:468
+#: doc/classes/Image.xml:469
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 16-"
"bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:471
+#: doc/classes/Image.xml:472
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:474
+#: doc/classes/Image.xml:475
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:477
+#: doc/classes/Image.xml:478
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:480
+#: doc/classes/Image.xml:481
msgid ""
"A special OpenGL texture format where the three color components have 9 bits "
"of precision and all three share a single 5-bit exponent."
msgstr ""
-#: doc/classes/Image.xml:483
+#: doc/classes/Image.xml:484
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 1, and is the smallest variation "
@@ -30605,7 +30717,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:487
+#: doc/classes/Image.xml:488
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 2, and color data is interpreted "
@@ -30615,7 +30727,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:491
+#: doc/classes/Image.xml:492
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format also known as Block Compression 3 or BC3 that contains 64 "
@@ -30626,7 +30738,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:495
+#: doc/classes/Image.xml:496
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -30634,7 +30746,7 @@ msgid ""
"DXT5 uses for the alpha channel."
msgstr ""
-#: doc/classes/Image.xml:498
+#: doc/classes/Image.xml:499
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -30642,7 +30754,7 @@ msgid ""
"algorithm that DXT5 uses for the alpha channel."
msgstr ""
-#: doc/classes/Image.xml:501
+#: doc/classes/Image.xml:502
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned normalized "
@@ -30651,21 +30763,21 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:505
+#: doc/classes/Image.xml:506
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with signed floating-point "
"RGB components."
msgstr ""
-#: doc/classes/Image.xml:508
+#: doc/classes/Image.xml:509
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned floating-point "
"RGB components."
msgstr ""
-#: doc/classes/Image.xml:511
+#: doc/classes/Image.xml:512
msgid ""
"Texture format used on PowerVR-supported mobile platforms, uses 2-bit color "
"depth with no alpha. More information can be found [url=https://en.wikipedia."
@@ -30674,25 +30786,25 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:515
+#: doc/classes/Image.xml:516
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with an "
"alpha component."
msgstr ""
-#: doc/classes/Image.xml:518
+#: doc/classes/Image.xml:519
msgid ""
"Similar to [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with 4-"
"bit color depth and no alpha."
msgstr ""
-#: doc/classes/Image.xml:521
+#: doc/classes/Image.xml:522
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC4[/url], but with an "
"alpha component."
msgstr ""
-#: doc/classes/Image.xml:524
+#: doc/classes/Image.xml:525
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC1]Ericsson Texture Compression format 1[/"
@@ -30700,7 +30812,7 @@ msgid ""
"standard. This format cannot store an alpha channel."
msgstr ""
-#: doc/classes/Image.xml:527
+#: doc/classes/Image.xml:528
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -30708,7 +30820,7 @@ msgid ""
"unsigned data."
msgstr ""
-#: doc/classes/Image.xml:530
+#: doc/classes/Image.xml:531
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -30716,7 +30828,7 @@ msgid ""
"channel of signed data."
msgstr ""
-#: doc/classes/Image.xml:533
+#: doc/classes/Image.xml:534
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -30724,7 +30836,7 @@ msgid ""
"of unsigned data."
msgstr ""
-#: doc/classes/Image.xml:536
+#: doc/classes/Image.xml:537
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -30732,7 +30844,7 @@ msgid ""
"channels of signed data."
msgstr ""
-#: doc/classes/Image.xml:539
+#: doc/classes/Image.xml:540
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -30742,7 +30854,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:543
+#: doc/classes/Image.xml:544
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -30752,7 +30864,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:547
+#: doc/classes/Image.xml:548
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -30763,31 +30875,31 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:551
+#: doc/classes/Image.xml:552
msgid "Represents the size of the [enum Format] enum."
msgstr ""
-#: doc/classes/Image.xml:554
+#: doc/classes/Image.xml:555
msgid ""
"Performs nearest-neighbor interpolation. If the image is resized, it will be "
"pixelated."
msgstr ""
-#: doc/classes/Image.xml:557
+#: doc/classes/Image.xml:558
msgid ""
"Performs bilinear interpolation. If the image is resized, it will be blurry. "
"This mode is faster than [constant INTERPOLATE_CUBIC], but it results in "
"lower quality."
msgstr ""
-#: doc/classes/Image.xml:560
+#: doc/classes/Image.xml:561
msgid ""
"Performs cubic interpolation. If the image is resized, it will be blurry. "
"This mode often gives better results compared to [constant "
"INTERPOLATE_BILINEAR], at the cost of being slower."
msgstr ""
-#: doc/classes/Image.xml:563
+#: doc/classes/Image.xml:564
msgid ""
"Performs bilinear separately on the two most-suited mipmap levels, then "
"linearly interpolates between them.\n"
@@ -30802,55 +30914,55 @@ msgid ""
"a new set will be generated for the resulting image."
msgstr ""
-#: doc/classes/Image.xml:570
+#: doc/classes/Image.xml:571
msgid ""
"Performs Lanczos interpolation. This is the slowest image resizing mode, but "
"it typically gives the best results, especially when downscalng images."
msgstr ""
-#: doc/classes/Image.xml:573
+#: doc/classes/Image.xml:574
msgid "Image does not have alpha."
msgstr ""
-#: doc/classes/Image.xml:576
+#: doc/classes/Image.xml:577
msgid "Image stores alpha in a single bit."
msgstr ""
-#: doc/classes/Image.xml:579
+#: doc/classes/Image.xml:580
msgid "Image uses alpha."
msgstr ""
-#: doc/classes/Image.xml:582
+#: doc/classes/Image.xml:583
msgid "Use S3TC compression."
msgstr ""
-#: doc/classes/Image.xml:585
+#: doc/classes/Image.xml:586
msgid "Use PVRTC2 compression."
msgstr ""
-#: doc/classes/Image.xml:588
+#: doc/classes/Image.xml:589
msgid "Use PVRTC4 compression."
msgstr ""
-#: doc/classes/Image.xml:591
+#: doc/classes/Image.xml:592
msgid "Use ETC compression."
msgstr ""
-#: doc/classes/Image.xml:594
+#: doc/classes/Image.xml:595
msgid "Use ETC2 compression."
msgstr ""
-#: doc/classes/Image.xml:597
+#: doc/classes/Image.xml:598
msgid ""
"Source texture (before compression) is a regular texture. Default for all "
"textures."
msgstr ""
-#: doc/classes/Image.xml:600
+#: doc/classes/Image.xml:601
msgid "Source texture (before compression) is in sRGB space."
msgstr ""
-#: doc/classes/Image.xml:603
+#: doc/classes/Image.xml:604
msgid ""
"Source texture (before compression) is a normal texture (e.g. it can be "
"compressed into two channels)."
@@ -31077,6 +31189,17 @@ msgstr ""
#: doc/classes/Input.xml:43
msgid ""
+"Sends all input events which are in the current buffer to the game loop. "
+"These events may have been buffered as a result of accumulated input "
+"([method set_use_accumulated_input]) or agile input flushing ([member "
+"ProjectSettings.input_devices/buffering/agile_event_flushing]).\n"
+"The engine will already do this itself at key execution points (at least "
+"once per frame). However, this can be useful in advanced cases where you "
+"want precise control over the timing of event handling."
+msgstr ""
+
+#: doc/classes/Input.xml:50
+msgid ""
"Returns the acceleration of the device's accelerometer sensor, if the device "
"has one. Otherwise, the method returns [constant Vector3.ZERO].\n"
"Note this method returns an empty [Vector3] when running from the editor "
@@ -31088,7 +31211,7 @@ msgid ""
"the Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:53
+#: doc/classes/Input.xml:60
msgid ""
"Returns a value between 0 and 1 representing the raw intensity of the given "
"action, ignoring the action's deadzone. In most cases, you should use "
@@ -31098,7 +31221,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:62
+#: doc/classes/Input.xml:69
msgid ""
"Returns a value between 0 and 1 representing the intensity of the given "
"action. In a joypad, for example, the further away the axis (analog sticks "
@@ -31110,7 +31233,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:71
+#: doc/classes/Input.xml:78
msgid ""
"Get axis input by specifying two actions, one negative and one positive.\n"
"This is a shorthand for writing [code]Input."
@@ -31118,17 +31241,17 @@ msgid ""
"get_action_strength(\"negative_action\")[/code]."
msgstr ""
-#: doc/classes/Input.xml:78
+#: doc/classes/Input.xml:85
msgid ""
"Returns an [Array] containing the device IDs of all currently connected "
"joypads."
msgstr ""
-#: doc/classes/Input.xml:84
+#: doc/classes/Input.xml:91
msgid "Returns the currently assigned cursor shape (see [enum CursorShape])."
msgstr ""
-#: doc/classes/Input.xml:90
+#: doc/classes/Input.xml:97
msgid ""
"Returns the gravity of the device's accelerometer sensor, if the device has "
"one. Otherwise, the method returns [constant Vector3.ZERO].\n"
@@ -31138,7 +31261,7 @@ msgid ""
"Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:97
+#: doc/classes/Input.xml:104
msgid ""
"Returns the rotation rate in rad/s around a device's X, Y, and Z axes of the "
"gyroscope sensor, if the device has one. Otherwise, the method returns "
@@ -31147,53 +31270,53 @@ msgid ""
"it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:106
+#: doc/classes/Input.xml:113
msgid ""
"Returns the current value of the joypad axis at given index (see [enum "
"JoystickList])."
msgstr ""
-#: doc/classes/Input.xml:113
+#: doc/classes/Input.xml:120
msgid "Returns the index of the provided axis name."
msgstr ""
-#: doc/classes/Input.xml:120
+#: doc/classes/Input.xml:127
msgid ""
"Receives a [enum JoystickList] axis and returns its equivalent name as a "
"string."
msgstr ""
-#: doc/classes/Input.xml:127
+#: doc/classes/Input.xml:134
msgid "Returns the index of the provided button name."
msgstr ""
-#: doc/classes/Input.xml:134
+#: doc/classes/Input.xml:141
msgid ""
"Receives a gamepad button from [enum JoystickList] and returns its "
"equivalent name as a string."
msgstr ""
-#: doc/classes/Input.xml:141
+#: doc/classes/Input.xml:148
msgid ""
"Returns a SDL2-compatible device GUID on platforms that use gamepad "
"remapping. Returns [code]\"Default Gamepad\"[/code] otherwise."
msgstr ""
-#: doc/classes/Input.xml:148
+#: doc/classes/Input.xml:155
msgid "Returns the name of the joypad at the specified device index."
msgstr ""
-#: doc/classes/Input.xml:155
+#: doc/classes/Input.xml:162
msgid "Returns the duration of the current vibration effect in seconds."
msgstr ""
-#: doc/classes/Input.xml:162
+#: doc/classes/Input.xml:169
msgid ""
"Returns the strength of the joypad vibration: x is the strength of the weak "
"motor, and y is the strength of the strong motor."
msgstr ""
-#: doc/classes/Input.xml:168
+#: doc/classes/Input.xml:175
msgid ""
"Returns the mouse speed for the last time the cursor was moved, and this "
"until the next frame where the mouse moves. This means that even if the "
@@ -31201,7 +31324,7 @@ msgid ""
"motion."
msgstr ""
-#: doc/classes/Input.xml:174
+#: doc/classes/Input.xml:181
msgid ""
"Returns the magnetic field strength in micro-Tesla for all axes of the "
"device's magnetometer sensor, if the device has one. Otherwise, the method "
@@ -31210,17 +31333,17 @@ msgid ""
"platforms, it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:181
+#: doc/classes/Input.xml:188
msgid ""
"Returns mouse buttons as a bitmask. If multiple mouse buttons are pressed at "
"the same time, the bits are added together."
msgstr ""
-#: doc/classes/Input.xml:187
+#: doc/classes/Input.xml:194
msgid "Returns the mouse mode. See the constants for more information."
msgstr ""
-#: doc/classes/Input.xml:198
+#: doc/classes/Input.xml:205
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -31233,7 +31356,7 @@ msgid ""
"want (on the range of 0 to 1)."
msgstr ""
-#: doc/classes/Input.xml:208
+#: doc/classes/Input.xml:215
msgid ""
"Returns [code]true[/code] when the user starts pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user pressed down "
@@ -31245,7 +31368,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:218
+#: doc/classes/Input.xml:225
msgid ""
"Returns [code]true[/code] when the user stops pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user released the "
@@ -31255,7 +31378,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:227
+#: doc/classes/Input.xml:234
msgid ""
"Returns [code]true[/code] if you are pressing the action event. Note that if "
"an action has multiple buttons assigned and more than one of them is "
@@ -31266,7 +31389,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:236
+#: doc/classes/Input.xml:243
#, fuzzy
msgid ""
"Returns [code]true[/code] if you are pressing the joypad button (see [enum "
@@ -31275,7 +31398,7 @@ msgstr ""
"インデックス [code]button[/code] ã®ãƒœã‚¿ãƒ³ãŒæŠ¼ã•れãŸå ´åˆã€[code]true[/code] ã‚’"
"è¿”ã—ã¾ã™ã€‚[enum JoyButtonList] ã‚’å‚ç…§ã—ã¦ãã ã•ã„。"
-#: doc/classes/Input.xml:243
+#: doc/classes/Input.xml:250
msgid ""
"Returns [code]true[/code] if the system knows the specified device. This "
"means that it sets all button and axis indices exactly as defined in [enum "
@@ -31283,7 +31406,7 @@ msgid ""
"but you can still retrieve events from them."
msgstr ""
-#: doc/classes/Input.xml:250
+#: doc/classes/Input.xml:257
#, fuzzy
msgid ""
"Returns [code]true[/code] if you are pressing the key. You can pass a [enum "
@@ -31292,13 +31415,13 @@ msgstr ""
"ボタン内ã«ãƒžã‚¦ã‚¹ãŒå…¥ã‚Šã€ã¾ã ãƒœã‚¿ãƒ³ã‹ã‚‰é›¢ã‚Œã¦ã„ãªã„å ´åˆã« [code]true[/code] ã‚’"
"è¿”ã—ã¾ã™ã€‚"
-#: doc/classes/Input.xml:257
+#: doc/classes/Input.xml:264
msgid ""
"Returns [code]true[/code] if you are pressing the mouse button specified "
"with [enum ButtonList]."
msgstr ""
-#: doc/classes/Input.xml:267
+#: doc/classes/Input.xml:274
msgid ""
"Notifies the [Input] singleton that a connection has changed, to update the "
"state for the [code]device[/code] index.\n"
@@ -31307,7 +31430,7 @@ msgid ""
"triggered internally."
msgstr ""
-#: doc/classes/Input.xml:275
+#: doc/classes/Input.xml:282
msgid ""
"Feeds an [InputEvent] to the game. Can be used to artificially trigger input "
"events from code. Also generates [method Node._input] calls.\n"
@@ -31320,12 +31443,21 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Input.xml:289
+#: doc/classes/Input.xml:296
msgid ""
"Removes all mappings from the internal database that match the given GUID."
msgstr ""
-#: doc/classes/Input.xml:298
+#: doc/classes/Input.xml:303
+msgid ""
+"Sets the acceleration value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:313
msgid ""
"Sets a custom mouse cursor image, which is only visible inside the game "
"window. The hotspot can also be specified. Passing [code]null[/code] to the "
@@ -31340,7 +31472,7 @@ msgid ""
"compression mode can't be used for custom cursors."
msgstr ""
-#: doc/classes/Input.xml:309
+#: doc/classes/Input.xml:324
msgid ""
"Sets the default cursor shape to be used in the viewport instead of "
"[constant CURSOR_ARROW].\n"
@@ -31350,11 +31482,38 @@ msgid ""
"cursor immediately."
msgstr ""
-#: doc/classes/Input.xml:318
+#: doc/classes/Input.xml:333
+msgid ""
+"Sets the gravity value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:341
+msgid ""
+"Sets the value of the rotation rate of the gyroscope sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:349
+msgid ""
+"Sets the value of the magnetic field of the magnetometer sensor. Can be used "
+"for debugging on devices without a hardware sensor, for example in an editor "
+"on a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:357
msgid "Sets the mouse mode. See the constants for more information."
msgstr ""
-#: doc/classes/Input.xml:325
+#: doc/classes/Input.xml:364
msgid ""
"Enables or disables the accumulation of similar input events sent by the "
"operating system. When input accumulation is enabled, all input events "
@@ -31368,7 +31527,7 @@ msgid ""
"results that closely follow the actual input."
msgstr ""
-#: doc/classes/Input.xml:336
+#: doc/classes/Input.xml:375
msgid ""
"Starts to vibrate the joypad. Joypads usually come with two rumble motors, a "
"strong and a weak one. [code]weak_magnitude[/code] is the strength of the "
@@ -31381,34 +31540,34 @@ msgid ""
"few seconds."
msgstr ""
-#: doc/classes/Input.xml:344
+#: doc/classes/Input.xml:383
msgid "Stops the vibration of the joypad."
msgstr ""
-#: doc/classes/Input.xml:351
+#: doc/classes/Input.xml:390
msgid ""
"Vibrate Android and iOS devices.\n"
"[b]Note:[/b] It needs [code]VIBRATE[/code] permission for Android at export "
"settings. iOS does not support duration."
msgstr ""
-#: doc/classes/Input.xml:359
+#: doc/classes/Input.xml:398
msgid "Sets the mouse position to the specified vector."
msgstr ""
-#: doc/classes/Input.xml:368
+#: doc/classes/Input.xml:407
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
-#: doc/classes/Input.xml:374
+#: doc/classes/Input.xml:413
msgid "Makes the mouse cursor visible if it is hidden."
msgstr ""
-#: doc/classes/Input.xml:377
+#: doc/classes/Input.xml:416
msgid "Makes the mouse cursor hidden if it is visible."
msgstr ""
-#: doc/classes/Input.xml:380
+#: doc/classes/Input.xml:419
msgid ""
"Captures the mouse. The mouse will be hidden and its position locked at the "
"center of the screen.\n"
@@ -31416,83 +31575,83 @@ msgid ""
"need to use [member InputEventMouseMotion.relative]."
msgstr ""
-#: doc/classes/Input.xml:384
+#: doc/classes/Input.xml:423
msgid "Makes the mouse cursor visible but confines it to the game window."
msgstr ""
-#: doc/classes/Input.xml:387
+#: doc/classes/Input.xml:426
msgid "Arrow cursor. Standard, default pointing cursor."
msgstr ""
-#: doc/classes/Input.xml:390
+#: doc/classes/Input.xml:429
msgid ""
"I-beam cursor. Usually used to show where the text cursor will appear when "
"the mouse is clicked."
msgstr ""
-#: doc/classes/Input.xml:393
+#: doc/classes/Input.xml:432
msgid ""
"Pointing hand cursor. Usually used to indicate the pointer is over a link or "
"other interactable item."
msgstr ""
-#: doc/classes/Input.xml:396
+#: doc/classes/Input.xml:435
msgid ""
"Cross cursor. Typically appears over regions in which a drawing operation "
"can be performed or for selections."
msgstr ""
-#: doc/classes/Input.xml:399
+#: doc/classes/Input.xml:438
msgid ""
"Wait cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application is still usable during the "
"operation."
msgstr ""
-#: doc/classes/Input.xml:402
+#: doc/classes/Input.xml:441
msgid ""
"Busy cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application isn't usable during the "
"operation (e.g. something is blocking its main thread)."
msgstr ""
-#: doc/classes/Input.xml:405
+#: doc/classes/Input.xml:444
msgid "Drag cursor. Usually displayed when dragging something."
msgstr ""
-#: doc/classes/Input.xml:408
+#: doc/classes/Input.xml:447
msgid ""
"Can drop cursor. Usually displayed when dragging something to indicate that "
"it can be dropped at the current position."
msgstr ""
-#: doc/classes/Input.xml:411
+#: doc/classes/Input.xml:450
msgid ""
"Forbidden cursor. Indicates that the current action is forbidden (for "
"example, when dragging something) or that the control at a position is "
"disabled."
msgstr ""
-#: doc/classes/Input.xml:414
+#: doc/classes/Input.xml:453
msgid ""
"Vertical resize mouse cursor. A double-headed vertical arrow. It tells the "
"user they can resize the window or the panel vertically."
msgstr ""
-#: doc/classes/Input.xml:417
+#: doc/classes/Input.xml:456
msgid ""
"Horizontal resize mouse cursor. A double-headed horizontal arrow. It tells "
"the user they can resize the window or the panel horizontally."
msgstr ""
-#: doc/classes/Input.xml:420
+#: doc/classes/Input.xml:459
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the bottom left to the top right. It tells the user they can resize the "
"window or the panel both horizontally and vertically."
msgstr ""
-#: doc/classes/Input.xml:423
+#: doc/classes/Input.xml:462
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the top left to the bottom right, the opposite of [constant "
@@ -31500,23 +31659,23 @@ msgid ""
"both horizontally and vertically."
msgstr ""
-#: doc/classes/Input.xml:426
+#: doc/classes/Input.xml:465
msgid "Move cursor. Indicates that something can be moved."
msgstr ""
-#: doc/classes/Input.xml:429
+#: doc/classes/Input.xml:468
msgid ""
"Vertical split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_VSIZE]."
msgstr ""
-#: doc/classes/Input.xml:432
+#: doc/classes/Input.xml:471
msgid ""
"Horizontal split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_HSIZE]."
msgstr ""
-#: doc/classes/Input.xml:435
+#: doc/classes/Input.xml:474
msgid "Help cursor. Usually a question mark."
msgstr ""
@@ -31932,7 +32091,9 @@ msgid "The drag position."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -33273,7 +33434,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -33338,22 +33500,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -33368,7 +33532,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -33376,19 +33540,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -33459,7 +33623,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -33517,7 +33682,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -34816,14 +34983,21 @@ msgid "Default text [Color] of the [LinkButton]."
msgstr ""
#: doc/classes/LinkButton.xml:46
-msgid "Text [Color] used when the [LinkButton] is being hovered."
+msgid ""
+"Text [Color] used when the [LinkButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/LinkButton.xml:49
-msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgid "Text [Color] used when the [LinkButton] is being hovered."
msgstr ""
#: doc/classes/LinkButton.xml:52
+msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:55
msgid "The vertical space between the baseline of text and the underline."
msgstr ""
@@ -35317,26 +35491,33 @@ msgid "Text [Color] used when the [MenuButton] is disabled."
msgstr ""
#: doc/classes/MenuButton.xml:64
-msgid "Text [Color] used when the [MenuButton] is being hovered."
+msgid ""
+"Text [Color] used when the [MenuButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/MenuButton.xml:67
-msgid "Text [Color] used when the [MenuButton] is being pressed."
+msgid "Text [Color] used when the [MenuButton] is being hovered."
msgstr ""
#: doc/classes/MenuButton.xml:70
-msgid "[StyleBox] used when the [MenuButton] is being hovered."
+msgid "Text [Color] used when the [MenuButton] is being pressed."
msgstr ""
#: doc/classes/MenuButton.xml:73
-msgid "The horizontal space between [MenuButton]'s icon and text."
+msgid "[StyleBox] used when the [MenuButton] is being hovered."
msgstr ""
#: doc/classes/MenuButton.xml:76
-msgid "Default [StyleBox] for the [MenuButton]."
+msgid "The horizontal space between [MenuButton]'s icon and text."
msgstr ""
#: doc/classes/MenuButton.xml:79
+msgid "Default [StyleBox] for the [MenuButton]."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:82
msgid "[StyleBox] used when the [MenuButton] is being pressed."
msgstr ""
@@ -37081,7 +37262,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -39971,26 +40152,33 @@ msgid "Text [Color] used when the [OptionButton] is disabled."
msgstr ""
#: doc/classes/OptionButton.xml:212
-msgid "Text [Color] used when the [OptionButton] is being hovered."
+msgid ""
+"Text [Color] used when the [OptionButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/OptionButton.xml:215
-msgid "Text [Color] used when the [OptionButton] is being pressed."
+msgid "Text [Color] used when the [OptionButton] is being hovered."
msgstr ""
#: doc/classes/OptionButton.xml:218
-msgid "[StyleBox] used when the [OptionButton] is being hovered."
+msgid "Text [Color] used when the [OptionButton] is being pressed."
msgstr ""
#: doc/classes/OptionButton.xml:221
-msgid "The horizontal space between [OptionButton]'s icon and text."
+msgid "[StyleBox] used when the [OptionButton] is being hovered."
msgstr ""
#: doc/classes/OptionButton.xml:224
-msgid "Default [StyleBox] for the [OptionButton]."
+msgid "The horizontal space between [OptionButton]'s icon and text."
msgstr ""
#: doc/classes/OptionButton.xml:227
+msgid "Default [StyleBox] for the [OptionButton]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:230
msgid "[StyleBox] used when the [OptionButton] is being pressed."
msgstr ""
@@ -40399,7 +40587,7 @@ msgstr "ブレンド空間内ã®ãƒã‚¤ãƒ³ãƒˆæ•°ã‚’è¿”ã—ã¾ã™ã€‚"
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -40429,14 +40617,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -40446,7 +40634,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -42976,17 +43164,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -43004,11 +43218,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -43203,7 +43417,9 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-msgid "Returns the [Physics2DDirectBodyState] of the body."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
@@ -44006,6 +44222,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -44023,7 +44257,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -44137,7 +44371,9 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-msgid "Returns the [PhysicsDirectBodyState] of the body."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/PhysicsServer.xml:370
@@ -45124,27 +45360,27 @@ msgstr "é…åˆ—ã®æœ«å°¾ã«è¦ç´ ã‚’追加ã—ã¾ã™ã€‚"
msgid "Removes an element from the array by index."
msgstr "インデックスã«ã‚ˆã‚Šé…列ã‹ã‚‰è¦ç´ ã‚’削除ã—ã¾ã™ã€‚"
-#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolColorArray.xml:66
-#: doc/classes/PoolIntArray.xml:67 doc/classes/PoolRealArray.xml:67
-#: doc/classes/PoolStringArray.xml:74 doc/classes/PoolVector2Array.xml:67
-#: doc/classes/PoolVector3Array.xml:66
+#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolIntArray.xml:67
+#: doc/classes/PoolRealArray.xml:67
msgid ""
"Sets the size of the array. If the array is grown, reserves elements at the "
"end of the array. If the array is shrunk, truncates the array to the new "
-"size."
+"size.\n"
+"[b]Note:[/b] Added elements are not automatically initialized to 0 and will "
+"contain garbage, i.e. indeterminate values."
msgstr ""
-#: doc/classes/PoolByteArray.xml:121
+#: doc/classes/PoolByteArray.xml:122
msgid "Changes the byte at the given index."
msgstr ""
-#: doc/classes/PoolByteArray.xml:127 doc/classes/PoolColorArray.xml:79
-#: doc/classes/PoolRealArray.xml:80 doc/classes/PoolStringArray.xml:87
+#: doc/classes/PoolByteArray.xml:128 doc/classes/PoolColorArray.xml:79
+#: doc/classes/PoolRealArray.xml:81 doc/classes/PoolStringArray.xml:87
#: doc/classes/PoolVector2Array.xml:80 doc/classes/PoolVector3Array.xml:79
msgid "Returns the size of the array."
msgstr ""
-#: doc/classes/PoolByteArray.xml:135
+#: doc/classes/PoolByteArray.xml:136
msgid ""
"Returns the slice of the [PoolByteArray] between indices (inclusive) as a "
"new [PoolByteArray]. Any negative index is considered to be from the end of "
@@ -45177,6 +45413,14 @@ msgstr "é…åˆ—ã®æœ«å°¾ã«è¦ç´ ã‚’追加ã—ã¾ã™ã€‚"
msgid "Appends a value to the array."
msgstr ""
+#: doc/classes/PoolColorArray.xml:66 doc/classes/PoolStringArray.xml:74
+#: doc/classes/PoolVector2Array.xml:67 doc/classes/PoolVector3Array.xml:66
+msgid ""
+"Sets the size of the array. If the array is grown, reserves elements at the "
+"end of the array. If the array is shrunk, truncates the array to the new "
+"size."
+msgstr ""
+
#: doc/classes/PoolColorArray.xml:73
msgid "Changes the [Color] at the given index."
msgstr ""
@@ -45217,12 +45461,12 @@ msgstr ""
"é…åˆ—ã®æŒ‡å®šã—ãŸä½ç½®ã«æ–°ã—ã„è¦ç´ ã‚’挿入ã—ã¾ã™ã€‚挿入ã™ã‚‹ä½ç½®ã¯ã€æœ‰åйãªä½ç½®ã‹ã€é…"
"åˆ—ã®æœ€å¾Œã®ä½ç½® ([code]pos == size()[/code]) ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。"
-#: doc/classes/PoolIntArray.xml:74
+#: doc/classes/PoolIntArray.xml:75
#, fuzzy
msgid "Changes the int at the given index."
msgstr "サブノードã®åå‰ã‚’変更ã—ã¾ã™ã€‚"
-#: doc/classes/PoolIntArray.xml:80
+#: doc/classes/PoolIntArray.xml:81
msgid "Returns the array size."
msgstr ""
@@ -45255,7 +45499,7 @@ msgstr ""
msgid "Appends a [PoolRealArray] at the end of this array."
msgstr "é…åˆ—ã®æœ«å°¾ã«è¦ç´ ã‚’追加ã—ã¾ã™ã€‚"
-#: doc/classes/PoolRealArray.xml:74
+#: doc/classes/PoolRealArray.xml:75
msgid "Changes the float at the given index."
msgstr ""
@@ -46535,18 +46779,6 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:204
msgid ""
-"The project data directory is used for storing project-specific data "
-"(metadata, shader cache, etc.).\n"
-"[b]Note:[/b] Restart the application after changing this setting.\n"
-"[b]Note:[/b] Changing this value can help on platforms or with third-party "
-"tools where specific directory patterns are disallowed. Only modify this "
-"setting if you know that your environment requires it, as changing the "
-"default can impact compatibility with some external tools or plugins which "
-"expect the default [code].import[/code] folder."
-msgstr ""
-
-#: doc/classes/ProjectSettings.xml:209
-msgid ""
"Specifies a file to override project settings. For example: [code]user://"
"custom_settings.cfg[/code]. See \"Overriding\" in the [ProjectSettings] "
"class description at the top for more information.\n"
@@ -46554,7 +46786,7 @@ msgid ""
"code] will still be read to override the project settings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:213
+#: doc/classes/ProjectSettings.xml:208
msgid ""
"If [code]true[/code], the project will save user data to its own user "
"directory (see [member application/config/custom_user_dir_name]). This "
@@ -46564,13 +46796,28 @@ msgid ""
"user data directory)/Godot/app_userdata/(project name)[/code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:216
+#: doc/classes/ProjectSettings.xml:211
+msgid ""
+"If [code]true[/code], the project will use a hidden directory ([code]."
+"import[/code]) for storing project-specific data (metadata, shader cache, "
+"etc.).\n"
+"If [code]false[/code], a non-hidden directory ([code]import[/code]) will be "
+"used instead.\n"
+"[b]Note:[/b] Restart the application after changing this setting.\n"
+"[b]Note:[/b] Changing this value can help on platforms or with third-party "
+"tools where hidden directory patterns are disallowed. Only modify this "
+"setting if you know that your environment requires it, as changing the "
+"default can impact compatibility with some external tools or plugins which "
+"expect the default [code].import[/code] folder."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:217
msgid ""
"Icon set in [code].ico[/code] format used on Windows to set the game's icon. "
"This is done automatically on start by calling [method OS.set_native_icon]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:219
+#: doc/classes/ProjectSettings.xml:220
msgid ""
"Time samples for frame deltas are subject to random variation introduced by "
"the platform, even when frames are displayed at regular intervals thanks to "
@@ -46584,14 +46831,14 @@ msgid ""
"adequate to render frames at the refresh rate."
msgstr ""
-#: doc/classes/ProjectSettings.xml:224
+#: doc/classes/ProjectSettings.xml:225
msgid ""
"[b]Experimental.[/b] Shifts the measurement of delta time for each frame to "
"just after the drawing has taken place. This may lead to more consistent "
"deltas and a reduction in frame stutters."
msgstr ""
-#: doc/classes/ProjectSettings.xml:227
+#: doc/classes/ProjectSettings.xml:228
msgid ""
"If [code]true[/code], disables printing to standard error. If [code]true[/"
"code], this also hides error and warning messages printed by [method "
@@ -46600,7 +46847,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:231
+#: doc/classes/ProjectSettings.xml:232
msgid ""
"If [code]true[/code], disables printing to standard output. This is "
"equivalent to starting the editor or project with the [code]--quiet[/code] "
@@ -46608,7 +46855,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:235
+#: doc/classes/ProjectSettings.xml:236
msgid ""
"If [code]true[/code], flushes the standard output stream every time a line "
"is printed. This affects both terminal logging and file logging.\n"
@@ -46624,20 +46871,20 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:241
+#: doc/classes/ProjectSettings.xml:242
msgid ""
"Debug build override for [member application/run/flush_stdout_on_print], as "
"performance is less important during debugging.\n"
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:245
+#: doc/classes/ProjectSettings.xml:246
msgid ""
"Forces a delay between frames in the main loop (in milliseconds). This may "
"be useful if you plan to disable vertical synchronization."
msgstr ""
-#: doc/classes/ProjectSettings.xml:248
+#: doc/classes/ProjectSettings.xml:249
msgid ""
"If [code]true[/code], enables low-processor usage mode. This setting only "
"works on desktop platforms. The screen is not redrawn if nothing changes "
@@ -46645,75 +46892,81 @@ msgid ""
"useless (and can hurt performance) in most games."
msgstr ""
-#: doc/classes/ProjectSettings.xml:251
+#: doc/classes/ProjectSettings.xml:252
msgid ""
"Amount of sleeping between frames when the low-processor usage mode is "
"enabled (in microseconds). Higher values will result in lower CPU usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:254
+#: doc/classes/ProjectSettings.xml:255
msgid "Path to the main scene file that will be loaded when the project runs."
msgstr ""
-#: doc/classes/ProjectSettings.xml:257 doc/classes/ProjectSettings.xml:260
+#: doc/classes/ProjectSettings.xml:258 doc/classes/ProjectSettings.xml:261
msgid ""
"Audio buses will disable automatically when sound goes below a given dB "
"threshold for a given time. This saves CPU as effects assigned to that bus "
"will no longer do any processing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:263
+#: doc/classes/ProjectSettings.xml:264
msgid ""
"Default [AudioBusLayout] resource file to use in the project, unless "
"overridden by the scene."
msgstr ""
-#: doc/classes/ProjectSettings.xml:266
+#: doc/classes/ProjectSettings.xml:267
msgid ""
"Specifies the audio driver to use. This setting is platform-dependent as "
"each platform supports different audio drivers. If left empty, the default "
"audio driver will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:269
+#: doc/classes/ProjectSettings.xml:270
msgid ""
"If [code]true[/code], microphone input will be allowed. This requires "
"appropriate permissions to be set when exporting to Android or iOS."
msgstr ""
-#: doc/classes/ProjectSettings.xml:272
+#: doc/classes/ProjectSettings.xml:273
msgid ""
"The mixing rate used for audio (in Hz). In general, it's better to not touch "
"this and leave it to the host operating system."
msgstr ""
-#: doc/classes/ProjectSettings.xml:275
+#: doc/classes/ProjectSettings.xml:276
msgid ""
"Safer override for [member audio/mix_rate] in the Web platform. Here "
"[code]0[/code] means \"let the browser choose\" (since some browsers do not "
"like forcing the mix rate)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:278
+#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:281
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:284
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:287
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -46723,7 +46976,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:290
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -46733,27 +46986,27 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:293
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:296
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
-#: doc/classes/ProjectSettings.xml:299
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:302
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -46761,12 +47014,12 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:305
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:308
+#: doc/classes/ProjectSettings.xml:311
#, fuzzy
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
@@ -46775,20 +47028,20 @@ msgstr ""
"[code]true[/code] ã®å ´åˆã€ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ [code]bus_idx[/code] ã®ãƒã‚¹ã‚’ミュート"
"ã—ã¾ã™ã€‚"
-#: doc/classes/ProjectSettings.xml:311
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:314
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:317
+#: doc/classes/ProjectSettings.xml:320
#, fuzzy
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
@@ -46797,51 +47050,51 @@ msgstr ""
"[code]true[/code]ã®å ´åˆã€ã‚ªãƒ–ジェクトã¯è·é›¢ã«é–¢ä¿‚ãªãåŒã˜ã‚µã‚¤ã‚ºã§ãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°"
"ã•れã¾ã™ã€‚"
-#: doc/classes/ProjectSettings.xml:320
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:323
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:326
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:329
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:332
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:335
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:338
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:341
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -46849,74 +47102,74 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:344
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:347
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:350
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:353
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:356
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:359
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:362
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:365
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:368
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:371
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:374
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:377
+#: doc/classes/ProjectSettings.xml:380
#, fuzzy
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
@@ -46924,38 +47177,38 @@ msgstr ""
"[code]true[/code] ã®å ´åˆã€ã‚·ãƒ¼ãƒ³ãƒ„リーã«è¿½åŠ ã•れãŸã¨ãã«ã‚ªãƒ¼ãƒ‡ã‚£ã‚ªãŒå†ç”Ÿã•れ"
"ã¾ã™ã€‚"
-#: doc/classes/ProjectSettings.xml:380
+#: doc/classes/ProjectSettings.xml:383
#, fuzzy
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
msgstr "[code]true[/code]ã®å ´åˆã€æ³•ç·šãƒžãƒƒãƒ”ãƒ³ã‚°ãŒæœ‰åйã«ãªã‚Šã¾ã™ã€‚"
-#: doc/classes/ProjectSettings.xml:383
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:386
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:389
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:392
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:395
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:398
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -46966,91 +47219,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:403
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:406
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:409
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:412
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:415
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:418
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:421
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:424
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:427
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:430
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:433
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:436
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:439
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr ""
-#: doc/classes/ProjectSettings.xml:442
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:445
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:448
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:451
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -47059,13 +47312,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:455
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:458
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -47075,7 +47328,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:463
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -47083,19 +47336,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:468
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:472
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:476
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -47109,45 +47362,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:481
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:484
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:488
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:491
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:494
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:497
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:500
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -47156,7 +47409,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:503
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -47167,7 +47420,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:507
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -47183,14 +47436,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:515
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:518
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -47198,49 +47451,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:521
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:524
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:529
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:532
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:535
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:538
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:541
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:544
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:547
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -47249,7 +47502,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:551
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -47257,7 +47510,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:555
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -47265,7 +47518,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:559
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -47275,7 +47528,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:563
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -47284,7 +47537,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:567
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -47293,7 +47546,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:571
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -47303,7 +47556,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:575
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -47311,7 +47564,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:579
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -47321,7 +47574,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:583
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -47331,7 +47584,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:587
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -47339,7 +47592,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:591
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -47348,7 +47601,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:595
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -47356,7 +47609,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:599
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -47368,477 +47621,477 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:605
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:608
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:611
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:614
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:617
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:620
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:623
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:626
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:629
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:632
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:635
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:638
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:641
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:644
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:647
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:650
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:653
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:656
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:659
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:662
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:665
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:668
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:671
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:674
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:677
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:680
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:683
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:686
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:689
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:692
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:695
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:698
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:701
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:704
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:707
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:710
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:713
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:716
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:719
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:722
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:725
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:728
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:731
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:734
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:737
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:740
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:743
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:746
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:749
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:752
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:755
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:758
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:761
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:764
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:767
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:770
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:773
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:776
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:779
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:782
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:785
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:788
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:791
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:794
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:797
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:800
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:803
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:806
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:809
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:812
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:815
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:818
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:821
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:824
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:827
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:830
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:833
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:836
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:839
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:842
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:845
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:848
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:851
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:854
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:857
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:860
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:863
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:866
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:869
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:872
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:875
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:878
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:881
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr ""
-#: doc/classes/ProjectSettings.xml:884
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:887
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:890
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:893
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:896
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:899
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:902
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:905
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:908
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:911
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:914
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:917
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:920
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:923
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:926
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:929
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:932
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:935
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:938
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:941
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:946
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:949
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -47846,92 +48099,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:952
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:955
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:958
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:961
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:964
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:967
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:970
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:973
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:976
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:979
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:982
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:985
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:988
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:991
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:994
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:997
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1000
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1003
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -47941,33 +48194,33 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1007
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1010
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1013
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1017
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1021
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -47980,7 +48233,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1025
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -47992,7 +48245,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1033
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -48004,7 +48257,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1041
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -48017,7 +48270,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1045
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -48025,28 +48278,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1049
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1053
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1056
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1059
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -48056,25 +48309,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1063
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1066
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1069
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1072
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -48087,7 +48340,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1076
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -48099,7 +48352,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1084
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -48111,7 +48364,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1092
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -48124,13 +48377,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1096
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1099
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -48138,11 +48391,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1103
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1106
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -48156,7 +48409,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1112
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -48165,7 +48418,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1116
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -48181,7 +48434,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1121
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -48191,7 +48444,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1125
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -48201,7 +48454,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1129
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -48212,7 +48465,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1133
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -48222,7 +48475,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1137
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -48230,7 +48483,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1141
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -48241,7 +48494,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1145
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -48256,7 +48509,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1151
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -48265,13 +48518,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1156
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1159
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -48280,7 +48533,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1162
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -48290,7 +48543,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1165
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -48302,7 +48555,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1168
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -48312,24 +48565,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1171
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1174
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1177
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1180
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -48338,7 +48591,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1183
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -48346,7 +48599,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1186
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -48355,7 +48608,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1189
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -48365,7 +48618,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1193
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -48373,31 +48626,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1197
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1200
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1203
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1206
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1209
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -48405,7 +48658,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1212
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -48415,46 +48668,53 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1215
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1218
+#: doc/classes/ProjectSettings.xml:1221
+msgid ""
+"iOS specific override for [member rendering/gles2/compatibility/"
+"disable_half_float], due to poor support for half-float vertex compression "
+"on many devices."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1224
msgid ""
-"If [code]true[/code] and available on the target device, enables high "
-"floating point precision for all shader computations in GLES2.\n"
+"If [code]true[/code] and available on the target Android device, enables "
+"high floating point precision for all shader computations in GLES2.\n"
"[b]Warning:[/b] High floating point precision can be extremely slow on older "
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1225
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1228
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1231
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1234
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -48462,7 +48722,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1237
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -48472,7 +48732,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1240
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -48481,7 +48741,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1243
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -48490,20 +48750,20 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1246
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1249
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1252
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -48512,7 +48772,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1255
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -48520,7 +48780,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1258
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -48529,7 +48789,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -48539,20 +48799,20 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1267
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1274
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -48561,13 +48821,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -48577,46 +48837,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1293
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1296
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1299
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1302
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1305
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -48626,7 +48886,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -48638,7 +48898,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -48646,7 +48906,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1316
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -48654,7 +48914,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -48663,7 +48923,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1323
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -48677,7 +48937,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1328
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -48687,7 +48947,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1331
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -48696,7 +48956,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1334
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -48706,54 +48966,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1337
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1340
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1343
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1346
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1349
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1352
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1355
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1358
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -48764,61 +49024,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1365
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1368
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1371
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1374
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1377
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1380
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1383
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1386
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -48829,7 +49089,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -48838,26 +49098,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1393 doc/classes/ProjectSettings.xml:1396
#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1405
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1408
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1411
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -48868,20 +49128,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1418
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -48893,54 +49153,54 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1428
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1435
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1438
+#: doc/classes/ProjectSettings.xml:1444
#, fuzzy
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr "サブサーフェス スキャタリング効果ã®å¼·ã•。"
-#: doc/classes/ProjectSettings.xml:1441
+#: doc/classes/ProjectSettings.xml:1447
#, fuzzy
msgid "Max radius used for subsurface scattering samples."
msgstr "サブサーフェス スキャタリング効果ã®å¼·ã•。"
-#: doc/classes/ProjectSettings.xml:1444
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1447
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1450
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1453
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -48948,7 +49208,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -48958,10 +49218,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -48970,10 +49230,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -48982,10 +49242,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -48994,10 +49254,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -49006,10 +49266,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -49684,40 +49944,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr ""
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -49725,14 +49999,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -52079,6 +52353,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -52096,7 +52386,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -52104,11 +52394,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -52118,19 +52408,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -57858,20 +58148,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -57882,28 +58177,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -57915,19 +58210,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
@@ -60777,28 +61072,35 @@ msgid "Text [Color] used when the [ToolButton] is disabled."
msgstr ""
#: doc/classes/ToolButton.xml:39
+msgid ""
+"Text [Color] used when the [ToolButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:42
#, fuzzy
msgid "Text [Color] used when the [ToolButton] is being hovered."
msgstr "ボタンã®é•·æŠ¼ã—ãŒåœæ­¢ã•れãŸã¨ãã«ç™ºä¿¡ã•れã¾ã™ã€‚"
-#: doc/classes/ToolButton.xml:42
+#: doc/classes/ToolButton.xml:45
msgid "Text [Color] used when the [ToolButton] is being pressed."
msgstr ""
-#: doc/classes/ToolButton.xml:45
+#: doc/classes/ToolButton.xml:48
#, fuzzy
msgid "[StyleBox] used when the [ToolButton] is being hovered."
msgstr "ボタンã®é•·æŠ¼ã—ãŒåœæ­¢ã•れãŸã¨ãã«ç™ºä¿¡ã•れã¾ã™ã€‚"
-#: doc/classes/ToolButton.xml:48
+#: doc/classes/ToolButton.xml:51
msgid "The horizontal space between [ToolButton]'s icon and text."
msgstr ""
-#: doc/classes/ToolButton.xml:51
+#: doc/classes/ToolButton.xml:54
msgid "Default [StyleBox] for the [ToolButton]."
msgstr ""
-#: doc/classes/ToolButton.xml:54
+#: doc/classes/ToolButton.xml:57
msgid "[StyleBox] used when the [ToolButton] is being pressed."
msgstr ""
@@ -72979,7 +73281,7 @@ msgstr ""
#: doc/classes/YSort.xml:4
msgid "Sort all child nodes based on their Y positions."
-msgstr ""
+msgstr "ã™ã¹ã¦ã®å­ãƒŽãƒ¼ãƒ‰ã‚’Yä½ç½®ã«åŸºã¥ãソートã™ã‚‹ã€‚"
#: doc/classes/YSort.xml:7
msgid ""
@@ -72991,11 +73293,38 @@ msgid ""
"the same space as the parent YSort, allowing to better organize a scene or "
"divide it in multiple ones, yet keep the unique sorting."
msgstr ""
+"ã™ã¹ã¦ã®å­ãƒŽãƒ¼ãƒ‰ã‚’Yä½ç½®ã«åŸºã¥ã„ã¦ã‚½ãƒ¼ãƒˆã—ã¾ã™ã€‚ソートã™ã‚‹ãŸã‚ã«ã¯ã€å­ãƒŽãƒ¼ãƒ‰ã¯"
+"[CanvasItem]を継承ã—ã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚Yä½ç½®ãŒé«˜ã„ノードã¯å¾Œã§æç”»ã•れるãŸ"
+"ã‚ã€Yä½ç½®ãŒä½Žã„ノードã®ä¸Šã«è¡¨ç¤ºã•れã¾ã™ã€‚\n"
+"YSortノードã¯ãƒã‚¹ãƒˆå¯èƒ½ã§ã™ã€‚å­ã®YSortノードã¯ã€è¦ªã®YSortã¨åŒã˜ç©ºé–“ã§ã‚½ãƒ¼ãƒˆã•"
+"れるã®ã§ã€ç‹¬è‡ªã®ã‚½ãƒ¼ãƒˆã‚’ç¶­æŒã—ãŸã¾ã¾ã€ã‚·ãƒ¼ãƒ³ã‚’より整ç†ã—ãŸã‚Šã€è¤‡æ•°ã®ã‚·ãƒ¼ãƒ³ã«"
+"分割ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
#: doc/classes/YSort.xml:16
msgid ""
"If [code]true[/code], child nodes are sorted, otherwise sorting is disabled."
msgstr ""
+"[code]true[/code]ã®å ´åˆã€å­ãƒŽãƒ¼ãƒ‰ã¯ã‚½ãƒ¼ãƒˆã•れã¾ã™ã€‚ãã†ã§ãªã‘れã°ã‚½ãƒ¼ãƒˆã¯ç„¡åй"
+"ã«ãªã‚Šã¾ã™ã€‚"
+
+#~ msgid "Returns this [AABB] expanded to include a given point."
+#~ msgstr "与ãˆã‚‰ã‚ŒãŸãƒã‚¤ãƒ³ãƒˆã‚’å«ã‚€ã‚ˆã†æ‹¡å¤§ã—㟠[AABB] ã‚’è¿”ã—ã¾ã™ã€‚"
+
+#, fuzzy
+#~ msgid ""
+#~ "Returns a list of intersecting [Area]s. For performance reasons "
+#~ "(collisions are all processed at the same time) this list is modified "
+#~ "once during the physics step, not immediately after objects are moved. "
+#~ "Consider using signals instead."
+#~ msgstr ""
+#~ "ç¾åœ¨äº¤å·®ã—ã¦ã„ã‚‹ [Area2D] ã®ãƒªã‚¹ãƒˆã‚’è¿”ã—ã¾ã™ã€‚性能上ã®ç†ç”±ã‹ã‚‰ (è¡çªã¯ã™ã¹"
+#~ "ã¦åŒæ™‚ã«å‡¦ç†ã•れã¾ã™)ã€ã“ã®ãƒªã‚¹ãƒˆã¯ã‚ªãƒ–ジェクトãŒç§»å‹•ã—ãŸç›´å¾Œã§ã¯ãªãã€ç‰©"
+#~ "ç†ã‚¹ãƒ†ãƒƒãƒ—中ã«ä¸€åº¦ã ã‘変更ã•れã¾ã™ã€‚代ã‚りã«ã‚·ã‚°ãƒŠãƒ«ã®ä½¿ç”¨ã‚’考ãˆã¦ãã ã•"
+#~ "ã„。"
+
+#, fuzzy
+#~ msgid "Emitted when the resource value was set and user clicked to edit it."
+#~ msgstr "インスペクタã§ãƒªã‚½ãƒ¼ã‚¹ãŒé¸æŠžã•れãŸã¨ãã«ç™ºä¿¡ã€‚"
#~ msgid "Returns the label used for built-in text."
#~ msgstr "組ã¿è¾¼ã¿ãƒ†ã‚­ã‚¹ãƒˆã«ä½¿ç”¨ã•れã¦ã„るラベルを返ã—ã¾ã™ã€‚"
diff --git a/doc/translations/ko.po b/doc/translations/ko.po
index 8741f82f9c..d14d8903de 100644
--- a/doc/translations/ko.po
+++ b/doc/translations/ko.po
@@ -11,12 +11,14 @@
# moolow <copyhyeon@gmail.com>, 2021.
# Jaemin Park <ppparkje@naver.com>, 2021.
# dewcked <dewcked@protonmail.ch>, 2021.
+# ì‹ ë™ê·œ <rlsl0422@gmail.com>, 2021.
+# whatthesamuel <alex01763@gmail.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2021-09-25 15:54+0000\n"
-"Last-Translator: dewcked <dewcked@protonmail.ch>\n"
+"PO-Revision-Date: 2021-11-19 08:44+0000\n"
+"Last-Translator: Myeongjin Lee <aranet100@gmail.com>\n"
"Language-Team: Korean <https://hosted.weblate.org/projects/godot-engine/"
"godot-class-reference/ko/>\n"
"Language: ko\n"
@@ -24,45 +26,45 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 4.9-dev\n"
+"X-Generator: Weblate 4.9.1-dev\n"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Description"
msgstr "설명"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Tutorials"
msgstr "튜토리얼"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Properties"
msgstr "ì†ì„±"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Methods"
msgstr "메서드"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Theme Properties"
msgstr "테마 ì†ì„±ë“¤"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Signals"
msgstr "시그ë„"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Enumerations"
msgstr "열거형"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Constants"
msgstr "ìƒìˆ˜"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Property Descriptions"
msgstr "ì†ì„± 설명"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Method Descriptions"
msgstr "메서드 설명"
@@ -129,8 +131,7 @@ msgid ""
msgstr ""
"[code]s[/code] ë§¤ê°œë³€ìˆ˜ì˜ ì ˆëŒ€ê°’ì„ ë¦¬í„´í•œë‹¤(즉, 양수 ê°’)\n"
"[codeblock]\n"
-"# a 는 1\n"
-"a = abs(-1)\n"
+"a = abs(-1) # a 는 1\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:55
@@ -3716,112 +3717,121 @@ msgid ""
msgstr ""
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr ""
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
msgstr ""
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
msgstr ""
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
msgstr ""
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr ""
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr ""
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr ""
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
msgstr ""
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr ""
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
msgstr ""
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
msgstr ""
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr ""
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
"positive.\n"
@@ -4900,7 +4910,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -6336,21 +6346,25 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
#: doc/classes/Area.xml:17
msgid ""
-"Returns a list of intersecting [Area]s. For performance reasons (collisions "
-"are all processed at the same time) this list is modified once during the "
-"physics step, not immediately after objects are moved. Consider using "
-"signals instead."
+"Returns a list of intersecting [Area]s. The overlapping area's [member "
+"CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:23
+#: doc/classes/Area.xml:24
msgid ""
-"Returns a list of intersecting [PhysicsBody]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody]s. The overlapping body's "
+"[member CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:30
+#: doc/classes/Area.xml:32
msgid ""
"If [code]true[/code], the given area overlaps the Area.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6358,7 +6372,7 @@ msgid ""
"physics step. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:38
+#: doc/classes/Area.xml:40
msgid ""
"If [code]true[/code], the given physics body overlaps the Area.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6369,7 +6383,7 @@ msgid ""
"their tiles with collision shapes as a virtual physics body)."
msgstr ""
-#: doc/classes/Area.xml:46
+#: doc/classes/Area.xml:48
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
"velocity lost per second.\n"
@@ -6377,41 +6391,41 @@ msgid ""
"details about damping."
msgstr ""
-#: doc/classes/Area.xml:50 doc/classes/Area2D.xml:52
+#: doc/classes/Area.xml:52 doc/classes/Area2D.xml:54
msgid "The name of the area's audio bus."
msgstr ""
-#: doc/classes/Area.xml:53 doc/classes/Area2D.xml:55
+#: doc/classes/Area.xml:55 doc/classes/Area2D.xml:57
msgid ""
"If [code]true[/code], the area's audio bus overrides the default audio bus."
msgstr ""
-#: doc/classes/Area.xml:56
+#: doc/classes/Area.xml:58
msgid ""
"The area's gravity intensity (in meters per second squared). This value "
"multiplies the gravity vector. This is useful to alter the force of gravity "
"without altering its direction."
msgstr ""
-#: doc/classes/Area.xml:59 doc/classes/Area2D.xml:61
+#: doc/classes/Area.xml:61 doc/classes/Area2D.xml:63
msgid ""
"The falloff factor for point gravity. The greater the value, the faster "
"gravity decreases with distance."
msgstr ""
-#: doc/classes/Area.xml:62 doc/classes/Area2D.xml:64
+#: doc/classes/Area.xml:64 doc/classes/Area2D.xml:66
msgid ""
"If [code]true[/code], gravity is calculated from a point (set via [member "
"gravity_vec]). See also [member space_override]."
msgstr ""
-#: doc/classes/Area.xml:65 doc/classes/Area2D.xml:67
+#: doc/classes/Area.xml:67 doc/classes/Area2D.xml:69
msgid ""
"The area's gravity vector (not normalized). If gravity is a point (see "
"[member gravity_point]), this will be the point of attraction."
msgstr ""
-#: doc/classes/Area.xml:68
+#: doc/classes/Area.xml:70
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
"velocity lost per second.\n"
@@ -6419,61 +6433,61 @@ msgid ""
"about damping."
msgstr ""
-#: doc/classes/Area.xml:72 doc/classes/Area2D.xml:74
+#: doc/classes/Area.xml:74 doc/classes/Area2D.xml:76
msgid "If [code]true[/code], other monitoring areas can detect this area."
msgstr ""
-#: doc/classes/Area.xml:75 doc/classes/Area2D.xml:77
+#: doc/classes/Area.xml:77 doc/classes/Area2D.xml:79
msgid ""
"If [code]true[/code], the area detects bodies or areas entering and exiting "
"it."
msgstr ""
-#: doc/classes/Area.xml:78 doc/classes/Area2D.xml:80
+#: doc/classes/Area.xml:80 doc/classes/Area2D.xml:82
msgid "The area's priority. Higher priority areas are processed first."
msgstr ""
-#: doc/classes/Area.xml:81
+#: doc/classes/Area.xml:83
msgid ""
"The degree to which this area applies reverb to its associated audio. Ranges "
"from [code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
msgstr ""
-#: doc/classes/Area.xml:84
+#: doc/classes/Area.xml:86
msgid "If [code]true[/code], the area applies reverb to its associated audio."
msgstr ""
-#: doc/classes/Area.xml:87
+#: doc/classes/Area.xml:89
msgid "The reverb bus name to use for this area's associated audio."
msgstr ""
-#: doc/classes/Area.xml:90
+#: doc/classes/Area.xml:92
msgid ""
"The degree to which this area's reverb is a uniform effect. Ranges from "
"[code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
msgstr ""
-#: doc/classes/Area.xml:93 doc/classes/Area2D.xml:83
+#: doc/classes/Area.xml:95 doc/classes/Area2D.xml:85
msgid ""
"Override mode for gravity and damping calculations within this area. See "
"[enum SpaceOverride] for possible values."
msgstr ""
-#: doc/classes/Area.xml:100
+#: doc/classes/Area.xml:102
msgid ""
"Emitted when another Area enters this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
-#: doc/classes/Area.xml:107
+#: doc/classes/Area.xml:109
msgid ""
"Emitted when another Area exits this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
-#: doc/classes/Area.xml:117 doc/classes/Area.xml:130
+#: doc/classes/Area.xml:119 doc/classes/Area.xml:132
msgid ""
"Emitted when one of another Area's [Shape]s enters one of this Area's "
"[Shape]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6488,7 +6502,7 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:140
+#: doc/classes/Area.xml:142
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] enters this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -6497,7 +6511,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:147
+#: doc/classes/Area.xml:149
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] exits this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -6506,7 +6520,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:157 doc/classes/Area.xml:170
+#: doc/classes/Area.xml:159 doc/classes/Area.xml:172
msgid ""
"Emitted when one of a [PhysicsBody] or [GridMap]'s [Shape]s enters one of "
"this Area's [Shape]s. Requires [member monitoring] to be set to [code]true[/"
@@ -6523,29 +6537,29 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:180 doc/classes/Area2D.xml:170
+#: doc/classes/Area.xml:182 doc/classes/Area2D.xml:172
msgid "This area does not affect gravity/damping."
msgstr ""
-#: doc/classes/Area.xml:183 doc/classes/Area2D.xml:173
+#: doc/classes/Area.xml:185 doc/classes/Area2D.xml:175
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order)."
msgstr ""
-#: doc/classes/Area.xml:186 doc/classes/Area2D.xml:176
+#: doc/classes/Area.xml:188 doc/classes/Area2D.xml:178
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order), ignoring any lower priority areas."
msgstr ""
-#: doc/classes/Area.xml:189 doc/classes/Area2D.xml:179
+#: doc/classes/Area.xml:191 doc/classes/Area2D.xml:181
msgid ""
"This area replaces any gravity/damping, even the defaults, ignoring any "
"lower priority areas."
msgstr ""
-#: doc/classes/Area.xml:192 doc/classes/Area2D.xml:182
+#: doc/classes/Area.xml:194 doc/classes/Area2D.xml:184
msgid ""
"This area replaces any gravity/damping calculated so far (in [member "
"priority] order), but keeps calculating the rest of the areas."
@@ -6584,21 +6598,25 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
#: doc/classes/Area2D.xml:19
msgid ""
-"Returns a list of intersecting [Area2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [Area2D]s. The overlapping area's [member "
+"CollisionObject2D.collision_layer] must be part of this area's [member "
+"CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:25
+#: doc/classes/Area2D.xml:26
msgid ""
-"Returns a list of intersecting [PhysicsBody2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody2D]s. The overlapping body's "
+"[member CollisionObject2D.collision_layer] must be part of this area's "
+"[member CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:32
+#: doc/classes/Area2D.xml:34
msgid ""
"If [code]true[/code], the given area overlaps the Area2D.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6606,7 +6624,7 @@ msgid ""
"the physics step. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:40
+#: doc/classes/Area2D.xml:42
msgid ""
"If [code]true[/code], the given physics body overlaps the Area2D.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6617,7 +6635,7 @@ msgid ""
"register their tiles with collision shapes as a virtual physics body)."
msgstr ""
-#: doc/classes/Area2D.xml:48
+#: doc/classes/Area2D.xml:50
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
"velocity lost per second.\n"
@@ -6625,14 +6643,14 @@ msgid ""
"details about damping."
msgstr ""
-#: doc/classes/Area2D.xml:58
+#: doc/classes/Area2D.xml:60
msgid ""
"The area's gravity intensity (in pixels per second squared). This value "
"multiplies the gravity vector. This is useful to alter the force of gravity "
"without altering its direction."
msgstr ""
-#: doc/classes/Area2D.xml:70
+#: doc/classes/Area2D.xml:72
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
"velocity lost per second.\n"
@@ -6640,21 +6658,21 @@ msgid ""
"about damping."
msgstr ""
-#: doc/classes/Area2D.xml:90
+#: doc/classes/Area2D.xml:92
msgid ""
"Emitted when another Area2D enters this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-#: doc/classes/Area2D.xml:97
+#: doc/classes/Area2D.xml:99
msgid ""
"Emitted when another Area2D exits this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-#: doc/classes/Area2D.xml:107
+#: doc/classes/Area2D.xml:109
msgid ""
"Emitted when one of another Area2D's [Shape2D]s enters one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6669,7 +6687,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:120
+#: doc/classes/Area2D.xml:122
msgid ""
"Emitted when one of another Area2D's [Shape2D]s exits one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6684,7 +6702,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:130
+#: doc/classes/Area2D.xml:132
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] enters this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -6693,7 +6711,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:137
+#: doc/classes/Area2D.xml:139
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] exits this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -6702,7 +6720,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:147
+#: doc/classes/Area2D.xml:149
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s enters one "
"of this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -6721,7 +6739,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:160
+#: doc/classes/Area2D.xml:162
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s exits one of "
"this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -10293,42 +10311,47 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
-"no save path is provided it will try to match the path from the current "
+"no root node is provided, parent of this node will be used as root instead. "
+"If no save path is provided it will try to match the path from the current "
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -10342,62 +10365,62 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
msgid "The rotation of the baked custom sky."
msgstr ""
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -10405,35 +10428,35 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -10441,13 +10464,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -10459,66 +10482,78 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr ""
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
msgid "Baking was successful."
msgstr ""
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr ""
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
#, fuzzy
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr "ë§¤ê°œë³€ìˆ˜ë“¤ì˜ ì•„í¬íƒ„젠트 ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤."
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr ""
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:133
+#: doc/classes/BakedLightmap.xml:132
+msgid ""
+"Returns if lightmapper can't be created. Unless you are using a custom "
+"lightmapper, please report this as bug."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:135
+msgid ""
+"There is no root node to start baking from. Either provide [code]from_node[/"
+"code] argument or attach this node to a parent that should be used as root."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:136
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:139
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:142
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -10974,8 +11009,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -11363,26 +11401,33 @@ msgid "Text [Color] used when the [Button] is disabled."
msgstr ""
#: doc/classes/Button.xml:77
-msgid "Text [Color] used when the [Button] is being hovered."
+msgid ""
+"Text [Color] used when the [Button] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/Button.xml:80
-msgid "Text [Color] used when the [Button] is being pressed."
+msgid "Text [Color] used when the [Button] is being hovered."
msgstr ""
#: doc/classes/Button.xml:83
-msgid "[StyleBox] used when the [Button] is being hovered."
+msgid "Text [Color] used when the [Button] is being pressed."
msgstr ""
#: doc/classes/Button.xml:86
-msgid "The horizontal space between [Button]'s icon and text."
+msgid "[StyleBox] used when the [Button] is being hovered."
msgstr ""
#: doc/classes/Button.xml:89
-msgid "Default [StyleBox] for the [Button]."
+msgid "The horizontal space between [Button]'s icon and text."
msgstr ""
#: doc/classes/Button.xml:92
+msgid "Default [StyleBox] for the [Button]."
+msgstr ""
+
+#: doc/classes/Button.xml:95
msgid "[StyleBox] used when the [Button] is being pressed."
msgstr ""
@@ -12855,80 +12900,96 @@ msgstr ""
msgid "The check icon to display when the [CheckBox] is checked."
msgstr ""
-#: doc/classes/CheckBox.xml:30
+#: doc/classes/CheckBox.xml:28
+msgid "The check icon to display when the [CheckBox] is checked and disabled."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:31
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is disabled."
msgstr ""
-#: doc/classes/CheckBox.xml:33
+#: doc/classes/CheckBox.xml:34
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is focused."
msgstr ""
-#: doc/classes/CheckBox.xml:36
+#: doc/classes/CheckBox.xml:37
msgid "The [Font] to use for the [CheckBox] text."
msgstr ""
-#: doc/classes/CheckBox.xml:39
+#: doc/classes/CheckBox.xml:40
msgid "The [CheckBox] text's font color."
msgstr ""
-#: doc/classes/CheckBox.xml:42
+#: doc/classes/CheckBox.xml:43
msgid "The [CheckBox] text's font color when it's disabled."
msgstr ""
-#: doc/classes/CheckBox.xml:45
+#: doc/classes/CheckBox.xml:46
+msgid ""
+"The [CheckBox] text's font color when it's focused. Only replaces the normal "
+"text color of the checkbox. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:49
msgid "The [CheckBox] text's font color when it's hovered."
msgstr ""
-#: doc/classes/CheckBox.xml:48
+#: doc/classes/CheckBox.xml:52
msgid "The [CheckBox] text's font color when it's hovered and pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:51
+#: doc/classes/CheckBox.xml:55
msgid "The [CheckBox] text's font color when it's pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:54
+#: doc/classes/CheckBox.xml:58
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered."
msgstr ""
-#: doc/classes/CheckBox.xml:57
+#: doc/classes/CheckBox.xml:61
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered and "
"pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:60
+#: doc/classes/CheckBox.xml:64
msgid "The separation between the check icon and the text (in pixels)."
msgstr ""
-#: doc/classes/CheckBox.xml:63 doc/classes/CheckButton.xml:58
+#: doc/classes/CheckBox.xml:67 doc/classes/CheckButton.xml:61
msgid "The [StyleBox] to display as a background."
msgstr ""
-#: doc/classes/CheckBox.xml:66
+#: doc/classes/CheckBox.xml:70
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:69
+#: doc/classes/CheckBox.xml:73
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is checked."
msgstr ""
-#: doc/classes/CheckBox.xml:74
+#: doc/classes/CheckBox.xml:78
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is unchecked."
msgstr ""
-#: doc/classes/CheckBox.xml:79
+#: doc/classes/CheckBox.xml:83
msgid "The check icon to display when the [CheckBox] is unchecked."
msgstr ""
+#: doc/classes/CheckBox.xml:86
+msgid ""
+"The check icon to display when the [CheckBox] is unchecked and disabled."
+msgstr ""
+
#: doc/classes/CheckButton.xml:4
msgid "Checkable button. See also [CheckBox]."
msgstr ""
@@ -12972,49 +13033,56 @@ msgid "The [CheckButton] text's font color when it's disabled."
msgstr ""
#: doc/classes/CheckButton.xml:40
-msgid "The [CheckButton] text's font color when it's hovered."
+msgid ""
+"The [CheckButton] text's font color when it's focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/CheckButton.xml:43
-msgid "The [CheckButton] text's font color when it's hovered and pressed."
+msgid "The [CheckButton] text's font color when it's hovered."
msgstr ""
#: doc/classes/CheckButton.xml:46
-msgid "The [CheckButton] text's font color when it's pressed."
+msgid "The [CheckButton] text's font color when it's hovered and pressed."
msgstr ""
#: doc/classes/CheckButton.xml:49
+msgid "The [CheckButton] text's font color when it's pressed."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:52
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered."
msgstr ""
-#: doc/classes/CheckButton.xml:52
+#: doc/classes/CheckButton.xml:55
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered "
"and pressed."
msgstr ""
-#: doc/classes/CheckButton.xml:55
+#: doc/classes/CheckButton.xml:58
msgid "The separation between the toggle icon and the text (in pixels)."
msgstr ""
-#: doc/classes/CheckButton.xml:61
+#: doc/classes/CheckButton.xml:64
msgid "The icon to display when the [CheckButton] is unchecked."
msgstr ""
-#: doc/classes/CheckButton.xml:64
+#: doc/classes/CheckButton.xml:67
msgid "The icon to display when the [CheckButton] is unchecked and disabled."
msgstr ""
-#: doc/classes/CheckButton.xml:67
+#: doc/classes/CheckButton.xml:70
msgid "The icon to display when the [CheckButton] is checked."
msgstr ""
-#: doc/classes/CheckButton.xml:70
+#: doc/classes/CheckButton.xml:73
msgid "The icon to display when the [CheckButton] is checked and disabled."
msgstr ""
-#: doc/classes/CheckButton.xml:73
+#: doc/classes/CheckButton.xml:76
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is pressed."
msgstr ""
@@ -14818,26 +14886,33 @@ msgid "Text [Color] used when the [ColorPickerButton] is disabled."
msgstr ""
#: doc/classes/ColorPickerButton.xml:80
-msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
+msgid ""
+"Text [Color] used when the [ColorPickerButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/ColorPickerButton.xml:83
-msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
+msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
msgstr ""
#: doc/classes/ColorPickerButton.xml:86
-msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
+msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
msgstr ""
#: doc/classes/ColorPickerButton.xml:89
-msgid "The horizontal space between [ColorPickerButton]'s icon and text."
+msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
msgstr ""
#: doc/classes/ColorPickerButton.xml:92
-msgid "Default [StyleBox] for the [ColorPickerButton]."
+msgid "The horizontal space between [ColorPickerButton]'s icon and text."
msgstr ""
#: doc/classes/ColorPickerButton.xml:95
+msgid "Default [StyleBox] for the [ColorPickerButton]."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:98
msgid "[StyleBox] used when the [ColorPickerButton] is being pressed."
msgstr ""
@@ -20132,7 +20207,8 @@ msgid ""
"get_resource_type]. They may optionally specify some import presets that "
"affect the import process. EditorImportPlugins are responsible for creating "
"the resources and saving them in the [code].import[/code] directory (see "
-"[member ProjectSettings.application/config/project_data_dir_name]).\n"
+"[member ProjectSettings.application/config/"
+"use_hidden_project_data_directory]).\n"
"Below is an example EditorImportPlugin that imports a [Mesh] from a file "
"with the extension \".special\" or \".spec\":\n"
"[codeblock]\n"
@@ -20259,7 +20335,7 @@ msgstr ""
msgid ""
"Gets the extension used to save this resource in the [code].import[/code] "
"directory (see [member ProjectSettings.application/config/"
-"project_data_dir_name])."
+"use_hidden_project_data_directory])."
msgstr ""
#: doc/classes/EditorImportPlugin.xml:130
@@ -21294,8 +21370,11 @@ msgstr ""
msgid "Emitted when the value of the edited resource was changed."
msgstr ""
-#: doc/classes/EditorResourcePicker.xml:89
-msgid "Emitted when the resource value was set and user clicked to edit it."
+#: doc/classes/EditorResourcePicker.xml:90
+msgid ""
+"Emitted when the resource value was set and user clicked to edit it. When "
+"[code]edit[/code] is [code]true[/code], the signal was caused by the context "
+"menu \"Edit\" option."
msgstr ""
#: doc/classes/EditorResourcePreview.xml:4
@@ -25045,21 +25124,32 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html"
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -25068,14 +25158,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -25085,80 +25179,80 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
msgstr ""
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr ""
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -27914,16 +28008,18 @@ msgstr ""
#: doc/classes/Image.xml:436
msgid ""
"OpenGL texture format [code]RED[/code] with a single component and a "
-"bitdepth of 8."
+"bitdepth of 8.\n"
+"[b]Note:[/b] When using the GLES2 backend, this uses the alpha channel "
+"instead of the red channel for storage."
msgstr ""
-#: doc/classes/Image.xml:439
+#: doc/classes/Image.xml:440
msgid ""
"OpenGL texture format [code]RG[/code] with two components and a bitdepth of "
"8 for each."
msgstr ""
-#: doc/classes/Image.xml:442
+#: doc/classes/Image.xml:443
msgid ""
"OpenGL texture format [code]RGB[/code] with three components, each with a "
"bitdepth of 8.\n"
@@ -27931,7 +28027,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:446
+#: doc/classes/Image.xml:447
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 8.\n"
@@ -27939,73 +28035,73 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:450
+#: doc/classes/Image.xml:451
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 4."
msgstr ""
-#: doc/classes/Image.xml:453
+#: doc/classes/Image.xml:454
msgid ""
"OpenGL texture format [code]GL_RGB5_A1[/code] where 5 bits of depth for each "
"component of RGB and one bit for alpha."
msgstr ""
-#: doc/classes/Image.xml:456
+#: doc/classes/Image.xml:457
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 32-"
"bit floating-point value."
msgstr ""
-#: doc/classes/Image.xml:459
+#: doc/classes/Image.xml:460
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:462
+#: doc/classes/Image.xml:463
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:465
+#: doc/classes/Image.xml:466
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:468
+#: doc/classes/Image.xml:469
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 16-"
"bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:471
+#: doc/classes/Image.xml:472
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:474
+#: doc/classes/Image.xml:475
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:477
+#: doc/classes/Image.xml:478
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:480
+#: doc/classes/Image.xml:481
msgid ""
"A special OpenGL texture format where the three color components have 9 bits "
"of precision and all three share a single 5-bit exponent."
msgstr ""
-#: doc/classes/Image.xml:483
+#: doc/classes/Image.xml:484
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 1, and is the smallest variation "
@@ -28015,7 +28111,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:487
+#: doc/classes/Image.xml:488
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 2, and color data is interpreted "
@@ -28025,7 +28121,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:491
+#: doc/classes/Image.xml:492
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format also known as Block Compression 3 or BC3 that contains 64 "
@@ -28036,7 +28132,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:495
+#: doc/classes/Image.xml:496
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -28044,7 +28140,7 @@ msgid ""
"DXT5 uses for the alpha channel."
msgstr ""
-#: doc/classes/Image.xml:498
+#: doc/classes/Image.xml:499
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -28052,7 +28148,7 @@ msgid ""
"algorithm that DXT5 uses for the alpha channel."
msgstr ""
-#: doc/classes/Image.xml:501
+#: doc/classes/Image.xml:502
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned normalized "
@@ -28061,21 +28157,21 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:505
+#: doc/classes/Image.xml:506
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with signed floating-point "
"RGB components."
msgstr ""
-#: doc/classes/Image.xml:508
+#: doc/classes/Image.xml:509
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned floating-point "
"RGB components."
msgstr ""
-#: doc/classes/Image.xml:511
+#: doc/classes/Image.xml:512
msgid ""
"Texture format used on PowerVR-supported mobile platforms, uses 2-bit color "
"depth with no alpha. More information can be found [url=https://en.wikipedia."
@@ -28084,25 +28180,25 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:515
+#: doc/classes/Image.xml:516
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with an "
"alpha component."
msgstr ""
-#: doc/classes/Image.xml:518
+#: doc/classes/Image.xml:519
msgid ""
"Similar to [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with 4-"
"bit color depth and no alpha."
msgstr ""
-#: doc/classes/Image.xml:521
+#: doc/classes/Image.xml:522
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC4[/url], but with an "
"alpha component."
msgstr ""
-#: doc/classes/Image.xml:524
+#: doc/classes/Image.xml:525
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC1]Ericsson Texture Compression format 1[/"
@@ -28110,7 +28206,7 @@ msgid ""
"standard. This format cannot store an alpha channel."
msgstr ""
-#: doc/classes/Image.xml:527
+#: doc/classes/Image.xml:528
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28118,7 +28214,7 @@ msgid ""
"unsigned data."
msgstr ""
-#: doc/classes/Image.xml:530
+#: doc/classes/Image.xml:531
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28126,7 +28222,7 @@ msgid ""
"channel of signed data."
msgstr ""
-#: doc/classes/Image.xml:533
+#: doc/classes/Image.xml:534
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28134,7 +28230,7 @@ msgid ""
"of unsigned data."
msgstr ""
-#: doc/classes/Image.xml:536
+#: doc/classes/Image.xml:537
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28142,7 +28238,7 @@ msgid ""
"channels of signed data."
msgstr ""
-#: doc/classes/Image.xml:539
+#: doc/classes/Image.xml:540
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28152,7 +28248,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:543
+#: doc/classes/Image.xml:544
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28162,7 +28258,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:547
+#: doc/classes/Image.xml:548
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28173,31 +28269,31 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:551
+#: doc/classes/Image.xml:552
msgid "Represents the size of the [enum Format] enum."
msgstr ""
-#: doc/classes/Image.xml:554
+#: doc/classes/Image.xml:555
msgid ""
"Performs nearest-neighbor interpolation. If the image is resized, it will be "
"pixelated."
msgstr ""
-#: doc/classes/Image.xml:557
+#: doc/classes/Image.xml:558
msgid ""
"Performs bilinear interpolation. If the image is resized, it will be blurry. "
"This mode is faster than [constant INTERPOLATE_CUBIC], but it results in "
"lower quality."
msgstr ""
-#: doc/classes/Image.xml:560
+#: doc/classes/Image.xml:561
msgid ""
"Performs cubic interpolation. If the image is resized, it will be blurry. "
"This mode often gives better results compared to [constant "
"INTERPOLATE_BILINEAR], at the cost of being slower."
msgstr ""
-#: doc/classes/Image.xml:563
+#: doc/classes/Image.xml:564
msgid ""
"Performs bilinear separately on the two most-suited mipmap levels, then "
"linearly interpolates between them.\n"
@@ -28212,55 +28308,55 @@ msgid ""
"a new set will be generated for the resulting image."
msgstr ""
-#: doc/classes/Image.xml:570
+#: doc/classes/Image.xml:571
msgid ""
"Performs Lanczos interpolation. This is the slowest image resizing mode, but "
"it typically gives the best results, especially when downscalng images."
msgstr ""
-#: doc/classes/Image.xml:573
+#: doc/classes/Image.xml:574
msgid "Image does not have alpha."
msgstr ""
-#: doc/classes/Image.xml:576
+#: doc/classes/Image.xml:577
msgid "Image stores alpha in a single bit."
msgstr ""
-#: doc/classes/Image.xml:579
+#: doc/classes/Image.xml:580
msgid "Image uses alpha."
msgstr ""
-#: doc/classes/Image.xml:582
+#: doc/classes/Image.xml:583
msgid "Use S3TC compression."
msgstr ""
-#: doc/classes/Image.xml:585
+#: doc/classes/Image.xml:586
msgid "Use PVRTC2 compression."
msgstr ""
-#: doc/classes/Image.xml:588
+#: doc/classes/Image.xml:589
msgid "Use PVRTC4 compression."
msgstr ""
-#: doc/classes/Image.xml:591
+#: doc/classes/Image.xml:592
msgid "Use ETC compression."
msgstr ""
-#: doc/classes/Image.xml:594
+#: doc/classes/Image.xml:595
msgid "Use ETC2 compression."
msgstr ""
-#: doc/classes/Image.xml:597
+#: doc/classes/Image.xml:598
msgid ""
"Source texture (before compression) is a regular texture. Default for all "
"textures."
msgstr ""
-#: doc/classes/Image.xml:600
+#: doc/classes/Image.xml:601
msgid "Source texture (before compression) is in sRGB space."
msgstr ""
-#: doc/classes/Image.xml:603
+#: doc/classes/Image.xml:604
msgid ""
"Source texture (before compression) is a normal texture (e.g. it can be "
"compressed into two channels)."
@@ -28485,6 +28581,17 @@ msgstr ""
#: doc/classes/Input.xml:43
msgid ""
+"Sends all input events which are in the current buffer to the game loop. "
+"These events may have been buffered as a result of accumulated input "
+"([method set_use_accumulated_input]) or agile input flushing ([member "
+"ProjectSettings.input_devices/buffering/agile_event_flushing]).\n"
+"The engine will already do this itself at key execution points (at least "
+"once per frame). However, this can be useful in advanced cases where you "
+"want precise control over the timing of event handling."
+msgstr ""
+
+#: doc/classes/Input.xml:50
+msgid ""
"Returns the acceleration of the device's accelerometer sensor, if the device "
"has one. Otherwise, the method returns [constant Vector3.ZERO].\n"
"Note this method returns an empty [Vector3] when running from the editor "
@@ -28496,7 +28603,7 @@ msgid ""
"the Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:53
+#: doc/classes/Input.xml:60
msgid ""
"Returns a value between 0 and 1 representing the raw intensity of the given "
"action, ignoring the action's deadzone. In most cases, you should use "
@@ -28506,7 +28613,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:62
+#: doc/classes/Input.xml:69
msgid ""
"Returns a value between 0 and 1 representing the intensity of the given "
"action. In a joypad, for example, the further away the axis (analog sticks "
@@ -28518,7 +28625,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:71
+#: doc/classes/Input.xml:78
msgid ""
"Get axis input by specifying two actions, one negative and one positive.\n"
"This is a shorthand for writing [code]Input."
@@ -28526,17 +28633,17 @@ msgid ""
"get_action_strength(\"negative_action\")[/code]."
msgstr ""
-#: doc/classes/Input.xml:78
+#: doc/classes/Input.xml:85
msgid ""
"Returns an [Array] containing the device IDs of all currently connected "
"joypads."
msgstr ""
-#: doc/classes/Input.xml:84
+#: doc/classes/Input.xml:91
msgid "Returns the currently assigned cursor shape (see [enum CursorShape])."
msgstr ""
-#: doc/classes/Input.xml:90
+#: doc/classes/Input.xml:97
msgid ""
"Returns the gravity of the device's accelerometer sensor, if the device has "
"one. Otherwise, the method returns [constant Vector3.ZERO].\n"
@@ -28546,7 +28653,7 @@ msgid ""
"Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:97
+#: doc/classes/Input.xml:104
msgid ""
"Returns the rotation rate in rad/s around a device's X, Y, and Z axes of the "
"gyroscope sensor, if the device has one. Otherwise, the method returns "
@@ -28555,53 +28662,53 @@ msgid ""
"it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:106
+#: doc/classes/Input.xml:113
msgid ""
"Returns the current value of the joypad axis at given index (see [enum "
"JoystickList])."
msgstr ""
-#: doc/classes/Input.xml:113
+#: doc/classes/Input.xml:120
msgid "Returns the index of the provided axis name."
msgstr ""
-#: doc/classes/Input.xml:120
+#: doc/classes/Input.xml:127
msgid ""
"Receives a [enum JoystickList] axis and returns its equivalent name as a "
"string."
msgstr ""
-#: doc/classes/Input.xml:127
+#: doc/classes/Input.xml:134
msgid "Returns the index of the provided button name."
msgstr ""
-#: doc/classes/Input.xml:134
+#: doc/classes/Input.xml:141
msgid ""
"Receives a gamepad button from [enum JoystickList] and returns its "
"equivalent name as a string."
msgstr ""
-#: doc/classes/Input.xml:141
+#: doc/classes/Input.xml:148
msgid ""
"Returns a SDL2-compatible device GUID on platforms that use gamepad "
"remapping. Returns [code]\"Default Gamepad\"[/code] otherwise."
msgstr ""
-#: doc/classes/Input.xml:148
+#: doc/classes/Input.xml:155
msgid "Returns the name of the joypad at the specified device index."
msgstr ""
-#: doc/classes/Input.xml:155
+#: doc/classes/Input.xml:162
msgid "Returns the duration of the current vibration effect in seconds."
msgstr ""
-#: doc/classes/Input.xml:162
+#: doc/classes/Input.xml:169
msgid ""
"Returns the strength of the joypad vibration: x is the strength of the weak "
"motor, and y is the strength of the strong motor."
msgstr ""
-#: doc/classes/Input.xml:168
+#: doc/classes/Input.xml:175
msgid ""
"Returns the mouse speed for the last time the cursor was moved, and this "
"until the next frame where the mouse moves. This means that even if the "
@@ -28609,7 +28716,7 @@ msgid ""
"motion."
msgstr ""
-#: doc/classes/Input.xml:174
+#: doc/classes/Input.xml:181
msgid ""
"Returns the magnetic field strength in micro-Tesla for all axes of the "
"device's magnetometer sensor, if the device has one. Otherwise, the method "
@@ -28618,17 +28725,17 @@ msgid ""
"platforms, it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:181
+#: doc/classes/Input.xml:188
msgid ""
"Returns mouse buttons as a bitmask. If multiple mouse buttons are pressed at "
"the same time, the bits are added together."
msgstr ""
-#: doc/classes/Input.xml:187
+#: doc/classes/Input.xml:194
msgid "Returns the mouse mode. See the constants for more information."
msgstr ""
-#: doc/classes/Input.xml:198
+#: doc/classes/Input.xml:205
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -28641,7 +28748,7 @@ msgid ""
"want (on the range of 0 to 1)."
msgstr ""
-#: doc/classes/Input.xml:208
+#: doc/classes/Input.xml:215
msgid ""
"Returns [code]true[/code] when the user starts pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user pressed down "
@@ -28653,7 +28760,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:218
+#: doc/classes/Input.xml:225
msgid ""
"Returns [code]true[/code] when the user stops pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user released the "
@@ -28663,7 +28770,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:227
+#: doc/classes/Input.xml:234
msgid ""
"Returns [code]true[/code] if you are pressing the action event. Note that if "
"an action has multiple buttons assigned and more than one of them is "
@@ -28674,13 +28781,13 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:236
+#: doc/classes/Input.xml:243
msgid ""
"Returns [code]true[/code] if you are pressing the joypad button (see [enum "
"JoystickList])."
msgstr ""
-#: doc/classes/Input.xml:243
+#: doc/classes/Input.xml:250
msgid ""
"Returns [code]true[/code] if the system knows the specified device. This "
"means that it sets all button and axis indices exactly as defined in [enum "
@@ -28688,19 +28795,19 @@ msgid ""
"but you can still retrieve events from them."
msgstr ""
-#: doc/classes/Input.xml:250
+#: doc/classes/Input.xml:257
msgid ""
"Returns [code]true[/code] if you are pressing the key. You can pass a [enum "
"KeyList] constant."
msgstr ""
-#: doc/classes/Input.xml:257
+#: doc/classes/Input.xml:264
msgid ""
"Returns [code]true[/code] if you are pressing the mouse button specified "
"with [enum ButtonList]."
msgstr ""
-#: doc/classes/Input.xml:267
+#: doc/classes/Input.xml:274
msgid ""
"Notifies the [Input] singleton that a connection has changed, to update the "
"state for the [code]device[/code] index.\n"
@@ -28709,7 +28816,7 @@ msgid ""
"triggered internally."
msgstr ""
-#: doc/classes/Input.xml:275
+#: doc/classes/Input.xml:282
msgid ""
"Feeds an [InputEvent] to the game. Can be used to artificially trigger input "
"events from code. Also generates [method Node._input] calls.\n"
@@ -28722,12 +28829,21 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Input.xml:289
+#: doc/classes/Input.xml:296
msgid ""
"Removes all mappings from the internal database that match the given GUID."
msgstr ""
-#: doc/classes/Input.xml:298
+#: doc/classes/Input.xml:303
+msgid ""
+"Sets the acceleration value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:313
msgid ""
"Sets a custom mouse cursor image, which is only visible inside the game "
"window. The hotspot can also be specified. Passing [code]null[/code] to the "
@@ -28742,7 +28858,7 @@ msgid ""
"compression mode can't be used for custom cursors."
msgstr ""
-#: doc/classes/Input.xml:309
+#: doc/classes/Input.xml:324
msgid ""
"Sets the default cursor shape to be used in the viewport instead of "
"[constant CURSOR_ARROW].\n"
@@ -28752,11 +28868,38 @@ msgid ""
"cursor immediately."
msgstr ""
-#: doc/classes/Input.xml:318
+#: doc/classes/Input.xml:333
+msgid ""
+"Sets the gravity value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:341
+msgid ""
+"Sets the value of the rotation rate of the gyroscope sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:349
+msgid ""
+"Sets the value of the magnetic field of the magnetometer sensor. Can be used "
+"for debugging on devices without a hardware sensor, for example in an editor "
+"on a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:357
msgid "Sets the mouse mode. See the constants for more information."
msgstr ""
-#: doc/classes/Input.xml:325
+#: doc/classes/Input.xml:364
msgid ""
"Enables or disables the accumulation of similar input events sent by the "
"operating system. When input accumulation is enabled, all input events "
@@ -28770,7 +28913,7 @@ msgid ""
"results that closely follow the actual input."
msgstr ""
-#: doc/classes/Input.xml:336
+#: doc/classes/Input.xml:375
msgid ""
"Starts to vibrate the joypad. Joypads usually come with two rumble motors, a "
"strong and a weak one. [code]weak_magnitude[/code] is the strength of the "
@@ -28783,34 +28926,34 @@ msgid ""
"few seconds."
msgstr ""
-#: doc/classes/Input.xml:344
+#: doc/classes/Input.xml:383
msgid "Stops the vibration of the joypad."
msgstr ""
-#: doc/classes/Input.xml:351
+#: doc/classes/Input.xml:390
msgid ""
"Vibrate Android and iOS devices.\n"
"[b]Note:[/b] It needs [code]VIBRATE[/code] permission for Android at export "
"settings. iOS does not support duration."
msgstr ""
-#: doc/classes/Input.xml:359
+#: doc/classes/Input.xml:398
msgid "Sets the mouse position to the specified vector."
msgstr ""
-#: doc/classes/Input.xml:368
+#: doc/classes/Input.xml:407
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
-#: doc/classes/Input.xml:374
+#: doc/classes/Input.xml:413
msgid "Makes the mouse cursor visible if it is hidden."
msgstr ""
-#: doc/classes/Input.xml:377
+#: doc/classes/Input.xml:416
msgid "Makes the mouse cursor hidden if it is visible."
msgstr ""
-#: doc/classes/Input.xml:380
+#: doc/classes/Input.xml:419
msgid ""
"Captures the mouse. The mouse will be hidden and its position locked at the "
"center of the screen.\n"
@@ -28818,83 +28961,83 @@ msgid ""
"need to use [member InputEventMouseMotion.relative]."
msgstr ""
-#: doc/classes/Input.xml:384
+#: doc/classes/Input.xml:423
msgid "Makes the mouse cursor visible but confines it to the game window."
msgstr ""
-#: doc/classes/Input.xml:387
+#: doc/classes/Input.xml:426
msgid "Arrow cursor. Standard, default pointing cursor."
msgstr ""
-#: doc/classes/Input.xml:390
+#: doc/classes/Input.xml:429
msgid ""
"I-beam cursor. Usually used to show where the text cursor will appear when "
"the mouse is clicked."
msgstr ""
-#: doc/classes/Input.xml:393
+#: doc/classes/Input.xml:432
msgid ""
"Pointing hand cursor. Usually used to indicate the pointer is over a link or "
"other interactable item."
msgstr ""
-#: doc/classes/Input.xml:396
+#: doc/classes/Input.xml:435
msgid ""
"Cross cursor. Typically appears over regions in which a drawing operation "
"can be performed or for selections."
msgstr ""
-#: doc/classes/Input.xml:399
+#: doc/classes/Input.xml:438
msgid ""
"Wait cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application is still usable during the "
"operation."
msgstr ""
-#: doc/classes/Input.xml:402
+#: doc/classes/Input.xml:441
msgid ""
"Busy cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application isn't usable during the "
"operation (e.g. something is blocking its main thread)."
msgstr ""
-#: doc/classes/Input.xml:405
+#: doc/classes/Input.xml:444
msgid "Drag cursor. Usually displayed when dragging something."
msgstr ""
-#: doc/classes/Input.xml:408
+#: doc/classes/Input.xml:447
msgid ""
"Can drop cursor. Usually displayed when dragging something to indicate that "
"it can be dropped at the current position."
msgstr ""
-#: doc/classes/Input.xml:411
+#: doc/classes/Input.xml:450
msgid ""
"Forbidden cursor. Indicates that the current action is forbidden (for "
"example, when dragging something) or that the control at a position is "
"disabled."
msgstr ""
-#: doc/classes/Input.xml:414
+#: doc/classes/Input.xml:453
msgid ""
"Vertical resize mouse cursor. A double-headed vertical arrow. It tells the "
"user they can resize the window or the panel vertically."
msgstr ""
-#: doc/classes/Input.xml:417
+#: doc/classes/Input.xml:456
msgid ""
"Horizontal resize mouse cursor. A double-headed horizontal arrow. It tells "
"the user they can resize the window or the panel horizontally."
msgstr ""
-#: doc/classes/Input.xml:420
+#: doc/classes/Input.xml:459
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the bottom left to the top right. It tells the user they can resize the "
"window or the panel both horizontally and vertically."
msgstr ""
-#: doc/classes/Input.xml:423
+#: doc/classes/Input.xml:462
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the top left to the bottom right, the opposite of [constant "
@@ -28902,23 +29045,23 @@ msgid ""
"both horizontally and vertically."
msgstr ""
-#: doc/classes/Input.xml:426
+#: doc/classes/Input.xml:465
msgid "Move cursor. Indicates that something can be moved."
msgstr ""
-#: doc/classes/Input.xml:429
+#: doc/classes/Input.xml:468
msgid ""
"Vertical split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_VSIZE]."
msgstr ""
-#: doc/classes/Input.xml:432
+#: doc/classes/Input.xml:471
msgid ""
"Horizontal split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_HSIZE]."
msgstr ""
-#: doc/classes/Input.xml:435
+#: doc/classes/Input.xml:474
msgid "Help cursor. Usually a question mark."
msgstr ""
@@ -29334,7 +29477,9 @@ msgid "The drag position."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -30648,7 +30793,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30713,22 +30859,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -30743,7 +30891,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -30751,19 +30899,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -30834,7 +30982,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30892,7 +31041,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -32178,14 +32329,21 @@ msgid "Default text [Color] of the [LinkButton]."
msgstr ""
#: doc/classes/LinkButton.xml:46
-msgid "Text [Color] used when the [LinkButton] is being hovered."
+msgid ""
+"Text [Color] used when the [LinkButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/LinkButton.xml:49
-msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgid "Text [Color] used when the [LinkButton] is being hovered."
msgstr ""
#: doc/classes/LinkButton.xml:52
+msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:55
msgid "The vertical space between the baseline of text and the underline."
msgstr ""
@@ -32678,26 +32836,33 @@ msgid "Text [Color] used when the [MenuButton] is disabled."
msgstr ""
#: doc/classes/MenuButton.xml:64
-msgid "Text [Color] used when the [MenuButton] is being hovered."
+msgid ""
+"Text [Color] used when the [MenuButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/MenuButton.xml:67
-msgid "Text [Color] used when the [MenuButton] is being pressed."
+msgid "Text [Color] used when the [MenuButton] is being hovered."
msgstr ""
#: doc/classes/MenuButton.xml:70
-msgid "[StyleBox] used when the [MenuButton] is being hovered."
+msgid "Text [Color] used when the [MenuButton] is being pressed."
msgstr ""
#: doc/classes/MenuButton.xml:73
-msgid "The horizontal space between [MenuButton]'s icon and text."
+msgid "[StyleBox] used when the [MenuButton] is being hovered."
msgstr ""
#: doc/classes/MenuButton.xml:76
-msgid "Default [StyleBox] for the [MenuButton]."
+msgid "The horizontal space between [MenuButton]'s icon and text."
msgstr ""
#: doc/classes/MenuButton.xml:79
+msgid "Default [StyleBox] for the [MenuButton]."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:82
msgid "[StyleBox] used when the [MenuButton] is being pressed."
msgstr ""
@@ -34431,7 +34596,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -35098,8 +35263,8 @@ msgstr ""
"는 ê²ƒì„ í™•ì‹ í•  수 있습니다.\n"
"(특히 ì”¬ì„ ë‹¤ë¥¸ ì”¬ì— ì¸ìŠ¤í„´ì‹±í•  때) 씬 계층구조를 ì¶”ì í•˜ê¸° 위해 [member "
"owner] ì†ì„±ìœ¼ë¡œ ë…¸ë“œì˜ \"주ì¸\"ì„ ì„¤ì •í•  수 있습니다. ì´ë¥¼ 통해 누가 ì´ ì”¬ì„ "
-"ì¸ìŠ¤í„´ì‹±í–ˆëŠ”ì§€ ì¶”ì í•  수 있습니다. ì—디터나 ë„구를 작성하는 ëŒ€ë¶€ë¶„ì˜ ê²½ìš°ì— "
-"ì´ ê¸°ëŠ¥ì´ ìœ ìš©í•©ë‹ˆë‹¤.\n"
+"ì¸ìŠ¤í„´ì‹±í–ˆëŠ”ì§€ ì¶”ì í•  수 있습니다. ì—디터나 íˆ´ì„ ìž‘ì„±í•˜ëŠ” ëŒ€ë¶€ë¶„ì˜ ê²½ìš°ì— ì´ "
+"ê¸°ëŠ¥ì´ ìœ ìš©í•©ë‹ˆë‹¤.\n"
"마지막으로, [method Object.free]나 [method queue_free]를 통해 노드를 해제하"
"는 경우 ìžì† ë…¸ë“œë“¤ë„ ê°™ì´ í•´ì œë©ë‹ˆë‹¤.\n"
"[b]그룹:[/b] 노드는 ì›í™œí•œ 관리를 위해 필요한 ë§Œí¼ ê·¸ë£¹ì— ì¶”ê°€ë  ìˆ˜ 있는ë°, "
@@ -37441,26 +37606,33 @@ msgid "Text [Color] used when the [OptionButton] is disabled."
msgstr ""
#: doc/classes/OptionButton.xml:212
-msgid "Text [Color] used when the [OptionButton] is being hovered."
+msgid ""
+"Text [Color] used when the [OptionButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/OptionButton.xml:215
-msgid "Text [Color] used when the [OptionButton] is being pressed."
+msgid "Text [Color] used when the [OptionButton] is being hovered."
msgstr ""
#: doc/classes/OptionButton.xml:218
-msgid "[StyleBox] used when the [OptionButton] is being hovered."
+msgid "Text [Color] used when the [OptionButton] is being pressed."
msgstr ""
#: doc/classes/OptionButton.xml:221
-msgid "The horizontal space between [OptionButton]'s icon and text."
+msgid "[StyleBox] used when the [OptionButton] is being hovered."
msgstr ""
#: doc/classes/OptionButton.xml:224
-msgid "Default [StyleBox] for the [OptionButton]."
+msgid "The horizontal space between [OptionButton]'s icon and text."
msgstr ""
#: doc/classes/OptionButton.xml:227
+msgid "Default [StyleBox] for the [OptionButton]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:230
msgid "[StyleBox] used when the [OptionButton] is being pressed."
msgstr ""
@@ -37866,7 +38038,7 @@ msgstr ""
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -37896,14 +38068,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -37913,7 +38085,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -40414,17 +40586,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -40442,11 +40640,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -40641,7 +40839,9 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-msgid "Returns the [Physics2DDirectBodyState] of the body."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
@@ -41444,6 +41644,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -41461,7 +41679,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -41575,7 +41793,9 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-msgid "Returns the [PhysicsDirectBodyState] of the body."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/PhysicsServer.xml:370
@@ -42557,27 +42777,27 @@ msgstr ""
msgid "Removes an element from the array by index."
msgstr ""
-#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolColorArray.xml:66
-#: doc/classes/PoolIntArray.xml:67 doc/classes/PoolRealArray.xml:67
-#: doc/classes/PoolStringArray.xml:74 doc/classes/PoolVector2Array.xml:67
-#: doc/classes/PoolVector3Array.xml:66
+#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolIntArray.xml:67
+#: doc/classes/PoolRealArray.xml:67
msgid ""
"Sets the size of the array. If the array is grown, reserves elements at the "
"end of the array. If the array is shrunk, truncates the array to the new "
-"size."
+"size.\n"
+"[b]Note:[/b] Added elements are not automatically initialized to 0 and will "
+"contain garbage, i.e. indeterminate values."
msgstr ""
-#: doc/classes/PoolByteArray.xml:121
+#: doc/classes/PoolByteArray.xml:122
msgid "Changes the byte at the given index."
msgstr ""
-#: doc/classes/PoolByteArray.xml:127 doc/classes/PoolColorArray.xml:79
-#: doc/classes/PoolRealArray.xml:80 doc/classes/PoolStringArray.xml:87
+#: doc/classes/PoolByteArray.xml:128 doc/classes/PoolColorArray.xml:79
+#: doc/classes/PoolRealArray.xml:81 doc/classes/PoolStringArray.xml:87
#: doc/classes/PoolVector2Array.xml:80 doc/classes/PoolVector3Array.xml:79
msgid "Returns the size of the array."
msgstr ""
-#: doc/classes/PoolByteArray.xml:135
+#: doc/classes/PoolByteArray.xml:136
msgid ""
"Returns the slice of the [PoolByteArray] between indices (inclusive) as a "
"new [PoolByteArray]. Any negative index is considered to be from the end of "
@@ -42609,6 +42829,14 @@ msgstr ""
msgid "Appends a value to the array."
msgstr ""
+#: doc/classes/PoolColorArray.xml:66 doc/classes/PoolStringArray.xml:74
+#: doc/classes/PoolVector2Array.xml:67 doc/classes/PoolVector3Array.xml:66
+msgid ""
+"Sets the size of the array. If the array is grown, reserves elements at the "
+"end of the array. If the array is shrunk, truncates the array to the new "
+"size."
+msgstr ""
+
#: doc/classes/PoolColorArray.xml:73
msgid "Changes the [Color] at the given index."
msgstr ""
@@ -42645,11 +42873,11 @@ msgid ""
"valid, or at the end of the array ([code]idx == size()[/code])."
msgstr ""
-#: doc/classes/PoolIntArray.xml:74
+#: doc/classes/PoolIntArray.xml:75
msgid "Changes the int at the given index."
msgstr ""
-#: doc/classes/PoolIntArray.xml:80
+#: doc/classes/PoolIntArray.xml:81
msgid "Returns the array size."
msgstr ""
@@ -42681,7 +42909,7 @@ msgstr ""
msgid "Appends a [PoolRealArray] at the end of this array."
msgstr ""
-#: doc/classes/PoolRealArray.xml:74
+#: doc/classes/PoolRealArray.xml:75
msgid "Changes the float at the given index."
msgstr ""
@@ -43948,18 +44176,6 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:204
msgid ""
-"The project data directory is used for storing project-specific data "
-"(metadata, shader cache, etc.).\n"
-"[b]Note:[/b] Restart the application after changing this setting.\n"
-"[b]Note:[/b] Changing this value can help on platforms or with third-party "
-"tools where specific directory patterns are disallowed. Only modify this "
-"setting if you know that your environment requires it, as changing the "
-"default can impact compatibility with some external tools or plugins which "
-"expect the default [code].import[/code] folder."
-msgstr ""
-
-#: doc/classes/ProjectSettings.xml:209
-msgid ""
"Specifies a file to override project settings. For example: [code]user://"
"custom_settings.cfg[/code]. See \"Overriding\" in the [ProjectSettings] "
"class description at the top for more information.\n"
@@ -43967,7 +44183,7 @@ msgid ""
"code] will still be read to override the project settings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:213
+#: doc/classes/ProjectSettings.xml:208
msgid ""
"If [code]true[/code], the project will save user data to its own user "
"directory (see [member application/config/custom_user_dir_name]). This "
@@ -43977,13 +44193,28 @@ msgid ""
"user data directory)/Godot/app_userdata/(project name)[/code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:216
+#: doc/classes/ProjectSettings.xml:211
+msgid ""
+"If [code]true[/code], the project will use a hidden directory ([code]."
+"import[/code]) for storing project-specific data (metadata, shader cache, "
+"etc.).\n"
+"If [code]false[/code], a non-hidden directory ([code]import[/code]) will be "
+"used instead.\n"
+"[b]Note:[/b] Restart the application after changing this setting.\n"
+"[b]Note:[/b] Changing this value can help on platforms or with third-party "
+"tools where hidden directory patterns are disallowed. Only modify this "
+"setting if you know that your environment requires it, as changing the "
+"default can impact compatibility with some external tools or plugins which "
+"expect the default [code].import[/code] folder."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:217
msgid ""
"Icon set in [code].ico[/code] format used on Windows to set the game's icon. "
"This is done automatically on start by calling [method OS.set_native_icon]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:219
+#: doc/classes/ProjectSettings.xml:220
msgid ""
"Time samples for frame deltas are subject to random variation introduced by "
"the platform, even when frames are displayed at regular intervals thanks to "
@@ -43997,14 +44228,14 @@ msgid ""
"adequate to render frames at the refresh rate."
msgstr ""
-#: doc/classes/ProjectSettings.xml:224
+#: doc/classes/ProjectSettings.xml:225
msgid ""
"[b]Experimental.[/b] Shifts the measurement of delta time for each frame to "
"just after the drawing has taken place. This may lead to more consistent "
"deltas and a reduction in frame stutters."
msgstr ""
-#: doc/classes/ProjectSettings.xml:227
+#: doc/classes/ProjectSettings.xml:228
msgid ""
"If [code]true[/code], disables printing to standard error. If [code]true[/"
"code], this also hides error and warning messages printed by [method "
@@ -44013,7 +44244,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:231
+#: doc/classes/ProjectSettings.xml:232
msgid ""
"If [code]true[/code], disables printing to standard output. This is "
"equivalent to starting the editor or project with the [code]--quiet[/code] "
@@ -44021,7 +44252,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:235
+#: doc/classes/ProjectSettings.xml:236
msgid ""
"If [code]true[/code], flushes the standard output stream every time a line "
"is printed. This affects both terminal logging and file logging.\n"
@@ -44037,20 +44268,20 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:241
+#: doc/classes/ProjectSettings.xml:242
msgid ""
"Debug build override for [member application/run/flush_stdout_on_print], as "
"performance is less important during debugging.\n"
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:245
+#: doc/classes/ProjectSettings.xml:246
msgid ""
"Forces a delay between frames in the main loop (in milliseconds). This may "
"be useful if you plan to disable vertical synchronization."
msgstr ""
-#: doc/classes/ProjectSettings.xml:248
+#: doc/classes/ProjectSettings.xml:249
msgid ""
"If [code]true[/code], enables low-processor usage mode. This setting only "
"works on desktop platforms. The screen is not redrawn if nothing changes "
@@ -44058,75 +44289,81 @@ msgid ""
"useless (and can hurt performance) in most games."
msgstr ""
-#: doc/classes/ProjectSettings.xml:251
+#: doc/classes/ProjectSettings.xml:252
msgid ""
"Amount of sleeping between frames when the low-processor usage mode is "
"enabled (in microseconds). Higher values will result in lower CPU usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:254
+#: doc/classes/ProjectSettings.xml:255
msgid "Path to the main scene file that will be loaded when the project runs."
msgstr ""
-#: doc/classes/ProjectSettings.xml:257 doc/classes/ProjectSettings.xml:260
+#: doc/classes/ProjectSettings.xml:258 doc/classes/ProjectSettings.xml:261
msgid ""
"Audio buses will disable automatically when sound goes below a given dB "
"threshold for a given time. This saves CPU as effects assigned to that bus "
"will no longer do any processing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:263
+#: doc/classes/ProjectSettings.xml:264
msgid ""
"Default [AudioBusLayout] resource file to use in the project, unless "
"overridden by the scene."
msgstr ""
-#: doc/classes/ProjectSettings.xml:266
+#: doc/classes/ProjectSettings.xml:267
msgid ""
"Specifies the audio driver to use. This setting is platform-dependent as "
"each platform supports different audio drivers. If left empty, the default "
"audio driver will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:269
+#: doc/classes/ProjectSettings.xml:270
msgid ""
"If [code]true[/code], microphone input will be allowed. This requires "
"appropriate permissions to be set when exporting to Android or iOS."
msgstr ""
-#: doc/classes/ProjectSettings.xml:272
+#: doc/classes/ProjectSettings.xml:273
msgid ""
"The mixing rate used for audio (in Hz). In general, it's better to not touch "
"this and leave it to the host operating system."
msgstr ""
-#: doc/classes/ProjectSettings.xml:275
+#: doc/classes/ProjectSettings.xml:276
msgid ""
"Safer override for [member audio/mix_rate] in the Web platform. Here "
"[code]0[/code] means \"let the browser choose\" (since some browsers do not "
"like forcing the mix rate)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:278
+#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:281
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:284
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:287
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -44136,7 +44373,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:290
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -44146,27 +44383,27 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:293
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:296
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
-#: doc/classes/ProjectSettings.xml:299
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:302
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -44174,81 +44411,81 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:305
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:308
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:311
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:314
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:317
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr ""
-#: doc/classes/ProjectSettings.xml:320
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:323
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:326
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:329
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:332
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:335
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:338
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:341
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -44256,109 +44493,109 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:344
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:347
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:350
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:353
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:356
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:359
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:362
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:365
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:368
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:371
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:374
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:377
+#: doc/classes/ProjectSettings.xml:380
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:380
+#: doc/classes/ProjectSettings.xml:383
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:383
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:386
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:389
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:392
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:395
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:398
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -44369,91 +44606,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:403
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:406
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:409
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:412
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:415
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:418
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:421
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:424
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:427
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:430
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:433
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:436
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:439
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr ""
-#: doc/classes/ProjectSettings.xml:442
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:445
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:448
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:451
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -44462,13 +44699,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:455
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:458
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -44478,7 +44715,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:463
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -44486,19 +44723,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:468
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:472
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:476
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -44512,45 +44749,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:481
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:484
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:488
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:491
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:494
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:497
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:500
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -44559,7 +44796,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:503
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -44570,7 +44807,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:507
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -44586,14 +44823,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:515
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:518
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -44601,49 +44838,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:521
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:524
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:529
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:532
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:535
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:538
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:541
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:544
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:547
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -44652,7 +44889,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:551
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44660,7 +44897,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:555
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44668,7 +44905,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:559
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44678,7 +44915,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:563
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -44687,7 +44924,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:567
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -44696,7 +44933,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:571
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44706,7 +44943,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:575
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44714,7 +44951,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:579
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -44724,7 +44961,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:583
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -44734,7 +44971,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:587
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44742,7 +44979,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:591
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -44751,7 +44988,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:595
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44759,7 +44996,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:599
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -44771,477 +45008,477 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:605
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:608
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:611
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:614
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:617
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:620
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:623
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:626
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:629
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:632
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:635
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:638
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:641
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:644
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:647
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:650
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:653
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:656
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:659
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:662
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:665
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:668
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:671
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:674
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:677
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:680
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:683
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:686
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:689
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:692
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:695
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:698
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:701
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:704
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:707
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:710
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:713
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:716
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:719
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:722
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:725
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:728
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:731
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:734
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:737
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:740
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:743
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:746
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:749
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:752
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:755
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:758
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:761
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:764
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:767
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:770
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:773
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:776
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:779
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:782
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:785
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:788
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:791
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:794
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:797
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:800
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:803
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:806
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:809
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:812
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:815
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:818
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:821
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:824
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:827
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:830
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:833
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:836
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:839
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:842
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:845
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:848
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:851
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:854
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:857
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:860
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:863
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:866
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:869
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:872
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:875
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:878
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:881
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr ""
-#: doc/classes/ProjectSettings.xml:884
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:887
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:890
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:893
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:896
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:899
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:902
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:905
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:908
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:911
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:914
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:917
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:920
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:923
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:926
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:929
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:932
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:935
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:938
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:941
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:946
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:949
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -45249,92 +45486,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:952
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:955
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:958
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:961
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:964
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:967
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:970
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:973
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:976
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:979
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:982
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:985
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:988
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:991
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:994
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:997
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1000
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1003
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -45344,33 +45581,33 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1007
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1010
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1013
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1017
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1021
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45383,7 +45620,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1025
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45395,7 +45632,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1033
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45407,7 +45644,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1041
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45420,7 +45657,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1045
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -45428,28 +45665,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1049
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1053
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1056
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1059
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -45459,25 +45696,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1063
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1066
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1069
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1072
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45490,7 +45727,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1076
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45502,7 +45739,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1084
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45514,7 +45751,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1092
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45527,13 +45764,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1096
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1099
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -45541,11 +45778,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1103
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1106
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -45559,7 +45796,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1112
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -45568,7 +45805,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1116
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -45584,7 +45821,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1121
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -45594,7 +45831,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1125
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45604,7 +45841,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1129
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -45615,7 +45852,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1133
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45625,7 +45862,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1137
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -45633,7 +45870,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1141
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -45644,7 +45881,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1145
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -45659,7 +45896,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1151
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -45668,13 +45905,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1156
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1159
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -45683,7 +45920,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1162
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -45693,7 +45930,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1165
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -45705,7 +45942,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1168
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -45715,24 +45952,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1171
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1174
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1177
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1180
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -45741,7 +45978,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1183
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -45749,7 +45986,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1186
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -45758,7 +45995,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1189
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -45768,7 +46005,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1193
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -45776,31 +46013,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1197
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1200
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1203
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1206
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1209
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -45808,7 +46045,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1212
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -45818,46 +46055,53 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1215
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1218
+#: doc/classes/ProjectSettings.xml:1221
+msgid ""
+"iOS specific override for [member rendering/gles2/compatibility/"
+"disable_half_float], due to poor support for half-float vertex compression "
+"on many devices."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1224
msgid ""
-"If [code]true[/code] and available on the target device, enables high "
-"floating point precision for all shader computations in GLES2.\n"
+"If [code]true[/code] and available on the target Android device, enables "
+"high floating point precision for all shader computations in GLES2.\n"
"[b]Warning:[/b] High floating point precision can be extremely slow on older "
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1225
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1228
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1231
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1234
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -45865,7 +46109,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1237
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -45875,7 +46119,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1240
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -45884,7 +46128,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1243
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -45893,20 +46137,20 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1246
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1249
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1252
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -45915,7 +46159,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1255
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -45923,7 +46167,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1258
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -45932,7 +46176,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -45942,20 +46186,20 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1267
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1274
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -45964,13 +46208,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -45980,46 +46224,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1293
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1296
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1299
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1302
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1305
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -46029,7 +46273,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -46041,7 +46285,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -46049,7 +46293,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1316
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -46057,7 +46301,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -46066,7 +46310,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1323
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -46080,7 +46324,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1328
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -46090,7 +46334,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1331
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -46099,7 +46343,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1334
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -46109,54 +46353,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1337
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1340
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1343
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1346
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1349
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1352
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1355
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1358
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -46167,61 +46411,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1365
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1368
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1371
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1374
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1377
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1380
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1383
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1386
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -46232,7 +46476,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -46241,26 +46485,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1393 doc/classes/ProjectSettings.xml:1396
#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1405
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1408
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1411
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -46271,20 +46515,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1418
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -46296,52 +46540,52 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1428
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1435
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1438
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1441
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1444
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1447
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1450
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1453
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -46349,7 +46593,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -46359,10 +46603,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -46371,10 +46615,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -46383,10 +46627,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -46395,10 +46639,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -46407,10 +46651,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -47074,40 +47318,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr ""
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -47115,14 +47373,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -49457,6 +49715,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -49474,7 +49748,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -49482,11 +49756,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -49496,19 +49770,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -54923,20 +55197,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -54947,28 +55226,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -54980,19 +55259,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
@@ -57779,26 +58058,33 @@ msgid "Text [Color] used when the [ToolButton] is disabled."
msgstr ""
#: doc/classes/ToolButton.xml:39
-msgid "Text [Color] used when the [ToolButton] is being hovered."
+msgid ""
+"Text [Color] used when the [ToolButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/ToolButton.xml:42
-msgid "Text [Color] used when the [ToolButton] is being pressed."
+msgid "Text [Color] used when the [ToolButton] is being hovered."
msgstr ""
#: doc/classes/ToolButton.xml:45
-msgid "[StyleBox] used when the [ToolButton] is being hovered."
+msgid "Text [Color] used when the [ToolButton] is being pressed."
msgstr ""
#: doc/classes/ToolButton.xml:48
-msgid "The horizontal space between [ToolButton]'s icon and text."
+msgid "[StyleBox] used when the [ToolButton] is being hovered."
msgstr ""
#: doc/classes/ToolButton.xml:51
-msgid "Default [StyleBox] for the [ToolButton]."
+msgid "The horizontal space between [ToolButton]'s icon and text."
msgstr ""
#: doc/classes/ToolButton.xml:54
+msgid "Default [StyleBox] for the [ToolButton]."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:57
msgid "[StyleBox] used when the [ToolButton] is being pressed."
msgstr ""
@@ -61080,6 +61366,17 @@ msgid ""
"Finally, viewports can also behave as render targets, in which case they "
"will not be visible unless the associated texture is used to draw."
msgstr ""
+"ë·°í¬íŠ¸ëŠ” ì”¬ì— ë‹¤ë¥¸ 뷰를 ìƒì„±í•˜ê±°ë‚˜ 다른 ë·°í¬íЏ ë‚´ë¶€ì— ì„œë¸Œ 뷰를 ìƒì„±í•©ë‹ˆë‹¤. "
+"ìžì‹ 2D 노드가 ì—¬ê¸°ì— í‘œì‹œë˜ê³  ìžì‹ ì¹´ë©”ë¼ 3D ë…¸ë“œë„ ì—¬ê¸°ì— ë Œë”ë§ë©ë‹ˆë‹¤.\n"
+"ë·°í¬íŠ¸ëŠ” ìžì²´ì ìœ¼ë¡œ 2D ë˜ëŠ” 3D 세계를 가질 수 있으므로 다른 ë·°í¬íŠ¸ì™€ 그리는 "
+"ë‚´ìš©ì„ ê³µìœ í•˜ì§€ 않습니다.\n"
+"ë·°í¬íŠ¸ê°€ [ViewportContainer]ì˜ ìžì‹ì´ë©´ ìžë™ìœ¼ë¡œ í¬ê¸°ë¥¼ 차지하며, 그렇지 않으"
+"ë©´ 수ë™ìœ¼ë¡œ 설정해야 합니다.\n"
+"ë·°í¬íŠ¸ëŠ” ë˜í•œ 오디오 리스너가 ë˜ë„ë¡ ì„ íƒí•  수 있으므로 ë·°í¬íŠ¸ì˜ 2D ë˜ëŠ” 3D "
+"ì¹´ë©”ë¼ ìžì‹ì— ë”°ë¼ positional audio를 ìƒì„±í•©ë‹ˆë‹¤.\n"
+"ë˜í•œ ìž¥ì¹˜ì— ì—¬ëŸ¬ í™”ë©´ì´ ìžˆëŠ” 경우 ë·°í¬íŠ¸ë¥¼ 다른 í™”ë©´ì— í• ë‹¹í•  수 있습니다.\n"
+"마지막으로 ë·°í¬íŠ¸ëŠ” ë Œë” íƒ€ê²Ÿìœ¼ë¡œ ìž‘ë™í•  ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. ì´ ê²½ìš° ì—°ê²°ëœí…스처"
+"를 사용하여 그리지 않는 한 ë³´ì´ì§€ 않습니다."
#: doc/classes/Viewport.xml:16
#, fuzzy
@@ -69689,6 +69986,14 @@ msgid ""
"skybox). Usually, these are added in order to improve the realism/color "
"balance of the scene."
msgstr ""
+"[WorldEnvironment] 노드는 ì”¬ì˜ ê¸°ë³¸ [Environment]를 설정하는 ë° ì‚¬ìš©ë©ë‹ˆë‹¤.\n"
+"[WorldEnvironment]ì— ì •ì˜ëœ 매개변수는 현재 [Camera]ì— ì„¤ì •ëœ [Environment] "
+"ë…¸ë“œì— ì˜í•´ 재정ì˜ë  수 있습니다. ë˜í•œ 한 ë²ˆì— í•˜ë‚˜ì˜ [WorldEnvironment]ë§Œ ì§€"
+"ì •ëœ ì”¬ì—서 ì¸ìŠ¤í„´ìŠ¤í™”í•  수 있습니다.\n"
+"[WorldEnvironment]를 통해 사용ìžëŠ” 기본 조명 매개변수(예: ambient lighting), "
+"다양한 후처리 효과(예: SSAO, DOF, Tonemapping), 배경 그리는 방법(예: solid "
+"color, skybox)ì„ ì§€ì •í•  수 있습니다. ì¼ë°˜ì ìœ¼ë¡œ ì”¬ì˜ ì‚¬ì‹¤ê°/ìƒ‰ìƒ ê· í˜•ì„ ê°œì„ "
+"하기 위해 추가ë©ë‹ˆë‹¤."
#: doc/classes/WorldEnvironment.xml:21
msgid ""
diff --git a/doc/translations/lv.po b/doc/translations/lv.po
index e1833c8445..2740831460 100644
--- a/doc/translations/lv.po
+++ b/doc/translations/lv.po
@@ -6,12 +6,13 @@
# Agnis Aldiņš <agnis16@gmail.com>, 2020.
# Pierre Stempin <pierre.stempin@gmail.com>, 2020.
# Rihards Kubilis <oldcar@inbox.lv>, 2020.
+# M E <gruffy7932@gmail.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2020-11-15 12:43+0000\n"
-"Last-Translator: Rihards Kubilis <oldcar@inbox.lv>\n"
+"PO-Revision-Date: 2021-11-12 13:49+0000\n"
+"Last-Translator: M E <gruffy7932@gmail.com>\n"
"Language-Team: Latvian <https://hosted.weblate.org/projects/godot-engine/"
"godot-class-reference/lv/>\n"
"Language: lv\n"
@@ -20,51 +21,51 @@ msgstr ""
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=3; plural=(n % 10 == 0 || n % 100 >= 11 && n % 100 <= "
"19) ? 0 : ((n % 10 == 1 && n % 100 != 11) ? 1 : 2);\n"
-"X-Generator: Weblate 4.4-dev\n"
+"X-Generator: Weblate 4.9.1-dev\n"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Description"
-msgstr ""
+msgstr "Apraksts"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Tutorials"
-msgstr ""
+msgstr "PamÄcÄ«bas"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Properties"
-msgstr ""
+msgstr "Iestatījumi"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Methods"
-msgstr ""
+msgstr "Metodes"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Theme Properties"
-msgstr ""
+msgstr "Motīva iestatījumi"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Signals"
msgstr "SignÄli"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Enumerations"
-msgstr ""
+msgstr "Uzskaites"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Constants"
msgstr "Konstantes"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Property Descriptions"
-msgstr ""
+msgstr "Iestatījumu apraksti"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Method Descriptions"
msgstr "Metožu Apraksts"
#: modules/gdscript/doc_classes/@GDScript.xml:4
msgid "Built-in GDScript functions."
-msgstr ""
+msgstr "IebÅ«vÄ“tÄs GDScript funkcijas."
#: modules/gdscript/doc_classes/@GDScript.xml:7
msgid ""
@@ -72,6 +73,9 @@ msgid ""
"utilities. Everything else is provided by objects. (Keywords: builtin, built "
"in, global functions.)"
msgstr ""
+"Saraksts ar iebÅ«vÄ“tajÄm GDScript funkcijÄm. MatemÄtikas un citas noderÄ«gas "
+"funkcijas. Visu pÄrÄ“jo nodroÅ¡ina objekti. (AtslÄ“gasvÄrdi: iebÅ«vÄ“ts, globÄlas "
+"funkcijas)"
#: modules/gdscript/doc_classes/@GDScript.xml:19
msgid ""
@@ -86,6 +90,15 @@ msgid ""
"red = Color8(255, 0, 0)\n"
"[/codeblock]"
msgstr ""
+"Atgriež krÄsu, kas sastÄdÄ«ta no ciparu sarkanÄ, zaļÄ, zilÄ un alfa kanÄla. "
+"Katram kanÄlam jÄbÅ«t vismaz 8 bitu informÄcijai robežÄs no 0 lÄ«dz 255.\n"
+"[code]r8[/code] sarkanais kanÄls\n"
+"[code]g8[/code] zaļais kanÄls\n"
+"[code]b8[/code] zilais kanÄls\n"
+"[code]a8[/code] alfa kanÄls\n"
+"[codeblock]\n"
+"sarkans = Color8(255, 0, 0)\n"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:34
msgid ""
@@ -3592,112 +3605,121 @@ msgid ""
msgstr ""
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr ""
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
msgstr ""
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
msgstr ""
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
msgstr ""
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr ""
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr ""
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr ""
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
msgstr ""
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr ""
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
msgstr ""
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
msgstr ""
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr ""
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
"positive.\n"
@@ -4775,7 +4797,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -6211,21 +6233,25 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
#: doc/classes/Area.xml:17
msgid ""
-"Returns a list of intersecting [Area]s. For performance reasons (collisions "
-"are all processed at the same time) this list is modified once during the "
-"physics step, not immediately after objects are moved. Consider using "
-"signals instead."
+"Returns a list of intersecting [Area]s. The overlapping area's [member "
+"CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:23
+#: doc/classes/Area.xml:24
msgid ""
-"Returns a list of intersecting [PhysicsBody]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody]s. The overlapping body's "
+"[member CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:30
+#: doc/classes/Area.xml:32
msgid ""
"If [code]true[/code], the given area overlaps the Area.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6233,7 +6259,7 @@ msgid ""
"physics step. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:38
+#: doc/classes/Area.xml:40
msgid ""
"If [code]true[/code], the given physics body overlaps the Area.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6244,7 +6270,7 @@ msgid ""
"their tiles with collision shapes as a virtual physics body)."
msgstr ""
-#: doc/classes/Area.xml:46
+#: doc/classes/Area.xml:48
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
"velocity lost per second.\n"
@@ -6252,41 +6278,41 @@ msgid ""
"details about damping."
msgstr ""
-#: doc/classes/Area.xml:50 doc/classes/Area2D.xml:52
+#: doc/classes/Area.xml:52 doc/classes/Area2D.xml:54
msgid "The name of the area's audio bus."
msgstr ""
-#: doc/classes/Area.xml:53 doc/classes/Area2D.xml:55
+#: doc/classes/Area.xml:55 doc/classes/Area2D.xml:57
msgid ""
"If [code]true[/code], the area's audio bus overrides the default audio bus."
msgstr ""
-#: doc/classes/Area.xml:56
+#: doc/classes/Area.xml:58
msgid ""
"The area's gravity intensity (in meters per second squared). This value "
"multiplies the gravity vector. This is useful to alter the force of gravity "
"without altering its direction."
msgstr ""
-#: doc/classes/Area.xml:59 doc/classes/Area2D.xml:61
+#: doc/classes/Area.xml:61 doc/classes/Area2D.xml:63
msgid ""
"The falloff factor for point gravity. The greater the value, the faster "
"gravity decreases with distance."
msgstr ""
-#: doc/classes/Area.xml:62 doc/classes/Area2D.xml:64
+#: doc/classes/Area.xml:64 doc/classes/Area2D.xml:66
msgid ""
"If [code]true[/code], gravity is calculated from a point (set via [member "
"gravity_vec]). See also [member space_override]."
msgstr ""
-#: doc/classes/Area.xml:65 doc/classes/Area2D.xml:67
+#: doc/classes/Area.xml:67 doc/classes/Area2D.xml:69
msgid ""
"The area's gravity vector (not normalized). If gravity is a point (see "
"[member gravity_point]), this will be the point of attraction."
msgstr ""
-#: doc/classes/Area.xml:68
+#: doc/classes/Area.xml:70
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
"velocity lost per second.\n"
@@ -6294,61 +6320,61 @@ msgid ""
"about damping."
msgstr ""
-#: doc/classes/Area.xml:72 doc/classes/Area2D.xml:74
+#: doc/classes/Area.xml:74 doc/classes/Area2D.xml:76
msgid "If [code]true[/code], other monitoring areas can detect this area."
msgstr ""
-#: doc/classes/Area.xml:75 doc/classes/Area2D.xml:77
+#: doc/classes/Area.xml:77 doc/classes/Area2D.xml:79
msgid ""
"If [code]true[/code], the area detects bodies or areas entering and exiting "
"it."
msgstr ""
-#: doc/classes/Area.xml:78 doc/classes/Area2D.xml:80
+#: doc/classes/Area.xml:80 doc/classes/Area2D.xml:82
msgid "The area's priority. Higher priority areas are processed first."
msgstr ""
-#: doc/classes/Area.xml:81
+#: doc/classes/Area.xml:83
msgid ""
"The degree to which this area applies reverb to its associated audio. Ranges "
"from [code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
msgstr ""
-#: doc/classes/Area.xml:84
+#: doc/classes/Area.xml:86
msgid "If [code]true[/code], the area applies reverb to its associated audio."
msgstr ""
-#: doc/classes/Area.xml:87
+#: doc/classes/Area.xml:89
msgid "The reverb bus name to use for this area's associated audio."
msgstr ""
-#: doc/classes/Area.xml:90
+#: doc/classes/Area.xml:92
msgid ""
"The degree to which this area's reverb is a uniform effect. Ranges from "
"[code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
msgstr ""
-#: doc/classes/Area.xml:93 doc/classes/Area2D.xml:83
+#: doc/classes/Area.xml:95 doc/classes/Area2D.xml:85
msgid ""
"Override mode for gravity and damping calculations within this area. See "
"[enum SpaceOverride] for possible values."
msgstr ""
-#: doc/classes/Area.xml:100
+#: doc/classes/Area.xml:102
msgid ""
"Emitted when another Area enters this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
-#: doc/classes/Area.xml:107
+#: doc/classes/Area.xml:109
msgid ""
"Emitted when another Area exits this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
-#: doc/classes/Area.xml:117 doc/classes/Area.xml:130
+#: doc/classes/Area.xml:119 doc/classes/Area.xml:132
msgid ""
"Emitted when one of another Area's [Shape]s enters one of this Area's "
"[Shape]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6363,7 +6389,7 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:140
+#: doc/classes/Area.xml:142
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] enters this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -6372,7 +6398,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:147
+#: doc/classes/Area.xml:149
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] exits this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -6381,7 +6407,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:157 doc/classes/Area.xml:170
+#: doc/classes/Area.xml:159 doc/classes/Area.xml:172
msgid ""
"Emitted when one of a [PhysicsBody] or [GridMap]'s [Shape]s enters one of "
"this Area's [Shape]s. Requires [member monitoring] to be set to [code]true[/"
@@ -6398,29 +6424,29 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:180 doc/classes/Area2D.xml:170
+#: doc/classes/Area.xml:182 doc/classes/Area2D.xml:172
msgid "This area does not affect gravity/damping."
msgstr ""
-#: doc/classes/Area.xml:183 doc/classes/Area2D.xml:173
+#: doc/classes/Area.xml:185 doc/classes/Area2D.xml:175
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order)."
msgstr ""
-#: doc/classes/Area.xml:186 doc/classes/Area2D.xml:176
+#: doc/classes/Area.xml:188 doc/classes/Area2D.xml:178
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order), ignoring any lower priority areas."
msgstr ""
-#: doc/classes/Area.xml:189 doc/classes/Area2D.xml:179
+#: doc/classes/Area.xml:191 doc/classes/Area2D.xml:181
msgid ""
"This area replaces any gravity/damping, even the defaults, ignoring any "
"lower priority areas."
msgstr ""
-#: doc/classes/Area.xml:192 doc/classes/Area2D.xml:182
+#: doc/classes/Area.xml:194 doc/classes/Area2D.xml:184
msgid ""
"This area replaces any gravity/damping calculated so far (in [member "
"priority] order), but keeps calculating the rest of the areas."
@@ -6459,21 +6485,25 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
#: doc/classes/Area2D.xml:19
msgid ""
-"Returns a list of intersecting [Area2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [Area2D]s. The overlapping area's [member "
+"CollisionObject2D.collision_layer] must be part of this area's [member "
+"CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:25
+#: doc/classes/Area2D.xml:26
msgid ""
-"Returns a list of intersecting [PhysicsBody2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody2D]s. The overlapping body's "
+"[member CollisionObject2D.collision_layer] must be part of this area's "
+"[member CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:32
+#: doc/classes/Area2D.xml:34
msgid ""
"If [code]true[/code], the given area overlaps the Area2D.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6481,7 +6511,7 @@ msgid ""
"the physics step. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:40
+#: doc/classes/Area2D.xml:42
msgid ""
"If [code]true[/code], the given physics body overlaps the Area2D.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6492,7 +6522,7 @@ msgid ""
"register their tiles with collision shapes as a virtual physics body)."
msgstr ""
-#: doc/classes/Area2D.xml:48
+#: doc/classes/Area2D.xml:50
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
"velocity lost per second.\n"
@@ -6500,14 +6530,14 @@ msgid ""
"details about damping."
msgstr ""
-#: doc/classes/Area2D.xml:58
+#: doc/classes/Area2D.xml:60
msgid ""
"The area's gravity intensity (in pixels per second squared). This value "
"multiplies the gravity vector. This is useful to alter the force of gravity "
"without altering its direction."
msgstr ""
-#: doc/classes/Area2D.xml:70
+#: doc/classes/Area2D.xml:72
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
"velocity lost per second.\n"
@@ -6515,21 +6545,21 @@ msgid ""
"about damping."
msgstr ""
-#: doc/classes/Area2D.xml:90
+#: doc/classes/Area2D.xml:92
msgid ""
"Emitted when another Area2D enters this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-#: doc/classes/Area2D.xml:97
+#: doc/classes/Area2D.xml:99
msgid ""
"Emitted when another Area2D exits this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-#: doc/classes/Area2D.xml:107
+#: doc/classes/Area2D.xml:109
msgid ""
"Emitted when one of another Area2D's [Shape2D]s enters one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6544,7 +6574,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:120
+#: doc/classes/Area2D.xml:122
msgid ""
"Emitted when one of another Area2D's [Shape2D]s exits one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6559,7 +6589,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:130
+#: doc/classes/Area2D.xml:132
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] enters this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -6568,7 +6598,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:137
+#: doc/classes/Area2D.xml:139
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] exits this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -6577,7 +6607,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:147
+#: doc/classes/Area2D.xml:149
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s enters one "
"of this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -6596,7 +6626,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:160
+#: doc/classes/Area2D.xml:162
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s exits one of "
"this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -10166,42 +10196,47 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
-"no save path is provided it will try to match the path from the current "
+"no root node is provided, parent of this node will be used as root instead. "
+"If no save path is provided it will try to match the path from the current "
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -10215,62 +10250,62 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
msgid "The rotation of the baked custom sky."
msgstr ""
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -10278,35 +10313,35 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -10314,13 +10349,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -10332,65 +10367,77 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr ""
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
msgid "Baking was successful."
msgstr ""
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr ""
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr ""
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr ""
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:133
+#: doc/classes/BakedLightmap.xml:132
+msgid ""
+"Returns if lightmapper can't be created. Unless you are using a custom "
+"lightmapper, please report this as bug."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:135
+msgid ""
+"There is no root node to start baking from. Either provide [code]from_node[/"
+"code] argument or attach this node to a parent that should be used as root."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:136
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:139
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:142
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -10846,8 +10893,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -11235,26 +11285,33 @@ msgid "Text [Color] used when the [Button] is disabled."
msgstr ""
#: doc/classes/Button.xml:77
-msgid "Text [Color] used when the [Button] is being hovered."
+msgid ""
+"Text [Color] used when the [Button] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/Button.xml:80
-msgid "Text [Color] used when the [Button] is being pressed."
+msgid "Text [Color] used when the [Button] is being hovered."
msgstr ""
#: doc/classes/Button.xml:83
-msgid "[StyleBox] used when the [Button] is being hovered."
+msgid "Text [Color] used when the [Button] is being pressed."
msgstr ""
#: doc/classes/Button.xml:86
-msgid "The horizontal space between [Button]'s icon and text."
+msgid "[StyleBox] used when the [Button] is being hovered."
msgstr ""
#: doc/classes/Button.xml:89
-msgid "Default [StyleBox] for the [Button]."
+msgid "The horizontal space between [Button]'s icon and text."
msgstr ""
#: doc/classes/Button.xml:92
+msgid "Default [StyleBox] for the [Button]."
+msgstr ""
+
+#: doc/classes/Button.xml:95
msgid "[StyleBox] used when the [Button] is being pressed."
msgstr ""
@@ -12723,80 +12780,96 @@ msgstr ""
msgid "The check icon to display when the [CheckBox] is checked."
msgstr ""
-#: doc/classes/CheckBox.xml:30
+#: doc/classes/CheckBox.xml:28
+msgid "The check icon to display when the [CheckBox] is checked and disabled."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:31
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is disabled."
msgstr ""
-#: doc/classes/CheckBox.xml:33
+#: doc/classes/CheckBox.xml:34
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is focused."
msgstr ""
-#: doc/classes/CheckBox.xml:36
+#: doc/classes/CheckBox.xml:37
msgid "The [Font] to use for the [CheckBox] text."
msgstr ""
-#: doc/classes/CheckBox.xml:39
+#: doc/classes/CheckBox.xml:40
msgid "The [CheckBox] text's font color."
msgstr ""
-#: doc/classes/CheckBox.xml:42
+#: doc/classes/CheckBox.xml:43
msgid "The [CheckBox] text's font color when it's disabled."
msgstr ""
-#: doc/classes/CheckBox.xml:45
+#: doc/classes/CheckBox.xml:46
+msgid ""
+"The [CheckBox] text's font color when it's focused. Only replaces the normal "
+"text color of the checkbox. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:49
msgid "The [CheckBox] text's font color when it's hovered."
msgstr ""
-#: doc/classes/CheckBox.xml:48
+#: doc/classes/CheckBox.xml:52
msgid "The [CheckBox] text's font color when it's hovered and pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:51
+#: doc/classes/CheckBox.xml:55
msgid "The [CheckBox] text's font color when it's pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:54
+#: doc/classes/CheckBox.xml:58
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered."
msgstr ""
-#: doc/classes/CheckBox.xml:57
+#: doc/classes/CheckBox.xml:61
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered and "
"pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:60
+#: doc/classes/CheckBox.xml:64
msgid "The separation between the check icon and the text (in pixels)."
msgstr ""
-#: doc/classes/CheckBox.xml:63 doc/classes/CheckButton.xml:58
+#: doc/classes/CheckBox.xml:67 doc/classes/CheckButton.xml:61
msgid "The [StyleBox] to display as a background."
msgstr ""
-#: doc/classes/CheckBox.xml:66
+#: doc/classes/CheckBox.xml:70
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:69
+#: doc/classes/CheckBox.xml:73
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is checked."
msgstr ""
-#: doc/classes/CheckBox.xml:74
+#: doc/classes/CheckBox.xml:78
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is unchecked."
msgstr ""
-#: doc/classes/CheckBox.xml:79
+#: doc/classes/CheckBox.xml:83
msgid "The check icon to display when the [CheckBox] is unchecked."
msgstr ""
+#: doc/classes/CheckBox.xml:86
+msgid ""
+"The check icon to display when the [CheckBox] is unchecked and disabled."
+msgstr ""
+
#: doc/classes/CheckButton.xml:4
msgid "Checkable button. See also [CheckBox]."
msgstr ""
@@ -12840,49 +12913,56 @@ msgid "The [CheckButton] text's font color when it's disabled."
msgstr ""
#: doc/classes/CheckButton.xml:40
-msgid "The [CheckButton] text's font color when it's hovered."
+msgid ""
+"The [CheckButton] text's font color when it's focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/CheckButton.xml:43
-msgid "The [CheckButton] text's font color when it's hovered and pressed."
+msgid "The [CheckButton] text's font color when it's hovered."
msgstr ""
#: doc/classes/CheckButton.xml:46
-msgid "The [CheckButton] text's font color when it's pressed."
+msgid "The [CheckButton] text's font color when it's hovered and pressed."
msgstr ""
#: doc/classes/CheckButton.xml:49
+msgid "The [CheckButton] text's font color when it's pressed."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:52
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered."
msgstr ""
-#: doc/classes/CheckButton.xml:52
+#: doc/classes/CheckButton.xml:55
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered "
"and pressed."
msgstr ""
-#: doc/classes/CheckButton.xml:55
+#: doc/classes/CheckButton.xml:58
msgid "The separation between the toggle icon and the text (in pixels)."
msgstr ""
-#: doc/classes/CheckButton.xml:61
+#: doc/classes/CheckButton.xml:64
msgid "The icon to display when the [CheckButton] is unchecked."
msgstr ""
-#: doc/classes/CheckButton.xml:64
+#: doc/classes/CheckButton.xml:67
msgid "The icon to display when the [CheckButton] is unchecked and disabled."
msgstr ""
-#: doc/classes/CheckButton.xml:67
+#: doc/classes/CheckButton.xml:70
msgid "The icon to display when the [CheckButton] is checked."
msgstr ""
-#: doc/classes/CheckButton.xml:70
+#: doc/classes/CheckButton.xml:73
msgid "The icon to display when the [CheckButton] is checked and disabled."
msgstr ""
-#: doc/classes/CheckButton.xml:73
+#: doc/classes/CheckButton.xml:76
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is pressed."
msgstr ""
@@ -14657,26 +14737,33 @@ msgid "Text [Color] used when the [ColorPickerButton] is disabled."
msgstr ""
#: doc/classes/ColorPickerButton.xml:80
-msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
+msgid ""
+"Text [Color] used when the [ColorPickerButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/ColorPickerButton.xml:83
-msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
+msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
msgstr ""
#: doc/classes/ColorPickerButton.xml:86
-msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
+msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
msgstr ""
#: doc/classes/ColorPickerButton.xml:89
-msgid "The horizontal space between [ColorPickerButton]'s icon and text."
+msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
msgstr ""
#: doc/classes/ColorPickerButton.xml:92
-msgid "Default [StyleBox] for the [ColorPickerButton]."
+msgid "The horizontal space between [ColorPickerButton]'s icon and text."
msgstr ""
#: doc/classes/ColorPickerButton.xml:95
+msgid "Default [StyleBox] for the [ColorPickerButton]."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:98
msgid "[StyleBox] used when the [ColorPickerButton] is being pressed."
msgstr ""
@@ -19906,7 +19993,8 @@ msgid ""
"get_resource_type]. They may optionally specify some import presets that "
"affect the import process. EditorImportPlugins are responsible for creating "
"the resources and saving them in the [code].import[/code] directory (see "
-"[member ProjectSettings.application/config/project_data_dir_name]).\n"
+"[member ProjectSettings.application/config/"
+"use_hidden_project_data_directory]).\n"
"Below is an example EditorImportPlugin that imports a [Mesh] from a file "
"with the extension \".special\" or \".spec\":\n"
"[codeblock]\n"
@@ -20033,7 +20121,7 @@ msgstr ""
msgid ""
"Gets the extension used to save this resource in the [code].import[/code] "
"directory (see [member ProjectSettings.application/config/"
-"project_data_dir_name])."
+"use_hidden_project_data_directory])."
msgstr ""
#: doc/classes/EditorImportPlugin.xml:130
@@ -21068,8 +21156,11 @@ msgstr ""
msgid "Emitted when the value of the edited resource was changed."
msgstr ""
-#: doc/classes/EditorResourcePicker.xml:89
-msgid "Emitted when the resource value was set and user clicked to edit it."
+#: doc/classes/EditorResourcePicker.xml:90
+msgid ""
+"Emitted when the resource value was set and user clicked to edit it. When "
+"[code]edit[/code] is [code]true[/code], the signal was caused by the context "
+"menu \"Edit\" option."
msgstr ""
#: doc/classes/EditorResourcePreview.xml:4
@@ -24818,21 +24909,32 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html"
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -24841,14 +24943,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -24858,80 +24964,80 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
msgstr ""
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr ""
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -27679,16 +27785,18 @@ msgstr ""
#: doc/classes/Image.xml:436
msgid ""
"OpenGL texture format [code]RED[/code] with a single component and a "
-"bitdepth of 8."
+"bitdepth of 8.\n"
+"[b]Note:[/b] When using the GLES2 backend, this uses the alpha channel "
+"instead of the red channel for storage."
msgstr ""
-#: doc/classes/Image.xml:439
+#: doc/classes/Image.xml:440
msgid ""
"OpenGL texture format [code]RG[/code] with two components and a bitdepth of "
"8 for each."
msgstr ""
-#: doc/classes/Image.xml:442
+#: doc/classes/Image.xml:443
msgid ""
"OpenGL texture format [code]RGB[/code] with three components, each with a "
"bitdepth of 8.\n"
@@ -27696,7 +27804,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:446
+#: doc/classes/Image.xml:447
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 8.\n"
@@ -27704,73 +27812,73 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:450
+#: doc/classes/Image.xml:451
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 4."
msgstr ""
-#: doc/classes/Image.xml:453
+#: doc/classes/Image.xml:454
msgid ""
"OpenGL texture format [code]GL_RGB5_A1[/code] where 5 bits of depth for each "
"component of RGB and one bit for alpha."
msgstr ""
-#: doc/classes/Image.xml:456
+#: doc/classes/Image.xml:457
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 32-"
"bit floating-point value."
msgstr ""
-#: doc/classes/Image.xml:459
+#: doc/classes/Image.xml:460
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:462
+#: doc/classes/Image.xml:463
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:465
+#: doc/classes/Image.xml:466
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:468
+#: doc/classes/Image.xml:469
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 16-"
"bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:471
+#: doc/classes/Image.xml:472
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:474
+#: doc/classes/Image.xml:475
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:477
+#: doc/classes/Image.xml:478
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:480
+#: doc/classes/Image.xml:481
msgid ""
"A special OpenGL texture format where the three color components have 9 bits "
"of precision and all three share a single 5-bit exponent."
msgstr ""
-#: doc/classes/Image.xml:483
+#: doc/classes/Image.xml:484
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 1, and is the smallest variation "
@@ -27780,7 +27888,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:487
+#: doc/classes/Image.xml:488
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 2, and color data is interpreted "
@@ -27790,7 +27898,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:491
+#: doc/classes/Image.xml:492
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format also known as Block Compression 3 or BC3 that contains 64 "
@@ -27801,7 +27909,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:495
+#: doc/classes/Image.xml:496
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -27809,7 +27917,7 @@ msgid ""
"DXT5 uses for the alpha channel."
msgstr ""
-#: doc/classes/Image.xml:498
+#: doc/classes/Image.xml:499
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -27817,7 +27925,7 @@ msgid ""
"algorithm that DXT5 uses for the alpha channel."
msgstr ""
-#: doc/classes/Image.xml:501
+#: doc/classes/Image.xml:502
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned normalized "
@@ -27826,21 +27934,21 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:505
+#: doc/classes/Image.xml:506
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with signed floating-point "
"RGB components."
msgstr ""
-#: doc/classes/Image.xml:508
+#: doc/classes/Image.xml:509
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned floating-point "
"RGB components."
msgstr ""
-#: doc/classes/Image.xml:511
+#: doc/classes/Image.xml:512
msgid ""
"Texture format used on PowerVR-supported mobile platforms, uses 2-bit color "
"depth with no alpha. More information can be found [url=https://en.wikipedia."
@@ -27849,25 +27957,25 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:515
+#: doc/classes/Image.xml:516
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with an "
"alpha component."
msgstr ""
-#: doc/classes/Image.xml:518
+#: doc/classes/Image.xml:519
msgid ""
"Similar to [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with 4-"
"bit color depth and no alpha."
msgstr ""
-#: doc/classes/Image.xml:521
+#: doc/classes/Image.xml:522
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC4[/url], but with an "
"alpha component."
msgstr ""
-#: doc/classes/Image.xml:524
+#: doc/classes/Image.xml:525
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC1]Ericsson Texture Compression format 1[/"
@@ -27875,7 +27983,7 @@ msgid ""
"standard. This format cannot store an alpha channel."
msgstr ""
-#: doc/classes/Image.xml:527
+#: doc/classes/Image.xml:528
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27883,7 +27991,7 @@ msgid ""
"unsigned data."
msgstr ""
-#: doc/classes/Image.xml:530
+#: doc/classes/Image.xml:531
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27891,7 +27999,7 @@ msgid ""
"channel of signed data."
msgstr ""
-#: doc/classes/Image.xml:533
+#: doc/classes/Image.xml:534
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27899,7 +28007,7 @@ msgid ""
"of unsigned data."
msgstr ""
-#: doc/classes/Image.xml:536
+#: doc/classes/Image.xml:537
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27907,7 +28015,7 @@ msgid ""
"channels of signed data."
msgstr ""
-#: doc/classes/Image.xml:539
+#: doc/classes/Image.xml:540
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27917,7 +28025,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:543
+#: doc/classes/Image.xml:544
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27927,7 +28035,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:547
+#: doc/classes/Image.xml:548
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27938,31 +28046,31 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:551
+#: doc/classes/Image.xml:552
msgid "Represents the size of the [enum Format] enum."
msgstr ""
-#: doc/classes/Image.xml:554
+#: doc/classes/Image.xml:555
msgid ""
"Performs nearest-neighbor interpolation. If the image is resized, it will be "
"pixelated."
msgstr ""
-#: doc/classes/Image.xml:557
+#: doc/classes/Image.xml:558
msgid ""
"Performs bilinear interpolation. If the image is resized, it will be blurry. "
"This mode is faster than [constant INTERPOLATE_CUBIC], but it results in "
"lower quality."
msgstr ""
-#: doc/classes/Image.xml:560
+#: doc/classes/Image.xml:561
msgid ""
"Performs cubic interpolation. If the image is resized, it will be blurry. "
"This mode often gives better results compared to [constant "
"INTERPOLATE_BILINEAR], at the cost of being slower."
msgstr ""
-#: doc/classes/Image.xml:563
+#: doc/classes/Image.xml:564
msgid ""
"Performs bilinear separately on the two most-suited mipmap levels, then "
"linearly interpolates between them.\n"
@@ -27977,55 +28085,55 @@ msgid ""
"a new set will be generated for the resulting image."
msgstr ""
-#: doc/classes/Image.xml:570
+#: doc/classes/Image.xml:571
msgid ""
"Performs Lanczos interpolation. This is the slowest image resizing mode, but "
"it typically gives the best results, especially when downscalng images."
msgstr ""
-#: doc/classes/Image.xml:573
+#: doc/classes/Image.xml:574
msgid "Image does not have alpha."
msgstr ""
-#: doc/classes/Image.xml:576
+#: doc/classes/Image.xml:577
msgid "Image stores alpha in a single bit."
msgstr ""
-#: doc/classes/Image.xml:579
+#: doc/classes/Image.xml:580
msgid "Image uses alpha."
msgstr ""
-#: doc/classes/Image.xml:582
+#: doc/classes/Image.xml:583
msgid "Use S3TC compression."
msgstr ""
-#: doc/classes/Image.xml:585
+#: doc/classes/Image.xml:586
msgid "Use PVRTC2 compression."
msgstr ""
-#: doc/classes/Image.xml:588
+#: doc/classes/Image.xml:589
msgid "Use PVRTC4 compression."
msgstr ""
-#: doc/classes/Image.xml:591
+#: doc/classes/Image.xml:592
msgid "Use ETC compression."
msgstr ""
-#: doc/classes/Image.xml:594
+#: doc/classes/Image.xml:595
msgid "Use ETC2 compression."
msgstr ""
-#: doc/classes/Image.xml:597
+#: doc/classes/Image.xml:598
msgid ""
"Source texture (before compression) is a regular texture. Default for all "
"textures."
msgstr ""
-#: doc/classes/Image.xml:600
+#: doc/classes/Image.xml:601
msgid "Source texture (before compression) is in sRGB space."
msgstr ""
-#: doc/classes/Image.xml:603
+#: doc/classes/Image.xml:604
msgid ""
"Source texture (before compression) is a normal texture (e.g. it can be "
"compressed into two channels)."
@@ -28249,6 +28357,17 @@ msgstr ""
#: doc/classes/Input.xml:43
msgid ""
+"Sends all input events which are in the current buffer to the game loop. "
+"These events may have been buffered as a result of accumulated input "
+"([method set_use_accumulated_input]) or agile input flushing ([member "
+"ProjectSettings.input_devices/buffering/agile_event_flushing]).\n"
+"The engine will already do this itself at key execution points (at least "
+"once per frame). However, this can be useful in advanced cases where you "
+"want precise control over the timing of event handling."
+msgstr ""
+
+#: doc/classes/Input.xml:50
+msgid ""
"Returns the acceleration of the device's accelerometer sensor, if the device "
"has one. Otherwise, the method returns [constant Vector3.ZERO].\n"
"Note this method returns an empty [Vector3] when running from the editor "
@@ -28260,7 +28379,7 @@ msgid ""
"the Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:53
+#: doc/classes/Input.xml:60
msgid ""
"Returns a value between 0 and 1 representing the raw intensity of the given "
"action, ignoring the action's deadzone. In most cases, you should use "
@@ -28270,7 +28389,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:62
+#: doc/classes/Input.xml:69
msgid ""
"Returns a value between 0 and 1 representing the intensity of the given "
"action. In a joypad, for example, the further away the axis (analog sticks "
@@ -28282,7 +28401,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:71
+#: doc/classes/Input.xml:78
msgid ""
"Get axis input by specifying two actions, one negative and one positive.\n"
"This is a shorthand for writing [code]Input."
@@ -28290,17 +28409,17 @@ msgid ""
"get_action_strength(\"negative_action\")[/code]."
msgstr ""
-#: doc/classes/Input.xml:78
+#: doc/classes/Input.xml:85
msgid ""
"Returns an [Array] containing the device IDs of all currently connected "
"joypads."
msgstr ""
-#: doc/classes/Input.xml:84
+#: doc/classes/Input.xml:91
msgid "Returns the currently assigned cursor shape (see [enum CursorShape])."
msgstr ""
-#: doc/classes/Input.xml:90
+#: doc/classes/Input.xml:97
msgid ""
"Returns the gravity of the device's accelerometer sensor, if the device has "
"one. Otherwise, the method returns [constant Vector3.ZERO].\n"
@@ -28310,7 +28429,7 @@ msgid ""
"Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:97
+#: doc/classes/Input.xml:104
msgid ""
"Returns the rotation rate in rad/s around a device's X, Y, and Z axes of the "
"gyroscope sensor, if the device has one. Otherwise, the method returns "
@@ -28319,53 +28438,53 @@ msgid ""
"it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:106
+#: doc/classes/Input.xml:113
msgid ""
"Returns the current value of the joypad axis at given index (see [enum "
"JoystickList])."
msgstr ""
-#: doc/classes/Input.xml:113
+#: doc/classes/Input.xml:120
msgid "Returns the index of the provided axis name."
msgstr ""
-#: doc/classes/Input.xml:120
+#: doc/classes/Input.xml:127
msgid ""
"Receives a [enum JoystickList] axis and returns its equivalent name as a "
"string."
msgstr ""
-#: doc/classes/Input.xml:127
+#: doc/classes/Input.xml:134
msgid "Returns the index of the provided button name."
msgstr ""
-#: doc/classes/Input.xml:134
+#: doc/classes/Input.xml:141
msgid ""
"Receives a gamepad button from [enum JoystickList] and returns its "
"equivalent name as a string."
msgstr ""
-#: doc/classes/Input.xml:141
+#: doc/classes/Input.xml:148
msgid ""
"Returns a SDL2-compatible device GUID on platforms that use gamepad "
"remapping. Returns [code]\"Default Gamepad\"[/code] otherwise."
msgstr ""
-#: doc/classes/Input.xml:148
+#: doc/classes/Input.xml:155
msgid "Returns the name of the joypad at the specified device index."
msgstr ""
-#: doc/classes/Input.xml:155
+#: doc/classes/Input.xml:162
msgid "Returns the duration of the current vibration effect in seconds."
msgstr ""
-#: doc/classes/Input.xml:162
+#: doc/classes/Input.xml:169
msgid ""
"Returns the strength of the joypad vibration: x is the strength of the weak "
"motor, and y is the strength of the strong motor."
msgstr ""
-#: doc/classes/Input.xml:168
+#: doc/classes/Input.xml:175
msgid ""
"Returns the mouse speed for the last time the cursor was moved, and this "
"until the next frame where the mouse moves. This means that even if the "
@@ -28373,7 +28492,7 @@ msgid ""
"motion."
msgstr ""
-#: doc/classes/Input.xml:174
+#: doc/classes/Input.xml:181
msgid ""
"Returns the magnetic field strength in micro-Tesla for all axes of the "
"device's magnetometer sensor, if the device has one. Otherwise, the method "
@@ -28382,17 +28501,17 @@ msgid ""
"platforms, it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:181
+#: doc/classes/Input.xml:188
msgid ""
"Returns mouse buttons as a bitmask. If multiple mouse buttons are pressed at "
"the same time, the bits are added together."
msgstr ""
-#: doc/classes/Input.xml:187
+#: doc/classes/Input.xml:194
msgid "Returns the mouse mode. See the constants for more information."
msgstr ""
-#: doc/classes/Input.xml:198
+#: doc/classes/Input.xml:205
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -28405,7 +28524,7 @@ msgid ""
"want (on the range of 0 to 1)."
msgstr ""
-#: doc/classes/Input.xml:208
+#: doc/classes/Input.xml:215
msgid ""
"Returns [code]true[/code] when the user starts pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user pressed down "
@@ -28417,7 +28536,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:218
+#: doc/classes/Input.xml:225
msgid ""
"Returns [code]true[/code] when the user stops pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user released the "
@@ -28427,7 +28546,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:227
+#: doc/classes/Input.xml:234
msgid ""
"Returns [code]true[/code] if you are pressing the action event. Note that if "
"an action has multiple buttons assigned and more than one of them is "
@@ -28438,13 +28557,13 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:236
+#: doc/classes/Input.xml:243
msgid ""
"Returns [code]true[/code] if you are pressing the joypad button (see [enum "
"JoystickList])."
msgstr ""
-#: doc/classes/Input.xml:243
+#: doc/classes/Input.xml:250
msgid ""
"Returns [code]true[/code] if the system knows the specified device. This "
"means that it sets all button and axis indices exactly as defined in [enum "
@@ -28452,19 +28571,19 @@ msgid ""
"but you can still retrieve events from them."
msgstr ""
-#: doc/classes/Input.xml:250
+#: doc/classes/Input.xml:257
msgid ""
"Returns [code]true[/code] if you are pressing the key. You can pass a [enum "
"KeyList] constant."
msgstr ""
-#: doc/classes/Input.xml:257
+#: doc/classes/Input.xml:264
msgid ""
"Returns [code]true[/code] if you are pressing the mouse button specified "
"with [enum ButtonList]."
msgstr ""
-#: doc/classes/Input.xml:267
+#: doc/classes/Input.xml:274
msgid ""
"Notifies the [Input] singleton that a connection has changed, to update the "
"state for the [code]device[/code] index.\n"
@@ -28473,7 +28592,7 @@ msgid ""
"triggered internally."
msgstr ""
-#: doc/classes/Input.xml:275
+#: doc/classes/Input.xml:282
msgid ""
"Feeds an [InputEvent] to the game. Can be used to artificially trigger input "
"events from code. Also generates [method Node._input] calls.\n"
@@ -28486,12 +28605,21 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Input.xml:289
+#: doc/classes/Input.xml:296
msgid ""
"Removes all mappings from the internal database that match the given GUID."
msgstr ""
-#: doc/classes/Input.xml:298
+#: doc/classes/Input.xml:303
+msgid ""
+"Sets the acceleration value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:313
msgid ""
"Sets a custom mouse cursor image, which is only visible inside the game "
"window. The hotspot can also be specified. Passing [code]null[/code] to the "
@@ -28506,7 +28634,7 @@ msgid ""
"compression mode can't be used for custom cursors."
msgstr ""
-#: doc/classes/Input.xml:309
+#: doc/classes/Input.xml:324
msgid ""
"Sets the default cursor shape to be used in the viewport instead of "
"[constant CURSOR_ARROW].\n"
@@ -28516,11 +28644,38 @@ msgid ""
"cursor immediately."
msgstr ""
-#: doc/classes/Input.xml:318
+#: doc/classes/Input.xml:333
+msgid ""
+"Sets the gravity value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:341
+msgid ""
+"Sets the value of the rotation rate of the gyroscope sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:349
+msgid ""
+"Sets the value of the magnetic field of the magnetometer sensor. Can be used "
+"for debugging on devices without a hardware sensor, for example in an editor "
+"on a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:357
msgid "Sets the mouse mode. See the constants for more information."
msgstr ""
-#: doc/classes/Input.xml:325
+#: doc/classes/Input.xml:364
msgid ""
"Enables or disables the accumulation of similar input events sent by the "
"operating system. When input accumulation is enabled, all input events "
@@ -28534,7 +28689,7 @@ msgid ""
"results that closely follow the actual input."
msgstr ""
-#: doc/classes/Input.xml:336
+#: doc/classes/Input.xml:375
msgid ""
"Starts to vibrate the joypad. Joypads usually come with two rumble motors, a "
"strong and a weak one. [code]weak_magnitude[/code] is the strength of the "
@@ -28547,34 +28702,34 @@ msgid ""
"few seconds."
msgstr ""
-#: doc/classes/Input.xml:344
+#: doc/classes/Input.xml:383
msgid "Stops the vibration of the joypad."
msgstr ""
-#: doc/classes/Input.xml:351
+#: doc/classes/Input.xml:390
msgid ""
"Vibrate Android and iOS devices.\n"
"[b]Note:[/b] It needs [code]VIBRATE[/code] permission for Android at export "
"settings. iOS does not support duration."
msgstr ""
-#: doc/classes/Input.xml:359
+#: doc/classes/Input.xml:398
msgid "Sets the mouse position to the specified vector."
msgstr ""
-#: doc/classes/Input.xml:368
+#: doc/classes/Input.xml:407
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
-#: doc/classes/Input.xml:374
+#: doc/classes/Input.xml:413
msgid "Makes the mouse cursor visible if it is hidden."
msgstr ""
-#: doc/classes/Input.xml:377
+#: doc/classes/Input.xml:416
msgid "Makes the mouse cursor hidden if it is visible."
msgstr ""
-#: doc/classes/Input.xml:380
+#: doc/classes/Input.xml:419
msgid ""
"Captures the mouse. The mouse will be hidden and its position locked at the "
"center of the screen.\n"
@@ -28582,83 +28737,83 @@ msgid ""
"need to use [member InputEventMouseMotion.relative]."
msgstr ""
-#: doc/classes/Input.xml:384
+#: doc/classes/Input.xml:423
msgid "Makes the mouse cursor visible but confines it to the game window."
msgstr ""
-#: doc/classes/Input.xml:387
+#: doc/classes/Input.xml:426
msgid "Arrow cursor. Standard, default pointing cursor."
msgstr ""
-#: doc/classes/Input.xml:390
+#: doc/classes/Input.xml:429
msgid ""
"I-beam cursor. Usually used to show where the text cursor will appear when "
"the mouse is clicked."
msgstr ""
-#: doc/classes/Input.xml:393
+#: doc/classes/Input.xml:432
msgid ""
"Pointing hand cursor. Usually used to indicate the pointer is over a link or "
"other interactable item."
msgstr ""
-#: doc/classes/Input.xml:396
+#: doc/classes/Input.xml:435
msgid ""
"Cross cursor. Typically appears over regions in which a drawing operation "
"can be performed or for selections."
msgstr ""
-#: doc/classes/Input.xml:399
+#: doc/classes/Input.xml:438
msgid ""
"Wait cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application is still usable during the "
"operation."
msgstr ""
-#: doc/classes/Input.xml:402
+#: doc/classes/Input.xml:441
msgid ""
"Busy cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application isn't usable during the "
"operation (e.g. something is blocking its main thread)."
msgstr ""
-#: doc/classes/Input.xml:405
+#: doc/classes/Input.xml:444
msgid "Drag cursor. Usually displayed when dragging something."
msgstr ""
-#: doc/classes/Input.xml:408
+#: doc/classes/Input.xml:447
msgid ""
"Can drop cursor. Usually displayed when dragging something to indicate that "
"it can be dropped at the current position."
msgstr ""
-#: doc/classes/Input.xml:411
+#: doc/classes/Input.xml:450
msgid ""
"Forbidden cursor. Indicates that the current action is forbidden (for "
"example, when dragging something) or that the control at a position is "
"disabled."
msgstr ""
-#: doc/classes/Input.xml:414
+#: doc/classes/Input.xml:453
msgid ""
"Vertical resize mouse cursor. A double-headed vertical arrow. It tells the "
"user they can resize the window or the panel vertically."
msgstr ""
-#: doc/classes/Input.xml:417
+#: doc/classes/Input.xml:456
msgid ""
"Horizontal resize mouse cursor. A double-headed horizontal arrow. It tells "
"the user they can resize the window or the panel horizontally."
msgstr ""
-#: doc/classes/Input.xml:420
+#: doc/classes/Input.xml:459
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the bottom left to the top right. It tells the user they can resize the "
"window or the panel both horizontally and vertically."
msgstr ""
-#: doc/classes/Input.xml:423
+#: doc/classes/Input.xml:462
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the top left to the bottom right, the opposite of [constant "
@@ -28666,23 +28821,23 @@ msgid ""
"both horizontally and vertically."
msgstr ""
-#: doc/classes/Input.xml:426
+#: doc/classes/Input.xml:465
msgid "Move cursor. Indicates that something can be moved."
msgstr ""
-#: doc/classes/Input.xml:429
+#: doc/classes/Input.xml:468
msgid ""
"Vertical split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_VSIZE]."
msgstr ""
-#: doc/classes/Input.xml:432
+#: doc/classes/Input.xml:471
msgid ""
"Horizontal split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_HSIZE]."
msgstr ""
-#: doc/classes/Input.xml:435
+#: doc/classes/Input.xml:474
msgid "Help cursor. Usually a question mark."
msgstr ""
@@ -29098,7 +29253,9 @@ msgid "The drag position."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -30410,7 +30567,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30475,22 +30633,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -30505,7 +30665,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -30513,19 +30673,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -30596,7 +30756,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30654,7 +30815,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -31939,14 +32102,21 @@ msgid "Default text [Color] of the [LinkButton]."
msgstr ""
#: doc/classes/LinkButton.xml:46
-msgid "Text [Color] used when the [LinkButton] is being hovered."
+msgid ""
+"Text [Color] used when the [LinkButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/LinkButton.xml:49
-msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgid "Text [Color] used when the [LinkButton] is being hovered."
msgstr ""
#: doc/classes/LinkButton.xml:52
+msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:55
msgid "The vertical space between the baseline of text and the underline."
msgstr ""
@@ -32439,26 +32609,33 @@ msgid "Text [Color] used when the [MenuButton] is disabled."
msgstr ""
#: doc/classes/MenuButton.xml:64
-msgid "Text [Color] used when the [MenuButton] is being hovered."
+msgid ""
+"Text [Color] used when the [MenuButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/MenuButton.xml:67
-msgid "Text [Color] used when the [MenuButton] is being pressed."
+msgid "Text [Color] used when the [MenuButton] is being hovered."
msgstr ""
#: doc/classes/MenuButton.xml:70
-msgid "[StyleBox] used when the [MenuButton] is being hovered."
+msgid "Text [Color] used when the [MenuButton] is being pressed."
msgstr ""
#: doc/classes/MenuButton.xml:73
-msgid "The horizontal space between [MenuButton]'s icon and text."
+msgid "[StyleBox] used when the [MenuButton] is being hovered."
msgstr ""
#: doc/classes/MenuButton.xml:76
-msgid "Default [StyleBox] for the [MenuButton]."
+msgid "The horizontal space between [MenuButton]'s icon and text."
msgstr ""
#: doc/classes/MenuButton.xml:79
+msgid "Default [StyleBox] for the [MenuButton]."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:82
msgid "[StyleBox] used when the [MenuButton] is being pressed."
msgstr ""
@@ -34183,7 +34360,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -37067,26 +37244,33 @@ msgid "Text [Color] used when the [OptionButton] is disabled."
msgstr ""
#: doc/classes/OptionButton.xml:212
-msgid "Text [Color] used when the [OptionButton] is being hovered."
+msgid ""
+"Text [Color] used when the [OptionButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/OptionButton.xml:215
-msgid "Text [Color] used when the [OptionButton] is being pressed."
+msgid "Text [Color] used when the [OptionButton] is being hovered."
msgstr ""
#: doc/classes/OptionButton.xml:218
-msgid "[StyleBox] used when the [OptionButton] is being hovered."
+msgid "Text [Color] used when the [OptionButton] is being pressed."
msgstr ""
#: doc/classes/OptionButton.xml:221
-msgid "The horizontal space between [OptionButton]'s icon and text."
+msgid "[StyleBox] used when the [OptionButton] is being hovered."
msgstr ""
#: doc/classes/OptionButton.xml:224
-msgid "Default [StyleBox] for the [OptionButton]."
+msgid "The horizontal space between [OptionButton]'s icon and text."
msgstr ""
#: doc/classes/OptionButton.xml:227
+msgid "Default [StyleBox] for the [OptionButton]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:230
msgid "[StyleBox] used when the [OptionButton] is being pressed."
msgstr ""
@@ -37489,7 +37673,7 @@ msgstr ""
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -37519,14 +37703,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -37536,7 +37720,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -40021,17 +40205,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -40049,11 +40259,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -40248,7 +40458,9 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-msgid "Returns the [Physics2DDirectBodyState] of the body."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
@@ -41050,6 +41262,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -41067,7 +41297,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -41181,7 +41411,9 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-msgid "Returns the [PhysicsDirectBodyState] of the body."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/PhysicsServer.xml:370
@@ -42160,27 +42392,27 @@ msgstr ""
msgid "Removes an element from the array by index."
msgstr ""
-#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolColorArray.xml:66
-#: doc/classes/PoolIntArray.xml:67 doc/classes/PoolRealArray.xml:67
-#: doc/classes/PoolStringArray.xml:74 doc/classes/PoolVector2Array.xml:67
-#: doc/classes/PoolVector3Array.xml:66
+#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolIntArray.xml:67
+#: doc/classes/PoolRealArray.xml:67
msgid ""
"Sets the size of the array. If the array is grown, reserves elements at the "
"end of the array. If the array is shrunk, truncates the array to the new "
-"size."
+"size.\n"
+"[b]Note:[/b] Added elements are not automatically initialized to 0 and will "
+"contain garbage, i.e. indeterminate values."
msgstr ""
-#: doc/classes/PoolByteArray.xml:121
+#: doc/classes/PoolByteArray.xml:122
msgid "Changes the byte at the given index."
msgstr ""
-#: doc/classes/PoolByteArray.xml:127 doc/classes/PoolColorArray.xml:79
-#: doc/classes/PoolRealArray.xml:80 doc/classes/PoolStringArray.xml:87
+#: doc/classes/PoolByteArray.xml:128 doc/classes/PoolColorArray.xml:79
+#: doc/classes/PoolRealArray.xml:81 doc/classes/PoolStringArray.xml:87
#: doc/classes/PoolVector2Array.xml:80 doc/classes/PoolVector3Array.xml:79
msgid "Returns the size of the array."
msgstr ""
-#: doc/classes/PoolByteArray.xml:135
+#: doc/classes/PoolByteArray.xml:136
msgid ""
"Returns the slice of the [PoolByteArray] between indices (inclusive) as a "
"new [PoolByteArray]. Any negative index is considered to be from the end of "
@@ -42212,6 +42444,14 @@ msgstr ""
msgid "Appends a value to the array."
msgstr ""
+#: doc/classes/PoolColorArray.xml:66 doc/classes/PoolStringArray.xml:74
+#: doc/classes/PoolVector2Array.xml:67 doc/classes/PoolVector3Array.xml:66
+msgid ""
+"Sets the size of the array. If the array is grown, reserves elements at the "
+"end of the array. If the array is shrunk, truncates the array to the new "
+"size."
+msgstr ""
+
#: doc/classes/PoolColorArray.xml:73
msgid "Changes the [Color] at the given index."
msgstr ""
@@ -42248,11 +42488,11 @@ msgid ""
"valid, or at the end of the array ([code]idx == size()[/code])."
msgstr ""
-#: doc/classes/PoolIntArray.xml:74
+#: doc/classes/PoolIntArray.xml:75
msgid "Changes the int at the given index."
msgstr ""
-#: doc/classes/PoolIntArray.xml:80
+#: doc/classes/PoolIntArray.xml:81
msgid "Returns the array size."
msgstr ""
@@ -42284,7 +42524,7 @@ msgstr ""
msgid "Appends a [PoolRealArray] at the end of this array."
msgstr ""
-#: doc/classes/PoolRealArray.xml:74
+#: doc/classes/PoolRealArray.xml:75
msgid "Changes the float at the given index."
msgstr ""
@@ -43550,18 +43790,6 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:204
msgid ""
-"The project data directory is used for storing project-specific data "
-"(metadata, shader cache, etc.).\n"
-"[b]Note:[/b] Restart the application after changing this setting.\n"
-"[b]Note:[/b] Changing this value can help on platforms or with third-party "
-"tools where specific directory patterns are disallowed. Only modify this "
-"setting if you know that your environment requires it, as changing the "
-"default can impact compatibility with some external tools or plugins which "
-"expect the default [code].import[/code] folder."
-msgstr ""
-
-#: doc/classes/ProjectSettings.xml:209
-msgid ""
"Specifies a file to override project settings. For example: [code]user://"
"custom_settings.cfg[/code]. See \"Overriding\" in the [ProjectSettings] "
"class description at the top for more information.\n"
@@ -43569,7 +43797,7 @@ msgid ""
"code] will still be read to override the project settings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:213
+#: doc/classes/ProjectSettings.xml:208
msgid ""
"If [code]true[/code], the project will save user data to its own user "
"directory (see [member application/config/custom_user_dir_name]). This "
@@ -43579,13 +43807,28 @@ msgid ""
"user data directory)/Godot/app_userdata/(project name)[/code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:216
+#: doc/classes/ProjectSettings.xml:211
+msgid ""
+"If [code]true[/code], the project will use a hidden directory ([code]."
+"import[/code]) for storing project-specific data (metadata, shader cache, "
+"etc.).\n"
+"If [code]false[/code], a non-hidden directory ([code]import[/code]) will be "
+"used instead.\n"
+"[b]Note:[/b] Restart the application after changing this setting.\n"
+"[b]Note:[/b] Changing this value can help on platforms or with third-party "
+"tools where hidden directory patterns are disallowed. Only modify this "
+"setting if you know that your environment requires it, as changing the "
+"default can impact compatibility with some external tools or plugins which "
+"expect the default [code].import[/code] folder."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:217
msgid ""
"Icon set in [code].ico[/code] format used on Windows to set the game's icon. "
"This is done automatically on start by calling [method OS.set_native_icon]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:219
+#: doc/classes/ProjectSettings.xml:220
msgid ""
"Time samples for frame deltas are subject to random variation introduced by "
"the platform, even when frames are displayed at regular intervals thanks to "
@@ -43599,14 +43842,14 @@ msgid ""
"adequate to render frames at the refresh rate."
msgstr ""
-#: doc/classes/ProjectSettings.xml:224
+#: doc/classes/ProjectSettings.xml:225
msgid ""
"[b]Experimental.[/b] Shifts the measurement of delta time for each frame to "
"just after the drawing has taken place. This may lead to more consistent "
"deltas and a reduction in frame stutters."
msgstr ""
-#: doc/classes/ProjectSettings.xml:227
+#: doc/classes/ProjectSettings.xml:228
msgid ""
"If [code]true[/code], disables printing to standard error. If [code]true[/"
"code], this also hides error and warning messages printed by [method "
@@ -43615,7 +43858,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:231
+#: doc/classes/ProjectSettings.xml:232
msgid ""
"If [code]true[/code], disables printing to standard output. This is "
"equivalent to starting the editor or project with the [code]--quiet[/code] "
@@ -43623,7 +43866,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:235
+#: doc/classes/ProjectSettings.xml:236
msgid ""
"If [code]true[/code], flushes the standard output stream every time a line "
"is printed. This affects both terminal logging and file logging.\n"
@@ -43639,20 +43882,20 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:241
+#: doc/classes/ProjectSettings.xml:242
msgid ""
"Debug build override for [member application/run/flush_stdout_on_print], as "
"performance is less important during debugging.\n"
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:245
+#: doc/classes/ProjectSettings.xml:246
msgid ""
"Forces a delay between frames in the main loop (in milliseconds). This may "
"be useful if you plan to disable vertical synchronization."
msgstr ""
-#: doc/classes/ProjectSettings.xml:248
+#: doc/classes/ProjectSettings.xml:249
msgid ""
"If [code]true[/code], enables low-processor usage mode. This setting only "
"works on desktop platforms. The screen is not redrawn if nothing changes "
@@ -43660,75 +43903,81 @@ msgid ""
"useless (and can hurt performance) in most games."
msgstr ""
-#: doc/classes/ProjectSettings.xml:251
+#: doc/classes/ProjectSettings.xml:252
msgid ""
"Amount of sleeping between frames when the low-processor usage mode is "
"enabled (in microseconds). Higher values will result in lower CPU usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:254
+#: doc/classes/ProjectSettings.xml:255
msgid "Path to the main scene file that will be loaded when the project runs."
msgstr ""
-#: doc/classes/ProjectSettings.xml:257 doc/classes/ProjectSettings.xml:260
+#: doc/classes/ProjectSettings.xml:258 doc/classes/ProjectSettings.xml:261
msgid ""
"Audio buses will disable automatically when sound goes below a given dB "
"threshold for a given time. This saves CPU as effects assigned to that bus "
"will no longer do any processing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:263
+#: doc/classes/ProjectSettings.xml:264
msgid ""
"Default [AudioBusLayout] resource file to use in the project, unless "
"overridden by the scene."
msgstr ""
-#: doc/classes/ProjectSettings.xml:266
+#: doc/classes/ProjectSettings.xml:267
msgid ""
"Specifies the audio driver to use. This setting is platform-dependent as "
"each platform supports different audio drivers. If left empty, the default "
"audio driver will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:269
+#: doc/classes/ProjectSettings.xml:270
msgid ""
"If [code]true[/code], microphone input will be allowed. This requires "
"appropriate permissions to be set when exporting to Android or iOS."
msgstr ""
-#: doc/classes/ProjectSettings.xml:272
+#: doc/classes/ProjectSettings.xml:273
msgid ""
"The mixing rate used for audio (in Hz). In general, it's better to not touch "
"this and leave it to the host operating system."
msgstr ""
-#: doc/classes/ProjectSettings.xml:275
+#: doc/classes/ProjectSettings.xml:276
msgid ""
"Safer override for [member audio/mix_rate] in the Web platform. Here "
"[code]0[/code] means \"let the browser choose\" (since some browsers do not "
"like forcing the mix rate)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:278
+#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:281
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:284
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:287
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43738,7 +43987,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:290
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43748,27 +43997,27 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:293
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:296
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
-#: doc/classes/ProjectSettings.xml:299
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:302
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -43776,81 +44025,81 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:305
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:308
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:311
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:314
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:317
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr ""
-#: doc/classes/ProjectSettings.xml:320
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:323
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:326
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:329
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:332
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:335
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:338
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:341
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -43858,109 +44107,109 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:344
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:347
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:350
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:353
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:356
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:359
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:362
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:365
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:368
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:371
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:374
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:377
+#: doc/classes/ProjectSettings.xml:380
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:380
+#: doc/classes/ProjectSettings.xml:383
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:383
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:386
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:389
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:392
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:395
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:398
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -43971,91 +44220,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:403
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:406
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:409
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:412
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:415
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:418
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:421
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:424
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:427
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:430
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:433
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:436
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:439
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr ""
-#: doc/classes/ProjectSettings.xml:442
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:445
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:448
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:451
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -44064,13 +44313,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:455
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:458
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -44080,7 +44329,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:463
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -44088,19 +44337,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:468
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:472
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:476
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -44114,45 +44363,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:481
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:484
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:488
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:491
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:494
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:497
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:500
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -44161,7 +44410,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:503
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -44172,7 +44421,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:507
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -44188,14 +44437,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:515
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:518
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -44203,49 +44452,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:521
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:524
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:529
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:532
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:535
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:538
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:541
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:544
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:547
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -44254,7 +44503,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:551
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44262,7 +44511,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:555
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44270,7 +44519,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:559
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44280,7 +44529,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:563
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -44289,7 +44538,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:567
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -44298,7 +44547,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:571
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44308,7 +44557,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:575
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44316,7 +44565,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:579
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -44326,7 +44575,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:583
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -44336,7 +44585,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:587
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44344,7 +44593,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:591
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -44353,7 +44602,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:595
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44361,7 +44610,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:599
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -44373,477 +44622,477 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:605
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:608
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:611
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:614
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:617
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:620
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:623
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:626
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:629
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:632
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:635
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:638
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:641
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:644
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:647
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:650
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:653
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:656
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:659
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:662
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:665
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:668
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:671
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:674
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:677
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:680
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:683
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:686
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:689
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:692
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:695
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:698
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:701
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:704
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:707
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:710
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:713
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:716
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:719
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:722
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:725
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:728
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:731
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:734
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:737
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:740
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:743
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:746
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:749
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:752
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:755
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:758
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:761
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:764
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:767
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:770
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:773
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:776
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:779
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:782
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:785
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:788
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:791
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:794
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:797
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:800
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:803
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:806
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:809
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:812
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:815
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:818
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:821
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:824
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:827
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:830
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:833
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:836
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:839
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:842
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:845
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:848
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:851
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:854
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:857
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:860
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:863
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:866
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:869
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:872
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:875
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:878
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:881
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr ""
-#: doc/classes/ProjectSettings.xml:884
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:887
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:890
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:893
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:896
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:899
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:902
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:905
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:908
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:911
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:914
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:917
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:920
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:923
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:926
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:929
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:932
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:935
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:938
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:941
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:946
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:949
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -44851,92 +45100,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:952
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:955
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:958
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:961
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:964
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:967
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:970
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:973
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:976
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:979
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:982
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:985
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:988
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:991
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:994
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:997
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1000
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1003
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -44946,33 +45195,33 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1007
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1010
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1013
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1017
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1021
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -44985,7 +45234,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1025
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -44997,7 +45246,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1033
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45009,7 +45258,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1041
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45022,7 +45271,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1045
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -45030,28 +45279,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1049
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1053
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1056
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1059
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -45061,25 +45310,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1063
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1066
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1069
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1072
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45092,7 +45341,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1076
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45104,7 +45353,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1084
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45116,7 +45365,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1092
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45129,13 +45378,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1096
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1099
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -45143,11 +45392,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1103
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1106
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -45161,7 +45410,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1112
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -45170,7 +45419,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1116
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -45186,7 +45435,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1121
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -45196,7 +45445,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1125
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45206,7 +45455,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1129
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -45217,7 +45466,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1133
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45227,7 +45476,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1137
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -45235,7 +45484,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1141
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -45246,7 +45495,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1145
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -45261,7 +45510,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1151
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -45270,13 +45519,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1156
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1159
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -45285,7 +45534,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1162
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -45295,7 +45544,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1165
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -45307,7 +45556,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1168
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -45317,24 +45566,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1171
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1174
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1177
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1180
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -45343,7 +45592,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1183
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -45351,7 +45600,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1186
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -45360,7 +45609,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1189
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -45370,7 +45619,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1193
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -45378,31 +45627,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1197
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1200
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1203
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1206
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1209
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -45410,7 +45659,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1212
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -45420,46 +45669,53 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1215
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1218
+#: doc/classes/ProjectSettings.xml:1221
+msgid ""
+"iOS specific override for [member rendering/gles2/compatibility/"
+"disable_half_float], due to poor support for half-float vertex compression "
+"on many devices."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1224
msgid ""
-"If [code]true[/code] and available on the target device, enables high "
-"floating point precision for all shader computations in GLES2.\n"
+"If [code]true[/code] and available on the target Android device, enables "
+"high floating point precision for all shader computations in GLES2.\n"
"[b]Warning:[/b] High floating point precision can be extremely slow on older "
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1225
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1228
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1231
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1234
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -45467,7 +45723,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1237
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -45477,7 +45733,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1240
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -45486,7 +45742,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1243
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -45495,20 +45751,20 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1246
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1249
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1252
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -45517,7 +45773,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1255
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -45525,7 +45781,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1258
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -45534,7 +45790,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -45544,20 +45800,20 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1267
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1274
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -45566,13 +45822,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -45582,46 +45838,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1293
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1296
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1299
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1302
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1305
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -45631,7 +45887,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -45643,7 +45899,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -45651,7 +45907,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1316
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -45659,7 +45915,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -45668,7 +45924,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1323
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -45682,7 +45938,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1328
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -45692,7 +45948,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1331
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -45701,7 +45957,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1334
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -45711,54 +45967,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1337
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1340
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1343
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1346
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1349
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1352
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1355
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1358
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -45769,61 +46025,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1365
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1368
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1371
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1374
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1377
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1380
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1383
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1386
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -45834,7 +46090,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -45843,26 +46099,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1393 doc/classes/ProjectSettings.xml:1396
#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1405
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1408
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1411
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -45873,20 +46129,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1418
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -45898,52 +46154,52 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1428
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1435
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1438
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1441
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1444
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1447
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1450
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1453
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -45951,7 +46207,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -45961,10 +46217,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -45973,10 +46229,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -45985,10 +46241,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -45997,10 +46253,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -46009,10 +46265,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -46676,40 +46932,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr ""
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -46717,14 +46987,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -49059,6 +49329,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -49076,7 +49362,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -49084,11 +49370,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -49098,19 +49384,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -54525,20 +54811,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -54549,28 +54840,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -54582,19 +54873,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
@@ -57380,26 +57671,33 @@ msgid "Text [Color] used when the [ToolButton] is disabled."
msgstr ""
#: doc/classes/ToolButton.xml:39
-msgid "Text [Color] used when the [ToolButton] is being hovered."
+msgid ""
+"Text [Color] used when the [ToolButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/ToolButton.xml:42
-msgid "Text [Color] used when the [ToolButton] is being pressed."
+msgid "Text [Color] used when the [ToolButton] is being hovered."
msgstr ""
#: doc/classes/ToolButton.xml:45
-msgid "[StyleBox] used when the [ToolButton] is being hovered."
+msgid "Text [Color] used when the [ToolButton] is being pressed."
msgstr ""
#: doc/classes/ToolButton.xml:48
-msgid "The horizontal space between [ToolButton]'s icon and text."
+msgid "[StyleBox] used when the [ToolButton] is being hovered."
msgstr ""
#: doc/classes/ToolButton.xml:51
-msgid "Default [StyleBox] for the [ToolButton]."
+msgid "The horizontal space between [ToolButton]'s icon and text."
msgstr ""
#: doc/classes/ToolButton.xml:54
+msgid "Default [StyleBox] for the [ToolButton]."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:57
msgid "[StyleBox] used when the [ToolButton] is being pressed."
msgstr ""
diff --git a/doc/translations/mr.po b/doc/translations/mr.po
index a1e7498acb..6def4dd098 100644
--- a/doc/translations/mr.po
+++ b/doc/translations/mr.po
@@ -19,43 +19,43 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.4.1-dev\n"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Description"
msgstr ""
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Tutorials"
msgstr "शिकवणà¥à¤¯à¤¾"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Properties"
msgstr ""
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Methods"
msgstr ""
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Theme Properties"
msgstr ""
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Signals"
msgstr ""
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Enumerations"
msgstr ""
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Constants"
msgstr ""
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Property Descriptions"
msgstr ""
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Method Descriptions"
msgstr ""
@@ -3586,112 +3586,121 @@ msgid ""
msgstr ""
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr ""
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
msgstr ""
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
msgstr ""
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
msgstr ""
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr ""
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr ""
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr ""
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
msgstr ""
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr ""
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
msgstr ""
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
msgstr ""
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr ""
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
"positive.\n"
@@ -4763,7 +4772,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -6196,21 +6205,25 @@ msgstr ""
#: doc/classes/Area.xml:17
msgid ""
-"Returns a list of intersecting [Area]s. For performance reasons (collisions "
-"are all processed at the same time) this list is modified once during the "
-"physics step, not immediately after objects are moved. Consider using "
-"signals instead."
+"Returns a list of intersecting [Area]s. The overlapping area's [member "
+"CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:23
+#: doc/classes/Area.xml:24
msgid ""
-"Returns a list of intersecting [PhysicsBody]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody]s. The overlapping body's "
+"[member CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:30
+#: doc/classes/Area.xml:32
msgid ""
"If [code]true[/code], the given area overlaps the Area.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6218,7 +6231,7 @@ msgid ""
"physics step. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:38
+#: doc/classes/Area.xml:40
msgid ""
"If [code]true[/code], the given physics body overlaps the Area.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6229,7 +6242,7 @@ msgid ""
"their tiles with collision shapes as a virtual physics body)."
msgstr ""
-#: doc/classes/Area.xml:46
+#: doc/classes/Area.xml:48
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
"velocity lost per second.\n"
@@ -6237,41 +6250,41 @@ msgid ""
"details about damping."
msgstr ""
-#: doc/classes/Area.xml:50 doc/classes/Area2D.xml:52
+#: doc/classes/Area.xml:52 doc/classes/Area2D.xml:54
msgid "The name of the area's audio bus."
msgstr ""
-#: doc/classes/Area.xml:53 doc/classes/Area2D.xml:55
+#: doc/classes/Area.xml:55 doc/classes/Area2D.xml:57
msgid ""
"If [code]true[/code], the area's audio bus overrides the default audio bus."
msgstr ""
-#: doc/classes/Area.xml:56
+#: doc/classes/Area.xml:58
msgid ""
"The area's gravity intensity (in meters per second squared). This value "
"multiplies the gravity vector. This is useful to alter the force of gravity "
"without altering its direction."
msgstr ""
-#: doc/classes/Area.xml:59 doc/classes/Area2D.xml:61
+#: doc/classes/Area.xml:61 doc/classes/Area2D.xml:63
msgid ""
"The falloff factor for point gravity. The greater the value, the faster "
"gravity decreases with distance."
msgstr ""
-#: doc/classes/Area.xml:62 doc/classes/Area2D.xml:64
+#: doc/classes/Area.xml:64 doc/classes/Area2D.xml:66
msgid ""
"If [code]true[/code], gravity is calculated from a point (set via [member "
"gravity_vec]). See also [member space_override]."
msgstr ""
-#: doc/classes/Area.xml:65 doc/classes/Area2D.xml:67
+#: doc/classes/Area.xml:67 doc/classes/Area2D.xml:69
msgid ""
"The area's gravity vector (not normalized). If gravity is a point (see "
"[member gravity_point]), this will be the point of attraction."
msgstr ""
-#: doc/classes/Area.xml:68
+#: doc/classes/Area.xml:70
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
"velocity lost per second.\n"
@@ -6279,61 +6292,61 @@ msgid ""
"about damping."
msgstr ""
-#: doc/classes/Area.xml:72 doc/classes/Area2D.xml:74
+#: doc/classes/Area.xml:74 doc/classes/Area2D.xml:76
msgid "If [code]true[/code], other monitoring areas can detect this area."
msgstr ""
-#: doc/classes/Area.xml:75 doc/classes/Area2D.xml:77
+#: doc/classes/Area.xml:77 doc/classes/Area2D.xml:79
msgid ""
"If [code]true[/code], the area detects bodies or areas entering and exiting "
"it."
msgstr ""
-#: doc/classes/Area.xml:78 doc/classes/Area2D.xml:80
+#: doc/classes/Area.xml:80 doc/classes/Area2D.xml:82
msgid "The area's priority. Higher priority areas are processed first."
msgstr ""
-#: doc/classes/Area.xml:81
+#: doc/classes/Area.xml:83
msgid ""
"The degree to which this area applies reverb to its associated audio. Ranges "
"from [code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
msgstr ""
-#: doc/classes/Area.xml:84
+#: doc/classes/Area.xml:86
msgid "If [code]true[/code], the area applies reverb to its associated audio."
msgstr ""
-#: doc/classes/Area.xml:87
+#: doc/classes/Area.xml:89
msgid "The reverb bus name to use for this area's associated audio."
msgstr ""
-#: doc/classes/Area.xml:90
+#: doc/classes/Area.xml:92
msgid ""
"The degree to which this area's reverb is a uniform effect. Ranges from "
"[code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
msgstr ""
-#: doc/classes/Area.xml:93 doc/classes/Area2D.xml:83
+#: doc/classes/Area.xml:95 doc/classes/Area2D.xml:85
msgid ""
"Override mode for gravity and damping calculations within this area. See "
"[enum SpaceOverride] for possible values."
msgstr ""
-#: doc/classes/Area.xml:100
+#: doc/classes/Area.xml:102
msgid ""
"Emitted when another Area enters this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
-#: doc/classes/Area.xml:107
+#: doc/classes/Area.xml:109
msgid ""
"Emitted when another Area exits this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
-#: doc/classes/Area.xml:117 doc/classes/Area.xml:130
+#: doc/classes/Area.xml:119 doc/classes/Area.xml:132
msgid ""
"Emitted when one of another Area's [Shape]s enters one of this Area's "
"[Shape]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6348,7 +6361,7 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:140
+#: doc/classes/Area.xml:142
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] enters this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -6357,7 +6370,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:147
+#: doc/classes/Area.xml:149
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] exits this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -6366,7 +6379,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:157 doc/classes/Area.xml:170
+#: doc/classes/Area.xml:159 doc/classes/Area.xml:172
msgid ""
"Emitted when one of a [PhysicsBody] or [GridMap]'s [Shape]s enters one of "
"this Area's [Shape]s. Requires [member monitoring] to be set to [code]true[/"
@@ -6383,29 +6396,29 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:180 doc/classes/Area2D.xml:170
+#: doc/classes/Area.xml:182 doc/classes/Area2D.xml:172
msgid "This area does not affect gravity/damping."
msgstr ""
-#: doc/classes/Area.xml:183 doc/classes/Area2D.xml:173
+#: doc/classes/Area.xml:185 doc/classes/Area2D.xml:175
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order)."
msgstr ""
-#: doc/classes/Area.xml:186 doc/classes/Area2D.xml:176
+#: doc/classes/Area.xml:188 doc/classes/Area2D.xml:178
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order), ignoring any lower priority areas."
msgstr ""
-#: doc/classes/Area.xml:189 doc/classes/Area2D.xml:179
+#: doc/classes/Area.xml:191 doc/classes/Area2D.xml:181
msgid ""
"This area replaces any gravity/damping, even the defaults, ignoring any "
"lower priority areas."
msgstr ""
-#: doc/classes/Area.xml:192 doc/classes/Area2D.xml:182
+#: doc/classes/Area.xml:194 doc/classes/Area2D.xml:184
msgid ""
"This area replaces any gravity/damping calculated so far (in [member "
"priority] order), but keeps calculating the rest of the areas."
@@ -6440,21 +6453,25 @@ msgstr ""
#: doc/classes/Area2D.xml:19
msgid ""
-"Returns a list of intersecting [Area2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [Area2D]s. The overlapping area's [member "
+"CollisionObject2D.collision_layer] must be part of this area's [member "
+"CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:25
+#: doc/classes/Area2D.xml:26
msgid ""
-"Returns a list of intersecting [PhysicsBody2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody2D]s. The overlapping body's "
+"[member CollisionObject2D.collision_layer] must be part of this area's "
+"[member CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:32
+#: doc/classes/Area2D.xml:34
msgid ""
"If [code]true[/code], the given area overlaps the Area2D.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6462,7 +6479,7 @@ msgid ""
"the physics step. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:40
+#: doc/classes/Area2D.xml:42
msgid ""
"If [code]true[/code], the given physics body overlaps the Area2D.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6473,7 +6490,7 @@ msgid ""
"register their tiles with collision shapes as a virtual physics body)."
msgstr ""
-#: doc/classes/Area2D.xml:48
+#: doc/classes/Area2D.xml:50
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
"velocity lost per second.\n"
@@ -6481,14 +6498,14 @@ msgid ""
"details about damping."
msgstr ""
-#: doc/classes/Area2D.xml:58
+#: doc/classes/Area2D.xml:60
msgid ""
"The area's gravity intensity (in pixels per second squared). This value "
"multiplies the gravity vector. This is useful to alter the force of gravity "
"without altering its direction."
msgstr ""
-#: doc/classes/Area2D.xml:70
+#: doc/classes/Area2D.xml:72
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
"velocity lost per second.\n"
@@ -6496,21 +6513,21 @@ msgid ""
"about damping."
msgstr ""
-#: doc/classes/Area2D.xml:90
+#: doc/classes/Area2D.xml:92
msgid ""
"Emitted when another Area2D enters this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-#: doc/classes/Area2D.xml:97
+#: doc/classes/Area2D.xml:99
msgid ""
"Emitted when another Area2D exits this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-#: doc/classes/Area2D.xml:107
+#: doc/classes/Area2D.xml:109
msgid ""
"Emitted when one of another Area2D's [Shape2D]s enters one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6525,7 +6542,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:120
+#: doc/classes/Area2D.xml:122
msgid ""
"Emitted when one of another Area2D's [Shape2D]s exits one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6540,7 +6557,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:130
+#: doc/classes/Area2D.xml:132
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] enters this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -6549,7 +6566,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:137
+#: doc/classes/Area2D.xml:139
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] exits this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -6558,7 +6575,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:147
+#: doc/classes/Area2D.xml:149
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s enters one "
"of this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -6577,7 +6594,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:160
+#: doc/classes/Area2D.xml:162
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s exits one of "
"this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -10132,40 +10149,45 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
-"no save path is provided it will try to match the path from the current "
+"no root node is provided, parent of this node will be used as root instead. "
+"If no save path is provided it will try to match the path from the current "
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -10179,62 +10201,62 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
msgid "The rotation of the baked custom sky."
msgstr ""
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -10242,35 +10264,35 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -10278,13 +10300,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -10296,65 +10318,77 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr ""
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
msgid "Baking was successful."
msgstr ""
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr ""
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr ""
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr ""
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:133
+#: doc/classes/BakedLightmap.xml:132
+msgid ""
+"Returns if lightmapper can't be created. Unless you are using a custom "
+"lightmapper, please report this as bug."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:135
+msgid ""
+"There is no root node to start baking from. Either provide [code]from_node[/"
+"code] argument or attach this node to a parent that should be used as root."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:136
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:139
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:142
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -10802,8 +10836,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -11188,26 +11225,33 @@ msgid "Text [Color] used when the [Button] is disabled."
msgstr ""
#: doc/classes/Button.xml:77
-msgid "Text [Color] used when the [Button] is being hovered."
+msgid ""
+"Text [Color] used when the [Button] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/Button.xml:80
-msgid "Text [Color] used when the [Button] is being pressed."
+msgid "Text [Color] used when the [Button] is being hovered."
msgstr ""
#: doc/classes/Button.xml:83
-msgid "[StyleBox] used when the [Button] is being hovered."
+msgid "Text [Color] used when the [Button] is being pressed."
msgstr ""
#: doc/classes/Button.xml:86
-msgid "The horizontal space between [Button]'s icon and text."
+msgid "[StyleBox] used when the [Button] is being hovered."
msgstr ""
#: doc/classes/Button.xml:89
-msgid "Default [StyleBox] for the [Button]."
+msgid "The horizontal space between [Button]'s icon and text."
msgstr ""
#: doc/classes/Button.xml:92
+msgid "Default [StyleBox] for the [Button]."
+msgstr ""
+
+#: doc/classes/Button.xml:95
msgid "[StyleBox] used when the [Button] is being pressed."
msgstr ""
@@ -12666,80 +12710,96 @@ msgstr ""
msgid "The check icon to display when the [CheckBox] is checked."
msgstr ""
-#: doc/classes/CheckBox.xml:30
+#: doc/classes/CheckBox.xml:28
+msgid "The check icon to display when the [CheckBox] is checked and disabled."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:31
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is disabled."
msgstr ""
-#: doc/classes/CheckBox.xml:33
+#: doc/classes/CheckBox.xml:34
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is focused."
msgstr ""
-#: doc/classes/CheckBox.xml:36
+#: doc/classes/CheckBox.xml:37
msgid "The [Font] to use for the [CheckBox] text."
msgstr ""
-#: doc/classes/CheckBox.xml:39
+#: doc/classes/CheckBox.xml:40
msgid "The [CheckBox] text's font color."
msgstr ""
-#: doc/classes/CheckBox.xml:42
+#: doc/classes/CheckBox.xml:43
msgid "The [CheckBox] text's font color when it's disabled."
msgstr ""
-#: doc/classes/CheckBox.xml:45
+#: doc/classes/CheckBox.xml:46
+msgid ""
+"The [CheckBox] text's font color when it's focused. Only replaces the normal "
+"text color of the checkbox. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:49
msgid "The [CheckBox] text's font color when it's hovered."
msgstr ""
-#: doc/classes/CheckBox.xml:48
+#: doc/classes/CheckBox.xml:52
msgid "The [CheckBox] text's font color when it's hovered and pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:51
+#: doc/classes/CheckBox.xml:55
msgid "The [CheckBox] text's font color when it's pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:54
+#: doc/classes/CheckBox.xml:58
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered."
msgstr ""
-#: doc/classes/CheckBox.xml:57
+#: doc/classes/CheckBox.xml:61
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered and "
"pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:60
+#: doc/classes/CheckBox.xml:64
msgid "The separation between the check icon and the text (in pixels)."
msgstr ""
-#: doc/classes/CheckBox.xml:63 doc/classes/CheckButton.xml:58
+#: doc/classes/CheckBox.xml:67 doc/classes/CheckButton.xml:61
msgid "The [StyleBox] to display as a background."
msgstr ""
-#: doc/classes/CheckBox.xml:66
+#: doc/classes/CheckBox.xml:70
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:69
+#: doc/classes/CheckBox.xml:73
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is checked."
msgstr ""
-#: doc/classes/CheckBox.xml:74
+#: doc/classes/CheckBox.xml:78
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is unchecked."
msgstr ""
-#: doc/classes/CheckBox.xml:79
+#: doc/classes/CheckBox.xml:83
msgid "The check icon to display when the [CheckBox] is unchecked."
msgstr ""
+#: doc/classes/CheckBox.xml:86
+msgid ""
+"The check icon to display when the [CheckBox] is unchecked and disabled."
+msgstr ""
+
#: doc/classes/CheckButton.xml:4
msgid "Checkable button. See also [CheckBox]."
msgstr ""
@@ -12783,49 +12843,56 @@ msgid "The [CheckButton] text's font color when it's disabled."
msgstr ""
#: doc/classes/CheckButton.xml:40
-msgid "The [CheckButton] text's font color when it's hovered."
+msgid ""
+"The [CheckButton] text's font color when it's focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/CheckButton.xml:43
-msgid "The [CheckButton] text's font color when it's hovered and pressed."
+msgid "The [CheckButton] text's font color when it's hovered."
msgstr ""
#: doc/classes/CheckButton.xml:46
-msgid "The [CheckButton] text's font color when it's pressed."
+msgid "The [CheckButton] text's font color when it's hovered and pressed."
msgstr ""
#: doc/classes/CheckButton.xml:49
+msgid "The [CheckButton] text's font color when it's pressed."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:52
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered."
msgstr ""
-#: doc/classes/CheckButton.xml:52
+#: doc/classes/CheckButton.xml:55
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered "
"and pressed."
msgstr ""
-#: doc/classes/CheckButton.xml:55
+#: doc/classes/CheckButton.xml:58
msgid "The separation between the toggle icon and the text (in pixels)."
msgstr ""
-#: doc/classes/CheckButton.xml:61
+#: doc/classes/CheckButton.xml:64
msgid "The icon to display when the [CheckButton] is unchecked."
msgstr ""
-#: doc/classes/CheckButton.xml:64
+#: doc/classes/CheckButton.xml:67
msgid "The icon to display when the [CheckButton] is unchecked and disabled."
msgstr ""
-#: doc/classes/CheckButton.xml:67
+#: doc/classes/CheckButton.xml:70
msgid "The icon to display when the [CheckButton] is checked."
msgstr ""
-#: doc/classes/CheckButton.xml:70
+#: doc/classes/CheckButton.xml:73
msgid "The icon to display when the [CheckButton] is checked and disabled."
msgstr ""
-#: doc/classes/CheckButton.xml:73
+#: doc/classes/CheckButton.xml:76
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is pressed."
msgstr ""
@@ -14593,26 +14660,33 @@ msgid "Text [Color] used when the [ColorPickerButton] is disabled."
msgstr ""
#: doc/classes/ColorPickerButton.xml:80
-msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
+msgid ""
+"Text [Color] used when the [ColorPickerButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/ColorPickerButton.xml:83
-msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
+msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
msgstr ""
#: doc/classes/ColorPickerButton.xml:86
-msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
+msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
msgstr ""
#: doc/classes/ColorPickerButton.xml:89
-msgid "The horizontal space between [ColorPickerButton]'s icon and text."
+msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
msgstr ""
#: doc/classes/ColorPickerButton.xml:92
-msgid "Default [StyleBox] for the [ColorPickerButton]."
+msgid "The horizontal space between [ColorPickerButton]'s icon and text."
msgstr ""
#: doc/classes/ColorPickerButton.xml:95
+msgid "Default [StyleBox] for the [ColorPickerButton]."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:98
msgid "[StyleBox] used when the [ColorPickerButton] is being pressed."
msgstr ""
@@ -19824,7 +19898,8 @@ msgid ""
"get_resource_type]. They may optionally specify some import presets that "
"affect the import process. EditorImportPlugins are responsible for creating "
"the resources and saving them in the [code].import[/code] directory (see "
-"[member ProjectSettings.application/config/project_data_dir_name]).\n"
+"[member ProjectSettings.application/config/"
+"use_hidden_project_data_directory]).\n"
"Below is an example EditorImportPlugin that imports a [Mesh] from a file "
"with the extension \".special\" or \".spec\":\n"
"[codeblock]\n"
@@ -19948,7 +20023,7 @@ msgstr ""
msgid ""
"Gets the extension used to save this resource in the [code].import[/code] "
"directory (see [member ProjectSettings.application/config/"
-"project_data_dir_name])."
+"use_hidden_project_data_directory])."
msgstr ""
#: doc/classes/EditorImportPlugin.xml:130
@@ -20978,8 +21053,11 @@ msgstr ""
msgid "Emitted when the value of the edited resource was changed."
msgstr ""
-#: doc/classes/EditorResourcePicker.xml:89
-msgid "Emitted when the resource value was set and user clicked to edit it."
+#: doc/classes/EditorResourcePicker.xml:90
+msgid ""
+"Emitted when the resource value was set and user clicked to edit it. When "
+"[code]edit[/code] is [code]true[/code], the signal was caused by the context "
+"menu \"Edit\" option."
msgstr ""
#: doc/classes/EditorResourcePreview.xml:4
@@ -24707,20 +24785,31 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr ""
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -24729,14 +24818,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -24746,80 +24839,80 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
msgstr ""
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr ""
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -27553,16 +27646,18 @@ msgstr ""
#: doc/classes/Image.xml:436
msgid ""
"OpenGL texture format [code]RED[/code] with a single component and a "
-"bitdepth of 8."
+"bitdepth of 8.\n"
+"[b]Note:[/b] When using the GLES2 backend, this uses the alpha channel "
+"instead of the red channel for storage."
msgstr ""
-#: doc/classes/Image.xml:439
+#: doc/classes/Image.xml:440
msgid ""
"OpenGL texture format [code]RG[/code] with two components and a bitdepth of "
"8 for each."
msgstr ""
-#: doc/classes/Image.xml:442
+#: doc/classes/Image.xml:443
msgid ""
"OpenGL texture format [code]RGB[/code] with three components, each with a "
"bitdepth of 8.\n"
@@ -27570,7 +27665,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:446
+#: doc/classes/Image.xml:447
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 8.\n"
@@ -27578,73 +27673,73 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:450
+#: doc/classes/Image.xml:451
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 4."
msgstr ""
-#: doc/classes/Image.xml:453
+#: doc/classes/Image.xml:454
msgid ""
"OpenGL texture format [code]GL_RGB5_A1[/code] where 5 bits of depth for each "
"component of RGB and one bit for alpha."
msgstr ""
-#: doc/classes/Image.xml:456
+#: doc/classes/Image.xml:457
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 32-"
"bit floating-point value."
msgstr ""
-#: doc/classes/Image.xml:459
+#: doc/classes/Image.xml:460
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:462
+#: doc/classes/Image.xml:463
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:465
+#: doc/classes/Image.xml:466
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:468
+#: doc/classes/Image.xml:469
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 16-"
"bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:471
+#: doc/classes/Image.xml:472
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:474
+#: doc/classes/Image.xml:475
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:477
+#: doc/classes/Image.xml:478
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:480
+#: doc/classes/Image.xml:481
msgid ""
"A special OpenGL texture format where the three color components have 9 bits "
"of precision and all three share a single 5-bit exponent."
msgstr ""
-#: doc/classes/Image.xml:483
+#: doc/classes/Image.xml:484
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 1, and is the smallest variation "
@@ -27654,7 +27749,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:487
+#: doc/classes/Image.xml:488
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 2, and color data is interpreted "
@@ -27664,7 +27759,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:491
+#: doc/classes/Image.xml:492
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format also known as Block Compression 3 or BC3 that contains 64 "
@@ -27675,7 +27770,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:495
+#: doc/classes/Image.xml:496
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -27683,7 +27778,7 @@ msgid ""
"DXT5 uses for the alpha channel."
msgstr ""
-#: doc/classes/Image.xml:498
+#: doc/classes/Image.xml:499
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -27691,7 +27786,7 @@ msgid ""
"algorithm that DXT5 uses for the alpha channel."
msgstr ""
-#: doc/classes/Image.xml:501
+#: doc/classes/Image.xml:502
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned normalized "
@@ -27700,21 +27795,21 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:505
+#: doc/classes/Image.xml:506
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with signed floating-point "
"RGB components."
msgstr ""
-#: doc/classes/Image.xml:508
+#: doc/classes/Image.xml:509
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned floating-point "
"RGB components."
msgstr ""
-#: doc/classes/Image.xml:511
+#: doc/classes/Image.xml:512
msgid ""
"Texture format used on PowerVR-supported mobile platforms, uses 2-bit color "
"depth with no alpha. More information can be found [url=https://en.wikipedia."
@@ -27723,25 +27818,25 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:515
+#: doc/classes/Image.xml:516
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with an "
"alpha component."
msgstr ""
-#: doc/classes/Image.xml:518
+#: doc/classes/Image.xml:519
msgid ""
"Similar to [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with 4-"
"bit color depth and no alpha."
msgstr ""
-#: doc/classes/Image.xml:521
+#: doc/classes/Image.xml:522
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC4[/url], but with an "
"alpha component."
msgstr ""
-#: doc/classes/Image.xml:524
+#: doc/classes/Image.xml:525
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC1]Ericsson Texture Compression format 1[/"
@@ -27749,7 +27844,7 @@ msgid ""
"standard. This format cannot store an alpha channel."
msgstr ""
-#: doc/classes/Image.xml:527
+#: doc/classes/Image.xml:528
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27757,7 +27852,7 @@ msgid ""
"unsigned data."
msgstr ""
-#: doc/classes/Image.xml:530
+#: doc/classes/Image.xml:531
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27765,7 +27860,7 @@ msgid ""
"channel of signed data."
msgstr ""
-#: doc/classes/Image.xml:533
+#: doc/classes/Image.xml:534
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27773,7 +27868,7 @@ msgid ""
"of unsigned data."
msgstr ""
-#: doc/classes/Image.xml:536
+#: doc/classes/Image.xml:537
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27781,7 +27876,7 @@ msgid ""
"channels of signed data."
msgstr ""
-#: doc/classes/Image.xml:539
+#: doc/classes/Image.xml:540
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27791,7 +27886,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:543
+#: doc/classes/Image.xml:544
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27801,7 +27896,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:547
+#: doc/classes/Image.xml:548
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27812,31 +27907,31 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:551
+#: doc/classes/Image.xml:552
msgid "Represents the size of the [enum Format] enum."
msgstr ""
-#: doc/classes/Image.xml:554
+#: doc/classes/Image.xml:555
msgid ""
"Performs nearest-neighbor interpolation. If the image is resized, it will be "
"pixelated."
msgstr ""
-#: doc/classes/Image.xml:557
+#: doc/classes/Image.xml:558
msgid ""
"Performs bilinear interpolation. If the image is resized, it will be blurry. "
"This mode is faster than [constant INTERPOLATE_CUBIC], but it results in "
"lower quality."
msgstr ""
-#: doc/classes/Image.xml:560
+#: doc/classes/Image.xml:561
msgid ""
"Performs cubic interpolation. If the image is resized, it will be blurry. "
"This mode often gives better results compared to [constant "
"INTERPOLATE_BILINEAR], at the cost of being slower."
msgstr ""
-#: doc/classes/Image.xml:563
+#: doc/classes/Image.xml:564
msgid ""
"Performs bilinear separately on the two most-suited mipmap levels, then "
"linearly interpolates between them.\n"
@@ -27851,55 +27946,55 @@ msgid ""
"a new set will be generated for the resulting image."
msgstr ""
-#: doc/classes/Image.xml:570
+#: doc/classes/Image.xml:571
msgid ""
"Performs Lanczos interpolation. This is the slowest image resizing mode, but "
"it typically gives the best results, especially when downscalng images."
msgstr ""
-#: doc/classes/Image.xml:573
+#: doc/classes/Image.xml:574
msgid "Image does not have alpha."
msgstr ""
-#: doc/classes/Image.xml:576
+#: doc/classes/Image.xml:577
msgid "Image stores alpha in a single bit."
msgstr ""
-#: doc/classes/Image.xml:579
+#: doc/classes/Image.xml:580
msgid "Image uses alpha."
msgstr ""
-#: doc/classes/Image.xml:582
+#: doc/classes/Image.xml:583
msgid "Use S3TC compression."
msgstr ""
-#: doc/classes/Image.xml:585
+#: doc/classes/Image.xml:586
msgid "Use PVRTC2 compression."
msgstr ""
-#: doc/classes/Image.xml:588
+#: doc/classes/Image.xml:589
msgid "Use PVRTC4 compression."
msgstr ""
-#: doc/classes/Image.xml:591
+#: doc/classes/Image.xml:592
msgid "Use ETC compression."
msgstr ""
-#: doc/classes/Image.xml:594
+#: doc/classes/Image.xml:595
msgid "Use ETC2 compression."
msgstr ""
-#: doc/classes/Image.xml:597
+#: doc/classes/Image.xml:598
msgid ""
"Source texture (before compression) is a regular texture. Default for all "
"textures."
msgstr ""
-#: doc/classes/Image.xml:600
+#: doc/classes/Image.xml:601
msgid "Source texture (before compression) is in sRGB space."
msgstr ""
-#: doc/classes/Image.xml:603
+#: doc/classes/Image.xml:604
msgid ""
"Source texture (before compression) is a normal texture (e.g. it can be "
"compressed into two channels)."
@@ -28122,6 +28217,17 @@ msgstr ""
#: doc/classes/Input.xml:43
msgid ""
+"Sends all input events which are in the current buffer to the game loop. "
+"These events may have been buffered as a result of accumulated input "
+"([method set_use_accumulated_input]) or agile input flushing ([member "
+"ProjectSettings.input_devices/buffering/agile_event_flushing]).\n"
+"The engine will already do this itself at key execution points (at least "
+"once per frame). However, this can be useful in advanced cases where you "
+"want precise control over the timing of event handling."
+msgstr ""
+
+#: doc/classes/Input.xml:50
+msgid ""
"Returns the acceleration of the device's accelerometer sensor, if the device "
"has one. Otherwise, the method returns [constant Vector3.ZERO].\n"
"Note this method returns an empty [Vector3] when running from the editor "
@@ -28133,7 +28239,7 @@ msgid ""
"the Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:53
+#: doc/classes/Input.xml:60
msgid ""
"Returns a value between 0 and 1 representing the raw intensity of the given "
"action, ignoring the action's deadzone. In most cases, you should use "
@@ -28143,7 +28249,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:62
+#: doc/classes/Input.xml:69
msgid ""
"Returns a value between 0 and 1 representing the intensity of the given "
"action. In a joypad, for example, the further away the axis (analog sticks "
@@ -28155,7 +28261,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:71
+#: doc/classes/Input.xml:78
msgid ""
"Get axis input by specifying two actions, one negative and one positive.\n"
"This is a shorthand for writing [code]Input."
@@ -28163,17 +28269,17 @@ msgid ""
"get_action_strength(\"negative_action\")[/code]."
msgstr ""
-#: doc/classes/Input.xml:78
+#: doc/classes/Input.xml:85
msgid ""
"Returns an [Array] containing the device IDs of all currently connected "
"joypads."
msgstr ""
-#: doc/classes/Input.xml:84
+#: doc/classes/Input.xml:91
msgid "Returns the currently assigned cursor shape (see [enum CursorShape])."
msgstr ""
-#: doc/classes/Input.xml:90
+#: doc/classes/Input.xml:97
msgid ""
"Returns the gravity of the device's accelerometer sensor, if the device has "
"one. Otherwise, the method returns [constant Vector3.ZERO].\n"
@@ -28183,7 +28289,7 @@ msgid ""
"Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:97
+#: doc/classes/Input.xml:104
msgid ""
"Returns the rotation rate in rad/s around a device's X, Y, and Z axes of the "
"gyroscope sensor, if the device has one. Otherwise, the method returns "
@@ -28192,53 +28298,53 @@ msgid ""
"it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:106
+#: doc/classes/Input.xml:113
msgid ""
"Returns the current value of the joypad axis at given index (see [enum "
"JoystickList])."
msgstr ""
-#: doc/classes/Input.xml:113
+#: doc/classes/Input.xml:120
msgid "Returns the index of the provided axis name."
msgstr ""
-#: doc/classes/Input.xml:120
+#: doc/classes/Input.xml:127
msgid ""
"Receives a [enum JoystickList] axis and returns its equivalent name as a "
"string."
msgstr ""
-#: doc/classes/Input.xml:127
+#: doc/classes/Input.xml:134
msgid "Returns the index of the provided button name."
msgstr ""
-#: doc/classes/Input.xml:134
+#: doc/classes/Input.xml:141
msgid ""
"Receives a gamepad button from [enum JoystickList] and returns its "
"equivalent name as a string."
msgstr ""
-#: doc/classes/Input.xml:141
+#: doc/classes/Input.xml:148
msgid ""
"Returns a SDL2-compatible device GUID on platforms that use gamepad "
"remapping. Returns [code]\"Default Gamepad\"[/code] otherwise."
msgstr ""
-#: doc/classes/Input.xml:148
+#: doc/classes/Input.xml:155
msgid "Returns the name of the joypad at the specified device index."
msgstr ""
-#: doc/classes/Input.xml:155
+#: doc/classes/Input.xml:162
msgid "Returns the duration of the current vibration effect in seconds."
msgstr ""
-#: doc/classes/Input.xml:162
+#: doc/classes/Input.xml:169
msgid ""
"Returns the strength of the joypad vibration: x is the strength of the weak "
"motor, and y is the strength of the strong motor."
msgstr ""
-#: doc/classes/Input.xml:168
+#: doc/classes/Input.xml:175
msgid ""
"Returns the mouse speed for the last time the cursor was moved, and this "
"until the next frame where the mouse moves. This means that even if the "
@@ -28246,7 +28352,7 @@ msgid ""
"motion."
msgstr ""
-#: doc/classes/Input.xml:174
+#: doc/classes/Input.xml:181
msgid ""
"Returns the magnetic field strength in micro-Tesla for all axes of the "
"device's magnetometer sensor, if the device has one. Otherwise, the method "
@@ -28255,17 +28361,17 @@ msgid ""
"platforms, it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:181
+#: doc/classes/Input.xml:188
msgid ""
"Returns mouse buttons as a bitmask. If multiple mouse buttons are pressed at "
"the same time, the bits are added together."
msgstr ""
-#: doc/classes/Input.xml:187
+#: doc/classes/Input.xml:194
msgid "Returns the mouse mode. See the constants for more information."
msgstr ""
-#: doc/classes/Input.xml:198
+#: doc/classes/Input.xml:205
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -28278,7 +28384,7 @@ msgid ""
"want (on the range of 0 to 1)."
msgstr ""
-#: doc/classes/Input.xml:208
+#: doc/classes/Input.xml:215
msgid ""
"Returns [code]true[/code] when the user starts pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user pressed down "
@@ -28290,7 +28396,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:218
+#: doc/classes/Input.xml:225
msgid ""
"Returns [code]true[/code] when the user stops pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user released the "
@@ -28300,7 +28406,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:227
+#: doc/classes/Input.xml:234
msgid ""
"Returns [code]true[/code] if you are pressing the action event. Note that if "
"an action has multiple buttons assigned and more than one of them is "
@@ -28311,13 +28417,13 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:236
+#: doc/classes/Input.xml:243
msgid ""
"Returns [code]true[/code] if you are pressing the joypad button (see [enum "
"JoystickList])."
msgstr ""
-#: doc/classes/Input.xml:243
+#: doc/classes/Input.xml:250
msgid ""
"Returns [code]true[/code] if the system knows the specified device. This "
"means that it sets all button and axis indices exactly as defined in [enum "
@@ -28325,19 +28431,19 @@ msgid ""
"but you can still retrieve events from them."
msgstr ""
-#: doc/classes/Input.xml:250
+#: doc/classes/Input.xml:257
msgid ""
"Returns [code]true[/code] if you are pressing the key. You can pass a [enum "
"KeyList] constant."
msgstr ""
-#: doc/classes/Input.xml:257
+#: doc/classes/Input.xml:264
msgid ""
"Returns [code]true[/code] if you are pressing the mouse button specified "
"with [enum ButtonList]."
msgstr ""
-#: doc/classes/Input.xml:267
+#: doc/classes/Input.xml:274
msgid ""
"Notifies the [Input] singleton that a connection has changed, to update the "
"state for the [code]device[/code] index.\n"
@@ -28346,7 +28452,7 @@ msgid ""
"triggered internally."
msgstr ""
-#: doc/classes/Input.xml:275
+#: doc/classes/Input.xml:282
msgid ""
"Feeds an [InputEvent] to the game. Can be used to artificially trigger input "
"events from code. Also generates [method Node._input] calls.\n"
@@ -28359,12 +28465,21 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Input.xml:289
+#: doc/classes/Input.xml:296
msgid ""
"Removes all mappings from the internal database that match the given GUID."
msgstr ""
-#: doc/classes/Input.xml:298
+#: doc/classes/Input.xml:303
+msgid ""
+"Sets the acceleration value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:313
msgid ""
"Sets a custom mouse cursor image, which is only visible inside the game "
"window. The hotspot can also be specified. Passing [code]null[/code] to the "
@@ -28379,7 +28494,7 @@ msgid ""
"compression mode can't be used for custom cursors."
msgstr ""
-#: doc/classes/Input.xml:309
+#: doc/classes/Input.xml:324
msgid ""
"Sets the default cursor shape to be used in the viewport instead of "
"[constant CURSOR_ARROW].\n"
@@ -28389,11 +28504,38 @@ msgid ""
"cursor immediately."
msgstr ""
-#: doc/classes/Input.xml:318
+#: doc/classes/Input.xml:333
+msgid ""
+"Sets the gravity value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:341
+msgid ""
+"Sets the value of the rotation rate of the gyroscope sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:349
+msgid ""
+"Sets the value of the magnetic field of the magnetometer sensor. Can be used "
+"for debugging on devices without a hardware sensor, for example in an editor "
+"on a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:357
msgid "Sets the mouse mode. See the constants for more information."
msgstr ""
-#: doc/classes/Input.xml:325
+#: doc/classes/Input.xml:364
msgid ""
"Enables or disables the accumulation of similar input events sent by the "
"operating system. When input accumulation is enabled, all input events "
@@ -28407,7 +28549,7 @@ msgid ""
"results that closely follow the actual input."
msgstr ""
-#: doc/classes/Input.xml:336
+#: doc/classes/Input.xml:375
msgid ""
"Starts to vibrate the joypad. Joypads usually come with two rumble motors, a "
"strong and a weak one. [code]weak_magnitude[/code] is the strength of the "
@@ -28420,34 +28562,34 @@ msgid ""
"few seconds."
msgstr ""
-#: doc/classes/Input.xml:344
+#: doc/classes/Input.xml:383
msgid "Stops the vibration of the joypad."
msgstr ""
-#: doc/classes/Input.xml:351
+#: doc/classes/Input.xml:390
msgid ""
"Vibrate Android and iOS devices.\n"
"[b]Note:[/b] It needs [code]VIBRATE[/code] permission for Android at export "
"settings. iOS does not support duration."
msgstr ""
-#: doc/classes/Input.xml:359
+#: doc/classes/Input.xml:398
msgid "Sets the mouse position to the specified vector."
msgstr ""
-#: doc/classes/Input.xml:368
+#: doc/classes/Input.xml:407
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
-#: doc/classes/Input.xml:374
+#: doc/classes/Input.xml:413
msgid "Makes the mouse cursor visible if it is hidden."
msgstr ""
-#: doc/classes/Input.xml:377
+#: doc/classes/Input.xml:416
msgid "Makes the mouse cursor hidden if it is visible."
msgstr ""
-#: doc/classes/Input.xml:380
+#: doc/classes/Input.xml:419
msgid ""
"Captures the mouse. The mouse will be hidden and its position locked at the "
"center of the screen.\n"
@@ -28455,83 +28597,83 @@ msgid ""
"need to use [member InputEventMouseMotion.relative]."
msgstr ""
-#: doc/classes/Input.xml:384
+#: doc/classes/Input.xml:423
msgid "Makes the mouse cursor visible but confines it to the game window."
msgstr ""
-#: doc/classes/Input.xml:387
+#: doc/classes/Input.xml:426
msgid "Arrow cursor. Standard, default pointing cursor."
msgstr ""
-#: doc/classes/Input.xml:390
+#: doc/classes/Input.xml:429
msgid ""
"I-beam cursor. Usually used to show where the text cursor will appear when "
"the mouse is clicked."
msgstr ""
-#: doc/classes/Input.xml:393
+#: doc/classes/Input.xml:432
msgid ""
"Pointing hand cursor. Usually used to indicate the pointer is over a link or "
"other interactable item."
msgstr ""
-#: doc/classes/Input.xml:396
+#: doc/classes/Input.xml:435
msgid ""
"Cross cursor. Typically appears over regions in which a drawing operation "
"can be performed or for selections."
msgstr ""
-#: doc/classes/Input.xml:399
+#: doc/classes/Input.xml:438
msgid ""
"Wait cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application is still usable during the "
"operation."
msgstr ""
-#: doc/classes/Input.xml:402
+#: doc/classes/Input.xml:441
msgid ""
"Busy cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application isn't usable during the "
"operation (e.g. something is blocking its main thread)."
msgstr ""
-#: doc/classes/Input.xml:405
+#: doc/classes/Input.xml:444
msgid "Drag cursor. Usually displayed when dragging something."
msgstr ""
-#: doc/classes/Input.xml:408
+#: doc/classes/Input.xml:447
msgid ""
"Can drop cursor. Usually displayed when dragging something to indicate that "
"it can be dropped at the current position."
msgstr ""
-#: doc/classes/Input.xml:411
+#: doc/classes/Input.xml:450
msgid ""
"Forbidden cursor. Indicates that the current action is forbidden (for "
"example, when dragging something) or that the control at a position is "
"disabled."
msgstr ""
-#: doc/classes/Input.xml:414
+#: doc/classes/Input.xml:453
msgid ""
"Vertical resize mouse cursor. A double-headed vertical arrow. It tells the "
"user they can resize the window or the panel vertically."
msgstr ""
-#: doc/classes/Input.xml:417
+#: doc/classes/Input.xml:456
msgid ""
"Horizontal resize mouse cursor. A double-headed horizontal arrow. It tells "
"the user they can resize the window or the panel horizontally."
msgstr ""
-#: doc/classes/Input.xml:420
+#: doc/classes/Input.xml:459
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the bottom left to the top right. It tells the user they can resize the "
"window or the panel both horizontally and vertically."
msgstr ""
-#: doc/classes/Input.xml:423
+#: doc/classes/Input.xml:462
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the top left to the bottom right, the opposite of [constant "
@@ -28539,23 +28681,23 @@ msgid ""
"both horizontally and vertically."
msgstr ""
-#: doc/classes/Input.xml:426
+#: doc/classes/Input.xml:465
msgid "Move cursor. Indicates that something can be moved."
msgstr ""
-#: doc/classes/Input.xml:429
+#: doc/classes/Input.xml:468
msgid ""
"Vertical split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_VSIZE]."
msgstr ""
-#: doc/classes/Input.xml:432
+#: doc/classes/Input.xml:471
msgid ""
"Horizontal split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_HSIZE]."
msgstr ""
-#: doc/classes/Input.xml:435
+#: doc/classes/Input.xml:474
msgid "Help cursor. Usually a question mark."
msgstr ""
@@ -28963,7 +29105,9 @@ msgid "The drag position."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -30262,7 +30406,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30327,22 +30472,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -30357,7 +30504,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -30365,19 +30512,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -30445,7 +30592,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30503,7 +30651,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -31785,14 +31935,21 @@ msgid "Default text [Color] of the [LinkButton]."
msgstr ""
#: doc/classes/LinkButton.xml:46
-msgid "Text [Color] used when the [LinkButton] is being hovered."
+msgid ""
+"Text [Color] used when the [LinkButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/LinkButton.xml:49
-msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgid "Text [Color] used when the [LinkButton] is being hovered."
msgstr ""
#: doc/classes/LinkButton.xml:52
+msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:55
msgid "The vertical space between the baseline of text and the underline."
msgstr ""
@@ -32285,26 +32442,33 @@ msgid "Text [Color] used when the [MenuButton] is disabled."
msgstr ""
#: doc/classes/MenuButton.xml:64
-msgid "Text [Color] used when the [MenuButton] is being hovered."
+msgid ""
+"Text [Color] used when the [MenuButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/MenuButton.xml:67
-msgid "Text [Color] used when the [MenuButton] is being pressed."
+msgid "Text [Color] used when the [MenuButton] is being hovered."
msgstr ""
#: doc/classes/MenuButton.xml:70
-msgid "[StyleBox] used when the [MenuButton] is being hovered."
+msgid "Text [Color] used when the [MenuButton] is being pressed."
msgstr ""
#: doc/classes/MenuButton.xml:73
-msgid "The horizontal space between [MenuButton]'s icon and text."
+msgid "[StyleBox] used when the [MenuButton] is being hovered."
msgstr ""
#: doc/classes/MenuButton.xml:76
-msgid "Default [StyleBox] for the [MenuButton]."
+msgid "The horizontal space between [MenuButton]'s icon and text."
msgstr ""
#: doc/classes/MenuButton.xml:79
+msgid "Default [StyleBox] for the [MenuButton]."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:82
msgid "[StyleBox] used when the [MenuButton] is being pressed."
msgstr ""
@@ -34014,7 +34178,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -36880,26 +37044,33 @@ msgid "Text [Color] used when the [OptionButton] is disabled."
msgstr ""
#: doc/classes/OptionButton.xml:212
-msgid "Text [Color] used when the [OptionButton] is being hovered."
+msgid ""
+"Text [Color] used when the [OptionButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/OptionButton.xml:215
-msgid "Text [Color] used when the [OptionButton] is being pressed."
+msgid "Text [Color] used when the [OptionButton] is being hovered."
msgstr ""
#: doc/classes/OptionButton.xml:218
-msgid "[StyleBox] used when the [OptionButton] is being hovered."
+msgid "Text [Color] used when the [OptionButton] is being pressed."
msgstr ""
#: doc/classes/OptionButton.xml:221
-msgid "The horizontal space between [OptionButton]'s icon and text."
+msgid "[StyleBox] used when the [OptionButton] is being hovered."
msgstr ""
#: doc/classes/OptionButton.xml:224
-msgid "Default [StyleBox] for the [OptionButton]."
+msgid "The horizontal space between [OptionButton]'s icon and text."
msgstr ""
#: doc/classes/OptionButton.xml:227
+msgid "Default [StyleBox] for the [OptionButton]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:230
msgid "[StyleBox] used when the [OptionButton] is being pressed."
msgstr ""
@@ -37302,7 +37473,7 @@ msgstr ""
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -37332,14 +37503,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -37349,7 +37520,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -39827,17 +39998,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -39855,11 +40052,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -40054,7 +40251,9 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-msgid "Returns the [Physics2DDirectBodyState] of the body."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
@@ -40856,6 +41055,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -40873,7 +41090,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -40987,7 +41204,9 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-msgid "Returns the [PhysicsDirectBodyState] of the body."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/PhysicsServer.xml:370
@@ -41966,27 +42185,27 @@ msgstr ""
msgid "Removes an element from the array by index."
msgstr ""
-#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolColorArray.xml:66
-#: doc/classes/PoolIntArray.xml:67 doc/classes/PoolRealArray.xml:67
-#: doc/classes/PoolStringArray.xml:74 doc/classes/PoolVector2Array.xml:67
-#: doc/classes/PoolVector3Array.xml:66
+#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolIntArray.xml:67
+#: doc/classes/PoolRealArray.xml:67
msgid ""
"Sets the size of the array. If the array is grown, reserves elements at the "
"end of the array. If the array is shrunk, truncates the array to the new "
-"size."
+"size.\n"
+"[b]Note:[/b] Added elements are not automatically initialized to 0 and will "
+"contain garbage, i.e. indeterminate values."
msgstr ""
-#: doc/classes/PoolByteArray.xml:121
+#: doc/classes/PoolByteArray.xml:122
msgid "Changes the byte at the given index."
msgstr ""
-#: doc/classes/PoolByteArray.xml:127 doc/classes/PoolColorArray.xml:79
-#: doc/classes/PoolRealArray.xml:80 doc/classes/PoolStringArray.xml:87
+#: doc/classes/PoolByteArray.xml:128 doc/classes/PoolColorArray.xml:79
+#: doc/classes/PoolRealArray.xml:81 doc/classes/PoolStringArray.xml:87
#: doc/classes/PoolVector2Array.xml:80 doc/classes/PoolVector3Array.xml:79
msgid "Returns the size of the array."
msgstr ""
-#: doc/classes/PoolByteArray.xml:135
+#: doc/classes/PoolByteArray.xml:136
msgid ""
"Returns the slice of the [PoolByteArray] between indices (inclusive) as a "
"new [PoolByteArray]. Any negative index is considered to be from the end of "
@@ -42018,6 +42237,14 @@ msgstr ""
msgid "Appends a value to the array."
msgstr ""
+#: doc/classes/PoolColorArray.xml:66 doc/classes/PoolStringArray.xml:74
+#: doc/classes/PoolVector2Array.xml:67 doc/classes/PoolVector3Array.xml:66
+msgid ""
+"Sets the size of the array. If the array is grown, reserves elements at the "
+"end of the array. If the array is shrunk, truncates the array to the new "
+"size."
+msgstr ""
+
#: doc/classes/PoolColorArray.xml:73
msgid "Changes the [Color] at the given index."
msgstr ""
@@ -42054,11 +42281,11 @@ msgid ""
"valid, or at the end of the array ([code]idx == size()[/code])."
msgstr ""
-#: doc/classes/PoolIntArray.xml:74
+#: doc/classes/PoolIntArray.xml:75
msgid "Changes the int at the given index."
msgstr ""
-#: doc/classes/PoolIntArray.xml:80
+#: doc/classes/PoolIntArray.xml:81
msgid "Returns the array size."
msgstr ""
@@ -42090,7 +42317,7 @@ msgstr ""
msgid "Appends a [PoolRealArray] at the end of this array."
msgstr ""
-#: doc/classes/PoolRealArray.xml:74
+#: doc/classes/PoolRealArray.xml:75
msgid "Changes the float at the given index."
msgstr ""
@@ -43355,18 +43582,6 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:204
msgid ""
-"The project data directory is used for storing project-specific data "
-"(metadata, shader cache, etc.).\n"
-"[b]Note:[/b] Restart the application after changing this setting.\n"
-"[b]Note:[/b] Changing this value can help on platforms or with third-party "
-"tools where specific directory patterns are disallowed. Only modify this "
-"setting if you know that your environment requires it, as changing the "
-"default can impact compatibility with some external tools or plugins which "
-"expect the default [code].import[/code] folder."
-msgstr ""
-
-#: doc/classes/ProjectSettings.xml:209
-msgid ""
"Specifies a file to override project settings. For example: [code]user://"
"custom_settings.cfg[/code]. See \"Overriding\" in the [ProjectSettings] "
"class description at the top for more information.\n"
@@ -43374,7 +43589,7 @@ msgid ""
"code] will still be read to override the project settings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:213
+#: doc/classes/ProjectSettings.xml:208
msgid ""
"If [code]true[/code], the project will save user data to its own user "
"directory (see [member application/config/custom_user_dir_name]). This "
@@ -43384,13 +43599,28 @@ msgid ""
"user data directory)/Godot/app_userdata/(project name)[/code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:216
+#: doc/classes/ProjectSettings.xml:211
+msgid ""
+"If [code]true[/code], the project will use a hidden directory ([code]."
+"import[/code]) for storing project-specific data (metadata, shader cache, "
+"etc.).\n"
+"If [code]false[/code], a non-hidden directory ([code]import[/code]) will be "
+"used instead.\n"
+"[b]Note:[/b] Restart the application after changing this setting.\n"
+"[b]Note:[/b] Changing this value can help on platforms or with third-party "
+"tools where hidden directory patterns are disallowed. Only modify this "
+"setting if you know that your environment requires it, as changing the "
+"default can impact compatibility with some external tools or plugins which "
+"expect the default [code].import[/code] folder."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:217
msgid ""
"Icon set in [code].ico[/code] format used on Windows to set the game's icon. "
"This is done automatically on start by calling [method OS.set_native_icon]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:219
+#: doc/classes/ProjectSettings.xml:220
msgid ""
"Time samples for frame deltas are subject to random variation introduced by "
"the platform, even when frames are displayed at regular intervals thanks to "
@@ -43404,14 +43634,14 @@ msgid ""
"adequate to render frames at the refresh rate."
msgstr ""
-#: doc/classes/ProjectSettings.xml:224
+#: doc/classes/ProjectSettings.xml:225
msgid ""
"[b]Experimental.[/b] Shifts the measurement of delta time for each frame to "
"just after the drawing has taken place. This may lead to more consistent "
"deltas and a reduction in frame stutters."
msgstr ""
-#: doc/classes/ProjectSettings.xml:227
+#: doc/classes/ProjectSettings.xml:228
msgid ""
"If [code]true[/code], disables printing to standard error. If [code]true[/"
"code], this also hides error and warning messages printed by [method "
@@ -43420,7 +43650,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:231
+#: doc/classes/ProjectSettings.xml:232
msgid ""
"If [code]true[/code], disables printing to standard output. This is "
"equivalent to starting the editor or project with the [code]--quiet[/code] "
@@ -43428,7 +43658,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:235
+#: doc/classes/ProjectSettings.xml:236
msgid ""
"If [code]true[/code], flushes the standard output stream every time a line "
"is printed. This affects both terminal logging and file logging.\n"
@@ -43444,20 +43674,20 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:241
+#: doc/classes/ProjectSettings.xml:242
msgid ""
"Debug build override for [member application/run/flush_stdout_on_print], as "
"performance is less important during debugging.\n"
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:245
+#: doc/classes/ProjectSettings.xml:246
msgid ""
"Forces a delay between frames in the main loop (in milliseconds). This may "
"be useful if you plan to disable vertical synchronization."
msgstr ""
-#: doc/classes/ProjectSettings.xml:248
+#: doc/classes/ProjectSettings.xml:249
msgid ""
"If [code]true[/code], enables low-processor usage mode. This setting only "
"works on desktop platforms. The screen is not redrawn if nothing changes "
@@ -43465,75 +43695,81 @@ msgid ""
"useless (and can hurt performance) in most games."
msgstr ""
-#: doc/classes/ProjectSettings.xml:251
+#: doc/classes/ProjectSettings.xml:252
msgid ""
"Amount of sleeping between frames when the low-processor usage mode is "
"enabled (in microseconds). Higher values will result in lower CPU usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:254
+#: doc/classes/ProjectSettings.xml:255
msgid "Path to the main scene file that will be loaded when the project runs."
msgstr ""
-#: doc/classes/ProjectSettings.xml:257 doc/classes/ProjectSettings.xml:260
+#: doc/classes/ProjectSettings.xml:258 doc/classes/ProjectSettings.xml:261
msgid ""
"Audio buses will disable automatically when sound goes below a given dB "
"threshold for a given time. This saves CPU as effects assigned to that bus "
"will no longer do any processing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:263
+#: doc/classes/ProjectSettings.xml:264
msgid ""
"Default [AudioBusLayout] resource file to use in the project, unless "
"overridden by the scene."
msgstr ""
-#: doc/classes/ProjectSettings.xml:266
+#: doc/classes/ProjectSettings.xml:267
msgid ""
"Specifies the audio driver to use. This setting is platform-dependent as "
"each platform supports different audio drivers. If left empty, the default "
"audio driver will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:269
+#: doc/classes/ProjectSettings.xml:270
msgid ""
"If [code]true[/code], microphone input will be allowed. This requires "
"appropriate permissions to be set when exporting to Android or iOS."
msgstr ""
-#: doc/classes/ProjectSettings.xml:272
+#: doc/classes/ProjectSettings.xml:273
msgid ""
"The mixing rate used for audio (in Hz). In general, it's better to not touch "
"this and leave it to the host operating system."
msgstr ""
-#: doc/classes/ProjectSettings.xml:275
+#: doc/classes/ProjectSettings.xml:276
msgid ""
"Safer override for [member audio/mix_rate] in the Web platform. Here "
"[code]0[/code] means \"let the browser choose\" (since some browsers do not "
"like forcing the mix rate)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:278
+#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:281
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:284
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:287
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43543,7 +43779,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:290
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43553,27 +43789,27 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:293
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:296
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
-#: doc/classes/ProjectSettings.xml:299
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:302
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -43581,81 +43817,81 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:305
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:308
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:311
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:314
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:317
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr ""
-#: doc/classes/ProjectSettings.xml:320
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:323
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:326
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:329
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:332
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:335
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:338
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:341
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -43663,109 +43899,109 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:344
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:347
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:350
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:353
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:356
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:359
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:362
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:365
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:368
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:371
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:374
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:377
+#: doc/classes/ProjectSettings.xml:380
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:380
+#: doc/classes/ProjectSettings.xml:383
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:383
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:386
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:389
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:392
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:395
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:398
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -43776,91 +44012,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:403
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:406
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:409
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:412
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:415
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:418
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:421
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:424
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:427
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:430
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:433
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:436
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:439
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr ""
-#: doc/classes/ProjectSettings.xml:442
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:445
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:448
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:451
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -43869,13 +44105,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:455
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:458
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -43885,7 +44121,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:463
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -43893,19 +44129,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:468
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:472
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:476
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -43919,45 +44155,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:481
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:484
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:488
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:491
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:494
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:497
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:500
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -43966,7 +44202,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:503
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -43977,7 +44213,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:507
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -43993,14 +44229,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:515
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:518
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -44008,49 +44244,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:521
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:524
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:529
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:532
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:535
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:538
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:541
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:544
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:547
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -44059,7 +44295,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:551
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44067,7 +44303,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:555
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44075,7 +44311,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:559
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44085,7 +44321,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:563
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -44094,7 +44330,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:567
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -44103,7 +44339,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:571
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44113,7 +44349,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:575
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44121,7 +44357,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:579
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -44131,7 +44367,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:583
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -44141,7 +44377,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:587
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44149,7 +44385,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:591
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -44158,7 +44394,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:595
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44166,7 +44402,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:599
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -44178,477 +44414,477 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:605
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:608
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:611
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:614
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:617
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:620
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:623
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:626
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:629
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:632
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:635
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:638
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:641
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:644
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:647
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:650
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:653
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:656
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:659
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:662
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:665
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:668
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:671
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:674
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:677
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:680
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:683
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:686
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:689
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:692
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:695
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:698
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:701
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:704
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:707
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:710
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:713
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:716
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:719
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:722
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:725
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:728
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:731
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:734
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:737
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:740
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:743
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:746
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:749
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:752
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:755
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:758
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:761
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:764
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:767
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:770
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:773
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:776
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:779
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:782
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:785
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:788
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:791
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:794
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:797
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:800
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:803
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:806
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:809
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:812
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:815
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:818
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:821
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:824
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:827
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:830
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:833
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:836
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:839
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:842
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:845
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:848
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:851
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:854
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:857
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:860
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:863
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:866
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:869
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:872
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:875
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:878
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:881
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr ""
-#: doc/classes/ProjectSettings.xml:884
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:887
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:890
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:893
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:896
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:899
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:902
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:905
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:908
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:911
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:914
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:917
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:920
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:923
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:926
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:929
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:932
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:935
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:938
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:941
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:946
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:949
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -44656,92 +44892,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:952
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:955
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:958
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:961
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:964
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:967
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:970
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:973
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:976
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:979
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:982
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:985
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:988
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:991
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:994
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:997
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1000
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1003
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -44751,33 +44987,33 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1007
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1010
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1013
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1017
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1021
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -44790,7 +45026,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1025
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -44802,7 +45038,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1033
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -44814,7 +45050,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1041
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -44827,7 +45063,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1045
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -44835,28 +45071,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1049
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1053
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1056
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1059
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -44866,25 +45102,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1063
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1066
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1069
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1072
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -44897,7 +45133,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1076
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -44909,7 +45145,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1084
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -44921,7 +45157,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1092
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -44934,13 +45170,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1096
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1099
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -44948,11 +45184,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1103
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1106
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -44966,7 +45202,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1112
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -44975,7 +45211,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1116
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -44991,7 +45227,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1121
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -45001,7 +45237,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1125
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45011,7 +45247,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1129
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -45022,7 +45258,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1133
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45032,7 +45268,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1137
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -45040,7 +45276,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1141
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -45051,7 +45287,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1145
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -45066,7 +45302,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1151
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -45075,13 +45311,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1156
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1159
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -45090,7 +45326,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1162
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -45100,7 +45336,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1165
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -45112,7 +45348,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1168
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -45122,24 +45358,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1171
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1174
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1177
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1180
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -45148,7 +45384,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1183
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -45156,7 +45392,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1186
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -45165,7 +45401,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1189
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -45175,7 +45411,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1193
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -45183,31 +45419,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1197
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1200
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1203
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1206
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1209
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -45215,7 +45451,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1212
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -45225,46 +45461,53 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1215
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1218
+#: doc/classes/ProjectSettings.xml:1221
+msgid ""
+"iOS specific override for [member rendering/gles2/compatibility/"
+"disable_half_float], due to poor support for half-float vertex compression "
+"on many devices."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1224
msgid ""
-"If [code]true[/code] and available on the target device, enables high "
-"floating point precision for all shader computations in GLES2.\n"
+"If [code]true[/code] and available on the target Android device, enables "
+"high floating point precision for all shader computations in GLES2.\n"
"[b]Warning:[/b] High floating point precision can be extremely slow on older "
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1225
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1228
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1231
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1234
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -45272,7 +45515,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1237
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -45282,7 +45525,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1240
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -45291,7 +45534,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1243
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -45300,20 +45543,20 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1246
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1249
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1252
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -45322,7 +45565,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1255
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -45330,7 +45573,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1258
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -45339,7 +45582,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -45349,20 +45592,20 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1267
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1274
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -45371,13 +45614,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -45387,46 +45630,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1293
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1296
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1299
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1302
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1305
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -45436,7 +45679,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -45448,7 +45691,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -45456,7 +45699,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1316
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -45464,7 +45707,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -45473,7 +45716,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1323
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -45487,7 +45730,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1328
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -45497,7 +45740,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1331
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -45506,7 +45749,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1334
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -45516,54 +45759,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1337
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1340
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1343
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1346
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1349
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1352
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1355
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1358
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -45574,61 +45817,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1365
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1368
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1371
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1374
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1377
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1380
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1383
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1386
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -45639,7 +45882,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -45648,26 +45891,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1393 doc/classes/ProjectSettings.xml:1396
#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1405
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1408
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1411
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -45678,20 +45921,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1418
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -45703,52 +45946,52 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1428
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1435
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1438
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1441
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1444
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1447
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1450
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1453
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -45756,7 +45999,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -45766,10 +46009,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -45778,10 +46021,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -45790,10 +46033,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -45802,10 +46045,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -45814,10 +46057,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -46476,40 +46719,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr ""
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -46517,14 +46774,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -48851,6 +49108,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -48868,7 +49141,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -48876,11 +49149,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -48890,19 +49163,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -54287,20 +54560,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -54311,28 +54589,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -54344,19 +54622,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
@@ -57135,26 +57413,33 @@ msgid "Text [Color] used when the [ToolButton] is disabled."
msgstr ""
#: doc/classes/ToolButton.xml:39
-msgid "Text [Color] used when the [ToolButton] is being hovered."
+msgid ""
+"Text [Color] used when the [ToolButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/ToolButton.xml:42
-msgid "Text [Color] used when the [ToolButton] is being pressed."
+msgid "Text [Color] used when the [ToolButton] is being hovered."
msgstr ""
#: doc/classes/ToolButton.xml:45
-msgid "[StyleBox] used when the [ToolButton] is being hovered."
+msgid "Text [Color] used when the [ToolButton] is being pressed."
msgstr ""
#: doc/classes/ToolButton.xml:48
-msgid "The horizontal space between [ToolButton]'s icon and text."
+msgid "[StyleBox] used when the [ToolButton] is being hovered."
msgstr ""
#: doc/classes/ToolButton.xml:51
-msgid "Default [StyleBox] for the [ToolButton]."
+msgid "The horizontal space between [ToolButton]'s icon and text."
msgstr ""
#: doc/classes/ToolButton.xml:54
+msgid "Default [StyleBox] for the [ToolButton]."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:57
msgid "[StyleBox] used when the [ToolButton] is being pressed."
msgstr ""
diff --git a/doc/translations/nb.po b/doc/translations/nb.po
new file mode 100644
index 0000000000..1f08034df2
--- /dev/null
+++ b/doc/translations/nb.po
@@ -0,0 +1,69473 @@
+# LANGUAGE translation of the Godot Engine class reference.
+# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur.
+# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md).
+# This file is distributed under the same license as the Godot source code.
+#
+# slasken06 <ask.skivdal@gmail.com>, 2021.
+# Daniel Skogly <daniel@klungo.no>, 2021.
+msgid ""
+msgstr ""
+"Project-Id-Version: Godot Engine class reference\n"
+"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
+"PO-Revision-Date: 2021-11-03 13:15+0000\n"
+"Last-Translator: Daniel Skogly <daniel@klungo.no>\n"
+"Language-Team: Norwegian Bokmål <https://hosted.weblate.org/projects/godot-"
+"engine/godot-class-reference/nb_NO/>\n"
+"Language: nb_NO\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8-bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 4.9-dev\n"
+
+#: doc/tools/make_rst.py
+msgid "Description"
+msgstr "Beskrivelse"
+
+#: doc/tools/make_rst.py
+msgid "Tutorials"
+msgstr ""
+
+#: doc/tools/make_rst.py
+msgid "Properties"
+msgstr "Egenskaper"
+
+#: doc/tools/make_rst.py
+msgid "Methods"
+msgstr "Metoder"
+
+#: doc/tools/make_rst.py
+msgid "Theme Properties"
+msgstr ""
+
+#: doc/tools/make_rst.py
+msgid "Signals"
+msgstr "Signaler"
+
+#: doc/tools/make_rst.py
+msgid "Enumerations"
+msgstr ""
+
+#: doc/tools/make_rst.py
+msgid "Constants"
+msgstr "Konstanter"
+
+#: doc/tools/make_rst.py
+msgid "Property Descriptions"
+msgstr ""
+
+#: doc/tools/make_rst.py
+msgid "Method Descriptions"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:4
+msgid "Built-in GDScript functions."
+msgstr "Innebygde GDScript-funksjoner."
+
+#: modules/gdscript/doc_classes/@GDScript.xml:7
+msgid ""
+"List of core built-in GDScript functions. Math functions and other "
+"utilities. Everything else is provided by objects. (Keywords: builtin, built "
+"in, global functions.)"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:19
+msgid ""
+"Returns a color constructed from integer red, green, blue, and alpha "
+"channels. Each channel should have 8 bits of information ranging from 0 to "
+"255.\n"
+"[code]r8[/code] red channel\n"
+"[code]g8[/code] green channel\n"
+"[code]b8[/code] blue channel\n"
+"[code]a8[/code] alpha channel\n"
+"[codeblock]\n"
+"red = Color8(255, 0, 0)\n"
+"[/codeblock]"
+msgstr ""
+"Returnerer en farge konstruert fra heltall rødt-, grønt-, blått- og "
+"alfakanaler. Hver kanal skal ha 8 bits med informasjon fra 0 til 255.\n"
+"[code]r8[/code] rød kanal\n"
+"[code]g8[/code] grønn kanal\n"
+"[code]b8[/code] blå kanal\n"
+"[code]a8[/code] alfakanal\n"
+"[codeblock]\n"
+"red = Color8(255, 0, 0)\n"
+"[/codeblock]"
+
+#: modules/gdscript/doc_classes/@GDScript.xml:34
+msgid ""
+"Returns a color according to the standardized [code]name[/code] with "
+"[code]alpha[/code] ranging from 0 to 1.\n"
+"[codeblock]\n"
+"red = ColorN(\"red\", 1)\n"
+"[/codeblock]\n"
+"Supported color names are the same as the constants defined in [Color]."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:45
+msgid ""
+"Returns the absolute value of parameter [code]s[/code] (i.e. positive "
+"value).\n"
+"[codeblock]\n"
+"a = abs(-1) # a is 1\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:55
+msgid ""
+"Returns the arc cosine of [code]s[/code] in radians. Use to get the angle of "
+"cosine [code]s[/code]. [code]s[/code] must be between [code]-1.0[/code] and "
+"[code]1.0[/code] (inclusive), otherwise, [method acos] will return [constant "
+"NAN].\n"
+"[codeblock]\n"
+"# c is 0.523599 or 30 degrees if converted with rad2deg(s)\n"
+"c = acos(0.866025)\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:66
+msgid ""
+"Returns the arc sine of [code]s[/code] in radians. Use to get the angle of "
+"sine [code]s[/code]. [code]s[/code] must be between [code]-1.0[/code] and "
+"[code]1.0[/code] (inclusive), otherwise, [method asin] will return [constant "
+"NAN].\n"
+"[codeblock]\n"
+"# s is 0.523599 or 30 degrees if converted with rad2deg(s)\n"
+"s = asin(0.5)\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:78
+msgid ""
+"Asserts that the [code]condition[/code] is [code]true[/code]. If the "
+"[code]condition[/code] is [code]false[/code], an error is generated. When "
+"running from the editor, the running project will also be paused until you "
+"resume it. This can be used as a stronger form of [method push_error] for "
+"reporting errors to project developers or add-on users.\n"
+"[b]Note:[/b] For performance reasons, the code inside [method assert] is "
+"only executed in debug builds or when running the project from the editor. "
+"Don't include code that has side effects in an [method assert] call. "
+"Otherwise, the project will behave differently when exported in release "
+"mode.\n"
+"The optional [code]message[/code] argument, if given, is shown in addition "
+"to the generic \"Assertion failed\" message. You can use this to provide "
+"additional details about why the assertion failed.\n"
+"[codeblock]\n"
+"# Imagine we always want speed to be between 0 and 20.\n"
+"var speed = -10\n"
+"assert(speed < 20) # True, the program will continue\n"
+"assert(speed >= 0) # False, the program will stop\n"
+"assert(speed >= 0 and speed < 20) # You can also combine the two conditional "
+"statements in one check\n"
+"assert(speed < 20, \"speed = %f, but the speed limit is 20\" % speed) # Show "
+"a message with clarifying details\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:95
+msgid ""
+"Returns the arc tangent of [code]s[/code] in radians. Use it to get the "
+"angle from an angle's tangent in trigonometry: [code]atan(tan(angle)) == "
+"angle[/code].\n"
+"The method cannot know in which quadrant the angle should fall. See [method "
+"atan2] if you have both [code]y[/code] and [code]x[/code].\n"
+"[codeblock]\n"
+"a = atan(0.5) # a is 0.463648\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:107
+msgid ""
+"Returns the arc tangent of [code]y/x[/code] in radians. Use to get the angle "
+"of tangent [code]y/x[/code]. To compute the value, the method takes into "
+"account the sign of both arguments in order to determine the quadrant.\n"
+"Important note: The Y coordinate comes first, by convention.\n"
+"[codeblock]\n"
+"a = atan2(0, -1) # a is 3.141593\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:119
+msgid ""
+"Decodes a byte array back to a value. When [code]allow_objects[/code] is "
+"[code]true[/code] decoding objects is allowed.\n"
+"[b]WARNING:[/b] Deserialized object can contain code which gets executed. Do "
+"not use this option if the serialized object comes from untrusted sources to "
+"avoid potential security threats (remote code execution)."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:128
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:145
+msgid ""
+"Converts a 2D point expressed in the cartesian coordinate system (X and Y "
+"axis) to the polar coordinate system (a distance from the origin and an "
+"angle)."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:135
+msgid ""
+"Rounds [code]s[/code] upward (towards positive infinity), returning the "
+"smallest whole number that is not less than [code]s[/code].\n"
+"[codeblock]\n"
+"a = ceil(1.45) # a is 2.0\n"
+"a = ceil(1.001) # a is 2.0\n"
+"[/codeblock]\n"
+"See also [method floor], [method round], [method stepify], and [int]."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:147
+msgid ""
+"Returns a character as a String of the given Unicode code point (which is "
+"compatible with ASCII code).\n"
+"[codeblock]\n"
+"a = char(65) # a is \"A\"\n"
+"a = char(65 + 32) # a is \"a\"\n"
+"a = char(8364) # a is \"€\"\n"
+"[/codeblock]\n"
+"This is the inverse of [method ord]."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:162
+msgid ""
+"Clamps [code]value[/code] and returns a value not less than [code]min[/code] "
+"and not more than [code]max[/code].\n"
+"[codeblock]\n"
+"a = clamp(1000, 1, 20) # a is 20\n"
+"a = clamp(-10, 1, 20) # a is 1\n"
+"a = clamp(15, 1, 20) # a is 15\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:175
+msgid ""
+"Converts from a type to another in the best way possible. The [code]type[/"
+"code] parameter uses the [enum Variant.Type] values.\n"
+"[codeblock]\n"
+"a = Vector2(1, 0)\n"
+"# Prints 1\n"
+"print(a.length())\n"
+"a = convert(a, TYPE_STRING)\n"
+"# Prints 6 as \"(1, 0)\" is 6 characters\n"
+"print(a.length())\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:190
+msgid ""
+"Returns the cosine of angle [code]s[/code] in radians.\n"
+"[codeblock]\n"
+"a = cos(TAU) # a is 1.0\n"
+"a = cos(PI) # a is -1.0\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:201
+msgid ""
+"Returns the hyperbolic cosine of [code]s[/code] in radians.\n"
+"[codeblock]\n"
+"print(cosh(1)) # Prints 1.543081\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:211
+msgid "Converts from decibels to linear energy (audio)."
+msgstr "Konverterer fra desibel til lineær energi (lyd)."
+
+#: modules/gdscript/doc_classes/@GDScript.xml:218
+msgid "Deprecated alias for [method step_decimals]."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:227
+msgid ""
+"[b]Note:[/b] [code]dectime[/code] has been deprecated and will be removed in "
+"Godot 4.0, please use [method move_toward] instead.\n"
+"Returns the result of [code]value[/code] decreased by [code]step[/code] * "
+"[code]amount[/code].\n"
+"[codeblock]\n"
+"a = dectime(60, 10, 0.1)) # a is 59.0\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:238
+msgid ""
+"Converts an angle expressed in degrees to radians.\n"
+"[codeblock]\n"
+"r = deg2rad(180) # r is 3.141593\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:248
+msgid ""
+"Converts a dictionary (previously created with [method inst2dict]) back to "
+"an instance. Useful for deserializing."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:256
+msgid ""
+"Returns an \"eased\" value of [code]x[/code] based on an easing function "
+"defined with [code]curve[/code]. This easing function is based on an "
+"exponent. The [code]curve[/code] can be any floating-point number, with "
+"specific values leading to the following behaviors:\n"
+"[codeblock]\n"
+"- Lower than -1.0 (exclusive): Ease in-out\n"
+"- 1.0: Linear\n"
+"- Between -1.0 and 0.0 (exclusive): Ease out-in\n"
+"- 0.0: Constant\n"
+"- Between 0.0 to 1.0 (exclusive): Ease in\n"
+"- 1.0: Linear\n"
+"- Greater than 1.0 (exclusive): Ease out\n"
+"[/codeblock]\n"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/"
+"ease_cheatsheet.png]ease() curve values cheatsheet[/url]\n"
+"See also [method smoothstep]. If you need to perform more advanced "
+"transitions, use [Tween] or [AnimationPlayer]."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:274
+msgid ""
+"The natural exponential function. It raises the mathematical constant [b]e[/"
+"b] to the power of [code]s[/code] and returns it.\n"
+"[b]e[/b] has an approximate value of 2.71828, and can be obtained with "
+"[code]exp(1)[/code].\n"
+"For exponents to other bases use the method [method pow].\n"
+"[codeblock]\n"
+"a = exp(2) # Approximately 7.39\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:286
+msgid ""
+"Rounds [code]s[/code] downward (towards negative infinity), returning the "
+"largest whole number that is not more than [code]s[/code].\n"
+"[codeblock]\n"
+"a = floor(2.45) # a is 2.0\n"
+"a = floor(2.99) # a is 2.0\n"
+"a = floor(-2.99) # a is -3.0\n"
+"[/codeblock]\n"
+"See also [method ceil], [method round], [method stepify], and [int].\n"
+"[b]Note:[/b] This method returns a float. If you need an integer and "
+"[code]s[/code] is a non-negative number, you can use [code]int(s)[/code] "
+"directly."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:301
+msgid ""
+"Returns the floating-point remainder of [code]a/b[/code], keeping the sign "
+"of [code]a[/code].\n"
+"[codeblock]\n"
+"r = fmod(7, 5.5) # r is 1.5\n"
+"[/codeblock]\n"
+"For the integer remainder operation, use the % operator."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:313
+msgid ""
+"Returns the floating-point modulus of [code]a/b[/code] that wraps equally in "
+"positive and negative.\n"
+"[codeblock]\n"
+"for i in 7:\n"
+" var x = 0.5 * i - 1.5\n"
+" print(\"%4.1f %4.1f %4.1f\" % [x, fmod(x, 1.5), fposmod(x, 1.5)])\n"
+"[/codeblock]\n"
+"Produces:\n"
+"[codeblock]\n"
+"-1.5 -0.0 0.0\n"
+"-1.0 -1.0 0.5\n"
+"-0.5 -0.5 1.0\n"
+" 0.0 0.0 0.0\n"
+" 0.5 0.5 0.5\n"
+" 1.0 1.0 1.0\n"
+" 1.5 0.0 0.0\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:336
+msgid ""
+"Returns a reference to the specified function [code]funcname[/code] in the "
+"[code]instance[/code] node. As functions aren't first-class objects in "
+"GDscript, use [code]funcref[/code] to store a [FuncRef] in a variable and "
+"call it later.\n"
+"[codeblock]\n"
+"func foo():\n"
+" return(\"bar\")\n"
+"\n"
+"a = funcref(self, \"foo\")\n"
+"print(a.call_func()) # Prints bar\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:349
+msgid ""
+"Returns an array of dictionaries representing the current call stack.\n"
+"[codeblock]\n"
+"func _ready():\n"
+" foo()\n"
+"\n"
+"func foo():\n"
+" bar()\n"
+"\n"
+"func bar():\n"
+" print(get_stack())\n"
+"[/codeblock]\n"
+"would print\n"
+"[codeblock]\n"
+"[{function:bar, line:12, source:res://script.gd}, {function:foo, line:9, "
+"source:res://script.gd}, {function:_ready, line:6, source:res://script.gd}]\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:370
+msgid ""
+"Returns the integer hash of the variable passed.\n"
+"[codeblock]\n"
+"print(hash(\"a\")) # Prints 177670\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:380
+msgid ""
+"Returns the passed instance converted to a dictionary (useful for "
+"serializing).\n"
+"[codeblock]\n"
+"var foo = \"bar\"\n"
+"func _ready():\n"
+" var d = inst2dict(self)\n"
+" print(d.keys())\n"
+" print(d.values())\n"
+"[/codeblock]\n"
+"Prints out:\n"
+"[codeblock]\n"
+"[@subpath, @path, foo]\n"
+"[, res://test.gd, bar]\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:399
+msgid ""
+"Returns the Object that corresponds to [code]instance_id[/code]. All Objects "
+"have a unique instance ID.\n"
+"[codeblock]\n"
+"var foo = \"bar\"\n"
+"func _ready():\n"
+" var id = get_instance_id()\n"
+" var inst = instance_from_id(id)\n"
+" print(inst.foo) # Prints bar\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:415
+msgid ""
+"Returns a normalized value considering the given range. This is the opposite "
+"of [method lerp].\n"
+"[codeblock]\n"
+"var middle = lerp(20, 30, 0.75)\n"
+"# `middle` is now 27.5.\n"
+"# Now, we pretend to have forgotten the original ratio and want to get it "
+"back.\n"
+"var ratio = inverse_lerp(20, 30, 27.5)\n"
+"# `ratio` is now 0.75.\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:430
+msgid ""
+"Returns [code]true[/code] if [code]a[/code] and [code]b[/code] are "
+"approximately equal to each other.\n"
+"Here, approximately equal means that [code]a[/code] and [code]b[/code] are "
+"within a small internal epsilon of each other, which scales with the "
+"magnitude of the numbers.\n"
+"Infinity values of the same sign are considered equal."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:439
+msgid ""
+"Returns whether [code]s[/code] is an infinity value (either positive "
+"infinity or negative infinity)."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:446
+msgid ""
+"Returns whether [code]instance[/code] is a valid object (e.g. has not been "
+"deleted from memory)."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:453
+msgid ""
+"Returns whether [code]s[/code] is a NaN (\"Not a Number\" or invalid) value."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:460
+msgid ""
+"Returns [code]true[/code] if [code]s[/code] is zero or almost zero.\n"
+"This method is faster than using [method is_equal_approx] with one value as "
+"zero."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:468
+msgid ""
+"Returns length of Variant [code]var[/code]. Length is the character count of "
+"String, element count of Array, size of Dictionary, etc.\n"
+"[b]Note:[/b] Generates a fatal error if Variant can not provide a length.\n"
+"[codeblock]\n"
+"a = [1, 2, 3, 4]\n"
+"len(a) # Returns 4\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:482
+msgid ""
+"Linearly interpolates between two values by a normalized value. This is the "
+"opposite of [method inverse_lerp].\n"
+"If the [code]from[/code] and [code]to[/code] arguments are of type [int] or "
+"[float], the return value is a [float].\n"
+"If both are of the same vector type ([Vector2], [Vector3] or [Color]), the "
+"return value will be of the same type ([code]lerp[/code] then calls the "
+"vector type's [code]linear_interpolate[/code] method).\n"
+"[codeblock]\n"
+"lerp(0, 4, 0.75) # Returns 3.0\n"
+"lerp(Vector2(1, 5), Vector2(3, 2), 0.5) # Returns Vector2(2, 3.5)\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:497
+msgid ""
+"Linearly interpolates between two angles (in radians) by a normalized "
+"value.\n"
+"Similar to [method lerp], but interpolates correctly when the angles wrap "
+"around [constant @GDScript.TAU].\n"
+"[codeblock]\n"
+"extends Sprite\n"
+"var elapsed = 0.0\n"
+"func _process(delta):\n"
+" var min_angle = deg2rad(0.0)\n"
+" var max_angle = deg2rad(90.0)\n"
+" rotation = lerp_angle(min_angle, max_angle, elapsed)\n"
+" elapsed += delta\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:514
+msgid ""
+"Converts from linear energy to decibels (audio). This can be used to "
+"implement volume sliders that behave as expected (since volume isn't "
+"linear). Example:\n"
+"[codeblock]\n"
+"# \"Slider\" refers to a node that inherits Range such as HSlider or "
+"VSlider.\n"
+"# Its range must be configured to go from 0 to 1.\n"
+"# Change the bus name if you'd like to change the volume of a specific bus "
+"only.\n"
+"AudioServer.set_bus_volume_db(AudioServer.get_bus_index(\"Master\"), "
+"linear2db($Slider.value))\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:527
+msgid ""
+"Loads a resource from the filesystem located at [code]path[/code]. The "
+"resource is loaded on the method call (unless it's referenced already "
+"elsewhere, e.g. in another script or in the scene), which might cause slight "
+"delay, especially when loading scenes. To avoid unnecessary delays when "
+"loading something multiple times, either store the resource in a variable or "
+"use [method preload].\n"
+"[b]Note:[/b] Resource paths can be obtained by right-clicking on a resource "
+"in the FileSystem dock and choosing \"Copy Path\" or by dragging the file "
+"from the FileSystem dock into the script.\n"
+"[codeblock]\n"
+"# Load a scene called main located in the root of the project directory and "
+"cache it in a variable.\n"
+"var main = load(\"res://main.tscn\") # main will contain a PackedScene "
+"resource.\n"
+"[/codeblock]\n"
+"[b]Important:[/b] The path must be absolute, a local path will just return "
+"[code]null[/code].\n"
+"This method is a simplified version of [method ResourceLoader.load], which "
+"can be used for more advanced scenarios."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:541
+msgid ""
+"Natural logarithm. The amount of time needed to reach a certain level of "
+"continuous growth.\n"
+"[b]Note:[/b] This is not the same as the \"log\" function on most "
+"calculators, which uses a base 10 logarithm.\n"
+"[codeblock]\n"
+"log(10) # Returns 2.302585\n"
+"[/codeblock]\n"
+"[b]Note:[/b] The logarithm of [code]0[/code] returns [code]-inf[/code], "
+"while negative values return [code]-nan[/code]."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:554
+msgid ""
+"Returns the maximum of two values.\n"
+"[codeblock]\n"
+"max(1, 2) # Returns 2\n"
+"max(-3.99, -4) # Returns -3.99\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:566
+msgid ""
+"Returns the minimum of two values.\n"
+"[codeblock]\n"
+"min(1, 2) # Returns 1\n"
+"min(-3.99, -4) # Returns -4\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:579
+msgid ""
+"Moves [code]from[/code] toward [code]to[/code] by the [code]delta[/code] "
+"value.\n"
+"Use a negative [code]delta[/code] value to move away.\n"
+"[codeblock]\n"
+"move_toward(5, 10, 4) # Returns 9\n"
+"move_toward(10, 5, 4) # Returns 6\n"
+"move_toward(10, 5, -1.5) # Returns 11.5\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:592
+msgid ""
+"Returns the nearest equal or larger power of 2 for integer [code]value[/"
+"code].\n"
+"In other words, returns the smallest value [code]a[/code] where [code]a = "
+"pow(2, n)[/code] such that [code]value <= a[/code] for some non-negative "
+"integer [code]n[/code].\n"
+"[codeblock]\n"
+"nearest_po2(3) # Returns 4\n"
+"nearest_po2(4) # Returns 4\n"
+"nearest_po2(5) # Returns 8\n"
+"\n"
+"nearest_po2(0) # Returns 0 (this may not be what you expect)\n"
+"nearest_po2(-1) # Returns 0 (this may not be what you expect)\n"
+"[/codeblock]\n"
+"[b]WARNING:[/b] Due to the way it is implemented, this function returns "
+"[code]0[/code] rather than [code]1[/code] for non-positive values of "
+"[code]value[/code] (in reality, 1 is the smallest integer power of 2)."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:609
+msgid ""
+"Returns an integer representing the Unicode code point of the given Unicode "
+"character [code]char[/code].\n"
+"[codeblock]\n"
+"a = ord(\"A\") # a is 65\n"
+"a = ord(\"a\") # a is 97\n"
+"a = ord(\"€\") # a is 8364\n"
+"[/codeblock]\n"
+"This is the inverse of [method char]."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:622
+msgid ""
+"Parse JSON text to a Variant. (Use [method typeof] to check if the Variant's "
+"type is what you expect.)\n"
+"[b]Note:[/b] The JSON specification does not define integer or float types, "
+"but only a [i]number[/i] type. Therefore, parsing a JSON text will convert "
+"all numerical values to [float] types.\n"
+"[b]Note:[/b] JSON objects do not preserve key order like Godot dictionaries, "
+"thus, you should not rely on keys being in a certain order if a dictionary "
+"is constructed from JSON. In contrast, JSON arrays retain the order of their "
+"elements:\n"
+"[codeblock]\n"
+"var p = JSON.parse('[\"hello\", \"world\", \"!\"]')\n"
+"if typeof(p.result) == TYPE_ARRAY:\n"
+" print(p.result[0]) # Prints \"hello\"\n"
+"else:\n"
+" push_error(\"Unexpected results.\")\n"
+"[/codeblock]\n"
+"See also [JSON] for an alternative way to parse JSON text."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:640
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:142
+msgid ""
+"Converts a 2D point expressed in the polar coordinate system (a distance "
+"from the origin [code]r[/code] and an angle [code]th[/code]) to the "
+"cartesian coordinate system (X and Y axis)."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:648
+msgid ""
+"Returns the integer modulus of [code]a/b[/code] that wraps equally in "
+"positive and negative.\n"
+"[codeblock]\n"
+"for i in range(-3, 4):\n"
+" print(\"%2d %2d %2d\" % [i, i % 3, posmod(i, 3)])\n"
+"[/codeblock]\n"
+"Produces:\n"
+"[codeblock]\n"
+"-3 0 0\n"
+"-2 -2 1\n"
+"-1 -1 2\n"
+" 0 0 0\n"
+" 1 1 1\n"
+" 2 2 2\n"
+" 3 0 0\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:670
+msgid ""
+"Returns the result of [code]base[/code] raised to the power of [code]exp[/"
+"code].\n"
+"[codeblock]\n"
+"pow(2, 5) # Returns 32.0\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:680
+msgid ""
+"Returns a [Resource] from the filesystem located at [code]path[/code]. The "
+"resource is loaded during script parsing, i.e. is loaded with the script and "
+"[method preload] effectively acts as a reference to that resource. Note that "
+"the method requires a constant path. If you want to load a resource from a "
+"dynamic/variable path, use [method load].\n"
+"[b]Note:[/b] Resource paths can be obtained by right clicking on a resource "
+"in the Assets Panel and choosing \"Copy Path\" or by dragging the file from "
+"the FileSystem dock into the script.\n"
+"[codeblock]\n"
+"# Instance a scene.\n"
+"var diamond = preload(\"res://diamond.tscn\").instance()\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:691
+msgid ""
+"Converts one or more arguments of any type to string in the best way "
+"possible and prints them to the console.\n"
+"[codeblock]\n"
+"a = [1, 2, 3]\n"
+"print(\"a\", \"=\", a) # Prints a=[1, 2, 3]\n"
+"[/codeblock]\n"
+"[b]Note:[/b] Consider using [method push_error] and [method push_warning] to "
+"print error and warning messages instead of [method print]. This "
+"distinguishes them from print messages used for debugging purposes, while "
+"also displaying a stack trace when an error or warning is printed."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:702
+msgid "Like [method print], but prints only when used in debug mode."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:708
+msgid ""
+"Prints a stack track at code location, only works when running with debugger "
+"turned on.\n"
+"Output in the console would look something like this:\n"
+"[codeblock]\n"
+"Frame 0 - res://test.gd:16 in function '_process'\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:718
+msgid ""
+"Prints one or more arguments to strings in the best way possible to standard "
+"error line.\n"
+"[codeblock]\n"
+"printerr(\"prints to stderr\")\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:727
+msgid ""
+"Prints one or more arguments to strings in the best way possible to console. "
+"No newline is added at the end.\n"
+"[codeblock]\n"
+"printraw(\"A\")\n"
+"printraw(\"B\")\n"
+"# Prints AB\n"
+"[/codeblock]\n"
+"[b]Note:[/b] Due to limitations with Godot's built-in console, this only "
+"prints to the terminal. If you need to print in the editor, use another "
+"method, such as [method print]."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:739
+msgid ""
+"Prints one or more arguments to the console with a space between each "
+"argument.\n"
+"[codeblock]\n"
+"prints(\"A\", \"B\", \"C\") # Prints A B C\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:748
+msgid ""
+"Prints one or more arguments to the console with a tab between each "
+"argument.\n"
+"[codeblock]\n"
+"printt(\"A\", \"B\", \"C\") # Prints A B C\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:758
+msgid ""
+"Pushes an error message to Godot's built-in debugger and to the OS "
+"terminal.\n"
+"[codeblock]\n"
+"push_error(\"test error\") # Prints \"test error\" to debugger and terminal "
+"as error call\n"
+"[/codeblock]\n"
+"[b]Note:[/b] Errors printed this way will not pause project execution. To "
+"print an error message and pause project execution in debug builds, use "
+"[code]assert(false, \"test error\")[/code] instead."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:769
+msgid ""
+"Pushes a warning message to Godot's built-in debugger and to the OS "
+"terminal.\n"
+"[codeblock]\n"
+"push_warning(\"test warning\") # Prints \"test warning\" to debugger and "
+"terminal as warning call\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:779
+msgid ""
+"Converts an angle expressed in radians to degrees.\n"
+"[codeblock]\n"
+"rad2deg(0.523599) # Returns 30.0\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:790
+msgid ""
+"Random range, any floating point value between [code]from[/code] and "
+"[code]to[/code].\n"
+"[codeblock]\n"
+"prints(rand_range(0, 1), rand_range(0, 1)) # Prints e.g. 0.135591 0.405263\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:800
+msgid ""
+"Random from seed: pass a [code]seed[/code], and an array with both number "
+"and new seed is returned. \"Seed\" here refers to the internal state of the "
+"pseudo random number generator. The internal state of the current "
+"implementation is 64 bits."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:806
+msgid ""
+"Returns a random floating point value on the interval [code][0, 1][/code].\n"
+"[codeblock]\n"
+"randf() # Returns e.g. 0.375671\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:815
+msgid ""
+"Returns a random unsigned 32-bit integer. Use remainder to obtain a random "
+"value in the interval [code][0, N - 1][/code] (where N is smaller than "
+"2^32).\n"
+"[codeblock]\n"
+"randi() # Returns random integer between 0 and 2^32 - 1\n"
+"randi() % 20 # Returns random integer between 0 and 19\n"
+"randi() % 100 # Returns random integer between 0 and 99\n"
+"randi() % 100 + 1 # Returns random integer between 1 and 100\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:827
+msgid ""
+"Randomizes the seed (or the internal state) of the random number generator. "
+"Current implementation reseeds using a number based on time.\n"
+"[codeblock]\n"
+"func _ready():\n"
+" randomize()\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:837
+msgid ""
+"Returns an array with the given range. Range can be 1 argument [code]N[/"
+"code] (0 to [code]N[/code] - 1), two arguments ([code]initial[/code], "
+"[code]final - 1[/code]) or three arguments ([code]initial[/code], "
+"[code]final - 1[/code], [code]increment[/code]). Returns an empty array if "
+"the range isn't valid (e.g. [code]range(2, 5, -1)[/code] or [code]range(5, "
+"5, 1)[/code]).\n"
+"Returns an array with the given range. [code]range()[/code] can have 1 "
+"argument N ([code]0[/code] to [code]N - 1[/code]), two arguments "
+"([code]initial[/code], [code]final - 1[/code]) or three arguments "
+"([code]initial[/code], [code]final - 1[/code], [code]increment[/code]). "
+"[code]increment[/code] can be negative. If [code]increment[/code] is "
+"negative, [code]final - 1[/code] will become [code]final + 1[/code]. Also, "
+"the initial value must be greater than the final value for the loop to run.\n"
+"[codeblock]\n"
+"print(range(4))\n"
+"print(range(2, 5))\n"
+"print(range(0, 6, 2))\n"
+"[/codeblock]\n"
+"Output:\n"
+"[codeblock]\n"
+"[0, 1, 2, 3]\n"
+"[2, 3, 4]\n"
+"[0, 2, 4]\n"
+"[/codeblock]\n"
+"To iterate over an [Array] backwards, use:\n"
+"[codeblock]\n"
+"var array = [3, 6, 9]\n"
+"var i := array.size() - 1\n"
+"while i >= 0:\n"
+" print(array[i])\n"
+" i -= 1\n"
+"[/codeblock]\n"
+"Output:\n"
+"[codeblock]\n"
+"9\n"
+"6\n"
+"3\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:874
+msgid ""
+"Maps a [code]value[/code] from range [code][istart, istop][/code] to [code]"
+"[ostart, ostop][/code].\n"
+"[codeblock]\n"
+"range_lerp(75, 0, 100, -1, 1) # Returns 0.5\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:884
+msgid ""
+"Rounds [code]s[/code] to the nearest whole number, with halfway cases "
+"rounded away from zero.\n"
+"[codeblock]\n"
+"a = round(2.49) # a is 2.0\n"
+"a = round(2.5) # a is 3.0\n"
+"a = round(2.51) # a is 3.0\n"
+"[/codeblock]\n"
+"See also [method floor], [method ceil], [method stepify], and [int]."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:897
+msgid ""
+"Sets seed for the random number generator.\n"
+"[codeblock]\n"
+"my_seed = \"Godot Rocks\"\n"
+"seed(my_seed.hash())\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:908
+msgid ""
+"Returns the sign of [code]s[/code]: -1 or 1. Returns 0 if [code]s[/code] is "
+"0.\n"
+"[codeblock]\n"
+"sign(-6) # Returns -1\n"
+"sign(0) # Returns 0\n"
+"sign(6) # Returns 1\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:920
+msgid ""
+"Returns the sine of angle [code]s[/code] in radians.\n"
+"[codeblock]\n"
+"sin(0.523599) # Returns 0.5\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:930
+msgid ""
+"Returns the hyperbolic sine of [code]s[/code].\n"
+"[codeblock]\n"
+"a = log(2.0) # Returns 0.693147\n"
+"sinh(a) # Returns 0.75\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:943
+msgid ""
+"Returns the result of smoothly interpolating the value of [code]s[/code] "
+"between [code]0[/code] and [code]1[/code], based on the where [code]s[/code] "
+"lies with respect to the edges [code]from[/code] and [code]to[/code].\n"
+"The return value is [code]0[/code] if [code]s <= from[/code], and [code]1[/"
+"code] if [code]s >= to[/code]. If [code]s[/code] lies between [code]from[/"
+"code] and [code]to[/code], the returned value follows an S-shaped curve that "
+"maps [code]s[/code] between [code]0[/code] and [code]1[/code].\n"
+"This S-shaped curve is the cubic Hermite interpolator, given by [code]f(y) = "
+"3*y^2 - 2*y^3[/code] where [code]y = (x-from) / (to-from)[/code].\n"
+"[codeblock]\n"
+"smoothstep(0, 2, -5.0) # Returns 0.0\n"
+"smoothstep(0, 2, 0.5) # Returns 0.15625\n"
+"smoothstep(0, 2, 1.0) # Returns 0.5\n"
+"smoothstep(0, 2, 2.0) # Returns 1.0\n"
+"[/codeblock]\n"
+"Compared to [method ease] with a curve value of [code]-1.6521[/code], "
+"[method smoothstep] returns the smoothest possible curve with no sudden "
+"changes in the derivative. If you need to perform more advanced transitions, "
+"use [Tween] or [AnimationPlayer].\n"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/"
+"smoothstep_ease_comparison.png]Comparison between smoothstep() and ease(x, "
+"-1.6521) return values[/url]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:960
+msgid ""
+"Returns the square root of [code]s[/code], where [code]s[/code] is a non-"
+"negative number.\n"
+"[codeblock]\n"
+"sqrt(9) # Returns 3\n"
+"[/codeblock]\n"
+"[b]Note:[/b] Negative values of [code]s[/code] return NaN. If you need "
+"negative inputs, use [code]System.Numerics.Complex[/code] in C#."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:971
+msgid ""
+"Returns the position of the first non-zero digit, after the decimal point. "
+"Note that the maximum return value is 10, which is a design decision in the "
+"implementation.\n"
+"[codeblock]\n"
+"n = step_decimals(5) # n is 0\n"
+"n = step_decimals(1.0005) # n is 4\n"
+"n = step_decimals(0.000000005) # n is 9\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:984
+msgid ""
+"Snaps float value [code]s[/code] to a given [code]step[/code]. This can also "
+"be used to round a floating point number to an arbitrary number of "
+"decimals.\n"
+"[codeblock]\n"
+"stepify(100, 32) # Returns 96.0\n"
+"stepify(3.14159, 0.01) # Returns 3.14\n"
+"[/codeblock]\n"
+"See also [method ceil], [method floor], [method round], and [int]."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:995
+msgid ""
+"Converts one or more arguments of any type to string in the best way "
+"possible.\n"
+"[codeblock]\n"
+"var a = [10, 20, 30]\n"
+"var b = str(a);\n"
+"len(a) # Returns 3\n"
+"len(b) # Returns 12\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:1008
+msgid ""
+"Converts a formatted string that was returned by [method var2str] to the "
+"original value.\n"
+"[codeblock]\n"
+"a = '{ \"a\": 1, \"b\": 2 }'\n"
+"b = str2var(a)\n"
+"print(b[\"a\"]) # Prints 1\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:1020
+msgid ""
+"Returns the tangent of angle [code]s[/code] in radians.\n"
+"[codeblock]\n"
+"tan(deg2rad(45)) # Returns 1\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:1030
+msgid ""
+"Returns the hyperbolic tangent of [code]s[/code].\n"
+"[codeblock]\n"
+"a = log(2.0) # a is 0.693147\n"
+"b = tanh(a) # b is 0.6\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:1041
+msgid ""
+"Converts a [Variant] [code]var[/code] to JSON text and return the result. "
+"Useful for serializing data to store or send over the network.\n"
+"[codeblock]\n"
+"# Both numbers below are integers.\n"
+"a = { \"a\": 1, \"b\": 2 }\n"
+"b = to_json(a)\n"
+"print(b) # {\"a\":1, \"b\":2}\n"
+"# Both numbers above are floats, even if they display without any decimal "
+"places.\n"
+"[/codeblock]\n"
+"[b]Note:[/b] The JSON specification does not define integer or float types, "
+"but only a [i]number[/i] type. Therefore, converting a [Variant] to JSON "
+"text will convert all numerical values to [float] types.\n"
+"See also [JSON] for an alternative way to convert a [Variant] to JSON text."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:1057
+msgid ""
+"Returns whether the given class exists in [ClassDB].\n"
+"[codeblock]\n"
+"type_exists(\"Sprite\") # Returns true\n"
+"type_exists(\"Variant\") # Returns false\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:1068
+msgid ""
+"Returns the internal type of the given Variant object, using the [enum "
+"Variant.Type] values.\n"
+"[codeblock]\n"
+"p = parse_json('[\"a\", \"b\", \"c\"]')\n"
+"if typeof(p) == TYPE_ARRAY:\n"
+" print(p[0]) # Prints a\n"
+"else:\n"
+" print(\"unexpected results\")\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:1082
+msgid ""
+"Checks that [code]json[/code] is valid JSON data. Returns an empty string if "
+"valid, or an error message otherwise.\n"
+"[codeblock]\n"
+"j = to_json([1, 2, 3])\n"
+"v = validate_json(j)\n"
+"if not v:\n"
+" print(\"Valid JSON.\")\n"
+"else:\n"
+" push_error(\"Invalid JSON: \" + v)\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:1098
+msgid ""
+"Encodes a variable value to a byte array. When [code]full_objects[/code] is "
+"[code]true[/code] encoding objects is allowed (and can potentially include "
+"code)."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:1105
+msgid ""
+"Converts a Variant [code]var[/code] to a formatted string that can later be "
+"parsed using [method str2var].\n"
+"[codeblock]\n"
+"a = { \"a\": 1, \"b\": 2 }\n"
+"print(var2str(a))\n"
+"[/codeblock]\n"
+"prints\n"
+"[codeblock]\n"
+"{\n"
+"\"a\": 1,\n"
+"\"b\": 2\n"
+"}\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:1123
+msgid ""
+"Returns a weak reference to an object.\n"
+"A weak reference to an object is not enough to keep the object alive: when "
+"the only remaining references to a referent are weak references, garbage "
+"collection is free to destroy the referent and reuse its memory for "
+"something else. However, until the object is actually destroyed the weak "
+"reference may return the object even if there are no strong references to it."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:1133
+msgid ""
+"Wraps float [code]value[/code] between [code]min[/code] and [code]max[/"
+"code].\n"
+"Usable for creating loop-alike behavior or infinite surfaces.\n"
+"[codeblock]\n"
+"# Infinite loop between 5.0 and 9.9\n"
+"value = wrapf(value + 0.1, 5.0, 10.0)\n"
+"[/codeblock]\n"
+"[codeblock]\n"
+"# Infinite rotation (in radians)\n"
+"angle = wrapf(angle + 0.1, 0.0, TAU)\n"
+"[/codeblock]\n"
+"[codeblock]\n"
+"# Infinite rotation (in radians)\n"
+"angle = wrapf(angle + 0.1, -PI, PI)\n"
+"[/codeblock]\n"
+"[b]Note:[/b] If [code]min[/code] is [code]0[/code], this is equivalent to "
+"[method fposmod], so prefer using that instead.\n"
+"[code]wrapf[/code] is more flexible than using the [method fposmod] approach "
+"by giving the user control over the minimum value."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:1157
+msgid ""
+"Wraps integer [code]value[/code] between [code]min[/code] and [code]max[/"
+"code].\n"
+"Usable for creating loop-alike behavior or infinite surfaces.\n"
+"[codeblock]\n"
+"# Infinite loop between 5 and 9\n"
+"frame = wrapi(frame + 1, 5, 10)\n"
+"[/codeblock]\n"
+"[codeblock]\n"
+"# result is -2\n"
+"var result = wrapi(-6, -5, -1)\n"
+"[/codeblock]\n"
+"[b]Note:[/b] If [code]min[/code] is [code]0[/code], this is equivalent to "
+"[method posmod], so prefer using that instead.\n"
+"[code]wrapi[/code] is more flexible than using the [method posmod] approach "
+"by giving the user control over the minimum value."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:1176
+msgid ""
+"Stops the function execution and returns the current suspended state to the "
+"calling function.\n"
+"From the caller, call [method GDScriptFunctionState.resume] on the state to "
+"resume execution. This invalidates the state. Within the resumed function, "
+"[code]yield()[/code] returns whatever was passed to the [code]resume()[/"
+"code] function call.\n"
+"If passed an object and a signal, the execution is resumed when the object "
+"emits the given signal. In this case, [code]yield()[/code] returns the "
+"argument passed to [code]emit_signal()[/code] if the signal takes only one "
+"argument, or an array containing all the arguments passed to "
+"[code]emit_signal()[/code] if the signal takes multiple arguments.\n"
+"You can also use [code]yield[/code] to wait for a function to finish:\n"
+"[codeblock]\n"
+"func _ready():\n"
+" yield(countdown(), \"completed\") # waiting for the countdown() function "
+"to complete\n"
+" print('Ready')\n"
+"\n"
+"func countdown():\n"
+" yield(get_tree(), \"idle_frame\") # returns a GDScriptFunctionState "
+"object to _ready()\n"
+" print(3)\n"
+" yield(get_tree().create_timer(1.0), \"timeout\")\n"
+" print(2)\n"
+" yield(get_tree().create_timer(1.0), \"timeout\")\n"
+" print(1)\n"
+" yield(get_tree().create_timer(1.0), \"timeout\")\n"
+"\n"
+"# prints:\n"
+"# 3\n"
+"# 2\n"
+"# 1\n"
+"# Ready\n"
+"[/codeblock]\n"
+"When yielding on a function, the [code]completed[/code] signal will be "
+"emitted automatically when the function returns. It can, therefore, be used "
+"as the [code]signal[/code] parameter of the [code]yield[/code] method to "
+"resume.\n"
+"In order to yield on a function, the resulting function should also return a "
+"[code]GDScriptFunctionState[/code]. Notice [code]yield(get_tree(), "
+"\"idle_frame\")[/code] from the above example."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:1207
+msgid ""
+"Constant that represents how many times the diameter of a circle fits around "
+"its perimeter. This is equivalent to [code]TAU / 2[/code]."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:1210
+msgid ""
+"The circle constant, the circumference of the unit circle in radians. This "
+"is equivalent to [code]PI * 2[/code], or 360 degrees in rotations."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:1213
+msgid ""
+"Positive floating-point infinity. This is the result of floating-point "
+"division when the divisor is [code]0.0[/code]. For negative infinity, use "
+"[code]-INF[/code]. Dividing by [code]-0.0[/code] will result in negative "
+"infinity if the numerator is positive, so dividing by [code]0.0[/code] is "
+"not the same as dividing by [code]-0.0[/code] (despite [code]0.0 == -0.0[/"
+"code] returning [code]true[/code]).\n"
+"[b]Note:[/b] Numeric infinity is only a concept with floating-point numbers, "
+"and has no equivalent for integers. Dividing an integer number by [code]0[/"
+"code] will not result in [constant INF] and will result in a run-time error "
+"instead."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:1217
+msgid ""
+"\"Not a Number\", an invalid floating-point value. [constant NAN] has "
+"special properties, including that it is not equal to itself ([code]NAN == "
+"NAN[/code] returns [code]false[/code]). It is output by some invalid "
+"operations, such as dividing floating-point [code]0.0[/code] by [code]0.0[/"
+"code].\n"
+"[b]Note:[/b] \"Not a Number\" is only a concept with floating-point numbers, "
+"and has no equivalent for integers. Dividing an integer [code]0[/code] by "
+"[code]0[/code] will not result in [constant NAN] and will result in a run-"
+"time error instead."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:4
+msgid "Global scope constants and variables."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:7
+msgid ""
+"Global scope constants and variables. This is all that resides in the "
+"globals, constants regarding error codes, scancodes, property hints, etc.\n"
+"Singletons are also documented here, since they can be accessed from "
+"anywhere."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:16
+msgid "The [ARVRServer] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:19
+msgid "The [AudioServer] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:22
+msgid "The [CameraServer] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:25
+msgid "The [ClassDB] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:28
+msgid "The [Engine] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:31
+msgid "The [Geometry] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:34
+msgid "The [IP] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:37
+msgid "The [Input] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:40
+msgid "The [InputMap] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:43
+msgid "The [JSON] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:46
+msgid ""
+"The [JavaClassWrapper] singleton.\n"
+"[b]Note:[/b] Only implemented on Android."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:50
+msgid ""
+"The [JavaScript] singleton.\n"
+"[b]Note:[/b] Only implemented on HTML5."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:54
+msgid "The [Marshalls] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:57
+msgid "The [EditorNavigationMeshGenerator] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:60
+msgid "The [OS] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:63
+msgid "The [Performance] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:66
+msgid "The [Physics2DServer] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:69
+msgid "The [PhysicsServer] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:72
+msgid "The [ProjectSettings] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:75
+msgid "The [ResourceLoader] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:78
+msgid "The [ResourceSaver] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:81
+msgid "The [TranslationServer] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:84
+msgid "The [VisualScriptEditor] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:87
+msgid "The [VisualServer] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:92
+msgid "Left margin, usually used for [Control] or [StyleBox]-derived classes."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:95
+msgid "Top margin, usually used for [Control] or [StyleBox]-derived classes."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:98
+msgid "Right margin, usually used for [Control] or [StyleBox]-derived classes."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:101
+msgid ""
+"Bottom margin, usually used for [Control] or [StyleBox]-derived classes."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:104
+msgid "Top-left corner."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:107
+msgid "Top-right corner."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:110
+msgid "Bottom-right corner."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:113
+msgid "Bottom-left corner."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:116
+msgid ""
+"General vertical alignment, usually used for [Separator], [ScrollBar], "
+"[Slider], etc."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:119
+msgid ""
+"General horizontal alignment, usually used for [Separator], [ScrollBar], "
+"[Slider], etc."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:122
+msgid "Horizontal left alignment, usually for text-derived classes."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:125
+msgid "Horizontal center alignment, usually for text-derived classes."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:128
+msgid "Horizontal right alignment, usually for text-derived classes."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:131
+msgid "Vertical top alignment, usually for text-derived classes."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:134
+msgid "Vertical center alignment, usually for text-derived classes."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:137
+msgid "Vertical bottom alignment, usually for text-derived classes."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:140
+msgid "Scancodes with this bit applied are non-printable."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:143
+msgid "Escape key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:146
+msgid "Tab key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:149
+msgid "Shift+Tab key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:152
+msgid "Backspace key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:155
+msgid "Return key (on the main keyboard)."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:158
+msgid "Enter key on the numeric keypad."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:161
+msgid "Insert key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:164
+msgid "Delete key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:167
+msgid "Pause key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:170
+msgid "Print Screen key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:173
+msgid "System Request key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:176
+msgid "Clear key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:179
+msgid "Home key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:182
+msgid "End key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:185
+msgid "Left arrow key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:188
+msgid "Up arrow key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:191
+msgid "Right arrow key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:194
+msgid "Down arrow key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:197
+msgid "Page Up key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:200
+msgid "Page Down key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:203
+msgid "Shift key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:206
+msgid "Control key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:209
+msgid "Meta key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:212
+msgid "Alt key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:215
+msgid "Caps Lock key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:218
+msgid "Num Lock key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:221
+msgid "Scroll Lock key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:224
+msgid "F1 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:227
+msgid "F2 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:230
+msgid "F3 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:233
+msgid "F4 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:236
+msgid "F5 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:239
+msgid "F6 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:242
+msgid "F7 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:245
+msgid "F8 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:248
+msgid "F9 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:251
+msgid "F10 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:254
+msgid "F11 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:257
+msgid "F12 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:260
+msgid "F13 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:263
+msgid "F14 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:266
+msgid "F15 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:269
+msgid "F16 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:272
+msgid "Multiply (*) key on the numeric keypad."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:275
+msgid "Divide (/) key on the numeric keypad."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:278
+msgid "Subtract (-) key on the numeric keypad."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:281
+msgid "Period (.) key on the numeric keypad."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:284
+msgid "Add (+) key on the numeric keypad."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:287
+msgid "Number 0 on the numeric keypad."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:290
+msgid "Number 1 on the numeric keypad."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:293
+msgid "Number 2 on the numeric keypad."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:296
+msgid "Number 3 on the numeric keypad."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:299
+msgid "Number 4 on the numeric keypad."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:302
+msgid "Number 5 on the numeric keypad."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:305
+msgid "Number 6 on the numeric keypad."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:308
+msgid "Number 7 on the numeric keypad."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:311
+msgid "Number 8 on the numeric keypad."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:314
+msgid "Number 9 on the numeric keypad."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:317
+msgid "Left Super key (Windows key)."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:320
+msgid "Right Super key (Windows key)."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:323
+msgid "Context menu key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:326
+msgid "Left Hyper key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:329
+msgid "Right Hyper key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:332
+msgid "Help key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:335
+msgid "Left Direction key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:338
+msgid "Right Direction key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:341
+msgid ""
+"Media back key. Not to be confused with the Back button on an Android device."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:344
+msgid "Media forward key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:347 doc/classes/@GlobalScope.xml:380
+msgid "Media stop key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:350
+msgid "Media refresh key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:353
+msgid "Volume down key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:356
+msgid "Mute volume key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:359
+msgid "Volume up key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:362
+msgid "Bass Boost key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:365
+msgid "Bass up key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:368
+msgid "Bass down key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:371
+msgid "Treble up key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:374
+msgid "Treble down key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:377
+msgid "Media play key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:383
+msgid "Previous song key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:386
+msgid "Next song key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:389
+msgid "Media record key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:392
+msgid "Home page key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:395
+msgid "Favorites key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:398
+msgid "Search key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:401
+msgid "Standby key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:404
+msgid "Open URL / Launch Browser key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:407
+msgid "Launch Mail key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:410
+msgid "Launch Media key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:413
+msgid "Launch Shortcut 0 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:416
+msgid "Launch Shortcut 1 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:419
+msgid "Launch Shortcut 2 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:422
+msgid "Launch Shortcut 3 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:425
+msgid "Launch Shortcut 4 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:428
+msgid "Launch Shortcut 5 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:431
+msgid "Launch Shortcut 6 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:434
+msgid "Launch Shortcut 7 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:437
+msgid "Launch Shortcut 8 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:440
+msgid "Launch Shortcut 9 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:443
+msgid "Launch Shortcut A key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:446
+msgid "Launch Shortcut B key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:449
+msgid "Launch Shortcut C key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:452
+msgid "Launch Shortcut D key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:455
+msgid "Launch Shortcut E key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:458
+msgid "Launch Shortcut F key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:461
+msgid "Unknown key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:464
+msgid "Space key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:467
+msgid "! key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:470
+msgid "\" key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:473
+msgid "# key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:476
+msgid "$ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:479
+msgid "% key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:482
+msgid "& key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:485
+msgid "' key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:488
+msgid "( key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:491
+msgid ") key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:494
+msgid "* key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:497
+msgid "+ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:500
+msgid ", key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:503
+msgid "- key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:506
+msgid ". key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:509
+msgid "/ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:512
+msgid "Number 0."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:515
+msgid "Number 1."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:518
+msgid "Number 2."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:521
+msgid "Number 3."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:524
+msgid "Number 4."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:527
+msgid "Number 5."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:530
+msgid "Number 6."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:533
+msgid "Number 7."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:536
+msgid "Number 8."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:539
+msgid "Number 9."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:542
+msgid ": key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:545
+msgid "; key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:548
+msgid "< key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:551
+msgid "= key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:554
+msgid "> key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:557
+msgid "? key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:560
+msgid "@ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:563
+msgid "A key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:566
+msgid "B key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:569
+msgid "C key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:572
+msgid "D key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:575
+msgid "E key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:578
+msgid "F key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:581
+msgid "G key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:584
+msgid "H key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:587
+msgid "I key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:590
+msgid "J key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:593
+msgid "K key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:596
+msgid "L key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:599
+msgid "M key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:602
+msgid "N key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:605
+msgid "O key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:608
+msgid "P key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:611
+msgid "Q key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:614
+msgid "R key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:617
+msgid "S key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:620
+msgid "T key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:623
+msgid "U key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:626
+msgid "V key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:629
+msgid "W key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:632
+msgid "X key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:635
+msgid "Y key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:638
+msgid "Z key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:641
+msgid "[ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:644
+msgid "\\ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:647
+msgid "] key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:650
+msgid "^ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:653
+msgid "_ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:656
+msgid "` key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:659
+msgid "{ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:662
+msgid "| key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:665
+msgid "} key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:668
+msgid "~ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:671
+msgid "Non-breakable space key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:674
+msgid "¡ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:677
+msgid "¢ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:680
+msgid "£ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:683
+msgid "¤ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:686
+msgid "Â¥ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:689
+msgid "¦ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:692
+msgid "§ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:695
+msgid "¨ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:698
+msgid "© key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:701
+msgid "ª key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:704
+msgid "« key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:707
+msgid "¬ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:710
+msgid "Soft hyphen key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:713
+msgid "® key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:716
+msgid "¯ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:719
+msgid "° key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:722
+msgid "± key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:725
+msgid "² key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:728
+msgid "³ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:731
+msgid "´ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:734
+msgid "µ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:737
+msgid "¶ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:740
+msgid "· key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:743
+msgid "¸ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:746
+msgid "¹ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:749
+msgid "º key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:752
+msgid "» key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:755
+msgid "¼ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:758
+msgid "½ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:761
+msgid "¾ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:764
+msgid "¿ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:767
+msgid "À key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:770
+msgid "Ã key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:773
+msgid "Â key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:776
+msgid "Ã key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:779
+msgid "Ä key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:782
+msgid "Ã… key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:785
+msgid "Æ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:788
+msgid "Ç key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:791
+msgid "È key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:794
+msgid "É key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:797
+msgid "Ê key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:800
+msgid "Ë key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:803
+msgid "Ì key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:806
+msgid "Ã key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:809
+msgid "ÃŽ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:812
+msgid "Ã key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:815
+msgid "Ã key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:818
+msgid "Ñ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:821
+msgid "Ã’ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:824
+msgid "Ó key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:827
+msgid "Ô key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:830
+msgid "Õ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:833
+msgid "Ö key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:836
+msgid "× key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:839
+msgid "Ø key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:842
+msgid "Ù key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:845
+msgid "Ú key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:848
+msgid "Û key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:851
+msgid "Ü key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:854
+msgid "Ã key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:857
+msgid "Þ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:860
+msgid "ß key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:863
+msgid "÷ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:866
+msgid "ÿ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:869
+msgid "Key Code mask."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:872
+msgid "Modifier key mask."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:875
+msgid "Shift key mask."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:878
+msgid "Alt key mask."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:881
+msgid "Meta key mask."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:884
+msgid "Ctrl key mask."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:887
+msgid ""
+"Command key mask. On macOS, this is equivalent to [constant KEY_MASK_META]. "
+"On other platforms, this is equivalent to [constant KEY_MASK_CTRL]. This "
+"mask should be preferred to [constant KEY_MASK_META] or [constant "
+"KEY_MASK_CTRL] for system shortcuts as it handles all platforms correctly."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:890
+msgid "Keypad key mask."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:893
+msgid "Group Switch key mask."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:896
+msgid "Left mouse button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:899
+msgid "Right mouse button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:902
+msgid "Middle mouse button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:905
+msgid "Extra mouse button 1 (only present on some mice)."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:908
+msgid "Extra mouse button 2 (only present on some mice)."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:911
+msgid "Mouse wheel up."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:914
+msgid "Mouse wheel down."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:917
+msgid "Mouse wheel left button (only present on some mice)."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:920
+msgid "Mouse wheel right button (only present on some mice)."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:923
+msgid "Left mouse button mask."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:926
+msgid "Right mouse button mask."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:929
+msgid "Middle mouse button mask."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:932
+msgid "Extra mouse button 1 mask."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:935
+msgid "Extra mouse button 2 mask."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:938
+msgid "Invalid button or axis."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:941
+msgid "Gamepad button 0."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:944
+msgid "Gamepad button 1."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:947
+msgid "Gamepad button 2."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:950
+msgid "Gamepad button 3."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:953
+msgid "Gamepad button 4."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:956
+msgid "Gamepad button 5."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:959
+msgid "Gamepad button 6."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:962
+msgid "Gamepad button 7."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:965
+msgid "Gamepad button 8."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:968
+msgid "Gamepad button 9."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:971
+msgid "Gamepad button 10."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:974
+msgid "Gamepad button 11."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:977
+msgid "Gamepad button 12."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:980
+msgid "Gamepad button 13."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:983
+msgid "Gamepad button 14."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:986
+msgid "Gamepad button 15."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:989
+msgid "Gamepad button 16."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:992
+msgid "Gamepad button 17."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:995
+msgid "Gamepad button 18."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:998
+msgid "Gamepad button 19."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1001
+msgid "Gamepad button 20."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1004
+msgid "Gamepad button 21."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1007
+msgid "Gamepad button 22."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1010
+msgid "Represents the maximum number of joystick buttons supported."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1013
+msgid "DualShock circle button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1016
+msgid "DualShock X button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1019
+msgid "DualShock square button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1022
+msgid "DualShock triangle button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1025
+msgid "Xbox controller B button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1028
+msgid "Xbox controller A button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1031
+msgid "Xbox controller X button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1034
+msgid "Xbox controller Y button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1037
+msgid "Nintendo controller A button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1040
+msgid "Nintendo controller B button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1043
+msgid "Nintendo controller X button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1046
+msgid "Nintendo controller Y button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1049
+msgid "Grip (side) buttons on a VR controller."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1052
+msgid "Push down on the touchpad or main joystick on a VR controller."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1055
+msgid "Trigger on a VR controller."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1058
+msgid ""
+"A button on the right Oculus Touch controller, X button on the left "
+"controller (also when used in OpenVR)."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1061
+msgid ""
+"B button on the right Oculus Touch controller, Y button on the left "
+"controller (also when used in OpenVR)."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1064
+msgid "Menu button on either Oculus Touch controller."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1067
+msgid "Menu button in OpenVR (Except when Oculus Touch controllers are used)."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1070
+msgid "Gamepad button Select."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1073
+msgid "Gamepad button Start."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1076
+msgid "Gamepad DPad up."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1079
+msgid "Gamepad DPad down."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1082
+msgid "Gamepad DPad left."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1085
+msgid "Gamepad DPad right."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1088
+msgid "Gamepad SDL guide button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1091
+msgid "Gamepad SDL miscellaneous button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1094
+msgid "Gamepad SDL paddle 1 button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1097
+msgid "Gamepad SDL paddle 2 button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1100
+msgid "Gamepad SDL paddle 3 button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1103
+msgid "Gamepad SDL paddle 4 button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1106
+msgid "Gamepad SDL touchpad button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1109
+msgid "Gamepad left Shoulder button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1112
+msgid "Gamepad left trigger."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1115
+msgid "Gamepad left stick click."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1118
+msgid "Gamepad right Shoulder button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1121
+msgid "Gamepad right trigger."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1124
+msgid "Gamepad right stick click."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1127 doc/classes/@GlobalScope.xml:1160
+msgid "Gamepad left stick horizontal axis."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1130 doc/classes/@GlobalScope.xml:1163
+msgid "Gamepad left stick vertical axis."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1133 doc/classes/@GlobalScope.xml:1166
+msgid "Gamepad right stick horizontal axis."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1136 doc/classes/@GlobalScope.xml:1169
+msgid "Gamepad right stick vertical axis."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1139
+msgid "Generic gamepad axis 4."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1142
+msgid "Generic gamepad axis 5."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1145
+msgid "Gamepad left trigger analog axis."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1148
+msgid "Gamepad right trigger analog axis."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1151
+msgid "Generic gamepad axis 8."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1154
+msgid "Generic gamepad axis 9."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1157
+msgid "Represents the maximum number of joystick axes supported."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1172
+msgid "Gamepad left analog trigger."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1175
+msgid "Gamepad right analog trigger."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1178
+msgid "VR Controller analog trigger."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1181
+msgid "VR Controller analog grip (side buttons)."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1184
+msgid ""
+"OpenVR touchpad X axis (Joystick axis on Oculus Touch and Windows MR "
+"controllers)."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1187
+msgid ""
+"OpenVR touchpad Y axis (Joystick axis on Oculus Touch and Windows MR "
+"controllers)."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1190
+msgid "MIDI note OFF message."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1193
+msgid "MIDI note ON message."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1196
+msgid "MIDI aftertouch message."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1199
+msgid "MIDI control change message."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1202
+msgid "MIDI program change message."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1205
+msgid "MIDI channel pressure message."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1208
+msgid "MIDI pitch bend message."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1211
+msgid ""
+"Methods that return [enum Error] return [constant OK] when no error "
+"occurred. Note that many functions don't return an error code but will print "
+"error messages to standard output.\n"
+"Since [constant OK] has value 0, and all other failure codes are positive "
+"integers, it can also be used in boolean checks, e.g.:\n"
+"[codeblock]\n"
+"var err = method_that_returns_error()\n"
+"if err != OK:\n"
+" print(\"Failure!\")\n"
+"# Or, equivalent:\n"
+"if err:\n"
+" print(\"Still failing!\")\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1223
+msgid "Generic error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1226
+msgid "Unavailable error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1229
+msgid "Unconfigured error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1232
+msgid "Unauthorized error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1235
+msgid "Parameter range error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1238
+msgid "Out of memory (OOM) error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1241
+msgid "File: Not found error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1244
+msgid "File: Bad drive error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1247
+msgid "File: Bad path error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1250
+msgid "File: No permission error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1253
+msgid "File: Already in use error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1256
+msgid "File: Can't open error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1259
+msgid "File: Can't write error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1262
+msgid "File: Can't read error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1265
+msgid "File: Unrecognized error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1268
+msgid "File: Corrupt error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1271
+msgid "File: Missing dependencies error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1274
+msgid "File: End of file (EOF) error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1277
+msgid "Can't open error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1280
+msgid "Can't create error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1283
+msgid "Query failed error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1286
+msgid "Already in use error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1289
+msgid "Locked error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1292
+msgid "Timeout error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1295
+msgid "Can't connect error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1298
+msgid "Can't resolve error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1301
+msgid "Connection error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1304
+msgid "Can't acquire resource error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1307
+msgid "Can't fork process error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1310
+msgid "Invalid data error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1313
+msgid "Invalid parameter error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1316
+msgid "Already exists error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1319
+msgid "Does not exist error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1322
+msgid "Database: Read error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1325
+msgid "Database: Write error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1328
+msgid "Compilation failed error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1331
+msgid "Method not found error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1334
+msgid "Linking failed error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1337
+msgid "Script failed error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1340
+msgid "Cycling link (import cycle) error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1343
+msgid "Invalid declaration error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1346
+msgid "Duplicate symbol error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1349
+msgid "Parse error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1352
+msgid "Busy error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1355
+msgid "Skip error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1358
+msgid "Help error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1361
+msgid "Bug error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1364
+msgid ""
+"Printer on fire error. (This is an easter egg, no engine methods return this "
+"error code.)"
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1367
+msgid "No hint for the edited property."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1370
+msgid ""
+"Hints that an integer or float property should be within a range specified "
+"via the hint string [code]\"min,max\"[/code] or [code]\"min,max,step\"[/"
+"code]. The hint string can optionally include [code]\"or_greater\"[/code] "
+"and/or [code]\"or_lesser\"[/code] to allow manual input going respectively "
+"above the max or below the min values. Example: [code]\"-360,360,1,"
+"or_greater,or_lesser\"[/code]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1373
+msgid ""
+"Hints that a float property should be within an exponential range specified "
+"via the hint string [code]\"min,max\"[/code] or [code]\"min,max,step\"[/"
+"code]. The hint string can optionally include [code]\"or_greater\"[/code] "
+"and/or [code]\"or_lesser\"[/code] to allow manual input going respectively "
+"above the max or below the min values. Example: [code]\"0.01,100,0.01,"
+"or_greater\"[/code]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1376
+msgid ""
+"Hints that an integer, float or string property is an enumerated value to "
+"pick in a list specified via a hint string such as [code]\"Hello,Something,"
+"Else\"[/code]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1379
+msgid ""
+"Hints that a float property should be edited via an exponential easing "
+"function. The hint string can include [code]\"attenuation\"[/code] to flip "
+"the curve horizontally and/or [code]\"inout\"[/code] to also include in/out "
+"easing."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1382 doc/classes/@GlobalScope.xml:1385
+msgid "Deprecated hint, unused."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1388
+msgid ""
+"Hints that an integer property is a bitmask with named bit flags. For "
+"example, to allow toggling bits 0, 1, 2 and 4, the hint could be something "
+"like [code]\"Bit0,Bit1,Bit2,,Bit4\"[/code]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1391
+msgid ""
+"Hints that an integer property is a bitmask using the optionally named 2D "
+"render layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1394
+msgid ""
+"Hints that an integer property is a bitmask using the optionally named 2D "
+"physics layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1397
+msgid ""
+"Hints that an integer property is a bitmask using the optionally named 3D "
+"render layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1400
+msgid ""
+"Hints that an integer property is a bitmask using the optionally named 3D "
+"physics layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1403
+msgid ""
+"Hints that a string property is a path to a file. Editing it will show a "
+"file dialog for picking the path. The hint string can be a set of filters "
+"with wildcards like [code]\"*.png,*.jpg\"[/code]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1406
+msgid ""
+"Hints that a string property is a path to a directory. Editing it will show "
+"a file dialog for picking the path."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1409
+msgid ""
+"Hints that a string property is an absolute path to a file outside the "
+"project folder. Editing it will show a file dialog for picking the path. The "
+"hint string can be a set of filters with wildcards like [code]\"*.png,*.jpg"
+"\"[/code]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1412
+msgid ""
+"Hints that a string property is an absolute path to a directory outside the "
+"project folder. Editing it will show a file dialog for picking the path."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1415
+msgid ""
+"Hints that a property is an instance of a [Resource]-derived type, "
+"optionally specified via the hint string (e.g. [code]\"Texture\"[/code]). "
+"Editing it will show a popup menu of valid resource types to instantiate."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1418
+msgid ""
+"Hints that a string property is text with line breaks. Editing it will show "
+"a text input field where line breaks can be typed."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1421
+msgid ""
+"Hints that a string property should have a placeholder text visible on its "
+"input field, whenever the property is empty. The hint string is the "
+"placeholder text to use."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1424
+msgid ""
+"Hints that a color property should be edited without changing its alpha "
+"component, i.e. only R, G and B channels are edited."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1427
+msgid "Hints that an image is compressed using lossy compression."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1430
+msgid "Hints that an image is compressed using lossless compression."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1433
+msgid "The property is serialized and saved in the scene file (default)."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1436
+msgid "The property is shown in the editor inspector (default)."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1439 doc/classes/@GlobalScope.xml:1442
+msgid "Deprecated usage flag, unused."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1445
+msgid "The property can be checked in the editor inspector."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1448
+msgid "The property is checked in the editor inspector."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1451
+msgid "The property is a translatable string."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1454
+msgid "Used to group properties together in the editor."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1457
+msgid "Used to categorize properties together in the editor."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1460
+msgid "The property does not save its state in [PackedScene]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1463
+msgid "Editing the property prompts the user for restarting the editor."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1466
+msgid ""
+"The property is a script variable which should be serialized and saved in "
+"the scene file."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1469
+msgid "Default usage (storage, editor and network)."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1472
+msgid ""
+"Default usage for translatable strings (storage, editor, network and "
+"internationalized)."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1475
+msgid ""
+"Default usage but without showing the property in the editor (storage, "
+"network)."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1478
+msgid "Flag for a normal method."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1481
+msgid "Flag for an editor method."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1484 doc/classes/@GlobalScope.xml:1490
+#: doc/classes/@GlobalScope.xml:1496
+msgid "Deprecated method flag, unused."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1487
+msgid "Flag for a constant method."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1493
+msgid "Flag for a virtual method."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1499
+msgid "Default method flags."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1502
+msgid "Variable is [code]null[/code]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1505
+msgid "Variable is of type [bool]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1508
+msgid "Variable is of type [int]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1511
+msgid "Variable is of type [float] (real)."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1514
+msgid "Variable is of type [String]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1517
+msgid "Variable is of type [Vector2]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1520
+msgid "Variable is of type [Rect2]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1523
+msgid "Variable is of type [Vector3]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1526
+msgid "Variable is of type [Transform2D]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1529
+msgid "Variable is of type [Plane]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1532
+msgid "Variable is of type [Quat]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1535
+msgid "Variable is of type [AABB]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1538
+msgid "Variable is of type [Basis]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1541
+msgid "Variable is of type [Transform]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1544
+msgid "Variable is of type [Color]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1547
+msgid "Variable is of type [NodePath]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1550
+msgid "Variable is of type [RID]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1553
+msgid "Variable is of type [Object]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1556
+msgid "Variable is of type [Dictionary]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1559
+msgid "Variable is of type [Array]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1562
+msgid "Variable is of type [PoolByteArray]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1565
+msgid "Variable is of type [PoolIntArray]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1568
+msgid "Variable is of type [PoolRealArray]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1571
+msgid "Variable is of type [PoolStringArray]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1574
+msgid "Variable is of type [PoolVector2Array]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1577
+msgid "Variable is of type [PoolVector3Array]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1580
+msgid "Variable is of type [PoolColorArray]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1583
+msgid "Represents the size of the [enum Variant.Type] enum."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1586
+msgid "Equality operator ([code]==[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1589
+msgid "Inequality operator ([code]!=[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1592
+msgid "Less than operator ([code]<[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1595
+msgid "Less than or equal operator ([code]<=[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1598
+msgid "Greater than operator ([code]>[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1601
+msgid "Greater than or equal operator ([code]>=[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1604
+msgid "Addition operator ([code]+[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1607
+msgid "Subtraction operator ([code]-[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1610
+msgid "Multiplication operator ([code]*[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1613
+msgid "Division operator ([code]/[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1616
+msgid "Unary negation operator ([code]-[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1619
+msgid "Unary plus operator ([code]+[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1622
+msgid "Remainder/modulo operator ([code]%[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1625
+msgid "String concatenation operator ([code]+[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1628
+msgid "Left shift operator ([code]<<[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1631
+msgid "Right shift operator ([code]>>[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1634
+msgid "Bitwise AND operator ([code]&[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1637
+msgid "Bitwise OR operator ([code]|[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1640
+msgid "Bitwise XOR operator ([code]^[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1643
+msgid "Bitwise NOT operator ([code]~[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1646
+msgid "Logical AND operator ([code]and[/code] or [code]&&[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1649
+msgid "Logical OR operator ([code]or[/code] or [code]||[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1652
+msgid "Logical XOR operator (not implemented in GDScript)."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1655
+msgid "Logical NOT operator ([code]not[/code] or [code]![/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1658
+msgid "Logical IN operator ([code]in[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1661
+msgid "Represents the size of the [enum Variant.Operator] enum."
+msgstr ""
+
+#: doc/classes/AABB.xml:4
+msgid "Axis-Aligned Bounding Box."
+msgstr ""
+
+#: doc/classes/AABB.xml:7
+msgid ""
+"[AABB] consists of a position, a size, and several utility functions. It is "
+"typically used for fast overlap tests.\n"
+"It uses floating-point coordinates. The 2D counterpart to [AABB] is "
+"[Rect2].\n"
+"[b]Note:[/b] Unlike [Rect2], [AABB] does not have a variant that uses "
+"integer coordinates."
+msgstr ""
+
+#: doc/classes/AABB.xml:12 doc/classes/Basis.xml:13 doc/classes/Plane.xml:10
+#: doc/classes/Rect2.xml:12 doc/classes/Transform.xml:11
+#: doc/classes/Transform2D.xml:11 doc/classes/Vector2.xml:11
+#: doc/classes/Vector3.xml:11
+msgid "https://docs.godotengine.org/en/3.4/tutorials/math/index.html"
+msgstr ""
+
+#: doc/classes/AABB.xml:13 doc/classes/Rect2.xml:13 doc/classes/Vector2.xml:12
+#: doc/classes/Vector3.xml:12
+msgid "https://docs.godotengine.org/en/3.4/tutorials/math/vector_math.html"
+msgstr ""
+
+#: doc/classes/AABB.xml:14 doc/classes/Rect2.xml:14 doc/classes/Vector2.xml:13
+#: doc/classes/Vector3.xml:13
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/math/vectors_advanced.html"
+msgstr ""
+
+#: doc/classes/AABB.xml:22
+msgid "Constructs an [AABB] from a position and size."
+msgstr ""
+
+#: doc/classes/AABB.xml:28
+msgid ""
+"Returns an AABB with equivalent position and size, modified so that the most-"
+"negative corner is the origin and the size is positive."
+msgstr ""
+
+#: doc/classes/AABB.xml:35
+msgid ""
+"Returns [code]true[/code] if this [AABB] completely encloses another one."
+msgstr ""
+
+#: doc/classes/AABB.xml:42
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/AABB.xml:55
+msgid "Returns the volume of the [AABB]."
+msgstr ""
+
+#: doc/classes/AABB.xml:62
+msgid "Gets the position of the 8 endpoints of the [AABB] in space."
+msgstr ""
+
+#: doc/classes/AABB.xml:68
+msgid "Returns the normalized longest axis of the [AABB]."
+msgstr ""
+
+#: doc/classes/AABB.xml:74
+msgid ""
+"Returns the index of the longest axis of the [AABB] (according to "
+"[Vector3]'s [code]AXIS_*[/code] constants)."
+msgstr ""
+
+#: doc/classes/AABB.xml:80
+msgid "Returns the scalar length of the longest axis of the [AABB]."
+msgstr ""
+
+#: doc/classes/AABB.xml:86
+msgid "Returns the normalized shortest axis of the [AABB]."
+msgstr ""
+
+#: doc/classes/AABB.xml:92
+msgid ""
+"Returns the index of the shortest axis of the [AABB] (according to "
+"[Vector3]::AXIS* enum)."
+msgstr ""
+
+#: doc/classes/AABB.xml:98
+msgid "Returns the scalar length of the shortest axis of the [AABB]."
+msgstr ""
+
+#: doc/classes/AABB.xml:105
+msgid ""
+"Returns the support point in a given direction. This is useful for collision "
+"detection algorithms."
+msgstr ""
+
+#: doc/classes/AABB.xml:112
+msgid ""
+"Returns a copy of the [AABB] grown a given amount of units towards all the "
+"sides."
+msgstr ""
+
+#: doc/classes/AABB.xml:118
+msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
+msgstr ""
+
+#: doc/classes/AABB.xml:124
+msgid "Returns [code]true[/code] if the [AABB] is empty."
+msgstr ""
+
+#: doc/classes/AABB.xml:131
+msgid "Returns [code]true[/code] if the [AABB] contains a point."
+msgstr ""
+
+#: doc/classes/AABB.xml:138
+msgid ""
+"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
+"returned on failure."
+msgstr ""
+
+#: doc/classes/AABB.xml:145
+msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
+msgstr ""
+
+#: doc/classes/AABB.xml:152
+msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
+msgstr ""
+
+#: doc/classes/AABB.xml:160
+msgid ""
+"Returns [code]true[/code] if the [AABB] intersects the line segment between "
+"[code]from[/code] and [code]to[/code]."
+msgstr ""
+
+#: doc/classes/AABB.xml:167
+msgid ""
+"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
+"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
+"component."
+msgstr ""
+
+#: doc/classes/AABB.xml:174
+msgid ""
+"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
+msgstr ""
+
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
+msgid ""
+"Ending corner. This is calculated as [code]position + size[/code]. Setting "
+"this value will change the size."
+msgstr ""
+
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
+msgid "Beginning corner. Typically has values lower than [member end]."
+msgstr ""
+
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
+msgid ""
+"Size from [member position] to [member end]. Typically, all components are "
+"positive.\n"
+"If the size is negative, you can use [method abs] to fix it."
+msgstr ""
+
+#: doc/classes/AcceptDialog.xml:4
+msgid "Base dialog for user notification."
+msgstr ""
+
+#: doc/classes/AcceptDialog.xml:7
+msgid ""
+"This dialog is useful for small notifications to the user about an event. It "
+"can only be accepted or closed, with the same result."
+msgstr ""
+
+#: doc/classes/AcceptDialog.xml:18
+msgid ""
+"Adds a button with label [code]text[/code] and a custom [code]action[/code] "
+"to the dialog and returns the created button. [code]action[/code] will be "
+"passed to the [signal custom_action] signal when pressed.\n"
+"If [code]true[/code], [code]right[/code] will place the button to the right "
+"of any sibling buttons.\n"
+"You can use [method remove_button] method to remove a button created with "
+"this method from the dialog."
+msgstr ""
+
+#: doc/classes/AcceptDialog.xml:27
+msgid ""
+"Adds a button with label [code]name[/code] and a cancel action to the dialog "
+"and returns the created button.\n"
+"You can use [method remove_button] method to remove a button created with "
+"this method from the dialog."
+msgstr ""
+
+#: doc/classes/AcceptDialog.xml:34
+msgid ""
+"Returns the label used for built-in text.\n"
+"[b]Warning:[/b] This is a required internal node, removing and freeing it "
+"may cause a crash. If you wish to hide it or any of its children, use their "
+"[member CanvasItem.visible] property."
+msgstr ""
+
+#: doc/classes/AcceptDialog.xml:41
+msgid ""
+"Returns the OK [Button] instance.\n"
+"[b]Warning:[/b] This is a required internal node, removing and freeing it "
+"may cause a crash. If you wish to hide it or any of its children, use their "
+"[member CanvasItem.visible] property."
+msgstr ""
+
+#: doc/classes/AcceptDialog.xml:49
+msgid ""
+"Registers a [LineEdit] in the dialog. When the enter key is pressed, the "
+"dialog will be accepted."
+msgstr ""
+
+#: doc/classes/AcceptDialog.xml:56
+msgid ""
+"Removes the [code]button[/code] from the dialog. Does NOT free the "
+"[code]button[/code]. The [code]button[/code] must be a [Button] added with "
+"[method add_button] or [method add_cancel] method. After removal, pressing "
+"the [code]button[/code] will no longer emit this dialog's [signal "
+"custom_action] signal or cancel this dialog."
+msgstr ""
+
+#: doc/classes/AcceptDialog.xml:62
+msgid "Sets autowrapping for the text in the dialog."
+msgstr ""
+
+#: doc/classes/AcceptDialog.xml:65
+msgid ""
+"If [code]true[/code], the dialog is hidden when the OK button is pressed. "
+"You can set it to [code]false[/code] if you want to do e.g. input validation "
+"when receiving the [signal confirmed] signal, and handle hiding the dialog "
+"in your own logic.\n"
+"[b]Note:[/b] Some nodes derived from this class can have a different default "
+"value, and potentially their own built-in logic overriding this setting. For "
+"example [FileDialog] defaults to [code]false[/code], and has its own input "
+"validation code that is called when you press OK, which eventually hides the "
+"dialog if the input is valid. As such, this property can't be used in "
+"[FileDialog] to disable hiding the dialog when pressing OK."
+msgstr ""
+
+#: doc/classes/AcceptDialog.xml:69
+msgid "The text displayed by the dialog."
+msgstr ""
+
+#: doc/classes/AcceptDialog.xml:76
+msgid "Emitted when the dialog is accepted, i.e. the OK button is pressed."
+msgstr ""
+
+#: doc/classes/AcceptDialog.xml:82
+msgid "Emitted when a custom button is pressed. See [method add_button]."
+msgstr ""
+
+#: doc/classes/AESContext.xml:4
+msgid "Interface to low level AES encryption features."
+msgstr ""
+
+#: doc/classes/AESContext.xml:7
+msgid ""
+"This class provides access to AES encryption/decryption of raw data. Both "
+"AES-ECB and AES-CBC mode are supported.\n"
+"[codeblock]\n"
+"extends Node\n"
+"\n"
+"var aes = AESContext.new()\n"
+"\n"
+"func _ready():\n"
+" var key = \"My secret key!!!\" # Key must be either 16 or 32 bytes.\n"
+" var data = \"My secret text!!\" # Data size must be multiple of 16 "
+"bytes, apply padding if needed.\n"
+" # Encrypt ECB\n"
+" aes.start(AESContext.MODE_ECB_ENCRYPT, key.to_utf8())\n"
+" var encrypted = aes.update(data.to_utf8())\n"
+" aes.finish()\n"
+" # Decrypt ECB\n"
+" aes.start(AESContext.MODE_ECB_DECRYPT, key.to_utf8())\n"
+" var decrypted = aes.update(encrypted)\n"
+" aes.finish()\n"
+" # Check ECB\n"
+" assert(decrypted == data.to_utf8())\n"
+"\n"
+" var iv = \"My secret iv!!!!\" # IV must be of exactly 16 bytes.\n"
+" # Encrypt CBC\n"
+" aes.start(AESContext.MODE_CBC_ENCRYPT, key.to_utf8(), iv.to_utf8())\n"
+" encrypted = aes.update(data.to_utf8())\n"
+" aes.finish()\n"
+" # Decrypt CBC\n"
+" aes.start(AESContext.MODE_CBC_DECRYPT, key.to_utf8(), iv.to_utf8())\n"
+" decrypted = aes.update(encrypted)\n"
+" aes.finish()\n"
+" # Check CBC\n"
+" assert(decrypted == data.to_utf8())\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/AESContext.xml:46
+msgid "Close this AES context so it can be started again. See [method start]."
+msgstr ""
+
+#: doc/classes/AESContext.xml:52
+msgid ""
+"Get the current IV state for this context (IV gets updated when calling "
+"[method update]). You normally don't need this function.\n"
+"[b]Note:[/b] This function only makes sense when the context is started with "
+"[constant MODE_CBC_ENCRYPT] or [constant MODE_CBC_DECRYPT]."
+msgstr ""
+
+#: doc/classes/AESContext.xml:62
+msgid ""
+"Start the AES context in the given [code]mode[/code]. A [code]key[/code] of "
+"either 16 or 32 bytes must always be provided, while an [code]iv[/code] "
+"(initialization vector) of exactly 16 bytes, is only needed when [code]mode[/"
+"code] is either [constant MODE_CBC_ENCRYPT] or [constant MODE_CBC_DECRYPT]."
+msgstr ""
+
+#: doc/classes/AESContext.xml:69
+msgid ""
+"Run the desired operation for this AES context. Will return a "
+"[PoolByteArray] containing the result of encrypting (or decrypting) the "
+"given [code]src[/code]. See [method start] for mode of operation.\n"
+"[b]Note:[/b] The size of [code]src[/code] must be a multiple of 16. Apply "
+"some padding if needed."
+msgstr ""
+
+#: doc/classes/AESContext.xml:76
+msgid "AES electronic codebook encryption mode."
+msgstr ""
+
+#: doc/classes/AESContext.xml:79
+msgid "AES electronic codebook decryption mode."
+msgstr ""
+
+#: doc/classes/AESContext.xml:82
+msgid "AES cipher blocker chaining encryption mode."
+msgstr ""
+
+#: doc/classes/AESContext.xml:85
+msgid "AES cipher blocker chaining decryption mode."
+msgstr ""
+
+#: doc/classes/AESContext.xml:88
+msgid "Maximum value for the mode enum."
+msgstr ""
+
+#: doc/classes/AnimatedSprite.xml:4
+msgid "Sprite node that can use multiple textures for animation."
+msgstr ""
+
+#: doc/classes/AnimatedSprite.xml:7
+msgid ""
+"Animations are created using a [SpriteFrames] resource, which can be "
+"configured in the editor via the SpriteFrames panel.\n"
+"[b]Note:[/b] You can associate a set of normal maps by creating additional "
+"[SpriteFrames] resources with a [code]_normal[/code] suffix. For example, "
+"having 2 [SpriteFrames] resources [code]run[/code] and [code]run_normal[/"
+"code] will make it so the [code]run[/code] animation uses the normal map."
+msgstr ""
+
+#: doc/classes/AnimatedSprite.xml:11 doc/classes/AnimatedSprite3D.xml:10
+#: doc/classes/AnimationPlayer.xml:13
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/2d/2d_sprite_animation.html"
+msgstr ""
+
+#: doc/classes/AnimatedSprite.xml:12 doc/classes/Area2D.xml:11
+#: doc/classes/AudioStreamPlayer.xml:12 doc/classes/Button.xml:24
+#: doc/classes/CanvasLayer.xml:12 doc/classes/CollisionShape2D.xml:11
+#: doc/classes/ColorRect.xml:10 doc/classes/Input.xml:11
+#: doc/classes/InputEvent.xml:12 doc/classes/InputEventAction.xml:11
+#: doc/classes/Label.xml:12 doc/classes/Particles2D.xml:15
+#: doc/classes/Timer.xml:11 doc/classes/VisibilityNotifier2D.xml:12
+msgid "https://godotengine.org/asset-library/asset/515"
+msgstr ""
+
+#: doc/classes/AnimatedSprite.xml:18 doc/classes/AnimatedSprite3D.xml:16
+msgid "Returns [code]true[/code] if an animation is currently being played."
+msgstr ""
+
+#: doc/classes/AnimatedSprite.xml:26
+msgid ""
+"Plays the animation named [code]anim[/code]. If no [code]anim[/code] is "
+"provided, the current animation is played. If [code]backwards[/code] is "
+"[code]true[/code], the animation will be played in reverse."
+msgstr ""
+
+#: doc/classes/AnimatedSprite.xml:32 doc/classes/AnimatedSprite3D.xml:29
+msgid "Stops the current animation (does not reset the frame counter)."
+msgstr ""
+
+#: doc/classes/AnimatedSprite.xml:38 doc/classes/AnimatedSprite3D.xml:35
+msgid ""
+"The current animation from the [code]frames[/code] resource. If this value "
+"changes, the [code]frame[/code] counter is reset."
+msgstr ""
+
+#: doc/classes/AnimatedSprite.xml:41 doc/classes/SpriteBase3D.xml:48
+msgid "If [code]true[/code], texture will be centered."
+msgstr ""
+
+#: doc/classes/AnimatedSprite.xml:44 doc/classes/Sprite.xml:39
+#: doc/classes/SpriteBase3D.xml:54 doc/classes/TextureButton.xml:21
+#: doc/classes/TextureRect.xml:20
+msgid "If [code]true[/code], texture is flipped horizontally."
+msgstr ""
+
+#: doc/classes/AnimatedSprite.xml:47 doc/classes/Sprite.xml:42
+#: doc/classes/SpriteBase3D.xml:57 doc/classes/TextureButton.xml:24
+#: doc/classes/TextureRect.xml:23
+msgid "If [code]true[/code], texture is flipped vertically."
+msgstr ""
+
+#: doc/classes/AnimatedSprite.xml:50 doc/classes/AnimatedSprite3D.xml:38
+msgid "The displayed animation frame's index."
+msgstr ""
+
+#: doc/classes/AnimatedSprite.xml:53 doc/classes/AnimatedSprite3D.xml:41
+msgid "The [SpriteFrames] resource containing the animation(s)."
+msgstr ""
+
+#: doc/classes/AnimatedSprite.xml:56 doc/classes/Sprite.xml:58
+#: doc/classes/SpriteBase3D.xml:63
+msgid "The texture's drawing offset."
+msgstr ""
+
+#: doc/classes/AnimatedSprite.xml:59 doc/classes/AnimatedSprite3D.xml:44
+msgid "If [code]true[/code], the [member animation] is currently playing."
+msgstr ""
+
+#: doc/classes/AnimatedSprite.xml:62
+msgid "The animation speed is multiplied by this value."
+msgstr ""
+
+#: doc/classes/AnimatedSprite.xml:68 doc/classes/AnimatedSprite3D.xml:50
+msgid ""
+"Emitted when the animation is finished (when it plays the last frame). If "
+"the animation is looping, this signal is emitted every time the last frame "
+"is drawn."
+msgstr ""
+
+#: doc/classes/AnimatedSprite.xml:73 doc/classes/AnimatedSprite3D.xml:55
+msgid "Emitted when [member frame] changed."
+msgstr ""
+
+#: doc/classes/AnimatedSprite3D.xml:4
+msgid ""
+"2D sprite node in 3D world, that can use multiple 2D textures for animation."
+msgstr ""
+
+#: doc/classes/AnimatedSprite3D.xml:7
+msgid ""
+"Animations are created using a [SpriteFrames] resource, which can be "
+"configured in the editor via the SpriteFrames panel."
+msgstr ""
+
+#: doc/classes/AnimatedSprite3D.xml:23
+msgid ""
+"Plays the animation named [code]anim[/code]. If no [code]anim[/code] is "
+"provided, the current animation is played."
+msgstr ""
+
+#: doc/classes/AnimatedTexture.xml:4
+msgid "Proxy texture for simple frame-based animations."
+msgstr ""
+
+#: doc/classes/AnimatedTexture.xml:7
+msgid ""
+"[AnimatedTexture] is a resource format for frame-based animations, where "
+"multiple textures can be chained automatically with a predefined delay for "
+"each frame. Unlike [AnimationPlayer] or [AnimatedSprite], it isn't a [Node], "
+"but has the advantage of being usable anywhere a [Texture] resource can be "
+"used, e.g. in a [TileSet].\n"
+"The playback of the animation is controlled by the [member fps] property as "
+"well as each frame's optional delay (see [method set_frame_delay]). The "
+"animation loops, i.e. it will restart at frame 0 automatically after playing "
+"the last frame.\n"
+"[AnimatedTexture] currently requires all frame textures to have the same "
+"size, otherwise the bigger ones will be cropped to match the smallest one.\n"
+"[b]Note:[/b] AnimatedTexture doesn't support using [AtlasTexture]s. Each "
+"frame needs to be a separate [Texture]."
+msgstr ""
+
+#: doc/classes/AnimatedTexture.xml:19
+msgid "Returns the given frame's delay value."
+msgstr ""
+
+#: doc/classes/AnimatedTexture.xml:26
+msgid "Returns the given frame's [Texture]."
+msgstr ""
+
+#: doc/classes/AnimatedTexture.xml:34
+msgid ""
+"Sets an additional delay (in seconds) between this frame and the next one, "
+"that will be added to the time interval defined by [member fps]. By default, "
+"frames have no delay defined. If a delay value is defined, the final time "
+"interval between this frame and the next will be [code]1.0 / fps + delay[/"
+"code].\n"
+"For example, for an animation with 3 frames, 2 FPS and a frame delay on the "
+"second frame of 1.2, the resulting playback will be:\n"
+"[codeblock]\n"
+"Frame 0: 0.5 s (1 / fps)\n"
+"Frame 1: 1.7 s (1 / fps + 1.2)\n"
+"Frame 2: 0.5 s (1 / fps)\n"
+"Total duration: 2.7 s\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/AnimatedTexture.xml:49
+msgid ""
+"Assigns a [Texture] to the given frame. Frame IDs start at 0, so the first "
+"frame has ID 0, and the last frame of the animation has ID [member frames] - "
+"1.\n"
+"You can define any number of textures up to [constant MAX_FRAMES], but keep "
+"in mind that only frames from 0 to [member frames] - 1 will be part of the "
+"animation."
+msgstr ""
+
+#: doc/classes/AnimatedTexture.xml:56
+msgid "Sets the currently visible frame of the texture."
+msgstr ""
+
+#: doc/classes/AnimatedTexture.xml:60
+msgid ""
+"Animation speed in frames per second. This value defines the default time "
+"interval between two frames of the animation, and thus the overall duration "
+"of the animation loop based on the [member frames] property. A value of 0 "
+"means no predefined number of frames per second, the animation will play "
+"according to each frame's frame delay (see [method set_frame_delay]).\n"
+"For example, an animation with 8 frames, no frame delay and a [code]fps[/"
+"code] value of 2 will run for 4 seconds, with each frame lasting 0.5 seconds."
+msgstr ""
+
+#: doc/classes/AnimatedTexture.xml:64
+msgid ""
+"Number of frames to use in the animation. While you can create the frames "
+"independently with [method set_frame_texture], you need to set this value "
+"for the animation to take new frames into account. The maximum number of "
+"frames is [constant MAX_FRAMES]."
+msgstr ""
+
+#: doc/classes/AnimatedTexture.xml:67
+msgid ""
+"If [code]true[/code], the animation will only play once and will not loop "
+"back to the first frame after reaching the end. Note that reaching the end "
+"will not set [member pause] to [code]true[/code]."
+msgstr ""
+
+#: doc/classes/AnimatedTexture.xml:70
+msgid ""
+"If [code]true[/code], the animation will pause where it currently is (i.e. "
+"at [member current_frame]). The animation will continue from where it was "
+"paused when changing this property to [code]false[/code]."
+msgstr ""
+
+#: doc/classes/AnimatedTexture.xml:75
+msgid ""
+"The maximum number of frames supported by [AnimatedTexture]. If you need "
+"more frames in your animation, use [AnimationPlayer] or [AnimatedSprite]."
+msgstr ""
+
+#: doc/classes/Animation.xml:4
+msgid "Contains data used to animate everything in the engine."
+msgstr ""
+
+#: doc/classes/Animation.xml:7
+msgid ""
+"An Animation resource contains data used to animate everything in the "
+"engine. Animations are divided into tracks, and each track must be linked to "
+"a node. The state of that node can be changed through time, by adding timed "
+"keys (events) to the track.\n"
+"[codeblock]\n"
+"# This creates an animation that makes the node \"Enemy\" move to the right "
+"by\n"
+"# 100 pixels in 0.5 seconds.\n"
+"var animation = Animation.new()\n"
+"var track_index = animation.add_track(Animation.TYPE_VALUE)\n"
+"animation.track_set_path(track_index, \"Enemy:position:x\")\n"
+"animation.track_insert_key(track_index, 0.0, 0)\n"
+"animation.track_insert_key(track_index, 0.5, 100)\n"
+"[/codeblock]\n"
+"Animations are just data containers, and must be added to nodes such as an "
+"[AnimationPlayer] or [AnimationTreePlayer] to be played back. Animation "
+"tracks have different types, each with its own set of dedicated methods. "
+"Check [enum TrackType] to see available types."
+msgstr ""
+
+#: doc/classes/Animation.xml:20 doc/classes/AnimationPlayer.xml:12
+msgid "https://docs.godotengine.org/en/3.4/tutorials/animation/index.html"
+msgstr ""
+
+#: doc/classes/Animation.xml:28
+msgid "Adds a track to the Animation."
+msgstr ""
+
+#: doc/classes/Animation.xml:36
+msgid ""
+"Returns the animation name at the key identified by [code]key_idx[/code]. "
+"The [code]track_idx[/code] must be the index of an Animation Track."
+msgstr ""
+
+#: doc/classes/Animation.xml:45
+msgid ""
+"Inserts a key with value [code]animation[/code] at the given [code]time[/"
+"code] (in seconds). The [code]track_idx[/code] must be the index of an "
+"Animation Track."
+msgstr ""
+
+#: doc/classes/Animation.xml:54
+msgid ""
+"Sets the key identified by [code]key_idx[/code] to value [code]animation[/"
+"code]. The [code]track_idx[/code] must be the index of an Animation Track."
+msgstr ""
+
+#: doc/classes/Animation.xml:62
+msgid ""
+"Returns the end offset of the key identified by [code]key_idx[/code]. The "
+"[code]track_idx[/code] must be the index of an Audio Track.\n"
+"End offset is the number of seconds cut off at the ending of the audio "
+"stream."
+msgstr ""
+
+#: doc/classes/Animation.xml:71
+msgid ""
+"Returns the start offset of the key identified by [code]key_idx[/code]. The "
+"[code]track_idx[/code] must be the index of an Audio Track.\n"
+"Start offset is the number of seconds cut off at the beginning of the audio "
+"stream."
+msgstr ""
+
+#: doc/classes/Animation.xml:80
+msgid ""
+"Returns the audio stream of the key identified by [code]key_idx[/code]. The "
+"[code]track_idx[/code] must be the index of an Audio Track."
+msgstr ""
+
+#: doc/classes/Animation.xml:91
+msgid ""
+"Inserts an Audio Track key at the given [code]time[/code] in seconds. The "
+"[code]track_idx[/code] must be the index of an Audio Track.\n"
+"[code]stream[/code] is the [AudioStream] resource to play. "
+"[code]start_offset[/code] is the number of seconds cut off at the beginning "
+"of the audio stream, while [code]end_offset[/code] is at the ending."
+msgstr ""
+
+#: doc/classes/Animation.xml:101
+msgid ""
+"Sets the end offset of the key identified by [code]key_idx[/code] to value "
+"[code]offset[/code]. The [code]track_idx[/code] must be the index of an "
+"Audio Track."
+msgstr ""
+
+#: doc/classes/Animation.xml:110
+msgid ""
+"Sets the start offset of the key identified by [code]key_idx[/code] to value "
+"[code]offset[/code]. The [code]track_idx[/code] must be the index of an "
+"Audio Track."
+msgstr ""
+
+#: doc/classes/Animation.xml:119
+msgid ""
+"Sets the stream of the key identified by [code]key_idx[/code] to value "
+"[code]stream[/code]. The [code]track_idx[/code] must be the index of an "
+"Audio Track."
+msgstr ""
+
+#: doc/classes/Animation.xml:127
+msgid ""
+"Returns the in handle of the key identified by [code]key_idx[/code]. The "
+"[code]track_idx[/code] must be the index of a Bezier Track."
+msgstr ""
+
+#: doc/classes/Animation.xml:135
+msgid ""
+"Returns the out handle of the key identified by [code]key_idx[/code]. The "
+"[code]track_idx[/code] must be the index of a Bezier Track."
+msgstr ""
+
+#: doc/classes/Animation.xml:143
+msgid ""
+"Returns the value of the key identified by [code]key_idx[/code]. The "
+"[code]track_idx[/code] must be the index of a Bezier Track."
+msgstr ""
+
+#: doc/classes/Animation.xml:154
+msgid ""
+"Inserts a Bezier Track key at the given [code]time[/code] in seconds. The "
+"[code]track_idx[/code] must be the index of a Bezier Track.\n"
+"[code]in_handle[/code] is the left-side weight of the added Bezier curve "
+"point, [code]out_handle[/code] is the right-side one, while [code]value[/"
+"code] is the actual value at this point."
+msgstr ""
+
+#: doc/classes/Animation.xml:163
+msgid ""
+"Returns the interpolated value at the given [code]time[/code] (in seconds). "
+"The [code]track_idx[/code] must be the index of a Bezier Track."
+msgstr ""
+
+#: doc/classes/Animation.xml:172
+msgid ""
+"Sets the in handle of the key identified by [code]key_idx[/code] to value "
+"[code]in_handle[/code]. The [code]track_idx[/code] must be the index of a "
+"Bezier Track."
+msgstr ""
+
+#: doc/classes/Animation.xml:181
+msgid ""
+"Sets the out handle of the key identified by [code]key_idx[/code] to value "
+"[code]out_handle[/code]. The [code]track_idx[/code] must be the index of a "
+"Bezier Track."
+msgstr ""
+
+#: doc/classes/Animation.xml:190
+msgid ""
+"Sets the value of the key identified by [code]key_idx[/code] to the given "
+"value. The [code]track_idx[/code] must be the index of a Bezier Track."
+msgstr ""
+
+#: doc/classes/Animation.xml:196
+msgid "Clear the animation (clear all tracks and reset all)."
+msgstr ""
+
+#: doc/classes/Animation.xml:204
+msgid ""
+"Adds a new track that is a copy of the given track from [code]to_animation[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Animation.xml:211
+msgid ""
+"Returns the index of the specified track. If the track is not found, return "
+"-1."
+msgstr ""
+
+#: doc/classes/Animation.xml:217
+msgid "Returns the amount of tracks in the animation."
+msgstr ""
+
+#: doc/classes/Animation.xml:226
+msgid ""
+"Returns all the key indices of a method track, given a position and delta "
+"time."
+msgstr ""
+
+#: doc/classes/Animation.xml:234
+msgid "Returns the method name of a method track."
+msgstr ""
+
+#: doc/classes/Animation.xml:242
+msgid ""
+"Returns the arguments values to be called on a method track for a given key "
+"in a given track."
+msgstr ""
+
+#: doc/classes/Animation.xml:249
+msgid "Removes a track by specifying the track index."
+msgstr ""
+
+#: doc/classes/Animation.xml:258
+msgid ""
+"Finds the key index by time in a given track. Optionally, only find it if "
+"the exact time is given."
+msgstr ""
+
+#: doc/classes/Animation.xml:265
+msgid ""
+"Returns [code]true[/code] if the track at [code]idx[/code] wraps the "
+"interpolation loop. New tracks wrap the interpolation loop by default."
+msgstr ""
+
+#: doc/classes/Animation.xml:272
+msgid "Returns the interpolation type of a given track."
+msgstr ""
+
+#: doc/classes/Animation.xml:279
+msgid "Returns the amount of keys in a given track."
+msgstr ""
+
+#: doc/classes/Animation.xml:287
+msgid "Returns the time at which the key is located."
+msgstr ""
+
+#: doc/classes/Animation.xml:295
+msgid ""
+"Returns the transition curve (easing) for a specific key (see the built-in "
+"math function [method @GDScript.ease])."
+msgstr ""
+
+#: doc/classes/Animation.xml:303
+msgid "Returns the value of a given key in a given track."
+msgstr ""
+
+#: doc/classes/Animation.xml:310
+msgid ""
+"Gets the path of a track. For more information on the path format, see "
+"[method track_set_path]."
+msgstr ""
+
+#: doc/classes/Animation.xml:317
+msgid "Gets the type of a track."
+msgstr ""
+
+#: doc/classes/Animation.xml:327
+msgid "Insert a generic key in a given track."
+msgstr ""
+
+#: doc/classes/Animation.xml:334
+msgid ""
+"Returns [code]true[/code] if the track at index [code]idx[/code] is enabled."
+msgstr ""
+
+#: doc/classes/Animation.xml:341
+msgid ""
+"Returns [code]true[/code] if the given track is imported. Else, return "
+"[code]false[/code]."
+msgstr ""
+
+#: doc/classes/Animation.xml:348
+msgid "Moves a track down."
+msgstr ""
+
+#: doc/classes/Animation.xml:356
+msgid ""
+"Changes the index position of track [code]idx[/code] to the one defined in "
+"[code]to_idx[/code]."
+msgstr ""
+
+#: doc/classes/Animation.xml:363
+msgid "Moves a track up."
+msgstr ""
+
+#: doc/classes/Animation.xml:371
+msgid "Removes a key by index in a given track."
+msgstr ""
+
+#: doc/classes/Animation.xml:379
+msgid "Removes a key by position (seconds) in a given track."
+msgstr ""
+
+#: doc/classes/Animation.xml:387
+msgid "Enables/disables the given track. Tracks are enabled by default."
+msgstr ""
+
+#: doc/classes/Animation.xml:395
+msgid "Sets the given track as imported or not."
+msgstr ""
+
+#: doc/classes/Animation.xml:403
+msgid ""
+"If [code]true[/code], the track at [code]idx[/code] wraps the interpolation "
+"loop."
+msgstr ""
+
+#: doc/classes/Animation.xml:411
+msgid "Sets the interpolation type of a given track."
+msgstr ""
+
+#: doc/classes/Animation.xml:420
+msgid "Sets the time of an existing key."
+msgstr ""
+
+#: doc/classes/Animation.xml:429
+msgid ""
+"Sets the transition curve (easing) for a specific key (see the built-in math "
+"function [method @GDScript.ease])."
+msgstr ""
+
+#: doc/classes/Animation.xml:438
+msgid "Sets the value of an existing key."
+msgstr ""
+
+#: doc/classes/Animation.xml:446
+msgid ""
+"Sets the path of a track. Paths must be valid scene-tree paths to a node and "
+"must be specified starting from the parent node of the node that will "
+"reproduce the animation. Tracks that control properties or bones must append "
+"their name after the path, separated by [code]\":\"[/code].\n"
+"For example, [code]\"character/skeleton:ankle\"[/code] or [code]\"character/"
+"mesh:transform/local\"[/code]."
+msgstr ""
+
+#: doc/classes/Animation.xml:455
+msgid ""
+"Swaps the track [code]idx[/code]'s index position with the track "
+"[code]with_idx[/code]."
+msgstr ""
+
+#: doc/classes/Animation.xml:466
+msgid "Insert a transform key for a transform track."
+msgstr ""
+
+#: doc/classes/Animation.xml:474
+msgid ""
+"Returns the interpolated value of a transform track at a given time (in "
+"seconds). An array consisting of 3 elements: position ([Vector3]), rotation "
+"([Quat]) and scale ([Vector3])."
+msgstr ""
+
+#: doc/classes/Animation.xml:483
+msgid ""
+"Returns all the key indices of a value track, given a position and delta "
+"time."
+msgstr ""
+
+#: doc/classes/Animation.xml:490
+msgid "Returns the update mode of a value track."
+msgstr ""
+
+#: doc/classes/Animation.xml:498
+msgid ""
+"Returns the interpolated value at the given time (in seconds). The "
+"[code]track_idx[/code] must be the index of a value track."
+msgstr ""
+
+#: doc/classes/Animation.xml:506
+msgid "Sets the update mode (see [enum UpdateMode]) of a value track."
+msgstr ""
+
+#: doc/classes/Animation.xml:512
+msgid ""
+"The total length of the animation (in seconds).\n"
+"[b]Note:[/b] Length is not delimited by the last key, as this one may be "
+"before or after the end to ensure correct interpolation and looping."
+msgstr ""
+
+#: doc/classes/Animation.xml:516
+msgid ""
+"A flag indicating that the animation must loop. This is used for correct "
+"interpolation of animation cycles, and for hinting the player that it must "
+"restart the animation."
+msgstr ""
+
+#: doc/classes/Animation.xml:519
+msgid "The animation step value."
+msgstr ""
+
+#: doc/classes/Animation.xml:525
+msgid ""
+"Emitted when there's a change in the list of tracks, e.g. tracks are added, "
+"moved or have changed paths."
+msgstr ""
+
+#: doc/classes/Animation.xml:531
+msgid ""
+"Value tracks set values in node properties, but only those which can be "
+"Interpolated."
+msgstr ""
+
+#: doc/classes/Animation.xml:534
+msgid ""
+"Transform tracks are used to change node local transforms or skeleton pose "
+"bones. Transitions are interpolated."
+msgstr ""
+
+#: doc/classes/Animation.xml:537
+msgid "Method tracks call functions with given arguments per key."
+msgstr ""
+
+#: doc/classes/Animation.xml:540
+msgid ""
+"Bezier tracks are used to interpolate a value using custom curves. They can "
+"also be used to animate sub-properties of vectors and colors (e.g. alpha "
+"value of a [Color])."
+msgstr ""
+
+#: doc/classes/Animation.xml:543
+msgid ""
+"Audio tracks are used to play an audio stream with either type of "
+"[AudioStreamPlayer]. The stream can be trimmed and previewed in the "
+"animation."
+msgstr ""
+
+#: doc/classes/Animation.xml:546
+msgid "Animation tracks play animations in other [AnimationPlayer] nodes."
+msgstr ""
+
+#: doc/classes/Animation.xml:549
+msgid "No interpolation (nearest value)."
+msgstr ""
+
+#: doc/classes/Animation.xml:552
+msgid "Linear interpolation."
+msgstr ""
+
+#: doc/classes/Animation.xml:555
+msgid "Cubic interpolation."
+msgstr ""
+
+#: doc/classes/Animation.xml:558
+msgid "Update between keyframes."
+msgstr ""
+
+#: doc/classes/Animation.xml:561
+msgid "Update at the keyframes and hold the value."
+msgstr ""
+
+#: doc/classes/Animation.xml:564
+msgid "Update at the keyframes."
+msgstr ""
+
+#: doc/classes/Animation.xml:567
+msgid ""
+"Same as linear interpolation, but also interpolates from the current value "
+"(i.e. dynamically at runtime) if the first key isn't at 0 seconds."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:4
+msgid "Base resource for [AnimationTree] nodes."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:7
+msgid ""
+"Base resource for [AnimationTree] nodes. In general, it's not used directly, "
+"but you can create custom ones with custom blending formulas.\n"
+"Inherit this when creating nodes mainly for use in [AnimationNodeBlendTree], "
+"otherwise [AnimationRootNode] should be used instead."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:11 doc/classes/AnimationNodeAdd2.xml:10
+#: doc/classes/AnimationNodeAdd3.xml:14
+#: doc/classes/AnimationNodeAnimation.xml:10
+#: doc/classes/AnimationNodeBlend2.xml:10
+#: doc/classes/AnimationNodeBlend3.xml:14
+#: doc/classes/AnimationNodeBlendSpace1D.xml:13
+#: doc/classes/AnimationNodeBlendSpace2D.xml:12
+#: doc/classes/AnimationNodeBlendTree.xml:10
+#: doc/classes/AnimationNodeOneShot.xml:10
+#: doc/classes/AnimationNodeOutput.xml:9
+#: doc/classes/AnimationNodeStateMachine.xml:15
+#: doc/classes/AnimationNodeStateMachinePlayback.xml:15
+#: doc/classes/AnimationNodeStateMachineTransition.xml:8
+#: doc/classes/AnimationNodeTimeScale.xml:10
+#: doc/classes/AnimationNodeTimeSeek.xml:21
+#: doc/classes/AnimationNodeTransition.xml:10 doc/classes/AnimationTree.xml:11
+#: doc/classes/AnimationTreePlayer.xml:12
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/animation/animation_tree.html"
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:18
+msgid ""
+"Adds an input to the node. This is only useful for nodes created for use in "
+"an [AnimationNodeBlendTree]."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:29
+msgid ""
+"Blend an animation by [code]blend[/code] amount (name must be valid in the "
+"linked [AnimationPlayer]). A [code]time[/code] and [code]delta[/code] may be "
+"passed, as well as whether [code]seek[/code] happened."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:41
+msgid ""
+"Blend an input. This is only useful for nodes created for an "
+"[AnimationNodeBlendTree]. The [code]time[/code] parameter is a relative "
+"delta, unless [code]seek[/code] is [code]true[/code], in which case it is "
+"absolute. A filter mode may be optionally passed (see [enum FilterAction] "
+"for options)."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:54
+msgid ""
+"Blend another animation node (in case this node contains children animation "
+"nodes). This function is only useful if you inherit from [AnimationRootNode] "
+"instead, else editors will not display your node for addition."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:60
+msgid "Gets the text caption for this node (used by some editors)."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:67
+msgid ""
+"Gets a child node by index (used by editors inheriting from "
+"[AnimationRootNode])."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:73
+msgid ""
+"Gets all children nodes in order as a [code]name: node[/code] dictionary. "
+"Only useful when inheriting [AnimationRootNode]."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:79
+msgid ""
+"Amount of inputs in this node, only useful for nodes that go into "
+"[AnimationNodeBlendTree]."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:86
+msgid "Gets the name of an input by index."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:93
+msgid ""
+"Gets the value of a parameter. Parameters are custom local memory used for "
+"your nodes, given a resource can be reused in multiple trees."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:100
+msgid ""
+"Gets the default value of a parameter. Parameters are custom local memory "
+"used for your nodes, given a resource can be reused in multiple trees."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:106
+msgid ""
+"Gets the property information for parameter. Parameters are custom local "
+"memory used for your nodes, given a resource can be reused in multiple "
+"trees. Format is similar to [method Object.get_property_list]."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:112
+msgid ""
+"Returns [code]true[/code] whether you want the blend tree editor to display "
+"filter editing on this node."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:119
+msgid "Returns [code]true[/code] whether a given path is filtered."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:127
+msgid ""
+"User-defined callback called when a custom node is processed. The "
+"[code]time[/code] parameter is a relative delta, unless [code]seek[/code] is "
+"[code]true[/code], in which case it is absolute.\n"
+"Here, call the [method blend_input], [method blend_node] or [method "
+"blend_animation] functions. You can also use [method get_parameter] and "
+"[method set_parameter] to modify local memory.\n"
+"This function should return the time left for the current animation to "
+"finish (if unsure, pass the value from the main blend being called)."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:136
+msgid "Removes an input, call this only when inactive."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:144
+msgid "Adds or removes a path for the filter."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:152
+msgid ""
+"Sets a custom parameter. These are used as local storage, because resources "
+"can be reused across the tree or scenes."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:158
+msgid "If [code]true[/code], filtering is enabled."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:164
+msgid "Called when the node was removed from the graph."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:169
+msgid ""
+"Emitted by nodes that inherit from this class and that have an internal tree "
+"when one of their nodes changes. The nodes that emit this signal are "
+"[AnimationNodeBlendSpace1D], [AnimationNodeBlendSpace2D], "
+"[AnimationNodeStateMachine], and [AnimationNodeBlendTree]."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:175
+msgid "Do not use filtering."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:178
+msgid "Paths matching the filter will be allowed to pass."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:181
+msgid "Paths matching the filter will be discarded."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:184
+msgid "Paths matching the filter will be blended (by the blend value)."
+msgstr ""
+
+#: doc/classes/AnimationNodeAdd2.xml:4
+msgid "Blends two animations additively inside of an [AnimationNodeBlendTree]."
+msgstr ""
+
+#: doc/classes/AnimationNodeAdd2.xml:7
+msgid ""
+"A resource to add to an [AnimationNodeBlendTree]. Blends two animations "
+"additively based on an amount value in the [code][0.0, 1.0][/code] range."
+msgstr ""
+
+#: doc/classes/AnimationNodeAdd2.xml:16 doc/classes/AnimationNodeAdd3.xml:21
+#: doc/classes/AnimationNodeBlend2.xml:18
+#: doc/classes/AnimationNodeBlend3.xml:20
+msgid ""
+"If [code]true[/code], sets the [code]optimization[/code] to [code]false[/"
+"code] when calling [method AnimationNode.blend_input], forcing the blended "
+"animations to update every frame."
+msgstr ""
+
+#: doc/classes/AnimationNodeAdd3.xml:4
+msgid ""
+"Blends two of three animations additively inside of an "
+"[AnimationNodeBlendTree]."
+msgstr ""
+
+#: doc/classes/AnimationNodeAdd3.xml:7
+msgid ""
+"A resource to add to an [AnimationNodeBlendTree]. Blends two animations "
+"together additively out of three based on a value in the [code][-1.0, 1.0][/"
+"code] range.\n"
+"This node has three inputs:\n"
+"- The base animation to add to\n"
+"- A -add animation to blend with when the blend amount is in the [code]"
+"[-1.0, 0.0][/code] range.\n"
+"- A +add animation to blend with when the blend amount is in the [code][0.0, "
+"1.0][/code] range"
+msgstr ""
+
+#: doc/classes/AnimationNodeAdd3.xml:15
+#: doc/classes/AnimationNodeAnimation.xml:12
+#: doc/classes/AnimationNodeBlend2.xml:12
+#: doc/classes/AnimationNodeBlendSpace2D.xml:13
+#: doc/classes/AnimationNodeOneShot.xml:11
+#: doc/classes/AnimationNodeOutput.xml:11
+#: doc/classes/AnimationNodeTransition.xml:12
+#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
+#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
+#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
+#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
+#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
+#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
+#: doc/classes/Quat.xml:13 doc/classes/Skeleton.xml:13
+#: doc/classes/SpotLight.xml:12 doc/classes/StaticBody.xml:12
+#: doc/classes/WorldEnvironment.xml:15
+msgid "https://godotengine.org/asset-library/asset/678"
+msgstr ""
+
+#: doc/classes/AnimationNodeAnimation.xml:4
+msgid "Input animation to use in an [AnimationNodeBlendTree]."
+msgstr ""
+
+#: doc/classes/AnimationNodeAnimation.xml:7
+msgid ""
+"A resource to add to an [AnimationNodeBlendTree]. Only features one output "
+"set using the [member animation] property. Use it as an input for "
+"[AnimationNode] that blend animations together."
+msgstr ""
+
+#: doc/classes/AnimationNodeAnimation.xml:11
+#: doc/classes/AnimationNodeBlend2.xml:11
+#: doc/classes/AnimationNodeOutput.xml:10
+#: doc/classes/AnimationNodeTimeScale.xml:11
+#: doc/classes/AnimationNodeTransition.xml:11 doc/classes/Area.xml:10
+#: doc/classes/Basis.xml:17 doc/classes/BoxShape.xml:12
+#: doc/classes/CollisionShape.xml:12 modules/gridmap/doc_classes/GridMap.xml:15
+#: doc/classes/KinematicBody.xml:14 doc/classes/Mesh.xml:12
+#: doc/classes/MeshInstance.xml:12 doc/classes/MeshLibrary.xml:11
+#: doc/classes/ProjectSettings.xml:14 doc/classes/Transform.xml:15
+msgid "https://godotengine.org/asset-library/asset/125"
+msgstr ""
+
+#: doc/classes/AnimationNodeAnimation.xml:18
+msgid ""
+"Animation to use as an output. It is one of the animations provided by "
+"[member AnimationTree.anim_player]."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlend2.xml:4
+msgid "Blends two animations linearly inside of an [AnimationNodeBlendTree]."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlend2.xml:7
+msgid ""
+"A resource to add to an [AnimationNodeBlendTree]. Blends two animations "
+"linearly based on an amount value in the [code][0.0, 1.0][/code] range."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlend3.xml:4
+msgid ""
+"Blends two of three animations linearly inside of an "
+"[AnimationNodeBlendTree]."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlend3.xml:7
+msgid ""
+"A resource to add to an [AnimationNodeBlendTree]. Blends two animations "
+"together linearly out of three based on a value in the [code][-1.0, 1.0][/"
+"code] range.\n"
+"This node has three inputs:\n"
+"- The base animation\n"
+"- A -blend animation to blend with when the blend amount is in the [code]"
+"[-1.0, 0.0][/code] range.\n"
+"- A +blend animation to blend with when the blend amount is in the [code]"
+"[0.0, 1.0][/code] range"
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace1D.xml:4
+msgid ""
+"Blends linearly between two of any number of [AnimationNode] of any type "
+"placed on a virtual axis."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace1D.xml:7
+msgid ""
+"A resource to add to an [AnimationNodeBlendTree].\n"
+"This is a virtual axis on which you can add any type of [AnimationNode] "
+"using [method add_blend_point].\n"
+"Outputs the linear blend of the two [AnimationNode]s closest to the node's "
+"current value.\n"
+"You can set the extents of the axis using the [member min_space] and [member "
+"max_space]."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace1D.xml:22
+msgid ""
+"Adds a new point that represents a [code]node[/code] on the virtual axis at "
+"a given position set by [code]pos[/code]. You can insert it at a specific "
+"index using the [code]at_index[/code] argument. If you use the default value "
+"for [code]at_index[/code], the point is inserted at the end of the blend "
+"points array."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace1D.xml:28
+msgid "Returns the number of points on the blend axis."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace1D.xml:35
+msgid ""
+"Returns the [AnimationNode] referenced by the point at index [code]point[/"
+"code]."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace1D.xml:42
+#: doc/classes/AnimationNodeBlendSpace2D.xml:52
+msgid "Returns the position of the point at index [code]point[/code]."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace1D.xml:49
+msgid "Removes the point at index [code]point[/code] from the blend axis."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace1D.xml:57
+#: doc/classes/AnimationNodeBlendSpace2D.xml:88
+msgid ""
+"Changes the [AnimationNode] referenced by the point at index [code]point[/"
+"code]."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace1D.xml:65
+#: doc/classes/AnimationNodeBlendSpace2D.xml:96
+msgid ""
+"Updates the position of the point at index [code]point[/code] on the blend "
+"axis."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace1D.xml:71
+msgid ""
+"The blend space's axis's upper limit for the points' position. See [method "
+"add_blend_point]."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace1D.xml:74
+msgid ""
+"The blend space's axis's lower limit for the points' position. See [method "
+"add_blend_point]."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace1D.xml:77
+msgid "Position increment to snap to when moving a point on the axis."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace1D.xml:80
+msgid "Label of the virtual axis of the blend space."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace2D.xml:4
+msgid ""
+"Blends linearly between three [AnimationNode] of any type placed in a 2D "
+"space."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace2D.xml:7
+msgid ""
+"A resource to add to an [AnimationNodeBlendTree].\n"
+"This node allows you to blend linearly between three animations using a "
+"[Vector2] weight.\n"
+"You can add vertices to the blend space with [method add_blend_point] and "
+"automatically triangulate it by setting [member auto_triangles] to "
+"[code]true[/code]. Otherwise, use [method add_triangle] and [method "
+"remove_triangle] to create up the blend space by hand."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace2D.xml:22
+msgid ""
+"Adds a new point that represents a [code]node[/code] at the position set by "
+"[code]pos[/code]. You can insert it at a specific index using the "
+"[code]at_index[/code] argument. If you use the default value for "
+"[code]at_index[/code], the point is inserted at the end of the blend points "
+"array."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace2D.xml:32
+msgid ""
+"Creates a new triangle using three points [code]x[/code], [code]y[/code], "
+"and [code]z[/code]. Triangles can overlap. You can insert the triangle at a "
+"specific index using the [code]at_index[/code] argument. If you use the "
+"default value for [code]at_index[/code], the point is inserted at the end of "
+"the blend points array."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace2D.xml:38
+msgid "Returns the number of points in the blend space."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace2D.xml:45
+msgid ""
+"Returns the [AnimationRootNode] referenced by the point at index "
+"[code]point[/code]."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace2D.xml:58
+msgid "Returns the number of triangles in the blend space."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace2D.xml:66
+msgid ""
+"Returns the position of the point at index [code]point[/code] in the "
+"triangle of index [code]triangle[/code]."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace2D.xml:73
+msgid "Removes the point at index [code]point[/code] from the blend space."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace2D.xml:80
+msgid ""
+"Removes the triangle at index [code]triangle[/code] from the blend space."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace2D.xml:102
+msgid ""
+"If [code]true[/code], the blend space is triangulated automatically. The "
+"mesh updates every time you add or remove points with [method "
+"add_blend_point] and [method remove_blend_point]."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace2D.xml:105
+msgid ""
+"Controls the interpolation between animations. See [enum BlendMode] "
+"constants."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace2D.xml:108
+msgid ""
+"The blend space's X and Y axes' upper limit for the points' position. See "
+"[method add_blend_point]."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace2D.xml:111
+msgid ""
+"The blend space's X and Y axes' lower limit for the points' position. See "
+"[method add_blend_point]."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace2D.xml:114
+msgid "Position increment to snap to when moving a point."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace2D.xml:117
+msgid "Name of the blend space's X axis."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace2D.xml:120
+msgid "Name of the blend space's Y axis."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace2D.xml:126
+msgid ""
+"Emitted every time the blend space's triangles are created, removed, or when "
+"one of their vertices changes position."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace2D.xml:132
+msgid "The interpolation between animations is linear."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace2D.xml:135
+msgid ""
+"The blend space plays the animation of the node the blending position is "
+"closest to. Useful for frame-by-frame 2D animations."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace2D.xml:138
+msgid ""
+"Similar to [constant BLEND_MODE_DISCRETE], but starts the new animation at "
+"the last animation's playback position."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendTree.xml:4
+msgid "[AnimationTree] node resource that contains many blend type nodes."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendTree.xml:7
+msgid ""
+"This node may contain a sub-tree of any other blend type nodes, such as mix, "
+"blend2, blend3, one shot, etc. This is one of the most commonly used roots."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendTree.xml:19
+msgid ""
+"Adds an [AnimationNode] at the given [code]position[/code]. The [code]name[/"
+"code] is used to identify the created sub-node later."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendTree.xml:28
+msgid ""
+"Connects the output of an [AnimationNode] as input for another "
+"[AnimationNode], at the input port specified by [code]input_index[/code]."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendTree.xml:36
+msgid "Disconnects the node connected to the specified input."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendTree.xml:43
+msgid "Returns the sub-node with the specified [code]name[/code]."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendTree.xml:50
+msgid ""
+"Returns the position of the sub-node with the specified [code]name[/code]."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendTree.xml:57
+msgid ""
+"Returns [code]true[/code] if a sub-node with specified [code]name[/code] "
+"exists."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendTree.xml:64
+msgid "Removes a sub-node."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendTree.xml:72
+msgid "Changes the name of a sub-node."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendTree.xml:80
+msgid "Modifies the position of a sub-node."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendTree.xml:86
+msgid "The global offset of all sub-nodes."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendTree.xml:91
+msgid "The connection was successful."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendTree.xml:94
+msgid "The input node is [code]null[/code]."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendTree.xml:97
+msgid "The specified input port is out of range."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendTree.xml:100
+msgid "The output node is [code]null[/code]."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendTree.xml:103
+msgid "Input and output nodes are the same."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendTree.xml:106
+msgid "The specified connection already exists."
+msgstr ""
+
+#: doc/classes/AnimationNodeOneShot.xml:4
+msgid "Plays an animation once in [AnimationNodeBlendTree]."
+msgstr ""
+
+#: doc/classes/AnimationNodeOneShot.xml:7
+msgid ""
+"A resource to add to an [AnimationNodeBlendTree]. This node will execute a "
+"sub-animation and return once it finishes. Blend times for fading in and out "
+"can be customized, as well as filters."
+msgstr ""
+
+#: doc/classes/AnimationNodeOneShot.xml:28
+msgid ""
+"If [code]true[/code], the sub-animation will restart automatically after "
+"finishing."
+msgstr ""
+
+#: doc/classes/AnimationNodeOneShot.xml:31
+msgid "The delay after which the automatic restart is triggered, in seconds."
+msgstr ""
+
+#: doc/classes/AnimationNodeOneShot.xml:34
+msgid ""
+"If [member autorestart] is [code]true[/code], a random additional delay (in "
+"seconds) between 0 and this value will be added to [member "
+"autorestart_delay]."
+msgstr ""
+
+#: doc/classes/AnimationNodeOutput.xml:4
+msgid "Generic output node to be added to [AnimationNodeBlendTree]."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:4
+msgid "State machine for control of animations."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:7
+msgid ""
+"Contains multiple nodes representing animation states, connected in a graph. "
+"Node transitions can be configured to happen automatically or via code, "
+"using a shortest-path algorithm. Retrieve the "
+"[AnimationNodeStateMachinePlayback] object from the [AnimationTree] node to "
+"control it programmatically.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"var state_machine = $AnimationTree.get(\"parameters/playback\")\n"
+"state_machine.travel(\"some_state\")\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:24
+msgid ""
+"Adds a new node to the graph. The [code]position[/code] is used for display "
+"in the editor."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:33
+msgid "Adds a transition between the given nodes."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:39
+#: doc/classes/AnimationNodeStateMachine.xml:72
+msgid "Returns the graph's end node."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:45
+msgid "Returns the draw offset of the graph. Used for display in the editor."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:52
+msgid "Returns the animation node with the given name."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:59
+msgid "Returns the given animation node's name."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:66
+msgid "Returns the given node's coordinates. Used for display in the editor."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:79
+msgid "Returns the given transition."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:85
+msgid "Returns the number of connections in the graph."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:92
+msgid "Returns the given transition's start node."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:99
+msgid "Returns the given transition's end node."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:106
+msgid "Returns [code]true[/code] if the graph contains the given node."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:114
+msgid ""
+"Returns [code]true[/code] if there is a transition between the given nodes."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:121
+msgid "Deletes the given node from the graph."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:129
+msgid "Deletes the transition between the two specified nodes."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:136
+msgid "Deletes the given transition by index."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:144
+msgid "Renames the given node."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:152
+msgid "Replaces the node and keeps its transitions unchanged."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:159
+msgid "Sets the given node as the graph end point."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:166
+msgid "Sets the draw offset of the graph. Used for display in the editor."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:174
+msgid "Sets the node's coordinates. Used for display in the editor."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:181
+msgid "Sets the given node as the graph start point."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachinePlayback.xml:4
+msgid "Playback control for [AnimationNodeStateMachine]."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachinePlayback.xml:7
+msgid ""
+"Allows control of [AnimationTree] state machines created with "
+"[AnimationNodeStateMachine]. Retrieve with [code]$AnimationTree."
+"get(\"parameters/playback\")[/code].\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"var state_machine = $AnimationTree.get(\"parameters/playback\")\n"
+"state_machine.travel(\"some_state\")\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachinePlayback.xml:26
+msgid "Returns the currently playing animation state."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachinePlayback.xml:32
+msgid "Returns the playback position within the current animation state."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachinePlayback.xml:38
+msgid ""
+"Returns the current travel path as computed internally by the A* algorithm."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachinePlayback.xml:44
+msgid "Returns [code]true[/code] if an animation is playing."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachinePlayback.xml:51
+msgid "Starts playing the given animation."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachinePlayback.xml:57
+msgid "Stops the currently playing animation."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachinePlayback.xml:64
+msgid ""
+"Transitions from the current state to another one, following the shortest "
+"path."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachineTransition.xml:14
+msgid ""
+"Turn on auto advance when this condition is set. The provided name will "
+"become a boolean parameter on the [AnimationTree] that can be controlled "
+"from code (see [url=https://docs.godotengine.org/en/3.4/tutorials/animation/"
+"animation_tree.html#controlling-from-code][/url]). For example, if [member "
+"AnimationTree.tree_root] is an [AnimationNodeStateMachine] and [member "
+"advance_condition] is set to [code]\"idle\"[/code]:\n"
+"[codeblock]\n"
+"$animation_tree[\"parameters/conditions/idle\"] = is_on_floor and "
+"(linear_velocity.x == 0)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachineTransition.xml:20
+msgid ""
+"Turn on the transition automatically when this state is reached. This works "
+"best with [constant SWITCH_MODE_AT_END]."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachineTransition.xml:23
+msgid ""
+"Don't use this transition during [method AnimationNodeStateMachinePlayback."
+"travel] or [member auto_advance]."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachineTransition.xml:26
+msgid ""
+"Lower priority transitions are preferred when travelling through the tree "
+"via [method AnimationNodeStateMachinePlayback.travel] or [member "
+"auto_advance]."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachineTransition.xml:29
+msgid "The transition type."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachineTransition.xml:32
+msgid "The time to cross-fade between this state and the next."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachineTransition.xml:38
+msgid "Emitted when [member advance_condition] is changed."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachineTransition.xml:44
+msgid ""
+"Switch to the next state immediately. The current state will end and blend "
+"into the beginning of the new one."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachineTransition.xml:47
+msgid ""
+"Switch to the next state immediately, but will seek the new state to the "
+"playback position of the old state."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachineTransition.xml:50
+msgid ""
+"Wait for the current state playback to end, then switch to the beginning of "
+"the next state animation."
+msgstr ""
+
+#: doc/classes/AnimationNodeTimeScale.xml:4
+msgid "A time-scaling animation node to be used with [AnimationTree]."
+msgstr ""
+
+#: doc/classes/AnimationNodeTimeScale.xml:7
+msgid ""
+"Allows scaling the speed of the animation (or reversing it) in any children "
+"nodes. Setting it to 0 will pause the animation."
+msgstr ""
+
+#: doc/classes/AnimationNodeTimeSeek.xml:4
+msgid "A time-seeking animation node to be used with [AnimationTree]."
+msgstr ""
+
+#: doc/classes/AnimationNodeTimeSeek.xml:7
+msgid ""
+"This node can be used to cause a seek command to happen to any sub-children "
+"of the animation graph. Use this node type to play an [Animation] from the "
+"start or a certain playback position inside the [AnimationNodeBlendTree]. "
+"After setting the time and changing the animation playback, the seek node "
+"automatically goes into sleep mode on the next process frame by setting its "
+"[code]seek_position[/code] value to [code]-1.0[/code].\n"
+"[codeblock]\n"
+"# Play child animation from the start.\n"
+"animation_tree.set(\"parameters/Seek/seek_position\", 0.0)\n"
+"# Alternative syntax (same result as above).\n"
+"animation_tree[\"parameters/Seek/seek_position\"] = 0.0\n"
+"\n"
+"# Play child animation from 12 second timestamp.\n"
+"animation_tree.set(\"parameters/Seek/seek_position\", 12.0)\n"
+"# Alternative syntax (same result as above).\n"
+"animation_tree[\"parameters/Seek/seek_position\"] = 12.0\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/AnimationNodeTransition.xml:4
+msgid "A generic animation transition node for [AnimationTree]."
+msgstr ""
+
+#: doc/classes/AnimationNodeTransition.xml:7
+msgid ""
+"Simple state machine for cases which don't require a more advanced "
+"[AnimationNodeStateMachine]. Animations can be connected to the inputs and "
+"transition times can be specified."
+msgstr ""
+
+#: doc/classes/AnimationNodeTransition.xml:44
+msgid "The number of available input ports for this node."
+msgstr ""
+
+#: doc/classes/AnimationNodeTransition.xml:47
+msgid ""
+"Cross-fading time (in seconds) between each animation connected to the "
+"inputs."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:4
+msgid "Container and player of [Animation] resources."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:7
+msgid ""
+"An animation player is used for general-purpose playback of [Animation] "
+"resources. It contains a dictionary of animations (referenced by name) and "
+"custom blend times between their transitions. Additionally, animations can "
+"be played and blended in different channels.\n"
+"[AnimationPlayer] is more suited than [Tween] for animations where you know "
+"the final values in advance. For example, fading a screen in and out is more "
+"easily done with an [AnimationPlayer] node thanks to the animation tools "
+"provided by the editor. That particular example can also be implemented with "
+"a [Tween] node, but it requires doing everything by code.\n"
+"Updating the target properties of animations occurs at process time."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:22
+msgid ""
+"Adds [code]animation[/code] to the player accessible with the key "
+"[code]name[/code]."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:29
+msgid ""
+"Shifts position in the animation timeline and immediately updates the "
+"animation. [code]delta[/code] is the time in seconds to shift. Events "
+"between the current frame and [code]delta[/code] are handled."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:36
+msgid "Returns the name of the next animation in the queue."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:44
+msgid ""
+"Triggers the [code]anim_to[/code] animation when the [code]anim_from[/code] "
+"animation completes."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:50
+msgid ""
+"[AnimationPlayer] caches animated nodes. It may not notice if a node "
+"disappears; [method clear_caches] forces it to update the cache again."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:56
+msgid "Clears all queued, unplayed animations."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:63
+msgid ""
+"Returns the name of [code]animation[/code] or an empty string if not found."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:70
+msgid ""
+"Returns the [Animation] with key [code]name[/code] or [code]null[/code] if "
+"not found."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:76
+msgid "Returns the list of stored animation names."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:84
+msgid ""
+"Gets the blend time (in seconds) between two animations, referenced by their "
+"names."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:90
+msgid ""
+"Gets the actual playing speed of current animation or 0 if not playing. This "
+"speed is the [member playback_speed] property multiplied by "
+"[code]custom_speed[/code] argument specified when calling the [method play] "
+"method."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:96
+msgid ""
+"Returns a list of the animation names that are currently queued to play."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:103
+msgid ""
+"Returns [code]true[/code] if the [AnimationPlayer] stores an [Animation] "
+"with key [code]name[/code]."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:109
+msgid "Returns [code]true[/code] if playing an animation."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:119
+msgid ""
+"Plays the animation with key [code]name[/code]. Custom blend times and speed "
+"can be set. If [code]custom_speed[/code] is negative and [code]from_end[/"
+"code] is [code]true[/code], the animation will play backwards (which is "
+"equivalent to calling [method play_backwards]).\n"
+"The [AnimationPlayer] keeps track of its current or last played animation "
+"with [member assigned_animation]. If this method is called with that same "
+"animation [code]name[/code], or with no [code]name[/code] parameter, the "
+"assigned animation will resume playing if it was paused, or restart if it "
+"was stopped (see [method stop] for both pause and stop). If the animation "
+"was already playing, it will keep playing.\n"
+"[b]Note:[/b] The animation will be updated the next time the "
+"[AnimationPlayer] is processed. If other variables are updated at the same "
+"time this is called, they may be updated too early. To perform the update "
+"immediately, call [code]advance(0)[/code]."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:129
+msgid ""
+"Plays the animation with key [code]name[/code] in reverse.\n"
+"This method is a shorthand for [method play] with [code]custom_speed = -1.0[/"
+"code] and [code]from_end = true[/code], so see its description for more "
+"information."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:137
+msgid ""
+"Queues an animation for playback once the current one is done.\n"
+"[b]Note:[/b] If a looped animation is currently playing, the queued "
+"animation will never play unless the looped animation is stopped somehow."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:145
+msgid "Removes the animation with key [code]name[/code]."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:153
+msgid ""
+"Renames an existing animation with key [code]name[/code] to [code]newname[/"
+"code]."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:161
+msgid ""
+"Seeks the animation to the [code]seconds[/code] point in time (in seconds). "
+"If [code]update[/code] is [code]true[/code], the animation updates too, "
+"otherwise it updates at process time. Events between the current frame and "
+"[code]seconds[/code] are skipped."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:170
+msgid ""
+"Specifies a blend time (in seconds) between two animations, referenced by "
+"their names."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:177
+msgid ""
+"Stops or pauses the currently playing animation. If [code]reset[/code] is "
+"[code]true[/code], the animation position is reset to [code]0[/code] and the "
+"playback speed is reset to [code]1.0[/code].\n"
+"If [code]reset[/code] is [code]false[/code], the [member "
+"current_animation_position] will be kept and calling [method play] or "
+"[method play_backwards] without arguments or with the same animation name as "
+"[member assigned_animation] will resume the animation."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:184
+msgid ""
+"If playing, the current animation; otherwise, the animation last played. "
+"When set, would change the animation, but would not play it unless currently "
+"playing. See also [member current_animation]."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:187
+msgid "The name of the animation to play when the scene loads."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:190
+msgid ""
+"The name of the currently playing animation. If no animation is playing, the "
+"property's value is an empty string. Changing this value does not restart "
+"the animation. See [method play] for more information on playing "
+"animations.\n"
+"[b]Note:[/b] While this property appears in the inspector, it's not meant to "
+"be edited, and it's not saved in the scene. This property is mainly used to "
+"get the currently playing animation, and internally for animation playback "
+"tracks. For more information, see [Animation]."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:194
+msgid "The length (in seconds) of the currently being played animation."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:197
+msgid "The position (in seconds) of the currently playing animation."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:200
+msgid "The call mode to use for Call Method tracks."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:203
+msgid ""
+"If [code]true[/code], updates animations in response to process-related "
+"notifications."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:206
+msgid ""
+"The default time in which to blend animations. Ranges from 0 to 4096 with "
+"0.01 precision."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:209
+msgid "The process notification in which to update animations."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:212
+msgid ""
+"The speed scaling ratio. For instance, if this value is 1, then the "
+"animation plays at normal speed. If it's 0.5, then it plays at half speed. "
+"If it's 2, then it plays at double speed."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:215
+msgid ""
+"This is used by the editor. If set to [code]true[/code], the scene will be "
+"saved with the effects of the reset animation applied (as if it had been "
+"seeked to time 0), then reverted after saving.\n"
+"In other words, the saved scene file will contain the \"default pose\", as "
+"defined by the reset animation, if any, with the editor keeping the values "
+"that the nodes had before saving."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:219
+msgid "The node from which node path references will travel."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:227
+msgid ""
+"Emitted when a queued animation plays after the previous animation was "
+"finished. See [method queue].\n"
+"[b]Note:[/b] The signal is not emitted when the animation is changed via "
+"[method play] or from [AnimationTree]."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:234
+msgid "Notifies when an animation finished playing."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:240
+msgid "Notifies when an animation starts playing."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:245
+msgid ""
+"Notifies when the caches have been cleared, either automatically, or "
+"manually via [method clear_caches]."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:251 doc/classes/AnimationTreePlayer.xml:505
+msgid ""
+"Process animation during the physics process. This is especially useful when "
+"animating physics bodies."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:254 doc/classes/AnimationTreePlayer.xml:508
+msgid "Process animation during the idle process."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:257
+msgid ""
+"Do not process animation. Use [method advance] to process the animation "
+"manually."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:260
+msgid ""
+"Batch method calls during the animation process, then do the calls after "
+"events are processed. This avoids bugs involving deleting nodes or modifying "
+"the AnimationPlayer while playing."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:263
+msgid "Make method calls immediately when reached in the animation."
+msgstr ""
+
+#: doc/classes/AnimationTree.xml:4
+msgid ""
+"A node to be used for advanced animation transitions in an [AnimationPlayer]."
+msgstr ""
+
+#: doc/classes/AnimationTree.xml:7
+msgid ""
+"A node to be used for advanced animation transitions in an "
+"[AnimationPlayer].\n"
+"[b]Note:[/b] When linked with an [AnimationPlayer], several properties and "
+"methods of the corresponding [AnimationPlayer] will not function as "
+"expected. Playback and transitions should be handled using only the "
+"[AnimationTree] and its constituent [AnimationNode](s). The "
+"[AnimationPlayer] node should be used solely for adding, deleting, and "
+"editing animations."
+msgstr ""
+
+#: doc/classes/AnimationTree.xml:19
+msgid "Manually advance the animations by the specified time (in seconds)."
+msgstr ""
+
+#: doc/classes/AnimationTree.xml:25
+msgid ""
+"Retrieve the motion of the [member root_motion_track] as a [Transform] that "
+"can be used elsewhere. If [member root_motion_track] is not a path to a "
+"track of type [constant Animation.TYPE_TRANSFORM], returns an identity "
+"transformation. See also [member root_motion_track] and [RootMotionView]."
+msgstr ""
+
+#: doc/classes/AnimationTree.xml:38
+msgid "If [code]true[/code], the [AnimationTree] will be processing."
+msgstr ""
+
+#: doc/classes/AnimationTree.xml:41
+msgid "The path to the [AnimationPlayer] used for animating."
+msgstr ""
+
+#: doc/classes/AnimationTree.xml:44
+msgid ""
+"The process mode of this [AnimationTree]. See [enum AnimationProcessMode] "
+"for available modes."
+msgstr ""
+
+#: doc/classes/AnimationTree.xml:47
+msgid ""
+"The path to the Animation track used for root motion. Paths must be valid "
+"scene-tree paths to a node, and must be specified starting from the parent "
+"node of the node that will reproduce the animation. To specify a track that "
+"controls properties or bones, append its name after the path, separated by "
+"[code]\":\"[/code]. For example, [code]\"character/skeleton:ankle\"[/code] "
+"or [code]\"character/mesh:transform/local\"[/code].\n"
+"If the track has type [constant Animation.TYPE_TRANSFORM], the "
+"transformation will be cancelled visually, and the animation will appear to "
+"stay in place. See also [method get_root_motion_transform] and "
+"[RootMotionView]."
+msgstr ""
+
+#: doc/classes/AnimationTree.xml:51
+msgid "The root animation node of this [AnimationTree]. See [AnimationNode]."
+msgstr ""
+
+#: doc/classes/AnimationTree.xml:56
+msgid ""
+"The animations will progress during the physics frame (i.e. [method Node."
+"_physics_process])."
+msgstr ""
+
+#: doc/classes/AnimationTree.xml:59
+msgid ""
+"The animations will progress during the idle frame (i.e. [method Node."
+"_process])."
+msgstr ""
+
+#: doc/classes/AnimationTree.xml:62
+msgid "The animations will only progress manually (see [method advance])."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:4
+msgid ""
+"[i]Deprecated.[/i] Animation player that uses a node graph for blending "
+"animations. Superseded by [AnimationTree]."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:7
+msgid ""
+"[i]Deprecated.[/i] A node graph tool for blending multiple animations bound "
+"to an [AnimationPlayer]. Especially useful for animating characters or other "
+"skeleton-based rigs. It can combine several animations to form a desired "
+"pose.\n"
+"It takes [Animation]s from an [AnimationPlayer] node and mixes them "
+"depending on the graph.\n"
+"See [AnimationTree] for a more full-featured replacement of this node."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:20
+msgid "Adds a [code]type[/code] node to the graph with name [code]id[/code]."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:27
+msgid ""
+"Shifts position in the animation timeline. [code]delta[/code] is the time in "
+"seconds to shift. Events between the current frame and [code]delta[/code] "
+"are handled."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:34
+msgid ""
+"Returns the [AnimationPlayer]'s [Animation] bound to the "
+"[AnimationTreePlayer]'s animation node with name [code]id[/code]."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:41
+msgid ""
+"Returns the name of the [member master_player]'s [Animation] bound to this "
+"animation node."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:48
+msgid ""
+"Returns the absolute playback timestamp of the animation node with name "
+"[code]id[/code]."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:56
+msgid ""
+"Binds a new [Animation] from the [member master_player] to the "
+"[AnimationTreePlayer]'s animation node with name [code]id[/code]."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:65
+msgid ""
+"If [code]enable[/code] is [code]true[/code], the animation node with ID "
+"[code]id[/code] turns off the track modifying the property at [code]path[/"
+"code]. The modified node's children continue to animate."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:73
+msgid ""
+"Binds the [Animation] named [code]source[/code] from [member master_player] "
+"to the animation node [code]id[/code]. Recalculates caches."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:82
+msgid ""
+"Returns whether node [code]id[/code] and [code]dst_id[/code] are connected "
+"at the specified slot."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:89
+msgid "Returns the blend amount of a Blend2 node given its name."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:97
+msgid ""
+"Sets the blend amount of a Blend2 node given its name and value.\n"
+"A Blend2 node blends two animations (A and B) with the amount between 0 and "
+"1.\n"
+"At 0, output is input A. Towards 1, the influence of A gets lessened, the "
+"influence of B gets raised. At 1, output is input B."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:108
+msgid ""
+"If [code]enable[/code] is [code]true[/code], the Blend2 node with name "
+"[code]id[/code] turns off the track modifying the property at [code]path[/"
+"code]. The modified node's children continue to animate."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:115
+msgid "Returns the blend amount of a Blend3 node given its name."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:123
+msgid ""
+"Sets the blend amount of a Blend3 node given its name and value.\n"
+"A Blend3 Node blends three animations (A, B-, B+) with the amount between -1 "
+"and 1.\n"
+"At -1, output is input B-. From -1 to 0, the influence of B- gets lessened, "
+"the influence of A gets raised and the influence of B+ is 0. At 0, output is "
+"input A. From 0 to 1, the influence of A gets lessened, the influence of B+ "
+"gets raised and the influence of B+ is 0. At 1, output is input B+."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:132
+msgid "Returns the blend amount of a Blend4 node given its name."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:140
+msgid ""
+"Sets the blend amount of a Blend4 node given its name and value.\n"
+"A Blend4 Node blends two pairs of animations.\n"
+"The two pairs are blended like Blend2 and then added together."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:151
+msgid ""
+"Connects node [code]id[/code] to [code]dst_id[/code] at the specified input "
+"slot."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:159
+msgid ""
+"Disconnects nodes connected to [code]id[/code] at the specified input slot."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:165
+msgid "Returns a [PoolStringArray] containing the name of all nodes."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:172
+msgid "Returns the mix amount of a Mix node given its name."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:180
+msgid ""
+"Sets the mix amount of a Mix node given its name and value.\n"
+"A Mix node adds input b to input a by the amount given by ratio."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:188
+msgid "Check if a node exists (by name)."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:195
+msgid ""
+"Returns the input count for a given node. Different types of nodes have "
+"different amount of inputs."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:203
+msgid "Returns the input source for a given node input."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:210
+msgid "Returns position of a node in the graph given its name."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:217
+msgid "Gets the node type, will return from [enum NodeType] enum."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:225
+msgid "Renames a node in the graph."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:233
+msgid "Sets the position of a node in the graph given its name and position."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:240
+msgid "Returns the autostart delay of a OneShot node given its name."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:247
+msgid "Returns the autostart random delay of a OneShot node given its name."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:254
+msgid "Returns the fade in time of a OneShot node given its name."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:261
+msgid "Returns the fade out time of a OneShot node given its name."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:268
+msgid "Returns whether a OneShot node will auto restart given its name."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:275
+msgid "Returns whether a OneShot node is active given its name."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:283
+msgid ""
+"Sets the autorestart property of a OneShot node given its name and value."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:291
+msgid ""
+"Sets the autorestart delay of a OneShot node given its name and value in "
+"seconds."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:299
+msgid ""
+"Sets the autorestart random delay of a OneShot node given its name and value "
+"in seconds."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:307
+msgid ""
+"Sets the fade in time of a OneShot node given its name and value in seconds."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:315
+msgid ""
+"Sets the fade out time of a OneShot node given its name and value in seconds."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:324
+msgid ""
+"If [code]enable[/code] is [code]true[/code], the OneShot node with ID "
+"[code]id[/code] turns off the track modifying the property at [code]path[/"
+"code]. The modified node's children continue to animate."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:331
+msgid "Starts a OneShot node given its name."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:338
+msgid "Stops the OneShot node with name [code]id[/code]."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:344
+msgid ""
+"Manually recalculates the cache of track information generated from "
+"animation nodes. Needed when external sources modify the animation nodes' "
+"state."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:351
+msgid "Removes the animation node with name [code]id[/code]."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:357
+msgid "Resets this [AnimationTreePlayer]."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:364
+msgid ""
+"Returns the time scale value of the TimeScale node with name [code]id[/code]."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:372
+msgid ""
+"Sets the time scale of the TimeScale node with name [code]id[/code] to "
+"[code]scale[/code].\n"
+"The TimeScale node is used to speed [Animation]s up if the scale is above 1 "
+"or slow them down if it is below 1.\n"
+"If applied after a blend or mix, affects all input animations to that blend "
+"or mix."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:382
+msgid ""
+"Sets the time seek value of the TimeSeek node with name [code]id[/code] to "
+"[code]seconds[/code].\n"
+"This functions as a seek in the [Animation] or the blend or mix of "
+"[Animation]s input in it."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:391
+msgid ""
+"Deletes the input at [code]input_idx[/code] for the transition node with "
+"name [code]id[/code]."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:398
+msgid ""
+"Returns the index of the currently evaluated input for the transition node "
+"with name [code]id[/code]."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:405
+msgid ""
+"Returns the number of inputs for the transition node with name [code]id[/"
+"code]. You can add inputs by right-clicking on the transition node."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:412
+msgid ""
+"Returns the cross fade time for the transition node with name [code]id[/"
+"code]."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:420
+msgid ""
+"Returns [code]true[/code] if the input at [code]input_idx[/code] on the "
+"transition node with name [code]id[/code] is set to automatically advance to "
+"the next input upon completion."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:428
+msgid ""
+"The transition node with name [code]id[/code] sets its current input at "
+"[code]input_idx[/code]."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:437
+msgid ""
+"The transition node with name [code]id[/code] advances to its next input "
+"automatically when the input at [code]input_idx[/code] completes."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:445
+msgid ""
+"Resizes the number of inputs available for the transition node with name "
+"[code]id[/code]."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:453
+msgid ""
+"The transition node with name [code]id[/code] sets its cross fade time to "
+"[code]time_sec[/code]."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:459
+msgid ""
+"If [code]true[/code], the [AnimationTreePlayer] is able to play animations."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:462
+msgid ""
+"The node from which to relatively access other nodes.\n"
+"It accesses the bones, so it should point to the same node the "
+"[AnimationPlayer] would point its Root Node at."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:466
+msgid ""
+"The path to the [AnimationPlayer] from which this [AnimationTreePlayer] "
+"binds animations to animation nodes.\n"
+"Once set, [Animation] nodes can be added to the [AnimationTreePlayer]."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:470
+msgid "The thread in which to update animations."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:475
+msgid "Output node."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:478
+msgid "Animation node."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:481
+msgid "OneShot node."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:484
+msgid "Mix node."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:487
+msgid "Blend2 node."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:490
+msgid "Blend3 node."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:493
+msgid "Blend4 node."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:496
+msgid "TimeScale node."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:499
+msgid "TimeSeek node."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:502
+msgid "Transition node."
+msgstr ""
+
+#: doc/classes/Area.xml:4
+msgid "3D area for detection and physics and audio influence."
+msgstr ""
+
+#: doc/classes/Area.xml:7
+msgid ""
+"3D area that detects [CollisionObject] nodes overlapping, entering, or "
+"exiting. Can also alter or override local physics parameters (gravity, "
+"damping) and route audio to custom audio buses."
+msgstr ""
+
+#: doc/classes/Area.xml:11 doc/classes/QuadMesh.xml:10
+#: doc/classes/Viewport.xml:17 doc/classes/ViewportTexture.xml:11
+msgid "https://godotengine.org/asset-library/asset/127"
+msgstr ""
+
+#: doc/classes/Area.xml:17
+msgid ""
+"Returns a list of intersecting [Area]s. The overlapping area's [member "
+"CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
+msgstr ""
+
+#: doc/classes/Area.xml:24
+msgid ""
+"Returns a list of intersecting [PhysicsBody]s. The overlapping body's "
+"[member CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
+msgstr ""
+
+#: doc/classes/Area.xml:32
+msgid ""
+"If [code]true[/code], the given area overlaps the Area.\n"
+"[b]Note:[/b] The result of this test is not immediate after moving objects. "
+"For performance, list of overlaps is updated once per frame and before the "
+"physics step. Consider using signals instead."
+msgstr ""
+
+#: doc/classes/Area.xml:40
+msgid ""
+"If [code]true[/code], the given physics body overlaps the Area.\n"
+"[b]Note:[/b] The result of this test is not immediate after moving objects. "
+"For performance, list of overlaps is updated once per frame and before the "
+"physics step. Consider using signals instead.\n"
+"The [code]body[/code] argument can either be a [PhysicsBody] or a [GridMap] "
+"instance (while GridMaps are not physics body themselves, they register "
+"their tiles with collision shapes as a virtual physics body)."
+msgstr ""
+
+#: doc/classes/Area.xml:48
+msgid ""
+"The rate at which objects stop spinning in this area. Represents the angular "
+"velocity lost per second.\n"
+"See [member ProjectSettings.physics/3d/default_angular_damp] for more "
+"details about damping."
+msgstr ""
+
+#: doc/classes/Area.xml:52 doc/classes/Area2D.xml:54
+msgid "The name of the area's audio bus."
+msgstr ""
+
+#: doc/classes/Area.xml:55 doc/classes/Area2D.xml:57
+msgid ""
+"If [code]true[/code], the area's audio bus overrides the default audio bus."
+msgstr ""
+
+#: doc/classes/Area.xml:58
+msgid ""
+"The area's gravity intensity (in meters per second squared). This value "
+"multiplies the gravity vector. This is useful to alter the force of gravity "
+"without altering its direction."
+msgstr ""
+
+#: doc/classes/Area.xml:61 doc/classes/Area2D.xml:63
+msgid ""
+"The falloff factor for point gravity. The greater the value, the faster "
+"gravity decreases with distance."
+msgstr ""
+
+#: doc/classes/Area.xml:64 doc/classes/Area2D.xml:66
+msgid ""
+"If [code]true[/code], gravity is calculated from a point (set via [member "
+"gravity_vec]). See also [member space_override]."
+msgstr ""
+
+#: doc/classes/Area.xml:67 doc/classes/Area2D.xml:69
+msgid ""
+"The area's gravity vector (not normalized). If gravity is a point (see "
+"[member gravity_point]), this will be the point of attraction."
+msgstr ""
+
+#: doc/classes/Area.xml:70
+msgid ""
+"The rate at which objects stop moving in this area. Represents the linear "
+"velocity lost per second.\n"
+"See [member ProjectSettings.physics/3d/default_linear_damp] for more details "
+"about damping."
+msgstr ""
+
+#: doc/classes/Area.xml:74 doc/classes/Area2D.xml:76
+msgid "If [code]true[/code], other monitoring areas can detect this area."
+msgstr ""
+
+#: doc/classes/Area.xml:77 doc/classes/Area2D.xml:79
+msgid ""
+"If [code]true[/code], the area detects bodies or areas entering and exiting "
+"it."
+msgstr ""
+
+#: doc/classes/Area.xml:80 doc/classes/Area2D.xml:82
+msgid "The area's priority. Higher priority areas are processed first."
+msgstr ""
+
+#: doc/classes/Area.xml:83
+msgid ""
+"The degree to which this area applies reverb to its associated audio. Ranges "
+"from [code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
+msgstr ""
+
+#: doc/classes/Area.xml:86
+msgid "If [code]true[/code], the area applies reverb to its associated audio."
+msgstr ""
+
+#: doc/classes/Area.xml:89
+msgid "The reverb bus name to use for this area's associated audio."
+msgstr ""
+
+#: doc/classes/Area.xml:92
+msgid ""
+"The degree to which this area's reverb is a uniform effect. Ranges from "
+"[code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
+msgstr ""
+
+#: doc/classes/Area.xml:95 doc/classes/Area2D.xml:85
+msgid ""
+"Override mode for gravity and damping calculations within this area. See "
+"[enum SpaceOverride] for possible values."
+msgstr ""
+
+#: doc/classes/Area.xml:102
+msgid ""
+"Emitted when another Area enters this Area. Requires [member monitoring] to "
+"be set to [code]true[/code].\n"
+"[code]area[/code] the other Area."
+msgstr ""
+
+#: doc/classes/Area.xml:109
+msgid ""
+"Emitted when another Area exits this Area. Requires [member monitoring] to "
+"be set to [code]true[/code].\n"
+"[code]area[/code] the other Area."
+msgstr ""
+
+#: doc/classes/Area.xml:119 doc/classes/Area.xml:132
+msgid ""
+"Emitted when one of another Area's [Shape]s enters one of this Area's "
+"[Shape]s. Requires [member monitoring] to be set to [code]true[/code].\n"
+"[code]area_rid[/code] the [RID] of the other Area's [CollisionObject] used "
+"by the [PhysicsServer].\n"
+"[code]area[/code] the other Area.\n"
+"[code]area_shape_index[/code] the index of the [Shape] of the other Area "
+"used by the [PhysicsServer]. Get the [CollisionShape] node with [code]area."
+"shape_owner_get_owner(area_shape_index)[/code].\n"
+"[code]local_shape_index[/code] the index of the [Shape] of this Area used by "
+"the [PhysicsServer]. Get the [CollisionShape] node with [code]self."
+"shape_owner_get_owner(local_shape_index)[/code]."
+msgstr ""
+
+#: doc/classes/Area.xml:142
+msgid ""
+"Emitted when a [PhysicsBody] or [GridMap] enters this Area. Requires [member "
+"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
+"[MeshLibrary] has Collision [Shape]s.\n"
+"[code]body[/code] the [Node], if it exists in the tree, of the other "
+"[PhysicsBody] or [GridMap]."
+msgstr ""
+
+#: doc/classes/Area.xml:149
+msgid ""
+"Emitted when a [PhysicsBody] or [GridMap] exits this Area. Requires [member "
+"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
+"[MeshLibrary] has Collision [Shape]s.\n"
+"[code]body[/code] the [Node], if it exists in the tree, of the other "
+"[PhysicsBody] or [GridMap]."
+msgstr ""
+
+#: doc/classes/Area.xml:159 doc/classes/Area.xml:172
+msgid ""
+"Emitted when one of a [PhysicsBody] or [GridMap]'s [Shape]s enters one of "
+"this Area's [Shape]s. Requires [member monitoring] to be set to [code]true[/"
+"code]. [GridMap]s are detected if the [MeshLibrary] has Collision [Shape]s.\n"
+"[code]body_rid[/code] the [RID] of the [PhysicsBody] or [MeshLibrary]'s "
+"[CollisionObject] used by the [PhysicsServer].\n"
+"[code]body[/code] the [Node], if it exists in the tree, of the [PhysicsBody] "
+"or [GridMap].\n"
+"[code]body_shape_index[/code] the index of the [Shape] of the [PhysicsBody] "
+"or [GridMap] used by the [PhysicsServer]. Get the [CollisionShape] node with "
+"[code]body.shape_owner_get_owner(body_shape_index)[/code].\n"
+"[code]local_shape_index[/code] the index of the [Shape] of this Area used by "
+"the [PhysicsServer]. Get the [CollisionShape] node with [code]self."
+"shape_owner_get_owner(local_shape_index)[/code]."
+msgstr ""
+
+#: doc/classes/Area.xml:182 doc/classes/Area2D.xml:172
+msgid "This area does not affect gravity/damping."
+msgstr ""
+
+#: doc/classes/Area.xml:185 doc/classes/Area2D.xml:175
+msgid ""
+"This area adds its gravity/damping values to whatever has been calculated so "
+"far (in [member priority] order)."
+msgstr ""
+
+#: doc/classes/Area.xml:188 doc/classes/Area2D.xml:178
+msgid ""
+"This area adds its gravity/damping values to whatever has been calculated so "
+"far (in [member priority] order), ignoring any lower priority areas."
+msgstr ""
+
+#: doc/classes/Area.xml:191 doc/classes/Area2D.xml:181
+msgid ""
+"This area replaces any gravity/damping, even the defaults, ignoring any "
+"lower priority areas."
+msgstr ""
+
+#: doc/classes/Area.xml:194 doc/classes/Area2D.xml:184
+msgid ""
+"This area replaces any gravity/damping calculated so far (in [member "
+"priority] order), but keeps calculating the rest of the areas."
+msgstr ""
+
+#: doc/classes/Area2D.xml:4
+msgid "2D area for detection and physics and audio influence."
+msgstr ""
+
+#: doc/classes/Area2D.xml:7
+msgid ""
+"2D area that detects [CollisionObject2D] nodes overlapping, entering, or "
+"exiting. Can also alter or override local physics parameters (gravity, "
+"damping) and route audio to a custom audio bus."
+msgstr ""
+
+#: doc/classes/Area2D.xml:10
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/physics/using_area_2d.html"
+msgstr ""
+
+#: doc/classes/Area2D.xml:12 doc/classes/CollisionShape2D.xml:12
+#: doc/classes/RectangleShape2D.xml:10
+msgid "https://godotengine.org/asset-library/asset/121"
+msgstr ""
+
+#: doc/classes/Area2D.xml:13 doc/classes/Camera2D.xml:12
+#: doc/classes/KinematicBody2D.xml:15 doc/classes/TileMap.xml:12
+#: doc/classes/TileSet.xml:12
+msgid "https://godotengine.org/asset-library/asset/120"
+msgstr ""
+
+#: doc/classes/Area2D.xml:19
+msgid ""
+"Returns a list of intersecting [Area2D]s. The overlapping area's [member "
+"CollisionObject2D.collision_layer] must be part of this area's [member "
+"CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
+msgstr ""
+
+#: doc/classes/Area2D.xml:26
+msgid ""
+"Returns a list of intersecting [PhysicsBody2D]s. The overlapping body's "
+"[member CollisionObject2D.collision_layer] must be part of this area's "
+"[member CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
+msgstr ""
+
+#: doc/classes/Area2D.xml:34
+msgid ""
+"If [code]true[/code], the given area overlaps the Area2D.\n"
+"[b]Note:[/b] The result of this test is not immediate after moving objects. "
+"For performance, the list of overlaps is updated once per frame and before "
+"the physics step. Consider using signals instead."
+msgstr ""
+
+#: doc/classes/Area2D.xml:42
+msgid ""
+"If [code]true[/code], the given physics body overlaps the Area2D.\n"
+"[b]Note:[/b] The result of this test is not immediate after moving objects. "
+"For performance, list of overlaps is updated once per frame and before the "
+"physics step. Consider using signals instead.\n"
+"The [code]body[/code] argument can either be a [PhysicsBody2D] or a "
+"[TileMap] instance (while TileMaps are not physics bodies themselves, they "
+"register their tiles with collision shapes as a virtual physics body)."
+msgstr ""
+
+#: doc/classes/Area2D.xml:50
+msgid ""
+"The rate at which objects stop spinning in this area. Represents the angular "
+"velocity lost per second.\n"
+"See [member ProjectSettings.physics/2d/default_angular_damp] for more "
+"details about damping."
+msgstr ""
+
+#: doc/classes/Area2D.xml:60
+msgid ""
+"The area's gravity intensity (in pixels per second squared). This value "
+"multiplies the gravity vector. This is useful to alter the force of gravity "
+"without altering its direction."
+msgstr ""
+
+#: doc/classes/Area2D.xml:72
+msgid ""
+"The rate at which objects stop moving in this area. Represents the linear "
+"velocity lost per second.\n"
+"See [member ProjectSettings.physics/2d/default_linear_damp] for more details "
+"about damping."
+msgstr ""
+
+#: doc/classes/Area2D.xml:92
+msgid ""
+"Emitted when another Area2D enters this Area2D. Requires [member monitoring] "
+"to be set to [code]true[/code].\n"
+"[code]area[/code] the other Area2D."
+msgstr ""
+
+#: doc/classes/Area2D.xml:99
+msgid ""
+"Emitted when another Area2D exits this Area2D. Requires [member monitoring] "
+"to be set to [code]true[/code].\n"
+"[code]area[/code] the other Area2D."
+msgstr ""
+
+#: doc/classes/Area2D.xml:109
+msgid ""
+"Emitted when one of another Area2D's [Shape2D]s enters one of this Area2D's "
+"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
+"[code]area_rid[/code] the [RID] of the other Area2D's [CollisionObject2D] "
+"used by the [Physics2DServer].\n"
+"[code]area[/code] the other Area2D.\n"
+"[code]area_shape_index[/code] the index of the [Shape2D] of the other Area2D "
+"used by the [Physics2DServer]. Get the [CollisionShape2D] node with "
+"[code]area.shape_owner_get_owner(area_shape_index)[/code].\n"
+"[code]local_shape_index[/code] the index of the [Shape2D] of this Area2D "
+"used by the [Physics2DServer]. Get the [CollisionShape2D] node with "
+"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
+msgstr ""
+
+#: doc/classes/Area2D.xml:122
+msgid ""
+"Emitted when one of another Area2D's [Shape2D]s exits one of this Area2D's "
+"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
+"[code]area_rid[/code] the [RID] of the other Area2D's [CollisionObject2D] "
+"used by the [Physics2DServer].\n"
+"[code]area[/code] the other Area2D.\n"
+"[code]area_shape_index[/code] the index of the [Shape2D] of the other Area2D "
+"used by the [Physics2DServer]. Get the [CollisionShape2D] node with "
+"[code]area.shape_owner_get_owner(area_shape_index)[/code].\n"
+"[code]local_shape_index[/code] the index of the [Shape2D] of this Area2D "
+"used by the [Physics2DServer]. Get the [CollisionShape2D] node with "
+"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
+msgstr ""
+
+#: doc/classes/Area2D.xml:132
+msgid ""
+"Emitted when a [PhysicsBody2D] or [TileMap] enters this Area2D. Requires "
+"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
+"if the [TileSet] has Collision [Shape2D]s.\n"
+"[code]body[/code] the [Node], if it exists in the tree, of the other "
+"[PhysicsBody2D] or [TileMap]."
+msgstr ""
+
+#: doc/classes/Area2D.xml:139
+msgid ""
+"Emitted when a [PhysicsBody2D] or [TileMap] exits this Area2D. Requires "
+"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
+"if the [TileSet] has Collision [Shape2D]s.\n"
+"[code]body[/code] the [Node], if it exists in the tree, of the other "
+"[PhysicsBody2D] or [TileMap]."
+msgstr ""
+
+#: doc/classes/Area2D.xml:149
+msgid ""
+"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s enters one "
+"of this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
+"[code]true[/code]. [TileMap]s are detected if the [TileSet] has Collision "
+"[Shape2D]s.\n"
+"[code]body_rid[/code] the [RID] of the [PhysicsBody2D] or [TileSet]'s "
+"[CollisionObject2D] used by the [Physics2DServer].\n"
+"[code]body[/code] the [Node], if it exists in the tree, of the "
+"[PhysicsBody2D] or [TileMap].\n"
+"[code]body_shape_index[/code] the index of the [Shape2D] of the "
+"[PhysicsBody2D] or [TileMap] used by the [Physics2DServer]. Get the "
+"[CollisionShape2D] node with [code]body."
+"shape_owner_get_owner(body_shape_index)[/code].\n"
+"[code]local_shape_index[/code] the index of the [Shape2D] of this Area2D "
+"used by the [Physics2DServer]. Get the [CollisionShape2D] node with "
+"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
+msgstr ""
+
+#: doc/classes/Area2D.xml:162
+msgid ""
+"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s exits one of "
+"this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
+"[code]true[/code]. [TileMap]s are detected if the [TileSet] has Collision "
+"[Shape2D]s.\n"
+"[code]body_rid[/code] the [RID] of the [PhysicsBody2D] or [TileSet]'s "
+"[CollisionObject2D] used by the [Physics2DServer].\n"
+"[code]body[/code] the [Node], if it exists in the tree, of the "
+"[PhysicsBody2D] or [TileMap].\n"
+"[code]body_shape_index[/code] the index of the [Shape2D] of the "
+"[PhysicsBody2D] or [TileMap] used by the [Physics2DServer]. Get the "
+"[CollisionShape2D] node with [code]body."
+"shape_owner_get_owner(body_shape_index)[/code].\n"
+"[code]local_shape_index[/code] the index of the [Shape2D] of this Area2D "
+"used by the [Physics2DServer]. Get the [CollisionShape2D] node with "
+"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
+msgstr ""
+
+#: doc/classes/Array.xml:4
+msgid "A generic array datatype."
+msgstr ""
+
+#: doc/classes/Array.xml:7
+msgid ""
+"A generic array that can contain several elements of any type, accessible by "
+"a numerical index starting at 0. Negative indices can be used to count from "
+"the back, like in Python (-1 is the last element, -2 is the second to last, "
+"etc.).\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"var array = [\"One\", 2, 3, \"Four\"]\n"
+"print(array[0]) # One.\n"
+"print(array[2]) # 3.\n"
+"print(array[-1]) # Four.\n"
+"array[2] = \"Three\"\n"
+"print(array[-2]) # Three.\n"
+"[/codeblock]\n"
+"Arrays can be concatenated using the [code]+[/code] operator:\n"
+"[codeblock]\n"
+"var array1 = [\"One\", 2]\n"
+"var array2 = [3, \"Four\"]\n"
+"print(array1 + array2) # [\"One\", 2, 3, \"Four\"]\n"
+"[/codeblock]\n"
+"[b]Note:[/b] Concatenating with the [code]+=[/code] operator will create a "
+"new array, which has a cost. If you want to append another array to an "
+"existing array, [method append_array] is more efficient.\n"
+"[b]Note:[/b] Arrays are always passed by reference. To get a copy of an "
+"array that can be modified independently of the original array, use [method "
+"duplicate].\n"
+"[b]Note:[/b] When declaring an array with [code]const[/code], the array "
+"itself can still be mutated by defining the values at individual indices or "
+"pushing/removing elements. Using [code]const[/code] will only prevent "
+"assigning the constant with another value after it was initialized."
+msgstr ""
+
+#: doc/classes/Array.xml:34
+msgid "Constructs an array from a [PoolColorArray]."
+msgstr ""
+
+#: doc/classes/Array.xml:41
+msgid "Constructs an array from a [PoolVector3Array]."
+msgstr ""
+
+#: doc/classes/Array.xml:48
+msgid "Constructs an array from a [PoolVector2Array]."
+msgstr ""
+
+#: doc/classes/Array.xml:55
+msgid "Constructs an array from a [PoolStringArray]."
+msgstr ""
+
+#: doc/classes/Array.xml:62
+msgid "Constructs an array from a [PoolRealArray]."
+msgstr ""
+
+#: doc/classes/Array.xml:69
+msgid "Constructs an array from a [PoolIntArray]."
+msgstr ""
+
+#: doc/classes/Array.xml:76
+msgid "Constructs an array from a [PoolByteArray]."
+msgstr ""
+
+#: doc/classes/Array.xml:82 doc/classes/PoolByteArray.xml:23
+#: doc/classes/PoolColorArray.xml:23 doc/classes/PoolIntArray.xml:24
+#: doc/classes/PoolRealArray.xml:24 doc/classes/PoolStringArray.xml:24
+#: doc/classes/PoolVector2Array.xml:24 doc/classes/PoolVector3Array.xml:23
+msgid ""
+"Appends an element at the end of the array (alias of [method push_back])."
+msgstr ""
+
+#: doc/classes/Array.xml:88
+msgid ""
+"Appends another array at the end of this array.\n"
+"[codeblock]\n"
+"var array1 = [1, 2, 3]\n"
+"var array2 = [4, 5, 6]\n"
+"array1.append_array(array2)\n"
+"print(array1) # Prints [1, 2, 3, 4, 5, 6].\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Array.xml:100
+msgid ""
+"Returns the last element of the array. Prints an error and returns "
+"[code]null[/code] if the array is empty.\n"
+"[b]Note:[/b] Calling this function is not the same as writing [code]array[-1]"
+"[/code]. If the array is empty, accessing by index will pause project "
+"execution when running from the editor."
+msgstr ""
+
+#: doc/classes/Array.xml:109
+msgid ""
+"Finds the index of an existing value (or the insertion index that maintains "
+"sorting order, if the value is not yet present in the array) using binary "
+"search. Optionally, a [code]before[/code] specifier can be passed. If "
+"[code]false[/code], the returned index comes after all existing entries of "
+"the value in the array.\n"
+"[b]Note:[/b] Calling [method bsearch] on an unsorted array results in "
+"unexpected behavior."
+msgstr ""
+
+#: doc/classes/Array.xml:120
+msgid ""
+"Finds the index of an existing value (or the insertion index that maintains "
+"sorting order, if the value is not yet present in the array) using binary "
+"search and a custom comparison method declared in the [code]obj[/code]. "
+"Optionally, a [code]before[/code] specifier can be passed. If [code]false[/"
+"code], the returned index comes after all existing entries of the value in "
+"the array. The custom method receives two arguments (an element from the "
+"array and the value searched for) and must return [code]true[/code] if the "
+"first argument is less than the second, and return [code]false[/code] "
+"otherwise.\n"
+"[codeblock]\n"
+"func cardinal_to_algebraic(a):\n"
+" match a:\n"
+" \"one\":\n"
+" return 1\n"
+" \"two\":\n"
+" return 2\n"
+" \"three\":\n"
+" return 3\n"
+" \"four\":\n"
+" return 4\n"
+" _:\n"
+" return 0\n"
+"\n"
+"func compare(a, b):\n"
+" return cardinal_to_algebraic(a) < cardinal_to_algebraic(b)\n"
+"\n"
+"func _ready():\n"
+" var a = [\"one\", \"two\", \"three\", \"four\"]\n"
+" # `compare` is defined in this object, so we use `self` as the `obj` "
+"parameter.\n"
+" print(a.bsearch_custom(\"three\", self, \"compare\", true)) # Expected "
+"value is 2.\n"
+"[/codeblock]\n"
+"[b]Note:[/b] Calling [method bsearch_custom] on an unsorted array results in "
+"unexpected behavior."
+msgstr ""
+
+#: doc/classes/Array.xml:148
+msgid ""
+"Clears the array. This is equivalent to using [method resize] with a size of "
+"[code]0[/code]."
+msgstr ""
+
+#: doc/classes/Array.xml:155
+msgid "Returns the number of times an element is in the array."
+msgstr ""
+
+#: doc/classes/Array.xml:162
+msgid ""
+"Returns a copy of the array.\n"
+"If [code]deep[/code] is [code]true[/code], a deep copy is performed: all "
+"nested arrays and dictionaries are duplicated and will not be shared with "
+"the original array. If [code]false[/code], a shallow copy is made and "
+"references to the original nested arrays and dictionaries are kept, so that "
+"modifying a sub-array or dictionary in the copy will also impact those "
+"referenced in the source array."
+msgstr ""
+
+#: doc/classes/Array.xml:169 doc/classes/PoolByteArray.xml:61
+#: doc/classes/PoolColorArray.xml:35 doc/classes/PoolIntArray.xml:36
+#: doc/classes/PoolRealArray.xml:36 doc/classes/PoolStringArray.xml:36
+#: doc/classes/PoolVector2Array.xml:36 doc/classes/PoolVector3Array.xml:35
+msgid "Returns [code]true[/code] if the array is empty."
+msgstr ""
+
+#: doc/classes/Array.xml:175
+msgid ""
+"Removes the first occurrence of a value from the array. To remove an element "
+"by index, use [method remove] instead.\n"
+"[b]Note:[/b] This method acts in-place and doesn't return a value.\n"
+"[b]Note:[/b] On large arrays, this method will be slower if the removed "
+"element is close to the beginning of the array (index 0). This is because "
+"all elements placed after the removed element have to be reindexed."
+msgstr ""
+
+#: doc/classes/Array.xml:185
+msgid ""
+"Searches the array for a value and returns its index or [code]-1[/code] if "
+"not found. Optionally, the initial search index can be passed."
+msgstr ""
+
+#: doc/classes/Array.xml:192
+msgid ""
+"Searches the array in reverse order for a value and returns its index or "
+"[code]-1[/code] if not found."
+msgstr ""
+
+#: doc/classes/Array.xml:198
+msgid ""
+"Returns the first element of the array. Prints an error and returns "
+"[code]null[/code] if the array is empty.\n"
+"[b]Note:[/b] Calling this function is not the same as writing [code]array[0]"
+"[/code]. If the array is empty, accessing by index will pause project "
+"execution when running from the editor."
+msgstr ""
+
+#: doc/classes/Array.xml:206
+msgid ""
+"Returns [code]true[/code] if the array contains the given value.\n"
+"[codeblock]\n"
+"[\"inside\", 7].has(\"inside\") # True\n"
+"[\"inside\", 7].has(\"outside\") # False\n"
+"[\"inside\", 7].has(7) # True\n"
+"[\"inside\", 7].has(\"7\") # False\n"
+"[/codeblock]\n"
+"[b]Note:[/b] This is equivalent to using the [code]in[/code] operator as "
+"follows:\n"
+"[codeblock]\n"
+"# Will evaluate to `true`.\n"
+"if 2 in [2, 4, 6, 8]:\n"
+" pass\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Array.xml:224
+msgid ""
+"Returns a hashed integer value representing the array and its contents.\n"
+"[b]Note:[/b] Arrays with equal contents can still produce different hashes. "
+"Only the exact same arrays will produce the same hashed integer value."
+msgstr ""
+
+#: doc/classes/Array.xml:232
+msgid ""
+"Inserts a new element at a given position in the array. The position must be "
+"valid, or at the end of the array ([code]pos == size()[/code]).\n"
+"[b]Note:[/b] This method acts in-place and doesn't return a value.\n"
+"[b]Note:[/b] On large arrays, this method will be slower if the inserted "
+"element is close to the beginning of the array (index 0). This is because "
+"all elements placed after the newly inserted element have to be reindexed."
+msgstr ""
+
+#: doc/classes/Array.xml:239 doc/classes/PoolByteArray.xml:96
+#: doc/classes/PoolColorArray.xml:48 doc/classes/PoolIntArray.xml:49
+#: doc/classes/PoolRealArray.xml:49 doc/classes/PoolStringArray.xml:49
+#: doc/classes/PoolVector2Array.xml:49 doc/classes/PoolVector3Array.xml:48
+msgid "Reverses the order of the elements in the array."
+msgstr ""
+
+#: doc/classes/Array.xml:245
+msgid ""
+"Returns the maximum value contained in the array if all elements are of "
+"comparable types. If the elements can't be compared, [code]null[/code] is "
+"returned."
+msgstr ""
+
+#: doc/classes/Array.xml:251
+msgid ""
+"Returns the minimum value contained in the array if all elements are of "
+"comparable types. If the elements can't be compared, [code]null[/code] is "
+"returned."
+msgstr ""
+
+#: doc/classes/Array.xml:258
+msgid ""
+"Removes and returns the element of the array at index [code]position[/code]. "
+"If negative, [code]position[/code] is considered relative to the end of the "
+"array. Leaves the array untouched and returns [code]null[/code] if the array "
+"is empty or if it's accessed out of bounds. An error message is printed when "
+"the array is accessed out of bounds, but not when the array is empty.\n"
+"[b]Note:[/b] On large arrays, this method can be slower than [method "
+"pop_back] as it will reindex the array's elements that are located after the "
+"removed element. The larger the array and the lower the index of the removed "
+"element, the slower [method pop_at] will be."
+msgstr ""
+
+#: doc/classes/Array.xml:265
+msgid ""
+"Removes and returns the last element of the array. Returns [code]null[/code] "
+"if the array is empty, without printing an error message. See also [method "
+"pop_front]."
+msgstr ""
+
+#: doc/classes/Array.xml:271
+msgid ""
+"Removes and returns the first element of the array. Returns [code]null[/"
+"code] if the array is empty, without printing an error message. See also "
+"[method pop_back].\n"
+"[b]Note:[/b] On large arrays, this method is much slower than [method "
+"pop_back] as it will reindex all the array's elements every time it's "
+"called. The larger the array, the slower [method pop_front] will be."
+msgstr ""
+
+#: doc/classes/Array.xml:278
+msgid ""
+"Appends an element at the end of the array. See also [method push_front]."
+msgstr ""
+
+#: doc/classes/Array.xml:284
+msgid ""
+"Adds an element at the beginning of the array. See also [method push_back].\n"
+"[b]Note:[/b] On large arrays, this method is much slower than [method "
+"push_back] as it will reindex all the array's elements every time it's "
+"called. The larger the array, the slower [method push_front] will be."
+msgstr ""
+
+#: doc/classes/Array.xml:291
+msgid ""
+"Removes an element from the array by index. If the index does not exist in "
+"the array, nothing happens. To remove an element by searching for its value, "
+"use [method erase] instead.\n"
+"[b]Note:[/b] This method acts in-place and doesn't return a value.\n"
+"[b]Note:[/b] On large arrays, this method will be slower if the removed "
+"element is close to the beginning of the array (index 0). This is because "
+"all elements placed after the removed element have to be reindexed."
+msgstr ""
+
+#: doc/classes/Array.xml:299
+msgid ""
+"Resizes the array to contain a different number of elements. If the array "
+"size is smaller, elements are cleared, if bigger, new elements are "
+"[code]null[/code]."
+msgstr ""
+
+#: doc/classes/Array.xml:307
+msgid ""
+"Searches the array in reverse order. Optionally, a start search index can be "
+"passed. If negative, the start index is considered relative to the end of "
+"the array."
+msgstr ""
+
+#: doc/classes/Array.xml:312
+msgid ""
+"Shuffles the array such that the items will have a random order. This method "
+"uses the global random number generator common to methods such as [method "
+"@GDScript.randi]. Call [method @GDScript.randomize] to ensure that a new "
+"seed will be used each time if you want non-reproducible shuffling."
+msgstr ""
+
+#: doc/classes/Array.xml:318
+msgid "Returns the number of elements in the array."
+msgstr ""
+
+#: doc/classes/Array.xml:328
+msgid ""
+"Duplicates the subset described in the function and returns it in an array, "
+"deeply copying the array if [code]deep[/code] is [code]true[/code]. Lower "
+"and upper index are inclusive, with the [code]step[/code] describing the "
+"change between indices while slicing."
+msgstr ""
+
+#: doc/classes/Array.xml:333
+msgid ""
+"Sorts the array.\n"
+"[b]Note:[/b] Strings are sorted in alphabetical order (as opposed to natural "
+"order). This may lead to unexpected behavior when sorting an array of "
+"strings ending with a sequence of numbers. Consider the following example:\n"
+"[codeblock]\n"
+"var strings = [\"string1\", \"string2\", \"string10\", \"string11\"]\n"
+"strings.sort()\n"
+"print(strings) # Prints [string1, string10, string11, string2]\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Array.xml:346
+msgid ""
+"Sorts the array using a custom method. The arguments are an object that "
+"holds the method and the name of such method. The custom method receives two "
+"arguments (a pair of elements from the array) and must return either "
+"[code]true[/code] or [code]false[/code].\n"
+"For two elements [code]a[/code] and [code]b[/code], if the given method "
+"returns [code]true[/code], element [code]b[/code] will be after element "
+"[code]a[/code] in the array.\n"
+"[b]Note:[/b] You cannot randomize the return value as the heapsort algorithm "
+"expects a deterministic result. Doing so will result in unexpected "
+"behavior.\n"
+"[codeblock]\n"
+"class MyCustomSorter:\n"
+" static func sort_ascending(a, b):\n"
+" if a[0] < b[0]:\n"
+" return true\n"
+" return false\n"
+"\n"
+"var my_items = [[5, \"Potato\"], [9, \"Rice\"], [4, \"Tomato\"]]\n"
+"my_items.sort_custom(MyCustomSorter, \"sort_ascending\")\n"
+"print(my_items) # Prints [[4, Tomato], [5, Potato], [9, Rice]].\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:4
+msgid ""
+"[Mesh] type that provides utility for constructing a surface from arrays."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:7
+msgid ""
+"The [ArrayMesh] is used to construct a [Mesh] by specifying the attributes "
+"as arrays.\n"
+"The most basic example is the creation of a single triangle:\n"
+"[codeblock]\n"
+"var vertices = PoolVector3Array()\n"
+"vertices.push_back(Vector3(0, 1, 0))\n"
+"vertices.push_back(Vector3(1, 0, 0))\n"
+"vertices.push_back(Vector3(0, 0, 1))\n"
+"# Initialize the ArrayMesh.\n"
+"var arr_mesh = ArrayMesh.new()\n"
+"var arrays = []\n"
+"arrays.resize(ArrayMesh.ARRAY_MAX)\n"
+"arrays[ArrayMesh.ARRAY_VERTEX] = vertices\n"
+"# Create the Mesh.\n"
+"arr_mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, arrays)\n"
+"var m = MeshInstance.new()\n"
+"m.mesh = arr_mesh\n"
+"[/codeblock]\n"
+"The [MeshInstance] is ready to be added to the [SceneTree] to be shown.\n"
+"See also [ImmediateGeometry], [MeshDataTool] and [SurfaceTool] for "
+"procedural geometry generation.\n"
+"[b]Note:[/b] Godot uses clockwise [url=https://learnopengl.com/Advanced-"
+"OpenGL/Face-culling]winding order[/url] for front faces of triangle "
+"primitive modes."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:29
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/content/procedural_geometry/"
+"arraymesh.html"
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:36
+msgid ""
+"Adds name for a blend shape that will be added with [method "
+"add_surface_from_arrays]. Must be called before surface is added."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:46
+msgid ""
+"Creates a new surface.\n"
+"Surfaces are created to be rendered using a [code]primitive[/code], which "
+"may be any of the types defined in [enum Mesh.PrimitiveType]. (As a note, "
+"when using indices, it is recommended to only use points, lines, or "
+"triangles.) [method Mesh.get_surface_count] will become the [code]surf_idx[/"
+"code] for this new surface.\n"
+"The [code]arrays[/code] argument is an array of arrays. See [enum ArrayType] "
+"for the values used in this array. For example, [code]arrays[0][/code] is "
+"the array of vertices. That first vertex sub-array is always required; the "
+"others are optional. Adding an index array puts this function into \"index "
+"mode\" where the vertex and other arrays become the sources of data and the "
+"index array defines the vertex order. All sub-arrays must have the same "
+"length as the vertex array or be empty, except for [constant ARRAY_INDEX] if "
+"it is used."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:54
+msgid "Removes all blend shapes from this [ArrayMesh]."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:60
+msgid "Removes all surfaces from this [ArrayMesh]."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:66
+msgid "Returns the number of blend shapes that the [ArrayMesh] holds."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:73
+msgid "Returns the name of the blend shape at this index."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:81
+msgid ""
+"Will perform a UV unwrap on the [ArrayMesh] to prepare the mesh for "
+"lightmapping."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:87
+msgid "Will regenerate normal maps for the [ArrayMesh]."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:101
+msgid ""
+"Returns the index of the first surface with this name held within this "
+"[ArrayMesh]. If none are found, -1 is returned."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:108
+msgid ""
+"Returns the length in indices of the index array in the requested surface "
+"(see [method add_surface_from_arrays])."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:115
+msgid ""
+"Returns the length in vertices of the vertex array in the requested surface "
+"(see [method add_surface_from_arrays])."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:122
+msgid ""
+"Returns the format mask of the requested surface (see [method "
+"add_surface_from_arrays])."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:129
+msgid "Gets the name assigned to this surface."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:136
+msgid ""
+"Returns the primitive type of the requested surface (see [method "
+"add_surface_from_arrays])."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:143
+msgid ""
+"Removes a surface at position [code]surf_idx[/code], shifting greater "
+"surfaces one [code]surf_idx[/code] slot down."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:151
+msgid "Sets a name for a given surface."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:160
+msgid ""
+"Updates a specified region of mesh arrays on the GPU.\n"
+"[b]Warning:[/b] Only use if you know what you are doing. You can easily "
+"cause crashes by calling this function with improper arguments."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:167
+msgid "Sets the blend shape mode to one of [enum Mesh.BlendShapeMode]."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:170 doc/classes/PrimitiveMesh.xml:26
+msgid ""
+"Overrides the [AABB] with one defined by user for use with frustum culling. "
+"Especially useful to avoid unexpected culling when using a shader to offset "
+"vertices."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:175
+msgid "Default value used for index_array_len when no indices are present."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:178
+msgid "Amount of weights/bone indices per vertex (always 4)."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:181
+msgid "[PoolVector3Array], [PoolVector2Array], or [Array] of vertex positions."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:184
+msgid "[PoolVector3Array] of vertex normals."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:187
+msgid ""
+"[PoolRealArray] of vertex tangents. Each element in groups of 4 floats, "
+"first 3 floats determine the tangent, and the last the binormal direction as "
+"-1 or 1."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:190
+msgid "[PoolColorArray] of vertex colors."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:193
+msgid "[PoolVector2Array] for UV coordinates."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:196
+msgid "[PoolVector2Array] for second UV coordinates."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:199
+msgid ""
+"[PoolRealArray] or [PoolIntArray] of bone indices. Each element in groups of "
+"4 floats."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:202
+msgid "[PoolRealArray] of bone weights. Each element in groups of 4 floats."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:205
+msgid ""
+"[PoolIntArray] of integers used as indices referencing vertices, colors, "
+"normals, tangents, and textures. All of those arrays must have the same "
+"number of elements as the vertex array. No index can be beyond the vertex "
+"array size. When this index array is present, it puts the function into "
+"\"index mode,\" where the index selects the *i*'th vertex, normal, tangent, "
+"color, UV, etc. This means if you want to have different normals or colors "
+"along an edge, you have to duplicate the vertices.\n"
+"For triangles, the index array is interpreted as triples, referring to the "
+"vertices of each triangle. For lines, the index array is in pairs indicating "
+"the start and end of each line."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:209 doc/classes/Mesh.xml:225
+#: doc/classes/VisualServer.xml:3270
+msgid "Represents the size of the [enum ArrayType] enum."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:212
+msgid "Array format will include vertices (mandatory)."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:215
+msgid "Array format will include normals."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:218
+msgid "Array format will include tangents."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:221
+msgid "Array format will include a color array."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:224
+msgid "Array format will include UVs."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:227
+msgid "Array format will include another set of UVs."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:230
+msgid "Array format will include bone indices."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:233
+msgid "Array format will include bone weights."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:236
+msgid "Index array will be used."
+msgstr ""
+
+#: doc/classes/ARVRAnchor.xml:4
+msgid "An anchor point in AR space."
+msgstr ""
+
+#: doc/classes/ARVRAnchor.xml:7
+msgid ""
+"The [ARVRAnchor] point is a spatial node that maps a real world location "
+"identified by the AR platform to a position within the game world. For "
+"example, as long as plane detection in ARKit is on, ARKit will identify and "
+"update the position of planes (tables, floors, etc) and create anchors for "
+"them.\n"
+"This node is mapped to one of the anchors through its unique ID. When you "
+"receive a signal that a new anchor is available, you should add this node to "
+"your scene for that anchor. You can predefine nodes and set the ID; the "
+"nodes will simply remain on 0,0,0 until a plane is recognized.\n"
+"Keep in mind that, as long as plane detection is enabled, the size, placing "
+"and orientation of an anchor will be updated as the detection logic learns "
+"more about the real world out there especially if only part of the surface "
+"is in view."
+msgstr ""
+
+#: doc/classes/ARVRAnchor.xml:17
+msgid "Returns the name given to this anchor."
+msgstr ""
+
+#: doc/classes/ARVRAnchor.xml:23
+msgid ""
+"Returns [code]true[/code] if the anchor is being tracked and [code]false[/"
+"code] if no anchor with this ID is currently known."
+msgstr ""
+
+#: doc/classes/ARVRAnchor.xml:29
+msgid ""
+"If provided by the [ARVRInterface], this returns a mesh object for the "
+"anchor. For an anchor, this can be a shape related to the object being "
+"tracked or it can be a mesh that provides topology related to the anchor and "
+"can be used to create shadows/reflections on surfaces or for generating "
+"collision shapes."
+msgstr ""
+
+#: doc/classes/ARVRAnchor.xml:35
+msgid ""
+"Returns a plane aligned with our anchor; handy for intersection testing."
+msgstr ""
+
+#: doc/classes/ARVRAnchor.xml:41
+msgid ""
+"Returns the estimated size of the plane that was detected. Say when the "
+"anchor relates to a table in the real world, this is the estimated size of "
+"the surface of that table."
+msgstr ""
+
+#: doc/classes/ARVRAnchor.xml:47
+msgid ""
+"The anchor's ID. You can set this before the anchor itself exists. The first "
+"anchor gets an ID of [code]1[/code], the second an ID of [code]2[/code], "
+"etc. When anchors get removed, the engine can then assign the corresponding "
+"ID to new anchors. The most common situation where anchors \"disappear\" is "
+"when the AR server identifies that two anchors represent different parts of "
+"the same plane and merges them."
+msgstr ""
+
+#: doc/classes/ARVRAnchor.xml:54
+msgid ""
+"Emitted when the mesh associated with the anchor changes or when one becomes "
+"available. This is especially important for topology that is constantly "
+"being [code]mesh_updated[/code]."
+msgstr ""
+
+#: doc/classes/ARVRCamera.xml:4
+msgid ""
+"A camera node with a few overrules for AR/VR applied, such as location "
+"tracking."
+msgstr ""
+
+#: doc/classes/ARVRCamera.xml:7
+msgid ""
+"This is a helper spatial node for our camera; note that, if stereoscopic "
+"rendering is applicable (VR-HMD), most of the camera properties are ignored, "
+"as the HMD information overrides them. The only properties that can be "
+"trusted are the near and far planes.\n"
+"The position and orientation of this node is automatically updated by the "
+"ARVR Server to represent the location of the HMD if such tracking is "
+"available and can thus be used by game logic. Note that, in contrast to the "
+"ARVR Controller, the render thread has access to the most up-to-date "
+"tracking data of the HMD and the location of the ARVRCamera can lag a few "
+"milliseconds behind what is used for rendering as a result."
+msgstr ""
+
+#: doc/classes/ARVRCamera.xml:11 doc/classes/ARVRController.xml:12
+#: doc/classes/ARVRInterface.xml:11 doc/classes/ARVROrigin.xml:13
+#: doc/classes/ARVRPositionalTracker.xml:12 doc/classes/ARVRServer.xml:10
+msgid "https://docs.godotengine.org/en/3.4/tutorials/vr/index.html"
+msgstr ""
+
+#: doc/classes/ARVRController.xml:4
+msgid "A spatial node representing a spatially-tracked controller."
+msgstr ""
+
+#: doc/classes/ARVRController.xml:7
+msgid ""
+"This is a helper spatial node that is linked to the tracking of controllers. "
+"It also offers several handy passthroughs to the state of buttons and such "
+"on the controllers.\n"
+"Controllers are linked by their ID. You can create controller nodes before "
+"the controllers are available. If your game always uses two controllers (one "
+"for each hand), you can predefine the controllers with ID 1 and 2; they will "
+"become active as soon as the controllers are identified. If you expect "
+"additional controllers to be used, you should react to the signals and add "
+"ARVRController nodes to your scene.\n"
+"The position of the controller node is automatically updated by the "
+"[ARVRServer]. This makes this node ideal to add child nodes to visualize the "
+"controller."
+msgstr ""
+
+#: doc/classes/ARVRController.xml:18
+msgid ""
+"If active, returns the name of the associated controller if provided by the "
+"AR/VR SDK used."
+msgstr ""
+
+#: doc/classes/ARVRController.xml:24
+msgid ""
+"Returns the hand holding this controller, if known. See [enum "
+"ARVRPositionalTracker.TrackerHand]."
+msgstr ""
+
+#: doc/classes/ARVRController.xml:30
+msgid ""
+"Returns [code]true[/code] if the bound controller is active. ARVR systems "
+"attempt to track active controllers."
+msgstr ""
+
+#: doc/classes/ARVRController.xml:37
+msgid ""
+"Returns the value of the given axis for things like triggers, touchpads, "
+"etc. that are embedded into the controller."
+msgstr ""
+
+#: doc/classes/ARVRController.xml:43
+msgid ""
+"Returns the ID of the joystick object bound to this. Every controller "
+"tracked by the [ARVRServer] that has buttons and axis will also be "
+"registered as a joystick within Godot. This means that all the normal "
+"joystick tracking and input mapping will work for buttons and axis found on "
+"the AR/VR controllers. This ID is purely offered as information so you can "
+"link up the controller with its joystick entry."
+msgstr ""
+
+#: doc/classes/ARVRController.xml:49
+msgid ""
+"If provided by the [ARVRInterface], this returns a mesh associated with the "
+"controller. This can be used to visualize the controller."
+msgstr ""
+
+#: doc/classes/ARVRController.xml:56
+msgid ""
+"Returns [code]true[/code] if the button at index [code]button[/code] is "
+"pressed. See [enum JoystickList], in particular the [code]JOY_VR_*[/code] "
+"constants."
+msgstr ""
+
+#: doc/classes/ARVRController.xml:62
+msgid ""
+"The controller's ID.\n"
+"A controller ID of 0 is unbound and will always result in an inactive node. "
+"Controller ID 1 is reserved for the first controller that identifies itself "
+"as the left-hand controller and ID 2 is reserved for the first controller "
+"that identifies itself as the right-hand controller.\n"
+"For any other controller that the [ARVRServer] detects, we continue with "
+"controller ID 3.\n"
+"When a controller is turned off, its slot is freed. This ensures controllers "
+"will keep the same ID even when controllers with lower IDs are turned off."
+msgstr ""
+
+#: doc/classes/ARVRController.xml:68
+msgid ""
+"The degree to which the controller vibrates. Ranges from [code]0.0[/code] to "
+"[code]1.0[/code] with precision [code].01[/code]. If changed, updates "
+"[member ARVRPositionalTracker.rumble] accordingly.\n"
+"This is a useful property to animate if you want the controller to vibrate "
+"for a limited duration."
+msgstr ""
+
+#: doc/classes/ARVRController.xml:76
+msgid "Emitted when a button on this controller is pressed."
+msgstr ""
+
+#: doc/classes/ARVRController.xml:82
+msgid "Emitted when a button on this controller is released."
+msgstr ""
+
+#: doc/classes/ARVRController.xml:88
+msgid ""
+"Emitted when the mesh associated with the controller changes or when one "
+"becomes available. Generally speaking this will be a static mesh after "
+"becoming available."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:4
+msgid "Base class for an AR/VR interface implementation."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:7
+msgid ""
+"This class needs to be implemented to make an AR or VR platform available to "
+"Godot and these should be implemented as C++ modules or GDNative modules "
+"(note that for GDNative the subclass ARVRScriptInterface should be used). "
+"Part of the interface is exposed to GDScript so you can detect, enable and "
+"configure an AR or VR platform.\n"
+"Interfaces should be written in such a way that simply enabling them will "
+"give us a working setup. You can query the available interfaces through "
+"[ARVRServer]."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:17
+msgid ""
+"If this is an AR interface that requires displaying a camera feed as the "
+"background, this method returns the feed ID in the [CameraServer] for this "
+"interface."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:23
+msgid ""
+"Returns a combination of [enum Capabilities] flags providing information "
+"about the capabilities of this interface."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:29
+msgid "Returns the name of this interface (OpenVR, OpenHMD, ARKit, etc)."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:35
+msgid ""
+"Returns the resolution at which we should render our intermediate results "
+"before things like lens distortion are applied by the VR platform."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:41
+msgid ""
+"If supported, returns the status of our tracking. This will allow you to "
+"provide feedback to the user whether there are issues with positional "
+"tracking."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:47
+msgid ""
+"Call this to initialize this interface. The first interface that is "
+"initialized is identified as the primary interface and it will be used for "
+"rendering output.\n"
+"After initializing the interface you want to use you then need to enable the "
+"AR/VR mode of a viewport and rendering should commence.\n"
+"[b]Note:[/b] You must enable the AR/VR mode on the main viewport for any "
+"device that uses the main output of Godot, such as for mobile VR.\n"
+"If you do this for a platform that handles its own output (such as OpenVR) "
+"Godot will show just one eye without distortion on screen. Alternatively, "
+"you can add a separate viewport node to your scene and enable AR/VR on that "
+"viewport. It will be used to output to the HMD, leaving you free to do "
+"anything you like in the main window, such as using a separate camera as a "
+"spectator camera or rendering something completely different.\n"
+"While currently not used, you can activate additional interfaces. You may "
+"wish to do this if you want to track controllers from other platforms. "
+"However, at this point in time only one interface can render to an HMD."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:57
+msgid ""
+"Returns [code]true[/code] if the current output of this interface is in "
+"stereo."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:63
+msgid "Turns the interface off."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:69
+msgid "On an AR interface, [code]true[/code] if anchor detection is enabled."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:72
+msgid "[code]true[/code] if this interface been initialized."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:75
+msgid "[code]true[/code] if this is the primary interface."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:80
+msgid "No ARVR capabilities."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:83
+msgid ""
+"This interface can work with normal rendering output (non-HMD based AR)."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:86
+msgid "This interface supports stereoscopic rendering."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:89
+msgid "This interface supports AR (video background and real world tracking)."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:92
+msgid ""
+"This interface outputs to an external device. If the main viewport is used, "
+"the on screen output is an unmodified buffer of either the left or right eye "
+"(stretched if the viewport size is not changed to the same aspect ratio of "
+"[method get_render_targetsize]). Using a separate viewport node frees up the "
+"main viewport for other purposes."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:95
+msgid ""
+"Mono output, this is mostly used internally when retrieving positioning "
+"information for our camera node or when stereo scopic rendering is not "
+"supported."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:98
+msgid ""
+"Left eye output, this is mostly used internally when rendering the image for "
+"the left eye and obtaining positioning and projection information."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:101
+msgid ""
+"Right eye output, this is mostly used internally when rendering the image "
+"for the right eye and obtaining positioning and projection information."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:104
+msgid "Tracking is behaving as expected."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:107
+msgid ""
+"Tracking is hindered by excessive motion (the player is moving faster than "
+"tracking can keep up)."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:110
+msgid ""
+"Tracking is hindered by insufficient features, it's too dark (for camera-"
+"based tracking), player is blocked, etc."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:113
+msgid ""
+"We don't know the status of the tracking or this interface does not provide "
+"feedback."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:116
+msgid ""
+"Tracking is not functional (camera not plugged in or obscured, lighthouses "
+"turned off, etc.)."
+msgstr ""
+
+#: modules/gdnative/doc_classes/ARVRInterfaceGDNative.xml:4
+msgid "GDNative wrapper for an ARVR interface."
+msgstr ""
+
+#: modules/gdnative/doc_classes/ARVRInterfaceGDNative.xml:7
+msgid ""
+"This is a wrapper class for GDNative implementations of the ARVR interface. "
+"To use a GDNative ARVR interface, simply instantiate this object and set "
+"your GDNative library containing the ARVR interface implementation."
+msgstr ""
+
+#: doc/classes/ARVROrigin.xml:4
+msgid "The origin point in AR/VR."
+msgstr ""
+
+#: doc/classes/ARVROrigin.xml:7
+msgid ""
+"This is a special node within the AR/VR system that maps the physical "
+"location of the center of our tracking space to the virtual location within "
+"our game world.\n"
+"There should be only one of these nodes in your scene and you must have one. "
+"All the ARVRCamera, ARVRController and ARVRAnchor nodes should be direct "
+"children of this node for spatial tracking to work correctly.\n"
+"It is the position of this node that you update when your character needs to "
+"move through your game world while we're not moving in the real world. "
+"Movement in the real world is always in relation to this origin point.\n"
+"For example, if your character is driving a car, the ARVROrigin node should "
+"be a child node of this car. Or, if you're implementing a teleport system to "
+"move your character, you should change the position of this node."
+msgstr ""
+
+#: doc/classes/ARVROrigin.xml:19
+msgid ""
+"Allows you to adjust the scale to your game's units. Most AR/VR platforms "
+"assume a scale of 1 game world unit = 1 real world meter.\n"
+"[b]Note:[/b] This method is a passthrough to the [ARVRServer] itself."
+msgstr ""
+
+#: doc/classes/ARVRPositionalTracker.xml:4
+msgid "A tracked object."
+msgstr ""
+
+#: doc/classes/ARVRPositionalTracker.xml:7
+msgid ""
+"An instance of this object represents a device that is tracked, such as a "
+"controller or anchor point. HMDs aren't represented here as they are handled "
+"internally.\n"
+"As controllers are turned on and the AR/VR interface detects them, instances "
+"of this object are automatically added to this list of active tracking "
+"objects accessible through the [ARVRServer].\n"
+"The [ARVRController] and [ARVRAnchor] both consume objects of this type and "
+"should be used in your project. The positional trackers are just under-the-"
+"hood objects that make this all work. These are mostly exposed so that "
+"GDNative-based interfaces can interact with them."
+msgstr ""
+
+#: doc/classes/ARVRPositionalTracker.xml:18
+msgid ""
+"Returns the hand holding this tracker, if known. See [enum TrackerHand] "
+"constants."
+msgstr ""
+
+#: doc/classes/ARVRPositionalTracker.xml:24
+msgid ""
+"If this is a controller that is being tracked, the controller will also be "
+"represented by a joystick entry with this ID."
+msgstr ""
+
+#: doc/classes/ARVRPositionalTracker.xml:30
+msgid ""
+"Returns the mesh related to a controller or anchor point if one is available."
+msgstr ""
+
+#: doc/classes/ARVRPositionalTracker.xml:36
+msgid "Returns the controller or anchor point's name if available."
+msgstr ""
+
+#: doc/classes/ARVRPositionalTracker.xml:42
+msgid "Returns the controller's orientation matrix."
+msgstr ""
+
+#: doc/classes/ARVRPositionalTracker.xml:48
+msgid "Returns the world-space controller position."
+msgstr ""
+
+#: doc/classes/ARVRPositionalTracker.xml:54
+msgid ""
+"Returns the internal tracker ID. This uniquely identifies the tracker per "
+"tracker type and matches the ID you need to specify for nodes such as the "
+"[ARVRController] and [ARVRAnchor] nodes."
+msgstr ""
+
+#: doc/classes/ARVRPositionalTracker.xml:60
+msgid "Returns [code]true[/code] if this device tracks orientation."
+msgstr ""
+
+#: doc/classes/ARVRPositionalTracker.xml:66
+msgid "Returns [code]true[/code] if this device tracks position."
+msgstr ""
+
+#: doc/classes/ARVRPositionalTracker.xml:73
+msgid "Returns the transform combining this device's orientation and position."
+msgstr ""
+
+#: doc/classes/ARVRPositionalTracker.xml:79
+msgid "Returns the tracker's type."
+msgstr ""
+
+#: doc/classes/ARVRPositionalTracker.xml:85
+msgid ""
+"The degree to which the tracker rumbles. Ranges from [code]0.0[/code] to "
+"[code]1.0[/code] with precision [code].01[/code]."
+msgstr ""
+
+#: doc/classes/ARVRPositionalTracker.xml:90
+msgid "The hand this tracker is held in is unknown or not applicable."
+msgstr ""
+
+#: doc/classes/ARVRPositionalTracker.xml:93
+msgid "This tracker is the left hand controller."
+msgstr ""
+
+#: doc/classes/ARVRPositionalTracker.xml:96
+msgid "This tracker is the right hand controller."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:4
+msgid "Server for AR and VR features."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:7
+msgid ""
+"The AR/VR server is the heart of our Advanced and Virtual Reality solution "
+"and handles all the processing."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:17
+msgid "Registers an [ARVRInterface] object."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:24
+msgid ""
+"Registers a new [ARVRPositionalTracker] that tracks a spatial location in "
+"real space."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:32
+msgid ""
+"This is an important function to understand correctly. AR and VR platforms "
+"all handle positioning slightly differently.\n"
+"For platforms that do not offer spatial tracking, our origin point (0,0,0) "
+"is the location of our HMD, but you have little control over the direction "
+"the player is facing in the real world.\n"
+"For platforms that do offer spatial tracking, our origin point depends very "
+"much on the system. For OpenVR, our origin point is usually the center of "
+"the tracking space, on the ground. For other platforms, it's often the "
+"location of the tracking camera.\n"
+"This method allows you to center your tracker on the location of the HMD. It "
+"will take the current location of the HMD and use that to adjust all your "
+"tracking data; in essence, realigning the real world to your player's "
+"current position in the game world.\n"
+"For this method to produce usable results, tracking information must be "
+"available. This often takes a few frames after starting your game.\n"
+"You should call this method after a few seconds have passed. For instance, "
+"when the user requests a realignment of the display holding a designated "
+"button on a controller for a short period of time, or when implementing a "
+"teleport mechanism."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:44
+msgid ""
+"Clears our current primary interface if it is set to the provided interface."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:51
+msgid ""
+"Finds an interface by its name. For instance, if your project uses "
+"capabilities of an AR/VR platform, you can find the interface for that "
+"platform by name and initialize it."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:57
+msgid "Returns the primary interface's transformation."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:64
+msgid ""
+"Returns the interface registered at a given index in our list of interfaces."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:70
+msgid ""
+"Returns the number of interfaces currently registered with the AR/VR server. "
+"If your project supports multiple AR/VR platforms, you can look through the "
+"available interface, and either present the user with a selection or simply "
+"try to initialize each interface and use the first one that returns "
+"[code]true[/code]."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:76
+msgid ""
+"Returns a list of available interfaces the ID and name of each interface."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:82
+msgid ""
+"Returns the absolute timestamp (in μs) of the last [ARVRServer] commit of "
+"the AR/VR eyes to [VisualServer]. The value comes from an internal call to "
+"[method OS.get_ticks_usec]."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:88
+msgid ""
+"Returns the duration (in μs) of the last frame. This is computed as the "
+"difference between [method get_last_commit_usec] and [method "
+"get_last_process_usec] when committing."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:94
+msgid ""
+"Returns the absolute timestamp (in μs) of the last [ARVRServer] process "
+"callback. The value comes from an internal call to [method OS."
+"get_ticks_usec]."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:100
+msgid ""
+"Returns the reference frame transform. Mostly used internally and exposed "
+"for GDNative build interfaces."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:107
+msgid "Returns the positional tracker at the given ID."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:113
+msgid "Returns the number of trackers currently registered."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:120
+msgid "Removes this interface."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:127
+msgid "Removes this positional tracker."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:133
+msgid "The primary [ARVRInterface] currently bound to the [ARVRServer]."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:136
+msgid ""
+"Allows you to adjust the scale to your game's units. Most AR/VR platforms "
+"assume a scale of 1 game world unit = 1 real world meter."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:143
+msgid "Emitted when a new interface has been added."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:149
+msgid "Emitted when an interface is removed."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:157
+msgid ""
+"Emitted when a new tracker has been added. If you don't use a fixed number "
+"of controllers or if you're using [ARVRAnchor]s for an AR solution, it is "
+"important to react to this signal to add the appropriate [ARVRController] or "
+"[ARVRAnchor] nodes related to this new tracker."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:165
+msgid ""
+"Emitted when a tracker is removed. You should remove any [ARVRController] or "
+"[ARVRAnchor] points if applicable. This is not mandatory, the nodes simply "
+"become inactive and will be made active again when a new tracker becomes "
+"available (i.e. a new controller is switched on that takes the place of the "
+"previous one)."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:171
+msgid "The tracker tracks the location of a controller."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:174
+msgid "The tracker tracks the location of a base station."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:177
+msgid "The tracker tracks the location and size of an AR anchor."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:180
+msgid "Used internally to filter trackers of any known type."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:183
+msgid "Used internally if we haven't set the tracker type yet."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:186
+msgid "Used internally to select all trackers."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:189
+msgid ""
+"Fully reset the orientation of the HMD. Regardless of what direction the "
+"user is looking to in the real world. The user will look dead ahead in the "
+"virtual world."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:192
+msgid ""
+"Resets the orientation but keeps the tilt of the device. So if we're looking "
+"down, we keep looking down but heading will be reset."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:195
+msgid ""
+"Does not reset the orientation of the HMD, only the position of the player "
+"gets centered."
+msgstr ""
+
+#: doc/classes/AspectRatioContainer.xml:4
+msgid "Container that preserves its child controls' aspect ratio."
+msgstr ""
+
+#: doc/classes/AspectRatioContainer.xml:7
+msgid ""
+"Arranges child controls in a way to preserve their aspect ratio "
+"automatically whenever the container is resized. Solves the problem where "
+"the container size is dynamic and the contents' size needs to adjust "
+"accordingly without losing proportions."
+msgstr ""
+
+#: doc/classes/AspectRatioContainer.xml:15
+msgid "Specifies the horizontal relative position of child controls."
+msgstr ""
+
+#: doc/classes/AspectRatioContainer.xml:18
+msgid "Specifies the vertical relative position of child controls."
+msgstr ""
+
+#: doc/classes/AspectRatioContainer.xml:21
+msgid ""
+"The aspect ratio to enforce on child controls. This is the width divided by "
+"the height. The ratio depends on the [member stretch_mode]."
+msgstr ""
+
+#: doc/classes/AspectRatioContainer.xml:24
+msgid "The stretch mode used to align child controls."
+msgstr ""
+
+#: doc/classes/AspectRatioContainer.xml:29
+msgid ""
+"The height of child controls is automatically adjusted based on the width of "
+"the container."
+msgstr ""
+
+#: doc/classes/AspectRatioContainer.xml:32
+msgid ""
+"The width of child controls is automatically adjusted based on the height of "
+"the container."
+msgstr ""
+
+#: doc/classes/AspectRatioContainer.xml:35
+msgid ""
+"The bounding rectangle of child controls is automatically adjusted to fit "
+"inside the container while keeping the aspect ratio."
+msgstr ""
+
+#: doc/classes/AspectRatioContainer.xml:38
+msgid ""
+"The width and height of child controls is automatically adjusted to make "
+"their bounding rectangle cover the entire area of the container while "
+"keeping the aspect ratio.\n"
+"When the bounding rectangle of child controls exceed the container's size "
+"and [member Control.rect_clip_content] is enabled, this allows to show only "
+"the container's area restricted by its own bounding rectangle."
+msgstr ""
+
+#: doc/classes/AspectRatioContainer.xml:42
+msgid ""
+"Aligns child controls with the beginning (left or top) of the container."
+msgstr ""
+
+#: doc/classes/AspectRatioContainer.xml:45
+msgid "Aligns child controls with the center of the container."
+msgstr ""
+
+#: doc/classes/AspectRatioContainer.xml:48
+msgid "Aligns child controls with the end (right or bottom) of the container."
+msgstr ""
+
+#: doc/classes/AStar.xml:4
+msgid ""
+"An implementation of A* to find the shortest paths among connected points in "
+"space."
+msgstr ""
+
+#: doc/classes/AStar.xml:7
+msgid ""
+"A* (A star) is a computer algorithm that is widely used in pathfinding and "
+"graph traversal, the process of plotting short paths among vertices "
+"(points), passing through a given set of edges (segments). It enjoys "
+"widespread use due to its performance and accuracy. Godot's A* "
+"implementation uses points in three-dimensional space and Euclidean "
+"distances by default.\n"
+"You must add points manually with [method add_point] and create segments "
+"manually with [method connect_points]. Then you can test if there is a path "
+"between two points with the [method are_points_connected] function, get a "
+"path containing indices by [method get_id_path], or one containing actual "
+"coordinates with [method get_point_path].\n"
+"It is also possible to use non-Euclidean distances. To do so, create a class "
+"that extends [code]AStar[/code] and override methods [method _compute_cost] "
+"and [method _estimate_cost]. Both take two indices and return a length, as "
+"is shown in the following example.\n"
+"[codeblock]\n"
+"class MyAStar:\n"
+" extends AStar\n"
+"\n"
+" func _compute_cost(u, v):\n"
+" return abs(u - v)\n"
+"\n"
+" func _estimate_cost(u, v):\n"
+" return min(0, abs(u - v) - 1)\n"
+"[/codeblock]\n"
+"[method _estimate_cost] should return a lower bound of the distance, i.e. "
+"[code]_estimate_cost(u, v) <= _compute_cost(u, v)[/code]. This serves as a "
+"hint to the algorithm because the custom [code]_compute_cost[/code] might be "
+"computation-heavy. If this is not the case, make [method _estimate_cost] "
+"return the same value as [method _compute_cost] to provide the algorithm "
+"with the most accurate information.\n"
+"If the default [method _estimate_cost] and [method _compute_cost] methods "
+"are used, or if the supplied [method _estimate_cost] method returns a lower "
+"bound of the cost, then the paths returned by A* will be the lowest-cost "
+"paths. Here, the cost of a path equals the sum of the [method _compute_cost] "
+"results of all segments in the path multiplied by the [code]weight_scale[/"
+"code]s of the endpoints of the respective segments. If the default methods "
+"are used and the [code]weight_scale[/code]s of all points are set to "
+"[code]1.0[/code], then this equals the sum of Euclidean distances of all "
+"segments in the path."
+msgstr ""
+
+#: doc/classes/AStar.xml:31
+msgid ""
+"Called when computing the cost between two connected points.\n"
+"Note that this function is hidden in the default [code]AStar[/code] class."
+msgstr ""
+
+#: doc/classes/AStar.xml:40
+msgid ""
+"Called when estimating the cost between a point and the path's ending "
+"point.\n"
+"Note that this function is hidden in the default [code]AStar[/code] class."
+msgstr ""
+
+#: doc/classes/AStar.xml:50
+msgid ""
+"Adds a new point at the given position with the given identifier. The "
+"[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must "
+"be 1 or larger.\n"
+"The [code]weight_scale[/code] is multiplied by the result of [method "
+"_compute_cost] when determining the overall cost of traveling across a "
+"segment from a neighboring point to this point. Thus, all else being equal, "
+"the algorithm prefers points with lower [code]weight_scale[/code]s to form a "
+"path.\n"
+"[codeblock]\n"
+"var astar = AStar.new()\n"
+"astar.add_point(1, Vector3(1, 0, 0), 4) # Adds the point (1, 0, 0) with "
+"weight_scale 4 and id 1\n"
+"[/codeblock]\n"
+"If there already exists a point for the given [code]id[/code], its position "
+"and weight scale are updated to the given values."
+msgstr ""
+
+#: doc/classes/AStar.xml:65
+msgid ""
+"Returns whether the two given points are directly connected by a segment. If "
+"[code]bidirectional[/code] is [code]false[/code], returns whether movement "
+"from [code]id[/code] to [code]to_id[/code] is possible through this segment."
+msgstr ""
+
+#: doc/classes/AStar.xml:71 doc/classes/AStar2D.xml:56
+msgid "Clears all the points and segments."
+msgstr ""
+
+#: doc/classes/AStar.xml:80
+msgid ""
+"Creates a segment between the given points. If [code]bidirectional[/code] is "
+"[code]false[/code], only movement from [code]id[/code] to [code]to_id[/code] "
+"is allowed, not the reverse direction.\n"
+"[codeblock]\n"
+"var astar = AStar.new()\n"
+"astar.add_point(1, Vector3(1, 1, 0))\n"
+"astar.add_point(2, Vector3(0, 5, 0))\n"
+"astar.connect_points(1, 2, false)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/AStar.xml:95
+msgid ""
+"Deletes the segment between the given points. If [code]bidirectional[/code] "
+"is [code]false[/code], only movement from [code]id[/code] to [code]to_id[/"
+"code] is prevented, and a unidirectional segment possibly remains."
+msgstr ""
+
+#: doc/classes/AStar.xml:101 doc/classes/AStar2D.xml:85
+msgid "Returns the next available point ID with no point associated to it."
+msgstr ""
+
+#: doc/classes/AStar.xml:109 doc/classes/AStar2D.xml:93
+msgid ""
+"Returns the ID of the closest point to [code]to_position[/code], optionally "
+"taking disabled points into account. Returns [code]-1[/code] if there are no "
+"points in the points pool.\n"
+"[b]Note:[/b] If several points are the closest to [code]to_position[/code], "
+"the one with the smallest ID will be returned, ensuring a deterministic "
+"result."
+msgstr ""
+
+#: doc/classes/AStar.xml:117
+msgid ""
+"Returns the closest position to [code]to_position[/code] that resides inside "
+"a segment between two connected points.\n"
+"[codeblock]\n"
+"var astar = AStar.new()\n"
+"astar.add_point(1, Vector3(0, 0, 0))\n"
+"astar.add_point(2, Vector3(0, 5, 0))\n"
+"astar.connect_points(1, 2)\n"
+"var res = astar.get_closest_position_in_segment(Vector3(3, 3, 0)) # Returns "
+"(0, 3, 0)\n"
+"[/codeblock]\n"
+"The result is in the segment that goes from [code]y = 0[/code] to [code]y = "
+"5[/code]. It's the closest position in the segment to the given point."
+msgstr ""
+
+#: doc/classes/AStar.xml:133
+msgid ""
+"Returns an array with the IDs of the points that form the path found by "
+"AStar between the given points. The array is ordered from the starting point "
+"to the ending point of the path.\n"
+"[codeblock]\n"
+"var astar = AStar.new()\n"
+"astar.add_point(1, Vector3(0, 0, 0))\n"
+"astar.add_point(2, Vector3(0, 1, 0), 1) # Default weight is 1\n"
+"astar.add_point(3, Vector3(1, 1, 0))\n"
+"astar.add_point(4, Vector3(2, 0, 0))\n"
+"\n"
+"astar.connect_points(1, 2, false)\n"
+"astar.connect_points(2, 3, false)\n"
+"astar.connect_points(4, 3, false)\n"
+"astar.connect_points(1, 4, false)\n"
+"\n"
+"var res = astar.get_id_path(1, 3) # Returns [1, 2, 3]\n"
+"[/codeblock]\n"
+"If you change the 2nd point's weight to 3, then the result will be [code][1, "
+"4, 3][/code] instead, because now even though the distance is longer, it's "
+"\"easier\" to get through point 4 than through point 2."
+msgstr ""
+
+#: doc/classes/AStar.xml:154 doc/classes/AStar2D.xml:138
+msgid ""
+"Returns the capacity of the structure backing the points, useful in "
+"conjunction with [code]reserve_space[/code]."
+msgstr ""
+
+#: doc/classes/AStar.xml:161
+msgid ""
+"Returns an array with the IDs of the points that form the connection with "
+"the given point.\n"
+"[codeblock]\n"
+"var astar = AStar.new()\n"
+"astar.add_point(1, Vector3(0, 0, 0))\n"
+"astar.add_point(2, Vector3(0, 1, 0))\n"
+"astar.add_point(3, Vector3(1, 1, 0))\n"
+"astar.add_point(4, Vector3(2, 0, 0))\n"
+"\n"
+"astar.connect_points(1, 2, true)\n"
+"astar.connect_points(1, 3, true)\n"
+"\n"
+"var neighbors = astar.get_point_connections(1) # Returns [2, 3]\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/AStar.xml:179 doc/classes/AStar2D.xml:163
+msgid "Returns the number of points currently in the points pool."
+msgstr ""
+
+#: doc/classes/AStar.xml:187
+msgid ""
+"Returns an array with the points that are in the path found by AStar between "
+"the given points. The array is ordered from the starting point to the ending "
+"point of the path.\n"
+"[b]Note:[/b] This method is not thread-safe. If called from a [Thread], it "
+"will return an empty [PoolVector3Array] and will print an error message."
+msgstr ""
+
+#: doc/classes/AStar.xml:195 doc/classes/AStar2D.xml:179
+msgid ""
+"Returns the position of the point associated with the given [code]id[/code]."
+msgstr ""
+
+#: doc/classes/AStar.xml:202 doc/classes/AStar2D.xml:186
+msgid ""
+"Returns the weight scale of the point associated with the given [code]id[/"
+"code]."
+msgstr ""
+
+#: doc/classes/AStar.xml:208 doc/classes/AStar2D.xml:192
+msgid "Returns an array of all points."
+msgstr ""
+
+#: doc/classes/AStar.xml:215 doc/classes/AStar2D.xml:199
+msgid ""
+"Returns whether a point associated with the given [code]id[/code] exists."
+msgstr ""
+
+#: doc/classes/AStar.xml:222 doc/classes/AStar2D.xml:206
+msgid ""
+"Returns whether a point is disabled or not for pathfinding. By default, all "
+"points are enabled."
+msgstr ""
+
+#: doc/classes/AStar.xml:229 doc/classes/AStar2D.xml:213
+msgid ""
+"Removes the point associated with the given [code]id[/code] from the points "
+"pool."
+msgstr ""
+
+#: doc/classes/AStar.xml:236 doc/classes/AStar2D.xml:220
+msgid ""
+"Reserves space internally for [code]num_nodes[/code] points, useful if "
+"you're adding a known large number of points at once, for a grid for "
+"instance. New capacity must be greater or equals to old capacity."
+msgstr ""
+
+#: doc/classes/AStar.xml:244 doc/classes/AStar2D.xml:228
+msgid ""
+"Disables or enables the specified point for pathfinding. Useful for making a "
+"temporary obstacle."
+msgstr ""
+
+#: doc/classes/AStar.xml:252 doc/classes/AStar2D.xml:236
+msgid ""
+"Sets the [code]position[/code] for the point with the given [code]id[/code]."
+msgstr ""
+
+#: doc/classes/AStar.xml:260 doc/classes/AStar2D.xml:244
+msgid ""
+"Sets the [code]weight_scale[/code] for the point with the given [code]id[/"
+"code]. The [code]weight_scale[/code] is multiplied by the result of [method "
+"_compute_cost] when determining the overall cost of traveling across a "
+"segment from a neighboring point to this point."
+msgstr ""
+
+#: doc/classes/AStar2D.xml:4
+msgid "AStar class representation that uses 2D vectors as edges."
+msgstr ""
+
+#: doc/classes/AStar2D.xml:7
+msgid ""
+"This is a wrapper for the [AStar] class which uses 2D vectors instead of 3D "
+"vectors."
+msgstr ""
+
+#: doc/classes/AStar2D.xml:17
+msgid ""
+"Called when computing the cost between two connected points.\n"
+"Note that this function is hidden in the default [code]AStar2D[/code] class."
+msgstr ""
+
+#: doc/classes/AStar2D.xml:26
+msgid ""
+"Called when estimating the cost between a point and the path's ending "
+"point.\n"
+"Note that this function is hidden in the default [code]AStar2D[/code] class."
+msgstr ""
+
+#: doc/classes/AStar2D.xml:36
+msgid ""
+"Adds a new point at the given position with the given identifier. The "
+"[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must "
+"be 1 or larger.\n"
+"The [code]weight_scale[/code] is multiplied by the result of [method "
+"_compute_cost] when determining the overall cost of traveling across a "
+"segment from a neighboring point to this point. Thus, all else being equal, "
+"the algorithm prefers points with lower [code]weight_scale[/code]s to form a "
+"path.\n"
+"[codeblock]\n"
+"var astar = AStar2D.new()\n"
+"astar.add_point(1, Vector2(1, 0), 4) # Adds the point (1, 0) with "
+"weight_scale 4 and id 1\n"
+"[/codeblock]\n"
+"If there already exists a point for the given [code]id[/code], its position "
+"and weight scale are updated to the given values."
+msgstr ""
+
+#: doc/classes/AStar2D.xml:50
+msgid "Returns whether there is a connection/segment between the given points."
+msgstr ""
+
+#: doc/classes/AStar2D.xml:65
+msgid ""
+"Creates a segment between the given points. If [code]bidirectional[/code] is "
+"[code]false[/code], only movement from [code]id[/code] to [code]to_id[/code] "
+"is allowed, not the reverse direction.\n"
+"[codeblock]\n"
+"var astar = AStar2D.new()\n"
+"astar.add_point(1, Vector2(1, 1))\n"
+"astar.add_point(2, Vector2(0, 5))\n"
+"astar.connect_points(1, 2, false)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/AStar2D.xml:79
+msgid "Deletes the segment between the given points."
+msgstr ""
+
+#: doc/classes/AStar2D.xml:101
+msgid ""
+"Returns the closest position to [code]to_position[/code] that resides inside "
+"a segment between two connected points.\n"
+"[codeblock]\n"
+"var astar = AStar2D.new()\n"
+"astar.add_point(1, Vector2(0, 0))\n"
+"astar.add_point(2, Vector2(0, 5))\n"
+"astar.connect_points(1, 2)\n"
+"var res = astar.get_closest_position_in_segment(Vector2(3, 3)) # Returns (0, "
+"3)\n"
+"[/codeblock]\n"
+"The result is in the segment that goes from [code]y = 0[/code] to [code]y = "
+"5[/code]. It's the closest position in the segment to the given point."
+msgstr ""
+
+#: doc/classes/AStar2D.xml:117
+msgid ""
+"Returns an array with the IDs of the points that form the path found by "
+"AStar2D between the given points. The array is ordered from the starting "
+"point to the ending point of the path.\n"
+"[codeblock]\n"
+"var astar = AStar2D.new()\n"
+"astar.add_point(1, Vector2(0, 0))\n"
+"astar.add_point(2, Vector2(0, 1), 1) # Default weight is 1\n"
+"astar.add_point(3, Vector2(1, 1))\n"
+"astar.add_point(4, Vector2(2, 0))\n"
+"\n"
+"astar.connect_points(1, 2, false)\n"
+"astar.connect_points(2, 3, false)\n"
+"astar.connect_points(4, 3, false)\n"
+"astar.connect_points(1, 4, false)\n"
+"\n"
+"var res = astar.get_id_path(1, 3) # Returns [1, 2, 3]\n"
+"[/codeblock]\n"
+"If you change the 2nd point's weight to 3, then the result will be [code][1, "
+"4, 3][/code] instead, because now even though the distance is longer, it's "
+"\"easier\" to get through point 4 than through point 2."
+msgstr ""
+
+#: doc/classes/AStar2D.xml:145
+msgid ""
+"Returns an array with the IDs of the points that form the connection with "
+"the given point.\n"
+"[codeblock]\n"
+"var astar = AStar2D.new()\n"
+"astar.add_point(1, Vector2(0, 0))\n"
+"astar.add_point(2, Vector2(0, 1))\n"
+"astar.add_point(3, Vector2(1, 1))\n"
+"astar.add_point(4, Vector2(2, 0))\n"
+"\n"
+"astar.connect_points(1, 2, true)\n"
+"astar.connect_points(1, 3, true)\n"
+"\n"
+"var neighbors = astar.get_point_connections(1) # Returns [2, 3]\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/AStar2D.xml:171
+msgid ""
+"Returns an array with the points that are in the path found by AStar2D "
+"between the given points. The array is ordered from the starting point to "
+"the ending point of the path.\n"
+"[b]Note:[/b] This method is not thread-safe. If called from a [Thread], it "
+"will return an empty [PoolVector2Array] and will print an error message."
+msgstr ""
+
+#: doc/classes/AtlasTexture.xml:4
+msgid ""
+"Crops out one part of a texture, such as a texture from a texture atlas."
+msgstr ""
+
+#: doc/classes/AtlasTexture.xml:7
+msgid ""
+"[Texture] resource that crops out one part of the [member atlas] texture, "
+"defined by [member region]. The main use case is cropping out textures from "
+"a texture atlas, which is a big texture file that packs multiple smaller "
+"textures. Consists of a [Texture] for the [member atlas], a [member region] "
+"that defines the area of [member atlas] to use, and a [member margin] that "
+"defines the border width.\n"
+"[AtlasTexture] cannot be used in an [AnimatedTexture], cannot be tiled in "
+"nodes such as [TextureRect], and does not work properly if used inside of "
+"other [AtlasTexture] resources. Multiple [AtlasTexture] resources can be "
+"used to crop multiple textures from the atlas. Using a texture atlas helps "
+"to optimize video memory costs and render calls compared to using multiple "
+"small files.\n"
+"[b]Note:[/b] AtlasTextures don't support repetition. The [constant Texture."
+"FLAG_REPEAT] and [constant Texture.FLAG_MIRRORED_REPEAT] flags are ignored "
+"when using an AtlasTexture."
+msgstr ""
+
+#: doc/classes/AtlasTexture.xml:17
+msgid "The texture that contains the atlas. Can be any [Texture] subtype."
+msgstr ""
+
+#: doc/classes/AtlasTexture.xml:20
+msgid ""
+"If [code]true[/code], clips the area outside of the region to avoid bleeding "
+"of the surrounding texture pixels."
+msgstr ""
+
+#: doc/classes/AtlasTexture.xml:24
+msgid ""
+"The margin around the region. The [Rect2]'s [member Rect2.size] parameter "
+"(\"w\" and \"h\" in the editor) resizes the texture so it fits within the "
+"margin."
+msgstr ""
+
+#: doc/classes/AtlasTexture.xml:27
+msgid "The AtlasTexture's used region."
+msgstr ""
+
+#: doc/classes/AudioBusLayout.xml:4
+msgid "Stores information about the audio buses."
+msgstr ""
+
+#: doc/classes/AudioBusLayout.xml:7
+msgid ""
+"Stores position, muting, solo, bypass, effects, effect position, volume, and "
+"the connections between buses. See [AudioServer] for usage."
+msgstr ""
+
+#: doc/classes/AudioEffect.xml:4
+msgid "Audio effect for audio."
+msgstr ""
+
+#: doc/classes/AudioEffect.xml:7
+msgid ""
+"Base resource for audio bus. Applies an audio effect on the bus that the "
+"resource is applied on."
+msgstr ""
+
+#: doc/classes/AudioEffect.xml:10 doc/classes/AudioEffectRecord.xml:11
+#: doc/classes/AudioServer.xml:12 doc/classes/AudioStream.xml:12
+#: doc/classes/AudioStreamPlayer.xml:15
+msgid "https://godotengine.org/asset-library/asset/527"
+msgstr ""
+
+#: doc/classes/AudioEffectAmplify.xml:4
+msgid ""
+"Adds an amplifying audio effect to an audio bus.\n"
+"Increases or decreases the volume of the selected audio bus."
+msgstr ""
+
+#: doc/classes/AudioEffectAmplify.xml:8
+msgid "Increases or decreases the volume being routed through the audio bus."
+msgstr ""
+
+#: doc/classes/AudioEffectAmplify.xml:16
+msgid ""
+"Amount of amplification in decibels. Positive values make the sound louder, "
+"negative values make it quieter. Value can range from -80 to 24."
+msgstr ""
+
+#: doc/classes/AudioEffectBandLimitFilter.xml:4
+msgid "Adds a band limit filter to the audio bus."
+msgstr ""
+
+#: doc/classes/AudioEffectBandLimitFilter.xml:7
+msgid ""
+"Limits the frequencies in a range around the [member AudioEffectFilter."
+"cutoff_hz] and allows frequencies outside of this range to pass."
+msgstr ""
+
+#: doc/classes/AudioEffectBandPassFilter.xml:4
+msgid "Adds a band pass filter to the audio bus."
+msgstr ""
+
+#: doc/classes/AudioEffectBandPassFilter.xml:7
+msgid ""
+"Attenuates the frequencies inside of a range around the [member "
+"AudioEffectFilter.cutoff_hz] and cuts frequencies outside of this band."
+msgstr ""
+
+#: doc/classes/AudioEffectCapture.xml:4
+msgid "Captures audio from an audio bus in real-time."
+msgstr ""
+
+#: doc/classes/AudioEffectCapture.xml:7
+msgid ""
+"AudioEffectCapture is an AudioEffect which copies all audio frames from the "
+"attached audio effect bus into its internal ring buffer.\n"
+"Application code should consume these audio frames from this ring buffer "
+"using [method get_buffer] and process it as needed, for example to capture "
+"data from a microphone, implement application defined effects, or to "
+"transmit audio over the network."
+msgstr ""
+
+#: doc/classes/AudioEffectCapture.xml:17
+msgid ""
+"Returns [code]true[/code] if at least [code]frames[/code] audio frames are "
+"available to read in the internal ring buffer."
+msgstr ""
+
+#: doc/classes/AudioEffectCapture.xml:23
+msgid "Clears the internal ring buffer."
+msgstr ""
+
+#: doc/classes/AudioEffectCapture.xml:30
+msgid ""
+"Gets the next [code]frames[/code] audio samples from the internal ring "
+"buffer.\n"
+"Returns a [PoolVector2Array] containing exactly [code]frames[/code] audio "
+"samples if available, or an empty [PoolVector2Array] if insufficient data "
+"was available."
+msgstr ""
+
+#: doc/classes/AudioEffectCapture.xml:37
+msgid "Returns the total size of the internal ring buffer in frames."
+msgstr ""
+
+#: doc/classes/AudioEffectCapture.xml:43
+msgid ""
+"Returns the number of audio frames discarded from the audio bus due to full "
+"buffer."
+msgstr ""
+
+#: doc/classes/AudioEffectCapture.xml:49
+msgid ""
+"Returns the number of frames available to read using [method get_buffer]."
+msgstr ""
+
+#: doc/classes/AudioEffectCapture.xml:55
+msgid "Returns the number of audio frames inserted from the audio bus."
+msgstr ""
+
+#: doc/classes/AudioEffectCapture.xml:61
+msgid ""
+"Length of the internal ring buffer, in seconds. Setting the buffer length "
+"will have no effect if already initialized."
+msgstr ""
+
+#: doc/classes/AudioEffectChorus.xml:4
+msgid "Adds a chorus audio effect."
+msgstr ""
+
+#: doc/classes/AudioEffectChorus.xml:7
+msgid ""
+"Adds a chorus audio effect. The effect applies a filter with voices to "
+"duplicate the audio source and manipulate it through the filter."
+msgstr ""
+
+#: doc/classes/AudioEffectChorus.xml:93
+msgid "The effect's raw signal."
+msgstr ""
+
+#: doc/classes/AudioEffectChorus.xml:96 doc/classes/AudioEffectChorus.xml:114
+#: doc/classes/AudioEffectChorus.xml:132 doc/classes/AudioEffectChorus.xml:150
+msgid "The voice's cutoff frequency."
+msgstr ""
+
+#: doc/classes/AudioEffectChorus.xml:99 doc/classes/AudioEffectChorus.xml:117
+#: doc/classes/AudioEffectChorus.xml:135 doc/classes/AudioEffectChorus.xml:153
+msgid "The voice's signal delay."
+msgstr ""
+
+#: doc/classes/AudioEffectChorus.xml:102 doc/classes/AudioEffectChorus.xml:120
+#: doc/classes/AudioEffectChorus.xml:138 doc/classes/AudioEffectChorus.xml:156
+msgid "The voice filter's depth."
+msgstr ""
+
+#: doc/classes/AudioEffectChorus.xml:105 doc/classes/AudioEffectChorus.xml:123
+#: doc/classes/AudioEffectChorus.xml:141 doc/classes/AudioEffectChorus.xml:159
+msgid "The voice's volume."
+msgstr ""
+
+#: doc/classes/AudioEffectChorus.xml:108 doc/classes/AudioEffectChorus.xml:126
+#: doc/classes/AudioEffectChorus.xml:144 doc/classes/AudioEffectChorus.xml:162
+msgid "The voice's pan level."
+msgstr ""
+
+#: doc/classes/AudioEffectChorus.xml:111 doc/classes/AudioEffectChorus.xml:129
+#: doc/classes/AudioEffectChorus.xml:147 doc/classes/AudioEffectChorus.xml:165
+msgid "The voice's filter rate."
+msgstr ""
+
+#: doc/classes/AudioEffectChorus.xml:168
+msgid "The amount of voices in the effect."
+msgstr ""
+
+#: doc/classes/AudioEffectChorus.xml:171
+msgid "The effect's processed signal."
+msgstr ""
+
+#: doc/classes/AudioEffectCompressor.xml:4
+msgid ""
+"Adds a compressor audio effect to an audio bus.\n"
+"Reduces sounds that exceed a certain threshold level, smooths out the "
+"dynamics and increases the overall volume."
+msgstr ""
+
+#: doc/classes/AudioEffectCompressor.xml:8
+msgid ""
+"Dynamic range compressor reduces the level of the sound when the amplitude "
+"goes over a certain threshold in Decibels. One of the main uses of a "
+"compressor is to increase the dynamic range by clipping as little as "
+"possible (when sound goes over 0dB).\n"
+"Compressor has many uses in the mix:\n"
+"- In the Master bus to compress the whole output (although an "
+"[AudioEffectLimiter] is probably better).\n"
+"- In voice channels to ensure they sound as balanced as possible.\n"
+"- Sidechained. This can reduce the sound level sidechained with another "
+"audio bus for threshold detection. This technique is common in video game "
+"mixing to the level of music and SFX while voices are being heard.\n"
+"- Accentuates transients by using a wider attack, making effects sound more "
+"punchy."
+msgstr ""
+
+#: doc/classes/AudioEffectCompressor.xml:21
+msgid ""
+"Compressor's reaction time when the signal exceeds the threshold, in "
+"microseconds. Value can range from 20 to 2000."
+msgstr ""
+
+#: doc/classes/AudioEffectCompressor.xml:24
+msgid "Gain applied to the output signal."
+msgstr ""
+
+#: doc/classes/AudioEffectCompressor.xml:27
+msgid ""
+"Balance between original signal and effect signal. Value can range from 0 "
+"(totally dry) to 1 (totally wet)."
+msgstr ""
+
+#: doc/classes/AudioEffectCompressor.xml:30
+msgid ""
+"Amount of compression applied to the audio once it passes the threshold "
+"level. The higher the ratio, the more the loud parts of the audio will be "
+"compressed. Value can range from 1 to 48."
+msgstr ""
+
+#: doc/classes/AudioEffectCompressor.xml:33
+msgid ""
+"Compressor's delay time to stop reducing the signal after the signal level "
+"falls below the threshold, in milliseconds. Value can range from 20 to 2000."
+msgstr ""
+
+#: doc/classes/AudioEffectCompressor.xml:36
+msgid "Reduce the sound level using another audio bus for threshold detection."
+msgstr ""
+
+#: doc/classes/AudioEffectCompressor.xml:39
+msgid ""
+"The level above which compression is applied to the audio. Value can range "
+"from -60 to 0."
+msgstr ""
+
+#: doc/classes/AudioEffectDelay.xml:4
+msgid ""
+"Adds a delay audio effect to an audio bus. Plays input signal back after a "
+"period of time.\n"
+"Two tap delay and feedback options."
+msgstr ""
+
+#: doc/classes/AudioEffectDelay.xml:8
+msgid ""
+"Plays input signal back after a period of time. The delayed signal may be "
+"played back multiple times to create the sound of a repeating, decaying "
+"echo. Delay effects range from a subtle echo effect to a pronounced blending "
+"of previous sounds with new sounds."
+msgstr ""
+
+#: doc/classes/AudioEffectDelay.xml:16
+msgid ""
+"Output percent of original sound. At 0, only delayed sounds are output. "
+"Value can range from 0 to 1."
+msgstr ""
+
+#: doc/classes/AudioEffectDelay.xml:19
+msgid "If [code]true[/code], feedback is enabled."
+msgstr ""
+
+#: doc/classes/AudioEffectDelay.xml:22
+msgid "Feedback delay time in milliseconds."
+msgstr ""
+
+#: doc/classes/AudioEffectDelay.xml:25 doc/classes/AudioEffectDelay.xml:37
+msgid "Sound level for [code]tap1[/code]."
+msgstr ""
+
+#: doc/classes/AudioEffectDelay.xml:28
+msgid ""
+"Low-pass filter for feedback, in Hz. Frequencies below this value are "
+"filtered out of the source signal."
+msgstr ""
+
+#: doc/classes/AudioEffectDelay.xml:31
+msgid "If [code]true[/code], [code]tap1[/code] will be enabled."
+msgstr ""
+
+#: doc/classes/AudioEffectDelay.xml:34
+msgid "[code]tap1[/code] delay time in milliseconds."
+msgstr ""
+
+#: doc/classes/AudioEffectDelay.xml:40
+msgid ""
+"Pan position for [code]tap1[/code]. Value can range from -1 (fully left) to "
+"1 (fully right)."
+msgstr ""
+
+#: doc/classes/AudioEffectDelay.xml:43
+msgid "If [code]true[/code], [code]tap2[/code] will be enabled."
+msgstr ""
+
+#: doc/classes/AudioEffectDelay.xml:46
+msgid "[b]Tap2[/b] delay time in milliseconds."
+msgstr ""
+
+#: doc/classes/AudioEffectDelay.xml:49
+msgid "Sound level for [code]tap2[/code]."
+msgstr ""
+
+#: doc/classes/AudioEffectDelay.xml:52
+msgid ""
+"Pan position for [code]tap2[/code]. Value can range from -1 (fully left) to "
+"1 (fully right)."
+msgstr ""
+
+#: doc/classes/AudioEffectDistortion.xml:4
+msgid ""
+"Adds a distortion audio effect to an Audio bus.\n"
+"Modify the sound to make it distorted."
+msgstr ""
+
+#: doc/classes/AudioEffectDistortion.xml:8
+msgid ""
+"Different types are available: clip, tan, lo-fi (bit crushing), overdrive, "
+"or waveshape.\n"
+"By distorting the waveform the frequency content change, which will often "
+"make the sound \"crunchy\" or \"abrasive\". For games, it can simulate sound "
+"coming from some saturated device or speaker very efficiently."
+msgstr ""
+
+#: doc/classes/AudioEffectDistortion.xml:12
+#: doc/classes/AudioEffectFilter.xml:10
+#: doc/classes/AudioEffectHighShelfFilter.xml:9
+#: doc/classes/AudioEffectLowShelfFilter.xml:9 doc/classes/AudioServer.xml:10
+msgid "https://docs.godotengine.org/en/3.4/tutorials/audio/audio_buses.html"
+msgstr ""
+
+#: doc/classes/AudioEffectDistortion.xml:18
+msgid "Distortion power. Value can range from 0 to 1."
+msgstr ""
+
+#: doc/classes/AudioEffectDistortion.xml:21
+msgid ""
+"High-pass filter, in Hz. Frequencies higher than this value will not be "
+"affected by the distortion. Value can range from 1 to 20000."
+msgstr ""
+
+#: doc/classes/AudioEffectDistortion.xml:24
+msgid "Distortion type."
+msgstr ""
+
+#: doc/classes/AudioEffectDistortion.xml:27
+msgid ""
+"Increases or decreases the volume after the effect. Value can range from -80 "
+"to 24."
+msgstr ""
+
+#: doc/classes/AudioEffectDistortion.xml:30
+msgid ""
+"Increases or decreases the volume before the effect. Value can range from "
+"-60 to 60."
+msgstr ""
+
+#: doc/classes/AudioEffectDistortion.xml:35
+msgid ""
+"Digital distortion effect which cuts off peaks at the top and bottom of the "
+"waveform."
+msgstr ""
+
+#: doc/classes/AudioEffectDistortion.xml:40
+msgid ""
+"Low-resolution digital distortion effect. You can use it to emulate the "
+"sound of early digital audio devices."
+msgstr ""
+
+#: doc/classes/AudioEffectDistortion.xml:43
+msgid ""
+"Emulates the warm distortion produced by a field effect transistor, which is "
+"commonly used in solid-state musical instrument amplifiers."
+msgstr ""
+
+#: doc/classes/AudioEffectDistortion.xml:46
+msgid ""
+"Waveshaper distortions are used mainly by electronic musicians to achieve an "
+"extra-abrasive sound."
+msgstr ""
+
+#: doc/classes/AudioEffectEQ.xml:4
+msgid ""
+"Base class for audio equalizers. Gives you control over frequencies.\n"
+"Use it to create a custom equalizer if [AudioEffectEQ6], [AudioEffectEQ10] "
+"or [AudioEffectEQ21] don't fit your needs."
+msgstr ""
+
+#: doc/classes/AudioEffectEQ.xml:8
+msgid ""
+"AudioEffectEQ gives you control over frequencies. Use it to compensate for "
+"existing deficiencies in audio. AudioEffectEQs are useful on the Master bus "
+"to completely master a mix and give it more character. They are also useful "
+"when a game is run on a mobile device, to adjust the mix to that kind of "
+"speakers (it can be added but disabled when headphones are plugged)."
+msgstr ""
+
+#: doc/classes/AudioEffectEQ.xml:16
+msgid "Returns the number of bands of the equalizer."
+msgstr ""
+
+#: doc/classes/AudioEffectEQ.xml:23
+msgid "Returns the band's gain at the specified index, in dB."
+msgstr ""
+
+#: doc/classes/AudioEffectEQ.xml:31
+msgid "Sets band's gain at the specified index, in dB."
+msgstr ""
+
+#: doc/classes/AudioEffectEQ10.xml:4
+msgid ""
+"Adds a 10-band equalizer audio effect to an Audio bus. Gives you control "
+"over frequencies from 31 Hz to 16000 Hz.\n"
+"Each frequency can be modulated between -60/+24 dB."
+msgstr ""
+
+#: doc/classes/AudioEffectEQ10.xml:8
+msgid ""
+"Frequency bands:\n"
+"Band 1: 31 Hz\n"
+"Band 2: 62 Hz\n"
+"Band 3: 125 Hz\n"
+"Band 4: 250 Hz\n"
+"Band 5: 500 Hz\n"
+"Band 6: 1000 Hz\n"
+"Band 7: 2000 Hz\n"
+"Band 8: 4000 Hz\n"
+"Band 9: 8000 Hz\n"
+"Band 10: 16000 Hz\n"
+"See also [AudioEffectEQ], [AudioEffectEQ6], [AudioEffectEQ21]."
+msgstr ""
+
+#: doc/classes/AudioEffectEQ21.xml:4
+msgid ""
+"Adds a 21-band equalizer audio effect to an Audio bus. Gives you control "
+"over frequencies from 22 Hz to 22000 Hz.\n"
+"Each frequency can be modulated between -60/+24 dB."
+msgstr ""
+
+#: doc/classes/AudioEffectEQ21.xml:8
+msgid ""
+"Frequency bands:\n"
+"Band 1: 22 Hz\n"
+"Band 2: 32 Hz\n"
+"Band 3: 44 Hz\n"
+"Band 4: 63 Hz\n"
+"Band 5: 90 Hz\n"
+"Band 6: 125 Hz\n"
+"Band 7: 175 Hz\n"
+"Band 8: 250 Hz\n"
+"Band 9: 350 Hz\n"
+"Band 10: 500 Hz\n"
+"Band 11: 700 Hz\n"
+"Band 12: 1000 Hz\n"
+"Band 13: 1400 Hz\n"
+"Band 14: 2000 Hz\n"
+"Band 15: 2800 Hz\n"
+"Band 16: 4000 Hz\n"
+"Band 17: 5600 Hz\n"
+"Band 18: 8000 Hz\n"
+"Band 19: 11000 Hz\n"
+"Band 20: 16000 Hz\n"
+"Band 21: 22000 Hz\n"
+"See also [AudioEffectEQ], [AudioEffectEQ6], [AudioEffectEQ10]."
+msgstr ""
+
+#: doc/classes/AudioEffectEQ6.xml:4
+msgid ""
+"Adds a 6-band equalizer audio effect to an Audio bus. Gives you control over "
+"frequencies from 32 Hz to 10000 Hz.\n"
+"Each frequency can be modulated between -60/+24 dB."
+msgstr ""
+
+#: doc/classes/AudioEffectEQ6.xml:8
+msgid ""
+"Frequency bands:\n"
+"Band 1: 32 Hz\n"
+"Band 2: 100 Hz\n"
+"Band 3: 320 Hz\n"
+"Band 4: 1000 Hz\n"
+"Band 5: 3200 Hz\n"
+"Band 6: 10000 Hz\n"
+"See also [AudioEffectEQ], [AudioEffectEQ10], [AudioEffectEQ21]."
+msgstr ""
+
+#: doc/classes/AudioEffectFilter.xml:4
+msgid "Adds a filter to the audio bus."
+msgstr ""
+
+#: doc/classes/AudioEffectFilter.xml:7
+msgid "Allows frequencies other than the [member cutoff_hz] to pass."
+msgstr ""
+
+#: doc/classes/AudioEffectFilter.xml:16
+msgid "Threshold frequency for the filter, in Hz."
+msgstr ""
+
+#: doc/classes/AudioEffectFilter.xml:21
+msgid "Gain amount of the frequencies after the filter."
+msgstr ""
+
+#: doc/classes/AudioEffectFilter.xml:24
+msgid "Amount of boost in the frequency range near the cutoff frequency."
+msgstr ""
+
+#: doc/classes/AudioEffectHighPassFilter.xml:4
+msgid "Adds a high-pass filter to the Audio Bus."
+msgstr ""
+
+#: doc/classes/AudioEffectHighPassFilter.xml:7
+msgid ""
+"Cuts frequencies lower than the [member AudioEffectFilter.cutoff_hz] and "
+"allows higher frequencies to pass."
+msgstr ""
+
+#: doc/classes/AudioEffectHighShelfFilter.xml:4
+msgid "Reduces all frequencies above the [member AudioEffectFilter.cutoff_hz]."
+msgstr ""
+
+#: doc/classes/AudioEffectLimiter.xml:4
+msgid "Adds a soft-clip limiter audio effect to an Audio bus."
+msgstr ""
+
+#: doc/classes/AudioEffectLimiter.xml:7
+msgid ""
+"A limiter is similar to a compressor, but it's less flexible and designed to "
+"disallow sound going over a given dB threshold. Adding one in the Master bus "
+"is always recommended to reduce the effects of clipping.\n"
+"Soft clipping starts to reduce the peaks a little below the threshold level "
+"and progressively increases its effect as the input level increases such "
+"that the threshold is never exceeded."
+msgstr ""
+
+#: doc/classes/AudioEffectLimiter.xml:16
+msgid ""
+"The waveform's maximum allowed value, in decibels. Value can range from -20 "
+"to -0.1."
+msgstr ""
+
+#: doc/classes/AudioEffectLimiter.xml:19
+msgid ""
+"Applies a gain to the limited waves, in decibels. Value can range from 0 to "
+"6."
+msgstr ""
+
+#: doc/classes/AudioEffectLimiter.xml:24
+msgid ""
+"Threshold from which the limiter begins to be active, in decibels. Value can "
+"range from -30 to 0."
+msgstr ""
+
+#: doc/classes/AudioEffectLowPassFilter.xml:4
+msgid "Adds a low-pass filter to the Audio bus."
+msgstr ""
+
+#: doc/classes/AudioEffectLowPassFilter.xml:7
+msgid ""
+"Cuts frequencies higher than the [member AudioEffectFilter.cutoff_hz] and "
+"allows lower frequencies to pass."
+msgstr ""
+
+#: doc/classes/AudioEffectLowShelfFilter.xml:4
+msgid "Reduces all frequencies below the [member AudioEffectFilter.cutoff_hz]."
+msgstr ""
+
+#: doc/classes/AudioEffectNotchFilter.xml:4
+msgid "Adds a notch filter to the Audio bus."
+msgstr ""
+
+#: doc/classes/AudioEffectNotchFilter.xml:7
+msgid ""
+"Attenuates frequencies in a narrow band around the [member AudioEffectFilter."
+"cutoff_hz] and cuts frequencies outside of this range."
+msgstr ""
+
+#: doc/classes/AudioEffectPanner.xml:4
+msgid "Adds a panner audio effect to an Audio bus. Pans sound left or right."
+msgstr ""
+
+#: doc/classes/AudioEffectPanner.xml:7
+msgid ""
+"Determines how much of an audio signal is sent to the left and right buses."
+msgstr ""
+
+#: doc/classes/AudioEffectPanner.xml:15
+msgid "Pan position. Value can range from -1 (fully left) to 1 (fully right)."
+msgstr ""
+
+#: doc/classes/AudioEffectPhaser.xml:4
+msgid ""
+"Adds a phaser audio effect to an Audio bus.\n"
+"Combines the original signal with a copy that is slightly out of phase with "
+"the original."
+msgstr ""
+
+#: doc/classes/AudioEffectPhaser.xml:8
+msgid ""
+"Combines phase-shifted signals with the original signal. The movement of the "
+"phase-shifted signals is controlled using a low-frequency oscillator."
+msgstr ""
+
+#: doc/classes/AudioEffectPhaser.xml:16
+msgid ""
+"Governs how high the filter frequencies sweep. Low value will primarily "
+"affect bass frequencies. High value can sweep high into the treble. Value "
+"can range from 0.1 to 4."
+msgstr ""
+
+#: doc/classes/AudioEffectPhaser.xml:19
+msgid "Output percent of modified sound. Value can range from 0.1 to 0.9."
+msgstr ""
+
+#: doc/classes/AudioEffectPhaser.xml:22
+msgid ""
+"Determines the maximum frequency affected by the LFO modulations, in Hz. "
+"Value can range from 10 to 10000."
+msgstr ""
+
+#: doc/classes/AudioEffectPhaser.xml:25
+msgid ""
+"Determines the minimum frequency affected by the LFO modulations, in Hz. "
+"Value can range from 10 to 10000."
+msgstr ""
+
+#: doc/classes/AudioEffectPhaser.xml:28
+msgid ""
+"Adjusts the rate in Hz at which the effect sweeps up and down across the "
+"frequency range."
+msgstr ""
+
+#: doc/classes/AudioEffectPitchShift.xml:4
+msgid ""
+"Adds a pitch-shifting audio effect to an Audio bus.\n"
+"Raises or lowers the pitch of original sound."
+msgstr ""
+
+#: doc/classes/AudioEffectPitchShift.xml:8
+msgid ""
+"Allows modulation of pitch independently of tempo. All frequencies can be "
+"increased/decreased with minimal effect on transients."
+msgstr ""
+
+#: doc/classes/AudioEffectPitchShift.xml:16
+msgid ""
+"The size of the [url=https://en.wikipedia.org/wiki/"
+"Fast_Fourier_transform]Fast Fourier transform[/url] buffer. Higher values "
+"smooth out the effect over time, but have greater latency. The effects of "
+"this higher latency are especially noticeable on sounds that have sudden "
+"amplitude changes."
+msgstr ""
+
+#: doc/classes/AudioEffectPitchShift.xml:19
+msgid ""
+"The oversampling factor to use. Higher values result in better quality, but "
+"are more demanding on the CPU and may cause audio cracking if the CPU can't "
+"keep up."
+msgstr ""
+
+#: doc/classes/AudioEffectPitchShift.xml:22
+msgid ""
+"The pitch scale to use. [code]1.0[/code] is the default pitch and plays "
+"sounds unaltered. [member pitch_scale] can range from [code]0.0[/code] "
+"(infinitely low pitch, inaudible) to [code]16[/code] (16 times higher than "
+"the initial pitch)."
+msgstr ""
+
+#: doc/classes/AudioEffectPitchShift.xml:27
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml:28
+msgid ""
+"Use a buffer of 256 samples for the Fast Fourier transform. Lowest latency, "
+"but least stable over time."
+msgstr ""
+
+#: doc/classes/AudioEffectPitchShift.xml:30
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml:31
+msgid ""
+"Use a buffer of 512 samples for the Fast Fourier transform. Low latency, but "
+"less stable over time."
+msgstr ""
+
+#: doc/classes/AudioEffectPitchShift.xml:33
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml:34
+msgid ""
+"Use a buffer of 1024 samples for the Fast Fourier transform. This is a "
+"compromise between latency and stability over time."
+msgstr ""
+
+#: doc/classes/AudioEffectPitchShift.xml:36
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml:37
+msgid ""
+"Use a buffer of 2048 samples for the Fast Fourier transform. High latency, "
+"but stable over time."
+msgstr ""
+
+#: doc/classes/AudioEffectPitchShift.xml:39
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml:40
+msgid ""
+"Use a buffer of 4096 samples for the Fast Fourier transform. Highest "
+"latency, but most stable over time."
+msgstr ""
+
+#: doc/classes/AudioEffectPitchShift.xml:42
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml:43
+msgid "Represents the size of the [enum FFT_Size] enum."
+msgstr ""
+
+#: doc/classes/AudioEffectRecord.xml:4
+msgid "Audio effect used for recording sound from a microphone."
+msgstr ""
+
+#: doc/classes/AudioEffectRecord.xml:7
+msgid ""
+"Allows the user to record sound from a microphone. It sets and gets the "
+"format in which the audio file will be recorded (8-bit, 16-bit, or "
+"compressed). It checks whether or not the recording is active, and if it is, "
+"records the sound. It then returns the recorded sample."
+msgstr ""
+
+#: doc/classes/AudioEffectRecord.xml:10
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/audio/"
+"recording_with_microphone.html"
+msgstr ""
+
+#: doc/classes/AudioEffectRecord.xml:17
+msgid "Returns the recorded sample."
+msgstr ""
+
+#: doc/classes/AudioEffectRecord.xml:23
+msgid "Returns whether the recording is active or not."
+msgstr ""
+
+#: doc/classes/AudioEffectRecord.xml:30
+msgid ""
+"If [code]true[/code], the sound will be recorded. Note that restarting the "
+"recording will remove the previously recorded sample."
+msgstr ""
+
+#: doc/classes/AudioEffectRecord.xml:36
+msgid ""
+"Specifies the format in which the sample will be recorded. See [enum "
+"AudioStreamSample.Format] for available formats."
+msgstr ""
+
+#: doc/classes/AudioEffectReverb.xml:4
+msgid ""
+"Adds a reverberation audio effect to an Audio bus.\n"
+"Simulates the sound of acoustic environments such as rooms, concert halls, "
+"caverns, or an open spaces."
+msgstr ""
+
+#: doc/classes/AudioEffectReverb.xml:8
+msgid ""
+"Simulates rooms of different sizes. Its parameters can be adjusted to "
+"simulate the sound of a specific room."
+msgstr ""
+
+#: doc/classes/AudioEffectReverb.xml:17
+msgid ""
+"Defines how reflective the imaginary room's walls are. Value can range from "
+"0 to 1."
+msgstr ""
+
+#: doc/classes/AudioEffectReverb.xml:20
+msgid ""
+"Output percent of original sound. At 0, only modified sound is outputted. "
+"Value can range from 0 to 1."
+msgstr ""
+
+#: doc/classes/AudioEffectReverb.xml:23
+msgid ""
+"High-pass filter passes signals with a frequency higher than a certain "
+"cutoff frequency and attenuates signals with frequencies lower than the "
+"cutoff frequency. Value can range from 0 to 1."
+msgstr ""
+
+#: doc/classes/AudioEffectReverb.xml:26
+msgid "Output percent of predelay. Value can range from 0 to 1."
+msgstr ""
+
+#: doc/classes/AudioEffectReverb.xml:29
+msgid ""
+"Time between the original signal and the early reflections of the reverb "
+"signal, in milliseconds."
+msgstr ""
+
+#: doc/classes/AudioEffectReverb.xml:32
+msgid ""
+"Dimensions of simulated room. Bigger means more echoes. Value can range from "
+"0 to 1."
+msgstr ""
+
+#: doc/classes/AudioEffectReverb.xml:35
+msgid ""
+"Widens or narrows the stereo image of the reverb tail. 1 means fully widens. "
+"Value can range from 0 to 1."
+msgstr ""
+
+#: doc/classes/AudioEffectReverb.xml:38
+msgid ""
+"Output percent of modified sound. At 0, only original sound is outputted. "
+"Value can range from 0 to 1."
+msgstr ""
+
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml:4
+msgid "Audio effect that can be used for real-time audio visualizations."
+msgstr ""
+
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml:7
+msgid ""
+"This audio effect does not affect sound output, but can be used for real-"
+"time audio visualizations.\n"
+"See also [AudioStreamGenerator] for procedurally generating sounds."
+msgstr ""
+
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml:11
+msgid "Audio Spectrum Demo"
+msgstr ""
+
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml:12
+#: doc/classes/AudioStreamGenerator.xml:13
+#: doc/classes/AudioStreamGeneratorPlayback.xml:11
+msgid "Godot 3.2 will get new audio features"
+msgstr ""
+
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml:18
+msgid ""
+"The length of the buffer to keep (in seconds). Higher values keep data "
+"around for longer, but require more memory."
+msgstr ""
+
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml:21
+msgid ""
+"The size of the [url=https://en.wikipedia.org/wiki/"
+"Fast_Fourier_transform]Fast Fourier transform[/url] buffer. Higher values "
+"smooth out the spectrum analysis over time, but have greater latency. The "
+"effects of this higher latency are especially noticeable with sudden "
+"amplitude changes."
+msgstr ""
+
+#: doc/classes/AudioEffectSpectrumAnalyzerInstance.xml:21
+msgid "Use the average value as magnitude."
+msgstr ""
+
+#: doc/classes/AudioEffectSpectrumAnalyzerInstance.xml:24
+msgid "Use the maximum value as magnitude."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:4
+msgid "Server interface for low-level audio access."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:7
+msgid ""
+"[AudioServer] is a low-level server interface for audio access. It is in "
+"charge of creating sample data (playable audio) as well as its playback via "
+"a voice interface."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:11 doc/classes/AudioStreamPlayer.xml:13
+msgid "https://godotengine.org/asset-library/asset/525"
+msgstr ""
+
+#: doc/classes/AudioServer.xml:13 doc/classes/AudioStream.xml:13
+#: doc/classes/AudioStreamPlayer.xml:16 doc/classes/CanvasItem.xml:17
+msgid "https://godotengine.org/asset-library/asset/528"
+msgstr ""
+
+#: doc/classes/AudioServer.xml:20
+msgid "Adds a bus at [code]at_position[/code]."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:29
+msgid ""
+"Adds an [AudioEffect] effect to the bus [code]bus_idx[/code] at "
+"[code]at_position[/code]."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:35
+msgid ""
+"Name of the current device for audio input (see [method "
+"capture_get_device_list])."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:41
+msgid "Returns the names of all audio input devices detected on the system."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:48
+msgid "Sets which audio input device is used for audio capture."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:54
+msgid "Generates an [AudioBusLayout] using the available buses and effects."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:61
+msgid ""
+"Returns the amount of channels of the bus at index [code]bus_idx[/code]."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:69
+msgid ""
+"Returns the [AudioEffect] at position [code]effect_idx[/code] in bus "
+"[code]bus_idx[/code]."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:76
+msgid "Returns the number of effects on the bus at [code]bus_idx[/code]."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:85
+msgid ""
+"Returns the [AudioEffectInstance] assigned to the given bus and effect "
+"indices (and optionally channel)."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:92
+msgid "Returns the index of the bus with the name [code]bus_name[/code]."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:99
+msgid "Returns the name of the bus with the index [code]bus_idx[/code]."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:107
+msgid ""
+"Returns the peak volume of the left speaker at bus index [code]bus_idx[/"
+"code] and channel index [code]channel[/code]."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:115
+msgid ""
+"Returns the peak volume of the right speaker at bus index [code]bus_idx[/"
+"code] and channel index [code]channel[/code]."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:122
+msgid ""
+"Returns the name of the bus that the bus at index [code]bus_idx[/code] sends "
+"to."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:129
+msgid "Returns the volume of the bus at index [code]bus_idx[/code] in dB."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:135
+msgid "Returns the names of all audio devices detected on the system."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:141
+msgid "Returns the sample rate at the output of the [AudioServer]."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:147
+msgid "Returns the audio driver's output latency."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:153
+msgid "Returns the speaker configuration."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:159
+msgid "Returns the relative time since the last mix occurred."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:165
+msgid "Returns the relative time until the next mix occurs."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:172 doc/classes/AudioServer.xml:232
+msgid ""
+"If [code]true[/code], the bus at index [code]bus_idx[/code] is bypassing "
+"effects."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:180 doc/classes/AudioServer.xml:241
+msgid ""
+"If [code]true[/code], the effect at index [code]effect_idx[/code] on the bus "
+"at index [code]bus_idx[/code] is enabled."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:187 doc/classes/AudioServer.xml:256
+msgid "If [code]true[/code], the bus at index [code]bus_idx[/code] is muted."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:194 doc/classes/AudioServer.xml:280
+msgid ""
+"If [code]true[/code], the bus at index [code]bus_idx[/code] is in solo mode."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:200
+msgid ""
+"Locks the audio driver's main loop.\n"
+"[b]Note:[/b] Remember to unlock it afterwards."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:209
+msgid ""
+"Moves the bus from index [code]index[/code] to index [code]to_index[/code]."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:216
+msgid "Removes the bus at index [code]index[/code]."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:224
+msgid ""
+"Removes the effect at index [code]effect_idx[/code] from the bus at index "
+"[code]bus_idx[/code]."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:248
+msgid "Overwrites the currently used [AudioBusLayout]."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:264
+msgid ""
+"Sets the name of the bus at index [code]bus_idx[/code] to [code]name[/code]."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:272
+msgid ""
+"Connects the output of the bus at [code]bus_idx[/code] to the bus named "
+"[code]send[/code]."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:288
+msgid ""
+"Sets the volume of the bus at index [code]bus_idx[/code] to [code]volume_db[/"
+"code]."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:297
+msgid "Swaps the position of two effects in bus [code]bus_idx[/code]."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:303
+msgid ""
+"Unlocks the audio driver's main loop. (After locking it, you should always "
+"unlock it.)"
+msgstr ""
+
+#: doc/classes/AudioServer.xml:309
+msgid "Number of available audio buses."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:312
+msgid ""
+"Name of the current device for audio output (see [method get_device_list])."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:315
+msgid ""
+"Scales the rate at which audio is played (i.e. setting it to [code]0.5[/"
+"code] will make the audio be played twice as fast)."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:321
+msgid "Emitted when the [AudioBusLayout] changes."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:327
+msgid "Two or fewer speakers were detected."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:330
+msgid "A 3.1 channel surround setup was detected."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:333
+msgid "A 5.1 channel surround setup was detected."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:336
+msgid "A 7.1 channel surround setup was detected."
+msgstr ""
+
+#: doc/classes/AudioStream.xml:4
+msgid "Base class for audio streams."
+msgstr ""
+
+#: doc/classes/AudioStream.xml:7
+msgid ""
+"Base class for audio streams. Audio streams are used for sound effects and "
+"music playback, and support WAV (via [AudioStreamSample]) and OGG (via "
+"[AudioStreamOGGVorbis]) file formats."
+msgstr ""
+
+#: doc/classes/AudioStream.xml:10 doc/classes/AudioStreamPlayer.xml:11
+#: doc/classes/AudioStreamPlayer2D.xml:12
+#: doc/classes/AudioStreamPlayer3D.xml:13
+msgid "https://docs.godotengine.org/en/3.4/tutorials/audio/audio_streams.html"
+msgstr ""
+
+#: doc/classes/AudioStream.xml:11 doc/classes/AudioStreamGenerator.xml:12
+#: doc/classes/AudioStreamGeneratorPlayback.xml:10
+#: doc/classes/AudioStreamPlayback.xml:10 doc/classes/AudioStreamPlayer.xml:14
+msgid "https://godotengine.org/asset-library/asset/526"
+msgstr ""
+
+#: doc/classes/AudioStream.xml:19
+msgid "Returns the length of the audio stream in seconds."
+msgstr ""
+
+#: doc/classes/AudioStreamGenerator.xml:4
+msgid "Audio stream that generates sounds procedurally."
+msgstr ""
+
+#: doc/classes/AudioStreamGenerator.xml:7
+msgid ""
+"This audio stream does not play back sounds, but expects a script to "
+"generate audio data for it instead. See also "
+"[AudioStreamGeneratorPlayback].\n"
+"See also [AudioEffectSpectrumAnalyzer] for performing real-time audio "
+"spectrum analysis.\n"
+"[b]Note:[/b] Due to performance constraints, this class is best used from C# "
+"or from a compiled language via GDNative. If you still want to use this "
+"class from GDScript, consider using a lower [member mix_rate] such as 11,025 "
+"Hz or 22,050 Hz."
+msgstr ""
+
+#: doc/classes/AudioStreamGenerator.xml:19
+msgid ""
+"The length of the buffer to generate (in seconds). Lower values result in "
+"less latency, but require the script to generate audio data faster, "
+"resulting in increased CPU usage and more risk for audio cracking if the CPU "
+"can't keep up."
+msgstr ""
+
+#: doc/classes/AudioStreamGenerator.xml:22
+msgid ""
+"The sample rate to use (in Hz). Higher values are more demanding for the CPU "
+"to generate, but result in better quality.\n"
+"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
+"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
+"[code]48000[/code].\n"
+"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
+"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
+"there is no quality difference to human hearing when going past 40,000 Hz "
+"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
+"generating lower-pitched sounds such as voices, lower sample rates such as "
+"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
+"quality."
+msgstr ""
+
+#: doc/classes/AudioStreamGeneratorPlayback.xml:4
+msgid "Plays back audio generated using [AudioStreamGenerator]."
+msgstr ""
+
+#: doc/classes/AudioStreamGeneratorPlayback.xml:7
+msgid ""
+"This class is meant to be used with [AudioStreamGenerator] to play back the "
+"generated audio in real-time."
+msgstr ""
+
+#: doc/classes/AudioStreamGeneratorPlayback.xml:18
+msgid ""
+"Returns [code]true[/code] if a buffer of the size [code]amount[/code] can be "
+"pushed to the audio sample data buffer without overflowing it, [code]false[/"
+"code] otherwise."
+msgstr ""
+
+#: doc/classes/AudioStreamGeneratorPlayback.xml:24
+msgid "Clears the audio sample data buffer."
+msgstr ""
+
+#: doc/classes/AudioStreamGeneratorPlayback.xml:30
+msgid ""
+"Returns the number of audio data frames left to play. If this returned "
+"number reaches [code]0[/code], the audio will stop playing until frames are "
+"added again. Therefore, make sure your script can always generate and push "
+"new audio frames fast enough to avoid audio cracking."
+msgstr ""
+
+#: doc/classes/AudioStreamGeneratorPlayback.xml:42
+msgid ""
+"Pushes several audio data frames to the buffer. This is usually more "
+"efficient than [method push_frame] in C# and compiled languages via "
+"GDNative, but [method push_buffer] may be [i]less[/i] efficient in GDScript."
+msgstr ""
+
+#: doc/classes/AudioStreamGeneratorPlayback.xml:49
+msgid ""
+"Pushes a single audio data frame to the buffer. This is usually less "
+"efficient than [method push_buffer] in C# and compiled languages via "
+"GDNative, but [method push_frame] may be [i]more[/i] efficient in GDScript."
+msgstr ""
+
+#: modules/minimp3/doc_classes/AudioStreamMP3.xml:4
+#: modules/minimp3/doc_classes/AudioStreamMP3.xml:7
+msgid "MP3 audio stream driver."
+msgstr ""
+
+#: modules/minimp3/doc_classes/AudioStreamMP3.xml:15
+#: modules/stb_vorbis/doc_classes/AudioStreamOGGVorbis.xml:15
+msgid "Contains the audio data in bytes."
+msgstr ""
+
+#: modules/minimp3/doc_classes/AudioStreamMP3.xml:18
+#: modules/stb_vorbis/doc_classes/AudioStreamOGGVorbis.xml:18
+msgid ""
+"If [code]true[/code], the stream will automatically loop when it reaches the "
+"end."
+msgstr ""
+
+#: modules/minimp3/doc_classes/AudioStreamMP3.xml:21
+#: modules/stb_vorbis/doc_classes/AudioStreamOGGVorbis.xml:21
+msgid "Time in seconds at which the stream starts after being looped."
+msgstr ""
+
+#: modules/stb_vorbis/doc_classes/AudioStreamOGGVorbis.xml:4
+#: modules/stb_vorbis/doc_classes/AudioStreamOGGVorbis.xml:7
+msgid "OGG Vorbis audio stream driver."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayback.xml:4
+msgid "Meta class for playing back audio."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayback.xml:7
+msgid ""
+"Can play, loop, pause a scroll through audio. See [AudioStream] and "
+"[AudioStreamOGGVorbis] for usage."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer.xml:4
+msgid "Plays back audio non-positionally."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer.xml:7
+msgid ""
+"Plays an audio stream non-positionally.\n"
+"To play audio positionally, use [AudioStreamPlayer2D] or "
+"[AudioStreamPlayer3D] instead of [AudioStreamPlayer]."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer.xml:22
+msgid "Returns the position in the [AudioStream] in seconds."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer.xml:28
+msgid ""
+"Returns the [AudioStreamPlayback] object associated with this "
+"[AudioStreamPlayer]."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer.xml:35
+msgid "Plays the audio from the given [code]from_position[/code], in seconds."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer.xml:42 doc/classes/AudioStreamPlayer2D.xml:38
+#: doc/classes/AudioStreamPlayer3D.xml:39
+msgid "Sets the position from which audio will be played, in seconds."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer.xml:48 doc/classes/AudioStreamPlayer2D.xml:44
+#: doc/classes/AudioStreamPlayer3D.xml:45
+msgid "Stops the audio."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer.xml:54 doc/classes/AudioStreamPlayer2D.xml:56
+msgid "If [code]true[/code], audio plays when added to scene tree."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer.xml:57 doc/classes/AudioStreamPlayer2D.xml:59
+msgid "Bus on which this audio is playing."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer.xml:60
+msgid ""
+"If the audio configuration has more than two speakers, this sets the target "
+"channels. See [enum MixTarget] constants."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer.xml:63 doc/classes/AudioStreamPlayer2D.xml:65
+#: doc/classes/AudioStreamPlayer3D.xml:91
+msgid ""
+"The pitch and the tempo of the audio, as a multiplier of the audio sample's "
+"sample rate."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer.xml:66 doc/classes/AudioStreamPlayer2D.xml:68
+#: doc/classes/AudioStreamPlayer3D.xml:94
+msgid "If [code]true[/code], audio is playing."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer.xml:69 doc/classes/AudioStreamPlayer2D.xml:71
+msgid "The [AudioStream] object to be played."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer.xml:72 doc/classes/AudioStreamPlayer2D.xml:74
+msgid ""
+"If [code]true[/code], the playback is paused. You can resume it by setting "
+"[code]stream_paused[/code] to [code]false[/code]."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer.xml:75
+msgid "Volume of sound, in dB."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer.xml:81 doc/classes/AudioStreamPlayer2D.xml:83
+#: doc/classes/AudioStreamPlayer3D.xml:112
+msgid "Emitted when the audio stops playing."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer.xml:87
+msgid "The audio will be played only on the first channel."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer.xml:90
+msgid "The audio will be played on all surround channels."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer.xml:93
+msgid ""
+"The audio will be played on the second channel, which is usually the center."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer2D.xml:4
+msgid "Plays positional sound in 2D space."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer2D.xml:7
+msgid ""
+"Plays audio that dampens with distance from screen center.\n"
+"See also [AudioStreamPlayer] to play a sound non-positionally.\n"
+"[b]Note:[/b] Hiding an [AudioStreamPlayer2D] node does not disable its audio "
+"output. To temporarily disable an [AudioStreamPlayer2D]'s audio output, set "
+"[member volume_db] to a very low value like [code]-100[/code] (which isn't "
+"audible to human hearing)."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer2D.xml:18
+#: doc/classes/AudioStreamPlayer3D.xml:19
+msgid "Returns the position in the [AudioStream]."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer2D.xml:24
+msgid ""
+"Returns the [AudioStreamPlayback] object associated with this "
+"[AudioStreamPlayer2D]."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer2D.xml:31
+#: doc/classes/AudioStreamPlayer3D.xml:32
+msgid ""
+"Plays the audio from the given position [code]from_position[/code], in "
+"seconds."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer2D.xml:50
+#: doc/classes/AudioStreamPlayer3D.xml:51
+msgid "Areas in which this sound plays."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer2D.xml:53
+msgid "Dampens audio over distance with this as an exponent."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer2D.xml:62
+msgid "Maximum distance from which audio is still hearable."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer2D.xml:77
+msgid "Base volume without dampening."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:4
+msgid "Plays positional sound in 3D space."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:7
+msgid ""
+"Plays a sound effect with directed sound effects, dampens with distance if "
+"needed, generates effect of hearable position in space. For greater realism, "
+"a low-pass filter is automatically applied to distant sounds. This can be "
+"disabled by setting [member attenuation_filter_cutoff_hz] to [code]20500[/"
+"code].\n"
+"By default, audio is heard from the camera position. This can be changed by "
+"adding a [Listener] node to the scene and enabling it by calling [method "
+"Listener.make_current] on it.\n"
+"See also [AudioStreamPlayer] to play a sound non-positionally.\n"
+"[b]Note:[/b] Hiding an [AudioStreamPlayer3D] node does not disable its audio "
+"output. To temporarily disable an [AudioStreamPlayer3D]'s audio output, set "
+"[member unit_db] to a very low value like [code]-100[/code] (which isn't "
+"audible to human hearing)."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:25
+msgid ""
+"Returns the [AudioStreamPlayback] object associated with this "
+"[AudioStreamPlayer3D]."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:54
+msgid ""
+"Dampens audio using a low-pass filter above this frequency, in Hz. To "
+"disable the dampening effect entirely, set this to [code]20500[/code] as "
+"this frequency is above the human hearing limit."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:57
+msgid "Amount how much the filter affects the loudness, in decibels."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:60
+msgid ""
+"Decides if audio should get quieter with distance linearly, quadratically, "
+"logarithmically, or not be affected by distance, effectively disabling "
+"attenuation."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:63
+msgid ""
+"If [code]true[/code], audio plays when the AudioStreamPlayer3D node is added "
+"to scene tree."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:66
+msgid "The bus on which this audio is playing."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:69
+msgid ""
+"Decides in which step the [url=https://en.wikipedia.org/wiki/"
+"Doppler_effect]Doppler effect[/url] should be calculated.\n"
+"[b]Note:[/b] Only effective if the current [Camera]'s [member Camera."
+"doppler_tracking] property is set to a value other than [constant Camera."
+"DOPPLER_TRACKING_DISABLED]."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:73
+msgid "The angle in which the audio reaches cameras undampened."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:76
+msgid ""
+"If [code]true[/code], the audio should be dampened according to the "
+"direction of the sound."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:79
+msgid ""
+"Dampens audio if camera is outside of [member emission_angle_degrees] and "
+"[member emission_angle_enabled] is set by this factor, in decibels."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:82
+msgid "Sets the absolute maximum of the soundlevel, in decibels."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:85
+msgid ""
+"Sets the distance from which the [member out_of_range_mode] takes effect. "
+"Has no effect if set to 0."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:88
+msgid ""
+"Decides if audio should pause when source is outside of [member "
+"max_distance] range."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:97
+msgid "The [AudioStream] resource to be played."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:100
+msgid ""
+"If [code]true[/code], the playback is paused. You can resume it by setting "
+"[member stream_paused] to [code]false[/code]."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:103
+msgid "The base sound level unaffected by dampening, in decibels."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:106
+msgid ""
+"The factor for the attenuation effect. Higher values make the sound audible "
+"over a larger distance."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:118
+msgid "Linear dampening of loudness according to distance."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:121
+msgid "Squared dampening of loudness according to distance."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:124
+msgid "Logarithmic dampening of loudness according to distance."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:127
+msgid ""
+"No dampening of loudness according to distance. The sound will still be "
+"heard positionally, unlike an [AudioStreamPlayer]. [constant "
+"ATTENUATION_DISABLED] can be combined with a [member max_distance] value "
+"greater than [code]0.0[/code] to achieve linear attenuation clamped to a "
+"sphere of a defined size."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:130
+msgid ""
+"Mix this audio in, even when it's out of range. This increases CPU usage, "
+"but keeps the sound playing at the correct position if the camera leaves and "
+"enters the [AudioStreamPlayer3D]'s [member max_distance] radius."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:133
+msgid ""
+"Pause this audio when it gets out of range. This decreases CPU usage, but "
+"will cause the sound to restart if the camera leaves and enters the "
+"[AudioStreamPlayer3D]'s [member max_distance] radius."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:136
+msgid "Disables doppler tracking."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:139
+msgid "Executes doppler tracking in idle step (every rendered frame)."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:142
+msgid ""
+"Executes doppler tracking in physics step (every simulated physics frame)."
+msgstr ""
+
+#: doc/classes/AudioStreamRandomPitch.xml:4
+msgid "Plays audio with random pitch shifting."
+msgstr ""
+
+#: doc/classes/AudioStreamRandomPitch.xml:7
+msgid "Randomly varies pitch on each start."
+msgstr ""
+
+#: doc/classes/AudioStreamRandomPitch.xml:15
+msgid "The current [AudioStream]."
+msgstr ""
+
+#: doc/classes/AudioStreamRandomPitch.xml:18
+msgid "The intensity of random pitch variation."
+msgstr ""
+
+#: doc/classes/AudioStreamSample.xml:4
+msgid "Stores audio data loaded from WAV files."
+msgstr ""
+
+#: doc/classes/AudioStreamSample.xml:7
+msgid ""
+"AudioStreamSample stores sound samples loaded from WAV files. To play the "
+"stored sound, use an [AudioStreamPlayer] (for non-positional audio) or "
+"[AudioStreamPlayer2D]/[AudioStreamPlayer3D] (for positional audio). The "
+"sound can be looped.\n"
+"This class can also be used to store dynamically-generated PCM audio data. "
+"See also [AudioStreamGenerator] for procedural audio generation."
+msgstr ""
+
+#: doc/classes/AudioStreamSample.xml:17
+msgid ""
+"Saves the AudioStreamSample as a WAV file to [code]path[/code]. Samples with "
+"IMA ADPCM format can't be saved.\n"
+"[b]Note:[/b] A [code].wav[/code] extension is automatically appended to "
+"[code]path[/code] if it is missing."
+msgstr ""
+
+#: doc/classes/AudioStreamSample.xml:24
+msgid ""
+"Contains the audio data in bytes.\n"
+"[b]Note:[/b] This property expects signed PCM8 data. To convert unsigned "
+"PCM8 to signed PCM8, subtract 128 from each byte."
+msgstr ""
+
+#: doc/classes/AudioStreamSample.xml:28
+msgid "Audio format. See [enum Format] constants for values."
+msgstr ""
+
+#: doc/classes/AudioStreamSample.xml:31
+msgid ""
+"The loop start point (in number of samples, relative to the beginning of the "
+"sample). This information will be imported automatically from the WAV file "
+"if present."
+msgstr ""
+
+#: doc/classes/AudioStreamSample.xml:34
+msgid ""
+"The loop end point (in number of samples, relative to the beginning of the "
+"sample). This information will be imported automatically from the WAV file "
+"if present."
+msgstr ""
+
+#: doc/classes/AudioStreamSample.xml:37
+msgid ""
+"The loop mode. This information will be imported automatically from the WAV "
+"file if present. See [enum LoopMode] constants for values."
+msgstr ""
+
+#: doc/classes/AudioStreamSample.xml:40
+msgid ""
+"The sample rate for mixing this audio. Higher values require more storage "
+"space, but result in better quality.\n"
+"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
+"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
+"[code]48000[/code].\n"
+"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
+"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
+"there is no quality difference to human hearing when going past 40,000 Hz "
+"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
+"using lower-pitched sounds such as voices, lower sample rates such as "
+"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
+"quality."
+msgstr ""
+
+#: doc/classes/AudioStreamSample.xml:45
+msgid "If [code]true[/code], audio is stereo."
+msgstr ""
+
+#: doc/classes/AudioStreamSample.xml:50
+msgid "8-bit audio codec."
+msgstr ""
+
+#: doc/classes/AudioStreamSample.xml:53
+msgid "16-bit audio codec."
+msgstr ""
+
+#: doc/classes/AudioStreamSample.xml:56
+msgid "Audio is compressed using IMA ADPCM."
+msgstr ""
+
+#: doc/classes/AudioStreamSample.xml:59
+msgid "Audio does not loop."
+msgstr ""
+
+#: doc/classes/AudioStreamSample.xml:62
+msgid ""
+"Audio loops the data between [member loop_begin] and [member loop_end], "
+"playing forward only."
+msgstr ""
+
+#: doc/classes/AudioStreamSample.xml:65
+msgid ""
+"Audio loops the data between [member loop_begin] and [member loop_end], "
+"playing back and forth."
+msgstr ""
+
+#: doc/classes/AudioStreamSample.xml:68
+msgid ""
+"Audio loops the data between [member loop_begin] and [member loop_end], "
+"playing backward only."
+msgstr ""
+
+#: doc/classes/BackBufferCopy.xml:4
+msgid ""
+"Copies a region of the screen (or the whole screen) to a buffer so it can be "
+"accessed in your shader scripts through the "
+"[code]texture(SCREEN_TEXTURE, ...)[/code] function."
+msgstr ""
+
+#: doc/classes/BackBufferCopy.xml:7
+msgid ""
+"Node for back-buffering the currently-displayed screen. The region defined "
+"in the BackBufferCopy node is buffered with the content of the screen it "
+"covers, or the entire screen according to the copy mode set. Use the "
+"[code]texture(SCREEN_TEXTURE, ...)[/code] function in your shader scripts to "
+"access the buffer.\n"
+"[b]Note:[/b] Since this node inherits from [Node2D] (and not [Control]), "
+"anchors and margins won't apply to child [Control]-derived nodes. This can "
+"be problematic when resizing the window. To avoid this, add [Control]-"
+"derived nodes as [i]siblings[/i] to the BackBufferCopy node instead of "
+"adding them as children."
+msgstr ""
+
+#: doc/classes/BackBufferCopy.xml:16
+msgid "Buffer mode. See [enum CopyMode] constants."
+msgstr ""
+
+#: doc/classes/BackBufferCopy.xml:19
+msgid ""
+"The area covered by the BackBufferCopy. Only used if [member copy_mode] is "
+"[constant COPY_MODE_RECT]."
+msgstr ""
+
+#: doc/classes/BackBufferCopy.xml:24
+msgid ""
+"Disables the buffering mode. This means the BackBufferCopy node will "
+"directly use the portion of screen it covers."
+msgstr ""
+
+#: doc/classes/BackBufferCopy.xml:27
+msgid "BackBufferCopy buffers a rectangular region."
+msgstr ""
+
+#: doc/classes/BackBufferCopy.xml:30
+msgid "BackBufferCopy buffers the entire screen."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:4
+msgid "Prerendered indirect light map for a scene."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:7
+msgid ""
+"Baked lightmaps are an alternative workflow for adding indirect (or baked) "
+"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
+"fine on low-end PCs and mobile devices as they consume almost no resources "
+"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
+"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
+"effect once lightmaps are baked again."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:12
+msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:20
+msgid ""
+"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
+"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
+"no root node is provided, parent of this node will be used as root instead. "
+"If no save path is provided it will try to match the path from the current "
+"[member light_data]."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:26
+msgid ""
+"When enabled, the lightmapper will merge the textures for all meshes into a "
+"single large layered texture. Not supported in GLES2."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:29
+msgid ""
+"Maximum size of each lightmap layer, only used when [member atlas_generate] "
+"is enabled."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:32
+msgid ""
+"Raycasting bias used during baking to avoid floating point precision issues."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:35
+msgid ""
+"The energy multiplier for each bounce. Higher values will make indirect "
+"lighting brighter. A value of [code]1.0[/code] represents physically "
+"accurate behavior, but higher values can be used to make indirect lighting "
+"propagate more visibly when using a low number of bounces. This can be used "
+"to speed up bake times by lowering the number of [member bounces] then "
+"increasing [member bounce_indirect_energy]. Unlike [member BakedLightmapData."
+"energy], this property does not affect direct lighting emitted by light "
+"nodes, emissive materials and the environment.\n"
+"[b]Note:[/b] [member bounce_indirect_energy] only has an effect if [member "
+"bounces] is set to a value greater than or equal to [code]1[/code]."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:39
+msgid ""
+"Number of light bounces that are taken into account during baking. See also "
+"[member bounce_indirect_energy]."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:42
+msgid "Grid size used for real-time capture information on dynamic objects."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:45
+msgid ""
+"When enabled, an octree containing the scene's lighting information will be "
+"computed. This octree will then be used to light dynamic objects in the "
+"scene."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:48
+msgid ""
+"Bias value to reduce the amount of light proagation in the captured octree."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:51
+msgid "Bake quality of the capture data."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:54
+msgid ""
+"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
+"roughly compute a suitable lightmap size."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:57
+msgid ""
+"The environment color when [member environment_mode] is set to [constant "
+"ENVIRONMENT_MODE_CUSTOM_COLOR]."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:60
+msgid ""
+"The energy scaling factor when when [member environment_mode] is set to "
+"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
+"ENVIRONMENT_MODE_CUSTOM_SKY]."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:63
+msgid ""
+"The [Sky] resource to use when [member environment_mode] is set o [constant "
+"ENVIRONMENT_MODE_CUSTOM_SKY]."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:66
+msgid "The rotation of the baked custom sky."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:69
+msgid ""
+"Minimum ambient light for all the lightmap texels. This doesn't take into "
+"account any occlusion from the scene's geometry, it simply ensures a minimum "
+"amount of light on all the lightmap texels. Can be used for artistic control "
+"on shadow color."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:72
+msgid "Decides which environment to use during baking."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:75
+msgid ""
+"Size of the baked lightmap. Only meshes inside this region will be included "
+"in the baked lightmap, also used as the bounds of the captured region for "
+"dynamic lighting."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:78
+msgid ""
+"Deprecated, in previous versions it determined the location where lightmaps "
+"were be saved."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:81
+msgid "The calculated light data."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:84
+msgid ""
+"Determines the amount of samples per texel used in indrect light baking. The "
+"amount of samples for each quality level can be configured in the project "
+"settings."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:87
+msgid ""
+"Store full color values in the lightmap textures. When disabled, lightmap "
+"textures will store a single brightness channel. Can be disabled to reduce "
+"disk usage if the scene contains only white lights or you don't mind losing "
+"color information in indirect lighting."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:90
+msgid ""
+"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
+"to Monte Carlo based global illumination."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:93
+msgid ""
+"If [code]true[/code], stores the lightmap textures in a high dynamic range "
+"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
+"dynamic range PNG image. This can be set to [code]false[/code] to reduce "
+"disk usage, but light values over 1.0 will be clamped and you may see "
+"banding caused by the reduced precision.\n"
+"[b]Note:[/b] Setting [member use_hdr] to [code]true[/code] will decrease "
+"lightmap banding even when using the GLES2 backend or if [member "
+"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:99
+msgid "The lowest bake quality mode. Fastest to calculate."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:102
+msgid "The default bake quality mode."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:105
+msgid "A higher bake quality mode. Takes longer to calculate."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:108
+msgid "The highest bake quality mode. Takes the longest to calculate."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:111
+msgid "Baking was successful."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:114
+msgid ""
+"Returns if no viable save path is found. This can happen where an [member "
+"image_path] is not specified or when the save location is invalid."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
+msgid "Currently unused."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:120
+msgid "Returns when the baker cannot save per-mesh textures to file."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:123
+msgid "The size of the generated lightmaps is too large."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:126
+msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:129
+msgid "Returns if user cancels baking."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:132
+msgid ""
+"Returns if lightmapper can't be created. Unless you are using a custom "
+"lightmapper, please report this as bug."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:135
+msgid ""
+"There is no root node to start baking from. Either provide [code]from_node[/"
+"code] argument or attach this node to a parent that should be used as root."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:138
+msgid "No environment is used during baking."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:141
+msgid "The baked environment is automatically picked from the current scene."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:144
+msgid "A custom sky is used as environment during baking."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:147
+msgid "A custom solid color is used as environment during baking."
+msgstr ""
+
+#: doc/classes/BakedLightmapData.xml:56
+msgid ""
+"Global energy multiplier for baked and dynamic capture objects. This can be "
+"changed at run-time without having to bake lightmaps again.\n"
+"To adjust only the energy of indirect lighting (without affecting direct "
+"lighting or emissive materials), adjust [member BakedLightmap."
+"bounce_indirect_energy] and bake lightmaps again."
+msgstr ""
+
+#: doc/classes/BakedLightmapData.xml:60
+msgid ""
+"Controls whether dynamic capture objects receive environment lighting or not."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:4
+msgid "Base class for different kinds of buttons."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:7
+msgid ""
+"BaseButton is the abstract base class for buttons, so it shouldn't be used "
+"directly (it doesn't display anything). Other types of buttons inherit from "
+"it."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:15
+msgid ""
+"Called when the button is pressed. If you need to know the button's pressed "
+"state (and [member toggle_mode] is active), use [method _toggled] instead."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:22
+msgid ""
+"Called when the button is toggled (only if [member toggle_mode] is active)."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:28
+msgid ""
+"Returns the visual state used to draw the button. This is useful mainly when "
+"implementing your own draw code by either overriding _draw() or connecting "
+"to \"draw\" signal. The visual state of the button is defined by the [enum "
+"DrawMode] enum."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:34
+msgid ""
+"Returns [code]true[/code] if the mouse has entered the button and has not "
+"left it yet."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:41
+msgid ""
+"Changes the [member pressed] state of the button, without emitting [signal "
+"toggled]. Use when you just want to change the state of the button without "
+"sending the pressed event (e.g. when initializing scene). Only works if "
+"[member toggle_mode] is [code]true[/code].\n"
+"[b]Note:[/b] This method doesn't unpress other buttons in its button [member "
+"group]."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:48
+msgid ""
+"Determines when the button is considered clicked, one of the [enum "
+"ActionMode] constants."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:51
+msgid ""
+"Binary mask to choose which mouse buttons this button will respond to.\n"
+"To allow both left-click and right-click, use [code]BUTTON_MASK_LEFT | "
+"BUTTON_MASK_RIGHT[/code]."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:55
+msgid ""
+"If [code]true[/code], the button is in disabled state and can't be clicked "
+"or toggled."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:58
+msgid ""
+"[i]Deprecated.[/i] This property has been deprecated due to redundancy and "
+"will be removed in Godot 4.0. This property no longer has any effect when "
+"set. Please use [member Control.focus_mode] instead."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:62
+msgid "[ButtonGroup] associated to the button."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:65
+msgid ""
+"If [code]true[/code], the button stays pressed when moving the cursor "
+"outside the button while pressing it.\n"
+"[b]Note:[/b] This property only affects the button's visual appearance. "
+"Signals will be emitted at the same moment regardless of this property's "
+"value."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:69
+msgid ""
+"If [code]true[/code], the button's state is pressed. Means the button is "
+"pressed down or toggled (if [member toggle_mode] is active). Only works if "
+"[member toggle_mode] is [code]true[/code].\n"
+"[b]Note:[/b] Setting [member pressed] will result in [signal toggled] to be "
+"emitted. If you want to change the pressed state without emitting that "
+"signal, use [method set_pressed_no_signal]."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:73
+msgid "[ShortCut] associated to the button."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:76
+msgid ""
+"If [code]true[/code], the button will add information about its shortcut in "
+"the tooltip."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:79
+msgid ""
+"If [code]true[/code], the button is in toggle mode. Makes the button flip "
+"state between pressed and unpressed each time its area is clicked."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:85
+msgid "Emitted when the button starts being held down."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:90
+msgid "Emitted when the button stops being held down."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:95
+msgid ""
+"Emitted when the button is toggled or pressed. This is on [signal "
+"button_down] if [member action_mode] is [constant ACTION_MODE_BUTTON_PRESS] "
+"and on [signal button_up] otherwise.\n"
+"If you need to know the button's pressed state (and [member toggle_mode] is "
+"active), use [signal toggled] instead."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:102
+msgid ""
+"Emitted when the button was just toggled between pressed and normal states "
+"(only if [member toggle_mode] is active). The new state is contained in the "
+"[code]button_pressed[/code] argument."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:108
+msgid ""
+"The normal state (i.e. not pressed, not hovered, not toggled and enabled) of "
+"buttons."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:111
+msgid "The state of buttons are pressed."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:114
+msgid "The state of buttons are hovered."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:117
+msgid "The state of buttons are disabled."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:120
+msgid "The state of buttons are both hovered and pressed."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:123
+msgid "Require just a press to consider the button clicked."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:126
+msgid ""
+"Require a press and a subsequent release before considering the button "
+"clicked."
+msgstr ""
+
+#: doc/classes/Basis.xml:4
+msgid "3×3 matrix datatype."
+msgstr ""
+
+#: doc/classes/Basis.xml:7
+msgid ""
+"3×3 matrix used for 3D rotation and scale. Almost always used as an "
+"orthogonal basis for a Transform.\n"
+"Contains 3 vector fields X, Y and Z as its columns, which are typically "
+"interpreted as the local basis vectors of a transformation. For such use, it "
+"is composed of a scaling and a rotation matrix, in that order (M = R.S).\n"
+"Can also be accessed as array of 3D vectors. These vectors are normally "
+"orthogonal to each other, but are not necessarily normalized (due to "
+"scaling).\n"
+"For more information, read the \"Matrices and transforms\" documentation "
+"article."
+msgstr ""
+
+#: doc/classes/Basis.xml:14 doc/classes/Transform.xml:12
+#: doc/classes/Transform2D.xml:12
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/math/matrices_and_transforms."
+"html"
+msgstr ""
+
+#: doc/classes/Basis.xml:15 doc/classes/Transform.xml:13
+msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/using_transforms.html"
+msgstr ""
+
+#: doc/classes/Basis.xml:16 doc/classes/Line2D.xml:11
+#: doc/classes/Transform.xml:14 doc/classes/Transform2D.xml:13
+#: doc/classes/Vector2.xml:15 doc/classes/Vector3.xml:15
+msgid "https://godotengine.org/asset-library/asset/584"
+msgstr ""
+
+#: doc/classes/Basis.xml:18 doc/classes/CylinderShape.xml:12
+#: doc/classes/Dictionary.xml:88 doc/classes/DynamicFont.xml:18
+#: doc/classes/DynamicFontData.xml:10 doc/classes/File.xml:29
+#: doc/classes/Input.xml:12 doc/classes/InputEvent.xml:13
+#: doc/classes/InputEventAction.xml:12 doc/classes/InputEventMouseMotion.xml:12
+#: doc/classes/KinematicBody.xml:15 doc/classes/RayCast.xml:15
+#: doc/classes/StaticBody.xml:13 doc/classes/SurfaceTool.xml:22
+#: doc/classes/TextureButton.xml:12 doc/classes/TextureRect.xml:11
+#: doc/classes/Thread.xml:13 doc/classes/VBoxContainer.xml:10
+msgid "https://godotengine.org/asset-library/asset/676"
+msgstr ""
+
+#: doc/classes/Basis.xml:19 doc/classes/Line2D.xml:12
+#: doc/classes/Transform.xml:16 doc/classes/Transform2D.xml:14
+msgid "https://godotengine.org/asset-library/asset/583"
+msgstr ""
+
+#: doc/classes/Basis.xml:26
+msgid "Constructs a pure rotation basis matrix from the given quaternion."
+msgstr ""
+
+#: doc/classes/Basis.xml:33
+msgid ""
+"Constructs a pure rotation basis matrix from the given Euler angles (in the "
+"YXZ convention: when *composing*, first Y, then X, and Z last), given in the "
+"vector format as (X angle, Y angle, Z angle).\n"
+"Consider using the [Quat] constructor instead, which uses a quaternion "
+"instead of Euler angles."
+msgstr ""
+
+#: doc/classes/Basis.xml:42
+msgid ""
+"Constructs a pure rotation basis matrix, rotated around the given "
+"[code]axis[/code] by [code]phi[/code], in radians. The axis must be a "
+"normalized vector."
+msgstr ""
+
+#: doc/classes/Basis.xml:51
+msgid "Constructs a basis matrix from 3 axis vectors (matrix columns)."
+msgstr ""
+
+#: doc/classes/Basis.xml:57
+msgid ""
+"Returns the determinant of the basis matrix. If the basis is uniformly "
+"scaled, its determinant is the square of the scale.\n"
+"A negative determinant means the basis has a negative scale. A zero "
+"determinant means the basis isn't invertible, and is usually considered "
+"invalid."
+msgstr ""
+
+#: doc/classes/Basis.xml:64
+msgid ""
+"Returns the basis's rotation in the form of Euler angles (in the YXZ "
+"convention: when decomposing, first Z, then X, and Y last). The returned "
+"vector contains the rotation angles in the format (X angle, Y angle, Z "
+"angle).\n"
+"Consider using the [method get_rotation_quat] method instead, which returns "
+"a [Quat] quaternion instead of Euler angles."
+msgstr ""
+
+#: doc/classes/Basis.xml:71
+msgid ""
+"This function considers a discretization of rotations into 24 points on unit "
+"sphere, lying along the vectors (x,y,z) with each component being either -1, "
+"0, or 1, and returns the index of the point best representing the "
+"orientation of the object. It is mainly used by the [GridMap] editor. For "
+"further details, refer to the Godot source code."
+msgstr ""
+
+#: doc/classes/Basis.xml:77
+msgid ""
+"Returns the basis's rotation in the form of a quaternion. See [method "
+"get_euler] if you need Euler angles, but keep in mind quaternions should "
+"generally be preferred to Euler angles."
+msgstr ""
+
+#: doc/classes/Basis.xml:83
+msgid ""
+"Assuming that the matrix is the combination of a rotation and scaling, "
+"return the absolute value of scaling factors along each axis."
+msgstr ""
+
+#: doc/classes/Basis.xml:89
+msgid "Returns the inverse of the matrix."
+msgstr ""
+
+#: doc/classes/Basis.xml:97
+msgid ""
+"Returns [code]true[/code] if this basis and [code]b[/code] are approximately "
+"equal, by calling [code]is_equal_approx[/code] on each component.\n"
+"[b]Note:[/b] For complicated reasons, the epsilon argument is always "
+"discarded. Don't use the epsilon argument, it does nothing."
+msgstr ""
+
+#: doc/classes/Basis.xml:104
+msgid ""
+"Returns the orthonormalized version of the matrix (useful to call from time "
+"to time to avoid rounding error for orthogonal matrices). This performs a "
+"Gram-Schmidt orthonormalization on the basis of the matrix."
+msgstr ""
+
+#: doc/classes/Basis.xml:112
+msgid ""
+"Introduce an additional rotation around the given axis by phi (radians). The "
+"axis must be a normalized vector."
+msgstr ""
+
+#: doc/classes/Basis.xml:119
+msgid ""
+"Introduce an additional scaling specified by the given 3D scaling factor."
+msgstr ""
+
+#: doc/classes/Basis.xml:127
+msgid ""
+"Assuming that the matrix is a proper rotation matrix, slerp performs a "
+"spherical-linear interpolation with another rotation matrix."
+msgstr ""
+
+#: doc/classes/Basis.xml:134
+msgid "Transposed dot product with the X axis of the matrix."
+msgstr ""
+
+#: doc/classes/Basis.xml:141
+msgid "Transposed dot product with the Y axis of the matrix."
+msgstr ""
+
+#: doc/classes/Basis.xml:148
+msgid "Transposed dot product with the Z axis of the matrix."
+msgstr ""
+
+#: doc/classes/Basis.xml:154
+msgid "Returns the transposed version of the matrix."
+msgstr ""
+
+#: doc/classes/Basis.xml:161
+msgid "Returns a vector transformed (multiplied) by the matrix."
+msgstr ""
+
+#: doc/classes/Basis.xml:168
+msgid ""
+"Returns a vector transformed (multiplied) by the transposed basis matrix.\n"
+"[b]Note:[/b] This results in a multiplication by the inverse of the matrix "
+"only if it represents a rotation-reflection."
+msgstr ""
+
+#: doc/classes/Basis.xml:175 doc/classes/Transform2D.xml:150
+msgid ""
+"The basis matrix's X vector (column 0). Equivalent to array index [code]0[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Basis.xml:178 doc/classes/Transform2D.xml:153
+msgid ""
+"The basis matrix's Y vector (column 1). Equivalent to array index [code]1[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Basis.xml:181
+msgid ""
+"The basis matrix's Z vector (column 2). Equivalent to array index [code]2[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Basis.xml:186
+msgid ""
+"The identity basis, with no rotation or scaling applied.\n"
+"This is identical to calling [code]Basis()[/code] without any parameters. "
+"This constant can be used to make your code clearer, and for consistency "
+"with C#."
+msgstr ""
+
+#: doc/classes/Basis.xml:190
+msgid ""
+"The basis that will flip something along the X axis when used in a "
+"transformation."
+msgstr ""
+
+#: doc/classes/Basis.xml:193
+msgid ""
+"The basis that will flip something along the Y axis when used in a "
+"transformation."
+msgstr ""
+
+#: doc/classes/Basis.xml:196
+msgid ""
+"The basis that will flip something along the Z axis when used in a "
+"transformation."
+msgstr ""
+
+#: doc/classes/BitMap.xml:4
+msgid "Boolean matrix."
+msgstr ""
+
+#: doc/classes/BitMap.xml:7
+msgid ""
+"A two-dimensional array of boolean values, can be used to efficiently store "
+"a binary matrix (every matrix element takes only one bit) and query the "
+"values using natural cartesian coordinates."
+msgstr ""
+
+#: doc/classes/BitMap.xml:16
+msgid ""
+"Creates a bitmap with the specified size, filled with [code]false[/code]."
+msgstr ""
+
+#: doc/classes/BitMap.xml:24
+msgid ""
+"Creates a bitmap that matches the given image dimensions, every element of "
+"the bitmap is set to [code]false[/code] if the alpha value of the image at "
+"that position is equal to [code]threshold[/code] or less, and [code]true[/"
+"code] in other case."
+msgstr ""
+
+#: doc/classes/BitMap.xml:31
+msgid "Returns bitmap's value at the specified position."
+msgstr ""
+
+#: doc/classes/BitMap.xml:37
+msgid "Returns bitmap's dimensions."
+msgstr ""
+
+#: doc/classes/BitMap.xml:43
+msgid ""
+"Returns the amount of bitmap elements that are set to [code]true[/code]."
+msgstr ""
+
+#: doc/classes/BitMap.xml:51
+msgid ""
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
+msgstr ""
+
+#: doc/classes/BitMap.xml:66
+msgid ""
+"Sets the bitmap's element at the specified position, to the specified value."
+msgstr ""
+
+#: doc/classes/BitMap.xml:74
+msgid "Sets a rectangular portion of the bitmap to the specified value."
+msgstr ""
+
+#: doc/classes/BitmapFont.xml:4
+msgid ""
+"Renders text using fonts under the [url=https://www.angelcode.com/products/"
+"bmfont/]BMFont[/url] format.\n"
+"Handles files with the [code].fnt[/code] extension."
+msgstr ""
+
+#: doc/classes/BitmapFont.xml:8
+msgid ""
+"Renders text using [code]*.fnt[/code] fonts containing texture atlases. "
+"Supports distance fields. For using vector font files like TTF directly, see "
+"[DynamicFont]."
+msgstr ""
+
+#: doc/classes/BitmapFont.xml:21
+msgid ""
+"Adds a character to the font, where [code]character[/code] is the Unicode "
+"value, [code]texture[/code] is the texture index, [code]rect[/code] is the "
+"region in the texture (in pixels!), [code]align[/code] is the (optional) "
+"alignment for the character and [code]advance[/code] is the (optional) "
+"advance."
+msgstr ""
+
+#: doc/classes/BitmapFont.xml:30
+msgid ""
+"Adds a kerning pair to the [BitmapFont] as a difference. Kerning pairs are "
+"special cases where a typeface advance is determined by the next character."
+msgstr ""
+
+#: doc/classes/BitmapFont.xml:37
+msgid "Adds a texture to the [BitmapFont]."
+msgstr ""
+
+#: doc/classes/BitmapFont.xml:43
+msgid "Clears all the font data and settings."
+msgstr ""
+
+#: doc/classes/BitmapFont.xml:50
+msgid ""
+"Creates a BitmapFont from the [code]*.fnt[/code] file at [code]path[/code]."
+msgstr ""
+
+#: doc/classes/BitmapFont.xml:58
+msgid "Returns a kerning pair as a difference."
+msgstr ""
+
+#: doc/classes/BitmapFont.xml:65
+msgid "Returns the font atlas texture at index [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/BitmapFont.xml:71
+msgid "Returns the number of textures in the BitmapFont atlas."
+msgstr ""
+
+#: doc/classes/BitmapFont.xml:77
+msgid "Ascent (number of pixels above the baseline)."
+msgstr ""
+
+#: doc/classes/BitmapFont.xml:80
+msgid "If [code]true[/code], distance field hint is enabled."
+msgstr ""
+
+#: doc/classes/BitmapFont.xml:83
+msgid "The fallback font."
+msgstr ""
+
+#: doc/classes/BitmapFont.xml:86
+msgid "Total font height (ascent plus descent) in pixels."
+msgstr ""
+
+#: doc/classes/Bone2D.xml:4
+msgid "Joint used with [Skeleton2D] to control and animate other nodes."
+msgstr ""
+
+#: doc/classes/Bone2D.xml:7
+msgid ""
+"Use a hierarchy of [code]Bone2D[/code] bound to a [Skeleton2D] to control, "
+"and animate other [Node2D] nodes.\n"
+"You can use [code]Bone2D[/code] and [code]Skeleton2D[/code] nodes to animate "
+"2D meshes created with the Polygon 2D UV editor.\n"
+"Each bone has a [member rest] transform that you can reset to with [method "
+"apply_rest]. These rest poses are relative to the bone's parent.\n"
+"If in the editor, you can set the rest pose of an entire skeleton using a "
+"menu option, from the code, you need to iterate over the bones to set their "
+"individual rest poses."
+msgstr ""
+
+#: doc/classes/Bone2D.xml:18
+msgid "Stores the node's current transforms in [member rest]."
+msgstr ""
+
+#: doc/classes/Bone2D.xml:24
+msgid ""
+"Returns the node's index as part of the entire skeleton. See [Skeleton2D]."
+msgstr ""
+
+#: doc/classes/Bone2D.xml:30
+msgid ""
+"Returns the node's [member rest] [code]Transform2D[/code] if it doesn't have "
+"a parent, or its rest pose relative to its parent."
+msgstr ""
+
+#: doc/classes/Bone2D.xml:36
+msgid ""
+"Length of the bone's representation drawn in the editor's viewport in pixels."
+msgstr ""
+
+#: doc/classes/Bone2D.xml:39
+msgid ""
+"Rest transform of the bone. You can reset the node's transforms to this "
+"value using [method apply_rest]."
+msgstr ""
+
+#: doc/classes/BoneAttachment.xml:4
+msgid "A node that will attach to a bone."
+msgstr ""
+
+#: doc/classes/BoneAttachment.xml:7
+msgid ""
+"This node must be the child of a [Skeleton] node. You can then select a bone "
+"for this node to attach to. The BoneAttachment node will copy the transform "
+"of the selected bone."
+msgstr ""
+
+#: doc/classes/BoneAttachment.xml:15
+msgid "The name of the attached bone."
+msgstr ""
+
+#: doc/classes/bool.xml:4
+msgid "Boolean built-in type."
+msgstr ""
+
+#: doc/classes/bool.xml:7
+msgid ""
+"Boolean is a built-in type. There are two boolean values: [code]true[/code] "
+"and [code]false[/code]. You can think of it as a switch with on or off (1 or "
+"0) setting. Booleans are used in programming for logic in condition "
+"statements, like [code]if[/code] statements.\n"
+"Booleans can be directly used in [code]if[/code] statements. The code below "
+"demonstrates this on the [code]if can_shoot:[/code] line. You don't need to "
+"use [code]== true[/code], you only need [code]if can_shoot:[/code]. "
+"Similarly, use [code]if not can_shoot:[/code] rather than [code]== false[/"
+"code].\n"
+"[codeblock]\n"
+"var can_shoot = true\n"
+"\n"
+"func shoot():\n"
+" if can_shoot:\n"
+" pass # Perform shooting actions here.\n"
+"[/codeblock]\n"
+"The following code will only create a bullet if both conditions are met: "
+"action \"shoot\" is pressed and if [code]can_shoot[/code] is [code]true[/"
+"code].\n"
+"[b]Note:[/b] [code]Input.is_action_pressed(\"shoot\")[/code] is also a "
+"boolean that is [code]true[/code] when \"shoot\" is pressed and [code]false[/"
+"code] when \"shoot\" isn't pressed.\n"
+"[codeblock]\n"
+"var can_shoot = true\n"
+"\n"
+"func shoot():\n"
+" if can_shoot and Input.is_action_pressed(\"shoot\"):\n"
+" create_bullet()\n"
+"[/codeblock]\n"
+"The following code will set [code]can_shoot[/code] to [code]false[/code] and "
+"start a timer. This will prevent player from shooting until the timer runs "
+"out. Next [code]can_shoot[/code] will be set to [code]true[/code] again "
+"allowing player to shoot once again.\n"
+"[codeblock]\n"
+"var can_shoot = true\n"
+"onready var cool_down = $CoolDownTimer\n"
+"\n"
+"func shoot():\n"
+" if can_shoot and Input.is_action_pressed(\"shoot\"):\n"
+" create_bullet()\n"
+" can_shoot = false\n"
+" cool_down.start()\n"
+"\n"
+"func _on_CoolDownTimer_timeout():\n"
+" can_shoot = true\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/bool.xml:47
+msgid ""
+"Cast an [int] value to a boolean value, this method will return [code]false[/"
+"code] if [code]0[/code] is passed in, and [code]true[/code] for all other "
+"ints."
+msgstr ""
+
+#: doc/classes/bool.xml:54
+msgid ""
+"Cast a [float] value to a boolean value, this method will return "
+"[code]false[/code] if [code]0.0[/code] is passed in, and [code]true[/code] "
+"for all other floats."
+msgstr ""
+
+#: doc/classes/bool.xml:61
+msgid ""
+"Cast a [String] value to a boolean value, this method will return "
+"[code]false[/code] if [code]\"\"[/code] is passed in, and [code]true[/code] "
+"for all non-empty strings.\n"
+"Examples: [code]bool(\"False\")[/code] returns [code]true[/code], "
+"[code]bool(\"\")[/code] returns [code]false[/code]."
+msgstr ""
+
+#: doc/classes/BoxContainer.xml:4
+msgid "Base class for box containers."
+msgstr ""
+
+#: doc/classes/BoxContainer.xml:7
+msgid ""
+"Arranges child controls vertically or horizontally, and rearranges the "
+"controls automatically when their minimum size changes."
+msgstr ""
+
+#: doc/classes/BoxContainer.xml:16
+msgid ""
+"Adds a control to the box as a spacer. If [code]true[/code], [code]begin[/"
+"code] will insert the spacer control in front of other children."
+msgstr ""
+
+#: doc/classes/BoxContainer.xml:22
+msgid ""
+"The alignment of the container's children (must be one of [constant "
+"ALIGN_BEGIN], [constant ALIGN_CENTER] or [constant ALIGN_END])."
+msgstr ""
+
+#: doc/classes/BoxContainer.xml:28
+msgid "Aligns children with the beginning of the container."
+msgstr ""
+
+#: doc/classes/BoxContainer.xml:31
+msgid "Aligns children with the center of the container."
+msgstr ""
+
+#: doc/classes/BoxContainer.xml:34
+msgid "Aligns children with the end of the container."
+msgstr ""
+
+#: doc/classes/BoxShape.xml:4
+msgid "Box shape resource."
+msgstr ""
+
+#: doc/classes/BoxShape.xml:7
+msgid "3D box shape that can be a child of a [PhysicsBody] or [Area]."
+msgstr ""
+
+#: doc/classes/BoxShape.xml:10 doc/classes/CapsuleShape.xml:10
+#: doc/classes/ConcavePolygonShape.xml:11 doc/classes/ConvexPolygonShape.xml:10
+#: doc/classes/CylinderShape.xml:11 doc/classes/ProjectSettings.xml:13
+#: doc/classes/RigidBody.xml:16 doc/classes/SphereShape.xml:10
+#: doc/classes/StaticBody.xml:11
+msgid "https://godotengine.org/asset-library/asset/675"
+msgstr ""
+
+#: doc/classes/BoxShape.xml:11 doc/classes/CollisionShape.xml:11
+#: modules/gridmap/doc_classes/GridMap.xml:16 doc/classes/KinematicBody.xml:13
+#: doc/classes/Mesh.xml:11 doc/classes/MeshInstance.xml:11
+#: doc/classes/MeshLibrary.xml:10
+msgid "https://godotengine.org/asset-library/asset/126"
+msgstr ""
+
+#: doc/classes/BoxShape.xml:18
+msgid ""
+"The box's half extents. The width, height and depth of this shape is twice "
+"the half extents."
+msgstr ""
+
+#: doc/classes/Button.xml:4
+msgid "Standard themed Button."
+msgstr ""
+
+#: doc/classes/Button.xml:7
+msgid ""
+"Button is the standard themed button. It can contain text and an icon, and "
+"will display them according to the current [Theme].\n"
+"[b]Example of creating a button and assigning an action when pressed by code:"
+"[/b]\n"
+"[codeblock]\n"
+"func _ready():\n"
+" var button = Button.new()\n"
+" button.text = \"Click me\"\n"
+" button.connect(\"pressed\", self, \"_button_pressed\")\n"
+" add_child(button)\n"
+"\n"
+"func _button_pressed():\n"
+" print(\"Hello world!\")\n"
+"[/codeblock]\n"
+"Buttons (like all Control nodes) can also be created in the editor, but some "
+"situations may require creating them from code.\n"
+"See also [BaseButton] which contains common properties and methods "
+"associated with this node.\n"
+"[b]Note:[/b] Buttons do not interpret touch input and therefore don't "
+"support multitouch, since mouse emulation can only press one button at a "
+"given time. Use [TouchScreenButton] for buttons that trigger gameplay "
+"movement or actions, as [TouchScreenButton] supports multitouch."
+msgstr ""
+
+#: doc/classes/Button.xml:25 doc/classes/Dictionary.xml:89
+#: doc/classes/GridContainer.xml:12 doc/classes/OS.xml:10
+#: doc/classes/PoolStringArray.xml:11 doc/classes/ProjectSettings.xml:15
+#: doc/classes/ResourceLoader.xml:11 doc/classes/RichTextLabel.xml:17
+msgid "https://godotengine.org/asset-library/asset/677"
+msgstr ""
+
+#: doc/classes/Button.xml:31
+msgid ""
+"Text alignment policy for the button's text, use one of the [enum TextAlign] "
+"constants."
+msgstr ""
+
+#: doc/classes/Button.xml:34
+msgid ""
+"When this property is enabled, text that is too large to fit the button is "
+"clipped, when disabled the Button will always be wide enough to hold the "
+"text."
+msgstr ""
+
+#: doc/classes/Button.xml:37
+msgid ""
+"When enabled, the button's icon will expand/shrink to fit the button's size "
+"while keeping its aspect."
+msgstr ""
+
+#: doc/classes/Button.xml:40
+msgid "Flat buttons don't display decoration."
+msgstr ""
+
+#: doc/classes/Button.xml:43
+msgid ""
+"Button's icon, if text is present the icon will be placed before the text."
+msgstr ""
+
+#: doc/classes/Button.xml:46 doc/classes/LinkButton.xml:18
+msgid "The button's text that will be displayed inside the button's area."
+msgstr ""
+
+#: doc/classes/Button.xml:51
+msgid "Align the text to the left."
+msgstr ""
+
+#: doc/classes/Button.xml:54
+msgid "Align the text to the center."
+msgstr ""
+
+#: doc/classes/Button.xml:57
+msgid "Align the text to the right."
+msgstr ""
+
+#: doc/classes/Button.xml:62
+msgid "[StyleBox] used when the [Button] is disabled."
+msgstr ""
+
+#: doc/classes/Button.xml:65
+msgid ""
+"[StyleBox] used when the [Button] is focused. It is displayed over the "
+"current [StyleBox], so using [StyleBoxEmpty] will just disable the focus "
+"visual effect."
+msgstr ""
+
+#: doc/classes/Button.xml:68
+msgid "[Font] of the [Button]'s text."
+msgstr ""
+
+#: doc/classes/Button.xml:71
+msgid "Default text [Color] of the [Button]."
+msgstr ""
+
+#: doc/classes/Button.xml:74
+msgid "Text [Color] used when the [Button] is disabled."
+msgstr ""
+
+#: doc/classes/Button.xml:77
+msgid ""
+"Text [Color] used when the [Button] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/Button.xml:80
+msgid "Text [Color] used when the [Button] is being hovered."
+msgstr ""
+
+#: doc/classes/Button.xml:83
+msgid "Text [Color] used when the [Button] is being pressed."
+msgstr ""
+
+#: doc/classes/Button.xml:86
+msgid "[StyleBox] used when the [Button] is being hovered."
+msgstr ""
+
+#: doc/classes/Button.xml:89
+msgid "The horizontal space between [Button]'s icon and text."
+msgstr ""
+
+#: doc/classes/Button.xml:92
+msgid "Default [StyleBox] for the [Button]."
+msgstr ""
+
+#: doc/classes/Button.xml:95
+msgid "[StyleBox] used when the [Button] is being pressed."
+msgstr ""
+
+#: doc/classes/ButtonGroup.xml:4
+msgid "Group of Buttons."
+msgstr ""
+
+#: doc/classes/ButtonGroup.xml:7
+msgid ""
+"Group of [Button]. All direct and indirect children buttons become radios. "
+"Only one allows being pressed.\n"
+"[member BaseButton.toggle_mode] should be [code]true[/code]."
+msgstr ""
+
+#: doc/classes/ButtonGroup.xml:16
+msgid ""
+"Returns an [Array] of [Button]s who have this as their [ButtonGroup] (see "
+"[member BaseButton.group])."
+msgstr ""
+
+#: doc/classes/ButtonGroup.xml:22
+msgid "Returns the current pressed button."
+msgstr ""
+
+#: doc/classes/ButtonGroup.xml:33
+msgid "Emitted when one of the buttons of the group is pressed."
+msgstr ""
+
+#: doc/classes/Camera.xml:4
+msgid "Camera node, displays from a point of view."
+msgstr ""
+
+#: doc/classes/Camera.xml:7
+msgid ""
+"Camera is a special node that displays what is visible from its current "
+"location. Cameras register themselves in the nearest [Viewport] node (when "
+"ascending the tree). Only one camera can be active per viewport. If no "
+"viewport is available ascending the tree, the camera will register in the "
+"global viewport. In other words, a camera just provides 3D display "
+"capabilities to a [Viewport], and, without one, a scene registered in that "
+"[Viewport] (or higher viewports) can't be displayed."
+msgstr ""
+
+#: doc/classes/Camera.xml:17
+msgid ""
+"If this is the current camera, remove it from being current. If "
+"[code]enable_next[/code] is [code]true[/code], request to make the next "
+"camera current, if any."
+msgstr ""
+
+#: doc/classes/Camera.xml:23
+msgid "Returns the camera's RID from the [VisualServer]."
+msgstr ""
+
+#: doc/classes/Camera.xml:29
+msgid ""
+"Returns the transform of the camera plus the vertical ([member v_offset]) "
+"and horizontal ([member h_offset]) offsets; and any other adjustments made "
+"to the position and orientation of the camera by subclassed cameras such as "
+"[ClippedCamera], [InterpolatedCamera] and [ARVRCamera]."
+msgstr ""
+
+#: doc/classes/Camera.xml:36
+msgid ""
+"Returns [code]true[/code] if the given [code]layer[/code] in the [member "
+"cull_mask] is enabled, [code]false[/code] otherwise."
+msgstr ""
+
+#: doc/classes/Camera.xml:42
+msgid ""
+"Returns the camera's frustum planes in world space units as an array of "
+"[Plane]s in the following order: near, far, left, top, right, bottom. Not to "
+"be confused with [member frustum_offset]."
+msgstr ""
+
+#: doc/classes/Camera.xml:49
+msgid ""
+"Returns [code]true[/code] if the given position is behind the camera.\n"
+"[b]Note:[/b] A position which returns [code]false[/code] may still be "
+"outside the camera's field of view."
+msgstr ""
+
+#: doc/classes/Camera.xml:56
+msgid ""
+"Makes this camera the current camera for the [Viewport] (see class "
+"description). If the camera node is outside the scene tree, it will attempt "
+"to become current once it's added."
+msgstr ""
+
+#: doc/classes/Camera.xml:63
+msgid ""
+"Returns a normal vector from the screen point location directed along the "
+"camera. Orthogonal cameras are normalized. Perspective cameras account for "
+"perspective, screen width/height, etc."
+msgstr ""
+
+#: doc/classes/Camera.xml:71
+msgid ""
+"Returns the 3D point in world space that maps to the given 2D coordinate in "
+"the [Viewport] rectangle on a plane that is the given [code]z_depth[/code] "
+"distance into the scene away from the camera."
+msgstr ""
+
+#: doc/classes/Camera.xml:78
+msgid ""
+"Returns a normal vector in world space, that is the result of projecting a "
+"point on the [Viewport] rectangle by the camera projection. This is useful "
+"for casting rays in the form of (origin, normal) for object intersection or "
+"picking."
+msgstr ""
+
+#: doc/classes/Camera.xml:85
+msgid ""
+"Returns a 3D position in world space, that is the result of projecting a "
+"point on the [Viewport] rectangle by the camera projection. This is useful "
+"for casting rays in the form of (origin, normal) for object intersection or "
+"picking."
+msgstr ""
+
+#: doc/classes/Camera.xml:93
+msgid ""
+"Enables or disables the given [code]layer[/code] in the [member cull_mask]."
+msgstr ""
+
+#: doc/classes/Camera.xml:103
+msgid ""
+"Sets the camera projection to frustum mode (see [constant "
+"PROJECTION_FRUSTUM]), by specifying a [code]size[/code], an [code]offset[/"
+"code], and the [code]z_near[/code] and [code]z_far[/code] clip planes in "
+"world space units."
+msgstr ""
+
+#: doc/classes/Camera.xml:112
+msgid ""
+"Sets the camera projection to orthogonal mode (see [constant "
+"PROJECTION_ORTHOGONAL]), by specifying a [code]size[/code], and the "
+"[code]z_near[/code] and [code]z_far[/code] clip planes in world space units. "
+"(As a hint, 2D games often use this projection, with values specified in "
+"pixels.)"
+msgstr ""
+
+#: doc/classes/Camera.xml:121
+msgid ""
+"Sets the camera projection to perspective mode (see [constant "
+"PROJECTION_PERSPECTIVE]), by specifying a [code]fov[/code] (field of view) "
+"angle in degrees, and the [code]z_near[/code] and [code]z_far[/code] clip "
+"planes in world space units."
+msgstr ""
+
+#: doc/classes/Camera.xml:128
+msgid ""
+"Returns the 2D coordinate in the [Viewport] rectangle that maps to the given "
+"3D point in world space.\n"
+"[b]Note:[/b] When using this to position GUI elements over a 3D viewport, "
+"use [method is_position_behind] to prevent them from appearing if the 3D "
+"point is behind the camera:\n"
+"[codeblock]\n"
+"# This code block is part of a script that inherits from Spatial.\n"
+"# `control` is a reference to a node inheriting from Control.\n"
+"control.visible = not get_viewport().get_camera()."
+"is_position_behind(global_transform.origin)\n"
+"control.rect_position = get_viewport().get_camera()."
+"unproject_position(global_transform.origin)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Camera.xml:141
+msgid ""
+"The culling mask that describes which 3D render layers are rendered by this "
+"camera."
+msgstr ""
+
+#: doc/classes/Camera.xml:144
+msgid ""
+"If [code]true[/code], the ancestor [Viewport] is currently using this camera."
+msgstr ""
+
+#: doc/classes/Camera.xml:147
+msgid ""
+"If not [constant DOPPLER_TRACKING_DISABLED], this camera will simulate the "
+"[url=https://en.wikipedia.org/wiki/Doppler_effect]Doppler effect[/url] for "
+"objects changed in particular [code]_process[/code] methods. The Doppler "
+"effect is only simulated for [AudioStreamPlayer3D] nodes that have [member "
+"AudioStreamPlayer3D.doppler_tracking] set to a value other than [constant "
+"AudioStreamPlayer3D.DOPPLER_TRACKING_DISABLED].\n"
+"[b]Note:[/b] To toggle the Doppler effect preview in the editor, use the "
+"Perspective menu in the top-left corner of the 3D viewport and toggle "
+"[b]Enable Doppler[/b]."
+msgstr ""
+
+#: doc/classes/Camera.xml:151
+msgid "The [Environment] to use for this camera."
+msgstr ""
+
+#: doc/classes/Camera.xml:154
+msgid ""
+"The distance to the far culling boundary for this camera relative to its "
+"local Z axis."
+msgstr ""
+
+#: doc/classes/Camera.xml:157
+msgid ""
+"The camera's field of view angle (in degrees). Only applicable in "
+"perspective mode. Since [member keep_aspect] locks one axis, [code]fov[/"
+"code] sets the other axis' field of view angle.\n"
+"For reference, the default vertical field of view value ([code]70.0[/code]) "
+"is equivalent to a horizontal FOV of:\n"
+"- ~86.07 degrees in a 4:3 viewport\n"
+"- ~96.50 degrees in a 16:10 viewport\n"
+"- ~102.45 degrees in a 16:9 viewport\n"
+"- ~117.06 degrees in a 21:9 viewport"
+msgstr ""
+
+#: doc/classes/Camera.xml:165
+msgid ""
+"The camera's frustum offset. This can be changed from the default to create "
+"\"tilted frustum\" effects such as [url=https://zdoom.org/wiki/Y-shearing]Y-"
+"shearing[/url]."
+msgstr ""
+
+#: doc/classes/Camera.xml:168
+msgid "The horizontal (X) offset of the camera viewport."
+msgstr ""
+
+#: doc/classes/Camera.xml:171
+msgid ""
+"The axis to lock during [member fov]/[member size] adjustments. Can be "
+"either [constant KEEP_WIDTH] or [constant KEEP_HEIGHT]."
+msgstr ""
+
+#: doc/classes/Camera.xml:174
+msgid ""
+"The distance to the near culling boundary for this camera relative to its "
+"local Z axis."
+msgstr ""
+
+#: doc/classes/Camera.xml:177
+msgid ""
+"The camera's projection mode. In [constant PROJECTION_PERSPECTIVE] mode, "
+"objects' Z distance from the camera's local space scales their perceived "
+"size."
+msgstr ""
+
+#: doc/classes/Camera.xml:180
+msgid ""
+"The camera's size measured as 1/2 the width or height. Only applicable in "
+"orthogonal mode. Since [member keep_aspect] locks on axis, [code]size[/code] "
+"sets the other axis' size length."
+msgstr ""
+
+#: doc/classes/Camera.xml:183
+msgid "The vertical (Y) offset of the camera viewport."
+msgstr ""
+
+#: doc/classes/Camera.xml:188
+msgid ""
+"Perspective projection. Objects on the screen becomes smaller when they are "
+"far away."
+msgstr ""
+
+#: doc/classes/Camera.xml:191
+msgid ""
+"Orthogonal projection, also known as orthographic projection. Objects remain "
+"the same size on the screen no matter how far away they are."
+msgstr ""
+
+#: doc/classes/Camera.xml:194
+msgid ""
+"Frustum projection. This mode allows adjusting [member frustum_offset] to "
+"create \"tilted frustum\" effects."
+msgstr ""
+
+#: doc/classes/Camera.xml:197
+msgid ""
+"Preserves the horizontal aspect ratio; also known as Vert- scaling. This is "
+"usually the best option for projects running in portrait mode, as taller "
+"aspect ratios will benefit from a wider vertical FOV."
+msgstr ""
+
+#: doc/classes/Camera.xml:200
+msgid ""
+"Preserves the vertical aspect ratio; also known as Hor+ scaling. This is "
+"usually the best option for projects running in landscape mode, as wider "
+"aspect ratios will automatically benefit from a wider horizontal FOV."
+msgstr ""
+
+#: doc/classes/Camera.xml:203
+msgid ""
+"Disables [url=https://en.wikipedia.org/wiki/Doppler_effect]Doppler effect[/"
+"url] simulation (default)."
+msgstr ""
+
+#: doc/classes/Camera.xml:206
+msgid ""
+"Simulate [url=https://en.wikipedia.org/wiki/Doppler_effect]Doppler effect[/"
+"url] by tracking positions of objects that are changed in [code]_process[/"
+"code]. Changes in the relative velocity of this camera compared to those "
+"objects affect how Audio is perceived (changing the Audio's [code]pitch "
+"shift[/code])."
+msgstr ""
+
+#: doc/classes/Camera.xml:209
+msgid ""
+"Simulate [url=https://en.wikipedia.org/wiki/Doppler_effect]Doppler effect[/"
+"url] by tracking positions of objects that are changed in "
+"[code]_physics_process[/code]. Changes in the relative velocity of this "
+"camera compared to those objects affect how Audio is perceived (changing the "
+"Audio's [code]pitch shift[/code])."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:4
+msgid "Camera node for 2D scenes."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:7
+msgid ""
+"Camera node for 2D scenes. It forces the screen (current layer) to scroll "
+"following this node. This makes it easier (and faster) to program scrollable "
+"scenes than manually changing the position of [CanvasItem]-based nodes.\n"
+"This node is intended to be a simple helper to get things going quickly, but "
+"more functionality may be desired to change how the camera works. To make "
+"your own custom camera node, inherit it from [Node2D] and change the "
+"transform of the canvas by setting [member Viewport.canvas_transform] in "
+"[Viewport] (you can obtain the current [Viewport] by using [method Node."
+"get_viewport]).\n"
+"Note that the [Camera2D] node's [code]position[/code] doesn't represent the "
+"actual position of the screen, which may differ due to applied smoothing or "
+"limits. You can use [method get_camera_screen_center] to get the real "
+"position."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:13 doc/classes/TileMap.xml:13
+#: doc/classes/TileSet.xml:13
+msgid "https://godotengine.org/asset-library/asset/112"
+msgstr ""
+
+#: doc/classes/Camera2D.xml:14 doc/classes/Environment.xml:18
+#: doc/classes/WorldEnvironment.xml:14
+msgid "https://godotengine.org/asset-library/asset/110"
+msgstr ""
+
+#: doc/classes/Camera2D.xml:20
+msgid "Aligns the camera to the tracked node."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:26
+msgid ""
+"Removes any [Camera2D] from the ancestor [Viewport]'s internal currently-"
+"assigned camera."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:32
+msgid "Forces the camera to update scroll immediately."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:38
+msgid "Returns the camera position."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:44
+msgid ""
+"Returns the location of the [Camera2D]'s screen-center, relative to the "
+"origin."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:51
+msgid ""
+"Returns the specified margin. See also [member drag_margin_bottom], [member "
+"drag_margin_top], [member drag_margin_left], and [member drag_margin_right]."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:58
+msgid ""
+"Returns the specified camera limit. See also [member limit_bottom], [member "
+"limit_top], [member limit_left], and [member limit_right]."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:64
+msgid ""
+"Make this the current 2D camera for the scene (viewport and layer), in case "
+"there are many cameras in the scene."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:70
+msgid ""
+"Sets the camera's position immediately to its current smoothing "
+"destination.\n"
+"This has no effect if smoothing is disabled."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:79
+msgid ""
+"Sets the specified margin. See also [member drag_margin_bottom], [member "
+"drag_margin_top], [member drag_margin_left], and [member drag_margin_right]."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:87
+msgid ""
+"Sets the specified camera limit. See also [member limit_bottom], [member "
+"limit_top], [member limit_left], and [member limit_right]."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:93
+msgid "The Camera2D's anchor point. See [enum AnchorMode] constants."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:96
+msgid ""
+"If [code]true[/code], the camera is the active camera for the current scene. "
+"Only one camera can be current, so setting a different camera [code]current[/"
+"code] will disable this one."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:99
+msgid ""
+"The custom [Viewport] node attached to the [Camera2D]. If [code]null[/code] "
+"or not a [Viewport], uses the default viewport instead."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:102
+msgid ""
+"Bottom margin needed to drag the camera. A value of [code]1[/code] makes the "
+"camera move only when reaching the edge of the screen."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:105
+msgid ""
+"If [code]true[/code], the camera only moves when reaching the horizontal "
+"drag margins. If [code]false[/code], the camera moves horizontally "
+"regardless of margins."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:108
+msgid ""
+"Left margin needed to drag the camera. A value of [code]1[/code] makes the "
+"camera move only when reaching the edge of the screen."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:111
+msgid ""
+"Right margin needed to drag the camera. A value of [code]1[/code] makes the "
+"camera move only when reaching the edge of the screen."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:114
+msgid ""
+"Top margin needed to drag the camera. A value of [code]1[/code] makes the "
+"camera move only when reaching the edge of the screen."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:117
+msgid ""
+"If [code]true[/code], the camera only moves when reaching the vertical drag "
+"margins. If [code]false[/code], the camera moves vertically regardless of "
+"margins."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:120
+msgid ""
+"If [code]true[/code], draws the camera's drag margin rectangle in the editor."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:123
+msgid ""
+"If [code]true[/code], draws the camera's limits rectangle in the editor."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:126
+msgid ""
+"If [code]true[/code], draws the camera's screen rectangle in the editor."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:129
+msgid ""
+"Bottom scroll limit in pixels. The camera stops moving when reaching this "
+"value."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:132
+msgid ""
+"Left scroll limit in pixels. The camera stops moving when reaching this "
+"value."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:135
+msgid ""
+"Right scroll limit in pixels. The camera stops moving when reaching this "
+"value."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:138
+msgid ""
+"If [code]true[/code], the camera smoothly stops when reaches its limits.\n"
+"This has no effect if smoothing is disabled.\n"
+"[b]Note:[/b] To immediately update the camera's position to be within limits "
+"without smoothing, even with this setting enabled, invoke [method "
+"reset_smoothing]."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:143
+msgid ""
+"Top scroll limit in pixels. The camera stops moving when reaching this value."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:146
+msgid ""
+"The camera's offset, useful for looking around or camera shake animations."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:149
+msgid ""
+"The horizontal offset of the camera, relative to the drag margins.\n"
+"[b]Note:[/b] Offset H is used only to force offset relative to margins. It's "
+"not updated in any way if drag margins are enabled and can be used to set "
+"initial offset."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:153
+msgid ""
+"The vertical offset of the camera, relative to the drag margins.\n"
+"[b]Note:[/b] Used the same as [member offset_h]."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:157
+msgid "The camera's process callback. See [enum Camera2DProcessMode]."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:160
+msgid "If [code]true[/code], the camera rotates with the target."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:163
+msgid ""
+"If [code]true[/code], the camera smoothly moves towards the target at "
+"[member smoothing_speed]."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:166
+msgid ""
+"Speed in pixels per second of the camera's smoothing effect when [member "
+"smoothing_enabled] is [code]true[/code]."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:169
+msgid ""
+"The camera's zoom relative to the viewport. Values larger than "
+"[code]Vector2(1, 1)[/code] zoom out and smaller values zoom in. For an "
+"example, use [code]Vector2(0.5, 0.5)[/code] for a 2× zoom-in, and "
+"[code]Vector2(4, 4)[/code] for a 4× zoom-out."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:174
+msgid ""
+"The camera's position is fixed so that the top-left corner is always at the "
+"origin."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:177
+msgid ""
+"The camera's position takes into account vertical/horizontal offsets and the "
+"screen size."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:180 doc/classes/ClippedCamera.xml:89
+msgid "The camera updates with the [code]_physics_process[/code] callback."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:183 doc/classes/ClippedCamera.xml:92
+msgid "The camera updates with the [code]_process[/code] callback."
+msgstr ""
+
+#: doc/classes/CameraFeed.xml:4
+msgid ""
+"A camera feed gives you access to a single physical camera attached to your "
+"device."
+msgstr ""
+
+#: doc/classes/CameraFeed.xml:7
+msgid ""
+"A camera feed gives you access to a single physical camera attached to your "
+"device. When enabled, Godot will start capturing frames from the camera "
+"which can then be used.\n"
+"[b]Note:[/b] Many cameras will return YCbCr images which are split into two "
+"textures and need to be combined in a shader. Godot does this automatically "
+"for you if you set the environment to show the camera image in the "
+"background."
+msgstr ""
+
+#: doc/classes/CameraFeed.xml:16
+msgid "Returns the unique ID for this feed."
+msgstr ""
+
+#: doc/classes/CameraFeed.xml:22
+msgid "Returns the camera's name."
+msgstr ""
+
+#: doc/classes/CameraFeed.xml:28
+msgid "Returns the position of camera on the device."
+msgstr ""
+
+#: doc/classes/CameraFeed.xml:34
+msgid "If [code]true[/code], the feed is active."
+msgstr ""
+
+#: doc/classes/CameraFeed.xml:37
+msgid "The transform applied to the camera's image."
+msgstr ""
+
+#: doc/classes/CameraFeed.xml:42
+msgid "No image set for the feed."
+msgstr ""
+
+#: doc/classes/CameraFeed.xml:45
+msgid "Feed supplies RGB images."
+msgstr ""
+
+#: doc/classes/CameraFeed.xml:48
+msgid "Feed supplies YCbCr images that need to be converted to RGB."
+msgstr ""
+
+#: doc/classes/CameraFeed.xml:51
+msgid ""
+"Feed supplies separate Y and CbCr images that need to be combined and "
+"converted to RGB."
+msgstr ""
+
+#: doc/classes/CameraFeed.xml:54
+msgid "Unspecified position."
+msgstr ""
+
+#: doc/classes/CameraFeed.xml:57
+msgid "Camera is mounted at the front of the device."
+msgstr ""
+
+#: doc/classes/CameraFeed.xml:60
+msgid "Camera is mounted at the back of the device."
+msgstr ""
+
+#: doc/classes/CameraServer.xml:4
+msgid "Server keeping track of different cameras accessible in Godot."
+msgstr ""
+
+#: doc/classes/CameraServer.xml:7
+msgid ""
+"The [CameraServer] keeps track of different cameras accessible in Godot. "
+"These are external cameras such as webcams or the cameras on your phone.\n"
+"It is notably used to provide AR modules with a video feed from the camera."
+msgstr ""
+
+#: doc/classes/CameraServer.xml:17
+msgid "Adds a camera feed to the camera server."
+msgstr ""
+
+#: doc/classes/CameraServer.xml:23
+msgid "Returns an array of [CameraFeed]s."
+msgstr ""
+
+#: doc/classes/CameraServer.xml:30
+msgid "Returns the [CameraFeed] with this id."
+msgstr ""
+
+#: doc/classes/CameraServer.xml:36
+msgid "Returns the number of [CameraFeed]s registered."
+msgstr ""
+
+#: doc/classes/CameraServer.xml:43
+msgid "Removes a [CameraFeed]."
+msgstr ""
+
+#: doc/classes/CameraServer.xml:51
+msgid "Emitted when a [CameraFeed] is added (e.g. webcam is plugged in)."
+msgstr ""
+
+#: doc/classes/CameraServer.xml:57
+msgid "Emitted when a [CameraFeed] is removed (e.g. webcam is unplugged)."
+msgstr ""
+
+#: doc/classes/CameraServer.xml:63
+msgid "The RGBA camera image."
+msgstr ""
+
+#: doc/classes/CameraServer.xml:66
+msgid "The YCbCr camera image."
+msgstr ""
+
+#: doc/classes/CameraServer.xml:69
+msgid "The Y component camera image."
+msgstr ""
+
+#: doc/classes/CameraServer.xml:72
+msgid "The CbCr component camera image."
+msgstr ""
+
+#: doc/classes/CameraTexture.xml:4
+msgid "Texture provided by a [CameraFeed]."
+msgstr ""
+
+#: doc/classes/CameraTexture.xml:7
+msgid ""
+"This texture gives access to the camera texture provided by a [CameraFeed].\n"
+"[b]Note:[/b] Many cameras supply YCbCr images which need to be converted in "
+"a shader."
+msgstr ""
+
+#: doc/classes/CameraTexture.xml:16
+msgid "The ID of the [CameraFeed] for which we want to display the image."
+msgstr ""
+
+#: doc/classes/CameraTexture.xml:19
+msgid ""
+"Convenience property that gives access to the active property of the "
+"[CameraFeed]."
+msgstr ""
+
+#: doc/classes/CameraTexture.xml:23
+msgid ""
+"Which image within the [CameraFeed] we want access to, important if the "
+"camera image is split in a Y and CbCr component."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:4
+msgid "Base class of anything 2D."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:7
+msgid ""
+"Base class of anything 2D. Canvas items are laid out in a tree; children "
+"inherit and extend their parent's transform. [CanvasItem] is extended by "
+"[Control] for anything GUI-related, and by [Node2D] for anything related to "
+"the 2D engine.\n"
+"Any [CanvasItem] can draw. For this, [method update] must be called, then "
+"[constant NOTIFICATION_DRAW] will be received on idle time to request "
+"redraw. Because of this, canvas items don't need to be redrawn on every "
+"frame, improving the performance significantly. Several functions for "
+"drawing on the [CanvasItem] are provided (see [code]draw_*[/code] "
+"functions). However, they can only be used inside the [method Object."
+"_notification], signal or [method _draw] virtual functions.\n"
+"Canvas items are drawn in tree order. By default, children are on top of "
+"their parents so a root [CanvasItem] will be drawn behind everything. This "
+"behavior can be changed on a per-item basis.\n"
+"A [CanvasItem] can also be hidden, which will also hide its children. It "
+"provides many ways to change parameters such as modulation (for itself and "
+"its children) and self modulation (only for itself), as well as its blend "
+"mode.\n"
+"Ultimately, a transform notification can be requested, which will notify the "
+"node that its global position changed in case the parent tree changed.\n"
+"[b]Note:[/b] Unless otherwise specified, all methods that have angle "
+"parameters must have angles specified as [i]radians[/i]. To convert degrees "
+"to radians, use [method @GDScript.deg2rad]."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:15 doc/classes/CanvasLayer.xml:10
+#: doc/classes/InputEvent.xml:11 doc/classes/Viewport.xml:15
+msgid "https://docs.godotengine.org/en/3.4/tutorials/2d/2d_transforms.html"
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:16 doc/classes/Control.xml:18
+#: doc/classes/Node2D.xml:10
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/2d/custom_drawing_in_2d.html"
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:23
+msgid ""
+"Overridable function called by the engine (if defined) to draw the canvas "
+"item."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:37
+msgid ""
+"Draws an arc between the given angles. The larger the value of "
+"[code]point_count[/code], the smoother the curve."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:48
+msgid ""
+"Draws a string character using a custom font. Returns the advance, depending "
+"on the character width and kerning with an optional next character."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:57
+msgid "Draws a colored circle."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:69
+msgid "Draws a colored polygon of any amount of points, convex or concave."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:80
+msgid ""
+"Draws a line from a 2D point to another, with a given color and width. It "
+"can be optionally antialiased."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:91
+msgid ""
+"Draws a [Mesh] in 2D, using the provided texture. See [MeshInstance2D] for "
+"related documentation."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:101
+msgid ""
+"Draws multiple, parallel lines with a uniform [code]color[/code].\n"
+"[b]Note:[/b] [code]width[/code] and [code]antialiased[/code] are currently "
+"not implemented and have no effect."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:112
+msgid ""
+"Draws multiple, parallel lines with a uniform [code]width[/code] and segment-"
+"by-segment coloring. Colors assigned to line segments match by index between "
+"[code]points[/code] and [code]colors[/code].\n"
+"[b]Note:[/b] [code]width[/code] and [code]antialiased[/code] are currently "
+"not implemented and have no effect."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:122
+msgid ""
+"Draws a [MultiMesh] in 2D with the provided texture. See "
+"[MultiMeshInstance2D] for related documentation."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:134
+msgid "Draws a polygon of any amount of points, convex or concave."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:144
+msgid ""
+"Draws interconnected line segments with a uniform [code]color[/code] and "
+"[code]width[/code] and optional antialiasing."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:154
+msgid ""
+"Draws interconnected line segments with a uniform [code]width[/code], "
+"segment-by-segment coloring, and optional antialiasing. Colors assigned to "
+"line segments match by index between [code]points[/code] and [code]colors[/"
+"code]."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:166
+msgid ""
+"Draws a custom primitive. 1 point for a point, 2 points for a line, 3 points "
+"for a triangle and 4 points for a quad."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:177
+msgid ""
+"Draws a rectangle. If [code]filled[/code] is [code]true[/code], the "
+"rectangle will be filled with the [code]color[/code] specified. If "
+"[code]filled[/code] is [code]false[/code], the rectangle will be drawn as a "
+"stroke with the [code]color[/code] and [code]width[/code] specified. If "
+"[code]antialiased[/code] is [code]true[/code], the lines will be "
+"antialiased.\n"
+"[b]Note:[/b] [code]width[/code] and [code]antialiased[/code] are only "
+"effective if [code]filled[/code] is [code]false[/code]."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:187
+msgid ""
+"Sets a custom transform for drawing via components. Anything drawn "
+"afterwards will be transformed by this."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:194
+msgid ""
+"Sets a custom transform for drawing via matrix. Anything drawn afterwards "
+"will be transformed by this."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:205
+msgid ""
+"Draws [code]text[/code] using the specified [code]font[/code] at the "
+"[code]position[/code] (bottom-left corner using the baseline of the font). "
+"The text will have its color multiplied by [code]modulate[/code]. If "
+"[code]clip_w[/code] is greater than or equal to 0, the text will be clipped "
+"if it exceeds the specified width.\n"
+"[b]Example using the default project font:[/b]\n"
+"[codeblock]\n"
+"# If using this method in a script that redraws constantly, move the\n"
+"# `default_font` declaration to a member variable assigned in `_ready()`\n"
+"# so the Control is only created once.\n"
+"var default_font = Control.new().get_font(\"font\")\n"
+"draw_string(default_font, Vector2(64, 64), \"Hello world\")\n"
+"[/codeblock]\n"
+"See also [method Font.draw]."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:222
+msgid "Draws a styled rectangle."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:232
+msgid "Draws a texture at a given position."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:244
+msgid ""
+"Draws a textured rectangle at a given position, optionally modulated by a "
+"color. If [code]transpose[/code] is [code]true[/code], the texture will have "
+"its X and Y coordinates swapped."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:257
+msgid ""
+"Draws a textured rectangle region at a given position, optionally modulated "
+"by a color. If [code]transpose[/code] is [code]true[/code], the texture will "
+"have its X and Y coordinates swapped."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:263 doc/classes/Spatial.xml:19
+msgid ""
+"Forces the transform to update. Transform changes in physics are not instant "
+"for performance reasons. Transforms are accumulated and then set. Use this "
+"if you need an up-to-date transform when doing physics operations."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:269
+msgid "Returns the [RID] of the [World2D] canvas where this item is in."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:275
+msgid "Returns the canvas item RID used by [VisualServer] for this item."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:281
+msgid "Returns the transform matrix of this item's canvas."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:287
+msgid "Returns the global position of the mouse."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:293
+msgid "Returns the global transform matrix of this item."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:299
+msgid ""
+"Returns the global transform matrix of this item in relation to the canvas."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:305
+msgid "Returns the mouse position relative to this item's position."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:311
+msgid "Returns the transform matrix of this item."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:317
+msgid "Returns the viewport's boundaries as a [Rect2]."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:323
+msgid "Returns this item's transform in relation to the viewport."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:329
+msgid "Returns the [World2D] where this item is in."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:335
+msgid "Hide the [CanvasItem] if it's currently visible."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:341
+msgid ""
+"Returns [code]true[/code] if local transform notifications are communicated "
+"to children."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:347
+msgid ""
+"Returns [code]true[/code] if the node is set as top-level. See [method "
+"set_as_toplevel]."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:353
+msgid ""
+"Returns [code]true[/code] if global transform notifications are communicated "
+"to children."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:359 doc/classes/Spatial.xml:89
+msgid ""
+"Returns [code]true[/code] if the node is present in the [SceneTree], its "
+"[member visible] property is [code]true[/code] and all its antecedents are "
+"also visible. If any antecedent is hidden, this node will not be visible in "
+"the scene tree."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:366
+msgid "Assigns [code]screen_point[/code] as this node's new local transform."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:373
+msgid ""
+"Transformations issued by [code]event[/code]'s inputs are applied in local "
+"space instead of global space."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:380
+msgid ""
+"If [code]enable[/code] is [code]true[/code], the node won't inherit its "
+"transform from parent canvas items."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:387
+msgid ""
+"If [code]enable[/code] is [code]true[/code], children will be updated with "
+"local transform data."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:394
+msgid ""
+"If [code]enable[/code] is [code]true[/code], children will be updated with "
+"global transform data."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:400
+msgid ""
+"Show the [CanvasItem] if it's currently hidden. For controls that inherit "
+"[Popup], the correct way to make them visible is to call one of the multiple "
+"[code]popup*()[/code] functions instead."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:406
+msgid ""
+"Queue the [CanvasItem] for update. [constant NOTIFICATION_DRAW] will be "
+"called on idle time to request redraw."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:412
+msgid ""
+"The rendering layers in which this [CanvasItem] responds to [Light2D] nodes."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:415
+msgid "The material applied to textures on this [CanvasItem]."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:418
+msgid "The color applied to textures on this [CanvasItem]."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:421
+msgid ""
+"The color applied to textures on this [CanvasItem]. This is not inherited by "
+"children [CanvasItem]s."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:424
+msgid "If [code]true[/code], the object draws behind its parent."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:427
+msgid "If [code]true[/code], the object draws on top of its parent."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:430
+msgid ""
+"If [code]true[/code], the parent [CanvasItem]'s [member material] property "
+"is used as this one's material."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:433
+msgid ""
+"If [code]true[/code], this [CanvasItem] is drawn. The node is only visible "
+"if all of its antecedents are visible as well (in other words, [method "
+"is_visible_in_tree] must return [code]true[/code]).\n"
+"[b]Note:[/b] For controls that inherit [Popup], the correct way to make them "
+"visible is to call one of the multiple [code]popup*()[/code] functions "
+"instead."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:440
+msgid ""
+"Emitted when the [CanvasItem] must redraw. This can only be connected "
+"realtime, as deferred will not allow drawing."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:445
+msgid "Emitted when becoming hidden."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:450
+msgid ""
+"Emitted when the item's [Rect2] boundaries (position or size) have changed, "
+"or when an action is taking place that may have impacted these boundaries (e."
+"g. changing [member Sprite.texture])."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:455
+msgid "Emitted when the visibility (hidden/visible) changes."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:461 doc/classes/CanvasItemMaterial.xml:39
+msgid ""
+"Mix blending mode. Colors are assumed to be independent of the alpha "
+"(opacity) value."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:464 doc/classes/CanvasItemMaterial.xml:42
+msgid "Additive blending mode."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:467 doc/classes/CanvasItemMaterial.xml:45
+msgid "Subtractive blending mode."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:470 doc/classes/CanvasItemMaterial.xml:48
+msgid "Multiplicative blending mode."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:473 doc/classes/CanvasItemMaterial.xml:51
+msgid ""
+"Mix blending mode. Colors are assumed to be premultiplied by the alpha "
+"(opacity) value."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:476
+msgid ""
+"Disables blending mode. Colors including alpha are written as-is. Only "
+"applicable for render targets with a transparent background. No lighting "
+"will be applied."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:479
+msgid ""
+"The [CanvasItem]'s transform has changed. This notification is only received "
+"if enabled by [method set_notify_transform] or [method "
+"set_notify_local_transform]."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:482
+msgid "The [CanvasItem] is requested to draw."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:485
+msgid "The [CanvasItem]'s visibility has changed."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:488
+msgid "The [CanvasItem] has entered the canvas."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:491
+msgid "The [CanvasItem] has exited the canvas."
+msgstr ""
+
+#: doc/classes/CanvasItemMaterial.xml:4
+msgid "A material for [CanvasItem]s."
+msgstr ""
+
+#: doc/classes/CanvasItemMaterial.xml:7
+msgid ""
+"[CanvasItemMaterial]s provide a means of modifying the textures associated "
+"with a CanvasItem. They specialize in describing blend and lighting "
+"behaviors for textures. Use a [ShaderMaterial] to more fully customize a "
+"material's interactions with a [CanvasItem]."
+msgstr ""
+
+#: doc/classes/CanvasItemMaterial.xml:15
+msgid ""
+"The manner in which a material's rendering is applied to underlying textures."
+msgstr ""
+
+#: doc/classes/CanvasItemMaterial.xml:18
+msgid "The manner in which material reacts to lighting."
+msgstr ""
+
+#: doc/classes/CanvasItemMaterial.xml:21
+msgid ""
+"The number of columns in the spritesheet assigned as [Texture] for a "
+"[Particles2D] or [CPUParticles2D].\n"
+"[b]Note:[/b] This property is only used and visible in the editor if [member "
+"particles_animation] is [code]true[/code]."
+msgstr ""
+
+#: doc/classes/CanvasItemMaterial.xml:25
+msgid ""
+"If [code]true[/code], the particles animation will loop.\n"
+"[b]Note:[/b] This property is only used and visible in the editor if [member "
+"particles_animation] is [code]true[/code]."
+msgstr ""
+
+#: doc/classes/CanvasItemMaterial.xml:29
+msgid ""
+"The number of rows in the spritesheet assigned as [Texture] for a "
+"[Particles2D] or [CPUParticles2D].\n"
+"[b]Note:[/b] This property is only used and visible in the editor if [member "
+"particles_animation] is [code]true[/code]."
+msgstr ""
+
+#: doc/classes/CanvasItemMaterial.xml:33
+msgid ""
+"If [code]true[/code], enable spritesheet-based animation features when "
+"assigned to [Particles2D] and [CPUParticles2D] nodes. The [member "
+"ParticlesMaterial.anim_speed] or [member CPUParticles2D.anim_speed] should "
+"also be set to a positive value for the animation to play.\n"
+"This property (and other [code]particles_anim_*[/code] properties that "
+"depend on it) has no effect on other types of nodes."
+msgstr ""
+
+#: doc/classes/CanvasItemMaterial.xml:54
+msgid ""
+"Render the material using both light and non-light sensitive material "
+"properties."
+msgstr ""
+
+#: doc/classes/CanvasItemMaterial.xml:57
+msgid "Render the material as if there were no light."
+msgstr ""
+
+#: doc/classes/CanvasItemMaterial.xml:60
+msgid "Render the material as if there were only light."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml:4
+msgid "Canvas drawing layer."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml:7
+msgid ""
+"Canvas drawing layer. [CanvasItem] nodes that are direct or indirect "
+"children of a [CanvasLayer] will be drawn in that layer. The layer is a "
+"numeric index that defines the draw order. The default 2D scene renders with "
+"index 0, so a [CanvasLayer] with index -1 will be drawn below, and one with "
+"index 1 will be drawn above. This is very useful for HUDs (in layer 1+ or "
+"above), or backgrounds (in layer -1 or below)."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml:11
+msgid "https://docs.godotengine.org/en/3.4/tutorials/2d/canvas_layers.html"
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml:18
+msgid "Returns the RID of the canvas used by this layer."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml:24
+msgid ""
+"The custom [Viewport] node assigned to the [CanvasLayer]. If [code]null[/"
+"code], uses the default viewport instead."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml:27
+msgid ""
+"Sets the layer to follow the viewport in order to simulate a pseudo 3D "
+"effect."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml:30
+msgid ""
+"Scales the layer when using [member follow_viewport_enable]. Layers moving "
+"into the foreground should have increasing scales, while layers moving into "
+"the background should have decreasing scales."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml:33
+msgid "Layer index for draw order. Lower values are drawn first."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml:36
+msgid "The layer's base offset."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml:39
+msgid "The layer's rotation in radians."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml:42
+msgid "The layer's rotation in degrees."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml:45
+msgid "The layer's scale."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml:48
+msgid "The layer's transform."
+msgstr ""
+
+#: doc/classes/CanvasModulate.xml:4
+msgid "Tint the entire canvas."
+msgstr ""
+
+#: doc/classes/CanvasModulate.xml:7
+msgid ""
+"[CanvasModulate] tints the canvas elements using its assigned [member color]."
+msgstr ""
+
+#: doc/classes/CanvasModulate.xml:15
+msgid "The tint color to apply."
+msgstr ""
+
+#: doc/classes/CapsuleMesh.xml:4 doc/classes/CapsuleMesh.xml:7
+msgid "Class representing a capsule-shaped [PrimitiveMesh]."
+msgstr ""
+
+#: doc/classes/CapsuleMesh.xml:15
+msgid ""
+"Height of the middle cylindrical part of the capsule (without the "
+"hemispherical ends).\n"
+"[b]Note:[/b] The capsule's total height is equal to [member mid_height] + 2 "
+"* [member radius]."
+msgstr ""
+
+#: doc/classes/CapsuleMesh.xml:19
+msgid "Number of radial segments on the capsule mesh."
+msgstr ""
+
+#: doc/classes/CapsuleMesh.xml:22
+msgid "Radius of the capsule mesh."
+msgstr ""
+
+#: doc/classes/CapsuleMesh.xml:25
+msgid "Number of rings along the height of the capsule."
+msgstr ""
+
+#: doc/classes/CapsuleShape.xml:4 doc/classes/CapsuleShape.xml:7
+msgid "Capsule shape for collisions."
+msgstr ""
+
+#: doc/classes/CapsuleShape.xml:16 doc/classes/CapsuleShape2D.xml:15
+msgid "The capsule's height."
+msgstr ""
+
+#: doc/classes/CapsuleShape.xml:19 doc/classes/CapsuleShape2D.xml:18
+msgid "The capsule's radius."
+msgstr ""
+
+#: doc/classes/CapsuleShape2D.xml:4 doc/classes/CapsuleShape2D.xml:7
+msgid "Capsule shape for 2D collisions."
+msgstr ""
+
+#: doc/classes/CenterContainer.xml:4
+msgid "Keeps children controls centered."
+msgstr ""
+
+#: doc/classes/CenterContainer.xml:7
+msgid ""
+"CenterContainer keeps children controls centered. This container keeps all "
+"children to their minimum size, in the center."
+msgstr ""
+
+#: doc/classes/CenterContainer.xml:15
+msgid ""
+"If [code]true[/code], centers children relative to the [CenterContainer]'s "
+"top left corner."
+msgstr ""
+
+#: doc/classes/CharFXTransform.xml:4
+msgid ""
+"Controls how an individual character will be displayed in a [RichTextEffect]."
+msgstr ""
+
+#: doc/classes/CharFXTransform.xml:7
+msgid ""
+"By setting various properties on this object, you can control how individual "
+"characters will be displayed in a [RichTextEffect]."
+msgstr ""
+
+#: doc/classes/CharFXTransform.xml:10 doc/classes/RichTextEffect.xml:16
+#: doc/classes/RichTextLabel.xml:15
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/gui/bbcode_in_richtextlabel."
+"html"
+msgstr ""
+
+#: doc/classes/CharFXTransform.xml:11 doc/classes/RichTextEffect.xml:17
+msgid ""
+"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
+msgstr ""
+
+#: doc/classes/CharFXTransform.xml:17 doc/classes/CharFXTransform.xml:45
+msgid ""
+"The index of the current character (starting from 0). Setting this property "
+"won't affect drawing."
+msgstr ""
+
+#: doc/classes/CharFXTransform.xml:20
+msgid ""
+"The Unicode codepoint the character will use. This only affects non-"
+"whitespace characters. [method @GDScript.ord] can be useful here. For "
+"example, the following will replace all characters with asterisks:\n"
+"[codeblock]\n"
+"# `char_fx` is the CharFXTransform parameter from `_process_custom_fx()`.\n"
+"# See the RichTextEffect documentation for details.\n"
+"char_fx.character = ord(\"*\")\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/CharFXTransform.xml:28
+msgid "The color the character will be drawn with."
+msgstr ""
+
+#: doc/classes/CharFXTransform.xml:31
+msgid ""
+"The time elapsed since the [RichTextLabel] was added to the scene tree (in "
+"seconds). Time stops when the [RichTextLabel] is paused (see [member Node."
+"pause_mode]). Resets when the text in the [RichTextLabel] is changed.\n"
+"[b]Note:[/b] Time still passes while the [RichTextLabel] is hidden."
+msgstr ""
+
+#: doc/classes/CharFXTransform.xml:35
+msgid ""
+"Contains the arguments passed in the opening BBCode tag. By default, "
+"arguments are strings; if their contents match a type such as [bool], [int] "
+"or [float], they will be converted automatically. Color codes in the form "
+"[code]#rrggbb[/code] or [code]#rgb[/code] will be converted to an opaque "
+"[Color]. String arguments may not contain spaces, even if they're quoted. If "
+"present, quotes will also be present in the final string.\n"
+"For example, the opening BBCode tag [code][example foo=hello bar=true baz=42 "
+"color=#ffffff][/code] will map to the following [Dictionary]:\n"
+"[codeblock]\n"
+"{\"foo\": \"hello\", \"bar\": true, \"baz\": 42, \"color\": Color(1, 1, 1, "
+"1)}\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/CharFXTransform.xml:42
+msgid "The position offset the character will be drawn with (in pixels)."
+msgstr ""
+
+#: doc/classes/CharFXTransform.xml:48
+msgid ""
+"If [code]true[/code], the character will be drawn. If [code]false[/code], "
+"the character will be hidden. Characters around hidden characters will "
+"reflow to take the space of hidden characters. If this is not desired, set "
+"their [member color] to [code]Color(1, 1, 1, 0)[/code] instead."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:4
+msgid "Binary choice user interface widget. See also [CheckButton]."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:7
+msgid ""
+"A checkbox allows the user to make a binary choice (choosing only one of two "
+"possible options). It's similar to [CheckButton] in functionality, but it "
+"has a different appearance. To follow established UX patterns, it's "
+"recommended to use CheckBox when toggling it has [b]no[/b] immediate effect "
+"on something. For instance, it should be used when toggling it will only do "
+"something once a confirmation button is pressed.\n"
+"See also [BaseButton] which contains common properties and methods "
+"associated with this node."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:22
+msgid "The vertical offset used when rendering the check icons (in pixels)."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:25
+msgid "The check icon to display when the [CheckBox] is checked."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:28
+msgid "The check icon to display when the [CheckBox] is checked and disabled."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:31
+msgid ""
+"The [StyleBox] to display as a background when the [CheckBox] is disabled."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:34
+msgid ""
+"The [StyleBox] to display as a background when the [CheckBox] is focused."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:37
+msgid "The [Font] to use for the [CheckBox] text."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:40
+msgid "The [CheckBox] text's font color."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:43
+msgid "The [CheckBox] text's font color when it's disabled."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:46
+msgid ""
+"The [CheckBox] text's font color when it's focused. Only replaces the normal "
+"text color of the checkbox. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:49
+msgid "The [CheckBox] text's font color when it's hovered."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:52
+msgid "The [CheckBox] text's font color when it's hovered and pressed."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:55
+msgid "The [CheckBox] text's font color when it's pressed."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:58
+msgid ""
+"The [StyleBox] to display as a background when the [CheckBox] is hovered."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:61
+msgid ""
+"The [StyleBox] to display as a background when the [CheckBox] is hovered and "
+"pressed."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:64
+msgid "The separation between the check icon and the text (in pixels)."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:67 doc/classes/CheckButton.xml:61
+msgid "The [StyleBox] to display as a background."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:70
+msgid ""
+"The [StyleBox] to display as a background when the [CheckBox] is pressed."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:73
+msgid ""
+"If the [CheckBox] is configured as a radio button, the icon to display when "
+"the [CheckBox] is checked."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:78
+msgid ""
+"If the [CheckBox] is configured as a radio button, the icon to display when "
+"the [CheckBox] is unchecked."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:83
+msgid "The check icon to display when the [CheckBox] is unchecked."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:86
+msgid ""
+"The check icon to display when the [CheckBox] is unchecked and disabled."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:4
+msgid "Checkable button. See also [CheckBox]."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:7
+msgid ""
+"CheckButton is a toggle button displayed as a check field. It's similar to "
+"[CheckBox] in functionality, but it has a different appearance. To follow "
+"established UX patterns, it's recommended to use CheckButton when toggling "
+"it has an [b]immediate[/b] effect on something. For instance, it should be "
+"used if toggling it enables/disables a setting without requiring the user to "
+"press a confirmation button.\n"
+"See also [BaseButton] which contains common properties and methods "
+"associated with this node."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:22
+msgid "The vertical offset used when rendering the toggle icons (in pixels)."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:25
+msgid ""
+"The [StyleBox] to display as a background when the [CheckButton] is disabled."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:28
+msgid ""
+"The [StyleBox] to display as a background when the [CheckButton] is focused."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:31
+msgid "The [Font] to use for the [CheckButton] text."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:34
+msgid "The [CheckButton] text's font color."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:37
+msgid "The [CheckButton] text's font color when it's disabled."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:40
+msgid ""
+"The [CheckButton] text's font color when it's focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:43
+msgid "The [CheckButton] text's font color when it's hovered."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:46
+msgid "The [CheckButton] text's font color when it's hovered and pressed."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:49
+msgid "The [CheckButton] text's font color when it's pressed."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:52
+msgid ""
+"The [StyleBox] to display as a background when the [CheckButton] is hovered."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:55
+msgid ""
+"The [StyleBox] to display as a background when the [CheckButton] is hovered "
+"and pressed."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:58
+msgid "The separation between the toggle icon and the text (in pixels)."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:64
+msgid "The icon to display when the [CheckButton] is unchecked."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:67
+msgid "The icon to display when the [CheckButton] is unchecked and disabled."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:70
+msgid "The icon to display when the [CheckButton] is checked."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:73
+msgid "The icon to display when the [CheckButton] is checked and disabled."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:76
+msgid ""
+"The [StyleBox] to display as a background when the [CheckButton] is pressed."
+msgstr ""
+
+#: doc/classes/CircleShape2D.xml:4
+msgid "Circular shape for 2D collisions."
+msgstr ""
+
+#: doc/classes/CircleShape2D.xml:7
+msgid ""
+"Circular shape for 2D collisions. This shape is useful for modeling balls or "
+"small characters and its collision detection with everything else is very "
+"fast."
+msgstr ""
+
+#: doc/classes/CircleShape2D.xml:15
+msgid "The circle's radius."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:4
+msgid "Class information repository."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:7
+msgid "Provides access to metadata stored for every available class."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:16
+msgid ""
+"Returns [code]true[/code] if you can instance objects from the specified "
+"[code]class[/code], [code]false[/code] in other case."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:23
+msgid "Returns whether the specified [code]class[/code] is available or not."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:30
+msgid ""
+"Returns a category associated with the class for use in documentation and "
+"the Asset Library. Debug mode required."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:39
+msgid ""
+"Returns an array with all the keys in [code]enum[/code] of [code]class[/"
+"code] or its ancestry."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:47
+msgid ""
+"Returns an array with all the enums of [code]class[/code] or its ancestry."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:55
+msgid ""
+"Returns the value of the integer constant [code]name[/code] of [code]class[/"
+"code] or its ancestry. Always returns 0 when the constant could not be found."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:64
+msgid ""
+"Returns which enum the integer constant [code]name[/code] of [code]class[/"
+"code] or its ancestry belongs to."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:72
+msgid ""
+"Returns an array with the names all the integer constants of [code]class[/"
+"code] or its ancestry."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:80
+msgid ""
+"Returns an array with all the methods of [code]class[/code] or its ancestry "
+"if [code]no_inheritance[/code] is [code]false[/code]. Every element of the "
+"array is a [Dictionary] with the following keys: [code]args[/code], "
+"[code]default_args[/code], [code]flags[/code], [code]id[/code], [code]name[/"
+"code], [code]return: (class_name, hint, hint_string, name, type, usage)[/"
+"code].\n"
+"[b]Note:[/b] In exported release builds the debug info is not available, so "
+"the returned dictionaries will contain only method names."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:89
+msgid ""
+"Returns the value of [code]property[/code] of [code]class[/code] or its "
+"ancestry."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:97
+msgid ""
+"Returns an array with all the properties of [code]class[/code] or its "
+"ancestry if [code]no_inheritance[/code] is [code]false[/code]."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:105
+msgid ""
+"Returns the [code]signal[/code] data of [code]class[/code] or its ancestry. "
+"The returned value is a [Dictionary] with the following keys: [code]args[/"
+"code], [code]default_args[/code], [code]flags[/code], [code]id[/code], "
+"[code]name[/code], [code]return: (class_name, hint, hint_string, name, type, "
+"usage)[/code]."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:113
+msgid ""
+"Returns an array with all the signals of [code]class[/code] or its ancestry "
+"if [code]no_inheritance[/code] is [code]false[/code]. Every element of the "
+"array is a [Dictionary] as described in [method class_get_signal]."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:122
+msgid ""
+"Returns whether [code]class[/code] or its ancestry has an enum called "
+"[code]name[/code] or not."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:130
+msgid ""
+"Returns whether [code]class[/code] or its ancestry has an integer constant "
+"called [code]name[/code] or not."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:139
+msgid ""
+"Returns whether [code]class[/code] (or its ancestry if [code]no_inheritance[/"
+"code] is [code]false[/code]) has a method called [code]method[/code] or not."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:147
+msgid ""
+"Returns whether [code]class[/code] or its ancestry has a signal called "
+"[code]signal[/code] or not."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:156
+msgid ""
+"Sets [code]property[/code] value of [code]class[/code] to [code]value[/code]."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:162
+msgid "Returns the names of all the classes available."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:169
+msgid ""
+"Returns the names of all the classes that directly or indirectly inherit "
+"from [code]class[/code]."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:176
+msgid "Returns the parent class of [code]class[/code]."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:183
+msgid "Creates an instance of [code]class[/code]."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:190
+msgid "Returns whether this [code]class[/code] is enabled or not."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:198
+msgid ""
+"Returns whether [code]inherits[/code] is an ancestor of [code]class[/code] "
+"or not."
+msgstr ""
+
+#: doc/classes/ClippedCamera.xml:4
+msgid "A [Camera] that includes collision."
+msgstr ""
+
+#: doc/classes/ClippedCamera.xml:7
+msgid ""
+"This node extends [Camera] to add collisions with [Area] and/or "
+"[PhysicsBody] nodes. The camera cannot move through colliding objects."
+msgstr ""
+
+#: doc/classes/ClippedCamera.xml:16
+msgid ""
+"Adds a collision exception so the camera does not collide with the specified "
+"node."
+msgstr ""
+
+#: doc/classes/ClippedCamera.xml:23
+msgid ""
+"Adds a collision exception so the camera does not collide with the specified "
+"[RID]."
+msgstr ""
+
+#: doc/classes/ClippedCamera.xml:29
+msgid "Removes all collision exceptions."
+msgstr ""
+
+#: doc/classes/ClippedCamera.xml:35
+msgid "Returns the distance the camera has been offset due to a collision."
+msgstr ""
+
+#: doc/classes/ClippedCamera.xml:42
+msgid ""
+"Returns [code]true[/code] if the specified bit index is on.\n"
+"[b]Note:[/b] Bit indices range from 0-19."
+msgstr ""
+
+#: doc/classes/ClippedCamera.xml:50
+msgid "Removes a collision exception with the specified node."
+msgstr ""
+
+#: doc/classes/ClippedCamera.xml:57
+msgid "Removes a collision exception with the specified [RID]."
+msgstr ""
+
+#: doc/classes/ClippedCamera.xml:65
+msgid ""
+"Sets the specified bit index to the [code]value[/code].\n"
+"[b]Note:[/b] Bit indices range from 0-19."
+msgstr ""
+
+#: doc/classes/ClippedCamera.xml:72
+msgid "If [code]true[/code], the camera stops on contact with [Area]s."
+msgstr ""
+
+#: doc/classes/ClippedCamera.xml:75
+msgid "If [code]true[/code], the camera stops on contact with [PhysicsBody]s."
+msgstr ""
+
+#: doc/classes/ClippedCamera.xml:78
+msgid ""
+"The camera's collision mask. Only objects in at least one collision layer "
+"matching the mask will be detected. See [url=https://docs.godotengine.org/"
+"en/3.4/tutorials/physics/physics_introduction.html#collision-layers-and-"
+"masks]Collision layers and masks[/url] in the documentation for more "
+"information."
+msgstr ""
+
+#: doc/classes/ClippedCamera.xml:81
+msgid ""
+"The camera's collision margin. The camera can't get closer than this "
+"distance to a colliding object."
+msgstr ""
+
+#: doc/classes/ClippedCamera.xml:84
+msgid "The camera's process callback. See [enum ProcessMode]."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:4
+msgid "Base node for collision objects."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:7
+msgid ""
+"CollisionObject is the base class for physics objects. It can hold any "
+"number of collision [Shape]s. Each shape must be assigned to a [i]shape "
+"owner[/i]. The CollisionObject can have any number of shape owners. Shape "
+"owners are not nodes and do not appear in the editor, but are accessible "
+"through code using the [code]shape_owner_*[/code] methods."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:20
+msgid ""
+"Receives unhandled [InputEvent]s. [code]position[/code] is the location in "
+"world space of the mouse pointer on the surface of the shape with index "
+"[code]shape_idx[/code] and [code]normal[/code] is the normal vector of the "
+"surface at that point. Connect to the [signal input_event] signal to easily "
+"pick up these events."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:27 doc/classes/CollisionObject2D.xml:25
+msgid ""
+"Creates a new shape owner for the given object. Returns [code]owner_id[/"
+"code] of the new owner for future reference."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:34 doc/classes/CollisionObject2D.xml:32
+msgid ""
+"Returns whether or not the specified [code]bit[/code] of the [member "
+"collision_layer] is set."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:41 doc/classes/CollisionObject2D.xml:39
+msgid ""
+"Returns whether or not the specified [code]bit[/code] of the [member "
+"collision_mask] is set."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:47 doc/classes/CollisionObject2D.xml:45
+msgid "Returns the object's [RID]."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:53 doc/classes/CollisionObject2D.xml:58
+msgid ""
+"Returns an [Array] of [code]owner_id[/code] identifiers. You can use these "
+"ids in other methods that take [code]owner_id[/code] as an argument."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:60 doc/classes/CollisionObject2D.xml:65
+msgid "If [code]true[/code], the shape owner and its shapes are disabled."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:67 doc/classes/CollisionObject2D.xml:79
+msgid "Removes the given shape owner."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:75 doc/classes/CollisionObject2D.xml:87
+msgid ""
+"If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/"
+"code] in the the [member collision_layer].\n"
+"If [code]value[/code] is [code]false[/code], clears the specified [code]bit[/"
+"code] in the the [member collision_layer]."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:84 doc/classes/CollisionObject2D.xml:96
+msgid ""
+"If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/"
+"code] in the the [member collision_mask].\n"
+"If [code]value[/code] is [code]false[/code], clears the specified [code]bit[/"
+"code] in the the [member collision_mask]."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:92 doc/classes/CollisionObject2D.xml:104
+msgid "Returns the [code]owner_id[/code] of the given shape."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:100
+msgid "Adds a [Shape] to the shape owner."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:107 doc/classes/CollisionObject2D.xml:119
+msgid "Removes all shapes from the shape owner."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:114 doc/classes/CollisionObject2D.xml:126
+msgid "Returns the parent object of the given shape owner."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:122
+msgid "Returns the [Shape] with the given id from the given shape owner."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:129 doc/classes/CollisionObject2D.xml:141
+msgid "Returns the number of shapes the given shape owner contains."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:137
+msgid ""
+"Returns the child index of the [Shape] with the given id from the given "
+"shape owner."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:144
+msgid "Returns the shape owner's [Transform]."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:152 doc/classes/CollisionObject2D.xml:164
+msgid "Removes a shape from the given shape owner."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:160 doc/classes/CollisionObject2D.xml:172
+msgid "If [code]true[/code], disables the given shape owner."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:168
+msgid "Sets the [Transform] of the given shape owner."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:174
+msgid ""
+"The physics layers this CollisionObject3D is in. Collision objects can exist "
+"in one or more of 32 different layers. See also [member collision_mask].\n"
+"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=https://docs.godotengine.org/en/latest/tutorials/physics/"
+"physics_introduction.html#collision-layers-and-masks]Collision layers and "
+"masks[/url] in the documentation for more information."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:178
+msgid ""
+"The physics layers this CollisionObject3D scans. Collision objects can scan "
+"one or more of 32 different layers. See also [member collision_layer].\n"
+"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=https://docs.godotengine.org/en/latest/tutorials/physics/"
+"physics_introduction.html#collision-layers-and-masks]Collision layers and "
+"masks[/url] in the documentation for more information."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:182
+msgid ""
+"If [code]true[/code], the [CollisionObject] will continue to receive input "
+"events as the mouse is dragged across its shapes."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:185
+msgid ""
+"If [code]true[/code], the [CollisionObject]'s shapes will respond to "
+"[RayCast]s."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:196
+msgid ""
+"Emitted when the object receives an unhandled [InputEvent]. [code]position[/"
+"code] is the location in world space of the mouse pointer on the surface of "
+"the shape with index [code]shape_idx[/code] and [code]normal[/code] is the "
+"normal vector of the surface at that point."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:201
+msgid "Emitted when the mouse pointer enters any of this object's shapes."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:206
+msgid "Emitted when the mouse pointer exits all this object's shapes."
+msgstr ""
+
+#: doc/classes/CollisionObject2D.xml:4
+msgid "Base node for 2D collision objects."
+msgstr ""
+
+#: doc/classes/CollisionObject2D.xml:7
+msgid ""
+"CollisionObject2D is the base class for 2D physics objects. It can hold any "
+"number of 2D collision [Shape2D]s. Each shape must be assigned to a [i]shape "
+"owner[/i]. The CollisionObject2D can have any number of shape owners. Shape "
+"owners are not nodes and do not appear in the editor, but are accessible "
+"through code using the [code]shape_owner_*[/code] methods."
+msgstr ""
+
+#: doc/classes/CollisionObject2D.xml:18
+msgid ""
+"Accepts unhandled [InputEvent]s. Requires [member input_pickable] to be "
+"[code]true[/code]. [code]shape_idx[/code] is the child index of the clicked "
+"[Shape2D]. Connect to the [code]input_event[/code] signal to easily pick up "
+"these events."
+msgstr ""
+
+#: doc/classes/CollisionObject2D.xml:52
+msgid ""
+"Returns the [code]one_way_collision_margin[/code] of the shape owner "
+"identified by given [code]owner_id[/code]."
+msgstr ""
+
+#: doc/classes/CollisionObject2D.xml:72
+msgid ""
+"Returns [code]true[/code] if collisions for the shape owner originating from "
+"this [CollisionObject2D] will not be reported to collided with "
+"[CollisionObject2D]s."
+msgstr ""
+
+#: doc/classes/CollisionObject2D.xml:112
+msgid "Adds a [Shape2D] to the shape owner."
+msgstr ""
+
+#: doc/classes/CollisionObject2D.xml:134
+msgid "Returns the [Shape2D] with the given id from the given shape owner."
+msgstr ""
+
+#: doc/classes/CollisionObject2D.xml:149
+msgid ""
+"Returns the child index of the [Shape2D] with the given id from the given "
+"shape owner."
+msgstr ""
+
+#: doc/classes/CollisionObject2D.xml:156
+msgid "Returns the shape owner's [Transform2D]."
+msgstr ""
+
+#: doc/classes/CollisionObject2D.xml:180
+msgid ""
+"If [code]enable[/code] is [code]true[/code], collisions for the shape owner "
+"originating from this [CollisionObject2D] will not be reported to collided "
+"with [CollisionObject2D]s."
+msgstr ""
+
+#: doc/classes/CollisionObject2D.xml:188
+msgid ""
+"Sets the [code]one_way_collision_margin[/code] of the shape owner identified "
+"by given [code]owner_id[/code] to [code]margin[/code] pixels."
+msgstr ""
+
+#: doc/classes/CollisionObject2D.xml:196
+msgid "Sets the [Transform2D] of the given shape owner."
+msgstr ""
+
+#: doc/classes/CollisionObject2D.xml:202
+msgid ""
+"The physics layers this CollisionObject2D is in. Collision objects can exist "
+"in one or more of 32 different layers. See also [member collision_mask].\n"
+"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=https://docs.godotengine.org/en/latest/tutorials/physics/"
+"physics_introduction.html#collision-layers-and-masks]Collision layers and "
+"masks[/url] in the documentation for more information."
+msgstr ""
+
+#: doc/classes/CollisionObject2D.xml:206
+msgid ""
+"The physics layers this CollisionObject2D scans. Collision objects can scan "
+"one or more of 32 different layers. See also [member collision_layer].\n"
+"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=https://docs.godotengine.org/en/latest/tutorials/physics/"
+"physics_introduction.html#collision-layers-and-masks]Collision layers and "
+"masks[/url] in the documentation for more information."
+msgstr ""
+
+#: doc/classes/CollisionObject2D.xml:210
+msgid ""
+"If [code]true[/code], this object is pickable. A pickable object can detect "
+"the mouse pointer entering/leaving, and if the mouse is inside it, report "
+"input events. Requires at least one [code]collision_layer[/code] bit to be "
+"set."
+msgstr ""
+
+#: doc/classes/CollisionObject2D.xml:219
+msgid ""
+"Emitted when an input event occurs. Requires [member input_pickable] to be "
+"[code]true[/code] and at least one [code]collision_layer[/code] bit to be "
+"set. See [method _input_event] for details."
+msgstr ""
+
+#: doc/classes/CollisionObject2D.xml:224
+msgid ""
+"Emitted when the mouse pointer enters any of this object's shapes. Requires "
+"[member input_pickable] to be [code]true[/code] and at least one "
+"[code]collision_layer[/code] bit to be set."
+msgstr ""
+
+#: doc/classes/CollisionObject2D.xml:229
+msgid ""
+"Emitted when the mouse pointer exits all this object's shapes. Requires "
+"[member input_pickable] to be [code]true[/code] and at least one "
+"[code]collision_layer[/code] bit to be set."
+msgstr ""
+
+#: doc/classes/CollisionPolygon.xml:4
+msgid "Editor-only class for defining a collision polygon in 3D space."
+msgstr ""
+
+#: doc/classes/CollisionPolygon.xml:7
+msgid ""
+"Allows editing a collision polygon's vertices on a selected plane. Can also "
+"set a depth perpendicular to that plane. This class is only available in the "
+"editor. It will not appear in the scene tree at run-time. Creates a [Shape] "
+"for gameplay. Properties modified during gameplay will have no effect."
+msgstr ""
+
+#: doc/classes/CollisionPolygon.xml:15
+msgid ""
+"Length that the resulting collision extends in either direction "
+"perpendicular to its polygon."
+msgstr ""
+
+#: doc/classes/CollisionPolygon.xml:18
+msgid "If [code]true[/code], no collision will be produced."
+msgstr ""
+
+#: doc/classes/CollisionPolygon.xml:21
+msgid ""
+"The collision margin for the generated [Shape]. See [member Shape.margin] "
+"for more details."
+msgstr ""
+
+#: doc/classes/CollisionPolygon.xml:24
+msgid ""
+"Array of vertices which define the polygon.\n"
+"[b]Note:[/b] The returned value is a copy of the original. Methods which "
+"mutate the size or properties of the return value will not impact the "
+"original polygon. To change properties of the polygon, assign it to a "
+"temporary variable and make changes before reassigning the [code]polygon[/"
+"code] member."
+msgstr ""
+
+#: doc/classes/CollisionPolygon2D.xml:4
+msgid "Defines a 2D collision polygon."
+msgstr ""
+
+#: doc/classes/CollisionPolygon2D.xml:7
+msgid ""
+"Provides a 2D collision polygon to a [CollisionObject2D] parent. Polygons "
+"can be drawn in the editor or specified by a list of vertices."
+msgstr ""
+
+#: doc/classes/CollisionPolygon2D.xml:15
+msgid "Collision build mode. Use one of the [enum BuildMode] constants."
+msgstr ""
+
+#: doc/classes/CollisionPolygon2D.xml:18
+msgid "If [code]true[/code], no collisions will be detected."
+msgstr ""
+
+#: doc/classes/CollisionPolygon2D.xml:21
+msgid ""
+"If [code]true[/code], only edges that face up, relative to "
+"[CollisionPolygon2D]'s rotation, will collide with other objects."
+msgstr ""
+
+#: doc/classes/CollisionPolygon2D.xml:24
+msgid ""
+"The margin used for one-way collision (in pixels). Higher values will make "
+"the shape thicker, and work better for colliders that enter the polygon at a "
+"high velocity."
+msgstr ""
+
+#: doc/classes/CollisionPolygon2D.xml:27
+msgid ""
+"The polygon's list of vertices. The final point will be connected to the "
+"first. The returned value is a clone of the [PoolVector2Array], not a "
+"reference."
+msgstr ""
+
+#: doc/classes/CollisionPolygon2D.xml:32
+msgid "Collisions will include the polygon and its contained area."
+msgstr ""
+
+#: doc/classes/CollisionPolygon2D.xml:35
+msgid "Collisions will only include the polygon edges."
+msgstr ""
+
+#: doc/classes/CollisionShape.xml:4
+msgid "Node that represents collision shape data in 3D space."
+msgstr ""
+
+#: doc/classes/CollisionShape.xml:7
+msgid ""
+"Editor facility for creating and editing collision shapes in 3D space. You "
+"can use this node to represent all sorts of collision shapes, for example, "
+"add this to an [Area] to give it a detection shape, or add it to a "
+"[PhysicsBody] to create a solid object. [b]IMPORTANT[/b]: this is an Editor-"
+"only helper to create shapes, use [method CollisionObject."
+"shape_owner_get_shape] to get the actual shape."
+msgstr ""
+
+#: doc/classes/CollisionShape.xml:10 doc/classes/CollisionShape2D.xml:10
+#: doc/classes/Physics2DDirectBodyState.xml:10
+#: doc/classes/Physics2DDirectSpaceState.xml:10 doc/classes/PhysicsBody.xml:10
+#: doc/classes/PhysicsBody2D.xml:10 doc/classes/PhysicsDirectBodyState.xml:10
+#: doc/classes/PhysicsDirectSpaceState.xml:10 doc/classes/RigidBody.xml:14
+#: doc/classes/Shape.xml:10 doc/classes/Shape2D.xml:10
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/physics/physics_introduction."
+"html"
+msgstr ""
+
+#: doc/classes/CollisionShape.xml:19
+msgid ""
+"Sets the collision shape's shape to the addition of all its convexed "
+"[MeshInstance] siblings geometry."
+msgstr ""
+
+#: doc/classes/CollisionShape.xml:26
+msgid ""
+"If this method exists within a script it will be called whenever the shape "
+"resource has been modified."
+msgstr ""
+
+#: doc/classes/CollisionShape.xml:32
+msgid "A disabled collision shape has no effect in the world."
+msgstr ""
+
+#: doc/classes/CollisionShape.xml:35 doc/classes/CollisionShape2D.xml:28
+msgid "The actual shape owned by this collision shape."
+msgstr ""
+
+#: doc/classes/CollisionShape2D.xml:4
+msgid "Node that represents collision shape data in 2D space."
+msgstr ""
+
+#: doc/classes/CollisionShape2D.xml:7
+msgid ""
+"Editor facility for creating and editing collision shapes in 2D space. You "
+"can use this node to represent all sorts of collision shapes, for example, "
+"add this to an [Area2D] to give it a detection shape, or add it to a "
+"[PhysicsBody2D] to create a solid object. [b]IMPORTANT[/b]: this is an "
+"Editor-only helper to create shapes, use [method CollisionObject2D."
+"shape_owner_get_shape] to get the actual shape."
+msgstr ""
+
+#: doc/classes/CollisionShape2D.xml:13 doc/classes/KinematicBody2D.xml:14
+#: doc/classes/RectangleShape2D.xml:11 doc/classes/TileMap.xml:17
+#: doc/classes/TileSet.xml:17
+msgid "https://godotengine.org/asset-library/asset/113"
+msgstr ""
+
+#: doc/classes/CollisionShape2D.xml:19
+msgid ""
+"A disabled collision shape has no effect in the world. This property should "
+"be changed with [method Object.set_deferred]."
+msgstr ""
+
+#: doc/classes/CollisionShape2D.xml:22
+msgid ""
+"Sets whether this collision shape should only detect collision on one side "
+"(top or bottom)."
+msgstr ""
+
+#: doc/classes/CollisionShape2D.xml:25
+msgid ""
+"The margin used for one-way collision (in pixels). Higher values will make "
+"the shape thicker, and work better for colliders that enter the shape at a "
+"high velocity."
+msgstr ""
+
+#: doc/classes/Color.xml:4
+msgid "Color in RGBA format using floats on the range of 0 to 1."
+msgstr ""
+
+#: doc/classes/Color.xml:7
+msgid ""
+"A color represented by red, green, blue, and alpha (RGBA) components. The "
+"alpha component is often used for transparency. Values are in floating-point "
+"and usually range from 0 to 1. Some properties (such as CanvasItem.modulate) "
+"may accept values greater than 1 (overbright or HDR colors).\n"
+"You can also create a color from standardized color names by using [method "
+"@GDScript.ColorN] or directly using the color constants defined here. The "
+"standardized color set is based on the [url=https://en.wikipedia.org/wiki/"
+"X11_color_names]X11 color names[/url].\n"
+"If you want to supply values in a range of 0 to 255, you should use [method "
+"@GDScript.Color8].\n"
+"[b]Note:[/b] In a boolean context, a Color will evaluate to [code]false[/"
+"code] if it's equal to [code]Color(0, 0, 0, 1)[/code] (opaque black). "
+"Otherwise, a Color will always evaluate to [code]true[/code].\n"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/master/img/"
+"color_constants.png]Color constants cheatsheet[/url]"
+msgstr ""
+
+#: doc/classes/Color.xml:14 doc/classes/ColorPickerButton.xml:13
+msgid "https://godotengine.org/asset-library/asset/517"
+msgstr ""
+
+#: doc/classes/Color.xml:15 doc/classes/ColorPicker.xml:11
+msgid "https://godotengine.org/asset-library/asset/146"
+msgstr ""
+
+#: doc/classes/Color.xml:16 doc/classes/ColorPickerButton.xml:12
+msgid "https://godotengine.org/asset-library/asset/133"
+msgstr ""
+
+#: doc/classes/Color.xml:23
+msgid ""
+"Constructs a color from an HTML hexadecimal color string in ARGB or RGB "
+"format. See also [method @GDScript.ColorN].\n"
+"[codeblock]\n"
+"# Each of the following creates the same color RGBA(178, 217, 10, 255).\n"
+"var c1 = Color(\"#ffb2d90a\") # ARGB format with \"#\".\n"
+"var c2 = Color(\"ffb2d90a\") # ARGB format.\n"
+"var c3 = Color(\"#b2d90a\") # RGB format with \"#\".\n"
+"var c4 = Color(\"b2d90a\") # RGB format.\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Color.xml:37
+msgid ""
+"Constructs a color from a 32-bit integer in RGBA format (each byte "
+"represents a color channel).\n"
+"[codeblock]\n"
+"var c = Color(274) # Similar to Color(0.0, 0.0, 0.004, 0.07)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Color.xml:49
+msgid ""
+"Constructs a color from RGB values, typically between 0 and 1. Alpha will be "
+"1.\n"
+"[codeblock]\n"
+"var color = Color(0.2, 1.0, 0.7) # Similar to Color8(51, 255, 178, 255)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Color.xml:62
+msgid ""
+"Constructs a color from RGBA values, typically between 0 and 1.\n"
+"[codeblock]\n"
+"var color = Color(0.2, 1.0, 0.7, 0.8) # Similar to Color8(51, 255, 178, "
+"204)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Color.xml:72
+msgid ""
+"Returns a new color resulting from blending this color over another. If the "
+"color is opaque, the result is also opaque. The second color may have a "
+"range of alpha values.\n"
+"[codeblock]\n"
+"var bg = Color(0.0, 1.0, 0.0, 0.5) # Green with alpha of 50%\n"
+"var fg = Color(1.0, 0.0, 0.0, 0.5) # Red with alpha of 50%\n"
+"var blended_color = bg.blend(fg) # Brown with alpha of 75%\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Color.xml:83
+msgid ""
+"Returns the most contrasting color.\n"
+"[codeblock]\n"
+"var c = Color(0.3, 0.4, 0.9)\n"
+"var contrasted_color = c.contrasted() # Equivalent to RGBA(204, 229, 102, "
+"255)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Color.xml:94
+msgid ""
+"Returns a new color resulting from making this color darker by the specified "
+"percentage (ratio from 0 to 1).\n"
+"[codeblock]\n"
+"var green = Color(0.0, 1.0, 0.0)\n"
+"var darkgreen = green.darkened(0.2) # 20% darker than regular green\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Color.xml:108
+msgid ""
+"Constructs a color from an HSV profile. [code]h[/code], [code]s[/code], and "
+"[code]v[/code] are values between 0 and 1.\n"
+"[codeblock]\n"
+"var c = Color.from_hsv(0.58, 0.5, 0.79, 0.8) # Equivalent to HSV(210, 50, "
+"79, 0.8) or Color8(100, 151, 201, 0.8)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Color.xml:117
+msgid ""
+"Returns the color's grayscale representation.\n"
+"The gray value is calculated as [code](r + g + b) / 3[/code].\n"
+"[codeblock]\n"
+"var c = Color(0.2, 0.45, 0.82)\n"
+"var gray = c.gray() # A value of 0.466667\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Color.xml:128
+msgid ""
+"Returns the inverted color [code](1 - r, 1 - g, 1 - b, a)[/code].\n"
+"[codeblock]\n"
+"var color = Color(0.3, 0.4, 0.9)\n"
+"var inverted_color = color.inverted() # Equivalent to Color(0.7, 0.6, 0.1)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Color.xml:139
+msgid ""
+"Returns [code]true[/code] if this color and [code]color[/code] are "
+"approximately equal, by running [method @GDScript.is_equal_approx] on each "
+"component."
+msgstr ""
+
+#: doc/classes/Color.xml:146
+msgid ""
+"Returns a new color resulting from making this color lighter by the "
+"specified percentage (ratio from 0 to 1).\n"
+"[codeblock]\n"
+"var green = Color(0.0, 1.0, 0.0)\n"
+"var lightgreen = green.lightened(0.2) # 20% lighter than regular green\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Color.xml:158
+msgid ""
+"Returns the linear interpolation with another color. The interpolation "
+"factor [code]weight[/code] is between 0 and 1.\n"
+"[codeblock]\n"
+"var c1 = Color(1.0, 0.0, 0.0)\n"
+"var c2 = Color(0.0, 1.0, 0.0)\n"
+"var li_c = c1.linear_interpolate(c2, 0.5) # Equivalent to Color(0.5, 0.5, "
+"0.0)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Color.xml:169
+msgid ""
+"Returns the color converted to a 32-bit integer in ABGR format (each byte "
+"represents a color channel). ABGR is the reversed version of the default "
+"format.\n"
+"[codeblock]\n"
+"var color = Color(1, 0.5, 0.2)\n"
+"print(color.to_abgr32()) # Prints 4281565439\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Color.xml:179
+msgid ""
+"Returns the color converted to a 64-bit integer in ABGR format (each word "
+"represents a color channel). ABGR is the reversed version of the default "
+"format.\n"
+"[codeblock]\n"
+"var color = Color(1, 0.5, 0.2)\n"
+"print(color.to_abgr64()) # Prints -225178692812801\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Color.xml:189
+msgid ""
+"Returns the color converted to a 32-bit integer in ARGB format (each byte "
+"represents a color channel). ARGB is more compatible with DirectX.\n"
+"[codeblock]\n"
+"var color = Color(1, 0.5, 0.2)\n"
+"print(color.to_argb32()) # Prints 4294934323\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Color.xml:199
+msgid ""
+"Returns the color converted to a 64-bit integer in ARGB format (each word "
+"represents a color channel). ARGB is more compatible with DirectX.\n"
+"[codeblock]\n"
+"var color = Color(1, 0.5, 0.2)\n"
+"print(color.to_argb64()) # Prints -2147470541\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Color.xml:210
+msgid ""
+"Returns the color's HTML hexadecimal color string in ARGB format (ex: "
+"[code]ff34f822[/code]).\n"
+"Setting [code]with_alpha[/code] to [code]false[/code] excludes alpha from "
+"the hexadecimal string.\n"
+"[codeblock]\n"
+"var c = Color(1, 1, 1, 0.5)\n"
+"var s1 = c.to_html() # Returns \"7fffffff\"\n"
+"var s2 = c.to_html(false) # Returns \"ffffff\"\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Color.xml:222
+msgid ""
+"Returns the color converted to a 32-bit integer in RGBA format (each byte "
+"represents a color channel). RGBA is Godot's default format.\n"
+"[codeblock]\n"
+"var color = Color(1, 0.5, 0.2)\n"
+"print(color.to_rgba32()) # Prints 4286526463\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Color.xml:232
+msgid ""
+"Returns the color converted to a 64-bit integer in RGBA format (each word "
+"represents a color channel). RGBA is Godot's default format.\n"
+"[codeblock]\n"
+"var color = Color(1, 0.5, 0.2)\n"
+"print(color.to_rgba64()) # Prints -140736629309441\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Color.xml:242
+msgid ""
+"The color's alpha (transparency) component, typically on the range of 0 to 1."
+msgstr ""
+
+#: doc/classes/Color.xml:245
+msgid "Wrapper for [member a] that uses the range 0 to 255 instead of 0 to 1."
+msgstr ""
+
+#: doc/classes/Color.xml:248
+msgid "The color's blue component, typically on the range of 0 to 1."
+msgstr ""
+
+#: doc/classes/Color.xml:251
+msgid "Wrapper for [member b] that uses the range 0 to 255 instead of 0 to 1."
+msgstr ""
+
+#: doc/classes/Color.xml:254
+msgid "The color's green component, typically on the range of 0 to 1."
+msgstr ""
+
+#: doc/classes/Color.xml:257
+msgid "Wrapper for [member g] that uses the range 0 to 255 instead of 0 to 1."
+msgstr ""
+
+#: doc/classes/Color.xml:260
+msgid "The HSV hue of this color, on the range 0 to 1."
+msgstr ""
+
+#: doc/classes/Color.xml:263
+msgid "The color's red component, typically on the range of 0 to 1."
+msgstr ""
+
+#: doc/classes/Color.xml:266
+msgid "Wrapper for [member r] that uses the range 0 to 255 instead of 0 to 1."
+msgstr ""
+
+#: doc/classes/Color.xml:269
+msgid "The HSV saturation of this color, on the range 0 to 1."
+msgstr ""
+
+#: doc/classes/Color.xml:272
+msgid "The HSV value (brightness) of this color, on the range 0 to 1."
+msgstr ""
+
+#: doc/classes/Color.xml:277
+msgid "Alice blue color."
+msgstr ""
+
+#: doc/classes/Color.xml:280
+msgid "Antique white color."
+msgstr ""
+
+#: doc/classes/Color.xml:283
+msgid "Aqua color."
+msgstr ""
+
+#: doc/classes/Color.xml:286
+msgid "Aquamarine color."
+msgstr ""
+
+#: doc/classes/Color.xml:289
+msgid "Azure color."
+msgstr ""
+
+#: doc/classes/Color.xml:292
+msgid "Beige color."
+msgstr ""
+
+#: doc/classes/Color.xml:295
+msgid "Bisque color."
+msgstr ""
+
+#: doc/classes/Color.xml:298
+msgid "Black color."
+msgstr ""
+
+#: doc/classes/Color.xml:301
+msgid "Blanche almond color."
+msgstr ""
+
+#: doc/classes/Color.xml:304
+msgid "Blue color."
+msgstr ""
+
+#: doc/classes/Color.xml:307
+msgid "Blue violet color."
+msgstr ""
+
+#: doc/classes/Color.xml:310
+msgid "Brown color."
+msgstr ""
+
+#: doc/classes/Color.xml:313
+msgid "Burly wood color."
+msgstr ""
+
+#: doc/classes/Color.xml:316
+msgid "Cadet blue color."
+msgstr ""
+
+#: doc/classes/Color.xml:319
+msgid "Chartreuse color."
+msgstr ""
+
+#: doc/classes/Color.xml:322
+msgid "Chocolate color."
+msgstr ""
+
+#: doc/classes/Color.xml:325
+msgid "Coral color."
+msgstr ""
+
+#: doc/classes/Color.xml:328
+msgid "Cornflower color."
+msgstr ""
+
+#: doc/classes/Color.xml:331
+msgid "Corn silk color."
+msgstr ""
+
+#: doc/classes/Color.xml:334
+msgid "Crimson color."
+msgstr ""
+
+#: doc/classes/Color.xml:337
+msgid "Cyan color."
+msgstr ""
+
+#: doc/classes/Color.xml:340
+msgid "Dark blue color."
+msgstr ""
+
+#: doc/classes/Color.xml:343
+msgid "Dark cyan color."
+msgstr ""
+
+#: doc/classes/Color.xml:346
+msgid "Dark goldenrod color."
+msgstr ""
+
+#: doc/classes/Color.xml:349
+msgid "Dark gray color."
+msgstr ""
+
+#: doc/classes/Color.xml:352
+msgid "Dark green color."
+msgstr ""
+
+#: doc/classes/Color.xml:355
+msgid "Dark khaki color."
+msgstr ""
+
+#: doc/classes/Color.xml:358
+msgid "Dark magenta color."
+msgstr ""
+
+#: doc/classes/Color.xml:361
+msgid "Dark olive green color."
+msgstr ""
+
+#: doc/classes/Color.xml:364
+msgid "Dark orange color."
+msgstr ""
+
+#: doc/classes/Color.xml:367
+msgid "Dark orchid color."
+msgstr ""
+
+#: doc/classes/Color.xml:370
+msgid "Dark red color."
+msgstr ""
+
+#: doc/classes/Color.xml:373
+msgid "Dark salmon color."
+msgstr ""
+
+#: doc/classes/Color.xml:376
+msgid "Dark sea green color."
+msgstr ""
+
+#: doc/classes/Color.xml:379
+msgid "Dark slate blue color."
+msgstr ""
+
+#: doc/classes/Color.xml:382
+msgid "Dark slate gray color."
+msgstr ""
+
+#: doc/classes/Color.xml:385
+msgid "Dark turquoise color."
+msgstr ""
+
+#: doc/classes/Color.xml:388
+msgid "Dark violet color."
+msgstr ""
+
+#: doc/classes/Color.xml:391
+msgid "Deep pink color."
+msgstr ""
+
+#: doc/classes/Color.xml:394
+msgid "Deep sky blue color."
+msgstr ""
+
+#: doc/classes/Color.xml:397
+msgid "Dim gray color."
+msgstr ""
+
+#: doc/classes/Color.xml:400
+msgid "Dodger blue color."
+msgstr ""
+
+#: doc/classes/Color.xml:403
+msgid "Firebrick color."
+msgstr ""
+
+#: doc/classes/Color.xml:406
+msgid "Floral white color."
+msgstr ""
+
+#: doc/classes/Color.xml:409
+msgid "Forest green color."
+msgstr ""
+
+#: doc/classes/Color.xml:412
+msgid "Fuchsia color."
+msgstr ""
+
+#: doc/classes/Color.xml:415
+msgid "Gainsboro color."
+msgstr ""
+
+#: doc/classes/Color.xml:418
+msgid "Ghost white color."
+msgstr ""
+
+#: doc/classes/Color.xml:421
+msgid "Gold color."
+msgstr ""
+
+#: doc/classes/Color.xml:424
+msgid "Goldenrod color."
+msgstr ""
+
+#: doc/classes/Color.xml:427
+msgid "Gray color."
+msgstr ""
+
+#: doc/classes/Color.xml:430
+msgid "Green color."
+msgstr ""
+
+#: doc/classes/Color.xml:433
+msgid "Green yellow color."
+msgstr ""
+
+#: doc/classes/Color.xml:436
+msgid "Honeydew color."
+msgstr ""
+
+#: doc/classes/Color.xml:439
+msgid "Hot pink color."
+msgstr ""
+
+#: doc/classes/Color.xml:442
+msgid "Indian red color."
+msgstr ""
+
+#: doc/classes/Color.xml:445
+msgid "Indigo color."
+msgstr ""
+
+#: doc/classes/Color.xml:448
+msgid "Ivory color."
+msgstr ""
+
+#: doc/classes/Color.xml:451
+msgid "Khaki color."
+msgstr ""
+
+#: doc/classes/Color.xml:454
+msgid "Lavender color."
+msgstr ""
+
+#: doc/classes/Color.xml:457
+msgid "Lavender blush color."
+msgstr ""
+
+#: doc/classes/Color.xml:460
+msgid "Lawn green color."
+msgstr ""
+
+#: doc/classes/Color.xml:463
+msgid "Lemon chiffon color."
+msgstr ""
+
+#: doc/classes/Color.xml:466
+msgid "Light blue color."
+msgstr ""
+
+#: doc/classes/Color.xml:469
+msgid "Light coral color."
+msgstr ""
+
+#: doc/classes/Color.xml:472
+msgid "Light cyan color."
+msgstr ""
+
+#: doc/classes/Color.xml:475
+msgid "Light goldenrod color."
+msgstr ""
+
+#: doc/classes/Color.xml:478
+msgid "Light gray color."
+msgstr ""
+
+#: doc/classes/Color.xml:481
+msgid "Light green color."
+msgstr ""
+
+#: doc/classes/Color.xml:484
+msgid "Light pink color."
+msgstr ""
+
+#: doc/classes/Color.xml:487
+msgid "Light salmon color."
+msgstr ""
+
+#: doc/classes/Color.xml:490
+msgid "Light sea green color."
+msgstr ""
+
+#: doc/classes/Color.xml:493
+msgid "Light sky blue color."
+msgstr ""
+
+#: doc/classes/Color.xml:496
+msgid "Light slate gray color."
+msgstr ""
+
+#: doc/classes/Color.xml:499
+msgid "Light steel blue color."
+msgstr ""
+
+#: doc/classes/Color.xml:502
+msgid "Light yellow color."
+msgstr ""
+
+#: doc/classes/Color.xml:505
+msgid "Lime color."
+msgstr ""
+
+#: doc/classes/Color.xml:508
+msgid "Lime green color."
+msgstr ""
+
+#: doc/classes/Color.xml:511
+msgid "Linen color."
+msgstr ""
+
+#: doc/classes/Color.xml:514
+msgid "Magenta color."
+msgstr ""
+
+#: doc/classes/Color.xml:517
+msgid "Maroon color."
+msgstr ""
+
+#: doc/classes/Color.xml:520
+msgid "Medium aquamarine color."
+msgstr ""
+
+#: doc/classes/Color.xml:523
+msgid "Medium blue color."
+msgstr ""
+
+#: doc/classes/Color.xml:526
+msgid "Medium orchid color."
+msgstr ""
+
+#: doc/classes/Color.xml:529
+msgid "Medium purple color."
+msgstr ""
+
+#: doc/classes/Color.xml:532
+msgid "Medium sea green color."
+msgstr ""
+
+#: doc/classes/Color.xml:535
+msgid "Medium slate blue color."
+msgstr ""
+
+#: doc/classes/Color.xml:538
+msgid "Medium spring green color."
+msgstr ""
+
+#: doc/classes/Color.xml:541
+msgid "Medium turquoise color."
+msgstr ""
+
+#: doc/classes/Color.xml:544
+msgid "Medium violet red color."
+msgstr ""
+
+#: doc/classes/Color.xml:547
+msgid "Midnight blue color."
+msgstr ""
+
+#: doc/classes/Color.xml:550
+msgid "Mint cream color."
+msgstr ""
+
+#: doc/classes/Color.xml:553
+msgid "Misty rose color."
+msgstr ""
+
+#: doc/classes/Color.xml:556
+msgid "Moccasin color."
+msgstr ""
+
+#: doc/classes/Color.xml:559
+msgid "Navajo white color."
+msgstr ""
+
+#: doc/classes/Color.xml:562
+msgid "Navy blue color."
+msgstr ""
+
+#: doc/classes/Color.xml:565
+msgid "Old lace color."
+msgstr ""
+
+#: doc/classes/Color.xml:568
+msgid "Olive color."
+msgstr ""
+
+#: doc/classes/Color.xml:571
+msgid "Olive drab color."
+msgstr ""
+
+#: doc/classes/Color.xml:574
+msgid "Orange color."
+msgstr ""
+
+#: doc/classes/Color.xml:577
+msgid "Orange red color."
+msgstr ""
+
+#: doc/classes/Color.xml:580
+msgid "Orchid color."
+msgstr ""
+
+#: doc/classes/Color.xml:583
+msgid "Pale goldenrod color."
+msgstr ""
+
+#: doc/classes/Color.xml:586
+msgid "Pale green color."
+msgstr ""
+
+#: doc/classes/Color.xml:589
+msgid "Pale turquoise color."
+msgstr ""
+
+#: doc/classes/Color.xml:592
+msgid "Pale violet red color."
+msgstr ""
+
+#: doc/classes/Color.xml:595
+msgid "Papaya whip color."
+msgstr ""
+
+#: doc/classes/Color.xml:598
+msgid "Peach puff color."
+msgstr ""
+
+#: doc/classes/Color.xml:601
+msgid "Peru color."
+msgstr ""
+
+#: doc/classes/Color.xml:604
+msgid "Pink color."
+msgstr ""
+
+#: doc/classes/Color.xml:607
+msgid "Plum color."
+msgstr ""
+
+#: doc/classes/Color.xml:610
+msgid "Powder blue color."
+msgstr ""
+
+#: doc/classes/Color.xml:613
+msgid "Purple color."
+msgstr ""
+
+#: doc/classes/Color.xml:616
+msgid "Rebecca purple color."
+msgstr ""
+
+#: doc/classes/Color.xml:619
+msgid "Red color."
+msgstr ""
+
+#: doc/classes/Color.xml:622
+msgid "Rosy brown color."
+msgstr ""
+
+#: doc/classes/Color.xml:625
+msgid "Royal blue color."
+msgstr ""
+
+#: doc/classes/Color.xml:628
+msgid "Saddle brown color."
+msgstr ""
+
+#: doc/classes/Color.xml:631
+msgid "Salmon color."
+msgstr ""
+
+#: doc/classes/Color.xml:634
+msgid "Sandy brown color."
+msgstr ""
+
+#: doc/classes/Color.xml:637
+msgid "Sea green color."
+msgstr ""
+
+#: doc/classes/Color.xml:640
+msgid "Seashell color."
+msgstr ""
+
+#: doc/classes/Color.xml:643
+msgid "Sienna color."
+msgstr ""
+
+#: doc/classes/Color.xml:646
+msgid "Silver color."
+msgstr ""
+
+#: doc/classes/Color.xml:649
+msgid "Sky blue color."
+msgstr ""
+
+#: doc/classes/Color.xml:652
+msgid "Slate blue color."
+msgstr ""
+
+#: doc/classes/Color.xml:655
+msgid "Slate gray color."
+msgstr ""
+
+#: doc/classes/Color.xml:658
+msgid "Snow color."
+msgstr ""
+
+#: doc/classes/Color.xml:661
+msgid "Spring green color."
+msgstr ""
+
+#: doc/classes/Color.xml:664
+msgid "Steel blue color."
+msgstr ""
+
+#: doc/classes/Color.xml:667
+msgid "Tan color."
+msgstr ""
+
+#: doc/classes/Color.xml:670
+msgid "Teal color."
+msgstr ""
+
+#: doc/classes/Color.xml:673
+msgid "Thistle color."
+msgstr ""
+
+#: doc/classes/Color.xml:676
+msgid "Tomato color."
+msgstr ""
+
+#: doc/classes/Color.xml:679
+msgid "Transparent color (white with no alpha)."
+msgstr ""
+
+#: doc/classes/Color.xml:682
+msgid "Turquoise color."
+msgstr ""
+
+#: doc/classes/Color.xml:685
+msgid "Violet color."
+msgstr ""
+
+#: doc/classes/Color.xml:688
+msgid "Web gray color."
+msgstr ""
+
+#: doc/classes/Color.xml:691
+msgid "Web green color."
+msgstr ""
+
+#: doc/classes/Color.xml:694
+msgid "Web maroon color."
+msgstr ""
+
+#: doc/classes/Color.xml:697
+msgid "Web purple color."
+msgstr ""
+
+#: doc/classes/Color.xml:700
+msgid "Wheat color."
+msgstr ""
+
+#: doc/classes/Color.xml:703
+msgid "White color."
+msgstr ""
+
+#: doc/classes/Color.xml:706
+msgid "White smoke color."
+msgstr ""
+
+#: doc/classes/Color.xml:709
+msgid "Yellow color."
+msgstr ""
+
+#: doc/classes/Color.xml:712
+msgid "Yellow green color."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:4
+msgid "Color picker control."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:7
+msgid ""
+"Displays a color picker widget. Useful for selecting a color from an RGB/"
+"RGBA colorspace.\n"
+"[b]Note:[/b] This control is the color picker widget itself. You can use a "
+"[ColorPickerButton] instead if you need a button that brings up a "
+"[ColorPicker] in a pop-up."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:18
+msgid ""
+"Adds the given color to a list of color presets. The presets are displayed "
+"in the color picker and the user will be able to select them.\n"
+"[b]Note:[/b] The presets list is only for [i]this[/i] color picker."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:26
+msgid ""
+"Removes the given color from the list of color presets of this color picker."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:32
+msgid "Returns the list of colors in the presets of the color picker."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:38 doc/classes/ColorPickerButton.xml:33
+msgid "The currently selected color."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:41
+msgid ""
+"If [code]true[/code], the color will apply only after the user releases the "
+"mouse button, otherwise it will apply immediately even in mouse motion event "
+"(which can cause performance issues)."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:44
+msgid "If [code]true[/code], shows an alpha channel slider (transparency)."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:47
+msgid ""
+"If [code]true[/code], allows editing the color with Hue/Saturation/Value "
+"sliders.\n"
+"[b]Note:[/b] Cannot be enabled if raw mode is on."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:51
+msgid "If [code]true[/code], the \"add preset\" button is enabled."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:54
+msgid "If [code]true[/code], saved color presets are visible."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:57
+msgid ""
+"If [code]true[/code], allows the color R, G, B component values to go beyond "
+"1.0, which can be used for certain special operations that require it (like "
+"tinting without darkening or rendering sprites in HDR).\n"
+"[b]Note:[/b] Cannot be enabled if HSV mode is on."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:65
+msgid "Emitted when the color is changed."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:71
+msgid "Emitted when a preset is added."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:77
+msgid "Emitted when a preset is removed."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:85
+msgid "The icon for the \"Add Preset\" button."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:88
+msgid "Custom texture for the hue selection slider on the right."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:93
+msgid "The width of the hue selection slider."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:98
+msgid "The margin around the [ColorPicker]."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:101
+msgid ""
+"The indicator used to signalize that the color value is outside the 0-1 "
+"range."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:106
+msgid "The icon for the screen color picker button."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:109
+msgid "The height of the saturation-value selection box."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:112
+msgid "The width of the saturation-value selection box."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:4
+msgid "Button that pops out a [ColorPicker]."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:7
+msgid ""
+"Encapsulates a [ColorPicker] making it accessible by pressing a button. "
+"Pressing the button will toggle the [ColorPicker] visibility.\n"
+"See also [BaseButton] which contains common properties and methods "
+"associated with this node.\n"
+"[b]Note:[/b] By default, the button may not be wide enough for the color "
+"preview swatch to be visible. Make sure to set [member Control."
+"rect_min_size] to a big enough value to give the button enough space."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:19
+msgid ""
+"Returns the [ColorPicker] that this node toggles.\n"
+"[b]Warning:[/b] This is a required internal node, removing and freeing it "
+"may cause a crash. If you wish to hide it or any of its children, use their "
+"[member CanvasItem.visible] property."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:26
+msgid ""
+"Returns the control's [PopupPanel] which allows you to connect to popup "
+"signals. This allows you to handle events when the ColorPicker is shown or "
+"hidden.\n"
+"[b]Warning:[/b] This is a required internal node, removing and freeing it "
+"may cause a crash. If you wish to hide it or any of its children, use their "
+"[member CanvasItem.visible] property."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:36
+msgid ""
+"If [code]true[/code], the alpha channel in the displayed [ColorPicker] will "
+"be visible."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:44
+msgid "Emitted when the color changes."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:49
+msgid ""
+"Emitted when the [ColorPicker] is created (the button is pressed for the "
+"first time)."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:54
+msgid "Emitted when the [ColorPicker] is closed."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:62
+msgid "The background of the color preview rect on the button."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:65
+msgid "[StyleBox] used when the [ColorPickerButton] is disabled."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:68
+msgid ""
+"[StyleBox] used when the [ColorPickerButton] is focused. It is displayed "
+"over the current [StyleBox], so using [StyleBoxEmpty] will just disable the "
+"focus visual effect."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:71
+msgid "[Font] of the [ColorPickerButton]'s text."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:74
+msgid "Default text [Color] of the [ColorPickerButton]."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:77
+msgid "Text [Color] used when the [ColorPickerButton] is disabled."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:80
+msgid ""
+"Text [Color] used when the [ColorPickerButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:83
+msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:86
+msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:89
+msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:92
+msgid "The horizontal space between [ColorPickerButton]'s icon and text."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:95
+msgid "Default [StyleBox] for the [ColorPickerButton]."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:98
+msgid "[StyleBox] used when the [ColorPickerButton] is being pressed."
+msgstr ""
+
+#: doc/classes/ColorRect.xml:4
+msgid "Colored rectangle."
+msgstr ""
+
+#: doc/classes/ColorRect.xml:7
+msgid ""
+"Displays a rectangle filled with a solid [member color]. If you need to "
+"display the border alone, consider using [ReferenceRect] instead."
+msgstr ""
+
+#: doc/classes/ColorRect.xml:16
+msgid ""
+"The fill color.\n"
+"[codeblock]\n"
+"$ColorRect.color = Color(1, 0, 0, 1) # Set ColorRect's color to red.\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/ConcavePolygonShape.xml:4
+msgid "Concave polygon shape."
+msgstr ""
+
+#: doc/classes/ConcavePolygonShape.xml:7
+msgid ""
+"Concave polygon shape resource, which can be set into a [PhysicsBody] or "
+"area. This shape is created by feeding a list of triangles.\n"
+"[b]Note:[/b] When used for collision, [ConcavePolygonShape] is intended to "
+"work with static [PhysicsBody] nodes like [StaticBody] and will not work "
+"with [KinematicBody] or [RigidBody] with a mode other than Static."
+msgstr ""
+
+#: doc/classes/ConcavePolygonShape.xml:17
+msgid "Returns the faces (an array of triangles)."
+msgstr ""
+
+#: doc/classes/ConcavePolygonShape.xml:24
+msgid "Sets the faces (an array of triangles)."
+msgstr ""
+
+#: doc/classes/ConcavePolygonShape2D.xml:4
+msgid "Concave polygon 2D shape resource for physics."
+msgstr ""
+
+#: doc/classes/ConcavePolygonShape2D.xml:7
+msgid ""
+"Concave polygon 2D shape resource for physics. It is made out of segments "
+"and is optimal for complex polygonal concave collisions. However, it is not "
+"advised to use for [RigidBody2D] nodes. A CollisionPolygon2D in convex "
+"decomposition mode (solids) or several convex objects are advised for that "
+"instead. Otherwise, a concave polygon 2D shape is better for static "
+"collisions.\n"
+"The main difference between a [ConvexPolygonShape2D] and a "
+"[ConcavePolygonShape2D] is that a concave polygon assumes it is concave and "
+"uses a more complex method of collision detection, and a convex one forces "
+"itself to be convex in order to speed up collision detection."
+msgstr ""
+
+#: doc/classes/ConcavePolygonShape2D.xml:16
+msgid ""
+"The array of points that make up the [ConcavePolygonShape2D]'s line segments."
+msgstr ""
+
+#: doc/classes/ConeTwistJoint.xml:4
+msgid "A twist joint between two 3D PhysicsBodies."
+msgstr ""
+
+#: doc/classes/ConeTwistJoint.xml:7
+msgid ""
+"The joint can rotate the bodies across an axis defined by the local x-axes "
+"of the [Joint].\n"
+"The twist axis is initiated as the X axis of the [Joint].\n"
+"Once the Bodies swing, the twist axis is calculated as the middle of the x-"
+"axes of the Joint in the local space of the two Bodies. See also "
+"[Generic6DOFJoint]."
+msgstr ""
+
+#: doc/classes/ConeTwistJoint.xml:30 doc/classes/ConeTwistJoint.xml:62
+#: doc/classes/PhysicsServer.xml:1076
+msgid ""
+"The speed with which the swing or twist will take place.\n"
+"The higher, the faster."
+msgstr ""
+
+#: doc/classes/ConeTwistJoint.xml:34 doc/classes/ConeTwistJoint.xml:69
+#: doc/classes/PhysicsServer.xml:1083
+msgid ""
+"Defines, how fast the swing- and twist-speed-difference on both sides gets "
+"synced."
+msgstr ""
+
+#: doc/classes/ConeTwistJoint.xml:37 doc/classes/ConeTwistJoint.xml:66
+msgid ""
+"The ease with which the joint starts to twist. If it's too low, it takes "
+"more force to start twisting the joint."
+msgstr ""
+
+#: doc/classes/ConeTwistJoint.xml:40 doc/classes/ConeTwistJoint.xml:52
+#: doc/classes/PhysicsServer.xml:1066
+msgid ""
+"Swing is rotation from side to side, around the axis perpendicular to the "
+"twist axis.\n"
+"The swing span defines, how much rotation will not get corrected along the "
+"swing axis.\n"
+"Could be defined as looseness in the [ConeTwistJoint].\n"
+"If below 0.05, this behavior is locked."
+msgstr ""
+
+#: doc/classes/ConeTwistJoint.xml:46 doc/classes/ConeTwistJoint.xml:58
+#: doc/classes/PhysicsServer.xml:1072
+msgid ""
+"Twist is the rotation around the twist axis, this value defined how far the "
+"joint can twist.\n"
+"Twist is locked if below 0.05."
+msgstr ""
+
+#: doc/classes/ConeTwistJoint.xml:72 doc/classes/Generic6DOFJoint.xml:384
+#: doc/classes/HingeJoint.xml:99 doc/classes/Light.xml:124
+#: doc/classes/SliderJoint.xml:165
+msgid "Represents the size of the [enum Param] enum."
+msgstr ""
+
+#: doc/classes/ConfigFile.xml:4
+msgid "Helper class to handle INI-style files."
+msgstr ""
+
+#: doc/classes/ConfigFile.xml:7
+msgid ""
+"This helper class can be used to store [Variant] values on the filesystem "
+"using INI-style formatting. The stored values are identified by a section "
+"and a key:\n"
+"[codeblock]\n"
+"[section]\n"
+"some_key=42\n"
+"string_example=\"Hello World!\"\n"
+"a_vector=Vector3( 1, 0, 2 )\n"
+"[/codeblock]\n"
+"The stored data can be saved to or parsed from a file, though ConfigFile "
+"objects can also be used directly without accessing the filesystem.\n"
+"The following example shows how to create a simple [ConfigFile] and save it "
+"on disk:\n"
+"[codeblock]\n"
+"# Create new ConfigFile object.\n"
+"var config = ConfigFile.new()\n"
+"\n"
+"# Store some values.\n"
+"config.set_value(\"Player1\", \"player_name\", \"Steve\")\n"
+"config.set_value(\"Player1\", \"best_score\", 10)\n"
+"config.set_value(\"Player2\", \"player_name\", \"V3geta\")\n"
+"config.set_value(\"Player2\", \"best_score\", 9001)\n"
+"\n"
+"# Save it to a file (overwrite if already exists).\n"
+"config.save(\"user://scores.cfg\")\n"
+"[/codeblock]\n"
+"This example shows how the above file could be loaded:\n"
+"[codeblock]\n"
+"var score_data = {}\n"
+"var config = ConfigFile.new()\n"
+"\n"
+"# Load data from a file.\n"
+"var err = config.load(\"user://scores.cfg\")\n"
+"\n"
+"# If the file didn't load, ignore it.\n"
+"if err != OK:\n"
+" return\n"
+"\n"
+"# Iterate over all sections.\n"
+"for player in config.get_sections():\n"
+" # Fetch the data for each section.\n"
+" var player_name = config.get_value(player, \"player_name\")\n"
+" var player_score = config.get_value(player, \"best_score\")\n"
+" score_data[player_name] = player_score\n"
+"[/codeblock]\n"
+"Any operation that mutates the ConfigFile such as [method set_value], "
+"[method clear], or [method erase_section], only changes what is loaded in "
+"memory. If you want to write the change to a file, you have to save the "
+"changes with [method save], [method save_encrypted], or [method "
+"save_encrypted_pass].\n"
+"Keep in mind that section and property names can't contain spaces. Anything "
+"after a space will be ignored on save and on load.\n"
+"ConfigFiles can also contain manually written comment lines starting with a "
+"semicolon ([code];[/code]). Those lines will be ignored when parsing the "
+"file. Note that comments will be lost when saving the ConfigFile. This can "
+"still be useful for dedicated server configuration files, which are "
+"typically never overwritten without explicit user action.\n"
+"[b]Note:[/b] The file extension given to a ConfigFile does not have any "
+"impact on its formatting or behavior. By convention, the [code].cfg[/code] "
+"extension is used here, but any other extension such as [code].ini[/code] is "
+"also valid. Since neither [code].cfg[/code] nor [code].ini[/code] are "
+"standardized, Godot's ConfigFile formatting may differ from files written by "
+"other programs."
+msgstr ""
+
+#: doc/classes/ConfigFile.xml:59
+msgid "Removes the entire contents of the config."
+msgstr ""
+
+#: doc/classes/ConfigFile.xml:66
+msgid ""
+"Deletes the specified section along with all the key-value pairs inside. "
+"Raises an error if the section does not exist."
+msgstr ""
+
+#: doc/classes/ConfigFile.xml:74
+msgid ""
+"Deletes the specified key in a section. Raises an error if either the "
+"section or the key do not exist."
+msgstr ""
+
+#: doc/classes/ConfigFile.xml:81
+msgid ""
+"Returns an array of all defined key identifiers in the specified section. "
+"Raises an error and returns an empty array if the section does not exist."
+msgstr ""
+
+#: doc/classes/ConfigFile.xml:87
+msgid "Returns an array of all defined section identifiers."
+msgstr ""
+
+#: doc/classes/ConfigFile.xml:96
+msgid ""
+"Returns the current value for the specified section and key. If either the "
+"section or the key do not exist, the method returns the fallback "
+"[code]default[/code] value. If [code]default[/code] is not specified or set "
+"to [code]null[/code], an error is also raised."
+msgstr ""
+
+#: doc/classes/ConfigFile.xml:103
+msgid "Returns [code]true[/code] if the specified section exists."
+msgstr ""
+
+#: doc/classes/ConfigFile.xml:111
+msgid "Returns [code]true[/code] if the specified section-key pair exists."
+msgstr ""
+
+#: doc/classes/ConfigFile.xml:118
+msgid ""
+"Loads the config file specified as a parameter. The file's contents are "
+"parsed and loaded in the [ConfigFile] object which the method was called "
+"on.\n"
+"Returns one of the [enum Error] code constants ([code]OK[/code] on success)."
+msgstr ""
+
+#: doc/classes/ConfigFile.xml:127
+msgid ""
+"Loads the encrypted config file specified as a parameter, using the provided "
+"[code]key[/code] to decrypt it. The file's contents are parsed and loaded in "
+"the [ConfigFile] object which the method was called on.\n"
+"Returns one of the [enum Error] code constants ([code]OK[/code] on success)."
+msgstr ""
+
+#: doc/classes/ConfigFile.xml:136
+msgid ""
+"Loads the encrypted config file specified as a parameter, using the provided "
+"[code]password[/code] to decrypt it. The file's contents are parsed and "
+"loaded in the [ConfigFile] object which the method was called on.\n"
+"Returns one of the [enum Error] code constants ([code]OK[/code] on success)."
+msgstr ""
+
+#: doc/classes/ConfigFile.xml:144
+msgid ""
+"Parses the passed string as the contents of a config file. The string is "
+"parsed and loaded in the ConfigFile object which the method was called on.\n"
+"Returns one of the [enum Error] code constants ([code]OK[/code] on success)."
+msgstr ""
+
+#: doc/classes/ConfigFile.xml:152
+msgid ""
+"Saves the contents of the [ConfigFile] object to the file specified as a "
+"parameter. The output file uses an INI-style structure.\n"
+"Returns one of the [enum Error] code constants ([code]OK[/code] on success)."
+msgstr ""
+
+#: doc/classes/ConfigFile.xml:161
+msgid ""
+"Saves the contents of the [ConfigFile] object to the AES-256 encrypted file "
+"specified as a parameter, using the provided [code]key[/code] to encrypt it. "
+"The output file uses an INI-style structure.\n"
+"Returns one of the [enum Error] code constants ([code]OK[/code] on success)."
+msgstr ""
+
+#: doc/classes/ConfigFile.xml:170
+msgid ""
+"Saves the contents of the [ConfigFile] object to the AES-256 encrypted file "
+"specified as a parameter, using the provided [code]password[/code] to "
+"encrypt it. The output file uses an INI-style structure.\n"
+"Returns one of the [enum Error] code constants ([code]OK[/code] on success)."
+msgstr ""
+
+#: doc/classes/ConfigFile.xml:180
+msgid ""
+"Assigns a value to the specified key of the specified section. If either the "
+"section or the key do not exist, they are created. Passing a [code]null[/"
+"code] value deletes the specified key if it exists, and deletes the section "
+"if it ends up empty once the key has been removed."
+msgstr ""
+
+#: doc/classes/ConfirmationDialog.xml:4
+msgid "Dialog for confirmation of actions."
+msgstr ""
+
+#: doc/classes/ConfirmationDialog.xml:7
+msgid ""
+"Dialog for confirmation of actions. This dialog inherits from "
+"[AcceptDialog], but has by default an OK and Cancel button (in host OS "
+"order).\n"
+"To get cancel action, you can use:\n"
+"[codeblock]\n"
+"get_cancel().connect(\"pressed\", self, \"cancelled\")\n"
+"[/codeblock]."
+msgstr ""
+
+#: doc/classes/ConfirmationDialog.xml:19
+msgid ""
+"Returns the cancel button.\n"
+"[b]Warning:[/b] This is a required internal node, removing and freeing it "
+"may cause a crash. If you wish to hide it or any of its children, use their "
+"[member CanvasItem.visible] property."
+msgstr ""
+
+#: doc/classes/Container.xml:4
+msgid "Base node for containers."
+msgstr ""
+
+#: doc/classes/Container.xml:7
+msgid ""
+"Base node for containers. A [Container] contains other controls and "
+"automatically arranges them in a certain way.\n"
+"A Control can inherit this to create custom container classes."
+msgstr ""
+
+#: doc/classes/Container.xml:18
+msgid ""
+"Fit a child control in a given rect. This is mainly a helper for creating "
+"custom container classes."
+msgstr ""
+
+#: doc/classes/Container.xml:24
+msgid ""
+"Queue resort of the contained children. This is called automatically anyway, "
+"but can be called upon request."
+msgstr ""
+
+#: doc/classes/Container.xml:31
+msgid "Emitted when sorting the children is needed."
+msgstr ""
+
+#: doc/classes/Container.xml:37
+msgid ""
+"Notification for when sorting the children, it must be obeyed immediately."
+msgstr ""
+
+#: doc/classes/Control.xml:4
+msgid ""
+"All user interface nodes inherit from Control. A control's anchors and "
+"margins adapt its position and size relative to its parent."
+msgstr ""
+
+#: doc/classes/Control.xml:7
+msgid ""
+"Base class for all UI-related nodes. [Control] features a bounding rectangle "
+"that defines its extents, an anchor position relative to its parent control "
+"or the current viewport, and margins that represent an offset to the anchor. "
+"The margins update automatically when the node, any of its parents, or the "
+"screen size change.\n"
+"For more information on Godot's UI system, anchors, margins, and containers, "
+"see the related tutorials in the manual. To build flexible UIs, you'll need "
+"a mix of UI elements that inherit from [Control] and [Container] nodes.\n"
+"[b]User Interface nodes and input[/b]\n"
+"Godot sends input events to the scene's root node first, by calling [method "
+"Node._input]. [method Node._input] forwards the event down the node tree to "
+"the nodes under the mouse cursor, or on keyboard focus. To do so, it calls "
+"[method MainLoop._input_event]. Call [method accept_event] so no other node "
+"receives the event. Once you accept an input, it becomes handled so [method "
+"Node._unhandled_input] will not process it.\n"
+"Only one [Control] node can be in keyboard focus. Only the node in focus "
+"will receive keyboard events. To get the focus, call [method grab_focus]. "
+"[Control] nodes lose focus when another node grabs it, or if you hide the "
+"node in focus.\n"
+"Sets [member mouse_filter] to [constant MOUSE_FILTER_IGNORE] to tell a "
+"[Control] node to ignore mouse or touch events. You'll need it if you place "
+"an icon on top of a button.\n"
+"[Theme] resources change the Control's appearance. If you change the [Theme] "
+"on a [Control] node, it affects all of its children. To override some of the "
+"theme's parameters, call one of the [code]add_*_override[/code] methods, "
+"like [method add_font_override]. You can override the theme with the "
+"inspector.\n"
+"[b]Note:[/b] Theme items are [i]not[/i] [Object] properties. This means you "
+"can't access their values using [method Object.get] and [method Object.set]. "
+"Instead, use [method get_color], [method get_constant], [method get_font], "
+"[method get_icon], [method get_stylebox], and the [code]add_*_override[/"
+"code] methods provided by this class."
+msgstr ""
+
+#: doc/classes/Control.xml:17
+msgid "https://docs.godotengine.org/en/3.4/tutorials/gui/index.html"
+msgstr ""
+
+#: doc/classes/Control.xml:19
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/gui/control_node_gallery.html"
+msgstr ""
+
+#: doc/classes/Control.xml:20
+msgid "https://github.com/godotengine/godot-demo-projects/tree/master/gui"
+msgstr ""
+
+#: doc/classes/Control.xml:26
+msgid ""
+"Virtual method to be implemented by the user. Returns whether [method "
+"_gui_input] should not be called for children controls outside this "
+"control's rectangle. Input will be clipped to the Rect of this [Control]. "
+"Similar to [member rect_clip_content], but doesn't affect visibility.\n"
+"If not overridden, defaults to [code]false[/code]."
+msgstr ""
+
+#: doc/classes/Control.xml:33
+msgid ""
+"Virtual method to be implemented by the user. Returns the minimum size for "
+"this control. Alternative to [member rect_min_size] for controlling minimum "
+"size via code. The actual minimum size will be the max value of these two "
+"(in each axis separately).\n"
+"If not overridden, defaults to [constant Vector2.ZERO]."
+msgstr ""
+
+#: doc/classes/Control.xml:41
+msgid ""
+"Virtual method to be implemented by the user. Use this method to process and "
+"accept inputs on UI elements. See [method accept_event].\n"
+"Example: clicking a control.\n"
+"[codeblock]\n"
+"func _gui_input(event):\n"
+" if event is InputEventMouseButton:\n"
+" if event.button_index == BUTTON_LEFT and event.pressed:\n"
+" print(\"I've been clicked D:\")\n"
+"[/codeblock]\n"
+"The event won't trigger if:\n"
+"* clicking outside the control (see [method has_point]);\n"
+"* control has [member mouse_filter] set to [constant MOUSE_FILTER_IGNORE];\n"
+"* control is obstructed by another [Control] on top of it, which doesn't "
+"have [member mouse_filter] set to [constant MOUSE_FILTER_IGNORE];\n"
+"* control's parent has [member mouse_filter] set to [constant "
+"MOUSE_FILTER_STOP] or has accepted the event;\n"
+"* it happens outside the parent's rectangle and the parent has either "
+"[member rect_clip_content] or [method _clips_input] enabled.\n"
+"[b]Note:[/b] Event position is relative to the control origin."
+msgstr ""
+
+#: doc/classes/Control.xml:62
+msgid ""
+"Virtual method to be implemented by the user. Returns a [Control] node that "
+"should be used as a tooltip instead of the default one. The [code]for_text[/"
+"code] includes the contents of the [member hint_tooltip] property.\n"
+"The returned node must be of type [Control] or Control-derived. It can have "
+"child nodes of any type. It is freed when the tooltip disappears, so make "
+"sure you always provide a new instance (if you want to use a pre-existing "
+"node from your scene tree, you can duplicate it and pass the duplicated "
+"instance). When [code]null[/code] or a non-Control node is returned, the "
+"default tooltip will be used instead.\n"
+"The returned node will be added as child to a [PopupPanel], so you should "
+"only provide the contents of that panel. That [PopupPanel] can be themed "
+"using [method Theme.set_stylebox] for the type [code]\"TooltipPanel\"[/code] "
+"(see [member hint_tooltip] for an example).\n"
+"[b]Note:[/b] The tooltip is shrunk to minimal size. If you want to ensure "
+"it's fully visible, you might want to set its [member rect_min_size] to some "
+"non-zero value.\n"
+"Example of usage with a custom-constructed node:\n"
+"[codeblock]\n"
+"func _make_custom_tooltip(for_text):\n"
+" var label = Label.new()\n"
+" label.text = for_text\n"
+" return label\n"
+"[/codeblock]\n"
+"Example of usage with a custom scene instance:\n"
+"[codeblock]\n"
+"func _make_custom_tooltip(for_text):\n"
+" var tooltip = preload(\"res://SomeTooltipScene.tscn\").instance()\n"
+" tooltip.get_node(\"Label\").text = for_text\n"
+" return tooltip\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Control.xml:85
+msgid ""
+"Marks an input event as handled. Once you accept an input event, it stops "
+"propagating, even to nodes listening to [method Node._unhandled_input] or "
+"[method Node._unhandled_key_input]."
+msgstr ""
+
+#: doc/classes/Control.xml:93
+msgid ""
+"Creates a local override for a theme [Color] with the specified [code]name[/"
+"code]. Local overrides always take precedence when fetching theme items for "
+"the control. An override cannot be removed, but it can be overridden with "
+"the corresponding default value.\n"
+"See also [method get_color].\n"
+"[b]Example of overriding a label's color and resetting it later:[/b]\n"
+"[codeblock]\n"
+"# Given the child Label node \"MyLabel\", override its font color with a "
+"custom value.\n"
+"$MyLabel.add_color_override(\"font_color\", Color(1, 0.5, 0))\n"
+"# Reset the font color of the child label.\n"
+"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", \"Label"
+"\"))\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Control.xml:109
+msgid ""
+"Creates a local override for a theme constant with the specified [code]name[/"
+"code]. Local overrides always take precedence when fetching theme items for "
+"the control. An override cannot be removed, but it can be overridden with "
+"the corresponding default value.\n"
+"See also [method get_constant]."
+msgstr ""
+
+#: doc/classes/Control.xml:118
+msgid ""
+"Creates a local override for a theme [Font] with the specified [code]name[/"
+"code]. Local overrides always take precedence when fetching theme items for "
+"the control. An override can be removed by assigning it a [code]null[/code] "
+"value.\n"
+"See also [method get_font]."
+msgstr ""
+
+#: doc/classes/Control.xml:127
+msgid ""
+"Creates a local override for a theme icon with the specified [code]name[/"
+"code]. Local overrides always take precedence when fetching theme items for "
+"the control. An override can be removed by assigning it a [code]null[/code] "
+"value.\n"
+"See also [method get_icon]."
+msgstr ""
+
+#: doc/classes/Control.xml:136
+msgid ""
+"Creates a local override for a theme shader with the specified [code]name[/"
+"code]. Local overrides always take precedence when fetching theme items for "
+"the control. An override can be removed by assigning it a [code]null[/code] "
+"value."
+msgstr ""
+
+#: doc/classes/Control.xml:144
+msgid ""
+"Creates a local override for a theme [StyleBox] with the specified "
+"[code]name[/code]. Local overrides always take precedence when fetching "
+"theme items for the control. An override can be removed by assigning it a "
+"[code]null[/code] value.\n"
+"See also [method get_stylebox].\n"
+"[b]Example of modifying a property in a StyleBox by duplicating it:[/b]\n"
+"[codeblock]\n"
+"# The snippet below assumes the child node MyButton has a StyleBoxFlat "
+"assigned.\n"
+"# Resources are shared across instances, so we need to duplicate it\n"
+"# to avoid modifying the appearance of all other buttons.\n"
+"var new_stylebox_normal = $MyButton.get_stylebox(\"normal\").duplicate()\n"
+"new_stylebox_normal.border_width_top = 3\n"
+"new_stylebox_normal.border_color = Color(0, 1, 0.5)\n"
+"$MyButton.add_stylebox_override(\"normal\", new_stylebox_normal)\n"
+"# Remove the stylebox override.\n"
+"$MyButton.add_stylebox_override(\"normal\", null)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Control.xml:165
+msgid ""
+"Godot calls this method to test if [code]data[/code] from a control's "
+"[method get_drag_data] can be dropped at [code]position[/code]. "
+"[code]position[/code] is local to this control.\n"
+"This method should only be used to test the data. Process the data in "
+"[method drop_data].\n"
+"[codeblock]\n"
+"func can_drop_data(position, data):\n"
+" # Check position if it is relevant to you\n"
+" # Otherwise, just check data\n"
+" return typeof(data) == TYPE_DICTIONARY and data.has(\"expected\")\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Control.xml:180
+msgid ""
+"Godot calls this method to pass you the [code]data[/code] from a control's "
+"[method get_drag_data] result. Godot first calls [method can_drop_data] to "
+"test if [code]data[/code] is allowed to drop at [code]position[/code] where "
+"[code]position[/code] is local to this control.\n"
+"[codeblock]\n"
+"func can_drop_data(position, data):\n"
+" return typeof(data) == TYPE_DICTIONARY and data.has(\"color\")\n"
+"\n"
+"func drop_data(position, data):\n"
+" color = data[\"color\"]\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Control.xml:193
+msgid ""
+"Finds the next (below in the tree) [Control] that can receive the focus."
+msgstr ""
+
+#: doc/classes/Control.xml:199
+msgid ""
+"Finds the previous (above in the tree) [Control] that can receive the focus."
+msgstr ""
+
+#: doc/classes/Control.xml:207
+msgid ""
+"Forces drag and bypasses [method get_drag_data] and [method "
+"set_drag_preview] by passing [code]data[/code] and [code]preview[/code]. "
+"Drag will start even if the mouse is neither over nor pressed on this "
+"control.\n"
+"The methods [method can_drop_data] and [method drop_data] must be "
+"implemented on controls that want to receive drop data."
+msgstr ""
+
+#: doc/classes/Control.xml:215
+msgid ""
+"Returns the anchor identified by [code]margin[/code] constant from [enum "
+"Margin] enum. A getter method for [member anchor_bottom], [member "
+"anchor_left], [member anchor_right] and [member anchor_top]."
+msgstr ""
+
+#: doc/classes/Control.xml:221
+msgid ""
+"Returns [member margin_left] and [member margin_top]. See also [member "
+"rect_position]."
+msgstr ""
+
+#: doc/classes/Control.xml:229
+msgid ""
+"Returns a [Color] from the first matching [Theme] in the tree if that "
+"[Theme] has a color item with the specified [code]name[/code] and "
+"[code]theme_type[/code]. If [code]theme_type[/code] is omitted the class "
+"name of the current control is used as the type. If the type is a class name "
+"its parent classes are also checked, in order of inheritance.\n"
+"For the current control its local overrides are considered first (see "
+"[method add_color_override]), then its assigned [member theme]. After the "
+"current control, each parent control and its assigned [member theme] are "
+"considered; controls without a [member theme] assigned are skipped. If no "
+"matching [Theme] is found in the tree, a custom project [Theme] (see [member "
+"ProjectSettings.gui/theme/custom]) and the default [Theme] are used.\n"
+"[codeblock]\n"
+"func _ready():\n"
+" # Get the font color defined for the current Control's class, if it "
+"exists.\n"
+" modulate = get_color(\"font_color\")\n"
+" # Get the font color defined for the Button class.\n"
+" modulate = get_color(\"font_color\", \"Button\")\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Control.xml:243
+msgid ""
+"Returns combined minimum size from [member rect_min_size] and [method "
+"get_minimum_size]."
+msgstr ""
+
+#: doc/classes/Control.xml:251
+msgid ""
+"Returns a constant from the first matching [Theme] in the tree if that "
+"[Theme] has a constant item with the specified [code]name[/code] and "
+"[code]theme_type[/code].\n"
+"See [method get_color] for details."
+msgstr ""
+
+#: doc/classes/Control.xml:259
+msgid ""
+"Returns the mouse cursor shape the control displays on mouse hover. See "
+"[enum CursorShape]."
+msgstr ""
+
+#: doc/classes/Control.xml:266
+msgid ""
+"Godot calls this method to get data that can be dragged and dropped onto "
+"controls that expect drop data. Returns [code]null[/code] if there is no "
+"data to drag. Controls that want to receive drop data should implement "
+"[method can_drop_data] and [method drop_data]. [code]position[/code] is "
+"local to this control. Drag may be forced with [method force_drag].\n"
+"A preview that will follow the mouse that should represent the data can be "
+"set with [method set_drag_preview]. A good time to set the preview is in "
+"this method.\n"
+"[codeblock]\n"
+"func get_drag_data(position):\n"
+" var mydata = make_data()\n"
+" set_drag_preview(make_preview(mydata))\n"
+" return mydata\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Control.xml:279
+msgid "Returns [member margin_right] and [member margin_bottom]."
+msgstr ""
+
+#: doc/classes/Control.xml:286
+msgid ""
+"Returns the focus neighbour identified by [code]margin[/code] constant from "
+"[enum Margin] enum. A getter method for [member focus_neighbour_bottom], "
+"[member focus_neighbour_left], [member focus_neighbour_right] and [member "
+"focus_neighbour_top]."
+msgstr ""
+
+#: doc/classes/Control.xml:292
+msgid ""
+"Returns the control that has the keyboard focus or [code]null[/code] if none."
+msgstr ""
+
+#: doc/classes/Control.xml:300
+msgid ""
+"Returns a [Font] from the first matching [Theme] in the tree if that [Theme] "
+"has a font item with the specified [code]name[/code] and [code]theme_type[/"
+"code].\n"
+"See [method get_color] for details."
+msgstr ""
+
+#: doc/classes/Control.xml:307
+msgid ""
+"Returns the position and size of the control relative to the top-left corner "
+"of the screen. See [member rect_position] and [member rect_size]."
+msgstr ""
+
+#: doc/classes/Control.xml:315
+msgid ""
+"Returns an icon from the first matching [Theme] in the tree if that [Theme] "
+"has an icon item with the specified [code]name[/code] and [code]theme_type[/"
+"code].\n"
+"See [method get_color] for details."
+msgstr ""
+
+#: doc/classes/Control.xml:323
+msgid ""
+"Returns the anchor identified by [code]margin[/code] constant from [enum "
+"Margin] enum. A getter method for [member margin_bottom], [member "
+"margin_left], [member margin_right] and [member margin_top]."
+msgstr ""
+
+#: doc/classes/Control.xml:329
+msgid "Returns the minimum size for this control. See [member rect_min_size]."
+msgstr ""
+
+#: doc/classes/Control.xml:335
+msgid "Returns the width/height occupied in the parent control."
+msgstr ""
+
+#: doc/classes/Control.xml:341
+msgid "Returns the parent control node."
+msgstr ""
+
+#: doc/classes/Control.xml:347
+msgid ""
+"Returns the position and size of the control relative to the top-left corner "
+"of the parent Control. See [member rect_position] and [member rect_size]."
+msgstr ""
+
+#: doc/classes/Control.xml:353
+msgid "Returns the rotation (in radians)."
+msgstr ""
+
+#: doc/classes/Control.xml:361
+msgid ""
+"Returns a [StyleBox] from the first matching [Theme] in the tree if that "
+"[Theme] has a stylebox item with the specified [code]name[/code] and "
+"[code]theme_type[/code].\n"
+"See [method get_color] for details."
+msgstr ""
+
+#: doc/classes/Control.xml:368
+msgid ""
+"Returns the default font from the first matching [Theme] in the tree if that "
+"[Theme] has a valid [member Theme.default_font] value.\n"
+"See [method get_color] for details."
+msgstr ""
+
+#: doc/classes/Control.xml:376
+msgid ""
+"Returns the tooltip, which will appear when the cursor is resting over this "
+"control. See [member hint_tooltip]."
+msgstr ""
+
+#: doc/classes/Control.xml:382
+msgid ""
+"Creates an [InputEventMouseButton] that attempts to click the control. If "
+"the event is received, the control acquires focus.\n"
+"[codeblock]\n"
+"func _process(delta):\n"
+" grab_click_focus() #when clicking another Control node, this node will "
+"be clicked instead\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Control.xml:392
+msgid ""
+"Steal the focus from another control and become the focused control (see "
+"[member focus_mode])."
+msgstr ""
+
+#: doc/classes/Control.xml:400
+msgid ""
+"Returns [code]true[/code] if there is a matching [Theme] in the tree that "
+"has a color item with the specified [code]name[/code] and [code]theme_type[/"
+"code].\n"
+"See [method get_color] for details."
+msgstr ""
+
+#: doc/classes/Control.xml:408
+msgid ""
+"Returns [code]true[/code] if there is a local override for a theme [Color] "
+"with the specified [code]name[/code] in this [Control] node.\n"
+"See [method add_color_override]."
+msgstr ""
+
+#: doc/classes/Control.xml:417
+msgid ""
+"Returns [code]true[/code] if there is a matching [Theme] in the tree that "
+"has a constant item with the specified [code]name[/code] and "
+"[code]theme_type[/code].\n"
+"See [method get_color] for details."
+msgstr ""
+
+#: doc/classes/Control.xml:425
+msgid ""
+"Returns [code]true[/code] if there is a local override for a theme constant "
+"with the specified [code]name[/code] in this [Control] node.\n"
+"See [method add_constant_override]."
+msgstr ""
+
+#: doc/classes/Control.xml:432
+msgid ""
+"Returns [code]true[/code] if this is the current focused control. See "
+"[member focus_mode]."
+msgstr ""
+
+#: doc/classes/Control.xml:440
+msgid ""
+"Returns [code]true[/code] if there is a matching [Theme] in the tree that "
+"has a font item with the specified [code]name[/code] and [code]theme_type[/"
+"code].\n"
+"See [method get_color] for details."
+msgstr ""
+
+#: doc/classes/Control.xml:448
+msgid ""
+"Returns [code]true[/code] if there is a local override for a theme [Font] "
+"with the specified [code]name[/code] in this [Control] node.\n"
+"See [method add_font_override]."
+msgstr ""
+
+#: doc/classes/Control.xml:457
+msgid ""
+"Returns [code]true[/code] if there is a matching [Theme] in the tree that "
+"has an icon item with the specified [code]name[/code] and [code]theme_type[/"
+"code].\n"
+"See [method get_color] for details."
+msgstr ""
+
+#: doc/classes/Control.xml:465
+msgid ""
+"Returns [code]true[/code] if there is a local override for a theme icon with "
+"the specified [code]name[/code] in this [Control] node.\n"
+"See [method add_icon_override]."
+msgstr ""
+
+#: doc/classes/Control.xml:473
+msgid ""
+"Virtual method to be implemented by the user. Returns whether the given "
+"[code]point[/code] is inside this control.\n"
+"If not overridden, default behavior is checking if the point is within "
+"control's Rect.\n"
+"[b]Note:[/b] If you want to check if a point is inside the control, you can "
+"use [code]get_rect().has_point(point)[/code]."
+msgstr ""
+
+#: doc/classes/Control.xml:482
+msgid ""
+"Returns [code]true[/code] if there is a local override for a theme shader "
+"with the specified [code]name[/code] in this [Control] node.\n"
+"See [method add_shader_override]."
+msgstr ""
+
+#: doc/classes/Control.xml:491
+msgid ""
+"Returns [code]true[/code] if there is a matching [Theme] in the tree that "
+"has a stylebox item with the specified [code]name[/code] and "
+"[code]theme_type[/code].\n"
+"See [method get_color] for details."
+msgstr ""
+
+#: doc/classes/Control.xml:499
+msgid ""
+"Returns [code]true[/code] if there is a local override for a theme "
+"[StyleBox] with the specified [code]name[/code] in this [Control] node.\n"
+"See [method add_stylebox_override]."
+msgstr ""
+
+#: doc/classes/Control.xml:506
+msgid ""
+"Invalidates the size cache in this node and in parent nodes up to toplevel. "
+"Intended to be used with [method get_minimum_size] when the return value is "
+"changed. Setting [member rect_min_size] directly calls this method "
+"automatically."
+msgstr ""
+
+#: doc/classes/Control.xml:512
+msgid ""
+"Give up the focus. No other control will be able to receive keyboard input."
+msgstr ""
+
+#: doc/classes/Control.xml:522
+msgid ""
+"Sets the anchor identified by [code]margin[/code] constant from [enum "
+"Margin] enum to value [code]anchor[/code]. A setter method for [member "
+"anchor_bottom], [member anchor_left], [member anchor_right] and [member "
+"anchor_top].\n"
+"If [code]keep_margin[/code] is [code]true[/code], margins aren't updated "
+"after this operation.\n"
+"If [code]push_opposite_anchor[/code] is [code]true[/code] and the opposite "
+"anchor overlaps this anchor, the opposite one will have its value "
+"overridden. For example, when setting left anchor to 1 and the right anchor "
+"has value of 0.5, the right anchor will also get value of 1. If "
+"[code]push_opposite_anchor[/code] was [code]false[/code], the left anchor "
+"would get value 0.5."
+msgstr ""
+
+#: doc/classes/Control.xml:534
+msgid ""
+"Works the same as [method set_anchor], but instead of [code]keep_margin[/"
+"code] argument and automatic update of margin, it allows to set the margin "
+"offset yourself (see [method set_margin])."
+msgstr ""
+
+#: doc/classes/Control.xml:543
+msgid ""
+"Sets both anchor preset and margin preset. See [method set_anchors_preset] "
+"and [method set_margins_preset]."
+msgstr ""
+
+#: doc/classes/Control.xml:551
+msgid ""
+"Sets the anchors to a [code]preset[/code] from [enum Control.LayoutPreset] "
+"enum. This is the code equivalent to using the Layout menu in the 2D "
+"editor.\n"
+"If [code]keep_margins[/code] is [code]true[/code], control's position will "
+"also be updated."
+msgstr ""
+
+#: doc/classes/Control.xml:559
+msgid ""
+"Sets [member margin_left] and [member margin_top] at the same time. "
+"Equivalent of changing [member rect_position]."
+msgstr ""
+
+#: doc/classes/Control.xml:566
+msgid ""
+"Forwards the handling of this control's drag and drop to [code]target[/code] "
+"control.\n"
+"Forwarding can be implemented in the target control similar to the methods "
+"[method get_drag_data], [method can_drop_data], and [method drop_data] but "
+"with two differences:\n"
+"1. The function name must be suffixed with [b]_fw[/b]\n"
+"2. The function must take an extra argument that is the control doing the "
+"forwarding\n"
+"[codeblock]\n"
+"# ThisControl.gd\n"
+"extends Control\n"
+"func _ready():\n"
+" set_drag_forwarding(target_control)\n"
+"\n"
+"# TargetControl.gd\n"
+"extends Control\n"
+"func can_drop_data_fw(position, data, from_control):\n"
+" return true\n"
+"\n"
+"func drop_data_fw(position, data, from_control):\n"
+" my_handle_data(data)\n"
+"\n"
+"func get_drag_data_fw(position, from_control):\n"
+" set_drag_preview(my_preview)\n"
+" return my_data()\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Control.xml:594
+msgid ""
+"Shows the given control at the mouse pointer. A good time to call this "
+"method is in [method get_drag_data]. The control must not be in the scene "
+"tree. You should not free the control, and you should not keep a reference "
+"to the control beyond the duration of the drag. It will be deleted "
+"automatically after the drag has ended.\n"
+"[codeblock]\n"
+"export (Color, RGBA) var color = Color(1, 0, 0, 1)\n"
+"\n"
+"func get_drag_data(position):\n"
+" # Use a control that is not in the tree\n"
+" var cpb = ColorPickerButton.new()\n"
+" cpb.color = color\n"
+" cpb.rect_size = Vector2(50, 50)\n"
+" set_drag_preview(cpb)\n"
+" return color\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Control.xml:612
+msgid "Sets [member margin_right] and [member margin_bottom] at the same time."
+msgstr ""
+
+#: doc/classes/Control.xml:620
+msgid ""
+"Sets the anchor identified by [code]margin[/code] constant from [enum "
+"Margin] enum to [Control] at [code]neighbor[/code] node path. A setter "
+"method for [member focus_neighbour_bottom], [member focus_neighbour_left], "
+"[member focus_neighbour_right] and [member focus_neighbour_top]."
+msgstr ""
+
+#: doc/classes/Control.xml:628
+msgid ""
+"Sets the [member rect_global_position] to given [code]position[/code].\n"
+"If [code]keep_margins[/code] is [code]true[/code], control's anchors will be "
+"updated instead of margins."
+msgstr ""
+
+#: doc/classes/Control.xml:637
+msgid ""
+"Sets the margin identified by [code]margin[/code] constant from [enum "
+"Margin] enum to given [code]offset[/code]. A setter method for [member "
+"margin_bottom], [member margin_left], [member margin_right] and [member "
+"margin_top]."
+msgstr ""
+
+#: doc/classes/Control.xml:646
+msgid ""
+"Sets the margins to a [code]preset[/code] from [enum Control.LayoutPreset] "
+"enum. This is the code equivalent to using the Layout menu in the 2D "
+"editor.\n"
+"Use parameter [code]resize_mode[/code] with constants from [enum Control."
+"LayoutPresetMode] to better determine the resulting size of the [Control]. "
+"Constant size will be ignored if used with presets that change size, e.g. "
+"[code]PRESET_LEFT_WIDE[/code].\n"
+"Use parameter [code]margin[/code] to determine the gap between the [Control] "
+"and the edges."
+msgstr ""
+
+#: doc/classes/Control.xml:656
+msgid ""
+"Sets the [member rect_position] to given [code]position[/code].\n"
+"If [code]keep_margins[/code] is [code]true[/code], control's anchors will be "
+"updated instead of margins."
+msgstr ""
+
+#: doc/classes/Control.xml:664
+msgid "Sets the rotation (in radians)."
+msgstr ""
+
+#: doc/classes/Control.xml:672
+msgid ""
+"Sets the size (see [member rect_size]).\n"
+"If [code]keep_margins[/code] is [code]true[/code], control's anchors will be "
+"updated instead of margins."
+msgstr ""
+
+#: doc/classes/Control.xml:680
+msgid ""
+"Displays a control as modal. Control must be a subwindow. Modal controls "
+"capture the input signals until closed or the area outside them is accessed. "
+"When a modal control loses focus, or the ESC key is pressed, they "
+"automatically hide. Modal controls are used extensively for popup dialogs "
+"and menus.\n"
+"If [code]exclusive[/code] is [code]true[/code], other controls will not "
+"receive input and clicking outside this control will not close it."
+msgstr ""
+
+#: doc/classes/Control.xml:688
+msgid ""
+"Moves the mouse cursor to [code]to_position[/code], relative to [member "
+"rect_position] of this [Control]."
+msgstr ""
+
+#: doc/classes/Control.xml:694
+msgid ""
+"Anchors the bottom edge of the node to the origin, the center, or the end of "
+"its parent control. It changes how the bottom margin updates when the node "
+"moves or changes size. You can use one of the [enum Anchor] constants for "
+"convenience."
+msgstr ""
+
+#: doc/classes/Control.xml:697
+msgid ""
+"Anchors the left edge of the node to the origin, the center or the end of "
+"its parent control. It changes how the left margin updates when the node "
+"moves or changes size. You can use one of the [enum Anchor] constants for "
+"convenience."
+msgstr ""
+
+#: doc/classes/Control.xml:700
+msgid ""
+"Anchors the right edge of the node to the origin, the center or the end of "
+"its parent control. It changes how the right margin updates when the node "
+"moves or changes size. You can use one of the [enum Anchor] constants for "
+"convenience."
+msgstr ""
+
+#: doc/classes/Control.xml:703
+msgid ""
+"Anchors the top edge of the node to the origin, the center or the end of its "
+"parent control. It changes how the top margin updates when the node moves or "
+"changes size. You can use one of the [enum Anchor] constants for convenience."
+msgstr ""
+
+#: doc/classes/Control.xml:706
+msgid ""
+"The focus access mode for the control (None, Click or All). Only one Control "
+"can be focused at the same time, and it will receive keyboard signals."
+msgstr ""
+
+#: doc/classes/Control.xml:709
+msgid ""
+"Tells Godot which node it should give keyboard focus to if the user presses "
+"the down arrow on the keyboard or down on a gamepad by default. You can "
+"change the key by editing the [code]ui_down[/code] input action. The node "
+"must be a [Control]. If this property is not set, Godot will give focus to "
+"the closest [Control] to the bottom of this one."
+msgstr ""
+
+#: doc/classes/Control.xml:712
+msgid ""
+"Tells Godot which node it should give keyboard focus to if the user presses "
+"the left arrow on the keyboard or left on a gamepad by default. You can "
+"change the key by editing the [code]ui_left[/code] input action. The node "
+"must be a [Control]. If this property is not set, Godot will give focus to "
+"the closest [Control] to the left of this one."
+msgstr ""
+
+#: doc/classes/Control.xml:715
+msgid ""
+"Tells Godot which node it should give keyboard focus to if the user presses "
+"the right arrow on the keyboard or right on a gamepad by default. You can "
+"change the key by editing the [code]ui_right[/code] input action. The node "
+"must be a [Control]. If this property is not set, Godot will give focus to "
+"the closest [Control] to the bottom of this one."
+msgstr ""
+
+#: doc/classes/Control.xml:718
+msgid ""
+"Tells Godot which node it should give keyboard focus to if the user presses "
+"the top arrow on the keyboard or top on a gamepad by default. You can change "
+"the key by editing the [code]ui_top[/code] input action. The node must be a "
+"[Control]. If this property is not set, Godot will give focus to the closest "
+"[Control] to the bottom of this one."
+msgstr ""
+
+#: doc/classes/Control.xml:721
+msgid ""
+"Tells Godot which node it should give keyboard focus to if the user presses "
+"Tab on a keyboard by default. You can change the key by editing the "
+"[code]ui_focus_next[/code] input action.\n"
+"If this property is not set, Godot will select a \"best guess\" based on "
+"surrounding nodes in the scene tree."
+msgstr ""
+
+#: doc/classes/Control.xml:725
+msgid ""
+"Tells Godot which node it should give keyboard focus to if the user presses "
+"Shift+Tab on a keyboard by default. You can change the key by editing the "
+"[code]ui_focus_prev[/code] input action.\n"
+"If this property is not set, Godot will select a \"best guess\" based on "
+"surrounding nodes in the scene tree."
+msgstr ""
+
+#: doc/classes/Control.xml:729
+msgid ""
+"Controls the direction on the horizontal axis in which the control should "
+"grow if its horizontal minimum size is changed to be greater than its "
+"current size, as the control always has to be at least the minimum size."
+msgstr ""
+
+#: doc/classes/Control.xml:732
+msgid ""
+"Controls the direction on the vertical axis in which the control should grow "
+"if its vertical minimum size is changed to be greater than its current size, "
+"as the control always has to be at least the minimum size."
+msgstr ""
+
+#: doc/classes/Control.xml:735
+msgid ""
+"Changes the tooltip text. The tooltip appears when the user's mouse cursor "
+"stays idle over this control for a few moments, provided that the [member "
+"mouse_filter] property is not [constant MOUSE_FILTER_IGNORE]. You can change "
+"the time required for the tooltip to appear with [code]gui/timers/"
+"tooltip_delay_sec[/code] option in Project Settings.\n"
+"The tooltip popup will use either a default implementation, or a custom one "
+"that you can provide by overriding [method _make_custom_tooltip]. The "
+"default tooltip includes a [PopupPanel] and [Label] whose theme properties "
+"can be customized using [Theme] methods with the [code]\"TooltipPanel\"[/"
+"code] and [code]\"TooltipLabel\"[/code] respectively. For example:\n"
+"[codeblock]\n"
+"var style_box = StyleBoxFlat.new()\n"
+"style_box.set_bg_color(Color(1, 1, 0))\n"
+"style_box.set_border_width_all(2)\n"
+"# We assume here that the `theme` property has been assigned a custom Theme "
+"beforehand.\n"
+"theme.set_stylebox(\"panel\", \"TooltipPanel\", style_box)\n"
+"theme.set_color(\"font_color\", \"TooltipLabel\", Color(0, 1, 1))\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Control.xml:747
+msgid ""
+"Enables whether input should propagate when you close the control as modal.\n"
+"If [code]false[/code], stops event handling at the viewport input event "
+"handling. The viewport first hides the modal and after marks the input as "
+"handled."
+msgstr ""
+
+#: doc/classes/Control.xml:751
+msgid ""
+"Distance between the node's bottom edge and its parent control, based on "
+"[member anchor_bottom].\n"
+"Margins are often controlled by one or multiple parent [Container] nodes, so "
+"you should not modify them manually if your node is a direct child of a "
+"[Container]. Margins update automatically when you move or resize the node."
+msgstr ""
+
+#: doc/classes/Control.xml:755
+msgid ""
+"Distance between the node's left edge and its parent control, based on "
+"[member anchor_left].\n"
+"Margins are often controlled by one or multiple parent [Container] nodes, so "
+"you should not modify them manually if your node is a direct child of a "
+"[Container]. Margins update automatically when you move or resize the node."
+msgstr ""
+
+#: doc/classes/Control.xml:759
+msgid ""
+"Distance between the node's right edge and its parent control, based on "
+"[member anchor_right].\n"
+"Margins are often controlled by one or multiple parent [Container] nodes, so "
+"you should not modify them manually if your node is a direct child of a "
+"[Container]. Margins update automatically when you move or resize the node."
+msgstr ""
+
+#: doc/classes/Control.xml:763
+msgid ""
+"Distance between the node's top edge and its parent control, based on "
+"[member anchor_top].\n"
+"Margins are often controlled by one or multiple parent [Container] nodes, so "
+"you should not modify them manually if your node is a direct child of a "
+"[Container]. Margins update automatically when you move or resize the node."
+msgstr ""
+
+#: doc/classes/Control.xml:767
+msgid ""
+"The default cursor shape for this control. Useful for Godot plugins and "
+"applications or games that use the system's mouse cursors.\n"
+"[b]Note:[/b] On Linux, shapes may vary depending on the cursor theme of the "
+"system."
+msgstr ""
+
+#: doc/classes/Control.xml:771
+msgid ""
+"Controls whether the control will be able to receive mouse button input "
+"events through [method _gui_input] and how these events should be handled. "
+"Also controls whether the control can receive the [signal mouse_entered], "
+"and [signal mouse_exited] signals. See the constants to learn what each does."
+msgstr ""
+
+#: doc/classes/Control.xml:774
+msgid ""
+"Enables whether rendering of [CanvasItem] based children should be clipped "
+"to this control's rectangle. If [code]true[/code], parts of a child which "
+"would be visibly outside of this control's rectangle will not be rendered."
+msgstr ""
+
+#: doc/classes/Control.xml:777
+msgid ""
+"The node's global position, relative to the world (usually to the top-left "
+"corner of the window)."
+msgstr ""
+
+#: doc/classes/Control.xml:780
+msgid ""
+"The minimum size of the node's bounding rectangle. If you set it to a value "
+"greater than (0, 0), the node's bounding rectangle will always have at least "
+"this size, even if its content is smaller. If it's set to (0, 0), the node "
+"sizes automatically to fit its content, be it a texture or child nodes."
+msgstr ""
+
+#: doc/classes/Control.xml:783
+msgid ""
+"By default, the node's pivot is its top-left corner. When you change its "
+"[member rect_scale], it will scale around this pivot. Set this property to "
+"[member rect_size] / 2 to center the pivot in the node's rectangle."
+msgstr ""
+
+#: doc/classes/Control.xml:786
+msgid ""
+"The node's position, relative to its parent. It corresponds to the "
+"rectangle's top-left corner. The property is not affected by [member "
+"rect_pivot_offset]."
+msgstr ""
+
+#: doc/classes/Control.xml:789
+msgid ""
+"The node's rotation around its pivot, in degrees. See [member "
+"rect_pivot_offset] to change the pivot's position."
+msgstr ""
+
+#: doc/classes/Control.xml:792
+msgid ""
+"The node's scale, relative to its [member rect_size]. Change this property "
+"to scale the node around its [member rect_pivot_offset]. The Control's "
+"[member hint_tooltip] will also scale according to this value.\n"
+"[b]Note:[/b] This property is mainly intended to be used for animation "
+"purposes. Text inside the Control will look pixelated or blurry when the "
+"Control is scaled. To support multiple resolutions in your project, use an "
+"appropriate viewport stretch mode as described in the [url=https://docs."
+"godotengine.org/en/3.4/tutorials/viewports/multiple_resolutions."
+"html]documentation[/url] instead of scaling Controls individually.\n"
+"[b]Note:[/b] If the Control node is a child of a [Container] node, the scale "
+"will be reset to [code]Vector2(1, 1)[/code] when the scene is instanced. To "
+"set the Control's scale when it's instanced, wait for one frame using "
+"[code]yield(get_tree(), \"idle_frame\")[/code] then set its [member "
+"rect_scale] property."
+msgstr ""
+
+#: doc/classes/Control.xml:797
+msgid ""
+"The size of the node's bounding rectangle, in pixels. [Container] nodes "
+"update this property automatically."
+msgstr ""
+
+#: doc/classes/Control.xml:800
+msgid ""
+"Tells the parent [Container] nodes how they should resize and place the node "
+"on the X axis. Use one of the [enum SizeFlags] constants to change the "
+"flags. See the constants to learn what each does."
+msgstr ""
+
+#: doc/classes/Control.xml:803
+msgid ""
+"If the node and at least one of its neighbours uses the [constant "
+"SIZE_EXPAND] size flag, the parent [Container] will let it take more or less "
+"space depending on this property. If this node has a stretch ratio of 2 and "
+"its neighbour a ratio of 1, this node will take two thirds of the available "
+"space."
+msgstr ""
+
+#: doc/classes/Control.xml:806
+msgid ""
+"Tells the parent [Container] nodes how they should resize and place the node "
+"on the Y axis. Use one of the [enum SizeFlags] constants to change the "
+"flags. See the constants to learn what each does."
+msgstr ""
+
+#: doc/classes/Control.xml:809
+msgid ""
+"Changing this property replaces the current [Theme] resource this node and "
+"all its [Control] children use."
+msgstr ""
+
+#: doc/classes/Control.xml:815
+msgid "Emitted when the node gains keyboard focus."
+msgstr ""
+
+#: doc/classes/Control.xml:820
+msgid "Emitted when the node loses keyboard focus."
+msgstr ""
+
+#: doc/classes/Control.xml:826
+msgid "Emitted when the node receives an [InputEvent]."
+msgstr ""
+
+#: doc/classes/Control.xml:831
+msgid "Emitted when the node's minimum size changes."
+msgstr ""
+
+#: doc/classes/Control.xml:836
+msgid "Emitted when a modal [Control] is closed. See [method show_modal]."
+msgstr ""
+
+#: doc/classes/Control.xml:841
+msgid ""
+"Emitted when the mouse enters the control's [code]Rect[/code] area, provided "
+"its [member mouse_filter] lets the event reach it.\n"
+"[b]Note:[/b] [signal mouse_entered] will not be emitted if the mouse enters "
+"a child [Control] node before entering the parent's [code]Rect[/code] area, "
+"at least until the mouse is moved to reach the parent's [code]Rect[/code] "
+"area."
+msgstr ""
+
+#: doc/classes/Control.xml:847
+msgid ""
+"Emitted when the mouse leaves the control's [code]Rect[/code] area, provided "
+"its [member mouse_filter] lets the event reach it.\n"
+"[b]Note:[/b] [signal mouse_exited] will be emitted if the mouse enters a "
+"child [Control] node, even if the mouse cursor is still inside the parent's "
+"[code]Rect[/code] area."
+msgstr ""
+
+#: doc/classes/Control.xml:853
+msgid "Emitted when the control changes size."
+msgstr ""
+
+#: doc/classes/Control.xml:858
+msgid ""
+"Emitted when one of the size flags changes. See [member "
+"size_flags_horizontal] and [member size_flags_vertical]."
+msgstr ""
+
+#: doc/classes/Control.xml:864
+msgid "The node cannot grab focus. Use with [member focus_mode]."
+msgstr ""
+
+#: doc/classes/Control.xml:867
+msgid ""
+"The node can only grab focus on mouse clicks. Use with [member focus_mode]."
+msgstr ""
+
+#: doc/classes/Control.xml:870
+msgid ""
+"The node can grab focus on mouse click or using the arrows and the Tab keys "
+"on the keyboard. Use with [member focus_mode]."
+msgstr ""
+
+#: doc/classes/Control.xml:873
+msgid ""
+"Sent when the node changes size. Use [member rect_size] to get the new size."
+msgstr ""
+
+#: doc/classes/Control.xml:876
+msgid "Sent when the mouse pointer enters the node."
+msgstr ""
+
+#: doc/classes/Control.xml:879
+msgid "Sent when the mouse pointer exits the node."
+msgstr ""
+
+#: doc/classes/Control.xml:882
+msgid "Sent when the node grabs focus."
+msgstr ""
+
+#: doc/classes/Control.xml:885
+msgid "Sent when the node loses focus."
+msgstr ""
+
+#: doc/classes/Control.xml:888
+msgid ""
+"Sent when the node's [member theme] changes, right before Godot redraws the "
+"control. Happens when you call one of the [code]add_*_override[/code] "
+"methods."
+msgstr ""
+
+#: doc/classes/Control.xml:891
+msgid "Sent when an open modal dialog closes. See [method show_modal]."
+msgstr ""
+
+#: doc/classes/Control.xml:894
+msgid ""
+"Sent when this node is inside a [ScrollContainer] which has begun being "
+"scrolled."
+msgstr ""
+
+#: doc/classes/Control.xml:897
+msgid ""
+"Sent when this node is inside a [ScrollContainer] which has stopped being "
+"scrolled."
+msgstr ""
+
+#: doc/classes/Control.xml:900
+msgid ""
+"Show the system's arrow mouse cursor when the user hovers the node. Use with "
+"[member mouse_default_cursor_shape]."
+msgstr ""
+
+#: doc/classes/Control.xml:903
+msgid ""
+"Show the system's I-beam mouse cursor when the user hovers the node. The I-"
+"beam pointer has a shape similar to \"I\". It tells the user they can "
+"highlight or insert text."
+msgstr ""
+
+#: doc/classes/Control.xml:906
+msgid ""
+"Show the system's pointing hand mouse cursor when the user hovers the node."
+msgstr ""
+
+#: doc/classes/Control.xml:909
+msgid "Show the system's cross mouse cursor when the user hovers the node."
+msgstr ""
+
+#: doc/classes/Control.xml:912
+msgid ""
+"Show the system's wait mouse cursor, often an hourglass, when the user "
+"hovers the node."
+msgstr ""
+
+#: doc/classes/Control.xml:915
+msgid ""
+"Show the system's busy mouse cursor when the user hovers the node. Often an "
+"hourglass."
+msgstr ""
+
+#: doc/classes/Control.xml:918
+msgid ""
+"Show the system's drag mouse cursor, often a closed fist or a cross symbol, "
+"when the user hovers the node. It tells the user they're currently dragging "
+"an item, like a node in the Scene dock."
+msgstr ""
+
+#: doc/classes/Control.xml:921
+msgid ""
+"Show the system's drop mouse cursor when the user hovers the node. It can be "
+"an open hand. It tells the user they can drop an item they're currently "
+"grabbing, like a node in the Scene dock."
+msgstr ""
+
+#: doc/classes/Control.xml:924
+msgid ""
+"Show the system's forbidden mouse cursor when the user hovers the node. "
+"Often a crossed circle."
+msgstr ""
+
+#: doc/classes/Control.xml:927
+msgid ""
+"Show the system's vertical resize mouse cursor when the user hovers the "
+"node. A double-headed vertical arrow. It tells the user they can resize the "
+"window or the panel vertically."
+msgstr ""
+
+#: doc/classes/Control.xml:930
+msgid ""
+"Show the system's horizontal resize mouse cursor when the user hovers the "
+"node. A double-headed horizontal arrow. It tells the user they can resize "
+"the window or the panel horizontally."
+msgstr ""
+
+#: doc/classes/Control.xml:933
+msgid ""
+"Show the system's window resize mouse cursor when the user hovers the node. "
+"The cursor is a double-headed arrow that goes from the bottom left to the "
+"top right. It tells the user they can resize the window or the panel both "
+"horizontally and vertically."
+msgstr ""
+
+#: doc/classes/Control.xml:936
+msgid ""
+"Show the system's window resize mouse cursor when the user hovers the node. "
+"The cursor is a double-headed arrow that goes from the top left to the "
+"bottom right, the opposite of [constant CURSOR_BDIAGSIZE]. It tells the user "
+"they can resize the window or the panel both horizontally and vertically."
+msgstr ""
+
+#: doc/classes/Control.xml:939
+msgid ""
+"Show the system's move mouse cursor when the user hovers the node. It shows "
+"2 double-headed arrows at a 90 degree angle. It tells the user they can move "
+"a UI element freely."
+msgstr ""
+
+#: doc/classes/Control.xml:942
+msgid ""
+"Show the system's vertical split mouse cursor when the user hovers the node. "
+"On Windows, it's the same as [constant CURSOR_VSIZE]."
+msgstr ""
+
+#: doc/classes/Control.xml:945
+msgid ""
+"Show the system's horizontal split mouse cursor when the user hovers the "
+"node. On Windows, it's the same as [constant CURSOR_HSIZE]."
+msgstr ""
+
+#: doc/classes/Control.xml:948
+msgid ""
+"Show the system's help mouse cursor when the user hovers the node, a "
+"question mark."
+msgstr ""
+
+#: doc/classes/Control.xml:951
+msgid ""
+"Snap all 4 anchors to the top-left of the parent control's bounds. Use with "
+"[method set_anchors_preset]."
+msgstr ""
+
+#: doc/classes/Control.xml:954
+msgid ""
+"Snap all 4 anchors to the top-right of the parent control's bounds. Use with "
+"[method set_anchors_preset]."
+msgstr ""
+
+#: doc/classes/Control.xml:957
+msgid ""
+"Snap all 4 anchors to the bottom-left of the parent control's bounds. Use "
+"with [method set_anchors_preset]."
+msgstr ""
+
+#: doc/classes/Control.xml:960
+msgid ""
+"Snap all 4 anchors to the bottom-right of the parent control's bounds. Use "
+"with [method set_anchors_preset]."
+msgstr ""
+
+#: doc/classes/Control.xml:963
+msgid ""
+"Snap all 4 anchors to the center of the left edge of the parent control's "
+"bounds. Use with [method set_anchors_preset]."
+msgstr ""
+
+#: doc/classes/Control.xml:966
+msgid ""
+"Snap all 4 anchors to the center of the top edge of the parent control's "
+"bounds. Use with [method set_anchors_preset]."
+msgstr ""
+
+#: doc/classes/Control.xml:969
+msgid ""
+"Snap all 4 anchors to the center of the right edge of the parent control's "
+"bounds. Use with [method set_anchors_preset]."
+msgstr ""
+
+#: doc/classes/Control.xml:972
+msgid ""
+"Snap all 4 anchors to the center of the bottom edge of the parent control's "
+"bounds. Use with [method set_anchors_preset]."
+msgstr ""
+
+#: doc/classes/Control.xml:975
+msgid ""
+"Snap all 4 anchors to the center of the parent control's bounds. Use with "
+"[method set_anchors_preset]."
+msgstr ""
+
+#: doc/classes/Control.xml:978
+msgid ""
+"Snap all 4 anchors to the left edge of the parent control. The left margin "
+"becomes relative to the left edge and the top margin relative to the top "
+"left corner of the node's parent. Use with [method set_anchors_preset]."
+msgstr ""
+
+#: doc/classes/Control.xml:981
+msgid ""
+"Snap all 4 anchors to the top edge of the parent control. The left margin "
+"becomes relative to the top left corner, the top margin relative to the top "
+"edge, and the right margin relative to the top right corner of the node's "
+"parent. Use with [method set_anchors_preset]."
+msgstr ""
+
+#: doc/classes/Control.xml:984
+msgid ""
+"Snap all 4 anchors to the right edge of the parent control. The right margin "
+"becomes relative to the right edge and the top margin relative to the top "
+"right corner of the node's parent. Use with [method set_anchors_preset]."
+msgstr ""
+
+#: doc/classes/Control.xml:987
+msgid ""
+"Snap all 4 anchors to the bottom edge of the parent control. The left margin "
+"becomes relative to the bottom left corner, the bottom margin relative to "
+"the bottom edge, and the right margin relative to the bottom right corner of "
+"the node's parent. Use with [method set_anchors_preset]."
+msgstr ""
+
+#: doc/classes/Control.xml:990
+msgid ""
+"Snap all 4 anchors to a vertical line that cuts the parent control in half. "
+"Use with [method set_anchors_preset]."
+msgstr ""
+
+#: doc/classes/Control.xml:993
+msgid ""
+"Snap all 4 anchors to a horizontal line that cuts the parent control in "
+"half. Use with [method set_anchors_preset]."
+msgstr ""
+
+#: doc/classes/Control.xml:996
+msgid ""
+"Snap all 4 anchors to the respective corners of the parent control. Set all "
+"4 margins to 0 after you applied this preset and the [Control] will fit its "
+"parent control. This is equivalent to the \"Full Rect\" layout option in the "
+"editor. Use with [method set_anchors_preset]."
+msgstr ""
+
+#: doc/classes/Control.xml:999
+msgid "The control will be resized to its minimum size."
+msgstr ""
+
+#: doc/classes/Control.xml:1002
+msgid "The control's width will not change."
+msgstr ""
+
+#: doc/classes/Control.xml:1005
+msgid "The control's height will not change."
+msgstr ""
+
+#: doc/classes/Control.xml:1008
+msgid "The control's size will not change."
+msgstr ""
+
+#: doc/classes/Control.xml:1011
+msgid ""
+"Tells the parent [Container] to expand the bounds of this node to fill all "
+"the available space without pushing any other node. Use with [member "
+"size_flags_horizontal] and [member size_flags_vertical]."
+msgstr ""
+
+#: doc/classes/Control.xml:1014
+msgid ""
+"Tells the parent [Container] to let this node take all the available space "
+"on the axis you flag. If multiple neighboring nodes are set to expand, "
+"they'll share the space based on their stretch ratio. See [member "
+"size_flags_stretch_ratio]. Use with [member size_flags_horizontal] and "
+"[member size_flags_vertical]."
+msgstr ""
+
+#: doc/classes/Control.xml:1017
+msgid ""
+"Sets the node's size flags to both fill and expand. See the 2 constants "
+"above for more information."
+msgstr ""
+
+#: doc/classes/Control.xml:1020
+msgid ""
+"Tells the parent [Container] to center the node in itself. It centers the "
+"control based on its bounding box, so it doesn't work with the fill or "
+"expand size flags. Use with [member size_flags_horizontal] and [member "
+"size_flags_vertical]."
+msgstr ""
+
+#: doc/classes/Control.xml:1023
+msgid ""
+"Tells the parent [Container] to align the node with its end, either the "
+"bottom or the right edge. It doesn't work with the fill or expand size "
+"flags. Use with [member size_flags_horizontal] and [member "
+"size_flags_vertical]."
+msgstr ""
+
+#: doc/classes/Control.xml:1026
+msgid ""
+"The control will receive mouse button input events through [method "
+"_gui_input] if clicked on. And the control will receive the [signal "
+"mouse_entered] and [signal mouse_exited] signals. These events are "
+"automatically marked as handled, and they will not propagate further to "
+"other controls. This also results in blocking signals in other controls."
+msgstr ""
+
+#: doc/classes/Control.xml:1029
+msgid ""
+"The control will receive mouse button input events through [method "
+"_gui_input] if clicked on. And the control will receive the [signal "
+"mouse_entered] and [signal mouse_exited] signals. If this control does not "
+"handle the event, the parent control (if any) will be considered, and so on "
+"until there is no more parent control to potentially handle it. This also "
+"allows signals to fire in other controls. Even if no control handled it at "
+"all, the event will still be handled automatically, so unhandled input will "
+"not be fired."
+msgstr ""
+
+#: doc/classes/Control.xml:1032
+msgid ""
+"The control will not receive mouse button input events through [method "
+"_gui_input]. The control will also not receive the [signal mouse_entered] "
+"nor [signal mouse_exited] signals. This will not block other controls from "
+"receiving these events or firing the signals. Ignored events will not be "
+"handled automatically."
+msgstr ""
+
+#: doc/classes/Control.xml:1035
+msgid ""
+"The control will grow to the left or top to make up if its minimum size is "
+"changed to be greater than its current size on the respective axis."
+msgstr ""
+
+#: doc/classes/Control.xml:1038
+msgid ""
+"The control will grow to the right or bottom to make up if its minimum size "
+"is changed to be greater than its current size on the respective axis."
+msgstr ""
+
+#: doc/classes/Control.xml:1041
+msgid ""
+"The control will grow in both directions equally to make up if its minimum "
+"size is changed to be greater than its current size."
+msgstr ""
+
+#: doc/classes/Control.xml:1044
+msgid ""
+"Snaps one of the 4 anchor's sides to the origin of the node's [code]Rect[/"
+"code], in the top left. Use it with one of the [code]anchor_*[/code] member "
+"variables, like [member anchor_left]. To change all 4 anchors at once, use "
+"[method set_anchors_preset]."
+msgstr ""
+
+#: doc/classes/Control.xml:1047
+msgid ""
+"Snaps one of the 4 anchor's sides to the end of the node's [code]Rect[/"
+"code], in the bottom right. Use it with one of the [code]anchor_*[/code] "
+"member variables, like [member anchor_left]. To change all 4 anchors at "
+"once, use [method set_anchors_preset]."
+msgstr ""
+
+#: doc/classes/ConvexPolygonShape.xml:4
+msgid "Convex polygon shape for 3D physics."
+msgstr ""
+
+#: doc/classes/ConvexPolygonShape.xml:7
+msgid ""
+"Convex polygon shape resource, which can be added to a [PhysicsBody] or area."
+msgstr ""
+
+#: doc/classes/ConvexPolygonShape.xml:16
+msgid "The list of 3D points forming the convex polygon shape."
+msgstr ""
+
+#: doc/classes/ConvexPolygonShape2D.xml:4
+msgid "Convex polygon shape for 2D physics."
+msgstr ""
+
+#: doc/classes/ConvexPolygonShape2D.xml:7
+msgid ""
+"Convex polygon shape for 2D physics. A convex polygon, whatever its shape, "
+"is internally decomposed into as many convex polygons as needed to ensure "
+"all collision checks against it are always done on convex polygons (which "
+"are faster to check).\n"
+"The main difference between a [ConvexPolygonShape2D] and a "
+"[ConcavePolygonShape2D] is that a concave polygon assumes it is concave and "
+"uses a more complex method of collision detection, and a convex one forces "
+"itself to be convex in order to speed up collision detection."
+msgstr ""
+
+#: doc/classes/ConvexPolygonShape2D.xml:17
+msgid ""
+"Based on the set of points provided, this creates and assigns the [member "
+"points] property using the convex hull algorithm. Removing all unneeded "
+"points. See [method Geometry.convex_hull_2d] for details."
+msgstr ""
+
+#: doc/classes/ConvexPolygonShape2D.xml:23
+msgid ""
+"The polygon's list of vertices. Can be in either clockwise or "
+"counterclockwise order."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:4
+msgid "CPU-based 3D particle emitter."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:7
+msgid ""
+"CPU-based 3D particle node used to create a variety of particle systems and "
+"effects.\n"
+"See also [Particles], which provides the same functionality with hardware "
+"acceleration, but may not run on older devices.\n"
+"[b]Note:[/b] Unlike [Particles], the visibility rect is generated on-the-fly "
+"and doesn't need to be configured by the user."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:18
+msgid ""
+"Sets this node's properties to match a given [Particles] node with an "
+"assigned [ParticlesMaterial]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:25 doc/classes/CPUParticles2D.xml:26
+msgid "Returns the base value of the parameter specified by [enum Parameter]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:32 doc/classes/CPUParticles2D.xml:33
+msgid "Returns the [Curve] of the parameter specified by [enum Parameter]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:39 doc/classes/CPUParticles2D.xml:40
+msgid ""
+"Returns the randomness factor of the parameter specified by [enum Parameter]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:46 doc/classes/CPUParticles2D.xml:47
+msgid ""
+"Returns the enabled state of the given flag (see [enum Flags] for options)."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:52 doc/classes/CPUParticles2D.xml:53
+msgid "Restarts the particle emitter."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:60 doc/classes/CPUParticles2D.xml:61
+msgid "Sets the base value of the parameter specified by [enum Parameter]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:68 doc/classes/CPUParticles2D.xml:69
+msgid "Sets the [Curve] of the parameter specified by [enum Parameter]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:76 doc/classes/CPUParticles2D.xml:77
+msgid ""
+"Sets the randomness factor of the parameter specified by [enum Parameter]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:84 doc/classes/CPUParticles2D.xml:85
+msgid "Enables or disables the given flag (see [enum Flags] for options)."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:90 doc/classes/CPUParticles2D.xml:91
+#: doc/classes/Particles.xml:47 doc/classes/Particles2D.xml:33
+msgid ""
+"The number of particles emitted in one emission cycle (corresponding to the "
+"[member lifetime]).\n"
+"[b]Note:[/b] Changing [member amount] will reset the particle emission, "
+"therefore removing all particles that were already emitted before changing "
+"[member amount]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:94 doc/classes/CPUParticles2D.xml:95
+msgid "Initial rotation applied to each particle, in degrees."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:97 doc/classes/CPUParticles2D.xml:98
+msgid "Each particle's rotation will be animated along this [Curve]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:100 doc/classes/CPUParticles2D.xml:101
+#: doc/classes/ParticlesMaterial.xml:84
+msgid "Rotation randomness ratio."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:103 doc/classes/CPUParticles2D.xml:104
+msgid ""
+"Initial angular velocity applied to each particle. Sets the speed of "
+"rotation of the particle."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:106 doc/classes/CPUParticles2D.xml:107
+msgid "Each particle's angular velocity will vary along this [Curve]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:109 doc/classes/CPUParticles2D.xml:110
+#: doc/classes/ParticlesMaterial.xml:94
+msgid "Angular velocity randomness ratio."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:112 doc/classes/CPUParticles2D.xml:113
+#: doc/classes/ParticlesMaterial.xml:97
+msgid "Particle animation offset."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:115 doc/classes/CPUParticles2D.xml:116
+msgid "Each particle's animation offset will vary along this [Curve]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:118 doc/classes/CPUParticles2D.xml:119
+#: doc/classes/ParticlesMaterial.xml:103
+msgid "Animation offset randomness ratio."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:121 doc/classes/CPUParticles2D.xml:122
+#: doc/classes/ParticlesMaterial.xml:106
+msgid "Particle animation speed."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:124 doc/classes/CPUParticles2D.xml:125
+msgid "Each particle's animation speed will vary along this [Curve]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:127 doc/classes/CPUParticles2D.xml:128
+#: doc/classes/ParticlesMaterial.xml:112
+msgid "Animation speed randomness ratio."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:130
+msgid ""
+"Each particle's initial color. To have particle display color in a "
+"[SpatialMaterial] make sure to set [member SpatialMaterial."
+"vertex_color_use_as_albedo] to [code]true[/code]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:133 doc/classes/ParticlesMaterial.xml:118
+msgid ""
+"Each particle's color will vary along this [GradientTexture] over its "
+"lifetime (multiplied with [member color])."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:136 doc/classes/CPUParticles2D.xml:137
+#: doc/classes/ParticlesMaterial.xml:121
+msgid "The rate at which particles lose velocity."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:139 doc/classes/CPUParticles2D.xml:140
+msgid "Damping will vary along this [Curve]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:142 doc/classes/CPUParticles2D.xml:143
+#: doc/classes/ParticlesMaterial.xml:127
+msgid "Damping randomness ratio."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:145 doc/classes/CPUParticles2D.xml:146
+#: doc/classes/ParticlesMaterial.xml:130
+msgid "Unit vector specifying the particles' emission direction."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:148 doc/classes/CPUParticles2D.xml:149
+#: doc/classes/Particles.xml:51 doc/classes/Particles2D.xml:37
+msgid "Particle draw order. Uses [enum DrawOrder] values."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:151
+msgid ""
+"The rectangle's extents if [member emission_shape] is set to [constant "
+"EMISSION_SHAPE_BOX]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:154 doc/classes/CPUParticles2D.xml:152
+msgid ""
+"Sets the [Color]s to modulate particles by when using [constant "
+"EMISSION_SHAPE_POINTS] or [constant EMISSION_SHAPE_DIRECTED_POINTS]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:157 doc/classes/CPUParticles2D.xml:155
+msgid ""
+"Sets the direction the particles will be emitted in when using [constant "
+"EMISSION_SHAPE_DIRECTED_POINTS]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:160 doc/classes/CPUParticles2D.xml:158
+msgid ""
+"Sets the initial positions to spawn particles when using [constant "
+"EMISSION_SHAPE_POINTS] or [constant EMISSION_SHAPE_DIRECTED_POINTS]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:163
+msgid ""
+"The axis for the ring shaped emitter when using [constant "
+"EMISSION_SHAPE_RING]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:166
+msgid ""
+"The height for the ring shaped emitter when using [constant "
+"EMISSION_SHAPE_RING]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:169
+msgid ""
+"The inner radius for the ring shaped emitter when using [constant "
+"EMISSION_SHAPE_RING]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:172
+msgid ""
+"The radius for the ring shaped emitter when using [constant "
+"EMISSION_SHAPE_RING]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:175 doc/classes/CPUParticles2D.xml:164
+msgid ""
+"Particles will be emitted inside this region. See [enum EmissionShape] for "
+"possible values."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:178
+msgid ""
+"The sphere's radius if [enum EmissionShape] is set to [constant "
+"EMISSION_SHAPE_SPHERE]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:181 doc/classes/CPUParticles2D.xml:170
+#: doc/classes/Particles.xml:69 doc/classes/Particles2D.xml:40
+msgid "If [code]true[/code], particles are being emitted."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:184 doc/classes/CPUParticles2D.xml:173
+#: doc/classes/Particles2D.xml:43
+msgid ""
+"How rapidly particles in an emission cycle are emitted. If greater than "
+"[code]0[/code], there will be a gap in emissions before the next cycle "
+"begins."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:187
+msgid ""
+"The particle system's frame rate is fixed to a value. For instance, changing "
+"the value to 2 will make the particles render at 2 frames per second. Note "
+"this does not slow down the particle system itself."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:190 doc/classes/CPUParticles2D.xml:179
+#: doc/classes/ParticlesMaterial.xml:166
+msgid "Align Y axis of particle with the direction of its velocity."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:193 doc/classes/ParticlesMaterial.xml:169
+msgid "If [code]true[/code], particles will not move on the z axis."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:196 doc/classes/ParticlesMaterial.xml:172
+msgid "If [code]true[/code], particles rotate around Y axis by [member angle]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:199
+msgid ""
+"Amount of [member spread] in Y/Z plane. A value of [code]1[/code] restricts "
+"particles to X/Z plane."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:202 doc/classes/CPUParticles2D.xml:182
+#: doc/classes/Particles.xml:78 doc/classes/Particles2D.xml:49
+msgid ""
+"If [code]true[/code], results in fractional delta calculation which has a "
+"smoother particles display effect."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:205 doc/classes/CPUParticles2D.xml:185
+#: doc/classes/ParticlesMaterial.xml:178
+msgid "Gravity applied to every particle."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:208 doc/classes/CPUParticles2D.xml:188
+#: doc/classes/ParticlesMaterial.xml:181
+msgid "Initial hue variation applied to each particle."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:211 doc/classes/CPUParticles2D.xml:191
+msgid "Each particle's hue will vary along this [Curve]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:214 doc/classes/CPUParticles2D.xml:194
+#: doc/classes/ParticlesMaterial.xml:187
+msgid "Hue variation randomness ratio."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:217 doc/classes/CPUParticles2D.xml:197
+#: doc/classes/ParticlesMaterial.xml:190
+msgid ""
+"Initial velocity magnitude for each particle. Direction comes from [member "
+"spread] and the node's orientation."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:220 doc/classes/CPUParticles2D.xml:200
+#: doc/classes/ParticlesMaterial.xml:193
+msgid "Initial velocity randomness ratio."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:223 doc/classes/CPUParticles2D.xml:203
+#: doc/classes/Particles.xml:81 doc/classes/Particles2D.xml:52
+msgid "The amount of time each particle will exist (in seconds)."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:226 doc/classes/CPUParticles2D.xml:206
+#: doc/classes/ParticlesMaterial.xml:196
+msgid "Particle lifetime randomness ratio."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:229 doc/classes/CPUParticles2D.xml:209
+#: doc/classes/ParticlesMaterial.xml:199
+msgid ""
+"Linear acceleration applied to each particle in the direction of motion."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:232 doc/classes/CPUParticles2D.xml:212
+msgid "Each particle's linear acceleration will vary along this [Curve]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:235 doc/classes/CPUParticles2D.xml:215
+#: doc/classes/ParticlesMaterial.xml:205
+msgid "Linear acceleration randomness ratio."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:238 doc/classes/CPUParticles2D.xml:218
+#: doc/classes/Particles.xml:84 doc/classes/Particles2D.xml:55
+msgid ""
+"If [code]true[/code], particles use the parent node's coordinate space. If "
+"[code]false[/code], they use global coordinates."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:241
+msgid ""
+"The [Mesh] used for each particle. If [code]null[/code], particles will be "
+"spheres."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:244 doc/classes/CPUParticles2D.xml:225
+#: doc/classes/Particles2D.xml:62
+msgid ""
+"If [code]true[/code], only one emission cycle occurs. If set [code]true[/"
+"code] during a cycle, emission will stop at the cycle's end."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:247
+msgid ""
+"Orbital velocity applied to each particle. Makes the particles circle around "
+"origin in the local XY plane. Specified in number of full rotations around "
+"origin per second.\n"
+"This property is only available when [member flag_disable_z] is [code]true[/"
+"code]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:251 doc/classes/CPUParticles2D.xml:231
+msgid "Each particle's orbital velocity will vary along this [Curve]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:254 doc/classes/CPUParticles2D.xml:234
+#: doc/classes/ParticlesMaterial.xml:215
+msgid "Orbital velocity randomness ratio."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:257 doc/classes/CPUParticles2D.xml:237
+#: doc/classes/Particles2D.xml:65
+msgid "Particle system starts as if it had already run for this many seconds."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:260 doc/classes/CPUParticles2D.xml:240
+#: doc/classes/ParticlesMaterial.xml:218
+msgid ""
+"Radial acceleration applied to each particle. Makes particle accelerate away "
+"from origin."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:263 doc/classes/CPUParticles2D.xml:243
+msgid "Each particle's radial acceleration will vary along this [Curve]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:266 doc/classes/CPUParticles2D.xml:246
+#: doc/classes/ParticlesMaterial.xml:224
+msgid "Radial acceleration randomness ratio."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:269 doc/classes/CPUParticles2D.xml:249
+#: doc/classes/Particles2D.xml:71
+msgid "Emission lifetime randomness ratio."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:272 doc/classes/CPUParticles2D.xml:252
+#: doc/classes/ParticlesMaterial.xml:227
+msgid "Initial scale applied to each particle."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:275 doc/classes/CPUParticles2D.xml:255
+msgid "Each particle's scale will vary along this [Curve]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:278 doc/classes/CPUParticles2D.xml:258
+#: doc/classes/ParticlesMaterial.xml:233
+msgid "Scale randomness ratio."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:281 doc/classes/CPUParticles2D.xml:261
+#: doc/classes/Particles2D.xml:74
+msgid ""
+"Particle system's running speed scaling ratio. A value of [code]0[/code] can "
+"be used to pause the particles."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:284
+msgid ""
+"Each particle's initial direction range from [code]+spread[/code] to [code]-"
+"spread[/code] degrees. Applied to X/Z plane and Y/Z planes."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:287 doc/classes/CPUParticles2D.xml:267
+#: doc/classes/ParticlesMaterial.xml:239
+msgid ""
+"Tangential acceleration applied to each particle. Tangential acceleration is "
+"perpendicular to the particle's velocity giving the particles a swirling "
+"motion."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:290 doc/classes/CPUParticles2D.xml:270
+msgid "Each particle's tangential acceleration will vary along this [Curve]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:293 doc/classes/CPUParticles2D.xml:273
+#: doc/classes/ParticlesMaterial.xml:245
+msgid "Tangential acceleration randomness ratio."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:298 doc/classes/CPUParticles2D.xml:281
+#: doc/classes/Particles.xml:109 doc/classes/Particles2D.xml:86
+msgid "Particles are drawn in the order emitted."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:301 doc/classes/CPUParticles2D.xml:284
+#: doc/classes/Particles.xml:112 doc/classes/Particles2D.xml:89
+msgid "Particles are drawn in order of remaining lifetime."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:304 doc/classes/Particles.xml:115
+msgid "Particles are drawn in order of depth."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:307 doc/classes/CPUParticles2D.xml:287
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_curve] to set initial velocity properties."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:310 doc/classes/CPUParticles2D.xml:290
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_curve] to set angular velocity properties."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:313 doc/classes/CPUParticles2D.xml:293
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_curve] to set orbital velocity properties."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:316 doc/classes/CPUParticles2D.xml:296
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_curve] to set linear acceleration properties."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:319 doc/classes/CPUParticles2D.xml:299
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_curve] to set radial acceleration properties."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:322 doc/classes/CPUParticles2D.xml:302
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_curve] to set tangential acceleration properties."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:325 doc/classes/CPUParticles2D.xml:305
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_curve] to set damping properties."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:328 doc/classes/CPUParticles2D.xml:308
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_curve] to set angle properties."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:331 doc/classes/CPUParticles2D.xml:311
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_curve] to set scale properties."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:334 doc/classes/CPUParticles2D.xml:314
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_curve] to set hue variation properties."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:337 doc/classes/CPUParticles2D.xml:317
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_curve] to set animation speed properties."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:340 doc/classes/CPUParticles2D.xml:320
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_curve] to set animation offset properties."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:343 doc/classes/CPUParticles2D.xml:323
+#: doc/classes/ParticlesMaterial.xml:295
+msgid "Represents the size of the [enum Parameter] enum."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:346 doc/classes/CPUParticles2D.xml:326
+msgid "Use with [method set_particle_flag] to set [member flag_align_y]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:349
+msgid "Use with [method set_particle_flag] to set [member flag_rotate_y]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:352
+msgid "Use with [method set_particle_flag] to set [member flag_disable_z]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:355 doc/classes/CPUParticles2D.xml:335
+#: doc/classes/GeometryInstance.xml:109 doc/classes/ParticlesMaterial.xml:307
+#: doc/classes/SpatialMaterial.xml:564
+msgid "Represents the size of the [enum Flags] enum."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:358 doc/classes/CPUParticles2D.xml:338
+#: doc/classes/ParticlesMaterial.xml:310
+msgid "All particles will be emitted from a single point."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:361 doc/classes/ParticlesMaterial.xml:313
+msgid "Particles will be emitted in the volume of a sphere."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:364 doc/classes/ParticlesMaterial.xml:316
+msgid "Particles will be emitted in the volume of a box."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:367 doc/classes/CPUParticles2D.xml:347
+msgid ""
+"Particles will be emitted at a position chosen randomly among [member "
+"emission_points]. Particle color will be modulated by [member "
+"emission_colors]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:370 doc/classes/CPUParticles2D.xml:350
+msgid ""
+"Particles will be emitted at a position chosen randomly among [member "
+"emission_points]. Particle velocity and rotation will be set based on "
+"[member emission_normals]. Particle color will be modulated by [member "
+"emission_colors]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:373 doc/classes/ParticlesMaterial.xml:325
+msgid "Particles will be emitted in a ring or cylinder."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:376 doc/classes/CPUParticles2D.xml:353
+#: doc/classes/ParticlesMaterial.xml:328
+msgid "Represents the size of the [enum EmissionShape] enum."
+msgstr ""
+
+#: doc/classes/CPUParticles2D.xml:4
+msgid "CPU-based 2D particle emitter."
+msgstr ""
+
+#: doc/classes/CPUParticles2D.xml:7
+msgid ""
+"CPU-based 2D particle node used to create a variety of particle systems and "
+"effects.\n"
+"See also [Particles2D], which provides the same functionality with hardware "
+"acceleration, but may not run on older devices.\n"
+"[b]Note:[/b] Unlike [Particles2D], the visibility rect is generated on-the-"
+"fly and doesn't need to be configured by the user."
+msgstr ""
+
+#: doc/classes/CPUParticles2D.xml:12 doc/classes/Particles2D.xml:14
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/2d/particle_systems_2d.html"
+msgstr ""
+
+#: doc/classes/CPUParticles2D.xml:19
+msgid ""
+"Sets this node's properties to match a given [Particles2D] node with an "
+"assigned [ParticlesMaterial]."
+msgstr ""
+
+#: doc/classes/CPUParticles2D.xml:131
+msgid ""
+"Each particle's initial color. If [member texture] is defined, it will be "
+"multiplied by this color."
+msgstr ""
+
+#: doc/classes/CPUParticles2D.xml:134
+msgid ""
+"Each particle's color will vary along this [Gradient] (multiplied with "
+"[member color])."
+msgstr ""
+
+#: doc/classes/CPUParticles2D.xml:161
+msgid ""
+"The rectangle's extents if [member emission_shape] is set to [constant "
+"EMISSION_SHAPE_RECTANGLE]."
+msgstr ""
+
+#: doc/classes/CPUParticles2D.xml:167
+msgid ""
+"The sphere's radius if [member emission_shape] is set to [constant "
+"EMISSION_SHAPE_SPHERE]."
+msgstr ""
+
+#: doc/classes/CPUParticles2D.xml:176 doc/classes/Particles.xml:75
+#: doc/classes/Particles2D.xml:46
+msgid ""
+"The particle system's frame rate is fixed to a value. For instance, changing "
+"the value to 2 will make the particles render at 2 frames per second. Note "
+"this does not slow down the simulation of the particle system itself."
+msgstr ""
+
+#: doc/classes/CPUParticles2D.xml:221 doc/classes/Particles2D.xml:58
+msgid ""
+"Normal map to be used for the [member texture] property.\n"
+"[b]Note:[/b] Godot expects the normal map to use X+, Y-, and Z+ coordinates. "
+"See [url=http://wiki.polycount.com/wiki/"
+"Normal_Map_Technical_Details#Common_Swizzle_Coordinates]this page[/url] for "
+"a comparison of normal map coordinates expected by popular engines."
+msgstr ""
+
+#: doc/classes/CPUParticles2D.xml:228
+msgid ""
+"Orbital velocity applied to each particle. Makes the particles circle around "
+"origin. Specified in number of full rotations around origin per second."
+msgstr ""
+
+#: doc/classes/CPUParticles2D.xml:264 doc/classes/ParticlesMaterial.xml:236
+msgid ""
+"Each particle's initial direction range from [code]+spread[/code] to [code]-"
+"spread[/code] degrees."
+msgstr ""
+
+#: doc/classes/CPUParticles2D.xml:276 doc/classes/Particles2D.xml:77
+msgid "Particle texture. If [code]null[/code], particles will be squares."
+msgstr ""
+
+#: doc/classes/CPUParticles2D.xml:329 doc/classes/CPUParticles2D.xml:332
+msgid "Present for consistency with 3D particle nodes, not used in 2D."
+msgstr ""
+
+#: doc/classes/CPUParticles2D.xml:341
+msgid ""
+"Particles will be emitted on the surface of a sphere flattened to two "
+"dimensions."
+msgstr ""
+
+#: doc/classes/CPUParticles2D.xml:344
+msgid "Particles will be emitted in the area of a rectangle."
+msgstr ""
+
+#: doc/classes/Crypto.xml:4
+msgid "Access to advanced cryptographic functionalities."
+msgstr ""
+
+#: doc/classes/Crypto.xml:7
+msgid ""
+"The Crypto class allows you to access some more advanced cryptographic "
+"functionalities in Godot.\n"
+"For now, this includes generating cryptographically secure random bytes, RSA "
+"keys and self-signed X509 certificates generation, asymmetric key encryption/"
+"decryption, and signing/verification.\n"
+"[codeblock]\n"
+"extends Node\n"
+"\n"
+"var crypto = Crypto.new()\n"
+"var key = CryptoKey.new()\n"
+"var cert = X509Certificate.new()\n"
+"\n"
+"func _ready():\n"
+" # Generate new RSA key.\n"
+" key = crypto.generate_rsa(4096)\n"
+" # Generate new self-signed certificate with the given key.\n"
+" cert = crypto.generate_self_signed_certificate(key, \"CN=mydomain.com,"
+"O=My Game Company,C=IT\")\n"
+" # Save key and certificate in the user folder.\n"
+" key.save(\"user://generated.key\")\n"
+" cert.save(\"user://generated.crt\")\n"
+" # Encryption\n"
+" var data = \"Some data\"\n"
+" var encrypted = crypto.encrypt(key, data.to_utf8())\n"
+" # Decryption\n"
+" var decrypted = crypto.decrypt(key, encrypted)\n"
+" # Signing\n"
+" var signature = crypto.sign(HashingContext.HASH_SHA256, data."
+"sha256_buffer(), key)\n"
+" # Verifying\n"
+" var verified = crypto.verify(HashingContext.HASH_SHA256, data."
+"sha256_buffer(), signature, key)\n"
+" # Checks\n"
+" assert(verified)\n"
+" assert(data.to_utf8() == decrypted)\n"
+"[/codeblock]\n"
+"[b]Note:[/b] Not available in HTML5 exports."
+msgstr ""
+
+#: doc/classes/Crypto.xml:47
+msgid ""
+"Compares two [PoolByteArray]s for equality without leaking timing "
+"information in order to prevent timing attacks.\n"
+"See [url=https://paragonie.com/blog/2015/11/preventing-timing-attacks-on-"
+"string-comparison-with-double-hmac-strategy]this blog post[/url] for more "
+"information."
+msgstr ""
+
+#: doc/classes/Crypto.xml:56
+msgid ""
+"Decrypt the given [code]ciphertext[/code] with the provided private "
+"[code]key[/code].\n"
+"[b]Note:[/b] The maximum size of accepted ciphertext is limited by the key "
+"size."
+msgstr ""
+
+#: doc/classes/Crypto.xml:65
+msgid ""
+"Encrypt the given [code]plaintext[/code] with the provided public [code]key[/"
+"code].\n"
+"[b]Note:[/b] The maximum size of accepted plaintext is limited by the key "
+"size."
+msgstr ""
+
+#: doc/classes/Crypto.xml:73
+msgid ""
+"Generates a [PoolByteArray] of cryptographically secure random bytes with "
+"given [code]size[/code]."
+msgstr ""
+
+#: doc/classes/Crypto.xml:80
+msgid ""
+"Generates an RSA [CryptoKey] that can be used for creating self-signed "
+"certificates and passed to [method StreamPeerSSL.accept_stream]."
+msgstr ""
+
+#: doc/classes/Crypto.xml:90
+msgid ""
+"Generates a self-signed [X509Certificate] from the given [CryptoKey] and "
+"[code]issuer_name[/code]. The certificate validity will be defined by "
+"[code]not_before[/code] and [code]not_after[/code] (first valid date and "
+"last valid date). The [code]issuer_name[/code] must contain at least \"CN="
+"\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
+"company name), \"C=\" (country, i.e. 2 lettered ISO-3166 code of the country "
+"the organization is based in).\n"
+"A small example to generate an RSA key and a X509 self-signed certificate.\n"
+"[codeblock]\n"
+"var crypto = Crypto.new()\n"
+"# Generate 4096 bits RSA key.\n"
+"var key = crypto.generate_rsa(4096)\n"
+"# Generate self-signed certificate using the given key.\n"
+"var cert = crypto.generate_self_signed_certificate(key, \"CN=example.com,O=A "
+"Game Company,C=IT\")\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Crypto.xml:107
+msgid ""
+"Generates an [url=https://en.wikipedia.org/wiki/HMAC]HMAC[/url] digest of "
+"[code]msg[/code] using [code]key[/code]. The [code]hash_type[/code] "
+"parameter is the hashing algorithm that is used for the inner and outer "
+"hashes.\n"
+"Currently, only [constant HashingContext.HASH_SHA256] and [constant "
+"HashingContext.HASH_SHA1] are supported."
+msgstr ""
+
+#: doc/classes/Crypto.xml:117
+msgid ""
+"Sign a given [code]hash[/code] of type [code]hash_type[/code] with the "
+"provided private [code]key[/code]."
+msgstr ""
+
+#: doc/classes/Crypto.xml:127
+msgid ""
+"Verify that a given [code]signature[/code] for [code]hash[/code] of type "
+"[code]hash_type[/code] against the provided public [code]key[/code]."
+msgstr ""
+
+#: doc/classes/CryptoKey.xml:4
+msgid "A cryptographic key (RSA)."
+msgstr ""
+
+#: doc/classes/CryptoKey.xml:7
+msgid ""
+"The CryptoKey class represents a cryptographic key. Keys can be loaded and "
+"saved like any other [Resource].\n"
+"They can be used to generate a self-signed [X509Certificate] via [method "
+"Crypto.generate_self_signed_certificate] and as private key in [method "
+"StreamPeerSSL.accept_stream] along with the appropriate certificate.\n"
+"[b]Note:[/b] Not available in HTML5 exports."
+msgstr ""
+
+#: doc/classes/CryptoKey.xml:17
+msgid ""
+"Return [code]true[/code] if this CryptoKey only has the public part, and not "
+"the private one."
+msgstr ""
+
+#: doc/classes/CryptoKey.xml:25
+msgid ""
+"Loads a key from [code]path[/code]. If [code]public_only[/code] is "
+"[code]true[/code], only the public key will be loaded.\n"
+"[b]Note:[/b] [code]path[/code] should be a \"*.pub\" file if "
+"[code]public_only[/code] is [code]true[/code], a \"*.key\" file otherwise."
+msgstr ""
+
+#: doc/classes/CryptoKey.xml:34
+msgid ""
+"Loads a key from the given [code]string[/code]. If [code]public_only[/code] "
+"is [code]true[/code], only the public key will be loaded."
+msgstr ""
+
+#: doc/classes/CryptoKey.xml:42
+msgid ""
+"Saves a key to the given [code]path[/code]. If [code]public_only[/code] is "
+"[code]true[/code], only the public key will be saved.\n"
+"[b]Note:[/b] [code]path[/code] should be a \"*.pub\" file if "
+"[code]public_only[/code] is [code]true[/code], a \"*.key\" file otherwise."
+msgstr ""
+
+#: doc/classes/CryptoKey.xml:50
+msgid ""
+"Returns a string containing the key in PEM format. If [code]public_only[/"
+"code] is [code]true[/code], only the public key will be included."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGBox.xml:4
+msgid "A CSG Box shape."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGBox.xml:7
+msgid "This node allows you to create a box for use with the CSG system."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGBox.xml:15
+msgid "Depth of the box measured from the center of the box."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGBox.xml:18
+msgid "Height of the box measured from the center of the box."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGBox.xml:21
+msgid "The material used to render the box."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGBox.xml:24
+msgid "Width of the box measured from the center of the box."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGCombiner.xml:4
+msgid "A CSG node that allows you to combine other CSG modifiers."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGCombiner.xml:7
+msgid ""
+"For complex arrangements of shapes, it is sometimes needed to add structure "
+"to your CSG nodes. The CSGCombiner node allows you to create this structure. "
+"The node encapsulates the result of the CSG operations of its children. In "
+"this way, it is possible to do operations on one set of shapes that are "
+"children of one CSGCombiner node, and a set of separate operations on a "
+"second set of shapes that are children of a second CSGCombiner node, and "
+"then do an operation that takes the two end results as its input to create "
+"the final shape."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGCylinder.xml:4
+msgid "A CSG Cylinder shape."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGCylinder.xml:7
+msgid ""
+"This node allows you to create a cylinder (or cone) for use with the CSG "
+"system."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGCylinder.xml:15
+msgid ""
+"If [code]true[/code] a cone is created, the [member radius] will only apply "
+"to one side."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGCylinder.xml:18
+msgid "The height of the cylinder."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGCylinder.xml:21
+msgid "The material used to render the cylinder."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGCylinder.xml:24
+msgid "The radius of the cylinder."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGCylinder.xml:27
+msgid ""
+"The number of sides of the cylinder, the higher this number the more detail "
+"there will be in the cylinder."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGCylinder.xml:30
+msgid ""
+"If [code]true[/code] the normals of the cylinder are set to give a smooth "
+"effect making the cylinder seem rounded. If [code]false[/code] the cylinder "
+"will have a flat shaded look."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGMesh.xml:4
+msgid "A CSG Mesh shape that uses a mesh resource."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGMesh.xml:7
+msgid ""
+"This CSG node allows you to use any mesh resource as a CSG shape, provided "
+"it is closed, does not self-intersect, does not contain internal faces and "
+"has no edges that connect to more then two faces."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGMesh.xml:15
+msgid "The [Material] used in drawing the CSG shape."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGMesh.xml:18
+msgid ""
+"The [Mesh] resource to use as a CSG shape.\n"
+"[b]Note:[/b] When using an [ArrayMesh], avoid meshes with vertex normals "
+"unless a flat shader is required. By default, CSGMesh will ignore the mesh's "
+"vertex normals and use a smooth shader calculated using the faces' normals. "
+"If a flat shader is required, ensure that all faces' vertex normals are "
+"parallel."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:4
+msgid "Extrudes a 2D polygon shape to create a 3D mesh."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:7
+msgid ""
+"An array of 2D points is extruded to quickly and easily create a variety of "
+"3D meshes."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:15
+msgid ""
+"When [member mode] is [constant MODE_DEPTH], the depth of the extrusion."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:18
+msgid ""
+"Material to use for the resulting mesh. The UV maps the top half of the "
+"material to the extruded shape (U along the the length of the extrusions and "
+"V around the outline of the [member polygon]), the bottom-left quarter to "
+"the front end face, and the bottom-right quarter to the back end face."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:21
+msgid "The [member mode] used to extrude the [member polygon]."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:24
+msgid ""
+"When [member mode] is [constant MODE_PATH], by default, the top half of the "
+"[member material] is stretched along the entire length of the extruded "
+"shape. If [code]false[/code] the top half of the material is repeated every "
+"step of the extrusion."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:27
+msgid ""
+"When [member mode] is [constant MODE_PATH], the path interval or ratio of "
+"path points to extrusions."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:30
+msgid ""
+"When [member mode] is [constant MODE_PATH], this will determine if the "
+"interval should be by distance ([constant PATH_INTERVAL_DISTANCE]) or "
+"subdivision fractions ([constant PATH_INTERVAL_SUBDIVIDE])."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:33
+msgid ""
+"When [member mode] is [constant MODE_PATH], if [code]true[/code] the ends of "
+"the path are joined, by adding an extrusion between the last and first "
+"points of the path."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:36
+msgid ""
+"When [member mode] is [constant MODE_PATH], if [code]true[/code] the "
+"[Transform] of the [CSGPolygon] is used as the starting point for the "
+"extrusions, not the [Transform] of the [member path_node]."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:39
+msgid ""
+"When [member mode] is [constant MODE_PATH], the location of the [Path] "
+"object used to extrude the [member polygon]."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:42
+msgid ""
+"When [member mode] is [constant MODE_PATH], the [enum PathRotation] method "
+"used to rotate the [member polygon] as it is extruded."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:45
+msgid ""
+"When [member mode] is [constant MODE_PATH], extrusions that are less than "
+"this angle, will be merged together to reduce polygon count."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:48
+msgid ""
+"When [member mode] is [constant MODE_PATH], this is the distance along the "
+"path, in meters, the texture coordinates will tile. When set to 0, texture "
+"coordinates will match geometry exactly with no tiling."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:51
+msgid "The point array that defines the 2D polygon that is extruded."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:54
+msgid "If [code]true[/code], applies smooth shading to the extrusions."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:57
+msgid ""
+"When [member mode] is [constant MODE_SPIN], the total number of degrees the "
+"[member polygon] is rotated when extruding."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:60
+msgid ""
+"When [member mode] is [constant MODE_SPIN], the number of extrusions made."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:65
+msgid "The [member polygon] shape is extruded along the negative Z axis."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:68
+msgid ""
+"The [member polygon] shape is extruded by rotating it around the Y axis."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:71
+msgid ""
+"The [member polygon] shape is extruded along the [Path] specified in [member "
+"path_node]."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:74
+msgid ""
+"The [member polygon] shape is not rotated.\n"
+"[b]Note:[/b] Requires the path's Z coordinates to continually decrease to "
+"ensure viable shapes."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:78
+msgid ""
+"The [member polygon] shape is rotated along the path, but it is not rotated "
+"around the path axis.\n"
+"[b]Note:[/b] Requires the path's Z coordinates to continually decrease to "
+"ensure viable shapes."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:82
+msgid ""
+"The [member polygon] shape follows the path and its rotations around the "
+"path axis."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:85
+msgid ""
+"When [member mode] is set to [constant MODE_PATH], [member path_interval] "
+"will determine the distance, in meters, each interval of the path will "
+"extrude."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:88
+msgid ""
+"When [member mode] is set to [constant MODE_PATH], [member path_interval] "
+"will subdivide the polygons along the path."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPrimitive.xml:4
+msgid "Base class for CSG primitives."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPrimitive.xml:7
+msgid ""
+"Parent class for various CSG primitives. It contains code and functionality "
+"that is common between them. It cannot be used directly. Instead use one of "
+"the various classes that inherit from it."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPrimitive.xml:15
+msgid "Invert the faces of the mesh."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGShape.xml:4
+msgid "The CSG base class."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGShape.xml:7
+msgid ""
+"This is the CSG base class that provides CSG operation support to the "
+"various CSG nodes in Godot."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGShape.xml:16
+#: modules/csg/doc_classes/CSGShape.xml:23 doc/classes/RayCast2D.xml:60
+#: doc/classes/SoftBody.xml:30 doc/classes/SoftBody.xml:37
+msgid "Returns an individual bit on the collision mask."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGShape.xml:29
+msgid ""
+"Returns an [Array] with two elements, the first is the [Transform] of this "
+"node and the second is the root [Mesh] of this node. Only works when this "
+"node is the root shape."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGShape.xml:35
+msgid ""
+"Returns [code]true[/code] if this is a root shape and is thus the object "
+"that is rendered."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGShape.xml:43 doc/classes/SoftBody.xml:66
+msgid ""
+"Sets individual bits on the layer mask. Use this if you only need to change "
+"one layer's value."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGShape.xml:51 doc/classes/SoftBody.xml:74
+msgid ""
+"Sets individual bits on the collision mask. Use this if you only need to "
+"change one layer's value."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGShape.xml:57
+msgid ""
+"Calculate tangents for the CSG shape which allows the use of normal maps. "
+"This is only applied on the root shape, this setting is ignored on any child."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGShape.xml:60
+msgid ""
+"The physics layers this area is in.\n"
+"Collidable objects can exist in any of 32 different layers. These layers "
+"work like a tagging system, and are not visual. A collidable can use these "
+"layers to select with which objects it can collide, using the collision_mask "
+"property.\n"
+"A contact is detected if object A is in any of the layers that object B "
+"scans, or object B is in any layer scanned by object A. See [url=https://"
+"docs.godotengine.org/en/3.4/tutorials/physics/physics_introduction."
+"html#collision-layers-and-masks]Collision layers and masks[/url] in the "
+"documentation for more information."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGShape.xml:65
+msgid ""
+"The physics layers this CSG shape scans for collisions. See [url=https://"
+"docs.godotengine.org/en/3.4/tutorials/physics/physics_introduction."
+"html#collision-layers-and-masks]Collision layers and masks[/url] in the "
+"documentation for more information."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGShape.xml:68
+msgid ""
+"The operation that is performed on this shape. This is ignored for the first "
+"CSG child node as the operation is between this node and the previous child "
+"of this nodes parent."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGShape.xml:71
+msgid ""
+"Snap makes the mesh snap to a given distance so that the faces of two meshes "
+"can be perfectly aligned. A lower value results in greater precision but may "
+"be harder to adjust."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGShape.xml:74
+msgid ""
+"Adds a collision shape to the physics engine for our CSG shape. This will "
+"always act like a static body. Note that the collision shape is still active "
+"even if the CSG shape itself is hidden."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGShape.xml:79
+msgid ""
+"Geometry of both primitives is merged, intersecting geometry is removed."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGShape.xml:82
+msgid "Only intersecting geometry remains, the rest is removed."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGShape.xml:85
+msgid ""
+"The second shape is subtracted from the first, leaving a dent with its shape."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGSphere.xml:4
+msgid "A CSG Sphere shape."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGSphere.xml:7
+msgid "This node allows you to create a sphere for use with the CSG system."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGSphere.xml:15
+msgid "The material used to render the sphere."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGSphere.xml:18
+msgid "Number of vertical slices for the sphere."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGSphere.xml:21
+msgid "Radius of the sphere."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGSphere.xml:24
+msgid "Number of horizontal slices for the sphere."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGSphere.xml:27
+msgid ""
+"If [code]true[/code] the normals of the sphere are set to give a smooth "
+"effect making the sphere seem rounded. If [code]false[/code] the sphere will "
+"have a flat shaded look."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGTorus.xml:4
+msgid "A CSG Torus shape."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGTorus.xml:7
+msgid "This node allows you to create a torus for use with the CSG system."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGTorus.xml:15
+msgid "The inner radius of the torus."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGTorus.xml:18
+msgid "The material used to render the torus."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGTorus.xml:21
+msgid "The outer radius of the torus."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGTorus.xml:24
+msgid "The number of edges each ring of the torus is constructed of."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGTorus.xml:27
+msgid "The number of slices the torus is constructed of."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGTorus.xml:30
+msgid ""
+"If [code]true[/code] the normals of the torus are set to give a smooth "
+"effect making the torus seem rounded. If [code]false[/code] the torus will "
+"have a flat shaded look."
+msgstr ""
+
+#: modules/mono/doc_classes/CSharpScript.xml:4
+msgid ""
+"A script implemented in the C# programming language (Mono-enabled builds "
+"only)."
+msgstr ""
+
+#: modules/mono/doc_classes/CSharpScript.xml:7
+msgid ""
+"This class represents a C# script. It is the C# equivalent of the [GDScript] "
+"class and is only available in Mono-enabled Godot builds.\n"
+"See also [GodotSharp]."
+msgstr ""
+
+#: modules/mono/doc_classes/CSharpScript.xml:11
+msgid ""
+"https://docs.godotengine.org/en/3.4/getting_started/scripting/c_sharp/index."
+"html"
+msgstr ""
+
+#: modules/mono/doc_classes/CSharpScript.xml:18
+#: modules/gdnative/doc_classes/PluginScript.xml:13
+msgid "Returns a new instance of the script."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:4
+msgid "A CubeMap is a 6-sided 3D texture."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:7
+msgid ""
+"A 6-sided 3D texture typically used for faking reflections. It can be used "
+"to make an object look as if it's reflecting its surroundings. This usually "
+"delivers much better performance than other reflection methods."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:15
+msgid "Returns the [CubeMap]'s height."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:22
+msgid ""
+"Returns an [Image] for a side of the [CubeMap] using one of the [enum Side] "
+"constants."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:28
+msgid "Returns the [CubeMap]'s width."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:36
+msgid ""
+"Sets an [Image] for a side of the [CubeMap] using one of the [enum Side] "
+"constants."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:42
+msgid ""
+"The render flags for the [CubeMap]. See the [enum Flags] constants for "
+"details."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:45
+msgid ""
+"The lossy storage quality of the [CubeMap] if the storage mode is set to "
+"[constant STORAGE_COMPRESS_LOSSY]."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:48
+msgid "The [CubeMap]'s storage mode. See [enum Storage] constants."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:53
+msgid "Store the [CubeMap] without any compression."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:56
+msgid "Store the [CubeMap] with strong compression that reduces image quality."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:59
+msgid ""
+"Store the [CubeMap] with moderate compression that doesn't reduce image "
+"quality."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:62
+msgid "Identifier for the left face of the [CubeMap]."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:65
+msgid "Identifier for the right face of the [CubeMap]."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:68
+msgid "Identifier for the bottom face of the [CubeMap]."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:71
+msgid "Identifier for the top face of the [CubeMap]."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:74
+msgid "Identifier for the front face of the [CubeMap]."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:77
+msgid "Identifier for the back face of the [CubeMap]."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:80
+msgid "Generate mipmaps, to enable smooth zooming out of the texture."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:83
+msgid "Repeat (instead of clamp to edge)."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:86
+msgid "Turn on magnifying filter, to enable smooth zooming in of the texture."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:89
+msgid "Default flags. Generate mipmaps, repeat, and filter are enabled."
+msgstr ""
+
+#: doc/classes/CubeMesh.xml:4
+msgid "Generate an axis-aligned cuboid [PrimitiveMesh]."
+msgstr ""
+
+#: doc/classes/CubeMesh.xml:7
+msgid ""
+"Generate an axis-aligned cuboid [PrimitiveMesh].\n"
+"The cube's UV layout is arranged in a 3×2 layout that allows texturing each "
+"face individually. To apply the same texture on all faces, change the "
+"material's UV property to [code]Vector3(3, 2, 1)[/code].\n"
+"[b]Note:[/b] When using a large textured [CubeMesh] (e.g. as a floor), you "
+"may stumble upon UV jittering issues depending on the camera angle. To solve "
+"this, increase [member subdivide_depth], [member subdivide_height] and "
+"[member subdivide_width] until you no longer notice UV jittering."
+msgstr ""
+
+#: doc/classes/CubeMesh.xml:17
+msgid "Size of the cuboid mesh."
+msgstr ""
+
+#: doc/classes/CubeMesh.xml:20
+msgid "Number of extra edge loops inserted along the Z axis."
+msgstr ""
+
+#: doc/classes/CubeMesh.xml:23
+msgid "Number of extra edge loops inserted along the Y axis."
+msgstr ""
+
+#: doc/classes/CubeMesh.xml:26
+msgid "Number of extra edge loops inserted along the X axis."
+msgstr ""
+
+#: doc/classes/CullInstance.xml:4
+msgid "Parent of all nodes that can be culled by the Portal system."
+msgstr ""
+
+#: doc/classes/CullInstance.xml:7
+msgid ""
+"Provides common functionality to nodes that can be culled by the [Portal] "
+"system.\n"
+"[code]Static[/code] and [code]Dynamic[/code] objects are the most "
+"efficiently managed objects in the system, but there are some caveats. They "
+"are expected to be present initially when [Room]s are converted using the "
+"[RoomManager] [code]rooms_convert[/code] function, and their lifetime should "
+"be the same as the game level (i.e. present until you call "
+"[code]rooms_clear[/code] on the [RoomManager]. Although you shouldn't "
+"create / delete these objects during gameplay, you can manage their "
+"visibility with the standard [code]hide[/code] and [code]show[/code] "
+"commands.\n"
+"[code]Roaming[/code] objects on the other hand, require extra processing to "
+"keep track of which [Room] they are within. This enables them to be culled "
+"effectively, wherever they are.\n"
+"[code]Global[/code] objects are not culled by the portal system, and use "
+"view frustum culling only.\n"
+"Objects that are not [code]Static[/code] or [code]Dynamic[/code] can be "
+"freely created and deleted during the lifetime of the game level."
+msgstr ""
+
+#: doc/classes/CullInstance.xml:19
+msgid ""
+"When set to [code]0[/code], [CullInstance]s will be autoplaced in the [Room] "
+"with the highest priority.\n"
+"When set to a value other than [code]0[/code], the system will attempt to "
+"autoplace in a [Room] with the [code]autoplace_priority[/code], if it is "
+"present.\n"
+"This can be used to control autoplacement of building exteriors in an outer "
+"[RoomGroup]."
+msgstr ""
+
+#: doc/classes/CullInstance.xml:24
+msgid ""
+"When a manual bound has not been explicitly specified for a [Room], the "
+"convex hull bound will be estimated from the geometry of the objects within "
+"the room. This setting determines whether the geometry of an object is "
+"included in this estimate of the room bound.\n"
+"[b]Note:[/b] This setting is only relevant when the object is set to "
+"[code]PORTAL_MODE_STATIC[/code] or [code]PORTAL_MODE_DYNAMIC[/code], and for "
+"[Portal]s."
+msgstr ""
+
+#: doc/classes/CullInstance.xml:28
+msgid ""
+"When using [Room]s and [Portal]s, this specifies how the [CullInstance] is "
+"processed in the system."
+msgstr ""
+
+#: doc/classes/CullInstance.xml:33
+msgid ""
+"Use for instances within [Room]s that will [b]not move[/b] - e.g. walls, "
+"floors.\n"
+"[b]Note:[/b] If you attempt to delete a [code]PORTAL_MODE_STATIC[/code] "
+"instance while the room graph is loaded (converted), it will unload the room "
+"graph and deactivate portal culling. This is because the [b]room graph[/b] "
+"data has been invalidated. You will need to reconvert the rooms using the "
+"[RoomManager] to activate the system again."
+msgstr ""
+
+#: doc/classes/CullInstance.xml:37
+msgid ""
+"Use for instances within rooms that will move but [b]not change room[/b] - e."
+"g. moving platforms.\n"
+"[b]Note:[/b] If you attempt to delete a [code]PORTAL_MODE_DYNAMIC[/code] "
+"instance while the room graph is loaded (converted), it will unload the room "
+"graph and deactivate portal culling. This is because the [b]room graph[/b] "
+"data has been invalidated. You will need to reconvert the rooms using the "
+"[RoomManager] to activate the system again."
+msgstr ""
+
+#: doc/classes/CullInstance.xml:41
+msgid "Use for instances that will move [b]between[/b] [Room]s - e.g. players."
+msgstr ""
+
+#: doc/classes/CullInstance.xml:44
+msgid ""
+"Use for instances that will be frustum culled only - e.g. first person "
+"weapon, debug."
+msgstr ""
+
+#: doc/classes/CullInstance.xml:47
+msgid ""
+"Use for instances that will not be shown at all - e.g. [b]manual room "
+"bounds[/b] (specified by prefix [i]'Bound_'[/i])."
+msgstr ""
+
+#: doc/classes/Curve.xml:4
+msgid "A mathematic curve."
+msgstr ""
+
+#: doc/classes/Curve.xml:7
+msgid ""
+"A curve that can be saved and re-used for other objects. By default, it "
+"ranges between [code]0[/code] and [code]1[/code] on the Y axis and positions "
+"points relative to the [code]0.5[/code] Y position."
+msgstr ""
+
+#: doc/classes/Curve.xml:20
+msgid ""
+"Adds a point to the curve. For each side, if the [code]*_mode[/code] is "
+"[constant TANGENT_LINEAR], the [code]*_tangent[/code] angle (in degrees) "
+"uses the slope of the curve halfway to the adjacent point. Allows custom "
+"assignments to the [code]*_tangent[/code] angle if [code]*_mode[/code] is "
+"set to [constant TANGENT_FREE]."
+msgstr ""
+
+#: doc/classes/Curve.xml:26
+msgid "Recomputes the baked cache of points for the curve."
+msgstr ""
+
+#: doc/classes/Curve.xml:32
+msgid ""
+"Removes points that are closer than [code]CMP_EPSILON[/code] (0.00001) units "
+"to their neighbor on the curve."
+msgstr ""
+
+#: doc/classes/Curve.xml:38 doc/classes/Curve2D.xml:27
+#: doc/classes/Curve3D.xml:27
+msgid "Removes all points from the curve."
+msgstr ""
+
+#: doc/classes/Curve.xml:44 doc/classes/Curve2D.xml:61
+#: doc/classes/Curve3D.xml:74
+msgid "Returns the number of points describing the curve."
+msgstr ""
+
+#: doc/classes/Curve.xml:51
+msgid ""
+"Returns the left [enum TangentMode] for the point at [code]index[/code]."
+msgstr ""
+
+#: doc/classes/Curve.xml:58
+msgid ""
+"Returns the left tangent angle (in degrees) for the point at [code]index[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Curve.xml:65
+msgid "Returns the curve coordinates for the point at [code]index[/code]."
+msgstr ""
+
+#: doc/classes/Curve.xml:72
+msgid ""
+"Returns the right [enum TangentMode] for the point at [code]index[/code]."
+msgstr ""
+
+#: doc/classes/Curve.xml:79
+msgid ""
+"Returns the right tangent angle (in degrees) for the point at [code]index[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Curve.xml:86
+msgid ""
+"Returns the Y value for the point that would exist at the X position "
+"[code]offset[/code] along the curve."
+msgstr ""
+
+#: doc/classes/Curve.xml:93
+msgid ""
+"Returns the Y value for the point that would exist at the X position "
+"[code]offset[/code] along the curve using the baked cache. Bakes the curve's "
+"points if not already baked."
+msgstr ""
+
+#: doc/classes/Curve.xml:100
+msgid "Removes the point at [code]index[/code] from the curve."
+msgstr ""
+
+#: doc/classes/Curve.xml:108
+msgid ""
+"Sets the left [enum TangentMode] for the point at [code]index[/code] to "
+"[code]mode[/code]."
+msgstr ""
+
+#: doc/classes/Curve.xml:116
+msgid ""
+"Sets the left tangent angle for the point at [code]index[/code] to "
+"[code]tangent[/code]."
+msgstr ""
+
+#: doc/classes/Curve.xml:124
+msgid "Sets the offset from [code]0.5[/code]."
+msgstr ""
+
+#: doc/classes/Curve.xml:132
+msgid ""
+"Sets the right [enum TangentMode] for the point at [code]index[/code] to "
+"[code]mode[/code]."
+msgstr ""
+
+#: doc/classes/Curve.xml:140
+msgid ""
+"Sets the right tangent angle for the point at [code]index[/code] to "
+"[code]tangent[/code]."
+msgstr ""
+
+#: doc/classes/Curve.xml:148
+msgid ""
+"Assigns the vertical position [code]y[/code] to the point at [code]index[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Curve.xml:154
+msgid "The number of points to include in the baked (i.e. cached) curve data."
+msgstr ""
+
+#: doc/classes/Curve.xml:157
+msgid "The maximum value the curve can reach."
+msgstr ""
+
+#: doc/classes/Curve.xml:160
+msgid "The minimum value the curve can reach."
+msgstr ""
+
+#: doc/classes/Curve.xml:166
+msgid "Emitted when [member max_value] or [member min_value] is changed."
+msgstr ""
+
+#: doc/classes/Curve.xml:172
+msgid "The tangent on this side of the point is user-defined."
+msgstr ""
+
+#: doc/classes/Curve.xml:175
+msgid ""
+"The curve calculates the tangent on this side of the point as the slope "
+"halfway towards the adjacent point."
+msgstr ""
+
+#: doc/classes/Curve.xml:178
+msgid "The total number of available tangent modes."
+msgstr ""
+
+#: doc/classes/Curve2D.xml:4
+msgid "Describes a Bézier curve in 2D space."
+msgstr ""
+
+#: doc/classes/Curve2D.xml:7
+msgid ""
+"This class describes a Bézier curve in 2D space. It is mainly used to give a "
+"shape to a [Path2D], but can be manually sampled for other purposes.\n"
+"It keeps a cache of precalculated points along the curve, to speed up "
+"further calculations."
+msgstr ""
+
+#: doc/classes/Curve2D.xml:20 doc/classes/Curve3D.xml:20
+msgid ""
+"Adds a point to a curve at [code]position[/code], with control points "
+"[code]in[/code] and [code]out[/code].\n"
+"If [code]at_position[/code] is given, the point is inserted before the point "
+"number [code]at_position[/code], moving that point (and every point after) "
+"after the inserted point. If [code]at_position[/code] is not given, or is an "
+"illegal value ([code]at_position <0[/code] or [code]at_position >= [method "
+"get_point_count][/code]), the point will be appended at the end of the point "
+"list."
+msgstr ""
+
+#: doc/classes/Curve2D.xml:33 doc/classes/Curve3D.xml:33
+msgid ""
+"Returns the total length of the curve, based on the cached points. Given "
+"enough density (see [member bake_interval]), it should be approximate enough."
+msgstr ""
+
+#: doc/classes/Curve2D.xml:39
+msgid "Returns the cache of points as a [PoolVector2Array]."
+msgstr ""
+
+#: doc/classes/Curve2D.xml:46
+msgid ""
+"Returns the closest offset to [code]to_point[/code]. This offset is meant to "
+"be used in [method interpolate_baked].\n"
+"[code]to_point[/code] must be in this curve's local space."
+msgstr ""
+
+#: doc/classes/Curve2D.xml:54 doc/classes/Curve3D.xml:67
+msgid ""
+"Returns the closest baked point (in curve's local space) to [code]to_point[/"
+"code].\n"
+"[code]to_point[/code] must be in this curve's local space."
+msgstr ""
+
+#: doc/classes/Curve2D.xml:68
+msgid ""
+"Returns the position of the control point leading to the vertex [code]idx[/"
+"code]. The returned position is relative to the vertex [code]idx[/code]. If "
+"the index is out of bounds, the function sends an error to the console, and "
+"returns [code](0, 0)[/code]."
+msgstr ""
+
+#: doc/classes/Curve2D.xml:75
+msgid ""
+"Returns the position of the control point leading out of the vertex "
+"[code]idx[/code]. The returned position is relative to the vertex [code]idx[/"
+"code]. If the index is out of bounds, the function sends an error to the "
+"console, and returns [code](0, 0)[/code]."
+msgstr ""
+
+#: doc/classes/Curve2D.xml:82
+msgid ""
+"Returns the position of the vertex [code]idx[/code]. If the index is out of "
+"bounds, the function sends an error to the console, and returns [code](0, 0)"
+"[/code]."
+msgstr ""
+
+#: doc/classes/Curve2D.xml:90
+msgid ""
+"Returns the position between the vertex [code]idx[/code] and the vertex "
+"[code]idx + 1[/code], where [code]t[/code] controls if the point is the "
+"first vertex ([code]t = 0.0[/code]), the last vertex ([code]t = 1.0[/code]), "
+"or in between. Values of [code]t[/code] outside the range ([code]0.0 >= t "
+"<=1[/code]) give strange, but predictable results.\n"
+"If [code]idx[/code] is out of bounds it is truncated to the first or last "
+"vertex, and [code]t[/code] is ignored. If the curve has no points, the "
+"function sends an error to the console, and returns [code](0, 0)[/code]."
+msgstr ""
+
+#: doc/classes/Curve2D.xml:99
+msgid ""
+"Returns a point within the curve at position [code]offset[/code], where "
+"[code]offset[/code] is measured as a pixel distance along the curve.\n"
+"To do that, it finds the two cached points where the [code]offset[/code] "
+"lies between, then interpolates the values. This interpolation is cubic if "
+"[code]cubic[/code] is set to [code]true[/code], or linear if set to "
+"[code]false[/code].\n"
+"Cubic interpolation tends to follow the curves better, but linear is faster "
+"(and often, precise enough)."
+msgstr ""
+
+#: doc/classes/Curve2D.xml:108 doc/classes/Curve3D.xml:138
+msgid ""
+"Returns the position at the vertex [code]fofs[/code]. It calls [method "
+"interpolate] using the integer part of [code]fofs[/code] as [code]idx[/"
+"code], and its fractional part as [code]t[/code]."
+msgstr ""
+
+#: doc/classes/Curve2D.xml:115 doc/classes/Curve3D.xml:145
+msgid ""
+"Deletes the point [code]idx[/code] from the curve. Sends an error to the "
+"console if [code]idx[/code] is out of bounds."
+msgstr ""
+
+#: doc/classes/Curve2D.xml:123 doc/classes/Curve3D.xml:153
+msgid ""
+"Sets the position of the control point leading to the vertex [code]idx[/"
+"code]. If the index is out of bounds, the function sends an error to the "
+"console. The position is relative to the vertex."
+msgstr ""
+
+#: doc/classes/Curve2D.xml:131 doc/classes/Curve3D.xml:161
+msgid ""
+"Sets the position of the control point leading out of the vertex [code]idx[/"
+"code]. If the index is out of bounds, the function sends an error to the "
+"console. The position is relative to the vertex."
+msgstr ""
+
+#: doc/classes/Curve2D.xml:139 doc/classes/Curve3D.xml:169
+msgid ""
+"Sets the position for the vertex [code]idx[/code]. If the index is out of "
+"bounds, the function sends an error to the console."
+msgstr ""
+
+#: doc/classes/Curve2D.xml:147 doc/classes/Curve3D.xml:186
+msgid ""
+"Returns a list of points along the curve, with a curvature controlled point "
+"density. That is, the curvier parts will have more points than the "
+"straighter parts.\n"
+"This approximation makes straight segments between each point, then "
+"subdivides those segments until the resulting shape is similar enough.\n"
+"[code]max_stages[/code] controls how many subdivisions a curve segment may "
+"face before it is considered approximate enough. Each subdivision splits the "
+"segment in half, so the default 5 stages may mean up to 32 subdivisions per "
+"curve segment. Increase with care!\n"
+"[code]tolerance_degrees[/code] controls how many degrees the midpoint of a "
+"segment may deviate from the real curve, before the segment has to be "
+"subdivided."
+msgstr ""
+
+#: doc/classes/Curve2D.xml:156
+msgid ""
+"The distance in pixels between two adjacent cached points. Changing it "
+"forces the cache to be recomputed the next time the [method "
+"get_baked_points] or [method get_baked_length] function is called. The "
+"smaller the distance, the more points in the cache and the more memory it "
+"will consume, so use with care."
+msgstr ""
+
+#: doc/classes/Curve3D.xml:4
+msgid "Describes a Bézier curve in 3D space."
+msgstr ""
+
+#: doc/classes/Curve3D.xml:7
+msgid ""
+"This class describes a Bézier curve in 3D space. It is mainly used to give a "
+"shape to a [Path], but can be manually sampled for other purposes.\n"
+"It keeps a cache of precalculated points along the curve, to speed up "
+"further calculations."
+msgstr ""
+
+#: doc/classes/Curve3D.xml:39
+msgid "Returns the cache of points as a [PoolVector3Array]."
+msgstr ""
+
+#: doc/classes/Curve3D.xml:45
+msgid "Returns the cache of tilts as a [PoolRealArray]."
+msgstr ""
+
+#: doc/classes/Curve3D.xml:51
+msgid ""
+"Returns the cache of up vectors as a [PoolVector3Array].\n"
+"If [member up_vector_enabled] is [code]false[/code], the cache will be empty."
+msgstr ""
+
+#: doc/classes/Curve3D.xml:59
+msgid ""
+"Returns the closest offset to [code]to_point[/code]. This offset is meant to "
+"be used in [method interpolate_baked] or [method "
+"interpolate_baked_up_vector].\n"
+"[code]to_point[/code] must be in this curve's local space."
+msgstr ""
+
+#: doc/classes/Curve3D.xml:81
+msgid ""
+"Returns the position of the control point leading to the vertex [code]idx[/"
+"code]. The returned position is relative to the vertex [code]idx[/code]. If "
+"the index is out of bounds, the function sends an error to the console, and "
+"returns [code](0, 0, 0)[/code]."
+msgstr ""
+
+#: doc/classes/Curve3D.xml:88
+msgid ""
+"Returns the position of the control point leading out of the vertex "
+"[code]idx[/code]. The returned position is relative to the vertex [code]idx[/"
+"code]. If the index is out of bounds, the function sends an error to the "
+"console, and returns [code](0, 0, 0)[/code]."
+msgstr ""
+
+#: doc/classes/Curve3D.xml:95
+msgid ""
+"Returns the position of the vertex [code]idx[/code]. If the index is out of "
+"bounds, the function sends an error to the console, and returns [code](0, 0, "
+"0)[/code]."
+msgstr ""
+
+#: doc/classes/Curve3D.xml:102
+msgid ""
+"Returns the tilt angle in radians for the point [code]idx[/code]. If the "
+"index is out of bounds, the function sends an error to the console, and "
+"returns [code]0[/code]."
+msgstr ""
+
+#: doc/classes/Curve3D.xml:110
+msgid ""
+"Returns the position between the vertex [code]idx[/code] and the vertex "
+"[code]idx + 1[/code], where [code]t[/code] controls if the point is the "
+"first vertex ([code]t = 0.0[/code]), the last vertex ([code]t = 1.0[/code]), "
+"or in between. Values of [code]t[/code] outside the range ([code]0.0 >= t "
+"<=1[/code]) give strange, but predictable results.\n"
+"If [code]idx[/code] is out of bounds it is truncated to the first or last "
+"vertex, and [code]t[/code] is ignored. If the curve has no points, the "
+"function sends an error to the console, and returns [code](0, 0, 0)[/code]."
+msgstr ""
+
+#: doc/classes/Curve3D.xml:119
+msgid ""
+"Returns a point within the curve at position [code]offset[/code], where "
+"[code]offset[/code] is measured as a distance in 3D units along the curve.\n"
+"To do that, it finds the two cached points where the [code]offset[/code] "
+"lies between, then interpolates the values. This interpolation is cubic if "
+"[code]cubic[/code] is set to [code]true[/code], or linear if set to "
+"[code]false[/code].\n"
+"Cubic interpolation tends to follow the curves better, but linear is faster "
+"(and often, precise enough)."
+msgstr ""
+
+#: doc/classes/Curve3D.xml:129
+msgid ""
+"Returns an up vector within the curve at position [code]offset[/code], where "
+"[code]offset[/code] is measured as a distance in 3D units along the curve.\n"
+"To do that, it finds the two cached up vectors where the [code]offset[/code] "
+"lies between, then interpolates the values. If [code]apply_tilt[/code] is "
+"[code]true[/code], an interpolated tilt is applied to the interpolated up "
+"vector.\n"
+"If the curve has no up vectors, the function sends an error to the console, "
+"and returns [code](0, 1, 0)[/code]."
+msgstr ""
+
+#: doc/classes/Curve3D.xml:177
+msgid ""
+"Sets the tilt angle in radians for the point [code]idx[/code]. If the index "
+"is out of bounds, the function sends an error to the console.\n"
+"The tilt controls the rotation along the look-at axis an object traveling "
+"the path would have. In the case of a curve controlling a [PathFollow], this "
+"tilt is an offset over the natural tilt the [PathFollow] calculates."
+msgstr ""
+
+#: doc/classes/Curve3D.xml:195
+msgid ""
+"The distance in meters between two adjacent cached points. Changing it "
+"forces the cache to be recomputed the next time the [method "
+"get_baked_points] or [method get_baked_length] function is called. The "
+"smaller the distance, the more points in the cache and the more memory it "
+"will consume, so use with care."
+msgstr ""
+
+#: doc/classes/Curve3D.xml:198
+msgid ""
+"If [code]true[/code], the curve will bake up vectors used for orientation. "
+"This is used when [member PathFollow.rotation_mode] is set to [constant "
+"PathFollow.ROTATION_ORIENTED]. Changing it forces the cache to be recomputed."
+msgstr ""
+
+#: doc/classes/CurveTexture.xml:4
+msgid "A texture that shows a curve."
+msgstr ""
+
+#: doc/classes/CurveTexture.xml:7
+msgid ""
+"Renders a given [Curve] provided to it. Simplifies the task of drawing "
+"curves and/or saving them as image files."
+msgstr ""
+
+#: doc/classes/CurveTexture.xml:15
+msgid "The [code]curve[/code] rendered onto the texture."
+msgstr ""
+
+#: doc/classes/CurveTexture.xml:18
+msgid "The width of the texture."
+msgstr ""
+
+#: doc/classes/CylinderMesh.xml:4
+msgid "Class representing a cylindrical [PrimitiveMesh]."
+msgstr ""
+
+#: doc/classes/CylinderMesh.xml:7
+msgid ""
+"Class representing a cylindrical [PrimitiveMesh]. This class can be used to "
+"create cones by setting either the [member top_radius] or [member "
+"bottom_radius] properties to [code]0.0[/code]."
+msgstr ""
+
+#: doc/classes/CylinderMesh.xml:15
+msgid ""
+"Bottom radius of the cylinder. If set to [code]0.0[/code], the bottom faces "
+"will not be generated, resulting in a conic shape."
+msgstr ""
+
+#: doc/classes/CylinderMesh.xml:18
+msgid "Full height of the cylinder."
+msgstr ""
+
+#: doc/classes/CylinderMesh.xml:21
+msgid ""
+"Number of radial segments on the cylinder. Higher values result in a more "
+"detailed cylinder/cone at the cost of performance."
+msgstr ""
+
+#: doc/classes/CylinderMesh.xml:24
+msgid ""
+"Number of edge rings along the height of the cylinder. Changing [member "
+"rings] does not have any visual impact unless a shader or procedural mesh "
+"tool is used to alter the vertex data. Higher values result in more "
+"subdivisions, which can be used to create smoother-looking effects with "
+"shaders or procedural mesh tools (at the cost of performance). When not "
+"altering the vertex data using a shader or procedural mesh tool, [member "
+"rings] should be kept to its default value."
+msgstr ""
+
+#: doc/classes/CylinderMesh.xml:27
+msgid ""
+"Top radius of the cylinder. If set to [code]0.0[/code], the top faces will "
+"not be generated, resulting in a conic shape."
+msgstr ""
+
+#: doc/classes/CylinderShape.xml:4 doc/classes/CylinderShape.xml:7
+msgid "Cylinder shape for collisions."
+msgstr ""
+
+#: doc/classes/CylinderShape.xml:18
+msgid "The cylinder's height."
+msgstr ""
+
+#: doc/classes/CylinderShape.xml:21
+msgid "The cylinder's radius."
+msgstr ""
+
+#: doc/classes/DampedSpringJoint2D.xml:4
+msgid "Damped spring constraint for 2D physics."
+msgstr ""
+
+#: doc/classes/DampedSpringJoint2D.xml:7
+msgid ""
+"Damped spring constraint for 2D physics. This resembles a spring joint that "
+"always wants to go back to a given length."
+msgstr ""
+
+#: doc/classes/DampedSpringJoint2D.xml:15
+msgid ""
+"The spring joint's damping ratio. A value between [code]0[/code] and "
+"[code]1[/code]. When the two bodies move into different directions the "
+"system tries to align them to the spring axis again. A high [code]damping[/"
+"code] value forces the attached bodies to align faster."
+msgstr ""
+
+#: doc/classes/DampedSpringJoint2D.xml:18
+msgid ""
+"The spring joint's maximum length. The two attached bodies cannot stretch it "
+"past this value."
+msgstr ""
+
+#: doc/classes/DampedSpringJoint2D.xml:21
+msgid ""
+"When the bodies attached to the spring joint move they stretch or squash it. "
+"The joint always tries to resize towards this length."
+msgstr ""
+
+#: doc/classes/DampedSpringJoint2D.xml:24
+msgid ""
+"The higher the value, the less the bodies attached to the joint will deform "
+"it. The joint applies an opposing force to the bodies, the product of the "
+"stiffness multiplied by the size difference from its resting length."
+msgstr ""
+
+#: doc/classes/Dictionary.xml:4
+msgid "Dictionary type."
+msgstr ""
+
+#: doc/classes/Dictionary.xml:7
+msgid ""
+"Dictionary type. Associative container which contains values referenced by "
+"unique keys. Dictionaries are composed of pairs of keys (which must be "
+"unique) and values. Dictionaries will preserve the insertion order when "
+"adding elements, even though this may not be reflected when printing the "
+"dictionary. In other programming languages, this data structure is sometimes "
+"referred to as a hash map or associative array.\n"
+"You can define a dictionary by placing a comma-separated list of [code]key: "
+"value[/code] pairs in curly braces [code]{}[/code].\n"
+"Erasing elements while iterating over them [b]is not supported[/b] and will "
+"result in undefined behavior.\n"
+"[b]Note:[/b] Dictionaries are always passed by reference. To get a copy of a "
+"dictionary which can be modified independently of the original dictionary, "
+"use [method duplicate].\n"
+"Creating a dictionary:\n"
+"[codeblock]\n"
+"var my_dict = {} # Creates an empty dictionary.\n"
+"\n"
+"var dict_variable_key = \"Another key name\"\n"
+"var dict_variable_value = \"value2\"\n"
+"var another_dict = {\n"
+" \"Some key name\": \"value1\",\n"
+" dict_variable_key: dict_variable_value,\n"
+"}\n"
+"\n"
+"var points_dict = {\"White\": 50, \"Yellow\": 75, \"Orange\": 100}\n"
+"\n"
+"# Alternative Lua-style syntax.\n"
+"# Doesn't require quotes around keys, but only string constants can be used "
+"as key names.\n"
+"# Additionally, key names must start with a letter or an underscore.\n"
+"# Here, `some_key` is a string literal, not a variable!\n"
+"another_dict = {\n"
+" some_key = 42,\n"
+"}\n"
+"[/codeblock]\n"
+"You can access a dictionary's values by referencing the appropriate key. In "
+"the above example, [code]points_dict[\"White\"][/code] will return [code]50[/"
+"code]. You can also write [code]points_dict.White[/code], which is "
+"equivalent. However, you'll have to use the bracket syntax if the key you're "
+"accessing the dictionary with isn't a fixed string (such as a number or "
+"variable).\n"
+"[codeblock]\n"
+"export(string, \"White\", \"Yellow\", \"Orange\") var my_color\n"
+"var points_dict = {\"White\": 50, \"Yellow\": 75, \"Orange\": 100}\n"
+"func _ready():\n"
+" # We can't use dot syntax here as `my_color` is a variable.\n"
+" var points = points_dict[my_color]\n"
+"[/codeblock]\n"
+"In the above code, [code]points[/code] will be assigned the value that is "
+"paired with the appropriate color selected in [code]my_color[/code].\n"
+"Dictionaries can contain more complex data:\n"
+"[codeblock]\n"
+"my_dict = {\"First Array\": [1, 2, 3, 4]} # Assigns an Array to a String "
+"key.\n"
+"[/codeblock]\n"
+"To add a key to an existing dictionary, access it like an existing key and "
+"assign to it:\n"
+"[codeblock]\n"
+"var points_dict = {\"White\": 50, \"Yellow\": 75, \"Orange\": 100}\n"
+"points_dict[\"Blue\"] = 150 # Add \"Blue\" as a key and assign 150 as its "
+"value.\n"
+"[/codeblock]\n"
+"Finally, dictionaries can contain different types of keys and values in the "
+"same dictionary:\n"
+"[codeblock]\n"
+"# This is a valid dictionary.\n"
+"# To access the string \"Nested value\" below, use `my_dict.sub_dict."
+"sub_key` or `my_dict[\"sub_dict\"][\"sub_key\"]`.\n"
+"# Indexing styles can be mixed and matched depending on your needs.\n"
+"var my_dict = {\n"
+" \"String Key\": 5,\n"
+" 4: [1, 2, 3],\n"
+" 7: \"Hello\",\n"
+" \"sub_dict\": {\"sub_key\": \"Nested value\"},\n"
+"}\n"
+"[/codeblock]\n"
+"[b]Note:[/b] Unlike [Array]s, you can't compare dictionaries directly:\n"
+"[codeblock]\n"
+"array1 = [1, 2, 3]\n"
+"array2 = [1, 2, 3]\n"
+"\n"
+"func compare_arrays():\n"
+" print(array1 == array2) # Will print true.\n"
+"\n"
+"var dict1 = {\"a\": 1, \"b\": 2, \"c\": 3}\n"
+"var dict2 = {\"a\": 1, \"b\": 2, \"c\": 3}\n"
+"\n"
+"func compare_dictionaries():\n"
+" print(dict1 == dict2) # Will NOT print true.\n"
+"[/codeblock]\n"
+"You need to first calculate the dictionary's hash with [method hash] before "
+"you can compare them:\n"
+"[codeblock]\n"
+"var dict1 = {\"a\": 1, \"b\": 2, \"c\": 3}\n"
+"var dict2 = {\"a\": 1, \"b\": 2, \"c\": 3}\n"
+"\n"
+"func compare_dictionaries():\n"
+" print(dict1.hash() == dict2.hash()) # Will print true.\n"
+"[/codeblock]\n"
+"[b]Note:[/b] When declaring a dictionary with [code]const[/code], the "
+"dictionary itself can still be mutated by defining the values of individual "
+"keys. Using [code]const[/code] will only prevent assigning the constant with "
+"another value after it was initialized."
+msgstr ""
+
+#: doc/classes/Dictionary.xml:87
+msgid ""
+"https://docs.godotengine.org/en/3.4/getting_started/scripting/gdscript/"
+"gdscript_basics.html#dictionary"
+msgstr ""
+
+#: doc/classes/Dictionary.xml:94
+msgid "Clear the dictionary, removing all key/value pairs."
+msgstr ""
+
+#: doc/classes/Dictionary.xml:101
+msgid ""
+"Creates a copy of the dictionary, and returns it. The [code]deep[/code] "
+"parameter causes inner dictionaries and arrays to be copied recursively, but "
+"does not apply to objects."
+msgstr ""
+
+#: doc/classes/Dictionary.xml:107
+msgid "Returns [code]true[/code] if the dictionary is empty."
+msgstr ""
+
+#: doc/classes/Dictionary.xml:114
+msgid ""
+"Erase a dictionary key/value pair by key. Returns [code]true[/code] if the "
+"given key was present in the dictionary, [code]false[/code] otherwise.\n"
+"[b]Note:[/b] Don't erase elements while iterating over the dictionary. You "
+"can iterate over the [method keys] array instead."
+msgstr ""
+
+#: doc/classes/Dictionary.xml:123
+msgid ""
+"Returns the current value for the specified key in the [Dictionary]. If the "
+"key does not exist, the method returns the value of the optional default "
+"argument, or [code]null[/code] if it is omitted."
+msgstr ""
+
+#: doc/classes/Dictionary.xml:130
+msgid ""
+"Returns [code]true[/code] if the dictionary has a given key.\n"
+"[b]Note:[/b] This is equivalent to using the [code]in[/code] operator as "
+"follows:\n"
+"[codeblock]\n"
+"# Will evaluate to `true`.\n"
+"if \"godot\" in {\"godot\": \"engine\"}:\n"
+" pass\n"
+"[/codeblock]\n"
+"This method (like the [code]in[/code] operator) will evaluate to [code]true[/"
+"code] as long as the key exists, even if the associated value is [code]null[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Dictionary.xml:144
+msgid ""
+"Returns [code]true[/code] if the dictionary has all the keys in the given "
+"array."
+msgstr ""
+
+#: doc/classes/Dictionary.xml:150
+msgid ""
+"Returns a hashed integer value representing the dictionary contents. This "
+"can be used to compare dictionaries by value:\n"
+"[codeblock]\n"
+"var dict1 = {0: 10}\n"
+"var dict2 = {0: 10}\n"
+"# The line below prints `true`, whereas it would have printed `false` if "
+"both variables were compared directly.\n"
+"print(dict1.hash() == dict2.hash())\n"
+"[/codeblock]\n"
+"[b]Note:[/b] Dictionaries with the same keys/values but in a different order "
+"will have a different hash."
+msgstr ""
+
+#: doc/classes/Dictionary.xml:163
+msgid "Returns the list of keys in the [Dictionary]."
+msgstr ""
+
+#: doc/classes/Dictionary.xml:169
+msgid "Returns the number of keys in the dictionary."
+msgstr ""
+
+#: doc/classes/Dictionary.xml:175
+msgid "Returns the list of values in the [Dictionary]."
+msgstr ""
+
+#: doc/classes/DirectionalLight.xml:4
+msgid "Directional light from a distance, as from the Sun."
+msgstr ""
+
+#: doc/classes/DirectionalLight.xml:7
+msgid ""
+"A directional light is a type of [Light] node that models an infinite number "
+"of parallel rays covering the entire scene. It is used for lights with "
+"strong intensity that are located far away from the scene to model sunlight "
+"or moonlight. The worldspace location of the DirectionalLight transform "
+"(origin) is ignored. Only the basis is used to determine light direction."
+msgstr ""
+
+#: doc/classes/DirectionalLight.xml:10 doc/classes/Light.xml:10
+#: doc/classes/OmniLight.xml:11 doc/classes/SpotLight.xml:11
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/3d/lights_and_shadows.html"
+msgstr ""
+
+#: doc/classes/DirectionalLight.xml:16
+msgid ""
+"Amount of extra bias for shadow splits that are far away. If self-shadowing "
+"occurs only on the splits far away, increasing this value can fix them."
+msgstr ""
+
+#: doc/classes/DirectionalLight.xml:19
+msgid ""
+"If [code]true[/code], shadow detail is sacrificed in exchange for smoother "
+"transitions between splits."
+msgstr ""
+
+#: doc/classes/DirectionalLight.xml:22
+msgid ""
+"Optimizes shadow rendering for detail versus movement. See [enum "
+"ShadowDepthRange]."
+msgstr ""
+
+#: doc/classes/DirectionalLight.xml:25
+msgid "The maximum distance for shadow splits."
+msgstr ""
+
+#: doc/classes/DirectionalLight.xml:28
+msgid "The light's shadow rendering algorithm. See [enum ShadowMode]."
+msgstr ""
+
+#: doc/classes/DirectionalLight.xml:31
+msgid ""
+"Can be used to fix special cases of self shadowing when objects are "
+"perpendicular to the light."
+msgstr ""
+
+#: doc/classes/DirectionalLight.xml:34
+msgid ""
+"The distance from camera to shadow split 1. Relative to [member "
+"directional_shadow_max_distance]. Only used when [member "
+"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or "
+"[code]SHADOW_PARALLEL_4_SPLITS[/code]."
+msgstr ""
+
+#: doc/classes/DirectionalLight.xml:37
+msgid ""
+"The distance from shadow split 1 to split 2. Relative to [member "
+"directional_shadow_max_distance]. Only used when [member "
+"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or "
+"[code]SHADOW_PARALLEL_4_SPLITS[/code]."
+msgstr ""
+
+#: doc/classes/DirectionalLight.xml:40
+msgid ""
+"The distance from shadow split 2 to split 3. Relative to [member "
+"directional_shadow_max_distance]. Only used when [member "
+"directional_shadow_mode] is [code]SHADOW_PARALLEL_4_SPLITS[/code]."
+msgstr ""
+
+#: doc/classes/DirectionalLight.xml:46
+msgid ""
+"Renders the entire scene's shadow map from an orthogonal point of view. This "
+"is the fastest directional shadow mode. May result in blurrier shadows on "
+"close objects."
+msgstr ""
+
+#: doc/classes/DirectionalLight.xml:49
+msgid ""
+"Splits the view frustum in 2 areas, each with its own shadow map. This "
+"shadow mode is a compromise between [constant SHADOW_ORTHOGONAL] and "
+"[constant SHADOW_PARALLEL_4_SPLITS] in terms of performance."
+msgstr ""
+
+#: doc/classes/DirectionalLight.xml:52
+msgid ""
+"Splits the view frustum in 4 areas, each with its own shadow map. This is "
+"the slowest directional shadow mode."
+msgstr ""
+
+#: doc/classes/DirectionalLight.xml:55
+msgid ""
+"Keeps the shadow stable when the camera moves, at the cost of lower "
+"effective shadow resolution."
+msgstr ""
+
+#: doc/classes/DirectionalLight.xml:58
+msgid ""
+"Tries to achieve maximum shadow resolution. May result in saw effect on "
+"shadow edges. This mode typically works best in games where the camera will "
+"often move at high speeds, such as most racing games."
+msgstr ""
+
+#: doc/classes/Directory.xml:4
+msgid "Type used to handle the filesystem."
+msgstr ""
+
+#: doc/classes/Directory.xml:7
+msgid ""
+"Directory type. It is used to manage directories and their content (not "
+"restricted to the project folder).\n"
+"When creating a new [Directory], its default opened directory will be "
+"[code]res://[/code]. This may change in the future, so it is advised to "
+"always use [method open] to initialize your [Directory] where you want to "
+"operate, with explicit error checking.\n"
+"[b]Note:[/b] Many resources types are imported (e.g. textures or sound "
+"files), and their source asset will not be included in the exported game, as "
+"only the imported version is used. Use [ResourceLoader] to access imported "
+"resources.\n"
+"Here is an example on how to iterate through the files of a directory:\n"
+"[codeblock]\n"
+"func dir_contents(path):\n"
+" var dir = Directory.new()\n"
+" if dir.open(path) == OK:\n"
+" dir.list_dir_begin()\n"
+" var file_name = dir.get_next()\n"
+" while file_name != \"\":\n"
+" if dir.current_is_dir():\n"
+" print(\"Found directory: \" + file_name)\n"
+" else:\n"
+" print(\"Found file: \" + file_name)\n"
+" file_name = dir.get_next()\n"
+" else:\n"
+" print(\"An error occurred when trying to access the path.\")\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Directory.xml:28 doc/classes/File.xml:28
+msgid ""
+"https://docs.godotengine.org/en/3.4/getting_started/step_by_step/filesystem."
+"html"
+msgstr ""
+
+#: doc/classes/Directory.xml:35
+msgid ""
+"Changes the currently opened directory to the one passed as an argument. The "
+"argument can be relative to the current directory (e.g. [code]newdir[/code] "
+"or [code]../newdir[/code]), or an absolute path (e.g. [code]/tmp/newdir[/"
+"code] or [code]res://somedir/newdir[/code]).\n"
+"Returns one of the [enum Error] code constants ([code]OK[/code] on success)."
+msgstr ""
+
+#: doc/classes/Directory.xml:44
+msgid ""
+"Copies the [code]from[/code] file to the [code]to[/code] destination. Both "
+"arguments should be paths to files, either relative or absolute. If the "
+"destination file exists and is not access-protected, it will be "
+"overwritten.\n"
+"Returns one of the [enum Error] code constants ([code]OK[/code] on success)."
+msgstr ""
+
+#: doc/classes/Directory.xml:51
+msgid ""
+"Returns whether the current item processed with the last [method get_next] "
+"call is a directory ([code].[/code] and [code]..[/code] are considered "
+"directories)."
+msgstr ""
+
+#: doc/classes/Directory.xml:58
+msgid ""
+"Returns whether the target directory exists. The argument can be relative to "
+"the current directory, or an absolute path."
+msgstr ""
+
+#: doc/classes/Directory.xml:65
+msgid ""
+"Returns whether the target file exists. The argument can be relative to the "
+"current directory, or an absolute path."
+msgstr ""
+
+#: doc/classes/Directory.xml:71
+msgid ""
+"Returns the absolute path to the currently opened directory (e.g. "
+"[code]res://folder[/code] or [code]C:\\tmp\\folder[/code])."
+msgstr ""
+
+#: doc/classes/Directory.xml:77
+msgid ""
+"Returns the currently opened directory's drive index. See [method get_drive] "
+"to convert returned index to the name of the drive."
+msgstr ""
+
+#: doc/classes/Directory.xml:84
+msgid ""
+"On Windows, returns the name of the drive (partition) passed as an argument "
+"(e.g. [code]C:[/code]). On other platforms, or if the requested drive does "
+"not exist, the method returns an empty String."
+msgstr ""
+
+#: doc/classes/Directory.xml:90
+msgid ""
+"On Windows, returns the number of drives (partitions) mounted on the current "
+"filesystem. On other platforms, the method returns 0."
+msgstr ""
+
+#: doc/classes/Directory.xml:96
+msgid ""
+"Returns the next element (file or directory) in the current directory "
+"(including [code].[/code] and [code]..[/code], unless "
+"[code]skip_navigational[/code] was given to [method list_dir_begin]).\n"
+"The name of the file or directory is returned (and not its full path). Once "
+"the stream has been fully processed, the method returns an empty String and "
+"closes the stream automatically (i.e. [method list_dir_end] would not be "
+"mandatory in such a case)."
+msgstr ""
+
+#: doc/classes/Directory.xml:103
+msgid ""
+"On UNIX desktop systems, returns the available space on the current "
+"directory's disk. On other platforms, this information is not available and "
+"the method returns 0 or -1."
+msgstr ""
+
+#: doc/classes/Directory.xml:111
+msgid ""
+"Initializes the stream used to list all files and directories using the "
+"[method get_next] function, closing the currently opened stream if needed. "
+"Once the stream has been processed, it should typically be closed with "
+"[method list_dir_end].\n"
+"If [code]skip_navigational[/code] is [code]true[/code], [code].[/code] and "
+"[code]..[/code] are filtered out.\n"
+"If [code]skip_hidden[/code] is [code]true[/code], hidden files are filtered "
+"out."
+msgstr ""
+
+#: doc/classes/Directory.xml:119
+msgid ""
+"Closes the current stream opened with [method list_dir_begin] (whether it "
+"has been fully processed with [method get_next] does not matter)."
+msgstr ""
+
+#: doc/classes/Directory.xml:126
+msgid ""
+"Creates a directory. The argument can be relative to the current directory, "
+"or an absolute path. The target directory should be placed in an already "
+"existing directory (to create the full path recursively, see [method "
+"make_dir_recursive]).\n"
+"Returns one of the [enum Error] code constants ([code]OK[/code] on success)."
+msgstr ""
+
+#: doc/classes/Directory.xml:134
+msgid ""
+"Creates a target directory and all necessary intermediate directories in its "
+"path, by calling [method make_dir] recursively. The argument can be relative "
+"to the current directory, or an absolute path.\n"
+"Returns one of the [enum Error] code constants ([code]OK[/code] on success)."
+msgstr ""
+
+#: doc/classes/Directory.xml:142
+msgid ""
+"Opens an existing directory of the filesystem. The [code]path[/code] "
+"argument can be within the project tree ([code]res://folder[/code]), the "
+"user directory ([code]user://folder[/code]) or an absolute path of the user "
+"filesystem (e.g. [code]/tmp/folder[/code] or [code]C:\\tmp\\folder[/code]).\n"
+"Returns one of the [enum Error] code constants ([code]OK[/code] on success)."
+msgstr ""
+
+#: doc/classes/Directory.xml:150
+msgid ""
+"Deletes the target file or an empty directory. The argument can be relative "
+"to the current directory, or an absolute path. If the target directory is "
+"not empty, the operation will fail.\n"
+"Returns one of the [enum Error] code constants ([code]OK[/code] on success)."
+msgstr ""
+
+#: doc/classes/Directory.xml:159
+msgid ""
+"Renames (move) the [code]from[/code] file or directory to the [code]to[/"
+"code] destination. Both arguments should be paths to files or directories, "
+"either relative or absolute. If the destination file or directory exists and "
+"is not access-protected, it will be overwritten.\n"
+"Returns one of the [enum Error] code constants ([code]OK[/code] on success)."
+msgstr ""
+
+#: doc/classes/DTLSServer.xml:4
+msgid "Helper class to implement a DTLS server."
+msgstr ""
+
+#: doc/classes/DTLSServer.xml:7
+msgid ""
+"This class is used to store the state of a DTLS server. Upon [method setup] "
+"it converts connected [PacketPeerUDP] to [PacketPeerDTLS] accepting them via "
+"[method take_connection] as DTLS clients. Under the hood, this class is used "
+"to store the DTLS state and cookies of the server. The reason of why the "
+"state and cookies are needed is outside of the scope of this documentation.\n"
+"Below a small example of how to use it:\n"
+"[codeblock]\n"
+"# server.gd\n"
+"extends Node\n"
+"\n"
+"var dtls := DTLSServer.new()\n"
+"var server := UDPServer.new()\n"
+"var peers = []\n"
+"\n"
+"func _ready():\n"
+" server.listen(4242)\n"
+" var key = load(\"key.key\") # Your private key.\n"
+" var cert = load(\"cert.crt\") # Your X509 certificate.\n"
+" dtls.setup(key, cert)\n"
+"\n"
+"func _process(delta):\n"
+" while server.is_connection_available():\n"
+" var peer : PacketPeerUDP = server.take_connection()\n"
+" var dtls_peer : PacketPeerDTLS = dtls.take_connection(peer)\n"
+" if dtls_peer.get_status() != PacketPeerDTLS.STATUS_HANDSHAKING:\n"
+" continue # It is normal that 50% of the connections fails due to "
+"cookie exchange.\n"
+" print(\"Peer connected!\")\n"
+" peers.append(dtls_peer)\n"
+" for p in peers:\n"
+" p.poll() # Must poll to update the state.\n"
+" if p.get_status() == PacketPeerDTLS.STATUS_CONNECTED:\n"
+" while p.get_available_packet_count() > 0:\n"
+" print(\"Received message from client: %s\" % p.get_packet()."
+"get_string_from_utf8())\n"
+" p.put_packet(\"Hello DTLS client\".to_utf8())\n"
+"[/codeblock]\n"
+"[codeblock]\n"
+"# client.gd\n"
+"extends Node\n"
+"\n"
+"var dtls := PacketPeerDTLS.new()\n"
+"var udp := PacketPeerUDP.new()\n"
+"var connected = false\n"
+"\n"
+"func _ready():\n"
+" udp.connect_to_host(\"127.0.0.1\", 4242)\n"
+" dtls.connect_to_peer(udp, false) # Use true in production for "
+"certificate validation!\n"
+"\n"
+"func _process(delta):\n"
+" dtls.poll()\n"
+" if dtls.get_status() == PacketPeerDTLS.STATUS_CONNECTED:\n"
+" if !connected:\n"
+" # Try to contact server\n"
+" dtls.put_packet(\"The answer is... 42!\".to_utf8())\n"
+" while dtls.get_available_packet_count() > 0:\n"
+" print(\"Connected: %s\" % dtls.get_packet()."
+"get_string_from_utf8())\n"
+" connected = true\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/DTLSServer.xml:70
+msgid ""
+"Setup the DTLS server to use the given [code]private_key[/code] and provide "
+"the given [code]certificate[/code] to clients. You can pass the optional "
+"[code]chain[/code] parameter to provide additional CA chain information "
+"along with the certificate."
+msgstr ""
+
+#: doc/classes/DTLSServer.xml:77
+msgid ""
+"Try to initiate the DTLS handshake with the given [code]udp_peer[/code] "
+"which must be already connected (see [method PacketPeerUDP."
+"connect_to_host]).\n"
+"[b]Note:[/b] You must check that the state of the return PacketPeerUDP is "
+"[constant PacketPeerDTLS.STATUS_HANDSHAKING], as it is normal that 50% of "
+"the new connections will be invalid due to cookie exchange."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:4
+msgid "DynamicFont renders vector font files at runtime."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:7
+msgid ""
+"DynamicFont renders vector font files dynamically at runtime instead of "
+"using a prerendered texture atlas like [BitmapFont]. This trades the faster "
+"loading time of [BitmapFont]s for the ability to change font parameters like "
+"size and spacing during runtime. [DynamicFontData] is used for referencing "
+"the font file paths. DynamicFont also supports defining one or more fallback "
+"fonts, which will be used when displaying a character not supported by the "
+"main font.\n"
+"DynamicFont uses the [url=https://www.freetype.org/]FreeType[/url] library "
+"for rasterization. Supported formats are TrueType ([code].ttf[/code]), "
+"OpenType ([code].otf[/code]) and Web Open Font Format 1 ([code].woff[/"
+"code]). Web Open Font Format 2 ([code].woff2[/code]) is [i]not[/i] "
+"supported.\n"
+"[codeblock]\n"
+"var dynamic_font = DynamicFont.new()\n"
+"dynamic_font.font_data = load(\"res://BarlowCondensed-Bold.ttf\")\n"
+"dynamic_font.size = 64\n"
+"$\"Label\".set(\"custom_fonts/font\", dynamic_font)\n"
+"[/codeblock]\n"
+"[b]Note:[/b] DynamicFont doesn't support features such as kerning, right-to-"
+"left typesetting, ligatures, text shaping, variable fonts and optional font "
+"features yet. If you wish to \"bake\" an optional font feature into a TTF "
+"font file, you can use [url=https://fontforge.org/]FontForge[/url] to do so. "
+"In FontForge, use [b]File > Generate Fonts[/b], click [b]Options[/b], choose "
+"the desired features then generate the font."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:25
+msgid "Adds a fallback font."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:31
+msgid ""
+"Returns a string containing all the characters available in the main and all "
+"the fallback fonts.\n"
+"If a given character is included in more than one font, it appears only once "
+"in the returned string."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:39
+msgid "Returns the fallback font at index [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:45
+msgid "Returns the number of fallback fonts."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:52
+msgid ""
+"Returns the spacing for the given [code]type[/code] (see [enum SpacingType])."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:59
+msgid "Removes the fallback font at index [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:67
+msgid "Sets the fallback font at index [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:75
+msgid ""
+"Sets the spacing for [code]type[/code] (see [enum SpacingType]) to "
+"[code]value[/code] in pixels (not relative to the font size)."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:81
+msgid "Extra spacing at the bottom in pixels."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:84
+msgid ""
+"Extra spacing for each character in pixels.\n"
+"This can be a negative number to make the distance between characters "
+"smaller."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:88
+msgid ""
+"Extra spacing for the space character (in addition to [member "
+"extra_spacing_char]) in pixels.\n"
+"This can be a negative number to make the distance between words smaller."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:92
+msgid "Extra spacing at the top in pixels."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:95
+msgid "The font data."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:98
+msgid ""
+"The font outline's color.\n"
+"[b]Note:[/b] It's recommended to leave this at the default value so that you "
+"can adjust it in individual controls. For example, if the outline is made "
+"black here, it won't be possible to change its color using a Label's font "
+"outline modulate theme item."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:102
+msgid "The font outline's thickness in pixels (not relative to the font size)."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:105
+msgid "The font size in pixels."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:108
+msgid ""
+"If [code]true[/code], filtering is used. This makes the font blurry instead "
+"of pixelated when scaling it if font oversampling is disabled or "
+"ineffective. It's recommended to enable this when using the font in a "
+"control whose size changes over time, unless a pixel art aesthetic is "
+"desired."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:111
+msgid ""
+"If [code]true[/code], mipmapping is used. This improves the font's "
+"appearance when downscaling it if font oversampling is disabled or "
+"ineffective."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:116
+msgid "Spacing at the top."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:119
+msgid "Spacing at the bottom."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:122
+msgid "Spacing for each character."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:125
+msgid "Spacing for the space character."
+msgstr ""
+
+#: doc/classes/DynamicFontData.xml:4
+msgid "Used with [DynamicFont] to describe the location of a font file."
+msgstr ""
+
+#: doc/classes/DynamicFontData.xml:7
+msgid ""
+"Used with [DynamicFont] to describe the location of a vector font file for "
+"dynamic rendering at runtime."
+msgstr ""
+
+#: doc/classes/DynamicFontData.xml:16
+msgid ""
+"If [code]true[/code], the font is rendered with anti-aliasing. This property "
+"applies both to the main font and its outline (if it has one)."
+msgstr ""
+
+#: doc/classes/DynamicFontData.xml:19
+msgid "The path to the vector font file."
+msgstr ""
+
+#: doc/classes/DynamicFontData.xml:22
+msgid "The font hinting mode used by FreeType. See [enum Hinting] for options."
+msgstr ""
+
+#: doc/classes/DynamicFontData.xml:27
+msgid "Disables font hinting (smoother but less crisp)."
+msgstr ""
+
+#: doc/classes/DynamicFontData.xml:30
+msgid "Use the light font hinting mode."
+msgstr ""
+
+#: doc/classes/DynamicFontData.xml:33
+msgid "Use the default font hinting mode (crisper but less smooth)."
+msgstr ""
+
+#: doc/classes/EditorExportPlugin.xml:4
+msgid "A script that is executed when exporting the project."
+msgstr ""
+
+#: doc/classes/EditorExportPlugin.xml:7
+msgid ""
+"Editor export plugins are automatically activated whenever the user exports "
+"the project. Their most common use is to determine what files are being "
+"included in the exported project. For each plugin, [method _export_begin] is "
+"called at the beginning of the export process and then [method _export_file] "
+"is called for each exported file."
+msgstr ""
+
+#: doc/classes/EditorExportPlugin.xml:19
+msgid ""
+"Virtual method to be overridden by the user. It is called when the export "
+"starts and provides all information about the export. [code]features[/code] "
+"is the list of features for the export, [code]is_debug[/code] is [code]true[/"
+"code] for debug builds, [code]path[/code] is the target path for the "
+"exported project. [code]flags[/code] is only used when running a runnable "
+"profile, e.g. when using native run on Android."
+msgstr ""
+
+#: doc/classes/EditorExportPlugin.xml:25
+msgid ""
+"Virtual method to be overridden by the user. Called when the export is "
+"finished."
+msgstr ""
+
+#: doc/classes/EditorExportPlugin.xml:34
+msgid ""
+"Virtual method to be overridden by the user. Called for each exported file, "
+"providing arguments that can be used to identify the file. [code]path[/code] "
+"is the path of the file, [code]type[/code] is the [Resource] represented by "
+"the file (e.g. [PackedScene]) and [code]features[/code] is the list of "
+"features for the export.\n"
+"Calling [method skip] inside this callback will make the file not included "
+"in the export."
+msgstr ""
+
+#: doc/classes/EditorExportPlugin.xml:44
+msgid ""
+"Adds a custom file to be exported. [code]path[/code] is the virtual path "
+"that can be used to load the file, [code]file[/code] is the binary data of "
+"the file. If [code]remap[/code] is [code]true[/code], file will not be "
+"exported, but instead remapped to the given [code]path[/code]."
+msgstr ""
+
+#: doc/classes/EditorExportPlugin.xml:51
+msgid ""
+"Adds an iOS bundle file from the given [code]path[/code] to the exported "
+"project."
+msgstr ""
+
+#: doc/classes/EditorExportPlugin.xml:58
+msgid ""
+"Adds a C++ code to the iOS export. The final code is created from the code "
+"appended by each active export plugin."
+msgstr ""
+
+#: doc/classes/EditorExportPlugin.xml:65
+msgid ""
+"Adds a dynamic library (*.dylib, *.framework) to Linking Phase in iOS's "
+"Xcode project and embeds it into resulting binary.\n"
+"[b]Note:[/b] For static libraries (*.a) works in same way as [method "
+"add_ios_framework].\n"
+"This method should not be used for System libraries as they are already "
+"present on the device."
+msgstr ""
+
+#: doc/classes/EditorExportPlugin.xml:74
+msgid ""
+"Adds a static library (*.a) or dynamic library (*.dylib, *.framework) to "
+"Linking Phase in iOS's Xcode project."
+msgstr ""
+
+#: doc/classes/EditorExportPlugin.xml:81
+msgid "Adds linker flags for the iOS export."
+msgstr ""
+
+#: doc/classes/EditorExportPlugin.xml:88
+msgid "Adds content for iOS Property List files."
+msgstr ""
+
+#: doc/classes/EditorExportPlugin.xml:95
+msgid "Adds a static lib from the given [code]path[/code] to the iOS project."
+msgstr ""
+
+#: doc/classes/EditorExportPlugin.xml:103
+msgid ""
+"Adds a shared object with the given [code]tags[/code] and destination "
+"[code]path[/code]."
+msgstr ""
+
+#: doc/classes/EditorExportPlugin.xml:109
+msgid ""
+"To be called inside [method _export_file]. Skips the current file, so it's "
+"not included in the export."
+msgstr ""
+
+#: doc/classes/EditorFeatureProfile.xml:4
+msgid ""
+"An editor feature profile which can be used to disable specific features."
+msgstr ""
+
+#: doc/classes/EditorFeatureProfile.xml:7
+msgid ""
+"An editor feature profile can be used to disable specific features of the "
+"Godot editor. When disabled, the features won't appear in the editor, which "
+"makes the editor less cluttered. This is useful in education settings to "
+"reduce confusion or when working in a team. For example, artists and level "
+"designers could use a feature profile that disables the script editor to "
+"avoid accidentally making changes to files they aren't supposed to edit.\n"
+"To manage editor feature profiles visually, use [b]Editor > Manage Feature "
+"Profiles...[/b] at the top of the editor window."
+msgstr ""
+
+#: doc/classes/EditorFeatureProfile.xml:17
+msgid "Returns the specified [code]feature[/code]'s human-readable name."
+msgstr ""
+
+#: doc/classes/EditorFeatureProfile.xml:24
+msgid ""
+"Returns [code]true[/code] if the class specified by [code]class_name[/code] "
+"is disabled. When disabled, the class won't appear in the Create New Node "
+"dialog."
+msgstr ""
+
+#: doc/classes/EditorFeatureProfile.xml:31
+msgid ""
+"Returns [code]true[/code] if editing for the class specified by "
+"[code]class_name[/code] is disabled. When disabled, the class will still "
+"appear in the Create New Node dialog but the inspector will be read-only "
+"when selecting a node that extends the class."
+msgstr ""
+
+#: doc/classes/EditorFeatureProfile.xml:39
+msgid ""
+"Returns [code]true[/code] if [code]property[/code] is disabled in the class "
+"specified by [code]class_name[/code]. When a property is disabled, it won't "
+"appear in the inspector when selecting a node that extends the class "
+"specified by [code]class_name[/code]."
+msgstr ""
+
+#: doc/classes/EditorFeatureProfile.xml:46
+msgid ""
+"Returns [code]true[/code] if the [code]feature[/code] is disabled. When a "
+"feature is disabled, it will disappear from the editor entirely."
+msgstr ""
+
+#: doc/classes/EditorFeatureProfile.xml:53
+msgid ""
+"Loads an editor feature profile from a file. The file must follow the JSON "
+"format obtained by using the feature profile manager's [b]Export[/b] button "
+"or the [method save_to_file] method."
+msgstr ""
+
+#: doc/classes/EditorFeatureProfile.xml:60
+msgid ""
+"Saves the editor feature profile to a file in JSON format. It can then be "
+"imported using the feature profile manager's [b]Import[/b] button or the "
+"[method load_from_file] button."
+msgstr ""
+
+#: doc/classes/EditorFeatureProfile.xml:68
+msgid ""
+"If [code]disable[/code] is [code]true[/code], disables the class specified "
+"by [code]class_name[/code]. When disabled, the class won't appear in the "
+"Create New Node dialog."
+msgstr ""
+
+#: doc/classes/EditorFeatureProfile.xml:76
+msgid ""
+"If [code]disable[/code] is [code]true[/code], disables editing for the class "
+"specified by [code]class_name[/code]. When disabled, the class will still "
+"appear in the Create New Node dialog but the inspector will be read-only "
+"when selecting a node that extends the class."
+msgstr ""
+
+#: doc/classes/EditorFeatureProfile.xml:85
+msgid ""
+"If [code]disable[/code] is [code]true[/code], disables editing for "
+"[code]property[/code] in the class specified by [code]class_name[/code]. "
+"When a property is disabled, it won't appear in the inspector when selecting "
+"a node that extends the class specified by [code]class_name[/code]."
+msgstr ""
+
+#: doc/classes/EditorFeatureProfile.xml:93
+msgid ""
+"If [code]disable[/code] is [code]true[/code], disables the editor feature "
+"specified in [code]feature[/code]. When a feature is disabled, it will "
+"disappear from the editor entirely."
+msgstr ""
+
+#: doc/classes/EditorFeatureProfile.xml:99
+msgid ""
+"The 3D editor. If this feature is disabled, the 3D editor won't display but "
+"3D nodes will still display in the Create New Node dialog."
+msgstr ""
+
+#: doc/classes/EditorFeatureProfile.xml:102
+msgid ""
+"The Script tab, which contains the script editor and class reference "
+"browser. If this feature is disabled, the Script tab won't display."
+msgstr ""
+
+#: doc/classes/EditorFeatureProfile.xml:105
+msgid ""
+"The AssetLib tab. If this feature is disabled, the AssetLib tab won't "
+"display."
+msgstr ""
+
+#: doc/classes/EditorFeatureProfile.xml:108
+msgid ""
+"Scene tree editing. If this feature is disabled, the Scene tree dock will "
+"still be visible but will be read-only."
+msgstr ""
+
+#: doc/classes/EditorFeatureProfile.xml:111
+msgid ""
+"The Node dock. If this feature is disabled, signals and groups won't be "
+"visible and modifiable from the editor."
+msgstr ""
+
+#: doc/classes/EditorFeatureProfile.xml:114
+msgid ""
+"The FileSystem dock. If this feature is disabled, the FileSystem dock won't "
+"be visible."
+msgstr ""
+
+#: doc/classes/EditorFeatureProfile.xml:117
+msgid ""
+"The Import dock. If this feature is disabled, the Import dock won't be "
+"visible."
+msgstr ""
+
+#: doc/classes/EditorFeatureProfile.xml:120 doc/classes/SpatialMaterial.xml:471
+msgid "Represents the size of the [enum Feature] enum."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:4
+msgid "A modified version of [FileDialog] used by the editor."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:15
+msgid ""
+"Adds a comma-delimited file extension filter option to the "
+"[EditorFileDialog] with an optional semi-colon-delimited label.\n"
+"For example, [code]\"*.tscn, *.scn; Scenes\"[/code] results in filter text "
+"\"Scenes (*.tscn, *.scn)\"."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:22
+msgid "Removes all filters except for \"All Files (*)\"."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:28
+msgid ""
+"Returns the [code]VBoxContainer[/code] used to display the file system.\n"
+"[b]Warning:[/b] This is a required internal node, removing and freeing it "
+"may cause a crash. If you wish to hide it or any of its children, use their "
+"[member CanvasItem.visible] property."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:35
+msgid ""
+"Notify the [EditorFileDialog] that its view of the data is no longer "
+"accurate. Updates the view contents on next view update."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:41
+msgid ""
+"The location from which the user may select a file, including [code]res://[/"
+"code], [code]user://[/code], and the local file system."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:44
+msgid "The currently occupied directory."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:47
+msgid "The currently selected file."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:50
+msgid "The file system path in the address bar."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:54
+msgid ""
+"If [code]true[/code], the [EditorFileDialog] will not warn the user before "
+"overwriting files."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:57
+msgid ""
+"The view format in which the [EditorFileDialog] displays resources to the "
+"user."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:60
+msgid ""
+"The purpose of the [EditorFileDialog], which defines the allowed behaviors."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:64
+msgid ""
+"If [code]true[/code], hidden files and directories will be visible in the "
+"[EditorFileDialog]."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:72
+msgid "Emitted when a directory is selected."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:78
+msgid "Emitted when a file is selected."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:84
+msgid "Emitted when multiple files are selected."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:90
+msgid ""
+"The [EditorFileDialog] can select only one file. Accepting the window will "
+"open the file."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:93
+msgid ""
+"The [EditorFileDialog] can select multiple files. Accepting the window will "
+"open all files."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:96
+msgid ""
+"The [EditorFileDialog] can select only one directory. Accepting the window "
+"will open the directory."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:99
+msgid ""
+"The [EditorFileDialog] can select a file or directory. Accepting the window "
+"will open it."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:102
+msgid ""
+"The [EditorFileDialog] can select only one file. Accepting the window will "
+"save the file."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:105
+msgid ""
+"The [EditorFileDialog] can only view [code]res://[/code] directory contents."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:108
+msgid ""
+"The [EditorFileDialog] can only view [code]user://[/code] directory contents."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:111
+msgid "The [EditorFileDialog] can view the entire local file system."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:114
+msgid "The [EditorFileDialog] displays resources as thumbnails."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:117
+msgid "The [EditorFileDialog] displays resources as a list of filenames."
+msgstr ""
+
+#: doc/classes/EditorFileSystem.xml:4
+msgid "Resource filesystem, as the editor sees it."
+msgstr ""
+
+#: doc/classes/EditorFileSystem.xml:7
+msgid ""
+"This object holds information of all resources in the filesystem, their "
+"types, etc.\n"
+"[b]Note:[/b] This class shouldn't be instantiated directly. Instead, access "
+"the singleton using [method EditorInterface.get_resource_filesystem]."
+msgstr ""
+
+#: doc/classes/EditorFileSystem.xml:17
+msgid ""
+"Returns the resource type of the file, given the full path. This returns a "
+"string such as [code]\"Resource\"[/code] or [code]\"GDScript\"[/code], "
+"[i]not[/i] a file extension such as [code]\".gd\"[/code]."
+msgstr ""
+
+#: doc/classes/EditorFileSystem.xml:23
+msgid "Gets the root directory object."
+msgstr ""
+
+#: doc/classes/EditorFileSystem.xml:30
+msgid "Returns a view into the filesystem at [code]path[/code]."
+msgstr ""
+
+#: doc/classes/EditorFileSystem.xml:36
+msgid "Returns the scan progress for 0 to 1 if the FS is being scanned."
+msgstr ""
+
+#: doc/classes/EditorFileSystem.xml:42
+msgid "Returns [code]true[/code] of the filesystem is being scanned."
+msgstr ""
+
+#: doc/classes/EditorFileSystem.xml:48
+msgid "Scan the filesystem for changes."
+msgstr ""
+
+#: doc/classes/EditorFileSystem.xml:54
+msgid "Check if the source of any imported resource changed."
+msgstr ""
+
+#: doc/classes/EditorFileSystem.xml:61
+msgid ""
+"Update a file information. Call this if an external program (not Godot) "
+"modified the file."
+msgstr ""
+
+#: doc/classes/EditorFileSystem.xml:67
+msgid "Scans the script files and updates the list of custom class names."
+msgstr ""
+
+#: doc/classes/EditorFileSystem.xml:74
+msgid "Emitted if the filesystem changed."
+msgstr ""
+
+#: doc/classes/EditorFileSystem.xml:80
+msgid "Emitted if a resource is reimported."
+msgstr ""
+
+#: doc/classes/EditorFileSystem.xml:86
+msgid ""
+"Emitted if at least one resource is reloaded when the filesystem is scanned."
+msgstr ""
+
+#: doc/classes/EditorFileSystem.xml:92
+msgid "Emitted if the source of any imported file changed."
+msgstr ""
+
+#: doc/classes/EditorFileSystemDirectory.xml:4
+msgid "A directory for the resource filesystem."
+msgstr ""
+
+#: doc/classes/EditorFileSystemDirectory.xml:7
+msgid "A more generalized, low-level variation of the directory concept."
+msgstr ""
+
+#: doc/classes/EditorFileSystemDirectory.xml:16
+msgid ""
+"Returns the index of the directory with name [code]name[/code] or [code]-1[/"
+"code] if not found."
+msgstr ""
+
+#: doc/classes/EditorFileSystemDirectory.xml:23
+msgid ""
+"Returns the index of the file with name [code]name[/code] or [code]-1[/code] "
+"if not found."
+msgstr ""
+
+#: doc/classes/EditorFileSystemDirectory.xml:30
+msgid "Returns the name of the file at index [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/EditorFileSystemDirectory.xml:36
+msgid "Returns the number of files in this directory."
+msgstr ""
+
+#: doc/classes/EditorFileSystemDirectory.xml:43
+msgid ""
+"Returns [code]true[/code] if the file at index [code]idx[/code] imported "
+"properly."
+msgstr ""
+
+#: doc/classes/EditorFileSystemDirectory.xml:50
+msgid "Returns the path to the file at index [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/EditorFileSystemDirectory.xml:57
+msgid ""
+"Returns the base class of the script class defined in the file at index "
+"[code]idx[/code]. If the file doesn't define a script class using the "
+"[code]class_name[/code] syntax, this will return an empty string."
+msgstr ""
+
+#: doc/classes/EditorFileSystemDirectory.xml:64
+msgid ""
+"Returns the name of the script class defined in the file at index [code]idx[/"
+"code]. If the file doesn't define a script class using the [code]class_name[/"
+"code] syntax, this will return an empty string."
+msgstr ""
+
+#: doc/classes/EditorFileSystemDirectory.xml:71
+msgid ""
+"Returns the resource type of the file at index [code]idx[/code]. This "
+"returns a string such as [code]\"Resource\"[/code] or [code]\"GDScript\"[/"
+"code], [i]not[/i] a file extension such as [code]\".gd\"[/code]."
+msgstr ""
+
+#: doc/classes/EditorFileSystemDirectory.xml:77
+msgid "Returns the name of this directory."
+msgstr ""
+
+#: doc/classes/EditorFileSystemDirectory.xml:83
+msgid ""
+"Returns the parent directory for this directory or [code]null[/code] if "
+"called on a directory at [code]res://[/code] or [code]user://[/code]."
+msgstr ""
+
+#: doc/classes/EditorFileSystemDirectory.xml:89
+msgid "Returns the path to this directory."
+msgstr ""
+
+#: doc/classes/EditorFileSystemDirectory.xml:96
+msgid "Returns the subdirectory at index [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/EditorFileSystemDirectory.xml:102
+msgid "Returns the number of subdirectories in this directory."
+msgstr ""
+
+#: doc/classes/EditorImportPlugin.xml:4
+msgid ""
+"Registers a custom resource importer in the editor. Use the class to parse "
+"any file and import it as a new resource type."
+msgstr ""
+
+#: doc/classes/EditorImportPlugin.xml:7
+msgid ""
+"EditorImportPlugins provide a way to extend the editor's resource import "
+"functionality. Use them to import resources from custom files or to provide "
+"alternatives to the editor's existing importers. Register your "
+"[EditorPlugin] with [method EditorPlugin.add_import_plugin].\n"
+"EditorImportPlugins work by associating with specific file extensions and a "
+"resource type. See [method get_recognized_extensions] and [method "
+"get_resource_type]. They may optionally specify some import presets that "
+"affect the import process. EditorImportPlugins are responsible for creating "
+"the resources and saving them in the [code].import[/code] directory (see "
+"[member ProjectSettings.application/config/"
+"use_hidden_project_data_directory]).\n"
+"Below is an example EditorImportPlugin that imports a [Mesh] from a file "
+"with the extension \".special\" or \".spec\":\n"
+"[codeblock]\n"
+"tool\n"
+"extends EditorImportPlugin\n"
+"\n"
+"func get_importer_name():\n"
+" return \"my.special.plugin\"\n"
+"\n"
+"func get_visible_name():\n"
+" return \"Special Mesh\"\n"
+"\n"
+"func get_recognized_extensions():\n"
+" return [\"special\", \"spec\"]\n"
+"\n"
+"func get_save_extension():\n"
+" return \"mesh\"\n"
+"\n"
+"func get_resource_type():\n"
+" return \"Mesh\"\n"
+"\n"
+"func get_preset_count():\n"
+" return 1\n"
+"\n"
+"func get_preset_name(i):\n"
+" return \"Default\"\n"
+"\n"
+"func get_import_options(i):\n"
+" return [{\"name\": \"my_option\", \"default_value\": false}]\n"
+"\n"
+"func import(source_file, save_path, options, platform_variants, gen_files):\n"
+" var file = File.new()\n"
+" if file.open(source_file, File.READ) != OK:\n"
+" return FAILED\n"
+"\n"
+" var mesh = Mesh.new()\n"
+" # Fill the Mesh with data read in \"file\", left as an exercise to the "
+"reader\n"
+"\n"
+" var filename = save_path + \".\" + get_save_extension()\n"
+" return ResourceSaver.save(filename, mesh)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/EditorImportPlugin.xml:51 doc/classes/ResourceImporter.xml:10
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/plugins/editor/import_plugins."
+"html"
+msgstr ""
+
+#: doc/classes/EditorImportPlugin.xml:58
+msgid ""
+"Gets the options and default values for the preset at this index. Returns an "
+"Array of Dictionaries with the following keys: [code]name[/code], "
+"[code]default_value[/code], [code]property_hint[/code] (optional), "
+"[code]hint_string[/code] (optional), [code]usage[/code] (optional)."
+msgstr ""
+
+#: doc/classes/EditorImportPlugin.xml:64
+msgid ""
+"Gets the order of this importer to be run when importing resources. "
+"Importers with [i]lower[/i] import orders will be called first, and higher "
+"values will be called later. Use this to ensure the importer runs after the "
+"dependencies are already imported. The default import order is [code]0[/"
+"code] unless overridden by a specific importer. See [enum ResourceImporter."
+"ImportOrder] for some predefined values."
+msgstr ""
+
+#: doc/classes/EditorImportPlugin.xml:70
+msgid "Gets the unique name of the importer."
+msgstr ""
+
+#: doc/classes/EditorImportPlugin.xml:78
+msgid ""
+"This method can be overridden to hide specific import options if conditions "
+"are met. This is mainly useful for hiding options that depend on others if "
+"one of them is disabled. For example:\n"
+"[codeblock]\n"
+"func get_option_visibility(option, options):\n"
+" # Only show the lossy quality setting if the compression mode is set to "
+"\"Lossy\".\n"
+" if option == \"compress/lossy_quality\" and options.has(\"compress/mode"
+"\"):\n"
+" return int(options[\"compress/mode\"]) == COMPRESS_LOSSY\n"
+"\n"
+" return true\n"
+"[/codeblock]\n"
+"Return [code]true[/code] to make all options always visible."
+msgstr ""
+
+#: doc/classes/EditorImportPlugin.xml:93
+msgid ""
+"Gets the number of initial presets defined by the plugin. Use [method "
+"get_import_options] to get the default options for the preset and [method "
+"get_preset_name] to get the name of the preset."
+msgstr ""
+
+#: doc/classes/EditorImportPlugin.xml:100
+msgid "Gets the name of the options preset at this index."
+msgstr ""
+
+#: doc/classes/EditorImportPlugin.xml:106
+msgid ""
+"Gets the priority of this plugin for the recognized extension. Higher "
+"priority plugins will be preferred. The default priority is [code]1.0[/code]."
+msgstr ""
+
+#: doc/classes/EditorImportPlugin.xml:112
+msgid ""
+"Gets the list of file extensions to associate with this loader (case-"
+"insensitive). e.g. [code][\"obj\"][/code]."
+msgstr ""
+
+#: doc/classes/EditorImportPlugin.xml:118
+msgid ""
+"Gets the Godot resource type associated with this loader. e.g. [code]\"Mesh"
+"\"[/code] or [code]\"Animation\"[/code]."
+msgstr ""
+
+#: doc/classes/EditorImportPlugin.xml:124
+msgid ""
+"Gets the extension used to save this resource in the [code].import[/code] "
+"directory (see [member ProjectSettings.application/config/"
+"use_hidden_project_data_directory])."
+msgstr ""
+
+#: doc/classes/EditorImportPlugin.xml:130
+msgid ""
+"Gets the name to display in the import window. You should choose this name "
+"as a continuation to \"Import as\", e.g. \"Import as Special Mesh\"."
+msgstr ""
+
+#: doc/classes/EditorImportPlugin.xml:141
+msgid ""
+"Imports [code]source_file[/code] into [code]save_path[/code] with the import "
+"[code]options[/code] specified. The [code]platform_variants[/code] and "
+"[code]gen_files[/code] arrays will be modified by this function.\n"
+"This method must be overridden to do the actual importing work. See this "
+"class' description for an example of overriding this method."
+msgstr ""
+
+#: doc/classes/EditorInspector.xml:4
+msgid "A tab used to edit properties of the selected node."
+msgstr ""
+
+#: doc/classes/EditorInspector.xml:7
+msgid ""
+"The editor inspector is by default located on the right-hand side of the "
+"editor. It's used to edit the properties of the selected node. For example, "
+"you can select a node such as [Sprite] then edit its transform through the "
+"inspector tool. The editor inspector is an essential tool in the game "
+"development workflow.\n"
+"[b]Note:[/b] This class shouldn't be instantiated directly. Instead, access "
+"the singleton using [method EditorInterface.get_inspector]."
+msgstr ""
+
+#: doc/classes/EditorInspector.xml:16
+msgid ""
+"Refreshes the inspector.\n"
+"[b]Note:[/b] To save on CPU resources, calling this method will do nothing "
+"if the time specified in [code]docks/property_editor/auto_refresh_interval[/"
+"code] editor setting hasn't passed yet since this method was last called. "
+"(By default, this interval is set to 0.3 seconds.)"
+msgstr ""
+
+#: doc/classes/EditorInspector.xml:28
+msgid ""
+"Emitted when the Edit button of an [Object] has been pressed in the "
+"inspector. This is mainly used in the remote scene tree inspector."
+msgstr ""
+
+#: doc/classes/EditorInspector.xml:34
+msgid "Emitted when a property is edited in the inspector."
+msgstr ""
+
+#: doc/classes/EditorInspector.xml:40
+msgid ""
+"Emitted when a property is keyed in the inspector. Properties can be keyed "
+"by clicking the \"key\" icon next to a property when the Animation panel is "
+"toggled."
+msgstr ""
+
+#: doc/classes/EditorInspector.xml:46
+msgid "Emitted when a property is selected in the inspector."
+msgstr ""
+
+#: doc/classes/EditorInspector.xml:53
+msgid ""
+"Emitted when a boolean property is toggled in the inspector.\n"
+"[b]Note:[/b] This signal is never emitted if the internal [code]autoclear[/"
+"code] property enabled. Since this property is always enabled in the editor "
+"inspector, this signal is never emitted by the editor itself."
+msgstr ""
+
+#: doc/classes/EditorInspector.xml:61
+msgid "Emitted when a resource is selected in the inspector."
+msgstr ""
+
+#: doc/classes/EditorInspector.xml:66
+msgid ""
+"Emitted when a property that requires a restart to be applied is edited in "
+"the inspector. This is only used in the Project Settings and Editor Settings."
+msgstr ""
+
+#: doc/classes/EditorInspectorPlugin.xml:4
+msgid "Plugin for adding custom property editors on inspector."
+msgstr ""
+
+#: doc/classes/EditorInspectorPlugin.xml:7
+msgid ""
+"These plugins allow adding custom property editors to [EditorInspector].\n"
+"Plugins are registered via [method EditorPlugin.add_inspector_plugin].\n"
+"When an object is edited, the [method can_handle] function is called and "
+"must return [code]true[/code] if the object type is supported.\n"
+"If supported, the function [method parse_begin] will be called, allowing to "
+"place custom controls at the beginning of the class.\n"
+"Subsequently, the [method parse_category] and [method parse_property] are "
+"called for every category and property. They offer the ability to add custom "
+"controls to the inspector too.\n"
+"Finally, [method parse_end] will be called.\n"
+"On each of these calls, the \"add\" functions can be called."
+msgstr ""
+
+#: doc/classes/EditorInspectorPlugin.xml:16
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/plugins/editor/"
+"inspector_plugins.html"
+msgstr ""
+
+#: doc/classes/EditorInspectorPlugin.xml:23
+msgid "Adds a custom control, which is not necessarily a property editor."
+msgstr ""
+
+#: doc/classes/EditorInspectorPlugin.xml:31
+msgid ""
+"Adds a property editor for an individual property. The [code]editor[/code] "
+"control must extend [EditorProperty]."
+msgstr ""
+
+#: doc/classes/EditorInspectorPlugin.xml:40
+msgid ""
+"Adds an editor that allows modifying multiple properties. The [code]editor[/"
+"code] control must extend [EditorProperty]."
+msgstr ""
+
+#: doc/classes/EditorInspectorPlugin.xml:47
+msgid "Returns [code]true[/code] if this object can be handled by this plugin."
+msgstr ""
+
+#: doc/classes/EditorInspectorPlugin.xml:54
+msgid "Called to allow adding controls at the beginning of the list."
+msgstr ""
+
+#: doc/classes/EditorInspectorPlugin.xml:62
+msgid "Called to allow adding controls at the beginning of the category."
+msgstr ""
+
+#: doc/classes/EditorInspectorPlugin.xml:68
+msgid "Called to allow adding controls at the end of the list."
+msgstr ""
+
+#: doc/classes/EditorInspectorPlugin.xml:80
+msgid ""
+"Called to allow adding property specific editors to the inspector. Usually "
+"these inherit [EditorProperty]. Returning [code]true[/code] removes the "
+"built-in editor for this property, otherwise allows to insert a custom "
+"editor before the built-in one."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:4
+msgid "Godot editor's interface."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:7
+msgid ""
+"EditorInterface gives you control over Godot editor's window. It allows "
+"customizing the window, saving and (re-)loading scenes, rendering mesh "
+"previews, inspecting and editing resources and objects, and provides access "
+"to [EditorSettings], [EditorFileSystem], [EditorResourcePreview], "
+"[ScriptEditor], the editor viewport, and information about scenes.\n"
+"[b]Note:[/b] This class shouldn't be instantiated directly. Instead, access "
+"the singleton using [method EditorPlugin.get_editor_interface]."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:17
+msgid ""
+"Edits the given [Node]. The node will be also selected if it's inside the "
+"scene tree."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:24
+msgid "Edits the given [Resource]."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:30
+msgid ""
+"Returns the main container of Godot editor's window. For example, you can "
+"use it to retrieve the size of the container and place your controls "
+"accordingly.\n"
+"[b]Warning:[/b] Removing and freeing this node will render the editor "
+"useless and may cause a crash."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:37
+msgid "Returns the current path being viewed in the [FileSystemDock]."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:43
+msgid "Returns the edited (current) scene's root [Node]."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:49
+msgid ""
+"Returns the actual scale of the editor UI ([code]1.0[/code] being 100% "
+"scale). This can be used to adjust position and dimensions of the UI added "
+"by plugins.\n"
+"[b]Note:[/b] This value is set via the [code]interface/editor/display_scale[/"
+"code] and [code]interface/editor/custom_display_scale[/code] editor "
+"settings. Editor must be restarted for changes to be properly applied."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:56
+msgid "Returns the editor's [EditorSettings] instance."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:62
+msgid ""
+"Returns the main editor control. Use this as a parent for main screens.\n"
+"[b]Note:[/b] This returns the main editor control containing the whole "
+"editor, not the 2D or 3D viewports specifically.\n"
+"[b]Warning:[/b] Removing and freeing this node will render a part of the "
+"editor useless and may cause a crash."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:70
+msgid ""
+"Returns the editor's [FileSystemDock] instance.\n"
+"[b]Warning:[/b] Removing and freeing this node will render a part of the "
+"editor useless and may cause a crash."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:77
+msgid ""
+"Returns the editor's [EditorInspector] instance.\n"
+"[b]Warning:[/b] Removing and freeing this node will render a part of the "
+"editor useless and may cause a crash."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:84
+msgid "Returns an [Array] with the file paths of the currently opened scenes."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:90
+msgid ""
+"Returns the name of the scene that is being played. If no scene is currently "
+"being played, returns an empty string."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:96
+msgid "Returns the editor's [EditorFileSystem] instance."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:102
+msgid "Returns the editor's [EditorResourcePreview] instance."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:108
+msgid ""
+"Returns the editor's [ScriptEditor] instance.\n"
+"[b]Warning:[/b] Removing and freeing this node will render a part of the "
+"editor useless and may cause a crash."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:115
+msgid ""
+"Returns the path of the directory currently selected in the "
+"[FileSystemDock]. If a file is selected, its base directory will be returned "
+"using [method String.get_base_dir] instead."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:121
+msgid "Returns the editor's [EditorSelection] instance."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:130
+msgid ""
+"Shows the given property on the given [code]object[/code] in the editor's "
+"Inspector dock. If [code]inspector_only[/code] is [code]true[/code], plugins "
+"will not attempt to edit [code]object[/code]."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:136
+msgid ""
+"Returns [code]true[/code] if a scene is currently being played, [code]false[/"
+"code] otherwise. Paused scenes are considered as being played."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:143
+msgid ""
+"Returns [code]true[/code] if the specified [code]plugin[/code] is enabled. "
+"The plugin name is the same as its directory name."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:151
+msgid ""
+"Returns mesh previews rendered at the given size as an [Array] of [Texture]s."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:158
+msgid "Opens the scene at the given path."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:164
+msgid "Plays the currently active scene."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:171
+msgid "Plays the scene specified by its filepath."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:177
+msgid "Plays the main scene."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:184
+msgid "Reloads the scene at the given path."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:190
+msgid ""
+"Saves the scene. Returns either [code]OK[/code] or [code]ERR_CANT_CREATE[/"
+"code] (see [@GlobalScope] constants)."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:198
+msgid "Saves the scene as a file at [code]path[/code]."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:205
+msgid ""
+"Selects the file, with the path provided by [code]file[/code], in the "
+"FileSystem dock."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:212
+msgid ""
+"Sets the editor's current main screen to the one specified in [code]name[/"
+"code]. [code]name[/code] must match the text of the tab in question exactly "
+"([code]2D[/code], [code]3D[/code], [code]Script[/code], [code]AssetLib[/"
+"code])."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:220
+msgid ""
+"Sets the enabled status of a plugin. The plugin name is the same as its "
+"directory name."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:226
+msgid "Stops the scene that is currently playing."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:232
+msgid ""
+"If [code]true[/code], enables distraction-free mode which hides side docks "
+"to increase the space available for the main view."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:4
+msgid "Used by the editor to extend its functionality."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:7
+msgid ""
+"Plugins are used by the editor to extend functionality. The most common "
+"types of plugins are those which edit a given node or resource type, import "
+"plugins and export plugins. See also [EditorScript] to add functions to the "
+"editor."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:10
+msgid "https://docs.godotengine.org/en/3.4/tutorials/plugins/editor/index.html"
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:18
+msgid ""
+"Adds a script at [code]path[/code] to the Autoload list as [code]name[/code]."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:26
+msgid ""
+"Adds a control to the bottom panel (together with Output, Debug, Animation, "
+"etc). Returns a reference to the button added. It's up to you to hide/show "
+"the button when needed. When your plugin is deactivated, make sure to remove "
+"your custom control with [method remove_control_from_bottom_panel] and free "
+"it with [method Node.queue_free]."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:34
+msgid ""
+"Adds a custom control to a container (see [enum CustomControlContainer]). "
+"There are many locations where custom controls can be added in the editor "
+"UI.\n"
+"Please remember that you have to manage the visibility of your custom "
+"controls yourself (and likely hide it after adding it).\n"
+"When your plugin is deactivated, make sure to remove your custom control "
+"with [method remove_control_from_container] and free it with [method Node."
+"queue_free]."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:44
+msgid ""
+"Adds the control to a specific dock slot (see [enum DockSlot] for options).\n"
+"If the dock is repositioned and as long as the plugin is active, the editor "
+"will save the dock position on further sessions.\n"
+"When your plugin is deactivated, make sure to remove your custom control "
+"with [method remove_control_from_docks] and free it with [method Node."
+"queue_free]."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:56
+msgid ""
+"Adds a custom type, which will appear in the list of nodes or resources. An "
+"icon can be optionally passed.\n"
+"When given node or resource is selected, the base type will be instanced "
+"(ie, \"Spatial\", \"Control\", \"Resource\"), then the script will be loaded "
+"and set to this object.\n"
+"You can use the virtual method [method handles] to check if your custom "
+"object is being edited by checking the script or using the [code]is[/code] "
+"keyword.\n"
+"During run-time, this will be a simple object with a script so this function "
+"does not need to be called then."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:66
+msgid ""
+"Registers a new [EditorExportPlugin]. Export plugins are used to perform "
+"tasks when the project is being exported.\n"
+"See [method add_inspector_plugin] for an example of how to register a plugin."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:74
+msgid ""
+"Registers a new [EditorImportPlugin]. Import plugins are used to import "
+"custom and unsupported assets as a custom [Resource] type.\n"
+"[b]Note:[/b] If you want to import custom 3D asset formats use [method "
+"add_scene_import_plugin] instead.\n"
+"See [method add_inspector_plugin] for an example of how to register a plugin."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:83
+msgid ""
+"Registers a new [EditorInspectorPlugin]. Inspector plugins are used to "
+"extend [EditorInspector] and provide custom configuration tools for your "
+"object's properties.\n"
+"[b]Note:[/b] Always use [method remove_inspector_plugin] to remove the "
+"registered [EditorInspectorPlugin] when your [EditorPlugin] is disabled to "
+"prevent leaks and an unexpected behavior.\n"
+"[codeblock]\n"
+"const MyInspectorPlugin = preload(\"res://addons/your_addon/path/to/your/"
+"script.gd\")\n"
+"var inspector_plugin = MyInspectorPlugin.new()\n"
+"\n"
+"func _enter_tree():\n"
+" add_inspector_plugin(inspector_plugin)\n"
+"\n"
+"func _exit_tree():\n"
+" remove_inspector_plugin(inspector_plugin)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:101
+msgid ""
+"Registers a new [EditorSceneImporter]. Scene importers are used to import "
+"custom 3D asset formats as scenes."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:108
+msgid ""
+"Registers a new [EditorSpatialGizmoPlugin]. Gizmo plugins are used to add "
+"custom gizmos to the 3D preview viewport for a [Spatial].\n"
+"See [method add_inspector_plugin] for an example of how to register a plugin."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:119
+msgid ""
+"Adds a custom menu item to [b]Project > Tools[/b] as [code]name[/code] that "
+"calls [code]callback[/code] on an instance of [code]handler[/code] with a "
+"parameter [code]ud[/code] when user activates it."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:127
+msgid ""
+"Adds a custom submenu under [b]Project > Tools >[/b] [code]name[/code]. "
+"[code]submenu[/code] should be an object of class [PopupMenu]. This submenu "
+"should be cleaned up using [code]remove_tool_menu_item(name)[/code]."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:133
+msgid ""
+"This method is called when the editor is about to save the project, switch "
+"to another tab, etc. It asks the plugin to apply any pending state changes "
+"to ensure consistency.\n"
+"This is used, for example, in shader editors to let the plugin know that it "
+"must apply the shader code being written by the user to the object."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:140
+msgid ""
+"This method is called when the editor is about to run the project. The "
+"plugin can then perform required operations before the project runs.\n"
+"This method must return a boolean. If this method returns [code]false[/"
+"code], the project will not run. The run is aborted immediately, so this "
+"also prevents all other plugins' [method build] methods from running."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:147
+msgid ""
+"Clear all the state and reset the object being edited to zero. This ensures "
+"your plugin does not keep editing a currently existing node, or a node from "
+"the wrong scene."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:153
+msgid ""
+"Called by the engine when the user disables the [EditorPlugin] in the Plugin "
+"tab of the project settings window."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:160
+msgid ""
+"This function is used for plugins that edit specific object types (nodes or "
+"resources). It requests the editor to edit the given object."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:166
+msgid ""
+"Called by the engine when the user enables the [EditorPlugin] in the Plugin "
+"tab of the project settings window."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:173
+msgid ""
+"Called by the engine when the 2D editor's viewport is updated. Use the "
+"[code]overlay[/code] [Control] for drawing. You can update the viewport "
+"manually by calling [method update_overlays].\n"
+"[codeblock]\n"
+"func forward_canvas_draw_over_viewport(overlay):\n"
+" # Draw a circle at cursor position.\n"
+" overlay.draw_circle(overlay.get_local_mouse_position(), 64, Color."
+"white)\n"
+"\n"
+"func forward_canvas_gui_input(event):\n"
+" if event is InputEventMouseMotion:\n"
+" # Redraw viewport when cursor is moved.\n"
+" update_overlays()\n"
+" return true\n"
+" return false\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:192
+msgid ""
+"This method is the same as [method forward_canvas_draw_over_viewport], "
+"except it draws on top of everything. Useful when you need an extra layer "
+"that shows over anything else.\n"
+"You need to enable calling of this method by using [method "
+"set_force_draw_over_forwarding_enabled]."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:200
+msgid ""
+"Called when there is a root node in the current edited scene, [method "
+"handles] is implemented and an [InputEvent] happens in the 2D viewport. "
+"Intercepts the [InputEvent], if [code]return true[/code] [EditorPlugin] "
+"consumes the [code]event[/code], otherwise forwards [code]event[/code] to "
+"other Editor classes. Example:\n"
+"[codeblock]\n"
+"# Prevents the InputEvent to reach other Editor classes\n"
+"func forward_canvas_gui_input(event):\n"
+" var forward = true\n"
+" return forward\n"
+"[/codeblock]\n"
+"Must [code]return false[/code] in order to forward the [InputEvent] to other "
+"Editor classes. Example:\n"
+"[codeblock]\n"
+"# Consumes InputEventMouseMotion and forwards other InputEvent types\n"
+"func forward_canvas_gui_input(event):\n"
+" var forward = false\n"
+" if event is InputEventMouseMotion:\n"
+" forward = true\n"
+" return forward\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:222
+msgid ""
+"Called by the engine when the 3D editor's viewport is updated. Use the "
+"[code]overlay[/code] [Control] for drawing. You can update the viewport "
+"manually by calling [method update_overlays].\n"
+"[codeblock]\n"
+"func forward_spatial_draw_over_viewport(overlay):\n"
+" # Draw a circle at cursor position.\n"
+" overlay.draw_circle(overlay.get_local_mouse_position(), 64)\n"
+"\n"
+"func forward_spatial_gui_input(camera, event):\n"
+" if event is InputEventMouseMotion:\n"
+" # Redraw viewport when cursor is moved.\n"
+" update_overlays()\n"
+" return true\n"
+" return false\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:241
+msgid ""
+"This method is the same as [method forward_spatial_draw_over_viewport], "
+"except it draws on top of everything. Useful when you need an extra layer "
+"that shows over anything else.\n"
+"You need to enable calling of this method by using [method "
+"set_force_draw_over_forwarding_enabled]."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:250
+msgid ""
+"Called when there is a root node in the current edited scene, [method "
+"handles] is implemented and an [InputEvent] happens in the 3D viewport. "
+"Intercepts the [InputEvent], if [code]return true[/code] [EditorPlugin] "
+"consumes the [code]event[/code], otherwise forwards [code]event[/code] to "
+"other Editor classes. Example:\n"
+"[codeblock]\n"
+"# Prevents the InputEvent to reach other Editor classes\n"
+"func forward_spatial_gui_input(camera, event):\n"
+" var forward = true\n"
+" return forward\n"
+"[/codeblock]\n"
+"Must [code]return false[/code] in order to forward the [InputEvent] to other "
+"Editor classes. Example:\n"
+"[codeblock]\n"
+"# Consumes InputEventMouseMotion and forwards other InputEvent types\n"
+"func forward_spatial_gui_input(camera, event):\n"
+" var forward = false\n"
+" if event is InputEventMouseMotion:\n"
+" forward = true\n"
+" return forward\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:271
+msgid ""
+"This is for editors that edit script-based objects. You can return a list of "
+"breakpoints in the format ([code]script:line[/code]), for example: "
+"[code]res://path_to_script.gd:25[/code]."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:277
+msgid ""
+"Returns the [EditorInterface] object that gives you control over Godot "
+"editor's window and its functionalities."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:283
+msgid ""
+"Override this method in your plugin to return a [Texture] in order to give "
+"it an icon.\n"
+"For main screen plugins, this appears at the top of the screen, to the right "
+"of the \"2D\", \"3D\", \"Script\", and \"AssetLib\" buttons.\n"
+"Ideally, the plugin icon should be white with a transparent background and "
+"16x16 pixels in size.\n"
+"[codeblock]\n"
+"func get_plugin_icon():\n"
+" # You can use a custom icon:\n"
+" return preload(\"res://addons/my_plugin/my_plugin_icon.svg\")\n"
+" # Or use a built-in icon:\n"
+" return get_editor_interface().get_base_control().get_icon(\"Node\", "
+"\"EditorIcons\")\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:298
+msgid ""
+"Override this method in your plugin to provide the name of the plugin when "
+"displayed in the Godot editor.\n"
+"For main screen plugins, this appears at the top of the screen, to the right "
+"of the \"2D\", \"3D\", \"Script\", and \"AssetLib\" buttons."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:305
+msgid ""
+"Gets the Editor's dialogue used for making scripts.\n"
+"[b]Note:[/b] Users can configure it before use.\n"
+"[b]Warning:[/b] Removing and freeing this node will render a part of the "
+"editor useless and may cause a crash."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:313
+msgid ""
+"Gets the state of your plugin editor. This is used when saving the scene (so "
+"state is kept when opening it again) and for switching tabs (so state can be "
+"restored when the tab returns)."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:319
+msgid ""
+"Gets the undo/redo object. Most actions in the editor can be undoable, so "
+"use this object to make sure this happens when it's worth it."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:326
+msgid ""
+"Gets the GUI layout of the plugin. This is used to save the project's editor "
+"layout when [method queue_save_layout] is called or the editor layout was "
+"changed(For example changing the position of a dock)."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:333
+msgid ""
+"Implement this function if your plugin edits a specific type of object "
+"(Resource or Node). If you return [code]true[/code], then you will get the "
+"functions [method edit] and [method make_visible] called when the editor "
+"requests them. If you have declared the methods [method "
+"forward_canvas_gui_input] and [method forward_spatial_gui_input] these will "
+"be called too."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:339
+msgid ""
+"Returns [code]true[/code] if this is a main screen editor plugin (it goes in "
+"the workspace selector together with [b]2D[/b], [b]3D[/b], [b]Script[/b] and "
+"[b]AssetLib[/b])."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:345
+msgid "Minimizes the bottom panel."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:352
+msgid "Makes a specific item in the bottom panel visible."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:359
+msgid ""
+"This function will be called when the editor is requested to become visible. "
+"It is used for plugins that edit a specific object type.\n"
+"Remember that you have to manage the visibility of all your editor controls "
+"manually."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:366
+msgid "Queue save the project's editor layout."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:373
+msgid "Removes an Autoload [code]name[/code] from the list."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:380
+msgid ""
+"Removes the control from the bottom panel. You have to manually [method Node."
+"queue_free] the control."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:388
+msgid ""
+"Removes the control from the specified container. You have to manually "
+"[method Node.queue_free] the control."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:395
+msgid ""
+"Removes the control from the dock. You have to manually [method Node."
+"queue_free] the control."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:402
+msgid "Removes a custom type added by [method add_custom_type]."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:409
+msgid "Removes an export plugin registered by [method add_export_plugin]."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:416
+msgid "Removes an import plugin registered by [method add_import_plugin]."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:423
+msgid "Removes an inspector plugin registered by [method add_import_plugin]"
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:430
+msgid ""
+"Removes a scene importer registered by [method add_scene_import_plugin]."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:437
+msgid "Removes a gizmo plugin registered by [method add_spatial_gizmo_plugin]."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:444
+msgid "Removes a menu [code]name[/code] from [b]Project > Tools[/b]."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:450
+msgid ""
+"This method is called after the editor saves the project or when it's "
+"closed. It asks the plugin to save edited external scenes/resources."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:456
+msgid ""
+"Enables calling of [method forward_canvas_force_draw_over_viewport] for the "
+"2D editor and [method forward_spatial_force_draw_over_viewport] for the 3D "
+"editor when their viewports are updated. You need to call this method only "
+"once and it will work permanently for this plugin."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:462
+msgid ""
+"Use this method if you always want to receive inputs from 3D view screen "
+"inside [method forward_spatial_gui_input]. It might be especially usable if "
+"your plugin will want to use raycast in the scene."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:469
+msgid "Restore the state saved by [method get_state]."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:476
+msgid "Restore the plugin GUI layout saved by [method get_window_layout]."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:482
+msgid ""
+"Updates the overlays of the 2D and 3D editor viewport. Causes methods "
+"[method forward_canvas_draw_over_viewport], [method "
+"forward_canvas_force_draw_over_viewport], [method "
+"forward_spatial_draw_over_viewport] and [method "
+"forward_spatial_force_draw_over_viewport] to be called."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:490
+msgid ""
+"Emitted when user changes the workspace ([b]2D[/b], [b]3D[/b], [b]Script[/"
+"b], [b]AssetLib[/b]). Also works with custom screens defined by plugins."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:501
+msgid ""
+"Emitted when the scene is changed in the editor. The argument will return "
+"the root node of the scene that has just become active. If this scene is new "
+"and empty, the argument will be [code]null[/code]."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:507
+msgid ""
+"Emitted when user closes a scene. The argument is file path to a closed "
+"scene."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:553
+msgid "Represents the size of the [enum DockSlot] enum."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:4
+msgid "Custom control to edit properties for adding into the inspector."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:7
+msgid ""
+"This control allows property editing for one or multiple properties into "
+"[EditorInspector]. It is added via [EditorInspectorPlugin]."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:16
+msgid ""
+"If any of the controls added can gain keyboard focus, add it here. This "
+"ensures that focus will be restored if the inspector is refreshed."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:26
+msgid ""
+"If one or several properties have changed, this must be called. [code]field[/"
+"code] is used in case your editor can modify fields separately (as an "
+"example, Vector3.x). The [code]changing[/code] argument avoids the editor "
+"requesting this property to be refreshed (leave as [code]false[/code] if "
+"unsure)."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:32
+msgid "Gets the edited object."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:38
+msgid ""
+"Gets the edited property. If your editor is for a single property (added via "
+"[method EditorInspectorPlugin.parse_property]), then this will return the "
+"property."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:44
+msgid "Must be implemented to provide a custom tooltip to the property editor."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:51
+msgid ""
+"Puts the [code]editor[/code] control below the property label. The control "
+"must be previously added using [method Node.add_child]."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:57
+msgid "When this virtual function is called, you must update your editor."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:63
+msgid ""
+"Used by the inspector, set to [code]true[/code] when the property is "
+"checkable."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:66
+msgid ""
+"Used by the inspector, set to [code]true[/code] when the property is checked."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:69
+msgid ""
+"Used by the inspector, set to [code]true[/code] when the property is drawn "
+"with the editor theme's warning color. This is used for editable children's "
+"properties."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:72
+msgid ""
+"Used by the inspector, set to [code]true[/code] when the property can add "
+"keys for animation."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:75
+msgid "Set this property to change the label (if you want to show one)."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:78
+msgid ""
+"Used by the inspector, set to [code]true[/code] when the property is read-"
+"only."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:86
+msgid ""
+"Emit it if you want multiple properties modified at the same time. Do not "
+"use if added via [method EditorInspectorPlugin.parse_property]."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:93
+msgid "Used by sub-inspectors. Emit it if what was selected was an Object ID."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:100
+msgid ""
+"Do not emit this manually, use the [method emit_changed] method instead."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:107
+msgid "Emitted when a property was checked. Used internally."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:113
+msgid ""
+"Emit it if you want to add this value as an animation key (check for keying "
+"being enabled first)."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:120
+msgid "Emit it if you want to key a property with a single value."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:127
+msgid ""
+"If you want a sub-resource to be edited, emit this signal with the resource."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:134
+msgid "Emitted when selected. Used internally."
+msgstr ""
+
+#: doc/classes/EditorResourcePicker.xml:4
+msgid "Godot editor's control for selecting [Resource] type properties."
+msgstr ""
+
+#: doc/classes/EditorResourcePicker.xml:7
+msgid ""
+"This [Control] node is used in the editor's Inspector dock to allow editing "
+"of [Resource] type properties. It provides options for creating, loading, "
+"saving and converting resources. Can be used with [EditorInspectorPlugin] to "
+"recreate the same behavior.\n"
+"[b]Note:[/b] This [Control] does not include any editor for the resource, as "
+"editing is controlled by the Inspector dock itself or sub-Inspectors."
+msgstr ""
+
+#: doc/classes/EditorResourcePicker.xml:32
+msgid ""
+"Returns a list of all allowed types and subtypes corresponding to the "
+"[member base_type]. If the [member base_type] is empty, an empty list is "
+"returned."
+msgstr ""
+
+#: doc/classes/EditorResourcePicker.xml:46
+msgid ""
+"This virtual method can be implemented to handle context menu items not "
+"handled by default. See [method set_create_options]."
+msgstr ""
+
+#: doc/classes/EditorResourcePicker.xml:53
+msgid ""
+"This virtual method is called when updating the context menu of "
+"[EditorResourcePicker]. Implement this method to override the \"New ...\" "
+"items with your own options. [code]menu_node[/code] is a reference to the "
+"[PopupMenu] node.\n"
+"[b]Note:[/b] Implement [method handle_menu_selected] to handle these custom "
+"items."
+msgstr ""
+
+#: doc/classes/EditorResourcePicker.xml:61
+msgid ""
+"Sets the toggle mode state for the main button. Works only if [member "
+"toggle_mode] is set to [code]true[/code]."
+msgstr ""
+
+#: doc/classes/EditorResourcePicker.xml:67
+msgid ""
+"The base type of allowed resource types. Can be a comma-separated list of "
+"several options."
+msgstr ""
+
+#: doc/classes/EditorResourcePicker.xml:70
+msgid "If [code]true[/code], the value can be selected and edited."
+msgstr ""
+
+#: doc/classes/EditorResourcePicker.xml:73
+msgid "The edited resource value."
+msgstr ""
+
+#: doc/classes/EditorResourcePicker.xml:76
+msgid ""
+"If [code]true[/code], the main button with the resource preview works in the "
+"toggle mode. Use [method set_toggle_pressed] to manually set the state."
+msgstr ""
+
+#: doc/classes/EditorResourcePicker.xml:83
+msgid "Emitted when the value of the edited resource was changed."
+msgstr ""
+
+#: doc/classes/EditorResourcePicker.xml:90
+msgid ""
+"Emitted when the resource value was set and user clicked to edit it. When "
+"[code]edit[/code] is [code]true[/code], the signal was caused by the context "
+"menu \"Edit\" option."
+msgstr ""
+
+#: doc/classes/EditorResourcePreview.xml:4
+msgid "Helper to generate previews of resources or files."
+msgstr ""
+
+#: doc/classes/EditorResourcePreview.xml:7
+msgid ""
+"This object is used to generate previews for resources of files.\n"
+"[b]Note:[/b] This class shouldn't be instantiated directly. Instead, access "
+"the singleton using [method EditorInterface.get_resource_previewer]."
+msgstr ""
+
+#: doc/classes/EditorResourcePreview.xml:17
+msgid "Create an own, custom preview generator."
+msgstr ""
+
+#: doc/classes/EditorResourcePreview.xml:24
+msgid ""
+"Check if the resource changed, if so, it will be invalidated and the "
+"corresponding signal emitted."
+msgstr ""
+
+#: doc/classes/EditorResourcePreview.xml:34
+msgid ""
+"Queue the [code]resource[/code] being edited for preview. Once the preview "
+"is ready, the [code]receiver[/code]'s [code]receiver_func[/code] will be "
+"called. The [code]receiver_func[/code] must take the following four "
+"arguments: [String] path, [Texture] preview, [Texture] thumbnail_preview, "
+"[Variant] userdata. [code]userdata[/code] can be anything, and will be "
+"returned when [code]receiver_func[/code] is called.\n"
+"[b]Note:[/b] If it was not possible to create the preview the "
+"[code]receiver_func[/code] will still be called, but the preview will be "
+"null."
+msgstr ""
+
+#: doc/classes/EditorResourcePreview.xml:45
+msgid ""
+"Queue a resource file located at [code]path[/code] for preview. Once the "
+"preview is ready, the [code]receiver[/code]'s [code]receiver_func[/code] "
+"will be called. The [code]receiver_func[/code] must take the following four "
+"arguments: [String] path, [Texture] preview, [Texture] thumbnail_preview, "
+"[Variant] userdata. [code]userdata[/code] can be anything, and will be "
+"returned when [code]receiver_func[/code] is called.\n"
+"[b]Note:[/b] If it was not possible to create the preview the "
+"[code]receiver_func[/code] will still be called, but the preview will be "
+"null."
+msgstr ""
+
+#: doc/classes/EditorResourcePreview.xml:53
+msgid "Removes a custom preview generator."
+msgstr ""
+
+#: doc/classes/EditorResourcePreview.xml:61
+msgid ""
+"Emitted if a preview was invalidated (changed). [code]path[/code] "
+"corresponds to the path of the preview."
+msgstr ""
+
+#: doc/classes/EditorResourcePreviewGenerator.xml:4
+msgid "Custom generator of previews."
+msgstr ""
+
+#: doc/classes/EditorResourcePreviewGenerator.xml:7
+msgid ""
+"Custom code to generate previews. Please check [code]file_dialog/"
+"thumbnail_size[/code] in [EditorSettings] to find out the right size to do "
+"previews at."
+msgstr ""
+
+#: doc/classes/EditorResourcePreviewGenerator.xml:15
+msgid ""
+"If this function returns [code]true[/code], the generator will call [method "
+"generate] or [method generate_from_path] for small previews as well.\n"
+"By default, it returns [code]false[/code]."
+msgstr ""
+
+#: doc/classes/EditorResourcePreviewGenerator.xml:24
+msgid ""
+"Generate a preview from a given resource with the specified size. This must "
+"always be implemented.\n"
+"Returning an empty texture is an OK way to fail and let another generator "
+"take care.\n"
+"Care must be taken because this function is always called from a thread (not "
+"the main thread)."
+msgstr ""
+
+#: doc/classes/EditorResourcePreviewGenerator.xml:34
+msgid ""
+"Generate a preview directly from a path with the specified size. "
+"Implementing this is optional, as default code will load and call [method "
+"generate].\n"
+"Returning an empty texture is an OK way to fail and let another generator "
+"take care.\n"
+"Care must be taken because this function is always called from a thread (not "
+"the main thread)."
+msgstr ""
+
+#: doc/classes/EditorResourcePreviewGenerator.xml:42
+msgid ""
+"If this function returns [code]true[/code], the generator will automatically "
+"generate the small previews from the normal preview texture generated by the "
+"methods [method generate] or [method generate_from_path].\n"
+"By default, it returns [code]false[/code]."
+msgstr ""
+
+#: doc/classes/EditorResourcePreviewGenerator.xml:50
+msgid ""
+"Returns [code]true[/code] if your generator supports the resource of type "
+"[code]type[/code]."
+msgstr ""
+
+#: doc/classes/EditorSceneImporter.xml:4
+msgid "Imports scenes from third-parties' 3D files."
+msgstr ""
+
+#: modules/fbx/doc_classes/EditorSceneImporterFBX.xml:4
+msgid "FBX 3D asset importer."
+msgstr ""
+
+#: modules/fbx/doc_classes/EditorSceneImporterFBX.xml:7
+msgid ""
+"This is an FBX 3D asset importer with full support for most FBX features.\n"
+"If exporting a FBX scene from Autodesk Maya, use these FBX export settings:\n"
+"[codeblock]\n"
+"- Smoothing Groups\n"
+"- Smooth Mesh\n"
+"- Triangluate (for meshes with blend shapes)\n"
+"- Bake Animation\n"
+"- Resample All\n"
+"- Deformed Models\n"
+"- Skins\n"
+"- Blend Shapes\n"
+"- Curve Filters\n"
+"- Constant Key Reducer\n"
+"- Auto Tangents Only\n"
+"- *Do not check* Constraints (as it will break the file)\n"
+"- Can check Embed Media (embeds textures into the exported FBX file)\n"
+" - Note that when importing embedded media, the texture and mesh will be a "
+"single immutable file.\n"
+" - You will have to re-export then re-import the FBX if the texture has "
+"changed.\n"
+"- Units: Centimeters\n"
+"- Up Axis: Y\n"
+"- Binary format in FBX 2017\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/EditorScenePostImport.xml:4
+msgid "Post-processes scenes after import."
+msgstr ""
+
+#: doc/classes/EditorScenePostImport.xml:7
+msgid ""
+"Imported scenes can be automatically modified right after import by setting "
+"their [b]Custom Script[/b] Import property to a [code]tool[/code] script "
+"that inherits from this class.\n"
+"The [method post_import] callback receives the imported scene's root node "
+"and returns the modified version of the scene. Usage example:\n"
+"[codeblock]\n"
+"tool # Needed so it runs in editor\n"
+"extends EditorScenePostImport\n"
+"\n"
+"# This sample changes all node names\n"
+"\n"
+"# Called right after the scene is imported and gets the root node\n"
+"func post_import(scene):\n"
+" # Change all node names to \"modified_[oldnodename]\"\n"
+" iterate(scene)\n"
+" return scene # Remember to return the imported scene\n"
+"\n"
+"func iterate(node):\n"
+" if node != null:\n"
+" node.name = \"modified_\" + node.name\n"
+" for child in node.get_children():\n"
+" iterate(child)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/EditorScenePostImport.xml:29
+msgid ""
+"https://docs.godotengine.org/en/3.4/getting_started/workflow/assets/"
+"importing_scenes.html#custom-script"
+msgstr ""
+
+#: doc/classes/EditorScenePostImport.xml:35
+msgid ""
+"Returns the source file path which got imported (e.g. [code]res://scene.dae[/"
+"code])."
+msgstr ""
+
+#: doc/classes/EditorScenePostImport.xml:41
+msgid "Returns the resource folder the imported scene file is located in."
+msgstr ""
+
+#: doc/classes/EditorScenePostImport.xml:48
+msgid ""
+"Called after the scene was imported. This method must return the modified "
+"version of the scene."
+msgstr ""
+
+#: doc/classes/EditorScript.xml:4
+msgid "Base script that can be used to add extension functions to the editor."
+msgstr ""
+
+#: doc/classes/EditorScript.xml:7
+msgid ""
+"Scripts extending this class and implementing its [method _run] method can "
+"be executed from the Script Editor's [b]File > Run[/b] menu option (or by "
+"pressing [code]Ctrl+Shift+X[/code]) while the editor is running. This is "
+"useful for adding custom in-editor functionality to Godot. For more complex "
+"additions, consider using [EditorPlugin]s instead.\n"
+"[b]Note:[/b] Extending scripts need to have [code]tool[/code] mode enabled.\n"
+"[b]Example script:[/b]\n"
+"[codeblock]\n"
+"tool\n"
+"extends EditorScript\n"
+"\n"
+"func _run():\n"
+" print(\"Hello from the Godot Editor!\")\n"
+"[/codeblock]\n"
+"[b]Note:[/b] The script is run in the Editor context, which means the output "
+"is visible in the console window started with the Editor (stdout) instead of "
+"the usual Godot [b]Output[/b] dock."
+msgstr ""
+
+#: doc/classes/EditorScript.xml:25
+msgid "This method is executed by the Editor when [b]File > Run[/b] is used."
+msgstr ""
+
+#: doc/classes/EditorScript.xml:32
+msgid ""
+"Adds [code]node[/code] as a child of the root node in the editor context.\n"
+"[b]Warning:[/b] The implementation of this method is currently disabled."
+msgstr ""
+
+#: doc/classes/EditorScript.xml:39
+msgid "Returns the [EditorInterface] singleton instance."
+msgstr ""
+
+#: doc/classes/EditorScript.xml:45
+msgid "Returns the Editor's currently active scene."
+msgstr ""
+
+#: doc/classes/EditorScriptPicker.xml:4
+msgid ""
+"Godot editor's control for selecting the [code]script[/code] property of a "
+"[Node]."
+msgstr ""
+
+#: doc/classes/EditorScriptPicker.xml:7
+msgid ""
+"Similar to [EditorResourcePicker] this [Control] node is used in the "
+"editor's Inspector dock, but only to edit the [code]script[/code] property "
+"of a [Node]. Default options for creating new resources of all possible "
+"subtypes are replaced with dedicated buttons that open the \"Attach Node "
+"Script\" dialog. Can be used with [EditorInspectorPlugin] to recreate the "
+"same behavior.\n"
+"[b]Note:[/b] You must set the [member script_owner] for the custom context "
+"menu items to work."
+msgstr ""
+
+#: doc/classes/EditorScriptPicker.xml:16
+msgid "The owner [Node] of the script property that holds the edited resource."
+msgstr ""
+
+#: doc/classes/EditorSelection.xml:4
+msgid "Manages the SceneTree selection in the editor."
+msgstr ""
+
+#: doc/classes/EditorSelection.xml:7
+msgid ""
+"This object manages the SceneTree selection in the editor.\n"
+"[b]Note:[/b] This class shouldn't be instantiated directly. Instead, access "
+"the singleton using [method EditorInterface.get_selection]."
+msgstr ""
+
+#: doc/classes/EditorSelection.xml:17
+msgid ""
+"Adds a node to the selection.\n"
+"[b]Note:[/b] The newly selected node will not be automatically edited in the "
+"inspector. If you want to edit a node, use [method EditorInterface."
+"edit_node]."
+msgstr ""
+
+#: doc/classes/EditorSelection.xml:24
+msgid "Clear the selection."
+msgstr ""
+
+#: doc/classes/EditorSelection.xml:30
+msgid "Gets the list of selected nodes."
+msgstr ""
+
+#: doc/classes/EditorSelection.xml:36
+msgid ""
+"Gets the list of selected nodes, optimized for transform operations (i.e. "
+"moving them, rotating, etc). This list avoids situations where a node is "
+"selected and also child/grandchild."
+msgstr ""
+
+#: doc/classes/EditorSelection.xml:43
+msgid "Removes a node from the selection."
+msgstr ""
+
+#: doc/classes/EditorSelection.xml:50
+msgid "Emitted when the selection changes."
+msgstr ""
+
+#: doc/classes/EditorSettings.xml:4
+msgid "Object that holds the project-independent editor settings."
+msgstr ""
+
+#: doc/classes/EditorSettings.xml:7
+msgid ""
+"Object that holds the project-independent editor settings. These settings "
+"are generally visible in the [b]Editor > Editor Settings[/b] menu.\n"
+"Property names use slash delimiters to distinguish sections. Setting values "
+"can be of any [Variant] type. It's recommended to use [code]snake_case[/"
+"code] for editor settings to be consistent with the Godot editor itself.\n"
+"Accessing the settings can be done using the following methods, such as:\n"
+"[codeblock]\n"
+"# `settings.set(\"some/property\", value)` also works as this class "
+"overrides `_set()` internally.\n"
+"settings.set_setting(\"some/property\",value)\n"
+"\n"
+"# `settings.get(\"some/property\", value)` also works as this class "
+"overrides `_get()` internally.\n"
+"settings.get_setting(\"some/property\")\n"
+"\n"
+"var list_of_settings = settings.get_property_list()\n"
+"[/codeblock]\n"
+"[b]Note:[/b] This class shouldn't be instantiated directly. Instead, access "
+"the singleton using [method EditorInterface.get_editor_settings]."
+msgstr ""
+
+#: doc/classes/EditorSettings.xml:28
+msgid ""
+"Adds a custom property info to a property. The dictionary must contain:\n"
+"- [code]name[/code]: [String] (the name of the property)\n"
+"- [code]type[/code]: [int] (see [enum Variant.Type])\n"
+"- optionally [code]hint[/code]: [int] (see [enum PropertyHint]) and "
+"[code]hint_string[/code]: [String]\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"editor_settings.set(\"category/property_name\", 0)\n"
+"\n"
+"var property_info = {\n"
+" \"name\": \"category/property_name\",\n"
+" \"type\": TYPE_INT,\n"
+" \"hint\": PROPERTY_HINT_ENUM,\n"
+" \"hint_string\": \"one,two,three\"\n"
+"}\n"
+"\n"
+"editor_settings.add_property_info(property_info)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/EditorSettings.xml:51
+msgid "Erases the setting whose name is specified by [code]property[/code]."
+msgstr ""
+
+#: doc/classes/EditorSettings.xml:57
+msgid "Returns the list of favorite files and directories for this project."
+msgstr ""
+
+#: doc/classes/EditorSettings.xml:66
+msgid ""
+"Returns project-specific metadata for the [code]section[/code] and "
+"[code]key[/code] specified. If the metadata doesn't exist, [code]default[/"
+"code] will be returned instead. See also [method set_project_metadata]."
+msgstr ""
+
+#: doc/classes/EditorSettings.xml:72
+msgid ""
+"Returns the project-specific settings path. Projects all have a unique "
+"subdirectory inside the settings path where project-specific settings are "
+"saved."
+msgstr ""
+
+#: doc/classes/EditorSettings.xml:78
+msgid ""
+"Returns the list of recently visited folders in the file dialog for this "
+"project."
+msgstr ""
+
+#: doc/classes/EditorSettings.xml:85
+msgid ""
+"Returns the value of the setting specified by [code]name[/code]. This is "
+"equivalent to using [method Object.get] on the EditorSettings instance."
+msgstr ""
+
+#: doc/classes/EditorSettings.xml:91
+msgid ""
+"Gets the global settings path for the engine. Inside this path, you can find "
+"some standard paths such as:\n"
+"[code]settings/tmp[/code] - Used for temporary storage of files\n"
+"[code]settings/templates[/code] - Where export templates are located"
+msgstr ""
+
+#: doc/classes/EditorSettings.xml:100
+msgid ""
+"Returns [code]true[/code] if the setting specified by [code]name[/code] "
+"exists, [code]false[/code] otherwise."
+msgstr ""
+
+#: doc/classes/EditorSettings.xml:107
+msgid ""
+"Returns [code]true[/code] if the setting specified by [code]name[/code] can "
+"have its value reverted to the default value, [code]false[/code] otherwise. "
+"When this method returns [code]true[/code], a Revert button will display "
+"next to the setting in the Editor Settings."
+msgstr ""
+
+#: doc/classes/EditorSettings.xml:114
+msgid ""
+"Returns the default value of the setting specified by [code]name[/code]. "
+"This is the value that would be applied when clicking the Revert button in "
+"the Editor Settings."
+msgstr ""
+
+#: doc/classes/EditorSettings.xml:121
+msgid "Sets the list of favorite files and directories for this project."
+msgstr ""
+
+#: doc/classes/EditorSettings.xml:130
+msgid ""
+"Sets the initial value of the setting specified by [code]name[/code] to "
+"[code]value[/code]. This is used to provide a value for the Revert button in "
+"the Editor Settings. If [code]update_current[/code] is true, the current "
+"value of the setting will be set to [code]value[/code] as well."
+msgstr ""
+
+#: doc/classes/EditorSettings.xml:139
+msgid ""
+"Sets project-specific metadata with the [code]section[/code], [code]key[/"
+"code] and [code]data[/code] specified. This metadata is stored outside the "
+"project folder and therefore won't be checked into version control. See also "
+"[method get_project_metadata]."
+msgstr ""
+
+#: doc/classes/EditorSettings.xml:146
+msgid ""
+"Sets the list of recently visited folders in the file dialog for this "
+"project."
+msgstr ""
+
+#: doc/classes/EditorSettings.xml:154
+msgid ""
+"Sets the [code]value[/code] of the setting specified by [code]name[/code]. "
+"This is equivalent to using [method Object.set] on the EditorSettings "
+"instance."
+msgstr ""
+
+#: doc/classes/EditorSettings.xml:161
+msgid "Emitted after any editor setting has changed."
+msgstr ""
+
+#: doc/classes/EditorSettings.xml:167
+msgid ""
+"Emitted after any editor setting has changed. It's used by various editor "
+"plugins to update their visuals on theme changes or logic on configuration "
+"changes."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmo.xml:4
+msgid "Custom gizmo for editing Spatial objects."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmo.xml:7
+msgid ""
+"Custom gizmo that is used for providing custom visualization and editing "
+"(handles) for 3D Spatial objects. See [EditorSpatialGizmoPlugin] for more "
+"information."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmo.xml:16
+msgid ""
+"Adds the specified [code]segments[/code] to the gizmo's collision shape for "
+"picking. Call this function during [method redraw]."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmo.xml:23
+msgid ""
+"Adds collision triangles to the gizmo for picking. A [TriangleMesh] can be "
+"generated from a regular [Mesh] too. Call this function during [method "
+"redraw]."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmo.xml:33
+msgid ""
+"Adds a list of handles (points) which can be used to deform the object being "
+"edited.\n"
+"There are virtual functions which will be called upon editing of these "
+"handles. Call this function during [method redraw]."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmo.xml:44
+msgid ""
+"Adds lines to the gizmo (as sets of 2 points), with a given material. The "
+"lines are used for visualizing the gizmo. Call this function during [method "
+"redraw]."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmo.xml:54
+msgid ""
+"Adds a mesh to the gizmo with the specified [code]billboard[/code] state, "
+"[code]skeleton[/code] and [code]material[/code]. If [code]billboard[/code] "
+"is [code]true[/code], the mesh will rotate to always face the camera. Call "
+"this function during [method redraw]."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmo.xml:63
+msgid ""
+"Adds an unscaled billboard for visualization. Call this function during "
+"[method redraw]."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmo.xml:69
+msgid ""
+"Removes everything in the gizmo including meshes, collisions and handles."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmo.xml:78
+msgid ""
+"Commit a handle being edited (handles must have been previously added by "
+"[method add_handles]).\n"
+"If the [code]cancel[/code] parameter is [code]true[/code], an option to "
+"restore the edited value to the original is provided."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmo.xml:86
+msgid ""
+"Gets the name of an edited handle (handles must have been previously added "
+"by [method add_handles]).\n"
+"Handles can be named for reference to the user when editing."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmo.xml:94
+msgid ""
+"Gets actual value of a handle. This value can be anything and used for "
+"eventually undoing the motion when calling [method commit_handle]."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmo.xml:100
+msgid ""
+"Returns the [EditorSpatialGizmoPlugin] that owns this gizmo. It's useful to "
+"retrieve materials using [method EditorSpatialGizmoPlugin.get_material]."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmo.xml:106
+msgid "Returns the Spatial node associated with this gizmo."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmo.xml:113
+msgid ""
+"Returns [code]true[/code] if the handle at index [code]index[/code] is "
+"highlighted by being hovered with the mouse."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmo.xml:119
+msgid ""
+"This function is called when the [Spatial] this gizmo refers to changes (the "
+"[method Spatial.update_gizmo] is called)."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmo.xml:128
+msgid ""
+"This function is used when the user drags a gizmo handle (previously added "
+"with [method add_handles]) in screen coordinates.\n"
+"The [Camera] is also provided so screen coordinates can be converted to "
+"raycasts."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmo.xml:136
+msgid ""
+"Sets the gizmo's hidden state. If [code]true[/code], the gizmo will be "
+"hidden. If [code]false[/code], it will be shown."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmo.xml:143
+msgid ""
+"Sets the reference [Spatial] node for the gizmo. [code]node[/code] must "
+"inherit from [Spatial]."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmoPlugin.xml:4
+msgid "Used by the editor to define Spatial gizmo types."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmoPlugin.xml:7
+msgid ""
+"EditorSpatialGizmoPlugin allows you to define a new type of Gizmo. There are "
+"two main ways to do so: extending [EditorSpatialGizmoPlugin] for the simpler "
+"gizmos, or creating a new [EditorSpatialGizmo] type. See the tutorial in the "
+"documentation for more info."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmoPlugin.xml:10
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/plugins/editor/spatial_gizmos."
+"html"
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmoPlugin.xml:18
+msgid ""
+"Adds a new material to the internal material list for the plugin. It can "
+"then be accessed with [method get_material]. Should not be overridden."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmoPlugin.xml:24
+msgid ""
+"Override this method to define whether the gizmo can be hidden or not. "
+"Returns [code]true[/code] if not overridden."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmoPlugin.xml:34
+msgid ""
+"Override this method to commit gizmo handles. Called for this plugin's "
+"active gizmos."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmoPlugin.xml:41
+msgid ""
+"Override this method to return a custom [EditorSpatialGizmo] for the spatial "
+"nodes of your choice, return [code]null[/code] for the rest of nodes. See "
+"also [method has_gizmo]."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmoPlugin.xml:50
+msgid ""
+"Creates a handle material with its variants (selected and/or editable) and "
+"adds them to the internal material list. They can then be accessed with "
+"[method get_material] and used in [method EditorSpatialGizmo.add_handles]. "
+"Should not be overridden.\n"
+"You can optionally provide a texture to use instead of the default icon."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmoPlugin.xml:61
+msgid ""
+"Creates an icon material with its variants (selected and/or editable) and "
+"adds them to the internal material list. They can then be accessed with "
+"[method get_material] and used in [method EditorSpatialGizmo."
+"add_unscaled_billboard]. Should not be overridden."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmoPlugin.xml:72
+msgid ""
+"Creates an unshaded material with its variants (selected and/or editable) "
+"and adds them to the internal material list. They can then be accessed with "
+"[method get_material] and used in [method EditorSpatialGizmo.add_mesh] and "
+"[method EditorSpatialGizmo.add_lines]. Should not be overridden."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmoPlugin.xml:80
+msgid ""
+"Override this method to provide gizmo's handle names. Called for this "
+"plugin's active gizmos."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmoPlugin.xml:88
+msgid ""
+"Gets actual value of a handle from gizmo. Called for this plugin's active "
+"gizmos."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmoPlugin.xml:96
+msgid ""
+"Gets material from the internal list of materials. If an "
+"[EditorSpatialGizmo] is provided, it will try to get the corresponding "
+"variant (selected and/or editable)."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmoPlugin.xml:102
+msgid ""
+"Override this method to provide the name that will appear in the gizmo "
+"visibility menu."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmoPlugin.xml:108
+msgid ""
+"Override this method to set the gizmo's priority. Higher values correspond "
+"to higher priority. If a gizmo with higher priority conflicts with another "
+"gizmo, only the gizmo with higher priority will be used.\n"
+"All built-in editor gizmos return a priority of [code]-1[/code]. If not "
+"overridden, this method will return [code]0[/code], which means custom "
+"gizmos will automatically override built-in gizmos."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmoPlugin.xml:116
+msgid ""
+"Override this method to define which Spatial nodes have a gizmo from this "
+"plugin. Whenever a [Spatial] node is added to a scene this method is called, "
+"if it returns [code]true[/code] the node gets a generic [EditorSpatialGizmo] "
+"assigned and is added to this plugin's list of active gizmos."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmoPlugin.xml:124
+msgid ""
+"Gets whether a handle is highlighted or not. Called for this plugin's active "
+"gizmos."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmoPlugin.xml:130
+msgid ""
+"Override this method to define whether a Spatial with this gizmo should be "
+"selectable even when the gizmo is hidden."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmoPlugin.xml:137
+msgid ""
+"Callback to redraw the provided gizmo. Called for this plugin's active "
+"gizmos."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmoPlugin.xml:147
+msgid ""
+"Update the value of a handle after it has been updated. Called for this "
+"plugin's active gizmos."
+msgstr ""
+
+#: doc/classes/EditorSpinSlider.xml:4
+msgid "Godot editor's control for editing numeric values."
+msgstr ""
+
+#: doc/classes/EditorSpinSlider.xml:7
+msgid ""
+"This [Control] node is used in the editor's Inspector dock to allow editing "
+"of numeric values. Can be used with [EditorInspectorPlugin] to recreate the "
+"same behavior."
+msgstr ""
+
+#: doc/classes/EditorVCSInterface.xml:4
+msgid ""
+"Version Control System (VCS) interface which reads and writes to the local "
+"VCS in use."
+msgstr ""
+
+#: doc/classes/EditorVCSInterface.xml:7
+msgid ""
+"Used by the editor to display VCS extracted information in the editor. The "
+"implementation of this API is included in VCS addons, which are essentially "
+"GDNative plugins that need to be put into the project folder. These VCS "
+"addons are scripts which are attached (on demand) to the object instance of "
+"[code]EditorVCSInterface[/code]. All the functions listed below, instead of "
+"performing the task themselves, they call the internally defined functions "
+"in the VCS addons to provide a plug-n-play experience."
+msgstr ""
+
+#: doc/classes/EditorVCSInterface.xml:16
+msgid ""
+"Creates a version commit if the addon is initialized, else returns without "
+"doing anything. Uses the files which have been staged previously, with the "
+"commit message set to a value as provided as in the argument."
+msgstr ""
+
+#: doc/classes/EditorVCSInterface.xml:23
+msgid ""
+"Returns an [Array] of [Dictionary] objects containing the diff output from "
+"the VCS in use, if a VCS addon is initialized, else returns an empty [Array] "
+"object. The diff contents also consist of some contextual lines which "
+"provide context to the observed line change in the file.\n"
+"Each [Dictionary] object has the line diff contents under the keys:\n"
+"- [code]\"content\"[/code] to store a [String] containing the line contents\n"
+"- [code]\"status\"[/code] to store a [String] which contains [code]\"+\"[/"
+"code] in case the content is a line addition but it stores a [code]\"-\"[/"
+"code] in case of deletion and an empty string in the case the line content "
+"is neither an addition nor a deletion.\n"
+"- [code]\"new_line_number\"[/code] to store an integer containing the new "
+"line number of the line content.\n"
+"- [code]\"line_count\"[/code] to store an integer containing the number of "
+"lines in the line content.\n"
+"- [code]\"old_line_number\"[/code] to store an integer containing the old "
+"line number of the line content.\n"
+"- [code]\"offset\"[/code] to store the offset of the line change since the "
+"first contextual line content."
+msgstr ""
+
+#: doc/classes/EditorVCSInterface.xml:36
+msgid ""
+"Returns a [Dictionary] containing the path of the detected file change "
+"mapped to an integer signifying what kind of change the corresponding file "
+"has experienced.\n"
+"The following integer values are being used to signify that the detected "
+"file is:\n"
+"- [code]0[/code]: New to the VCS working directory\n"
+"- [code]1[/code]: Modified\n"
+"- [code]2[/code]: Renamed\n"
+"- [code]3[/code]: Deleted\n"
+"- [code]4[/code]: Typechanged"
+msgstr ""
+
+#: doc/classes/EditorVCSInterface.xml:48
+msgid "Returns the project name of the VCS working directory."
+msgstr ""
+
+#: doc/classes/EditorVCSInterface.xml:54
+msgid ""
+"Returns the name of the VCS if the VCS has been initialized, else return an "
+"empty string."
+msgstr ""
+
+#: doc/classes/EditorVCSInterface.xml:61
+msgid ""
+"Initializes the VCS addon if not already. Uses the argument value as the "
+"path to the working directory of the project. Creates the initial commit if "
+"required. Returns [code]true[/code] if no failure occurs, else returns "
+"[code]false[/code]."
+msgstr ""
+
+#: doc/classes/EditorVCSInterface.xml:67
+msgid ""
+"Returns [code]true[/code] if the addon is ready to respond to function "
+"calls, else returns [code]false[/code]."
+msgstr ""
+
+#: doc/classes/EditorVCSInterface.xml:73
+msgid ""
+"Returns [code]true[/code] if the VCS addon has been initialized, else "
+"returns [code]false[/code]."
+msgstr ""
+
+#: doc/classes/EditorVCSInterface.xml:79
+msgid ""
+"Shuts down the VCS addon to allow cleanup code to run on call. Returns "
+"[code]true[/code] is no failure occurs, else returns [code]false[/code]."
+msgstr ""
+
+#: doc/classes/EditorVCSInterface.xml:86
+msgid ""
+"Stages the file which should be committed when [method EditorVCSInterface."
+"commit] is called. Argument should contain the absolute path."
+msgstr ""
+
+#: doc/classes/EditorVCSInterface.xml:93
+msgid ""
+"Unstages the file which was staged previously to be committed, so that it is "
+"no longer committed when [method EditorVCSInterface.commit] is called. "
+"Argument should contain the absolute path."
+msgstr ""
+
+#: doc/classes/EncodedObjectAsID.xml:4
+msgid "Holds a reference to an [Object]'s instance ID."
+msgstr ""
+
+#: doc/classes/EncodedObjectAsID.xml:7
+msgid ""
+"Utility class which holds a reference to the internal identifier of an "
+"[Object] instance, as given by [method Object.get_instance_id]. This ID can "
+"then be used to retrieve the object instance with [method @GDScript."
+"instance_from_id].\n"
+"This class is used internally by the editor inspector and script debugger, "
+"but can also be used in plugins to pass and display objects as their IDs."
+msgstr ""
+
+#: doc/classes/EncodedObjectAsID.xml:16
+msgid ""
+"The [Object] identifier stored in this [EncodedObjectAsID] instance. The "
+"object instance can be retrieved with [method @GDScript.instance_from_id]."
+msgstr ""
+
+#: doc/classes/Engine.xml:4
+msgid "Access to engine properties."
+msgstr ""
+
+#: doc/classes/Engine.xml:7
+msgid ""
+"The [Engine] singleton allows you to query and modify the project's run-time "
+"parameters, such as frames per second, time scale, and others."
+msgstr ""
+
+#: doc/classes/Engine.xml:15
+msgid ""
+"Returns engine author information in a Dictionary.\n"
+"[code]lead_developers[/code] - Array of Strings, lead developer names\n"
+"[code]founders[/code] - Array of Strings, founder names\n"
+"[code]project_managers[/code] - Array of Strings, project manager names\n"
+"[code]developers[/code] - Array of Strings, developer names"
+msgstr ""
+
+#: doc/classes/Engine.xml:25
+msgid ""
+"Returns an Array of copyright information Dictionaries.\n"
+"[code]name[/code] - String, component name\n"
+"[code]parts[/code] - Array of Dictionaries {[code]files[/code], "
+"[code]copyright[/code], [code]license[/code]} describing subsections of the "
+"component"
+msgstr ""
+
+#: doc/classes/Engine.xml:33
+msgid ""
+"Returns a Dictionary of Arrays of donor names.\n"
+"{[code]platinum_sponsors[/code], [code]gold_sponsors[/code], "
+"[code]silver_sponsors[/code], [code]bronze_sponsors[/code], "
+"[code]mini_sponsors[/code], [code]gold_donors[/code], [code]silver_donors[/"
+"code], [code]bronze_donors[/code]}"
+msgstr ""
+
+#: doc/classes/Engine.xml:40
+msgid ""
+"Returns the total number of frames drawn. On headless platforms, or if the "
+"render loop is disabled with [code]--disable-render-loop[/code] via command "
+"line, [method get_frames_drawn] always returns [code]0[/code]. See [method "
+"get_idle_frames]."
+msgstr ""
+
+#: doc/classes/Engine.xml:46
+msgid "Returns the frames per second of the running game."
+msgstr ""
+
+#: doc/classes/Engine.xml:52
+msgid ""
+"Returns the total number of frames passed since engine initialization which "
+"is advanced on each [b]idle frame[/b], regardless of whether the render loop "
+"is enabled. See also [method get_frames_drawn] and [method "
+"get_physics_frames].\n"
+"[method get_idle_frames] can be used to run expensive logic less often "
+"without relying on a [Timer]:\n"
+"[codeblock]\n"
+"func _process(_delta):\n"
+" if Engine.get_idle_frames() % 2 == 0:\n"
+" pass # Run expensive logic only once every 2 idle (render) frames "
+"here.\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Engine.xml:64
+msgid ""
+"Returns Dictionary of licenses used by Godot and included third party "
+"components."
+msgstr ""
+
+#: doc/classes/Engine.xml:70
+msgid "Returns Godot license text."
+msgstr ""
+
+#: doc/classes/Engine.xml:76
+msgid "Returns the main loop object (see [MainLoop] and [SceneTree])."
+msgstr ""
+
+#: doc/classes/Engine.xml:82
+msgid ""
+"Returns the total number of frames passed since engine initialization which "
+"is advanced on each [b]physics frame[/b]. See also [method "
+"get_idle_frames].\n"
+"[method get_physics_frames] can be used to run expensive logic less often "
+"without relying on a [Timer]:\n"
+"[codeblock]\n"
+"func _physics_process(_delta):\n"
+" if Engine.get_physics_frames() % 2 == 0:\n"
+" pass # Run expensive logic only once every 2 physics frames here.\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Engine.xml:94
+msgid ""
+"Returns the fraction through the current physics tick we are at the time of "
+"rendering the frame. This can be used to implement fixed timestep "
+"interpolation."
+msgstr ""
+
+#: doc/classes/Engine.xml:101
+msgid ""
+"Returns a global singleton with given [code]name[/code]. Often used for "
+"plugins, e.g. [code]GodotPayment[/code] on Android."
+msgstr ""
+
+#: doc/classes/Engine.xml:107
+msgid ""
+"Returns the current engine version information in a Dictionary.\n"
+"[code]major[/code] - Holds the major version number as an int\n"
+"[code]minor[/code] - Holds the minor version number as an int\n"
+"[code]patch[/code] - Holds the patch version number as an int\n"
+"[code]hex[/code] - Holds the full version number encoded as a "
+"hexadecimal int with one byte (2 places) per number (see example below)\n"
+"[code]status[/code] - Holds the status (e.g. \"beta\", \"rc1\", "
+"\"rc2\", ... \"stable\") as a String\n"
+"[code]build[/code] - Holds the build name (e.g. \"custom_build\") as a "
+"String\n"
+"[code]hash[/code] - Holds the full Git commit hash as a String\n"
+"[code]year[/code] - Holds the year the version was released in as an "
+"int\n"
+"[code]string[/code] - [code]major[/code] + [code]minor[/code] + "
+"[code]patch[/code] + [code]status[/code] + [code]build[/code] in a single "
+"String\n"
+"The [code]hex[/code] value is encoded as follows, from left to right: one "
+"byte for the major, one byte for the minor, one byte for the patch version. "
+"For example, \"3.1.12\" would be [code]0x03010C[/code]. [b]Note:[/b] It's "
+"still an int internally, and printing it will give you its decimal "
+"representation, which is not particularly meaningful. Use hexadecimal "
+"literals for easy version comparisons from code:\n"
+"[codeblock]\n"
+"if Engine.get_version_info().hex >= 0x030200:\n"
+" # Do things specific to version 3.2 or later\n"
+"else:\n"
+" # Do things specific to versions before 3.2\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Engine.xml:130
+msgid ""
+"Returns [code]true[/code] if a singleton with given [code]name[/code] exists "
+"in global scope."
+msgstr ""
+
+#: doc/classes/Engine.xml:136
+msgid ""
+"Returns [code]true[/code] if the game is inside the fixed process and "
+"physics phase of the game loop."
+msgstr ""
+
+#: doc/classes/Engine.xml:142
+msgid ""
+"If [code]true[/code], the script is currently running inside the editor. "
+"This is useful for [code]tool[/code] scripts to conditionally draw editor "
+"helpers, or prevent accidentally running \"game\" code that would affect the "
+"scene state while in the editor:\n"
+"[codeblock]\n"
+"if Engine.editor_hint:\n"
+" draw_gizmos()\n"
+"else:\n"
+" simulate_physics()\n"
+"[/codeblock]\n"
+"See [url=https://docs.godotengine.org/en/3.4/tutorials/misc/"
+"running_code_in_the_editor.html]Running code in the editor[/url] in the "
+"documentation for more information.\n"
+"[b]Note:[/b] To detect whether the script is run from an editor [i]build[/i] "
+"(e.g. when pressing [code]F5[/code]), use [method OS.has_feature] with the "
+"[code]\"editor\"[/code] argument instead. [code]OS.has_feature(\"editor\")[/"
+"code] will evaluate to [code]true[/code] both when the code is running in "
+"the editor and when running the project from the editor, but it will "
+"evaluate to [code]false[/code] when the code is run from an exported project."
+msgstr ""
+
+#: doc/classes/Engine.xml:153
+msgid ""
+"The number of fixed iterations per second. This controls how often physics "
+"simulation and [method Node._physics_process] methods are run. This value "
+"should generally always be set to [code]60[/code] or above, as Godot doesn't "
+"interpolate the physics step. As a result, values lower than [code]60[/code] "
+"will look stuttery. This value can be increased to make input more reactive "
+"or work around tunneling issues, but keep in mind doing so will increase CPU "
+"usage."
+msgstr ""
+
+#: doc/classes/Engine.xml:156
+msgid ""
+"Controls how much physics ticks are synchronized with real time. For 0 or "
+"less, the ticks are synchronized. Such values are recommended for network "
+"games, where clock synchronization matters. Higher values cause higher "
+"deviation of the in-game clock and real clock but smooth out framerate "
+"jitters. The default value of 0.5 should be fine for most; values above 2 "
+"could cause the game to react to dropped frames with a noticeable delay and "
+"are not recommended.\n"
+"[b]Note:[/b] For best results, when using a custom physics interpolation "
+"solution, the physics jitter fix should be disabled by setting [member "
+"physics_jitter_fix] to [code]0[/code]."
+msgstr ""
+
+#: doc/classes/Engine.xml:160
+msgid ""
+"If [code]false[/code], stops printing error and warning messages to the "
+"console and editor Output log. This can be used to hide error and warning "
+"messages during unit test suite runs. This property is equivalent to the "
+"[member ProjectSettings.application/run/disable_stderr] project setting.\n"
+"[b]Warning:[/b] If you set this to [code]false[/code] anywhere in the "
+"project, important error messages may be hidden even if they are emitted "
+"from other scripts. If this is set to [code]false[/code] in a [code]@tool[/"
+"code] script, this will also impact the editor itself. Do [i]not[/i] report "
+"bugs before ensuring error messages are enabled (as they are by default).\n"
+"[b]Note:[/b] This property does not impact the editor's Errors tab when "
+"running a project from the editor."
+msgstr ""
+
+#: doc/classes/Engine.xml:165
+msgid ""
+"The desired frames per second. If the hardware cannot keep up, this setting "
+"may not be respected. A value of 0 means no limit."
+msgstr ""
+
+#: doc/classes/Engine.xml:168
+msgid ""
+"Controls how fast or slow the in-game clock ticks versus the real life one. "
+"It defaults to 1.0. A value of 2.0 means the game moves twice as fast as "
+"real life, whilst a value of 0.5 means the game moves at half the regular "
+"speed."
+msgstr ""
+
+#: doc/classes/Environment.xml:4
+msgid ""
+"Resource for environment nodes (like [WorldEnvironment]) that define "
+"multiple rendering options."
+msgstr ""
+
+#: doc/classes/Environment.xml:7
+msgid ""
+"Resource for environment nodes (like [WorldEnvironment]) that define "
+"multiple environment operations (such as background [Sky] or [Color], "
+"ambient light, fog, depth-of-field...). These parameters affect the final "
+"render of the scene. The order of these operations is:\n"
+"- Depth of Field Blur\n"
+"- Glow\n"
+"- Tonemap (Auto Exposure)\n"
+"- Adjustments\n"
+"These effects will only apply when the [Viewport]'s intended usage is \"3D\" "
+"or \"3D Without Effects\". This can be configured for the root Viewport with "
+"[member ProjectSettings.rendering/quality/intended_usage/"
+"framebuffer_allocation], or for specific Viewports via the [member Viewport."
+"usage] property."
+msgstr ""
+
+#: doc/classes/Environment.xml:15 doc/classes/WorldEnvironment.xml:12
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/3d/"
+"environment_and_post_processing.html"
+msgstr ""
+
+#: doc/classes/Environment.xml:16
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/3d/high_dynamic_range.html"
+msgstr ""
+
+#: doc/classes/Environment.xml:17 doc/classes/Material.xml:10
+#: doc/classes/Mesh.xml:10 doc/classes/MeshInstance.xml:10
+#: doc/classes/WorldEnvironment.xml:13
+msgid "https://godotengine.org/asset-library/asset/123"
+msgstr ""
+
+#: doc/classes/Environment.xml:26
+msgid ""
+"Returns [code]true[/code] if the glow level [code]idx[/code] is specified, "
+"[code]false[/code] otherwise."
+msgstr ""
+
+#: doc/classes/Environment.xml:34
+msgid ""
+"Enables or disables the glow level at index [code]idx[/code]. Each level "
+"relies on the previous level. This means that enabling higher glow levels "
+"will slow down the glow effect rendering, even if previous levels aren't "
+"enabled."
+msgstr ""
+
+#: doc/classes/Environment.xml:40
+msgid ""
+"The global brightness value of the rendered scene. Effective only if "
+"[code]adjustment_enabled[/code] is [code]true[/code]."
+msgstr ""
+
+#: doc/classes/Environment.xml:43
+msgid ""
+"Applies the provided [Texture] resource to affect the global color aspect of "
+"the rendered scene. Effective only if [code]adjustment_enabled[/code] is "
+"[code]true[/code]."
+msgstr ""
+
+#: doc/classes/Environment.xml:46
+msgid ""
+"The global contrast value of the rendered scene (default value is 1). "
+"Effective only if [code]adjustment_enabled[/code] is [code]true[/code]."
+msgstr ""
+
+#: doc/classes/Environment.xml:49
+msgid ""
+"If [code]true[/code], enables the [code]adjustment_*[/code] properties "
+"provided by this resource. If [code]false[/code], modifications to the "
+"[code]adjustment_*[/code] properties will have no effect on the rendered "
+"scene."
+msgstr ""
+
+#: doc/classes/Environment.xml:52
+msgid ""
+"The global color saturation value of the rendered scene (default value is "
+"1). Effective only if [code]adjustment_enabled[/code] is [code]true[/code]."
+msgstr ""
+
+#: doc/classes/Environment.xml:55
+msgid "The ambient light's [Color]."
+msgstr ""
+
+#: doc/classes/Environment.xml:58
+msgid ""
+"The ambient light's energy. The higher the value, the stronger the light."
+msgstr ""
+
+#: doc/classes/Environment.xml:61
+msgid ""
+"Defines the amount of light that the sky brings on the scene. A value of 0 "
+"means that the sky's light emission has no effect on the scene illumination, "
+"thus all ambient illumination is provided by the ambient light. On the "
+"contrary, a value of 1 means that all the light that affects the scene is "
+"provided by the sky, thus the ambient light parameter has no effect on the "
+"scene."
+msgstr ""
+
+#: doc/classes/Environment.xml:64
+msgid ""
+"If [code]true[/code], enables the tonemapping auto exposure mode of the "
+"scene renderer. If [code]true[/code], the renderer will automatically "
+"determine the exposure setting to adapt to the scene's illumination and the "
+"observed light."
+msgstr ""
+
+#: doc/classes/Environment.xml:67
+msgid "The maximum luminance value for the auto exposure."
+msgstr ""
+
+#: doc/classes/Environment.xml:70
+msgid "The minimum luminance value for the auto exposure."
+msgstr ""
+
+#: doc/classes/Environment.xml:73
+msgid ""
+"The scale of the auto exposure effect. Affects the intensity of auto "
+"exposure."
+msgstr ""
+
+#: doc/classes/Environment.xml:76
+msgid ""
+"The speed of the auto exposure effect. Affects the time needed for the "
+"camera to perform auto exposure."
+msgstr ""
+
+#: doc/classes/Environment.xml:79
+msgid "The ID of the camera feed to show in the background."
+msgstr ""
+
+#: doc/classes/Environment.xml:82
+msgid ""
+"The maximum layer ID to display. Only effective when using the [constant "
+"BG_CANVAS] background mode."
+msgstr ""
+
+#: doc/classes/Environment.xml:85
+msgid ""
+"The [Color] displayed for clear areas of the scene. Only effective when "
+"using the [constant BG_COLOR] or [constant BG_COLOR_SKY] background modes)."
+msgstr ""
+
+#: doc/classes/Environment.xml:88
+msgid "The power of the light emitted by the background."
+msgstr ""
+
+#: doc/classes/Environment.xml:91
+msgid "The background mode. See [enum BGMode] for possible values."
+msgstr ""
+
+#: doc/classes/Environment.xml:94
+msgid "The [Sky] resource defined as background."
+msgstr ""
+
+#: doc/classes/Environment.xml:97
+msgid "The [Sky] resource's custom field of view."
+msgstr ""
+
+#: doc/classes/Environment.xml:100
+msgid "The [Sky] resource's rotation expressed as a [Basis]."
+msgstr ""
+
+#: doc/classes/Environment.xml:103
+msgid "The [Sky] resource's rotation expressed as Euler angles in radians."
+msgstr ""
+
+#: doc/classes/Environment.xml:106
+msgid "The [Sky] resource's rotation expressed as Euler angles in degrees."
+msgstr ""
+
+#: doc/classes/Environment.xml:109
+msgid "The amount of far blur for the depth-of-field effect."
+msgstr ""
+
+#: doc/classes/Environment.xml:112
+msgid ""
+"The distance from the camera where the far blur effect affects the rendering."
+msgstr ""
+
+#: doc/classes/Environment.xml:115
+msgid "If [code]true[/code], enables the depth-of-field far blur effect."
+msgstr ""
+
+#: doc/classes/Environment.xml:118
+msgid ""
+"The depth-of-field far blur's quality. Higher values can mitigate the "
+"visible banding effect seen at higher strengths, but are much slower."
+msgstr ""
+
+#: doc/classes/Environment.xml:121
+msgid "The length of the transition between the no-blur area and far blur."
+msgstr ""
+
+#: doc/classes/Environment.xml:124
+msgid "The amount of near blur for the depth-of-field effect."
+msgstr ""
+
+#: doc/classes/Environment.xml:127
+msgid ""
+"Distance from the camera where the near blur effect affects the rendering."
+msgstr ""
+
+#: doc/classes/Environment.xml:130
+msgid "If [code]true[/code], enables the depth-of-field near blur effect."
+msgstr ""
+
+#: doc/classes/Environment.xml:133
+msgid ""
+"The depth-of-field near blur's quality. Higher values can mitigate the "
+"visible banding effect seen at higher strengths, but are much slower."
+msgstr ""
+
+#: doc/classes/Environment.xml:136
+msgid "The length of the transition between the near blur and no-blur area."
+msgstr ""
+
+#: doc/classes/Environment.xml:139
+msgid "The fog's [Color]."
+msgstr ""
+
+#: doc/classes/Environment.xml:142
+msgid "The fog's depth starting distance from the camera."
+msgstr ""
+
+#: doc/classes/Environment.xml:145
+msgid ""
+"The fog depth's intensity curve. A number of presets are available in the "
+"[b]Inspector[/b] by right-clicking the curve."
+msgstr ""
+
+#: doc/classes/Environment.xml:148
+msgid ""
+"If [code]true[/code], the depth fog effect is enabled. When enabled, fog "
+"will appear in the distance (relative to the camera)."
+msgstr ""
+
+#: doc/classes/Environment.xml:151
+msgid ""
+"The fog's depth end distance from the camera. If this value is set to 0, it "
+"will be equal to the current camera's [member Camera.far] value."
+msgstr ""
+
+#: doc/classes/Environment.xml:154
+msgid ""
+"If [code]true[/code], fog effects are enabled. [member fog_height_enabled] "
+"and/or [member fog_depth_enabled] must be set to [code]true[/code] to "
+"actually display fog."
+msgstr ""
+
+#: doc/classes/Environment.xml:157
+msgid ""
+"The height fog's intensity. A number of presets are available in the "
+"[b]Inspector[/b] by right-clicking the curve."
+msgstr ""
+
+#: doc/classes/Environment.xml:160
+msgid ""
+"If [code]true[/code], the height fog effect is enabled. When enabled, fog "
+"will appear in a defined height range, regardless of the distance from the "
+"camera. This can be used to simulate \"deep water\" effects with a lower "
+"performance cost compared to a dedicated shader."
+msgstr ""
+
+#: doc/classes/Environment.xml:163
+msgid ""
+"The Y coordinate where the height fog will be the most intense. If this "
+"value is greater than [member fog_height_min], fog will be displayed from "
+"bottom to top. Otherwise, it will be displayed from top to bottom."
+msgstr ""
+
+#: doc/classes/Environment.xml:166
+msgid ""
+"The Y coordinate where the height fog will be the least intense. If this "
+"value is greater than [member fog_height_max], fog will be displayed from "
+"top to bottom. Otherwise, it will be displayed from bottom to top."
+msgstr ""
+
+#: doc/classes/Environment.xml:169
+msgid ""
+"The intensity of the depth fog color transition when looking towards the "
+"sun. The sun's direction is determined automatically using the "
+"DirectionalLight node in the scene."
+msgstr ""
+
+#: doc/classes/Environment.xml:172
+msgid "The depth fog's [Color] when looking towards the sun."
+msgstr ""
+
+#: doc/classes/Environment.xml:175
+msgid ""
+"The intensity of the fog light transmittance effect. Amount of light that "
+"the fog transmits."
+msgstr ""
+
+#: doc/classes/Environment.xml:178
+msgid ""
+"Enables fog's light transmission effect. If [code]true[/code], light will be "
+"more visible in the fog to simulate light scattering as in real life."
+msgstr ""
+
+#: doc/classes/Environment.xml:181
+msgid ""
+"Smooths out the blockiness created by sampling higher levels, at the cost of "
+"performance.\n"
+"[b]Note:[/b] When using the GLES2 renderer, this is only available if the "
+"GPU supports the [code]GL_EXT_gpu_shader4[/code] extension."
+msgstr ""
+
+#: doc/classes/Environment.xml:185
+msgid "The glow blending mode."
+msgstr ""
+
+#: doc/classes/Environment.xml:188
+msgid ""
+"The bloom's intensity. If set to a value higher than [code]0[/code], this "
+"will make glow visible in areas darker than the [member glow_hdr_threshold]."
+msgstr ""
+
+#: doc/classes/Environment.xml:191
+msgid "If [code]true[/code], the glow effect is enabled."
+msgstr ""
+
+#: doc/classes/Environment.xml:194
+msgid ""
+"The higher threshold of the HDR glow. Areas brighter than this threshold "
+"will be clamped for the purposes of the glow effect."
+msgstr ""
+
+#: doc/classes/Environment.xml:197
+msgid "The bleed scale of the HDR glow."
+msgstr ""
+
+#: doc/classes/Environment.xml:200
+msgid ""
+"The lower threshold of the HDR glow. When using the GLES2 renderer (which "
+"doesn't support HDR), this needs to be below [code]1.0[/code] for glow to be "
+"visible. A value of [code]0.9[/code] works well in this case."
+msgstr ""
+
+#: doc/classes/Environment.xml:203
+msgid ""
+"Takes more samples during downsample pass of glow. This ensures that single "
+"pixels are captured by glow which makes the glow look smoother and more "
+"stable during movement. However, it is very expensive and makes the glow "
+"post process take twice as long."
+msgstr ""
+
+#: doc/classes/Environment.xml:206
+msgid ""
+"The glow intensity. When using the GLES2 renderer, this should be increased "
+"to 1.5 to compensate for the lack of HDR rendering."
+msgstr ""
+
+#: doc/classes/Environment.xml:209
+msgid ""
+"If [code]true[/code], the 1st level of glow is enabled. This is the most "
+"\"local\" level (least blurry)."
+msgstr ""
+
+#: doc/classes/Environment.xml:212
+msgid "If [code]true[/code], the 2th level of glow is enabled."
+msgstr ""
+
+#: doc/classes/Environment.xml:215
+msgid "If [code]true[/code], the 3th level of glow is enabled."
+msgstr ""
+
+#: doc/classes/Environment.xml:218
+msgid "If [code]true[/code], the 4th level of glow is enabled."
+msgstr ""
+
+#: doc/classes/Environment.xml:221
+msgid "If [code]true[/code], the 5th level of glow is enabled."
+msgstr ""
+
+#: doc/classes/Environment.xml:224
+msgid "If [code]true[/code], the 6th level of glow is enabled."
+msgstr ""
+
+#: doc/classes/Environment.xml:227
+msgid ""
+"If [code]true[/code], the 7th level of glow is enabled. This is the most "
+"\"global\" level (blurriest)."
+msgstr ""
+
+#: doc/classes/Environment.xml:230
+msgid ""
+"The glow strength. When using the GLES2 renderer, this should be increased "
+"to 1.3 to compensate for the lack of HDR rendering."
+msgstr ""
+
+#: doc/classes/Environment.xml:233
+msgid "The depth tolerance for screen-space reflections."
+msgstr ""
+
+#: doc/classes/Environment.xml:236
+msgid ""
+"If [code]true[/code], screen-space reflections are enabled. Screen-space "
+"reflections are more accurate than reflections from [GIProbe]s or "
+"[ReflectionProbe]s, but are slower and can't reflect surfaces occluded by "
+"others."
+msgstr ""
+
+#: doc/classes/Environment.xml:239
+msgid ""
+"The fade-in distance for screen-space reflections. Affects the area from the "
+"reflected material to the screen-space reflection)."
+msgstr ""
+
+#: doc/classes/Environment.xml:242
+msgid ""
+"The fade-out distance for screen-space reflections. Affects the area from "
+"the screen-space reflection to the \"global\" reflection."
+msgstr ""
+
+#: doc/classes/Environment.xml:245
+msgid ""
+"The maximum number of steps for screen-space reflections. Higher values are "
+"slower."
+msgstr ""
+
+#: doc/classes/Environment.xml:248
+msgid ""
+"If [code]true[/code], screen-space reflections will take the material "
+"roughness into account."
+msgstr ""
+
+#: doc/classes/Environment.xml:251
+msgid ""
+"The screen-space ambient occlusion intensity on materials that have an AO "
+"texture defined. Values higher than [code]0[/code] will make the SSAO effect "
+"visible in areas darkened by AO textures."
+msgstr ""
+
+#: doc/classes/Environment.xml:254
+msgid ""
+"The screen-space ambient occlusion bias. This should be kept high enough to "
+"prevent \"smooth\" curves from being affected by ambient occlusion."
+msgstr ""
+
+#: doc/classes/Environment.xml:257
+msgid ""
+"The screen-space ambient occlusion blur quality. See [enum SSAOBlur] for "
+"possible values."
+msgstr ""
+
+#: doc/classes/Environment.xml:260
+msgid "The screen-space ambient occlusion color."
+msgstr ""
+
+#: doc/classes/Environment.xml:263
+msgid "The screen-space ambient occlusion edge sharpness."
+msgstr ""
+
+#: doc/classes/Environment.xml:266
+msgid ""
+"If [code]true[/code], the screen-space ambient occlusion effect is enabled. "
+"This darkens objects' corners and cavities to simulate ambient light not "
+"reaching the entire object as in real life. This works well for small, "
+"dynamic objects, but baked lighting or ambient occlusion textures will do a "
+"better job at displaying ambient occlusion on large static objects. This is "
+"a costly effect and should be disabled first when running into performance "
+"issues."
+msgstr ""
+
+#: doc/classes/Environment.xml:269
+msgid ""
+"The primary screen-space ambient occlusion intensity. See also [member "
+"ssao_radius]."
+msgstr ""
+
+#: doc/classes/Environment.xml:272
+msgid ""
+"The secondary screen-space ambient occlusion intensity. See also [member "
+"ssao_radius2]."
+msgstr ""
+
+#: doc/classes/Environment.xml:275
+msgid ""
+"The screen-space ambient occlusion intensity in direct light. In real life, "
+"ambient occlusion only applies to indirect light, which means its effects "
+"can't be seen in direct light. Values higher than [code]0[/code] will make "
+"the SSAO effect visible in direct light."
+msgstr ""
+
+#: doc/classes/Environment.xml:278
+msgid ""
+"The screen-space ambient occlusion quality. Higher qualities will make "
+"better use of small objects for ambient occlusion, but are slower."
+msgstr ""
+
+#: doc/classes/Environment.xml:281
+msgid "The primary screen-space ambient occlusion radius."
+msgstr ""
+
+#: doc/classes/Environment.xml:284
+msgid ""
+"The secondary screen-space ambient occlusion radius. If set to a value "
+"higher than [code]0[/code], enables the secondary screen-space ambient "
+"occlusion effect which can be used to improve the effect's appearance (at "
+"the cost of performance)."
+msgstr ""
+
+#: doc/classes/Environment.xml:287
+msgid "The default exposure used for tonemapping."
+msgstr ""
+
+#: doc/classes/Environment.xml:290
+msgid ""
+"The tonemapping mode to use. Tonemapping is the process that \"converts\" "
+"HDR values to be suitable for rendering on a LDR display. (Godot doesn't "
+"support rendering on HDR displays yet.)"
+msgstr ""
+
+#: doc/classes/Environment.xml:293
+msgid ""
+"The white reference value for tonemapping. Only effective if the [member "
+"tonemap_mode] isn't set to [constant TONE_MAPPER_LINEAR]."
+msgstr ""
+
+#: doc/classes/Environment.xml:298
+msgid ""
+"Keeps on screen every pixel drawn in the background. This is the fastest "
+"background mode, but it can only be safely used in fully-interior scenes (no "
+"visible sky or sky reflections). If enabled in a scene where the background "
+"is visible, \"ghost trail\" artifacts will be visible when moving the camera."
+msgstr ""
+
+#: doc/classes/Environment.xml:301
+msgid ""
+"Clears the background using the clear color defined in [member "
+"ProjectSettings.rendering/environment/default_clear_color]."
+msgstr ""
+
+#: doc/classes/Environment.xml:304
+msgid "Clears the background using a custom clear color."
+msgstr ""
+
+#: doc/classes/Environment.xml:307
+msgid "Displays a user-defined sky in the background."
+msgstr ""
+
+#: doc/classes/Environment.xml:310
+msgid ""
+"Clears the background using a custom clear color and allows defining a sky "
+"for shading and reflection. This mode is slightly faster than [constant "
+"BG_SKY] and should be preferred in scenes where reflections can be visible, "
+"but the sky itself never is (e.g. top-down camera)."
+msgstr ""
+
+#: doc/classes/Environment.xml:313
+msgid "Displays a [CanvasLayer] in the background."
+msgstr ""
+
+#: doc/classes/Environment.xml:316
+msgid "Displays a camera feed in the background."
+msgstr ""
+
+#: doc/classes/Environment.xml:319
+msgid "Represents the size of the [enum BGMode] enum."
+msgstr ""
+
+#: doc/classes/Environment.xml:322
+msgid ""
+"Additive glow blending mode. Mostly used for particles, glows (bloom), lens "
+"flare, bright sources."
+msgstr ""
+
+#: doc/classes/Environment.xml:325
+msgid ""
+"Screen glow blending mode. Increases brightness, used frequently with bloom."
+msgstr ""
+
+#: doc/classes/Environment.xml:328
+msgid ""
+"Soft light glow blending mode. Modifies contrast, exposes shadows and "
+"highlights (vivid bloom)."
+msgstr ""
+
+#: doc/classes/Environment.xml:331
+msgid ""
+"Replace glow blending mode. Replaces all pixels' color by the glow value. "
+"This can be used to simulate a full-screen blur effect by tweaking the glow "
+"parameters to match the original image's brightness."
+msgstr ""
+
+#: doc/classes/Environment.xml:334
+msgid ""
+"Linear tonemapper operator. Reads the linear data and passes it on "
+"unmodified."
+msgstr ""
+
+#: doc/classes/Environment.xml:337
+msgid ""
+"Reinhardt tonemapper operator. Performs a variation on rendered pixels' "
+"colors by this formula: [code]color = color / (1 + color)[/code]."
+msgstr ""
+
+#: doc/classes/Environment.xml:340
+msgid "Filmic tonemapper operator."
+msgstr ""
+
+#: doc/classes/Environment.xml:343
+msgid ""
+"Academy Color Encoding System tonemapper operator. Performs an aproximation "
+"of the ACES tonemapping curve."
+msgstr ""
+
+#: doc/classes/Environment.xml:346
+msgid ""
+"High quality Academy Color Encoding System tonemapper operator that matches "
+"the industry standard. Performs a more physically accurate curve fit which "
+"better simulates how light works in the real world. The color of lights and "
+"emissive materials will become lighter as the emissive energy increases, and "
+"will eventually become white if the light is bright enough to saturate the "
+"camera sensor."
+msgstr ""
+
+#: doc/classes/Environment.xml:349
+msgid "Low depth-of-field blur quality (fastest)."
+msgstr ""
+
+#: doc/classes/Environment.xml:352
+msgid "Medium depth-of-field blur quality."
+msgstr ""
+
+#: doc/classes/Environment.xml:355
+msgid "High depth-of-field blur quality (slowest)."
+msgstr ""
+
+#: doc/classes/Environment.xml:358
+msgid "No blur for the screen-space ambient occlusion effect (fastest)."
+msgstr ""
+
+#: doc/classes/Environment.xml:361
+msgid "1×1 blur for the screen-space ambient occlusion effect."
+msgstr ""
+
+#: doc/classes/Environment.xml:364
+msgid "2×2 blur for the screen-space ambient occlusion effect."
+msgstr ""
+
+#: doc/classes/Environment.xml:367
+msgid "3×3 blur for the screen-space ambient occlusion effect (slowest)."
+msgstr ""
+
+#: doc/classes/Environment.xml:370
+msgid "Low quality for the screen-space ambient occlusion effect (fastest)."
+msgstr ""
+
+#: doc/classes/Environment.xml:373
+msgid "Low quality for the screen-space ambient occlusion effect."
+msgstr ""
+
+#: doc/classes/Environment.xml:376
+msgid "Low quality for the screen-space ambient occlusion effect (slowest)."
+msgstr ""
+
+#: doc/classes/Expression.xml:4
+msgid "A class that stores an expression you can execute."
+msgstr ""
+
+#: doc/classes/Expression.xml:7
+msgid ""
+"An expression can be made of any arithmetic operation, built-in math "
+"function call, method call of a passed instance, or built-in type "
+"construction call.\n"
+"An example expression text using the built-in math functions could be "
+"[code]sqrt(pow(3,2) + pow(4,2))[/code].\n"
+"In the following example we use a [LineEdit] node to write our expression "
+"and show the result.\n"
+"[codeblock]\n"
+"onready var expression = Expression.new()\n"
+"\n"
+"func _ready():\n"
+" $LineEdit.connect(\"text_entered\", self, \"_on_text_entered\")\n"
+"\n"
+"func _on_text_entered(command):\n"
+" var error = expression.parse(command, [])\n"
+" if error != OK:\n"
+" print(expression.get_error_text())\n"
+" return\n"
+" var result = expression.execute([], null, true)\n"
+" if not expression.has_execute_failed():\n"
+" $LineEdit.text = str(result)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Expression.xml:35
+msgid ""
+"Executes the expression that was previously parsed by [method parse] and "
+"returns the result. Before you use the returned object, you should check if "
+"the method failed by calling [method has_execute_failed].\n"
+"If you defined input variables in [method parse], you can specify their "
+"values in the inputs array, in the same order."
+msgstr ""
+
+#: doc/classes/Expression.xml:42
+msgid "Returns the error text if [method parse] has failed."
+msgstr ""
+
+#: doc/classes/Expression.xml:48
+msgid "Returns [code]true[/code] if [method execute] has failed."
+msgstr ""
+
+#: doc/classes/Expression.xml:56
+msgid ""
+"Parses the expression and returns an [enum Error] code.\n"
+"You can optionally specify names of variables that may appear in the "
+"expression with [code]input_names[/code], so that you can bind them when it "
+"gets executed."
+msgstr ""
+
+#: doc/classes/ExternalTexture.xml:4
+msgid "Enable OpenGL ES external texture extension."
+msgstr ""
+
+#: doc/classes/ExternalTexture.xml:7
+msgid ""
+"Enable support for the OpenGL ES external texture extension as defined by "
+"[url=https://www.khronos.org/registry/OpenGL/extensions/OES/"
+"OES_EGL_image_external.txt]OES_EGL_image_external[/url].\n"
+"[b]Note:[/b] This is only supported for Android platforms."
+msgstr ""
+
+#: doc/classes/ExternalTexture.xml:16
+msgid "Returns the external texture name."
+msgstr ""
+
+#: doc/classes/ExternalTexture.xml:23
+msgid "External texture size."
+msgstr ""
+
+#: doc/classes/File.xml:4
+msgid "Type to handle file reading and writing operations."
+msgstr ""
+
+#: doc/classes/File.xml:7
+msgid ""
+"File type. This is used to permanently store data into the user device's "
+"file system and to read from it. This can be used to store game save data or "
+"player configuration files, for example.\n"
+"Here's a sample on how to write and read from a file:\n"
+"[codeblock]\n"
+"func save(content):\n"
+" var file = File.new()\n"
+" file.open(\"user://save_game.dat\", File.WRITE)\n"
+" file.store_string(content)\n"
+" file.close()\n"
+"\n"
+"func load():\n"
+" var file = File.new()\n"
+" file.open(\"user://save_game.dat\", File.READ)\n"
+" var content = file.get_as_text()\n"
+" file.close()\n"
+" return content\n"
+"[/codeblock]\n"
+"In the example above, the file will be saved in the user data folder as "
+"specified in the [url=https://docs.godotengine.org/en/3.4/tutorials/io/"
+"data_paths.html]Data paths[/url] documentation.\n"
+"[b]Note:[/b] To access project resources once exported, it is recommended to "
+"use [ResourceLoader] instead of the [File] API, as some files are converted "
+"to engine-specific formats and their original source files might not be "
+"present in the exported PCK package.\n"
+"[b]Note:[/b] Files are automatically closed only if the process exits "
+"\"normally\" (such as by clicking the window manager's close button or "
+"pressing [b]Alt + F4[/b]). If you stop the project execution by pressing "
+"[b]F8[/b] while the project is running, the file won't be closed as the game "
+"process will be killed. You can work around this by calling [method flush] "
+"at regular intervals."
+msgstr ""
+
+#: doc/classes/File.xml:35
+msgid ""
+"Closes the currently opened file and prevents subsequent read/write "
+"operations. Use [method flush] to persist the data to disk without closing "
+"the file."
+msgstr ""
+
+#: doc/classes/File.xml:41
+msgid ""
+"Returns [code]true[/code] if the file cursor has already read past the end "
+"of the file.\n"
+"[b]Note:[/b] [code]eof_reached() == false[/code] cannot be used to check "
+"whether there is more data available. To loop while there is more data "
+"available, use:\n"
+"[codeblock]\n"
+"while file.get_position() < file.get_len():\n"
+" # Read data\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/File.xml:53
+msgid ""
+"Returns [code]true[/code] if the file exists in the given path.\n"
+"[b]Note:[/b] Many resources types are imported (e.g. textures or sound "
+"files), and their source asset will not be included in the exported game, as "
+"only the imported version is used. See [method ResourceLoader.exists] for an "
+"alternative approach that takes resource remapping into account."
+msgstr ""
+
+#: doc/classes/File.xml:60
+msgid ""
+"Writes the file's buffer to disk. Flushing is automatically performed when "
+"the file is closed. This means you don't need to call [method flush] "
+"manually before closing a file using [method close]. Still, calling [method "
+"flush] can be used to ensure the data is safe even if the project crashes "
+"instead of being closed gracefully.\n"
+"[b]Note:[/b] Only call [method flush] when you actually need it. Otherwise, "
+"it will decrease performance due to constant disk writes."
+msgstr ""
+
+#: doc/classes/File.xml:67
+msgid ""
+"Returns the next 16 bits from the file as an integer. See [method store_16] "
+"for details on what values can be stored and retrieved this way."
+msgstr ""
+
+#: doc/classes/File.xml:73
+msgid ""
+"Returns the next 32 bits from the file as an integer. See [method store_32] "
+"for details on what values can be stored and retrieved this way."
+msgstr ""
+
+#: doc/classes/File.xml:79
+msgid ""
+"Returns the next 64 bits from the file as an integer. See [method store_64] "
+"for details on what values can be stored and retrieved this way."
+msgstr ""
+
+#: doc/classes/File.xml:85
+msgid ""
+"Returns the next 8 bits from the file as an integer. See [method store_8] "
+"for details on what values can be stored and retrieved this way."
+msgstr ""
+
+#: doc/classes/File.xml:91
+msgid ""
+"Returns the whole file as a [String].\n"
+"Text is interpreted as being UTF-8 encoded."
+msgstr ""
+
+#: doc/classes/File.xml:99
+msgid "Returns next [code]len[/code] bytes of the file as a [PoolByteArray]."
+msgstr ""
+
+#: doc/classes/File.xml:106
+msgid ""
+"Returns the next value of the file in CSV (Comma-Separated Values) format. "
+"You can pass a different delimiter [code]delim[/code] to use other than the "
+"default [code]\",\"[/code] (comma). This delimiter must be one-character "
+"long, and cannot be a double quotation mark.\n"
+"Text is interpreted as being UTF-8 encoded. Text values must be enclosed in "
+"double quotes if they include the delimiter character. Double quotes within "
+"a text value can be escaped by doubling their occurrence.\n"
+"For example, the following CSV lines are valid and will be properly parsed "
+"as two strings each:\n"
+"[codeblock]\n"
+"Alice,\"Hello, Bob!\"\n"
+"Bob,Alice! What a surprise!\n"
+"Alice,\"I thought you'd reply with \"\"Hello, world\"\".\"\n"
+"[/codeblock]\n"
+"Note how the second line can omit the enclosing quotes as it does not "
+"include the delimiter. However it [i]could[/i] very well use quotes, it was "
+"only written without for demonstration purposes. The third line must use "
+"[code]\"\"[/code] for each quotation mark that needs to be interpreted as "
+"such instead of the end of a text value."
+msgstr ""
+
+#: doc/classes/File.xml:120
+msgid "Returns the next 64 bits from the file as a floating-point number."
+msgstr ""
+
+#: doc/classes/File.xml:126
+msgid ""
+"Returns the last error that happened when trying to perform operations. "
+"Compare with the [code]ERR_FILE_*[/code] constants from [enum Error]."
+msgstr ""
+
+#: doc/classes/File.xml:132
+msgid "Returns the next 32 bits from the file as a floating-point number."
+msgstr ""
+
+#: doc/classes/File.xml:138
+msgid "Returns the size of the file in bytes."
+msgstr ""
+
+#: doc/classes/File.xml:144
+msgid ""
+"Returns the next line of the file as a [String].\n"
+"Text is interpreted as being UTF-8 encoded."
+msgstr ""
+
+#: doc/classes/File.xml:152
+msgid ""
+"Returns an MD5 String representing the file at the given path or an empty "
+"[String] on failure."
+msgstr ""
+
+#: doc/classes/File.xml:159
+msgid ""
+"Returns the last time the [code]file[/code] was modified in unix timestamp "
+"format or returns a [String] \"ERROR IN [code]file[/code]\". This unix "
+"timestamp can be converted to datetime by using [method OS."
+"get_datetime_from_unix_time]."
+msgstr ""
+
+#: doc/classes/File.xml:165
+msgid ""
+"Returns a [String] saved in Pascal format from the file.\n"
+"Text is interpreted as being UTF-8 encoded."
+msgstr ""
+
+#: doc/classes/File.xml:172
+msgid "Returns the path as a [String] for the current open file."
+msgstr ""
+
+#: doc/classes/File.xml:178
+msgid "Returns the absolute path as a [String] for the current open file."
+msgstr ""
+
+#: doc/classes/File.xml:184
+msgid "Returns the file cursor's position."
+msgstr ""
+
+#: doc/classes/File.xml:190
+msgid "Returns the next bits from the file as a floating-point number."
+msgstr ""
+
+#: doc/classes/File.xml:197
+msgid ""
+"Returns a SHA-256 [String] representing the file at the given path or an "
+"empty [String] on failure."
+msgstr ""
+
+#: doc/classes/File.xml:204
+msgid ""
+"Returns the next [Variant] value from the file. If [code]allow_objects[/"
+"code] is [code]true[/code], decoding objects is allowed.\n"
+"[b]Warning:[/b] Deserialized objects can contain code which gets executed. "
+"Do not use this option if the serialized object comes from untrusted sources "
+"to avoid potential security threats such as remote code execution."
+msgstr ""
+
+#: doc/classes/File.xml:211
+msgid "Returns [code]true[/code] if the file is currently opened."
+msgstr ""
+
+#: doc/classes/File.xml:219
+msgid "Opens the file for writing or reading, depending on the flags."
+msgstr ""
+
+#: doc/classes/File.xml:228
+msgid ""
+"Opens a compressed file for reading or writing.\n"
+"[b]Note:[/b] [method open_compressed] can only read files that were saved by "
+"Godot, not third-party compression formats. See [url=https://github.com/"
+"godotengine/godot/issues/28999]GitHub issue #28999[/url] for a workaround."
+msgstr ""
+
+#: doc/classes/File.xml:238
+msgid ""
+"Opens an encrypted file in write or read mode. You need to pass a binary key "
+"to encrypt/decrypt it.\n"
+"[b]Note:[/b] The provided key must be 32 bytes long."
+msgstr ""
+
+#: doc/classes/File.xml:248
+msgid ""
+"Opens an encrypted file in write or read mode. You need to pass a password "
+"to encrypt/decrypt it."
+msgstr ""
+
+#: doc/classes/File.xml:255
+msgid ""
+"Changes the file reading/writing cursor to the specified position (in bytes "
+"from the beginning of the file)."
+msgstr ""
+
+#: doc/classes/File.xml:262
+msgid ""
+"Changes the file reading/writing cursor to the specified position (in bytes "
+"from the end of the file).\n"
+"[b]Note:[/b] This is an offset, so you should use negative numbers or the "
+"cursor will be at the end of the file."
+msgstr ""
+
+#: doc/classes/File.xml:270
+msgid ""
+"Stores an integer as 16 bits in the file.\n"
+"[b]Note:[/b] The [code]value[/code] should lie in the interval [code][0, "
+"2^16 - 1][/code]. Any other value will overflow and wrap around.\n"
+"To store a signed integer, use [method store_64] or store a signed integer "
+"from the interval [code][-2^15, 2^15 - 1][/code] (i.e. keeping one bit for "
+"the signedness) and compute its sign manually when reading. For example:\n"
+"[codeblock]\n"
+"const MAX_15B = 1 << 15\n"
+"const MAX_16B = 1 << 16\n"
+"\n"
+"func unsigned16_to_signed(unsigned):\n"
+" return (unsigned + MAX_15B) % MAX_16B - MAX_15B\n"
+"\n"
+"func _ready():\n"
+" var f = File.new()\n"
+" f.open(\"user://file.dat\", File.WRITE_READ)\n"
+" f.store_16(-42) # This wraps around and stores 65494 (2^16 - 42).\n"
+" f.store_16(121) # In bounds, will store 121.\n"
+" f.seek(0) # Go back to start to read the stored value.\n"
+" var read1 = f.get_16() # 65494\n"
+" var read2 = f.get_16() # 121\n"
+" var converted1 = unsigned16_to_signed(read1) # -42\n"
+" var converted2 = unsigned16_to_signed(read2) # 121\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/File.xml:297
+msgid ""
+"Stores an integer as 32 bits in the file.\n"
+"[b]Note:[/b] The [code]value[/code] should lie in the interval [code][0, "
+"2^32 - 1][/code]. Any other value will overflow and wrap around.\n"
+"To store a signed integer, use [method store_64], or convert it manually "
+"(see [method store_16] for an example)."
+msgstr ""
+
+#: doc/classes/File.xml:306
+msgid ""
+"Stores an integer as 64 bits in the file.\n"
+"[b]Note:[/b] The [code]value[/code] must lie in the interval [code][-2^63, "
+"2^63 - 1][/code] (i.e. be a valid [int] value)."
+msgstr ""
+
+#: doc/classes/File.xml:314
+msgid ""
+"Stores an integer as 8 bits in the file.\n"
+"[b]Note:[/b] The [code]value[/code] should lie in the interval [code][0, 255]"
+"[/code]. Any other value will overflow and wrap around.\n"
+"To store a signed integer, use [method store_64], or convert it manually "
+"(see [method store_16] for an example)."
+msgstr ""
+
+#: doc/classes/File.xml:323
+msgid "Stores the given array of bytes in the file."
+msgstr ""
+
+#: doc/classes/File.xml:331
+msgid ""
+"Store the given [PoolStringArray] in the file as a line formatted in the CSV "
+"(Comma-Separated Values) format. You can pass a different delimiter "
+"[code]delim[/code] to use other than the default [code]\",\"[/code] (comma). "
+"This delimiter must be one-character long.\n"
+"Text will be encoded as UTF-8."
+msgstr ""
+
+#: doc/classes/File.xml:339
+msgid "Stores a floating-point number as 64 bits in the file."
+msgstr ""
+
+#: doc/classes/File.xml:346
+msgid "Stores a floating-point number as 32 bits in the file."
+msgstr ""
+
+#: doc/classes/File.xml:353
+msgid ""
+"Appends [code]line[/code] to the file followed by a line return character "
+"([code]\\n[/code]), encoding the text as UTF-8."
+msgstr ""
+
+#: doc/classes/File.xml:360
+msgid ""
+"Stores the given [String] as a line in the file in Pascal format (i.e. also "
+"store the length of the string).\n"
+"Text will be encoded as UTF-8."
+msgstr ""
+
+#: doc/classes/File.xml:368
+msgid "Stores a floating-point number in the file."
+msgstr ""
+
+#: doc/classes/File.xml:375
+msgid ""
+"Appends [code]string[/code] to the file without a line return, encoding the "
+"text as UTF-8."
+msgstr ""
+
+#: doc/classes/File.xml:383
+msgid ""
+"Stores any Variant value in the file. If [code]full_objects[/code] is "
+"[code]true[/code], encoding objects is allowed (and can potentially include "
+"code).\n"
+"[b]Note:[/b] Not all properties are included. Only properties that are "
+"configured with the [constant PROPERTY_USAGE_STORAGE] flag set will be "
+"serialized. You can add a new usage flag to a property by overriding the "
+"[method Object._get_property_list] method in your class. You can also check "
+"how property usage is configured by calling [method Object."
+"_get_property_list]. See [enum PropertyUsageFlags] for the possible usage "
+"flags."
+msgstr ""
+
+#: doc/classes/File.xml:390
+msgid ""
+"If [code]true[/code], the file is read with big-endian [url=https://en."
+"wikipedia.org/wiki/Endianness]endianness[/url]. If [code]false[/code], the "
+"file is read with little-endian endianness. If in doubt, leave this to "
+"[code]false[/code] as most files are written with little-endian endianness.\n"
+"[b]Note:[/b] [member endian_swap] is only about the file format, not the CPU "
+"type. The CPU endianness doesn't affect the default endianness for files "
+"written.\n"
+"[b]Note:[/b] This is always reset to [code]false[/code] whenever you open "
+"the file. Therefore, you must set [member endian_swap] [i]after[/i] opening "
+"the file, not before."
+msgstr ""
+
+#: doc/classes/File.xml:397
+msgid ""
+"Opens the file for read operations. The cursor is positioned at the "
+"beginning of the file."
+msgstr ""
+
+#: doc/classes/File.xml:400
+msgid ""
+"Opens the file for write operations. The file is created if it does not "
+"exist, and truncated if it does."
+msgstr ""
+
+#: doc/classes/File.xml:403
+msgid ""
+"Opens the file for read and write operations. Does not truncate the file. "
+"The cursor is positioned at the beginning of the file."
+msgstr ""
+
+#: doc/classes/File.xml:406
+msgid ""
+"Opens the file for read and write operations. The file is created if it does "
+"not exist, and truncated if it does. The cursor is positioned at the "
+"beginning of the file."
+msgstr ""
+
+#: doc/classes/File.xml:409
+msgid "Uses the [url=http://fastlz.org/]FastLZ[/url] compression method."
+msgstr ""
+
+#: doc/classes/File.xml:412
+msgid ""
+"Uses the [url=https://en.wikipedia.org/wiki/DEFLATE]DEFLATE[/url] "
+"compression method."
+msgstr ""
+
+#: doc/classes/File.xml:415
+msgid ""
+"Uses the [url=https://facebook.github.io/zstd/]Zstandard[/url] compression "
+"method."
+msgstr ""
+
+#: doc/classes/File.xml:418
+msgid "Uses the [url=https://www.gzip.org/]gzip[/url] compression method."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:4
+msgid "Dialog for selecting files or directories in the filesystem."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:7
+msgid ""
+"FileDialog is a preset dialog used to choose files and directories in the "
+"filesystem. It supports filter masks. The FileDialog automatically sets its "
+"window title according to the [member mode]. If you want to use a custom "
+"title, disable this by setting [member mode_overrides_title] to [code]false[/"
+"code]."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:16
+msgid ""
+"Adds [code]filter[/code] as a custom filter; [code]filter[/code] should be "
+"of the form [code]\"filename.extension ; Description\"[/code]. For example, "
+"[code]\"*.png ; PNG Images\"[/code]."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:22
+msgid "Clear all the added filters in the dialog."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:28
+msgid "Clear currently selected items in the dialog."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:34
+msgid ""
+"Returns the LineEdit for the selected file.\n"
+"[b]Warning:[/b] This is a required internal node, removing and freeing it "
+"may cause a crash. If you wish to hide it or any of its children, use their "
+"[member CanvasItem.visible] property."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:41
+msgid ""
+"Returns the vertical box container of the dialog, custom controls can be "
+"added to it.\n"
+"[b]Warning:[/b] This is a required internal node, removing and freeing it "
+"may cause a crash. If you wish to hide it or any of its children, use their "
+"[member CanvasItem.visible] property."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:48
+msgid "Invalidate and update the current dialog content list."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:54
+msgid ""
+"The file system access scope. See enum [code]Access[/code] constants.\n"
+"[b]Warning:[/b] Currently, in sandboxed environments such as HTML5 builds or "
+"sandboxed macOS apps, FileDialog cannot access the host file system. See "
+"[url=https://github.com/godotengine/godot-proposals/issues/1123]godot-"
+"proposals#1123[/url]."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:58
+msgid "The current working directory of the file dialog."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:61
+msgid "The currently selected file of the file dialog."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:64
+msgid "The currently selected file path of the file dialog."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:68
+msgid ""
+"The available file type filters. For example, this shows only [code].png[/"
+"code] and [code].gd[/code] files: [code]set_filters(PoolStringArray([\"*."
+"png ; PNG Images\",\"*.gd ; GDScript Files\"]))[/code]."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:71
+msgid ""
+"The dialog's open or save mode, which affects the selection behavior. See "
+"enum [code]Mode[/code] constants."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:74
+msgid ""
+"If [code]true[/code], changing the [code]Mode[/code] property will set the "
+"window title accordingly (e.g. setting mode to [constant MODE_OPEN_FILE] "
+"will change the window title to \"Open a File\")."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:77
+msgid "If [code]true[/code], the dialog will show hidden files."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:85
+msgid "Emitted when the user selects a directory."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:91
+msgid ""
+"Emitted when the user selects a file by double-clicking it or pressing the "
+"[b]OK[/b] button."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:97
+msgid "Emitted when the user selects multiple files."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:103
+msgid "The dialog allows selecting one, and only one file."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:106
+msgid "The dialog allows selecting multiple files."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:109
+msgid ""
+"The dialog only allows selecting a directory, disallowing the selection of "
+"any file."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:112
+msgid "The dialog allows selecting one file or directory."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:115
+msgid "The dialog will warn when a file exists."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:118
+msgid ""
+"The dialog only allows accessing files under the [Resource] path "
+"([code]res://[/code])."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:121
+msgid ""
+"The dialog only allows accessing files under user data path ([code]user://[/"
+"code])."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:124
+msgid "The dialog allows accessing files on the whole file system."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:129
+msgid "Custom icon for files."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:132
+msgid "The color modulation applied to the file icon."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:135
+msgid ""
+"The color tint for disabled files (when the [FileDialog] is used in open "
+"folder mode)."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:138
+msgid "Custom icon for folders."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:141
+msgid "The color modulation applied to the folder icon."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:144
+msgid "Custom icon for the parent folder arrow."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:147
+msgid "Custom icon for the reload button."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:150
+msgid "Custom icon for the toggle hidden button."
+msgstr ""
+
+#: doc/classes/float.xml:4
+msgid "Float built-in type."
+msgstr ""
+
+#: doc/classes/float.xml:7
+msgid ""
+"The [float] built-in type is a 64-bit double-precision floating-point "
+"number, equivalent to [code]double[/code] in C++. This type has 14 reliable "
+"decimal digits of precision. The [float] type can be stored in [Variant], "
+"which is the generic type used by the engine. The maximum value of [float] "
+"is approximately [code]1.79769e308[/code], and the minimum is approximately "
+"[code]-1.79769e308[/code].\n"
+"Most methods and properties in the engine use 32-bit single-precision "
+"floating-point numbers instead, equivalent to [code]float[/code] in C++, "
+"which have 6 reliable decimal digits of precision. For data structures such "
+"as [Vector2] and [Vector3], Godot uses 32-bit floating-point numbers.\n"
+"Math done using the [float] type is not guaranteed to be exact or "
+"deterministic, and will often result in small errors. You should usually use "
+"the [method @GDScript.is_equal_approx] and [method @GDScript.is_zero_approx] "
+"methods instead of [code]==[/code] to compare [float] values for equality."
+msgstr ""
+
+#: doc/classes/float.xml:12
+msgid "https://en.wikipedia.org/wiki/Double-precision_floating-point_format"
+msgstr ""
+
+#: doc/classes/float.xml:13
+msgid "https://en.wikipedia.org/wiki/Single-precision_floating-point_format"
+msgstr ""
+
+#: doc/classes/float.xml:20
+msgid ""
+"Cast a [bool] value to a floating-point value, [code]float(true)[/code] will "
+"be equal to 1.0 and [code]float(false)[/code] will be equal to 0.0."
+msgstr ""
+
+#: doc/classes/float.xml:27
+msgid ""
+"Cast an [int] value to a floating-point value, [code]float(1)[/code] will be "
+"equal to 1.0."
+msgstr ""
+
+#: doc/classes/float.xml:34
+msgid ""
+"Cast a [String] value to a floating-point value. This method accepts float "
+"value strings like [code]\"1.23\"[/code] and exponential notation strings "
+"for its parameter so calling [code]float(\"1e3\")[/code] will return 1000.0 "
+"and calling [code]float(\"1e-3\")[/code] will return 0.001. Calling this "
+"method with an invalid float string will return 0. This method stops parsing "
+"at the first invalid character and will return the parsed result so far, so "
+"calling [code]float(\"1a3\")[/code] will return 1 while calling "
+"[code]float(\"1e3a2\")[/code] will return 1000.0."
+msgstr ""
+
+#: doc/classes/Font.xml:4
+msgid "Internationalized font and text drawing support."
+msgstr ""
+
+#: doc/classes/Font.xml:7
+msgid ""
+"Font contains a Unicode-compatible character set, as well as the ability to "
+"draw it with variable width, ascent, descent and kerning. For creating fonts "
+"from TTF files (or other font formats), see the editor support for fonts.\n"
+"[b]Note:[/b] If a [DynamicFont] doesn't contain a character used in a "
+"string, the character in question will be replaced with codepoint "
+"[code]0xfffd[/code] if it's available in the [DynamicFont]. If this "
+"replacement character isn't available in the DynamicFont, the character will "
+"be hidden without displaying any replacement character in the string.\n"
+"[b]Note:[/b] If a [BitmapFont] doesn't contain a character used in a string, "
+"the character in question will be hidden without displaying any replacement "
+"character in the string.\n"
+"[b]Note:[/b] Unicode characters after [code]0xffff[/code] (such as most "
+"emoji) are [i]not[/i] supported on Windows. They will display as unknown "
+"characters instead. This will be resolved in Godot 4.0."
+msgstr ""
+
+#: doc/classes/Font.xml:24
+msgid ""
+"Draw [code]string[/code] into a canvas item using the font at a given "
+"position, with [code]modulate[/code] color, and optionally clipping the "
+"width. [code]position[/code] specifies the baseline, not the top. To draw "
+"from the top, [i]ascent[/i] must be added to the Y axis.\n"
+"See also [method CanvasItem.draw_string]."
+msgstr ""
+
+#: doc/classes/Font.xml:37
+msgid ""
+"Draw character [code]char[/code] into a canvas item using the font at a "
+"given position, with [code]modulate[/code] color, and optionally kerning if "
+"[code]next[/code] is passed. clipping the width. [code]position[/code] "
+"specifies the baseline, not the top. To draw from the top, [i]ascent[/i] "
+"must be added to the Y axis. The width used by the character is returned, "
+"making this function useful for drawing strings character by character."
+msgstr ""
+
+#: doc/classes/Font.xml:43
+msgid "Returns the font ascent (number of pixels above the baseline)."
+msgstr ""
+
+#: doc/classes/Font.xml:51
+msgid ""
+"Returns the size of a character, optionally taking kerning into account if "
+"the next character is provided. Note that the height returned is the font "
+"height (see [method get_height]) and has no relation to the glyph height."
+msgstr ""
+
+#: doc/classes/Font.xml:57
+msgid "Returns the font descent (number of pixels below the baseline)."
+msgstr ""
+
+#: doc/classes/Font.xml:63
+msgid "Returns the total font height (ascent plus descent) in pixels."
+msgstr ""
+
+#: doc/classes/Font.xml:70
+msgid ""
+"Returns the size of a string, taking kerning and advance into account. Note "
+"that the height returned is the font height (see [method get_height]) and "
+"has no relation to the string."
+msgstr ""
+
+#: doc/classes/Font.xml:78
+msgid ""
+"Returns the size that the string would have with word wrapping enabled with "
+"a fixed [code]width[/code]."
+msgstr ""
+
+#: doc/classes/Font.xml:84
+msgid "Returns [code]true[/code] if the font has an outline."
+msgstr ""
+
+#: doc/classes/Font.xml:95
+msgid ""
+"After editing a font (changing size, ascent, char rects, etc.). Call this "
+"function to propagate changes to controls that might use it."
+msgstr ""
+
+#: doc/classes/FuncRef.xml:4
+msgid "Reference to a function in an object."
+msgstr ""
+
+#: doc/classes/FuncRef.xml:7
+msgid ""
+"In GDScript, functions are not [i]first-class objects[/i]. This means it is "
+"impossible to store them directly as variables, return them from another "
+"function, or pass them as arguments.\n"
+"However, by creating a [FuncRef] using the [method @GDScript.funcref] "
+"function, a reference to a function in a given object can be created, passed "
+"around and called."
+msgstr ""
+
+#: doc/classes/FuncRef.xml:16
+msgid ""
+"Calls the referenced function previously set in [member function] or [method "
+"@GDScript.funcref]."
+msgstr ""
+
+#: doc/classes/FuncRef.xml:23
+msgid ""
+"Calls the referenced function previously set in [member function] or [method "
+"@GDScript.funcref]. Contrarily to [method call_func], this method does not "
+"support a variable number of arguments but expects all parameters to be "
+"passed via a single [Array]."
+msgstr ""
+
+#: doc/classes/FuncRef.xml:29
+msgid "Returns whether the object still exists and has the function assigned."
+msgstr ""
+
+#: doc/classes/FuncRef.xml:36
+msgid ""
+"The object containing the referenced function. This object must be of a type "
+"actually inheriting from [Object], not a built-in type such as [int], "
+"[Vector2] or [Dictionary]."
+msgstr ""
+
+#: doc/classes/FuncRef.xml:42
+msgid "The name of the referenced function."
+msgstr ""
+
+#: modules/gdnative/doc_classes/GDNativeLibrary.xml:4
+msgid ""
+"An external library containing functions or script classes to use in Godot."
+msgstr ""
+
+#: modules/gdnative/doc_classes/GDNativeLibrary.xml:7
+msgid ""
+"A GDNative library can implement [NativeScript]s, global functions to call "
+"with the [GDNative] class, or low-level engine extensions through interfaces "
+"such as [ARVRInterfaceGDNative]. The library must be compiled for each "
+"platform and architecture that the project will run on."
+msgstr ""
+
+#: modules/gdnative/doc_classes/GDNativeLibrary.xml:10
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/plugins/gdnative/gdnative-c-"
+"example.html"
+msgstr ""
+
+#: modules/gdnative/doc_classes/GDNativeLibrary.xml:11
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/plugins/gdnative/gdnative-cpp-"
+"example.html"
+msgstr ""
+
+#: modules/gdnative/doc_classes/GDNativeLibrary.xml:17
+msgid ""
+"Returns paths to all dependency libraries for the current platform and "
+"architecture."
+msgstr ""
+
+#: modules/gdnative/doc_classes/GDNativeLibrary.xml:23
+msgid ""
+"Returns the path to the dynamic library file for the current platform and "
+"architecture."
+msgstr ""
+
+#: modules/gdnative/doc_classes/GDNativeLibrary.xml:29
+msgid ""
+"This resource in INI-style [ConfigFile] format, as in [code].gdnlib[/code] "
+"files."
+msgstr ""
+
+#: modules/gdnative/doc_classes/GDNativeLibrary.xml:32
+msgid ""
+"If [code]true[/code], Godot loads only one copy of the library and each "
+"script that references the library will share static data like static or "
+"global variables.\n"
+"If [code]false[/code], Godot loads a separate copy of the library into "
+"memory for each script that references it."
+msgstr ""
+
+#: modules/gdnative/doc_classes/GDNativeLibrary.xml:36
+msgid ""
+"If [code]true[/code], the editor will temporarily unload the library "
+"whenever the user switches away from the editor window, allowing the user to "
+"recompile the library without restarting Godot.\n"
+"[b]Note:[/b] If the library defines tool scripts that run inside the editor, "
+"[code]reloadable[/code] must be [code]false[/code]. Otherwise, the editor "
+"will attempt to unload the tool scripts while they're in use and crash."
+msgstr ""
+
+#: modules/gdnative/doc_classes/GDNativeLibrary.xml:40
+msgid ""
+"If [code]true[/code], Godot loads the library at startup rather than the "
+"first time a script uses the library, calling [code]{prefix}"
+"gdnative_singleton[/code] after initializing the library (where [code]"
+"{prefix}[/code] is the value of [member symbol_prefix]). The library remains "
+"loaded as long as Godot is running.\n"
+"[b]Note:[/b] A singleton library cannot be [member reloadable]."
+msgstr ""
+
+#: modules/gdnative/doc_classes/GDNativeLibrary.xml:44
+msgid ""
+"The prefix this library's entry point functions begin with. For example, a "
+"GDNativeLibrary would declare its [code]gdnative_init[/code] function as "
+"[code]godot_gdnative_init[/code] by default.\n"
+"On platforms that require statically linking libraries (currently only iOS), "
+"each library must have a different [code]symbol_prefix[/code]."
+msgstr ""
+
+#: modules/gdscript/doc_classes/GDScript.xml:4
+msgid "A script implemented in the GDScript programming language."
+msgstr ""
+
+#: modules/gdscript/doc_classes/GDScript.xml:7
+msgid ""
+"A script implemented in the GDScript programming language. The script "
+"extends the functionality of all objects that instance it.\n"
+"[method new] creates a new instance of the script. [method Object."
+"set_script] extends an existing object, if that object's class matches one "
+"of the script's base classes."
+msgstr ""
+
+#: modules/gdscript/doc_classes/GDScript.xml:11
+msgid ""
+"https://docs.godotengine.org/en/3.4/getting_started/scripting/gdscript/index."
+"html"
+msgstr ""
+
+#: modules/gdscript/doc_classes/GDScript.xml:17
+msgid "Returns byte code for the script source code."
+msgstr ""
+
+#: modules/gdscript/doc_classes/GDScript.xml:23
+msgid ""
+"Returns a new instance of the script.\n"
+"For example:\n"
+"[codeblock]\n"
+"var MyClass = load(\"myclass.gd\")\n"
+"var instance = MyClass.new()\n"
+"assert(instance.get_script() == MyClass)\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/GDScriptFunctionState.xml:4
+msgid "State of a function call after yielding."
+msgstr ""
+
+#: modules/gdscript/doc_classes/GDScriptFunctionState.xml:7
+msgid ""
+"Calling [method @GDScript.yield] within a function will cause that function "
+"to yield and return its current state as an object of this type. The yielded "
+"function call can then be resumed later by calling [method resume] on this "
+"state object."
+msgstr ""
+
+#: modules/gdscript/doc_classes/GDScriptFunctionState.xml:16
+msgid ""
+"Check whether the function call may be resumed. This is not the case if the "
+"function state was already resumed.\n"
+"If [code]extended_check[/code] is enabled, it also checks if the associated "
+"script and object still exist. The extended check is done in debug mode as "
+"part of [method GDScriptFunctionState.resume], but you can use this if you "
+"know you may be trying to resume without knowing for sure the object and/or "
+"script have survived up to that point."
+msgstr ""
+
+#: modules/gdscript/doc_classes/GDScriptFunctionState.xml:24
+msgid ""
+"Resume execution of the yielded function call.\n"
+"If handed an argument, return the argument from the [method @GDScript.yield] "
+"call in the yielded function call. You can pass e.g. an [Array] to hand "
+"multiple arguments.\n"
+"This function returns what the resumed function call returns, possibly "
+"another function state if yielded again."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:4
+msgid ""
+"The generic 6-degrees-of-freedom joint can implement a variety of joint "
+"types by locking certain axes' rotation or translation."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:7
+msgid ""
+"The first 3 DOF axes are linear axes, which represent translation of Bodies, "
+"and the latter 3 DOF axes represent the angular motion. Each axis can be "
+"either locked, or limited."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:93
+msgid ""
+"The amount of rotational damping across the X axis.\n"
+"The lower, the longer an impulse from one side takes to travel to the other "
+"side."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:97
+msgid "If [code]true[/code], rotation across the X axis is limited."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:100
+msgid ""
+"When rotating across the X axis, this error tolerance factor defines how "
+"much the correction gets slowed down. The lower, the slower."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:103
+msgid ""
+"The maximum amount of force that can occur, when rotating around the X axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:106
+msgid ""
+"The minimum rotation in negative direction to break loose and rotate around "
+"the X axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:109
+msgid ""
+"The amount of rotational restitution across the X axis. The lower, the more "
+"restitution occurs."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:112
+msgid "The speed of all rotations across the X axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:115
+msgid ""
+"The minimum rotation in positive direction to break loose and rotate around "
+"the X axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:118
+msgid ""
+"The amount of rotational damping across the Y axis. The lower, the more "
+"dampening occurs."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:121
+msgid "If [code]true[/code], rotation across the Y axis is limited."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:124
+msgid ""
+"When rotating across the Y axis, this error tolerance factor defines how "
+"much the correction gets slowed down. The lower, the slower."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:127
+msgid ""
+"The maximum amount of force that can occur, when rotating around the Y axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:130
+msgid ""
+"The minimum rotation in negative direction to break loose and rotate around "
+"the Y axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:133
+msgid ""
+"The amount of rotational restitution across the Y axis. The lower, the more "
+"restitution occurs."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:136
+msgid "The speed of all rotations across the Y axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:139
+msgid ""
+"The minimum rotation in positive direction to break loose and rotate around "
+"the Y axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:142
+msgid ""
+"The amount of rotational damping across the Z axis. The lower, the more "
+"dampening occurs."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:145
+msgid "If [code]true[/code], rotation across the Z axis is limited."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:148
+msgid ""
+"When rotating across the Z axis, this error tolerance factor defines how "
+"much the correction gets slowed down. The lower, the slower."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:151
+msgid ""
+"The maximum amount of force that can occur, when rotating around the Z axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:154
+msgid ""
+"The minimum rotation in negative direction to break loose and rotate around "
+"the Z axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:157
+msgid ""
+"The amount of rotational restitution across the Z axis. The lower, the more "
+"restitution occurs."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:160
+msgid "The speed of all rotations across the Z axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:163
+msgid ""
+"The minimum rotation in positive direction to break loose and rotate around "
+"the Z axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:166
+msgid "If [code]true[/code], a rotating motor at the X axis is enabled."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:169
+msgid "Maximum acceleration for the motor at the X axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:172
+msgid "Target speed for the motor at the X axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:175
+msgid "If [code]true[/code], a rotating motor at the Y axis is enabled."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:178
+msgid "Maximum acceleration for the motor at the Y axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:181
+msgid "Target speed for the motor at the Y axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:184
+msgid "If [code]true[/code], a rotating motor at the Z axis is enabled."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:187
+msgid "Maximum acceleration for the motor at the Z axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:190
+msgid "Target speed for the motor at the Z axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:217
+msgid "The amount of damping that happens at the X motion."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:220
+msgid "If [code]true[/code], the linear motion across the X axis is limited."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:223
+msgid "The minimum difference between the pivot points' X axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:226
+msgid ""
+"The amount of restitution on the X axis movement. The lower, the more "
+"momentum gets lost."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:229
+msgid ""
+"A factor applied to the movement across the X axis. The lower, the slower "
+"the movement."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:232
+msgid "The maximum difference between the pivot points' X axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:235
+msgid "The amount of damping that happens at the Y motion."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:238
+msgid "If [code]true[/code], the linear motion across the Y axis is limited."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:241
+msgid "The minimum difference between the pivot points' Y axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:244
+msgid ""
+"The amount of restitution on the Y axis movement. The lower, the more "
+"momentum gets lost."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:247
+msgid ""
+"A factor applied to the movement across the Y axis. The lower, the slower "
+"the movement."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:250
+msgid "The maximum difference between the pivot points' Y axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:253
+msgid "The amount of damping that happens at the Z motion."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:256
+msgid "If [code]true[/code], the linear motion across the Z axis is limited."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:259
+msgid "The minimum difference between the pivot points' Z axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:262
+msgid ""
+"The amount of restitution on the Z axis movement. The lower, the more "
+"momentum gets lost."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:265
+msgid ""
+"A factor applied to the movement across the Z axis. The lower, the slower "
+"the movement."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:268
+msgid "The maximum difference between the pivot points' Z axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:271
+msgid ""
+"If [code]true[/code], then there is a linear motor on the X axis. It will "
+"attempt to reach the target velocity while staying within the force limits."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:274
+msgid ""
+"The maximum force the linear motor can apply on the X axis while trying to "
+"reach the target velocity."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:277
+msgid "The speed that the linear motor will attempt to reach on the X axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:280
+msgid ""
+"If [code]true[/code], then there is a linear motor on the Y axis. It will "
+"attempt to reach the target velocity while staying within the force limits."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:283
+msgid ""
+"The maximum force the linear motor can apply on the Y axis while trying to "
+"reach the target velocity."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:286
+msgid "The speed that the linear motor will attempt to reach on the Y axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:289
+msgid ""
+"If [code]true[/code], then there is a linear motor on the Z axis. It will "
+"attempt to reach the target velocity while staying within the force limits."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:292
+msgid ""
+"The maximum force the linear motor can apply on the Z axis while trying to "
+"reach the target velocity."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:295
+msgid "The speed that the linear motor will attempt to reach on the Z axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:324 doc/classes/PhysicsServer.xml:1086
+msgid "The minimum difference between the pivot points' axes."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:327 doc/classes/PhysicsServer.xml:1089
+msgid "The maximum difference between the pivot points' axes."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:330
+msgid ""
+"A factor applied to the movement across the axes. The lower, the slower the "
+"movement."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:333
+msgid ""
+"The amount of restitution on the axes' movement. The lower, the more "
+"momentum gets lost."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:336 doc/classes/PhysicsServer.xml:1098
+msgid ""
+"The amount of damping that happens at the linear motion across the axes."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:339
+msgid "The velocity the linear motor will try to reach."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:342
+msgid ""
+"The maximum force the linear motor will apply while trying to reach the "
+"velocity target."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:351 doc/classes/PhysicsServer.xml:1107
+msgid ""
+"The minimum rotation in negative direction to break loose and rotate around "
+"the axes."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:354 doc/classes/PhysicsServer.xml:1110
+msgid ""
+"The minimum rotation in positive direction to break loose and rotate around "
+"the axes."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:357
+msgid "The speed of all rotations across the axes."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:360 doc/classes/PhysicsServer.xml:1116
+msgid ""
+"The amount of rotational damping across the axes. The lower, the more "
+"dampening occurs."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:363 doc/classes/PhysicsServer.xml:1119
+msgid ""
+"The amount of rotational restitution across the axes. The lower, the more "
+"restitution occurs."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:366 doc/classes/PhysicsServer.xml:1122
+msgid ""
+"The maximum amount of force that can occur, when rotating around the axes."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:369
+msgid ""
+"When rotating across the axes, this error tolerance factor defines how much "
+"the correction gets slowed down. The lower, the slower."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:372 doc/classes/PhysicsServer.xml:1128
+msgid "Target speed for the motor at the axes."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:375 doc/classes/PhysicsServer.xml:1131
+msgid "Maximum acceleration for the motor at the axes."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:387
+msgid "If enabled, linear motion is possible within the given limits."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:390
+msgid "If enabled, rotational motion is possible within the given limits."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:397
+msgid "If enabled, there is a rotational motor across these axes."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:400
+msgid "If enabled, there is a linear motor across these axes."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:403 doc/classes/HingeJoint.xml:108
+msgid "Represents the size of the [enum Flag] enum."
+msgstr ""
+
+#: doc/classes/Geometry.xml:4
+msgid "Helper node to calculate generic geometry operations."
+msgstr ""
+
+#: doc/classes/Geometry.xml:7
+msgid ""
+"Geometry provides users with a set of helper functions to create geometric "
+"shapes, compute intersections between shapes, and process various other "
+"geometric operations."
+msgstr ""
+
+#: doc/classes/Geometry.xml:16
+msgid ""
+"Returns an array with 6 [Plane]s that describe the sides of a box centered "
+"at the origin. The box size is defined by [code]extents[/code], which "
+"represents one (positive) corner of the box (i.e. half its actual size)."
+msgstr ""
+
+#: doc/classes/Geometry.xml:27
+msgid ""
+"Returns an array of [Plane]s closely bounding a faceted capsule centered at "
+"the origin with radius [code]radius[/code] and height [code]height[/code]. "
+"The parameter [code]sides[/code] defines how many planes will be generated "
+"for the side part of the capsule, whereas [code]lats[/code] gives the number "
+"of latitudinal steps at the bottom and top of the capsule. The parameter "
+"[code]axis[/code] describes the axis along which the capsule is oriented (0 "
+"for X, 1 for Y, 2 for Z)."
+msgstr ""
+
+#: doc/classes/Geometry.xml:37
+msgid ""
+"Returns an array of [Plane]s closely bounding a faceted cylinder centered at "
+"the origin with radius [code]radius[/code] and height [code]height[/code]. "
+"The parameter [code]sides[/code] defines how many planes will be generated "
+"for the round part of the cylinder. The parameter [code]axis[/code] "
+"describes the axis along which the cylinder is oriented (0 for X, 1 for Y, 2 "
+"for Z)."
+msgstr ""
+
+#: doc/classes/Geometry.xml:45
+msgid ""
+"Clips the polygon defined by the points in [code]points[/code] against the "
+"[code]plane[/code] and returns the points of the clipped polygon."
+msgstr ""
+
+#: doc/classes/Geometry.xml:53
+msgid ""
+"Clips [code]polygon_a[/code] against [code]polygon_b[/code] and returns an "
+"array of clipped polygons. This performs [constant OPERATION_DIFFERENCE] "
+"between polygons. Returns an empty array if [code]polygon_b[/code] "
+"completely overlaps [code]polygon_a[/code].\n"
+"If [code]polygon_b[/code] is enclosed by [code]polygon_a[/code], returns an "
+"outer polygon (boundary) and inner polygon (hole) which could be "
+"distinguished by calling [method is_polygon_clockwise]."
+msgstr ""
+
+#: doc/classes/Geometry.xml:62
+msgid ""
+"Clips [code]polyline[/code] against [code]polygon[/code] and returns an "
+"array of clipped polylines. This performs [constant OPERATION_DIFFERENCE] "
+"between the polyline and the polygon. This operation can be thought of as "
+"cutting a line with a closed shape."
+msgstr ""
+
+#: doc/classes/Geometry.xml:69
+msgid ""
+"Given an array of [Vector2]s, returns the convex hull as a list of points in "
+"counterclockwise order. The last point is the same as the first one."
+msgstr ""
+
+#: doc/classes/Geometry.xml:77
+msgid ""
+"Mutually excludes common area defined by intersection of [code]polygon_a[/"
+"code] and [code]polygon_b[/code] (see [method intersect_polygons_2d]) and "
+"returns an array of excluded polygons. This performs [constant "
+"OPERATION_XOR] between polygons. In other words, returns all but common area "
+"between polygons.\n"
+"The operation may result in an outer polygon (boundary) and inner polygon "
+"(hole) produced which could be distinguished by calling [method "
+"is_polygon_clockwise]."
+msgstr ""
+
+#: doc/classes/Geometry.xml:87
+msgid ""
+"Returns the 3D point on the 3D segment ([code]s1[/code], [code]s2[/code]) "
+"that is closest to [code]point[/code]. The returned point will always be "
+"inside the specified segment."
+msgstr ""
+
+#: doc/classes/Geometry.xml:96
+msgid ""
+"Returns the 2D point on the 2D segment ([code]s1[/code], [code]s2[/code]) "
+"that is closest to [code]point[/code]. The returned point will always be "
+"inside the specified segment."
+msgstr ""
+
+#: doc/classes/Geometry.xml:105
+msgid ""
+"Returns the 3D point on the 3D line defined by ([code]s1[/code], [code]s2[/"
+"code]) that is closest to [code]point[/code]. The returned point can be "
+"inside the segment ([code]s1[/code], [code]s2[/code]) or outside of it, i.e. "
+"somewhere on the line extending from the segment."
+msgstr ""
+
+#: doc/classes/Geometry.xml:114
+msgid ""
+"Returns the 2D point on the 2D line defined by ([code]s1[/code], [code]s2[/"
+"code]) that is closest to [code]point[/code]. The returned point can be "
+"inside the segment ([code]s1[/code], [code]s2[/code]) or outside of it, i.e. "
+"somewhere on the line extending from the segment."
+msgstr ""
+
+#: doc/classes/Geometry.xml:124
+msgid ""
+"Given the two 3D segments ([code]p1[/code], [code]p2[/code]) and ([code]q1[/"
+"code], [code]q2[/code]), finds those two points on the two segments that are "
+"closest to each other. Returns a [PoolVector3Array] that contains this point "
+"on ([code]p1[/code], [code]p2[/code]) as well the accompanying point on "
+"([code]q1[/code], [code]q2[/code])."
+msgstr ""
+
+#: doc/classes/Geometry.xml:134
+msgid ""
+"Given the two 2D segments ([code]p1[/code], [code]q1[/code]) and ([code]p2[/"
+"code], [code]q2[/code]), finds those two points on the two segments that are "
+"closest to each other. Returns a [PoolVector2Array] that contains this point "
+"on ([code]p1[/code], [code]q1[/code]) as well the accompanying point on "
+"([code]p2[/code], [code]q2[/code])."
+msgstr ""
+
+#: doc/classes/Geometry.xml:141
+msgid "Used internally by the engine."
+msgstr ""
+
+#: doc/classes/Geometry.xml:149
+msgid ""
+"Intersects [code]polygon_a[/code] with [code]polygon_b[/code] and returns an "
+"array of intersected polygons. This performs [constant "
+"OPERATION_INTERSECTION] between polygons. In other words, returns common "
+"area shared by polygons. Returns an empty array if no intersection occurs.\n"
+"The operation may result in an outer polygon (boundary) and inner polygon "
+"(hole) produced which could be distinguished by calling [method "
+"is_polygon_clockwise]."
+msgstr ""
+
+#: doc/classes/Geometry.xml:158
+msgid ""
+"Intersects [code]polyline[/code] with [code]polygon[/code] and returns an "
+"array of intersected polylines. This performs [constant "
+"OPERATION_INTERSECTION] between the polyline and the polygon. This operation "
+"can be thought of as chopping a line with a closed shape."
+msgstr ""
+
+#: doc/classes/Geometry.xml:167
+msgid ""
+"Returns [code]true[/code] if [code]point[/code] is inside the circle or if "
+"it's located exactly [i]on[/i] the circle's boundary, otherwise returns "
+"[code]false[/code]."
+msgstr ""
+
+#: doc/classes/Geometry.xml:175
+msgid ""
+"Returns [code]true[/code] if [code]point[/code] is inside [code]polygon[/"
+"code] or if it's located exactly [i]on[/i] polygon's boundary, otherwise "
+"returns [code]false[/code]."
+msgstr ""
+
+#: doc/classes/Geometry.xml:182
+msgid ""
+"Returns [code]true[/code] if [code]polygon[/code]'s vertices are ordered in "
+"clockwise order, otherwise returns [code]false[/code]."
+msgstr ""
+
+#: doc/classes/Geometry.xml:192
+msgid ""
+"Checks if the two lines ([code]from_a[/code], [code]dir_a[/code]) and "
+"([code]from_b[/code], [code]dir_b[/code]) intersect. If yes, return the "
+"point of intersection as [Vector2]. If no intersection takes place, returns "
+"an empty [Variant].\n"
+"[b]Note:[/b] The lines are specified using direction vectors, not end points."
+msgstr ""
+
+#: doc/classes/Geometry.xml:200
+msgid ""
+"Given an array of [Vector2]s representing tiles, builds an atlas. The "
+"returned dictionary has two keys: [code]points[/code] is a vector of "
+"[Vector2] that specifies the positions of each tile, [code]size[/code] "
+"contains the overall size of the whole atlas as [Vector2]."
+msgstr ""
+
+#: doc/classes/Geometry.xml:208
+msgid ""
+"Merges (combines) [code]polygon_a[/code] and [code]polygon_b[/code] and "
+"returns an array of merged polygons. This performs [constant "
+"OPERATION_UNION] between polygons.\n"
+"The operation may result in an outer polygon (boundary) and multiple inner "
+"polygons (holes) produced which could be distinguished by calling [method "
+"is_polygon_clockwise]."
+msgstr ""
+
+#: doc/classes/Geometry.xml:218
+msgid ""
+"Inflates or deflates [code]polygon[/code] by [code]delta[/code] units "
+"(pixels). If [code]delta[/code] is positive, makes the polygon grow outward. "
+"If [code]delta[/code] is negative, shrinks the polygon inward. Returns an "
+"array of polygons because inflating/deflating may result in multiple "
+"discrete polygons. Returns an empty array if [code]delta[/code] is negative "
+"and the absolute value of it approximately exceeds the minimum bounding "
+"rectangle dimensions of the polygon.\n"
+"Each polygon's vertices will be rounded as determined by [code]join_type[/"
+"code], see [enum PolyJoinType].\n"
+"The operation may result in an outer polygon (boundary) and inner polygon "
+"(hole) produced which could be distinguished by calling [method "
+"is_polygon_clockwise].\n"
+"[b]Note:[/b] To translate the polygon's vertices specifically, use the "
+"[method Transform2D.xform] method:\n"
+"[codeblock]\n"
+"var polygon = PoolVector2Array([Vector2(0, 0), Vector2(100, 0), Vector2(100, "
+"100), Vector2(0, 100)])\n"
+"var offset = Vector2(50, 50)\n"
+"polygon = Transform2D(0, offset).xform(polygon)\n"
+"print(polygon) # prints [Vector2(50, 50), Vector2(150, 50), Vector2(150, "
+"150), Vector2(50, 150)]\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Geometry.xml:237
+msgid ""
+"Inflates or deflates [code]polyline[/code] by [code]delta[/code] units "
+"(pixels), producing polygons. If [code]delta[/code] is positive, makes the "
+"polyline grow outward. Returns an array of polygons because inflating/"
+"deflating may result in multiple discrete polygons. If [code]delta[/code] is "
+"negative, returns an empty array.\n"
+"Each polygon's vertices will be rounded as determined by [code]join_type[/"
+"code], see [enum PolyJoinType].\n"
+"Each polygon's endpoints will be rounded as determined by [code]end_type[/"
+"code], see [enum PolyEndType].\n"
+"The operation may result in an outer polygon (boundary) and inner polygon "
+"(hole) produced which could be distinguished by calling [method "
+"is_polygon_clockwise]."
+msgstr ""
+
+#: doc/classes/Geometry.xml:250
+msgid ""
+"Returns if [code]point[/code] is inside the triangle specified by [code]a[/"
+"code], [code]b[/code] and [code]c[/code]."
+msgstr ""
+
+#: doc/classes/Geometry.xml:261
+msgid ""
+"Tests if the 3D ray starting at [code]from[/code] with the direction of "
+"[code]dir[/code] intersects the triangle specified by [code]a[/code], "
+"[code]b[/code] and [code]c[/code]. If yes, returns the point of intersection "
+"as [Vector3]. If no intersection takes place, an empty [Variant] is returned."
+msgstr ""
+
+#: doc/classes/Geometry.xml:271
+msgid ""
+"Given the 2D segment ([code]segment_from[/code], [code]segment_to[/code]), "
+"returns the position on the segment (as a number between 0 and 1) at which "
+"the segment hits the circle that is located at position "
+"[code]circle_position[/code] and has radius [code]circle_radius[/code]. If "
+"the segment does not intersect the circle, -1 is returned (this is also the "
+"case if the line extending the segment would intersect the circle, but the "
+"segment does not)."
+msgstr ""
+
+#: doc/classes/Geometry.xml:280
+msgid ""
+"Given a convex hull defined though the [Plane]s in the array [code]planes[/"
+"code], tests if the segment ([code]from[/code], [code]to[/code]) intersects "
+"with that hull. If an intersection is found, returns a [PoolVector3Array] "
+"containing the point the intersection and the hull's normal. If no "
+"intersecion is found, an the returned array is empty."
+msgstr ""
+
+#: doc/classes/Geometry.xml:290
+msgid ""
+"Checks if the segment ([code]from[/code], [code]to[/code]) intersects the "
+"cylinder with height [code]height[/code] that is centered at the origin and "
+"has radius [code]radius[/code]. If no, returns an empty [PoolVector3Array]. "
+"If an intersection takes place, the returned array contains the point of "
+"intersection and the cylinder's normal at the point of intersection."
+msgstr ""
+
+#: doc/classes/Geometry.xml:300
+msgid ""
+"Checks if the two segments ([code]from_a[/code], [code]to_a[/code]) and "
+"([code]from_b[/code], [code]to_b[/code]) intersect. If yes, return the point "
+"of intersection as [Vector2]. If no intersection takes place, returns an "
+"empty [Variant]."
+msgstr ""
+
+#: doc/classes/Geometry.xml:310
+msgid ""
+"Checks if the segment ([code]from[/code], [code]to[/code]) intersects the "
+"sphere that is located at [code]sphere_position[/code] and has radius "
+"[code]sphere_radius[/code]. If no, returns an empty [PoolVector3Array]. If "
+"yes, returns a [PoolVector3Array] containing the point of intersection and "
+"the sphere's normal at the point of intersection."
+msgstr ""
+
+#: doc/classes/Geometry.xml:321
+msgid ""
+"Tests if the segment ([code]from[/code], [code]to[/code]) intersects the "
+"triangle [code]a[/code], [code]b[/code], [code]c[/code]. If yes, returns the "
+"point of intersection as [Vector3]. If no intersection takes place, an empty "
+"[Variant] is returned."
+msgstr ""
+
+#: doc/classes/Geometry.xml:328
+msgid ""
+"Triangulates the area specified by discrete set of [code]points[/code] such "
+"that no point is inside the circumcircle of any resulting triangle. Returns "
+"a [PoolIntArray] where each triangle consists of three consecutive point "
+"indices into [code]points[/code] (i.e. the returned array will have [code]n "
+"* 3[/code] elements, with [code]n[/code] being the number of found "
+"triangles). If the triangulation did not succeed, an empty [PoolIntArray] is "
+"returned."
+msgstr ""
+
+#: doc/classes/Geometry.xml:335
+msgid ""
+"Triangulates the polygon specified by the points in [code]polygon[/code]. "
+"Returns a [PoolIntArray] where each triangle consists of three consecutive "
+"point indices into [code]polygon[/code] (i.e. the returned array will have "
+"[code]n * 3[/code] elements, with [code]n[/code] being the number of found "
+"triangles). If the triangulation did not succeed, an empty [PoolIntArray] is "
+"returned."
+msgstr ""
+
+#: doc/classes/Geometry.xml:341
+msgid ""
+"Create regions where either subject or clip polygons (or both) are filled."
+msgstr ""
+
+#: doc/classes/Geometry.xml:344
+msgid ""
+"Create regions where subject polygons are filled except where clip polygons "
+"are filled."
+msgstr ""
+
+#: doc/classes/Geometry.xml:347
+msgid "Create regions where both subject and clip polygons are filled."
+msgstr ""
+
+#: doc/classes/Geometry.xml:350
+msgid ""
+"Create regions where either subject or clip polygons are filled but not "
+"where both are filled."
+msgstr ""
+
+#: doc/classes/Geometry.xml:353
+msgid ""
+"Squaring is applied uniformally at all convex edge joins at [code]1 * delta[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Geometry.xml:356
+msgid ""
+"While flattened paths can never perfectly trace an arc, they are "
+"approximated by a series of arc chords."
+msgstr ""
+
+#: doc/classes/Geometry.xml:359
+msgid ""
+"There's a necessary limit to mitered joins since offsetting edges that join "
+"at very acute angles will produce excessively long and narrow \"spikes\". "
+"For any given edge join, when miter offsetting would exceed that maximum "
+"distance, \"square\" joining is applied."
+msgstr ""
+
+#: doc/classes/Geometry.xml:362
+msgid ""
+"Endpoints are joined using the [enum PolyJoinType] value and the path filled "
+"as a polygon."
+msgstr ""
+
+#: doc/classes/Geometry.xml:365
+msgid ""
+"Endpoints are joined using the [enum PolyJoinType] value and the path filled "
+"as a polyline."
+msgstr ""
+
+#: doc/classes/Geometry.xml:368
+msgid "Endpoints are squared off with no extension."
+msgstr ""
+
+#: doc/classes/Geometry.xml:371
+msgid "Endpoints are squared off and extended by [code]delta[/code] units."
+msgstr ""
+
+#: doc/classes/Geometry.xml:374
+msgid "Endpoints are rounded off and extended by [code]delta[/code] units."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:4
+msgid "Base node for geometry-based visual instances."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:7
+msgid ""
+"Base node for geometry-based visual instances. Shares some common "
+"functionality like visibility and custom materials."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:16
+msgid ""
+"Returns the [enum GeometryInstance.Flags] that have been set for this object."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:23
+msgid ""
+"Overrides the bounding box of this node with a custom one. To remove it, set "
+"an [AABB] with all fields set to zero."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:31
+msgid ""
+"Sets the [enum GeometryInstance.Flags] specified. See [enum GeometryInstance."
+"Flags] for options."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:37
+msgid ""
+"The selected shadow casting flag. See [enum ShadowCastingSetting] for "
+"possible values."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:40
+msgid ""
+"The extra distance added to the GeometryInstance's bounding box ([AABB]) to "
+"increase its cull box."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:43
+msgid ""
+"When disabled, the mesh will be taken into account when computing indirect "
+"lighting, but the resulting lightmap will not be saved. Useful for emissive "
+"only materials or shadow casters."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:46
+msgid ""
+"Scale factor for the generated baked lightmap. Useful for adding detail to "
+"certain mesh instances."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:49
+msgid ""
+"The GeometryInstance's max LOD distance.\n"
+"[b]Note:[/b] This property currently has no effect."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:53
+msgid ""
+"The GeometryInstance's max LOD margin.\n"
+"[b]Note:[/b] This property currently has no effect."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:57
+msgid ""
+"The GeometryInstance's min LOD distance.\n"
+"[b]Note:[/b] This property currently has no effect."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:61
+msgid ""
+"The GeometryInstance's min LOD margin.\n"
+"[b]Note:[/b] This property currently has no effect."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:65
+msgid ""
+"The material override for the whole geometry.\n"
+"If a material is assigned to this property, it will be used instead of any "
+"material set in any material slot of the mesh."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:69
+msgid ""
+"If [code]true[/code], this GeometryInstance will be used when baking lights "
+"using a [GIProbe] or [BakedLightmap]."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:74
+msgid "The generated lightmap texture will have the original size."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:77
+msgid "The generated lightmap texture will be twice as large, on each axis."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:80
+msgid "The generated lightmap texture will be 4 times as large, on each axis."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:83
+msgid "The generated lightmap texture will be 8 times as large, on each axis."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:88
+msgid "Will not cast any shadows."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:91
+msgid ""
+"Will cast shadows from all visible faces in the GeometryInstance.\n"
+"Will take culling into account, so faces not being rendered will not be "
+"taken into account when shadow casting."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:95
+msgid ""
+"Will cast shadows from all visible faces in the GeometryInstance.\n"
+"Will not take culling into account, so all faces will be taken into account "
+"when shadow casting."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:99
+msgid ""
+"Will only show the shadows casted from this object.\n"
+"In other words, the actual mesh will not be visible, only the shadows casted "
+"from the mesh will be."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:103
+msgid ""
+"Will allow the GeometryInstance to be used when baking lights using a "
+"[GIProbe] or [BakedLightmap]."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:106
+msgid ""
+"Unused in this class, exposed for consistency with [enum VisualServer."
+"InstanceFlags]."
+msgstr ""
+
+#: doc/classes/GIProbe.xml:4
+msgid "Real-time global illumination (GI) probe."
+msgstr ""
+
+#: doc/classes/GIProbe.xml:7
+msgid ""
+"[GIProbe]s are used to provide high-quality real-time indirect light to "
+"scenes. They precompute the effect of objects that emit light and the effect "
+"of static geometry to simulate the behavior of complex light in real-time. "
+"[GIProbe]s need to be baked before using, however, once baked, dynamic "
+"objects will receive light from them. Further, lights can be fully dynamic "
+"or baked.\n"
+"Having [GIProbe]s in a scene can be expensive, the quality of the probe can "
+"be turned down in exchange for better performance in the [ProjectSettings] "
+"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
+"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
+"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
+"leaks (avoid one-sided walls). For interior levels, enclose your level "
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
+"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
+"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
+"emit light in a [GIProbe]."
+msgstr ""
+
+#: doc/classes/GIProbe.xml:15
+msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
+msgstr ""
+
+#: doc/classes/GIProbe.xml:24
+msgid ""
+"Bakes the effect from all [GeometryInstance]s marked with [member "
+"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
+"[constant Light.BAKE_INDIRECT] or [constant Light.BAKE_ALL]. If "
+"[code]create_visual_debug[/code] is [code]true[/code], after baking the "
+"light, this will generate a [MultiMesh] that has a cube representing each "
+"solid cell with each cube colored to the cell's albedo color. This can be "
+"used to visualize the [GIProbe]'s data and debug any issues that may be "
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
+msgstr ""
+
+#: doc/classes/GIProbe.xml:31
+msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
+msgstr ""
+
+#: doc/classes/GIProbe.xml:37
+msgid ""
+"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
+"used to avoid self-shadowing, but may introduce light leaking at higher "
+"values. This and [member normal_bias] should be played around with to "
+"minimize self-shadowing and light leaking.\n"
+"[b]Note:[/b] [code]bias[/code] should usually be above 1.0 as that is the "
+"size of the voxels."
+msgstr ""
+
+#: doc/classes/GIProbe.xml:41
+msgid ""
+"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
+"no longer has any effect when enabled."
+msgstr ""
+
+#: doc/classes/GIProbe.xml:44
+msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
+msgstr ""
+
+#: doc/classes/GIProbe.xml:47
+msgid ""
+"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
+"scaled within this range."
+msgstr ""
+
+#: doc/classes/GIProbe.xml:50
+msgid ""
+"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
+"brighter."
+msgstr ""
+
+#: doc/classes/GIProbe.xml:53
+msgid ""
+"The size of the area covered by the [GIProbe]. If you make the extents "
+"larger without increasing the subdivisions with [member subdiv], the size of "
+"each cell will increase and result in lower detailed lighting."
+msgstr ""
+
+#: doc/classes/GIProbe.xml:56
+msgid ""
+"If [code]true[/code], ignores the sky contribution when calculating lighting."
+msgstr ""
+
+#: doc/classes/GIProbe.xml:59
+msgid ""
+"Offsets the lookup into the [GIProbe] based on the object's normal "
+"direction. Can be used to reduce some self-shadowing artifacts."
+msgstr ""
+
+#: doc/classes/GIProbe.xml:62
+msgid ""
+"How much light propagates through the probe internally. A higher value "
+"allows light to spread further."
+msgstr ""
+
+#: doc/classes/GIProbe.xml:65
+msgid ""
+"Number of times to subdivide the grid that the [GIProbe] operates on. A "
+"higher number results in finer detail and thus higher visual quality, while "
+"lower numbers result in better performance."
+msgstr ""
+
+#: doc/classes/GIProbe.xml:70
+msgid ""
+"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
+"Use it if you can, but especially use it on lower-end hardware."
+msgstr ""
+
+#: doc/classes/GIProbe.xml:73
+msgid "Use 128 subdivisions. This is the default quality setting."
+msgstr ""
+
+#: doc/classes/GIProbe.xml:76
+msgid "Use 256 subdivisions."
+msgstr ""
+
+#: doc/classes/GIProbe.xml:79
+msgid ""
+"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
+"On lower-end hardware, this could cause the GPU to stall."
+msgstr ""
+
+#: doc/classes/GIProbe.xml:82
+msgid "Represents the size of the [enum Subdiv] enum."
+msgstr ""
+
+#: modules/gltf/doc_classes/GLTFLight.xml:13
+msgid ""
+"The [Color] of the light. Defaults to white. A black color causes the light "
+"to have no effect."
+msgstr ""
+
+#: modules/gltf/doc_classes/GLTFLight.xml:16
+msgid ""
+"The inner angle of the cone in a spotlight. Must be less than or equal to "
+"the outer cone angle.\n"
+"Within this angle, the light is at full brightness. Between the inner and "
+"outer cone angles, there is a transition from full brightness to zero "
+"brightness. When creating a Godot [SpotLight], the ratio between the inner "
+"and outer cone angles is used to calculate the attenuation of the light."
+msgstr ""
+
+#: modules/gltf/doc_classes/GLTFLight.xml:20
+msgid ""
+"The intensity of the light. This is expressed in candelas (lumens per "
+"steradian) for point and spot lights, and lux (lumens per m²) for "
+"directional lights. When creating a Godot light, this value is converted to "
+"a unitless multiplier."
+msgstr ""
+
+#: modules/gltf/doc_classes/GLTFLight.xml:23
+msgid ""
+"The outer angle of the cone in a spotlight. Must be greater than or equal to "
+"the inner angle.\n"
+"At this angle, the light drops off to zero brightness. Between the inner and "
+"outer cone angles, there is a transition from full brightness to zero "
+"brightness. If this angle is a half turn, then the spotlight emits in all "
+"directions. When creating a Godot [SpotLight], the outer cone angle is used "
+"as the angle of the spotlight."
+msgstr ""
+
+#: modules/gltf/doc_classes/GLTFLight.xml:27
+msgid ""
+"The range of the light, beyond which the light has no effect. GLTF lights "
+"with no range defined behave like physical lights (which have infinite "
+"range). When creating a Godot light, the range is clamped to 4096."
+msgstr ""
+
+#: modules/gltf/doc_classes/GLTFLight.xml:30
+msgid ""
+"The type of the light. The values accepted by Godot are \"point\", \"spot\", "
+"and \"directional\", which correspond to Godot's [OmniLight], [SpotLight], "
+"and [DirectionalLight] respectively."
+msgstr ""
+
+#: modules/mono/doc_classes/GodotSharp.xml:4
+msgid "Bridge between Godot and the Mono runtime (Mono-enabled builds only)."
+msgstr ""
+
+#: modules/mono/doc_classes/GodotSharp.xml:7
+msgid ""
+"This class is a bridge between Godot and the Mono runtime. It exposes "
+"several low-level operations and is only available in Mono-enabled Godot "
+"builds.\n"
+"See also [CSharpScript]."
+msgstr ""
+
+#: modules/mono/doc_classes/GodotSharp.xml:17
+msgid "Attaches the current thread to the Mono runtime."
+msgstr ""
+
+#: modules/mono/doc_classes/GodotSharp.xml:24
+msgid "Detaches the current thread from the Mono runtime."
+msgstr ""
+
+#: modules/mono/doc_classes/GodotSharp.xml:31
+msgid ""
+"Returns the current MonoDomain ID.\n"
+"[b]Note:[/b] The Mono runtime must be initialized for this method to work "
+"(use [method is_runtime_initialized] to check). If the Mono runtime isn't "
+"initialized at the time this method is called, the engine will crash."
+msgstr ""
+
+#: modules/mono/doc_classes/GodotSharp.xml:39
+msgid ""
+"Returns the scripts MonoDomain's ID. This will be the same MonoDomain ID as "
+"[method get_domain_id], unless the scripts domain isn't loaded.\n"
+"[b]Note:[/b] The Mono runtime must be initialized for this method to work "
+"(use [method is_runtime_initialized] to check). If the Mono runtime isn't "
+"initialized at the time this method is called, the engine will crash."
+msgstr ""
+
+#: modules/mono/doc_classes/GodotSharp.xml:49
+msgid ""
+"Returns [code]true[/code] if the domain is being finalized, [code]false[/"
+"code] otherwise."
+msgstr ""
+
+#: modules/mono/doc_classes/GodotSharp.xml:56
+msgid ""
+"Returns [code]true[/code] if the Mono runtime is initialized, [code]false[/"
+"code] otherwise."
+msgstr ""
+
+#: modules/mono/doc_classes/GodotSharp.xml:63
+msgid ""
+"Returns [code]true[/code] if the Mono runtime is shutting down, [code]false[/"
+"code] otherwise."
+msgstr ""
+
+#: modules/mono/doc_classes/GodotSharp.xml:70
+msgid ""
+"Returns [code]true[/code] if the scripts domain is loaded, [code]false[/"
+"code] otherwise."
+msgstr ""
+
+#: doc/classes/Gradient.xml:4
+msgid ""
+"A color interpolator resource which can be used to generate colors between "
+"user-defined color points."
+msgstr ""
+
+#: doc/classes/Gradient.xml:7
+msgid ""
+"Given a set of colors, this resource will interpolate them in order. This "
+"means that if you have color 1, color 2 and color 3, the ramp will "
+"interpolate from color 1 to color 2 and from color 2 to color 3. The ramp "
+"will initially have 2 colors (black and white), one (black) at ramp lower "
+"offset 0 and the other (white) at the ramp higher offset 1."
+msgstr ""
+
+#: doc/classes/Gradient.xml:17
+msgid ""
+"Adds the specified color to the end of the ramp, with the specified offset."
+msgstr ""
+
+#: doc/classes/Gradient.xml:24
+msgid "Returns the color of the ramp color at index [code]point[/code]."
+msgstr ""
+
+#: doc/classes/Gradient.xml:31
+msgid "Returns the offset of the ramp color at index [code]point[/code]."
+msgstr ""
+
+#: doc/classes/Gradient.xml:37
+msgid "Returns the number of colors in the ramp."
+msgstr ""
+
+#: doc/classes/Gradient.xml:44
+msgid "Returns the interpolated color specified by [code]offset[/code]."
+msgstr ""
+
+#: doc/classes/Gradient.xml:51
+msgid "Removes the color at the index [code]point[/code]."
+msgstr ""
+
+#: doc/classes/Gradient.xml:59
+msgid "Sets the color of the ramp color at index [code]point[/code]."
+msgstr ""
+
+#: doc/classes/Gradient.xml:67
+msgid "Sets the offset for the ramp color at index [code]point[/code]."
+msgstr ""
+
+#: doc/classes/Gradient.xml:73
+msgid "Gradient's colors returned as a [PoolColorArray]."
+msgstr ""
+
+#: doc/classes/Gradient.xml:76
+msgid "Gradient's offsets returned as a [PoolRealArray]."
+msgstr ""
+
+#: doc/classes/GradientTexture.xml:4
+msgid "Gradient-filled texture."
+msgstr ""
+
+#: doc/classes/GradientTexture.xml:7
+msgid ""
+"GradientTexture uses a [Gradient] to fill the texture data. The gradient "
+"will be filled from left to right using colors obtained from the gradient. "
+"This means the texture does not necessarily represent an exact copy of the "
+"gradient, but instead an interpolation of samples obtained from the gradient "
+"at fixed steps (see [member width])."
+msgstr ""
+
+#: doc/classes/GradientTexture.xml:15
+msgid "The [Gradient] that will be used to fill the texture."
+msgstr ""
+
+#: doc/classes/GradientTexture.xml:18
+msgid "The number of color samples that will be obtained from the [Gradient]."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:4
+msgid ""
+"GraphEdit is an area capable of showing various GraphNodes. It manages "
+"connection events between them."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:7
+msgid ""
+"GraphEdit manages the showing of GraphNodes it contains, as well as "
+"connections and disconnections between them. Signals are sent for each of "
+"these two events. Disconnection between GraphNode slots is disabled by "
+"default.\n"
+"It is greatly advised to enable low-processor usage mode (see [member OS."
+"low_processor_usage_mode]) when using GraphEdits."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:18
+msgid ""
+"Makes possible the connection between two different slot types. The type is "
+"defined with the [method GraphNode.set_slot] method."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:25
+msgid ""
+"Makes possible to disconnect nodes when dragging from the slot at the left "
+"if it has the specified type."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:32
+msgid ""
+"Makes possible to disconnect nodes when dragging from the slot at the right "
+"if it has the specified type."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:38
+msgid "Removes all connections between nodes."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:48
+msgid ""
+"Create a connection between the [code]from_port[/code] slot of the "
+"[code]from[/code] GraphNode and the [code]to_port[/code] slot of the "
+"[code]to[/code] GraphNode. If the connection already exists, no connection "
+"is created."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:58
+msgid ""
+"Removes the connection between the [code]from_port[/code] slot of the "
+"[code]from[/code] GraphNode and the [code]to_port[/code] slot of the "
+"[code]to[/code] GraphNode. If the connection does not exist, no connection "
+"is removed."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:64
+msgid ""
+"Returns an Array containing the list of connections. A connection consists "
+"in a structure of the form [code]{ from_port: 0, from: \"GraphNode name 0\", "
+"to_port: 1, to: \"GraphNode name 1\" }[/code]."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:70
+msgid ""
+"Gets the [HBoxContainer] that contains the zooming and grid snap controls in "
+"the top left of the graph. You can use this method to reposition the toolbar "
+"or to add your own custom controls to it.\n"
+"[b]Warning:[/b] This is a required internal node, removing and freeing it "
+"may cause a crash. If you wish to hide it or any of its children, use their "
+"[member CanvasItem.visible] property."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:81
+msgid ""
+"Returns [code]true[/code] if the [code]from_port[/code] slot of the "
+"[code]from[/code] GraphNode is connected to the [code]to_port[/code] slot of "
+"the [code]to[/code] GraphNode."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:89
+msgid "Returns whether it's possible to connect slots of the specified types."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:97
+msgid ""
+"Makes it not possible to connect between two different slot types. The type "
+"is defined with the [method GraphNode.set_slot] method."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:104
+msgid ""
+"Removes the possibility to disconnect nodes when dragging from the slot at "
+"the left if it has the specified type."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:111
+msgid ""
+"Removes the possibility to disconnect nodes when dragging from the slot at "
+"the right if it has the specified type."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:122
+msgid ""
+"Sets the coloration of the connection between [code]from[/code]'s "
+"[code]from_port[/code] and [code]to[/code]'s [code]to_port[/code] with the "
+"color provided in the [code]activity[/code] theme property."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:129
+msgid "Sets the specified [code]node[/code] as the one selected."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:136
+msgid "If [code]true[/code], the minimap is visible."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:139
+msgid "The opacity of the minimap rectangle."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:142
+msgid ""
+"The size of the minimap rectangle. The map itself is based on the size of "
+"the grid area and is scaled to fit this rectangle."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:146
+msgid ""
+"If [code]true[/code], enables disconnection of existing connections in the "
+"GraphEdit by dragging the right end."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:149
+msgid "The scroll offset."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:152
+msgid ""
+"If [code]true[/code], makes a label with the current zoom level visible. The "
+"zoom value is displayed in percents."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:155
+msgid "The snapping distance in pixels."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:158
+msgid "If [code]true[/code], enables snapping."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:161
+msgid "The current zoom value."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:164
+msgid "The upper zoom limit."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:167
+msgid "The lower zoom limit."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:170
+msgid "The step of each zoom level."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:176
+msgid "Emitted at the beginning of a GraphNode movement."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:181
+msgid "Emitted at the end of a GraphNode movement."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:189
+msgid ""
+"Emitted when user dragging connection from input port into empty space of "
+"the graph."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:198
+msgid ""
+"Emitted to the GraphEdit when the connection between the [code]from_slot[/"
+"code] slot of the [code]from[/code] GraphNode and the [code]to_slot[/code] "
+"slot of the [code]to[/code] GraphNode is attempted to be created."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:206
+msgid ""
+"Emitted when user dragging connection from output port into empty space of "
+"the graph."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:211
+msgid "Emitted when the user presses [code]Ctrl + C[/code]."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:216
+msgid "Emitted when a GraphNode is attempted to be removed from the GraphEdit."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:225
+msgid ""
+"Emitted to the GraphEdit when the connection between [code]from_slot[/code] "
+"slot of [code]from[/code] GraphNode and [code]to_slot[/code] slot of "
+"[code]to[/code] GraphNode is attempted to be removed."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:230
+msgid ""
+"Emitted when a GraphNode is attempted to be duplicated in the GraphEdit."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:236
+msgid "Emitted when a GraphNode is selected."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:246
+msgid "Emitted when the user presses [code]Ctrl + V[/code]."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:252
+msgid ""
+"Emitted when a popup is requested. Happens on right-clicking in the "
+"GraphEdit. [code]position[/code] is the position of the mouse pointer when "
+"the signal is sent."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:258
+msgid ""
+"Emitted when the scroll offset is changed by the user. It will not be "
+"emitted when changed in code."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:272
+msgid "The background drawn under the grid."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:275
+msgid "Color of major grid lines."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:278
+msgid "Color of minor grid lines."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:283
+msgid "The icon for the zoom out button."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:286
+msgid "The icon for the zoom in button."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:289
+msgid ""
+"The horizontal range within which a port can be grabbed (on both sides)."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:292
+msgid "The vertical range within which a port can be grabbed (on both sides)."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:295
+msgid "The icon for the zoom reset button."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:298
+msgid "The fill color of the selection rectangle."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:301
+msgid "The outline color of the selection rectangle."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:304
+msgid "The icon for the snap toggle button."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:4
+msgid ""
+"A GraphNode is a container with potentially several input and output slots "
+"allowing connections between GraphNodes. Slots can have different, "
+"incompatible types."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:7
+msgid ""
+"A GraphNode is a container. Each GraphNode can have several input and output "
+"slots, sometimes referred to as ports, allowing connections between "
+"GraphNodes. To add a slot to GraphNode, add any [Control]-derived child node "
+"to it.\n"
+"After adding at least one child to GraphNode new sections will be "
+"automatically created in the Inspector called 'Slot'. When 'Slot' is "
+"expanded you will see list with index number for each slot. You can click on "
+"each of them to expand further.\n"
+"In the Inspector you can enable (show) or disable (hide) slots. By default, "
+"all slots are disabled so you may not see any slots on your GraphNode "
+"initially. You can assign a type to each slot. Only slots of the same type "
+"will be able to connect to each other. You can also assign colors to slots. "
+"A tuple of input and output slots is defined for each GUI element included "
+"in the GraphNode. Input connections are on the left and output connections "
+"are on the right side of GraphNode. Only enabled slots are counted as "
+"connections."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:17
+msgid "Disables all input and output slots of the GraphNode."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:24
+msgid "Disables input and output slot whose index is [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:31
+msgid "Returns the [Color] of the input connection [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:37
+msgid ""
+"Returns the number of enabled input slots (connections) to the GraphNode."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:44
+msgid "Returns the position of the input connection [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:51
+msgid "Returns the type of the input connection [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:58
+msgid "Returns the [Color] of the output connection [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:64
+msgid ""
+"Returns the number of enabled output slots (connections) of the GraphNode."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:71
+msgid "Returns the position of the output connection [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:78
+msgid "Returns the type of the output connection [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:85
+msgid "Returns the left (input) [Color] of the slot [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:92
+msgid "Returns the right (output) [Color] of the slot [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:99
+msgid "Returns the left (input) type of the slot [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:106
+msgid "Returns the right (output) type of the slot [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:113
+msgid ""
+"Returns [code]true[/code] if left (input) side of the slot [code]idx[/code] "
+"is enabled."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:120
+msgid ""
+"Returns [code]true[/code] if right (output) side of the slot [code]idx[/"
+"code] is enabled."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:135
+msgid ""
+"Sets properties of the slot with ID [code]idx[/code].\n"
+"If [code]enable_left[/code]/[code]right[/code], a port will appear and the "
+"slot will be able to be connected from this side.\n"
+"[code]type_left[/code]/[code]right[/code] is an arbitrary type of the port. "
+"Only ports with the same type values can be connected.\n"
+"[code]color_left[/code]/[code]right[/code] is the tint of the port's icon on "
+"this side.\n"
+"[code]custom_left[/code]/[code]right[/code] is a custom texture for this "
+"side's port.\n"
+"[b]Note:[/b] This method only sets properties of the slot. To create the "
+"slot, add a [Control]-derived child to the GraphNode.\n"
+"Individual properties can be set using one of the [code]set_slot_*[/code] "
+"methods. You must enable at least one side of the slot to do so."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:149
+msgid ""
+"Sets the [Color] of the left (input) side of the slot [code]idx[/code] to "
+"[code]color_left[/code]."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:157
+msgid ""
+"Sets the [Color] of the right (output) side of the slot [code]idx[/code] to "
+"[code]color_right[/code]."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:165
+msgid ""
+"Toggles the left (input) side of the slot [code]idx[/code]. If "
+"[code]enable_left[/code] is [code]true[/code], a port will appear on the "
+"left side and the slot will be able to be connected from this side."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:173
+msgid ""
+"Toggles the right (output) side of the slot [code]idx[/code]. If "
+"[code]enable_right[/code] is [code]true[/code], a port will appear on the "
+"right side and the slot will be able to be connected from this side."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:181
+msgid ""
+"Sets the left (input) type of the slot [code]idx[/code] to [code]type_left[/"
+"code]."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:189
+msgid ""
+"Sets the right (output) type of the slot [code]idx[/code] to "
+"[code]type_right[/code]."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:195
+msgid "If [code]true[/code], the GraphNode is a comment node."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:198
+msgid ""
+"The offset of the GraphNode, relative to the scroll offset of the "
+"[GraphEdit].\n"
+"[b]Note:[/b] You cannot use position directly, as [GraphEdit] is a "
+"[Container]."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:202
+msgid "Sets the overlay shown above the GraphNode. See [enum Overlay]."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:205
+msgid ""
+"If [code]true[/code], the user can resize the GraphNode.\n"
+"[b]Note:[/b] Dragging the handle will only emit the [signal resize_request] "
+"signal, the GraphNode needs to be resized manually."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:209
+msgid "If [code]true[/code], the GraphNode is selected."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:212
+msgid ""
+"If [code]true[/code], the close button will be visible.\n"
+"[b]Note:[/b] Pressing it will only emit the [signal close_request] signal, "
+"the GraphNode needs to be removed manually."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:216
+msgid "The text displayed in the GraphNode's title bar."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:222
+msgid ""
+"Emitted when the GraphNode is requested to be closed. Happens on clicking "
+"the close button (see [member show_close])."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:229
+msgid "Emitted when the GraphNode is dragged."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:234
+msgid "Emitted when the GraphNode is moved."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:239
+msgid ""
+"Emitted when the GraphNode is requested to be displayed over other ones. "
+"Happens on focusing (clicking into) the GraphNode."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:245
+msgid ""
+"Emitted when the GraphNode is requested to be resized. Happens on dragging "
+"the resizer handle (see [member resizable])."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:251
+msgid "Emitted when any GraphNode's slot is updated."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:257
+msgid "No overlay is shown."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:260
+msgid "Show overlay set in the [code]breakpoint[/code] theme property."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:263
+msgid "Show overlay set in the [code]position[/code] theme property."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:268
+msgid ""
+"The background used when [member overlay] is set to [constant "
+"OVERLAY_BREAKPOINT]."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:271
+msgid ""
+"The icon for the close button, visible when [member show_close] is enabled."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:274
+msgid "The color modulation applied to the close button icon."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:277 doc/classes/WindowDialog.xml:41
+msgid "The vertical offset of the close button."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:280
+msgid "The [StyleBox] used when [member comment] is enabled."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:283
+msgid ""
+"The [StyleBox] used when [member comment] is enabled and the [GraphNode] is "
+"focused."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:290
+msgid "The default background for [GraphNode]."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:293
+msgid "The icon used for representing ports."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:296
+msgid "Horizontal offset for the ports."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:299
+msgid ""
+"The background used when [member overlay] is set to [constant "
+"OVERLAY_POSITION]."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:302
+msgid "The icon used for resizer, visible when [member resizable] is enabled."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:305
+msgid "The color modulation applied to the resizer icon."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:308
+msgid "The background used when the [GraphNode] is selected."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:311
+msgid "The vertical distance between ports."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:314
+msgid "Color of the title text."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:317
+msgid "Font used for the title text."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:320
+msgid "Vertical offset of the title text."
+msgstr ""
+
+#: doc/classes/GridContainer.xml:4
+msgid ""
+"Grid container used to arrange Control-derived children in a grid like "
+"layout."
+msgstr ""
+
+#: doc/classes/GridContainer.xml:7
+msgid ""
+"GridContainer will arrange its Control-derived children in a grid like "
+"structure, the grid columns are specified using the [member columns] "
+"property and the number of rows will be equal to the number of children in "
+"the container divided by the number of columns. For example, if the "
+"container has 5 children, and 2 columns, there will be 3 rows in the "
+"container.\n"
+"Notice that grid layout will preserve the columns and rows for every size of "
+"the container, and that empty columns will be expanded automatically.\n"
+"[b]Note:[/b] GridContainer only works with child nodes inheriting from "
+"Control. It won't rearrange child nodes inheriting from Node2D."
+msgstr ""
+
+#: doc/classes/GridContainer.xml:18
+msgid ""
+"The number of columns in the [GridContainer]. If modified, [GridContainer] "
+"reorders its Control-derived children to accommodate the new layout."
+msgstr ""
+
+#: doc/classes/GridContainer.xml:26
+msgid "The horizontal separation of children nodes."
+msgstr ""
+
+#: doc/classes/GridContainer.xml:29
+msgid "The vertical separation of children nodes."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:4
+msgid "Node for 3D tile-based maps."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:7
+msgid ""
+"GridMap lets you place meshes on a grid interactively. It works both from "
+"the editor and from scripts, which can help you create in-game level "
+"editors.\n"
+"GridMaps use a [MeshLibrary] which contains a list of tiles. Each tile is a "
+"mesh with materials plus optional collision and navigation shapes.\n"
+"A GridMap contains a collection of cells. Each grid cell refers to a tile in "
+"the [MeshLibrary]. All cells in the map have the same dimensions.\n"
+"Internally, a GridMap is split into a sparse collection of octants for "
+"efficient rendering and physics processing. Every octant has the same "
+"dimensions and can contain several cells.\n"
+"[b]Note:[/b] GridMap doesn't extend [VisualInstance] and therefore can't be "
+"hidden or cull masked based on [member VisualInstance.layers]. If you make a "
+"light not affect the first layer, the whole GridMap won't be lit by the "
+"light in question."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:14
+msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/using_gridmaps.html"
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:22
+msgid "Clear all cells."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:39
+msgid ""
+"Returns an array of [ArrayMesh]es and [Transform] references of all bake "
+"meshes that exist within the current GridMap."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:48
+msgid ""
+"The [MeshLibrary] item index located at the grid-based X, Y and Z "
+"coordinates. If the cell is empty, [constant INVALID_CELL_ITEM] will be "
+"returned."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:57
+msgid ""
+"The orientation of the cell at the grid-based X, Y and Z coordinates. -1 is "
+"returned if the cell is empty."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:64
+msgid "Returns an individual bit on the [member collision_layer]."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:71
+msgid "Returns an individual bit on the [member collision_mask]."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:77
+msgid ""
+"Returns an array of [Transform] and [Mesh] references corresponding to the "
+"non-empty cells in the grid. The transforms are specified in world space."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:83
+msgid ""
+"Returns an array of [Vector3] with the non-empty cell coordinates in the "
+"grid map."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:99
+msgid ""
+"Returns the position of a grid cell in the GridMap's local coordinate space."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:116
+msgid ""
+"Sets the mesh index for the cell referenced by its grid-based X, Y and Z "
+"coordinates.\n"
+"A negative item index such as [constant INVALID_CELL_ITEM] will clear the "
+"cell.\n"
+"Optionally, the item's orientation can be passed. For valid orientation "
+"values, see [method Basis.get_orthogonal_index]."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:135
+msgid "Sets an individual bit on the [member collision_layer]."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:143
+msgid "Sets an individual bit on the [member collision_mask]."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:150
+msgid ""
+"Returns the coordinates of the grid cell containing the given point.\n"
+"[code]pos[/code] should be in the GridMap's local coordinate space."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:157
+msgid "If [code]true[/code], grid items are centered on the X axis."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:160
+msgid "If [code]true[/code], grid items are centered on the Y axis."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:163
+msgid "If [code]true[/code], grid items are centered on the Z axis."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:166
+msgid ""
+"The size of each octant measured in number of cells. This applies to all "
+"three axis."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:169
+msgid ""
+"The scale of the cell items.\n"
+"This does not affect the size of the grid cells themselves, only the items "
+"in them. This can be used to make cell items overlap their neighbors."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:173
+msgid ""
+"The dimensions of the grid's cells.\n"
+"This does not affect the size of the meshes. See [member cell_scale]."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:177
+msgid ""
+"The physics layers this GridMap is in.\n"
+"GridMaps act as static bodies, meaning they aren't affected by gravity or "
+"other forces. They only affect other physics bodies that collide with them."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:181
+msgid ""
+"The physics layers this GridMap detects collisions in. See [url=https://docs."
+"godotengine.org/en/3.4/tutorials/physics/physics_introduction.html#collision-"
+"layers-and-masks]Collision layers and masks[/url] in the documentation for "
+"more information."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:184
+msgid "The assigned [MeshLibrary]."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:187
+msgid ""
+"Controls whether this GridMap will be baked in a [BakedLightmap] or not."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:194
+msgid "Emitted when [member cell_size] changes."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:200
+msgid ""
+"Invalid cell item that can be used in [method set_cell_item] to clear cells "
+"(or represent an empty cell in [method get_cell_item])."
+msgstr ""
+
+#: doc/classes/GrooveJoint2D.xml:4
+msgid "Groove constraint for 2D physics."
+msgstr ""
+
+#: doc/classes/GrooveJoint2D.xml:7
+msgid ""
+"Groove constraint for 2D physics. This is useful for making a body \"slide\" "
+"through a segment placed in another."
+msgstr ""
+
+#: doc/classes/GrooveJoint2D.xml:15
+msgid ""
+"The body B's initial anchor position defined by the joint's origin and a "
+"local offset [member initial_offset] along the joint's Y axis (along the "
+"groove)."
+msgstr ""
+
+#: doc/classes/GrooveJoint2D.xml:18
+msgid ""
+"The groove's length. The groove is from the joint's origin towards [member "
+"length] along the joint's local Y axis."
+msgstr ""
+
+#: doc/classes/HashingContext.xml:4
+msgid "Context to compute cryptographic hashes over multiple iterations."
+msgstr ""
+
+#: doc/classes/HashingContext.xml:7
+msgid ""
+"The HashingContext class provides an interface for computing cryptographic "
+"hashes over multiple iterations. This is useful for example when computing "
+"hashes of big files (so you don't have to load them all in memory), network "
+"streams, and data streams in general (so you don't have to hold buffers).\n"
+"The [enum HashType] enum shows the supported hashing algorithms.\n"
+"[codeblock]\n"
+"const CHUNK_SIZE = 1024\n"
+"\n"
+"func hash_file(path):\n"
+" var ctx = HashingContext.new()\n"
+" var file = File.new()\n"
+" # Start a SHA-256 context.\n"
+" ctx.start(HashingContext.HASH_SHA256)\n"
+" # Check that file exists.\n"
+" if not file.file_exists(path):\n"
+" return\n"
+" # Open the file to hash.\n"
+" file.open(path, File.READ)\n"
+" # Update the context after reading each chunk.\n"
+" while not file.eof_reached():\n"
+" ctx.update(file.get_buffer(CHUNK_SIZE))\n"
+" # Get the computed hash.\n"
+" var res = ctx.finish()\n"
+" # Print the result as hex string and array.\n"
+" printt(res.hex_encode(), Array(res))\n"
+"[/codeblock]\n"
+"[b]Note:[/b] Not available in HTML5 exports."
+msgstr ""
+
+#: doc/classes/HashingContext.xml:38
+msgid "Closes the current context, and return the computed hash."
+msgstr ""
+
+#: doc/classes/HashingContext.xml:45
+msgid ""
+"Starts a new hash computation of the given [code]type[/code] (e.g. [constant "
+"HASH_SHA256] to start computation of a SHA-256)."
+msgstr ""
+
+#: doc/classes/HashingContext.xml:52
+msgid "Updates the computation with the given [code]chunk[/code] of data."
+msgstr ""
+
+#: doc/classes/HashingContext.xml:58
+msgid "Hashing algorithm: MD5."
+msgstr ""
+
+#: doc/classes/HashingContext.xml:61
+msgid "Hashing algorithm: SHA-1."
+msgstr ""
+
+#: doc/classes/HashingContext.xml:64
+msgid "Hashing algorithm: SHA-256."
+msgstr ""
+
+#: doc/classes/HBoxContainer.xml:4
+msgid "Horizontal box container."
+msgstr ""
+
+#: doc/classes/HBoxContainer.xml:7
+msgid "Horizontal box container. See [BoxContainer]."
+msgstr ""
+
+#: doc/classes/HBoxContainer.xml:17
+msgid "The horizontal space between the [HBoxContainer]'s elements."
+msgstr ""
+
+#: doc/classes/HeightMapShape.xml:4
+msgid "Height map shape for 3D physics."
+msgstr ""
+
+#: doc/classes/HeightMapShape.xml:7
+msgid ""
+"Height map shape resource, which can be added to a [PhysicsBody] or [Area]."
+msgstr ""
+
+#: doc/classes/HeightMapShape.xml:15
+msgid ""
+"Height map data, pool array must be of [member map_width] * [member "
+"map_depth] size."
+msgstr ""
+
+#: doc/classes/HeightMapShape.xml:18
+msgid ""
+"Depth of the height map data. Changing this will resize the [member "
+"map_data]."
+msgstr ""
+
+#: doc/classes/HeightMapShape.xml:21
+msgid ""
+"Width of the height map data. Changing this will resize the [member "
+"map_data]."
+msgstr ""
+
+#: doc/classes/HingeJoint.xml:4
+msgid "A hinge between two 3D PhysicsBodies."
+msgstr ""
+
+#: doc/classes/HingeJoint.xml:7
+msgid ""
+"A HingeJoint normally uses the Z axis of body A as the hinge axis, another "
+"axis can be specified when adding it manually though. See also "
+"[Generic6DOFJoint]."
+msgstr ""
+
+#: doc/classes/HingeJoint.xml:16 doc/classes/SpriteBase3D.xml:21
+msgid "Returns the value of the specified flag."
+msgstr ""
+
+#: doc/classes/HingeJoint.xml:23 doc/classes/ParticlesMaterial.xml:25
+#: doc/classes/PinJoint.xml:16
+msgid "Returns the value of the specified parameter."
+msgstr ""
+
+#: doc/classes/HingeJoint.xml:31
+msgid "If [code]true[/code], enables the specified flag."
+msgstr ""
+
+#: doc/classes/HingeJoint.xml:39 doc/classes/PinJoint.xml:24
+msgid "Sets the value of the specified parameter."
+msgstr ""
+
+#: doc/classes/HingeJoint.xml:45 doc/classes/HingeJoint.xml:85
+#: doc/classes/PhysicsServer.xml:977
+msgid ""
+"The speed with which the rotation across the axis perpendicular to the hinge "
+"gets corrected."
+msgstr ""
+
+#: doc/classes/HingeJoint.xml:48 doc/classes/HingeJoint.xml:102
+msgid ""
+"If [code]true[/code], the hinges maximum and minimum rotation, defined by "
+"[member angular_limit/lower] and [member angular_limit/upper] has effects."
+msgstr ""
+
+#: doc/classes/HingeJoint.xml:51 doc/classes/HingeJoint.xml:82
+msgid ""
+"The minimum rotation. Only active if [member angular_limit/enable] is "
+"[code]true[/code]."
+msgstr ""
+
+#: doc/classes/HingeJoint.xml:54 doc/classes/HingeJoint.xml:90
+#: doc/classes/PhysicsServer.xml:982
+msgid "The lower this value, the more the rotation gets slowed down."
+msgstr ""
+
+#: doc/classes/HingeJoint.xml:59 doc/classes/HingeJoint.xml:79
+msgid ""
+"The maximum rotation. Only active if [member angular_limit/enable] is "
+"[code]true[/code]."
+msgstr ""
+
+#: doc/classes/HingeJoint.xml:62 doc/classes/HingeJoint.xml:105
+msgid "When activated, a motor turns the hinge."
+msgstr ""
+
+#: doc/classes/HingeJoint.xml:65 doc/classes/HingeJoint.xml:96
+#: doc/classes/PhysicsServer.xml:988
+msgid "Maximum acceleration for the motor."
+msgstr ""
+
+#: doc/classes/HingeJoint.xml:68 doc/classes/HingeJoint.xml:93
+#: doc/classes/PhysicsServer.xml:985
+msgid "Target speed for the motor."
+msgstr ""
+
+#: doc/classes/HingeJoint.xml:71 doc/classes/HingeJoint.xml:76
+#: doc/classes/PhysicsServer.xml:968
+msgid ""
+"The speed with which the two bodies get pulled together when they move in "
+"different directions."
+msgstr ""
+
+#: doc/classes/HMACContext.xml:4
+msgid "Used to create an HMAC for a message using a key."
+msgstr ""
+
+#: doc/classes/HMACContext.xml:7
+msgid ""
+"The HMACContext class is useful for advanced HMAC use cases, such as "
+"streaming the message as it supports creating the message over time rather "
+"than providing it all at once.\n"
+"[codeblock]\n"
+"extends Node\n"
+"var ctx = HMACContext.new()\n"
+"\n"
+"func _ready():\n"
+" var key = \"supersecret\".to_utf8()\n"
+" var err = ctx.start(HashingContext.HASH_SHA256, key)\n"
+" assert(err == OK)\n"
+" var msg1 = \"this is \".to_utf8()\n"
+" var msg2 = \"vewy vewy secret\".to_utf8()\n"
+" err = ctx.update(msg1)\n"
+" assert(err == OK)\n"
+" err = ctx.update(msg2)\n"
+" assert(err == OK)\n"
+" var hmac = ctx.finish()\n"
+" print(hmac.hex_encode())\n"
+"[/codeblock]\n"
+"And in C# we can use the following.\n"
+"[codeblock]\n"
+"using Godot;\n"
+"using System;\n"
+"using System.Diagnostics;\n"
+"\n"
+"public class CryptoNode : Node\n"
+"{\n"
+" private HMACContext ctx = new HMACContext();\n"
+" public override void _Ready()\n"
+" {\n"
+" PoolByteArray key = String(\"supersecret\").to_utf8();\n"
+" Error err = ctx.Start(HashingContext.HASH_SHA256, key);\n"
+" GD.Assert(err == OK);\n"
+" PoolByteArray msg1 = String(\"this is \").to_utf8();\n"
+" PoolByteArray msg2 = String(\"vewy vew secret\").to_utf8();\n"
+" err = ctx.Update(msg1);\n"
+" GD.Assert(err == OK);\n"
+" err = ctx.Update(msg2);\n"
+" GD.Assert(err == OK);\n"
+" PoolByteArray hmac = ctx.Finish();\n"
+" GD.Print(hmac.HexEncode());\n"
+" }\n"
+"}\n"
+"[/codeblock]\n"
+"[b]Note:[/b] Not available in HTML5 exports."
+msgstr ""
+
+#: doc/classes/HMACContext.xml:58
+msgid ""
+"Returns the resulting HMAC. If the HMAC failed, an empty [PoolByteArray] is "
+"returned."
+msgstr ""
+
+#: doc/classes/HMACContext.xml:66
+msgid ""
+"Initializes the HMACContext. This method cannot be called again on the same "
+"HMACContext until [method finish] has been called."
+msgstr ""
+
+#: doc/classes/HMACContext.xml:73
+msgid ""
+"Updates the message to be HMACed. This can be called multiple times before "
+"[method finish] is called to append [code]data[/code] to the message, but "
+"cannot be called until [method start] has been called."
+msgstr ""
+
+#: doc/classes/HScrollBar.xml:4
+msgid "Horizontal scroll bar."
+msgstr ""
+
+#: doc/classes/HScrollBar.xml:7
+msgid ""
+"Horizontal version of [ScrollBar], which goes from left (min) to right (max)."
+msgstr ""
+
+#: doc/classes/HScrollBar.xml:17
+msgid ""
+"Icon used as a button to scroll the [ScrollBar] left. Supports custom step "
+"using the [member ScrollBar.custom_step] property."
+msgstr ""
+
+#: doc/classes/HScrollBar.xml:20 doc/classes/VScrollBar.xml:24
+msgid "Displayed when the mouse cursor hovers over the decrement button."
+msgstr ""
+
+#: doc/classes/HScrollBar.xml:23 doc/classes/VScrollBar.xml:27
+msgid "Displayed when the decrement button is being pressed."
+msgstr ""
+
+#: doc/classes/HScrollBar.xml:26 doc/classes/VScrollBar.xml:30
+msgid ""
+"Used as texture for the grabber, the draggable element representing current "
+"scroll."
+msgstr ""
+
+#: doc/classes/HScrollBar.xml:29 doc/classes/VScrollBar.xml:33
+msgid "Used when the mouse hovers over the grabber."
+msgstr ""
+
+#: doc/classes/HScrollBar.xml:32 doc/classes/VScrollBar.xml:36
+msgid "Used when the grabber is being dragged."
+msgstr ""
+
+#: doc/classes/HScrollBar.xml:35
+msgid ""
+"Icon used as a button to scroll the [ScrollBar] right. Supports custom step "
+"using the [member ScrollBar.custom_step] property."
+msgstr ""
+
+#: doc/classes/HScrollBar.xml:38 doc/classes/VScrollBar.xml:42
+msgid "Displayed when the mouse cursor hovers over the increment button."
+msgstr ""
+
+#: doc/classes/HScrollBar.xml:41 doc/classes/VScrollBar.xml:45
+msgid "Displayed when the increment button is being pressed."
+msgstr ""
+
+#: doc/classes/HScrollBar.xml:44 doc/classes/VScrollBar.xml:48
+msgid "Used as background of this [ScrollBar]."
+msgstr ""
+
+#: doc/classes/HScrollBar.xml:47 doc/classes/VScrollBar.xml:51
+msgid "Used as background when the [ScrollBar] has the GUI focus."
+msgstr ""
+
+#: doc/classes/HSeparator.xml:4
+msgid "Horizontal separator."
+msgstr ""
+
+#: doc/classes/HSeparator.xml:7
+msgid ""
+"Horizontal separator. See [Separator]. Even though it looks horizontal, it "
+"is used to separate objects vertically."
+msgstr ""
+
+#: doc/classes/HSeparator.xml:17
+msgid ""
+"The height of the area covered by the separator. Effectively works like a "
+"minimum height."
+msgstr ""
+
+#: doc/classes/HSeparator.xml:20
+msgid "The style for the separator line. Works best with [StyleBoxLine]."
+msgstr ""
+
+#: doc/classes/HSlider.xml:4
+msgid "Horizontal slider."
+msgstr ""
+
+#: doc/classes/HSlider.xml:7
+msgid ""
+"Horizontal slider. See [Slider]. This one goes from left (min) to right "
+"(max).\n"
+"[b]Note:[/b] The [signal Range.changed] and [signal Range.value_changed] "
+"signals are part of the [Range] class which this class inherits from."
+msgstr ""
+
+#: doc/classes/HSlider.xml:18 doc/classes/VSlider.xml:22
+msgid "The texture for the grabber (the draggable element)."
+msgstr ""
+
+#: doc/classes/HSlider.xml:21
+msgid "The background of the area to the left of the grabber."
+msgstr ""
+
+#: doc/classes/HSlider.xml:26 doc/classes/VSlider.xml:30
+msgid "The texture for the grabber when it's disabled."
+msgstr ""
+
+#: doc/classes/HSlider.xml:29 doc/classes/VSlider.xml:33
+msgid "The texture for the grabber when it's focused."
+msgstr ""
+
+#: doc/classes/HSlider.xml:32
+msgid ""
+"The background for the whole slider. Determines the height of the "
+"[code]grabber_area[/code]."
+msgstr ""
+
+#: doc/classes/HSlider.xml:35 doc/classes/VSlider.xml:39
+msgid ""
+"The texture for the ticks, visible when [member Slider.tick_count] is "
+"greater than 0."
+msgstr ""
+
+#: doc/classes/HSplitContainer.xml:4
+msgid "Horizontal split container."
+msgstr ""
+
+#: doc/classes/HSplitContainer.xml:7
+msgid ""
+"Horizontal split container. See [SplitContainer]. This goes from left to "
+"right."
+msgstr ""
+
+#: doc/classes/HSplitContainer.xml:17 doc/classes/VSplitContainer.xml:17
+msgid ""
+"Boolean value. If 1 ([code]true[/code]), the grabber will hide automatically "
+"when it isn't under the cursor. If 0 ([code]false[/code]), it's always "
+"visible."
+msgstr ""
+
+#: doc/classes/HSplitContainer.xml:22 doc/classes/VSplitContainer.xml:22
+msgid "The icon used for the grabber drawn in the middle area."
+msgstr ""
+
+#: doc/classes/HSplitContainer.xml:25 doc/classes/VSplitContainer.xml:25
+msgid "The space between sides of the container."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:4
+msgid "Low-level hyper-text transfer protocol client."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:7
+msgid ""
+"Hyper-text transfer protocol client (sometimes called \"User Agent\"). Used "
+"to make HTTP requests to download web content, upload files and other data "
+"or to communicate with various services, among other use cases. [b]See the "
+"[HTTPRequest] node for a higher-level alternative.[/b]\n"
+"[b]Note:[/b] This client only needs to connect to a host once (see [method "
+"connect_to_host]) to send multiple requests. Because of this, methods that "
+"take URLs usually take just the part after the host instead of the full URL, "
+"as the client is already connected to a host. See [method request] for a "
+"full example and to get started.\n"
+"A [HTTPClient] should be reused between multiple requests or to connect to "
+"different hosts instead of creating one client per request. Supports SSL and "
+"SSL server certificate verification. HTTP status codes in the 2xx range "
+"indicate success, 3xx redirection (i.e. \"try again, but over here\"), 4xx "
+"something was wrong with the request, and 5xx something went wrong on the "
+"server's side.\n"
+"For more information on HTTP, see https://developer.mozilla.org/en-US/docs/"
+"Web/HTTP (or read RFC 2616 to get it straight from the source: https://tools."
+"ietf.org/html/rfc2616).\n"
+"[b]Note:[/b] When performing HTTP requests from a project exported to HTML5, "
+"keep in mind the remote server may not allow requests from foreign origins "
+"due to [url=https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS]CORS[/"
+"url]. If you host the server in question, you should modify its backend to "
+"allow requests from foreign origins by adding the [code]Access-Control-Allow-"
+"Origin: *[/code] HTTP header.\n"
+"[b]Note:[/b] SSL/TLS support is currently limited to TLS 1.0, TLS 1.1, and "
+"TLS 1.2. Attempting to connect to a TLS 1.3-only server will return an "
+"error.\n"
+"[b]Warning:[/b] SSL/TLS certificate revocation and certificate pinning are "
+"currently not supported. Revoked certificates are accepted as long as they "
+"are otherwise valid. If this is a concern, you may want to use automatically "
+"managed certificates with a short validity period."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:16
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/networking/http_client_class."
+"html"
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:17 doc/classes/HTTPRequest.xml:71
+#: doc/classes/StreamPeerSSL.xml:10
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/networking/ssl_certificates."
+"html"
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:23
+msgid "Closes the current connection, allowing reuse of this [HTTPClient]."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:33
+msgid ""
+"Connects to a host. This needs to be done before any requests are sent.\n"
+"The host should not have http:// prepended but will strip the protocol "
+"identifier if provided.\n"
+"If no [code]port[/code] is specified (or [code]-1[/code] is used), it is "
+"automatically set to 80 for HTTP and 443 for HTTPS (if [code]use_ssl[/code] "
+"is enabled).\n"
+"[code]verify_host[/code] will check the SSL identity of the host if set to "
+"[code]true[/code]."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:42
+msgid ""
+"Returns the response's body length.\n"
+"[b]Note:[/b] Some Web servers may not send a body length. In this case, the "
+"value returned will be [code]-1[/code]. If using chunked transfer encoding, "
+"the body length will also be [code]-1[/code]."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:49
+msgid "Returns the response's HTTP status code."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:55
+msgid "Returns the response headers."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:61
+msgid ""
+"Returns all response headers as a Dictionary of structure [code]{ \"key\": "
+"\"value1; value2\" }[/code] where the case-sensitivity of the keys and "
+"values is kept like the server delivers it. A value is a simple String, this "
+"string can have more than one value where \"; \" is used as separator.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"{\n"
+" \"content-length\": 12,\n"
+" \"Content-Type\": \"application/json; charset=UTF-8\",\n"
+"}\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:74
+msgid ""
+"Returns a [enum Status] constant. Need to call [method poll] in order to get "
+"status updates."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:80
+msgid "If [code]true[/code], this [HTTPClient] has a response available."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:86
+msgid "If [code]true[/code], this [HTTPClient] has a response that is chunked."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:92
+msgid ""
+"This needs to be called in order to have any request processed. Check "
+"results with [method get_status]."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:99
+msgid ""
+"Generates a GET/POST application/x-www-form-urlencoded style query string "
+"from a provided dictionary, e.g.:\n"
+"[codeblock]\n"
+"var fields = {\"username\": \"user\", \"password\": \"pass\"}\n"
+"var query_string = http_client.query_string_from_dict(fields)\n"
+"# Returns \"username=user&password=pass\"\n"
+"[/codeblock]\n"
+"Furthermore, if a key has a [code]null[/code] value, only the key itself is "
+"added, without equal sign and value. If the value is an array, for each "
+"value in it a pair with the same key is added.\n"
+"[codeblock]\n"
+"var fields = {\"single\": 123, \"not_valued\": null, \"multiple\": [22, 33, "
+"44]}\n"
+"var query_string = http_client.query_string_from_dict(fields)\n"
+"# Returns \"single=123&not_valued&multiple=22&multiple=33&multiple=44\"\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:116
+msgid "Reads one chunk from the response."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:126
+msgid ""
+"Sends a request to the connected host.\n"
+"The URL parameter is usually just the part after the host, so for "
+"[code]http://somehost.com/index.php[/code], it is [code]/index.php[/code]. "
+"When sending requests to an HTTP proxy server, it should be an absolute URL. "
+"For [constant HTTPClient.METHOD_OPTIONS] requests, [code]*[/code] is also "
+"allowed. For [constant HTTPClient.METHOD_CONNECT] requests, it should be the "
+"authority component ([code]host:port[/code]).\n"
+"Headers are HTTP request headers. For available HTTP methods, see [enum "
+"Method].\n"
+"To create a POST request with query strings to push to the server, do:\n"
+"[codeblock]\n"
+"var fields = {\"username\" : \"user\", \"password\" : \"pass\"}\n"
+"var query_string = http_client.query_string_from_dict(fields)\n"
+"var headers = [\"Content-Type: application/x-www-form-urlencoded\", "
+"\"Content-Length: \" + str(query_string.length())]\n"
+"var result = http_client.request(http_client.METHOD_POST, \"/index.php\", "
+"headers, query_string)\n"
+"[/codeblock]\n"
+"[b]Note:[/b] The [code]request_data[/code] parameter is ignored if "
+"[code]method[/code] is [constant HTTPClient.METHOD_GET]. This is because GET "
+"methods can't contain request data. As a workaround, you can pass request "
+"data as a query string in the URL. See [method String.http_escape] for an "
+"example."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:146
+msgid ""
+"Sends a raw request to the connected host.\n"
+"The URL parameter is usually just the part after the host, so for "
+"[code]http://somehost.com/index.php[/code], it is [code]/index.php[/code]. "
+"When sending requests to an HTTP proxy server, it should be an absolute URL. "
+"For [constant HTTPClient.METHOD_OPTIONS] requests, [code]*[/code] is also "
+"allowed. For [constant HTTPClient.METHOD_CONNECT] requests, it should be the "
+"authority component ([code]host:port[/code]).\n"
+"Headers are HTTP request headers. For available HTTP methods, see [enum "
+"Method].\n"
+"Sends the body data raw, as a byte array and does not encode it in any way."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:155
+msgid ""
+"If [code]true[/code], execution will block until all data is read from the "
+"response."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:158
+msgid "The connection to use for this client."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:161
+msgid ""
+"The size of the buffer used and maximum bytes to read per iteration. See "
+"[method read_response_body_chunk]."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:166
+msgid ""
+"HTTP GET method. The GET method requests a representation of the specified "
+"resource. Requests using GET should only retrieve data."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:169
+msgid ""
+"HTTP HEAD method. The HEAD method asks for a response identical to that of a "
+"GET request, but without the response body. This is useful to request "
+"metadata like HTTP headers or to check if a resource exists."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:172
+msgid ""
+"HTTP POST method. The POST method is used to submit an entity to the "
+"specified resource, often causing a change in state or side effects on the "
+"server. This is often used for forms and submitting data or uploading files."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:175
+msgid ""
+"HTTP PUT method. The PUT method asks to replace all current representations "
+"of the target resource with the request payload. (You can think of POST as "
+"\"create or update\" and PUT as \"update\", although many services tend to "
+"not make a clear distinction or change their meaning)."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:178
+msgid ""
+"HTTP DELETE method. The DELETE method requests to delete the specified "
+"resource."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:181
+msgid ""
+"HTTP OPTIONS method. The OPTIONS method asks for a description of the "
+"communication options for the target resource. Rarely used."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:184
+msgid ""
+"HTTP TRACE method. The TRACE method performs a message loop-back test along "
+"the path to the target resource. Returns the entire HTTP request received in "
+"the response body. Rarely used."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:187
+msgid ""
+"HTTP CONNECT method. The CONNECT method establishes a tunnel to the server "
+"identified by the target resource. Rarely used."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:190
+msgid ""
+"HTTP PATCH method. The PATCH method is used to apply partial modifications "
+"to a resource."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:193
+msgid "Represents the size of the [enum Method] enum."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:196
+msgid "Status: Disconnected from the server."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:199
+msgid "Status: Currently resolving the hostname for the given URL into an IP."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:202
+msgid "Status: DNS failure: Can't resolve the hostname for the given URL."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:205
+msgid "Status: Currently connecting to server."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:208
+msgid "Status: Can't connect to the server."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:211
+msgid "Status: Connection established."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:214
+msgid "Status: Currently sending request."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:217
+msgid "Status: HTTP body received."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:220
+msgid "Status: Error in HTTP connection."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:223
+msgid "Status: Error in SSL handshake."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:226
+msgid ""
+"HTTP status code [code]100 Continue[/code]. Interim response that indicates "
+"everything so far is OK and that the client should continue with the request "
+"(or ignore this status if already finished)."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:229
+msgid ""
+"HTTP status code [code]101 Switching Protocol[/code]. Sent in response to an "
+"[code]Upgrade[/code] request header by the client. Indicates the protocol "
+"the server is switching to."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:232
+msgid ""
+"HTTP status code [code]102 Processing[/code] (WebDAV). Indicates that the "
+"server has received and is processing the request, but no response is "
+"available yet."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:235
+msgid ""
+"HTTP status code [code]200 OK[/code]. The request has succeeded. Default "
+"response for successful requests. Meaning varies depending on the request. "
+"GET: The resource has been fetched and is transmitted in the message body. "
+"HEAD: The entity headers are in the message body. POST: The resource "
+"describing the result of the action is transmitted in the message body. "
+"TRACE: The message body contains the request message as received by the "
+"server."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:238
+msgid ""
+"HTTP status code [code]201 Created[/code]. The request has succeeded and a "
+"new resource has been created as a result of it. This is typically the "
+"response sent after a PUT request."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:241
+msgid ""
+"HTTP status code [code]202 Accepted[/code]. The request has been received "
+"but not yet acted upon. It is non-committal, meaning that there is no way in "
+"HTTP to later send an asynchronous response indicating the outcome of "
+"processing the request. It is intended for cases where another process or "
+"server handles the request, or for batch processing."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:244
+msgid ""
+"HTTP status code [code]203 Non-Authoritative Information[/code]. This "
+"response code means returned meta-information set is not exact set as "
+"available from the origin server, but collected from a local or a third "
+"party copy. Except this condition, 200 OK response should be preferred "
+"instead of this response."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:247
+msgid ""
+"HTTP status code [code]204 No Content[/code]. There is no content to send "
+"for this request, but the headers may be useful. The user-agent may update "
+"its cached headers for this resource with the new ones."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:250
+msgid ""
+"HTTP status code [code]205 Reset Content[/code]. The server has fulfilled "
+"the request and desires that the client resets the \"document view\" that "
+"caused the request to be sent to its original state as received from the "
+"origin server."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:253
+msgid ""
+"HTTP status code [code]206 Partial Content[/code]. This response code is "
+"used because of a range header sent by the client to separate download into "
+"multiple streams."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:256
+msgid ""
+"HTTP status code [code]207 Multi-Status[/code] (WebDAV). A Multi-Status "
+"response conveys information about multiple resources in situations where "
+"multiple status codes might be appropriate."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:259
+msgid ""
+"HTTP status code [code]208 Already Reported[/code] (WebDAV). Used inside a "
+"DAV: propstat response element to avoid enumerating the internal members of "
+"multiple bindings to the same collection repeatedly."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:262
+msgid ""
+"HTTP status code [code]226 IM Used[/code] (WebDAV). The server has fulfilled "
+"a GET request for the resource, and the response is a representation of the "
+"result of one or more instance-manipulations applied to the current instance."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:265
+msgid ""
+"HTTP status code [code]300 Multiple Choice[/code]. The request has more than "
+"one possible responses and there is no standardized way to choose one of the "
+"responses. User-agent or user should choose one of them."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:268
+msgid ""
+"HTTP status code [code]301 Moved Permanently[/code]. Redirection. This "
+"response code means the URI of requested resource has been changed. The new "
+"URI is usually included in the response."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:271
+msgid ""
+"HTTP status code [code]302 Found[/code]. Temporary redirection. This "
+"response code means the URI of requested resource has been changed "
+"temporarily. New changes in the URI might be made in the future. Therefore, "
+"this same URI should be used by the client in future requests."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:274
+msgid ""
+"HTTP status code [code]303 See Other[/code]. The server is redirecting the "
+"user agent to a different resource, as indicated by a URI in the Location "
+"header field, which is intended to provide an indirect response to the "
+"original request."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:277
+msgid ""
+"HTTP status code [code]304 Not Modified[/code]. A conditional GET or HEAD "
+"request has been received and would have resulted in a 200 OK response if it "
+"were not for the fact that the condition evaluated to [code]false[/code]."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:280
+msgid ""
+"HTTP status code [code]305 Use Proxy[/code]. [i]Deprecated. Do not use.[/i]"
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:283
+msgid ""
+"HTTP status code [code]306 Switch Proxy[/code]. [i]Deprecated. Do not use.[/"
+"i]"
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:286
+msgid ""
+"HTTP status code [code]307 Temporary Redirect[/code]. The target resource "
+"resides temporarily under a different URI and the user agent MUST NOT change "
+"the request method if it performs an automatic redirection to that URI."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:289
+msgid ""
+"HTTP status code [code]308 Permanent Redirect[/code]. The target resource "
+"has been assigned a new permanent URI and any future references to this "
+"resource ought to use one of the enclosed URIs."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:292
+msgid ""
+"HTTP status code [code]400 Bad Request[/code]. The request was invalid. The "
+"server cannot or will not process the request due to something that is "
+"perceived to be a client error (e.g., malformed request syntax, invalid "
+"request message framing, invalid request contents, or deceptive request "
+"routing)."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:295
+msgid ""
+"HTTP status code [code]401 Unauthorized[/code]. Credentials required. The "
+"request has not been applied because it lacks valid authentication "
+"credentials for the target resource."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:298
+msgid ""
+"HTTP status code [code]402 Payment Required[/code]. This response code is "
+"reserved for future use. Initial aim for creating this code was using it for "
+"digital payment systems, however this is not currently used."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:301
+msgid ""
+"HTTP status code [code]403 Forbidden[/code]. The client does not have access "
+"rights to the content, i.e. they are unauthorized, so server is rejecting to "
+"give proper response. Unlike [code]401[/code], the client's identity is "
+"known to the server."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:304
+msgid ""
+"HTTP status code [code]404 Not Found[/code]. The server can not find "
+"requested resource. Either the URL is not recognized or the endpoint is "
+"valid but the resource itself does not exist. May also be sent instead of "
+"403 to hide existence of a resource if the client is not authorized."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:307
+msgid ""
+"HTTP status code [code]405 Method Not Allowed[/code]. The request's HTTP "
+"method is known by the server but has been disabled and cannot be used. For "
+"example, an API may forbid DELETE-ing a resource. The two mandatory methods, "
+"GET and HEAD, must never be disabled and should not return this error code."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:310
+msgid ""
+"HTTP status code [code]406 Not Acceptable[/code]. The target resource does "
+"not have a current representation that would be acceptable to the user "
+"agent, according to the proactive negotiation header fields received in the "
+"request. Used when negotiation content."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:313
+msgid ""
+"HTTP status code [code]407 Proxy Authentication Required[/code]. Similar to "
+"401 Unauthorized, but it indicates that the client needs to authenticate "
+"itself in order to use a proxy."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:316
+msgid ""
+"HTTP status code [code]408 Request Timeout[/code]. The server did not "
+"receive a complete request message within the time that it was prepared to "
+"wait."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:319
+msgid ""
+"HTTP status code [code]409 Conflict[/code]. The request could not be "
+"completed due to a conflict with the current state of the target resource. "
+"This code is used in situations where the user might be able to resolve the "
+"conflict and resubmit the request."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:322
+msgid ""
+"HTTP status code [code]410 Gone[/code]. The target resource is no longer "
+"available at the origin server and this condition is likely permanent."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:325
+msgid ""
+"HTTP status code [code]411 Length Required[/code]. The server refuses to "
+"accept the request without a defined Content-Length header."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:328
+msgid ""
+"HTTP status code [code]412 Precondition Failed[/code]. One or more "
+"conditions given in the request header fields evaluated to [code]false[/"
+"code] when tested on the server."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:331
+msgid ""
+"HTTP status code [code]413 Entity Too Large[/code]. The server is refusing "
+"to process a request because the request payload is larger than the server "
+"is willing or able to process."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:334
+msgid ""
+"HTTP status code [code]414 Request-URI Too Long[/code]. The server is "
+"refusing to service the request because the request-target is longer than "
+"the server is willing to interpret."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:337
+msgid ""
+"HTTP status code [code]415 Unsupported Media Type[/code]. The origin server "
+"is refusing to service the request because the payload is in a format not "
+"supported by this method on the target resource."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:340
+msgid ""
+"HTTP status code [code]416 Requested Range Not Satisfiable[/code]. None of "
+"the ranges in the request's Range header field overlap the current extent of "
+"the selected resource or the set of ranges requested has been rejected due "
+"to invalid ranges or an excessive request of small or overlapping ranges."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:343
+msgid ""
+"HTTP status code [code]417 Expectation Failed[/code]. The expectation given "
+"in the request's Expect header field could not be met by at least one of the "
+"inbound servers."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:346
+msgid ""
+"HTTP status code [code]418 I'm A Teapot[/code]. Any attempt to brew coffee "
+"with a teapot should result in the error code \"418 I'm a teapot\". The "
+"resulting entity body MAY be short and stout."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:349
+msgid ""
+"HTTP status code [code]421 Misdirected Request[/code]. The request was "
+"directed at a server that is not able to produce a response. This can be "
+"sent by a server that is not configured to produce responses for the "
+"combination of scheme and authority that are included in the request URI."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:352
+msgid ""
+"HTTP status code [code]422 Unprocessable Entity[/code] (WebDAV). The server "
+"understands the content type of the request entity (hence a 415 Unsupported "
+"Media Type status code is inappropriate), and the syntax of the request "
+"entity is correct (thus a 400 Bad Request status code is inappropriate) but "
+"was unable to process the contained instructions."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:355
+msgid ""
+"HTTP status code [code]423 Locked[/code] (WebDAV). The source or destination "
+"resource of a method is locked."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:358
+msgid ""
+"HTTP status code [code]424 Failed Dependency[/code] (WebDAV). The method "
+"could not be performed on the resource because the requested action depended "
+"on another action and that action failed."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:361
+msgid ""
+"HTTP status code [code]426 Upgrade Required[/code]. The server refuses to "
+"perform the request using the current protocol but might be willing to do so "
+"after the client upgrades to a different protocol."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:364
+msgid ""
+"HTTP status code [code]428 Precondition Required[/code]. The origin server "
+"requires the request to be conditional."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:367
+msgid ""
+"HTTP status code [code]429 Too Many Requests[/code]. The user has sent too "
+"many requests in a given amount of time (see \"rate limiting\"). Back off "
+"and increase time between requests or try again later."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:370
+msgid ""
+"HTTP status code [code]431 Request Header Fields Too Large[/code]. The "
+"server is unwilling to process the request because its header fields are too "
+"large. The request MAY be resubmitted after reducing the size of the request "
+"header fields."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:373
+msgid ""
+"HTTP status code [code]451 Response Unavailable For Legal Reasons[/code]. "
+"The server is denying access to the resource as a consequence of a legal "
+"demand."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:376
+msgid ""
+"HTTP status code [code]500 Internal Server Error[/code]. The server "
+"encountered an unexpected condition that prevented it from fulfilling the "
+"request."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:379
+msgid ""
+"HTTP status code [code]501 Not Implemented[/code]. The server does not "
+"support the functionality required to fulfill the request."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:382
+msgid ""
+"HTTP status code [code]502 Bad Gateway[/code]. The server, while acting as a "
+"gateway or proxy, received an invalid response from an inbound server it "
+"accessed while attempting to fulfill the request. Usually returned by load "
+"balancers or proxies."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:385
+msgid ""
+"HTTP status code [code]503 Service Unavailable[/code]. The server is "
+"currently unable to handle the request due to a temporary overload or "
+"scheduled maintenance, which will likely be alleviated after some delay. Try "
+"again later."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:388
+msgid ""
+"HTTP status code [code]504 Gateway Timeout[/code]. The server, while acting "
+"as a gateway or proxy, did not receive a timely response from an upstream "
+"server it needed to access in order to complete the request. Usually "
+"returned by load balancers or proxies."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:391
+msgid ""
+"HTTP status code [code]505 HTTP Version Not Supported[/code]. The server "
+"does not support, or refuses to support, the major version of HTTP that was "
+"used in the request message."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:394
+msgid ""
+"HTTP status code [code]506 Variant Also Negotiates[/code]. The server has an "
+"internal configuration error: the chosen variant resource is configured to "
+"engage in transparent content negotiation itself, and is therefore not a "
+"proper end point in the negotiation process."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:397
+msgid ""
+"HTTP status code [code]507 Insufficient Storage[/code]. The method could not "
+"be performed on the resource because the server is unable to store the "
+"representation needed to successfully complete the request."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:400
+msgid ""
+"HTTP status code [code]508 Loop Detected[/code]. The server terminated an "
+"operation because it encountered an infinite loop while processing a request "
+"with \"Depth: infinity\". This status indicates that the entire operation "
+"failed."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:403
+msgid ""
+"HTTP status code [code]510 Not Extended[/code]. The policy for accessing the "
+"resource has not been met in the request. The server should send back all "
+"the information necessary for the client to issue an extended request."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:406
+msgid ""
+"HTTP status code [code]511 Network Authentication Required[/code]. The "
+"client needs to authenticate to gain network access."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:4
+msgid "A node with the ability to send HTTP(S) requests."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:7
+msgid ""
+"A node with the ability to send HTTP requests. Uses [HTTPClient] "
+"internally.\n"
+"Can be used to make HTTP requests, i.e. download or upload files or web "
+"content via HTTP.\n"
+"[b]Warning:[/b] See the notes and warnings on [HTTPClient] for limitations, "
+"especially regarding SSL security.\n"
+"[b]Example of contacting a REST API and printing one of its returned fields:"
+"[/b]\n"
+"[codeblock]\n"
+"func _ready():\n"
+" # Create an HTTP request node and connect its completion signal.\n"
+" var http_request = HTTPRequest.new()\n"
+" add_child(http_request)\n"
+" http_request.connect(\"request_completed\", self, "
+"\"_http_request_completed\")\n"
+"\n"
+" # Perform a GET request. The URL below returns JSON as of writing.\n"
+" var error = http_request.request(\"https://httpbin.org/get\")\n"
+" if error != OK:\n"
+" push_error(\"An error occurred in the HTTP request.\")\n"
+"\n"
+" # Perform a POST request. The URL below returns JSON as of writing.\n"
+" # Note: Don't make simultaneous requests using a single HTTPRequest "
+"node.\n"
+" # The snippet below is provided for reference only.\n"
+" var body = {\"name\": \"Godette\"}\n"
+" error = http_request.request(\"https://httpbin.org/post\", [], true, "
+"HTTPClient.METHOD_POST, body)\n"
+" if error != OK:\n"
+" push_error(\"An error occurred in the HTTP request.\")\n"
+"\n"
+"\n"
+"# Called when the HTTP request is completed.\n"
+"func _http_request_completed(result, response_code, headers, body):\n"
+" var response = parse_json(body.get_string_from_utf8())\n"
+"\n"
+" # Will print the user agent string used by the HTTPRequest node (as "
+"recognized by httpbin.org).\n"
+" print(response.headers[\"User-Agent\"])\n"
+"[/codeblock]\n"
+"[b]Example of loading and displaying an image using HTTPRequest:[/b]\n"
+"[codeblock]\n"
+"func _ready():\n"
+" # Create an HTTP request node and connect its completion signal.\n"
+" var http_request = HTTPRequest.new()\n"
+" add_child(http_request)\n"
+" http_request.connect(\"request_completed\", self, "
+"\"_http_request_completed\")\n"
+"\n"
+" # Perform the HTTP request. The URL below returns a PNG image as of "
+"writing.\n"
+" var error = http_request.request(\"https://via.placeholder.com/512\")\n"
+" if error != OK:\n"
+" push_error(\"An error occurred in the HTTP request.\")\n"
+"\n"
+"\n"
+"# Called when the HTTP request is completed.\n"
+"func _http_request_completed(result, response_code, headers, body):\n"
+" var image = Image.new()\n"
+" var error = image.load_png_from_buffer(body)\n"
+" if error != OK:\n"
+" push_error(\"Couldn't load the image.\")\n"
+"\n"
+" var texture = ImageTexture.new()\n"
+" texture.create_from_image(image)\n"
+"\n"
+" # Display the image in a TextureRect node.\n"
+" var texture_rect = TextureRect.new()\n"
+" add_child(texture_rect)\n"
+" texture_rect.texture = texture\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:70
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/networking/http_request_class."
+"html"
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:77
+msgid "Cancels the current request."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:83
+msgid ""
+"Returns the response body length.\n"
+"[b]Note:[/b] Some Web servers may not send a body length. In this case, the "
+"value returned will be [code]-1[/code]. If using chunked transfer encoding, "
+"the body length will also be [code]-1[/code]."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:90
+msgid "Returns the amount of bytes this HTTPRequest downloaded."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:96
+msgid ""
+"Returns the current status of the underlying [HTTPClient]. See [enum "
+"HTTPClient.Status]."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:107
+msgid ""
+"Creates request on the underlying [HTTPClient]. If there is no configuration "
+"errors, it tries to connect using [method HTTPClient.connect_to_host] and "
+"passes parameters onto [method HTTPClient.request].\n"
+"Returns [constant OK] if request is successfully created. (Does not imply "
+"that the server has responded), [constant ERR_UNCONFIGURED] if not in the "
+"tree, [constant ERR_BUSY] if still processing previous request, [constant "
+"ERR_INVALID_PARAMETER] if given string is not a valid URL format, or "
+"[constant ERR_CANT_CONNECT] if not using thread and the [HTTPClient] cannot "
+"connect to host.\n"
+"[b]Note:[/b] When [code]method[/code] is [constant HTTPClient.METHOD_GET], "
+"the payload sent via [code]request_data[/code] might be ignored by the "
+"server or even cause the server to reject the request (check [url=https://"
+"datatracker.ietf.org/doc/html/rfc7231#section-4.3.1]RFC 7231 section 4.3.1[/"
+"url] for more details). As a workaround, you can send data as a query string "
+"in the URL. See [method String.http_escape] for an example."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:120
+msgid ""
+"Creates request on the underlying [HTTPClient] using a raw array of bytes "
+"for the request body. If there is no configuration errors, it tries to "
+"connect using [method HTTPClient.connect_to_host] and passes parameters onto "
+"[method HTTPClient.request].\n"
+"Returns [constant OK] if request is successfully created. (Does not imply "
+"that the server has responded), [constant ERR_UNCONFIGURED] if not in the "
+"tree, [constant ERR_BUSY] if still processing previous request, [constant "
+"ERR_INVALID_PARAMETER] if given string is not a valid URL format, or "
+"[constant ERR_CANT_CONNECT] if not using thread and the [HTTPClient] cannot "
+"connect to host."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:127
+msgid "Maximum allowed size for response bodies."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:130
+msgid ""
+"The size of the buffer used and maximum bytes to read per iteration. See "
+"[member HTTPClient.read_chunk_size].\n"
+"Set this to a lower value (e.g. 4096 for 4 KiB) when downloading small files "
+"to decrease memory usage at the cost of download speeds."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:134
+msgid "The file to download into. Will output any received file into it."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:137
+msgid "Maximum number of allowed redirects."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:142
+msgid "If [code]true[/code], multithreading is used to improve performance."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:152
+msgid "Emitted when a request is completed."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:158
+msgid "Request successful."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:163
+msgid "Request failed while connecting."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:166
+msgid "Request failed while resolving."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:169
+msgid "Request failed due to connection (read/write) error."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:172
+msgid "Request failed on SSL handshake."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:175
+msgid "Request does not have a response (yet)."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:178
+msgid "Request exceeded its maximum size limit, see [member body_size_limit]."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:181
+msgid "Request failed (currently unused)."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:184
+msgid "HTTPRequest couldn't open the download file."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:187
+msgid "HTTPRequest couldn't write to the download file."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:190
+msgid "Request reached its maximum redirect limit, see [member max_redirects]."
+msgstr ""
+
+#: doc/classes/Image.xml:4
+msgid "Image datatype."
+msgstr ""
+
+#: doc/classes/Image.xml:7
+msgid ""
+"Native image datatype. Contains image data which can be converted to an "
+"[ImageTexture] and provides commonly used [i]image processing[/i] methods. "
+"The maximum width and height for an [Image] are [constant MAX_WIDTH] and "
+"[constant MAX_HEIGHT].\n"
+"An [Image] cannot be assigned to a [code]texture[/code] property of an "
+"object directly (such as [Sprite]), and has to be converted manually to an "
+"[ImageTexture] first.\n"
+"[b]Note:[/b] The maximum image size is 16384×16384 pixels due to graphics "
+"hardware limitations. Larger images may fail to import."
+msgstr ""
+
+#: doc/classes/Image.xml:12 doc/classes/ImageTexture.xml:31
+msgid ""
+"https://docs.godotengine.org/en/3.4/getting_started/workflow/assets/"
+"importing_images.html"
+msgstr ""
+
+#: doc/classes/Image.xml:21
+msgid ""
+"Alpha-blends [code]src_rect[/code] from [code]src[/code] image to this image "
+"at coordinates [code]dest[/code]."
+msgstr ""
+
+#: doc/classes/Image.xml:31
+msgid ""
+"Alpha-blends [code]src_rect[/code] from [code]src[/code] image to this image "
+"using [code]mask[/code] image at coordinates [code]dst[/code]. Alpha "
+"channels are required for both [code]src[/code] and [code]mask[/code]. "
+"[code]dst[/code] pixels and [code]src[/code] pixels will blend if the "
+"corresponding mask pixel's alpha value is not 0. [code]src[/code] image and "
+"[code]mask[/code] image [b]must[/b] have the same size (width and height) "
+"but they can have different formats."
+msgstr ""
+
+#: doc/classes/Image.xml:40
+msgid ""
+"Copies [code]src_rect[/code] from [code]src[/code] image to this image at "
+"coordinates [code]dst[/code]."
+msgstr ""
+
+#: doc/classes/Image.xml:50
+msgid ""
+"Blits [code]src_rect[/code] area from [code]src[/code] image to this image "
+"at the coordinates given by [code]dst[/code]. [code]src[/code] pixel is "
+"copied onto [code]dst[/code] if the corresponding [code]mask[/code] pixel's "
+"alpha value is not 0. [code]src[/code] image and [code]mask[/code] image "
+"[b]must[/b] have the same size (width and height) but they can have "
+"different formats."
+msgstr ""
+
+#: doc/classes/Image.xml:57
+msgid ""
+"Converts a bumpmap to a normalmap. A bumpmap provides a height offset per-"
+"pixel, while a normalmap provides a normal direction per pixel."
+msgstr ""
+
+#: doc/classes/Image.xml:63
+msgid "Removes the image's mipmaps."
+msgstr ""
+
+#: doc/classes/Image.xml:72
+msgid ""
+"Compresses the image to use less memory. Can not directly access pixel data "
+"while the image is compressed. Returns error if the chosen compression mode "
+"is not available. See [enum CompressMode] and [enum CompressSource] "
+"constants."
+msgstr ""
+
+#: doc/classes/Image.xml:79
+msgid "Converts the image's format. See [enum Format] constants."
+msgstr ""
+
+#: doc/classes/Image.xml:86
+msgid "Copies [code]src[/code] image to this image."
+msgstr ""
+
+#: doc/classes/Image.xml:96
+msgid ""
+"Creates an empty image of given size and format. See [enum Format] "
+"constants. If [code]use_mipmaps[/code] is [code]true[/code] then generate "
+"mipmaps for this image. See the [method generate_mipmaps]."
+msgstr ""
+
+#: doc/classes/Image.xml:107
+msgid ""
+"Creates a new image of given size and format. See [enum Format] constants. "
+"Fills the image with the given raw data. If [code]use_mipmaps[/code] is "
+"[code]true[/code] then loads mipmaps for this image from [code]data[/code]. "
+"See [method generate_mipmaps]."
+msgstr ""
+
+#: doc/classes/Image.xml:115
+msgid ""
+"Crops the image to the given [code]width[/code] and [code]height[/code]. If "
+"the specified size is larger than the current size, the extra area is filled "
+"with black pixels."
+msgstr ""
+
+#: doc/classes/Image.xml:121
+msgid ""
+"Decompresses the image if it is compressed. Returns an error if decompress "
+"function is not available."
+msgstr ""
+
+#: doc/classes/Image.xml:127
+msgid ""
+"Returns [constant ALPHA_BLEND] if the image has data for alpha values. "
+"Returns [constant ALPHA_BIT] if all the alpha values are stored in a single "
+"bit. Returns [constant ALPHA_NONE] if no data for alpha values is found."
+msgstr ""
+
+#: doc/classes/Image.xml:133
+msgid ""
+"Stretches the image and enlarges it by a factor of 2. No interpolation is "
+"done."
+msgstr ""
+
+#: doc/classes/Image.xml:140
+msgid "Fills the image with a given [Color]."
+msgstr ""
+
+#: doc/classes/Image.xml:146
+msgid "Blends low-alpha pixels with nearby pixels."
+msgstr ""
+
+#: doc/classes/Image.xml:152
+msgid "Flips the image horizontally."
+msgstr ""
+
+#: doc/classes/Image.xml:158
+msgid "Flips the image vertically."
+msgstr ""
+
+#: doc/classes/Image.xml:165
+msgid ""
+"Generates mipmaps for the image. Mipmaps are precalculated lower-resolution "
+"copies of the image that are automatically used if the image needs to be "
+"scaled down when rendered. They help improve image quality and performance "
+"when rendering. This method returns an error if the image is compressed, in "
+"a custom format, or if the image's width/height is [code]0[/code].\n"
+"[b]Note:[/b] Mipmap generation is done on the CPU, is single-threaded and is "
+"[i]always[/i] done on the main thread. This means generating mipmaps will "
+"result in noticeable stuttering during gameplay, even if [method "
+"generate_mipmaps] is called from a [Thread]."
+msgstr ""
+
+#: doc/classes/Image.xml:172
+msgid "Returns a copy of the image's raw data."
+msgstr ""
+
+#: doc/classes/Image.xml:178
+msgid "Returns the image's format. See [enum Format] constants."
+msgstr ""
+
+#: doc/classes/Image.xml:184
+msgid "Returns the image's height."
+msgstr ""
+
+#: doc/classes/Image.xml:191
+msgid ""
+"Returns the offset where the image's mipmap with index [code]mipmap[/code] "
+"is stored in the [code]data[/code] dictionary."
+msgstr ""
+
+#: doc/classes/Image.xml:199
+msgid ""
+"Returns the color of the pixel at [code](x, y)[/code] if the image is "
+"locked. If the image is unlocked, it always returns a [Color] with the value "
+"[code](0, 0, 0, 1.0)[/code]. This is the same as [method get_pixelv], but "
+"two integer arguments instead of a Vector2 argument."
+msgstr ""
+
+#: doc/classes/Image.xml:206
+msgid ""
+"Returns the color of the pixel at [code]src[/code] if the image is locked. "
+"If the image is unlocked, it always returns a [Color] with the value [code]"
+"(0, 0, 0, 1.0)[/code]. This is the same as [method get_pixel], but with a "
+"Vector2 argument instead of two integer arguments."
+msgstr ""
+
+#: doc/classes/Image.xml:213
+msgid ""
+"Returns a new image that is a copy of the image's area specified with "
+"[code]rect[/code]."
+msgstr ""
+
+#: doc/classes/Image.xml:219
+msgid "Returns the image's size (width and height)."
+msgstr ""
+
+#: doc/classes/Image.xml:225
+msgid ""
+"Returns a [Rect2] enclosing the visible portion of the image, considering "
+"each pixel with a non-zero alpha channel as visible."
+msgstr ""
+
+#: doc/classes/Image.xml:231
+msgid "Returns the image's width."
+msgstr ""
+
+#: doc/classes/Image.xml:237
+msgid "Returns [code]true[/code] if the image has generated mipmaps."
+msgstr ""
+
+#: doc/classes/Image.xml:243
+msgid "Returns [code]true[/code] if the image is compressed."
+msgstr ""
+
+#: doc/classes/Image.xml:249
+msgid "Returns [code]true[/code] if the image has no data."
+msgstr ""
+
+#: doc/classes/Image.xml:255
+msgid ""
+"Returns [code]true[/code] if all the image's pixels have an alpha value of "
+"0. Returns [code]false[/code] if any pixel has an alpha value higher than 0."
+msgstr ""
+
+#: doc/classes/Image.xml:262
+msgid ""
+"Loads an image from file [code]path[/code]. See [url=https://docs."
+"godotengine.org/en/3.4/getting_started/workflow/assets/importing_images."
+"html#supported-image-formats]Supported image formats[/url] for a list of "
+"supported image formats and limitations.\n"
+"[b]Warning:[/b] This method should only be used in the editor or in cases "
+"when you need to load external images at run-time, such as images located at "
+"the [code]user://[/code] directory, and may not work in exported projects.\n"
+"See also [ImageTexture] description for usage examples."
+msgstr ""
+
+#: doc/classes/Image.xml:271
+msgid ""
+"Loads an image from the binary contents of a BMP file.\n"
+"[b]Note:[/b] Godot's BMP module doesn't support 16-bit per pixel images. "
+"Only 1-bit, 4-bit, 8-bit, 24-bit, and 32-bit per pixel images are supported."
+msgstr ""
+
+#: doc/classes/Image.xml:279
+msgid "Loads an image from the binary contents of a JPEG file."
+msgstr ""
+
+#: doc/classes/Image.xml:286
+msgid "Loads an image from the binary contents of a PNG file."
+msgstr ""
+
+#: doc/classes/Image.xml:293
+msgid "Loads an image from the binary contents of a TGA file."
+msgstr ""
+
+#: doc/classes/Image.xml:300
+msgid "Loads an image from the binary contents of a WebP file."
+msgstr ""
+
+#: doc/classes/Image.xml:306
+msgid ""
+"Locks the data for reading and writing access. Sends an error to the console "
+"if the image is not locked when reading or writing a pixel."
+msgstr ""
+
+#: doc/classes/Image.xml:312
+msgid ""
+"Converts the image's data to represent coordinates on a 3D plane. This is "
+"used when the image represents a normalmap. A normalmap can add lots of "
+"detail to a 3D surface without increasing the polygon count."
+msgstr ""
+
+#: doc/classes/Image.xml:318
+msgid ""
+"Multiplies color values with alpha values. Resulting color values for a "
+"pixel are [code](color * alpha)/256[/code]."
+msgstr ""
+
+#: doc/classes/Image.xml:327
+msgid ""
+"Resizes the image to the given [code]width[/code] and [code]height[/code]. "
+"New pixels are calculated using the [code]interpolation[/code] mode defined "
+"via [enum Interpolation] constants."
+msgstr ""
+
+#: doc/classes/Image.xml:335
+msgid ""
+"Resizes the image to the nearest power of 2 for the width and height. If "
+"[code]square[/code] is [code]true[/code] then set width and height to be the "
+"same. New pixels are calculated using the [code]interpolation[/code] mode "
+"defined via [enum Interpolation] constants."
+msgstr ""
+
+#: doc/classes/Image.xml:341
+msgid ""
+"Converts a standard RGBE (Red Green Blue Exponent) image to an sRGB image."
+msgstr ""
+
+#: doc/classes/Image.xml:349
+msgid ""
+"Saves the image as an EXR file to [code]path[/code]. If [code]grayscale[/"
+"code] is [code]true[/code] and the image has only one channel, it will be "
+"saved explicitly as monochrome rather than one red channel. This function "
+"will return [constant ERR_UNAVAILABLE] if Godot was compiled without the "
+"TinyEXR module.\n"
+"[b]Note:[/b] The TinyEXR module is disabled in non-editor builds, which "
+"means [method save_exr] will return [constant ERR_UNAVAILABLE] when it is "
+"called from an exported project."
+msgstr ""
+
+#: doc/classes/Image.xml:357
+msgid "Saves the image as a PNG file to [code]path[/code]."
+msgstr ""
+
+#: doc/classes/Image.xml:371
+msgid ""
+"Sets the [Color] of the pixel at [code](x, y)[/code] if the image is locked. "
+"Example:\n"
+"[codeblock]\n"
+"var img = Image.new()\n"
+"img.create(img_width, img_height, false, Image.FORMAT_RGBA8)\n"
+"img.lock()\n"
+"img.set_pixel(x, y, color) # Works\n"
+"img.unlock()\n"
+"img.set_pixel(x, y, color) # Does not have an effect\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Image.xml:387
+msgid ""
+"Sets the [Color] of the pixel at [code](dst.x, dst.y)[/code] if the image is "
+"locked. Note that the [code]dst[/code] values must be integers. Example:\n"
+"[codeblock]\n"
+"var img = Image.new()\n"
+"img.create(img_width, img_height, false, Image.FORMAT_RGBA8)\n"
+"img.lock()\n"
+"img.set_pixelv(Vector2(x, y), color) # Works\n"
+"img.unlock()\n"
+"img.set_pixelv(Vector2(x, y), color) # Does not have an effect\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Image.xml:401
+msgid "Shrinks the image by a factor of 2."
+msgstr ""
+
+#: doc/classes/Image.xml:407
+msgid "Converts the raw data from the sRGB colorspace to a linear scale."
+msgstr ""
+
+#: doc/classes/Image.xml:413
+msgid "Unlocks the data and prevents changes."
+msgstr ""
+
+#: doc/classes/Image.xml:419
+msgid ""
+"Holds all the image's color data in a given format. See [enum Format] "
+"constants."
+msgstr ""
+
+#: doc/classes/Image.xml:424
+msgid "The maximal width allowed for [Image] resources."
+msgstr ""
+
+#: doc/classes/Image.xml:427
+msgid "The maximal height allowed for [Image] resources."
+msgstr ""
+
+#: doc/classes/Image.xml:430
+msgid "Texture format with a single 8-bit depth representing luminance."
+msgstr ""
+
+#: doc/classes/Image.xml:433
+msgid ""
+"OpenGL texture format with two values, luminance and alpha each stored with "
+"8 bits."
+msgstr ""
+
+#: doc/classes/Image.xml:436
+msgid ""
+"OpenGL texture format [code]RED[/code] with a single component and a "
+"bitdepth of 8.\n"
+"[b]Note:[/b] When using the GLES2 backend, this uses the alpha channel "
+"instead of the red channel for storage."
+msgstr ""
+
+#: doc/classes/Image.xml:440
+msgid ""
+"OpenGL texture format [code]RG[/code] with two components and a bitdepth of "
+"8 for each."
+msgstr ""
+
+#: doc/classes/Image.xml:443
+msgid ""
+"OpenGL texture format [code]RGB[/code] with three components, each with a "
+"bitdepth of 8.\n"
+"[b]Note:[/b] When creating an [ImageTexture], an sRGB to linear color space "
+"conversion is performed."
+msgstr ""
+
+#: doc/classes/Image.xml:447
+msgid ""
+"OpenGL texture format [code]RGBA[/code] with four components, each with a "
+"bitdepth of 8.\n"
+"[b]Note:[/b] When creating an [ImageTexture], an sRGB to linear color space "
+"conversion is performed."
+msgstr ""
+
+#: doc/classes/Image.xml:451
+msgid ""
+"OpenGL texture format [code]RGBA[/code] with four components, each with a "
+"bitdepth of 4."
+msgstr ""
+
+#: doc/classes/Image.xml:454
+msgid ""
+"OpenGL texture format [code]GL_RGB5_A1[/code] where 5 bits of depth for each "
+"component of RGB and one bit for alpha."
+msgstr ""
+
+#: doc/classes/Image.xml:457
+msgid ""
+"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 32-"
+"bit floating-point value."
+msgstr ""
+
+#: doc/classes/Image.xml:460
+msgid ""
+"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
+"each a 32-bit floating-point values."
+msgstr ""
+
+#: doc/classes/Image.xml:463
+msgid ""
+"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
+"components, each a 32-bit floating-point values."
+msgstr ""
+
+#: doc/classes/Image.xml:466
+msgid ""
+"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
+"components, each a 32-bit floating-point values."
+msgstr ""
+
+#: doc/classes/Image.xml:469
+msgid ""
+"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 16-"
+"bit \"half-precision\" floating-point value."
+msgstr ""
+
+#: doc/classes/Image.xml:472
+msgid ""
+"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
+"each a 16-bit \"half-precision\" floating-point value."
+msgstr ""
+
+#: doc/classes/Image.xml:475
+msgid ""
+"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
+"components, each a 16-bit \"half-precision\" floating-point value."
+msgstr ""
+
+#: doc/classes/Image.xml:478
+msgid ""
+"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
+"components, each a 16-bit \"half-precision\" floating-point value."
+msgstr ""
+
+#: doc/classes/Image.xml:481
+msgid ""
+"A special OpenGL texture format where the three color components have 9 bits "
+"of precision and all three share a single 5-bit exponent."
+msgstr ""
+
+#: doc/classes/Image.xml:484
+msgid ""
+"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
+"texture format that uses Block Compression 1, and is the smallest variation "
+"of S3TC, only providing 1 bit of alpha and color data being premultiplied "
+"with alpha.\n"
+"[b]Note:[/b] When creating an [ImageTexture], an sRGB to linear color space "
+"conversion is performed."
+msgstr ""
+
+#: doc/classes/Image.xml:488
+msgid ""
+"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
+"texture format that uses Block Compression 2, and color data is interpreted "
+"as not having been premultiplied by alpha. Well suited for images with sharp "
+"alpha transitions between translucent and opaque areas.\n"
+"[b]Note:[/b] When creating an [ImageTexture], an sRGB to linear color space "
+"conversion is performed."
+msgstr ""
+
+#: doc/classes/Image.xml:492
+msgid ""
+"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
+"texture format also known as Block Compression 3 or BC3 that contains 64 "
+"bits of alpha channel data followed by 64 bits of DXT1-encoded color data. "
+"Color data is not premultiplied by alpha, same as DXT3. DXT5 generally "
+"produces superior results for transparent gradients compared to DXT3.\n"
+"[b]Note:[/b] When creating an [ImageTexture], an sRGB to linear color space "
+"conversion is performed."
+msgstr ""
+
+#: doc/classes/Image.xml:496
+msgid ""
+"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
+"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
+"normalizing the red channel data using the same compression algorithm that "
+"DXT5 uses for the alpha channel."
+msgstr ""
+
+#: doc/classes/Image.xml:499
+msgid ""
+"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
+"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
+"normalizing the red and green channel data using the same compression "
+"algorithm that DXT5 uses for the alpha channel."
+msgstr ""
+
+#: doc/classes/Image.xml:502
+msgid ""
+"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
+"BPTC_Texture_Compression]BPTC[/url] compression with unsigned normalized "
+"RGBA components.\n"
+"[b]Note:[/b] When creating an [ImageTexture], an sRGB to linear color space "
+"conversion is performed."
+msgstr ""
+
+#: doc/classes/Image.xml:506
+msgid ""
+"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
+"BPTC_Texture_Compression]BPTC[/url] compression with signed floating-point "
+"RGB components."
+msgstr ""
+
+#: doc/classes/Image.xml:509
+msgid ""
+"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
+"BPTC_Texture_Compression]BPTC[/url] compression with unsigned floating-point "
+"RGB components."
+msgstr ""
+
+#: doc/classes/Image.xml:512
+msgid ""
+"Texture format used on PowerVR-supported mobile platforms, uses 2-bit color "
+"depth with no alpha. More information can be found [url=https://en.wikipedia."
+"org/wiki/PVRTC]here[/url].\n"
+"[b]Note:[/b] When creating an [ImageTexture], an sRGB to linear color space "
+"conversion is performed."
+msgstr ""
+
+#: doc/classes/Image.xml:516
+msgid ""
+"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with an "
+"alpha component."
+msgstr ""
+
+#: doc/classes/Image.xml:519
+msgid ""
+"Similar to [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with 4-"
+"bit color depth and no alpha."
+msgstr ""
+
+#: doc/classes/Image.xml:522
+msgid ""
+"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC4[/url], but with an "
+"alpha component."
+msgstr ""
+
+#: doc/classes/Image.xml:525
+msgid ""
+"[url=https://en.wikipedia.org/wiki/"
+"Ericsson_Texture_Compression#ETC1]Ericsson Texture Compression format 1[/"
+"url], also referred to as \"ETC1\", and is part of the OpenGL ES graphics "
+"standard. This format cannot store an alpha channel."
+msgstr ""
+
+#: doc/classes/Image.xml:528
+msgid ""
+"[url=https://en.wikipedia.org/wiki/"
+"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
+"format 2[/url] ([code]R11_EAC[/code] variant), which provides one channel of "
+"unsigned data."
+msgstr ""
+
+#: doc/classes/Image.xml:531
+msgid ""
+"[url=https://en.wikipedia.org/wiki/"
+"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
+"format 2[/url] ([code]SIGNED_R11_EAC[/code] variant), which provides one "
+"channel of signed data."
+msgstr ""
+
+#: doc/classes/Image.xml:534
+msgid ""
+"[url=https://en.wikipedia.org/wiki/"
+"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
+"format 2[/url] ([code]RG11_EAC[/code] variant), which provides two channels "
+"of unsigned data."
+msgstr ""
+
+#: doc/classes/Image.xml:537
+msgid ""
+"[url=https://en.wikipedia.org/wiki/"
+"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
+"format 2[/url] ([code]SIGNED_RG11_EAC[/code] variant), which provides two "
+"channels of signed data."
+msgstr ""
+
+#: doc/classes/Image.xml:540
+msgid ""
+"[url=https://en.wikipedia.org/wiki/"
+"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
+"format 2[/url] ([code]RGB8[/code] variant), which is a follow-up of ETC1 and "
+"compresses RGB888 data.\n"
+"[b]Note:[/b] When creating an [ImageTexture], an sRGB to linear color space "
+"conversion is performed."
+msgstr ""
+
+#: doc/classes/Image.xml:544
+msgid ""
+"[url=https://en.wikipedia.org/wiki/"
+"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
+"format 2[/url] ([code]RGBA8[/code]variant), which compresses RGBA8888 data "
+"with full alpha support.\n"
+"[b]Note:[/b] When creating an [ImageTexture], an sRGB to linear color space "
+"conversion is performed."
+msgstr ""
+
+#: doc/classes/Image.xml:548
+msgid ""
+"[url=https://en.wikipedia.org/wiki/"
+"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
+"format 2[/url] ([code]RGB8_PUNCHTHROUGH_ALPHA1[/code] variant), which "
+"compresses RGBA data to make alpha either fully transparent or fully "
+"opaque.\n"
+"[b]Note:[/b] When creating an [ImageTexture], an sRGB to linear color space "
+"conversion is performed."
+msgstr ""
+
+#: doc/classes/Image.xml:552
+msgid "Represents the size of the [enum Format] enum."
+msgstr ""
+
+#: doc/classes/Image.xml:555
+msgid ""
+"Performs nearest-neighbor interpolation. If the image is resized, it will be "
+"pixelated."
+msgstr ""
+
+#: doc/classes/Image.xml:558
+msgid ""
+"Performs bilinear interpolation. If the image is resized, it will be blurry. "
+"This mode is faster than [constant INTERPOLATE_CUBIC], but it results in "
+"lower quality."
+msgstr ""
+
+#: doc/classes/Image.xml:561
+msgid ""
+"Performs cubic interpolation. If the image is resized, it will be blurry. "
+"This mode often gives better results compared to [constant "
+"INTERPOLATE_BILINEAR], at the cost of being slower."
+msgstr ""
+
+#: doc/classes/Image.xml:564
+msgid ""
+"Performs bilinear separately on the two most-suited mipmap levels, then "
+"linearly interpolates between them.\n"
+"It's slower than [constant INTERPOLATE_BILINEAR], but produces higher-"
+"quality results with far fewer aliasing artifacts.\n"
+"If the image does not have mipmaps, they will be generated and used "
+"internally, but no mipmaps will be generated on the resulting image.\n"
+"[b]Note:[/b] If you intend to scale multiple copies of the original image, "
+"it's better to call [method generate_mipmaps]] on it in advance, to avoid "
+"wasting processing power in generating them again and again.\n"
+"On the other hand, if the image already has mipmaps, they will be used, and "
+"a new set will be generated for the resulting image."
+msgstr ""
+
+#: doc/classes/Image.xml:571
+msgid ""
+"Performs Lanczos interpolation. This is the slowest image resizing mode, but "
+"it typically gives the best results, especially when downscalng images."
+msgstr ""
+
+#: doc/classes/Image.xml:574
+msgid "Image does not have alpha."
+msgstr ""
+
+#: doc/classes/Image.xml:577
+msgid "Image stores alpha in a single bit."
+msgstr ""
+
+#: doc/classes/Image.xml:580
+msgid "Image uses alpha."
+msgstr ""
+
+#: doc/classes/Image.xml:583
+msgid "Use S3TC compression."
+msgstr ""
+
+#: doc/classes/Image.xml:586
+msgid "Use PVRTC2 compression."
+msgstr ""
+
+#: doc/classes/Image.xml:589
+msgid "Use PVRTC4 compression."
+msgstr ""
+
+#: doc/classes/Image.xml:592
+msgid "Use ETC compression."
+msgstr ""
+
+#: doc/classes/Image.xml:595
+msgid "Use ETC2 compression."
+msgstr ""
+
+#: doc/classes/Image.xml:598
+msgid ""
+"Source texture (before compression) is a regular texture. Default for all "
+"textures."
+msgstr ""
+
+#: doc/classes/Image.xml:601
+msgid "Source texture (before compression) is in sRGB space."
+msgstr ""
+
+#: doc/classes/Image.xml:604
+msgid ""
+"Source texture (before compression) is a normal texture (e.g. it can be "
+"compressed into two channels)."
+msgstr ""
+
+#: doc/classes/ImageTexture.xml:4
+msgid "A [Texture] based on an [Image]."
+msgstr ""
+
+#: doc/classes/ImageTexture.xml:7
+msgid ""
+"A [Texture] based on an [Image]. For an image to be displayed, an "
+"[ImageTexture] has to be created from it using the [method "
+"create_from_image] method:\n"
+"[codeblock]\n"
+"var texture = ImageTexture.new()\n"
+"var image = Image.new()\n"
+"image.load(\"res://icon.png\")\n"
+"texture.create_from_image(image)\n"
+"$Sprite.texture = texture\n"
+"[/codeblock]\n"
+"This way, textures can be created at run-time by loading images both from "
+"within the editor and externally.\n"
+"[b]Warning:[/b] Prefer to load imported textures with [method @GDScript."
+"load] over loading them from within the filesystem dynamically with [method "
+"Image.load], as it may not work in exported projects:\n"
+"[codeblock]\n"
+"var texture = load(\"res://icon.png\")\n"
+"$Sprite.texture = texture\n"
+"[/codeblock]\n"
+"This is because images have to be imported as [StreamTexture] first to be "
+"loaded with [method @GDScript.load]. If you'd still like to load an image "
+"file just like any other [Resource], import it as an [Image] resource "
+"instead, and then load it normally using the [method @GDScript.load] "
+"method.\n"
+"But do note that the image data can still be retrieved from an imported "
+"texture as well using the [method Texture.get_data] method, which returns a "
+"copy of the data:\n"
+"[codeblock]\n"
+"var texture = load(\"res://icon.png\")\n"
+"var image : Image = texture.get_data()\n"
+"[/codeblock]\n"
+"An [ImageTexture] is not meant to be operated from within the editor "
+"interface directly, and is mostly useful for rendering images on screen "
+"dynamically via code. If you need to generate images procedurally from "
+"within the editor, consider saving and importing images as custom texture "
+"resources implementing a new [EditorImportPlugin].\n"
+"[b]Note:[/b] The maximum texture size is 16384×16384 pixels due to graphics "
+"hardware limitations."
+msgstr ""
+
+#: doc/classes/ImageTexture.xml:41
+msgid ""
+"Create a new [ImageTexture] with [code]width[/code] and [code]height[/"
+"code].\n"
+"[code]format[/code] is a value from [enum Image.Format], [code]flags[/code] "
+"is any combination of [enum Texture.Flags]."
+msgstr ""
+
+#: doc/classes/ImageTexture.xml:50
+msgid ""
+"Initializes the texture by allocating and setting the data from an [Image] "
+"with [code]flags[/code] from [enum Texture.Flags]. An sRGB to linear color "
+"space conversion can take place, according to [enum Image.Format]."
+msgstr ""
+
+#: doc/classes/ImageTexture.xml:56
+msgid "Returns the format of the texture, one of [enum Image.Format]."
+msgstr ""
+
+#: doc/classes/ImageTexture.xml:63
+msgid ""
+"Loads an image from a file path and creates a texture from it.\n"
+"[b]Note:[/b] This method is deprecated and will be removed in Godot 4.0, use "
+"[method Image.load] and [method create_from_image] instead."
+msgstr ""
+
+#: doc/classes/ImageTexture.xml:71
+msgid ""
+"Replaces the texture's data with a new [Image].\n"
+"[b]Note:[/b] The texture has to be initialized first with the [method "
+"create_from_image] method before it can be updated. The new image "
+"dimensions, format, and mipmaps configuration should match the existing "
+"texture's image configuration, otherwise it has to be re-created with the "
+"[method create_from_image] method.\n"
+"Use this method over [method create_from_image] if you need to update the "
+"texture frequently, which is faster than allocating additional memory for a "
+"new texture each time."
+msgstr ""
+
+#: doc/classes/ImageTexture.xml:80 doc/classes/VisualServer.xml:2837
+msgid "Resizes the texture to the specified dimensions."
+msgstr ""
+
+#: doc/classes/ImageTexture.xml:87
+msgid "The storage quality for [constant STORAGE_COMPRESS_LOSSY]."
+msgstr ""
+
+#: doc/classes/ImageTexture.xml:90
+msgid "The storage type (raw, lossy, or compressed)."
+msgstr ""
+
+#: doc/classes/ImageTexture.xml:95
+msgid "[Image] data is stored raw and unaltered."
+msgstr ""
+
+#: doc/classes/ImageTexture.xml:98
+msgid ""
+"[Image] data is compressed with a lossy algorithm. You can set the storage "
+"quality with [member lossy_quality]."
+msgstr ""
+
+#: doc/classes/ImageTexture.xml:101
+msgid "[Image] data is compressed with a lossless algorithm."
+msgstr ""
+
+#: doc/classes/ImmediateGeometry.xml:4
+msgid "Draws simple geometry from code."
+msgstr ""
+
+#: doc/classes/ImmediateGeometry.xml:7
+msgid ""
+"Draws simple geometry from code. Uses a drawing mode similar to OpenGL 1.x.\n"
+"See also [ArrayMesh], [MeshDataTool] and [SurfaceTool] for procedural "
+"geometry generation.\n"
+"[b]Note:[/b] ImmediateGeometry3D is best suited to small amounts of mesh "
+"data that change every frame. It will be slow when handling large amounts of "
+"mesh data. If mesh data doesn't change often, use [ArrayMesh], "
+"[MeshDataTool] or [SurfaceTool] instead.\n"
+"[b]Note:[/b] Godot uses clockwise [url=https://learnopengl.com/Advanced-"
+"OpenGL/Face-culling]winding order[/url] for front faces of triangle "
+"primitive modes.\n"
+"[b]Note:[/b] In case of missing points when handling large amounts of mesh "
+"data, try increasing its buffer size limit under [member ProjectSettings."
+"rendering/limits/buffers/immediate_buffer_size_kb]."
+msgstr ""
+
+#: doc/classes/ImmediateGeometry.xml:23
+msgid ""
+"Simple helper to draw an UV sphere with given latitude, longitude and radius."
+msgstr ""
+
+#: doc/classes/ImmediateGeometry.xml:30
+msgid ""
+"Adds a vertex in local coordinate space with the currently set color/uv/etc."
+msgstr ""
+
+#: doc/classes/ImmediateGeometry.xml:38
+msgid ""
+"Begin drawing (and optionally pass a texture override). When done call "
+"[method end]. For more information on how this works, search for "
+"[code]glBegin()[/code] and [code]glEnd()[/code] references.\n"
+"For the type of primitive, see the [enum Mesh.PrimitiveType] enum."
+msgstr ""
+
+#: doc/classes/ImmediateGeometry.xml:45
+msgid "Clears everything that was drawn using begin/end."
+msgstr ""
+
+#: doc/classes/ImmediateGeometry.xml:51
+msgid "Ends a drawing context and displays the results."
+msgstr ""
+
+#: doc/classes/ImmediateGeometry.xml:58
+msgid "The current drawing color."
+msgstr ""
+
+#: doc/classes/ImmediateGeometry.xml:65
+msgid "The next vertex's normal."
+msgstr ""
+
+#: doc/classes/ImmediateGeometry.xml:72
+msgid "The next vertex's tangent (and binormal facing)."
+msgstr ""
+
+#: doc/classes/ImmediateGeometry.xml:79
+msgid "The next vertex's UV."
+msgstr ""
+
+#: doc/classes/ImmediateGeometry.xml:86
+msgid "The next vertex's second layer UV."
+msgstr ""
+
+#: doc/classes/Input.xml:4
+msgid "A singleton that deals with inputs."
+msgstr ""
+
+#: doc/classes/Input.xml:7
+msgid ""
+"A singleton that deals with inputs. This includes key presses, mouse buttons "
+"and movement, joypads, and input actions. Actions and their events can be "
+"set in the [b]Input Map[/b] tab in the [b]Project > Project Settings[/b], or "
+"with the [InputMap] class."
+msgstr ""
+
+#: doc/classes/Input.xml:10
+msgid "https://docs.godotengine.org/en/3.4/tutorials/inputs/index.html"
+msgstr ""
+
+#: doc/classes/Input.xml:20
+msgid ""
+"This will simulate pressing the specified action.\n"
+"The strength can be used for non-boolean actions, it's ranged between 0 and "
+"1 representing the intensity of the given action.\n"
+"[b]Note:[/b] This method will not cause any [method Node._input] calls. It "
+"is intended to be used with [method is_action_pressed] and [method "
+"is_action_just_pressed]. If you want to simulate [code]_input[/code], use "
+"[method parse_input_event] instead."
+msgstr ""
+
+#: doc/classes/Input.xml:29
+msgid "If the specified action is already pressed, this will release it."
+msgstr ""
+
+#: doc/classes/Input.xml:37
+msgid ""
+"Adds a new mapping entry (in SDL2 format) to the mapping database. "
+"Optionally update already connected devices."
+msgstr ""
+
+#: doc/classes/Input.xml:43
+msgid ""
+"Sends all input events which are in the current buffer to the game loop. "
+"These events may have been buffered as a result of accumulated input "
+"([method set_use_accumulated_input]) or agile input flushing ([member "
+"ProjectSettings.input_devices/buffering/agile_event_flushing]).\n"
+"The engine will already do this itself at key execution points (at least "
+"once per frame). However, this can be useful in advanced cases where you "
+"want precise control over the timing of event handling."
+msgstr ""
+
+#: doc/classes/Input.xml:50
+msgid ""
+"Returns the acceleration of the device's accelerometer sensor, if the device "
+"has one. Otherwise, the method returns [constant Vector3.ZERO].\n"
+"Note this method returns an empty [Vector3] when running from the editor "
+"even when your device has an accelerometer. You must export your project to "
+"a supported device to read values from the accelerometer.\n"
+"[b]Note:[/b] This method only works on iOS, Android, and UWP. On other "
+"platforms, it always returns [constant Vector3.ZERO]. On Android the unit of "
+"measurement for each axis is m/s² while on iOS and UWP it's a multiple of "
+"the Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
+msgstr ""
+
+#: doc/classes/Input.xml:60
+msgid ""
+"Returns a value between 0 and 1 representing the raw intensity of the given "
+"action, ignoring the action's deadzone. In most cases, you should use "
+"[method get_action_strength] instead.\n"
+"If [code]exact[/code] is [code]false[/code], it ignores the input modifiers "
+"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
+"for [InputEventJoypadMotion] events."
+msgstr ""
+
+#: doc/classes/Input.xml:69
+msgid ""
+"Returns a value between 0 and 1 representing the intensity of the given "
+"action. In a joypad, for example, the further away the axis (analog sticks "
+"or L2, R2 triggers) is from the dead zone, the closer the value will be to "
+"1. If the action is mapped to a control that has no axis as the keyboard, "
+"the value returned will be 0 or 1.\n"
+"If [code]exact[/code] is [code]false[/code], it ignores the input modifiers "
+"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
+"for [InputEventJoypadMotion] events."
+msgstr ""
+
+#: doc/classes/Input.xml:78
+msgid ""
+"Get axis input by specifying two actions, one negative and one positive.\n"
+"This is a shorthand for writing [code]Input."
+"get_action_strength(\"positive_action\") - Input."
+"get_action_strength(\"negative_action\")[/code]."
+msgstr ""
+
+#: doc/classes/Input.xml:85
+msgid ""
+"Returns an [Array] containing the device IDs of all currently connected "
+"joypads."
+msgstr ""
+
+#: doc/classes/Input.xml:91
+msgid "Returns the currently assigned cursor shape (see [enum CursorShape])."
+msgstr ""
+
+#: doc/classes/Input.xml:97
+msgid ""
+"Returns the gravity of the device's accelerometer sensor, if the device has "
+"one. Otherwise, the method returns [constant Vector3.ZERO].\n"
+"[b]Note:[/b] This method only works on Android and iOS. On other platforms, "
+"it always returns [constant Vector3.ZERO]. On Android the unit of "
+"measurement for each axis is m/s² while on iOS it's a multiple of the "
+"Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
+msgstr ""
+
+#: doc/classes/Input.xml:104
+msgid ""
+"Returns the rotation rate in rad/s around a device's X, Y, and Z axes of the "
+"gyroscope sensor, if the device has one. Otherwise, the method returns "
+"[constant Vector3.ZERO].\n"
+"[b]Note:[/b] This method only works on Android and iOS. On other platforms, "
+"it always returns [constant Vector3.ZERO]."
+msgstr ""
+
+#: doc/classes/Input.xml:113
+msgid ""
+"Returns the current value of the joypad axis at given index (see [enum "
+"JoystickList])."
+msgstr ""
+
+#: doc/classes/Input.xml:120
+msgid "Returns the index of the provided axis name."
+msgstr ""
+
+#: doc/classes/Input.xml:127
+msgid ""
+"Receives a [enum JoystickList] axis and returns its equivalent name as a "
+"string."
+msgstr ""
+
+#: doc/classes/Input.xml:134
+msgid "Returns the index of the provided button name."
+msgstr ""
+
+#: doc/classes/Input.xml:141
+msgid ""
+"Receives a gamepad button from [enum JoystickList] and returns its "
+"equivalent name as a string."
+msgstr ""
+
+#: doc/classes/Input.xml:148
+msgid ""
+"Returns a SDL2-compatible device GUID on platforms that use gamepad "
+"remapping. Returns [code]\"Default Gamepad\"[/code] otherwise."
+msgstr ""
+
+#: doc/classes/Input.xml:155
+msgid "Returns the name of the joypad at the specified device index."
+msgstr ""
+
+#: doc/classes/Input.xml:162
+msgid "Returns the duration of the current vibration effect in seconds."
+msgstr ""
+
+#: doc/classes/Input.xml:169
+msgid ""
+"Returns the strength of the joypad vibration: x is the strength of the weak "
+"motor, and y is the strength of the strong motor."
+msgstr ""
+
+#: doc/classes/Input.xml:175
+msgid ""
+"Returns the mouse speed for the last time the cursor was moved, and this "
+"until the next frame where the mouse moves. This means that even if the "
+"mouse is not moving, this function will still return the value of the last "
+"motion."
+msgstr ""
+
+#: doc/classes/Input.xml:181
+msgid ""
+"Returns the magnetic field strength in micro-Tesla for all axes of the "
+"device's magnetometer sensor, if the device has one. Otherwise, the method "
+"returns [constant Vector3.ZERO].\n"
+"[b]Note:[/b] This method only works on Android, iOS and UWP. On other "
+"platforms, it always returns [constant Vector3.ZERO]."
+msgstr ""
+
+#: doc/classes/Input.xml:188
+msgid ""
+"Returns mouse buttons as a bitmask. If multiple mouse buttons are pressed at "
+"the same time, the bits are added together."
+msgstr ""
+
+#: doc/classes/Input.xml:194
+msgid "Returns the mouse mode. See the constants for more information."
+msgstr ""
+
+#: doc/classes/Input.xml:205
+msgid ""
+"Gets an input vector by specifying four actions for the positive and "
+"negative X and Y axes.\n"
+"This method is useful when getting vector input, such as from a joystick, "
+"directional pad, arrows, or WASD. The vector has its length limited to 1 and "
+"has a circular deadzone, which is useful for using vector input as "
+"movement.\n"
+"By default, the deadzone is automatically calculated from the average of the "
+"action deadzones. However, you can override the deadzone to be whatever you "
+"want (on the range of 0 to 1)."
+msgstr ""
+
+#: doc/classes/Input.xml:215
+msgid ""
+"Returns [code]true[/code] when the user starts pressing the action event, "
+"meaning it's [code]true[/code] only on the frame that the user pressed down "
+"the button.\n"
+"This is useful for code that needs to run only once when an action is "
+"pressed, instead of every frame while it's pressed.\n"
+"If [code]exact[/code] is [code]false[/code], it ignores the input modifiers "
+"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
+"for [InputEventJoypadMotion] events."
+msgstr ""
+
+#: doc/classes/Input.xml:225
+msgid ""
+"Returns [code]true[/code] when the user stops pressing the action event, "
+"meaning it's [code]true[/code] only on the frame that the user released the "
+"button.\n"
+"If [code]exact[/code] is [code]false[/code], it ignores the input modifiers "
+"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
+"for [InputEventJoypadMotion] events."
+msgstr ""
+
+#: doc/classes/Input.xml:234
+msgid ""
+"Returns [code]true[/code] if you are pressing the action event. Note that if "
+"an action has multiple buttons assigned and more than one of them is "
+"pressed, releasing one button will release the action, even if some other "
+"button assigned to this action is still pressed.\n"
+"If [code]exact[/code] is [code]false[/code], it ignores the input modifiers "
+"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
+"for [InputEventJoypadMotion] events."
+msgstr ""
+
+#: doc/classes/Input.xml:243
+msgid ""
+"Returns [code]true[/code] if you are pressing the joypad button (see [enum "
+"JoystickList])."
+msgstr ""
+
+#: doc/classes/Input.xml:250
+msgid ""
+"Returns [code]true[/code] if the system knows the specified device. This "
+"means that it sets all button and axis indices exactly as defined in [enum "
+"JoystickList]. Unknown joypads are not expected to match these constants, "
+"but you can still retrieve events from them."
+msgstr ""
+
+#: doc/classes/Input.xml:257
+msgid ""
+"Returns [code]true[/code] if you are pressing the key. You can pass a [enum "
+"KeyList] constant."
+msgstr ""
+
+#: doc/classes/Input.xml:264
+msgid ""
+"Returns [code]true[/code] if you are pressing the mouse button specified "
+"with [enum ButtonList]."
+msgstr ""
+
+#: doc/classes/Input.xml:274
+msgid ""
+"Notifies the [Input] singleton that a connection has changed, to update the "
+"state for the [code]device[/code] index.\n"
+"This is used internally and should not have to be called from user scripts. "
+"See [signal joy_connection_changed] for the signal emitted when this is "
+"triggered internally."
+msgstr ""
+
+#: doc/classes/Input.xml:282
+msgid ""
+"Feeds an [InputEvent] to the game. Can be used to artificially trigger input "
+"events from code. Also generates [method Node._input] calls.\n"
+"Example:\n"
+"[codeblock]\n"
+"var a = InputEventAction.new()\n"
+"a.action = \"ui_cancel\"\n"
+"a.pressed = true\n"
+"Input.parse_input_event(a)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Input.xml:296
+msgid ""
+"Removes all mappings from the internal database that match the given GUID."
+msgstr ""
+
+#: doc/classes/Input.xml:303
+msgid ""
+"Sets the acceleration value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:313
+msgid ""
+"Sets a custom mouse cursor image, which is only visible inside the game "
+"window. The hotspot can also be specified. Passing [code]null[/code] to the "
+"image parameter resets to the system cursor. See [enum CursorShape] for the "
+"list of shapes.\n"
+"[code]image[/code]'s size must be lower than 256×256.\n"
+"[code]hotspot[/code] must be within [code]image[/code]'s size.\n"
+"[b]Note:[/b] [AnimatedTexture]s aren't supported as custom mouse cursors. If "
+"using an [AnimatedTexture], only the first frame will be displayed.\n"
+"[b]Note:[/b] Only images imported with the [b]Lossless[/b], [b]Lossy[/b] or "
+"[b]Uncompressed[/b] compression modes are supported. The [b]Video RAM[/b] "
+"compression mode can't be used for custom cursors."
+msgstr ""
+
+#: doc/classes/Input.xml:324
+msgid ""
+"Sets the default cursor shape to be used in the viewport instead of "
+"[constant CURSOR_ARROW].\n"
+"[b]Note:[/b] If you want to change the default cursor shape for [Control]'s "
+"nodes, use [member Control.mouse_default_cursor_shape] instead.\n"
+"[b]Note:[/b] This method generates an [InputEventMouseMotion] to update "
+"cursor immediately."
+msgstr ""
+
+#: doc/classes/Input.xml:333
+msgid ""
+"Sets the gravity value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:341
+msgid ""
+"Sets the value of the rotation rate of the gyroscope sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:349
+msgid ""
+"Sets the value of the magnetic field of the magnetometer sensor. Can be used "
+"for debugging on devices without a hardware sensor, for example in an editor "
+"on a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:357
+msgid "Sets the mouse mode. See the constants for more information."
+msgstr ""
+
+#: doc/classes/Input.xml:364
+msgid ""
+"Enables or disables the accumulation of similar input events sent by the "
+"operating system. When input accumulation is enabled, all input events "
+"generated during a frame will be merged and emitted when the frame is done "
+"rendering. Therefore, this limits the number of input method calls per "
+"second to the rendering FPS.\n"
+"Input accumulation is enabled by default. It can be disabled to get slightly "
+"more precise/reactive input at the cost of increased CPU usage. In "
+"applications where drawing freehand lines is required, input accumulation "
+"should generally be disabled while the user is drawing the line to get "
+"results that closely follow the actual input."
+msgstr ""
+
+#: doc/classes/Input.xml:375
+msgid ""
+"Starts to vibrate the joypad. Joypads usually come with two rumble motors, a "
+"strong and a weak one. [code]weak_magnitude[/code] is the strength of the "
+"weak motor (between 0 and 1) and [code]strong_magnitude[/code] is the "
+"strength of the strong motor (between 0 and 1). [code]duration[/code] is the "
+"duration of the effect in seconds (a duration of 0 will try to play the "
+"vibration indefinitely).\n"
+"[b]Note:[/b] Not every hardware is compatible with long effect durations; it "
+"is recommended to restart an effect if it has to be played for more than a "
+"few seconds."
+msgstr ""
+
+#: doc/classes/Input.xml:383
+msgid "Stops the vibration of the joypad."
+msgstr ""
+
+#: doc/classes/Input.xml:390
+msgid ""
+"Vibrate Android and iOS devices.\n"
+"[b]Note:[/b] It needs [code]VIBRATE[/code] permission for Android at export "
+"settings. iOS does not support duration."
+msgstr ""
+
+#: doc/classes/Input.xml:398
+msgid "Sets the mouse position to the specified vector."
+msgstr ""
+
+#: doc/classes/Input.xml:407
+msgid "Emitted when a joypad device has been connected or disconnected."
+msgstr ""
+
+#: doc/classes/Input.xml:413
+msgid "Makes the mouse cursor visible if it is hidden."
+msgstr ""
+
+#: doc/classes/Input.xml:416
+msgid "Makes the mouse cursor hidden if it is visible."
+msgstr ""
+
+#: doc/classes/Input.xml:419
+msgid ""
+"Captures the mouse. The mouse will be hidden and its position locked at the "
+"center of the screen.\n"
+"[b]Note:[/b] If you want to process the mouse's movement in this mode, you "
+"need to use [member InputEventMouseMotion.relative]."
+msgstr ""
+
+#: doc/classes/Input.xml:423
+msgid "Makes the mouse cursor visible but confines it to the game window."
+msgstr ""
+
+#: doc/classes/Input.xml:426
+msgid "Arrow cursor. Standard, default pointing cursor."
+msgstr ""
+
+#: doc/classes/Input.xml:429
+msgid ""
+"I-beam cursor. Usually used to show where the text cursor will appear when "
+"the mouse is clicked."
+msgstr ""
+
+#: doc/classes/Input.xml:432
+msgid ""
+"Pointing hand cursor. Usually used to indicate the pointer is over a link or "
+"other interactable item."
+msgstr ""
+
+#: doc/classes/Input.xml:435
+msgid ""
+"Cross cursor. Typically appears over regions in which a drawing operation "
+"can be performed or for selections."
+msgstr ""
+
+#: doc/classes/Input.xml:438
+msgid ""
+"Wait cursor. Indicates that the application is busy performing an operation. "
+"This cursor shape denotes that the application is still usable during the "
+"operation."
+msgstr ""
+
+#: doc/classes/Input.xml:441
+msgid ""
+"Busy cursor. Indicates that the application is busy performing an operation. "
+"This cursor shape denotes that the application isn't usable during the "
+"operation (e.g. something is blocking its main thread)."
+msgstr ""
+
+#: doc/classes/Input.xml:444
+msgid "Drag cursor. Usually displayed when dragging something."
+msgstr ""
+
+#: doc/classes/Input.xml:447
+msgid ""
+"Can drop cursor. Usually displayed when dragging something to indicate that "
+"it can be dropped at the current position."
+msgstr ""
+
+#: doc/classes/Input.xml:450
+msgid ""
+"Forbidden cursor. Indicates that the current action is forbidden (for "
+"example, when dragging something) or that the control at a position is "
+"disabled."
+msgstr ""
+
+#: doc/classes/Input.xml:453
+msgid ""
+"Vertical resize mouse cursor. A double-headed vertical arrow. It tells the "
+"user they can resize the window or the panel vertically."
+msgstr ""
+
+#: doc/classes/Input.xml:456
+msgid ""
+"Horizontal resize mouse cursor. A double-headed horizontal arrow. It tells "
+"the user they can resize the window or the panel horizontally."
+msgstr ""
+
+#: doc/classes/Input.xml:459
+msgid ""
+"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
+"from the bottom left to the top right. It tells the user they can resize the "
+"window or the panel both horizontally and vertically."
+msgstr ""
+
+#: doc/classes/Input.xml:462
+msgid ""
+"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
+"from the top left to the bottom right, the opposite of [constant "
+"CURSOR_BDIAGSIZE]. It tells the user they can resize the window or the panel "
+"both horizontally and vertically."
+msgstr ""
+
+#: doc/classes/Input.xml:465
+msgid "Move cursor. Indicates that something can be moved."
+msgstr ""
+
+#: doc/classes/Input.xml:468
+msgid ""
+"Vertical split mouse cursor. On Windows, it's the same as [constant "
+"CURSOR_VSIZE]."
+msgstr ""
+
+#: doc/classes/Input.xml:471
+msgid ""
+"Horizontal split mouse cursor. On Windows, it's the same as [constant "
+"CURSOR_HSIZE]."
+msgstr ""
+
+#: doc/classes/Input.xml:474
+msgid "Help cursor. Usually a question mark."
+msgstr ""
+
+#: doc/classes/InputEvent.xml:4
+msgid "Generic input event."
+msgstr ""
+
+#: doc/classes/InputEvent.xml:7
+msgid "Base class of all sort of input event. See [method Node._input]."
+msgstr ""
+
+#: doc/classes/InputEvent.xml:10 doc/classes/InputEventJoypadButton.xml:10
+#: doc/classes/InputEventJoypadMotion.xml:10 doc/classes/InputEventKey.xml:10
+#: doc/classes/InputEventMouse.xml:10 doc/classes/InputEventScreenDrag.xml:10
+#: doc/classes/InputEventScreenTouch.xml:11
+#: doc/classes/InputEventWithModifiers.xml:10
+msgid "https://docs.godotengine.org/en/3.4/tutorials/inputs/inputevent.html"
+msgstr ""
+
+#: doc/classes/InputEvent.xml:20
+msgid ""
+"Returns [code]true[/code] if the given input event and this input event can "
+"be added together (only for events of type [InputEventMouseMotion]).\n"
+"The given input event's position, global position and speed will be copied. "
+"The resulting [code]relative[/code] is a sum of both events. Both events' "
+"modifiers have to be identical."
+msgstr ""
+
+#: doc/classes/InputEvent.xml:27
+msgid "Returns a [String] representation of the event."
+msgstr ""
+
+#: doc/classes/InputEvent.xml:35
+msgid ""
+"Returns a value between 0.0 and 1.0 depending on the given actions' state. "
+"Useful for getting the value of events of type [InputEventJoypadMotion].\n"
+"If [code]exact_match[/code] is [code]false[/code], it ignores the input "
+"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
+"direction for [InputEventJoypadMotion] events."
+msgstr ""
+
+#: doc/classes/InputEvent.xml:44
+msgid ""
+"Returns [code]true[/code] if this input event matches a pre-defined action "
+"of any type.\n"
+"If [code]exact_match[/code] is [code]false[/code], it ignores the input "
+"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
+"direction for [InputEventJoypadMotion] events."
+msgstr ""
+
+#: doc/classes/InputEvent.xml:54
+msgid ""
+"Returns [code]true[/code] if the given action is being pressed (and is not "
+"an echo event for [InputEventKey] events, unless [code]allow_echo[/code] is "
+"[code]true[/code]). Not relevant for events of type [InputEventMouseMotion] "
+"or [InputEventScreenDrag].\n"
+"If [code]exact_match[/code] is [code]false[/code], it ignores the input "
+"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
+"direction for [InputEventJoypadMotion] events."
+msgstr ""
+
+#: doc/classes/InputEvent.xml:63
+msgid ""
+"Returns [code]true[/code] if the given action is released (i.e. not "
+"pressed). Not relevant for events of type [InputEventMouseMotion] or "
+"[InputEventScreenDrag].\n"
+"If [code]exact_match[/code] is [code]false[/code], it ignores the input "
+"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
+"direction for [InputEventJoypadMotion] events."
+msgstr ""
+
+#: doc/classes/InputEvent.xml:70
+msgid ""
+"Returns [code]true[/code] if this input event's type is one that can be "
+"assigned to an input action."
+msgstr ""
+
+#: doc/classes/InputEvent.xml:76
+msgid ""
+"Returns [code]true[/code] if this input event is an echo event (only for "
+"events of type [InputEventKey])."
+msgstr ""
+
+#: doc/classes/InputEvent.xml:82
+msgid ""
+"Returns [code]true[/code] if this input event is pressed. Not relevant for "
+"events of type [InputEventMouseMotion] or [InputEventScreenDrag]."
+msgstr ""
+
+#: doc/classes/InputEvent.xml:90
+msgid ""
+"Returns [code]true[/code] if the specified [code]event[/code] matches this "
+"event. Only valid for action events i.e key ([InputEventKey]), button "
+"([InputEventMouseButton] or [InputEventJoypadButton]), axis "
+"[InputEventJoypadMotion] or action ([InputEventAction]) events.\n"
+"If [code]exact_match[/code] is [code]false[/code], it ignores the input "
+"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
+"direction for [InputEventJoypadMotion] events."
+msgstr ""
+
+#: doc/classes/InputEvent.xml:99
+msgid ""
+"Returns a copy of the given input event which has been offset by "
+"[code]local_ofs[/code] and transformed by [code]xform[/code]. Relevant for "
+"events of type [InputEventMouseButton], [InputEventMouseMotion], "
+"[InputEventScreenTouch], [InputEventScreenDrag], [InputEventMagnifyGesture] "
+"and [InputEventPanGesture]."
+msgstr ""
+
+#: doc/classes/InputEvent.xml:105
+msgid ""
+"The event's device ID.\n"
+"[b]Note:[/b] This device ID will always be [code]-1[/code] for emulated "
+"mouse input from a touchscreen. This can be used to distinguish emulated "
+"mouse input from physical mouse input."
+msgstr ""
+
+#: doc/classes/InputEventAction.xml:4
+msgid "Input event type for actions."
+msgstr ""
+
+#: doc/classes/InputEventAction.xml:7
+msgid ""
+"Contains a generic action which can be targeted from several types of "
+"inputs. Actions can be created from the [b]Input Map[/b] tab in the "
+"[b]Project > Project Settings[/b] menu. See [method Node._input]."
+msgstr ""
+
+#: doc/classes/InputEventAction.xml:10
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/inputs/inputevent.html#actions"
+msgstr ""
+
+#: doc/classes/InputEventAction.xml:18
+msgid "The action's name. Actions are accessed via this [String]."
+msgstr ""
+
+#: doc/classes/InputEventAction.xml:21
+msgid ""
+"If [code]true[/code], the action's state is pressed. If [code]false[/code], "
+"the action's state is released."
+msgstr ""
+
+#: doc/classes/InputEventAction.xml:24
+msgid ""
+"The action's strength between 0 and 1. This value is considered as equal to "
+"0 if pressed is [code]false[/code]. The event strength allows faking analog "
+"joypad motion events, by specifying how strongly the joypad axis is bent or "
+"pressed."
+msgstr ""
+
+#: doc/classes/InputEventGesture.xml:4
+msgid "Base class for touch control gestures."
+msgstr ""
+
+#: doc/classes/InputEventGesture.xml:14
+msgid ""
+"The local gesture position relative to the [Viewport]. If used in [method "
+"Control._gui_input], the position is relative to the current [Control] that "
+"received this gesture."
+msgstr ""
+
+#: doc/classes/InputEventJoypadButton.xml:4
+msgid "Input event for gamepad buttons."
+msgstr ""
+
+#: doc/classes/InputEventJoypadButton.xml:7
+msgid ""
+"Input event type for gamepad buttons. For gamepad analog sticks and "
+"joysticks, see [InputEventJoypadMotion]."
+msgstr ""
+
+#: doc/classes/InputEventJoypadButton.xml:16
+msgid "Button identifier. One of the [enum JoystickList] button constants."
+msgstr ""
+
+#: doc/classes/InputEventJoypadButton.xml:19
+msgid ""
+"If [code]true[/code], the button's state is pressed. If [code]false[/code], "
+"the button's state is released."
+msgstr ""
+
+#: doc/classes/InputEventJoypadButton.xml:22
+msgid ""
+"Represents the pressure the user puts on the button with his finger, if the "
+"controller supports it. Ranges from [code]0[/code] to [code]1[/code]."
+msgstr ""
+
+#: doc/classes/InputEventJoypadMotion.xml:4
+msgid ""
+"Input event type for gamepad joysticks and other motions. For buttons, see "
+"[code]InputEventJoypadButton[/code]."
+msgstr ""
+
+#: doc/classes/InputEventJoypadMotion.xml:7
+msgid ""
+"Stores information about joystick motions. One [InputEventJoypadMotion] "
+"represents one axis at a time."
+msgstr ""
+
+#: doc/classes/InputEventJoypadMotion.xml:16
+msgid "Axis identifier. Use one of the [enum JoystickList] axis constants."
+msgstr ""
+
+#: doc/classes/InputEventJoypadMotion.xml:19
+msgid ""
+"Current position of the joystick on the given axis. The value ranges from "
+"[code]-1.0[/code] to [code]1.0[/code]. A value of [code]0[/code] means the "
+"axis is in its resting position."
+msgstr ""
+
+#: doc/classes/InputEventKey.xml:4
+msgid "Input event type for keyboard events."
+msgstr ""
+
+#: doc/classes/InputEventKey.xml:7
+msgid ""
+"Stores key presses on the keyboard. Supports key presses, key releases and "
+"[member echo] events."
+msgstr ""
+
+#: doc/classes/InputEventKey.xml:16
+msgid ""
+"Returns the physical scancode combined with modifier keys such as "
+"[code]Shift[/code] or [code]Alt[/code]. See also [InputEventWithModifiers].\n"
+"To get a human-readable representation of the [InputEventKey] with "
+"modifiers, use [code]OS.get_scancode_string(event."
+"get_physical_scancode_with_modifiers())[/code] where [code]event[/code] is "
+"the [InputEventKey]."
+msgstr ""
+
+#: doc/classes/InputEventKey.xml:23
+msgid ""
+"Returns the scancode combined with modifier keys such as [code]Shift[/code] "
+"or [code]Alt[/code]. See also [InputEventWithModifiers].\n"
+"To get a human-readable representation of the [InputEventKey] with "
+"modifiers, use [code]OS.get_scancode_string(event."
+"get_scancode_with_modifiers())[/code] where [code]event[/code] is the "
+"[InputEventKey]."
+msgstr ""
+
+#: doc/classes/InputEventKey.xml:30
+msgid ""
+"If [code]true[/code], the key was already pressed before this event. It "
+"means the user is holding the key down."
+msgstr ""
+
+#: doc/classes/InputEventKey.xml:33
+msgid ""
+"Key physical scancode, which corresponds to one of the [enum KeyList] "
+"constants. Represent the physical location of a key on the 101/102-key US "
+"QWERTY keyboard.\n"
+"To get a human-readable representation of the [InputEventKey], use [code]OS."
+"get_scancode_string(event.physical_scancode)[/code] where [code]event[/code] "
+"is the [InputEventKey]."
+msgstr ""
+
+#: doc/classes/InputEventKey.xml:37
+msgid ""
+"If [code]true[/code], the key's state is pressed. If [code]false[/code], the "
+"key's state is released."
+msgstr ""
+
+#: doc/classes/InputEventKey.xml:40
+msgid ""
+"The key scancode, which corresponds to one of the [enum KeyList] constants. "
+"Represent key in the current keyboard layout.\n"
+"To get a human-readable representation of the [InputEventKey], use [code]OS."
+"get_scancode_string(event.scancode)[/code] where [code]event[/code] is the "
+"[InputEventKey]."
+msgstr ""
+
+#: doc/classes/InputEventKey.xml:44
+msgid ""
+"The key Unicode identifier (when relevant). Unicode identifiers for the "
+"composite characters and complex scripts may not be available unless IME "
+"input mode is active. See [method OS.set_ime_active] for more information."
+msgstr ""
+
+#: doc/classes/InputEventMouse.xml:4
+msgid "Base input event type for mouse events."
+msgstr ""
+
+#: doc/classes/InputEventMouse.xml:7
+msgid "Stores general mouse events information."
+msgstr ""
+
+#: doc/classes/InputEventMouse.xml:16
+msgid ""
+"The mouse button mask identifier, one of or a bitwise combination of the "
+"[enum ButtonList] button masks."
+msgstr ""
+
+#: doc/classes/InputEventMouse.xml:19
+msgid ""
+"The global mouse position relative to the current [Viewport] when used in "
+"[method Control._gui_input], otherwise is at 0,0."
+msgstr ""
+
+#: doc/classes/InputEventMouse.xml:22
+msgid ""
+"The local mouse position relative to the [Viewport]. If used in [method "
+"Control._gui_input], the position is relative to the current [Control] which "
+"is under the mouse."
+msgstr ""
+
+#: doc/classes/InputEventMouseButton.xml:4
+msgid "Input event type for mouse button events."
+msgstr ""
+
+#: doc/classes/InputEventMouseButton.xml:7
+msgid "Contains mouse click information. See [method Node._input]."
+msgstr ""
+
+#: doc/classes/InputEventMouseButton.xml:10
+#: doc/classes/InputEventMouseMotion.xml:11
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/inputs/"
+"mouse_and_input_coordinates.html"
+msgstr ""
+
+#: doc/classes/InputEventMouseButton.xml:16
+msgid ""
+"The mouse button identifier, one of the [enum ButtonList] button or button "
+"wheel constants."
+msgstr ""
+
+#: doc/classes/InputEventMouseButton.xml:19
+msgid "If [code]true[/code], the mouse button's state is a double-click."
+msgstr ""
+
+#: doc/classes/InputEventMouseButton.xml:22
+msgid ""
+"The amount (or delta) of the event. When used for high-precision scroll "
+"events, this indicates the scroll amount (vertical or horizontal). This is "
+"only supported on some platforms; the reported sensitivity varies depending "
+"on the platform. May be [code]0[/code] if not supported."
+msgstr ""
+
+#: doc/classes/InputEventMouseButton.xml:25
+msgid ""
+"If [code]true[/code], the mouse button's state is pressed. If [code]false[/"
+"code], the mouse button's state is released."
+msgstr ""
+
+#: doc/classes/InputEventMouseMotion.xml:4
+msgid "Input event type for mouse motion events."
+msgstr ""
+
+#: doc/classes/InputEventMouseMotion.xml:7
+msgid ""
+"Contains mouse and pen motion information. Supports relative, absolute "
+"positions and speed. See [method Node._input].\n"
+"[b]Note:[/b] By default, this event is only emitted once per frame rendered "
+"at most. If you need more precise input reporting, call [method Input."
+"set_use_accumulated_input] with [code]false[/code] to make events emitted as "
+"often as possible. If you use InputEventMouseMotion to draw lines, consider "
+"implementing [url=https://en.wikipedia.org/wiki/Bresenham"
+"%27s_line_algorithm]Bresenham's line algorithm[/url] as well to avoid "
+"visible gaps in lines if the user is moving the mouse quickly."
+msgstr ""
+
+#: doc/classes/InputEventMouseMotion.xml:18
+msgid ""
+"Represents the pressure the user puts on the pen. Ranges from [code]0.0[/"
+"code] to [code]1.0[/code]."
+msgstr ""
+
+#: doc/classes/InputEventMouseMotion.xml:21
+msgid ""
+"The mouse position relative to the previous position (position at the last "
+"frame).\n"
+"[b]Note:[/b] Since [InputEventMouseMotion] is only emitted when the mouse "
+"moves, the last event won't have a relative position of [code]Vector2(0, 0)[/"
+"code] when the user stops moving the mouse."
+msgstr ""
+
+#: doc/classes/InputEventMouseMotion.xml:25
+msgid "The mouse speed in pixels per second."
+msgstr ""
+
+#: doc/classes/InputEventMouseMotion.xml:28
+msgid ""
+"Represents the angles of tilt of the pen. Positive X-coordinate value "
+"indicates a tilt to the right. Positive Y-coordinate value indicates a tilt "
+"toward the user. Ranges from [code]-1.0[/code] to [code]1.0[/code] for both "
+"axes."
+msgstr ""
+
+#: doc/classes/InputEventScreenDrag.xml:4
+msgid ""
+"Input event type for screen drag events. Only available on mobile devices."
+msgstr ""
+
+#: doc/classes/InputEventScreenDrag.xml:7
+msgid "Contains screen drag information. See [method Node._input]."
+msgstr ""
+
+#: doc/classes/InputEventScreenDrag.xml:16
+msgid "The drag event index in the case of a multi-drag event."
+msgstr ""
+
+#: doc/classes/InputEventScreenDrag.xml:19
+msgid "The drag position."
+msgstr ""
+
+#: doc/classes/InputEventScreenDrag.xml:22
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
+msgstr ""
+
+#: doc/classes/InputEventScreenDrag.xml:25
+msgid "The drag speed."
+msgstr ""
+
+#: doc/classes/InputEventScreenTouch.xml:4
+msgid ""
+"Input event type for screen touch events.\n"
+"(only available on mobile devices)"
+msgstr ""
+
+#: doc/classes/InputEventScreenTouch.xml:8
+msgid ""
+"Stores multi-touch press/release information. Supports touch press, touch "
+"release and [member index] for multi-touch count and order."
+msgstr ""
+
+#: doc/classes/InputEventScreenTouch.xml:17
+msgid ""
+"The touch index in the case of a multi-touch event. One index = one finger."
+msgstr ""
+
+#: doc/classes/InputEventScreenTouch.xml:20
+msgid "The touch position."
+msgstr ""
+
+#: doc/classes/InputEventScreenTouch.xml:23
+msgid ""
+"If [code]true[/code], the touch's state is pressed. If [code]false[/code], "
+"the touch's state is released."
+msgstr ""
+
+#: doc/classes/InputEventWithModifiers.xml:4
+msgid "Base class for keys events with modifiers."
+msgstr ""
+
+#: doc/classes/InputEventWithModifiers.xml:7
+msgid ""
+"Contains keys events information with modifiers support like [code]Shift[/"
+"code] or [code]Alt[/code]. See [method Node._input]."
+msgstr ""
+
+#: doc/classes/InputEventWithModifiers.xml:16
+msgid "State of the [code]Alt[/code] modifier."
+msgstr ""
+
+#: doc/classes/InputEventWithModifiers.xml:19
+msgid "State of the [code]Command[/code] modifier."
+msgstr ""
+
+#: doc/classes/InputEventWithModifiers.xml:22
+msgid "State of the [code]Ctrl[/code] modifier."
+msgstr ""
+
+#: doc/classes/InputEventWithModifiers.xml:25
+msgid "State of the [code]Meta[/code] modifier."
+msgstr ""
+
+#: doc/classes/InputEventWithModifiers.xml:28
+msgid "State of the [code]Shift[/code] modifier."
+msgstr ""
+
+#: doc/classes/InputMap.xml:4
+msgid "Singleton that manages [InputEventAction]."
+msgstr ""
+
+#: doc/classes/InputMap.xml:7
+msgid ""
+"Manages all [InputEventAction] which can be created/modified from the "
+"project settings menu [b]Project > Project Settings > Input Map[/b] or in "
+"code with [method add_action] and [method action_add_event]. See [method "
+"Node._input]."
+msgstr ""
+
+#: doc/classes/InputMap.xml:10
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/inputs/inputevent.html#inputmap"
+msgstr ""
+
+#: doc/classes/InputMap.xml:18
+msgid ""
+"Adds an [InputEvent] to an action. This [InputEvent] will trigger the action."
+msgstr ""
+
+#: doc/classes/InputMap.xml:26
+msgid "Removes an [InputEvent] from an action."
+msgstr ""
+
+#: doc/classes/InputMap.xml:33
+msgid "Removes all events from an action."
+msgstr ""
+
+#: doc/classes/InputMap.xml:40
+msgid "Returns a deadzone value for the action."
+msgstr ""
+
+#: doc/classes/InputMap.xml:48
+msgid ""
+"Returns [code]true[/code] if the action has the given [InputEvent] "
+"associated with it."
+msgstr ""
+
+#: doc/classes/InputMap.xml:56
+msgid "Sets a deadzone value for the action."
+msgstr ""
+
+#: doc/classes/InputMap.xml:64
+msgid ""
+"Adds an empty action to the [InputMap] with a configurable [code]deadzone[/"
+"code].\n"
+"An [InputEvent] can then be added to this action with [method "
+"action_add_event]."
+msgstr ""
+
+#: doc/classes/InputMap.xml:72
+msgid "Removes an action from the [InputMap]."
+msgstr ""
+
+#: doc/classes/InputMap.xml:81
+msgid ""
+"Returns [code]true[/code] if the given event is part of an existing action. "
+"This method ignores keyboard modifiers if the given [InputEvent] is not "
+"pressed (for proper release detection). See [method action_has_event] if you "
+"don't want this behavior.\n"
+"If [code]exact_match[/code] is [code]false[/code], it ignores the input "
+"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
+"direction for [InputEventJoypadMotion] events."
+msgstr ""
+
+#: doc/classes/InputMap.xml:89
+msgid "Returns an array of [InputEvent]s associated with a given action."
+msgstr ""
+
+#: doc/classes/InputMap.xml:95
+msgid "Returns an array of all actions in the [InputMap]."
+msgstr ""
+
+#: doc/classes/InputMap.xml:102
+msgid ""
+"Returns [code]true[/code] if the [InputMap] has a registered action with the "
+"given name."
+msgstr ""
+
+#: doc/classes/InputMap.xml:108
+msgid ""
+"Clears all [InputEventAction] in the [InputMap] and load it anew from "
+"[ProjectSettings]."
+msgstr ""
+
+#: doc/classes/InstancePlaceholder.xml:4
+msgid "Placeholder for the root [Node] of a [PackedScene]."
+msgstr ""
+
+#: doc/classes/InstancePlaceholder.xml:7
+msgid ""
+"Turning on the option [b]Load As Placeholder[/b] for an instanced scene in "
+"the editor causes it to be replaced by an InstancePlaceholder when running "
+"the game. This makes it possible to delay actually loading the scene until "
+"calling [method replace_by_instance]. This is useful to avoid loading large "
+"scenes all at once by loading parts of it selectively.\n"
+"The InstancePlaceholder does not have a transform. This causes any child "
+"nodes to be positioned relatively to the Viewport from point (0,0), rather "
+"than their parent as displayed in the editor. Replacing the placeholder with "
+"a scene with a transform will transform children relatively to their parent "
+"again."
+msgstr ""
+
+#: doc/classes/InstancePlaceholder.xml:18
+msgid ""
+"Not thread-safe. Use [method Object.call_deferred] if calling from a thread."
+msgstr ""
+
+#: doc/classes/InstancePlaceholder.xml:24
+msgid ""
+"Gets the path to the [PackedScene] resource file that is loaded by default "
+"when calling [method replace_by_instance]. Not thread-safe. Use [method "
+"Object.call_deferred] if calling from a thread."
+msgstr ""
+
+#: doc/classes/InstancePlaceholder.xml:37
+msgid ""
+"Replaces this placeholder by the scene handed as an argument, or the "
+"original scene if no argument is given. As for all resources, the scene is "
+"loaded only if it's not loaded already. By manually loading the scene "
+"beforehand, delays caused by this function can be avoided."
+msgstr ""
+
+#: doc/classes/int.xml:4
+msgid "Integer built-in type."
+msgstr ""
+
+#: doc/classes/int.xml:7
+msgid ""
+"Signed 64-bit integer type.\n"
+"It can take values in the interval [code][-2^63, 2^63 - 1][/code], i.e. "
+"[code][-9223372036854775808, 9223372036854775807][/code]. Exceeding those "
+"bounds will wrap around.\n"
+"[int] is a [Variant] type, and will thus be used when assigning an integer "
+"value to a [Variant]. It can also be enforced with the [code]: int[/code] "
+"type hint.\n"
+"[codeblock]\n"
+"var my_variant = 0 # int, value 0.\n"
+"my_variant += 4.2 # float, value 4.2.\n"
+"var my_int: int = 1 # int, value 1.\n"
+"my_int = 4.2 # int, value 4, the right value is implicitly cast to int.\n"
+"my_int = int(\"6.7\") # int, value 6, the String is explicitly cast with "
+"int.\n"
+"\n"
+"var max_int = 9223372036854775807\n"
+"print(max_int) # 9223372036854775807, OK.\n"
+"max_int += 1\n"
+"print(max_int) # -9223372036854775808, we overflowed and wrapped around.\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/int.xml:30
+msgid ""
+"Cast a [bool] value to an integer value, [code]int(true)[/code] will be "
+"equals to 1 and [code]int(false)[/code] will be equals to 0."
+msgstr ""
+
+#: doc/classes/int.xml:37
+msgid ""
+"Cast a float value to an integer value, this method simply removes the "
+"number fractions (i.e. rounds [code]from[/code] towards zero), so for "
+"example [code]int(2.7)[/code] will be equals to 2, [code]int(0.1)[/code] "
+"will be equals to 0 and [code]int(-2.7)[/code] will be equals to -2. This "
+"operation is also called truncation."
+msgstr ""
+
+#: doc/classes/int.xml:44
+msgid ""
+"Cast a [String] value to an integer value, this method is an integer parser "
+"from a string, so calling this method with an invalid integer string will "
+"return 0, a valid string will be something like [code]'1.7'[/code]. This "
+"method will ignore all non-number characters, so calling [code]int('1e3')[/"
+"code] will return 13."
+msgstr ""
+
+#: doc/classes/InterpolatedCamera.xml:4
+msgid "[i]Deprecated.[/i] Camera which moves toward another node."
+msgstr ""
+
+#: doc/classes/InterpolatedCamera.xml:7
+msgid ""
+"[i]Deprecated (will be removed in Godot 4.0).[/i] InterpolatedCamera is a "
+"[Camera] which smoothly moves to match a target node's position and "
+"rotation.\n"
+"If it is not [member enabled] or does not have a valid target set, "
+"InterpolatedCamera acts like a normal Camera."
+msgstr ""
+
+#: doc/classes/InterpolatedCamera.xml:17
+msgid "Sets the node to move toward and orient with."
+msgstr ""
+
+#: doc/classes/InterpolatedCamera.xml:23
+msgid ""
+"If [code]true[/code], and a target is set, the camera will move "
+"automatically."
+msgstr ""
+
+#: doc/classes/InterpolatedCamera.xml:26
+msgid ""
+"How quickly the camera moves toward its target. Higher values will result in "
+"tighter camera motion."
+msgstr ""
+
+#: doc/classes/InterpolatedCamera.xml:29
+msgid "The target's [NodePath]."
+msgstr ""
+
+#: doc/classes/IP.xml:4
+msgid "Internet protocol (IP) support functions such as DNS resolution."
+msgstr ""
+
+#: doc/classes/IP.xml:7
+msgid ""
+"IP contains support functions for the Internet Protocol (IP). TCP/IP support "
+"is in different classes (see [StreamPeerTCP] and [TCP_Server]). IP provides "
+"DNS hostname resolution support, both blocking and threaded."
+msgstr ""
+
+#: doc/classes/IP.xml:16
+msgid ""
+"Removes all of a [code]hostname[/code]'s cached references. If no "
+"[code]hostname[/code] is given, all cached IP addresses are removed."
+msgstr ""
+
+#: doc/classes/IP.xml:23
+msgid ""
+"Removes a given item [code]id[/code] from the queue. This should be used to "
+"free a queue after it has completed to enable more queries to happen."
+msgstr ""
+
+#: doc/classes/IP.xml:29
+msgid "Returns all the user's current IPv4 and IPv6 addresses as an array."
+msgstr ""
+
+#: doc/classes/IP.xml:35
+msgid ""
+"Returns all network adapters as an array.\n"
+"Each adapter is a dictionary of the form:\n"
+"[codeblock]\n"
+"{\n"
+" \"index\": \"1\", # Interface index.\n"
+" \"name\": \"eth0\", # Interface name.\n"
+" \"friendly\": \"Ethernet One\", # A friendly name (might be empty).\n"
+" \"addresses\": [\"192.168.1.101\"], # An array of IP addresses "
+"associated to this interface.\n"
+"}\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/IP.xml:51
+msgid ""
+"Returns a queued hostname's IP address, given its queue [code]id[/code]. "
+"Returns an empty string on error or if resolution hasn't happened yet (see "
+"[method get_resolve_item_status])."
+msgstr ""
+
+#: doc/classes/IP.xml:58
+msgid ""
+"Return resolved addresses, or an empty array if an error happened or "
+"resolution didn't happen yet (see [method get_resolve_item_status])."
+msgstr ""
+
+#: doc/classes/IP.xml:65
+msgid ""
+"Returns a queued hostname's status as a [enum ResolverStatus] constant, "
+"given its queue [code]id[/code]."
+msgstr ""
+
+#: doc/classes/IP.xml:73
+msgid ""
+"Returns a given hostname's IPv4 or IPv6 address when resolved (blocking-type "
+"method). The address type returned depends on the [enum Type] constant given "
+"as [code]ip_type[/code]."
+msgstr ""
+
+#: doc/classes/IP.xml:81
+msgid ""
+"Resolves a given hostname in a blocking way. Addresses are returned as an "
+"[Array] of IPv4 or IPv6 depending on [code]ip_type[/code]."
+msgstr ""
+
+#: doc/classes/IP.xml:89
+msgid ""
+"Creates a queue item to resolve a hostname to an IPv4 or IPv6 address "
+"depending on the [enum Type] constant given as [code]ip_type[/code]. Returns "
+"the queue ID if successful, or [constant RESOLVER_INVALID_ID] on error."
+msgstr ""
+
+#: doc/classes/IP.xml:95
+msgid "DNS hostname resolver status: No status."
+msgstr ""
+
+#: doc/classes/IP.xml:98
+msgid "DNS hostname resolver status: Waiting."
+msgstr ""
+
+#: doc/classes/IP.xml:101
+msgid "DNS hostname resolver status: Done."
+msgstr ""
+
+#: doc/classes/IP.xml:104
+msgid "DNS hostname resolver status: Error."
+msgstr ""
+
+#: doc/classes/IP.xml:107
+msgid ""
+"Maximum number of concurrent DNS resolver queries allowed, [constant "
+"RESOLVER_INVALID_ID] is returned if exceeded."
+msgstr ""
+
+#: doc/classes/IP.xml:110
+msgid ""
+"Invalid ID constant. Returned if [constant RESOLVER_MAX_QUERIES] is exceeded."
+msgstr ""
+
+#: doc/classes/IP.xml:113
+msgid "Address type: None."
+msgstr ""
+
+#: doc/classes/IP.xml:116
+msgid "Address type: Internet protocol version 4 (IPv4)."
+msgstr ""
+
+#: doc/classes/IP.xml:119
+msgid "Address type: Internet protocol version 6 (IPv6)."
+msgstr ""
+
+#: doc/classes/IP.xml:122
+msgid "Address type: Any."
+msgstr ""
+
+#: doc/classes/ItemList.xml:4
+msgid ""
+"Control that provides a list of selectable items (and/or icons) in a single "
+"column, or optionally in multiple columns."
+msgstr ""
+
+#: doc/classes/ItemList.xml:7
+msgid ""
+"This control provides a selectable list of items that may be in a single (or "
+"multiple columns) with option of text, icons, or both text and icon. "
+"Tooltips are supported and may be different for every item in the list.\n"
+"Selectable items in the list may be selected or deselected and multiple "
+"selection may be enabled. Selection with right mouse button may also be "
+"enabled to allow use of popup context menus. Items may also be \"activated\" "
+"by double-clicking them or by pressing Enter.\n"
+"Item text only supports single-line strings, newline characters (e.g. "
+"[code]\\n[/code]) in the string won't produce a newline. Text wrapping is "
+"enabled in [constant ICON_MODE_TOP] mode, but column's width is adjusted to "
+"fully fit its content by default. You need to set [member "
+"fixed_column_width] greater than zero to wrap the text."
+msgstr ""
+
+#: doc/classes/ItemList.xml:19
+msgid "Adds an item to the item list with no text, only an icon."
+msgstr ""
+
+#: doc/classes/ItemList.xml:28
+msgid ""
+"Adds an item to the item list with specified text. Specify an [code]icon[/"
+"code], or use [code]null[/code] as the [code]icon[/code] for a list item "
+"with no icon.\n"
+"If selectable is [code]true[/code], the list item will be selectable."
+msgstr ""
+
+#: doc/classes/ItemList.xml:35
+msgid "Removes all items from the list."
+msgstr ""
+
+#: doc/classes/ItemList.xml:41
+msgid ""
+"Ensure current selection is visible, adjusting the scroll position as "
+"necessary."
+msgstr ""
+
+#: doc/classes/ItemList.xml:49
+msgid ""
+"Returns the item index at the given [code]position[/code].\n"
+"When there is no item at that point, -1 will be returned if [code]exact[/"
+"code] is [code]true[/code], and the closest item index will be returned "
+"otherwise."
+msgstr ""
+
+#: doc/classes/ItemList.xml:56
+msgid "Returns the number of items currently in the list."
+msgstr ""
+
+#: doc/classes/ItemList.xml:63
+msgid ""
+"Returns the custom background color of the item specified by [code]idx[/"
+"code] index."
+msgstr ""
+
+#: doc/classes/ItemList.xml:70
+msgid ""
+"Returns the custom foreground color of the item specified by [code]idx[/"
+"code] index."
+msgstr ""
+
+#: doc/classes/ItemList.xml:77
+msgid "Returns the icon associated with the specified index."
+msgstr ""
+
+#: doc/classes/ItemList.xml:84
+msgid "Returns a [Color] modulating item's icon at the specified index."
+msgstr ""
+
+#: doc/classes/ItemList.xml:91
+msgid ""
+"Returns the region of item's icon used. The whole icon will be used if the "
+"region has no area."
+msgstr ""
+
+#: doc/classes/ItemList.xml:98
+msgid "Returns the metadata value of the specified index."
+msgstr ""
+
+#: doc/classes/ItemList.xml:105
+msgid "Returns the text associated with the specified index."
+msgstr ""
+
+#: doc/classes/ItemList.xml:112
+msgid "Returns the tooltip hint associated with the specified index."
+msgstr ""
+
+#: doc/classes/ItemList.xml:118
+msgid "Returns an array with the indexes of the selected items."
+msgstr ""
+
+#: doc/classes/ItemList.xml:124
+msgid ""
+"Returns the [Object] ID associated with the list.\n"
+"[b]Warning:[/b] This is a required internal node, removing and freeing it "
+"may cause a crash. If you wish to hide it or any of its children, use their "
+"[member CanvasItem.visible] property."
+msgstr ""
+
+#: doc/classes/ItemList.xml:131
+msgid "Returns [code]true[/code] if one or more items are selected."
+msgstr ""
+
+#: doc/classes/ItemList.xml:138
+msgid ""
+"Returns [code]true[/code] if the item at the specified index is disabled."
+msgstr ""
+
+#: doc/classes/ItemList.xml:145
+msgid ""
+"Returns [code]true[/code] if the item icon will be drawn transposed, i.e. "
+"the X and Y axes are swapped."
+msgstr ""
+
+#: doc/classes/ItemList.xml:152
+msgid ""
+"Returns [code]true[/code] if the item at the specified index is selectable."
+msgstr ""
+
+#: doc/classes/ItemList.xml:159
+msgid ""
+"Returns [code]true[/code] if the tooltip is enabled for specified item index."
+msgstr ""
+
+#: doc/classes/ItemList.xml:166
+msgid ""
+"Returns [code]true[/code] if the item at the specified index is currently "
+"selected."
+msgstr ""
+
+#: doc/classes/ItemList.xml:174
+msgid "Moves item from index [code]from_idx[/code] to [code]to_idx[/code]."
+msgstr ""
+
+#: doc/classes/ItemList.xml:181
+msgid "Removes the item specified by [code]idx[/code] index from the list."
+msgstr ""
+
+#: doc/classes/ItemList.xml:189
+msgid ""
+"Select the item at the specified index.\n"
+"[b]Note:[/b] This method does not trigger the item selection signal."
+msgstr ""
+
+#: doc/classes/ItemList.xml:198
+msgid ""
+"Sets the background color of the item specified by [code]idx[/code] index to "
+"the specified [Color]."
+msgstr ""
+
+#: doc/classes/ItemList.xml:206
+msgid ""
+"Sets the foreground color of the item specified by [code]idx[/code] index to "
+"the specified [Color]."
+msgstr ""
+
+#: doc/classes/ItemList.xml:214
+msgid ""
+"Disables (or enables) the item at the specified index.\n"
+"Disabled items cannot be selected and do not trigger activation signals "
+"(when double-clicking or pressing Enter)."
+msgstr ""
+
+#: doc/classes/ItemList.xml:223
+msgid ""
+"Sets (or replaces) the icon's [Texture] associated with the specified index."
+msgstr ""
+
+#: doc/classes/ItemList.xml:231
+msgid ""
+"Sets a modulating [Color] of the item associated with the specified index."
+msgstr ""
+
+#: doc/classes/ItemList.xml:239
+msgid ""
+"Sets the region of item's icon used. The whole icon will be used if the "
+"region has no area."
+msgstr ""
+
+#: doc/classes/ItemList.xml:247
+msgid "Sets whether the item icon will be drawn transposed."
+msgstr ""
+
+#: doc/classes/ItemList.xml:255
+msgid ""
+"Sets a value (of any type) to be stored with the item associated with the "
+"specified index."
+msgstr ""
+
+#: doc/classes/ItemList.xml:263
+msgid ""
+"Allows or disallows selection of the item associated with the specified "
+"index."
+msgstr ""
+
+#: doc/classes/ItemList.xml:271
+msgid "Sets text of the item associated with the specified index."
+msgstr ""
+
+#: doc/classes/ItemList.xml:279
+msgid "Sets the tooltip hint for the item associated with the specified index."
+msgstr ""
+
+#: doc/classes/ItemList.xml:287
+msgid "Sets whether the tooltip hint is enabled for specified item index."
+msgstr ""
+
+#: doc/classes/ItemList.xml:293
+msgid "Sorts items in the list by their text."
+msgstr ""
+
+#: doc/classes/ItemList.xml:300
+msgid "Ensures the item associated with the specified index is not selected."
+msgstr ""
+
+#: doc/classes/ItemList.xml:306
+msgid "Ensures there are no items selected."
+msgstr ""
+
+#: doc/classes/ItemList.xml:312
+msgid ""
+"If [code]true[/code], the currently selected item can be selected again."
+msgstr ""
+
+#: doc/classes/ItemList.xml:315
+msgid "If [code]true[/code], right mouse button click can select items."
+msgstr ""
+
+#: doc/classes/ItemList.xml:318
+msgid ""
+"If [code]true[/code], the control will automatically resize the height to "
+"fit its content."
+msgstr ""
+
+#: doc/classes/ItemList.xml:321
+msgid ""
+"The width all columns will be adjusted to.\n"
+"A value of zero disables the adjustment, each item will have a width equal "
+"to the width of its content and the columns will have an uneven width."
+msgstr ""
+
+#: doc/classes/ItemList.xml:325
+msgid ""
+"The size all icons will be adjusted to.\n"
+"If either X or Y component is not greater than zero, icon size won't be "
+"affected."
+msgstr ""
+
+#: doc/classes/ItemList.xml:330
+msgid ""
+"The icon position, whether above or to the left of the text. See the [enum "
+"IconMode] constants."
+msgstr ""
+
+#: doc/classes/ItemList.xml:333
+msgid ""
+"The scale of icon applied after [member fixed_icon_size] and transposing "
+"takes effect."
+msgstr ""
+
+#: doc/classes/ItemList.xml:336
+msgid ""
+"Maximum columns the list will have.\n"
+"If greater than zero, the content will be split among the specified "
+"columns.\n"
+"A value of zero means unlimited columns, i.e. all items will be put in the "
+"same row."
+msgstr ""
+
+#: doc/classes/ItemList.xml:341
+msgid ""
+"Maximum lines of text allowed in each item. Space will be reserved even when "
+"there is not enough lines of text to display.\n"
+"[b]Note:[/b] This property takes effect only when [member icon_mode] is "
+"[constant ICON_MODE_TOP]. To make the text wrap, [member fixed_column_width] "
+"should be greater than zero."
+msgstr ""
+
+#: doc/classes/ItemList.xml:346
+msgid ""
+"Whether all columns will have the same width.\n"
+"If [code]true[/code], the width is equal to the largest column width of all "
+"columns."
+msgstr ""
+
+#: doc/classes/ItemList.xml:350
+msgid ""
+"Allows single or multiple item selection. See the [enum SelectMode] "
+"constants."
+msgstr ""
+
+#: doc/classes/ItemList.xml:357
+msgid ""
+"Triggered when specified list item is activated via double-clicking or by "
+"pressing Enter."
+msgstr ""
+
+#: doc/classes/ItemList.xml:364
+msgid ""
+"Triggered when specified list item has been selected via right mouse "
+"clicking.\n"
+"The click position is also provided to allow appropriate popup of context "
+"menus at the correct location.\n"
+"[member allow_rmb_select] must be enabled."
+msgstr ""
+
+#: doc/classes/ItemList.xml:372
+msgid ""
+"Triggered when specified item has been selected.\n"
+"[member allow_reselect] must be enabled to reselect an item."
+msgstr ""
+
+#: doc/classes/ItemList.xml:380
+msgid ""
+"Triggered when a multiple selection is altered on a list allowing multiple "
+"selection."
+msgstr ""
+
+#: doc/classes/ItemList.xml:385
+msgid ""
+"Triggered when a left mouse click is issued within the rect of the list but "
+"on empty space."
+msgstr ""
+
+#: doc/classes/ItemList.xml:391
+msgid ""
+"Triggered when a right mouse click is issued within the rect of the list but "
+"on empty space.\n"
+"[member allow_rmb_select] must be enabled."
+msgstr ""
+
+#: doc/classes/ItemList.xml:398
+msgid "Icon is drawn above the text."
+msgstr ""
+
+#: doc/classes/ItemList.xml:401
+msgid "Icon is drawn to the left of the text."
+msgstr ""
+
+#: doc/classes/ItemList.xml:404
+msgid "Only allow selecting a single item."
+msgstr ""
+
+#: doc/classes/ItemList.xml:407
+msgid "Allows selecting multiple items by holding Ctrl or Shift."
+msgstr ""
+
+#: doc/classes/ItemList.xml:412
+msgid ""
+"Default [StyleBox] for the [ItemList], i.e. used when the control is not "
+"being focused."
+msgstr ""
+
+#: doc/classes/ItemList.xml:415
+msgid "[StyleBox] used when the [ItemList] is being focused."
+msgstr ""
+
+#: doc/classes/ItemList.xml:418
+msgid "[StyleBox] used for the cursor, when the [ItemList] is being focused."
+msgstr ""
+
+#: doc/classes/ItemList.xml:421
+msgid ""
+"[StyleBox] used for the cursor, when the [ItemList] is not being focused."
+msgstr ""
+
+#: doc/classes/ItemList.xml:424 doc/classes/Tree.xml:407
+msgid "[Font] of the item's text."
+msgstr ""
+
+#: doc/classes/ItemList.xml:427 doc/classes/Tree.xml:410
+msgid "Default text [Color] of the item."
+msgstr ""
+
+#: doc/classes/ItemList.xml:430 doc/classes/Tree.xml:413
+msgid "Text [Color] used when the item is selected."
+msgstr ""
+
+#: doc/classes/ItemList.xml:433
+msgid ""
+"[Color] of the guideline. The guideline is a line drawn between each row of "
+"items."
+msgstr ""
+
+#: doc/classes/ItemList.xml:436
+msgid "The horizontal spacing between items."
+msgstr ""
+
+#: doc/classes/ItemList.xml:439
+msgid "The spacing between item's icon and text."
+msgstr ""
+
+#: doc/classes/ItemList.xml:442
+msgid "The vertical spacing between each line of text."
+msgstr ""
+
+#: doc/classes/ItemList.xml:445
+msgid ""
+"[StyleBox] for the selected items, used when the [ItemList] is not being "
+"focused."
+msgstr ""
+
+#: doc/classes/ItemList.xml:448
+msgid ""
+"[StyleBox] for the selected items, used when the [ItemList] is being focused."
+msgstr ""
+
+#: doc/classes/ItemList.xml:451
+msgid "The vertical spacing between items."
+msgstr ""
+
+#: doc/classes/JavaScript.xml:4
+msgid ""
+"Singleton that connects the engine with the browser's JavaScript context in "
+"HTML5 export."
+msgstr ""
+
+#: doc/classes/JavaScript.xml:7
+msgid ""
+"The JavaScript singleton is implemented only in the HTML5 export. It's used "
+"to access the browser's JavaScript context. This allows interaction with "
+"embedding pages or calling third-party JavaScript APIs.\n"
+"[b]Note:[/b] This singleton can be disabled at build-time to improve "
+"security. By default, the JavaScript singleton is enabled. Official export "
+"templates also have the JavaScript singleton enabled. See [url=https://docs."
+"godotengine.org/en/3.4/development/compiling/compiling_for_web."
+"html]Compiling for the Web[/url] in the documentation for more information."
+msgstr ""
+
+#: doc/classes/JavaScript.xml:11
+msgid ""
+"https://docs.godotengine.org/en/3.4/getting_started/workflow/export/"
+"exporting_for_web.html#calling-javascript-from-script"
+msgstr ""
+
+#: doc/classes/JavaScript.xml:19
+msgid ""
+"Creates a reference to a script function that can be used as a callback by "
+"JavaScript. The reference must be kept until the callback happens, or it "
+"won't be called at all. See [JavaScriptObject] for usage."
+msgstr ""
+
+#: doc/classes/JavaScript.xml:26
+msgid ""
+"Creates a new JavaScript object using the [code]new[/code] constructor. The "
+"[code]object[/code] must a valid property of the JavaScript [code]window[/"
+"code]. See [JavaScriptObject] for usage."
+msgstr ""
+
+#: doc/classes/JavaScript.xml:35
+msgid ""
+"Prompts the user to download a file containing the specified [code]buffer[/"
+"code]. The file will have the given [code]name[/code] and [code]mime[/code] "
+"type.\n"
+"[b]Note:[/b] The browser may override the [url=https://en.wikipedia.org/wiki/"
+"Media_type]MIME type[/url] provided based on the file [code]name[/code]'s "
+"extension.\n"
+"[b]Note:[/b] Browsers might block the download if [method download_buffer] "
+"is not being called from a user interaction (e.g. button click).\n"
+"[b]Note:[/b] Browsers might ask the user for permission or block the "
+"download if multiple download requests are made in a quick succession."
+msgstr ""
+
+#: doc/classes/JavaScript.xml:46
+msgid ""
+"Execute the string [code]code[/code] as JavaScript code within the browser "
+"window. This is a call to the actual global JavaScript function [code]eval()"
+"[/code].\n"
+"If [code]use_global_execution_context[/code] is [code]true[/code], the code "
+"will be evaluated in the global execution context. Otherwise, it is "
+"evaluated in the execution context of a function within the engine's runtime "
+"environment."
+msgstr ""
+
+#: doc/classes/JavaScript.xml:54
+msgid ""
+"Returns an interface to a JavaScript object that can be used by scripts. The "
+"[code]interface[/code] must be a valid property of the JavaScript "
+"[code]window[/code]. The callback must accept a single [Array] argument, "
+"which will contain the JavaScript [code]arguments[/code]. See "
+"[JavaScriptObject] for usage."
+msgstr ""
+
+#: doc/classes/JavaScriptObject.xml:4
+msgid "A wrapper class for native JavaScript objects."
+msgstr ""
+
+#: doc/classes/JavaScriptObject.xml:7
+msgid ""
+"JavaScriptObject is used to interact with JavaScript objects retrieved or "
+"created via [method JavaScript.get_interface], [method JavaScript."
+"create_object], or [method JavaScript.create_callback].\n"
+"Example:\n"
+"[codeblock]\n"
+"extends Node\n"
+"\n"
+"var _my_js_callback = JavaScript.create_callback(self, \"myCallback\") # "
+"This reference must be kept\n"
+"var console = JavaScript.get_interface(\"console\")\n"
+"\n"
+"func _init():\n"
+" var buf = JavaScript.create_object(\"ArrayBuffer\", 10) # new "
+"ArrayBuffer(10)\n"
+" print(buf) # prints [JavaScriptObject:OBJECT_ID]\n"
+" var uint8arr = JavaScript.create_object(\"Uint8Array\", buf) # new "
+"Uint8Array(buf)\n"
+" uint8arr[1] = 255\n"
+" prints(uint8arr[1], uint8arr.byteLength) # prints 255 10\n"
+" console.log(uint8arr) # prints in browser console \"Uint8Array(10) [ 0, "
+"255, 0, 0, 0, 0, 0, 0, 0, 0 ]\"\n"
+"\n"
+" # Equivalent of JavaScript: Array.from(uint8arr).forEach(myCallback)\n"
+" JavaScript.get_interface(\"Array\").from(uint8arr)."
+"forEach(_my_js_callback)\n"
+"\n"
+"func myCallback(args):\n"
+" # Will be called with the parameters passed to the \"forEach\" callback\n"
+" # [0, 0, [JavaScriptObject:1173]]\n"
+" # [255, 1, [JavaScriptObject:1173]]\n"
+" # ...\n"
+" # [0, 9, [JavaScriptObject:1180]]\n"
+" print(args)\n"
+"[/codeblock]\n"
+"[b]Note:[/b] Only available in the HTML5 platform."
+msgstr ""
+
+#: doc/classes/JNISingleton.xml:4
+msgid ""
+"Singleton that connects the engine with Android plugins to interface with "
+"native Android code."
+msgstr ""
+
+#: doc/classes/JNISingleton.xml:7
+msgid ""
+"The JNISingleton is implemented only in the Android export. It's used to "
+"call methods and connect signals from an Android plugin written in Java or "
+"Kotlin. Methods and signals can be called and connected to the JNISingleton "
+"as if it is a Node. See [url=https://en.wikipedia.org/wiki/"
+"Java_Native_Interface]Java Native Interface - Wikipedia[/url] for more "
+"information."
+msgstr ""
+
+#: doc/classes/JNISingleton.xml:10
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/plugins/android/android_plugin."
+"html"
+msgstr ""
+
+#: doc/classes/Joint.xml:4
+msgid "Base class for all 3D joints."
+msgstr ""
+
+#: doc/classes/Joint.xml:7
+msgid ""
+"Joints are used to bind together two physics bodies. They have a solver "
+"priority and can define if the bodies of the two attached nodes should be "
+"able to collide with each other."
+msgstr ""
+
+#: doc/classes/Joint.xml:10 doc/classes/RigidBody.xml:15
+#: doc/classes/VehicleBody.xml:12 doc/classes/VehicleWheel.xml:11
+msgid "https://godotengine.org/asset-library/asset/524"
+msgstr ""
+
+#: doc/classes/Joint.xml:16
+msgid ""
+"If [code]true[/code], the two bodies of the nodes are not able to collide "
+"with each other."
+msgstr ""
+
+#: doc/classes/Joint.xml:19
+msgid "The node attached to the first side (A) of the joint."
+msgstr ""
+
+#: doc/classes/Joint.xml:22
+msgid "The node attached to the second side (B) of the joint."
+msgstr ""
+
+#: doc/classes/Joint.xml:25
+msgid ""
+"The priority used to define which solver is executed first for multiple "
+"joints. The lower the value, the higher the priority."
+msgstr ""
+
+#: doc/classes/Joint2D.xml:4
+msgid "Base node for all joint constraints in 2D physics."
+msgstr ""
+
+#: doc/classes/Joint2D.xml:7
+msgid ""
+"Base node for all joint constraints in 2D physics. Joints take 2 bodies and "
+"apply a custom constraint."
+msgstr ""
+
+#: doc/classes/Joint2D.xml:15
+msgid ""
+"When [member node_a] and [member node_b] move in different directions the "
+"[code]bias[/code] controls how fast the joint pulls them back to their "
+"original position. The lower the [code]bias[/code] the more the two bodies "
+"can pull on the joint."
+msgstr ""
+
+#: doc/classes/Joint2D.xml:18
+msgid ""
+"If [code]true[/code], [member node_a] and [member node_b] can not collide."
+msgstr ""
+
+#: doc/classes/Joint2D.xml:21
+msgid "The first body attached to the joint. Must derive from [PhysicsBody2D]."
+msgstr ""
+
+#: doc/classes/Joint2D.xml:24
+msgid ""
+"The second body attached to the joint. Must derive from [PhysicsBody2D]."
+msgstr ""
+
+#: doc/classes/JSON.xml:4
+msgid "Helper class for parsing JSON data."
+msgstr ""
+
+#: doc/classes/JSON.xml:7
+msgid ""
+"Helper class for parsing JSON data. For usage example and other important "
+"hints, see [JSONParseResult]."
+msgstr ""
+
+#: doc/classes/JSON.xml:16
+msgid ""
+"Parses a JSON-encoded string and returns a [JSONParseResult] containing the "
+"result."
+msgstr ""
+
+#: doc/classes/JSON.xml:25
+msgid ""
+"Converts a [Variant] var to JSON text and returns the result. Useful for "
+"serializing data to store or send over the network.\n"
+"[b]Note:[/b] The JSON specification does not define integer or float types, "
+"but only a [i]number[/i] type. Therefore, converting a Variant to JSON text "
+"will convert all numerical values to [float] types.\n"
+"Use [code]indent[/code] parameter to pretty print the output.\n"
+"[b]Example output:[/b]\n"
+"[codeblock]\n"
+"## JSON.print(my_dictionary)\n"
+"{\"name\":\"my_dictionary\",\"version\":\"1.0.0\",\"entities\":[{\"name\":"
+"\"entity_0\",\"value\":\"value_0\"},{\"name\":\"entity_1\",\"value\":"
+"\"value_1\"}]}\n"
+"\n"
+"## JSON.print(my_dictionary, \"\\t\")\n"
+"{\n"
+" \"name\": \"my_dictionary\",\n"
+" \"version\": \"1.0.0\",\n"
+" \"entities\": [\n"
+" {\n"
+" \"name\": \"entity_0\",\n"
+" \"value\": \"value_0\"\n"
+" },\n"
+" {\n"
+" \"name\": \"entity_1\",\n"
+" \"value\": \"value_1\"\n"
+" }\n"
+" ]\n"
+"}\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/JSONParseResult.xml:4
+msgid "Data class wrapper for decoded JSON."
+msgstr ""
+
+#: doc/classes/JSONParseResult.xml:7
+msgid ""
+"Returned by [method JSON.parse], [JSONParseResult] contains the decoded JSON "
+"or error information if the JSON source wasn't successfully parsed. You can "
+"check if the JSON source was successfully parsed with [code]if json_result."
+"error == OK[/code]."
+msgstr ""
+
+#: doc/classes/JSONParseResult.xml:15
+msgid ""
+"The error type if the JSON source was not successfully parsed. See the [enum "
+"Error] constants."
+msgstr ""
+
+#: doc/classes/JSONParseResult.xml:18
+msgid ""
+"The line number where the error occurred if the JSON source was not "
+"successfully parsed."
+msgstr ""
+
+#: doc/classes/JSONParseResult.xml:21
+msgid ""
+"The error message if the JSON source was not successfully parsed. See the "
+"[enum Error] constants."
+msgstr ""
+
+#: doc/classes/JSONParseResult.xml:24
+msgid ""
+"A [Variant] containing the parsed JSON. Use [method @GDScript.typeof] or the "
+"[code]is[/code] keyword to check if it is what you expect. For example, if "
+"the JSON source starts with curly braces ([code]{}[/code]), a [Dictionary] "
+"will be returned. If the JSON source starts with brackets ([code][][/code]), "
+"an [Array] will be returned.\n"
+"[b]Note:[/b] The JSON specification does not define integer or float types, "
+"but only a [i]number[/i] type. Therefore, parsing a JSON text will convert "
+"all numerical values to [float] types.\n"
+"[b]Note:[/b] JSON objects do not preserve key order like Godot dictionaries, "
+"thus, you should not rely on keys being in a certain order if a dictionary "
+"is constructed from JSON. In contrast, JSON arrays retain the order of their "
+"elements:\n"
+"[codeblock]\n"
+"var p = JSON.parse('[\"hello\", \"world\", \"!\"]')\n"
+"if typeof(p.result) == TYPE_ARRAY:\n"
+" print(p.result[0]) # Prints \"hello\"\n"
+"else:\n"
+" push_error(\"Unexpected results.\")\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/JSONRPC.xml:4
+msgid "A helper to handle dictionaries which look like JSONRPC documents."
+msgstr ""
+
+#: doc/classes/JSONRPC.xml:7
+msgid ""
+"[url=https://www.jsonrpc.org/]JSON-RPC[/url] is a standard which wraps a "
+"method call in a [JSON] object. The object has a particular structure and "
+"identifies which method is called, the parameters to that function, and "
+"carries an ID to keep track of responses. This class implements that "
+"standard on top of [Dictionary]; you will have to convert between a "
+"[Dictionary] and [JSON] with other functions."
+msgstr ""
+
+#: doc/classes/JSONRPC.xml:17
+msgid ""
+"Returns a dictionary in the form of a JSON-RPC notification. Notifications "
+"are one-shot messages which do not expect a response.\n"
+"- [code]method[/code]: Name of the method being called.\n"
+"- [code]params[/code]: An array or dictionary of parameters being passed to "
+"the method."
+msgstr ""
+
+#: doc/classes/JSONRPC.xml:28
+msgid ""
+"Returns a dictionary in the form of a JSON-RPC request. Requests are sent to "
+"a server with the expectation of a response. The ID field is used for the "
+"server to specify which exact request it is responding to.\n"
+"- [code]method[/code]: Name of the method being called.\n"
+"- [code]params[/code]: An array or dictionary of parameters being passed to "
+"the method.\n"
+"- [code]id[/code]: Uniquely identifies this request. The server is expected "
+"to send a response with the same ID."
+msgstr ""
+
+#: doc/classes/JSONRPC.xml:39
+msgid ""
+"When a server has received and processed a request, it is expected to send a "
+"response. If you did not want a response then you need to have sent a "
+"Notification instead.\n"
+"- [code]result[/code]: The return value of the function which was called.\n"
+"- [code]id[/code]: The ID of the request this response is targeted to."
+msgstr ""
+
+#: doc/classes/JSONRPC.xml:50
+msgid ""
+"Creates a response which indicates a previous reply has failed in some way.\n"
+"- [code]code[/code]: The error code corresponding to what kind of error this "
+"is. See the [enum ErrorCode] constants.\n"
+"- [code]message[/code]: A custom message about this error.\n"
+"- [code]id[/code]: The request this error is a response to."
+msgstr ""
+
+#: doc/classes/JSONRPC.xml:61
+msgid ""
+"Given a Dictionary which takes the form of a JSON-RPC request: unpack the "
+"request and run it. Methods are resolved by looking at the field called "
+"\"method\" and looking for an equivalently named function in the JSONRPC "
+"object. If one is found that method is called.\n"
+"To add new supported methods extend the JSONRPC class and call [method "
+"process_action] on your subclass.\n"
+"[code]action[/code]: The action to be run, as a Dictionary in the form of a "
+"JSON-RPC request or notification."
+msgstr ""
+
+#: doc/classes/JSONRPC.xml:86
+msgid ""
+"A method call was requested but no function of that name existed in the "
+"JSONRPC subclass."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:4
+msgid "Kinematic body 3D node."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:7
+msgid ""
+"Kinematic bodies are special types of bodies that are meant to be user-"
+"controlled. They are not affected by physics at all; to other types of "
+"bodies, such as a character or a rigid body, these are the same as a static "
+"body. However, they have two main uses:\n"
+"[b]Simulated motion:[/b] When these bodies are moved manually, either from "
+"code or from an [AnimationPlayer] (with [member AnimationPlayer."
+"playback_process_mode] set to \"physics\"), the physics will automatically "
+"compute an estimate of their linear and angular velocity. This makes them "
+"very useful for moving platforms or other AnimationPlayer-controlled objects "
+"(like a door, a bridge that opens, etc).\n"
+"[b]Kinematic characters:[/b] KinematicBody also has an API for moving "
+"objects (the [method move_and_collide] and [method move_and_slide] methods) "
+"while performing collision tests. This makes them really useful to implement "
+"characters that collide against a world, but don't require advanced physics."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:12 doc/classes/KinematicBody2D.xml:12
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/physics/kinematic_character_2d."
+"html"
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:23
+msgid ""
+"Returns [code]true[/code] if the specified [code]axis[/code] is locked. See "
+"also [member move_lock_x], [member move_lock_y] and [member move_lock_z]."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:30
+msgid ""
+"Returns the floor's collision angle at the last collision point according to "
+"[code]up_direction[/code], which is [code]Vector3.UP[/code] by default. This "
+"value is always positive and only valid after calling [method "
+"move_and_slide] and when [method is_on_floor] returns [code]true[/code]."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:36 doc/classes/KinematicBody2D.xml:28
+msgid ""
+"Returns the surface normal of the floor at the last collision point. Only "
+"valid after calling [method move_and_slide] or [method "
+"move_and_slide_with_snap] and when [method is_on_floor] returns [code]true[/"
+"code]."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:42 doc/classes/KinematicBody2D.xml:34
+msgid ""
+"Returns the linear velocity of the floor at the last collision point. Only "
+"valid after calling [method move_and_slide] or [method "
+"move_and_slide_with_snap] and when [method is_on_floor] returns [code]true[/"
+"code]."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:48
+msgid ""
+"Returns a [KinematicCollision], which contains information about the latest "
+"collision that occurred during the last call to [method move_and_slide]."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:55
+msgid ""
+"Returns a [KinematicCollision], which contains information about a collision "
+"that occurred during the last call to [method move_and_slide] or [method "
+"move_and_slide_with_snap]. Since the body can collide several times in a "
+"single call to [method move_and_slide], you must specify the index of the "
+"collision in the range 0 to ([method get_slide_count] - 1)."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:61 doc/classes/KinematicBody2D.xml:59
+msgid ""
+"Returns the number of times the body collided and changed direction during "
+"the last call to [method move_and_slide] or [method "
+"move_and_slide_with_snap]."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:67 doc/classes/KinematicBody2D.xml:65
+msgid ""
+"Returns [code]true[/code] if the body collided with the ceiling on the last "
+"call of [method move_and_slide] or [method move_and_slide_with_snap]. "
+"Otherwise, returns [code]false[/code]."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:73 doc/classes/KinematicBody2D.xml:71
+msgid ""
+"Returns [code]true[/code] if the body collided with the floor on the last "
+"call of [method move_and_slide] or [method move_and_slide_with_snap]. "
+"Otherwise, returns [code]false[/code]."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:79 doc/classes/KinematicBody2D.xml:77
+msgid ""
+"Returns [code]true[/code] if the body collided with a wall on the last call "
+"of [method move_and_slide] or [method move_and_slide_with_snap]. Otherwise, "
+"returns [code]false[/code]."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:89
+msgid ""
+"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
+"it collides. Returns a [KinematicCollision], which contains information "
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
+"If [code]test_only[/code] is [code]true[/code], the body does not move but "
+"the would-be collision information is given."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:102
+msgid ""
+"Moves the body along a vector. If the body collides with another, it will "
+"slide along the other body rather than stop immediately. If the other body "
+"is a [KinematicBody] or [RigidBody], it will also be affected by the motion "
+"of the other body. You can use this to make moving and rotating platforms, "
+"or to make nodes push other nodes.\n"
+"This method should be used in [method Node._physics_process] (or in a method "
+"called by [method Node._physics_process]), as it uses the physics step's "
+"[code]delta[/code] value automatically in calculations. Otherwise, the "
+"simulation will run at an incorrect speed.\n"
+"[code]linear_velocity[/code] is the velocity vector (typically meters per "
+"second). Unlike in [method move_and_collide], you should [i]not[/i] multiply "
+"it by [code]delta[/code] — the physics engine handles applying the "
+"velocity.\n"
+"[code]up_direction[/code] is the up direction, used to determine what is a "
+"wall and what is a floor or a ceiling. If set to the default value of "
+"[code]Vector3(0, 0, 0)[/code], everything is considered a wall.\n"
+"If [code]stop_on_slope[/code] is [code]true[/code], body will not slide on "
+"slopes when you include gravity in [code]linear_velocity[/code] and the body "
+"is standing still.\n"
+"If the body collides, it will change direction a maximum of "
+"[code]max_slides[/code] times before it stops.\n"
+"[code]floor_max_angle[/code] is the maximum angle (in radians) where a slope "
+"is still considered a floor (or a ceiling), rather than a wall. The default "
+"value equals 45 degrees.\n"
+"If [code]infinite_inertia[/code] is [code]true[/code], body will be able to "
+"push [RigidBody] nodes, but it won't also detect any collisions with them. "
+"If [code]false[/code], it will interact with [RigidBody] nodes like with "
+"[StaticBody].\n"
+"Returns the [code]linear_velocity[/code] vector, rotated and/or scaled if a "
+"slide collision occurred. To get detailed information about collisions that "
+"occurred, use [method get_slide_collision].\n"
+"When the body touches a moving platform, the platform's velocity is "
+"automatically added to the body motion. If a collision occurs due to the "
+"platform's motion, it will always be first in the slide collisions."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:124
+msgid ""
+"Moves the body while keeping it attached to slopes. Similar to [method "
+"move_and_slide].\n"
+"As long as the [code]snap[/code] vector is in contact with the ground, the "
+"body will remain attached to the surface. This means you must disable snap "
+"in order to jump, for example. You can do this by setting [code]snap[/code] "
+"to [code](0, 0, 0)[/code] or by using [method move_and_slide] instead."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:133
+msgid ""
+"Locks or unlocks the specified [code]axis[/code] depending on the value of "
+"[code]lock[/code]. See also [member move_lock_x], [member move_lock_y] and "
+"[member move_lock_z]."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:142
+msgid ""
+"Checks for collisions without moving the body. Virtually sets the node's "
+"position, scale and rotation to that of the given [Transform], then tries to "
+"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:149
+msgid "Lock the body's X axis movement."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:152
+msgid "Lock the body's Y axis movement."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:155
+msgid "Lock the body's Z axis movement."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
+msgid ""
+"Extra margin used for collision recovery in motion functions (see [method "
+"move_and_collide], [method move_and_slide], [method "
+"move_and_slide_with_snap]).\n"
+"If the body is at least this close to another body, it will consider them to "
+"be colliding and will be pushed away before performing the actual motion.\n"
+"A higher value means it's more flexible for detecting collision, which helps "
+"with consistently detecting walls and floors.\n"
+"A lower value forces the collision algorithm to use more exact detection, so "
+"it can be used in cases that specifically require precision, e.g at very low "
+"scale to avoid visible jittering, or for stability with a stack of kinematic "
+"bodies."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
+msgid ""
+"If [code]true[/code], the body's movement will be synchronized to the "
+"physics frame. This is useful when animating movement via [AnimationPlayer], "
+"for example on moving platforms. Do [b]not[/b] use together with [method "
+"move_and_slide] or [method move_and_collide] functions."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:167
+msgid ""
+"Lock the body's X axis movement. Deprecated alias for [member "
+"axis_lock_motion_x]."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:170
+msgid ""
+"Lock the body's Y axis movement. Deprecated alias for [member "
+"axis_lock_motion_y]."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:173
+msgid ""
+"Lock the body's Z axis movement. Deprecated alias for [member "
+"axis_lock_motion_z]."
+msgstr ""
+
+#: doc/classes/KinematicBody2D.xml:4
+msgid "Kinematic body 2D node."
+msgstr ""
+
+#: doc/classes/KinematicBody2D.xml:7
+msgid ""
+"Kinematic bodies are special types of bodies that are meant to be user-"
+"controlled. They are not affected by physics at all; to other types of "
+"bodies, such as a character or a rigid body, these are the same as a static "
+"body. However, they have two main uses:\n"
+"[b]Simulated motion:[/b] When these bodies are moved manually, either from "
+"code or from an [AnimationPlayer] (with [member AnimationPlayer."
+"playback_process_mode] set to \"physics\"), the physics will automatically "
+"compute an estimate of their linear and angular velocity. This makes them "
+"very useful for moving platforms or other AnimationPlayer-controlled objects "
+"(like a door, a bridge that opens, etc).\n"
+"[b]Kinematic characters:[/b] KinematicBody2D also has an API for moving "
+"objects (the [method move_and_collide] and [method move_and_slide] methods) "
+"while performing collision tests. This makes them really useful to implement "
+"characters that collide against a world, but don't require advanced physics."
+msgstr ""
+
+#: doc/classes/KinematicBody2D.xml:13
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/physics/"
+"using_kinematic_body_2d.html"
+msgstr ""
+
+#: doc/classes/KinematicBody2D.xml:22
+msgid ""
+"Returns the floor's collision angle at the last collision point according to "
+"[code]up_direction[/code], which is [code]Vector2.UP[/code] by default. This "
+"value is always positive and only valid after calling [method "
+"move_and_slide] and when [method is_on_floor] returns [code]true[/code]."
+msgstr ""
+
+#: doc/classes/KinematicBody2D.xml:40
+msgid ""
+"Returns a [KinematicCollision2D], which contains information about the "
+"latest collision that occurred during the last call to [method "
+"move_and_slide]."
+msgstr ""
+
+#: doc/classes/KinematicBody2D.xml:47
+msgid ""
+"Returns a [KinematicCollision2D], which contains information about a "
+"collision that occurred during the last call to [method move_and_slide] or "
+"[method move_and_slide_with_snap]. Since the body can collide several times "
+"in a single call to [method move_and_slide], you must specify the index of "
+"the collision in the range 0 to ([method get_slide_count] - 1).\n"
+"[b]Example usage:[/b]\n"
+"[codeblock]\n"
+"for i in get_slide_count():\n"
+" var collision = get_slide_collision(i)\n"
+" print(\"Collided with: \", collision.collider.name)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/KinematicBody2D.xml:87
+msgid ""
+"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
+"it collides. Returns a [KinematicCollision2D], which contains information "
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
+"If [code]test_only[/code] is [code]true[/code], the body does not move but "
+"the would-be collision information is given."
+msgstr ""
+
+#: doc/classes/KinematicBody2D.xml:100
+msgid ""
+"Moves the body along a vector. If the body collides with another, it will "
+"slide along the other body rather than stop immediately. If the other body "
+"is a [KinematicBody2D] or [RigidBody2D], it will also be affected by the "
+"motion of the other body. You can use this to make moving and rotating "
+"platforms, or to make nodes push other nodes.\n"
+"This method should be used in [method Node._physics_process] (or in a method "
+"called by [method Node._physics_process]), as it uses the physics step's "
+"[code]delta[/code] value automatically in calculations. Otherwise, the "
+"simulation will run at an incorrect speed.\n"
+"[code]linear_velocity[/code] is the velocity vector in pixels per second. "
+"Unlike in [method move_and_collide], you should [i]not[/i] multiply it by "
+"[code]delta[/code] — the physics engine handles applying the velocity.\n"
+"[code]up_direction[/code] is the up direction, used to determine what is a "
+"wall and what is a floor or a ceiling. If set to the default value of "
+"[code]Vector2(0, 0)[/code], everything is considered a wall. This is useful "
+"for topdown games.\n"
+"If [code]stop_on_slope[/code] is [code]true[/code], body will not slide on "
+"slopes when you include gravity in [code]linear_velocity[/code] and the body "
+"is standing still.\n"
+"If the body collides, it will change direction a maximum of "
+"[code]max_slides[/code] times before it stops.\n"
+"[code]floor_max_angle[/code] is the maximum angle (in radians) where a slope "
+"is still considered a floor (or a ceiling), rather than a wall. The default "
+"value equals 45 degrees.\n"
+"If [code]infinite_inertia[/code] is [code]true[/code], body will be able to "
+"push [RigidBody2D] nodes, but it won't also detect any collisions with them. "
+"If [code]false[/code], it will interact with [RigidBody2D] nodes like with "
+"[StaticBody2D].\n"
+"Returns the [code]linear_velocity[/code] vector, rotated and/or scaled if a "
+"slide collision occurred. To get detailed information about collisions that "
+"occurred, use [method get_slide_collision].\n"
+"When the body touches a moving platform, the platform's velocity is "
+"automatically added to the body motion. If a collision occurs due to the "
+"platform's motion, it will always be first in the slide collisions."
+msgstr ""
+
+#: doc/classes/KinematicBody2D.xml:122
+msgid ""
+"Moves the body while keeping it attached to slopes. Similar to [method "
+"move_and_slide].\n"
+"As long as the [code]snap[/code] vector is in contact with the ground, the "
+"body will remain attached to the surface. This means you must disable snap "
+"in order to jump, for example. You can do this by setting [code]snap[/code] "
+"to [code](0, 0)[/code] or by using [method move_and_slide] instead."
+msgstr ""
+
+#: doc/classes/KinematicBody2D.xml:132
+msgid ""
+"Checks for collisions without moving the body. Virtually sets the node's "
+"position, scale and rotation to that of the given [Transform2D], then tries "
+"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
+msgstr ""
+
+#: doc/classes/KinematicCollision.xml:4
+msgid "Collision data for [KinematicBody] collisions."
+msgstr ""
+
+#: doc/classes/KinematicCollision.xml:7
+msgid ""
+"Contains collision data for [KinematicBody] collisions. When a "
+"[KinematicBody] is moved using [method KinematicBody.move_and_collide], it "
+"stops if it detects a collision with another body. If a collision is "
+"detected, a KinematicCollision object is returned.\n"
+"This object contains information about the collision, including the "
+"colliding object, the remaining motion, and the collision position. This "
+"information can be used to calculate a collision response."
+msgstr ""
+
+#: doc/classes/KinematicCollision.xml:17
+msgid ""
+"The collision angle according to [code]up_direction[/code], which is "
+"[code]Vector3.UP[/code] by default. This value is always positive."
+msgstr ""
+
+#: doc/classes/KinematicCollision.xml:23
+#: doc/classes/KinematicCollision2D.xml:23
+msgid "The colliding body."
+msgstr ""
+
+#: doc/classes/KinematicCollision.xml:26
+#: doc/classes/KinematicCollision2D.xml:26
+msgid ""
+"The colliding body's unique instance ID. See [method Object.get_instance_id]."
+msgstr ""
+
+#: doc/classes/KinematicCollision.xml:29
+#: doc/classes/KinematicCollision2D.xml:29
+msgid "The colliding body's metadata. See [Object]."
+msgstr ""
+
+#: doc/classes/KinematicCollision.xml:32
+msgid "The colliding body's [RID] used by the [PhysicsServer]."
+msgstr ""
+
+#: doc/classes/KinematicCollision.xml:35
+#: doc/classes/KinematicCollision2D.xml:35
+msgid "The colliding body's shape."
+msgstr ""
+
+#: doc/classes/KinematicCollision.xml:38
+msgid "The colliding shape's index. See [CollisionObject]."
+msgstr ""
+
+#: doc/classes/KinematicCollision.xml:41
+#: doc/classes/KinematicCollision2D.xml:41
+msgid "The colliding object's velocity."
+msgstr ""
+
+#: doc/classes/KinematicCollision.xml:44
+#: doc/classes/KinematicCollision2D.xml:44
+msgid "The moving object's colliding shape."
+msgstr ""
+
+#: doc/classes/KinematicCollision.xml:47
+#: doc/classes/KinematicCollision2D.xml:47
+msgid "The colliding body's shape's normal at the point of collision."
+msgstr ""
+
+#: doc/classes/KinematicCollision.xml:50
+#: doc/classes/KinematicCollision2D.xml:50
+msgid "The point of collision, in global coordinates."
+msgstr ""
+
+#: doc/classes/KinematicCollision.xml:53
+#: doc/classes/KinematicCollision2D.xml:53
+msgid "The moving object's remaining movement vector."
+msgstr ""
+
+#: doc/classes/KinematicCollision.xml:56
+#: doc/classes/KinematicCollision2D.xml:56
+msgid "The distance the moving object traveled before collision."
+msgstr ""
+
+#: doc/classes/KinematicCollision2D.xml:4
+msgid "Collision data for [KinematicBody2D] collisions."
+msgstr ""
+
+#: doc/classes/KinematicCollision2D.xml:7
+msgid ""
+"Contains collision data for [KinematicBody2D] collisions. When a "
+"[KinematicBody2D] is moved using [method KinematicBody2D.move_and_collide], "
+"it stops if it detects a collision with another body. If a collision is "
+"detected, a KinematicCollision2D object is returned.\n"
+"This object contains information about the collision, including the "
+"colliding object, the remaining motion, and the collision position. This "
+"information can be used to calculate a collision response."
+msgstr ""
+
+#: doc/classes/KinematicCollision2D.xml:17
+msgid ""
+"The collision angle according to [code]up_direction[/code], which is "
+"[code]Vector2.UP[/code] by default. This value is always positive."
+msgstr ""
+
+#: doc/classes/KinematicCollision2D.xml:32
+msgid "The colliding body's [RID] used by the [Physics2DServer]."
+msgstr ""
+
+#: doc/classes/KinematicCollision2D.xml:38
+msgid "The colliding shape's index. See [CollisionObject2D]."
+msgstr ""
+
+#: doc/classes/Label.xml:4
+msgid ""
+"Displays plain text in a line or wrapped inside a rectangle. For formatted "
+"text, use [RichTextLabel]."
+msgstr ""
+
+#: doc/classes/Label.xml:7
+msgid ""
+"Label displays plain text on the screen. It gives you control over the "
+"horizontal and vertical alignment and can wrap the text inside the node's "
+"bounding rectangle. It doesn't support bold, italics, or other formatting. "
+"For that, use [RichTextLabel] instead.\n"
+"[b]Note:[/b] Contrarily to most other [Control]s, Label's [member Control."
+"mouse_filter] defaults to [constant Control.MOUSE_FILTER_IGNORE] (i.e. it "
+"doesn't react to mouse input events). This implies that a label won't "
+"display any configured [member Control.hint_tooltip], unless you change its "
+"mouse filter.\n"
+"[b]Note:[/b] Unicode characters after [code]0xffff[/code] (such as most "
+"emoji) are [i]not[/i] supported on Windows. They will display as unknown "
+"characters instead. This will be resolved in Godot 4.0."
+msgstr ""
+
+#: doc/classes/Label.xml:18
+msgid "Returns the amount of lines of text the Label has."
+msgstr ""
+
+#: doc/classes/Label.xml:24
+msgid "Returns the font size in pixels."
+msgstr ""
+
+#: doc/classes/Label.xml:30
+msgid ""
+"Returns the total number of printable characters in the text (excluding "
+"spaces and newlines)."
+msgstr ""
+
+#: doc/classes/Label.xml:36
+msgid ""
+"Returns the number of lines shown. Useful if the [Label]'s height cannot "
+"currently display all lines."
+msgstr ""
+
+#: doc/classes/Label.xml:42
+msgid ""
+"Controls the text's horizontal align. Supports left, center, right, and "
+"fill, or justify. Set it to one of the [enum Align] constants."
+msgstr ""
+
+#: doc/classes/Label.xml:45
+msgid ""
+"If [code]true[/code], wraps the text inside the node's bounding rectangle. "
+"If you resize the node, it will change its height automatically to show all "
+"the text."
+msgstr ""
+
+#: doc/classes/Label.xml:48
+msgid ""
+"If [code]true[/code], the Label only shows the text that fits inside its "
+"bounding rectangle and will clip text horizontally."
+msgstr ""
+
+#: doc/classes/Label.xml:51
+msgid ""
+"The node ignores the first [code]lines_skipped[/code] lines before it starts "
+"to display text."
+msgstr ""
+
+#: doc/classes/Label.xml:54
+msgid "Limits the lines of text the node shows on screen."
+msgstr ""
+
+#: doc/classes/Label.xml:58
+msgid ""
+"Limits the amount of visible characters. If you set [code]percent_visible[/"
+"code] to 0.5, only up to half of the text's characters will display on "
+"screen. Useful to animate the text in a dialog box."
+msgstr ""
+
+#: doc/classes/Label.xml:62
+msgid "The text to display on screen."
+msgstr ""
+
+#: doc/classes/Label.xml:65
+msgid "If [code]true[/code], all the text displays as UPPERCASE."
+msgstr ""
+
+#: doc/classes/Label.xml:68
+msgid ""
+"Controls the text's vertical align. Supports top, center, bottom, and fill. "
+"Set it to one of the [enum VAlign] constants."
+msgstr ""
+
+#: doc/classes/Label.xml:71
+msgid "Restricts the number of characters to display. Set to -1 to disable."
+msgstr ""
+
+#: doc/classes/Label.xml:76
+msgid "Align rows to the left (default)."
+msgstr ""
+
+#: doc/classes/Label.xml:79
+msgid "Align rows centered."
+msgstr ""
+
+#: doc/classes/Label.xml:82
+msgid "Align rows to the right."
+msgstr ""
+
+#: doc/classes/Label.xml:85
+msgid "Expand row whitespaces to fit the width."
+msgstr ""
+
+#: doc/classes/Label.xml:88
+msgid "Align the whole text to the top."
+msgstr ""
+
+#: doc/classes/Label.xml:91
+msgid "Align the whole text to the center."
+msgstr ""
+
+#: doc/classes/Label.xml:94
+msgid "Align the whole text to the bottom."
+msgstr ""
+
+#: doc/classes/Label.xml:97
+msgid "Align the whole text by spreading the rows."
+msgstr ""
+
+#: doc/classes/Label.xml:102
+msgid "[Font] used for the [Label]'s text."
+msgstr ""
+
+#: doc/classes/Label.xml:105
+msgid "Default text [Color] of the [Label]."
+msgstr ""
+
+#: doc/classes/Label.xml:108
+msgid "[Color] of the text's shadow effect."
+msgstr ""
+
+#: doc/classes/Label.xml:111
+msgid "The tint of [Font]'s outline. See [member DynamicFont.outline_color]."
+msgstr ""
+
+#: doc/classes/Label.xml:114
+msgid "Vertical space between lines in multiline [Label]."
+msgstr ""
+
+#: doc/classes/Label.xml:117
+msgid "Background [StyleBox] for the [Label]."
+msgstr ""
+
+#: doc/classes/Label.xml:120
+msgid ""
+"Boolean value. If set to 1 ([code]true[/code]), the shadow will be displayed "
+"around the whole text as an outline."
+msgstr ""
+
+#: doc/classes/Label.xml:123
+msgid "The horizontal offset of the text's shadow."
+msgstr ""
+
+#: doc/classes/Label.xml:126
+msgid "The vertical offset of the text's shadow."
+msgstr ""
+
+#: doc/classes/LargeTexture.xml:4
+msgid ""
+"[i]Deprecated.[/i] A [Texture] capable of storing many smaller textures with "
+"offsets."
+msgstr ""
+
+#: doc/classes/LargeTexture.xml:7
+msgid ""
+"[i]Deprecated (will be removed in Godot 4.0).[/i] A [Texture] capable of "
+"storing many smaller textures with offsets.\n"
+"You can dynamically add pieces ([Texture]s) to this [LargeTexture] using "
+"different offsets."
+msgstr ""
+
+#: doc/classes/LargeTexture.xml:18
+msgid ""
+"Adds [code]texture[/code] to this [LargeTexture], starting on offset "
+"[code]ofs[/code]."
+msgstr ""
+
+#: doc/classes/LargeTexture.xml:24
+msgid "Clears the [LargeTexture]."
+msgstr ""
+
+#: doc/classes/LargeTexture.xml:30
+msgid "Returns the number of pieces currently in this [LargeTexture]."
+msgstr ""
+
+#: doc/classes/LargeTexture.xml:37
+msgid "Returns the offset of the piece with the index [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/LargeTexture.xml:44
+msgid "Returns the [Texture] of the piece with the index [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/LargeTexture.xml:52
+msgid ""
+"Sets the offset of the piece with the index [code]idx[/code] to [code]ofs[/"
+"code]."
+msgstr ""
+
+#: doc/classes/LargeTexture.xml:60
+msgid ""
+"Sets the [Texture] of the piece with index [code]idx[/code] to "
+"[code]texture[/code]."
+msgstr ""
+
+#: doc/classes/LargeTexture.xml:67
+msgid "Sets the size of this [LargeTexture]."
+msgstr ""
+
+#: doc/classes/Light.xml:4
+msgid "Provides a base class for different kinds of light nodes."
+msgstr ""
+
+#: doc/classes/Light.xml:7
+msgid ""
+"Light is the [i]abstract[/i] base class for light nodes. As it can't be "
+"instanced, it shouldn't be used directly. Other types of light nodes inherit "
+"from it. Light contains the common variables and parameters used for "
+"lighting."
+msgstr ""
+
+#: doc/classes/Light.xml:18
+msgid "Returns the value of the specified [enum Light.Param] parameter."
+msgstr ""
+
+#: doc/classes/Light.xml:26
+msgid "Sets the value of the specified [enum Light.Param] parameter."
+msgstr ""
+
+#: doc/classes/Light.xml:32
+msgid ""
+"If [code]true[/code], the light only appears in the editor and will not be "
+"visible at runtime."
+msgstr ""
+
+#: doc/classes/Light.xml:35
+msgid "The light's bake mode. See [enum BakeMode]."
+msgstr ""
+
+#: doc/classes/Light.xml:38
+msgid ""
+"The light's color. An [i]overbright[/i] color can be used to achieve a "
+"result equivalent to increasing the light's [member light_energy]."
+msgstr ""
+
+#: doc/classes/Light.xml:41
+msgid "The light will affect objects in the selected layers."
+msgstr ""
+
+#: doc/classes/Light.xml:44
+msgid ""
+"The light's strength multiplier (this is not a physical unit). For "
+"[OmniLight] and [SpotLight], changing this value will only change the light "
+"color's intensity, not the light's radius."
+msgstr ""
+
+#: doc/classes/Light.xml:47
+msgid ""
+"Secondary multiplier used with indirect light (light bounces). This works on "
+"both [BakedLightmap] and [GIProbe]."
+msgstr ""
+
+#: doc/classes/Light.xml:50
+msgid ""
+"If [code]true[/code], the light's effect is reversed, darkening areas and "
+"casting bright shadows."
+msgstr ""
+
+#: doc/classes/Light.xml:53
+msgid ""
+"The size of the light in Godot units. Only considered in baked lightmaps and "
+"only if [member light_bake_mode] is set to [constant BAKE_ALL]. Increasing "
+"this value will make the shadows appear blurrier. This can be used to "
+"simulate area lights to an extent."
+msgstr ""
+
+#: doc/classes/Light.xml:56
+msgid ""
+"The intensity of the specular blob in objects affected by the light. At "
+"[code]0[/code], the light becomes a pure diffuse light. When not baking "
+"emission, this can be used to avoid unrealistic reflections when placing "
+"lights above an emissive surface."
+msgstr ""
+
+#: doc/classes/Light.xml:59
+msgid ""
+"Used to adjust shadow appearance. Too small a value results in self-"
+"shadowing (\"shadow acne\"), while too large a value causes shadows to "
+"separate from casters (\"peter-panning\"). Adjust as needed."
+msgstr ""
+
+#: doc/classes/Light.xml:62
+msgid "The color of shadows cast by this light."
+msgstr ""
+
+#: doc/classes/Light.xml:65
+msgid "Attempts to reduce [member shadow_bias] gap."
+msgstr ""
+
+#: doc/classes/Light.xml:68
+msgid "If [code]true[/code], the light will cast shadows."
+msgstr ""
+
+#: doc/classes/Light.xml:71
+msgid ""
+"If [code]true[/code], reverses the backface culling of the mesh. This can be "
+"useful when you have a flat mesh that has a light behind it. If you need to "
+"cast a shadow on both sides of the mesh, set the mesh to use double-sided "
+"shadows with [constant GeometryInstance.SHADOW_CASTING_SETTING_DOUBLE_SIDED]."
+msgstr ""
+
+#: doc/classes/Light.xml:76
+msgid "Constant for accessing [member light_energy]."
+msgstr ""
+
+#: doc/classes/Light.xml:79
+msgid "Constant for accessing [member light_indirect_energy]."
+msgstr ""
+
+#: doc/classes/Light.xml:82
+msgid "Constant for accessing [member light_size]."
+msgstr ""
+
+#: doc/classes/Light.xml:85
+msgid "Constant for accessing [member light_specular]."
+msgstr ""
+
+#: doc/classes/Light.xml:88
+msgid ""
+"Constant for accessing [member OmniLight.omni_range] or [member SpotLight."
+"spot_range]."
+msgstr ""
+
+#: doc/classes/Light.xml:91
+msgid ""
+"Constant for accessing [member OmniLight.omni_attenuation] or [member "
+"SpotLight.spot_attenuation]."
+msgstr ""
+
+#: doc/classes/Light.xml:94
+msgid "Constant for accessing [member SpotLight.spot_angle]."
+msgstr ""
+
+#: doc/classes/Light.xml:97
+msgid "Constant for accessing [member SpotLight.spot_angle_attenuation]."
+msgstr ""
+
+#: doc/classes/Light.xml:100
+msgid "Constant for accessing [member shadow_contact]."
+msgstr ""
+
+#: doc/classes/Light.xml:103
+msgid ""
+"Constant for accessing [member DirectionalLight."
+"directional_shadow_max_distance]."
+msgstr ""
+
+#: doc/classes/Light.xml:106
+msgid ""
+"Constant for accessing [member DirectionalLight.directional_shadow_split_1]."
+msgstr ""
+
+#: doc/classes/Light.xml:109
+msgid ""
+"Constant for accessing [member DirectionalLight.directional_shadow_split_2]."
+msgstr ""
+
+#: doc/classes/Light.xml:112
+msgid ""
+"Constant for accessing [member DirectionalLight.directional_shadow_split_3]."
+msgstr ""
+
+#: doc/classes/Light.xml:115
+msgid ""
+"Constant for accessing [member DirectionalLight."
+"directional_shadow_normal_bias]."
+msgstr ""
+
+#: doc/classes/Light.xml:118
+msgid "Constant for accessing [member shadow_bias]."
+msgstr ""
+
+#: doc/classes/Light.xml:121
+msgid ""
+"Constant for accessing [member DirectionalLight."
+"directional_shadow_bias_split_scale]."
+msgstr ""
+
+#: doc/classes/Light.xml:127
+msgid ""
+"Light is ignored when baking.\n"
+"[b]Note:[/b] Hiding a light does [i]not[/i] affect baking."
+msgstr ""
+
+#: doc/classes/Light.xml:131
+msgid "Only indirect lighting will be baked (default)."
+msgstr ""
+
+#: doc/classes/Light.xml:134
+msgid ""
+"Both direct and indirect light will be baked.\n"
+"[b]Note:[/b] You should hide the light if you don't want it to appear twice "
+"(dynamic and baked)."
+msgstr ""
+
+#: doc/classes/Light2D.xml:4
+msgid "Casts light in a 2D environment."
+msgstr ""
+
+#: doc/classes/Light2D.xml:7
+msgid ""
+"Casts light in a 2D environment. Light is defined by a (usually grayscale) "
+"texture, a color, an energy value, a mode (see constants), and various other "
+"parameters (range and shadows-related).\n"
+"[b]Note:[/b] Light2D can also be used as a mask."
+msgstr ""
+
+#: doc/classes/Light2D.xml:11 doc/classes/LightOccluder2D.xml:10
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/2d/2d_lights_and_shadows.html"
+msgstr ""
+
+#: doc/classes/Light2D.xml:17
+msgid "The Light2D's [Color]."
+msgstr ""
+
+#: doc/classes/Light2D.xml:20
+msgid "If [code]true[/code], Light2D will only appear when editing the scene."
+msgstr ""
+
+#: doc/classes/Light2D.xml:23
+msgid "If [code]true[/code], Light2D will emit light."
+msgstr ""
+
+#: doc/classes/Light2D.xml:26
+msgid ""
+"The Light2D's energy value. The larger the value, the stronger the light."
+msgstr ""
+
+#: doc/classes/Light2D.xml:29
+msgid "The Light2D's mode. See [enum Mode] constants for values."
+msgstr ""
+
+#: doc/classes/Light2D.xml:32
+msgid "The offset of the Light2D's [code]texture[/code]."
+msgstr ""
+
+#: doc/classes/Light2D.xml:35
+msgid "The height of the Light2D. Used with 2D normal mapping."
+msgstr ""
+
+#: doc/classes/Light2D.xml:38
+msgid ""
+"The layer mask. Only objects with a matching mask will be affected by the "
+"Light2D."
+msgstr ""
+
+#: doc/classes/Light2D.xml:41
+msgid "Maximum layer value of objects that are affected by the Light2D."
+msgstr ""
+
+#: doc/classes/Light2D.xml:44
+msgid "Minimum layer value of objects that are affected by the Light2D."
+msgstr ""
+
+#: doc/classes/Light2D.xml:47
+msgid ""
+"Maximum [code]z[/code] value of objects that are affected by the Light2D."
+msgstr ""
+
+#: doc/classes/Light2D.xml:50
+msgid ""
+"Minimum [code]z[/code] value of objects that are affected by the Light2D."
+msgstr ""
+
+#: doc/classes/Light2D.xml:53
+msgid "Shadow buffer size."
+msgstr ""
+
+#: doc/classes/Light2D.xml:56
+msgid "[Color] of shadows cast by the Light2D."
+msgstr ""
+
+#: doc/classes/Light2D.xml:59
+msgid "If [code]true[/code], the Light2D will cast shadows."
+msgstr ""
+
+#: doc/classes/Light2D.xml:62
+msgid "Shadow filter type. See [enum ShadowFilter] for possible values."
+msgstr ""
+
+#: doc/classes/Light2D.xml:65
+msgid "Smoothing value for shadows."
+msgstr ""
+
+#: doc/classes/Light2D.xml:68
+msgid "Smooth shadow gradient length."
+msgstr ""
+
+#: doc/classes/Light2D.xml:71
+msgid ""
+"The shadow mask. Used with [LightOccluder2D] to cast shadows. Only occluders "
+"with a matching light mask will cast shadows."
+msgstr ""
+
+#: doc/classes/Light2D.xml:74
+msgid "[Texture] used for the Light2D's appearance."
+msgstr ""
+
+#: doc/classes/Light2D.xml:77
+msgid "The [code]texture[/code]'s scale factor."
+msgstr ""
+
+#: doc/classes/Light2D.xml:82
+msgid ""
+"Adds the value of pixels corresponding to the Light2D to the values of "
+"pixels under it. This is the common behavior of a light."
+msgstr ""
+
+#: doc/classes/Light2D.xml:85
+msgid ""
+"Subtracts the value of pixels corresponding to the Light2D to the values of "
+"pixels under it, resulting in inversed light effect."
+msgstr ""
+
+#: doc/classes/Light2D.xml:88
+msgid ""
+"Mix the value of pixels corresponding to the Light2D to the values of pixels "
+"under it by linear interpolation."
+msgstr ""
+
+#: doc/classes/Light2D.xml:91
+msgid ""
+"The light texture of the Light2D is used as a mask, hiding or revealing "
+"parts of the screen underneath depending on the value of each pixel of the "
+"light (mask) texture."
+msgstr ""
+
+#: doc/classes/Light2D.xml:94
+msgid "No filter applies to the shadow map. See [member shadow_filter]."
+msgstr ""
+
+#: doc/classes/Light2D.xml:97
+msgid ""
+"Percentage closer filtering (3 samples) applies to the shadow map. See "
+"[member shadow_filter]."
+msgstr ""
+
+#: doc/classes/Light2D.xml:100
+msgid ""
+"Percentage closer filtering (5 samples) applies to the shadow map. See "
+"[member shadow_filter]."
+msgstr ""
+
+#: doc/classes/Light2D.xml:103
+msgid ""
+"Percentage closer filtering (7 samples) applies to the shadow map. See "
+"[member shadow_filter]."
+msgstr ""
+
+#: doc/classes/Light2D.xml:106
+msgid ""
+"Percentage closer filtering (9 samples) applies to the shadow map. See "
+"[member shadow_filter]."
+msgstr ""
+
+#: doc/classes/Light2D.xml:109
+msgid ""
+"Percentage closer filtering (13 samples) applies to the shadow map. See "
+"[member shadow_filter]."
+msgstr ""
+
+#: doc/classes/LightOccluder2D.xml:4
+msgid "Occludes light cast by a Light2D, casting shadows."
+msgstr ""
+
+#: doc/classes/LightOccluder2D.xml:7
+msgid ""
+"Occludes light cast by a Light2D, casting shadows. The LightOccluder2D must "
+"be provided with an [OccluderPolygon2D] in order for the shadow to be "
+"computed."
+msgstr ""
+
+#: doc/classes/LightOccluder2D.xml:16
+msgid ""
+"The LightOccluder2D's light mask. The LightOccluder2D will cast shadows only "
+"from Light2D(s) that have the same light mask(s)."
+msgstr ""
+
+#: doc/classes/LightOccluder2D.xml:19
+msgid "The [OccluderPolygon2D] used to compute the shadow."
+msgstr ""
+
+#: doc/classes/Line2D.xml:4
+msgid "A 2D line."
+msgstr ""
+
+#: doc/classes/Line2D.xml:7
+msgid ""
+"A line through several points in 2D space.\n"
+"[b]Note:[/b] By default, Godot can only draw up to 4,096 polygon points at a "
+"time. To increase this limit, open the Project Settings and increase [member "
+"ProjectSettings.rendering/limits/buffers/canvas_polygon_buffer_size_kb] and "
+"[member ProjectSettings.rendering/limits/buffers/"
+"canvas_polygon_index_buffer_size_kb]."
+msgstr ""
+
+#: doc/classes/Line2D.xml:20
+msgid ""
+"Adds a point at the [code]position[/code]. Appends the point at the end of "
+"the line.\n"
+"If [code]at_position[/code] is given, the point is inserted before the point "
+"number [code]at_position[/code], moving that point (and every point after) "
+"after the inserted point. If [code]at_position[/code] is not given, or is an "
+"illegal value ([code]at_position < 0[/code] or [code]at_position >= [method "
+"get_point_count][/code]), the point will be appended at the end of the point "
+"list."
+msgstr ""
+
+#: doc/classes/Line2D.xml:27
+msgid "Removes all points from the line."
+msgstr ""
+
+#: doc/classes/Line2D.xml:33
+msgid "Returns the Line2D's amount of points."
+msgstr ""
+
+#: doc/classes/Line2D.xml:40
+msgid "Returns point [code]i[/code]'s position."
+msgstr ""
+
+#: doc/classes/Line2D.xml:47
+msgid "Removes the point at index [code]i[/code] from the line."
+msgstr ""
+
+#: doc/classes/Line2D.xml:55
+msgid ""
+"Overwrites the position in point [code]i[/code] with the supplied "
+"[code]position[/code]."
+msgstr ""
+
+#: doc/classes/Line2D.xml:61
+msgid ""
+"If [code]true[/code], the line's border will be anti-aliased.\n"
+"[b]Note:[/b] Line2D is not accelerated by batching when being anti-aliased."
+msgstr ""
+
+#: doc/classes/Line2D.xml:65
+msgid ""
+"Controls the style of the line's first point. Use [enum LineCapMode] "
+"constants."
+msgstr ""
+
+#: doc/classes/Line2D.xml:68
+msgid "The line's color. Will not be used if a gradient is set."
+msgstr ""
+
+#: doc/classes/Line2D.xml:71
+msgid ""
+"Controls the style of the line's last point. Use [enum LineCapMode] "
+"constants."
+msgstr ""
+
+#: doc/classes/Line2D.xml:74
+msgid ""
+"The gradient is drawn through the whole line from start to finish. The "
+"default color will not be used if a gradient is set."
+msgstr ""
+
+#: doc/classes/Line2D.xml:77
+msgid "The style for the points between the start and the end."
+msgstr ""
+
+#: doc/classes/Line2D.xml:80
+msgid ""
+"The points that form the lines. The line is drawn between every point set in "
+"this array. Points are interpreted as local vectors."
+msgstr ""
+
+#: doc/classes/Line2D.xml:83
+msgid ""
+"The smoothness of the rounded joints and caps. This is only used if a cap or "
+"joint is set as round."
+msgstr ""
+
+#: doc/classes/Line2D.xml:86
+msgid ""
+"The direction difference in radians between vector points. This value is "
+"only used if [code]joint mode[/code] is set to [constant LINE_JOINT_SHARP]."
+msgstr ""
+
+#: doc/classes/Line2D.xml:89
+msgid ""
+"The texture used for the line's texture. Uses [code]texture_mode[/code] for "
+"drawing style."
+msgstr ""
+
+#: doc/classes/Line2D.xml:92
+msgid ""
+"The style to render the [code]texture[/code] on the line. Use [enum "
+"LineTextureMode] constants."
+msgstr ""
+
+#: doc/classes/Line2D.xml:95
+msgid "The line's width."
+msgstr ""
+
+#: doc/classes/Line2D.xml:98
+msgid ""
+"The line's width varies with the curve. The original width is simply "
+"multiply by the value of the Curve."
+msgstr ""
+
+#: doc/classes/Line2D.xml:103
+msgid ""
+"The line's joints will be pointy. If [code]sharp_limit[/code] is greater "
+"than the rotation of a joint, it becomes a bevel joint instead."
+msgstr ""
+
+#: doc/classes/Line2D.xml:106
+msgid "The line's joints will be bevelled/chamfered."
+msgstr ""
+
+#: doc/classes/Line2D.xml:109
+msgid "The line's joints will be rounded."
+msgstr ""
+
+#: doc/classes/Line2D.xml:112
+msgid "Don't draw a line cap."
+msgstr ""
+
+#: doc/classes/Line2D.xml:115
+msgid "Draws the line cap as a box."
+msgstr ""
+
+#: doc/classes/Line2D.xml:118
+msgid "Draws the line cap as a circle."
+msgstr ""
+
+#: doc/classes/Line2D.xml:121
+msgid ""
+"Takes the left pixels of the texture and renders it over the whole line."
+msgstr ""
+
+#: doc/classes/Line2D.xml:124
+msgid ""
+"Tiles the texture over the line. The texture must be imported with "
+"[b]Repeat[/b] enabled for it to work properly."
+msgstr ""
+
+#: doc/classes/Line2D.xml:127
+msgid ""
+"Stretches the texture across the line. Import the texture with [b]Repeat[/b] "
+"disabled for best results."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:4
+msgid "Control that provides single-line string editing."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:7
+msgid ""
+"LineEdit provides a single-line string editor, used for text fields.\n"
+"It features many built-in shortcuts which will always be available "
+"([code]Ctrl[/code] here maps to [code]Command[/code] on macOS):\n"
+"- Ctrl + C: Copy\n"
+"- Ctrl + X: Cut\n"
+"- Ctrl + V or Ctrl + Y: Paste/\"yank\"\n"
+"- Ctrl + Z: Undo\n"
+"- Ctrl + Shift + Z: Redo\n"
+"- Ctrl + U: Delete text from the cursor position to the beginning of the "
+"line\n"
+"- Ctrl + K: Delete text from the cursor position to the end of the line\n"
+"- Ctrl + A: Select all text\n"
+"- Up/Down arrow: Move the cursor to the beginning/end of the line\n"
+"On macOS, some extra keyboard shortcuts are available:\n"
+"- Ctrl + F: Like the right arrow key, move the cursor one character right\n"
+"- Ctrl + B: Like the left arrow key, move the cursor one character left\n"
+"- Ctrl + P: Like the up arrow key, move the cursor to the previous line\n"
+"- Ctrl + N: Like the down arrow key, move the cursor to the next line\n"
+"- Ctrl + D: Like the Delete key, delete the character on the right side of "
+"cursor\n"
+"- Ctrl + H: Like the Backspace key, delete the character on the left side of "
+"the cursor\n"
+"- Command + Left arrow: Like the Home key, move the cursor to the beginning "
+"of the line\n"
+"- Command + Right arrow: Like the End key, move the cursor to the end of the "
+"line"
+msgstr ""
+
+#: doc/classes/LineEdit.xml:35
+msgid ""
+"Adds [code]text[/code] after the cursor. If the resulting value is longer "
+"than [member max_length], nothing happens."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:41
+msgid "Erases the [LineEdit]'s [member text]."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:47
+msgid ""
+"Deletes one character at the cursor's current position (equivalent to "
+"pressing the [code]Delete[/code] key)."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:55
+msgid ""
+"Deletes a section of the [member text] going from position "
+"[code]from_column[/code] to [code]to_column[/code]. Both parameters should "
+"be within the text's length."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:61
+msgid "Clears the current selection."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:67
+msgid ""
+"Returns the [PopupMenu] of this [LineEdit]. By default, this menu is "
+"displayed when right-clicking on the [LineEdit].\n"
+"[b]Warning:[/b] This is a required internal node, removing and freeing it "
+"may cause a crash. If you wish to hide it or any of its children, use their "
+"[member CanvasItem.visible] property."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:74
+msgid ""
+"Returns the scroll offset due to [member caret_position], as a number of "
+"characters."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:81
+msgid "Executes a given action as defined in the [enum MenuItems] enum."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:89
+msgid ""
+"Selects characters inside [LineEdit] between [code]from[/code] and [code]to[/"
+"code]. By default, [code]from[/code] is at the beginning and [code]to[/code] "
+"at the end.\n"
+"[codeblock]\n"
+"text = \"Welcome\"\n"
+"select() # Will select \"Welcome\".\n"
+"select(4) # Will select \"ome\".\n"
+"select(2, 5) # Will select \"lco\".\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/LineEdit.xml:101
+msgid "Selects the whole [String]."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:107
+msgid "Text alignment as defined in the [enum Align] enum."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:110 doc/classes/TextEdit.xml:391
+msgid "If [code]true[/code], the caret (visual cursor) blinks."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:113 doc/classes/TextEdit.xml:394
+msgid "Duration (in seconds) of a caret's blinking cycle."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:116
+msgid ""
+"The cursor's position inside the [LineEdit]. When set, the text may scroll "
+"to accommodate it."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:119
+msgid ""
+"If [code]true[/code], the [LineEdit] will show a clear button if [code]text[/"
+"code] is not empty, which can be used to clear the text quickly."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:122
+msgid "If [code]true[/code], the context menu will appear when right-clicked."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:125
+msgid ""
+"If [code]false[/code], existing text cannot be modified and new text cannot "
+"be added."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:128
+msgid ""
+"If [code]true[/code], the [LineEdit] width will increase to stay longer than "
+"the [member text]. It will [b]not[/b] compress if the [member text] is "
+"shortened."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:132
+msgid ""
+"Maximum amount of characters that can be entered inside the [LineEdit]. If "
+"[code]0[/code], there is no limit.\n"
+"When a limit is defined, characters that would exceed [member max_length] "
+"are truncated. This happens both for existing [member text] contents when "
+"setting the max length, or for new text inserted in the [LineEdit], "
+"including pasting. If any input text is truncated, the [signal "
+"text_change_rejected] signal is emitted with the truncated substring as "
+"parameter.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"text = \"Hello world\"\n"
+"max_length = 5\n"
+"# `text` becomes \"Hello\".\n"
+"max_length = 10\n"
+"text += \" goodbye\"\n"
+"# `text` becomes \"Hello good\".\n"
+"# `text_change_rejected` is emitted with \"bye\" as parameter.\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/LineEdit.xml:147
+msgid ""
+"Opacity of the [member placeholder_text]. From [code]0[/code] to [code]1[/"
+"code]."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:150
+msgid ""
+"Text shown when the [LineEdit] is empty. It is [b]not[/b] the [LineEdit]'s "
+"default value (see [member text])."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:153
+msgid ""
+"Sets the icon that will appear in the right end of the [LineEdit] if there's "
+"no [member text], or always, if [member clear_button_enabled] is set to "
+"[code]false[/code]."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:156
+msgid ""
+"If [code]true[/code], every character is replaced with the secret character "
+"(see [member secret_character])."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:159
+msgid ""
+"The character to use to mask secret input (defaults to \"*\"). Only a single "
+"character can be used as the secret character."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:162
+msgid ""
+"If [code]false[/code], it's impossible to select the text using mouse nor "
+"keyboard."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:165
+msgid "If [code]false[/code], using shortcuts will be disabled."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:168
+msgid ""
+"String value of the [LineEdit].\n"
+"[b]Note:[/b] Changing text using this property won't emit the [signal "
+"text_changed] signal."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:172 doc/classes/TextEdit.xml:468
+msgid ""
+"If [code]true[/code], the native virtual keyboard is shown when focused on "
+"platforms that support it."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:179
+msgid ""
+"Emitted when appending text that overflows the [member max_length]. The "
+"appended text is truncated to fit [member max_length], and the part that "
+"couldn't fit is passed as the [code]rejected_substring[/code] argument."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:185 doc/classes/TextEdit.xml:506
+msgid "Emitted when the text changes."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:191
+msgid "Emitted when the user presses [constant KEY_ENTER] on the [LineEdit]."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:197
+msgid "Aligns the text on the left-hand side of the [LineEdit]."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:200
+msgid "Centers the text in the middle of the [LineEdit]."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:203
+msgid "Aligns the text on the right-hand side of the [LineEdit]."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:206
+msgid "Stretches whitespaces to fit the [LineEdit]'s width."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:209 doc/classes/TextEdit.xml:527
+msgid "Cuts (copies and clears) the selected text."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:212 doc/classes/TextEdit.xml:530
+msgid "Copies the selected text."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:215
+msgid ""
+"Pastes the clipboard text over the selected text (or at the cursor's "
+"position).\n"
+"Non-printable escape characters are automatically stripped from the OS "
+"clipboard via [method String.strip_escapes]."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:219
+msgid "Erases the whole [LineEdit] text."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:222
+msgid "Selects the whole [LineEdit] text."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:225 doc/classes/TextEdit.xml:542
+msgid "Undoes the previous action."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:228
+msgid "Reverse the last undo action."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:231 doc/classes/TextEdit.xml:548
+msgid "Represents the size of the [enum MenuItems] enum."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:236
+msgid "Texture for the clear button. See [member clear_button_enabled]."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:239
+msgid "Color used as default tint for the clear button."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:242
+msgid "Color used for the clear button when it's pressed."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:245
+msgid "Color of the [LineEdit]'s visual cursor (caret)."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:248
+msgid "Background used when [LineEdit] has GUI focus."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:251
+msgid "Font used for the text."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:254
+msgid "Default font color."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:257
+msgid "Font color for selected text (inside the selection rectangle)."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:260
+msgid "Font color when editing is disabled."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:263
+msgid ""
+"Minimum horizontal space for the text (not counting the clear button and "
+"content margins). This value is measured in count of space characters (i.e. "
+"this amount of space characters can be displayed without scrolling)."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:266
+msgid "Default background for the [LineEdit]."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:269
+msgid ""
+"Background used when [LineEdit] is in read-only mode ([member editable] is "
+"set to [code]false[/code])."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:272
+msgid "Color of the selection rectangle."
+msgstr ""
+
+#: doc/classes/LineShape2D.xml:4
+msgid "Line shape for 2D collisions."
+msgstr ""
+
+#: doc/classes/LineShape2D.xml:7
+msgid ""
+"Line shape for 2D collisions. It works like a 2D plane and will not allow "
+"any physics body to go to the negative side. Not recommended for rigid "
+"bodies, and usually not recommended for static bodies either because it "
+"forces checks against it on every frame."
+msgstr ""
+
+#: doc/classes/LineShape2D.xml:15
+msgid "The line's distance from the origin."
+msgstr ""
+
+#: doc/classes/LineShape2D.xml:18
+msgid "The line's normal."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:4
+msgid "Simple button used to represent a link to some resource."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:7
+msgid ""
+"This kind of button is primarily used when the interaction with the button "
+"causes a context change (like linking to a web page).\n"
+"See also [BaseButton] which contains common properties and methods "
+"associated with this node."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:21
+msgid ""
+"Determines when to show the underline. See [enum UnderlineMode] for options."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:26
+msgid "The LinkButton will always show an underline at the bottom of its text."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:29
+msgid ""
+"The LinkButton will show an underline at the bottom of its text when the "
+"mouse cursor is over it."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:32
+msgid "The LinkButton will never show an underline at the bottom of its text."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:37
+msgid ""
+"[StyleBox] used when the [LinkButton] is focused. It is displayed over the "
+"current [StyleBox], so using [StyleBoxEmpty] will just disable the focus "
+"visual effect."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:40
+msgid "[Font] of the [LinkButton]'s text."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:43
+msgid "Default text [Color] of the [LinkButton]."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:46
+msgid ""
+"Text [Color] used when the [LinkButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:49
+msgid "Text [Color] used when the [LinkButton] is being hovered."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:52
+msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:55
+msgid "The vertical space between the baseline of text and the underline."
+msgstr ""
+
+#: doc/classes/Listener.xml:4 doc/classes/Listener2D.xml:4
+msgid "Overrides the location sounds are heard from."
+msgstr ""
+
+#: doc/classes/Listener.xml:7
+msgid ""
+"Once added to the scene tree and enabled using [method make_current], this "
+"node will override the location sounds are heard from. This can be used to "
+"listen from a location different from the [Camera]."
+msgstr ""
+
+#: doc/classes/Listener.xml:15
+msgid "Disables the listener to use the current camera's listener instead."
+msgstr ""
+
+#: doc/classes/Listener.xml:21
+msgid "Returns the listener's global orthonormalized [Transform]."
+msgstr ""
+
+#: doc/classes/Listener.xml:27
+msgid ""
+"Returns [code]true[/code] if the listener was made current using [method "
+"make_current], [code]false[/code] otherwise.\n"
+"[b]Note:[/b] There may be more than one Listener marked as \"current\" in "
+"the scene tree, but only the one that was made current last will be used."
+msgstr ""
+
+#: doc/classes/Listener.xml:34
+msgid "Enables the listener. This will override the current camera's listener."
+msgstr ""
+
+#: doc/classes/Listener2D.xml:7
+msgid ""
+"Once added to the scene tree and enabled using [method make_current], this "
+"node will override the location sounds are heard from. Only one [Listener2D] "
+"can be current. Using [method make_current] will disable the previous "
+"[Listener2D].\n"
+"If there is no active [Listener2D] in the current [Viewport], center of the "
+"screen will be used as a hearing point for the audio. [Listener2D] needs to "
+"be inside [SceneTree] to function."
+msgstr ""
+
+#: doc/classes/Listener2D.xml:16
+msgid ""
+"Disables the [Listener2D]. If it's not set as current, this method will have "
+"no effect."
+msgstr ""
+
+#: doc/classes/Listener2D.xml:22
+msgid "Returns [code]true[/code] if this [Listener2D] is currently active."
+msgstr ""
+
+#: doc/classes/Listener2D.xml:28
+msgid ""
+"Makes the [Listener2D] active, setting it as the hearing point for the "
+"sounds. If there is already another active [Listener2D], it will be "
+"disabled.\n"
+"This method will have no effect if the [Listener2D] is not added to "
+"[SceneTree]."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:4
+msgid "Abstract base class for the game's main loop."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:7
+msgid ""
+"[MainLoop] is the abstract base class for a Godot project's game loop. It is "
+"inherited by [SceneTree], which is the default game loop implementation used "
+"in Godot projects, though it is also possible to write and use one's own "
+"[MainLoop] subclass instead of the scene tree.\n"
+"Upon the application start, a [MainLoop] implementation must be provided to "
+"the OS; otherwise, the application will exit. This happens automatically "
+"(and a [SceneTree] is created) unless a main [Script] is provided from the "
+"command line (with e.g. [code]godot -s my_loop.gd[/code], which should then "
+"be a [MainLoop] implementation.\n"
+"Here is an example script implementing a simple [MainLoop]:\n"
+"[codeblock]\n"
+"extends MainLoop\n"
+"\n"
+"var time_elapsed = 0\n"
+"var keys_typed = []\n"
+"var quit = false\n"
+"\n"
+"func _initialize():\n"
+" print(\"Initialized:\")\n"
+" print(\" Starting time: %s\" % str(time_elapsed))\n"
+"\n"
+"func _idle(delta):\n"
+" time_elapsed += delta\n"
+" # Return true to end the main loop.\n"
+" return quit\n"
+"\n"
+"func _input_event(event):\n"
+" # Record keys.\n"
+" if event is InputEventKey and event.pressed and !event.echo:\n"
+" keys_typed.append(OS.get_scancode_string(event.scancode))\n"
+" # Quit on Escape press.\n"
+" if event.scancode == KEY_ESCAPE:\n"
+" quit = true\n"
+" # Quit on any mouse click.\n"
+" if event is InputEventMouseButton:\n"
+" quit = true\n"
+"\n"
+"func _finalize():\n"
+" print(\"Finalized:\")\n"
+" print(\" End time: %s\" % str(time_elapsed))\n"
+" print(\" Keys typed: %s\" % var2str(keys_typed))\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/MainLoop.xml:51
+msgid ""
+"Called when files are dragged from the OS file manager and dropped in the "
+"game window. The arguments are a list of file paths and the identifier of "
+"the screen where the drag originated."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:57
+msgid "Called before the program exits."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:65
+msgid ""
+"Called when the user performs an action in the system global menu (e.g. the "
+"Mac OS menu bar)."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:72
+msgid ""
+"Called each idle frame with the time since the last idle frame as argument "
+"(in seconds). Equivalent to [method Node._process].\n"
+"If implemented, the method must return a boolean value. [code]true[/code] "
+"ends the main loop, while [code]false[/code] lets it proceed to the next "
+"frame."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:79
+msgid "Called once during initialization."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:86
+msgid "Called whenever an [InputEvent] is received by the main loop."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:93
+msgid ""
+"Deprecated callback, does not do anything. Use [method _input_event] to "
+"parse text input. Will be removed in Godot 4.0."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:100
+msgid ""
+"Called each physics frame with the time since the last physics frame as "
+"argument ([code]delta[/code], in seconds). Equivalent to [method Node."
+"_physics_process].\n"
+"If implemented, the method must return a boolean value. [code]true[/code] "
+"ends the main loop, while [code]false[/code] lets it proceed to the next "
+"frame."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:107
+msgid ""
+"Should not be called manually, override [method _finalize] instead. Will be "
+"removed in Godot 4.0."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:114
+msgid ""
+"Should not be called manually, override [method _idle] instead. Will be "
+"removed in Godot 4.0."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:120
+msgid ""
+"Should not be called manually, override [method _initialize] instead. Will "
+"be removed in Godot 4.0."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:127
+msgid ""
+"Should not be called manually, override [method _input_event] instead. Will "
+"be removed in Godot 4.0."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:134
+msgid ""
+"Should not be called manually, override [method _input_text] instead. Will "
+"be removed in Godot 4.0."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:141
+msgid ""
+"Should not be called manually, override [method _iteration] instead. Will be "
+"removed in Godot 4.0."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:150
+msgid "Emitted when a user responds to a permission request."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:156 doc/classes/Node.xml:791
+msgid ""
+"Notification received from the OS when the mouse enters the game window.\n"
+"Implemented on desktop and web platforms."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:160 doc/classes/Node.xml:795
+msgid ""
+"Notification received from the OS when the mouse leaves the game window.\n"
+"Implemented on desktop and web platforms."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:164 doc/classes/Node.xml:799
+msgid ""
+"Notification received from the OS when the game window is focused.\n"
+"Implemented on all platforms."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:168 doc/classes/Node.xml:803
+msgid ""
+"Notification received from the OS when the game window is unfocused.\n"
+"Implemented on all platforms."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:172 doc/classes/Node.xml:807
+msgid ""
+"Notification received from the OS when a quit request is sent (e.g. closing "
+"the window with a \"Close\" button or Alt+F4).\n"
+"Implemented on desktop platforms."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:176 doc/classes/Node.xml:811
+msgid ""
+"Notification received from the OS when a go back request is sent (e.g. "
+"pressing the \"Back\" button on Android).\n"
+"Specific to the Android platform."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:180 doc/classes/Node.xml:815
+msgid ""
+"Notification received from the OS when an unfocus request is sent (e.g. "
+"another OS window wants to take the focus).\n"
+"No supported platforms currently send this notification."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:184 doc/classes/Node.xml:819
+msgid ""
+"Notification received from the OS when the application is exceeding its "
+"allocated memory.\n"
+"Specific to the iOS platform."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:188 doc/classes/Node.xml:823
+msgid ""
+"Notification received when translations may have changed. Can be triggered "
+"by the user changing the locale. Can be used to respond to language changes, "
+"for example to change the UI strings on the fly. Useful when working with "
+"the built-in translation support, like [method Object.tr]."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:191 doc/classes/Node.xml:826
+msgid ""
+"Notification received from the OS when a request for \"About\" information "
+"is sent.\n"
+"Specific to the macOS platform."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:195 doc/classes/Node.xml:830
+msgid ""
+"Notification received from Godot's crash handler when the engine is about to "
+"crash.\n"
+"Implemented on desktop platforms if the crash handler is enabled."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:199 doc/classes/Node.xml:834
+msgid ""
+"Notification received from the OS when an update of the Input Method Engine "
+"occurs (e.g. change of IME cursor position or composition string).\n"
+"Specific to the macOS platform."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:203 doc/classes/Node.xml:838
+msgid ""
+"Notification received from the OS when the app is resumed.\n"
+"Specific to the Android platform."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:207 doc/classes/Node.xml:842
+msgid ""
+"Notification received from the OS when the app is paused.\n"
+"Specific to the Android platform."
+msgstr ""
+
+#: doc/classes/MarginContainer.xml:4
+msgid "Simple margin container."
+msgstr ""
+
+#: doc/classes/MarginContainer.xml:7
+msgid ""
+"Adds a top, left, bottom, and right margin to all [Control] nodes that are "
+"direct children of the container. To control the [MarginContainer]'s margin, "
+"use the [code]margin_*[/code] theme properties listed below.\n"
+"[b]Note:[/b] Be careful, [Control] margin values are different than the "
+"constant margin values. If you want to change the custom margin values of "
+"the [MarginContainer] by code, you should use the following examples:\n"
+"[codeblock]\n"
+"# This code sample assumes the current script is extending MarginContainer.\n"
+"var margin_value = 100\n"
+"add_constant_override(\"margin_top\", margin_value)\n"
+"add_constant_override(\"margin_left\", margin_value)\n"
+"add_constant_override(\"margin_bottom\", margin_value)\n"
+"add_constant_override(\"margin_right\", margin_value)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/MarginContainer.xml:26
+msgid ""
+"All direct children of [MarginContainer] will have a bottom margin of "
+"[code]margin_bottom[/code] pixels."
+msgstr ""
+
+#: doc/classes/MarginContainer.xml:29
+msgid ""
+"All direct children of [MarginContainer] will have a left margin of "
+"[code]margin_left[/code] pixels."
+msgstr ""
+
+#: doc/classes/MarginContainer.xml:32
+msgid ""
+"All direct children of [MarginContainer] will have a right margin of "
+"[code]margin_right[/code] pixels."
+msgstr ""
+
+#: doc/classes/MarginContainer.xml:35
+msgid ""
+"All direct children of [MarginContainer] will have a top margin of "
+"[code]margin_top[/code] pixels."
+msgstr ""
+
+#: doc/classes/Marshalls.xml:4
+msgid "Data transformation (marshalling) and encoding helpers."
+msgstr ""
+
+#: doc/classes/Marshalls.xml:7
+msgid "Provides data transformation and encoding utility functions."
+msgstr ""
+
+#: doc/classes/Marshalls.xml:16
+msgid ""
+"Returns a decoded [PoolByteArray] corresponding to the Base64-encoded string "
+"[code]base64_str[/code]."
+msgstr ""
+
+#: doc/classes/Marshalls.xml:23
+msgid ""
+"Returns a decoded string corresponding to the Base64-encoded string "
+"[code]base64_str[/code]."
+msgstr ""
+
+#: doc/classes/Marshalls.xml:31
+msgid ""
+"Returns a decoded [Variant] corresponding to the Base64-encoded string "
+"[code]base64_str[/code]. If [code]allow_objects[/code] is [code]true[/code], "
+"decoding objects is allowed.\n"
+"[b]Warning:[/b] Deserialized objects can contain code which gets executed. "
+"Do not use this option if the serialized object comes from untrusted sources "
+"to avoid potential security threats such as remote code execution."
+msgstr ""
+
+#: doc/classes/Marshalls.xml:39
+msgid "Returns a Base64-encoded string of a given [PoolByteArray]."
+msgstr ""
+
+#: doc/classes/Marshalls.xml:46
+msgid ""
+"Returns a Base64-encoded string of the UTF-8 string [code]utf8_str[/code]."
+msgstr ""
+
+#: doc/classes/Marshalls.xml:54
+msgid ""
+"Returns a Base64-encoded string of the [Variant] [code]variant[/code]. If "
+"[code]full_objects[/code] is [code]true[/code], encoding objects is allowed "
+"(and can potentially include code)."
+msgstr ""
+
+#: doc/classes/Material.xml:4
+msgid "Abstract base [Resource] for coloring and shading geometry."
+msgstr ""
+
+#: doc/classes/Material.xml:7
+msgid ""
+"Material is a base [Resource] used for coloring and shading geometry. All "
+"materials inherit from it and almost all [VisualInstance] derived nodes "
+"carry a Material. A few flags and parameters are shared between all material "
+"types and are configured here."
+msgstr ""
+
+#: doc/classes/Material.xml:17
+msgid ""
+"Sets the [Material] to be used for the next pass. This renders the object "
+"again using a different material.\n"
+"[b]Note:[/b] This only applies to [SpatialMaterial]s and [ShaderMaterial]s "
+"with type \"Spatial\"."
+msgstr ""
+
+#: doc/classes/Material.xml:21
+msgid ""
+"Sets the render priority for transparent objects in 3D scenes. Higher "
+"priority objects will be sorted in front of lower priority objects.\n"
+"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
+"not impact how transparent objects are sorted relative to opaque objects. "
+"This is because opaque objects are not sorted, while transparent objects are "
+"sorted from back to front (subject to priority)."
+msgstr ""
+
+#: doc/classes/Material.xml:27
+msgid "Maximum value for the [member render_priority] parameter."
+msgstr ""
+
+#: doc/classes/Material.xml:30
+msgid "Minimum value for the [member render_priority] parameter."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:4
+msgid "Special button that brings up a [PopupMenu] when clicked."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:7
+msgid ""
+"Special button that brings up a [PopupMenu] when clicked.\n"
+"New items can be created inside this [PopupMenu] using [code]get_popup()."
+"add_item(\"My Item Name\")[/code]. You can also create them directly from "
+"the editor. To do so, select the [MenuButton] node, then in the toolbar at "
+"the top of the 2D editor, click [b]Items[/b] then click [b]Add[/b] in the "
+"popup. You will be able to give each item new properties.\n"
+"See also [BaseButton] which contains common properties and methods "
+"associated with this node."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:17 doc/classes/OptionButton.xml:86
+msgid ""
+"Returns the [PopupMenu] contained in this button.\n"
+"[b]Warning:[/b] This is a required internal node, removing and freeing it "
+"may cause a crash. If you wish to hide it or any of its children, use their "
+"[member CanvasItem.visible] property."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:25
+msgid ""
+"If [code]true[/code], shortcuts are disabled and cannot be used to trigger "
+"the button."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:34
+msgid ""
+"If [code]true[/code], when the cursor hovers above another [MenuButton] "
+"within the same parent which also has [code]switch_on_hover[/code] enabled, "
+"it will close the current [MenuButton] and open the other one."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:41
+msgid "Emitted when [PopupMenu] of this MenuButton is about to show."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:49
+msgid "[StyleBox] used when the [MenuButton] is disabled."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:52
+msgid ""
+"[StyleBox] used when the [MenuButton] is focused. It is displayed over the "
+"current [StyleBox], so using [StyleBoxEmpty] will just disable the focus "
+"visual effect."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:55
+msgid "[Font] of the [MenuButton]'s text."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:58
+msgid "Default text [Color] of the [MenuButton]."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:61
+msgid "Text [Color] used when the [MenuButton] is disabled."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:64
+msgid ""
+"Text [Color] used when the [MenuButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:67
+msgid "Text [Color] used when the [MenuButton] is being hovered."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:70
+msgid "Text [Color] used when the [MenuButton] is being pressed."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:73
+msgid "[StyleBox] used when the [MenuButton] is being hovered."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:76
+msgid "The horizontal space between [MenuButton]'s icon and text."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:79
+msgid "Default [StyleBox] for the [MenuButton]."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:82
+msgid "[StyleBox] used when the [MenuButton] is being pressed."
+msgstr ""
+
+#: doc/classes/Mesh.xml:4
+msgid "A [Resource] that contains vertex array-based geometry."
+msgstr ""
+
+#: doc/classes/Mesh.xml:7
+msgid ""
+"Mesh is a type of [Resource] that contains vertex array-based geometry, "
+"divided in [i]surfaces[/i]. Each surface contains a completely separate "
+"array and a material used to draw it. Design wise, a mesh with multiple "
+"surfaces is preferred to a single surface, because objects created in 3D "
+"editing software commonly contain multiple materials."
+msgstr ""
+
+#: doc/classes/Mesh.xml:21
+msgid ""
+"Calculate a [ConvexPolygonShape] from the mesh.\n"
+"If [code]clean[/code] is [code]true[/code] (default), duplicate and interior "
+"vertices are removed automatically. You can set it to [code]false[/code] to "
+"make the process faster if not needed.\n"
+"If [code]simplify[/code] is [code]true[/code], the geometry can be further "
+"simplified to reduce the amount of vertices. Disabled by default."
+msgstr ""
+
+#: doc/classes/Mesh.xml:30
+msgid ""
+"Calculate an outline mesh at a defined offset (margin) from the original "
+"mesh.\n"
+"[b]Note:[/b] This method typically returns the vertices in reverse order (e."
+"g. clockwise to counterclockwise)."
+msgstr ""
+
+#: doc/classes/Mesh.xml:37
+msgid "Calculate a [ConcavePolygonShape] from the mesh."
+msgstr ""
+
+#: doc/classes/Mesh.xml:43
+msgid "Generate a [TriangleMesh] from the mesh."
+msgstr ""
+
+#: doc/classes/Mesh.xml:49
+msgid ""
+"Returns the smallest [AABB] enclosing this mesh in local space. Not affected "
+"by [code]custom_aabb[/code]. See also [method VisualInstance."
+"get_transformed_aabb].\n"
+"[b]Note:[/b] This is only implemented for [ArrayMesh] and [PrimitiveMesh]."
+msgstr ""
+
+#: doc/classes/Mesh.xml:56
+msgid ""
+"Returns all the vertices that make up the faces of the mesh. Each three "
+"vertices represent one triangle."
+msgstr ""
+
+#: doc/classes/Mesh.xml:62
+msgid "Returns the amount of surfaces that the [Mesh] holds."
+msgstr ""
+
+#: doc/classes/Mesh.xml:69
+msgid ""
+"Returns the arrays for the vertices, normals, uvs, etc. that make up the "
+"requested surface (see [method ArrayMesh.add_surface_from_arrays])."
+msgstr ""
+
+#: doc/classes/Mesh.xml:76
+msgid "Returns the blend shape arrays for the requested surface."
+msgstr ""
+
+#: doc/classes/Mesh.xml:83
+msgid ""
+"Returns a [Material] in a given surface. Surface is rendered using this "
+"material."
+msgstr ""
+
+#: doc/classes/Mesh.xml:91
+msgid ""
+"Sets a [Material] for a given surface. Surface will be rendered using this "
+"material."
+msgstr ""
+
+#: doc/classes/Mesh.xml:97
+msgid ""
+"Sets a hint to be used for lightmap resolution in [BakedLightmap]. Overrides "
+"[member BakedLightmap.default_texels_per_unit]."
+msgstr ""
+
+#: doc/classes/Mesh.xml:102
+msgid "Render array as points (one vertex equals one point)."
+msgstr ""
+
+#: doc/classes/Mesh.xml:105
+msgid "Render array as lines (every two vertices a line is created)."
+msgstr ""
+
+#: doc/classes/Mesh.xml:108
+msgid "Render array as line strip."
+msgstr ""
+
+#: doc/classes/Mesh.xml:111
+msgid "Render array as line loop (like line strip, but closed)."
+msgstr ""
+
+#: doc/classes/Mesh.xml:114
+msgid "Render array as triangles (every three vertices a triangle is created)."
+msgstr ""
+
+#: doc/classes/Mesh.xml:117
+msgid "Render array as triangle strips."
+msgstr ""
+
+#: doc/classes/Mesh.xml:120
+msgid "Render array as triangle fans."
+msgstr ""
+
+#: doc/classes/Mesh.xml:123 doc/classes/VisualServer.xml:3363
+msgid "Blend shapes are normalized."
+msgstr ""
+
+#: doc/classes/Mesh.xml:126 doc/classes/VisualServer.xml:3366
+msgid "Blend shapes are relative to base weight."
+msgstr ""
+
+#: doc/classes/Mesh.xml:129
+msgid ""
+"Mesh array contains vertices. All meshes require a vertex array so this "
+"should always be present."
+msgstr ""
+
+#: doc/classes/Mesh.xml:132
+msgid "Mesh array contains normals."
+msgstr ""
+
+#: doc/classes/Mesh.xml:135
+msgid "Mesh array contains tangents."
+msgstr ""
+
+#: doc/classes/Mesh.xml:138
+msgid "Mesh array contains colors."
+msgstr ""
+
+#: doc/classes/Mesh.xml:141
+msgid "Mesh array contains UVs."
+msgstr ""
+
+#: doc/classes/Mesh.xml:144
+msgid "Mesh array contains second UV."
+msgstr ""
+
+#: doc/classes/Mesh.xml:147
+msgid "Mesh array contains bones."
+msgstr ""
+
+#: doc/classes/Mesh.xml:150
+msgid "Mesh array contains bone weights."
+msgstr ""
+
+#: doc/classes/Mesh.xml:153
+msgid "Mesh array uses indices."
+msgstr ""
+
+#: doc/classes/Mesh.xml:156
+msgid ""
+"Used internally to calculate other [code]ARRAY_COMPRESS_*[/code] enum "
+"values. Do not use."
+msgstr ""
+
+#: doc/classes/Mesh.xml:159 doc/classes/VisualServer.xml:3300
+msgid "Flag used to mark a compressed (half float) vertex array."
+msgstr ""
+
+#: doc/classes/Mesh.xml:162 doc/classes/VisualServer.xml:3303
+msgid "Flag used to mark a compressed (half float) normal array."
+msgstr ""
+
+#: doc/classes/Mesh.xml:165 doc/classes/VisualServer.xml:3306
+msgid "Flag used to mark a compressed (half float) tangent array."
+msgstr ""
+
+#: doc/classes/Mesh.xml:168 doc/classes/VisualServer.xml:3309
+msgid "Flag used to mark a compressed (half float) color array."
+msgstr ""
+
+#: doc/classes/Mesh.xml:171 doc/classes/VisualServer.xml:3312
+msgid "Flag used to mark a compressed (half float) UV coordinates array."
+msgstr ""
+
+#: doc/classes/Mesh.xml:174 doc/classes/VisualServer.xml:3315
+msgid ""
+"Flag used to mark a compressed (half float) UV coordinates array for the "
+"second UV coordinates."
+msgstr ""
+
+#: doc/classes/Mesh.xml:177 doc/classes/VisualServer.xml:3318
+msgid "Flag used to mark a compressed bone array."
+msgstr ""
+
+#: doc/classes/Mesh.xml:180 doc/classes/VisualServer.xml:3321
+msgid "Flag used to mark a compressed (half float) weight array."
+msgstr ""
+
+#: doc/classes/Mesh.xml:183 doc/classes/VisualServer.xml:3324
+msgid "Flag used to mark a compressed index array."
+msgstr ""
+
+#: doc/classes/Mesh.xml:186 doc/classes/VisualServer.xml:3327
+msgid "Flag used to mark that the array contains 2D vertices."
+msgstr ""
+
+#: doc/classes/Mesh.xml:189 doc/classes/VisualServer.xml:3330
+msgid "Flag used to mark that the array uses 16-bit bones instead of 8-bit."
+msgstr ""
+
+#: doc/classes/Mesh.xml:192 doc/classes/VisualServer.xml:3333
+msgid ""
+"Flag used to mark that the array uses an octahedral representation of normal "
+"and tangent vectors rather than cartesian."
+msgstr ""
+
+#: doc/classes/Mesh.xml:195
+msgid ""
+"Used to set flags [constant ARRAY_COMPRESS_VERTEX], [constant "
+"ARRAY_COMPRESS_NORMAL], [constant ARRAY_COMPRESS_TANGENT], [constant "
+"ARRAY_COMPRESS_COLOR], [constant ARRAY_COMPRESS_TEX_UV], [constant "
+"ARRAY_COMPRESS_TEX_UV2], [constant ARRAY_COMPRESS_WEIGHTS], and [constant "
+"ARRAY_FLAG_USE_OCTAHEDRAL_COMPRESSION] quickly."
+msgstr ""
+
+#: doc/classes/Mesh.xml:198
+msgid "Array of vertices."
+msgstr ""
+
+#: doc/classes/Mesh.xml:201
+msgid "Array of normals."
+msgstr ""
+
+#: doc/classes/Mesh.xml:204
+msgid "Array of tangents as an array of floats, 4 floats per tangent."
+msgstr ""
+
+#: doc/classes/Mesh.xml:207
+msgid "Array of colors."
+msgstr ""
+
+#: doc/classes/Mesh.xml:210
+msgid "Array of UV coordinates."
+msgstr ""
+
+#: doc/classes/Mesh.xml:213
+msgid "Array of second set of UV coordinates."
+msgstr ""
+
+#: doc/classes/Mesh.xml:216
+msgid "Array of bone data."
+msgstr ""
+
+#: doc/classes/Mesh.xml:219
+msgid "Array of weights."
+msgstr ""
+
+#: doc/classes/Mesh.xml:222
+msgid "Array of indices."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:4
+msgid "Helper tool to access and edit [Mesh] data."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:7
+msgid ""
+"MeshDataTool provides access to individual vertices in a [Mesh]. It allows "
+"users to read and edit vertex data of meshes. It also creates an array of "
+"faces and edges.\n"
+"To use MeshDataTool, load a mesh with [method create_from_surface]. When you "
+"are finished editing the data commit the data to a mesh with [method "
+"commit_to_surface].\n"
+"Below is an example of how MeshDataTool may be used.\n"
+"[codeblock]\n"
+"var mesh = ArrayMesh.new()\n"
+"mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, CubeMesh.new()."
+"get_mesh_arrays())\n"
+"var mdt = MeshDataTool.new()\n"
+"mdt.create_from_surface(mesh, 0)\n"
+"for i in range(mdt.get_vertex_count()):\n"
+" var vertex = mdt.get_vertex(i)\n"
+" # In this example we extend the mesh by one unit, which results in "
+"separated faces as it is flat shaded.\n"
+" vertex += mdt.get_vertex_normal(i)\n"
+" # Save your change.\n"
+" mdt.set_vertex(i, vertex)\n"
+"mesh.surface_remove(0)\n"
+"mdt.commit_to_surface(mesh)\n"
+"var mi = MeshInstance.new()\n"
+"mi.mesh = mesh\n"
+"add_child(mi)\n"
+"[/codeblock]\n"
+"See also [ArrayMesh], [ImmediateGeometry] and [SurfaceTool] for procedural "
+"geometry generation.\n"
+"[b]Note:[/b] Godot uses clockwise [url=https://learnopengl.com/Advanced-"
+"OpenGL/Face-culling]winding order[/url] for front faces of triangle "
+"primitive modes."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:36
+msgid "Clears all data currently in MeshDataTool."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:43
+msgid "Adds a new surface to specified [Mesh] with edited data."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:51
+msgid ""
+"Uses specified surface of given [Mesh] to populate data for MeshDataTool.\n"
+"Requires [Mesh] with primitive type [constant Mesh.PRIMITIVE_TRIANGLES]."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:58
+msgid "Returns the number of edges in this [Mesh]."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:65
+msgid "Returns array of faces that touch given edge."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:72
+msgid "Returns meta information assigned to given edge."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:80
+msgid ""
+"Returns index of specified vertex connected to given edge.\n"
+"Vertex argument can only be 0 or 1 because edges are comprised of two "
+"vertices."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:87
+msgid "Returns the number of faces in this [Mesh]."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:95
+msgid ""
+"Returns specified edge associated with given face.\n"
+"Edge argument must 2 or less because a face only has three edges."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:103
+msgid "Returns the metadata associated with the given face."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:110
+msgid "Calculates and returns the face normal of the given face."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:118
+msgid ""
+"Returns the specified vertex of the given face.\n"
+"Vertex argument must be 2 or less because faces contain three vertices."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:125
+msgid ""
+"Returns the [Mesh]'s format. Format is an integer made up of [Mesh] format "
+"flags combined together. For example, a mesh containing both vertices and "
+"normals would return a format of [code]3[/code] because [constant ArrayMesh."
+"ARRAY_FORMAT_VERTEX] is [code]1[/code] and [constant ArrayMesh."
+"ARRAY_FORMAT_NORMAL] is [code]2[/code].\n"
+"See [enum ArrayMesh.ArrayFormat] for a list of format flags."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:132
+msgid "Returns the material assigned to the [Mesh]."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:139
+msgid "Returns the vertex at given index."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:146
+msgid "Returns the bones of the given vertex."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:153
+msgid "Returns the color of the given vertex."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:159
+msgid "Returns the total number of vertices in [Mesh]."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:166
+msgid "Returns an array of edges that share the given vertex."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:173
+msgid "Returns an array of faces that share the given vertex."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:180
+msgid "Returns the metadata associated with the given vertex."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:187
+msgid "Returns the normal of the given vertex."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:194
+msgid "Returns the tangent of the given vertex."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:201
+msgid "Returns the UV of the given vertex."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:208
+msgid "Returns the UV2 of the given vertex."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:215
+msgid "Returns bone weights of the given vertex."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:223
+msgid "Sets the metadata of the given edge."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:231
+msgid "Sets the metadata of the given face."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:238
+msgid "Sets the material to be used by newly-constructed [Mesh]."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:246
+msgid "Sets the position of the given vertex."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:254
+msgid "Sets the bones of the given vertex."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:262
+msgid "Sets the color of the given vertex."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:270
+msgid "Sets the metadata associated with the given vertex."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:278
+msgid "Sets the normal of the given vertex."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:286
+msgid "Sets the tangent of the given vertex."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:294
+msgid "Sets the UV of the given vertex."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:302
+msgid "Sets the UV2 of the given vertex."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:310
+msgid "Sets the bone weights of the given vertex."
+msgstr ""
+
+#: doc/classes/MeshInstance.xml:4
+msgid "Node that instances meshes into a scenario."
+msgstr ""
+
+#: doc/classes/MeshInstance.xml:7
+msgid ""
+"MeshInstance is a node that takes a [Mesh] resource and adds it to the "
+"current scenario by creating an instance of it. This is the class most often "
+"used to get 3D geometry rendered and can be used to instance a single [Mesh] "
+"in many places. This allows to reuse geometry and save on resources. When a "
+"[Mesh] has to be instanced more than thousands of times at close proximity, "
+"consider using a [MultiMesh] in a [MultiMeshInstance] instead."
+msgstr ""
+
+#: doc/classes/MeshInstance.xml:21
+msgid ""
+"This helper creates a [StaticBody] child node with a [ConvexPolygonShape] "
+"collision shape calculated from the mesh geometry. It's mainly used for "
+"testing.\n"
+"If [code]clean[/code] is [code]true[/code] (default), duplicate and interior "
+"vertices are removed automatically. You can set it to [code]false[/code] to "
+"make the process faster if not needed.\n"
+"If [code]simplify[/code] is [code]true[/code], the geometry can be further "
+"simplified to reduce the amount of vertices. Disabled by default."
+msgstr ""
+
+#: doc/classes/MeshInstance.xml:29
+msgid ""
+"This helper creates a [MeshInstance] child node with gizmos at every vertex "
+"calculated from the mesh geometry. It's mainly used for testing."
+msgstr ""
+
+#: doc/classes/MeshInstance.xml:35
+msgid ""
+"This helper creates a [StaticBody] child node with multiple "
+"[ConvexPolygonShape] collision shapes calculated from the mesh geometry via "
+"convex decomposition. It's mainly used for testing."
+msgstr ""
+
+#: doc/classes/MeshInstance.xml:41
+msgid ""
+"This helper creates a [StaticBody] child node with a [ConcavePolygonShape] "
+"collision shape calculated from the mesh geometry. It's mainly used for "
+"testing."
+msgstr ""
+
+#: doc/classes/MeshInstance.xml:48
+msgid ""
+"Returns the [Material] that will be used by the [Mesh] when drawing. This "
+"can return the [member GeometryInstance.material_override], the surface "
+"override [Material] defined in this [MeshInstance], or the surface "
+"[Material] defined in the [Mesh]. For example, if [member GeometryInstance."
+"material_override] is used, all surfaces will return the override material."
+msgstr ""
+
+#: doc/classes/MeshInstance.xml:55
+msgid "Returns the [Material] for a surface of the [Mesh] resource."
+msgstr ""
+
+#: doc/classes/MeshInstance.xml:61
+msgid "Returns the number of surface materials."
+msgstr ""
+
+#: doc/classes/MeshInstance.xml:69
+msgid "Sets the [Material] for a surface of the [Mesh] resource."
+msgstr ""
+
+#: doc/classes/MeshInstance.xml:75
+msgid "The [Mesh] resource for the instance."
+msgstr ""
+
+#: doc/classes/MeshInstance.xml:78
+msgid "[NodePath] to the [Skeleton] associated with the instance."
+msgstr ""
+
+#: doc/classes/MeshInstance.xml:81
+msgid "Sets the skin to be used by this instance."
+msgstr ""
+
+#: doc/classes/MeshInstance.xml:84
+msgid ""
+"If [code]true[/code], normals are transformed when software skinning is "
+"used. Set to [code]false[/code] when normals are not needed for better "
+"performance.\n"
+"See [member ProjectSettings.rendering/quality/skinning/"
+"software_skinning_fallback] for details about how software skinning is "
+"enabled."
+msgstr ""
+
+#: doc/classes/MeshInstance2D.xml:4
+msgid "Node used for displaying a [Mesh] in 2D."
+msgstr ""
+
+#: doc/classes/MeshInstance2D.xml:7
+msgid ""
+"Node used for displaying a [Mesh] in 2D. Can be constructed from an existing "
+"[Sprite] via a tool in the editor toolbar. Select \"Sprite\" then \"Convert "
+"to Mesh2D\", select settings in popup and press \"Create Mesh2D\"."
+msgstr ""
+
+#: doc/classes/MeshInstance2D.xml:10
+msgid "https://docs.godotengine.org/en/3.4/tutorials/2d/2d_meshes.html"
+msgstr ""
+
+#: doc/classes/MeshInstance2D.xml:16
+msgid "The [Mesh] that will be drawn by the [MeshInstance2D]."
+msgstr ""
+
+#: doc/classes/MeshInstance2D.xml:19 doc/classes/MultiMeshInstance2D.xml:19
+msgid ""
+"The normal map that will be used if using the default [CanvasItemMaterial].\n"
+"[b]Note:[/b] Godot expects the normal map to use X+, Y-, and Z+ coordinates. "
+"See [url=http://wiki.polycount.com/wiki/"
+"Normal_Map_Technical_Details#Common_Swizzle_Coordinates]this page[/url] for "
+"a comparison of normal map coordinates expected by popular engines."
+msgstr ""
+
+#: doc/classes/MeshInstance2D.xml:23 doc/classes/MultiMeshInstance2D.xml:23
+msgid ""
+"The [Texture] that will be used if using the default [CanvasItemMaterial]. "
+"Can be accessed as [code]TEXTURE[/code] in CanvasItem shader."
+msgstr ""
+
+#: doc/classes/MeshInstance2D.xml:29 doc/classes/MultiMeshInstance2D.xml:29
+msgid "Emitted when the [member texture] is changed."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:4
+msgid "Library of meshes."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:7
+msgid ""
+"A library of meshes. Contains a list of [Mesh] resources, each with a name "
+"and ID. Each item can also include collision and navigation shapes. This "
+"resource is used in [GridMap]."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:17
+msgid "Clears the library."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:24
+msgid ""
+"Creates a new item in the library with the given ID.\n"
+"You can get an unused ID from [method get_last_unused_item_id]."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:32
+msgid "Returns the first item with the given name."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:38
+msgid "Returns the list of item IDs in use."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:45
+msgid "Returns the item's mesh."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:52
+msgid "Returns the transform applied to the item's mesh."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:59
+msgid "Returns the item's name."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:66
+msgid "Returns the item's navigation mesh."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:73
+msgid "Returns the transform applied to the item's navigation mesh."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:80
+msgid ""
+"When running in the editor, returns a generated item preview (a 3D rendering "
+"in isometric perspective). When used in a running project, returns the "
+"manually-defined item preview which can be set using [method "
+"set_item_preview]. Returns an empty [Texture] if no preview was manually set "
+"in a running project."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:87
+msgid ""
+"Returns an item's collision shapes.\n"
+"The array consists of each [Shape] followed by its [Transform]."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:94
+msgid "Gets an unused ID for a new item."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:101
+msgid "Removes the item."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:109
+msgid "Sets the item's mesh."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:117
+msgid "Sets the transform to apply to the item's mesh."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:125
+msgid ""
+"Sets the item's name.\n"
+"This name is shown in the editor. It can also be used to look up the item "
+"later using [method find_item_by_name]."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:134
+msgid "Sets the item's navigation mesh."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:142
+msgid "Sets the transform to apply to the item's navigation mesh."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:150
+msgid "Sets a texture to use as the item's preview icon in the editor."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:158
+msgid ""
+"Sets an item's collision shapes.\n"
+"The array should consist of [Shape] objects, each followed by a [Transform] "
+"that will be applied to it. For shapes that should not have a transform, use "
+"[constant Transform.IDENTITY]."
+msgstr ""
+
+#: doc/classes/MeshTexture.xml:4
+msgid "Simple texture that uses a mesh to draw itself."
+msgstr ""
+
+#: doc/classes/MeshTexture.xml:7
+msgid ""
+"Simple texture that uses a mesh to draw itself. It's limited because flags "
+"can't be changed and region drawing is not supported."
+msgstr ""
+
+#: doc/classes/MeshTexture.xml:15
+msgid "Sets the base texture that the Mesh will use to draw."
+msgstr ""
+
+#: doc/classes/MeshTexture.xml:19
+msgid "Sets the size of the image, needed for reference."
+msgstr ""
+
+#: doc/classes/MeshTexture.xml:22
+msgid "Sets the mesh used to draw. It must be a mesh using 2D vertices."
+msgstr ""
+
+#: modules/mobile_vr/doc_classes/MobileVRInterface.xml:4
+msgid "Generic mobile VR implementation."
+msgstr ""
+
+#: modules/mobile_vr/doc_classes/MobileVRInterface.xml:7
+msgid ""
+"This is a generic mobile VR implementation where you need to provide details "
+"about the phone and HMD used. It does not rely on any existing framework. "
+"This is the most basic interface we have. For the best effect, you need a "
+"mobile phone with a gyroscope and accelerometer.\n"
+"Note that even though there is no positional tracking, the camera will "
+"assume the headset is at a height of 1.85 meters. You can change this by "
+"setting [member eye_height].\n"
+"You can initialise this interface as follows:\n"
+"[codeblock]\n"
+"var interface = ARVRServer.find_interface(\"Native mobile\")\n"
+"if interface and interface.initialize():\n"
+" get_viewport().arvr = true\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/mobile_vr/doc_classes/MobileVRInterface.xml:22
+msgid ""
+"The distance between the display and the lenses inside of the device in "
+"centimeters."
+msgstr ""
+
+#: modules/mobile_vr/doc_classes/MobileVRInterface.xml:25
+msgid "The width of the display in centimeters."
+msgstr ""
+
+#: modules/mobile_vr/doc_classes/MobileVRInterface.xml:28
+msgid ""
+"The height at which the camera is placed in relation to the ground (i.e. "
+"[ARVROrigin] node)."
+msgstr ""
+
+#: modules/mobile_vr/doc_classes/MobileVRInterface.xml:31
+msgid ""
+"The interocular distance, also known as the interpupillary distance. The "
+"distance between the pupils of the left and right eye."
+msgstr ""
+
+#: modules/mobile_vr/doc_classes/MobileVRInterface.xml:34
+msgid ""
+"The k1 lens factor is one of the two constants that define the strength of "
+"the lens used and directly influences the lens distortion effect."
+msgstr ""
+
+#: modules/mobile_vr/doc_classes/MobileVRInterface.xml:37
+msgid "The k2 lens factor, see k1."
+msgstr ""
+
+#: modules/mobile_vr/doc_classes/MobileVRInterface.xml:40
+msgid ""
+"The oversample setting. Because of the lens distortion we have to render our "
+"buffers at a higher resolution then the screen can natively handle. A value "
+"between 1.5 and 2.0 often provides good results but at the cost of "
+"performance."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:4
+msgid "Provides high-performance mesh instancing."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:7
+msgid ""
+"MultiMesh provides low-level mesh instancing. Drawing thousands of "
+"[MeshInstance] nodes can be slow, since each object is submitted to the GPU "
+"then drawn individually.\n"
+"MultiMesh is much faster as it can draw thousands of instances with a single "
+"draw call, resulting in less API overhead.\n"
+"As a drawback, if the instances are too far away from each other, "
+"performance may be reduced as every single instance will always render (they "
+"are spatially indexed as one, for the whole object).\n"
+"Since instances may have any behavior, the AABB used for visibility must be "
+"provided by the user."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:13 doc/classes/MultiMeshInstance.xml:11
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/3d/vertex_animation/"
+"animating_thousands_of_fish.html"
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:14 doc/classes/MultiMeshInstance.xml:13
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/optimization/using_multimesh."
+"html"
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:20
+msgid ""
+"Returns the visibility axis-aligned bounding box in local space. See also "
+"[method VisualInstance.get_transformed_aabb]."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:27
+msgid "Gets a specific instance's color."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:34
+msgid "Returns the custom data that has been set for a specific instance."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:41
+msgid "Returns the [Transform] of a specific instance."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:48
+msgid "Returns the [Transform2D] of a specific instance."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:55
+msgid ""
+"Sets all data related to the instances in one go. This is especially useful "
+"when loading the data from disk or preparing the data from GDNative.\n"
+"All data is packed in one large float array. An array may look like this: "
+"Transform for instance 1, color data for instance 1, custom data for "
+"instance 1, transform for instance 2, color data for instance 2, etc...\n"
+"[Transform] is stored as 12 floats, [Transform2D] is stored as 8 floats, "
+"[code]COLOR_8BIT[/code] / [code]CUSTOM_DATA_8BIT[/code] is stored as 1 float "
+"(4 bytes as is) and [code]COLOR_FLOAT[/code] / [code]CUSTOM_DATA_FLOAT[/"
+"code] is stored as 4 floats."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:65
+msgid ""
+"Sets the color of a specific instance by [i]multiplying[/i] the mesh's "
+"existing vertex colors.\n"
+"For the color to take effect, ensure that [member color_format] is non-"
+"[code]null[/code] on the [MultiMesh] and [member SpatialMaterial."
+"vertex_color_use_as_albedo] is [code]true[/code] on the material."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:74
+msgid ""
+"Sets custom data for a specific instance. Although [Color] is used, it is "
+"just a container for 4 floating point numbers. The format of the number can "
+"change depending on the [enum CustomDataFormat] used."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:82
+msgid "Sets the [Transform] for a specific instance."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:90
+msgid "Sets the [Transform2D] for a specific instance."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:96
+msgid "Format of colors in color array that gets passed to shader."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:99
+msgid "Format of custom data in custom data array that gets passed to shader."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:102
+msgid ""
+"Number of instances that will get drawn. This clears and (re)sizes the "
+"buffers. By default, all instances are drawn but you can limit this with "
+"[member visible_instance_count]."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:105
+msgid "Mesh to be drawn."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:108
+msgid "Format of transform used to transform mesh, either 2D or 3D."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:111
+msgid ""
+"Limits the number of instances drawn, -1 draws all instances. Changing this "
+"does not change the sizes of the buffers."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:116
+msgid "Use this when using 2D transforms."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:119
+msgid "Use this when using 3D transforms."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:122
+msgid "Use when you are not using per-instance [Color]s."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:125
+msgid ""
+"Compress [Color] data into 8 bits when passing to shader. This uses less "
+"memory and can be faster, but the [Color] loses precision."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:128
+msgid ""
+"The [Color] passed into [method set_instance_color] will use 4 floats. Use "
+"this for highest precision [Color]."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:131
+msgid "Use when you are not using per-instance custom data."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:134
+msgid ""
+"Compress custom_data into 8 bits when passing to shader. This uses less "
+"memory and can be faster, but loses precision and range. Floats packed into "
+"8 bits can only represent values between 0 and 1, numbers outside that range "
+"will be clamped."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:137
+msgid ""
+"The [Color] passed into [method set_instance_custom_data] will use 4 floats. "
+"Use this for highest precision."
+msgstr ""
+
+#: doc/classes/MultiMeshInstance.xml:4
+msgid "Node that instances a [MultiMesh]."
+msgstr ""
+
+#: doc/classes/MultiMeshInstance.xml:7
+msgid ""
+"[MultiMeshInstance] is a specialized node to instance [GeometryInstance]s "
+"based on a [MultiMesh] resource.\n"
+"This is useful to optimize the rendering of a high amount of instances of a "
+"given mesh (for example trees in a forest or grass strands)."
+msgstr ""
+
+#: doc/classes/MultiMeshInstance.xml:12
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/3d/using_multi_mesh_instance."
+"html"
+msgstr ""
+
+#: doc/classes/MultiMeshInstance.xml:19
+msgid ""
+"The [MultiMesh] resource that will be used and shared among all instances of "
+"the [MultiMeshInstance]."
+msgstr ""
+
+#: doc/classes/MultiMeshInstance2D.xml:4
+msgid "Node that instances a [MultiMesh] in 2D."
+msgstr ""
+
+#: doc/classes/MultiMeshInstance2D.xml:7
+msgid ""
+"[MultiMeshInstance2D] is a specialized node to instance a [MultiMesh] "
+"resource in 2D.\n"
+"Usage is the same as [MultiMeshInstance]."
+msgstr ""
+
+#: doc/classes/MultiMeshInstance2D.xml:16
+msgid "The [MultiMesh] that will be drawn by the [MultiMeshInstance2D]."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:4
+msgid "High-level multiplayer API."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:7
+msgid ""
+"This class implements most of the logic behind the high-level multiplayer "
+"API. See also [NetworkedMultiplayerPeer].\n"
+"By default, [SceneTree] has a reference to this class that is used to "
+"provide multiplayer capabilities (i.e. RPC/RSET) across the whole scene.\n"
+"It is possible to override the MultiplayerAPI instance used by specific "
+"Nodes by setting the [member Node.custom_multiplayer] property, effectively "
+"allowing to run both client and server in the same scene.\n"
+"[b]Note:[/b] The high-level multiplayer API protocol is an implementation "
+"detail and isn't meant to be used by non-Godot servers. It may change "
+"without notice."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:18
+msgid ""
+"Clears the current MultiplayerAPI network state (you shouldn't call this "
+"unless you know what you are doing)."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:24
+msgid ""
+"Returns the peer IDs of all connected peers of this MultiplayerAPI's [member "
+"network_peer]."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:30
+msgid ""
+"Returns the unique peer ID of this MultiplayerAPI's [member network_peer]."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:36
+msgid ""
+"Returns the sender's peer ID for the RPC currently being executed.\n"
+"[b]Note:[/b] If not inside an RPC this method will return 0."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:43 doc/classes/SceneTree.xml:123
+msgid "Returns [code]true[/code] if there is a [member network_peer] set."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:49
+msgid ""
+"Returns [code]true[/code] if this MultiplayerAPI's [member network_peer] is "
+"in server mode (listening for connections)."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:55
+msgid ""
+"Method used for polling the MultiplayerAPI. You only need to worry about "
+"this if you are using [member Node.custom_multiplayer] override or you set "
+"[member SceneTree.multiplayer_poll] to [code]false[/code]. By default, "
+"[SceneTree] will poll its MultiplayerAPI for you.\n"
+"[b]Note:[/b] This method results in RPCs and RSETs being called, so they "
+"will be executed in the same context of this function (e.g. [code]_process[/"
+"code], [code]physics[/code], [Thread])."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:65
+msgid ""
+"Sends the given raw [code]bytes[/code] to a specific peer identified by "
+"[code]id[/code] (see [method NetworkedMultiplayerPeer.set_target_peer]). "
+"Default ID is [code]0[/code], i.e. broadcast to all peers."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:71
+msgid ""
+"If [code]true[/code] (or if the [member network_peer] has [member PacketPeer."
+"allow_object_decoding] set to [code]true[/code]), the MultiplayerAPI will "
+"allow encoding and decoding of object during RPCs/RSETs.\n"
+"[b]Warning:[/b] Deserialized objects can contain code which gets executed. "
+"Do not use this option if the serialized object comes from untrusted sources "
+"to avoid potential security threats such as remote code execution."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:75
+msgid ""
+"The peer object to handle the RPC system (effectively enabling networking "
+"when set). Depending on the peer itself, the MultiplayerAPI will become a "
+"network server (check with [method is_network_server]) and will set root "
+"node's network mode to master, or it will become a regular peer with root "
+"node set to puppet. All child nodes are set to inherit the network mode by "
+"default. Handling of networking-related events (connection, disconnection, "
+"new clients) is done by connecting to MultiplayerAPI's signals."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:78
+msgid ""
+"If [code]true[/code], the MultiplayerAPI's [member network_peer] refuses new "
+"incoming connections."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:81
+msgid ""
+"The root node to use for RPCs. Instead of an absolute path, a relative path "
+"will be used to find the node upon which the RPC should be executed.\n"
+"This effectively allows to have different branches of the scene tree to be "
+"managed by different MultiplayerAPI, allowing for example to run both client "
+"and server in the same scene."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:88
+msgid ""
+"Emitted when this MultiplayerAPI's [member network_peer] successfully "
+"connected to a server. Only emitted on clients."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:93
+msgid ""
+"Emitted when this MultiplayerAPI's [member network_peer] fails to establish "
+"a connection to a server. Only emitted on clients."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:99
+msgid ""
+"Emitted when this MultiplayerAPI's [member network_peer] connects with a new "
+"peer. ID is the peer ID of the new peer. Clients get notified when other "
+"clients connect to the same server. Upon connecting to a server, a client "
+"also receives this signal for the server (with ID being 1)."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:105
+msgid ""
+"Emitted when this MultiplayerAPI's [member network_peer] disconnects from a "
+"peer. Clients get notified when other clients disconnect from the same "
+"server."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:112
+msgid ""
+"Emitted when this MultiplayerAPI's [member network_peer] receive a "
+"[code]packet[/code] with custom data (see [method send_bytes]). ID is the "
+"peer ID of the peer that sent the packet."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:117
+msgid ""
+"Emitted when this MultiplayerAPI's [member network_peer] disconnects from "
+"server. Only emitted on clients."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:123
+msgid ""
+"Used with [method Node.rpc_config] or [method Node.rset_config] to disable a "
+"method or property for all RPC calls, making it unavailable. Default for all "
+"methods."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:126
+msgid ""
+"Used with [method Node.rpc_config] or [method Node.rset_config] to set a "
+"method to be called or a property to be changed only on the remote end, not "
+"locally. Analogous to the [code]remote[/code] keyword. Calls and property "
+"changes are accepted from all remote peers, no matter if they are node's "
+"master or puppets."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:129
+msgid ""
+"Used with [method Node.rpc_config] or [method Node.rset_config] to set a "
+"method to be called or a property to be changed only on the network master "
+"for this node. Analogous to the [code]master[/code] keyword. Only accepts "
+"calls or property changes from the node's network puppets, see [method Node."
+"set_network_master]."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:132
+msgid ""
+"Used with [method Node.rpc_config] or [method Node.rset_config] to set a "
+"method to be called or a property to be changed only on puppets for this "
+"node. Analogous to the [code]puppet[/code] keyword. Only accepts calls or "
+"property changes from the node's network master, see [method Node."
+"set_network_master]."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:135
+msgid ""
+"[i]Deprecated.[/i] Use [constant RPC_MODE_PUPPET] instead. Analogous to the "
+"[code]slave[/code] keyword."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:138
+msgid ""
+"Behave like [constant RPC_MODE_REMOTE] but also make the call or property "
+"change locally. Analogous to the [code]remotesync[/code] keyword."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:141
+msgid ""
+"[i]Deprecated.[/i] Use [constant RPC_MODE_REMOTESYNC] instead. Analogous to "
+"the [code]sync[/code] keyword."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:144
+msgid ""
+"Behave like [constant RPC_MODE_MASTER] but also make the call or property "
+"change locally. Analogous to the [code]mastersync[/code] keyword."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:147
+msgid ""
+"Behave like [constant RPC_MODE_PUPPET] but also make the call or property "
+"change locally. Analogous to the [code]puppetsync[/code] keyword."
+msgstr ""
+
+#: doc/classes/Mutex.xml:4
+msgid "A synchronization mutex (mutual exclusion)."
+msgstr ""
+
+#: doc/classes/Mutex.xml:7
+msgid ""
+"A synchronization mutex (mutual exclusion). This is used to synchronize "
+"multiple [Thread]s, and is equivalent to a binary [Semaphore]. It guarantees "
+"that only one thread can ever acquire the lock at a time. A mutex can be "
+"used to protect a critical section; however, be careful to avoid deadlocks."
+msgstr ""
+
+#: doc/classes/Mutex.xml:10 doc/classes/Semaphore.xml:10
+#: doc/classes/Thread.xml:11
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/threads/using_multiple_threads."
+"html"
+msgstr ""
+
+#: doc/classes/Mutex.xml:16
+msgid ""
+"Locks this [Mutex], blocks until it is unlocked by the current owner.\n"
+"[b]Note:[/b] This function returns without blocking if the thread already "
+"has ownership of the mutex."
+msgstr ""
+
+#: doc/classes/Mutex.xml:23
+msgid ""
+"Tries locking this [Mutex], but does not block. Returns [constant OK] on "
+"success, [constant ERR_BUSY] otherwise.\n"
+"[b]Note:[/b] This function returns [constant OK] if the thread already has "
+"ownership of the mutex."
+msgstr ""
+
+#: doc/classes/Mutex.xml:30
+msgid ""
+"Unlocks this [Mutex], leaving it to other threads.\n"
+"[b]Note:[/b] If a thread called [method lock] or [method try_lock] multiple "
+"times while already having ownership of the mutex, it must also call [method "
+"unlock] the same number of times in order to unlock it correctly."
+msgstr ""
+
+#: modules/gdnative/doc_classes/NativeScript.xml:13
+msgid ""
+"Returns the documentation string that was previously set with "
+"[code]godot_nativescript_set_class_documentation[/code]."
+msgstr ""
+
+#: modules/gdnative/doc_classes/NativeScript.xml:20
+msgid ""
+"Returns the documentation string that was previously set with "
+"[code]godot_nativescript_set_method_documentation[/code]."
+msgstr ""
+
+#: modules/gdnative/doc_classes/NativeScript.xml:27
+msgid ""
+"Returns the documentation string that was previously set with "
+"[code]godot_nativescript_set_property_documentation[/code]."
+msgstr ""
+
+#: modules/gdnative/doc_classes/NativeScript.xml:34
+msgid ""
+"Returns the documentation string that was previously set with "
+"[code]godot_nativescript_set_signal_documentation[/code]."
+msgstr ""
+
+#: modules/gdnative/doc_classes/NativeScript.xml:40
+msgid ""
+"Constructs a new object of the base type with a script of this type already "
+"attached.\n"
+"[b]Note:[/b] Any arguments passed to this function will be ignored and not "
+"passed to the native constructor function. This will change with in a future "
+"API extension."
+msgstr ""
+
+#: doc/classes/Navigation.xml:4
+msgid "Mesh-based navigation and pathfinding node."
+msgstr ""
+
+#: doc/classes/Navigation.xml:7
+msgid ""
+"Provides navigation and pathfinding within a collection of "
+"[NavigationMesh]es. By default, these will be automatically collected from "
+"child [NavigationMeshInstance] nodes, but they can also be added on the fly "
+"with [method navmesh_add]. In addition to basic pathfinding, this class also "
+"assists with aligning navigation agents with the meshes they are navigating "
+"on.\n"
+"[b]Note:[/b] The current navigation system has many known issues and will "
+"not always return optimal paths as expected. These issues will be fixed in "
+"Godot 4.0."
+msgstr ""
+
+#: doc/classes/Navigation.xml:11 doc/classes/NavigationMesh.xml:10
+msgid "https://godotengine.org/asset-library/asset/124"
+msgstr ""
+
+#: doc/classes/Navigation.xml:18 doc/classes/Navigation2D.xml:18
+msgid ""
+"Returns the navigation point closest to the point given. Points are in local "
+"coordinate space."
+msgstr ""
+
+#: doc/classes/Navigation.xml:25
+msgid ""
+"Returns the surface normal at the navigation point closest to the point "
+"given. Useful for rotating a navigation agent according to the navigation "
+"mesh it moves on."
+msgstr ""
+
+#: doc/classes/Navigation.xml:32
+msgid ""
+"Returns the owner of the [NavigationMesh] which contains the navigation "
+"point closest to the point given. This is usually a "
+"[NavigationMeshInstance]. For meshes added via [method navmesh_add], returns "
+"the owner that was given (or [code]null[/code] if the [code]owner[/code] "
+"parameter was omitted)."
+msgstr ""
+
+#: doc/classes/Navigation.xml:41
+msgid ""
+"Returns the navigation point closest to the given line segment. When "
+"enabling [code]use_collision[/code], only considers intersection points "
+"between segment and navigation meshes. If multiple intersection points are "
+"found, the one closest to the segment start point is returned."
+msgstr ""
+
+#: doc/classes/Navigation.xml:50
+msgid ""
+"Returns the path between two given points. Points are in local coordinate "
+"space. If [code]optimize[/code] is [code]true[/code] (the default), the "
+"agent properties associated with each [NavigationMesh] (radius, height, "
+"etc.) are considered in the path calculation, otherwise they are ignored.\n"
+"[b]Note:[/b] This method has known issues and will often return non-optimal "
+"paths. These issues will be fixed in Godot 4.0."
+msgstr ""
+
+#: doc/classes/Navigation.xml:60
+msgid ""
+"Adds a [NavigationMesh]. Returns an ID for use with [method navmesh_remove] "
+"or [method navmesh_set_transform]. If given, a [Transform2D] is applied to "
+"the polygon. The optional [code]owner[/code] is used as return value for "
+"[method get_closest_point_owner]."
+msgstr ""
+
+#: doc/classes/Navigation.xml:67
+msgid "Removes the [NavigationMesh] with the given ID."
+msgstr ""
+
+#: doc/classes/Navigation.xml:75
+msgid "Sets the transform applied to the [NavigationMesh] with the given ID."
+msgstr ""
+
+#: doc/classes/Navigation.xml:81
+msgid ""
+"Defines which direction is up. By default, this is [code](0, 1, 0)[/code], "
+"which is the world's \"up\" direction."
+msgstr ""
+
+#: doc/classes/Navigation2D.xml:4
+msgid "2D navigation and pathfinding node."
+msgstr ""
+
+#: doc/classes/Navigation2D.xml:7
+msgid ""
+"Navigation2D provides navigation and pathfinding within a 2D area, specified "
+"as a collection of [NavigationPolygon] resources. By default, these are "
+"automatically collected from child [NavigationPolygonInstance] nodes, but "
+"they can also be added on the fly with [method navpoly_add].\n"
+"[b]Note:[/b] The current navigation system has many known issues and will "
+"not always return optimal paths as expected. These issues will be fixed in "
+"Godot 4.0."
+msgstr ""
+
+#: doc/classes/Navigation2D.xml:11 doc/classes/NavigationPolygon.xml:27
+msgid "https://godotengine.org/asset-library/asset/117"
+msgstr ""
+
+#: doc/classes/Navigation2D.xml:25
+msgid ""
+"Returns the owner of the [NavigationPolygon] which contains the navigation "
+"point closest to the point given. This is usually a "
+"[NavigationPolygonInstance]. For polygons added via [method navpoly_add], "
+"returns the owner that was given (or [code]null[/code] if the [code]owner[/"
+"code] parameter was omitted)."
+msgstr ""
+
+#: doc/classes/Navigation2D.xml:34
+msgid ""
+"Returns the path between two given points. Points are in local coordinate "
+"space. If [code]optimize[/code] is [code]true[/code] (the default), the path "
+"is smoothed by merging path segments where possible.\n"
+"[b]Note:[/b] This method has known issues and will often return non-optimal "
+"paths. These issues will be fixed in Godot 4.0."
+msgstr ""
+
+#: doc/classes/Navigation2D.xml:44
+msgid ""
+"Adds a [NavigationPolygon]. Returns an ID for use with [method "
+"navpoly_remove] or [method navpoly_set_transform]. If given, a [Transform2D] "
+"is applied to the polygon. The optional [code]owner[/code] is used as return "
+"value for [method get_closest_point_owner]."
+msgstr ""
+
+#: doc/classes/Navigation2D.xml:51
+msgid "Removes the [NavigationPolygon] with the given ID."
+msgstr ""
+
+#: doc/classes/Navigation2D.xml:59
+msgid ""
+"Sets the transform applied to the [NavigationPolygon] with the given ID."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:4
+msgid "A mesh to approximate the walkable areas and obstacles."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:7
+msgid ""
+"A navigation mesh is a collection of polygons that define which areas of an "
+"environment are traversable to aid agents in pathfinding through complicated "
+"spaces."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:17 doc/classes/NavigationPolygon.xml:49
+msgid ""
+"Adds a polygon using the indices of the vertices you get when calling "
+"[method get_vertices]."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:23
+msgid ""
+"Clears the array of polygons, but it doesn't clear the array of vertices."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:30
+msgid ""
+"Initializes the navigation mesh by setting the vertices and indices "
+"according to a [Mesh]."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:37
+msgid ""
+"Returns whether the specified [code]bit[/code] of the [member geometry/"
+"collision_mask] is set."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:44 doc/classes/NavigationPolygon.xml:81
+msgid ""
+"Returns a [PoolIntArray] containing the indices of the vertices of a created "
+"polygon."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:50
+msgid "Returns the number of polygons in the navigation mesh."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:56
+msgid ""
+"Returns a [PoolVector3Array] containing all the vertices being used to "
+"create the polygons."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:64
+msgid ""
+"If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/"
+"code] in the [member geometry/collision_mask].\n"
+"If [code]value[/code] is [code]false[/code], clears the specified [code]bit[/"
+"code] in the [member geometry/collision_mask]."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:72 doc/classes/NavigationPolygon.xml:121
+msgid ""
+"Sets the vertices that can be then indexed to create polygons with the "
+"[method add_polygon] method."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:78
+msgid ""
+"The minimum floor to ceiling height that will still allow the floor area to "
+"be considered walkable.\n"
+"[b]Note:[/b] While baking, this value will be rounded up to the nearest "
+"multiple of [member cell/height]."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:82
+msgid ""
+"The minimum ledge height that is considered to still be traversable.\n"
+"[b]Note:[/b] While baking, this value will be rounded down to the nearest "
+"multiple of [member cell/height]."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:86
+msgid "The maximum slope that is considered walkable, in degrees."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:89
+msgid ""
+"The distance to erode/shrink the walkable area of the heightfield away from "
+"obstructions.\n"
+"[b]Note:[/b] While baking, this value will be rounded up to the nearest "
+"multiple of [member cell/size]."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:93
+msgid "The Y axis cell size to use for fields."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:96
+msgid "The XZ plane cell size to use for fields."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:99
+msgid ""
+"The sampling distance to use when generating the detail mesh, in cell unit."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:102
+msgid ""
+"The maximum distance the detail mesh surface should deviate from "
+"heightfield, in cell unit."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:105
+msgid ""
+"The maximum distance a simplfied contour's border edges should deviate the "
+"original raw contour."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:108
+msgid ""
+"The maximum allowed length for contour edges along the border of the mesh.\n"
+"[b]Note:[/b] While baking, this value will be rounded up to the nearest "
+"multiple of [member cell/size]."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:112
+msgid ""
+"If [code]true[/code], marks walkable spans as not walkable if the clearance "
+"above the span is less than [member agent/height]."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:115
+msgid "If [code]true[/code], marks spans that are ledges as non-walkable."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:118
+msgid ""
+"If [code]true[/code], marks non-walkable spans as walkable if their maximum "
+"is within [member agent/max_climb] of a walkable neighbor."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:121
+msgid ""
+"The physics layers to scan for static colliders.\n"
+"Only used when [member geometry/parsed_geometry_type] is [constant "
+"PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:125
+msgid ""
+"Determines which type of nodes will be parsed as geometry. See [enum "
+"ParsedGeometryType] for possible values."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:128
+msgid ""
+"The source of the geometry used when baking. See [enum SourceGeometryMode] "
+"for possible values."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:131
+msgid ""
+"The name of the group to scan for geometry.\n"
+"Only used when [member geometry/source_geometry_mode] is [constant "
+"SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant "
+"SOURCE_GEOMETRY_GROUPS_EXPLICIT]."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:135
+msgid ""
+"The maximum number of vertices allowed for polygons generated during the "
+"contour to polygon conversion process."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:138
+msgid ""
+"Any regions with a size smaller than this will be merged with larger regions "
+"if possible.\n"
+"[b]Note:[/b] This value will be squared to calculate the number of cells. "
+"For example, a value of 20 will set the number of cells to 400."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:142
+msgid ""
+"The minimum size of a region for it to be created.\n"
+"[b]Note:[/b] This value will be squared to calculate the minimum number of "
+"cells allowed to form isolated island areas. For example, a value of 8 will "
+"set the number of cells to 64."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:146
+msgid ""
+"Partitioning algorithm for creating the navigation mesh polys. See [enum "
+"SamplePartitionType] for possible values."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:151
+msgid ""
+"Watershed partitioning. Generally the best choice if you precompute the "
+"navigation mesh, use this if you have large open areas."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:154
+msgid ""
+"Monotone partitioning. Use this if you want fast navigation mesh generation."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:157
+msgid ""
+"Layer partitioning. Good choice to use for tiled navigation mesh with medium "
+"and small sized tiles."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:160
+msgid "Represents the size of the [enum SamplePartitionType] enum."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:163
+msgid ""
+"Parses mesh instances as geometry. This includes [MeshInstance], [CSGShape], "
+"and [GridMap] nodes."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:166
+msgid ""
+"Parses [StaticBody] colliders as geometry. The collider should be in any of "
+"the layers specified by [member geometry/collision_mask]."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:169
+msgid ""
+"Both [constant PARSED_GEOMETRY_MESH_INSTANCES] and [constant "
+"PARSED_GEOMETRY_STATIC_COLLIDERS]."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:172
+msgid "Represents the size of the [enum ParsedGeometryType] enum."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:175
+msgid ""
+"Scans the child nodes of [NavigationMeshInstance] recursively for geometry."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:178
+msgid ""
+"Scans nodes in a group and their child nodes recursively for geometry. The "
+"group is specified by [member geometry/source_group_name]."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:181
+msgid ""
+"Uses nodes in a group for geometry. The group is specified by [member "
+"geometry/source_group_name]."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:184
+msgid "Represents the size of the [enum SourceGeometryMode] enum."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml:4
+msgid "Node that instances navigation meshes into a scenario."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml:7
+msgid ""
+"NavigationMeshInstance is a node that takes a [NavigationMesh] resource and "
+"adds it to the current scenario by creating an instance of it."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml:15
+msgid "If [code]true[/code], the navigation mesh will be used by [Navigation]."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml:18
+msgid "The [NavigationMesh] resource for the instance."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml:4
+msgid ""
+"A node that has methods to draw outlines or use indices of vertices to "
+"create navigation polygons."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml:7
+msgid ""
+"There are two ways to create polygons. Either by using the [method "
+"add_outline] method, or using the [method add_polygon] method.\n"
+"Using [method add_outline]:\n"
+"[codeblock]\n"
+"var polygon = NavigationPolygon.new()\n"
+"var outline = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
+"50), Vector2(50, 0)])\n"
+"polygon.add_outline(outline)\n"
+"polygon.make_polygons_from_outlines()\n"
+"$NavigationPolygonInstance.navpoly = polygon\n"
+"[/codeblock]\n"
+"Using [method add_polygon] and indices of the vertices array.\n"
+"[codeblock]\n"
+"var polygon = NavigationPolygon.new()\n"
+"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
+"50), Vector2(50, 0)])\n"
+"polygon.set_vertices(vertices)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
+"polygon.add_polygon(indices)\n"
+"$NavigationPolygonInstance.navpoly = polygon\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml:34
+msgid ""
+"Appends a [PoolVector2Array] that contains the vertices of an outline to the "
+"internal array that contains all the outlines. You have to call [method "
+"make_polygons_from_outlines] in order for this array to be converted to "
+"polygons that the engine will use."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml:42
+msgid ""
+"Adds a [PoolVector2Array] that contains the vertices of an outline to the "
+"internal array that contains all the outlines at a fixed position. You have "
+"to call [method make_polygons_from_outlines] in order for this array to be "
+"converted to polygons that the engine will use."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml:55
+msgid ""
+"Clears the array of the outlines, but it doesn't clear the vertices and the "
+"polygons that were created by them."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml:61
+msgid ""
+"Clears the array of polygons, but it doesn't clear the array of outlines and "
+"vertices."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml:68
+msgid ""
+"Returns a [PoolVector2Array] containing the vertices of an outline that was "
+"created in the editor or by script."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml:74
+msgid ""
+"Returns the number of outlines that were created in the editor or by script."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml:87
+msgid "Returns the count of all polygons."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml:93
+msgid ""
+"Returns a [PoolVector2Array] containing all the vertices being used to "
+"create the polygons."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml:99
+msgid "Creates polygons from the outlines added in the editor or by script."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml:106
+msgid ""
+"Removes an outline created in the editor or by script. You have to call "
+"[method make_polygons_from_outlines] for the polygons to update."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml:114
+msgid ""
+"Changes an outline created in the editor or by script. You have to call "
+"[method make_polygons_from_outlines] for the polygons to update."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:4
+msgid ""
+"PacketPeer implementation using the [url=http://enet.bespin.org/index."
+"html]ENet[/url] library."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:7
+msgid ""
+"A PacketPeer implementation that should be passed to [member SceneTree."
+"network_peer] after being initialized as either a client or server. Events "
+"can then be handled by connecting to [SceneTree] signals.\n"
+"ENet's purpose is to provide a relatively thin, simple and robust network "
+"communication layer on top of UDP (User Datagram Protocol).\n"
+"[b]Note:[/b] ENet only uses UDP, not TCP. When forwarding the server port to "
+"make your server accessible on the public Internet, you only need to forward "
+"the server port in UDP. You can use the [UPNP] class to try to forward the "
+"server port automatically when starting the server."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:12
+#: doc/classes/NetworkedMultiplayerPeer.xml:11
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/networking/"
+"high_level_multiplayer.html"
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:13
+msgid "http://enet.bespin.org/usergroup0.html"
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:20
+msgid ""
+"Closes the connection. Ignored if no connection is currently established. If "
+"this is a server it tries to notify all clients before forcibly "
+"disconnecting them. If this is a client it simply closes the connection to "
+"the server."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:31
+msgid ""
+"Create client that connects to a server at [code]address[/code] using "
+"specified [code]port[/code]. The given address needs to be either a fully "
+"qualified domain name (e.g. [code]\"www.example.com\"[/code]) or an IP "
+"address in IPv4 or IPv6 format (e.g. [code]\"192.168.1.1\"[/code]). The "
+"[code]port[/code] is the port the server is listening on. The "
+"[code]in_bandwidth[/code] and [code]out_bandwidth[/code] parameters can be "
+"used to limit the incoming and outgoing bandwidth to the given number of "
+"bytes per second. The default of 0 means unlimited bandwidth. Note that ENet "
+"will strategically drop packets on specific sides of a connection between "
+"peers to ensure the peer's bandwidth is not overwhelmed. The bandwidth "
+"parameters also determine the window size of a connection which limits the "
+"amount of reliable packets that may be in transit at any given time. Returns "
+"[constant OK] if a client was created, [constant ERR_ALREADY_IN_USE] if this "
+"NetworkedMultiplayerENet instance already has an open connection (in which "
+"case you need to call [method close_connection] first) or [constant "
+"ERR_CANT_CREATE] if the client could not be created. If [code]client_port[/"
+"code] is specified, the client will also listen to the given port; this is "
+"useful for some NAT traversal techniques."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:41
+msgid ""
+"Create server that listens to connections via [code]port[/code]. The port "
+"needs to be an available, unused port between 0 and 65535. Note that ports "
+"below 1024 are privileged and may require elevated permissions depending on "
+"the platform. To change the interface the server listens on, use [method "
+"set_bind_ip]. The default IP is the wildcard [code]\"*\"[/code], which "
+"listens on all available interfaces. [code]max_clients[/code] is the maximum "
+"number of clients that are allowed at once, any number up to 4095 may be "
+"used, although the achievable number of simultaneous clients may be far "
+"lower and depends on the application. For additional details on the "
+"bandwidth parameters, see [method create_client]. Returns [constant OK] if a "
+"server was created, [constant ERR_ALREADY_IN_USE] if this "
+"NetworkedMultiplayerENet instance already has an open connection (in which "
+"case you need to call [method close_connection] first) or [constant "
+"ERR_CANT_CREATE] if the server could not be created."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:49
+msgid ""
+"Disconnect the given peer. If \"now\" is set to [code]true[/code], the "
+"connection will be closed immediately without flushing queued messages."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:55
+msgid ""
+"Returns the channel of the last packet fetched via [method PacketPeer."
+"get_packet]."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:61
+msgid ""
+"Returns the channel of the next packet that will be retrieved via [method "
+"PacketPeer.get_packet]."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:68
+#: modules/websocket/doc_classes/WebSocketServer.xml:27
+msgid "Returns the IP address of the given peer."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:75
+#: modules/websocket/doc_classes/WebSocketServer.xml:34
+msgid "Returns the remote port of the given peer."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:82
+msgid ""
+"The IP used when creating a server. This is set to the wildcard [code]\"*\"[/"
+"code] by default, which binds to all available interfaces. The given IP "
+"needs to be in IPv4 or IPv6 address format, for example: "
+"[code]\"192.168.1.1\"[/code]."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:89
+msgid ""
+"Configure the [X509Certificate] to use when [member use_dtls] is [code]true[/"
+"code]. For servers, you must also setup the [CryptoKey] via [method "
+"set_dtls_key]."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:96
+msgid ""
+"Configure the [CryptoKey] to use when [member use_dtls] is [code]true[/"
+"code]. Remember to also call [method set_dtls_certificate] to setup your "
+"[X509Certificate]."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:106
+msgid ""
+"Sets the timeout parameters for a peer.The timeout parameters control how "
+"and when a peer will timeout from a failure to acknowledge reliable traffic. "
+"Timeout values are expressed in milliseconds.\n"
+"The [code]timeout_limit[/code] is a factor that, multiplied by a value based "
+"on the average round trip time, will determine the timeout limit for a "
+"reliable packet. When that limit is reached, the timeout will be doubled, "
+"and the peer will be disconnected if that limit has reached "
+"[code]timeout_min[/code]. The [code]timeout_max[/code] parameter, on the "
+"other hand, defines a fixed timeout for which any packet must be "
+"acknowledged or the peer will be dropped."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:113
+msgid ""
+"Enforce ordered packets when using [constant NetworkedMultiplayerPeer."
+"TRANSFER_MODE_UNRELIABLE] (thus behaving similarly to [constant "
+"NetworkedMultiplayerPeer.TRANSFER_MODE_UNRELIABLE_ORDERED]). This is the "
+"only way to use ordering with the RPC system."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:116
+msgid ""
+"The number of channels to be used by ENet. Channels are used to separate "
+"different kinds of data. In reliable or ordered mode, for example, the "
+"packet delivery order is ensured on a per-channel basis. This is done to "
+"combat latency and reduces ordering restrictions on packets. The delivery "
+"status of a packet in one channel won't stall the delivery of other packets "
+"in another channel."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:119
+msgid ""
+"The compression method used for network packets. These have different "
+"tradeoffs of compression speed versus bandwidth, you may need to test which "
+"one works best for your use case if you use compression at all.\n"
+"[b]Note:[/b] Most games' network design involve sending many small packets "
+"frequently (smaller than 4 KB each). If in doubt, it is recommended to keep "
+"the default compression algorithm as it works best on these small packets.\n"
+"[b]Note:[/b] [member compression_mode] must be set to the same value on both "
+"the server and all its clients. Clients will fail to connect if the [member "
+"compression_mode] set on the client differs from the one set on the server. "
+"Prior to Godot 3.4, the default [member compression_mode] was [constant "
+"COMPRESS_NONE]. Nonetheless, mixing engine versions between clients and "
+"server is not recommended and not officially supported."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:124
+msgid ""
+"The hostname used for DTLS verification, to be compared against the \"CN\" "
+"value in the certificate provided by the server.\n"
+"When set to an empty string, the [code]address[/code] parameter passed to "
+"[method create_client] is used instead."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:128
+msgid ""
+"Enable or disable certificate verification when [member use_dtls] "
+"[code]true[/code]."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:132
+msgid ""
+"Enable or disable the server feature that notifies clients of other peers' "
+"connection/disconnection, and relays messages between them. When this option "
+"is [code]false[/code], clients won't be automatically notified of other "
+"peers and won't be able to send them packets through the server."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:135
+msgid ""
+"Set the default channel to be used to transfer data. By default, this value "
+"is [code]-1[/code] which means that ENet will only use 2 channels: one for "
+"reliable packets, and one for unreliable packets. The channel [code]0[/code] "
+"is reserved and cannot be used. Setting this member to any value between "
+"[code]0[/code] and [member channel_count] (excluded) will force ENet to use "
+"that channel for sending data. See [member channel_count] for more "
+"information about ENet channels."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:139
+msgid ""
+"When enabled, the client or server created by this peer, will use "
+"[PacketPeerDTLS] instead of raw UDP sockets for communicating with the "
+"remote peer. This will make the communication encrypted with DTLS at the "
+"cost of higher resource usage and potentially larger packet size.\n"
+"[b]Note:[/b] When creating a DTLS server, make sure you setup the key/"
+"certificate pair via [method set_dtls_key] and [method "
+"set_dtls_certificate]. For DTLS clients, have a look at the [member "
+"dtls_verify] option, and configure the certificate accordingly via [method "
+"set_dtls_certificate]."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:145
+msgid ""
+"No compression. This uses the most bandwidth, but has the upside of "
+"requiring the fewest CPU resources. This option may also be used to make "
+"network debugging using tools like Wireshark easier."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:148
+msgid ""
+"ENet's built-in range encoding. Works well on small packets, but is not the "
+"most efficient algorithm on packets larger than 4 KB."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:151
+msgid ""
+"[url=http://fastlz.org/]FastLZ[/url] compression. This option uses less CPU "
+"resources compared to [constant COMPRESS_ZLIB], at the expense of using more "
+"bandwidth."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:154
+msgid ""
+"[url=https://www.zlib.net/]Zlib[/url] compression. This option uses less "
+"bandwidth compared to [constant COMPRESS_FASTLZ], at the expense of using "
+"more CPU resources. Note that this algorithm is not very efficient on "
+"packets smaller than 4 KB. Therefore, it's recommended to use other "
+"compression algorithms in most cases."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:157
+msgid "[url=https://facebook.github.io/zstd/]Zstandard[/url] compression."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:4
+msgid "A high-level network interface to simplify multiplayer interactions."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:7
+msgid ""
+"Manages the connection to network peers. Assigns unique IDs to each client "
+"connected to the server. See also [MultiplayerAPI].\n"
+"[b]Note:[/b] The high-level multiplayer API protocol is an implementation "
+"detail and isn't meant to be used by non-Godot servers. It may change "
+"without notice."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:12
+msgid "https://godotengine.org/asset-library/asset/537"
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:18
+msgid ""
+"Returns the current state of the connection. See [enum ConnectionStatus]."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:24
+msgid ""
+"Returns the ID of the [NetworkedMultiplayerPeer] who sent the most recent "
+"packet."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:30
+msgid "Returns the ID of this [NetworkedMultiplayerPeer]."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:36
+msgid "Waits up to 1 second to receive a new network event."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:43
+msgid ""
+"Sets the peer to which packets will be sent.\n"
+"The [code]id[/code] can be one of: [constant TARGET_PEER_BROADCAST] to send "
+"to all connected peers, [constant TARGET_PEER_SERVER] to send to the peer "
+"acting as server, a valid peer ID to send to that specific peer, a negative "
+"peer ID to send to all peers except that one. By default, the target peer is "
+"[constant TARGET_PEER_BROADCAST]."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:50
+msgid ""
+"If [code]true[/code], this [NetworkedMultiplayerPeer] refuses new "
+"connections."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:53
+msgid ""
+"The manner in which to send packets to the [code]target_peer[/code]. See "
+"[enum TransferMode]."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:59
+msgid "Emitted when a connection attempt fails."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:64
+msgid "Emitted when a connection attempt succeeds."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:70
+msgid "Emitted by the server when a client connects."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:76
+msgid "Emitted by the server when a client disconnects."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:81
+msgid "Emitted by clients when the server disconnects."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:87
+msgid ""
+"Packets are not acknowledged, no resend attempts are made for lost packets. "
+"Packets may arrive in any order. Potentially faster than [constant "
+"TRANSFER_MODE_UNRELIABLE_ORDERED]. Use for non-critical data, and always "
+"consider whether the order matters."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:90
+msgid ""
+"Packets are not acknowledged, no resend attempts are made for lost packets. "
+"Packets are received in the order they were sent in. Potentially faster than "
+"[constant TRANSFER_MODE_RELIABLE]. Use for non-critical data or data that "
+"would be outdated if received late due to resend attempt(s) anyway, for "
+"example movement and positional data."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:93
+msgid ""
+"Packets must be received and resend attempts should be made until the "
+"packets are acknowledged. Packets must be received in the order they were "
+"sent in. Most reliable transfer mode, but potentially the slowest due to the "
+"overhead. Use for critical data that must be transmitted and arrive in "
+"order, for example an ability being triggered or a chat message. Consider "
+"carefully if the information really is critical, and use sparingly."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:96
+msgid "The ongoing connection disconnected."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:99
+msgid "A connection attempt is ongoing."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:102
+msgid "The connection attempt succeeded."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:105
+msgid "Packets are sent to the server and then redistributed to other peers."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:108
+msgid "Packets are sent to the server alone."
+msgstr ""
+
+#: doc/classes/NinePatchRect.xml:4
+msgid ""
+"Scalable texture-based frame that tiles the texture's centers and sides, but "
+"keeps the corners' original size. Perfect for panels and dialog boxes."
+msgstr ""
+
+#: doc/classes/NinePatchRect.xml:7
+msgid ""
+"Also known as 9-slice panels, NinePatchRect produces clean panels of any "
+"size, based on a small texture. To do so, it splits the texture in a 3×3 "
+"grid. When you scale the node, it tiles the texture's sides horizontally or "
+"vertically, the center on both axes but it doesn't scale or tile the corners."
+msgstr ""
+
+#: doc/classes/NinePatchRect.xml:16
+msgid ""
+"Returns the size of the margin identified by the given [enum Margin] "
+"constant."
+msgstr ""
+
+#: doc/classes/NinePatchRect.xml:24
+msgid ""
+"Sets the size of the margin identified by the given [enum Margin] constant "
+"to [code]value[/code] in pixels."
+msgstr ""
+
+#: doc/classes/NinePatchRect.xml:30
+msgid ""
+"The stretch mode to use for horizontal stretching/tiling. See [enum "
+"NinePatchRect.AxisStretchMode] for possible values."
+msgstr ""
+
+#: doc/classes/NinePatchRect.xml:33
+msgid ""
+"The stretch mode to use for vertical stretching/tiling. See [enum "
+"NinePatchRect.AxisStretchMode] for possible values."
+msgstr ""
+
+#: doc/classes/NinePatchRect.xml:36
+msgid ""
+"If [code]true[/code], draw the panel's center. Else, only draw the 9-slice's "
+"borders."
+msgstr ""
+
+#: doc/classes/NinePatchRect.xml:40
+msgid ""
+"The height of the 9-slice's bottom row. A margin of 16 means the 9-slice's "
+"bottom corners and side will have a height of 16 pixels. You can set all 4 "
+"margin values individually to create panels with non-uniform borders."
+msgstr ""
+
+#: doc/classes/NinePatchRect.xml:43
+msgid ""
+"The width of the 9-slice's left column. A margin of 16 means the 9-slice's "
+"left corners and side will have a width of 16 pixels. You can set all 4 "
+"margin values individually to create panels with non-uniform borders."
+msgstr ""
+
+#: doc/classes/NinePatchRect.xml:46
+msgid ""
+"The width of the 9-slice's right column. A margin of 16 means the 9-slice's "
+"right corners and side will have a width of 16 pixels. You can set all 4 "
+"margin values individually to create panels with non-uniform borders."
+msgstr ""
+
+#: doc/classes/NinePatchRect.xml:49
+msgid ""
+"The height of the 9-slice's top row. A margin of 16 means the 9-slice's top "
+"corners and side will have a height of 16 pixels. You can set all 4 margin "
+"values individually to create panels with non-uniform borders."
+msgstr ""
+
+#: doc/classes/NinePatchRect.xml:52
+msgid ""
+"Rectangular region of the texture to sample from. If you're working with an "
+"atlas, use this property to define the area the 9-slice should use. All "
+"other properties are relative to this one. If the rect is empty, "
+"NinePatchRect will use the whole texture."
+msgstr ""
+
+#: doc/classes/NinePatchRect.xml:55
+msgid "The node's texture resource."
+msgstr ""
+
+#: doc/classes/NinePatchRect.xml:61
+msgid "Emitted when the node's texture changes."
+msgstr ""
+
+#: doc/classes/NinePatchRect.xml:67
+msgid ""
+"Stretches the center texture across the NinePatchRect. This may cause the "
+"texture to be distorted."
+msgstr ""
+
+#: doc/classes/NinePatchRect.xml:70
+msgid ""
+"Repeats the center texture across the NinePatchRect. This won't cause any "
+"visible distortion. The texture must be seamless for this to work without "
+"displaying artifacts between edges.\n"
+"[b]Note:[/b] Only supported when using the GLES3 renderer. When using the "
+"GLES2 renderer, this will behave like [constant AXIS_STRETCH_MODE_STRETCH]."
+msgstr ""
+
+#: doc/classes/NinePatchRect.xml:74
+msgid ""
+"Repeats the center texture across the NinePatchRect, but will also stretch "
+"the texture to make sure each tile is visible in full. This may cause the "
+"texture to be distorted, but less than [constant AXIS_STRETCH_MODE_STRETCH]. "
+"The texture must be seamless for this to work without displaying artifacts "
+"between edges.\n"
+"[b]Note:[/b] Only supported when using the GLES3 renderer. When using the "
+"GLES2 renderer, this will behave like [constant AXIS_STRETCH_MODE_STRETCH]."
+msgstr ""
+
+#: doc/classes/Node.xml:4
+msgid "Base class for all [i]scene[/i] objects."
+msgstr ""
+
+#: doc/classes/Node.xml:7
+msgid ""
+"Nodes are Godot's building blocks. They can be assigned as the child of "
+"another node, resulting in a tree arrangement. A given node can contain any "
+"number of nodes as children with the requirement that all siblings (direct "
+"children of a node) should have unique names.\n"
+"A tree of nodes is called a [i]scene[/i]. Scenes can be saved to the disk "
+"and then instanced into other scenes. This allows for very high flexibility "
+"in the architecture and data model of Godot projects.\n"
+"[b]Scene tree:[/b] The [SceneTree] contains the active tree of nodes. When a "
+"node is added to the scene tree, it receives the [constant "
+"NOTIFICATION_ENTER_TREE] notification and its [method _enter_tree] callback "
+"is triggered. Child nodes are always added [i]after[/i] their parent node, i."
+"e. the [method _enter_tree] callback of a parent node will be triggered "
+"before its child's.\n"
+"Once all nodes have been added in the scene tree, they receive the [constant "
+"NOTIFICATION_READY] notification and their respective [method _ready] "
+"callbacks are triggered. For groups of nodes, the [method _ready] callback "
+"is called in reverse order, starting with the children and moving up to the "
+"parent nodes.\n"
+"This means that when adding a node to the scene tree, the following order "
+"will be used for the callbacks: [method _enter_tree] of the parent, [method "
+"_enter_tree] of the children, [method _ready] of the children and finally "
+"[method _ready] of the parent (recursively for the entire scene tree).\n"
+"[b]Processing:[/b] Nodes can override the \"process\" state, so that they "
+"receive a callback on each frame requesting them to process (do something). "
+"Normal processing (callback [method _process], toggled with [method "
+"set_process]) happens as fast as possible and is dependent on the frame "
+"rate, so the processing time [i]delta[/i] (in seconds) is passed as an "
+"argument. Physics processing (callback [method _physics_process], toggled "
+"with [method set_physics_process]) happens a fixed number of times per "
+"second (60 by default) and is useful for code related to the physics "
+"engine.\n"
+"Nodes can also process input events. When present, the [method _input] "
+"function will be called for each input that the program receives. In many "
+"cases, this can be overkill (unless used for simple projects), and the "
+"[method _unhandled_input] function might be preferred; it is called when the "
+"input event was not handled by anyone else (typically, GUI [Control] nodes), "
+"ensuring that the node only receives the events that were meant for it.\n"
+"To keep track of the scene hierarchy (especially when instancing scenes into "
+"other scenes), an \"owner\" can be set for the node with the [member owner] "
+"property. This keeps track of who instanced what. This is mostly useful when "
+"writing editors and tools, though.\n"
+"Finally, when a node is freed with [method Object.free] or [method "
+"queue_free], it will also free all its children.\n"
+"[b]Groups:[/b] Nodes can be added to as many groups as you want to be easy "
+"to manage, you could create groups like \"enemies\" or \"collectables\" for "
+"example, depending on your game. See [method add_to_group], [method "
+"is_in_group] and [method remove_from_group]. You can then retrieve all nodes "
+"in these groups, iterate them and even call methods on groups via the "
+"methods on [SceneTree].\n"
+"[b]Networking with nodes:[/b] After connecting to a server (or making one, "
+"see [NetworkedMultiplayerENet]), it is possible to use the built-in RPC "
+"(remote procedure call) system to communicate over the network. By calling "
+"[method rpc] with a method name, it will be called locally and in all "
+"connected peers (peers = clients and the server that accepts connections). "
+"To identify which node receives the RPC call, Godot will use its [NodePath] "
+"(make sure node names are the same on all peers). Also, take a look at the "
+"high-level networking tutorial and corresponding demos."
+msgstr ""
+
+#: doc/classes/Node.xml:20
+msgid ""
+"https://docs.godotengine.org/en/3.4/getting_started/step_by_step/"
+"scenes_and_nodes.html"
+msgstr ""
+
+#: doc/classes/Node.xml:21
+msgid "https://github.com/godotengine/godot-demo-projects/"
+msgstr ""
+
+#: doc/classes/Node.xml:27
+msgid ""
+"Called when the node enters the [SceneTree] (e.g. upon instancing, scene "
+"changing, or after calling [method add_child] in a script). If the node has "
+"children, its [method _enter_tree] callback will be called first, and then "
+"that of the children.\n"
+"Corresponds to the [constant NOTIFICATION_ENTER_TREE] notification in "
+"[method Object._notification]."
+msgstr ""
+
+#: doc/classes/Node.xml:34
+msgid ""
+"Called when the node is about to leave the [SceneTree] (e.g. upon freeing, "
+"scene changing, or after calling [method remove_child] in a script). If the "
+"node has children, its [method _exit_tree] callback will be called last, "
+"after all its children have left the tree.\n"
+"Corresponds to the [constant NOTIFICATION_EXIT_TREE] notification in [method "
+"Object._notification] and signal [signal tree_exiting]. To get notified when "
+"the node has already left the active tree, connect to the [signal "
+"tree_exited]."
+msgstr ""
+
+#: doc/classes/Node.xml:41
+msgid ""
+"The string returned from this method is displayed as a warning in the Scene "
+"Dock if the script that overrides it is a [code]tool[/code] script.\n"
+"Returning an empty string produces no warning.\n"
+"Call [method update_configuration_warning] when the warning needs to be "
+"updated for this node."
+msgstr ""
+
+#: doc/classes/Node.xml:50
+msgid ""
+"Called when there is an input event. The input event propagates up through "
+"the node tree until a node consumes it.\n"
+"It is only called if input processing is enabled, which is done "
+"automatically if this method is overridden, and can be toggled with [method "
+"set_process_input].\n"
+"To consume the input event and stop it propagating further to other nodes, "
+"[method SceneTree.set_input_as_handled] can be called.\n"
+"For gameplay input, [method _unhandled_input] and [method "
+"_unhandled_key_input] are usually a better fit as they allow the GUI to "
+"intercept the events first.\n"
+"[b]Note:[/b] This method is only called if the node is present in the scene "
+"tree (i.e. if it's not orphan)."
+msgstr ""
+
+#: doc/classes/Node.xml:61
+msgid ""
+"Called during the physics processing step of the main loop. Physics "
+"processing means that the frame rate is synced to the physics, i.e. the "
+"[code]delta[/code] variable should be constant. [code]delta[/code] is in "
+"seconds.\n"
+"It is only called if physics processing is enabled, which is done "
+"automatically if this method is overridden, and can be toggled with [method "
+"set_physics_process].\n"
+"Corresponds to the [constant NOTIFICATION_PHYSICS_PROCESS] notification in "
+"[method Object._notification].\n"
+"[b]Note:[/b] This method is only called if the node is present in the scene "
+"tree (i.e. if it's not orphan)."
+msgstr ""
+
+#: doc/classes/Node.xml:71
+msgid ""
+"Called during the processing step of the main loop. Processing happens at "
+"every frame and as fast as possible, so the [code]delta[/code] time since "
+"the previous frame is not constant. [code]delta[/code] is in seconds.\n"
+"It is only called if processing is enabled, which is done automatically if "
+"this method is overridden, and can be toggled with [method set_process].\n"
+"Corresponds to the [constant NOTIFICATION_PROCESS] notification in [method "
+"Object._notification].\n"
+"[b]Note:[/b] This method is only called if the node is present in the scene "
+"tree (i.e. if it's not orphan)."
+msgstr ""
+
+#: doc/classes/Node.xml:80
+msgid ""
+"Called when the node is \"ready\", i.e. when both the node and its children "
+"have entered the scene tree. If the node has children, their [method _ready] "
+"callbacks get triggered first, and the parent node will receive the ready "
+"notification afterwards.\n"
+"Corresponds to the [constant NOTIFICATION_READY] notification in [method "
+"Object._notification]. See also the [code]onready[/code] keyword for "
+"variables.\n"
+"Usually used for initialization. For even earlier initialization, [method "
+"Object._init] may be used. See also [method _enter_tree].\n"
+"[b]Note:[/b] [method _ready] may be called only once for each node. After "
+"removing a node from the scene tree and adding again, [code]_ready[/code] "
+"will not be called for the second time. This can be bypassed with requesting "
+"another call with [method request_ready], which may be called anywhere "
+"before adding the node again."
+msgstr ""
+
+#: doc/classes/Node.xml:90
+msgid ""
+"Called when an [InputEvent] hasn't been consumed by [method _input] or any "
+"GUI. The input event propagates up through the node tree until a node "
+"consumes it.\n"
+"It is only called if unhandled input processing is enabled, which is done "
+"automatically if this method is overridden, and can be toggled with [method "
+"set_process_unhandled_input].\n"
+"To consume the input event and stop it propagating further to other nodes, "
+"[method SceneTree.set_input_as_handled] can be called.\n"
+"For gameplay input, this and [method _unhandled_key_input] are usually a "
+"better fit than [method _input] as they allow the GUI to intercept the "
+"events first.\n"
+"[b]Note:[/b] This method is only called if the node is present in the scene "
+"tree (i.e. if it's not orphan)."
+msgstr ""
+
+#: doc/classes/Node.xml:101
+msgid ""
+"Called when an [InputEventKey] hasn't been consumed by [method _input] or "
+"any GUI. The input event propagates up through the node tree until a node "
+"consumes it.\n"
+"It is only called if unhandled key input processing is enabled, which is "
+"done automatically if this method is overridden, and can be toggled with "
+"[method set_process_unhandled_key_input].\n"
+"To consume the input event and stop it propagating further to other nodes, "
+"[method SceneTree.set_input_as_handled] can be called.\n"
+"For gameplay input, this and [method _unhandled_input] are usually a better "
+"fit than [method _input] as they allow the GUI to intercept the events "
+"first.\n"
+"[b]Note:[/b] This method is only called if the node is present in the scene "
+"tree (i.e. if it's not orphan)."
+msgstr ""
+
+#: doc/classes/Node.xml:113
+msgid ""
+"Adds a child node. Nodes can have any number of children, but every child "
+"must have a unique name. Child nodes are automatically deleted when the "
+"parent node is deleted, so an entire scene can be removed by deleting its "
+"topmost node.\n"
+"If [code]legible_unique_name[/code] is [code]true[/code], the child node "
+"will have a human-readable name based on the name of the node being "
+"instanced instead of its type.\n"
+"[b]Note:[/b] If the child node already has a parent, the function will fail. "
+"Use [method remove_child] first to remove the node from its current parent. "
+"For example:\n"
+"[codeblock]\n"
+"if child_node.get_parent():\n"
+" child_node.get_parent().remove_child(child_node)\n"
+"add_child(child_node)\n"
+"[/codeblock]\n"
+"[b]Note:[/b] If you want a child to be persisted to a [PackedScene], you "
+"must set [member owner] in addition to calling [method add_child]. This is "
+"typically relevant for [url=https://godot.readthedocs.io/en/3.2/tutorials/"
+"misc/running_code_in_the_editor.html]tool scripts[/url] and [url=https://"
+"godot.readthedocs.io/en/latest/tutorials/plugins/editor/index.html]editor "
+"plugins[/url]. If [method add_child] is called without setting [member "
+"owner], the newly added [Node] will not be visible in the scene tree, though "
+"it will be visible in the 2D/3D view."
+msgstr ""
+
+#: doc/classes/Node.xml:130
+msgid ""
+"Adds [code]child_node[/code] as a child. The child is placed below the given "
+"[code]node[/code] in the list of children.\n"
+"If [code]legible_unique_name[/code] is [code]true[/code], the child node "
+"will have a human-readable name based on the name of the node being "
+"instanced instead of its type."
+msgstr ""
+
+#: doc/classes/Node.xml:139
+msgid ""
+"Adds the node to a group. Groups are helpers to name and organize a subset "
+"of nodes, for example \"enemies\" or \"collectables\". A node can be in any "
+"number of groups. Nodes can be assigned a group at any time, but will not be "
+"added until they are inside the scene tree (see [method is_inside_tree]). "
+"See notes in the description, and the group methods in [SceneTree].\n"
+"The [code]persistent[/code] option is used when packing node to "
+"[PackedScene] and saving to file. Non-persistent groups aren't stored.\n"
+"[b]Note:[/b] For performance reasons, the order of node groups is [i]not[/i] "
+"guaranteed. The order of node groups should not be relied upon as it can "
+"vary across project runs."
+msgstr ""
+
+#: doc/classes/Node.xml:147
+msgid ""
+"Returns [code]true[/code] if the node can process while the scene tree is "
+"paused (see [member pause_mode]). Always returns [code]true[/code] if the "
+"scene tree is not paused, and [code]false[/code] if the node is not in the "
+"tree."
+msgstr ""
+
+#: doc/classes/Node.xml:154
+msgid ""
+"Duplicates the node, returning a new node.\n"
+"You can fine-tune the behavior using the [code]flags[/code] (see [enum "
+"DuplicateFlags]).\n"
+"[b]Note:[/b] It will not work properly if the node contains a script with "
+"constructor arguments (i.e. needs to supply arguments to [method Object."
+"_init] method). In that case, the node will be duplicated without a script."
+msgstr ""
+
+#: doc/classes/Node.xml:165
+msgid ""
+"Finds a descendant of this node whose name matches [code]mask[/code] as in "
+"[method String.match] (i.e. case-sensitive, but [code]\"*\"[/code] matches "
+"zero or more characters and [code]\"?\"[/code] matches any single character "
+"except [code]\".\"[/code]).\n"
+"[b]Note:[/b] It does not match against the full path, just against "
+"individual node names.\n"
+"If [code]owned[/code] is [code]true[/code], this method only finds nodes "
+"whose owner is this node. This is especially important for scenes "
+"instantiated through a script, because those scenes don't have an owner.\n"
+"[b]Note:[/b] As this method walks through all the descendants of the node, "
+"it is the slowest way to get a reference to another node. Whenever possible, "
+"consider using [method get_node] instead. To avoid using [method find_node] "
+"too often, consider caching the node reference into a variable."
+msgstr ""
+
+#: doc/classes/Node.xml:175
+msgid ""
+"Finds the first parent of the current node whose name matches [code]mask[/"
+"code] as in [method String.match] (i.e. case-sensitive, but [code]\"*\"[/"
+"code] matches zero or more characters and [code]\"?\"[/code] matches any "
+"single character except [code]\".\"[/code]).\n"
+"[b]Note:[/b] It does not match against the full path, just against "
+"individual node names.\n"
+"[b]Note:[/b] As this method walks upwards in the scene tree, it can be slow "
+"in large, deeply nested scene trees. Whenever possible, consider using "
+"[method get_node] instead. To avoid using [method find_parent] too often, "
+"consider caching the node reference into a variable."
+msgstr ""
+
+#: doc/classes/Node.xml:184
+msgid ""
+"Returns a child node by its index (see [method get_child_count]). This "
+"method is often used for iterating all children of a node.\n"
+"To access a child node via its name, use [method get_node]."
+msgstr ""
+
+#: doc/classes/Node.xml:191
+msgid "Returns the number of child nodes."
+msgstr ""
+
+#: doc/classes/Node.xml:197
+msgid "Returns an array of references to node's children."
+msgstr ""
+
+#: doc/classes/Node.xml:203
+msgid ""
+"Returns an array listing the groups that the node is a member of.\n"
+"[b]Note:[/b] For performance reasons, the order of node groups is [i]not[/i] "
+"guaranteed. The order of node groups should not be relied upon as it can "
+"vary across project runs."
+msgstr ""
+
+#: doc/classes/Node.xml:210
+msgid ""
+"Returns the node's index, i.e. its position among the siblings of its parent."
+msgstr ""
+
+#: doc/classes/Node.xml:216
+msgid ""
+"Returns the peer ID of the network master for this node. See [method "
+"set_network_master]."
+msgstr ""
+
+#: doc/classes/Node.xml:223
+msgid ""
+"Fetches a node. The [NodePath] can be either a relative path (from the "
+"current node) or an absolute path (in the scene tree) to a node. If the path "
+"does not exist, a [code]null instance[/code] is returned and an error is "
+"logged. Attempts to access methods on the return value will result in an "
+"\"Attempt to call <method> on a null instance.\" error.\n"
+"[b]Note:[/b] Fetching absolute paths only works when the node is inside the "
+"scene tree (see [method is_inside_tree]).\n"
+"[b]Example:[/b] Assume your current node is Character and the following "
+"tree:\n"
+"[codeblock]\n"
+"/root\n"
+"/root/Character\n"
+"/root/Character/Sword\n"
+"/root/Character/Backpack/Dagger\n"
+"/root/MyGame\n"
+"/root/Swamp/Alligator\n"
+"/root/Swamp/Mosquito\n"
+"/root/Swamp/Goblin\n"
+"[/codeblock]\n"
+"Possible paths are:\n"
+"[codeblock]\n"
+"get_node(\"Sword\")\n"
+"get_node(\"Backpack/Dagger\")\n"
+"get_node(\"../Swamp/Alligator\")\n"
+"get_node(\"/root/MyGame\")\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Node.xml:249
+msgid ""
+"Fetches a node and one of its resources as specified by the [NodePath]'s "
+"subname (e.g. [code]Area2D/CollisionShape2D:shape[/code]). If several nested "
+"resources are specified in the [NodePath], the last one will be fetched.\n"
+"The return value is an array of size 3: the first index points to the [Node] "
+"(or [code]null[/code] if not found), the second index points to the "
+"[Resource] (or [code]null[/code] if not found), and the third index is the "
+"remaining [NodePath], if any.\n"
+"For example, assuming that [code]Area2D/CollisionShape2D[/code] is a valid "
+"node and that its [code]shape[/code] property has been assigned a "
+"[RectangleShape2D] resource, one could have this kind of output:\n"
+"[codeblock]\n"
+"print(get_node_and_resource(\"Area2D/CollisionShape2D\")) # "
+"[[CollisionShape2D:1161], Null, ]\n"
+"print(get_node_and_resource(\"Area2D/CollisionShape2D:shape\")) # "
+"[[CollisionShape2D:1161], [RectangleShape2D:1156], ]\n"
+"print(get_node_and_resource(\"Area2D/CollisionShape2D:shape:extents\")) # "
+"[[CollisionShape2D:1161], [RectangleShape2D:1156], :extents]\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Node.xml:263
+msgid ""
+"Similar to [method get_node], but does not log an error if [code]path[/code] "
+"does not point to a valid [Node]."
+msgstr ""
+
+#: doc/classes/Node.xml:269
+msgid ""
+"Returns the parent node of the current node, or a [code]null instance[/code] "
+"if the node lacks a parent."
+msgstr ""
+
+#: doc/classes/Node.xml:275
+msgid ""
+"Returns the absolute path of the current node. This only works if the "
+"current node is inside the scene tree (see [method is_inside_tree])."
+msgstr ""
+
+#: doc/classes/Node.xml:282
+msgid ""
+"Returns the relative [NodePath] from this node to the specified [code]node[/"
+"code]. Both nodes must be in the same scene or the function will fail."
+msgstr ""
+
+#: doc/classes/Node.xml:288
+msgid ""
+"Returns the time elapsed (in seconds) since the last physics-bound frame "
+"(see [method _physics_process]). This is always a constant value in physics "
+"processing unless the frames per second is changed via [member Engine."
+"iterations_per_second]."
+msgstr ""
+
+#: doc/classes/Node.xml:294
+msgid ""
+"Returns the node's order in the scene tree branch. For example, if called on "
+"the first child node the position is [code]0[/code]."
+msgstr ""
+
+#: doc/classes/Node.xml:300
+msgid ""
+"Returns the time elapsed (in seconds) since the last process callback. This "
+"value may vary from frame to frame."
+msgstr ""
+
+#: doc/classes/Node.xml:306
+msgid ""
+"Returns [code]true[/code] if this is an instance load placeholder. See "
+"[InstancePlaceholder]."
+msgstr ""
+
+#: doc/classes/Node.xml:312
+msgid "Returns the [SceneTree] that contains this node."
+msgstr ""
+
+#: doc/classes/Node.xml:318
+msgid "Returns the node's [Viewport]."
+msgstr ""
+
+#: doc/classes/Node.xml:325
+msgid ""
+"Returns [code]true[/code] if the node that the [NodePath] points to exists."
+msgstr ""
+
+#: doc/classes/Node.xml:332
+msgid ""
+"Returns [code]true[/code] if the [NodePath] points to a valid node and its "
+"subname points to a valid resource, e.g. [code]Area2D/CollisionShape2D:"
+"shape[/code]. Properties with a non-[Resource] type (e.g. nodes or primitive "
+"math types) are not considered resources."
+msgstr ""
+
+#: doc/classes/Node.xml:339
+msgid ""
+"Returns [code]true[/code] if the given node is a direct or indirect child of "
+"the current node."
+msgstr ""
+
+#: doc/classes/Node.xml:345
+msgid ""
+"Returns [code]true[/code] if the node is folded (collapsed) in the Scene "
+"dock."
+msgstr ""
+
+#: doc/classes/Node.xml:352
+msgid ""
+"Returns [code]true[/code] if the given node occurs later in the scene "
+"hierarchy than the current node."
+msgstr ""
+
+#: doc/classes/Node.xml:359
+msgid ""
+"Returns [code]true[/code] if this node is in the specified group. See notes "
+"in the description, and the group methods in [SceneTree]."
+msgstr ""
+
+#: doc/classes/Node.xml:365
+msgid ""
+"Returns [code]true[/code] if this node is currently inside a [SceneTree]."
+msgstr ""
+
+#: doc/classes/Node.xml:371
+msgid ""
+"Returns [code]true[/code] if the local system is the master of this node."
+msgstr ""
+
+#: doc/classes/Node.xml:377
+msgid ""
+"Returns [code]true[/code] if physics processing is enabled (see [method "
+"set_physics_process])."
+msgstr ""
+
+#: doc/classes/Node.xml:383
+msgid ""
+"Returns [code]true[/code] if internal physics processing is enabled (see "
+"[method set_physics_process_internal])."
+msgstr ""
+
+#: doc/classes/Node.xml:389
+msgid ""
+"Returns [code]true[/code] if processing is enabled (see [method "
+"set_process])."
+msgstr ""
+
+#: doc/classes/Node.xml:395
+msgid ""
+"Returns [code]true[/code] if the node is processing input (see [method "
+"set_process_input])."
+msgstr ""
+
+#: doc/classes/Node.xml:401
+msgid ""
+"Returns [code]true[/code] if internal processing is enabled (see [method "
+"set_process_internal])."
+msgstr ""
+
+#: doc/classes/Node.xml:407
+msgid ""
+"Returns [code]true[/code] if the node is processing unhandled input (see "
+"[method set_process_unhandled_input])."
+msgstr ""
+
+#: doc/classes/Node.xml:413
+msgid ""
+"Returns [code]true[/code] if the node is processing unhandled key input (see "
+"[method set_process_unhandled_key_input])."
+msgstr ""
+
+#: doc/classes/Node.xml:421
+msgid ""
+"Moves a child node to a different position (order) among the other children. "
+"Since calls, signals, etc are performed by tree order, changing the order of "
+"children nodes may be useful."
+msgstr ""
+
+#: doc/classes/Node.xml:427
+msgid ""
+"Prints all stray nodes (nodes outside the [SceneTree]). Used for debugging. "
+"Works only in debug builds."
+msgstr ""
+
+#: doc/classes/Node.xml:433
+msgid ""
+"Prints the tree to stdout. Used mainly for debugging purposes. This version "
+"displays the path relative to the current node, and is good for copy/pasting "
+"into the [method get_node] function.\n"
+"[b]Example output:[/b]\n"
+"[codeblock]\n"
+"TheGame\n"
+"TheGame/Menu\n"
+"TheGame/Menu/Label\n"
+"TheGame/Menu/Camera2D\n"
+"TheGame/SplashScreen\n"
+"TheGame/SplashScreen/Camera2D\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Node.xml:448
+msgid ""
+"Similar to [method print_tree], this prints the tree to stdout. This version "
+"displays a more graphical representation similar to what is displayed in the "
+"scene inspector. It is useful for inspecting larger trees.\n"
+"[b]Example output:[/b]\n"
+"[codeblock]\n"
+" â”–â•´TheGame\n"
+" â” â•´Menu\n"
+" ┃ ┠╴Label\n"
+" ┃ ┖╴Camera2D\n"
+" â”–â•´SplashScreen\n"
+" â”–â•´Camera2D\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Node.xml:466
+msgid ""
+"Calls the given method (if present) with the arguments given in [code]args[/"
+"code] on this node and recursively on all its children. If the "
+"[code]parent_first[/code] argument is [code]true[/code], the method will be "
+"called on the current node first, then on all its children. If "
+"[code]parent_first[/code] is [code]false[/code], the children will be called "
+"first."
+msgstr ""
+
+#: doc/classes/Node.xml:473
+msgid ""
+"Notifies the current node and all its children recursively by calling "
+"[method Object.notification] on all of them."
+msgstr ""
+
+#: doc/classes/Node.xml:479
+msgid ""
+"Queues a node for deletion at the end of the current frame. When deleted, "
+"all of its child nodes will be deleted as well. This method ensures it's "
+"safe to delete the node, contrary to [method Object.free]. Use [method "
+"Object.is_queued_for_deletion] to check whether a node will be deleted at "
+"the end of the frame.\n"
+"[b]Important:[/b] If you have a variable pointing to a node, it will [i]not[/"
+"i] be assigned to [code]null[/code] once the node is freed. Instead, it will "
+"point to a [i]previously freed instance[/i] and you should validate it with "
+"[method @GDScript.is_instance_valid] before attempting to call its methods "
+"or access its properties."
+msgstr ""
+
+#: doc/classes/Node.xml:486
+msgid ""
+"Moves this node to the bottom of parent node's children hierarchy. This is "
+"often useful in GUIs ([Control] nodes), because their order of drawing "
+"depends on their order in the tree. The top Node is drawn first, then any "
+"siblings below the top Node in the hierarchy are successively drawn on top "
+"of it. After using [code]raise[/code], a Control will be drawn on top of its "
+"siblings."
+msgstr ""
+
+#: doc/classes/Node.xml:492
+msgid ""
+"Removes a node and sets all its children as children of the parent node (if "
+"it exists). All event subscriptions that pass by the removed node will be "
+"unsubscribed."
+msgstr ""
+
+#: doc/classes/Node.xml:499
+msgid ""
+"Removes a child node. The node is NOT deleted and must be deleted manually.\n"
+"[b]Note:[/b] This function may set the [member owner] of the removed Node "
+"(or its descendants) to be [code]null[/code], if that [member owner] is no "
+"longer a parent or ancestor."
+msgstr ""
+
+#: doc/classes/Node.xml:507
+msgid ""
+"Removes a node from a group. See notes in the description, and the group "
+"methods in [SceneTree]."
+msgstr ""
+
+#: doc/classes/Node.xml:515
+msgid ""
+"Replaces a node in a scene by the given one. Subscriptions that pass through "
+"this node will be lost."
+msgstr ""
+
+#: doc/classes/Node.xml:521
+msgid ""
+"Requests that [code]_ready[/code] be called again. Note that the method "
+"won't be called immediately, but is scheduled for when the node is added to "
+"the scene tree again (see [method _ready]). [code]_ready[/code] is called "
+"only for the node which requested it, which means that you need to request "
+"ready for each child if you want them to call [code]_ready[/code] too (in "
+"which case, [code]_ready[/code] will be called in the same order as it would "
+"normally)."
+msgstr ""
+
+#: doc/classes/Node.xml:528
+msgid ""
+"Sends a remote procedure call request for the given [code]method[/code] to "
+"peers on the network (and locally), optionally sending all additional "
+"arguments as arguments to the method called by the RPC. The call request "
+"will only be received by nodes with the same [NodePath], including the exact "
+"same node name. Behaviour depends on the RPC configuration for the given "
+"method, see [method rpc_config]. Methods are not exposed to RPCs by default. "
+"See also [method rset] and [method rset_config] for properties. Returns an "
+"empty [Variant].\n"
+"[b]Note:[/b] You can only safely use RPCs on clients after you received the "
+"[code]connected_to_server[/code] signal from the [SceneTree]. You also need "
+"to keep track of the connection state, either by the [SceneTree] signals "
+"like [code]server_disconnected[/code] or by checking [code]SceneTree."
+"network_peer.get_connection_status() == CONNECTION_CONNECTED[/code]."
+msgstr ""
+
+#: doc/classes/Node.xml:537
+msgid ""
+"Changes the RPC mode for the given [code]method[/code] to the given "
+"[code]mode[/code]. See [enum MultiplayerAPI.RPCMode]. An alternative is "
+"annotating methods and properties with the corresponding keywords "
+"([code]remote[/code], [code]master[/code], [code]puppet[/code], "
+"[code]remotesync[/code], [code]mastersync[/code], [code]puppetsync[/code]). "
+"By default, methods are not exposed to networking (and RPCs). See also "
+"[method rset] and [method rset_config] for properties."
+msgstr ""
+
+#: doc/classes/Node.xml:545
+msgid ""
+"Sends a [method rpc] to a specific peer identified by [code]peer_id[/code] "
+"(see [method NetworkedMultiplayerPeer.set_target_peer]). Returns an empty "
+"[Variant]."
+msgstr ""
+
+#: doc/classes/Node.xml:552
+msgid ""
+"Sends a [method rpc] using an unreliable protocol. Returns an empty "
+"[Variant]."
+msgstr ""
+
+#: doc/classes/Node.xml:560
+msgid ""
+"Sends a [method rpc] to a specific peer identified by [code]peer_id[/code] "
+"using an unreliable protocol (see [method NetworkedMultiplayerPeer."
+"set_target_peer]). Returns an empty [Variant]."
+msgstr ""
+
+#: doc/classes/Node.xml:568
+msgid ""
+"Remotely changes a property's value on other peers (and locally). Behaviour "
+"depends on the RPC configuration for the given property, see [method "
+"rset_config]. See also [method rpc] for RPCs for methods, most information "
+"applies to this method as well."
+msgstr ""
+
+#: doc/classes/Node.xml:576
+msgid ""
+"Changes the RPC mode for the given [code]property[/code] to the given "
+"[code]mode[/code]. See [enum MultiplayerAPI.RPCMode]. An alternative is "
+"annotating methods and properties with the corresponding keywords "
+"([code]remote[/code], [code]master[/code], [code]puppet[/code], "
+"[code]remotesync[/code], [code]mastersync[/code], [code]puppetsync[/code]). "
+"By default, properties are not exposed to networking (and RPCs). See also "
+"[method rpc] and [method rpc_config] for methods."
+msgstr ""
+
+#: doc/classes/Node.xml:585
+msgid ""
+"Remotely changes the property's value on a specific peer identified by "
+"[code]peer_id[/code] (see [method NetworkedMultiplayerPeer.set_target_peer])."
+msgstr ""
+
+#: doc/classes/Node.xml:593
+msgid ""
+"Remotely changes the property's value on other peers (and locally) using an "
+"unreliable protocol."
+msgstr ""
+
+#: doc/classes/Node.xml:602
+msgid ""
+"Remotely changes property's value on a specific peer identified by "
+"[code]peer_id[/code] using an unreliable protocol (see [method "
+"NetworkedMultiplayerPeer.set_target_peer])."
+msgstr ""
+
+#: doc/classes/Node.xml:609
+msgid "Sets the folded state of the node in the Scene dock."
+msgstr ""
+
+#: doc/classes/Node.xml:617
+msgid ""
+"Sets the node's network master to the peer with the given peer ID. The "
+"network master is the peer that has authority over the node on the network. "
+"Useful in conjunction with the [code]master[/code] and [code]puppet[/code] "
+"keywords. Inherited from the parent node by default, which ultimately "
+"defaults to peer ID 1 (the server). If [code]recursive[/code], the given "
+"peer is recursively set as the master for all children of this node."
+msgstr ""
+
+#: doc/classes/Node.xml:624
+msgid ""
+"Enables or disables physics (i.e. fixed framerate) processing. When a node "
+"is being processed, it will receive a [constant "
+"NOTIFICATION_PHYSICS_PROCESS] at a fixed (usually 60 FPS, see [member Engine."
+"iterations_per_second] to change) interval (and the [method "
+"_physics_process] callback will be called if exists). Enabled automatically "
+"if [method _physics_process] is overridden. Any calls to this before [method "
+"_ready] will be ignored."
+msgstr ""
+
+#: doc/classes/Node.xml:631
+msgid ""
+"Enables or disables internal physics for this node. Internal physics "
+"processing happens in isolation from the normal [method _physics_process] "
+"calls and is used by some nodes internally to guarantee proper functioning "
+"even if the node is paused or physics processing is disabled for scripting "
+"([method set_physics_process]). Only useful for advanced uses to manipulate "
+"built-in nodes' behavior.\n"
+"[b]Warning:[/b] Built-in Nodes rely on the internal processing for their own "
+"logic, so changing this value from your code may lead to unexpected "
+"behavior. Script access to this internal logic is provided for specific "
+"advanced uses, but is unsafe and not supported."
+msgstr ""
+
+#: doc/classes/Node.xml:639
+msgid ""
+"Enables or disables processing. When a node is being processed, it will "
+"receive a [constant NOTIFICATION_PROCESS] on every drawn frame (and the "
+"[method _process] callback will be called if exists). Enabled automatically "
+"if [method _process] is overridden. Any calls to this before [method _ready] "
+"will be ignored."
+msgstr ""
+
+#: doc/classes/Node.xml:646
+msgid ""
+"Enables or disables input processing. This is not required for GUI controls! "
+"Enabled automatically if [method _input] is overridden. Any calls to this "
+"before [method _ready] will be ignored."
+msgstr ""
+
+#: doc/classes/Node.xml:653
+msgid ""
+"Enables or disabled internal processing for this node. Internal processing "
+"happens in isolation from the normal [method _process] calls and is used by "
+"some nodes internally to guarantee proper functioning even if the node is "
+"paused or processing is disabled for scripting ([method set_process]). Only "
+"useful for advanced uses to manipulate built-in nodes' behavior.\n"
+"[b]Warning:[/b] Built-in Nodes rely on the internal processing for their own "
+"logic, so changing this value from your code may lead to unexpected "
+"behavior. Script access to this internal logic is provided for specific "
+"advanced uses, but is unsafe and not supported."
+msgstr ""
+
+#: doc/classes/Node.xml:661
+msgid ""
+"Enables unhandled input processing. This is not required for GUI controls! "
+"It enables the node to receive all input that was not previously handled "
+"(usually by a [Control]). Enabled automatically if [method _unhandled_input] "
+"is overridden. Any calls to this before [method _ready] will be ignored."
+msgstr ""
+
+#: doc/classes/Node.xml:668
+msgid ""
+"Enables unhandled key input processing. Enabled automatically if [method "
+"_unhandled_key_input] is overridden. Any calls to this before [method "
+"_ready] will be ignored."
+msgstr ""
+
+#: doc/classes/Node.xml:675
+msgid ""
+"Sets whether this is an instance load placeholder. See [InstancePlaceholder]."
+msgstr ""
+
+#: doc/classes/Node.xml:681
+msgid ""
+"Updates the warning displayed for this node in the Scene Dock.\n"
+"Use [method _get_configuration_warning] to setup the warning message to "
+"display."
+msgstr ""
+
+#: doc/classes/Node.xml:688
+msgid ""
+"The override to the default [MultiplayerAPI]. Set to [code]null[/code] to "
+"use the default [SceneTree] one."
+msgstr ""
+
+#: doc/classes/Node.xml:691
+msgid ""
+"If a scene is instantiated from a file, its topmost node contains the "
+"absolute file path from which it was loaded in [member filename] (e.g. "
+"[code]res://levels/1.tscn[/code]). Otherwise, [member filename] is set to an "
+"empty string."
+msgstr ""
+
+#: doc/classes/Node.xml:694
+msgid ""
+"The [MultiplayerAPI] instance associated with this node. Either the [member "
+"custom_multiplayer], or the default SceneTree one (if inside tree)."
+msgstr ""
+
+#: doc/classes/Node.xml:697
+msgid ""
+"The name of the node. This name is unique among the siblings (other child "
+"nodes from the same parent). When set to an existing name, the node will be "
+"automatically renamed.\n"
+"[b]Note:[/b] Auto-generated names might include the [code]@[/code] "
+"character, which is reserved for unique names when using [method add_child]. "
+"When setting the name manually, any [code]@[/code] will be removed."
+msgstr ""
+
+#: doc/classes/Node.xml:701
+msgid ""
+"The node owner. A node can have any other node as owner (as long as it is a "
+"valid parent, grandparent, etc. ascending in the tree). When saving a node "
+"(using [PackedScene]), all the nodes it owns will be saved with it. This "
+"allows for the creation of complex [SceneTree]s, with instancing and "
+"subinstancing."
+msgstr ""
+
+#: doc/classes/Node.xml:704
+msgid "Pause mode. How the node will behave if the [SceneTree] is paused."
+msgstr ""
+
+#: doc/classes/Node.xml:707
+msgid ""
+"The node's priority in the execution order of the enabled processing "
+"callbacks (i.e. [constant NOTIFICATION_PROCESS], [constant "
+"NOTIFICATION_PHYSICS_PROCESS] and their internal counterparts). Nodes whose "
+"process priority value is [i]lower[/i] will have their processing callbacks "
+"executed first."
+msgstr ""
+
+#: doc/classes/Node.xml:713
+msgid "Emitted when the node is ready."
+msgstr ""
+
+#: doc/classes/Node.xml:718
+msgid "Emitted when the node is renamed."
+msgstr ""
+
+#: doc/classes/Node.xml:723
+msgid "Emitted when the node enters the tree."
+msgstr ""
+
+#: doc/classes/Node.xml:728
+msgid "Emitted after the node exits the tree and is no longer active."
+msgstr ""
+
+#: doc/classes/Node.xml:733
+msgid ""
+"Emitted when the node is still active but about to exit the tree. This is "
+"the right place for de-initialization (or a \"destructor\", if you will)."
+msgstr ""
+
+#: doc/classes/Node.xml:739
+msgid "Notification received when the node enters a [SceneTree]."
+msgstr ""
+
+#: doc/classes/Node.xml:742
+msgid "Notification received when the node is about to exit a [SceneTree]."
+msgstr ""
+
+#: doc/classes/Node.xml:745
+msgid "Notification received when the node is moved in the parent."
+msgstr ""
+
+#: doc/classes/Node.xml:748
+msgid "Notification received when the node is ready. See [method _ready]."
+msgstr ""
+
+#: doc/classes/Node.xml:751
+msgid "Notification received when the node is paused."
+msgstr ""
+
+#: doc/classes/Node.xml:754
+msgid "Notification received when the node is unpaused."
+msgstr ""
+
+#: doc/classes/Node.xml:757
+msgid ""
+"Notification received every frame when the physics process flag is set (see "
+"[method set_physics_process])."
+msgstr ""
+
+#: doc/classes/Node.xml:760
+msgid ""
+"Notification received every frame when the process flag is set (see [method "
+"set_process])."
+msgstr ""
+
+#: doc/classes/Node.xml:763
+msgid ""
+"Notification received when a node is set as a child of another node.\n"
+"[b]Note:[/b] This doesn't mean that a node entered the [SceneTree]."
+msgstr ""
+
+#: doc/classes/Node.xml:767
+msgid ""
+"Notification received when a node is unparented (parent removed it from the "
+"list of children)."
+msgstr ""
+
+#: doc/classes/Node.xml:770
+msgid "Notification received when the node is instanced."
+msgstr ""
+
+#: doc/classes/Node.xml:773
+msgid "Notification received when a drag begins."
+msgstr ""
+
+#: doc/classes/Node.xml:776
+msgid "Notification received when a drag ends."
+msgstr ""
+
+#: doc/classes/Node.xml:779
+msgid "Notification received when the node's [NodePath] changed."
+msgstr ""
+
+#: doc/classes/Node.xml:782
+msgid ""
+"Notification received every frame when the internal process flag is set (see "
+"[method set_process_internal])."
+msgstr ""
+
+#: doc/classes/Node.xml:785
+msgid ""
+"Notification received every frame when the internal physics process flag is "
+"set (see [method set_physics_process_internal])."
+msgstr ""
+
+#: doc/classes/Node.xml:788
+msgid ""
+"Notification received when the node is ready, just before [constant "
+"NOTIFICATION_READY] is received. Unlike the latter, it's sent every time the "
+"node enters tree, instead of only once."
+msgstr ""
+
+#: doc/classes/Node.xml:846
+msgid ""
+"Inherits pause mode from the node's parent. For the root node, it is "
+"equivalent to [constant PAUSE_MODE_STOP]. Default."
+msgstr ""
+
+#: doc/classes/Node.xml:849
+msgid "Stops processing when the [SceneTree] is paused."
+msgstr ""
+
+#: doc/classes/Node.xml:852
+msgid "Continue to process regardless of the [SceneTree] pause state."
+msgstr ""
+
+#: doc/classes/Node.xml:855
+msgid "Duplicate the node's signals."
+msgstr ""
+
+#: doc/classes/Node.xml:858
+msgid "Duplicate the node's groups."
+msgstr ""
+
+#: doc/classes/Node.xml:861
+msgid "Duplicate the node's scripts."
+msgstr ""
+
+#: doc/classes/Node.xml:864
+msgid ""
+"Duplicate using instancing.\n"
+"An instance stays linked to the original so when the original changes, the "
+"instance changes too."
+msgstr ""
+
+#: doc/classes/Node2D.xml:4
+msgid ""
+"A 2D game object, inherited by all 2D-related nodes. Has a position, "
+"rotation, scale, and Z index."
+msgstr ""
+
+#: doc/classes/Node2D.xml:7
+msgid ""
+"A 2D game object, with a transform (position, rotation, and scale). All 2D "
+"nodes, including physics objects and sprites, inherit from Node2D. Use "
+"Node2D as a parent node to move, scale and rotate children in a 2D project. "
+"Also gives control of the node's render order."
+msgstr ""
+
+#: doc/classes/Node2D.xml:11 doc/classes/Vector2.xml:16
+msgid "https://github.com/godotengine/godot-demo-projects/tree/master/2d"
+msgstr ""
+
+#: doc/classes/Node2D.xml:18
+msgid "Multiplies the current scale by the [code]ratio[/code] vector."
+msgstr ""
+
+#: doc/classes/Node2D.xml:25
+msgid ""
+"Returns the angle between the node and the [code]point[/code] in radians.\n"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/master/img/"
+"node2d_get_angle_to.png]Illustration of the returned angle.[/url]"
+msgstr ""
+
+#: doc/classes/Node2D.xml:33
+msgid "Returns the [Transform2D] relative to this node's parent."
+msgstr ""
+
+#: doc/classes/Node2D.xml:40
+msgid "Adds the [code]offset[/code] vector to the node's global position."
+msgstr ""
+
+#: doc/classes/Node2D.xml:47
+msgid ""
+"Rotates the node so it points towards the [code]point[/code], which is "
+"expected to use global coordinates."
+msgstr ""
+
+#: doc/classes/Node2D.xml:55
+msgid ""
+"Applies a local translation on the node's X axis based on the [method Node."
+"_process]'s [code]delta[/code]. If [code]scaled[/code] is [code]false[/"
+"code], normalizes the movement."
+msgstr ""
+
+#: doc/classes/Node2D.xml:63
+msgid ""
+"Applies a local translation on the node's Y axis based on the [method Node."
+"_process]'s [code]delta[/code]. If [code]scaled[/code] is [code]false[/"
+"code], normalizes the movement."
+msgstr ""
+
+#: doc/classes/Node2D.xml:70
+msgid ""
+"Applies a rotation to the node, in radians, starting from its current "
+"rotation."
+msgstr ""
+
+#: doc/classes/Node2D.xml:77
+msgid ""
+"Transforms the provided local position into a position in global coordinate "
+"space. The input is expected to be local relative to the [Node2D] it is "
+"called on. e.g. Applying this method to the positions of child nodes will "
+"correctly transform their positions into the global coordinate space, but "
+"applying it to a node's own position will give an incorrect result, as it "
+"will incorporate the node's own transformation into its global position."
+msgstr ""
+
+#: doc/classes/Node2D.xml:84
+msgid ""
+"Transforms the provided global position into a position in local coordinate "
+"space. The output will be local relative to the [Node2D] it is called on. e."
+"g. It is appropriate for determining the positions of child nodes, but it is "
+"not appropriate for determining its own position relative to its parent."
+msgstr ""
+
+#: doc/classes/Node2D.xml:91
+msgid ""
+"Translates the node by the given [code]offset[/code] in local coordinates."
+msgstr ""
+
+#: doc/classes/Node2D.xml:97
+msgid "Global position."
+msgstr ""
+
+#: doc/classes/Node2D.xml:100
+msgid "Global rotation in radians."
+msgstr ""
+
+#: doc/classes/Node2D.xml:103
+msgid "Global rotation in degrees."
+msgstr ""
+
+#: doc/classes/Node2D.xml:106
+msgid "Global scale."
+msgstr ""
+
+#: doc/classes/Node2D.xml:109
+msgid "Global [Transform2D]."
+msgstr ""
+
+#: doc/classes/Node2D.xml:112
+msgid "Position, relative to the node's parent."
+msgstr ""
+
+#: doc/classes/Node2D.xml:115
+msgid "Rotation in radians, relative to the node's parent."
+msgstr ""
+
+#: doc/classes/Node2D.xml:118
+msgid "Rotation in degrees, relative to the node's parent."
+msgstr ""
+
+#: doc/classes/Node2D.xml:121
+msgid "The node's scale. Unscaled value: [code](1, 1)[/code]."
+msgstr ""
+
+#: doc/classes/Node2D.xml:124
+msgid "Local [Transform2D]."
+msgstr ""
+
+#: doc/classes/Node2D.xml:127
+msgid ""
+"If [code]true[/code], the node's Z index is relative to its parent's Z "
+"index. If this node's Z index is 2 and its parent's effective Z index is 3, "
+"then this node's effective Z index will be 2 + 3 = 5."
+msgstr ""
+
+#: doc/classes/Node2D.xml:130
+msgid ""
+"Z index. Controls the order in which the nodes render. A node with a higher "
+"Z index will display in front of others. Must be between [constant "
+"VisualServer.CANVAS_ITEM_Z_MIN] and [constant VisualServer."
+"CANVAS_ITEM_Z_MAX] (inclusive)."
+msgstr ""
+
+#: doc/classes/NodePath.xml:4
+msgid "Pre-parsed scene tree path."
+msgstr ""
+
+#: doc/classes/NodePath.xml:7
+msgid ""
+"A pre-parsed relative or absolute path in a scene tree, for use with [method "
+"Node.get_node] and similar functions. It can reference a node, a resource "
+"within a node, or a property of a node or resource. For instance, "
+"[code]\"Path2D/PathFollow2D/Sprite:texture:size\"[/code] would refer to the "
+"[code]size[/code] property of the [code]texture[/code] resource on the node "
+"named [code]\"Sprite\"[/code] which is a child of the other named nodes in "
+"the path.\n"
+"You will usually just pass a string to [method Node.get_node] and it will be "
+"automatically converted, but you may occasionally want to parse a path ahead "
+"of time with [NodePath] or the literal syntax [code]@\"path\"[/code]. "
+"Exporting a [NodePath] variable will give you a node selection widget in the "
+"properties panel of the editor, which can often be useful.\n"
+"A [NodePath] is composed of a list of slash-separated node names (like a "
+"filesystem path) and an optional colon-separated list of \"subnames\" which "
+"can be resources or properties.\n"
+"Some examples of NodePaths include the following:\n"
+"[codeblock]\n"
+"# No leading slash means it is relative to the current node.\n"
+"@\"A\" # Immediate child A\n"
+"@\"A/B\" # A's child B\n"
+"@\".\" # The current node.\n"
+"@\"..\" # The parent node.\n"
+"@\"../C\" # A sibling node C.\n"
+"# A leading slash means it is absolute from the SceneTree.\n"
+"@\"/root\" # Equivalent to get_tree().get_root().\n"
+"@\"/root/Main\" # If your main scene's root node were named \"Main\".\n"
+"@\"/root/MyAutoload\" # If you have an autoloaded node or scene.\n"
+"[/codeblock]\n"
+"[b]Note:[/b] In the editor, [NodePath] properties are automatically updated "
+"when moving, renaming or deleting a node in the scene tree, but they are "
+"never updated at runtime."
+msgstr ""
+
+#: doc/classes/NodePath.xml:26 doc/classes/PackedScene.xml:41
+#: doc/classes/Panel.xml:10 doc/classes/PanelContainer.xml:10
+#: doc/classes/TileMap.xml:16 doc/classes/TileSet.xml:16
+msgid "https://godotengine.org/asset-library/asset/520"
+msgstr ""
+
+#: doc/classes/NodePath.xml:33
+msgid ""
+"Creates a NodePath from a string, e.g. [code]\"Path2D/PathFollow2D/Sprite:"
+"texture:size\"[/code]. A path is absolute if it starts with a slash. "
+"Absolute paths are only valid in the global scene tree, not within "
+"individual scenes. In a relative path, [code]\".\"[/code] and [code]\"..\"[/"
+"code] indicate the current node and its parent.\n"
+"The \"subnames\" optionally included after the path to the target node can "
+"point to resources or properties, and can also be nested.\n"
+"Examples of valid NodePaths (assuming that those nodes exist and have the "
+"referenced resources or properties):\n"
+"[codeblock]\n"
+"# Points to the Sprite node\n"
+"\"Path2D/PathFollow2D/Sprite\"\n"
+"# Points to the Sprite node and its \"texture\" resource.\n"
+"# get_node() would retrieve \"Sprite\", while get_node_and_resource()\n"
+"# would retrieve both the Sprite node and the \"texture\" resource.\n"
+"\"Path2D/PathFollow2D/Sprite:texture\"\n"
+"# Points to the Sprite node and its \"position\" property.\n"
+"\"Path2D/PathFollow2D/Sprite:position\"\n"
+"# Points to the Sprite node and the \"x\" component of its \"position\" "
+"property.\n"
+"\"Path2D/PathFollow2D/Sprite:position:x\"\n"
+"# Absolute path (from \"root\")\n"
+"\"/root/Level/Path2D\"\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/NodePath.xml:55
+msgid ""
+"Returns a node path with a colon character ([code]:[/code]) prepended, "
+"transforming it to a pure property path with no node name (defaults to "
+"resolving from the current node).\n"
+"[codeblock]\n"
+"# This will be parsed as a node path to the \"x\" property in the \"position"
+"\" node\n"
+"var node_path = NodePath(\"position:x\")\n"
+"# This will be parsed as a node path to the \"x\" component of the \"position"
+"\" property in the current node\n"
+"var property_path = node_path.get_as_property_path()\n"
+"print(property_path) # :position:x\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/NodePath.xml:68
+msgid ""
+"Returns all subnames concatenated with a colon character ([code]:[/code]) as "
+"separator, i.e. the right side of the first colon in a node path.\n"
+"[codeblock]\n"
+"var nodepath = NodePath(\"Path2D/PathFollow2D/Sprite:texture:load_path\")\n"
+"print(nodepath.get_concatenated_subnames()) # texture:load_path\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/NodePath.xml:79
+msgid ""
+"Gets the node name indicated by [code]idx[/code] (0 to [method "
+"get_name_count]).\n"
+"[codeblock]\n"
+"var node_path = NodePath(\"Path2D/PathFollow2D/Sprite\")\n"
+"print(node_path.get_name(0)) # Path2D\n"
+"print(node_path.get_name(1)) # PathFollow2D\n"
+"print(node_path.get_name(2)) # Sprite\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/NodePath.xml:91
+msgid ""
+"Gets the number of node names which make up the path. Subnames (see [method "
+"get_subname_count]) are not included.\n"
+"For example, [code]\"Path2D/PathFollow2D/Sprite\"[/code] has 3 names."
+msgstr ""
+
+#: doc/classes/NodePath.xml:99
+msgid ""
+"Gets the resource or property name indicated by [code]idx[/code] (0 to "
+"[method get_subname_count]).\n"
+"[codeblock]\n"
+"var node_path = NodePath(\"Path2D/PathFollow2D/Sprite:texture:load_path\")\n"
+"print(node_path.get_subname(0)) # texture\n"
+"print(node_path.get_subname(1)) # load_path\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/NodePath.xml:110
+msgid ""
+"Gets the number of resource or property names (\"subnames\") in the path. "
+"Each subname is listed after a colon character ([code]:[/code]) in the node "
+"path.\n"
+"For example, [code]\"Path2D/PathFollow2D/Sprite:texture:load_path\"[/code] "
+"has 2 subnames."
+msgstr ""
+
+#: doc/classes/NodePath.xml:117
+msgid ""
+"Returns [code]true[/code] if the node path is absolute (as opposed to "
+"relative), which means that it starts with a slash character ([code]/[/"
+"code]). Absolute node paths can be used to access the root node ([code]\"/"
+"root\"[/code]) or autoloads (e.g. [code]\"/global\"[/code] if a \"global\" "
+"autoload was registered)."
+msgstr ""
+
+#: doc/classes/NodePath.xml:123
+msgid "Returns [code]true[/code] if the node path is empty."
+msgstr ""
+
+#: modules/opensimplex/doc_classes/NoiseTexture.xml:4
+msgid "[OpenSimplexNoise] filled texture."
+msgstr ""
+
+#: modules/opensimplex/doc_classes/NoiseTexture.xml:7
+msgid ""
+"Uses an [OpenSimplexNoise] to fill the texture data. You can specify the "
+"texture size but keep in mind that larger textures will take longer to "
+"generate and seamless noise only works with square sized textures.\n"
+"NoiseTexture can also generate normalmap textures.\n"
+"The class uses [Thread]s to generate the texture data internally, so [method "
+"Texture.get_data] may return [code]null[/code] if the generation process has "
+"not completed yet. In that case, you need to wait for the texture to be "
+"generated before accessing the data:\n"
+"[codeblock]\n"
+"var texture = preload(\"res://noise.tres\")\n"
+"yield(texture, \"changed\")\n"
+"var image = texture.get_data()\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/opensimplex/doc_classes/NoiseTexture.xml:22
+msgid ""
+"If [code]true[/code], the resulting texture contains a normal map created "
+"from the original noise interpreted as a bump map."
+msgstr ""
+
+#: modules/opensimplex/doc_classes/NoiseTexture.xml:25
+msgid ""
+"Strength of the bump maps used in this texture. A higher value will make the "
+"bump maps appear larger while a lower value will make them appear softer."
+msgstr ""
+
+#: modules/opensimplex/doc_classes/NoiseTexture.xml:29
+msgid "Height of the generated texture."
+msgstr ""
+
+#: modules/opensimplex/doc_classes/NoiseTexture.xml:32
+msgid "The [OpenSimplexNoise] instance used to generate the noise."
+msgstr ""
+
+#: modules/opensimplex/doc_classes/NoiseTexture.xml:35
+msgid ""
+"An offset used to specify the noise space coordinate of the top left corner "
+"of the generated noise. This value is ignored if [member seamless] is "
+"enabled."
+msgstr ""
+
+#: modules/opensimplex/doc_classes/NoiseTexture.xml:38
+msgid ""
+"Whether the texture can be tiled without visible seams or not. Seamless "
+"textures take longer to generate.\n"
+"[b]Note:[/b] Seamless noise has a lower contrast compared to non-seamless "
+"noise. This is due to the way noise uses higher dimensions for generating "
+"seamless noise."
+msgstr ""
+
+#: modules/opensimplex/doc_classes/NoiseTexture.xml:42
+msgid "Width of the generated texture."
+msgstr ""
+
+#: doc/classes/Object.xml:4
+msgid "Base class for all non-built-in types."
+msgstr ""
+
+#: doc/classes/Object.xml:7
+msgid ""
+"Every class which is not a built-in type inherits from this class.\n"
+"You can construct Objects from scripting languages, using [code]Object.new()"
+"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct Object"
+"\" node in VisualScript.\n"
+"Objects do not manage memory. If a class inherits from Object, you will have "
+"to delete instances of it manually. To do so, call the [method free] method "
+"from your script or delete the instance from C++.\n"
+"Some classes that extend Object add memory management. This is the case of "
+"[Reference], which counts references and deletes itself automatically when "
+"no longer referenced. [Node], another fundamental type, deletes all its "
+"children when freed from memory.\n"
+"Objects export properties, which are mainly useful for storage and editing, "
+"but not really so much in programming. Properties are exported in [method "
+"_get_property_list] and handled in [method _get] and [method _set]. However, "
+"scripting languages and C++ have simpler means to export them.\n"
+"Property membership can be tested directly in GDScript using [code]in[/"
+"code]:\n"
+"[codeblock]\n"
+"var n = Node2D.new()\n"
+"print(\"position\" in n) # Prints \"True\".\n"
+"print(\"other_property\" in n) # Prints \"False\".\n"
+"[/codeblock]\n"
+"The [code]in[/code] operator will evaluate to [code]true[/code] as long as "
+"the key exists, even if the value is [code]null[/code].\n"
+"Objects also receive notifications. Notifications are a simple way to notify "
+"the object about different events, so they can all be handled together. See "
+"[method _notification].\n"
+"[b]Note:[/b] Unlike references to a [Reference], references to an Object "
+"stored in a variable can become invalid without warning. Therefore, it's "
+"recommended to use [Reference] for data classes instead of [Object].\n"
+"[b]Note:[/b] Due to a bug, you can't create a \"plain\" Object using "
+"[code]Object.new()[/code]. Instead, use [code]ClassDB.instance(\"Object\")[/"
+"code]. This bug only applies to Object itself, not any of its descendents "
+"like [Reference]."
+msgstr ""
+
+#: doc/classes/Object.xml:24 doc/classes/Reference.xml:13
+#: doc/classes/Resource.xml:12
+msgid ""
+"https://docs.godotengine.org/en/3.4/getting_started/workflow/best_practices/"
+"node_alternatives.html"
+msgstr ""
+
+#: doc/classes/Object.xml:25
+msgid ""
+"https://docs.godotengine.org/en/3.4/getting_started/scripting/gdscript/"
+"gdscript_exports.html#advanced-exports"
+msgstr ""
+
+#: doc/classes/Object.xml:32
+msgid ""
+"Virtual method which can be overridden to customize the return value of "
+"[method get].\n"
+"Returns the given property. Returns [code]null[/code] if the [code]property[/"
+"code] does not exist."
+msgstr ""
+
+#: doc/classes/Object.xml:39
+msgid ""
+"Virtual method which can be overridden to customize the return value of "
+"[method get_property_list].\n"
+"Returns the object's property list as an [Array] of dictionaries.\n"
+"Each property's [Dictionary] must contain at least [code]name: String[/code] "
+"and [code]type: int[/code] (see [enum Variant.Type]) entries. Optionally, it "
+"can also include [code]hint: int[/code] (see [enum PropertyHint]), "
+"[code]hint_string: String[/code], and [code]usage: int[/code] (see [enum "
+"PropertyUsageFlags])."
+msgstr ""
+
+#: doc/classes/Object.xml:47
+msgid "Called when the object is initialized."
+msgstr ""
+
+#: doc/classes/Object.xml:54
+msgid ""
+"Called whenever the object receives a notification, which is identified in "
+"[code]what[/code] by a constant. The base [Object] has two constants "
+"[constant NOTIFICATION_POSTINITIALIZE] and [constant "
+"NOTIFICATION_PREDELETE], but subclasses such as [Node] define a lot more "
+"notifications which are also received by this method."
+msgstr ""
+
+#: doc/classes/Object.xml:62
+msgid ""
+"Virtual method which can be overridden to customize the return value of "
+"[method set].\n"
+"Sets a property. Returns [code]true[/code] if the [code]property[/code] "
+"exists."
+msgstr ""
+
+#: doc/classes/Object.xml:69
+msgid ""
+"Virtual method which can be overridden to customize the return value of "
+"[method to_string], and thus the object's representation where it is "
+"converted to a string, e.g. with [code]print(obj)[/code].\n"
+"Returns a [String] representing the object. If not overridden, defaults to "
+"[code]\"[ClassName:RID]\"[/code]."
+msgstr ""
+
+#: doc/classes/Object.xml:78
+msgid ""
+"Adds a user-defined [code]signal[/code]. Arguments are optional, but can be "
+"added as an [Array] of dictionaries, each containing [code]name: String[/"
+"code] and [code]type: int[/code] (see [enum Variant.Type]) entries."
+msgstr ""
+
+#: doc/classes/Object.xml:85
+msgid ""
+"Calls the [code]method[/code] on the object and returns the result. This "
+"method supports a variable number of arguments, so parameters are passed as "
+"a comma separated list. Example:\n"
+"[codeblock]\n"
+"call(\"set\", \"position\", Vector2(42.0, 0.0))\n"
+"[/codeblock]\n"
+"[b]Note:[/b] In C#, the method name must be specified as snake_case if it is "
+"defined by a built-in Godot node. This doesn't apply to user-defined methods "
+"where you should use the same convention as in the C# source (typically "
+"PascalCase)."
+msgstr ""
+
+#: doc/classes/Object.xml:96
+msgid ""
+"Calls the [code]method[/code] on the object during idle time. This method "
+"supports a variable number of arguments, so parameters are passed as a comma "
+"separated list. Example:\n"
+"[codeblock]\n"
+"call_deferred(\"set\", \"position\", Vector2(42.0, 0.0))\n"
+"[/codeblock]\n"
+"[b]Note:[/b] In C#, the method name must be specified as snake_case if it is "
+"defined by a built-in Godot node. This doesn't apply to user-defined methods "
+"where you should use the same convention as in the C# source (typically "
+"PascalCase)."
+msgstr ""
+
+#: doc/classes/Object.xml:108
+msgid ""
+"Calls the [code]method[/code] on the object and returns the result. "
+"Contrarily to [method call], this method does not support a variable number "
+"of arguments but expects all parameters to be via a single [Array].\n"
+"[codeblock]\n"
+"callv(\"set\", [ \"position\", Vector2(42.0, 0.0) ])\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Object.xml:117
+msgid ""
+"Returns [code]true[/code] if the object can translate strings. See [method "
+"set_message_translation] and [method tr]."
+msgstr ""
+
+#: doc/classes/Object.xml:128
+msgid ""
+"Connects a [code]signal[/code] to a [code]method[/code] on a [code]target[/"
+"code] object. Pass optional [code]binds[/code] to the call as an [Array] of "
+"parameters. These parameters will be passed to the method after any "
+"parameter used in the call to [method emit_signal]. Use [code]flags[/code] "
+"to set deferred or one-shot connections. See [enum ConnectFlags] constants.\n"
+"A [code]signal[/code] can only be connected once to a [code]method[/code]. "
+"It will throw an error if already connected, unless the signal was connected "
+"with [constant CONNECT_REFERENCE_COUNTED]. To avoid this, first, use [method "
+"is_connected] to check for existing connections.\n"
+"If the [code]target[/code] is destroyed in the game's lifecycle, the "
+"connection will be lost.\n"
+"Examples:\n"
+"[codeblock]\n"
+"connect(\"pressed\", self, \"_on_Button_pressed\") # BaseButton signal\n"
+"connect(\"text_entered\", self, \"_on_LineEdit_text_entered\") # LineEdit "
+"signal\n"
+"connect(\"hit\", self, \"_on_Player_hit\", [ weapon_type, damage ]) # User-"
+"defined signal\n"
+"[/codeblock]\n"
+"An example of the relationship between [code]binds[/code] passed to [method "
+"connect] and parameters used when calling [method emit_signal]:\n"
+"[codeblock]\n"
+"connect(\"hit\", self, \"_on_Player_hit\", [ weapon_type, damage ]) # "
+"weapon_type and damage are passed last\n"
+"emit_signal(\"hit\", \"Dark lord\", 5) # \"Dark lord\" and 5 are passed "
+"first\n"
+"func _on_Player_hit(hit_by, level, weapon_type, damage):\n"
+" print(\"Hit by %s (lvl %d) with weapon %s for %d damage\" % [hit_by, "
+"level, weapon_type, damage])\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Object.xml:152
+msgid ""
+"Disconnects a [code]signal[/code] from a [code]method[/code] on the given "
+"[code]target[/code].\n"
+"If you try to disconnect a connection that does not exist, the method will "
+"throw an error. Use [method is_connected] to ensure that the connection "
+"exists."
+msgstr ""
+
+#: doc/classes/Object.xml:160
+msgid ""
+"Emits the given [code]signal[/code]. The signal must exist, so it should be "
+"a built-in signal of this class or one of its parent classes, or a user-"
+"defined signal. This method supports a variable number of arguments, so "
+"parameters are passed as a comma separated list. Example:\n"
+"[codeblock]\n"
+"emit_signal(\"hit\", weapon_type, damage)\n"
+"emit_signal(\"game_over\")\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Object.xml:170
+msgid ""
+"Deletes the object from memory immediately. For [Node]s, you may want to use "
+"[method Node.queue_free] to queue the node for safe deletion at the end of "
+"the current frame.\n"
+"[b]Important:[/b] If you have a variable pointing to an object, it will "
+"[i]not[/i] be assigned to [code]null[/code] once the object is freed. "
+"Instead, it will point to a [i]previously freed instance[/i] and you should "
+"validate it with [method @GDScript.is_instance_valid] before attempting to "
+"call its methods or access its properties."
+msgstr ""
+
+#: doc/classes/Object.xml:178
+msgid ""
+"Returns the [Variant] value of the given [code]property[/code]. If the "
+"[code]property[/code] doesn't exist, this will return [code]null[/code].\n"
+"[b]Note:[/b] In C#, the property name must be specified as snake_case if it "
+"is defined by a built-in Godot node. This doesn't apply to user-defined "
+"properties where you should use the same convention as in the C# source "
+"(typically PascalCase)."
+msgstr ""
+
+#: doc/classes/Object.xml:185
+msgid ""
+"Returns the object's class as a [String]. See also [method is_class].\n"
+"[b]Note:[/b] [method get_class] does not take [code]class_name[/code] "
+"declarations into account. If the object has a [code]class_name[/code] "
+"defined, the base class name will be returned instead."
+msgstr ""
+
+#: doc/classes/Object.xml:192
+msgid ""
+"Returns an [Array] of dictionaries with information about signals that are "
+"connected to the object.\n"
+"Each [Dictionary] contains three String entries:\n"
+"- [code]source[/code] is a reference to the signal emitter.\n"
+"- [code]signal_name[/code] is the name of the connected signal.\n"
+"- [code]method_name[/code] is the name of the method to which the signal is "
+"connected."
+msgstr ""
+
+#: doc/classes/Object.xml:203
+msgid ""
+"Gets the object's property indexed by the given [NodePath]. The node path "
+"should be relative to the current object and can use the colon character "
+"([code]:[/code]) to access nested properties. Examples: [code]\"position:x"
+"\"[/code] or [code]\"material:next_pass:blend_mode\"[/code]."
+msgstr ""
+
+#: doc/classes/Object.xml:209
+msgid ""
+"Returns the object's unique instance ID.\n"
+"This ID can be saved in [EncodedObjectAsID], and can be used to retrieve the "
+"object instance with [method @GDScript.instance_from_id]."
+msgstr ""
+
+#: doc/classes/Object.xml:217
+msgid "Returns the object's metadata entry for the given [code]name[/code]."
+msgstr ""
+
+#: doc/classes/Object.xml:223
+msgid "Returns the object's metadata as a [PoolStringArray]."
+msgstr ""
+
+#: doc/classes/Object.xml:229
+msgid "Returns the object's methods and their signatures as an [Array]."
+msgstr ""
+
+#: doc/classes/Object.xml:235
+msgid ""
+"Returns the object's property list as an [Array] of dictionaries.\n"
+"Each property's [Dictionary] contain at least [code]name: String[/code] and "
+"[code]type: int[/code] (see [enum Variant.Type]) entries. Optionally, it can "
+"also include [code]hint: int[/code] (see [enum PropertyHint]), "
+"[code]hint_string: String[/code], and [code]usage: int[/code] (see [enum "
+"PropertyUsageFlags])."
+msgstr ""
+
+#: doc/classes/Object.xml:242
+msgid ""
+"Returns the object's [Script] instance, or [code]null[/code] if none is "
+"assigned."
+msgstr ""
+
+#: doc/classes/Object.xml:249
+msgid "Returns an [Array] of connections for the given [code]signal[/code]."
+msgstr ""
+
+#: doc/classes/Object.xml:255
+msgid "Returns the list of signals as an [Array] of dictionaries."
+msgstr ""
+
+#: doc/classes/Object.xml:262
+msgid ""
+"Returns [code]true[/code] if a metadata entry is found with the given "
+"[code]name[/code]."
+msgstr ""
+
+#: doc/classes/Object.xml:269
+msgid ""
+"Returns [code]true[/code] if the object contains the given [code]method[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Object.xml:276
+msgid "Returns [code]true[/code] if the given [code]signal[/code] exists."
+msgstr ""
+
+#: doc/classes/Object.xml:283
+msgid ""
+"Returns [code]true[/code] if the given user-defined [code]signal[/code] "
+"exists. Only signals added using [method add_user_signal] are taken into "
+"account."
+msgstr ""
+
+#: doc/classes/Object.xml:289
+msgid "Returns [code]true[/code] if signal emission blocking is enabled."
+msgstr ""
+
+#: doc/classes/Object.xml:296
+msgid ""
+"Returns [code]true[/code] if the object inherits from the given [code]class[/"
+"code]. See also [method get_class].\n"
+"[b]Note:[/b] [method is_class] does not take [code]class_name[/code] "
+"declarations into account. If the object has a [code]class_name[/code] "
+"defined, [method is_class] will return [code]false[/code] for that name."
+msgstr ""
+
+#: doc/classes/Object.xml:306
+msgid ""
+"Returns [code]true[/code] if a connection exists for a given [code]signal[/"
+"code], [code]target[/code], and [code]method[/code]."
+msgstr ""
+
+#: doc/classes/Object.xml:312
+msgid ""
+"Returns [code]true[/code] if the [method Node.queue_free] method was called "
+"for the object."
+msgstr ""
+
+#: doc/classes/Object.xml:320
+msgid ""
+"Send a given notification to the object, which will also trigger a call to "
+"the [method _notification] method of all classes that the object inherits "
+"from.\n"
+"If [code]reversed[/code] is [code]true[/code], [method _notification] is "
+"called first on the object's own class, and then up to its successive parent "
+"classes. If [code]reversed[/code] is [code]false[/code], [method "
+"_notification] is called first on the highest ancestor ([Object] itself), "
+"and then down to its successive inheriting classes."
+msgstr ""
+
+#: doc/classes/Object.xml:327
+msgid ""
+"Notify the editor that the property list has changed, so that editor plugins "
+"can take the new values into account. Does nothing on export builds."
+msgstr ""
+
+#: doc/classes/Object.xml:334
+msgid ""
+"Removes a given entry from the object's metadata. See also [method set_meta]."
+msgstr ""
+
+#: doc/classes/Object.xml:342
+msgid ""
+"Assigns a new value to the given property. If the [code]property[/code] does "
+"not exist, nothing will happen.\n"
+"[b]Note:[/b] In C#, the property name must be specified as snake_case if it "
+"is defined by a built-in Godot node. This doesn't apply to user-defined "
+"properties where you should use the same convention as in the C# source "
+"(typically PascalCase)."
+msgstr ""
+
+#: doc/classes/Object.xml:350
+msgid "If set to [code]true[/code], signal emission is blocked."
+msgstr ""
+
+#: doc/classes/Object.xml:358
+msgid ""
+"Assigns a new value to the given property, after the current frame's physics "
+"step. This is equivalent to calling [method set] via [method call_deferred], "
+"i.e. [code]call_deferred(\"set\", property, value)[/code].\n"
+"[b]Note:[/b] In C#, the property name must be specified as snake_case if it "
+"is defined by a built-in Godot node. This doesn't apply to user-defined "
+"properties where you should use the same convention as in the C# source "
+"(typically PascalCase)."
+msgstr ""
+
+#: doc/classes/Object.xml:367
+msgid ""
+"Assigns a new value to the property identified by the [NodePath]. The node "
+"path should be relative to the current object and can use the colon "
+"character ([code]:[/code]) to access nested properties. Example:\n"
+"[codeblock]\n"
+"set_indexed(\"position\", Vector2(42, 0))\n"
+"set_indexed(\"position:y\", -10)\n"
+"print(position) # (42, -10)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Object.xml:379
+msgid ""
+"Defines whether the object can translate strings (with calls to [method "
+"tr]). Enabled by default."
+msgstr ""
+
+#: doc/classes/Object.xml:387
+msgid ""
+"Adds, changes or removes a given entry in the object's metadata. Metadata "
+"are serialized and can take any [Variant] value.\n"
+"To remove a given entry from the object's metadata, use [method "
+"remove_meta]. Metadata is also removed if its value is set to [code]null[/"
+"code]. This means you can also use [code]set_meta(\"name\", null)[/code] to "
+"remove metadata for [code]\"name\"[/code]."
+msgstr ""
+
+#: doc/classes/Object.xml:395
+msgid ""
+"Assigns a script to the object. Each object can have a single script "
+"assigned to it, which are used to extend its functionality.\n"
+"If the object already had a script, the previous script instance will be "
+"freed and its variables and state will be lost. The new script's [method "
+"_init] method will be called."
+msgstr ""
+
+#: doc/classes/Object.xml:402
+msgid ""
+"Returns a [String] representing the object. If not overridden, defaults to "
+"[code]\"[ClassName:RID]\"[/code].\n"
+"Override the method [method _to_string] to customize the [String] "
+"representation."
+msgstr ""
+
+#: doc/classes/Object.xml:410
+msgid ""
+"Translates a message using translation catalogs configured in the Project "
+"Settings.\n"
+"Only works if message translation is enabled (which it is by default), "
+"otherwise it returns the [code]message[/code] unchanged. See [method "
+"set_message_translation]."
+msgstr ""
+
+#: doc/classes/Object.xml:418
+msgid "Emitted whenever the object's script is changed."
+msgstr ""
+
+#: doc/classes/Object.xml:424
+msgid "Called right when the object is initialized. Not available in script."
+msgstr ""
+
+#: doc/classes/Object.xml:427
+msgid "Called before the object is about to be deleted."
+msgstr ""
+
+#: doc/classes/Object.xml:430
+msgid ""
+"Connects a signal in deferred mode. This way, signal emissions are stored in "
+"a queue, then set on idle time."
+msgstr ""
+
+#: doc/classes/Object.xml:433
+msgid "Persisting connections are saved when the object is serialized to file."
+msgstr ""
+
+#: doc/classes/Object.xml:436
+msgid "One-shot connections disconnect themselves after emission."
+msgstr ""
+
+#: doc/classes/Object.xml:439
+msgid ""
+"Connect a signal as reference-counted. This means that a given signal can be "
+"connected several times to the same target, and will only be fully "
+"disconnected once no references are left."
+msgstr ""
+
+#: doc/classes/Occluder.xml:4
+msgid "Allows [OccluderShape]s to be used for occlusion culling."
+msgstr ""
+
+#: doc/classes/Occluder.xml:7
+msgid ""
+"[Occluder]s that are placed within your scene will automatically cull "
+"objects that are hidden from view by the occluder. This can increase "
+"performance by decreasing the amount of objects drawn.\n"
+"[Occluder]s are totally dynamic, you can move them as you wish. This means "
+"you can for example, place occluders on a moving spaceship, and have it "
+"occlude objects as it flies past.\n"
+"You can place a large number of [Occluder]s within a scene. As it would be "
+"counterproductive to cull against hundreds of occluders, the system will "
+"automatically choose a selection of these for active use during any given "
+"frame, based a screen space metric. Larger occluders are favored, as well as "
+"those close to the camera. Note that a small occluder close to the camera "
+"may be a better occluder in terms of screen space than a large occluder far "
+"in the distance.\n"
+"The type of occlusion primitive is determined by the [OccluderShape] that "
+"you add to the [Occluder]. Some [OccluderShape]s may allow more than one "
+"primitive in a single, node, for greater efficiency.\n"
+"Although [Occluder]s work in general use, they also become even more "
+"powerful when used in conjunction with the portal system. Occluders are "
+"placed in rooms (based on their origin), and can block portals (and thus "
+"entire rooms) as well as objects from rendering."
+msgstr ""
+
+#: doc/classes/OccluderPolygon2D.xml:4
+msgid "Defines a 2D polygon for LightOccluder2D."
+msgstr ""
+
+#: doc/classes/OccluderPolygon2D.xml:7
+msgid ""
+"Editor facility that helps you draw a 2D polygon used as resource for "
+"[LightOccluder2D]."
+msgstr ""
+
+#: doc/classes/OccluderPolygon2D.xml:15
+msgid ""
+"If [code]true[/code], closes the polygon. A closed OccluderPolygon2D "
+"occludes the light coming from any direction. An opened OccluderPolygon2D "
+"occludes the light only at its outline's direction."
+msgstr ""
+
+#: doc/classes/OccluderPolygon2D.xml:18
+msgid "The culling mode to use."
+msgstr ""
+
+#: doc/classes/OccluderPolygon2D.xml:21
+msgid ""
+"A [Vector2] array with the index for polygon's vertices positions.\n"
+"[b]Note:[/b] The returned value is a copy of the underlying array, rather "
+"than a reference."
+msgstr ""
+
+#: doc/classes/OccluderPolygon2D.xml:27
+msgid "Culling is disabled. See [member cull_mode]."
+msgstr ""
+
+#: doc/classes/OccluderPolygon2D.xml:30
+msgid ""
+"Culling is performed in the clockwise direction. See [member cull_mode]."
+msgstr ""
+
+#: doc/classes/OccluderPolygon2D.xml:33
+msgid ""
+"Culling is performed in the counterclockwise direction. See [member "
+"cull_mode]."
+msgstr ""
+
+#: doc/classes/OccluderShape.xml:4
+msgid ""
+"Base class for shapes used for occlusion culling by the [Occluder] node."
+msgstr ""
+
+#: doc/classes/OccluderShape.xml:7
+msgid "[Occluder]s can use any primitive shape derived from [OccluderShape]."
+msgstr ""
+
+#: doc/classes/OccluderShapeSphere.xml:4
+msgid "Spherical occlusion primitive for use with the [Occluder] node."
+msgstr ""
+
+#: doc/classes/OccluderShapeSphere.xml:7
+msgid ""
+"[OccluderShape]s are resources used by [Occluder] nodes, allowing geometric "
+"occlusion culling.\n"
+"This shape can include multiple spheres. These can be created and deleted "
+"either in the Editor inspector or by calling [code]set_spheres[/code]. The "
+"sphere positions can be set by dragging the handle in the Editor viewport. "
+"The radius can be set with the smaller handle."
+msgstr ""
+
+#: doc/classes/OccluderShapeSphere.xml:18
+msgid "Sets an individual sphere's position."
+msgstr ""
+
+#: doc/classes/OccluderShapeSphere.xml:26
+msgid "Sets an individual sphere's radius."
+msgstr ""
+
+#: doc/classes/OccluderShapeSphere.xml:32
+msgid ""
+"The sphere data can be accessed as an array of [Plane]s. The position of "
+"each sphere is stored in the [code]normal[/code], and the radius is stored "
+"in the [code]d[/code] value of the plane."
+msgstr ""
+
+#: doc/classes/OmniLight.xml:4
+msgid "Omnidirectional light, such as a light bulb or a candle."
+msgstr ""
+
+#: doc/classes/OmniLight.xml:7
+msgid ""
+"An Omnidirectional light is a type of [Light] that emits light in all "
+"directions. The light is attenuated by distance and this attenuation can be "
+"configured by changing its energy, radius, and attenuation parameters.\n"
+"[b]Note:[/b] By default, only 32 OmniLights may affect a single mesh "
+"[i]resource[/i] at once. Consider splitting your level into several meshes "
+"to decrease the likelihood that more than 32 lights will affect the same "
+"mesh resource. Splitting the level mesh will also improve frustum culling "
+"effectiveness, leading to greater performance. If you need to use more "
+"lights per mesh, you can increase [member ProjectSettings.rendering/limits/"
+"rendering/max_lights_per_object] at the cost of shader compilation times."
+msgstr ""
+
+#: doc/classes/OmniLight.xml:17
+msgid ""
+"The light's attenuation (drop-off) curve. A number of presets are available "
+"in the [b]Inspector[/b] by right-clicking the curve."
+msgstr ""
+
+#: doc/classes/OmniLight.xml:20
+msgid ""
+"The light's radius. Note that the effectively lit area may appear to be "
+"smaller depending on the [member omni_attenuation] in use. No matter the "
+"[member omni_attenuation] in use, the light will never reach anything "
+"outside this radius."
+msgstr ""
+
+#: doc/classes/OmniLight.xml:23
+msgid "See [enum ShadowDetail]."
+msgstr ""
+
+#: doc/classes/OmniLight.xml:26
+msgid "See [enum ShadowMode]."
+msgstr ""
+
+#: doc/classes/OmniLight.xml:31
+msgid ""
+"Shadows are rendered to a dual-paraboloid texture. Faster than [constant "
+"SHADOW_CUBE], but lower-quality."
+msgstr ""
+
+#: doc/classes/OmniLight.xml:34
+msgid ""
+"Shadows are rendered to a cubemap. Slower than [constant "
+"SHADOW_DUAL_PARABOLOID], but higher-quality."
+msgstr ""
+
+#: doc/classes/OmniLight.xml:37
+msgid "Use more detail vertically when computing the shadow."
+msgstr ""
+
+#: doc/classes/OmniLight.xml:40
+msgid "Use more detail horizontally when computing the shadow."
+msgstr ""
+
+#: modules/opensimplex/doc_classes/OpenSimplexNoise.xml:4
+msgid "Noise generator based on Open Simplex."
+msgstr ""
+
+#: modules/opensimplex/doc_classes/OpenSimplexNoise.xml:7
+msgid ""
+"This resource allows you to configure and sample a fractal noise space. Here "
+"is a brief usage example that configures an OpenSimplexNoise and gets "
+"samples at various positions and dimensions:\n"
+"[codeblock]\n"
+"var noise = OpenSimplexNoise.new()\n"
+"\n"
+"# Configure\n"
+"noise.seed = randi()\n"
+"noise.octaves = 4\n"
+"noise.period = 20.0\n"
+"noise.persistence = 0.8\n"
+"\n"
+"# Sample\n"
+"print(\"Values:\")\n"
+"print(noise.get_noise_2d(1.0, 1.0))\n"
+"print(noise.get_noise_3d(0.5, 3.0, 15.0))\n"
+"print(noise.get_noise_4d(0.5, 1.9, 4.7, 0.0))\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/opensimplex/doc_classes/OpenSimplexNoise.xml:33
+msgid ""
+"Generate a noise image in [constant Image.FORMAT_L8] format with the "
+"requested [code]width[/code] and [code]height[/code], based on the current "
+"noise parameters. If [code]noise_offset[/code] is specified, then the offset "
+"value is used as the coordinates of the top-left corner of the generated "
+"noise."
+msgstr ""
+
+#: modules/opensimplex/doc_classes/OpenSimplexNoise.xml:40
+msgid ""
+"Returns the 1D noise value [code][-1,1][/code] at the given x-coordinate.\n"
+"[b]Note:[/b] This method actually returns the 2D noise value [code][-1,1][/"
+"code] with fixed y-coordinate value 0.0."
+msgstr ""
+
+#: modules/opensimplex/doc_classes/OpenSimplexNoise.xml:49
+#: modules/opensimplex/doc_classes/OpenSimplexNoise.xml:56
+msgid "Returns the 2D noise value [code][-1,1][/code] at the given position."
+msgstr ""
+
+#: modules/opensimplex/doc_classes/OpenSimplexNoise.xml:65
+#: modules/opensimplex/doc_classes/OpenSimplexNoise.xml:72
+msgid "Returns the 3D noise value [code][-1,1][/code] at the given position."
+msgstr ""
+
+#: modules/opensimplex/doc_classes/OpenSimplexNoise.xml:82
+msgid "Returns the 4D noise value [code][-1,1][/code] at the given position."
+msgstr ""
+
+#: modules/opensimplex/doc_classes/OpenSimplexNoise.xml:89
+msgid ""
+"Generate a tileable noise image in [constant Image.FORMAT_L8] format, based "
+"on the current noise parameters. Generated seamless images are always square "
+"([code]size[/code] × [code]size[/code]).\n"
+"[b]Note:[/b] Seamless noise has a lower contrast compared to non-seamless "
+"noise. This is due to the way noise uses higher dimensions for generating "
+"seamless noise."
+msgstr ""
+
+#: modules/opensimplex/doc_classes/OpenSimplexNoise.xml:96
+msgid "Difference in period between [member octaves]."
+msgstr ""
+
+#: modules/opensimplex/doc_classes/OpenSimplexNoise.xml:99
+msgid ""
+"Number of OpenSimplex noise layers that are sampled to get the fractal "
+"noise. Higher values result in more detailed noise but take more time to "
+"generate.\n"
+"[b]Note:[/b] The maximum allowed value is 9."
+msgstr ""
+
+#: modules/opensimplex/doc_classes/OpenSimplexNoise.xml:103
+msgid ""
+"Period of the base octave. A lower period results in a higher-frequency "
+"noise (more value changes across the same distance)."
+msgstr ""
+
+#: modules/opensimplex/doc_classes/OpenSimplexNoise.xml:106
+msgid ""
+"Contribution factor of the different octaves. A [code]persistence[/code] "
+"value of 1 means all the octaves have the same contribution, a value of 0.5 "
+"means each octave contributes half as much as the previous one."
+msgstr ""
+
+#: modules/opensimplex/doc_classes/OpenSimplexNoise.xml:109
+msgid ""
+"Seed used to generate random values, different seeds will generate different "
+"noise maps."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:4
+msgid "Button control that provides selectable options when pressed."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:7
+msgid ""
+"OptionButton is a type button that provides a selectable list of items when "
+"pressed. The item selected becomes the \"current\" item and is displayed as "
+"the button text.\n"
+"See also [BaseButton] which contains common properties and methods "
+"associated with this node."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:19
+msgid ""
+"Adds an item, with a [code]texture[/code] icon, text [code]label[/code] and "
+"(optionally) [code]id[/code]. If no [code]id[/code] is passed, the item "
+"index will be used as the item's ID. New items are appended at the end."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:27
+msgid ""
+"Adds an item, with text [code]label[/code] and (optionally) [code]id[/code]. "
+"If no [code]id[/code] is passed, the item index will be used as the item's "
+"ID. New items are appended at the end."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:33
+msgid ""
+"Adds a separator to the list of items. Separators help to group items. "
+"Separator also takes up an index and is appended at the end."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:39
+msgid "Clears all the items in the [OptionButton]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:45
+msgid "Returns the amount of items in the OptionButton, including separators."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:52 doc/classes/PopupMenu.xml:203
+msgid "Returns the icon of the item at index [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:59
+msgid "Returns the ID of the item at index [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:66
+msgid "Returns the index of the item with the given [code]id[/code]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:73
+msgid ""
+"Retrieves the metadata of an item. Metadata may be any type and can be used "
+"to store extra information about an item, such as an external string ID."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:80 doc/classes/PopupMenu.xml:245
+msgid "Returns the text of the item at index [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:93
+msgid ""
+"Returns the ID of the selected item, or [code]0[/code] if no item is "
+"selected."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:99
+msgid ""
+"Gets the metadata of the selected item. Metadata for items can be set using "
+"[method set_item_metadata]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:106
+msgid ""
+"Returns [code]true[/code] if the item at index [code]idx[/code] is disabled."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:113
+msgid "Removes the item at index [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:120
+msgid ""
+"Selects an item by index and makes it the current item. This will work even "
+"if the item is disabled."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:128
+msgid ""
+"Sets whether the item at index [code]idx[/code] is disabled.\n"
+"Disabled items are drawn differently in the dropdown and are not selectable "
+"by the user. If the current selected item is set as disabled, it will remain "
+"selected."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:137
+msgid "Sets the icon of the item at index [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:145
+msgid "Sets the ID of the item at index [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:153
+msgid ""
+"Sets the metadata of an item. Metadata may be of any type and can be used to "
+"store extra information about an item, such as an external string ID."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:161 doc/classes/PopupMenu.xml:432
+msgid "Sets the text of the item at index [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:169
+msgid ""
+"The index of the currently selected item, or [code]-1[/code] if no item is "
+"selected."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:177
+msgid ""
+"Emitted when the user navigates to an item using the [code]ui_up[/code] or "
+"[code]ui_down[/code] actions. The index of the item selected is passed as "
+"argument."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:183
+msgid ""
+"Emitted when the current item has been changed by the user. The index of the "
+"item selected is passed as argument."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:191
+msgid "The arrow icon to be drawn on the right end of the button."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:194
+msgid ""
+"The horizontal space between the arrow icon and the right edge of the button."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:197
+msgid "[StyleBox] used when the [OptionButton] is disabled."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:200
+msgid ""
+"[StyleBox] used when the [OptionButton] is focused. It is displayed over the "
+"current [StyleBox], so using [StyleBoxEmpty] will just disable the focus "
+"visual effect."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:203
+msgid "[Font] of the [OptionButton]'s text."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:206
+msgid "Default text [Color] of the [OptionButton]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:209
+msgid "Text [Color] used when the [OptionButton] is disabled."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:212
+msgid ""
+"Text [Color] used when the [OptionButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:215
+msgid "Text [Color] used when the [OptionButton] is being hovered."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:218
+msgid "Text [Color] used when the [OptionButton] is being pressed."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:221
+msgid "[StyleBox] used when the [OptionButton] is being hovered."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:224
+msgid "The horizontal space between [OptionButton]'s icon and text."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:227
+msgid "Default [StyleBox] for the [OptionButton]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:230
+msgid "[StyleBox] used when the [OptionButton] is being pressed."
+msgstr ""
+
+#: doc/classes/OS.xml:4
+msgid "Operating System functions."
+msgstr ""
+
+#: doc/classes/OS.xml:7
+msgid ""
+"Operating System functions. OS wraps the most common functionality to "
+"communicate with the host operating system, such as the clipboard, video "
+"driver, date and time, timers, environment variables, execution of binaries, "
+"command line, etc."
+msgstr ""
+
+#: doc/classes/OS.xml:18
+msgid ""
+"Displays a modal dialog box using the host OS' facilities. Execution is "
+"blocked until the dialog is closed."
+msgstr ""
+
+#: doc/classes/OS.xml:24
+msgid "Returns [code]true[/code] if the host OS allows drawing."
+msgstr ""
+
+#: doc/classes/OS.xml:30
+msgid ""
+"Returns [code]true[/code] if the current host platform is using multiple "
+"threads."
+msgstr ""
+
+#: doc/classes/OS.xml:36
+msgid "Centers the window on the screen if in windowed mode."
+msgstr ""
+
+#: doc/classes/OS.xml:42
+msgid ""
+"Shuts down system MIDI driver.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:50
+msgid ""
+"Delays execution of the current thread by [code]msec[/code] milliseconds. "
+"[code]msec[/code] must be greater than or equal to [code]0[/code]. "
+"Otherwise, [method delay_msec] will do nothing and will print an error "
+"message.\n"
+"[b]Note:[/b] [method delay_msec] is a [i]blocking[/i] way to delay code "
+"execution. To delay code execution in a non-blocking way, see [method "
+"SceneTree.create_timer]. Yielding with [method SceneTree.create_timer] will "
+"delay the execution of code placed below the [code]yield[/code] without "
+"affecting the rest of the project (or editor, for [EditorPlugin]s and "
+"[EditorScript]s).\n"
+"[b]Note:[/b] When [method delay_msec] is called on the main thread, it will "
+"freeze the project and will prevent it from redrawing and registering input "
+"until the delay has passed. When using [method delay_msec] as part of an "
+"[EditorPlugin] or [EditorScript], it will freeze the editor but won't freeze "
+"the project if it is currently running (since the project is an independent "
+"child process)."
+msgstr ""
+
+#: doc/classes/OS.xml:59
+msgid ""
+"Delays execution of the current thread by [code]usec[/code] microseconds. "
+"[code]usec[/code] must be greater than or equal to [code]0[/code]. "
+"Otherwise, [method delay_usec] will do nothing and will print an error "
+"message.\n"
+"[b]Note:[/b] [method delay_usec] is a [i]blocking[/i] way to delay code "
+"execution. To delay code execution in a non-blocking way, see [method "
+"SceneTree.create_timer]. Yielding with [method SceneTree.create_timer] will "
+"delay the execution of code placed below the [code]yield[/code] without "
+"affecting the rest of the project (or editor, for [EditorPlugin]s and "
+"[EditorScript]s).\n"
+"[b]Note:[/b] When [method delay_usec] is called on the main thread, it will "
+"freeze the project and will prevent it from redrawing and registering input "
+"until the delay has passed. When using [method delay_usec] as part of an "
+"[EditorPlugin] or [EditorScript], it will freeze the editor but won't freeze "
+"the project if it is currently running (since the project is an independent "
+"child process)."
+msgstr ""
+
+#: doc/classes/OS.xml:68
+msgid ""
+"Dumps the memory allocation ringlist to a file (only works in debug).\n"
+"Entry format per line: \"Address - Size - Description\"."
+msgstr ""
+
+#: doc/classes/OS.xml:76
+msgid ""
+"Dumps all used resources to file (only works in debug).\n"
+"Entry format per line: \"Resource Type : Resource Location\".\n"
+"At the end of the file is a statistic of all used Resource Types."
+msgstr ""
+
+#: doc/classes/OS.xml:89
+msgid ""
+"Execute the file at the given path with the arguments passed as an array of "
+"strings. Platform path resolution will take place. The resolved file must "
+"exist and be executable.\n"
+"The arguments are used in the given order and separated by a space, so "
+"[code]OS.execute(\"ping\", [\"-w\", \"3\", \"godotengine.org\"], false)[/"
+"code] will resolve to [code]ping -w 3 godotengine.org[/code] in the system's "
+"shell.\n"
+"This method has slightly different behavior based on whether the "
+"[code]blocking[/code] mode is enabled.\n"
+"If [code]blocking[/code] is [code]true[/code], the Godot thread will pause "
+"its execution while waiting for the process to terminate. The shell output "
+"of the process will be written to the [code]output[/code] array as a single "
+"string. When the process terminates, the Godot thread will resume "
+"execution.\n"
+"If [code]blocking[/code] is [code]false[/code], the Godot thread will "
+"continue while the new process runs. It is not possible to retrieve the "
+"shell output in non-blocking mode, so [code]output[/code] will be empty.\n"
+"The return value also depends on the blocking mode. When blocking, the "
+"method will return an exit code of the process. When non-blocking, the "
+"method returns a process ID, which you can use to monitor the process (and "
+"potentially terminate it with [method kill]). If the process forking (non-"
+"blocking) or opening (blocking) fails, the method will return [code]-1[/"
+"code] or another exit code.\n"
+"Example of blocking mode and retrieving the shell output:\n"
+"[codeblock]\n"
+"var output = []\n"
+"var exit_code = OS.execute(\"ls\", [\"-l\", \"/tmp\"], true, output)\n"
+"[/codeblock]\n"
+"Example of non-blocking mode, running another instance of the project and "
+"storing its process ID:\n"
+"[codeblock]\n"
+"var pid = OS.execute(OS.get_executable_path(), [], false)\n"
+"[/codeblock]\n"
+"If you wish to access a shell built-in or perform a composite command, a "
+"platform-specific shell can be invoked. For example:\n"
+"[codeblock]\n"
+"OS.execute(\"CMD.exe\", [\"/C\", \"cd %TEMP% && dir\"], true, output)\n"
+"[/codeblock]\n"
+"[b]Note:[/b] This method is implemented on Android, iOS, Linux, macOS and "
+"Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:115
+msgid "Returns the scancode of the given string (e.g. \"Escape\")."
+msgstr ""
+
+#: doc/classes/OS.xml:121
+msgid "Returns the total number of available audio drivers."
+msgstr ""
+
+#: doc/classes/OS.xml:128
+msgid "Returns the audio driver name for the given index."
+msgstr ""
+
+#: doc/classes/OS.xml:134
+msgid ""
+"Returns the [i]global[/i] cache data directory according to the operating "
+"system's standards. On desktop platforms, this path can be overridden by "
+"setting the [code]XDG_CACHE_HOME[/code] environment variable before starting "
+"the project. See [url=https://docs.godotengine.org/en/latest/tutorials/io/"
+"data_paths.html]File paths in Godot projects[/url] in the documentation for "
+"more information. See also [method get_config_dir] and [method "
+"get_data_dir].\n"
+"Not to be confused with [method get_user_data_dir], which returns the "
+"[i]project-specific[/i] user data path."
+msgstr ""
+
+#: doc/classes/OS.xml:141
+msgid ""
+"Returns the command-line arguments passed to the engine.\n"
+"Command-line arguments can be written in any form, including both [code]--"
+"key value[/code] and [code]--key=value[/code] forms so they can be properly "
+"parsed, as long as custom command-line arguments do not conflict with engine "
+"arguments.\n"
+"You can also incorporate environment variables using the [method "
+"get_environment] method.\n"
+"You can set [member ProjectSettings.editor/main_run_args] to define command-"
+"line arguments to be passed by the editor when running the project.\n"
+"Here's a minimal example on how to parse command-line arguments into a "
+"dictionary using the [code]--key=value[/code] form for arguments:\n"
+"[codeblock]\n"
+"var arguments = {}\n"
+"for argument in OS.get_cmdline_args():\n"
+" if argument.find(\"=\") > -1:\n"
+" var key_value = argument.split(\"=\")\n"
+" arguments[key_value[0].lstrip(\"--\")] = key_value[1]\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/OS.xml:158
+msgid ""
+"Returns the [i]global[/i] user configuration directory according to the "
+"operating system's standards. On desktop platforms, this path can be "
+"overridden by setting the [code]XDG_CONFIG_HOME[/code] environment variable "
+"before starting the project. See [url=https://docs.godotengine.org/en/latest/"
+"tutorials/io/data_paths.html]File paths in Godot projects[/url] in the "
+"documentation for more information. See also [method get_cache_dir] and "
+"[method get_data_dir].\n"
+"Not to be confused with [method get_user_data_dir], which returns the "
+"[i]project-specific[/i] user data path."
+msgstr ""
+
+#: doc/classes/OS.xml:165
+msgid ""
+"Returns an array of MIDI device names.\n"
+"The returned array will be empty if the system MIDI driver has not "
+"previously been initialised with [method open_midi_inputs].\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:173
+msgid ""
+"Returns the currently used video driver, using one of the values from [enum "
+"VideoDriver]."
+msgstr ""
+
+#: doc/classes/OS.xml:179
+msgid ""
+"Returns the [i]global[/i] user data directory according to the operating "
+"system's standards. On desktop platforms, this path can be overridden by "
+"setting the [code]XDG_DATA_HOME[/code] environment variable before starting "
+"the project. See [url=https://docs.godotengine.org/en/latest/tutorials/io/"
+"data_paths.html]File paths in Godot projects[/url] in the documentation for "
+"more information. See also [method get_cache_dir] and [method "
+"get_config_dir].\n"
+"Not to be confused with [method get_user_data_dir], which returns the "
+"[i]project-specific[/i] user data path."
+msgstr ""
+
+#: doc/classes/OS.xml:187
+msgid ""
+"Returns current date as a dictionary of keys: [code]year[/code], "
+"[code]month[/code], [code]day[/code], [code]weekday[/code], [code]dst[/code] "
+"(Daylight Savings Time)."
+msgstr ""
+
+#: doc/classes/OS.xml:194
+msgid ""
+"Returns current datetime as a dictionary of keys: [code]year[/code], "
+"[code]month[/code], [code]day[/code], [code]weekday[/code], [code]dst[/code] "
+"(Daylight Savings Time), [code]hour[/code], [code]minute[/code], "
+"[code]second[/code]."
+msgstr ""
+
+#: doc/classes/OS.xml:201
+msgid ""
+"Gets a dictionary of time values corresponding to the given UNIX epoch time "
+"(in seconds).\n"
+"The returned Dictionary's values will be the same as [method get_datetime], "
+"with the exception of Daylight Savings Time as it cannot be determined from "
+"the epoch."
+msgstr ""
+
+#: doc/classes/OS.xml:208
+msgid "Returns the total amount of dynamic memory used (only works in debug)."
+msgstr ""
+
+#: doc/classes/OS.xml:215
+msgid ""
+"Returns the value of an environment variable. Returns an empty string if the "
+"environment variable doesn't exist.\n"
+"[b]Note:[/b] Double-check the casing of [code]variable[/code]. Environment "
+"variable names are case-sensitive on all platforms except Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:222
+msgid "Returns the path to the current engine executable."
+msgstr ""
+
+#: doc/classes/OS.xml:228
+msgid ""
+"With this function, you can get the list of dangerous permissions that have "
+"been granted to the Android application.\n"
+"[b]Note:[/b] This method is implemented on Android."
+msgstr ""
+
+#: doc/classes/OS.xml:235
+msgid ""
+"Returns the IME cursor position (the currently-edited portion of the string) "
+"relative to the characters in the composition string.\n"
+"[constant MainLoop.NOTIFICATION_OS_IME_UPDATE] is sent to the application to "
+"notify it of changes to the IME cursor position.\n"
+"[b]Note:[/b] This method is implemented on macOS."
+msgstr ""
+
+#: doc/classes/OS.xml:243
+msgid ""
+"Returns the IME intermediate composition string.\n"
+"[constant MainLoop.NOTIFICATION_OS_IME_UPDATE] is sent to the application to "
+"notify it of changes to the IME composition string.\n"
+"[b]Note:[/b] This method is implemented on macOS."
+msgstr ""
+
+#: doc/classes/OS.xml:251
+msgid ""
+"Returns the current latin keyboard variant as a String.\n"
+"Possible return values are: [code]\"QWERTY\"[/code], [code]\"AZERTY\"[/"
+"code], [code]\"QZERTY\"[/code], [code]\"DVORAK\"[/code], [code]\"NEO\"[/"
+"code], [code]\"COLEMAK\"[/code] or [code]\"ERROR\"[/code].\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows. Returns "
+"[code]\"QWERTY\"[/code] on unsupported platforms."
+msgstr ""
+
+#: doc/classes/OS.xml:259
+msgid ""
+"Returns the host OS locale as a string of the form "
+"[code]language_Script_COUNTRY_VARIANT@extra[/code]. If you want only the "
+"language code and not the fully specified locale from the OS, you can use "
+"[method get_locale_language].\n"
+"[code]language[/code] - 2 or 3-letter [url=https://en.wikipedia.org/wiki/"
+"List_of_ISO_639-1_codes]language code[/url], in lower case.\n"
+"[code]Script[/code] - optional, 4-letter [url=https://en.wikipedia.org/wiki/"
+"ISO_15924]script code[/url], in title case.\n"
+"[code]COUNTRY[/code] - optional, 2 or 3-letter [url=https://en.wikipedia.org/"
+"wiki/ISO_3166-1]country code[/url], in upper case.\n"
+"[code]VARIANT[/code] - optional, language variant, region and sort order. "
+"Variant can have any number of underscored keywords.\n"
+"[code]extra[/code] - optional, semicolon separated list of additional key "
+"words. Currency, calendar, sort order and numbering system information."
+msgstr ""
+
+#: doc/classes/OS.xml:270
+msgid ""
+"Returns the host OS locale's 2 or 3-letter [url=https://en.wikipedia.org/"
+"wiki/List_of_ISO_639-1_codes]language code[/url] as a string which should be "
+"consistent on all platforms. This is equivalent to extracting the "
+"[code]language[/code] part of the [method get_locale] string.\n"
+"This can be used to narrow down fully specified locale strings to only the "
+"\"common\" language code, when you don't need the additional information "
+"about country code or variants. For example, for a French Canadian user with "
+"[code]fr_CA[/code] locale, this would return [code]fr[/code]."
+msgstr ""
+
+#: doc/classes/OS.xml:277
+msgid ""
+"Returns the model name of the current device.\n"
+"[b]Note:[/b] This method is implemented on Android and iOS. Returns "
+"[code]\"GenericDevice\"[/code] on unsupported platforms."
+msgstr ""
+
+#: doc/classes/OS.xml:284
+msgid ""
+"Returns the name of the host OS. Possible values are: [code]\"Android\"[/"
+"code], [code]\"iOS\"[/code], [code]\"HTML5\"[/code], [code]\"OSX\"[/code], "
+"[code]\"Server\"[/code], [code]\"Windows\"[/code], [code]\"UWP\"[/code], "
+"[code]\"X11\"[/code]."
+msgstr ""
+
+#: doc/classes/OS.xml:291
+msgid ""
+"Returns internal structure pointers for use in GDNative plugins.\n"
+"[b]Note:[/b] This method is implemented on Linux and Windows (other OSs will "
+"soon be supported)."
+msgstr ""
+
+#: doc/classes/OS.xml:298
+msgid ""
+"Returns the amount of battery left in the device as a percentage. Returns "
+"[code]-1[/code] if power state is unknown.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:305
+msgid ""
+"Returns an estimate of the time left in seconds before the device runs out "
+"of battery. Returns [code]-1[/code] if power state is unknown.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:312
+msgid ""
+"Returns the current state of the device regarding battery and power. See "
+"[enum PowerState] constants.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:319
+msgid ""
+"Returns the project's process ID.\n"
+"[b]Note:[/b] This method is implemented on Android, iOS, Linux, macOS and "
+"Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:326
+msgid "Returns the number of threads available on the host machine."
+msgstr ""
+
+#: doc/classes/OS.xml:332
+msgid "Returns the window size including decorations like window borders."
+msgstr ""
+
+#: doc/classes/OS.xml:339
+msgid ""
+"Returns the given scancode as a string (e.g. Return values: [code]\"Escape"
+"\"[/code], [code]\"Shift+Escape\"[/code]).\n"
+"See also [member InputEventKey.scancode] and [method InputEventKey."
+"get_scancode_with_modifiers]."
+msgstr ""
+
+#: doc/classes/OS.xml:346
+msgid "Returns the number of displays attached to the host machine."
+msgstr ""
+
+#: doc/classes/OS.xml:353
+msgid ""
+"Returns the dots per inch density of the specified screen. If [code]screen[/"
+"code] is [code]-1[/code] (the default value), the current screen will be "
+"used.\n"
+"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
+"scaling mode is used.\n"
+"[b]Note:[/b] On Android devices, the actual screen densities are grouped "
+"into six generalized densities:\n"
+"[codeblock]\n"
+" ldpi - 120 dpi\n"
+" mdpi - 160 dpi\n"
+" hdpi - 240 dpi\n"
+" xhdpi - 320 dpi\n"
+" xxhdpi - 480 dpi\n"
+"xxxhdpi - 640 dpi\n"
+"[/codeblock]\n"
+"[b]Note:[/b] This method is implemented on Android, Linux, macOS and "
+"Windows. Returns [code]72[/code] on unsupported platforms."
+msgstr ""
+
+#: doc/classes/OS.xml:370
+msgid ""
+"Return the greatest scale factor of all screens.\n"
+"[b]Note:[/b] On macOS returned value is [code]2.0[/code] if there is at "
+"least one hiDPI (Retina) screen in the system, and [code]1.0[/code] in all "
+"other cases.\n"
+"[b]Note:[/b] This method is implemented on macOS."
+msgstr ""
+
+#: doc/classes/OS.xml:379
+msgid ""
+"Returns the position of the specified screen by index. If [code]screen[/"
+"code] is [code]-1[/code] (the default value), the current screen will be "
+"used."
+msgstr ""
+
+#: doc/classes/OS.xml:386
+msgid ""
+"Return the scale factor of the specified screen by index. If [code]screen[/"
+"code] is [code]-1[/code] (the default value), the current screen will be "
+"used.\n"
+"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
+"screen, and [code]1.0[/code] for all other cases.\n"
+"[b]Note:[/b] This method is implemented on macOS."
+msgstr ""
+
+#: doc/classes/OS.xml:395
+msgid ""
+"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
+"code] is [code]-1[/code] (the default value), the current screen will be "
+"used."
+msgstr ""
+
+#: doc/classes/OS.xml:401
+msgid ""
+"Returns the amount of time in milliseconds it took for the boot logo to "
+"appear."
+msgstr ""
+
+#: doc/classes/OS.xml:407
+msgid "Returns the maximum amount of static memory used (only works in debug)."
+msgstr ""
+
+#: doc/classes/OS.xml:413
+msgid "Returns the amount of static memory being used by the program in bytes."
+msgstr ""
+
+#: doc/classes/OS.xml:421
+msgid ""
+"Returns the actual path to commonly used folders across different platforms. "
+"Available locations are specified in [enum SystemDir].\n"
+"[b]Note:[/b] This method is implemented on Android, Linux, macOS and "
+"Windows.\n"
+"[b]Note:[/b] Shared storage is implemented on Android and allows to "
+"differentiate between app specific and shared directories. Shared "
+"directories have additional restrictions on Android."
+msgstr ""
+
+#: doc/classes/OS.xml:429
+msgid "Returns the epoch time of the operating system in milliseconds."
+msgstr ""
+
+#: doc/classes/OS.xml:435
+msgid "Returns the epoch time of the operating system in seconds."
+msgstr ""
+
+#: doc/classes/OS.xml:441
+msgid ""
+"Returns the total number of available tablet drivers.\n"
+"[b]Note:[/b] This method is implemented on Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:449
+msgid ""
+"Returns the tablet driver name for the given index.\n"
+"[b]Note:[/b] This method is implemented on Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:456
+msgid ""
+"Returns the ID of the current thread. This can be used in logs to ease "
+"debugging of multi-threaded applications.\n"
+"[b]Note:[/b] Thread IDs are not deterministic and may be reused across "
+"application restarts."
+msgstr ""
+
+#: doc/classes/OS.xml:463
+msgid ""
+"Returns the amount of time passed in milliseconds since the engine started."
+msgstr ""
+
+#: doc/classes/OS.xml:469
+msgid ""
+"Returns the amount of time passed in microseconds since the engine started."
+msgstr ""
+
+#: doc/classes/OS.xml:476
+msgid "Returns current time as a dictionary of keys: hour, minute, second."
+msgstr ""
+
+#: doc/classes/OS.xml:482
+msgid ""
+"Returns the current time zone as a dictionary with the keys: bias and name."
+msgstr ""
+
+#: doc/classes/OS.xml:488
+msgid ""
+"Returns a string that is unique to the device.\n"
+"[b]Note:[/b] This string may change without notice if the user reinstalls/"
+"upgrades their operating system or changes their hardware. This means it "
+"should generally not be used to encrypt persistent data as the data saved "
+"before an unexpected ID change would become inaccessible. The returned "
+"string may also be falsified using external programs, so do not rely on the "
+"string returned by [method get_unique_id] for security purposes.\n"
+"[b]Note:[/b] Returns an empty string on HTML5 and UWP, as this method isn't "
+"implemented on those platforms yet."
+msgstr ""
+
+#: doc/classes/OS.xml:496
+msgid ""
+"Returns the current UNIX epoch timestamp in seconds.\n"
+"[b]Important:[/b] This is the system clock that the user can manually set. "
+"[b]Never use[/b] this method for precise time calculation since its results "
+"are also subject to automatic adjustments by the operating system. [b]Always "
+"use[/b] [method get_ticks_usec] or [method get_ticks_msec] for precise time "
+"calculation instead, since they are guaranteed to be monotonic (i.e. never "
+"decrease)."
+msgstr ""
+
+#: doc/classes/OS.xml:504
+msgid ""
+"Gets an epoch time value from a dictionary of time values.\n"
+"[code]datetime[/code] must be populated with the following keys: [code]year[/"
+"code], [code]month[/code], [code]day[/code], [code]hour[/code], "
+"[code]minute[/code], [code]second[/code].\n"
+"If the dictionary is empty [code]0[/code] is returned. If some keys are "
+"omitted, they default to the equivalent values for the UNIX epoch timestamp "
+"0 (1970-01-01 at 00:00:00 UTC).\n"
+"You can pass the output from [method get_datetime_from_unix_time] directly "
+"into this function. Daylight Savings Time ([code]dst[/code]), if present, is "
+"ignored."
+msgstr ""
+
+#: doc/classes/OS.xml:513
+msgid ""
+"Returns the absolute directory path where user data is written ([code]user://"
+"[/code]).\n"
+"On Linux, this is [code]~/.local/share/godot/app_userdata/[project_name][/"
+"code], or [code]~/.local/share/[custom_name][/code] if "
+"[code]use_custom_user_dir[/code] is set.\n"
+"On macOS, this is [code]~/Library/Application Support/Godot/app_userdata/"
+"[project_name][/code], or [code]~/Library/Application Support/[custom_name][/"
+"code] if [code]use_custom_user_dir[/code] is set.\n"
+"On Windows, this is [code]%APPDATA%\\Godot\\app_userdata\\[project_name][/"
+"code], or [code]%APPDATA%\\[custom_name][/code] if "
+"[code]use_custom_user_dir[/code] is set. [code]%APPDATA%[/code] expands to "
+"[code]%USERPROFILE%\\AppData\\Roaming[/code].\n"
+"If the project name is empty, [code]user://[/code] falls back to [code]res://"
+"[/code].\n"
+"Not to be confused with [method get_data_dir], which returns the [i]global[/"
+"i] (non-project-specific) user data directory."
+msgstr ""
+
+#: doc/classes/OS.xml:524
+msgid "Returns the number of video drivers supported on the current platform."
+msgstr ""
+
+#: doc/classes/OS.xml:531
+msgid ""
+"Returns the name of the video driver matching the given [code]driver[/code] "
+"index. This index is a value from [enum VideoDriver], and you can use "
+"[method get_current_video_driver] to get the current backend's index."
+msgstr ""
+
+#: doc/classes/OS.xml:537
+msgid ""
+"Returns the on-screen keyboard's height in pixels. Returns 0 if there is no "
+"keyboard or if it is currently hidden."
+msgstr ""
+
+#: doc/classes/OS.xml:543
+msgid ""
+"Returns unobscured area of the window where interactive controls should be "
+"rendered."
+msgstr ""
+
+#: doc/classes/OS.xml:553
+msgid ""
+"Add a new item with text \"label\" to global menu. Use \"_dock\" menu to add "
+"item to the macOS dock icon menu.\n"
+"[b]Note:[/b] This method is implemented on macOS."
+msgstr ""
+
+#: doc/classes/OS.xml:561
+msgid ""
+"Add a separator between items. Separators also occupy an index.\n"
+"[b]Note:[/b] This method is implemented on macOS."
+msgstr ""
+
+#: doc/classes/OS.xml:569
+msgid ""
+"Clear the global menu, in effect removing all items.\n"
+"[b]Note:[/b] This method is implemented on macOS."
+msgstr ""
+
+#: doc/classes/OS.xml:578
+msgid ""
+"Removes the item at index \"idx\" from the global menu. Note that the "
+"indexes of items after the removed item are going to be shifted by one.\n"
+"[b]Note:[/b] This method is implemented on macOS."
+msgstr ""
+
+#: doc/classes/OS.xml:586
+msgid ""
+"Returns [code]true[/code] if the environment variable with the name "
+"[code]variable[/code] exists.\n"
+"[b]Note:[/b] Double-check the casing of [code]variable[/code]. Environment "
+"variable names are case-sensitive on all platforms except Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:594
+msgid ""
+"Returns [code]true[/code] if the feature for the given feature tag is "
+"supported in the currently running instance, depending on the platform, "
+"build etc. Can be used to check whether you're currently running a debug "
+"build, on a certain platform or arch, etc. Refer to the [url=https://docs."
+"godotengine.org/en/3.4/getting_started/workflow/export/feature_tags."
+"html]Feature Tags[/url] documentation for more details.\n"
+"[b]Note:[/b] Tag names are case-sensitive."
+msgstr ""
+
+#: doc/classes/OS.xml:601
+msgid ""
+"Returns [code]true[/code] if the device has a touchscreen or emulates one."
+msgstr ""
+
+#: doc/classes/OS.xml:607
+msgid ""
+"Returns [code]true[/code] if the platform has a virtual keyboard, "
+"[code]false[/code] otherwise."
+msgstr ""
+
+#: doc/classes/OS.xml:613
+msgid "Hides the virtual keyboard if it is shown, does nothing otherwise."
+msgstr ""
+
+#: doc/classes/OS.xml:619
+msgid ""
+"Returns [code]true[/code] if the Godot binary used to run the project is a "
+"[i]debug[/i] export template, or when running in the editor.\n"
+"Returns [code]false[/code] if the Godot binary used to run the project is a "
+"[i]release[/i] export template.\n"
+"To check whether the Godot binary used to run the project is an export "
+"template (debug or release), use [code]OS.has_feature(\"standalone\")[/code] "
+"instead."
+msgstr ""
+
+#: doc/classes/OS.xml:627
+msgid ""
+"Returns [code]true[/code] if the [b]OK[/b] button should appear on the left "
+"and [b]Cancel[/b] on the right."
+msgstr ""
+
+#: doc/classes/OS.xml:634
+msgid ""
+"Returns [code]true[/code] if the input scancode corresponds to a Unicode "
+"character."
+msgstr ""
+
+#: doc/classes/OS.xml:640
+msgid ""
+"Returns [code]true[/code] if the engine was executed with [code]-v[/code] "
+"(verbose stdout)."
+msgstr ""
+
+#: doc/classes/OS.xml:646
+msgid ""
+"If [code]true[/code], the [code]user://[/code] file system is persistent, so "
+"that its state is the same after a player quits and starts the game again. "
+"Relevant to the HTML5 platform, where this persistence may be unavailable."
+msgstr ""
+
+#: doc/classes/OS.xml:652
+msgid ""
+"Returns [code]true[/code] if the window should always be on top of other "
+"windows."
+msgstr ""
+
+#: doc/classes/OS.xml:658
+msgid ""
+"Returns [code]true[/code] if the window is currently focused.\n"
+"[b]Note:[/b] Only implemented on desktop platforms. On other platforms, it "
+"will always return [code]true[/code]."
+msgstr ""
+
+#: doc/classes/OS.xml:665
+msgid ""
+"Returns active keyboard layout index.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:672
+msgid ""
+"Returns the number of keyboard layouts.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:680
+msgid ""
+"Returns the ISO-639/BCP-47 language code of the keyboard layout at position "
+"[code]index[/code].\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:688
+msgid ""
+"Returns the localized name of the keyboard layout at position [code]index[/"
+"code].\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:696
+msgid ""
+"Sets active keyboard layout.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:704
+msgid ""
+"Kill (terminate) the process identified by the given process ID ([code]pid[/"
+"code]), e.g. the one returned by [method execute] in non-blocking mode.\n"
+"[b]Note:[/b] This method can also be used to kill processes that were not "
+"spawned by the game.\n"
+"[b]Note:[/b] This method is implemented on Android, iOS, Linux, macOS and "
+"Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:712
+msgid ""
+"Moves the window to the front.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:719
+msgid ""
+"Returns [code]true[/code] if native video is playing.\n"
+"[b]Note:[/b] This method is only implemented on iOS."
+msgstr ""
+
+#: doc/classes/OS.xml:726
+msgid ""
+"Pauses native video playback.\n"
+"[b]Note:[/b] This method is only implemented on iOS."
+msgstr ""
+
+#: doc/classes/OS.xml:737
+msgid ""
+"Plays native video from the specified path, at the given volume and with "
+"audio and subtitle tracks.\n"
+"[b]Note:[/b] This method is only implemented on iOS."
+msgstr ""
+
+#: doc/classes/OS.xml:744
+msgid ""
+"Stops native video playback.\n"
+"[b]Note:[/b] This method is implemented on iOS."
+msgstr ""
+
+#: doc/classes/OS.xml:751
+msgid ""
+"Resumes native video playback.\n"
+"[b]Note:[/b] This method is implemented on iOS."
+msgstr ""
+
+#: doc/classes/OS.xml:758
+msgid ""
+"Initialises the singleton for the system MIDI driver.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:766
+msgid ""
+"Shows all resources in the game. Optionally, the list can be written to a "
+"file by specifying a file path in [code]tofile[/code]."
+msgstr ""
+
+#: doc/classes/OS.xml:772
+msgid "Shows the list of loaded textures sorted by size in memory."
+msgstr ""
+
+#: doc/classes/OS.xml:779
+msgid "Shows the number of resources loaded by the game of the given types."
+msgstr ""
+
+#: doc/classes/OS.xml:786
+msgid "Shows all resources currently used by the game."
+msgstr ""
+
+#: doc/classes/OS.xml:792
+msgid ""
+"Request the user attention to the window. It'll flash the taskbar button on "
+"Windows or bounce the dock icon on OSX.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:800
+msgid ""
+"At the moment this function is only used by [code]AudioDriverOpenSL[/code] "
+"to request permission for [code]RECORD_AUDIO[/code] on Android."
+msgstr ""
+
+#: doc/classes/OS.xml:806
+msgid ""
+"With this function, you can request dangerous permissions since normal "
+"permissions are automatically granted at install time in Android "
+"applications.\n"
+"[b]Note:[/b] This method is implemented on Android."
+msgstr ""
+
+#: doc/classes/OS.xml:815
+msgid ""
+"Sets the value of the environment variable [code]variable[/code] to "
+"[code]value[/code]. The environment variable will be set for the Godot "
+"process and any process executed with [method execute] after running [method "
+"set_environment]. The environment variable will [i]not[/i] persist to "
+"processes run after the Godot process was terminated.\n"
+"[b]Note:[/b] Double-check the casing of [code]variable[/code]. Environment "
+"variable names are case-sensitive on all platforms except Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:823
+msgid ""
+"Sets the game's icon using an [Image] resource.\n"
+"The same image is used for window caption, taskbar/dock and window selection "
+"dialog. Image is scaled as needed.\n"
+"[b]Note:[/b] This method is implemented on HTML5, Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:832
+msgid ""
+"Sets whether IME input mode should be enabled.\n"
+"If active IME handles key events before the application and creates an "
+"composition string and suggestion list.\n"
+"Application can retrieve the composition status by using [method "
+"get_ime_selection] and [method get_ime_text] functions.\n"
+"Completed composition string is committed when input is finished.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:843
+msgid ""
+"Sets position of IME suggestion list popup (in window coordinates).\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:851
+msgid ""
+"Sets the game's icon using a multi-size platform-specific icon file ([code]*."
+"ico[/code] on Windows and [code]*.icns[/code] on macOS).\n"
+"Appropriate size sub-icons are used for window caption, taskbar/dock and "
+"window selection dialog.\n"
+"[b]Note:[/b] This method is implemented on macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:860
+msgid "Sets the name of the current thread."
+msgstr ""
+
+#: doc/classes/OS.xml:867
+msgid "Enables backup saves if [code]enabled[/code] is [code]true[/code]."
+msgstr ""
+
+#: doc/classes/OS.xml:874
+msgid ""
+"Sets whether the window should always be on top.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:882
+msgid ""
+"Sets a polygonal region of the window which accepts mouse events. Mouse "
+"events outside the region will be passed through.\n"
+"Passing an empty array will disable passthrough support (all mouse events "
+"will be intercepted by the window, which is the default behavior).\n"
+"[codeblock]\n"
+"# Set region, using Path2D node.\n"
+"OS.set_window_mouse_passthrough($Path2D.curve.get_baked_points())\n"
+"\n"
+"# Set region, using Polygon2D node.\n"
+"OS.set_window_mouse_passthrough($Polygon2D.polygon)\n"
+"\n"
+"# Reset region to default.\n"
+"OS.set_window_mouse_passthrough([])\n"
+"[/codeblock]\n"
+"[b]Note:[/b] On Windows, the portion of a window that lies outside the "
+"region is not drawn, while on Linux and macOS it is.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:902
+msgid ""
+"Sets the window title to the specified string.\n"
+"[b]Note:[/b] This should be used sporadically. Don't set this every frame, "
+"as that will negatively affect performance on some window managers.\n"
+"[b]Note:[/b] This method is implemented on HTML5, Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:911
+msgid ""
+"Requests the OS to open a resource with the most appropriate program. For "
+"example:\n"
+"- [code]OS.shell_open(\"C:\\\\Users\\name\\Downloads\")[/code] on Windows "
+"opens the file explorer at the user's Downloads folder.\n"
+"- [code]OS.shell_open(\"https://godotengine.org\")[/code] opens the default "
+"web browser on the official Godot website.\n"
+"- [code]OS.shell_open(\"mailto:example@example.com\")[/code] opens the "
+"default email client with the \"To\" field set to [code]example@example.com[/"
+"code]. See [url=https://blog.escapecreative.com/customizing-mailto-"
+"links/]Customizing [code]mailto:[/code] Links[/url] for a list of fields "
+"that can be added.\n"
+"Use [method ProjectSettings.globalize_path] to convert a [code]res://[/code] "
+"or [code]user://[/code] path into a system path for use with this method.\n"
+"[b]Note:[/b] This method is implemented on Android, iOS, HTML5, Linux, macOS "
+"and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:924
+msgid ""
+"Shows the virtual keyboard if the platform has one.\n"
+"The [code]existing_text[/code] parameter is useful for implementing your own "
+"[LineEdit] or [TextEdit], as it tells the virtual keyboard what text has "
+"already been typed (the virtual keyboard uses it for auto-correct and "
+"predictions).\n"
+"The [code]multiline[/code] parameter needs to be set to [code]true[/code] to "
+"be able to enter multiple lines of text, as in [TextEdit].\n"
+"[b]Note:[/b] This method is implemented on Android, iOS and UWP."
+msgstr ""
+
+#: doc/classes/OS.xml:933
+msgid "The clipboard from the host OS. Might be unavailable on some platforms."
+msgstr ""
+
+#: doc/classes/OS.xml:936
+msgid "The current screen index (starting from 0)."
+msgstr ""
+
+#: doc/classes/OS.xml:939
+msgid ""
+"If [code]true[/code], the engine filters the time delta measured between "
+"each frame, and attempts to compensate for random variation. This will only "
+"operate on systems where V-Sync is active."
+msgstr ""
+
+#: doc/classes/OS.xml:942
+msgid ""
+"The exit code passed to the OS when the main loop exits. By convention, an "
+"exit code of [code]0[/code] indicates success whereas a non-zero exit code "
+"indicates an error. For portability reasons, the exit code should be set "
+"between 0 and 125 (inclusive).\n"
+"[b]Note:[/b] This value will be ignored if using [method SceneTree.quit] "
+"with an [code]exit_code[/code] argument passed."
+msgstr ""
+
+#: doc/classes/OS.xml:946
+msgid ""
+"If [code]true[/code], the engine tries to keep the screen on while the game "
+"is running. Useful on mobile."
+msgstr ""
+
+#: doc/classes/OS.xml:949
+msgid ""
+"If [code]true[/code], the engine optimizes for low processor usage by only "
+"refreshing the screen if needed. Can improve battery consumption on mobile."
+msgstr ""
+
+#: doc/classes/OS.xml:952
+msgid ""
+"The amount of sleeping between frames when the low-processor usage mode is "
+"enabled (in microseconds). Higher values will result in lower CPU usage."
+msgstr ""
+
+#: doc/classes/OS.xml:955
+msgid ""
+"The maximum size of the window (without counting window manager "
+"decorations). Does not affect fullscreen mode. Set to [code](0, 0)[/code] to "
+"reset to the system default value."
+msgstr ""
+
+#: doc/classes/OS.xml:958
+msgid ""
+"The minimum size of the window in pixels (without counting window manager "
+"decorations). Does not affect fullscreen mode. Set to [code](0, 0)[/code] to "
+"reset to the system's default value.\n"
+"[b]Note:[/b] By default, the project window has a minimum size of "
+"[code]Vector2(64, 64)[/code]. This prevents issues that can arise when the "
+"window is resized to a near-zero size."
+msgstr ""
+
+#: doc/classes/OS.xml:962
+msgid "The current screen orientation."
+msgstr ""
+
+#: doc/classes/OS.xml:965
+msgid "The current tablet driver in use."
+msgstr ""
+
+#: doc/classes/OS.xml:968
+msgid "If [code]true[/code], vertical synchronization (Vsync) is enabled."
+msgstr ""
+
+#: doc/classes/OS.xml:971
+msgid ""
+"If [code]true[/code] and [code]vsync_enabled[/code] is true, the operating "
+"system's window compositor will be used for vsync when the compositor is "
+"enabled and the game is in windowed mode.\n"
+"[b]Note:[/b] This option is experimental and meant to alleviate stutter "
+"experienced by some users. However, some users have experienced a Vsync "
+"framerate halving (e.g. from 60 FPS to 30 FPS) when using it.\n"
+"[b]Note:[/b] This property is only implemented on Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:976
+msgid ""
+"If [code]true[/code], removes the window frame.\n"
+"[b]Note:[/b] Setting [code]window_borderless[/code] to [code]false[/code] "
+"disables per-pixel transparency."
+msgstr ""
+
+#: doc/classes/OS.xml:980
+msgid "If [code]true[/code], the window is fullscreen."
+msgstr ""
+
+#: doc/classes/OS.xml:983
+msgid "If [code]true[/code], the window is maximized."
+msgstr ""
+
+#: doc/classes/OS.xml:986
+msgid "If [code]true[/code], the window is minimized."
+msgstr ""
+
+#: doc/classes/OS.xml:989
+msgid ""
+"If [code]true[/code], the window background is transparent and the window "
+"frame is removed.\n"
+"Use [code]get_tree().get_root().set_transparent_background(true)[/code] to "
+"disable main viewport background rendering.\n"
+"[b]Note:[/b] This property has no effect if [member ProjectSettings.display/"
+"window/per_pixel_transparency/allowed] setting is disabled.\n"
+"[b]Note:[/b] This property is implemented on HTML5, Linux, macOS, Windows, "
+"and Android. It can't be changed at runtime for Android. Use [member "
+"ProjectSettings.display/window/per_pixel_transparency/enabled] to set it at "
+"startup instead."
+msgstr ""
+
+#: doc/classes/OS.xml:995
+msgid ""
+"The window position relative to the screen, the origin is the top left "
+"corner, +Y axis goes to the bottom and +X axis goes to the right."
+msgstr ""
+
+#: doc/classes/OS.xml:998
+msgid "If [code]true[/code], the window is resizable by the user."
+msgstr ""
+
+#: doc/classes/OS.xml:1001
+msgid "The size of the window (without counting window manager decorations)."
+msgstr ""
+
+#: doc/classes/OS.xml:1006
+msgid ""
+"The GLES2 rendering backend. It uses OpenGL ES 2.0 on mobile devices, OpenGL "
+"2.1 on desktop platforms and WebGL 1.0 on the web."
+msgstr ""
+
+#: doc/classes/OS.xml:1009
+msgid ""
+"The GLES3 rendering backend. It uses OpenGL ES 3.0 on mobile devices, OpenGL "
+"3.3 on desktop platforms and WebGL 2.0 on the web."
+msgstr ""
+
+#: doc/classes/OS.xml:1012
+msgid "Sunday."
+msgstr ""
+
+#: doc/classes/OS.xml:1015
+msgid "Monday."
+msgstr ""
+
+#: doc/classes/OS.xml:1018
+msgid "Tuesday."
+msgstr ""
+
+#: doc/classes/OS.xml:1021
+msgid "Wednesday."
+msgstr ""
+
+#: doc/classes/OS.xml:1024
+msgid "Thursday."
+msgstr ""
+
+#: doc/classes/OS.xml:1027
+msgid "Friday."
+msgstr ""
+
+#: doc/classes/OS.xml:1030
+msgid "Saturday."
+msgstr ""
+
+#: doc/classes/OS.xml:1033
+msgid "January."
+msgstr ""
+
+#: doc/classes/OS.xml:1036
+msgid "February."
+msgstr ""
+
+#: doc/classes/OS.xml:1039
+msgid "March."
+msgstr ""
+
+#: doc/classes/OS.xml:1042
+msgid "April."
+msgstr ""
+
+#: doc/classes/OS.xml:1045
+msgid "May."
+msgstr ""
+
+#: doc/classes/OS.xml:1048
+msgid "June."
+msgstr ""
+
+#: doc/classes/OS.xml:1051
+msgid "July."
+msgstr ""
+
+#: doc/classes/OS.xml:1054
+msgid "August."
+msgstr ""
+
+#: doc/classes/OS.xml:1057
+msgid "September."
+msgstr ""
+
+#: doc/classes/OS.xml:1060
+msgid "October."
+msgstr ""
+
+#: doc/classes/OS.xml:1063
+msgid "November."
+msgstr ""
+
+#: doc/classes/OS.xml:1066
+msgid "December."
+msgstr ""
+
+#: doc/classes/OS.xml:1069
+msgid ""
+"Application handle:\n"
+"- Windows: [code]HINSTANCE[/code] of the application\n"
+"- MacOS: [code]NSApplication*[/code] of the application (not yet "
+"implemented)\n"
+"- Android: [code]JNIEnv*[/code] of the application (not yet implemented)"
+msgstr ""
+
+#: doc/classes/OS.xml:1075
+msgid ""
+"Display handle:\n"
+"- Linux: [code]X11::Display*[/code] for the display"
+msgstr ""
+
+#: doc/classes/OS.xml:1079
+msgid ""
+"Window handle:\n"
+"- Windows: [code]HWND[/code] of the main window\n"
+"- Linux: [code]X11::Window*[/code] of the main window\n"
+"- MacOS: [code]NSWindow*[/code] of the main window (not yet implemented)\n"
+"- Android: [code]jObject[/code] the main android activity (not yet "
+"implemented)"
+msgstr ""
+
+#: doc/classes/OS.xml:1086
+msgid ""
+"Window view:\n"
+"- Windows: [code]HDC[/code] of the main window drawing context\n"
+"- MacOS: [code]NSView*[/code] of the main windows view (not yet implemented)"
+msgstr ""
+
+#: doc/classes/OS.xml:1091
+msgid ""
+"OpenGL Context:\n"
+"- Windows: [code]HGLRC[/code]\n"
+"- Linux: [code]X11::GLXContext[/code]\n"
+"- MacOS: [code]NSOpenGLContext*[/code] (not yet implemented)"
+msgstr ""
+
+#: doc/classes/OS.xml:1097
+msgid "Landscape screen orientation."
+msgstr ""
+
+#: doc/classes/OS.xml:1100
+msgid "Portrait screen orientation."
+msgstr ""
+
+#: doc/classes/OS.xml:1103
+msgid "Reverse landscape screen orientation."
+msgstr ""
+
+#: doc/classes/OS.xml:1106
+msgid "Reverse portrait screen orientation."
+msgstr ""
+
+#: doc/classes/OS.xml:1109
+msgid "Uses landscape or reverse landscape based on the hardware sensor."
+msgstr ""
+
+#: doc/classes/OS.xml:1112
+msgid "Uses portrait or reverse portrait based on the hardware sensor."
+msgstr ""
+
+#: doc/classes/OS.xml:1115
+msgid "Uses most suitable orientation based on the hardware sensor."
+msgstr ""
+
+#: doc/classes/OS.xml:1118
+msgid "Desktop directory path."
+msgstr ""
+
+#: doc/classes/OS.xml:1121
+msgid "DCIM (Digital Camera Images) directory path."
+msgstr ""
+
+#: doc/classes/OS.xml:1124
+msgid "Documents directory path."
+msgstr ""
+
+#: doc/classes/OS.xml:1127
+msgid "Downloads directory path."
+msgstr ""
+
+#: doc/classes/OS.xml:1130
+msgid "Movies directory path."
+msgstr ""
+
+#: doc/classes/OS.xml:1133
+msgid "Music directory path."
+msgstr ""
+
+#: doc/classes/OS.xml:1136
+msgid "Pictures directory path."
+msgstr ""
+
+#: doc/classes/OS.xml:1139
+msgid "Ringtones directory path."
+msgstr ""
+
+#: doc/classes/OS.xml:1142
+msgid "Unknown powerstate."
+msgstr ""
+
+#: doc/classes/OS.xml:1145
+msgid "Unplugged, running on battery."
+msgstr ""
+
+#: doc/classes/OS.xml:1148
+msgid "Plugged in, no battery available."
+msgstr ""
+
+#: doc/classes/OS.xml:1151
+msgid "Plugged in, battery charging."
+msgstr ""
+
+#: doc/classes/OS.xml:1154
+msgid "Plugged in, battery fully charged."
+msgstr ""
+
+#: doc/classes/PackedDataContainerRef.xml:4
+msgid "Reference version of [PackedDataContainer]."
+msgstr ""
+
+#: doc/classes/PackedScene.xml:4
+msgid "An abstraction of a serialized scene."
+msgstr ""
+
+#: doc/classes/PackedScene.xml:7
+msgid ""
+"A simplified interface to a scene file. Provides access to operations and "
+"checks that can be performed on the scene resource itself.\n"
+"Can be used to save a node to a file. When saving, the node as well as all "
+"the nodes it owns get saved (see [code]owner[/code] property on [Node]).\n"
+"[b]Note:[/b] The node doesn't need to own itself.\n"
+"[b]Example of loading a saved scene:[/b]\n"
+"[codeblock]\n"
+"# Use `load()` instead of `preload()` if the path isn't known at compile-"
+"time.\n"
+"var scene = preload(\"res://scene.tscn\").instance()\n"
+"# Add the node as a child of the node the script is attached to.\n"
+"add_child(scene)\n"
+"[/codeblock]\n"
+"[b]Example of saving a node with different owners:[/b] The following example "
+"creates 3 objects: [code]Node2D[/code] ([code]node[/code]), "
+"[code]RigidBody2D[/code] ([code]rigid[/code]) and [code]CollisionObject2D[/"
+"code] ([code]collision[/code]). [code]collision[/code] is a child of "
+"[code]rigid[/code] which is a child of [code]node[/code]. Only [code]rigid[/"
+"code] is owned by [code]node[/code] and [code]pack[/code] will therefore "
+"only save those two nodes, but not [code]collision[/code].\n"
+"[codeblock]\n"
+"# Create the objects.\n"
+"var node = Node2D.new()\n"
+"var rigid = RigidBody2D.new()\n"
+"var collision = CollisionShape2D.new()\n"
+"\n"
+"# Create the object hierarchy.\n"
+"rigid.add_child(collision)\n"
+"node.add_child(rigid)\n"
+"\n"
+"# Change owner of `rigid`, but not of `collision`.\n"
+"rigid.owner = node\n"
+"\n"
+"var scene = PackedScene.new()\n"
+"# Only `node` and `rigid` are now packed.\n"
+"var result = scene.pack(node)\n"
+"if result == OK:\n"
+" var error = ResourceSaver.save(\"res://path/name.scn\", scene) # Or "
+"\"user://...\"\n"
+" if error != OK:\n"
+" push_error(\"An error occurred while saving the scene to disk.\")\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/PackedScene.xml:47
+msgid "Returns [code]true[/code] if the scene file has nodes."
+msgstr ""
+
+#: doc/classes/PackedScene.xml:53
+msgid ""
+"Returns the [code]SceneState[/code] representing the scene file contents."
+msgstr ""
+
+#: doc/classes/PackedScene.xml:60
+msgid ""
+"Instantiates the scene's node hierarchy. Triggers child scene "
+"instantiation(s). Triggers a [constant Node.NOTIFICATION_INSTANCED] "
+"notification on the root node."
+msgstr ""
+
+#: doc/classes/PackedScene.xml:67
+msgid ""
+"Pack will ignore any sub-nodes not owned by given node. See [member Node."
+"owner]."
+msgstr ""
+
+#: doc/classes/PackedScene.xml:73
+msgid ""
+"A dictionary representation of the scene contents.\n"
+"Available keys include \"rnames\" and \"variants\" for resources, "
+"\"node_count\", \"nodes\", \"node_paths\" for nodes, \"editable_instances\" "
+"for base scene children overrides, \"conn_count\" and \"conns\" for signal "
+"connections, and \"version\" for the format style of the PackedScene."
+msgstr ""
+
+#: doc/classes/PackedScene.xml:79
+msgid "If passed to [method instance], blocks edits to the scene state."
+msgstr ""
+
+#: doc/classes/PackedScene.xml:82
+msgid ""
+"If passed to [method instance], provides local scene resources to the local "
+"scene.\n"
+"[b]Note:[/b] Only available in editor builds."
+msgstr ""
+
+#: doc/classes/PackedScene.xml:86
+msgid ""
+"If passed to [method instance], provides local scene resources to the local "
+"scene. Only the main scene should receive the main edit state.\n"
+"[b]Note:[/b] Only available in editor builds."
+msgstr ""
+
+#: doc/classes/PacketPeer.xml:4
+msgid "Abstraction and base class for packet-based protocols."
+msgstr ""
+
+#: doc/classes/PacketPeer.xml:7
+msgid ""
+"PacketPeer is an abstraction and base class for packet-based protocols (such "
+"as UDP). It provides an API for sending and receiving packets both as raw "
+"data or variables. This makes it easy to transfer data over a protocol, "
+"without having to encode data as low-level bytes or having to worry about "
+"network ordering."
+msgstr ""
+
+#: doc/classes/PacketPeer.xml:15
+msgid "Returns the number of packets currently available in the ring-buffer."
+msgstr ""
+
+#: doc/classes/PacketPeer.xml:21
+msgid "Gets a raw packet."
+msgstr ""
+
+#: doc/classes/PacketPeer.xml:27
+msgid ""
+"Returns the error state of the last packet received (via [method get_packet] "
+"and [method get_var])."
+msgstr ""
+
+#: doc/classes/PacketPeer.xml:34
+msgid ""
+"Gets a Variant. If [code]allow_objects[/code] (or [member "
+"allow_object_decoding]) is [code]true[/code], decoding objects is allowed.\n"
+"[b]Warning:[/b] Deserialized objects can contain code which gets executed. "
+"Do not use this option if the serialized object comes from untrusted sources "
+"to avoid potential security threats such as remote code execution."
+msgstr ""
+
+#: doc/classes/PacketPeer.xml:42
+msgid "Sends a raw packet."
+msgstr ""
+
+#: doc/classes/PacketPeer.xml:50
+msgid ""
+"Sends a [Variant] as a packet. If [code]full_objects[/code] (or [member "
+"allow_object_decoding]) is [code]true[/code], encoding objects is allowed "
+"(and can potentially include code)."
+msgstr ""
+
+#: doc/classes/PacketPeer.xml:56
+msgid ""
+"[i]Deprecated.[/i] Use [code]get_var[/code] and [code]put_var[/code] "
+"parameters instead.\n"
+"If [code]true[/code], the PacketPeer will allow encoding and decoding of "
+"object via [method get_var] and [method put_var].\n"
+"[b]Warning:[/b] Deserialized objects can contain code which gets executed. "
+"Do not use this option if the serialized object comes from untrusted sources "
+"to avoid potential security threats such as remote code execution."
+msgstr ""
+
+#: doc/classes/PacketPeer.xml:61
+msgid ""
+"Maximum buffer size allowed when encoding [Variant]s. Raise this value to "
+"support heavier memory allocations.\n"
+"The [method put_var] method allocates memory on the stack, and the buffer "
+"used will grow automatically to the closest power of two to match the size "
+"of the [Variant]. If the [Variant] is bigger than "
+"[code]encode_buffer_max_size[/code], the method will error out with "
+"[constant ERR_OUT_OF_MEMORY]."
+msgstr ""
+
+#: doc/classes/PacketPeerDTLS.xml:4
+msgid "DTLS packet peer."
+msgstr ""
+
+#: doc/classes/PacketPeerDTLS.xml:7
+msgid ""
+"This class represents a DTLS peer connection. It can be used to connect to a "
+"DTLS server, and is returned by [method DTLSServer.take_connection].\n"
+"[b]Warning:[/b] SSL/TLS certificate revocation and certificate pinning are "
+"currently not supported. Revoked certificates are accepted as long as they "
+"are otherwise valid. If this is a concern, you may want to use automatically "
+"managed certificates with a short validity period."
+msgstr ""
+
+#: doc/classes/PacketPeerDTLS.xml:20
+msgid ""
+"Connects a [code]peer[/code] beginning the DTLS handshake using the "
+"underlying [PacketPeerUDP] which must be connected (see [method "
+"PacketPeerUDP.connect_to_host]). If [code]validate_certs[/code] is "
+"[code]true[/code], [PacketPeerDTLS] will validate that the certificate "
+"presented by the remote peer and match it with the [code]for_hostname[/code] "
+"argument. You can specify a custom [X509Certificate] to use for validation "
+"via the [code]valid_certificate[/code] argument."
+msgstr ""
+
+#: doc/classes/PacketPeerDTLS.xml:26
+msgid "Disconnects this peer, terminating the DTLS session."
+msgstr ""
+
+#: doc/classes/PacketPeerDTLS.xml:32 doc/classes/StreamPeerSSL.xml:43
+msgid "Returns the status of the connection. See [enum Status] for values."
+msgstr ""
+
+#: doc/classes/PacketPeerDTLS.xml:38
+msgid ""
+"Poll the connection to check for incoming packets. Call this frequently to "
+"update the status and keep the connection working."
+msgstr ""
+
+#: doc/classes/PacketPeerDTLS.xml:44
+msgid "A status representing a [PacketPeerDTLS] that is disconnected."
+msgstr ""
+
+#: doc/classes/PacketPeerDTLS.xml:47
+msgid ""
+"A status representing a [PacketPeerDTLS] that is currently performing the "
+"handshake with a remote peer."
+msgstr ""
+
+#: doc/classes/PacketPeerDTLS.xml:50
+msgid ""
+"A status representing a [PacketPeerDTLS] that is connected to a remote peer."
+msgstr ""
+
+#: doc/classes/PacketPeerDTLS.xml:53
+msgid "A status representing a [PacketPeerDTLS] in a generic error state."
+msgstr ""
+
+#: doc/classes/PacketPeerDTLS.xml:56
+msgid ""
+"An error status that shows a mismatch in the DTLS certificate domain "
+"presented by the host and the domain requested for validation."
+msgstr ""
+
+#: doc/classes/PacketPeerStream.xml:4
+msgid "Wrapper to use a PacketPeer over a StreamPeer."
+msgstr ""
+
+#: doc/classes/PacketPeerStream.xml:7
+msgid ""
+"PacketStreamPeer provides a wrapper for working using packets over a stream. "
+"This allows for using packet based code with StreamPeers. PacketPeerStream "
+"implements a custom protocol over the StreamPeer, so the user should not "
+"read or write to the wrapped StreamPeer directly."
+msgstr ""
+
+#: doc/classes/PacketPeerStream.xml:19
+msgid "The wrapped [StreamPeer] object."
+msgstr ""
+
+#: doc/classes/PacketPeerUDP.xml:4
+msgid "UDP packet peer."
+msgstr ""
+
+#: doc/classes/PacketPeerUDP.xml:7
+msgid ""
+"UDP packet peer. Can be used to send raw UDP packets as well as [Variant]s."
+msgstr ""
+
+#: doc/classes/PacketPeerUDP.xml:15
+msgid "Closes the UDP socket the [PacketPeerUDP] is currently listening on."
+msgstr ""
+
+#: doc/classes/PacketPeerUDP.xml:23
+msgid ""
+"Calling this method connects this UDP peer to the given [code]host[/code]/"
+"[code]port[/code] pair. UDP is in reality connectionless, so this option "
+"only means that incoming packets from different addresses are automatically "
+"discarded, and that outgoing packets are always sent to the connected "
+"address (future calls to [method set_dest_address] are not allowed). This "
+"method does not send any data to the remote peer, to do that, use [method "
+"PacketPeer.put_var] or [method PacketPeer.put_packet] as usual. See also "
+"[UDPServer].\n"
+"[b]Note:[/b] Connecting to the remote peer does not help to protect from "
+"malicious attacks like IP spoofing, etc. Think about using an encryption "
+"technique like SSL or DTLS if you feel like your application is transferring "
+"sensitive information."
+msgstr ""
+
+#: doc/classes/PacketPeerUDP.xml:30
+msgid ""
+"Returns the IP of the remote peer that sent the last packet(that was "
+"received with [method PacketPeer.get_packet] or [method PacketPeer.get_var])."
+msgstr ""
+
+#: doc/classes/PacketPeerUDP.xml:36
+msgid ""
+"Returns the port of the remote peer that sent the last packet(that was "
+"received with [method PacketPeer.get_packet] or [method PacketPeer.get_var])."
+msgstr ""
+
+#: doc/classes/PacketPeerUDP.xml:42
+msgid ""
+"Returns [code]true[/code] if the UDP socket is open and has been connected "
+"to a remote address. See [method connect_to_host]."
+msgstr ""
+
+#: doc/classes/PacketPeerUDP.xml:48
+msgid "Returns whether this [PacketPeerUDP] is listening."
+msgstr ""
+
+#: doc/classes/PacketPeerUDP.xml:56
+msgid ""
+"Joins the multicast group specified by [code]multicast_address[/code] using "
+"the interface identified by [code]interface_name[/code].\n"
+"You can join the same multicast group with multiple interfaces. Use [method "
+"IP.get_local_interfaces] to know which are available.\n"
+"[b]Note:[/b] Some Android devices might require the "
+"[code]CHANGE_WIFI_MULTICAST_STATE[/code] permission for multicast to work."
+msgstr ""
+
+#: doc/classes/PacketPeerUDP.xml:66
+msgid ""
+"Removes the interface identified by [code]interface_name[/code] from the "
+"multicast group specified by [code]multicast_address[/code]."
+msgstr ""
+
+#: doc/classes/PacketPeerUDP.xml:75
+msgid ""
+"Makes this [PacketPeerUDP] listen on the [code]port[/code] binding to "
+"[code]bind_address[/code] with a buffer size [code]recv_buf_size[/code].\n"
+"If [code]bind_address[/code] is set to [code]\"*\"[/code] (default), the "
+"peer will listen on all available addresses (both IPv4 and IPv6).\n"
+"If [code]bind_address[/code] is set to [code]\"0.0.0.0\"[/code] (for IPv4) "
+"or [code]\"::\"[/code] (for IPv6), the peer will listen on all available "
+"addresses matching that IP type.\n"
+"If [code]bind_address[/code] is set to any valid address (e.g. "
+"[code]\"192.168.1.101\"[/code], [code]\"::1\"[/code], etc), the peer will "
+"only listen on the interface with that addresses (or fail if no interface "
+"with the given address exists)."
+msgstr ""
+
+#: doc/classes/PacketPeerUDP.xml:85
+msgid ""
+"Enable or disable sending of broadcast packets (e.g. "
+"[code]set_dest_address(\"255.255.255.255\", 4343)[/code]. This option is "
+"disabled by default.\n"
+"[b]Note:[/b] Some Android devices might require the "
+"[code]CHANGE_WIFI_MULTICAST_STATE[/code] permission and this option to be "
+"enabled to receive broadcast packets too."
+msgstr ""
+
+#: doc/classes/PacketPeerUDP.xml:94
+msgid ""
+"Sets the destination address and port for sending packets and variables. A "
+"hostname will be resolved using DNS if needed.\n"
+"[b]Note:[/b] [method set_broadcast_enabled] must be enabled before sending "
+"packets to a broadcast address (e.g. [code]255.255.255.255[/code])."
+msgstr ""
+
+#: doc/classes/PacketPeerUDP.xml:101
+msgid ""
+"Waits for a packet to arrive on the listening port. See [method listen].\n"
+"[b]Note:[/b] [method wait] can't be interrupted once it has been called. "
+"This can be worked around by allowing the other party to send a specific "
+"\"death pill\" packet like this:\n"
+"[codeblock]\n"
+"# Server\n"
+"socket.set_dest_address(\"127.0.0.1\", 789)\n"
+"socket.put_packet(\"Time to stop\".to_ascii())\n"
+"\n"
+"# Client\n"
+"while socket.wait() == OK:\n"
+" var data = socket.get_packet().get_string_from_ascii()\n"
+" if data == \"Time to stop\":\n"
+" return\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Panel.xml:4
+msgid "Provides an opaque background for [Control] children."
+msgstr ""
+
+#: doc/classes/Panel.xml:7
+msgid ""
+"Panel is a [Control] that displays an opaque background. It's commonly used "
+"as a parent and container for other types of [Control] nodes."
+msgstr ""
+
+#: doc/classes/Panel.xml:11
+msgid "https://godotengine.org/asset-library/asset/516"
+msgstr ""
+
+#: doc/classes/Panel.xml:12 doc/classes/Skeleton.xml:12
+#: doc/classes/SkeletonIK.xml:29
+msgid "https://godotengine.org/asset-library/asset/523"
+msgstr ""
+
+#: doc/classes/Panel.xml:20
+msgid "The style of this [Panel]."
+msgstr ""
+
+#: doc/classes/PanelContainer.xml:4
+msgid "Panel container type."
+msgstr ""
+
+#: doc/classes/PanelContainer.xml:7
+msgid ""
+"Panel container type. This container fits controls inside of the delimited "
+"area of a stylebox. It's useful for giving controls an outline."
+msgstr ""
+
+#: doc/classes/PanelContainer.xml:18
+msgid "The style of [PanelContainer]'s background."
+msgstr ""
+
+#: doc/classes/PanoramaSky.xml:4
+msgid "A type of [Sky] used to draw a background texture."
+msgstr ""
+
+#: doc/classes/PanoramaSky.xml:7
+msgid ""
+"A resource referenced in an [Environment] that is used to draw a background. "
+"The Panorama sky functions similar to skyboxes in other engines, except it "
+"uses an equirectangular sky map instead of a cube map.\n"
+"Using an HDR panorama is strongly recommended for accurate, high-quality "
+"reflections. Godot supports the Radiance HDR ([code].hdr[/code]) and OpenEXR "
+"([code].exr[/code]) image formats for this purpose.\n"
+"You can use [url=https://danilw.github.io/GLSL-howto/cubemap_to_panorama_js/"
+"cubemap_to_panorama.html]this tool[/url] to convert a cube map to an "
+"equirectangular sky map."
+msgstr ""
+
+#: doc/classes/PanoramaSky.xml:17
+msgid "[Texture] to be applied to the PanoramaSky."
+msgstr ""
+
+#: doc/classes/ParallaxBackground.xml:4
+msgid "A node used to create a parallax scrolling background."
+msgstr ""
+
+#: doc/classes/ParallaxBackground.xml:7
+msgid ""
+"A ParallaxBackground uses one or more [ParallaxLayer] child nodes to create "
+"a parallax effect. Each [ParallaxLayer] can move at a different speed using "
+"[member ParallaxLayer.motion_offset]. This creates an illusion of depth in a "
+"2D game. If not used with a [Camera2D], you must manually calculate the "
+"[member scroll_offset]."
+msgstr ""
+
+#: doc/classes/ParallaxBackground.xml:16
+msgid "The base position offset for all [ParallaxLayer] children."
+msgstr ""
+
+#: doc/classes/ParallaxBackground.xml:19
+msgid "The base motion scale for all [ParallaxLayer] children."
+msgstr ""
+
+#: doc/classes/ParallaxBackground.xml:22
+msgid ""
+"If [code]true[/code], elements in [ParallaxLayer] child aren't affected by "
+"the zoom level of the camera."
+msgstr ""
+
+#: doc/classes/ParallaxBackground.xml:25
+msgid ""
+"Top-left limits for scrolling to begin. If the camera is outside of this "
+"limit, the background will stop scrolling. Must be lower than [member "
+"scroll_limit_end] to work."
+msgstr ""
+
+#: doc/classes/ParallaxBackground.xml:28
+msgid ""
+"Bottom-right limits for scrolling to end. If the camera is outside of this "
+"limit, the background will stop scrolling. Must be higher than [member "
+"scroll_limit_begin] to work."
+msgstr ""
+
+#: doc/classes/ParallaxBackground.xml:31
+msgid ""
+"The ParallaxBackground's scroll value. Calculated automatically when using a "
+"[Camera2D], but can be used to manually manage scrolling when no camera is "
+"present."
+msgstr ""
+
+#: doc/classes/ParallaxLayer.xml:4
+msgid "A parallax scrolling layer to be used with [ParallaxBackground]."
+msgstr ""
+
+#: doc/classes/ParallaxLayer.xml:7
+msgid ""
+"A ParallaxLayer must be the child of a [ParallaxBackground] node. Each "
+"ParallaxLayer can be set to move at different speeds relative to the camera "
+"movement or the [member ParallaxBackground.scroll_offset] value.\n"
+"This node's children will be affected by its scroll offset.\n"
+"[b]Note:[/b] Any changes to this node's position and scale made after it "
+"enters the scene will be ignored."
+msgstr ""
+
+#: doc/classes/ParallaxLayer.xml:17
+msgid ""
+"The ParallaxLayer's [Texture] mirroring. Useful for creating an infinite "
+"scrolling background. If an axis is set to [code]0[/code], the [Texture] "
+"will not be mirrored."
+msgstr ""
+
+#: doc/classes/ParallaxLayer.xml:20
+msgid ""
+"The ParallaxLayer's offset relative to the parent ParallaxBackground's "
+"[member ParallaxBackground.scroll_offset]."
+msgstr ""
+
+#: doc/classes/ParallaxLayer.xml:23
+msgid ""
+"Multiplies the ParallaxLayer's motion. If an axis is set to [code]0[/code], "
+"it will not scroll."
+msgstr ""
+
+#: doc/classes/Particles.xml:4
+msgid "GPU-based 3D particle emitter."
+msgstr ""
+
+#: doc/classes/Particles.xml:7
+msgid ""
+"3D particle node used to create a variety of particle systems and effects. "
+"[Particles] features an emitter that generates some number of particles at a "
+"given rate.\n"
+"Use the [code]process_material[/code] property to add a [ParticlesMaterial] "
+"to configure particle appearance and behavior. Alternatively, you can add a "
+"[ShaderMaterial] which will be applied to all particles.\n"
+"[b]Note:[/b] [Particles] only work when using the GLES3 renderer. If using "
+"the GLES2 renderer, use [CPUParticles] instead. You can convert [Particles] "
+"to [CPUParticles] by selecting the node, clicking the [b]Particles[/b] menu "
+"at the top of the 3D editor viewport then choosing [b]Convert to "
+"CPUParticles[/b].\n"
+"[b]Note:[/b] After working on a Particles node, remember to update its "
+"[member visibility_aabb] by selecting it, clicking the [b]Particles[/b] menu "
+"at the top of the 3D editor viewport then choose [b]Generate Visibility "
+"AABB[/b]. Otherwise, particles may suddenly disappear depending on the "
+"camera position and angle."
+msgstr ""
+
+#: doc/classes/Particles.xml:13
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/3d/vertex_animation/"
+"controlling_thousands_of_fish.html"
+msgstr ""
+
+#: doc/classes/Particles.xml:20
+msgid ""
+"Returns the axis-aligned bounding box that contains all the particles that "
+"are active in the current frame."
+msgstr ""
+
+#: doc/classes/Particles.xml:27
+msgid "Returns the [Mesh] that is drawn at index [code]pass[/code]."
+msgstr ""
+
+#: doc/classes/Particles.xml:33
+msgid "Restarts the particle emission, clearing existing particles."
+msgstr ""
+
+#: doc/classes/Particles.xml:41
+msgid "Sets the [Mesh] that is drawn at index [code]pass[/code]."
+msgstr ""
+
+#: doc/classes/Particles.xml:54
+msgid "[Mesh] that is drawn for the first draw pass."
+msgstr ""
+
+#: doc/classes/Particles.xml:57
+msgid "[Mesh] that is drawn for the second draw pass."
+msgstr ""
+
+#: doc/classes/Particles.xml:60
+msgid "[Mesh] that is drawn for the third draw pass."
+msgstr ""
+
+#: doc/classes/Particles.xml:63
+msgid "[Mesh] that is drawn for the fourth draw pass."
+msgstr ""
+
+#: doc/classes/Particles.xml:66
+msgid "The number of draw passes when rendering particles."
+msgstr ""
+
+#: doc/classes/Particles.xml:72
+msgid ""
+"Time ratio between each emission. If [code]0[/code], particles are emitted "
+"continuously. If [code]1[/code], all particles are emitted simultaneously."
+msgstr ""
+
+#: doc/classes/Particles.xml:87
+msgid ""
+"If [code]true[/code], only [code]amount[/code] particles will be emitted."
+msgstr ""
+
+#: doc/classes/Particles.xml:90
+msgid ""
+"Amount of time to preprocess the particles before animation starts. Lets you "
+"start the animation some time after particles have started emitting."
+msgstr ""
+
+#: doc/classes/Particles.xml:93 doc/classes/Particles2D.xml:68
+msgid ""
+"[Material] for processing particles. Can be a [ParticlesMaterial] or a "
+"[ShaderMaterial]."
+msgstr ""
+
+#: doc/classes/Particles.xml:96
+msgid "Emission randomness ratio."
+msgstr ""
+
+#: doc/classes/Particles.xml:99
+msgid ""
+"Speed scaling ratio. A value of [code]0[/code] can be used to pause the "
+"particles."
+msgstr ""
+
+#: doc/classes/Particles.xml:102
+msgid ""
+"The [AABB] that determines the node's region which needs to be visible on "
+"screen for the particle system to be active.\n"
+"Grow the box if particles suddenly appear/disappear when the node enters/"
+"exits the screen. The [AABB] can be grown via code or with the [b]Particles "
+"→ Generate AABB[/b] editor tool.\n"
+"[b]Note:[/b] If the [ParticlesMaterial] in use is configured to cast "
+"shadows, you may want to enlarge this AABB to ensure the shadow is updated "
+"when particles are off-screen."
+msgstr ""
+
+#: doc/classes/Particles.xml:118
+msgid "Maximum number of draw passes supported."
+msgstr ""
+
+#: doc/classes/Particles2D.xml:4
+msgid "GPU-based 2D particle emitter."
+msgstr ""
+
+#: doc/classes/Particles2D.xml:7
+msgid ""
+"2D particle node used to create a variety of particle systems and effects. "
+"[Particles2D] features an emitter that generates some number of particles at "
+"a given rate.\n"
+"Use the [code]process_material[/code] property to add a [ParticlesMaterial] "
+"to configure particle appearance and behavior. Alternatively, you can add a "
+"[ShaderMaterial] which will be applied to all particles.\n"
+"[b]Note:[/b] [Particles2D] only work when using the GLES3 renderer. If using "
+"the GLES2 renderer, use [CPUParticles2D] instead. You can convert "
+"[Particles2D] to [CPUParticles2D] by selecting the node, clicking the "
+"[b]Particles[/b] menu at the top of the 2D editor viewport then choosing "
+"[b]Convert to CPUParticles2D[/b].\n"
+"[b]Note:[/b] After working on a Particles node, remember to update its "
+"[member visibility_rect] by selecting it, clicking the [b]Particles[/b] menu "
+"at the top of the 2D editor viewport then choose [b]Generate Visibility "
+"Rect[/b]. Otherwise, particles may suddenly disappear depending on the "
+"camera position and angle.\n"
+"[b]Note:[/b] Unlike [CPUParticles2D], [Particles2D] currently ignore the "
+"texture region defined in [AtlasTexture]s."
+msgstr ""
+
+#: doc/classes/Particles2D.xml:21
+msgid "Returns a rectangle containing the positions of all existing particles."
+msgstr ""
+
+#: doc/classes/Particles2D.xml:27
+msgid "Restarts all the existing particles."
+msgstr ""
+
+#: doc/classes/Particles2D.xml:80
+msgid ""
+"The [Rect2] that determines the node's region which needs to be visible on "
+"screen for the particle system to be active.\n"
+"Grow the rect if particles suddenly appear/disappear when the node enters/"
+"exits the screen. The [Rect2] can be grown via code or with the [b]Particles "
+"→ Generate Visibility Rect[/b] editor tool."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:4
+msgid "Particle properties for [Particles] and [Particles2D] nodes."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:7
+msgid ""
+"ParticlesMaterial defines particle properties and behavior. It is used in "
+"the [code]process_material[/code] of [Particles] and [Particles2D] emitter "
+"nodes.\n"
+"Some of this material's properties are applied to each particle when "
+"emitted, while others can have a [CurveTexture] applied to vary values over "
+"the lifetime of the particle.\n"
+"When a randomness ratio is applied to a property it is used to scale that "
+"property by a random amount. The random ratio is used to interpolate between "
+"[code]1.0[/code] and a random number less than one, the result is multiplied "
+"by the property to obtain the randomized property. For example a random "
+"ratio of [code]0.4[/code] would scale the original property between "
+"[code]0.4-1.0[/code] of its original value."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:18
+msgid "Returns [code]true[/code] if the specified flag is enabled."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:32
+msgid "Returns the randomness ratio associated with the specified parameter."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:39
+msgid "Returns the [Texture] used by the specified parameter."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:47
+msgid ""
+"If [code]true[/code], enables the specified flag. See [enum Flags] for "
+"options."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:55
+msgid "Sets the specified [enum Parameter]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:63
+msgid "Sets the randomness ratio for the specified [enum Parameter]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:71
+msgid "Sets the [Texture] for the specified [enum Parameter]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:77
+msgid ""
+"Initial rotation applied to each particle, in degrees.\n"
+"Only applied when [member flag_disable_z] or [member flag_rotate_y] are "
+"[code]true[/code] or the [SpatialMaterial] being used to draw the particle "
+"is using [constant SpatialMaterial.BILLBOARD_PARTICLES]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:81
+msgid "Each particle's rotation will be animated along this [CurveTexture]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:87
+msgid ""
+"Initial angular velocity applied to each particle. Sets the speed of "
+"rotation of the particle.\n"
+"Only applied when [member flag_disable_z] or [member flag_rotate_y] are "
+"[code]true[/code] or the [SpatialMaterial] being used to draw the particle "
+"is using [constant SpatialMaterial.BILLBOARD_PARTICLES]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:91
+msgid "Each particle's angular velocity will vary along this [CurveTexture]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:100
+msgid "Each particle's animation offset will vary along this [CurveTexture]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:109
+msgid "Each particle's animation speed will vary along this [CurveTexture]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:115
+msgid ""
+"Each particle's initial color. If the [Particles2D]'s [code]texture[/code] "
+"is defined, it will be multiplied by this color. To have particle display "
+"color in a [SpatialMaterial] make sure to set [member SpatialMaterial."
+"vertex_color_use_as_albedo] to [code]true[/code]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:124
+msgid "Damping will vary along this [CurveTexture]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:133
+msgid ""
+"The box's extents if [code]emission_shape[/code] is set to [constant "
+"EMISSION_SHAPE_BOX]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:136
+msgid ""
+"Particle color will be modulated by color determined by sampling this "
+"texture at the same point as the [member emission_point_texture]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:139
+msgid ""
+"Particle velocity and rotation will be set by sampling this texture at the "
+"same point as the [member emission_point_texture]. Used only in [constant "
+"EMISSION_SHAPE_DIRECTED_POINTS]. Can be created automatically from mesh or "
+"node by selecting \"Create Emission Points from Mesh/Node\" under the "
+"\"Particles\" tool in the toolbar."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:142
+msgid ""
+"The number of emission points if [code]emission_shape[/code] is set to "
+"[constant EMISSION_SHAPE_POINTS] or [constant "
+"EMISSION_SHAPE_DIRECTED_POINTS]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:145
+msgid ""
+"Particles will be emitted at positions determined by sampling this texture "
+"at a random position. Used with [constant EMISSION_SHAPE_POINTS] and "
+"[constant EMISSION_SHAPE_DIRECTED_POINTS]. Can be created automatically from "
+"mesh or node by selecting \"Create Emission Points from Mesh/Node\" under "
+"the \"Particles\" tool in the toolbar."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:148
+msgid ""
+"The axis of the ring when using the emitter [constant EMISSION_SHAPE_RING]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:151
+msgid ""
+"The height of the ring when using the emitter [constant EMISSION_SHAPE_RING]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:154
+msgid ""
+"The inner radius of the ring when using the emitter [constant "
+"EMISSION_SHAPE_RING]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:157
+msgid ""
+"The radius of the ring when using the emitter [constant EMISSION_SHAPE_RING]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:160
+msgid ""
+"Particles will be emitted inside this region. Use [enum EmissionShape] "
+"constants for values."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:163
+msgid ""
+"The sphere's radius if [code]emission_shape[/code] is set to [constant "
+"EMISSION_SHAPE_SPHERE]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:175
+msgid "Amount of [member spread] along the Y axis."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:184
+msgid "Each particle's hue will vary along this [CurveTexture]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:202
+msgid ""
+"Each particle's linear acceleration will vary along this [CurveTexture]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:208
+msgid ""
+"Orbital velocity applied to each particle. Makes the particles circle around "
+"origin. Specified in number of full rotations around origin per second.\n"
+"Only available when [member flag_disable_z] is [code]true[/code]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:212
+msgid "Each particle's orbital velocity will vary along this [CurveTexture]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:221
+msgid ""
+"Each particle's radial acceleration will vary along this [CurveTexture]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:230
+msgid "Each particle's scale will vary along this [CurveTexture]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:242
+msgid ""
+"Each particle's tangential acceleration will vary along this [CurveTexture]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:248
+msgid "Trail particles' color will vary along this [GradientTexture]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:251
+msgid ""
+"Emitter will emit [code]amount[/code] divided by [code]trail_divisor[/code] "
+"particles. The remaining particles will be used as trail(s)."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:254
+msgid "Trail particles' size will vary along this [CurveTexture]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:259
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_texture] to set initial velocity properties."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:262
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_texture] to set angular velocity properties."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:265
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_texture] to set orbital velocity properties."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:268
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_texture] to set linear acceleration properties."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:271
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_texture] to set radial acceleration properties."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:274
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_texture] to set tangential acceleration properties."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:277
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_texture] to set damping properties."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:280
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_texture] to set angle properties."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:283
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_texture] to set scale properties."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:286
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_texture] to set hue variation properties."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:289
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_texture] to set animation speed properties."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:292
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_texture] to set animation offset properties."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:298
+msgid "Use with [method set_flag] to set [member flag_align_y]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:301
+msgid "Use with [method set_flag] to set [member flag_rotate_y]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:304
+msgid "Use with [method set_flag] to set [member flag_disable_z]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:319
+msgid ""
+"Particles will be emitted at a position determined by sampling a random "
+"point on the [member emission_point_texture]. Particle color will be "
+"modulated by [member emission_color_texture]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:322
+msgid ""
+"Particles will be emitted at a position determined by sampling a random "
+"point on the [member emission_point_texture]. Particle velocity and rotation "
+"will be set based on [member emission_normal_texture]. Particle color will "
+"be modulated by [member emission_color_texture]."
+msgstr ""
+
+#: doc/classes/Path.xml:4
+msgid "Contains a [Curve3D] path for [PathFollow] nodes to follow."
+msgstr ""
+
+#: doc/classes/Path.xml:7
+msgid ""
+"Can have [PathFollow] child nodes moving along the [Curve3D]. See "
+"[PathFollow] for more information on the usage.\n"
+"Note that the path is considered as relative to the moved nodes (children of "
+"[PathFollow]). As such, the curve should usually start with a zero vector "
+"[code](0, 0, 0)[/code]."
+msgstr ""
+
+#: doc/classes/Path.xml:16
+msgid "A [Curve3D] describing the path."
+msgstr ""
+
+#: doc/classes/Path.xml:22
+msgid "Emitted when the [member curve] changes."
+msgstr ""
+
+#: doc/classes/Path2D.xml:4
+msgid "Contains a [Curve2D] path for [PathFollow2D] nodes to follow."
+msgstr ""
+
+#: doc/classes/Path2D.xml:7
+msgid ""
+"Can have [PathFollow2D] child nodes moving along the [Curve2D]. See "
+"[PathFollow2D] for more information on usage.\n"
+"[b]Note:[/b] The path is considered as relative to the moved nodes (children "
+"of [PathFollow2D]). As such, the curve should usually start with a zero "
+"vector ([code](0, 0)[/code])."
+msgstr ""
+
+#: doc/classes/Path2D.xml:16
+msgid "A [Curve2D] describing the path."
+msgstr ""
+
+#: doc/classes/PathFollow.xml:4
+msgid "Point sampler for a [Path]."
+msgstr ""
+
+#: doc/classes/PathFollow.xml:7
+msgid ""
+"This node takes its parent [Path], and returns the coordinates of a point "
+"within it, given a distance from the first vertex.\n"
+"It is useful for making other nodes follow a path, without coding the "
+"movement pattern. For that, the nodes must be children of this node. The "
+"descendant nodes will then move accordingly when setting an offset in this "
+"node."
+msgstr ""
+
+#: doc/classes/PathFollow.xml:16
+msgid ""
+"If [code]true[/code], the position between two cached points is interpolated "
+"cubically, and linearly otherwise.\n"
+"The points along the [Curve3D] of the [Path] are precomputed before use, for "
+"faster calculations. The point at the requested offset is then calculated "
+"interpolating between two adjacent cached points. This may present a problem "
+"if the curve makes sharp turns, as the cached points may not follow the "
+"curve closely enough.\n"
+"There are two answers to this problem: either increase the number of cached "
+"points and increase memory consumption, or make a cubic interpolation "
+"between two points at the cost of (slightly) slower calculations."
+msgstr ""
+
+#: doc/classes/PathFollow.xml:21 doc/classes/PathFollow2D.xml:21
+msgid "The node's offset along the curve."
+msgstr ""
+
+#: doc/classes/PathFollow.xml:24 doc/classes/PathFollow2D.xml:27
+msgid ""
+"If [code]true[/code], any offset outside the path's length will wrap around, "
+"instead of stopping at the ends. Use it for cyclic paths."
+msgstr ""
+
+#: doc/classes/PathFollow.xml:27
+msgid ""
+"The distance from the first vertex, measured in 3D units along the path. "
+"This sets this node's position to a point within the path."
+msgstr ""
+
+#: doc/classes/PathFollow.xml:30
+msgid ""
+"Allows or forbids rotation on one or more axes, depending on the [enum "
+"RotationMode] constants being used."
+msgstr ""
+
+#: doc/classes/PathFollow.xml:33
+msgid ""
+"The distance from the first vertex, considering 0.0 as the first vertex and "
+"1.0 as the last. This is just another way of expressing the offset within "
+"the path, as the offset supplied is multiplied internally by the path's "
+"length."
+msgstr ""
+
+#: doc/classes/PathFollow.xml:36 doc/classes/PathFollow2D.xml:39
+msgid "The node's offset perpendicular to the curve."
+msgstr ""
+
+#: doc/classes/PathFollow.xml:41
+msgid "Forbids the PathFollow to rotate."
+msgstr ""
+
+#: doc/classes/PathFollow.xml:44
+msgid "Allows the PathFollow to rotate in the Y axis only."
+msgstr ""
+
+#: doc/classes/PathFollow.xml:47
+msgid "Allows the PathFollow to rotate in both the X, and Y axes."
+msgstr ""
+
+#: doc/classes/PathFollow.xml:50
+msgid "Allows the PathFollow to rotate in any axis."
+msgstr ""
+
+#: doc/classes/PathFollow.xml:53
+msgid ""
+"Uses the up vector information in a [Curve3D] to enforce orientation. This "
+"rotation mode requires the [Path]'s [member Curve3D.up_vector_enabled] "
+"property to be set to [code]true[/code]."
+msgstr ""
+
+#: doc/classes/PathFollow2D.xml:4
+msgid "Point sampler for a [Path2D]."
+msgstr ""
+
+#: doc/classes/PathFollow2D.xml:7
+msgid ""
+"This node takes its parent [Path2D], and returns the coordinates of a point "
+"within it, given a distance from the first vertex.\n"
+"It is useful for making other nodes follow a path, without coding the "
+"movement pattern. For that, the nodes must be children of this node. The "
+"descendant nodes will then move accordingly when setting an offset in this "
+"node."
+msgstr ""
+
+#: doc/classes/PathFollow2D.xml:16
+msgid ""
+"If [code]true[/code], the position between two cached points is interpolated "
+"cubically, and linearly otherwise.\n"
+"The points along the [Curve2D] of the [Path2D] are precomputed before use, "
+"for faster calculations. The point at the requested offset is then "
+"calculated interpolating between two adjacent cached points. This may "
+"present a problem if the curve makes sharp turns, as the cached points may "
+"not follow the curve closely enough.\n"
+"There are two answers to this problem: either increase the number of cached "
+"points and increase memory consumption, or make a cubic interpolation "
+"between two points at the cost of (slightly) slower calculations."
+msgstr ""
+
+#: doc/classes/PathFollow2D.xml:24
+msgid ""
+"How far to look ahead of the curve to calculate the tangent if the node is "
+"rotating. E.g. shorter lookaheads will lead to faster rotations."
+msgstr ""
+
+#: doc/classes/PathFollow2D.xml:30
+msgid "The distance along the path in pixels."
+msgstr ""
+
+#: doc/classes/PathFollow2D.xml:33
+msgid ""
+"If [code]true[/code], this node rotates to follow the path, making its "
+"descendants rotate."
+msgstr ""
+
+#: doc/classes/PathFollow2D.xml:36
+msgid ""
+"The distance along the path as a number in the range 0.0 (for the first "
+"vertex) to 1.0 (for the last). This is just another way of expressing the "
+"offset within the path, as the offset supplied is multiplied internally by "
+"the path's length."
+msgstr ""
+
+#: doc/classes/PCKPacker.xml:4
+msgid "Creates packages that can be loaded into a running project."
+msgstr ""
+
+#: doc/classes/PCKPacker.xml:7
+msgid ""
+"The [PCKPacker] is used to create packages that can be loaded into a running "
+"project using [method ProjectSettings.load_resource_pack].\n"
+"[codeblock]\n"
+"var packer = PCKPacker.new()\n"
+"packer.pck_start(\"test.pck\")\n"
+"packer.add_file(\"res://text.txt\", \"text.txt\")\n"
+"packer.flush()\n"
+"[/codeblock]\n"
+"The above [PCKPacker] creates package [code]test.pck[/code], then adds a "
+"file named [code]text.txt[/code] at the root of the package."
+msgstr ""
+
+#: doc/classes/PCKPacker.xml:24
+msgid ""
+"Adds the [code]source_path[/code] file to the current PCK package at the "
+"[code]pck_path[/code] internal path (should start with [code]res://[/code])."
+msgstr ""
+
+#: doc/classes/PCKPacker.xml:31
+msgid ""
+"Writes the files specified using all [method add_file] calls since the last "
+"flush. If [code]verbose[/code] is [code]true[/code], a list of files added "
+"will be printed to the console for easier debugging."
+msgstr ""
+
+#: doc/classes/PCKPacker.xml:39
+msgid ""
+"Creates a new PCK file with the name [code]pck_name[/code]. The [code].pck[/"
+"code] file extension isn't added automatically, so it should be part of "
+"[code]pck_name[/code] (even though it's not required)."
+msgstr ""
+
+#: doc/classes/Performance.xml:4
+msgid "Exposes performance-related data."
+msgstr ""
+
+#: doc/classes/Performance.xml:7
+msgid ""
+"This class provides access to a number of different monitors related to "
+"performance, such as memory usage, draw calls, and FPS. These are the same "
+"as the values displayed in the [b]Monitor[/b] tab in the editor's "
+"[b]Debugger[/b] panel. By using the [method get_monitor] method of this "
+"class, you can access this data from your code.\n"
+"[b]Note:[/b] A few of these monitors are only available in debug mode and "
+"will always return 0 when used in a release build.\n"
+"[b]Note:[/b] Many of these monitors are not updated in real-time, so there "
+"may be a short delay between changes."
+msgstr ""
+
+#: doc/classes/Performance.xml:18
+msgid ""
+"Returns the value of one of the available monitors. You should provide one "
+"of the [enum Monitor] constants as the argument, like this:\n"
+"[codeblock]\n"
+"print(Performance.get_monitor(Performance.TIME_FPS)) # Prints the FPS to the "
+"console\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Performance.xml:27
+msgid "Number of frames per second."
+msgstr ""
+
+#: doc/classes/Performance.xml:30
+msgid "Time it took to complete one frame, in seconds."
+msgstr ""
+
+#: doc/classes/Performance.xml:33
+msgid "Time it took to complete one physics frame, in seconds."
+msgstr ""
+
+#: doc/classes/Performance.xml:36
+msgid ""
+"Static memory currently used, in bytes. Not available in release builds."
+msgstr ""
+
+#: doc/classes/Performance.xml:39
+msgid ""
+"Dynamic memory currently used, in bytes. Not available in release builds."
+msgstr ""
+
+#: doc/classes/Performance.xml:42
+msgid "Available static memory. Not available in release builds."
+msgstr ""
+
+#: doc/classes/Performance.xml:45
+msgid "Available dynamic memory. Not available in release builds."
+msgstr ""
+
+#: doc/classes/Performance.xml:48
+msgid ""
+"Largest amount of memory the message queue buffer has used, in bytes. The "
+"message queue is used for deferred functions calls and notifications."
+msgstr ""
+
+#: doc/classes/Performance.xml:51
+msgid "Number of objects currently instanced (including nodes)."
+msgstr ""
+
+#: doc/classes/Performance.xml:54
+msgid "Number of resources currently used."
+msgstr ""
+
+#: doc/classes/Performance.xml:57
+msgid ""
+"Number of nodes currently instanced in the scene tree. This also includes "
+"the root node."
+msgstr ""
+
+#: doc/classes/Performance.xml:60
+msgid ""
+"Number of orphan nodes, i.e. nodes which are not parented to a node of the "
+"scene tree."
+msgstr ""
+
+#: doc/classes/Performance.xml:63
+msgid "3D objects drawn per frame."
+msgstr ""
+
+#: doc/classes/Performance.xml:66
+msgid "Vertices drawn per frame. 3D only."
+msgstr ""
+
+#: doc/classes/Performance.xml:69
+msgid "Material changes per frame. 3D only."
+msgstr ""
+
+#: doc/classes/Performance.xml:72
+msgid "Shader changes per frame. 3D only."
+msgstr ""
+
+#: doc/classes/Performance.xml:75
+msgid "Render surface changes per frame. 3D only."
+msgstr ""
+
+#: doc/classes/Performance.xml:78
+msgid "Draw calls per frame. 3D only."
+msgstr ""
+
+#: doc/classes/Performance.xml:81
+msgid "Items or joined items drawn per frame."
+msgstr ""
+
+#: doc/classes/Performance.xml:84
+msgid "Draw calls per frame."
+msgstr ""
+
+#: doc/classes/Performance.xml:87 doc/classes/VisualServer.xml:3696
+msgid ""
+"The amount of video memory used, i.e. texture and vertex memory combined."
+msgstr ""
+
+#: doc/classes/Performance.xml:90 doc/classes/VisualServer.xml:3699
+msgid "The amount of texture memory used."
+msgstr ""
+
+#: doc/classes/Performance.xml:93 doc/classes/VisualServer.xml:3702
+msgid "The amount of vertex memory used."
+msgstr ""
+
+#: doc/classes/Performance.xml:96 doc/classes/VisualServer.xml:3693
+msgid ""
+"Unimplemented in the GLES2 and GLES3 rendering backends, always returns 0."
+msgstr ""
+
+#: doc/classes/Performance.xml:99
+msgid "Number of active [RigidBody2D] nodes in the game."
+msgstr ""
+
+#: doc/classes/Performance.xml:102
+msgid "Number of collision pairs in the 2D physics engine."
+msgstr ""
+
+#: doc/classes/Performance.xml:105
+msgid "Number of islands in the 2D physics engine."
+msgstr ""
+
+#: doc/classes/Performance.xml:108
+msgid "Number of active [RigidBody] and [VehicleBody] nodes in the game."
+msgstr ""
+
+#: doc/classes/Performance.xml:111
+msgid "Number of collision pairs in the 3D physics engine."
+msgstr ""
+
+#: doc/classes/Performance.xml:114
+msgid "Number of islands in the 3D physics engine."
+msgstr ""
+
+#: doc/classes/Performance.xml:117
+msgid "Output latency of the [AudioServer]."
+msgstr ""
+
+#: doc/classes/Performance.xml:120
+msgid "Represents the size of the [enum Monitor] enum."
+msgstr ""
+
+#: doc/classes/PHashTranslation.xml:4
+msgid "Optimized translation."
+msgstr ""
+
+#: doc/classes/PHashTranslation.xml:7
+msgid ""
+"Optimized translation. Uses real-time compressed translations, which results "
+"in very small dictionaries."
+msgstr ""
+
+#: doc/classes/PHashTranslation.xml:16
+msgid ""
+"Generates and sets an optimized translation from the given [Translation] "
+"resource."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:4
+msgid "Direct access object to a physics body in the [Physics2DServer]."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:7
+msgid ""
+"Provides direct access to a physics body in the [Physics2DServer], allowing "
+"safe changes to physics properties. This object is passed via the direct "
+"state callback of rigid/character bodies, and is intended for changing the "
+"direct state of that body. See [method RigidBody2D._integrate_forces]."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:11
+#: doc/classes/Physics2DDirectSpaceState.xml:11
+#: doc/classes/PhysicsDirectBodyState.xml:11
+#: doc/classes/PhysicsDirectSpaceState.xml:11 doc/classes/RayCast.xml:14
+#: doc/classes/RayCast2D.xml:14 doc/classes/World.xml:10
+#: doc/classes/World2D.xml:10
+msgid "https://docs.godotengine.org/en/3.4/tutorials/physics/ray-casting.html"
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:18 doc/classes/RigidBody2D.xml:30
+msgid "Adds a constant directional force without affecting rotation."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:26
+#: doc/classes/PhysicsDirectBodyState.xml:27 doc/classes/RigidBody2D.xml:38
+msgid ""
+"Adds a positioned force to the body. Both the force and the offset from the "
+"body origin are in global coordinates."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:33 doc/classes/RigidBody2D.xml:45
+msgid "Adds a constant rotational force."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:40 doc/classes/RigidBody2D.xml:52
+msgid "Applies a directional impulse without affecting rotation."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:48
+msgid ""
+"Applies a positioned impulse to the body. An impulse is time-independent! "
+"Applying an impulse every frame would result in a framerate-dependent force. "
+"For this reason, it should only be used when simulating one-time impacts "
+"(use the \"_force\" functions otherwise). The offset uses the rotation of "
+"the global coordinate system, but is centered at the object's origin."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:55 doc/classes/RigidBody2D.xml:67
+msgid "Applies a rotational impulse to the body."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:62
+#: doc/classes/PhysicsDirectBodyState.xml:64
+msgid "Returns the collider's [RID]."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:69
+#: doc/classes/PhysicsDirectBodyState.xml:71
+msgid "Returns the collider's object id."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:76
+msgid ""
+"Returns the collider object. This depends on how it was created (will return "
+"a scene node if such was used to create it)."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:83
+#: doc/classes/PhysicsDirectBodyState.xml:85
+msgid "Returns the contact position in the collider."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:90
+#: doc/classes/PhysicsDirectBodyState.xml:92
+msgid "Returns the collider's shape index."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:97
+msgid ""
+"Returns the collided shape's metadata. This metadata is different from "
+"[method Object.get_meta], and is set with [method Physics2DServer."
+"shape_set_data]."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:104
+#: doc/classes/PhysicsDirectBodyState.xml:99
+msgid "Returns the linear velocity vector at the collider's contact point."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:110
+msgid ""
+"Returns the number of contacts this body has with other bodies.\n"
+"[b]Note:[/b] By default, this returns 0 unless bodies are configured to "
+"monitor contacts. See [member RigidBody2D.contact_monitor]."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:118
+#: doc/classes/PhysicsDirectBodyState.xml:120
+msgid "Returns the local normal at the contact point."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:125
+#: doc/classes/PhysicsDirectBodyState.xml:127
+msgid "Returns the local position of the contact point."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:132
+#: doc/classes/PhysicsDirectBodyState.xml:134
+msgid "Returns the local shape index of the collision."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:138
+#: doc/classes/PhysicsDirectBodyState.xml:140
+msgid "Returns the current state of the space, useful for queries."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:145
+#: doc/classes/PhysicsDirectBodyState.xml:147
+msgid ""
+"Returns the body's velocity at the given relative position, including both "
+"translation and rotation."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:151
+#: doc/classes/PhysicsDirectBodyState.xml:153
+msgid "Calls the built-in force integration code."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:157
+#: doc/classes/PhysicsDirectBodyState.xml:159 doc/classes/RigidBody2D.xml:101
+msgid "The body's rotational velocity."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:160
+#: doc/classes/PhysicsDirectBodyState.xml:164
+msgid "The inverse of the inertia of the body."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:163
+#: doc/classes/PhysicsDirectBodyState.xml:167
+msgid "The inverse of the mass of the body."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:166
+#: doc/classes/PhysicsDirectBodyState.xml:170 doc/classes/RigidBody2D.xml:146
+msgid "The body's linear velocity."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:169
+#: doc/classes/PhysicsDirectBodyState.xml:175
+msgid "If [code]true[/code], this body is currently sleeping (not active)."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:172
+#: doc/classes/PhysicsDirectBodyState.xml:178
+msgid "The timestep (delta) used for the simulation."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:175
+#: doc/classes/PhysicsDirectBodyState.xml:181
+msgid ""
+"The rate at which the body stops rotating, if there are not any other forces "
+"moving it."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:178
+#: doc/classes/PhysicsDirectBodyState.xml:184
+msgid "The total gravity vector being currently applied to this body."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:181
+#: doc/classes/PhysicsDirectBodyState.xml:187
+msgid ""
+"The rate at which the body stops moving, if there are not any other forces "
+"moving it."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:184
+#: doc/classes/PhysicsDirectBodyState.xml:190
+msgid "The body's transformation matrix."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:4
+msgid "Direct access object to a space in the [Physics2DServer]."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:7
+msgid ""
+"Direct access object to a space in the [Physics2DServer]. It's used mainly "
+"to do queries against objects and areas residing in a given space."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:18
+msgid ""
+"Checks how far a [Shape2D] can move without colliding. All the parameters "
+"for the query, including the shape and the motion, are supplied through a "
+"[Physics2DShapeQueryParameters] object.\n"
+"Returns an array with the safe and unsafe proportions (between 0 and 1) of "
+"the motion. The safe proportion is the maximum fraction of the motion that "
+"can be made without a collision. The unsafe proportion is the minimum "
+"fraction of the distance that must be moved for a collision. If no collision "
+"is detected a result of [code][1.0, 1.0][/code] will be returned.\n"
+"[b]Note:[/b] Any [Shape2D]s that the shape is already colliding with e.g. "
+"inside of, will be ignored. Use [method collide_shape] to determine the "
+"[Shape2D]s that the shape is already colliding with."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:28
+msgid ""
+"Checks the intersections of a shape, given through a "
+"[Physics2DShapeQueryParameters] object, against the space. The resulting "
+"array contains a list of points where the shape intersects another. Like "
+"with [method intersect_shape], the number of returned results can be limited "
+"to save processing time."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:35
+msgid ""
+"Checks the intersections of a shape, given through a "
+"[Physics2DShapeQueryParameters] object, against the space. If it collides "
+"with more than one shape, the nearest one is selected. If the shape did not "
+"intersect anything, then an empty dictionary is returned instead.\n"
+"[b]Note:[/b] This method does not take into account the [code]motion[/code] "
+"property of the object. The returned object is a dictionary containing the "
+"following fields:\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]linear_velocity[/code]: The colliding object's velocity [Vector2]. If "
+"the object is an [Area2D], the result is [code](0, 0)[/code].\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]normal[/code]: The object's surface normal at the intersection point.\n"
+"[code]point[/code]: The intersection point.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:55
+msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:96
+msgid ""
+"Intersects a ray in a given space. The returned object is a dictionary with "
+"the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]normal[/code]: The object's surface normal at the intersection point.\n"
+"[code]position[/code]: The intersection point.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"If the ray did not intersect anything, then an empty dictionary is returned "
+"instead.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:113
+msgid ""
+"Checks the intersections of a shape, given through a "
+"[Physics2DShapeQueryParameters] object, against the space.\n"
+"[b]Note:[/b] This method does not take into account the [code]motion[/code] "
+"property of the object. The intersected shapes are returned in an array "
+"containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:4
+msgid "Server interface for low-level 2D physics access."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:7
+msgid ""
+"Physics2DServer is the server responsible for all 2D physics. It can create "
+"many kinds of physics objects, but does not insert them on the node tree."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:19 doc/classes/PhysicsServer.xml:19
+msgid ""
+"Adds a shape to the area, along with a transform matrix. Shapes are usually "
+"referenced by their index, so you should track which shape has a given index."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:34 doc/classes/Physics2DServer.xml:304
+#: doc/classes/PhysicsServer.xml:27 doc/classes/PhysicsServer.xml:298
+msgid ""
+"Assigns the area to a descendant of [Object], so it can exist in the node "
+"tree."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:41 doc/classes/PhysicsServer.xml:34
+msgid ""
+"Removes all shapes from an area. It does not delete the shapes, so they can "
+"be reassigned later."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:47
+msgid ""
+"Creates an [Area2D]. After creating an [Area2D] with this method, assign it "
+"to a space using [method area_set_space] to use the created [Area2D] in the "
+"physics world."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:60 doc/classes/Physics2DServer.xml:372
+#: doc/classes/PhysicsServer.xml:47 doc/classes/PhysicsServer.xml:362
+msgid "Gets the instance ID of the object the area is assigned to."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:68
+msgid ""
+"Returns an area parameter value. See [enum AreaParameter] for a list of "
+"available parameters."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:76 doc/classes/PhysicsServer.xml:63
+msgid "Returns the [RID] of the nth shape of an area."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:83 doc/classes/PhysicsServer.xml:70
+msgid "Returns the number of shapes assigned to an area."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:91 doc/classes/PhysicsServer.xml:78
+msgid "Returns the transform matrix of a shape within an area."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:98 doc/classes/PhysicsServer.xml:85
+msgid "Returns the space assigned to the area."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:105 doc/classes/PhysicsServer.xml:92
+msgid "Returns the space override mode for the area."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:112 doc/classes/PhysicsServer.xml:99
+msgid "Returns the transform matrix for an area."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:120 doc/classes/PhysicsServer.xml:114
+msgid ""
+"Removes a shape from an area. It does not delete the shape, so it can be "
+"reassigned later."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:136 doc/classes/PhysicsServer.xml:130
+msgid "Assigns the area to one or many physics layers."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:144 doc/classes/PhysicsServer.xml:138
+msgid "Sets which physics layers the area will monitor."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:153 doc/classes/PhysicsServer.xml:147
+msgid ""
+"Sets the function to call when any body/area enters or exits the area. This "
+"callback will be called for any object interacting with the area, and takes "
+"five parameters:\n"
+"1: [constant AREA_BODY_ADDED] or [constant AREA_BODY_REMOVED], depending on "
+"whether the object entered or exited the area.\n"
+"2: [RID] of the object that entered/exited the area.\n"
+"3: Instance ID of the object that entered/exited the area.\n"
+"4: The shape index of the object that entered/exited the area.\n"
+"5: The shape index of the area where the object entered/exited."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:174
+msgid ""
+"Sets the value for an area parameter. See [enum AreaParameter] for a list of "
+"available parameters."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:183 doc/classes/PhysicsServer.xml:185
+msgid ""
+"Substitutes a given area shape by another. The old shape is selected by its "
+"index, the new one by its [RID]."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:192
+msgid "Disables a given shape in an area."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:201 doc/classes/PhysicsServer.xml:202
+msgid "Sets the transform matrix for an area shape."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:209 doc/classes/PhysicsServer.xml:210
+msgid "Assigns a space to the area."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:217
+msgid ""
+"Sets the space override mode for the area. See [enum AreaSpaceOverrideMode] "
+"for a list of available modes."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:225 doc/classes/PhysicsServer.xml:226
+msgid "Sets the transform matrix for an area."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:240 doc/classes/PhysicsServer.xml:241
+msgid "Adds a body to the list of bodies exempt from collisions."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:249
+msgid ""
+"Adds a positioned force to the applied force and torque. As with [method "
+"body_apply_impulse], both the force and the offset from the body origin are "
+"in global coordinates. A force differs from an impulse in that, while the "
+"two are forces, the impulse clears itself after being applied."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:259 doc/classes/PhysicsServer.xml:259
+msgid ""
+"Adds a shape to the body, along with a transform matrix. Shapes are usually "
+"referenced by their index, so you should track which shape has a given index."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:282
+msgid ""
+"Adds a positioned impulse to the applied force and torque. Both the force "
+"and the offset from the body origin are in global coordinates."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:311 doc/classes/PhysicsServer.xml:305
+msgid "Removes all shapes from a body."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:317
+msgid "Creates a physics body."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:330 doc/classes/PhysicsServer.xml:320
+msgid "Returns the physics layer or layers a body belongs to."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:337
+msgid "Returns the physics layer or layers a body can collide with."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:344
+msgid "Returns the continuous collision detection mode."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:351
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
+msgid ""
+"Returns the maximum contacts that can be reported. See [method "
+"body_set_max_contacts_reported]."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:365 doc/classes/PhysicsServer.xml:355
+msgid "Returns the body mode."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:380
+msgid ""
+"Returns the value of a body parameter. See [enum BodyParameter] for a list "
+"of available parameters."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:388 doc/classes/PhysicsServer.xml:378
+msgid "Returns the [RID] of the nth shape of a body."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:395 doc/classes/PhysicsServer.xml:385
+msgid "Returns the number of shapes assigned to a body."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:403
+msgid "Returns the metadata of a shape of a body."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:411 doc/classes/PhysicsServer.xml:393
+msgid "Returns the transform matrix of a body shape."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:418 doc/classes/PhysicsServer.xml:400
+msgid "Returns the [RID] of the space assigned to a body."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:426 doc/classes/PhysicsServer.xml:408
+msgid "Returns a body state."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:433 doc/classes/PhysicsServer.xml:429
+msgid ""
+"Returns whether a body uses a callback function to calculate its own physics "
+"(see [method body_set_force_integration_callback])."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:441
+msgid "Removes a body from the list of bodies exempt from collisions."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:449 doc/classes/PhysicsServer.xml:453
+msgid ""
+"Removes a shape from a body. The shape is not deleted, so it can be reused "
+"afterwards."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:457 doc/classes/PhysicsServer.xml:469
+#: doc/classes/RigidBody.xml:105
+msgid ""
+"Sets an axis velocity. The velocity in the given vector axis will be set as "
+"the given vector length. This is useful for jumping behavior."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:465 doc/classes/PhysicsServer.xml:477
+msgid "Sets the physics layer or layers a body belongs to."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:473 doc/classes/PhysicsServer.xml:485
+msgid "Sets the physics layer or layers a body can collide with."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:481
+msgid ""
+"Sets the continuous collision detection mode using one of the [enum CCDMode] "
+"constants.\n"
+"Continuous collision detection tries to predict where a moving body will "
+"collide, instead of moving it and correcting its movement if it collided."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:492 doc/classes/PhysicsServer.xml:504
+msgid ""
+"Sets the function used to calculate physics for an object, if that object "
+"allows it (see [method body_set_omit_force_integration])."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:500 doc/classes/PhysicsServer.xml:519
+msgid ""
+"Sets the maximum contacts to report. Bodies can keep a log of the contacts "
+"with other bodies, this is enabled by setting the maximum amount of contacts "
+"reported to a number greater than 0."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:508
+msgid "Sets the body mode using one of the [enum BodyMode] constants."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:516 doc/classes/PhysicsServer.xml:535
+msgid ""
+"Sets whether a body uses a callback function to calculate its own physics "
+"(see [method body_set_force_integration_callback])."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:525
+msgid ""
+"Sets a body parameter. See [enum BodyParameter] for a list of available "
+"parameters."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:534 doc/classes/PhysicsServer.xml:561
+msgid ""
+"Substitutes a given body shape by another. The old shape is selected by its "
+"index, the new one by its [RID]."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:544
+msgid ""
+"Enables one way collision on body if [code]enable[/code] is [code]true[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:553
+msgid "Disables shape in body if [code]disable[/code] is [code]true[/code]."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:562
+msgid ""
+"Sets metadata of a shape within a body. This metadata is different from "
+"[method Object.set_meta], and can be retrieved on shape queries."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:571 doc/classes/PhysicsServer.xml:578
+msgid "Sets the transform matrix for a body shape."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:579 doc/classes/PhysicsServer.xml:586
+msgid "Assigns a space to the body (see [method space_create])."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:588
+msgid ""
+"Sets a body state using one of the [enum BodyState] constants.\n"
+"Note that the method doesn't take effect immediately. The state will change "
+"on the next physics frame."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:603
+msgid ""
+"Returns [code]true[/code] if a collision would result from moving in the "
+"given direction from a given point in space. Margin increases the size of "
+"the shapes involved in the collision detection. [Physics2DTestMotionResult] "
+"can be passed to return additional information in."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:633
+msgid ""
+"Creates a damped spring joint between two bodies. If not specified, the "
+"second body is assumed to be the joint itself."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:641
+msgid "Returns the value of a damped spring joint parameter."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:650
+msgid ""
+"Sets a damped spring joint parameter. See [enum DampedStringParam] for a "
+"list of available parameters."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:657
+msgid ""
+"Destroys any of the objects created by Physics2DServer. If the [RID] passed "
+"is not one of the objects that can be created by Physics2DServer, an error "
+"will be sent to the console."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:664
+msgid ""
+"Returns information about the current state of the 2D physics engine. See "
+"[enum ProcessInfo] for a list of available states."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:675
+msgid ""
+"Creates a groove joint between two bodies. If not specified, the bodies are "
+"assumed to be the joint itself."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:683
+msgid "Returns the value of a joint parameter."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:690
+msgid "Returns a joint's type (see [enum JointType])."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:699
+msgid ""
+"Sets a joint parameter. See [enum JointParam] for a list of available "
+"parameters."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:713
+msgid ""
+"Creates a pin joint between two bodies. If not specified, the second body is "
+"assumed to be the joint itself."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:735
+msgid "Activates or deactivates the 2D physics engine."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:742
+msgid ""
+"Sets the amount of iterations for calculating velocities of colliding "
+"bodies. The greater the amount of iterations, the more accurate the "
+"collisions will be. However, a greater amount of iterations requires more "
+"CPU power, which can decrease performance. The default value is [code]8[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:749 doc/classes/PhysicsServer.xml:859
+msgid "Returns the shape data."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:756
+msgid "Returns a shape's type (see [enum ShapeType])."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:764 doc/classes/PhysicsServer.xml:874
+msgid ""
+"Sets the shape data that defines its shape and size. The data to be passed "
+"depends on the kind of shape created [method shape_get_type]."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:770 doc/classes/PhysicsServer.xml:897
+msgid ""
+"Creates a space. A space is a collection of parameters for the physics "
+"engine that can be assigned to an area or a body. It can be assigned to an "
+"area with [method area_set_space], or to a body with [method body_set_space]."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:777
+msgid ""
+"Returns the state of a space, a [Physics2DDirectSpaceState]. This object can "
+"be used to make collision/intersection queries."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:785 doc/classes/PhysicsServer.xml:912
+msgid "Returns the value of a space parameter."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:792 doc/classes/PhysicsServer.xml:919
+msgid "Returns whether the space is active."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:800 doc/classes/PhysicsServer.xml:927
+msgid ""
+"Marks a space as active. It will not have an effect, unless it is assigned "
+"to an area or body."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:809
+msgid ""
+"Sets the value for a space parameter. See [enum SpaceParameter] for a list "
+"of available parameters."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:815 doc/classes/PhysicsServer.xml:1278
+msgid ""
+"Constant to set/get the maximum distance a pair of bodies has to move before "
+"their collision status has to be recalculated."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:818 doc/classes/PhysicsServer.xml:1281
+msgid ""
+"Constant to set/get the maximum distance a shape can be from another before "
+"they are considered separated."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:821 doc/classes/PhysicsServer.xml:1284
+msgid ""
+"Constant to set/get the maximum distance a shape can penetrate another shape "
+"before it is considered a collision."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:824 doc/classes/PhysicsServer.xml:1287
+msgid ""
+"Constant to set/get the threshold linear velocity of activity. A body marked "
+"as potentially inactive for both linear and angular velocity will be put to "
+"sleep after the time given."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:827 doc/classes/PhysicsServer.xml:1290
+msgid ""
+"Constant to set/get the threshold angular velocity of activity. A body "
+"marked as potentially inactive for both linear and angular velocity will be "
+"put to sleep after the time given."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:830 doc/classes/PhysicsServer.xml:1293
+msgid ""
+"Constant to set/get the maximum time of activity. A body marked as "
+"potentially inactive for both linear and angular velocity will be put to "
+"sleep after this time."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:833 doc/classes/PhysicsServer.xml:1298
+msgid ""
+"Constant to set/get the default solver bias for all physics constraints. A "
+"solver bias is a factor controlling how much two objects \"rebound\", after "
+"violating a constraint, to avoid leaving them in that state because of "
+"numerical imprecision."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:836
+msgid ""
+"This is the constant for creating line shapes. A line shape is an infinite "
+"line with an origin point, and a normal. Thus, it can be used for front/"
+"behind checks."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:841
+msgid ""
+"This is the constant for creating segment shapes. A segment shape is a line "
+"from a point A to a point B. It can be checked for intersections."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:844
+msgid ""
+"This is the constant for creating circle shapes. A circle shape only has a "
+"radius. It can be used for intersections and inside/outside checks."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:847
+msgid ""
+"This is the constant for creating rectangle shapes. A rectangle shape is "
+"defined by a width and a height. It can be used for intersections and inside/"
+"outside checks."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:850
+msgid ""
+"This is the constant for creating capsule shapes. A capsule shape is defined "
+"by a radius and a length. It can be used for intersections and inside/"
+"outside checks."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:853
+msgid ""
+"This is the constant for creating convex polygon shapes. A polygon is "
+"defined by a list of points. It can be used for intersections and inside/"
+"outside checks. Unlike the [member CollisionPolygon2D.polygon] property, "
+"polygons modified with [method shape_set_data] do not verify that the points "
+"supplied form is a convex polygon."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:856
+msgid ""
+"This is the constant for creating concave polygon shapes. A polygon is "
+"defined by a list of points. It can be used for intersections checks, but "
+"not for inside/outside checks."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:859 doc/classes/PhysicsServer.xml:1173
+msgid ""
+"This constant is used internally by the engine. Any attempt to create this "
+"kind of shape results in an error."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:862 doc/classes/PhysicsServer.xml:1176
+msgid "Constant to set/get gravity strength in an area."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:865 doc/classes/PhysicsServer.xml:1179
+msgid "Constant to set/get gravity vector/center in an area."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:868 doc/classes/PhysicsServer.xml:1182
+msgid ""
+"Constant to set/get whether the gravity vector of an area is a direction, or "
+"a center point."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:871 doc/classes/PhysicsServer.xml:1185
+msgid ""
+"Constant to set/get the falloff factor for point gravity of an area. The "
+"greater this value is, the faster the strength of gravity decreases with the "
+"square of distance."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:874 doc/classes/PhysicsServer.xml:1188
+msgid ""
+"This constant was used to set/get the falloff factor for point gravity. It "
+"has been superseded by [constant AREA_PARAM_GRAVITY_DISTANCE_SCALE]."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:877 doc/classes/PhysicsServer.xml:1191
+msgid "Constant to set/get the linear dampening factor of an area."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:880 doc/classes/PhysicsServer.xml:1194
+msgid "Constant to set/get the angular dampening factor of an area."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:883 doc/classes/PhysicsServer.xml:1197
+msgid "Constant to set/get the priority (order of processing) of an area."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:886 doc/classes/PhysicsServer.xml:1200
+msgid ""
+"This area does not affect gravity/damp. These are generally areas that exist "
+"only to detect collisions, and objects entering or exiting them."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:889 doc/classes/PhysicsServer.xml:1203
+msgid ""
+"This area adds its gravity/damp values to whatever has been calculated so "
+"far. This way, many overlapping areas can combine their physics to make "
+"interesting effects."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:892 doc/classes/PhysicsServer.xml:1206
+msgid ""
+"This area adds its gravity/damp values to whatever has been calculated so "
+"far. Then stops taking into account the rest of the areas, even the default "
+"one."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:895 doc/classes/PhysicsServer.xml:1209
+msgid ""
+"This area replaces any gravity/damp, even the default one, and stops taking "
+"into account the rest of the areas."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:898 doc/classes/PhysicsServer.xml:1212
+msgid ""
+"This area replaces any gravity/damp calculated so far, but keeps calculating "
+"the rest of the areas, down to the default one."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:901 doc/classes/PhysicsServer.xml:1215
+msgid "Constant for static bodies."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:904 doc/classes/PhysicsServer.xml:1218
+msgid "Constant for kinematic bodies."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:907 doc/classes/PhysicsServer.xml:1221
+msgid "Constant for rigid bodies."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:910 doc/classes/PhysicsServer.xml:1224
+msgid ""
+"Constant for rigid bodies in character mode. In this mode, a body can not "
+"rotate, and only its linear velocity is affected by physics."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:913 doc/classes/PhysicsServer.xml:1227
+msgid "Constant to set/get a body's bounce factor."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:916 doc/classes/PhysicsServer.xml:1230
+msgid "Constant to set/get a body's friction."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:919 doc/classes/PhysicsServer.xml:1233
+msgid "Constant to set/get a body's mass."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:922
+msgid "Constant to set/get a body's inertia."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:925 doc/classes/PhysicsServer.xml:1236
+msgid "Constant to set/get a body's gravity multiplier."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:928 doc/classes/PhysicsServer.xml:1239
+msgid "Constant to set/get a body's linear dampening factor."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:931 doc/classes/PhysicsServer.xml:1242
+msgid "Constant to set/get a body's angular dampening factor."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:934 doc/classes/PhysicsServer.xml:1245
+msgid "Represents the size of the [enum BodyParameter] enum."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:937 doc/classes/PhysicsServer.xml:1248
+msgid "Constant to set/get the current transform matrix of the body."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:940 doc/classes/PhysicsServer.xml:1251
+msgid "Constant to set/get the current linear velocity of the body."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:943 doc/classes/PhysicsServer.xml:1254
+msgid "Constant to set/get the current angular velocity of the body."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:946 doc/classes/PhysicsServer.xml:1257
+msgid "Constant to sleep/wake up a body, or to get whether it is sleeping."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:949 doc/classes/PhysicsServer.xml:1260
+msgid "Constant to set/get whether the body can sleep."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:952
+msgid "Constant to create pin joints."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:955
+msgid "Constant to create groove joints."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:958
+msgid "Constant to create damped spring joints."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:967
+msgid ""
+"Sets the resting length of the spring joint. The joint will always try to go "
+"to back this length when pulled apart."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:970
+msgid ""
+"Sets the stiffness of the spring joint. The joint applies a force equal to "
+"the stiffness times the distance from its resting length."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:973
+msgid ""
+"Sets the damping ratio of the spring joint. A value of 0 indicates an "
+"undamped spring, while 1 causes the system to reach equilibrium as fast as "
+"possible (critical damping)."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:976
+msgid ""
+"Disables continuous collision detection. This is the fastest way to detect "
+"body collisions, but can miss small, fast-moving objects."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:979
+msgid ""
+"Enables continuous collision detection by raycasting. It is faster than "
+"shapecasting, but less precise."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:982
+msgid ""
+"Enables continuous collision detection by shapecasting. It is the slowest "
+"CCD method, and the most precise."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:985 doc/classes/PhysicsServer.xml:1263
+msgid ""
+"The value of the first parameter and area callback function receives, when "
+"an object enters one of its shapes."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:988 doc/classes/PhysicsServer.xml:1266
+msgid ""
+"The value of the first parameter and area callback function receives, when "
+"an object exits one of its shapes."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:991 doc/classes/PhysicsServer.xml:1269
+msgid "Constant to get the number of objects that are not sleeping."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:994 doc/classes/PhysicsServer.xml:1272
+msgid "Constant to get the number of possible collisions."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:997 doc/classes/PhysicsServer.xml:1275
+msgid ""
+"Constant to get the number of space regions where a collision could occur."
+msgstr ""
+
+#: doc/classes/Physics2DShapeQueryParameters.xml:4
+msgid "Parameters to be sent to a 2D shape physics query."
+msgstr ""
+
+#: doc/classes/Physics2DShapeQueryParameters.xml:7
+msgid ""
+"This class contains the shape and other parameters for 2D intersection/"
+"collision queries."
+msgstr ""
+
+#: doc/classes/Physics2DShapeQueryParameters.xml:16
+msgid ""
+"Sets the [Shape2D] that will be used for collision/intersection queries."
+msgstr ""
+
+#: doc/classes/Physics2DShapeQueryParameters.xml:22
+msgid "If [code]true[/code], the query will take [Area2D]s into account."
+msgstr ""
+
+#: doc/classes/Physics2DShapeQueryParameters.xml:25
+msgid ""
+"If [code]true[/code], the query will take [PhysicsBody2D]s into account."
+msgstr ""
+
+#: doc/classes/Physics2DShapeQueryParameters.xml:28
+#: doc/classes/PhysicsShapeQueryParameters.xml:28
+msgid ""
+"The physics layer(s) the query will take into account (as a bitmask). See "
+"[url=https://docs.godotengine.org/en/3.4/tutorials/physics/"
+"physics_introduction.html#collision-layers-and-masks]Collision layers and "
+"masks[/url] in the documentation for more information."
+msgstr ""
+
+#: doc/classes/Physics2DShapeQueryParameters.xml:31
+#: doc/classes/PhysicsShapeQueryParameters.xml:31
+msgid ""
+"The list of objects or object [RID]s that will be excluded from collisions."
+msgstr ""
+
+#: doc/classes/Physics2DShapeQueryParameters.xml:34
+#: doc/classes/PhysicsShapeQueryParameters.xml:34
+msgid "The collision margin for the shape."
+msgstr ""
+
+#: doc/classes/Physics2DShapeQueryParameters.xml:37
+msgid "The motion of the shape being queried for."
+msgstr ""
+
+#: doc/classes/Physics2DShapeQueryParameters.xml:40
+#: doc/classes/PhysicsShapeQueryParameters.xml:37
+msgid "The queried shape's [RID]. See also [method set_shape]."
+msgstr ""
+
+#: doc/classes/Physics2DShapeQueryParameters.xml:43
+#: doc/classes/PhysicsShapeQueryParameters.xml:40
+msgid "The queried shape's transform matrix."
+msgstr ""
+
+#: doc/classes/PhysicsBody.xml:4
+msgid "Base class for all objects affected by physics in 3D space."
+msgstr ""
+
+#: doc/classes/PhysicsBody.xml:7
+msgid ""
+"PhysicsBody is an abstract base class for implementing a physics body. All "
+"*Body types inherit from it."
+msgstr ""
+
+#: doc/classes/PhysicsBody.xml:17 doc/classes/PhysicsBody2D.xml:17
+#: doc/classes/SoftBody.xml:17
+msgid "Adds a body to the list of bodies that this body can't collide with."
+msgstr ""
+
+#: doc/classes/PhysicsBody.xml:23 doc/classes/PhysicsBody2D.xml:23
+#: doc/classes/SoftBody.xml:23
+msgid ""
+"Returns an array of nodes that were added as collision exceptions for this "
+"body."
+msgstr ""
+
+#: doc/classes/PhysicsBody.xml:30 doc/classes/PhysicsBody2D.xml:30
+#: doc/classes/SoftBody.xml:58
+msgid ""
+"Removes a body from the list of bodies that this body can't collide with."
+msgstr ""
+
+#: doc/classes/PhysicsBody2D.xml:4
+msgid "Base class for all objects affected by physics in 2D space."
+msgstr ""
+
+#: doc/classes/PhysicsBody2D.xml:7
+msgid ""
+"PhysicsBody2D is an abstract base class for implementing a physics body. All "
+"*Body2D types inherit from it."
+msgstr ""
+
+#: doc/classes/PhysicsBody2D.xml:37
+msgid ""
+"Both collision_layer and collision_mask. Returns collision_layer when "
+"accessed. Updates collision_layer and collision_mask when modified."
+msgstr ""
+
+#: doc/classes/PhysicsDirectBodyState.xml:4
+msgid "Direct access object to a physics body in the [PhysicsServer]."
+msgstr ""
+
+#: doc/classes/PhysicsDirectBodyState.xml:7
+msgid ""
+"Provides direct access to a physics body in the [PhysicsServer], allowing "
+"safe changes to physics properties. This object is passed via the direct "
+"state callback of rigid/character bodies, and is intended for changing the "
+"direct state of that body. See [method RigidBody._integrate_forces]."
+msgstr ""
+
+#: doc/classes/PhysicsDirectBodyState.xml:18
+msgid ""
+"Adds a constant directional force without affecting rotation.\n"
+"This is equivalent to [code]add_force(force, Vector3(0,0,0))[/code]."
+msgstr ""
+
+#: doc/classes/PhysicsDirectBodyState.xml:34
+msgid "Adds a constant rotational force without affecting position."
+msgstr ""
+
+#: doc/classes/PhysicsDirectBodyState.xml:41
+msgid ""
+"Applies a single directional impulse without affecting rotation.\n"
+"This is equivalent to [code]apply_impulse(Vector3(0, 0, 0), impulse)[/code]."
+msgstr ""
+
+#: doc/classes/PhysicsDirectBodyState.xml:50
+msgid ""
+"Applies a positioned impulse to the body. An impulse is time-independent! "
+"Applying an impulse every frame would result in a framerate-dependent force. "
+"For this reason it should only be used when simulating one-time impacts. The "
+"position uses the rotation of the global coordinate system, but is centered "
+"at the object's origin."
+msgstr ""
+
+#: doc/classes/PhysicsDirectBodyState.xml:57
+msgid ""
+"Apply a torque impulse (which will be affected by the body mass and shape). "
+"This will rotate the body around the vector [code]j[/code] passed as "
+"parameter."
+msgstr ""
+
+#: doc/classes/PhysicsDirectBodyState.xml:78
+msgid "Returns the collider object."
+msgstr ""
+
+#: doc/classes/PhysicsDirectBodyState.xml:105
+msgid ""
+"Returns the number of contacts this body has with other bodies.\n"
+"[b]Note:[/b] By default, this returns 0 unless bodies are configured to "
+"monitor contacts. See [member RigidBody.contact_monitor]."
+msgstr ""
+
+#: doc/classes/PhysicsDirectBodyState.xml:113
+msgid "Impulse created by the contact. Only implemented for Bullet physics."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:4
+msgid "Direct access object to a space in the [PhysicsServer]."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:7
+msgid ""
+"Direct access object to a space in the [PhysicsServer]. It's used mainly to "
+"do queries against objects and areas residing in a given space."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:19
+msgid ""
+"Checks how far a [Shape] can move without colliding. All the parameters for "
+"the query, including the shape, are supplied through a "
+"[PhysicsShapeQueryParameters] object.\n"
+"Returns an array with the safe and unsafe proportions (between 0 and 1) of "
+"the motion. The safe proportion is the maximum fraction of the motion that "
+"can be made without a collision. The unsafe proportion is the minimum "
+"fraction of the distance that must be moved for a collision. If no collision "
+"is detected a result of [code][1.0, 1.0][/code] will be returned.\n"
+"[b]Note:[/b] Any [Shape]s that the shape is already colliding with e.g. "
+"inside of, will be ignored. Use [method collide_shape] to determine the "
+"[Shape]s that the shape is already colliding with."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:29
+msgid ""
+"Checks the intersections of a shape, given through a "
+"[PhysicsShapeQueryParameters] object, against the space. The resulting array "
+"contains a list of points where the shape intersects another. Like with "
+"[method intersect_shape], the number of returned results can be limited to "
+"save processing time."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:36
+msgid ""
+"Checks the intersections of a shape, given through a "
+"[PhysicsShapeQueryParameters] object, against the space. If it collides with "
+"more than one shape, the nearest one is selected. The returned object is a "
+"dictionary containing the following fields:\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]linear_velocity[/code]: The colliding object's velocity [Vector3]. If "
+"the object is an [Area], the result is [code](0, 0, 0)[/code].\n"
+"[code]normal[/code]: The object's surface normal at the intersection point.\n"
+"[code]point[/code]: The intersection point.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"If the shape did not intersect anything, then an empty dictionary is "
+"returned instead."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:55
+msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
+"Intersects a ray in a given space. The returned object is a dictionary with "
+"the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]normal[/code]: The object's surface normal at the intersection point.\n"
+"[code]position[/code]: The intersection point.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"If the ray did not intersect anything, then an empty dictionary is returned "
+"instead.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:89
+msgid ""
+"Checks the intersections of a shape, given through a "
+"[PhysicsShapeQueryParameters] object, against the space. The intersected "
+"shapes are returned in an array containing dictionaries with the following "
+"fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time."
+msgstr ""
+
+#: doc/classes/PhysicsMaterial.xml:4
+msgid "A material for physics properties."
+msgstr ""
+
+#: doc/classes/PhysicsMaterial.xml:7
+msgid ""
+"Provides a means of modifying the collision properties of a [PhysicsBody]."
+msgstr ""
+
+#: doc/classes/PhysicsMaterial.xml:15
+msgid ""
+"If [code]true[/code], subtracts the bounciness from the colliding object's "
+"bounciness instead of adding it."
+msgstr ""
+
+#: doc/classes/PhysicsMaterial.xml:18
+msgid ""
+"The body's bounciness. Values range from [code]0[/code] (no bounce) to "
+"[code]1[/code] (full bounciness)."
+msgstr ""
+
+#: doc/classes/PhysicsMaterial.xml:21
+msgid ""
+"The body's friction. Values range from [code]0[/code] (frictionless) to "
+"[code]1[/code] (maximum friction)."
+msgstr ""
+
+#: doc/classes/PhysicsMaterial.xml:24
+msgid ""
+"If [code]true[/code], the physics engine will use the friction of the object "
+"marked as \"rough\" when two objects collide. If [code]false[/code], the "
+"physics engine will use the lowest friction of all colliding objects "
+"instead. If [code]true[/code] for both colliding objects, the physics engine "
+"will use the highest friction."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:4
+msgid "Server interface for low-level physics access."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:7
+msgid ""
+"PhysicsServer is the server responsible for all 3D physics. It can create "
+"many kinds of physics objects, but does not insert them on the node tree."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:40
+msgid "Creates an [Area]."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:55
+msgid ""
+"Returns an area parameter value. A list of available parameters is on the "
+"[enum AreaParameter] constants."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:106
+msgid "If [code]true[/code], area collides with rays."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:168
+msgid ""
+"Sets the value for an area parameter. A list of available parameters is on "
+"the [enum AreaParameter] constants."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:176
+msgid "Sets object pickable with rays."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:218
+msgid ""
+"Sets the space override mode for the area. The modes are described in the "
+"[enum AreaSpaceOverrideMode] constants."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:282
+msgid ""
+"Gives the body a push at a [code]position[/code] in the direction of the "
+"[code]impulse[/code]."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:290
+msgid "Gives the body a push to rotate it."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:313
+msgid ""
+"Creates a physics body. The first parameter can be any value from [enum "
+"BodyMode] constants, for the type of body created. Additionally, the body "
+"can be created in sleeping state to save processing time."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:327
+msgid ""
+"Returns the physics layer or layers a body can collide with.\n"
+"-"
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:335
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:370
+msgid ""
+"Returns the value of a body parameter. A list of available parameters is on "
+"the [enum BodyParameter] constants."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:422
+msgid ""
+"If [code]true[/code], the continuous collision detection mode is enabled."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:436
+msgid "If [code]true[/code], the body can be detected by rays."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:444
+msgid ""
+"Removes a body from the list of bodies exempt from collisions.\n"
+"Continuous collision detection tries to predict where a moving body will "
+"collide, instead of moving it and correcting its movement if it collided."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:493
+msgid ""
+"If [code]true[/code], the continuous collision detection mode is enabled.\n"
+"Continuous collision detection tries to predict where a moving body will "
+"collide, instead of moving it and correcting its movement if it collided."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:527
+msgid "Sets the body mode, from one of the [enum BodyMode] constants."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:544
+msgid ""
+"Sets a body parameter. A list of available parameters is on the [enum "
+"BodyParameter] constants."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:552
+msgid "Sets the body pickable with rays if [code]enabled[/code] is set."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:595
+msgid "Sets a body state (see [enum BodyState] constants)."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:608
+msgid ""
+"Returns [code]true[/code] if a collision would result from moving in the "
+"given direction from a given point in space. [PhysicsTestMotionResult] can "
+"be passed to return additional information in."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:616
+msgid ""
+"Gets a cone_twist_joint parameter (see [enum ConeTwistJointParam] constants)."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:625
+msgid ""
+"Sets a cone_twist_joint parameter (see [enum ConeTwistJointParam] constants)."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:632
+msgid ""
+"Destroys any of the objects created by PhysicsServer. If the [RID] passed is "
+"not one of the objects that can be created by PhysicsServer, an error will "
+"be sent to the console."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:641
+msgid ""
+"Gets a generic_6_DOF_joint flag (see [enum G6DOFJointAxisFlag] constants)."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:650
+msgid ""
+"Gets a generic_6_DOF_joint parameter (see [enum G6DOFJointAxisParam] "
+"constants)."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:660
+msgid ""
+"Sets a generic_6_DOF_joint flag (see [enum G6DOFJointAxisFlag] constants)."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:670
+msgid ""
+"Sets a generic_6_DOF_joint parameter (see [enum G6DOFJointAxisParam] "
+"constants)."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:677
+msgid "Returns an Info defined by the [enum ProcessInfo] input given."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:685
+msgid "Gets a hinge_joint flag (see [enum HingeJointFlag] constants)."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:693
+msgid "Gets a hinge_joint parameter (see [enum HingeJointParam])."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:702
+msgid "Sets a hinge_joint flag (see [enum HingeJointFlag] constants)."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:711
+msgid "Sets a hinge_joint parameter (see [enum HingeJointParam] constants)."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:721
+msgid "Creates a [ConeTwistJoint]."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:731
+msgid "Creates a [Generic6DOFJoint]."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:741
+msgid "Creates a [HingeJoint]."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:751
+msgid "Creates a [PinJoint]."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:761
+msgid "Creates a [SliderJoint]."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:768
+msgid "Gets the priority value of the Joint."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:775
+msgid "Returns the type of the Joint."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:783
+msgid "Sets the priority value of the Joint."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:790
+msgid ""
+"Returns position of the joint in the local space of body a of the joint."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:797
+msgid ""
+"Returns position of the joint in the local space of body b of the joint."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:805
+msgid "Gets a pin_joint parameter (see [enum PinJointParam] constants)."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:813
+msgid "Sets position of the joint in the local space of body a of the joint."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:821
+msgid "Sets position of the joint in the local space of body b of the joint."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:830
+msgid "Sets a pin_joint parameter (see [enum PinJointParam] constants)."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:837
+msgid "Activates or deactivates the 3D physics engine."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:844
+msgid ""
+"Sets the amount of iterations for calculating velocities of colliding "
+"bodies. The greater the amount of iterations, the more accurate the "
+"collisions will be. However, a greater amount of iterations requires more "
+"CPU power, which can decrease performance. The default value is [code]8[/"
+"code].\n"
+"[b]Note:[/b] Only has an effect when using the GodotPhysics engine, not the "
+"default Bullet physics engine."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:852
+msgid ""
+"Creates a shape of a type from [enum ShapeType]. Does not assign it to a "
+"body or an area. To do so, you must use [method area_set_shape] or [method "
+"body_set_shape]."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:866
+msgid "Returns the type of shape (see [enum ShapeType] constants)."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:882 doc/classes/PhysicsServer.xml:891
+msgid "Gets a slider_joint parameter (see [enum SliderJointParam] constants)."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:904
+msgid ""
+"Returns the state of a space, a [PhysicsDirectSpaceState]. This object can "
+"be used to make collision/intersection queries."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:936
+msgid ""
+"Sets the value for a space parameter. A list of available parameters is on "
+"the [enum SpaceParameter] constants."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:942
+msgid "The [Joint] is a [PinJoint]."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:945
+msgid "The [Joint] is a [HingeJoint]."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:948
+msgid "The [Joint] is a [SliderJoint]."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:951
+msgid "The [Joint] is a [ConeTwistJoint]."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:954
+msgid "The [Joint] is a [Generic6DOFJoint]."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:957
+msgid ""
+"The strength with which the pinned objects try to stay in positional "
+"relation to each other.\n"
+"The higher, the stronger."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:961
+msgid ""
+"The strength with which the pinned objects try to stay in velocity relation "
+"to each other.\n"
+"The higher, the stronger."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:965
+msgid ""
+"If above 0, this value is the maximum value for an impulse that this Joint "
+"puts on its ends."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:971
+msgid "The maximum rotation across the Hinge."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:974
+msgid "The minimum rotation across the Hinge."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:991
+msgid "If [code]true[/code], the Hinge has a maximum and a minimum rotation."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:994
+msgid "If [code]true[/code], a motor turns the Hinge."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:997 doc/classes/SliderJoint.xml:76
+#: doc/classes/SliderJoint.xml:99
+msgid ""
+"The maximum difference between the pivot points on their X axis before "
+"damping happens."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1000 doc/classes/SliderJoint.xml:67
+#: doc/classes/SliderJoint.xml:102
+msgid ""
+"The minimum difference between the pivot points on their X axis before "
+"damping happens."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1003 doc/classes/SliderJoint.xml:73
+#: doc/classes/SliderJoint.xml:105
+msgid ""
+"A factor applied to the movement across the slider axis once the limits get "
+"surpassed. The lower, the slower the movement."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1006 doc/classes/SliderJoint.xml:108
+msgid ""
+"The amount of restitution once the limits are surpassed. The lower, the more "
+"velocityenergy gets lost."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1009 doc/classes/SliderJoint.xml:111
+msgid "The amount of damping once the slider limits are surpassed."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1012 doc/classes/SliderJoint.xml:85
+#: doc/classes/SliderJoint.xml:114
+msgid ""
+"A factor applied to the movement across the slider axis as long as the "
+"slider is in the limits. The lower, the slower the movement."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1015 doc/classes/SliderJoint.xml:82
+#: doc/classes/SliderJoint.xml:117
+msgid "The amount of restitution inside the slider limits."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1018 doc/classes/SliderJoint.xml:79
+#: doc/classes/SliderJoint.xml:120
+msgid "The amount of damping inside the slider limits."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1021 doc/classes/SliderJoint.xml:94
+#: doc/classes/SliderJoint.xml:123
+msgid "A factor applied to the movement across axes orthogonal to the slider."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1024 doc/classes/SliderJoint.xml:91
+#: doc/classes/SliderJoint.xml:126
+msgid ""
+"The amount of restitution when movement is across axes orthogonal to the "
+"slider."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1027 doc/classes/SliderJoint.xml:88
+#: doc/classes/SliderJoint.xml:129
+msgid ""
+"The amount of damping when movement is across axes orthogonal to the slider."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1030 doc/classes/SliderJoint.xml:43
+#: doc/classes/SliderJoint.xml:132
+msgid "The upper limit of rotation in the slider."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1033 doc/classes/SliderJoint.xml:32
+#: doc/classes/SliderJoint.xml:135
+msgid "The lower limit of rotation in the slider."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1036 doc/classes/SliderJoint.xml:138
+msgid "A factor applied to the all rotation once the limit is surpassed."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1039 doc/classes/SliderJoint.xml:141
+msgid "The amount of restitution of the rotation when the limit is surpassed."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1042 doc/classes/SliderJoint.xml:144
+msgid "The amount of damping of the rotation when the limit is surpassed."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1045
+msgid "A factor that gets applied to the all rotation in the limits."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1048 doc/classes/SliderJoint.xml:49
+#: doc/classes/SliderJoint.xml:150
+msgid "The amount of restitution of the rotation in the limits."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1051 doc/classes/SliderJoint.xml:46
+#: doc/classes/SliderJoint.xml:153
+msgid "The amount of damping of the rotation in the limits."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1054
+msgid ""
+"A factor that gets applied to the all rotation across axes orthogonal to the "
+"slider."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1057 doc/classes/SliderJoint.xml:58
+#: doc/classes/SliderJoint.xml:159
+msgid ""
+"The amount of restitution of the rotation across axes orthogonal to the "
+"slider."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1060 doc/classes/SliderJoint.xml:55
+#: doc/classes/SliderJoint.xml:162
+msgid ""
+"The amount of damping of the rotation across axes orthogonal to the slider."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1063
+msgid "Represents the size of the [enum SliderJointParam] enum."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1080
+msgid ""
+"The ease with which the Joint twists, if it's too low, it takes more force "
+"to twist the joint."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1092
+msgid ""
+"A factor that gets applied to the movement across the axes. The lower, the "
+"slower the movement."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1095
+msgid ""
+"The amount of restitution on the axes movement. The lower, the more velocity-"
+"energy gets lost."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1101
+msgid "The velocity that the joint's linear motor will attempt to reach."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1104
+msgid ""
+"The maximum force that the linear motor can apply while trying to reach the "
+"target velocity."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1113
+msgid "A factor that gets multiplied onto all rotations across the axes."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1125
+msgid ""
+"When correcting the crossing of limits in rotation across the axes, this "
+"error tolerance factor defines how much the correction gets slowed down. The "
+"lower, the slower."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1134
+msgid ""
+"If [code]set[/code] there is linear motion possible within the given limits."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1137
+msgid "If [code]set[/code] there is rotational motion possible."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1140
+msgid "If [code]set[/code] there is a rotational motor across these axes."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1143
+msgid ""
+"If [code]set[/code] there is a linear motor on this axis that targets a "
+"specific velocity."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1146
+msgid "The [Shape] is a [PlaneShape]."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1149
+msgid "The [Shape] is a [RayShape]."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1152
+msgid "The [Shape] is a [SphereShape]."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1155
+msgid "The [Shape] is a [BoxShape]."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1158
+msgid "The [Shape] is a [CapsuleShape]."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1161
+msgid "The [Shape] is a [CylinderShape]."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1164
+msgid "The [Shape] is a [ConvexPolygonShape]."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1167
+msgid "The [Shape] is a [ConcavePolygonShape]."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1170
+msgid "The [Shape] is a [HeightMapShape]."
+msgstr ""
+
+#: doc/classes/PhysicsShapeQueryParameters.xml:4
+msgid "Parameters to be sent to a 3D shape physics query."
+msgstr ""
+
+#: doc/classes/PhysicsShapeQueryParameters.xml:7
+msgid ""
+"This class contains the shape and other parameters for 3D intersection/"
+"collision queries."
+msgstr ""
+
+#: doc/classes/PhysicsShapeQueryParameters.xml:16
+msgid "Sets the [Shape] that will be used for collision/intersection queries."
+msgstr ""
+
+#: doc/classes/PhysicsShapeQueryParameters.xml:22
+msgid "If [code]true[/code], the query will take [Area]s into account."
+msgstr ""
+
+#: doc/classes/PhysicsShapeQueryParameters.xml:25
+msgid "If [code]true[/code], the query will take [PhysicsBody]s into account."
+msgstr ""
+
+#: doc/classes/PinJoint.xml:4
+msgid "Pin joint for 3D PhysicsBodies."
+msgstr ""
+
+#: doc/classes/PinJoint.xml:7
+msgid ""
+"Pin joint for 3D rigid bodies. It pins 2 bodies (rigid or static) together. "
+"See also [Generic6DOFJoint]."
+msgstr ""
+
+#: doc/classes/PinJoint.xml:30 doc/classes/PinJoint.xml:41
+msgid ""
+"The force with which the pinned objects stay in positional relation to each "
+"other. The higher, the stronger."
+msgstr ""
+
+#: doc/classes/PinJoint.xml:33 doc/classes/PinJoint.xml:44
+msgid ""
+"The force with which the pinned objects stay in velocity relation to each "
+"other. The higher, the stronger."
+msgstr ""
+
+#: doc/classes/PinJoint.xml:36 doc/classes/PinJoint.xml:47
+msgid ""
+"If above 0, this value is the maximum value for an impulse that this Joint "
+"produces."
+msgstr ""
+
+#: doc/classes/PinJoint2D.xml:4
+msgid "Pin Joint for 2D shapes."
+msgstr ""
+
+#: doc/classes/PinJoint2D.xml:7
+msgid ""
+"Pin Joint for 2D rigid bodies. It pins two bodies (rigid or static) together."
+msgstr ""
+
+#: doc/classes/PinJoint2D.xml:15
+msgid ""
+"The higher this value, the more the bond to the pinned partner can flex."
+msgstr ""
+
+#: doc/classes/Plane.xml:4
+msgid "Plane in hessian form."
+msgstr ""
+
+#: doc/classes/Plane.xml:7
+msgid ""
+"Plane represents a normalized plane equation. Basically, \"normal\" is the "
+"normal of the plane (a,b,c normalized), and \"d\" is the distance from the "
+"origin to the plane (in the direction of \"normal\"). \"Over\" or \"Above\" "
+"the plane is considered the side of the plane towards where the normal is "
+"pointing."
+msgstr ""
+
+#: doc/classes/Plane.xml:20
+msgid ""
+"Creates a plane from the four parameters. The three components of the "
+"resulting plane's [member normal] are [code]a[/code], [code]b[/code] and "
+"[code]c[/code], and the plane has a distance of [code]d[/code] from the "
+"origin."
+msgstr ""
+
+#: doc/classes/Plane.xml:29
+msgid "Creates a plane from the three points, given in clockwise order."
+msgstr ""
+
+#: doc/classes/Plane.xml:37
+msgid "Creates a plane from the normal and the plane's distance to the origin."
+msgstr ""
+
+#: doc/classes/Plane.xml:43
+msgid "Returns the center of the plane."
+msgstr ""
+
+#: doc/classes/Plane.xml:50
+msgid ""
+"Returns the shortest distance from the plane to the position [code]point[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Plane.xml:56
+msgid ""
+"Returns the center of the plane.\n"
+"This method is deprecated, please use [method center] instead."
+msgstr ""
+
+#: doc/classes/Plane.xml:65
+msgid ""
+"Returns [code]true[/code] if [code]point[/code] is inside the plane. "
+"Comparison uses a custom minimum [code]epsilon[/code] threshold."
+msgstr ""
+
+#: doc/classes/Plane.xml:73
+msgid ""
+"Returns the intersection point of the three planes [code]b[/code], [code]c[/"
+"code] and this plane. If no intersection is found, [code]null[/code] is "
+"returned."
+msgstr ""
+
+#: doc/classes/Plane.xml:81
+msgid ""
+"Returns the intersection point of a ray consisting of the position "
+"[code]from[/code] and the direction normal [code]dir[/code] with this plane. "
+"If no intersection is found, [code]null[/code] is returned."
+msgstr ""
+
+#: doc/classes/Plane.xml:89
+msgid ""
+"Returns the intersection point of a segment from position [code]begin[/code] "
+"to position [code]end[/code] with this plane. If no intersection is found, "
+"[code]null[/code] is returned."
+msgstr ""
+
+#: doc/classes/Plane.xml:96
+msgid ""
+"Returns [code]true[/code] if this plane and [code]plane[/code] are "
+"approximately equal, by running [method @GDScript.is_equal_approx] on each "
+"component."
+msgstr ""
+
+#: doc/classes/Plane.xml:103
+msgid ""
+"Returns [code]true[/code] if [code]point[/code] is located above the plane."
+msgstr ""
+
+#: doc/classes/Plane.xml:109
+msgid "Returns a copy of the plane, normalized."
+msgstr ""
+
+#: doc/classes/Plane.xml:116
+msgid ""
+"Returns the orthogonal projection of [code]point[/code] into a point in the "
+"plane."
+msgstr ""
+
+#: doc/classes/Plane.xml:122
+msgid ""
+"The distance from the origin to the plane, in the direction of [member "
+"normal]. This value is typically non-negative.\n"
+"In the scalar equation of the plane [code]ax + by + cz = d[/code], this is "
+"[code]d[/code], while the [code](a, b, c)[/code] coordinates are represented "
+"by the [member normal] property."
+msgstr ""
+
+#: doc/classes/Plane.xml:126
+msgid ""
+"The normal of the plane, which must be normalized.\n"
+"In the scalar equation of the plane [code]ax + by + cz = d[/code], this is "
+"the vector [code](a, b, c)[/code], where [code]d[/code] is the [member d] "
+"property."
+msgstr ""
+
+#: doc/classes/Plane.xml:130
+msgid "The X component of the plane's [member normal] vector."
+msgstr ""
+
+#: doc/classes/Plane.xml:133
+msgid "The Y component of the plane's [member normal] vector."
+msgstr ""
+
+#: doc/classes/Plane.xml:136
+msgid "The Z component of the plane's [member normal] vector."
+msgstr ""
+
+#: doc/classes/Plane.xml:141
+msgid "A plane that extends in the Y and Z axes (normal vector points +X)."
+msgstr ""
+
+#: doc/classes/Plane.xml:144
+msgid "A plane that extends in the X and Z axes (normal vector points +Y)."
+msgstr ""
+
+#: doc/classes/Plane.xml:147
+msgid "A plane that extends in the X and Y axes (normal vector points +Z)."
+msgstr ""
+
+#: doc/classes/PlaneMesh.xml:4
+msgid "Class representing a planar [PrimitiveMesh]."
+msgstr ""
+
+#: doc/classes/PlaneMesh.xml:7
+msgid ""
+"Class representing a planar [PrimitiveMesh]. This flat mesh does not have a "
+"thickness. By default, this mesh is aligned on the X and Z axes; this "
+"default rotation isn't suited for use with billboarded materials. For "
+"billboarded materials, use [QuadMesh] instead.\n"
+"[b]Note:[/b] When using a large textured [PlaneMesh] (e.g. as a floor), you "
+"may stumble upon UV jittering issues depending on the camera angle. To solve "
+"this, increase [member subdivide_depth] and [member subdivide_width] until "
+"you no longer notice UV jittering."
+msgstr ""
+
+#: doc/classes/PlaneMesh.xml:16
+msgid "Offset from the origin of the generated plane. Useful for particles."
+msgstr ""
+
+#: doc/classes/PlaneMesh.xml:19
+msgid "Size of the generated plane."
+msgstr ""
+
+#: doc/classes/PlaneMesh.xml:22
+msgid "Number of subdivision along the Z axis."
+msgstr ""
+
+#: doc/classes/PlaneMesh.xml:25
+msgid "Number of subdivision along the X axis."
+msgstr ""
+
+#: doc/classes/PlaneShape.xml:4
+msgid "Infinite plane shape for 3D collisions."
+msgstr ""
+
+#: doc/classes/PlaneShape.xml:7
+msgid ""
+"An infinite plane shape for 3D collisions. Note that the [Plane]'s normal "
+"matters; anything \"below\" the plane will collide with it. If the "
+"[PlaneShape] is used in a [PhysicsBody], it will cause colliding objects "
+"placed \"below\" it to teleport \"above\" the plane."
+msgstr ""
+
+#: doc/classes/PlaneShape.xml:15
+msgid "The [Plane] used by the [PlaneShape] for collision."
+msgstr ""
+
+#: doc/classes/PointMesh.xml:4
+msgid "Mesh with a single Point primitive."
+msgstr ""
+
+#: doc/classes/PointMesh.xml:7
+msgid ""
+"The PointMesh is made from a single point. Instead of relying on triangles, "
+"points are rendered as a single rectangle on the screen with a constant "
+"size. They are intended to be used with Particle systems, but can be used as "
+"a cheap way to render constant size billboarded sprites (for example in a "
+"point cloud).\n"
+"PointMeshes, must be used with a material that has a point size. Point size "
+"can be accessed in a shader with [code]POINT_SIZE[/code], or in a "
+"[SpatialMaterial] by setting [member SpatialMaterial.flags_use_point_size] "
+"and the variable [member SpatialMaterial.params_point_size].\n"
+"When using PointMeshes, properties that normally alter vertices will be "
+"ignored, including billboard mode, grow, and cull face."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:4
+msgid "A 2D polygon."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:7
+msgid ""
+"A Polygon2D is defined by a set of points. Each point is connected to the "
+"next, with the final point being connected to the first, resulting in a "
+"closed polygon. Polygon2Ds can be filled with color (solid or gradient) or "
+"filled with a given texture.\n"
+"[b]Note:[/b] By default, Godot can only draw up to 4,096 polygon points at a "
+"time. To increase this limit, open the Project Settings and increase [member "
+"ProjectSettings.rendering/limits/buffers/canvas_polygon_buffer_size_kb] and "
+"[member ProjectSettings.rendering/limits/buffers/"
+"canvas_polygon_index_buffer_size_kb]."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:18
+msgid ""
+"Adds a bone with the specified [code]path[/code] and [code]weights[/code]."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:24
+msgid "Removes all bones from this [Polygon2D]."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:31
+msgid "Removes the specified bone from this [Polygon2D]."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:37
+msgid "Returns the number of bones in this [Polygon2D]."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:44
+msgid "Returns the path to the node associated with the specified bone."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:51
+msgid "Returns the height values of the specified bone."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:59
+msgid "Sets the path to the node associated with the specified bone."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:67
+msgid "Sets the weight values for the specified bone."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:73
+msgid "If [code]true[/code], polygon edges will be anti-aliased."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:78
+msgid ""
+"The polygon's fill color. If [code]texture[/code] is defined, it will be "
+"multiplied by this color. It will also be the default color for vertices not "
+"set in [code]vertex_colors[/code]."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:83
+msgid ""
+"Added padding applied to the bounding box when using [code]invert[/code]. "
+"Setting this value too small may result in a \"Bad Polygon\" error."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:86
+msgid ""
+"If [code]true[/code], polygon will be inverted, containing the area outside "
+"the defined points and extending to the [code]invert_border[/code]."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:89
+msgid "The offset applied to each vertex."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:92
+msgid ""
+"The polygon's list of vertices. The final point will be connected to the "
+"first.\n"
+"[b]Note:[/b] This returns a copy of the [PoolVector2Array] rather than a "
+"reference."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:100
+msgid ""
+"The polygon's fill texture. Use [code]uv[/code] to set texture coordinates."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:103
+msgid ""
+"Amount to offset the polygon's [code]texture[/code]. If [code](0, 0)[/code] "
+"the texture's origin (its top-left corner) will be placed at the polygon's "
+"[code]position[/code]."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:106
+msgid "The texture's rotation in radians."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:109
+msgid "The texture's rotation in degrees."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:112
+msgid ""
+"Amount to multiply the [code]uv[/code] coordinates when using a "
+"[code]texture[/code]. Larger values make the texture smaller, and vice versa."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:115
+msgid ""
+"Texture coordinates for each vertex of the polygon. There should be one "
+"[code]uv[/code] per polygon vertex. If there are fewer, undefined vertices "
+"will use [code](0, 0)[/code]."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:118
+msgid ""
+"Color for each vertex. Colors are interpolated between vertices, resulting "
+"in smooth gradients. There should be one per polygon vertex. If there are "
+"fewer, undefined vertices will use [code]color[/code]."
+msgstr ""
+
+#: doc/classes/PoolByteArray.xml:4
+msgid "A pooled [Array] of bytes."
+msgstr ""
+
+#: doc/classes/PoolByteArray.xml:7
+msgid ""
+"An [Array] specifically designed to hold bytes. Optimized for memory usage, "
+"does not fragment the memory.\n"
+"[b]Note:[/b] This type is passed by value and not by reference."
+msgstr ""
+
+#: doc/classes/PoolByteArray.xml:17
+msgid ""
+"Constructs a new [PoolByteArray]. Optionally, you can pass in a generic "
+"[Array] that will be converted."
+msgstr ""
+
+#: doc/classes/PoolByteArray.xml:29
+msgid "Appends a [PoolByteArray] at the end of this array."
+msgstr ""
+
+#: doc/classes/PoolByteArray.xml:36
+msgid ""
+"Returns a new [PoolByteArray] with the data compressed. Set the compression "
+"mode using one of [enum File.CompressionMode]'s constants."
+msgstr ""
+
+#: doc/classes/PoolByteArray.xml:44
+msgid ""
+"Returns a new [PoolByteArray] with the data decompressed. Set "
+"[code]buffer_size[/code] to the size of the uncompressed data. Set the "
+"compression mode using one of [enum File.CompressionMode]'s constants."
+msgstr ""
+
+#: doc/classes/PoolByteArray.xml:52
+msgid ""
+"Returns a new [PoolByteArray] with the data decompressed. Set the "
+"compression mode using one of [enum File.CompressionMode]'s constants. "
+"[b]This method only accepts gzip and deflate compression modes.[/b]\n"
+"This method is potentially slower than [code]decompress[/code], as it may "
+"have to re-allocate it's output buffer multiple times while decompressing, "
+"where as [code]decompress[/code] knows it's output buffer size from the "
+"begining.\n"
+"\n"
+"GZIP has a maximal compression ratio of 1032:1, meaning it's very possible "
+"for a small compressed payload to decompress to a potentially very large "
+"output. To guard against this, you may provide a maximum size this function "
+"is allowed to allocate in bytes via [code]max_output_size[/code]. Passing -1 "
+"will allow for unbounded output. If any positive value is passed, and the "
+"decompression exceeds that ammount in bytes, then an error will be returned."
+msgstr ""
+
+#: doc/classes/PoolByteArray.xml:67
+msgid ""
+"Returns a copy of the array's contents as [String]. Fast alternative to "
+"[method get_string_from_utf8] if the content is ASCII-only. Unlike the UTF-8 "
+"function this function maps every byte to a character in the array. "
+"Multibyte sequences will not be interpreted correctly. For parsing user "
+"input always use [method get_string_from_utf8]."
+msgstr ""
+
+#: doc/classes/PoolByteArray.xml:73
+msgid ""
+"Returns a copy of the array's contents as [String]. Slower than [method "
+"get_string_from_ascii] but supports UTF-8 encoded data. Use this function if "
+"you are unsure about the source of the data. For user input this function "
+"should always be preferred."
+msgstr ""
+
+#: doc/classes/PoolByteArray.xml:79
+msgid ""
+"Returns a hexadecimal representation of this array as a [String].\n"
+"[codeblock]\n"
+"var array = PoolByteArray([11, 46, 255])\n"
+"print(array.hex_encode()) # Prints: 0b2eff\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/PoolByteArray.xml:91 doc/classes/PoolColorArray.xml:43
+#: doc/classes/PoolRealArray.xml:44 doc/classes/PoolStringArray.xml:44
+#: doc/classes/PoolVector2Array.xml:44 doc/classes/PoolVector3Array.xml:43
+msgid ""
+"Inserts a new element at a given position in the array. The position must be "
+"valid, or at the end of the array ([code]idx == size()[/code])."
+msgstr ""
+
+#: doc/classes/PoolByteArray.xml:102 doc/classes/PoolRealArray.xml:55
+msgid "Appends an element at the end of the array."
+msgstr ""
+
+#: doc/classes/PoolByteArray.xml:108 doc/classes/PoolColorArray.xml:60
+#: doc/classes/PoolIntArray.xml:61 doc/classes/PoolRealArray.xml:61
+#: doc/classes/PoolStringArray.xml:68 doc/classes/PoolVector2Array.xml:61
+#: doc/classes/PoolVector3Array.xml:60
+msgid "Removes an element from the array by index."
+msgstr ""
+
+#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolIntArray.xml:67
+#: doc/classes/PoolRealArray.xml:67
+msgid ""
+"Sets the size of the array. If the array is grown, reserves elements at the "
+"end of the array. If the array is shrunk, truncates the array to the new "
+"size.\n"
+"[b]Note:[/b] Added elements are not automatically initialized to 0 and will "
+"contain garbage, i.e. indeterminate values."
+msgstr ""
+
+#: doc/classes/PoolByteArray.xml:122
+msgid "Changes the byte at the given index."
+msgstr ""
+
+#: doc/classes/PoolByteArray.xml:128 doc/classes/PoolColorArray.xml:79
+#: doc/classes/PoolRealArray.xml:81 doc/classes/PoolStringArray.xml:87
+#: doc/classes/PoolVector2Array.xml:80 doc/classes/PoolVector3Array.xml:79
+msgid "Returns the size of the array."
+msgstr ""
+
+#: doc/classes/PoolByteArray.xml:136
+msgid ""
+"Returns the slice of the [PoolByteArray] between indices (inclusive) as a "
+"new [PoolByteArray]. Any negative index is considered to be from the end of "
+"the array."
+msgstr ""
+
+#: doc/classes/PoolColorArray.xml:4
+msgid "A pooled [Array] of [Color]."
+msgstr ""
+
+#: doc/classes/PoolColorArray.xml:7
+msgid ""
+"An [Array] specifically designed to hold [Color]. Optimized for memory "
+"usage, does not fragment the memory.\n"
+"[b]Note:[/b] This type is passed by value and not by reference."
+msgstr ""
+
+#: doc/classes/PoolColorArray.xml:17
+msgid ""
+"Constructs a new [PoolColorArray]. Optionally, you can pass in a generic "
+"[Array] that will be converted."
+msgstr ""
+
+#: doc/classes/PoolColorArray.xml:29
+msgid "Appends a [PoolColorArray] at the end of this array."
+msgstr ""
+
+#: doc/classes/PoolColorArray.xml:54 doc/classes/PoolIntArray.xml:55
+msgid "Appends a value to the array."
+msgstr ""
+
+#: doc/classes/PoolColorArray.xml:66 doc/classes/PoolStringArray.xml:74
+#: doc/classes/PoolVector2Array.xml:67 doc/classes/PoolVector3Array.xml:66
+msgid ""
+"Sets the size of the array. If the array is grown, reserves elements at the "
+"end of the array. If the array is shrunk, truncates the array to the new "
+"size."
+msgstr ""
+
+#: doc/classes/PoolColorArray.xml:73
+msgid "Changes the [Color] at the given index."
+msgstr ""
+
+#: doc/classes/PoolIntArray.xml:4
+msgid "A pooled [Array] of integers ([int])."
+msgstr ""
+
+#: doc/classes/PoolIntArray.xml:7
+msgid ""
+"An [Array] specifically designed to hold integer values ([int]). Optimized "
+"for memory usage, does not fragment the memory.\n"
+"[b]Note:[/b] This type is passed by value and not by reference.\n"
+"[b]Note:[/b] This type is limited to signed 32-bit integers, which means it "
+"can only take values in the interval [code][-2^31, 2^31 - 1][/code], i.e. "
+"[code][-2147483648, 2147483647][/code]. Exceeding those bounds will wrap "
+"around. In comparison, [int] uses signed 64-bit integers which can hold much "
+"larger values."
+msgstr ""
+
+#: doc/classes/PoolIntArray.xml:18
+msgid ""
+"Constructs a new [PoolIntArray]. Optionally, you can pass in a generic "
+"[Array] that will be converted."
+msgstr ""
+
+#: doc/classes/PoolIntArray.xml:30
+msgid "Appends a [PoolIntArray] at the end of this array."
+msgstr ""
+
+#: doc/classes/PoolIntArray.xml:44
+msgid ""
+"Inserts a new int at a given position in the array. The position must be "
+"valid, or at the end of the array ([code]idx == size()[/code])."
+msgstr ""
+
+#: doc/classes/PoolIntArray.xml:75
+msgid "Changes the int at the given index."
+msgstr ""
+
+#: doc/classes/PoolIntArray.xml:81
+msgid "Returns the array size."
+msgstr ""
+
+#: doc/classes/PoolRealArray.xml:4
+msgid "A pooled [Array] of reals ([float])."
+msgstr ""
+
+#: doc/classes/PoolRealArray.xml:7
+msgid ""
+"An [Array] specifically designed to hold floating-point values. Optimized "
+"for memory usage, does not fragment the memory.\n"
+"[b]Note:[/b] This type is passed by value and not by reference.\n"
+"[b]Note:[/b] Unlike primitive [float]s which are 64-bit, numbers stored in "
+"[PoolRealArray] are 32-bit floats. This means values stored in "
+"[PoolRealArray] have lower precision compared to primitive [float]s. If you "
+"need to store 64-bit floats in an array, use a generic [Array] with [float] "
+"elements as these will still be 64-bit. However, using a generic [Array] to "
+"store [float]s will use roughly 6 times more memory compared to a "
+"[PoolRealArray]."
+msgstr ""
+
+#: doc/classes/PoolRealArray.xml:18
+msgid ""
+"Constructs a new [PoolRealArray]. Optionally, you can pass in a generic "
+"[Array] that will be converted."
+msgstr ""
+
+#: doc/classes/PoolRealArray.xml:30
+msgid "Appends a [PoolRealArray] at the end of this array."
+msgstr ""
+
+#: doc/classes/PoolRealArray.xml:75
+msgid "Changes the float at the given index."
+msgstr ""
+
+#: doc/classes/PoolStringArray.xml:4
+msgid "A pooled [Array] of [String]."
+msgstr ""
+
+#: doc/classes/PoolStringArray.xml:7
+msgid ""
+"An [Array] specifically designed to hold [String]s. Optimized for memory "
+"usage, does not fragment the memory.\n"
+"[b]Note:[/b] This type is passed by value and not by reference."
+msgstr ""
+
+#: doc/classes/PoolStringArray.xml:18
+msgid ""
+"Constructs a new [PoolStringArray]. Optionally, you can pass in a generic "
+"[Array] that will be converted."
+msgstr ""
+
+#: doc/classes/PoolStringArray.xml:30
+msgid "Appends a [PoolStringArray] at the end of this array."
+msgstr ""
+
+#: doc/classes/PoolStringArray.xml:56
+msgid ""
+"Returns a [String] with each element of the array joined with the given "
+"[code]delimiter[/code]."
+msgstr ""
+
+#: doc/classes/PoolStringArray.xml:62
+msgid "Appends a string element at end of the array."
+msgstr ""
+
+#: doc/classes/PoolStringArray.xml:81
+msgid "Changes the [String] at the given index."
+msgstr ""
+
+#: doc/classes/PoolVector2Array.xml:4
+msgid "A pooled [Array] of [Vector2]."
+msgstr ""
+
+#: doc/classes/PoolVector2Array.xml:7
+msgid ""
+"An [Array] specifically designed to hold [Vector2]. Optimized for memory "
+"usage, does not fragment the memory.\n"
+"[b]Note:[/b] This type is passed by value and not by reference."
+msgstr ""
+
+#: doc/classes/PoolVector2Array.xml:11 doc/classes/TileMap.xml:15
+#: doc/classes/TileSet.xml:15
+msgid "https://godotengine.org/asset-library/asset/519"
+msgstr ""
+
+#: doc/classes/PoolVector2Array.xml:18
+msgid ""
+"Constructs a new [PoolVector2Array]. Optionally, you can pass in a generic "
+"[Array] that will be converted."
+msgstr ""
+
+#: doc/classes/PoolVector2Array.xml:30
+msgid "Appends a [PoolVector2Array] at the end of this array."
+msgstr ""
+
+#: doc/classes/PoolVector2Array.xml:55
+msgid "Inserts a [Vector2] at the end."
+msgstr ""
+
+#: doc/classes/PoolVector2Array.xml:74
+msgid "Changes the [Vector2] at the given index."
+msgstr ""
+
+#: doc/classes/PoolVector3Array.xml:4
+msgid "A pooled [Array] of [Vector3]."
+msgstr ""
+
+#: doc/classes/PoolVector3Array.xml:7
+msgid ""
+"An [Array] specifically designed to hold [Vector3]. Optimized for memory "
+"usage, does not fragment the memory.\n"
+"[b]Note:[/b] This type is passed by value and not by reference."
+msgstr ""
+
+#: doc/classes/PoolVector3Array.xml:17
+msgid ""
+"Constructs a new [PoolVector3Array]. Optionally, you can pass in a generic "
+"[Array] that will be converted."
+msgstr ""
+
+#: doc/classes/PoolVector3Array.xml:29
+msgid "Appends a [PoolVector3Array] at the end of this array."
+msgstr ""
+
+#: doc/classes/PoolVector3Array.xml:54
+msgid "Inserts a [Vector3] at the end."
+msgstr ""
+
+#: doc/classes/PoolVector3Array.xml:73
+msgid "Changes the [Vector3] at the given index."
+msgstr ""
+
+#: doc/classes/Popup.xml:4
+msgid "Base container control for popups and dialogs."
+msgstr ""
+
+#: doc/classes/Popup.xml:7
+msgid ""
+"Popup is a base [Control] used to show dialogs and popups. It's a subwindow "
+"and modal by default (see [Control]) and has helpers for custom popup "
+"behavior. All popup methods ensure correct placement within the viewport."
+msgstr ""
+
+#: doc/classes/Popup.xml:16
+msgid "Popup (show the control in modal form)."
+msgstr ""
+
+#: doc/classes/Popup.xml:23
+msgid ""
+"Popup (show the control in modal form) in the center of the screen relative "
+"to its current canvas transform, at the current size, or at a size "
+"determined by [code]size[/code]."
+msgstr ""
+
+#: doc/classes/Popup.xml:31
+msgid ""
+"Popup (show the control in modal form) in the center of the screen relative "
+"to the current canvas transform, clamping the size to [code]size[/code], "
+"then ensuring the popup is no larger than the viewport size multiplied by "
+"[code]fallback_ratio[/code]."
+msgstr ""
+
+#: doc/classes/Popup.xml:38
+msgid ""
+"Popup (show the control in modal form) in the center of the screen relative "
+"to the current canvas transform, ensuring the size is never smaller than "
+"[code]minsize[/code]."
+msgstr ""
+
+#: doc/classes/Popup.xml:45
+msgid ""
+"Popup (show the control in modal form) in the center of the screen relative "
+"to the current canvas transform, scaled at a ratio of size of the screen."
+msgstr ""
+
+#: doc/classes/Popup.xml:51
+msgid "Shrink popup to keep to the minimum size of content."
+msgstr ""
+
+#: doc/classes/Popup.xml:57
+msgid ""
+"If [code]true[/code], the popup will not be hidden when a click event occurs "
+"outside of it, or when it receives the [code]ui_cancel[/code] action event.\n"
+"[b]Note:[/b] Enabling this property doesn't affect the Close or Cancel "
+"buttons' behavior in dialogs that inherit from this class. As a workaround, "
+"you can use [method WindowDialog.get_close_button] or [method "
+"ConfirmationDialog.get_cancel] and hide the buttons in question by setting "
+"their [member CanvasItem.visible] property to [code]false[/code]."
+msgstr ""
+
+#: doc/classes/Popup.xml:65
+msgid ""
+"Emitted when a popup is about to be shown. This is often used in [PopupMenu] "
+"to clear the list of options then create a new one according to the current "
+"context."
+msgstr ""
+
+#: doc/classes/Popup.xml:70
+msgid "Emitted when a popup is hidden."
+msgstr ""
+
+#: doc/classes/Popup.xml:76
+msgid "Notification sent right after the popup is shown."
+msgstr ""
+
+#: doc/classes/Popup.xml:79
+msgid "Notification sent right after the popup is hidden."
+msgstr ""
+
+#: doc/classes/PopupDialog.xml:4
+msgid "Base class for popup dialogs."
+msgstr ""
+
+#: doc/classes/PopupDialog.xml:7
+msgid ""
+"PopupDialog is a base class for popup dialogs, along with [WindowDialog]."
+msgstr ""
+
+#: doc/classes/PopupDialog.xml:17
+msgid "Sets a custom [StyleBox] for the panel of the [PopupDialog]."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:4
+msgid "PopupMenu displays a list of options."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:7
+msgid ""
+"[PopupMenu] is a [Control] that displays a list of options. They are popular "
+"in toolbars or context menus."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:18
+msgid ""
+"Adds a new checkable item with text [code]label[/code].\n"
+"An [code]id[/code] can optionally be provided, as well as an accelerator "
+"([code]accel[/code]). If no [code]id[/code] is provided, one will be created "
+"from the index. If no [code]accel[/code] is provided then the default "
+"[code]0[/code] will be assigned to it. See [method get_item_accelerator] for "
+"more info on accelerators.\n"
+"[b]Note:[/b] Checkable items just display a checkmark, but don't have any "
+"built-in checking behavior and must be checked/unchecked manually. See "
+"[method set_item_checked] for more info on how to control it."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:29
+msgid ""
+"Adds a new checkable item and assigns the specified [ShortCut] to it. Sets "
+"the label of the checkbox to the [ShortCut]'s name.\n"
+"An [code]id[/code] can optionally be provided. If no [code]id[/code] is "
+"provided, one will be created from the index.\n"
+"[b]Note:[/b] Checkable items just display a checkmark, but don't have any "
+"built-in checking behavior and must be checked/unchecked manually. See "
+"[method set_item_checked] for more info on how to control it."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:41
+msgid ""
+"Adds a new checkable item with text [code]label[/code] and icon "
+"[code]texture[/code].\n"
+"An [code]id[/code] can optionally be provided, as well as an accelerator "
+"([code]accel[/code]). If no [code]id[/code] is provided, one will be created "
+"from the index. If no [code]accel[/code] is provided then the default "
+"[code]0[/code] will be assigned to it. See [method get_item_accelerator] for "
+"more info on accelerators.\n"
+"[b]Note:[/b] Checkable items just display a checkmark, but don't have any "
+"built-in checking behavior and must be checked/unchecked manually. See "
+"[method set_item_checked] for more info on how to control it."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:53
+msgid ""
+"Adds a new checkable item and assigns the specified [ShortCut] and icon "
+"[code]texture[/code] to it. Sets the label of the checkbox to the "
+"[ShortCut]'s name.\n"
+"An [code]id[/code] can optionally be provided. If no [code]id[/code] is "
+"provided, one will be created from the index.\n"
+"[b]Note:[/b] Checkable items just display a checkmark, but don't have any "
+"built-in checking behavior and must be checked/unchecked manually. See "
+"[method set_item_checked] for more info on how to control it."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:65
+msgid ""
+"Adds a new item with text [code]label[/code] and icon [code]texture[/code].\n"
+"An [code]id[/code] can optionally be provided, as well as an accelerator "
+"([code]accel[/code]). If no [code]id[/code] is provided, one will be created "
+"from the index. If no [code]accel[/code] is provided then the default "
+"[code]0[/code] will be assigned to it. See [method get_item_accelerator] for "
+"more info on accelerators."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:76
+msgid "Same as [method add_icon_check_item], but uses a radio check button."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:86
+msgid ""
+"Same as [method add_icon_check_shortcut], but uses a radio check button."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:96
+msgid ""
+"Adds a new item and assigns the specified [ShortCut] and icon [code]texture[/"
+"code] to it. Sets the label of the checkbox to the [ShortCut]'s name.\n"
+"An [code]id[/code] can optionally be provided. If no [code]id[/code] is "
+"provided, one will be created from the index."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:106
+msgid ""
+"Adds a new item with text [code]label[/code].\n"
+"An [code]id[/code] can optionally be provided, as well as an accelerator "
+"([code]accel[/code]). If no [code]id[/code] is provided, one will be created "
+"from the index. If no [code]accel[/code] is provided then the default "
+"[code]0[/code] will be assigned to it. See [method get_item_accelerator] for "
+"more info on accelerators."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:118
+msgid ""
+"Adds a new multistate item with text [code]label[/code].\n"
+"Contrarily to normal binary items, multistate items can have more than two "
+"states, as defined by [code]max_states[/code]. Each press or activate of the "
+"item will increase the state by one. The default value is defined by "
+"[code]default_state[/code].\n"
+"An [code]id[/code] can optionally be provided, as well as an accelerator "
+"([code]accel[/code]). If no [code]id[/code] is provided, one will be created "
+"from the index. If no [code]accel[/code] is provided then the default "
+"[code]0[/code] will be assigned to it. See [method get_item_accelerator] for "
+"more info on accelerators."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:129
+msgid ""
+"Adds a new radio check button with text [code]label[/code].\n"
+"An [code]id[/code] can optionally be provided, as well as an accelerator "
+"([code]accel[/code]). If no [code]id[/code] is provided, one will be created "
+"from the index. If no [code]accel[/code] is provided then the default "
+"[code]0[/code] will be assigned to it. See [method get_item_accelerator] for "
+"more info on accelerators.\n"
+"[b]Note:[/b] Checkable items just display a checkmark, but don't have any "
+"built-in checking behavior and must be checked/unchecked manually. See "
+"[method set_item_checked] for more info on how to control it."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:140
+msgid ""
+"Adds a new radio check button and assigns a [ShortCut] to it. Sets the label "
+"of the checkbox to the [ShortCut]'s name.\n"
+"An [code]id[/code] can optionally be provided. If no [code]id[/code] is "
+"provided, one will be created from the index.\n"
+"[b]Note:[/b] Checkable items just display a checkmark, but don't have any "
+"built-in checking behavior and must be checked/unchecked manually. See "
+"[method set_item_checked] for more info on how to control it."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:150
+msgid ""
+"Adds a separator between items. Separators also occupy an index, which you "
+"can set by using the [code]id[/code] parameter.\n"
+"A [code]label[/code] can optionally be provided, which will appear at the "
+"center of the separator."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:160
+msgid ""
+"Adds a [ShortCut].\n"
+"An [code]id[/code] can optionally be provided. If no [code]id[/code] is "
+"provided, one will be created from the index."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:170
+msgid ""
+"Adds an item that will act as a submenu of the parent [PopupMenu] node when "
+"clicked. The [code]submenu[/code] argument is the name of the child "
+"[PopupMenu] node that will be shown when the item is clicked.\n"
+"An [code]id[/code] can optionally be provided. If no [code]id[/code] is "
+"provided, one will be created from the index."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:177
+msgid "Removes all items from the [PopupMenu]."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:183
+msgid ""
+"Returns the index of the currently focused item. Returns [code]-1[/code] if "
+"no item is focused."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:190
+msgid ""
+"Returns the accelerator of the item at index [code]idx[/code]. Accelerators "
+"are special combinations of keys that activate the item, no matter which "
+"control is focused."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:196
+msgid "Returns the number of items in the [PopupMenu]."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:210
+msgid ""
+"Returns the id of the item at index [code]idx[/code]. [code]id[/code] can be "
+"manually assigned, while index can not."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:217
+msgid ""
+"Returns the index of the item containing the specified [code]id[/code]. "
+"Index is automatically assigned to each item by the engine. Index can not be "
+"set manually."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:224
+msgid ""
+"Returns the metadata of the specified item, which might be of any type. You "
+"can set it with [method set_item_metadata], which provides a simple way of "
+"assigning context data to items."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:231
+msgid ""
+"Returns the [ShortCut] associated with the specified [code]idx[/code] item."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:238
+msgid ""
+"Returns the submenu name of the item at index [code]idx[/code]. See [method "
+"add_submenu_item] for more info on how to add a submenu."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:252
+msgid ""
+"Returns the tooltip associated with the specified index index [code]idx[/"
+"code]."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:258
+msgid ""
+"Returns [code]true[/code] if the popup will be hidden when the window loses "
+"focus or not."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:265
+msgid ""
+"Returns [code]true[/code] if the item at index [code]idx[/code] is checkable "
+"in some way, i.e. if it has a checkbox or radio button.\n"
+"[b]Note:[/b] Checkable items just display a checkmark or radio button, but "
+"don't have any built-in checking behavior and must be checked/unchecked "
+"manually."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:273
+msgid ""
+"Returns [code]true[/code] if the item at index [code]idx[/code] is checked."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:280
+msgid ""
+"Returns [code]true[/code] if the item at index [code]idx[/code] is disabled. "
+"When it is disabled it can't be selected, or its action invoked.\n"
+"See [method set_item_disabled] for more info on how to disable an item."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:288
+msgid ""
+"Returns [code]true[/code] if the item at index [code]idx[/code] has radio "
+"button-style checkability.\n"
+"[b]Note:[/b] This is purely cosmetic; you must add the logic for checking/"
+"unchecking items in radio groups."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:296
+msgid ""
+"Returns [code]true[/code] if the item is a separator. If it is, it will be "
+"displayed as a line. See [method add_separator] for more info on how to add "
+"a separator."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:303
+msgid "Returns [code]true[/code] if the specified item's shortcut is disabled."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:310
+msgid ""
+"Removes the item at index [code]idx[/code] from the menu.\n"
+"[b]Note:[/b] The indices of items after the removed item will be shifted by "
+"one."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:318
+msgid "Hides the [PopupMenu] when the window loses focus."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:326
+msgid ""
+"Sets the accelerator of the item at index [code]idx[/code]. Accelerators are "
+"special combinations of keys that activate the item, no matter which control "
+"is focused."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:334
+msgid ""
+"Sets whether the item at index [code]idx[/code] has a checkbox. If "
+"[code]false[/code], sets the type of the item to plain text.\n"
+"[b]Note:[/b] Checkable items just display a checkmark, but don't have any "
+"built-in checking behavior and must be checked/unchecked manually."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:343
+msgid ""
+"Sets the type of the item at the specified index [code]idx[/code] to radio "
+"button. If [code]false[/code], sets the type of the item to plain text."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:351
+msgid ""
+"Mark the item at index [code]idx[/code] as a separator, which means that it "
+"would be displayed as a line. If [code]false[/code], sets the type of the "
+"item to plain text."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:359
+msgid "Sets the checkstate status of the item at index [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:367
+msgid ""
+"Enables/disables the item at index [code]idx[/code]. When it is disabled, it "
+"can't be selected and its action can't be invoked."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:375
+msgid "Replaces the [Texture] icon of the specified [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:383
+msgid "Sets the [code]id[/code] of the item at index [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:391
+msgid ""
+"Sets the metadata of an item, which may be of any type. You can later get it "
+"with [method get_item_metadata], which provides a simple way of assigning "
+"context data to items."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:399
+msgid ""
+"Sets the state of a multistate item. See [method add_multistate_item] for "
+"details."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:408
+msgid "Sets a [ShortCut] for the specified item [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:416
+msgid "Disables the [ShortCut] of the specified index [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:424
+msgid ""
+"Sets the submenu of the item at index [code]idx[/code]. The submenu is the "
+"name of a child [PopupMenu] node that would be shown when the item is "
+"clicked."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:440
+msgid ""
+"Sets the [String] tooltip of the item at the specified index [code]idx[/"
+"code]."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:447
+msgid ""
+"Toggles the check state of the item of the specified index [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:454
+msgid ""
+"Cycle to the next state of a multistate item. See [method "
+"add_multistate_item] for details."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:460
+msgid "If [code]true[/code], allows navigating [PopupMenu] with letter keys."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:464
+msgid ""
+"If [code]true[/code], hides the [PopupMenu] when a checkbox or radio button "
+"is selected."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:467
+msgid "If [code]true[/code], hides the [PopupMenu] when an item is selected."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:470
+msgid ""
+"If [code]true[/code], hides the [PopupMenu] when a state item is selected."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:473
+msgid ""
+"Sets the delay time in seconds for the submenu item to popup on mouse "
+"hovering. If the popup menu is added as a child of another (acting as a "
+"submenu), it will inherit the delay time of the parent menu item."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:480
+msgid ""
+"Emitted when user navigated to an item of some [code]id[/code] using "
+"[code]ui_up[/code] or [code]ui_down[/code] action."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:486
+msgid ""
+"Emitted when an item of some [code]id[/code] is pressed or its accelerator "
+"is activated."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:492
+msgid ""
+"Emitted when an item of some [code]index[/code] is pressed or its "
+"accelerator is activated."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:500
+msgid "[Texture] icon for the checked checkbox items."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:503
+msgid "[Font] used for the menu items."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:506
+msgid "The default text [Color] for menu items' names."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:509
+msgid ""
+"The text [Color] used for shortcuts and accelerators that show next to the "
+"menu item name when defined. See [method get_item_accelerator] for more info "
+"on accelerators."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:512
+msgid "[Color] used for disabled menu items' text."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:515
+msgid "[Color] used for the hovered text."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:518
+msgid "[Color] used for labeled separators' text. See [method add_separator]."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:521
+msgid "[StyleBox] displayed when the [PopupMenu] item is hovered."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:524
+msgid ""
+"The horizontal space between the item's name and the shortcut text/submenu "
+"arrow."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:527
+msgid ""
+"[StyleBox] for the left side of labeled separator. See [method "
+"add_separator]."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:530
+msgid ""
+"[StyleBox] for the right side of labeled separator. See [method "
+"add_separator]."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:533
+msgid "Default [StyleBox] of the [PopupMenu] items."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:536
+msgid "[StyleBox] used when the [PopupMenu] item is disabled."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:539
+msgid "[Texture] icon for the checked radio button items."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:542
+msgid "[Texture] icon for the unchecked radio button items."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:545
+msgid "[StyleBox] used for the separators. See [method add_separator]."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:548
+msgid "[Texture] icon for the submenu arrow."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:551
+msgid "[Texture] icon for the unchecked checkbox items."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:554
+msgid "The vertical space between each menu item."
+msgstr ""
+
+#: doc/classes/PopupPanel.xml:4
+msgid "Class for displaying popups with a panel background."
+msgstr ""
+
+#: doc/classes/PopupPanel.xml:7
+msgid ""
+"Class for displaying popups with a panel background. In some cases it might "
+"be simpler to use than [Popup], since it provides a configurable background. "
+"If you are making windows, better check [WindowDialog]."
+msgstr ""
+
+#: doc/classes/PopupPanel.xml:17
+msgid "The background panel style of this [PopupPanel]."
+msgstr ""
+
+#: doc/classes/Portal.xml:4
+msgid "Portal nodes are used to enable visibility between [Room]s."
+msgstr ""
+
+#: doc/classes/Portal.xml:7
+msgid ""
+"[Portal]s are a special type of [MeshInstance] that allow the portal culling "
+"system to 'see' from one room to the next. They often correspond to doors "
+"and windows in level geometry. By only allowing [Camera]s to see through "
+"portals, this allows the system to cull out all the objects in rooms that "
+"cannot be seen through portals. This is a form of [b]occlusion culling[/b], "
+"and can greatly increase performance.\n"
+"There are some limitations to the form of portals:\n"
+"They must be single sided convex polygons, and usually you would orientate "
+"their front faces [b]outward[/b] from the [Room] they are placed in. The "
+"vertices should be positioned on a single plane (although their positioning "
+"does not have to be perfect).\n"
+"There is no need to place an opposite portal in an adjacent room, links are "
+"made two-way automatically."
+msgstr ""
+
+#: doc/classes/Portal.xml:20 doc/classes/Room.xml:21
+msgid "Sets individual points. Primarily for use by the editor."
+msgstr ""
+
+#: doc/classes/Portal.xml:26
+msgid ""
+"This is a shortcut for setting the linked [Room] in the name of the [Portal] "
+"(the name is used during conversion)."
+msgstr ""
+
+#: doc/classes/Portal.xml:29
+msgid ""
+"The points defining the shape of the [Portal] polygon (which should be "
+"convex).\n"
+"These are defined in 2D, with [code]0,0[/code] being the origin of the "
+"[Portal] node's [member Spatial.global_transform].\n"
+"[b]Note:[/b] These raw points are sanitized for winding order internally."
+msgstr ""
+
+#: doc/classes/Portal.xml:34
+msgid ""
+"Visibility through [Portal]s can be turned on and off at runtime - this is "
+"useful for having closable doors."
+msgstr ""
+
+#: doc/classes/Portal.xml:37
+msgid ""
+"Some objects are so big that they may be present in more than one [Room] "
+"('sprawling'). As we often don't want objects that *just* breach the edges "
+"to be assigned to neighbouring rooms, you can assign an extra margin through "
+"the [Portal] to allow objects to breach without sprawling."
+msgstr ""
+
+#: doc/classes/Portal.xml:40
+msgid ""
+"Portals default to being two way - see through in both directions, however "
+"you can make them one way, visible from the source room only."
+msgstr ""
+
+#: doc/classes/Portal.xml:43
+msgid ""
+"In most cases you will want to use the default [Portal] margin in your "
+"portals (this is set in the [RoomManager]).\n"
+"If you want to override this default, set this value to [code]false[/code], "
+"and the local [member portal_margin] will take effect."
+msgstr ""
+
+#: doc/classes/Position2D.xml:4
+msgid "Generic 2D position hint for editing."
+msgstr ""
+
+#: doc/classes/Position2D.xml:7
+msgid ""
+"Generic 2D position hint for editing. It's just like a plain [Node2D], but "
+"it displays as a cross in the 2D editor at all times. You can set cross' "
+"visual size by using the gizmo in the 2D editor while the node is selected."
+msgstr ""
+
+#: doc/classes/Position3D.xml:4
+msgid "Generic 3D position hint for editing."
+msgstr ""
+
+#: doc/classes/Position3D.xml:7
+msgid ""
+"Generic 3D position hint for editing. It's just like a plain [Spatial], but "
+"it displays as a cross in the 3D editor at all times."
+msgstr ""
+
+#: doc/classes/PrimitiveMesh.xml:4
+msgid ""
+"Base class for all primitive meshes. Handles applying a [Material] to a "
+"primitive mesh."
+msgstr ""
+
+#: doc/classes/PrimitiveMesh.xml:7
+msgid ""
+"Base class for all primitive meshes. Handles applying a [Material] to a "
+"primitive mesh. Examples include [CapsuleMesh], [CubeMesh], [CylinderMesh], "
+"[PlaneMesh], [PrismMesh], [QuadMesh], and [SphereMesh]."
+msgstr ""
+
+#: doc/classes/PrimitiveMesh.xml:15
+msgid ""
+"Returns mesh arrays used to constitute surface of [Mesh]. The result can be "
+"passed to [method ArrayMesh.add_surface_from_arrays] to create a new "
+"surface. For example:\n"
+"[codeblock]\n"
+"var c := CylinderMesh.new()\n"
+"var arr_mesh := ArrayMesh.new()\n"
+"arr_mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, c."
+"get_mesh_arrays())\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/PrimitiveMesh.xml:29
+msgid ""
+"If set, the order of the vertices in each triangle are reversed resulting in "
+"the backside of the mesh being drawn.\n"
+"This gives the same result as using [constant SpatialMaterial.CULL_BACK] in "
+"[member SpatialMaterial.params_cull_mode]."
+msgstr ""
+
+#: doc/classes/PrimitiveMesh.xml:33
+msgid "The current [Material] of the primitive mesh."
+msgstr ""
+
+#: doc/classes/PrismMesh.xml:4 doc/classes/PrismMesh.xml:7
+msgid "Class representing a prism-shaped [PrimitiveMesh]."
+msgstr ""
+
+#: doc/classes/PrismMesh.xml:15
+msgid ""
+"Displacement of the upper edge along the X axis. 0.0 positions edge straight "
+"above the bottom-left edge."
+msgstr ""
+
+#: doc/classes/PrismMesh.xml:18
+msgid "Size of the prism."
+msgstr ""
+
+#: doc/classes/PrismMesh.xml:21
+msgid "Number of added edge loops along the Z axis."
+msgstr ""
+
+#: doc/classes/PrismMesh.xml:24
+msgid "Number of added edge loops along the Y axis."
+msgstr ""
+
+#: doc/classes/PrismMesh.xml:27
+msgid "Number of added edge loops along the X axis."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:4
+msgid ""
+"Type of [Sky] that is generated procedurally based on user input parameters."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:7
+msgid ""
+"ProceduralSky provides a way to create an effective background quickly by "
+"defining procedural parameters for the sun, the sky and the ground. The sky "
+"and ground are very similar, they are defined by a color at the horizon, "
+"another color, and finally an easing curve to interpolate between these two "
+"colors. Similarly, the sun is described by a position in the sky, a color, "
+"and an easing curve. However, the sun also defines a minimum and maximum "
+"angle, these two values define at what distance the easing curve begins and "
+"ends from the sun, and thus end up defining the size of the sun in the sky.\n"
+"The ProceduralSky is updated on the CPU after the parameters change. It is "
+"stored in a texture and then displayed as a background in the scene. This "
+"makes it relatively unsuitable for real-time updates during gameplay. "
+"However, with a small enough texture size, it can still be updated "
+"relatively frequently, as it is updated on a background thread when multi-"
+"threading is available."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:16
+msgid "Color of the ground at the bottom."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:19
+msgid ""
+"How quickly the [member ground_horizon_color] fades into the [member "
+"ground_bottom_color]."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:22
+msgid "Amount of energy contribution from the ground."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:25
+msgid "Color of the ground at the horizon."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:28
+msgid ""
+"How quickly the [member sky_horizon_color] fades into the [member "
+"sky_top_color]."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:31
+msgid "Amount of energy contribution from the sky."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:34
+msgid "Color of the sky at the horizon."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:37
+msgid "Color of the sky at the top."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:40
+msgid "Distance from center of sun where it fades out completely."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:43
+msgid "Distance from sun where it goes from solid to starting to fade."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:46
+msgid "The sun's color."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:49
+msgid ""
+"How quickly the sun fades away between [member sun_angle_min] and [member "
+"sun_angle_max]."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:52
+msgid "Amount of energy contribution from the sun."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:55
+msgid "The sun's height using polar coordinates."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:58
+msgid "The direction of the sun using polar coordinates."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:61
+msgid ""
+"Size of [Texture] that the ProceduralSky will generate. The size is set "
+"using [enum TextureSize]."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:66
+msgid "Sky texture will be 256x128."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:69
+msgid "Sky texture will be 512x256."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:72
+msgid "Sky texture will be 1024x512. This is the default size."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:75
+msgid "Sky texture will be 2048x1024."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:78
+msgid "Sky texture will be 4096x2048."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:81
+msgid "Represents the size of the [enum TextureSize] enum."
+msgstr ""
+
+#: doc/classes/ProgressBar.xml:4
+msgid "General-purpose progress bar."
+msgstr ""
+
+#: doc/classes/ProgressBar.xml:7
+msgid "General-purpose progress bar. Shows fill percentage from right to left."
+msgstr ""
+
+#: doc/classes/ProgressBar.xml:15
+msgid "If [code]true[/code], the fill percentage is displayed on the bar."
+msgstr ""
+
+#: doc/classes/ProgressBar.xml:24
+msgid "The style of the background."
+msgstr ""
+
+#: doc/classes/ProgressBar.xml:27
+msgid "The style of the progress (i.e. the part that fills the bar)."
+msgstr ""
+
+#: doc/classes/ProgressBar.xml:30
+msgid ""
+"Font used to draw the fill percentage if [member percent_visible] is "
+"[code]true[/code]."
+msgstr ""
+
+#: doc/classes/ProgressBar.xml:33
+msgid "The color of the text."
+msgstr ""
+
+#: doc/classes/ProgressBar.xml:36
+msgid "The color of the text's shadow."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:4
+msgid "Contains global variables accessible from everywhere."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:7
+msgid ""
+"Contains global variables accessible from everywhere. Use [method "
+"get_setting], [method set_setting] or [method has_setting] to access them. "
+"Variables stored in [code]project.godot[/code] are also loaded into "
+"ProjectSettings, making this object very useful for reading custom game "
+"configuration options.\n"
+"When naming a Project Settings property, use the full path to the setting "
+"including the category. For example, [code]\"application/config/name\"[/"
+"code] for the project name. Category and property names can be viewed in the "
+"Project Settings dialog.\n"
+"[b]Feature tags:[/b] Project settings can be overridden for specific "
+"platforms and configurations (debug, release, ...) using [url=https://docs."
+"godotengine.org/en/latest/tutorials/export/feature_tags.html]feature tags[/"
+"url].\n"
+"[b]Overriding:[/b] Any project setting can be overridden by creating a file "
+"named [code]override.cfg[/code] in the project's root directory. This can "
+"also be used in exported projects by placing this file in the same directory "
+"as the project binary. Overriding will still take the base project "
+"settings' [url=https://docs.godotengine.org/en/latest/tutorials/export/"
+"feature_tags.html]feature tags[/url] in account. Therefore, make sure to "
+"[i]also[/i] override the setting with the desired feature tags if you want "
+"them to override base project settings on all platforms and configurations."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:22
+msgid ""
+"Adds a custom property info to a property. The dictionary must contain:\n"
+"- [code]name[/code]: [String] (the property's name)\n"
+"- [code]type[/code]: [int] (see [enum Variant.Type])\n"
+"- optionally [code]hint[/code]: [int] (see [enum PropertyHint]) and "
+"[code]hint_string[/code]: [String]\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"ProjectSettings.set(\"category/property_name\", 0)\n"
+"\n"
+"var property_info = {\n"
+" \"name\": \"category/property_name\",\n"
+" \"type\": TYPE_INT,\n"
+" \"hint\": PROPERTY_HINT_ENUM,\n"
+" \"hint_string\": \"one,two,three\"\n"
+"}\n"
+"\n"
+"ProjectSettings.add_property_info(property_info)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:45
+msgid "Clears the whole configuration (not recommended, may break things)."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:52
+msgid ""
+"Returns the order of a configuration value (influences when saved to the "
+"config file)."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:59
+msgid ""
+"Returns the value of a setting.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"print(ProjectSettings.get_setting(\"application/config/name\"))\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:70
+msgid ""
+"Returns the absolute, native OS path corresponding to the localized "
+"[code]path[/code] (starting with [code]res://[/code] or [code]user://[/"
+"code]). The returned path will vary depending on the operating system and "
+"user preferences. See [url=https://docs.godotengine.org/en/3.4/tutorials/io/"
+"data_paths.html]File paths in Godot projects[/url] to see what those paths "
+"convert to. See also [method localize_path].\n"
+"[b]Note:[/b] [method globalize_path] with [code]res://[/code] will not work "
+"in an exported project. Instead, prepend the executable's base directory to "
+"the path when running from an exported project:\n"
+"[codeblock]\n"
+"var path = \"\"\n"
+"if OS.has_feature(\"editor\"):\n"
+" # Running from an editor binary.\n"
+" # `path` will contain the absolute path to `hello.txt` located in the "
+"project root.\n"
+" path = ProjectSettings.globalize_path(\"res://hello.txt\")\n"
+"else:\n"
+" # Running from an exported project.\n"
+" # `path` will contain the absolute path to `hello.txt` next to the "
+"executable.\n"
+" # This is *not* identical to using `ProjectSettings.globalize_path()` "
+"with a `res://` path,\n"
+" # but is close enough in spirit.\n"
+" path = OS.get_executable_path().get_base_dir().plus_file(\"hello.txt\")\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:91
+msgid "Returns [code]true[/code] if a configuration value is present."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:100
+msgid ""
+"Loads the contents of the .pck or .zip file specified by [code]pack[/code] "
+"into the resource filesystem ([code]res://[/code]). Returns [code]true[/"
+"code] on success.\n"
+"[b]Note:[/b] If a file from [code]pack[/code] shares the same path as a file "
+"already in the resource filesystem, any attempts to load that file will use "
+"the file from [code]pack[/code] unless [code]replace_files[/code] is set to "
+"[code]false[/code].\n"
+"[b]Note:[/b] The optional [code]offset[/code] parameter can be used to "
+"specify the offset in bytes to the start of the resource pack. This is only "
+"supported for .pck files."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:109
+msgid ""
+"Returns the localized path (starting with [code]res://[/code]) corresponding "
+"to the absolute, native OS [code]path[/code]. See also [method "
+"globalize_path]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:116
+msgid ""
+"Returns [code]true[/code] if the specified property exists and its initial "
+"value differs from the current value."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:123
+msgid ""
+"Returns the specified property's initial value. Returns [code]null[/code] if "
+"the property does not exist."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:129
+msgid ""
+"Saves the configuration to the [code]project.godot[/code] file.\n"
+"[b]Note:[/b] This method is intended to be used by editor plugins, as "
+"modified [ProjectSettings] can't be loaded back in the running app. If you "
+"want to change project settings in exported projects, use [method "
+"save_custom] to save [code]override.cfg[/code] file."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:137
+msgid ""
+"Saves the configuration to a custom file. The file extension must be [code]."
+"godot[/code] (to save in text-based [ConfigFile] format) or [code].binary[/"
+"code] (to save in binary format). You can also save [code]override.cfg[/"
+"code] file, which is also text, but can be used in exported projects unlike "
+"other formats."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:145
+msgid ""
+"Sets the specified property's initial value. This is the value the property "
+"reverts to."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:153
+msgid ""
+"Sets the order of a configuration value (influences when saved to the config "
+"file)."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:161
+msgid ""
+"Sets the value of a setting.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"ProjectSettings.set_setting(\"application/config/name\", \"Example\")\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:171
+msgid ""
+"Comma-separated list of custom Android modules (which must have been built "
+"in the Android export templates) using their Java package path, e.g. "
+"[code]\"org/godotengine/godot/MyCustomSingleton,com/example/foo/"
+"FrenchFriesFactory\"[/code].\n"
+"[b]Note:[/b] Since Godot 3.2.2, the [code]org/godotengine/godot/"
+"GodotPaymentV3[/code] module was deprecated and replaced by the "
+"[code]GodotPayment[/code] plugin which should be enabled in the Android "
+"export preset under [code]Plugins[/code] section. The singleton to access in "
+"code was also renamed to [code]GodotPayment[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:175
+msgid "Background color for the boot splash."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:178
+msgid ""
+"If [code]true[/code], scale the boot splash image to the full window length "
+"when engine starts. If [code]false[/code], the engine will leave it at the "
+"default pixel size."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:181
+msgid "Path to an image used as the boot splash."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:184
+msgid ""
+"If [code]true[/code], applies linear filtering when scaling the image "
+"(recommended for high resolution artwork). If [code]false[/code], uses "
+"nearest-neighbor interpolation (recommended for pixel art)."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:187
+msgid ""
+"This user directory is used for storing persistent data ([code]user://[/"
+"code] filesystem). If left empty, [code]user://[/code] resolves to a project-"
+"specific folder in Godot's own configuration folder (see [method OS."
+"get_user_data_dir]). If a custom directory name is defined, this name will "
+"be used instead and appended to the system-specific user data directory "
+"(same parent folder as the Godot configuration folder documented in [method "
+"OS.get_user_data_dir]).\n"
+"The [member application/config/use_custom_user_dir] setting must be enabled "
+"for this to take effect."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:191
+msgid ""
+"The project's description, displayed as a tooltip in the Project Manager "
+"when hovering the project."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:194
+msgid ""
+"Icon used for the project, set when project loads. Exporters will also use "
+"this icon when possible."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:197
+msgid ""
+"Icon set in [code].icns[/code] format used on macOS to set the game's icon. "
+"This is done automatically on start by calling [method OS.set_native_icon]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:200
+msgid ""
+"The project's name. It is used both by the Project Manager and by exporters. "
+"The project name can be translated by translating its value in localization "
+"files. The window title will be set to match the project name automatically "
+"on startup.\n"
+"[b]Note:[/b] Changing this value will also change the user data folder's "
+"path if [member application/config/use_custom_user_dir] is [code]false[/"
+"code]. After renaming the project, you will no longer be able to access "
+"existing data in [code]user://[/code] unless you rename the old folder to "
+"match the new project name. See [url=https://docs.godotengine.org/en/3.4/"
+"tutorials/io/data_paths.html]Data paths[/url] in the documentation for more "
+"information."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:204
+msgid ""
+"Specifies a file to override project settings. For example: [code]user://"
+"custom_settings.cfg[/code]. See \"Overriding\" in the [ProjectSettings] "
+"class description at the top for more information.\n"
+"[b]Note:[/b] Regardless of this setting's value, [code]res://override.cfg[/"
+"code] will still be read to override the project settings."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:208
+msgid ""
+"If [code]true[/code], the project will save user data to its own user "
+"directory (see [member application/config/custom_user_dir_name]). This "
+"setting is only effective on desktop platforms. A name must be set in the "
+"[member application/config/custom_user_dir_name] setting for this to take "
+"effect. If [code]false[/code], the project will save user data to [code](OS "
+"user data directory)/Godot/app_userdata/(project name)[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:211
+msgid ""
+"If [code]true[/code], the project will use a hidden directory ([code]."
+"import[/code]) for storing project-specific data (metadata, shader cache, "
+"etc.).\n"
+"If [code]false[/code], a non-hidden directory ([code]import[/code]) will be "
+"used instead.\n"
+"[b]Note:[/b] Restart the application after changing this setting.\n"
+"[b]Note:[/b] Changing this value can help on platforms or with third-party "
+"tools where hidden directory patterns are disallowed. Only modify this "
+"setting if you know that your environment requires it, as changing the "
+"default can impact compatibility with some external tools or plugins which "
+"expect the default [code].import[/code] folder."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:217
+msgid ""
+"Icon set in [code].ico[/code] format used on Windows to set the game's icon. "
+"This is done automatically on start by calling [method OS.set_native_icon]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:220
+msgid ""
+"Time samples for frame deltas are subject to random variation introduced by "
+"the platform, even when frames are displayed at regular intervals thanks to "
+"V-Sync. This can lead to jitter. Delta smoothing can often give a better "
+"result by filtering the input deltas to correct for minor fluctuations from "
+"the refresh rate.\n"
+"[b]Note:[/b] Delta smoothing is only attempted when [member display/window/"
+"vsync/use_vsync] is switched on, as it does not work well without V-Sync.\n"
+"It may take several seconds at a stable frame rate before the smoothing is "
+"initially activated. It will only be active on machines where performance is "
+"adequate to render frames at the refresh rate."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:225
+msgid ""
+"[b]Experimental.[/b] Shifts the measurement of delta time for each frame to "
+"just after the drawing has taken place. This may lead to more consistent "
+"deltas and a reduction in frame stutters."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:228
+msgid ""
+"If [code]true[/code], disables printing to standard error. If [code]true[/"
+"code], this also hides error and warning messages printed by [method "
+"@GDScript.push_error] and [method @GDScript.push_warning]. See also [member "
+"application/run/disable_stdout].\n"
+"Changes to this setting will only be applied upon restarting the application."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:232
+msgid ""
+"If [code]true[/code], disables printing to standard output. This is "
+"equivalent to starting the editor or project with the [code]--quiet[/code] "
+"command line argument. See also [member application/run/disable_stderr].\n"
+"Changes to this setting will only be applied upon restarting the application."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:236
+msgid ""
+"If [code]true[/code], flushes the standard output stream every time a line "
+"is printed. This affects both terminal logging and file logging.\n"
+"When running a project, this setting must be enabled if you want logs to be "
+"collected by service managers such as systemd/journalctl. This setting is "
+"disabled by default on release builds, since flushing on every printed line "
+"will negatively affect performance if lots of lines are printed in a rapid "
+"succession. Also, if this setting is enabled, logged files will still be "
+"written successfully if the application crashes or is otherwise killed by "
+"the user (without being closed \"normally\").\n"
+"[b]Note:[/b] Regardless of this setting, the standard error stream "
+"([code]stderr[/code]) is always flushed when a line is printed to it.\n"
+"Changes to this setting will only be applied upon restarting the application."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:242
+msgid ""
+"Debug build override for [member application/run/flush_stdout_on_print], as "
+"performance is less important during debugging.\n"
+"Changes to this setting will only be applied upon restarting the application."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:246
+msgid ""
+"Forces a delay between frames in the main loop (in milliseconds). This may "
+"be useful if you plan to disable vertical synchronization."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:249
+msgid ""
+"If [code]true[/code], enables low-processor usage mode. This setting only "
+"works on desktop platforms. The screen is not redrawn if nothing changes "
+"visually. This is meant for writing applications and editors, but is pretty "
+"useless (and can hurt performance) in most games."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:252
+msgid ""
+"Amount of sleeping between frames when the low-processor usage mode is "
+"enabled (in microseconds). Higher values will result in lower CPU usage."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:255
+msgid "Path to the main scene file that will be loaded when the project runs."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:258 doc/classes/ProjectSettings.xml:261
+msgid ""
+"Audio buses will disable automatically when sound goes below a given dB "
+"threshold for a given time. This saves CPU as effects assigned to that bus "
+"will no longer do any processing."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:264
+msgid ""
+"Default [AudioBusLayout] resource file to use in the project, unless "
+"overridden by the scene."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:267
+msgid ""
+"Specifies the audio driver to use. This setting is platform-dependent as "
+"each platform supports different audio drivers. If left empty, the default "
+"audio driver will be used."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:270
+msgid ""
+"If [code]true[/code], microphone input will be allowed. This requires "
+"appropriate permissions to be set when exporting to Android or iOS."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:273
+msgid ""
+"The mixing rate used for audio (in Hz). In general, it's better to not touch "
+"this and leave it to the host operating system."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:276
+msgid ""
+"Safer override for [member audio/mix_rate] in the Web platform. Here "
+"[code]0[/code] means \"let the browser choose\" (since some browsers do not "
+"like forcing the mix rate)."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:279
+msgid ""
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:284
+msgid ""
+"Safer override for [member audio/output_latency] in the Web platform, to "
+"avoid audio issues especially on mobile devices."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:287
+msgid ""
+"Setting to hardcode audio delay when playing video. Best to leave this "
+"untouched unless you know what you are doing."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:290
+msgid ""
+"The default compression level for gzip. Affects compressed scenes and "
+"resources. Higher levels result in smaller files at the cost of compression "
+"speed. Decompression speed is mostly unaffected by the compression level. "
+"[code]-1[/code] uses the default gzip compression level, which is identical "
+"to [code]6[/code] but could change in the future due to underlying zlib "
+"updates."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:293
+msgid ""
+"The default compression level for Zlib. Affects compressed scenes and "
+"resources. Higher levels result in smaller files at the cost of compression "
+"speed. Decompression speed is mostly unaffected by the compression level. "
+"[code]-1[/code] uses the default gzip compression level, which is identical "
+"to [code]6[/code] but could change in the future due to underlying zlib "
+"updates."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:296
+msgid ""
+"The default compression level for Zstandard. Affects compressed scenes and "
+"resources. Higher levels result in smaller files at the cost of compression "
+"speed. Decompression speed is mostly unaffected by the compression level."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:299
+msgid ""
+"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
+"distance matching[/url] in Zstandard."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:302
+msgid ""
+"Largest size limit (in power of 2) allowed when compressing using long-"
+"distance matching with Zstandard. Higher values can result in better "
+"compression, but will require more memory when compressing and decompressing."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:305
+msgid ""
+"If [code]true[/code], displays getters and setters in autocompletion results "
+"in the script editor. This setting is meant to be used when porting old "
+"projects (Godot 2), as using member variables is the preferred style from "
+"Godot 3 onwards."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:308
+msgid ""
+"If [code]true[/code], enables warnings when a constant is used as a function."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:311
+msgid ""
+"If [code]true[/code], enables warnings when deprecated keywords such as "
+"[code]slave[/code] are used."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:314
+msgid ""
+"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
+"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
+"GDScript warnings."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:317
+msgid ""
+"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
+"not generate warnings."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:320
+msgid ""
+"If [code]true[/code], enables warnings when a function is declared with the "
+"same name as a constant."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:323
+msgid ""
+"If [code]true[/code], enables warnings when a function is declared with the "
+"same name as a variable. This will turn into an error in a future version "
+"when first-class functions become supported in GDScript."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:326
+msgid ""
+"If [code]true[/code], enables warnings when a function assigned to a "
+"variable may yield and return a function state instead of a value."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:329
+msgid ""
+"If [code]true[/code], enables warnings when using a function as if it was a "
+"property."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:332
+msgid ""
+"If [code]true[/code], enables warnings when a ternary operator may emit "
+"values with incompatible types."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:335
+msgid ""
+"If [code]true[/code], enables warnings when dividing an integer by another "
+"integer (the decimal part will be discarded)."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:338
+msgid ""
+"If [code]true[/code], enables warnings when passing a floating-point value "
+"to a function that expects an integer (it will be converted and lose "
+"precision)."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:341
+msgid ""
+"If [code]true[/code], enables warnings when using a property as if it was a "
+"function."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:344
+msgid ""
+"If [code]true[/code], enables warnings when calling a function without using "
+"its return value (by assigning it to a variable or using it as a function "
+"argument). Such return values are sometimes used to denote possible errors "
+"using the [enum Error] enum."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:347
+msgid ""
+"If [code]true[/code], enables warnings when defining a local or subclass "
+"member variable that would shadow a variable at an upper level (such as a "
+"member variable)."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:350
+msgid ""
+"If [code]true[/code], enables warnings when calling an expression that has "
+"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
+"statement."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:353
+msgid ""
+"If [code]true[/code], enables warnings when calling a ternary expression "
+"that has no effect on the surrounding code, such as writing [code]42 if "
+"active else 0[/code] as a statement."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:356
+msgid ""
+"If [code]true[/code], all warnings will be reported as if they were errors."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:359
+msgid ""
+"If [code]true[/code], enables warnings when using a variable that wasn't "
+"previously assigned."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:362
+msgid ""
+"If [code]true[/code], enables warnings when assigning a variable using an "
+"assignment operator like [code]+=[/code] if the variable wasn't previously "
+"assigned."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:365
+msgid ""
+"If [code]true[/code], enables warnings when unreachable code is detected "
+"(such as after a [code]return[/code] statement that will always be executed)."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:368
+msgid ""
+"If [code]true[/code], enables warnings when using an expression whose type "
+"may not be compatible with the function parameter expected."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:371
+msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:374
+msgid ""
+"If [code]true[/code], enables warnings when calling a method whose presence "
+"is not guaranteed at compile-time in the class."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:377
+msgid ""
+"If [code]true[/code], enables warnings when accessing a property whose "
+"presence is not guaranteed at compile-time in the class."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:380
+msgid ""
+"If [code]true[/code], enables warnings when a function parameter is unused."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:383
+msgid ""
+"If [code]true[/code], enables warnings when a member variable is unused."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:386
+msgid "If [code]true[/code], enables warnings when a signal is unused."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:389
+msgid "If [code]true[/code], enables warnings when a local variable is unused."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:392
+msgid ""
+"If [code]true[/code], enables warnings when a variable is declared with the "
+"same name as a function. This will turn into an error in a future version "
+"when first-class functions become supported in GDScript."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:395
+msgid ""
+"If [code]true[/code], enables warnings when assigning the result of a "
+"function that returns [code]void[/code] to a variable."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:398
+msgid "Message to be displayed before the backtrace when the engine crashes."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:401
+msgid ""
+"Maximum number of frames per second allowed. The actual number of frames per "
+"second may still be below this value if the game is lagging.\n"
+"If [member display/window/vsync/use_vsync] is enabled, it takes precedence "
+"and the forced FPS number cannot exceed the monitor's refresh rate.\n"
+"This setting is therefore mostly relevant for lowering the maximum FPS below "
+"VSync, e.g. to perform non-real-time rendering of static frames, or test the "
+"project under lag conditions."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:406
+msgid "Maximum call stack allowed for debugging GDScript."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:409
+msgid "Maximum amount of functions per frame allowed when profiling."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:412
+msgid "Print frames per second to standard output every second."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:415
+msgid ""
+"Print more information to standard output when running. It displays "
+"information such as memory leaks, which scenes and resources are being "
+"loaded, etc."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:418
+msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:421
+msgid ""
+"Color of the contact points between collision shapes, visible when \"Visible "
+"Collision Shapes\" is enabled in the Debug menu."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:424
+msgid ""
+"Sets whether 2D physics will display collision outlines in game when "
+"\"Visible Collision Shapes\" is enabled in the Debug menu."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:427
+msgid ""
+"Maximum number of contact points between collision shapes to display when "
+"\"Visible Collision Shapes\" is enabled in the Debug menu."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:430
+msgid ""
+"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
+"enabled in the Debug menu."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:433
+msgid ""
+"Color of the disabled navigation geometry, visible when \"Visible Navigation"
+"\" is enabled in the Debug menu."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:436
+msgid ""
+"Color of the navigation geometry, visible when \"Visible Navigation\" is "
+"enabled in the Debug menu."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:439
+msgid "Custom image for the mouse cursor (limited to 256×256)."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:442
+msgid "Hotspot for the custom mouse cursor image."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:445
+msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:448
+msgid ""
+"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
+"platform. This setting has no effect on desktop Linux, as DPI-awareness "
+"fallbacks are not supported there."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:451
+msgid ""
+"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
+"the screensaver does not take over. Works on desktop and mobile platforms."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:454
+msgid ""
+"The default screen orientation to use on mobile devices.\n"
+"[b]Note:[/b] When set to a portrait orientation, this project setting does "
+"not flip the project resolution's width and height automatically. Instead, "
+"you have to set [member display/window/size/width] and [member display/"
+"window/size/height] accordingly."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:458
+msgid ""
+"If [code]true[/code], the home indicator is hidden automatically. This only "
+"affects iOS devices without a physical home button."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:461
+msgid ""
+"If [code]true[/code], allows per-pixel transparency for the window "
+"background. This affects performance, so leave it on [code]false[/code] "
+"unless you need it.\n"
+"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
+"[b]Note:[/b] This feature is implemented on HTML5, Linux, macOS, Windows, "
+"and Android."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:466
+msgid ""
+"Sets the window background to transparent when it starts.\n"
+"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
+"[b]Note:[/b] This feature is implemented on HTML5, Linux, macOS, Windows, "
+"and Android."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:471
+msgid ""
+"Forces the main window to be always on top.\n"
+"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:475
+msgid ""
+"Forces the main window to be borderless.\n"
+"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:479
+msgid ""
+"Sets the main window to full screen when the project starts. Note that this "
+"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
+"window is used to emulate fullscreen. On macOS, a new desktop is used to "
+"display the running project.\n"
+"Regardless of the platform, enabling fullscreen will change the window size "
+"to match the monitor's size. Therefore, make sure your project supports "
+"[url=https://docs.godotengine.org/en/3.4/tutorials/rendering/"
+"multiple_resolutions.html]multiple resolutions[/url] when enabling "
+"fullscreen mode.\n"
+"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:484
+msgid ""
+"Sets the game's main viewport height. On desktop platforms, this is the "
+"default window size. Stretch mode settings also use this as a reference when "
+"enabled."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:487
+msgid ""
+"Allows the window to be resizable by default.\n"
+"[b]Note:[/b] This setting is ignored on iOS and Android."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:491
+msgid ""
+"If greater than zero, overrides the window height when running the game. "
+"Useful for testing stretch modes."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:494
+msgid ""
+"If greater than zero, overrides the window width when running the game. "
+"Useful for testing stretch modes."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:497
+msgid ""
+"Sets the game's main viewport width. On desktop platforms, this is the "
+"default window size. Stretch mode settings also use this as a reference when "
+"enabled."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:500
+msgid ""
+"Specifies the tablet driver to use. If left empty, the default driver will "
+"be used."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:503
+msgid ""
+"If [code]true[/code], enables vertical synchronization. This eliminates "
+"tearing that may appear in moving scenes, at the cost of higher input "
+"latency and stuttering at lower framerates. If [code]false[/code], vertical "
+"synchronization will be disabled, however, many platforms will enforce it "
+"regardless (such as mobile platforms and HTML5)."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:506
+msgid ""
+"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
+"enables vertical synchronization via the operating system's window "
+"compositor when in windowed mode and the compositor is enabled. This will "
+"prevent stutter in certain situations. (Windows only.)\n"
+"[b]Note:[/b] This option is experimental and meant to alleviate stutter "
+"experienced by some users. However, some users have experienced a Vsync "
+"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:510
+msgid ""
+"The command-line arguments to append to Godot's own command line when "
+"running the project. This doesn't affect the editor itself.\n"
+"It is possible to make another executable run Godot by using the "
+"[code]%command%[/code] placeholder. The placeholder will be replaced with "
+"Godot's own command line. Program-specific arguments should be placed "
+"[i]before[/i] the placeholder, whereas Godot-specific arguments should be "
+"placed [i]after[/i] the placeholder.\n"
+"For example, this can be used to force the project to run on the dedicated "
+"GPU in a NVIDIA Optimus system on Linux:\n"
+"[codeblock]\n"
+"prime-run %command%\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:518
+msgid ""
+"Search path for project-specific script templates. Godot will search for "
+"script templates both in the editor-specific path and in this project-"
+"specific path."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:521
+msgid ""
+"Text-based file extensions to include in the script editor's \"Find in Files"
+"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
+"your scene files, especially if you use built-in scripts which are "
+"serialized in the scene files."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:524
+msgid ""
+"Default value for [member ScrollContainer.scroll_deadzone], which will be "
+"used for all [ScrollContainer]s unless overridden."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:527
+msgid ""
+"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
+"UWP to follow interface conventions."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:532
+msgid ""
+"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
+"code] or generic [code]tres[/code]/[code]res[/code] extension)."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:535
+msgid ""
+"Path to a custom [Font] resource to use as default for all GUI elements of "
+"the project."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:538
+msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:541
+msgid ""
+"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
+"(in milliseconds)."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:544
+msgid "Timer for detecting idle in [TextEdit] (in seconds)."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:547
+msgid "Default delay for tooltips (in seconds)."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:550
+msgid ""
+"Default [InputEventAction] to confirm a focused button, menu or list item, "
+"or validate input.\n"
+"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
+"necessary for the internal logic of several [Control]s. The events assigned "
+"to the action can however be modified."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:554
+msgid ""
+"Default [InputEventAction] to discard a modal or pending input.\n"
+"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
+"necessary for the internal logic of several [Control]s. The events assigned "
+"to the action can however be modified."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:558
+msgid ""
+"Default [InputEventAction] to move down in the UI.\n"
+"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
+"necessary for the internal logic of several [Control]s. The events assigned "
+"to the action can however be modified."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:562
+msgid ""
+"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
+"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
+"KEY_END] on typical desktop UI systems.\n"
+"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
+"necessary for the internal logic of several [Control]s. The events assigned "
+"to the action can however be modified."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:566
+msgid ""
+"Default [InputEventAction] to focus the next [Control] in the scene. The "
+"focus behavior can be configured via [member Control.focus_next].\n"
+"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
+"necessary for the internal logic of several [Control]s. The events assigned "
+"to the action can however be modified."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:570
+msgid ""
+"Default [InputEventAction] to focus the previous [Control] in the scene. The "
+"focus behavior can be configured via [member Control.focus_previous].\n"
+"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
+"necessary for the internal logic of several [Control]s. The events assigned "
+"to the action can however be modified."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:574
+msgid ""
+"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
+"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
+"KEY_HOME] on typical desktop UI systems.\n"
+"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
+"necessary for the internal logic of several [Control]s. The events assigned "
+"to the action can however be modified."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:578
+msgid ""
+"Default [InputEventAction] to move left in the UI.\n"
+"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
+"necessary for the internal logic of several [Control]s. The events assigned "
+"to the action can however be modified."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:582
+msgid ""
+"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
+"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
+"typical desktop UI systems.\n"
+"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
+"necessary for the internal logic of several [Control]s. The events assigned "
+"to the action can however be modified."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:586
+msgid ""
+"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
+"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
+"typical desktop UI systems.\n"
+"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
+"necessary for the internal logic of several [Control]s. The events assigned "
+"to the action can however be modified."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:590
+msgid ""
+"Default [InputEventAction] to move right in the UI.\n"
+"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
+"necessary for the internal logic of several [Control]s. The events assigned "
+"to the action can however be modified."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:594
+msgid ""
+"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
+"[ItemList] or a [Tree]).\n"
+"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
+"necessary for the internal logic of several [Control]s. The events assigned "
+"to the action can however be modified."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:598
+msgid ""
+"Default [InputEventAction] to move up in the UI.\n"
+"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
+"necessary for the internal logic of several [Control]s. The events assigned "
+"to the action can however be modified."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:602
+msgid ""
+"If [code]true[/code], key/touch/joystick events will be flushed just before "
+"every idle and physics frame.\n"
+"If [code]false[/code], such events will be flushed only once per idle frame, "
+"between iterations of the engine.\n"
+"Enabling this can greatly improve the responsiveness to input, specially in "
+"devices that need to run multiple physics frames per visible (idle) frame, "
+"because they can't run at the target frame rate.\n"
+"[b]Note:[/b] Currently implemented only in Android."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:608
+msgid ""
+"If [code]true[/code], sends mouse input events when tapping or swiping on "
+"the touchscreen."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:611
+msgid ""
+"If [code]true[/code], sends touch input events when clicking or dragging the "
+"mouse."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:614
+msgid "Default delay for touch events. This only affects iOS devices."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:617
+msgid "Optional name for the 2D physics layer 1."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:620
+msgid "Optional name for the 2D physics layer 10."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:623
+msgid "Optional name for the 2D physics layer 11."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:626
+msgid "Optional name for the 2D physics layer 12."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:629
+msgid "Optional name for the 2D physics layer 13."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:632
+msgid "Optional name for the 2D physics layer 14."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:635
+msgid "Optional name for the 2D physics layer 15."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:638
+msgid "Optional name for the 2D physics layer 16."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:641
+msgid "Optional name for the 2D physics layer 17."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:644
+msgid "Optional name for the 2D physics layer 18."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:647
+msgid "Optional name for the 2D physics layer 19."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:650
+msgid "Optional name for the 2D physics layer 2."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:653
+msgid "Optional name for the 2D physics layer 20."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:656
+msgid "Optional name for the 2D physics layer 21."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:659
+msgid "Optional name for the 2D physics layer 22."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:662
+msgid "Optional name for the 2D physics layer 23."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:665
+msgid "Optional name for the 2D physics layer 24."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:668
+msgid "Optional name for the 2D physics layer 25."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:671
+msgid "Optional name for the 2D physics layer 26."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:674
+msgid "Optional name for the 2D physics layer 27."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:677
+msgid "Optional name for the 2D physics layer 28."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:680
+msgid "Optional name for the 2D physics layer 29."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:683
+msgid "Optional name for the 2D physics layer 3."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:686
+msgid "Optional name for the 2D physics layer 30."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:689
+msgid "Optional name for the 2D physics layer 31."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:692
+msgid "Optional name for the 2D physics layer 32."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:695
+msgid "Optional name for the 2D physics layer 4."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:698
+msgid "Optional name for the 2D physics layer 5."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:701
+msgid "Optional name for the 2D physics layer 6."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:704
+msgid "Optional name for the 2D physics layer 7."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:707
+msgid "Optional name for the 2D physics layer 8."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:710
+msgid "Optional name for the 2D physics layer 9."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:713
+msgid "Optional name for the 2D render layer 1."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:716
+msgid "Optional name for the 2D render layer 10."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:719
+msgid "Optional name for the 2D render layer 11."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:722
+msgid "Optional name for the 2D render layer 12."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:725
+msgid "Optional name for the 2D render layer 13."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:728
+msgid "Optional name for the 2D render layer 14."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:731
+msgid "Optional name for the 2D render layer 15."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:734
+msgid "Optional name for the 2D render layer 16."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:737
+msgid "Optional name for the 2D render layer 17."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:740
+msgid "Optional name for the 2D render layer 18."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:743
+msgid "Optional name for the 2D render layer 19."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:746
+msgid "Optional name for the 2D render layer 2."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:749
+msgid "Optional name for the 2D render layer 20."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:752
+msgid "Optional name for the 2D render layer 3."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:755
+msgid "Optional name for the 2D render layer 4."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:758
+msgid "Optional name for the 2D render layer 5."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:761
+msgid "Optional name for the 2D render layer 6."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:764
+msgid "Optional name for the 2D render layer 7."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:767
+msgid "Optional name for the 2D render layer 8."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:770
+msgid "Optional name for the 2D render layer 9."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:773
+msgid "Optional name for the 3D physics layer 1."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:776
+msgid "Optional name for the 3D physics layer 10."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:779
+msgid "Optional name for the 3D physics layer 11."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:782
+msgid "Optional name for the 3D physics layer 12."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:785
+msgid "Optional name for the 3D physics layer 13."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:788
+msgid "Optional name for the 3D physics layer 14."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:791
+msgid "Optional name for the 3D physics layer 15."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:794
+msgid "Optional name for the 3D physics layer 16."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:797
+msgid "Optional name for the 3D physics layer 17."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:800
+msgid "Optional name for the 3D physics layer 18."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:803
+msgid "Optional name for the 3D physics layer 19."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:806
+msgid "Optional name for the 3D physics layer 2."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:809
+msgid "Optional name for the 3D physics layer 20."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:812
+msgid "Optional name for the 3D physics layer 21."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:815
+msgid "Optional name for the 3D physics layer 22."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:818
+msgid "Optional name for the 3D physics layer 23."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:821
+msgid "Optional name for the 3D physics layer 24."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:824
+msgid "Optional name for the 3D physics layer 25."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:827
+msgid "Optional name for the 3D physics layer 26."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:830
+msgid "Optional name for the 3D physics layer 27."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:833
+msgid "Optional name for the 3D physics layer 28."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:836
+msgid "Optional name for the 3D physics layer 29."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:839
+msgid "Optional name for the 3D physics layer 3."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:842
+msgid "Optional name for the 3D physics layer 30."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:845
+msgid "Optional name for the 3D physics layer 31."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:848
+msgid "Optional name for the 3D physics layer 32."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:851
+msgid "Optional name for the 3D physics layer 4."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:854
+msgid "Optional name for the 3D physics layer 5."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:857
+msgid "Optional name for the 3D physics layer 6."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:860
+msgid "Optional name for the 3D physics layer 7."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:863
+msgid "Optional name for the 3D physics layer 8."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:866
+msgid "Optional name for the 3D physics layer 9."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:869
+msgid "Optional name for the 3D render layer 1."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:872
+msgid "Optional name for the 3D render layer 10."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:875
+msgid "Optional name for the 3D render layer 11."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:878
+msgid "Optional name for the 3D render layer 12."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:881
+msgid "Optional name for the 3D render layer 13."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:884
+msgid "Optional name for the 3D render layer 14"
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:887
+msgid "Optional name for the 3D render layer 15."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:890
+msgid "Optional name for the 3D render layer 16."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:893
+msgid "Optional name for the 3D render layer 17."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:896
+msgid "Optional name for the 3D render layer 18."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:899
+msgid "Optional name for the 3D render layer 19."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:902
+msgid "Optional name for the 3D render layer 2."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:905
+msgid "Optional name for the 3D render layer 20."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:908
+msgid "Optional name for the 3D render layer 3."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:911
+msgid "Optional name for the 3D render layer 4."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:914
+msgid "Optional name for the 3D render layer 5."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:917
+msgid "Optional name for the 3D render layer 6."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:920
+msgid "Optional name for the 3D render layer 7."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:923
+msgid "Optional name for the 3D render layer 8."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:926
+msgid "Optional name for the 3D render layer 9."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:929
+msgid ""
+"The locale to fall back to if a translation isn't available in a given "
+"language. If left empty, [code]en[/code] (English) will be used."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:932
+msgid ""
+"If non-empty, this locale will be used when running the project from the "
+"editor."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:935
+msgid "If [code]true[/code], logs all output to files."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:938
+msgid ""
+"Desktop override for [member logging/file_logging/enable_file_logging], as "
+"log files are not readily accessible on mobile/Web platforms."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:941
+msgid ""
+"Path to logs within the project. Using an [code]user://[/code] path is "
+"recommended."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:944
+msgid "Specifies the maximum amount of log files allowed (used for rotation)."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:949
+msgid ""
+"Godot uses a message queue to defer some function calls. If you run out of "
+"space on it (you will see an error), you can increase the size here."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:952
+msgid ""
+"This is used by servers when used in multi-threading mode (servers and "
+"visual). RIDs are preallocated to avoid stalling the server requesting them "
+"on threads. If servers get stalled too often when loading resources in a "
+"thread, increase this number."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:955
+msgid ""
+"Maximum amount of characters allowed to send as output from the debugger. "
+"Over this value, content is dropped. This helps not to stall the debugger "
+"connection."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:958
+msgid ""
+"Maximum number of errors allowed to be sent as output from the debugger. "
+"Over this value, content is dropped. This helps not to stall the debugger "
+"connection."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:961
+msgid ""
+"Maximum amount of messages allowed to send as output from the debugger. Over "
+"this value, content is dropped. This helps not to stall the debugger "
+"connection."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:964
+msgid ""
+"Maximum number of warnings allowed to be sent as output from the debugger. "
+"Over this value, content is dropped. This helps not to stall the debugger "
+"connection."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:967
+msgid ""
+"Default size of packet peer stream for deserializing Godot data (in bytes, "
+"specified as a power of two). The default value [code]16[/code] is equal to "
+"65,536 bytes. Over this size, data is dropped."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:970
+msgid "Timeout (in seconds) for connection attempts using TCP."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:973
+msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:976
+msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:979
+msgid "Maximum number of concurrent input packets for [WebSocketClient]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:982
+msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:985
+msgid "Maximum number of concurrent output packets for [WebSocketClient]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:988
+msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:991
+msgid "Maximum number of concurrent input packets for [WebSocketServer]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:994
+msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:997
+msgid "Maximum number of concurrent output packets for [WebSocketServer]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1000
+msgid ""
+"Amount of read ahead used by remote filesystem. Higher values decrease the "
+"effects of latency at the cost of higher bandwidth usage."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1003
+msgid "Page size used by remote filesystem (in bytes)."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1006
+msgid ""
+"The CA certificates bundle to use for SSL connections. If this is set to a "
+"non-empty value, this will [i]override[/i] Godot's default [url=https://"
+"github.com/godotengine/godot/blob/master/thirdparty/certs/ca-certificates."
+"crt]Mozilla certificate bundle[/url]. If left empty, the default certificate "
+"bundle will be used.\n"
+"If in doubt, leave this setting empty."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1010
+msgid ""
+"When creating node names automatically, set the type of casing in this "
+"project. This is mostly an editor setting."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1013
+msgid ""
+"What to use to separate node name from number. This is mostly an editor "
+"setting."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1016
+msgid ""
+"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
+"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
+"enabled."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1020
+msgid ""
+"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
+"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
+"enabled."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1024
+msgid ""
+"The default angular damp in 2D.\n"
+"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
+"At value [code]0[/code] objects will keep moving with the same velocity. "
+"Values greater than [code]1[/code] will aim to reduce the velocity to "
+"[code]0[/code] in less than a second e.g. a value of [code]2[/code] will aim "
+"to reduce the velocity to [code]0[/code] in half a second. A value equal to "
+"or greater than the physics frame rate ([member ProjectSettings.physics/"
+"common/physics_fps], [code]60[/code] by default) will bring the object to a "
+"stop in one iteration."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1028
+msgid ""
+"The default gravity strength in 2D (in pixels per second squared).\n"
+"[b]Note:[/b] This property is only read when the project starts. To change "
+"the default gravity at runtime, use the following code sample:\n"
+"[codeblock]\n"
+"# Set the default gravity strength to 98.\n"
+"Physics2DServer.area_set_param(get_viewport().find_world_2d().get_space(), "
+"Physics2DServer.AREA_PARAM_GRAVITY, 98)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1036
+msgid ""
+"The default gravity direction in 2D.\n"
+"[b]Note:[/b] This property is only read when the project starts. To change "
+"the default gravity vector at runtime, use the following code sample:\n"
+"[codeblock]\n"
+"# Set the default gravity direction to `Vector2(0, 1)`.\n"
+"Physics2DServer.area_set_param(get_viewport().find_world_2d().get_space(), "
+"Physics2DServer.AREA_PARAM_GRAVITY_VECTOR, Vector2(0, 1))\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1044
+msgid ""
+"The default linear damp in 2D.\n"
+"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
+"At value [code]0[/code] objects will keep moving with the same velocity. "
+"Values greater than [code]1[/code] will aim to reduce the velocity to "
+"[code]0[/code] in less than a second e.g. a value of [code]2[/code] will aim "
+"to reduce the velocity to [code]0[/code] in half a second. A value equal to "
+"or greater than the physics frame rate ([member ProjectSettings.physics/"
+"common/physics_fps], [code]60[/code] by default) will bring the object to a "
+"stop in one iteration."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1048
+msgid ""
+"Threshold defining the surface size that constitutes a large object with "
+"regard to cells in the broad-phase 2D hash grid algorithm.\n"
+"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
+"enabled."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1052
+msgid ""
+"Sets which physics engine to use for 2D physics.\n"
+"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
+"alternative 2D physics server implemented."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1056
+msgid ""
+"Threshold angular velocity under which a 2D physics body will be considered "
+"inactive. See [constant Physics2DServer."
+"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1059
+msgid ""
+"Threshold linear velocity under which a 2D physics body will be considered "
+"inactive. See [constant Physics2DServer."
+"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1062
+msgid ""
+"Sets whether physics is run on the main thread or a separate one. Running "
+"the server on a thread increases performance, but restricts API access to "
+"only physics process.\n"
+"[b]Warning:[/b] As of Godot 3.2, there are mixed reports about the use of a "
+"Multi-Threaded thread model for physics. Be sure to assess whether it does "
+"give you extra performance and no regressions when using it."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1066
+msgid ""
+"Time (in seconds) of inactivity before which a 2D physics body will put to "
+"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1069
+msgid ""
+"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
+"physics spatial partitioning. This may give better performance."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1072
+msgid ""
+"Sets whether the 3D physics world will be created with support for "
+"[SoftBody] physics. Only applies to the Bullet physics engine."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1075
+msgid ""
+"The default angular damp in 3D.\n"
+"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
+"At value [code]0[/code] objects will keep moving with the same velocity. "
+"Values greater than [code]1[/code] will aim to reduce the velocity to "
+"[code]0[/code] in less than a second e.g. a value of [code]2[/code] will aim "
+"to reduce the velocity to [code]0[/code] in half a second. A value equal to "
+"or greater than the physics frame rate ([member ProjectSettings.physics/"
+"common/physics_fps], [code]60[/code] by default) will bring the object to a "
+"stop in one iteration."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1079
+msgid ""
+"The default gravity strength in 3D (in meters per second squared).\n"
+"[b]Note:[/b] This property is only read when the project starts. To change "
+"the default gravity at runtime, use the following code sample:\n"
+"[codeblock]\n"
+"# Set the default gravity strength to 9.8.\n"
+"PhysicsServer.area_set_param(get_viewport().find_world().get_space(), "
+"PhysicsServer.AREA_PARAM_GRAVITY, 9.8)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1087
+msgid ""
+"The default gravity direction in 3D.\n"
+"[b]Note:[/b] This property is only read when the project starts. To change "
+"the default gravity vector at runtime, use the following code sample:\n"
+"[codeblock]\n"
+"# Set the default gravity direction to `Vector3(0, -1, 0)`.\n"
+"PhysicsServer.area_set_param(get_viewport().find_world().get_space(), "
+"PhysicsServer.AREA_PARAM_GRAVITY_VECTOR, Vector3(0, -1, 0))\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1095
+msgid ""
+"The default linear damp in 3D.\n"
+"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
+"At value [code]0[/code] objects will keep moving with the same velocity. "
+"Values greater than [code]1[/code] will aim to reduce the velocity to "
+"[code]0[/code] in less than a second e.g. a value of [code]2[/code] will aim "
+"to reduce the velocity to [code]0[/code] in half a second. A value equal to "
+"or greater than the physics frame rate ([member ProjectSettings.physics/"
+"common/physics_fps], [code]60[/code] by default) will bring the object to a "
+"stop in one iteration."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1099
+msgid ""
+"Enables the use of bounding volume hierarchy instead of octree for 3D "
+"physics spatial partitioning. This may give better performance."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1102
+msgid ""
+"Sets which physics engine to use for 3D physics.\n"
+"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
+"physics engine. The \"GodotPhysics\" engine is still supported as an "
+"alternative."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1106
+msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1109
+msgid ""
+"If enabled, 2D and 3D physics picking behaves this way in relation to "
+"pause:\n"
+"- When pause is started, every collision object that is hovered or captured "
+"(3D only) is released from that condition, getting the relevant mouse-exit "
+"callback, unless its pause mode makes it immune to pause.\n"
+"- During pause, picking only considers collision objects immune to pause, "
+"sending input events and enter/exit callbacks to them as expected.\n"
+"If disabled, the legacy behavior is used, which consists in queuing the "
+"picking input events during pause (so nodes won't get them) and flushing "
+"that queue on resume, against the state of the 2D/3D world at that point."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1115
+msgid ""
+"The number of fixed iterations per second. This controls how often physics "
+"simulation and [method Node._physics_process] methods are run.\n"
+"[b]Note:[/b] This property is only read when the project starts. To change "
+"the physics FPS at runtime, set [member Engine.iterations_per_second] "
+"instead."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1119
+msgid ""
+"Controls how much physics ticks are synchronized with real time. For 0 or "
+"less, the ticks are synchronized. Such values are recommended for network "
+"games, where clock synchronization matters. Higher values cause higher "
+"deviation of in-game clock and real clock, but allows smoothing out "
+"framerate jitters. The default value of 0.5 should be fine for most; values "
+"above 2 could cause the game to react to dropped frames with a noticeable "
+"delay and are not recommended.\n"
+"[b]Note:[/b] For best results, when using a custom physics interpolation "
+"solution, the physics jitter fix should be disabled by setting [member "
+"physics/common/physics_jitter_fix] to [code]0[/code].\n"
+"[b]Note:[/b] This property is only read when the project starts. To change "
+"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1124
+msgid ""
+"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
+"uploading batching data. This may not be necessary but can be used for "
+"safety.\n"
+"[b]Note:[/b] Use with care. You are advised to leave this as default for "
+"exports. A non-default setting that works better on your machine may "
+"adversely affect performance for end users."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1128
+msgid ""
+"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
+"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
+"flag.\n"
+"[b]Note:[/b] Use with care. You are advised to leave this as default for "
+"exports. A non-default setting that works better on your machine may "
+"adversely affect performance for end users."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1132
+msgid ""
+"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
+"[code]glBufferData[/code] is called with NULL data and the full buffer size "
+"prior to uploading new data. This can be important to avoid stalling on some "
+"hardware.\n"
+"[b]Note:[/b] Use with care. You are advised to leave this as default for "
+"exports. A non-default setting that works better on your machine may "
+"adversely affect performance for end users."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1136
+msgid ""
+"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
+"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
+"flag.\n"
+"[b]Note:[/b] Use with care. You are advised to leave this as default for "
+"exports. A non-default setting that works better on your machine may "
+"adversely affect performance for end users."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1140
+msgid ""
+"Choose between fixed mode where corner scalings are preserved matching the "
+"artwork, and scaling mode.\n"
+"Not available in GLES3 when [member rendering/batching/options/use_batching] "
+"is off."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1144
+msgid ""
+"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
+"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
+"[url=https://github.com/godotengine/godot/issues/9913]GitHub issue 9913[/"
+"url] for details.\n"
+"If [code]true[/code], this option enables a \"safe\" code path for such "
+"NVIDIA GPUs at the cost of performance. This option affects GLES2 and GLES3 "
+"rendering, but only on desktop platforms."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1148
+msgid ""
+"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
+"This provides greater compatibility with a wide range of hardware, and also "
+"may be faster in some circumstances.\n"
+"Currently only available when [member rendering/batching/options/"
+"use_batching] is active.\n"
+"[b]Note:[/b] Antialiased software skinned polys are not supported, and will "
+"be rendered without antialiasing.\n"
+"[b]Note:[/b] Custom shaders that use the [code]VERTEX[/code] built-in "
+"operate with [code]VERTEX[/code] position [i]after[/i] skinning, whereas "
+"with hardware skinning, [code]VERTEX[/code] is the position [i]before[/i] "
+"skinning."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1154
+msgid ""
+"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
+"May help in some pixel art styles.\n"
+"This snapping is performed on the GPU in the vertex shader.\n"
+"Consider using the project setting [member rendering/batching/precision/"
+"uv_contract] to prevent artifacts."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1159
+msgid ""
+"When batching is on, this regularly prints a frame diagnosis log. Note that "
+"this will degrade performance."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1162
+msgid ""
+"[b]Experimental.[/b] For regression testing against the old renderer. If "
+"this is switched on, and [code]use_batching[/code] is set, the renderer will "
+"swap alternately between using the old renderer, and the batched renderer, "
+"on each frame. This makes it easy to identify visual differences. "
+"Performance will be degraded."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1165
+msgid ""
+"Lights have the potential to prevent joining items, and break many of the "
+"performance benefits of batching. This setting enables some complex logic to "
+"allow joining items if their lighting is similar, and overlap tests pass. "
+"This can significantly improve performance in some games. Set to 0 to switch "
+"off. With large values the cost of overlap tests may lead to diminishing "
+"returns."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1168
+msgid ""
+"Sets the proportion of the total screen area (in pixels) that must be saved "
+"by a scissor operation in order to activate light scissoring. This can "
+"prevent parts of items being rendered outside the light area. Lower values "
+"scissor more aggressively. A value of 1 scissors none of the items, a value "
+"of 0 scissors every item. The power of 4 of the value is used, in order to "
+"emphasize the lower range, and multiplied by the total screen area in pixels "
+"to give the threshold. This can reduce fill rate requirements in scenes with "
+"a lot of lighting."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1171
+msgid ""
+"Enabling this setting uses the legacy method to draw batches containing only "
+"one rect. The legacy method is faster (approx twice as fast), but can cause "
+"flicker on some systems. In order to directly compare performance with the "
+"non-batching renderer you can set this to true, but it is recommended to "
+"turn this off unless you can guarantee your target hardware will work with "
+"this method."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1174
+msgid ""
+"Turns 2D batching on and off. Batching increases performance by reducing the "
+"amount of graphics API drawcalls."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1177
+msgid "Switches on 2D batching within the editor."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1180
+msgid ""
+"Size of buffer reserved for batched vertices. Larger size enables larger "
+"batches, but there are diminishing returns for the memory used. This should "
+"only have a minor effect on performance."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1183
+msgid ""
+"Including color in the vertex format has a cost, however, not including "
+"color prevents batching across color changes. This threshold determines the "
+"ratio of [code]number of vertex color changes / total number of vertices[/"
+"code] above which vertices will be translated to colored format. A value of "
+"0 will always use colored vertices, 1 will never use colored vertices."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1186
+msgid ""
+"In certain circumstances, the batcher can reorder items in order to better "
+"join them. This may result in better performance. An overlap test is needed "
+"however for each item lookahead, so there is a trade off, with diminishing "
+"returns. If you are getting no benefit, setting this to 0 will switch it off."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1189
+msgid ""
+"Sets the number of commands to lookahead to determine whether to batch "
+"render items. A value of 1 can join items consisting of single commands, 0 "
+"turns off joining. Higher values are in theory more likely to join, however "
+"this has diminishing returns and has a runtime cost so a small value is "
+"recommended."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1192
+msgid ""
+"On some platforms (especially mobile), precision issues in shaders can lead "
+"to reading 1 texel outside of bounds, particularly where rects are scaled. "
+"This can particularly lead to border artifacts around tiles in tilemaps.\n"
+"This adjustment corrects for this by making a small contraction to the UV "
+"coordinates used. Note that this can result in a slight squashing of border "
+"texels."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1196
+msgid ""
+"The amount of UV contraction. This figure is divided by 1000000, and is a "
+"proportion of the total texture dimensions, where the width and height are "
+"both ranged from 0.0 to 1.0.\n"
+"Use the default unless correcting for a problem on particular hardware."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1200
+msgid ""
+"Amount of light samples taken when using [constant BakedLightmap."
+"BAKE_QUALITY_HIGH]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1203
+msgid ""
+"Amount of light samples taken when using [constant BakedLightmap."
+"BAKE_QUALITY_LOW]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1206
+msgid ""
+"Amount of light samples taken when using [constant BakedLightmap."
+"BAKE_QUALITY_MEDIUM]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1209
+msgid ""
+"Amount of light samples taken when using [constant BakedLightmap."
+"BAKE_QUALITY_ULTRA]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1212
+msgid ""
+"Default background clear color. Overridable per [Viewport] using its "
+"[Environment]. See [member Environment.background_mode] and [member "
+"Environment.background_color] in particular. To change this default color "
+"programmatically, use [method VisualServer.set_default_clear_color]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1215
+msgid ""
+"[Environment] that will be used as a fallback environment in case a scene "
+"does not specify its own environment. The default environment is loaded in "
+"at scene load time regardless of whether you have set an environment or not. "
+"If you do not rely on the fallback environment, it is best to delete "
+"[code]default_env.tres[/code], or to specify a different default environment "
+"here."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1218
+msgid ""
+"The use of half-float vertex compression may be producing rendering errors "
+"on some platforms (especially iOS). These have been seen particularly in "
+"particles. Disabling half-float may resolve these problems."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1221
+msgid ""
+"iOS specific override for [member rendering/gles2/compatibility/"
+"disable_half_float], due to poor support for half-float vertex compression "
+"on many devices."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1224
+msgid ""
+"If [code]true[/code] and available on the target Android device, enables "
+"high floating point precision for all shader computations in GLES2.\n"
+"[b]Warning:[/b] High floating point precision can be extremely slow on older "
+"devices and is often not available at all. Use with caution."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1228
+msgid ""
+"Max buffer size for blend shapes. Any blend shape bigger than this will not "
+"work."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1231
+msgid ""
+"Max buffer size for drawing polygons. Any polygon bigger than this will not "
+"work."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1234
+msgid ""
+"Max index buffer size for drawing polygons. Any polygon bigger than this "
+"will not work."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1237
+msgid ""
+"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
+"Nodes using more than this size will not work."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1240
+msgid ""
+"Max number of lights renderable per object. This is further limited by "
+"hardware support. Most devices only support 409 lights, while many devices "
+"(especially mobile) only support 102. Setting this low will slightly reduce "
+"memory usage and may decrease shader compile times."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1243
+msgid ""
+"Max amount of elements renderable in a frame. If more elements than this are "
+"visible per frame, they will not be drawn. Keep in mind elements refer to "
+"mesh surfaces and not meshes themselves. Setting this low will slightly "
+"reduce memory usage and may decrease shader compile times, particularly on "
+"web. For most uses, the default value is suitable, but consider lowering as "
+"much as possible on web export."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1246
+msgid ""
+"Max number of lights renderable in a frame. If more lights than this number "
+"are used, they will be ignored. Setting this low will slightly reduce memory "
+"usage and may decrease shader compile times, particularly on web. For most "
+"uses, the default value is suitable, but consider lowering as much as "
+"possible on web export."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1249
+msgid ""
+"Max number of reflection probes renderable in a frame. If more reflection "
+"probes than this number are used, they will be ignored. Setting this low "
+"will slightly reduce memory usage and may decrease shader compile times, "
+"particularly on web. For most uses, the default value is suitable, but "
+"consider lowering as much as possible on web export."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1252
+msgid ""
+"Shaders have a time variable that constantly increases. At some point, it "
+"needs to be rolled back to zero to avoid precision errors on shader "
+"animations. This setting specifies when (in seconds)."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1255
+msgid ""
+"If [code]true[/code], the texture importer will import lossless textures "
+"using the PNG format. Otherwise, it will default to using WebP."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1258
+msgid ""
+"The default compression level for lossless WebP. Higher levels result in "
+"smaller files at the cost of compression speed. Decompression speed is "
+"mostly unaffected by the compression level. Supported values are 0 to 9. "
+"Note that compression levels above 6 are very slow and offer very little "
+"savings."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1261
+msgid ""
+"On import, mesh vertex data will be split into two streams within a single "
+"vertex buffer, one for position data and the other for interleaved "
+"attributes data. Recommended to be enabled if targeting mobile devices. "
+"Requires manual reimport of meshes after toggling."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1264
+msgid ""
+"Determines the maximum number of sphere occluders that will be used at any "
+"one time.\n"
+"Although you can have many occluders in a scene, each frame the system will "
+"choose from these the most relevant based on a screen space metric, in order "
+"to give the best overall performance."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1268
+msgid ""
+"The default convention is for portal normals to point outward (face outward) "
+"from the source room.\n"
+"If you accidentally build your level with portals facing the wrong way, this "
+"setting can fix the problem.\n"
+"It will flip named portal meshes (i.e. [code]-portal[/code]) on the initial "
+"convertion to [Portal] nodes."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1273
+msgid ""
+"Show conversion logs.\n"
+"[b]Note:[/b] This will automatically be disabled in exports."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1277
+msgid ""
+"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
+"code]. If [code]false[/code], they will be sent as [code]notifications[/"
+"code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1280
+msgid ""
+"If enabled, while merging meshes, the system will also attempt to remove "
+"[Spatial] nodes that no longer have any children.\n"
+"Reducing the number of [Node]s in the scene tree can make traversal more "
+"efficient, but can be switched off in case you wish to use empty [Spatial]s "
+"for markers or some other purpose."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1284
+msgid ""
+"Show logs during PVS generation.\n"
+"[b]Note:[/b] This will automatically be disabled in exports."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1288
+msgid ""
+"Uses a simplified method of generating PVS (potentially visible set) data. "
+"The results may not be accurate where more than one portal join adjacent "
+"rooms.\n"
+"[b]Note:[/b] Generally you should only use this option if you encounter bugs "
+"when it is set to [code]false[/code], i.e. there are problems with the "
+"default method."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1292
+msgid ""
+"If [code]true[/code], allocates the main framebuffer with high dynamic "
+"range. High dynamic range allows the use of [Color] values greater than 1.\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1296
+msgid ""
+"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
+"devices, due to performance concerns or driver support."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1299
+msgid ""
+"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
+"architecture already does this."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1302
+msgid ""
+"If [code]true[/code], performs a previous depth pass before rendering "
+"materials. This increases performance in scenes with high overdraw, when "
+"complex materials and lighting are used."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1305
+msgid ""
+"The directional shadow's size in pixels. Higher values will result in "
+"sharper shadows, at the cost of performance. The value will be rounded up to "
+"the nearest power of 2."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1308
+msgid ""
+"Lower-end override for [member rendering/quality/directional_shadow/size] on "
+"mobile devices, due to performance concerns or driver support."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1311
+msgid ""
+"The video driver to use (\"GLES2\" or \"GLES3\").\n"
+"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
+"video-driver[/code] command line argument, or by the [member rendering/"
+"quality/driver/fallback_to_gles2] option if the target system does not "
+"support GLES3 and falls back to GLES2. In such cases, this property is not "
+"updated, so use [method OS.get_current_video_driver] to query it at run-time."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1315
+msgid ""
+"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
+"driver is not supported.\n"
+"[b]Note:[/b] The two video drivers are not drop-in replacements for each "
+"other, so a game designed for GLES3 might not work properly when falling "
+"back to GLES2. In particular, some features of the GLES3 backend are not "
+"available in GLES2. Enabling this setting also means that both ETC and ETC2 "
+"VRAM-compressed textures will be exported on Android and iOS, increasing the "
+"data pack's size."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1319
+msgid ""
+"Maximum anisotropic filter level used for textures with anisotropy enabled. "
+"Higher values will result in sharper textures when viewed from oblique "
+"angles, at the cost of performance. Only power-of-two values are valid (2, "
+"4, 8, 16)."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1322
+msgid ""
+"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
+"around the edges of polygons. A higher MSAA value results in smoother edges "
+"but can be significantly slower on some hardware.\n"
+"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1326
+msgid ""
+"If set to a value greater than [code]0.0[/code], contrast-adaptive "
+"sharpening will be applied to the 3D viewport. This has a low performance "
+"cost and can be used to recover some of the sharpness lost from using FXAA. "
+"Values around [code]0.5[/code] generally give the best results. See also "
+"[member rendering/quality/filters/use_fxaa]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1329
+msgid ""
+"If [code]true[/code], uses a fast post-processing filter to make banding "
+"significantly less visible. In some cases, debanding may introduce a "
+"slightly noticeable dithering pattern. It's recommended to enable debanding "
+"only when actually needed since the dithering pattern will make lossless-"
+"compressed screenshots larger.\n"
+"[b]Note:[/b] Only available on the GLES3 backend. [member rendering/quality/"
+"depth/hdr] must also be [code]true[/code] for debanding to be effective.\n"
+"[b]Note:[/b] There are known issues with debanding breaking rendering on "
+"mobile platforms. Due to this, it is recommended to leave this option "
+"disabled when targeting mobile platforms."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1334
+msgid ""
+"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
+"antialiasing method, which is fast but will make the image look blurry, "
+"especially at lower resolutions. It can still work relatively well at large "
+"resolutions such as 1440p and 4K. Some of the lost sharpness can be "
+"recovered by enabling contrast-adaptive sharpening (see [member rendering/"
+"quality/filters/sharpen_intensity])."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1337
+msgid ""
+"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
+"mipmaps (also called \"bilinear filtering\"), which will result in visible "
+"seams appearing between mipmap stages. This may increase performance in "
+"mobile as less memory bandwidth is used. If [code]false[/code], linear "
+"mipmap filtering (also called \"trilinear filtering\") is used."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1340
+msgid ""
+"Strategy used for framebuffer allocation. The simpler it is, the less "
+"resources it uses (but the less features it supports). If set to \"2D "
+"Without Sampling\" or \"3D Without Effects\", sample buffers will not be "
+"allocated. This means [code]SCREEN_TEXTURE[/code] and [code]DEPTH_TEXTURE[/"
+"code] will not be available in shaders and post-processing effects will not "
+"be available in the [Environment]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1343
+msgid ""
+"Lower-end override for [member rendering/quality/intended_usage/"
+"framebuffer_allocation] on mobile devices, due to performance concerns or "
+"driver support."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1346
+msgid ""
+"Enable usage of bicubic sampling in baked lightmaps. This results in "
+"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
+"changes to this setting will only be applied upon restarting the application."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1349
+msgid ""
+"Lower-end override for [member rendering/quality/lightmapping/"
+"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1352
+msgid ""
+"Size of the atlas used by reflection probes. A larger size can result in "
+"higher visual quality, while a smaller size will be faster and take up less "
+"memory."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1355
+msgid ""
+"Number of subdivisions to use for the reflection atlas. A higher number "
+"lowers the quality of each atlas, but allows you to use more."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1358
+msgid ""
+"If [code]true[/code], uses a high amount of samples to create blurred "
+"variants of reflection probes and panorama backgrounds (sky). Those blurred "
+"variants are used by rough materials."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1361
+msgid ""
+"Lower-end override for [member rendering/quality/reflections/"
+"high_quality_ggx] on mobile devices, due to performance concerns or driver "
+"support."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1364
+msgid ""
+"Limits the size of the irradiance map which is normally determined by "
+"[member Sky.radiance_size]. A higher size results in a higher quality "
+"irradiance map similarly to [member rendering/quality/reflections/"
+"high_quality_ggx]. Use a higher value when using high-frequency HDRI maps, "
+"otherwise keep this as low as possible.\n"
+"[b]Note:[/b] Low and mid range hardware do not support complex irradiance "
+"maps well and may crash if this is set too high."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1368
+msgid ""
+"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
+"probes and panorama backgrounds (sky). This reduces jitter noise on "
+"reflections, but costs more performance and memory."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1371
+msgid ""
+"Lower-end override for [member rendering/quality/reflections/"
+"texture_array_reflections] on mobile devices, due to performance concerns or "
+"driver support."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1374
+msgid ""
+"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
+"blurred reflections instead of the GGX model."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1377
+msgid ""
+"Lower-end override for [member rendering/quality/shading/"
+"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
+"driver support."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1380
+msgid ""
+"If [code]true[/code], uses faster but lower-quality Lambert material "
+"lighting model instead of Burley."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1383
+msgid ""
+"Lower-end override for [member rendering/quality/shading/"
+"force_lambert_over_burley] on mobile devices, due to performance concerns or "
+"driver support."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1386
+msgid ""
+"If [code]true[/code], forces vertex shading for all rendering. This can "
+"increase performance a lot, but also reduces quality immensely. Can be used "
+"to optimize performance on low-end mobile devices."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1389
+msgid ""
+"Lower-end override for [member rendering/quality/shading/"
+"force_vertex_shading] on mobile devices, due to performance concerns or "
+"driver support."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1392
+msgid ""
+"If [code]true[/code], enables new physical light attenuation for "
+"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
+"appearance with a very small performance cost. When physical light "
+"attenuation is enabled, lights will appear to be darker as a result of the "
+"new attenuation formula. This can be compensated by adjusting the lights' "
+"energy or attenuation values.\n"
+"Changes to this setting will only be applied upon restarting the application."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1396
+msgid ""
+"Size for cubemap into which the shadow is rendered before being copied into "
+"the shadow atlas. A higher number can result in higher resolution shadows "
+"when used with a higher [member rendering/quality/shadow_atlas/size]. "
+"Setting higher than a quarter of the [member rendering/quality/shadow_atlas/"
+"size] will not result in a perceptible increase in visual quality."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
+msgid ""
+"Subdivision quadrant size for shadow mapping. See shadow mapping "
+"documentation."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1411
+msgid ""
+"Size for shadow atlas (used for OmniLights and SpotLights). See "
+"documentation."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1414
+msgid ""
+"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
+"mobile devices, due to performance concerns or driver support."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1417
+msgid ""
+"Shadow filter mode. Higher-quality settings result in smoother shadows that "
+"flicker less when moving. \"Disabled\" is the fastest option, but also has "
+"the lowest quality. \"PCF5\" is smoother but is also slower. \"PCF13\" is "
+"the smoothest option, but is also the slowest.\n"
+"[b]Note:[/b] When using the GLES2 backend, the \"PCF13\" option actually "
+"uses 16 samples to emulate linear filtering in the shader. This results in a "
+"shadow appearance similar to the one produced by the GLES3 backend."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1421
+msgid ""
+"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
+"mobile devices, due to performance concerns or driver support."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1424
+msgid ""
+"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
+"GLES2 and GLES3).\n"
+"See also [member rendering/quality/skinning/software_skinning_fallback]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1428
+msgid ""
+"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
+"doesn't support the default GPU skinning process with GLES2.\n"
+"If [code]false[/code], an alternative skinning process on the GPU is used in "
+"this case (slower in most cases).\n"
+"See also [member rendering/quality/skinning/force_software_skinning].\n"
+"[b]Note:[/b] When the software skinning fallback is triggered, custom vertex "
+"shaders will behave in a different way, because the bone transform will be "
+"already applied to the modelview matrix."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1434
+msgid ""
+"The rendering octree balance can be changed to favor smaller ([code]0[/"
+"code]), or larger ([code]1[/code]) branches.\n"
+"Larger branches can increase performance significantly in some projects."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1438
+msgid ""
+"Enables the use of bounding volume hierarchy instead of octree for rendering "
+"spatial partitioning. This may give better performance."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1441
+msgid ""
+"Improves quality of subsurface scattering, but cost significantly increases."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1444
+msgid "Quality setting for subsurface scattering (samples taken)."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1447
+msgid "Max radius used for subsurface scattering samples."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1450
+msgid ""
+"Weight subsurface scattering samples. Helps to avoid reading samples from "
+"unrelated parts of the screen."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1453
+msgid ""
+"Use high-quality voxel cone tracing. This results in better-looking "
+"reflections, but is much more expensive on the GPU."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1456
+msgid ""
+"Thread model for rendering. Rendering on a thread can vastly improve "
+"performance, but synchronizing to the main thread can cause a bit more "
+"jitter."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1459
+msgid ""
+"If [code]true[/code], a thread safe version of BVH (bounding volume "
+"hierarchy) will be used in rendering and Godot physics.\n"
+"Try enabling this option if you see any visual anomalies in 3D (such as "
+"incorrect object visibility)."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1463
+msgid ""
+"If [code]true[/code], the texture importer will import VRAM-compressed "
+"textures using the BPTC algorithm. This texture compression algorithm is "
+"only supported on desktop platforms, and only when using the GLES3 "
+"renderer.\n"
+"[b]Note:[/b] Changing this setting does [i]not[/i] impact textures that were "
+"already imported before. To make this setting apply to textures that were "
+"already imported, exit the editor, remove the [code].import/[/code] folder "
+"located inside the project folder then restart the editor (see [member "
+"application/config/use_hidden_project_data_directory])."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1467
+msgid ""
+"If [code]true[/code], the texture importer will import VRAM-compressed "
+"textures using the Ericsson Texture Compression algorithm. This algorithm "
+"doesn't support alpha channels in textures.\n"
+"[b]Note:[/b] Changing this setting does [i]not[/i] impact textures that were "
+"already imported before. To make this setting apply to textures that were "
+"already imported, exit the editor, remove the [code].import/[/code] folder "
+"located inside the project folder then restart the editor (see [member "
+"application/config/use_hidden_project_data_directory])."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1471
+msgid ""
+"If [code]true[/code], the texture importer will import VRAM-compressed "
+"textures using the Ericsson Texture Compression 2 algorithm. This texture "
+"compression algorithm is only supported when using the GLES3 renderer.\n"
+"[b]Note:[/b] Changing this setting does [i]not[/i] impact textures that were "
+"already imported before. To make this setting apply to textures that were "
+"already imported, exit the editor, remove the [code].import/[/code] folder "
+"located inside the project folder then restart the editor (see [member "
+"application/config/use_hidden_project_data_directory])."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1475
+msgid ""
+"If [code]true[/code], the texture importer will import VRAM-compressed "
+"textures using the PowerVR Texture Compression algorithm. This texture "
+"compression algorithm is only supported on iOS.\n"
+"[b]Note:[/b] Changing this setting does [i]not[/i] impact textures that were "
+"already imported before. To make this setting apply to textures that were "
+"already imported, exit the editor, remove the [code].import/[/code] folder "
+"located inside the project folder then restart the editor (see [member "
+"application/config/use_hidden_project_data_directory])."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1479
+msgid ""
+"If [code]true[/code], the texture importer will import VRAM-compressed "
+"textures using the S3 Texture Compression algorithm. This algorithm is only "
+"supported on desktop platforms and consoles.\n"
+"[b]Note:[/b] Changing this setting does [i]not[/i] impact textures that were "
+"already imported before. To make this setting apply to textures that were "
+"already imported, exit the editor, remove the [code].import/[/code] folder "
+"located inside the project folder then restart the editor (see [member "
+"application/config/use_hidden_project_data_directory])."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1483
+msgid ""
+"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
+"pixels)."
+msgstr ""
+
+#: doc/classes/ProximityGroup.xml:4 doc/classes/ProximityGroup.xml:7
+msgid "General-purpose proximity detection node."
+msgstr ""
+
+#: doc/classes/QuadMesh.xml:4
+msgid "Class representing a square mesh."
+msgstr ""
+
+#: doc/classes/QuadMesh.xml:7
+msgid ""
+"Class representing a square [PrimitiveMesh]. This flat mesh does not have a "
+"thickness. By default, this mesh is aligned on the X and Y axes; this "
+"default rotation is more suited for use with billboarded materials. Unlike "
+"[PlaneMesh], this mesh doesn't provide subdivision options."
+msgstr ""
+
+#: doc/classes/QuadMesh.xml:11 doc/classes/Viewport.xml:19
+#: doc/classes/ViewportTexture.xml:13
+msgid "https://godotengine.org/asset-library/asset/129"
+msgstr ""
+
+#: doc/classes/QuadMesh.xml:17
+msgid "Offset of the generated Quad. Useful for particles."
+msgstr ""
+
+#: doc/classes/QuadMesh.xml:20
+msgid "Size on the X and Y axes."
+msgstr ""
+
+#: doc/classes/Quat.xml:4
+msgid "Quaternion."
+msgstr ""
+
+#: doc/classes/Quat.xml:7
+msgid ""
+"A unit quaternion used for representing 3D rotations. Quaternions need to be "
+"normalized to be used for rotation.\n"
+"It is similar to Basis, which implements matrix representation of rotations, "
+"and can be parametrized using both an axis-angle pair or Euler angles. Basis "
+"stores rotation, scale, and shearing, while Quat only stores rotation.\n"
+"Due to its compactness and the way it is stored in memory, certain "
+"operations (obtaining axis-angle and performing SLERP, in particular) are "
+"more efficient and robust against floating-point errors."
+msgstr ""
+
+#: doc/classes/Quat.xml:12
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/3d/using_transforms."
+"html#interpolating-with-quaternions"
+msgstr ""
+
+#: doc/classes/Quat.xml:20
+msgid "Constructs a quaternion from the given [Basis]."
+msgstr ""
+
+#: doc/classes/Quat.xml:27
+msgid ""
+"Constructs a quaternion that will perform a rotation specified by Euler "
+"angles (in the YXZ convention: when decomposing, first Z, then X, and Y "
+"last), given in the vector format as (X angle, Y angle, Z angle)."
+msgstr ""
+
+#: doc/classes/Quat.xml:35
+msgid ""
+"Constructs a quaternion that will rotate around the given axis by the "
+"specified angle. The axis must be a normalized vector."
+msgstr ""
+
+#: doc/classes/Quat.xml:45
+msgid "Constructs a quaternion defined by the given values."
+msgstr ""
+
+#: doc/classes/Quat.xml:52
+msgid ""
+"Returns the angle between this quaternion and [code]to[/code]. This is the "
+"magnitude of the angle you would need to rotate by to get from one to the "
+"other.\n"
+"[b]Note:[/b] This method has an abnormally high amount of floating-point "
+"error, so methods such as [method @GDScript.is_zero_approx] will not work "
+"reliably."
+msgstr ""
+
+#: doc/classes/Quat.xml:63
+msgid ""
+"Performs a cubic spherical interpolation between quaternions [code]pre_a[/"
+"code], this vector, [code]b[/code], and [code]post_b[/code], by the given "
+"amount [code]weight[/code]."
+msgstr ""
+
+#: doc/classes/Quat.xml:70
+msgid "Returns the dot product of two quaternions."
+msgstr ""
+
+#: doc/classes/Quat.xml:76
+msgid ""
+"Returns Euler angles (in the YXZ convention: when decomposing, first Z, then "
+"X, and Y last) corresponding to the rotation represented by the unit "
+"quaternion. Returned vector contains the rotation angles in the format (X "
+"angle, Y angle, Z angle)."
+msgstr ""
+
+#: doc/classes/Quat.xml:82
+msgid "Returns the inverse of the quaternion."
+msgstr ""
+
+#: doc/classes/Quat.xml:89
+msgid ""
+"Returns [code]true[/code] if this quaternion and [code]quat[/code] are "
+"approximately equal, by running [method @GDScript.is_equal_approx] on each "
+"component."
+msgstr ""
+
+#: doc/classes/Quat.xml:95
+msgid "Returns whether the quaternion is normalized or not."
+msgstr ""
+
+#: doc/classes/Quat.xml:101
+msgid "Returns the length of the quaternion."
+msgstr ""
+
+#: doc/classes/Quat.xml:107
+msgid "Returns the length of the quaternion, squared."
+msgstr ""
+
+#: doc/classes/Quat.xml:113
+msgid "Returns a copy of the quaternion, normalized to unit length."
+msgstr ""
+
+#: doc/classes/Quat.xml:120
+msgid ""
+"Sets the quaternion to a rotation which rotates around axis by the specified "
+"angle, in radians. The axis must be a normalized vector."
+msgstr ""
+
+#: doc/classes/Quat.xml:126
+msgid ""
+"Sets the quaternion to a rotation specified by Euler angles (in the YXZ "
+"convention: when decomposing, first Z, then X, and Y last), given in the "
+"vector format as (X angle, Y angle, Z angle)."
+msgstr ""
+
+#: doc/classes/Quat.xml:134
+msgid ""
+"Returns the result of the spherical linear interpolation between this "
+"quaternion and [code]to[/code] by amount [code]weight[/code].\n"
+"[b]Note:[/b] Both quaternions must be normalized."
+msgstr ""
+
+#: doc/classes/Quat.xml:143
+msgid ""
+"Returns the result of the spherical linear interpolation between this "
+"quaternion and [code]to[/code] by amount [code]weight[/code], but without "
+"checking if the rotation path is not bigger than 90 degrees."
+msgstr ""
+
+#: doc/classes/Quat.xml:150
+msgid "Returns a vector transformed (multiplied) by this quaternion."
+msgstr ""
+
+#: doc/classes/Quat.xml:156
+msgid ""
+"W component of the quaternion (real part).\n"
+"Quaternion components should usually not be manipulated directly."
+msgstr ""
+
+#: doc/classes/Quat.xml:160
+msgid ""
+"X component of the quaternion (imaginary [code]i[/code] axis part).\n"
+"Quaternion components should usually not be manipulated directly."
+msgstr ""
+
+#: doc/classes/Quat.xml:164
+msgid ""
+"Y component of the quaternion (imaginary [code]j[/code] axis part).\n"
+"Quaternion components should usually not be manipulated directly."
+msgstr ""
+
+#: doc/classes/Quat.xml:168
+msgid ""
+"Z component of the quaternion (imaginary [code]k[/code] axis part).\n"
+"Quaternion components should usually not be manipulated directly."
+msgstr ""
+
+#: doc/classes/Quat.xml:174
+msgid ""
+"The identity quaternion, representing no rotation. Equivalent to an identity "
+"[Basis] matrix. If a vector is transformed by an identity quaternion, it "
+"will not change."
+msgstr ""
+
+#: doc/classes/RandomNumberGenerator.xml:4
+msgid "A class for generating pseudo-random numbers."
+msgstr ""
+
+#: doc/classes/RandomNumberGenerator.xml:7
+msgid ""
+"RandomNumberGenerator is a class for generating pseudo-random numbers. It "
+"currently uses [url=http://www.pcg-random.org/]PCG32[/url].\n"
+"[b]Note:[/b] The underlying algorithm is an implementation detail. As a "
+"result, it should not be depended upon for reproducible random streams "
+"across Godot versions.\n"
+"To generate a random float number (within a given range) based on a time-"
+"dependant seed:\n"
+"[codeblock]\n"
+"var rng = RandomNumberGenerator.new()\n"
+"func _ready():\n"
+" rng.randomize()\n"
+" var my_random_number = rng.randf_range(-10.0, 10.0)\n"
+"[/codeblock]\n"
+"[b]Note:[/b] The default values of [member seed] and [member state] "
+"properties are pseudo-random, and changes when calling [method randomize]. "
+"The [code]0[/code] value documented here is a placeholder, and not the "
+"actual default seed."
+msgstr ""
+
+#: doc/classes/RandomNumberGenerator.xml:19
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/math/random_number_generation."
+"html"
+msgstr ""
+
+#: doc/classes/RandomNumberGenerator.xml:25
+msgid ""
+"Generates a pseudo-random float between [code]0.0[/code] and [code]1.0[/"
+"code] (inclusive)."
+msgstr ""
+
+#: doc/classes/RandomNumberGenerator.xml:33
+msgid ""
+"Generates a pseudo-random float between [code]from[/code] and [code]to[/"
+"code] (inclusive)."
+msgstr ""
+
+#: doc/classes/RandomNumberGenerator.xml:41
+msgid ""
+"Generates a [url=https://en.wikipedia.org/wiki/Normal_distribution]normally-"
+"distributed[/url] pseudo-random number, using Box-Muller transform with the "
+"specified [code]mean[/code] and a standard [code]deviation[/code]. This is "
+"also called Gaussian distribution."
+msgstr ""
+
+#: doc/classes/RandomNumberGenerator.xml:47
+msgid ""
+"Generates a pseudo-random 32-bit unsigned integer between [code]0[/code] and "
+"[code]4294967295[/code] (inclusive)."
+msgstr ""
+
+#: doc/classes/RandomNumberGenerator.xml:55
+msgid ""
+"Generates a pseudo-random 32-bit signed integer between [code]from[/code] "
+"and [code]to[/code] (inclusive)."
+msgstr ""
+
+#: doc/classes/RandomNumberGenerator.xml:61
+msgid "Setups a time-based seed to generator."
+msgstr ""
+
+#: doc/classes/RandomNumberGenerator.xml:67
+msgid ""
+"Initializes the random number generator state based on the given seed value. "
+"A given seed will give a reproducible sequence of pseudo-random numbers.\n"
+"[b]Note:[/b] The RNG does not have an avalanche effect, and can output "
+"similar random streams given similar seeds. Consider using a hash function "
+"to improve your seed quality if they're sourced externally.\n"
+"[b]Note:[/b] Setting this property produces a side effect of changing the "
+"internal [member state], so make sure to initialize the seed [i]before[/i] "
+"modifying the [member state]:\n"
+"[codeblock]\n"
+"var rng = RandomNumberGenerator.new()\n"
+"rng.seed = hash(\"Godot\")\n"
+"rng.state = 100 # Restore to some previously saved state.\n"
+"[/codeblock]\n"
+"[b]Warning:[/b] the getter of this property returns the previous [member "
+"state], and not the initial seed value, which is going to be fixed in Godot "
+"4.0."
+msgstr ""
+
+#: doc/classes/RandomNumberGenerator.xml:78
+msgid ""
+"The current state of the random number generator. Save and restore this "
+"property to restore the generator to a previous state:\n"
+"[codeblock]\n"
+"var rng = RandomNumberGenerator.new()\n"
+"print(rng.randf())\n"
+"var saved_state = rng.state # Store current state.\n"
+"print(rng.randf()) # Advance internal state.\n"
+"rng.state = saved_state # Restore the state.\n"
+"print(rng.randf()) # Prints the same value as in previous.\n"
+"[/codeblock]\n"
+"[b]Note:[/b] Do not set state to arbitrary values, since the random number "
+"generator requires the state to have certain qualities to behave properly. "
+"It should only be set to values that came from the state property itself. To "
+"initialize the random number generator with arbitrary input, use [member "
+"seed] instead."
+msgstr ""
+
+#: doc/classes/Range.xml:4
+msgid "Abstract base class for range-based controls."
+msgstr ""
+
+#: doc/classes/Range.xml:7
+msgid ""
+"Range is a base class for [Control] nodes that change a floating-point "
+"[i]value[/i] between a [i]minimum[/i] and a [i]maximum[/i], using [i]step[/"
+"i] and [i]page[/i], for example a [ScrollBar]."
+msgstr ""
+
+#: doc/classes/Range.xml:16
+msgid ""
+"Binds two ranges together along with any ranges previously grouped with "
+"either of them. When any of range's member variables change, it will share "
+"the new value with all other ranges in its group."
+msgstr ""
+
+#: doc/classes/Range.xml:22
+msgid "Stops range from sharing its member variables with any other."
+msgstr ""
+
+#: doc/classes/Range.xml:28
+msgid ""
+"If [code]true[/code], [member value] may be greater than [member max_value]."
+msgstr ""
+
+#: doc/classes/Range.xml:31
+msgid ""
+"If [code]true[/code], [member value] may be less than [member min_value]."
+msgstr ""
+
+#: doc/classes/Range.xml:34
+msgid ""
+"If [code]true[/code], and [code]min_value[/code] is greater than 0, "
+"[code]value[/code] will be represented exponentially rather than linearly."
+msgstr ""
+
+#: doc/classes/Range.xml:37
+msgid ""
+"Maximum value. Range is clamped if [code]value[/code] is greater than "
+"[code]max_value[/code]."
+msgstr ""
+
+#: doc/classes/Range.xml:40
+msgid ""
+"Minimum value. Range is clamped if [code]value[/code] is less than "
+"[code]min_value[/code]."
+msgstr ""
+
+#: doc/classes/Range.xml:43
+msgid ""
+"Page size. Used mainly for [ScrollBar]. ScrollBar's length is its size "
+"multiplied by [code]page[/code] over the difference between [code]min_value[/"
+"code] and [code]max_value[/code]."
+msgstr ""
+
+#: doc/classes/Range.xml:46
+msgid "The value mapped between 0 and 1."
+msgstr ""
+
+#: doc/classes/Range.xml:49
+msgid ""
+"If [code]true[/code], [code]value[/code] will always be rounded to the "
+"nearest integer."
+msgstr ""
+
+#: doc/classes/Range.xml:52
+msgid ""
+"If greater than 0, [code]value[/code] will always be rounded to a multiple "
+"of [code]step[/code]. If [code]rounded[/code] is also [code]true[/code], "
+"[code]value[/code] will first be rounded to a multiple of [code]step[/code] "
+"then rounded to the nearest integer."
+msgstr ""
+
+#: doc/classes/Range.xml:55
+msgid "Range's current value."
+msgstr ""
+
+#: doc/classes/Range.xml:61
+msgid ""
+"Emitted when [member min_value], [member max_value], [member page], or "
+"[member step] change."
+msgstr ""
+
+#: doc/classes/Range.xml:67
+msgid "Emitted when [member value] changes."
+msgstr ""
+
+#: doc/classes/RayCast.xml:4 doc/classes/RayCast2D.xml:4
+msgid "Query the closest object intersecting a ray."
+msgstr ""
+
+#: doc/classes/RayCast.xml:7
+msgid ""
+"A RayCast represents a line from its origin to its destination position, "
+"[code]cast_to[/code]. It is used to query the 3D space in order to find the "
+"closest object along the path of the ray.\n"
+"RayCast can ignore some objects by adding them to the exception list via "
+"[code]add_exception[/code] or by setting proper filtering with collision "
+"layers and masks.\n"
+"RayCast can be configured to report collisions with [Area]s ([member "
+"collide_with_areas]) and/or [PhysicsBody]s ([member collide_with_bodies]).\n"
+"Only enabled raycasts will be able to query the space and report "
+"collisions.\n"
+"RayCast calculates intersection every physics frame (see [Node]), and the "
+"result is cached so it can be used later until the next frame. If multiple "
+"queries are required between physics frames (or during the same frame), use "
+"[method force_raycast_update] after adjusting the raycast."
+msgstr ""
+
+#: doc/classes/RayCast.xml:22 doc/classes/RayCast2D.xml:21
+msgid ""
+"Adds a collision exception so the ray does not report collisions with the "
+"specified node."
+msgstr ""
+
+#: doc/classes/RayCast.xml:29 doc/classes/RayCast2D.xml:28
+msgid ""
+"Adds a collision exception so the ray does not report collisions with the "
+"specified [RID]."
+msgstr ""
+
+#: doc/classes/RayCast.xml:35 doc/classes/RayCast2D.xml:34
+msgid "Removes all collision exceptions for this ray."
+msgstr ""
+
+#: doc/classes/RayCast.xml:41
+msgid ""
+"Updates the collision information for the ray.\n"
+"Use this method to update the collision information immediately instead of "
+"waiting for the next [code]_physics_process[/code] call, for example if the "
+"ray or its parent has changed state.\n"
+"[b]Note:[/b] [code]enabled[/code] is not required for this to work."
+msgstr ""
+
+#: doc/classes/RayCast.xml:49 doc/classes/RayCast2D.xml:47
+msgid ""
+"Returns the first object that the ray intersects, or [code]null[/code] if no "
+"object is intersecting the ray (i.e. [method is_colliding] returns "
+"[code]false[/code])."
+msgstr ""
+
+#: doc/classes/RayCast.xml:55 doc/classes/RayCast2D.xml:53
+msgid ""
+"Returns the shape ID of the first object that the ray intersects, or "
+"[code]0[/code] if no object is intersecting the ray (i.e. [method "
+"is_colliding] returns [code]false[/code])."
+msgstr ""
+
+#: doc/classes/RayCast.xml:62
+msgid ""
+"Returns [code]true[/code] if the bit index passed is turned on.\n"
+"[b]Note:[/b] Bit indices range from 0-19."
+msgstr ""
+
+#: doc/classes/RayCast.xml:69 doc/classes/RayCast2D.xml:66
+msgid ""
+"Returns the normal of the intersecting object's shape at the collision point."
+msgstr ""
+
+#: doc/classes/RayCast.xml:75 doc/classes/RayCast2D.xml:72
+msgid ""
+"Returns the collision point at which the ray intersects the closest object.\n"
+"[b]Note:[/b] This point is in the [b]global[/b] coordinate system."
+msgstr ""
+
+#: doc/classes/RayCast.xml:82 doc/classes/RayCast2D.xml:79
+msgid ""
+"Returns whether any object is intersecting with the ray's vector "
+"(considering the vector length)."
+msgstr ""
+
+#: doc/classes/RayCast.xml:89 doc/classes/RayCast2D.xml:86
+msgid ""
+"Removes a collision exception so the ray does report collisions with the "
+"specified node."
+msgstr ""
+
+#: doc/classes/RayCast.xml:96 doc/classes/RayCast2D.xml:93
+msgid ""
+"Removes a collision exception so the ray does report collisions with the "
+"specified [RID]."
+msgstr ""
+
+#: doc/classes/RayCast.xml:104
+msgid ""
+"Sets the bit index passed to the [code]value[/code] passed.\n"
+"[b]Note:[/b] Bit indexes range from 0-19."
+msgstr ""
+
+#: doc/classes/RayCast.xml:111 doc/classes/RayCast2D.xml:107
+msgid ""
+"The ray's destination point, relative to the RayCast's [code]position[/code]."
+msgstr ""
+
+#: doc/classes/RayCast.xml:114
+msgid "If [code]true[/code], collision with [Area]s will be reported."
+msgstr ""
+
+#: doc/classes/RayCast.xml:117
+msgid "If [code]true[/code], collision with [PhysicsBody]s will be reported."
+msgstr ""
+
+#: doc/classes/RayCast.xml:120 doc/classes/RayCast2D.xml:116
+msgid ""
+"The ray's collision mask. Only objects in at least one collision layer "
+"enabled in the mask will be detected. See [url=https://docs.godotengine.org/"
+"en/3.4/tutorials/physics/physics_introduction.html#collision-layers-and-"
+"masks]Collision layers and masks[/url] in the documentation for more "
+"information."
+msgstr ""
+
+#: doc/classes/RayCast.xml:123
+msgid ""
+"The custom color to use to draw the shape in the editor and at run-time if "
+"[b]Visible Collision Shapes[/b] is enabled in the [b]Debug[/b] menu. This "
+"color will be highlighted at run-time if the [RayCast] is colliding with "
+"something.\n"
+"If set to [code]Color(0.0, 0.0, 0.0)[/code] (by default), the color set in "
+"[member ProjectSettings.debug/shapes/collision/shape_color] is used."
+msgstr ""
+
+#: doc/classes/RayCast.xml:127
+msgid ""
+"If set to [code]1[/code], a line is used as the debug shape. Otherwise, a "
+"truncated pyramid is drawn to represent the [RayCast]. Requires [b]Visible "
+"Collision Shapes[/b] to be enabled in the [b]Debug[/b] menu for the debug "
+"shape to be visible at run-time."
+msgstr ""
+
+#: doc/classes/RayCast.xml:130 doc/classes/RayCast2D.xml:119
+msgid "If [code]true[/code], collisions will be reported."
+msgstr ""
+
+#: doc/classes/RayCast.xml:133
+msgid ""
+"If [code]true[/code], collisions will be ignored for this RayCast's "
+"immediate parent."
+msgstr ""
+
+#: doc/classes/RayCast2D.xml:7
+msgid ""
+"A RayCast represents a line from its origin to its destination position, "
+"[code]cast_to[/code]. It is used to query the 2D space in order to find the "
+"closest object along the path of the ray.\n"
+"RayCast2D can ignore some objects by adding them to the exception list via "
+"[code]add_exception[/code], by setting proper filtering with collision "
+"layers, or by filtering object types with type masks.\n"
+"RayCast2D can be configured to report collisions with [Area2D]s ([member "
+"collide_with_areas]) and/or [PhysicsBody2D]s ([member "
+"collide_with_bodies]).\n"
+"Only enabled raycasts will be able to query the space and report "
+"collisions.\n"
+"RayCast2D calculates intersection every physics frame (see [Node]), and the "
+"result is cached so it can be used later until the next frame. If multiple "
+"queries are required between physics frames (or during the same frame) use "
+"[method force_raycast_update] after adjusting the raycast."
+msgstr ""
+
+#: doc/classes/RayCast2D.xml:40
+msgid ""
+"Updates the collision information for the ray. Use this method to update the "
+"collision information immediately instead of waiting for the next "
+"[code]_physics_process[/code] call, for example if the ray or its parent has "
+"changed state.\n"
+"[b]Note:[/b] [code]enabled[/code] is not required for this to work."
+msgstr ""
+
+#: doc/classes/RayCast2D.xml:101
+msgid ""
+"Sets or clears individual bits on the collision mask. This makes selecting "
+"the areas scanned easier."
+msgstr ""
+
+#: doc/classes/RayCast2D.xml:110
+msgid "If [code]true[/code], collision with [Area2D]s will be reported."
+msgstr ""
+
+#: doc/classes/RayCast2D.xml:113
+msgid "If [code]true[/code], collision with [PhysicsBody2D]s will be reported."
+msgstr ""
+
+#: doc/classes/RayCast2D.xml:122
+msgid ""
+"If [code]true[/code], the parent node will be excluded from collision "
+"detection."
+msgstr ""
+
+#: doc/classes/RayShape.xml:4
+msgid "Ray shape for 3D collisions."
+msgstr ""
+
+#: doc/classes/RayShape.xml:7
+msgid ""
+"Ray shape for 3D collisions, which can be set into a [PhysicsBody] or "
+"[Area]. A ray is not really a collision body; instead, it tries to separate "
+"itself from whatever is touching its far endpoint. It's often useful for "
+"characters."
+msgstr ""
+
+#: doc/classes/RayShape.xml:15 doc/classes/RayShape2D.xml:15
+msgid "The ray's length."
+msgstr ""
+
+#: doc/classes/RayShape.xml:18 doc/classes/RayShape2D.xml:18
+msgid "If [code]true[/code], allow the shape to return the correct normal."
+msgstr ""
+
+#: doc/classes/RayShape2D.xml:4
+msgid "Ray shape for 2D collisions."
+msgstr ""
+
+#: doc/classes/RayShape2D.xml:7
+msgid ""
+"Ray shape for 2D collisions. A ray is not really a collision body; instead, "
+"it tries to separate itself from whatever is touching its far endpoint. It's "
+"often useful for characters."
+msgstr ""
+
+#: doc/classes/Rect2.xml:4
+msgid "2D axis-aligned bounding box."
+msgstr ""
+
+#: doc/classes/Rect2.xml:7
+msgid ""
+"[Rect2] consists of a position, a size, and several utility functions. It is "
+"typically used for fast overlap tests.\n"
+"It uses floating-point coordinates.\n"
+"The 3D counterpart to [Rect2] is [AABB]."
+msgstr ""
+
+#: doc/classes/Rect2.xml:22
+msgid "Constructs a [Rect2] by position and size."
+msgstr ""
+
+#: doc/classes/Rect2.xml:32
+msgid "Constructs a [Rect2] by x, y, width, and height."
+msgstr ""
+
+#: doc/classes/Rect2.xml:38
+msgid ""
+"Returns a [Rect2] with equivalent position and area, modified so that the "
+"top-left corner is the origin and [code]width[/code] and [code]height[/code] "
+"are positive."
+msgstr ""
+
+#: doc/classes/Rect2.xml:45
+msgid "Returns the intersection of this [Rect2] and b."
+msgstr ""
+
+#: doc/classes/Rect2.xml:52
+msgid ""
+"Returns [code]true[/code] if this [Rect2] completely encloses another one."
+msgstr ""
+
+#: doc/classes/Rect2.xml:59
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Rect2.xml:72
+msgid "Returns the area of the [Rect2]."
+msgstr ""
+
+#: doc/classes/Rect2.xml:79
+msgid ""
+"Returns a copy of the [Rect2] grown a given amount of units towards all the "
+"sides."
+msgstr ""
+
+#: doc/classes/Rect2.xml:89
+msgid ""
+"Returns a copy of the [Rect2] grown a given amount of units towards each "
+"direction individually."
+msgstr ""
+
+#: doc/classes/Rect2.xml:97
+msgid ""
+"Returns a copy of the [Rect2] grown a given amount of units towards the "
+"[enum Margin] direction."
+msgstr ""
+
+#: doc/classes/Rect2.xml:103
+msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
+msgstr ""
+
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
+msgstr ""
+
+#: doc/classes/Rect2.xml:119
+msgid ""
+"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
+"they have at least one point in common).\n"
+"If [code]include_borders[/code] is [code]true[/code], they will also be "
+"considered overlapping if their borders touch, even without intersection."
+msgstr ""
+
+#: doc/classes/Rect2.xml:127
+msgid ""
+"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
+"approximately equal, by calling [code]is_equal_approx[/code] on each "
+"component."
+msgstr ""
+
+#: doc/classes/Rect2.xml:134
+msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
+msgstr ""
+
+#: doc/classes/RectangleShape2D.xml:4
+msgid "Rectangle shape for 2D collisions."
+msgstr ""
+
+#: doc/classes/RectangleShape2D.xml:7
+msgid ""
+"Rectangle shape for 2D collisions. This shape is useful for modeling box-"
+"like 2D objects."
+msgstr ""
+
+#: doc/classes/RectangleShape2D.xml:17
+msgid ""
+"The rectangle's half extents. The width and height of this shape is twice "
+"the half extents."
+msgstr ""
+
+#: doc/classes/Reference.xml:4
+msgid "Base class for reference-counted objects."
+msgstr ""
+
+#: doc/classes/Reference.xml:7
+msgid ""
+"Base class for any object that keeps a reference count. [Resource] and many "
+"other helper objects inherit this class.\n"
+"Unlike other [Object] types, References keep an internal reference counter "
+"so that they are automatically released when no longer in use, and only "
+"then. References therefore do not need to be freed manually with [method "
+"Object.free].\n"
+"In the vast majority of use cases, instantiating and using [Reference]-"
+"derived types is all you need to do. The methods provided in this class are "
+"only for advanced users, and can cause issues if misused.\n"
+"[b]Note:[/b] In C#, references will not be freed instantly after they are no "
+"longer in use. Instead, garbage collection will run periodically and will "
+"free references that are no longer in use. This means that unused references "
+"will linger on for a while before being removed."
+msgstr ""
+
+#: doc/classes/Reference.xml:19
+msgid ""
+"Initializes the internal reference counter. Use this only if you really know "
+"what you are doing.\n"
+"Returns whether the initialization was successful."
+msgstr ""
+
+#: doc/classes/Reference.xml:26
+msgid ""
+"Increments the internal reference counter. Use this only if you really know "
+"what you are doing.\n"
+"Returns [code]true[/code] if the increment was successful, [code]false[/"
+"code] otherwise."
+msgstr ""
+
+#: doc/classes/Reference.xml:33
+msgid ""
+"Decrements the internal reference counter. Use this only if you really know "
+"what you are doing.\n"
+"Returns [code]true[/code] if the decrement was successful, [code]false[/"
+"code] otherwise."
+msgstr ""
+
+#: doc/classes/ReferenceRect.xml:4
+msgid "Reference frame for GUI."
+msgstr ""
+
+#: doc/classes/ReferenceRect.xml:7
+msgid ""
+"A rectangle box that displays only a [member border_color] border color "
+"around its rectangle. [ReferenceRect] has no fill [Color]. If you need to "
+"display a rectangle filled with a solid color, consider using [ColorRect] "
+"instead."
+msgstr ""
+
+#: doc/classes/ReferenceRect.xml:15
+msgid "Sets the border [Color] of the [ReferenceRect]."
+msgstr ""
+
+#: doc/classes/ReferenceRect.xml:18
+msgid ""
+"Sets the border width of the [ReferenceRect]. The border grows both inwards "
+"and outwards with respect to the rectangle box."
+msgstr ""
+
+#: doc/classes/ReferenceRect.xml:21
+msgid ""
+"If set to [code]true[/code], the [ReferenceRect] will only be visible while "
+"in editor. Otherwise, [ReferenceRect] will be visible in game."
+msgstr ""
+
+#: doc/classes/ReflectionProbe.xml:4
+msgid "Captures its surroundings to create reflections."
+msgstr ""
+
+#: doc/classes/ReflectionProbe.xml:7
+msgid ""
+"Capture its surroundings as a dual paraboloid image, and stores versions of "
+"it with increasing levels of blur to simulate different material "
+"roughnesses.\n"
+"The [ReflectionProbe] is used to create high-quality reflections at the cost "
+"of performance. It can be combined with [GIProbe]s and Screen Space "
+"Reflections to achieve high quality reflections. [ReflectionProbe]s render "
+"all objects within their [member cull_mask], so updating them can be quite "
+"expensive. It is best to update them once with the important static objects "
+"and then leave them.\n"
+"[b]Note:[/b] By default Godot will only render 16 reflection probes. If you "
+"need more, increase the number of atlas subdivisions. This setting can be "
+"found in [member ProjectSettings.rendering/quality/reflections/"
+"atlas_subdiv].\n"
+"[b]Note:[/b] The GLES2 backend will only display two reflection probes at "
+"the same time for a single mesh. If possible, split up large meshes that "
+"span over multiple reflection probes into smaller ones."
+msgstr ""
+
+#: doc/classes/ReflectionProbe.xml:13
+msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/reflection_probes.html"
+msgstr ""
+
+#: doc/classes/ReflectionProbe.xml:19
+msgid ""
+"If [code]true[/code], enables box projection. This makes reflections look "
+"more correct in rectangle-shaped rooms by offsetting the reflection center "
+"depending on the camera's location."
+msgstr ""
+
+#: doc/classes/ReflectionProbe.xml:22
+msgid ""
+"Sets the cull mask which determines what objects are drawn by this probe. "
+"Every [VisualInstance] with a layer included in this cull mask will be "
+"rendered by the probe. It is best to only include large objects which are "
+"likely to take up a lot of space in the reflection in order to save on "
+"rendering cost."
+msgstr ""
+
+#: doc/classes/ReflectionProbe.xml:25
+msgid ""
+"If [code]true[/code], computes shadows in the reflection probe. This makes "
+"the reflection probe slower to render; you may want to disable this if using "
+"the [constant UPDATE_ALWAYS] [member update_mode]."
+msgstr ""
+
+#: doc/classes/ReflectionProbe.xml:28
+msgid ""
+"The size of the reflection probe. The larger the extents the more space "
+"covered by the probe which will lower the perceived resolution. It is best "
+"to keep the extents only as large as you need them."
+msgstr ""
+
+#: doc/classes/ReflectionProbe.xml:31
+msgid ""
+"Defines the reflection intensity. Intensity modulates the strength of the "
+"reflection."
+msgstr ""
+
+#: doc/classes/ReflectionProbe.xml:34
+msgid ""
+"Sets the ambient light color to be used when this probe is set to [member "
+"interior_enable]."
+msgstr ""
+
+#: doc/classes/ReflectionProbe.xml:37
+msgid ""
+"Sets the contribution value for how much the reflection affects the ambient "
+"light for this reflection probe when set to [member interior_enable]. Useful "
+"so that ambient light matches the color of the room."
+msgstr ""
+
+#: doc/classes/ReflectionProbe.xml:40
+msgid ""
+"Sets the energy multiplier for this reflection probe's ambient light "
+"contribution when set to [member interior_enable]."
+msgstr ""
+
+#: doc/classes/ReflectionProbe.xml:43
+msgid ""
+"If [code]true[/code], reflections will ignore sky contribution. Ambient "
+"lighting is then controlled by the [code]interior_ambient_*[/code] "
+"properties."
+msgstr ""
+
+#: doc/classes/ReflectionProbe.xml:46
+msgid ""
+"Sets the max distance away from the probe an object can be before it is "
+"culled."
+msgstr ""
+
+#: doc/classes/ReflectionProbe.xml:49
+msgid ""
+"Sets the origin offset to be used when this reflection probe is in box "
+"project mode."
+msgstr ""
+
+#: doc/classes/ReflectionProbe.xml:52
+msgid ""
+"Sets how frequently the probe is updated. Can be [constant UPDATE_ONCE] or "
+"[constant UPDATE_ALWAYS]."
+msgstr ""
+
+#: doc/classes/ReflectionProbe.xml:57
+msgid "Update the probe once on the next frame."
+msgstr ""
+
+#: doc/classes/ReflectionProbe.xml:60
+msgid ""
+"Update the probe every frame. This is needed when you want to capture "
+"dynamic objects. However, it results in an increased render time. Use "
+"[constant UPDATE_ONCE] whenever possible."
+msgstr ""
+
+#: modules/regex/doc_classes/RegEx.xml:4
+msgid "Class for searching text for patterns using regular expressions."
+msgstr ""
+
+#: modules/regex/doc_classes/RegEx.xml:7
+msgid ""
+"A regular expression (or regex) is a compact language that can be used to "
+"recognise strings that follow a specific pattern, such as URLs, email "
+"addresses, complete sentences, etc. For instance, a regex of [code]ab[0-9][/"
+"code] would find any string that is [code]ab[/code] followed by any number "
+"from [code]0[/code] to [code]9[/code]. For a more in-depth look, you can "
+"easily find various tutorials and detailed explanations on the Internet.\n"
+"To begin, the RegEx object needs to be compiled with the search pattern "
+"using [method compile] before it can be used.\n"
+"[codeblock]\n"
+"var regex = RegEx.new()\n"
+"regex.compile(\"\\\\w-(\\\\d+)\")\n"
+"[/codeblock]\n"
+"The search pattern must be escaped first for GDScript before it is escaped "
+"for the expression. For example, [code]compile(\"\\\\d+\")[/code] would be "
+"read by RegEx as [code]\\d+[/code]. Similarly, [code]compile(\"\\\"(?:\\\\\\"
+"\\.|[^\\\"])*\\\"\")[/code] would be read as [code]\"(?:\\\\.|[^\"])*\"[/"
+"code].\n"
+"Using [method search], you can find the pattern within the given text. If a "
+"pattern is found, [RegExMatch] is returned and you can retrieve details of "
+"the results using methods such as [method RegExMatch.get_string] and [method "
+"RegExMatch.get_start].\n"
+"[codeblock]\n"
+"var regex = RegEx.new()\n"
+"regex.compile(\"\\\\w-(\\\\d+)\")\n"
+"var result = regex.search(\"abc n-0123\")\n"
+"if result:\n"
+" print(result.get_string()) # Would print n-0123\n"
+"[/codeblock]\n"
+"The results of capturing groups [code]()[/code] can be retrieved by passing "
+"the group number to the various methods in [RegExMatch]. Group 0 is the "
+"default and will always refer to the entire pattern. In the above example, "
+"calling [code]result.get_string(1)[/code] would give you [code]0123[/code].\n"
+"This version of RegEx also supports named capturing groups, and the names "
+"can be used to retrieve the results. If two or more groups have the same "
+"name, the name would only refer to the first one with a match.\n"
+"[codeblock]\n"
+"var regex = RegEx.new()\n"
+"regex.compile(\"d(?<digit>[0-9]+)|x(?<digit>[0-9a-f]+)\")\n"
+"var result = regex.search(\"the number is x2f\")\n"
+"if result:\n"
+" print(result.get_string(\"digit\")) # Would print 2f\n"
+"[/codeblock]\n"
+"If you need to process multiple results, [method search_all] generates a "
+"list of all non-overlapping results. This can be combined with a [code]for[/"
+"code] loop for convenience.\n"
+"[codeblock]\n"
+"for result in regex.search_all(\"d01, d03, d0c, x3f and x42\"):\n"
+" print(result.get_string(\"digit\"))\n"
+"# Would print 01 03 0 3f 42\n"
+"[/codeblock]\n"
+"[b]Example of splitting a string using a RegEx:[/b]\n"
+"[codeblock]\n"
+"var regex = RegEx.new()\n"
+"regex.compile(\"\\\\S+\") # Negated whitespace character class.\n"
+"var results = []\n"
+"for result in regex.search_all(\"One Two \\n\\tThree\"):\n"
+" results.push_back(result.get_string())\n"
+"# The `results` array now contains \"One\", \"Two\", \"Three\".\n"
+"[/codeblock]\n"
+"[b]Note:[/b] Godot's regex implementation is based on the [url=https://www."
+"pcre.org/]PCRE2[/url] library. You can view the full pattern reference "
+"[url=https://www.pcre.org/current/doc/html/pcre2pattern.html]here[/url].\n"
+"[b]Tip:[/b] You can use [url=https://regexr.com/]Regexr[/url] to test "
+"regular expressions online."
+msgstr ""
+
+#: modules/regex/doc_classes/RegEx.xml:55
+msgid ""
+"This method resets the state of the object, as if it was freshly created. "
+"Namely, it unassigns the regular expression of this object."
+msgstr ""
+
+#: modules/regex/doc_classes/RegEx.xml:62
+msgid ""
+"Compiles and assign the search pattern to use. Returns [constant OK] if the "
+"compilation is successful. If an error is encountered, details are printed "
+"to standard output and an error is returned."
+msgstr ""
+
+#: modules/regex/doc_classes/RegEx.xml:68
+msgid "Returns the number of capturing groups in compiled pattern."
+msgstr ""
+
+#: modules/regex/doc_classes/RegEx.xml:74
+msgid ""
+"Returns an array of names of named capturing groups in the compiled pattern. "
+"They are ordered by appearance."
+msgstr ""
+
+#: modules/regex/doc_classes/RegEx.xml:80
+msgid "Returns the original search pattern that was compiled."
+msgstr ""
+
+#: modules/regex/doc_classes/RegEx.xml:86
+msgid "Returns whether this object has a valid search pattern assigned."
+msgstr ""
+
+#: modules/regex/doc_classes/RegEx.xml:95
+msgid ""
+"Searches the text for the compiled pattern. Returns a [RegExMatch] container "
+"of the first matching result if found, otherwise [code]null[/code]. The "
+"region to search within can be specified without modifying where the start "
+"and end anchor would be."
+msgstr ""
+
+#: modules/regex/doc_classes/RegEx.xml:104
+msgid ""
+"Searches the text for the compiled pattern. Returns an array of [RegExMatch] "
+"containers for each non-overlapping result. If no results were found, an "
+"empty array is returned instead. The region to search within can be "
+"specified without modifying where the start and end anchor would be."
+msgstr ""
+
+#: modules/regex/doc_classes/RegEx.xml:115
+msgid ""
+"Searches the text for the compiled pattern and replaces it with the "
+"specified string. Escapes and backreferences such as [code]$1[/code] and "
+"[code]$name[/code] are expanded and resolved. By default, only the first "
+"instance is replaced, but it can be changed for all instances (global "
+"replacement). The region to search within can be specified without modifying "
+"where the start and end anchor would be."
+msgstr ""
+
+#: modules/regex/doc_classes/RegExMatch.xml:4
+msgid "Contains the results of a [RegEx] search."
+msgstr ""
+
+#: modules/regex/doc_classes/RegExMatch.xml:7
+msgid ""
+"Contains the results of a single [RegEx] match returned by [method RegEx."
+"search] and [method RegEx.search_all]. It can be used to find the position "
+"and range of the match and its capturing groups, and it can extract its "
+"substring for you."
+msgstr ""
+
+#: modules/regex/doc_classes/RegExMatch.xml:16
+msgid ""
+"Returns the end position of the match within the source string. The end "
+"position of capturing groups can be retrieved by providing its group number "
+"as an integer or its string name (if it's a named group). The default value "
+"of 0 refers to the whole pattern.\n"
+"Returns -1 if the group did not match or doesn't exist."
+msgstr ""
+
+#: modules/regex/doc_classes/RegExMatch.xml:23
+msgid "Returns the number of capturing groups."
+msgstr ""
+
+#: modules/regex/doc_classes/RegExMatch.xml:30
+msgid ""
+"Returns the starting position of the match within the source string. The "
+"starting position of capturing groups can be retrieved by providing its "
+"group number as an integer or its string name (if it's a named group). The "
+"default value of 0 refers to the whole pattern.\n"
+"Returns -1 if the group did not match or doesn't exist."
+msgstr ""
+
+#: modules/regex/doc_classes/RegExMatch.xml:38
+msgid ""
+"Returns the substring of the match from the source string. Capturing groups "
+"can be retrieved by providing its group number as an integer or its string "
+"name (if it's a named group). The default value of 0 refers to the whole "
+"pattern.\n"
+"Returns an empty string if the group did not match or doesn't exist."
+msgstr ""
+
+#: modules/regex/doc_classes/RegExMatch.xml:45
+msgid ""
+"A dictionary of named groups and its corresponding group number. Only groups "
+"that were matched are included. If multiple groups have the same name, that "
+"name would refer to the first matching one."
+msgstr ""
+
+#: modules/regex/doc_classes/RegExMatch.xml:48
+msgid "An [Array] of the match and its capturing groups."
+msgstr ""
+
+#: modules/regex/doc_classes/RegExMatch.xml:51
+msgid ""
+"The source string used with the search pattern to find this matching result."
+msgstr ""
+
+#: doc/classes/RemoteTransform.xml:4
+msgid ""
+"RemoteTransform pushes its own [Transform] to another [Spatial] derived Node "
+"in the scene."
+msgstr ""
+
+#: doc/classes/RemoteTransform.xml:7
+msgid ""
+"RemoteTransform pushes its own [Transform] to another [Spatial] derived Node "
+"(called the remote node) in the scene.\n"
+"It can be set to update another Node's position, rotation and/or scale. It "
+"can use either global or local coordinates."
+msgstr ""
+
+#: doc/classes/RemoteTransform.xml:16
+msgid ""
+"[RemoteTransform] caches the remote node. It may not notice if the remote "
+"node disappears; [method force_update_cache] forces it to update the cache "
+"again."
+msgstr ""
+
+#: doc/classes/RemoteTransform.xml:22
+msgid ""
+"The [NodePath] to the remote node, relative to the RemoteTransform's "
+"position in the scene."
+msgstr ""
+
+#: doc/classes/RemoteTransform.xml:25 doc/classes/RemoteTransform2D.xml:25
+msgid "If [code]true[/code], the remote node's position is updated."
+msgstr ""
+
+#: doc/classes/RemoteTransform.xml:28 doc/classes/RemoteTransform2D.xml:28
+msgid "If [code]true[/code], the remote node's rotation is updated."
+msgstr ""
+
+#: doc/classes/RemoteTransform.xml:31 doc/classes/RemoteTransform2D.xml:31
+msgid "If [code]true[/code], the remote node's scale is updated."
+msgstr ""
+
+#: doc/classes/RemoteTransform.xml:34 doc/classes/RemoteTransform2D.xml:34
+msgid ""
+"If [code]true[/code], global coordinates are used. If [code]false[/code], "
+"local coordinates are used."
+msgstr ""
+
+#: doc/classes/RemoteTransform2D.xml:4
+msgid ""
+"RemoteTransform2D pushes its own [Transform2D] to another [CanvasItem] "
+"derived Node in the scene."
+msgstr ""
+
+#: doc/classes/RemoteTransform2D.xml:7
+msgid ""
+"RemoteTransform2D pushes its own [Transform2D] to another [CanvasItem] "
+"derived Node (called the remote node) in the scene.\n"
+"It can be set to update another Node's position, rotation and/or scale. It "
+"can use either global or local coordinates."
+msgstr ""
+
+#: doc/classes/RemoteTransform2D.xml:16
+msgid ""
+"[RemoteTransform2D] caches the remote node. It may not notice if the remote "
+"node disappears; [method force_update_cache] forces it to update the cache "
+"again."
+msgstr ""
+
+#: doc/classes/RemoteTransform2D.xml:22
+msgid ""
+"The [NodePath] to the remote node, relative to the RemoteTransform2D's "
+"position in the scene."
+msgstr ""
+
+#: doc/classes/Resource.xml:4
+msgid "Base class for all resources."
+msgstr ""
+
+#: doc/classes/Resource.xml:7
+msgid ""
+"Resource is the base class for all Godot-specific resource types, serving "
+"primarily as data containers. Since they inherit from [Reference], resources "
+"are reference-counted and freed when no longer in use. They are also cached "
+"once loaded from disk, so that any further attempts to load a resource from "
+"a given path will return the same reference (all this in contrast to a "
+"[Node], which is not reference-counted and can be instanced from disk as "
+"many times as desired). Resources can be saved externally on disk or bundled "
+"into another object, such as a [Node] or another resource.\n"
+"[b]Note:[/b] In C#, resources will not be freed instantly after they are no "
+"longer in use. Instead, garbage collection will run periodically and will "
+"free resources that are no longer in use. This means that unused resources "
+"will linger on for a while before being removed."
+msgstr ""
+
+#: doc/classes/Resource.xml:11
+msgid ""
+"https://docs.godotengine.org/en/3.4/getting_started/step_by_step/resources."
+"html"
+msgstr ""
+
+#: doc/classes/Resource.xml:18
+msgid ""
+"Virtual function which can be overridden to customize the behavior value of "
+"[method setup_local_to_scene]."
+msgstr ""
+
+#: doc/classes/Resource.xml:25
+msgid ""
+"Duplicates the resource, returning a new resource with the exported members "
+"copied. [b]Note:[/b] To duplicate the resource the constructor is called "
+"without arguments. This method will error when the constructor doesn't have "
+"default values.\n"
+"By default, sub-resources are shared between resource copies for efficiency. "
+"This can be changed by passing [code]true[/code] to the [code]subresources[/"
+"code] argument which will copy the subresources.\n"
+"[b]Note:[/b] If [code]subresources[/code] is [code]true[/code], this method "
+"will only perform a shallow copy. Nested resources within subresources will "
+"not be duplicated and will still be shared.\n"
+"[b]Note:[/b] When duplicating a resource, only [code]export[/code]ed "
+"properties are copied. Other properties will be set to their default value "
+"in the new resource."
+msgstr ""
+
+#: doc/classes/Resource.xml:34
+msgid ""
+"Emits the [signal changed] signal.\n"
+"If external objects which depend on this resource should be updated, this "
+"method must be called manually whenever the state of this resource has "
+"changed (such as modification of properties).\n"
+"The method is equivalent to:\n"
+"[codeblock]\n"
+"emit_signal(\"changed\")\n"
+"[/codeblock]\n"
+"[b]Note:[/b] This method is called automatically for built-in resources."
+msgstr ""
+
+#: doc/classes/Resource.xml:46
+msgid ""
+"If [member resource_local_to_scene] is enabled and the resource was loaded "
+"from a [PackedScene] instantiation, returns the local scene where this "
+"resource's unique copy is in use. Otherwise, returns [code]null[/code]."
+msgstr ""
+
+#: doc/classes/Resource.xml:52
+msgid ""
+"Returns the RID of the resource (or an empty RID). Many resources (such as "
+"[Texture], [Mesh], etc) are high-level abstractions of resources stored in a "
+"server, so this function will return the original RID."
+msgstr ""
+
+#: doc/classes/Resource.xml:58
+msgid ""
+"This method is called when a resource with [member resource_local_to_scene] "
+"enabled is loaded from a [PackedScene] instantiation. Its behavior can be "
+"customized by overriding [method _setup_local_to_scene] from script.\n"
+"For most resources, this method performs no base logic. [ViewportTexture] "
+"performs custom logic to properly set the proxy texture and flags in the "
+"local viewport."
+msgstr ""
+
+#: doc/classes/Resource.xml:66
+msgid ""
+"Sets the path of the resource, potentially overriding an existing cache "
+"entry for this path. This differs from setting [member resource_path], as "
+"the latter would error out if another resource was already cached for the "
+"given path."
+msgstr ""
+
+#: doc/classes/Resource.xml:72
+msgid ""
+"If [code]true[/code], the resource will be made unique in each instance of "
+"its local scene. It can thus be modified in a scene instance without "
+"impacting other instances of that same scene."
+msgstr ""
+
+#: doc/classes/Resource.xml:75
+msgid ""
+"The name of the resource. This is an optional identifier. If [member "
+"resource_name] is not empty, its value will be displayed to represent the "
+"current resource in the editor inspector. For built-in scripts, the [member "
+"resource_name] will be displayed as the tab name in the script editor."
+msgstr ""
+
+#: doc/classes/Resource.xml:78
+msgid ""
+"The path to the resource. In case it has its own file, it will return its "
+"filepath. If it's tied to the scene, it will return the scene's path, "
+"followed by the resource's index."
+msgstr ""
+
+#: doc/classes/Resource.xml:84
+msgid ""
+"Emitted whenever the resource changes.\n"
+"[b]Note:[/b] This signal is not emitted automatically for custom resources, "
+"which means that you need to create a setter and emit the signal yourself."
+msgstr ""
+
+#: doc/classes/ResourceFormatLoader.xml:4
+msgid "Loads a specific resource type from a file."
+msgstr ""
+
+#: doc/classes/ResourceFormatLoader.xml:7
+msgid ""
+"Godot loads resources in the editor or in exported games using "
+"ResourceFormatLoaders. They are queried automatically via the "
+"[ResourceLoader] singleton, or when a resource with internal dependencies is "
+"loaded. Each file type may load as a different resource type, so multiple "
+"ResourceFormatLoaders are registered in the engine.\n"
+"Extending this class allows you to define your own loader. Be sure to "
+"respect the documented return types and values. You should give it a global "
+"class name with [code]class_name[/code] for it to be registered. Like built-"
+"in ResourceFormatLoaders, it will be called automatically when loading "
+"resources of its handled type(s). You may also implement a "
+"[ResourceFormatSaver].\n"
+"[b]Note:[/b] You can also extend [EditorImportPlugin] if the resource type "
+"you need exists but Godot is unable to load its format. Choosing one way "
+"over another depends on if the format is suitable or not for the final "
+"exported game. For example, it's better to import [code].png[/code] textures "
+"as [code].stex[/code] ([StreamTexture]) first, so they can be loaded with "
+"better efficiency on the graphics card."
+msgstr ""
+
+#: doc/classes/ResourceFormatLoader.xml:19
+msgid ""
+"If implemented, gets the dependencies of a given resource. If "
+"[code]add_types[/code] is [code]true[/code], paths should be appended "
+"[code]::TypeName[/code], where [code]TypeName[/code] is the class name of "
+"the dependency.\n"
+"[b]Note:[/b] Custom resource types defined by scripts aren't known by the "
+"[ClassDB], so you might just return [code]\"Resource\"[/code] for them."
+msgstr ""
+
+#: doc/classes/ResourceFormatLoader.xml:26
+msgid "Gets the list of extensions for files this loader is able to read."
+msgstr ""
+
+#: doc/classes/ResourceFormatLoader.xml:33
+msgid ""
+"Gets the class name of the resource associated with the given path. If the "
+"loader cannot handle it, it should return [code]\"\"[/code].\n"
+"[b]Note:[/b] Custom resource types defined by scripts aren't known by the "
+"[ClassDB], so you might just return [code]\"Resource\"[/code] for them."
+msgstr ""
+
+#: doc/classes/ResourceFormatLoader.xml:41
+msgid ""
+"Tells which resource class this loader can load.\n"
+"[b]Note:[/b] Custom resource types defined by scripts aren't known by the "
+"[ClassDB], so you might just handle [code]\"Resource\"[/code] for them."
+msgstr ""
+
+#: doc/classes/ResourceFormatLoader.xml:50
+msgid ""
+"Loads a resource when the engine finds this loader to be compatible. If the "
+"loaded resource is the result of an import, [code]original_path[/code] will "
+"target the source file. Returns a [Resource] object on success, or an [enum "
+"Error] constant in case of failure."
+msgstr ""
+
+#: doc/classes/ResourceFormatLoader.xml:58
+msgid ""
+"If implemented, renames dependencies within the given resource and saves it. "
+"[code]renames[/code] is a dictionary [code]{ String => String }[/code] "
+"mapping old dependency paths to new paths.\n"
+"Returns [constant OK] on success, or an [enum Error] constant in case of "
+"failure."
+msgstr ""
+
+#: doc/classes/ResourceFormatSaver.xml:4
+msgid "Saves a specific resource type to a file."
+msgstr ""
+
+#: doc/classes/ResourceFormatSaver.xml:7
+msgid ""
+"The engine can save resources when you do it from the editor, or when you "
+"use the [ResourceSaver] singleton. This is accomplished thanks to multiple "
+"[ResourceFormatSaver]s, each handling its own format and called "
+"automatically by the engine.\n"
+"By default, Godot saves resources as [code].tres[/code] (text-based), [code]."
+"res[/code] (binary) or another built-in format, but you can choose to create "
+"your own format by extending this class. Be sure to respect the documented "
+"return types and values. You should give it a global class name with "
+"[code]class_name[/code] for it to be registered. Like built-in "
+"ResourceFormatSavers, it will be called automatically when saving resources "
+"of its recognized type(s). You may also implement a [ResourceFormatLoader]."
+msgstr ""
+
+#: doc/classes/ResourceFormatSaver.xml:17
+msgid ""
+"Returns the list of extensions available for saving the resource object, "
+"provided it is recognized (see [method recognize])."
+msgstr ""
+
+#: doc/classes/ResourceFormatSaver.xml:24
+msgid "Returns whether the given resource object can be saved by this saver."
+msgstr ""
+
+#: doc/classes/ResourceFormatSaver.xml:33
+msgid ""
+"Saves the given resource object to a file at the target [code]path[/code]. "
+"[code]flags[/code] is a bitmask composed with [enum ResourceSaver."
+"SaverFlags] constants.\n"
+"Returns [constant OK] on success, or an [enum Error] constant in case of "
+"failure."
+msgstr ""
+
+#: doc/classes/ResourceImporter.xml:4
+msgid "Base class for the implementation of core resource importers."
+msgstr ""
+
+#: doc/classes/ResourceImporter.xml:7
+msgid ""
+"This is the base class for the resource importers implemented in core. To "
+"implement your own resource importers using editor plugins, see "
+"[EditorImportPlugin]."
+msgstr ""
+
+#: doc/classes/ResourceImporter.xml:16
+msgid "The default import order."
+msgstr ""
+
+#: doc/classes/ResourceImporter.xml:19
+msgid ""
+"The import order for scenes, which ensures scenes are imported [i]after[/i] "
+"all other core resources such as textures. Custom importers should generally "
+"have an import order lower than [code]100[/code] to avoid issues when "
+"importing scenes that rely on custom resources."
+msgstr ""
+
+#: doc/classes/ResourceInteractiveLoader.xml:4
+msgid "Interactive [Resource] loader."
+msgstr ""
+
+#: doc/classes/ResourceInteractiveLoader.xml:7
+msgid ""
+"Interactive [Resource] loader. This object is returned by [ResourceLoader] "
+"when performing an interactive load. It allows loading resources with high "
+"granularity, which makes it mainly useful for displaying loading bars or "
+"percentages."
+msgstr ""
+
+#: doc/classes/ResourceInteractiveLoader.xml:15
+msgid ""
+"Returns the loaded resource if the load operation completed successfully, "
+"[code]null[/code] otherwise."
+msgstr ""
+
+#: doc/classes/ResourceInteractiveLoader.xml:21
+msgid ""
+"Returns the load stage. The total amount of stages can be queried with "
+"[method get_stage_count]."
+msgstr ""
+
+#: doc/classes/ResourceInteractiveLoader.xml:27
+msgid ""
+"Returns the total amount of stages (calls to [method poll]) needed to "
+"completely load this resource."
+msgstr ""
+
+#: doc/classes/ResourceInteractiveLoader.xml:33
+msgid ""
+"Polls the loading operation, i.e. loads a data chunk up to the next stage.\n"
+"Returns [constant OK] if the poll is successful but the load operation has "
+"not finished yet (intermediate stage). This means [method poll] will have to "
+"be called again until the last stage is completed.\n"
+"Returns [constant ERR_FILE_EOF] if the load operation has completed "
+"successfully. The loaded resource can be obtained by calling [method "
+"get_resource].\n"
+"Returns another [enum Error] code if the poll has failed."
+msgstr ""
+
+#: doc/classes/ResourceInteractiveLoader.xml:42
+msgid ""
+"Polls the loading operation successively until the resource is completely "
+"loaded or a [method poll] fails.\n"
+"Returns [constant ERR_FILE_EOF] if the load operation has completed "
+"successfully. The loaded resource can be obtained by calling [method "
+"get_resource].\n"
+"Returns another [enum Error] code if a poll has failed, aborting the "
+"operation."
+msgstr ""
+
+#: doc/classes/ResourceLoader.xml:4
+msgid "Singleton used to load resource files."
+msgstr ""
+
+#: doc/classes/ResourceLoader.xml:7
+msgid ""
+"Singleton used to load resource files from the filesystem.\n"
+"It uses the many [ResourceFormatLoader] classes registered in the engine "
+"(either built-in or from a plugin) to load files into memory and convert "
+"them to a format that can be used by the engine."
+msgstr ""
+
+#: doc/classes/ResourceLoader.xml:19
+msgid ""
+"Returns whether a recognized resource exists for the given [code]path[/"
+"code].\n"
+"An optional [code]type_hint[/code] can be used to further specify the "
+"[Resource] type that should be handled by the [ResourceFormatLoader]."
+msgstr ""
+
+#: doc/classes/ResourceLoader.xml:27
+msgid ""
+"Returns the dependencies for the resource at the given [code]path[/code]."
+msgstr ""
+
+#: doc/classes/ResourceLoader.xml:34
+msgid "Returns the list of recognized extensions for a resource type."
+msgstr ""
+
+#: doc/classes/ResourceLoader.xml:41
+msgid ""
+"[i]Deprecated method.[/i] Use [method has_cached] or [method exists] instead."
+msgstr ""
+
+#: doc/classes/ResourceLoader.xml:48
+msgid ""
+"Returns whether a cached resource is available for the given [code]path[/"
+"code].\n"
+"Once a resource has been loaded by the engine, it is cached in memory for "
+"faster access, and future calls to the [method load] or [method "
+"load_interactive] methods will use the cached version. The cached resource "
+"can be overridden by using [method Resource.take_over_path] on a new "
+"resource for that same path."
+msgstr ""
+
+#: doc/classes/ResourceLoader.xml:58
+msgid ""
+"Loads a resource at the given [code]path[/code], caching the result for "
+"further access.\n"
+"The registered [ResourceFormatLoader]s are queried sequentially to find the "
+"first one which can handle the file's extension, and then attempt loading. "
+"If loading fails, the remaining ResourceFormatLoaders are also attempted.\n"
+"An optional [code]type_hint[/code] can be used to further specify the "
+"[Resource] type that should be handled by the [ResourceFormatLoader]. "
+"Anything that inherits from [Resource] can be used as a type hint, for "
+"example [Image].\n"
+"If [code]no_cache[/code] is [code]true[/code], the resource cache will be "
+"bypassed and the resource will be loaded anew. Otherwise, the cached "
+"resource will be returned if it exists.\n"
+"Returns an empty resource if no [ResourceFormatLoader] could handle the "
+"file.\n"
+"GDScript has a simplified [method @GDScript.load] built-in method which can "
+"be used in most situations, leaving the use of [ResourceLoader] for more "
+"advanced scenarios."
+msgstr ""
+
+#: doc/classes/ResourceLoader.xml:71
+msgid ""
+"Starts loading a resource interactively. The returned "
+"[ResourceInteractiveLoader] object allows to load with high granularity, "
+"calling its [method ResourceInteractiveLoader.poll] method successively to "
+"load chunks.\n"
+"An optional [code]type_hint[/code] can be used to further specify the "
+"[Resource] type that should be handled by the [ResourceFormatLoader]. "
+"Anything that inherits from [Resource] can be used as a type hint, for "
+"example [Image]."
+msgstr ""
+
+#: doc/classes/ResourceLoader.xml:79
+msgid ""
+"Changes the behavior on missing sub-resources. The default behavior is to "
+"abort loading."
+msgstr ""
+
+#: doc/classes/ResourcePreloader.xml:4
+msgid "Resource Preloader Node."
+msgstr ""
+
+#: doc/classes/ResourcePreloader.xml:7
+msgid ""
+"This node is used to preload sub-resources inside a scene, so when the scene "
+"is loaded, all the resources are ready to use and can be retrieved from the "
+"preloader.\n"
+"GDScript has a simplified [method @GDScript.preload] built-in method which "
+"can be used in most situations, leaving the use of [ResourcePreloader] for "
+"more advanced scenarios."
+msgstr ""
+
+#: doc/classes/ResourcePreloader.xml:18
+msgid ""
+"Adds a resource to the preloader with the given [code]name[/code]. If a "
+"resource with the given [code]name[/code] already exists, the new resource "
+"will be renamed to \"[code]name[/code] N\" where N is an incrementing number "
+"starting from 2."
+msgstr ""
+
+#: doc/classes/ResourcePreloader.xml:25
+msgid "Returns the resource associated to [code]name[/code]."
+msgstr ""
+
+#: doc/classes/ResourcePreloader.xml:31
+msgid "Returns the list of resources inside the preloader."
+msgstr ""
+
+#: doc/classes/ResourcePreloader.xml:38
+msgid ""
+"Returns [code]true[/code] if the preloader contains a resource associated to "
+"[code]name[/code]."
+msgstr ""
+
+#: doc/classes/ResourcePreloader.xml:45
+msgid ""
+"Removes the resource associated to [code]name[/code] from the preloader."
+msgstr ""
+
+#: doc/classes/ResourcePreloader.xml:53
+msgid ""
+"Renames a resource inside the preloader from [code]name[/code] to "
+"[code]newname[/code]."
+msgstr ""
+
+#: doc/classes/ResourceSaver.xml:4
+msgid "Singleton for saving Godot-specific resource types."
+msgstr ""
+
+#: doc/classes/ResourceSaver.xml:7
+msgid ""
+"Singleton for saving Godot-specific resource types to the filesystem.\n"
+"It uses the many [ResourceFormatSaver] classes registered in the engine "
+"(either built-in or from a plugin) to save engine-specific resource data to "
+"text-based (e.g. [code].tres[/code] or [code].tscn[/code]) or binary files "
+"(e.g. [code].res[/code] or [code].scn[/code])."
+msgstr ""
+
+#: doc/classes/ResourceSaver.xml:17
+msgid ""
+"Returns the list of extensions available for saving a resource of a given "
+"type."
+msgstr ""
+
+#: doc/classes/ResourceSaver.xml:26
+msgid ""
+"Saves a resource to disk to the given path, using a [ResourceFormatSaver] "
+"that recognizes the resource object.\n"
+"The [code]flags[/code] bitmask can be specified to customize the save "
+"behavior.\n"
+"Returns [constant OK] on success."
+msgstr ""
+
+#: doc/classes/ResourceSaver.xml:34
+msgid "Save the resource with a path relative to the scene which uses it."
+msgstr ""
+
+#: doc/classes/ResourceSaver.xml:37
+msgid "Bundles external resources."
+msgstr ""
+
+#: doc/classes/ResourceSaver.xml:40
+msgid ""
+"Changes the [member Resource.resource_path] of the saved resource to match "
+"its new location."
+msgstr ""
+
+#: doc/classes/ResourceSaver.xml:43
+msgid ""
+"Do not save editor-specific metadata (identified by their [code]__editor[/"
+"code] prefix)."
+msgstr ""
+
+#: doc/classes/ResourceSaver.xml:46
+msgid "Save as big endian (see [member File.endian_swap])."
+msgstr ""
+
+#: doc/classes/ResourceSaver.xml:49
+msgid ""
+"Compress the resource on save using [constant File.COMPRESSION_ZSTD]. Only "
+"available for binary resource types."
+msgstr ""
+
+#: doc/classes/ResourceSaver.xml:52
+msgid ""
+"Take over the paths of the saved subresources (see [method Resource."
+"take_over_path])."
+msgstr ""
+
+#: doc/classes/RichTextEffect.xml:4
+msgid "A custom effect for use with [RichTextLabel]."
+msgstr ""
+
+#: doc/classes/RichTextEffect.xml:7
+msgid ""
+"A custom effect for use with [RichTextLabel].\n"
+"[b]Note:[/b] For a [RichTextEffect] to be usable, a BBCode tag must be "
+"defined as a member variable called [code]bbcode[/code] in the script.\n"
+"[codeblock]\n"
+"# The RichTextEffect will be usable like this: `[example]Some text[/"
+"example]`\n"
+"var bbcode = \"example\"\n"
+"[/codeblock]\n"
+"[b]Note:[/b] As soon as a [RichTextLabel] contains at least one "
+"[RichTextEffect], it will continuously process the effect unless the project "
+"is paused. This may impact battery life negatively."
+msgstr ""
+
+#: doc/classes/RichTextEffect.xml:24
+msgid ""
+"Override this method to modify properties in [code]char_fx[/code]. The "
+"method must return [code]true[/code] if the character could be transformed "
+"successfully. If the method returns [code]false[/code], it will skip "
+"transformation to avoid displaying broken text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:4
+msgid "Label that displays rich text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:7
+msgid ""
+"Rich text can contain custom text, fonts, images and some basic formatting. "
+"The label manages these as an internal tag stack. It also adapts itself to "
+"given width/heights.\n"
+"[b]Note:[/b] Assignments to [member bbcode_text] clear the tag stack and "
+"reconstruct it from the property's contents. Any edits made to [member "
+"bbcode_text] will erase previous edits made from other manual sources such "
+"as [method append_bbcode] and the [code]push_*[/code] / [method pop] "
+"methods.\n"
+"[b]Note:[/b] RichTextLabel doesn't support entangled BBCode tags. For "
+"example, instead of using [code][b]bold[i]bold italic[/b]italic[/i][/code], "
+"use [code][b]bold[i]bold italic[/i][/b][i]italic[/i][/code].\n"
+"[b]Note:[/b] [code]push_*/pop[/code] functions won't affect BBCode.\n"
+"[b]Note:[/b] Unlike [Label], RichTextLabel doesn't have a [i]property[/i] to "
+"horizontally align text to the center. Instead, enable [member "
+"bbcode_enabled] and surround the text in a [code][center][/code] tag as "
+"follows: [code][center]Example[/center][/code]. There is currently no built-"
+"in way to vertically align text either, but this can be emulated by relying "
+"on anchors/containers and the [member fit_content_height] property.\n"
+"[b]Note:[/b] Unicode characters after [code]0xffff[/code] (such as most "
+"emoji) are [i]not[/i] supported on Windows. They will display as unknown "
+"characters instead. This will be resolved in Godot 4.0."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:16
+msgid "https://godotengine.org/asset-library/asset/132"
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:26
+msgid ""
+"Adds an image's opening and closing tags to the tag stack, optionally "
+"providing a [code]width[/code] and [code]height[/code] to resize the image.\n"
+"If [code]width[/code] or [code]height[/code] is set to 0, the image size "
+"will be adjusted in order to keep the original aspect ratio."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:34
+msgid "Adds raw non-BBCode-parsed text to the tag stack."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:41
+msgid ""
+"Parses [code]bbcode[/code] and adds tags to the tag stack as needed. Returns "
+"the result of the parsing, [constant OK] if successful.\n"
+"[b]Note:[/b] Using this method, you can't close a tag that was opened in a "
+"previous [method append_bbcode] call. This is done to improve performance, "
+"especially when updating large RichTextLabels since rebuilding the whole "
+"BBCode every time would be slower. If you absolutely need to close a tag in "
+"a future method call, append the [member bbcode_text] instead of using "
+"[method append_bbcode]."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:48
+msgid "Clears the tag stack and sets [member bbcode_text] to an empty string."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:54
+msgid "Returns the height of the content."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:60
+msgid ""
+"Returns the total number of newlines in the tag stack's text tags. Considers "
+"wrapped text as one line."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:66
+msgid ""
+"Returns the total number of characters from text tags. Does not include "
+"BBCodes."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:72
+msgid ""
+"Returns the vertical scrollbar.\n"
+"[b]Warning:[/b] This is a required internal node, removing and freeing it "
+"may cause a crash. If you wish to hide it or any of its children, use their "
+"[member CanvasItem.visible] property."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:79
+msgid "Returns the number of visible lines."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:86
+msgid ""
+"Installs a custom effect. [code]effect[/code] should be a valid "
+"[RichTextEffect]."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:92
+msgid "Adds a newline tag to the tag stack."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:99
+msgid ""
+"The assignment version of [method append_bbcode]. Clears the tag stack and "
+"inserts the new content. Returns [constant OK] if parses [code]bbcode[/code] "
+"successfully."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:106
+msgid "Parses BBCode parameter [code]expressions[/code] into a dictionary."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:112
+msgid ""
+"Terminates the current tag. Use after [code]push_*[/code] methods to close "
+"BBCodes manually. Does not need to follow [code]add_*[/code] methods."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:119
+msgid ""
+"Adds an [code][align][/code] tag based on the given [code]align[/code] "
+"value. See [enum Align] for possible values."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:125
+msgid ""
+"Adds a [code][font][/code] tag with a bold font to the tag stack. This is "
+"the same as adding a [code][b][/code] tag if not currently in a [code][i][/"
+"code] tag."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:131
+msgid ""
+"Adds a [code][font][/code] tag with a bold italics font to the tag stack."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:137
+msgid ""
+"Adds a [code][cell][/code] tag to the tag stack. Must be inside a [code]"
+"[table][/code] tag. See [method push_table] for details."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:144
+msgid "Adds a [code][color][/code] tag to the tag stack."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:151
+msgid ""
+"Adds a [code][font][/code] tag to the tag stack. Overrides default fonts for "
+"its duration."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:158
+msgid ""
+"Adds an [code][indent][/code] tag to the tag stack. Multiplies [code]level[/"
+"code] by current [member tab_size] to determine new margin length."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:164
+msgid ""
+"Adds a [code][font][/code] tag with a italics font to the tag stack. This is "
+"the same as adding a [code][i][/code] tag if not currently in a [code][b][/"
+"code] tag."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:171
+msgid ""
+"Adds a [code][list][/code] tag to the tag stack. Similar to the BBCodes "
+"[code][ol][/code] or [code][ul][/code], but supports more list types. Not "
+"fully implemented!"
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:178
+msgid ""
+"Adds a [code][meta][/code] tag to the tag stack. Similar to the BBCode [code]"
+"[url=something]{text}[/url][/code], but supports non-[String] metadata types."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:184
+msgid "Adds a [code][font][/code] tag with a monospace font to the tag stack."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:190
+msgid "Adds a [code][font][/code] tag with a normal font to the tag stack."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:196
+msgid "Adds a [code][s][/code] tag to the tag stack."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:203
+msgid "Adds a [code][table=columns][/code] tag to the tag stack."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:209
+msgid "Adds a [code][u][/code] tag to the tag stack."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:216
+msgid ""
+"Removes a line of content from the label. Returns [code]true[/code] if the "
+"line exists.\n"
+"The [code]line[/code] argument is the index of the line to remove, it can "
+"take values in the interval [code][0, get_line_count() - 1][/code]."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:224
+msgid "Scrolls the window's top line to match [code]line[/code]."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:233
+msgid ""
+"Edits the selected column's expansion options. If [code]expand[/code] is "
+"[code]true[/code], the column expands in proportion to its expansion ratio "
+"versus the other columns' ratios.\n"
+"For example, 2 columns with ratios 3 and 4 plus 70 pixels in available width "
+"would expand 30 and 40 pixels, respectively.\n"
+"If [code]expand[/code] is [code]false[/code], the column will not contribute "
+"to the total ratio."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:241
+msgid ""
+"If [code]true[/code], the label uses BBCode formatting.\n"
+"[b]Note:[/b] Trying to alter the [RichTextLabel]'s text with [method "
+"add_text] will reset this to [code]false[/code]. Use instead [method "
+"append_bbcode] to preserve BBCode formatting."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:245
+msgid ""
+"The label's text in BBCode format. Is not representative of manual "
+"modifications to the internal tag stack. Erases changes made by other "
+"methods when edited.\n"
+"[b]Note:[/b] It is unadvised to use the [code]+=[/code] operator with "
+"[code]bbcode_text[/code] (e.g. [code]bbcode_text += \"some string\"[/code]) "
+"as it replaces the whole text and can cause slowdowns. Use [method "
+"append_bbcode] for adding text instead, unless you absolutely need to close "
+"a tag that was opened in an earlier method call."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:249
+msgid ""
+"The currently installed custom effects. This is an array of "
+"[RichTextEffect]s.\n"
+"To add a custom effect, it's more convenient to use [method install_effect]."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:253
+msgid ""
+"If [code]true[/code], the label's height will be automatically updated to "
+"fit its content.\n"
+"[b]Note:[/b] This property is used as a workaround to fix issues with "
+"[RichTextLabel] in [Container]s, but it's unreliable in some cases and will "
+"be removed in future versions."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:257
+msgid ""
+"If [code]true[/code], the label underlines meta tags such as [code][url]"
+"{text}[/url][/code]."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:260
+msgid "If [code]true[/code], the label uses the custom font color."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:263
+msgid ""
+"The range of characters to display, as a [float] between 0.0 and 1.0. When "
+"assigned an out of range value, it's the same as assigning 1.0.\n"
+"[b]Note:[/b] Setting this property updates [member visible_characters] based "
+"on current [method get_total_character_count]."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:268
+msgid ""
+"If [code]true[/code], the scrollbar is visible. Setting this to [code]false[/"
+"code] does not block scrolling completely. See [method scroll_to_line]."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:271
+msgid ""
+"If [code]true[/code], the window scrolls down to display new content "
+"automatically."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:274
+msgid "If [code]true[/code], the label allows text selection."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:277
+msgid ""
+"The number of spaces associated with a single tab length. Does not affect "
+"[code]\\t[/code] in text tags, only indent tags."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:280
+msgid ""
+"The raw text of the label.\n"
+"When set, clears the tag stack and adds a raw text tag to the top of it. "
+"Does not parse BBCodes. Does not modify [member bbcode_text]."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:284
+msgid ""
+"The restricted number of characters to display in the label. If [code]-1[/"
+"code], all characters will be displayed.\n"
+"[b]Note:[/b] Setting this property updates [member percent_visible] based on "
+"current [method get_total_character_count]."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:292
+msgid ""
+"Triggered when the user clicks on content between meta tags. If the meta is "
+"defined in text, e.g. [code][url={\"data\"=\"hi\"}]hi[/url][/code], then the "
+"parameter for this signal will be a [String] type. If a particular type or "
+"an object is desired, the [method push_meta] method must be used to manually "
+"insert the data into the tag stack."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:298
+msgid "Triggers when the mouse exits a meta tag."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:304
+msgid "Triggers when the mouse enters a meta tag."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:310
+msgid "Makes text left aligned."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:313
+msgid "Makes text centered."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:316
+msgid "Makes text right aligned."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:319
+msgid "Makes text fill width."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:322
+msgid "Each list item has a number marker."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:325
+msgid "Each list item has a letter marker."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:328
+msgid "Each list item has a filled circle marker."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:371
+msgid "The font used for bold text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:374
+msgid "The font used for bold italics text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:377
+msgid "The default text color."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:380
+msgid "The background The background used when the [RichTextLabel] is focused."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:383
+msgid ""
+"The color of selected text, used when [member selection_enabled] is "
+"[code]true[/code]."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:386
+msgid "The color of the font's shadow."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:389
+msgid "The font used for italics text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:392
+msgid "The vertical space between lines."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:395
+msgid "The font used for monospace text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:398
+msgid "The normal background for the [RichTextLabel]."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:401
+msgid "The default text font."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:404
+msgid "The color of the selection box."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:407
+msgid ""
+"Boolean value. If 1 ([code]true[/code]), the shadow will be displayed around "
+"the whole text as an outline."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:410
+msgid "The horizontal offset of the font's shadow."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:413
+msgid "The vertical offset of the font's shadow."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:416
+msgid "The horizontal separation of elements in a table."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:419
+msgid "The vertical separation of elements in a table."
+msgstr ""
+
+#: doc/classes/RID.xml:4
+msgid "Handle for a [Resource]'s unique ID."
+msgstr ""
+
+#: doc/classes/RID.xml:7
+msgid ""
+"The RID type is used to access the unique integer ID of a resource. They are "
+"opaque, which means they do not grant access to the associated resource by "
+"themselves. They are used by and with the low-level Server classes such as "
+"[VisualServer]."
+msgstr ""
+
+#: doc/classes/RID.xml:16
+msgid ""
+"Creates a new RID instance with the ID of a given resource. When not handed "
+"a valid resource, silently stores the unused ID 0."
+msgstr ""
+
+#: doc/classes/RID.xml:22
+msgid "Returns the ID of the referenced resource."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:4
+msgid ""
+"Physics Body whose position is determined through physics simulation in 3D "
+"space."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:7
+msgid ""
+"This is the node that implements full 3D physics. This means that you do not "
+"control a RigidBody directly. Instead, you can apply forces to it (gravity, "
+"impulses, etc.), and the physics simulation will calculate the resulting "
+"movement, collision, bouncing, rotating, etc.\n"
+"A RigidBody has 4 behavior [member mode]s: Rigid, Static, Character, and "
+"Kinematic.\n"
+"[b]Note:[/b] Don't change a RigidBody's position every frame or very often. "
+"Sporadic changes work fine, but physics runs at a different granularity "
+"(fixed Hz) than usual rendering (process callback) and maybe even in a "
+"separate thread, so changing this from a process loop may result in strange "
+"behavior. If you need to directly affect the body's state, use [method "
+"_integrate_forces], which allows you to directly access the physics state.\n"
+"If you need to override the default physics behavior, you can write a custom "
+"force integration function. See [member custom_integrator].\n"
+"With Bullet physics (the default), the center of mass is the RigidBody3D "
+"center. With GodotPhysics, the center of mass is the average of the "
+"[CollisionShape] centers."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:23
+msgid ""
+"Called during physics processing, allowing you to read and safely modify the "
+"simulation state for the object. By default, it works in addition to the "
+"usual physics behavior, but the [member custom_integrator] property allows "
+"you to disable the default behavior and do fully custom force integration "
+"for a body."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:30
+msgid ""
+"Adds a constant directional force (i.e. acceleration) without affecting "
+"rotation.\n"
+"This is equivalent to [code]add_force(force, Vector3(0,0,0))[/code]."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:39
+msgid ""
+"Adds a constant directional force (i.e. acceleration).\n"
+"The position uses the rotation of the global coordinate system, but is "
+"centered at the object's origin."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:47
+msgid ""
+"Adds a constant rotational force (i.e. a motor) without affecting position."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:54
+msgid ""
+"Applies a directional impulse without affecting rotation.\n"
+"This is equivalent to [code]apply_impulse(Vector3(0,0,0), impulse)[/code]."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:63
+msgid ""
+"Applies a positioned impulse to the body. An impulse is time independent! "
+"Applying an impulse every frame would result in a framerate-dependent force. "
+"For this reason it should only be used when simulating one-time impacts. The "
+"position uses the rotation of the global coordinate system, but is centered "
+"at the object's origin."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:70
+msgid ""
+"Applies a torque impulse which will be affected by the body mass and shape. "
+"This will rotate the body around the [code]impulse[/code] vector passed."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:77
+msgid ""
+"Returns [code]true[/code] if the specified linear or rotational axis is "
+"locked."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:83 doc/classes/RigidBody2D.xml:73
+msgid ""
+"Returns a list of the bodies colliding with this one. Requires [member "
+"contact_monitor] to be set to [code]true[/code] and [member "
+"contacts_reported] to be set high enough to detect all the collisions.\n"
+"[b]Note:[/b] The result of this test is not immediate after moving objects. "
+"For performance, list of collisions is updated once per frame and before the "
+"physics step. Consider using signals instead."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:90
+msgid ""
+"Returns the inverse inertia tensor basis. This is used to calculate the "
+"angular acceleration resulting from a torque applied to the RigidBody."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:98
+msgid "Locks the specified linear or rotational axis."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:111
+msgid ""
+"Damps RigidBody's rotational forces.\n"
+"See [member ProjectSettings.physics/3d/default_angular_damp] for more "
+"details about damping."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:115
+msgid "RigidBody's rotational velocity."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:118
+msgid "Lock the body's rotation in the X axis."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:121
+msgid "Lock the body's rotation in the Y axis."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:124
+msgid "Lock the body's rotation in the Z axis."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:127
+msgid "Lock the body's movement in the X axis."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:130
+msgid "Lock the body's movement in the Y axis."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:133
+msgid "Lock the body's movement in the Z axis."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:136 doc/classes/RigidBody2D.xml:110
+#: doc/classes/StaticBody.xml:19 doc/classes/StaticBody2D.xml:16
+msgid ""
+"The body's bounciness. Values range from [code]0[/code] (no bounce) to "
+"[code]1[/code] (full bounciness).\n"
+"Deprecated, use [member PhysicsMaterial.bounce] instead via [member "
+"physics_material_override]."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:140
+msgid ""
+"If [code]true[/code], the body can enter sleep mode when there is no "
+"movement. See [member sleeping].\n"
+"[b]Note:[/b] A RigidBody3D will never enter sleep mode automatically if its "
+"[member mode] is [constant MODE_CHARACTER]. It can still be put to sleep "
+"manually by setting its [member sleeping] property to [code]true[/code]."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:144
+msgid ""
+"If [code]true[/code], the RigidBody will emit signals when it collides with "
+"another RigidBody. See also [member contacts_reported]."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:147
+msgid ""
+"The maximum number of contacts that will be recorded. Requires [member "
+"contact_monitor] to be set to [code]true[/code].\n"
+"[b]Note:[/b] The number of contacts is different from the number of "
+"collisions. Collisions between parallel edges will result in two contacts "
+"(one at each end), and collisions between parallel faces will result in four "
+"contacts (one at each corner)."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:151
+msgid ""
+"If [code]true[/code], continuous collision detection is used.\n"
+"Continuous collision detection tries to predict where a moving body will "
+"collide, instead of moving it and correcting its movement if it collided. "
+"Continuous collision detection is more precise, and misses fewer impacts by "
+"small, fast-moving objects. Not using continuous collision detection is "
+"faster to compute, but can miss small, fast-moving objects."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:155
+msgid ""
+"If [code]true[/code], internal force integration will be disabled (like "
+"gravity or air friction) for this body. Other than collision response, the "
+"body will only move as determined by the [method _integrate_forces] "
+"function, if defined."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:158
+msgid ""
+"The body's friction, from 0 (frictionless) to 1 (max friction).\n"
+"Deprecated, use [member PhysicsMaterial.friction] instead via [member "
+"physics_material_override]."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:162
+msgid ""
+"This is multiplied by the global 3D gravity setting found in [b]Project > "
+"Project Settings > Physics > 3d[/b] to produce RigidBody's gravity. For "
+"example, a value of 1 will be normal gravity, 2 will apply double gravity, "
+"and 0.5 will apply half gravity to this object."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:165
+msgid ""
+"The body's linear damp. Cannot be less than -1.0. If this value is different "
+"from -1.0, any linear damp derived from the world or areas will be "
+"overridden.\n"
+"See [member ProjectSettings.physics/3d/default_linear_damp] for more details "
+"about damping."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:169
+msgid ""
+"The body's linear velocity. Can be used sporadically, but [b]don't set this "
+"every frame[/b], because physics may run in another thread and runs at a "
+"different granularity. Use [method _integrate_forces] as your process loop "
+"for precise control of the body state."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:172 doc/classes/RigidBody2D.xml:149
+msgid "The body's mass."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:175
+msgid "The body mode. See [enum Mode] for possible values."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:178 doc/classes/RigidBody2D.xml:155
+#: doc/classes/StaticBody.xml:33 doc/classes/StaticBody2D.xml:30
+msgid ""
+"The physics material override for the body.\n"
+"If a material is assigned to this property, it will be used instead of any "
+"other physics material, such as an inherited one."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:182 doc/classes/RigidBody2D.xml:159
+msgid ""
+"If [code]true[/code], the body will not move and will not calculate forces "
+"until woken up by another body through, for example, a collision, or by "
+"using the [method apply_impulse] or [method add_force] methods."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:185
+msgid ""
+"The body's weight based on its mass and the global 3D gravity. Global values "
+"are set in [b]Project > Project Settings > Physics > 3d[/b]."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:192
+msgid ""
+"Emitted when a collision with another [PhysicsBody] or [GridMap] occurs. "
+"Requires [member contact_monitor] to be set to [code]true[/code] and [member "
+"contacts_reported] to be set high enough to detect all the collisions. "
+"[GridMap]s are detected if the [MeshLibrary] has Collision [Shape]s.\n"
+"[code]body[/code] the [Node], if it exists in the tree, of the other "
+"[PhysicsBody] or [GridMap]."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:199
+msgid ""
+"Emitted when the collision with another [PhysicsBody] or [GridMap] ends. "
+"Requires [member contact_monitor] to be set to [code]true[/code] and [member "
+"contacts_reported] to be set high enough to detect all the collisions. "
+"[GridMap]s are detected if the [MeshLibrary] has Collision [Shape]s.\n"
+"[code]body[/code] the [Node], if it exists in the tree, of the other "
+"[PhysicsBody] or [GridMap]."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:209
+msgid ""
+"Emitted when one of this RigidBody's [Shape]s collides with another "
+"[PhysicsBody] or [GridMap]'s [Shape]s. Requires [member contact_monitor] to "
+"be set to [code]true[/code] and [member contacts_reported] to be set high "
+"enough to detect all the collisions. [GridMap]s are detected if the "
+"[MeshLibrary] has Collision [Shape]s.\n"
+"[code]body_rid[/code] the [RID] of the other [PhysicsBody] or "
+"[MeshLibrary]'s [CollisionObject] used by the [PhysicsServer].\n"
+"[code]body[/code] the [Node], if it exists in the tree, of the other "
+"[PhysicsBody] or [GridMap].\n"
+"[code]body_shape_index[/code] the index of the [Shape] of the other "
+"[PhysicsBody] or [GridMap] used by the [PhysicsServer]. Get the "
+"[CollisionShape] node with [code]body.shape_owner_get_owner(body_shape_index)"
+"[/code].\n"
+"[code]local_shape_index[/code] the index of the [Shape] of this RigidBody "
+"used by the [PhysicsServer]. Get the [CollisionShape] node with [code]self."
+"shape_owner_get_owner(local_shape_index)[/code].\n"
+"[b]Note:[/b] Bullet physics cannot identify the shape index when using a "
+"[ConcavePolygonShape]. Don't use multiple [CollisionShape]s when using a "
+"[ConcavePolygonShape] with Bullet physics if you need shape indices."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:223
+msgid ""
+"Emitted when the collision between one of this RigidBody's [Shape]s and "
+"another [PhysicsBody] or [GridMap]'s [Shape]s ends. Requires [member "
+"contact_monitor] to be set to [code]true[/code] and [member "
+"contacts_reported] to be set high enough to detect all the collisions. "
+"[GridMap]s are detected if the [MeshLibrary] has Collision [Shape]s.\n"
+"[code]body_rid[/code] the [RID] of the other [PhysicsBody] or "
+"[MeshLibrary]'s [CollisionObject] used by the [PhysicsServer]. [GridMap]s "
+"are detected if the Meshes have [Shape]s.\n"
+"[code]body[/code] the [Node], if it exists in the tree, of the other "
+"[PhysicsBody] or [GridMap].\n"
+"[code]body_shape_index[/code] the index of the [Shape] of the other "
+"[PhysicsBody] or [GridMap] used by the [PhysicsServer]. Get the "
+"[CollisionShape] node with [code]body.shape_owner_get_owner(body_shape_index)"
+"[/code].\n"
+"[code]local_shape_index[/code] the index of the [Shape] of this RigidBody "
+"used by the [PhysicsServer]. Get the [CollisionShape] node with [code]self."
+"shape_owner_get_owner(local_shape_index)[/code].\n"
+"[b]Note:[/b] Bullet physics cannot identify the shape index when using a "
+"[ConcavePolygonShape]. Don't use multiple [CollisionShape]s when using a "
+"[ConcavePolygonShape] with Bullet physics if you need shape indices."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:233 doc/classes/RigidBody2D.xml:208
+msgid ""
+"Emitted when the physics engine changes the body's sleeping state.\n"
+"[b]Note:[/b] Changing the value [member sleeping] will not trigger this "
+"signal. It is only emitted if the sleeping state is changed by the physics "
+"engine or [code]emit_signal(\"sleeping_state_changed\")[/code] is used."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:240
+msgid ""
+"Rigid body mode. This is the \"natural\" state of a rigid body. It is "
+"affected by forces, and can move, rotate, and be affected by user code."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:243
+msgid ""
+"Static mode. The body behaves like a [StaticBody], and can only move by user "
+"code."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:246
+msgid ""
+"Character body mode. This behaves like a rigid body, but can not rotate."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:249
+msgid ""
+"Kinematic body mode. The body behaves like a [KinematicBody], and can only "
+"move by user code."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:4
+msgid "A body that is controlled by the 2D physics engine."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:7
+msgid ""
+"This node implements simulated 2D physics. You do not control a RigidBody2D "
+"directly. Instead, you apply forces to it (gravity, impulses, etc.) and the "
+"physics simulation calculates the resulting movement based on its mass, "
+"friction, and other physical properties.\n"
+"A RigidBody2D has 4 behavior [member mode]s: Rigid, Static, Character, and "
+"Kinematic.\n"
+"[b]Note:[/b] You should not change a RigidBody2D's [code]position[/code] or "
+"[code]linear_velocity[/code] every frame or even very often. If you need to "
+"directly affect the body's state, use [method _integrate_forces], which "
+"allows you to directly access the physics state.\n"
+"Please also keep in mind that physics bodies manage their own transform "
+"which overwrites the ones you set. So any direct or indirect transformation "
+"(including scaling of the node or its parent) will be visible in the editor "
+"only, and immediately reset at runtime.\n"
+"If you need to override the default physics behavior or add a transformation "
+"at runtime, you can write a custom force integration. See [member "
+"custom_integrator].\n"
+"The center of mass is always located at the node's origin without taking "
+"into account the [CollisionShape2D] centroid offsets."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:15
+msgid "https://godotengine.org/asset-library/asset/119"
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:16 doc/classes/Sprite.xml:10
+msgid "https://godotengine.org/asset-library/asset/148"
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:23
+msgid ""
+"Allows you to read and safely modify the simulation state for the object. "
+"Use this instead of [method Node._physics_process] if you need to directly "
+"change the body's [code]position[/code] or other physics properties. By "
+"default, it works in addition to the usual physics behavior, but [member "
+"custom_integrator] allows you to disable the default behavior and write "
+"custom force integration for a body."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:60
+msgid ""
+"Applies a positioned impulse to the body. An impulse is time-independent! "
+"Applying an impulse every frame would result in a framerate-dependent force. "
+"For this reason it should only be used when simulating one-time impacts (use "
+"the \"_force\" functions otherwise). The position uses the rotation of the "
+"global coordinate system, but is centered at the object's origin."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:81
+msgid ""
+"Sets the body's velocity on the given axis. The velocity in the given vector "
+"axis will be set as the given vector length. This is useful for jumping "
+"behavior."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:91
+msgid ""
+"Returns [code]true[/code] if a collision would result from moving in the "
+"given vector. [code]margin[/code] increases the size of the shapes involved "
+"in the collision detection, and [code]result[/code] is an object of type "
+"[Physics2DTestMotionResult], which contains additional information about the "
+"collision (should there be one)."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:97
+msgid ""
+"Damps the body's [member angular_velocity]. If [code]-1[/code], the body "
+"will use the [b]Default Angular Damp[/b] defined in [b]Project > Project "
+"Settings > Physics > 2d[/b].\n"
+"See [member ProjectSettings.physics/2d/default_angular_damp] for more "
+"details about damping."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:104
+msgid "The body's total applied force."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:107
+msgid "The body's total applied torque."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:114
+msgid ""
+"If [code]true[/code], the body can enter sleep mode when there is no "
+"movement. See [member sleeping].\n"
+"[b]Note:[/b] A RigidBody2D will never enter sleep mode automatically if its "
+"[member mode] is [constant MODE_CHARACTER]. It can still be put to sleep "
+"manually by setting its [member sleeping] property to [code]true[/code]."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:118
+msgid ""
+"If [code]true[/code], the body will emit signals when it collides with "
+"another RigidBody2D. See also [member contacts_reported]."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:121
+msgid ""
+"The maximum number of contacts that will be recorded. Requires [member "
+"contact_monitor] to be set to [code]true[/code].\n"
+"[b]Note:[/b] The number of contacts is different from the number of "
+"collisions. Collisions between parallel edges will result in two contacts "
+"(one at each end)."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:125
+msgid ""
+"Continuous collision detection mode.\n"
+"Continuous collision detection tries to predict where a moving body will "
+"collide instead of moving it and correcting its movement after collision. "
+"Continuous collision detection is slower, but more precise and misses fewer "
+"collisions with small, fast-moving objects. Raycasting and shapecasting "
+"methods are available. See [enum CCDMode] for details."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:129
+msgid ""
+"If [code]true[/code], internal force integration is disabled for this body. "
+"Aside from collision response, the body will only move as determined by the "
+"[method _integrate_forces] function."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:132
+msgid ""
+"The body's friction. Values range from [code]0[/code] (frictionless) to "
+"[code]1[/code] (maximum friction).\n"
+"Deprecated, use [member PhysicsMaterial.friction] instead via [member "
+"physics_material_override]."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:136
+msgid ""
+"Multiplies the gravity applied to the body. The body's gravity is calculated "
+"from the [b]Default Gravity[/b] value in [b]Project > Project Settings > "
+"Physics > 2d[/b] and/or any additional gravity vector applied by [Area2D]s."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:139
+msgid ""
+"The body's moment of inertia. This is like mass, but for rotation: it "
+"determines how much torque it takes to rotate the body. The moment of "
+"inertia is usually computed automatically from the mass and the shapes, but "
+"this function allows you to set a custom value. Set 0 inertia to return to "
+"automatically computing it."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:142
+msgid ""
+"Damps the body's [member linear_velocity]. If [code]-1[/code], the body will "
+"use the [b]Default Linear Damp[/b] in [b]Project > Project Settings > "
+"Physics > 2d[/b].\n"
+"See [member ProjectSettings.physics/2d/default_linear_damp] for more details "
+"about damping."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:152
+msgid "The body's mode. See [enum Mode] for possible values."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:162
+msgid ""
+"The body's weight based on its mass and the [b]Default Gravity[/b] value in "
+"[b]Project > Project Settings > Physics > 2d[/b]."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:169
+msgid ""
+"Emitted when a collision with another [PhysicsBody2D] or [TileMap] occurs. "
+"Requires [member contact_monitor] to be set to [code]true[/code] and [member "
+"contacts_reported] to be set high enough to detect all the collisions. "
+"[TileMap]s are detected if the [TileSet] has Collision [Shape2D]s.\n"
+"[code]body[/code] the [Node], if it exists in the tree, of the other "
+"[PhysicsBody2D] or [TileMap]."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:176
+msgid ""
+"Emitted when the collision with another [PhysicsBody2D] or [TileMap] ends. "
+"Requires [member contact_monitor] to be set to [code]true[/code] and [member "
+"contacts_reported] to be set high enough to detect all the collisions. "
+"[TileMap]s are detected if the [TileSet] has Collision [Shape2D]s.\n"
+"[code]body[/code] the [Node], if it exists in the tree, of the other "
+"[PhysicsBody2D] or [TileMap]."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:186
+msgid ""
+"Emitted when one of this RigidBody2D's [Shape2D]s collides with another "
+"[PhysicsBody2D] or [TileMap]'s [Shape2D]s. Requires [member contact_monitor] "
+"to be set to [code]true[/code] and [member contacts_reported] to be set high "
+"enough to detect all the collisions. [TileMap]s are detected if the "
+"[TileSet] has Collision [Shape2D]s.\n"
+"[code]body_rid[/code] the [RID] of the other [PhysicsBody2D] or [TileSet]'s "
+"[CollisionObject2D] used by the [Physics2DServer].\n"
+"[code]body[/code] the [Node], if it exists in the tree, of the other "
+"[PhysicsBody2D] or [TileMap].\n"
+"[code]body_shape_index[/code] the index of the [Shape2D] of the other "
+"[PhysicsBody2D] or [TileMap] used by the [Physics2DServer]. Get the "
+"[CollisionShape2D] node with [code]body."
+"shape_owner_get_owner(body_shape_index)[/code].\n"
+"[code]local_shape_index[/code] the index of the [Shape2D] of this "
+"RigidBody2D used by the [Physics2DServer]. Get the [CollisionShape2D] node "
+"with [code]self.shape_owner_get_owner(local_shape_index)[/code]."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:199
+msgid ""
+"Emitted when the collision between one of this RigidBody2D's [Shape2D]s and "
+"another [PhysicsBody2D] or [TileMap]'s [Shape2D]s ends. Requires [member "
+"contact_monitor] to be set to [code]true[/code] and [member "
+"contacts_reported] to be set high enough to detect all the collisions. "
+"[TileMap]s are detected if the [TileSet] has Collision [Shape2D]s.\n"
+"[code]body_rid[/code] the [RID] of the other [PhysicsBody2D] or [TileSet]'s "
+"[CollisionObject2D] used by the [Physics2DServer].\n"
+"[code]body[/code] the [Node], if it exists in the tree, of the other "
+"[PhysicsBody2D] or [TileMap].\n"
+"[code]body_shape_index[/code] the index of the [Shape2D] of the other "
+"[PhysicsBody2D] or [TileMap] used by the [Physics2DServer]. Get the "
+"[CollisionShape2D] node with [code]body."
+"shape_owner_get_owner(body_shape_index)[/code].\n"
+"[code]local_shape_index[/code] the index of the [Shape2D] of this "
+"RigidBody2D used by the [Physics2DServer]. Get the [CollisionShape2D] node "
+"with [code]self.shape_owner_get_owner(local_shape_index)[/code]."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:215
+msgid ""
+"Rigid mode. The body behaves as a physical object. It collides with other "
+"bodies and responds to forces applied to it. This is the default mode."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:218
+msgid "Static mode. The body behaves like a [StaticBody2D] and does not move."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:221
+msgid ""
+"Character mode. Similar to [constant MODE_RIGID], but the body can not "
+"rotate."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:224
+msgid ""
+"Kinematic mode. The body behaves like a [KinematicBody2D], and must be moved "
+"by code."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:227
+msgid ""
+"Continuous collision detection disabled. This is the fastest way to detect "
+"body collisions, but can miss small, fast-moving objects."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:230
+msgid ""
+"Continuous collision detection enabled using raycasting. This is faster than "
+"shapecasting but less precise."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:233
+msgid ""
+"Continuous collision detection enabled using shapecasting. This is the "
+"slowest CCD method and the most precise."
+msgstr ""
+
+#: doc/classes/Room.xml:4
+msgid "Room node, used to group objects together locally for [Portal] culling."
+msgstr ""
+
+#: doc/classes/Room.xml:7
+msgid ""
+"The [Portal] culling system requires levels to be built using objects "
+"grouped together by location in areas called [Room]s. In many cases these "
+"will correspond to actual rooms in buildings, but not necessarily (a canyon "
+"area may be treated as a room).\n"
+"Any [VisualInstance] that is a child or grandchild of a [Room] will be "
+"assigned to that room, if the [code]portal_mode[/code] of that "
+"[VisualInstance] is set to [code]STATIC[/code] (does not move) or "
+"[code]DYNAMIC[/code] (moves only within the room).\n"
+"Internally the room boundary must form a [b]convex hull[/b], and by default "
+"this is determined automatically by the geometry of the objects you place "
+"within the room.\n"
+"You can alternatively precisely specify a [b]manual bound[/b]. If you place "
+"a [MeshInstance] with a name prefixed by [code]Bound_[/code], it will turn "
+"off the bound generation from geometry, and instead use the vertices of this "
+"MeshInstance to directly calculate a convex hull during the conversion stage "
+"(see [RoomManager]).\n"
+"In order to see from one room into an adjacent room, [Portal]s must be "
+"placed over non-occluded openings between rooms. These will often be placed "
+"over doors and windows."
+msgstr ""
+
+#: doc/classes/Room.xml:27
+msgid ""
+"If [code]points[/code] are set, the [Room] bounding convex hull will be "
+"built from these points. If no points are set, the room bound will either be "
+"derived from a manual bound ([MeshInstance] with name prefix [code]Bound_[/"
+"code]), or from the geometry within the room.\n"
+"Note that you can use the [code]Generate Points[/code] editor button to get "
+"started. This will use either the geometry or manual bound to generate the "
+"room hull, and save the resulting points, allowing you to edit them to "
+"further refine the bound."
+msgstr ""
+
+#: doc/classes/Room.xml:31
+msgid ""
+"The [code]simplify[/code] value determines to what degree room hulls "
+"(bounds) are simplified, by removing similar planes. A value of 0 gives no "
+"simplification, 1 gives maximum simplification."
+msgstr ""
+
+#: doc/classes/Room.xml:34
+msgid ""
+"The room hull simplification can either use the default value set in the "
+"[RoomManager], or override this and use the per room setting."
+msgstr ""
+
+#: doc/classes/RoomGroup.xml:4
+msgid "Groups [Room]s together to allow common functionality."
+msgstr ""
+
+#: doc/classes/RoomGroup.xml:7
+msgid ""
+"Although [Room] behaviour can be specified individually, sometimes it is "
+"faster and more convenient to write functionality for a group of rooms.\n"
+"[RoomGroup]s should be placed as children of the [b]room list[/b] (the "
+"parent [Node] of your [Room]s), and [Room]s should be placed in turn as "
+"children of a [RoomGroup] in order to assign them to the RoomGroup.\n"
+"A [RoomGroup] can for example be used to specify [Room]s that are "
+"[b]outside[/b], and switch on or off a directional light, sky, or rain "
+"effect as the player enters / exits the area.\n"
+"[RoomGroup]s receive [b]gameplay callbacks[/b] when the "
+"[code]gameplay_monitor[/code] is switched on, as [code]signal[/code]s or "
+"[code]notification[/code]s as they enter and exit the [b]gameplay area[/b] "
+"(see [RoomManager] for details)."
+msgstr ""
+
+#: doc/classes/RoomGroup.xml:18
+msgid ""
+"This priority will be applied to [Room]s within the group. The [Room] "
+"priority allows the use of [b]internal rooms[/b], rooms [i]within[/i] "
+"another room or rooms.\n"
+"When the [Camera] is within more than one room (regular and internal), the "
+"higher priority room will take precedence. So with for example, a house "
+"inside a terrain 'room', you would make the house higher priority, so that "
+"when the camera is within the house, the house is used as the source room, "
+"but outside the house, the terrain room would be used instead."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:4
+msgid "The RoomManager node is used to control the portal culling system."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:7
+msgid ""
+"In order to utilize the portal occlusion culling system, you must build your "
+"level using [Room]s and [Portal]s. Before these can be used at runtime, they "
+"must undergo a short conversion process to build the [code]room graph[/"
+"code], runtime data needed for portal culling. The [code]room graph[/code] "
+"is controlled by the [RoomManager] node, and the [RoomManager] also contains "
+"settings that are common throughout the portal system."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:15
+msgid ""
+"This function clears all converted data from the [b]room graph[/b]. Use this "
+"before unloading a level, when transitioning from level to level, or "
+"returning to a main menu."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:21
+msgid ""
+"This is the most important function in the whole portal culling system. "
+"Without it, the system cannot function.\n"
+"First it goes through every [Room] that is a child of the [code]room list[/"
+"code] node (and [RoomGroup]s within) and converts and adds it to the "
+"[code]room graph[/code].\n"
+"This works for both [Room] nodes, and [Spatial] nodes that follow a special "
+"naming convention. They should begin with the prefix [i]'Room_'[/i], "
+"followed by the name you wish to give the room, e.g. [i]'Room_lounge'[/i]. "
+"This will automatically convert such [Spatial]s to [Room] nodes for you. "
+"This is useful if you want to build you entire room system in e.g. Blender, "
+"and reimport multiple times as you work on the level.\n"
+"The conversion will try to assign [VisualInstance]s that are children and "
+"grandchildren of the [Room] to the room. These should be given a suitable "
+"[code]portal mode[/code] (see the [CullInstance] documentation). The default "
+"[code]portal mode[/code] is [code]STATIC[/code] - objects which are not "
+"expected to move while the level is played, which will typically be most "
+"objects.\n"
+"The conversion will usually use the geometry of these [VisualInstance]s (and "
+"the [Portal]s) to calculate a convex hull bound for the room. These bounds "
+"will be shown in the editor with a wireframe. Alternatively you can specify "
+"a manual custom bound for any room, see the [Room] documentation.\n"
+"By definition, [Camera]s within a room can see everything else within the "
+"room (that is one advantage to using convex hulls). However, in order to see "
+"from one room into adjacent rooms, you must place [Portal]s, which represent "
+"openings that the camera can see through, like windows and doors.\n"
+"[Portal]s are really just specialized [MeshInstance]s. In fact you will "
+"usually first create a portal by creating a [MeshInstance], especially a "
+"[code]plane[/code] mesh instance. You would move the plane in the editor to "
+"cover a window or doorway, with the front face pointing outward from the "
+"room. To let the conversion process know you want this mesh to be a portal, "
+"again we use a special naming convention. [MeshInstance]s to be converted to "
+"a [Portal] should start with the prefix [i]'Portal_'[/i].\n"
+"You now have a choice - you can leave the name as [i]'Portal_'[/i] and allow "
+"the system to automatically detect the nearest [Room] to link. In most cases "
+"this will work fine.\n"
+"An alternative method is to specify the [Room] to link to manually, "
+"appending a suffix to the portal name, which should be the name of the room "
+"you intend to link to. For example [i]'Portal_lounge'[/i] will attempt to "
+"link to the room named [i]'Room_lounge'[/i].\n"
+"There is a special case here - Godot does not allow two nodes to share the "
+"same name. What if you want to manually have more than one portal leading "
+"into the same room? Surely they will need to both be called, e.g. "
+"[i]'Portal_lounge'[/i]?\n"
+"The solution is a wildcard character. After the room name, if you use the "
+"character [i]'*'[/i], this character and anything following it will be "
+"ignored. So you can use for example [i]'Portal_lounge*0'[/i], "
+"[i]'Portal_lounge*1'[/i] etc.\n"
+"Note that [Portal]s that have already been converted to [Portal] nodes "
+"(rather than [MeshInstance]s) still need to follow the same naming "
+"convention, as they will be relinked each time during conversion.\n"
+"It is recommended that you only place objects in rooms that are desired to "
+"stay within those rooms - i.e. [code]portal mode[/code]s [code]STATIC[/code] "
+"or [code]DYNAMIC[/code] (not crossing portals). [code]GLOBAL[/code] and "
+"[code]ROAMING[/code] objects are best placed in another part of the scene "
+"tree, to avoid confusion. See [CullInstance] for a full description of "
+"portal modes."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:39
+msgid ""
+"Switches the portal culling system on and off.\n"
+"It is important to note that when portal culling is active, it is "
+"responsible for [b]all[/b] the 3d culling. Some editor functionality may be "
+"more difficult to use, so switching the active flag is intended to be used "
+"to make sure your [Room] / [Portal] layout works within the editor.\n"
+"Switching to [code]active[/code] will have no effect when the [code]room "
+"graph[/code] is unloaded (the rooms have not yet been converted)."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:44
+msgid ""
+"Large objects can 'sprawl' over (be present in) more than one room. It can "
+"be useful to visualize which objects are sprawling outside the current "
+"room.\n"
+"Toggling this setting turns this debug view on and off."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:48
+msgid ""
+"Usually we don't want objects that only [b]just[/b] cross a boundary into an "
+"adjacent [Room] to sprawl into that room. To prevent this, each [Portal] has "
+"an extra margin, or tolerance zone where objects can enter without sprawling "
+"to a neighbouring room.\n"
+"In most cases you can set this here for all portals. It is possible to "
+"override the margin for each portal."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:52
+msgid ""
+"When using a partial or full PVS, the gameplay monitor allows you to receive "
+"callbacks when roaming objects or rooms enter or exit the [b]gameplay area[/"
+"b]. The gameplay area is defined as either the primary, or secondary PVS.\n"
+"These callbacks allow you to, for example, reduce processing for objects "
+"that are far from the player, or turn on and off AI.\n"
+"You can either choose to receive callbacks as notifications through the "
+"[code]_notification[/code] function, or as signals.\n"
+"[code]NOTIFICATION_ENTER_GAMEPLAY[/code]\n"
+"[code]NOTIFICATION_EXIT_GAMEPLAY[/code]\n"
+"Signals: [code]\"gameplay_entered\"[/code], [code]\"gameplay_exited\"[/code]"
+msgstr ""
+
+#: doc/classes/RoomManager.xml:60
+msgid ""
+"If enabled, the system will attempt to merge similar meshes (particularly in "
+"terms of materials) within [Room]s during conversion. This can significantly "
+"reduce the number of drawcalls and state changes required during rendering, "
+"albeit at a cost of reduced culling granularity.\n"
+"[b]Note:[/b] This operates at runtime during the conversion process, and "
+"will only operate on exported or running projects, in order to prevent "
+"accidental alteration to the scene and loss of data."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:64
+msgid ""
+"When converting rooms, the editor will warn you if overlap is detected "
+"between rooms. Overlap can interfere with determining the room that cameras "
+"and objects are within. A small amount can be acceptable, depending on your "
+"level. Here you can alter the threshold at which the editor warning appears. "
+"There are no other side effects."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:67
+msgid ""
+"Portal rendering is recursive - each time a portal is seen through an "
+"earlier portal there is some cost. For this reason, and to prevent the "
+"possibility of infinite loops, this setting provides a hard limit on the "
+"recursion depth.\n"
+"[b]Note:[/b] This value is unused when using [code]Full[/code] PVS mode."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:71
+msgid ""
+"Portal culling normally operates using the current [Camera] / [Camera]s, "
+"however for debugging purposes within the editor, you can use this setting "
+"to override this behaviour and force it to use a particular camera to get a "
+"better idea of what the occlusion culling is doing."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:75
+msgid ""
+"Optionally during conversion the potentially visible set (PVS) of rooms that "
+"are potentially visible from each room can be calculated. This can be used "
+"either to aid in dynamic portal culling, or to totally replace portal "
+"culling.\n"
+"In [code]Full[/code] PVS Mode, all objects within the potentially visible "
+"rooms will be frustum culled, and rendered if they are within the view "
+"frustum."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:79
+msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
+"During the conversion process, the geometry of objects within [Room]s, or a "
+"custom specified manual bound, are used to generate a [b]convex hull bound[/"
+"b].\n"
+"This convex hull is [b]required[/b] in the visibility system, and is used "
+"for many purposes. Most importantly, it is used to decide whether the "
+"[Camera] (or an object) is within a [Room]. The convex hull generating "
+"algorithm is good, but occasionally it can create too many (or too few) "
+"planes to give a good representation of the room volume.\n"
+"The [code]room_simplify[/code] value can be used to gain fine control over "
+"this process. It determines how similar planes can be for them to be "
+"considered the same (and duplicates removed). The value can be set between 0 "
+"(no simplification) and 1 (maximum simplification).\n"
+"The value set here is the default for all rooms, but individual rooms can "
+"override this value if desired.\n"
+"The room convex hulls are shown as a wireframe in the editor."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:91
+msgid ""
+"For the [Room] conversion process to succeed, you must point the "
+"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
+"we refer to as the [code]roomlist[/code] (the roomlist is not a special node "
+"type, it is normally just a [Spatial])."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:94
+msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:97
+msgid ""
+"When receiving gameplay callbacks when objects enter and exit gameplay, the "
+"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
+"visible set) of [Room]s, or the secondary PVS (the primary PVS and their "
+"neighbouring [Room]s).\n"
+"Sometimes using the larger gameplay area of the secondary PVS may be "
+"preferable."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:103
+msgid ""
+"Use only [Portal]s at runtime to determine visibility. PVS will not be "
+"generated at [Room]s conversion, and gameplay notifications cannot be used."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:106
+msgid ""
+"Use a combination of PVS and [Portal]s to determine visibility (this is "
+"usually fastest and most accurate)."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:109
+msgid ""
+"Use only the PVS (potentially visible set) of [Room]s to determine "
+"visibility."
+msgstr ""
+
+#: doc/classes/RootMotionView.xml:4
+msgid "Editor-only helper for setting up root motion in [AnimationTree]."
+msgstr ""
+
+#: doc/classes/RootMotionView.xml:7
+msgid ""
+"[i]Root motion[/i] refers to an animation technique where a mesh's skeleton "
+"is used to give impulse to a character. When working with 3D animations, a "
+"popular technique is for animators to use the root skeleton bone to give "
+"motion to the rest of the skeleton. This allows animating characters in a "
+"way where steps actually match the floor below. It also allows precise "
+"interaction with objects during cinematics. See also [AnimationTree].\n"
+"[b]Note:[/b] [RootMotionView] is only visible in the editor. It will be "
+"hidden automatically in the running project, and will also be converted to a "
+"plain [Node] in the running project. This means a script attached to a "
+"[RootMotionView] node [i]must[/i] have [code]extends Node[/code] instead of "
+"[code]extends RootMotionView[/code]. Additionally, it must not be a "
+"[code]@tool[/code] script."
+msgstr ""
+
+#: doc/classes/RootMotionView.xml:11
+msgid ""
+"https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree."
+"html#root-motion"
+msgstr ""
+
+#: doc/classes/RootMotionView.xml:17
+msgid "Path to an [AnimationTree] node to use as a basis for root motion."
+msgstr ""
+
+#: doc/classes/RootMotionView.xml:20
+msgid "The grid's cell size in 3D units."
+msgstr ""
+
+#: doc/classes/RootMotionView.xml:23
+msgid "The grid's color."
+msgstr ""
+
+#: doc/classes/RootMotionView.xml:26
+msgid ""
+"The grid's radius in 3D units. The grid's opacity will fade gradually as the "
+"distance from the origin increases until this [member radius] is reached."
+msgstr ""
+
+#: doc/classes/RootMotionView.xml:29
+msgid ""
+"If [code]true[/code], the grid's points will all be on the same Y coordinate "
+"([i]local[/i] Y = 0). If [code]false[/code], the points' original Y "
+"coordinate is preserved."
+msgstr ""
+
+#: doc/classes/SceneState.xml:4
+msgid "A script interface to a scene file's data."
+msgstr ""
+
+#: doc/classes/SceneState.xml:7
+msgid ""
+"Maintains a list of resources, nodes, exported, and overridden properties, "
+"and built-in scripts associated with a scene.\n"
+"This class cannot be instantiated directly, it is retrieved for a given "
+"scene as the result of [method PackedScene.get_state]."
+msgstr ""
+
+#: doc/classes/SceneState.xml:17
+msgid ""
+"Returns the list of bound parameters for the signal at [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/SceneState.xml:23
+msgid ""
+"Returns the number of signal connections in the scene.\n"
+"The [code]idx[/code] argument used to query connection metadata in other "
+"[code]get_connection_*[/code] methods in the interval [code][0, "
+"get_connection_count() - 1][/code]."
+msgstr ""
+
+#: doc/classes/SceneState.xml:31
+msgid ""
+"Returns the connection flags for the signal at [code]idx[/code]. See [enum "
+"Object.ConnectFlags] constants."
+msgstr ""
+
+#: doc/classes/SceneState.xml:38
+msgid "Returns the method connected to the signal at [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/SceneState.xml:45
+msgid "Returns the name of the signal at [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/SceneState.xml:52
+msgid ""
+"Returns the path to the node that owns the signal at [code]idx[/code], "
+"relative to the root node."
+msgstr ""
+
+#: doc/classes/SceneState.xml:59
+msgid ""
+"Returns the path to the node that owns the method connected to the signal at "
+"[code]idx[/code], relative to the root node."
+msgstr ""
+
+#: doc/classes/SceneState.xml:65
+msgid ""
+"Returns the number of nodes in the scene.\n"
+"The [code]idx[/code] argument used to query node data in other "
+"[code]get_node_*[/code] methods in the interval [code][0, get_node_count() - "
+"1][/code]."
+msgstr ""
+
+#: doc/classes/SceneState.xml:73
+msgid ""
+"Returns the list of group names associated with the node at [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/SceneState.xml:80
+msgid ""
+"Returns the node's index, which is its position relative to its siblings. "
+"This is only relevant and saved in scenes for cases where new nodes are "
+"added to an instanced or inherited scene among siblings from the base scene. "
+"Despite the name, this index is not related to the [code]idx[/code] argument "
+"used here and in other methods."
+msgstr ""
+
+#: doc/classes/SceneState.xml:87
+msgid ""
+"Returns a [PackedScene] for the node at [code]idx[/code] (i.e. the whole "
+"branch starting at this node, with its child nodes and resources), or "
+"[code]null[/code] if the node is not an instance."
+msgstr ""
+
+#: doc/classes/SceneState.xml:94
+msgid ""
+"Returns the path to the represented scene file if the node at [code]idx[/"
+"code] is an [InstancePlaceholder]."
+msgstr ""
+
+#: doc/classes/SceneState.xml:101
+msgid "Returns the name of the node at [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/SceneState.xml:108
+msgid ""
+"Returns the path to the owner of the node at [code]idx[/code], relative to "
+"the root node."
+msgstr ""
+
+#: doc/classes/SceneState.xml:116
+msgid ""
+"Returns the path to the node at [code]idx[/code].\n"
+"If [code]for_parent[/code] is [code]true[/code], returns the path of the "
+"[code]idx[/code] node's parent instead."
+msgstr ""
+
+#: doc/classes/SceneState.xml:124
+msgid ""
+"Returns the number of exported or overridden properties for the node at "
+"[code]idx[/code].\n"
+"The [code]prop_idx[/code] argument used to query node property data in other "
+"[code]get_node_property_*[/code] methods in the interval [code][0, "
+"get_node_property_count() - 1][/code]."
+msgstr ""
+
+#: doc/classes/SceneState.xml:133
+msgid ""
+"Returns the name of the property at [code]prop_idx[/code] for the node at "
+"[code]idx[/code]."
+msgstr ""
+
+#: doc/classes/SceneState.xml:141
+msgid ""
+"Returns the value of the property at [code]prop_idx[/code] for the node at "
+"[code]idx[/code]."
+msgstr ""
+
+#: doc/classes/SceneState.xml:148
+msgid "Returns the type of the node at [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/SceneState.xml:155
+msgid ""
+"Returns [code]true[/code] if the node at [code]idx[/code] is an "
+"[InstancePlaceholder]."
+msgstr ""
+
+#: doc/classes/SceneState.xml:161
+msgid ""
+"If passed to [method PackedScene.instance], blocks edits to the scene state."
+msgstr ""
+
+#: doc/classes/SceneState.xml:164
+msgid ""
+"If passed to [method PackedScene.instance], provides inherited scene "
+"resources to the local scene.\n"
+"[b]Note:[/b] Only available in editor builds."
+msgstr ""
+
+#: doc/classes/SceneState.xml:168
+msgid ""
+"If passed to [method PackedScene.instance], provides local scene resources "
+"to the local scene. Only the main scene should receive the main edit state.\n"
+"[b]Note:[/b] Only available in editor builds."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:4
+msgid "Manages the game loop via a hierarchy of nodes."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:7
+msgid ""
+"As one of the most important classes, the [SceneTree] manages the hierarchy "
+"of nodes in a scene as well as scenes themselves. Nodes can be added, "
+"retrieved and removed. The whole scene tree (and thus the current scene) can "
+"be paused. Scenes can be loaded, switched and reloaded.\n"
+"You can also use the [SceneTree] to organize your nodes into groups: every "
+"node can be assigned as many groups as you want to create, e.g. an \"enemy\" "
+"group. You can then iterate these groups or even call methods and set "
+"properties on all the group's members at once.\n"
+"[SceneTree] is the default [MainLoop] implementation used by scenes, and is "
+"thus in charge of the game loop."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:12
+msgid ""
+"https://docs.godotengine.org/en/3.4/getting_started/step_by_step/scene_tree."
+"html"
+msgstr ""
+
+#: doc/classes/SceneTree.xml:13
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/viewports/multiple_resolutions."
+"html"
+msgstr ""
+
+#: doc/classes/SceneTree.xml:21
+msgid ""
+"Calls [code]method[/code] on each member of the given group. You can pass "
+"arguments to [code]method[/code] by specifying them at the end of the method "
+"call. This method is equivalent of calling [method call_group_flags] with "
+"[constant GROUP_CALL_DEFAULT] flag.\n"
+"[b]Note:[/b] [code]method[/code] may only have 5 arguments at most (7 "
+"arguments passed to this method in total).\n"
+"[b]Note:[/b] Due to design limitations, [method call_group] will fail "
+"silently if one of the arguments is [code]null[/code].\n"
+"[b]Note:[/b] [method call_group] will always call methods with an one-frame "
+"delay, in a way similar to [method Object.call_deferred]. To call methods "
+"immediately, use [method call_group_flags] with the [constant "
+"GROUP_CALL_REALTIME] flag."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:33
+msgid ""
+"Calls [code]method[/code] on each member of the given group, respecting the "
+"given [enum GroupCallFlags]. You can pass arguments to [code]method[/code] "
+"by specifying them at the end of the method call.\n"
+"[b]Note:[/b] [code]method[/code] may only have 5 arguments at most (8 "
+"arguments passed to this method in total).\n"
+"[b]Note:[/b] Due to design limitations, [method call_group_flags] will fail "
+"silently if one of the arguments is [code]null[/code].\n"
+"[codeblock]\n"
+"# Call the method immediately and in reverse order.\n"
+"get_tree().call_group_flags(SceneTree.GROUP_CALL_REALTIME | SceneTree."
+"GROUP_CALL_REVERSE, \"bases\", \"destroy\")\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/SceneTree.xml:46
+msgid ""
+"Changes the running scene to the one at the given [code]path[/code], after "
+"loading it into a [PackedScene] and creating a new instance.\n"
+"Returns [constant OK] on success, [constant ERR_CANT_OPEN] if the "
+"[code]path[/code] cannot be loaded into a [PackedScene], or [constant "
+"ERR_CANT_CREATE] if that scene cannot be instantiated.\n"
+"[b]Note:[/b] The scene change is deferred, which means that the new scene "
+"node is added on the next idle frame. You won't be able to access it "
+"immediately after the [method change_scene] call."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:55
+msgid ""
+"Changes the running scene to a new instance of the given [PackedScene].\n"
+"Returns [constant OK] on success or [constant ERR_CANT_CREATE] if the scene "
+"cannot be instantiated.\n"
+"[b]Note:[/b] The scene change is deferred, which means that the new scene "
+"node is added on the next idle frame. You won't be able to access it "
+"immediately after the [method change_scene_to] call."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:65
+msgid ""
+"Returns a [SceneTreeTimer] which will [signal SceneTreeTimer.timeout] after "
+"the given time in seconds elapsed in this [SceneTree]. If "
+"[code]pause_mode_process[/code] is set to [code]false[/code], pausing the "
+"[SceneTree] will also pause the timer.\n"
+"Commonly used to create a one-shot delay timer as in the following example:\n"
+"[codeblock]\n"
+"func some_function():\n"
+" print(\"start\")\n"
+" yield(get_tree().create_timer(1.0), \"timeout\")\n"
+" print(\"end\")\n"
+"[/codeblock]\n"
+"The timer will be automatically freed after its time elapses."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:79
+msgid ""
+"Returns the current frame number, i.e. the total frame count since the "
+"application started."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:85
+msgid ""
+"Returns the peer IDs of all connected peers of this [SceneTree]'s [member "
+"network_peer]."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:91
+msgid "Returns the unique peer ID of this [SceneTree]'s [member network_peer]."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:97
+msgid "Returns the number of nodes in this [SceneTree]."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:104
+msgid "Returns a list of all nodes assigned to the given group."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:110
+msgid "Returns the sender's peer ID for the most recently received RPC call."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:117
+msgid "Returns [code]true[/code] if the given group exists."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:129
+msgid ""
+"Returns [code]true[/code] if the most recent [InputEvent] was marked as "
+"handled with [method set_input_as_handled]."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:135
+msgid ""
+"Returns [code]true[/code] if this [SceneTree]'s [member network_peer] is in "
+"server mode (listening for connections)."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:143
+msgid "Sends the given notification to all members of the [code]group[/code]."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:152
+msgid ""
+"Sends the given notification to all members of the [code]group[/code], "
+"respecting the given [enum GroupCallFlags]."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:159
+msgid ""
+"Queues the given object for deletion, delaying the call to [method Object."
+"free] to after the current frame."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:166
+msgid ""
+"Quits the application at the end of the current iteration. A process "
+"[code]exit_code[/code] can optionally be passed as an argument. If this "
+"argument is [code]0[/code] or greater, it will override the [member OS."
+"exit_code] defined before quitting the application.\n"
+"[b]Note:[/b] On iOS this method doesn't work. Instead, as recommended by the "
+"iOS Human Interface Guidelines, the user is expected to close apps via the "
+"Home button."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:173
+msgid ""
+"Reloads the currently active scene.\n"
+"Returns [constant OK] on success, [constant ERR_UNCONFIGURED] if no [member "
+"current_scene] was defined yet, [constant ERR_CANT_OPEN] if [member "
+"current_scene] cannot be loaded into a [PackedScene], or [constant "
+"ERR_CANT_CREATE] if the scene cannot be instantiated."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:181
+msgid ""
+"If [code]true[/code], the application automatically accepts quitting. "
+"Enabled by default.\n"
+"For mobile platforms, see [method set_quit_on_go_back]."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:191
+msgid ""
+"Sets the given [code]property[/code] to [code]value[/code] on all members of "
+"the given group."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:201
+msgid ""
+"Sets the given [code]property[/code] to [code]value[/code] on all members of "
+"the given group, respecting the given [enum GroupCallFlags]."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:207
+msgid "Marks the most recent [InputEvent] as handled."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:214
+msgid ""
+"If [code]true[/code], the application quits automatically on going back (e."
+"g. on Android). Enabled by default.\n"
+"To handle 'Go Back' button when this option is disabled, use [constant "
+"MainLoop.NOTIFICATION_WM_GO_BACK_REQUEST]."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:225
+msgid ""
+"Configures screen stretching to the given [enum StretchMode], [enum "
+"StretchAspect], minimum size and [code]scale[/code]."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:231
+msgid "The current scene."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:234
+msgid ""
+"If [code]true[/code], collision shapes will be visible when running the game "
+"from the editor for debugging purposes."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:237
+msgid ""
+"If [code]true[/code], navigation polygons will be visible when running the "
+"game from the editor for debugging purposes."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:240
+msgid "The root of the edited scene."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:243
+msgid "The default [MultiplayerAPI] instance for this [SceneTree]."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:246
+msgid ""
+"If [code]true[/code] (default value), enables automatic polling of the "
+"[MultiplayerAPI] for this SceneTree during [signal idle_frame].\n"
+"If [code]false[/code], you need to manually call [method MultiplayerAPI."
+"poll] to process network packets and deliver RPCs/RSETs. This allows running "
+"RPCs/RSETs in a different loop (e.g. physics, thread, specific time step) "
+"and for manual [Mutex] protection when accessing the [MultiplayerAPI] from "
+"threads."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:250
+msgid ""
+"The peer object to handle the RPC system (effectively enabling networking "
+"when set). Depending on the peer itself, the [SceneTree] will become a "
+"network server (check with [method is_network_server]) and will set the root "
+"node's network mode to master, or it will become a regular peer with the "
+"root node set to puppet. All child nodes are set to inherit the network mode "
+"by default. Handling of networking-related events (connection, "
+"disconnection, new clients) is done by connecting to [SceneTree]'s signals."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:253
+msgid ""
+"If [code]true[/code], the [SceneTree] is paused. Doing so will have the "
+"following behavior:\n"
+"- 2D and 3D physics will be stopped. This includes signals and collision "
+"detection.\n"
+"- [method Node._process], [method Node._physics_process] and [method Node."
+"_input] will not be called anymore in nodes."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:258
+msgid ""
+"If [code]true[/code], the [SceneTree]'s [member network_peer] refuses new "
+"incoming connections."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:261
+msgid "The [SceneTree]'s root [Viewport]."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:264
+msgid "If [code]true[/code], font oversampling is used."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:270
+msgid ""
+"Emitted whenever this [SceneTree]'s [member network_peer] successfully "
+"connected to a server. Only emitted on clients."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:275
+msgid ""
+"Emitted whenever this [SceneTree]'s [member network_peer] fails to establish "
+"a connection to a server. Only emitted on clients."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:282
+msgid ""
+"Emitted when files are dragged from the OS file manager and dropped in the "
+"game window. The arguments are a list of file paths and the identifier of "
+"the screen where the drag originated."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:289
+msgid "Emitted whenever global menu item is clicked."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:294
+msgid ""
+"Emitted immediately before [method Node._process] is called on every node in "
+"the [SceneTree]."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:300
+msgid ""
+"Emitted whenever this [SceneTree]'s [member network_peer] connects with a "
+"new peer. ID is the peer ID of the new peer. Clients get notified when other "
+"clients connect to the same server. Upon connecting to a server, a client "
+"also receives this signal for the server (with ID being 1)."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:306
+msgid ""
+"Emitted whenever this [SceneTree]'s [member network_peer] disconnects from a "
+"peer. Clients get notified when other clients disconnect from the same "
+"server."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:312
+msgid "Emitted whenever a node is added to the [SceneTree]."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:318
+msgid ""
+"Emitted when a node's configuration changed. Only emitted in [code]tool[/"
+"code] mode."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:324
+msgid "Emitted whenever a node is removed from the [SceneTree]."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:330
+msgid "Emitted whenever a node is renamed."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:335
+msgid ""
+"Emitted immediately before [method Node._physics_process] is called on every "
+"node in the [SceneTree]."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:340
+msgid ""
+"Emitted when the screen resolution (fullscreen) or window size (windowed) "
+"changes."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:345
+msgid ""
+"Emitted whenever this [SceneTree]'s [member network_peer] disconnected from "
+"server. Only emitted on clients."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:350
+msgid ""
+"Emitted whenever the [SceneTree] hierarchy changed (children being moved or "
+"renamed, etc.)."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:356
+msgid "Call a group with no flags (default)."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:359
+msgid "Call a group in reverse scene order."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:362
+msgid "Call a group immediately (calls are normally made on idle)."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:365
+msgid "Call a group only once even if the call is executed many times."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:368
+msgid "No stretching."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:371
+msgid "Render stretching in higher resolution (interpolated)."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:374
+msgid ""
+"Keep the specified display resolution. No interpolation. Content may appear "
+"pixelated."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:377
+msgid ""
+"Fill the window with the content stretched to cover excessive space. Content "
+"may appear stretched."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:380
+msgid ""
+"Retain the same aspect ratio by padding with black bars on either axis. This "
+"prevents distortion."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:383
+msgid ""
+"Expand vertically. Left/right black bars may appear if the window is too "
+"wide."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:386
+msgid ""
+"Expand horizontally. Top/bottom black bars may appear if the window is too "
+"tall."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:389
+msgid ""
+"Expand in both directions, retaining the same aspect ratio. This prevents "
+"distortion while avoiding black bars."
+msgstr ""
+
+#: doc/classes/SceneTreeTimer.xml:4
+msgid "One-shot timer."
+msgstr ""
+
+#: doc/classes/SceneTreeTimer.xml:7
+msgid ""
+"A one-shot timer managed by the scene tree, which emits [signal timeout] on "
+"completion. See also [method SceneTree.create_timer].\n"
+"As opposed to [Timer], it does not require the instantiation of a node. "
+"Commonly used to create a one-shot delay timer as in the following example:\n"
+"[codeblock]\n"
+"func some_function():\n"
+" print(\"Timer started.\")\n"
+" yield(get_tree().create_timer(1.0), \"timeout\")\n"
+" print(\"Timer ended.\")\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/SceneTreeTimer.xml:22
+msgid "The time remaining."
+msgstr ""
+
+#: doc/classes/SceneTreeTimer.xml:28 doc/classes/Timer.xml:61
+msgid "Emitted when the timer reaches 0."
+msgstr ""
+
+#: doc/classes/Script.xml:4
+msgid "A class stored as a resource."
+msgstr ""
+
+#: doc/classes/Script.xml:7
+msgid ""
+"A class stored as a resource. A script extends the functionality of all "
+"objects that instance it.\n"
+"The [code]new[/code] method of a script subclass creates a new instance. "
+"[method Object.set_script] extends an existing object, if that object's "
+"class matches one of the script's base classes."
+msgstr ""
+
+#: doc/classes/Script.xml:11
+msgid ""
+"https://docs.godotengine.org/en/3.4/getting_started/step_by_step/scripting."
+"html"
+msgstr ""
+
+#: doc/classes/Script.xml:17
+msgid "Returns [code]true[/code] if the script can be instanced."
+msgstr ""
+
+#: doc/classes/Script.xml:23
+msgid "Returns the script directly inherited by this script."
+msgstr ""
+
+#: doc/classes/Script.xml:29
+msgid "Returns the script's base type."
+msgstr ""
+
+#: doc/classes/Script.xml:36
+msgid "Returns the default value of the specified property."
+msgstr ""
+
+#: doc/classes/Script.xml:42
+msgid "Returns a dictionary containing constant names and their values."
+msgstr ""
+
+#: doc/classes/Script.xml:48
+msgid "Returns the list of methods in this [Script]."
+msgstr ""
+
+#: doc/classes/Script.xml:54
+msgid "Returns the list of properties in this [Script]."
+msgstr ""
+
+#: doc/classes/Script.xml:60
+msgid "Returns the list of user signals defined in this [Script]."
+msgstr ""
+
+#: doc/classes/Script.xml:67
+msgid ""
+"Returns [code]true[/code] if the script, or a base class, defines a signal "
+"with the given name."
+msgstr ""
+
+#: doc/classes/Script.xml:73
+msgid "Returns [code]true[/code] if the script contains non-empty source code."
+msgstr ""
+
+#: doc/classes/Script.xml:80
+msgid ""
+"Returns [code]true[/code] if [code]base_object[/code] is an instance of this "
+"script."
+msgstr ""
+
+#: doc/classes/Script.xml:86
+msgid ""
+"Returns [code]true[/code] if the script is a tool script. A tool script can "
+"run in the editor."
+msgstr ""
+
+#: doc/classes/Script.xml:93
+msgid "Reloads the script's class implementation. Returns an error code."
+msgstr ""
+
+#: doc/classes/Script.xml:99
+msgid ""
+"The script source code or an empty string if source code is not available. "
+"When set, does not reload the class implementation automatically."
+msgstr ""
+
+#: doc/classes/ScriptCreateDialog.xml:4
+msgid "The Editor's popup dialog for creating new [Script] files."
+msgstr ""
+
+#: doc/classes/ScriptCreateDialog.xml:7
+msgid ""
+"The [ScriptCreateDialog] creates script files according to a given template "
+"for a given scripting language. The standard use is to configure its fields "
+"prior to calling one of the [method Popup.popup] methods.\n"
+"[codeblock]\n"
+"func _ready():\n"
+" dialog.config(\"Node\", \"res://new_node.gd\") # For in-engine types\n"
+" dialog.config(\"\\\"res://base_node.gd\\\"\", \"res://derived_node.gd\") "
+"# For script types\n"
+" dialog.popup_centered()\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/ScriptCreateDialog.xml:25
+msgid "Prefills required fields to configure the ScriptCreateDialog for use."
+msgstr ""
+
+#: doc/classes/ScriptCreateDialog.xml:40
+msgid "Emitted when the user clicks the OK button."
+msgstr ""
+
+#: doc/classes/ScriptEditor.xml:4
+msgid "Godot editor's script editor."
+msgstr ""
+
+#: doc/classes/ScriptEditor.xml:7
+msgid ""
+"[b]Note:[/b] This class shouldn't be instantiated directly. Instead, access "
+"the singleton using [method EditorInterface.get_script_editor]."
+msgstr ""
+
+#: doc/classes/ScriptEditor.xml:31
+msgid "Returns a [Script] that is currently active in editor."
+msgstr ""
+
+#: doc/classes/ScriptEditor.xml:44
+msgid ""
+"Returns an array with all [Script] objects which are currently open in "
+"editor."
+msgstr ""
+
+#: doc/classes/ScriptEditor.xml:51
+msgid "Goes to the specified line in the current script."
+msgstr ""
+
+#: doc/classes/ScriptEditor.xml:59
+msgid ""
+"Opens the script create dialog. The script will extend [code]base_name[/"
+"code]. The file extension can be omitted from [code]base_path[/code]. It "
+"will be added based on the selected scripting language."
+msgstr ""
+
+#: doc/classes/ScriptEditor.xml:67
+msgid ""
+"Emitted when user changed active script. Argument is a freshly activated "
+"[Script]."
+msgstr ""
+
+#: doc/classes/ScriptEditor.xml:73
+msgid ""
+"Emitted when editor is about to close the active script. Argument is a "
+"[Script] that is going to be closed."
+msgstr ""
+
+#: doc/classes/ScrollBar.xml:4
+msgid "Base class for scroll bars."
+msgstr ""
+
+#: doc/classes/ScrollBar.xml:7
+msgid ""
+"Scrollbars are a [Range]-based [Control], that display a draggable area (the "
+"size of the page). Horizontal ([HScrollBar]) and Vertical ([VScrollBar]) "
+"versions are available."
+msgstr ""
+
+#: doc/classes/ScrollBar.xml:15
+msgid ""
+"Overrides the step used when clicking increment and decrement buttons or "
+"when using arrow keys when the [ScrollBar] is focused."
+msgstr ""
+
+#: doc/classes/ScrollBar.xml:23
+msgid "Emitted when the scrollbar is being scrolled."
+msgstr ""
+
+#: doc/classes/ScrollContainer.xml:4
+msgid "A helper node for displaying scrollable elements such as lists."
+msgstr ""
+
+#: doc/classes/ScrollContainer.xml:7
+msgid ""
+"A ScrollContainer node meant to contain a [Control] child. ScrollContainers "
+"will automatically create a scrollbar child ([HScrollBar], [VScrollBar], or "
+"both) when needed and will only draw the Control within the ScrollContainer "
+"area. Scrollbars will automatically be drawn at the right (for vertical) or "
+"bottom (for horizontal) and will enable dragging to move the viewable "
+"Control (and its children) within the ScrollContainer. Scrollbars will also "
+"automatically resize the grabber based on the [member Control.rect_min_size] "
+"of the Control relative to the ScrollContainer. Works great with a [Panel] "
+"control. You can set [code]EXPAND[/code] on the children's size flags, so "
+"they will upscale to the ScrollContainer's size if it's larger (scroll is "
+"invisible for the chosen dimension)."
+msgstr ""
+
+#: doc/classes/ScrollContainer.xml:16
+msgid ""
+"Ensures the given [code]control[/code] is visible (must be a direct or "
+"indirect child of the ScrollContainer). Used by [member follow_focus]."
+msgstr ""
+
+#: doc/classes/ScrollContainer.xml:22
+msgid ""
+"Returns the horizontal scrollbar [HScrollBar] of this [ScrollContainer].\n"
+"[b]Warning:[/b] This is a required internal node, removing and freeing it "
+"may cause a crash. If you wish to disable the horizontal scrollbar, use "
+"[member scroll_horizontal_enabled]. If you want to only hide it instead, use "
+"its [member CanvasItem.visible] property."
+msgstr ""
+
+#: doc/classes/ScrollContainer.xml:29
+msgid ""
+"Returns the vertical scrollbar [VScrollBar] of this [ScrollContainer].\n"
+"[b]Warning:[/b] This is a required internal node, removing and freeing it "
+"may cause a crash. If you wish to disable the vertical scrollbar, use "
+"[member scroll_vertical_enabled]. If you want to only hide it instead, use "
+"its [member CanvasItem.visible] property."
+msgstr ""
+
+#: doc/classes/ScrollContainer.xml:36
+msgid ""
+"If [code]true[/code], the ScrollContainer will automatically scroll to "
+"focused children (including indirect children) to make sure they are fully "
+"visible."
+msgstr ""
+
+#: doc/classes/ScrollContainer.xml:42
+msgid "The current horizontal scroll value."
+msgstr ""
+
+#: doc/classes/ScrollContainer.xml:45
+msgid "If [code]true[/code], enables horizontal scrolling."
+msgstr ""
+
+#: doc/classes/ScrollContainer.xml:48
+msgid "The current vertical scroll value."
+msgstr ""
+
+#: doc/classes/ScrollContainer.xml:51
+msgid "If [code]true[/code], enables vertical scrolling."
+msgstr ""
+
+#: doc/classes/ScrollContainer.xml:57
+msgid "Emitted when scrolling stops."
+msgstr ""
+
+#: doc/classes/ScrollContainer.xml:62
+msgid "Emitted when scrolling is started."
+msgstr ""
+
+#: doc/classes/ScrollContainer.xml:70
+msgid "The background [StyleBox] of the [ScrollContainer]."
+msgstr ""
+
+#: doc/classes/SegmentShape2D.xml:4
+msgid "Segment shape for 2D collisions."
+msgstr ""
+
+#: doc/classes/SegmentShape2D.xml:7
+msgid ""
+"Segment shape for 2D collisions. Consists of two points, [code]a[/code] and "
+"[code]b[/code]."
+msgstr ""
+
+#: doc/classes/SegmentShape2D.xml:15
+msgid "The segment's first point position."
+msgstr ""
+
+#: doc/classes/SegmentShape2D.xml:18
+msgid "The segment's second point position."
+msgstr ""
+
+#: doc/classes/Semaphore.xml:4
+msgid "A synchronization semaphore."
+msgstr ""
+
+#: doc/classes/Semaphore.xml:7
+msgid ""
+"A synchronization semaphore which can be used to synchronize multiple "
+"[Thread]s. Initialized to zero on creation. Be careful to avoid deadlocks. "
+"For a binary version, see [Mutex]."
+msgstr ""
+
+#: doc/classes/Semaphore.xml:16
+msgid ""
+"Lowers the [Semaphore], allowing one more thread in. Returns [constant OK] "
+"on success, [constant ERR_BUSY] otherwise."
+msgstr ""
+
+#: doc/classes/Semaphore.xml:22
+msgid ""
+"Tries to wait for the [Semaphore], if its value is zero, blocks until non-"
+"zero. Returns [constant OK] on success, [constant ERR_BUSY] otherwise."
+msgstr ""
+
+#: doc/classes/Separator.xml:4
+msgid "Base class for separators."
+msgstr ""
+
+#: doc/classes/Separator.xml:7
+msgid ""
+"Separator is a [Control] used for separating other controls. It's purely a "
+"visual decoration. Horizontal ([HSeparator]) and Vertical ([VSeparator]) "
+"versions are available."
+msgstr ""
+
+#: doc/classes/Shader.xml:4
+msgid "A custom shader program."
+msgstr ""
+
+#: doc/classes/Shader.xml:7
+msgid ""
+"This class allows you to define a custom shader program that can be used by "
+"a [ShaderMaterial]. Shaders allow you to write your own custom behavior for "
+"rendering objects or updating particle information. For a detailed "
+"explanation and usage, please see the tutorials linked below."
+msgstr ""
+
+#: doc/classes/Shader.xml:10 doc/classes/ShaderMaterial.xml:11
+msgid "https://docs.godotengine.org/en/3.4/tutorials/shading/index.html"
+msgstr ""
+
+#: doc/classes/Shader.xml:11
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/shading/your_first_shader/"
+"what_are_shaders.html"
+msgstr ""
+
+#: doc/classes/Shader.xml:18
+msgid ""
+"Returns the texture that is set as default for the specified parameter.\n"
+"[b]Note:[/b] [code]param[/code] must match the name of the uniform in the "
+"code exactly."
+msgstr ""
+
+#: doc/classes/Shader.xml:25
+msgid ""
+"Returns the shader mode for the shader, either [constant MODE_CANVAS_ITEM], "
+"[constant MODE_SPATIAL] or [constant MODE_PARTICLES]."
+msgstr ""
+
+#: doc/classes/Shader.xml:32
+msgid ""
+"Returns [code]true[/code] if the shader has this param defined as a uniform "
+"in its code.\n"
+"[b]Note:[/b] [code]param[/code] must match the name of the uniform in the "
+"code exactly."
+msgstr ""
+
+#: doc/classes/Shader.xml:41
+msgid ""
+"Sets the default texture to be used with a texture uniform. The default is "
+"used if a texture is not set in the [ShaderMaterial].\n"
+"[b]Note:[/b] [code]param[/code] must match the name of the uniform in the "
+"code exactly."
+msgstr ""
+
+#: doc/classes/Shader.xml:48
+msgid ""
+"Returns the shader's code as the user has written it, not the full generated "
+"code used internally."
+msgstr ""
+
+#: doc/classes/Shader.xml:51
+msgid ""
+"Returns the shader's custom defines. Custom defines can be used in Godot to "
+"add GLSL preprocessor directives (e.g: extensions) required for the shader "
+"logic.\n"
+"[b]Note:[/b] Custom defines are not validated by the Godot shader parser, so "
+"care should be taken when using them."
+msgstr ""
+
+#: doc/classes/Shader.xml:57
+msgid "Mode used to draw all 3D objects."
+msgstr ""
+
+#: doc/classes/Shader.xml:60
+msgid "Mode used to draw all 2D objects."
+msgstr ""
+
+#: doc/classes/Shader.xml:63
+msgid ""
+"Mode used to calculate particle information on a per-particle basis. Not "
+"used for drawing."
+msgstr ""
+
+#: doc/classes/ShaderMaterial.xml:4
+msgid "A material that uses a custom [Shader] program."
+msgstr ""
+
+#: doc/classes/ShaderMaterial.xml:7
+msgid ""
+"A material that uses a custom [Shader] program to render either items to "
+"screen or process particles. You can create multiple materials for the same "
+"shader but configure different values for the uniforms defined in the "
+"shader.\n"
+"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
+"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
+"emit light in a [GIProbe]."
+msgstr ""
+
+#: doc/classes/ShaderMaterial.xml:18
+msgid ""
+"Returns the current value set for this material of a uniform in the shader."
+msgstr ""
+
+#: doc/classes/ShaderMaterial.xml:25
+msgid ""
+"Returns [code]true[/code] if the property identified by [code]name[/code] "
+"can be reverted to a default value."
+msgstr ""
+
+#: doc/classes/ShaderMaterial.xml:32
+msgid ""
+"Returns the default value of the material property with given [code]name[/"
+"code]."
+msgstr ""
+
+#: doc/classes/ShaderMaterial.xml:40
+msgid ""
+"Changes the value set for this material of a uniform in the shader.\n"
+"[b]Note:[/b] [code]param[/code] must match the name of the uniform in the "
+"code exactly."
+msgstr ""
+
+#: doc/classes/ShaderMaterial.xml:47
+msgid "The [Shader] program used to render this material."
+msgstr ""
+
+#: doc/classes/Shape.xml:4
+msgid "Base class for all 3D shape resources."
+msgstr ""
+
+#: doc/classes/Shape.xml:7
+msgid ""
+"Base class for all 3D shape resources. Nodes that inherit from this can be "
+"used as shapes for a [PhysicsBody] or [Area] objects."
+msgstr ""
+
+#: doc/classes/Shape.xml:16
+msgid ""
+"Returns the [ArrayMesh] used to draw the debug collision for this [Shape]."
+msgstr ""
+
+#: doc/classes/Shape.xml:22
+msgid ""
+"The collision margin for the shape. Used in Bullet Physics only.\n"
+"Collision margins allow collision detection to be more efficient by adding "
+"an extra shell around shapes. Collision algorithms are more expensive when "
+"objects overlap by more than their margin, so a higher value for margins is "
+"better for performance, at the cost of accuracy around edges as it makes "
+"them less sharp."
+msgstr ""
+
+#: doc/classes/Shape2D.xml:4
+msgid "Base class for all 2D shapes."
+msgstr ""
+
+#: doc/classes/Shape2D.xml:7
+msgid "Base class for all 2D shapes. All 2D shape types inherit from this."
+msgstr ""
+
+#: doc/classes/Shape2D.xml:19
+msgid ""
+"Returns [code]true[/code] if this shape is colliding with another.\n"
+"This method needs the transformation matrix for this shape "
+"([code]local_xform[/code]), the shape to check collisions with "
+"([code]with_shape[/code]), and the transformation matrix of that shape "
+"([code]shape_xform[/code])."
+msgstr ""
+
+#: doc/classes/Shape2D.xml:29
+msgid ""
+"Returns a list of the points where this shape touches another. If there are "
+"no collisions the list is empty.\n"
+"This method needs the transformation matrix for this shape "
+"([code]local_xform[/code]), the shape to check collisions with "
+"([code]with_shape[/code]), and the transformation matrix of that shape "
+"([code]shape_xform[/code])."
+msgstr ""
+
+#: doc/classes/Shape2D.xml:41
+msgid ""
+"Returns whether this shape would collide with another, if a given movement "
+"was applied.\n"
+"This method needs the transformation matrix for this shape "
+"([code]local_xform[/code]), the movement to test on this shape "
+"([code]local_motion[/code]), the shape to check collisions with "
+"([code]with_shape[/code]), the transformation matrix of that shape "
+"([code]shape_xform[/code]), and the movement to test onto the other object "
+"([code]shape_motion[/code])."
+msgstr ""
+
+#: doc/classes/Shape2D.xml:53
+msgid ""
+"Returns a list of the points where this shape would touch another, if a "
+"given movement was applied. If there are no collisions the list is empty.\n"
+"This method needs the transformation matrix for this shape "
+"([code]local_xform[/code]), the movement to test on this shape "
+"([code]local_motion[/code]), the shape to check collisions with "
+"([code]with_shape[/code]), the transformation matrix of that shape "
+"([code]shape_xform[/code]), and the movement to test onto the other object "
+"([code]shape_motion[/code])."
+msgstr ""
+
+#: doc/classes/Shape2D.xml:62
+msgid ""
+"Draws a solid shape onto a [CanvasItem] with the [VisualServer] API filled "
+"with the specified [code]color[/code]. The exact drawing method is specific "
+"for each shape and cannot be configured."
+msgstr ""
+
+#: doc/classes/Shape2D.xml:68
+msgid "The shape's custom solver bias."
+msgstr ""
+
+#: doc/classes/ShortCut.xml:4
+msgid "A shortcut for binding input."
+msgstr ""
+
+#: doc/classes/ShortCut.xml:7
+msgid ""
+"A shortcut for binding input.\n"
+"Shortcuts are commonly used for interacting with a [Control] element from a "
+"[InputEvent]."
+msgstr ""
+
+#: doc/classes/ShortCut.xml:16
+msgid "Returns the shortcut's [InputEvent] as a [String]."
+msgstr ""
+
+#: doc/classes/ShortCut.xml:23
+msgid ""
+"Returns [code]true[/code] if the shortcut's [InputEvent] equals [code]event[/"
+"code]."
+msgstr ""
+
+#: doc/classes/ShortCut.xml:29
+msgid "If [code]true[/code], this shortcut is valid."
+msgstr ""
+
+#: doc/classes/ShortCut.xml:35
+msgid ""
+"The shortcut's [InputEvent].\n"
+"Generally the [InputEvent] is a keyboard key, though it can be any "
+"[InputEvent]."
+msgstr ""
+
+#: doc/classes/Skeleton.xml:4
+msgid "Skeleton for characters and animated objects."
+msgstr ""
+
+#: doc/classes/Skeleton.xml:7
+msgid ""
+"Skeleton provides a hierarchical interface for managing bones, including "
+"pose, rest and animation (see [Animation]). It can also use ragdoll "
+"physics.\n"
+"The overall transform of a bone with respect to the skeleton is determined "
+"by the following hierarchical order: rest pose, custom pose and pose.\n"
+"Note that \"global pose\" below refers to the overall transform of the bone "
+"with respect to skeleton, so it not the actual global/world transform of the "
+"bone."
+msgstr ""
+
+#: doc/classes/Skeleton.xml:20
+msgid ""
+"Adds a bone, with name [code]name[/code]. [method get_bone_count] will "
+"become the bone index."
+msgstr ""
+
+#: doc/classes/Skeleton.xml:28 doc/classes/Skeleton.xml:109
+#: doc/classes/Skeleton.xml:212
+msgid "[i]Deprecated soon.[/i]"
+msgstr ""
+
+#: doc/classes/Skeleton.xml:34
+msgid "Clear all the bones in this skeleton."
+msgstr ""
+
+#: doc/classes/Skeleton.xml:46
+msgid "Returns the bone index that matches [code]name[/code] as its name."
+msgstr ""
+
+#: doc/classes/Skeleton.xml:52
+msgid "Returns the amount of bones in the skeleton."
+msgstr ""
+
+#: doc/classes/Skeleton.xml:59
+msgid ""
+"Returns the custom pose of the specified bone. Custom pose is applied on top "
+"of the rest pose."
+msgstr ""
+
+#: doc/classes/Skeleton.xml:66
+msgid ""
+"Returns the overall transform of the specified bone, with respect to the "
+"skeleton. Being relative to the skeleton frame, this is not the actual "
+"\"global\" transform of the bone."
+msgstr ""
+
+#: doc/classes/Skeleton.xml:73
+msgid ""
+"Returns the overall transform of the specified bone, with respect to the "
+"skeleton, but without any global pose overrides. Being relative to the "
+"skeleton frame, this is not the actual \"global\" transform of the bone."
+msgstr ""
+
+#: doc/classes/Skeleton.xml:80
+msgid "Returns the name of the bone at index [code]index[/code]."
+msgstr ""
+
+#: doc/classes/Skeleton.xml:87
+msgid ""
+"Returns the bone index which is the parent of the bone at [code]bone_idx[/"
+"code]. If -1, then bone has no parent.\n"
+"[b]Note:[/b] The parent bone returned will always be less than "
+"[code]bone_idx[/code]."
+msgstr ""
+
+#: doc/classes/Skeleton.xml:95
+msgid ""
+"Returns the pose transform of the specified bone. Pose is applied on top of "
+"the custom pose, which is applied on top the rest pose."
+msgstr ""
+
+#: doc/classes/Skeleton.xml:102
+msgid "Returns the rest transform for a bone [code]bone_idx[/code]."
+msgstr ""
+
+#: doc/classes/Skeleton.xml:187
+msgid ""
+"Sets the bone index [code]parent_idx[/code] as the parent of the bone at "
+"[code]bone_idx[/code]. If -1, then bone has no parent.\n"
+"[b]Note:[/b] [code]parent_idx[/code] must be less than [code]bone_idx[/code]."
+msgstr ""
+
+#: doc/classes/Skeleton.xml:196
+msgid "Sets the pose transform for bone [code]bone_idx[/code]."
+msgstr ""
+
+#: doc/classes/Skeleton.xml:204
+msgid "Sets the rest transform for bone [code]bone_idx[/code]."
+msgstr ""
+
+#: doc/classes/Skeleton2D.xml:4
+msgid "Skeleton for 2D characters and animated objects."
+msgstr ""
+
+#: doc/classes/Skeleton2D.xml:7
+msgid ""
+"Skeleton2D parents a hierarchy of [Bone2D] objects. It is a requirement of "
+"[Bone2D]. Skeleton2D holds a reference to the rest pose of its children and "
+"acts as a single point of access to its bones."
+msgstr ""
+
+#: doc/classes/Skeleton2D.xml:10
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/animation/2d_skeletons.html"
+msgstr ""
+
+#: doc/classes/Skeleton2D.xml:17
+msgid ""
+"Returns a [Bone2D] from the node hierarchy parented by Skeleton2D. The "
+"object to return is identified by the parameter [code]idx[/code]. Bones are "
+"indexed by descending the node hierarchy from top to bottom, adding the "
+"children of each branch before moving to the next sibling."
+msgstr ""
+
+#: doc/classes/Skeleton2D.xml:23
+msgid ""
+"Returns the number of [Bone2D] nodes in the node hierarchy parented by "
+"Skeleton2D."
+msgstr ""
+
+#: doc/classes/Skeleton2D.xml:29
+msgid "Returns the [RID] of a Skeleton2D instance."
+msgstr ""
+
+#: doc/classes/SkeletonIK.xml:4
+msgid ""
+"SkeletonIK is used to place the end bone of a [Skeleton] bone chain at a "
+"certain point in 3D by rotating all bones in the chain accordingly."
+msgstr ""
+
+#: doc/classes/SkeletonIK.xml:7
+msgid ""
+"SkeletonIK is used to place the end bone of a [Skeleton] bone chain at a "
+"certain point in 3D by rotating all bones in the chain accordingly. A "
+"typical scenario for IK in games is to place a characters feet on the ground "
+"or a characters hands on a currently hold object. SkeletonIK uses "
+"FabrikInverseKinematic internally to solve the bone chain and applies the "
+"results to the [Skeleton] [code]bones_global_pose_override[/code] property "
+"for all affected bones in the chain. If fully applied this overwrites any "
+"bone transform from [Animation]s or bone custom poses set by users. The "
+"applied amount can be controlled with the [code]interpolation[/code] "
+"property.\n"
+"[codeblock]\n"
+"# Apply IK effect automatically on every new frame (not the current)\n"
+"skeleton_ik_node.start()\n"
+"\n"
+"# Apply IK effect only on the current frame\n"
+"skeleton_ik_node.start(true)\n"
+"\n"
+"# Stop IK effect and reset bones_global_pose_override on Skeleton\n"
+"skeleton_ik_node.stop()\n"
+"\n"
+"# Apply full IK effect\n"
+"skeleton_ik_node.set_interpolation(1.0)\n"
+"\n"
+"# Apply half IK effect\n"
+"skeleton_ik_node.set_interpolation(0.5)\n"
+"\n"
+"# Apply zero IK effect (a value at or below 0.01 also removes "
+"bones_global_pose_override on Skeleton)\n"
+"skeleton_ik_node.set_interpolation(0.0)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/SkeletonIK.xml:35
+msgid ""
+"Returns the parent [Skeleton] Node that was present when SkeletonIK entered "
+"the [SceneTree]. Returns null if the parent node was not a [Skeleton] Node "
+"when SkeletonIK entered the [SceneTree]."
+msgstr ""
+
+#: doc/classes/SkeletonIK.xml:41
+msgid ""
+"Returns [code]true[/code] if SkeletonIK is applying IK effects on continues "
+"frames to the [Skeleton] bones. Returns [code]false[/code] if SkeletonIK is "
+"stopped or [method start] was used with the [code]one_time[/code] parameter "
+"set to [code]true[/code]."
+msgstr ""
+
+#: doc/classes/SkeletonIK.xml:48
+msgid ""
+"Starts applying IK effects on each frame to the [Skeleton] bones but will "
+"only take effect starting on the next frame. If [code]one_time[/code] is "
+"[code]true[/code], this will take effect immediately but also reset on the "
+"next frame."
+msgstr ""
+
+#: doc/classes/SkeletonIK.xml:54
+msgid ""
+"Stops applying IK effects on each frame to the [Skeleton] bones and also "
+"calls [method Skeleton.clear_bones_global_pose_override] to remove existing "
+"overrides on all bones."
+msgstr ""
+
+#: doc/classes/SkeletonIK.xml:60
+msgid ""
+"Interpolation value for how much the IK results are applied to the current "
+"skeleton bone chain. A value of [code]1.0[/code] will overwrite all skeleton "
+"bone transforms completely while a value of [code]0.0[/code] will visually "
+"disable the SkeletonIK. A value at or below [code]0.01[/code] also calls "
+"[method Skeleton.clear_bones_global_pose_override]."
+msgstr ""
+
+#: doc/classes/SkeletonIK.xml:63
+msgid ""
+"Secondary target position (first is [member target] property or [member "
+"target_node]) for the IK chain. Use magnet position (pole target) to control "
+"the bending of the IK chain. Only works if the bone chain has more than 2 "
+"bones. The middle chain bone position will be linearly interpolated with the "
+"magnet position."
+msgstr ""
+
+#: doc/classes/SkeletonIK.xml:66
+msgid ""
+"Number of iteration loops used by the IK solver to produce more accurate "
+"(and elegant) bone chain results."
+msgstr ""
+
+#: doc/classes/SkeletonIK.xml:69
+msgid ""
+"The minimum distance between bone and goal target. If the distance is below "
+"this value, the IK solver stops further iterations."
+msgstr ""
+
+#: doc/classes/SkeletonIK.xml:72
+msgid ""
+"If [code]true[/code] overwrites the rotation of the tip bone with the "
+"rotation of the [member target] (or [member target_node] if defined)."
+msgstr ""
+
+#: doc/classes/SkeletonIK.xml:75
+msgid "The name of the current root bone, the first bone in the IK chain."
+msgstr ""
+
+#: doc/classes/SkeletonIK.xml:78
+msgid ""
+"First target of the IK chain where the tip bone is placed and, if [member "
+"override_tip_basis] is [code]true[/code], how the tip bone is rotated. If a "
+"[member target_node] path is available the nodes transform is used instead "
+"and this property is ignored."
+msgstr ""
+
+#: doc/classes/SkeletonIK.xml:81
+msgid ""
+"Target node [NodePath] for the IK chain. If available, the node's current "
+"[Transform] is used instead of the [member target] property."
+msgstr ""
+
+#: doc/classes/SkeletonIK.xml:84
+msgid ""
+"The name of the current tip bone, the last bone in the IK chain placed at "
+"the [member target] transform (or [member target_node] if defined)."
+msgstr ""
+
+#: doc/classes/SkeletonIK.xml:87
+msgid ""
+"If [code]true[/code], instructs the IK solver to consider the secondary "
+"magnet target (pole target) when calculating the bone chain. Use the magnet "
+"position (pole target) to control the bending of the IK chain."
+msgstr ""
+
+#: doc/classes/Sky.xml:4 doc/classes/Sky.xml:7
+msgid "The base class for [PanoramaSky] and [ProceduralSky]."
+msgstr ""
+
+#: doc/classes/Sky.xml:15
+msgid ""
+"The [Sky]'s radiance map size. The higher the radiance map size, the more "
+"detailed the lighting from the [Sky] will be.\n"
+"See [enum RadianceSize] constants for values.\n"
+"[b]Note:[/b] You will only benefit from high radiance sizes if you have "
+"perfectly sharp reflective surfaces in your project and are not using "
+"[ReflectionProbe]s or [GIProbe]s. For most projects, keeping [member "
+"radiance_size] to the default value is the best compromise between visuals "
+"and performance. Be careful when using high radiance size values as these "
+"can cause crashes on low-end GPUs."
+msgstr ""
+
+#: doc/classes/Sky.xml:22
+msgid "Radiance texture size is 32×32 pixels."
+msgstr ""
+
+#: doc/classes/Sky.xml:25
+msgid "Radiance texture size is 64×64 pixels."
+msgstr ""
+
+#: doc/classes/Sky.xml:28
+msgid "Radiance texture size is 128×128 pixels."
+msgstr ""
+
+#: doc/classes/Sky.xml:31
+msgid "Radiance texture size is 256×256 pixels."
+msgstr ""
+
+#: doc/classes/Sky.xml:34
+msgid "Radiance texture size is 512×512 pixels."
+msgstr ""
+
+#: doc/classes/Sky.xml:37
+msgid ""
+"Radiance texture size is 1024×1024 pixels.\n"
+"[b]Note:[/b] [constant RADIANCE_SIZE_1024] is not exposed in the inspector "
+"as it is known to cause GPU hangs on certain systems."
+msgstr ""
+
+#: doc/classes/Sky.xml:41
+msgid ""
+"Radiance texture size is 2048×2048 pixels.\n"
+"[b]Note:[/b] [constant RADIANCE_SIZE_2048] is not exposed in the inspector "
+"as it is known to cause GPU hangs on certain systems."
+msgstr ""
+
+#: doc/classes/Sky.xml:45
+msgid "Represents the size of the [enum RadianceSize] enum."
+msgstr ""
+
+#: doc/classes/Slider.xml:4
+msgid "Base class for GUI sliders."
+msgstr ""
+
+#: doc/classes/Slider.xml:7
+msgid ""
+"Base class for GUI sliders.\n"
+"[b]Note:[/b] The [signal Range.changed] and [signal Range.value_changed] "
+"signals are part of the [Range] class which this class inherits from."
+msgstr ""
+
+#: doc/classes/Slider.xml:16
+msgid ""
+"If [code]true[/code], the slider can be interacted with. If [code]false[/"
+"code], the value can be changed only by code."
+msgstr ""
+
+#: doc/classes/Slider.xml:20
+msgid "If [code]true[/code], the value can be changed using the mouse wheel."
+msgstr ""
+
+#: doc/classes/Slider.xml:24
+msgid ""
+"Number of ticks displayed on the slider, including border ticks. Ticks are "
+"uniformly-distributed value markers."
+msgstr ""
+
+#: doc/classes/Slider.xml:27
+msgid ""
+"If [code]true[/code], the slider will display ticks for minimum and maximum "
+"values."
+msgstr ""
+
+#: doc/classes/SliderJoint.xml:4
+msgid "Slider between two PhysicsBodies in 3D."
+msgstr ""
+
+#: doc/classes/SliderJoint.xml:7
+msgid ""
+"Slides across the X axis of the pivot object. See also [Generic6DOFJoint]."
+msgstr ""
+
+#: doc/classes/SliderJoint.xml:28
+msgid ""
+"The amount of damping of the rotation when the limit is surpassed.\n"
+"A lower damping value allows a rotation initiated by body A to travel to "
+"body B slower."
+msgstr ""
+
+#: doc/classes/SliderJoint.xml:35
+msgid ""
+"The amount of restitution of the rotation when the limit is surpassed.\n"
+"Does not affect damping."
+msgstr ""
+
+#: doc/classes/SliderJoint.xml:39
+msgid ""
+"A factor applied to the all rotation once the limit is surpassed.\n"
+"Makes all rotation slower when between 0 and 1."
+msgstr ""
+
+#: doc/classes/SliderJoint.xml:52 doc/classes/SliderJoint.xml:147
+msgid "A factor applied to the all rotation in the limits."
+msgstr ""
+
+#: doc/classes/SliderJoint.xml:61 doc/classes/SliderJoint.xml:156
+msgid ""
+"A factor applied to the all rotation across axes orthogonal to the slider."
+msgstr ""
+
+#: doc/classes/SliderJoint.xml:64
+msgid ""
+"The amount of damping that happens once the limit defined by [member "
+"linear_limit/lower_distance] and [member linear_limit/upper_distance] is "
+"surpassed."
+msgstr ""
+
+#: doc/classes/SliderJoint.xml:70
+msgid ""
+"The amount of restitution once the limits are surpassed. The lower, the more "
+"velocity-energy gets lost."
+msgstr ""
+
+#: doc/classes/SoftBody.xml:4
+msgid "A soft mesh physics body."
+msgstr ""
+
+#: doc/classes/SoftBody.xml:7
+msgid ""
+"A deformable physics body. Used to create elastic or deformable objects such "
+"as cloth, rubber, or other flexible materials."
+msgstr ""
+
+#: doc/classes/SoftBody.xml:10
+msgid "https://docs.godotengine.org/en/3.4/tutorials/physics/soft_body.html"
+msgstr ""
+
+#: doc/classes/SoftBody.xml:44
+msgid "Returns local translation of a vertex in the surface array."
+msgstr ""
+
+#: doc/classes/SoftBody.xml:51
+msgid "Returns [code]true[/code] if vertex is set to pinned."
+msgstr ""
+
+#: doc/classes/SoftBody.xml:83
+msgid ""
+"Sets the pinned state of a surface vertex. When set to [code]true[/code], "
+"the optional [code]attachment_path[/code] can define a [Spatial] the pinned "
+"vertex will be attached to."
+msgstr ""
+
+#: doc/classes/SoftBody.xml:91
+msgid ""
+"The physics layers this SoftBody is in.\n"
+"Collidable objects can exist in any of 32 different layers. These layers "
+"work like a tagging system, and are not visual. A collidable can use these "
+"layers to select with which objects it can collide, using the collision_mask "
+"property.\n"
+"A contact is detected if object A is in any of the layers that object B "
+"scans, or object B is in any layer scanned by object A. See [url=https://"
+"docs.godotengine.org/en/3.4/tutorials/physics/physics_introduction."
+"html#collision-layers-and-masks]Collision layers and masks[/url] in the "
+"documentation for more information."
+msgstr ""
+
+#: doc/classes/SoftBody.xml:96
+msgid ""
+"The physics layers this SoftBody scans for collisions. See [url=https://docs."
+"godotengine.org/en/3.4/tutorials/physics/physics_introduction.html#collision-"
+"layers-and-masks]Collision layers and masks[/url] in the documentation for "
+"more information."
+msgstr ""
+
+#: doc/classes/SoftBody.xml:105
+msgid "[NodePath] to a [CollisionObject] this SoftBody should avoid clipping."
+msgstr ""
+
+#: doc/classes/SoftBody.xml:108
+msgid ""
+"If [code]true[/code], the [SoftBody] is simulated in physics. Can be set to "
+"[code]false[/code] to pause the physics simulation."
+msgstr ""
+
+#: doc/classes/SoftBody.xml:115
+msgid "If [code]true[/code], the [SoftBody] will respond to [RayCast]s."
+msgstr ""
+
+#: doc/classes/SoftBody.xml:118
+msgid ""
+"Increasing this value will improve the resulting simulation, but can affect "
+"performance. Use with care."
+msgstr ""
+
+#: doc/classes/SoftBody.xml:121
+msgid "The SoftBody's mass."
+msgstr ""
+
+#: doc/classes/Spatial.xml:4
+msgid "Most basic 3D game object, parent of all 3D-related nodes."
+msgstr ""
+
+#: doc/classes/Spatial.xml:7
+msgid ""
+"Most basic 3D game object, with a 3D [Transform] and visibility settings. "
+"All other 3D game objects inherit from Spatial. Use [Spatial] as a parent "
+"node to move, scale, rotate and show/hide children in a 3D project.\n"
+"Affine operations (rotate, scale, translate) happen in parent's local "
+"coordinate system, unless the [Spatial] object is set as top-level. Affine "
+"operations in this coordinate system correspond to direct affine operations "
+"on the [Spatial]'s transform. The word local below refers to this coordinate "
+"system. The coordinate system that is attached to the [Spatial] object "
+"itself is referred to as object-local coordinate system.\n"
+"[b]Note:[/b] Unless otherwise specified, all methods that have angle "
+"parameters must have angles specified as [i]radians[/i]. To convert degrees "
+"to radians, use [method @GDScript.deg2rad]."
+msgstr ""
+
+#: doc/classes/Spatial.xml:12
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/3d/introduction_to_3d.html"
+msgstr ""
+
+#: doc/classes/Spatial.xml:13 doc/classes/Vector3.xml:16
+msgid "https://github.com/godotengine/godot-demo-projects/tree/master/3d"
+msgstr ""
+
+#: doc/classes/Spatial.xml:25
+msgid ""
+"Returns the parent [Spatial], or an empty [Object] if no parent exists or "
+"parent is not of type [Spatial]."
+msgstr ""
+
+#: doc/classes/Spatial.xml:31
+msgid ""
+"Returns the current [World] resource this [Spatial] node is registered to."
+msgstr ""
+
+#: doc/classes/Spatial.xml:39
+msgid ""
+"Rotates the global (world) transformation around axis, a unit [Vector3], by "
+"specified angle in radians. The rotation axis is in global coordinate system."
+msgstr ""
+
+#: doc/classes/Spatial.xml:46
+msgid ""
+"Scales the global (world) transformation by the given [Vector3] scale "
+"factors."
+msgstr ""
+
+#: doc/classes/Spatial.xml:53
+msgid ""
+"Moves the global (world) transformation by [Vector3] offset. The offset is "
+"in global coordinate system."
+msgstr ""
+
+#: doc/classes/Spatial.xml:59
+msgid ""
+"Disables rendering of this node. Changes [member visible] to [code]false[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Spatial.xml:65
+msgid ""
+"Returns whether node notifies about its local transformation changes. "
+"[Spatial] will not propagate this by default."
+msgstr ""
+
+#: doc/classes/Spatial.xml:71
+msgid ""
+"Returns whether this node uses a scale of [code](1, 1, 1)[/code] or its "
+"local transformation scale."
+msgstr ""
+
+#: doc/classes/Spatial.xml:77
+msgid ""
+"Returns whether this node is set as Toplevel, that is whether it ignores its "
+"parent nodes transformations."
+msgstr ""
+
+#: doc/classes/Spatial.xml:83
+msgid ""
+"Returns whether the node notifies about its global and local transformation "
+"changes. [Spatial] will not propagate this by default."
+msgstr ""
+
+#: doc/classes/Spatial.xml:97
+msgid ""
+"Rotates itself so that the local -Z axis points towards the [code]target[/"
+"code] position.\n"
+"The transform will first be rotated around the given [code]up[/code] vector, "
+"and then fully aligned to the target by a further rotation around an axis "
+"perpendicular to both the [code]target[/code] and [code]up[/code] vectors.\n"
+"Operations take place in global space."
+msgstr ""
+
+#: doc/classes/Spatial.xml:108
+msgid ""
+"Moves the node to the specified [code]position[/code], and then rotates "
+"itself to point toward the [code]target[/code] as per [method look_at]. "
+"Operations take place in global space."
+msgstr ""
+
+#: doc/classes/Spatial.xml:114
+msgid ""
+"Resets this node's transformations (like scale, skew and taper) preserving "
+"its rotation and translation by performing Gram-Schmidt orthonormalization "
+"on this node's [Transform]."
+msgstr ""
+
+#: doc/classes/Spatial.xml:122
+msgid ""
+"Rotates the local transformation around axis, a unit [Vector3], by specified "
+"angle in radians."
+msgstr ""
+
+#: doc/classes/Spatial.xml:130
+msgid ""
+"Rotates the local transformation around axis, a unit [Vector3], by specified "
+"angle in radians. The rotation axis is in object-local coordinate system."
+msgstr ""
+
+#: doc/classes/Spatial.xml:137
+msgid "Rotates the local transformation around the X axis by angle in radians."
+msgstr ""
+
+#: doc/classes/Spatial.xml:144
+msgid "Rotates the local transformation around the Y axis by angle in radians."
+msgstr ""
+
+#: doc/classes/Spatial.xml:151
+msgid "Rotates the local transformation around the Z axis by angle in radians."
+msgstr ""
+
+#: doc/classes/Spatial.xml:158
+msgid ""
+"Scales the local transformation by given 3D scale factors in object-local "
+"coordinate system."
+msgstr ""
+
+#: doc/classes/Spatial.xml:165
+msgid ""
+"Makes the node ignore its parents transformations. Node transformations are "
+"only in global space."
+msgstr ""
+
+#: doc/classes/Spatial.xml:172
+msgid ""
+"Sets whether the node uses a scale of [code](1, 1, 1)[/code] or its local "
+"transformation scale. Changes to the local transformation scale are "
+"preserved."
+msgstr ""
+
+#: doc/classes/Spatial.xml:178
+msgid ""
+"Reset all transformations for this node (sets its [Transform] to the "
+"identity matrix)."
+msgstr ""
+
+#: doc/classes/Spatial.xml:185
+msgid ""
+"Sets whether the node ignores notification that its transformation (global "
+"or local) changed."
+msgstr ""
+
+#: doc/classes/Spatial.xml:192
+msgid ""
+"Sets whether the node notifies about its local transformation changes. "
+"[Spatial] will not propagate this by default."
+msgstr ""
+
+#: doc/classes/Spatial.xml:199
+msgid ""
+"Sets whether the node notifies about its global and local transformation "
+"changes. [Spatial] will not propagate this by default, unless it is in the "
+"editor context and it has a valid gizmo."
+msgstr ""
+
+#: doc/classes/Spatial.xml:205
+msgid ""
+"Enables rendering of this node. Changes [member visible] to [code]true[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Spatial.xml:212
+msgid ""
+"Transforms [code]local_point[/code] from this node's local space to world "
+"space."
+msgstr ""
+
+#: doc/classes/Spatial.xml:219
+msgid ""
+"Transforms [code]global_point[/code] from world space to this node's local "
+"space."
+msgstr ""
+
+#: doc/classes/Spatial.xml:226
+msgid ""
+"Changes the node's position by the given offset [Vector3].\n"
+"Note that the translation [code]offset[/code] is affected by the node's "
+"scale, so if scaled by e.g. [code](10, 1, 1)[/code], a translation by an "
+"offset of [code](2, 0, 0)[/code] would actually add 20 ([code]2 * 10[/code]) "
+"to the X coordinate."
+msgstr ""
+
+#: doc/classes/Spatial.xml:234
+msgid ""
+"Changes the node's position by the given offset [Vector3] in local space."
+msgstr ""
+
+#: doc/classes/Spatial.xml:240
+msgid "Updates the [SpatialGizmo] of this node."
+msgstr ""
+
+#: doc/classes/Spatial.xml:246
+msgid ""
+"The [SpatialGizmo] for this node. Used for example in [EditorSpatialGizmo] "
+"as custom visualization and editing handles in Editor."
+msgstr ""
+
+#: doc/classes/Spatial.xml:249
+msgid "World space (global) [Transform] of this node."
+msgstr ""
+
+#: doc/classes/Spatial.xml:252
+msgid ""
+"Rotation part of the local transformation in radians, specified in terms of "
+"YXZ-Euler angles in the format (X angle, Y angle, Z angle).\n"
+"[b]Note:[/b] In the mathematical sense, rotation is a matrix and not a "
+"vector. The three Euler angles, which are the three independent parameters "
+"of the Euler-angle parametrization of the rotation matrix, are stored in a "
+"[Vector3] data structure not because the rotation is a vector, but only "
+"because [Vector3] exists as a convenient data-structure to store 3 floating-"
+"point numbers. Therefore, applying affine operations on the rotation \"vector"
+"\" is not meaningful."
+msgstr ""
+
+#: doc/classes/Spatial.xml:256
+msgid ""
+"Rotation part of the local transformation in degrees, specified in terms of "
+"YXZ-Euler angles in the format (X angle, Y angle, Z angle)."
+msgstr ""
+
+#: doc/classes/Spatial.xml:259
+msgid "Scale part of the local transformation."
+msgstr ""
+
+#: doc/classes/Spatial.xml:262
+msgid "Local space [Transform] of this node, with respect to the parent node."
+msgstr ""
+
+#: doc/classes/Spatial.xml:265
+msgid "Local translation of this node."
+msgstr ""
+
+#: doc/classes/Spatial.xml:268
+msgid ""
+"If [code]true[/code], this node is drawn. The node is only visible if all of "
+"its antecedents are visible as well (in other words, [method "
+"is_visible_in_tree] must return [code]true[/code])."
+msgstr ""
+
+#: doc/classes/Spatial.xml:274
+msgid ""
+"Emitted by portal system gameplay monitor when a node enters the gameplay "
+"area."
+msgstr ""
+
+#: doc/classes/Spatial.xml:279
+msgid ""
+"Emitted by portal system gameplay monitor when a node exits the gameplay "
+"area."
+msgstr ""
+
+#: doc/classes/Spatial.xml:284
+msgid "Emitted when node visibility changes."
+msgstr ""
+
+#: doc/classes/Spatial.xml:290
+msgid ""
+"Spatial nodes receives this notification when their global transform "
+"changes. This means that either the current or a parent node changed its "
+"transform.\n"
+"In order for [constant NOTIFICATION_TRANSFORM_CHANGED] to work, users first "
+"need to ask for it, with [method set_notify_transform]. The notification is "
+"also sent if the node is in the editor context and it has a valid gizmo."
+msgstr ""
+
+#: doc/classes/Spatial.xml:294
+msgid ""
+"Spatial nodes receives this notification when they are registered to new "
+"[World] resource."
+msgstr ""
+
+#: doc/classes/Spatial.xml:297
+msgid ""
+"Spatial nodes receives this notification when they are unregistered from "
+"current [World] resource."
+msgstr ""
+
+#: doc/classes/Spatial.xml:300
+msgid "Spatial nodes receives this notification when their visibility changes."
+msgstr ""
+
+#: doc/classes/Spatial.xml:303
+msgid ""
+"Spatial nodes receives this notification if the portal system gameplay "
+"monitor detects they have entered the gameplay area."
+msgstr ""
+
+#: doc/classes/Spatial.xml:306
+msgid ""
+"Spatial nodes receives this notification if the portal system gameplay "
+"monitor detects they have exited the gameplay area."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:4
+msgid "Default 3D rendering material."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:7
+msgid ""
+"This provides a default material with a wide variety of rendering features "
+"and properties without the need to write shader code. See the tutorial below "
+"for details."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:10
+msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/spatial_material.html"
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:17
+msgid "Returns [code]true[/code], if the specified [enum Feature] is enabled."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:24
+msgid ""
+"Returns [code]true[/code], if the specified flag is enabled. See [enum "
+"Flags] enumerator for options."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:31
+msgid ""
+"Returns the [Texture] associated with the specified [enum TextureParam]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:39
+msgid ""
+"If [code]true[/code], enables the specified [enum Feature]. Many features "
+"that are available in [SpatialMaterial]s need to be enabled before use. This "
+"way the cost for using the feature is only incurred when specified. Features "
+"can also be enabled by setting the corresponding member to [code]true[/code]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:47
+msgid ""
+"If [code]true[/code], enables the specified flag. Flags are optional "
+"behaviour that can be turned on and off. Only one flag can be enabled at a "
+"time with this function, the flag enumerators cannot be bit-masked together "
+"to enable or disable multiple flags at once. Flags can also be enabled by "
+"setting the corresponding member to [code]true[/code]. See [enum Flags] "
+"enumerator for options."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:55
+msgid ""
+"Sets the [Texture] to be used by the specified [enum TextureParam]. This "
+"function is called when setting members ending in [code]*_texture[/code]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:61
+msgid "The material's base color."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:64
+msgid ""
+"Texture to multiply by [member albedo_color]. Used for basic texturing of "
+"objects."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:67
+msgid "The strength of the anisotropy effect."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:70
+msgid ""
+"If [code]true[/code], anisotropy is enabled. Changes the shape of the "
+"specular blob and aligns it to tangent space. Mesh tangents are needed for "
+"this to work. If the mesh does not contain tangents the anisotropy effect "
+"will appear broken."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:73
+msgid "Texture that offsets the tangent map for anisotropy calculations."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:76
+msgid ""
+"If [code]true[/code], ambient occlusion is enabled. Ambient occlusion "
+"darkens areas based on the [member ao_texture]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:79
+msgid ""
+"Amount that ambient occlusion affects lighting from lights. If [code]0[/"
+"code], ambient occlusion only affects ambient light. If [code]1[/code], "
+"ambient occlusion affects lights just as much as it affects ambient light. "
+"This can be used to impact the strength of the ambient occlusion effect, but "
+"typically looks unrealistic."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:82
+msgid ""
+"If [code]true[/code], use [code]UV2[/code] coordinates to look up from the "
+"[member ao_texture]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:85
+msgid ""
+"Texture that defines the amount of ambient occlusion for a given point on "
+"the object."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:88 doc/classes/SpatialMaterial.xml:325
+msgid ""
+"Specifies the channel of the [member ao_texture] in which the ambient "
+"occlusion information is stored. This is useful when you store the "
+"information for multiple effects in a single texture. For example if you "
+"stored metallic in the red channel, roughness in the blue, and ambient "
+"occlusion in the green you could reduce the number of textures you use."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:91
+msgid ""
+"Sets the strength of the clearcoat effect. Setting to [code]0[/code] looks "
+"the same as disabling the clearcoat effect."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:94
+msgid ""
+"If [code]true[/code], clearcoat rendering is enabled. Adds a secondary "
+"transparent pass to the lighting calculation resulting in an added specular "
+"blob. This makes materials appear as if they have a clear layer on them that "
+"can be either glossy or rough.\n"
+"[b]Note:[/b] Clearcoat rendering is not visible if the material has [member "
+"flags_unshaded] set to [code]true[/code]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:98
+msgid ""
+"Sets the roughness of the clearcoat pass. A higher value results in a "
+"smoother clearcoat while a lower value results in a rougher clearcoat."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:101
+msgid ""
+"Texture that defines the strength of the clearcoat effect and the glossiness "
+"of the clearcoat. Strength is specified in the red channel while glossiness "
+"is specified in the green channel."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:104
+msgid ""
+"If [code]true[/code], the shader will read depth texture at multiple points "
+"along the view ray to determine occlusion and parrallax. This can be very "
+"performance demanding, but results in more realistic looking depth mapping."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:107
+msgid ""
+"If [code]true[/code], depth mapping is enabled (also called \"parallax "
+"mapping\" or \"height mapping\"). See also [member normal_enabled].\n"
+"[b]Note:[/b] Depth mapping is not supported if triplanar mapping is used on "
+"the same material. The value of [member depth_enabled] will be ignored if "
+"[member uv1_triplanar] is enabled."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:111
+msgid ""
+"If [code]true[/code], direction of the binormal is flipped before using in "
+"the depth effect. This may be necessary if you have encoded your binormals "
+"in a way that is conflicting with the depth effect."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:114
+msgid ""
+"If [code]true[/code], direction of the tangent is flipped before using in "
+"the depth effect. This may be necessary if you have encoded your tangents in "
+"a way that is conflicting with the depth effect."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:117
+msgid ""
+"Number of layers to use when using [member depth_deep_parallax] and the view "
+"direction is perpendicular to the surface of the object. A higher number "
+"will be more performance demanding while a lower number may not look as "
+"crisp."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:120
+msgid ""
+"Number of layers to use when using [member depth_deep_parallax] and the view "
+"direction is parallel to the surface of the object. A higher number will be "
+"more performance demanding while a lower number may not look as crisp."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:123
+msgid ""
+"Scales the depth offset effect. A higher number will create a larger depth."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:126
+msgid ""
+"Texture used to determine depth at a given pixel. Depth is always stored in "
+"the red channel."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:129
+msgid "Texture that specifies the color of the detail overlay."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:132
+msgid ""
+"Specifies how the [member detail_albedo] should blend with the current "
+"[code]ALBEDO[/code]. See [enum BlendMode] for options."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:135
+msgid ""
+"If [code]true[/code], enables the detail overlay. Detail is a second texture "
+"that gets mixed over the surface of the object based on [member "
+"detail_mask]. This can be used to add variation to objects, or to blend "
+"between two different albedo/normal textures."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:138
+msgid ""
+"Texture used to specify how the detail textures get blended with the base "
+"textures."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:141
+msgid ""
+"Texture that specifies the per-pixel normal of the detail overlay.\n"
+"[b]Note:[/b] Godot expects the normal map to use X+, Y-, and Z+ coordinates. "
+"See [url=http://wiki.polycount.com/wiki/"
+"Normal_Map_Technical_Details#Common_Swizzle_Coordinates]this page[/url] for "
+"a comparison of normal map coordinates expected by popular engines."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:145
+msgid ""
+"Specifies whether to use [code]UV[/code] or [code]UV2[/code] for the detail "
+"layer. See [enum DetailUV] for options."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:148
+msgid ""
+"Distance at which the object appears fully opaque.\n"
+"[b]Note:[/b] If [code]distance_fade_max_distance[/code] is less than "
+"[code]distance_fade_min_distance[/code], the behavior will be reversed. The "
+"object will start to fade away at [code]distance_fade_max_distance[/code] "
+"and will fully disappear once it reaches [code]distance_fade_min_distance[/"
+"code]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:152
+msgid ""
+"Distance at which the object starts to become visible. If the object is less "
+"than this distance away, it will be invisible.\n"
+"[b]Note:[/b] If [code]distance_fade_min_distance[/code] is greater than "
+"[code]distance_fade_max_distance[/code], the behavior will be reversed. The "
+"object will start to fade away at [code]distance_fade_max_distance[/code] "
+"and will fully disappear once it reaches [code]distance_fade_min_distance[/"
+"code]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:156
+msgid ""
+"Specifies which type of fade to use. Can be any of the [enum "
+"DistanceFadeMode]s."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:159
+msgid "The emitted light's color. See [member emission_enabled]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:162
+msgid ""
+"If [code]true[/code], the body emits light. Emitting light makes the object "
+"appear brighter. The object can also cast light on other objects if a "
+"[GIProbe] or [BakedLightmap] is used and this object is used in baked "
+"lighting."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:165
+msgid "The emitted light's strength. See [member emission_enabled]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:168
+msgid "Use [code]UV2[/code] to read from the [member emission_texture]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:171
+msgid ""
+"Sets how [member emission] interacts with [member emission_texture]. Can "
+"either add or multiply. See [enum EmissionOperator] for options."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:174
+msgid "Texture that specifies how much surface emits light at a given point."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:177
+msgid ""
+"Forces a conversion of the [member albedo_texture] from sRGB space to linear "
+"space."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:180
+msgid "If [code]true[/code], the object receives no ambient light."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:183
+msgid ""
+"If [code]true[/code], the object receives no shadow that would otherwise be "
+"cast onto it."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:186
+msgid ""
+"If [code]true[/code], the shader will compute extra operations to make sure "
+"the normal stays correct when using a non-uniform scale. Only enable if "
+"using non-uniform scaling."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:189
+msgid ""
+"If [code]true[/code], the object is rendered at the same size regardless of "
+"distance."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:192
+msgid ""
+"If [code]true[/code], depth testing is disabled and the object will be drawn "
+"in render order."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:195
+msgid ""
+"If [code]true[/code], transparency is enabled on the body. See also [member "
+"params_blend_mode]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:198
+msgid "If [code]true[/code], the object is unaffected by lighting."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:201
+msgid ""
+"If [code]true[/code], render point size can be changed.\n"
+"[b]Note:[/b] This is only effective for objects whose geometry is point-"
+"based rather than triangle-based. See also [member params_point_size]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:205
+msgid ""
+"If [code]true[/code], enables the \"shadow to opacity\" render mode where "
+"lighting modifies the alpha so shadowed areas are opaque and non-shadowed "
+"areas are transparent. Useful for overlaying shadows onto a camera feed in "
+"AR."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:208
+msgid ""
+"If [code]true[/code], lighting is calculated per vertex rather than per "
+"pixel. This may increase performance on low-end devices."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:211
+msgid ""
+"If [code]true[/code], triplanar mapping is calculated in world space rather "
+"than object local space. See also [member uv1_triplanar]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:214
+msgid ""
+"A high value makes the material appear more like a metal. Non-metals use "
+"their albedo as the diffuse color and add diffuse to the specular "
+"reflection. With non-metals, the reflection appears on top of the albedo "
+"color. Metals use their albedo as a multiplier to the specular reflection "
+"and set the diffuse color to black resulting in a tinted reflection. "
+"Materials work better when fully metal or fully non-metal, values between "
+"[code]0[/code] and [code]1[/code] should only be used for blending between "
+"metal and non-metal sections. To alter the amount of reflection use [member "
+"roughness]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:217
+msgid ""
+"Sets the size of the specular lobe. The specular lobe is the bright spot "
+"that is reflected from light sources.\n"
+"[b]Note:[/b] Unlike [member metallic], this is not energy-conserving, so it "
+"should be left at [code]0.5[/code] in most cases. See also [member "
+"roughness]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:221
+msgid ""
+"Texture used to specify metallic for an object. This is multiplied by "
+"[member metallic]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:224
+msgid ""
+"Specifies the channel of the [member metallic_texture] in which the metallic "
+"information is stored. This is useful when you store the information for "
+"multiple effects in a single texture. For example if you stored metallic in "
+"the red channel, roughness in the blue, and ambient occlusion in the green "
+"you could reduce the number of textures you use."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:227
+msgid "If [code]true[/code], normal mapping is enabled."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:230
+msgid "The strength of the normal map's effect."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:233
+msgid ""
+"Texture used to specify the normal at a given pixel. The "
+"[code]normal_texture[/code] only uses the red and green channels; the blue "
+"and alpha channels are ignored. The normal read from [code]normal_texture[/"
+"code] is oriented around the surface normal provided by the [Mesh].\n"
+"[b]Note:[/b] The mesh must have both normals and tangents defined in its "
+"vertex data. Otherwise, the normal map won't render correctly and will only "
+"appear to darken the whole surface. If creating geometry with [SurfaceTool], "
+"you can use [method SurfaceTool.generate_normals] and [method SurfaceTool."
+"generate_tangents] to automatically generate normals and tangents "
+"respectively.\n"
+"[b]Note:[/b] Godot expects the normal map to use X+, Y-, and Z+ coordinates. "
+"See [url=http://wiki.polycount.com/wiki/"
+"Normal_Map_Technical_Details#Common_Swizzle_Coordinates]this page[/url] for "
+"a comparison of normal map coordinates expected by popular engines."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:238
+msgid "Threshold at which the alpha scissor will discard values."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:241
+msgid ""
+"If [code]true[/code], the shader will keep the scale set for the mesh. "
+"Otherwise the scale is lost when billboarding. Only applies when [member "
+"params_billboard_mode] is [constant BILLBOARD_ENABLED]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:244
+msgid ""
+"Controls how the object faces the camera. See [enum BillboardMode].\n"
+"[b]Note:[/b] Billboard mode is not suitable for VR because the left-right "
+"vector of the camera is not horizontal when the screen is attached to your "
+"head instead of on the table. See [url=https://github.com/godotengine/godot/"
+"issues/41567]GitHub issue #41567[/url] for details."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:248
+msgid ""
+"The material's blend mode.\n"
+"[b]Note:[/b] Values other than [code]Mix[/code] force the object into the "
+"transparent pipeline. See [enum BlendMode]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:252
+msgid ""
+"Which side of the object is not drawn when backfaces are rendered. See [enum "
+"CullMode]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:255
+msgid ""
+"Determines when depth rendering takes place. See [enum DepthDrawMode]. See "
+"also [member flags_transparent]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:258
+msgid ""
+"The algorithm used for diffuse light scattering. See [enum DiffuseMode]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:261
+msgid ""
+"If [code]true[/code], enables the vertex grow setting. See [member "
+"params_grow_amount]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:264
+msgid "Grows object vertices in the direction of their normals."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:267
+msgid "Currently unimplemented in Godot."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:270
+msgid "The point size in pixels. See [member flags_use_point_size]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:273
+msgid "The method for rendering the specular blob. See [enum SpecularMode]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:276
+msgid ""
+"If [code]true[/code], the shader will discard all pixels that have an alpha "
+"value less than [member params_alpha_scissor_threshold]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:279
+msgid ""
+"The number of horizontal frames in the particle sprite sheet. Only enabled "
+"when using [constant BILLBOARD_PARTICLES]. See [member "
+"params_billboard_mode]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:282
+msgid ""
+"If [code]true[/code], particle animations are looped. Only enabled when "
+"using [constant BILLBOARD_PARTICLES]. See [member params_billboard_mode]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:285
+msgid ""
+"The number of vertical frames in the particle sprite sheet. Only enabled "
+"when using [constant BILLBOARD_PARTICLES]. See [member "
+"params_billboard_mode]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:288
+msgid ""
+"Distance over which the fade effect takes place. The larger the distance the "
+"longer it takes for an object to fade."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:291
+msgid ""
+"If [code]true[/code], the proximity fade effect is enabled. The proximity "
+"fade effect fades out each pixel based on its distance to another object."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:294
+msgid ""
+"If [code]true[/code], the refraction effect is enabled. Refraction distorts "
+"transparency based on light from behind the object. When using the GLES3 "
+"backend, the material's roughness value will affect the blurriness of the "
+"refraction. Higher roughness values will make the refraction look blurrier."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:297
+msgid ""
+"The strength of the refraction effect. Higher values result in a more "
+"distorted appearance for the refraction."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:300
+msgid ""
+"Texture that controls the strength of the refraction per-pixel. Multiplied "
+"by [member refraction_scale]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:303
+msgid ""
+"Specifies the channel of the [member refraction_texture] in which the "
+"refraction information is stored. This is useful when you store the "
+"information for multiple effects in a single texture. For example if you "
+"stored metallic in the red channel, roughness in the blue, and ambient "
+"occlusion in the green you could reduce the number of textures you use."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:306
+msgid "Sets the strength of the rim lighting effect."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:309
+msgid ""
+"If [code]true[/code], rim effect is enabled. Rim lighting increases the "
+"brightness at glancing angles on an object.\n"
+"[b]Note:[/b] Rim lighting is not visible if the material has [member "
+"flags_unshaded] set to [code]true[/code]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:313
+msgid ""
+"Texture used to set the strength of the rim lighting effect per-pixel. "
+"Multiplied by [member rim]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:316
+msgid ""
+"The amount of to blend light and albedo color when rendering rim effect. If "
+"[code]0[/code] the light color is used, while [code]1[/code] means albedo "
+"color is used. An intermediate value generally works best."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:319
+msgid ""
+"Surface reflection. A value of [code]0[/code] represents a perfect mirror "
+"while a value of [code]1[/code] completely blurs the reflection. See also "
+"[member metallic]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:322
+msgid ""
+"Texture used to control the roughness per-pixel. Multiplied by [member "
+"roughness]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:328
+msgid ""
+"If [code]true[/code], subsurface scattering is enabled. Emulates light that "
+"penetrates an object's surface, is scattered, and then emerges."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:331
+msgid "The strength of the subsurface scattering effect."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:334
+msgid ""
+"Texture used to control the subsurface scattering strength. Stored in the "
+"red texture channel. Multiplied by [member subsurf_scatter_strength]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:337
+msgid ""
+"The color used by the transmission effect. Represents the light passing "
+"through an object."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:340
+msgid "If [code]true[/code], the transmission effect is enabled."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:343
+msgid ""
+"Texture used to control the transmission effect per-pixel. Added to [member "
+"transmission]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:346
+msgid ""
+"How much to offset the [code]UV[/code] coordinates. This amount will be "
+"added to [code]UV[/code] in the vertex function. This can be used to offset "
+"a texture."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:349
+msgid ""
+"How much to scale the [code]UV[/code] coordinates. This is multiplied by "
+"[code]UV[/code] in the vertex function."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:352
+msgid ""
+"If [code]true[/code], instead of using [code]UV[/code] textures will use a "
+"triplanar texture lookup to determine how to apply textures. Triplanar uses "
+"the orientation of the object's surface to blend between texture "
+"coordinates. It reads from the source texture 3 times, once for each axis "
+"and then blends between the results based on how closely the pixel aligns "
+"with each axis. This is often used for natural features to get a realistic "
+"blend of materials. Because triplanar texturing requires many more texture "
+"reads per-pixel it is much slower than normal UV texturing. Additionally, "
+"because it is blending the texture between the three axes, it is unsuitable "
+"when you are trying to achieve crisp texturing."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:355 doc/classes/SpatialMaterial.xml:367
+msgid ""
+"A lower number blends the texture more softly while a higher number blends "
+"the texture more sharply."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:358
+msgid ""
+"How much to offset the [code]UV2[/code] coordinates. This amount will be "
+"added to [code]UV2[/code] in the vertex function. This can be used to offset "
+"a texture."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:361
+msgid ""
+"How much to scale the [code]UV2[/code] coordinates. This is multiplied by "
+"[code]UV2[/code] in the vertex function."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:364
+msgid ""
+"If [code]true[/code], instead of using [code]UV2[/code] textures will use a "
+"triplanar texture lookup to determine how to apply textures. Triplanar uses "
+"the orientation of the object's surface to blend between texture "
+"coordinates. It reads from the source texture 3 times, once for each axis "
+"and then blends between the results based on how closely the pixel aligns "
+"with each axis. This is often used for natural features to get a realistic "
+"blend of materials. Because triplanar texturing requires many more texture "
+"reads per-pixel it is much slower than normal UV texturing. Additionally, "
+"because it is blending the texture between the three axes, it is unsuitable "
+"when you are trying to achieve crisp texturing."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:370
+msgid ""
+"If [code]true[/code], the model's vertex colors are processed as sRGB mode."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:373
+msgid "If [code]true[/code], the vertex color is used as albedo color."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:378
+msgid "Texture specifying per-pixel color."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:381
+msgid "Texture specifying per-pixel metallic value."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:384
+msgid "Texture specifying per-pixel roughness value."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:387
+msgid "Texture specifying per-pixel emission color."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:390
+msgid "Texture specifying per-pixel normal vector."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:393
+msgid "Texture specifying per-pixel rim value."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:396
+msgid "Texture specifying per-pixel clearcoat value."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:399
+msgid ""
+"Texture specifying per-pixel flowmap direction for use with [member "
+"anisotropy]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:402
+msgid "Texture specifying per-pixel ambient occlusion value."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:405
+msgid "Texture specifying per-pixel depth."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:408
+msgid "Texture specifying per-pixel subsurface scattering."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:411
+msgid "Texture specifying per-pixel transmission color."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:414
+msgid "Texture specifying per-pixel refraction strength."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:417
+msgid "Texture specifying per-pixel detail mask blending value."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:420
+msgid "Texture specifying per-pixel detail color."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:423
+msgid "Texture specifying per-pixel detail normal."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:426
+msgid "Represents the size of the [enum TextureParam] enum."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:429
+msgid "Use [code]UV[/code] with the detail texture."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:432
+msgid "Use [code]UV2[/code] with the detail texture."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:435
+msgid "Constant for setting [member flags_transparent]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:438
+msgid "Constant for setting [member emission_enabled]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:441
+msgid "Constant for setting [member normal_enabled]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:444
+msgid "Constant for setting [member rim_enabled]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:447
+msgid "Constant for setting [member clearcoat_enabled]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:450
+msgid "Constant for setting [member anisotropy_enabled]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:453
+msgid "Constant for setting [member ao_enabled]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:456
+msgid "Constant for setting [member depth_enabled]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:459
+msgid "Constant for setting [member subsurf_scatter_enabled]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:462
+msgid "Constant for setting [member transmission_enabled]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:465
+msgid "Constant for setting [member refraction_enabled]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:468
+msgid "Constant for setting [member detail_enabled]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:474
+msgid ""
+"Default blend mode. The color of the object is blended over the background "
+"based on the object's alpha value."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:477
+msgid "The color of the object is added to the background."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:480
+msgid "The color of the object is subtracted from the background."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:483
+msgid "The color of the object is multiplied by the background."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:486
+msgid "Default depth draw mode. Depth is drawn only for opaque objects."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:489
+msgid "Depth draw is calculated for both opaque and transparent objects."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:492
+msgid "No depth draw."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:495
+msgid ""
+"For transparent objects, an opaque pass is made first with the opaque parts, "
+"then transparency is drawn."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:498
+msgid "Default cull mode. The back of the object is culled when not visible."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:501
+msgid "The front of the object is culled when not visible."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:504
+msgid "No culling is performed."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:507
+msgid ""
+"No lighting is used on the object. Color comes directly from [code]ALBEDO[/"
+"code]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:510
+msgid ""
+"Lighting is calculated per-vertex rather than per-pixel. This can be used to "
+"increase the speed of the shader at the cost of quality."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:513
+msgid ""
+"Disables the depth test, so this object is drawn on top of all others. "
+"However, objects drawn after it in the draw order may cover it."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:516
+msgid "Set [code]ALBEDO[/code] to the per-vertex color specified in the mesh."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:519
+msgid ""
+"Vertex color is in sRGB space and needs to be converted to linear. Only "
+"applies in the GLES3 renderer."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:522
+msgid ""
+"Uses point size to alter the size of primitive points. Also changes the "
+"albedo texture lookup to use [code]POINT_COORD[/code] instead of [code]UV[/"
+"code]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:525
+msgid ""
+"Object is scaled by depth so that it always appears the same size on screen."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:528
+msgid ""
+"Shader will keep the scale set for the mesh. Otherwise the scale is lost "
+"when billboarding. Only applies when [member params_billboard_mode] is "
+"[constant BILLBOARD_ENABLED]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:531
+msgid ""
+"Use triplanar texture lookup for all texture lookups that would normally use "
+"[code]UV[/code]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:534
+msgid ""
+"Use triplanar texture lookup for all texture lookups that would normally use "
+"[code]UV2[/code]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:537
+msgid ""
+"Use [code]UV2[/code] coordinates to look up from the [member ao_texture]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:540
+msgid ""
+"Use [code]UV2[/code] coordinates to look up from the [member "
+"emission_texture]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:543
+msgid "Use alpha scissor. Set by [member params_use_alpha_scissor]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:546
+msgid ""
+"Use world coordinates in the triplanar texture lookup instead of local "
+"coordinates."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:549
+msgid "Forces the shader to convert albedo from sRGB space to linear space."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:552
+msgid "Disables receiving shadows from other objects."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:555
+msgid "Disables receiving ambient light."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:558
+msgid "Ensures that normals appear correct, even with non-uniform scaling."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:561
+msgid "Enables the shadow to opacity feature."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:567
+msgid "Default diffuse scattering algorithm."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:570
+msgid "Diffuse scattering ignores roughness."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:573
+msgid "Extends Lambert to cover more than 90 degrees when roughness increases."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:576
+msgid "Attempts to use roughness to emulate microsurfacing."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:579
+msgid "Uses a hard cut for lighting, with smoothing affected by roughness."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:582
+msgid "Default specular blob."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:585 doc/classes/SpatialMaterial.xml:588
+msgid "Older specular algorithm, included for compatibility."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:591
+msgid "Toon blob which changes size based on roughness."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:594
+msgid "No specular blob."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:597
+msgid "Billboard mode is disabled."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:600
+msgid "The object's Z axis will always face the camera."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:603
+msgid "The object's X axis will always face the camera."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:606
+msgid ""
+"Used for particle systems when assigned to [Particles] and [CPUParticles] "
+"nodes. Enables [code]particles_anim_*[/code] properties.\n"
+"The [member ParticlesMaterial.anim_speed] or [member CPUParticles."
+"anim_speed] should also be set to a positive value for the animation to play."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:610
+msgid "Used to read from the red channel of a texture."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:613
+msgid "Used to read from the green channel of a texture."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:616
+msgid "Used to read from the blue channel of a texture."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:619
+msgid "Used to read from the alpha channel of a texture."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:625
+msgid "Adds the emission color to the color from the emission texture."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:628
+msgid "Multiplies the emission color by the color from the emission texture."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:631
+msgid "Do not use distance fade."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:634
+msgid ""
+"Smoothly fades the object out based on each pixel's distance from the camera "
+"using the alpha channel."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:637
+msgid ""
+"Smoothly fades the object out based on each pixel's distance from the camera "
+"using a dither approach. Dithering discards pixels based on a set pattern to "
+"smoothly fade without enabling transparency. On certain hardware this can be "
+"faster than [constant DISTANCE_FADE_PIXEL_ALPHA]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:640
+msgid ""
+"Smoothly fades the object out based on the object's distance from the camera "
+"using a dither approach. Dithering discards pixels based on a set pattern to "
+"smoothly fade without enabling transparency. On certain hardware this can be "
+"faster than [constant DISTANCE_FADE_PIXEL_ALPHA]."
+msgstr ""
+
+#: doc/classes/SphereMesh.xml:4 doc/classes/SphereMesh.xml:7
+msgid "Class representing a spherical [PrimitiveMesh]."
+msgstr ""
+
+#: doc/classes/SphereMesh.xml:15
+msgid "Full height of the sphere."
+msgstr ""
+
+#: doc/classes/SphereMesh.xml:18
+msgid ""
+"If [code]true[/code], a hemisphere is created rather than a full sphere.\n"
+"[b]Note:[/b] To get a regular hemisphere, the height and radius of the "
+"sphere must be equal."
+msgstr ""
+
+#: doc/classes/SphereMesh.xml:22
+msgid "Number of radial segments on the sphere."
+msgstr ""
+
+#: doc/classes/SphereMesh.xml:25
+msgid "Radius of sphere."
+msgstr ""
+
+#: doc/classes/SphereMesh.xml:28
+msgid "Number of segments along the height of the sphere."
+msgstr ""
+
+#: doc/classes/SphereShape.xml:4
+msgid "Sphere shape for 3D collisions."
+msgstr ""
+
+#: doc/classes/SphereShape.xml:7
+msgid ""
+"Sphere shape for 3D collisions, which can be set into a [PhysicsBody] or "
+"[Area]. This shape is useful for modeling sphere-like 3D objects."
+msgstr ""
+
+#: doc/classes/SphereShape.xml:16
+msgid "The sphere's radius. The shape's diameter is double the radius."
+msgstr ""
+
+#: doc/classes/SpinBox.xml:4
+msgid "Numerical input text field."
+msgstr ""
+
+#: doc/classes/SpinBox.xml:7
+msgid ""
+"SpinBox is a numerical input text field. It allows entering integers and "
+"floats.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"var spin_box = SpinBox.new()\n"
+"add_child(spin_box)\n"
+"var line_edit = spin_box.get_line_edit()\n"
+"line_edit.context_menu_enabled = false\n"
+"spin_box.align = LineEdit.ALIGN_RIGHT\n"
+"[/codeblock]\n"
+"The above code will create a [SpinBox], disable context menu on it and set "
+"the text alignment to right.\n"
+"See [Range] class for more options over the [SpinBox].\n"
+"[b]Note:[/b] [SpinBox] relies on an underlying [LineEdit] node. To theme a "
+"[SpinBox]'s background, add theme items for [LineEdit] and customize them."
+msgstr ""
+
+#: doc/classes/SpinBox.xml:26
+msgid "Applies the current value of this [SpinBox]."
+msgstr ""
+
+#: doc/classes/SpinBox.xml:32
+msgid ""
+"Returns the [LineEdit] instance from this [SpinBox]. You can use it to "
+"access properties and methods of [LineEdit].\n"
+"[b]Warning:[/b] This is a required internal node, removing and freeing it "
+"may cause a crash. If you wish to hide it or any of its children, use their "
+"[member CanvasItem.visible] property."
+msgstr ""
+
+#: doc/classes/SpinBox.xml:39
+msgid "Sets the text alignment of the [SpinBox]."
+msgstr ""
+
+#: doc/classes/SpinBox.xml:42
+msgid ""
+"If [code]true[/code], the [SpinBox] will be editable. Otherwise, it will be "
+"read only."
+msgstr ""
+
+#: doc/classes/SpinBox.xml:45
+msgid ""
+"Adds the specified [code]prefix[/code] string before the numerical value of "
+"the [SpinBox]."
+msgstr ""
+
+#: doc/classes/SpinBox.xml:48
+msgid ""
+"Adds the specified [code]suffix[/code] string after the numerical value of "
+"the [SpinBox]."
+msgstr ""
+
+#: doc/classes/SpinBox.xml:55
+msgid "Sets a custom [Texture] for up and down arrows of the [SpinBox]."
+msgstr ""
+
+#: doc/classes/SplitContainer.xml:4
+msgid "Container for splitting and adjusting."
+msgstr ""
+
+#: doc/classes/SplitContainer.xml:7
+msgid ""
+"Container for splitting two [Control]s vertically or horizontally, with a "
+"grabber that allows adjusting the split offset or ratio."
+msgstr ""
+
+#: doc/classes/SplitContainer.xml:15
+msgid ""
+"Clamps the [member split_offset] value to not go outside the currently "
+"possible minimal and maximum values."
+msgstr ""
+
+#: doc/classes/SplitContainer.xml:21
+msgid ""
+"If [code]true[/code], the area of the first [Control] will be collapsed and "
+"the dragger will be disabled."
+msgstr ""
+
+#: doc/classes/SplitContainer.xml:24
+msgid ""
+"Determines the dragger's visibility. See [enum DraggerVisibility] for "
+"details."
+msgstr ""
+
+#: doc/classes/SplitContainer.xml:27
+msgid ""
+"The initial offset of the splitting between the two [Control]s, with "
+"[code]0[/code] being at the end of the first [Control]."
+msgstr ""
+
+#: doc/classes/SplitContainer.xml:34
+msgid "Emitted when the dragger is dragged by user."
+msgstr ""
+
+#: doc/classes/SplitContainer.xml:40
+msgid "The split dragger is visible when the cursor hovers it."
+msgstr ""
+
+#: doc/classes/SplitContainer.xml:43
+msgid "The split dragger is never visible."
+msgstr ""
+
+#: doc/classes/SplitContainer.xml:46
+msgid "The split dragger is never visible and its space collapsed."
+msgstr ""
+
+#: doc/classes/SpotLight.xml:4
+msgid "A spotlight, such as a reflector spotlight or a lantern."
+msgstr ""
+
+#: doc/classes/SpotLight.xml:7
+msgid ""
+"A Spotlight is a type of [Light] node that emits lights in a specific "
+"direction, in the shape of a cone. The light is attenuated through the "
+"distance. This attenuation can be configured by changing the energy, radius "
+"and attenuation parameters of [Light].\n"
+"[b]Note:[/b] By default, only 32 SpotLights may affect a single mesh "
+"[i]resource[/i] at once. Consider splitting your level into several meshes "
+"to decrease the likelihood that more than 32 lights will affect the same "
+"mesh resource. Splitting the level mesh will also improve frustum culling "
+"effectiveness, leading to greater performance. If you need to use more "
+"lights per mesh, you can increase [member ProjectSettings.rendering/limits/"
+"rendering/max_lights_per_object] at the cost of shader compilation times."
+msgstr ""
+
+#: doc/classes/SpotLight.xml:18
+msgid "The spotlight's angle in degrees."
+msgstr ""
+
+#: doc/classes/SpotLight.xml:21
+msgid "The spotlight's angular attenuation curve."
+msgstr ""
+
+#: doc/classes/SpotLight.xml:24
+msgid "The spotlight's light energy attenuation curve."
+msgstr ""
+
+#: doc/classes/SpotLight.xml:27
+msgid ""
+"The maximal range that can be reached by the spotlight. Note that the "
+"effectively lit area may appear to be smaller depending on the [member "
+"spot_attenuation] in use. No matter the [member spot_attenuation] in use, "
+"the light will never reach anything outside this range."
+msgstr ""
+
+#: doc/classes/SpringArm.xml:4
+msgid "A helper node, mostly used in 3rd person cameras."
+msgstr ""
+
+#: doc/classes/SpringArm.xml:7
+msgid ""
+"The SpringArm node is a node that casts a ray (or collision shape) along its "
+"z axis and moves all its direct children to the collision point, minus a "
+"margin.\n"
+"The most common use case for this is to make a 3rd person camera that reacts "
+"to collisions in the environment.\n"
+"The SpringArm will either cast a ray, or if a shape is given, it will cast "
+"the shape in the direction of its z axis.\n"
+"If you use the SpringArm as a camera controller for your player, you might "
+"need to exclude the player's collider from the SpringArm's collision check."
+msgstr ""
+
+#: doc/classes/SpringArm.xml:19
+msgid ""
+"Adds the [PhysicsBody] object with the given [RID] to the list of "
+"[PhysicsBody] objects excluded from the collision check."
+msgstr ""
+
+#: doc/classes/SpringArm.xml:25
+msgid ""
+"Clears the list of [PhysicsBody] objects excluded from the collision check."
+msgstr ""
+
+#: doc/classes/SpringArm.xml:31
+msgid "Returns the spring arm's current length."
+msgstr ""
+
+#: doc/classes/SpringArm.xml:38
+msgid ""
+"Removes the given [RID] from the list of [PhysicsBody] objects excluded from "
+"the collision check."
+msgstr ""
+
+#: doc/classes/SpringArm.xml:44
+msgid ""
+"The layers against which the collision check shall be done. See [url=https://"
+"docs.godotengine.org/en/3.4/tutorials/physics/physics_introduction."
+"html#collision-layers-and-masks]Collision layers and masks[/url] in the "
+"documentation for more information."
+msgstr ""
+
+#: doc/classes/SpringArm.xml:47
+msgid ""
+"When the collision check is made, a candidate length for the SpringArm is "
+"given.\n"
+"The margin is then subtracted to this length and the translation is applied "
+"to the child objects of the SpringArm.\n"
+"This margin is useful for when the SpringArm has a [Camera] as a child node: "
+"without the margin, the [Camera] would be placed on the exact point of "
+"collision, while with the margin the [Camera] would be placed close to the "
+"point of collision."
+msgstr ""
+
+#: doc/classes/SpringArm.xml:52
+msgid ""
+"The [Shape] to use for the SpringArm.\n"
+"When the shape is set, the SpringArm will cast the [Shape] on its z axis "
+"instead of performing a ray cast."
+msgstr ""
+
+#: doc/classes/SpringArm.xml:56
+msgid ""
+"The maximum extent of the SpringArm. This is used as a length for both the "
+"ray and the shape cast used internally to calculate the desired position of "
+"the SpringArm's child nodes.\n"
+"To know more about how to perform a shape cast or a ray cast, please consult "
+"the [PhysicsDirectSpaceState] documentation."
+msgstr ""
+
+#: doc/classes/Sprite.xml:4
+msgid "General-purpose sprite node."
+msgstr ""
+
+#: doc/classes/Sprite.xml:7
+msgid ""
+"A node that displays a 2D texture. The texture displayed can be a region "
+"from a larger atlas texture, or a frame from a sprite sheet animation."
+msgstr ""
+
+#: doc/classes/Sprite.xml:16
+msgid ""
+"Returns a [Rect2] representing the Sprite's boundary in local coordinates. "
+"Can be used to detect if the Sprite was clicked. Example:\n"
+"[codeblock]\n"
+"func _input(event):\n"
+" if event is InputEventMouseButton and event.pressed and event."
+"button_index == BUTTON_LEFT:\n"
+" if get_rect().has_point(to_local(event.position)):\n"
+" print(\"A click!\")\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Sprite.xml:29
+msgid ""
+"Returns [code]true[/code], if the pixel at the given position is opaque and "
+"[code]false[/code] in other case.\n"
+"[b]Note:[/b] It also returns [code]false[/code], if the sprite's texture is "
+"[code]null[/code] or if the given position is invalid."
+msgstr ""
+
+#: doc/classes/Sprite.xml:36
+msgid "If [code]true[/code], texture is centered."
+msgstr ""
+
+#: doc/classes/Sprite.xml:45 doc/classes/Sprite3D.xml:15
+msgid ""
+"Current frame to display from sprite sheet. [member hframes] or [member "
+"vframes] must be greater than 1."
+msgstr ""
+
+#: doc/classes/Sprite.xml:48 doc/classes/Sprite3D.xml:18
+msgid ""
+"Coordinates of the frame to display from sprite sheet. This is as an alias "
+"for the [member frame] property. [member hframes] or [member vframes] must "
+"be greater than 1."
+msgstr ""
+
+#: doc/classes/Sprite.xml:51 doc/classes/Sprite3D.xml:21
+msgid "The number of columns in the sprite sheet."
+msgstr ""
+
+#: doc/classes/Sprite.xml:54
+msgid ""
+"The normal map gives depth to the Sprite.\n"
+"[b]Note:[/b] Godot expects the normal map to use X+, Y-, and Z+ coordinates. "
+"See [url=http://wiki.polycount.com/wiki/"
+"Normal_Map_Technical_Details#Common_Swizzle_Coordinates]this page[/url] for "
+"a comparison of normal map coordinates expected by popular engines."
+msgstr ""
+
+#: doc/classes/Sprite.xml:61
+msgid ""
+"If [code]true[/code], texture is cut from a larger atlas texture. See "
+"[member region_rect]."
+msgstr ""
+
+#: doc/classes/Sprite.xml:64
+msgid "If [code]true[/code], the outermost pixels get blurred out."
+msgstr ""
+
+#: doc/classes/Sprite.xml:67 doc/classes/Sprite3D.xml:27
+msgid ""
+"The region of the atlas texture to display. [member region_enabled] must be "
+"[code]true[/code]."
+msgstr ""
+
+#: doc/classes/Sprite.xml:70
+msgid "[Texture] object to draw."
+msgstr ""
+
+#: doc/classes/Sprite.xml:73 doc/classes/Sprite3D.xml:33
+msgid "The number of rows in the sprite sheet."
+msgstr ""
+
+#: doc/classes/Sprite.xml:79 doc/classes/Sprite3D.xml:39
+msgid "Emitted when the [member frame] changes."
+msgstr ""
+
+#: doc/classes/Sprite.xml:84
+msgid "Emitted when the [member texture] changes."
+msgstr ""
+
+#: doc/classes/Sprite3D.xml:4
+msgid "2D sprite node in a 3D world."
+msgstr ""
+
+#: doc/classes/Sprite3D.xml:7
+msgid ""
+"A node that displays a 2D texture in a 3D environment. The texture displayed "
+"can be a region from a larger atlas texture, or a frame from a sprite sheet "
+"animation."
+msgstr ""
+
+#: doc/classes/Sprite3D.xml:24
+msgid ""
+"If [code]true[/code], texture will be cut from a larger atlas texture. See "
+"[member region_rect]."
+msgstr ""
+
+#: doc/classes/Sprite3D.xml:30
+msgid ""
+"[Texture] object to draw. If [member GeometryInstance.material_override] is "
+"used, this will be overridden."
+msgstr ""
+
+#: doc/classes/SpriteBase3D.xml:4
+msgid "2D sprite node in 3D environment."
+msgstr ""
+
+#: doc/classes/SpriteBase3D.xml:7
+msgid "A node that displays 2D texture information in a 3D environment."
+msgstr ""
+
+#: doc/classes/SpriteBase3D.xml:27
+msgid "Returns the rectangle representing this sprite."
+msgstr ""
+
+#: doc/classes/SpriteBase3D.xml:35
+msgid "If [code]true[/code], the specified flag will be enabled."
+msgstr ""
+
+#: doc/classes/SpriteBase3D.xml:43
+msgid "The direction in which the front of the texture faces."
+msgstr ""
+
+#: doc/classes/SpriteBase3D.xml:51
+msgid ""
+"If [code]true[/code], texture can be seen from the back as well, if "
+"[code]false[/code], it is invisible when looking at it from behind."
+msgstr ""
+
+#: doc/classes/SpriteBase3D.xml:60
+msgid ""
+"A color value that gets multiplied on, could be used for mood-coloring or to "
+"simulate the color of light."
+msgstr ""
+
+#: doc/classes/SpriteBase3D.xml:66
+msgid ""
+"The objects' visibility on a scale from [code]0[/code] fully invisible to "
+"[code]1[/code] fully visible."
+msgstr ""
+
+#: doc/classes/SpriteBase3D.xml:69
+msgid "The size of one pixel's width on the sprite to scale it in 3D."
+msgstr ""
+
+#: doc/classes/SpriteBase3D.xml:72
+msgid ""
+"If [code]true[/code], the [Light] in the [Environment] has effects on the "
+"sprite."
+msgstr ""
+
+#: doc/classes/SpriteBase3D.xml:75
+msgid ""
+"If [code]true[/code], the texture's transparency and the opacity are used to "
+"make those parts of the sprite invisible."
+msgstr ""
+
+#: doc/classes/SpriteBase3D.xml:80
+msgid ""
+"If set, the texture's transparency and the opacity are used to make those "
+"parts of the sprite invisible."
+msgstr ""
+
+#: doc/classes/SpriteBase3D.xml:83
+msgid "If set, lights in the environment affect the sprite."
+msgstr ""
+
+#: doc/classes/SpriteBase3D.xml:86
+msgid ""
+"If set, texture can be seen from the back as well, if not, it is invisible "
+"when looking at it from behind."
+msgstr ""
+
+#: doc/classes/SpriteBase3D.xml:89
+msgid "Represents the size of the [enum DrawFlags] enum."
+msgstr ""
+
+#: doc/classes/SpriteFrames.xml:4
+msgid "Sprite frame library for AnimatedSprite."
+msgstr ""
+
+#: doc/classes/SpriteFrames.xml:7
+msgid ""
+"Sprite frame library for [AnimatedSprite]. Contains frames and animation "
+"data for playback.\n"
+"[b]Note:[/b] You can associate a set of normal maps by creating additional "
+"[SpriteFrames] resources with a [code]_normal[/code] suffix. For example, "
+"having 2 [SpriteFrames] resources [code]run[/code] and [code]run_normal[/"
+"code] will make it so the [code]run[/code] animation uses the normal map."
+msgstr ""
+
+#: doc/classes/SpriteFrames.xml:17
+msgid "Adds a new animation to the library."
+msgstr ""
+
+#: doc/classes/SpriteFrames.xml:26
+msgid "Adds a frame to the given animation."
+msgstr ""
+
+#: doc/classes/SpriteFrames.xml:33
+msgid "Removes all frames from the given animation."
+msgstr ""
+
+#: doc/classes/SpriteFrames.xml:39
+msgid "Removes all animations. A \"default\" animation will be created."
+msgstr ""
+
+#: doc/classes/SpriteFrames.xml:46
+msgid ""
+"Returns [code]true[/code] if the given animation is configured to loop when "
+"it finishes playing. Otherwise, returns [code]false[/code]."
+msgstr ""
+
+#: doc/classes/SpriteFrames.xml:52
+msgid ""
+"Returns an array containing the names associated to each animation. Values "
+"are placed in alphabetical order."
+msgstr ""
+
+#: doc/classes/SpriteFrames.xml:59 doc/classes/SpriteFrames.xml:120
+msgid "The animation's speed in frames per second."
+msgstr ""
+
+#: doc/classes/SpriteFrames.xml:67
+msgid "Returns the animation's selected frame."
+msgstr ""
+
+#: doc/classes/SpriteFrames.xml:74
+msgid "Returns the number of frames in the animation."
+msgstr ""
+
+#: doc/classes/SpriteFrames.xml:81
+msgid "If [code]true[/code], the named animation exists."
+msgstr ""
+
+#: doc/classes/SpriteFrames.xml:88
+msgid "Removes the given animation."
+msgstr ""
+
+#: doc/classes/SpriteFrames.xml:96
+msgid "Removes the animation's selected frame."
+msgstr ""
+
+#: doc/classes/SpriteFrames.xml:104
+msgid "Changes the animation's name to [code]newname[/code]."
+msgstr ""
+
+#: doc/classes/SpriteFrames.xml:112
+msgid "If [code]true[/code], the animation will loop."
+msgstr ""
+
+#: doc/classes/SpriteFrames.xml:129
+msgid "Sets the texture of the given frame."
+msgstr ""
+
+#: doc/classes/SpriteFrames.xml:135
+msgid "Compatibility property, always equals to an empty array."
+msgstr ""
+
+#: doc/classes/StaticBody.xml:4
+msgid "Static body for 3D physics."
+msgstr ""
+
+#: doc/classes/StaticBody.xml:7
+msgid ""
+"Static body for 3D physics. A static body is a simple body that is not "
+"intended to move. In contrast to [RigidBody], they don't consume any CPU "
+"resources as long as they don't move.\n"
+"Additionally, a constant linear or angular velocity can be set for the "
+"static body, so even if it doesn't move, it affects other bodies as if it "
+"was moving (this is useful for simulating conveyor belts or conveyor wheels)."
+msgstr ""
+
+#: doc/classes/StaticBody.xml:23
+msgid ""
+"The body's constant angular velocity. This does not rotate the body, but "
+"affects other bodies that touch it, as if it was in a state of rotation."
+msgstr ""
+
+#: doc/classes/StaticBody.xml:26
+msgid ""
+"The body's constant linear velocity. This does not move the body, but "
+"affects other bodies that touch it, as if it was in a state of movement."
+msgstr ""
+
+#: doc/classes/StaticBody.xml:29
+msgid ""
+"The body's friction, from 0 (frictionless) to 1 (full friction).\n"
+"Deprecated, use [member PhysicsMaterial.friction] instead via [member "
+"physics_material_override]."
+msgstr ""
+
+#: doc/classes/StaticBody2D.xml:4
+msgid "Static body for 2D physics."
+msgstr ""
+
+#: doc/classes/StaticBody2D.xml:7
+msgid ""
+"Static body for 2D physics. A StaticBody2D is a body that is not intended to "
+"move. It is ideal for implementing objects in the environment, such as walls "
+"or platforms.\n"
+"Additionally, a constant linear or angular velocity can be set for the "
+"static body, which will affect colliding bodies as if it were moving (for "
+"example, a conveyor belt)."
+msgstr ""
+
+#: doc/classes/StaticBody2D.xml:20
+msgid ""
+"The body's constant angular velocity. This does not rotate the body, but "
+"affects colliding bodies, as if it were rotating."
+msgstr ""
+
+#: doc/classes/StaticBody2D.xml:23
+msgid ""
+"The body's constant linear velocity. This does not move the body, but "
+"affects colliding bodies, as if it were moving."
+msgstr ""
+
+#: doc/classes/StaticBody2D.xml:26
+msgid ""
+"The body's friction. Values range from [code]0[/code] (no friction) to "
+"[code]1[/code] (full friction).\n"
+"Deprecated, use [member PhysicsMaterial.friction] instead via [member "
+"physics_material_override]."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:4
+msgid "Abstraction and base class for stream-based protocols."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:7
+msgid ""
+"StreamPeer is an abstraction and base class for stream-based protocols (such "
+"as TCP). It provides an API for sending and receiving data through streams "
+"as raw data or strings."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:15
+msgid "Gets a signed 16-bit value from the stream."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:21
+msgid "Gets a signed 32-bit value from the stream."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:27
+msgid "Gets a signed 64-bit value from the stream."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:33
+msgid "Gets a signed byte from the stream."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:39
+msgid "Returns the amount of bytes this [StreamPeer] has available."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:46
+msgid ""
+"Returns a chunk data with the received bytes. The amount of bytes to be "
+"received can be requested in the [code]bytes[/code] argument. If not enough "
+"bytes are available, the function will block until the desired amount is "
+"received. This function returns two values, an [enum @GlobalScope.Error] "
+"code and a data array."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:52
+msgid "Gets a double-precision float from the stream."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:58
+msgid "Gets a single-precision float from the stream."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:65
+msgid ""
+"Returns a chunk data with the received bytes. The amount of bytes to be "
+"received can be requested in the \"bytes\" argument. If not enough bytes are "
+"available, the function will return how many were actually received. This "
+"function returns two values, an [enum @GlobalScope.Error] code, and a data "
+"array."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:72
+msgid ""
+"Gets a string with byte-length [code]bytes[/code] from the stream. If "
+"[code]bytes[/code] is negative (default) the length will be read from the "
+"stream using the reverse process of [method put_string]."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:78
+msgid "Gets an unsigned 16-bit value from the stream."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:84
+msgid "Gets an unsigned 32-bit value from the stream."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:90
+msgid "Gets an unsigned 64-bit value from the stream."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:96
+msgid "Gets an unsigned byte from the stream."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:103
+msgid ""
+"Gets an UTF-8 string with byte-length [code]bytes[/code] from the stream "
+"(this decodes the string sent as UTF-8). If [code]bytes[/code] is negative "
+"(default) the length will be read from the stream using the reverse process "
+"of [method put_utf8_string]."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:110
+msgid ""
+"Gets a Variant from the stream. If [code]allow_objects[/code] is [code]true[/"
+"code], decoding objects is allowed.\n"
+"[b]Warning:[/b] Deserialized objects can contain code which gets executed. "
+"Do not use this option if the serialized object comes from untrusted sources "
+"to avoid potential security threats such as remote code execution."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:118
+msgid "Puts a signed 16-bit value into the stream."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:125
+msgid "Puts a signed 32-bit value into the stream."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:132
+msgid "Puts a signed 64-bit value into the stream."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:139
+msgid "Puts a signed byte into the stream."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:146
+msgid ""
+"Sends a chunk of data through the connection, blocking if necessary until "
+"the data is done sending. This function returns an [enum @GlobalScope.Error] "
+"code."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:153
+msgid "Puts a double-precision float into the stream."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:160
+msgid "Puts a single-precision float into the stream."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:167
+msgid ""
+"Sends a chunk of data through the connection. If all the data could not be "
+"sent at once, only part of it will. This function returns two values, an "
+"[enum @GlobalScope.Error] code and an integer, describing how much data was "
+"actually sent."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:174
+msgid ""
+"Puts a zero-terminated ASCII string into the stream prepended by a 32-bit "
+"unsigned integer representing its size.\n"
+"[b]Note:[/b] To put an ASCII string without prepending its size, you can use "
+"[method put_data]:\n"
+"[codeblock]\n"
+"put_data(\"Hello world\".to_ascii())\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:185
+msgid "Puts an unsigned 16-bit value into the stream."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:192
+msgid "Puts an unsigned 32-bit value into the stream."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:199
+msgid "Puts an unsigned 64-bit value into the stream."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:206
+msgid "Puts an unsigned byte into the stream."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:213
+msgid ""
+"Puts a zero-terminated UTF-8 string into the stream prepended by a 32 bits "
+"unsigned integer representing its size.\n"
+"[b]Note:[/b] To put an UTF-8 string without prepending its size, you can use "
+"[method put_data]:\n"
+"[codeblock]\n"
+"put_data(\"Hello world\".to_utf8())\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:225
+msgid ""
+"Puts a Variant into the stream. If [code]full_objects[/code] is [code]true[/"
+"code] encoding objects is allowed (and can potentially include code)."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:231
+msgid ""
+"If [code]true[/code], this [StreamPeer] will using big-endian format for "
+"encoding and decoding."
+msgstr ""
+
+#: doc/classes/StreamPeerSSL.xml:4
+msgid "SSL stream peer."
+msgstr ""
+
+#: doc/classes/StreamPeerSSL.xml:7
+msgid ""
+"SSL stream peer. This object can be used to connect to an SSL server or "
+"accept a single SSL client connection."
+msgstr ""
+
+#: doc/classes/StreamPeerSSL.xml:20
+msgid ""
+"Accepts a peer connection as a server using the given [code]private_key[/"
+"code] and providing the given [code]certificate[/code] to the client. You "
+"can pass the optional [code]chain[/code] parameter to provide additional CA "
+"chain information along with the certificate."
+msgstr ""
+
+#: doc/classes/StreamPeerSSL.xml:30
+msgid ""
+"Connects to a peer using an underlying [StreamPeer] [code]stream[/code]. If "
+"[code]validate_certs[/code] is [code]true[/code], [StreamPeerSSL] will "
+"validate that the certificate presented by the peer matches the "
+"[code]for_hostname[/code].\n"
+"[b]Note:[/b] Specifying a custom [code]valid_certificate[/code] is not "
+"supported in HTML5 exports due to browsers restrictions."
+msgstr ""
+
+#: doc/classes/StreamPeerSSL.xml:37 doc/classes/StreamPeerTCP.xml:23
+msgid "Disconnects from host."
+msgstr ""
+
+#: doc/classes/StreamPeerSSL.xml:49
+msgid ""
+"Poll the connection to check for incoming bytes. Call this right before "
+"[method StreamPeer.get_available_bytes] for it to work properly."
+msgstr ""
+
+#: doc/classes/StreamPeerSSL.xml:59
+msgid "A status representing a [StreamPeerSSL] that is disconnected."
+msgstr ""
+
+#: doc/classes/StreamPeerSSL.xml:62
+msgid "A status representing a [StreamPeerSSL] during handshaking."
+msgstr ""
+
+#: doc/classes/StreamPeerSSL.xml:65
+msgid "A status representing a [StreamPeerSSL] that is connected to a host."
+msgstr ""
+
+#: doc/classes/StreamPeerSSL.xml:68
+msgid "A status representing a [StreamPeerSSL] in error state."
+msgstr ""
+
+#: doc/classes/StreamPeerSSL.xml:71
+msgid ""
+"An error status that shows a mismatch in the SSL certificate domain "
+"presented by the host and the domain requested for validation."
+msgstr ""
+
+#: doc/classes/StreamPeerTCP.xml:4
+msgid "TCP stream peer."
+msgstr ""
+
+#: doc/classes/StreamPeerTCP.xml:7
+msgid ""
+"TCP stream peer. This object can be used to connect to TCP servers, or also "
+"is returned by a TCP server."
+msgstr ""
+
+#: doc/classes/StreamPeerTCP.xml:17
+msgid ""
+"Connects to the specified [code]host:port[/code] pair. A hostname will be "
+"resolved if valid. Returns [constant OK] on success or [constant FAILED] on "
+"failure."
+msgstr ""
+
+#: doc/classes/StreamPeerTCP.xml:29
+msgid "Returns the IP of this peer."
+msgstr ""
+
+#: doc/classes/StreamPeerTCP.xml:35
+msgid "Returns the port of this peer."
+msgstr ""
+
+#: doc/classes/StreamPeerTCP.xml:41
+msgid "Returns the status of the connection, see [enum Status]."
+msgstr ""
+
+#: doc/classes/StreamPeerTCP.xml:47
+msgid ""
+"Returns [code]true[/code] if this peer is currently connected or is "
+"connecting to a host, [code]false[/code] otherwise."
+msgstr ""
+
+#: doc/classes/StreamPeerTCP.xml:54
+msgid ""
+"If [code]enabled[/code] is [code]true[/code], packets will be sent "
+"immediately. If [code]enabled[/code] is [code]false[/code] (the default), "
+"packet transfers will be delayed and combined using [url=https://en."
+"wikipedia.org/wiki/Nagle%27s_algorithm]Nagle's algorithm[/url].\n"
+"[b]Note:[/b] It's recommended to leave this disabled for applications that "
+"send large packets or need to transfer a lot of data, as enabling this can "
+"decrease the total available bandwidth."
+msgstr ""
+
+#: doc/classes/StreamPeerTCP.xml:61
+msgid ""
+"The initial status of the [StreamPeerTCP]. This is also the status after "
+"disconnecting."
+msgstr ""
+
+#: doc/classes/StreamPeerTCP.xml:64
+msgid "A status representing a [StreamPeerTCP] that is connecting to a host."
+msgstr ""
+
+#: doc/classes/StreamPeerTCP.xml:67
+msgid "A status representing a [StreamPeerTCP] that is connected to a host."
+msgstr ""
+
+#: doc/classes/StreamPeerTCP.xml:70
+msgid "A status representing a [StreamPeerTCP] in error state."
+msgstr ""
+
+#: doc/classes/StreamTexture.xml:4
+msgid "A [code].stex[/code] texture."
+msgstr ""
+
+#: doc/classes/StreamTexture.xml:7
+msgid "A texture that is loaded from a [code].stex[/code] file."
+msgstr ""
+
+#: doc/classes/StreamTexture.xml:16
+msgid "Loads the texture from the given path."
+msgstr ""
+
+#: doc/classes/StreamTexture.xml:23
+msgid "The StreamTexture's file path to a [code].stex[/code] file."
+msgstr ""
+
+#: doc/classes/String.xml:4
+msgid "Built-in string class."
+msgstr ""
+
+#: doc/classes/String.xml:7
+msgid ""
+"This is the built-in string class (and the one used by GDScript). It "
+"supports Unicode and provides all necessary means for string handling. "
+"Strings are reference-counted and use a copy-on-write approach, so passing "
+"them around is cheap in resources."
+msgstr ""
+
+#: doc/classes/String.xml:10
+msgid ""
+"https://docs.godotengine.org/en/3.4/getting_started/scripting/gdscript/"
+"gdscript_format_string.html"
+msgstr ""
+
+#: doc/classes/String.xml:17
+msgid "Constructs a new String from the given [bool]."
+msgstr ""
+
+#: doc/classes/String.xml:24
+msgid "Constructs a new String from the given [int]."
+msgstr ""
+
+#: doc/classes/String.xml:31
+msgid "Constructs a new String from the given [float]."
+msgstr ""
+
+#: doc/classes/String.xml:38
+msgid "Constructs a new String from the given [Vector2]."
+msgstr ""
+
+#: doc/classes/String.xml:45
+msgid "Constructs a new String from the given [Rect2]."
+msgstr ""
+
+#: doc/classes/String.xml:52
+msgid "Constructs a new String from the given [Vector3]."
+msgstr ""
+
+#: doc/classes/String.xml:59
+msgid "Constructs a new String from the given [Transform2D]."
+msgstr ""
+
+#: doc/classes/String.xml:66
+msgid "Constructs a new String from the given [Plane]."
+msgstr ""
+
+#: doc/classes/String.xml:73
+msgid "Constructs a new String from the given [Quat]."
+msgstr ""
+
+#: doc/classes/String.xml:80
+msgid "Constructs a new String from the given [AABB]."
+msgstr ""
+
+#: doc/classes/String.xml:87
+msgid "Constructs a new String from the given [Basis]."
+msgstr ""
+
+#: doc/classes/String.xml:94
+msgid "Constructs a new String from the given [Transform]."
+msgstr ""
+
+#: doc/classes/String.xml:101
+msgid "Constructs a new String from the given [Color]."
+msgstr ""
+
+#: doc/classes/String.xml:108
+msgid "Constructs a new String from the given [NodePath]."
+msgstr ""
+
+#: doc/classes/String.xml:115
+msgid "Constructs a new String from the given [RID]."
+msgstr ""
+
+#: doc/classes/String.xml:122
+msgid "Constructs a new String from the given [Dictionary]."
+msgstr ""
+
+#: doc/classes/String.xml:129
+msgid "Constructs a new String from the given [Array]."
+msgstr ""
+
+#: doc/classes/String.xml:136
+msgid "Constructs a new String from the given [PoolByteArray]."
+msgstr ""
+
+#: doc/classes/String.xml:143
+msgid "Constructs a new String from the given [PoolIntArray]."
+msgstr ""
+
+#: doc/classes/String.xml:150
+msgid "Constructs a new String from the given [PoolRealArray]."
+msgstr ""
+
+#: doc/classes/String.xml:157
+msgid "Constructs a new String from the given [PoolStringArray]."
+msgstr ""
+
+#: doc/classes/String.xml:164
+msgid "Constructs a new String from the given [PoolVector2Array]."
+msgstr ""
+
+#: doc/classes/String.xml:171
+msgid "Constructs a new String from the given [PoolVector3Array]."
+msgstr ""
+
+#: doc/classes/String.xml:178
+msgid "Constructs a new String from the given [PoolColorArray]."
+msgstr ""
+
+#: doc/classes/String.xml:185
+msgid "Returns [code]true[/code] if the string begins with the given string."
+msgstr ""
+
+#: doc/classes/String.xml:191
+msgid "Returns the bigrams (pairs of consecutive letters) of this string."
+msgstr ""
+
+#: doc/classes/String.xml:197
+msgid ""
+"Returns a copy of the string with special characters escaped using the C "
+"language standard."
+msgstr ""
+
+#: doc/classes/String.xml:203
+msgid ""
+"Returns a copy of the string with escaped characters replaced by their "
+"meanings. Supported escape sequences are [code]\\'[/code], [code]\\\"[/"
+"code], [code]\\?[/code], [code]\\\\[/code], [code]\\a[/code], [code]\\b[/"
+"code], [code]\\f[/code], [code]\\n[/code], [code]\\r[/code], [code]\\t[/"
+"code], [code]\\v[/code].\n"
+"[b]Note:[/b] Unlike the GDScript parser, this method doesn't support the "
+"[code]\\uXXXX[/code] escape sequence."
+msgstr ""
+
+#: doc/classes/String.xml:210
+msgid ""
+"Changes the case of some letters. Replaces underscores with spaces, adds "
+"spaces before in-word uppercase characters, converts all letters to "
+"lowercase, then capitalizes the first letter and every letter following a "
+"space character. For [code]capitalize camelCase mixed_with_underscores[/"
+"code], it will return [code]Capitalize Camel Case Mixed With Underscores[/"
+"code]."
+msgstr ""
+
+#: doc/classes/String.xml:217
+msgid ""
+"Performs a case-sensitive comparison to another string. Returns [code]-1[/"
+"code] if less than, [code]1[/code] if greater than, or [code]0[/code] if "
+"equal. \"less than\" or \"greater than\" are determined by the [url=https://"
+"en.wikipedia.org/wiki/List_of_Unicode_characters]Unicode code points[/url] "
+"of each string, which roughly matches the alphabetical order.\n"
+"[b]Behavior with different string lengths:[/b] Returns [code]1[/code] if the "
+"\"base\" string is longer than the [code]to[/code] string or [code]-1[/code] "
+"if the \"base\" string is shorter than the [code]to[/code] string. Keep in "
+"mind this length is determined by the number of Unicode codepoints, [i]not[/"
+"i] the actual visible characters.\n"
+"[b]Behavior with empty strings:[/b] Returns [code]-1[/code] if the \"base\" "
+"string is empty, [code]1[/code] if the [code]to[/code] string is empty or "
+"[code]0[/code] if both strings are empty.\n"
+"To get a boolean result from a string comparison, use the [code]==[/code] "
+"operator instead. See also [method nocasecmp_to]."
+msgstr ""
+
+#: doc/classes/String.xml:229
+msgid ""
+"Returns the number of occurrences of substring [code]what[/code] between "
+"[code]from[/code] and [code]to[/code] positions. If [code]from[/code] and "
+"[code]to[/code] equals 0 the whole string will be used. If only [code]to[/"
+"code] equals 0 the remained substring will be used."
+msgstr ""
+
+#: doc/classes/String.xml:238
+msgid ""
+"Returns the number of occurrences of substring [code]what[/code] (ignoring "
+"case) between [code]from[/code] and [code]to[/code] positions. If "
+"[code]from[/code] and [code]to[/code] equals 0 the whole string will be "
+"used. If only [code]to[/code] equals 0 the remained substring will be used."
+msgstr ""
+
+#: doc/classes/String.xml:244
+msgid ""
+"Returns a copy of the string with indentation (leading tabs and spaces) "
+"removed."
+msgstr ""
+
+#: doc/classes/String.xml:250
+msgid ""
+"Returns [code]true[/code] if the length of the string equals [code]0[/code]."
+msgstr ""
+
+#: doc/classes/String.xml:257
+msgid "Returns [code]true[/code] if the string ends with the given string."
+msgstr ""
+
+#: doc/classes/String.xml:264
+msgid ""
+"Erases [code]chars[/code] characters from the string starting from "
+"[code]position[/code]."
+msgstr ""
+
+#: doc/classes/String.xml:272
+msgid ""
+"Finds the first occurrence of a substring. Returns the starting position of "
+"the substring or [code]-1[/code] if not found. Optionally, the initial "
+"search index can be passed.\n"
+"[b]Note:[/b] If you just want to know whether a string contains a substring, "
+"use the [code]in[/code] operator as follows:\n"
+"[codeblock]\n"
+"# Will evaluate to `false`.\n"
+"if \"i\" in \"team\":\n"
+" pass\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/String.xml:285
+msgid ""
+"Finds the last occurrence of a substring. Returns the starting position of "
+"the substring or [code]-1[/code] if not found."
+msgstr ""
+
+#: doc/classes/String.xml:293
+msgid ""
+"Finds the first occurrence of a substring, ignoring case. Returns the "
+"starting position of the substring or [code]-1[/code] if not found. "
+"Optionally, the initial search index can be passed."
+msgstr ""
+
+#: doc/classes/String.xml:301
+msgid ""
+"Formats the string by replacing all occurrences of [code]placeholder[/code] "
+"with [code]values[/code]."
+msgstr ""
+
+#: doc/classes/String.xml:307
+msgid "If the string is a valid file path, returns the base directory name."
+msgstr ""
+
+#: doc/classes/String.xml:313
+msgid ""
+"If the string is a valid file path, returns the full file path without the "
+"extension."
+msgstr ""
+
+#: doc/classes/String.xml:319
+msgid ""
+"Returns the extension without the leading period character ([code].[/code]) "
+"if the string is a valid file name or path. If the string does not contain "
+"an extension, returns an empty string instead.\n"
+"[codeblock]\n"
+"print(\"/path/to/file.txt\".get_extension()) # \"txt\"\n"
+"print(\"file.txt\".get_extension()) # \"txt\"\n"
+"print(\"file.sample.txt\".get_extension()) # \"txt\"\n"
+"print(\".txt\".get_extension()) # \"txt\"\n"
+"print(\"file.txt.\".get_extension()) # \"\" (empty string)\n"
+"print(\"file.txt..\".get_extension()) # \"\" (empty string)\n"
+"print(\"txt\".get_extension()) # \"\" (empty string)\n"
+"print(\"\".get_extension()) # \"\" (empty string)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/String.xml:335
+msgid "If the string is a valid file path, returns the filename."
+msgstr ""
+
+#: doc/classes/String.xml:341
+msgid "Hashes the string and returns a 32-bit integer."
+msgstr ""
+
+#: doc/classes/String.xml:347
+msgid ""
+"Converts a string containing a hexadecimal number into an integer. "
+"Hexadecimal strings are expected to be prefixed with \"[code]0x[/code]\" "
+"otherwise [code]0[/code] is returned.\n"
+"[codeblock]\n"
+"print(\"0xff\".hex_to_int()) # Print \"255\"\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/String.xml:356
+msgid ""
+"Escapes (encodes) a string to URL friendly format. Also referred to as 'URL "
+"encode'.\n"
+"[codeblock]\n"
+"print(\"https://example.org/?escaped=\" + \"Godot Engine:'docs'\"."
+"http_escape())\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/String.xml:365
+msgid ""
+"Unescapes (decodes) a string in URL encoded format. Also referred to as 'URL "
+"decode'.\n"
+"[codeblock]\n"
+"print(\"https://example.org/?escaped=\" + \"Godot%20Engine%3A%27docs%27\"."
+"http_unescape())\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/String.xml:375
+msgid ""
+"Converts [code]size[/code] represented as number of bytes to human-readable "
+"format using internationalized set of data size units, namely: B, KiB, MiB, "
+"GiB, TiB, PiB, EiB. Note that the next smallest unit is picked automatically "
+"to hold at most 1024 units.\n"
+"[codeblock]\n"
+"var bytes = 133790307\n"
+"var size = String.humanize_size(bytes)\n"
+"print(size) # prints \"127.5 MiB\"\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/String.xml:388
+msgid ""
+"Returns a copy of the string with the substring [code]what[/code] inserted "
+"at the given position."
+msgstr ""
+
+#: doc/classes/String.xml:394
+msgid ""
+"If the string is a path to a file or directory, returns [code]true[/code] if "
+"the path is absolute."
+msgstr ""
+
+#: doc/classes/String.xml:400
+msgid ""
+"If the string is a path to a file or directory, returns [code]true[/code] if "
+"the path is relative."
+msgstr ""
+
+#: doc/classes/String.xml:407
+msgid ""
+"Returns [code]true[/code] if this string is a subsequence of the given "
+"string."
+msgstr ""
+
+#: doc/classes/String.xml:414
+msgid ""
+"Returns [code]true[/code] if this string is a subsequence of the given "
+"string, without considering case."
+msgstr ""
+
+#: doc/classes/String.xml:420
+msgid ""
+"Returns [code]true[/code] if this string is free from characters that aren't "
+"allowed in file names, those being:\n"
+"[code]: / \\ ? * \" | % < >[/code]"
+msgstr ""
+
+#: doc/classes/String.xml:427
+msgid "Returns [code]true[/code] if this string contains a valid float."
+msgstr ""
+
+#: doc/classes/String.xml:434
+msgid ""
+"Returns [code]true[/code] if this string contains a valid hexadecimal "
+"number. If [code]with_prefix[/code] is [code]true[/code], then a validity of "
+"the hexadecimal number is determined by [code]0x[/code] prefix, for "
+"instance: [code]0xDEADC0DE[/code]."
+msgstr ""
+
+#: doc/classes/String.xml:440
+msgid ""
+"Returns [code]true[/code] if this string contains a valid color in "
+"hexadecimal HTML notation. Other HTML notations such as named colors or "
+"[code]hsl()[/code] colors aren't considered valid by this method and will "
+"return [code]false[/code]."
+msgstr ""
+
+#: doc/classes/String.xml:446
+msgid ""
+"Returns [code]true[/code] if this string is a valid identifier. A valid "
+"identifier may contain only letters, digits and underscores ([code]_[/code]) "
+"and the first character may not be a digit."
+msgstr ""
+
+#: doc/classes/String.xml:452
+msgid "Returns [code]true[/code] if this string contains a valid integer."
+msgstr ""
+
+#: doc/classes/String.xml:458
+msgid ""
+"Returns [code]true[/code] if this string contains only a well-formatted IPv4 "
+"or IPv6 address. This method considers [url=https://en.wikipedia.org/wiki/"
+"Reserved_IP_addresses]reserved IP addresses[/url] such as [code]0.0.0.0[/"
+"code] as valid."
+msgstr ""
+
+#: doc/classes/String.xml:464
+msgid ""
+"Returns a copy of the string with special characters escaped using the JSON "
+"standard."
+msgstr ""
+
+#: doc/classes/String.xml:471
+msgid "Returns a number of characters from the left of the string."
+msgstr ""
+
+#: doc/classes/String.xml:477
+msgid "Returns the string's amount of characters."
+msgstr ""
+
+#: doc/classes/String.xml:484
+msgid ""
+"Returns a copy of the string with characters removed from the left. The "
+"[code]chars[/code] argument is a string specifying the set of characters to "
+"be removed.\n"
+"[b]Note:[/b] The [code]chars[/code] is not a prefix. See [method "
+"trim_prefix] method that will remove a single prefix string rather than a "
+"set of characters."
+msgstr ""
+
+#: doc/classes/String.xml:492
+msgid ""
+"Does a simple case-sensitive expression match, where [code]\"*\"[/code] "
+"matches zero or more arbitrary characters and [code]\"?\"[/code] matches any "
+"single character except a period ([code]\".\"[/code])."
+msgstr ""
+
+#: doc/classes/String.xml:499
+msgid ""
+"Does a simple case-insensitive expression match, where [code]\"*\"[/code] "
+"matches zero or more arbitrary characters and [code]\"?\"[/code] matches any "
+"single character except a period ([code]\".\"[/code])."
+msgstr ""
+
+#: doc/classes/String.xml:505
+msgid "Returns the MD5 hash of the string as an array of bytes."
+msgstr ""
+
+#: doc/classes/String.xml:511
+msgid "Returns the MD5 hash of the string as a string."
+msgstr ""
+
+#: doc/classes/String.xml:518
+msgid ""
+"Performs a case-insensitive [i]natural order[/i] comparison to another "
+"string. Returns [code]-1[/code] if less than, [code]1[/code] if greater "
+"than, or [code]0[/code] if equal. \"less than\" or \"greater than\" are "
+"determined by the [url=https://en.wikipedia.org/wiki/"
+"List_of_Unicode_characters]Unicode code points[/url] of each string, which "
+"roughly matches the alphabetical order. Internally, lowercase characters "
+"will be converted to uppercase during the comparison.\n"
+"When used for sorting, natural order comparison will order suites of numbers "
+"as expected by most people. If you sort the numbers from 1 to 10 using "
+"natural order, you will get [code][1, 2, 3, ...][/code] instead of [code][1, "
+"10, 2, 3, ...][/code].\n"
+"[b]Behavior with different string lengths:[/b] Returns [code]1[/code] if the "
+"\"base\" string is longer than the [code]to[/code] string or [code]-1[/code] "
+"if the \"base\" string is shorter than the [code]to[/code] string. Keep in "
+"mind this length is determined by the number of Unicode codepoints, [i]not[/"
+"i] the actual visible characters.\n"
+"[b]Behavior with empty strings:[/b] Returns [code]-1[/code] if the \"base\" "
+"string is empty, [code]1[/code] if the [code]to[/code] string is empty or "
+"[code]0[/code] if both strings are empty.\n"
+"To get a boolean result from a string comparison, use the [code]==[/code] "
+"operator instead. See also [method nocasecmp_to] and [method casecmp_to]."
+msgstr ""
+
+#: doc/classes/String.xml:529
+msgid ""
+"Performs a case-insensitive comparison to another string. Returns [code]-1[/"
+"code] if less than, [code]1[/code] if greater than, or [code]0[/code] if "
+"equal. \"less than\" or \"greater than\" are determined by the [url=https://"
+"en.wikipedia.org/wiki/List_of_Unicode_characters]Unicode code points[/url] "
+"of each string, which roughly matches the alphabetical order. Internally, "
+"lowercase characters will be converted to uppercase during the comparison.\n"
+"[b]Behavior with different string lengths:[/b] Returns [code]1[/code] if the "
+"\"base\" string is longer than the [code]to[/code] string or [code]-1[/code] "
+"if the \"base\" string is shorter than the [code]to[/code] string. Keep in "
+"mind this length is determined by the number of Unicode codepoints, [i]not[/"
+"i] the actual visible characters.\n"
+"[b]Behavior with empty strings:[/b] Returns [code]-1[/code] if the \"base\" "
+"string is empty, [code]1[/code] if the [code]to[/code] string is empty or "
+"[code]0[/code] if both strings are empty.\n"
+"To get a boolean result from a string comparison, use the [code]==[/code] "
+"operator instead. See also [method casecmp_to]."
+msgstr ""
+
+#: doc/classes/String.xml:539
+msgid "Returns the character code at position [code]at[/code]."
+msgstr ""
+
+#: doc/classes/String.xml:546
+msgid ""
+"Formats a number to have an exact number of [code]digits[/code] after the "
+"decimal point."
+msgstr ""
+
+#: doc/classes/String.xml:553
+msgid ""
+"Formats a number to have an exact number of [code]digits[/code] before the "
+"decimal point."
+msgstr ""
+
+#: doc/classes/String.xml:559
+msgid "Decode a percent-encoded string. See [method percent_encode]."
+msgstr ""
+
+#: doc/classes/String.xml:565
+msgid ""
+"Percent-encodes a string. Encodes parameters in a URL when sending a HTTP "
+"GET request (and bodies of form-urlencoded POST requests)."
+msgstr ""
+
+#: doc/classes/String.xml:572
+msgid ""
+"If the string is a path, this concatenates [code]file[/code] at the end of "
+"the string as a subpath. E.g. [code]\"this/is\".plus_file(\"path\") == "
+"\"this/is/path\"[/code]."
+msgstr ""
+
+#: doc/classes/String.xml:579
+msgid ""
+"Returns original string repeated a number of times. The number of "
+"repetitions is given by the argument."
+msgstr ""
+
+#: doc/classes/String.xml:587
+msgid ""
+"Replaces occurrences of a case-sensitive substring with the given one inside "
+"the string."
+msgstr ""
+
+#: doc/classes/String.xml:595
+msgid ""
+"Replaces occurrences of a case-insensitive substring with the given one "
+"inside the string."
+msgstr ""
+
+#: doc/classes/String.xml:603
+msgid ""
+"Performs a case-sensitive search for a substring, but starts from the end of "
+"the string instead of the beginning."
+msgstr ""
+
+#: doc/classes/String.xml:611
+msgid ""
+"Performs a case-insensitive search for a substring, but starts from the end "
+"of the string instead of the beginning."
+msgstr ""
+
+#: doc/classes/String.xml:618
+msgid "Returns the right side of the string from a given position."
+msgstr ""
+
+#: doc/classes/String.xml:627
+msgid ""
+"Splits the string by a [code]delimiter[/code] string and returns an array of "
+"the substrings, starting from right.\n"
+"The splits in the returned array are sorted in the same order as the "
+"original string, from left to right.\n"
+"If [code]maxsplit[/code] is specified, it defines the number of splits to do "
+"from the right up to [code]maxsplit[/code]. The default value of 0 means "
+"that all items are split, thus giving the same result as [method split].\n"
+"Example:\n"
+"[codeblock]\n"
+"var some_string = \"One,Two,Three,Four\"\n"
+"var some_array = some_string.rsplit(\",\", true, 1)\n"
+"print(some_array.size()) # Prints 2\n"
+"print(some_array[0]) # Prints \"Four\"\n"
+"print(some_array[1]) # Prints \"Three,Two,One\"\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/String.xml:644
+msgid ""
+"Returns a copy of the string with characters removed from the right. The "
+"[code]chars[/code] argument is a string specifying the set of characters to "
+"be removed.\n"
+"[b]Note:[/b] The [code]chars[/code] is not a suffix. See [method "
+"trim_suffix] method that will remove a single suffix string rather than a "
+"set of characters."
+msgstr ""
+
+#: doc/classes/String.xml:651
+msgid "Returns the SHA-1 hash of the string as an array of bytes."
+msgstr ""
+
+#: doc/classes/String.xml:657
+msgid "Returns the SHA-1 hash of the string as a string."
+msgstr ""
+
+#: doc/classes/String.xml:663
+msgid "Returns the SHA-256 hash of the string as an array of bytes."
+msgstr ""
+
+#: doc/classes/String.xml:669
+msgid "Returns the SHA-256 hash of the string as a string."
+msgstr ""
+
+#: doc/classes/String.xml:676
+msgid ""
+"Returns the similarity index of the text compared to this string. 1 means "
+"totally similar and 0 means totally dissimilar."
+msgstr ""
+
+#: doc/classes/String.xml:682
+msgid "Returns a simplified canonical path."
+msgstr ""
+
+#: doc/classes/String.xml:691
+msgid ""
+"Splits the string by a [code]delimiter[/code] string and returns an array of "
+"the substrings. The [code]delimiter[/code] can be of any length.\n"
+"If [code]maxsplit[/code] is specified, it defines the number of splits to do "
+"from the left up to [code]maxsplit[/code]. The default value of [code]0[/"
+"code] means that all items are split.\n"
+"Example:\n"
+"[codeblock]\n"
+"var some_string = \"One,Two,Three,Four\"\n"
+"var some_array = some_string.split(\",\", true, 1)\n"
+"print(some_array.size()) # Prints 2\n"
+"print(some_array[0]) # Prints \"One\"\n"
+"print(some_array[1]) # Prints \"Two,Three,Four\"\n"
+"[/codeblock]\n"
+"If you need to split strings with more complex rules, use the [RegEx] class "
+"instead."
+msgstr ""
+
+#: doc/classes/String.xml:709
+msgid ""
+"Splits the string in floats by using a delimiter string and returns an array "
+"of the substrings.\n"
+"For example, [code]\"1,2.5,3\"[/code] will return [code][1,2.5,3][/code] if "
+"split by [code]\",\"[/code]."
+msgstr ""
+
+#: doc/classes/String.xml:718
+msgid ""
+"Returns a copy of the string stripped of any non-printable character "
+"(including tabulations, spaces and line breaks) at the beginning and the "
+"end. The optional arguments are used to toggle stripping on the left and "
+"right edges respectively."
+msgstr ""
+
+#: doc/classes/String.xml:724
+msgid ""
+"Returns a copy of the string stripped of any escape character. These include "
+"all non-printable control characters of the first page of the ASCII table (< "
+"32), such as tabulation ([code]\\t[/code] in C) and newline ([code]\\n[/"
+"code] and [code]\\r[/code]) characters, but not spaces."
+msgstr ""
+
+#: doc/classes/String.xml:732
+msgid ""
+"Returns part of the string from the position [code]from[/code] with length "
+"[code]len[/code]. Argument [code]len[/code] is optional and using [code]-1[/"
+"code] will return remaining characters from given position."
+msgstr ""
+
+#: doc/classes/String.xml:738
+msgid ""
+"Converts the String (which is a character array) to [PoolByteArray] (which "
+"is an array of bytes). The conversion is faster compared to [method "
+"to_utf8], as this method assumes that all the characters in the String are "
+"ASCII characters."
+msgstr ""
+
+#: doc/classes/String.xml:744
+msgid ""
+"Converts a string containing a decimal number into a [code]float[/code]."
+msgstr ""
+
+#: doc/classes/String.xml:750
+msgid ""
+"Converts a string containing an integer number into an [code]int[/code]."
+msgstr ""
+
+#: doc/classes/String.xml:756
+msgid "Returns the string converted to lowercase."
+msgstr ""
+
+#: doc/classes/String.xml:762
+msgid "Returns the string converted to uppercase."
+msgstr ""
+
+#: doc/classes/String.xml:768
+msgid ""
+"Converts the String (which is an array of characters) to [PoolByteArray] "
+"(which is an array of bytes). The conversion is a bit slower than [method "
+"to_ascii], but supports all UTF-8 characters. Therefore, you should prefer "
+"this function over [method to_ascii]."
+msgstr ""
+
+#: doc/classes/String.xml:774
+msgid ""
+"Converts the String (which is an array of characters) to [PoolByteArray] "
+"(which is an array of bytes)."
+msgstr ""
+
+#: doc/classes/String.xml:781
+msgid ""
+"Removes a given string from the start if it starts with it or leaves the "
+"string unchanged."
+msgstr ""
+
+#: doc/classes/String.xml:788
+msgid ""
+"Removes a given string from the end if it ends with it or leaves the string "
+"unchanged."
+msgstr ""
+
+#: doc/classes/String.xml:794
+msgid ""
+"Removes any characters from the string that are prohibited in [Node] names "
+"([code].[/code] [code]:[/code] [code]@[/code] [code]/[/code] [code]\"[/"
+"code])."
+msgstr ""
+
+#: doc/classes/String.xml:800
+msgid ""
+"Returns a copy of the string with special characters escaped using the XML "
+"standard."
+msgstr ""
+
+#: doc/classes/String.xml:806
+msgid ""
+"Returns a copy of the string with escaped characters replaced by their "
+"meanings according to the XML standard."
+msgstr ""
+
+#: doc/classes/StyleBox.xml:4
+msgid "Base class for drawing stylized boxes for the UI."
+msgstr ""
+
+#: doc/classes/StyleBox.xml:7
+msgid ""
+"StyleBox is [Resource] that provides an abstract base class for drawing "
+"stylized boxes for the UI. StyleBoxes are used for drawing the styles of "
+"buttons, line edit backgrounds, tree backgrounds, etc. and also for testing "
+"a transparency mask for pointer signals. If mask test fails on a StyleBox "
+"assigned as mask to a control, clicks and motion signals will go through it "
+"to the one below.\n"
+"[b]Note:[/b] For children of [Control] that have [i]Theme Properties[/i], "
+"the [code]focus[/code] [StyleBox] is displayed over the [code]normal[/code], "
+"[code]hover[/code] or [code]pressed[/code] [StyleBox]. This makes the "
+"[code]focus[/code] [StyleBox] more reusable across different nodes."
+msgstr ""
+
+#: doc/classes/StyleBox.xml:18
+msgid ""
+"Draws this stylebox using a [CanvasItem] with given [RID].\n"
+"You can get a [RID] value using [method Object.get_instance_id] on a "
+"[CanvasItem]-derived node."
+msgstr ""
+
+#: doc/classes/StyleBox.xml:25
+msgid "Returns the size of this [StyleBox] without the margins."
+msgstr ""
+
+#: doc/classes/StyleBox.xml:31
+msgid ""
+"Returns the [CanvasItem] that handles its [constant CanvasItem."
+"NOTIFICATION_DRAW] or [method CanvasItem._draw] callback at this moment."
+msgstr ""
+
+#: doc/classes/StyleBox.xml:38
+msgid "Returns the default value of the specified [enum Margin]."
+msgstr ""
+
+#: doc/classes/StyleBox.xml:45
+msgid ""
+"Returns the content margin offset for the specified [enum Margin].\n"
+"Positive values reduce size inwards, unlike [Control]'s margin values."
+msgstr ""
+
+#: doc/classes/StyleBox.xml:52
+msgid "Returns the minimum size that this stylebox can be shrunk to."
+msgstr ""
+
+#: doc/classes/StyleBox.xml:58
+msgid ""
+"Returns the \"offset\" of a stylebox. This helper function returns a value "
+"equivalent to [code]Vector2(style.get_margin(MARGIN_LEFT), style."
+"get_margin(MARGIN_TOP))[/code]."
+msgstr ""
+
+#: doc/classes/StyleBox.xml:66
+msgid ""
+"Sets the default value of the specified [enum Margin] to given [code]offset[/"
+"code] in pixels."
+msgstr ""
+
+#: doc/classes/StyleBox.xml:74
+msgid "Test a position in a rectangle, return whether it passes the mask test."
+msgstr ""
+
+#: doc/classes/StyleBox.xml:80
+msgid ""
+"The bottom margin for the contents of this style box. Increasing this value "
+"reduces the space available to the contents from the bottom.\n"
+"If this value is negative, it is ignored and a child-specific margin is used "
+"instead. For example for [StyleBoxFlat] the border thickness (if any) is "
+"used instead.\n"
+"It is up to the code using this style box to decide what these contents are: "
+"for example, a [Button] respects this content margin for the textual "
+"contents of the button.\n"
+"[method get_margin] should be used to fetch this value as consumer instead "
+"of reading these properties directly. This is because it correctly respects "
+"negative values and the fallback mentioned above."
+msgstr ""
+
+#: doc/classes/StyleBox.xml:86
+msgid ""
+"The left margin for the contents of this style box.Increasing this value "
+"reduces the space available to the contents from the left.\n"
+"Refer to [member content_margin_bottom] for extra considerations."
+msgstr ""
+
+#: doc/classes/StyleBox.xml:90
+msgid ""
+"The right margin for the contents of this style box. Increasing this value "
+"reduces the space available to the contents from the right.\n"
+"Refer to [member content_margin_bottom] for extra considerations."
+msgstr ""
+
+#: doc/classes/StyleBox.xml:94
+msgid ""
+"The top margin for the contents of this style box. Increasing this value "
+"reduces the space available to the contents from the top.\n"
+"Refer to [member content_margin_bottom] for extra considerations."
+msgstr ""
+
+#: doc/classes/StyleBoxEmpty.xml:4
+msgid "Empty stylebox (does not display anything)."
+msgstr ""
+
+#: doc/classes/StyleBoxEmpty.xml:7
+msgid "Empty stylebox (really does not display anything)."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:4
+msgid ""
+"Customizable [StyleBox] with a given set of parameters (no texture required)."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:7
+msgid ""
+"This [StyleBox] can be used to achieve all kinds of looks without the need "
+"of a texture. The following properties are customizable:\n"
+"- Color\n"
+"- Border width (individual width for each border)\n"
+"- Rounded corners (individual radius for each corner)\n"
+"- Shadow (with blur and offset)\n"
+"Setting corner radius to high values is allowed. As soon as corners overlap, "
+"the stylebox will switch to a relative system. Example:\n"
+"[codeblock]\n"
+"height = 30\n"
+"corner_radius_top_left = 50\n"
+"corner_radius_bottom_left = 100\n"
+"[/codeblock]\n"
+"The relative system now would take the 1:2 ratio of the two left corners to "
+"calculate the actual corner width. Both corners added will [b]never[/b] be "
+"more than the height. Result:\n"
+"[codeblock]\n"
+"corner_radius_top_left: 10\n"
+"corner_radius_bottom_left: 20\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:31
+msgid ""
+"Returns the given [code]margin[/code]'s border width. See [enum Margin] for "
+"possible values."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:37
+msgid "Returns the smallest border width out of all four borders."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:44
+msgid ""
+"Returns the given [code]corner[/code]'s radius. See [enum Corner] for "
+"possible values."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:51 doc/classes/StyleBoxTexture.xml:16
+msgid ""
+"Returns the size of the given [code]margin[/code]'s expand margin. See [enum "
+"Margin] for possible values."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:59
+msgid ""
+"Sets the border width to [code]width[/code] pixels for the given "
+"[code]margin[/code]. See [enum Margin] for possible values."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:66
+msgid "Sets the border width to [code]width[/code] pixels for all margins."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:74
+msgid ""
+"Sets the corner radius to [code]radius[/code] pixels for the given "
+"[code]corner[/code]. See [enum Corner] for possible values."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:81
+msgid "Sets the corner radius to [code]radius[/code] pixels for all corners."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:91
+msgid ""
+"Sets the corner radius for each corner to [code]radius_top_left[/code], "
+"[code]radius_top_right[/code], [code]radius_bottom_right[/code], and "
+"[code]radius_bottom_left[/code] pixels."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:99 doc/classes/StyleBoxTexture.xml:48
+msgid ""
+"Sets the expand margin to [code]size[/code] pixels for the given "
+"[code]margin[/code]. See [enum Margin] for possible values."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:106 doc/classes/StyleBoxTexture.xml:30
+msgid "Sets the expand margin to [code]size[/code] pixels for all margins."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:116 doc/classes/StyleBoxTexture.xml:40
+msgid ""
+"Sets the expand margin for each margin to [code]size_left[/code], "
+"[code]size_top[/code], [code]size_right[/code], and [code]size_bottom[/code] "
+"pixels."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:122
+msgid ""
+"Antialiasing draws a small ring around the edges, which fades to "
+"transparency. As a result, edges look much smoother. This is only noticeable "
+"when using rounded corners.\n"
+"[b]Note:[/b] When using beveled corners with 45-degree angles ([member "
+"corner_detail] = 1), it is recommended to set [member anti_aliasing] to "
+"[code]false[/code] to ensure crisp visuals and avoid possible visual "
+"glitches."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:126
+msgid ""
+"This changes the size of the faded ring. Higher values can be used to "
+"achieve a \"blurry\" effect."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:129
+msgid "The background color of the stylebox."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:132
+msgid "If [code]true[/code], the border will fade into the background color."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:135
+msgid "Sets the color of the border."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:138
+msgid "Border width for the bottom border."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:141
+msgid "Border width for the left border."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:144
+msgid "Border width for the right border."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:147
+msgid "Border width for the top border."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:150
+msgid ""
+"This sets the number of vertices used for each corner. Higher values result "
+"in rounder corners but take more processing power to compute. When choosing "
+"a value, you should take the corner radius ([method set_corner_radius_all]) "
+"into account.\n"
+"For corner radii less than 10, [code]4[/code] or [code]5[/code] should be "
+"enough. For corner radii less than 30, values between [code]8[/code] and "
+"[code]12[/code] should be enough.\n"
+"A corner detail of [code]1[/code] will result in chamfered corners instead "
+"of rounded corners, which is useful for some artistic effects."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:155
+msgid ""
+"The bottom-left corner's radius. If [code]0[/code], the corner is not "
+"rounded."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:158
+msgid ""
+"The bottom-right corner's radius. If [code]0[/code], the corner is not "
+"rounded."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:161
+msgid ""
+"The top-left corner's radius. If [code]0[/code], the corner is not rounded."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:164
+msgid ""
+"The top-right corner's radius. If [code]0[/code], the corner is not rounded."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:167
+msgid "Toggles drawing of the inner part of the stylebox."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:170
+msgid ""
+"Expands the stylebox outside of the control rect on the bottom edge. Useful "
+"in combination with [member border_width_bottom] to draw a border outside "
+"the control rect."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:173
+msgid ""
+"Expands the stylebox outside of the control rect on the left edge. Useful in "
+"combination with [member border_width_left] to draw a border outside the "
+"control rect."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:176
+msgid ""
+"Expands the stylebox outside of the control rect on the right edge. Useful "
+"in combination with [member border_width_right] to draw a border outside the "
+"control rect."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:179
+msgid ""
+"Expands the stylebox outside of the control rect on the top edge. Useful in "
+"combination with [member border_width_top] to draw a border outside the "
+"control rect."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:182
+msgid ""
+"The color of the shadow. This has no effect if [member shadow_size] is lower "
+"than 1."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:185
+msgid ""
+"The shadow offset in pixels. Adjusts the position of the shadow relatively "
+"to the stylebox."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:188
+msgid "The shadow size in pixels."
+msgstr ""
+
+#: doc/classes/StyleBoxLine.xml:4
+msgid "[StyleBox] that displays a single line."
+msgstr ""
+
+#: doc/classes/StyleBoxLine.xml:7
+msgid ""
+"[StyleBox] that displays a single line of a given color and thickness. It "
+"can be used to draw things like separators."
+msgstr ""
+
+#: doc/classes/StyleBoxLine.xml:15
+msgid "The line's color."
+msgstr ""
+
+#: doc/classes/StyleBoxLine.xml:18
+msgid ""
+"The number of pixels the line will extend before the [StyleBoxLine]'s "
+"bounds. If set to a negative value, the line will begin inside the "
+"[StyleBoxLine]'s bounds."
+msgstr ""
+
+#: doc/classes/StyleBoxLine.xml:21
+msgid ""
+"The number of pixels the line will extend past the [StyleBoxLine]'s bounds. "
+"If set to a negative value, the line will end inside the [StyleBoxLine]'s "
+"bounds."
+msgstr ""
+
+#: doc/classes/StyleBoxLine.xml:24
+msgid "The line's thickness in pixels."
+msgstr ""
+
+#: doc/classes/StyleBoxLine.xml:27
+msgid ""
+"If [code]true[/code], the line will be vertical. If [code]false[/code], the "
+"line will be horizontal."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:4
+msgid "Texture-based nine-patch [StyleBox]."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:7
+msgid ""
+"Texture-based nine-patch [StyleBox], in a way similar to [NinePatchRect]. "
+"This stylebox performs a 3×3 scaling of a texture, where only the center "
+"cell is fully stretched. This makes it possible to design bordered styles "
+"regardless of the stylebox's size."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:23
+msgid ""
+"Returns the size of the given [code]margin[/code]. See [enum Margin] for "
+"possible values."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:56
+msgid ""
+"Sets the margin to [code]size[/code] pixels for the given [code]margin[/"
+"code]. See [enum Margin] for possible values."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:62
+msgid ""
+"Controls how the stylebox's texture will be stretched or tiled horizontally. "
+"See [enum AxisStretchMode] for possible values."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:65
+msgid ""
+"Controls how the stylebox's texture will be stretched or tiled vertically. "
+"See [enum AxisStretchMode] for possible values."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:68
+msgid ""
+"If [code]true[/code], the nine-patch texture's center tile will be drawn."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:71
+msgid ""
+"Expands the bottom margin of this style box when drawing, causing it to be "
+"drawn larger than requested."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:74
+msgid ""
+"Expands the left margin of this style box when drawing, causing it to be "
+"drawn larger than requested."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:77
+msgid ""
+"Expands the right margin of this style box when drawing, causing it to be "
+"drawn larger than requested."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:80
+msgid ""
+"Expands the top margin of this style box when drawing, causing it to be "
+"drawn larger than requested."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:83
+msgid ""
+"Increases the bottom margin of the 3×3 texture box.\n"
+"A higher value means more of the source texture is considered to be part of "
+"the bottom border of the 3×3 box.\n"
+"This is also the value used as fallback for [member StyleBox."
+"content_margin_bottom] if it is negative."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:88
+msgid ""
+"Increases the left margin of the 3×3 texture box.\n"
+"A higher value means more of the source texture is considered to be part of "
+"the left border of the 3×3 box.\n"
+"This is also the value used as fallback for [member StyleBox."
+"content_margin_left] if it is negative."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:93
+msgid ""
+"Increases the right margin of the 3×3 texture box.\n"
+"A higher value means more of the source texture is considered to be part of "
+"the right border of the 3×3 box.\n"
+"This is also the value used as fallback for [member StyleBox."
+"content_margin_right] if it is negative."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:98
+msgid ""
+"Increases the top margin of the 3×3 texture box.\n"
+"A higher value means more of the source texture is considered to be part of "
+"the top border of the 3×3 box.\n"
+"This is also the value used as fallback for [member StyleBox."
+"content_margin_top] if it is negative."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:103
+msgid "Modulates the color of the texture when this style box is drawn."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:106
+msgid ""
+"The normal map to use when drawing this style box.\n"
+"[b]Note:[/b] Godot expects the normal map to use X+, Y-, and Z+ coordinates. "
+"See [url=http://wiki.polycount.com/wiki/"
+"Normal_Map_Technical_Details#Common_Swizzle_Coordinates]this page[/url] for "
+"a comparison of normal map coordinates expected by popular engines."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:110
+msgid ""
+"Species a sub-region of the texture to use.\n"
+"This is equivalent to first wrapping the texture in an [AtlasTexture] with "
+"the same region."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:114
+msgid "The texture to use when drawing this style box."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:120
+msgid "Emitted when the stylebox's texture is changed."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:126
+msgid ""
+"Stretch the stylebox's texture. This results in visible distortion unless "
+"the texture size matches the stylebox's size perfectly."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:129
+msgid ""
+"Repeats the stylebox's texture to match the stylebox's size according to the "
+"nine-patch system."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:132
+msgid ""
+"Repeats the stylebox's texture to match the stylebox's size according to the "
+"nine-patch system. Unlike [constant AXIS_STRETCH_MODE_TILE], the texture may "
+"be slightly stretched to make the nine-patch texture tile seamlessly."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:4
+msgid "Helper tool to create geometry."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:7
+msgid ""
+"The [SurfaceTool] is used to construct a [Mesh] by specifying vertex "
+"attributes individually. It can be used to construct a [Mesh] from a script. "
+"All properties except indices need to be added before calling [method "
+"add_vertex]. For example, to add vertex colors and UVs:\n"
+"[codeblock]\n"
+"var st = SurfaceTool.new()\n"
+"st.begin(Mesh.PRIMITIVE_TRIANGLES)\n"
+"st.add_color(Color(1, 0, 0))\n"
+"st.add_uv(Vector2(0, 0))\n"
+"st.add_vertex(Vector3(0, 0, 0))\n"
+"[/codeblock]\n"
+"The above [SurfaceTool] now contains one vertex of a triangle which has a UV "
+"coordinate and a specified [Color]. If another vertex were added without "
+"calling [method add_uv] or [method add_color], then the last values would be "
+"used.\n"
+"Vertex attributes must be passed [b]before[/b] calling [method add_vertex]. "
+"Failure to do so will result in an error when committing the vertex "
+"information to a mesh.\n"
+"Additionally, the attributes used before the first vertex is added determine "
+"the format of the mesh. For example, if you only add UVs to the first "
+"vertex, you cannot add color to any of the subsequent vertices.\n"
+"See also [ArrayMesh], [ImmediateGeometry] and [MeshDataTool] for procedural "
+"geometry generation.\n"
+"[b]Note:[/b] Godot uses clockwise [url=https://learnopengl.com/Advanced-"
+"OpenGL/Face-culling]winding order[/url] for front faces of triangle "
+"primitive modes."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:29
+msgid ""
+"Specifies an array of bones to use for the [i]next[/i] vertex. [code]bones[/"
+"code] must contain 4 integers."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:36
+msgid ""
+"Specifies a [Color] to use for the [i]next[/i] vertex. If every vertex needs "
+"to have this information set and you fail to submit it for the first vertex, "
+"this information may not be used at all.\n"
+"[b]Note:[/b] The material must have [member SpatialMaterial."
+"vertex_color_use_as_albedo] enabled for the vertex color to be visible."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:44
+msgid ""
+"Adds an index to index array if you are using indexed vertices. Does not "
+"need to be called before adding vertices."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:51
+msgid ""
+"Specifies a normal to use for the [i]next[/i] vertex. If every vertex needs "
+"to have this information set and you fail to submit it for the first vertex, "
+"this information may not be used at all."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:58
+msgid ""
+"Specifies whether the current vertex (if using only vertex arrays) or "
+"current index (if also using index arrays) should use smooth normals for "
+"normal calculation."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:65
+msgid ""
+"Specifies a tangent to use for the [i]next[/i] vertex. If every vertex needs "
+"to have this information set and you fail to submit it for the first vertex, "
+"this information may not be used at all."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:77
+msgid ""
+"Inserts a triangle fan made of array data into [Mesh] being constructed.\n"
+"Requires the primitive type be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:85
+msgid ""
+"Specifies a set of UV coordinates to use for the [i]next[/i] vertex. If "
+"every vertex needs to have this information set and you fail to submit it "
+"for the first vertex, this information may not be used at all."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:92
+msgid ""
+"Specifies an optional second set of UV coordinates to use for the [i]next[/"
+"i] vertex. If every vertex needs to have this information set and you fail "
+"to submit it for the first vertex, this information may not be used at all."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:99
+msgid ""
+"Specifies the position of current vertex. Should be called after specifying "
+"other vertex properties (e.g. Color, UV)."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:106
+msgid ""
+"Specifies weight values to use for the [i]next[/i] vertex. [code]weights[/"
+"code] must contain 4 values. If every vertex needs to have this information "
+"set and you fail to submit it for the first vertex, this information may not "
+"be used at all."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:115
+msgid ""
+"Append vertices from a given [Mesh] surface onto the current vertex array "
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:123
+msgid ""
+"Called before adding any vertices. Takes the primitive type as an argument "
+"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:129
+msgid "Clear all information passed into the surface tool so far."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:137
+msgid ""
+"Returns a constructed [ArrayMesh] from current information passed in. If an "
+"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
+"to the existing [ArrayMesh].\n"
+"Default flag is [constant Mesh.ARRAY_COMPRESS_DEFAULT] if compression is "
+"enabled. If compression is disabled the default flag is [constant Mesh."
+"ARRAY_FLAG_USE_OCTAHEDRAL_COMPRESSION]. See [code]ARRAY_COMPRESS_*[/code] "
+"constants in [enum Mesh.ArrayFormat] for other flags."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:144
+msgid ""
+"Commits the data to the same format used by [method ArrayMesh."
+"add_surface_from_arrays]. This way you can further process the mesh data "
+"using the [ArrayMesh] API."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:152
+msgid "Creates a vertex array from an existing [Mesh]."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:161
+msgid ""
+"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
+"This can be used to extract a specific pose from a blend shape."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:167
+msgid "Removes the index array by expanding the vertex array."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:174
+msgid ""
+"Generates normals from vertices so you do not have to do it manually. If "
+"[code]flip[/code] is [code]true[/code], the resulting normals will be "
+"inverted. [method generate_normals] should be called [i]after[/i] generating "
+"geometry and [i]before[/i] committing the mesh using [method commit] or "
+"[method commit_to_arrays]. For correct display of normal-mapped surfaces, "
+"you will also have to generate tangents using [method generate_tangents].\n"
+"[b]Note:[/b] [method generate_normals] only works if the primitive type to "
+"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:181
+msgid ""
+"Generates a tangent vector for each vertex. Requires that each vertex have "
+"UVs and normals set already (see [method generate_normals])."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:187
+msgid ""
+"Shrinks the vertex array by creating an index array. This can improve "
+"performance by avoiding vertex reuse."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:194
+msgid "Sets [Material] to be used by the [Mesh] you are constructing."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:4
+msgid "Tabbed container."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:7
+msgid ""
+"Sets the active tab's [code]visible[/code] property to the value [code]true[/"
+"code]. Sets all other children's to [code]false[/code].\n"
+"Ignores non-[Control] children."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:16
+msgid "Returns the child [Control] node located at the active tab index."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:22
+msgid ""
+"Returns the [Popup] node instance if one has been set already with [method "
+"set_popup].\n"
+"[b]Warning:[/b] This is a required internal node, removing and freeing it "
+"may cause a crash. If you wish to hide it or any of its children, use their "
+"[member CanvasItem.visible] property."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:29 doc/classes/Tabs.xml:36
+msgid "Returns the previously active tab index."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:36
+msgid "Returns the [Control] node from the tab at index [code]tab_idx[/code]."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:42 doc/classes/Tabs.xml:48
+msgid "Returns the number of tabs."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:49 doc/classes/Tabs.xml:55
+msgid ""
+"Returns [code]true[/code] if the tab at index [code]tab_idx[/code] is "
+"disabled."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:56
+msgid ""
+"Returns [code]true[/code] if the tab at index [code]tab_idx[/code] is hidden."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:63 doc/classes/Tabs.xml:62
+msgid ""
+"Returns the [Texture] for the tab at index [code]tab_idx[/code] or "
+"[code]null[/code] if the tab has no [Texture]."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:70
+msgid ""
+"Returns the index of the tab at local coordinates [code]point[/code]. "
+"Returns [code]-1[/code] if the point is outside the control boundaries or if "
+"there's no tab at the queried position."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:77
+msgid ""
+"Returns the title of the tab at index [code]tab_idx[/code]. Tab titles "
+"default to the name of the indexed child node, but this can be overridden "
+"with [method set_tab_title]."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:83
+msgid "Returns the [TabContainer] rearrange group id."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:90
+msgid ""
+"If set on a [Popup] node instance, a popup menu icon appears in the top-"
+"right corner of the [TabContainer]. Clicking it will expand the [Popup] node."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:98 doc/classes/Tabs.xml:118
+msgid ""
+"If [code]disabled[/code] is [code]true[/code], disables the tab at index "
+"[code]tab_idx[/code], making it non-interactable."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:106
+msgid ""
+"If [code]hidden[/code] is [code]true[/code], hides the tab at index "
+"[code]tab_idx[/code], making it disappear from the tab area."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:114
+msgid "Sets an icon for the tab at index [code]tab_idx[/code]."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:122
+msgid ""
+"Sets a title for the tab at index [code]tab_idx[/code]. Tab titles default "
+"to the name of the indexed child node."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:129
+msgid ""
+"Defines rearrange group id, choose for each [TabContainer] the same value to "
+"enable tab drag between [TabContainer]. Enable drag with [member "
+"drag_to_rearrange_enabled]."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:135
+msgid ""
+"If [code]true[/code], all tabs are drawn in front of the panel. If "
+"[code]false[/code], inactive tabs are drawn behind the panel."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:138
+msgid ""
+"The current tab index. When set, this index's [Control] node's "
+"[code]visible[/code] property is set to [code]true[/code] and all others are "
+"set to [code]false[/code]."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:141 doc/classes/Tabs.xml:150
+msgid "If [code]true[/code], tabs can be rearranged with mouse drag."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:144
+msgid ""
+"The alignment of all tabs in the tab container. See the [enum TabAlign] "
+"constants for details."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:147
+msgid ""
+"If [code]true[/code], tabs are visible. If [code]false[/code], tabs' content "
+"and titles are hidden."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:150
+msgid ""
+"If [code]true[/code], children [Control] nodes that are hidden have their "
+"minimum size take into account in the total, instead of only the currently "
+"visible one."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:156
+msgid ""
+"Emitted when the [TabContainer]'s [Popup] button is clicked. See [method "
+"set_popup] for details."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:162 doc/classes/Tabs.xml:178
+msgid "Emitted when switching to another tab."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:168
+msgid "Emitted when a tab is selected, even if it is the current tab."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:174 doc/classes/Tabs.xml:202
+msgid "Align the tabs to the left."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:177 doc/classes/Tabs.xml:205
+msgid "Align the tabs to the center."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:180 doc/classes/Tabs.xml:208
+msgid "Align the tabs to the right."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:185 doc/classes/Tabs.xml:237
+msgid ""
+"Icon for the left arrow button that appears when there are too many tabs to "
+"fit in the container width. When the button is disabled (i.e. the first tab "
+"is visible), it appears semi-transparent."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:188 doc/classes/Tabs.xml:240
+msgid ""
+"Icon for the left arrow button that appears when there are too many tabs to "
+"fit in the container width. Used when the button is being hovered with the "
+"cursor."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:191 doc/classes/Tabs.xml:243
+msgid "The font used to draw tab names."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:194 doc/classes/Tabs.xml:246
+msgid "Font color of inactive tabs."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:197 doc/classes/Tabs.xml:249
+msgid "Font color of disabled tabs."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:200 doc/classes/Tabs.xml:252
+msgid "Font color of the currently selected tab."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:203
+msgid "Horizontal separation between tabs."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:206 doc/classes/Tabs.xml:258
+msgid ""
+"Icon for the right arrow button that appears when there are too many tabs to "
+"fit in the container width. When the button is disabled (i.e. the last tab "
+"is visible) it appears semi-transparent."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:209 doc/classes/Tabs.xml:261
+msgid ""
+"Icon for the right arrow button that appears when there are too many tabs to "
+"fit in the container width. Used when the button is being hovered with the "
+"cursor."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:216
+msgid "The icon for the menu button (see [method set_popup])."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:219
+msgid ""
+"The icon for the menu button (see [method set_popup]) when it's being "
+"hovered with the cursor."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:222
+msgid "The style for the background fill."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:225
+msgid "The space at the left and right edges of the tab bar."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:228
+msgid "The style of inactive tabs."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:231
+msgid "The style of disabled tabs."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:234 doc/classes/Tabs.xml:274
+msgid "The style of the currently selected tab."
+msgstr ""
+
+#: doc/classes/Tabs.xml:4
+msgid "Tabs control."
+msgstr ""
+
+#: doc/classes/Tabs.xml:7
+msgid ""
+"Simple tabs control, similar to [TabContainer] but is only in charge of "
+"drawing tabs, not interacting with children."
+msgstr ""
+
+#: doc/classes/Tabs.xml:17
+msgid "Adds a new tab."
+msgstr ""
+
+#: doc/classes/Tabs.xml:24
+msgid "Moves the scroll view to make the tab visible."
+msgstr ""
+
+#: doc/classes/Tabs.xml:30
+msgid ""
+"Returns [code]true[/code] if the offset buttons (the ones that appear when "
+"there's not enough space for all tabs) are visible."
+msgstr ""
+
+#: doc/classes/Tabs.xml:42
+msgid "Returns [code]true[/code] if select with right mouse button is enabled."
+msgstr ""
+
+#: doc/classes/Tabs.xml:68
+msgid "Returns the number of hidden tabs offsetted to the left."
+msgstr ""
+
+#: doc/classes/Tabs.xml:75
+msgid "Returns tab [Rect2] with local position and size."
+msgstr ""
+
+#: doc/classes/Tabs.xml:82
+msgid "Returns the title of the tab at index [code]tab_idx[/code]."
+msgstr ""
+
+#: doc/classes/Tabs.xml:88
+msgid "Returns the [Tabs]' rearrange group ID."
+msgstr ""
+
+#: doc/classes/Tabs.xml:96
+msgid "Moves a tab from [code]from[/code] to [code]to[/code]."
+msgstr ""
+
+#: doc/classes/Tabs.xml:103
+msgid "Removes the tab at index [code]tab_idx[/code]."
+msgstr ""
+
+#: doc/classes/Tabs.xml:110
+msgid ""
+"If [code]true[/code], enables selecting a tab with the right mouse button."
+msgstr ""
+
+#: doc/classes/Tabs.xml:126
+msgid "Sets an [code]icon[/code] for the tab at index [code]tab_idx[/code]."
+msgstr ""
+
+#: doc/classes/Tabs.xml:134
+msgid "Sets a [code]title[/code] for the tab at index [code]tab_idx[/code]."
+msgstr ""
+
+#: doc/classes/Tabs.xml:141
+msgid ""
+"Defines the rearrange group ID. Choose for each [Tabs] the same value to "
+"dragging tabs between [Tabs]. Enable drag with [member "
+"drag_to_rearrange_enabled]."
+msgstr ""
+
+#: doc/classes/Tabs.xml:147
+msgid "Select tab at index [code]tab_idx[/code]."
+msgstr ""
+
+#: doc/classes/Tabs.xml:153
+msgid ""
+"if [code]true[/code], the mouse's scroll wheel can be used to navigate the "
+"scroll view."
+msgstr ""
+
+#: doc/classes/Tabs.xml:156
+msgid "The alignment of all tabs. See [enum TabAlign] for details."
+msgstr ""
+
+#: doc/classes/Tabs.xml:159
+msgid ""
+"Sets when the close button will appear on the tabs. See [enum "
+"CloseButtonDisplayPolicy] for details."
+msgstr ""
+
+#: doc/classes/Tabs.xml:166
+msgid ""
+"Emitted when the active tab is rearranged via mouse drag. See [member "
+"drag_to_rearrange_enabled]."
+msgstr ""
+
+#: doc/classes/Tabs.xml:172
+msgid "Emitted when a tab is right-clicked."
+msgstr ""
+
+#: doc/classes/Tabs.xml:184
+msgid "Emitted when a tab is clicked, even if it is the current tab."
+msgstr ""
+
+#: doc/classes/Tabs.xml:190
+msgid "Emitted when a tab is closed."
+msgstr ""
+
+#: doc/classes/Tabs.xml:196
+msgid "Emitted when a tab is hovered by the mouse."
+msgstr ""
+
+#: doc/classes/Tabs.xml:211
+msgid "Represents the size of the [enum TabAlign] enum."
+msgstr ""
+
+#: doc/classes/Tabs.xml:214
+msgid "Never show the close buttons."
+msgstr ""
+
+#: doc/classes/Tabs.xml:217
+msgid "Only show the close button on the currently active tab."
+msgstr ""
+
+#: doc/classes/Tabs.xml:220
+msgid "Show the close button on all tabs."
+msgstr ""
+
+#: doc/classes/Tabs.xml:223
+msgid "Represents the size of the [enum CloseButtonDisplayPolicy] enum."
+msgstr ""
+
+#: doc/classes/Tabs.xml:228
+msgid "Background of the close button when it's being hovered with the cursor."
+msgstr ""
+
+#: doc/classes/Tabs.xml:231
+msgid "Background of the close button when it's being pressed."
+msgstr ""
+
+#: doc/classes/Tabs.xml:234
+msgid "The icon for the close button (see [member tab_close_display_policy])."
+msgstr ""
+
+#: doc/classes/Tabs.xml:255
+msgid "The horizontal separation between the tabs."
+msgstr ""
+
+#: doc/classes/Tabs.xml:268
+msgid "The style of an inactive tab."
+msgstr ""
+
+#: doc/classes/Tabs.xml:271
+msgid "The style of a disabled tab"
+msgstr ""
+
+#: doc/classes/TCP_Server.xml:4
+msgid "A TCP server."
+msgstr ""
+
+#: doc/classes/TCP_Server.xml:7
+msgid ""
+"A TCP server. Listens to connections on a port and returns a [StreamPeerTCP] "
+"when it gets an incoming connection."
+msgstr ""
+
+#: doc/classes/TCP_Server.xml:15
+msgid "Returns [code]true[/code] if a connection is available for taking."
+msgstr ""
+
+#: doc/classes/TCP_Server.xml:21
+msgid ""
+"Returns [code]true[/code] if the server is currently listening for "
+"connections."
+msgstr ""
+
+#: doc/classes/TCP_Server.xml:29
+msgid ""
+"Listen on the [code]port[/code] binding to [code]bind_address[/code].\n"
+"If [code]bind_address[/code] is set as [code]\"*\"[/code] (default), the "
+"server will listen on all available addresses (both IPv4 and IPv6).\n"
+"If [code]bind_address[/code] is set as [code]\"0.0.0.0\"[/code] (for IPv4) "
+"or [code]\"::\"[/code] (for IPv6), the server will listen on all available "
+"addresses matching that IP type.\n"
+"If [code]bind_address[/code] is set to any valid address (e.g. "
+"[code]\"192.168.1.101\"[/code], [code]\"::1\"[/code], etc), the server will "
+"only listen on the interface with that addresses (or fail if no interface "
+"with the given address exists)."
+msgstr ""
+
+#: doc/classes/TCP_Server.xml:38
+msgid "Stops listening."
+msgstr ""
+
+#: doc/classes/TCP_Server.xml:44
+msgid ""
+"If a connection is available, returns a StreamPeerTCP with the connection."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:4
+msgid "Multiline text editing control."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:7
+msgid ""
+"TextEdit is meant for editing large, multiline text. It also has facilities "
+"for editing code, such as syntax highlighting support and multiple levels of "
+"undo/redo.\n"
+"[b]Note:[/b] When holding down [code]Alt[/code], the vertical scroll wheel "
+"will scroll 5 times as fast as it would normally do. This also works in the "
+"Godot script editor."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:20
+msgid "Adds color region (given the delimiters) and its colors."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:28
+msgid "Adds a [code]keyword[/code] and its [Color]."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:35
+msgid ""
+"Returns if the given line is foldable, that is, it has indented lines right "
+"below it."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:41
+msgid ""
+"Centers the viewport on the line the editing cursor is at. This also resets "
+"the [member scroll_horizontal] value to [code]0[/code]."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:47
+msgid ""
+"Clears all custom syntax coloring information previously added with [method "
+"add_color_region] or [method add_keyword_color]."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:53
+msgid "Clears the undo history."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:59
+msgid "Copy's the current text selection."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:65
+msgid "Returns the column the editing cursor is at."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:71
+msgid "Returns the line the editing cursor is at."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:79
+msgid ""
+"Moves the cursor at the specified [code]column[/code] index.\n"
+"If [code]adjust_viewport[/code] is set to [code]true[/code], the viewport "
+"will center at the cursor position after the move occurs."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:90
+msgid ""
+"Moves the cursor at the specified [code]line[/code] index.\n"
+"If [code]adjust_viewport[/code] is set to [code]true[/code], the viewport "
+"will center at the cursor position after the move occurs.\n"
+"If [code]can_be_hidden[/code] is set to [code]true[/code], the specified "
+"[code]line[/code] can be hidden using [method set_line_as_hidden]."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:98
+msgid "Cut's the current selection."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:104
+msgid "Deselects the current selection."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:110
+msgid "Folds all lines that are possible to be folded (see [method can_fold])."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:117
+msgid "Folds the given line, if possible (see [method can_fold])."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:123
+msgid "Returns an array containing the line number of each breakpoint."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:130
+msgid "Returns the [Color] of the specified [code]keyword[/code]."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:137
+msgid "Returns the text of a specific line."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:143
+msgid "Returns the amount of total lines in the text."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:149
+msgid ""
+"Returns the [PopupMenu] of this [TextEdit]. By default, this menu is "
+"displayed when right-clicking on the [TextEdit].\n"
+"[b]Warning:[/b] This is a required internal node, removing and freeing it "
+"may cause a crash. If you wish to hide it or any of its children, use their "
+"[member CanvasItem.visible] property."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:156
+msgid "Returns the selection begin column."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:162
+msgid "Returns the selection begin line."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:168
+msgid "Returns the text inside the selection."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:174
+msgid "Returns the selection end column."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:180
+msgid "Returns the selection end line."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:186
+msgid ""
+"Returns a [String] text with the word under the caret (text cursor) location."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:193
+msgid ""
+"Returns whether the specified [code]keyword[/code] has a color set to it or "
+"not."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:199 doc/classes/UndoRedo.xml:121
+msgid "Returns [code]true[/code] if a \"redo\" action is available."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:205 doc/classes/UndoRedo.xml:127
+msgid "Returns [code]true[/code] if an \"undo\" action is available."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:212
+msgid "Insert the specified text at the cursor position."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:219
+msgid "Returns whether the line at the specified index is folded or not."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:226
+msgid "Returns whether the line at the specified index is hidden or not."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:233
+msgid ""
+"Returns [code]true[/code] when the specified [code]line[/code] is bookmarked."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:240
+msgid ""
+"Returns [code]true[/code] when the specified [code]line[/code] has a "
+"breakpoint."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:247
+msgid ""
+"Returns [code]true[/code] when the specified [code]line[/code] is marked as "
+"safe."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:253
+msgid "Returns [code]true[/code] if the selection is active."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:260
+msgid ""
+"Triggers a right-click menu action by the specified index. See [enum "
+"MenuItems] for a list of available indexes."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:266
+msgid "Paste the current selection."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:272
+msgid "Perform redo operation."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:278
+msgid ""
+"Removes all the breakpoints. This will not fire the [signal "
+"breakpoint_toggled] signal."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:288
+msgid ""
+"Perform a search inside the text. Search flags can be specified in the [enum "
+"SearchFlags] enum.\n"
+"Returns an empty [code]PoolIntArray[/code] if no result was found. "
+"Otherwise, the result line and column can be accessed at indices specified "
+"in the [enum SearchResult] enum, e.g:\n"
+"[codeblock]\n"
+"var result = search(key, flags, line, column)\n"
+"if result.size() > 0:\n"
+" # Result found.\n"
+" var res_line = result[TextEdit.SEARCH_RESULT_LINE]\n"
+" var res_column = result[TextEdit.SEARCH_RESULT_COLUMN]\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/TextEdit.xml:306
+msgid ""
+"Perform selection, from line/column to line/column.\n"
+"If [member selecting_enabled] is [code]false[/code], no selection will occur."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:313
+msgid ""
+"Select all the text.\n"
+"If [member selecting_enabled] is [code]false[/code], no selection will occur."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:322
+msgid "Sets the text for a specific line."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:330
+msgid ""
+"Bookmarks the [code]line[/code] if [code]bookmark[/code] is true. Deletes "
+"the bookmark if [code]bookmark[/code] is false.\n"
+"Bookmarks are shown in the [member breakpoint_gutter]."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:339
+msgid ""
+"Adds or removes the breakpoint in [code]line[/code]. Breakpoints are shown "
+"in the [member breakpoint_gutter]."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:347
+msgid "If [code]true[/code], hides the line of the specified index."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:355
+msgid ""
+"If [code]true[/code], marks the [code]line[/code] as safe.\n"
+"This will show the line number with the color provided in the "
+"[code]safe_line_number_color[/code] theme property."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:363
+msgid "Toggle the folding of the code block at the given line."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:369
+msgid "Perform undo operation."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:376
+msgid "Unfolds the given line, if folded."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:382
+msgid ""
+"Unhide all lines that were previously set to hidden by [method "
+"set_line_as_hidden]."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:388
+msgid "If [code]true[/code], the breakpoint gutter is visible."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:397
+msgid ""
+"If [code]true[/code], the caret displays as a rectangle.\n"
+"If [code]false[/code], the caret displays as a bar."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:401
+msgid ""
+"If [code]true[/code], a right-click moves the cursor at the mouse position "
+"before displaying the context menu.\n"
+"If [code]false[/code], the context menu disregards mouse location."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:405
+msgid "If [code]true[/code], a right-click displays the context menu."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:408
+msgid ""
+"If [code]true[/code], the \"space\" character will have a visible "
+"representation."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:411
+msgid ""
+"If [code]true[/code], the \"tab\" character will have a visible "
+"representation."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:415
+msgid ""
+"If [code]true[/code], the fold gutter is visible. This enables folding "
+"groups of indented lines."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:418
+msgid ""
+"If [code]true[/code], all lines that have been set to hidden by [method "
+"set_line_as_hidden], will not be visible."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:421
+msgid ""
+"If [code]true[/code], all occurrences of the selected text will be "
+"highlighted."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:424
+msgid "If [code]true[/code], the line containing the cursor is highlighted."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:427
+msgid ""
+"If [code]true[/code], a minimap is shown, providing an outline of your "
+"source code."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:430
+msgid "The width, in pixels, of the minimap."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:434
+msgid ""
+"If [code]true[/code], custom [code]font_color_selected[/code] will be used "
+"for selected text."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:437
+msgid ""
+"If [code]true[/code], read-only mode is enabled. Existing text cannot be "
+"modified and new text cannot be added."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:440
+msgid ""
+"If there is a horizontal scrollbar, this determines the current horizontal "
+"scroll value in pixels."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:443
+msgid ""
+"If there is a vertical scrollbar, this determines the current vertical "
+"scroll value in line numbers, starting at 0 for the top line."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:446
+msgid ""
+"If [code]true[/code], text can be selected.\n"
+"If [code]false[/code], text can not be selected by the user or by the "
+"[method select] or [method select_all] methods."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:450
+msgid ""
+"If [code]true[/code], shortcut keys for context menu items are enabled, even "
+"if the context menu is disabled."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:453
+msgid ""
+"If [code]true[/code], line numbers are displayed to the left of the text."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:456
+msgid ""
+"If [code]true[/code], sets the [code]step[/code] of the scrollbars to "
+"[code]0.25[/code] which results in smoother scrolling."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:459
+msgid ""
+"If [code]true[/code], any custom color properties that have been set for "
+"this [TextEdit] will be visible."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:462
+msgid "String value of the [TextEdit]."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:465
+msgid "Vertical scroll sensitivity."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:471
+msgid ""
+"If [code]true[/code], enables text wrapping when it goes beyond the edge of "
+"what is visible."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:478
+msgid "Emitted when a breakpoint is placed via the breakpoint gutter."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:483
+msgid "Emitted when the cursor changes."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:490
+msgid "Emitted when the info icon is clicked."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:512
+msgid "Match case when searching."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:515
+msgid "Match whole words when searching."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:518
+msgid "Search from end to beginning."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:521
+msgid "Used to access the result column from [method search]."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:524
+msgid "Used to access the result line from [method search]."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:533
+msgid ""
+"Pastes the clipboard text over the selected text (or at the cursor's "
+"position)."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:536
+msgid "Erases the whole [TextEdit] text."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:539
+msgid "Selects the whole [TextEdit] text."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:545
+msgid "Redoes the previous action."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:553
+msgid ""
+"Sets the background [Color] of this [TextEdit]. [member syntax_highlighting] "
+"has to be enabled."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:556
+msgid ""
+"Sets the [Color] of the bookmark marker. [member syntax_highlighting] has to "
+"be enabled."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:561 doc/classes/TextEdit.xml:588
+msgid ""
+"Sets the [Color] of the breakpoints. [member breakpoint_gutter] has to be "
+"enabled."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:599
+msgid "Sets the default [Font]."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:602
+msgid "Sets the font [Color]."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:607
+msgid ""
+"Sets the [Color] of the selected text. [member override_selected_font_color] "
+"has to be enabled."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:612
+msgid ""
+"Sets the [Color] of the line numbers. [member show_line_numbers] has to be "
+"enabled."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:615
+msgid "Sets the spacing between the lines."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:618
+msgid "Sets the [Color] of marked text."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:623
+msgid "Sets the [StyleBox] of this [TextEdit]."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:628
+msgid ""
+"Sets the [StyleBox] of this [TextEdit] when [member readonly] is enabled."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:633
+msgid "Sets the highlight [Color] of text selections."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:640
+msgid "Sets a custom [Texture] for tab text characters."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:643
+msgid ""
+"Sets the highlight [Color] of multiple occurrences. [member "
+"highlight_all_occurrences] has to be enabled."
+msgstr ""
+
+#: doc/classes/Texture.xml:4
+msgid "Texture for 2D and 3D."
+msgstr ""
+
+#: doc/classes/Texture.xml:7
+msgid ""
+"A texture works by registering an image in the video hardware, which then "
+"can be used in 3D models or 2D [Sprite] or GUI [Control].\n"
+"Textures are often created by loading them from a file. See [method "
+"@GDScript.load].\n"
+"[Texture] is a base for other resources. It cannot be used directly.\n"
+"[b]Note:[/b] The maximum texture size is 16384×16384 pixels due to graphics "
+"hardware limitations. Larger textures may fail to import."
+msgstr ""
+
+#: doc/classes/Texture.xml:23
+msgid ""
+"Draws the texture using a [CanvasItem] with the [VisualServer] API at the "
+"specified [code]position[/code]. Equivalent to [method VisualServer."
+"canvas_item_add_texture_rect] with a rect at [code]position[/code] and the "
+"size of this [Texture]."
+msgstr ""
+
+#: doc/classes/Texture.xml:35
+msgid ""
+"Draws the texture using a [CanvasItem] with the [VisualServer] API. "
+"Equivalent to [method VisualServer.canvas_item_add_texture_rect]."
+msgstr ""
+
+#: doc/classes/Texture.xml:48
+msgid ""
+"Draws a part of the texture using a [CanvasItem] with the [VisualServer] "
+"API. Equivalent to [method VisualServer.canvas_item_add_texture_rect_region]."
+msgstr ""
+
+#: doc/classes/Texture.xml:54
+msgid ""
+"Returns an [Image] that is a copy of data from this [Texture]. [Image]s can "
+"be accessed and manipulated directly."
+msgstr ""
+
+#: doc/classes/Texture.xml:60
+msgid "Returns the texture height."
+msgstr ""
+
+#: doc/classes/Texture.xml:66
+msgid "Returns the texture size."
+msgstr ""
+
+#: doc/classes/Texture.xml:72
+msgid "Returns the texture width."
+msgstr ""
+
+#: doc/classes/Texture.xml:78
+msgid "Returns [code]true[/code] if this [Texture] has an alpha channel."
+msgstr ""
+
+#: doc/classes/Texture.xml:84
+msgid ""
+"The texture's [enum Flags]. [enum Flags] are used to set various properties "
+"of the [Texture]."
+msgstr ""
+
+#: doc/classes/Texture.xml:89
+msgid ""
+"Default flags. [constant FLAG_MIPMAPS], [constant FLAG_REPEAT] and [constant "
+"FLAG_FILTER] are enabled."
+msgstr ""
+
+#: doc/classes/Texture.xml:92 doc/classes/VisualServer.xml:3206
+msgid ""
+"Generates mipmaps, which are smaller versions of the same texture to use "
+"when zoomed out, keeping the aspect ratio."
+msgstr ""
+
+#: doc/classes/Texture.xml:95
+msgid ""
+"Repeats the texture (instead of clamp to edge).\n"
+"[b]Note:[/b] Ignored when using an [AtlasTexture] as these don't support "
+"repetition."
+msgstr ""
+
+#: doc/classes/Texture.xml:99 doc/classes/VisualServer.xml:3212
+msgid "Uses a magnifying filter, to enable smooth zooming in of the texture."
+msgstr ""
+
+#: doc/classes/Texture.xml:102 doc/classes/TextureLayered.xml:88
+#: doc/classes/VisualServer.xml:3215
+msgid ""
+"Uses anisotropic mipmap filtering. Generates smaller versions of the same "
+"texture with different aspect ratios.\n"
+"This results in better-looking textures when viewed from oblique angles."
+msgstr ""
+
+#: doc/classes/Texture.xml:106 doc/classes/VisualServer.xml:3219
+msgid "Converts the texture to the sRGB color space."
+msgstr ""
+
+#: doc/classes/Texture.xml:109
+msgid ""
+"Repeats the texture with alternate sections mirrored.\n"
+"[b]Note:[/b] Ignored when using an [AtlasTexture] as these don't support "
+"repetition."
+msgstr ""
+
+#: doc/classes/Texture.xml:113 doc/classes/VisualServer.xml:3225
+msgid "Texture is a video surface."
+msgstr ""
+
+#: doc/classes/Texture3D.xml:4
+msgid "Texture with 3 dimensions."
+msgstr ""
+
+#: doc/classes/Texture3D.xml:7
+msgid ""
+"Texture3D is a 3-dimensional texture that has a width, height, and depth."
+msgstr ""
+
+#: doc/classes/Texture3D.xml:20
+msgid ""
+"Creates the Texture3D with specified [code]width[/code], [code]height[/"
+"code], and [code]depth[/code]. See [enum Image.Format] for [code]format[/"
+"code] options. See [enum TextureLayered.Flags] enumerator for [code]flags[/"
+"code] options."
+msgstr ""
+
+#: doc/classes/TextureArray.xml:4
+msgid "Array of textures stored in a single primitive."
+msgstr ""
+
+#: doc/classes/TextureArray.xml:7
+msgid ""
+"[TextureArray]s store an array of [Image]s in a single [Texture] primitive. "
+"Each layer of the texture array has its own mipmap chain. This makes it is a "
+"good alternative to texture atlases.\n"
+"[TextureArray]s must be displayed using shaders. After importing your file "
+"as a [TextureArray] and setting the appropriate Horizontal and Vertical "
+"Slices, display it by setting it as a uniform to a shader, for example:\n"
+"[codeblock]\n"
+"shader_type canvas_item;\n"
+"\n"
+"uniform sampler2DArray tex;\n"
+"uniform int index;\n"
+"\n"
+"void fragment() {\n"
+" COLOR = texture(tex, vec3(UV.x, UV.y, float(index)));\n"
+"}\n"
+"[/codeblock]\n"
+"Set the integer uniform \"index\" to show a particular part of the texture "
+"as defined by the Horizontal and Vertical Slices in the importer."
+msgstr ""
+
+#: doc/classes/TextureArray.xml:32
+msgid ""
+"Creates the TextureArray with specified [code]width[/code], [code]height[/"
+"code], and [code]depth[/code]. See [enum Image.Format] for [code]format[/"
+"code] options. See [enum TextureLayered.Flags] enumerator for [code]flags[/"
+"code] options."
+msgstr ""
+
+#: doc/classes/TextureButton.xml:4
+msgid ""
+"Texture-based button. Supports Pressed, Hover, Disabled and Focused states."
+msgstr ""
+
+#: doc/classes/TextureButton.xml:7
+msgid ""
+"[TextureButton] has the same functionality as [Button], except it uses "
+"sprites instead of Godot's [Theme] resource. It is faster to create, but it "
+"doesn't support localization like more complex [Control]s.\n"
+"The \"normal\" state must contain a texture ([member texture_normal]); other "
+"textures are optional.\n"
+"See also [BaseButton] which contains common properties and methods "
+"associated with this node."
+msgstr ""
+
+#: doc/classes/TextureButton.xml:18
+msgid ""
+"If [code]true[/code], the texture stretches to the edges of the node's "
+"bounding rectangle using the [member stretch_mode]. If [code]false[/code], "
+"the texture will not scale with the node."
+msgstr ""
+
+#: doc/classes/TextureButton.xml:27
+msgid ""
+"Controls the texture's behavior when you resize the node's bounding "
+"rectangle, [b]only if[/b] [member expand] is [code]true[/code]. Set it to "
+"one of the [enum StretchMode] constants. See the constants to learn more."
+msgstr ""
+
+#: doc/classes/TextureButton.xml:30
+msgid ""
+"Pure black and white [BitMap] image to use for click detection. On the mask, "
+"white pixels represent the button's clickable area. Use it to create buttons "
+"with curved shapes."
+msgstr ""
+
+#: doc/classes/TextureButton.xml:33
+msgid ""
+"Texture to display when the node is disabled. See [member BaseButton."
+"disabled]."
+msgstr ""
+
+#: doc/classes/TextureButton.xml:36
+msgid "Texture to display when the node has mouse or keyboard focus."
+msgstr ""
+
+#: doc/classes/TextureButton.xml:39
+msgid "Texture to display when the mouse hovers the node."
+msgstr ""
+
+#: doc/classes/TextureButton.xml:42
+msgid ""
+"Texture to display by default, when the node is [b]not[/b] in the disabled, "
+"focused, hover or pressed state."
+msgstr ""
+
+#: doc/classes/TextureButton.xml:45
+msgid ""
+"Texture to display on mouse down over the node, if the node has keyboard "
+"focus and the player presses the Enter key or if the player presses the "
+"[member BaseButton.shortcut] key."
+msgstr ""
+
+#: doc/classes/TextureButton.xml:50 doc/classes/TextureRect.xml:38
+msgid "Scale to fit the node's bounding rectangle."
+msgstr ""
+
+#: doc/classes/TextureButton.xml:53 doc/classes/TextureRect.xml:41
+msgid "Tile inside the node's bounding rectangle."
+msgstr ""
+
+#: doc/classes/TextureButton.xml:56 doc/classes/TextureRect.xml:44
+msgid ""
+"The texture keeps its original size and stays in the bounding rectangle's "
+"top-left corner."
+msgstr ""
+
+#: doc/classes/TextureButton.xml:59 doc/classes/TextureRect.xml:47
+msgid ""
+"The texture keeps its original size and stays centered in the node's "
+"bounding rectangle."
+msgstr ""
+
+#: doc/classes/TextureButton.xml:62 doc/classes/TextureRect.xml:50
+msgid ""
+"Scale the texture to fit the node's bounding rectangle, but maintain the "
+"texture's aspect ratio."
+msgstr ""
+
+#: doc/classes/TextureButton.xml:65
+msgid ""
+"Scale the texture to fit the node's bounding rectangle, center it, and "
+"maintain its aspect ratio."
+msgstr ""
+
+#: doc/classes/TextureButton.xml:68 doc/classes/TextureRect.xml:56
+msgid ""
+"Scale the texture so that the shorter side fits the bounding rectangle. The "
+"other side clips to the node's limits."
+msgstr ""
+
+#: doc/classes/TextureLayered.xml:4
+msgid "Base class for 3D texture types."
+msgstr ""
+
+#: doc/classes/TextureLayered.xml:7
+msgid ""
+"Base class for [Texture3D] and [TextureArray]. Cannot be used directly, but "
+"contains all the functions necessary for accessing and using [Texture3D] and "
+"[TextureArray]. Data is set on a per-layer basis. For [Texture3D]s, the "
+"layer specifies the depth or Z-index, they can be treated as a bunch of 2D "
+"slices. Similarly, for [TextureArray]s, the layer specifies the array layer."
+msgstr ""
+
+#: doc/classes/TextureLayered.xml:15
+msgid ""
+"Returns the depth of the texture. Depth is the 3rd dimension (typically Z-"
+"axis)."
+msgstr ""
+
+#: doc/classes/TextureLayered.xml:21
+msgid ""
+"Returns the current format being used by this texture. See [enum Image."
+"Format] for details."
+msgstr ""
+
+#: doc/classes/TextureLayered.xml:27
+msgid ""
+"Returns the height of the texture. Height is typically represented by the Y-"
+"axis."
+msgstr ""
+
+#: doc/classes/TextureLayered.xml:34
+msgid ""
+"Returns an [Image] resource with the data from specified [code]layer[/code]."
+msgstr ""
+
+#: doc/classes/TextureLayered.xml:40
+msgid ""
+"Returns the width of the texture. Width is typically represented by the X-"
+"axis."
+msgstr ""
+
+#: doc/classes/TextureLayered.xml:51
+msgid ""
+"Partially sets the data for a specified [code]layer[/code] by overwriting "
+"using the data of the specified [code]image[/code]. [code]x_offset[/code] "
+"and [code]y_offset[/code] determine where the [Image] is \"stamped\" over "
+"the texture. The [code]image[/code] must fit within the texture."
+msgstr ""
+
+#: doc/classes/TextureLayered.xml:59
+msgid ""
+"Sets the data for the specified layer. Data takes the form of a 2-"
+"dimensional [Image] resource."
+msgstr ""
+
+#: doc/classes/TextureLayered.xml:65
+msgid "Returns a dictionary with all the data used by this texture."
+msgstr ""
+
+#: doc/classes/TextureLayered.xml:68
+msgid "Specifies which [enum Flags] apply to this texture."
+msgstr ""
+
+#: doc/classes/TextureLayered.xml:73
+msgid ""
+"Default flags for [TextureArray]. [constant FLAG_MIPMAPS], [constant "
+"FLAG_REPEAT] and [constant FLAG_FILTER] are enabled."
+msgstr ""
+
+#: doc/classes/TextureLayered.xml:76
+msgid "Default flags for [Texture3D]. [constant FLAG_FILTER] is enabled."
+msgstr ""
+
+#: doc/classes/TextureLayered.xml:79
+msgid "Texture will generate mipmaps on creation."
+msgstr ""
+
+#: doc/classes/TextureLayered.xml:82
+msgid "Texture will repeat when UV used is outside the 0-1 range."
+msgstr ""
+
+#: doc/classes/TextureLayered.xml:85
+msgid ""
+"Use filtering when reading from texture. Filtering smooths out pixels. "
+"Turning filtering off is slightly faster and more appropriate when you need "
+"access to individual pixels."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:4
+msgid ""
+"Texture-based progress bar. Useful for loading screens and life or stamina "
+"bars."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:7
+msgid ""
+"TextureProgress works like [ProgressBar], but uses up to 3 textures instead "
+"of Godot's [Theme] resource. It can be used to create horizontal, vertical "
+"and radial progress bars."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:28
+msgid "The fill direction. See [enum FillMode] for possible values."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:32
+msgid ""
+"If [code]true[/code], Godot treats the bar's textures like in "
+"[NinePatchRect]. Use the [code]stretch_margin_*[/code] properties like "
+"[member stretch_margin_bottom] to set up the nine patch's 3×3 grid. When "
+"using a radial [member fill_mode], this setting will enable stretching."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:35
+msgid ""
+"Offsets [member texture_progress] if [member fill_mode] is [constant "
+"FILL_CLOCKWISE] or [constant FILL_COUNTER_CLOCKWISE]."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:38
+msgid ""
+"Upper limit for the fill of [member texture_progress] if [member fill_mode] "
+"is [constant FILL_CLOCKWISE] or [constant FILL_COUNTER_CLOCKWISE]. When the "
+"node's [code]value[/code] is equal to its [code]max_value[/code], the "
+"texture fills up to this angle.\n"
+"See [member Range.value], [member Range.max_value]."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:42
+msgid ""
+"Starting angle for the fill of [member texture_progress] if [member "
+"fill_mode] is [constant FILL_CLOCKWISE] or [constant "
+"FILL_COUNTER_CLOCKWISE]. When the node's [code]value[/code] is equal to its "
+"[code]min_value[/code], the texture doesn't show up at all. When the "
+"[code]value[/code] increases, the texture fills and tends towards [member "
+"radial_fill_degrees]."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:45
+msgid ""
+"The height of the 9-patch's bottom row. A margin of 16 means the 9-slice's "
+"bottom corners and side will have a height of 16 pixels. You can set all 4 "
+"margin values individually to create panels with non-uniform borders."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:48
+msgid "The width of the 9-patch's left column."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:51
+msgid "The width of the 9-patch's right column."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:54
+msgid "The height of the 9-patch's top row."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:57
+msgid ""
+"[Texture] that draws over the progress bar. Use it to add highlights or an "
+"upper-frame that hides part of [member texture_progress]."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:60
+msgid ""
+"[Texture] that clips based on the node's [code]value[/code] and [member "
+"fill_mode]. As [code]value[/code] increased, the texture fills up. It shows "
+"entirely when [code]value[/code] reaches [code]max_value[/code]. It doesn't "
+"show at all if [code]value[/code] is equal to [code]min_value[/code].\n"
+"The [code]value[/code] property comes from [Range]. See [member Range."
+"value], [member Range.min_value], [member Range.max_value]."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:64
+msgid ""
+"The offset of [member texture_progress]. Useful for [member texture_over] "
+"and [member texture_under] with fancy borders, to avoid transparent margins "
+"in your progress texture."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:67
+msgid "[Texture] that draws under the progress bar. The bar's background."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:70
+msgid ""
+"Multiplies the color of the bar's [code]texture_over[/code] texture. The "
+"effect is similar to [member CanvasItem.modulate], except it only affects "
+"this specific texture instead of the entire node."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:73
+msgid ""
+"Multiplies the color of the bar's [code]texture_progress[/code] texture."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:76
+msgid "Multiplies the color of the bar's [code]texture_under[/code] texture."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:81
+msgid "The [member texture_progress] fills from left to right."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:84
+msgid "The [member texture_progress] fills from right to left."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:87
+msgid "The [member texture_progress] fills from top to bottom."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:90
+msgid "The [member texture_progress] fills from bottom to top."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:93
+msgid ""
+"Turns the node into a radial bar. The [member texture_progress] fills "
+"clockwise. See [member radial_center_offset], [member radial_initial_angle] "
+"and [member radial_fill_degrees] to control the way the bar fills up."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:96
+msgid ""
+"Turns the node into a radial bar. The [member texture_progress] fills "
+"counterclockwise. See [member radial_center_offset], [member "
+"radial_initial_angle] and [member radial_fill_degrees] to control the way "
+"the bar fills up."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:99
+msgid ""
+"The [member texture_progress] fills from the center, expanding both towards "
+"the left and the right."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:102
+msgid ""
+"The [member texture_progress] fills from the center, expanding both towards "
+"the top and the bottom."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:105
+msgid ""
+"Turns the node into a radial bar. The [member texture_progress] fills "
+"radially from the center, expanding both clockwise and counterclockwise. See "
+"[member radial_center_offset], [member radial_initial_angle] and [member "
+"radial_fill_degrees] to control the way the bar fills up."
+msgstr ""
+
+#: doc/classes/TextureRect.xml:4
+msgid "Control for drawing textures."
+msgstr ""
+
+#: doc/classes/TextureRect.xml:7
+msgid ""
+"Used to draw icons and sprites in a user interface. The texture's placement "
+"can be controlled with the [member stretch_mode] property. It can scale, "
+"tile, or stay centered inside its bounding rectangle.\n"
+"[b]Note:[/b] You should enable [member flip_v] when using a TextureRect to "
+"display a [ViewportTexture]. Alternatively, you can enable [member Viewport."
+"render_target_v_flip] on the Viewport. Otherwise, the image will appear "
+"upside down."
+msgstr ""
+
+#: doc/classes/TextureRect.xml:17
+msgid "If [code]true[/code], the texture scales to fit its bounding rectangle."
+msgstr ""
+
+#: doc/classes/TextureRect.xml:27
+msgid ""
+"Controls the texture's behavior when resizing the node's bounding rectangle. "
+"See [enum StretchMode]."
+msgstr ""
+
+#: doc/classes/TextureRect.xml:30
+msgid "The node's [Texture] resource."
+msgstr ""
+
+#: doc/classes/TextureRect.xml:35
+msgid ""
+"Scale to fit the node's bounding rectangle, only if [code]expand[/code] is "
+"[code]true[/code]. Default [code]stretch_mode[/code], for backwards "
+"compatibility. Until you set [code]expand[/code] to [code]true[/code], the "
+"texture will behave like [constant STRETCH_KEEP]."
+msgstr ""
+
+#: doc/classes/TextureRect.xml:53
+msgid ""
+"Scale the texture to fit the node's bounding rectangle, center it and "
+"maintain its aspect ratio."
+msgstr ""
+
+#: doc/classes/Theme.xml:4
+msgid "Theme for controls."
+msgstr ""
+
+#: doc/classes/Theme.xml:7
+msgid ""
+"A theme for skinning controls. Controls can be skinned individually, but for "
+"complex applications, it's more practical to just create a global theme that "
+"defines everything. This theme can be applied to any [Control]; the Control "
+"and its children will automatically use it.\n"
+"Theme resources can alternatively be loaded by writing them in a [code]."
+"theme[/code] file, see the documentation for more information."
+msgstr ""
+
+#: doc/classes/Theme.xml:11
+msgid "https://docs.godotengine.org/en/3.4/tutorials/gui/gui_skinning.html"
+msgstr ""
+
+#: doc/classes/Theme.xml:17
+msgid "Clears all values on the theme."
+msgstr ""
+
+#: doc/classes/Theme.xml:25
+msgid ""
+"Clears the [Color] at [code]name[/code] if the theme has [code]node_type[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Theme.xml:33
+msgid ""
+"Clears the constant at [code]name[/code] if the theme has [code]node_type[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Theme.xml:41
+msgid ""
+"Clears the [Font] at [code]name[/code] if the theme has [code]node_type[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Theme.xml:49
+msgid ""
+"Clears the icon at [code]name[/code] if the theme has [code]node_type[/code]."
+msgstr ""
+
+#: doc/classes/Theme.xml:57
+msgid ""
+"Clears [StyleBox] at [code]name[/code] if the theme has [code]node_type[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Theme.xml:66
+msgid ""
+"Clears the theme item of [code]data_type[/code] at [code]name[/code] if the "
+"theme has [code]node_type[/code]."
+msgstr ""
+
+#: doc/classes/Theme.xml:72
+msgid "Sets the theme's values to a copy of the default theme values."
+msgstr ""
+
+#: doc/classes/Theme.xml:79
+msgid "Sets the theme's values to a copy of a given theme."
+msgstr ""
+
+#: doc/classes/Theme.xml:87
+msgid ""
+"Returns the [Color] at [code]name[/code] if the theme has [code]node_type[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Theme.xml:94
+msgid ""
+"Returns all the [Color]s as a [PoolStringArray] filled with each [Color]'s "
+"name, for use in [method get_color], if the theme has [code]node_type[/code]."
+msgstr ""
+
+#: doc/classes/Theme.xml:100
+msgid ""
+"Returns all the [Color] types as a [PoolStringArray] filled with unique type "
+"names, for use in [method get_color] and/or [method get_color_list]."
+msgstr ""
+
+#: doc/classes/Theme.xml:108
+msgid ""
+"Returns the constant at [code]name[/code] if the theme has [code]node_type[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Theme.xml:115
+msgid ""
+"Returns all the constants as a [PoolStringArray] filled with each constant's "
+"name, for use in [method get_constant], if the theme has [code]node_type[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Theme.xml:121
+msgid ""
+"Returns all the constant types as a [PoolStringArray] filled with unique "
+"type names, for use in [method get_constant] and/or [method "
+"get_constant_list]."
+msgstr ""
+
+#: doc/classes/Theme.xml:129
+msgid ""
+"Returns the [Font] at [code]name[/code] if the theme has [code]node_type[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Theme.xml:136
+msgid ""
+"Returns all the [Font]s as a [PoolStringArray] filled with each [Font]'s "
+"name, for use in [method get_font], if the theme has [code]node_type[/code]."
+msgstr ""
+
+#: doc/classes/Theme.xml:142
+msgid ""
+"Returns all the [Font] types as a [PoolStringArray] filled with unique type "
+"names, for use in [method get_font] and/or [method get_font_list]."
+msgstr ""
+
+#: doc/classes/Theme.xml:150
+msgid ""
+"Returns the icon [Texture] at [code]name[/code] if the theme has "
+"[code]node_type[/code]."
+msgstr ""
+
+#: doc/classes/Theme.xml:157
+msgid ""
+"Returns all the icons as a [PoolStringArray] filled with each [Texture]'s "
+"name, for use in [method get_icon], if the theme has [code]node_type[/code]."
+msgstr ""
+
+#: doc/classes/Theme.xml:163
+msgid ""
+"Returns all the icon types as a [PoolStringArray] filled with unique type "
+"names, for use in [method get_icon] and/or [method get_icon_list]."
+msgstr ""
+
+#: doc/classes/Theme.xml:171
+msgid ""
+"Returns the [StyleBox] at [code]name[/code] if the theme has "
+"[code]node_type[/code].\n"
+"Valid [code]name[/code]s may be found using [method get_stylebox_list]. "
+"Valid [code]node_type[/code]s may be found using [method get_stylebox_types]."
+msgstr ""
+
+#: doc/classes/Theme.xml:179
+msgid ""
+"Returns all the [StyleBox]s as a [PoolStringArray] filled with each "
+"[StyleBox]'s name, for use in [method get_stylebox], if the theme has "
+"[code]node_type[/code].\n"
+"Valid [code]node_type[/code]s may be found using [method get_stylebox_types]."
+msgstr ""
+
+#: doc/classes/Theme.xml:186
+msgid ""
+"Returns all the [StyleBox] types as a [PoolStringArray] filled with unique "
+"type names, for use in [method get_stylebox] and/or [method "
+"get_stylebox_list]."
+msgstr ""
+
+#: doc/classes/Theme.xml:195
+msgid ""
+"Returns the theme item of [code]data_type[/code] at [code]name[/code] if the "
+"theme has [code]node_type[/code].\n"
+"Valid [code]name[/code]s may be found using [method get_theme_item_list] or "
+"a data type specific method. Valid [code]node_type[/code]s may be found "
+"using [method get_theme_item_types] or a data type specific method."
+msgstr ""
+
+#: doc/classes/Theme.xml:204
+msgid ""
+"Returns all the theme items of [code]data_type[/code] as a [PoolStringArray] "
+"filled with each theme items's name, for use in [method get_theme_item] or a "
+"data type specific method, if the theme has [code]node_type[/code].\n"
+"Valid [code]node_type[/code]s may be found using [method "
+"get_theme_item_types] or a data type specific method."
+msgstr ""
+
+#: doc/classes/Theme.xml:212
+msgid ""
+"Returns all the theme items of [code]data_type[/code] types as a "
+"[PoolStringArray] filled with unique type names, for use in [method "
+"get_theme_item], [method get_theme_item_list] or data type specific methods."
+msgstr ""
+
+#: doc/classes/Theme.xml:219
+msgid ""
+"Returns all the theme types as a [PoolStringArray] filled with unique type "
+"names, for use in other [code]get_*[/code] functions of this theme.\n"
+"[b]Note:[/b] [code]node_type[/code] has no effect and will be removed in "
+"future version."
+msgstr ""
+
+#: doc/classes/Theme.xml:228
+msgid ""
+"Returns [code]true[/code] if [Color] with [code]name[/code] is in "
+"[code]node_type[/code].\n"
+"Returns [code]false[/code] if the theme does not have [code]node_type[/code]."
+msgstr ""
+
+#: doc/classes/Theme.xml:237
+msgid ""
+"Returns [code]true[/code] if constant with [code]name[/code] is in "
+"[code]node_type[/code].\n"
+"Returns [code]false[/code] if the theme does not have [code]node_type[/code]."
+msgstr ""
+
+#: doc/classes/Theme.xml:244
+msgid ""
+"Returns [code]true[/code] if this theme has a valid [member default_font] "
+"value."
+msgstr ""
+
+#: doc/classes/Theme.xml:252
+msgid ""
+"Returns [code]true[/code] if [Font] with [code]name[/code] is in "
+"[code]node_type[/code].\n"
+"Returns [code]false[/code] if the theme does not have [code]node_type[/code]."
+msgstr ""
+
+#: doc/classes/Theme.xml:261
+msgid ""
+"Returns [code]true[/code] if icon [Texture] with [code]name[/code] is in "
+"[code]node_type[/code].\n"
+"Returns [code]false[/code] if the theme does not have [code]node_type[/code]."
+msgstr ""
+
+#: doc/classes/Theme.xml:270
+msgid ""
+"Returns [code]true[/code] if [StyleBox] with [code]name[/code] is in "
+"[code]node_type[/code].\n"
+"Returns [code]false[/code] if the theme does not have [code]node_type[/code]."
+msgstr ""
+
+#: doc/classes/Theme.xml:280
+msgid ""
+"Returns [code]true[/code] if a theme item of [code]data_type[/code] with "
+"[code]name[/code] is in [code]node_type[/code].\n"
+"Returns [code]false[/code] if the theme does not have [code]node_type[/code]."
+msgstr ""
+
+#: doc/classes/Theme.xml:288
+msgid ""
+"Adds missing and overrides existing definitions with values from the "
+"[code]other[/code] [Theme].\n"
+"[b]Note:[/b] This modifies the current theme. If you want to merge two "
+"themes together without modifying either one, create a new empty theme and "
+"merge the other two into it one after another."
+msgstr ""
+
+#: doc/classes/Theme.xml:298
+msgid ""
+"Renames the [Color] at [code]old_name[/code] to [code]name[/code] if the "
+"theme has [code]node_type[/code]. If [code]name[/code] is already taken, "
+"this method fails."
+msgstr ""
+
+#: doc/classes/Theme.xml:307
+msgid ""
+"Renames the constant at [code]old_name[/code] to [code]name[/code] if the "
+"theme has [code]node_type[/code]. If [code]name[/code] is already taken, "
+"this method fails."
+msgstr ""
+
+#: doc/classes/Theme.xml:316
+msgid ""
+"Renames the [Font] at [code]old_name[/code] to [code]name[/code] if the "
+"theme has [code]node_type[/code]. If [code]name[/code] is already taken, "
+"this method fails."
+msgstr ""
+
+#: doc/classes/Theme.xml:325
+msgid ""
+"Renames the icon at [code]old_name[/code] to [code]name[/code] if the theme "
+"has [code]node_type[/code]. If [code]name[/code] is already taken, this "
+"method fails."
+msgstr ""
+
+#: doc/classes/Theme.xml:334
+msgid ""
+"Renames [StyleBox] at [code]old_name[/code] to [code]name[/code] if the "
+"theme has [code]node_type[/code]. If [code]name[/code] is already taken, "
+"this method fails."
+msgstr ""
+
+#: doc/classes/Theme.xml:344
+msgid ""
+"Renames the theme item of [code]data_type[/code] at [code]old_name[/code] to "
+"[code]name[/code] if the theme has [code]node_type[/code]. If [code]name[/"
+"code] is already taken, this method fails."
+msgstr ""
+
+#: doc/classes/Theme.xml:353
+msgid ""
+"Sets the theme's [Color] to [code]color[/code] at [code]name[/code] in "
+"[code]node_type[/code].\n"
+"Creates [code]node_type[/code] if the theme does not have it."
+msgstr ""
+
+#: doc/classes/Theme.xml:363
+msgid ""
+"Sets the theme's constant to [code]constant[/code] at [code]name[/code] in "
+"[code]node_type[/code].\n"
+"Creates [code]node_type[/code] if the theme does not have it."
+msgstr ""
+
+#: doc/classes/Theme.xml:373
+msgid ""
+"Sets the theme's [Font] to [code]font[/code] at [code]name[/code] in "
+"[code]node_type[/code].\n"
+"Creates [code]node_type[/code] if the theme does not have it."
+msgstr ""
+
+#: doc/classes/Theme.xml:383
+msgid ""
+"Sets the theme's icon [Texture] to [code]texture[/code] at [code]name[/code] "
+"in [code]node_type[/code].\n"
+"Creates [code]node_type[/code] if the theme does not have it."
+msgstr ""
+
+#: doc/classes/Theme.xml:393
+msgid ""
+"Sets theme's [StyleBox] to [code]stylebox[/code] at [code]name[/code] in "
+"[code]node_type[/code].\n"
+"Creates [code]node_type[/code] if the theme does not have it."
+msgstr ""
+
+#: doc/classes/Theme.xml:404
+msgid ""
+"Sets the theme item of [code]data_type[/code] to [code]value[/code] at "
+"[code]name[/code] in [code]node_type[/code].\n"
+"Does nothing if the [code]value[/code] type does not match [code]data_type[/"
+"code].\n"
+"Creates [code]node_type[/code] if the theme does not have it."
+msgstr ""
+
+#: doc/classes/Theme.xml:412
+msgid ""
+"The default font of this [Theme] resource. Used as a fallback value for font "
+"items defined in this theme, but having invalid values. If this value is "
+"also invalid, the global default value is used.\n"
+"Use [method has_default_font] to check if this value is valid."
+msgstr ""
+
+#: doc/classes/Theme.xml:418
+msgid "Theme's [Color] item type."
+msgstr ""
+
+#: doc/classes/Theme.xml:421
+msgid "Theme's constant item type."
+msgstr ""
+
+#: doc/classes/Theme.xml:424
+msgid "Theme's [Font] item type."
+msgstr ""
+
+#: doc/classes/Theme.xml:427
+msgid "Theme's icon [Texture] item type."
+msgstr ""
+
+#: doc/classes/Theme.xml:430
+msgid "Theme's [StyleBox] item type."
+msgstr ""
+
+#: doc/classes/Theme.xml:433
+msgid "Maximum value for the DataType enum."
+msgstr ""
+
+#: doc/classes/Thread.xml:4
+msgid "A unit of execution in a process."
+msgstr ""
+
+#: doc/classes/Thread.xml:7
+msgid ""
+"A unit of execution in a process. Can run methods on [Object]s "
+"simultaneously. The use of synchronization via [Mutex] or [Semaphore] is "
+"advised if working with shared objects.\n"
+"[b]Note:[/b] Breakpoints won't break on code if it's running in a thread. "
+"This is a current limitation of the GDScript debugger."
+msgstr ""
+
+#: doc/classes/Thread.xml:12
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/threads/thread_safe_apis.html"
+msgstr ""
+
+#: doc/classes/Thread.xml:19
+msgid ""
+"Returns the current [Thread]'s ID, uniquely identifying it among all "
+"threads. If the [Thread] is not running this returns an empty string."
+msgstr ""
+
+#: doc/classes/Thread.xml:25
+msgid ""
+"Returns [code]true[/code] if this [Thread] has been started. Once started, "
+"this will return [code]true[/code] until it is joined using [method "
+"wait_to_finish]. For checking if a [Thread] is still executing its task, use "
+"[method is_alive]."
+msgstr ""
+
+#: doc/classes/Thread.xml:31
+msgid ""
+"Returns [code]true[/code] if this [Thread] is currently running. This is "
+"useful for determining if [method wait_to_finish] can be called without "
+"blocking the calling thread.\n"
+"To check if a [Thread] is joinable, use [method is_active]."
+msgstr ""
+
+#: doc/classes/Thread.xml:42
+msgid ""
+"Starts a new [Thread] that runs [code]method[/code] on object "
+"[code]instance[/code] with [code]userdata[/code] passed as an argument. Even "
+"if no userdata is passed, [code]method[/code] must accept one argument and "
+"it will be null. The [code]priority[/code] of the [Thread] can be changed by "
+"passing a value from the [enum Priority] enum.\n"
+"Returns [constant OK] on success, or [constant ERR_CANT_CREATE] on failure."
+msgstr ""
+
+#: doc/classes/Thread.xml:49
+msgid ""
+"Joins the [Thread] and waits for it to finish. Returns the output of the "
+"method passed to [method start].\n"
+"Should either be used when you want to retrieve the value returned from the "
+"method called by the [Thread] or before freeing the instance that contains "
+"the [Thread].\n"
+"To determine if this can be called without blocking the calling thread, "
+"check if [method is_alive] is [code]false[/code].\n"
+"[b]Note:[/b] After the [Thread] finishes joining it will be disposed. If you "
+"want to use it again you will have to create a new instance of it."
+msgstr ""
+
+#: doc/classes/Thread.xml:58
+msgid "A thread running with lower priority than normally."
+msgstr ""
+
+#: doc/classes/Thread.xml:61
+msgid "A thread with a standard priority."
+msgstr ""
+
+#: doc/classes/Thread.xml:64
+msgid "A thread running with higher priority than normally."
+msgstr ""
+
+#: doc/classes/TileMap.xml:4
+msgid "Node for 2D tile-based maps."
+msgstr ""
+
+#: doc/classes/TileMap.xml:7
+msgid ""
+"Node for 2D tile-based maps. Tilemaps use a [TileSet] which contain a list "
+"of tiles (textures plus optional collision, navigation, and/or occluder "
+"shapes) which are used to create grid-based maps.\n"
+"When doing physics queries against the tilemap, the cell coordinates are "
+"encoded as [code]metadata[/code] for each detected collision shape returned "
+"by methods such as [method Physics2DDirectSpaceState.intersect_shape], "
+"[method Physics2DDirectBodyState.get_contact_collider_shape_metadata], etc."
+msgstr ""
+
+#: doc/classes/TileMap.xml:11 doc/classes/TileSet.xml:11
+msgid "https://docs.godotengine.org/en/3.4/tutorials/2d/using_tilemaps.html"
+msgstr ""
+
+#: doc/classes/TileMap.xml:14 doc/classes/TileSet.xml:14
+msgid "https://godotengine.org/asset-library/asset/111"
+msgstr ""
+
+#: doc/classes/TileMap.xml:23
+msgid "Clears all cells."
+msgstr ""
+
+#: doc/classes/TileMap.xml:29
+msgid "Clears cells that do not exist in the tileset."
+msgstr ""
+
+#: doc/classes/TileMap.xml:37
+msgid ""
+"Returns the tile index of the given cell. If no tile exists in the cell, "
+"returns [constant INVALID_CELL]."
+msgstr ""
+
+#: doc/classes/TileMap.xml:45
+msgid ""
+"Returns the coordinate (subtile column and row) of the autotile variation in "
+"the tileset. Returns a zero vector if the cell doesn't have autotiling."
+msgstr ""
+
+#: doc/classes/TileMap.xml:52
+msgid ""
+"Returns the tile index of the cell given by a Vector2. If no tile exists in "
+"the cell, returns [constant INVALID_CELL]."
+msgstr ""
+
+#: doc/classes/TileMap.xml:59
+msgid "Returns [code]true[/code] if the given collision layer bit is set."
+msgstr ""
+
+#: doc/classes/TileMap.xml:66
+msgid "Returns [code]true[/code] if the given collision mask bit is set."
+msgstr ""
+
+#: doc/classes/TileMap.xml:72
+msgid ""
+"Returns a [Vector2] array with the positions of all cells containing a tile "
+"from the tileset (i.e. a tile index different from [code]-1[/code])."
+msgstr ""
+
+#: doc/classes/TileMap.xml:79
+msgid ""
+"Returns an array of all cells with the given tile index specified in "
+"[code]id[/code]."
+msgstr ""
+
+#: doc/classes/TileMap.xml:85
+msgid "Returns a rectangle enclosing the used (non-empty) tiles of the map."
+msgstr ""
+
+#: doc/classes/TileMap.xml:93
+msgid ""
+"Returns [code]true[/code] if the given cell is transposed, i.e. the X and Y "
+"axes are swapped."
+msgstr ""
+
+#: doc/classes/TileMap.xml:101
+msgid "Returns [code]true[/code] if the given cell is flipped in the X axis."
+msgstr ""
+
+#: doc/classes/TileMap.xml:109
+msgid "Returns [code]true[/code] if the given cell is flipped in the Y axis."
+msgstr ""
+
+#: doc/classes/TileMap.xml:117
+msgid ""
+"Returns the local position of the top left corner of the cell corresponding "
+"to the given tilemap (grid-based) coordinates.\n"
+"To get the global position, use [method Node2D.to_global]:\n"
+"[codeblock]\n"
+"var local_position = my_tilemap.map_to_world(map_position)\n"
+"var global_position = my_tilemap.to_global(local_position)\n"
+"[/codeblock]\n"
+"Optionally, the tilemap's half offset can be ignored."
+msgstr ""
+
+#: doc/classes/TileMap.xml:136
+msgid ""
+"Sets the tile index for the cell given by a Vector2.\n"
+"An index of [code]-1[/code] clears the cell.\n"
+"Optionally, the tile can also be flipped, transposed, or given autotile "
+"coordinates. The autotile coordinate refers to the column and row of the "
+"subtile.\n"
+"[b]Note:[/b] Data such as navigation polygons and collision shapes are not "
+"immediately updated for performance reasons.\n"
+"If you need these to be immediately updated, you can call [method "
+"update_dirty_quadrants].\n"
+"Overriding this method also overrides it internally, allowing custom logic "
+"to be implemented when tiles are placed/removed:\n"
+"[codeblock]\n"
+"func set_cell(x, y, tile, flip_x=false, flip_y=false, transpose=false, "
+"autotile_coord=Vector2()):\n"
+" # Write your custom logic here.\n"
+" # To call the default method:\n"
+" .set_cell(x, y, tile, flip_x, flip_y, transpose, autotile_coord)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/TileMap.xml:158
+msgid ""
+"Sets the tile index for the given cell.\n"
+"An index of [code]-1[/code] clears the cell.\n"
+"Optionally, the tile can also be flipped or transposed.\n"
+"[b]Note:[/b] Data such as navigation polygons and collision shapes are not "
+"immediately updated for performance reasons.\n"
+"If you need these to be immediately updated, you can call [method "
+"update_dirty_quadrants]."
+msgstr ""
+
+#: doc/classes/TileMap.xml:170
+msgid "Sets the given collision layer bit."
+msgstr ""
+
+#: doc/classes/TileMap.xml:178
+msgid "Sets the given collision mask bit."
+msgstr ""
+
+#: doc/classes/TileMap.xml:185
+msgid ""
+"Applies autotiling rules to the cell (and its adjacent cells) referenced by "
+"its grid-based X and Y coordinates."
+msgstr ""
+
+#: doc/classes/TileMap.xml:193
+msgid ""
+"Applies autotiling rules to the cells in the given region (specified by grid-"
+"based X and Y coordinates).\n"
+"Calling with invalid (or missing) parameters applies autotiling rules for "
+"the entire tilemap."
+msgstr ""
+
+#: doc/classes/TileMap.xml:200
+msgid ""
+"Updates the tile map's quadrants, allowing things such as navigation and "
+"collision shapes to be immediately used if modified."
+msgstr ""
+
+#: doc/classes/TileMap.xml:207
+msgid ""
+"Returns the tilemap (grid-based) coordinates corresponding to the given "
+"local position.\n"
+"To use this with a global position, first determine the local position with "
+"[method Node2D.to_local]:\n"
+"[codeblock]\n"
+"var local_position = my_tilemap.to_local(global_position)\n"
+"var map_position = my_tilemap.world_to_map(local_position)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/TileMap.xml:218
+msgid "If [code]true[/code], the cell's UVs will be clipped."
+msgstr ""
+
+#: doc/classes/TileMap.xml:221
+msgid "The custom [Transform2D] to be applied to the TileMap's cells."
+msgstr ""
+
+#: doc/classes/TileMap.xml:224
+msgid ""
+"Amount to offset alternating tiles. See [enum HalfOffset] for possible "
+"values."
+msgstr ""
+
+#: doc/classes/TileMap.xml:227
+msgid ""
+"The TileMap's quadrant size. Optimizes drawing by batching, using chunks of "
+"this size."
+msgstr ""
+
+#: doc/classes/TileMap.xml:230
+msgid "The TileMap's cell size."
+msgstr ""
+
+#: doc/classes/TileMap.xml:233
+msgid "Position for tile origin. See [enum TileOrigin] for possible values."
+msgstr ""
+
+#: doc/classes/TileMap.xml:236
+msgid ""
+"If [code]true[/code], the TileMap's direct children will be drawn in order "
+"of their Y coordinate."
+msgstr ""
+
+#: doc/classes/TileMap.xml:239
+msgid ""
+"If [code]true[/code], the textures will be centered in the middle of each "
+"tile. This is useful for certain isometric or top-down modes when textures "
+"are made larger or smaller than the tiles (e.g. to avoid flickering on tile "
+"edges). The offset is still applied, but from the center of the tile. If "
+"used, [member compatibility_mode] is ignored.\n"
+"If [code]false[/code], the texture position start in the top-left corner "
+"unless [member compatibility_mode] is enabled."
+msgstr ""
+
+#: doc/classes/TileMap.xml:243
+msgid ""
+"Bounce value for static body collisions (see [code]collision_use_kinematic[/"
+"code])."
+msgstr ""
+
+#: doc/classes/TileMap.xml:246
+msgid ""
+"Friction value for static body collisions (see "
+"[code]collision_use_kinematic[/code])."
+msgstr ""
+
+#: doc/classes/TileMap.xml:249
+msgid ""
+"The collision layer(s) for all colliders in the TileMap. See [url=https://"
+"docs.godotengine.org/en/3.4/tutorials/physics/physics_introduction."
+"html#collision-layers-and-masks]Collision layers and masks[/url] in the "
+"documentation for more information."
+msgstr ""
+
+#: doc/classes/TileMap.xml:252
+msgid ""
+"The collision mask(s) for all colliders in the TileMap. See [url=https://"
+"docs.godotengine.org/en/3.4/tutorials/physics/physics_introduction."
+"html#collision-layers-and-masks]Collision layers and masks[/url] in the "
+"documentation for more information."
+msgstr ""
+
+#: doc/classes/TileMap.xml:255
+msgid ""
+"If [code]true[/code], TileMap collisions will be handled as a kinematic "
+"body. If [code]false[/code], collisions will be handled as static body."
+msgstr ""
+
+#: doc/classes/TileMap.xml:258
+msgid ""
+"If [code]true[/code], this tilemap's collision shape will be added to the "
+"collision shape of the parent. The parent has to be a [CollisionObject2D]."
+msgstr ""
+
+#: doc/classes/TileMap.xml:261
+msgid ""
+"If [code]true[/code], the compatibility with the tilemaps made in Godot 3.1 "
+"or earlier is maintained (textures move when the tile origin changes and "
+"rotate if the texture size is not homogeneous). This mode presents problems "
+"when doing [code]flip_h[/code], [code]flip_v[/code] and [code]transpose[/"
+"code] tile operations on non-homogeneous isometric tiles (e.g. 2:1), in "
+"which the texture could not coincide with the collision, thus it is not "
+"recommended for isometric or non-square tiles.\n"
+"If [code]false[/code], the textures do not move when doing [code]flip_h[/"
+"code], [code]flip_v[/code] operations if no offset is used, nor when "
+"changing the tile origin.\n"
+"The compatibility mode doesn't work with the [member centered_textures] "
+"option, because displacing textures with the [member cell_tile_origin] "
+"option or in irregular tiles is not relevant when centering those textures."
+msgstr ""
+
+#: doc/classes/TileMap.xml:266
+msgid "The TileMap orientation mode. See [enum Mode] for possible values."
+msgstr ""
+
+#: doc/classes/TileMap.xml:269
+msgid ""
+"The light mask assigned to all light occluders in the TileMap. The TileSet's "
+"light occluders will cast shadows only from Light2D(s) that have the same "
+"light mask(s)."
+msgstr ""
+
+#: doc/classes/TileMap.xml:272
+msgid ""
+"If [code]true[/code], collision shapes are visible in the editor. Doesn't "
+"affect collision shapes visibility at runtime. To show collision shapes at "
+"runtime, enable [b]Visible Collision Shapes[/b] in the [b]Debug[/b] menu "
+"instead."
+msgstr ""
+
+#: doc/classes/TileMap.xml:275
+msgid "The assigned [TileSet]."
+msgstr ""
+
+#: doc/classes/TileMap.xml:281
+msgid "Emitted when a tilemap setting has changed."
+msgstr ""
+
+#: doc/classes/TileMap.xml:287
+msgid "Returned when a cell doesn't exist."
+msgstr ""
+
+#: doc/classes/TileMap.xml:290
+msgid "Orthogonal orientation mode."
+msgstr ""
+
+#: doc/classes/TileMap.xml:293
+msgid "Isometric orientation mode."
+msgstr ""
+
+#: doc/classes/TileMap.xml:296
+msgid "Custom orientation mode."
+msgstr ""
+
+#: doc/classes/TileMap.xml:299
+msgid "Half offset on the X coordinate."
+msgstr ""
+
+#: doc/classes/TileMap.xml:302
+msgid "Half offset on the Y coordinate."
+msgstr ""
+
+#: doc/classes/TileMap.xml:305
+msgid "Half offset disabled."
+msgstr ""
+
+#: doc/classes/TileMap.xml:308
+msgid "Half offset on the X coordinate (negative)."
+msgstr ""
+
+#: doc/classes/TileMap.xml:311
+msgid "Half offset on the Y coordinate (negative)."
+msgstr ""
+
+#: doc/classes/TileMap.xml:314
+msgid "Tile origin at its top-left corner."
+msgstr ""
+
+#: doc/classes/TileMap.xml:317
+msgid "Tile origin at its center."
+msgstr ""
+
+#: doc/classes/TileMap.xml:320
+msgid "Tile origin at its bottom-left corner."
+msgstr ""
+
+#: doc/classes/TileSet.xml:4
+msgid "Tile library for tilemaps."
+msgstr ""
+
+#: doc/classes/TileSet.xml:7
+msgid ""
+"A TileSet is a library of tiles for a [TileMap]. It contains a list of "
+"tiles, each consisting of a sprite and optional collision shapes.\n"
+"Tiles are referenced by a unique integer ID."
+msgstr ""
+
+#: doc/classes/TileSet.xml:42
+msgid ""
+"Determines when the auto-tiler should consider two different auto-tile IDs "
+"to be bound together.\n"
+"[b]Note:[/b] [code]neighbor_id[/code] will be [code]-1[/code] ([constant "
+"TileMap.INVALID_CELL]) when checking a tile against an empty neighbor tile."
+msgstr ""
+
+#: doc/classes/TileSet.xml:50
+msgid "Clears all bitmask information of the autotile."
+msgstr ""
+
+#: doc/classes/TileSet.xml:58
+msgid ""
+"Returns the bitmask of the subtile from an autotile given its coordinates.\n"
+"The value is the sum of the values in [enum AutotileBindings] present in the "
+"subtile (e.g. a value of 5 means the bitmask has bindings in both the top "
+"left and top right)."
+msgstr ""
+
+#: doc/classes/TileSet.xml:66
+msgid "Returns the [enum BitmaskMode] of the autotile."
+msgstr ""
+
+#: doc/classes/TileSet.xml:73
+msgid ""
+"Returns the subtile that's being used as an icon in an atlas/autotile given "
+"its coordinates.\n"
+"The subtile defined as the icon will be used as a fallback when the atlas/"
+"autotile's bitmask information is incomplete. It will also be used to "
+"represent it in the TileSet editor."
+msgstr ""
+
+#: doc/classes/TileSet.xml:82
+msgid ""
+"Returns the light occluder of the subtile from an atlas/autotile given its "
+"coordinates."
+msgstr ""
+
+#: doc/classes/TileSet.xml:90
+msgid ""
+"Returns the navigation polygon of the subtile from an atlas/autotile given "
+"its coordinates."
+msgstr ""
+
+#: doc/classes/TileSet.xml:97
+msgid "Returns the size of the subtiles in an atlas/autotile."
+msgstr ""
+
+#: doc/classes/TileSet.xml:104
+msgid "Returns the spacing between subtiles of the atlas/autotile."
+msgstr ""
+
+#: doc/classes/TileSet.xml:112
+msgid ""
+"Returns the priority of the subtile from an autotile given its coordinates.\n"
+"When more than one subtile has the same bitmask value, one of them will be "
+"picked randomly for drawing. Its priority will define how often it will be "
+"picked."
+msgstr ""
+
+#: doc/classes/TileSet.xml:121
+msgid ""
+"Returns the drawing index of the subtile from an atlas/autotile given its "
+"coordinates."
+msgstr ""
+
+#: doc/classes/TileSet.xml:130
+msgid ""
+"Sets the bitmask of the subtile from an autotile given its coordinates.\n"
+"The value is the sum of the values in [enum AutotileBindings] present in the "
+"subtile (e.g. a value of 5 means the bitmask has bindings in both the top "
+"left and top right)."
+msgstr ""
+
+#: doc/classes/TileSet.xml:139
+msgid "Sets the [enum BitmaskMode] of the autotile."
+msgstr ""
+
+#: doc/classes/TileSet.xml:147
+msgid ""
+"Sets the subtile that will be used as an icon in an atlas/autotile given its "
+"coordinates.\n"
+"The subtile defined as the icon will be used as a fallback when the atlas/"
+"autotile's bitmask information is incomplete. It will also be used to "
+"represent it in the TileSet editor."
+msgstr ""
+
+#: doc/classes/TileSet.xml:157
+msgid ""
+"Sets the light occluder of the subtile from an atlas/autotile given its "
+"coordinates."
+msgstr ""
+
+#: doc/classes/TileSet.xml:166
+msgid ""
+"Sets the navigation polygon of the subtile from an atlas/autotile given its "
+"coordinates."
+msgstr ""
+
+#: doc/classes/TileSet.xml:174
+msgid "Sets the size of the subtiles in an atlas/autotile."
+msgstr ""
+
+#: doc/classes/TileSet.xml:182
+msgid "Sets the spacing between subtiles of the atlas/autotile."
+msgstr ""
+
+#: doc/classes/TileSet.xml:191
+msgid ""
+"Sets the priority of the subtile from an autotile given its coordinates.\n"
+"When more than one subtile has the same bitmask value, one of them will be "
+"picked randomly for drawing. Its priority will define how often it will be "
+"picked."
+msgstr ""
+
+#: doc/classes/TileSet.xml:201
+msgid ""
+"Sets the drawing index of the subtile from an atlas/autotile given its "
+"coordinates."
+msgstr ""
+
+#: doc/classes/TileSet.xml:207
+msgid "Clears all tiles."
+msgstr ""
+
+#: doc/classes/TileSet.xml:214
+msgid "Creates a new tile with the given ID."
+msgstr ""
+
+#: doc/classes/TileSet.xml:221
+msgid "Returns the first tile matching the given name."
+msgstr ""
+
+#: doc/classes/TileSet.xml:227
+msgid ""
+"Returns the ID following the last currently used ID, useful when creating a "
+"new tile."
+msgstr ""
+
+#: doc/classes/TileSet.xml:233
+msgid "Returns an array of all currently used tile IDs."
+msgstr ""
+
+#: doc/classes/TileSet.xml:240
+msgid "Removes the given tile ID."
+msgstr ""
+
+#: doc/classes/TileSet.xml:251
+msgid "Adds a shape to the tile."
+msgstr ""
+
+#: doc/classes/TileSet.xml:258
+msgid "Returns the tile's light occluder."
+msgstr ""
+
+#: doc/classes/TileSet.xml:265
+msgid "Returns the tile's material."
+msgstr ""
+
+#: doc/classes/TileSet.xml:272
+msgid "Returns the tile's modulation color."
+msgstr ""
+
+#: doc/classes/TileSet.xml:279
+msgid "Returns the tile's name."
+msgstr ""
+
+#: doc/classes/TileSet.xml:286
+msgid "Returns the navigation polygon of the tile."
+msgstr ""
+
+#: doc/classes/TileSet.xml:293
+msgid "Returns the offset of the tile's navigation polygon."
+msgstr ""
+
+#: doc/classes/TileSet.xml:300
+msgid "Returns the tile's normal map texture."
+msgstr ""
+
+#: doc/classes/TileSet.xml:307
+msgid "Returns the offset of the tile's light occluder."
+msgstr ""
+
+#: doc/classes/TileSet.xml:314
+msgid "Returns the tile sub-region in the texture."
+msgstr ""
+
+#: doc/classes/TileSet.xml:322
+msgid "Returns a tile's given shape."
+msgstr ""
+
+#: doc/classes/TileSet.xml:329
+msgid "Returns the number of shapes assigned to a tile."
+msgstr ""
+
+#: doc/classes/TileSet.xml:337
+msgid "Returns the offset of a tile's shape."
+msgstr ""
+
+#: doc/classes/TileSet.xml:345
+msgid "Returns the one-way collision value of a tile's shape."
+msgstr ""
+
+#: doc/classes/TileSet.xml:360
+msgid "Returns the [Transform2D] of a tile's shape."
+msgstr ""
+
+#: doc/classes/TileSet.xml:367
+msgid ""
+"Returns an array of dictionaries describing the tile's shapes.\n"
+"[b]Dictionary structure in the array returned by this method:[/b]\n"
+"[codeblock]\n"
+"{\n"
+" \"autotile_coord\": Vector2,\n"
+" \"one_way\": bool,\n"
+" \"one_way_margin\": int,\n"
+" \"shape\": CollisionShape2D,\n"
+" \"shape_transform\": Transform2D,\n"
+"}\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/TileSet.xml:384
+msgid "Returns the tile's texture."
+msgstr ""
+
+#: doc/classes/TileSet.xml:391
+msgid "Returns the texture offset of the tile."
+msgstr ""
+
+#: doc/classes/TileSet.xml:398
+msgid "Returns the tile's [enum TileMode]."
+msgstr ""
+
+#: doc/classes/TileSet.xml:405
+msgid "Returns the tile's Z index (drawing layer)."
+msgstr ""
+
+#: doc/classes/TileSet.xml:413
+msgid "Sets a light occluder for the tile."
+msgstr ""
+
+#: doc/classes/TileSet.xml:421
+msgid "Sets the tile's material."
+msgstr ""
+
+#: doc/classes/TileSet.xml:429
+msgid "Sets the tile's modulation color."
+msgstr ""
+
+#: doc/classes/TileSet.xml:437
+msgid "Sets the tile's name."
+msgstr ""
+
+#: doc/classes/TileSet.xml:445
+msgid "Sets the tile's navigation polygon."
+msgstr ""
+
+#: doc/classes/TileSet.xml:453
+msgid "Sets an offset for the tile's navigation polygon."
+msgstr ""
+
+#: doc/classes/TileSet.xml:461
+msgid ""
+"Sets the tile's normal map texture.\n"
+"[b]Note:[/b] Godot expects the normal map to use X+, Y-, and Z+ coordinates. "
+"See [url=http://wiki.polycount.com/wiki/"
+"Normal_Map_Technical_Details#Common_Swizzle_Coordinates]this page[/url] for "
+"a comparison of normal map coordinates expected by popular engines."
+msgstr ""
+
+#: doc/classes/TileSet.xml:470
+msgid "Sets an offset for the tile's light occluder."
+msgstr ""
+
+#: doc/classes/TileSet.xml:478
+msgid ""
+"Sets the tile's sub-region in the texture. This is common in texture atlases."
+msgstr ""
+
+#: doc/classes/TileSet.xml:487
+msgid "Sets a shape for the tile, enabling collision."
+msgstr ""
+
+#: doc/classes/TileSet.xml:496
+msgid "Sets the offset of a tile's shape."
+msgstr ""
+
+#: doc/classes/TileSet.xml:505
+msgid "Enables one-way collision on a tile's shape."
+msgstr ""
+
+#: doc/classes/TileSet.xml:522
+msgid "Sets a [Transform2D] on a tile's shape."
+msgstr ""
+
+#: doc/classes/TileSet.xml:530
+msgid "Sets an array of shapes for the tile, enabling collision."
+msgstr ""
+
+#: doc/classes/TileSet.xml:538
+msgid "Sets the tile's texture."
+msgstr ""
+
+#: doc/classes/TileSet.xml:546
+msgid "Sets the tile's texture offset."
+msgstr ""
+
+#: doc/classes/TileSet.xml:554
+msgid "Sets the tile's [enum TileMode]."
+msgstr ""
+
+#: doc/classes/TileSet.xml:562
+msgid "Sets the tile's drawing index."
+msgstr ""
+
+#: doc/classes/Timer.xml:4
+msgid "A countdown timer."
+msgstr ""
+
+#: doc/classes/Timer.xml:7
+msgid ""
+"Counts down a specified interval and emits a signal on reaching 0. Can be "
+"set to repeat or \"one-shot\" mode.\n"
+"[b]Note:[/b] To create a one-shot timer without instantiating a node, use "
+"[method SceneTree.create_timer]."
+msgstr ""
+
+#: doc/classes/Timer.xml:17
+msgid "Returns [code]true[/code] if the timer is stopped."
+msgstr ""
+
+#: doc/classes/Timer.xml:24
+msgid ""
+"Starts the timer. Sets [code]wait_time[/code] to [code]time_sec[/code] if "
+"[code]time_sec > 0[/code]. This also resets the remaining time to "
+"[code]wait_time[/code].\n"
+"[b]Note:[/b] This method will not resume a paused timer. See [member paused]."
+msgstr ""
+
+#: doc/classes/Timer.xml:31
+msgid "Stops the timer."
+msgstr ""
+
+#: doc/classes/Timer.xml:37
+msgid ""
+"If [code]true[/code], the timer will automatically start when entering the "
+"scene tree.\n"
+"[b]Note:[/b] This property is automatically set to [code]false[/code] after "
+"the timer enters the scene tree and starts."
+msgstr ""
+
+#: doc/classes/Timer.xml:41
+msgid ""
+"If [code]true[/code], the timer will stop when reaching 0. If [code]false[/"
+"code], it will restart."
+msgstr ""
+
+#: doc/classes/Timer.xml:44
+msgid ""
+"If [code]true[/code], the timer is paused and will not process until it is "
+"unpaused again, even if [method start] is called."
+msgstr ""
+
+#: doc/classes/Timer.xml:47
+msgid "Processing mode. See [enum TimerProcessMode]."
+msgstr ""
+
+#: doc/classes/Timer.xml:50
+msgid ""
+"The timer's remaining time in seconds. Returns 0 if the timer is inactive.\n"
+"[b]Note:[/b] You cannot set this value. To change the timer's remaining "
+"time, use [method start]."
+msgstr ""
+
+#: doc/classes/Timer.xml:54
+msgid ""
+"The wait time in seconds.\n"
+"[b]Note:[/b] Timers can only emit once per rendered frame at most (or once "
+"per physics frame if [member process_mode] is [constant "
+"TIMER_PROCESS_PHYSICS]). This means very low wait times (lower than 0.05 "
+"seconds) will behave in significantly different ways depending on the "
+"rendered framerate. For very low wait times, it is recommended to use a "
+"process loop in a script instead of using a Timer node."
+msgstr ""
+
+#: doc/classes/Timer.xml:67
+msgid ""
+"Update the timer during the physics step at each frame (fixed framerate "
+"processing)."
+msgstr ""
+
+#: doc/classes/Timer.xml:70
+msgid "Update the timer during the idle time at each frame."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:4
+msgid "Flat button helper class."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:7
+msgid ""
+"This is a helper class to generate a flat [Button] (see [member Button."
+"flat]), creating a [ToolButton] is equivalent to:\n"
+"[codeblock]\n"
+"var btn = Button.new()\n"
+"btn.flat = true\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/ToolButton.xml:24
+msgid "[StyleBox] used when the [ToolButton] is disabled."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:27
+msgid ""
+"[StyleBox] used when the [ToolButton] is focused. It is displayed over the "
+"current [StyleBox], so using [StyleBoxEmpty] will just disable the focus "
+"visual effect."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:30
+msgid "[Font] of the [ToolButton]'s text."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:33
+msgid "Default text [Color] of the [ToolButton]."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:36
+msgid "Text [Color] used when the [ToolButton] is disabled."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:39
+msgid ""
+"Text [Color] used when the [ToolButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:42
+msgid "Text [Color] used when the [ToolButton] is being hovered."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:45
+msgid "Text [Color] used when the [ToolButton] is being pressed."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:48
+msgid "[StyleBox] used when the [ToolButton] is being hovered."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:51
+msgid "The horizontal space between [ToolButton]'s icon and text."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:54
+msgid "Default [StyleBox] for the [ToolButton]."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:57
+msgid "[StyleBox] used when the [ToolButton] is being pressed."
+msgstr ""
+
+#: doc/classes/TouchScreenButton.xml:4
+msgid "Button for touch screen devices for gameplay use."
+msgstr ""
+
+#: doc/classes/TouchScreenButton.xml:7
+msgid ""
+"TouchScreenButton allows you to create on-screen buttons for touch devices. "
+"It's intended for gameplay use, such as a unit you have to touch to move. "
+"Unlike [Button], TouchScreenButton supports multitouch out of the box. "
+"Several TouchScreenButtons can be pressed at the same time with touch "
+"input.\n"
+"This node inherits from [Node2D]. Unlike with [Control] nodes, you cannot "
+"set anchors on it. If you want to create menus or user interfaces, you may "
+"want to use [Button] nodes instead. To make button nodes react to touch "
+"events, you can enable the Emulate Mouse option in the Project Settings.\n"
+"You can configure TouchScreenButton to be visible only on touch devices, "
+"helping you develop your game both for desktop and mobile devices."
+msgstr ""
+
+#: doc/classes/TouchScreenButton.xml:17
+msgid "Returns [code]true[/code] if this button is currently pressed."
+msgstr ""
+
+#: doc/classes/TouchScreenButton.xml:23
+msgid "The button's action. Actions can be handled with [InputEventAction]."
+msgstr ""
+
+#: doc/classes/TouchScreenButton.xml:26
+msgid "The button's bitmask."
+msgstr ""
+
+#: doc/classes/TouchScreenButton.xml:29
+msgid "The button's texture for the normal state."
+msgstr ""
+
+#: doc/classes/TouchScreenButton.xml:32
+msgid ""
+"If [code]true[/code], the [signal pressed] and [signal released] signals are "
+"emitted whenever a pressed finger goes in and out of the button, even if the "
+"pressure started outside the active area of the button.\n"
+"[b]Note:[/b] This is a \"pass-by\" (not \"bypass\") press mode."
+msgstr ""
+
+#: doc/classes/TouchScreenButton.xml:36
+msgid "The button's texture for the pressed state."
+msgstr ""
+
+#: doc/classes/TouchScreenButton.xml:39
+msgid "The button's shape."
+msgstr ""
+
+#: doc/classes/TouchScreenButton.xml:42
+msgid ""
+"If [code]true[/code], the button's shape is centered in the provided "
+"texture. If no texture is used, this property has no effect."
+msgstr ""
+
+#: doc/classes/TouchScreenButton.xml:45
+msgid "If [code]true[/code], the button's shape is visible."
+msgstr ""
+
+#: doc/classes/TouchScreenButton.xml:48
+msgid ""
+"The button's visibility mode. See [enum VisibilityMode] for possible values."
+msgstr ""
+
+#: doc/classes/TouchScreenButton.xml:54
+msgid "Emitted when the button is pressed (down)."
+msgstr ""
+
+#: doc/classes/TouchScreenButton.xml:59
+msgid "Emitted when the button is released (up)."
+msgstr ""
+
+#: doc/classes/TouchScreenButton.xml:65
+msgid "Always visible."
+msgstr ""
+
+#: doc/classes/TouchScreenButton.xml:68
+msgid "Visible on touch screens only."
+msgstr ""
+
+#: doc/classes/Transform.xml:4
+msgid "3D transformation (3×4 matrix)."
+msgstr ""
+
+#: doc/classes/Transform.xml:7
+msgid ""
+"3×4 matrix (3 rows, 4 columns) used for 3D linear transformations. It can "
+"represent transformations such as translation, rotation, or scaling. It "
+"consists of a [member basis] (first 3 columns) and a [Vector3] for the "
+"[member origin] (last column).\n"
+"For more information, read the \"Matrices and transforms\" documentation "
+"article."
+msgstr ""
+
+#: doc/classes/Transform.xml:26
+msgid ""
+"Constructs a Transform from four [Vector3] values (matrix columns). Each "
+"axis corresponds to local basis vectors (some of which may be scaled)."
+msgstr ""
+
+#: doc/classes/Transform.xml:34
+msgid "Constructs a Transform from a [Basis] and [Vector3]."
+msgstr ""
+
+#: doc/classes/Transform.xml:41
+msgid "Constructs a Transform from a [Transform2D]."
+msgstr ""
+
+#: doc/classes/Transform.xml:48
+msgid ""
+"Constructs a Transform from a [Quat]. The origin will be [code]Vector3(0, 0, "
+"0)[/code]."
+msgstr ""
+
+#: doc/classes/Transform.xml:55
+msgid ""
+"Constructs the Transform from a [Basis]. The origin will be Vector3(0, 0, 0)."
+msgstr ""
+
+#: doc/classes/Transform.xml:61 doc/classes/Transform2D.xml:44
+msgid ""
+"Returns the inverse of the transform, under the assumption that the "
+"transformation is composed of rotation, scaling and translation."
+msgstr ""
+
+#: doc/classes/Transform.xml:69
+msgid ""
+"Interpolates the transform to other Transform by weight amount (on the range "
+"of 0.0 to 1.0)."
+msgstr ""
+
+#: doc/classes/Transform.xml:75
+msgid ""
+"Returns the inverse of the transform, under the assumption that the "
+"transformation is composed of rotation and translation (no scaling, use "
+"affine_inverse for transforms with scaling)."
+msgstr ""
+
+#: doc/classes/Transform.xml:82 doc/classes/Transform2D.xml:99
+msgid ""
+"Returns [code]true[/code] if this transform and [code]transform[/code] are "
+"approximately equal, by calling [code]is_equal_approx[/code] on each "
+"component."
+msgstr ""
+
+#: doc/classes/Transform.xml:90
+msgid ""
+"Returns a copy of the transform rotated such that its -Z axis points towards "
+"the [code]target[/code] position.\n"
+"The transform will first be rotated around the given [code]up[/code] vector, "
+"and then fully aligned to the target by a further rotation around an axis "
+"perpendicular to both the [code]target[/code] and [code]up[/code] vectors.\n"
+"Operations take place in global space."
+msgstr ""
+
+#: doc/classes/Transform.xml:98
+msgid ""
+"Returns the transform with the basis orthogonal (90 degrees), and normalized "
+"axis vectors."
+msgstr ""
+
+#: doc/classes/Transform.xml:106
+msgid ""
+"Rotates the transform around the given axis by the given angle (in radians), "
+"using matrix multiplication. The axis must be a normalized vector."
+msgstr ""
+
+#: doc/classes/Transform.xml:113
+msgid ""
+"Scales basis and origin of the transform by the given scale factor, using "
+"matrix multiplication."
+msgstr ""
+
+#: doc/classes/Transform.xml:120 doc/classes/Transform2D.xml:126
+msgid ""
+"Translates the transform by the given offset, relative to the transform's "
+"basis vectors.\n"
+"Unlike [method rotated] and [method scaled], this does not use matrix "
+"multiplication."
+msgstr ""
+
+#: doc/classes/Transform.xml:128
+msgid ""
+"Transforms the given [Vector3], [Plane], [AABB], or [PoolVector3Array] by "
+"this transform."
+msgstr ""
+
+#: doc/classes/Transform.xml:135
+msgid ""
+"Inverse-transforms the given [Vector3], [Plane], [AABB], or "
+"[PoolVector3Array] by this transform."
+msgstr ""
+
+#: doc/classes/Transform.xml:141
+msgid ""
+"The basis is a matrix containing 3 [Vector3] as its columns: X axis, Y axis, "
+"and Z axis. These vectors can be interpreted as the basis vectors of local "
+"coordinate system traveling with the object."
+msgstr ""
+
+#: doc/classes/Transform.xml:144
+msgid ""
+"The translation offset of the transform (column 3, the fourth column). "
+"Equivalent to array index [code]3[/code]."
+msgstr ""
+
+#: doc/classes/Transform.xml:149
+msgid ""
+"[Transform] with no translation, rotation or scaling applied. When applied "
+"to other data structures, [constant IDENTITY] performs no transformation."
+msgstr ""
+
+#: doc/classes/Transform.xml:152
+msgid "[Transform] with mirroring applied perpendicular to the YZ plane."
+msgstr ""
+
+#: doc/classes/Transform.xml:155
+msgid "[Transform] with mirroring applied perpendicular to the XZ plane."
+msgstr ""
+
+#: doc/classes/Transform.xml:158
+msgid "[Transform] with mirroring applied perpendicular to the XY plane."
+msgstr ""
+
+#: doc/classes/Transform2D.xml:4
+msgid "2D transformation (2×3 matrix)."
+msgstr ""
+
+#: doc/classes/Transform2D.xml:7
+msgid ""
+"2×3 matrix (2 rows, 3 columns) used for 2D linear transformations. It can "
+"represent transformations such as translation, rotation, or scaling. It "
+"consists of three [Vector2] values: [member x], [member y], and the [member "
+"origin].\n"
+"For more information, read the \"Matrices and transforms\" documentation "
+"article."
+msgstr ""
+
+#: doc/classes/Transform2D.xml:21
+msgid "Constructs the transform from a 3D [Transform]."
+msgstr ""
+
+#: doc/classes/Transform2D.xml:30
+msgid ""
+"Constructs the transform from 3 [Vector2] values representing [member x], "
+"[member y], and the [member origin] (the three column vectors)."
+msgstr ""
+
+#: doc/classes/Transform2D.xml:38
+msgid "Constructs the transform from a given angle (in radians) and position."
+msgstr ""
+
+#: doc/classes/Transform2D.xml:51
+msgid ""
+"Returns a vector transformed (multiplied) by the basis matrix.\n"
+"This method does not account for translation (the origin vector)."
+msgstr ""
+
+#: doc/classes/Transform2D.xml:59
+msgid ""
+"Returns a vector transformed (multiplied) by the inverse basis matrix.\n"
+"This method does not account for translation (the origin vector)."
+msgstr ""
+
+#: doc/classes/Transform2D.xml:66
+msgid "Returns the transform's origin (translation)."
+msgstr ""
+
+#: doc/classes/Transform2D.xml:72
+msgid "Returns the transform's rotation (in radians)."
+msgstr ""
+
+#: doc/classes/Transform2D.xml:78
+msgid "Returns the scale."
+msgstr ""
+
+#: doc/classes/Transform2D.xml:86
+msgid ""
+"Returns a transform interpolated between this transform and another by a "
+"given [code]weight[/code] (on the range of 0.0 to 1.0)."
+msgstr ""
+
+#: doc/classes/Transform2D.xml:92
+msgid ""
+"Returns the inverse of the transform, under the assumption that the "
+"transformation is composed of rotation and translation (no scaling, use "
+"[method affine_inverse] for transforms with scaling)."
+msgstr ""
+
+#: doc/classes/Transform2D.xml:105
+msgid ""
+"Returns the transform with the basis orthogonal (90 degrees), and normalized "
+"axis vectors (scale of 1 or -1)."
+msgstr ""
+
+#: doc/classes/Transform2D.xml:112
+msgid ""
+"Rotates the transform by the given angle (in radians), using matrix "
+"multiplication."
+msgstr ""
+
+#: doc/classes/Transform2D.xml:119
+msgid ""
+"Scales the transform by the given scale factor, using matrix multiplication."
+msgstr ""
+
+#: doc/classes/Transform2D.xml:134
+msgid ""
+"Transforms the given [Vector2], [Rect2], or [PoolVector2Array] by this "
+"transform."
+msgstr ""
+
+#: doc/classes/Transform2D.xml:141
+msgid ""
+"Inverse-transforms the given [Vector2], [Rect2], or [PoolVector2Array] by "
+"this transform."
+msgstr ""
+
+#: doc/classes/Transform2D.xml:147
+msgid ""
+"The origin vector (column 2, the third column). Equivalent to array index "
+"[code]2[/code]. The origin vector represents translation."
+msgstr ""
+
+#: doc/classes/Transform2D.xml:158
+msgid ""
+"The identity [Transform2D] with no translation, rotation or scaling applied. "
+"When applied to other data structures, [constant IDENTITY] performs no "
+"transformation."
+msgstr ""
+
+#: doc/classes/Transform2D.xml:161
+msgid "The [Transform2D] that will flip something along the X axis."
+msgstr ""
+
+#: doc/classes/Transform2D.xml:164
+msgid "The [Transform2D] that will flip something along the Y axis."
+msgstr ""
+
+#: doc/classes/Translation.xml:4
+msgid "Language Translation."
+msgstr ""
+
+#: doc/classes/Translation.xml:7
+msgid ""
+"Translations are resources that can be loaded and unloaded on demand. They "
+"map a string to another string."
+msgstr ""
+
+#: doc/classes/Translation.xml:10 doc/classes/TranslationServer.xml:10
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/i18n/internationalizing_games."
+"html"
+msgstr ""
+
+#: doc/classes/Translation.xml:11 doc/classes/TranslationServer.xml:11
+msgid "https://docs.godotengine.org/en/3.4/tutorials/i18n/locales.html"
+msgstr ""
+
+#: doc/classes/Translation.xml:18
+msgid "Virtual method to override [method get_message]."
+msgstr ""
+
+#: doc/classes/Translation.xml:26
+msgid "Adds a message if nonexistent, followed by its translation."
+msgstr ""
+
+#: doc/classes/Translation.xml:33
+msgid "Erases a message."
+msgstr ""
+
+#: doc/classes/Translation.xml:40
+msgid "Returns a message's translation."
+msgstr ""
+
+#: doc/classes/Translation.xml:46
+msgid "Returns the number of existing messages."
+msgstr ""
+
+#: doc/classes/Translation.xml:52
+msgid "Returns all the messages (keys)."
+msgstr ""
+
+#: doc/classes/Translation.xml:58
+msgid "The locale of the translation."
+msgstr ""
+
+#: doc/classes/TranslationServer.xml:4
+msgid "Server that manages all translations."
+msgstr ""
+
+#: doc/classes/TranslationServer.xml:7
+msgid ""
+"Server that manages all translations. Translations can be set to it and "
+"removed from it."
+msgstr ""
+
+#: doc/classes/TranslationServer.xml:18
+msgid "Adds a [Translation] resource."
+msgstr ""
+
+#: doc/classes/TranslationServer.xml:24
+msgid "Clears the server from all translations."
+msgstr ""
+
+#: doc/classes/TranslationServer.xml:30
+msgid "Returns an array of all loaded locales of the project."
+msgstr ""
+
+#: doc/classes/TranslationServer.xml:36
+msgid ""
+"Returns the current locale of the project.\n"
+"See also [method OS.get_locale] and [method OS.get_locale_language] to query "
+"the locale of the user system."
+msgstr ""
+
+#: doc/classes/TranslationServer.xml:44
+msgid ""
+"Returns a locale's language and its variant (e.g. [code]\"en_US\"[/code] "
+"would return [code]\"English (United States)\"[/code])."
+msgstr ""
+
+#: doc/classes/TranslationServer.xml:51
+msgid "Removes the given translation from the server."
+msgstr ""
+
+#: doc/classes/TranslationServer.xml:58
+msgid ""
+"Sets the locale of the project. The [code]locale[/code] string will be "
+"standardized to match known locales (e.g. [code]en-US[/code] would be "
+"matched to [code]en_US[/code]).\n"
+"If translations have been loaded beforehand for the new locale, they will be "
+"applied."
+msgstr ""
+
+#: doc/classes/TranslationServer.xml:66
+msgid "Returns the current locale's translation for the given message (key)."
+msgstr ""
+
+#: doc/classes/Tree.xml:4
+msgid "Control to show a tree of items."
+msgstr ""
+
+#: doc/classes/Tree.xml:7
+msgid ""
+"This shows a tree of items that can be selected, expanded and collapsed. The "
+"tree can have multiple columns with custom controls like text editing, "
+"buttons and popups. It can be useful for structured displays and "
+"interactions.\n"
+"Trees are built via code, using [TreeItem] objects to create the structure. "
+"They have a single root but multiple roots can be simulated if a dummy "
+"hidden root is added.\n"
+"[codeblock]\n"
+"func _ready():\n"
+" var tree = Tree.new()\n"
+" var root = tree.create_item()\n"
+" tree.set_hide_root(true)\n"
+" var child1 = tree.create_item(root)\n"
+" var child2 = tree.create_item(root)\n"
+" var subchild1 = tree.create_item(child1)\n"
+" subchild1.set_text(0, \"Subchild1\")\n"
+"[/codeblock]\n"
+"To iterate over all the [TreeItem] objects in a [Tree] object, use [method "
+"TreeItem.get_next] and [method TreeItem.get_children] after getting the root "
+"through [method get_root]. You can use [method Object.free] on a [TreeItem] "
+"to remove it from the [Tree]."
+msgstr ""
+
+#: doc/classes/Tree.xml:27
+msgid "Returns [code]true[/code] if the column titles are being shown."
+msgstr ""
+
+#: doc/classes/Tree.xml:33
+msgid "Clears the tree. This removes all items."
+msgstr ""
+
+#: doc/classes/Tree.xml:41
+msgid ""
+"Creates an item in the tree and adds it as a child of [code]parent[/code].\n"
+"If [code]parent[/code] is [code]null[/code], the root item will be the "
+"parent, or the new item will be the root itself if the tree is empty.\n"
+"The new item will be the [code]idx[/code]th child of parent, or it will be "
+"the last child if there are not enough siblings."
+msgstr ""
+
+#: doc/classes/Tree.xml:49
+msgid ""
+"Edits the selected tree item as if it was clicked. The item must be set "
+"editable with [method TreeItem.set_editable]. Returns [code]true[/code] if "
+"the item could be edited. Fails if no item is selected."
+msgstr ""
+
+#: doc/classes/Tree.xml:55
+msgid ""
+"Makes the currently focused cell visible.\n"
+"This will scroll the tree if necessary. In [constant SELECT_ROW] mode, this "
+"will not do horizontal scrolling, as all the cells in the selected row is "
+"focused logically.\n"
+"[b]Note:[/b] Despite the name of this method, the focus cursor itself is "
+"only visible in [constant SELECT_MULTI] mode."
+msgstr ""
+
+#: doc/classes/Tree.xml:64
+msgid ""
+"Returns the column index at [code]position[/code], or -1 if no item is there."
+msgstr ""
+
+#: doc/classes/Tree.xml:71
+msgid "Returns the column's title."
+msgstr ""
+
+#: doc/classes/Tree.xml:78
+msgid "Returns the column's width in pixels."
+msgstr ""
+
+#: doc/classes/Tree.xml:84
+msgid ""
+"Returns the rectangle for custom popups. Helper to create custom cell "
+"controls that display a popup. See [method TreeItem.set_cell_mode]."
+msgstr ""
+
+#: doc/classes/Tree.xml:91
+msgid ""
+"Returns the drop section at [code]position[/code], or -100 if no item is "
+"there.\n"
+"Values -1, 0, or 1 will be returned for the \"above item\", \"on item\", and "
+"\"below item\" drop sections, respectively. See [enum DropModeFlags] for a "
+"description of each drop section.\n"
+"To get the item which the returned drop section is relative to, use [method "
+"get_item_at_position]."
+msgstr ""
+
+#: doc/classes/Tree.xml:99
+msgid ""
+"Returns the currently edited item. Can be used with [signal item_edited] to "
+"get the item that was modified.\n"
+"[codeblock]\n"
+"func _ready():\n"
+" $Tree.item_edited.connect(on_Tree_item_edited)\n"
+"\n"
+"func on_Tree_item_edited():\n"
+" print($Tree.get_edited()) # This item just got edited (e.g. checked).\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Tree.xml:112
+msgid "Returns the column for the currently edited item."
+msgstr ""
+
+#: doc/classes/Tree.xml:120
+msgid ""
+"Returns the rectangle area for the specified item. If [code]column[/code] is "
+"specified, only get the position and size of that column, otherwise get the "
+"rectangle containing all columns."
+msgstr ""
+
+#: doc/classes/Tree.xml:127
+msgid ""
+"Returns the tree item at the specified position (relative to the tree origin "
+"position)."
+msgstr ""
+
+#: doc/classes/Tree.xml:134
+msgid ""
+"Returns the next selected item after the given one, or [code]null[/code] if "
+"the end is reached.\n"
+"If [code]from[/code] is [code]null[/code], this returns the first selected "
+"item."
+msgstr ""
+
+#: doc/classes/Tree.xml:141
+msgid "Returns the last pressed button's index."
+msgstr ""
+
+#: doc/classes/Tree.xml:147
+msgid ""
+"Returns the tree's root item, or [code]null[/code] if the tree is empty."
+msgstr ""
+
+#: doc/classes/Tree.xml:153
+msgid "Returns the current scrolling position."
+msgstr ""
+
+#: doc/classes/Tree.xml:159
+msgid ""
+"Returns the currently focused item, or [code]null[/code] if no item is "
+"focused.\n"
+"In [constant SELECT_ROW] and [constant SELECT_SINGLE] modes, the focused "
+"item is same as the selected item. In [constant SELECT_MULTI] mode, the "
+"focused item is the item under the focus cursor, not necessarily selected.\n"
+"To get the currently selected item(s), use [method get_next_selected]."
+msgstr ""
+
+#: doc/classes/Tree.xml:167
+msgid ""
+"Returns the currently focused column, or -1 if no column is focused.\n"
+"In [constant SELECT_SINGLE] mode, the focused column is the selected column. "
+"In [constant SELECT_ROW] mode, the focused column is always 0 if any item is "
+"selected. In [constant SELECT_MULTI] mode, the focused column is the column "
+"under the focus cursor, and there are not necessarily any column selected.\n"
+"To tell whether a column of an item is selected, use [method TreeItem."
+"is_selected]."
+msgstr ""
+
+#: doc/classes/Tree.xml:176
+msgid "Causes the [Tree] to jump to the specified item."
+msgstr ""
+
+#: doc/classes/Tree.xml:184
+msgid ""
+"If [code]true[/code], the column will have the \"Expand\" flag of [Control]. "
+"Columns that have the \"Expand\" flag will use their \"min_width\" in a "
+"similar fashion to [member Control.size_flags_stretch_ratio]."
+msgstr ""
+
+#: doc/classes/Tree.xml:192
+msgid ""
+"Sets the minimum width of a column. Columns that have the \"Expand\" flag "
+"will use their \"min_width\" in a similar fashion to [member Control."
+"size_flags_stretch_ratio]."
+msgstr ""
+
+#: doc/classes/Tree.xml:200
+msgid "Sets the title of a column."
+msgstr ""
+
+#: doc/classes/Tree.xml:207
+msgid "If [code]true[/code], column titles are visible."
+msgstr ""
+
+#: doc/classes/Tree.xml:213
+msgid ""
+"If [code]true[/code], the currently selected cell may be selected again."
+msgstr ""
+
+#: doc/classes/Tree.xml:216
+msgid "If [code]true[/code], a right mouse button click can select items."
+msgstr ""
+
+#: doc/classes/Tree.xml:219
+msgid "The number of columns."
+msgstr ""
+
+#: doc/classes/Tree.xml:222
+msgid ""
+"The drop mode as an OR combination of flags. See [enum DropModeFlags] "
+"constants. Once dropping is done, reverts to [constant DROP_MODE_DISABLED]. "
+"Setting this during [method Control.can_drop_data] is recommended.\n"
+"This controls the drop sections, i.e. the decision and drawing of possible "
+"drop locations based on the mouse position."
+msgstr ""
+
+#: doc/classes/Tree.xml:227
+msgid "If [code]true[/code], the folding arrow is hidden."
+msgstr ""
+
+#: doc/classes/Tree.xml:230
+msgid "If [code]true[/code], the tree's root is hidden."
+msgstr ""
+
+#: doc/classes/Tree.xml:234
+msgid ""
+"Allows single or multiple selection. See the [enum SelectMode] constants."
+msgstr ""
+
+#: doc/classes/Tree.xml:243
+msgid ""
+"Emitted when a button on the tree was pressed (see [method TreeItem."
+"add_button])."
+msgstr ""
+
+#: doc/classes/Tree.xml:248
+msgid "Emitted when a cell is selected."
+msgstr ""
+
+#: doc/classes/Tree.xml:254
+msgid "Emitted when a column's title is pressed."
+msgstr ""
+
+#: doc/classes/Tree.xml:260
+msgid ""
+"Emitted when a cell with the [constant TreeItem.CELL_MODE_CUSTOM] is clicked "
+"to be edited."
+msgstr ""
+
+#: doc/classes/Tree.xml:266
+msgid ""
+"Emitted when the right mouse button is pressed in the empty space of the "
+"tree."
+msgstr ""
+
+#: doc/classes/Tree.xml:272
+msgid ""
+"Emitted when the right mouse button is pressed if right mouse button "
+"selection is active and the tree is empty."
+msgstr ""
+
+#: doc/classes/Tree.xml:277
+msgid "Emitted when an item's label is double-clicked."
+msgstr ""
+
+#: doc/classes/Tree.xml:283
+msgid "Emitted when an item is collapsed by a click on the folding arrow."
+msgstr ""
+
+#: doc/classes/Tree.xml:288
+msgid ""
+"Emitted when a custom button is pressed (i.e. in a [constant TreeItem."
+"CELL_MODE_CUSTOM] mode cell)."
+msgstr ""
+
+#: doc/classes/Tree.xml:293
+msgid "Emitted when an item's icon is double-clicked."
+msgstr ""
+
+#: doc/classes/Tree.xml:298
+msgid "Emitted when an item is edited."
+msgstr ""
+
+#: doc/classes/Tree.xml:303
+msgid "Emitted when an item is edited using the right mouse button."
+msgstr ""
+
+#: doc/classes/Tree.xml:309
+msgid "Emitted when an item is selected with the right mouse button."
+msgstr ""
+
+#: doc/classes/Tree.xml:314
+msgid "Emitted when an item is selected."
+msgstr ""
+
+#: doc/classes/Tree.xml:322
+msgid ""
+"Emitted instead of [code]item_selected[/code] if [code]select_mode[/code] is "
+"[constant SELECT_MULTI]."
+msgstr ""
+
+#: doc/classes/Tree.xml:327
+msgid "Emitted when a left mouse button click does not select any item."
+msgstr ""
+
+#: doc/classes/Tree.xml:333
+msgid ""
+"Allows selection of a single cell at a time. From the perspective of items, "
+"only a single item is allowed to be selected. And there is only one column "
+"selected in the selected item.\n"
+"The focus cursor is always hidden in this mode, but it is positioned at the "
+"current selection, making the currently selected item the currently focused "
+"item."
+msgstr ""
+
+#: doc/classes/Tree.xml:337
+msgid ""
+"Allows selection of a single row at a time. From the perspective of items, "
+"only a single items is allowed to be selected. And all the columns are "
+"selected in the selected item.\n"
+"The focus cursor is always hidden in this mode, but it is positioned at the "
+"first column of the current selection, making the currently selected item "
+"the currently focused item."
+msgstr ""
+
+#: doc/classes/Tree.xml:341
+msgid ""
+"Allows selection of multiple cells at the same time. From the perspective of "
+"items, multiple items are allowed to be selected. And there can be multiple "
+"columns selected in each selected item.\n"
+"The focus cursor is visible in this mode, the item or column under the "
+"cursor is not necessarily selected."
+msgstr ""
+
+#: doc/classes/Tree.xml:345
+msgid ""
+"Disables all drop sections, but still allows to detect the \"on item\" drop "
+"section by [method get_drop_section_at_position].\n"
+"[b]Note:[/b] This is the default flag, it has no effect when combined with "
+"other flags."
+msgstr ""
+
+#: doc/classes/Tree.xml:349
+msgid ""
+"Enables the \"on item\" drop section. This drop section covers the entire "
+"item.\n"
+"When combined with [constant DROP_MODE_INBETWEEN], this drop section halves "
+"the height and stays centered vertically."
+msgstr ""
+
+#: doc/classes/Tree.xml:353
+msgid ""
+"Enables \"above item\" and \"below item\" drop sections. The \"above item\" "
+"drop section covers the top half of the item, and the \"below item\" drop "
+"section covers the bottom half.\n"
+"When combined with [constant DROP_MODE_ON_ITEM], these drop sections halves "
+"the height and stays on top / bottom accordingly."
+msgstr ""
+
+#: doc/classes/Tree.xml:359
+msgid "The arrow icon used when a foldable item is not collapsed."
+msgstr ""
+
+#: doc/classes/Tree.xml:362
+msgid "The arrow icon used when a foldable item is collapsed."
+msgstr ""
+
+#: doc/classes/Tree.xml:365
+msgid ""
+"Default [StyleBox] for the [Tree], i.e. used when the control is not being "
+"focused."
+msgstr ""
+
+#: doc/classes/Tree.xml:368
+msgid "[StyleBox] used when the [Tree] is being focused."
+msgstr ""
+
+#: doc/classes/Tree.xml:371
+msgid "The horizontal space between each button in a cell."
+msgstr ""
+
+#: doc/classes/Tree.xml:374
+msgid "[StyleBox] used when a button in the tree is pressed."
+msgstr ""
+
+#: doc/classes/Tree.xml:377
+msgid ""
+"The check icon to display when the [constant TreeItem.CELL_MODE_CHECK] mode "
+"cell is checked."
+msgstr ""
+
+#: doc/classes/Tree.xml:380
+msgid "[StyleBox] used for the cursor, when the [Tree] is being focused."
+msgstr ""
+
+#: doc/classes/Tree.xml:383
+msgid "[StyleBox] used for the cursor, when the [Tree] is not being focused."
+msgstr ""
+
+#: doc/classes/Tree.xml:386
+msgid ""
+"Default [StyleBox] for a [constant TreeItem.CELL_MODE_CUSTOM] mode cell."
+msgstr ""
+
+#: doc/classes/Tree.xml:389
+msgid ""
+"Text [Color] for a [constant TreeItem.CELL_MODE_CUSTOM] mode cell when it's "
+"hovered."
+msgstr ""
+
+#: doc/classes/Tree.xml:392
+msgid ""
+"[StyleBox] for a [constant TreeItem.CELL_MODE_CUSTOM] mode cell when it's "
+"hovered."
+msgstr ""
+
+#: doc/classes/Tree.xml:395
+msgid ""
+"[StyleBox] for a [constant TreeItem.CELL_MODE_CUSTOM] mode cell when it's "
+"pressed."
+msgstr ""
+
+#: doc/classes/Tree.xml:398
+msgid ""
+"Draws the guidelines if not zero, this acts as a boolean. The guideline is a "
+"horizontal line drawn at the bottom of each item."
+msgstr ""
+
+#: doc/classes/Tree.xml:401
+msgid ""
+"Draws the relationship lines if not zero, this acts as a boolean. "
+"Relationship lines are drawn at the start of child items to show hierarchy."
+msgstr ""
+
+#: doc/classes/Tree.xml:404
+msgid ""
+"[Color] used to draw possible drop locations. See [enum DropModeFlags] "
+"constants for further description of drop locations."
+msgstr ""
+
+#: doc/classes/Tree.xml:416
+msgid "[Color] of the guideline."
+msgstr ""
+
+#: doc/classes/Tree.xml:419
+msgid ""
+"The horizontal space between item cells. This is also used as the margin at "
+"the start of an item when folding is disabled."
+msgstr ""
+
+#: doc/classes/Tree.xml:422
+msgid ""
+"The horizontal margin at the start of an item. This is used when folding is "
+"enabled for the item."
+msgstr ""
+
+#: doc/classes/Tree.xml:425
+msgid "[Color] of the relationship lines."
+msgstr ""
+
+#: doc/classes/Tree.xml:428
+msgid ""
+"The maximum distance between the mouse cursor and the control's border to "
+"trigger border scrolling when dragging."
+msgstr ""
+
+#: doc/classes/Tree.xml:431
+msgid "The speed of border scrolling."
+msgstr ""
+
+#: doc/classes/Tree.xml:434
+msgid ""
+"The arrow icon to display for the [constant TreeItem.CELL_MODE_RANGE] mode "
+"cell."
+msgstr ""
+
+#: doc/classes/Tree.xml:437
+msgid ""
+"[StyleBox] for the selected items, used when the [Tree] is not being focused."
+msgstr ""
+
+#: doc/classes/Tree.xml:440
+msgid ""
+"[StyleBox] for the selected items, used when the [Tree] is being focused."
+msgstr ""
+
+#: doc/classes/Tree.xml:443
+msgid "Default text [Color] of the title button."
+msgstr ""
+
+#: doc/classes/Tree.xml:446
+msgid "[Font] of the title button's text."
+msgstr ""
+
+#: doc/classes/Tree.xml:449
+msgid "[StyleBox] used when the title button is being hovered."
+msgstr ""
+
+#: doc/classes/Tree.xml:452
+msgid "Default [StyleBox] for the title button."
+msgstr ""
+
+#: doc/classes/Tree.xml:455
+msgid "[StyleBox] used when the title button is being pressed."
+msgstr ""
+
+#: doc/classes/Tree.xml:458
+msgid ""
+"The check icon to display when the [constant TreeItem.CELL_MODE_CHECK] mode "
+"cell is unchecked."
+msgstr ""
+
+#: doc/classes/Tree.xml:461
+msgid ""
+"The updown arrow icon to display for the [constant TreeItem.CELL_MODE_RANGE] "
+"mode cell."
+msgstr ""
+
+#: doc/classes/Tree.xml:464
+msgid ""
+"The vertical padding inside each item, i.e. the distance between the item's "
+"content and top/bottom border."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:4
+msgid "Control for a single item inside a [Tree]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:7
+msgid ""
+"Control for a single item inside a [Tree]. May have child [TreeItem]s and be "
+"styled as well as contain buttons.\n"
+"You can remove a [TreeItem] by using [method Object.free]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:21
+msgid ""
+"Adds a button with [Texture] [code]button[/code] at column [code]column[/"
+"code]. The [code]button_idx[/code] index is used to identify the button when "
+"calling other methods. If not specified, the next available index is used, "
+"which may be retrieved by calling [method get_button_count] immediately "
+"after this method. Optionally, the button can be [code]disabled[/code] and "
+"have a [code]tooltip[/code]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:28
+msgid ""
+"Calls the [code]method[/code] on the actual TreeItem and its children "
+"recursively. Pass parameters as a comma separated list."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:35
+msgid "Resets the background color for the given column to default."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:42
+msgid "Resets the color for the given column to default."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:49
+msgid "Deselects the given column."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:57
+msgid ""
+"Removes the button at index [code]button_idx[/code] in column [code]column[/"
+"code]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:65
+msgid ""
+"Returns the [Texture] of the button at index [code]button_idx[/code] in "
+"column [code]column[/code]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:72
+msgid ""
+"Returns the number of buttons in column [code]column[/code]. May be used to "
+"get the most recently added button's index, if no index was specified."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:80
+msgid ""
+"Returns the tooltip string for the button at index [code]button_idx[/code] "
+"in column [code]column[/code]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:87
+msgid "Returns the column's cell mode."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:93
+msgid ""
+"Returns the TreeItem's first child item or a null object if there is none."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:100
+msgid "Returns the custom background color of column [code]column[/code]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:107
+msgid "Returns the custom color of column [code]column[/code]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:114
+msgid "Returns [code]true[/code] if [code]expand_right[/code] is set."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:121
+msgid "Returns the given column's icon [Texture]. Error if no icon is set."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:128
+msgid "Returns the column's icon's maximum width."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:135
+msgid "Returns the [Color] modulating the column's icon."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:142
+msgid "Returns the icon [Texture] region as [Rect2]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:149
+msgid ""
+"Returns the metadata value that was set for the given column using [method "
+"set_metadata]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:155
+msgid ""
+"Returns the next TreeItem in the tree or a null object if there is none."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:162
+msgid ""
+"Returns the next visible TreeItem in the tree or a null object if there is "
+"none.\n"
+"If [code]wrap[/code] is enabled, the method will wrap around to the first "
+"visible element in the tree when called on the last visible element, "
+"otherwise it returns [code]null[/code]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:169
+msgid "Returns the parent TreeItem or a null object if there is none."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:175
+msgid ""
+"Returns the previous TreeItem in the tree or a null object if there is none."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:182
+msgid ""
+"Returns the previous visible TreeItem in the tree or a null object if there "
+"is none.\n"
+"If [code]wrap[/code] is enabled, the method will wrap around to the last "
+"visible element in the tree when called on the first visible element, "
+"otherwise it returns [code]null[/code]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:190
+msgid "Returns the value of a [constant CELL_MODE_RANGE] column."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:197
+msgid ""
+"Returns a dictionary containing the range parameters for a given column. The "
+"keys are \"min\", \"max\", \"step\", and \"expr\"."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:204
+msgid "Gets the suffix string shown after the column value."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:211
+msgid "Returns the given column's text."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:218
+msgid "Returns the given column's text alignment."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:225
+msgid "Returns the given column's tooltip."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:233
+msgid ""
+"Returns [code]true[/code] if the button at index [code]button_idx[/code] for "
+"the given column is disabled."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:240
+msgid "Returns [code]true[/code] if the given column is checked."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:253
+msgid "Returns [code]true[/code] if column [code]column[/code] is editable."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:260
+msgid "Returns [code]true[/code] if column [code]column[/code] is selectable."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:267
+msgid "Returns [code]true[/code] if column [code]column[/code] is selected."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:273
+msgid "Moves this TreeItem to the bottom in the [Tree] hierarchy."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:279
+msgid "Moves this TreeItem to the top in the [Tree] hierarchy."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:286
+msgid ""
+"Removes the given child [TreeItem] and all its children from the [Tree]. "
+"Note that it doesn't free the item from memory, so it can be reused later. "
+"To completely remove a [TreeItem] use [method Object.free]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:293
+msgid "Selects the column [code]column[/code]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:302
+msgid ""
+"Sets the given column's button [Texture] at index [code]button_idx[/code] to "
+"[code]button[/code]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:311
+msgid ""
+"If [code]true[/code], disables the button at index [code]button_idx[/code] "
+"in column [code]column[/code]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:319
+msgid ""
+"Sets the given column's cell mode to [code]mode[/code]. See [enum "
+"TreeCellMode] constants."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:327
+msgid "If [code]true[/code], the column [code]column[/code] is checked."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:343
+msgid ""
+"Sets the given column's custom background color and whether to just use it "
+"as an outline."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:351
+msgid "Sets the given column's custom color."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:360
+msgid ""
+"Sets the given column's custom draw callback to [code]callback[/code] method "
+"on [code]object[/code].\n"
+"The [code]callback[/code] should accept two arguments: the [TreeItem] that "
+"is drawn and its position and size as a [Rect2]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:369
+msgid "If [code]true[/code], column [code]column[/code] is editable."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:377
+msgid ""
+"If [code]true[/code], column [code]column[/code] is expanded to the right."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:385
+msgid "Sets the given column's icon [Texture]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:393
+msgid "Sets the given column's icon's maximum width."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:401
+msgid "Modulates the given column's icon with [code]modulate[/code]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:409
+msgid "Sets the given column's icon's texture region."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:417
+msgid ""
+"Sets the metadata value for the given column, which can be retrieved later "
+"using [method get_metadata]. This can be used, for example, to store a "
+"reference to the original data."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:425
+msgid "Sets the value of a [constant CELL_MODE_RANGE] column."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:436
+msgid ""
+"Sets the range of accepted values for a column. The column must be in the "
+"[constant CELL_MODE_RANGE] mode.\n"
+"If [code]expr[/code] is [code]true[/code], the edit mode slider will use an "
+"exponential scale as with [member Range.exp_edit]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:445
+msgid "If [code]true[/code], the given column is selectable."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:453
+msgid ""
+"Sets a string to be shown after a column's value (for example, a unit "
+"abbreviation)."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:461
+msgid "Sets the given column's text value."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:469
+msgid ""
+"Sets the given column's text alignment. See [enum TextAlign] for possible "
+"values."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:477
+msgid "Sets the given column's tooltip text."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:483
+msgid "If [code]true[/code], the TreeItem is collapsed."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:486
+msgid "The custom minimum height."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:489
+msgid "If [code]true[/code], folding is disabled for this TreeItem."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:494
+msgid "Cell contains a string."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:497
+msgid "Cell contains a checkbox."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:500
+msgid "Cell contains a range."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:503
+msgid "Cell contains an icon."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:508
+msgid "Align text to the left. See [code]set_text_align()[/code]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:511
+msgid "Center text. See [code]set_text_align()[/code]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:514
+msgid "Align text to the right. See [code]set_text_align()[/code]."
+msgstr ""
+
+#: doc/classes/TriangleMesh.xml:4
+msgid "Internal mesh type."
+msgstr ""
+
+#: doc/classes/TriangleMesh.xml:7
+msgid "Mesh type used internally for collision calculations."
+msgstr ""
+
+#: doc/classes/Tween.xml:4
+msgid "Smoothly animates a node's properties over time."
+msgstr ""
+
+#: doc/classes/Tween.xml:7
+msgid ""
+"Tweens are useful for animations requiring a numerical property to be "
+"interpolated over a range of values. The name [i]tween[/i] comes from [i]in-"
+"betweening[/i], an animation technique where you specify [i]keyframes[/i] "
+"and the computer interpolates the frames that appear between them.\n"
+"[Tween] is more suited than [AnimationPlayer] for animations where you don't "
+"know the final values in advance. For example, interpolating a dynamically-"
+"chosen camera zoom value is best done with a [Tween] node; it would be "
+"difficult to do the same thing with an [AnimationPlayer] node.\n"
+"Here is a brief usage example that makes a 2D node move smoothly between two "
+"positions:\n"
+"[codeblock]\n"
+"var tween = get_node(\"Tween\")\n"
+"tween.interpolate_property($Node2D, \"position\",\n"
+" Vector2(0, 0), Vector2(100, 100), 1,\n"
+" Tween.TRANS_LINEAR, Tween.EASE_IN_OUT)\n"
+"tween.start()\n"
+"[/codeblock]\n"
+"Many methods require a property name, such as [code]\"position\"[/code] "
+"above. You can find the correct property name by hovering over the property "
+"in the Inspector. You can also provide the components of a property directly "
+"by using [code]\"property:component\"[/code] (e.g. [code]position:x[/code]), "
+"where it would only apply to that particular component.\n"
+"Many of the methods accept [code]trans_type[/code] and [code]ease_type[/"
+"code]. The first accepts an [enum TransitionType] constant, and refers to "
+"the way the timing of the animation is handled (see [url=https://easings."
+"net/]easings.net[/url] for some examples). The second accepts an [enum "
+"EaseType] constant, and controls where the [code]trans_type[/code] is "
+"applied to the interpolation (in the beginning, the end, or both). If you "
+"don't know which transition and easing to pick, you can try different [enum "
+"TransitionType] constants with [constant EASE_IN_OUT], and use the one that "
+"looks best.\n"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/master/img/"
+"tween_cheatsheet.png]Tween easing and transition types cheatsheet[/url]"
+msgstr ""
+
+#: doc/classes/Tween.xml:36
+msgid ""
+"Follows [code]method[/code] of [code]object[/code] and applies the returned "
+"value on [code]target_method[/code] of [code]target[/code], beginning from "
+"[code]initial_val[/code] for [code]duration[/code] seconds, [code]delay[/"
+"code] later. Methods are called with consecutive values.\n"
+"Use [enum TransitionType] for [code]trans_type[/code] and [enum EaseType] "
+"for [code]ease_type[/code] parameters. These values control the timing and "
+"direction of the interpolation. See the class description for more "
+"information."
+msgstr ""
+
+#: doc/classes/Tween.xml:52
+msgid ""
+"Follows [code]property[/code] of [code]object[/code] and applies it on "
+"[code]target_property[/code] of [code]target[/code], beginning from "
+"[code]initial_val[/code] for [code]duration[/code] seconds, [code]delay[/"
+"code] seconds later.\n"
+"Use [enum TransitionType] for [code]trans_type[/code] and [enum EaseType] "
+"for [code]ease_type[/code] parameters. These values control the timing and "
+"direction of the interpolation. See the class description for more "
+"information."
+msgstr ""
+
+#: doc/classes/Tween.xml:59
+msgid ""
+"Returns the total time needed for all tweens to end. If you have two tweens, "
+"one lasting 10 seconds and the other 20 seconds, it would return 20 seconds, "
+"as by that time all tweens would have finished."
+msgstr ""
+
+#: doc/classes/Tween.xml:73
+msgid ""
+"Calls [code]callback[/code] of [code]object[/code] after [code]duration[/"
+"code]. [code]arg1[/code]-[code]arg5[/code] are arguments to be passed to the "
+"callback."
+msgstr ""
+
+#: doc/classes/Tween.xml:87
+msgid ""
+"Calls [code]callback[/code] of [code]object[/code] after [code]duration[/"
+"code] on the main thread (similar to [method Object.call_deferred]). "
+"[code]arg1[/code]-[code]arg5[/code] are arguments to be passed to the "
+"callback."
+msgstr ""
+
+#: doc/classes/Tween.xml:101
+msgid ""
+"Animates [code]method[/code] of [code]object[/code] from [code]initial_val[/"
+"code] to [code]final_val[/code] for [code]duration[/code] seconds, "
+"[code]delay[/code] seconds later. Methods are called with consecutive "
+"values.\n"
+"Use [enum TransitionType] for [code]trans_type[/code] and [enum EaseType] "
+"for [code]ease_type[/code] parameters. These values control the timing and "
+"direction of the interpolation. See the class description for more "
+"information."
+msgstr ""
+
+#: doc/classes/Tween.xml:116
+msgid ""
+"Animates [code]property[/code] of [code]object[/code] from "
+"[code]initial_val[/code] to [code]final_val[/code] for [code]duration[/code] "
+"seconds, [code]delay[/code] seconds later. Setting the initial value to "
+"[code]null[/code] uses the current value of the property.\n"
+"Use [enum TransitionType] for [code]trans_type[/code] and [enum EaseType] "
+"for [code]ease_type[/code] parameters. These values control the timing and "
+"direction of the interpolation. See the class description for more "
+"information."
+msgstr ""
+
+#: doc/classes/Tween.xml:123
+msgid ""
+"Returns [code]true[/code] if any tweens are currently running.\n"
+"[b]Note:[/b] This method doesn't consider tweens that have ended."
+msgstr ""
+
+#: doc/classes/Tween.xml:132
+msgid ""
+"Stops animation and removes a tween, given its object and property/method "
+"pair. By default, all tweens are removed, unless [code]key[/code] is "
+"specified."
+msgstr ""
+
+#: doc/classes/Tween.xml:138
+msgid "Stops animation and removes all tweens."
+msgstr ""
+
+#: doc/classes/Tween.xml:146
+msgid ""
+"Resets a tween to its initial value (the one given, not the one before the "
+"tween), given its object and property/method pair. By default, all tweens "
+"are removed, unless [code]key[/code] is specified."
+msgstr ""
+
+#: doc/classes/Tween.xml:152
+msgid ""
+"Resets all tweens to their initial values (the ones given, not those before "
+"the tween)."
+msgstr ""
+
+#: doc/classes/Tween.xml:160
+msgid ""
+"Continues animating a stopped tween, given its object and property/method "
+"pair. By default, all tweens are resumed, unless [code]key[/code] is "
+"specified."
+msgstr ""
+
+#: doc/classes/Tween.xml:166
+msgid "Continues animating all stopped tweens."
+msgstr ""
+
+#: doc/classes/Tween.xml:173
+msgid "Sets the interpolation to the given [code]time[/code] in seconds."
+msgstr ""
+
+#: doc/classes/Tween.xml:180
+msgid ""
+"Activates/deactivates the tween. See also [method stop_all] and [method "
+"resume_all]."
+msgstr ""
+
+#: doc/classes/Tween.xml:186
+msgid "Starts the tween. You can define animations both before and after this."
+msgstr ""
+
+#: doc/classes/Tween.xml:194
+msgid ""
+"Stops a tween, given its object and property/method pair. By default, all "
+"tweens are stopped, unless [code]key[/code] is specified."
+msgstr ""
+
+#: doc/classes/Tween.xml:200
+msgid "Stops animating all tweens."
+msgstr ""
+
+#: doc/classes/Tween.xml:215
+msgid ""
+"Animates [code]method[/code] of [code]object[/code] from the value returned "
+"by [code]initial_method[/code] to [code]final_val[/code] for [code]duration[/"
+"code] seconds, [code]delay[/code] seconds later. Methods are animated by "
+"calling them with consecutive values.\n"
+"Use [enum TransitionType] for [code]trans_type[/code] and [enum EaseType] "
+"for [code]ease_type[/code] parameters. These values control the timing and "
+"direction of the interpolation. See the class description for more "
+"information."
+msgstr ""
+
+#: doc/classes/Tween.xml:231
+msgid ""
+"Animates [code]property[/code] of [code]object[/code] from the current value "
+"of the [code]initial_val[/code] property of [code]initial[/code] to "
+"[code]final_val[/code] for [code]duration[/code] seconds, [code]delay[/code] "
+"seconds later.\n"
+"Use [enum TransitionType] for [code]trans_type[/code] and [enum EaseType] "
+"for [code]ease_type[/code] parameters. These values control the timing and "
+"direction of the interpolation. See the class description for more "
+"information."
+msgstr ""
+
+#: doc/classes/Tween.xml:238
+msgid "Returns the current time of the tween."
+msgstr ""
+
+#: doc/classes/Tween.xml:244
+msgid "The tween's animation process thread. See [enum TweenProcessMode]."
+msgstr ""
+
+#: doc/classes/Tween.xml:247
+msgid ""
+"The tween's speed multiplier. For example, set it to [code]1.0[/code] for "
+"normal speed, [code]2.0[/code] for two times normal speed, or [code]0.5[/"
+"code] for half of the normal speed. A value of [code]0[/code] pauses the "
+"animation, but see also [method set_active] or [method stop_all] for this."
+msgstr ""
+
+#: doc/classes/Tween.xml:250
+msgid "If [code]true[/code], the tween loops."
+msgstr ""
+
+#: doc/classes/Tween.xml:256
+msgid "Emitted when all processes in a tween end."
+msgstr ""
+
+#: doc/classes/Tween.xml:263
+msgid "Emitted when a tween ends."
+msgstr ""
+
+#: doc/classes/Tween.xml:270
+msgid "Emitted when a tween starts."
+msgstr ""
+
+#: doc/classes/Tween.xml:279
+msgid "Emitted at each step of the animation."
+msgstr ""
+
+#: doc/classes/Tween.xml:285
+msgid "The tween updates with the [code]_physics_process[/code] callback."
+msgstr ""
+
+#: doc/classes/Tween.xml:288
+msgid "The tween updates with the [code]_process[/code] callback."
+msgstr ""
+
+#: doc/classes/Tween.xml:291
+msgid "The animation is interpolated linearly."
+msgstr ""
+
+#: doc/classes/Tween.xml:294
+msgid "The animation is interpolated using a sine function."
+msgstr ""
+
+#: doc/classes/Tween.xml:297
+msgid ""
+"The animation is interpolated with a quintic (to the power of 5) function."
+msgstr ""
+
+#: doc/classes/Tween.xml:300
+msgid ""
+"The animation is interpolated with a quartic (to the power of 4) function."
+msgstr ""
+
+#: doc/classes/Tween.xml:303
+msgid ""
+"The animation is interpolated with a quadratic (to the power of 2) function."
+msgstr ""
+
+#: doc/classes/Tween.xml:306
+msgid ""
+"The animation is interpolated with an exponential (to the power of x) "
+"function."
+msgstr ""
+
+#: doc/classes/Tween.xml:309
+msgid ""
+"The animation is interpolated with elasticity, wiggling around the edges."
+msgstr ""
+
+#: doc/classes/Tween.xml:312
+msgid ""
+"The animation is interpolated with a cubic (to the power of 3) function."
+msgstr ""
+
+#: doc/classes/Tween.xml:315
+msgid "The animation is interpolated with a function using square roots."
+msgstr ""
+
+#: doc/classes/Tween.xml:318
+msgid "The animation is interpolated by bouncing at the end."
+msgstr ""
+
+#: doc/classes/Tween.xml:321
+msgid "The animation is interpolated backing out at ends."
+msgstr ""
+
+#: doc/classes/Tween.xml:324
+msgid "The interpolation starts slowly and speeds up towards the end."
+msgstr ""
+
+#: doc/classes/Tween.xml:327
+msgid "The interpolation starts quickly and slows down towards the end."
+msgstr ""
+
+#: doc/classes/Tween.xml:330
+msgid ""
+"A combination of [constant EASE_IN] and [constant EASE_OUT]. The "
+"interpolation is slowest at both ends."
+msgstr ""
+
+#: doc/classes/Tween.xml:333
+msgid ""
+"A combination of [constant EASE_IN] and [constant EASE_OUT]. The "
+"interpolation is fastest at both ends."
+msgstr ""
+
+#: doc/classes/UDPServer.xml:4
+msgid "Helper class to implement a UDP server."
+msgstr ""
+
+#: doc/classes/UDPServer.xml:7
+msgid ""
+"A simple server that opens a UDP socket and returns connected "
+"[PacketPeerUDP] upon receiving new packets. See also [method PacketPeerUDP."
+"connect_to_host].\n"
+"After starting the server ([method listen]), you will need to [method poll] "
+"it at regular intervals (e.g. inside [method Node._process]) for it to "
+"process new packets, delivering them to the appropriate [PacketPeerUDP], and "
+"taking new connections.\n"
+"Below a small example of how it can be used:\n"
+"[codeblock]\n"
+"# server.gd\n"
+"extends Node\n"
+"\n"
+"var server := UDPServer.new()\n"
+"var peers = []\n"
+"\n"
+"func _ready():\n"
+" server.listen(4242)\n"
+"\n"
+"func _process(delta):\n"
+" server.poll() # Important!\n"
+" if server.is_connection_available():\n"
+" var peer : PacketPeerUDP = server.take_connection()\n"
+" var pkt = peer.get_packet()\n"
+" print(\"Accepted peer: %s:%s\" % [peer.get_packet_ip(), peer."
+"get_packet_port()])\n"
+" print(\"Received data: %s\" % [pkt.get_string_from_utf8()])\n"
+" # Reply so it knows we received the message.\n"
+" peer.put_packet(pkt)\n"
+" # Keep a reference so we can keep contacting the remote peer.\n"
+" peers.append(peer)\n"
+"\n"
+" for i in range(0, peers.size()):\n"
+" pass # Do something with the connected peers.\n"
+"\n"
+"[/codeblock]\n"
+"[codeblock]\n"
+"# client.gd\n"
+"extends Node\n"
+"\n"
+"var udp := PacketPeerUDP.new()\n"
+"var connected = false\n"
+"\n"
+"func _ready():\n"
+" udp.connect_to_host(\"127.0.0.1\", 4242)\n"
+"\n"
+"func _process(delta):\n"
+" if !connected:\n"
+" # Try to contact server\n"
+" udp.put_packet(\"The answer is... 42!\".to_utf8())\n"
+" if udp.get_available_packet_count() > 0:\n"
+" print(\"Connected: %s\" % udp.get_packet().get_string_from_utf8())\n"
+" connected = true\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/UDPServer.xml:61
+msgid ""
+"Returns [code]true[/code] if a packet with a new address/port combination "
+"was received on the socket."
+msgstr ""
+
+#: doc/classes/UDPServer.xml:67
+msgid ""
+"Returns [code]true[/code] if the socket is open and listening on a port."
+msgstr ""
+
+#: doc/classes/UDPServer.xml:75
+msgid ""
+"Starts the server by opening a UDP socket listening on the given port. You "
+"can optionally specify a [code]bind_address[/code] to only listen for "
+"packets sent to that address. See also [method PacketPeerUDP.listen]."
+msgstr ""
+
+#: doc/classes/UDPServer.xml:81
+msgid ""
+"Call this method at regular intervals (e.g. inside [method Node._process]) "
+"to process new packets. And packet from known address/port pair will be "
+"delivered to the appropriate [PacketPeerUDP], any packet received from an "
+"unknown address/port pair will be added as a pending connection (see [method "
+"is_connection_available], [method take_connection]). The maximum number of "
+"pending connection is defined via [member max_pending_connections]."
+msgstr ""
+
+#: doc/classes/UDPServer.xml:87
+msgid ""
+"Stops the server, closing the UDP socket if open. Will close all connected "
+"[PacketPeerUDP] accepted via [method take_connection] (remote peers will not "
+"be notified)."
+msgstr ""
+
+#: doc/classes/UDPServer.xml:93
+msgid ""
+"Returns the first pending connection (connected to the appropriate address/"
+"port). Will return [code]null[/code] if no new connection is available. See "
+"also [method is_connection_available], [method PacketPeerUDP."
+"connect_to_host]."
+msgstr ""
+
+#: doc/classes/UDPServer.xml:99
+msgid ""
+"Define the maximum number of pending connections, during [method poll], any "
+"new pending connection exceeding that value will be automatically dropped. "
+"Setting this value to [code]0[/code] effectively prevents any new pending "
+"connection to be accepted (e.g. when all your players have connected)."
+msgstr ""
+
+#: doc/classes/UndoRedo.xml:4
+msgid "Helper to manage undo/redo operations in the editor or custom tools."
+msgstr ""
+
+#: doc/classes/UndoRedo.xml:7
+msgid ""
+"Helper to manage undo/redo operations in the editor or custom tools. It "
+"works by registering methods and property changes inside \"actions\".\n"
+"Common behavior is to create an action, then add do/undo calls to functions "
+"or property changes, then committing the action.\n"
+"Here's an example on how to add an action to the Godot editor's own "
+"[UndoRedo], from a plugin:\n"
+"[codeblock]\n"
+"var undo_redo = get_undo_redo() # Method of EditorPlugin.\n"
+"\n"
+"func do_something():\n"
+" pass # Put your code here.\n"
+"\n"
+"func undo_something():\n"
+" pass # Put here the code that reverts what's done by "
+"\"do_something()\".\n"
+"\n"
+"func _on_MyButton_pressed():\n"
+" var node = get_node(\"MyNode2D\")\n"
+" undo_redo.create_action(\"Move the node\")\n"
+" undo_redo.add_do_method(self, \"do_something\")\n"
+" undo_redo.add_undo_method(self, \"undo_something\")\n"
+" undo_redo.add_do_property(node, \"position\", Vector2(100,100))\n"
+" undo_redo.add_undo_property(node, \"position\", node.position)\n"
+" undo_redo.commit_action()\n"
+"[/codeblock]\n"
+"[method create_action], [method add_do_method], [method add_undo_method], "
+"[method add_do_property], [method add_undo_property], and [method "
+"commit_action] should be called one after the other, like in the example. "
+"Not doing so could lead to crashes.\n"
+"If you don't need to register a method, you can leave [method add_do_method] "
+"and [method add_undo_method] out; the same goes for properties. You can also "
+"register more than one method/property."
+msgstr ""
+
+#: doc/classes/UndoRedo.xml:39
+msgid "Register a method that will be called when the action is committed."
+msgstr ""
+
+#: doc/classes/UndoRedo.xml:48
+msgid "Register a property value change for \"do\"."
+msgstr ""
+
+#: doc/classes/UndoRedo.xml:55
+msgid ""
+"Register a reference for \"do\" that will be erased if the \"do\" history is "
+"lost. This is useful mostly for new nodes created for the \"do\" call. Do "
+"not use for resources."
+msgstr ""
+
+#: doc/classes/UndoRedo.xml:63
+msgid "Register a method that will be called when the action is undone."
+msgstr ""
+
+#: doc/classes/UndoRedo.xml:72
+msgid "Register a property value change for \"undo\"."
+msgstr ""
+
+#: doc/classes/UndoRedo.xml:79
+msgid ""
+"Register a reference for \"undo\" that will be erased if the \"undo\" "
+"history is lost. This is useful mostly for nodes removed with the \"do\" "
+"call (not the \"undo\" call!)."
+msgstr ""
+
+#: doc/classes/UndoRedo.xml:86
+msgid ""
+"Clear the undo/redo history and associated references.\n"
+"Passing [code]false[/code] to [code]increase_version[/code] will prevent the "
+"version number to be increased from this."
+msgstr ""
+
+#: doc/classes/UndoRedo.xml:93
+msgid ""
+"Commit the action. All \"do\" methods/properties are called/set when this "
+"function is called."
+msgstr ""
+
+#: doc/classes/UndoRedo.xml:101
+msgid ""
+"Create a new action. After this is called, do all your calls to [method "
+"add_do_method], [method add_undo_method], [method add_do_property], and "
+"[method add_undo_property], then commit the action with [method "
+"commit_action].\n"
+"The way actions are merged is dictated by the [code]merge_mode[/code] "
+"argument. See [enum MergeMode] for details."
+msgstr ""
+
+#: doc/classes/UndoRedo.xml:108
+msgid "Gets the name of the current action."
+msgstr ""
+
+#: doc/classes/UndoRedo.xml:114
+msgid ""
+"Gets the version. Every time a new action is committed, the [UndoRedo]'s "
+"version number is increased automatically.\n"
+"This is useful mostly to check if something changed from a saved version."
+msgstr ""
+
+#: doc/classes/UndoRedo.xml:133
+msgid ""
+"Returns [code]true[/code] if the [UndoRedo] is currently committing the "
+"action, i.e. running its \"do\" method or property change (see [method "
+"commit_action])."
+msgstr ""
+
+#: doc/classes/UndoRedo.xml:139
+msgid "Redo the last action."
+msgstr ""
+
+#: doc/classes/UndoRedo.xml:145
+msgid "Undo the last action."
+msgstr ""
+
+#: doc/classes/UndoRedo.xml:152
+msgid "Called when [method undo] or [method redo] was called."
+msgstr ""
+
+#: doc/classes/UndoRedo.xml:158
+msgid "Makes \"do\"/\"undo\" operations stay in separate actions."
+msgstr ""
+
+#: doc/classes/UndoRedo.xml:161
+msgid ""
+"Makes so that the action's \"do\" operation is from the first action created "
+"and the \"undo\" operation is from the last subsequent action with the same "
+"name."
+msgstr ""
+
+#: doc/classes/UndoRedo.xml:164
+msgid "Makes subsequent actions with the same name be merged into one."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:4
+msgid "UPNP network functions."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:7
+msgid ""
+"Provides UPNP functionality to discover [UPNPDevice]s on the local network "
+"and execute commands on them, like managing port mappings (port forwarding) "
+"and querying the local and remote network IP address. Note that methods on "
+"this class are synchronous and block the calling thread.\n"
+"To forward a specific port:\n"
+"[codeblock]\n"
+"const PORT = 7777\n"
+"var upnp = UPNP.new()\n"
+"upnp.discover(2000, 2, \"InternetGatewayDevice\")\n"
+"upnp.add_port_mapping(port)\n"
+"[/codeblock]\n"
+"To close a specific port (e.g. after you have finished using it):\n"
+"[codeblock]\n"
+"upnp.delete_port_mapping(port)\n"
+"[/codeblock]\n"
+"[b]Note:[/b] UPnP discovery blocks the current thread. To perform discovery "
+"without blocking the main thread, use [Thread]s like this:\n"
+"[codeblock]\n"
+"# Emitted when UPnP port mapping setup is completed (regardless of success "
+"or failure).\n"
+"signal upnp_completed(error)\n"
+"\n"
+"# Replace this with your own server port number between 1025 and 65535.\n"
+"const SERVER_PORT = 3928\n"
+"var thread = null\n"
+"\n"
+"func _upnp_setup(server_port):\n"
+" # UPNP queries take some time.\n"
+" var upnp = UPNP.new()\n"
+" var err = upnp.discover()\n"
+"\n"
+" if err != OK:\n"
+" push_error(str(err))\n"
+" emit_signal(\"upnp_completed\", err)\n"
+" return\n"
+"\n"
+" if upnp.get_gateway() and upnp.get_gateway().is_valid_gateway():\n"
+" upnp.add_port_mapping(server_port, server_port, ProjectSettings."
+"get_setting(\"application/config/name\"), \"UDP\")\n"
+" upnp.add_port_mapping(server_port, server_port, ProjectSettings."
+"get_setting(\"application/config/name\"), \"TCP\")\n"
+" emit_signal(\"upnp_completed\", OK)\n"
+"\n"
+"func _ready():\n"
+" thread = Thread.new()\n"
+" thread.start(self, \"_upnp_setup\", SERVER_PORT)\n"
+"\n"
+"func _exit_tree():\n"
+" # Wait for thread finish here to handle game exit while the thread is "
+"running.\n"
+" thread.wait_to_finish()\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:59
+msgid "Adds the given [UPNPDevice] to the list of discovered devices."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:70
+msgid ""
+"Adds a mapping to forward the external [code]port[/code] (between 1 and "
+"65535) on the default gateway (see [method get_gateway]) to the "
+"[code]internal_port[/code] on the local machine for the given protocol "
+"[code]proto[/code] (either [code]TCP[/code] or [code]UDP[/code], with UDP "
+"being the default). If a port mapping for the given port and protocol "
+"combination already exists on that gateway device, this method tries to "
+"overwrite it. If that is not desired, you can retrieve the gateway manually "
+"with [method get_gateway] and call [method add_port_mapping] on it, if any.\n"
+"If [code]internal_port[/code] is [code]0[/code] (the default), the same port "
+"number is used for both the external and the internal port (the [code]port[/"
+"code] value).\n"
+"The description ([code]desc[/code]) is shown in some router UIs and can be "
+"used to point out which application added the mapping. The mapping's lease "
+"duration can be limited by specifying a [code]duration[/code] (in seconds). "
+"However, some routers are incompatible with one or both of these, so use "
+"with caution and add fallback logic in case of errors to retry without them "
+"if in doubt.\n"
+"See [enum UPNPResult] for possible return values."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:79
+msgid "Clears the list of discovered devices."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:87
+msgid ""
+"Deletes the port mapping for the given port and protocol combination on the "
+"default gateway (see [method get_gateway]) if one exists. [code]port[/code] "
+"must be a valid port between 1 and 65535, [code]proto[/code] can be either "
+"[code]TCP[/code] or [code]UDP[/code]. See [enum UPNPResult] for possible "
+"return values."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:96
+msgid ""
+"Discovers local [UPNPDevice]s. Clears the list of previously discovered "
+"devices.\n"
+"Filters for IGD (InternetGatewayDevice) type devices by default, as those "
+"manage port forwarding. [code]timeout[/code] is the time to wait for "
+"responses in milliseconds. [code]ttl[/code] is the time-to-live; only touch "
+"this if you know what you're doing.\n"
+"See [enum UPNPResult] for possible return values."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:105
+msgid "Returns the [UPNPDevice] at the given [code]index[/code]."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:111
+msgid "Returns the number of discovered [UPNPDevice]s."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:117
+msgid ""
+"Returns the default gateway. That is the first discovered [UPNPDevice] that "
+"is also a valid IGD (InternetGatewayDevice)."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:123
+msgid ""
+"Returns the external [IP] address of the default gateway (see [method "
+"get_gateway]) as string. Returns an empty string on error."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:130
+msgid ""
+"Removes the device at [code]index[/code] from the list of discovered devices."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:138
+msgid ""
+"Sets the device at [code]index[/code] from the list of discovered devices to "
+"[code]device[/code]."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:144
+msgid "If [code]true[/code], IPv6 is used for [UPNPDevice] discovery."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:147
+msgid ""
+"If [code]0[/code], the local port to use for discovery is chosen "
+"automatically by the system. If [code]1[/code], discovery will be done from "
+"the source port 1900 (same as destination port). Otherwise, the value will "
+"be used as the port."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:150
+msgid ""
+"Multicast interface to use for discovery. Uses the default multicast "
+"interface if empty."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:155
+msgid "UPNP command or discovery was successful."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:158
+msgid ""
+"Not authorized to use the command on the [UPNPDevice]. May be returned when "
+"the user disabled UPNP on their router."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:161
+msgid ""
+"No port mapping was found for the given port, protocol combination on the "
+"given [UPNPDevice]."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:164
+msgid "Inconsistent parameters."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:167
+msgid ""
+"No such entry in array. May be returned if a given port, protocol "
+"combination is not found on an [UPNPDevice]."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:170
+msgid "The action failed."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:173
+msgid ""
+"The [UPNPDevice] does not allow wildcard values for the source IP address."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:176
+msgid "The [UPNPDevice] does not allow wildcard values for the external port."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:179
+msgid "The [UPNPDevice] does not allow wildcard values for the internal port."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:182
+msgid "The remote host value must be a wildcard."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:185
+msgid "The external port value must be a wildcard."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:188
+msgid ""
+"No port maps are available. May also be returned if port mapping "
+"functionality is not available."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:191
+msgid ""
+"Conflict with other mechanism. May be returned instead of [constant "
+"UPNP_RESULT_CONFLICT_WITH_OTHER_MAPPING] if a port mapping conflicts with an "
+"existing one."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:194
+msgid "Conflict with an existing port mapping."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:197
+msgid "External and internal port values must be the same."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:200
+msgid ""
+"Only permanent leases are supported. Do not use the [code]duration[/code] "
+"parameter when adding port mappings."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:203
+msgid "Invalid gateway."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:206
+msgid "Invalid port."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:209
+msgid "Invalid protocol."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:212
+msgid "Invalid duration."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:215
+msgid "Invalid arguments."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:218
+msgid "Invalid response."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:221
+msgid "Invalid parameter."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:224
+#: modules/upnp/doc_classes/UPNPDevice.xml:69
+msgid "HTTP error."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:227
+msgid "Socket error."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:230
+msgid "Error allocating memory."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:233
+msgid ""
+"No gateway available. You may need to call [method discover] first, or "
+"discovery didn't detect any valid IGDs (InternetGatewayDevices)."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:236
+msgid ""
+"No devices available. You may need to call [method discover] first, or "
+"discovery didn't detect any valid [UPNPDevice]s."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:239
+#: modules/upnp/doc_classes/UPNPDevice.xml:93
+msgid "Unknown error."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNPDevice.xml:4
+msgid "UPNP device."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNPDevice.xml:7
+msgid ""
+"UPNP device. See [UPNP] for UPNP discovery and utility functions. Provides "
+"low-level access to UPNP control commands. Allows to manage port mappings "
+"(port forwarding) and to query network information of the device (like local "
+"and external IP address and status). Note that methods on this class are "
+"synchronous and block the calling thread."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNPDevice.xml:20
+msgid ""
+"Adds a port mapping to forward the given external port on this [UPNPDevice] "
+"for the given protocol to the local machine. See [method UPNP."
+"add_port_mapping]."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNPDevice.xml:28
+msgid ""
+"Deletes the port mapping identified by the given port and protocol "
+"combination on this device. See [method UPNP.delete_port_mapping]."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNPDevice.xml:34
+msgid ""
+"Returns [code]true[/code] if this is a valid IGD (InternetGatewayDevice) "
+"which potentially supports port forwarding."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNPDevice.xml:40
+msgid ""
+"Returns the external IP address of this [UPNPDevice] or an empty string."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNPDevice.xml:46
+msgid "URL to the device description."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNPDevice.xml:49
+msgid "IDG control URL."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNPDevice.xml:52
+msgid ""
+"Address of the local machine in the network connecting it to this "
+"[UPNPDevice]."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNPDevice.xml:55
+msgid "IGD service type."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNPDevice.xml:58
+msgid "IGD status. See [enum IGDStatus]."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNPDevice.xml:61
+msgid "Service type."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNPDevice.xml:66
+msgid "OK."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNPDevice.xml:72
+msgid "Empty HTTP response."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNPDevice.xml:75
+msgid "Returned response contained no URLs."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNPDevice.xml:78
+msgid "Not a valid IGD."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNPDevice.xml:81
+msgid "Disconnected."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNPDevice.xml:84
+msgid "Unknown device."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNPDevice.xml:87
+msgid "Invalid control."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNPDevice.xml:90
+msgid "Memory allocation error."
+msgstr ""
+
+#: doc/classes/Variant.xml:4
+msgid "The most important data type in Godot."
+msgstr ""
+
+#: doc/classes/Variant.xml:7
+msgid ""
+"In computer programming, a Variant class is a class that is designed to "
+"store a variety of other types. Dynamic programming languages like PHP, Lua, "
+"JavaScript and GDScript like to use them to store variables' data on the "
+"backend. With these Variants, properties are able to change value types "
+"freely.\n"
+"[codeblock]\n"
+"var foo = 2 # foo is dynamically an integer\n"
+"foo = \"Now foo is a string!\"\n"
+"foo = Reference.new() # foo is an Object\n"
+"var bar: int = 2 # bar is a statically typed integer.\n"
+"# bar = \"Uh oh! I can't make static variables become a different type!\"\n"
+"[/codeblock]\n"
+"Godot tracks all scripting API variables within Variants. Without even "
+"realizing it, you use Variants all the time. When a particular language "
+"enforces its own rules for keeping data typed, then that language is "
+"applying its own custom logic over the base Variant scripting API.\n"
+"- GDScript automatically wrap values in them. It keeps all data in plain "
+"Variants by default and then optionally enforces custom static typing rules "
+"on variable types.\n"
+"- VisualScript tracks properties inside Variants as well, but it also uses "
+"static typing. The GUI interface enforces that properties have a particular "
+"type that doesn't change over time.\n"
+"- C# is statically typed, but uses the Mono [code]object[/code] type in "
+"place of Godot's Variant class when it needs to represent a dynamic value. "
+"[code]object[/code] is the Mono runtime's equivalent of the same concept.\n"
+"- The statically-typed language NativeScript C++ does not define a built-in "
+"Variant-like class. Godot's GDNative bindings provide their own godot::"
+"Variant class for users; Any point at which the C++ code starts interacting "
+"with the Godot runtime is a place where you might have to start wrapping "
+"data inside Variant objects.\n"
+"The global [method @GDScript.typeof] function returns the enumerated value "
+"of the Variant type stored in the current variable (see [enum Variant."
+"Type]).\n"
+"[codeblock]\n"
+"var foo = 2\n"
+"match typeof(foo):\n"
+" TYPE_NIL:\n"
+" print(\"foo is null\")\n"
+" TYPE_INTEGER:\n"
+" print(\"foo is an integer\")\n"
+" TYPE_OBJECT:\n"
+" # Note that Objects are their own special category.\n"
+" # To get the name of the underlying Object type, you need the "
+"`get_class()` method.\n"
+" print(\"foo is a(n) %s\" % foo.get_class()) # inject the class name "
+"into a formatted string.\n"
+" # Note also that there is not yet any way to get a script's "
+"`class_name` string easily.\n"
+" # To fetch that value, you need to dig deeply into a hidden "
+"ProjectSettings setting: an Array of Dictionaries called "
+"\"_global_script_classes\".\n"
+" # Open your project.godot file to see it up close.\n"
+"[/codeblock]\n"
+"A Variant takes up only 20 bytes and can store almost any engine datatype "
+"inside of it. Variants are rarely used to hold information for long periods "
+"of time. Instead, they are used mainly for communication, editing, "
+"serialization and moving data around.\n"
+"Godot has specifically invested in making its Variant class as flexible as "
+"possible; so much so that it is used for a multitude of operations to "
+"facilitate communication between all of Godot's systems.\n"
+"A Variant:\n"
+"- Can store almost any datatype.\n"
+"- Can perform operations between many variants. GDScript uses Variant as its "
+"atomic/native datatype.\n"
+"- Can be hashed, so it can be compared quickly to other variants.\n"
+"- Can be used to convert safely between datatypes.\n"
+"- Can be used to abstract calling methods and their arguments. Godot exports "
+"all its functions through variants.\n"
+"- Can be used to defer calls or move data between threads.\n"
+"- Can be serialized as binary and stored to disk, or transferred via "
+"network.\n"
+"- Can be serialized to text and use it for printing values and editable "
+"settings.\n"
+"- Can work as an exported property, so the editor can edit it universally.\n"
+"- Can be used for dictionaries, arrays, parsers, etc.\n"
+"[b]Containers (Array and Dictionary):[/b] Both are implemented using "
+"variants. A [Dictionary] can match any datatype used as key to any other "
+"datatype. An [Array] just holds an array of Variants. Of course, a Variant "
+"can also hold a [Dictionary] and an [Array] inside, making it even more "
+"flexible.\n"
+"Modifications to a container will modify all references to it. A [Mutex] "
+"should be created to lock it if multi-threaded access is desired."
+msgstr ""
+
+#: doc/classes/Variant.xml:53
+msgid "https://docs.godotengine.org/en/3.4/development/cpp/variant_class.html"
+msgstr ""
+
+#: doc/classes/VBoxContainer.xml:4
+msgid "Vertical box container."
+msgstr ""
+
+#: doc/classes/VBoxContainer.xml:7
+msgid "Vertical box container. See [BoxContainer]."
+msgstr ""
+
+#: doc/classes/VBoxContainer.xml:18
+msgid "The vertical space between the [VBoxContainer]'s elements."
+msgstr ""
+
+#: doc/classes/Vector2.xml:4
+msgid "Vector used for 2D math."
+msgstr ""
+
+#: doc/classes/Vector2.xml:7
+msgid ""
+"2-element structure that can be used to represent positions in 2D space or "
+"any other pair of numeric values.\n"
+"[b]Note:[/b] In a boolean context, a Vector2 will evaluate to [code]false[/"
+"code] if it's equal to [code]Vector2(0, 0)[/code]. Otherwise, a Vector2 will "
+"always evaluate to [code]true[/code]."
+msgstr ""
+
+#: doc/classes/Vector2.xml:14 doc/classes/Vector3.xml:14
+msgid ""
+"https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab"
+msgstr ""
+
+#: doc/classes/Vector2.xml:24
+msgid ""
+"Constructs a new Vector2 from the given [code]x[/code] and [code]y[/code]."
+msgstr ""
+
+#: doc/classes/Vector2.xml:30 doc/classes/Vector3.xml:31
+msgid ""
+"Returns a new vector with all components in absolute values (i.e. positive)."
+msgstr ""
+
+#: doc/classes/Vector2.xml:36
+msgid ""
+"Returns this vector's angle with respect to the positive X axis, or [code]"
+"(1, 0)[/code] vector, in radians.\n"
+"For example, [code]Vector2.RIGHT.angle()[/code] will return zero, "
+"[code]Vector2.DOWN.angle()[/code] will return [code]PI / 2[/code] (a quarter "
+"turn, or 90 degrees), and [code]Vector2(1, -1).angle()[/code] will return "
+"[code]-PI / 4[/code] (a negative eighth turn, or -45 degrees).\n"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/master/img/"
+"vector2_angle.png]Illustration of the returned angle.[/url]\n"
+"Equivalent to the result of [method @GDScript.atan2] when called with the "
+"vector's [member y] and [member x] as parameters: [code]atan2(y, x)[/code]."
+msgstr ""
+
+#: doc/classes/Vector2.xml:46
+msgid ""
+"Returns the angle to the given vector, in radians.\n"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/master/img/"
+"vector2_angle_to.png]Illustration of the returned angle.[/url]"
+msgstr ""
+
+#: doc/classes/Vector2.xml:54
+msgid ""
+"Returns the angle between the line connecting the two points and the X axis, "
+"in radians.\n"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/master/img/"
+"vector2_angle_to_point.png]Illustration of the returned angle.[/url]"
+msgstr ""
+
+#: doc/classes/Vector2.xml:61
+msgid ""
+"Returns the aspect ratio of this vector, the ratio of [member x] to [member "
+"y]."
+msgstr ""
+
+#: doc/classes/Vector2.xml:68 doc/classes/Vector3.xml:45
+msgid ""
+"Returns the vector \"bounced off\" from a plane defined by the given normal."
+msgstr ""
+
+#: doc/classes/Vector2.xml:74
+msgid ""
+"Returns the vector with all components rounded up (towards positive "
+"infinity)."
+msgstr ""
+
+#: doc/classes/Vector2.xml:81
+msgid ""
+"Returns the vector with a maximum length by limiting its length to "
+"[code]length[/code]."
+msgstr ""
+
+#: doc/classes/Vector2.xml:88
+msgid "Returns the cross product of this vector and [code]with[/code]."
+msgstr ""
+
+#: doc/classes/Vector2.xml:98
+msgid ""
+"Cubically interpolates between this vector and [code]b[/code] using "
+"[code]pre_a[/code] and [code]post_b[/code] as handles, and returns the "
+"result at position [code]weight[/code]. [code]weight[/code] is on the range "
+"of 0.0 to 1.0, representing the amount of interpolation."
+msgstr ""
+
+#: doc/classes/Vector2.xml:105 doc/classes/Vector3.xml:75
+msgid ""
+"Returns the normalized vector pointing from this vector to [code]b[/code]. "
+"This is equivalent to using [code](b - a).normalized()[/code]."
+msgstr ""
+
+#: doc/classes/Vector2.xml:112 doc/classes/Vector3.xml:82
+msgid ""
+"Returns the squared distance between this vector and [code]b[/code].\n"
+"This method runs faster than [method distance_to], so prefer it if you need "
+"to compare vectors or need the squared distance for some formula."
+msgstr ""
+
+#: doc/classes/Vector2.xml:120
+msgid "Returns the distance between this vector and [code]to[/code]."
+msgstr ""
+
+#: doc/classes/Vector2.xml:127
+msgid ""
+"Returns the dot product of this vector and [code]with[/code]. This can be "
+"used to compare the angle between two vectors. For example, this can be used "
+"to determine whether an enemy is facing the player.\n"
+"The dot product will be [code]0[/code] for a straight angle (90 degrees), "
+"greater than 0 for angles narrower than 90 degrees and lower than 0 for "
+"angles wider than 90 degrees.\n"
+"When using unit (normalized) vectors, the result will always be between "
+"[code]-1.0[/code] (180 degree angle) when the vectors are facing opposite "
+"directions, and [code]1.0[/code] (0 degree angle) when the vectors are "
+"aligned.\n"
+"[b]Note:[/b] [code]a.dot(b)[/code] is equivalent to [code]b.dot(a)[/code]."
+msgstr ""
+
+#: doc/classes/Vector2.xml:136
+msgid ""
+"Returns the vector with all components rounded down (towards negative "
+"infinity)."
+msgstr ""
+
+#: doc/classes/Vector2.xml:143 doc/classes/Vector3.xml:119
+msgid ""
+"Returns [code]true[/code] if this vector and [code]v[/code] are "
+"approximately equal, by running [method @GDScript.is_equal_approx] on each "
+"component."
+msgstr ""
+
+#: doc/classes/Vector2.xml:149 doc/classes/Vector3.xml:125
+msgid ""
+"Returns [code]true[/code] if the vector is normalized, [code]false[/code] "
+"otherwise."
+msgstr ""
+
+#: doc/classes/Vector2.xml:155 doc/classes/Vector3.xml:131
+msgid "Returns the length (magnitude) of this vector."
+msgstr ""
+
+#: doc/classes/Vector2.xml:161 doc/classes/Vector3.xml:137
+msgid ""
+"Returns the squared length (squared magnitude) of this vector.\n"
+"This method runs faster than [method length], so prefer it if you need to "
+"compare vectors or need the squared distance for some formula."
+msgstr ""
+
+#: doc/classes/Vector2.xml:170
+msgid ""
+"Returns the result of the linear interpolation between this vector and "
+"[code]to[/code] by amount [code]weight[/code]. [code]weight[/code] is on the "
+"range of 0.0 to 1.0, representing the amount of interpolation."
+msgstr ""
+
+#: doc/classes/Vector2.xml:178
+msgid ""
+"Moves the vector toward [code]to[/code] by the fixed [code]delta[/code] "
+"amount."
+msgstr ""
+
+#: doc/classes/Vector2.xml:184 doc/classes/Vector3.xml:172
+msgid ""
+"Returns the vector scaled to unit length. Equivalent to [code]v / v.length()"
+"[/code]."
+msgstr ""
+
+#: doc/classes/Vector2.xml:191 doc/classes/Vector3.xml:186
+msgid ""
+"Returns a vector composed of the [method @GDScript.fposmod] of this vector's "
+"components and [code]mod[/code]."
+msgstr ""
+
+#: doc/classes/Vector2.xml:198 doc/classes/Vector3.xml:193
+msgid ""
+"Returns a vector composed of the [method @GDScript.fposmod] of this vector's "
+"components and [code]modv[/code]'s components."
+msgstr ""
+
+#: doc/classes/Vector2.xml:205
+msgid "Returns the vector projected onto the vector [code]b[/code]."
+msgstr ""
+
+#: doc/classes/Vector2.xml:212
+msgid "Returns the vector reflected from a plane defined by the given normal."
+msgstr ""
+
+#: doc/classes/Vector2.xml:219
+msgid ""
+"Returns the vector rotated by [code]phi[/code] radians. See also [method "
+"@GDScript.deg2rad]."
+msgstr ""
+
+#: doc/classes/Vector2.xml:225
+msgid ""
+"Returns the vector with all components rounded to the nearest integer, with "
+"halfway cases rounded away from zero."
+msgstr ""
+
+#: doc/classes/Vector2.xml:231
+msgid ""
+"Returns the vector with each component set to one or negative one, depending "
+"on the signs of the components. If a component is zero, it returns positive "
+"one."
+msgstr ""
+
+#: doc/classes/Vector2.xml:239 doc/classes/Vector3.xml:243
+msgid ""
+"Returns the result of spherical linear interpolation between this vector and "
+"[code]to[/code], by amount [code]weight[/code]. [code]weight[/code] is on "
+"the range of 0.0 to 1.0, representing the amount of interpolation.\n"
+"[b]Note:[/b] Both vectors must be normalized."
+msgstr ""
+
+#: doc/classes/Vector2.xml:247 doc/classes/Vector3.xml:251
+msgid "Returns this vector slid along a plane defined by the given normal."
+msgstr ""
+
+#: doc/classes/Vector2.xml:254 doc/classes/Vector3.xml:258
+msgid ""
+"Returns this vector with each component snapped to the nearest multiple of "
+"[code]step[/code]. This can also be used to round to an arbitrary number of "
+"decimals."
+msgstr ""
+
+#: doc/classes/Vector2.xml:260
+msgid ""
+"Returns a perpendicular vector rotated 90 degrees counter-clockwise compared "
+"to the original, with the same length."
+msgstr ""
+
+#: doc/classes/Vector2.xml:266 doc/classes/Vector3.xml:271
+msgid ""
+"The vector's X component. Also accessible by using the index position [code]"
+"[0][/code]."
+msgstr ""
+
+#: doc/classes/Vector2.xml:269 doc/classes/Vector3.xml:274
+msgid ""
+"The vector's Y component. Also accessible by using the index position [code]"
+"[1][/code]."
+msgstr ""
+
+#: doc/classes/Vector2.xml:274
+msgid "Enumerated value for the X axis."
+msgstr ""
+
+#: doc/classes/Vector2.xml:277
+msgid "Enumerated value for the Y axis."
+msgstr ""
+
+#: doc/classes/Vector2.xml:280 doc/classes/Vector3.xml:291
+msgid "Zero vector, a vector with all components set to [code]0[/code]."
+msgstr ""
+
+#: doc/classes/Vector2.xml:283 doc/classes/Vector3.xml:294
+msgid "One vector, a vector with all components set to [code]1[/code]."
+msgstr ""
+
+#: doc/classes/Vector2.xml:286 doc/classes/Vector3.xml:297
+msgid ""
+"Infinity vector, a vector with all components set to [constant @GDScript."
+"INF]."
+msgstr ""
+
+#: doc/classes/Vector2.xml:289
+msgid "Left unit vector. Represents the direction of left."
+msgstr ""
+
+#: doc/classes/Vector2.xml:292
+msgid "Right unit vector. Represents the direction of right."
+msgstr ""
+
+#: doc/classes/Vector2.xml:295
+msgid "Up unit vector. Y is down in 2D, so this vector points -Y."
+msgstr ""
+
+#: doc/classes/Vector2.xml:298
+msgid "Down unit vector. Y is down in 2D, so this vector points +Y."
+msgstr ""
+
+#: doc/classes/Vector3.xml:4
+msgid "Vector used for 3D math."
+msgstr ""
+
+#: doc/classes/Vector3.xml:7
+msgid ""
+"3-element structure that can be used to represent positions in 3D space or "
+"any other pair of numeric values.\n"
+"[b]Note:[/b] In a boolean context, a Vector3 will evaluate to [code]false[/"
+"code] if it's equal to [code]Vector3(0, 0, 0)[/code]. Otherwise, a Vector3 "
+"will always evaluate to [code]true[/code]."
+msgstr ""
+
+#: doc/classes/Vector3.xml:25
+msgid "Returns a Vector3 with the given components."
+msgstr ""
+
+#: doc/classes/Vector3.xml:38
+msgid "Returns the unsigned minimum angle to the given vector, in radians."
+msgstr ""
+
+#: doc/classes/Vector3.xml:51
+msgid ""
+"Returns a new vector with all components rounded up (towards positive "
+"infinity)."
+msgstr ""
+
+#: doc/classes/Vector3.xml:58
+msgid "Returns the cross product of this vector and [code]b[/code]."
+msgstr ""
+
+#: doc/classes/Vector3.xml:68
+msgid ""
+"Performs a cubic interpolation between vectors [code]pre_a[/code], [code]a[/"
+"code], [code]b[/code], [code]post_b[/code] ([code]a[/code] is current), by "
+"the given amount [code]weight[/code]. [code]weight[/code] is on the range of "
+"0.0 to 1.0, representing the amount of interpolation."
+msgstr ""
+
+#: doc/classes/Vector3.xml:90
+msgid "Returns the distance between this vector and [code]b[/code]."
+msgstr ""
+
+#: doc/classes/Vector3.xml:97
+msgid ""
+"Returns the dot product of this vector and [code]b[/code]. This can be used "
+"to compare the angle between two vectors. For example, this can be used to "
+"determine whether an enemy is facing the player.\n"
+"The dot product will be [code]0[/code] for a straight angle (90 degrees), "
+"greater than 0 for angles narrower than 90 degrees and lower than 0 for "
+"angles wider than 90 degrees.\n"
+"When using unit (normalized) vectors, the result will always be between "
+"[code]-1.0[/code] (180 degree angle) when the vectors are facing opposite "
+"directions, and [code]1.0[/code] (0 degree angle) when the vectors are "
+"aligned.\n"
+"[b]Note:[/b] [code]a.dot(b)[/code] is equivalent to [code]b.dot(a)[/code]."
+msgstr ""
+
+#: doc/classes/Vector3.xml:106
+msgid ""
+"Returns a new vector with all components rounded down (towards negative "
+"infinity)."
+msgstr ""
+
+#: doc/classes/Vector3.xml:112
+msgid ""
+"Returns the inverse of the vector. This is the same as [code]Vector3( 1.0 / "
+"v.x, 1.0 / v.y, 1.0 / v.z )[/code]."
+msgstr ""
+
+#: doc/classes/Vector3.xml:146
+msgid ""
+"Returns the result of the linear interpolation between this vector and "
+"[code]to[/code] by amount [code]t[/code]. [code]weight[/code] is on the "
+"range of 0.0 to 1.0, representing the amount of interpolation."
+msgstr ""
+
+#: doc/classes/Vector3.xml:152
+msgid ""
+"Returns the axis of the vector's largest value. See [code]AXIS_*[/code] "
+"constants. If all components are equal, this method returns [constant "
+"AXIS_X]."
+msgstr ""
+
+#: doc/classes/Vector3.xml:158
+msgid ""
+"Returns the axis of the vector's smallest value. See [code]AXIS_*[/code] "
+"constants. If all components are equal, this method returns [constant "
+"AXIS_Z]."
+msgstr ""
+
+#: doc/classes/Vector3.xml:166
+msgid ""
+"Moves this vector toward [code]to[/code] by the fixed [code]delta[/code] "
+"amount."
+msgstr ""
+
+#: doc/classes/Vector3.xml:179
+msgid "Returns the outer product with [code]b[/code]."
+msgstr ""
+
+#: doc/classes/Vector3.xml:200
+msgid "Returns this vector projected onto another vector [code]b[/code]."
+msgstr ""
+
+#: doc/classes/Vector3.xml:207
+msgid "Returns this vector reflected from a plane defined by the given normal."
+msgstr ""
+
+#: doc/classes/Vector3.xml:215
+msgid ""
+"Rotates this vector around a given axis by [code]phi[/code] radians. The "
+"axis must be a normalized vector."
+msgstr ""
+
+#: doc/classes/Vector3.xml:221
+msgid ""
+"Returns this vector with all components rounded to the nearest integer, with "
+"halfway cases rounded away from zero."
+msgstr ""
+
+#: doc/classes/Vector3.xml:227
+msgid ""
+"Returns a vector with each component set to one or negative one, depending "
+"on the signs of this vector's components. If a component is zero, it returns "
+"positive one."
+msgstr ""
+
+#: doc/classes/Vector3.xml:235
+msgid ""
+"Returns the signed angle to the given vector, in radians. The sign of the "
+"angle is positive in a counter-clockwise direction and negative in a "
+"clockwise direction when viewed from the side specified by the [code]axis[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Vector3.xml:264
+msgid ""
+"Returns a diagonal matrix with the vector as main diagonal.\n"
+"This is equivalent to a Basis with no rotation or shearing and this vector's "
+"components set as the scale."
+msgstr ""
+
+#: doc/classes/Vector3.xml:277
+msgid ""
+"The vector's Z component. Also accessible by using the index position [code]"
+"[2][/code]."
+msgstr ""
+
+#: doc/classes/Vector3.xml:282
+msgid ""
+"Enumerated value for the X axis. Returned by [method max_axis] and [method "
+"min_axis]."
+msgstr ""
+
+#: doc/classes/Vector3.xml:285
+msgid ""
+"Enumerated value for the Y axis. Returned by [method max_axis] and [method "
+"min_axis]."
+msgstr ""
+
+#: doc/classes/Vector3.xml:288
+msgid ""
+"Enumerated value for the Z axis. Returned by [method max_axis] and [method "
+"min_axis]."
+msgstr ""
+
+#: doc/classes/Vector3.xml:300
+msgid ""
+"Left unit vector. Represents the local direction of left, and the global "
+"direction of west."
+msgstr ""
+
+#: doc/classes/Vector3.xml:303
+msgid ""
+"Right unit vector. Represents the local direction of right, and the global "
+"direction of east."
+msgstr ""
+
+#: doc/classes/Vector3.xml:306
+msgid "Up unit vector."
+msgstr ""
+
+#: doc/classes/Vector3.xml:309
+msgid "Down unit vector."
+msgstr ""
+
+#: doc/classes/Vector3.xml:312
+msgid ""
+"Forward unit vector. Represents the local direction of forward, and the "
+"global direction of north."
+msgstr ""
+
+#: doc/classes/Vector3.xml:315
+msgid ""
+"Back unit vector. Represents the local direction of back, and the global "
+"direction of south."
+msgstr ""
+
+#: doc/classes/VehicleBody.xml:4
+msgid "Physics body that simulates the behavior of a car."
+msgstr ""
+
+#: doc/classes/VehicleBody.xml:7
+msgid ""
+"This node implements all the physics logic needed to simulate a car. It is "
+"based on the raycast vehicle system commonly found in physics engines. You "
+"will need to add a [CollisionShape] for the main body of your vehicle and "
+"add [VehicleWheel] nodes for the wheels. You should also add a "
+"[MeshInstance] to this node for the 3D model of your car but this model "
+"should not include meshes for the wheels. You should control the vehicle by "
+"using the [member brake], [member engine_force], and [member steering] "
+"properties and not change the position or orientation of this node "
+"directly.\n"
+"[b]Note:[/b] The origin point of your VehicleBody will determine the center "
+"of gravity of your vehicle so it is better to keep this low and move the "
+"[CollisionShape] and [MeshInstance] upwards.\n"
+"[b]Note:[/b] This class has known issues and isn't designed to provide "
+"realistic 3D vehicle physics. If you want advanced vehicle physics, you will "
+"probably have to write your own physics integration using another "
+"[PhysicsBody] class."
+msgstr ""
+
+#: doc/classes/VehicleBody.xml:18
+msgid ""
+"Slows down the vehicle by applying a braking force. The vehicle is only "
+"slowed down if the wheels are in contact with a surface. The force you need "
+"to apply to adequately slow down your vehicle depends on the [member "
+"RigidBody.mass] of the vehicle. For a vehicle with a mass set to 1000, try a "
+"value in the 25 - 30 range for hard braking."
+msgstr ""
+
+#: doc/classes/VehicleBody.xml:21
+msgid ""
+"Accelerates the vehicle by applying an engine force. The vehicle is only "
+"speed up if the wheels that have [member VehicleWheel.use_as_traction] set "
+"to [code]true[/code] and are in contact with a surface. The [member "
+"RigidBody.mass] of the vehicle has an effect on the acceleration of the "
+"vehicle. For a vehicle with a mass set to 1000, try a value in the 25 - 50 "
+"range for acceleration.\n"
+"[b]Note:[/b] The simulation does not take the effect of gears into account, "
+"you will need to add logic for this if you wish to simulate gears.\n"
+"A negative value will result in the vehicle reversing."
+msgstr ""
+
+#: doc/classes/VehicleBody.xml:27
+msgid ""
+"The steering angle for the vehicle. Setting this to a non-zero value will "
+"result in the vehicle turning when it's moving. Wheels that have [member "
+"VehicleWheel.use_as_steering] set to [code]true[/code] will automatically be "
+"rotated."
+msgstr ""
+
+#: doc/classes/VehicleWheel.xml:4
+msgid "Physics object that simulates the behavior of a wheel."
+msgstr ""
+
+#: doc/classes/VehicleWheel.xml:7
+msgid ""
+"This node needs to be used as a child node of [VehicleBody] and simulates "
+"the behavior of one of its wheels. This node also acts as a collider to "
+"detect if the wheel is touching a surface.\n"
+"[b]Note:[/b] This class has known issues and isn't designed to provide "
+"realistic 3D vehicle physics. If you want advanced vehicle physics, you will "
+"probably have to write your own physics integration using another "
+"[PhysicsBody] class."
+msgstr ""
+
+#: doc/classes/VehicleWheel.xml:17
+msgid "Returns the rotational speed of the wheel in revolutions per minute."
+msgstr ""
+
+#: doc/classes/VehicleWheel.xml:23
+msgid ""
+"Returns a value between 0.0 and 1.0 that indicates whether this wheel is "
+"skidding. 0.0 is skidding (the wheel has lost grip, e.g. icy terrain), 1.0 "
+"means not skidding (the wheel has full grip, e.g. dry asphalt road)."
+msgstr ""
+
+#: doc/classes/VehicleWheel.xml:29
+msgid "Returns [code]true[/code] if this wheel is in contact with a surface."
+msgstr ""
+
+#: doc/classes/VehicleWheel.xml:35
+msgid ""
+"Slows down the wheel by applying a braking force. The wheel is only slowed "
+"down if it is in contact with a surface. The force you need to apply to "
+"adequately slow down your vehicle depends on the [member RigidBody.mass] of "
+"the vehicle. For a vehicle with a mass set to 1000, try a value in the 25 - "
+"30 range for hard braking."
+msgstr ""
+
+#: doc/classes/VehicleWheel.xml:38
+msgid ""
+"The damping applied to the spring when the spring is being compressed. This "
+"value should be between 0.0 (no damping) and 1.0. A value of 0.0 means the "
+"car will keep bouncing as the spring keeps its energy. A good value for this "
+"is around 0.3 for a normal car, 0.5 for a race car."
+msgstr ""
+
+#: doc/classes/VehicleWheel.xml:41
+msgid ""
+"The damping applied to the spring when relaxing. This value should be "
+"between 0.0 (no damping) and 1.0. This value should always be slightly "
+"higher than the [member damping_compression] property. For a [member "
+"damping_compression] value of 0.3, try a relaxation value of 0.5."
+msgstr ""
+
+#: doc/classes/VehicleWheel.xml:44
+msgid ""
+"Accelerates the wheel by applying an engine force. The wheel is only speed "
+"up if it is in contact with a surface. The [member RigidBody.mass] of the "
+"vehicle has an effect on the acceleration of the vehicle. For a vehicle with "
+"a mass set to 1000, try a value in the 25 - 50 range for acceleration.\n"
+"[b]Note:[/b] The simulation does not take the effect of gears into account, "
+"you will need to add logic for this if you wish to simulate gears.\n"
+"A negative value will result in the wheel reversing."
+msgstr ""
+
+#: doc/classes/VehicleWheel.xml:49
+msgid ""
+"The steering angle for the wheel. Setting this to a non-zero value will "
+"result in the vehicle turning when it's moving."
+msgstr ""
+
+#: doc/classes/VehicleWheel.xml:52
+msgid ""
+"The maximum force the spring can resist. This value should be higher than a "
+"quarter of the [member RigidBody.mass] of the [VehicleBody] or the spring "
+"will not carry the weight of the vehicle. Good results are often obtained by "
+"a value that is about 3× to 4× this number."
+msgstr ""
+
+#: doc/classes/VehicleWheel.xml:55
+msgid ""
+"This value defines the stiffness of the suspension. Use a value lower than "
+"50 for an off-road car, a value between 50 and 100 for a race car and try "
+"something around 200 for something like a Formula 1 car."
+msgstr ""
+
+#: doc/classes/VehicleWheel.xml:58
+msgid ""
+"This is the distance the suspension can travel. As Godot units are "
+"equivalent to meters, keep this setting relatively low. Try a value between "
+"0.1 and 0.3 depending on the type of car."
+msgstr ""
+
+#: doc/classes/VehicleWheel.xml:61
+msgid ""
+"If [code]true[/code], this wheel will be turned when the car steers. This "
+"value is used in conjunction with [member VehicleBody.steering] and ignored "
+"if you are using the per-wheel [member steering] value instead."
+msgstr ""
+
+#: doc/classes/VehicleWheel.xml:64
+msgid ""
+"If [code]true[/code], this wheel transfers engine force to the ground to "
+"propel the vehicle forward. This value is used in conjunction with [member "
+"VehicleBody.engine_force] and ignored if you are using the per-wheel [member "
+"engine_force] value instead."
+msgstr ""
+
+#: doc/classes/VehicleWheel.xml:67
+msgid ""
+"This determines how much grip this wheel has. It is combined with the "
+"friction setting of the surface the wheel is in contact with. 0.0 means no "
+"grip, 1.0 is normal grip. For a drift car setup, try setting the grip of the "
+"rear wheels slightly lower than the front wheels, or use a lower value to "
+"simulate tire wear.\n"
+"It's best to set this to 1.0 when starting out."
+msgstr ""
+
+#: doc/classes/VehicleWheel.xml:71
+msgid "The radius of the wheel in meters."
+msgstr ""
+
+#: doc/classes/VehicleWheel.xml:74
+msgid ""
+"This is the distance in meters the wheel is lowered from its origin point. "
+"Don't set this to 0.0 and move the wheel into position, instead move the "
+"origin point of your wheel (the gizmo in Godot) to the position the wheel "
+"will take when bottoming out, then use the rest length to move the wheel "
+"down to the position it should be in when the car is in rest."
+msgstr ""
+
+#: doc/classes/VehicleWheel.xml:77
+msgid ""
+"This value affects the roll of your vehicle. If set to 1.0 for all wheels, "
+"your vehicle will be prone to rolling over, while a value of 0.0 will resist "
+"body roll."
+msgstr ""
+
+#: doc/classes/VideoPlayer.xml:4
+msgid "Control for playing video streams."
+msgstr ""
+
+#: doc/classes/VideoPlayer.xml:7
+msgid ""
+"Control node for playing video streams using [VideoStream] resources.\n"
+"Supported video formats are [url=https://www.webmproject.org/]WebM[/url] "
+"([code].webm[/code], [VideoStreamWebm]), [url=https://www.theora.org/]Ogg "
+"Theora[/url] ([code].ogv[/code], [VideoStreamTheora]), and any format "
+"exposed via a GDNative plugin using [VideoStreamGDNative].\n"
+"[b]Note:[/b] Due to a bug, VideoPlayer does not support localization "
+"remapping yet.\n"
+"[b]Warning:[/b] On HTML5, video playback [i]will[/i] perform poorly due to "
+"missing architecture-specific assembly optimizations, especially for VP8/VP9."
+msgstr ""
+
+#: doc/classes/VideoPlayer.xml:18
+msgid ""
+"Returns the video stream's name, or [code]\"<No Stream>\"[/code] if no video "
+"stream is assigned."
+msgstr ""
+
+#: doc/classes/VideoPlayer.xml:24
+msgid "Returns the current frame as a [Texture]."
+msgstr ""
+
+#: doc/classes/VideoPlayer.xml:30
+msgid ""
+"Returns [code]true[/code] if the video is playing.\n"
+"[b]Note:[/b] The video is still considered playing if paused during playback."
+msgstr ""
+
+#: doc/classes/VideoPlayer.xml:37
+msgid ""
+"Starts the video playback from the beginning. If the video is paused, this "
+"will not unpause the video."
+msgstr ""
+
+#: doc/classes/VideoPlayer.xml:43
+msgid ""
+"Stops the video playback and sets the stream position to 0.\n"
+"[b]Note:[/b] Although the stream position will be set to 0, the first frame "
+"of the video stream won't become the current frame."
+msgstr ""
+
+#: doc/classes/VideoPlayer.xml:50
+msgid "The embedded audio track to play."
+msgstr ""
+
+#: doc/classes/VideoPlayer.xml:53
+msgid "If [code]true[/code], playback starts when the scene loads."
+msgstr ""
+
+#: doc/classes/VideoPlayer.xml:56
+msgid "Amount of time in milliseconds to store in buffer while playing."
+msgstr ""
+
+#: doc/classes/VideoPlayer.xml:59
+msgid "Audio bus to use for sound playback."
+msgstr ""
+
+#: doc/classes/VideoPlayer.xml:62
+msgid ""
+"If [code]true[/code], the video scales to the control size. Otherwise, the "
+"control minimum size will be automatically adjusted to match the video "
+"stream's dimensions."
+msgstr ""
+
+#: doc/classes/VideoPlayer.xml:65
+msgid "If [code]true[/code], the video is paused."
+msgstr ""
+
+#: doc/classes/VideoPlayer.xml:68
+msgid "The assigned video stream. See description for supported formats."
+msgstr ""
+
+#: doc/classes/VideoPlayer.xml:71
+msgid ""
+"The current position of the stream, in seconds.\n"
+"[b]Note:[/b] Changing this value won't have any effect as seeking is not "
+"implemented yet, except in video formats implemented by a GDNative add-on."
+msgstr ""
+
+#: doc/classes/VideoPlayer.xml:75
+msgid "Audio volume as a linear value."
+msgstr ""
+
+#: doc/classes/VideoPlayer.xml:78
+msgid "Audio volume in dB."
+msgstr ""
+
+#: doc/classes/VideoPlayer.xml:84
+msgid "Emitted when playback is finished."
+msgstr ""
+
+#: doc/classes/VideoStream.xml:4
+msgid "Base resource for video streams."
+msgstr ""
+
+#: doc/classes/VideoStream.xml:7
+msgid ""
+"Base resource type for all video streams. Classes that derive from "
+"[VideoStream] can all be used as resource types to play back videos in "
+"[VideoPlayer]."
+msgstr ""
+
+#: modules/gdnative/doc_classes/VideoStreamGDNative.xml:4
+msgid "[VideoStream] resource for for video formats implemented via GDNative."
+msgstr ""
+
+#: modules/gdnative/doc_classes/VideoStreamGDNative.xml:7
+msgid ""
+"[VideoStream] resource for for video formats implemented via GDNative.\n"
+"It can be used via [url=https://github.com/KidRigger/godot-"
+"videodecoder]godot-videodecoder[/url] which uses the [url=https://ffmpeg."
+"org]FFmpeg[/url] library."
+msgstr ""
+
+#: modules/gdnative/doc_classes/VideoStreamGDNative.xml:16
+msgid "Returns the video file handled by this [VideoStreamGDNative]."
+msgstr ""
+
+#: modules/gdnative/doc_classes/VideoStreamGDNative.xml:23
+msgid ""
+"Sets the video file that this [VideoStreamGDNative] resource handles. The "
+"supported extensions depend on the GDNative plugins used to expose video "
+"formats."
+msgstr ""
+
+#: modules/theora/doc_classes/VideoStreamTheora.xml:4
+msgid "[VideoStream] resource for Ogg Theora videos."
+msgstr ""
+
+#: modules/theora/doc_classes/VideoStreamTheora.xml:7
+msgid ""
+"[VideoStream] resource handling the [url=https://www.theora.org/]Ogg Theora[/"
+"url] video format with [code].ogv[/code] extension. The Theora codec is less "
+"efficient than [VideoStreamWebm]'s VP8 and VP9, but it requires less CPU "
+"resources to decode. The Theora codec is decoded on the CPU.\n"
+"[b]Note:[/b] While Ogg Theora videos can also have an [code].ogg[/code] "
+"extension, you will have to rename the extension to [code].ogv[/code] to use "
+"those videos within Godot."
+msgstr ""
+
+#: modules/theora/doc_classes/VideoStreamTheora.xml:16
+msgid "Returns the Ogg Theora video file handled by this [VideoStreamTheora]."
+msgstr ""
+
+#: modules/theora/doc_classes/VideoStreamTheora.xml:23
+msgid ""
+"Sets the Ogg Theora video file that this [VideoStreamTheora] resource "
+"handles. The [code]file[/code] name should have the [code].ogv[/code] "
+"extension."
+msgstr ""
+
+#: modules/webm/doc_classes/VideoStreamWebm.xml:4
+msgid "[VideoStream] resource for WebM videos."
+msgstr ""
+
+#: modules/webm/doc_classes/VideoStreamWebm.xml:7
+msgid ""
+"[VideoStream] resource handling the [url=https://www.webmproject.org/]WebM[/"
+"url] video format with [code].webm[/code] extension. Both the VP8 and VP9 "
+"codecs are supported. The VP8 and VP9 codecs are more efficient than "
+"[VideoStreamTheora], but they require more CPU resources to decode "
+"(especially VP9). Both the VP8 and VP9 codecs are decoded on the CPU.\n"
+"[b]Note:[/b] Alpha channel (also known as transparency) is not supported. "
+"The video will always appear to have a black background, even if it "
+"originally contains an alpha channel.\n"
+"[b]Note:[/b] There are known bugs and performance issues with WebM video "
+"playback in Godot. If you run into problems, try using the Ogg Theora format "
+"instead: [VideoStreamTheora]"
+msgstr ""
+
+#: modules/webm/doc_classes/VideoStreamWebm.xml:17
+msgid "Returns the WebM video file handled by this [VideoStreamWebm]."
+msgstr ""
+
+#: modules/webm/doc_classes/VideoStreamWebm.xml:24
+msgid ""
+"Sets the WebM video file that this [VideoStreamWebm] resource handles. The "
+"[code]file[/code] name should have the [code].webm[/code] extension."
+msgstr ""
+
+#: doc/classes/Viewport.xml:4
+msgid "Creates a sub-view into the screen."
+msgstr ""
+
+#: doc/classes/Viewport.xml:7
+msgid ""
+"A Viewport creates a different view into the screen, or a sub-view inside "
+"another viewport. Children 2D Nodes will display on it, and children Camera "
+"3D nodes will render on it too.\n"
+"Optionally, a viewport can have its own 2D or 3D world, so they don't share "
+"what they draw with other viewports.\n"
+"If a viewport is a child of a [ViewportContainer], it will automatically "
+"take up its size, otherwise it must be set manually.\n"
+"Viewports can also choose to be audio listeners, so they generate positional "
+"audio depending on a 2D or 3D camera child of it.\n"
+"Also, viewports can be assigned to different screens in case the devices "
+"have multiple screens.\n"
+"Finally, viewports can also behave as render targets, in which case they "
+"will not be visible unless the associated texture is used to draw."
+msgstr ""
+
+#: doc/classes/Viewport.xml:16
+msgid "https://docs.godotengine.org/en/3.4/tutorials/viewports/index.html"
+msgstr ""
+
+#: doc/classes/Viewport.xml:18 doc/classes/ViewportTexture.xml:12
+msgid "https://godotengine.org/asset-library/asset/128"
+msgstr ""
+
+#: doc/classes/Viewport.xml:20
+msgid "https://godotengine.org/asset-library/asset/130"
+msgstr ""
+
+#: doc/classes/Viewport.xml:21
+msgid "https://godotengine.org/asset-library/asset/541"
+msgstr ""
+
+#: doc/classes/Viewport.xml:22 doc/classes/ViewportTexture.xml:14
+msgid "https://godotengine.org/asset-library/asset/586"
+msgstr ""
+
+#: doc/classes/Viewport.xml:28
+msgid ""
+"Returns the 3D world of the viewport, or if none the world of the parent "
+"viewport."
+msgstr ""
+
+#: doc/classes/Viewport.xml:34
+msgid "Returns the 2D world of the viewport."
+msgstr ""
+
+#: doc/classes/Viewport.xml:40
+msgid "Returns the active 3D camera."
+msgstr ""
+
+#: doc/classes/Viewport.xml:46
+msgid "Returns the total transform of the viewport."
+msgstr ""
+
+#: doc/classes/Viewport.xml:52
+msgid "Returns the topmost modal in the stack."
+msgstr ""
+
+#: doc/classes/Viewport.xml:58
+msgid "Returns the mouse position relative to the viewport."
+msgstr ""
+
+#: doc/classes/Viewport.xml:65
+msgid "Returns information about the viewport from the rendering pipeline."
+msgstr ""
+
+#: doc/classes/Viewport.xml:72
+msgid "Returns the [enum ShadowAtlasQuadrantSubdiv] of the specified quadrant."
+msgstr ""
+
+#: doc/classes/Viewport.xml:78
+msgid "Returns the size override set with [method set_size_override]."
+msgstr ""
+
+#: doc/classes/Viewport.xml:84
+msgid ""
+"Returns the viewport's texture.\n"
+"[b]Note:[/b] Due to the way OpenGL works, the resulting [ViewportTexture] is "
+"flipped vertically. You can use [method Image.flip_y] on the result of "
+"[method Texture.get_data] to flip it back, for example:\n"
+"[codeblock]\n"
+"var img = get_viewport().get_texture().get_data()\n"
+"img.flip_y()\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Viewport.xml:95
+msgid "Returns the viewport's RID from the [VisualServer]."
+msgstr ""
+
+#: doc/classes/Viewport.xml:101
+msgid "Returns the visible rectangle in global screen coordinates."
+msgstr ""
+
+#: doc/classes/Viewport.xml:107
+msgid ""
+"Returns the drag data from the GUI, that was previously returned by [method "
+"Control.get_drag_data]."
+msgstr ""
+
+#: doc/classes/Viewport.xml:113
+msgid "Returns [code]true[/code] if there are visible modals on-screen."
+msgstr ""
+
+#: doc/classes/Viewport.xml:119
+msgid ""
+"Returns [code]true[/code] if the viewport is currently performing a drag "
+"operation."
+msgstr ""
+
+#: doc/classes/Viewport.xml:136
+msgid ""
+"Returns [code]true[/code] if the size override is enabled. See [method "
+"set_size_override]."
+msgstr ""
+
+#: doc/classes/Viewport.xml:143
+msgid ""
+"Attaches this [Viewport] to the root [Viewport] with the specified "
+"rectangle. This bypasses the need for another node to display this "
+"[Viewport] but makes you responsible for updating the position of this "
+"[Viewport] manually."
+msgstr ""
+
+#: doc/classes/Viewport.xml:149
+msgid "Stops the input from propagating further down the [SceneTree]."
+msgstr ""
+
+#: doc/classes/Viewport.xml:157
+msgid ""
+"Sets the number of subdivisions to use in the specified quadrant. A higher "
+"number of subdivisions allows you to have more shadows in the scene at once, "
+"but reduces the quality of the shadows. A good practice is to have quadrants "
+"with a varying number of subdivisions and to have as few subdivisions as "
+"possible."
+msgstr ""
+
+#: doc/classes/Viewport.xml:166
+msgid ""
+"Sets the size override of the viewport. If the [code]enable[/code] parameter "
+"is [code]true[/code] the override is used, otherwise it uses the default "
+"size. If the size parameter is [code](-1, -1)[/code], it won't update the "
+"size."
+msgstr ""
+
+#: doc/classes/Viewport.xml:178
+msgid "Forces update of the 2D and 3D worlds."
+msgstr ""
+
+#: doc/classes/Viewport.xml:185
+msgid "Warps the mouse to a position relative to the viewport."
+msgstr ""
+
+#: doc/classes/Viewport.xml:191
+msgid "If [code]true[/code], the viewport will be used in AR/VR process."
+msgstr ""
+
+#: doc/classes/Viewport.xml:194
+msgid "If [code]true[/code], the viewport will process 2D audio streams."
+msgstr ""
+
+#: doc/classes/Viewport.xml:197
+msgid "If [code]true[/code], the viewport will process 3D audio streams."
+msgstr ""
+
+#: doc/classes/Viewport.xml:200
+msgid ""
+"The canvas transform of the viewport, useful for changing the on-screen "
+"positions of all child [CanvasItem]s. This is relative to the global canvas "
+"transform of the viewport."
+msgstr ""
+
+#: doc/classes/Viewport.xml:203
+msgid ""
+"If [code]true[/code], uses a fast post-processing filter to make banding "
+"significantly less visible. In some cases, debanding may introduce a "
+"slightly noticeable dithering pattern. It's recommended to enable debanding "
+"only when actually needed since the dithering pattern will make lossless-"
+"compressed screenshots larger.\n"
+"[b]Note:[/b] Only available on the GLES3 backend. [member hdr] must also be "
+"[code]true[/code] for debanding to be effective."
+msgstr ""
+
+#: doc/classes/Viewport.xml:207
+msgid "The overlay mode for test rendered geometry in debug purposes."
+msgstr ""
+
+#: doc/classes/Viewport.xml:210
+msgid ""
+"If [code]true[/code], the viewport will disable 3D rendering. For actual "
+"disabling use [code]usage[/code]."
+msgstr ""
+
+#: doc/classes/Viewport.xml:213
+msgid ""
+"Enables fast approximate antialiasing. FXAA is a popular screen-space "
+"antialiasing method, which is fast but will make the image look blurry, "
+"especially at lower resolutions. It can still work relatively well at large "
+"resolutions such as 1440p and 4K. Some of the lost sharpness can be "
+"recovered by enabling contrast-adaptive sharpening (see [member "
+"sharpen_intensity])."
+msgstr ""
+
+#: doc/classes/Viewport.xml:216
+msgid ""
+"The global canvas transform of the viewport. The canvas transform is "
+"relative to this."
+msgstr ""
+
+#: doc/classes/Viewport.xml:219
+msgid "If [code]true[/code], the viewport will not receive input events."
+msgstr ""
+
+#: doc/classes/Viewport.xml:222
+msgid ""
+"If [code]true[/code], the GUI controls on the viewport will lay pixel "
+"perfectly."
+msgstr ""
+
+#: doc/classes/Viewport.xml:227
+msgid ""
+"If [code]true[/code], the viewport rendering will receive benefits from High "
+"Dynamic Range algorithm. High Dynamic Range allows the viewport to receive "
+"values that are outside the 0-1 range. In Godot HDR uses 16 bits, meaning it "
+"does not store the full range of a floating point number.\n"
+"[b]Note:[/b] Requires [member usage] to be set to [constant USAGE_3D] or "
+"[constant USAGE_3D_NO_EFFECTS], since HDR is not supported for 2D."
+msgstr ""
+
+#: doc/classes/Viewport.xml:231
+msgid ""
+"If [code]true[/code], the result after 3D rendering will not have a linear "
+"to sRGB color conversion applied. This is important when the viewport is "
+"used as a render target where the result is used as a texture on a 3D object "
+"rendered in another viewport. It is also important if the viewport is used "
+"to create data that is not color based (noise, heightmaps, pickmaps, etc.). "
+"Do not enable this when the viewport is used as a texture on a 2D object or "
+"if the viewport is your final output. For the GLES2 driver this will convert "
+"the sRGB output to linear, this should only be used for VR plugins that "
+"require input in linear color space!"
+msgstr ""
+
+#: doc/classes/Viewport.xml:234
+msgid ""
+"The multisample anti-aliasing mode. A higher number results in smoother "
+"edges at the cost of significantly worse performance. A value of 4 is best "
+"unless targeting very high-end systems."
+msgstr ""
+
+#: doc/classes/Viewport.xml:237
+msgid ""
+"If [code]true[/code], the viewport will use [World] defined in [code]world[/"
+"code] property."
+msgstr ""
+
+#: doc/classes/Viewport.xml:240
+msgid ""
+"If [code]true[/code], the objects rendered by viewport become subjects of "
+"mouse picking process."
+msgstr ""
+
+#: doc/classes/Viewport.xml:243
+msgid ""
+"If [code]true[/code], renders the Viewport directly to the screen instead of "
+"to the root viewport. Only available in GLES2. This is a low-level "
+"optimization and should not be used in most cases. If used, reading from the "
+"Viewport or from [code]SCREEN_TEXTURE[/code] becomes unavailable. For more "
+"information see [method VisualServer.viewport_set_render_direct_to_screen]."
+msgstr ""
+
+#: doc/classes/Viewport.xml:246
+msgid ""
+"The clear mode when viewport used as a render target.\n"
+"[b]Note:[/b] This property is intended for 2D usage."
+msgstr ""
+
+#: doc/classes/Viewport.xml:250
+msgid "The update mode when viewport used as a render target."
+msgstr ""
+
+#: doc/classes/Viewport.xml:253
+msgid ""
+"If [code]true[/code], the result of rendering will be flipped vertically."
+msgstr ""
+
+#: doc/classes/Viewport.xml:256
+msgid "The subdivision amount of the first quadrant on the shadow atlas."
+msgstr ""
+
+#: doc/classes/Viewport.xml:259
+msgid "The subdivision amount of the second quadrant on the shadow atlas."
+msgstr ""
+
+#: doc/classes/Viewport.xml:262
+msgid "The subdivision amount of the third quadrant on the shadow atlas."
+msgstr ""
+
+#: doc/classes/Viewport.xml:265
+msgid "The subdivision amount of the fourth quadrant on the shadow atlas."
+msgstr ""
+
+#: doc/classes/Viewport.xml:268
+msgid ""
+"The shadow atlas' resolution (used for omni and spot lights). The value will "
+"be rounded up to the nearest power of 2.\n"
+"[b]Note:[/b] If this is set to 0, shadows won't be visible. Since user-"
+"created viewports default to a value of 0, this value must be set above 0 "
+"manually."
+msgstr ""
+
+#: doc/classes/Viewport.xml:272
+msgid ""
+"If set to a value greater than [code]0.0[/code], contrast-adaptive "
+"sharpening will be applied to the 3D viewport. This has a low performance "
+"cost and can be used to recover some of the sharpness lost from using FXAA. "
+"Values around [code]0.5[/code] generally give the best results. See also "
+"[member fxaa]."
+msgstr ""
+
+#: doc/classes/Viewport.xml:275
+msgid ""
+"The width and height of viewport. Must be set to a value greater than or "
+"equal to 2 pixels on both dimensions. Otherwise, nothing will be displayed."
+msgstr ""
+
+#: doc/classes/Viewport.xml:278
+msgid "If [code]true[/code], the size override affects stretch as well."
+msgstr ""
+
+#: doc/classes/Viewport.xml:281
+msgid ""
+"If [code]true[/code], the viewport should render its background as "
+"transparent."
+msgstr ""
+
+#: doc/classes/Viewport.xml:284
+msgid "The rendering mode of viewport."
+msgstr ""
+
+#: doc/classes/Viewport.xml:287
+msgid "The custom [World] which can be used as 3D environment source."
+msgstr ""
+
+#: doc/classes/Viewport.xml:290
+msgid "The custom [World2D] which can be used as 2D environment source."
+msgstr ""
+
+#: doc/classes/Viewport.xml:297
+msgid "Emitted when a Control node grabs keyboard focus."
+msgstr ""
+
+#: doc/classes/Viewport.xml:302
+msgid ""
+"Emitted when the size of the viewport is changed, whether by [method "
+"set_size_override], resize of window, or some other means."
+msgstr ""
+
+#: doc/classes/Viewport.xml:308
+msgid "Do not update the render target."
+msgstr ""
+
+#: doc/classes/Viewport.xml:311
+msgid ""
+"Update the render target once, then switch to [constant UPDATE_DISABLED]."
+msgstr ""
+
+#: doc/classes/Viewport.xml:314
+msgid ""
+"Update the render target only when it is visible. This is the default value."
+msgstr ""
+
+#: doc/classes/Viewport.xml:317
+msgid "Always update the render target."
+msgstr ""
+
+#: doc/classes/Viewport.xml:320
+msgid "This quadrant will not be used."
+msgstr ""
+
+#: doc/classes/Viewport.xml:323
+msgid "This quadrant will only be used by one shadow map."
+msgstr ""
+
+#: doc/classes/Viewport.xml:326
+msgid "This quadrant will be split in 4 and used by up to 4 shadow maps."
+msgstr ""
+
+#: doc/classes/Viewport.xml:329
+msgid "This quadrant will be split 16 ways and used by up to 16 shadow maps."
+msgstr ""
+
+#: doc/classes/Viewport.xml:332
+msgid "This quadrant will be split 64 ways and used by up to 64 shadow maps."
+msgstr ""
+
+#: doc/classes/Viewport.xml:335
+msgid ""
+"This quadrant will be split 256 ways and used by up to 256 shadow maps. "
+"Unless the [member shadow_atlas_size] is very high, the shadows in this "
+"quadrant will be very low resolution."
+msgstr ""
+
+#: doc/classes/Viewport.xml:338
+msgid ""
+"This quadrant will be split 1024 ways and used by up to 1024 shadow maps. "
+"Unless the [member shadow_atlas_size] is very high, the shadows in this "
+"quadrant will be very low resolution."
+msgstr ""
+
+#: doc/classes/Viewport.xml:341
+msgid "Represents the size of the [enum ShadowAtlasQuadrantSubdiv] enum."
+msgstr ""
+
+#: doc/classes/Viewport.xml:344
+msgid "Amount of objects in frame."
+msgstr ""
+
+#: doc/classes/Viewport.xml:347
+msgid "Amount of vertices in frame."
+msgstr ""
+
+#: doc/classes/Viewport.xml:350
+msgid "Amount of material changes in frame."
+msgstr ""
+
+#: doc/classes/Viewport.xml:353
+msgid "Amount of shader changes in frame."
+msgstr ""
+
+#: doc/classes/Viewport.xml:356
+msgid "Amount of surface changes in frame."
+msgstr ""
+
+#: doc/classes/Viewport.xml:359 doc/classes/Viewport.xml:365
+msgid "Amount of draw calls in frame."
+msgstr ""
+
+#: doc/classes/Viewport.xml:362
+msgid "Amount of items or joined items in frame."
+msgstr ""
+
+#: doc/classes/Viewport.xml:368
+msgid "Represents the size of the [enum RenderInfo] enum."
+msgstr ""
+
+#: doc/classes/Viewport.xml:371
+msgid "Objects are displayed normally."
+msgstr ""
+
+#: doc/classes/Viewport.xml:374
+msgid "Objects are displayed without light information."
+msgstr ""
+
+#: doc/classes/Viewport.xml:377
+msgid ""
+"Objected are displayed semi-transparent with additive blending so you can "
+"see where they intersect."
+msgstr ""
+
+#: doc/classes/Viewport.xml:380
+msgid "Objects are displayed in wireframe style."
+msgstr ""
+
+#: doc/classes/Viewport.xml:383
+msgid "Multisample anti-aliasing mode disabled. This is the default value."
+msgstr ""
+
+#: doc/classes/Viewport.xml:386
+msgid "Use 2x Multisample Antialiasing."
+msgstr ""
+
+#: doc/classes/Viewport.xml:389
+msgid "Use 4x Multisample Antialiasing."
+msgstr ""
+
+#: doc/classes/Viewport.xml:392
+msgid ""
+"Use 8x Multisample Antialiasing. Likely unsupported on low-end and older "
+"hardware."
+msgstr ""
+
+#: doc/classes/Viewport.xml:395
+msgid ""
+"Use 16x Multisample Antialiasing. Likely unsupported on medium and low-end "
+"hardware."
+msgstr ""
+
+#: doc/classes/Viewport.xml:398
+msgid ""
+"Allocates all buffers needed for drawing 2D scenes. This takes less VRAM "
+"than the 3D usage modes. Note that 3D rendering effects such as glow and HDR "
+"are not available when using this mode."
+msgstr ""
+
+#: doc/classes/Viewport.xml:401
+msgid ""
+"Allocates buffers needed for 2D scenes without allocating a buffer for "
+"screen copy. Accordingly, you cannot read from the screen. Of the [enum "
+"Usage] types, this requires the least VRAM. Note that 3D rendering effects "
+"such as glow and HDR are not available when using this mode."
+msgstr ""
+
+#: doc/classes/Viewport.xml:404
+msgid ""
+"Allocates full buffers for drawing 3D scenes and all 3D effects including "
+"buffers needed for 2D scenes and effects."
+msgstr ""
+
+#: doc/classes/Viewport.xml:407
+msgid ""
+"Allocates buffers needed for drawing 3D scenes. But does not allocate "
+"buffers needed for reading from the screen and post-processing effects. "
+"Saves some VRAM."
+msgstr ""
+
+#: doc/classes/Viewport.xml:410
+msgid "Always clear the render target before drawing."
+msgstr ""
+
+#: doc/classes/Viewport.xml:413
+msgid "Never clear the render target."
+msgstr ""
+
+#: doc/classes/Viewport.xml:416
+msgid ""
+"Clear the render target next frame, then switch to [constant "
+"CLEAR_MODE_NEVER]."
+msgstr ""
+
+#: doc/classes/ViewportContainer.xml:4
+msgid "Control for holding [Viewport]s."
+msgstr ""
+
+#: doc/classes/ViewportContainer.xml:7
+msgid ""
+"A [Container] node that holds a [Viewport], automatically setting its size.\n"
+"[b]Note:[/b] Changing a ViewportContainer's [member Control.rect_scale] will "
+"cause its contents to appear distorted. To change its visual size without "
+"causing distortion, adjust the node's margins instead (if it's not already "
+"in a container)."
+msgstr ""
+
+#: doc/classes/ViewportContainer.xml:16
+msgid ""
+"If [code]true[/code], the viewport will be scaled to the control's size."
+msgstr ""
+
+#: doc/classes/ViewportContainer.xml:19
+msgid ""
+"Divides the viewport's effective resolution by this value while preserving "
+"its scale. This can be used to speed up rendering.\n"
+"For example, a 1280×720 viewport with [member stretch_shrink] set to "
+"[code]2[/code] will be rendered at 640×360 while occupying the same size in "
+"the container.\n"
+"[b]Note:[/b] [member stretch] must be [code]true[/code] for this property to "
+"work."
+msgstr ""
+
+#: doc/classes/ViewportTexture.xml:4
+msgid "Texture which displays the content of a [Viewport]."
+msgstr ""
+
+#: doc/classes/ViewportTexture.xml:7
+msgid ""
+"Displays the content of a [Viewport] node as a dynamic [Texture]. This can "
+"be used to mix controls, 2D, and 3D elements in the same scene.\n"
+"To create a ViewportTexture in code, use the [method Viewport.get_texture] "
+"method on the target viewport."
+msgstr ""
+
+#: doc/classes/ViewportTexture.xml:22
+msgid ""
+"The path to the [Viewport] node to display. This is relative to the scene "
+"root, not to the node which uses the texture."
+msgstr ""
+
+#: doc/classes/VisibilityEnabler.xml:4 doc/classes/VisibilityEnabler2D.xml:4
+msgid "Enables certain nodes only when approximately visible."
+msgstr ""
+
+#: doc/classes/VisibilityEnabler.xml:7
+msgid ""
+"The VisibilityEnabler will disable [RigidBody] and [AnimationPlayer] nodes "
+"when they are not visible. It will only affect other nodes within the same "
+"scene as the VisibilityEnabler itself.\n"
+"If you just want to receive notifications, use [VisibilityNotifier] "
+"instead.\n"
+"[b]Note:[/b] VisibilityEnabler uses an approximate heuristic for performance "
+"reasons. It doesn't take walls and other occlusion into account. The "
+"heuristic is an implementation detail and may change in future versions. If "
+"you need precise visibility checking, use another method such as adding an "
+"[Area] node as a child of a [Camera] node and/or [method Vector3.dot].\n"
+"[b]Note:[/b] VisibilityEnabler will not affect nodes added after scene "
+"initialization."
+msgstr ""
+
+#: doc/classes/VisibilityEnabler.xml:19 doc/classes/VisibilityEnabler2D.xml:19
+msgid ""
+"Returns whether the enabler identified by given [enum Enabler] constant is "
+"active."
+msgstr ""
+
+#: doc/classes/VisibilityEnabler.xml:27 doc/classes/VisibilityEnabler2D.xml:27
+msgid ""
+"Sets active state of the enabler identified by given [enum Enabler] constant."
+msgstr ""
+
+#: doc/classes/VisibilityEnabler.xml:33
+msgid "If [code]true[/code], [RigidBody] nodes will be paused."
+msgstr ""
+
+#: doc/classes/VisibilityEnabler.xml:36 doc/classes/VisibilityEnabler2D.xml:39
+msgid "If [code]true[/code], [AnimationPlayer] nodes will be paused."
+msgstr ""
+
+#: doc/classes/VisibilityEnabler.xml:41 doc/classes/VisibilityEnabler2D.xml:53
+msgid "This enabler will pause [AnimationPlayer] nodes."
+msgstr ""
+
+#: doc/classes/VisibilityEnabler.xml:44
+msgid "This enabler will freeze [RigidBody] nodes."
+msgstr ""
+
+#: doc/classes/VisibilityEnabler.xml:47 doc/classes/VisibilityEnabler2D.xml:71
+msgid "Represents the size of the [enum Enabler] enum."
+msgstr ""
+
+#: doc/classes/VisibilityEnabler2D.xml:7
+msgid ""
+"The VisibilityEnabler2D will disable [RigidBody2D], [AnimationPlayer], and "
+"other nodes when they are not visible. It will only affect nodes with the "
+"same root node as the VisibilityEnabler2D, and the root node itself.\n"
+"If you just want to receive notifications, use [VisibilityNotifier2D] "
+"instead.\n"
+"[b]Note:[/b] For performance reasons, VisibilityEnabler2D uses an "
+"approximate heuristic with precision determined by [member ProjectSettings."
+"world/2d/cell_size]. If you need precise visibility checking, use another "
+"method such as adding an [Area2D] node as a child of a [Camera2D] node.\n"
+"[b]Note:[/b] VisibilityEnabler2D will not affect nodes added after scene "
+"initialization."
+msgstr ""
+
+#: doc/classes/VisibilityEnabler2D.xml:33
+msgid "If [code]true[/code], [RigidBody2D] nodes will be paused."
+msgstr ""
+
+#: doc/classes/VisibilityEnabler2D.xml:36
+msgid "If [code]true[/code], [AnimatedSprite] nodes will be paused."
+msgstr ""
+
+#: doc/classes/VisibilityEnabler2D.xml:42
+msgid "If [code]true[/code], [Particles2D] nodes will be paused."
+msgstr ""
+
+#: doc/classes/VisibilityEnabler2D.xml:45
+msgid ""
+"If [code]true[/code], the parent's [method Node._physics_process] will be "
+"stopped."
+msgstr ""
+
+#: doc/classes/VisibilityEnabler2D.xml:48
+msgid ""
+"If [code]true[/code], the parent's [method Node._process] will be stopped."
+msgstr ""
+
+#: doc/classes/VisibilityEnabler2D.xml:56
+msgid "This enabler will freeze [RigidBody2D] nodes."
+msgstr ""
+
+#: doc/classes/VisibilityEnabler2D.xml:59
+msgid "This enabler will stop [Particles2D] nodes."
+msgstr ""
+
+#: doc/classes/VisibilityEnabler2D.xml:62
+msgid "This enabler will stop the parent's _process function."
+msgstr ""
+
+#: doc/classes/VisibilityEnabler2D.xml:65
+msgid "This enabler will stop the parent's _physics_process function."
+msgstr ""
+
+#: doc/classes/VisibilityEnabler2D.xml:68
+msgid "This enabler will stop [AnimatedSprite] nodes animations."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier.xml:4 doc/classes/VisibilityNotifier2D.xml:4
+msgid "Detects approximately when the node is visible on screen."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier.xml:7
+msgid ""
+"The VisibilityNotifier detects when it is visible on the screen. It also "
+"notifies when its bounding rectangle enters or exits the screen or a "
+"[Camera]'s view.\n"
+"If you want nodes to be disabled automatically when they exit the screen, "
+"use [VisibilityEnabler] instead.\n"
+"[b]Note:[/b] VisibilityNotifier uses an approximate heuristic for "
+"performance reasons. It doesn't take walls and other occlusion into account. "
+"The heuristic is an implementation detail and may change in future versions. "
+"If you need precise visibility checking, use another method such as adding "
+"an [Area] node as a child of a [Camera] node and/or [method Vector3.dot]."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier.xml:17
+msgid ""
+"If [code]true[/code], the bounding box is on the screen.\n"
+"[b]Note:[/b] It takes one frame for the node's visibility to be assessed "
+"once added to the scene tree, so this method will return [code]false[/code] "
+"right after it is instantiated, even if it will be on screen in the draw "
+"pass."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier.xml:24
+msgid "The VisibilityNotifier's bounding box."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier.xml:31
+msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier.xml:37
+msgid "Emitted when the VisibilityNotifier exits a [Camera]'s view."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier.xml:42
+msgid "Emitted when the VisibilityNotifier enters the screen."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier.xml:47
+msgid "Emitted when the VisibilityNotifier exits the screen."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier2D.xml:7
+msgid ""
+"The VisibilityNotifier2D detects when it is visible on the screen. It also "
+"notifies when its bounding rectangle enters or exits the screen or a "
+"viewport.\n"
+"If you want nodes to be disabled automatically when they exit the screen, "
+"use [VisibilityEnabler2D] instead.\n"
+"[b]Note:[/b] For performance reasons, VisibilityNotifier2D uses an "
+"approximate heuristic with precision determined by [member ProjectSettings."
+"world/2d/cell_size]. If you need precise visibility checking, use another "
+"method such as adding an [Area2D] node as a child of a [Camera2D] node."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier2D.xml:18
+msgid ""
+"If [code]true[/code], the bounding rectangle is on the screen.\n"
+"[b]Note:[/b] It takes one frame for the node's visibility to be assessed "
+"once added to the scene tree, so this method will return [code]false[/code] "
+"right after it is instantiated, even if it will be on screen in the draw "
+"pass."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier2D.xml:25
+msgid "The VisibilityNotifier2D's bounding rectangle."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier2D.xml:31
+msgid "Emitted when the VisibilityNotifier2D enters the screen."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier2D.xml:36
+msgid "Emitted when the VisibilityNotifier2D exits the screen."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier2D.xml:42
+msgid "Emitted when the VisibilityNotifier2D enters a [Viewport]'s view."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier2D.xml:48
+msgid "Emitted when the VisibilityNotifier2D exits a [Viewport]'s view."
+msgstr ""
+
+#: doc/classes/VisualInstance.xml:4
+msgid "Parent of all visual 3D nodes."
+msgstr ""
+
+#: doc/classes/VisualInstance.xml:7
+msgid ""
+"The [VisualInstance] is used to connect a resource to a visual "
+"representation. All visual 3D nodes inherit from the [VisualInstance]. In "
+"general, you should not access the [VisualInstance] properties directly as "
+"they are accessed and managed by the nodes that inherit from "
+"[VisualInstance]. [VisualInstance] is the node representation of the "
+"[VisualServer] instance."
+msgstr ""
+
+#: doc/classes/VisualInstance.xml:15
+msgid ""
+"Returns the [AABB] (also known as the bounding box) for this "
+"[VisualInstance]. See also [method get_transformed_aabb]."
+msgstr ""
+
+#: doc/classes/VisualInstance.xml:21
+msgid ""
+"Returns the RID of the resource associated with this [VisualInstance]. For "
+"example, if the Node is a [MeshInstance], this will return the RID of the "
+"associated [Mesh]."
+msgstr ""
+
+#: doc/classes/VisualInstance.xml:27
+msgid ""
+"Returns the RID of this instance. This RID is the same as the RID returned "
+"by [method VisualServer.instance_create]. This RID is needed if you want to "
+"call [VisualServer] functions directly on this [VisualInstance]."
+msgstr ""
+
+#: doc/classes/VisualInstance.xml:34
+msgid ""
+"Returns [code]true[/code] when the specified layer is enabled in [member "
+"layers] and [code]false[/code] otherwise."
+msgstr ""
+
+#: doc/classes/VisualInstance.xml:40
+msgid ""
+"Returns the transformed [AABB] (also known as the bounding box) for this "
+"[VisualInstance].\n"
+"Transformed in this case means the [AABB] plus the position, rotation, and "
+"scale of the [Spatial]'s [Transform]. See also [method get_aabb]."
+msgstr ""
+
+#: doc/classes/VisualInstance.xml:48
+msgid ""
+"Sets the resource that is instantiated by this [VisualInstance], which "
+"changes how the engine handles the [VisualInstance] under the hood. "
+"Equivalent to [method VisualServer.instance_set_base]."
+msgstr ""
+
+#: doc/classes/VisualInstance.xml:56
+msgid "Enables a particular layer in [member layers]."
+msgstr ""
+
+#: doc/classes/VisualInstance.xml:62
+msgid ""
+"The render layer(s) this [VisualInstance] is drawn on.\n"
+"This object will only be visible for [Camera]s whose cull mask includes the "
+"render object this [VisualInstance] is set to."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:4
+msgid "A script implemented in the Visual Script programming environment."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:7
+msgid ""
+"A script implemented in the Visual Script programming environment. The "
+"script extends the functionality of all objects that instance it.\n"
+"[method Object.set_script] extends an existing object, if that object's "
+"class matches one of the script's base classes.\n"
+"You are most likely to use this class via the Visual Script editor or when "
+"writing plugins for it."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:12
+msgid ""
+"https://docs.godotengine.org/en/3.4/getting_started/scripting/visual_script/"
+"index.html"
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:19
+msgid "Add a custom signal with the specified name to the VisualScript."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:26
+msgid "Add a function with the specified name to the VisualScript."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:36
+msgid "Add a node to a function of the VisualScript."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:45
+msgid ""
+"Add a variable to the VisualScript, optionally giving it a default value or "
+"marking it as exported."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:55
+msgid ""
+"Add an argument to a custom signal added with [method add_custom_signal]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:62
+msgid "Get the count of a custom signal's arguments."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:70
+msgid "Get the name of a custom signal's argument."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:78
+msgid "Get the type of a custom signal's argument."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:86
+msgid "Remove a specific custom signal's argument."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:95
+msgid "Rename a custom signal's argument."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:104
+msgid "Change the type of a custom signal's argument."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:113
+msgid "Swap two of the arguments of a custom signal."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:124
+msgid ""
+"Connect two data ports. The value of [code]from_node[/code]'s "
+"[code]from_port[/code] would be fed into [code]to_node[/code]'s "
+"[code]to_port[/code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:135
+msgid ""
+"Disconnect two data ports previously connected with [method data_connect]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:142
+msgid "Returns the id of a function's entry point node."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:149
+msgid "Returns the position of the center of the screen for a given function."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:157
+msgid "Returns a node given its id and its function."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:165
+msgid "Returns a node's position in pixels."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:172
+msgid "Returns the default (initial) value of a variable."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:179
+msgid "Returns whether a variable is exported."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:186
+msgid ""
+"Returns the information for a given variable as a dictionary. The "
+"information includes its name, type, hint and usage."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:193
+msgid "Returns whether a signal exists with the specified name."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:204
+msgid "Returns whether the specified data ports are connected."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:211
+msgid "Returns whether a function exists with the specified name."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:219
+msgid "Returns whether a node exists with the given id."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:229
+msgid "Returns whether the specified sequence ports are connected."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:236
+msgid "Returns whether a variable exists with the specified name."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:243
+msgid "Remove a custom signal with the given name."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:250
+msgid "Remove a specific function and its nodes from the script."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:258
+msgid "Remove a specific node."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:265
+msgid "Remove a variable with the given name."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:273
+msgid "Change the name of a custom signal."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:281
+msgid "Change the name of a function."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:289
+msgid "Change the name of a variable."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:299
+msgid ""
+"Connect two sequence ports. The execution will flow from of [code]from_node[/"
+"code]'s [code]from_output[/code] into [code]to_node[/code].\n"
+"Unlike [method data_connect], there isn't a [code]to_port[/code], since the "
+"target node can have only one sequence port."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:310
+msgid ""
+"Disconnect two sequence ports previously connected with [method "
+"sequence_connect]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:318
+msgid "Position the center of the screen for a function."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:325
+msgid "Set the base type of the script."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:334
+msgid "Position a node on the screen."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:342
+msgid "Change the default (initial) value of a variable."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:350
+msgid "Change whether a variable is exported."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:358
+msgid ""
+"Set a variable's info, using the same format as [method get_variable_info]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:367
+msgid "Emitted when the ports of a node are changed."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBasicTypeConstant.xml:4
+msgid "A Visual Script node representing a constant from the base types."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBasicTypeConstant.xml:7
+msgid ""
+"A Visual Script node representing a constant from base types, such as "
+"[constant Vector3.AXIS_X]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBasicTypeConstant.xml:15
+msgid "The type to get the constant from."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBasicTypeConstant.xml:18
+msgid "The name of the constant to return."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:4
+msgid "A Visual Script node used to call built-in functions."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:7
+msgid ""
+"A built-in function used inside a [VisualScript]. It is usually a math "
+"function or an utility function.\n"
+"See also [@GDScript], for the same functions in the GDScript language."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:16
+msgid "The function to be executed."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:21
+msgid "Return the sine of the input."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:24
+msgid "Return the cosine of the input."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:27
+msgid "Return the tangent of the input."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:30
+msgid "Return the hyperbolic sine of the input."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:33
+msgid "Return the hyperbolic cosine of the input."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:36
+msgid "Return the hyperbolic tangent of the input."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:39
+msgid "Return the arc sine of the input."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:42
+msgid "Return the arc cosine of the input."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:45
+msgid "Return the arc tangent of the input."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:48
+msgid ""
+"Return the arc tangent of the input, using the signs of both parameters to "
+"determine the exact angle."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:51
+msgid "Return the square root of the input."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:54
+msgid ""
+"Return the remainder of one input divided by the other, using floating-point "
+"numbers."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:57
+msgid ""
+"Return the positive remainder of one input divided by the other, using "
+"floating-point numbers."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:60
+msgid "Return the input rounded down."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:63
+msgid "Return the input rounded up."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:66
+msgid "Return the input rounded to the nearest integer."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:69
+msgid "Return the absolute value of the input."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:72
+msgid ""
+"Return the sign of the input, turning it into 1, -1, or 0. Useful to "
+"determine if the input is positive or negative."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:75
+msgid "Return the input raised to a given power."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:78
+msgid ""
+"Return the natural logarithm of the input. Note that this is not the typical "
+"base-10 logarithm function calculators use."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:81
+msgid ""
+"Return the mathematical constant [b]e[/b] raised to the specified power of "
+"the input. [b]e[/b] has an approximate value of 2.71828."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:84
+msgid ""
+"Return whether the input is NaN (Not a Number) or not. NaN is usually "
+"produced by dividing 0 by 0, though other ways exist."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:87
+msgid ""
+"Return whether the input is an infinite floating-point number or not. "
+"Infinity is usually produced by dividing a number by 0, though other ways "
+"exist."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:90
+msgid ""
+"Easing function, based on exponent. 0 is constant, 1 is linear, 0 to 1 is "
+"ease-in, 1+ is ease out. Negative values are in-out/out in."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:93
+msgid ""
+"Return the number of digit places after the decimal that the first non-zero "
+"digit occurs."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:96
+msgid "Return the input snapped to a given step."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:99
+msgid ""
+"Return a number linearly interpolated between the first two inputs, based on "
+"the third input. Uses the formula [code]a + (a - b) * t[/code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:106
+msgid "Moves the number toward a value, based on the third input."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:109
+msgid ""
+"Return the result of [code]value[/code] decreased by [code]step[/code] * "
+"[code]amount[/code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:112
+msgid ""
+"Randomize the seed (or the internal state) of the random number generator. "
+"Current implementation reseeds using a number based on time."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:115
+msgid ""
+"Return a random 32 bits integer value. To obtain a random value between 0 to "
+"N (where N is smaller than 2^32 - 1), you can use it with the remainder "
+"function."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:118
+msgid ""
+"Return a random floating-point value between 0 and 1. To obtain a random "
+"value between 0 to N, you can use it with multiplication."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:121
+msgid "Return a random floating-point value between the two inputs."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:124
+msgid "Set the seed for the random number generator."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:127
+msgid "Return a random value from the given seed, along with the new seed."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:130
+msgid "Convert the input from degrees to radians."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:133
+msgid "Convert the input from radians to degrees."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:136
+msgid "Convert the input from linear volume to decibel volume."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:139
+msgid "Convert the input from decibel volume to linear volume."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:152
+msgid "Return the greater of the two numbers, also known as their maximum."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:155
+msgid "Return the lesser of the two numbers, also known as their minimum."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:158
+msgid ""
+"Return the input clamped inside the given range, ensuring the result is "
+"never outside it. Equivalent to [code]min(max(input, range_low), range_high)"
+"[/code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:161
+msgid "Return the nearest power of 2 to the input."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:164
+msgid "Create a [WeakRef] from the input."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:167
+msgid "Create a [FuncRef] from the input."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:170
+msgid "Convert between types."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:173
+msgid ""
+"Return the type of the input as an integer. Check [enum Variant.Type] for "
+"the integers that might be returned."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:176
+msgid "Checks if a type is registered in the [ClassDB]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:179
+msgid "Return a character with the given ascii value."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:182
+msgid "Convert the input to a string."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:185
+msgid "Print the given string to the output window."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:188
+msgid "Print the given string to the standard error output."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:191
+msgid ""
+"Print the given string to the standard output, without adding a newline."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:194
+msgid "Serialize a [Variant] to a string."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:197
+msgid ""
+"Deserialize a [Variant] from a string serialized using [constant VAR_TO_STR]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:200
+msgid "Serialize a [Variant] to a [PoolByteArray]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:203
+msgid ""
+"Deserialize a [Variant] from a [PoolByteArray] serialized using [constant "
+"VAR_TO_BYTES]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:206
+msgid ""
+"Return the [Color] with the given name and alpha ranging from 0 to 1.\n"
+"[b]Note:[/b] Names are defined in [code]color_names.inc[/code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:210
+msgid ""
+"Return a number smoothly interpolated between the first two inputs, based on "
+"the third input. Similar to [constant MATH_LERP], but interpolates faster at "
+"the beginning and slower at the end. Using Hermite interpolation formula:\n"
+"[codeblock]\n"
+"var t = clamp((weight - from) / (to - from), 0.0, 1.0)\n"
+"return t * t * (3.0 - 2.0 * t)\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:223
+msgid "Represents the size of the [enum BuiltinFunc] enum."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptClassConstant.xml:4
+msgid "Gets a constant from a given class."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptClassConstant.xml:7
+msgid ""
+"This node returns a constant from a given class, such as [constant "
+"TYPE_INT]. See the given class' documentation for available constants.\n"
+"[b]Input Ports:[/b]\n"
+"none\n"
+"[b]Output Ports:[/b]\n"
+"- Data (variant): [code]value[/code]"
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptClassConstant.xml:19
+msgid "The constant's parent class."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptClassConstant.xml:22
+msgid ""
+"The constant to return. See the given class for its available constants."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptComment.xml:4
+msgid "A Visual Script node used to annotate the script."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptComment.xml:7
+msgid ""
+"A Visual Script node used to display annotations in the script, so that code "
+"may be documented.\n"
+"Comment nodes can be resized so they encompass a group of nodes."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptComment.xml:16
+msgid "The text inside the comment node."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptComment.xml:19
+msgid "The comment node's size (in pixels)."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptComment.xml:22
+msgid "The comment node's title."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptComposeArray.xml:4
+msgid "A Visual Script Node used to create array from a list of items."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptComposeArray.xml:7
+msgid ""
+"A Visual Script Node used to compose array from the list of elements "
+"provided with custom in-graph UI hard coded in the VisualScript Editor."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCondition.xml:4
+msgid "A Visual Script node which branches the flow."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCondition.xml:7
+msgid ""
+"A Visual Script node that checks a [bool] input port. If [code]true[/code], "
+"it will exit via the \"true\" sequence port. If [code]false[/code], it will "
+"exit via the \"false\" sequence port. After exiting either, it exits via the "
+"\"done\" port. Sequence ports may be left disconnected.\n"
+"[b]Input Ports:[/b]\n"
+"- Sequence: [code]if (cond) is[/code]\n"
+"- Data (boolean): [code]cond[/code]\n"
+"[b]Output Ports:[/b]\n"
+"- Sequence: [code]true[/code]\n"
+"- Sequence: [code]false[/code]\n"
+"- Sequence: [code]done[/code]"
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptConstant.xml:4
+msgid "Gets a contant's value."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptConstant.xml:7
+msgid ""
+"This node returns a constant's value.\n"
+"[b]Input Ports:[/b]\n"
+"none\n"
+"[b]Output Ports:[/b]\n"
+"- Data (variant): [code]get[/code]"
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptConstant.xml:19
+msgid "The constant's type."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptConstant.xml:22
+msgid "The constant's value."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptConstructor.xml:4
+msgid "A Visual Script node which calls a base type constructor."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptConstructor.xml:7
+msgid ""
+"A Visual Script node which calls a base type constructor. It can be used for "
+"type conversion as well."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:4
+msgid "A scripted Visual Script node."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:7
+msgid "A custom Visual Script node which can be scripted in powerful ways."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:15
+msgid "Return the node's title."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:21
+msgid "Return the node's category."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:27
+msgid "Return the count of input value ports."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:34
+msgid ""
+"Return the specified input port's hint. See the [enum @GlobalScope."
+"PropertyHint] hints."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:41
+msgid "Return the specified input port's hint string."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:48
+msgid "Return the specified input port's name."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:55
+msgid ""
+"Return the specified input port's type. See the [enum Variant.Type] values."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:61
+msgid "Return the amount of output [b]sequence[/b] ports."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:68
+msgid "Return the specified [b]sequence[/b] output's name."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:74
+msgid "Return the amount of output value ports."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:81
+msgid ""
+"Return the specified output port's hint. See the [enum @GlobalScope."
+"PropertyHint] hints."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:88
+msgid "Return the specified output port's hint string."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:95
+msgid "Return the specified output port's name."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:102
+msgid ""
+"Return the specified output port's type. See the [enum Variant.Type] values."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:108
+msgid ""
+"Return the custom node's text, which is shown right next to the input "
+"[b]sequence[/b] port (if there is none, on the place that is usually taken "
+"by it)."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:114
+msgid ""
+"Return the size of the custom node's working memory. See [method _step] for "
+"more details."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:120
+msgid "Return whether the custom node has an input [b]sequence[/b] port."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:130
+msgid ""
+"Execute the custom node's logic, returning the index of the output sequence "
+"port to use or a [String] when there is an error.\n"
+"The [code]inputs[/code] array contains the values of the input ports.\n"
+"[code]outputs[/code] is an array whose indices should be set to the "
+"respective outputs.\n"
+"The [code]start_mode[/code] is usually [constant START_MODE_BEGIN_SEQUENCE], "
+"unless you have used the [code]STEP_*[/code] constants.\n"
+"[code]working_mem[/code] is an array which can be used to persist "
+"information between runs of the custom node. The size needs to be predefined "
+"using [method _get_working_memory_size].\n"
+"When returning, you can mask the returned value with one of the "
+"[code]STEP_*[/code] constants."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:141
+msgid "The start mode used the first time when [method _step] is called."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:144
+msgid ""
+"The start mode used when [method _step] is called after coming back from a "
+"[constant STEP_PUSH_STACK_BIT]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:147
+msgid ""
+"The start mode used when [method _step] is called after resuming from "
+"[constant STEP_YIELD_BIT]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:150
+msgid ""
+"Hint used by [method _step] to tell that control should return to it when "
+"there is no other node left to execute.\n"
+"This is used by [VisualScriptCondition] to redirect the sequence to the "
+"\"Done\" port after the [code]true[/code]/[code]false[/code] branch has "
+"finished execution."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:154
+msgid ""
+"Hint used by [method _step] to tell that control should return back, either "
+"hitting a previous [constant STEP_PUSH_STACK_BIT] or exiting the function."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:159
+msgid ""
+"Hint used by [method _step] to tell that control should stop and exit the "
+"function."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:162
+msgid ""
+"Hint used by [method _step] to tell that the function should be yielded.\n"
+"Using this requires you to have at least one working memory slot, which is "
+"used for the [VisualScriptFunctionState]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptDeconstruct.xml:4
+#: modules/visual_script/doc_classes/VisualScriptDeconstruct.xml:7
+msgid ""
+"A Visual Script node which deconstructs a base type instance into its parts."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptDeconstruct.xml:15
+msgid "The type to deconstruct."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptEditor.xml:16
+msgid ""
+"Add a custom Visual Script node to the editor. It'll be placed under "
+"\"Custom Nodes\" with the [code]category[/code] as the parameter."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptEditor.xml:24
+msgid ""
+"Remove a custom Visual Script node from the editor. Custom nodes already "
+"placed on scripts won't be removed."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptEditor.xml:31
+msgid "Emitted when a custom Visual Script node is added or removed."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptEmitSignal.xml:4
+msgid "Emits a specified signal."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptEmitSignal.xml:7
+msgid ""
+"Emits a specified signal when it is executed.\n"
+"[b]Input Ports:[/b]\n"
+"- Sequence: [code]emit[/code]\n"
+"[b]Output Ports:[/b]\n"
+"- Sequence"
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptEmitSignal.xml:19
+msgid "The signal to emit."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptEngineSingleton.xml:4
+#: modules/visual_script/doc_classes/VisualScriptEngineSingleton.xml:7
+msgid "A Visual Script node returning a singleton from [@GlobalScope]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptEngineSingleton.xml:15
+msgid "The singleton's name."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptExpression.xml:4
+msgid "A Visual Script node that can execute a custom expression."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptExpression.xml:7
+msgid ""
+"A Visual Script node that can execute a custom expression. Values can be "
+"provided for the input and the expression result can be retrieved from the "
+"output."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunction.xml:4
+msgid "A Visual Script node representing a function."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunction.xml:7
+msgid ""
+"[VisualScriptFunction] represents a function header. It is the starting "
+"point for the function body and can be used to tweak the function's "
+"properties (e.g. RPC mode)."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:4
+msgid "A Visual Script node for calling a function."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:7
+msgid ""
+"[VisualScriptFunctionCall] is created when you add or drag and drop a "
+"function onto the Visual Script graph. It allows to tweak parameters of the "
+"call, e.g. what object the function is called on."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:15
+msgid ""
+"The script to be used when [member call_mode] is set to [constant "
+"CALL_MODE_INSTANCE]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:18
+#: modules/visual_script/doc_classes/VisualScriptYieldSignal.xml:15
+msgid ""
+"The base type to be used when [member call_mode] is set to [constant "
+"CALL_MODE_INSTANCE]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:21
+msgid ""
+"The type to be used when [member call_mode] is set to [constant "
+"CALL_MODE_BASIC_TYPE]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:24
+msgid ""
+"[code]call_mode[/code] determines the target object on which the method will "
+"be called. See [enum CallMode] for options."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:27
+msgid "The name of the function to be called."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:30
+#: modules/visual_script/doc_classes/VisualScriptYieldSignal.xml:21
+msgid ""
+"The node path to use when [member call_mode] is set to [constant "
+"CALL_MODE_NODE_PATH]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:33
+msgid ""
+"The mode for RPC calls. See [method Node.rpc] for more details and [enum "
+"RPCCallMode] for available options."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:36
+msgid ""
+"The singleton to call the method on. Used when [member call_mode] is set to "
+"[constant CALL_MODE_SINGLETON]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:39
+msgid ""
+"Number of default arguments that will be used when calling the function. "
+"Can't be higher than the number of available default arguments in the "
+"method's declaration."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:42
+msgid ""
+"If [code]false[/code], call errors (e.g. wrong number of arguments) will be "
+"ignored."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:47
+msgid "The method will be called on this [Object]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:50
+msgid "The method will be called on the given [Node] in the scene tree."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:53
+msgid ""
+"The method will be called on an instanced node with the given type and "
+"script."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:56
+msgid "The method will be called on a GDScript basic type (e.g. [Vector2])."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:59
+msgid "The method will be called on a singleton."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:62
+msgid "The method will be called locally."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:65
+msgid "The method will be called remotely."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:68
+msgid "The method will be called remotely using an unreliable protocol."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:71
+msgid "The method will be called remotely for the given peer."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:74
+msgid ""
+"The method will be called remotely for the given peer, using an unreliable "
+"protocol."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionState.xml:4
+msgid "A Visual Script node representing a function state."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionState.xml:7
+msgid ""
+"[VisualScriptFunctionState] is returned from [VisualScriptYield] and can be "
+"used to resume a paused function call."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionState.xml:18
+msgid ""
+"Connects this [VisualScriptFunctionState] to a signal in the given object to "
+"automatically resume when it's emitted."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionState.xml:24
+msgid "Returns whether the function state is valid."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionState.xml:31
+msgid "Resumes the function to run from the point it was yielded."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptGlobalConstant.xml:4
+#: modules/visual_script/doc_classes/VisualScriptGlobalConstant.xml:7
+msgid "A Visual Script node returning a constant from [@GlobalScope]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptGlobalConstant.xml:15
+msgid "The constant to be used."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptIndexGet.xml:4
+msgid "A Visual Script node for getting a value from an array or a dictionary."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptIndexGet.xml:7
+msgid ""
+"[VisualScriptIndexGet] will return the value stored in an array or a "
+"dictionary under the given index."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptIndexSet.xml:4
+msgid "A Visual Script node for setting a value in an array or a dictionary."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptIndexSet.xml:7
+msgid ""
+"[VisualScriptIndexSet] will set the value stored in an array or a dictionary "
+"under the given index to the provided new value."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptInputAction.xml:4
+msgid "A Visual Script node returning a state of an action."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptInputAction.xml:7
+msgid ""
+"[VisualScriptInputAction] can be used to check if an action is pressed or "
+"released."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptInputAction.xml:15
+msgid "Name of the action."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptInputAction.xml:18
+msgid "State of the action to check. See [enum Mode] for options."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptInputAction.xml:23
+msgid "[code]True[/code] if action is pressed."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptInputAction.xml:26
+msgid "[code]True[/code] if action is released (i.e. not pressed)."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptInputAction.xml:29
+msgid "[code]True[/code] on the frame the action was pressed."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptInputAction.xml:32
+msgid "[code]True[/code] on the frame the action was released."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptIterator.xml:4
+msgid "Steps through items in a given input."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptIterator.xml:7
+msgid ""
+"This node steps through each item in a given input. Input can be any "
+"sequence data type, such as an [Array] or [String]. When each item has been "
+"processed, execution passed out the [code]exit[/code] Sequence port.\n"
+"[b]Input Ports:[/b]\n"
+"- Sequence: [code]for (elem) in (input)[/code]\n"
+"- Data (variant): [code]input[/code]\n"
+"[b]Output Ports:[/b]\n"
+"- Sequence: [code]each[/code]\n"
+"- Sequence: [code]exit[/code]\n"
+"- Data (variant): [code]elem[/code]"
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptLists.xml:4
+msgid "A Visual Script virtual class for in-graph editable nodes."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptLists.xml:7
+msgid ""
+"A Visual Script virtual class that defines the shape and the default "
+"behavior of the nodes that have to be in-graph editable nodes."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptLists.xml:18
+msgid "Adds an input port to the Visual Script node."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptLists.xml:27
+msgid "Adds an output port to the Visual Script node."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptLists.xml:34
+msgid "Removes an input port from the Visual Script node."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptLists.xml:41
+msgid "Removes an output port from the Visual Script node."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptLists.xml:49
+msgid "Sets the name of an input port."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptLists.xml:57
+msgid "Sets the type of an input port."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptLists.xml:65
+msgid "Sets the name of an output port."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptLists.xml:73
+msgid "Sets the type of an output port."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptLocalVar.xml:4
+msgid "Gets a local variable's value."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptLocalVar.xml:7
+msgid ""
+"Returns a local variable's value. \"Var Name\" must be supplied, with an "
+"optional type.\n"
+"[b]Input Ports:[/b]\n"
+"none\n"
+"[b]Output Ports:[/b]\n"
+"- Data (variant): [code]get[/code]"
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptLocalVar.xml:19
+#: modules/visual_script/doc_classes/VisualScriptLocalVarSet.xml:21
+msgid "The local variable's type."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptLocalVar.xml:22
+#: modules/visual_script/doc_classes/VisualScriptLocalVarSet.xml:24
+msgid "The local variable's name."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptLocalVarSet.xml:4
+msgid "Changes a local variable's value."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptLocalVarSet.xml:7
+msgid ""
+"Changes a local variable's value to the given input. The new value is also "
+"provided on an output Data port.\n"
+"[b]Input Ports:[/b]\n"
+"- Sequence\n"
+"- Data (variant): [code]set[/code]\n"
+"[b]Output Ports:[/b]\n"
+"- Sequence\n"
+"- Data (variant): [code]get[/code]"
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptMathConstant.xml:4
+msgid "Commonly used mathematical constants."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptMathConstant.xml:7
+msgid ""
+"Provides common math constants, such as Pi, on an output Data port.\n"
+"[b]Input Ports:[/b]\n"
+"none\n"
+"[b]Output Ports:[/b]\n"
+"- Data (variant): [code]get[/code]"
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptMathConstant.xml:19
+msgid "The math constant."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptMathConstant.xml:24
+msgid "Unity: [code]1[/code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptMathConstant.xml:27
+msgid "Pi: [code]3.141593[/code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptMathConstant.xml:30
+msgid "Pi divided by two: [code]1.570796[/code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptMathConstant.xml:33
+msgid "Tau: [code]6.283185[/code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptMathConstant.xml:36
+msgid ""
+"Mathematical constant [code]e[/code], the natural log base: [code]2.718282[/"
+"code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptMathConstant.xml:39
+msgid "Square root of two: [code]1.414214[/code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptMathConstant.xml:42
+msgid "Infinity: [code]inf[/code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptMathConstant.xml:45
+msgid "Not a number: [code]nan[/code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptMathConstant.xml:48
+msgid "Represents the size of the [enum MathConstant] enum."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptNode.xml:4
+msgid "A node which is part of a [VisualScript]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptNode.xml:7
+msgid ""
+"A node which is part of a [VisualScript]. Not to be confused with [Node], "
+"which is a part of a [SceneTree]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptNode.xml:16
+msgid ""
+"Returns the default value of a given port. The default value is used when "
+"nothing is connected to the port."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptNode.xml:22
+msgid "Returns the [VisualScript] instance the node is bound to."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptNode.xml:28
+msgid ""
+"Notify that the node's ports have changed. Usually used in conjunction with "
+"[VisualScriptCustomNode] ."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptNode.xml:36
+msgid "Change the default value of a given port."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptNode.xml:43
+msgid "Emitted when the available input/output ports are changed."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptOperator.xml:4
+msgid "A Visual Script node that performs an operation on two values."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptOperator.xml:7
+msgid ""
+"[b]Input Ports:[/b]\n"
+"- Data (variant): [code]A[/code]\n"
+"- Data (variant): [code]B[/code]\n"
+"[b]Output Ports:[/b]\n"
+"- Data (variant): [code]result[/code]"
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptOperator.xml:19
+msgid ""
+"The operation to be performed. See [enum Variant.Operator] for available "
+"options."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptOperator.xml:22
+msgid ""
+"The type of the values for this operation. See [enum Variant.Type] for "
+"available options."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPreload.xml:4
+msgid "Creates a new [Resource] or loads one from the filesystem."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPreload.xml:7
+msgid ""
+"Creates a new [Resource] or loads one from the filesystem.\n"
+"[b]Input Ports:[/b]\n"
+"none\n"
+"[b]Output Ports:[/b]\n"
+"- Data (object): [code]res[/code]"
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPreload.xml:19
+msgid "The [Resource] to load."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertyGet.xml:4
+msgid "A Visual Script node returning a value of a property from an [Object]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertyGet.xml:7
+msgid ""
+"[VisualScriptPropertyGet] can return a value of any property from the "
+"current object or other objects."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertyGet.xml:15
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:18
+msgid ""
+"The script to be used when [member set_mode] is set to [constant "
+"CALL_MODE_INSTANCE]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertyGet.xml:18
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:21
+msgid ""
+"The base type to be used when [member set_mode] is set to [constant "
+"CALL_MODE_INSTANCE]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertyGet.xml:21
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:24
+msgid ""
+"The type to be used when [member set_mode] is set to [constant "
+"CALL_MODE_BASIC_TYPE]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertyGet.xml:24
+msgid ""
+"The indexed name of the property to retrieve. See [method Object."
+"get_indexed] for details."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertyGet.xml:27
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:30
+msgid ""
+"The node path to use when [member set_mode] is set to [constant "
+"CALL_MODE_NODE_PATH]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertyGet.xml:30
+msgid ""
+"The name of the property to retrieve. Changing this will clear [member "
+"index]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertyGet.xml:33
+msgid ""
+"[code]set_mode[/code] determines the target object from which the property "
+"will be retrieved. See [enum CallMode] for options."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertyGet.xml:38
+msgid "The property will be retrieved from this [Object]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertyGet.xml:41
+msgid "The property will be retrieved from the given [Node] in the scene tree."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertyGet.xml:44
+msgid ""
+"The property will be retrieved from an instanced node with the given type "
+"and script."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertyGet.xml:47
+msgid ""
+"The property will be retrieved from a GDScript basic type (e.g. [Vector2])."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:4
+msgid "A Visual Script node that sets a property of an [Object]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:7
+msgid ""
+"[VisualScriptPropertySet] can set the value of any property from the current "
+"object or other objects."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:15
+msgid ""
+"The additional operation to perform when assigning. See [enum AssignOp] for "
+"options."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:27
+msgid ""
+"The indexed name of the property to set. See [method Object.set_indexed] for "
+"details."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:33
+msgid ""
+"The name of the property to set. Changing this will clear [member index]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:36
+msgid ""
+"[code]set_mode[/code] determines the target object on which the property "
+"will be set. See [enum CallMode] for options."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:41
+msgid "The property will be set on this [Object]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:44
+msgid "The property will be set on the given [Node] in the scene tree."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:47
+msgid ""
+"The property will be set on an instanced node with the given type and script."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:50
+msgid "The property will be set on a GDScript basic type (e.g. [Vector2])."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:53
+msgid "The property will be assigned regularly."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:56
+msgid ""
+"The value will be added to the property. Equivalent of doing [code]+=[/code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:59
+msgid ""
+"The value will be subtracted from the property. Equivalent of doing [code]-"
+"=[/code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:62
+msgid ""
+"The property will be multiplied by the value. Equivalent of doing [code]*=[/"
+"code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:65
+msgid ""
+"The property will be divided by the value. Equivalent of doing [code]/=[/"
+"code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:68
+msgid ""
+"A modulo operation will be performed on the property and the value. "
+"Equivalent of doing [code]%=[/code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:71
+msgid ""
+"The property will be binarly shifted to the left by the given value. "
+"Equivalent of doing [code]<<[/code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:74
+msgid ""
+"The property will be binarly shifted to the right by the given value. "
+"Equivalent of doing [code]>>[/code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:77
+msgid ""
+"A binary [code]AND[/code] operation will be performed on the property. "
+"Equivalent of doing [code]&=[/code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:80
+msgid ""
+"A binary [code]OR[/code] operation will be performed on the property. "
+"Equivalent of doing [code]|=[/code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:83
+msgid ""
+"A binary [code]XOR[/code] operation will be performed on the property. "
+"Equivalent of doing [code]^=[/code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptReturn.xml:4
+msgid "Exits a function and returns an optional value."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptReturn.xml:7
+msgid ""
+"Ends the execution of a function and returns control to the calling "
+"function. Optionally, it can return a [Variant] value.\n"
+"[b]Input Ports:[/b]\n"
+"- Sequence\n"
+"- Data (variant): [code]result[/code] (optional)\n"
+"[b]Output Ports:[/b]\n"
+"none"
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptReturn.xml:20
+msgid "If [code]true[/code], the [code]return[/code] input port is available."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptReturn.xml:23
+msgid "The return value's data type."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptSceneNode.xml:4
+msgid "Node reference."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptSceneNode.xml:7
+msgid ""
+"A direct reference to a node.\n"
+"[b]Input Ports:[/b]\n"
+"none\n"
+"[b]Output Ports:[/b]\n"
+"- Data: [code]node[/code] (obj)"
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptSceneNode.xml:19
+msgid "The node's path in the scene tree."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptSceneTree.xml:4
+#: modules/visual_script/doc_classes/VisualScriptSceneTree.xml:7
+msgid "A Visual Script node for accessing [SceneTree] methods."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptSelect.xml:4
+msgid "Chooses between two input values."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptSelect.xml:7
+msgid ""
+"Chooses between two input values based on a Boolean condition.\n"
+"[b]Input Ports:[/b]\n"
+"- Data (boolean): [code]cond[/code]\n"
+"- Data (variant): [code]a[/code]\n"
+"- Data (variant): [code]b[/code]\n"
+"[b]Output Ports:[/b]\n"
+"- Data (variant): [code]out[/code]"
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptSelect.xml:21
+msgid "The input variables' type."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptSelf.xml:4
+msgid "Outputs a reference to the current instance."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptSelf.xml:7
+msgid ""
+"Provides a reference to the node running the visual script.\n"
+"[b]Input Ports:[/b]\n"
+"none\n"
+"[b]Output Ports:[/b]\n"
+"- Data (object): [code]instance[/code]"
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptSequence.xml:4
+msgid "Executes a series of Sequence ports."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptSequence.xml:7
+msgid ""
+"Steps through a series of one or more output Sequence ports. The "
+"[code]current[/code] data port outputs the currently executing item.\n"
+"[b]Input Ports:[/b]\n"
+"- Sequence: [code]in order[/code]\n"
+"[b]Output Ports:[/b]\n"
+"- Sequence: [code]1[/code]\n"
+"- Sequence: [code]2 - n[/code] (optional)\n"
+"- Data (int): [code]current[/code]"
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptSequence.xml:21
+msgid "The number of steps in the sequence."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptSubCall.xml:4
+msgid "Calls a method called [code]_subcall[/code] in this object."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptSubCall.xml:7
+msgid ""
+"[VisualScriptSubCall] will call method named [code]_subcall[/code] in the "
+"current script. It will fail if the method doesn't exist or the provided "
+"arguments are wrong."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptSubCall.xml:16
+msgid "Called by this node."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptSwitch.xml:4
+msgid "Branches program flow based on a given input's value."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptSwitch.xml:7
+msgid ""
+"Branches the flow based on an input's value. Use [b]Case Count[/b] in the "
+"Inspector to set the number of branches and each comparison's optional "
+"type.\n"
+"[b]Input Ports:[/b]\n"
+"- Sequence: [code]'input' is[/code]\n"
+"- Data (variant): [code]=[/code]\n"
+"- Data (variant): [code]=[/code] (optional)\n"
+"- Data (variant): [code]input[/code]\n"
+"[b]Output Ports:[/b]\n"
+"- Sequence\n"
+"- Sequence (optional)\n"
+"- Sequence: [code]done[/code]"
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptTypeCast.xml:4
+msgid "A Visual Script node that casts the given value to another type."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptTypeCast.xml:7
+msgid ""
+"[VisualScriptTypeCast] will perform a type conversion to an [Object]-derived "
+"type."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptTypeCast.xml:15
+msgid ""
+"The target script class to be converted to. If none, only the [member "
+"base_type] will be used."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptTypeCast.xml:18
+msgid "The target type to be converted to."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptVariableGet.xml:4
+msgid "Gets a variable's value."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptVariableGet.xml:7
+msgid ""
+"Returns a variable's value. \"Var Name\" must be supplied, with an optional "
+"type.\n"
+"[b]Input Ports:[/b]\n"
+"none\n"
+"[b]Output Ports:[/b]\n"
+"- Data (variant): [code]value[/code]"
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptVariableGet.xml:19
+#: modules/visual_script/doc_classes/VisualScriptVariableSet.xml:20
+msgid "The variable's name."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptVariableSet.xml:4
+msgid "Changes a variable's value."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptVariableSet.xml:7
+msgid ""
+"Changes a variable's value to the given input.\n"
+"[b]Input Ports:[/b]\n"
+"- Sequence\n"
+"- Data (variant): [code]set[/code]\n"
+"[b]Output Ports:[/b]\n"
+"- Sequence"
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptWhile.xml:4
+msgid "Conditional loop."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptWhile.xml:7
+msgid ""
+"Loops while a condition is [code]true[/code]. Execution continues out the "
+"[code]exit[/code] Sequence port when the loop terminates.\n"
+"[b]Input Ports:[/b]\n"
+"- Sequence: [code]while(cond)[/code]\n"
+"- Data (bool): [code]cond[/code]\n"
+"[b]Output Ports:[/b]\n"
+"- Sequence: [code]repeat[/code]\n"
+"- Sequence: [code]exit[/code]"
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptYield.xml:4
+msgid "A Visual Script node used to pause a function execution."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptYield.xml:7
+msgid ""
+"[VisualScriptYield] will pause the function call and return "
+"[VisualScriptFunctionState], which can be used to resume the function."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptYield.xml:15
+msgid ""
+"The mode to use for yielding. See [enum YieldMode] for available options."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptYield.xml:18
+msgid "The time to wait when [member mode] is set to [constant YIELD_WAIT]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptYield.xml:23
+msgid "Yields during an idle frame."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptYield.xml:26
+msgid "Yields during a physics frame."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptYield.xml:29
+msgid "Yields a function and waits the given time."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptYieldSignal.xml:4
+msgid "A Visual Script node yielding for a signal."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptYieldSignal.xml:7
+msgid ""
+"[VisualScriptYieldSignal] will pause the function execution until the "
+"provided signal is emitted."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptYieldSignal.xml:18
+msgid ""
+"[code]call_mode[/code] determines the target object to wait for the signal "
+"emission. See [enum CallMode] for options."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptYieldSignal.xml:24
+msgid "The signal name to be waited for."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptYieldSignal.xml:29
+msgid "A signal from this [Object] will be used."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptYieldSignal.xml:32
+msgid "A signal from the given [Node] in the scene tree will be used."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptYieldSignal.xml:35
+msgid "A signal from an instanced node with the given type will be used."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:4
+msgid "Server for anything visible."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:7
+msgid ""
+"Server for anything visible. The visual server is the API backend for "
+"everything visible. The whole scene system mounts on it to display.\n"
+"The visual server is completely opaque, the internals are entirely "
+"implementation specific and cannot be accessed.\n"
+"The visual server can be used to bypass the scene system entirely.\n"
+"Resources are created using the [code]*_create[/code] functions.\n"
+"All objects are drawn to a viewport. You can use the [Viewport] attached to "
+"the [SceneTree] or you can create one yourself with [method "
+"viewport_create]. When using a custom scenario or canvas, the scenario or "
+"canvas needs to be attached to the viewport using [method "
+"viewport_set_scenario] or [method viewport_attach_canvas].\n"
+"In 3D, all visual objects must be associated with a scenario. The scenario "
+"is a visual representation of the world. If accessing the visual server from "
+"a running game, the scenario can be accessed from the scene tree from any "
+"[Spatial] node with [method Spatial.get_world]. Otherwise, a scenario can be "
+"created with [method scenario_create].\n"
+"Similarly, in 2D, a canvas is needed to draw all canvas items.\n"
+"In 3D, all visible objects are comprised of a resource and an instance. A "
+"resource can be a mesh, a particle system, a light, or any other 3D object. "
+"In order to be visible resources must be attached to an instance using "
+"[method instance_set_base]. The instance must also be attached to the "
+"scenario using [method instance_set_scenario] in order to be visible.\n"
+"In 2D, all visible objects are some form of canvas item. In order to be "
+"visible, a canvas item needs to be the child of a canvas attached to a "
+"viewport, or it needs to be the child of another canvas item that is "
+"eventually attached to the canvas."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:18
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/optimization/using_servers.html"
+msgstr ""
+
+#: doc/classes/VisualServer.xml:28
+msgid "Sets images to be rendered in the window margin."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:38
+msgid ""
+"Sets margin size, where black bars (or images, if [method "
+"black_bars_set_images] was used) are rendered."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:44
+msgid ""
+"Creates a camera and adds it to the VisualServer. It can be accessed with "
+"the RID that is returned. This RID will be used in all [code]camera_*[/code] "
+"VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:53
+msgid ""
+"Sets the cull mask associated with this camera. The cull mask describes "
+"which 3D layers are rendered by this camera. Equivalent to [member Camera."
+"cull_mask]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:61
+msgid ""
+"Sets the environment used by this camera. Equivalent to [member Camera."
+"environment]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:72
+msgid ""
+"Sets camera to use frustum projection. This mode allows adjusting the "
+"[code]offset[/code] argument to create \"tilted frustum\" effects."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:82
+msgid ""
+"Sets camera to use orthogonal projection, also known as orthographic "
+"projection. Objects remain the same size on the screen no matter how far "
+"away they are."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:92
+msgid ""
+"Sets camera to use perspective projection. Objects on the screen becomes "
+"smaller when they are far away."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:100
+msgid "Sets [Transform] of camera."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:108
+msgid ""
+"If [code]true[/code], preserves the horizontal aspect ratio which is "
+"equivalent to [constant Camera.KEEP_WIDTH]. If [code]false[/code], preserves "
+"the vertical aspect ratio which is equivalent to [constant Camera."
+"KEEP_HEIGHT]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:114
+msgid ""
+"Creates a canvas and returns the assigned [RID]. It can be accessed with the "
+"RID that is returned. This RID will be used in all [code]canvas_*[/code] "
+"VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:125
+msgid "Adds a circle command to the [CanvasItem]'s draw commands."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:133
+msgid ""
+"If ignore is [code]true[/code], the VisualServer does not perform clipping."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:145
+msgid "Adds a line command to the [CanvasItem]'s draw commands."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:157
+msgid "Adds a mesh command to the [CanvasItem]'s draw commands."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:167
+msgid ""
+"Adds a [MultiMesh] to the [CanvasItem]'s draw commands. Only affects its "
+"aabb at the moment."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:184
+msgid ""
+"Adds a nine patch image to the [CanvasItem]'s draw commands.\n"
+"See [NinePatchRect] for more explanation."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:195
+msgid "Adds a particle system to the [CanvasItem]'s draw commands."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:208
+msgid "Adds a polygon to the [CanvasItem]'s draw commands."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:219
+msgid ""
+"Adds a polyline, which is a line from multiple points with a width, to the "
+"[CanvasItem]'s draw commands."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:232
+msgid "Adds a primitive to the [CanvasItem]'s draw commands."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:241
+msgid "Adds a rectangle to the [CanvasItem]'s draw commands."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:249
+msgid ""
+"Adds a [Transform2D] command to the [CanvasItem]'s draw commands.\n"
+"This sets the extra_matrix uniform when executed. This affects the later "
+"commands of the canvas item."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:263
+msgid "Adds a textured rect to the [CanvasItem]'s draw commands."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:277
+msgid ""
+"Adds a texture rect with region setting to the [CanvasItem]'s draw commands."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:295
+msgid "Adds a triangle array to the [CanvasItem]'s draw commands."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:302
+msgid "Clears the [CanvasItem] and removes all commands in it."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:308
+msgid ""
+"Creates a new [CanvasItem] and returns its [RID]. It can be accessed with "
+"the RID that is returned. This RID will be used in all [code]canvas_item_*[/"
+"code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:317
+msgid "Sets clipping for the [CanvasItem]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:326
+msgid "Sets the [CanvasItem] to copy a rect to the backbuffer."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:335
+msgid "Defines a custom drawing rectangle for the [CanvasItem]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:343
+msgid ""
+"Enables the use of distance fields for GUI elements that are rendering "
+"distance field based fonts."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:351
+msgid "Sets [CanvasItem] to be drawn behind its parent."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:359
+msgid "Sets the index for the [CanvasItem]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:367 doc/classes/VisualServer.xml:493
+#: doc/classes/VisualServer.xml:549
+msgid ""
+"The light mask. See [LightOccluder2D] for more information on light masks."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:375
+msgid "Sets a new material to the [CanvasItem]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:383
+msgid "Sets the color that modulates the [CanvasItem] and its children."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:391
+msgid ""
+"Sets the parent for the [CanvasItem]. The parent can be another canvas item, "
+"or it can be the root canvas that is attached to the viewport."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:399
+msgid "Sets the color that modulates the [CanvasItem] without children."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:407
+msgid "Sets if [CanvasItem]'s children should be sorted by y-position."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:415
+msgid "Sets the [CanvasItem]'s [Transform2D]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:423
+msgid "Sets if the [CanvasItem] uses its parent's material."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:431
+msgid "Sets if the canvas item (including its children) is visible."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:439
+msgid ""
+"If this is enabled, the Z index of the parent will be added to the "
+"children's Z index."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:447
+msgid ""
+"Sets the [CanvasItem]'s Z index, i.e. its draw order (lower indexes are "
+"drawn first)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:455
+msgid ""
+"Attaches the canvas light to the canvas. Removes it from its previous canvas."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:461
+msgid ""
+"Creates a canvas light and adds it to the VisualServer. It can be accessed "
+"with the RID that is returned. This RID will be used in all "
+"[code]canvas_light_*[/code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:470
+msgid ""
+"Attaches a light occluder to the canvas. Removes it from its previous canvas."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:476
+msgid ""
+"Creates a light occluder and adds it to the VisualServer. It can be accessed "
+"with the RID that is returned. This RID will be used in all "
+"[code]canvas_light_ocluder_*[/code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:485
+msgid "Enables or disables light occluder."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:501
+msgid "Sets a light occluder's polygon."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:509
+msgid "Sets a light occluder's [Transform2D]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:517
+msgid "Sets the color for a light."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:525
+msgid "Enables or disables a canvas light."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:533
+msgid "Sets a canvas light's energy."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:541
+msgid "Sets a canvas light's height."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:557
+msgid ""
+"The binary mask used to determine which layers this canvas light's shadows "
+"affects. See [LightOccluder2D] for more information on light masks."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:566
+msgid "The layer range that gets rendered with this light."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:574
+msgid "The mode of the light, see [enum CanvasLightMode] constants."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:582
+msgid ""
+"Sets the texture's scale factor of the light. Equivalent to [member Light2D."
+"texture_scale]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:590
+msgid ""
+"Sets the width of the shadow buffer, size gets scaled to the next power of "
+"two for this."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:598
+msgid "Sets the color of the canvas light's shadow."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:606
+msgid "Enables or disables the canvas light's shadow."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:614
+msgid ""
+"Sets the canvas light's shadow's filter, see [enum CanvasLightShadowFilter] "
+"constants."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:622
+msgid "Sets the length of the shadow's gradient."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:630
+msgid "Smoothens the shadow. The lower, the smoother."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:638
+msgid ""
+"Sets texture to be used by light. Equivalent to [member Light2D.texture]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:646
+msgid ""
+"Sets the offset of the light's texture. Equivalent to [member Light2D."
+"offset]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:654
+msgid "Sets the canvas light's [Transform2D]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:663
+msgid ""
+"Sets the Z range of objects that will be affected by this light. Equivalent "
+"to [member Light2D.range_z_min] and [member Light2D.range_z_max]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:669
+msgid ""
+"Creates a new light occluder polygon and adds it to the VisualServer. It can "
+"be accessed with the RID that is returned. This RID will be used in all "
+"[code]canvas_occluder_polygon_*[/code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:678
+msgid ""
+"Sets an occluder polygons cull mode. See [enum "
+"CanvasOccluderPolygonCullMode] constants."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:687
+msgid "Sets the shape of the occluder polygon."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:695
+msgid "Sets the shape of the occluder polygon as lines."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:704
+msgid ""
+"A copy of the canvas item will be drawn with a local offset of the mirroring "
+"[Vector2]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:712
+msgid "Modulates all colors in the given canvas."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:718
+msgid ""
+"Creates a directional light and adds it to the VisualServer. It can be "
+"accessed with the RID that is returned. This RID can be used in most "
+"[code]light_*[/code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method.\n"
+"To place in a scene, attach this directional light to an instance using "
+"[method instance_set_base] using the returned RID."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:728
+msgid ""
+"Draws a frame. [i]This method is deprecated[/i], please use [method "
+"force_draw] instead."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:734
+msgid ""
+"Creates an environment and adds it to the VisualServer. It can be accessed "
+"with the RID that is returned. This RID will be used in all "
+"[code]environment_*[/code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:747
+msgid ""
+"Sets the values to be used with the \"Adjustment\" post-process effect. See "
+"[Environment] for more details."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:757
+msgid "Sets the ambient light parameters. See [Environment] for more details."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:765
+msgid ""
+"Sets the [i]BGMode[/i] of the environment. Equivalent to [member Environment."
+"background_mode]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:773
+msgid ""
+"Color displayed for clear areas of the scene (if using Custom color or Color"
+"+Sky background modes)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:781
+msgid "Sets the intensity of the background color."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:789
+msgid "Sets the maximum layer to use if using Canvas background mode."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:801
+msgid ""
+"Sets the values to be used with the \"DoF Far Blur\" post-process effect. "
+"See [Environment] for more details."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:813
+msgid ""
+"Sets the values to be used with the \"DoF Near Blur\" post-process effect. "
+"See [Environment] for more details."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:824
+msgid ""
+"Sets the variables to be used with the scene fog. See [Environment] for more "
+"details."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:837
+msgid ""
+"Sets the variables to be used with the fog depth effect. See [Environment] "
+"for more details."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:848
+msgid ""
+"Sets the variables to be used with the fog height effect. See [Environment] "
+"for more details."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:866
+msgid ""
+"Sets the variables to be used with the \"glow\" post-process effect. See "
+"[Environment] for more details."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:874
+msgid ""
+"Sets the [Sky] to be used as the environment's background when using "
+"[i]BGMode[/i] sky. Equivalent to [member Environment.background_sky]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:882
+msgid ""
+"Sets a custom field of view for the background [Sky]. Equivalent to [member "
+"Environment.background_sky_custom_fov]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:890
+msgid ""
+"Sets the rotation of the background [Sky] expressed as a [Basis]. Equivalent "
+"to [member Environment.background_sky_orientation]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:909
+msgid ""
+"Sets the variables to be used with the \"Screen Space Ambient Occlusion "
+"(SSAO)\" post-process effect. See [Environment] for more details."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:922
+msgid ""
+"Sets the variables to be used with the \"screen space reflections\" post-"
+"process effect. See [Environment] for more details."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:937
+msgid ""
+"Sets the variables to be used with the \"tonemap\" post-process effect. See "
+"[Environment] for more details."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:943
+msgid "Removes buffers and clears testcubes."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:951
+msgid ""
+"Forces a frame to be drawn when the function is called. Drawing a frame "
+"updates all [Viewport]s that are set to update. Use with extreme caution."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:957
+msgid "Synchronizes threads."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:964
+msgid "Tries to free an object in the VisualServer."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:971
+msgid "Returns a certain information, see [enum RenderInfo] for options."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:977
+msgid "Returns the id of the test cube. Creates one if none exists."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:983
+msgid "Returns the id of the test texture. Creates one if none exists."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:989
+msgid ""
+"Returns the name of the video adapter (e.g. \"GeForce GTX 1080/PCIe/"
+"SSE2\").\n"
+"[b]Note:[/b] When running a headless or server binary, this function returns "
+"an empty string."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:996
+msgid ""
+"Returns the vendor of the video adapter (e.g. \"NVIDIA Corporation\").\n"
+"[b]Note:[/b] When running a headless or server binary, this function returns "
+"an empty string."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1003
+msgid "Returns the id of a white texture. Creates one if none exists."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1009
+msgid ""
+"Creates a GI probe and adds it to the VisualServer. It can be accessed with "
+"the RID that is returned. This RID will be used in all [code]gi_probe_*[/"
+"code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method.\n"
+"To place in a scene, attach this GI probe to an instance using [method "
+"instance_set_base] using the returned RID."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1018
+msgid ""
+"Returns the bias value for the GI probe. Bias is used to avoid self "
+"occlusion. Equivalent to [member GIProbeData.bias]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1025
+msgid ""
+"Returns the axis-aligned bounding box that covers the full extent of the GI "
+"probe."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1032
+msgid "Returns the cell size set by [method gi_probe_set_cell_size]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1039
+msgid "Returns the data used by the GI probe."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1046
+msgid ""
+"Returns the dynamic range set for this GI probe. Equivalent to [member "
+"GIProbe.dynamic_range]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1053
+msgid ""
+"Returns the energy multiplier for this GI probe. Equivalent to [member "
+"GIProbe.energy]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1060
+msgid ""
+"Returns the normal bias for this GI probe. Equivalent to [member GIProbe."
+"normal_bias]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1067
+msgid ""
+"Returns the propagation value for this GI probe. Equivalent to [member "
+"GIProbe.propagation]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1074
+msgid "Returns the Transform set by [method gi_probe_set_to_cell_xform]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1081
+msgid ""
+"Returns [code]true[/code] if the GI probe data associated with this GI probe "
+"is compressed. Equivalent to [member GIProbe.compress]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1088
+msgid ""
+"Returns [code]true[/code] if the GI probe is set to interior, meaning it "
+"does not account for sky light. Equivalent to [member GIProbe.interior]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1096
+msgid ""
+"Sets the bias value to avoid self-occlusion. Equivalent to [member GIProbe."
+"bias]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1104
+msgid ""
+"Sets the axis-aligned bounding box that covers the extent of the GI probe."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1112
+msgid "Sets the size of individual cells within the GI probe."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1120
+msgid ""
+"Sets the compression setting for the GI probe data. Compressed data will "
+"take up less space but may look worse. Equivalent to [member GIProbe."
+"compress]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1128
+msgid ""
+"Sets the data to be used in the GI probe for lighting calculations. Normally "
+"this is created and called internally within the [GIProbe] node. You should "
+"not try to set this yourself."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1136
+msgid ""
+"Sets the dynamic range of the GI probe. Dynamic range sets the limit for how "
+"bright lights can be. A smaller range captures greater detail but limits how "
+"bright lights can be. Equivalent to [member GIProbe.dynamic_range]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1144
+msgid ""
+"Sets the energy multiplier for this GI probe. A higher energy makes the "
+"indirect light from the GI probe brighter. Equivalent to [member GIProbe."
+"energy]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1152
+msgid ""
+"Sets the interior value of this GI probe. A GI probe set to interior does "
+"not include the sky when calculating lighting. Equivalent to [member GIProbe."
+"interior]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1160
+msgid ""
+"Sets the normal bias for this GI probe. Normal bias behaves similar to the "
+"other form of bias and may help reduce self-occlusion. Equivalent to [member "
+"GIProbe.normal_bias]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1168
+msgid ""
+"Sets the propagation of light within this GI probe. Equivalent to [member "
+"GIProbe.propagation]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1176
+msgid "Sets the to cell [Transform] for this GI probe."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1182
+msgid ""
+"Returns [code]true[/code] if changes have been made to the VisualServer's "
+"data. [method draw] is usually called if this happens."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1189
+msgid "Not yet implemented. Always returns [code]false[/code]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1196
+msgid ""
+"Returns [code]true[/code] if the OS supports a certain feature. Features "
+"might be [code]s3tc[/code], [code]etc[/code], [code]etc2[/code], "
+"[code]pvrtc[/code] and [code]skinning_fallback[/code].\n"
+"When rendering with GLES2, returns [code]true[/code] with "
+"[code]skinning_fallback[/code] in case the hardware doesn't support the "
+"default GPU skinning process."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1206
+msgid ""
+"Sets up [ImmediateGeometry] internals to prepare for drawing. Equivalent to "
+"[method ImmediateGeometry.begin]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1213
+msgid ""
+"Clears everything that was set up between [method immediate_begin] and "
+"[method immediate_end]. Equivalent to [method ImmediateGeometry.clear]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1221
+msgid ""
+"Sets the color to be used with next vertex. Equivalent to [method "
+"ImmediateGeometry.set_color]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1227
+msgid ""
+"Creates an immediate geometry and adds it to the VisualServer. It can be "
+"accessed with the RID that is returned. This RID will be used in all "
+"[code]immediate_*[/code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method.\n"
+"To place in a scene, attach this immediate geometry to an instance using "
+"[method instance_set_base] using the returned RID."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1236
+msgid ""
+"Ends drawing the [ImmediateGeometry] and displays it. Equivalent to [method "
+"ImmediateGeometry.end]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1243
+msgid "Returns the material assigned to the [ImmediateGeometry]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1251
+msgid ""
+"Sets the normal to be used with next vertex. Equivalent to [method "
+"ImmediateGeometry.set_normal]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1259
+msgid "Sets the material to be used to draw the [ImmediateGeometry]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1267
+msgid ""
+"Sets the tangent to be used with next vertex. Equivalent to [method "
+"ImmediateGeometry.set_tangent]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1275
+msgid ""
+"Sets the UV to be used with next vertex. Equivalent to [method "
+"ImmediateGeometry.set_uv]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1283
+msgid ""
+"Sets the UV2 to be used with next vertex. Equivalent to [method "
+"ImmediateGeometry.set_uv2]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1291
+msgid ""
+"Adds the next vertex using the information provided in advance. Equivalent "
+"to [method ImmediateGeometry.add_vertex]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1299
+msgid ""
+"Adds the next vertex using the information provided in advance. This is a "
+"helper class that calls [method immediate_vertex] under the hood. Equivalent "
+"to [method ImmediateGeometry.add_vertex]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1305
+msgid ""
+"Initializes the visual server. This function is called internally by "
+"platform-dependent code during engine initialization. If called from a "
+"running game, it will not do anything."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1313
+msgid ""
+"Attaches a unique Object ID to instance. Object ID must be attached to "
+"instance for proper culling with [method instances_cull_aabb], [method "
+"instances_cull_convex], and [method instances_cull_ray]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1321
+msgid ""
+"Attaches a skeleton to an instance. Removes the previous skeleton from the "
+"instance."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1327
+msgid ""
+"Creates a visual instance and adds it to the VisualServer. It can be "
+"accessed with the RID that is returned. This RID will be used in all "
+"[code]instance_*[/code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method.\n"
+"An instance is a way of placing a 3D object in the scenario. Objects like "
+"particles, meshes, and reflection probes need to be associated with an "
+"instance to be visible in the scenario using [method instance_set_base]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1337
+msgid ""
+"Creates a visual instance, adds it to the VisualServer, and sets both base "
+"and scenario. It can be accessed with the RID that is returned. This RID "
+"will be used in all [code]instance_*[/code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1346 doc/classes/VisualServer.xml:1365
+#: doc/classes/VisualServer.xml:1592 doc/classes/VisualServer.xml:2673
+msgid "Not implemented in Godot 3.x."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1354
+msgid ""
+"Sets the shadow casting setting to one of [enum ShadowCastingSetting]. "
+"Equivalent to [member GeometryInstance.cast_shadow]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1374
+msgid ""
+"Sets the flag for a given [enum InstanceFlags]. See [enum InstanceFlags] for "
+"more details."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1382
+msgid ""
+"Sets a material that will override the material for all surfaces on the mesh "
+"associated with this instance. Equivalent to [member GeometryInstance."
+"material_override]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1390
+msgid ""
+"Sets the base of the instance. A base can be any of the 3D objects that are "
+"created in the VisualServer that can be displayed. For example, any of the "
+"light types, mesh, multimesh, immediate geometry, particle system, "
+"reflection probe, lightmap capture, and the GI probe are all types that can "
+"be set as the base of an instance in order to be displayed in the scenario."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1399
+msgid "Sets the weight for a given blend shape associated with this instance."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1407
+msgid ""
+"Sets a custom AABB to use when culling objects from the view frustum. "
+"Equivalent to [method GeometryInstance.set_custom_aabb]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1415
+msgid "Function not implemented in Godot 3.x."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1423
+msgid ""
+"Sets a margin to increase the size of the AABB when culling objects from the "
+"view frustum. This allows you to avoid culling objects that fall outside the "
+"view frustum. Equivalent to [member GeometryInstance.extra_cull_margin]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1431
+msgid ""
+"Sets the render layers that this instance will be drawn to. Equivalent to "
+"[member VisualInstance.layers]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1439
+msgid ""
+"Sets the scenario that the instance is in. The scenario is the 3D world that "
+"the objects will be displayed in."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1448
+msgid ""
+"Sets the material of a specific surface. Equivalent to [method MeshInstance."
+"set_surface_material]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1456
+msgid ""
+"Sets the world space transform of the instance. Equivalent to [member "
+"Spatial.transform]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1467
+msgid "Sets the lightmap to use with this instance."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1475
+msgid ""
+"Sets whether an instance is drawn or not. Equivalent to [member Spatial."
+"visible]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1483
+msgid ""
+"Returns an array of object IDs intersecting with the provided AABB. Only "
+"visual 3D nodes are considered, such as [MeshInstance] or "
+"[DirectionalLight]. Use [method @GDScript.instance_from_id] to obtain the "
+"actual nodes. A scenario RID must be provided, which is available in the "
+"[World] you want to query. This forces an update for all resources queued to "
+"update.\n"
+"[b]Warning:[/b] This function is primarily intended for editor usage. For in-"
+"game use cases, prefer physics collision."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1492
+msgid ""
+"Returns an array of object IDs intersecting with the provided convex shape. "
+"Only visual 3D nodes are considered, such as [MeshInstance] or "
+"[DirectionalLight]. Use [method @GDScript.instance_from_id] to obtain the "
+"actual nodes. A scenario RID must be provided, which is available in the "
+"[World] you want to query. This forces an update for all resources queued to "
+"update.\n"
+"[b]Warning:[/b] This function is primarily intended for editor usage. For in-"
+"game use cases, prefer physics collision."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1502
+msgid ""
+"Returns an array of object IDs intersecting with the provided 3D ray. Only "
+"visual 3D nodes are considered, such as [MeshInstance] or "
+"[DirectionalLight]. Use [method @GDScript.instance_from_id] to obtain the "
+"actual nodes. A scenario RID must be provided, which is available in the "
+"[World] you want to query. This forces an update for all resources queued to "
+"update.\n"
+"[b]Warning:[/b] This function is primarily intended for editor usage. For in-"
+"game use cases, prefer physics collision."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1511
+msgid ""
+"If [code]true[/code], this directional light will blend between shadow map "
+"splits resulting in a smoother transition between them. Equivalent to "
+"[member DirectionalLight.directional_shadow_blend_splits]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1519
+msgid ""
+"Sets the shadow depth range mode for this directional light. Equivalent to "
+"[member DirectionalLight.directional_shadow_depth_range]. See [enum "
+"LightDirectionalShadowDepthRangeMode] for options."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1527
+msgid ""
+"Sets the shadow mode for this directional light. Equivalent to [member "
+"DirectionalLight.directional_shadow_mode]. See [enum "
+"LightDirectionalShadowMode] for options."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1535
+msgid ""
+"Sets whether to use vertical or horizontal detail for this omni light. This "
+"can be used to alleviate artifacts in the shadow map. Equivalent to [member "
+"OmniLight.omni_shadow_detail]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1543
+msgid ""
+"Sets whether to use a dual paraboloid or a cubemap for the shadow map. Dual "
+"paraboloid is faster but may suffer from artifacts. Equivalent to [member "
+"OmniLight.omni_shadow_mode]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1551
+msgid ""
+"Sets the bake mode for this light, see [enum LightBakeMode] for options. The "
+"bake mode affects how the light will be baked in [BakedLightmap]s and "
+"[GIProbe]s."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1559
+msgid "Sets the color of the light. Equivalent to [member Light.light_color]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1567
+msgid ""
+"Sets the cull mask for this Light. Lights only affect objects in the "
+"selected layers. Equivalent to [member Light.light_cull_mask]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1575
+msgid ""
+"If [code]true[/code], light will subtract light instead of adding light. "
+"Equivalent to [member Light.light_negative]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1584
+msgid ""
+"Sets the specified light parameter. See [enum LightParam] for options. "
+"Equivalent to [method Light.set_param]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1600
+msgid ""
+"If [code]true[/code], reverses the backface culling of the mesh. This can be "
+"useful when you have a flat mesh that has a light behind it. If you need to "
+"cast a shadow on both sides of the mesh, set the mesh to use double sided "
+"shadows with [method instance_geometry_set_cast_shadows_setting]. Equivalent "
+"to [member Light.shadow_reverse_cull_face]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1608
+msgid ""
+"If [code]true[/code], light will cast shadows. Equivalent to [member Light."
+"shadow_enabled]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1616
+msgid ""
+"Sets the color of the shadow cast by the light. Equivalent to [member Light."
+"shadow_color]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1624
+msgid ""
+"Sets whether GI probes capture light information from this light. "
+"[i]Deprecated method.[/i] Use [method light_set_bake_mode] instead. This "
+"method is only kept for compatibility reasons and calls [method "
+"light_set_bake_mode] internally, setting the bake mode to [constant "
+"LIGHT_BAKE_DISABLED] or [constant LIGHT_BAKE_INDIRECT] depending on the "
+"given parameter."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1630
+msgid ""
+"Creates a lightmap capture and adds it to the VisualServer. It can be "
+"accessed with the RID that is returned. This RID will be used in all "
+"[code]lightmap_capture_*[/code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method.\n"
+"To place in a scene, attach this lightmap capture to an instance using "
+"[method instance_set_base] using the returned RID."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1639
+msgid "Returns the size of the lightmap capture area."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1646
+msgid "Returns the energy multiplier used by the lightmap capture."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1653
+msgid "Returns the octree used by the lightmap capture."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1660
+msgid ""
+"Returns the cell subdivision amount used by this lightmap capture's octree."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1667
+msgid "Returns the cell transform for this lightmap capture's octree."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1674
+msgid "Returns [code]true[/code] if capture is in \"interior\" mode."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1682
+msgid ""
+"Sets the size of the area covered by the lightmap capture. Equivalent to "
+"[member BakedLightmapData.bounds]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1690
+msgid ""
+"Sets the energy multiplier for this lightmap capture. Equivalent to [member "
+"BakedLightmapData.energy]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1698
+msgid ""
+"Sets the \"interior\" mode for this lightmap capture. Equivalent to [member "
+"BakedLightmapData.interior]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1706
+msgid ""
+"Sets the octree to be used by this lightmap capture. This function is "
+"normally used by the [BakedLightmap] node. Equivalent to [member "
+"BakedLightmapData.octree]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1714
+msgid ""
+"Sets the subdivision level of this lightmap capture's octree. Equivalent to "
+"[member BakedLightmapData.cell_subdiv]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1722
+msgid ""
+"Sets the octree cell transform for this lightmap capture's octree. "
+"Equivalent to [member BakedLightmapData.cell_space_transform]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1731
+msgid ""
+"Returns a mesh of a sphere with the given amount of horizontal and vertical "
+"subdivisions."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1737
+msgid ""
+"Creates an empty material and adds it to the VisualServer. It can be "
+"accessed with the RID that is returned. This RID will be used in all "
+"[code]material_*[/code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1746
+msgid "Returns the value of a certain material's parameter."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1754
+msgid ""
+"Returns the default value for the param if available. Otherwise returns an "
+"empty [Variant]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1761
+msgid ""
+"Returns the shader of a certain material's shader. Returns an empty RID if "
+"the material doesn't have a shader."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1769
+msgid "Sets a material's line width."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1777
+msgid "Sets an object's next material."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1786
+msgid "Sets a material's parameter."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1794
+msgid "Sets a material's render priority."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1802
+msgid "Sets a shader material's shader."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1813
+msgid ""
+"Adds a surface generated from the Arrays to a mesh. See [enum PrimitiveType] "
+"constants for types."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1820
+msgid "Removes all surfaces from a mesh."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1826
+msgid ""
+"Creates a new mesh and adds it to the VisualServer. It can be accessed with "
+"the RID that is returned. This RID will be used in all [code]mesh_*[/code] "
+"VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method.\n"
+"To place in a scene, attach this mesh to an instance using [method "
+"instance_set_base] using the returned RID."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1835
+msgid "Returns a mesh's blend shape count."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1842
+msgid "Returns a mesh's blend shape mode."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1849
+msgid "Returns a mesh's custom aabb."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1856
+msgid "Returns a mesh's number of surfaces."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1864
+msgid "Removes a mesh's surface."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1872
+msgid "Sets a mesh's blend shape count."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1880
+msgid "Sets a mesh's blend shape mode."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1888
+msgid "Sets a mesh's custom aabb."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1896
+msgid "Returns a mesh's surface's aabb."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1904
+msgid "Returns a mesh's surface's vertex buffer."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1912
+msgid "Returns a mesh's surface's amount of indices."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1920
+msgid "Returns a mesh's surface's amount of vertices."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1928
+msgid "Returns a mesh's surface's buffer arrays."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1936
+msgid "Returns a mesh's surface's arrays for blend shapes."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1944
+msgid "Returns the format of a mesh's surface."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1954
+msgid "Function is unused in Godot 3.x."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1971
+msgid "Returns a mesh's surface's index buffer."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1979
+msgid "Returns a mesh's surface's material."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1987
+msgid "Returns the primitive type of a mesh's surface."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1995
+msgid "Returns the aabb of a mesh's surface's skeleton."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2004
+msgid "Sets a mesh's surface's material."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2014
+msgid ""
+"Updates a specific region of a vertex buffer for the specified surface. "
+"Warning: this function alters the vertex buffer directly with no safety "
+"mechanisms, you can easily corrupt your mesh."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2025
+msgid ""
+"Allocates space for the multimesh data. Format parameters determine how the "
+"data will be stored by OpenGL. See [enum MultimeshTransformFormat], [enum "
+"MultimeshColorFormat], and [enum MultimeshCustomDataFormat] for usage. "
+"Equivalent to [member MultiMesh.instance_count]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2031
+msgid ""
+"Creates a new multimesh on the VisualServer and returns an [RID] handle. "
+"This RID will be used in all [code]multimesh_*[/code] VisualServer "
+"functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method.\n"
+"To place in a scene, attach this multimesh to an instance using [method "
+"instance_set_base] using the returned RID."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2040
+msgid ""
+"Calculates and returns the axis-aligned bounding box that encloses all "
+"instances within the multimesh."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2047
+msgid "Returns the number of instances allocated for this multimesh."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2054
+msgid ""
+"Returns the RID of the mesh that will be used in drawing this multimesh."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2061
+msgid "Returns the number of visible instances for this multimesh."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2069
+msgid "Returns the color by which the specified instance will be modulated."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2077
+msgid "Returns the custom data associated with the specified instance."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2085
+msgid "Returns the [Transform] of the specified instance."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2093
+msgid ""
+"Returns the [Transform2D] of the specified instance. For use when the "
+"multimesh is set to use 2D transforms."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2102
+msgid ""
+"Sets the color by which this instance will be modulated. Equivalent to "
+"[method MultiMesh.set_instance_color]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2111
+msgid ""
+"Sets the custom data for this instance. Custom data is passed as a [Color], "
+"but is interpreted as a [code]vec4[/code] in the shader. Equivalent to "
+"[method MultiMesh.set_instance_custom_data]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2120
+msgid ""
+"Sets the [Transform] for this instance. Equivalent to [method MultiMesh."
+"set_instance_transform]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2129
+msgid ""
+"Sets the [Transform2D] for this instance. For use when multimesh is used in "
+"2D. Equivalent to [method MultiMesh.set_instance_transform_2d]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2137
+msgid ""
+"Sets all data related to the instances in one go. This is especially useful "
+"when loading the data from disk or preparing the data from GDNative.\n"
+"\n"
+"All data is packed in one large float array. An array may look like this: "
+"Transform for instance 1, color data for instance 1, custom data for "
+"instance 1, transform for instance 2, color data for instance 2, etc.\n"
+"\n"
+"[Transform] is stored as 12 floats, [Transform2D] is stored as 8 floats, "
+"[code]COLOR_8BIT[/code] / [code]CUSTOM_DATA_8BIT[/code] is stored as 1 float "
+"(4 bytes as is) and [code]COLOR_FLOAT[/code] / [code]CUSTOM_DATA_FLOAT[/"
+"code] is stored as 4 floats."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2149
+msgid ""
+"Sets the mesh to be drawn by the multimesh. Equivalent to [member MultiMesh."
+"mesh]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2157
+msgid ""
+"Sets the number of instances visible at a given time. If -1, all instances "
+"that have been allocated are drawn. Equivalent to [member MultiMesh."
+"visible_instance_count]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2163
+msgid ""
+"Creates a new omni light and adds it to the VisualServer. It can be accessed "
+"with the RID that is returned. This RID can be used in most [code]light_*[/"
+"code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method.\n"
+"To place in a scene, attach this omni light to an instance using [method "
+"instance_set_base] using the returned RID."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2171
+msgid ""
+"Creates a particle system and adds it to the VisualServer. It can be "
+"accessed with the RID that is returned. This RID will be used in all "
+"[code]particles_*[/code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method.\n"
+"To place in a scene, attach these particles to an instance using [method "
+"instance_set_base] using the returned RID."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2180
+msgid ""
+"Calculates and returns the axis-aligned bounding box that contains all the "
+"particles. Equivalent to [method Particles.capture_aabb]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2187
+msgid "Returns [code]true[/code] if particles are currently set to emitting."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2194
+msgid ""
+"Returns [code]true[/code] if particles are not emitting and particles are "
+"set to inactive."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2201
+msgid ""
+"Add particle system to list of particle systems that need to be updated. "
+"Update will take place on the next frame, or on the next call to [method "
+"instances_cull_aabb], [method instances_cull_convex], or [method "
+"instances_cull_ray]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2208
+msgid ""
+"Reset the particles on the next update. Equivalent to [method Particles."
+"restart]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2216
+msgid ""
+"Sets the number of particles to be drawn and allocates the memory for them. "
+"Equivalent to [member Particles.amount]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2224
+msgid ""
+"Sets a custom axis-aligned bounding box for the particle system. Equivalent "
+"to [member Particles.visibility_aabb]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2232
+msgid ""
+"Sets the draw order of the particles to one of the named enums from [enum "
+"ParticlesDrawOrder]. See [enum ParticlesDrawOrder] for options. Equivalent "
+"to [member Particles.draw_order]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2241
+msgid ""
+"Sets the mesh to be used for the specified draw pass. Equivalent to [member "
+"Particles.draw_pass_1], [member Particles.draw_pass_2], [member Particles."
+"draw_pass_3], and [member Particles.draw_pass_4]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2249
+msgid ""
+"Sets the number of draw passes to use. Equivalent to [member Particles."
+"draw_passes]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2257
+msgid ""
+"Sets the [Transform] that will be used by the particles when they first emit."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2265
+msgid ""
+"If [code]true[/code], particles will emit over time. Setting to false does "
+"not reset the particles, but only stops their emission. Equivalent to "
+"[member Particles.emitting]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2273
+msgid ""
+"Sets the explosiveness ratio. Equivalent to [member Particles.explosiveness]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2281
+msgid ""
+"Sets the frame rate that the particle system rendering will be fixed to. "
+"Equivalent to [member Particles.fixed_fps]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2289
+msgid ""
+"If [code]true[/code], uses fractional delta which smooths the movement of "
+"the particles. Equivalent to [member Particles.fract_delta]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2297
+msgid ""
+"Sets the lifetime of each particle in the system. Equivalent to [member "
+"Particles.lifetime]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2305
+msgid ""
+"If [code]true[/code], particles will emit once and then stop. Equivalent to "
+"[member Particles.one_shot]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2313
+msgid ""
+"Sets the preprocess time for the particles' animation. This lets you delay "
+"starting an animation until after the particles have begun emitting. "
+"Equivalent to [member Particles.preprocess]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2321
+msgid ""
+"Sets the material for processing the particles.\n"
+"[b]Note:[/b] This is not the material used to draw the materials. Equivalent "
+"to [member Particles.process_material]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2330
+msgid ""
+"Sets the emission randomness ratio. This randomizes the emission of "
+"particles within their phase. Equivalent to [member Particles.randomness]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2338
+msgid ""
+"Sets the speed scale of the particle system. Equivalent to [member Particles."
+"speed_scale]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2346
+msgid ""
+"If [code]true[/code], particles use local coordinates. If [code]false[/code] "
+"they use global coordinates. Equivalent to [member Particles.local_coords]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2352
+msgid ""
+"Creates a reflection probe and adds it to the VisualServer. It can be "
+"accessed with the RID that is returned. This RID will be used in all "
+"[code]reflection_probe_*[/code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method.\n"
+"To place in a scene, attach this reflection probe to an instance using "
+"[method instance_set_base] using the returned RID."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2362
+msgid ""
+"If [code]true[/code], reflections will ignore sky contribution. Equivalent "
+"to [member ReflectionProbe.interior_enable]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2370
+msgid ""
+"Sets the render cull mask for this reflection probe. Only instances with a "
+"matching cull mask will be rendered by this probe. Equivalent to [member "
+"ReflectionProbe.cull_mask]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2378
+msgid ""
+"If [code]true[/code], uses box projection. This can make reflections look "
+"more correct in certain situations. Equivalent to [member ReflectionProbe."
+"box_projection]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2386
+msgid ""
+"If [code]true[/code], computes shadows in the reflection probe. This makes "
+"the reflection much slower to compute. Equivalent to [member ReflectionProbe."
+"enable_shadows]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2394
+msgid ""
+"Sets the size of the area that the reflection probe will capture. Equivalent "
+"to [member ReflectionProbe.extents]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2402
+msgid ""
+"Sets the intensity of the reflection probe. Intensity modulates the strength "
+"of the reflection. Equivalent to [member ReflectionProbe.intensity]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2410
+msgid ""
+"Sets the ambient light color for this reflection probe when set to interior "
+"mode. Equivalent to [member ReflectionProbe.interior_ambient_color]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2418
+msgid ""
+"Sets the energy multiplier for this reflection probes ambient light "
+"contribution when set to interior mode. Equivalent to [member "
+"ReflectionProbe.interior_ambient_energy]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2426
+msgid ""
+"Sets the contribution value for how much the reflection affects the ambient "
+"light for this reflection probe when set to interior mode. Useful so that "
+"ambient light matches the color of the room. Equivalent to [member "
+"ReflectionProbe.interior_ambient_contrib]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2434
+msgid ""
+"Sets the max distance away from the probe an object can be before it is "
+"culled. Equivalent to [member ReflectionProbe.max_distance]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2442
+msgid ""
+"Sets the origin offset to be used when this reflection probe is in box "
+"project mode. Equivalent to [member ReflectionProbe.origin_offset]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2450
+msgid ""
+"Sets how often the reflection probe updates. Can either be once or every "
+"frame. See [enum ReflectionProbeUpdateMode] for options."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2459
+msgid ""
+"Schedules a callback to the corresponding named [code]method[/code] on "
+"[code]where[/code] after a frame has been drawn.\n"
+"The callback method must use only 1 argument which will be called with "
+"[code]userdata[/code]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2466
+msgid ""
+"Creates a scenario and adds it to the VisualServer. It can be accessed with "
+"the RID that is returned. This RID will be used in all [code]scenario_*[/"
+"code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method.\n"
+"The scenario is the 3D world that all the visual instances exist in."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2476
+msgid ""
+"Sets the [enum ScenarioDebugMode] for this scenario. See [enum "
+"ScenarioDebugMode] for options."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2484
+msgid "Sets the environment that will be used with this scenario."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2492
+msgid ""
+"Sets the fallback environment to be used by this scenario. The fallback "
+"environment is used if no environment is set. Internally, this is used by "
+"the editor to provide a default environment."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2501
+msgid ""
+"Sets the size of the reflection atlas shared by all reflection probes in "
+"this scenario."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2511
+msgid ""
+"Sets a boot image. The color defines the background color. If [code]scale[/"
+"code] is [code]true[/code], the image will be scaled to fit the screen size. "
+"If [code]use_filter[/code] is [code]true[/code], the image will be scaled "
+"with linear interpolation. If [code]use_filter[/code] is [code]false[/code], "
+"the image will be scaled with nearest-neighbor interpolation."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2518
+msgid ""
+"If [code]true[/code], the engine will generate wireframes for use with the "
+"wireframe debug mode."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2525
+msgid ""
+"Sets the default clear color which is used when a specific clear color has "
+"not been selected."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2532
+msgid ""
+"Sets the scale to apply to the passage of time for the shaders' [code]TIME[/"
+"code] builtin.\n"
+"The default value is [code]1.0[/code], which means [code]TIME[/code] will "
+"count the real time as it goes by, without narrowing or stretching it."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2540
+msgid "Enables or disables occlusion culling."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2546
+msgid ""
+"Creates an empty shader and adds it to the VisualServer. It can be accessed "
+"with the RID that is returned. This RID will be used in all [code]shader_*[/"
+"code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2554
+msgid "Returns a shader's code."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2562
+msgid "Returns a default texture from a shader searched by name."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2569
+msgid "Returns the parameters of a shader."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2577
+msgid "Sets a shader's code."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2586
+msgid "Sets a shader's default texture. Overwrites the texture given by name."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2595
+msgid "Allocates the GPU buffers for this skeleton."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2603
+msgid "Returns the [Transform] set for a specific bone of this skeleton."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2611
+msgid "Returns the [Transform2D] set for a specific bone of this skeleton."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2620
+msgid "Sets the [Transform] for a specific bone of this skeleton."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2629
+msgid "Sets the [Transform2D] for a specific bone of this skeleton."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2635
+msgid ""
+"Creates a skeleton and adds it to the VisualServer. It can be accessed with "
+"the RID that is returned. This RID will be used in all [code]skeleton_*[/"
+"code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2643
+msgid "Returns the number of bones allocated for this skeleton."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2649
+msgid ""
+"Creates an empty sky and adds it to the VisualServer. It can be accessed "
+"with the RID that is returned. This RID will be used in all [code]sky_*[/"
+"code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2659
+msgid "Sets a sky's texture."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2665
+msgid ""
+"Creates a spot light and adds it to the VisualServer. It can be accessed "
+"with the RID that is returned. This RID can be used in most [code]light_*[/"
+"code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method.\n"
+"To place in a scene, attach this spot light to an instance using [method "
+"instance_set_base] using the returned RID."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2686
+msgid "Allocates the GPU memory for the texture."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2694
+msgid "Binds the texture to a texture slot."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2700
+msgid ""
+"Creates an empty texture and adds it to the VisualServer. It can be accessed "
+"with the RID that is returned. This RID will be used in all [code]texture_*[/"
+"code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2709
+msgid ""
+"Creates a texture, allocates the space for an image, and fills in the image."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2715
+msgid "Returns a list of all the textures and their information."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2723
+msgid ""
+"Returns a copy of a texture's image unless it's a CubeMap, in which case it "
+"returns the [RID] of the image at one of the cubes sides."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2730
+msgid "Returns the depth of the texture."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2737
+msgid "Returns the flags of a texture."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2744
+msgid "Returns the format of the texture's image."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2751
+msgid "Returns the texture's height."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2758
+msgid "Returns the texture's path."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2765
+msgid "Returns the opengl id of the texture's image."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2772
+msgid "Returns the type of the texture, can be any of the [enum TextureType]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2779
+msgid "Returns the texture's width."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2788
+msgid ""
+"Sets the texture's image data. If it's a CubeMap, it sets the image data at "
+"a cube side."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2804
+msgid ""
+"Sets a part of the data for a texture. Warning: this function calls the "
+"underlying graphics API directly and may corrupt your texture if used "
+"improperly."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2812
+msgid "Sets the texture's flags. See [enum TextureFlags] for options."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2820
+msgid "Sets the texture's path."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2827
+msgid ""
+"If [code]true[/code], sets internal processes to shrink all image data to "
+"half the size."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2844
+msgid ""
+"If [code]true[/code], the image will be stored in the texture's images array "
+"if overwritten."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2852
+msgid "Sets a viewport's camera."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2860
+msgid "Sets a viewport's canvas."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2869
+msgid ""
+"Copies viewport to a region of the screen specified by [code]rect[/code]. If "
+"[member Viewport.render_direct_to_screen] is [code]true[/code], then "
+"viewport does not use a framebuffer and the contents of the viewport are "
+"rendered directly to screen. However, note that the root viewport is drawn "
+"last, therefore it will draw over the screen. Accordingly, you must set the "
+"root viewport to an area that does not cover the area that you have attached "
+"this viewport to.\n"
+"For example, you can set the root viewport to not render at all with the "
+"following code:\n"
+"[codeblock]\n"
+"func _ready():\n"
+" get_viewport().set_attach_to_screen_rect(Rect2())\n"
+" $Viewport.set_attach_to_screen_rect(Rect2(0, 0, 600, 600))\n"
+"[/codeblock]\n"
+"Using this can result in significant optimization, especially on lower-end "
+"devices. However, it comes at the cost of having to manage your viewports "
+"manually. For a further optimization see, [method "
+"viewport_set_render_direct_to_screen]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2882
+msgid ""
+"Creates an empty viewport and adds it to the VisualServer. It can be "
+"accessed with the RID that is returned. This RID will be used in all "
+"[code]viewport_*[/code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2890
+msgid "Detaches the viewport from the screen."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2898
+msgid ""
+"Returns a viewport's render information. For options, see the [enum "
+"ViewportRenderInfo] constants."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2905
+msgid "Returns the viewport's last rendered frame."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2913
+msgid "Detaches a viewport from a canvas and vice versa."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2921
+msgid "If [code]true[/code], sets the viewport active, else sets it inactive."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2931
+msgid ""
+"Sets the stacking order for a viewport's canvas.\n"
+"[code]layer[/code] is the actual canvas layer, while [code]sublayer[/code] "
+"specifies the stacking order of the canvas among those in the same layer."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2941
+msgid "Sets the transformation of a viewport's canvas."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2949
+msgid ""
+"Sets the clear mode of a viewport. See [enum ViewportClearMode] for options."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2957
+msgid ""
+"Sets the debug draw mode of a viewport. See [enum ViewportDebugDraw] for "
+"options."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2965
+msgid "If [code]true[/code], a viewport's 3D rendering is disabled."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2973
+msgid ""
+"If [code]true[/code], rendering of a viewport's environment is disabled."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2981
+msgid "Sets the viewport's global transformation matrix."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2989
+msgid "If [code]true[/code], the viewport renders to hdr."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2997
+msgid "If [code]true[/code], the viewport's canvas is not rendered."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3005
+msgid "Currently unimplemented in Godot 3.x."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3013
+msgid "Sets the anti-aliasing mode. See [enum ViewportMSAA] for options."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3021
+msgid "Sets the viewport's parent to another viewport."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3029
+msgid ""
+"If [code]true[/code], render the contents of the viewport directly to "
+"screen. This allows a low-level optimization where you can skip drawing a "
+"viewport to the root viewport. While this optimization can result in a "
+"significant increase in speed (especially on older devices), it comes at a "
+"cost of usability. When this is enabled, you cannot read from the viewport "
+"or from the [code]SCREEN_TEXTURE[/code]. You also lose the benefit of "
+"certain window settings, such as the various stretch modes. Another "
+"consequence to be aware of is that in 2D the rendering happens in window "
+"coordinates, so if you have a viewport that is double the size of the "
+"window, and you set this, then only the portion that fits within the window "
+"will be drawn, no automatic scaling is possible, even if your game scene is "
+"significantly larger than the window size."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3037
+msgid ""
+"Sets a viewport's scenario.\n"
+"The scenario contains information about the [enum ScenarioDebugMode], "
+"environment information, reflection atlas etc."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3047
+msgid "Sets the shadow atlas quadrant's subdivision."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3055
+msgid ""
+"Sets the size of the shadow atlas's images (used for omni and spot lights). "
+"The value will be rounded up to the nearest power of 2."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3063
+msgid ""
+"Sets the sharpening [code]intensity[/code] for the [code]viewport[/code]. If "
+"set to a value greater than [code]0.0[/code], contrast-adaptive sharpening "
+"will be applied to the 3D viewport. This has a low performance cost and can "
+"be used to recover some of the sharpness lost from using FXAA. Values around "
+"[code]0.5[/code] generally give the best results. See also [method "
+"viewport_set_use_fxaa]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3072
+msgid "Sets the viewport's width and height."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3080
+msgid ""
+"If [code]true[/code], the viewport renders its background as transparent."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3088
+msgid ""
+"Sets when the viewport should be updated. See [enum ViewportUpdateMode] "
+"constants for options."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3096
+msgid ""
+"Sets the viewport's 2D/3D mode. See [enum ViewportUsage] constants for "
+"options."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3104
+msgid ""
+"If [code]true[/code], the viewport uses augmented or virtual reality "
+"technologies. See [ARVRInterface]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3112
+msgid ""
+"If [code]true[/code], uses a fast post-processing filter to make banding "
+"significantly less visible. In some cases, debanding may introduce a "
+"slightly noticeable dithering pattern. It's recommended to enable debanding "
+"only when actually needed since the dithering pattern will make lossless-"
+"compressed screenshots larger.\n"
+"[b]Note:[/b] Only available on the GLES3 backend. [member Viewport.hdr] must "
+"also be [code]true[/code] for debanding to be effective."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3121
+msgid ""
+"Enables fast approximate antialiasing for this viewport. FXAA is a popular "
+"screen-space antialiasing method, which is fast but will make the image look "
+"blurry, especially at lower resolutions. It can still work relatively well "
+"at large resolutions such as 1440p and 4K. Some of the lost sharpness can be "
+"recovered by enabling contrast-adaptive sharpening (see [method "
+"viewport_set_sharpen_intensity])."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3129
+msgid "If [code]true[/code], the viewport's rendering is flipped vertically."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3135
+msgid ""
+"If [code]false[/code], disables rendering completely, but the engine logic "
+"is still being processed. You can call [method force_draw] to draw a frame "
+"even with rendering disabled."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3141
+msgid ""
+"Emitted at the end of the frame, after the VisualServer has finished "
+"updating all the Viewports."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3146
+msgid ""
+"Emitted at the beginning of the frame, before the VisualServer updates all "
+"the Viewports."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3152
+msgid "Marks an error that shows that the index array is empty."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3155
+msgid "Number of weights/bones per vertex."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3158
+msgid "The minimum Z-layer for canvas items."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3161
+msgid "The maximum Z-layer for canvas items."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3164
+msgid ""
+"Max number of glow levels that can be used with glow post-process effect."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3167
+msgid "Unused enum in Godot 3.x."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3170
+msgid "The minimum renderpriority of all materials."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3173
+msgid "The maximum renderpriority of all materials."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3176
+msgid "Marks the left side of a cubemap."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3179
+msgid "Marks the right side of a cubemap."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3182
+msgid "Marks the bottom side of a cubemap."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3185
+msgid "Marks the top side of a cubemap."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3188
+msgid "Marks the front side of a cubemap."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3191
+msgid "Marks the back side of a cubemap."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3194
+msgid "Normal texture with 2 dimensions, width and height."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3197
+msgid ""
+"Texture made up of six faces, can be looked up with a [code]vec3[/code] in "
+"shader."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3200
+msgid "An array of 2-dimensional textures."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3203
+msgid "A 3-dimensional texture with width, height, and depth."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3209
+msgid "Repeats the texture (instead of clamp to edge)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3222
+msgid "Repeats the texture with alternate sections mirrored."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3228
+msgid ""
+"Default flags. [constant TEXTURE_FLAG_MIPMAPS], [constant "
+"TEXTURE_FLAG_REPEAT] and [constant TEXTURE_FLAG_FILTER] are enabled."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3231
+msgid "Shader is a 3D shader."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3234
+msgid "Shader is a 2D shader."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3237
+msgid "Shader is a particle shader."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3240
+msgid "Represents the size of the [enum ShaderMode] enum."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3243
+msgid "Array is a vertex array."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3246
+msgid "Array is a normal array."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3249
+msgid "Array is a tangent array."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3252
+msgid "Array is a color array."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3255
+msgid "Array is an UV coordinates array."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3258
+msgid "Array is an UV coordinates array for the second UV coordinates."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3261
+msgid "Array contains bone information."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3264
+msgid "Array is weight information."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3267
+msgid "Array is index array."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3273
+msgid "Flag used to mark a vertex array."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3276
+msgid "Flag used to mark a normal array."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3279
+msgid "Flag used to mark a tangent array."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3282
+msgid "Flag used to mark a color array."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3285
+msgid "Flag used to mark an UV coordinates array."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3288
+msgid ""
+"Flag used to mark an UV coordinates array for the second UV coordinates."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3291
+msgid "Flag used to mark a bone information array."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3294
+msgid "Flag used to mark a weights array."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3297
+msgid "Flag used to mark an index array."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3336
+msgid ""
+"Used to set flags [constant ARRAY_COMPRESS_NORMAL], [constant "
+"ARRAY_COMPRESS_TANGENT], [constant ARRAY_COMPRESS_COLOR], [constant "
+"ARRAY_COMPRESS_TEX_UV], [constant ARRAY_COMPRESS_TEX_UV2], [constant "
+"ARRAY_COMPRESS_WEIGHTS], and [constant "
+"ARRAY_FLAG_USE_OCTAHEDRAL_COMPRESSION] quickly."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3339
+msgid "Primitive to draw consists of points."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3342
+msgid "Primitive to draw consists of lines."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3345
+msgid "Primitive to draw consists of a line strip from start to end."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3348
+msgid ""
+"Primitive to draw consists of a line loop (a line strip with a line between "
+"the last and the first vertex)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3351
+msgid "Primitive to draw consists of triangles."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3354
+msgid ""
+"Primitive to draw consists of a triangle strip (the last 3 vertices are "
+"always combined to make a triangle)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3357
+msgid ""
+"Primitive to draw consists of a triangle strip (the last 2 vertices are "
+"always combined with the first to make a triangle)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3360
+msgid "Represents the size of the [enum PrimitiveType] enum."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3369
+msgid "Is a directional (sun) light."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3372
+msgid "Is an omni light."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3375
+msgid "Is a spot light."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3378
+msgid "The light's energy."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3381
+msgid "Secondary multiplier used with indirect light (light bounces)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3384
+msgid ""
+"The light's size, currently only used for soft shadows in baked lightmaps."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3387
+msgid "The light's influence on specularity."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3390
+msgid "The light's range."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3393
+msgid "The light's attenuation."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3396
+msgid "The spotlight's angle."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3399
+msgid "The spotlight's attenuation."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3402
+msgid "Scales the shadow color."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3405
+msgid "Max distance that shadows will be rendered."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3408
+msgid "Proportion of shadow atlas occupied by the first split."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3411
+msgid "Proportion of shadow atlas occupied by the second split."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3414
+msgid ""
+"Proportion of shadow atlas occupied by the third split. The fourth split "
+"occupies the rest."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3417
+msgid ""
+"Normal bias used to offset shadow lookup by object normal. Can be used to "
+"fix self-shadowing artifacts."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3420
+msgid "Bias the shadow lookup to fix self-shadowing artifacts."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3423
+msgid ""
+"Increases bias on further splits to fix self-shadowing that only occurs far "
+"away from the camera."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3426
+msgid "Represents the size of the [enum LightParam] enum."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3435
+msgid "Use a dual paraboloid shadow map for omni lights."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3438
+msgid ""
+"Use a cubemap shadow map for omni lights. Slower but better quality than "
+"dual paraboloid."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3441
+msgid "Use more detail vertically when computing shadow map."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3444
+msgid "Use more detail horizontally when computing shadow map."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3447
+msgid "Use orthogonal shadow projection for directional light."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3450
+msgid "Use 2 splits for shadow projection when using directional light."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3453
+msgid "Use 4 splits for shadow projection when using directional light."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3456
+msgid ""
+"Keeps shadows stable as camera moves but has lower effective resolution."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3459
+msgid ""
+"Optimize use of shadow maps, increasing the effective resolution. But may "
+"result in shadows moving or flickering slightly."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3462
+msgid "Do not update the viewport."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3465
+msgid "Update the viewport once then set to disabled."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3468
+msgid "Update the viewport whenever it is visible."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3471
+msgid "Always update the viewport."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3474
+msgid "The viewport is always cleared before drawing."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3477
+msgid "The viewport is never cleared before drawing."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3480
+msgid ""
+"The viewport is cleared once, then the clear mode is set to [constant "
+"VIEWPORT_CLEAR_NEVER]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3483
+msgid "Multisample antialiasing is disabled."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3486
+msgid "Multisample antialiasing is set to 2×."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3489
+msgid "Multisample antialiasing is set to 4×."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3492
+msgid "Multisample antialiasing is set to 8×."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3495
+msgid "Multisample antialiasing is set to 16×."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3498
+msgid ""
+"Multisample antialiasing is set to 2× on external texture. Special mode for "
+"GLES2 Android VR (Oculus Quest and Go)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3501
+msgid ""
+"Multisample antialiasing is set to 4× on external texture. Special mode for "
+"GLES2 Android VR (Oculus Quest and Go)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3504
+msgid "The Viewport does not render 3D but samples."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3507
+msgid "The Viewport does not render 3D and does not sample."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3510
+msgid "The Viewport renders 3D with effects."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3513
+msgid "The Viewport renders 3D but without effects."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3516
+msgid "Number of objects drawn in a single frame."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3519
+msgid "Number of vertices drawn in a single frame."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3522
+msgid "Number of material changes during this frame."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3525
+msgid "Number of shader changes during this frame."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3528
+msgid "Number of surface changes during this frame."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3531
+msgid "Number of draw calls during this frame."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3534
+msgid "Number of 2d items drawn this frame."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3537
+msgid "Number of 2d draw calls during this frame."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3540
+msgid "Represents the size of the [enum ViewportRenderInfo] enum."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3543
+msgid "Debug draw is disabled. Default setting."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3546
+msgid "Debug draw sets objects to unshaded."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3549
+msgid "Overwrites clear color to [code](0,0,0,0)[/code]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3552
+msgid "Debug draw draws objects in wireframe."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3555
+msgid "Do not use a debug mode."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3558
+msgid "Draw all objects as wireframe models."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3561
+msgid ""
+"Draw all objects in a way that displays how much overdraw is occurring. "
+"Overdraw occurs when a section of pixels is drawn and shaded and then "
+"another object covers it up. To optimize a scene, you should reduce overdraw."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3564
+msgid ""
+"Draw all objects without shading. Equivalent to setting all objects shaders "
+"to [code]unshaded[/code]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3567
+msgid "The instance does not have a type."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3570
+msgid "The instance is a mesh."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3573
+msgid "The instance is a multimesh."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3576
+msgid "The instance is an immediate geometry."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3579
+msgid "The instance is a particle emitter."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3582
+msgid "The instance is a light."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3585
+msgid "The instance is a reflection probe."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3588
+msgid "The instance is a GI probe."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3591
+msgid "The instance is a lightmap capture."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3594
+msgid "Represents the size of the [enum InstanceType] enum."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3597
+msgid ""
+"A combination of the flags of geometry instances (mesh, multimesh, immediate "
+"and particles)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3600
+msgid "Allows the instance to be used in baked lighting."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3603
+msgid "When set, manually requests to draw geometry on next frame."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3606
+msgid "Represents the size of the [enum InstanceFlags] enum."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3609
+msgid "Disable shadows from this instance."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3612
+msgid "Cast shadows from this instance."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3615
+msgid ""
+"Disable backface culling when rendering the shadow of the object. This is "
+"slightly slower but may result in more correct shadows."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3618
+msgid ""
+"Only render the shadows from the object. The object itself will not be drawn."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3621
+msgid "The nine patch gets stretched where needed."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3624
+msgid "The nine patch gets filled with tiles where needed."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3627
+msgid ""
+"The nine patch gets filled with tiles where needed and stretches them a bit "
+"if needed."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3630
+msgid "Adds light color additive to the canvas."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3633
+msgid "Adds light color subtractive to the canvas."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3636
+msgid "The light adds color depending on transparency."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3639
+msgid "The light adds color depending on mask."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3642
+msgid "Do not apply a filter to canvas light shadows."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3645
+msgid "Use PCF3 filtering to filter canvas light shadows."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3648
+msgid "Use PCF5 filtering to filter canvas light shadows."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3651
+msgid "Use PCF7 filtering to filter canvas light shadows."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3654
+msgid "Use PCF9 filtering to filter canvas light shadows."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3657
+msgid "Use PCF13 filtering to filter canvas light shadows."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3660
+msgid "Culling of the canvas occluder is disabled."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3663
+msgid "Culling of the canvas occluder is clockwise."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3666
+msgid "Culling of the canvas occluder is counterclockwise."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3669
+msgid "The amount of objects in the frame."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3672
+msgid "The amount of vertices in the frame."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3675
+msgid "The amount of modified materials in the frame."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3678
+msgid "The amount of shader rebinds in the frame."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3681
+msgid "The amount of surface changes in the frame."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3684
+msgid "The amount of draw calls in frame."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3687
+msgid "The amount of 2d items in the frame."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3690
+msgid "The amount of 2d draw calls in frame."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3705
+msgid "Hardware supports shaders. This enum is currently unused in Godot 3.x."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3708
+msgid ""
+"Hardware supports multithreading. This enum is currently unused in Godot 3.x."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3711
+msgid "Use [Transform2D] to store MultiMesh transform."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3714
+msgid "Use [Transform] to store MultiMesh transform."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3717
+msgid "MultiMesh does not use per-instance color."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3720
+msgid ""
+"MultiMesh color uses 8 bits per component. This packs the color into a "
+"single float."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3723
+msgid "MultiMesh color uses a float per channel."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3726
+msgid "MultiMesh does not use custom data."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3729
+msgid ""
+"MultiMesh custom data uses 8 bits per component. This packs the 4-component "
+"custom data into a single float."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3732
+msgid "MultiMesh custom data uses a float per component."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3735
+msgid "Reflection probe will update reflections once and then stop."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3738
+msgid ""
+"Reflection probe will update each frame. This mode is necessary to capture "
+"moving objects."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3741
+msgid "Draw particles in the order that they appear in the particles array."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3744
+msgid "Sort particles based on their lifetime."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3747
+msgid "Sort particles based on their distance to the camera."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3750
+msgid "Use the clear color as background."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3753
+msgid "Use a specified color as the background."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3756
+msgid "Use a sky resource for the background."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3759
+msgid ""
+"Use a custom color for background, but use a sky for shading and reflections."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3762
+msgid ""
+"Use a specified canvas layer as the background. This can be useful for "
+"instantiating a 2D scene in a 3D world."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3765
+msgid ""
+"Do not clear the background, use whatever was rendered last frame as the "
+"background."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3768
+msgid "Represents the size of the [enum EnvironmentBG] enum."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3771
+msgid "Use lowest blur quality. Fastest, but may look bad."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3774
+msgid "Use medium blur quality."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3777
+msgid "Used highest blur quality. Looks the best, but is the slowest."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3780
+msgid "Add the effect of the glow on top of the scene."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3783
+msgid ""
+"Blends the glow effect with the screen. Does not get as bright as additive."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3786
+msgid "Produces a subtle color disturbance around objects."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3789
+msgid "Shows the glow effect by itself without the underlying scene."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3792
+msgid "Output color as they came in."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3795
+msgid "Use the Reinhard tonemapper."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3798
+msgid "Use the filmic tonemapper."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3801
+msgid "Use the ACES tonemapper."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3804
+msgid "Use the ACES Fitted tonemapper."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3807
+msgid "Lowest quality of screen space ambient occlusion."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3810
+msgid "Medium quality screen space ambient occlusion."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3813
+msgid "Highest quality screen space ambient occlusion."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3816
+msgid "Disables the blur set for SSAO. Will make SSAO look noisier."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3819
+msgid "Perform a 1x1 blur on the SSAO output."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3822
+msgid "Performs a 2x2 blur on the SSAO output."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3825
+msgid "Performs a 3x3 blur on the SSAO output. Use this for smoothest SSAO."
+msgstr ""
+
+#: doc/classes/VisualShader.xml:4
+msgid "A custom shader program with a visual editor."
+msgstr ""
+
+#: doc/classes/VisualShader.xml:7
+msgid ""
+"This class allows you to define a custom shader program that can be used for "
+"various materials to render objects.\n"
+"The visual shader editor creates the shader."
+msgstr ""
+
+#: doc/classes/VisualShader.xml:20
+msgid "Adds the specified node to the shader."
+msgstr ""
+
+#: doc/classes/VisualShader.xml:31
+msgid ""
+"Returns [code]true[/code] if the specified nodes and ports can be connected "
+"together."
+msgstr ""
+
+#: doc/classes/VisualShader.xml:42 doc/classes/VisualShader.xml:64
+msgid "Connects the specified nodes and ports."
+msgstr ""
+
+#: doc/classes/VisualShader.xml:53
+msgid ""
+"Connects the specified nodes and ports, even if they can't be connected. "
+"Such connection is invalid and will not function properly."
+msgstr ""
+
+#: doc/classes/VisualShader.xml:72
+msgid ""
+"Returns the shader node instance with specified [code]type[/code] and "
+"[code]id[/code]."
+msgstr ""
+
+#: doc/classes/VisualShader.xml:79
+msgid "Returns the list of connected nodes with the specified type."
+msgstr ""
+
+#: doc/classes/VisualShader.xml:86
+msgid "Returns the list of all nodes in the shader with the specified type."
+msgstr ""
+
+#: doc/classes/VisualShader.xml:94
+msgid "Returns the position of the specified node within the shader graph."
+msgstr ""
+
+#: doc/classes/VisualShader.xml:111
+msgid ""
+"Returns [code]true[/code] if the specified node and port connection exist."
+msgstr ""
+
+#: doc/classes/VisualShader.xml:119
+msgid "Removes the specified node from the shader."
+msgstr ""
+
+#: doc/classes/VisualShader.xml:126
+msgid "Sets the mode of this shader."
+msgstr ""
+
+#: doc/classes/VisualShader.xml:135
+msgid "Sets the position of the specified node."
+msgstr ""
+
+#: doc/classes/VisualShader.xml:141
+msgid "The offset vector of the whole graph."
+msgstr ""
+
+#: doc/classes/VisualShader.xml:146
+msgid "A vertex shader, operating on vertices."
+msgstr ""
+
+#: doc/classes/VisualShader.xml:149
+msgid "A fragment shader, operating on fragments (pixels)."
+msgstr ""
+
+#: doc/classes/VisualShader.xml:152
+msgid "A shader for light calculations."
+msgstr ""
+
+#: doc/classes/VisualShader.xml:155
+msgid "Represents the size of the [enum Type] enum."
+msgstr ""
+
+#: doc/classes/VisualShaderNode.xml:4
+msgid "Base class for nodes in a visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNode.xml:7
+msgid ""
+"Visual shader graphs consist of various nodes. Each node in the graph is a "
+"separate object and they are represented as a rectangular boxes with title "
+"and a set of properties. Each node has also connection ports that allow to "
+"connect it to another nodes and control the flow of the shader."
+msgstr ""
+
+#: doc/classes/VisualShaderNode.xml:10
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/shading/visual_shaders.html"
+msgstr ""
+
+#: doc/classes/VisualShaderNode.xml:16
+msgid ""
+"Returns an [Array] containing default values for all of the input ports of "
+"the node in the form [code][index0, value0, index1, value1, ...][/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNode.xml:23
+msgid "Returns the default value of the input [code]port[/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNode.xml:30
+msgid ""
+"Sets the default input ports values using an [Array] of the form [code]"
+"[index0, value0, index1, value1, ...][/code]. For example: [code][0, "
+"Vector3(0, 0, 0), 1, Vector3(0, 0, 0)][/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNode.xml:38
+msgid "Sets the default value for the selected input [code]port[/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNode.xml:44
+msgid ""
+"Sets the output port index which will be showed for preview. If set to "
+"[code]-1[/code] no port will be open for preview."
+msgstr ""
+
+#: doc/classes/VisualShaderNode.xml:50
+msgid ""
+"Emitted when the node requests an editor refresh. Currently called only in "
+"setter of [member VisualShaderNodeTexture.source], "
+"[VisualShaderNodeTexture], and [VisualShaderNodeCubeMap] (and their "
+"derivatives)."
+msgstr ""
+
+#: doc/classes/VisualShaderNode.xml:56
+msgid ""
+"Floating-point scalar. Translated to [code]float[/code] type in shader code."
+msgstr ""
+
+#: doc/classes/VisualShaderNode.xml:59
+msgid ""
+"3D vector of floating-point values. Translated to [code]vec3[/code] type in "
+"shader code."
+msgstr ""
+
+#: doc/classes/VisualShaderNode.xml:62
+msgid "Boolean type. Translated to [code]bool[/code] type in shader code."
+msgstr ""
+
+#: doc/classes/VisualShaderNode.xml:65
+msgid "Transform type. Translated to [code]mat4[/code] type in shader code."
+msgstr ""
+
+#: doc/classes/VisualShaderNode.xml:68
+msgid ""
+"Sampler type. Translated to reference of sampler uniform in shader code. Can "
+"only be used for input ports in non-uniform nodes."
+msgstr ""
+
+#: doc/classes/VisualShaderNode.xml:71
+msgid "Represents the size of the [enum PortType] enum."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeBooleanConstant.xml:4
+msgid "A boolean constant to be used within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeBooleanConstant.xml:7
+msgid ""
+"Has only one output port and no inputs.\n"
+"Translated to [code]bool[/code] in the shader language."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeBooleanConstant.xml:16
+msgid "A boolean constant which represents a state of this node."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeBooleanUniform.xml:4
+msgid "A boolean uniform to be used within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeBooleanUniform.xml:7
+msgid "Translated to [code]uniform bool[/code] in the shader language."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorConstant.xml:4
+msgid "A [Color] constant to be used within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorConstant.xml:7
+msgid ""
+"Has two output ports representing RGB and alpha channels of [Color].\n"
+"Translated to [code]vec3 rgb[/code] and [code]float alpha[/code] in the "
+"shader language."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorConstant.xml:16
+msgid "A [Color] constant which represents a state of this node."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorFunc.xml:4
+msgid "A [Color] function to be used within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorFunc.xml:7
+msgid ""
+"Accept a [Color] to the input port and transform it according to [member "
+"function]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorFunc.xml:15
+msgid ""
+"A function to be applied to the input color. See [enum Function] for options."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorFunc.xml:20
+msgid ""
+"Converts the color to grayscale using the following formula:\n"
+"[codeblock]\n"
+"vec3 c = input;\n"
+"float max1 = max(c.r, c.g);\n"
+"float max2 = max(max1, c.b);\n"
+"float max3 = max(max1, max2);\n"
+"return vec3(max3, max3, max3);\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorFunc.xml:30
+msgid ""
+"Applies sepia tone effect using the following formula:\n"
+"[codeblock]\n"
+"vec3 c = input;\n"
+"float r = (c.r * 0.393) + (c.g * 0.769) + (c.b * 0.189);\n"
+"float g = (c.r * 0.349) + (c.g * 0.686) + (c.b * 0.168);\n"
+"float b = (c.r * 0.272) + (c.g * 0.534) + (c.b * 0.131);\n"
+"return vec3(r, g, b);\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorOp.xml:4
+msgid "A [Color] operator to be used within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorOp.xml:7
+msgid "Applies [member operator] to two color inputs."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorOp.xml:15
+msgid ""
+"An operator to be applied to the inputs. See [enum Operator] for options."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorOp.xml:20
+msgid ""
+"Produce a screen effect with the following formula:\n"
+"[codeblock]\n"
+"result = vec3(1.0) - (vec3(1.0) - a) * (vec3(1.0) - b);\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorOp.xml:26
+msgid ""
+"Produce a difference effect with the following formula:\n"
+"[codeblock]\n"
+"result = abs(a - b);\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorOp.xml:32
+msgid ""
+"Produce a darken effect with the following formula:\n"
+"[codeblock]\n"
+"result = min(a, b);\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorOp.xml:38
+msgid ""
+"Produce a lighten effect with the following formula:\n"
+"[codeblock]\n"
+"result = max(a, b);\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorOp.xml:44
+msgid ""
+"Produce an overlay effect with the following formula:\n"
+"[codeblock]\n"
+"for (int i = 0; i < 3; i++) {\n"
+" float base = a[i];\n"
+" float blend = b[i];\n"
+" if (base < 0.5) {\n"
+" result[i] = 2.0 * base * blend;\n"
+" } else {\n"
+" result[i] = 1.0 - 2.0 * (1.0 - blend) * (1.0 - base);\n"
+" }\n"
+"}\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorOp.xml:58
+msgid ""
+"Produce a dodge effect with the following formula:\n"
+"[codeblock]\n"
+"result = a / (vec3(1.0) - b);\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorOp.xml:64
+msgid ""
+"Produce a burn effect with the following formula:\n"
+"[codeblock]\n"
+"result = vec3(1.0) - (vec3(1.0) - a) / b;\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorOp.xml:70
+msgid ""
+"Produce a soft light effect with the following formula:\n"
+"[codeblock]\n"
+"for (int i = 0; i < 3; i++) {\n"
+" float base = a[i];\n"
+" float blend = b[i];\n"
+" if (base < 0.5) {\n"
+" result[i] = base * (blend + 0.5);\n"
+" } else {\n"
+" result[i] = 1.0 - (1.0 - base) * (1.0 - (blend - 0.5));\n"
+" }\n"
+"}\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorOp.xml:84
+msgid ""
+"Produce a hard light effect with the following formula:\n"
+"[codeblock]\n"
+"for (int i = 0; i < 3; i++) {\n"
+" float base = a[i];\n"
+" float blend = b[i];\n"
+" if (base < 0.5) {\n"
+" result[i] = base * (2.0 * blend);\n"
+" } else {\n"
+" result[i] = 1.0 - (1.0 - base) * (1.0 - 2.0 * (blend - 0.5));\n"
+" }\n"
+"}\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorUniform.xml:4
+msgid "A [Color] uniform to be used within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorUniform.xml:7
+msgid "Translated to [code]uniform vec4[/code] in the shader language."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCompare.xml:4
+msgid "A comparison function for common types within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCompare.xml:7
+msgid ""
+"Compares [code]a[/code] and [code]b[/code] of [member type] by [member "
+"function]. Returns a boolean scalar. Translates to [code]if[/code] "
+"instruction in shader code."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCompare.xml:15
+msgid ""
+"Extra condition which is applied if [member type] is set to [constant "
+"CTYPE_VECTOR]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCompare.xml:18
+msgid "A comparison function. See [enum Function] for options."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCompare.xml:21
+msgid ""
+"The type to be used in the comparison. See [enum ComparisonType] for options."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCompare.xml:26
+msgid "A floating-point scalar."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCompare.xml:29
+msgid "A 3D vector type."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCompare.xml:32
+msgid "A boolean type."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCompare.xml:35
+msgid "A transform ([code]mat4[/code]) type."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCompare.xml:38
+msgid "Comparison for equality ([code]a == b[/code])."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCompare.xml:41
+msgid "Comparison for inequality ([code]a != b[/code])."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCompare.xml:44
+msgid ""
+"Comparison for greater than ([code]a > b[/code]). Cannot be used if [member "
+"type] set to [constant CTYPE_BOOLEAN] or [constant CTYPE_TRANSFORM]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCompare.xml:47
+msgid ""
+"Comparison for greater than or equal ([code]a >= b[/code]). Cannot be used "
+"if [member type] set to [constant CTYPE_BOOLEAN] or [constant "
+"CTYPE_TRANSFORM]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCompare.xml:50
+msgid ""
+"Comparison for less than ([code]a < b[/code]). Cannot be used if [member "
+"type] set to [constant CTYPE_BOOLEAN] or [constant CTYPE_TRANSFORM]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCompare.xml:53
+msgid ""
+"Comparison for less than or equal ([code]a < b[/code]). Cannot be used if "
+"[member type] set to [constant CTYPE_BOOLEAN] or [constant CTYPE_TRANSFORM]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCompare.xml:56
+msgid ""
+"The result will be true if all of component in vector satisfy the comparison "
+"condition."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCompare.xml:59
+msgid ""
+"The result will be true if any of component in vector satisfy the comparison "
+"condition."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCubeMap.xml:4
+msgid "A [CubeMap] sampling node to be used within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCubeMap.xml:7
+msgid ""
+"Translated to [code]texture(cubemap, vec3)[/code] in the shader language. "
+"Returns a color vector and alpha channel as scalar."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCubeMap.xml:15
+msgid ""
+"The [CubeMap] texture to sample when using [constant SOURCE_TEXTURE] as "
+"[member source]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCubeMap.xml:18
+msgid ""
+"Defines which source should be used for the sampling. See [enum Source] for "
+"options."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCubeMap.xml:21
+#: doc/classes/VisualShaderNodeTextureUniform.xml:18
+msgid ""
+"Defines the type of data provided by the source texture. See [enum "
+"TextureType] for options."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCubeMap.xml:26
+msgid ""
+"Use the [CubeMap] set via [member cube_map]. If this is set to [member "
+"source], the [code]samplerCube[/code] port is ignored."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCubeMap.xml:29
+msgid ""
+"Use the [CubeMap] sampler reference passed via the [code]samplerCube[/code] "
+"port. If this is set to [member source], the [member cube_map] texture is "
+"ignored."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCubeMap.xml:32
+#: doc/classes/VisualShaderNodeTexture.xml:44
+#: doc/classes/VisualShaderNodeTextureUniform.xml:23
+msgid "No hints are added to the uniform declaration."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCubeMap.xml:35
+#: doc/classes/VisualShaderNodeTexture.xml:47
+#: doc/classes/VisualShaderNodeTextureUniform.xml:26
+msgid ""
+"Adds [code]hint_albedo[/code] as hint to the uniform declaration for proper "
+"sRGB to linear conversion."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCubeMap.xml:38
+#: doc/classes/VisualShaderNodeTexture.xml:50
+#: doc/classes/VisualShaderNodeTextureUniform.xml:29
+msgid ""
+"Adds [code]hint_normal[/code] as hint to the uniform declaration, which "
+"internally converts the texture for proper usage as normal map."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCubeMapUniform.xml:4
+msgid "A [CubeMap] uniform node to be used within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCubeMapUniform.xml:7
+msgid ""
+"Translated to [code]uniform samplerCube[/code] in the shader language. The "
+"output value can be used as port for [VisualShaderNodeCubeMap]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCustom.xml:4
+msgid ""
+"Virtual class to define custom [VisualShaderNode]s for use in the Visual "
+"Shader Editor."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCustom.xml:7
+msgid ""
+"By inheriting this class you can create a custom [VisualShader] script addon "
+"which will be automatically added to the Visual Shader Editor. The "
+"[VisualShaderNode]'s behavior is defined by overriding the provided virtual "
+"methods.\n"
+"In order for the node to be registered as an editor addon, you must use the "
+"[code]tool[/code] keyword and provide a [code]class_name[/code] for your "
+"custom script. For example:\n"
+"[codeblock]\n"
+"tool\n"
+"extends VisualShaderNodeCustom\n"
+"class_name VisualShaderNodeNoise\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCustom.xml:16
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/plugins/editor/"
+"visual_shader_plugins.html"
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCustom.xml:22
+msgid ""
+"Override this method to define the category of the associated custom node in "
+"the Visual Shader Editor's members dialog. The path may look like "
+"[code]\"MyGame/MyFunctions/Noise\"[/code].\n"
+"Defining this method is [b]optional[/b]. If not overridden, the node will be "
+"filed under the \"Custom\" category."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCustom.xml:33
+msgid ""
+"Override this method to define the actual shader code of the associated "
+"custom node. The shader code should be returned as a string, which can have "
+"multiple lines (the [code]\"\"\"[/code] multiline string construct can be "
+"used for convenience).\n"
+"The [code]input_vars[/code] and [code]output_vars[/code] arrays contain the "
+"string names of the various input and output variables, as defined by "
+"[code]_get_input_*[/code] and [code]_get_output_*[/code] virtual methods in "
+"this class.\n"
+"The output ports can be assigned values in the shader code. For example, "
+"[code]return output_vars[0] + \" = \" + input_vars[0] + \";\"[/code].\n"
+"You can customize the generated code based on the shader [code]mode[/code] "
+"(see [enum Shader.Mode]) and/or [code]type[/code] (see [enum VisualShader."
+"Type]).\n"
+"Defining this method is [b]required[/b]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCustom.xml:43
+msgid ""
+"Override this method to define the description of the associated custom node "
+"in the Visual Shader Editor's members dialog.\n"
+"Defining this method is [b]optional[/b]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCustom.xml:51
+msgid ""
+"Override this method to add shader code on top of the global shader, to "
+"define your own standard library of reusable methods, varyings, constants, "
+"uniforms, etc. The shader code should be returned as a string, which can "
+"have multiple lines (the [code]\"\"\"[/code] multiline string construct can "
+"be used for convenience).\n"
+"Be careful with this functionality as it can cause name conflicts with other "
+"custom nodes, so be sure to give the defined entities unique names.\n"
+"You can customize the generated code based on the shader [code]mode[/code] "
+"(see [enum Shader.Mode]).\n"
+"Defining this method is [b]optional[/b]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCustom.xml:60
+msgid ""
+"Override this method to define the amount of input ports of the associated "
+"custom node.\n"
+"Defining this method is [b]required[/b]. If not overridden, the node has no "
+"input ports."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCustom.xml:68
+msgid ""
+"Override this method to define the names of input ports of the associated "
+"custom node. The names are used both for the input slots in the editor and "
+"as identifiers in the shader code, and are passed in the [code]input_vars[/"
+"code] array in [method _get_code].\n"
+"Defining this method is [b]optional[/b], but recommended. If not overridden, "
+"input ports are named as [code]\"in\" + str(port)[/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCustom.xml:76
+msgid ""
+"Override this method to define the returned type of each input port of the "
+"associated custom node (see [enum VisualShaderNode.PortType] for possible "
+"types).\n"
+"Defining this method is [b]optional[/b], but recommended. If not overridden, "
+"input ports will return the [constant VisualShaderNode.PORT_TYPE_SCALAR] "
+"type."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCustom.xml:83
+msgid ""
+"Override this method to define the name of the associated custom node in the "
+"Visual Shader Editor's members dialog and graph.\n"
+"Defining this method is [b]optional[/b], but recommended. If not overridden, "
+"the node will be named as \"Unnamed\"."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCustom.xml:90
+msgid ""
+"Override this method to define the amount of output ports of the associated "
+"custom node.\n"
+"Defining this method is [b]required[/b]. If not overridden, the node has no "
+"output ports."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCustom.xml:98
+msgid ""
+"Override this method to define the names of output ports of the associated "
+"custom node. The names are used both for the output slots in the editor and "
+"as identifiers in the shader code, and are passed in the [code]output_vars[/"
+"code] array in [method _get_code].\n"
+"Defining this method is [b]optional[/b], but recommended. If not overridden, "
+"output ports are named as [code]\"out\" + str(port)[/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCustom.xml:106
+msgid ""
+"Override this method to define the returned type of each output port of the "
+"associated custom node (see [enum VisualShaderNode.PortType] for possible "
+"types).\n"
+"Defining this method is [b]optional[/b], but recommended. If not overridden, "
+"output ports will return the [constant VisualShaderNode.PORT_TYPE_SCALAR] "
+"type."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCustom.xml:113
+msgid ""
+"Override this method to define the return icon of the associated custom node "
+"in the Visual Shader Editor's members dialog.\n"
+"Defining this method is [b]optional[/b]. If not overridden, no return icon "
+"is shown."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCustom.xml:120
+msgid ""
+"Override this method to define the subcategory of the associated custom node "
+"in the Visual Shader Editor's members dialog.\n"
+"Defining this method is [b]optional[/b]. If not overridden, the node will be "
+"filed under the root of the main category (see [method _get_category])."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeDeterminant.xml:4
+msgid ""
+"Calculates the determinant of a [Transform] within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeDeterminant.xml:7
+msgid "Translates to [code]determinant(x)[/code] in the shader language."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeDotProduct.xml:4
+msgid "Calculates a dot product of two vectors within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeDotProduct.xml:7
+msgid "Translates to [code]dot(a, b)[/code] in the shader language."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeExpression.xml:4
+msgid ""
+"A custom visual shader graph expression written in Godot Shading Language."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeExpression.xml:7
+msgid ""
+"Custom Godot Shading Language expression, with a custom amount of input and "
+"output ports.\n"
+"The provided code is directly injected into the graph's matching shader "
+"function ([code]vertex[/code], [code]fragment[/code], or [code]light[/"
+"code]), so it cannot be used to declare functions, varyings, uniforms, or "
+"global constants. See [VisualShaderNodeGlobalExpression] for such global "
+"definitions."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeExpression.xml:16
+msgid ""
+"An expression in Godot Shading Language, which will be injected at the start "
+"of the graph's matching shader function ([code]vertex[/code], "
+"[code]fragment[/code], or [code]light[/code]), and thus cannot be used to "
+"declare functions, varyings, uniforms, or global constants."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeFaceForward.xml:4
+msgid ""
+"Returns the vector that points in the same direction as a reference vector "
+"within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeFaceForward.xml:7
+msgid ""
+"Translates to [code]faceforward(N, I, Nref)[/code] in the shader language. "
+"The function has three vector parameters: [code]N[/code], the vector to "
+"orient, [code]I[/code], the incident vector, and [code]Nref[/code], the "
+"reference vector. If the dot product of [code]I[/code] and [code]Nref[/code] "
+"is smaller than zero the return value is [code]N[/code]. Otherwise, [code]-"
+"N[/code] is returned."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeFresnel.xml:4
+msgid "A Fresnel effect to be used within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeFresnel.xml:7
+msgid ""
+"Returns falloff based on the dot product of surface normal and view "
+"direction of camera (pass associated inputs to it)."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGlobalExpression.xml:4
+msgid ""
+"A custom global visual shader graph expression written in Godot Shading "
+"Language."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGlobalExpression.xml:7
+msgid ""
+"Custom Godot Shader Language expression, which is placed on top of the "
+"generated shader. You can place various function definitions inside to call "
+"later in [VisualShaderNodeExpression]s (which are injected in the main "
+"shader functions). You can also declare varyings, uniforms and global "
+"constants."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:4
+msgid ""
+"Base class for a family of nodes with variable amount of input and output "
+"ports within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:7
+msgid "Currently, has no direct usage, use the derived classes instead."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:18
+msgid ""
+"Adds an input port with the specified [code]type[/code] (see [enum "
+"VisualShaderNode.PortType]) and [code]name[/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:27
+msgid ""
+"Adds an output port with the specified [code]type[/code] (see [enum "
+"VisualShaderNode.PortType]) and [code]name[/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:33
+msgid "Removes all previously specified input ports."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:39
+msgid "Removes all previously specified output ports."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:45
+msgid ""
+"Returns a free input port ID which can be used in [method add_input_port]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:51
+msgid ""
+"Returns a free output port ID which can be used in [method add_output_port]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:57
+msgid ""
+"Returns the number of input ports in use. Alternative for [method "
+"get_free_input_port_id]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:63
+msgid ""
+"Returns a [String] description of the input ports as a colon-separated list "
+"using the format [code]id,type,name;[/code] (see [method add_input_port])."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:69
+msgid ""
+"Returns the number of output ports in use. Alternative for [method "
+"get_free_output_port_id]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:75
+msgid ""
+"Returns a [String] description of the output ports as a colon-separated list "
+"using the format [code]id,type,name;[/code] (see [method add_output_port])."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:82
+msgid "Returns [code]true[/code] if the specified input port exists."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:89
+msgid "Returns [code]true[/code] if the specified output port exists."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:96
+msgid ""
+"Returns [code]true[/code] if the specified port name does not override an "
+"existed port name and is valid within the shader."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:103
+msgid "Removes the specified input port."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:110
+msgid "Removes the specified output port."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:118
+msgid "Renames the specified input port."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:126
+msgid ""
+"Sets the specified input port's type (see [enum VisualShaderNode.PortType])."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:133
+msgid ""
+"Defines all input ports using a [String] formatted as a colon-separated "
+"list: [code]id,type,name;[/code] (see [method add_input_port])."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:141
+msgid "Renames the specified output port."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:149
+msgid ""
+"Sets the specified output port's type (see [enum VisualShaderNode.PortType])."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:156
+msgid ""
+"Defines all output ports using a [String] formatted as a colon-separated "
+"list: [code]id,type,name;[/code] (see [method add_output_port])."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:162
+msgid "The size of the node in the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeInput.xml:6
+msgid ""
+"Gives access to input variables (built-ins) available for the shader. See "
+"the shading reference for the list of available built-ins for each shader "
+"type (check [code]Tutorials[/code] section for link)."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeInput.xml:9
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/shading/shading_reference/"
+"index.html"
+msgstr ""
+
+#: doc/classes/VisualShaderNodeInput.xml:20
+msgid ""
+"One of the several input constants in lower-case style like: \"vertex"
+"\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeIs.xml:4
+msgid ""
+"A boolean comparison operator to be used within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeIs.xml:7
+msgid ""
+"Returns the boolean result of the comparison between [code]INF[/code] or "
+"[code]NaN[/code] and a scalar parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeIs.xml:15
+msgid "The comparison function. See [enum Function] for options."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeIs.xml:20
+msgid "Comparison with [code]INF[/code] (Infinity)."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeIs.xml:23
+msgid ""
+"Comparison with [code]NaN[/code] (Not a Number; denotes invalid numeric "
+"results, e.g. division by zero)."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeOuterProduct.xml:4
+msgid ""
+"Calculates an outer product of two vectors within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeOuterProduct.xml:7
+msgid ""
+"[code]OuterProduct[/code] treats the first parameter [code]c[/code] as a "
+"column vector (matrix with one column) and the second parameter [code]r[/"
+"code] as a row vector (matrix with one row) and does a linear algebraic "
+"matrix multiply [code]c * r[/code], yielding a matrix whose number of rows "
+"is the number of components in [code]c[/code] and whose number of columns is "
+"the number of components in [code]r[/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeOutput.xml:4
+msgid "Represents the output shader parameters within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeOutput.xml:7
+msgid ""
+"This visual shader node is present in all shader graphs in form of \"Output"
+"\" block with multiple output value ports."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeScalarClamp.xml:4
+msgid "Clamps a scalar value within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeScalarClamp.xml:7
+msgid ""
+"Constrains a value to lie between [code]min[/code] and [code]max[/code] "
+"values."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeScalarDerivativeFunc.xml:4
+msgid "Calculates a scalar derivative within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeScalarDerivativeFunc.xml:7
+#: doc/classes/VisualShaderNodeVectorDerivativeFunc.xml:7
+msgid ""
+"This node is only available in [code]Fragment[/code] and [code]Light[/code] "
+"visual shaders."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeScalarDerivativeFunc.xml:15
+msgid "The derivative type. See [enum Function] for options."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeScalarDerivativeFunc.xml:20
+#: doc/classes/VisualShaderNodeVectorDerivativeFunc.xml:20
+msgid "Sum of absolute derivative in [code]x[/code] and [code]y[/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeScalarDerivativeFunc.xml:23
+#: doc/classes/VisualShaderNodeVectorDerivativeFunc.xml:23
+msgid "Derivative in [code]x[/code] using local differencing."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeScalarDerivativeFunc.xml:26
+#: doc/classes/VisualShaderNodeVectorDerivativeFunc.xml:26
+msgid "Derivative in [code]y[/code] using local differencing."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeScalarInterp.xml:4
+msgid ""
+"Linearly interpolates between two scalars within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeScalarInterp.xml:7
+msgid "Translates to [code]mix(a, b, weight)[/code] in the shader language."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeScalarSmoothStep.xml:4
+msgid "Calculates a scalar SmoothStep function within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeScalarSmoothStep.xml:7
+msgid ""
+"Translates to [code]smoothstep(edge0, edge1, x)[/code] in the shader "
+"language.\n"
+"Returns [code]0.0[/code] if [code]x[/code] is smaller than [code]edge0[/"
+"code] and [code]1.0[/code] if [code]x[/code] is larger than [code]edge1[/"
+"code]. Otherwise the return value is interpolated between [code]0.0[/code] "
+"and [code]1.0[/code] using Hermite polynomials."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeScalarSwitch.xml:4
+msgid "A boolean/scalar function for use within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeScalarSwitch.xml:7
+msgid ""
+"Returns an associated scalar if the provided boolean value is [code]true[/"
+"code] or [code]false[/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeSwitch.xml:4
+msgid "A boolean/vector function for use within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeSwitch.xml:7
+msgid ""
+"Returns an associated vector if the provided boolean value is [code]true[/"
+"code] or [code]false[/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTexture.xml:4
+msgid "Performs a texture lookup within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTexture.xml:7
+msgid ""
+"Performs a lookup operation on the provided texture, with support for "
+"multiple texture sources to choose from."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTexture.xml:15
+msgid "Determines the source for the lookup. See [enum Source] for options."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTexture.xml:18
+msgid "The source texture, if needed for the selected [member source]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTexture.xml:21
+msgid ""
+"Specifies the type of the texture if [member source] is set to [constant "
+"SOURCE_TEXTURE]. See [enum TextureType] for options."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTexture.xml:26
+msgid "Use the texture given as an argument for this function."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTexture.xml:29
+msgid "Use the current viewport's texture as the source."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTexture.xml:32
+msgid ""
+"Use the texture from this shader's texture built-in (e.g. a texture of a "
+"[Sprite])."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTexture.xml:35
+msgid "Use the texture from this shader's normal map built-in."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTexture.xml:38
+msgid "Use the depth texture available for this shader."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTexture.xml:41
+msgid "Use the texture provided in the input port for this function."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTextureUniform.xml:4
+msgid "Performs a uniform texture lookup within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTextureUniform.xml:7
+msgid ""
+"Performs a lookup operation on the texture provided as a uniform for the "
+"shader."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTextureUniform.xml:15
+msgid "Sets the default color if no texture is assigned to the uniform."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTextureUniform.xml:32
+msgid ""
+"Adds [code]hint_aniso[/code] as hint to the uniform declaration to use for a "
+"flowmap."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTextureUniform.xml:35
+msgid "Defaults to white color."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTextureUniform.xml:38
+msgid "Defaults to black color."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTextureUniformTriplanar.xml:4
+msgid ""
+"Performs a uniform texture lookup with triplanar within the visual shader "
+"graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTextureUniformTriplanar.xml:7
+msgid ""
+"Performs a lookup operation on the texture provided as a uniform for the "
+"shader, with support for triplanar mapping."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformCompose.xml:4
+msgid ""
+"Composes a [Transform] from four [Vector3]s within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformCompose.xml:7
+msgid ""
+"Creates a 4x4 transform matrix using four vectors of type [code]vec3[/code]. "
+"Each vector is one row in the matrix and the last column is a [code]vec4(0, "
+"0, 0, 1)[/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformConstant.xml:4
+msgid "A [Transform] constant for use within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformConstant.xml:7
+msgid "A constant [Transform], which can be used as an input node."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformConstant.xml:15
+msgid "A [Transform] constant which represents the state of this node."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformDecompose.xml:4
+msgid ""
+"Decomposes a [Transform] into four [Vector3]s within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformDecompose.xml:7
+msgid ""
+"Takes a 4x4 transform matrix and decomposes it into four [code]vec3[/code] "
+"values, one from each row of the matrix."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformFunc.xml:4
+msgid "Computes a [Transform] function within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformFunc.xml:7
+msgid "Computes an inverse or transpose function on the provided [Transform]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformFunc.xml:15
+msgid "The function to be computed. See [enum Function] for options."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformFunc.xml:20
+msgid "Perform the inverse operation on the [Transform] matrix."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformFunc.xml:23
+msgid "Perform the transpose operation on the [Transform] matrix."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformMult.xml:4
+msgid "Multiplies [Transform] by [Transform] within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformMult.xml:7
+msgid ""
+"A multiplication operation on two transforms (4x4 matrices), with support "
+"for different multiplication operators."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformMult.xml:15
+msgid ""
+"The multiplication type to be performed on the transforms. See [enum "
+"Operator] for options."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformMult.xml:20
+msgid "Multiplies transform [code]a[/code] by the transform [code]b[/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformMult.xml:23
+msgid "Multiplies transform [code]b[/code] by the transform [code]a[/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformMult.xml:26
+msgid ""
+"Performs a component-wise multiplication of transform [code]a[/code] by the "
+"transform [code]b[/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformMult.xml:29
+msgid ""
+"Performs a component-wise multiplication of transform [code]b[/code] by the "
+"transform [code]a[/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformUniform.xml:4
+msgid "A [Transform] uniform for use within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformUniform.xml:7
+msgid "Translated to [code]uniform mat4[/code] in the shader language."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformVecMult.xml:4
+msgid ""
+"Multiplies a [Transform] and a [Vector3] within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformVecMult.xml:7
+msgid ""
+"A multiplication operation on a transform (4x4 matrix) and a vector, with "
+"support for different multiplication operators."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformVecMult.xml:15
+msgid ""
+"The multiplication type to be performed. See [enum Operator] for options."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformVecMult.xml:20
+msgid "Multiplies transform [code]a[/code] by the vector [code]b[/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformVecMult.xml:23
+msgid "Multiplies vector [code]b[/code] by the transform [code]a[/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformVecMult.xml:26
+msgid ""
+"Multiplies transform [code]a[/code] by the vector [code]b[/code], skipping "
+"the last row and column of the transform."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformVecMult.xml:29
+msgid ""
+"Multiplies vector [code]b[/code] by the transform [code]a[/code], skipping "
+"the last row and column of the transform."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeUniform.xml:4
+msgid "A base type for the uniforms within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeUniform.xml:7
+msgid ""
+"A uniform represents a variable in the shader which is set externally, i.e. "
+"from the [ShaderMaterial]. Uniforms are exposed as properties in the "
+"[ShaderMaterial] and can be assigned from the inspector or from a script."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeUniform.xml:15
+msgid ""
+"Name of the uniform, by which it can be accessed through the "
+"[ShaderMaterial] properties."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeUniformRef.xml:4
+msgid "A reference to an existing [VisualShaderNodeUniform]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeUniformRef.xml:7
+msgid ""
+"Creating a reference to a [VisualShaderNodeUniform] allows you to reuse this "
+"uniform in different shaders or shader stages easily."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeUniformRef.xml:15
+msgid "The name of the uniform which this reference points to."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVec3Constant.xml:4
+msgid "A [Vector3] constant to be used within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVec3Constant.xml:7
+msgid "A constant [Vector3], which can be used as an input node."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVec3Constant.xml:15
+msgid "A [Vector3] constant which represents the state of this node."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVec3Uniform.xml:4
+msgid "A [Vector3] uniform to be used within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVec3Uniform.xml:7
+msgid "Translated to [code]uniform vec3[/code] in the shader language."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorClamp.xml:4
+msgid "Clamps a vector value within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorClamp.xml:7
+msgid ""
+"Constrains a value to lie between [code]min[/code] and [code]max[/code] "
+"values. The operation is performed on each component of the vector "
+"individually."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorCompose.xml:4
+msgid "Composes a [Vector3] from three scalars within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorCompose.xml:7
+msgid ""
+"Creates a [code]vec3[/code] using three scalar values that can be provided "
+"from separate inputs."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorDecompose.xml:4
+msgid ""
+"Decomposes a [Vector3] into three scalars within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorDecompose.xml:7
+msgid ""
+"Takes a [code]vec3[/code] and decomposes it into three scalar values that "
+"can be used as separate inputs."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorDerivativeFunc.xml:4
+msgid "Calculates a vector derivative within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorDerivativeFunc.xml:15
+msgid "A derivative type. See [enum Function] for options."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorDistance.xml:4
+msgid ""
+"Returns the distance between two points. To be used within the visual shader "
+"graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorDistance.xml:7
+msgid ""
+"Calculates distance from point represented by vector [code]p0[/code] to "
+"vector [code]p1[/code].\n"
+"Translated to [code]distance(p0, p1)[/code] in the shader language."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:4
+msgid "A vector function to be used within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:7
+msgid "A visual shader node able to perform different functions using vectors."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:15
+msgid "The function to be performed. See [enum Function] for options."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:20
+msgid ""
+"Normalizes the vector so that it has a length of [code]1[/code] but points "
+"in the same direction."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:23
+msgid "Clamps the value between [code]0.0[/code] and [code]1.0[/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:26
+msgid "Returns the opposite value of the parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:29
+msgid "Returns [code]1/vector[/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:32
+msgid "Converts RGB vector to HSV equivalent."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:35
+msgid "Converts HSV vector to RGB equivalent."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:38
+msgid "Returns the absolute value of the parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:41
+msgid "Returns the arc-cosine of the parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:44
+msgid "Returns the inverse hyperbolic cosine of the parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:47
+msgid "Returns the arc-sine of the parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:50
+msgid "Returns the inverse hyperbolic sine of the parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:53
+msgid "Returns the arc-tangent of the parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:56
+msgid "Returns the inverse hyperbolic tangent of the parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:59
+msgid ""
+"Finds the nearest integer that is greater than or equal to the parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:62
+msgid "Returns the cosine of the parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:65
+msgid "Returns the hyperbolic cosine of the parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:68
+msgid "Converts a quantity in radians to degrees."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:71
+msgid "Base-e Exponential."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:74
+msgid "Base-2 Exponential."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:77
+msgid "Finds the nearest integer less than or equal to the parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:80
+msgid "Computes the fractional part of the argument."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:83
+msgid "Returns the inverse of the square root of the parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:86
+msgid "Natural logarithm."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:89
+msgid "Base-2 logarithm."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:92
+msgid "Converts a quantity in degrees to radians."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:95
+msgid "Finds the nearest integer to the parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:98
+msgid "Finds the nearest even integer to the parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:101
+msgid ""
+"Extracts the sign of the parameter, i.e. returns [code]-1[/code] if the "
+"parameter is negative, [code]1[/code] if it's positive and [code]0[/code] "
+"otherwise."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:104
+msgid "Returns the sine of the parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:107
+msgid "Returns the hyperbolic sine of the parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:110
+msgid "Returns the square root of the parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:113
+msgid "Returns the tangent of the parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:116
+msgid "Returns the hyperbolic tangent of the parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:119
+msgid ""
+"Returns a value equal to the nearest integer to the parameter whose absolute "
+"value is not larger than the absolute value of the parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:122
+msgid "Returns [code]1.0 - vector[/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorInterp.xml:4
+msgid ""
+"Linearly interpolates between two vectors within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorInterp.xml:7
+msgid ""
+"Translates to [code]mix(a, b, weight)[/code] in the shader language, where "
+"[code]weight[/code] is a [Vector3] with weights for each component."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorLen.xml:4
+msgid "Returns the length of a [Vector3] within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorLen.xml:7
+msgid "Translated to [code]length(p0)[/code] in the shader language."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorOp.xml:4
+msgid "A vector operator to be used within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorOp.xml:7
+msgid ""
+"A visual shader node for use of vector operators. Operates on vector "
+"[code]a[/code] and vector [code]b[/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorOp.xml:15
+msgid "The operator to be used. See [enum Operator] for options."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorOp.xml:20
+msgid "Adds two vectors."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorOp.xml:23
+msgid "Subtracts a vector from a vector."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorOp.xml:26
+msgid "Multiplies two vectors."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorOp.xml:29
+msgid "Divides vector by vector."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorOp.xml:32
+msgid "Returns the remainder of the two vectors."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorOp.xml:35
+msgid ""
+"Returns the value of the first parameter raised to the power of the second, "
+"for each component of the vectors."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorOp.xml:38
+msgid "Returns the greater of two values, for each component of the vectors."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorOp.xml:41
+msgid "Returns the lesser of two values, for each component of the vectors."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorOp.xml:44
+msgid "Calculates the cross product of two vectors."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorOp.xml:47
+msgid "Returns the arc-tangent of the parameters."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorOp.xml:50
+msgid ""
+"Returns the vector that points in the direction of reflection. [code]a[/"
+"code] is incident vector and [code]b[/code] is the normal vector."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorOp.xml:53
+msgid ""
+"Vector step operator. Returns [code]0.0[/code] if [code]a[/code] is smaller "
+"than [code]b[/code] and [code]1.0[/code] otherwise."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorRefract.xml:4
+msgid ""
+"Returns the [Vector3] that points in the direction of refraction. For use "
+"within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorRefract.xml:7
+msgid ""
+"Translated to [code]refract(I, N, eta)[/code] in the shader language, where "
+"[code]I[/code] is the incident vector, [code]N[/code] is the normal vector "
+"and [code]eta[/code] is the ratio of the indices of the refraction."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorScalarMix.xml:4
+msgid ""
+"Linearly interpolates between two vectors using a scalar. For use within the "
+"visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorScalarMix.xml:7
+msgid ""
+"Translates to [code]mix(a, b, weight)[/code] in the shader language, where "
+"[code]a[/code] and [code]b[/code] are vectors and [code]weight[/code] is a "
+"scalar."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorScalarSmoothStep.xml:4
+msgid ""
+"Calculates a vector SmoothStep function using scalar within the visual "
+"shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorScalarSmoothStep.xml:7
+msgid ""
+"Translates to [code]smoothstep(edge0, edge1, x)[/code] in the shader "
+"language, where [code]x[/code] is a scalar.\n"
+"Returns [code]0.0[/code] if [code]x[/code] is smaller than [code]edge0[/"
+"code] and [code]1.0[/code] if [code]x[/code] is larger than [code]edge1[/"
+"code]. Otherwise the return value is interpolated between [code]0.0[/code] "
+"and [code]1.0[/code] using Hermite polynomials."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorScalarStep.xml:4
+msgid "Calculates a vector Step function within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorScalarStep.xml:7
+msgid ""
+"Translates to [code]step(edge, x)[/code] in the shader language.\n"
+"Returns [code]0.0[/code] if [code]x[/code] is smaller than [code]edge[/code] "
+"and [code]1.0[/code] otherwise."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorSmoothStep.xml:4
+msgid "Calculates a vector SmoothStep function within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorSmoothStep.xml:7
+msgid ""
+"Translates to [code]smoothstep(edge0, edge1, x)[/code] in the shader "
+"language, where [code]x[/code] is a vector.\n"
+"Returns [code]0.0[/code] if [code]x[/code] is smaller than [code]edge0[/"
+"code] and [code]1.0[/code] if [code]x[/code] is larger than [code]edge1[/"
+"code]. Otherwise the return value is interpolated between [code]0.0[/code] "
+"and [code]1.0[/code] using Hermite polynomials."
+msgstr ""
+
+#: doc/classes/VScrollBar.xml:4
+msgid "Vertical scroll bar."
+msgstr ""
+
+#: doc/classes/VScrollBar.xml:7
+msgid ""
+"Vertical version of [ScrollBar], which goes from top (min) to bottom (max)."
+msgstr ""
+
+#: doc/classes/VScrollBar.xml:21
+msgid ""
+"Icon used as a button to scroll the [ScrollBar] up. Supports custom step "
+"using the [member ScrollBar.custom_step] property."
+msgstr ""
+
+#: doc/classes/VScrollBar.xml:39
+msgid ""
+"Icon used as a button to scroll the [ScrollBar] down. Supports custom step "
+"using the [member ScrollBar.custom_step] property."
+msgstr ""
+
+#: doc/classes/VSeparator.xml:4
+msgid "Vertical version of [Separator]."
+msgstr ""
+
+#: doc/classes/VSeparator.xml:7
+msgid ""
+"Vertical version of [Separator]. Even though it looks vertical, it is used "
+"to separate objects horizontally."
+msgstr ""
+
+#: doc/classes/VSeparator.xml:17
+msgid ""
+"The width of the area covered by the separator. Effectively works like a "
+"minimum width."
+msgstr ""
+
+#: doc/classes/VSeparator.xml:20
+msgid ""
+"The style for the separator line. Works best with [StyleBoxLine] (remember "
+"to enable [member StyleBoxLine.vertical])."
+msgstr ""
+
+#: doc/classes/VSlider.xml:4
+msgid "Vertical slider."
+msgstr ""
+
+#: doc/classes/VSlider.xml:7
+msgid ""
+"Vertical slider. See [Slider]. This one goes from bottom (min) to top "
+"(max).\n"
+"[b]Note:[/b] The [signal Range.changed] and [signal Range.value_changed] "
+"signals are part of the [Range] class which this class inherits from."
+msgstr ""
+
+#: doc/classes/VSlider.xml:25
+msgid "The background of the area below the grabber."
+msgstr ""
+
+#: doc/classes/VSlider.xml:36
+msgid ""
+"The background for the whole slider. Determines the width of the "
+"[code]grabber_area[/code]."
+msgstr ""
+
+#: doc/classes/VSplitContainer.xml:4
+msgid "Vertical split container."
+msgstr ""
+
+#: doc/classes/VSplitContainer.xml:7
+msgid ""
+"Vertical split container. See [SplitContainer]. This goes from top to bottom."
+msgstr ""
+
+#: doc/classes/WeakRef.xml:4
+msgid ""
+"Holds an [Object], but does not contribute to the reference count if the "
+"object is a reference."
+msgstr ""
+
+#: doc/classes/WeakRef.xml:7
+msgid ""
+"A weakref can hold a [Reference], without contributing to the reference "
+"counter. A weakref can be created from an [Object] using [method @GDScript."
+"weakref]. If this object is not a reference, weakref still works, however, "
+"it does not have any effect on the object. Weakrefs are useful in cases "
+"where multiple classes have variables that refer to each other. Without "
+"weakrefs, using these classes could lead to memory leaks, since both "
+"references keep each other from being released. Making part of the variables "
+"a weakref can prevent this cyclic dependency, and allows the references to "
+"be released."
+msgstr ""
+
+#: doc/classes/WeakRef.xml:15
+msgid "Returns the [Object] this weakref is referring to."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCDataChannel.xml:13
+msgid "Closes this data channel, notifying the other peer."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCDataChannel.xml:19
+msgid ""
+"Returns the number of bytes currently queued to be sent over this channel."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCDataChannel.xml:25
+msgid ""
+"Returns the id assigned to this channel during creation (or auto-assigned "
+"during negotiation).\n"
+"If the channel is not negotiated out-of-band the id will only be available "
+"after the connection is established (will return [code]65535[/code] until "
+"then)."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCDataChannel.xml:32
+msgid "Returns the label assigned to this channel during creation."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCDataChannel.xml:38
+msgid ""
+"Returns the [code]maxPacketLifeTime[/code] value assigned to this channel "
+"during creation.\n"
+"Will be [code]65535[/code] if not specified."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCDataChannel.xml:45
+msgid ""
+"Returns the [code]maxRetransmits[/code] value assigned to this channel "
+"during creation.\n"
+"Will be [code]65535[/code] if not specified."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCDataChannel.xml:52
+msgid ""
+"Returns the sub-protocol assigned to this channel during creation. An empty "
+"string if not specified."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCDataChannel.xml:58
+msgid "Returns the current state of this channel, see [enum ChannelState]."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCDataChannel.xml:64
+msgid ""
+"Returns [code]true[/code] if this channel was created with out-of-band "
+"configuration."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCDataChannel.xml:70
+msgid ""
+"Returns [code]true[/code] if this channel was created with ordering enabled "
+"(default)."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCDataChannel.xml:76
+msgid "Reserved, but not used for now."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCDataChannel.xml:82
+msgid ""
+"Returns [code]true[/code] if the last received packet was transferred as "
+"text. See [member write_mode]."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCDataChannel.xml:88
+msgid ""
+"The transfer mode to use when sending outgoing packet. Either text or binary."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCDataChannel.xml:93
+msgid ""
+"Tells the channel to send data over this channel as text. An external peer "
+"(non-Godot) would receive this as a string."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCDataChannel.xml:96
+msgid ""
+"Tells the channel to send data over this channel as binary. An external peer "
+"(non-Godot) would receive this as array buffer or blob."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCDataChannel.xml:99
+msgid "The channel was created, but it's still trying to connect."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCDataChannel.xml:102
+msgid "The channel is currently open, and data can flow over it."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCDataChannel.xml:105
+msgid ""
+"The channel is being closed, no new messages will be accepted, but those "
+"already in queue will be flushed."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCDataChannel.xml:108
+msgid "The channel was closed, or connection failed."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCMultiplayer.xml:4
+msgid ""
+"A simple interface to create a peer-to-peer mesh network composed of "
+"[WebRTCPeerConnection] that is compatible with the [MultiplayerAPI]."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCMultiplayer.xml:7
+msgid ""
+"This class constructs a full mesh of [WebRTCPeerConnection] (one connection "
+"for each peer) that can be used as a [member MultiplayerAPI.network_peer].\n"
+"You can add each [WebRTCPeerConnection] via [method add_peer] or remove them "
+"via [method remove_peer]. Peers must be added in [constant "
+"WebRTCPeerConnection.STATE_NEW] state to allow it to create the appropriate "
+"channels. This class will not create offers nor set descriptions, it will "
+"only poll them, and notify connections and disconnections.\n"
+"[signal NetworkedMultiplayerPeer.connection_succeeded] and [signal "
+"NetworkedMultiplayerPeer.server_disconnected] will not be emitted unless "
+"[code]server_compatibility[/code] is [code]true[/code] in [method "
+"initialize]. Beside that data transfer works like in a "
+"[NetworkedMultiplayerPeer]."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCMultiplayer.xml:20
+msgid ""
+"Add a new peer to the mesh with the given [code]peer_id[/code]. The "
+"[WebRTCPeerConnection] must be in state [constant WebRTCPeerConnection."
+"STATE_NEW].\n"
+"Three channels will be created for reliable, unreliable, and ordered "
+"transport. The value of [code]unreliable_lifetime[/code] will be passed to "
+"the [code]maxPacketLifetime[/code] option when creating unreliable and "
+"ordered channels (see [method WebRTCPeerConnection.create_data_channel])."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCMultiplayer.xml:27
+msgid "Close all the add peer connections and channels, freeing all resources."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCMultiplayer.xml:34
+msgid ""
+"Return a dictionary representation of the peer with given [code]peer_id[/"
+"code] with three keys. [code]connection[/code] containing the "
+"[WebRTCPeerConnection] to this peer, [code]channels[/code] an array of three "
+"[WebRTCDataChannel], and [code]connected[/code] a boolean representing if "
+"the peer connection is currently connected (all three channels are open)."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCMultiplayer.xml:40
+msgid ""
+"Returns a dictionary which keys are the peer ids and values the peer "
+"representation as in [method get_peer]."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCMultiplayer.xml:47
+msgid ""
+"Returns [code]true[/code] if the given [code]peer_id[/code] is in the peers "
+"map (it might not be connected though)."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCMultiplayer.xml:55
+msgid ""
+"Initialize the multiplayer peer with the given [code]peer_id[/code] (must be "
+"between 1 and 2147483647).\n"
+"If [code]server_compatibilty[/code] is [code]false[/code] (default), the "
+"multiplayer peer will be immediately in state [constant "
+"NetworkedMultiplayerPeer.CONNECTION_CONNECTED] and [signal "
+"NetworkedMultiplayerPeer.connection_succeeded] will not be emitted.\n"
+"If [code]server_compatibilty[/code] is [code]true[/code] the peer will "
+"suppress all [signal NetworkedMultiplayerPeer.peer_connected] signals until "
+"a peer with id [constant NetworkedMultiplayerPeer.TARGET_PEER_SERVER] "
+"connects and then emit [signal NetworkedMultiplayerPeer."
+"connection_succeeded]. After that the signal [signal "
+"NetworkedMultiplayerPeer.peer_connected] will be emitted for every already "
+"connected peer, and any new peer that might connect. If the server peer "
+"disconnects after that, signal [signal NetworkedMultiplayerPeer."
+"server_disconnected] will be emitted and state will become [constant "
+"NetworkedMultiplayerPeer.CONNECTION_CONNECTED]."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCMultiplayer.xml:64
+msgid ""
+"Remove the peer with given [code]peer_id[/code] from the mesh. If the peer "
+"was connected, and [signal NetworkedMultiplayerPeer.peer_connected] was "
+"emitted for it, then [signal NetworkedMultiplayerPeer.peer_disconnected] "
+"will be emitted."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml:4
+msgid "Interface to a WebRTC peer connection."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml:7
+msgid ""
+"A WebRTC connection between the local computer and a remote peer. Provides "
+"an interface to connect, maintain and monitor the connection.\n"
+"Setting up a WebRTC connection between two peers from now on) may not seem a "
+"trivial task, but it can be broken down into 3 main steps:\n"
+"- The peer that wants to initiate the connection ([code]A[/code] from now "
+"on) creates an offer and send it to the other peer ([code]B[/code] from now "
+"on).\n"
+"- [code]B[/code] receives the offer, generate and answer, and sends it to "
+"[code]A[/code]).\n"
+"- [code]A[/code] and [code]B[/code] then generates and exchange ICE "
+"candidates with each other.\n"
+"After these steps, the connection should become connected. Keep on reading "
+"or look into the tutorial for more information."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml:23
+msgid ""
+"Add an ice candidate generated by a remote peer (and received over the "
+"signaling server). See [signal ice_candidate_created]."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml:29
+msgid ""
+"Close the peer connection and all data channels associated with it.\n"
+"[b]Note:[/b] You cannot reuse this object for a new connection unless you "
+"call [method initialize]."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml:39
+msgid ""
+"Returns a new [WebRTCDataChannel] (or [code]null[/code] on failure) with "
+"given [code]label[/code] and optionally configured via the [code]options[/"
+"code] dictionary. This method can only be called when the connection is in "
+"state [constant STATE_NEW].\n"
+"There are two ways to create a working data channel: either call [method "
+"create_data_channel] on only one of the peer and listen to [signal "
+"data_channel_received] on the other, or call [method create_data_channel] on "
+"both peers, with the same values, and the [code]negotiated[/code] option set "
+"to [code]true[/code].\n"
+"Valid [code]options[/code] are:\n"
+"[codeblock]\n"
+"{\n"
+" \"negotiated\": true, # When set to true (default off), means the "
+"channel is negotiated out of band. \"id\" must be set too. "
+"\"data_channel_received\" will not be called.\n"
+" \"id\": 1, # When \"negotiated\" is true this value must also be set to "
+"the same value on both peer.\n"
+"\n"
+" # Only one of maxRetransmits and maxPacketLifeTime can be specified, not "
+"both. They make the channel unreliable (but also better at real time).\n"
+" \"maxRetransmits\": 1, # Specify the maximum number of attempt the peer "
+"will make to retransmits packets if they are not acknowledged.\n"
+" \"maxPacketLifeTime\": 100, # Specify the maximum amount of time before "
+"giving up retransmitions of unacknowledged packets (in milliseconds).\n"
+" \"ordered\": true, # When in unreliable mode (i.e. either "
+"\"maxRetransmits\" or \"maxPacketLifetime\" is set), \"ordered\" (true by "
+"default) specify if packet ordering is to be enforced.\n"
+"\n"
+" \"protocol\": \"my-custom-protocol\", # A custom sub-protocol string for "
+"this channel.\n"
+"}\n"
+"[/codeblock]\n"
+"[b]Note:[/b] You must keep a reference to channels created this way, or it "
+"will be closed."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml:61
+msgid ""
+"Creates a new SDP offer to start a WebRTC connection with a remote peer. At "
+"least one [WebRTCDataChannel] must have been created before calling this "
+"method.\n"
+"If this functions returns [constant OK], [signal "
+"session_description_created] will be called when the session is ready to be "
+"sent."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml:68
+msgid "Returns the connection state. See [enum ConnectionState]."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml:76
+msgid ""
+"Re-initialize this peer connection, closing any previously active "
+"connection, and going back to state [constant STATE_NEW]. A dictionary of "
+"[code]options[/code] can be passed to configure the peer connection.\n"
+"Valid [code]options[/code] are:\n"
+"[codeblock]\n"
+"{\n"
+" \"iceServers\": [\n"
+" {\n"
+" \"urls\": [ \"stun:stun.example.com:3478\" ], # One or more STUN "
+"servers.\n"
+" },\n"
+" {\n"
+" \"urls\": [ \"turn:turn.example.com:3478\" ], # One or more TURN "
+"servers.\n"
+" \"username\": \"a_username\", # Optional username for the TURN "
+"server.\n"
+" \"credential\": \"a_password\", # Optional password for the TURN "
+"server.\n"
+" }\n"
+" ]\n"
+"}\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml:97
+msgid ""
+"Call this method frequently (e.g. in [method Node._process] or [method Node."
+"_physics_process]) to properly receive signals."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml:105
+msgid ""
+"Sets the SDP description of the local peer. This should be called in "
+"response to [signal session_description_created].\n"
+"After calling this function the peer will start emitting [signal "
+"ice_candidate_created] (unless an [enum Error] different from [constant OK] "
+"is returned)."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml:114
+msgid ""
+"Sets the SDP description of the remote peer. This should be called with the "
+"values generated by a remote peer and received over the signaling server.\n"
+"If [code]type[/code] is [code]offer[/code] the peer will emit [signal "
+"session_description_created] with the appropriate answer.\n"
+"If [code]type[/code] is [code]answer[/code] the peer will start emitting "
+"[signal ice_candidate_created]."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml:124
+msgid ""
+"Emitted when a new in-band channel is received, i.e. when the channel was "
+"created with [code]negotiated: false[/code] (default).\n"
+"The object will be an instance of [WebRTCDataChannel]. You must keep a "
+"reference of it or it will be closed automatically. See [method "
+"create_data_channel]."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml:133
+msgid ""
+"Emitted when a new ICE candidate has been created. The three parameters are "
+"meant to be passed to the remote peer over the signaling server."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml:140
+msgid ""
+"Emitted after a successful call to [method create_offer] or [method "
+"set_remote_description] (when it generates an answer). The parameters are "
+"meant to be passed to [method set_local_description] on this object, and "
+"sent to the remote peer over the signaling server."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml:146
+msgid ""
+"The connection is new, data channels and an offer can be created in this "
+"state."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml:149
+msgid ""
+"The peer is connecting, ICE is in progress, none of the transports has "
+"failed."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml:152
+msgid "The peer is connected, all ICE transports are connected."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml:155
+msgid "At least one ICE transport is disconnected."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml:158
+msgid "One or more of the ICE transports failed."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml:161
+msgid ""
+"The peer connection is closed (after calling [method close] for example)."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketClient.xml:4
+msgid "A WebSocket client implementation."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketClient.xml:7
+msgid ""
+"This class implements a WebSocket client compatible with any RFC 6455-"
+"compliant WebSocket server.\n"
+"This client can be optionally used as a network peer for the "
+"[MultiplayerAPI].\n"
+"After starting the client ([method connect_to_url]), you will need to "
+"[method NetworkedMultiplayerPeer.poll] it at regular intervals (e.g. inside "
+"[method Node._process]).\n"
+"You will receive appropriate signals when connecting, disconnecting, or when "
+"new data is available."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketClient.xml:22
+msgid ""
+"Connects to the given URL requesting one of the given [code]protocols[/code] "
+"as sub-protocol. If the list empty (default), no sub-protocol will be "
+"requested.\n"
+"If [code]true[/code] is passed as [code]gd_mp_api[/code], the client will "
+"behave like a network peer for the [MultiplayerAPI], connections to non-"
+"Godot servers will not work, and [signal data_received] will not be "
+"emitted.\n"
+"If [code]false[/code] is passed instead (default), you must call "
+"[PacketPeer] functions ([code]put_packet[/code], [code]get_packet[/code], "
+"etc.) on the [WebSocketPeer] returned via [code]get_peer(1)[/code] and not "
+"on this object directly (e.g. [code]get_peer(1).put_packet(data)[/code]).\n"
+"You can optionally pass a list of [code]custom_headers[/code] to be added to "
+"the handshake HTTP request.\n"
+"[b]Note:[/b] To avoid mixed content warnings or errors in HTML5, you may "
+"have to use a [code]url[/code] that starts with [code]wss://[/code] (secure) "
+"instead of [code]ws://[/code]. When doing so, make sure to use the fully "
+"qualified domain name that matches the one defined in the server's SSL "
+"certificate. Do not connect directly via the IP address for [code]wss://[/"
+"code] connections, as it won't match with the SSL certificate.\n"
+"[b]Note:[/b] Specifying [code]custom_headers[/code] is not supported in "
+"HTML5 exports due to browsers restrictions."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketClient.xml:35
+msgid ""
+"Disconnects this client from the connected host. See [method WebSocketPeer."
+"close] for more information."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketClient.xml:41
+msgid "Return the IP address of the currently connected host."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketClient.xml:47
+msgid "Return the IP port of the currently connected host."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketClient.xml:53
+msgid ""
+"If specified, this [X509Certificate] will be the only one accepted when "
+"connecting to an SSL host. Any other certificate provided by the server will "
+"be regarded as invalid.\n"
+"[b]Note:[/b] Specifying a custom [code]trusted_ssl_certificate[/code] is not "
+"supported in HTML5 exports due to browsers restrictions."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketClient.xml:57
+msgid ""
+"If [code]true[/code], SSL certificate verification is enabled.\n"
+"[b]Note:[/b] You must specify the certificates to be used in the Project "
+"Settings for it to work when exported."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketClient.xml:65
+msgid ""
+"Emitted when the connection to the server is closed. [code]was_clean_close[/"
+"code] will be [code]true[/code] if the connection was shutdown cleanly."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketClient.xml:70
+msgid "Emitted when the connection to the server fails."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketClient.xml:76
+msgid ""
+"Emitted when a connection with the server is established, [code]protocol[/"
+"code] will contain the sub-protocol agreed with the server."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketClient.xml:81
+msgid ""
+"Emitted when a WebSocket message is received.\n"
+"[b]Note:[/b] This signal is [i]not[/i] emitted when used as high-level "
+"multiplayer peer."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketClient.xml:89
+msgid ""
+"Emitted when the server requests a clean close. You should keep polling "
+"until you get a [signal connection_closed] signal to achieve the clean "
+"close. See [method WebSocketPeer.close] for more details."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketMultiplayerPeer.xml:4
+msgid "Base class for WebSocket server and client."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketMultiplayerPeer.xml:7
+msgid ""
+"Base class for WebSocket server and client, allowing them to be used as "
+"network peer for the [MultiplayerAPI]."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketMultiplayerPeer.xml:16
+msgid ""
+"Returns the [WebSocketPeer] associated to the given [code]peer_id[/code]."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketMultiplayerPeer.xml:26
+msgid ""
+"Configures the buffer sizes for this WebSocket peer. Default values can be "
+"specified in the Project Settings under [code]network/limits[/code]. For "
+"server, values are meant per connected peer.\n"
+"The first two parameters define the size and queued packets limits of the "
+"input buffer, the last two of the output buffer.\n"
+"Buffer sizes are expressed in KiB, so [code]4 = 2^12 = 4096 bytes[/code]. "
+"All parameters will be rounded up to the nearest power of two.\n"
+"[b]Note:[/b] HTML5 exports only use the input buffer since the output one is "
+"managed by browsers."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketMultiplayerPeer.xml:41
+msgid ""
+"Emitted when a packet is received from a peer.\n"
+"[b]Note:[/b] This signal is only emitted when the client or server is "
+"configured to use Godot multiplayer API."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketPeer.xml:4
+msgid "A class representing a specific WebSocket connection."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketPeer.xml:7
+msgid ""
+"This class represents a specific WebSocket connection, allowing you to do "
+"lower level operations with it.\n"
+"You can choose to write to the socket in binary or text mode, and you can "
+"recognize the mode used for writing by the other peer."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketPeer.xml:18
+msgid ""
+"Closes this WebSocket connection. [code]code[/code] is the status code for "
+"the closure (see RFC 6455 section 7.4 for a list of valid status codes). "
+"[code]reason[/code] is the human readable reason for closing the connection "
+"(can be any UTF-8 string that's smaller than 123 bytes).\n"
+"[b]Note:[/b] To achieve a clean close, you will need to keep polling until "
+"either [signal WebSocketClient.connection_closed] or [signal WebSocketServer."
+"client_disconnected] is received.\n"
+"[b]Note:[/b] The HTML5 export might not support all status codes. Please "
+"refer to browser-specific documentation for more details."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketPeer.xml:26
+msgid ""
+"Returns the IP address of the connected peer.\n"
+"[b]Note:[/b] Not available in the HTML5 export."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketPeer.xml:33
+msgid ""
+"Returns the remote port of the connected peer.\n"
+"[b]Note:[/b] Not available in the HTML5 export."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketPeer.xml:40
+msgid ""
+"Returns the current amount of data in the outbound websocket buffer. [b]Note:"
+"[/b] HTML5 exports use WebSocket.bufferedAmount, while other platforms use "
+"an internal buffer."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketPeer.xml:46
+msgid "Gets the current selected write mode. See [enum WriteMode]."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketPeer.xml:52
+msgid "Returns [code]true[/code] if this peer is currently connected."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketPeer.xml:59
+msgid ""
+"Disable Nagle's algorithm on the underling TCP socket (default). See [method "
+"StreamPeerTCP.set_no_delay] for more information.\n"
+"[b]Note:[/b] Not available in the HTML5 export."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketPeer.xml:67
+msgid "Sets the socket to use the given [enum WriteMode]."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketPeer.xml:73
+msgid ""
+"Returns [code]true[/code] if the last received packet was sent as a text "
+"payload. See [enum WriteMode]."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketPeer.xml:79
+msgid ""
+"Specifies that WebSockets messages should be transferred as text payload "
+"(only valid UTF-8 is allowed)."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketPeer.xml:82
+msgid ""
+"Specifies that WebSockets messages should be transferred as binary payload "
+"(any byte combination is allowed)."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketServer.xml:4
+msgid "A WebSocket server implementation."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketServer.xml:7
+msgid ""
+"This class implements a WebSocket server that can also support the high-"
+"level multiplayer API.\n"
+"After starting the server ([method listen]), you will need to [method "
+"NetworkedMultiplayerPeer.poll] it at regular intervals (e.g. inside [method "
+"Node._process]). When clients connect, disconnect, or send data, you will "
+"receive the appropriate signal.\n"
+"[b]Note:[/b] Not available in HTML5 exports."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketServer.xml:20
+msgid ""
+"Disconnects the peer identified by [code]id[/code] from the server. See "
+"[method WebSocketPeer.close] for more information."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketServer.xml:41
+msgid "Returns [code]true[/code] if a peer with the given ID is connected."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketServer.xml:47
+msgid ""
+"Returns [code]true[/code] if the server is actively listening on a port."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketServer.xml:56
+msgid ""
+"Starts listening on the given port.\n"
+"You can specify the desired subprotocols via the \"protocols\" array. If the "
+"list empty (default), no sub-protocol will be requested.\n"
+"If [code]true[/code] is passed as [code]gd_mp_api[/code], the server will "
+"behave like a network peer for the [MultiplayerAPI], connections from non-"
+"Godot clients will not work, and [signal data_received] will not be "
+"emitted.\n"
+"If [code]false[/code] is passed instead (default), you must call "
+"[PacketPeer] functions ([code]put_packet[/code], [code]get_packet[/code], "
+"etc.), on the [WebSocketPeer] returned via [code]get_peer(id)[/code] to "
+"communicate with the peer with given [code]id[/code] (e.g. "
+"[code]get_peer(id).get_available_packet_count[/code])."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketServer.xml:65
+msgid "Stops the server and clear its state."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketServer.xml:71
+msgid ""
+"When not set to [code]*[/code] will restrict incoming connections to the "
+"specified IP address. Setting [code]bind_ip[/code] to [code]127.0.0.1[/code] "
+"will cause the server to listen only to the local host."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketServer.xml:74
+msgid ""
+"When using SSL (see [member private_key] and [member ssl_certificate]), you "
+"can set this to a valid [X509Certificate] to be provided as additional CA "
+"chain information during the SSL handshake."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketServer.xml:77
+msgid ""
+"The time in seconds before a pending client (i.e. a client that has not yet "
+"finished the HTTP handshake) is considered stale and forcefully disconnected."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketServer.xml:80
+msgid ""
+"When set to a valid [CryptoKey] (along with [member ssl_certificate]) will "
+"cause the server to require SSL instead of regular TCP (i.e. the [code]wss://"
+"[/code] protocol)."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketServer.xml:83
+msgid ""
+"When set to a valid [X509Certificate] (along with [member private_key]) will "
+"cause the server to require SSL instead of regular TCP (i.e. the [code]wss://"
+"[/code] protocol)."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketServer.xml:92
+msgid ""
+"Emitted when a client requests a clean close. You should keep polling until "
+"you get a [signal client_disconnected] signal with the same [code]id[/code] "
+"to achieve the clean close. See [method WebSocketPeer.close] for more "
+"details."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketServer.xml:99
+msgid ""
+"Emitted when a new client connects. \"protocol\" will be the sub-protocol "
+"agreed with the client."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketServer.xml:106
+msgid ""
+"Emitted when a client disconnects. [code]was_clean_close[/code] will be "
+"[code]true[/code] if the connection was shutdown cleanly."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketServer.xml:112
+msgid ""
+"Emitted when a new message is received.\n"
+"[b]Note:[/b] This signal is [i]not[/i] emitted when used as high-level "
+"multiplayer peer."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:4
+msgid "AR/VR interface using WebXR."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:7
+msgid ""
+"WebXR is an open standard that allows creating VR and AR applications that "
+"run in the web browser.\n"
+"As such, this interface is only available when running in an HTML5 export.\n"
+"WebXR supports a wide range of devices, from the very capable (like Valve "
+"Index, HTC Vive, Oculus Rift and Quest) down to the much less capable (like "
+"Google Cardboard, Oculus Go, GearVR, or plain smartphones).\n"
+"Since WebXR is based on Javascript, it makes extensive use of callbacks, "
+"which means that [WebXRInterface] is forced to use signals, where other AR/"
+"VR interfaces would instead use functions that return a result immediately. "
+"This makes [WebXRInterface] quite a bit more complicated to initialize than "
+"other AR/VR interfaces.\n"
+"Here's the minimum code required to start an immersive VR session:\n"
+"[codeblock]\n"
+"extends Spatial\n"
+"\n"
+"var webxr_interface\n"
+"var vr_supported = false\n"
+"\n"
+"func _ready():\n"
+" # We assume this node has a button as a child.\n"
+" # This button is for the user to consent to entering immersive VR mode.\n"
+" $Button.connect(\"pressed\", self, \"_on_Button_pressed\")\n"
+"\n"
+" webxr_interface = ARVRServer.find_interface(\"WebXR\")\n"
+" if webxr_interface:\n"
+" # WebXR uses a lot of asynchronous callbacks, so we connect to "
+"various\n"
+" # signals in order to receive them.\n"
+" webxr_interface.connect(\"session_supported\", self, "
+"\"_webxr_session_supported\")\n"
+" webxr_interface.connect(\"session_started\", self, "
+"\"_webxr_session_started\")\n"
+" webxr_interface.connect(\"session_ended\", self, "
+"\"_webxr_session_ended\")\n"
+" webxr_interface.connect(\"session_failed\", self, "
+"\"_webxr_session_failed\")\n"
+"\n"
+" # This returns immediately - our _webxr_session_supported() method\n"
+" # (which we connected to the \"session_supported\" signal above) "
+"will\n"
+" # be called sometime later to let us know if it's supported or not.\n"
+" webxr_interface.is_session_supported(\"immersive-vr\")\n"
+"\n"
+"func _webxr_session_supported(session_mode, supported):\n"
+" if session_mode == 'immersive-vr':\n"
+" vr_supported = supported\n"
+"\n"
+"func _on_Button_pressed():\n"
+" if not vr_supported:\n"
+" OS.alert(\"Your browser doesn't support VR\")\n"
+" return\n"
+"\n"
+" # We want an immersive VR session, as opposed to AR ('immersive-ar') or "
+"a\n"
+" # simple 3DoF viewer ('viewer').\n"
+" webxr_interface.session_mode = 'immersive-vr'\n"
+" # 'bounded-floor' is room scale, 'local-floor' is a standing or sitting\n"
+" # experience (it puts you 1.6m above the ground if you have 3DoF "
+"headset),\n"
+" # whereas as 'local' puts you down at the ARVROrigin.\n"
+" # This list means it'll first try to request 'bounded-floor', then\n"
+" # fallback on 'local-floor' and ultimately 'local', if nothing else is\n"
+" # supported.\n"
+" webxr_interface.requested_reference_space_types = 'bounded-floor, local-"
+"floor, local'\n"
+" # In order to use 'local-floor' or 'bounded-floor' we must also\n"
+" # mark the features as required or optional.\n"
+" webxr_interface.required_features = 'local-floor'\n"
+" webxr_interface.optional_features = 'bounded-floor'\n"
+"\n"
+" # This will return false if we're unable to even request the session,\n"
+" # however, it can still fail asynchronously later in the process, so we\n"
+" # only know if it's really succeeded or failed when our\n"
+" # _webxr_session_started() or _webxr_session_failed() methods are "
+"called.\n"
+" if not webxr_interface.initialize():\n"
+" OS.alert(\"Failed to initialize\")\n"
+" return\n"
+"\n"
+"func _webxr_session_started():\n"
+" $Button.visible = false\n"
+" # This tells Godot to start rendering to the headset.\n"
+" get_viewport().arvr = true\n"
+" # This will be the reference space type you ultimately got, out of the\n"
+" # types that you requested above. This is useful if you want the game "
+"to\n"
+" # work a little differently in 'bounded-floor' versus 'local-floor'.\n"
+" print (\"Reference space type: \" + webxr_interface."
+"reference_space_type)\n"
+"\n"
+"func _webxr_session_ended():\n"
+" $Button.visible = true\n"
+" # If the user exits immersive mode, then we tell Godot to render to the "
+"web\n"
+" # page again.\n"
+" get_viewport().arvr = false\n"
+"\n"
+"func _webxr_session_failed(message):\n"
+" OS.alert(\"Failed to initialize: \" + message)\n"
+"[/codeblock]\n"
+"There are several ways to handle \"controller\" input:\n"
+"- Using [ARVRController] nodes and their [signal ARVRController."
+"button_pressed] and [signal ARVRController.button_release] signals. This is "
+"how controllers are typically handled in AR/VR apps in Godot, however, this "
+"will only work with advanced VR controllers like the Oculus Touch or Index "
+"controllers, for example. The buttons codes are defined by [url=https://"
+"immersive-web.github.io/webxr-gamepads-module/#xr-standard-gamepad-"
+"mapping]Section 3.3 of the WebXR Gamepads Module[/url].\n"
+"- Using [method Node._unhandled_input] and [InputEventJoypadButton] or "
+"[InputEventJoypadMotion]. This works the same as normal joypads, except the "
+"[member InputEvent.device] starts at 100, so the left controller is 100 and "
+"the right controller is 101, and the button codes are also defined by "
+"[url=https://immersive-web.github.io/webxr-gamepads-module/#xr-standard-"
+"gamepad-mapping]Section 3.3 of the WebXR Gamepads Module[/url].\n"
+"- Using the [signal select], [signal squeeze] and related signals. This "
+"method will work for both advanced VR controllers, and non-traditional "
+"\"controllers\" like a tap on the screen, a spoken voice command or a button "
+"press on the device itself. The [code]controller_id[/code] passed to these "
+"signals is the same id as used in [member ARVRController.controller_id].\n"
+"You can use one or all of these methods to allow your game or app to support "
+"a wider or narrower set of devices and input methods, or to allow more "
+"advanced interations with more advanced devices."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:94
+msgid "https://www.snopekgames.com/blog/2020/how-make-vr-game-webxr-godot"
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:101
+msgid ""
+"Gets an [ARVRPositionalTracker] for the given [code]controller_id[/code].\n"
+"In the context of WebXR, a \"controller\" can be an advanced VR controller "
+"like the Oculus Touch or Index controllers, or even a tap on the screen, a "
+"spoken voice command or a button press on the device itself. When a non-"
+"traditional controller is used, interpret the position and orientation of "
+"the [ARVRPositionalTracker] as a ray pointing at the object the user wishes "
+"to interact with.\n"
+"Use this method to get information about the controller that triggered one "
+"of these signals:\n"
+"- [signal selectstart]\n"
+"- [signal select]\n"
+"- [signal selectend]\n"
+"- [signal squeezestart]\n"
+"- [signal squeeze]\n"
+"- [signal squeezestart]"
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:116
+msgid ""
+"Checks if the given [code]session_mode[/code] is supported by the user's "
+"browser.\n"
+"Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/"
+"API/XRSessionMode]WebXR's XRSessionMode[/url], including: [code]\"immersive-"
+"vr\"[/code], [code]\"immersive-ar\"[/code], and [code]\"inline\"[/code].\n"
+"This method returns nothing, instead it emits the [signal session_supported] "
+"signal with the result."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:124
+msgid ""
+"The vertices of a polygon which defines the boundaries of the user's play "
+"area.\n"
+"This will only be available if [member reference_space_type] is "
+"[code]\"bounded-floor\"[/code] and only on certain browsers and devices that "
+"support it.\n"
+"The [signal reference_space_reset] signal may indicate when this changes."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:129
+msgid ""
+"A comma-seperated list of optional features used by [method ARVRInterface."
+"initialize] when setting up the WebXR session.\n"
+"If a user's browser or device doesn't support one of the given features, "
+"initialization will continue, but you won't be able to use the requested "
+"feature.\n"
+"This doesn't have any effect on the interface when already initialized.\n"
+"Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/"
+"API/XRReferenceSpaceType]WebXR's XRReferenceSpaceType[/url]. If you want to "
+"use a particular reference space type, it must be listed in either [member "
+"required_features] or [member optional_features]."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:135
+msgid ""
+"The reference space type (from the list of requested types set in the "
+"[member requested_reference_space_types] property), that was ultimately used "
+"by [method ARVRInterface.initialize] when setting up the WebXR session.\n"
+"Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/"
+"API/XRReferenceSpaceType]WebXR's XRReferenceSpaceType[/url]. If you want to "
+"use a particular reference space type, it must be listed in either [member "
+"required_features] or [member optional_features]."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:139
+msgid ""
+"A comma-seperated list of reference space types used by [method "
+"ARVRInterface.initialize] when setting up the WebXR session.\n"
+"The reference space types are requested in order, and the first on supported "
+"by the users device or browser will be used. The [member "
+"reference_space_type] property contains the reference space type that was "
+"ultimately used.\n"
+"This doesn't have any effect on the interface when already initialized.\n"
+"Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/"
+"API/XRReferenceSpaceType]WebXR's XRReferenceSpaceType[/url]. If you want to "
+"use a particular reference space type, it must be listed in either [member "
+"required_features] or [member optional_features]."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:145
+msgid ""
+"A comma-seperated list of required features used by [method ARVRInterface."
+"initialize] when setting up the WebXR session.\n"
+"If a user's browser or device doesn't support one of the given features, "
+"initialization will fail and [signal session_failed] will be emitted.\n"
+"This doesn't have any effect on the interface when already initialized.\n"
+"Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/"
+"API/XRReferenceSpaceType]WebXR's XRReferenceSpaceType[/url]. If you want to "
+"use a particular reference space type, it must be listed in either [member "
+"required_features] or [member optional_features]."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:151
+msgid ""
+"The session mode used by [method ARVRInterface.initialize] when setting up "
+"the WebXR session.\n"
+"This doesn't have any effect on the interface when already initialized.\n"
+"Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/"
+"API/XRSessionMode]WebXR's XRSessionMode[/url], including: [code]\"immersive-"
+"vr\"[/code], [code]\"immersive-ar\"[/code], and [code]\"inline\"[/code]."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:156
+msgid ""
+"Indicates if the WebXR session's imagery is visible to the user.\n"
+"Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/"
+"API/XRVisibilityState]WebXR's XRVisibilityState[/url], including "
+"[code]\"hidden\"[/code], [code]\"visible\"[/code], and [code]\"visible-"
+"blurred\"[/code]."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:163
+msgid ""
+"Emitted to indicate that the reference space has been reset or "
+"reconfigured.\n"
+"When (or whether) this is emitted depends on the user's browser or device, "
+"but may include when the user has changed the dimensions of their play space "
+"(which you may be able to access via [member bounds_geometry]) or pressed/"
+"held a button to recenter their position.\n"
+"See [url=https://developer.mozilla.org/en-US/docs/Web/API/XRReferenceSpace/"
+"reset_event]WebXR's XRReferenceSpace reset event[/url] for more information."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:171
+msgid ""
+"Emitted after one of the \"controllers\" has finished its \"primary action"
+"\".\n"
+"Use [method get_controller] to get more information about the controller."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:178
+msgid ""
+"Emitted when one of the \"controllers\" has finished its \"primary action"
+"\".\n"
+"Use [method get_controller] to get more information about the controller."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:185
+msgid ""
+"Emitted when one of the \"controllers\" has started its \"primary action\".\n"
+"Use [method get_controller] to get more information about the controller."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:191
+msgid ""
+"Emitted when the user ends the WebXR session (which can be done using UI "
+"from the browser or device).\n"
+"At this point, you should do [code]get_viewport().arvr = false[/code] to "
+"instruct Godot to resume rendering to the screen."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:198
+msgid ""
+"Emitted by [method ARVRInterface.initialize] if the session fails to start.\n"
+"[code]message[/code] may optionally contain an error message from WebXR, or "
+"an empty string if no message is available."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:204
+msgid ""
+"Emitted by [method ARVRInterface.initialize] if the session is successfully "
+"started.\n"
+"At this point, it's safe to do [code]get_viewport().arvr = true[/code] to "
+"instruct Godot to start rendering to the AR/VR device."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:212
+msgid ""
+"Emitted by [method is_session_supported] to indicate if the given "
+"[code]session_mode[/code] is supported or not."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:218
+msgid ""
+"Emitted after one of the \"controllers\" has finished its \"primary squeeze "
+"action\".\n"
+"Use [method get_controller] to get more information about the controller."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:225
+msgid ""
+"Emitted when one of the \"controllers\" has finished its \"primary squeeze "
+"action\".\n"
+"Use [method get_controller] to get more information about the controller."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:232
+msgid ""
+"Emitted when one of the \"controllers\" has started its \"primary squeeze "
+"action\".\n"
+"Use [method get_controller] to get more information about the controller."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:238
+msgid "Emitted when [member visibility_state] has changed."
+msgstr ""
+
+#: doc/classes/WindowDialog.xml:4
+msgid "Base class for window dialogs."
+msgstr ""
+
+#: doc/classes/WindowDialog.xml:7
+msgid ""
+"Windowdialog is the base class for all window-based dialogs. It's a by-"
+"default toplevel [Control] that draws a window decoration and allows motion "
+"and resizing."
+msgstr ""
+
+#: doc/classes/WindowDialog.xml:15
+msgid ""
+"Returns the close [TextureButton].\n"
+"[b]Warning:[/b] This is a required internal node, removing and freeing it "
+"may cause a crash. If you wish to hide it or any of its children, use their "
+"[member CanvasItem.visible] property."
+msgstr ""
+
+#: doc/classes/WindowDialog.xml:22
+msgid "If [code]true[/code], the user can resize the window."
+msgstr ""
+
+#: doc/classes/WindowDialog.xml:25
+msgid "The text displayed in the window's title bar."
+msgstr ""
+
+#: doc/classes/WindowDialog.xml:32
+msgid "The icon for the close button."
+msgstr ""
+
+#: doc/classes/WindowDialog.xml:35
+msgid "The horizontal offset of the close button."
+msgstr ""
+
+#: doc/classes/WindowDialog.xml:38
+msgid ""
+"The icon used for the close button when it's hovered with the mouse cursor."
+msgstr ""
+
+#: doc/classes/WindowDialog.xml:44
+msgid ""
+"The style for both the content background of the [WindowDialog] and the "
+"title bar. The title bar is created with a top border and an expand margin "
+"using the [code]panel[/code] stylebox."
+msgstr ""
+
+#: doc/classes/WindowDialog.xml:47
+msgid ""
+"The thickness of the border that can be dragged when scaling the window (if "
+"[member resizable] is enabled)."
+msgstr ""
+
+#: doc/classes/WindowDialog.xml:50
+msgid "The color of the title text."
+msgstr ""
+
+#: doc/classes/WindowDialog.xml:53
+msgid "The font used to draw the title."
+msgstr ""
+
+#: doc/classes/WindowDialog.xml:56
+msgid "The vertical offset of the title text."
+msgstr ""
+
+#: doc/classes/World.xml:4
+msgid "Class that has everything pertaining to a world."
+msgstr ""
+
+#: doc/classes/World.xml:7
+msgid ""
+"Class that has everything pertaining to a world. A physics space, a visual "
+"scenario and a sound space. Spatial nodes register their resources into the "
+"current world."
+msgstr ""
+
+#: doc/classes/World.xml:16
+msgid ""
+"Direct access to the world's physics 3D space state. Used for querying "
+"current and potential collisions."
+msgstr ""
+
+#: doc/classes/World.xml:19
+msgid "The World's [Environment]."
+msgstr ""
+
+#: doc/classes/World.xml:22
+msgid ""
+"The World's fallback_environment will be used if the World's [Environment] "
+"fails or is missing."
+msgstr ""
+
+#: doc/classes/World.xml:25
+msgid "The World's visual scenario."
+msgstr ""
+
+#: doc/classes/World.xml:28
+msgid "The World's physics space."
+msgstr ""
+
+#: doc/classes/World2D.xml:4
+msgid "Class that has everything pertaining to a 2D world."
+msgstr ""
+
+#: doc/classes/World2D.xml:7
+msgid ""
+"Class that has everything pertaining to a 2D world. A physics space, a "
+"visual scenario and a sound space. 2D nodes register their resources into "
+"the current 2D world."
+msgstr ""
+
+#: doc/classes/World2D.xml:16
+msgid ""
+"The [RID] of this world's canvas resource. Used by the [VisualServer] for 2D "
+"drawing."
+msgstr ""
+
+#: doc/classes/World2D.xml:19
+msgid ""
+"Direct access to the world's physics 2D space state. Used for querying "
+"current and potential collisions. When using multi-threaded physics, access "
+"is limited to [code]_physics_process(delta)[/code] in the main thread."
+msgstr ""
+
+#: doc/classes/World2D.xml:22
+msgid ""
+"The [RID] of this world's physics space resource. Used by the "
+"[Physics2DServer] for 2D physics, treating it as both a space and an area."
+msgstr ""
+
+#: doc/classes/WorldEnvironment.xml:4
+msgid ""
+"Default environment properties for the entire scene (post-processing "
+"effects, lighting and background settings)."
+msgstr ""
+
+#: doc/classes/WorldEnvironment.xml:7
+msgid ""
+"The [WorldEnvironment] node is used to configure the default [Environment] "
+"for the scene.\n"
+"The parameters defined in the [WorldEnvironment] can be overridden by an "
+"[Environment] node set on the current [Camera]. Additionally, only one "
+"[WorldEnvironment] may be instanced in a given scene at a time.\n"
+"The [WorldEnvironment] allows the user to specify default lighting "
+"parameters (e.g. ambient lighting), various post-processing effects (e.g. "
+"SSAO, DOF, Tonemapping), and how to draw the background (e.g. solid color, "
+"skybox). Usually, these are added in order to improve the realism/color "
+"balance of the scene."
+msgstr ""
+
+#: doc/classes/WorldEnvironment.xml:21
+msgid ""
+"The [Environment] resource used by this [WorldEnvironment], defining the "
+"default properties."
+msgstr ""
+
+#: doc/classes/X509Certificate.xml:4
+msgid "An X509 certificate (e.g. for SSL)."
+msgstr ""
+
+#: doc/classes/X509Certificate.xml:7
+msgid ""
+"The X509Certificate class represents an X509 certificate. Certificates can "
+"be loaded and saved like any other [Resource].\n"
+"They can be used as the server certificate in [method StreamPeerSSL."
+"accept_stream] (along with the proper [CryptoKey]), and to specify the only "
+"certificate that should be accepted when connecting to an SSL server via "
+"[method StreamPeerSSL.connect_to_stream].\n"
+"[b]Note:[/b] Not available in HTML5 exports."
+msgstr ""
+
+#: doc/classes/X509Certificate.xml:18
+msgid "Loads a certificate from [code]path[/code] (\"*.crt\" file)."
+msgstr ""
+
+#: doc/classes/X509Certificate.xml:25
+msgid ""
+"Saves a certificate to the given [code]path[/code] (should be a \"*.crt\" "
+"file)."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:4
+msgid ""
+"Low-level class for creating parsers for [url=https://en.wikipedia.org/wiki/"
+"XML]XML[/url] files."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:7
+msgid ""
+"This class can serve as base to make custom XML parsers. Since XML is a very "
+"flexible standard, this interface is low-level so it can be applied to any "
+"possible schema."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:15
+msgid "Gets the amount of attributes in the current element."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:22
+msgid ""
+"Gets the name of the attribute specified by the index in [code]idx[/code] "
+"argument."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:29
+msgid ""
+"Gets the value of the attribute specified by the index in [code]idx[/code] "
+"argument."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:35
+msgid "Gets the current line in the parsed file (currently not implemented)."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:42
+msgid ""
+"Gets the value of a certain attribute of the current element by name. This "
+"will raise an error if the element has no such attribute."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:49
+msgid ""
+"Gets the value of a certain attribute of the current element by name. This "
+"will return an empty [String] if the attribute is not found."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:55
+msgid ""
+"Gets the contents of a text node. This will raise an error in any other type "
+"of node."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:61
+msgid ""
+"Gets the name of the current element node. This will raise an error if the "
+"current node type is neither [constant NODE_ELEMENT] nor [constant "
+"NODE_ELEMENT_END]."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:67
+msgid ""
+"Gets the byte offset of the current node since the beginning of the file or "
+"buffer."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:73
+msgid ""
+"Gets the type of the current node. Compare with [enum NodeType] constants."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:80
+msgid "Check whether the current element has a certain attribute."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:86
+msgid ""
+"Check whether the current element is empty (this only works for completely "
+"empty tags, e.g. [code]<element \\>[/code])."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:93
+msgid "Opens an XML file for parsing. This returns an error code."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:100
+msgid "Opens an XML raw buffer for parsing. This returns an error code."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:106
+msgid "Reads the next node of the file. This returns an error code."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:113
+msgid ""
+"Moves the buffer cursor to a certain offset (since the beginning) and read "
+"the next node there. This returns an error code."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:119
+msgid ""
+"Skips the current section. If the node contains other elements, they will be "
+"ignored and the cursor will go to the closing of the current element."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:125
+msgid "There's no node (no file or buffer opened)."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:128
+msgid "Element (tag)."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:131
+msgid "End of element."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:134
+msgid "Text node."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:137
+msgid "Comment node."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:140
+msgid "CDATA content."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:143
+msgid "Unknown node."
+msgstr ""
+
+#: doc/classes/YSort.xml:4
+msgid "Sort all child nodes based on their Y positions."
+msgstr ""
+
+#: doc/classes/YSort.xml:7
+msgid ""
+"Sort all child nodes based on their Y positions. The child node must inherit "
+"from [CanvasItem] for it to be sorted. Nodes that have a higher Y position "
+"will be drawn later, so they will appear on top of nodes that have a lower Y "
+"position.\n"
+"Nesting of YSort nodes is possible. Children YSort nodes will be sorted in "
+"the same space as the parent YSort, allowing to better organize a scene or "
+"divide it in multiple ones, yet keep the unique sorting."
+msgstr ""
+
+#: doc/classes/YSort.xml:16
+msgid ""
+"If [code]true[/code], child nodes are sorted, otherwise sorting is disabled."
+msgstr ""
diff --git a/doc/translations/nl.po b/doc/translations/nl.po
index f9f0b8af5d..26d5127ccc 100644
--- a/doc/translations/nl.po
+++ b/doc/translations/nl.po
@@ -6,12 +6,13 @@
# Stijn Hinlopen <f.a.hinlopen@gmail.com>, 2020.
# marnicq van loon <marnicqvanloon@gmail.com>, 2020.
# Pierre Stempin <pierre.stempin@gmail.com>, 2020.
+# Daan van Luijk <daanvl@outlook.be>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2020-12-26 14:29+0000\n"
-"Last-Translator: Stijn Hinlopen <f.a.hinlopen@gmail.com>\n"
+"PO-Revision-Date: 2021-11-07 22:24+0000\n"
+"Last-Translator: Daan van Luijk <daanvl@outlook.be>\n"
"Language-Team: Dutch <https://hosted.weblate.org/projects/godot-engine/godot-"
"class-reference/nl/>\n"
"Language: nl\n"
@@ -19,45 +20,45 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.4.1-dev\n"
+"X-Generator: Weblate 4.9-dev\n"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Description"
msgstr "Beschrijving"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Tutorials"
msgstr "Handleidingen"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Properties"
msgstr "Eigenschappen"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Methods"
msgstr "Methoden"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Theme Properties"
msgstr "Thema-eigenschappen"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Signals"
msgstr "Signalen"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Enumerations"
-msgstr "Enumeratie"
+msgstr "Enumeraties"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Constants"
msgstr "Constanten"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Property Descriptions"
msgstr "Eigenschapbeschrijvingen"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Method Descriptions"
msgstr "Methodebeschrijvingen"
@@ -117,7 +118,6 @@ msgstr ""
"zijn gedefinieerd."
#: modules/gdscript/doc_classes/@GDScript.xml:45
-#, fuzzy
msgid ""
"Returns the absolute value of parameter [code]s[/code] (i.e. positive "
"value).\n"
@@ -125,11 +125,10 @@ msgid ""
"a = abs(-1) # a is 1\n"
"[/codeblock]"
msgstr ""
-"Geeft als resultaat de absolute waarde van de parameter [code]s[/code] (d.w."
-"z. ongetekende waarde, werkt voor integer en float).\n"
+"Geeft als resultaat de absolute waarde van de parameter terug [code]s[/code] "
+"(d.w.z. positieve waarde).\n"
"[codeblock]\n"
-"# a is 1\n"
-"a = abs(-1)\n"
+"a = abs(-1) # a is 1\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:55
@@ -3640,112 +3639,121 @@ msgid ""
msgstr ""
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr ""
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
msgstr ""
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
msgstr ""
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
msgstr ""
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr ""
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr ""
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr ""
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
msgstr ""
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr ""
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
msgstr ""
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
msgstr ""
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr ""
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
"positive.\n"
@@ -4823,7 +4831,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -6259,21 +6267,25 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
#: doc/classes/Area.xml:17
msgid ""
-"Returns a list of intersecting [Area]s. For performance reasons (collisions "
-"are all processed at the same time) this list is modified once during the "
-"physics step, not immediately after objects are moved. Consider using "
-"signals instead."
+"Returns a list of intersecting [Area]s. The overlapping area's [member "
+"CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:23
+#: doc/classes/Area.xml:24
msgid ""
-"Returns a list of intersecting [PhysicsBody]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody]s. The overlapping body's "
+"[member CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:30
+#: doc/classes/Area.xml:32
msgid ""
"If [code]true[/code], the given area overlaps the Area.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6281,7 +6293,7 @@ msgid ""
"physics step. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:38
+#: doc/classes/Area.xml:40
msgid ""
"If [code]true[/code], the given physics body overlaps the Area.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6292,7 +6304,7 @@ msgid ""
"their tiles with collision shapes as a virtual physics body)."
msgstr ""
-#: doc/classes/Area.xml:46
+#: doc/classes/Area.xml:48
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
"velocity lost per second.\n"
@@ -6300,41 +6312,41 @@ msgid ""
"details about damping."
msgstr ""
-#: doc/classes/Area.xml:50 doc/classes/Area2D.xml:52
+#: doc/classes/Area.xml:52 doc/classes/Area2D.xml:54
msgid "The name of the area's audio bus."
msgstr ""
-#: doc/classes/Area.xml:53 doc/classes/Area2D.xml:55
+#: doc/classes/Area.xml:55 doc/classes/Area2D.xml:57
msgid ""
"If [code]true[/code], the area's audio bus overrides the default audio bus."
msgstr ""
-#: doc/classes/Area.xml:56
+#: doc/classes/Area.xml:58
msgid ""
"The area's gravity intensity (in meters per second squared). This value "
"multiplies the gravity vector. This is useful to alter the force of gravity "
"without altering its direction."
msgstr ""
-#: doc/classes/Area.xml:59 doc/classes/Area2D.xml:61
+#: doc/classes/Area.xml:61 doc/classes/Area2D.xml:63
msgid ""
"The falloff factor for point gravity. The greater the value, the faster "
"gravity decreases with distance."
msgstr ""
-#: doc/classes/Area.xml:62 doc/classes/Area2D.xml:64
+#: doc/classes/Area.xml:64 doc/classes/Area2D.xml:66
msgid ""
"If [code]true[/code], gravity is calculated from a point (set via [member "
"gravity_vec]). See also [member space_override]."
msgstr ""
-#: doc/classes/Area.xml:65 doc/classes/Area2D.xml:67
+#: doc/classes/Area.xml:67 doc/classes/Area2D.xml:69
msgid ""
"The area's gravity vector (not normalized). If gravity is a point (see "
"[member gravity_point]), this will be the point of attraction."
msgstr ""
-#: doc/classes/Area.xml:68
+#: doc/classes/Area.xml:70
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
"velocity lost per second.\n"
@@ -6342,61 +6354,61 @@ msgid ""
"about damping."
msgstr ""
-#: doc/classes/Area.xml:72 doc/classes/Area2D.xml:74
+#: doc/classes/Area.xml:74 doc/classes/Area2D.xml:76
msgid "If [code]true[/code], other monitoring areas can detect this area."
msgstr ""
-#: doc/classes/Area.xml:75 doc/classes/Area2D.xml:77
+#: doc/classes/Area.xml:77 doc/classes/Area2D.xml:79
msgid ""
"If [code]true[/code], the area detects bodies or areas entering and exiting "
"it."
msgstr ""
-#: doc/classes/Area.xml:78 doc/classes/Area2D.xml:80
+#: doc/classes/Area.xml:80 doc/classes/Area2D.xml:82
msgid "The area's priority. Higher priority areas are processed first."
msgstr ""
-#: doc/classes/Area.xml:81
+#: doc/classes/Area.xml:83
msgid ""
"The degree to which this area applies reverb to its associated audio. Ranges "
"from [code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
msgstr ""
-#: doc/classes/Area.xml:84
+#: doc/classes/Area.xml:86
msgid "If [code]true[/code], the area applies reverb to its associated audio."
msgstr ""
-#: doc/classes/Area.xml:87
+#: doc/classes/Area.xml:89
msgid "The reverb bus name to use for this area's associated audio."
msgstr ""
-#: doc/classes/Area.xml:90
+#: doc/classes/Area.xml:92
msgid ""
"The degree to which this area's reverb is a uniform effect. Ranges from "
"[code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
msgstr ""
-#: doc/classes/Area.xml:93 doc/classes/Area2D.xml:83
+#: doc/classes/Area.xml:95 doc/classes/Area2D.xml:85
msgid ""
"Override mode for gravity and damping calculations within this area. See "
"[enum SpaceOverride] for possible values."
msgstr ""
-#: doc/classes/Area.xml:100
+#: doc/classes/Area.xml:102
msgid ""
"Emitted when another Area enters this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
-#: doc/classes/Area.xml:107
+#: doc/classes/Area.xml:109
msgid ""
"Emitted when another Area exits this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
-#: doc/classes/Area.xml:117 doc/classes/Area.xml:130
+#: doc/classes/Area.xml:119 doc/classes/Area.xml:132
msgid ""
"Emitted when one of another Area's [Shape]s enters one of this Area's "
"[Shape]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6411,7 +6423,7 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:140
+#: doc/classes/Area.xml:142
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] enters this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -6420,7 +6432,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:147
+#: doc/classes/Area.xml:149
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] exits this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -6429,7 +6441,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:157 doc/classes/Area.xml:170
+#: doc/classes/Area.xml:159 doc/classes/Area.xml:172
msgid ""
"Emitted when one of a [PhysicsBody] or [GridMap]'s [Shape]s enters one of "
"this Area's [Shape]s. Requires [member monitoring] to be set to [code]true[/"
@@ -6446,29 +6458,29 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:180 doc/classes/Area2D.xml:170
+#: doc/classes/Area.xml:182 doc/classes/Area2D.xml:172
msgid "This area does not affect gravity/damping."
msgstr ""
-#: doc/classes/Area.xml:183 doc/classes/Area2D.xml:173
+#: doc/classes/Area.xml:185 doc/classes/Area2D.xml:175
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order)."
msgstr ""
-#: doc/classes/Area.xml:186 doc/classes/Area2D.xml:176
+#: doc/classes/Area.xml:188 doc/classes/Area2D.xml:178
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order), ignoring any lower priority areas."
msgstr ""
-#: doc/classes/Area.xml:189 doc/classes/Area2D.xml:179
+#: doc/classes/Area.xml:191 doc/classes/Area2D.xml:181
msgid ""
"This area replaces any gravity/damping, even the defaults, ignoring any "
"lower priority areas."
msgstr ""
-#: doc/classes/Area.xml:192 doc/classes/Area2D.xml:182
+#: doc/classes/Area.xml:194 doc/classes/Area2D.xml:184
msgid ""
"This area replaces any gravity/damping calculated so far (in [member "
"priority] order), but keeps calculating the rest of the areas."
@@ -6507,21 +6519,25 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
#: doc/classes/Area2D.xml:19
msgid ""
-"Returns a list of intersecting [Area2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [Area2D]s. The overlapping area's [member "
+"CollisionObject2D.collision_layer] must be part of this area's [member "
+"CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:25
+#: doc/classes/Area2D.xml:26
msgid ""
-"Returns a list of intersecting [PhysicsBody2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody2D]s. The overlapping body's "
+"[member CollisionObject2D.collision_layer] must be part of this area's "
+"[member CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:32
+#: doc/classes/Area2D.xml:34
msgid ""
"If [code]true[/code], the given area overlaps the Area2D.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6529,7 +6545,7 @@ msgid ""
"the physics step. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:40
+#: doc/classes/Area2D.xml:42
msgid ""
"If [code]true[/code], the given physics body overlaps the Area2D.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6540,7 +6556,7 @@ msgid ""
"register their tiles with collision shapes as a virtual physics body)."
msgstr ""
-#: doc/classes/Area2D.xml:48
+#: doc/classes/Area2D.xml:50
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
"velocity lost per second.\n"
@@ -6548,14 +6564,14 @@ msgid ""
"details about damping."
msgstr ""
-#: doc/classes/Area2D.xml:58
+#: doc/classes/Area2D.xml:60
msgid ""
"The area's gravity intensity (in pixels per second squared). This value "
"multiplies the gravity vector. This is useful to alter the force of gravity "
"without altering its direction."
msgstr ""
-#: doc/classes/Area2D.xml:70
+#: doc/classes/Area2D.xml:72
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
"velocity lost per second.\n"
@@ -6563,21 +6579,21 @@ msgid ""
"about damping."
msgstr ""
-#: doc/classes/Area2D.xml:90
+#: doc/classes/Area2D.xml:92
msgid ""
"Emitted when another Area2D enters this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-#: doc/classes/Area2D.xml:97
+#: doc/classes/Area2D.xml:99
msgid ""
"Emitted when another Area2D exits this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-#: doc/classes/Area2D.xml:107
+#: doc/classes/Area2D.xml:109
msgid ""
"Emitted when one of another Area2D's [Shape2D]s enters one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6592,7 +6608,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:120
+#: doc/classes/Area2D.xml:122
msgid ""
"Emitted when one of another Area2D's [Shape2D]s exits one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6607,7 +6623,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:130
+#: doc/classes/Area2D.xml:132
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] enters this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -6616,7 +6632,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:137
+#: doc/classes/Area2D.xml:139
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] exits this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -6625,7 +6641,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:147
+#: doc/classes/Area2D.xml:149
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s enters one "
"of this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -6644,7 +6660,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:160
+#: doc/classes/Area2D.xml:162
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s exits one of "
"this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -10214,42 +10230,47 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
-"no save path is provided it will try to match the path from the current "
+"no root node is provided, parent of this node will be used as root instead. "
+"If no save path is provided it will try to match the path from the current "
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -10263,62 +10284,62 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
msgid "The rotation of the baked custom sky."
msgstr ""
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -10326,35 +10347,35 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -10362,13 +10383,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -10380,65 +10401,77 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr ""
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
msgid "Baking was successful."
msgstr ""
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr ""
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr ""
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr ""
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:133
+#: doc/classes/BakedLightmap.xml:132
+msgid ""
+"Returns if lightmapper can't be created. Unless you are using a custom "
+"lightmapper, please report this as bug."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:135
+msgid ""
+"There is no root node to start baking from. Either provide [code]from_node[/"
+"code] argument or attach this node to a parent that should be used as root."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:136
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:139
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:142
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -10894,8 +10927,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -11283,26 +11319,33 @@ msgid "Text [Color] used when the [Button] is disabled."
msgstr ""
#: doc/classes/Button.xml:77
-msgid "Text [Color] used when the [Button] is being hovered."
+msgid ""
+"Text [Color] used when the [Button] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/Button.xml:80
-msgid "Text [Color] used when the [Button] is being pressed."
+msgid "Text [Color] used when the [Button] is being hovered."
msgstr ""
#: doc/classes/Button.xml:83
-msgid "[StyleBox] used when the [Button] is being hovered."
+msgid "Text [Color] used when the [Button] is being pressed."
msgstr ""
#: doc/classes/Button.xml:86
-msgid "The horizontal space between [Button]'s icon and text."
+msgid "[StyleBox] used when the [Button] is being hovered."
msgstr ""
#: doc/classes/Button.xml:89
-msgid "Default [StyleBox] for the [Button]."
+msgid "The horizontal space between [Button]'s icon and text."
msgstr ""
#: doc/classes/Button.xml:92
+msgid "Default [StyleBox] for the [Button]."
+msgstr ""
+
+#: doc/classes/Button.xml:95
msgid "[StyleBox] used when the [Button] is being pressed."
msgstr ""
@@ -12771,80 +12814,96 @@ msgstr ""
msgid "The check icon to display when the [CheckBox] is checked."
msgstr ""
-#: doc/classes/CheckBox.xml:30
+#: doc/classes/CheckBox.xml:28
+msgid "The check icon to display when the [CheckBox] is checked and disabled."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:31
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is disabled."
msgstr ""
-#: doc/classes/CheckBox.xml:33
+#: doc/classes/CheckBox.xml:34
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is focused."
msgstr ""
-#: doc/classes/CheckBox.xml:36
+#: doc/classes/CheckBox.xml:37
msgid "The [Font] to use for the [CheckBox] text."
msgstr ""
-#: doc/classes/CheckBox.xml:39
+#: doc/classes/CheckBox.xml:40
msgid "The [CheckBox] text's font color."
msgstr ""
-#: doc/classes/CheckBox.xml:42
+#: doc/classes/CheckBox.xml:43
msgid "The [CheckBox] text's font color when it's disabled."
msgstr ""
-#: doc/classes/CheckBox.xml:45
+#: doc/classes/CheckBox.xml:46
+msgid ""
+"The [CheckBox] text's font color when it's focused. Only replaces the normal "
+"text color of the checkbox. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:49
msgid "The [CheckBox] text's font color when it's hovered."
msgstr ""
-#: doc/classes/CheckBox.xml:48
+#: doc/classes/CheckBox.xml:52
msgid "The [CheckBox] text's font color when it's hovered and pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:51
+#: doc/classes/CheckBox.xml:55
msgid "The [CheckBox] text's font color when it's pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:54
+#: doc/classes/CheckBox.xml:58
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered."
msgstr ""
-#: doc/classes/CheckBox.xml:57
+#: doc/classes/CheckBox.xml:61
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered and "
"pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:60
+#: doc/classes/CheckBox.xml:64
msgid "The separation between the check icon and the text (in pixels)."
msgstr ""
-#: doc/classes/CheckBox.xml:63 doc/classes/CheckButton.xml:58
+#: doc/classes/CheckBox.xml:67 doc/classes/CheckButton.xml:61
msgid "The [StyleBox] to display as a background."
msgstr ""
-#: doc/classes/CheckBox.xml:66
+#: doc/classes/CheckBox.xml:70
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:69
+#: doc/classes/CheckBox.xml:73
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is checked."
msgstr ""
-#: doc/classes/CheckBox.xml:74
+#: doc/classes/CheckBox.xml:78
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is unchecked."
msgstr ""
-#: doc/classes/CheckBox.xml:79
+#: doc/classes/CheckBox.xml:83
msgid "The check icon to display when the [CheckBox] is unchecked."
msgstr ""
+#: doc/classes/CheckBox.xml:86
+msgid ""
+"The check icon to display when the [CheckBox] is unchecked and disabled."
+msgstr ""
+
#: doc/classes/CheckButton.xml:4
msgid "Checkable button. See also [CheckBox]."
msgstr ""
@@ -12888,49 +12947,56 @@ msgid "The [CheckButton] text's font color when it's disabled."
msgstr ""
#: doc/classes/CheckButton.xml:40
-msgid "The [CheckButton] text's font color when it's hovered."
+msgid ""
+"The [CheckButton] text's font color when it's focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/CheckButton.xml:43
-msgid "The [CheckButton] text's font color when it's hovered and pressed."
+msgid "The [CheckButton] text's font color when it's hovered."
msgstr ""
#: doc/classes/CheckButton.xml:46
-msgid "The [CheckButton] text's font color when it's pressed."
+msgid "The [CheckButton] text's font color when it's hovered and pressed."
msgstr ""
#: doc/classes/CheckButton.xml:49
+msgid "The [CheckButton] text's font color when it's pressed."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:52
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered."
msgstr ""
-#: doc/classes/CheckButton.xml:52
+#: doc/classes/CheckButton.xml:55
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered "
"and pressed."
msgstr ""
-#: doc/classes/CheckButton.xml:55
+#: doc/classes/CheckButton.xml:58
msgid "The separation between the toggle icon and the text (in pixels)."
msgstr ""
-#: doc/classes/CheckButton.xml:61
+#: doc/classes/CheckButton.xml:64
msgid "The icon to display when the [CheckButton] is unchecked."
msgstr ""
-#: doc/classes/CheckButton.xml:64
+#: doc/classes/CheckButton.xml:67
msgid "The icon to display when the [CheckButton] is unchecked and disabled."
msgstr ""
-#: doc/classes/CheckButton.xml:67
+#: doc/classes/CheckButton.xml:70
msgid "The icon to display when the [CheckButton] is checked."
msgstr ""
-#: doc/classes/CheckButton.xml:70
+#: doc/classes/CheckButton.xml:73
msgid "The icon to display when the [CheckButton] is checked and disabled."
msgstr ""
-#: doc/classes/CheckButton.xml:73
+#: doc/classes/CheckButton.xml:76
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is pressed."
msgstr ""
@@ -14705,26 +14771,33 @@ msgid "Text [Color] used when the [ColorPickerButton] is disabled."
msgstr ""
#: doc/classes/ColorPickerButton.xml:80
-msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
+msgid ""
+"Text [Color] used when the [ColorPickerButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/ColorPickerButton.xml:83
-msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
+msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
msgstr ""
#: doc/classes/ColorPickerButton.xml:86
-msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
+msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
msgstr ""
#: doc/classes/ColorPickerButton.xml:89
-msgid "The horizontal space between [ColorPickerButton]'s icon and text."
+msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
msgstr ""
#: doc/classes/ColorPickerButton.xml:92
-msgid "Default [StyleBox] for the [ColorPickerButton]."
+msgid "The horizontal space between [ColorPickerButton]'s icon and text."
msgstr ""
#: doc/classes/ColorPickerButton.xml:95
+msgid "Default [StyleBox] for the [ColorPickerButton]."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:98
msgid "[StyleBox] used when the [ColorPickerButton] is being pressed."
msgstr ""
@@ -19954,7 +20027,8 @@ msgid ""
"get_resource_type]. They may optionally specify some import presets that "
"affect the import process. EditorImportPlugins are responsible for creating "
"the resources and saving them in the [code].import[/code] directory (see "
-"[member ProjectSettings.application/config/project_data_dir_name]).\n"
+"[member ProjectSettings.application/config/"
+"use_hidden_project_data_directory]).\n"
"Below is an example EditorImportPlugin that imports a [Mesh] from a file "
"with the extension \".special\" or \".spec\":\n"
"[codeblock]\n"
@@ -20081,7 +20155,7 @@ msgstr ""
msgid ""
"Gets the extension used to save this resource in the [code].import[/code] "
"directory (see [member ProjectSettings.application/config/"
-"project_data_dir_name])."
+"use_hidden_project_data_directory])."
msgstr ""
#: doc/classes/EditorImportPlugin.xml:130
@@ -21116,8 +21190,11 @@ msgstr ""
msgid "Emitted when the value of the edited resource was changed."
msgstr ""
-#: doc/classes/EditorResourcePicker.xml:89
-msgid "Emitted when the resource value was set and user clicked to edit it."
+#: doc/classes/EditorResourcePicker.xml:90
+msgid ""
+"Emitted when the resource value was set and user clicked to edit it. When "
+"[code]edit[/code] is [code]true[/code], the signal was caused by the context "
+"menu \"Edit\" option."
msgstr ""
#: doc/classes/EditorResourcePreview.xml:4
@@ -24866,21 +24943,32 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html"
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -24889,14 +24977,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -24906,80 +24998,80 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
msgstr ""
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr ""
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -27727,16 +27819,18 @@ msgstr ""
#: doc/classes/Image.xml:436
msgid ""
"OpenGL texture format [code]RED[/code] with a single component and a "
-"bitdepth of 8."
+"bitdepth of 8.\n"
+"[b]Note:[/b] When using the GLES2 backend, this uses the alpha channel "
+"instead of the red channel for storage."
msgstr ""
-#: doc/classes/Image.xml:439
+#: doc/classes/Image.xml:440
msgid ""
"OpenGL texture format [code]RG[/code] with two components and a bitdepth of "
"8 for each."
msgstr ""
-#: doc/classes/Image.xml:442
+#: doc/classes/Image.xml:443
msgid ""
"OpenGL texture format [code]RGB[/code] with three components, each with a "
"bitdepth of 8.\n"
@@ -27744,7 +27838,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:446
+#: doc/classes/Image.xml:447
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 8.\n"
@@ -27752,73 +27846,73 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:450
+#: doc/classes/Image.xml:451
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 4."
msgstr ""
-#: doc/classes/Image.xml:453
+#: doc/classes/Image.xml:454
msgid ""
"OpenGL texture format [code]GL_RGB5_A1[/code] where 5 bits of depth for each "
"component of RGB and one bit for alpha."
msgstr ""
-#: doc/classes/Image.xml:456
+#: doc/classes/Image.xml:457
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 32-"
"bit floating-point value."
msgstr ""
-#: doc/classes/Image.xml:459
+#: doc/classes/Image.xml:460
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:462
+#: doc/classes/Image.xml:463
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:465
+#: doc/classes/Image.xml:466
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:468
+#: doc/classes/Image.xml:469
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 16-"
"bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:471
+#: doc/classes/Image.xml:472
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:474
+#: doc/classes/Image.xml:475
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:477
+#: doc/classes/Image.xml:478
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:480
+#: doc/classes/Image.xml:481
msgid ""
"A special OpenGL texture format where the three color components have 9 bits "
"of precision and all three share a single 5-bit exponent."
msgstr ""
-#: doc/classes/Image.xml:483
+#: doc/classes/Image.xml:484
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 1, and is the smallest variation "
@@ -27828,7 +27922,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:487
+#: doc/classes/Image.xml:488
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 2, and color data is interpreted "
@@ -27838,7 +27932,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:491
+#: doc/classes/Image.xml:492
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format also known as Block Compression 3 or BC3 that contains 64 "
@@ -27849,7 +27943,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:495
+#: doc/classes/Image.xml:496
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -27857,7 +27951,7 @@ msgid ""
"DXT5 uses for the alpha channel."
msgstr ""
-#: doc/classes/Image.xml:498
+#: doc/classes/Image.xml:499
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -27865,7 +27959,7 @@ msgid ""
"algorithm that DXT5 uses for the alpha channel."
msgstr ""
-#: doc/classes/Image.xml:501
+#: doc/classes/Image.xml:502
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned normalized "
@@ -27874,21 +27968,21 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:505
+#: doc/classes/Image.xml:506
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with signed floating-point "
"RGB components."
msgstr ""
-#: doc/classes/Image.xml:508
+#: doc/classes/Image.xml:509
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned floating-point "
"RGB components."
msgstr ""
-#: doc/classes/Image.xml:511
+#: doc/classes/Image.xml:512
msgid ""
"Texture format used on PowerVR-supported mobile platforms, uses 2-bit color "
"depth with no alpha. More information can be found [url=https://en.wikipedia."
@@ -27897,25 +27991,25 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:515
+#: doc/classes/Image.xml:516
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with an "
"alpha component."
msgstr ""
-#: doc/classes/Image.xml:518
+#: doc/classes/Image.xml:519
msgid ""
"Similar to [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with 4-"
"bit color depth and no alpha."
msgstr ""
-#: doc/classes/Image.xml:521
+#: doc/classes/Image.xml:522
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC4[/url], but with an "
"alpha component."
msgstr ""
-#: doc/classes/Image.xml:524
+#: doc/classes/Image.xml:525
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC1]Ericsson Texture Compression format 1[/"
@@ -27923,7 +28017,7 @@ msgid ""
"standard. This format cannot store an alpha channel."
msgstr ""
-#: doc/classes/Image.xml:527
+#: doc/classes/Image.xml:528
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27931,7 +28025,7 @@ msgid ""
"unsigned data."
msgstr ""
-#: doc/classes/Image.xml:530
+#: doc/classes/Image.xml:531
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27939,7 +28033,7 @@ msgid ""
"channel of signed data."
msgstr ""
-#: doc/classes/Image.xml:533
+#: doc/classes/Image.xml:534
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27947,7 +28041,7 @@ msgid ""
"of unsigned data."
msgstr ""
-#: doc/classes/Image.xml:536
+#: doc/classes/Image.xml:537
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27955,7 +28049,7 @@ msgid ""
"channels of signed data."
msgstr ""
-#: doc/classes/Image.xml:539
+#: doc/classes/Image.xml:540
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27965,7 +28059,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:543
+#: doc/classes/Image.xml:544
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27975,7 +28069,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:547
+#: doc/classes/Image.xml:548
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27986,31 +28080,31 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:551
+#: doc/classes/Image.xml:552
msgid "Represents the size of the [enum Format] enum."
msgstr ""
-#: doc/classes/Image.xml:554
+#: doc/classes/Image.xml:555
msgid ""
"Performs nearest-neighbor interpolation. If the image is resized, it will be "
"pixelated."
msgstr ""
-#: doc/classes/Image.xml:557
+#: doc/classes/Image.xml:558
msgid ""
"Performs bilinear interpolation. If the image is resized, it will be blurry. "
"This mode is faster than [constant INTERPOLATE_CUBIC], but it results in "
"lower quality."
msgstr ""
-#: doc/classes/Image.xml:560
+#: doc/classes/Image.xml:561
msgid ""
"Performs cubic interpolation. If the image is resized, it will be blurry. "
"This mode often gives better results compared to [constant "
"INTERPOLATE_BILINEAR], at the cost of being slower."
msgstr ""
-#: doc/classes/Image.xml:563
+#: doc/classes/Image.xml:564
msgid ""
"Performs bilinear separately on the two most-suited mipmap levels, then "
"linearly interpolates between them.\n"
@@ -28025,55 +28119,55 @@ msgid ""
"a new set will be generated for the resulting image."
msgstr ""
-#: doc/classes/Image.xml:570
+#: doc/classes/Image.xml:571
msgid ""
"Performs Lanczos interpolation. This is the slowest image resizing mode, but "
"it typically gives the best results, especially when downscalng images."
msgstr ""
-#: doc/classes/Image.xml:573
+#: doc/classes/Image.xml:574
msgid "Image does not have alpha."
msgstr ""
-#: doc/classes/Image.xml:576
+#: doc/classes/Image.xml:577
msgid "Image stores alpha in a single bit."
msgstr ""
-#: doc/classes/Image.xml:579
+#: doc/classes/Image.xml:580
msgid "Image uses alpha."
msgstr ""
-#: doc/classes/Image.xml:582
+#: doc/classes/Image.xml:583
msgid "Use S3TC compression."
msgstr ""
-#: doc/classes/Image.xml:585
+#: doc/classes/Image.xml:586
msgid "Use PVRTC2 compression."
msgstr ""
-#: doc/classes/Image.xml:588
+#: doc/classes/Image.xml:589
msgid "Use PVRTC4 compression."
msgstr ""
-#: doc/classes/Image.xml:591
+#: doc/classes/Image.xml:592
msgid "Use ETC compression."
msgstr ""
-#: doc/classes/Image.xml:594
+#: doc/classes/Image.xml:595
msgid "Use ETC2 compression."
msgstr ""
-#: doc/classes/Image.xml:597
+#: doc/classes/Image.xml:598
msgid ""
"Source texture (before compression) is a regular texture. Default for all "
"textures."
msgstr ""
-#: doc/classes/Image.xml:600
+#: doc/classes/Image.xml:601
msgid "Source texture (before compression) is in sRGB space."
msgstr ""
-#: doc/classes/Image.xml:603
+#: doc/classes/Image.xml:604
msgid ""
"Source texture (before compression) is a normal texture (e.g. it can be "
"compressed into two channels)."
@@ -28297,6 +28391,17 @@ msgstr ""
#: doc/classes/Input.xml:43
msgid ""
+"Sends all input events which are in the current buffer to the game loop. "
+"These events may have been buffered as a result of accumulated input "
+"([method set_use_accumulated_input]) or agile input flushing ([member "
+"ProjectSettings.input_devices/buffering/agile_event_flushing]).\n"
+"The engine will already do this itself at key execution points (at least "
+"once per frame). However, this can be useful in advanced cases where you "
+"want precise control over the timing of event handling."
+msgstr ""
+
+#: doc/classes/Input.xml:50
+msgid ""
"Returns the acceleration of the device's accelerometer sensor, if the device "
"has one. Otherwise, the method returns [constant Vector3.ZERO].\n"
"Note this method returns an empty [Vector3] when running from the editor "
@@ -28308,7 +28413,7 @@ msgid ""
"the Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:53
+#: doc/classes/Input.xml:60
msgid ""
"Returns a value between 0 and 1 representing the raw intensity of the given "
"action, ignoring the action's deadzone. In most cases, you should use "
@@ -28318,7 +28423,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:62
+#: doc/classes/Input.xml:69
msgid ""
"Returns a value between 0 and 1 representing the intensity of the given "
"action. In a joypad, for example, the further away the axis (analog sticks "
@@ -28330,7 +28435,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:71
+#: doc/classes/Input.xml:78
msgid ""
"Get axis input by specifying two actions, one negative and one positive.\n"
"This is a shorthand for writing [code]Input."
@@ -28338,17 +28443,17 @@ msgid ""
"get_action_strength(\"negative_action\")[/code]."
msgstr ""
-#: doc/classes/Input.xml:78
+#: doc/classes/Input.xml:85
msgid ""
"Returns an [Array] containing the device IDs of all currently connected "
"joypads."
msgstr ""
-#: doc/classes/Input.xml:84
+#: doc/classes/Input.xml:91
msgid "Returns the currently assigned cursor shape (see [enum CursorShape])."
msgstr ""
-#: doc/classes/Input.xml:90
+#: doc/classes/Input.xml:97
msgid ""
"Returns the gravity of the device's accelerometer sensor, if the device has "
"one. Otherwise, the method returns [constant Vector3.ZERO].\n"
@@ -28358,7 +28463,7 @@ msgid ""
"Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:97
+#: doc/classes/Input.xml:104
msgid ""
"Returns the rotation rate in rad/s around a device's X, Y, and Z axes of the "
"gyroscope sensor, if the device has one. Otherwise, the method returns "
@@ -28367,53 +28472,53 @@ msgid ""
"it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:106
+#: doc/classes/Input.xml:113
msgid ""
"Returns the current value of the joypad axis at given index (see [enum "
"JoystickList])."
msgstr ""
-#: doc/classes/Input.xml:113
+#: doc/classes/Input.xml:120
msgid "Returns the index of the provided axis name."
msgstr ""
-#: doc/classes/Input.xml:120
+#: doc/classes/Input.xml:127
msgid ""
"Receives a [enum JoystickList] axis and returns its equivalent name as a "
"string."
msgstr ""
-#: doc/classes/Input.xml:127
+#: doc/classes/Input.xml:134
msgid "Returns the index of the provided button name."
msgstr ""
-#: doc/classes/Input.xml:134
+#: doc/classes/Input.xml:141
msgid ""
"Receives a gamepad button from [enum JoystickList] and returns its "
"equivalent name as a string."
msgstr ""
-#: doc/classes/Input.xml:141
+#: doc/classes/Input.xml:148
msgid ""
"Returns a SDL2-compatible device GUID on platforms that use gamepad "
"remapping. Returns [code]\"Default Gamepad\"[/code] otherwise."
msgstr ""
-#: doc/classes/Input.xml:148
+#: doc/classes/Input.xml:155
msgid "Returns the name of the joypad at the specified device index."
msgstr ""
-#: doc/classes/Input.xml:155
+#: doc/classes/Input.xml:162
msgid "Returns the duration of the current vibration effect in seconds."
msgstr ""
-#: doc/classes/Input.xml:162
+#: doc/classes/Input.xml:169
msgid ""
"Returns the strength of the joypad vibration: x is the strength of the weak "
"motor, and y is the strength of the strong motor."
msgstr ""
-#: doc/classes/Input.xml:168
+#: doc/classes/Input.xml:175
msgid ""
"Returns the mouse speed for the last time the cursor was moved, and this "
"until the next frame where the mouse moves. This means that even if the "
@@ -28421,7 +28526,7 @@ msgid ""
"motion."
msgstr ""
-#: doc/classes/Input.xml:174
+#: doc/classes/Input.xml:181
msgid ""
"Returns the magnetic field strength in micro-Tesla for all axes of the "
"device's magnetometer sensor, if the device has one. Otherwise, the method "
@@ -28430,17 +28535,17 @@ msgid ""
"platforms, it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:181
+#: doc/classes/Input.xml:188
msgid ""
"Returns mouse buttons as a bitmask. If multiple mouse buttons are pressed at "
"the same time, the bits are added together."
msgstr ""
-#: doc/classes/Input.xml:187
+#: doc/classes/Input.xml:194
msgid "Returns the mouse mode. See the constants for more information."
msgstr ""
-#: doc/classes/Input.xml:198
+#: doc/classes/Input.xml:205
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -28453,7 +28558,7 @@ msgid ""
"want (on the range of 0 to 1)."
msgstr ""
-#: doc/classes/Input.xml:208
+#: doc/classes/Input.xml:215
msgid ""
"Returns [code]true[/code] when the user starts pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user pressed down "
@@ -28465,7 +28570,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:218
+#: doc/classes/Input.xml:225
msgid ""
"Returns [code]true[/code] when the user stops pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user released the "
@@ -28475,7 +28580,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:227
+#: doc/classes/Input.xml:234
msgid ""
"Returns [code]true[/code] if you are pressing the action event. Note that if "
"an action has multiple buttons assigned and more than one of them is "
@@ -28486,13 +28591,13 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:236
+#: doc/classes/Input.xml:243
msgid ""
"Returns [code]true[/code] if you are pressing the joypad button (see [enum "
"JoystickList])."
msgstr ""
-#: doc/classes/Input.xml:243
+#: doc/classes/Input.xml:250
msgid ""
"Returns [code]true[/code] if the system knows the specified device. This "
"means that it sets all button and axis indices exactly as defined in [enum "
@@ -28500,19 +28605,19 @@ msgid ""
"but you can still retrieve events from them."
msgstr ""
-#: doc/classes/Input.xml:250
+#: doc/classes/Input.xml:257
msgid ""
"Returns [code]true[/code] if you are pressing the key. You can pass a [enum "
"KeyList] constant."
msgstr ""
-#: doc/classes/Input.xml:257
+#: doc/classes/Input.xml:264
msgid ""
"Returns [code]true[/code] if you are pressing the mouse button specified "
"with [enum ButtonList]."
msgstr ""
-#: doc/classes/Input.xml:267
+#: doc/classes/Input.xml:274
msgid ""
"Notifies the [Input] singleton that a connection has changed, to update the "
"state for the [code]device[/code] index.\n"
@@ -28521,7 +28626,7 @@ msgid ""
"triggered internally."
msgstr ""
-#: doc/classes/Input.xml:275
+#: doc/classes/Input.xml:282
msgid ""
"Feeds an [InputEvent] to the game. Can be used to artificially trigger input "
"events from code. Also generates [method Node._input] calls.\n"
@@ -28534,12 +28639,21 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Input.xml:289
+#: doc/classes/Input.xml:296
msgid ""
"Removes all mappings from the internal database that match the given GUID."
msgstr ""
-#: doc/classes/Input.xml:298
+#: doc/classes/Input.xml:303
+msgid ""
+"Sets the acceleration value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:313
msgid ""
"Sets a custom mouse cursor image, which is only visible inside the game "
"window. The hotspot can also be specified. Passing [code]null[/code] to the "
@@ -28554,7 +28668,7 @@ msgid ""
"compression mode can't be used for custom cursors."
msgstr ""
-#: doc/classes/Input.xml:309
+#: doc/classes/Input.xml:324
msgid ""
"Sets the default cursor shape to be used in the viewport instead of "
"[constant CURSOR_ARROW].\n"
@@ -28564,11 +28678,38 @@ msgid ""
"cursor immediately."
msgstr ""
-#: doc/classes/Input.xml:318
+#: doc/classes/Input.xml:333
+msgid ""
+"Sets the gravity value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:341
+msgid ""
+"Sets the value of the rotation rate of the gyroscope sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:349
+msgid ""
+"Sets the value of the magnetic field of the magnetometer sensor. Can be used "
+"for debugging on devices without a hardware sensor, for example in an editor "
+"on a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:357
msgid "Sets the mouse mode. See the constants for more information."
msgstr ""
-#: doc/classes/Input.xml:325
+#: doc/classes/Input.xml:364
msgid ""
"Enables or disables the accumulation of similar input events sent by the "
"operating system. When input accumulation is enabled, all input events "
@@ -28582,7 +28723,7 @@ msgid ""
"results that closely follow the actual input."
msgstr ""
-#: doc/classes/Input.xml:336
+#: doc/classes/Input.xml:375
msgid ""
"Starts to vibrate the joypad. Joypads usually come with two rumble motors, a "
"strong and a weak one. [code]weak_magnitude[/code] is the strength of the "
@@ -28595,34 +28736,34 @@ msgid ""
"few seconds."
msgstr ""
-#: doc/classes/Input.xml:344
+#: doc/classes/Input.xml:383
msgid "Stops the vibration of the joypad."
msgstr ""
-#: doc/classes/Input.xml:351
+#: doc/classes/Input.xml:390
msgid ""
"Vibrate Android and iOS devices.\n"
"[b]Note:[/b] It needs [code]VIBRATE[/code] permission for Android at export "
"settings. iOS does not support duration."
msgstr ""
-#: doc/classes/Input.xml:359
+#: doc/classes/Input.xml:398
msgid "Sets the mouse position to the specified vector."
msgstr ""
-#: doc/classes/Input.xml:368
+#: doc/classes/Input.xml:407
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
-#: doc/classes/Input.xml:374
+#: doc/classes/Input.xml:413
msgid "Makes the mouse cursor visible if it is hidden."
msgstr ""
-#: doc/classes/Input.xml:377
+#: doc/classes/Input.xml:416
msgid "Makes the mouse cursor hidden if it is visible."
msgstr ""
-#: doc/classes/Input.xml:380
+#: doc/classes/Input.xml:419
msgid ""
"Captures the mouse. The mouse will be hidden and its position locked at the "
"center of the screen.\n"
@@ -28630,83 +28771,83 @@ msgid ""
"need to use [member InputEventMouseMotion.relative]."
msgstr ""
-#: doc/classes/Input.xml:384
+#: doc/classes/Input.xml:423
msgid "Makes the mouse cursor visible but confines it to the game window."
msgstr ""
-#: doc/classes/Input.xml:387
+#: doc/classes/Input.xml:426
msgid "Arrow cursor. Standard, default pointing cursor."
msgstr ""
-#: doc/classes/Input.xml:390
+#: doc/classes/Input.xml:429
msgid ""
"I-beam cursor. Usually used to show where the text cursor will appear when "
"the mouse is clicked."
msgstr ""
-#: doc/classes/Input.xml:393
+#: doc/classes/Input.xml:432
msgid ""
"Pointing hand cursor. Usually used to indicate the pointer is over a link or "
"other interactable item."
msgstr ""
-#: doc/classes/Input.xml:396
+#: doc/classes/Input.xml:435
msgid ""
"Cross cursor. Typically appears over regions in which a drawing operation "
"can be performed or for selections."
msgstr ""
-#: doc/classes/Input.xml:399
+#: doc/classes/Input.xml:438
msgid ""
"Wait cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application is still usable during the "
"operation."
msgstr ""
-#: doc/classes/Input.xml:402
+#: doc/classes/Input.xml:441
msgid ""
"Busy cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application isn't usable during the "
"operation (e.g. something is blocking its main thread)."
msgstr ""
-#: doc/classes/Input.xml:405
+#: doc/classes/Input.xml:444
msgid "Drag cursor. Usually displayed when dragging something."
msgstr ""
-#: doc/classes/Input.xml:408
+#: doc/classes/Input.xml:447
msgid ""
"Can drop cursor. Usually displayed when dragging something to indicate that "
"it can be dropped at the current position."
msgstr ""
-#: doc/classes/Input.xml:411
+#: doc/classes/Input.xml:450
msgid ""
"Forbidden cursor. Indicates that the current action is forbidden (for "
"example, when dragging something) or that the control at a position is "
"disabled."
msgstr ""
-#: doc/classes/Input.xml:414
+#: doc/classes/Input.xml:453
msgid ""
"Vertical resize mouse cursor. A double-headed vertical arrow. It tells the "
"user they can resize the window or the panel vertically."
msgstr ""
-#: doc/classes/Input.xml:417
+#: doc/classes/Input.xml:456
msgid ""
"Horizontal resize mouse cursor. A double-headed horizontal arrow. It tells "
"the user they can resize the window or the panel horizontally."
msgstr ""
-#: doc/classes/Input.xml:420
+#: doc/classes/Input.xml:459
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the bottom left to the top right. It tells the user they can resize the "
"window or the panel both horizontally and vertically."
msgstr ""
-#: doc/classes/Input.xml:423
+#: doc/classes/Input.xml:462
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the top left to the bottom right, the opposite of [constant "
@@ -28714,23 +28855,23 @@ msgid ""
"both horizontally and vertically."
msgstr ""
-#: doc/classes/Input.xml:426
+#: doc/classes/Input.xml:465
msgid "Move cursor. Indicates that something can be moved."
msgstr ""
-#: doc/classes/Input.xml:429
+#: doc/classes/Input.xml:468
msgid ""
"Vertical split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_VSIZE]."
msgstr ""
-#: doc/classes/Input.xml:432
+#: doc/classes/Input.xml:471
msgid ""
"Horizontal split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_HSIZE]."
msgstr ""
-#: doc/classes/Input.xml:435
+#: doc/classes/Input.xml:474
msgid "Help cursor. Usually a question mark."
msgstr ""
@@ -29146,7 +29287,9 @@ msgid "The drag position."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -30458,7 +30601,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30523,22 +30667,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -30553,7 +30699,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -30561,19 +30707,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -30644,7 +30790,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30702,7 +30849,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -31987,14 +32136,21 @@ msgid "Default text [Color] of the [LinkButton]."
msgstr ""
#: doc/classes/LinkButton.xml:46
-msgid "Text [Color] used when the [LinkButton] is being hovered."
+msgid ""
+"Text [Color] used when the [LinkButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/LinkButton.xml:49
-msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgid "Text [Color] used when the [LinkButton] is being hovered."
msgstr ""
#: doc/classes/LinkButton.xml:52
+msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:55
msgid "The vertical space between the baseline of text and the underline."
msgstr ""
@@ -32487,26 +32643,33 @@ msgid "Text [Color] used when the [MenuButton] is disabled."
msgstr ""
#: doc/classes/MenuButton.xml:64
-msgid "Text [Color] used when the [MenuButton] is being hovered."
+msgid ""
+"Text [Color] used when the [MenuButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/MenuButton.xml:67
-msgid "Text [Color] used when the [MenuButton] is being pressed."
+msgid "Text [Color] used when the [MenuButton] is being hovered."
msgstr ""
#: doc/classes/MenuButton.xml:70
-msgid "[StyleBox] used when the [MenuButton] is being hovered."
+msgid "Text [Color] used when the [MenuButton] is being pressed."
msgstr ""
#: doc/classes/MenuButton.xml:73
-msgid "The horizontal space between [MenuButton]'s icon and text."
+msgid "[StyleBox] used when the [MenuButton] is being hovered."
msgstr ""
#: doc/classes/MenuButton.xml:76
-msgid "Default [StyleBox] for the [MenuButton]."
+msgid "The horizontal space between [MenuButton]'s icon and text."
msgstr ""
#: doc/classes/MenuButton.xml:79
+msgid "Default [StyleBox] for the [MenuButton]."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:82
msgid "[StyleBox] used when the [MenuButton] is being pressed."
msgstr ""
@@ -34231,7 +34394,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -37115,26 +37278,33 @@ msgid "Text [Color] used when the [OptionButton] is disabled."
msgstr ""
#: doc/classes/OptionButton.xml:212
-msgid "Text [Color] used when the [OptionButton] is being hovered."
+msgid ""
+"Text [Color] used when the [OptionButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/OptionButton.xml:215
-msgid "Text [Color] used when the [OptionButton] is being pressed."
+msgid "Text [Color] used when the [OptionButton] is being hovered."
msgstr ""
#: doc/classes/OptionButton.xml:218
-msgid "[StyleBox] used when the [OptionButton] is being hovered."
+msgid "Text [Color] used when the [OptionButton] is being pressed."
msgstr ""
#: doc/classes/OptionButton.xml:221
-msgid "The horizontal space between [OptionButton]'s icon and text."
+msgid "[StyleBox] used when the [OptionButton] is being hovered."
msgstr ""
#: doc/classes/OptionButton.xml:224
-msgid "Default [StyleBox] for the [OptionButton]."
+msgid "The horizontal space between [OptionButton]'s icon and text."
msgstr ""
#: doc/classes/OptionButton.xml:227
+msgid "Default [StyleBox] for the [OptionButton]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:230
msgid "[StyleBox] used when the [OptionButton] is being pressed."
msgstr ""
@@ -37537,7 +37707,7 @@ msgstr ""
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -37567,14 +37737,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -37584,7 +37754,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -40069,17 +40239,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -40097,11 +40293,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -40296,7 +40492,9 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-msgid "Returns the [Physics2DDirectBodyState] of the body."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
@@ -41098,6 +41296,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -41115,7 +41331,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -41229,7 +41445,9 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-msgid "Returns the [PhysicsDirectBodyState] of the body."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/PhysicsServer.xml:370
@@ -42208,27 +42426,27 @@ msgstr ""
msgid "Removes an element from the array by index."
msgstr ""
-#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolColorArray.xml:66
-#: doc/classes/PoolIntArray.xml:67 doc/classes/PoolRealArray.xml:67
-#: doc/classes/PoolStringArray.xml:74 doc/classes/PoolVector2Array.xml:67
-#: doc/classes/PoolVector3Array.xml:66
+#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolIntArray.xml:67
+#: doc/classes/PoolRealArray.xml:67
msgid ""
"Sets the size of the array. If the array is grown, reserves elements at the "
"end of the array. If the array is shrunk, truncates the array to the new "
-"size."
+"size.\n"
+"[b]Note:[/b] Added elements are not automatically initialized to 0 and will "
+"contain garbage, i.e. indeterminate values."
msgstr ""
-#: doc/classes/PoolByteArray.xml:121
+#: doc/classes/PoolByteArray.xml:122
msgid "Changes the byte at the given index."
msgstr ""
-#: doc/classes/PoolByteArray.xml:127 doc/classes/PoolColorArray.xml:79
-#: doc/classes/PoolRealArray.xml:80 doc/classes/PoolStringArray.xml:87
+#: doc/classes/PoolByteArray.xml:128 doc/classes/PoolColorArray.xml:79
+#: doc/classes/PoolRealArray.xml:81 doc/classes/PoolStringArray.xml:87
#: doc/classes/PoolVector2Array.xml:80 doc/classes/PoolVector3Array.xml:79
msgid "Returns the size of the array."
msgstr ""
-#: doc/classes/PoolByteArray.xml:135
+#: doc/classes/PoolByteArray.xml:136
msgid ""
"Returns the slice of the [PoolByteArray] between indices (inclusive) as a "
"new [PoolByteArray]. Any negative index is considered to be from the end of "
@@ -42260,6 +42478,14 @@ msgstr ""
msgid "Appends a value to the array."
msgstr ""
+#: doc/classes/PoolColorArray.xml:66 doc/classes/PoolStringArray.xml:74
+#: doc/classes/PoolVector2Array.xml:67 doc/classes/PoolVector3Array.xml:66
+msgid ""
+"Sets the size of the array. If the array is grown, reserves elements at the "
+"end of the array. If the array is shrunk, truncates the array to the new "
+"size."
+msgstr ""
+
#: doc/classes/PoolColorArray.xml:73
msgid "Changes the [Color] at the given index."
msgstr ""
@@ -42296,11 +42522,11 @@ msgid ""
"valid, or at the end of the array ([code]idx == size()[/code])."
msgstr ""
-#: doc/classes/PoolIntArray.xml:74
+#: doc/classes/PoolIntArray.xml:75
msgid "Changes the int at the given index."
msgstr ""
-#: doc/classes/PoolIntArray.xml:80
+#: doc/classes/PoolIntArray.xml:81
msgid "Returns the array size."
msgstr ""
@@ -42332,7 +42558,7 @@ msgstr ""
msgid "Appends a [PoolRealArray] at the end of this array."
msgstr ""
-#: doc/classes/PoolRealArray.xml:74
+#: doc/classes/PoolRealArray.xml:75
msgid "Changes the float at the given index."
msgstr ""
@@ -43598,18 +43824,6 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:204
msgid ""
-"The project data directory is used for storing project-specific data "
-"(metadata, shader cache, etc.).\n"
-"[b]Note:[/b] Restart the application after changing this setting.\n"
-"[b]Note:[/b] Changing this value can help on platforms or with third-party "
-"tools where specific directory patterns are disallowed. Only modify this "
-"setting if you know that your environment requires it, as changing the "
-"default can impact compatibility with some external tools or plugins which "
-"expect the default [code].import[/code] folder."
-msgstr ""
-
-#: doc/classes/ProjectSettings.xml:209
-msgid ""
"Specifies a file to override project settings. For example: [code]user://"
"custom_settings.cfg[/code]. See \"Overriding\" in the [ProjectSettings] "
"class description at the top for more information.\n"
@@ -43617,7 +43831,7 @@ msgid ""
"code] will still be read to override the project settings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:213
+#: doc/classes/ProjectSettings.xml:208
msgid ""
"If [code]true[/code], the project will save user data to its own user "
"directory (see [member application/config/custom_user_dir_name]). This "
@@ -43627,13 +43841,28 @@ msgid ""
"user data directory)/Godot/app_userdata/(project name)[/code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:216
+#: doc/classes/ProjectSettings.xml:211
+msgid ""
+"If [code]true[/code], the project will use a hidden directory ([code]."
+"import[/code]) for storing project-specific data (metadata, shader cache, "
+"etc.).\n"
+"If [code]false[/code], a non-hidden directory ([code]import[/code]) will be "
+"used instead.\n"
+"[b]Note:[/b] Restart the application after changing this setting.\n"
+"[b]Note:[/b] Changing this value can help on platforms or with third-party "
+"tools where hidden directory patterns are disallowed. Only modify this "
+"setting if you know that your environment requires it, as changing the "
+"default can impact compatibility with some external tools or plugins which "
+"expect the default [code].import[/code] folder."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:217
msgid ""
"Icon set in [code].ico[/code] format used on Windows to set the game's icon. "
"This is done automatically on start by calling [method OS.set_native_icon]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:219
+#: doc/classes/ProjectSettings.xml:220
msgid ""
"Time samples for frame deltas are subject to random variation introduced by "
"the platform, even when frames are displayed at regular intervals thanks to "
@@ -43647,14 +43876,14 @@ msgid ""
"adequate to render frames at the refresh rate."
msgstr ""
-#: doc/classes/ProjectSettings.xml:224
+#: doc/classes/ProjectSettings.xml:225
msgid ""
"[b]Experimental.[/b] Shifts the measurement of delta time for each frame to "
"just after the drawing has taken place. This may lead to more consistent "
"deltas and a reduction in frame stutters."
msgstr ""
-#: doc/classes/ProjectSettings.xml:227
+#: doc/classes/ProjectSettings.xml:228
msgid ""
"If [code]true[/code], disables printing to standard error. If [code]true[/"
"code], this also hides error and warning messages printed by [method "
@@ -43663,7 +43892,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:231
+#: doc/classes/ProjectSettings.xml:232
msgid ""
"If [code]true[/code], disables printing to standard output. This is "
"equivalent to starting the editor or project with the [code]--quiet[/code] "
@@ -43671,7 +43900,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:235
+#: doc/classes/ProjectSettings.xml:236
msgid ""
"If [code]true[/code], flushes the standard output stream every time a line "
"is printed. This affects both terminal logging and file logging.\n"
@@ -43687,20 +43916,20 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:241
+#: doc/classes/ProjectSettings.xml:242
msgid ""
"Debug build override for [member application/run/flush_stdout_on_print], as "
"performance is less important during debugging.\n"
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:245
+#: doc/classes/ProjectSettings.xml:246
msgid ""
"Forces a delay between frames in the main loop (in milliseconds). This may "
"be useful if you plan to disable vertical synchronization."
msgstr ""
-#: doc/classes/ProjectSettings.xml:248
+#: doc/classes/ProjectSettings.xml:249
msgid ""
"If [code]true[/code], enables low-processor usage mode. This setting only "
"works on desktop platforms. The screen is not redrawn if nothing changes "
@@ -43708,75 +43937,81 @@ msgid ""
"useless (and can hurt performance) in most games."
msgstr ""
-#: doc/classes/ProjectSettings.xml:251
+#: doc/classes/ProjectSettings.xml:252
msgid ""
"Amount of sleeping between frames when the low-processor usage mode is "
"enabled (in microseconds). Higher values will result in lower CPU usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:254
+#: doc/classes/ProjectSettings.xml:255
msgid "Path to the main scene file that will be loaded when the project runs."
msgstr ""
-#: doc/classes/ProjectSettings.xml:257 doc/classes/ProjectSettings.xml:260
+#: doc/classes/ProjectSettings.xml:258 doc/classes/ProjectSettings.xml:261
msgid ""
"Audio buses will disable automatically when sound goes below a given dB "
"threshold for a given time. This saves CPU as effects assigned to that bus "
"will no longer do any processing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:263
+#: doc/classes/ProjectSettings.xml:264
msgid ""
"Default [AudioBusLayout] resource file to use in the project, unless "
"overridden by the scene."
msgstr ""
-#: doc/classes/ProjectSettings.xml:266
+#: doc/classes/ProjectSettings.xml:267
msgid ""
"Specifies the audio driver to use. This setting is platform-dependent as "
"each platform supports different audio drivers. If left empty, the default "
"audio driver will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:269
+#: doc/classes/ProjectSettings.xml:270
msgid ""
"If [code]true[/code], microphone input will be allowed. This requires "
"appropriate permissions to be set when exporting to Android or iOS."
msgstr ""
-#: doc/classes/ProjectSettings.xml:272
+#: doc/classes/ProjectSettings.xml:273
msgid ""
"The mixing rate used for audio (in Hz). In general, it's better to not touch "
"this and leave it to the host operating system."
msgstr ""
-#: doc/classes/ProjectSettings.xml:275
+#: doc/classes/ProjectSettings.xml:276
msgid ""
"Safer override for [member audio/mix_rate] in the Web platform. Here "
"[code]0[/code] means \"let the browser choose\" (since some browsers do not "
"like forcing the mix rate)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:278
+#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:281
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:284
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:287
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43786,7 +44021,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:290
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43796,27 +44031,27 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:293
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:296
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
-#: doc/classes/ProjectSettings.xml:299
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:302
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -43824,81 +44059,81 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:305
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:308
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:311
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:314
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:317
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr ""
-#: doc/classes/ProjectSettings.xml:320
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:323
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:326
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:329
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:332
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:335
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:338
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:341
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -43906,109 +44141,109 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:344
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:347
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:350
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:353
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:356
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:359
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:362
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:365
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:368
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:371
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:374
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:377
+#: doc/classes/ProjectSettings.xml:380
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:380
+#: doc/classes/ProjectSettings.xml:383
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:383
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:386
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:389
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:392
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:395
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:398
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -44019,91 +44254,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:403
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:406
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:409
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:412
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:415
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:418
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:421
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:424
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:427
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:430
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:433
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:436
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:439
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr ""
-#: doc/classes/ProjectSettings.xml:442
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:445
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:448
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:451
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -44112,13 +44347,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:455
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:458
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -44128,7 +44363,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:463
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -44136,19 +44371,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:468
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:472
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:476
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -44162,45 +44397,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:481
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:484
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:488
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:491
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:494
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:497
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:500
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -44209,7 +44444,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:503
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -44220,7 +44455,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:507
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -44236,14 +44471,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:515
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:518
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -44251,49 +44486,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:521
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:524
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:529
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:532
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:535
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:538
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:541
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:544
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:547
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -44302,7 +44537,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:551
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44310,7 +44545,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:555
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44318,7 +44553,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:559
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44328,7 +44563,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:563
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -44337,7 +44572,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:567
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -44346,7 +44581,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:571
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44356,7 +44591,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:575
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44364,7 +44599,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:579
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -44374,7 +44609,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:583
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -44384,7 +44619,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:587
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44392,7 +44627,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:591
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -44401,7 +44636,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:595
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44409,7 +44644,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:599
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -44421,477 +44656,477 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:605
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:608
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:611
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:614
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:617
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:620
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:623
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:626
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:629
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:632
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:635
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:638
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:641
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:644
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:647
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:650
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:653
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:656
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:659
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:662
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:665
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:668
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:671
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:674
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:677
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:680
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:683
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:686
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:689
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:692
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:695
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:698
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:701
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:704
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:707
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:710
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:713
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:716
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:719
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:722
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:725
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:728
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:731
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:734
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:737
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:740
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:743
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:746
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:749
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:752
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:755
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:758
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:761
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:764
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:767
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:770
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:773
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:776
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:779
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:782
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:785
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:788
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:791
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:794
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:797
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:800
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:803
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:806
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:809
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:812
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:815
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:818
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:821
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:824
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:827
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:830
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:833
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:836
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:839
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:842
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:845
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:848
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:851
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:854
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:857
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:860
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:863
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:866
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:869
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:872
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:875
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:878
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:881
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr ""
-#: doc/classes/ProjectSettings.xml:884
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:887
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:890
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:893
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:896
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:899
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:902
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:905
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:908
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:911
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:914
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:917
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:920
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:923
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:926
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:929
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:932
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:935
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:938
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:941
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:946
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:949
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -44899,92 +45134,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:952
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:955
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:958
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:961
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:964
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:967
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:970
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:973
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:976
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:979
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:982
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:985
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:988
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:991
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:994
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:997
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1000
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1003
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -44994,33 +45229,33 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1007
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1010
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1013
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1017
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1021
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45033,7 +45268,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1025
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45045,7 +45280,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1033
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45057,7 +45292,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1041
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45070,7 +45305,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1045
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -45078,28 +45313,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1049
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1053
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1056
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1059
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -45109,25 +45344,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1063
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1066
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1069
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1072
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45140,7 +45375,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1076
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45152,7 +45387,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1084
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45164,7 +45399,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1092
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45177,13 +45412,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1096
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1099
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -45191,11 +45426,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1103
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1106
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -45209,7 +45444,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1112
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -45218,7 +45453,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1116
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -45234,7 +45469,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1121
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -45244,7 +45479,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1125
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45254,7 +45489,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1129
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -45265,7 +45500,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1133
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45275,7 +45510,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1137
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -45283,7 +45518,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1141
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -45294,7 +45529,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1145
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -45309,7 +45544,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1151
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -45318,13 +45553,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1156
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1159
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -45333,7 +45568,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1162
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -45343,7 +45578,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1165
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -45355,7 +45590,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1168
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -45365,24 +45600,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1171
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1174
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1177
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1180
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -45391,7 +45626,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1183
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -45399,7 +45634,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1186
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -45408,7 +45643,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1189
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -45418,7 +45653,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1193
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -45426,31 +45661,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1197
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1200
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1203
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1206
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1209
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -45458,7 +45693,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1212
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -45468,46 +45703,53 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1215
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1218
+#: doc/classes/ProjectSettings.xml:1221
+msgid ""
+"iOS specific override for [member rendering/gles2/compatibility/"
+"disable_half_float], due to poor support for half-float vertex compression "
+"on many devices."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1224
msgid ""
-"If [code]true[/code] and available on the target device, enables high "
-"floating point precision for all shader computations in GLES2.\n"
+"If [code]true[/code] and available on the target Android device, enables "
+"high floating point precision for all shader computations in GLES2.\n"
"[b]Warning:[/b] High floating point precision can be extremely slow on older "
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1225
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1228
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1231
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1234
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -45515,7 +45757,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1237
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -45525,7 +45767,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1240
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -45534,7 +45776,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1243
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -45543,20 +45785,20 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1246
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1249
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1252
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -45565,7 +45807,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1255
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -45573,7 +45815,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1258
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -45582,7 +45824,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -45592,20 +45834,20 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1267
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1274
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -45614,13 +45856,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -45630,46 +45872,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1293
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1296
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1299
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1302
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1305
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -45679,7 +45921,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -45691,7 +45933,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -45699,7 +45941,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1316
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -45707,7 +45949,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -45716,7 +45958,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1323
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -45730,7 +45972,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1328
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -45740,7 +45982,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1331
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -45749,7 +45991,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1334
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -45759,54 +46001,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1337
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1340
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1343
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1346
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1349
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1352
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1355
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1358
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -45817,61 +46059,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1365
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1368
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1371
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1374
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1377
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1380
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1383
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1386
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -45882,7 +46124,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -45891,26 +46133,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1393 doc/classes/ProjectSettings.xml:1396
#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1405
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1408
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1411
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -45921,20 +46163,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1418
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -45946,52 +46188,52 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1428
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1435
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1438
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1441
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1444
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1447
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1450
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1453
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -45999,7 +46241,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -46009,10 +46251,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -46021,10 +46263,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -46033,10 +46275,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -46045,10 +46287,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -46057,10 +46299,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -46724,40 +46966,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr ""
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -46765,14 +47021,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -49108,6 +49364,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -49125,7 +49397,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -49133,11 +49405,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -49147,19 +49419,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -54574,20 +54846,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -54598,28 +54875,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -54631,19 +54908,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
@@ -57429,26 +57706,33 @@ msgid "Text [Color] used when the [ToolButton] is disabled."
msgstr ""
#: doc/classes/ToolButton.xml:39
-msgid "Text [Color] used when the [ToolButton] is being hovered."
+msgid ""
+"Text [Color] used when the [ToolButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/ToolButton.xml:42
-msgid "Text [Color] used when the [ToolButton] is being pressed."
+msgid "Text [Color] used when the [ToolButton] is being hovered."
msgstr ""
#: doc/classes/ToolButton.xml:45
-msgid "[StyleBox] used when the [ToolButton] is being hovered."
+msgid "Text [Color] used when the [ToolButton] is being pressed."
msgstr ""
#: doc/classes/ToolButton.xml:48
-msgid "The horizontal space between [ToolButton]'s icon and text."
+msgid "[StyleBox] used when the [ToolButton] is being hovered."
msgstr ""
#: doc/classes/ToolButton.xml:51
-msgid "Default [StyleBox] for the [ToolButton]."
+msgid "The horizontal space between [ToolButton]'s icon and text."
msgstr ""
#: doc/classes/ToolButton.xml:54
+msgid "Default [StyleBox] for the [ToolButton]."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:57
msgid "[StyleBox] used when the [ToolButton] is being pressed."
msgstr ""
diff --git a/doc/translations/pl.po b/doc/translations/pl.po
index 441c08c926..e7c2358cea 100644
--- a/doc/translations/pl.po
+++ b/doc/translations/pl.po
@@ -15,12 +15,13 @@
# Seppo Day <piszczatowskis@gmail.com>, 2021.
# cerkiewny <mstarzycki@gmail.com>, 2021.
# Dominik Mielcarek <fogbpl@gmail.com>, 2021.
+# CXVMNER <cxvmner@gmail.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2021-07-05 14:35+0000\n"
-"Last-Translator: Dominik Mielcarek <fogbpl@gmail.com>\n"
+"PO-Revision-Date: 2021-11-06 19:35+0000\n"
+"Last-Translator: CXVMNER <cxvmner@gmail.com>\n"
"Language-Team: Polish <https://hosted.weblate.org/projects/godot-engine/"
"godot-class-reference/pl/>\n"
"Language: pl\n"
@@ -29,45 +30,45 @@ msgstr ""
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
"|| n%100>=20) ? 1 : 2;\n"
-"X-Generator: Weblate 4.8-dev\n"
+"X-Generator: Weblate 4.9-dev\n"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Description"
msgstr "Opis"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Tutorials"
msgstr "Samouczki"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Properties"
msgstr "Właściwości"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Methods"
msgstr "Metody"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Theme Properties"
msgstr "Właściwości motywu"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Signals"
msgstr "Sygnały"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Enumerations"
msgstr "Wyliczenia"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Constants"
msgstr "Stałe"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Property Descriptions"
msgstr "Opisy właściwości"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Method Descriptions"
msgstr "Opisy metod"
@@ -126,7 +127,6 @@ msgstr ""
"Wspierane nazwy są takie same jak stałe zdefiniowane w [Color]."
#: modules/gdscript/doc_classes/@GDScript.xml:45
-#, fuzzy
msgid ""
"Returns the absolute value of parameter [code]s[/code] (i.e. positive "
"value).\n"
@@ -137,12 +137,10 @@ msgstr ""
"Zwraca wartość bezwzględną parametru [code]s[/code] (tzn. wartość "
"dodatnia).\n"
"[codeblock]\n"
-"# a jest równe 1\n"
-"a = abs(-1)\n"
+"a = abs(-1) # a jest równe 1\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:55
-#, fuzzy
msgid ""
"Returns the arc cosine of [code]s[/code] in radians. Use to get the angle of "
"cosine [code]s[/code]. [code]s[/code] must be between [code]-1.0[/code] and "
@@ -154,14 +152,15 @@ msgid ""
"[/codeblock]"
msgstr ""
"Zwraca arcus cosinus z [code]s[/code] w radianach. Użyj aby otrzymać wartość "
-"kÄ…ta o cosinus'ie [code]s[/code].\n"
+"kąta o cosinus'ie [code]s[/code]. Wartość [code]s[/code] musi być w "
+"przedziale od [code]-1.0[/code] do [code]1.0[/code] (włącznie), w przeciwnym "
+"wypadku [method acos] zwróci [constant NAN].\n"
"[codeblock]\n"
"# c to 0.523599 albo 30 stopni jeżeli przekonwertowane z użyciem rad2deg(s)\n"
"c = acos(0.866025)\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:66
-#, fuzzy
msgid ""
"Returns the arc sine of [code]s[/code] in radians. Use to get the angle of "
"sine [code]s[/code]. [code]s[/code] must be between [code]-1.0[/code] and "
@@ -173,7 +172,9 @@ msgid ""
"[/codeblock]"
msgstr ""
"Zwraca arcus sinus z [code]s[/code] w radianach. Użyj aby otrzymać wartość "
-"kÄ…ta o sinus'ie [code]s[/code].\n"
+"kąta o sinus'ie [code]s[/code]. Wartość [code]s[/code] musi być w przedziale "
+"od [code]-1.0[/code] do [code]1.0[/code] (włącznie), w przeciwnym wypadku "
+"[method asin] zwróci [constant NAN].\n"
"[codeblock]\n"
"# s to 0.523599 albo 30 stopni jesli przekonwertowane z użyciem rad2deg(s)\n"
"s = asin(0.5)\n"
@@ -237,12 +238,12 @@ msgid ""
"a = atan(0.5) # a is 0.463648\n"
"[/codeblock]"
msgstr ""
-"Zwraca tangens łuku [code]s[/code] w radianach. Użyj go by uzyskać kąt z "
-"kÄ…ta tangensa w trygonometrii: [code]atan(tan(angle)) == angle[/code].\n"
+"Zwraca arcus tangens kąta [code]s[/code] w radianach. Użyj go by uzyskać kąt "
+"z kÄ…ta tangensa w trygonometrii: [code]atan(tan(angle)) == angle[/code].\n"
"Metoda nie wie w którym kwadrancie wypada kąt . Sprawdź [method atan2] jeśli "
"posiadasz oba [code]y[/code] oraz [code]x[/code].\n"
"[codeblock]\n"
-"a = atan(0.5) # a is 0.463648\n"
+"a = atan(0.5) # a ma wartość 0.463648\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:107
@@ -289,7 +290,6 @@ msgstr ""
"współrzędne biegunowe (odległość od początku układu i kąt)."
#: modules/gdscript/doc_classes/@GDScript.xml:135
-#, fuzzy
msgid ""
"Rounds [code]s[/code] upward (towards positive infinity), returning the "
"smallest whole number that is not less than [code]s[/code].\n"
@@ -300,11 +300,12 @@ msgid ""
"See also [method floor], [method round], [method stepify], and [int]."
msgstr ""
"Zaokrągla [code]s[/code] w górę (w kierunku dodatnim), zwracając najmniejszą "
-"liczbę całkowitą, która jest nie mniejsza niż [code]s[/code] (tj. sufit).\n"
+"liczbę całkowitą, która jest nie mniejsza niż [code]s[/code].\n"
"[codeblock]\n"
-"i = ceil(1.45) # i is 2\n"
-"i = ceil(1.001) # i is 2\n"
-"[/codeblock]"
+"a = ceil(1.45) # a jest równe 2\n"
+"a = ceil(1.001) # a jest równe 2\n"
+"[/codeblock]\n"
+"Zobacz też [method floor], [method round], [method stepify] oraz [int]."
#: modules/gdscript/doc_classes/@GDScript.xml:147
msgid ""
@@ -327,7 +328,6 @@ msgstr ""
"Jest to odwrotność [method ord]."
#: modules/gdscript/doc_classes/@GDScript.xml:162
-#, fuzzy
msgid ""
"Clamps [code]value[/code] and returns a value not less than [code]min[/code] "
"and not more than [code]max[/code].\n"
@@ -340,13 +340,9 @@ msgstr ""
"Ogranicza [code]value[/code] i zwraca wartość nie mniejszą od [code]min[/"
"code] i nie większą od [code]max[/code].\n"
"[codeblock]\n"
-"speed = 1000\n"
-"# a is 20\n"
-"a = clamp(speed, 1, 20)\n"
-"\n"
-"speed = -10\n"
-"# a is 1\n"
-"a = clamp(speed, 1, 20)\n"
+"a = clamp(1000, 1, 20) # a jest równe 20\n"
+"a = clamp(-10, 1, 20) # a jest równe 1\n"
+"a = clamp(15, 1, 20) # a jest równe 15\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:175
@@ -374,7 +370,6 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:190
-#, fuzzy
msgid ""
"Returns the cosine of angle [code]s[/code] in radians.\n"
"[codeblock]\n"
@@ -384,13 +379,11 @@ msgid ""
msgstr ""
"Zwraca kosinus kÄ…ta [code]s[/code] w radianach.\n"
"[codeblock]\n"
-"# Wypisze 1 następnie -1\n"
-"print(cos(PI * 2))\n"
-"print(cos(PI))\n"
+"a = cos(TAU) # a równe 1.0\n"
+"a = cos(PI) # a równe -1.0\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:201
-#, fuzzy
msgid ""
"Returns the hyperbolic cosine of [code]s[/code] in radians.\n"
"[codeblock]\n"
@@ -399,8 +392,7 @@ msgid ""
msgstr ""
"Zwraca hiperboliczny cosinus [code]s[/code] w radianach.\n"
"[codeblock]\n"
-"# Wypisze 1.543081\n"
-"print(cosh(1))\n"
+"print(cosh(1)) # Wypisze 1.543081\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:211
@@ -409,10 +401,9 @@ msgstr "Konwertuje decybele na liniowy przekaz energii (dźwięk)."
#: modules/gdscript/doc_classes/@GDScript.xml:218
msgid "Deprecated alias for [method step_decimals]."
-msgstr ""
+msgstr "Przestarzały odpowiednik metody [method step_decimals]."
#: modules/gdscript/doc_classes/@GDScript.xml:227
-#, fuzzy
msgid ""
"[b]Note:[/b] [code]dectime[/code] has been deprecated and will be removed in "
"Godot 4.0, please use [method move_toward] instead.\n"
@@ -422,37 +413,36 @@ msgid ""
"a = dectime(60, 10, 0.1)) # a is 59.0\n"
"[/codeblock]"
msgstr ""
-"Zwraca wynik zmniejszania wartości [code]value[/code] o [code]step[/code] * "
+"[b]Notka:[/b] [code]dectime[/code] jest przestarzała i zostanie usunięta w "
+"Godot 4.0. Zamiast tego, użyj [method move_toward].\n"
+"Zwraca wartość [code]value[/code] zmniejszoną o [code]step[/code] * "
"[code]amount[/code].\n"
"[codeblock]\n"
-"# a = 59\n"
-"a = dectime(60, 10, 0.1))\n"
+"a = dectime(60, 10, 0.1)) # a równe 59.0\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:238
-#, fuzzy
msgid ""
"Converts an angle expressed in degrees to radians.\n"
"[codeblock]\n"
"r = deg2rad(180) # r is 3.141593\n"
"[/codeblock]"
msgstr ""
-"Zwraca kąt wyrażony w stopniach do radianów.\n"
+"Przelicza kąt wyrażony w stopniach na kąt w radianach.\n"
"[codeblock]\n"
-"# r is 3.141593\n"
-"r = deg2rad(180)\n"
+"r = deg2rad(180) # r równe 3.141593\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:248
-#, fuzzy
msgid ""
"Converts a dictionary (previously created with [method inst2dict]) back to "
"an instance. Useful for deserializing."
msgstr ""
-"Konwertuje poprzednio konwertowaną instancję do słownika, z powrotem na "
+"Konwertuje słownik (stworzony przy pomocy [method inst2dict]) z powrotem na "
"instancjÄ™. Przydatne podczas deserializacji."
#: modules/gdscript/doc_classes/@GDScript.xml:256
+#, fuzzy
msgid ""
"Returns an \"eased\" value of [code]x[/code] based on an easing function "
"defined with [code]curve[/code]. This easing function is based on an "
@@ -472,6 +462,24 @@ msgid ""
"See also [method smoothstep]. If you need to perform more advanced "
"transitions, use [Tween] or [AnimationPlayer]."
msgstr ""
+"Zwraca \"wygładzoną\" wartość [code]x[/code] w oparciu o funkcję przejścia "
+"zdefiniowaną przez [code]curve[/code]. Funkcja przejścia jest funkcją "
+"potęgową. [code]curve[/code] może być dowolną liczbą zmiennoprzecinkową, dla "
+"której określonych wartości zachodzą następujące zależności:\n"
+"[codeblock]\n"
+"- Mniej niż -1.0 (przedział otwarty): Ease in-out\n"
+"- 1.0: przejście liniowe\n"
+"- Od -1.0 do 0.0 (przedział otwarty): Ease out-in\n"
+"- 0.0: stała wartość\n"
+"- Od 0.0 to 1.0 (przedział otwarty): Ease in\n"
+"- 1.0: przejście liniowe\n"
+"- Więcej niż 1.0 (przedział otwarty): Ease out\n"
+"[/codeblock]\n"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/"
+"ease_cheatsheet.png]przykładowe krzywe ease() dla różnych wartości curve[/"
+"url]\n"
+"Zobacz też [method smoothstep]. Jeśli potrzebujesz bardziej zaawansowanych "
+"metod przejścia użyj [Tween] lub [AnimationPlayer]."
#: modules/gdscript/doc_classes/@GDScript.xml:274
msgid ""
@@ -520,7 +528,6 @@ msgstr ""
"liczby całkowitej użyj bezpośrednio metody [code]int(s)[/code]."
#: modules/gdscript/doc_classes/@GDScript.xml:301
-#, fuzzy
msgid ""
"Returns the floating-point remainder of [code]a/b[/code], keeping the sign "
"of [code]a[/code].\n"
@@ -529,16 +536,14 @@ msgid ""
"[/codeblock]\n"
"For the integer remainder operation, use the % operator."
msgstr ""
-"Zwraca zmiennoprzecinkowÄ… resztÄ™ [code]a/b[/code], zachowujÄ…c znak [code]a[/"
-"code].\n"
+"Zwraca zmiennoprzecinkowÄ… resztÄ™ z [code]a/b[/code], zachowujÄ…c znak "
+"[code]a[/code].\n"
"[codeblock]\n"
-"# Reszta wynosi 1.5\n"
-"var reszta = fmod(7, 5.5)\n"
+"r = fmod(7, 5.5) # r równe 1.5\n"
"[/codeblock]\n"
"Dla operacji z całkowitą resztą, użyj operatora %."
#: modules/gdscript/doc_classes/@GDScript.xml:313
-#, fuzzy
msgid ""
"Returns the floating-point modulus of [code]a/b[/code] that wraps equally in "
"positive and negative.\n"
@@ -558,27 +563,22 @@ msgid ""
" 1.5 0.0 0.0\n"
"[/codeblock]"
msgstr ""
-"Zwraca zmiennoprzecinkowy moduł [code]a /b[/code], który zawiera równo "
+"Zwraca zmiennoprzecinkowy moduł z [code]a /b[/code], który zawiera równo "
"wartość dodatnią jak i ujemną.\n"
"[codeblock]\n"
-"var i = -6\n"
-"while i < 5:\n"
-" prints(i, fposmod(i, 3))\n"
-" i += 1\n"
+"for i in 7:\n"
+" var x = 0.5 * i - 1.5\n"
+" print(\"%4.1f %4.1f %4.1f\" % [x, fmod(x, 1.5), fposmod(x, 1.5)])\n"
"[/codeblock]\n"
-"Daje nam te wartości:\n"
+"Daje nam wartości:\n"
"[codeblock]\n"
-"-6 0\n"
-"-5 1\n"
-"-4 2\n"
-"-3 0\n"
-"-2 1\n"
-"-1 2\n"
-"0 0\n"
-"1 1\n"
-"2 2\n"
-"3 0\n"
-"4 1\n"
+"-1.5 -0.0 0.0\n"
+"-1.0 -1.0 0.5\n"
+"-0.5 -0.5 1.0\n"
+" 0.0 0.0 0.0\n"
+" 0.5 0.5 0.5\n"
+" 1.0 1.0 1.0\n"
+" 1.5 0.0 0.0\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:336
@@ -4034,112 +4034,121 @@ msgid ""
msgstr ""
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr ""
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
msgstr ""
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
msgstr ""
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
msgstr ""
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr ""
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr ""
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr ""
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
msgstr ""
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr ""
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
msgstr ""
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
msgstr ""
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr ""
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
"positive.\n"
@@ -5218,7 +5227,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -6661,21 +6670,25 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
#: doc/classes/Area.xml:17
msgid ""
-"Returns a list of intersecting [Area]s. For performance reasons (collisions "
-"are all processed at the same time) this list is modified once during the "
-"physics step, not immediately after objects are moved. Consider using "
-"signals instead."
+"Returns a list of intersecting [Area]s. The overlapping area's [member "
+"CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:23
+#: doc/classes/Area.xml:24
msgid ""
-"Returns a list of intersecting [PhysicsBody]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody]s. The overlapping body's "
+"[member CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:30
+#: doc/classes/Area.xml:32
msgid ""
"If [code]true[/code], the given area overlaps the Area.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6683,7 +6696,7 @@ msgid ""
"physics step. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:38
+#: doc/classes/Area.xml:40
msgid ""
"If [code]true[/code], the given physics body overlaps the Area.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6694,7 +6707,7 @@ msgid ""
"their tiles with collision shapes as a virtual physics body)."
msgstr ""
-#: doc/classes/Area.xml:46
+#: doc/classes/Area.xml:48
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
"velocity lost per second.\n"
@@ -6702,41 +6715,41 @@ msgid ""
"details about damping."
msgstr ""
-#: doc/classes/Area.xml:50 doc/classes/Area2D.xml:52
+#: doc/classes/Area.xml:52 doc/classes/Area2D.xml:54
msgid "The name of the area's audio bus."
msgstr ""
-#: doc/classes/Area.xml:53 doc/classes/Area2D.xml:55
+#: doc/classes/Area.xml:55 doc/classes/Area2D.xml:57
msgid ""
"If [code]true[/code], the area's audio bus overrides the default audio bus."
msgstr ""
-#: doc/classes/Area.xml:56
+#: doc/classes/Area.xml:58
msgid ""
"The area's gravity intensity (in meters per second squared). This value "
"multiplies the gravity vector. This is useful to alter the force of gravity "
"without altering its direction."
msgstr ""
-#: doc/classes/Area.xml:59 doc/classes/Area2D.xml:61
+#: doc/classes/Area.xml:61 doc/classes/Area2D.xml:63
msgid ""
"The falloff factor for point gravity. The greater the value, the faster "
"gravity decreases with distance."
msgstr ""
-#: doc/classes/Area.xml:62 doc/classes/Area2D.xml:64
+#: doc/classes/Area.xml:64 doc/classes/Area2D.xml:66
msgid ""
"If [code]true[/code], gravity is calculated from a point (set via [member "
"gravity_vec]). See also [member space_override]."
msgstr ""
-#: doc/classes/Area.xml:65 doc/classes/Area2D.xml:67
+#: doc/classes/Area.xml:67 doc/classes/Area2D.xml:69
msgid ""
"The area's gravity vector (not normalized). If gravity is a point (see "
"[member gravity_point]), this will be the point of attraction."
msgstr ""
-#: doc/classes/Area.xml:68
+#: doc/classes/Area.xml:70
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
"velocity lost per second.\n"
@@ -6744,61 +6757,61 @@ msgid ""
"about damping."
msgstr ""
-#: doc/classes/Area.xml:72 doc/classes/Area2D.xml:74
+#: doc/classes/Area.xml:74 doc/classes/Area2D.xml:76
msgid "If [code]true[/code], other monitoring areas can detect this area."
msgstr ""
-#: doc/classes/Area.xml:75 doc/classes/Area2D.xml:77
+#: doc/classes/Area.xml:77 doc/classes/Area2D.xml:79
msgid ""
"If [code]true[/code], the area detects bodies or areas entering and exiting "
"it."
msgstr ""
-#: doc/classes/Area.xml:78 doc/classes/Area2D.xml:80
+#: doc/classes/Area.xml:80 doc/classes/Area2D.xml:82
msgid "The area's priority. Higher priority areas are processed first."
msgstr ""
-#: doc/classes/Area.xml:81
+#: doc/classes/Area.xml:83
msgid ""
"The degree to which this area applies reverb to its associated audio. Ranges "
"from [code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
msgstr ""
-#: doc/classes/Area.xml:84
+#: doc/classes/Area.xml:86
msgid "If [code]true[/code], the area applies reverb to its associated audio."
msgstr ""
-#: doc/classes/Area.xml:87
+#: doc/classes/Area.xml:89
msgid "The reverb bus name to use for this area's associated audio."
msgstr ""
-#: doc/classes/Area.xml:90
+#: doc/classes/Area.xml:92
msgid ""
"The degree to which this area's reverb is a uniform effect. Ranges from "
"[code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
msgstr ""
-#: doc/classes/Area.xml:93 doc/classes/Area2D.xml:83
+#: doc/classes/Area.xml:95 doc/classes/Area2D.xml:85
msgid ""
"Override mode for gravity and damping calculations within this area. See "
"[enum SpaceOverride] for possible values."
msgstr ""
-#: doc/classes/Area.xml:100
+#: doc/classes/Area.xml:102
msgid ""
"Emitted when another Area enters this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
-#: doc/classes/Area.xml:107
+#: doc/classes/Area.xml:109
msgid ""
"Emitted when another Area exits this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
-#: doc/classes/Area.xml:117 doc/classes/Area.xml:130
+#: doc/classes/Area.xml:119 doc/classes/Area.xml:132
msgid ""
"Emitted when one of another Area's [Shape]s enters one of this Area's "
"[Shape]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6813,7 +6826,7 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:140
+#: doc/classes/Area.xml:142
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] enters this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -6822,7 +6835,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:147
+#: doc/classes/Area.xml:149
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] exits this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -6831,7 +6844,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:157 doc/classes/Area.xml:170
+#: doc/classes/Area.xml:159 doc/classes/Area.xml:172
msgid ""
"Emitted when one of a [PhysicsBody] or [GridMap]'s [Shape]s enters one of "
"this Area's [Shape]s. Requires [member monitoring] to be set to [code]true[/"
@@ -6848,29 +6861,29 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:180 doc/classes/Area2D.xml:170
+#: doc/classes/Area.xml:182 doc/classes/Area2D.xml:172
msgid "This area does not affect gravity/damping."
msgstr ""
-#: doc/classes/Area.xml:183 doc/classes/Area2D.xml:173
+#: doc/classes/Area.xml:185 doc/classes/Area2D.xml:175
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order)."
msgstr ""
-#: doc/classes/Area.xml:186 doc/classes/Area2D.xml:176
+#: doc/classes/Area.xml:188 doc/classes/Area2D.xml:178
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order), ignoring any lower priority areas."
msgstr ""
-#: doc/classes/Area.xml:189 doc/classes/Area2D.xml:179
+#: doc/classes/Area.xml:191 doc/classes/Area2D.xml:181
msgid ""
"This area replaces any gravity/damping, even the defaults, ignoring any "
"lower priority areas."
msgstr ""
-#: doc/classes/Area.xml:192 doc/classes/Area2D.xml:182
+#: doc/classes/Area.xml:194 doc/classes/Area2D.xml:184
msgid ""
"This area replaces any gravity/damping calculated so far (in [member "
"priority] order), but keeps calculating the rest of the areas."
@@ -6909,21 +6922,25 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
#: doc/classes/Area2D.xml:19
msgid ""
-"Returns a list of intersecting [Area2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [Area2D]s. The overlapping area's [member "
+"CollisionObject2D.collision_layer] must be part of this area's [member "
+"CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:25
+#: doc/classes/Area2D.xml:26
msgid ""
-"Returns a list of intersecting [PhysicsBody2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody2D]s. The overlapping body's "
+"[member CollisionObject2D.collision_layer] must be part of this area's "
+"[member CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:32
+#: doc/classes/Area2D.xml:34
msgid ""
"If [code]true[/code], the given area overlaps the Area2D.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6931,7 +6948,7 @@ msgid ""
"the physics step. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:40
+#: doc/classes/Area2D.xml:42
msgid ""
"If [code]true[/code], the given physics body overlaps the Area2D.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6942,7 +6959,7 @@ msgid ""
"register their tiles with collision shapes as a virtual physics body)."
msgstr ""
-#: doc/classes/Area2D.xml:48
+#: doc/classes/Area2D.xml:50
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
"velocity lost per second.\n"
@@ -6950,14 +6967,14 @@ msgid ""
"details about damping."
msgstr ""
-#: doc/classes/Area2D.xml:58
+#: doc/classes/Area2D.xml:60
msgid ""
"The area's gravity intensity (in pixels per second squared). This value "
"multiplies the gravity vector. This is useful to alter the force of gravity "
"without altering its direction."
msgstr ""
-#: doc/classes/Area2D.xml:70
+#: doc/classes/Area2D.xml:72
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
"velocity lost per second.\n"
@@ -6965,21 +6982,21 @@ msgid ""
"about damping."
msgstr ""
-#: doc/classes/Area2D.xml:90
+#: doc/classes/Area2D.xml:92
msgid ""
"Emitted when another Area2D enters this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-#: doc/classes/Area2D.xml:97
+#: doc/classes/Area2D.xml:99
msgid ""
"Emitted when another Area2D exits this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-#: doc/classes/Area2D.xml:107
+#: doc/classes/Area2D.xml:109
msgid ""
"Emitted when one of another Area2D's [Shape2D]s enters one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6994,7 +7011,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:120
+#: doc/classes/Area2D.xml:122
msgid ""
"Emitted when one of another Area2D's [Shape2D]s exits one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -7009,7 +7026,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:130
+#: doc/classes/Area2D.xml:132
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] enters this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -7018,7 +7035,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:137
+#: doc/classes/Area2D.xml:139
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] exits this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -7027,7 +7044,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:147
+#: doc/classes/Area2D.xml:149
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s enters one "
"of this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -7046,7 +7063,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:160
+#: doc/classes/Area2D.xml:162
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s exits one of "
"this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -10617,42 +10634,47 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
-"no save path is provided it will try to match the path from the current "
+"no root node is provided, parent of this node will be used as root instead. "
+"If no save path is provided it will try to match the path from the current "
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -10666,62 +10688,62 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
msgid "The rotation of the baked custom sky."
msgstr ""
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -10729,35 +10751,35 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -10765,13 +10787,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -10783,66 +10805,78 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr ""
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
msgid "Baking was successful."
msgstr ""
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr ""
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
#, fuzzy
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr "Zwraca arcus tangens parametrów."
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr ""
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:133
+#: doc/classes/BakedLightmap.xml:132
+msgid ""
+"Returns if lightmapper can't be created. Unless you are using a custom "
+"lightmapper, please report this as bug."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:135
+msgid ""
+"There is no root node to start baking from. Either provide [code]from_node[/"
+"code] argument or attach this node to a parent that should be used as root."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:136
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:139
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:142
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -11298,8 +11332,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -11687,26 +11724,33 @@ msgid "Text [Color] used when the [Button] is disabled."
msgstr ""
#: doc/classes/Button.xml:77
-msgid "Text [Color] used when the [Button] is being hovered."
+msgid ""
+"Text [Color] used when the [Button] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/Button.xml:80
-msgid "Text [Color] used when the [Button] is being pressed."
+msgid "Text [Color] used when the [Button] is being hovered."
msgstr ""
#: doc/classes/Button.xml:83
-msgid "[StyleBox] used when the [Button] is being hovered."
+msgid "Text [Color] used when the [Button] is being pressed."
msgstr ""
#: doc/classes/Button.xml:86
-msgid "The horizontal space between [Button]'s icon and text."
+msgid "[StyleBox] used when the [Button] is being hovered."
msgstr ""
#: doc/classes/Button.xml:89
-msgid "Default [StyleBox] for the [Button]."
+msgid "The horizontal space between [Button]'s icon and text."
msgstr ""
#: doc/classes/Button.xml:92
+msgid "Default [StyleBox] for the [Button]."
+msgstr ""
+
+#: doc/classes/Button.xml:95
msgid "[StyleBox] used when the [Button] is being pressed."
msgstr ""
@@ -13182,80 +13226,96 @@ msgstr ""
msgid "The check icon to display when the [CheckBox] is checked."
msgstr ""
-#: doc/classes/CheckBox.xml:30
+#: doc/classes/CheckBox.xml:28
+msgid "The check icon to display when the [CheckBox] is checked and disabled."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:31
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is disabled."
msgstr ""
-#: doc/classes/CheckBox.xml:33
+#: doc/classes/CheckBox.xml:34
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is focused."
msgstr ""
-#: doc/classes/CheckBox.xml:36
+#: doc/classes/CheckBox.xml:37
msgid "The [Font] to use for the [CheckBox] text."
msgstr ""
-#: doc/classes/CheckBox.xml:39
+#: doc/classes/CheckBox.xml:40
msgid "The [CheckBox] text's font color."
msgstr ""
-#: doc/classes/CheckBox.xml:42
+#: doc/classes/CheckBox.xml:43
msgid "The [CheckBox] text's font color when it's disabled."
msgstr ""
-#: doc/classes/CheckBox.xml:45
+#: doc/classes/CheckBox.xml:46
+msgid ""
+"The [CheckBox] text's font color when it's focused. Only replaces the normal "
+"text color of the checkbox. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:49
msgid "The [CheckBox] text's font color when it's hovered."
msgstr ""
-#: doc/classes/CheckBox.xml:48
+#: doc/classes/CheckBox.xml:52
msgid "The [CheckBox] text's font color when it's hovered and pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:51
+#: doc/classes/CheckBox.xml:55
msgid "The [CheckBox] text's font color when it's pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:54
+#: doc/classes/CheckBox.xml:58
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered."
msgstr ""
-#: doc/classes/CheckBox.xml:57
+#: doc/classes/CheckBox.xml:61
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered and "
"pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:60
+#: doc/classes/CheckBox.xml:64
msgid "The separation between the check icon and the text (in pixels)."
msgstr ""
-#: doc/classes/CheckBox.xml:63 doc/classes/CheckButton.xml:58
+#: doc/classes/CheckBox.xml:67 doc/classes/CheckButton.xml:61
msgid "The [StyleBox] to display as a background."
msgstr ""
-#: doc/classes/CheckBox.xml:66
+#: doc/classes/CheckBox.xml:70
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:69
+#: doc/classes/CheckBox.xml:73
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is checked."
msgstr ""
-#: doc/classes/CheckBox.xml:74
+#: doc/classes/CheckBox.xml:78
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is unchecked."
msgstr ""
-#: doc/classes/CheckBox.xml:79
+#: doc/classes/CheckBox.xml:83
msgid "The check icon to display when the [CheckBox] is unchecked."
msgstr ""
+#: doc/classes/CheckBox.xml:86
+msgid ""
+"The check icon to display when the [CheckBox] is unchecked and disabled."
+msgstr ""
+
#: doc/classes/CheckButton.xml:4
msgid "Checkable button. See also [CheckBox]."
msgstr ""
@@ -13299,49 +13359,56 @@ msgid "The [CheckButton] text's font color when it's disabled."
msgstr ""
#: doc/classes/CheckButton.xml:40
-msgid "The [CheckButton] text's font color when it's hovered."
+msgid ""
+"The [CheckButton] text's font color when it's focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/CheckButton.xml:43
-msgid "The [CheckButton] text's font color when it's hovered and pressed."
+msgid "The [CheckButton] text's font color when it's hovered."
msgstr ""
#: doc/classes/CheckButton.xml:46
-msgid "The [CheckButton] text's font color when it's pressed."
+msgid "The [CheckButton] text's font color when it's hovered and pressed."
msgstr ""
#: doc/classes/CheckButton.xml:49
+msgid "The [CheckButton] text's font color when it's pressed."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:52
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered."
msgstr ""
-#: doc/classes/CheckButton.xml:52
+#: doc/classes/CheckButton.xml:55
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered "
"and pressed."
msgstr ""
-#: doc/classes/CheckButton.xml:55
+#: doc/classes/CheckButton.xml:58
msgid "The separation between the toggle icon and the text (in pixels)."
msgstr ""
-#: doc/classes/CheckButton.xml:61
+#: doc/classes/CheckButton.xml:64
msgid "The icon to display when the [CheckButton] is unchecked."
msgstr ""
-#: doc/classes/CheckButton.xml:64
+#: doc/classes/CheckButton.xml:67
msgid "The icon to display when the [CheckButton] is unchecked and disabled."
msgstr ""
-#: doc/classes/CheckButton.xml:67
+#: doc/classes/CheckButton.xml:70
msgid "The icon to display when the [CheckButton] is checked."
msgstr ""
-#: doc/classes/CheckButton.xml:70
+#: doc/classes/CheckButton.xml:73
msgid "The icon to display when the [CheckButton] is checked and disabled."
msgstr ""
-#: doc/classes/CheckButton.xml:73
+#: doc/classes/CheckButton.xml:76
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is pressed."
msgstr ""
@@ -15117,26 +15184,33 @@ msgid "Text [Color] used when the [ColorPickerButton] is disabled."
msgstr ""
#: doc/classes/ColorPickerButton.xml:80
-msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
+msgid ""
+"Text [Color] used when the [ColorPickerButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/ColorPickerButton.xml:83
-msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
+msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
msgstr ""
#: doc/classes/ColorPickerButton.xml:86
-msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
+msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
msgstr ""
#: doc/classes/ColorPickerButton.xml:89
-msgid "The horizontal space between [ColorPickerButton]'s icon and text."
+msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
msgstr ""
#: doc/classes/ColorPickerButton.xml:92
-msgid "Default [StyleBox] for the [ColorPickerButton]."
+msgid "The horizontal space between [ColorPickerButton]'s icon and text."
msgstr ""
#: doc/classes/ColorPickerButton.xml:95
+msgid "Default [StyleBox] for the [ColorPickerButton]."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:98
msgid "[StyleBox] used when the [ColorPickerButton] is being pressed."
msgstr ""
@@ -20373,7 +20447,8 @@ msgid ""
"get_resource_type]. They may optionally specify some import presets that "
"affect the import process. EditorImportPlugins are responsible for creating "
"the resources and saving them in the [code].import[/code] directory (see "
-"[member ProjectSettings.application/config/project_data_dir_name]).\n"
+"[member ProjectSettings.application/config/"
+"use_hidden_project_data_directory]).\n"
"Below is an example EditorImportPlugin that imports a [Mesh] from a file "
"with the extension \".special\" or \".spec\":\n"
"[codeblock]\n"
@@ -20500,7 +20575,7 @@ msgstr ""
msgid ""
"Gets the extension used to save this resource in the [code].import[/code] "
"directory (see [member ProjectSettings.application/config/"
-"project_data_dir_name])."
+"use_hidden_project_data_directory])."
msgstr ""
#: doc/classes/EditorImportPlugin.xml:130
@@ -21538,8 +21613,11 @@ msgstr ""
msgid "Emitted when the value of the edited resource was changed."
msgstr ""
-#: doc/classes/EditorResourcePicker.xml:89
-msgid "Emitted when the resource value was set and user clicked to edit it."
+#: doc/classes/EditorResourcePicker.xml:90
+msgid ""
+"Emitted when the resource value was set and user clicked to edit it. When "
+"[code]edit[/code] is [code]true[/code], the signal was caused by the context "
+"menu \"Edit\" option."
msgstr ""
#: doc/classes/EditorResourcePreview.xml:4
@@ -25289,21 +25367,32 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html"
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -25312,14 +25401,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -25329,36 +25422,36 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
#, fuzzy
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
@@ -25366,46 +25459,46 @@ msgstr ""
"Jeśli [code]true[/code], potomne węzły są sortowane. W innym przypadku jest "
"wyłączone."
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
msgstr ""
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr ""
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -28164,16 +28257,18 @@ msgstr ""
#: doc/classes/Image.xml:436
msgid ""
"OpenGL texture format [code]RED[/code] with a single component and a "
-"bitdepth of 8."
+"bitdepth of 8.\n"
+"[b]Note:[/b] When using the GLES2 backend, this uses the alpha channel "
+"instead of the red channel for storage."
msgstr ""
-#: doc/classes/Image.xml:439
+#: doc/classes/Image.xml:440
msgid ""
"OpenGL texture format [code]RG[/code] with two components and a bitdepth of "
"8 for each."
msgstr ""
-#: doc/classes/Image.xml:442
+#: doc/classes/Image.xml:443
msgid ""
"OpenGL texture format [code]RGB[/code] with three components, each with a "
"bitdepth of 8.\n"
@@ -28181,7 +28276,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:446
+#: doc/classes/Image.xml:447
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 8.\n"
@@ -28189,73 +28284,73 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:450
+#: doc/classes/Image.xml:451
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 4."
msgstr ""
-#: doc/classes/Image.xml:453
+#: doc/classes/Image.xml:454
msgid ""
"OpenGL texture format [code]GL_RGB5_A1[/code] where 5 bits of depth for each "
"component of RGB and one bit for alpha."
msgstr ""
-#: doc/classes/Image.xml:456
+#: doc/classes/Image.xml:457
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 32-"
"bit floating-point value."
msgstr ""
-#: doc/classes/Image.xml:459
+#: doc/classes/Image.xml:460
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:462
+#: doc/classes/Image.xml:463
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:465
+#: doc/classes/Image.xml:466
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:468
+#: doc/classes/Image.xml:469
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 16-"
"bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:471
+#: doc/classes/Image.xml:472
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:474
+#: doc/classes/Image.xml:475
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:477
+#: doc/classes/Image.xml:478
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:480
+#: doc/classes/Image.xml:481
msgid ""
"A special OpenGL texture format where the three color components have 9 bits "
"of precision and all three share a single 5-bit exponent."
msgstr ""
-#: doc/classes/Image.xml:483
+#: doc/classes/Image.xml:484
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 1, and is the smallest variation "
@@ -28265,7 +28360,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:487
+#: doc/classes/Image.xml:488
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 2, and color data is interpreted "
@@ -28275,7 +28370,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:491
+#: doc/classes/Image.xml:492
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format also known as Block Compression 3 or BC3 that contains 64 "
@@ -28286,7 +28381,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:495
+#: doc/classes/Image.xml:496
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -28294,7 +28389,7 @@ msgid ""
"DXT5 uses for the alpha channel."
msgstr ""
-#: doc/classes/Image.xml:498
+#: doc/classes/Image.xml:499
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -28302,7 +28397,7 @@ msgid ""
"algorithm that DXT5 uses for the alpha channel."
msgstr ""
-#: doc/classes/Image.xml:501
+#: doc/classes/Image.xml:502
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned normalized "
@@ -28311,21 +28406,21 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:505
+#: doc/classes/Image.xml:506
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with signed floating-point "
"RGB components."
msgstr ""
-#: doc/classes/Image.xml:508
+#: doc/classes/Image.xml:509
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned floating-point "
"RGB components."
msgstr ""
-#: doc/classes/Image.xml:511
+#: doc/classes/Image.xml:512
msgid ""
"Texture format used on PowerVR-supported mobile platforms, uses 2-bit color "
"depth with no alpha. More information can be found [url=https://en.wikipedia."
@@ -28334,25 +28429,25 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:515
+#: doc/classes/Image.xml:516
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with an "
"alpha component."
msgstr ""
-#: doc/classes/Image.xml:518
+#: doc/classes/Image.xml:519
msgid ""
"Similar to [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with 4-"
"bit color depth and no alpha."
msgstr ""
-#: doc/classes/Image.xml:521
+#: doc/classes/Image.xml:522
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC4[/url], but with an "
"alpha component."
msgstr ""
-#: doc/classes/Image.xml:524
+#: doc/classes/Image.xml:525
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC1]Ericsson Texture Compression format 1[/"
@@ -28360,7 +28455,7 @@ msgid ""
"standard. This format cannot store an alpha channel."
msgstr ""
-#: doc/classes/Image.xml:527
+#: doc/classes/Image.xml:528
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28368,7 +28463,7 @@ msgid ""
"unsigned data."
msgstr ""
-#: doc/classes/Image.xml:530
+#: doc/classes/Image.xml:531
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28376,7 +28471,7 @@ msgid ""
"channel of signed data."
msgstr ""
-#: doc/classes/Image.xml:533
+#: doc/classes/Image.xml:534
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28384,7 +28479,7 @@ msgid ""
"of unsigned data."
msgstr ""
-#: doc/classes/Image.xml:536
+#: doc/classes/Image.xml:537
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28392,7 +28487,7 @@ msgid ""
"channels of signed data."
msgstr ""
-#: doc/classes/Image.xml:539
+#: doc/classes/Image.xml:540
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28402,7 +28497,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:543
+#: doc/classes/Image.xml:544
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28412,7 +28507,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:547
+#: doc/classes/Image.xml:548
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28423,31 +28518,31 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:551
+#: doc/classes/Image.xml:552
msgid "Represents the size of the [enum Format] enum."
msgstr ""
-#: doc/classes/Image.xml:554
+#: doc/classes/Image.xml:555
msgid ""
"Performs nearest-neighbor interpolation. If the image is resized, it will be "
"pixelated."
msgstr ""
-#: doc/classes/Image.xml:557
+#: doc/classes/Image.xml:558
msgid ""
"Performs bilinear interpolation. If the image is resized, it will be blurry. "
"This mode is faster than [constant INTERPOLATE_CUBIC], but it results in "
"lower quality."
msgstr ""
-#: doc/classes/Image.xml:560
+#: doc/classes/Image.xml:561
msgid ""
"Performs cubic interpolation. If the image is resized, it will be blurry. "
"This mode often gives better results compared to [constant "
"INTERPOLATE_BILINEAR], at the cost of being slower."
msgstr ""
-#: doc/classes/Image.xml:563
+#: doc/classes/Image.xml:564
msgid ""
"Performs bilinear separately on the two most-suited mipmap levels, then "
"linearly interpolates between them.\n"
@@ -28462,55 +28557,55 @@ msgid ""
"a new set will be generated for the resulting image."
msgstr ""
-#: doc/classes/Image.xml:570
+#: doc/classes/Image.xml:571
msgid ""
"Performs Lanczos interpolation. This is the slowest image resizing mode, but "
"it typically gives the best results, especially when downscalng images."
msgstr ""
-#: doc/classes/Image.xml:573
+#: doc/classes/Image.xml:574
msgid "Image does not have alpha."
msgstr ""
-#: doc/classes/Image.xml:576
+#: doc/classes/Image.xml:577
msgid "Image stores alpha in a single bit."
msgstr ""
-#: doc/classes/Image.xml:579
+#: doc/classes/Image.xml:580
msgid "Image uses alpha."
msgstr ""
-#: doc/classes/Image.xml:582
+#: doc/classes/Image.xml:583
msgid "Use S3TC compression."
msgstr ""
-#: doc/classes/Image.xml:585
+#: doc/classes/Image.xml:586
msgid "Use PVRTC2 compression."
msgstr ""
-#: doc/classes/Image.xml:588
+#: doc/classes/Image.xml:589
msgid "Use PVRTC4 compression."
msgstr ""
-#: doc/classes/Image.xml:591
+#: doc/classes/Image.xml:592
msgid "Use ETC compression."
msgstr ""
-#: doc/classes/Image.xml:594
+#: doc/classes/Image.xml:595
msgid "Use ETC2 compression."
msgstr ""
-#: doc/classes/Image.xml:597
+#: doc/classes/Image.xml:598
msgid ""
"Source texture (before compression) is a regular texture. Default for all "
"textures."
msgstr ""
-#: doc/classes/Image.xml:600
+#: doc/classes/Image.xml:601
msgid "Source texture (before compression) is in sRGB space."
msgstr ""
-#: doc/classes/Image.xml:603
+#: doc/classes/Image.xml:604
msgid ""
"Source texture (before compression) is a normal texture (e.g. it can be "
"compressed into two channels)."
@@ -28735,6 +28830,17 @@ msgstr ""
#: doc/classes/Input.xml:43
msgid ""
+"Sends all input events which are in the current buffer to the game loop. "
+"These events may have been buffered as a result of accumulated input "
+"([method set_use_accumulated_input]) or agile input flushing ([member "
+"ProjectSettings.input_devices/buffering/agile_event_flushing]).\n"
+"The engine will already do this itself at key execution points (at least "
+"once per frame). However, this can be useful in advanced cases where you "
+"want precise control over the timing of event handling."
+msgstr ""
+
+#: doc/classes/Input.xml:50
+msgid ""
"Returns the acceleration of the device's accelerometer sensor, if the device "
"has one. Otherwise, the method returns [constant Vector3.ZERO].\n"
"Note this method returns an empty [Vector3] when running from the editor "
@@ -28746,7 +28852,7 @@ msgid ""
"the Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:53
+#: doc/classes/Input.xml:60
msgid ""
"Returns a value between 0 and 1 representing the raw intensity of the given "
"action, ignoring the action's deadzone. In most cases, you should use "
@@ -28756,7 +28862,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:62
+#: doc/classes/Input.xml:69
msgid ""
"Returns a value between 0 and 1 representing the intensity of the given "
"action. In a joypad, for example, the further away the axis (analog sticks "
@@ -28768,7 +28874,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:71
+#: doc/classes/Input.xml:78
msgid ""
"Get axis input by specifying two actions, one negative and one positive.\n"
"This is a shorthand for writing [code]Input."
@@ -28776,17 +28882,17 @@ msgid ""
"get_action_strength(\"negative_action\")[/code]."
msgstr ""
-#: doc/classes/Input.xml:78
+#: doc/classes/Input.xml:85
msgid ""
"Returns an [Array] containing the device IDs of all currently connected "
"joypads."
msgstr ""
-#: doc/classes/Input.xml:84
+#: doc/classes/Input.xml:91
msgid "Returns the currently assigned cursor shape (see [enum CursorShape])."
msgstr ""
-#: doc/classes/Input.xml:90
+#: doc/classes/Input.xml:97
msgid ""
"Returns the gravity of the device's accelerometer sensor, if the device has "
"one. Otherwise, the method returns [constant Vector3.ZERO].\n"
@@ -28796,7 +28902,7 @@ msgid ""
"Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:97
+#: doc/classes/Input.xml:104
msgid ""
"Returns the rotation rate in rad/s around a device's X, Y, and Z axes of the "
"gyroscope sensor, if the device has one. Otherwise, the method returns "
@@ -28805,53 +28911,53 @@ msgid ""
"it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:106
+#: doc/classes/Input.xml:113
msgid ""
"Returns the current value of the joypad axis at given index (see [enum "
"JoystickList])."
msgstr ""
-#: doc/classes/Input.xml:113
+#: doc/classes/Input.xml:120
msgid "Returns the index of the provided axis name."
msgstr ""
-#: doc/classes/Input.xml:120
+#: doc/classes/Input.xml:127
msgid ""
"Receives a [enum JoystickList] axis and returns its equivalent name as a "
"string."
msgstr ""
-#: doc/classes/Input.xml:127
+#: doc/classes/Input.xml:134
msgid "Returns the index of the provided button name."
msgstr ""
-#: doc/classes/Input.xml:134
+#: doc/classes/Input.xml:141
msgid ""
"Receives a gamepad button from [enum JoystickList] and returns its "
"equivalent name as a string."
msgstr ""
-#: doc/classes/Input.xml:141
+#: doc/classes/Input.xml:148
msgid ""
"Returns a SDL2-compatible device GUID on platforms that use gamepad "
"remapping. Returns [code]\"Default Gamepad\"[/code] otherwise."
msgstr ""
-#: doc/classes/Input.xml:148
+#: doc/classes/Input.xml:155
msgid "Returns the name of the joypad at the specified device index."
msgstr ""
-#: doc/classes/Input.xml:155
+#: doc/classes/Input.xml:162
msgid "Returns the duration of the current vibration effect in seconds."
msgstr ""
-#: doc/classes/Input.xml:162
+#: doc/classes/Input.xml:169
msgid ""
"Returns the strength of the joypad vibration: x is the strength of the weak "
"motor, and y is the strength of the strong motor."
msgstr ""
-#: doc/classes/Input.xml:168
+#: doc/classes/Input.xml:175
msgid ""
"Returns the mouse speed for the last time the cursor was moved, and this "
"until the next frame where the mouse moves. This means that even if the "
@@ -28859,7 +28965,7 @@ msgid ""
"motion."
msgstr ""
-#: doc/classes/Input.xml:174
+#: doc/classes/Input.xml:181
msgid ""
"Returns the magnetic field strength in micro-Tesla for all axes of the "
"device's magnetometer sensor, if the device has one. Otherwise, the method "
@@ -28868,17 +28974,17 @@ msgid ""
"platforms, it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:181
+#: doc/classes/Input.xml:188
msgid ""
"Returns mouse buttons as a bitmask. If multiple mouse buttons are pressed at "
"the same time, the bits are added together."
msgstr ""
-#: doc/classes/Input.xml:187
+#: doc/classes/Input.xml:194
msgid "Returns the mouse mode. See the constants for more information."
msgstr ""
-#: doc/classes/Input.xml:198
+#: doc/classes/Input.xml:205
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -28891,7 +28997,7 @@ msgid ""
"want (on the range of 0 to 1)."
msgstr ""
-#: doc/classes/Input.xml:208
+#: doc/classes/Input.xml:215
msgid ""
"Returns [code]true[/code] when the user starts pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user pressed down "
@@ -28903,7 +29009,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:218
+#: doc/classes/Input.xml:225
msgid ""
"Returns [code]true[/code] when the user stops pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user released the "
@@ -28913,7 +29019,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:227
+#: doc/classes/Input.xml:234
msgid ""
"Returns [code]true[/code] if you are pressing the action event. Note that if "
"an action has multiple buttons assigned and more than one of them is "
@@ -28924,13 +29030,13 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:236
+#: doc/classes/Input.xml:243
msgid ""
"Returns [code]true[/code] if you are pressing the joypad button (see [enum "
"JoystickList])."
msgstr ""
-#: doc/classes/Input.xml:243
+#: doc/classes/Input.xml:250
msgid ""
"Returns [code]true[/code] if the system knows the specified device. This "
"means that it sets all button and axis indices exactly as defined in [enum "
@@ -28938,19 +29044,19 @@ msgid ""
"but you can still retrieve events from them."
msgstr ""
-#: doc/classes/Input.xml:250
+#: doc/classes/Input.xml:257
msgid ""
"Returns [code]true[/code] if you are pressing the key. You can pass a [enum "
"KeyList] constant."
msgstr ""
-#: doc/classes/Input.xml:257
+#: doc/classes/Input.xml:264
msgid ""
"Returns [code]true[/code] if you are pressing the mouse button specified "
"with [enum ButtonList]."
msgstr ""
-#: doc/classes/Input.xml:267
+#: doc/classes/Input.xml:274
msgid ""
"Notifies the [Input] singleton that a connection has changed, to update the "
"state for the [code]device[/code] index.\n"
@@ -28959,7 +29065,7 @@ msgid ""
"triggered internally."
msgstr ""
-#: doc/classes/Input.xml:275
+#: doc/classes/Input.xml:282
msgid ""
"Feeds an [InputEvent] to the game. Can be used to artificially trigger input "
"events from code. Also generates [method Node._input] calls.\n"
@@ -28972,12 +29078,21 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Input.xml:289
+#: doc/classes/Input.xml:296
msgid ""
"Removes all mappings from the internal database that match the given GUID."
msgstr ""
-#: doc/classes/Input.xml:298
+#: doc/classes/Input.xml:303
+msgid ""
+"Sets the acceleration value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:313
msgid ""
"Sets a custom mouse cursor image, which is only visible inside the game "
"window. The hotspot can also be specified. Passing [code]null[/code] to the "
@@ -28992,7 +29107,7 @@ msgid ""
"compression mode can't be used for custom cursors."
msgstr ""
-#: doc/classes/Input.xml:309
+#: doc/classes/Input.xml:324
msgid ""
"Sets the default cursor shape to be used in the viewport instead of "
"[constant CURSOR_ARROW].\n"
@@ -29002,11 +29117,38 @@ msgid ""
"cursor immediately."
msgstr ""
-#: doc/classes/Input.xml:318
+#: doc/classes/Input.xml:333
+msgid ""
+"Sets the gravity value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:341
+msgid ""
+"Sets the value of the rotation rate of the gyroscope sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:349
+msgid ""
+"Sets the value of the magnetic field of the magnetometer sensor. Can be used "
+"for debugging on devices without a hardware sensor, for example in an editor "
+"on a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:357
msgid "Sets the mouse mode. See the constants for more information."
msgstr ""
-#: doc/classes/Input.xml:325
+#: doc/classes/Input.xml:364
msgid ""
"Enables or disables the accumulation of similar input events sent by the "
"operating system. When input accumulation is enabled, all input events "
@@ -29020,7 +29162,7 @@ msgid ""
"results that closely follow the actual input."
msgstr ""
-#: doc/classes/Input.xml:336
+#: doc/classes/Input.xml:375
msgid ""
"Starts to vibrate the joypad. Joypads usually come with two rumble motors, a "
"strong and a weak one. [code]weak_magnitude[/code] is the strength of the "
@@ -29033,34 +29175,34 @@ msgid ""
"few seconds."
msgstr ""
-#: doc/classes/Input.xml:344
+#: doc/classes/Input.xml:383
msgid "Stops the vibration of the joypad."
msgstr ""
-#: doc/classes/Input.xml:351
+#: doc/classes/Input.xml:390
msgid ""
"Vibrate Android and iOS devices.\n"
"[b]Note:[/b] It needs [code]VIBRATE[/code] permission for Android at export "
"settings. iOS does not support duration."
msgstr ""
-#: doc/classes/Input.xml:359
+#: doc/classes/Input.xml:398
msgid "Sets the mouse position to the specified vector."
msgstr ""
-#: doc/classes/Input.xml:368
+#: doc/classes/Input.xml:407
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
-#: doc/classes/Input.xml:374
+#: doc/classes/Input.xml:413
msgid "Makes the mouse cursor visible if it is hidden."
msgstr ""
-#: doc/classes/Input.xml:377
+#: doc/classes/Input.xml:416
msgid "Makes the mouse cursor hidden if it is visible."
msgstr ""
-#: doc/classes/Input.xml:380
+#: doc/classes/Input.xml:419
msgid ""
"Captures the mouse. The mouse will be hidden and its position locked at the "
"center of the screen.\n"
@@ -29068,83 +29210,83 @@ msgid ""
"need to use [member InputEventMouseMotion.relative]."
msgstr ""
-#: doc/classes/Input.xml:384
+#: doc/classes/Input.xml:423
msgid "Makes the mouse cursor visible but confines it to the game window."
msgstr ""
-#: doc/classes/Input.xml:387
+#: doc/classes/Input.xml:426
msgid "Arrow cursor. Standard, default pointing cursor."
msgstr ""
-#: doc/classes/Input.xml:390
+#: doc/classes/Input.xml:429
msgid ""
"I-beam cursor. Usually used to show where the text cursor will appear when "
"the mouse is clicked."
msgstr ""
-#: doc/classes/Input.xml:393
+#: doc/classes/Input.xml:432
msgid ""
"Pointing hand cursor. Usually used to indicate the pointer is over a link or "
"other interactable item."
msgstr ""
-#: doc/classes/Input.xml:396
+#: doc/classes/Input.xml:435
msgid ""
"Cross cursor. Typically appears over regions in which a drawing operation "
"can be performed or for selections."
msgstr ""
-#: doc/classes/Input.xml:399
+#: doc/classes/Input.xml:438
msgid ""
"Wait cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application is still usable during the "
"operation."
msgstr ""
-#: doc/classes/Input.xml:402
+#: doc/classes/Input.xml:441
msgid ""
"Busy cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application isn't usable during the "
"operation (e.g. something is blocking its main thread)."
msgstr ""
-#: doc/classes/Input.xml:405
+#: doc/classes/Input.xml:444
msgid "Drag cursor. Usually displayed when dragging something."
msgstr ""
-#: doc/classes/Input.xml:408
+#: doc/classes/Input.xml:447
msgid ""
"Can drop cursor. Usually displayed when dragging something to indicate that "
"it can be dropped at the current position."
msgstr ""
-#: doc/classes/Input.xml:411
+#: doc/classes/Input.xml:450
msgid ""
"Forbidden cursor. Indicates that the current action is forbidden (for "
"example, when dragging something) or that the control at a position is "
"disabled."
msgstr ""
-#: doc/classes/Input.xml:414
+#: doc/classes/Input.xml:453
msgid ""
"Vertical resize mouse cursor. A double-headed vertical arrow. It tells the "
"user they can resize the window or the panel vertically."
msgstr ""
-#: doc/classes/Input.xml:417
+#: doc/classes/Input.xml:456
msgid ""
"Horizontal resize mouse cursor. A double-headed horizontal arrow. It tells "
"the user they can resize the window or the panel horizontally."
msgstr ""
-#: doc/classes/Input.xml:420
+#: doc/classes/Input.xml:459
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the bottom left to the top right. It tells the user they can resize the "
"window or the panel both horizontally and vertically."
msgstr ""
-#: doc/classes/Input.xml:423
+#: doc/classes/Input.xml:462
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the top left to the bottom right, the opposite of [constant "
@@ -29152,23 +29294,23 @@ msgid ""
"both horizontally and vertically."
msgstr ""
-#: doc/classes/Input.xml:426
+#: doc/classes/Input.xml:465
msgid "Move cursor. Indicates that something can be moved."
msgstr ""
-#: doc/classes/Input.xml:429
+#: doc/classes/Input.xml:468
msgid ""
"Vertical split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_VSIZE]."
msgstr ""
-#: doc/classes/Input.xml:432
+#: doc/classes/Input.xml:471
msgid ""
"Horizontal split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_HSIZE]."
msgstr ""
-#: doc/classes/Input.xml:435
+#: doc/classes/Input.xml:474
msgid "Help cursor. Usually a question mark."
msgstr ""
@@ -29584,7 +29726,9 @@ msgid "The drag position."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -30906,7 +31050,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30971,22 +31116,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -31001,7 +31148,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -31009,19 +31156,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -31092,7 +31239,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -31150,7 +31298,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -32437,14 +32587,21 @@ msgid "Default text [Color] of the [LinkButton]."
msgstr ""
#: doc/classes/LinkButton.xml:46
-msgid "Text [Color] used when the [LinkButton] is being hovered."
+msgid ""
+"Text [Color] used when the [LinkButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/LinkButton.xml:49
-msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgid "Text [Color] used when the [LinkButton] is being hovered."
msgstr ""
#: doc/classes/LinkButton.xml:52
+msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:55
msgid "The vertical space between the baseline of text and the underline."
msgstr ""
@@ -32937,26 +33094,33 @@ msgid "Text [Color] used when the [MenuButton] is disabled."
msgstr ""
#: doc/classes/MenuButton.xml:64
-msgid "Text [Color] used when the [MenuButton] is being hovered."
+msgid ""
+"Text [Color] used when the [MenuButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/MenuButton.xml:67
-msgid "Text [Color] used when the [MenuButton] is being pressed."
+msgid "Text [Color] used when the [MenuButton] is being hovered."
msgstr ""
#: doc/classes/MenuButton.xml:70
-msgid "[StyleBox] used when the [MenuButton] is being hovered."
+msgid "Text [Color] used when the [MenuButton] is being pressed."
msgstr ""
#: doc/classes/MenuButton.xml:73
-msgid "The horizontal space between [MenuButton]'s icon and text."
+msgid "[StyleBox] used when the [MenuButton] is being hovered."
msgstr ""
#: doc/classes/MenuButton.xml:76
-msgid "Default [StyleBox] for the [MenuButton]."
+msgid "The horizontal space between [MenuButton]'s icon and text."
msgstr ""
#: doc/classes/MenuButton.xml:79
+msgid "Default [StyleBox] for the [MenuButton]."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:82
msgid "[StyleBox] used when the [MenuButton] is being pressed."
msgstr ""
@@ -34695,7 +34859,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -37579,26 +37743,33 @@ msgid "Text [Color] used when the [OptionButton] is disabled."
msgstr ""
#: doc/classes/OptionButton.xml:212
-msgid "Text [Color] used when the [OptionButton] is being hovered."
+msgid ""
+"Text [Color] used when the [OptionButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/OptionButton.xml:215
-msgid "Text [Color] used when the [OptionButton] is being pressed."
+msgid "Text [Color] used when the [OptionButton] is being hovered."
msgstr ""
#: doc/classes/OptionButton.xml:218
-msgid "[StyleBox] used when the [OptionButton] is being hovered."
+msgid "Text [Color] used when the [OptionButton] is being pressed."
msgstr ""
#: doc/classes/OptionButton.xml:221
-msgid "The horizontal space between [OptionButton]'s icon and text."
+msgid "[StyleBox] used when the [OptionButton] is being hovered."
msgstr ""
#: doc/classes/OptionButton.xml:224
-msgid "Default [StyleBox] for the [OptionButton]."
+msgid "The horizontal space between [OptionButton]'s icon and text."
msgstr ""
#: doc/classes/OptionButton.xml:227
+msgid "Default [StyleBox] for the [OptionButton]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:230
msgid "[StyleBox] used when the [OptionButton] is being pressed."
msgstr ""
@@ -38007,7 +38178,7 @@ msgstr ""
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -38037,14 +38208,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -38054,7 +38225,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -40570,17 +40741,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -40598,11 +40795,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -40797,7 +40994,9 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-msgid "Returns the [Physics2DDirectBodyState] of the body."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
@@ -41600,6 +41799,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -41617,7 +41834,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -41731,7 +41948,9 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-msgid "Returns the [PhysicsDirectBodyState] of the body."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/PhysicsServer.xml:370
@@ -42715,27 +42934,27 @@ msgstr ""
msgid "Removes an element from the array by index."
msgstr ""
-#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolColorArray.xml:66
-#: doc/classes/PoolIntArray.xml:67 doc/classes/PoolRealArray.xml:67
-#: doc/classes/PoolStringArray.xml:74 doc/classes/PoolVector2Array.xml:67
-#: doc/classes/PoolVector3Array.xml:66
+#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolIntArray.xml:67
+#: doc/classes/PoolRealArray.xml:67
msgid ""
"Sets the size of the array. If the array is grown, reserves elements at the "
"end of the array. If the array is shrunk, truncates the array to the new "
-"size."
+"size.\n"
+"[b]Note:[/b] Added elements are not automatically initialized to 0 and will "
+"contain garbage, i.e. indeterminate values."
msgstr ""
-#: doc/classes/PoolByteArray.xml:121
+#: doc/classes/PoolByteArray.xml:122
msgid "Changes the byte at the given index."
msgstr ""
-#: doc/classes/PoolByteArray.xml:127 doc/classes/PoolColorArray.xml:79
-#: doc/classes/PoolRealArray.xml:80 doc/classes/PoolStringArray.xml:87
+#: doc/classes/PoolByteArray.xml:128 doc/classes/PoolColorArray.xml:79
+#: doc/classes/PoolRealArray.xml:81 doc/classes/PoolStringArray.xml:87
#: doc/classes/PoolVector2Array.xml:80 doc/classes/PoolVector3Array.xml:79
msgid "Returns the size of the array."
msgstr ""
-#: doc/classes/PoolByteArray.xml:135
+#: doc/classes/PoolByteArray.xml:136
msgid ""
"Returns the slice of the [PoolByteArray] between indices (inclusive) as a "
"new [PoolByteArray]. Any negative index is considered to be from the end of "
@@ -42767,6 +42986,14 @@ msgstr ""
msgid "Appends a value to the array."
msgstr ""
+#: doc/classes/PoolColorArray.xml:66 doc/classes/PoolStringArray.xml:74
+#: doc/classes/PoolVector2Array.xml:67 doc/classes/PoolVector3Array.xml:66
+msgid ""
+"Sets the size of the array. If the array is grown, reserves elements at the "
+"end of the array. If the array is shrunk, truncates the array to the new "
+"size."
+msgstr ""
+
#: doc/classes/PoolColorArray.xml:73
msgid "Changes the [Color] at the given index."
msgstr ""
@@ -42803,11 +43030,11 @@ msgid ""
"valid, or at the end of the array ([code]idx == size()[/code])."
msgstr ""
-#: doc/classes/PoolIntArray.xml:74
+#: doc/classes/PoolIntArray.xml:75
msgid "Changes the int at the given index."
msgstr ""
-#: doc/classes/PoolIntArray.xml:80
+#: doc/classes/PoolIntArray.xml:81
msgid "Returns the array size."
msgstr ""
@@ -42839,7 +43066,7 @@ msgstr ""
msgid "Appends a [PoolRealArray] at the end of this array."
msgstr ""
-#: doc/classes/PoolRealArray.xml:74
+#: doc/classes/PoolRealArray.xml:75
msgid "Changes the float at the given index."
msgstr ""
@@ -44106,18 +44333,6 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:204
msgid ""
-"The project data directory is used for storing project-specific data "
-"(metadata, shader cache, etc.).\n"
-"[b]Note:[/b] Restart the application after changing this setting.\n"
-"[b]Note:[/b] Changing this value can help on platforms or with third-party "
-"tools where specific directory patterns are disallowed. Only modify this "
-"setting if you know that your environment requires it, as changing the "
-"default can impact compatibility with some external tools or plugins which "
-"expect the default [code].import[/code] folder."
-msgstr ""
-
-#: doc/classes/ProjectSettings.xml:209
-msgid ""
"Specifies a file to override project settings. For example: [code]user://"
"custom_settings.cfg[/code]. See \"Overriding\" in the [ProjectSettings] "
"class description at the top for more information.\n"
@@ -44125,7 +44340,7 @@ msgid ""
"code] will still be read to override the project settings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:213
+#: doc/classes/ProjectSettings.xml:208
msgid ""
"If [code]true[/code], the project will save user data to its own user "
"directory (see [member application/config/custom_user_dir_name]). This "
@@ -44135,13 +44350,28 @@ msgid ""
"user data directory)/Godot/app_userdata/(project name)[/code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:216
+#: doc/classes/ProjectSettings.xml:211
+msgid ""
+"If [code]true[/code], the project will use a hidden directory ([code]."
+"import[/code]) for storing project-specific data (metadata, shader cache, "
+"etc.).\n"
+"If [code]false[/code], a non-hidden directory ([code]import[/code]) will be "
+"used instead.\n"
+"[b]Note:[/b] Restart the application after changing this setting.\n"
+"[b]Note:[/b] Changing this value can help on platforms or with third-party "
+"tools where hidden directory patterns are disallowed. Only modify this "
+"setting if you know that your environment requires it, as changing the "
+"default can impact compatibility with some external tools or plugins which "
+"expect the default [code].import[/code] folder."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:217
msgid ""
"Icon set in [code].ico[/code] format used on Windows to set the game's icon. "
"This is done automatically on start by calling [method OS.set_native_icon]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:219
+#: doc/classes/ProjectSettings.xml:220
msgid ""
"Time samples for frame deltas are subject to random variation introduced by "
"the platform, even when frames are displayed at regular intervals thanks to "
@@ -44155,14 +44385,14 @@ msgid ""
"adequate to render frames at the refresh rate."
msgstr ""
-#: doc/classes/ProjectSettings.xml:224
+#: doc/classes/ProjectSettings.xml:225
msgid ""
"[b]Experimental.[/b] Shifts the measurement of delta time for each frame to "
"just after the drawing has taken place. This may lead to more consistent "
"deltas and a reduction in frame stutters."
msgstr ""
-#: doc/classes/ProjectSettings.xml:227
+#: doc/classes/ProjectSettings.xml:228
msgid ""
"If [code]true[/code], disables printing to standard error. If [code]true[/"
"code], this also hides error and warning messages printed by [method "
@@ -44171,7 +44401,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:231
+#: doc/classes/ProjectSettings.xml:232
msgid ""
"If [code]true[/code], disables printing to standard output. This is "
"equivalent to starting the editor or project with the [code]--quiet[/code] "
@@ -44179,7 +44409,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:235
+#: doc/classes/ProjectSettings.xml:236
msgid ""
"If [code]true[/code], flushes the standard output stream every time a line "
"is printed. This affects both terminal logging and file logging.\n"
@@ -44195,20 +44425,20 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:241
+#: doc/classes/ProjectSettings.xml:242
msgid ""
"Debug build override for [member application/run/flush_stdout_on_print], as "
"performance is less important during debugging.\n"
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:245
+#: doc/classes/ProjectSettings.xml:246
msgid ""
"Forces a delay between frames in the main loop (in milliseconds). This may "
"be useful if you plan to disable vertical synchronization."
msgstr ""
-#: doc/classes/ProjectSettings.xml:248
+#: doc/classes/ProjectSettings.xml:249
msgid ""
"If [code]true[/code], enables low-processor usage mode. This setting only "
"works on desktop platforms. The screen is not redrawn if nothing changes "
@@ -44216,75 +44446,81 @@ msgid ""
"useless (and can hurt performance) in most games."
msgstr ""
-#: doc/classes/ProjectSettings.xml:251
+#: doc/classes/ProjectSettings.xml:252
msgid ""
"Amount of sleeping between frames when the low-processor usage mode is "
"enabled (in microseconds). Higher values will result in lower CPU usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:254
+#: doc/classes/ProjectSettings.xml:255
msgid "Path to the main scene file that will be loaded when the project runs."
msgstr ""
-#: doc/classes/ProjectSettings.xml:257 doc/classes/ProjectSettings.xml:260
+#: doc/classes/ProjectSettings.xml:258 doc/classes/ProjectSettings.xml:261
msgid ""
"Audio buses will disable automatically when sound goes below a given dB "
"threshold for a given time. This saves CPU as effects assigned to that bus "
"will no longer do any processing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:263
+#: doc/classes/ProjectSettings.xml:264
msgid ""
"Default [AudioBusLayout] resource file to use in the project, unless "
"overridden by the scene."
msgstr ""
-#: doc/classes/ProjectSettings.xml:266
+#: doc/classes/ProjectSettings.xml:267
msgid ""
"Specifies the audio driver to use. This setting is platform-dependent as "
"each platform supports different audio drivers. If left empty, the default "
"audio driver will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:269
+#: doc/classes/ProjectSettings.xml:270
msgid ""
"If [code]true[/code], microphone input will be allowed. This requires "
"appropriate permissions to be set when exporting to Android or iOS."
msgstr ""
-#: doc/classes/ProjectSettings.xml:272
+#: doc/classes/ProjectSettings.xml:273
msgid ""
"The mixing rate used for audio (in Hz). In general, it's better to not touch "
"this and leave it to the host operating system."
msgstr ""
-#: doc/classes/ProjectSettings.xml:275
+#: doc/classes/ProjectSettings.xml:276
msgid ""
"Safer override for [member audio/mix_rate] in the Web platform. Here "
"[code]0[/code] means \"let the browser choose\" (since some browsers do not "
"like forcing the mix rate)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:278
+#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:281
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:284
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:287
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -44294,7 +44530,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:290
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -44304,27 +44540,27 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:293
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:296
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
-#: doc/classes/ProjectSettings.xml:299
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:302
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -44332,81 +44568,81 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:305
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:308
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:311
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:314
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:317
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr ""
-#: doc/classes/ProjectSettings.xml:320
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:323
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:326
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:329
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:332
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:335
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:338
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:341
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -44414,109 +44650,109 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:344
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:347
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:350
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:353
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:356
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:359
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:362
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:365
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:368
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:371
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:374
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:377
+#: doc/classes/ProjectSettings.xml:380
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:380
+#: doc/classes/ProjectSettings.xml:383
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:383
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:386
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:389
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:392
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:395
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:398
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -44527,91 +44763,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:403
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:406
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:409
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:412
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:415
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:418
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:421
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:424
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:427
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:430
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:433
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:436
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:439
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr ""
-#: doc/classes/ProjectSettings.xml:442
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:445
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:448
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:451
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -44620,13 +44856,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:455
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:458
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -44636,7 +44872,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:463
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -44644,19 +44880,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:468
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:472
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:476
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -44670,45 +44906,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:481
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:484
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:488
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:491
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:494
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:497
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:500
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -44717,7 +44953,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:503
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -44728,7 +44964,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:507
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -44744,14 +44980,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:515
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:518
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -44759,49 +44995,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:521
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:524
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:529
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:532
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:535
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:538
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:541
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:544
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:547
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -44810,7 +45046,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:551
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44818,7 +45054,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:555
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44826,7 +45062,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:559
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44836,7 +45072,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:563
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -44845,7 +45081,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:567
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -44854,7 +45090,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:571
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44864,7 +45100,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:575
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44872,7 +45108,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:579
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -44882,7 +45118,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:583
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -44892,7 +45128,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:587
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44900,7 +45136,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:591
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -44909,7 +45145,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:595
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44917,7 +45153,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:599
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -44929,477 +45165,477 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:605
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:608
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:611
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:614
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:617
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:620
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:623
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:626
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:629
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:632
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:635
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:638
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:641
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:644
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:647
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:650
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:653
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:656
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:659
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:662
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:665
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:668
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:671
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:674
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:677
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:680
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:683
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:686
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:689
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:692
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:695
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:698
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:701
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:704
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:707
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:710
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:713
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:716
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:719
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:722
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:725
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:728
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:731
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:734
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:737
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:740
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:743
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:746
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:749
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:752
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:755
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:758
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:761
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:764
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:767
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:770
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:773
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:776
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:779
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:782
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:785
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:788
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:791
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:794
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:797
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:800
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:803
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:806
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:809
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:812
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:815
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:818
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:821
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:824
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:827
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:830
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:833
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:836
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:839
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:842
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:845
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:848
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:851
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:854
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:857
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:860
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:863
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:866
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:869
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:872
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:875
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:878
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:881
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr ""
-#: doc/classes/ProjectSettings.xml:884
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:887
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:890
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:893
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:896
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:899
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:902
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:905
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:908
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:911
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:914
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:917
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:920
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:923
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:926
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:929
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:932
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:935
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:938
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:941
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:946
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:949
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -45407,92 +45643,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:952
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:955
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:958
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:961
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:964
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:967
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:970
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:973
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:976
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:979
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:982
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:985
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:988
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:991
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:994
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:997
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1000
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1003
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -45502,33 +45738,33 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1007
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1010
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1013
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1017
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1021
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45541,7 +45777,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1025
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45553,7 +45789,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1033
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45565,7 +45801,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1041
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45578,7 +45814,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1045
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -45586,28 +45822,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1049
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1053
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1056
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1059
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -45617,25 +45853,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1063
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1066
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1069
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1072
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45648,7 +45884,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1076
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45660,7 +45896,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1084
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45672,7 +45908,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1092
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45685,13 +45921,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1096
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1099
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -45699,11 +45935,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1103
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1106
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -45717,7 +45953,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1112
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -45726,7 +45962,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1116
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -45742,7 +45978,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1121
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -45752,7 +45988,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1125
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45762,7 +45998,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1129
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -45773,7 +46009,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1133
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45783,7 +46019,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1137
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -45791,7 +46027,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1141
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -45802,7 +46038,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1145
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -45817,7 +46053,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1151
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -45826,13 +46062,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1156
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1159
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -45841,7 +46077,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1162
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -45851,7 +46087,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1165
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -45863,7 +46099,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1168
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -45873,24 +46109,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1171
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1174
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1177
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1180
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -45899,7 +46135,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1183
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -45907,7 +46143,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1186
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -45916,7 +46152,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1189
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -45926,7 +46162,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1193
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -45934,31 +46170,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1197
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1200
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1203
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1206
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1209
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -45966,7 +46202,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1212
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -45976,46 +46212,53 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1215
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1218
+#: doc/classes/ProjectSettings.xml:1221
+msgid ""
+"iOS specific override for [member rendering/gles2/compatibility/"
+"disable_half_float], due to poor support for half-float vertex compression "
+"on many devices."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1224
msgid ""
-"If [code]true[/code] and available on the target device, enables high "
-"floating point precision for all shader computations in GLES2.\n"
+"If [code]true[/code] and available on the target Android device, enables "
+"high floating point precision for all shader computations in GLES2.\n"
"[b]Warning:[/b] High floating point precision can be extremely slow on older "
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1225
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1228
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1231
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1234
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -46023,7 +46266,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1237
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -46033,7 +46276,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1240
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -46042,7 +46285,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1243
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -46051,20 +46294,20 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1246
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1249
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1252
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -46073,7 +46316,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1255
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -46081,7 +46324,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1258
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -46090,7 +46333,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -46100,20 +46343,20 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1267
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1274
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -46122,13 +46365,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -46138,46 +46381,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1293
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1296
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1299
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1302
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1305
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -46187,7 +46430,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -46199,7 +46442,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -46207,7 +46450,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1316
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -46215,7 +46458,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -46224,7 +46467,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1323
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -46238,7 +46481,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1328
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -46248,7 +46491,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1331
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -46257,7 +46500,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1334
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -46267,54 +46510,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1337
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1340
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1343
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1346
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1349
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1352
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1355
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1358
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -46325,61 +46568,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1365
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1368
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1371
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1374
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1377
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1380
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1383
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1386
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -46390,7 +46633,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -46399,26 +46642,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1393 doc/classes/ProjectSettings.xml:1396
#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1405
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1408
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1411
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -46429,20 +46672,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1418
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -46454,52 +46697,52 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1428
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1435
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1438
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1441
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1444
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1447
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1450
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1453
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -46507,7 +46750,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -46517,10 +46760,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -46529,10 +46772,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -46541,10 +46784,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -46553,10 +46796,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -46565,10 +46808,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -47240,40 +47483,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr ""
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -47281,14 +47538,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -49623,6 +49880,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -49640,7 +49913,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -49648,11 +49921,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -49662,19 +49935,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -55099,20 +55372,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -55123,28 +55401,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -55156,19 +55434,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
@@ -57962,26 +58240,33 @@ msgid "Text [Color] used when the [ToolButton] is disabled."
msgstr ""
#: doc/classes/ToolButton.xml:39
-msgid "Text [Color] used when the [ToolButton] is being hovered."
+msgid ""
+"Text [Color] used when the [ToolButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/ToolButton.xml:42
-msgid "Text [Color] used when the [ToolButton] is being pressed."
+msgid "Text [Color] used when the [ToolButton] is being hovered."
msgstr ""
#: doc/classes/ToolButton.xml:45
-msgid "[StyleBox] used when the [ToolButton] is being hovered."
+msgid "Text [Color] used when the [ToolButton] is being pressed."
msgstr ""
#: doc/classes/ToolButton.xml:48
-msgid "The horizontal space between [ToolButton]'s icon and text."
+msgid "[StyleBox] used when the [ToolButton] is being hovered."
msgstr ""
#: doc/classes/ToolButton.xml:51
-msgid "Default [StyleBox] for the [ToolButton]."
+msgid "The horizontal space between [ToolButton]'s icon and text."
msgstr ""
#: doc/classes/ToolButton.xml:54
+msgid "Default [StyleBox] for the [ToolButton]."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:57
msgid "[StyleBox] used when the [ToolButton] is being pressed."
msgstr ""
diff --git a/doc/translations/pt_BR.po b/doc/translations/pt_BR.po
index 950979c803..0e60bcc6bc 100644
--- a/doc/translations/pt_BR.po
+++ b/doc/translations/pt_BR.po
@@ -24,12 +24,17 @@
# Douglas Leão <djlsplays@gmail.com>, 2021.
# Cauê Henrique Sousa Ferrareto <caue313@gmail.com>, 2021.
# William Weber Berrutti <wwberrutti@protonmail.ch>, 2021.
+# jak3z <jose_renato06@outlook.com>, 2021.
+# Henrique Darko <henridark00@gmail.com>, 2021.
+# Cearaj <pmoraisleal@gmail.com>, 2021.
+# Fernando H. Rosa <ferhrosa@gmail.com>, 2021.
+# Alefy San <alefyferreiradeoliveira@outlook.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2021-10-08 03:04+0000\n"
-"Last-Translator: Douglas Leão <djlsplays@gmail.com>\n"
+"PO-Revision-Date: 2021-11-17 07:42+0000\n"
+"Last-Translator: Alefy San <alefyferreiradeoliveira@outlook.com>\n"
"Language-Team: Portuguese (Brazil) <https://hosted.weblate.org/projects/"
"godot-engine/godot-class-reference/pt_BR/>\n"
"Language: pt_BR\n"
@@ -37,45 +42,45 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 4.9-dev\n"
+"X-Generator: Weblate 4.9.1-dev\n"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Description"
msgstr "Descrição"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Tutorials"
msgstr "Tutoriais"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Properties"
msgstr "Propriedades"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Methods"
msgstr "Métodos"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Theme Properties"
msgstr "Propriedades do Tema"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Signals"
msgstr "Sinais"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Enumerations"
msgstr "Enumerações"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Constants"
msgstr "Constantes"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Property Descriptions"
msgstr "Descrições da Propriedade"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Method Descriptions"
msgstr "Descrições do Método"
@@ -188,7 +193,6 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:78
-#, fuzzy
msgid ""
"Asserts that the [code]condition[/code] is [code]true[/code]. If the "
"[code]condition[/code] is [code]false[/code], an error is generated. When "
@@ -214,24 +218,29 @@ msgid ""
"a message with clarifying details\n"
"[/codeblock]"
msgstr ""
-"Afirma que o [code]condition[/code] é [code]true[/code]. Se o "
-"[code]condition[/code] é [code]false[/code], um erro é gerado e o programa é "
-"interrompido até que você o retome. Apenas executa em compilações de "
-"depuração, ou quando executando o jogo a partir do editor. Use-o por motivos "
-"de depuração, para ter certeza que a declaração é [code]true[/code] durante "
-"o desenvolvimento.\n"
+"Afirma que [code]condition[/code] (condição) é [code]true[/code]. Se "
+"[code]condition[/code] é [code]false[/code], um erro é gerado. Ao executar a "
+"partir do editor, o programa também será interrompido, até que você o "
+"retome. Isso pode ser usado como uma forma mais forte de [method push_error] "
+"para reportar erros aos desenvolvedores do projeto ou para utilizadores de "
+"add-ons.\n"
+"[b]Obs.:[/b] Por motivos de desempenho, o código inserido no [method assert] "
+"só é executado em compilações de depuração ou quando o projeto é executado a "
+"partir do editor. Não insira código com efeitos colaterais dentro de um "
+"[method assert], senão o projeto terá um comportamento diferente quando "
+"exportado em modo de lançamento.\n"
"O argumento opcional [code]message[/code], se dado, é mostrado em "
-"complemento a mensagem genérica \"Assertion failed\". Você pode usar isso "
-"para prover detalhes adicionais do o porquê a afirmação falhou.\n"
+"complemento à mensagem genérica \"Assertion failed\". Você pode usar isso "
+"para fornecer detalhes adicionais do porquê a afirmação falhou.\n"
"[codeblock]\n"
-"# Imagine que queremos que uma velocidade esteja entre 0 e 20\n"
-"speed = -10\n"
+"# Imagine que queremos que a velocidade se situe sempre entre 0 e 20.\n"
+"var speed = -10\n"
"assert(speed < 20) # True, o programa irá continuar\n"
"assert(speed >= 0) # False, o programa irá parar\n"
-"assert(speed >= 0 && speed < 20) # Você pode, inclusive, combinar dois "
+"assert(speed >= 0 && speed < 20) # Você também pode combinar os dois "
"parâmetros condicionais em uma verificação\n"
-"assert(speed < 20, \"speed = %f, but the speed limit is 20\" % speed) # "
-"Mostra uma mensagem com detalhes esclarecedores\n"
+"assert(speed < 20, \"speed = %f, mas o limite de velocidade é 20\" % speed) "
+"# Mostra uma mensagem com mais detalhes\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:95
@@ -299,7 +308,6 @@ msgstr ""
"ângulo)."
#: modules/gdscript/doc_classes/@GDScript.xml:135
-#, fuzzy
msgid ""
"Rounds [code]s[/code] upward (towards positive infinity), returning the "
"smallest whole number that is not less than [code]s[/code].\n"
@@ -312,9 +320,10 @@ msgstr ""
"Arredonda [code]s[/code] para cima (em direção ao infinito positivo), "
"retornando o menor número inteiro que não seja menor que [code]s[/code].\n"
"[codeblock]\n"
-"i = ceil(1.45) # i é 2\n"
-"i = ceil(1.001) # i é 2\n"
-"[/codeblock]"
+"a = ceil(1.45) # a é 2.0\n"
+"a = ceil(1.001) # a é 2.0\n"
+"[/codeblock]\n"
+"Veja também [method floor], [method round], [method stepify] e [int]."
#: modules/gdscript/doc_classes/@GDScript.xml:147
msgid ""
@@ -337,7 +346,6 @@ msgstr ""
"Isso é o inverso de [method ord]."
#: modules/gdscript/doc_classes/@GDScript.xml:162
-#, fuzzy
msgid ""
"Clamps [code]value[/code] and returns a value not less than [code]min[/code] "
"and not more than [code]max[/code].\n"
@@ -347,17 +355,13 @@ msgid ""
"a = clamp(15, 1, 20) # a is 15\n"
"[/codeblock]"
msgstr ""
-"Fixa [code] value[/code] e retorna um valor não inferior a [code] min [/"
-"code] e não superior a [code] max [/code].\n"
+"Fixa [code]value[/code] e retorna um valor não inferior a [code]min[/code] e "
+"não superior a [code]max[/code].\n"
"[codeblock]\n"
-"velocidade = 1000\n"
-"# a é 20\n"
-"a = clamp(velocidade, 1, 20)\n"
-"\n"
-"velocidade = -10\n"
-"# a é 1\n"
-"a = clamp(velocidade, 1, 20)\n"
-"[/ codeblock]"
+"a = clamp(1000, 1, 20) # a é 20\n"
+"a = clamp(-10, 1, 20) # a é 1\n"
+"a = clamp(15, 1, 20) # a é 15\n"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:175
msgid ""
@@ -384,7 +388,6 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:190
-#, fuzzy
msgid ""
"Returns the cosine of angle [code]s[/code] in radians.\n"
"[codeblock]\n"
@@ -392,13 +395,13 @@ msgid ""
"a = cos(PI) # a is -1.0\n"
"[/codeblock]"
msgstr ""
-"Retorna o seno do ângulo [code]s[/code] em radianos.\n"
+"Retorna o cosseno do ângulo [code]s[/code] em radianos.\n"
"[codeblock]\n"
-"sin(0.523599) # Retorna 0.5\n"
+"a = cos(TAU) # a é 1.0\n"
+"a = cos(PI) # a é -1.0\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:201
-#, fuzzy
msgid ""
"Returns the hyperbolic cosine of [code]s[/code] in radians.\n"
"[codeblock]\n"
@@ -407,8 +410,7 @@ msgid ""
msgstr ""
"Retorna o cosseno hiperbólico de [code]s[/code] em radianos.\n"
"[codeblock]\n"
-"# Prints 1.543081\n"
-"print(cosh(1))\n"
+"print(cosh(1)) # Imprime 1.543081\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:211
@@ -417,10 +419,9 @@ msgstr "Converte de decibéis para energia linear (áudio)."
#: modules/gdscript/doc_classes/@GDScript.xml:218
msgid "Deprecated alias for [method step_decimals]."
-msgstr ""
+msgstr "Apelido descontinuado para [method step_decimals]."
#: modules/gdscript/doc_classes/@GDScript.xml:227
-#, fuzzy
msgid ""
"[b]Note:[/b] [code]dectime[/code] has been deprecated and will be removed in "
"Godot 4.0, please use [method move_toward] instead.\n"
@@ -430,15 +431,15 @@ msgid ""
"a = dectime(60, 10, 0.1)) # a is 59.0\n"
"[/codeblock]"
msgstr ""
+"[b]Nota:[/b] [code]dectime[/code] foi depreciado e será removido no Godot "
+"4.0, por favor use [method move_toward] em vez disso.\n"
"Retorna o resultado de [code]value[/code] decrescido por [code]step[/code] * "
"[code]amount[/code].\n"
"[codeblock]\n"
-"# a = 59\n"
-"a = dectime(60, 10, 0.1))\n"
+"a = dectime(60, 10, 0.1)) # a é 59.0\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:238
-#, fuzzy
msgid ""
"Converts an angle expressed in degrees to radians.\n"
"[codeblock]\n"
@@ -447,20 +448,19 @@ msgid ""
msgstr ""
"Converte um ângulo expresso em graus para radianos.\n"
"[codeblock]\n"
-"# r é 3.141593\n"
-"r = deg2rad(180)\n"
+"r = deg2rad(180) # r é 3.141593\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:248
-#, fuzzy
msgid ""
"Converts a dictionary (previously created with [method inst2dict]) back to "
"an instance. Useful for deserializing."
msgstr ""
-"Converte uma instância pré-convertida em um dicionário, de volta em uma "
-"instância. Útil para desserialização."
+"Converte uma instância pré-convertida em um dicionário (com [method "
+"inst2dict]), de volta em uma instância. Útil para desserialização."
#: modules/gdscript/doc_classes/@GDScript.xml:256
+#, fuzzy
msgid ""
"Returns an \"eased\" value of [code]x[/code] based on an easing function "
"defined with [code]curve[/code]. This easing function is based on an "
@@ -480,6 +480,24 @@ msgid ""
"See also [method smoothstep]. If you need to perform more advanced "
"transitions, use [Tween] or [AnimationPlayer]."
msgstr ""
+"Retorna um valor \"suavizado\" de [code]x[/code] baseado em uma função de "
+"atenuação definida com [code]curve[/code]. Essa função de atenuação é "
+"baseada em um exponente. [code]curve[/code] pode ser qualquer número de "
+"ponto flutuante, com valores específicos resultando nos seguintes "
+"comportamentos:\n"
+"[codeblock]\n"
+"- Menor que -1.0 (exclusivo): Ease in-out\n"
+"- 1.0: Linear\n"
+"- Entre -1.0 and 0.0 (exclusivo): Ease out-in\n"
+"- 0.0: Constant\n"
+"- Entre 0.0 to 1.0 (exclusivo): Ease in\n"
+"- 1.0: Linear\n"
+"- Maior que 1.0 (exclusivo): Ease out\n"
+"[/codeblock]\n"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/"
+"ease_cheatsheet.png]ease() curve values cheatsheet[/url]\n"
+"Veja também [method smoothstep]. Se você precisa fazer transições mais "
+"avançadas, use [Tween] ou [AnimationPlayer]."
#: modules/gdscript/doc_classes/@GDScript.xml:274
msgid ""
@@ -502,7 +520,6 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:286
-#, fuzzy
msgid ""
"Rounds [code]s[/code] downward (towards negative infinity), returning the "
"largest whole number that is not more than [code]s[/code].\n"
@@ -516,19 +533,18 @@ msgid ""
"[code]s[/code] is a non-negative number, you can use [code]int(s)[/code] "
"directly."
msgstr ""
-"Arredonda [code]s[/code] para baixo, retornando o maior número inteiro que "
-"não seja superior a [code]s[/code].\n"
+"Arredonda [code]s[/code] para baixo (em direção ao infinito negativo), "
+"retornando o maior número inteiro que não seja superior a [code]s[/code].\n"
"[codeblock]\n"
-"# a é 2.0\n"
-"a = floor(2,99)\n"
-"# a é -3,0\n"
-"a = floor(-2,99)\n"
+"a = floor(2.45) # a é 2.0\n"
+"a = floor(2.99) # a é 2.0\n"
+"a = floor(-2.99) # a é -3.0\n"
"[/codeblock]\n"
-"[b]Nota:[/b] Este método retorna um float. Se você precisar de um inteiro, "
-"você pode usar [code]int(s)[/code] diretamente."
+"[b]Nota:[/b] Este método retorna uma float. Se você precisar de um inteiro e "
+"[code]s[/code] não é um número negativo, você pode usar [code]int(s)[/code] "
+"diretamente."
#: modules/gdscript/doc_classes/@GDScript.xml:301
-#, fuzzy
msgid ""
"Returns the floating-point remainder of [code]a/b[/code], keeping the sign "
"of [code]a[/code].\n"
@@ -540,13 +556,11 @@ msgstr ""
"Retorna o resto em ponto flutuante de [code]a/b[/code], mantendo o sinal de "
"[code]a[/code].\n"
"[codeblock]\n"
-"# Restante é 1,5\n"
-"var resto = fmod (7, 5,5)\n"
+"r = fmod(7, 5.5) # r é 1.5\n"
"[/codeblock]\n"
"Para a operação de resto inteiro, use o operador %."
#: modules/gdscript/doc_classes/@GDScript.xml:313
-#, fuzzy
msgid ""
"Returns the floating-point modulus of [code]a/b[/code] that wraps equally in "
"positive and negative.\n"
@@ -569,25 +583,20 @@ msgstr ""
"Retorna o módulo de ponto flutuante de [code] a / b [/code] que envolve "
"igualmente em positivo e negativo.\n"
"[codeblock]\n"
-"var i = -6\n"
-"while eu <5:\n"
-" prints(i, fposmod (i, 3))\n"
-" i + = 1\n"
-"[/ codeblock]\n"
-"Gera:\n"
+"for i in 7:\n"
+" var x = 0.5 * i - 1.5\n"
+" print(\"%4.1f %4.1f %4.1f\" % [x, fmod(x, 1.5), fposmod(x, 1.5)])\n"
+"[/codeblock]\n"
+"Produz:\n"
"[codeblock]\n"
-"-6 0\n"
-"-5 1\n"
-"-4 2\n"
-"-3 0\n"
-"-2 1\n"
-"-1 2\n"
-"0 0\n"
-"1 1\n"
-"2 2\n"
-"3 0\n"
-"4 1\n"
-"[/ codeblock]"
+"-1.5 -0.0 0.0\n"
+"-1.0 -1.0 0.5\n"
+"-0.5 -0.5 1.0\n"
+" 0.0 0.0 0.0\n"
+" 0.5 0.5 0.5\n"
+" 1.0 1.0 1.0\n"
+" 1.5 0.0 0.0\n"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:336
msgid ""
@@ -809,7 +818,6 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:482
-#, fuzzy
msgid ""
"Linearly interpolates between two values by a normalized value. This is the "
"opposite of [method inverse_lerp].\n"
@@ -1972,12 +1980,12 @@ msgstr ""
"em torno de seu perímetro. Isto equivale a [code]TAU / 2[/code]."
#: modules/gdscript/doc_classes/@GDScript.xml:1210
-#, fuzzy
msgid ""
"The circle constant, the circumference of the unit circle in radians. This "
"is equivalent to [code]PI * 2[/code], or 360 degrees in rotations."
msgstr ""
-"A constante do círculo, a circunferência do círculo unitário em radianos."
+"A constante do círculo, a circunferência do círculo unitário em radianos. "
+"Isto é equivalente a [code]PI * 2[/code] ou 360 graus em rotações."
#: modules/gdscript/doc_classes/@GDScript.xml:1213
msgid ""
@@ -3298,121 +3306,119 @@ msgstr "Máscara do segundo botão extra do mouse."
#: doc/classes/@GlobalScope.xml:938
msgid "Invalid button or axis."
-msgstr ""
+msgstr "Botão ou eixo inválido."
#: doc/classes/@GlobalScope.xml:941
msgid "Gamepad button 0."
-msgstr ""
+msgstr "Botão 0 do controle."
#: doc/classes/@GlobalScope.xml:944
-#, fuzzy
msgid "Gamepad button 1."
-msgstr "Máscara do primeiro botão extra do mouse."
+msgstr "Botão 1 do controle."
#: doc/classes/@GlobalScope.xml:947
-#, fuzzy
msgid "Gamepad button 2."
-msgstr "Máscara do segundo botão extra do mouse."
+msgstr "Botão 2 do controle."
#: doc/classes/@GlobalScope.xml:950
msgid "Gamepad button 3."
-msgstr ""
+msgstr "Botão 3 do controle."
#: doc/classes/@GlobalScope.xml:953
msgid "Gamepad button 4."
-msgstr ""
+msgstr "Botão 4 do controle."
#: doc/classes/@GlobalScope.xml:956
msgid "Gamepad button 5."
-msgstr ""
+msgstr "Botão 5 do controle."
#: doc/classes/@GlobalScope.xml:959
msgid "Gamepad button 6."
-msgstr ""
+msgstr "Botão 6 do controle."
#: doc/classes/@GlobalScope.xml:962
msgid "Gamepad button 7."
-msgstr ""
+msgstr "Botão 7 do controle."
#: doc/classes/@GlobalScope.xml:965
msgid "Gamepad button 8."
-msgstr ""
+msgstr "Botão 8 do controle."
#: doc/classes/@GlobalScope.xml:968
msgid "Gamepad button 9."
-msgstr ""
+msgstr "Botão 9 do controle."
#: doc/classes/@GlobalScope.xml:971
msgid "Gamepad button 10."
-msgstr ""
+msgstr "Botão 10 do controle."
#: doc/classes/@GlobalScope.xml:974
msgid "Gamepad button 11."
-msgstr ""
+msgstr "Botão 11 do controle."
#: doc/classes/@GlobalScope.xml:977
msgid "Gamepad button 12."
-msgstr ""
+msgstr "Botão 12 do controle."
#: doc/classes/@GlobalScope.xml:980
msgid "Gamepad button 13."
-msgstr ""
+msgstr "Botão 13 do controle."
#: doc/classes/@GlobalScope.xml:983
msgid "Gamepad button 14."
-msgstr ""
+msgstr "Botão 14 do controle."
#: doc/classes/@GlobalScope.xml:986
msgid "Gamepad button 15."
-msgstr ""
+msgstr "Botão 15 do controle."
#: doc/classes/@GlobalScope.xml:989
msgid "Gamepad button 16."
-msgstr ""
+msgstr "Botão 16 do controle."
#: doc/classes/@GlobalScope.xml:992
msgid "Gamepad button 17."
-msgstr ""
+msgstr "Botão 17 do controle."
#: doc/classes/@GlobalScope.xml:995
msgid "Gamepad button 18."
-msgstr ""
+msgstr "Botão 18 do controle."
#: doc/classes/@GlobalScope.xml:998
msgid "Gamepad button 19."
-msgstr ""
+msgstr "Botão 19 do controle."
#: doc/classes/@GlobalScope.xml:1001
msgid "Gamepad button 20."
-msgstr ""
+msgstr "Botão 20 do controle."
#: doc/classes/@GlobalScope.xml:1004
msgid "Gamepad button 21."
-msgstr ""
+msgstr "Botão 21 do controle."
#: doc/classes/@GlobalScope.xml:1007
msgid "Gamepad button 22."
-msgstr ""
+msgstr "Botão 22 do controle."
#: doc/classes/@GlobalScope.xml:1010
msgid "Represents the maximum number of joystick buttons supported."
-msgstr ""
+msgstr "Representa o número máximo de botões de joystick suportados."
#: doc/classes/@GlobalScope.xml:1013
msgid "DualShock circle button."
-msgstr ""
+msgstr "Botão Círculo do DualShock."
#: doc/classes/@GlobalScope.xml:1016
msgid "DualShock X button."
-msgstr ""
+msgstr "Botão X do DualShock."
#: doc/classes/@GlobalScope.xml:1019
msgid "DualShock square button."
-msgstr ""
+msgstr "Botão quadrado do DualShock."
#: doc/classes/@GlobalScope.xml:1022
msgid "DualShock triangle button."
-msgstr ""
+msgstr "Botão triângulo do Dualshock."
#: doc/classes/@GlobalScope.xml:1025
#, fuzzy
@@ -3464,7 +3470,7 @@ msgstr ""
#: doc/classes/@GlobalScope.xml:1055
msgid "Trigger on a VR controller."
-msgstr ""
+msgstr "Gatilho em um controle VR."
#: doc/classes/@GlobalScope.xml:1058
msgid ""
@@ -3488,11 +3494,11 @@ msgstr ""
#: doc/classes/@GlobalScope.xml:1070
msgid "Gamepad button Select."
-msgstr ""
+msgstr "Botão Select do controle."
#: doc/classes/@GlobalScope.xml:1073
msgid "Gamepad button Start."
-msgstr ""
+msgstr "Botão Start do controle."
#: doc/classes/@GlobalScope.xml:1076
msgid "Gamepad DPad up."
@@ -3690,7 +3696,7 @@ msgstr ""
#: doc/classes/@GlobalScope.xml:1223
msgid "Generic error."
-msgstr ""
+msgstr "Erro genérico."
#: doc/classes/@GlobalScope.xml:1226
msgid "Unavailable error."
@@ -3722,15 +3728,15 @@ msgstr ""
#: doc/classes/@GlobalScope.xml:1247
msgid "File: Bad path error."
-msgstr ""
+msgstr "Arquivo: Erro caminho incorreto."
#: doc/classes/@GlobalScope.xml:1250
msgid "File: No permission error."
-msgstr ""
+msgstr "Aquivo: Erro sem permissão."
#: doc/classes/@GlobalScope.xml:1253
msgid "File: Already in use error."
-msgstr ""
+msgstr "Arquivo: Erro arquivo já em uso."
#: doc/classes/@GlobalScope.xml:1256
msgid "File: Can't open error."
@@ -3794,7 +3800,7 @@ msgstr ""
#: doc/classes/@GlobalScope.xml:1301
msgid "Connection error."
-msgstr ""
+msgstr "Erro de conexão."
#: doc/classes/@GlobalScope.xml:1304
msgid "Can't acquire resource error."
@@ -3830,11 +3836,11 @@ msgstr ""
#: doc/classes/@GlobalScope.xml:1328
msgid "Compilation failed error."
-msgstr ""
+msgstr "Erro de compilação fracassada."
#: doc/classes/@GlobalScope.xml:1331
msgid "Method not found error."
-msgstr ""
+msgstr "Erro de método não encontrado."
#: doc/classes/@GlobalScope.xml:1334
msgid "Linking failed error."
@@ -3850,7 +3856,7 @@ msgstr ""
#: doc/classes/@GlobalScope.xml:1343
msgid "Invalid declaration error."
-msgstr ""
+msgstr "Erro de declaração inválida."
#: doc/classes/@GlobalScope.xml:1346
msgid "Duplicate symbol error."
@@ -3870,7 +3876,7 @@ msgstr ""
#: doc/classes/@GlobalScope.xml:1358
msgid "Help error."
-msgstr ""
+msgstr "Erro de ajuda."
#: doc/classes/@GlobalScope.xml:1361
msgid "Bug error."
@@ -4031,7 +4037,7 @@ msgstr ""
#: doc/classes/@GlobalScope.xml:1445
msgid "The property can be checked in the editor inspector."
-msgstr ""
+msgstr "A propriedade pode ser checada no inspetor do editor."
#: doc/classes/@GlobalScope.xml:1448
msgid "The property is checked in the editor inspector."
@@ -4106,111 +4112,111 @@ msgstr ""
#: doc/classes/@GlobalScope.xml:1502
msgid "Variable is [code]null[/code]."
-msgstr ""
+msgstr "Variável é [code]null[/code]."
#: doc/classes/@GlobalScope.xml:1505
msgid "Variable is of type [bool]."
-msgstr ""
+msgstr "Variável é do tipo [bool]."
#: doc/classes/@GlobalScope.xml:1508
msgid "Variable is of type [int]."
-msgstr ""
+msgstr "Variável é do tipo [int]."
#: doc/classes/@GlobalScope.xml:1511
msgid "Variable is of type [float] (real)."
-msgstr ""
+msgstr "Variável é do tipo [float] (real)."
#: doc/classes/@GlobalScope.xml:1514
msgid "Variable is of type [String]."
-msgstr ""
+msgstr "Variável é do tipo [String]."
#: doc/classes/@GlobalScope.xml:1517
msgid "Variable is of type [Vector2]."
-msgstr ""
+msgstr "Variável é do tipo [Vector2]."
#: doc/classes/@GlobalScope.xml:1520
msgid "Variable is of type [Rect2]."
-msgstr ""
+msgstr "Variável é do tipo [Rect2]."
#: doc/classes/@GlobalScope.xml:1523
msgid "Variable is of type [Vector3]."
-msgstr ""
+msgstr "Variável é do tipo [Vector3]."
#: doc/classes/@GlobalScope.xml:1526
msgid "Variable is of type [Transform2D]."
-msgstr ""
+msgstr "Variável é do tipo [Transform2D]."
#: doc/classes/@GlobalScope.xml:1529
msgid "Variable is of type [Plane]."
-msgstr ""
+msgstr "Variável é do tipo [Plane]."
#: doc/classes/@GlobalScope.xml:1532
msgid "Variable is of type [Quat]."
-msgstr ""
+msgstr "Variável é do tipo [Quat]."
#: doc/classes/@GlobalScope.xml:1535
msgid "Variable is of type [AABB]."
-msgstr ""
+msgstr "Variável é do tipo [AABB]."
#: doc/classes/@GlobalScope.xml:1538
msgid "Variable is of type [Basis]."
-msgstr ""
+msgstr "Variável é do tipo [Basis]."
#: doc/classes/@GlobalScope.xml:1541
msgid "Variable is of type [Transform]."
-msgstr ""
+msgstr "Variável é do tipo [Transform]."
#: doc/classes/@GlobalScope.xml:1544
msgid "Variable is of type [Color]."
-msgstr ""
+msgstr "Variável é do tipo [Color]."
#: doc/classes/@GlobalScope.xml:1547
msgid "Variable is of type [NodePath]."
-msgstr ""
+msgstr "Variável é do tipo [NodePath]."
#: doc/classes/@GlobalScope.xml:1550
msgid "Variable is of type [RID]."
-msgstr ""
+msgstr "Variável é do tipo [RID]."
#: doc/classes/@GlobalScope.xml:1553
msgid "Variable is of type [Object]."
-msgstr ""
+msgstr "Variável é do tipo [Object]."
#: doc/classes/@GlobalScope.xml:1556
msgid "Variable is of type [Dictionary]."
-msgstr ""
+msgstr "Variável é do tipo [Dictionary]."
#: doc/classes/@GlobalScope.xml:1559
msgid "Variable is of type [Array]."
-msgstr ""
+msgstr "Variável é do tipo [Array]."
#: doc/classes/@GlobalScope.xml:1562
msgid "Variable is of type [PoolByteArray]."
-msgstr ""
+msgstr "Variável é do tipo [PoolByteArray]."
#: doc/classes/@GlobalScope.xml:1565
msgid "Variable is of type [PoolIntArray]."
-msgstr ""
+msgstr "Variável é do tipo [PoolIntArray]."
#: doc/classes/@GlobalScope.xml:1568
msgid "Variable is of type [PoolRealArray]."
-msgstr ""
+msgstr "Variável é do tipo [PoolRealArray]."
#: doc/classes/@GlobalScope.xml:1571
msgid "Variable is of type [PoolStringArray]."
-msgstr ""
+msgstr "Variável é do tipo [PoolStringArray]."
#: doc/classes/@GlobalScope.xml:1574
msgid "Variable is of type [PoolVector2Array]."
-msgstr ""
+msgstr "Variável é do tipo [PoolVector2Array]."
#: doc/classes/@GlobalScope.xml:1577
msgid "Variable is of type [PoolVector3Array]."
-msgstr ""
+msgstr "Variável é do tipo [PoolVector3Array]."
#: doc/classes/@GlobalScope.xml:1580
msgid "Variable is of type [PoolColorArray]."
-msgstr ""
+msgstr "Variável é do tipo [PoolColorArray]."
#: doc/classes/@GlobalScope.xml:1583
msgid "Represents the size of the [enum Variant.Type] enum."
@@ -4238,11 +4244,11 @@ msgstr ""
#: doc/classes/@GlobalScope.xml:1601
msgid "Greater than or equal operator ([code]>=[/code])."
-msgstr ""
+msgstr "Operador igual ou maior que ([code]>=[/code])."
#: doc/classes/@GlobalScope.xml:1604
msgid "Addition operator ([code]+[/code])."
-msgstr ""
+msgstr "Operador de adição ([code]+[/code])."
#: doc/classes/@GlobalScope.xml:1607
msgid "Subtraction operator ([code]-[/code])."
@@ -4250,11 +4256,11 @@ msgstr ""
#: doc/classes/@GlobalScope.xml:1610
msgid "Multiplication operator ([code]*[/code])."
-msgstr ""
+msgstr "Operador de multiplicação ([code]*[/code])."
#: doc/classes/@GlobalScope.xml:1613
msgid "Division operator ([code]/[/code])."
-msgstr ""
+msgstr "Operador de divisão ([code]/[/code])."
#: doc/classes/@GlobalScope.xml:1616
msgid "Unary negation operator ([code]-[/code])."
@@ -4371,112 +4377,121 @@ msgid ""
msgstr ""
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr ""
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
msgstr ""
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
msgstr ""
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
msgstr ""
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr ""
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr ""
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr ""
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
msgstr ""
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr ""
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
msgstr ""
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
msgstr ""
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr ""
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
"positive.\n"
@@ -4572,6 +4587,8 @@ msgstr ""
#: doc/classes/AcceptDialog.xml:82
msgid "Emitted when a custom button is pressed. See [method add_button]."
msgstr ""
+"Emitido quando um botão personalizado é pressionado. Veja [method "
+"add_button]."
#: doc/classes/AESContext.xml:4
msgid "Interface to low level AES encryption features."
@@ -4718,19 +4735,19 @@ msgstr ""
#: doc/classes/AnimatedSprite.xml:41 doc/classes/SpriteBase3D.xml:48
msgid "If [code]true[/code], texture will be centered."
-msgstr ""
+msgstr "Se [code]true[/code], a texture será centralizada."
#: doc/classes/AnimatedSprite.xml:44 doc/classes/Sprite.xml:39
#: doc/classes/SpriteBase3D.xml:54 doc/classes/TextureButton.xml:21
#: doc/classes/TextureRect.xml:20
msgid "If [code]true[/code], texture is flipped horizontally."
-msgstr ""
+msgstr "Se [code]true[/code], a textura será invertida horizontalmente."
#: doc/classes/AnimatedSprite.xml:47 doc/classes/Sprite.xml:42
#: doc/classes/SpriteBase3D.xml:57 doc/classes/TextureButton.xml:24
#: doc/classes/TextureRect.xml:23
msgid "If [code]true[/code], texture is flipped vertically."
-msgstr ""
+msgstr "Se [code]true[/code], a textura será invertida verticalmente."
#: doc/classes/AnimatedSprite.xml:50 doc/classes/AnimatedSprite3D.xml:38
msgid "The displayed animation frame's index."
@@ -4738,7 +4755,7 @@ msgstr ""
#: doc/classes/AnimatedSprite.xml:53 doc/classes/AnimatedSprite3D.xml:41
msgid "The [SpriteFrames] resource containing the animation(s)."
-msgstr ""
+msgstr "O recurso [SpriteFrames] que contém a(s) animação(ões)."
#: doc/classes/AnimatedSprite.xml:56 doc/classes/Sprite.xml:58
#: doc/classes/SpriteBase3D.xml:63
@@ -4751,7 +4768,7 @@ msgstr ""
#: doc/classes/AnimatedSprite.xml:62
msgid "The animation speed is multiplied by this value."
-msgstr ""
+msgstr "A velocidade da animação é multiplicada por este valor."
#: doc/classes/AnimatedSprite.xml:68 doc/classes/AnimatedSprite3D.xml:50
msgid ""
@@ -4762,7 +4779,7 @@ msgstr ""
#: doc/classes/AnimatedSprite.xml:73 doc/classes/AnimatedSprite3D.xml:55
msgid "Emitted when [member frame] changed."
-msgstr ""
+msgstr "Emitido quando [member frame] muda."
#: doc/classes/AnimatedSprite3D.xml:4
msgid ""
@@ -4916,7 +4933,7 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/animation/index.html"
#: doc/classes/Animation.xml:28
msgid "Adds a track to the Animation."
-msgstr ""
+msgstr "Adiciona uma trilha à Animação."
#: doc/classes/Animation.xml:36
msgid ""
@@ -5124,7 +5141,7 @@ msgstr ""
#: doc/classes/Animation.xml:317
msgid "Gets the type of a track."
-msgstr ""
+msgstr "Obtém o tipo de uma trilha."
#: doc/classes/Animation.xml:327
msgid "Insert a generic key in a given track."
@@ -5143,7 +5160,7 @@ msgstr ""
#: doc/classes/Animation.xml:348
msgid "Moves a track down."
-msgstr ""
+msgstr "Move uma trilha para baixo."
#: doc/classes/Animation.xml:356
msgid ""
@@ -5153,7 +5170,7 @@ msgstr ""
#: doc/classes/Animation.xml:363
msgid "Moves a track up."
-msgstr ""
+msgstr "Move uma trilha para cima."
#: doc/classes/Animation.xml:371
msgid "Removes a key by index in a given track."
@@ -5309,11 +5326,11 @@ msgstr ""
#: doc/classes/Animation.xml:552
msgid "Linear interpolation."
-msgstr ""
+msgstr "Interpolação linear."
#: doc/classes/Animation.xml:555
msgid "Cubic interpolation."
-msgstr ""
+msgstr "Interpolação cúbica."
#: doc/classes/Animation.xml:558
msgid "Update between keyframes."
@@ -5335,7 +5352,7 @@ msgstr ""
#: doc/classes/AnimationNode.xml:4
msgid "Base resource for [AnimationTree] nodes."
-msgstr ""
+msgstr "Recurso base para nós [AnimationTree]."
#: doc/classes/AnimationNode.xml:7
msgid ""
@@ -5559,7 +5576,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -5873,18 +5890,20 @@ msgid ""
"Returns [code]true[/code] if a sub-node with specified [code]name[/code] "
"exists."
msgstr ""
+"Retorna [code]true[/code] se um subnó com um [code]name[/code] especificado "
+"existe."
#: doc/classes/AnimationNodeBlendTree.xml:64
msgid "Removes a sub-node."
-msgstr ""
+msgstr "Remove um subnó."
#: doc/classes/AnimationNodeBlendTree.xml:72
msgid "Changes the name of a sub-node."
-msgstr ""
+msgstr "Muda o nome de um subnó."
#: doc/classes/AnimationNodeBlendTree.xml:80
msgid "Modifies the position of a sub-node."
-msgstr ""
+msgstr "Modifica a posição de um subnó."
#: doc/classes/AnimationNodeBlendTree.xml:86
msgid "The global offset of all sub-nodes."
@@ -6138,7 +6157,7 @@ msgstr ""
#: doc/classes/AnimationNodeStateMachineTransition.xml:29
msgid "The transition type."
-msgstr ""
+msgstr "O tipo de transição."
#: doc/classes/AnimationNodeStateMachineTransition.xml:32
msgid "The time to cross-fade between this state and the next."
@@ -6467,11 +6486,11 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:234
msgid "Notifies when an animation finished playing."
-msgstr ""
+msgstr "Notifica quando uma animação termina de reproduzir."
#: doc/classes/AnimationPlayer.xml:240
msgid "Notifies when an animation starts playing."
-msgstr ""
+msgstr "Notifica quando uma animação começa a reproduzir."
#: doc/classes/AnimationPlayer.xml:245
msgid ""
@@ -6732,7 +6751,7 @@ msgstr ""
#: doc/classes/AnimationTreePlayer.xml:188
msgid "Check if a node exists (by name)."
-msgstr ""
+msgstr "Checa se um nó existe (pelo nome)."
#: doc/classes/AnimationTreePlayer.xml:195
msgid ""
@@ -6845,7 +6864,7 @@ msgstr "Retorna o nome do nó em [code]idx[/code]."
#: doc/classes/AnimationTreePlayer.xml:357
msgid "Resets this [AnimationTreePlayer]."
-msgstr ""
+msgstr "Reseta este [AnimationTreePlayer]."
#: doc/classes/AnimationTreePlayer.xml:364
#, fuzzy
@@ -6958,7 +6977,7 @@ msgstr ""
#: doc/classes/AnimationTreePlayer.xml:478
msgid "Animation node."
-msgstr ""
+msgstr "Nó de animação."
#: doc/classes/AnimationTreePlayer.xml:481
msgid "OneShot node."
@@ -6970,15 +6989,15 @@ msgstr ""
#: doc/classes/AnimationTreePlayer.xml:487
msgid "Blend2 node."
-msgstr ""
+msgstr "Nó Blend2."
#: doc/classes/AnimationTreePlayer.xml:490
msgid "Blend3 node."
-msgstr ""
+msgstr "Nó Blend3."
#: doc/classes/AnimationTreePlayer.xml:493
msgid "Blend4 node."
-msgstr ""
+msgstr "Nó Blend4."
#: doc/classes/AnimationTreePlayer.xml:496
msgid "TimeScale node."
@@ -6990,7 +7009,7 @@ msgstr ""
#: doc/classes/AnimationTreePlayer.xml:502
msgid "Transition node."
-msgstr ""
+msgstr "Nó de transição."
#: doc/classes/Area.xml:4
msgid "3D area for detection and physics and audio influence."
@@ -7010,21 +7029,25 @@ msgstr ""
#: doc/classes/Area.xml:17
msgid ""
-"Returns a list of intersecting [Area]s. For performance reasons (collisions "
-"are all processed at the same time) this list is modified once during the "
-"physics step, not immediately after objects are moved. Consider using "
-"signals instead."
+"Returns a list of intersecting [Area]s. The overlapping area's [member "
+"CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:23
+#: doc/classes/Area.xml:24
msgid ""
-"Returns a list of intersecting [PhysicsBody]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody]s. The overlapping body's "
+"[member CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:30
+#: doc/classes/Area.xml:32
msgid ""
"If [code]true[/code], the given area overlaps the Area.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -7032,7 +7055,7 @@ msgid ""
"physics step. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:38
+#: doc/classes/Area.xml:40
msgid ""
"If [code]true[/code], the given physics body overlaps the Area.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -7043,7 +7066,7 @@ msgid ""
"their tiles with collision shapes as a virtual physics body)."
msgstr ""
-#: doc/classes/Area.xml:46
+#: doc/classes/Area.xml:48
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
"velocity lost per second.\n"
@@ -7051,41 +7074,41 @@ msgid ""
"details about damping."
msgstr ""
-#: doc/classes/Area.xml:50 doc/classes/Area2D.xml:52
+#: doc/classes/Area.xml:52 doc/classes/Area2D.xml:54
msgid "The name of the area's audio bus."
msgstr ""
-#: doc/classes/Area.xml:53 doc/classes/Area2D.xml:55
+#: doc/classes/Area.xml:55 doc/classes/Area2D.xml:57
msgid ""
"If [code]true[/code], the area's audio bus overrides the default audio bus."
msgstr ""
-#: doc/classes/Area.xml:56
+#: doc/classes/Area.xml:58
msgid ""
"The area's gravity intensity (in meters per second squared). This value "
"multiplies the gravity vector. This is useful to alter the force of gravity "
"without altering its direction."
msgstr ""
-#: doc/classes/Area.xml:59 doc/classes/Area2D.xml:61
+#: doc/classes/Area.xml:61 doc/classes/Area2D.xml:63
msgid ""
"The falloff factor for point gravity. The greater the value, the faster "
"gravity decreases with distance."
msgstr ""
-#: doc/classes/Area.xml:62 doc/classes/Area2D.xml:64
+#: doc/classes/Area.xml:64 doc/classes/Area2D.xml:66
msgid ""
"If [code]true[/code], gravity is calculated from a point (set via [member "
"gravity_vec]). See also [member space_override]."
msgstr ""
-#: doc/classes/Area.xml:65 doc/classes/Area2D.xml:67
+#: doc/classes/Area.xml:67 doc/classes/Area2D.xml:69
msgid ""
"The area's gravity vector (not normalized). If gravity is a point (see "
"[member gravity_point]), this will be the point of attraction."
msgstr ""
-#: doc/classes/Area.xml:68
+#: doc/classes/Area.xml:70
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
"velocity lost per second.\n"
@@ -7093,61 +7116,61 @@ msgid ""
"about damping."
msgstr ""
-#: doc/classes/Area.xml:72 doc/classes/Area2D.xml:74
+#: doc/classes/Area.xml:74 doc/classes/Area2D.xml:76
msgid "If [code]true[/code], other monitoring areas can detect this area."
msgstr ""
-#: doc/classes/Area.xml:75 doc/classes/Area2D.xml:77
+#: doc/classes/Area.xml:77 doc/classes/Area2D.xml:79
msgid ""
"If [code]true[/code], the area detects bodies or areas entering and exiting "
"it."
msgstr ""
-#: doc/classes/Area.xml:78 doc/classes/Area2D.xml:80
+#: doc/classes/Area.xml:80 doc/classes/Area2D.xml:82
msgid "The area's priority. Higher priority areas are processed first."
msgstr ""
-#: doc/classes/Area.xml:81
+#: doc/classes/Area.xml:83
msgid ""
"The degree to which this area applies reverb to its associated audio. Ranges "
"from [code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
msgstr ""
-#: doc/classes/Area.xml:84
+#: doc/classes/Area.xml:86
msgid "If [code]true[/code], the area applies reverb to its associated audio."
msgstr ""
-#: doc/classes/Area.xml:87
+#: doc/classes/Area.xml:89
msgid "The reverb bus name to use for this area's associated audio."
msgstr ""
-#: doc/classes/Area.xml:90
+#: doc/classes/Area.xml:92
msgid ""
"The degree to which this area's reverb is a uniform effect. Ranges from "
"[code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
msgstr ""
-#: doc/classes/Area.xml:93 doc/classes/Area2D.xml:83
+#: doc/classes/Area.xml:95 doc/classes/Area2D.xml:85
msgid ""
"Override mode for gravity and damping calculations within this area. See "
"[enum SpaceOverride] for possible values."
msgstr ""
-#: doc/classes/Area.xml:100
+#: doc/classes/Area.xml:102
msgid ""
"Emitted when another Area enters this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
-#: doc/classes/Area.xml:107
+#: doc/classes/Area.xml:109
msgid ""
"Emitted when another Area exits this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
-#: doc/classes/Area.xml:117 doc/classes/Area.xml:130
+#: doc/classes/Area.xml:119 doc/classes/Area.xml:132
msgid ""
"Emitted when one of another Area's [Shape]s enters one of this Area's "
"[Shape]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -7162,7 +7185,7 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:140
+#: doc/classes/Area.xml:142
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] enters this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -7171,7 +7194,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:147
+#: doc/classes/Area.xml:149
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] exits this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -7180,7 +7203,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:157 doc/classes/Area.xml:170
+#: doc/classes/Area.xml:159 doc/classes/Area.xml:172
msgid ""
"Emitted when one of a [PhysicsBody] or [GridMap]'s [Shape]s enters one of "
"this Area's [Shape]s. Requires [member monitoring] to be set to [code]true[/"
@@ -7197,29 +7220,29 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:180 doc/classes/Area2D.xml:170
+#: doc/classes/Area.xml:182 doc/classes/Area2D.xml:172
msgid "This area does not affect gravity/damping."
msgstr ""
-#: doc/classes/Area.xml:183 doc/classes/Area2D.xml:173
+#: doc/classes/Area.xml:185 doc/classes/Area2D.xml:175
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order)."
msgstr ""
-#: doc/classes/Area.xml:186 doc/classes/Area2D.xml:176
+#: doc/classes/Area.xml:188 doc/classes/Area2D.xml:178
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order), ignoring any lower priority areas."
msgstr ""
-#: doc/classes/Area.xml:189 doc/classes/Area2D.xml:179
+#: doc/classes/Area.xml:191 doc/classes/Area2D.xml:181
msgid ""
"This area replaces any gravity/damping, even the defaults, ignoring any "
"lower priority areas."
msgstr ""
-#: doc/classes/Area.xml:192 doc/classes/Area2D.xml:182
+#: doc/classes/Area.xml:194 doc/classes/Area2D.xml:184
msgid ""
"This area replaces any gravity/damping calculated so far (in [member "
"priority] order), but keeps calculating the rest of the areas."
@@ -7256,21 +7279,25 @@ msgstr ""
#: doc/classes/Area2D.xml:19
msgid ""
-"Returns a list of intersecting [Area2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [Area2D]s. The overlapping area's [member "
+"CollisionObject2D.collision_layer] must be part of this area's [member "
+"CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:25
+#: doc/classes/Area2D.xml:26
msgid ""
-"Returns a list of intersecting [PhysicsBody2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody2D]s. The overlapping body's "
+"[member CollisionObject2D.collision_layer] must be part of this area's "
+"[member CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:32
+#: doc/classes/Area2D.xml:34
msgid ""
"If [code]true[/code], the given area overlaps the Area2D.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -7278,7 +7305,7 @@ msgid ""
"the physics step. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:40
+#: doc/classes/Area2D.xml:42
msgid ""
"If [code]true[/code], the given physics body overlaps the Area2D.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -7289,7 +7316,7 @@ msgid ""
"register their tiles with collision shapes as a virtual physics body)."
msgstr ""
-#: doc/classes/Area2D.xml:48
+#: doc/classes/Area2D.xml:50
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
"velocity lost per second.\n"
@@ -7297,14 +7324,14 @@ msgid ""
"details about damping."
msgstr ""
-#: doc/classes/Area2D.xml:58
+#: doc/classes/Area2D.xml:60
msgid ""
"The area's gravity intensity (in pixels per second squared). This value "
"multiplies the gravity vector. This is useful to alter the force of gravity "
"without altering its direction."
msgstr ""
-#: doc/classes/Area2D.xml:70
+#: doc/classes/Area2D.xml:72
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
"velocity lost per second.\n"
@@ -7312,21 +7339,21 @@ msgid ""
"about damping."
msgstr ""
-#: doc/classes/Area2D.xml:90
+#: doc/classes/Area2D.xml:92
msgid ""
"Emitted when another Area2D enters this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-#: doc/classes/Area2D.xml:97
+#: doc/classes/Area2D.xml:99
msgid ""
"Emitted when another Area2D exits this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-#: doc/classes/Area2D.xml:107
+#: doc/classes/Area2D.xml:109
msgid ""
"Emitted when one of another Area2D's [Shape2D]s enters one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -7341,7 +7368,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:120
+#: doc/classes/Area2D.xml:122
msgid ""
"Emitted when one of another Area2D's [Shape2D]s exits one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -7356,7 +7383,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:130
+#: doc/classes/Area2D.xml:132
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] enters this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -7365,7 +7392,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:137
+#: doc/classes/Area2D.xml:139
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] exits this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -7374,7 +7401,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:147
+#: doc/classes/Area2D.xml:149
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s enters one "
"of this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -7393,7 +7420,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:160
+#: doc/classes/Area2D.xml:162
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s exits one of "
"this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -8237,11 +8264,11 @@ msgstr ""
#: doc/classes/ARVRController.xml:76
msgid "Emitted when a button on this controller is pressed."
-msgstr ""
+msgstr "Emitido quando um botão é pressionado neste controle."
#: doc/classes/ARVRController.xml:82
msgid "Emitted when a button on this controller is released."
-msgstr ""
+msgstr "Emitido quando um botão é solto neste controle."
#: doc/classes/ARVRController.xml:88
msgid ""
@@ -8324,7 +8351,7 @@ msgstr ""
#: doc/classes/ARVRInterface.xml:63
msgid "Turns the interface off."
-msgstr ""
+msgstr "Desliga a interface."
#: doc/classes/ARVRInterface.xml:69
msgid "On an AR interface, [code]true[/code] if anchor detection is enabled."
@@ -8652,7 +8679,7 @@ msgstr ""
#: doc/classes/ARVRServer.xml:120
msgid "Removes this interface."
-msgstr ""
+msgstr "Remove esta interface."
#: doc/classes/ARVRServer.xml:127
msgid "Removes this positional tracker."
@@ -8670,11 +8697,11 @@ msgstr ""
#: doc/classes/ARVRServer.xml:143
msgid "Emitted when a new interface has been added."
-msgstr ""
+msgstr "Emitido quando uma nova interface é adicionada."
#: doc/classes/ARVRServer.xml:149
msgid "Emitted when an interface is removed."
-msgstr ""
+msgstr "Emitido quando uma interface é removida."
#: doc/classes/ARVRServer.xml:157
msgid ""
@@ -9398,7 +9425,7 @@ msgstr ""
#: doc/classes/AudioEffectChorus.xml:105 doc/classes/AudioEffectChorus.xml:123
#: doc/classes/AudioEffectChorus.xml:141 doc/classes/AudioEffectChorus.xml:159
msgid "The voice's volume."
-msgstr ""
+msgstr "O volume da voz."
#: doc/classes/AudioEffectChorus.xml:108 doc/classes/AudioEffectChorus.xml:126
#: doc/classes/AudioEffectChorus.xml:144 doc/classes/AudioEffectChorus.xml:162
@@ -9412,7 +9439,7 @@ msgstr ""
#: doc/classes/AudioEffectChorus.xml:168
msgid "The amount of voices in the effect."
-msgstr ""
+msgstr "A quantidade de vozes no efeito."
#: doc/classes/AudioEffectChorus.xml:171
msgid "The effect's processed signal."
@@ -9578,7 +9605,7 @@ msgstr ""
#: doc/classes/AudioEffectDistortion.xml:18
msgid "Distortion power. Value can range from 0 to 1."
-msgstr ""
+msgstr "Poder de distorção. O valor pode variar de 0 a 1."
#: doc/classes/AudioEffectDistortion.xml:21
msgid ""
@@ -9588,7 +9615,7 @@ msgstr ""
#: doc/classes/AudioEffectDistortion.xml:24
msgid "Distortion type."
-msgstr ""
+msgstr "Tipo de distorção."
#: doc/classes/AudioEffectDistortion.xml:27
msgid ""
@@ -10309,7 +10336,7 @@ msgstr ""
#: doc/classes/AudioServer.xml:321
msgid "Emitted when the [AudioBusLayout] changes."
-msgstr ""
+msgstr "Emitido quando o [AudioBusLayout] muda."
#: doc/classes/AudioServer.xml:327
msgid "Two or fewer speakers were detected."
@@ -10510,7 +10537,7 @@ msgstr ""
#: doc/classes/AudioStreamPlayer.xml:48 doc/classes/AudioStreamPlayer2D.xml:44
#: doc/classes/AudioStreamPlayer3D.xml:45
msgid "Stops the audio."
-msgstr ""
+msgstr "Para o áudio."
#: doc/classes/AudioStreamPlayer.xml:54 doc/classes/AudioStreamPlayer2D.xml:56
msgid "If [code]true[/code], audio plays when added to scene tree."
@@ -10536,7 +10563,7 @@ msgstr ""
#: doc/classes/AudioStreamPlayer.xml:66 doc/classes/AudioStreamPlayer2D.xml:68
#: doc/classes/AudioStreamPlayer3D.xml:94
msgid "If [code]true[/code], audio is playing."
-msgstr ""
+msgstr "Se [code]true[/code], o áudio está sendo reproduzido."
#: doc/classes/AudioStreamPlayer.xml:69 doc/classes/AudioStreamPlayer2D.xml:71
msgid "The [AudioStream] object to be played."
@@ -10550,20 +10577,20 @@ msgstr ""
#: doc/classes/AudioStreamPlayer.xml:75
msgid "Volume of sound, in dB."
-msgstr ""
+msgstr "Volume do som, em dB."
#: doc/classes/AudioStreamPlayer.xml:81 doc/classes/AudioStreamPlayer2D.xml:83
#: doc/classes/AudioStreamPlayer3D.xml:112
msgid "Emitted when the audio stops playing."
-msgstr ""
+msgstr "Emitido quando o áudio para de reproduzir."
#: doc/classes/AudioStreamPlayer.xml:87
msgid "The audio will be played only on the first channel."
-msgstr ""
+msgstr "O áudio será tocado somente no primeiro canal."
#: doc/classes/AudioStreamPlayer.xml:90
msgid "The audio will be played on all surround channels."
-msgstr ""
+msgstr "O áudio será reproduzido em todos os canais surround."
#: doc/classes/AudioStreamPlayer.xml:93
msgid ""
@@ -10572,7 +10599,7 @@ msgstr ""
#: doc/classes/AudioStreamPlayer2D.xml:4
msgid "Plays positional sound in 2D space."
-msgstr ""
+msgstr "Reproduz um som posicional em espaço 2D."
#: doc/classes/AudioStreamPlayer2D.xml:7
msgid ""
@@ -10621,7 +10648,7 @@ msgstr ""
#: doc/classes/AudioStreamPlayer3D.xml:4
msgid "Plays positional sound in 3D space."
-msgstr ""
+msgstr "Reproduz um som posicional em espaço 3D."
#: doc/classes/AudioStreamPlayer3D.xml:7
msgid ""
@@ -10874,11 +10901,11 @@ msgstr ""
#: doc/classes/AudioStreamSample.xml:50
msgid "8-bit audio codec."
-msgstr ""
+msgstr "Codec de áudio 8-bits."
#: doc/classes/AudioStreamSample.xml:53
msgid "16-bit audio codec."
-msgstr ""
+msgstr "Codec de áudio 16-bits."
#: doc/classes/AudioStreamSample.xml:56
msgid "Audio is compressed using IMA ADPCM."
@@ -10886,7 +10913,7 @@ msgstr ""
#: doc/classes/AudioStreamSample.xml:59
msgid "Audio does not loop."
-msgstr ""
+msgstr "O áudio não repete."
#: doc/classes/AudioStreamSample.xml:62
msgid ""
@@ -10961,42 +10988,47 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
-"no save path is provided it will try to match the path from the current "
+"no root node is provided, parent of this node will be used as root instead. "
+"If no save path is provided it will try to match the path from the current "
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -11010,62 +11042,62 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
msgid "The rotation of the baked custom sky."
msgstr ""
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -11073,35 +11105,35 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -11109,13 +11141,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -11127,66 +11159,78 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr ""
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
msgid "Baking was successful."
msgstr ""
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
-msgstr ""
+msgstr "Atualmente inutilizado."
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
#, fuzzy
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr "Retorna o arco-tangente dos parâmetros."
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr ""
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:133
+#: doc/classes/BakedLightmap.xml:132
+msgid ""
+"Returns if lightmapper can't be created. Unless you are using a custom "
+"lightmapper, please report this as bug."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:135
+msgid ""
+"There is no root node to start baking from. Either provide [code]from_node[/"
+"code] argument or attach this node to a parent that should be used as root."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:136
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:139
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:142
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -11278,7 +11322,7 @@ msgstr ""
#: doc/classes/BaseButton.xml:62
msgid "[ButtonGroup] associated to the button."
-msgstr ""
+msgstr "[ButtonGroup] associado ao botão."
#: doc/classes/BaseButton.xml:65
msgid ""
@@ -11317,11 +11361,11 @@ msgstr ""
#: doc/classes/BaseButton.xml:85
msgid "Emitted when the button starts being held down."
-msgstr ""
+msgstr "Emitido quando um botão começa a ser pressionado."
#: doc/classes/BaseButton.xml:90
msgid "Emitted when the button stops being held down."
-msgstr ""
+msgstr "Emitido quando um botão para de ser pressionado."
#: doc/classes/BaseButton.xml:95
msgid ""
@@ -11643,8 +11687,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -11926,7 +11973,7 @@ msgstr ""
#: doc/classes/Button.xml:4
msgid "Standard themed Button."
-msgstr ""
+msgstr "Botão temático padrão."
#: doc/classes/Button.xml:7
msgid ""
@@ -11995,15 +12042,15 @@ msgstr ""
#: doc/classes/Button.xml:51
msgid "Align the text to the left."
-msgstr ""
+msgstr "Alinha o texto pela esquerda."
#: doc/classes/Button.xml:54
msgid "Align the text to the center."
-msgstr ""
+msgstr "Alinha o texto pelo centro."
#: doc/classes/Button.xml:57
msgid "Align the text to the right."
-msgstr ""
+msgstr "Alinha o texto pela direita."
#: doc/classes/Button.xml:62
msgid "[StyleBox] used when the [Button] is disabled."
@@ -12022,39 +12069,46 @@ msgstr ""
#: doc/classes/Button.xml:71
msgid "Default text [Color] of the [Button]."
-msgstr ""
+msgstr "[Color] do texto padrão do [Button]."
#: doc/classes/Button.xml:74
msgid "Text [Color] used when the [Button] is disabled."
msgstr ""
#: doc/classes/Button.xml:77
-msgid "Text [Color] used when the [Button] is being hovered."
+msgid ""
+"Text [Color] used when the [Button] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/Button.xml:80
-msgid "Text [Color] used when the [Button] is being pressed."
+msgid "Text [Color] used when the [Button] is being hovered."
msgstr ""
#: doc/classes/Button.xml:83
-msgid "[StyleBox] used when the [Button] is being hovered."
+msgid "Text [Color] used when the [Button] is being pressed."
msgstr ""
#: doc/classes/Button.xml:86
-msgid "The horizontal space between [Button]'s icon and text."
+msgid "[StyleBox] used when the [Button] is being hovered."
msgstr ""
#: doc/classes/Button.xml:89
-msgid "Default [StyleBox] for the [Button]."
+msgid "The horizontal space between [Button]'s icon and text."
msgstr ""
#: doc/classes/Button.xml:92
+msgid "Default [StyleBox] for the [Button]."
+msgstr ""
+
+#: doc/classes/Button.xml:95
msgid "[StyleBox] used when the [Button] is being pressed."
msgstr ""
#: doc/classes/ButtonGroup.xml:4
msgid "Group of Buttons."
-msgstr ""
+msgstr "Grupo de botões."
#: doc/classes/ButtonGroup.xml:7
msgid ""
@@ -12075,7 +12129,7 @@ msgstr ""
#: doc/classes/ButtonGroup.xml:33
msgid "Emitted when one of the buttons of the group is pressed."
-msgstr ""
+msgstr "Emitido quando um dos botões do grupo é pressionado."
#: doc/classes/Camera.xml:4
msgid "Camera node, displays from a point of view."
@@ -12362,7 +12416,7 @@ msgstr ""
#: doc/classes/Camera2D.xml:4
msgid "Camera node for 2D scenes."
-msgstr ""
+msgstr "Nó de câmera para cenas 2D."
#: doc/classes/Camera2D.xml:7
msgid ""
@@ -12407,7 +12461,7 @@ msgstr ""
#: doc/classes/Camera2D.xml:38
msgid "Returns the camera position."
-msgstr ""
+msgstr "Retorna a posição da câmera."
#: doc/classes/Camera2D.xml:44
msgid ""
@@ -12516,6 +12570,7 @@ msgstr ""
msgid ""
"If [code]true[/code], draws the camera's limits rectangle in the editor."
msgstr ""
+"Se [code]true[/code], desenha o retângulo dos limites da câmera no editor."
#: doc/classes/Camera2D.xml:126
msgid ""
@@ -12682,7 +12737,7 @@ msgstr ""
#: doc/classes/CameraFeed.xml:54
msgid "Unspecified position."
-msgstr ""
+msgstr "Posição não especificada."
#: doc/classes/CameraFeed.xml:57
msgid "Camera is mounted at the front of the device."
@@ -12722,7 +12777,7 @@ msgstr ""
#: doc/classes/CameraServer.xml:43
msgid "Removes a [CameraFeed]."
-msgstr ""
+msgstr "Remove uma [CameraFeed]."
#: doc/classes/CameraServer.xml:51
msgid "Emitted when a [CameraFeed] is added (e.g. webcam is plugged in)."
@@ -12777,7 +12832,7 @@ msgstr ""
#: doc/classes/CanvasItem.xml:4
msgid "Base class of anything 2D."
-msgstr ""
+msgstr "Classe base de qualquer coisa 2D."
#: doc/classes/CanvasItem.xml:7
msgid ""
@@ -12840,7 +12895,7 @@ msgstr ""
#: doc/classes/CanvasItem.xml:57
msgid "Draws a colored circle."
-msgstr ""
+msgstr "Desenha um círculo colorido."
#: doc/classes/CanvasItem.xml:69
msgid "Draws a colored polygon of any amount of points, convex or concave."
@@ -12989,7 +13044,7 @@ msgstr ""
#: doc/classes/CanvasItem.xml:287
msgid "Returns the global position of the mouse."
-msgstr ""
+msgstr "Retorna a posição global do mouse."
#: doc/classes/CanvasItem.xml:293
msgid "Returns the global transform matrix of this item."
@@ -13102,7 +13157,7 @@ msgstr ""
#: doc/classes/CanvasItem.xml:418
msgid "The color applied to textures on this [CanvasItem]."
-msgstr ""
+msgstr "A cor aplicada às texturas neste [CanvasItem]."
#: doc/classes/CanvasItem.xml:421
msgid ""
@@ -13112,11 +13167,11 @@ msgstr ""
#: doc/classes/CanvasItem.xml:424
msgid "If [code]true[/code], the object draws behind its parent."
-msgstr ""
+msgstr "Se [code]true[/code], o objeto é desenhado por trás de seu pai."
#: doc/classes/CanvasItem.xml:427
msgid "If [code]true[/code], the object draws on top of its parent."
-msgstr ""
+msgstr "Se [code]true[/code], o objeto é desenhado por cima de seu pai."
#: doc/classes/CanvasItem.xml:430
msgid ""
@@ -13215,7 +13270,7 @@ msgstr ""
#: doc/classes/CanvasItemMaterial.xml:4
msgid "A material for [CanvasItem]s."
-msgstr ""
+msgstr "Um material para [CanvasItem]s."
#: doc/classes/CanvasItemMaterial.xml:7
msgid ""
@@ -13403,11 +13458,11 @@ msgstr ""
#: doc/classes/CapsuleShape.xml:4 doc/classes/CapsuleShape.xml:7
msgid "Capsule shape for collisions."
-msgstr ""
+msgstr "Formato de cápsula para colisões."
#: doc/classes/CapsuleShape.xml:16 doc/classes/CapsuleShape2D.xml:15
msgid "The capsule's height."
-msgstr ""
+msgstr "A altura da cápsula."
#: doc/classes/CapsuleShape.xml:19 doc/classes/CapsuleShape2D.xml:18
msgid "The capsule's radius."
@@ -13415,11 +13470,11 @@ msgstr ""
#: doc/classes/CapsuleShape2D.xml:4 doc/classes/CapsuleShape2D.xml:7
msgid "Capsule shape for 2D collisions."
-msgstr ""
+msgstr "Formato de cápsula para colisões 2D."
#: doc/classes/CenterContainer.xml:4
msgid "Keeps children controls centered."
-msgstr ""
+msgstr "Mantém os controles dos filhos centralizados."
#: doc/classes/CenterContainer.xml:7
msgid ""
@@ -13542,80 +13597,96 @@ msgstr ""
msgid "The check icon to display when the [CheckBox] is checked."
msgstr ""
-#: doc/classes/CheckBox.xml:30
+#: doc/classes/CheckBox.xml:28
+msgid "The check icon to display when the [CheckBox] is checked and disabled."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:31
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is disabled."
msgstr ""
-#: doc/classes/CheckBox.xml:33
+#: doc/classes/CheckBox.xml:34
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is focused."
msgstr ""
-#: doc/classes/CheckBox.xml:36
+#: doc/classes/CheckBox.xml:37
msgid "The [Font] to use for the [CheckBox] text."
msgstr ""
-#: doc/classes/CheckBox.xml:39
+#: doc/classes/CheckBox.xml:40
msgid "The [CheckBox] text's font color."
msgstr ""
-#: doc/classes/CheckBox.xml:42
+#: doc/classes/CheckBox.xml:43
msgid "The [CheckBox] text's font color when it's disabled."
msgstr ""
-#: doc/classes/CheckBox.xml:45
+#: doc/classes/CheckBox.xml:46
+msgid ""
+"The [CheckBox] text's font color when it's focused. Only replaces the normal "
+"text color of the checkbox. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:49
msgid "The [CheckBox] text's font color when it's hovered."
msgstr ""
-#: doc/classes/CheckBox.xml:48
+#: doc/classes/CheckBox.xml:52
msgid "The [CheckBox] text's font color when it's hovered and pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:51
+#: doc/classes/CheckBox.xml:55
msgid "The [CheckBox] text's font color when it's pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:54
+#: doc/classes/CheckBox.xml:58
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered."
msgstr ""
-#: doc/classes/CheckBox.xml:57
+#: doc/classes/CheckBox.xml:61
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered and "
"pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:60
+#: doc/classes/CheckBox.xml:64
msgid "The separation between the check icon and the text (in pixels)."
msgstr ""
-#: doc/classes/CheckBox.xml:63 doc/classes/CheckButton.xml:58
+#: doc/classes/CheckBox.xml:67 doc/classes/CheckButton.xml:61
msgid "The [StyleBox] to display as a background."
msgstr ""
-#: doc/classes/CheckBox.xml:66
+#: doc/classes/CheckBox.xml:70
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:69
+#: doc/classes/CheckBox.xml:73
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is checked."
msgstr ""
-#: doc/classes/CheckBox.xml:74
+#: doc/classes/CheckBox.xml:78
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is unchecked."
msgstr ""
-#: doc/classes/CheckBox.xml:79
+#: doc/classes/CheckBox.xml:83
msgid "The check icon to display when the [CheckBox] is unchecked."
msgstr ""
+#: doc/classes/CheckBox.xml:86
+msgid ""
+"The check icon to display when the [CheckBox] is unchecked and disabled."
+msgstr ""
+
#: doc/classes/CheckButton.xml:4
msgid "Checkable button. See also [CheckBox]."
msgstr ""
@@ -13659,56 +13730,63 @@ msgid "The [CheckButton] text's font color when it's disabled."
msgstr ""
#: doc/classes/CheckButton.xml:40
-msgid "The [CheckButton] text's font color when it's hovered."
+msgid ""
+"The [CheckButton] text's font color when it's focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/CheckButton.xml:43
-msgid "The [CheckButton] text's font color when it's hovered and pressed."
+msgid "The [CheckButton] text's font color when it's hovered."
msgstr ""
#: doc/classes/CheckButton.xml:46
-msgid "The [CheckButton] text's font color when it's pressed."
+msgid "The [CheckButton] text's font color when it's hovered and pressed."
msgstr ""
#: doc/classes/CheckButton.xml:49
+msgid "The [CheckButton] text's font color when it's pressed."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:52
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered."
msgstr ""
-#: doc/classes/CheckButton.xml:52
+#: doc/classes/CheckButton.xml:55
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered "
"and pressed."
msgstr ""
-#: doc/classes/CheckButton.xml:55
+#: doc/classes/CheckButton.xml:58
msgid "The separation between the toggle icon and the text (in pixels)."
msgstr ""
-#: doc/classes/CheckButton.xml:61
+#: doc/classes/CheckButton.xml:64
msgid "The icon to display when the [CheckButton] is unchecked."
msgstr ""
-#: doc/classes/CheckButton.xml:64
+#: doc/classes/CheckButton.xml:67
msgid "The icon to display when the [CheckButton] is unchecked and disabled."
msgstr ""
-#: doc/classes/CheckButton.xml:67
+#: doc/classes/CheckButton.xml:70
msgid "The icon to display when the [CheckButton] is checked."
msgstr ""
-#: doc/classes/CheckButton.xml:70
+#: doc/classes/CheckButton.xml:73
msgid "The icon to display when the [CheckButton] is checked and disabled."
msgstr ""
-#: doc/classes/CheckButton.xml:73
+#: doc/classes/CheckButton.xml:76
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is pressed."
msgstr ""
#: doc/classes/CircleShape2D.xml:4
msgid "Circular shape for 2D collisions."
-msgstr ""
+msgstr "Formato circular para colisões 2D."
#: doc/classes/CircleShape2D.xml:7
msgid ""
@@ -13845,7 +13923,7 @@ msgstr ""
#: doc/classes/ClassDB.xml:162
msgid "Returns the names of all the classes available."
-msgstr ""
+msgstr "Retorna os nomes de todas as classes disponíveis."
#: doc/classes/ClassDB.xml:169
msgid ""
@@ -13950,7 +14028,7 @@ msgstr ""
#: doc/classes/CollisionObject.xml:4
msgid "Base node for collision objects."
-msgstr ""
+msgstr "Nó base para objetos de colisão."
#: doc/classes/CollisionObject.xml:7
msgid ""
@@ -13990,7 +14068,7 @@ msgstr ""
#: doc/classes/CollisionObject.xml:47 doc/classes/CollisionObject2D.xml:45
msgid "Returns the object's [RID]."
-msgstr ""
+msgstr "Retorna o [RID] do objeto."
#: doc/classes/CollisionObject.xml:53 doc/classes/CollisionObject2D.xml:58
msgid ""
@@ -14121,7 +14199,7 @@ msgstr ""
#: doc/classes/CollisionObject2D.xml:4
msgid "Base node for 2D collision objects."
-msgstr ""
+msgstr "Nó base para objetos de colisão 2D."
#: doc/classes/CollisionObject2D.xml:7
msgid ""
@@ -14259,7 +14337,7 @@ msgstr ""
#: doc/classes/CollisionPolygon.xml:18
msgid "If [code]true[/code], no collision will be produced."
-msgstr ""
+msgstr "Se [code]true[/code], não se produzirá colisões."
#: doc/classes/CollisionPolygon.xml:21
msgid ""
@@ -14279,7 +14357,7 @@ msgstr ""
#: doc/classes/CollisionPolygon2D.xml:4
msgid "Defines a 2D collision polygon."
-msgstr ""
+msgstr "Define um polígono de colisão 2D."
#: doc/classes/CollisionPolygon2D.xml:7
msgid ""
@@ -14482,10 +14560,10 @@ msgid ""
"var c = Color(274) # Similar to Color(0.0, 0.0, 0.004, 0.07)\n"
"[/codeblock]"
msgstr ""
-"Constrói uma cor a partir de uma cor existente, mas com um valor alfa "
-"customizado.\n"
+"Constrói uma cor a partir de um inteiro 32-bit no formato RGBA (cada byte "
+"representa um canal de cor).\n"
"[codeblock]\n"
-"var red = Color(Color.red, 0.5) # vermelho 50% transparente.\n"
+"var c = Color(274) # Semelhante a Color(0.0, 0.0, 0.004, 0.07)\n"
"[/codeblock]"
#: doc/classes/Color.xml:49
@@ -14766,7 +14844,7 @@ msgstr ""
#: doc/classes/Color.xml:298
msgid "Black color."
-msgstr ""
+msgstr "Cor Preta."
#: doc/classes/Color.xml:301
msgid "Blanche almond color."
@@ -14774,7 +14852,7 @@ msgstr ""
#: doc/classes/Color.xml:304
msgid "Blue color."
-msgstr ""
+msgstr "Cor azul."
#: doc/classes/Color.xml:307
msgid "Blue violet color."
@@ -14782,7 +14860,7 @@ msgstr ""
#: doc/classes/Color.xml:310
msgid "Brown color."
-msgstr ""
+msgstr "Cor marrom."
#: doc/classes/Color.xml:313
msgid "Burly wood color."
@@ -14930,7 +15008,7 @@ msgstr ""
#: doc/classes/Color.xml:421
msgid "Gold color."
-msgstr ""
+msgstr "Cor dourada."
#: doc/classes/Color.xml:424
msgid "Goldenrod color."
@@ -14938,11 +15016,11 @@ msgstr ""
#: doc/classes/Color.xml:427
msgid "Gray color."
-msgstr ""
+msgstr "Cor cinza."
#: doc/classes/Color.xml:430
msgid "Green color."
-msgstr ""
+msgstr "Cor verde."
#: doc/classes/Color.xml:433
msgid "Green yellow color."
@@ -14990,7 +15068,7 @@ msgstr ""
#: doc/classes/Color.xml:466
msgid "Light blue color."
-msgstr ""
+msgstr "Cor azul claro."
#: doc/classes/Color.xml:469
msgid "Light coral color."
@@ -15054,7 +15132,7 @@ msgstr ""
#: doc/classes/Color.xml:514
msgid "Magenta color."
-msgstr ""
+msgstr "Cor magenta."
#: doc/classes/Color.xml:517
msgid "Maroon color."
@@ -15174,7 +15252,7 @@ msgstr ""
#: doc/classes/Color.xml:604
msgid "Pink color."
-msgstr ""
+msgstr "Cor rosa."
#: doc/classes/Color.xml:607
msgid "Plum color."
@@ -15186,7 +15264,7 @@ msgstr ""
#: doc/classes/Color.xml:613
msgid "Purple color."
-msgstr ""
+msgstr "Cor roxa."
#: doc/classes/Color.xml:616
msgid "Rebecca purple color."
@@ -15194,7 +15272,7 @@ msgstr ""
#: doc/classes/Color.xml:619
msgid "Red color."
-msgstr ""
+msgstr "Cor vermelha."
#: doc/classes/Color.xml:622
msgid "Rosy brown color."
@@ -15230,7 +15308,7 @@ msgstr ""
#: doc/classes/Color.xml:646
msgid "Silver color."
-msgstr ""
+msgstr "Cor prata."
#: doc/classes/Color.xml:649
msgid "Sky blue color."
@@ -15306,7 +15384,7 @@ msgstr ""
#: doc/classes/Color.xml:703
msgid "White color."
-msgstr ""
+msgstr "Cor branca."
#: doc/classes/Color.xml:706
msgid "White smoke color."
@@ -15314,7 +15392,7 @@ msgstr ""
#: doc/classes/Color.xml:709
msgid "Yellow color."
-msgstr ""
+msgstr "Cor amarela."
#: doc/classes/Color.xml:712
msgid "Yellow green color."
@@ -15389,7 +15467,7 @@ msgstr ""
#: doc/classes/ColorPicker.xml:65
msgid "Emitted when the color is changed."
-msgstr ""
+msgstr "Emitido quando a cor muda."
#: doc/classes/ColorPicker.xml:71
msgid "Emitted when a preset is added."
@@ -15474,7 +15552,7 @@ msgstr ""
#: doc/classes/ColorPickerButton.xml:44
msgid "Emitted when the color changes."
-msgstr ""
+msgstr "Emitido quando a cor muda."
#: doc/classes/ColorPickerButton.xml:49
msgid ""
@@ -15484,7 +15562,7 @@ msgstr ""
#: doc/classes/ColorPickerButton.xml:54
msgid "Emitted when the [ColorPicker] is closed."
-msgstr ""
+msgstr "Emitido quando o [ColorPicker] é fechado."
#: doc/classes/ColorPickerButton.xml:62
msgid "The background of the color preview rect on the button."
@@ -15514,32 +15592,39 @@ msgid "Text [Color] used when the [ColorPickerButton] is disabled."
msgstr ""
#: doc/classes/ColorPickerButton.xml:80
-msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
+msgid ""
+"Text [Color] used when the [ColorPickerButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/ColorPickerButton.xml:83
-msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
+msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
msgstr ""
#: doc/classes/ColorPickerButton.xml:86
-msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
+msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
msgstr ""
#: doc/classes/ColorPickerButton.xml:89
-msgid "The horizontal space between [ColorPickerButton]'s icon and text."
+msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
msgstr ""
#: doc/classes/ColorPickerButton.xml:92
-msgid "Default [StyleBox] for the [ColorPickerButton]."
+msgid "The horizontal space between [ColorPickerButton]'s icon and text."
msgstr ""
#: doc/classes/ColorPickerButton.xml:95
+msgid "Default [StyleBox] for the [ColorPickerButton]."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:98
msgid "[StyleBox] used when the [ColorPickerButton] is being pressed."
msgstr ""
#: doc/classes/ColorRect.xml:4
msgid "Colored rectangle."
-msgstr ""
+msgstr "Retângulo colorido."
#: doc/classes/ColorRect.xml:7
msgid ""
@@ -15858,7 +15943,7 @@ msgstr ""
#: doc/classes/Container.xml:4
msgid "Base node for containers."
-msgstr ""
+msgstr "Nó base para os containers."
#: doc/classes/Container.xml:7
msgid ""
@@ -15881,7 +15966,7 @@ msgstr ""
#: doc/classes/Container.xml:31
msgid "Emitted when sorting the children is needed."
-msgstr ""
+msgstr "Emitido quando se é necessário organizar os filhos."
#: doc/classes/Container.xml:37
msgid ""
@@ -16295,7 +16380,7 @@ msgstr ""
#: doc/classes/Control.xml:353
msgid "Returns the rotation (in radians)."
-msgstr ""
+msgstr "Retorna a rotação (em radianos)."
#: doc/classes/Control.xml:361
msgid ""
@@ -16815,6 +16900,8 @@ msgid ""
"The node's global position, relative to the world (usually to the top-left "
"corner of the window)."
msgstr ""
+"A posição global do nó, em relação ao mundo (geralmente no canto superior "
+"esquerdo da janela)."
#: doc/classes/Control.xml:780
msgid ""
@@ -16899,19 +16986,19 @@ msgstr ""
#: doc/classes/Control.xml:815
msgid "Emitted when the node gains keyboard focus."
-msgstr ""
+msgstr "Emitido quando o nó ganha foco do teclado."
#: doc/classes/Control.xml:820
msgid "Emitted when the node loses keyboard focus."
-msgstr ""
+msgstr "Emitido quando o nó perde foco do teclado."
#: doc/classes/Control.xml:826
msgid "Emitted when the node receives an [InputEvent]."
-msgstr ""
+msgstr "Emitido quando o nó recebe um [InputEvent]."
#: doc/classes/Control.xml:831
msgid "Emitted when the node's minimum size changes."
-msgstr ""
+msgstr "Emitido quando o tamanho mínimo do nó muda."
#: doc/classes/Control.xml:836
msgid "Emitted when a modal [Control] is closed. See [method show_modal]."
@@ -16938,7 +17025,7 @@ msgstr ""
#: doc/classes/Control.xml:853
msgid "Emitted when the control changes size."
-msgstr ""
+msgstr "Emitido quando o controle muda de tamanho."
#: doc/classes/Control.xml:858
msgid ""
@@ -16968,11 +17055,11 @@ msgstr ""
#: doc/classes/Control.xml:876
msgid "Sent when the mouse pointer enters the node."
-msgstr ""
+msgstr "Enviado quando o ponteiro do mouse entra no nó."
#: doc/classes/Control.xml:879
msgid "Sent when the mouse pointer exits the node."
-msgstr ""
+msgstr "Enviado quando o ponteiro do mouse sai do nó."
#: doc/classes/Control.xml:882
msgid "Sent when the node grabs focus."
@@ -17220,19 +17307,19 @@ msgstr ""
#: doc/classes/Control.xml:999
msgid "The control will be resized to its minimum size."
-msgstr ""
+msgstr "O controle será redimensionado ao seu tamanho mínimo."
#: doc/classes/Control.xml:1002
msgid "The control's width will not change."
-msgstr ""
+msgstr "A largura do controle não irá mudar."
#: doc/classes/Control.xml:1005
msgid "The control's height will not change."
-msgstr ""
+msgstr "A altura do controle não irá mudar."
#: doc/classes/Control.xml:1008
msgid "The control's size will not change."
-msgstr ""
+msgstr "O tamanho do controle não irá mudar."
#: doc/classes/Control.xml:1011
msgid ""
@@ -17418,7 +17505,7 @@ msgstr ""
#: doc/classes/CPUParticles.xml:52 doc/classes/CPUParticles2D.xml:53
msgid "Restarts the particle emitter."
-msgstr ""
+msgstr "Reinicia o emissor de partículas."
#: doc/classes/CPUParticles.xml:60 doc/classes/CPUParticles2D.xml:61
msgid "Sets the base value of the parameter specified by [enum Parameter]."
@@ -17492,7 +17579,7 @@ msgstr ""
#: doc/classes/CPUParticles.xml:121 doc/classes/CPUParticles2D.xml:122
#: doc/classes/ParticlesMaterial.xml:106
msgid "Particle animation speed."
-msgstr ""
+msgstr "Velocidade da animação das partículas."
#: doc/classes/CPUParticles.xml:124 doc/classes/CPUParticles2D.xml:125
msgid "Each particle's animation speed will vary along this [Curve]."
@@ -17903,15 +17990,17 @@ msgstr ""
#: doc/classes/CPUParticles.xml:346 doc/classes/CPUParticles2D.xml:326
msgid "Use with [method set_particle_flag] to set [member flag_align_y]."
-msgstr ""
+msgstr "Use com [method set_particle_flag] para definir [member flag_align_y]."
#: doc/classes/CPUParticles.xml:349
msgid "Use with [method set_particle_flag] to set [member flag_rotate_y]."
msgstr ""
+"Use com [method set_particle_flag] para definir [member flag_rotate_y]."
#: doc/classes/CPUParticles.xml:352
msgid "Use with [method set_particle_flag] to set [member flag_disable_z]."
msgstr ""
+"Use com [method set_particle_flag] para definir [member flag_disable_z]."
#: doc/classes/CPUParticles.xml:355 doc/classes/CPUParticles2D.xml:335
#: doc/classes/GeometryInstance.xml:109 doc/classes/ParticlesMaterial.xml:307
@@ -17958,7 +18047,7 @@ msgstr ""
#: doc/classes/CPUParticles2D.xml:4
msgid "CPU-based 2D particle emitter."
-msgstr ""
+msgstr "Emissor de partículas 2D baseado em CPU."
#: doc/classes/CPUParticles2D.xml:7
msgid ""
@@ -18039,6 +18128,8 @@ msgstr ""
#: doc/classes/CPUParticles2D.xml:276 doc/classes/Particles2D.xml:77
msgid "Particle texture. If [code]null[/code], particles will be squares."
msgstr ""
+"A textura das partículas. Se [code]null[/code], as partículas serão "
+"quadrados."
#: doc/classes/CPUParticles2D.xml:329 doc/classes/CPUParticles2D.xml:332
msgid "Present for consistency with 3D particle nodes, not used in 2D."
@@ -18052,7 +18143,7 @@ msgstr ""
#: doc/classes/CPUParticles2D.xml:344
msgid "Particles will be emitted in the area of a rectangle."
-msgstr ""
+msgstr "As partículas serão emitidas na área do retângulo."
#: doc/classes/Crypto.xml:4
msgid "Access to advanced cryptographic functionalities."
@@ -18284,7 +18375,7 @@ msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml:18
msgid "The height of the cylinder."
-msgstr ""
+msgstr "A altura do cilindro."
#: modules/csg/doc_classes/CSGCylinder.xml:21
msgid "The material used to render the cylinder."
@@ -18712,7 +18803,7 @@ msgstr ""
#: doc/classes/CubeMap.xml:15
msgid "Returns the [CubeMap]'s height."
-msgstr ""
+msgstr "Retorna a altura do [CubeMap]."
#: doc/classes/CubeMap.xml:22
msgid ""
@@ -18926,7 +19017,7 @@ msgstr ""
#: doc/classes/Curve.xml:4
msgid "A mathematic curve."
-msgstr ""
+msgstr "Uma curva matemática."
#: doc/classes/Curve.xml:7
msgid ""
@@ -18957,7 +19048,7 @@ msgstr ""
#: doc/classes/Curve.xml:38 doc/classes/Curve2D.xml:27
#: doc/classes/Curve3D.xml:27
msgid "Removes all points from the curve."
-msgstr ""
+msgstr "Remove todos os pontos da curva."
#: doc/classes/Curve.xml:44 doc/classes/Curve2D.xml:61
#: doc/classes/Curve3D.xml:74
@@ -19354,7 +19445,7 @@ msgstr ""
#: doc/classes/CurveTexture.xml:4
msgid "A texture that shows a curve."
-msgstr ""
+msgstr "Uma textura que exibe uma curva."
#: doc/classes/CurveTexture.xml:7
msgid ""
@@ -19368,7 +19459,7 @@ msgstr ""
#: doc/classes/CurveTexture.xml:18
msgid "The width of the texture."
-msgstr ""
+msgstr "A largura de uma textura."
#: doc/classes/CylinderMesh.xml:4
msgid "Class representing a cylindrical [PrimitiveMesh]."
@@ -19420,7 +19511,7 @@ msgstr ""
#: doc/classes/CylinderShape.xml:18
msgid "The cylinder's height."
-msgstr ""
+msgstr "A altura do cilindro."
#: doc/classes/CylinderShape.xml:21
msgid "The cylinder's radius."
@@ -20155,7 +20246,7 @@ msgstr ""
#: doc/classes/DynamicFont.xml:105
msgid "The font size in pixels."
-msgstr ""
+msgstr "O tamanho da fonte em pixels."
#: doc/classes/DynamicFont.xml:108
msgid ""
@@ -20538,15 +20629,15 @@ msgstr ""
#: doc/classes/EditorFileDialog.xml:72
msgid "Emitted when a directory is selected."
-msgstr ""
+msgstr "Emitido quando um diretório é selecionado."
#: doc/classes/EditorFileDialog.xml:78
msgid "Emitted when a file is selected."
-msgstr ""
+msgstr "Emitido quando um arquivo é selecionado."
#: doc/classes/EditorFileDialog.xml:84
msgid "Emitted when multiple files are selected."
-msgstr ""
+msgstr "Emitido quando múltiplos arquivos são selecionados."
#: doc/classes/EditorFileDialog.xml:90
msgid ""
@@ -20768,7 +20859,8 @@ msgid ""
"get_resource_type]. They may optionally specify some import presets that "
"affect the import process. EditorImportPlugins are responsible for creating "
"the resources and saving them in the [code].import[/code] directory (see "
-"[member ProjectSettings.application/config/project_data_dir_name]).\n"
+"[member ProjectSettings.application/config/"
+"use_hidden_project_data_directory]).\n"
"Below is an example EditorImportPlugin that imports a [Mesh] from a file "
"with the extension \".special\" or \".spec\":\n"
"[codeblock]\n"
@@ -20895,7 +20987,7 @@ msgstr ""
msgid ""
"Gets the extension used to save this resource in the [code].import[/code] "
"directory (see [member ProjectSettings.application/config/"
-"project_data_dir_name])."
+"use_hidden_project_data_directory])."
msgstr ""
#: doc/classes/EditorImportPlugin.xml:130
@@ -20945,7 +21037,7 @@ msgstr ""
#: doc/classes/EditorInspector.xml:34
msgid "Emitted when a property is edited in the inspector."
-msgstr ""
+msgstr "Emitido quando uma propriedade é editada no inspetor."
#: doc/classes/EditorInspector.xml:40
msgid ""
@@ -20956,7 +21048,7 @@ msgstr ""
#: doc/classes/EditorInspector.xml:46
msgid "Emitted when a property is selected in the inspector."
-msgstr ""
+msgstr "Emitido quando uma propriedade é selecionada no inspetor."
#: doc/classes/EditorInspector.xml:53
msgid ""
@@ -20968,7 +21060,7 @@ msgstr ""
#: doc/classes/EditorInspector.xml:61
msgid "Emitted when a resource is selected in the inspector."
-msgstr ""
+msgstr "Emitido quando um recurso é selecionado no inspetor."
#: doc/classes/EditorInspector.xml:66
msgid ""
@@ -21189,7 +21281,7 @@ msgstr ""
#: doc/classes/EditorInterface.xml:164
msgid "Plays the currently active scene."
-msgstr ""
+msgstr "Reproduz a cena atualmente ativa."
#: doc/classes/EditorInterface.xml:171
msgid "Plays the scene specified by its filepath."
@@ -21197,7 +21289,7 @@ msgstr ""
#: doc/classes/EditorInterface.xml:177
msgid "Plays the main scene."
-msgstr ""
+msgstr "Reproduz a cena principal."
#: doc/classes/EditorInterface.xml:184
msgid "Reloads the scene at the given path."
@@ -21211,7 +21303,7 @@ msgstr ""
#: doc/classes/EditorInterface.xml:198
msgid "Saves the scene as a file at [code]path[/code]."
-msgstr ""
+msgstr "Salva a cena como um arquivo em [code]path[/code]."
#: doc/classes/EditorInterface.xml:205
msgid ""
@@ -21736,6 +21828,8 @@ msgid ""
"Emitted when user closes a scene. The argument is file path to a closed "
"scene."
msgstr ""
+"Emitido quando o usuário fecha uma cena. O argumento é um caminho de arquivo "
+"para uma cena fechada."
#: doc/classes/EditorPlugin.xml:553
msgid "Represents the size of the [enum DockSlot] enum."
@@ -21842,7 +21936,7 @@ msgstr ""
#: doc/classes/EditorProperty.xml:107
msgid "Emitted when a property was checked. Used internally."
-msgstr ""
+msgstr "Emitido quando uma propriedade é checada. Usado internamente."
#: doc/classes/EditorProperty.xml:113
msgid ""
@@ -21861,7 +21955,7 @@ msgstr ""
#: doc/classes/EditorProperty.xml:134
msgid "Emitted when selected. Used internally."
-msgstr ""
+msgstr "Emitido quando selecionado. Usado internamente."
#: doc/classes/EditorResourcePicker.xml:4
msgid "Godot editor's control for selecting [Resource] type properties."
@@ -21931,8 +22025,11 @@ msgstr ""
msgid "Emitted when the value of the edited resource was changed."
msgstr ""
-#: doc/classes/EditorResourcePicker.xml:89
-msgid "Emitted when the resource value was set and user clicked to edit it."
+#: doc/classes/EditorResourcePicker.xml:90
+msgid ""
+"Emitted when the resource value was set and user clicked to edit it. When "
+"[code]edit[/code] is [code]true[/code], the signal was caused by the context "
+"menu \"Edit\" option."
msgstr ""
#: doc/classes/EditorResourcePreview.xml:4
@@ -22223,7 +22320,7 @@ msgstr ""
#: doc/classes/EditorSelection.xml:24
msgid "Clear the selection."
-msgstr ""
+msgstr "Limpa a seleção."
#: doc/classes/EditorSelection.xml:30
msgid "Gets the list of selected nodes."
@@ -22242,7 +22339,7 @@ msgstr ""
#: doc/classes/EditorSelection.xml:50
msgid "Emitted when the selection changes."
-msgstr ""
+msgstr "Emitido quando a seleção muda."
#: doc/classes/EditorSettings.xml:4
msgid "Object that holds the project-independent editor settings."
@@ -22358,7 +22455,7 @@ msgstr ""
#: doc/classes/EditorSettings.xml:121
msgid "Sets the list of favorite files and directories for this project."
-msgstr ""
+msgstr "Define a lista de arquivos e diretórios favoritos para este projeto."
#: doc/classes/EditorSettings.xml:130
msgid ""
@@ -22873,7 +22970,7 @@ msgstr ""
#: doc/classes/Engine.xml:70
msgid "Returns Godot license text."
-msgstr ""
+msgstr "Retorna o texto da licença do Godot."
#: doc/classes/Engine.xml:76
msgid "Returns the main loop object (see [MainLoop] and [SceneTree])."
@@ -23121,7 +23218,7 @@ msgstr ""
#: doc/classes/Environment.xml:55
msgid "The ambient light's [Color]."
-msgstr ""
+msgstr "A [Color] da luz do ambiente."
#: doc/classes/Environment.xml:58
msgid ""
@@ -23774,7 +23871,7 @@ msgstr "Retorna a tangente do parâmetro."
#: doc/classes/ExternalTexture.xml:23
msgid "External texture size."
-msgstr ""
+msgstr "Tamanho da textura externa."
#: doc/classes/File.xml:4
msgid "Type to handle file reading and writing operations."
@@ -23928,7 +24025,7 @@ msgstr ""
#: doc/classes/File.xml:138
msgid "Returns the size of the file in bytes."
-msgstr ""
+msgstr "Retorna o tamanho do arquivo em bytes."
#: doc/classes/File.xml:144
msgid ""
@@ -24296,7 +24393,7 @@ msgstr ""
#: doc/classes/FileDialog.xml:85
msgid "Emitted when the user selects a directory."
-msgstr ""
+msgstr "Emitido quando o usuário seleciona um diretório."
#: doc/classes/FileDialog.xml:91
msgid ""
@@ -24306,7 +24403,7 @@ msgstr ""
#: doc/classes/FileDialog.xml:97
msgid "Emitted when the user selects multiple files."
-msgstr ""
+msgstr "Emitido quando o usuário seleciona múltiplos arquivos."
#: doc/classes/FileDialog.xml:103
msgid "The dialog allows selecting one, and only one file."
@@ -24348,7 +24445,7 @@ msgstr ""
#: doc/classes/FileDialog.xml:129
msgid "Custom icon for files."
-msgstr ""
+msgstr "Ãcone personalizado para arquivos."
#: doc/classes/FileDialog.xml:132
msgid "The color modulation applied to the file icon."
@@ -24362,7 +24459,7 @@ msgstr ""
#: doc/classes/FileDialog.xml:138
msgid "Custom icon for folders."
-msgstr ""
+msgstr "Ãcone personalizado para diretórios."
#: doc/classes/FileDialog.xml:141
msgid "The color modulation applied to the folder icon."
@@ -25684,21 +25781,32 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html"
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -25707,14 +25815,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -25724,36 +25836,36 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
#, fuzzy
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
@@ -25761,46 +25873,46 @@ msgstr ""
"Se [code]true[/code], os nós filhos são organizados, do contrário, a "
"organização é desabilitada."
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
msgstr ""
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr ""
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -26188,9 +26300,8 @@ msgid ""
msgstr ""
#: doc/classes/GraphEdit.xml:211
-#, fuzzy
msgid "Emitted when the user presses [code]Ctrl + C[/code]."
-msgstr "Emitido quando o usuário clica no botão de OK."
+msgstr "Emitido quando o usuário pressiona [code]Ctrl + C[/code]."
#: doc/classes/GraphEdit.xml:216
msgid "Emitted when a GraphNode is attempted to be removed from the GraphEdit."
@@ -26213,9 +26324,8 @@ msgid "Emitted when a GraphNode is selected."
msgstr ""
#: doc/classes/GraphEdit.xml:246
-#, fuzzy
msgid "Emitted when the user presses [code]Ctrl + V[/code]."
-msgstr "Emitido quando o usuário clica no botão de OK."
+msgstr "Emitido quando o usuário pressiona [code]Ctrl + V[/code]."
#: doc/classes/GraphEdit.xml:252
msgid ""
@@ -26371,14 +26481,18 @@ msgstr "Retorna o tipo do nó em at [code]idx[/code]."
msgid ""
"Returns [code]true[/code] if left (input) side of the slot [code]idx[/code] "
"is enabled."
-msgstr "Retorna [code]true[/code] se o script pode ser instanciado."
+msgstr ""
+"Retorna [code]true[/code] se o lado esquerdo (entrada) do espaço [code]idx[/"
+"code] estiver ativado."
#: doc/classes/GraphNode.xml:120
#, fuzzy
msgid ""
"Returns [code]true[/code] if right (output) side of the slot [code]idx[/"
"code] is enabled."
-msgstr "Retorna [code]true[/code] se o script pode ser instanciado."
+msgstr ""
+"Retorna [code]true[/code] se o lado direito (saída) do espaço [code]idx[/"
+"code] estiver ativado."
#: doc/classes/GraphNode.xml:135
msgid ""
@@ -26428,14 +26542,18 @@ msgstr ""
msgid ""
"Sets the left (input) type of the slot [code]idx[/code] to [code]type_left[/"
"code]."
-msgstr "Retorna o tipo do nó em at [code]idx[/code]."
+msgstr ""
+"Define o tipo esquerdo (entrada) do espaço [code]idx[/code] para "
+"[code]type_left[/code]"
#: doc/classes/GraphNode.xml:189
#, fuzzy
msgid ""
"Sets the right (output) type of the slot [code]idx[/code] to "
"[code]type_right[/code]."
-msgstr "Retorna o tipo do nó em at [code]idx[/code]."
+msgstr ""
+"Define o tipo direito (entrada) do espaço [code]idx[/code] para "
+"[code]type_right[/code]"
#: doc/classes/GraphNode.xml:195
msgid "If [code]true[/code], the GraphNode is a comment node."
@@ -26628,7 +26746,7 @@ msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml:4
msgid "Node for 3D tile-based maps."
-msgstr ""
+msgstr "Nó para mapas 3D baseados em mosaicos."
#: modules/gridmap/doc_classes/GridMap.xml:7
msgid ""
@@ -27127,7 +27245,7 @@ msgstr ""
#: doc/classes/HSeparator.xml:4
msgid "Horizontal separator."
-msgstr ""
+msgstr "Separador horizontal."
#: doc/classes/HSeparator.xml:7
msgid ""
@@ -28316,11 +28434,11 @@ msgstr ""
#: doc/classes/Image.xml:152
msgid "Flips the image horizontally."
-msgstr ""
+msgstr "Inverte a imagem horizontalmente."
#: doc/classes/Image.xml:158
msgid "Flips the image vertically."
-msgstr ""
+msgstr "Inverte a imagem verticalmente."
#: doc/classes/Image.xml:165
msgid ""
@@ -28342,11 +28460,11 @@ msgstr "Retorna o cosseno do parâmetro."
#: doc/classes/Image.xml:178
msgid "Returns the image's format. See [enum Format] constants."
-msgstr ""
+msgstr "Retorna o formato da imagem. Veja os constantes [enum Format]."
#: doc/classes/Image.xml:184
msgid "Returns the image's height."
-msgstr ""
+msgstr "Retorna a altura da imagem."
#: doc/classes/Image.xml:191
msgid ""
@@ -28388,7 +28506,7 @@ msgstr ""
#: doc/classes/Image.xml:231
msgid "Returns the image's width."
-msgstr ""
+msgstr "Retorna a largura da imagem."
#: doc/classes/Image.xml:237
msgid "Returns [code]true[/code] if the image has generated mipmaps."
@@ -28565,16 +28683,18 @@ msgstr ""
#: doc/classes/Image.xml:436
msgid ""
"OpenGL texture format [code]RED[/code] with a single component and a "
-"bitdepth of 8."
+"bitdepth of 8.\n"
+"[b]Note:[/b] When using the GLES2 backend, this uses the alpha channel "
+"instead of the red channel for storage."
msgstr ""
-#: doc/classes/Image.xml:439
+#: doc/classes/Image.xml:440
msgid ""
"OpenGL texture format [code]RG[/code] with two components and a bitdepth of "
"8 for each."
msgstr ""
-#: doc/classes/Image.xml:442
+#: doc/classes/Image.xml:443
msgid ""
"OpenGL texture format [code]RGB[/code] with three components, each with a "
"bitdepth of 8.\n"
@@ -28582,7 +28702,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:446
+#: doc/classes/Image.xml:447
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 8.\n"
@@ -28590,73 +28710,73 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:450
+#: doc/classes/Image.xml:451
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 4."
msgstr ""
-#: doc/classes/Image.xml:453
+#: doc/classes/Image.xml:454
msgid ""
"OpenGL texture format [code]GL_RGB5_A1[/code] where 5 bits of depth for each "
"component of RGB and one bit for alpha."
msgstr ""
-#: doc/classes/Image.xml:456
+#: doc/classes/Image.xml:457
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 32-"
"bit floating-point value."
msgstr ""
-#: doc/classes/Image.xml:459
+#: doc/classes/Image.xml:460
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:462
+#: doc/classes/Image.xml:463
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:465
+#: doc/classes/Image.xml:466
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:468
+#: doc/classes/Image.xml:469
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 16-"
"bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:471
+#: doc/classes/Image.xml:472
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:474
+#: doc/classes/Image.xml:475
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:477
+#: doc/classes/Image.xml:478
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:480
+#: doc/classes/Image.xml:481
msgid ""
"A special OpenGL texture format where the three color components have 9 bits "
"of precision and all three share a single 5-bit exponent."
msgstr ""
-#: doc/classes/Image.xml:483
+#: doc/classes/Image.xml:484
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 1, and is the smallest variation "
@@ -28666,7 +28786,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:487
+#: doc/classes/Image.xml:488
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 2, and color data is interpreted "
@@ -28676,7 +28796,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:491
+#: doc/classes/Image.xml:492
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format also known as Block Compression 3 or BC3 that contains 64 "
@@ -28687,7 +28807,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:495
+#: doc/classes/Image.xml:496
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -28695,7 +28815,7 @@ msgid ""
"DXT5 uses for the alpha channel."
msgstr ""
-#: doc/classes/Image.xml:498
+#: doc/classes/Image.xml:499
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -28703,7 +28823,7 @@ msgid ""
"algorithm that DXT5 uses for the alpha channel."
msgstr ""
-#: doc/classes/Image.xml:501
+#: doc/classes/Image.xml:502
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned normalized "
@@ -28712,21 +28832,21 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:505
+#: doc/classes/Image.xml:506
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with signed floating-point "
"RGB components."
msgstr ""
-#: doc/classes/Image.xml:508
+#: doc/classes/Image.xml:509
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned floating-point "
"RGB components."
msgstr ""
-#: doc/classes/Image.xml:511
+#: doc/classes/Image.xml:512
msgid ""
"Texture format used on PowerVR-supported mobile platforms, uses 2-bit color "
"depth with no alpha. More information can be found [url=https://en.wikipedia."
@@ -28735,25 +28855,25 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:515
+#: doc/classes/Image.xml:516
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with an "
"alpha component."
msgstr ""
-#: doc/classes/Image.xml:518
+#: doc/classes/Image.xml:519
msgid ""
"Similar to [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with 4-"
"bit color depth and no alpha."
msgstr ""
-#: doc/classes/Image.xml:521
+#: doc/classes/Image.xml:522
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC4[/url], but with an "
"alpha component."
msgstr ""
-#: doc/classes/Image.xml:524
+#: doc/classes/Image.xml:525
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC1]Ericsson Texture Compression format 1[/"
@@ -28761,7 +28881,7 @@ msgid ""
"standard. This format cannot store an alpha channel."
msgstr ""
-#: doc/classes/Image.xml:527
+#: doc/classes/Image.xml:528
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28769,7 +28889,7 @@ msgid ""
"unsigned data."
msgstr ""
-#: doc/classes/Image.xml:530
+#: doc/classes/Image.xml:531
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28777,7 +28897,7 @@ msgid ""
"channel of signed data."
msgstr ""
-#: doc/classes/Image.xml:533
+#: doc/classes/Image.xml:534
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28785,7 +28905,7 @@ msgid ""
"of unsigned data."
msgstr ""
-#: doc/classes/Image.xml:536
+#: doc/classes/Image.xml:537
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28793,7 +28913,7 @@ msgid ""
"channels of signed data."
msgstr ""
-#: doc/classes/Image.xml:539
+#: doc/classes/Image.xml:540
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28803,7 +28923,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:543
+#: doc/classes/Image.xml:544
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28813,7 +28933,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:547
+#: doc/classes/Image.xml:548
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28824,31 +28944,31 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:551
+#: doc/classes/Image.xml:552
msgid "Represents the size of the [enum Format] enum."
msgstr ""
-#: doc/classes/Image.xml:554
+#: doc/classes/Image.xml:555
msgid ""
"Performs nearest-neighbor interpolation. If the image is resized, it will be "
"pixelated."
msgstr ""
-#: doc/classes/Image.xml:557
+#: doc/classes/Image.xml:558
msgid ""
"Performs bilinear interpolation. If the image is resized, it will be blurry. "
"This mode is faster than [constant INTERPOLATE_CUBIC], but it results in "
"lower quality."
msgstr ""
-#: doc/classes/Image.xml:560
+#: doc/classes/Image.xml:561
msgid ""
"Performs cubic interpolation. If the image is resized, it will be blurry. "
"This mode often gives better results compared to [constant "
"INTERPOLATE_BILINEAR], at the cost of being slower."
msgstr ""
-#: doc/classes/Image.xml:563
+#: doc/classes/Image.xml:564
msgid ""
"Performs bilinear separately on the two most-suited mipmap levels, then "
"linearly interpolates between them.\n"
@@ -28863,55 +28983,55 @@ msgid ""
"a new set will be generated for the resulting image."
msgstr ""
-#: doc/classes/Image.xml:570
+#: doc/classes/Image.xml:571
msgid ""
"Performs Lanczos interpolation. This is the slowest image resizing mode, but "
"it typically gives the best results, especially when downscalng images."
msgstr ""
-#: doc/classes/Image.xml:573
+#: doc/classes/Image.xml:574
msgid "Image does not have alpha."
-msgstr ""
+msgstr "A imagem não contém alfa."
-#: doc/classes/Image.xml:576
+#: doc/classes/Image.xml:577
msgid "Image stores alpha in a single bit."
msgstr ""
-#: doc/classes/Image.xml:579
+#: doc/classes/Image.xml:580
msgid "Image uses alpha."
-msgstr ""
+msgstr "A Imagem usa alpha."
-#: doc/classes/Image.xml:582
+#: doc/classes/Image.xml:583
msgid "Use S3TC compression."
-msgstr ""
+msgstr "Use a compressão S3TC."
-#: doc/classes/Image.xml:585
+#: doc/classes/Image.xml:586
msgid "Use PVRTC2 compression."
-msgstr ""
+msgstr "Use a compressão PVRTC2."
-#: doc/classes/Image.xml:588
+#: doc/classes/Image.xml:589
msgid "Use PVRTC4 compression."
-msgstr ""
+msgstr "Use a compressão PVRTC4."
-#: doc/classes/Image.xml:591
+#: doc/classes/Image.xml:592
msgid "Use ETC compression."
-msgstr ""
+msgstr "Use a compressão ETC."
-#: doc/classes/Image.xml:594
+#: doc/classes/Image.xml:595
msgid "Use ETC2 compression."
-msgstr ""
+msgstr "Use a compressão ETC2."
-#: doc/classes/Image.xml:597
+#: doc/classes/Image.xml:598
msgid ""
"Source texture (before compression) is a regular texture. Default for all "
"textures."
msgstr ""
-#: doc/classes/Image.xml:600
+#: doc/classes/Image.xml:601
msgid "Source texture (before compression) is in sRGB space."
msgstr ""
-#: doc/classes/Image.xml:603
+#: doc/classes/Image.xml:604
msgid ""
"Source texture (before compression) is a normal texture (e.g. it can be "
"compressed into two channels)."
@@ -28919,7 +29039,7 @@ msgstr ""
#: doc/classes/ImageTexture.xml:4
msgid "A [Texture] based on an [Image]."
-msgstr ""
+msgstr "Uma [Texture] baseada em uma [Image]."
#: doc/classes/ImageTexture.xml:7
msgid ""
@@ -29137,6 +29257,17 @@ msgstr ""
#: doc/classes/Input.xml:43
msgid ""
+"Sends all input events which are in the current buffer to the game loop. "
+"These events may have been buffered as a result of accumulated input "
+"([method set_use_accumulated_input]) or agile input flushing ([member "
+"ProjectSettings.input_devices/buffering/agile_event_flushing]).\n"
+"The engine will already do this itself at key execution points (at least "
+"once per frame). However, this can be useful in advanced cases where you "
+"want precise control over the timing of event handling."
+msgstr ""
+
+#: doc/classes/Input.xml:50
+msgid ""
"Returns the acceleration of the device's accelerometer sensor, if the device "
"has one. Otherwise, the method returns [constant Vector3.ZERO].\n"
"Note this method returns an empty [Vector3] when running from the editor "
@@ -29148,7 +29279,7 @@ msgid ""
"the Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:53
+#: doc/classes/Input.xml:60
msgid ""
"Returns a value between 0 and 1 representing the raw intensity of the given "
"action, ignoring the action's deadzone. In most cases, you should use "
@@ -29158,7 +29289,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:62
+#: doc/classes/Input.xml:69
msgid ""
"Returns a value between 0 and 1 representing the intensity of the given "
"action. In a joypad, for example, the further away the axis (analog sticks "
@@ -29170,7 +29301,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:71
+#: doc/classes/Input.xml:78
msgid ""
"Get axis input by specifying two actions, one negative and one positive.\n"
"This is a shorthand for writing [code]Input."
@@ -29178,17 +29309,17 @@ msgid ""
"get_action_strength(\"negative_action\")[/code]."
msgstr ""
-#: doc/classes/Input.xml:78
+#: doc/classes/Input.xml:85
msgid ""
"Returns an [Array] containing the device IDs of all currently connected "
"joypads."
msgstr ""
-#: doc/classes/Input.xml:84
+#: doc/classes/Input.xml:91
msgid "Returns the currently assigned cursor shape (see [enum CursorShape])."
msgstr ""
-#: doc/classes/Input.xml:90
+#: doc/classes/Input.xml:97
msgid ""
"Returns the gravity of the device's accelerometer sensor, if the device has "
"one. Otherwise, the method returns [constant Vector3.ZERO].\n"
@@ -29198,7 +29329,7 @@ msgid ""
"Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:97
+#: doc/classes/Input.xml:104
msgid ""
"Returns the rotation rate in rad/s around a device's X, Y, and Z axes of the "
"gyroscope sensor, if the device has one. Otherwise, the method returns "
@@ -29207,53 +29338,53 @@ msgid ""
"it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:106
+#: doc/classes/Input.xml:113
msgid ""
"Returns the current value of the joypad axis at given index (see [enum "
"JoystickList])."
msgstr ""
-#: doc/classes/Input.xml:113
+#: doc/classes/Input.xml:120
msgid "Returns the index of the provided axis name."
msgstr ""
-#: doc/classes/Input.xml:120
+#: doc/classes/Input.xml:127
msgid ""
"Receives a [enum JoystickList] axis and returns its equivalent name as a "
"string."
msgstr ""
-#: doc/classes/Input.xml:127
+#: doc/classes/Input.xml:134
msgid "Returns the index of the provided button name."
msgstr ""
-#: doc/classes/Input.xml:134
+#: doc/classes/Input.xml:141
msgid ""
"Receives a gamepad button from [enum JoystickList] and returns its "
"equivalent name as a string."
msgstr ""
-#: doc/classes/Input.xml:141
+#: doc/classes/Input.xml:148
msgid ""
"Returns a SDL2-compatible device GUID on platforms that use gamepad "
"remapping. Returns [code]\"Default Gamepad\"[/code] otherwise."
msgstr ""
-#: doc/classes/Input.xml:148
+#: doc/classes/Input.xml:155
msgid "Returns the name of the joypad at the specified device index."
msgstr ""
-#: doc/classes/Input.xml:155
+#: doc/classes/Input.xml:162
msgid "Returns the duration of the current vibration effect in seconds."
msgstr ""
-#: doc/classes/Input.xml:162
+#: doc/classes/Input.xml:169
msgid ""
"Returns the strength of the joypad vibration: x is the strength of the weak "
"motor, and y is the strength of the strong motor."
msgstr ""
-#: doc/classes/Input.xml:168
+#: doc/classes/Input.xml:175
msgid ""
"Returns the mouse speed for the last time the cursor was moved, and this "
"until the next frame where the mouse moves. This means that even if the "
@@ -29261,7 +29392,7 @@ msgid ""
"motion."
msgstr ""
-#: doc/classes/Input.xml:174
+#: doc/classes/Input.xml:181
msgid ""
"Returns the magnetic field strength in micro-Tesla for all axes of the "
"device's magnetometer sensor, if the device has one. Otherwise, the method "
@@ -29270,17 +29401,17 @@ msgid ""
"platforms, it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:181
+#: doc/classes/Input.xml:188
msgid ""
"Returns mouse buttons as a bitmask. If multiple mouse buttons are pressed at "
"the same time, the bits are added together."
msgstr ""
-#: doc/classes/Input.xml:187
+#: doc/classes/Input.xml:194
msgid "Returns the mouse mode. See the constants for more information."
msgstr ""
-#: doc/classes/Input.xml:198
+#: doc/classes/Input.xml:205
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -29293,7 +29424,7 @@ msgid ""
"want (on the range of 0 to 1)."
msgstr ""
-#: doc/classes/Input.xml:208
+#: doc/classes/Input.xml:215
msgid ""
"Returns [code]true[/code] when the user starts pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user pressed down "
@@ -29305,7 +29436,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:218
+#: doc/classes/Input.xml:225
msgid ""
"Returns [code]true[/code] when the user stops pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user released the "
@@ -29315,7 +29446,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:227
+#: doc/classes/Input.xml:234
msgid ""
"Returns [code]true[/code] if you are pressing the action event. Note that if "
"an action has multiple buttons assigned and more than one of them is "
@@ -29326,14 +29457,14 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:236
+#: doc/classes/Input.xml:243
#, fuzzy
msgid ""
"Returns [code]true[/code] if you are pressing the joypad button (see [enum "
"JoystickList])."
msgstr "Retorna [code]true[/code] se o script pode ser instanciado."
-#: doc/classes/Input.xml:243
+#: doc/classes/Input.xml:250
msgid ""
"Returns [code]true[/code] if the system knows the specified device. This "
"means that it sets all button and axis indices exactly as defined in [enum "
@@ -29341,20 +29472,20 @@ msgid ""
"but you can still retrieve events from them."
msgstr ""
-#: doc/classes/Input.xml:250
+#: doc/classes/Input.xml:257
#, fuzzy
msgid ""
"Returns [code]true[/code] if you are pressing the key. You can pass a [enum "
"KeyList] constant."
msgstr "Retorna [code]true[/code] se o script pode ser instanciado."
-#: doc/classes/Input.xml:257
+#: doc/classes/Input.xml:264
msgid ""
"Returns [code]true[/code] if you are pressing the mouse button specified "
"with [enum ButtonList]."
msgstr ""
-#: doc/classes/Input.xml:267
+#: doc/classes/Input.xml:274
msgid ""
"Notifies the [Input] singleton that a connection has changed, to update the "
"state for the [code]device[/code] index.\n"
@@ -29363,7 +29494,7 @@ msgid ""
"triggered internally."
msgstr ""
-#: doc/classes/Input.xml:275
+#: doc/classes/Input.xml:282
msgid ""
"Feeds an [InputEvent] to the game. Can be used to artificially trigger input "
"events from code. Also generates [method Node._input] calls.\n"
@@ -29376,12 +29507,21 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Input.xml:289
+#: doc/classes/Input.xml:296
msgid ""
"Removes all mappings from the internal database that match the given GUID."
msgstr ""
-#: doc/classes/Input.xml:298
+#: doc/classes/Input.xml:303
+msgid ""
+"Sets the acceleration value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:313
msgid ""
"Sets a custom mouse cursor image, which is only visible inside the game "
"window. The hotspot can also be specified. Passing [code]null[/code] to the "
@@ -29396,7 +29536,7 @@ msgid ""
"compression mode can't be used for custom cursors."
msgstr ""
-#: doc/classes/Input.xml:309
+#: doc/classes/Input.xml:324
msgid ""
"Sets the default cursor shape to be used in the viewport instead of "
"[constant CURSOR_ARROW].\n"
@@ -29406,11 +29546,38 @@ msgid ""
"cursor immediately."
msgstr ""
-#: doc/classes/Input.xml:318
+#: doc/classes/Input.xml:333
+msgid ""
+"Sets the gravity value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:341
+msgid ""
+"Sets the value of the rotation rate of the gyroscope sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:349
+msgid ""
+"Sets the value of the magnetic field of the magnetometer sensor. Can be used "
+"for debugging on devices without a hardware sensor, for example in an editor "
+"on a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:357
msgid "Sets the mouse mode. See the constants for more information."
msgstr ""
-#: doc/classes/Input.xml:325
+#: doc/classes/Input.xml:364
msgid ""
"Enables or disables the accumulation of similar input events sent by the "
"operating system. When input accumulation is enabled, all input events "
@@ -29424,7 +29591,7 @@ msgid ""
"results that closely follow the actual input."
msgstr ""
-#: doc/classes/Input.xml:336
+#: doc/classes/Input.xml:375
msgid ""
"Starts to vibrate the joypad. Joypads usually come with two rumble motors, a "
"strong and a weak one. [code]weak_magnitude[/code] is the strength of the "
@@ -29437,34 +29604,34 @@ msgid ""
"few seconds."
msgstr ""
-#: doc/classes/Input.xml:344
+#: doc/classes/Input.xml:383
msgid "Stops the vibration of the joypad."
msgstr ""
-#: doc/classes/Input.xml:351
+#: doc/classes/Input.xml:390
msgid ""
"Vibrate Android and iOS devices.\n"
"[b]Note:[/b] It needs [code]VIBRATE[/code] permission for Android at export "
"settings. iOS does not support duration."
msgstr ""
-#: doc/classes/Input.xml:359
+#: doc/classes/Input.xml:398
msgid "Sets the mouse position to the specified vector."
msgstr ""
-#: doc/classes/Input.xml:368
+#: doc/classes/Input.xml:407
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
-#: doc/classes/Input.xml:374
+#: doc/classes/Input.xml:413
msgid "Makes the mouse cursor visible if it is hidden."
msgstr ""
-#: doc/classes/Input.xml:377
+#: doc/classes/Input.xml:416
msgid "Makes the mouse cursor hidden if it is visible."
msgstr ""
-#: doc/classes/Input.xml:380
+#: doc/classes/Input.xml:419
msgid ""
"Captures the mouse. The mouse will be hidden and its position locked at the "
"center of the screen.\n"
@@ -29472,83 +29639,83 @@ msgid ""
"need to use [member InputEventMouseMotion.relative]."
msgstr ""
-#: doc/classes/Input.xml:384
+#: doc/classes/Input.xml:423
msgid "Makes the mouse cursor visible but confines it to the game window."
msgstr ""
-#: doc/classes/Input.xml:387
+#: doc/classes/Input.xml:426
msgid "Arrow cursor. Standard, default pointing cursor."
msgstr ""
-#: doc/classes/Input.xml:390
+#: doc/classes/Input.xml:429
msgid ""
"I-beam cursor. Usually used to show where the text cursor will appear when "
"the mouse is clicked."
msgstr ""
-#: doc/classes/Input.xml:393
+#: doc/classes/Input.xml:432
msgid ""
"Pointing hand cursor. Usually used to indicate the pointer is over a link or "
"other interactable item."
msgstr ""
-#: doc/classes/Input.xml:396
+#: doc/classes/Input.xml:435
msgid ""
"Cross cursor. Typically appears over regions in which a drawing operation "
"can be performed or for selections."
msgstr ""
-#: doc/classes/Input.xml:399
+#: doc/classes/Input.xml:438
msgid ""
"Wait cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application is still usable during the "
"operation."
msgstr ""
-#: doc/classes/Input.xml:402
+#: doc/classes/Input.xml:441
msgid ""
"Busy cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application isn't usable during the "
"operation (e.g. something is blocking its main thread)."
msgstr ""
-#: doc/classes/Input.xml:405
+#: doc/classes/Input.xml:444
msgid "Drag cursor. Usually displayed when dragging something."
msgstr ""
-#: doc/classes/Input.xml:408
+#: doc/classes/Input.xml:447
msgid ""
"Can drop cursor. Usually displayed when dragging something to indicate that "
"it can be dropped at the current position."
msgstr ""
-#: doc/classes/Input.xml:411
+#: doc/classes/Input.xml:450
msgid ""
"Forbidden cursor. Indicates that the current action is forbidden (for "
"example, when dragging something) or that the control at a position is "
"disabled."
msgstr ""
-#: doc/classes/Input.xml:414
+#: doc/classes/Input.xml:453
msgid ""
"Vertical resize mouse cursor. A double-headed vertical arrow. It tells the "
"user they can resize the window or the panel vertically."
msgstr ""
-#: doc/classes/Input.xml:417
+#: doc/classes/Input.xml:456
msgid ""
"Horizontal resize mouse cursor. A double-headed horizontal arrow. It tells "
"the user they can resize the window or the panel horizontally."
msgstr ""
-#: doc/classes/Input.xml:420
+#: doc/classes/Input.xml:459
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the bottom left to the top right. It tells the user they can resize the "
"window or the panel both horizontally and vertically."
msgstr ""
-#: doc/classes/Input.xml:423
+#: doc/classes/Input.xml:462
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the top left to the bottom right, the opposite of [constant "
@@ -29556,23 +29723,23 @@ msgid ""
"both horizontally and vertically."
msgstr ""
-#: doc/classes/Input.xml:426
+#: doc/classes/Input.xml:465
msgid "Move cursor. Indicates that something can be moved."
msgstr ""
-#: doc/classes/Input.xml:429
+#: doc/classes/Input.xml:468
msgid ""
"Vertical split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_VSIZE]."
msgstr ""
-#: doc/classes/Input.xml:432
+#: doc/classes/Input.xml:471
msgid ""
"Horizontal split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_HSIZE]."
msgstr ""
-#: doc/classes/Input.xml:435
+#: doc/classes/Input.xml:474
msgid "Help cursor. Usually a question mark."
msgstr ""
@@ -29988,7 +30155,9 @@ msgid "The drag position."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -30433,7 +30602,7 @@ msgstr ""
#: doc/classes/ItemList.xml:35
msgid "Removes all items from the list."
-msgstr ""
+msgstr "Remove todos os itens da lista."
#: doc/classes/ItemList.xml:41
msgid ""
@@ -30737,7 +30906,7 @@ msgstr ""
#: doc/classes/ItemList.xml:398
msgid "Icon is drawn above the text."
-msgstr ""
+msgstr "O ícone é desenhado por cima do texto."
#: doc/classes/ItemList.xml:401
msgid "Icon is drawn to the left of the text."
@@ -30745,7 +30914,7 @@ msgstr ""
#: doc/classes/ItemList.xml:404
msgid "Only allow selecting a single item."
-msgstr ""
+msgstr "Permite que somente um item seja selecionado."
#: doc/classes/ItemList.xml:407
msgid "Allows selecting multiple items by holding Ctrl or Shift."
@@ -30772,11 +30941,11 @@ msgstr ""
#: doc/classes/ItemList.xml:424 doc/classes/Tree.xml:407
msgid "[Font] of the item's text."
-msgstr ""
+msgstr "[Font] do texto do item."
#: doc/classes/ItemList.xml:427 doc/classes/Tree.xml:410
msgid "Default text [Color] of the item."
-msgstr ""
+msgstr "[Color] padrão do texto do item."
#: doc/classes/ItemList.xml:430 doc/classes/Tree.xml:413
msgid "Text [Color] used when the item is selected."
@@ -30790,15 +30959,15 @@ msgstr ""
#: doc/classes/ItemList.xml:436
msgid "The horizontal spacing between items."
-msgstr ""
+msgstr "O espaço horizontal entre os itens."
#: doc/classes/ItemList.xml:439
msgid "The spacing between item's icon and text."
-msgstr ""
+msgstr "O espaço entre o ícone e o texto do item."
#: doc/classes/ItemList.xml:442
msgid "The vertical spacing between each line of text."
-msgstr ""
+msgstr "O espaço vertical entre cada linha de texto."
#: doc/classes/ItemList.xml:445
msgid ""
@@ -30813,7 +30982,7 @@ msgstr ""
#: doc/classes/ItemList.xml:451
msgid "The vertical spacing between items."
-msgstr ""
+msgstr "O espaço vertical entre os itens."
#: doc/classes/JavaScript.xml:4
msgid ""
@@ -31307,7 +31476,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -31372,22 +31542,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -31402,7 +31574,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -31410,19 +31582,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -31493,7 +31665,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -31551,7 +31724,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -31691,7 +31866,7 @@ msgstr ""
#: doc/classes/Label.xml:24
msgid "Returns the font size in pixels."
-msgstr ""
+msgstr "Retorna o tamanho da fonte em pixels."
#: doc/classes/Label.xml:30
msgid ""
@@ -31797,7 +31972,7 @@ msgstr ""
#: doc/classes/Label.xml:105
msgid "Default text [Color] of the [Label]."
-msgstr ""
+msgstr "[Color] padrão do texto do [Label]."
#: doc/classes/Label.xml:108
msgid "[Color] of the text's shadow effect."
@@ -31877,7 +32052,9 @@ msgstr ""
msgid ""
"Sets the [Texture] of the piece with index [code]idx[/code] to "
"[code]texture[/code]."
-msgstr "Retorna o tipo do nó em at [code]idx[/code]."
+msgstr ""
+"Define a [Texture] da peça com índice [code]idx[/code] para [code]texture[/"
+"code]."
#: doc/classes/LargeTexture.xml:67
msgid "Sets the size of this [LargeTexture]."
@@ -32274,7 +32451,7 @@ msgstr ""
#: doc/classes/Line2D.xml:4
msgid "A 2D line."
-msgstr ""
+msgstr "Uma linha 2D."
#: doc/classes/Line2D.xml:7
msgid ""
@@ -32300,11 +32477,11 @@ msgstr ""
#: doc/classes/Line2D.xml:27
msgid "Removes all points from the line."
-msgstr ""
+msgstr "Remove todos os pontos da linha."
#: doc/classes/Line2D.xml:33
msgid "Returns the Line2D's amount of points."
-msgstr ""
+msgstr "Retorna a quantidade de pontos de uma Line2D."
#: doc/classes/Line2D.xml:40
msgid "Returns point [code]i[/code]'s position."
@@ -32384,7 +32561,7 @@ msgstr ""
#: doc/classes/Line2D.xml:95
msgid "The line's width."
-msgstr ""
+msgstr "A largura da linha."
#: doc/classes/Line2D.xml:98
msgid ""
@@ -32658,7 +32835,7 @@ msgstr ""
#: doc/classes/LineEdit.xml:185 doc/classes/TextEdit.xml:506
msgid "Emitted when the text changes."
-msgstr ""
+msgstr "Emitido quando o texto muda."
#: doc/classes/LineEdit.xml:191
msgid "Emitted when the user presses [constant KEY_ENTER] on the [LineEdit]."
@@ -32686,7 +32863,7 @@ msgstr ""
#: doc/classes/LineEdit.xml:212 doc/classes/TextEdit.xml:530
msgid "Copies the selected text."
-msgstr ""
+msgstr "Copia o texto selecionado."
#: doc/classes/LineEdit.xml:215
msgid ""
@@ -32742,7 +32919,7 @@ msgstr ""
#: doc/classes/LineEdit.xml:254
msgid "Default font color."
-msgstr ""
+msgstr "Cor padrão da fonte."
#: doc/classes/LineEdit.xml:257
msgid "Font color for selected text (inside the selection rectangle)."
@@ -32840,14 +33017,21 @@ msgid "Default text [Color] of the [LinkButton]."
msgstr ""
#: doc/classes/LinkButton.xml:46
-msgid "Text [Color] used when the [LinkButton] is being hovered."
+msgid ""
+"Text [Color] used when the [LinkButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/LinkButton.xml:49
-msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgid "Text [Color] used when the [LinkButton] is being hovered."
msgstr ""
#: doc/classes/LinkButton.xml:52
+msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:55
msgid "The vertical space between the baseline of text and the underline."
msgstr ""
@@ -32972,7 +33156,7 @@ msgstr ""
#: doc/classes/MainLoop.xml:57
msgid "Called before the program exits."
-msgstr ""
+msgstr "Chamada antes do programa fechar."
#: doc/classes/MainLoop.xml:65
msgid ""
@@ -33334,33 +33518,40 @@ msgstr ""
#: doc/classes/MenuButton.xml:58
msgid "Default text [Color] of the [MenuButton]."
-msgstr ""
+msgstr "[Color] padrão do texto do [MenuButton]."
#: doc/classes/MenuButton.xml:61
msgid "Text [Color] used when the [MenuButton] is disabled."
msgstr ""
#: doc/classes/MenuButton.xml:64
-msgid "Text [Color] used when the [MenuButton] is being hovered."
+msgid ""
+"Text [Color] used when the [MenuButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/MenuButton.xml:67
-msgid "Text [Color] used when the [MenuButton] is being pressed."
+msgid "Text [Color] used when the [MenuButton] is being hovered."
msgstr ""
#: doc/classes/MenuButton.xml:70
-msgid "[StyleBox] used when the [MenuButton] is being hovered."
+msgid "Text [Color] used when the [MenuButton] is being pressed."
msgstr ""
#: doc/classes/MenuButton.xml:73
-msgid "The horizontal space between [MenuButton]'s icon and text."
+msgid "[StyleBox] used when the [MenuButton] is being hovered."
msgstr ""
#: doc/classes/MenuButton.xml:76
-msgid "Default [StyleBox] for the [MenuButton]."
+msgid "The horizontal space between [MenuButton]'s icon and text."
msgstr ""
#: doc/classes/MenuButton.xml:79
+msgid "Default [StyleBox] for the [MenuButton]."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:82
msgid "[StyleBox] used when the [MenuButton] is being pressed."
msgstr ""
@@ -33958,7 +34149,7 @@ msgstr ""
#: doc/classes/MeshInstance2D.xml:29 doc/classes/MultiMeshInstance2D.xml:29
msgid "Emitted when the [member texture] is changed."
-msgstr ""
+msgstr "Emitido quando a [member texture] muda."
#: doc/classes/MeshLibrary.xml:4
msgid "Library of meshes."
@@ -34031,7 +34222,7 @@ msgstr ""
#: doc/classes/MeshLibrary.xml:101
msgid "Removes the item."
-msgstr ""
+msgstr "Remove o item."
#: doc/classes/MeshLibrary.xml:109
msgid "Sets the item's mesh."
@@ -35097,7 +35288,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -35486,11 +35677,11 @@ msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml:59
msgid "Emitted when a connection attempt fails."
-msgstr ""
+msgstr "Emitido quando uma tentativa de conexão falha."
#: doc/classes/NetworkedMultiplayerPeer.xml:64
msgid "Emitted when a connection attempt succeeds."
-msgstr ""
+msgstr "Emitido quando uma tentativa de conexão tem sucesso."
#: doc/classes/NetworkedMultiplayerPeer.xml:70
msgid "Emitted by the server when a client connects."
@@ -35637,7 +35828,7 @@ msgstr ""
#: doc/classes/NinePatchRect.xml:61
msgid "Emitted when the node's texture changes."
-msgstr ""
+msgstr "Emitido quando a textura de um nó muda."
#: doc/classes/NinePatchRect.xml:67
msgid ""
@@ -36561,15 +36752,15 @@ msgstr ""
#: doc/classes/Node.xml:713
msgid "Emitted when the node is ready."
-msgstr ""
+msgstr "Emitido quando o nó está preparado."
#: doc/classes/Node.xml:718
msgid "Emitted when the node is renamed."
-msgstr ""
+msgstr "Emitido quando o nó é renomeado."
#: doc/classes/Node.xml:723
msgid "Emitted when the node enters the tree."
-msgstr ""
+msgstr "Emitido quando o nó entra na árvore."
#: doc/classes/Node.xml:728
msgid "Emitted after the node exits the tree and is no longer active."
@@ -37514,7 +37705,7 @@ msgstr ""
#: doc/classes/Object.xml:418
msgid "Emitted whenever the object's script is changed."
-msgstr ""
+msgstr "Emitido cada vez que o script do objeto muda."
#: doc/classes/Object.xml:424
msgid "Called right when the object is initialized. Not available in script."
@@ -37979,26 +38170,33 @@ msgid "Text [Color] used when the [OptionButton] is disabled."
msgstr ""
#: doc/classes/OptionButton.xml:212
-msgid "Text [Color] used when the [OptionButton] is being hovered."
+msgid ""
+"Text [Color] used when the [OptionButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/OptionButton.xml:215
-msgid "Text [Color] used when the [OptionButton] is being pressed."
+msgid "Text [Color] used when the [OptionButton] is being hovered."
msgstr ""
#: doc/classes/OptionButton.xml:218
-msgid "[StyleBox] used when the [OptionButton] is being hovered."
+msgid "Text [Color] used when the [OptionButton] is being pressed."
msgstr ""
#: doc/classes/OptionButton.xml:221
-msgid "The horizontal space between [OptionButton]'s icon and text."
+msgid "[StyleBox] used when the [OptionButton] is being hovered."
msgstr ""
#: doc/classes/OptionButton.xml:224
-msgid "Default [StyleBox] for the [OptionButton]."
+msgid "The horizontal space between [OptionButton]'s icon and text."
msgstr ""
#: doc/classes/OptionButton.xml:227
+msgid "Default [StyleBox] for the [OptionButton]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:230
msgid "[StyleBox] used when the [OptionButton] is being pressed."
msgstr ""
@@ -38406,7 +38604,7 @@ msgstr "Retorna o número de nós nesta [SceneTree]."
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -38436,14 +38634,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -38453,7 +38651,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -38664,11 +38862,12 @@ msgid ""
msgstr "Retorna [code]true[/code] se o script pode ser instanciado."
#: doc/classes/OS.xml:607
-#, fuzzy
msgid ""
"Returns [code]true[/code] if the platform has a virtual keyboard, "
"[code]false[/code] otherwise."
-msgstr "Retorna [code]true[/code] se o script pode ser instanciado."
+msgstr ""
+"Retorna [code]true[/code] se a plataforma possuir um teclado virtual, "
+"[code]false[/code] caso contrário."
#: doc/classes/OS.xml:613
msgid "Hides the virtual keyboard if it is shown, does nothing otherwise."
@@ -40342,7 +40541,7 @@ msgstr ""
#: doc/classes/Path.xml:22
msgid "Emitted when the [member curve] changes."
-msgstr ""
+msgstr "Emitido quando a [member curve] muda."
#: doc/classes/Path2D.xml:4
msgid "Contains a [Curve2D] path for [PathFollow2D] nodes to follow."
@@ -40970,17 +41169,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -40998,11 +41223,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -41197,7 +41422,9 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-msgid "Returns the [Physics2DDirectBodyState] of the body."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
@@ -42000,6 +42227,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -42017,7 +42262,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -42131,7 +42376,9 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-msgid "Returns the [PhysicsDirectBodyState] of the body."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/PhysicsServer.xml:370
@@ -43116,27 +43363,27 @@ msgstr ""
msgid "Removes an element from the array by index."
msgstr ""
-#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolColorArray.xml:66
-#: doc/classes/PoolIntArray.xml:67 doc/classes/PoolRealArray.xml:67
-#: doc/classes/PoolStringArray.xml:74 doc/classes/PoolVector2Array.xml:67
-#: doc/classes/PoolVector3Array.xml:66
+#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolIntArray.xml:67
+#: doc/classes/PoolRealArray.xml:67
msgid ""
"Sets the size of the array. If the array is grown, reserves elements at the "
"end of the array. If the array is shrunk, truncates the array to the new "
-"size."
+"size.\n"
+"[b]Note:[/b] Added elements are not automatically initialized to 0 and will "
+"contain garbage, i.e. indeterminate values."
msgstr ""
-#: doc/classes/PoolByteArray.xml:121
+#: doc/classes/PoolByteArray.xml:122
msgid "Changes the byte at the given index."
msgstr ""
-#: doc/classes/PoolByteArray.xml:127 doc/classes/PoolColorArray.xml:79
-#: doc/classes/PoolRealArray.xml:80 doc/classes/PoolStringArray.xml:87
+#: doc/classes/PoolByteArray.xml:128 doc/classes/PoolColorArray.xml:79
+#: doc/classes/PoolRealArray.xml:81 doc/classes/PoolStringArray.xml:87
#: doc/classes/PoolVector2Array.xml:80 doc/classes/PoolVector3Array.xml:79
msgid "Returns the size of the array."
msgstr ""
-#: doc/classes/PoolByteArray.xml:135
+#: doc/classes/PoolByteArray.xml:136
msgid ""
"Returns the slice of the [PoolByteArray] between indices (inclusive) as a "
"new [PoolByteArray]. Any negative index is considered to be from the end of "
@@ -43168,6 +43415,14 @@ msgstr ""
msgid "Appends a value to the array."
msgstr ""
+#: doc/classes/PoolColorArray.xml:66 doc/classes/PoolStringArray.xml:74
+#: doc/classes/PoolVector2Array.xml:67 doc/classes/PoolVector3Array.xml:66
+msgid ""
+"Sets the size of the array. If the array is grown, reserves elements at the "
+"end of the array. If the array is shrunk, truncates the array to the new "
+"size."
+msgstr ""
+
#: doc/classes/PoolColorArray.xml:73
msgid "Changes the [Color] at the given index."
msgstr ""
@@ -43204,11 +43459,11 @@ msgid ""
"valid, or at the end of the array ([code]idx == size()[/code])."
msgstr ""
-#: doc/classes/PoolIntArray.xml:74
+#: doc/classes/PoolIntArray.xml:75
msgid "Changes the int at the given index."
msgstr ""
-#: doc/classes/PoolIntArray.xml:80
+#: doc/classes/PoolIntArray.xml:81
msgid "Returns the array size."
msgstr ""
@@ -43240,7 +43495,7 @@ msgstr ""
msgid "Appends a [PoolRealArray] at the end of this array."
msgstr ""
-#: doc/classes/PoolRealArray.xml:74
+#: doc/classes/PoolRealArray.xml:75
msgid "Changes the float at the given index."
msgstr ""
@@ -43409,7 +43664,7 @@ msgstr ""
#: doc/classes/Popup.xml:70
msgid "Emitted when a popup is hidden."
-msgstr ""
+msgstr "Emitido quando um popup é ocultado."
#: doc/classes/Popup.xml:76
msgid "Notification sent right after the popup is shown."
@@ -44165,7 +44420,7 @@ msgstr ""
#: doc/classes/ProceduralSky.xml:46
msgid "The sun's color."
-msgstr ""
+msgstr "A cor do sol."
#: doc/classes/ProceduralSky.xml:49
msgid ""
@@ -44244,11 +44499,11 @@ msgstr ""
#: doc/classes/ProgressBar.xml:33
msgid "The color of the text."
-msgstr ""
+msgstr "A cor do texto."
#: doc/classes/ProgressBar.xml:36
msgid "The color of the text's shadow."
-msgstr ""
+msgstr "A cor da sombra do texto."
#: doc/classes/ProjectSettings.xml:4
msgid "Contains global variables accessible from everywhere."
@@ -44508,18 +44763,6 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:204
msgid ""
-"The project data directory is used for storing project-specific data "
-"(metadata, shader cache, etc.).\n"
-"[b]Note:[/b] Restart the application after changing this setting.\n"
-"[b]Note:[/b] Changing this value can help on platforms or with third-party "
-"tools where specific directory patterns are disallowed. Only modify this "
-"setting if you know that your environment requires it, as changing the "
-"default can impact compatibility with some external tools or plugins which "
-"expect the default [code].import[/code] folder."
-msgstr ""
-
-#: doc/classes/ProjectSettings.xml:209
-msgid ""
"Specifies a file to override project settings. For example: [code]user://"
"custom_settings.cfg[/code]. See \"Overriding\" in the [ProjectSettings] "
"class description at the top for more information.\n"
@@ -44527,7 +44770,7 @@ msgid ""
"code] will still be read to override the project settings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:213
+#: doc/classes/ProjectSettings.xml:208
msgid ""
"If [code]true[/code], the project will save user data to its own user "
"directory (see [member application/config/custom_user_dir_name]). This "
@@ -44537,13 +44780,28 @@ msgid ""
"user data directory)/Godot/app_userdata/(project name)[/code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:216
+#: doc/classes/ProjectSettings.xml:211
+msgid ""
+"If [code]true[/code], the project will use a hidden directory ([code]."
+"import[/code]) for storing project-specific data (metadata, shader cache, "
+"etc.).\n"
+"If [code]false[/code], a non-hidden directory ([code]import[/code]) will be "
+"used instead.\n"
+"[b]Note:[/b] Restart the application after changing this setting.\n"
+"[b]Note:[/b] Changing this value can help on platforms or with third-party "
+"tools where hidden directory patterns are disallowed. Only modify this "
+"setting if you know that your environment requires it, as changing the "
+"default can impact compatibility with some external tools or plugins which "
+"expect the default [code].import[/code] folder."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:217
msgid ""
"Icon set in [code].ico[/code] format used on Windows to set the game's icon. "
"This is done automatically on start by calling [method OS.set_native_icon]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:219
+#: doc/classes/ProjectSettings.xml:220
msgid ""
"Time samples for frame deltas are subject to random variation introduced by "
"the platform, even when frames are displayed at regular intervals thanks to "
@@ -44557,14 +44815,14 @@ msgid ""
"adequate to render frames at the refresh rate."
msgstr ""
-#: doc/classes/ProjectSettings.xml:224
+#: doc/classes/ProjectSettings.xml:225
msgid ""
"[b]Experimental.[/b] Shifts the measurement of delta time for each frame to "
"just after the drawing has taken place. This may lead to more consistent "
"deltas and a reduction in frame stutters."
msgstr ""
-#: doc/classes/ProjectSettings.xml:227
+#: doc/classes/ProjectSettings.xml:228
msgid ""
"If [code]true[/code], disables printing to standard error. If [code]true[/"
"code], this also hides error and warning messages printed by [method "
@@ -44573,7 +44831,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:231
+#: doc/classes/ProjectSettings.xml:232
msgid ""
"If [code]true[/code], disables printing to standard output. This is "
"equivalent to starting the editor or project with the [code]--quiet[/code] "
@@ -44581,7 +44839,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:235
+#: doc/classes/ProjectSettings.xml:236
msgid ""
"If [code]true[/code], flushes the standard output stream every time a line "
"is printed. This affects both terminal logging and file logging.\n"
@@ -44597,20 +44855,20 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:241
+#: doc/classes/ProjectSettings.xml:242
msgid ""
"Debug build override for [member application/run/flush_stdout_on_print], as "
"performance is less important during debugging.\n"
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:245
+#: doc/classes/ProjectSettings.xml:246
msgid ""
"Forces a delay between frames in the main loop (in milliseconds). This may "
"be useful if you plan to disable vertical synchronization."
msgstr ""
-#: doc/classes/ProjectSettings.xml:248
+#: doc/classes/ProjectSettings.xml:249
msgid ""
"If [code]true[/code], enables low-processor usage mode. This setting only "
"works on desktop platforms. The screen is not redrawn if nothing changes "
@@ -44618,75 +44876,81 @@ msgid ""
"useless (and can hurt performance) in most games."
msgstr ""
-#: doc/classes/ProjectSettings.xml:251
+#: doc/classes/ProjectSettings.xml:252
msgid ""
"Amount of sleeping between frames when the low-processor usage mode is "
"enabled (in microseconds). Higher values will result in lower CPU usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:254
+#: doc/classes/ProjectSettings.xml:255
msgid "Path to the main scene file that will be loaded when the project runs."
msgstr ""
-#: doc/classes/ProjectSettings.xml:257 doc/classes/ProjectSettings.xml:260
+#: doc/classes/ProjectSettings.xml:258 doc/classes/ProjectSettings.xml:261
msgid ""
"Audio buses will disable automatically when sound goes below a given dB "
"threshold for a given time. This saves CPU as effects assigned to that bus "
"will no longer do any processing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:263
+#: doc/classes/ProjectSettings.xml:264
msgid ""
"Default [AudioBusLayout] resource file to use in the project, unless "
"overridden by the scene."
msgstr ""
-#: doc/classes/ProjectSettings.xml:266
+#: doc/classes/ProjectSettings.xml:267
msgid ""
"Specifies the audio driver to use. This setting is platform-dependent as "
"each platform supports different audio drivers. If left empty, the default "
"audio driver will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:269
+#: doc/classes/ProjectSettings.xml:270
msgid ""
"If [code]true[/code], microphone input will be allowed. This requires "
"appropriate permissions to be set when exporting to Android or iOS."
msgstr ""
-#: doc/classes/ProjectSettings.xml:272
+#: doc/classes/ProjectSettings.xml:273
msgid ""
"The mixing rate used for audio (in Hz). In general, it's better to not touch "
"this and leave it to the host operating system."
msgstr ""
-#: doc/classes/ProjectSettings.xml:275
+#: doc/classes/ProjectSettings.xml:276
msgid ""
"Safer override for [member audio/mix_rate] in the Web platform. Here "
"[code]0[/code] means \"let the browser choose\" (since some browsers do not "
"like forcing the mix rate)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:278
+#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:281
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:284
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:287
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -44696,7 +44960,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:290
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -44706,27 +44970,27 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:293
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:296
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
-#: doc/classes/ProjectSettings.xml:299
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:302
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -44734,81 +44998,81 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:305
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:308
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:311
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:314
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:317
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr ""
-#: doc/classes/ProjectSettings.xml:320
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:323
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:326
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:329
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:332
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:335
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:338
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:341
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -44816,109 +45080,109 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:344
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:347
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:350
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:353
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:356
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:359
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:362
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:365
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:368
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:371
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:374
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:377
+#: doc/classes/ProjectSettings.xml:380
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:380
+#: doc/classes/ProjectSettings.xml:383
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:383
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:386
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:389
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:392
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:395
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:398
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -44929,91 +45193,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:403
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:406
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:409
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:412
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:415
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:418
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:421
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:424
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:427
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:430
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:433
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:436
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:439
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr ""
-#: doc/classes/ProjectSettings.xml:442
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:445
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:448
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:451
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -45022,13 +45286,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:455
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:458
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -45038,7 +45302,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:463
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -45046,19 +45310,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:468
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:472
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:476
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -45072,45 +45336,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:481
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:484
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:488
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:491
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:494
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:497
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:500
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -45119,7 +45383,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:503
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -45130,7 +45394,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:507
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -45146,14 +45410,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:515
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:518
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -45161,49 +45425,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:521
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:524
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:529
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:532
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:535
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:538
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:541
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:544
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:547
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -45212,7 +45476,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:551
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -45220,7 +45484,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:555
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -45228,7 +45492,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:559
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -45238,7 +45502,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:563
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -45247,7 +45511,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:567
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -45256,7 +45520,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:571
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -45266,7 +45530,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:575
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -45274,7 +45538,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:579
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -45284,7 +45548,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:583
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -45294,7 +45558,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:587
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -45302,7 +45566,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:591
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -45311,7 +45575,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:595
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -45319,7 +45583,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:599
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -45331,477 +45595,477 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:605
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:608
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:611
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:614
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
-msgstr ""
+msgstr "Nome opcional para a camada 1 da física 2D."
-#: doc/classes/ProjectSettings.xml:617
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
-msgstr ""
+msgstr "Nome opcional para a camada 10 da física 2D."
-#: doc/classes/ProjectSettings.xml:620
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
-msgstr ""
+msgstr "Nome opcional para a camada 11 da física 2D."
-#: doc/classes/ProjectSettings.xml:623
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
-msgstr ""
+msgstr "Nome opcional para a camada 12 da física 2D."
-#: doc/classes/ProjectSettings.xml:626
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
-msgstr ""
+msgstr "Nome opcional para a camada 13 da física 2D."
-#: doc/classes/ProjectSettings.xml:629
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
-msgstr ""
+msgstr "Nome opcional para a camada 14 da física 2D."
-#: doc/classes/ProjectSettings.xml:632
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
-msgstr ""
+msgstr "Nome opcional para a camada 15 da física 2D."
-#: doc/classes/ProjectSettings.xml:635
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
-msgstr ""
+msgstr "Nome opcional para a camada 16 da física 2D."
-#: doc/classes/ProjectSettings.xml:638
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
-msgstr ""
+msgstr "Nome opcional para a camada 17 da física 2D."
-#: doc/classes/ProjectSettings.xml:641
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
-msgstr ""
+msgstr "Nome opcional para a camada 18 da física 2D."
-#: doc/classes/ProjectSettings.xml:644
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
-msgstr ""
+msgstr "Nome opcional para a camada 19 da física 2D."
-#: doc/classes/ProjectSettings.xml:647
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
-msgstr ""
+msgstr "Nome opcional para a camada 2 da física 2D."
-#: doc/classes/ProjectSettings.xml:650
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
-msgstr ""
+msgstr "Nome opcional para a camada 20 da física 2D."
-#: doc/classes/ProjectSettings.xml:653
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
-msgstr ""
+msgstr "Nome opcional para a camada 21 da física 2D."
-#: doc/classes/ProjectSettings.xml:656
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
-msgstr ""
+msgstr "Nome opcional para a camada 22 da física 2D."
-#: doc/classes/ProjectSettings.xml:659
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
-msgstr ""
+msgstr "Nome opcional para a camada 23 da física 2D."
-#: doc/classes/ProjectSettings.xml:662
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
-msgstr ""
+msgstr "Nome opcional para a camada 24 da física 2D."
-#: doc/classes/ProjectSettings.xml:665
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
-msgstr ""
+msgstr "Nome opcional para a camada 25 da física 2D."
-#: doc/classes/ProjectSettings.xml:668
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
-msgstr ""
+msgstr "Nome opcional para a camada 26 da física 2D."
-#: doc/classes/ProjectSettings.xml:671
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
-msgstr ""
+msgstr "Nome opcional para a camada 27 da física 2D."
-#: doc/classes/ProjectSettings.xml:674
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
-msgstr ""
+msgstr "Nome opcional para a camada 28 da física 2D."
-#: doc/classes/ProjectSettings.xml:677
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
-msgstr ""
+msgstr "Nome opcional para a camada 29 da física 2D."
-#: doc/classes/ProjectSettings.xml:680
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
-msgstr ""
+msgstr "Nome opcional para a camada 3 da física 2D."
-#: doc/classes/ProjectSettings.xml:683
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
-msgstr ""
+msgstr "Nome opcional para a camada 30 da física 2D."
-#: doc/classes/ProjectSettings.xml:686
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
-msgstr ""
+msgstr "Nome opcional para a camada 31 da física 2D."
-#: doc/classes/ProjectSettings.xml:689
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
-msgstr ""
+msgstr "Nome opcional para a camada 32 da física 2D."
-#: doc/classes/ProjectSettings.xml:692
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
-msgstr ""
+msgstr "Nome opcional para a camada 4 da física 2D."
-#: doc/classes/ProjectSettings.xml:695
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
-msgstr ""
+msgstr "Nome opcional para a camada 5 da física 2D."
-#: doc/classes/ProjectSettings.xml:698
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
-msgstr ""
+msgstr "Nome opcional para a camada 6 da física 2D."
-#: doc/classes/ProjectSettings.xml:701
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
-msgstr ""
+msgstr "Nome opcional para a camada 7 da física 2D."
-#: doc/classes/ProjectSettings.xml:704
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
-msgstr ""
+msgstr "Nome opcional para a camada 8 da física 2D."
-#: doc/classes/ProjectSettings.xml:707
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
-msgstr ""
+msgstr "Nome opcional para a camada 9 da física 2D."
-#: doc/classes/ProjectSettings.xml:710
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
-msgstr ""
+msgstr "Nome opcional para a camada 1 da renderização 2D."
-#: doc/classes/ProjectSettings.xml:713
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
-msgstr ""
+msgstr "Nome opcional para a camada 10 da renderização 2D."
-#: doc/classes/ProjectSettings.xml:716
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
-msgstr ""
+msgstr "Nome opcional para a camada 11 da renderização 2D."
-#: doc/classes/ProjectSettings.xml:719
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
-msgstr ""
+msgstr "Nome opcional para a camada 12 da renderização 2D."
-#: doc/classes/ProjectSettings.xml:722
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
-msgstr ""
+msgstr "Nome opcional para a camada 13 da renderização 2D."
-#: doc/classes/ProjectSettings.xml:725
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
-msgstr ""
+msgstr "Nome opcional para a camada 14 da renderização 2D."
-#: doc/classes/ProjectSettings.xml:728
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
-msgstr ""
+msgstr "Nome opcional para a camada 15 da renderização 2D."
-#: doc/classes/ProjectSettings.xml:731
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
-msgstr ""
+msgstr "Nome opcional para a camada 16 da renderização 2D."
-#: doc/classes/ProjectSettings.xml:734
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
-msgstr ""
+msgstr "Nome opcional para a camada 17 da renderização 2D."
-#: doc/classes/ProjectSettings.xml:737
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
-msgstr ""
+msgstr "Nome opcional para a camada 18 da renderização 2D."
-#: doc/classes/ProjectSettings.xml:740
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
-msgstr ""
+msgstr "Nome opcional para a camada 19 da renderização 2D."
-#: doc/classes/ProjectSettings.xml:743
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
-msgstr ""
+msgstr "Nome opcional para a camada 2 da renderização 2D."
-#: doc/classes/ProjectSettings.xml:746
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
-msgstr ""
+msgstr "Nome opcional para a camada 20 da renderização 2D."
-#: doc/classes/ProjectSettings.xml:749
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
-msgstr ""
+msgstr "Nome opcional para a camada 3 da renderização 2D."
-#: doc/classes/ProjectSettings.xml:752
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
-msgstr ""
+msgstr "Nome opcional para a camada 4 da renderização 2D."
-#: doc/classes/ProjectSettings.xml:755
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
-msgstr ""
+msgstr "Nome opcional para a camada 5 da renderização 2D."
-#: doc/classes/ProjectSettings.xml:758
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
-msgstr ""
+msgstr "Nome opcional para a camada 6 da renderização 2D."
-#: doc/classes/ProjectSettings.xml:761
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
-msgstr ""
+msgstr "Nome opcional para a camada 7 da renderização 2D."
-#: doc/classes/ProjectSettings.xml:764
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
-msgstr ""
+msgstr "Nome opcional para a camada 8 da renderização 2D."
-#: doc/classes/ProjectSettings.xml:767
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
-msgstr ""
+msgstr "Nome opcional para a camada 9 da renderização 2D."
-#: doc/classes/ProjectSettings.xml:770
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:773
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:776
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:779
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:782
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:785
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:788
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:791
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:794
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:797
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:800
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:803
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:806
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:809
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:812
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:815
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:818
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:821
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:824
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:827
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:830
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:833
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:836
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:839
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:842
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:845
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:848
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:851
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:854
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:857
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:860
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:863
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:866
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
-msgstr ""
+msgstr "Nome opcional para a camada 1 da renderização 3D."
-#: doc/classes/ProjectSettings.xml:869
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
-msgstr ""
+msgstr "Nome opcional para a camada 10 da renderização 3D."
-#: doc/classes/ProjectSettings.xml:872
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
-msgstr ""
+msgstr "Nome opcional para a camada 11 da renderização 3D."
-#: doc/classes/ProjectSettings.xml:875
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
-msgstr ""
+msgstr "Nome opcional para a camada 12 da renderização 3D."
-#: doc/classes/ProjectSettings.xml:878
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
-msgstr ""
+msgstr "Nome opcional para a camada 13 da renderização 3D."
-#: doc/classes/ProjectSettings.xml:881
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
-msgstr ""
+msgstr "Nome opcional para a camada 14 da renderização 3D"
-#: doc/classes/ProjectSettings.xml:884
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
-msgstr ""
+msgstr "Nome opcional para a camada 15 da renderização 3D."
-#: doc/classes/ProjectSettings.xml:887
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
-msgstr ""
+msgstr "Nome opcional para a camada 16 da renderização 3D."
-#: doc/classes/ProjectSettings.xml:890
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
-msgstr ""
+msgstr "Nome opcional para a camada 17 da renderização 3D."
-#: doc/classes/ProjectSettings.xml:893
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
-msgstr ""
+msgstr "Nome opcional para a camada 18 da renderização 3D."
-#: doc/classes/ProjectSettings.xml:896
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
-msgstr ""
+msgstr "Nome opcional para a camada 19 da renderização 3D."
-#: doc/classes/ProjectSettings.xml:899
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
-msgstr ""
+msgstr "Nome opcional para a camada 2 da renderização 3D."
-#: doc/classes/ProjectSettings.xml:902
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
-msgstr ""
+msgstr "Nome opcional para a camada 20 da renderização 3D."
-#: doc/classes/ProjectSettings.xml:905
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
-msgstr ""
+msgstr "Nome opcional para a camada 3 da renderização 3D."
-#: doc/classes/ProjectSettings.xml:908
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
-msgstr ""
+msgstr "Nome opcional para a camada 4 da renderização 3D."
-#: doc/classes/ProjectSettings.xml:911
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
-msgstr ""
+msgstr "Nome opcional para a camada 5 da renderização 3D."
-#: doc/classes/ProjectSettings.xml:914
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
-msgstr ""
+msgstr "Nome opcional para a camada 6 da renderização 3D."
-#: doc/classes/ProjectSettings.xml:917
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
-msgstr ""
+msgstr "Nome opcional para a camada 7 da renderização 3D."
-#: doc/classes/ProjectSettings.xml:920
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
-msgstr ""
+msgstr "Nome opcional para a camada 8 da renderização 3D."
-#: doc/classes/ProjectSettings.xml:923
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
-msgstr ""
+msgstr "Nome opcional para a camada 9 da renderização 3D."
-#: doc/classes/ProjectSettings.xml:926
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:929
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:932
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:935
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:938
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:941
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:946
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:949
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -45809,92 +46073,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:952
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:955
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:958
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:961
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:964
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:967
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:970
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:973
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:976
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:979
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:982
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:985
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:988
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:991
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:994
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:997
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1000
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1003
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -45904,33 +46168,33 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1007
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1010
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1013
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1017
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1021
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45943,7 +46207,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1025
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45955,7 +46219,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1033
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45967,7 +46231,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1041
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45980,7 +46244,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1045
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -45988,28 +46252,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1049
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1053
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1056
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1059
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -46019,25 +46283,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1063
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1066
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1069
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1072
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -46050,7 +46314,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1076
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -46062,7 +46326,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1084
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -46074,7 +46338,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1092
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -46087,13 +46351,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1096
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1099
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -46101,11 +46365,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1103
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1106
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -46119,7 +46383,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1112
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -46128,7 +46392,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1116
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -46144,7 +46408,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1121
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -46154,7 +46418,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1125
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -46164,7 +46428,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1129
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -46175,7 +46439,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1133
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -46185,7 +46449,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1137
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -46193,7 +46457,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1141
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -46204,7 +46468,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1145
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -46219,7 +46483,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1151
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -46228,13 +46492,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1156
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1159
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -46243,7 +46507,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1162
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -46253,7 +46517,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1165
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -46265,7 +46529,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1168
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -46275,24 +46539,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1171
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1174
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1177
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1180
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -46301,7 +46565,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1183
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -46309,7 +46573,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1186
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -46318,7 +46582,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1189
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -46328,7 +46592,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1193
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -46336,31 +46600,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1197
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1200
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1203
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1206
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1209
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -46368,7 +46632,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1212
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -46378,46 +46642,53 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1215
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1218
+#: doc/classes/ProjectSettings.xml:1221
+msgid ""
+"iOS specific override for [member rendering/gles2/compatibility/"
+"disable_half_float], due to poor support for half-float vertex compression "
+"on many devices."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1224
msgid ""
-"If [code]true[/code] and available on the target device, enables high "
-"floating point precision for all shader computations in GLES2.\n"
+"If [code]true[/code] and available on the target Android device, enables "
+"high floating point precision for all shader computations in GLES2.\n"
"[b]Warning:[/b] High floating point precision can be extremely slow on older "
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1225
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1228
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1231
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1234
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -46425,7 +46696,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1237
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -46435,7 +46706,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1240
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -46444,7 +46715,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1243
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -46453,20 +46724,20 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1246
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1249
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1252
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -46475,7 +46746,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1255
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -46483,7 +46754,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1258
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -46492,7 +46763,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -46502,20 +46773,20 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1267
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1274
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -46524,13 +46795,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -46540,46 +46811,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1293
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1296
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1299
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1302
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1305
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -46589,7 +46860,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -46601,7 +46872,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -46609,7 +46880,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1316
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -46617,7 +46888,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -46626,7 +46897,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1323
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -46640,7 +46911,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1328
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -46650,7 +46921,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1331
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -46659,7 +46930,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1334
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -46669,54 +46940,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1337
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1340
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1343
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1346
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1349
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1352
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1355
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1358
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -46727,61 +46998,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1365
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1368
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1371
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1374
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1377
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1380
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1383
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1386
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -46792,7 +47063,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -46801,26 +47072,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1393 doc/classes/ProjectSettings.xml:1396
#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1405
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1408
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1411
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -46831,20 +47102,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1418
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -46856,52 +47127,52 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1428
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1435
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1438
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1441
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1444
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1447
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1450
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1453
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -46909,7 +47180,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -46919,10 +47190,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -46931,10 +47202,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -46943,10 +47214,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -46955,10 +47226,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -46967,10 +47238,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -47367,7 +47638,7 @@ msgstr ""
#: doc/classes/Range.xml:67
msgid "Emitted when [member value] changes."
-msgstr ""
+msgstr "Emitido quando [member value] muda."
#: doc/classes/RayCast.xml:4 doc/classes/RayCast2D.xml:4
msgid "Query the closest object intersecting a ray."
@@ -47640,40 +47911,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr ""
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -47681,14 +47966,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -49059,7 +49344,7 @@ msgstr ""
#: doc/classes/RichTextLabel.xml:377
msgid "The default text color."
-msgstr ""
+msgstr "A cor padrão do texto."
#: doc/classes/RichTextLabel.xml:380
msgid "The background The background used when the [RichTextLabel] is focused."
@@ -49073,7 +49358,7 @@ msgstr ""
#: doc/classes/RichTextLabel.xml:386
msgid "The color of the font's shadow."
-msgstr ""
+msgstr "A cor da sombra da fonte."
#: doc/classes/RichTextLabel.xml:389
msgid "The font used for italics text."
@@ -49081,7 +49366,7 @@ msgstr ""
#: doc/classes/RichTextLabel.xml:392
msgid "The vertical space between lines."
-msgstr ""
+msgstr "O espaço vertical entre linhas."
#: doc/classes/RichTextLabel.xml:395
msgid "The font used for monospace text."
@@ -49093,7 +49378,7 @@ msgstr ""
#: doc/classes/RichTextLabel.xml:401
msgid "The default text font."
-msgstr ""
+msgstr "A fonte padrão do texto."
#: doc/classes/RichTextLabel.xml:404
msgid "The color of the selection box."
@@ -50020,6 +50305,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -50037,7 +50338,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -50045,11 +50346,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -50059,19 +50360,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -50510,7 +50811,7 @@ msgstr ""
#: doc/classes/SceneTree.xml:231
msgid "The current scene."
-msgstr ""
+msgstr "A cena atual."
#: doc/classes/SceneTree.xml:234
msgid ""
@@ -50634,14 +50935,16 @@ msgid ""
"Emitted when a node's configuration changed. Only emitted in [code]tool[/"
"code] mode."
msgstr ""
+"Emitido quando a configuração de um nó muda. Só é emitido no modo "
+"[code]tool[/code]."
#: doc/classes/SceneTree.xml:324
msgid "Emitted whenever a node is removed from the [SceneTree]."
-msgstr ""
+msgstr "Emitido cada vez que um nó é removido da [SceneTree]."
#: doc/classes/SceneTree.xml:330
msgid "Emitted whenever a node is renamed."
-msgstr ""
+msgstr "Emitido cada vez que um nó é renomeado."
#: doc/classes/SceneTree.xml:335
msgid ""
@@ -50747,11 +51050,11 @@ msgstr ""
#: doc/classes/SceneTreeTimer.xml:22
msgid "The time remaining."
-msgstr ""
+msgstr "O tempo restante."
#: doc/classes/SceneTreeTimer.xml:28 doc/classes/Timer.xml:61
msgid "Emitted when the timer reaches 0."
-msgstr ""
+msgstr "Emitido quando o cronômetro chega ao 0."
#: doc/classes/Script.xml:4
msgid "A class stored as a resource."
@@ -50785,7 +51088,7 @@ msgstr "Retorna o script herdado diretamente por este script."
#: doc/classes/Script.xml:29
msgid "Returns the script's base type."
-msgstr ""
+msgstr "Retorna o tipo base de um script."
#: doc/classes/Script.xml:36
msgid "Returns the default value of the specified property."
@@ -51214,11 +51517,12 @@ msgstr ""
#: doc/classes/Shape2D.xml:4
msgid "Base class for all 2D shapes."
-msgstr ""
+msgstr "Classe base para todas as formas 2D."
#: doc/classes/Shape2D.xml:7
msgid "Base class for all 2D shapes. All 2D shape types inherit from this."
msgstr ""
+"Classe base para todos os formatos 2D. Todos os formatos 2D herdam disto."
#: doc/classes/Shape2D.xml:19
msgid ""
@@ -51335,7 +51639,7 @@ msgstr ""
#: doc/classes/Skeleton.xml:34
msgid "Clear all the bones in this skeleton."
-msgstr ""
+msgstr "Limpa todos os ossos neste esqueleto."
#: doc/classes/Skeleton.xml:46
msgid "Returns the bone index that matches [code]name[/code] as its name."
@@ -51405,7 +51709,7 @@ msgstr ""
#: doc/classes/Skeleton2D.xml:4
msgid "Skeleton for 2D characters and animated objects."
-msgstr ""
+msgstr "Esqueleto para personagens 2D e objetos animados."
#: doc/classes/Skeleton2D.xml:7
msgid ""
@@ -51791,7 +52095,7 @@ msgstr ""
#: doc/classes/SoftBody.xml:121
msgid "The SoftBody's mass."
-msgstr ""
+msgstr "A massa do SoftBody."
#: doc/classes/Spatial.xml:4
msgid "Most basic 3D game object, parent of all 3D-related nodes."
@@ -52076,7 +52380,7 @@ msgstr ""
#: doc/classes/Spatial.xml:284
msgid "Emitted when node visibility changes."
-msgstr ""
+msgstr "Emitido quando a visibilidade de um nó muda."
#: doc/classes/Spatial.xml:290
msgid ""
@@ -52118,7 +52422,7 @@ msgstr ""
#: doc/classes/SpatialMaterial.xml:4
msgid "Default 3D rendering material."
-msgstr ""
+msgstr "Material de renderização 3D padrão."
#: doc/classes/SpatialMaterial.xml:7
msgid ""
@@ -52174,7 +52478,7 @@ msgstr ""
#: doc/classes/SpatialMaterial.xml:61
msgid "The material's base color."
-msgstr ""
+msgstr "A cor base do material."
#: doc/classes/SpatialMaterial.xml:64
msgid ""
@@ -53539,7 +53843,7 @@ msgstr ""
#: doc/classes/Sprite.xml:51 doc/classes/Sprite3D.xml:21
msgid "The number of columns in the sprite sheet."
-msgstr ""
+msgstr "O número de colunas em uma folha de sprites."
#: doc/classes/Sprite.xml:54
msgid ""
@@ -53576,15 +53880,15 @@ msgstr ""
#: doc/classes/Sprite.xml:79 doc/classes/Sprite3D.xml:39
msgid "Emitted when the [member frame] changes."
-msgstr ""
+msgstr "Emitido quando o [member frame] muda."
#: doc/classes/Sprite.xml:84
msgid "Emitted when the [member texture] changes."
-msgstr ""
+msgstr "Emitido quando a [member texture] muda."
#: doc/classes/Sprite3D.xml:4
msgid "2D sprite node in a 3D world."
-msgstr ""
+msgstr "Nó de sprite 2D em um mundo 3D."
#: doc/classes/Sprite3D.xml:7
msgid ""
@@ -53747,7 +54051,7 @@ msgstr ""
#: doc/classes/SpriteFrames.xml:104
msgid "Changes the animation's name to [code]newname[/code]."
-msgstr ""
+msgstr "Muda o nome da animação para [code]newname[/code]."
#: doc/classes/SpriteFrames.xml:112
msgid "If [code]true[/code], the animation will loop."
@@ -55115,7 +55419,7 @@ msgstr ""
#: doc/classes/StyleBoxFlat.xml:135
msgid "Sets the color of the border."
-msgstr ""
+msgstr "Define a cor da borda."
#: doc/classes/StyleBoxFlat.xml:138
msgid "Border width for the bottom border."
@@ -55214,7 +55518,7 @@ msgstr ""
#: doc/classes/StyleBoxFlat.xml:188
msgid "The shadow size in pixels."
-msgstr ""
+msgstr "O tamanho da sombra em pixels."
#: doc/classes/StyleBoxLine.xml:4
msgid "[StyleBox] that displays a single line."
@@ -55228,7 +55532,7 @@ msgstr ""
#: doc/classes/StyleBoxLine.xml:15
msgid "The line's color."
-msgstr ""
+msgstr "A cor da linha."
#: doc/classes/StyleBoxLine.xml:18
msgid ""
@@ -55515,20 +55819,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -55539,28 +55848,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -55572,19 +55881,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
@@ -55631,10 +55940,11 @@ msgid ""
msgstr ""
#: doc/classes/TabContainer.xml:56
-#, fuzzy
msgid ""
"Returns [code]true[/code] if the tab at index [code]tab_idx[/code] is hidden."
-msgstr "Retorna [code]true[/code] se o script pode ser instanciado."
+msgstr ""
+"Retorna [code]true[/code] se a aba no índice [code]tab_idx[/code] estiver "
+"oculta."
#: doc/classes/TabContainer.xml:63 doc/classes/Tabs.xml:62
msgid ""
@@ -55739,11 +56049,11 @@ msgstr ""
#: doc/classes/TabContainer.xml:162 doc/classes/Tabs.xml:178
msgid "Emitted when switching to another tab."
-msgstr ""
+msgstr "Emitido quando mudando para outra aba."
#: doc/classes/TabContainer.xml:168
msgid "Emitted when a tab is selected, even if it is the current tab."
-msgstr ""
+msgstr "Emitido quando uma aba é selecionada, mesmo se for a aba atual."
#: doc/classes/TabContainer.xml:174 doc/classes/Tabs.xml:202
msgid "Align the tabs to the left."
@@ -55847,7 +56157,7 @@ msgstr ""
#: doc/classes/Tabs.xml:17
msgid "Adds a new tab."
-msgstr ""
+msgstr "Adiciona uma nova aba."
#: doc/classes/Tabs.xml:24
msgid "Moves the scroll view to make the tab visible."
@@ -55944,7 +56254,7 @@ msgstr ""
#: doc/classes/Tabs.xml:190
msgid "Emitted when a tab is closed."
-msgstr ""
+msgstr "Emitido quando uma taba é fechada."
#: doc/classes/Tabs.xml:196
msgid "Emitted when a tab is hovered by the mouse."
@@ -55996,7 +56306,7 @@ msgstr ""
#: doc/classes/TCP_Server.xml:4
msgid "A TCP server."
-msgstr ""
+msgstr "Um servidor TCP."
#: doc/classes/TCP_Server.xml:7
msgid ""
@@ -56136,7 +56446,7 @@ msgstr "Retorna o nome do nó em [code]idx[/code]."
#: doc/classes/TextEdit.xml:137
msgid "Returns the text of a specific line."
-msgstr ""
+msgstr "Retorna o texto de uma linha específica."
#: doc/classes/TextEdit.xml:143
msgid "Returns the amount of total lines in the text."
@@ -56206,14 +56516,18 @@ msgstr ""
#, fuzzy
msgid ""
"Returns [code]true[/code] when the specified [code]line[/code] is bookmarked."
-msgstr "Retorna [code]true[/code] se o script pode ser instanciado."
+msgstr ""
+"Retorna [code]true[/code] quando a [code]line[/code] especificada está "
+"marcada."
#: doc/classes/TextEdit.xml:240
#, fuzzy
msgid ""
"Returns [code]true[/code] when the specified [code]line[/code] has a "
"breakpoint."
-msgstr "Retorna [code]true[/code] se o script pode ser instanciado."
+msgstr ""
+"Retorna [code]true[/code] quando a [code]line[/code] especificada tem um "
+"ponto de parada."
#: doc/classes/TextEdit.xml:247
#, fuzzy
@@ -56459,7 +56773,7 @@ msgstr ""
#: doc/classes/TextEdit.xml:483
msgid "Emitted when the cursor changes."
-msgstr ""
+msgstr "Emitido quando o cursor muda."
#: doc/classes/TextEdit.xml:490
msgid "Emitted when the info icon is clicked."
@@ -56523,11 +56837,11 @@ msgstr ""
#: doc/classes/TextEdit.xml:599
msgid "Sets the default [Font]."
-msgstr ""
+msgstr "Define a [Font] padrão."
#: doc/classes/TextEdit.xml:602
msgid "Sets the font [Color]."
-msgstr ""
+msgstr "Define a [Color] da fonte."
#: doc/classes/TextEdit.xml:607
msgid ""
@@ -56574,7 +56888,7 @@ msgstr ""
#: doc/classes/Texture.xml:4
msgid "Texture for 2D and 3D."
-msgstr ""
+msgstr "Textura para 2D e 3D."
#: doc/classes/Texture.xml:7
msgid ""
@@ -56615,15 +56929,15 @@ msgstr ""
#: doc/classes/Texture.xml:60
msgid "Returns the texture height."
-msgstr ""
+msgstr "Retorna a altura da textura."
#: doc/classes/Texture.xml:66
msgid "Returns the texture size."
-msgstr ""
+msgstr "Retorna o tamanho da textura."
#: doc/classes/Texture.xml:72
msgid "Returns the texture width."
-msgstr ""
+msgstr "Retorna a largura da textura."
#: doc/classes/Texture.xml:78
#, fuzzy
@@ -56837,7 +57151,7 @@ msgstr ""
#: doc/classes/TextureLayered.xml:4
msgid "Base class for 3D texture types."
-msgstr ""
+msgstr "Classe base para tipos de textura 3D."
#: doc/classes/TextureLayered.xml:7
msgid ""
@@ -56898,7 +57212,7 @@ msgstr "Retorna o RID da tela usada por essa camada."
#: doc/classes/TextureLayered.xml:68
msgid "Specifies which [enum Flags] apply to this texture."
-msgstr ""
+msgstr "Especifica quais [enum Flags] se aplicam à esta textura."
#: doc/classes/TextureLayered.xml:73
msgid ""
@@ -57090,7 +57404,7 @@ msgstr ""
#: doc/classes/TextureRect.xml:4
msgid "Control for drawing textures."
-msgstr ""
+msgstr "Controle para desenhar texturas."
#: doc/classes/TextureRect.xml:7
msgid ""
@@ -57115,7 +57429,7 @@ msgstr ""
#: doc/classes/TextureRect.xml:30
msgid "The node's [Texture] resource."
-msgstr ""
+msgstr "O recurso [Texture] de um nó."
#: doc/classes/TextureRect.xml:35
msgid ""
@@ -57153,7 +57467,7 @@ msgstr ""
#: doc/classes/Theme.xml:17
msgid "Clears all values on the theme."
-msgstr ""
+msgstr "Limpa todos os valores no tema."
#: doc/classes/Theme.xml:25
msgid ""
@@ -57174,10 +57488,10 @@ msgid ""
msgstr ""
#: doc/classes/Theme.xml:49
-#, fuzzy
msgid ""
"Clears the icon at [code]name[/code] if the theme has [code]node_type[/code]."
-msgstr "Retorna o nome do nó em [code]idx[/code]."
+msgstr ""
+"Limpa o ícone em [code]name[/code] se o tema tiver [code]node_type[/code]."
#: doc/classes/Theme.xml:57
msgid ""
@@ -58384,26 +58698,33 @@ msgid "Text [Color] used when the [ToolButton] is disabled."
msgstr ""
#: doc/classes/ToolButton.xml:39
-msgid "Text [Color] used when the [ToolButton] is being hovered."
+msgid ""
+"Text [Color] used when the [ToolButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/ToolButton.xml:42
-msgid "Text [Color] used when the [ToolButton] is being pressed."
+msgid "Text [Color] used when the [ToolButton] is being hovered."
msgstr ""
#: doc/classes/ToolButton.xml:45
-msgid "[StyleBox] used when the [ToolButton] is being hovered."
+msgid "Text [Color] used when the [ToolButton] is being pressed."
msgstr ""
#: doc/classes/ToolButton.xml:48
-msgid "The horizontal space between [ToolButton]'s icon and text."
+msgid "[StyleBox] used when the [ToolButton] is being hovered."
msgstr ""
#: doc/classes/ToolButton.xml:51
-msgid "Default [StyleBox] for the [ToolButton]."
+msgid "The horizontal space between [ToolButton]'s icon and text."
msgstr ""
#: doc/classes/ToolButton.xml:54
+msgid "Default [StyleBox] for the [ToolButton]."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:57
msgid "[StyleBox] used when the [ToolButton] is being pressed."
msgstr ""
@@ -58456,7 +58777,7 @@ msgstr ""
#: doc/classes/TouchScreenButton.xml:39
msgid "The button's shape."
-msgstr ""
+msgstr "O formato do botão."
#: doc/classes/TouchScreenButton.xml:42
msgid ""
@@ -58475,15 +58796,15 @@ msgstr ""
#: doc/classes/TouchScreenButton.xml:54
msgid "Emitted when the button is pressed (down)."
-msgstr ""
+msgstr "Emitido quando o botão é pressionado (baixo)."
#: doc/classes/TouchScreenButton.xml:59
msgid "Emitted when the button is released (up)."
-msgstr ""
+msgstr "Emitido quando o botão é solto (cima)."
#: doc/classes/TouchScreenButton.xml:65
msgid "Always visible."
-msgstr ""
+msgstr "Sempre visível."
#: doc/classes/TouchScreenButton.xml:68
msgid "Visible on touch screens only."
@@ -58683,7 +59004,7 @@ msgstr ""
#: doc/classes/Transform2D.xml:78
msgid "Returns the scale."
-msgstr ""
+msgstr "Retorna a escala."
#: doc/classes/Transform2D.xml:86
msgid ""
@@ -58782,7 +59103,7 @@ msgstr ""
#: doc/classes/Translation.xml:33
msgid "Erases a message."
-msgstr ""
+msgstr "Apaga uma mensagem."
#: doc/classes/Translation.xml:40
msgid "Returns a message's translation."
@@ -59040,7 +59361,7 @@ msgstr ""
#: doc/classes/Tree.xml:200
msgid "Sets the title of a column."
-msgstr ""
+msgstr "Define o título de uma coluna."
#: doc/classes/Tree.xml:207
msgid "If [code]true[/code], column titles are visible."
@@ -59133,19 +59454,19 @@ msgstr ""
#: doc/classes/Tree.xml:298
msgid "Emitted when an item is edited."
-msgstr ""
+msgstr "Emitido quando um item é editado."
#: doc/classes/Tree.xml:303
msgid "Emitted when an item is edited using the right mouse button."
-msgstr ""
+msgstr "Emitido quando um item é editado com botão direito do mouse."
#: doc/classes/Tree.xml:309
msgid "Emitted when an item is selected with the right mouse button."
-msgstr ""
+msgstr "Emitido quando um item é selecionado com o botão direito do mouse."
#: doc/classes/Tree.xml:314
msgid "Emitted when an item is selected."
-msgstr ""
+msgstr "Emitido quando um item é selecionado."
#: doc/classes/Tree.xml:322
msgid ""
@@ -59156,6 +59477,8 @@ msgstr ""
#: doc/classes/Tree.xml:327
msgid "Emitted when a left mouse button click does not select any item."
msgstr ""
+"Emitido quando um clique com o botão esquerdo do mouse não seleciona nenhum "
+"item."
#: doc/classes/Tree.xml:333
msgid ""
@@ -59912,7 +60235,7 @@ msgstr ""
#: doc/classes/Tween.xml:200
msgid "Stops animating all tweens."
-msgstr ""
+msgstr "Para de animar todos os tweens."
#: doc/classes/Tween.xml:215
msgid ""
@@ -59964,11 +60287,11 @@ msgstr ""
#: doc/classes/Tween.xml:263
msgid "Emitted when a tween ends."
-msgstr ""
+msgstr "Emitido quando um tween termina."
#: doc/classes/Tween.xml:270
msgid "Emitted when a tween starts."
-msgstr ""
+msgstr "Emitido quando um tween começa."
#: doc/classes/Tween.xml:279
msgid "Emitted at each step of the animation."
@@ -60490,7 +60813,7 @@ msgstr ""
#: modules/upnp/doc_classes/UPNP.xml:170
msgid "The action failed."
-msgstr ""
+msgstr "A ação falhou."
#: modules/upnp/doc_classes/UPNP.xml:173
msgid ""
@@ -60554,15 +60877,15 @@ msgstr ""
#: modules/upnp/doc_classes/UPNP.xml:212
msgid "Invalid duration."
-msgstr ""
+msgstr "Duração inválida."
#: modules/upnp/doc_classes/UPNP.xml:215
msgid "Invalid arguments."
-msgstr ""
+msgstr "Argumentos inválidos."
#: modules/upnp/doc_classes/UPNP.xml:218
msgid "Invalid response."
-msgstr ""
+msgstr "Resposta inválida."
#: modules/upnp/doc_classes/UPNP.xml:221
msgid "Invalid parameter."
@@ -60571,7 +60894,7 @@ msgstr ""
#: modules/upnp/doc_classes/UPNP.xml:224
#: modules/upnp/doc_classes/UPNPDevice.xml:69
msgid "HTTP error."
-msgstr ""
+msgstr "Erro HTTP."
#: modules/upnp/doc_classes/UPNP.xml:227
msgid "Socket error."
@@ -60659,11 +60982,11 @@ msgstr ""
#: modules/upnp/doc_classes/UPNPDevice.xml:61
msgid "Service type."
-msgstr ""
+msgstr "Tipo de serviço."
#: modules/upnp/doc_classes/UPNPDevice.xml:66
msgid "OK."
-msgstr ""
+msgstr "OK."
#: modules/upnp/doc_classes/UPNPDevice.xml:72
msgid "Empty HTTP response."
@@ -60679,7 +61002,7 @@ msgstr ""
#: modules/upnp/doc_classes/UPNPDevice.xml:81
msgid "Disconnected."
-msgstr ""
+msgstr "Desconectado."
#: modules/upnp/doc_classes/UPNPDevice.xml:84
msgid "Unknown device."
@@ -60687,7 +61010,7 @@ msgstr ""
#: modules/upnp/doc_classes/UPNPDevice.xml:87
msgid "Invalid control."
-msgstr ""
+msgstr "Controle inválido."
#: modules/upnp/doc_classes/UPNPDevice.xml:90
msgid "Memory allocation error."
@@ -60802,7 +61125,7 @@ msgstr ""
#: doc/classes/Vector2.xml:4
msgid "Vector used for 2D math."
-msgstr ""
+msgstr "Vetor utilizado para matemática 2D."
#: doc/classes/Vector2.xml:7
msgid ""
@@ -60938,11 +61261,12 @@ msgid ""
msgstr ""
#: doc/classes/Vector2.xml:149 doc/classes/Vector3.xml:125
-#, fuzzy
msgid ""
"Returns [code]true[/code] if the vector is normalized, [code]false[/code] "
"otherwise."
-msgstr "Retorna [code]true[/code] se o script pode ser instanciado."
+msgstr ""
+"Retorna [code]true[/code] se o vetor for normalizado, [code]false[/code] "
+"caso contrário."
#: doc/classes/Vector2.xml:155 doc/classes/Vector3.xml:131
msgid "Returns the length (magnitude) of this vector."
@@ -61090,7 +61414,7 @@ msgstr ""
#: doc/classes/Vector3.xml:4
msgid "Vector used for 3D math."
-msgstr ""
+msgstr "Vetor utilizado para matemática 3D."
#: doc/classes/Vector3.xml:7
msgid ""
@@ -61569,15 +61893,15 @@ msgstr ""
#: doc/classes/VideoPlayer.xml:75
msgid "Audio volume as a linear value."
-msgstr ""
+msgstr "Volume do áudio como um valor linear."
#: doc/classes/VideoPlayer.xml:78
msgid "Audio volume in dB."
-msgstr ""
+msgstr "Volume do áudio em dB."
#: doc/classes/VideoPlayer.xml:84
msgid "Emitted when playback is finished."
-msgstr ""
+msgstr "Emitido quando a reprodução termina."
#: doc/classes/VideoStream.xml:4
msgid "Base resource for video streams."
@@ -61718,11 +62042,11 @@ msgstr ""
#: doc/classes/Viewport.xml:34
msgid "Returns the 2D world of the viewport."
-msgstr ""
+msgstr "Retorna o mundo 2D do viewport."
#: doc/classes/Viewport.xml:40
msgid "Returns the active 3D camera."
-msgstr ""
+msgstr "Retorna a câmera 3D ativa."
#: doc/classes/Viewport.xml:46
msgid "Returns the total transform of the viewport."
@@ -62131,7 +62455,7 @@ msgstr ""
#: doc/classes/Viewport.xml:371
msgid "Objects are displayed normally."
-msgstr ""
+msgstr "Objetos são exibidos normalmente."
#: doc/classes/Viewport.xml:374
msgid "Objects are displayed without light information."
@@ -62410,7 +62734,7 @@ msgstr ""
#: doc/classes/VisibilityNotifier.xml:42
msgid "Emitted when the VisibilityNotifier enters the screen."
-msgstr ""
+msgstr "Emitido quando o VisibilityNotifier entra na tela."
#: doc/classes/VisibilityNotifier.xml:47
#, fuzzy
@@ -62445,11 +62769,11 @@ msgstr ""
#: doc/classes/VisibilityNotifier2D.xml:31
msgid "Emitted when the VisibilityNotifier2D enters the screen."
-msgstr ""
+msgstr "Emitido quando o VisibilityNotifier2D entra na tela."
#: doc/classes/VisibilityNotifier2D.xml:36
msgid "Emitted when the VisibilityNotifier2D exits the screen."
-msgstr ""
+msgstr "Emitido quando o VisibilityNotifier2D sai da tela."
#: doc/classes/VisibilityNotifier2D.xml:42
msgid "Emitted when the VisibilityNotifier2D enters a [Viewport]'s view."
@@ -62625,7 +62949,7 @@ msgstr ""
#: modules/visual_script/doc_classes/VisualScript.xml:165
msgid "Returns a node's position in pixels."
-msgstr ""
+msgstr "Retorna a posição de um nó em pixels."
#: modules/visual_script/doc_classes/VisualScript.xml:172
msgid "Returns the default (initial) value of a variable."
@@ -62675,7 +62999,7 @@ msgstr ""
#: modules/visual_script/doc_classes/VisualScript.xml:258
msgid "Remove a specific node."
-msgstr ""
+msgstr "Remove um nó específico."
#: modules/visual_script/doc_classes/VisualScript.xml:265
msgid "Remove a variable with the given name."
@@ -62683,15 +63007,15 @@ msgstr ""
#: modules/visual_script/doc_classes/VisualScript.xml:273
msgid "Change the name of a custom signal."
-msgstr ""
+msgstr "Muda o nome de um sinal customizado."
#: modules/visual_script/doc_classes/VisualScript.xml:281
msgid "Change the name of a function."
-msgstr ""
+msgstr "Muda o nome de uma função."
#: modules/visual_script/doc_classes/VisualScript.xml:289
msgid "Change the name of a variable."
-msgstr ""
+msgstr "Muda o nome de uma variável."
#: modules/visual_script/doc_classes/VisualScript.xml:299
msgid ""
@@ -62717,7 +63041,7 @@ msgstr ""
#: modules/visual_script/doc_classes/VisualScript.xml:334
msgid "Position a node on the screen."
-msgstr ""
+msgstr "Posiciona um nó na tela."
#: modules/visual_script/doc_classes/VisualScript.xml:342
msgid "Change the default (initial) value of a variable."
@@ -63149,11 +63473,11 @@ msgstr ""
#: modules/visual_script/doc_classes/VisualScriptConstant.xml:19
msgid "The constant's type."
-msgstr ""
+msgstr "O tipo do constante."
#: modules/visual_script/doc_classes/VisualScriptConstant.xml:22
msgid "The constant's value."
-msgstr ""
+msgstr "O valor do constante."
#: modules/visual_script/doc_classes/VisualScriptConstructor.xml:4
msgid "A Visual Script node which calls a base type constructor."
@@ -63175,11 +63499,11 @@ msgstr ""
#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:15
msgid "Return the node's title."
-msgstr ""
+msgstr "Retorna o título do nó."
#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:21
msgid "Return the node's category."
-msgstr ""
+msgstr "Retorna a categoria do nó."
#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:27
msgid "Return the count of input value ports."
@@ -63570,7 +63894,7 @@ msgstr ""
#: modules/visual_script/doc_classes/VisualScriptInputAction.xml:15
msgid "Name of the action."
-msgstr ""
+msgstr "Nome da ação."
#: modules/visual_script/doc_classes/VisualScriptInputAction.xml:18
msgid "State of the action to check. See [enum Mode] for options."
@@ -63658,7 +63982,7 @@ msgstr ""
#: modules/visual_script/doc_classes/VisualScriptLocalVar.xml:4
msgid "Gets a local variable's value."
-msgstr ""
+msgstr "Obtém o valor de uma variável local."
#: modules/visual_script/doc_classes/VisualScriptLocalVar.xml:7
msgid ""
@@ -63673,16 +63997,16 @@ msgstr ""
#: modules/visual_script/doc_classes/VisualScriptLocalVar.xml:19
#: modules/visual_script/doc_classes/VisualScriptLocalVarSet.xml:21
msgid "The local variable's type."
-msgstr ""
+msgstr "O tipo da variável local."
#: modules/visual_script/doc_classes/VisualScriptLocalVar.xml:22
#: modules/visual_script/doc_classes/VisualScriptLocalVarSet.xml:24
msgid "The local variable's name."
-msgstr ""
+msgstr "O nome da variável local."
#: modules/visual_script/doc_classes/VisualScriptLocalVarSet.xml:4
msgid "Changes a local variable's value."
-msgstr ""
+msgstr "Muda o valor de uma variável local."
#: modules/visual_script/doc_classes/VisualScriptLocalVarSet.xml:7
msgid ""
@@ -63825,7 +64149,7 @@ msgstr ""
#: modules/visual_script/doc_classes/VisualScriptPreload.xml:19
msgid "The [Resource] to load."
-msgstr ""
+msgstr "O [Resource] para carregar."
#: modules/visual_script/doc_classes/VisualScriptPropertyGet.xml:4
msgid "A Visual Script node returning a value of a property from an [Object]."
@@ -64040,7 +64364,7 @@ msgstr ""
#: modules/visual_script/doc_classes/VisualScriptSceneNode.xml:4
msgid "Node reference."
-msgstr ""
+msgstr "Referência de nó."
#: modules/visual_script/doc_classes/VisualScriptSceneNode.xml:7
msgid ""
@@ -64125,7 +64449,7 @@ msgstr ""
#: modules/visual_script/doc_classes/VisualScriptSubCall.xml:16
msgid "Called by this node."
-msgstr ""
+msgstr "Chamado por este nó."
#: modules/visual_script/doc_classes/VisualScriptSwitch.xml:4
msgid "Branches program flow based on a given input's value."
@@ -64169,7 +64493,7 @@ msgstr ""
#: modules/visual_script/doc_classes/VisualScriptVariableGet.xml:4
msgid "Gets a variable's value."
-msgstr ""
+msgstr "Obtém o valor de uma variável."
#: modules/visual_script/doc_classes/VisualScriptVariableGet.xml:7
msgid ""
@@ -64184,11 +64508,11 @@ msgstr ""
#: modules/visual_script/doc_classes/VisualScriptVariableGet.xml:19
#: modules/visual_script/doc_classes/VisualScriptVariableSet.xml:20
msgid "The variable's name."
-msgstr ""
+msgstr "Muda o nome de uma variável."
#: modules/visual_script/doc_classes/VisualScriptVariableSet.xml:4
msgid "Changes a variable's value."
-msgstr ""
+msgstr "Muda o valor de uma variável."
#: modules/visual_script/doc_classes/VisualScriptVariableSet.xml:7
msgid ""
@@ -65217,7 +65541,7 @@ msgstr ""
#: doc/classes/VisualServer.xml:1415
msgid "Function not implemented in Godot 3.x."
-msgstr ""
+msgstr "Função não implementada no Godot 3.x."
#: doc/classes/VisualServer.xml:1423
msgid ""
@@ -66081,7 +66405,7 @@ msgstr ""
#: doc/classes/VisualServer.xml:2569
msgid "Returns the parameters of a shader."
-msgstr ""
+msgstr "Retorna os parâmetros de uma shader."
#: doc/classes/VisualServer.xml:2577
msgid "Sets a shader's code."
@@ -66217,7 +66541,7 @@ msgstr "Retorna o tipo do nó em at [code]idx[/code]."
#: doc/classes/VisualServer.xml:2779
msgid "Returns the texture's width."
-msgstr ""
+msgstr "Retorna a largura da textura."
#: doc/classes/VisualServer.xml:2788
msgid ""
@@ -66254,7 +66578,7 @@ msgstr ""
#: doc/classes/VisualServer.xml:2852
msgid "Sets a viewport's camera."
-msgstr ""
+msgstr "Define a câmera de um viewport."
#: doc/classes/VisualServer.xml:2860
msgid "Sets a viewport's canvas."
@@ -66730,7 +67054,7 @@ msgstr ""
#: doc/classes/VisualServer.xml:3378
msgid "The light's energy."
-msgstr ""
+msgstr "A energia da luz."
#: doc/classes/VisualServer.xml:3381
msgid "Secondary multiplier used with indirect light (light bounces)."
@@ -66846,7 +67170,7 @@ msgstr ""
#: doc/classes/VisualServer.xml:3462
msgid "Do not update the viewport."
-msgstr ""
+msgstr "Não atualize o viewport."
#: doc/classes/VisualServer.xml:3465
msgid "Update the viewport once then set to disabled."
@@ -67744,7 +68068,7 @@ msgstr ""
#: doc/classes/VisualShaderNodeCompare.xml:32
msgid "A boolean type."
-msgstr ""
+msgstr "Um tipo boleano."
#: doc/classes/VisualShaderNodeCompare.xml:35
msgid "A transform ([code]mat4[/code]) type."
@@ -68911,15 +69235,15 @@ msgstr ""
#: doc/classes/VisualShaderNodeVectorOp.xml:20
msgid "Adds two vectors."
-msgstr ""
+msgstr "Soma dois vetores."
#: doc/classes/VisualShaderNodeVectorOp.xml:23
msgid "Subtracts a vector from a vector."
-msgstr ""
+msgstr "Subtrai um vetor de outro vetor."
#: doc/classes/VisualShaderNodeVectorOp.xml:26
msgid "Multiplies two vectors."
-msgstr ""
+msgstr "Multiplica dois vetores."
#: doc/classes/VisualShaderNodeVectorOp.xml:29
msgid "Divides vector by vector."
@@ -69229,7 +69553,7 @@ msgstr ""
#: modules/webrtc/doc_classes/WebRTCDataChannel.xml:108
msgid "The channel was closed, or connection failed."
-msgstr ""
+msgstr "O canal foi fechado, ou a conexão falhou."
#: modules/webrtc/doc_classes/WebRTCMultiplayer.xml:4
msgid ""
@@ -69586,7 +69910,7 @@ msgstr ""
#: modules/websocket/doc_classes/WebSocketClient.xml:70
msgid "Emitted when the connection to the server fails."
-msgstr ""
+msgstr "Emitido quando uma conexão ao servidor falha."
#: modules/websocket/doc_classes/WebSocketClient.xml:76
msgid ""
@@ -70165,7 +70489,7 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml:238
msgid "Emitted when [member visibility_state] has changed."
-msgstr ""
+msgstr "Emitido quando [member visibility_state] muda."
#: doc/classes/WindowDialog.xml:4
msgid "Base class for window dialogs."
@@ -70224,7 +70548,7 @@ msgstr ""
#: doc/classes/WindowDialog.xml:50
msgid "The color of the title text."
-msgstr ""
+msgstr "A cor do texto de título."
#: doc/classes/WindowDialog.xml:53
msgid "The font used to draw the title."
@@ -70365,7 +70689,7 @@ msgstr ""
#: doc/classes/XMLParser.xml:15
msgid "Gets the amount of attributes in the current element."
-msgstr ""
+msgstr "Obtém a quantidade de atributos no elemento atual."
#: doc/classes/XMLParser.xml:22
msgid ""
@@ -70431,7 +70755,7 @@ msgstr ""
#: doc/classes/XMLParser.xml:93
msgid "Opens an XML file for parsing. This returns an error code."
-msgstr ""
+msgstr "Abre um arquivo XML para análise. Isto devolve um código de erro."
#: doc/classes/XMLParser.xml:100
msgid "Opens an XML raw buffer for parsing. This returns an error code."
@@ -70439,7 +70763,7 @@ msgstr ""
#: doc/classes/XMLParser.xml:106
msgid "Reads the next node of the file. This returns an error code."
-msgstr ""
+msgstr "Lê o próximo nó do arquivo. Isto retorna um código de erro."
#: doc/classes/XMLParser.xml:113
msgid ""
@@ -70463,27 +70787,27 @@ msgstr ""
#: doc/classes/XMLParser.xml:131
msgid "End of element."
-msgstr ""
+msgstr "Fim do elemento."
#: doc/classes/XMLParser.xml:134
msgid "Text node."
-msgstr ""
+msgstr "Nó de texto."
#: doc/classes/XMLParser.xml:137
msgid "Comment node."
-msgstr ""
+msgstr "Nó de comentário."
#: doc/classes/XMLParser.xml:140
msgid "CDATA content."
-msgstr ""
+msgstr "Conteúdo CDATA."
#: doc/classes/XMLParser.xml:143
msgid "Unknown node."
-msgstr ""
+msgstr "Nó desconhecido."
#: doc/classes/YSort.xml:4
msgid "Sort all child nodes based on their Y positions."
-msgstr ""
+msgstr "Ordena todos os nós filhos baseado em suas posições Y."
#: doc/classes/YSort.xml:7
msgid ""
diff --git a/doc/translations/ro.po b/doc/translations/ro.po
index e07d09f6e0..cdcfbf3f29 100644
--- a/doc/translations/ro.po
+++ b/doc/translations/ro.po
@@ -6,12 +6,13 @@
# EVOKZH <avip.ady@gmail.com>, 2020.
# f0roots <f0rootss@gmail.com>, 2020.
# Pierre Stempin <pierre.stempin@gmail.com>, 2020.
+# FlooferLand <yunaflarf@gmail.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2020-10-12 09:28+0000\n"
-"Last-Translator: Pierre Stempin <pierre.stempin@gmail.com>\n"
+"PO-Revision-Date: 2021-11-07 09:45+0000\n"
+"Last-Translator: FlooferLand <yunaflarf@gmail.com>\n"
"Language-Team: Romanian <https://hosted.weblate.org/projects/godot-engine/"
"godot-class-reference/ro/>\n"
"Language: ro\n"
@@ -20,51 +21,51 @@ msgstr ""
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < "
"20)) ? 1 : 2;\n"
-"X-Generator: Weblate 4.3-dev\n"
+"X-Generator: Weblate 4.9-dev\n"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Description"
msgstr "Descriere"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Tutorials"
msgstr "Tutoriale"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Properties"
msgstr "Proprietăți"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Methods"
msgstr "Metode"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Theme Properties"
msgstr "Proprietățile Temei"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Signals"
msgstr "Semnale"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Enumerations"
msgstr "Enumerări"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Constants"
msgstr "Constante"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Property Descriptions"
msgstr "Descrieri Proprietate"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Method Descriptions"
msgstr "Descrierile Metodei"
#: modules/gdscript/doc_classes/@GDScript.xml:4
msgid "Built-in GDScript functions."
-msgstr ""
+msgstr "Funcțiile incorporate GDScript."
#: modules/gdscript/doc_classes/@GDScript.xml:7
msgid ""
@@ -105,6 +106,11 @@ msgid ""
"a = abs(-1) # a is 1\n"
"[/codeblock]"
msgstr ""
+"Întoarce valoarea absolută parametrului [code]s[/code] (adică valoarea "
+"pozitivă).\n"
+"[codeblock]\n"
+"a = abs(-1) # a este 1\n"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:55
msgid ""
@@ -196,6 +202,8 @@ msgid ""
"axis) to the polar coordinate system (a distance from the origin and an "
"angle)."
msgstr ""
+"Schimbă un punct 2D din sistemul de coordonate cartezian (axa X si Z) la "
+"sistemul de coordonate polar (o distanță de la origine și un unghi)."
#: modules/gdscript/doc_classes/@GDScript.xml:135
msgid ""
@@ -1308,7 +1316,7 @@ msgstr ""
#: doc/classes/@GlobalScope.xml:19
msgid "The [AudioServer] singleton."
-msgstr ""
+msgstr "Singletonul [AudioServer]."
#: doc/classes/@GlobalScope.xml:22
msgid "The [CameraServer] singleton."
@@ -1421,19 +1429,19 @@ msgstr ""
#: doc/classes/@GlobalScope.xml:104
msgid "Top-left corner."
-msgstr ""
+msgstr "Colțul din stânga sus."
#: doc/classes/@GlobalScope.xml:107
msgid "Top-right corner."
-msgstr ""
+msgstr "Colțul din dreapta sus."
#: doc/classes/@GlobalScope.xml:110
msgid "Bottom-right corner."
-msgstr ""
+msgstr "Colțul din dreapta jos."
#: doc/classes/@GlobalScope.xml:113
msgid "Bottom-left corner."
-msgstr ""
+msgstr "Colțul din stânga jos."
#: doc/classes/@GlobalScope.xml:116
msgid ""
@@ -1477,11 +1485,11 @@ msgstr ""
#: doc/classes/@GlobalScope.xml:143
msgid "Escape key."
-msgstr ""
+msgstr "Tasta de ieșire."
#: doc/classes/@GlobalScope.xml:146
msgid "Tab key."
-msgstr ""
+msgstr "Tasta tab."
#: doc/classes/@GlobalScope.xml:149
msgid "Shift+Tab key."
@@ -1489,7 +1497,7 @@ msgstr ""
#: doc/classes/@GlobalScope.xml:152
msgid "Backspace key."
-msgstr ""
+msgstr "Tasta backspace."
#: doc/classes/@GlobalScope.xml:155
msgid "Return key (on the main keyboard)."
@@ -1509,7 +1517,7 @@ msgstr ""
#: doc/classes/@GlobalScope.xml:167
msgid "Pause key."
-msgstr ""
+msgstr "Tasta de pauza."
#: doc/classes/@GlobalScope.xml:170
msgid "Print Screen key."
@@ -1585,67 +1593,67 @@ msgstr ""
#: doc/classes/@GlobalScope.xml:224
msgid "F1 key."
-msgstr ""
+msgstr "Tasta F1."
#: doc/classes/@GlobalScope.xml:227
msgid "F2 key."
-msgstr ""
+msgstr "Tasta F2."
#: doc/classes/@GlobalScope.xml:230
msgid "F3 key."
-msgstr ""
+msgstr "Tasta F3."
#: doc/classes/@GlobalScope.xml:233
msgid "F4 key."
-msgstr ""
+msgstr "Tasta F4."
#: doc/classes/@GlobalScope.xml:236
msgid "F5 key."
-msgstr ""
+msgstr "Tasta F5."
#: doc/classes/@GlobalScope.xml:239
msgid "F6 key."
-msgstr ""
+msgstr "Tasta F6."
#: doc/classes/@GlobalScope.xml:242
msgid "F7 key."
-msgstr ""
+msgstr "Tasta F7."
#: doc/classes/@GlobalScope.xml:245
msgid "F8 key."
-msgstr ""
+msgstr "Tasta F8."
#: doc/classes/@GlobalScope.xml:248
msgid "F9 key."
-msgstr ""
+msgstr "Tasta F9."
#: doc/classes/@GlobalScope.xml:251
msgid "F10 key."
-msgstr ""
+msgstr "Tasta F10."
#: doc/classes/@GlobalScope.xml:254
msgid "F11 key."
-msgstr ""
+msgstr "Tasta F11."
#: doc/classes/@GlobalScope.xml:257
msgid "F12 key."
-msgstr ""
+msgstr "Tasta F12."
#: doc/classes/@GlobalScope.xml:260
msgid "F13 key."
-msgstr ""
+msgstr "Tasta F13."
#: doc/classes/@GlobalScope.xml:263
msgid "F14 key."
-msgstr ""
+msgstr "Tasta F14."
#: doc/classes/@GlobalScope.xml:266
msgid "F15 key."
-msgstr ""
+msgstr "Tasta F15."
#: doc/classes/@GlobalScope.xml:269
msgid "F16 key."
-msgstr ""
+msgstr "Tasta F16."
#: doc/classes/@GlobalScope.xml:272
msgid "Multiply (*) key on the numeric keypad."
@@ -1906,107 +1914,107 @@ msgstr ""
#: doc/classes/@GlobalScope.xml:467
msgid "! key."
-msgstr ""
+msgstr "Tasta ! ."
#: doc/classes/@GlobalScope.xml:470
msgid "\" key."
-msgstr ""
+msgstr "Tasta \"."
#: doc/classes/@GlobalScope.xml:473
msgid "# key."
-msgstr ""
+msgstr "Tasta #."
#: doc/classes/@GlobalScope.xml:476
msgid "$ key."
-msgstr ""
+msgstr "Tasta $."
#: doc/classes/@GlobalScope.xml:479
msgid "% key."
-msgstr ""
+msgstr "Tasta %."
#: doc/classes/@GlobalScope.xml:482
msgid "& key."
-msgstr ""
+msgstr "Tasta &."
#: doc/classes/@GlobalScope.xml:485
msgid "' key."
-msgstr ""
+msgstr "Tasta '"
#: doc/classes/@GlobalScope.xml:488
msgid "( key."
-msgstr ""
+msgstr "Tasta (."
#: doc/classes/@GlobalScope.xml:491
msgid ") key."
-msgstr ""
+msgstr "Tasta )"
#: doc/classes/@GlobalScope.xml:494
msgid "* key."
-msgstr ""
+msgstr "Tasta *"
#: doc/classes/@GlobalScope.xml:497
msgid "+ key."
-msgstr ""
+msgstr "Tasta +"
#: doc/classes/@GlobalScope.xml:500
msgid ", key."
-msgstr ""
+msgstr "Tasta ,"
#: doc/classes/@GlobalScope.xml:503
msgid "- key."
-msgstr ""
+msgstr "Tasta -"
#: doc/classes/@GlobalScope.xml:506
msgid ". key."
-msgstr ""
+msgstr "Tasta ."
#: doc/classes/@GlobalScope.xml:509
msgid "/ key."
-msgstr ""
+msgstr "Tasta /"
#: doc/classes/@GlobalScope.xml:512
msgid "Number 0."
-msgstr ""
+msgstr "Numărul 0."
#: doc/classes/@GlobalScope.xml:515
msgid "Number 1."
-msgstr ""
+msgstr "Numărul 1."
#: doc/classes/@GlobalScope.xml:518
msgid "Number 2."
-msgstr ""
+msgstr "Numărul 2."
#: doc/classes/@GlobalScope.xml:521
msgid "Number 3."
-msgstr ""
+msgstr "Numărul 3."
#: doc/classes/@GlobalScope.xml:524
msgid "Number 4."
-msgstr ""
+msgstr "Numărul 4."
#: doc/classes/@GlobalScope.xml:527
msgid "Number 5."
-msgstr ""
+msgstr "Numărul 5."
#: doc/classes/@GlobalScope.xml:530
msgid "Number 6."
-msgstr ""
+msgstr "Numărul 6."
#: doc/classes/@GlobalScope.xml:533
msgid "Number 7."
-msgstr ""
+msgstr "Numărul 7."
#: doc/classes/@GlobalScope.xml:536
msgid "Number 8."
-msgstr ""
+msgstr "Numărul 8."
#: doc/classes/@GlobalScope.xml:539
msgid "Number 9."
-msgstr ""
+msgstr "Numărul 9."
#: doc/classes/@GlobalScope.xml:542
msgid ": key."
-msgstr ""
+msgstr "Tasta :"
#: doc/classes/@GlobalScope.xml:545
msgid "; key."
@@ -2034,147 +2042,147 @@ msgstr ""
#: doc/classes/@GlobalScope.xml:563
msgid "A key."
-msgstr ""
+msgstr "Tasta A."
#: doc/classes/@GlobalScope.xml:566
msgid "B key."
-msgstr ""
+msgstr "Tasta B."
#: doc/classes/@GlobalScope.xml:569
msgid "C key."
-msgstr ""
+msgstr "Tasta C."
#: doc/classes/@GlobalScope.xml:572
msgid "D key."
-msgstr ""
+msgstr "Tasta D."
#: doc/classes/@GlobalScope.xml:575
msgid "E key."
-msgstr ""
+msgstr "Tasta E."
#: doc/classes/@GlobalScope.xml:578
msgid "F key."
-msgstr ""
+msgstr "Tasta F."
#: doc/classes/@GlobalScope.xml:581
msgid "G key."
-msgstr ""
+msgstr "Tasta G."
#: doc/classes/@GlobalScope.xml:584
msgid "H key."
-msgstr ""
+msgstr "Tasta H."
#: doc/classes/@GlobalScope.xml:587
msgid "I key."
-msgstr ""
+msgstr "Tasta I."
#: doc/classes/@GlobalScope.xml:590
msgid "J key."
-msgstr ""
+msgstr "Tasta J."
#: doc/classes/@GlobalScope.xml:593
msgid "K key."
-msgstr ""
+msgstr "Tasta K."
#: doc/classes/@GlobalScope.xml:596
msgid "L key."
-msgstr ""
+msgstr "Tasta L."
#: doc/classes/@GlobalScope.xml:599
msgid "M key."
-msgstr ""
+msgstr "Tasta M."
#: doc/classes/@GlobalScope.xml:602
msgid "N key."
-msgstr ""
+msgstr "Tasta N."
#: doc/classes/@GlobalScope.xml:605
msgid "O key."
-msgstr ""
+msgstr "Tasta O."
#: doc/classes/@GlobalScope.xml:608
msgid "P key."
-msgstr ""
+msgstr "Tasta P."
#: doc/classes/@GlobalScope.xml:611
msgid "Q key."
-msgstr ""
+msgstr "Tasta Q."
#: doc/classes/@GlobalScope.xml:614
msgid "R key."
-msgstr ""
+msgstr "Tasta R."
#: doc/classes/@GlobalScope.xml:617
msgid "S key."
-msgstr ""
+msgstr "Tasta S."
#: doc/classes/@GlobalScope.xml:620
msgid "T key."
-msgstr ""
+msgstr "Tasta T."
#: doc/classes/@GlobalScope.xml:623
msgid "U key."
-msgstr ""
+msgstr "Tasta U."
#: doc/classes/@GlobalScope.xml:626
msgid "V key."
-msgstr ""
+msgstr "Tasta V."
#: doc/classes/@GlobalScope.xml:629
msgid "W key."
-msgstr ""
+msgstr "Tasta W."
#: doc/classes/@GlobalScope.xml:632
msgid "X key."
-msgstr ""
+msgstr "Tasta X."
#: doc/classes/@GlobalScope.xml:635
msgid "Y key."
-msgstr ""
+msgstr "Tasta Y."
#: doc/classes/@GlobalScope.xml:638
msgid "Z key."
-msgstr ""
+msgstr "Tasta Z."
#: doc/classes/@GlobalScope.xml:641
msgid "[ key."
-msgstr ""
+msgstr "Tasta ["
#: doc/classes/@GlobalScope.xml:644
msgid "\\ key."
-msgstr ""
+msgstr "Tasta \\"
#: doc/classes/@GlobalScope.xml:647
msgid "] key."
-msgstr ""
+msgstr "Tasta ]"
#: doc/classes/@GlobalScope.xml:650
msgid "^ key."
-msgstr ""
+msgstr "Tasta ^"
#: doc/classes/@GlobalScope.xml:653
msgid "_ key."
-msgstr ""
+msgstr "Tasta _"
#: doc/classes/@GlobalScope.xml:656
msgid "` key."
-msgstr ""
+msgstr "Tasta `"
#: doc/classes/@GlobalScope.xml:659
msgid "{ key."
-msgstr ""
+msgstr "Tasta {"
#: doc/classes/@GlobalScope.xml:662
msgid "| key."
-msgstr ""
+msgstr "Tasta |"
#: doc/classes/@GlobalScope.xml:665
msgid "} key."
-msgstr ""
+msgstr "Tasta }"
#: doc/classes/@GlobalScope.xml:668
msgid "~ key."
-msgstr ""
+msgstr "Tasta ~"
#: doc/classes/@GlobalScope.xml:671
msgid "Non-breakable space key."
@@ -3592,112 +3600,121 @@ msgid ""
msgstr ""
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr ""
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
msgstr ""
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
msgstr ""
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
msgstr ""
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr ""
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr ""
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr ""
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
msgstr ""
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr ""
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
msgstr ""
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
msgstr ""
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr ""
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
"positive.\n"
@@ -4775,7 +4792,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -6211,21 +6228,25 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
#: doc/classes/Area.xml:17
msgid ""
-"Returns a list of intersecting [Area]s. For performance reasons (collisions "
-"are all processed at the same time) this list is modified once during the "
-"physics step, not immediately after objects are moved. Consider using "
-"signals instead."
+"Returns a list of intersecting [Area]s. The overlapping area's [member "
+"CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:23
+#: doc/classes/Area.xml:24
msgid ""
-"Returns a list of intersecting [PhysicsBody]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody]s. The overlapping body's "
+"[member CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:30
+#: doc/classes/Area.xml:32
msgid ""
"If [code]true[/code], the given area overlaps the Area.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6233,7 +6254,7 @@ msgid ""
"physics step. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:38
+#: doc/classes/Area.xml:40
msgid ""
"If [code]true[/code], the given physics body overlaps the Area.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6244,7 +6265,7 @@ msgid ""
"their tiles with collision shapes as a virtual physics body)."
msgstr ""
-#: doc/classes/Area.xml:46
+#: doc/classes/Area.xml:48
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
"velocity lost per second.\n"
@@ -6252,41 +6273,41 @@ msgid ""
"details about damping."
msgstr ""
-#: doc/classes/Area.xml:50 doc/classes/Area2D.xml:52
+#: doc/classes/Area.xml:52 doc/classes/Area2D.xml:54
msgid "The name of the area's audio bus."
msgstr ""
-#: doc/classes/Area.xml:53 doc/classes/Area2D.xml:55
+#: doc/classes/Area.xml:55 doc/classes/Area2D.xml:57
msgid ""
"If [code]true[/code], the area's audio bus overrides the default audio bus."
msgstr ""
-#: doc/classes/Area.xml:56
+#: doc/classes/Area.xml:58
msgid ""
"The area's gravity intensity (in meters per second squared). This value "
"multiplies the gravity vector. This is useful to alter the force of gravity "
"without altering its direction."
msgstr ""
-#: doc/classes/Area.xml:59 doc/classes/Area2D.xml:61
+#: doc/classes/Area.xml:61 doc/classes/Area2D.xml:63
msgid ""
"The falloff factor for point gravity. The greater the value, the faster "
"gravity decreases with distance."
msgstr ""
-#: doc/classes/Area.xml:62 doc/classes/Area2D.xml:64
+#: doc/classes/Area.xml:64 doc/classes/Area2D.xml:66
msgid ""
"If [code]true[/code], gravity is calculated from a point (set via [member "
"gravity_vec]). See also [member space_override]."
msgstr ""
-#: doc/classes/Area.xml:65 doc/classes/Area2D.xml:67
+#: doc/classes/Area.xml:67 doc/classes/Area2D.xml:69
msgid ""
"The area's gravity vector (not normalized). If gravity is a point (see "
"[member gravity_point]), this will be the point of attraction."
msgstr ""
-#: doc/classes/Area.xml:68
+#: doc/classes/Area.xml:70
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
"velocity lost per second.\n"
@@ -6294,61 +6315,61 @@ msgid ""
"about damping."
msgstr ""
-#: doc/classes/Area.xml:72 doc/classes/Area2D.xml:74
+#: doc/classes/Area.xml:74 doc/classes/Area2D.xml:76
msgid "If [code]true[/code], other monitoring areas can detect this area."
msgstr ""
-#: doc/classes/Area.xml:75 doc/classes/Area2D.xml:77
+#: doc/classes/Area.xml:77 doc/classes/Area2D.xml:79
msgid ""
"If [code]true[/code], the area detects bodies or areas entering and exiting "
"it."
msgstr ""
-#: doc/classes/Area.xml:78 doc/classes/Area2D.xml:80
+#: doc/classes/Area.xml:80 doc/classes/Area2D.xml:82
msgid "The area's priority. Higher priority areas are processed first."
msgstr ""
-#: doc/classes/Area.xml:81
+#: doc/classes/Area.xml:83
msgid ""
"The degree to which this area applies reverb to its associated audio. Ranges "
"from [code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
msgstr ""
-#: doc/classes/Area.xml:84
+#: doc/classes/Area.xml:86
msgid "If [code]true[/code], the area applies reverb to its associated audio."
msgstr ""
-#: doc/classes/Area.xml:87
+#: doc/classes/Area.xml:89
msgid "The reverb bus name to use for this area's associated audio."
msgstr ""
-#: doc/classes/Area.xml:90
+#: doc/classes/Area.xml:92
msgid ""
"The degree to which this area's reverb is a uniform effect. Ranges from "
"[code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
msgstr ""
-#: doc/classes/Area.xml:93 doc/classes/Area2D.xml:83
+#: doc/classes/Area.xml:95 doc/classes/Area2D.xml:85
msgid ""
"Override mode for gravity and damping calculations within this area. See "
"[enum SpaceOverride] for possible values."
msgstr ""
-#: doc/classes/Area.xml:100
+#: doc/classes/Area.xml:102
msgid ""
"Emitted when another Area enters this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
-#: doc/classes/Area.xml:107
+#: doc/classes/Area.xml:109
msgid ""
"Emitted when another Area exits this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
-#: doc/classes/Area.xml:117 doc/classes/Area.xml:130
+#: doc/classes/Area.xml:119 doc/classes/Area.xml:132
msgid ""
"Emitted when one of another Area's [Shape]s enters one of this Area's "
"[Shape]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6363,7 +6384,7 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:140
+#: doc/classes/Area.xml:142
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] enters this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -6372,7 +6393,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:147
+#: doc/classes/Area.xml:149
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] exits this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -6381,7 +6402,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:157 doc/classes/Area.xml:170
+#: doc/classes/Area.xml:159 doc/classes/Area.xml:172
msgid ""
"Emitted when one of a [PhysicsBody] or [GridMap]'s [Shape]s enters one of "
"this Area's [Shape]s. Requires [member monitoring] to be set to [code]true[/"
@@ -6398,29 +6419,29 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:180 doc/classes/Area2D.xml:170
+#: doc/classes/Area.xml:182 doc/classes/Area2D.xml:172
msgid "This area does not affect gravity/damping."
msgstr ""
-#: doc/classes/Area.xml:183 doc/classes/Area2D.xml:173
+#: doc/classes/Area.xml:185 doc/classes/Area2D.xml:175
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order)."
msgstr ""
-#: doc/classes/Area.xml:186 doc/classes/Area2D.xml:176
+#: doc/classes/Area.xml:188 doc/classes/Area2D.xml:178
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order), ignoring any lower priority areas."
msgstr ""
-#: doc/classes/Area.xml:189 doc/classes/Area2D.xml:179
+#: doc/classes/Area.xml:191 doc/classes/Area2D.xml:181
msgid ""
"This area replaces any gravity/damping, even the defaults, ignoring any "
"lower priority areas."
msgstr ""
-#: doc/classes/Area.xml:192 doc/classes/Area2D.xml:182
+#: doc/classes/Area.xml:194 doc/classes/Area2D.xml:184
msgid ""
"This area replaces any gravity/damping calculated so far (in [member "
"priority] order), but keeps calculating the rest of the areas."
@@ -6459,21 +6480,25 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
#: doc/classes/Area2D.xml:19
msgid ""
-"Returns a list of intersecting [Area2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [Area2D]s. The overlapping area's [member "
+"CollisionObject2D.collision_layer] must be part of this area's [member "
+"CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:25
+#: doc/classes/Area2D.xml:26
msgid ""
-"Returns a list of intersecting [PhysicsBody2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody2D]s. The overlapping body's "
+"[member CollisionObject2D.collision_layer] must be part of this area's "
+"[member CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:32
+#: doc/classes/Area2D.xml:34
msgid ""
"If [code]true[/code], the given area overlaps the Area2D.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6481,7 +6506,7 @@ msgid ""
"the physics step. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:40
+#: doc/classes/Area2D.xml:42
msgid ""
"If [code]true[/code], the given physics body overlaps the Area2D.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6492,7 +6517,7 @@ msgid ""
"register their tiles with collision shapes as a virtual physics body)."
msgstr ""
-#: doc/classes/Area2D.xml:48
+#: doc/classes/Area2D.xml:50
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
"velocity lost per second.\n"
@@ -6500,14 +6525,14 @@ msgid ""
"details about damping."
msgstr ""
-#: doc/classes/Area2D.xml:58
+#: doc/classes/Area2D.xml:60
msgid ""
"The area's gravity intensity (in pixels per second squared). This value "
"multiplies the gravity vector. This is useful to alter the force of gravity "
"without altering its direction."
msgstr ""
-#: doc/classes/Area2D.xml:70
+#: doc/classes/Area2D.xml:72
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
"velocity lost per second.\n"
@@ -6515,21 +6540,21 @@ msgid ""
"about damping."
msgstr ""
-#: doc/classes/Area2D.xml:90
+#: doc/classes/Area2D.xml:92
msgid ""
"Emitted when another Area2D enters this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-#: doc/classes/Area2D.xml:97
+#: doc/classes/Area2D.xml:99
msgid ""
"Emitted when another Area2D exits this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-#: doc/classes/Area2D.xml:107
+#: doc/classes/Area2D.xml:109
msgid ""
"Emitted when one of another Area2D's [Shape2D]s enters one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6544,7 +6569,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:120
+#: doc/classes/Area2D.xml:122
msgid ""
"Emitted when one of another Area2D's [Shape2D]s exits one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6559,7 +6584,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:130
+#: doc/classes/Area2D.xml:132
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] enters this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -6568,7 +6593,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:137
+#: doc/classes/Area2D.xml:139
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] exits this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -6577,7 +6602,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:147
+#: doc/classes/Area2D.xml:149
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s enters one "
"of this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -6596,7 +6621,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:160
+#: doc/classes/Area2D.xml:162
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s exits one of "
"this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -10166,42 +10191,47 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
-"no save path is provided it will try to match the path from the current "
+"no root node is provided, parent of this node will be used as root instead. "
+"If no save path is provided it will try to match the path from the current "
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -10215,62 +10245,62 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
msgid "The rotation of the baked custom sky."
msgstr ""
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -10278,35 +10308,35 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -10314,13 +10344,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -10332,65 +10362,77 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr ""
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
msgid "Baking was successful."
msgstr ""
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr ""
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr ""
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr ""
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:133
+#: doc/classes/BakedLightmap.xml:132
+msgid ""
+"Returns if lightmapper can't be created. Unless you are using a custom "
+"lightmapper, please report this as bug."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:135
+msgid ""
+"There is no root node to start baking from. Either provide [code]from_node[/"
+"code] argument or attach this node to a parent that should be used as root."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:136
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:139
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:142
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -10846,8 +10888,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -11235,26 +11280,33 @@ msgid "Text [Color] used when the [Button] is disabled."
msgstr ""
#: doc/classes/Button.xml:77
-msgid "Text [Color] used when the [Button] is being hovered."
+msgid ""
+"Text [Color] used when the [Button] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/Button.xml:80
-msgid "Text [Color] used when the [Button] is being pressed."
+msgid "Text [Color] used when the [Button] is being hovered."
msgstr ""
#: doc/classes/Button.xml:83
-msgid "[StyleBox] used when the [Button] is being hovered."
+msgid "Text [Color] used when the [Button] is being pressed."
msgstr ""
#: doc/classes/Button.xml:86
-msgid "The horizontal space between [Button]'s icon and text."
+msgid "[StyleBox] used when the [Button] is being hovered."
msgstr ""
#: doc/classes/Button.xml:89
-msgid "Default [StyleBox] for the [Button]."
+msgid "The horizontal space between [Button]'s icon and text."
msgstr ""
#: doc/classes/Button.xml:92
+msgid "Default [StyleBox] for the [Button]."
+msgstr ""
+
+#: doc/classes/Button.xml:95
msgid "[StyleBox] used when the [Button] is being pressed."
msgstr ""
@@ -12723,80 +12775,96 @@ msgstr ""
msgid "The check icon to display when the [CheckBox] is checked."
msgstr ""
-#: doc/classes/CheckBox.xml:30
+#: doc/classes/CheckBox.xml:28
+msgid "The check icon to display when the [CheckBox] is checked and disabled."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:31
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is disabled."
msgstr ""
-#: doc/classes/CheckBox.xml:33
+#: doc/classes/CheckBox.xml:34
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is focused."
msgstr ""
-#: doc/classes/CheckBox.xml:36
+#: doc/classes/CheckBox.xml:37
msgid "The [Font] to use for the [CheckBox] text."
msgstr ""
-#: doc/classes/CheckBox.xml:39
+#: doc/classes/CheckBox.xml:40
msgid "The [CheckBox] text's font color."
msgstr ""
-#: doc/classes/CheckBox.xml:42
+#: doc/classes/CheckBox.xml:43
msgid "The [CheckBox] text's font color when it's disabled."
msgstr ""
-#: doc/classes/CheckBox.xml:45
+#: doc/classes/CheckBox.xml:46
+msgid ""
+"The [CheckBox] text's font color when it's focused. Only replaces the normal "
+"text color of the checkbox. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:49
msgid "The [CheckBox] text's font color when it's hovered."
msgstr ""
-#: doc/classes/CheckBox.xml:48
+#: doc/classes/CheckBox.xml:52
msgid "The [CheckBox] text's font color when it's hovered and pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:51
+#: doc/classes/CheckBox.xml:55
msgid "The [CheckBox] text's font color when it's pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:54
+#: doc/classes/CheckBox.xml:58
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered."
msgstr ""
-#: doc/classes/CheckBox.xml:57
+#: doc/classes/CheckBox.xml:61
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered and "
"pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:60
+#: doc/classes/CheckBox.xml:64
msgid "The separation between the check icon and the text (in pixels)."
msgstr ""
-#: doc/classes/CheckBox.xml:63 doc/classes/CheckButton.xml:58
+#: doc/classes/CheckBox.xml:67 doc/classes/CheckButton.xml:61
msgid "The [StyleBox] to display as a background."
msgstr ""
-#: doc/classes/CheckBox.xml:66
+#: doc/classes/CheckBox.xml:70
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:69
+#: doc/classes/CheckBox.xml:73
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is checked."
msgstr ""
-#: doc/classes/CheckBox.xml:74
+#: doc/classes/CheckBox.xml:78
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is unchecked."
msgstr ""
-#: doc/classes/CheckBox.xml:79
+#: doc/classes/CheckBox.xml:83
msgid "The check icon to display when the [CheckBox] is unchecked."
msgstr ""
+#: doc/classes/CheckBox.xml:86
+msgid ""
+"The check icon to display when the [CheckBox] is unchecked and disabled."
+msgstr ""
+
#: doc/classes/CheckButton.xml:4
msgid "Checkable button. See also [CheckBox]."
msgstr ""
@@ -12840,49 +12908,56 @@ msgid "The [CheckButton] text's font color when it's disabled."
msgstr ""
#: doc/classes/CheckButton.xml:40
-msgid "The [CheckButton] text's font color when it's hovered."
+msgid ""
+"The [CheckButton] text's font color when it's focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/CheckButton.xml:43
-msgid "The [CheckButton] text's font color when it's hovered and pressed."
+msgid "The [CheckButton] text's font color when it's hovered."
msgstr ""
#: doc/classes/CheckButton.xml:46
-msgid "The [CheckButton] text's font color when it's pressed."
+msgid "The [CheckButton] text's font color when it's hovered and pressed."
msgstr ""
#: doc/classes/CheckButton.xml:49
+msgid "The [CheckButton] text's font color when it's pressed."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:52
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered."
msgstr ""
-#: doc/classes/CheckButton.xml:52
+#: doc/classes/CheckButton.xml:55
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered "
"and pressed."
msgstr ""
-#: doc/classes/CheckButton.xml:55
+#: doc/classes/CheckButton.xml:58
msgid "The separation between the toggle icon and the text (in pixels)."
msgstr ""
-#: doc/classes/CheckButton.xml:61
+#: doc/classes/CheckButton.xml:64
msgid "The icon to display when the [CheckButton] is unchecked."
msgstr ""
-#: doc/classes/CheckButton.xml:64
+#: doc/classes/CheckButton.xml:67
msgid "The icon to display when the [CheckButton] is unchecked and disabled."
msgstr ""
-#: doc/classes/CheckButton.xml:67
+#: doc/classes/CheckButton.xml:70
msgid "The icon to display when the [CheckButton] is checked."
msgstr ""
-#: doc/classes/CheckButton.xml:70
+#: doc/classes/CheckButton.xml:73
msgid "The icon to display when the [CheckButton] is checked and disabled."
msgstr ""
-#: doc/classes/CheckButton.xml:73
+#: doc/classes/CheckButton.xml:76
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is pressed."
msgstr ""
@@ -14657,26 +14732,33 @@ msgid "Text [Color] used when the [ColorPickerButton] is disabled."
msgstr ""
#: doc/classes/ColorPickerButton.xml:80
-msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
+msgid ""
+"Text [Color] used when the [ColorPickerButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/ColorPickerButton.xml:83
-msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
+msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
msgstr ""
#: doc/classes/ColorPickerButton.xml:86
-msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
+msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
msgstr ""
#: doc/classes/ColorPickerButton.xml:89
-msgid "The horizontal space between [ColorPickerButton]'s icon and text."
+msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
msgstr ""
#: doc/classes/ColorPickerButton.xml:92
-msgid "Default [StyleBox] for the [ColorPickerButton]."
+msgid "The horizontal space between [ColorPickerButton]'s icon and text."
msgstr ""
#: doc/classes/ColorPickerButton.xml:95
+msgid "Default [StyleBox] for the [ColorPickerButton]."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:98
msgid "[StyleBox] used when the [ColorPickerButton] is being pressed."
msgstr ""
@@ -19906,7 +19988,8 @@ msgid ""
"get_resource_type]. They may optionally specify some import presets that "
"affect the import process. EditorImportPlugins are responsible for creating "
"the resources and saving them in the [code].import[/code] directory (see "
-"[member ProjectSettings.application/config/project_data_dir_name]).\n"
+"[member ProjectSettings.application/config/"
+"use_hidden_project_data_directory]).\n"
"Below is an example EditorImportPlugin that imports a [Mesh] from a file "
"with the extension \".special\" or \".spec\":\n"
"[codeblock]\n"
@@ -20033,7 +20116,7 @@ msgstr ""
msgid ""
"Gets the extension used to save this resource in the [code].import[/code] "
"directory (see [member ProjectSettings.application/config/"
-"project_data_dir_name])."
+"use_hidden_project_data_directory])."
msgstr ""
#: doc/classes/EditorImportPlugin.xml:130
@@ -21068,8 +21151,11 @@ msgstr ""
msgid "Emitted when the value of the edited resource was changed."
msgstr ""
-#: doc/classes/EditorResourcePicker.xml:89
-msgid "Emitted when the resource value was set and user clicked to edit it."
+#: doc/classes/EditorResourcePicker.xml:90
+msgid ""
+"Emitted when the resource value was set and user clicked to edit it. When "
+"[code]edit[/code] is [code]true[/code], the signal was caused by the context "
+"menu \"Edit\" option."
msgstr ""
#: doc/classes/EditorResourcePreview.xml:4
@@ -24818,21 +24904,32 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html"
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -24841,14 +24938,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -24858,80 +24959,80 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
msgstr ""
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr ""
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -27679,16 +27780,18 @@ msgstr ""
#: doc/classes/Image.xml:436
msgid ""
"OpenGL texture format [code]RED[/code] with a single component and a "
-"bitdepth of 8."
+"bitdepth of 8.\n"
+"[b]Note:[/b] When using the GLES2 backend, this uses the alpha channel "
+"instead of the red channel for storage."
msgstr ""
-#: doc/classes/Image.xml:439
+#: doc/classes/Image.xml:440
msgid ""
"OpenGL texture format [code]RG[/code] with two components and a bitdepth of "
"8 for each."
msgstr ""
-#: doc/classes/Image.xml:442
+#: doc/classes/Image.xml:443
msgid ""
"OpenGL texture format [code]RGB[/code] with three components, each with a "
"bitdepth of 8.\n"
@@ -27696,7 +27799,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:446
+#: doc/classes/Image.xml:447
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 8.\n"
@@ -27704,73 +27807,73 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:450
+#: doc/classes/Image.xml:451
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 4."
msgstr ""
-#: doc/classes/Image.xml:453
+#: doc/classes/Image.xml:454
msgid ""
"OpenGL texture format [code]GL_RGB5_A1[/code] where 5 bits of depth for each "
"component of RGB and one bit for alpha."
msgstr ""
-#: doc/classes/Image.xml:456
+#: doc/classes/Image.xml:457
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 32-"
"bit floating-point value."
msgstr ""
-#: doc/classes/Image.xml:459
+#: doc/classes/Image.xml:460
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:462
+#: doc/classes/Image.xml:463
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:465
+#: doc/classes/Image.xml:466
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:468
+#: doc/classes/Image.xml:469
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 16-"
"bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:471
+#: doc/classes/Image.xml:472
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:474
+#: doc/classes/Image.xml:475
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:477
+#: doc/classes/Image.xml:478
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:480
+#: doc/classes/Image.xml:481
msgid ""
"A special OpenGL texture format where the three color components have 9 bits "
"of precision and all three share a single 5-bit exponent."
msgstr ""
-#: doc/classes/Image.xml:483
+#: doc/classes/Image.xml:484
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 1, and is the smallest variation "
@@ -27780,7 +27883,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:487
+#: doc/classes/Image.xml:488
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 2, and color data is interpreted "
@@ -27790,7 +27893,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:491
+#: doc/classes/Image.xml:492
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format also known as Block Compression 3 or BC3 that contains 64 "
@@ -27801,7 +27904,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:495
+#: doc/classes/Image.xml:496
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -27809,7 +27912,7 @@ msgid ""
"DXT5 uses for the alpha channel."
msgstr ""
-#: doc/classes/Image.xml:498
+#: doc/classes/Image.xml:499
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -27817,7 +27920,7 @@ msgid ""
"algorithm that DXT5 uses for the alpha channel."
msgstr ""
-#: doc/classes/Image.xml:501
+#: doc/classes/Image.xml:502
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned normalized "
@@ -27826,21 +27929,21 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:505
+#: doc/classes/Image.xml:506
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with signed floating-point "
"RGB components."
msgstr ""
-#: doc/classes/Image.xml:508
+#: doc/classes/Image.xml:509
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned floating-point "
"RGB components."
msgstr ""
-#: doc/classes/Image.xml:511
+#: doc/classes/Image.xml:512
msgid ""
"Texture format used on PowerVR-supported mobile platforms, uses 2-bit color "
"depth with no alpha. More information can be found [url=https://en.wikipedia."
@@ -27849,25 +27952,25 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:515
+#: doc/classes/Image.xml:516
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with an "
"alpha component."
msgstr ""
-#: doc/classes/Image.xml:518
+#: doc/classes/Image.xml:519
msgid ""
"Similar to [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with 4-"
"bit color depth and no alpha."
msgstr ""
-#: doc/classes/Image.xml:521
+#: doc/classes/Image.xml:522
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC4[/url], but with an "
"alpha component."
msgstr ""
-#: doc/classes/Image.xml:524
+#: doc/classes/Image.xml:525
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC1]Ericsson Texture Compression format 1[/"
@@ -27875,7 +27978,7 @@ msgid ""
"standard. This format cannot store an alpha channel."
msgstr ""
-#: doc/classes/Image.xml:527
+#: doc/classes/Image.xml:528
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27883,7 +27986,7 @@ msgid ""
"unsigned data."
msgstr ""
-#: doc/classes/Image.xml:530
+#: doc/classes/Image.xml:531
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27891,7 +27994,7 @@ msgid ""
"channel of signed data."
msgstr ""
-#: doc/classes/Image.xml:533
+#: doc/classes/Image.xml:534
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27899,7 +28002,7 @@ msgid ""
"of unsigned data."
msgstr ""
-#: doc/classes/Image.xml:536
+#: doc/classes/Image.xml:537
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27907,7 +28010,7 @@ msgid ""
"channels of signed data."
msgstr ""
-#: doc/classes/Image.xml:539
+#: doc/classes/Image.xml:540
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27917,7 +28020,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:543
+#: doc/classes/Image.xml:544
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27927,7 +28030,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:547
+#: doc/classes/Image.xml:548
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27938,31 +28041,31 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:551
+#: doc/classes/Image.xml:552
msgid "Represents the size of the [enum Format] enum."
msgstr ""
-#: doc/classes/Image.xml:554
+#: doc/classes/Image.xml:555
msgid ""
"Performs nearest-neighbor interpolation. If the image is resized, it will be "
"pixelated."
msgstr ""
-#: doc/classes/Image.xml:557
+#: doc/classes/Image.xml:558
msgid ""
"Performs bilinear interpolation. If the image is resized, it will be blurry. "
"This mode is faster than [constant INTERPOLATE_CUBIC], but it results in "
"lower quality."
msgstr ""
-#: doc/classes/Image.xml:560
+#: doc/classes/Image.xml:561
msgid ""
"Performs cubic interpolation. If the image is resized, it will be blurry. "
"This mode often gives better results compared to [constant "
"INTERPOLATE_BILINEAR], at the cost of being slower."
msgstr ""
-#: doc/classes/Image.xml:563
+#: doc/classes/Image.xml:564
msgid ""
"Performs bilinear separately on the two most-suited mipmap levels, then "
"linearly interpolates between them.\n"
@@ -27977,55 +28080,55 @@ msgid ""
"a new set will be generated for the resulting image."
msgstr ""
-#: doc/classes/Image.xml:570
+#: doc/classes/Image.xml:571
msgid ""
"Performs Lanczos interpolation. This is the slowest image resizing mode, but "
"it typically gives the best results, especially when downscalng images."
msgstr ""
-#: doc/classes/Image.xml:573
+#: doc/classes/Image.xml:574
msgid "Image does not have alpha."
msgstr ""
-#: doc/classes/Image.xml:576
+#: doc/classes/Image.xml:577
msgid "Image stores alpha in a single bit."
msgstr ""
-#: doc/classes/Image.xml:579
+#: doc/classes/Image.xml:580
msgid "Image uses alpha."
msgstr ""
-#: doc/classes/Image.xml:582
+#: doc/classes/Image.xml:583
msgid "Use S3TC compression."
msgstr ""
-#: doc/classes/Image.xml:585
+#: doc/classes/Image.xml:586
msgid "Use PVRTC2 compression."
msgstr ""
-#: doc/classes/Image.xml:588
+#: doc/classes/Image.xml:589
msgid "Use PVRTC4 compression."
msgstr ""
-#: doc/classes/Image.xml:591
+#: doc/classes/Image.xml:592
msgid "Use ETC compression."
msgstr ""
-#: doc/classes/Image.xml:594
+#: doc/classes/Image.xml:595
msgid "Use ETC2 compression."
msgstr ""
-#: doc/classes/Image.xml:597
+#: doc/classes/Image.xml:598
msgid ""
"Source texture (before compression) is a regular texture. Default for all "
"textures."
msgstr ""
-#: doc/classes/Image.xml:600
+#: doc/classes/Image.xml:601
msgid "Source texture (before compression) is in sRGB space."
msgstr ""
-#: doc/classes/Image.xml:603
+#: doc/classes/Image.xml:604
msgid ""
"Source texture (before compression) is a normal texture (e.g. it can be "
"compressed into two channels)."
@@ -28249,6 +28352,17 @@ msgstr ""
#: doc/classes/Input.xml:43
msgid ""
+"Sends all input events which are in the current buffer to the game loop. "
+"These events may have been buffered as a result of accumulated input "
+"([method set_use_accumulated_input]) or agile input flushing ([member "
+"ProjectSettings.input_devices/buffering/agile_event_flushing]).\n"
+"The engine will already do this itself at key execution points (at least "
+"once per frame). However, this can be useful in advanced cases where you "
+"want precise control over the timing of event handling."
+msgstr ""
+
+#: doc/classes/Input.xml:50
+msgid ""
"Returns the acceleration of the device's accelerometer sensor, if the device "
"has one. Otherwise, the method returns [constant Vector3.ZERO].\n"
"Note this method returns an empty [Vector3] when running from the editor "
@@ -28260,7 +28374,7 @@ msgid ""
"the Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:53
+#: doc/classes/Input.xml:60
msgid ""
"Returns a value between 0 and 1 representing the raw intensity of the given "
"action, ignoring the action's deadzone. In most cases, you should use "
@@ -28270,7 +28384,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:62
+#: doc/classes/Input.xml:69
msgid ""
"Returns a value between 0 and 1 representing the intensity of the given "
"action. In a joypad, for example, the further away the axis (analog sticks "
@@ -28282,7 +28396,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:71
+#: doc/classes/Input.xml:78
msgid ""
"Get axis input by specifying two actions, one negative and one positive.\n"
"This is a shorthand for writing [code]Input."
@@ -28290,17 +28404,17 @@ msgid ""
"get_action_strength(\"negative_action\")[/code]."
msgstr ""
-#: doc/classes/Input.xml:78
+#: doc/classes/Input.xml:85
msgid ""
"Returns an [Array] containing the device IDs of all currently connected "
"joypads."
msgstr ""
-#: doc/classes/Input.xml:84
+#: doc/classes/Input.xml:91
msgid "Returns the currently assigned cursor shape (see [enum CursorShape])."
msgstr ""
-#: doc/classes/Input.xml:90
+#: doc/classes/Input.xml:97
msgid ""
"Returns the gravity of the device's accelerometer sensor, if the device has "
"one. Otherwise, the method returns [constant Vector3.ZERO].\n"
@@ -28310,7 +28424,7 @@ msgid ""
"Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:97
+#: doc/classes/Input.xml:104
msgid ""
"Returns the rotation rate in rad/s around a device's X, Y, and Z axes of the "
"gyroscope sensor, if the device has one. Otherwise, the method returns "
@@ -28319,53 +28433,53 @@ msgid ""
"it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:106
+#: doc/classes/Input.xml:113
msgid ""
"Returns the current value of the joypad axis at given index (see [enum "
"JoystickList])."
msgstr ""
-#: doc/classes/Input.xml:113
+#: doc/classes/Input.xml:120
msgid "Returns the index of the provided axis name."
msgstr ""
-#: doc/classes/Input.xml:120
+#: doc/classes/Input.xml:127
msgid ""
"Receives a [enum JoystickList] axis and returns its equivalent name as a "
"string."
msgstr ""
-#: doc/classes/Input.xml:127
+#: doc/classes/Input.xml:134
msgid "Returns the index of the provided button name."
msgstr ""
-#: doc/classes/Input.xml:134
+#: doc/classes/Input.xml:141
msgid ""
"Receives a gamepad button from [enum JoystickList] and returns its "
"equivalent name as a string."
msgstr ""
-#: doc/classes/Input.xml:141
+#: doc/classes/Input.xml:148
msgid ""
"Returns a SDL2-compatible device GUID on platforms that use gamepad "
"remapping. Returns [code]\"Default Gamepad\"[/code] otherwise."
msgstr ""
-#: doc/classes/Input.xml:148
+#: doc/classes/Input.xml:155
msgid "Returns the name of the joypad at the specified device index."
msgstr ""
-#: doc/classes/Input.xml:155
+#: doc/classes/Input.xml:162
msgid "Returns the duration of the current vibration effect in seconds."
msgstr ""
-#: doc/classes/Input.xml:162
+#: doc/classes/Input.xml:169
msgid ""
"Returns the strength of the joypad vibration: x is the strength of the weak "
"motor, and y is the strength of the strong motor."
msgstr ""
-#: doc/classes/Input.xml:168
+#: doc/classes/Input.xml:175
msgid ""
"Returns the mouse speed for the last time the cursor was moved, and this "
"until the next frame where the mouse moves. This means that even if the "
@@ -28373,7 +28487,7 @@ msgid ""
"motion."
msgstr ""
-#: doc/classes/Input.xml:174
+#: doc/classes/Input.xml:181
msgid ""
"Returns the magnetic field strength in micro-Tesla for all axes of the "
"device's magnetometer sensor, if the device has one. Otherwise, the method "
@@ -28382,17 +28496,17 @@ msgid ""
"platforms, it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:181
+#: doc/classes/Input.xml:188
msgid ""
"Returns mouse buttons as a bitmask. If multiple mouse buttons are pressed at "
"the same time, the bits are added together."
msgstr ""
-#: doc/classes/Input.xml:187
+#: doc/classes/Input.xml:194
msgid "Returns the mouse mode. See the constants for more information."
msgstr ""
-#: doc/classes/Input.xml:198
+#: doc/classes/Input.xml:205
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -28405,7 +28519,7 @@ msgid ""
"want (on the range of 0 to 1)."
msgstr ""
-#: doc/classes/Input.xml:208
+#: doc/classes/Input.xml:215
msgid ""
"Returns [code]true[/code] when the user starts pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user pressed down "
@@ -28417,7 +28531,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:218
+#: doc/classes/Input.xml:225
msgid ""
"Returns [code]true[/code] when the user stops pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user released the "
@@ -28427,7 +28541,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:227
+#: doc/classes/Input.xml:234
msgid ""
"Returns [code]true[/code] if you are pressing the action event. Note that if "
"an action has multiple buttons assigned and more than one of them is "
@@ -28438,13 +28552,13 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:236
+#: doc/classes/Input.xml:243
msgid ""
"Returns [code]true[/code] if you are pressing the joypad button (see [enum "
"JoystickList])."
msgstr ""
-#: doc/classes/Input.xml:243
+#: doc/classes/Input.xml:250
msgid ""
"Returns [code]true[/code] if the system knows the specified device. This "
"means that it sets all button and axis indices exactly as defined in [enum "
@@ -28452,19 +28566,19 @@ msgid ""
"but you can still retrieve events from them."
msgstr ""
-#: doc/classes/Input.xml:250
+#: doc/classes/Input.xml:257
msgid ""
"Returns [code]true[/code] if you are pressing the key. You can pass a [enum "
"KeyList] constant."
msgstr ""
-#: doc/classes/Input.xml:257
+#: doc/classes/Input.xml:264
msgid ""
"Returns [code]true[/code] if you are pressing the mouse button specified "
"with [enum ButtonList]."
msgstr ""
-#: doc/classes/Input.xml:267
+#: doc/classes/Input.xml:274
msgid ""
"Notifies the [Input] singleton that a connection has changed, to update the "
"state for the [code]device[/code] index.\n"
@@ -28473,7 +28587,7 @@ msgid ""
"triggered internally."
msgstr ""
-#: doc/classes/Input.xml:275
+#: doc/classes/Input.xml:282
msgid ""
"Feeds an [InputEvent] to the game. Can be used to artificially trigger input "
"events from code. Also generates [method Node._input] calls.\n"
@@ -28486,12 +28600,21 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Input.xml:289
+#: doc/classes/Input.xml:296
msgid ""
"Removes all mappings from the internal database that match the given GUID."
msgstr ""
-#: doc/classes/Input.xml:298
+#: doc/classes/Input.xml:303
+msgid ""
+"Sets the acceleration value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:313
msgid ""
"Sets a custom mouse cursor image, which is only visible inside the game "
"window. The hotspot can also be specified. Passing [code]null[/code] to the "
@@ -28506,7 +28629,7 @@ msgid ""
"compression mode can't be used for custom cursors."
msgstr ""
-#: doc/classes/Input.xml:309
+#: doc/classes/Input.xml:324
msgid ""
"Sets the default cursor shape to be used in the viewport instead of "
"[constant CURSOR_ARROW].\n"
@@ -28516,11 +28639,38 @@ msgid ""
"cursor immediately."
msgstr ""
-#: doc/classes/Input.xml:318
+#: doc/classes/Input.xml:333
+msgid ""
+"Sets the gravity value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:341
+msgid ""
+"Sets the value of the rotation rate of the gyroscope sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:349
+msgid ""
+"Sets the value of the magnetic field of the magnetometer sensor. Can be used "
+"for debugging on devices without a hardware sensor, for example in an editor "
+"on a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:357
msgid "Sets the mouse mode. See the constants for more information."
msgstr ""
-#: doc/classes/Input.xml:325
+#: doc/classes/Input.xml:364
msgid ""
"Enables or disables the accumulation of similar input events sent by the "
"operating system. When input accumulation is enabled, all input events "
@@ -28534,7 +28684,7 @@ msgid ""
"results that closely follow the actual input."
msgstr ""
-#: doc/classes/Input.xml:336
+#: doc/classes/Input.xml:375
msgid ""
"Starts to vibrate the joypad. Joypads usually come with two rumble motors, a "
"strong and a weak one. [code]weak_magnitude[/code] is the strength of the "
@@ -28547,34 +28697,34 @@ msgid ""
"few seconds."
msgstr ""
-#: doc/classes/Input.xml:344
+#: doc/classes/Input.xml:383
msgid "Stops the vibration of the joypad."
msgstr ""
-#: doc/classes/Input.xml:351
+#: doc/classes/Input.xml:390
msgid ""
"Vibrate Android and iOS devices.\n"
"[b]Note:[/b] It needs [code]VIBRATE[/code] permission for Android at export "
"settings. iOS does not support duration."
msgstr ""
-#: doc/classes/Input.xml:359
+#: doc/classes/Input.xml:398
msgid "Sets the mouse position to the specified vector."
msgstr ""
-#: doc/classes/Input.xml:368
+#: doc/classes/Input.xml:407
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
-#: doc/classes/Input.xml:374
+#: doc/classes/Input.xml:413
msgid "Makes the mouse cursor visible if it is hidden."
msgstr ""
-#: doc/classes/Input.xml:377
+#: doc/classes/Input.xml:416
msgid "Makes the mouse cursor hidden if it is visible."
msgstr ""
-#: doc/classes/Input.xml:380
+#: doc/classes/Input.xml:419
msgid ""
"Captures the mouse. The mouse will be hidden and its position locked at the "
"center of the screen.\n"
@@ -28582,83 +28732,83 @@ msgid ""
"need to use [member InputEventMouseMotion.relative]."
msgstr ""
-#: doc/classes/Input.xml:384
+#: doc/classes/Input.xml:423
msgid "Makes the mouse cursor visible but confines it to the game window."
msgstr ""
-#: doc/classes/Input.xml:387
+#: doc/classes/Input.xml:426
msgid "Arrow cursor. Standard, default pointing cursor."
msgstr ""
-#: doc/classes/Input.xml:390
+#: doc/classes/Input.xml:429
msgid ""
"I-beam cursor. Usually used to show where the text cursor will appear when "
"the mouse is clicked."
msgstr ""
-#: doc/classes/Input.xml:393
+#: doc/classes/Input.xml:432
msgid ""
"Pointing hand cursor. Usually used to indicate the pointer is over a link or "
"other interactable item."
msgstr ""
-#: doc/classes/Input.xml:396
+#: doc/classes/Input.xml:435
msgid ""
"Cross cursor. Typically appears over regions in which a drawing operation "
"can be performed or for selections."
msgstr ""
-#: doc/classes/Input.xml:399
+#: doc/classes/Input.xml:438
msgid ""
"Wait cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application is still usable during the "
"operation."
msgstr ""
-#: doc/classes/Input.xml:402
+#: doc/classes/Input.xml:441
msgid ""
"Busy cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application isn't usable during the "
"operation (e.g. something is blocking its main thread)."
msgstr ""
-#: doc/classes/Input.xml:405
+#: doc/classes/Input.xml:444
msgid "Drag cursor. Usually displayed when dragging something."
msgstr ""
-#: doc/classes/Input.xml:408
+#: doc/classes/Input.xml:447
msgid ""
"Can drop cursor. Usually displayed when dragging something to indicate that "
"it can be dropped at the current position."
msgstr ""
-#: doc/classes/Input.xml:411
+#: doc/classes/Input.xml:450
msgid ""
"Forbidden cursor. Indicates that the current action is forbidden (for "
"example, when dragging something) or that the control at a position is "
"disabled."
msgstr ""
-#: doc/classes/Input.xml:414
+#: doc/classes/Input.xml:453
msgid ""
"Vertical resize mouse cursor. A double-headed vertical arrow. It tells the "
"user they can resize the window or the panel vertically."
msgstr ""
-#: doc/classes/Input.xml:417
+#: doc/classes/Input.xml:456
msgid ""
"Horizontal resize mouse cursor. A double-headed horizontal arrow. It tells "
"the user they can resize the window or the panel horizontally."
msgstr ""
-#: doc/classes/Input.xml:420
+#: doc/classes/Input.xml:459
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the bottom left to the top right. It tells the user they can resize the "
"window or the panel both horizontally and vertically."
msgstr ""
-#: doc/classes/Input.xml:423
+#: doc/classes/Input.xml:462
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the top left to the bottom right, the opposite of [constant "
@@ -28666,23 +28816,23 @@ msgid ""
"both horizontally and vertically."
msgstr ""
-#: doc/classes/Input.xml:426
+#: doc/classes/Input.xml:465
msgid "Move cursor. Indicates that something can be moved."
msgstr ""
-#: doc/classes/Input.xml:429
+#: doc/classes/Input.xml:468
msgid ""
"Vertical split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_VSIZE]."
msgstr ""
-#: doc/classes/Input.xml:432
+#: doc/classes/Input.xml:471
msgid ""
"Horizontal split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_HSIZE]."
msgstr ""
-#: doc/classes/Input.xml:435
+#: doc/classes/Input.xml:474
msgid "Help cursor. Usually a question mark."
msgstr ""
@@ -29098,7 +29248,9 @@ msgid "The drag position."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -30410,7 +30562,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30475,22 +30628,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -30505,7 +30660,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -30513,19 +30668,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -30596,7 +30751,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30654,7 +30810,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -31939,14 +32097,21 @@ msgid "Default text [Color] of the [LinkButton]."
msgstr ""
#: doc/classes/LinkButton.xml:46
-msgid "Text [Color] used when the [LinkButton] is being hovered."
+msgid ""
+"Text [Color] used when the [LinkButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/LinkButton.xml:49
-msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgid "Text [Color] used when the [LinkButton] is being hovered."
msgstr ""
#: doc/classes/LinkButton.xml:52
+msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:55
msgid "The vertical space between the baseline of text and the underline."
msgstr ""
@@ -32439,26 +32604,33 @@ msgid "Text [Color] used when the [MenuButton] is disabled."
msgstr ""
#: doc/classes/MenuButton.xml:64
-msgid "Text [Color] used when the [MenuButton] is being hovered."
+msgid ""
+"Text [Color] used when the [MenuButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/MenuButton.xml:67
-msgid "Text [Color] used when the [MenuButton] is being pressed."
+msgid "Text [Color] used when the [MenuButton] is being hovered."
msgstr ""
#: doc/classes/MenuButton.xml:70
-msgid "[StyleBox] used when the [MenuButton] is being hovered."
+msgid "Text [Color] used when the [MenuButton] is being pressed."
msgstr ""
#: doc/classes/MenuButton.xml:73
-msgid "The horizontal space between [MenuButton]'s icon and text."
+msgid "[StyleBox] used when the [MenuButton] is being hovered."
msgstr ""
#: doc/classes/MenuButton.xml:76
-msgid "Default [StyleBox] for the [MenuButton]."
+msgid "The horizontal space between [MenuButton]'s icon and text."
msgstr ""
#: doc/classes/MenuButton.xml:79
+msgid "Default [StyleBox] for the [MenuButton]."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:82
msgid "[StyleBox] used when the [MenuButton] is being pressed."
msgstr ""
@@ -34183,7 +34355,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -37067,26 +37239,33 @@ msgid "Text [Color] used when the [OptionButton] is disabled."
msgstr ""
#: doc/classes/OptionButton.xml:212
-msgid "Text [Color] used when the [OptionButton] is being hovered."
+msgid ""
+"Text [Color] used when the [OptionButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/OptionButton.xml:215
-msgid "Text [Color] used when the [OptionButton] is being pressed."
+msgid "Text [Color] used when the [OptionButton] is being hovered."
msgstr ""
#: doc/classes/OptionButton.xml:218
-msgid "[StyleBox] used when the [OptionButton] is being hovered."
+msgid "Text [Color] used when the [OptionButton] is being pressed."
msgstr ""
#: doc/classes/OptionButton.xml:221
-msgid "The horizontal space between [OptionButton]'s icon and text."
+msgid "[StyleBox] used when the [OptionButton] is being hovered."
msgstr ""
#: doc/classes/OptionButton.xml:224
-msgid "Default [StyleBox] for the [OptionButton]."
+msgid "The horizontal space between [OptionButton]'s icon and text."
msgstr ""
#: doc/classes/OptionButton.xml:227
+msgid "Default [StyleBox] for the [OptionButton]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:230
msgid "[StyleBox] used when the [OptionButton] is being pressed."
msgstr ""
@@ -37489,7 +37668,7 @@ msgstr ""
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -37519,14 +37698,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -37536,7 +37715,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -38189,79 +38368,79 @@ msgstr ""
#: doc/classes/OS.xml:1012
msgid "Sunday."
-msgstr ""
+msgstr "Duminică."
#: doc/classes/OS.xml:1015
msgid "Monday."
-msgstr ""
+msgstr "Luni."
#: doc/classes/OS.xml:1018
msgid "Tuesday."
-msgstr ""
+msgstr "Marți."
#: doc/classes/OS.xml:1021
msgid "Wednesday."
-msgstr ""
+msgstr "Miercuri."
#: doc/classes/OS.xml:1024
msgid "Thursday."
-msgstr ""
+msgstr "Joi."
#: doc/classes/OS.xml:1027
msgid "Friday."
-msgstr ""
+msgstr "Vineri."
#: doc/classes/OS.xml:1030
msgid "Saturday."
-msgstr ""
+msgstr "Sâmbătă."
#: doc/classes/OS.xml:1033
msgid "January."
-msgstr ""
+msgstr "Ianuarie."
#: doc/classes/OS.xml:1036
msgid "February."
-msgstr ""
+msgstr "Februarie."
#: doc/classes/OS.xml:1039
msgid "March."
-msgstr ""
+msgstr "Martie."
#: doc/classes/OS.xml:1042
msgid "April."
-msgstr ""
+msgstr "Aprilie."
#: doc/classes/OS.xml:1045
msgid "May."
-msgstr ""
+msgstr "Mai."
#: doc/classes/OS.xml:1048
msgid "June."
-msgstr ""
+msgstr "Iunie."
#: doc/classes/OS.xml:1051
msgid "July."
-msgstr ""
+msgstr "Iulie."
#: doc/classes/OS.xml:1054
msgid "August."
-msgstr ""
+msgstr "August."
#: doc/classes/OS.xml:1057
msgid "September."
-msgstr ""
+msgstr "Septembrie."
#: doc/classes/OS.xml:1060
msgid "October."
-msgstr ""
+msgstr "Octombrie."
#: doc/classes/OS.xml:1063
msgid "November."
-msgstr ""
+msgstr "Noiembrie."
#: doc/classes/OS.xml:1066
msgid "December."
-msgstr ""
+msgstr "Decembrie."
#: doc/classes/OS.xml:1069
msgid ""
@@ -40021,17 +40200,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -40049,11 +40254,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -40248,7 +40453,9 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-msgid "Returns the [Physics2DDirectBodyState] of the body."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
@@ -41050,6 +41257,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -41067,7 +41292,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -41181,7 +41406,9 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-msgid "Returns the [PhysicsDirectBodyState] of the body."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/PhysicsServer.xml:370
@@ -42160,27 +42387,27 @@ msgstr ""
msgid "Removes an element from the array by index."
msgstr ""
-#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolColorArray.xml:66
-#: doc/classes/PoolIntArray.xml:67 doc/classes/PoolRealArray.xml:67
-#: doc/classes/PoolStringArray.xml:74 doc/classes/PoolVector2Array.xml:67
-#: doc/classes/PoolVector3Array.xml:66
+#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolIntArray.xml:67
+#: doc/classes/PoolRealArray.xml:67
msgid ""
"Sets the size of the array. If the array is grown, reserves elements at the "
"end of the array. If the array is shrunk, truncates the array to the new "
-"size."
+"size.\n"
+"[b]Note:[/b] Added elements are not automatically initialized to 0 and will "
+"contain garbage, i.e. indeterminate values."
msgstr ""
-#: doc/classes/PoolByteArray.xml:121
+#: doc/classes/PoolByteArray.xml:122
msgid "Changes the byte at the given index."
msgstr ""
-#: doc/classes/PoolByteArray.xml:127 doc/classes/PoolColorArray.xml:79
-#: doc/classes/PoolRealArray.xml:80 doc/classes/PoolStringArray.xml:87
+#: doc/classes/PoolByteArray.xml:128 doc/classes/PoolColorArray.xml:79
+#: doc/classes/PoolRealArray.xml:81 doc/classes/PoolStringArray.xml:87
#: doc/classes/PoolVector2Array.xml:80 doc/classes/PoolVector3Array.xml:79
msgid "Returns the size of the array."
msgstr ""
-#: doc/classes/PoolByteArray.xml:135
+#: doc/classes/PoolByteArray.xml:136
msgid ""
"Returns the slice of the [PoolByteArray] between indices (inclusive) as a "
"new [PoolByteArray]. Any negative index is considered to be from the end of "
@@ -42212,6 +42439,14 @@ msgstr ""
msgid "Appends a value to the array."
msgstr ""
+#: doc/classes/PoolColorArray.xml:66 doc/classes/PoolStringArray.xml:74
+#: doc/classes/PoolVector2Array.xml:67 doc/classes/PoolVector3Array.xml:66
+msgid ""
+"Sets the size of the array. If the array is grown, reserves elements at the "
+"end of the array. If the array is shrunk, truncates the array to the new "
+"size."
+msgstr ""
+
#: doc/classes/PoolColorArray.xml:73
msgid "Changes the [Color] at the given index."
msgstr ""
@@ -42248,11 +42483,11 @@ msgid ""
"valid, or at the end of the array ([code]idx == size()[/code])."
msgstr ""
-#: doc/classes/PoolIntArray.xml:74
+#: doc/classes/PoolIntArray.xml:75
msgid "Changes the int at the given index."
msgstr ""
-#: doc/classes/PoolIntArray.xml:80
+#: doc/classes/PoolIntArray.xml:81
msgid "Returns the array size."
msgstr ""
@@ -42284,7 +42519,7 @@ msgstr ""
msgid "Appends a [PoolRealArray] at the end of this array."
msgstr ""
-#: doc/classes/PoolRealArray.xml:74
+#: doc/classes/PoolRealArray.xml:75
msgid "Changes the float at the given index."
msgstr ""
@@ -43550,18 +43785,6 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:204
msgid ""
-"The project data directory is used for storing project-specific data "
-"(metadata, shader cache, etc.).\n"
-"[b]Note:[/b] Restart the application after changing this setting.\n"
-"[b]Note:[/b] Changing this value can help on platforms or with third-party "
-"tools where specific directory patterns are disallowed. Only modify this "
-"setting if you know that your environment requires it, as changing the "
-"default can impact compatibility with some external tools or plugins which "
-"expect the default [code].import[/code] folder."
-msgstr ""
-
-#: doc/classes/ProjectSettings.xml:209
-msgid ""
"Specifies a file to override project settings. For example: [code]user://"
"custom_settings.cfg[/code]. See \"Overriding\" in the [ProjectSettings] "
"class description at the top for more information.\n"
@@ -43569,7 +43792,7 @@ msgid ""
"code] will still be read to override the project settings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:213
+#: doc/classes/ProjectSettings.xml:208
msgid ""
"If [code]true[/code], the project will save user data to its own user "
"directory (see [member application/config/custom_user_dir_name]). This "
@@ -43579,13 +43802,28 @@ msgid ""
"user data directory)/Godot/app_userdata/(project name)[/code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:216
+#: doc/classes/ProjectSettings.xml:211
+msgid ""
+"If [code]true[/code], the project will use a hidden directory ([code]."
+"import[/code]) for storing project-specific data (metadata, shader cache, "
+"etc.).\n"
+"If [code]false[/code], a non-hidden directory ([code]import[/code]) will be "
+"used instead.\n"
+"[b]Note:[/b] Restart the application after changing this setting.\n"
+"[b]Note:[/b] Changing this value can help on platforms or with third-party "
+"tools where hidden directory patterns are disallowed. Only modify this "
+"setting if you know that your environment requires it, as changing the "
+"default can impact compatibility with some external tools or plugins which "
+"expect the default [code].import[/code] folder."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:217
msgid ""
"Icon set in [code].ico[/code] format used on Windows to set the game's icon. "
"This is done automatically on start by calling [method OS.set_native_icon]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:219
+#: doc/classes/ProjectSettings.xml:220
msgid ""
"Time samples for frame deltas are subject to random variation introduced by "
"the platform, even when frames are displayed at regular intervals thanks to "
@@ -43599,14 +43837,14 @@ msgid ""
"adequate to render frames at the refresh rate."
msgstr ""
-#: doc/classes/ProjectSettings.xml:224
+#: doc/classes/ProjectSettings.xml:225
msgid ""
"[b]Experimental.[/b] Shifts the measurement of delta time for each frame to "
"just after the drawing has taken place. This may lead to more consistent "
"deltas and a reduction in frame stutters."
msgstr ""
-#: doc/classes/ProjectSettings.xml:227
+#: doc/classes/ProjectSettings.xml:228
msgid ""
"If [code]true[/code], disables printing to standard error. If [code]true[/"
"code], this also hides error and warning messages printed by [method "
@@ -43615,7 +43853,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:231
+#: doc/classes/ProjectSettings.xml:232
msgid ""
"If [code]true[/code], disables printing to standard output. This is "
"equivalent to starting the editor or project with the [code]--quiet[/code] "
@@ -43623,7 +43861,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:235
+#: doc/classes/ProjectSettings.xml:236
msgid ""
"If [code]true[/code], flushes the standard output stream every time a line "
"is printed. This affects both terminal logging and file logging.\n"
@@ -43639,20 +43877,20 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:241
+#: doc/classes/ProjectSettings.xml:242
msgid ""
"Debug build override for [member application/run/flush_stdout_on_print], as "
"performance is less important during debugging.\n"
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:245
+#: doc/classes/ProjectSettings.xml:246
msgid ""
"Forces a delay between frames in the main loop (in milliseconds). This may "
"be useful if you plan to disable vertical synchronization."
msgstr ""
-#: doc/classes/ProjectSettings.xml:248
+#: doc/classes/ProjectSettings.xml:249
msgid ""
"If [code]true[/code], enables low-processor usage mode. This setting only "
"works on desktop platforms. The screen is not redrawn if nothing changes "
@@ -43660,75 +43898,81 @@ msgid ""
"useless (and can hurt performance) in most games."
msgstr ""
-#: doc/classes/ProjectSettings.xml:251
+#: doc/classes/ProjectSettings.xml:252
msgid ""
"Amount of sleeping between frames when the low-processor usage mode is "
"enabled (in microseconds). Higher values will result in lower CPU usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:254
+#: doc/classes/ProjectSettings.xml:255
msgid "Path to the main scene file that will be loaded when the project runs."
msgstr ""
-#: doc/classes/ProjectSettings.xml:257 doc/classes/ProjectSettings.xml:260
+#: doc/classes/ProjectSettings.xml:258 doc/classes/ProjectSettings.xml:261
msgid ""
"Audio buses will disable automatically when sound goes below a given dB "
"threshold for a given time. This saves CPU as effects assigned to that bus "
"will no longer do any processing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:263
+#: doc/classes/ProjectSettings.xml:264
msgid ""
"Default [AudioBusLayout] resource file to use in the project, unless "
"overridden by the scene."
msgstr ""
-#: doc/classes/ProjectSettings.xml:266
+#: doc/classes/ProjectSettings.xml:267
msgid ""
"Specifies the audio driver to use. This setting is platform-dependent as "
"each platform supports different audio drivers. If left empty, the default "
"audio driver will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:269
+#: doc/classes/ProjectSettings.xml:270
msgid ""
"If [code]true[/code], microphone input will be allowed. This requires "
"appropriate permissions to be set when exporting to Android or iOS."
msgstr ""
-#: doc/classes/ProjectSettings.xml:272
+#: doc/classes/ProjectSettings.xml:273
msgid ""
"The mixing rate used for audio (in Hz). In general, it's better to not touch "
"this and leave it to the host operating system."
msgstr ""
-#: doc/classes/ProjectSettings.xml:275
+#: doc/classes/ProjectSettings.xml:276
msgid ""
"Safer override for [member audio/mix_rate] in the Web platform. Here "
"[code]0[/code] means \"let the browser choose\" (since some browsers do not "
"like forcing the mix rate)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:278
+#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:281
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:284
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:287
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43738,7 +43982,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:290
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43748,27 +43992,27 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:293
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:296
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
-#: doc/classes/ProjectSettings.xml:299
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:302
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -43776,81 +44020,81 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:305
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:308
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:311
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:314
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:317
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr ""
-#: doc/classes/ProjectSettings.xml:320
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:323
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:326
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:329
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:332
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:335
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:338
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:341
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -43858,109 +44102,109 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:344
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:347
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:350
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:353
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:356
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:359
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:362
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:365
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:368
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:371
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:374
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:377
+#: doc/classes/ProjectSettings.xml:380
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:380
+#: doc/classes/ProjectSettings.xml:383
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:383
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:386
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:389
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:392
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:395
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:398
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -43971,91 +44215,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:403
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:406
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:409
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:412
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:415
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:418
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:421
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:424
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:427
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:430
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:433
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:436
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:439
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr ""
-#: doc/classes/ProjectSettings.xml:442
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:445
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:448
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:451
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -44064,13 +44308,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:455
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:458
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -44080,7 +44324,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:463
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -44088,19 +44332,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:468
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:472
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:476
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -44114,45 +44358,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:481
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:484
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:488
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:491
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:494
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:497
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:500
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -44161,7 +44405,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:503
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -44172,7 +44416,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:507
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -44188,14 +44432,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:515
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:518
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -44203,49 +44447,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:521
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:524
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:529
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:532
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:535
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:538
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:541
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:544
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:547
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -44254,7 +44498,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:551
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44262,7 +44506,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:555
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44270,7 +44514,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:559
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44280,7 +44524,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:563
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -44289,7 +44533,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:567
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -44298,7 +44542,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:571
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44308,7 +44552,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:575
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44316,7 +44560,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:579
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -44326,7 +44570,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:583
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -44336,7 +44580,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:587
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44344,7 +44588,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:591
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -44353,7 +44597,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:595
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44361,7 +44605,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:599
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -44373,477 +44617,477 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:605
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:608
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:611
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:614
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:617
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:620
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:623
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:626
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:629
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:632
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:635
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:638
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:641
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:644
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:647
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:650
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:653
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:656
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:659
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:662
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:665
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:668
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:671
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:674
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:677
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:680
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:683
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:686
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:689
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:692
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:695
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:698
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:701
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:704
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:707
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:710
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:713
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:716
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:719
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:722
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:725
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:728
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:731
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:734
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:737
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:740
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:743
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:746
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:749
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:752
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:755
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:758
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:761
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:764
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:767
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:770
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:773
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:776
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:779
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:782
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:785
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:788
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:791
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:794
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:797
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:800
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:803
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:806
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:809
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:812
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:815
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:818
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:821
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:824
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:827
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:830
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:833
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:836
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:839
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:842
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:845
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:848
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:851
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:854
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:857
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:860
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:863
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:866
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:869
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:872
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:875
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:878
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:881
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr ""
-#: doc/classes/ProjectSettings.xml:884
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:887
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:890
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:893
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:896
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:899
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:902
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:905
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:908
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:911
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:914
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:917
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:920
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:923
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:926
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:929
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:932
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:935
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:938
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:941
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:946
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:949
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -44851,92 +45095,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:952
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:955
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:958
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:961
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:964
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:967
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:970
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:973
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:976
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:979
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:982
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:985
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:988
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:991
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:994
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:997
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1000
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1003
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -44946,33 +45190,33 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1007
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1010
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1013
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1017
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1021
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -44985,7 +45229,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1025
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -44997,7 +45241,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1033
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45009,7 +45253,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1041
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45022,7 +45266,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1045
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -45030,28 +45274,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1049
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1053
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1056
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1059
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -45061,25 +45305,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1063
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1066
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1069
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1072
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45092,7 +45336,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1076
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45104,7 +45348,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1084
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45116,7 +45360,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1092
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45129,13 +45373,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1096
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1099
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -45143,11 +45387,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1103
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1106
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -45161,7 +45405,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1112
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -45170,7 +45414,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1116
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -45186,7 +45430,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1121
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -45196,7 +45440,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1125
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45206,7 +45450,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1129
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -45217,7 +45461,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1133
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45227,7 +45471,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1137
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -45235,7 +45479,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1141
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -45246,7 +45490,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1145
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -45261,7 +45505,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1151
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -45270,13 +45514,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1156
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1159
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -45285,7 +45529,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1162
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -45295,7 +45539,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1165
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -45307,7 +45551,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1168
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -45317,24 +45561,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1171
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1174
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1177
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1180
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -45343,7 +45587,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1183
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -45351,7 +45595,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1186
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -45360,7 +45604,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1189
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -45370,7 +45614,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1193
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -45378,31 +45622,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1197
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1200
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1203
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1206
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1209
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -45410,7 +45654,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1212
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -45420,46 +45664,53 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1215
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1218
+#: doc/classes/ProjectSettings.xml:1221
msgid ""
-"If [code]true[/code] and available on the target device, enables high "
-"floating point precision for all shader computations in GLES2.\n"
+"iOS specific override for [member rendering/gles2/compatibility/"
+"disable_half_float], due to poor support for half-float vertex compression "
+"on many devices."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1224
+msgid ""
+"If [code]true[/code] and available on the target Android device, enables "
+"high floating point precision for all shader computations in GLES2.\n"
"[b]Warning:[/b] High floating point precision can be extremely slow on older "
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1225
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1228
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1231
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1234
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -45467,7 +45718,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1237
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -45477,7 +45728,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1240
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -45486,7 +45737,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1243
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -45495,20 +45746,20 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1246
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1249
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1252
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -45517,7 +45768,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1255
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -45525,7 +45776,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1258
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -45534,7 +45785,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -45544,20 +45795,20 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1267
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1274
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -45566,13 +45817,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -45582,46 +45833,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1293
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1296
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1299
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1302
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1305
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -45631,7 +45882,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -45643,7 +45894,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -45651,7 +45902,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1316
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -45659,7 +45910,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -45668,7 +45919,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1323
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -45682,7 +45933,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1328
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -45692,7 +45943,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1331
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -45701,7 +45952,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1334
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -45711,54 +45962,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1337
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1340
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1343
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1346
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1349
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1352
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1355
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1358
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -45769,61 +46020,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1365
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1368
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1371
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1374
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1377
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1380
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1383
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1386
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -45834,7 +46085,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -45843,26 +46094,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1393 doc/classes/ProjectSettings.xml:1396
#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1405
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1408
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1411
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -45873,20 +46124,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1418
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -45898,52 +46149,52 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1428
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1435
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1438
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1441
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1444
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1447
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1450
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1453
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -45951,7 +46202,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -45961,10 +46212,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -45973,10 +46224,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -45985,10 +46236,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -45997,10 +46248,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -46009,10 +46260,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -46050,7 +46301,7 @@ msgstr ""
#: doc/classes/Quat.xml:4
msgid "Quaternion."
-msgstr ""
+msgstr "Cuaternion."
#: doc/classes/Quat.xml:7
msgid ""
@@ -46676,40 +46927,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr ""
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -46717,14 +46982,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -49059,6 +49324,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -49076,7 +49357,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -49084,11 +49365,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -49098,19 +49379,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -54525,20 +54806,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -54549,28 +54835,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -54582,19 +54868,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
@@ -57380,26 +57666,33 @@ msgid "Text [Color] used when the [ToolButton] is disabled."
msgstr ""
#: doc/classes/ToolButton.xml:39
-msgid "Text [Color] used when the [ToolButton] is being hovered."
+msgid ""
+"Text [Color] used when the [ToolButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/ToolButton.xml:42
-msgid "Text [Color] used when the [ToolButton] is being pressed."
+msgid "Text [Color] used when the [ToolButton] is being hovered."
msgstr ""
#: doc/classes/ToolButton.xml:45
-msgid "[StyleBox] used when the [ToolButton] is being hovered."
+msgid "Text [Color] used when the [ToolButton] is being pressed."
msgstr ""
#: doc/classes/ToolButton.xml:48
-msgid "The horizontal space between [ToolButton]'s icon and text."
+msgid "[StyleBox] used when the [ToolButton] is being hovered."
msgstr ""
#: doc/classes/ToolButton.xml:51
-msgid "Default [StyleBox] for the [ToolButton]."
+msgid "The horizontal space between [ToolButton]'s icon and text."
msgstr ""
#: doc/classes/ToolButton.xml:54
+msgid "Default [StyleBox] for the [ToolButton]."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:57
msgid "[StyleBox] used when the [ToolButton] is being pressed."
msgstr ""
@@ -59655,7 +59948,7 @@ msgstr ""
#: modules/upnp/doc_classes/UPNPDevice.xml:66
msgid "OK."
-msgstr ""
+msgstr "OK."
#: modules/upnp/doc_classes/UPNPDevice.xml:72
msgid "Empty HTTP response."
@@ -59671,7 +59964,7 @@ msgstr ""
#: modules/upnp/doc_classes/UPNPDevice.xml:81
msgid "Disconnected."
-msgstr ""
+msgstr "Deconectat."
#: modules/upnp/doc_classes/UPNPDevice.xml:84
msgid "Unknown device."
diff --git a/doc/translations/ru.po b/doc/translations/ru.po
index 97c4d45907..39386f2f63 100644
--- a/doc/translations/ru.po
+++ b/doc/translations/ru.po
@@ -24,11 +24,15 @@
# Ð§Ñ‚Ð°Ð±Ñ <chtabs2k19@gmail.com>, 2021.
# Nikita Blizniuk <BliznyukNM@gmail.com>, 2021.
# Сергей Волков <zerosar4@gmail.com>, 2021.
+# Alexander Sinitsyn <almoig747@gmail.com>, 2021.
+# Ð¢Ð¾Ð»Ñ Ð‘Ð¾Ð³Ð¾Ð¼Ð¾Ð»Ð¾Ð² <tolya.bogomolov2004@gmail.com>, 2021.
+# Rustam Alieskerov <rustam.aleskerov7@gmail.com>, 2021.
+# Vladimir Svity <development.openworld@gmail.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2021-10-15 09:31+0000\n"
+"PO-Revision-Date: 2021-11-11 16:02+0000\n"
"Last-Translator: Сергей Волков <zerosar4@gmail.com>\n"
"Language-Team: Russian <https://hosted.weblate.org/projects/godot-engine/"
"godot-class-reference/ru/>\n"
@@ -38,45 +42,45 @@ msgstr ""
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Generator: Weblate 4.9-dev\n"
+"X-Generator: Weblate 4.9.1-dev\n"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Description"
msgstr "ОпиÑание"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Tutorials"
msgstr "Уроки"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Properties"
msgstr "СвойÑтва"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Methods"
msgstr "Методы"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Theme Properties"
msgstr "СвойÑтва темы"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Signals"
msgstr "Сигналы"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Enumerations"
msgstr "ПеречиÑлениÑ"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Constants"
msgstr "КонÑтанты"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Property Descriptions"
msgstr "ОпиÑÐ°Ð½Ð¸Ñ ÑвойÑтв"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Method Descriptions"
msgstr "ОпиÑÐ°Ð½Ð¸Ñ Ð¼ÐµÑ‚Ð¾Ð´Ð¾Ð²"
@@ -110,7 +114,7 @@ msgstr ""
"Возвращает цвет, поÑтроенный из целочиÑленных значений краÑного, зелёного, "
"Ñинего и альфа каналов. Каждый канал должен хранить 8 бит информации в "
"диапазоне от 0 до 255.\n"
-"[code]r8[/code] — краÑный[/code] канал\n"
+"[code]r8[/code] — краÑный канал\n"
"[code]g8[/code] — зелёный канал\n"
"[code]b8[/code] — Ñиний канал\n"
"[code]a8[/code] — альфа канал\n"
@@ -127,7 +131,7 @@ msgid ""
"[/codeblock]\n"
"Supported color names are the same as the constants defined in [Color]."
msgstr ""
-"Возвращает цвет в ÑоответÑтвии Ñо Ñтандартным [code]name[/code] Ñ "
+"Возвращает цвет, ÑоответÑтвующий Ñтандартизированному [code]name[/code] Ñ "
"[code]alpha[/code] в диапазоне от 0 до 1.\n"
"[codeblock]\n"
"red = ColorN(\"red\", 1)\n"
@@ -135,7 +139,6 @@ msgstr ""
"Поддерживаемые имена цветов Ñовпадают Ñ ÐºÐ¾Ð½Ñтантами, определёнными в [Color]."
#: modules/gdscript/doc_classes/@GDScript.xml:45
-#, fuzzy
msgid ""
"Returns the absolute value of parameter [code]s[/code] (i.e. positive "
"value).\n"
@@ -146,11 +149,10 @@ msgstr ""
"Возвращает абÑолютное значение параметра [code]s[/code] (Ñ‚.е. положительное "
"значение).\n"
"[codeblock]\n"
-"a = abs(-1) # a is 1\n"
+"a = abs(-1) # a равно 1\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:55
-#, fuzzy
msgid ""
"Returns the arc cosine of [code]s[/code] in radians. Use to get the angle of "
"cosine [code]s[/code]. [code]s[/code] must be between [code]-1.0[/code] and "
@@ -162,16 +164,15 @@ msgid ""
"[/codeblock]"
msgstr ""
"Возвращает арккоÑÐ¸Ð½ÑƒÑ Ñ‡Ð¸Ñла [code]s[/code] в радианах. ИÑпользуетÑÑ Ð´Ð»Ñ "
-"Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ ÑƒÐ³Ð»Ð°, коÑÐ¸Ð½ÑƒÑ ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ð³Ð¾ равен [code]s[/code]. \n"
-"ЧиÑло [code]s[/code] должно быть между [code]-1.0[/code] и [code]1.0[/code] "
-"(включительно), в противном Ñлучае [method acos] вернет [constant NAN].\n"
+"Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ ÑƒÐ³Ð»Ð°, коÑÐ¸Ð½ÑƒÑ ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ð³Ð¾ равен [code]s[/code]. [code]s[/code] должно "
+"быть между [code]-1.0[/code] и [code]1.0[/code] (включительно), в противном "
+"Ñлучае [method acos] вернет [constant NAN].\n"
"[codeblock]\n"
-"# c is 0.523599 or 30 degrees if converted with rad2deg(s)\n"
+"# c равно 0.523599 или 30 градуÑов, еÑли превращено Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ rad2deg\n"
"c = acos(0.866025)\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:66
-#, fuzzy
msgid ""
"Returns the arc sine of [code]s[/code] in radians. Use to get the angle of "
"sine [code]s[/code]. [code]s[/code] must be between [code]-1.0[/code] and "
@@ -182,8 +183,10 @@ msgid ""
"s = asin(0.5)\n"
"[/codeblock]"
msgstr ""
-"Возвращает аркÑÐ¸Ð½ÑƒÑ Ñ‡Ð¸Ñла [code]s[/code] в радианах. ИÑпользуетÑÑ Ð´Ð»Ñ "
-"Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ ÑƒÐ³Ð»Ð°, ÑÐ¸Ð½ÑƒÑ ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ð³Ð¾ равен [code]s[/code].\n"
+"Возвращает арккоÑÐ¸Ð½ÑƒÑ Ñ‡Ð¸Ñла [code]s[/code] в радианах. ИÑпользуетÑÑ Ð´Ð»Ñ "
+"Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ ÑƒÐ³Ð»Ð°, коÑÐ¸Ð½ÑƒÑ ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ð³Ð¾ равен [code]s[/code]. ЧиÑло [code]s[/code] "
+"должно быть между [code]-1.0[/code] и [code]1.0[/code] (включительно), в "
+"противном Ñлучае [method asin] вернет [constant NAN].\n"
"[codeblock]\n"
"# s равно 0.523599, или 30 градуÑов, еÑли конвертировать Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ "
"rad2deg(s)\n"
@@ -331,12 +334,12 @@ msgid ""
"[/codeblock]\n"
"This is the inverse of [method ord]."
msgstr ""
-"Возвращает Ñимвол как тип Строка указанного кода в кодировке Юникод "
+"Возвращает Ñимвол в виде Ñтроки из указанной кодовой позиции Unicode "
"(ÑовмеÑтимого Ñ ASCII).\n"
"[codeblock]\n"
-"a = char(65) # a равно \"A\"\n"
+"a = char(65) # a равно \"A\"\n"
"a = char(65 + 32) # a равно \"a\"\n"
-"a = char(8364) # a равно \"€\"\n"
+"a = char(8364) # a равно \"€\"\n"
"[/codeblock]\n"
"Это Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð¾Ð±Ñ€Ð°Ñ‚Ð½Ð° [method ord]."
@@ -376,7 +379,7 @@ msgid ""
"print(a.length())\n"
"[/codeblock]"
msgstr ""
-"Преобразует значение одного типа в другой наилучшим возможным ÑпоÑобом. "
+"Преобразует значение из одного типа в другой наилучшим возможным ÑпоÑобом. "
"Параметр [code]type[/code] иÑпользует Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¸Ð· [enum Variant.Type].\n"
"[codeblock]\n"
"a = Vector2(1, 0)\n"
@@ -422,7 +425,7 @@ msgstr "Преобразует децибелы в линейную Ñнерги
#: modules/gdscript/doc_classes/@GDScript.xml:218
msgid "Deprecated alias for [method step_decimals]."
-msgstr ""
+msgstr "УÑтаревший пÑевдоним Ð´Ð»Ñ [method step_decimals]."
#: modules/gdscript/doc_classes/@GDScript.xml:227
#, fuzzy
@@ -499,8 +502,8 @@ msgid ""
msgstr ""
"ЭкÑпонента. Возвращает математичеÑкую конÑтанту [b]e[/b], возведённую в "
"Ñтепень [code]s[/code].\n"
-"КонÑтанта [b]e[/b] имеет примерное значение 2.71828, и может быть получена "
-"через [code]exp(1)[/code].\n"
+"КонÑтанта [b]e[/b] примерно равна 2.71828 и может быть получена через "
+"[code]exp(1)[/code].\n"
"Ð”Ð»Ñ Ð¿Ð¾ÐºÐ°Ð·Ð°Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ñ… функций Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ оÑнованиÑми Ñледует иÑпользовать метод "
"[method pow].\n"
"[codeblock]\n"
@@ -610,16 +613,16 @@ msgid ""
"print(a.call_func()) # Prints bar\n"
"[/codeblock]"
msgstr ""
-"Возвращает ÑÑылку на заданную функцию [code]funcname[/code] в объекте "
+"Возвращает ÑÑылку на указанную функцию [code]funcname[/code] в объекте "
"[code]instance[/code]. Так как функции не ÑвлÑÑŽÑ‚ÑÑ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°Ð¼Ð¸ первого клаÑÑа "
"в GDScript, иÑпользуйте [code]funcref[/code] Ð´Ð»Ñ Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ [FuncRef] в "
-"переменной и вызывайте её позже.\n"
+"переменной чтобы вызвать её позже.\n"
"[codeblock]\n"
"func foo():\n"
" return(\"bar\")\n"
"\n"
"a = funcref(self, \"foo\")\n"
-"print(a.call_func()) # Печатает bar\n"
+"print(a.call_func()) # Выводит bar\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:349
@@ -641,7 +644,7 @@ msgid ""
"source:res://script.gd}, {function:_ready, line:6, source:res://script.gd}]\n"
"[/codeblock]"
msgstr ""
-"Возвращает маÑÑив Ñловарей, предÑтавлÑющих текущий Ñтек вызовов.\n"
+"Возвращает маÑÑив Ñловарей, предÑтавлÑющий текущий Ñтек вызовов.\n"
"[codeblock]\n"
"func _ready():\n"
" foo()\n"
@@ -652,7 +655,7 @@ msgstr ""
"func bar():\n"
" print(get_stack())\n"
"[/codeblock]\n"
-"напечатает\n"
+"выведет\n"
"[codeblock]\n"
"[{function:bar, line:12, source:res://script.gd}, {function:foo, line:9, "
"source:res://script.gd}, {function:_ready, line:6, source:res://script.gd}]\n"
@@ -667,7 +670,7 @@ msgid ""
msgstr ""
"Возвращает целочиÑленный хеш переданной переменной.\n"
"[codeblock]\n"
-"print(hash(\"a\")) # Печатает 177670\n"
+"print(hash(\"a\")) # Выводит 177670\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:380
@@ -696,7 +699,7 @@ msgstr ""
" print(d.keys())\n"
" print(d.values())\n"
"[/codeblock]\n"
-"Печатает:\n"
+"Выводит:\n"
"[codeblock]\n"
"[@subpath, @path, foo]\n"
"[, res://test.gd, bar]\n"
@@ -714,14 +717,14 @@ msgid ""
" print(inst.foo) # Prints bar\n"
"[/codeblock]"
msgstr ""
-"Возвращает Объект, который ÑоответÑтвует [code]instance_id[/code]. Ð’Ñе "
-"объекты имеют уникальный идентификатор ÑкземплÑра.\n"
+"Возвращает объект, ÑоответÑтвующий [code]instance_id[/code]. Ð’Ñе объекты "
+"имеют уникальный идентификатор ÑкземплÑра.\n"
"[codeblock]\n"
"var foo = \"bar\"\n"
"func _ready():\n"
" var id = get_instance_id()\n"
" var inst = instance_from_id(id)\n"
-" print(inst.foo) # Ðапечатает bar\n"
+" print(inst.foo) # Выведет bar\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:415
@@ -742,8 +745,8 @@ msgstr ""
"[codeblock]\n"
"var middle = lerp(20, 30, 0.75)\n"
"# `middle` ÑÐµÐ¹Ñ‡Ð°Ñ Ñ€Ð°Ð²Ð½Ð¾ 27.5.\n"
-"# Теперь мы притворÑемÑÑ, что забыли иÑходное Ñоотношение и хотим вернуть "
-"его обратно.\n"
+"# ПредÑтавим, что мы забыли иÑходное Ñоотношение и хотим получить его "
+"обратно.\n"
"var ratio = inverse_lerp(20, 30, 27.5)\n"
"# `ratio`ÑÐµÐ¹Ñ‡Ð°Ñ Ñ€Ð°Ð²Ð½Ð¾ 0.75.\n"
"[/codeblock]"
@@ -777,8 +780,8 @@ msgid ""
"Returns whether [code]instance[/code] is a valid object (e.g. has not been "
"deleted from memory)."
msgstr ""
-"Возвращает, ÑвлÑетÑÑ Ð»Ð¸ [code]instance[/code] дейÑтвительным объектом "
-"(например, еÑли он не был удалён из памÑти)."
+"Возвращает, ÑвлÑетÑÑ Ð»Ð¸ [code]instance[/code] дейÑтвительным объектом (Ñ‚.е. "
+"он не был удалён из памÑти)."
#: modules/gdscript/doc_classes/@GDScript.xml:453
msgid ""
@@ -793,9 +796,9 @@ msgid ""
"This method is faster than using [method is_equal_approx] with one value as "
"zero."
msgstr ""
-"Возвращает [code]true[/code], еÑли [code]s[/code] приблизительно равен нулю, "
-"либо ÑвлÑетÑÑ Ð¸Ð¼.\n"
-"Этот метод работает быÑтрее, чем [method is_equal_approx] Ñ Ð½ÑƒÐ»ÐµÐ¼ в качеÑтве "
+"Возвращает [code]true[/code], еÑли [code]s[/code] равен или приблизительно "
+"равен нулю.\n"
+"Этот метод работает быÑтрее, чем [method is_equal_approx] Ñ Ð½ÑƒÐ»Ñ‘Ð¼ в качеÑтве "
"одного из значений."
#: modules/gdscript/doc_classes/@GDScript.xml:468
@@ -864,7 +867,7 @@ msgstr ""
"Ð›Ð¸Ð½ÐµÐ¹Ð½Ð°Ñ Ð¸Ð½Ñ‚ÐµÑ€Ð¿Ð¾Ð»ÑÑ†Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñƒ Ð´Ð²ÑƒÐ¼Ñ ÑƒÐ³Ð»Ð°Ð¼Ð¸ (в радианах) по нормализованному "
"значению.\n"
"Ðналогично [method lerp], но корректно интерполируетÑÑ, когда углы "
-"охватывают [constant @GDScript.TAU].\n"
+"оборачивают [constant @GDScript.TAU].\n"
"[codeblock]\n"
"extends Sprite\n"
"var elapsed = 0.0\n"
@@ -890,13 +893,13 @@ msgid ""
"linear2db($Slider.value))\n"
"[/codeblock]"
msgstr ""
-"Преобразует из линейной Ñнергии в децибелы (аудио). Это может быть "
-"иÑпользовано Ð´Ð»Ñ Ñ€ÐµÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ð¸ ползунков громкоÑти, которые ведут ÑÐµÐ±Ñ "
-"предÑказуемо (поÑкольку громкоÑть не линейнаÑ). Пример:\n"
+"Преобразует линейную Ñнергию в децибелы (аудио). Этот метод может быть "
+"иÑпользован Ð´Ð»Ñ Ñ€ÐµÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ð¸ ползунков громкоÑти, ведущих ÑÐµÐ±Ñ ÐºÐ°Ðº ожидаетÑÑ "
+"(поÑкольку громкоÑть нелинейна). Пример:\n"
"[codeblock]\n"
-"# \"Slider\" отноÑитÑÑ Ðº узлу, который наÑледует Range, такой как HSlider "
-"или VSlider.\n"
-"# Его диапазон должен быть от 0 до 1.\n"
+"# \"Slider\" должен быть узлом, наÑледующим Range, таким как HSlider или "
+"VSlider.\n"
+"# Его диапазон должен быть наÑтроен от 0 до 1.\n"
"# Измените Ð¸Ð¼Ñ ÑˆÐ¸Ð½Ñ‹, еÑли вы хотите изменить громкоÑть только определенной "
"шины.\n"
"AudioServer.set_bus_volume_db(AudioServer.get_bus_index(\"Master\"), "
@@ -1062,7 +1065,7 @@ msgid ""
"[/codeblock]\n"
"This is the inverse of [method char]."
msgstr ""
-"Возвращает целое чиÑло, предÑтавлÑющее кодовую точку Unicode Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ "
+"Возвращает целое чиÑло, предÑтавлÑющее кодовую позицию Unicode данного "
"Unicode-Ñимвола [code]char[/code].\n"
"[codeblock]\n"
"a = ord(\"A\") # a равно 65\n"
@@ -1220,6 +1223,16 @@ msgid ""
"distinguishes them from print messages used for debugging purposes, while "
"also displaying a stack trace when an error or warning is printed."
msgstr ""
+"Конвертирует наилучшим образом один или более аргументов любого типа в "
+"Ñтроку и выводит результат в конÑоль.\n"
+"[codeblock]\n"
+"a = [1, 2, 3]\n"
+"print(\"a\", \"=\", a) # Выведет a=[1, 2, 3]\n"
+"[/codeblock]\n"
+"[b]Примечание:[/b] Желательно иÑпользовать [method push_error] и [method "
+"push_warning] Ð´Ð»Ñ Ð²Ñ‹Ð²Ð¾Ð´Ð° ошибок и предупреждений, вмеÑто [method print]. Это "
+"поможет отличать их от отладочных Ñообщений, a также отображаетÑÑ "
+"траÑÑировка Ñтека при печати ошибки или предупреждениÑ."
#: modules/gdscript/doc_classes/@GDScript.xml:702
msgid "Like [method print], but prints only when used in debug mode."
@@ -1475,6 +1488,45 @@ msgid ""
"3\n"
"[/codeblock]"
msgstr ""
+"Возвращает маÑÑив Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ñ‹Ð¼ диапазоном. Диапазон может быть одним "
+"аргументом [code]N[/code] (от [code]0[code] до [code]N - 1[/code]), Ð´Ð²ÑƒÐ¼Ñ "
+"аргументами ([code]начальное[/code], [code]поÑледнее - 1[/code]) или Ñ‚Ñ€ÐµÐ¼Ñ "
+"аргументами ([code]начальное[/code], [code]поÑледнее - 1[/code], [code]шаг[/"
+"code]). ЕÑли диапазон не допуÑтим, возвращает пуÑтой маÑÑив (например "
+"[code]range(2, 5, -1)[/code] или [code]range(5, 5, 1)[/code]).\n"
+"Возвращает маÑÑив Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ñ‹Ð¼ диапазоном. Диапазон [code]range()[/code] может "
+"быть одним аргументом [code]N[/code] (от [code]0[code] до [code]N - 1[/"
+"code]), Ð´Ð²ÑƒÐ¼Ñ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ð°Ð¼Ð¸ ([code]начальное[/code], [code]поÑледнее - 1[/"
+"code]) или Ñ‚Ñ€ÐµÐ¼Ñ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ð°Ð¼Ð¸ ([code]начальное[/code], [code]поÑледнее - 1[/"
+"code], [code]шаг[/code]). [code]Шаг[/code] может быть отрицательным. ЕÑли "
+"[code]шаг[/code] отрицателен, [code]поÑледний - 1[/code] Ñтанет "
+"[code]поÑледний + 1[/code]. Также, чтобы цикл запуÑтилÑÑ, начальное значение "
+"должно быть больше поÑледнего.\n"
+"[codeblock]\n"
+"print(range(4))\n"
+"print(range(2, 5))\n"
+"print(range(0, 6, 2))\n"
+"[/codeblock]\n"
+"Вывод:\n"
+"[codeblock]\n"
+"[0, 1, 2, 3]\n"
+"[2, 3, 4]\n"
+"[0, 2, 4]\n"
+"[/codeblock]\n"
+"Ð”Ð»Ñ Ð¿ÐµÑ€ÐµÐ±Ð¾Ñ€Ð° маÑÑива [Array] в обратном порÑдке, иÑпользуйте:\n"
+"[codeblock]\n"
+"var array = [3, 6, 9]\n"
+"var i := array.size() - 1\n"
+"while i >= 0:\n"
+" print(array[i])\n"
+" i -= 1\n"
+"[/codeblock]\n"
+"Вывод:\n"
+"[codeblock]\n"
+"9\n"
+"6\n"
+"3\n"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:874
msgid ""
@@ -3383,97 +3435,95 @@ msgstr "Ошибка неверных данных."
#: doc/classes/@GlobalScope.xml:941
msgid "Gamepad button 0."
-msgstr ""
+msgstr "Кнопка 0 геймпада."
#: doc/classes/@GlobalScope.xml:944
-#, fuzzy
msgid "Gamepad button 1."
-msgstr "МаÑка дополнительной кнопки мыши 1."
+msgstr "Кнопка 1 геймпада."
#: doc/classes/@GlobalScope.xml:947
-#, fuzzy
msgid "Gamepad button 2."
-msgstr "МаÑка дополнительной кнопки мыши 2."
+msgstr "Кнопка 2 геймпада."
#: doc/classes/@GlobalScope.xml:950
msgid "Gamepad button 3."
-msgstr ""
+msgstr "Кнопка 3 геймпада."
#: doc/classes/@GlobalScope.xml:953
msgid "Gamepad button 4."
-msgstr ""
+msgstr "Кнопка 4 геймпада."
#: doc/classes/@GlobalScope.xml:956
msgid "Gamepad button 5."
-msgstr ""
+msgstr "Кнопка 5 геймпада."
#: doc/classes/@GlobalScope.xml:959
msgid "Gamepad button 6."
-msgstr ""
+msgstr "Кнопка 6 геймпада."
#: doc/classes/@GlobalScope.xml:962
msgid "Gamepad button 7."
-msgstr ""
+msgstr "Кнопка 7 геймпада."
#: doc/classes/@GlobalScope.xml:965
msgid "Gamepad button 8."
-msgstr ""
+msgstr "Кнопка 8 геймпада."
#: doc/classes/@GlobalScope.xml:968
msgid "Gamepad button 9."
-msgstr ""
+msgstr "Кнопка 9 геймпада."
#: doc/classes/@GlobalScope.xml:971
msgid "Gamepad button 10."
-msgstr ""
+msgstr "Кнопка 10 геймпада."
#: doc/classes/@GlobalScope.xml:974
msgid "Gamepad button 11."
-msgstr ""
+msgstr "Кнопка 11 геймпада."
#: doc/classes/@GlobalScope.xml:977
msgid "Gamepad button 12."
-msgstr ""
+msgstr "Кнопка 12 геймпада."
#: doc/classes/@GlobalScope.xml:980
msgid "Gamepad button 13."
-msgstr ""
+msgstr "Кнопка 13 геймпада."
#: doc/classes/@GlobalScope.xml:983
msgid "Gamepad button 14."
-msgstr ""
+msgstr "Кнопка 14 геймпада."
#: doc/classes/@GlobalScope.xml:986
msgid "Gamepad button 15."
-msgstr ""
+msgstr "Кнопка 15 геймпада."
#: doc/classes/@GlobalScope.xml:989
msgid "Gamepad button 16."
-msgstr ""
+msgstr "Кнопка 16 геймпада."
#: doc/classes/@GlobalScope.xml:992
msgid "Gamepad button 17."
-msgstr ""
+msgstr "Кнопка 17 геймпада."
#: doc/classes/@GlobalScope.xml:995
msgid "Gamepad button 18."
-msgstr ""
+msgstr "Кнопка 18 геймпада."
#: doc/classes/@GlobalScope.xml:998
msgid "Gamepad button 19."
-msgstr ""
+msgstr "Кнопка 19 геймпада."
#: doc/classes/@GlobalScope.xml:1001
msgid "Gamepad button 20."
-msgstr ""
+msgstr "Кнопка 20 геймпада."
#: doc/classes/@GlobalScope.xml:1004
msgid "Gamepad button 21."
-msgstr ""
+msgstr "Кнопка 21 геймпада."
#: doc/classes/@GlobalScope.xml:1007
msgid "Gamepad button 22."
-msgstr ""
+msgstr "Кнопка 22 геймпада."
#: doc/classes/@GlobalScope.xml:1010
#, fuzzy
@@ -3704,11 +3754,11 @@ msgstr ""
#: doc/classes/@GlobalScope.xml:1172
msgid "Gamepad left analog trigger."
-msgstr ""
+msgstr "Левый аналоговый курок геймпада."
#: doc/classes/@GlobalScope.xml:1175
msgid "Gamepad right analog trigger."
-msgstr ""
+msgstr "Правый аналоговый курок геймпада."
#: doc/classes/@GlobalScope.xml:1178
#, fuzzy
@@ -4559,22 +4609,31 @@ msgstr ""
"Возвращает [code]true[/code] еÑли Ñтот [AABB] полноÑтью закрывает другой."
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
-msgstr "Возвращает раÑширенный [AABB], включающий данную точку."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
+msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr "Возвращает объем [AABB]."
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr "Возвращает позицию 8-ми точек [AABB] в проÑтранÑтве."
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr "Возвращает Ñамую длинную нормализованную оÑÑŒ [AABB]."
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
@@ -4582,15 +4641,15 @@ msgstr ""
"Возвращает Ð¸Ð½Ð´ÐµÐºÑ Ñамой длинной оÑи [AABB] (в ÑоответÑтвии Ñ ÐºÐ¾Ð½Ñтантой "
"[Vector3] [code]AXIS_*[/code])."
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr "Возвращает ÑкалÑрную длину Ñамой длинной оÑи [AABB]."
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr "Возвращает нормализованную наикратчайшую оÑÑŒ [AABB]."
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
@@ -4598,11 +4657,11 @@ msgstr ""
"Возвращает Ð¸Ð½Ð´ÐµÐºÑ Ñамой короткой оÑи [AABB] (в ÑоответÑтвии Ñ Ð¿ÐµÑ€ÐµÑ‡Ð¸Ñлением "
"[Vector3]::AXIS*)."
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr "Возвращает ÑкалÑрную длину наикратчайшей оÑи [AABB]."
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
@@ -4610,7 +4669,7 @@ msgstr ""
"Возвращает точку опоры в заданном направлении. Это полезно Ð´Ð»Ñ Ð°Ð»Ð³Ð¾Ñ€Ð¸Ñ‚Ð¼Ð¾Ð² "
"Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð¸Ñ Ñтолкновений."
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
@@ -4618,19 +4677,19 @@ msgstr ""
"Возвращает копию [AABB], выращенную на заданное количеÑтво единиц в Ñторону "
"вÑех Ñторон."
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr "Возвращает [code]true[/code], еÑли [AABB] плоÑкий или пуÑтой."
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr "Возвращает [code]true[/code], еÑли [AABB] пуÑÑ‚."
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr "Возвращает [code]true[/code], еÑли [AABB] Ñодержит точку."
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
@@ -4638,17 +4697,17 @@ msgstr ""
"Возвращает переÑечение двух [AABB]. ПуÑтой AABB (размером 0,0,0) "
"возвращаетÑÑ Ð¿Ñ€Ð¸ ошибке."
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr "Возвращает [code]true[/code], еÑли [AABB] переÑекаетÑÑ Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼."
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
"Возвращает [code]true[/code], еÑли [AABB] находитÑÑ Ð¿Ð¾ обе Ñтороны от "
"плоÑкоÑти."
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
@@ -4656,7 +4715,7 @@ msgstr ""
"Возвращает [code]true[/code], еÑли [AABB] переÑекает отрезок прÑмой между "
"[code]from[/code] и [code]to[/code]."
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
@@ -4666,14 +4725,14 @@ msgstr ""
"приблизительно равны, Ð²Ñ‹Ð·Ñ‹Ð²Ð°Ñ [method @GDScript.is_equal_approx] Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ "
"компонента."
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
"Возвращает больший [AABB], Ñодержащий как Ñтот [AABB], так и [code]with[/"
"code]."
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
@@ -4681,11 +4740,11 @@ msgstr ""
"Конечный угол. РаÑÑчитываетÑÑ ÐºÐ°Ðº [code]position + size[/code]. УÑтановка "
"Ñтого Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½Ð¸Ñ‚ размер."
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr "Ðачальный угол. Обычно имеет Ð¼ÐµÐ½ÑŒÑˆÐ¸Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ, чем у [member end]."
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
#, fuzzy
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
@@ -5511,7 +5570,7 @@ msgstr ""
#: doc/classes/Animation.xml:272
msgid "Returns the interpolation type of a given track."
-msgstr ""
+msgstr "Возвращает тип интерполÑции данной дорожки."
#: doc/classes/Animation.xml:279
msgid "Returns the amount of keys in a given track."
@@ -5539,7 +5598,7 @@ msgstr ""
#: doc/classes/Animation.xml:317
msgid "Gets the type of a track."
-msgstr ""
+msgstr "Получает тип дорожки."
#: doc/classes/Animation.xml:327
msgid "Insert a generic key in a given track."
@@ -5975,7 +6034,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -6654,6 +6713,16 @@ msgid ""
"a [Tween] node, but it requires doing everything by code.\n"
"Updating the target properties of animations occurs at process time."
msgstr ""
+"Проигрыватель анимации иÑпользуетÑÑ Ð´Ð»Ñ Ð²Ð¾ÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ñ€ÐµÑурÑов "
+"[Animation]. Он Ñодержит Ñловарь анимаций (ключами ÑвлÑÑŽÑ‚ÑÑ Ð¸Ð¼ÐµÐ½Ð°) и "
+"пользовательÑкое Ð²Ñ€ÐµÐ¼Ñ ÑÐ¼ÐµÑˆÐ¸Ð²Ð°Ð½Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñƒ их переходами. Кроме того, анимации "
+"могут воÑпроизводитьÑÑ Ð¸ ÑмешиватьÑÑ Ð² разных каналах.\n"
+"[AnimationPlayer] лучше чем [Tween] подходит Ð´Ð»Ñ Ð°Ð½Ð¸Ð¼Ð°Ñ†Ð¸Ð¹, в которых "
+"конечные Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¸Ð·Ð²ÐµÑтны заранее. Ðапример, затухание Ñкрана легче "
+"выполнить Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ узла [AnimationPlayer] Ð±Ð»Ð°Ð³Ð¾Ð´Ð°Ñ€Ñ Ð¸Ð½Ñтрументам анимации, "
+"предоÑтавлÑемым редактором. Этот конкретный пример также можно реализовать Ñ "
+"помощью узла [Tween], но Ð´Ð»Ñ Ñтого придетÑÑ Ð²ÑÑ‘ делать в коде.\n"
+"Обновление целевых ÑвойÑтв анимаций проиÑходит во Ð²Ñ€ÐµÐ¼Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑÑа."
#: doc/classes/AnimationPlayer.xml:22
msgid ""
@@ -6708,6 +6777,8 @@ msgid ""
"Gets the blend time (in seconds) between two animations, referenced by their "
"names."
msgstr ""
+"Получает Ð²Ñ€ÐµÐ¼Ñ ÑÐ¼ÐµÑˆÐ¸Ð²Ð°Ð½Ð¸Ñ (в Ñекундах) между Ð´Ð²ÑƒÐ¼Ñ Ð°Ð½Ð¸Ð¼Ð°Ñ†Ð¸Ñми, на которые "
+"ÑÑылаютÑÑ Ð¸Ñ… имена."
#: doc/classes/AnimationPlayer.xml:90
msgid ""
@@ -6716,21 +6787,29 @@ msgid ""
"[code]custom_speed[/code] argument specified when calling the [method play] "
"method."
msgstr ""
+"Получает фактичеÑкую ÑкороÑть воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ¹ анимации или 0, еÑли "
+"она не воÑпроизводитÑÑ. Эта ÑкороÑть ÑвлÑетÑÑ ÑвойÑтвом [member "
+"playback_speed], умноженным на аргумент [code]custom_speed[/code], указанный "
+"при вызове метода [method play]."
#: doc/classes/AnimationPlayer.xml:96
msgid ""
"Returns a list of the animation names that are currently queued to play."
msgstr ""
+"Возвращает ÑпиÑок имен анимаций, которые в данный момент ÑтоÑÑ‚ в очереди на "
+"воÑпроизведение."
#: doc/classes/AnimationPlayer.xml:103
msgid ""
"Returns [code]true[/code] if the [AnimationPlayer] stores an [Animation] "
"with key [code]name[/code]."
msgstr ""
+"Возвращает [code]true[/code], еÑли в [AnimationPlayer] хранитÑÑ [Animation] "
+"Ñ ÐºÐ»ÑŽÑ‡Ð¾Ð¼ [code]name[/code]."
#: doc/classes/AnimationPlayer.xml:109
msgid "Returns [code]true[/code] if playing an animation."
-msgstr ""
+msgstr "Возвращает [code]true[/code], еÑли воÑпроизводитÑÑ Ð°Ð½Ð¸Ð¼Ð°Ñ†Ð¸Ñ."
#: doc/classes/AnimationPlayer.xml:119
msgid ""
@@ -6749,6 +6828,22 @@ msgid ""
"time this is called, they may be updated too early. To perform the update "
"immediately, call [code]advance(0)[/code]."
msgstr ""
+"ВоÑпроизводит анимацию Ñ ÐºÐ»ÑŽÑ‡Ð¾Ð¼ [code]name[/code]. Можно задать "
+"пользовательÑкое Ð²Ñ€ÐµÐ¼Ñ Ð½Ð°Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¸ ÑкороÑть. ЕÑли [code]custom_speed[/code] "
+"отрицателен и [code]from_end[/code] равен [code]true[/code], Ð°Ð½Ð¸Ð¼Ð°Ñ†Ð¸Ñ Ð±ÑƒÐ´ÐµÑ‚ "
+"воÑпроизводитьÑÑ Ð² обратном направлении (что Ñквивалентно вызову [method "
+"play_backwards]).\n"
+"[AnimationPlayer] отÑлеживает текущую или поÑледнюю воÑпроизведенную "
+"анимацию Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ [member assigned_animation]. ЕÑли Ñтот метод вызываетÑÑ Ñ "
+"той же анимацией [code]name[/code] или без параметра [code]name[/code], "
+"Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ð°Ñ Ð°Ð½Ð¸Ð¼Ð°Ñ†Ð¸Ñ Ð²Ð¾Ð·Ð¾Ð±Ð½Ð¾Ð²Ð¸Ñ‚ воÑпроизведение, еÑли она была "
+"приоÑтановлена, или перезапуÑтитÑÑ, еÑли она была оÑтановлена (Ñм. [method "
+"stop] Ð´Ð»Ñ Ð¿Ð°ÑƒÐ·Ñ‹ и оÑтановки). ЕÑли Ð°Ð½Ð¸Ð¼Ð°Ñ†Ð¸Ñ ÑƒÐ¶Ðµ воÑпроизводитÑÑ, то она "
+"продолжит воÑпроизведение.\n"
+"[b]Примечание:[/b] ÐÐ½Ð¸Ð¼Ð°Ñ†Ð¸Ñ Ð±ÑƒÐ´ÐµÑ‚ обновлена при Ñледующей обработке "
+"[AnimationPlayer]. ЕÑли одновременно Ñ Ñтим вызовом обновлÑÑŽÑ‚ÑÑ Ð´Ñ€ÑƒÐ³Ð¸Ðµ "
+"переменные, они могут быть обновлены Ñлишком рано. Чтобы выполнить "
+"обновление немедленно, вызовите [code]advance(0)[/code]."
#: doc/classes/AnimationPlayer.xml:129
msgid ""
@@ -6757,6 +6852,10 @@ msgid ""
"code] and [code]from_end = true[/code], so see its description for more "
"information."
msgstr ""
+"ВоÑпроизводит анимацию Ñ ÐºÐ»ÑŽÑ‡Ð¾Ð¼ [code]name[/code] в обратном направлении.\n"
+"Этот метод ÑвлÑетÑÑ ÐºÐ¾Ñ€Ð¾Ñ‚ÐºÐ¾Ð¹ запиÑью Ð´Ð»Ñ [method play] Ñ [code]custom_speed "
+"= -1.0[/code] и [code]from_end = true[/code], поÑтому Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ "
+"дополнительной информации Ñмотрите его опиÑание."
#: doc/classes/AnimationPlayer.xml:137
msgid ""
@@ -6764,6 +6863,12 @@ msgid ""
"[b]Note:[/b] If a looped animation is currently playing, the queued "
"animation will never play unless the looped animation is stopped somehow."
msgstr ""
+"Ставит анимацию в очередь на воÑпроизведение поÑле Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ¹ "
+"анимации.\n"
+"[b]Примечание:[/b] ЕÑли в данный момент воÑпроизводитÑÑ Ð·Ð°Ñ†Ð¸ÐºÐ»ÐµÐ½Ð½Ð°Ñ "
+"анимациÑ, то поÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð½Ð°Ñ Ð² очередь Ð°Ð½Ð¸Ð¼Ð°Ñ†Ð¸Ñ Ð½Ð¸ÐºÐ¾Ð³Ð´Ð° не начнёт "
+"воÑпроизводитьÑÑ, пока Ð·Ð°Ñ†Ð¸ÐºÐ»ÐµÐ½Ð½Ð°Ñ Ð°Ð½Ð¸Ð¼Ð°Ñ†Ð¸Ñ Ð½Ðµ будет оÑтановлена каким-либо "
+"образом."
#: doc/classes/AnimationPlayer.xml:145
msgid "Removes the animation with key [code]name[/code]."
@@ -6822,6 +6927,15 @@ msgid ""
"get the currently playing animation, and internally for animation playback "
"tracks. For more information, see [Animation]."
msgstr ""
+"Ð˜Ð¼Ñ Ð²Ð¾Ñпроизводимой в данный момент анимации. ЕÑли Ð°Ð½Ð¸Ð¼Ð°Ñ†Ð¸Ñ Ð½Ðµ "
+"воÑпроизводитÑÑ, значением ÑвойÑтва будет пуÑÑ‚Ð°Ñ Ñтрока. Изменение Ñтого "
+"Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð½Ðµ приводит к перезапуÑку анимации. Дополнительные ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ "
+"воÑпроизведении анимации Ñм. в [method play].\n"
+"[b]Примечание:[/b] Ð¥Ð¾Ñ‚Ñ Ñто ÑвойÑтво отображаетÑÑ Ð² инÑпекторе, оно не "
+"предназначено Ð´Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸ не ÑохранÑетÑÑ Ð² Ñцене. Это ÑвойÑтво в "
+"оÑновном иÑпользуетÑÑ Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ¹ воÑпроизводимой анимации, а "
+"также внутри движка Ð´Ð»Ñ Ð´Ð¾Ñ€Ð¾Ð¶ÐµÐº воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð°Ð½Ð¸Ð¼Ð°Ñ†Ð¸Ð¸. Ð”Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ "
+"дополнительной информации Ñм. [Animation]."
#: doc/classes/AnimationPlayer.xml:194
msgid "The length (in seconds) of the currently being played animation."
@@ -7423,21 +7537,25 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
#: doc/classes/Area.xml:17
msgid ""
-"Returns a list of intersecting [Area]s. For performance reasons (collisions "
-"are all processed at the same time) this list is modified once during the "
-"physics step, not immediately after objects are moved. Consider using "
-"signals instead."
+"Returns a list of intersecting [Area]s. The overlapping area's [member "
+"CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:23
+#: doc/classes/Area.xml:24
msgid ""
-"Returns a list of intersecting [PhysicsBody]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody]s. The overlapping body's "
+"[member CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:30
+#: doc/classes/Area.xml:32
msgid ""
"If [code]true[/code], the given area overlaps the Area.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -7445,7 +7563,7 @@ msgid ""
"physics step. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:38
+#: doc/classes/Area.xml:40
msgid ""
"If [code]true[/code], the given physics body overlaps the Area.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -7456,7 +7574,7 @@ msgid ""
"their tiles with collision shapes as a virtual physics body)."
msgstr ""
-#: doc/classes/Area.xml:46
+#: doc/classes/Area.xml:48
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
"velocity lost per second.\n"
@@ -7464,41 +7582,41 @@ msgid ""
"details about damping."
msgstr ""
-#: doc/classes/Area.xml:50 doc/classes/Area2D.xml:52
+#: doc/classes/Area.xml:52 doc/classes/Area2D.xml:54
msgid "The name of the area's audio bus."
msgstr ""
-#: doc/classes/Area.xml:53 doc/classes/Area2D.xml:55
+#: doc/classes/Area.xml:55 doc/classes/Area2D.xml:57
msgid ""
"If [code]true[/code], the area's audio bus overrides the default audio bus."
msgstr ""
-#: doc/classes/Area.xml:56
+#: doc/classes/Area.xml:58
msgid ""
"The area's gravity intensity (in meters per second squared). This value "
"multiplies the gravity vector. This is useful to alter the force of gravity "
"without altering its direction."
msgstr ""
-#: doc/classes/Area.xml:59 doc/classes/Area2D.xml:61
+#: doc/classes/Area.xml:61 doc/classes/Area2D.xml:63
msgid ""
"The falloff factor for point gravity. The greater the value, the faster "
"gravity decreases with distance."
msgstr ""
-#: doc/classes/Area.xml:62 doc/classes/Area2D.xml:64
+#: doc/classes/Area.xml:64 doc/classes/Area2D.xml:66
msgid ""
"If [code]true[/code], gravity is calculated from a point (set via [member "
"gravity_vec]). See also [member space_override]."
msgstr ""
-#: doc/classes/Area.xml:65 doc/classes/Area2D.xml:67
+#: doc/classes/Area.xml:67 doc/classes/Area2D.xml:69
msgid ""
"The area's gravity vector (not normalized). If gravity is a point (see "
"[member gravity_point]), this will be the point of attraction."
msgstr ""
-#: doc/classes/Area.xml:68
+#: doc/classes/Area.xml:70
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
"velocity lost per second.\n"
@@ -7506,61 +7624,61 @@ msgid ""
"about damping."
msgstr ""
-#: doc/classes/Area.xml:72 doc/classes/Area2D.xml:74
+#: doc/classes/Area.xml:74 doc/classes/Area2D.xml:76
msgid "If [code]true[/code], other monitoring areas can detect this area."
msgstr ""
-#: doc/classes/Area.xml:75 doc/classes/Area2D.xml:77
+#: doc/classes/Area.xml:77 doc/classes/Area2D.xml:79
msgid ""
"If [code]true[/code], the area detects bodies or areas entering and exiting "
"it."
msgstr ""
-#: doc/classes/Area.xml:78 doc/classes/Area2D.xml:80
+#: doc/classes/Area.xml:80 doc/classes/Area2D.xml:82
msgid "The area's priority. Higher priority areas are processed first."
msgstr ""
-#: doc/classes/Area.xml:81
+#: doc/classes/Area.xml:83
msgid ""
"The degree to which this area applies reverb to its associated audio. Ranges "
"from [code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
msgstr ""
-#: doc/classes/Area.xml:84
+#: doc/classes/Area.xml:86
msgid "If [code]true[/code], the area applies reverb to its associated audio."
msgstr ""
-#: doc/classes/Area.xml:87
+#: doc/classes/Area.xml:89
msgid "The reverb bus name to use for this area's associated audio."
msgstr ""
-#: doc/classes/Area.xml:90
+#: doc/classes/Area.xml:92
msgid ""
"The degree to which this area's reverb is a uniform effect. Ranges from "
"[code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
msgstr ""
-#: doc/classes/Area.xml:93 doc/classes/Area2D.xml:83
+#: doc/classes/Area.xml:95 doc/classes/Area2D.xml:85
msgid ""
"Override mode for gravity and damping calculations within this area. See "
"[enum SpaceOverride] for possible values."
msgstr ""
-#: doc/classes/Area.xml:100
+#: doc/classes/Area.xml:102
msgid ""
"Emitted when another Area enters this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
-#: doc/classes/Area.xml:107
+#: doc/classes/Area.xml:109
msgid ""
"Emitted when another Area exits this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
-#: doc/classes/Area.xml:117 doc/classes/Area.xml:130
+#: doc/classes/Area.xml:119 doc/classes/Area.xml:132
msgid ""
"Emitted when one of another Area's [Shape]s enters one of this Area's "
"[Shape]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -7575,7 +7693,7 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:140
+#: doc/classes/Area.xml:142
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] enters this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -7584,7 +7702,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:147
+#: doc/classes/Area.xml:149
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] exits this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -7593,7 +7711,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:157 doc/classes/Area.xml:170
+#: doc/classes/Area.xml:159 doc/classes/Area.xml:172
msgid ""
"Emitted when one of a [PhysicsBody] or [GridMap]'s [Shape]s enters one of "
"this Area's [Shape]s. Requires [member monitoring] to be set to [code]true[/"
@@ -7610,29 +7728,29 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:180 doc/classes/Area2D.xml:170
+#: doc/classes/Area.xml:182 doc/classes/Area2D.xml:172
msgid "This area does not affect gravity/damping."
msgstr ""
-#: doc/classes/Area.xml:183 doc/classes/Area2D.xml:173
+#: doc/classes/Area.xml:185 doc/classes/Area2D.xml:175
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order)."
msgstr ""
-#: doc/classes/Area.xml:186 doc/classes/Area2D.xml:176
+#: doc/classes/Area.xml:188 doc/classes/Area2D.xml:178
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order), ignoring any lower priority areas."
msgstr ""
-#: doc/classes/Area.xml:189 doc/classes/Area2D.xml:179
+#: doc/classes/Area.xml:191 doc/classes/Area2D.xml:181
msgid ""
"This area replaces any gravity/damping, even the defaults, ignoring any "
"lower priority areas."
msgstr ""
-#: doc/classes/Area.xml:192 doc/classes/Area2D.xml:182
+#: doc/classes/Area.xml:194 doc/classes/Area2D.xml:184
msgid ""
"This area replaces any gravity/damping calculated so far (in [member "
"priority] order), but keeps calculating the rest of the areas."
@@ -7671,21 +7789,25 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
#: doc/classes/Area2D.xml:19
msgid ""
-"Returns a list of intersecting [Area2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [Area2D]s. The overlapping area's [member "
+"CollisionObject2D.collision_layer] must be part of this area's [member "
+"CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:25
+#: doc/classes/Area2D.xml:26
msgid ""
-"Returns a list of intersecting [PhysicsBody2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody2D]s. The overlapping body's "
+"[member CollisionObject2D.collision_layer] must be part of this area's "
+"[member CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:32
+#: doc/classes/Area2D.xml:34
msgid ""
"If [code]true[/code], the given area overlaps the Area2D.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -7693,7 +7815,7 @@ msgid ""
"the physics step. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:40
+#: doc/classes/Area2D.xml:42
msgid ""
"If [code]true[/code], the given physics body overlaps the Area2D.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -7704,7 +7826,7 @@ msgid ""
"register their tiles with collision shapes as a virtual physics body)."
msgstr ""
-#: doc/classes/Area2D.xml:48
+#: doc/classes/Area2D.xml:50
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
"velocity lost per second.\n"
@@ -7712,14 +7834,14 @@ msgid ""
"details about damping."
msgstr ""
-#: doc/classes/Area2D.xml:58
+#: doc/classes/Area2D.xml:60
msgid ""
"The area's gravity intensity (in pixels per second squared). This value "
"multiplies the gravity vector. This is useful to alter the force of gravity "
"without altering its direction."
msgstr ""
-#: doc/classes/Area2D.xml:70
+#: doc/classes/Area2D.xml:72
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
"velocity lost per second.\n"
@@ -7727,21 +7849,21 @@ msgid ""
"about damping."
msgstr ""
-#: doc/classes/Area2D.xml:90
+#: doc/classes/Area2D.xml:92
msgid ""
"Emitted when another Area2D enters this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-#: doc/classes/Area2D.xml:97
+#: doc/classes/Area2D.xml:99
msgid ""
"Emitted when another Area2D exits this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-#: doc/classes/Area2D.xml:107
+#: doc/classes/Area2D.xml:109
msgid ""
"Emitted when one of another Area2D's [Shape2D]s enters one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -7756,7 +7878,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:120
+#: doc/classes/Area2D.xml:122
msgid ""
"Emitted when one of another Area2D's [Shape2D]s exits one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -7771,7 +7893,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:130
+#: doc/classes/Area2D.xml:132
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] enters this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -7780,7 +7902,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:137
+#: doc/classes/Area2D.xml:139
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] exits this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -7789,7 +7911,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:147
+#: doc/classes/Area2D.xml:149
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s enters one "
"of this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -7808,7 +7930,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:160
+#: doc/classes/Area2D.xml:162
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s exits one of "
"this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -11433,11 +11555,11 @@ msgstr ""
#: doc/classes/AudioStreamSample.xml:50
msgid "8-bit audio codec."
-msgstr ""
+msgstr "8-битный аудиокодек."
#: doc/classes/AudioStreamSample.xml:53
msgid "16-bit audio codec."
-msgstr ""
+msgstr "16-битный аудиокодек."
#: doc/classes/AudioStreamSample.xml:56
msgid "Audio is compressed using IMA ADPCM."
@@ -11520,42 +11642,47 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
-"no save path is provided it will try to match the path from the current "
+"no root node is provided, parent of this node will be used as root instead. "
+"If no save path is provided it will try to match the path from the current "
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -11569,62 +11696,62 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
msgid "The rotation of the baked custom sky."
msgstr ""
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -11632,35 +11759,35 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -11668,13 +11795,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -11686,66 +11813,78 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr ""
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
msgid "Baking was successful."
msgstr ""
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr ""
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
#, fuzzy
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr "Возвращает Ð°Ñ€ÐºÑ‚Ð°Ð½Ð³ÐµÐ½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð²."
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr ""
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:133
+#: doc/classes/BakedLightmap.xml:132
+msgid ""
+"Returns if lightmapper can't be created. Unless you are using a custom "
+"lightmapper, please report this as bug."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:135
+msgid ""
+"There is no root node to start baking from. Either provide [code]from_node[/"
+"code] argument or attach this node to a parent that should be used as root."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:136
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:139
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:142
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -12209,8 +12348,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -12598,26 +12740,33 @@ msgid "Text [Color] used when the [Button] is disabled."
msgstr ""
#: doc/classes/Button.xml:77
-msgid "Text [Color] used when the [Button] is being hovered."
+msgid ""
+"Text [Color] used when the [Button] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/Button.xml:80
-msgid "Text [Color] used when the [Button] is being pressed."
+msgid "Text [Color] used when the [Button] is being hovered."
msgstr ""
#: doc/classes/Button.xml:83
-msgid "[StyleBox] used when the [Button] is being hovered."
+msgid "Text [Color] used when the [Button] is being pressed."
msgstr ""
#: doc/classes/Button.xml:86
-msgid "The horizontal space between [Button]'s icon and text."
+msgid "[StyleBox] used when the [Button] is being hovered."
msgstr ""
#: doc/classes/Button.xml:89
-msgid "Default [StyleBox] for the [Button]."
+msgid "The horizontal space between [Button]'s icon and text."
msgstr ""
#: doc/classes/Button.xml:92
+msgid "Default [StyleBox] for the [Button]."
+msgstr ""
+
+#: doc/classes/Button.xml:95
msgid "[StyleBox] used when the [Button] is being pressed."
msgstr ""
@@ -14094,80 +14243,96 @@ msgstr ""
msgid "The check icon to display when the [CheckBox] is checked."
msgstr ""
-#: doc/classes/CheckBox.xml:30
+#: doc/classes/CheckBox.xml:28
+msgid "The check icon to display when the [CheckBox] is checked and disabled."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:31
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is disabled."
msgstr ""
-#: doc/classes/CheckBox.xml:33
+#: doc/classes/CheckBox.xml:34
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is focused."
msgstr ""
-#: doc/classes/CheckBox.xml:36
+#: doc/classes/CheckBox.xml:37
msgid "The [Font] to use for the [CheckBox] text."
msgstr ""
-#: doc/classes/CheckBox.xml:39
+#: doc/classes/CheckBox.xml:40
msgid "The [CheckBox] text's font color."
msgstr ""
-#: doc/classes/CheckBox.xml:42
+#: doc/classes/CheckBox.xml:43
msgid "The [CheckBox] text's font color when it's disabled."
msgstr ""
-#: doc/classes/CheckBox.xml:45
+#: doc/classes/CheckBox.xml:46
+msgid ""
+"The [CheckBox] text's font color when it's focused. Only replaces the normal "
+"text color of the checkbox. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:49
msgid "The [CheckBox] text's font color when it's hovered."
msgstr ""
-#: doc/classes/CheckBox.xml:48
+#: doc/classes/CheckBox.xml:52
msgid "The [CheckBox] text's font color when it's hovered and pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:51
+#: doc/classes/CheckBox.xml:55
msgid "The [CheckBox] text's font color when it's pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:54
+#: doc/classes/CheckBox.xml:58
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered."
msgstr ""
-#: doc/classes/CheckBox.xml:57
+#: doc/classes/CheckBox.xml:61
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered and "
"pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:60
+#: doc/classes/CheckBox.xml:64
msgid "The separation between the check icon and the text (in pixels)."
msgstr ""
-#: doc/classes/CheckBox.xml:63 doc/classes/CheckButton.xml:58
+#: doc/classes/CheckBox.xml:67 doc/classes/CheckButton.xml:61
msgid "The [StyleBox] to display as a background."
msgstr ""
-#: doc/classes/CheckBox.xml:66
+#: doc/classes/CheckBox.xml:70
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:69
+#: doc/classes/CheckBox.xml:73
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is checked."
msgstr ""
-#: doc/classes/CheckBox.xml:74
+#: doc/classes/CheckBox.xml:78
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is unchecked."
msgstr ""
-#: doc/classes/CheckBox.xml:79
+#: doc/classes/CheckBox.xml:83
msgid "The check icon to display when the [CheckBox] is unchecked."
msgstr ""
+#: doc/classes/CheckBox.xml:86
+msgid ""
+"The check icon to display when the [CheckBox] is unchecked and disabled."
+msgstr ""
+
#: doc/classes/CheckButton.xml:4
msgid "Checkable button. See also [CheckBox]."
msgstr ""
@@ -14211,49 +14376,56 @@ msgid "The [CheckButton] text's font color when it's disabled."
msgstr ""
#: doc/classes/CheckButton.xml:40
-msgid "The [CheckButton] text's font color when it's hovered."
+msgid ""
+"The [CheckButton] text's font color when it's focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/CheckButton.xml:43
-msgid "The [CheckButton] text's font color when it's hovered and pressed."
+msgid "The [CheckButton] text's font color when it's hovered."
msgstr ""
#: doc/classes/CheckButton.xml:46
-msgid "The [CheckButton] text's font color when it's pressed."
+msgid "The [CheckButton] text's font color when it's hovered and pressed."
msgstr ""
#: doc/classes/CheckButton.xml:49
+msgid "The [CheckButton] text's font color when it's pressed."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:52
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered."
msgstr ""
-#: doc/classes/CheckButton.xml:52
+#: doc/classes/CheckButton.xml:55
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered "
"and pressed."
msgstr ""
-#: doc/classes/CheckButton.xml:55
+#: doc/classes/CheckButton.xml:58
msgid "The separation between the toggle icon and the text (in pixels)."
msgstr ""
-#: doc/classes/CheckButton.xml:61
+#: doc/classes/CheckButton.xml:64
msgid "The icon to display when the [CheckButton] is unchecked."
msgstr ""
-#: doc/classes/CheckButton.xml:64
+#: doc/classes/CheckButton.xml:67
msgid "The icon to display when the [CheckButton] is unchecked and disabled."
msgstr ""
-#: doc/classes/CheckButton.xml:67
+#: doc/classes/CheckButton.xml:70
msgid "The icon to display when the [CheckButton] is checked."
msgstr ""
-#: doc/classes/CheckButton.xml:70
+#: doc/classes/CheckButton.xml:73
msgid "The icon to display when the [CheckButton] is checked and disabled."
msgstr ""
-#: doc/classes/CheckButton.xml:73
+#: doc/classes/CheckButton.xml:76
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is pressed."
msgstr ""
@@ -14728,7 +14900,7 @@ msgstr ""
#: doc/classes/CollisionObject2D.xml:156
msgid "Returns the shape owner's [Transform2D]."
-msgstr ""
+msgstr "Возвращает [Transform2D] владельца фигуры."
#: doc/classes/CollisionObject2D.xml:180
msgid ""
@@ -15280,7 +15452,7 @@ msgstr ""
#: doc/classes/Color.xml:292
msgid "Beige color."
-msgstr ""
+msgstr "Бежевый цвет."
#: doc/classes/Color.xml:295
msgid "Bisque color."
@@ -15288,7 +15460,7 @@ msgstr ""
#: doc/classes/Color.xml:298
msgid "Black color."
-msgstr ""
+msgstr "Черный цвет."
#: doc/classes/Color.xml:301
msgid "Blanche almond color."
@@ -15296,7 +15468,7 @@ msgstr ""
#: doc/classes/Color.xml:304
msgid "Blue color."
-msgstr ""
+msgstr "Синий цвет."
#: doc/classes/Color.xml:307
msgid "Blue violet color."
@@ -15304,7 +15476,7 @@ msgstr ""
#: doc/classes/Color.xml:310
msgid "Brown color."
-msgstr ""
+msgstr "Коричневый цвет."
#: doc/classes/Color.xml:313
msgid "Burly wood color."
@@ -15320,7 +15492,7 @@ msgstr ""
#: doc/classes/Color.xml:322
msgid "Chocolate color."
-msgstr ""
+msgstr "Шоколадный цвет."
#: doc/classes/Color.xml:325
msgid "Coral color."
@@ -15344,7 +15516,7 @@ msgstr ""
#: doc/classes/Color.xml:340
msgid "Dark blue color."
-msgstr ""
+msgstr "Темно-Ñиний цвет."
#: doc/classes/Color.xml:343
msgid "Dark cyan color."
@@ -15408,7 +15580,7 @@ msgstr ""
#: doc/classes/Color.xml:388
msgid "Dark violet color."
-msgstr ""
+msgstr "Темно-фиолетовый цвет."
#: doc/classes/Color.xml:391
msgid "Deep pink color."
@@ -15440,7 +15612,7 @@ msgstr ""
#: doc/classes/Color.xml:412
msgid "Fuchsia color."
-msgstr ""
+msgstr "Цвет фукÑии."
#: doc/classes/Color.xml:415
msgid "Gainsboro color."
@@ -15452,7 +15624,7 @@ msgstr ""
#: doc/classes/Color.xml:421
msgid "Gold color."
-msgstr ""
+msgstr "Золотой цвет."
#: doc/classes/Color.xml:424
msgid "Goldenrod color."
@@ -15460,11 +15632,11 @@ msgstr ""
#: doc/classes/Color.xml:427
msgid "Gray color."
-msgstr ""
+msgstr "Серый цвет."
#: doc/classes/Color.xml:430
msgid "Green color."
-msgstr ""
+msgstr "Зеленый цвет."
#: doc/classes/Color.xml:433
msgid "Green yellow color."
@@ -15484,7 +15656,7 @@ msgstr ""
#: doc/classes/Color.xml:445
msgid "Indigo color."
-msgstr ""
+msgstr "Цвет индиго."
#: doc/classes/Color.xml:448
msgid "Ivory color."
@@ -15528,7 +15700,7 @@ msgstr ""
#: doc/classes/Color.xml:478
msgid "Light gray color."
-msgstr ""
+msgstr "Светло-Ñерый цвет."
#: doc/classes/Color.xml:481
msgid "Light green color."
@@ -15648,7 +15820,7 @@ msgstr ""
#: doc/classes/Color.xml:568
msgid "Olive color."
-msgstr ""
+msgstr "Оливковый цвет."
#: doc/classes/Color.xml:571
msgid "Olive drab color."
@@ -15656,7 +15828,7 @@ msgstr ""
#: doc/classes/Color.xml:574
msgid "Orange color."
-msgstr ""
+msgstr "Оранжевый цвет."
#: doc/classes/Color.xml:577
msgid "Orange red color."
@@ -15664,7 +15836,7 @@ msgstr ""
#: doc/classes/Color.xml:580
msgid "Orchid color."
-msgstr ""
+msgstr "Цвет орхидеи."
#: doc/classes/Color.xml:583
msgid "Pale goldenrod color."
@@ -15696,7 +15868,7 @@ msgstr ""
#: doc/classes/Color.xml:604
msgid "Pink color."
-msgstr ""
+msgstr "Розовый цвет."
#: doc/classes/Color.xml:607
msgid "Plum color."
@@ -15708,7 +15880,7 @@ msgstr ""
#: doc/classes/Color.xml:613
msgid "Purple color."
-msgstr ""
+msgstr "Фиолетовый цвет."
#: doc/classes/Color.xml:616
msgid "Rebecca purple color."
@@ -15716,7 +15888,7 @@ msgstr ""
#: doc/classes/Color.xml:619
msgid "Red color."
-msgstr ""
+msgstr "КраÑный цвет."
#: doc/classes/Color.xml:622
msgid "Rosy brown color."
@@ -15744,7 +15916,7 @@ msgstr ""
#: doc/classes/Color.xml:640
msgid "Seashell color."
-msgstr ""
+msgstr "Цвет морÑкой раковины."
#: doc/classes/Color.xml:643
msgid "Sienna color."
@@ -15756,7 +15928,7 @@ msgstr ""
#: doc/classes/Color.xml:649
msgid "Sky blue color."
-msgstr ""
+msgstr "ÐебеÑно-голубой цвет."
#: doc/classes/Color.xml:652
msgid "Slate blue color."
@@ -15804,7 +15976,7 @@ msgstr ""
#: doc/classes/Color.xml:685
msgid "Violet color."
-msgstr ""
+msgstr "Фиолетовый цвет."
#: doc/classes/Color.xml:688
msgid "Web gray color."
@@ -15836,7 +16008,7 @@ msgstr ""
#: doc/classes/Color.xml:709
msgid "Yellow color."
-msgstr ""
+msgstr "Желтый цвет."
#: doc/classes/Color.xml:712
msgid "Yellow green color."
@@ -16036,26 +16208,33 @@ msgid "Text [Color] used when the [ColorPickerButton] is disabled."
msgstr ""
#: doc/classes/ColorPickerButton.xml:80
-msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
+msgid ""
+"Text [Color] used when the [ColorPickerButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/ColorPickerButton.xml:83
-msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
+msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
msgstr ""
#: doc/classes/ColorPickerButton.xml:86
-msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
+msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
msgstr ""
#: doc/classes/ColorPickerButton.xml:89
-msgid "The horizontal space between [ColorPickerButton]'s icon and text."
+msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
msgstr ""
#: doc/classes/ColorPickerButton.xml:92
-msgid "Default [StyleBox] for the [ColorPickerButton]."
+msgid "The horizontal space between [ColorPickerButton]'s icon and text."
msgstr ""
#: doc/classes/ColorPickerButton.xml:95
+msgid "Default [StyleBox] for the [ColorPickerButton]."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:98
msgid "[StyleBox] used when the [ColorPickerButton] is being pressed."
msgstr ""
@@ -20043,11 +20222,11 @@ msgstr ""
#: doc/classes/CylinderShape.xml:18
msgid "The cylinder's height."
-msgstr ""
+msgstr "Ð’Ñ‹Ñота цилиндра."
#: doc/classes/CylinderShape.xml:21
msgid "The cylinder's radius."
-msgstr ""
+msgstr "Ð Ð°Ð´Ð¸ÑƒÑ Ñ†Ð¸Ð»Ð¸Ð½Ð´Ñ€Ð°."
#: doc/classes/DampedSpringJoint2D.xml:4
msgid "Damped spring constraint for 2D physics."
@@ -20228,6 +20407,10 @@ msgid ""
"[b]Note:[/b] Don't erase elements while iterating over the dictionary. You "
"can iterate over the [method keys] array instead."
msgstr ""
+"УдалÑет в Ñловаре пару ключ/значение по ключу. Возвращает [code]true[/code] "
+"еÑли ключ приÑутÑтвовал в Ñловаре, иначе возвращает [code]false[/code].\n"
+"[b]Примечание:[/b] Ðе удалÑйте Ñлементы ÑÐ»Ð¾Ð²Ð°Ñ€Ñ Ð²Ð¾ Ð²Ñ€ÐµÐ¼Ñ Ð¿ÐµÑ€ÐµÐ±Ð¾Ñ€Ð°. ВмеÑто "
+"Ñтого, можете перебирать маÑÑив [method keys]."
#: doc/classes/Dictionary.xml:123
msgid ""
@@ -21393,7 +21576,8 @@ msgid ""
"get_resource_type]. They may optionally specify some import presets that "
"affect the import process. EditorImportPlugins are responsible for creating "
"the resources and saving them in the [code].import[/code] directory (see "
-"[member ProjectSettings.application/config/project_data_dir_name]).\n"
+"[member ProjectSettings.application/config/"
+"use_hidden_project_data_directory]).\n"
"Below is an example EditorImportPlugin that imports a [Mesh] from a file "
"with the extension \".special\" or \".spec\":\n"
"[codeblock]\n"
@@ -21520,7 +21704,7 @@ msgstr ""
msgid ""
"Gets the extension used to save this resource in the [code].import[/code] "
"directory (see [member ProjectSettings.application/config/"
-"project_data_dir_name])."
+"use_hidden_project_data_directory])."
msgstr ""
#: doc/classes/EditorImportPlugin.xml:130
@@ -22562,8 +22746,11 @@ msgstr ""
msgid "Emitted when the value of the edited resource was changed."
msgstr ""
-#: doc/classes/EditorResourcePicker.xml:89
-msgid "Emitted when the resource value was set and user clicked to edit it."
+#: doc/classes/EditorResourcePicker.xml:90
+msgid ""
+"Emitted when the resource value was set and user clicked to edit it. When "
+"[code]edit[/code] is [code]true[/code], the signal was caused by the context "
+"menu \"Edit\" option."
msgstr ""
#: doc/classes/EditorResourcePreview.xml:4
@@ -26325,21 +26512,32 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html"
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -26348,14 +26546,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -26365,36 +26567,36 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
#, fuzzy
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
@@ -26402,46 +26604,46 @@ msgstr ""
"ЕÑли [code]true[/code], Ð°Ð½Ð¸Ð¼Ð°Ñ†Ð¸Ñ [member animation] воÑпроизводитÑÑ Ð² данный "
"момент."
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
msgstr ""
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr ""
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -28776,7 +28978,7 @@ msgstr ""
#: doc/classes/HTTPRequest.xml:158
msgid "Request successful."
-msgstr ""
+msgstr "Ð—Ð°Ð¿Ñ€Ð¾Ñ ÑƒÑпешен."
#: doc/classes/HTTPRequest.xml:163
msgid "Request failed while connecting."
@@ -29203,16 +29405,18 @@ msgstr ""
#: doc/classes/Image.xml:436
msgid ""
"OpenGL texture format [code]RED[/code] with a single component and a "
-"bitdepth of 8."
+"bitdepth of 8.\n"
+"[b]Note:[/b] When using the GLES2 backend, this uses the alpha channel "
+"instead of the red channel for storage."
msgstr ""
-#: doc/classes/Image.xml:439
+#: doc/classes/Image.xml:440
msgid ""
"OpenGL texture format [code]RG[/code] with two components and a bitdepth of "
"8 for each."
msgstr ""
-#: doc/classes/Image.xml:442
+#: doc/classes/Image.xml:443
msgid ""
"OpenGL texture format [code]RGB[/code] with three components, each with a "
"bitdepth of 8.\n"
@@ -29220,7 +29424,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:446
+#: doc/classes/Image.xml:447
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 8.\n"
@@ -29228,73 +29432,73 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:450
+#: doc/classes/Image.xml:451
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 4."
msgstr ""
-#: doc/classes/Image.xml:453
+#: doc/classes/Image.xml:454
msgid ""
"OpenGL texture format [code]GL_RGB5_A1[/code] where 5 bits of depth for each "
"component of RGB and one bit for alpha."
msgstr ""
-#: doc/classes/Image.xml:456
+#: doc/classes/Image.xml:457
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 32-"
"bit floating-point value."
msgstr ""
-#: doc/classes/Image.xml:459
+#: doc/classes/Image.xml:460
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:462
+#: doc/classes/Image.xml:463
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:465
+#: doc/classes/Image.xml:466
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:468
+#: doc/classes/Image.xml:469
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 16-"
"bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:471
+#: doc/classes/Image.xml:472
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:474
+#: doc/classes/Image.xml:475
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:477
+#: doc/classes/Image.xml:478
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:480
+#: doc/classes/Image.xml:481
msgid ""
"A special OpenGL texture format where the three color components have 9 bits "
"of precision and all three share a single 5-bit exponent."
msgstr ""
-#: doc/classes/Image.xml:483
+#: doc/classes/Image.xml:484
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 1, and is the smallest variation "
@@ -29304,7 +29508,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:487
+#: doc/classes/Image.xml:488
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 2, and color data is interpreted "
@@ -29314,7 +29518,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:491
+#: doc/classes/Image.xml:492
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format also known as Block Compression 3 or BC3 that contains 64 "
@@ -29325,7 +29529,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:495
+#: doc/classes/Image.xml:496
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -29333,7 +29537,7 @@ msgid ""
"DXT5 uses for the alpha channel."
msgstr ""
-#: doc/classes/Image.xml:498
+#: doc/classes/Image.xml:499
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -29341,7 +29545,7 @@ msgid ""
"algorithm that DXT5 uses for the alpha channel."
msgstr ""
-#: doc/classes/Image.xml:501
+#: doc/classes/Image.xml:502
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned normalized "
@@ -29350,21 +29554,21 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:505
+#: doc/classes/Image.xml:506
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with signed floating-point "
"RGB components."
msgstr ""
-#: doc/classes/Image.xml:508
+#: doc/classes/Image.xml:509
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned floating-point "
"RGB components."
msgstr ""
-#: doc/classes/Image.xml:511
+#: doc/classes/Image.xml:512
msgid ""
"Texture format used on PowerVR-supported mobile platforms, uses 2-bit color "
"depth with no alpha. More information can be found [url=https://en.wikipedia."
@@ -29373,25 +29577,25 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:515
+#: doc/classes/Image.xml:516
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with an "
"alpha component."
msgstr ""
-#: doc/classes/Image.xml:518
+#: doc/classes/Image.xml:519
msgid ""
"Similar to [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with 4-"
"bit color depth and no alpha."
msgstr ""
-#: doc/classes/Image.xml:521
+#: doc/classes/Image.xml:522
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC4[/url], but with an "
"alpha component."
msgstr ""
-#: doc/classes/Image.xml:524
+#: doc/classes/Image.xml:525
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC1]Ericsson Texture Compression format 1[/"
@@ -29399,7 +29603,7 @@ msgid ""
"standard. This format cannot store an alpha channel."
msgstr ""
-#: doc/classes/Image.xml:527
+#: doc/classes/Image.xml:528
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -29407,7 +29611,7 @@ msgid ""
"unsigned data."
msgstr ""
-#: doc/classes/Image.xml:530
+#: doc/classes/Image.xml:531
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -29415,7 +29619,7 @@ msgid ""
"channel of signed data."
msgstr ""
-#: doc/classes/Image.xml:533
+#: doc/classes/Image.xml:534
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -29423,7 +29627,7 @@ msgid ""
"of unsigned data."
msgstr ""
-#: doc/classes/Image.xml:536
+#: doc/classes/Image.xml:537
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -29431,7 +29635,7 @@ msgid ""
"channels of signed data."
msgstr ""
-#: doc/classes/Image.xml:539
+#: doc/classes/Image.xml:540
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -29441,7 +29645,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:543
+#: doc/classes/Image.xml:544
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -29451,7 +29655,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:547
+#: doc/classes/Image.xml:548
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -29462,31 +29666,31 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:551
+#: doc/classes/Image.xml:552
msgid "Represents the size of the [enum Format] enum."
msgstr ""
-#: doc/classes/Image.xml:554
+#: doc/classes/Image.xml:555
msgid ""
"Performs nearest-neighbor interpolation. If the image is resized, it will be "
"pixelated."
msgstr ""
-#: doc/classes/Image.xml:557
+#: doc/classes/Image.xml:558
msgid ""
"Performs bilinear interpolation. If the image is resized, it will be blurry. "
"This mode is faster than [constant INTERPOLATE_CUBIC], but it results in "
"lower quality."
msgstr ""
-#: doc/classes/Image.xml:560
+#: doc/classes/Image.xml:561
msgid ""
"Performs cubic interpolation. If the image is resized, it will be blurry. "
"This mode often gives better results compared to [constant "
"INTERPOLATE_BILINEAR], at the cost of being slower."
msgstr ""
-#: doc/classes/Image.xml:563
+#: doc/classes/Image.xml:564
msgid ""
"Performs bilinear separately on the two most-suited mipmap levels, then "
"linearly interpolates between them.\n"
@@ -29501,55 +29705,55 @@ msgid ""
"a new set will be generated for the resulting image."
msgstr ""
-#: doc/classes/Image.xml:570
+#: doc/classes/Image.xml:571
msgid ""
"Performs Lanczos interpolation. This is the slowest image resizing mode, but "
"it typically gives the best results, especially when downscalng images."
msgstr ""
-#: doc/classes/Image.xml:573
+#: doc/classes/Image.xml:574
msgid "Image does not have alpha."
msgstr ""
-#: doc/classes/Image.xml:576
+#: doc/classes/Image.xml:577
msgid "Image stores alpha in a single bit."
msgstr ""
-#: doc/classes/Image.xml:579
+#: doc/classes/Image.xml:580
msgid "Image uses alpha."
msgstr ""
-#: doc/classes/Image.xml:582
+#: doc/classes/Image.xml:583
msgid "Use S3TC compression."
msgstr ""
-#: doc/classes/Image.xml:585
+#: doc/classes/Image.xml:586
msgid "Use PVRTC2 compression."
msgstr ""
-#: doc/classes/Image.xml:588
+#: doc/classes/Image.xml:589
msgid "Use PVRTC4 compression."
msgstr ""
-#: doc/classes/Image.xml:591
+#: doc/classes/Image.xml:592
msgid "Use ETC compression."
msgstr ""
-#: doc/classes/Image.xml:594
+#: doc/classes/Image.xml:595
msgid "Use ETC2 compression."
msgstr ""
-#: doc/classes/Image.xml:597
+#: doc/classes/Image.xml:598
msgid ""
"Source texture (before compression) is a regular texture. Default for all "
"textures."
msgstr ""
-#: doc/classes/Image.xml:600
+#: doc/classes/Image.xml:601
msgid "Source texture (before compression) is in sRGB space."
msgstr ""
-#: doc/classes/Image.xml:603
+#: doc/classes/Image.xml:604
msgid ""
"Source texture (before compression) is a normal texture (e.g. it can be "
"compressed into two channels)."
@@ -29774,6 +29978,17 @@ msgstr ""
#: doc/classes/Input.xml:43
msgid ""
+"Sends all input events which are in the current buffer to the game loop. "
+"These events may have been buffered as a result of accumulated input "
+"([method set_use_accumulated_input]) or agile input flushing ([member "
+"ProjectSettings.input_devices/buffering/agile_event_flushing]).\n"
+"The engine will already do this itself at key execution points (at least "
+"once per frame). However, this can be useful in advanced cases where you "
+"want precise control over the timing of event handling."
+msgstr ""
+
+#: doc/classes/Input.xml:50
+msgid ""
"Returns the acceleration of the device's accelerometer sensor, if the device "
"has one. Otherwise, the method returns [constant Vector3.ZERO].\n"
"Note this method returns an empty [Vector3] when running from the editor "
@@ -29785,7 +30000,7 @@ msgid ""
"the Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:53
+#: doc/classes/Input.xml:60
msgid ""
"Returns a value between 0 and 1 representing the raw intensity of the given "
"action, ignoring the action's deadzone. In most cases, you should use "
@@ -29795,7 +30010,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:62
+#: doc/classes/Input.xml:69
msgid ""
"Returns a value between 0 and 1 representing the intensity of the given "
"action. In a joypad, for example, the further away the axis (analog sticks "
@@ -29807,7 +30022,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:71
+#: doc/classes/Input.xml:78
msgid ""
"Get axis input by specifying two actions, one negative and one positive.\n"
"This is a shorthand for writing [code]Input."
@@ -29815,17 +30030,17 @@ msgid ""
"get_action_strength(\"negative_action\")[/code]."
msgstr ""
-#: doc/classes/Input.xml:78
+#: doc/classes/Input.xml:85
msgid ""
"Returns an [Array] containing the device IDs of all currently connected "
"joypads."
msgstr ""
-#: doc/classes/Input.xml:84
+#: doc/classes/Input.xml:91
msgid "Returns the currently assigned cursor shape (see [enum CursorShape])."
msgstr ""
-#: doc/classes/Input.xml:90
+#: doc/classes/Input.xml:97
msgid ""
"Returns the gravity of the device's accelerometer sensor, if the device has "
"one. Otherwise, the method returns [constant Vector3.ZERO].\n"
@@ -29835,7 +30050,7 @@ msgid ""
"Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:97
+#: doc/classes/Input.xml:104
msgid ""
"Returns the rotation rate in rad/s around a device's X, Y, and Z axes of the "
"gyroscope sensor, if the device has one. Otherwise, the method returns "
@@ -29844,53 +30059,53 @@ msgid ""
"it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:106
+#: doc/classes/Input.xml:113
msgid ""
"Returns the current value of the joypad axis at given index (see [enum "
"JoystickList])."
msgstr ""
-#: doc/classes/Input.xml:113
+#: doc/classes/Input.xml:120
msgid "Returns the index of the provided axis name."
msgstr ""
-#: doc/classes/Input.xml:120
+#: doc/classes/Input.xml:127
msgid ""
"Receives a [enum JoystickList] axis and returns its equivalent name as a "
"string."
msgstr ""
-#: doc/classes/Input.xml:127
+#: doc/classes/Input.xml:134
msgid "Returns the index of the provided button name."
msgstr ""
-#: doc/classes/Input.xml:134
+#: doc/classes/Input.xml:141
msgid ""
"Receives a gamepad button from [enum JoystickList] and returns its "
"equivalent name as a string."
msgstr ""
-#: doc/classes/Input.xml:141
+#: doc/classes/Input.xml:148
msgid ""
"Returns a SDL2-compatible device GUID on platforms that use gamepad "
"remapping. Returns [code]\"Default Gamepad\"[/code] otherwise."
msgstr ""
-#: doc/classes/Input.xml:148
+#: doc/classes/Input.xml:155
msgid "Returns the name of the joypad at the specified device index."
msgstr ""
-#: doc/classes/Input.xml:155
+#: doc/classes/Input.xml:162
msgid "Returns the duration of the current vibration effect in seconds."
msgstr ""
-#: doc/classes/Input.xml:162
+#: doc/classes/Input.xml:169
msgid ""
"Returns the strength of the joypad vibration: x is the strength of the weak "
"motor, and y is the strength of the strong motor."
msgstr ""
-#: doc/classes/Input.xml:168
+#: doc/classes/Input.xml:175
msgid ""
"Returns the mouse speed for the last time the cursor was moved, and this "
"until the next frame where the mouse moves. This means that even if the "
@@ -29898,7 +30113,7 @@ msgid ""
"motion."
msgstr ""
-#: doc/classes/Input.xml:174
+#: doc/classes/Input.xml:181
msgid ""
"Returns the magnetic field strength in micro-Tesla for all axes of the "
"device's magnetometer sensor, if the device has one. Otherwise, the method "
@@ -29907,17 +30122,17 @@ msgid ""
"platforms, it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:181
+#: doc/classes/Input.xml:188
msgid ""
"Returns mouse buttons as a bitmask. If multiple mouse buttons are pressed at "
"the same time, the bits are added together."
msgstr ""
-#: doc/classes/Input.xml:187
+#: doc/classes/Input.xml:194
msgid "Returns the mouse mode. See the constants for more information."
msgstr ""
-#: doc/classes/Input.xml:198
+#: doc/classes/Input.xml:205
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -29930,7 +30145,7 @@ msgid ""
"want (on the range of 0 to 1)."
msgstr ""
-#: doc/classes/Input.xml:208
+#: doc/classes/Input.xml:215
msgid ""
"Returns [code]true[/code] when the user starts pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user pressed down "
@@ -29942,7 +30157,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:218
+#: doc/classes/Input.xml:225
msgid ""
"Returns [code]true[/code] when the user stops pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user released the "
@@ -29952,7 +30167,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:227
+#: doc/classes/Input.xml:234
msgid ""
"Returns [code]true[/code] if you are pressing the action event. Note that if "
"an action has multiple buttons assigned and more than one of them is "
@@ -29963,13 +30178,13 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:236
+#: doc/classes/Input.xml:243
msgid ""
"Returns [code]true[/code] if you are pressing the joypad button (see [enum "
"JoystickList])."
msgstr ""
-#: doc/classes/Input.xml:243
+#: doc/classes/Input.xml:250
msgid ""
"Returns [code]true[/code] if the system knows the specified device. This "
"means that it sets all button and axis indices exactly as defined in [enum "
@@ -29977,19 +30192,19 @@ msgid ""
"but you can still retrieve events from them."
msgstr ""
-#: doc/classes/Input.xml:250
+#: doc/classes/Input.xml:257
msgid ""
"Returns [code]true[/code] if you are pressing the key. You can pass a [enum "
"KeyList] constant."
msgstr ""
-#: doc/classes/Input.xml:257
+#: doc/classes/Input.xml:264
msgid ""
"Returns [code]true[/code] if you are pressing the mouse button specified "
"with [enum ButtonList]."
msgstr ""
-#: doc/classes/Input.xml:267
+#: doc/classes/Input.xml:274
msgid ""
"Notifies the [Input] singleton that a connection has changed, to update the "
"state for the [code]device[/code] index.\n"
@@ -29998,7 +30213,7 @@ msgid ""
"triggered internally."
msgstr ""
-#: doc/classes/Input.xml:275
+#: doc/classes/Input.xml:282
msgid ""
"Feeds an [InputEvent] to the game. Can be used to artificially trigger input "
"events from code. Also generates [method Node._input] calls.\n"
@@ -30011,12 +30226,21 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Input.xml:289
+#: doc/classes/Input.xml:296
msgid ""
"Removes all mappings from the internal database that match the given GUID."
msgstr ""
-#: doc/classes/Input.xml:298
+#: doc/classes/Input.xml:303
+msgid ""
+"Sets the acceleration value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:313
msgid ""
"Sets a custom mouse cursor image, which is only visible inside the game "
"window. The hotspot can also be specified. Passing [code]null[/code] to the "
@@ -30031,7 +30255,7 @@ msgid ""
"compression mode can't be used for custom cursors."
msgstr ""
-#: doc/classes/Input.xml:309
+#: doc/classes/Input.xml:324
msgid ""
"Sets the default cursor shape to be used in the viewport instead of "
"[constant CURSOR_ARROW].\n"
@@ -30041,11 +30265,38 @@ msgid ""
"cursor immediately."
msgstr ""
-#: doc/classes/Input.xml:318
+#: doc/classes/Input.xml:333
+msgid ""
+"Sets the gravity value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:341
+msgid ""
+"Sets the value of the rotation rate of the gyroscope sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:349
+msgid ""
+"Sets the value of the magnetic field of the magnetometer sensor. Can be used "
+"for debugging on devices without a hardware sensor, for example in an editor "
+"on a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:357
msgid "Sets the mouse mode. See the constants for more information."
msgstr ""
-#: doc/classes/Input.xml:325
+#: doc/classes/Input.xml:364
msgid ""
"Enables or disables the accumulation of similar input events sent by the "
"operating system. When input accumulation is enabled, all input events "
@@ -30059,7 +30310,7 @@ msgid ""
"results that closely follow the actual input."
msgstr ""
-#: doc/classes/Input.xml:336
+#: doc/classes/Input.xml:375
msgid ""
"Starts to vibrate the joypad. Joypads usually come with two rumble motors, a "
"strong and a weak one. [code]weak_magnitude[/code] is the strength of the "
@@ -30072,34 +30323,34 @@ msgid ""
"few seconds."
msgstr ""
-#: doc/classes/Input.xml:344
+#: doc/classes/Input.xml:383
msgid "Stops the vibration of the joypad."
msgstr ""
-#: doc/classes/Input.xml:351
+#: doc/classes/Input.xml:390
msgid ""
"Vibrate Android and iOS devices.\n"
"[b]Note:[/b] It needs [code]VIBRATE[/code] permission for Android at export "
"settings. iOS does not support duration."
msgstr ""
-#: doc/classes/Input.xml:359
+#: doc/classes/Input.xml:398
msgid "Sets the mouse position to the specified vector."
msgstr ""
-#: doc/classes/Input.xml:368
+#: doc/classes/Input.xml:407
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
-#: doc/classes/Input.xml:374
+#: doc/classes/Input.xml:413
msgid "Makes the mouse cursor visible if it is hidden."
msgstr ""
-#: doc/classes/Input.xml:377
+#: doc/classes/Input.xml:416
msgid "Makes the mouse cursor hidden if it is visible."
msgstr ""
-#: doc/classes/Input.xml:380
+#: doc/classes/Input.xml:419
msgid ""
"Captures the mouse. The mouse will be hidden and its position locked at the "
"center of the screen.\n"
@@ -30107,83 +30358,83 @@ msgid ""
"need to use [member InputEventMouseMotion.relative]."
msgstr ""
-#: doc/classes/Input.xml:384
+#: doc/classes/Input.xml:423
msgid "Makes the mouse cursor visible but confines it to the game window."
msgstr ""
-#: doc/classes/Input.xml:387
+#: doc/classes/Input.xml:426
msgid "Arrow cursor. Standard, default pointing cursor."
msgstr ""
-#: doc/classes/Input.xml:390
+#: doc/classes/Input.xml:429
msgid ""
"I-beam cursor. Usually used to show where the text cursor will appear when "
"the mouse is clicked."
msgstr ""
-#: doc/classes/Input.xml:393
+#: doc/classes/Input.xml:432
msgid ""
"Pointing hand cursor. Usually used to indicate the pointer is over a link or "
"other interactable item."
msgstr ""
-#: doc/classes/Input.xml:396
+#: doc/classes/Input.xml:435
msgid ""
"Cross cursor. Typically appears over regions in which a drawing operation "
"can be performed or for selections."
msgstr ""
-#: doc/classes/Input.xml:399
+#: doc/classes/Input.xml:438
msgid ""
"Wait cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application is still usable during the "
"operation."
msgstr ""
-#: doc/classes/Input.xml:402
+#: doc/classes/Input.xml:441
msgid ""
"Busy cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application isn't usable during the "
"operation (e.g. something is blocking its main thread)."
msgstr ""
-#: doc/classes/Input.xml:405
+#: doc/classes/Input.xml:444
msgid "Drag cursor. Usually displayed when dragging something."
msgstr ""
-#: doc/classes/Input.xml:408
+#: doc/classes/Input.xml:447
msgid ""
"Can drop cursor. Usually displayed when dragging something to indicate that "
"it can be dropped at the current position."
msgstr ""
-#: doc/classes/Input.xml:411
+#: doc/classes/Input.xml:450
msgid ""
"Forbidden cursor. Indicates that the current action is forbidden (for "
"example, when dragging something) or that the control at a position is "
"disabled."
msgstr ""
-#: doc/classes/Input.xml:414
+#: doc/classes/Input.xml:453
msgid ""
"Vertical resize mouse cursor. A double-headed vertical arrow. It tells the "
"user they can resize the window or the panel vertically."
msgstr ""
-#: doc/classes/Input.xml:417
+#: doc/classes/Input.xml:456
msgid ""
"Horizontal resize mouse cursor. A double-headed horizontal arrow. It tells "
"the user they can resize the window or the panel horizontally."
msgstr ""
-#: doc/classes/Input.xml:420
+#: doc/classes/Input.xml:459
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the bottom left to the top right. It tells the user they can resize the "
"window or the panel both horizontally and vertically."
msgstr ""
-#: doc/classes/Input.xml:423
+#: doc/classes/Input.xml:462
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the top left to the bottom right, the opposite of [constant "
@@ -30191,23 +30442,23 @@ msgid ""
"both horizontally and vertically."
msgstr ""
-#: doc/classes/Input.xml:426
+#: doc/classes/Input.xml:465
msgid "Move cursor. Indicates that something can be moved."
msgstr ""
-#: doc/classes/Input.xml:429
+#: doc/classes/Input.xml:468
msgid ""
"Vertical split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_VSIZE]."
msgstr ""
-#: doc/classes/Input.xml:432
+#: doc/classes/Input.xml:471
msgid ""
"Horizontal split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_HSIZE]."
msgstr ""
-#: doc/classes/Input.xml:435
+#: doc/classes/Input.xml:474
msgid "Help cursor. Usually a question mark."
msgstr ""
@@ -30623,7 +30874,9 @@ msgid "The drag position."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -31961,7 +32214,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -32026,22 +32280,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -32056,7 +32312,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -32064,19 +32320,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -32147,7 +32403,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -32205,7 +32462,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -33494,14 +33753,21 @@ msgid "Default text [Color] of the [LinkButton]."
msgstr ""
#: doc/classes/LinkButton.xml:46
-msgid "Text [Color] used when the [LinkButton] is being hovered."
+msgid ""
+"Text [Color] used when the [LinkButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/LinkButton.xml:49
-msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgid "Text [Color] used when the [LinkButton] is being hovered."
msgstr ""
#: doc/classes/LinkButton.xml:52
+msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:55
msgid "The vertical space between the baseline of text and the underline."
msgstr ""
@@ -33996,26 +34262,33 @@ msgid "Text [Color] used when the [MenuButton] is disabled."
msgstr ""
#: doc/classes/MenuButton.xml:64
-msgid "Text [Color] used when the [MenuButton] is being hovered."
+msgid ""
+"Text [Color] used when the [MenuButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/MenuButton.xml:67
-msgid "Text [Color] used when the [MenuButton] is being pressed."
+msgid "Text [Color] used when the [MenuButton] is being hovered."
msgstr ""
#: doc/classes/MenuButton.xml:70
-msgid "[StyleBox] used when the [MenuButton] is being hovered."
+msgid "Text [Color] used when the [MenuButton] is being pressed."
msgstr ""
#: doc/classes/MenuButton.xml:73
-msgid "The horizontal space between [MenuButton]'s icon and text."
+msgid "[StyleBox] used when the [MenuButton] is being hovered."
msgstr ""
#: doc/classes/MenuButton.xml:76
-msgid "Default [StyleBox] for the [MenuButton]."
+msgid "The horizontal space between [MenuButton]'s icon and text."
msgstr ""
#: doc/classes/MenuButton.xml:79
+msgid "Default [StyleBox] for the [MenuButton]."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:82
msgid "[StyleBox] used when the [MenuButton] is being pressed."
msgstr ""
@@ -34260,7 +34533,7 @@ msgstr ""
#: doc/classes/Mesh.xml:207
msgid "Array of colors."
-msgstr ""
+msgstr "МаÑÑив цветов."
#: doc/classes/Mesh.xml:210
msgid "Array of UV coordinates."
@@ -34280,7 +34553,7 @@ msgstr ""
#: doc/classes/Mesh.xml:222
msgid "Array of indices."
-msgstr ""
+msgstr "МаÑÑив индекÑов."
#: doc/classes/MeshDataTool.xml:4
msgid "Helper tool to access and edit [Mesh] data."
@@ -35758,7 +36031,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -37452,7 +37725,7 @@ msgstr ""
#: doc/classes/Node2D.xml:97
msgid "Global position."
-msgstr ""
+msgstr "Ð“Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð°Ñ Ð¿Ð¾Ð·Ð¸Ñ†Ð¸Ñ."
#: doc/classes/Node2D.xml:100
msgid "Global rotation in radians."
@@ -37464,7 +37737,7 @@ msgstr ""
#: doc/classes/Node2D.xml:106
msgid "Global scale."
-msgstr ""
+msgstr "Глобальный маÑштаб."
#: doc/classes/Node2D.xml:109
msgid "Global [Transform2D]."
@@ -38647,26 +38920,33 @@ msgid "Text [Color] used when the [OptionButton] is disabled."
msgstr ""
#: doc/classes/OptionButton.xml:212
-msgid "Text [Color] used when the [OptionButton] is being hovered."
+msgid ""
+"Text [Color] used when the [OptionButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/OptionButton.xml:215
-msgid "Text [Color] used when the [OptionButton] is being pressed."
+msgid "Text [Color] used when the [OptionButton] is being hovered."
msgstr ""
#: doc/classes/OptionButton.xml:218
-msgid "[StyleBox] used when the [OptionButton] is being hovered."
+msgid "Text [Color] used when the [OptionButton] is being pressed."
msgstr ""
#: doc/classes/OptionButton.xml:221
-msgid "The horizontal space between [OptionButton]'s icon and text."
+msgid "[StyleBox] used when the [OptionButton] is being hovered."
msgstr ""
#: doc/classes/OptionButton.xml:224
-msgid "Default [StyleBox] for the [OptionButton]."
+msgid "The horizontal space between [OptionButton]'s icon and text."
msgstr ""
#: doc/classes/OptionButton.xml:227
+msgid "Default [StyleBox] for the [OptionButton]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:230
msgid "[StyleBox] used when the [OptionButton] is being pressed."
msgstr ""
@@ -39078,7 +39358,7 @@ msgstr "Возвращает чиÑло Ñлементов в маÑÑиве."
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -39108,14 +39388,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -39125,7 +39405,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -39792,79 +40072,79 @@ msgstr ""
#: doc/classes/OS.xml:1012
msgid "Sunday."
-msgstr ""
+msgstr "ВоÑкреÑенье."
#: doc/classes/OS.xml:1015
msgid "Monday."
-msgstr ""
+msgstr "Понедельник."
#: doc/classes/OS.xml:1018
msgid "Tuesday."
-msgstr ""
+msgstr "Вторник."
#: doc/classes/OS.xml:1021
msgid "Wednesday."
-msgstr ""
+msgstr "Среда."
#: doc/classes/OS.xml:1024
msgid "Thursday."
-msgstr ""
+msgstr "Четверг."
#: doc/classes/OS.xml:1027
msgid "Friday."
-msgstr ""
+msgstr "ПÑтница."
#: doc/classes/OS.xml:1030
msgid "Saturday."
-msgstr ""
+msgstr "Суббота."
#: doc/classes/OS.xml:1033
msgid "January."
-msgstr ""
+msgstr "Январь."
#: doc/classes/OS.xml:1036
msgid "February."
-msgstr ""
+msgstr "Февраль."
#: doc/classes/OS.xml:1039
msgid "March."
-msgstr ""
+msgstr "Март."
#: doc/classes/OS.xml:1042
msgid "April."
-msgstr ""
+msgstr "Ðпрель."
#: doc/classes/OS.xml:1045
msgid "May."
-msgstr ""
+msgstr "Май."
#: doc/classes/OS.xml:1048
msgid "June."
-msgstr ""
+msgstr "Июнь."
#: doc/classes/OS.xml:1051
msgid "July."
-msgstr ""
+msgstr "Июль."
#: doc/classes/OS.xml:1054
msgid "August."
-msgstr ""
+msgstr "ÐвгуÑÑ‚."
#: doc/classes/OS.xml:1057
msgid "September."
-msgstr ""
+msgstr "СентÑбрь."
#: doc/classes/OS.xml:1060
msgid "October."
-msgstr ""
+msgstr "ОктÑбрь."
#: doc/classes/OS.xml:1063
msgid "November."
-msgstr ""
+msgstr "ÐоÑбрь."
#: doc/classes/OS.xml:1066
msgid "December."
-msgstr ""
+msgstr "Декабрь."
#: doc/classes/OS.xml:1069
msgid ""
@@ -39908,11 +40188,11 @@ msgstr ""
#: doc/classes/OS.xml:1097
msgid "Landscape screen orientation."
-msgstr ""
+msgstr "ÐÐ»ÑŒÐ±Ð¾Ð¼Ð½Ð°Ñ Ð¾Ñ€Ð¸ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ Ñкрана."
#: doc/classes/OS.xml:1100
msgid "Portrait screen orientation."
-msgstr ""
+msgstr "ÐšÐ½Ð¸Ð¶Ð½Ð°Ñ Ð¾Ñ€Ð¸ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ Ñкрана."
#: doc/classes/OS.xml:1103
msgid "Reverse landscape screen orientation."
@@ -41645,17 +41925,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -41673,11 +41979,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -41872,7 +42178,9 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-msgid "Returns the [Physics2DDirectBodyState] of the body."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
@@ -42675,6 +42983,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -42692,7 +43018,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -42806,7 +43132,9 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-msgid "Returns the [PhysicsDirectBodyState] of the body."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/PhysicsServer.xml:370
@@ -43793,27 +44121,27 @@ msgstr "ДобавлÑет Ñлемент в конец маÑÑива."
msgid "Removes an element from the array by index."
msgstr "УдалÑет Ñлемент из маÑÑива по индекÑу."
-#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolColorArray.xml:66
-#: doc/classes/PoolIntArray.xml:67 doc/classes/PoolRealArray.xml:67
-#: doc/classes/PoolStringArray.xml:74 doc/classes/PoolVector2Array.xml:67
-#: doc/classes/PoolVector3Array.xml:66
+#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolIntArray.xml:67
+#: doc/classes/PoolRealArray.xml:67
msgid ""
"Sets the size of the array. If the array is grown, reserves elements at the "
"end of the array. If the array is shrunk, truncates the array to the new "
-"size."
+"size.\n"
+"[b]Note:[/b] Added elements are not automatically initialized to 0 and will "
+"contain garbage, i.e. indeterminate values."
msgstr ""
-#: doc/classes/PoolByteArray.xml:121
+#: doc/classes/PoolByteArray.xml:122
msgid "Changes the byte at the given index."
msgstr ""
-#: doc/classes/PoolByteArray.xml:127 doc/classes/PoolColorArray.xml:79
-#: doc/classes/PoolRealArray.xml:80 doc/classes/PoolStringArray.xml:87
+#: doc/classes/PoolByteArray.xml:128 doc/classes/PoolColorArray.xml:79
+#: doc/classes/PoolRealArray.xml:81 doc/classes/PoolStringArray.xml:87
#: doc/classes/PoolVector2Array.xml:80 doc/classes/PoolVector3Array.xml:79
msgid "Returns the size of the array."
msgstr ""
-#: doc/classes/PoolByteArray.xml:135
+#: doc/classes/PoolByteArray.xml:136
msgid ""
"Returns the slice of the [PoolByteArray] between indices (inclusive) as a "
"new [PoolByteArray]. Any negative index is considered to be from the end of "
@@ -43846,6 +44174,14 @@ msgstr "ДобавлÑет Ñлемент в конец маÑÑива."
msgid "Appends a value to the array."
msgstr ""
+#: doc/classes/PoolColorArray.xml:66 doc/classes/PoolStringArray.xml:74
+#: doc/classes/PoolVector2Array.xml:67 doc/classes/PoolVector3Array.xml:66
+msgid ""
+"Sets the size of the array. If the array is grown, reserves elements at the "
+"end of the array. If the array is shrunk, truncates the array to the new "
+"size."
+msgstr ""
+
#: doc/classes/PoolColorArray.xml:73
msgid "Changes the [Color] at the given index."
msgstr ""
@@ -43886,11 +44222,11 @@ msgstr ""
"Ð’ÑтавлÑет новый Ñлемент в указанную позицию маÑÑива. ÐŸÐ¾Ð·Ð¸Ñ†Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° быть "
"корректна, или указывать на конец маÑÑива ([code]pos == size()[/code])."
-#: doc/classes/PoolIntArray.xml:74
+#: doc/classes/PoolIntArray.xml:75
msgid "Changes the int at the given index."
msgstr ""
-#: doc/classes/PoolIntArray.xml:80
+#: doc/classes/PoolIntArray.xml:81
msgid "Returns the array size."
msgstr ""
@@ -43923,7 +44259,7 @@ msgstr ""
msgid "Appends a [PoolRealArray] at the end of this array."
msgstr "ДобавлÑет Ñлемент в конец маÑÑива."
-#: doc/classes/PoolRealArray.xml:74
+#: doc/classes/PoolRealArray.xml:75
msgid "Changes the float at the given index."
msgstr ""
@@ -45208,18 +45544,6 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:204
msgid ""
-"The project data directory is used for storing project-specific data "
-"(metadata, shader cache, etc.).\n"
-"[b]Note:[/b] Restart the application after changing this setting.\n"
-"[b]Note:[/b] Changing this value can help on platforms or with third-party "
-"tools where specific directory patterns are disallowed. Only modify this "
-"setting if you know that your environment requires it, as changing the "
-"default can impact compatibility with some external tools or plugins which "
-"expect the default [code].import[/code] folder."
-msgstr ""
-
-#: doc/classes/ProjectSettings.xml:209
-msgid ""
"Specifies a file to override project settings. For example: [code]user://"
"custom_settings.cfg[/code]. See \"Overriding\" in the [ProjectSettings] "
"class description at the top for more information.\n"
@@ -45227,7 +45551,7 @@ msgid ""
"code] will still be read to override the project settings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:213
+#: doc/classes/ProjectSettings.xml:208
msgid ""
"If [code]true[/code], the project will save user data to its own user "
"directory (see [member application/config/custom_user_dir_name]). This "
@@ -45237,13 +45561,28 @@ msgid ""
"user data directory)/Godot/app_userdata/(project name)[/code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:216
+#: doc/classes/ProjectSettings.xml:211
+msgid ""
+"If [code]true[/code], the project will use a hidden directory ([code]."
+"import[/code]) for storing project-specific data (metadata, shader cache, "
+"etc.).\n"
+"If [code]false[/code], a non-hidden directory ([code]import[/code]) will be "
+"used instead.\n"
+"[b]Note:[/b] Restart the application after changing this setting.\n"
+"[b]Note:[/b] Changing this value can help on platforms or with third-party "
+"tools where hidden directory patterns are disallowed. Only modify this "
+"setting if you know that your environment requires it, as changing the "
+"default can impact compatibility with some external tools or plugins which "
+"expect the default [code].import[/code] folder."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:217
msgid ""
"Icon set in [code].ico[/code] format used on Windows to set the game's icon. "
"This is done automatically on start by calling [method OS.set_native_icon]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:219
+#: doc/classes/ProjectSettings.xml:220
msgid ""
"Time samples for frame deltas are subject to random variation introduced by "
"the platform, even when frames are displayed at regular intervals thanks to "
@@ -45257,14 +45596,14 @@ msgid ""
"adequate to render frames at the refresh rate."
msgstr ""
-#: doc/classes/ProjectSettings.xml:224
+#: doc/classes/ProjectSettings.xml:225
msgid ""
"[b]Experimental.[/b] Shifts the measurement of delta time for each frame to "
"just after the drawing has taken place. This may lead to more consistent "
"deltas and a reduction in frame stutters."
msgstr ""
-#: doc/classes/ProjectSettings.xml:227
+#: doc/classes/ProjectSettings.xml:228
msgid ""
"If [code]true[/code], disables printing to standard error. If [code]true[/"
"code], this also hides error and warning messages printed by [method "
@@ -45273,7 +45612,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:231
+#: doc/classes/ProjectSettings.xml:232
msgid ""
"If [code]true[/code], disables printing to standard output. This is "
"equivalent to starting the editor or project with the [code]--quiet[/code] "
@@ -45281,7 +45620,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:235
+#: doc/classes/ProjectSettings.xml:236
msgid ""
"If [code]true[/code], flushes the standard output stream every time a line "
"is printed. This affects both terminal logging and file logging.\n"
@@ -45297,20 +45636,20 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:241
+#: doc/classes/ProjectSettings.xml:242
msgid ""
"Debug build override for [member application/run/flush_stdout_on_print], as "
"performance is less important during debugging.\n"
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:245
+#: doc/classes/ProjectSettings.xml:246
msgid ""
"Forces a delay between frames in the main loop (in milliseconds). This may "
"be useful if you plan to disable vertical synchronization."
msgstr ""
-#: doc/classes/ProjectSettings.xml:248
+#: doc/classes/ProjectSettings.xml:249
msgid ""
"If [code]true[/code], enables low-processor usage mode. This setting only "
"works on desktop platforms. The screen is not redrawn if nothing changes "
@@ -45318,75 +45657,81 @@ msgid ""
"useless (and can hurt performance) in most games."
msgstr ""
-#: doc/classes/ProjectSettings.xml:251
+#: doc/classes/ProjectSettings.xml:252
msgid ""
"Amount of sleeping between frames when the low-processor usage mode is "
"enabled (in microseconds). Higher values will result in lower CPU usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:254
+#: doc/classes/ProjectSettings.xml:255
msgid "Path to the main scene file that will be loaded when the project runs."
msgstr ""
-#: doc/classes/ProjectSettings.xml:257 doc/classes/ProjectSettings.xml:260
+#: doc/classes/ProjectSettings.xml:258 doc/classes/ProjectSettings.xml:261
msgid ""
"Audio buses will disable automatically when sound goes below a given dB "
"threshold for a given time. This saves CPU as effects assigned to that bus "
"will no longer do any processing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:263
+#: doc/classes/ProjectSettings.xml:264
msgid ""
"Default [AudioBusLayout] resource file to use in the project, unless "
"overridden by the scene."
msgstr ""
-#: doc/classes/ProjectSettings.xml:266
+#: doc/classes/ProjectSettings.xml:267
msgid ""
"Specifies the audio driver to use. This setting is platform-dependent as "
"each platform supports different audio drivers. If left empty, the default "
"audio driver will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:269
+#: doc/classes/ProjectSettings.xml:270
msgid ""
"If [code]true[/code], microphone input will be allowed. This requires "
"appropriate permissions to be set when exporting to Android or iOS."
msgstr ""
-#: doc/classes/ProjectSettings.xml:272
+#: doc/classes/ProjectSettings.xml:273
msgid ""
"The mixing rate used for audio (in Hz). In general, it's better to not touch "
"this and leave it to the host operating system."
msgstr ""
-#: doc/classes/ProjectSettings.xml:275
+#: doc/classes/ProjectSettings.xml:276
msgid ""
"Safer override for [member audio/mix_rate] in the Web platform. Here "
"[code]0[/code] means \"let the browser choose\" (since some browsers do not "
"like forcing the mix rate)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:278
+#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:281
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:284
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:287
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -45396,7 +45741,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:290
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -45406,27 +45751,27 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:293
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:296
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
-#: doc/classes/ProjectSettings.xml:299
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:302
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -45434,81 +45779,81 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:305
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:308
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:311
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:314
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:317
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr ""
-#: doc/classes/ProjectSettings.xml:320
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:323
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:326
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:329
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:332
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:335
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:338
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:341
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -45516,80 +45861,80 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:344
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:347
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:350
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:353
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:356
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:359
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:362
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:365
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:368
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:371
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:374
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:377
+#: doc/classes/ProjectSettings.xml:380
#, fuzzy
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
msgstr "ЕÑли [code]true[/code], текÑтура будет центрирована."
-#: doc/classes/ProjectSettings.xml:380
+#: doc/classes/ProjectSettings.xml:383
#, fuzzy
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
@@ -45597,32 +45942,32 @@ msgstr ""
"ЕÑли [code]true[/code], Ð°Ð½Ð¸Ð¼Ð°Ñ†Ð¸Ñ [member animation] воÑпроизводитÑÑ Ð² данный "
"момент."
-#: doc/classes/ProjectSettings.xml:383
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:386
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:389
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:392
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:395
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:398
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -45633,91 +45978,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:403
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:406
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:409
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:412
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:415
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:418
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:421
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:424
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:427
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:430
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:433
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:436
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:439
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr ""
-#: doc/classes/ProjectSettings.xml:442
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:445
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:448
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:451
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -45726,13 +46071,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:455
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:458
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -45742,7 +46087,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:463
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -45750,19 +46095,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:468
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:472
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:476
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -45776,45 +46121,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:481
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:484
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:488
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:491
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:494
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:497
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:500
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -45823,7 +46168,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:503
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -45834,7 +46179,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:507
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -45850,14 +46195,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:515
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:518
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -45865,49 +46210,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:521
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:524
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:529
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:532
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:535
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:538
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:541
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:544
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:547
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -45916,7 +46261,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:551
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -45924,7 +46269,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:555
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -45932,7 +46277,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:559
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -45942,7 +46287,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:563
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -45951,7 +46296,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:567
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -45960,7 +46305,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:571
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -45970,7 +46315,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:575
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -45978,7 +46323,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:579
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -45988,7 +46333,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:583
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -45998,7 +46343,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:587
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -46006,7 +46351,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:591
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -46015,7 +46360,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:595
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -46023,7 +46368,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:599
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -46035,477 +46380,477 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:605
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:608
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:611
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:614
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:617
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:620
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:623
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:626
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:629
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:632
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:635
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:638
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:641
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:644
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:647
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:650
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:653
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:656
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:659
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:662
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:665
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:668
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:671
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:674
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:677
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:680
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:683
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:686
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:689
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:692
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:695
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:698
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:701
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:704
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:707
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:710
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:713
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:716
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:719
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:722
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:725
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:728
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:731
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:734
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:737
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:740
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:743
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:746
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:749
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:752
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:755
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:758
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:761
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:764
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:767
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:770
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:773
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:776
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:779
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:782
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:785
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:788
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:791
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:794
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:797
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:800
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:803
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:806
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:809
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:812
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:815
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:818
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:821
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:824
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:827
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:830
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:833
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:836
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:839
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:842
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:845
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:848
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:851
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:854
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:857
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:860
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:863
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:866
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:869
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:872
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:875
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:878
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:881
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr ""
-#: doc/classes/ProjectSettings.xml:884
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:887
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:890
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:893
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:896
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:899
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:902
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:905
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:908
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:911
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:914
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:917
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:920
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:923
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:926
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:929
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:932
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:935
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:938
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:941
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:946
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:949
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -46513,92 +46858,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:952
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:955
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:958
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:961
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:964
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:967
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:970
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:973
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:976
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:979
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:982
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:985
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:988
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:991
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:994
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:997
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1000
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1003
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -46608,33 +46953,33 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1007
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1010
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1013
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1017
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1021
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -46647,7 +46992,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1025
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -46659,7 +47004,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1033
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -46671,7 +47016,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1041
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -46684,7 +47029,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1045
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -46692,28 +47037,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1049
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1053
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1056
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1059
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -46723,25 +47068,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1063
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1066
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1069
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1072
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -46754,7 +47099,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1076
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -46766,7 +47111,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1084
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -46778,7 +47123,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1092
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -46791,13 +47136,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1096
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1099
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -46805,11 +47150,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1103
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1106
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -46823,7 +47168,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1112
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -46832,7 +47177,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1116
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -46848,7 +47193,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1121
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -46858,7 +47203,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1125
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -46868,7 +47213,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1129
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -46879,7 +47224,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1133
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -46889,7 +47234,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1137
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -46897,7 +47242,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1141
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -46908,7 +47253,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1145
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -46923,7 +47268,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1151
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -46932,13 +47277,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1156
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1159
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -46947,7 +47292,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1162
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -46957,7 +47302,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1165
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -46969,7 +47314,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1168
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -46979,24 +47324,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1171
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1174
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1177
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1180
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -47005,7 +47350,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1183
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -47013,7 +47358,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1186
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -47022,7 +47367,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1189
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -47032,7 +47377,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1193
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -47040,31 +47385,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1197
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1200
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1203
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1206
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1209
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -47072,7 +47417,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1212
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -47082,46 +47427,53 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1215
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1218
+#: doc/classes/ProjectSettings.xml:1221
msgid ""
-"If [code]true[/code] and available on the target device, enables high "
-"floating point precision for all shader computations in GLES2.\n"
+"iOS specific override for [member rendering/gles2/compatibility/"
+"disable_half_float], due to poor support for half-float vertex compression "
+"on many devices."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1224
+msgid ""
+"If [code]true[/code] and available on the target Android device, enables "
+"high floating point precision for all shader computations in GLES2.\n"
"[b]Warning:[/b] High floating point precision can be extremely slow on older "
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1225
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1228
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1231
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1234
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -47129,7 +47481,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1237
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -47139,7 +47491,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1240
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -47148,7 +47500,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1243
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -47157,20 +47509,20 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1246
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1249
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1252
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -47179,7 +47531,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1255
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -47187,7 +47539,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1258
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -47196,7 +47548,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -47206,20 +47558,20 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1267
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1274
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -47228,13 +47580,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -47244,46 +47596,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1293
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1296
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1299
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1302
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1305
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -47293,7 +47645,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -47305,7 +47657,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -47313,7 +47665,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1316
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -47321,7 +47673,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -47330,7 +47682,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1323
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -47344,7 +47696,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1328
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -47354,7 +47706,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1331
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -47363,7 +47715,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1334
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -47373,54 +47725,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1337
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1340
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1343
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1346
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1349
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1352
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1355
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1358
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -47431,61 +47783,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1365
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1368
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1371
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1374
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1377
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1380
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1383
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1386
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -47496,7 +47848,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -47505,26 +47857,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1393 doc/classes/ProjectSettings.xml:1396
#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1405
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1408
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1411
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -47535,20 +47887,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1418
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -47560,52 +47912,52 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1428
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1435
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1438
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1441
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1444
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1447
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1450
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1453
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -47613,7 +47965,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -47623,10 +47975,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -47635,10 +47987,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -47647,10 +47999,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -47659,10 +48011,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -47671,10 +48023,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -48390,40 +48742,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr ""
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -48431,14 +48797,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -50777,6 +51143,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -50794,7 +51176,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -50802,11 +51184,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -50816,19 +51198,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -56275,20 +56657,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -56299,28 +56686,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -56332,19 +56719,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
@@ -59169,26 +59556,33 @@ msgid "Text [Color] used when the [ToolButton] is disabled."
msgstr ""
#: doc/classes/ToolButton.xml:39
-msgid "Text [Color] used when the [ToolButton] is being hovered."
+msgid ""
+"Text [Color] used when the [ToolButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/ToolButton.xml:42
-msgid "Text [Color] used when the [ToolButton] is being pressed."
+msgid "Text [Color] used when the [ToolButton] is being hovered."
msgstr ""
#: doc/classes/ToolButton.xml:45
-msgid "[StyleBox] used when the [ToolButton] is being hovered."
+msgid "Text [Color] used when the [ToolButton] is being pressed."
msgstr ""
#: doc/classes/ToolButton.xml:48
-msgid "The horizontal space between [ToolButton]'s icon and text."
+msgid "[StyleBox] used when the [ToolButton] is being hovered."
msgstr ""
#: doc/classes/ToolButton.xml:51
-msgid "Default [StyleBox] for the [ToolButton]."
+msgid "The horizontal space between [ToolButton]'s icon and text."
msgstr ""
#: doc/classes/ToolButton.xml:54
+msgid "Default [StyleBox] for the [ToolButton]."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:57
msgid "[StyleBox] used when the [ToolButton] is being pressed."
msgstr ""
@@ -61391,7 +61785,7 @@ msgstr ""
#: modules/upnp/doc_classes/UPNP.xml:239
#: modules/upnp/doc_classes/UPNPDevice.xml:93
msgid "Unknown error."
-msgstr ""
+msgstr "ÐеизвеÑÑ‚Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°."
#: modules/upnp/doc_classes/UPNPDevice.xml:4
msgid "UPNP device."
@@ -69852,15 +70246,15 @@ msgstr ""
#: doc/classes/VisualShaderNodeVectorOp.xml:20
msgid "Adds two vectors."
-msgstr ""
+msgstr "Складывает два вектора."
#: doc/classes/VisualShaderNodeVectorOp.xml:23
msgid "Subtracts a vector from a vector."
-msgstr ""
+msgstr "Вычитает из вектора вектор."
#: doc/classes/VisualShaderNodeVectorOp.xml:26
msgid "Multiplies two vectors."
-msgstr ""
+msgstr "Перемножает два вектора."
#: doc/classes/VisualShaderNodeVectorOp.xml:29
msgid "Divides vector by vector."
@@ -69875,14 +70269,18 @@ msgid ""
"Returns the value of the first parameter raised to the power of the second, "
"for each component of the vectors."
msgstr ""
+"Возвращает значение первого параметра, возведенного в Ñтепень второго, Ð´Ð»Ñ "
+"каждого компонента векторов."
#: doc/classes/VisualShaderNodeVectorOp.xml:38
msgid "Returns the greater of two values, for each component of the vectors."
msgstr ""
+"Возвращает наибольшее из двух значений, Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ компонента векторов."
#: doc/classes/VisualShaderNodeVectorOp.xml:41
msgid "Returns the lesser of two values, for each component of the vectors."
msgstr ""
+"Возвращает наименьшее из двух значений, Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ компонента векторов."
#: doc/classes/VisualShaderNodeVectorOp.xml:44
msgid "Calculates the cross product of two vectors."
@@ -69973,7 +70371,7 @@ msgstr ""
#: doc/classes/VScrollBar.xml:4
msgid "Vertical scroll bar."
-msgstr ""
+msgstr "Ð’ÐµÑ€Ñ‚Ð¸ÐºÐ°Ð»ÑŒÐ½Ð°Ñ Ð¿Ð¾Ð»Ð¾Ñа прокрутки."
#: doc/classes/VScrollBar.xml:7
msgid ""
@@ -70129,7 +70527,7 @@ msgstr ""
#: modules/webrtc/doc_classes/WebRTCDataChannel.xml:76
msgid "Reserved, but not used for now."
-msgstr ""
+msgstr "Зарезервировано, в данный момент не иÑпользуетÑÑ."
#: modules/webrtc/doc_classes/WebRTCDataChannel.xml:82
msgid ""
@@ -71197,7 +71595,7 @@ msgstr ""
#: doc/classes/World.xml:19
msgid "The World's [Environment]."
-msgstr ""
+msgstr "[Environment] мира."
#: doc/classes/World.xml:22
msgid ""
@@ -71211,7 +71609,7 @@ msgstr ""
#: doc/classes/World.xml:28
msgid "The World's physics space."
-msgstr ""
+msgstr "ФизичеÑкое проÑтранÑтво мира."
#: doc/classes/World2D.xml:4
msgid "Class that has everything pertaining to a 2D world."
@@ -71309,7 +71707,7 @@ msgstr ""
#: doc/classes/XMLParser.xml:15
msgid "Gets the amount of attributes in the current element."
-msgstr ""
+msgstr "Получает количеÑтво атрибутов в текущем Ñлементе."
#: doc/classes/XMLParser.xml:22
msgid ""
@@ -71411,7 +71809,7 @@ msgstr ""
#: doc/classes/XMLParser.xml:134
msgid "Text node."
-msgstr ""
+msgstr "ТекÑтовый узел."
#: doc/classes/XMLParser.xml:137
msgid "Comment node."
@@ -71423,7 +71821,7 @@ msgstr ""
#: doc/classes/XMLParser.xml:143
msgid "Unknown node."
-msgstr ""
+msgstr "ÐеизвеÑтный узел."
#: doc/classes/YSort.xml:4
msgid "Sort all child nodes based on their Y positions."
@@ -71444,6 +71842,11 @@ msgstr ""
msgid ""
"If [code]true[/code], child nodes are sorted, otherwise sorting is disabled."
msgstr ""
+"ЕÑли [code]true[/code], дочерние узлы будут отÑортированы, иначе Ñортировка "
+"будет отключена."
+
+#~ msgid "Returns this [AABB] expanded to include a given point."
+#~ msgstr "Возвращает раÑширенный [AABB], включающий данную точку."
#~ msgid "Returns the label used for built-in text."
#~ msgstr "Возвращает метку (Label), иÑпользуемую Ð´Ð»Ñ Ð²Ñтроенного текÑта."
diff --git a/doc/translations/sk.po b/doc/translations/sk.po
index dc2b8c946b..13df41f55c 100644
--- a/doc/translations/sk.po
+++ b/doc/translations/sk.po
@@ -6,12 +6,13 @@
# Richard Urban <redasuio1@gmail.com>, 2020.
# Pierre Stempin <pierre.stempin@gmail.com>, 2020.
# Mario-projects-dev <m.vitek.mv@gmail.com>, 2021.
+# vrecusko <vrecusko20@gmail.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2021-04-11 22:03+0000\n"
-"Last-Translator: Mario-projects-dev <m.vitek.mv@gmail.com>\n"
+"PO-Revision-Date: 2021-11-11 16:02+0000\n"
+"Last-Translator: vrecusko <vrecusko20@gmail.com>\n"
"Language-Team: Slovak <https://hosted.weblate.org/projects/godot-engine/"
"godot-class-reference/sk/>\n"
"Language: sk\n"
@@ -19,45 +20,45 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
-"X-Generator: Weblate 4.6-dev\n"
+"X-Generator: Weblate 4.9.1-dev\n"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Description"
msgstr "Popis"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Tutorials"
msgstr "Návody"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Properties"
msgstr "Vlastnosti"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Methods"
msgstr ""
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Theme Properties"
msgstr ""
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Signals"
msgstr ""
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Enumerations"
msgstr ""
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Constants"
-msgstr ""
+msgstr "Konštanty"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Property Descriptions"
msgstr ""
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Method Descriptions"
msgstr ""
@@ -3591,112 +3592,121 @@ msgid ""
msgstr ""
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr ""
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
msgstr ""
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
msgstr ""
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
msgstr ""
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr ""
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr ""
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr ""
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
msgstr ""
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr ""
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
msgstr ""
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
msgstr ""
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr ""
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
"positive.\n"
@@ -4774,7 +4784,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -6210,21 +6220,25 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
#: doc/classes/Area.xml:17
msgid ""
-"Returns a list of intersecting [Area]s. For performance reasons (collisions "
-"are all processed at the same time) this list is modified once during the "
-"physics step, not immediately after objects are moved. Consider using "
-"signals instead."
+"Returns a list of intersecting [Area]s. The overlapping area's [member "
+"CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:23
+#: doc/classes/Area.xml:24
msgid ""
-"Returns a list of intersecting [PhysicsBody]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody]s. The overlapping body's "
+"[member CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:30
+#: doc/classes/Area.xml:32
msgid ""
"If [code]true[/code], the given area overlaps the Area.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6232,7 +6246,7 @@ msgid ""
"physics step. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:38
+#: doc/classes/Area.xml:40
msgid ""
"If [code]true[/code], the given physics body overlaps the Area.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6243,7 +6257,7 @@ msgid ""
"their tiles with collision shapes as a virtual physics body)."
msgstr ""
-#: doc/classes/Area.xml:46
+#: doc/classes/Area.xml:48
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
"velocity lost per second.\n"
@@ -6251,41 +6265,41 @@ msgid ""
"details about damping."
msgstr ""
-#: doc/classes/Area.xml:50 doc/classes/Area2D.xml:52
+#: doc/classes/Area.xml:52 doc/classes/Area2D.xml:54
msgid "The name of the area's audio bus."
msgstr ""
-#: doc/classes/Area.xml:53 doc/classes/Area2D.xml:55
+#: doc/classes/Area.xml:55 doc/classes/Area2D.xml:57
msgid ""
"If [code]true[/code], the area's audio bus overrides the default audio bus."
msgstr ""
-#: doc/classes/Area.xml:56
+#: doc/classes/Area.xml:58
msgid ""
"The area's gravity intensity (in meters per second squared). This value "
"multiplies the gravity vector. This is useful to alter the force of gravity "
"without altering its direction."
msgstr ""
-#: doc/classes/Area.xml:59 doc/classes/Area2D.xml:61
+#: doc/classes/Area.xml:61 doc/classes/Area2D.xml:63
msgid ""
"The falloff factor for point gravity. The greater the value, the faster "
"gravity decreases with distance."
msgstr ""
-#: doc/classes/Area.xml:62 doc/classes/Area2D.xml:64
+#: doc/classes/Area.xml:64 doc/classes/Area2D.xml:66
msgid ""
"If [code]true[/code], gravity is calculated from a point (set via [member "
"gravity_vec]). See also [member space_override]."
msgstr ""
-#: doc/classes/Area.xml:65 doc/classes/Area2D.xml:67
+#: doc/classes/Area.xml:67 doc/classes/Area2D.xml:69
msgid ""
"The area's gravity vector (not normalized). If gravity is a point (see "
"[member gravity_point]), this will be the point of attraction."
msgstr ""
-#: doc/classes/Area.xml:68
+#: doc/classes/Area.xml:70
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
"velocity lost per second.\n"
@@ -6293,61 +6307,61 @@ msgid ""
"about damping."
msgstr ""
-#: doc/classes/Area.xml:72 doc/classes/Area2D.xml:74
+#: doc/classes/Area.xml:74 doc/classes/Area2D.xml:76
msgid "If [code]true[/code], other monitoring areas can detect this area."
msgstr ""
-#: doc/classes/Area.xml:75 doc/classes/Area2D.xml:77
+#: doc/classes/Area.xml:77 doc/classes/Area2D.xml:79
msgid ""
"If [code]true[/code], the area detects bodies or areas entering and exiting "
"it."
msgstr ""
-#: doc/classes/Area.xml:78 doc/classes/Area2D.xml:80
+#: doc/classes/Area.xml:80 doc/classes/Area2D.xml:82
msgid "The area's priority. Higher priority areas are processed first."
msgstr ""
-#: doc/classes/Area.xml:81
+#: doc/classes/Area.xml:83
msgid ""
"The degree to which this area applies reverb to its associated audio. Ranges "
"from [code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
msgstr ""
-#: doc/classes/Area.xml:84
+#: doc/classes/Area.xml:86
msgid "If [code]true[/code], the area applies reverb to its associated audio."
msgstr ""
-#: doc/classes/Area.xml:87
+#: doc/classes/Area.xml:89
msgid "The reverb bus name to use for this area's associated audio."
msgstr ""
-#: doc/classes/Area.xml:90
+#: doc/classes/Area.xml:92
msgid ""
"The degree to which this area's reverb is a uniform effect. Ranges from "
"[code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
msgstr ""
-#: doc/classes/Area.xml:93 doc/classes/Area2D.xml:83
+#: doc/classes/Area.xml:95 doc/classes/Area2D.xml:85
msgid ""
"Override mode for gravity and damping calculations within this area. See "
"[enum SpaceOverride] for possible values."
msgstr ""
-#: doc/classes/Area.xml:100
+#: doc/classes/Area.xml:102
msgid ""
"Emitted when another Area enters this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
-#: doc/classes/Area.xml:107
+#: doc/classes/Area.xml:109
msgid ""
"Emitted when another Area exits this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
-#: doc/classes/Area.xml:117 doc/classes/Area.xml:130
+#: doc/classes/Area.xml:119 doc/classes/Area.xml:132
msgid ""
"Emitted when one of another Area's [Shape]s enters one of this Area's "
"[Shape]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6362,7 +6376,7 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:140
+#: doc/classes/Area.xml:142
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] enters this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -6371,7 +6385,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:147
+#: doc/classes/Area.xml:149
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] exits this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -6380,7 +6394,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:157 doc/classes/Area.xml:170
+#: doc/classes/Area.xml:159 doc/classes/Area.xml:172
msgid ""
"Emitted when one of a [PhysicsBody] or [GridMap]'s [Shape]s enters one of "
"this Area's [Shape]s. Requires [member monitoring] to be set to [code]true[/"
@@ -6397,29 +6411,29 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:180 doc/classes/Area2D.xml:170
+#: doc/classes/Area.xml:182 doc/classes/Area2D.xml:172
msgid "This area does not affect gravity/damping."
msgstr ""
-#: doc/classes/Area.xml:183 doc/classes/Area2D.xml:173
+#: doc/classes/Area.xml:185 doc/classes/Area2D.xml:175
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order)."
msgstr ""
-#: doc/classes/Area.xml:186 doc/classes/Area2D.xml:176
+#: doc/classes/Area.xml:188 doc/classes/Area2D.xml:178
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order), ignoring any lower priority areas."
msgstr ""
-#: doc/classes/Area.xml:189 doc/classes/Area2D.xml:179
+#: doc/classes/Area.xml:191 doc/classes/Area2D.xml:181
msgid ""
"This area replaces any gravity/damping, even the defaults, ignoring any "
"lower priority areas."
msgstr ""
-#: doc/classes/Area.xml:192 doc/classes/Area2D.xml:182
+#: doc/classes/Area.xml:194 doc/classes/Area2D.xml:184
msgid ""
"This area replaces any gravity/damping calculated so far (in [member "
"priority] order), but keeps calculating the rest of the areas."
@@ -6458,21 +6472,25 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
#: doc/classes/Area2D.xml:19
msgid ""
-"Returns a list of intersecting [Area2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [Area2D]s. The overlapping area's [member "
+"CollisionObject2D.collision_layer] must be part of this area's [member "
+"CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:25
+#: doc/classes/Area2D.xml:26
msgid ""
-"Returns a list of intersecting [PhysicsBody2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody2D]s. The overlapping body's "
+"[member CollisionObject2D.collision_layer] must be part of this area's "
+"[member CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:32
+#: doc/classes/Area2D.xml:34
msgid ""
"If [code]true[/code], the given area overlaps the Area2D.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6480,7 +6498,7 @@ msgid ""
"the physics step. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:40
+#: doc/classes/Area2D.xml:42
msgid ""
"If [code]true[/code], the given physics body overlaps the Area2D.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6491,7 +6509,7 @@ msgid ""
"register their tiles with collision shapes as a virtual physics body)."
msgstr ""
-#: doc/classes/Area2D.xml:48
+#: doc/classes/Area2D.xml:50
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
"velocity lost per second.\n"
@@ -6499,14 +6517,14 @@ msgid ""
"details about damping."
msgstr ""
-#: doc/classes/Area2D.xml:58
+#: doc/classes/Area2D.xml:60
msgid ""
"The area's gravity intensity (in pixels per second squared). This value "
"multiplies the gravity vector. This is useful to alter the force of gravity "
"without altering its direction."
msgstr ""
-#: doc/classes/Area2D.xml:70
+#: doc/classes/Area2D.xml:72
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
"velocity lost per second.\n"
@@ -6514,21 +6532,21 @@ msgid ""
"about damping."
msgstr ""
-#: doc/classes/Area2D.xml:90
+#: doc/classes/Area2D.xml:92
msgid ""
"Emitted when another Area2D enters this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-#: doc/classes/Area2D.xml:97
+#: doc/classes/Area2D.xml:99
msgid ""
"Emitted when another Area2D exits this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-#: doc/classes/Area2D.xml:107
+#: doc/classes/Area2D.xml:109
msgid ""
"Emitted when one of another Area2D's [Shape2D]s enters one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6543,7 +6561,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:120
+#: doc/classes/Area2D.xml:122
msgid ""
"Emitted when one of another Area2D's [Shape2D]s exits one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6558,7 +6576,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:130
+#: doc/classes/Area2D.xml:132
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] enters this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -6567,7 +6585,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:137
+#: doc/classes/Area2D.xml:139
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] exits this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -6576,7 +6594,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:147
+#: doc/classes/Area2D.xml:149
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s enters one "
"of this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -6595,7 +6613,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:160
+#: doc/classes/Area2D.xml:162
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s exits one of "
"this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -10165,42 +10183,47 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
-"no save path is provided it will try to match the path from the current "
+"no root node is provided, parent of this node will be used as root instead. "
+"If no save path is provided it will try to match the path from the current "
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -10214,62 +10237,62 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
msgid "The rotation of the baked custom sky."
msgstr ""
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -10277,35 +10300,35 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -10313,13 +10336,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -10331,65 +10354,77 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr ""
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
msgid "Baking was successful."
msgstr ""
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr ""
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr ""
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr ""
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:133
+#: doc/classes/BakedLightmap.xml:132
+msgid ""
+"Returns if lightmapper can't be created. Unless you are using a custom "
+"lightmapper, please report this as bug."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:135
+msgid ""
+"There is no root node to start baking from. Either provide [code]from_node[/"
+"code] argument or attach this node to a parent that should be used as root."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:136
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:139
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:142
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -10845,8 +10880,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -11234,26 +11272,33 @@ msgid "Text [Color] used when the [Button] is disabled."
msgstr ""
#: doc/classes/Button.xml:77
-msgid "Text [Color] used when the [Button] is being hovered."
+msgid ""
+"Text [Color] used when the [Button] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/Button.xml:80
-msgid "Text [Color] used when the [Button] is being pressed."
+msgid "Text [Color] used when the [Button] is being hovered."
msgstr ""
#: doc/classes/Button.xml:83
-msgid "[StyleBox] used when the [Button] is being hovered."
+msgid "Text [Color] used when the [Button] is being pressed."
msgstr ""
#: doc/classes/Button.xml:86
-msgid "The horizontal space between [Button]'s icon and text."
+msgid "[StyleBox] used when the [Button] is being hovered."
msgstr ""
#: doc/classes/Button.xml:89
-msgid "Default [StyleBox] for the [Button]."
+msgid "The horizontal space between [Button]'s icon and text."
msgstr ""
#: doc/classes/Button.xml:92
+msgid "Default [StyleBox] for the [Button]."
+msgstr ""
+
+#: doc/classes/Button.xml:95
msgid "[StyleBox] used when the [Button] is being pressed."
msgstr ""
@@ -12722,80 +12767,96 @@ msgstr ""
msgid "The check icon to display when the [CheckBox] is checked."
msgstr ""
-#: doc/classes/CheckBox.xml:30
+#: doc/classes/CheckBox.xml:28
+msgid "The check icon to display when the [CheckBox] is checked and disabled."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:31
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is disabled."
msgstr ""
-#: doc/classes/CheckBox.xml:33
+#: doc/classes/CheckBox.xml:34
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is focused."
msgstr ""
-#: doc/classes/CheckBox.xml:36
+#: doc/classes/CheckBox.xml:37
msgid "The [Font] to use for the [CheckBox] text."
msgstr ""
-#: doc/classes/CheckBox.xml:39
+#: doc/classes/CheckBox.xml:40
msgid "The [CheckBox] text's font color."
msgstr ""
-#: doc/classes/CheckBox.xml:42
+#: doc/classes/CheckBox.xml:43
msgid "The [CheckBox] text's font color when it's disabled."
msgstr ""
-#: doc/classes/CheckBox.xml:45
+#: doc/classes/CheckBox.xml:46
+msgid ""
+"The [CheckBox] text's font color when it's focused. Only replaces the normal "
+"text color of the checkbox. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:49
msgid "The [CheckBox] text's font color when it's hovered."
msgstr ""
-#: doc/classes/CheckBox.xml:48
+#: doc/classes/CheckBox.xml:52
msgid "The [CheckBox] text's font color when it's hovered and pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:51
+#: doc/classes/CheckBox.xml:55
msgid "The [CheckBox] text's font color when it's pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:54
+#: doc/classes/CheckBox.xml:58
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered."
msgstr ""
-#: doc/classes/CheckBox.xml:57
+#: doc/classes/CheckBox.xml:61
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered and "
"pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:60
+#: doc/classes/CheckBox.xml:64
msgid "The separation between the check icon and the text (in pixels)."
msgstr ""
-#: doc/classes/CheckBox.xml:63 doc/classes/CheckButton.xml:58
+#: doc/classes/CheckBox.xml:67 doc/classes/CheckButton.xml:61
msgid "The [StyleBox] to display as a background."
msgstr ""
-#: doc/classes/CheckBox.xml:66
+#: doc/classes/CheckBox.xml:70
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:69
+#: doc/classes/CheckBox.xml:73
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is checked."
msgstr ""
-#: doc/classes/CheckBox.xml:74
+#: doc/classes/CheckBox.xml:78
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is unchecked."
msgstr ""
-#: doc/classes/CheckBox.xml:79
+#: doc/classes/CheckBox.xml:83
msgid "The check icon to display when the [CheckBox] is unchecked."
msgstr ""
+#: doc/classes/CheckBox.xml:86
+msgid ""
+"The check icon to display when the [CheckBox] is unchecked and disabled."
+msgstr ""
+
#: doc/classes/CheckButton.xml:4
msgid "Checkable button. See also [CheckBox]."
msgstr ""
@@ -12839,49 +12900,56 @@ msgid "The [CheckButton] text's font color when it's disabled."
msgstr ""
#: doc/classes/CheckButton.xml:40
-msgid "The [CheckButton] text's font color when it's hovered."
+msgid ""
+"The [CheckButton] text's font color when it's focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/CheckButton.xml:43
-msgid "The [CheckButton] text's font color when it's hovered and pressed."
+msgid "The [CheckButton] text's font color when it's hovered."
msgstr ""
#: doc/classes/CheckButton.xml:46
-msgid "The [CheckButton] text's font color when it's pressed."
+msgid "The [CheckButton] text's font color when it's hovered and pressed."
msgstr ""
#: doc/classes/CheckButton.xml:49
+msgid "The [CheckButton] text's font color when it's pressed."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:52
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered."
msgstr ""
-#: doc/classes/CheckButton.xml:52
+#: doc/classes/CheckButton.xml:55
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered "
"and pressed."
msgstr ""
-#: doc/classes/CheckButton.xml:55
+#: doc/classes/CheckButton.xml:58
msgid "The separation between the toggle icon and the text (in pixels)."
msgstr ""
-#: doc/classes/CheckButton.xml:61
+#: doc/classes/CheckButton.xml:64
msgid "The icon to display when the [CheckButton] is unchecked."
msgstr ""
-#: doc/classes/CheckButton.xml:64
+#: doc/classes/CheckButton.xml:67
msgid "The icon to display when the [CheckButton] is unchecked and disabled."
msgstr ""
-#: doc/classes/CheckButton.xml:67
+#: doc/classes/CheckButton.xml:70
msgid "The icon to display when the [CheckButton] is checked."
msgstr ""
-#: doc/classes/CheckButton.xml:70
+#: doc/classes/CheckButton.xml:73
msgid "The icon to display when the [CheckButton] is checked and disabled."
msgstr ""
-#: doc/classes/CheckButton.xml:73
+#: doc/classes/CheckButton.xml:76
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is pressed."
msgstr ""
@@ -14656,26 +14724,33 @@ msgid "Text [Color] used when the [ColorPickerButton] is disabled."
msgstr ""
#: doc/classes/ColorPickerButton.xml:80
-msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
+msgid ""
+"Text [Color] used when the [ColorPickerButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/ColorPickerButton.xml:83
-msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
+msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
msgstr ""
#: doc/classes/ColorPickerButton.xml:86
-msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
+msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
msgstr ""
#: doc/classes/ColorPickerButton.xml:89
-msgid "The horizontal space between [ColorPickerButton]'s icon and text."
+msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
msgstr ""
#: doc/classes/ColorPickerButton.xml:92
-msgid "Default [StyleBox] for the [ColorPickerButton]."
+msgid "The horizontal space between [ColorPickerButton]'s icon and text."
msgstr ""
#: doc/classes/ColorPickerButton.xml:95
+msgid "Default [StyleBox] for the [ColorPickerButton]."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:98
msgid "[StyleBox] used when the [ColorPickerButton] is being pressed."
msgstr ""
@@ -19905,7 +19980,8 @@ msgid ""
"get_resource_type]. They may optionally specify some import presets that "
"affect the import process. EditorImportPlugins are responsible for creating "
"the resources and saving them in the [code].import[/code] directory (see "
-"[member ProjectSettings.application/config/project_data_dir_name]).\n"
+"[member ProjectSettings.application/config/"
+"use_hidden_project_data_directory]).\n"
"Below is an example EditorImportPlugin that imports a [Mesh] from a file "
"with the extension \".special\" or \".spec\":\n"
"[codeblock]\n"
@@ -20032,7 +20108,7 @@ msgstr ""
msgid ""
"Gets the extension used to save this resource in the [code].import[/code] "
"directory (see [member ProjectSettings.application/config/"
-"project_data_dir_name])."
+"use_hidden_project_data_directory])."
msgstr ""
#: doc/classes/EditorImportPlugin.xml:130
@@ -21067,8 +21143,11 @@ msgstr ""
msgid "Emitted when the value of the edited resource was changed."
msgstr ""
-#: doc/classes/EditorResourcePicker.xml:89
-msgid "Emitted when the resource value was set and user clicked to edit it."
+#: doc/classes/EditorResourcePicker.xml:90
+msgid ""
+"Emitted when the resource value was set and user clicked to edit it. When "
+"[code]edit[/code] is [code]true[/code], the signal was caused by the context "
+"menu \"Edit\" option."
msgstr ""
#: doc/classes/EditorResourcePreview.xml:4
@@ -24817,21 +24896,32 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html"
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -24840,14 +24930,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -24857,80 +24951,80 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
msgstr ""
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr ""
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -27678,16 +27772,18 @@ msgstr ""
#: doc/classes/Image.xml:436
msgid ""
"OpenGL texture format [code]RED[/code] with a single component and a "
-"bitdepth of 8."
+"bitdepth of 8.\n"
+"[b]Note:[/b] When using the GLES2 backend, this uses the alpha channel "
+"instead of the red channel for storage."
msgstr ""
-#: doc/classes/Image.xml:439
+#: doc/classes/Image.xml:440
msgid ""
"OpenGL texture format [code]RG[/code] with two components and a bitdepth of "
"8 for each."
msgstr ""
-#: doc/classes/Image.xml:442
+#: doc/classes/Image.xml:443
msgid ""
"OpenGL texture format [code]RGB[/code] with three components, each with a "
"bitdepth of 8.\n"
@@ -27695,7 +27791,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:446
+#: doc/classes/Image.xml:447
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 8.\n"
@@ -27703,73 +27799,73 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:450
+#: doc/classes/Image.xml:451
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 4."
msgstr ""
-#: doc/classes/Image.xml:453
+#: doc/classes/Image.xml:454
msgid ""
"OpenGL texture format [code]GL_RGB5_A1[/code] where 5 bits of depth for each "
"component of RGB and one bit for alpha."
msgstr ""
-#: doc/classes/Image.xml:456
+#: doc/classes/Image.xml:457
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 32-"
"bit floating-point value."
msgstr ""
-#: doc/classes/Image.xml:459
+#: doc/classes/Image.xml:460
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:462
+#: doc/classes/Image.xml:463
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:465
+#: doc/classes/Image.xml:466
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:468
+#: doc/classes/Image.xml:469
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 16-"
"bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:471
+#: doc/classes/Image.xml:472
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:474
+#: doc/classes/Image.xml:475
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:477
+#: doc/classes/Image.xml:478
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:480
+#: doc/classes/Image.xml:481
msgid ""
"A special OpenGL texture format where the three color components have 9 bits "
"of precision and all three share a single 5-bit exponent."
msgstr ""
-#: doc/classes/Image.xml:483
+#: doc/classes/Image.xml:484
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 1, and is the smallest variation "
@@ -27779,7 +27875,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:487
+#: doc/classes/Image.xml:488
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 2, and color data is interpreted "
@@ -27789,7 +27885,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:491
+#: doc/classes/Image.xml:492
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format also known as Block Compression 3 or BC3 that contains 64 "
@@ -27800,7 +27896,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:495
+#: doc/classes/Image.xml:496
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -27808,7 +27904,7 @@ msgid ""
"DXT5 uses for the alpha channel."
msgstr ""
-#: doc/classes/Image.xml:498
+#: doc/classes/Image.xml:499
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -27816,7 +27912,7 @@ msgid ""
"algorithm that DXT5 uses for the alpha channel."
msgstr ""
-#: doc/classes/Image.xml:501
+#: doc/classes/Image.xml:502
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned normalized "
@@ -27825,21 +27921,21 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:505
+#: doc/classes/Image.xml:506
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with signed floating-point "
"RGB components."
msgstr ""
-#: doc/classes/Image.xml:508
+#: doc/classes/Image.xml:509
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned floating-point "
"RGB components."
msgstr ""
-#: doc/classes/Image.xml:511
+#: doc/classes/Image.xml:512
msgid ""
"Texture format used on PowerVR-supported mobile platforms, uses 2-bit color "
"depth with no alpha. More information can be found [url=https://en.wikipedia."
@@ -27848,25 +27944,25 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:515
+#: doc/classes/Image.xml:516
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with an "
"alpha component."
msgstr ""
-#: doc/classes/Image.xml:518
+#: doc/classes/Image.xml:519
msgid ""
"Similar to [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with 4-"
"bit color depth and no alpha."
msgstr ""
-#: doc/classes/Image.xml:521
+#: doc/classes/Image.xml:522
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC4[/url], but with an "
"alpha component."
msgstr ""
-#: doc/classes/Image.xml:524
+#: doc/classes/Image.xml:525
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC1]Ericsson Texture Compression format 1[/"
@@ -27874,7 +27970,7 @@ msgid ""
"standard. This format cannot store an alpha channel."
msgstr ""
-#: doc/classes/Image.xml:527
+#: doc/classes/Image.xml:528
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27882,7 +27978,7 @@ msgid ""
"unsigned data."
msgstr ""
-#: doc/classes/Image.xml:530
+#: doc/classes/Image.xml:531
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27890,7 +27986,7 @@ msgid ""
"channel of signed data."
msgstr ""
-#: doc/classes/Image.xml:533
+#: doc/classes/Image.xml:534
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27898,7 +27994,7 @@ msgid ""
"of unsigned data."
msgstr ""
-#: doc/classes/Image.xml:536
+#: doc/classes/Image.xml:537
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27906,7 +28002,7 @@ msgid ""
"channels of signed data."
msgstr ""
-#: doc/classes/Image.xml:539
+#: doc/classes/Image.xml:540
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27916,7 +28012,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:543
+#: doc/classes/Image.xml:544
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27926,7 +28022,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:547
+#: doc/classes/Image.xml:548
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27937,31 +28033,31 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:551
+#: doc/classes/Image.xml:552
msgid "Represents the size of the [enum Format] enum."
msgstr ""
-#: doc/classes/Image.xml:554
+#: doc/classes/Image.xml:555
msgid ""
"Performs nearest-neighbor interpolation. If the image is resized, it will be "
"pixelated."
msgstr ""
-#: doc/classes/Image.xml:557
+#: doc/classes/Image.xml:558
msgid ""
"Performs bilinear interpolation. If the image is resized, it will be blurry. "
"This mode is faster than [constant INTERPOLATE_CUBIC], but it results in "
"lower quality."
msgstr ""
-#: doc/classes/Image.xml:560
+#: doc/classes/Image.xml:561
msgid ""
"Performs cubic interpolation. If the image is resized, it will be blurry. "
"This mode often gives better results compared to [constant "
"INTERPOLATE_BILINEAR], at the cost of being slower."
msgstr ""
-#: doc/classes/Image.xml:563
+#: doc/classes/Image.xml:564
msgid ""
"Performs bilinear separately on the two most-suited mipmap levels, then "
"linearly interpolates between them.\n"
@@ -27976,55 +28072,55 @@ msgid ""
"a new set will be generated for the resulting image."
msgstr ""
-#: doc/classes/Image.xml:570
+#: doc/classes/Image.xml:571
msgid ""
"Performs Lanczos interpolation. This is the slowest image resizing mode, but "
"it typically gives the best results, especially when downscalng images."
msgstr ""
-#: doc/classes/Image.xml:573
+#: doc/classes/Image.xml:574
msgid "Image does not have alpha."
msgstr ""
-#: doc/classes/Image.xml:576
+#: doc/classes/Image.xml:577
msgid "Image stores alpha in a single bit."
msgstr ""
-#: doc/classes/Image.xml:579
+#: doc/classes/Image.xml:580
msgid "Image uses alpha."
msgstr ""
-#: doc/classes/Image.xml:582
+#: doc/classes/Image.xml:583
msgid "Use S3TC compression."
msgstr ""
-#: doc/classes/Image.xml:585
+#: doc/classes/Image.xml:586
msgid "Use PVRTC2 compression."
msgstr ""
-#: doc/classes/Image.xml:588
+#: doc/classes/Image.xml:589
msgid "Use PVRTC4 compression."
msgstr ""
-#: doc/classes/Image.xml:591
+#: doc/classes/Image.xml:592
msgid "Use ETC compression."
msgstr ""
-#: doc/classes/Image.xml:594
+#: doc/classes/Image.xml:595
msgid "Use ETC2 compression."
msgstr ""
-#: doc/classes/Image.xml:597
+#: doc/classes/Image.xml:598
msgid ""
"Source texture (before compression) is a regular texture. Default for all "
"textures."
msgstr ""
-#: doc/classes/Image.xml:600
+#: doc/classes/Image.xml:601
msgid "Source texture (before compression) is in sRGB space."
msgstr ""
-#: doc/classes/Image.xml:603
+#: doc/classes/Image.xml:604
msgid ""
"Source texture (before compression) is a normal texture (e.g. it can be "
"compressed into two channels)."
@@ -28248,6 +28344,17 @@ msgstr ""
#: doc/classes/Input.xml:43
msgid ""
+"Sends all input events which are in the current buffer to the game loop. "
+"These events may have been buffered as a result of accumulated input "
+"([method set_use_accumulated_input]) or agile input flushing ([member "
+"ProjectSettings.input_devices/buffering/agile_event_flushing]).\n"
+"The engine will already do this itself at key execution points (at least "
+"once per frame). However, this can be useful in advanced cases where you "
+"want precise control over the timing of event handling."
+msgstr ""
+
+#: doc/classes/Input.xml:50
+msgid ""
"Returns the acceleration of the device's accelerometer sensor, if the device "
"has one. Otherwise, the method returns [constant Vector3.ZERO].\n"
"Note this method returns an empty [Vector3] when running from the editor "
@@ -28259,7 +28366,7 @@ msgid ""
"the Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:53
+#: doc/classes/Input.xml:60
msgid ""
"Returns a value between 0 and 1 representing the raw intensity of the given "
"action, ignoring the action's deadzone. In most cases, you should use "
@@ -28269,7 +28376,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:62
+#: doc/classes/Input.xml:69
msgid ""
"Returns a value between 0 and 1 representing the intensity of the given "
"action. In a joypad, for example, the further away the axis (analog sticks "
@@ -28281,7 +28388,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:71
+#: doc/classes/Input.xml:78
msgid ""
"Get axis input by specifying two actions, one negative and one positive.\n"
"This is a shorthand for writing [code]Input."
@@ -28289,17 +28396,17 @@ msgid ""
"get_action_strength(\"negative_action\")[/code]."
msgstr ""
-#: doc/classes/Input.xml:78
+#: doc/classes/Input.xml:85
msgid ""
"Returns an [Array] containing the device IDs of all currently connected "
"joypads."
msgstr ""
-#: doc/classes/Input.xml:84
+#: doc/classes/Input.xml:91
msgid "Returns the currently assigned cursor shape (see [enum CursorShape])."
msgstr ""
-#: doc/classes/Input.xml:90
+#: doc/classes/Input.xml:97
msgid ""
"Returns the gravity of the device's accelerometer sensor, if the device has "
"one. Otherwise, the method returns [constant Vector3.ZERO].\n"
@@ -28309,7 +28416,7 @@ msgid ""
"Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:97
+#: doc/classes/Input.xml:104
msgid ""
"Returns the rotation rate in rad/s around a device's X, Y, and Z axes of the "
"gyroscope sensor, if the device has one. Otherwise, the method returns "
@@ -28318,53 +28425,53 @@ msgid ""
"it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:106
+#: doc/classes/Input.xml:113
msgid ""
"Returns the current value of the joypad axis at given index (see [enum "
"JoystickList])."
msgstr ""
-#: doc/classes/Input.xml:113
+#: doc/classes/Input.xml:120
msgid "Returns the index of the provided axis name."
msgstr ""
-#: doc/classes/Input.xml:120
+#: doc/classes/Input.xml:127
msgid ""
"Receives a [enum JoystickList] axis and returns its equivalent name as a "
"string."
msgstr ""
-#: doc/classes/Input.xml:127
+#: doc/classes/Input.xml:134
msgid "Returns the index of the provided button name."
msgstr ""
-#: doc/classes/Input.xml:134
+#: doc/classes/Input.xml:141
msgid ""
"Receives a gamepad button from [enum JoystickList] and returns its "
"equivalent name as a string."
msgstr ""
-#: doc/classes/Input.xml:141
+#: doc/classes/Input.xml:148
msgid ""
"Returns a SDL2-compatible device GUID on platforms that use gamepad "
"remapping. Returns [code]\"Default Gamepad\"[/code] otherwise."
msgstr ""
-#: doc/classes/Input.xml:148
+#: doc/classes/Input.xml:155
msgid "Returns the name of the joypad at the specified device index."
msgstr ""
-#: doc/classes/Input.xml:155
+#: doc/classes/Input.xml:162
msgid "Returns the duration of the current vibration effect in seconds."
msgstr ""
-#: doc/classes/Input.xml:162
+#: doc/classes/Input.xml:169
msgid ""
"Returns the strength of the joypad vibration: x is the strength of the weak "
"motor, and y is the strength of the strong motor."
msgstr ""
-#: doc/classes/Input.xml:168
+#: doc/classes/Input.xml:175
msgid ""
"Returns the mouse speed for the last time the cursor was moved, and this "
"until the next frame where the mouse moves. This means that even if the "
@@ -28372,7 +28479,7 @@ msgid ""
"motion."
msgstr ""
-#: doc/classes/Input.xml:174
+#: doc/classes/Input.xml:181
msgid ""
"Returns the magnetic field strength in micro-Tesla for all axes of the "
"device's magnetometer sensor, if the device has one. Otherwise, the method "
@@ -28381,17 +28488,17 @@ msgid ""
"platforms, it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:181
+#: doc/classes/Input.xml:188
msgid ""
"Returns mouse buttons as a bitmask. If multiple mouse buttons are pressed at "
"the same time, the bits are added together."
msgstr ""
-#: doc/classes/Input.xml:187
+#: doc/classes/Input.xml:194
msgid "Returns the mouse mode. See the constants for more information."
msgstr ""
-#: doc/classes/Input.xml:198
+#: doc/classes/Input.xml:205
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -28404,7 +28511,7 @@ msgid ""
"want (on the range of 0 to 1)."
msgstr ""
-#: doc/classes/Input.xml:208
+#: doc/classes/Input.xml:215
msgid ""
"Returns [code]true[/code] when the user starts pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user pressed down "
@@ -28416,7 +28523,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:218
+#: doc/classes/Input.xml:225
msgid ""
"Returns [code]true[/code] when the user stops pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user released the "
@@ -28426,7 +28533,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:227
+#: doc/classes/Input.xml:234
msgid ""
"Returns [code]true[/code] if you are pressing the action event. Note that if "
"an action has multiple buttons assigned and more than one of them is "
@@ -28437,13 +28544,13 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:236
+#: doc/classes/Input.xml:243
msgid ""
"Returns [code]true[/code] if you are pressing the joypad button (see [enum "
"JoystickList])."
msgstr ""
-#: doc/classes/Input.xml:243
+#: doc/classes/Input.xml:250
msgid ""
"Returns [code]true[/code] if the system knows the specified device. This "
"means that it sets all button and axis indices exactly as defined in [enum "
@@ -28451,19 +28558,19 @@ msgid ""
"but you can still retrieve events from them."
msgstr ""
-#: doc/classes/Input.xml:250
+#: doc/classes/Input.xml:257
msgid ""
"Returns [code]true[/code] if you are pressing the key. You can pass a [enum "
"KeyList] constant."
msgstr ""
-#: doc/classes/Input.xml:257
+#: doc/classes/Input.xml:264
msgid ""
"Returns [code]true[/code] if you are pressing the mouse button specified "
"with [enum ButtonList]."
msgstr ""
-#: doc/classes/Input.xml:267
+#: doc/classes/Input.xml:274
msgid ""
"Notifies the [Input] singleton that a connection has changed, to update the "
"state for the [code]device[/code] index.\n"
@@ -28472,7 +28579,7 @@ msgid ""
"triggered internally."
msgstr ""
-#: doc/classes/Input.xml:275
+#: doc/classes/Input.xml:282
msgid ""
"Feeds an [InputEvent] to the game. Can be used to artificially trigger input "
"events from code. Also generates [method Node._input] calls.\n"
@@ -28485,12 +28592,21 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Input.xml:289
+#: doc/classes/Input.xml:296
msgid ""
"Removes all mappings from the internal database that match the given GUID."
msgstr ""
-#: doc/classes/Input.xml:298
+#: doc/classes/Input.xml:303
+msgid ""
+"Sets the acceleration value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:313
msgid ""
"Sets a custom mouse cursor image, which is only visible inside the game "
"window. The hotspot can also be specified. Passing [code]null[/code] to the "
@@ -28505,7 +28621,7 @@ msgid ""
"compression mode can't be used for custom cursors."
msgstr ""
-#: doc/classes/Input.xml:309
+#: doc/classes/Input.xml:324
msgid ""
"Sets the default cursor shape to be used in the viewport instead of "
"[constant CURSOR_ARROW].\n"
@@ -28515,11 +28631,38 @@ msgid ""
"cursor immediately."
msgstr ""
-#: doc/classes/Input.xml:318
+#: doc/classes/Input.xml:333
+msgid ""
+"Sets the gravity value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:341
+msgid ""
+"Sets the value of the rotation rate of the gyroscope sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:349
+msgid ""
+"Sets the value of the magnetic field of the magnetometer sensor. Can be used "
+"for debugging on devices without a hardware sensor, for example in an editor "
+"on a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:357
msgid "Sets the mouse mode. See the constants for more information."
msgstr ""
-#: doc/classes/Input.xml:325
+#: doc/classes/Input.xml:364
msgid ""
"Enables or disables the accumulation of similar input events sent by the "
"operating system. When input accumulation is enabled, all input events "
@@ -28533,7 +28676,7 @@ msgid ""
"results that closely follow the actual input."
msgstr ""
-#: doc/classes/Input.xml:336
+#: doc/classes/Input.xml:375
msgid ""
"Starts to vibrate the joypad. Joypads usually come with two rumble motors, a "
"strong and a weak one. [code]weak_magnitude[/code] is the strength of the "
@@ -28546,34 +28689,34 @@ msgid ""
"few seconds."
msgstr ""
-#: doc/classes/Input.xml:344
+#: doc/classes/Input.xml:383
msgid "Stops the vibration of the joypad."
msgstr ""
-#: doc/classes/Input.xml:351
+#: doc/classes/Input.xml:390
msgid ""
"Vibrate Android and iOS devices.\n"
"[b]Note:[/b] It needs [code]VIBRATE[/code] permission for Android at export "
"settings. iOS does not support duration."
msgstr ""
-#: doc/classes/Input.xml:359
+#: doc/classes/Input.xml:398
msgid "Sets the mouse position to the specified vector."
msgstr ""
-#: doc/classes/Input.xml:368
+#: doc/classes/Input.xml:407
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
-#: doc/classes/Input.xml:374
+#: doc/classes/Input.xml:413
msgid "Makes the mouse cursor visible if it is hidden."
msgstr ""
-#: doc/classes/Input.xml:377
+#: doc/classes/Input.xml:416
msgid "Makes the mouse cursor hidden if it is visible."
msgstr ""
-#: doc/classes/Input.xml:380
+#: doc/classes/Input.xml:419
msgid ""
"Captures the mouse. The mouse will be hidden and its position locked at the "
"center of the screen.\n"
@@ -28581,83 +28724,83 @@ msgid ""
"need to use [member InputEventMouseMotion.relative]."
msgstr ""
-#: doc/classes/Input.xml:384
+#: doc/classes/Input.xml:423
msgid "Makes the mouse cursor visible but confines it to the game window."
msgstr ""
-#: doc/classes/Input.xml:387
+#: doc/classes/Input.xml:426
msgid "Arrow cursor. Standard, default pointing cursor."
msgstr ""
-#: doc/classes/Input.xml:390
+#: doc/classes/Input.xml:429
msgid ""
"I-beam cursor. Usually used to show where the text cursor will appear when "
"the mouse is clicked."
msgstr ""
-#: doc/classes/Input.xml:393
+#: doc/classes/Input.xml:432
msgid ""
"Pointing hand cursor. Usually used to indicate the pointer is over a link or "
"other interactable item."
msgstr ""
-#: doc/classes/Input.xml:396
+#: doc/classes/Input.xml:435
msgid ""
"Cross cursor. Typically appears over regions in which a drawing operation "
"can be performed or for selections."
msgstr ""
-#: doc/classes/Input.xml:399
+#: doc/classes/Input.xml:438
msgid ""
"Wait cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application is still usable during the "
"operation."
msgstr ""
-#: doc/classes/Input.xml:402
+#: doc/classes/Input.xml:441
msgid ""
"Busy cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application isn't usable during the "
"operation (e.g. something is blocking its main thread)."
msgstr ""
-#: doc/classes/Input.xml:405
+#: doc/classes/Input.xml:444
msgid "Drag cursor. Usually displayed when dragging something."
msgstr ""
-#: doc/classes/Input.xml:408
+#: doc/classes/Input.xml:447
msgid ""
"Can drop cursor. Usually displayed when dragging something to indicate that "
"it can be dropped at the current position."
msgstr ""
-#: doc/classes/Input.xml:411
+#: doc/classes/Input.xml:450
msgid ""
"Forbidden cursor. Indicates that the current action is forbidden (for "
"example, when dragging something) or that the control at a position is "
"disabled."
msgstr ""
-#: doc/classes/Input.xml:414
+#: doc/classes/Input.xml:453
msgid ""
"Vertical resize mouse cursor. A double-headed vertical arrow. It tells the "
"user they can resize the window or the panel vertically."
msgstr ""
-#: doc/classes/Input.xml:417
+#: doc/classes/Input.xml:456
msgid ""
"Horizontal resize mouse cursor. A double-headed horizontal arrow. It tells "
"the user they can resize the window or the panel horizontally."
msgstr ""
-#: doc/classes/Input.xml:420
+#: doc/classes/Input.xml:459
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the bottom left to the top right. It tells the user they can resize the "
"window or the panel both horizontally and vertically."
msgstr ""
-#: doc/classes/Input.xml:423
+#: doc/classes/Input.xml:462
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the top left to the bottom right, the opposite of [constant "
@@ -28665,23 +28808,23 @@ msgid ""
"both horizontally and vertically."
msgstr ""
-#: doc/classes/Input.xml:426
+#: doc/classes/Input.xml:465
msgid "Move cursor. Indicates that something can be moved."
msgstr ""
-#: doc/classes/Input.xml:429
+#: doc/classes/Input.xml:468
msgid ""
"Vertical split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_VSIZE]."
msgstr ""
-#: doc/classes/Input.xml:432
+#: doc/classes/Input.xml:471
msgid ""
"Horizontal split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_HSIZE]."
msgstr ""
-#: doc/classes/Input.xml:435
+#: doc/classes/Input.xml:474
msgid "Help cursor. Usually a question mark."
msgstr ""
@@ -29097,7 +29240,9 @@ msgid "The drag position."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -30409,7 +30554,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30474,22 +30620,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -30504,7 +30652,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -30512,19 +30660,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -30595,7 +30743,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30653,7 +30802,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -31938,14 +32089,21 @@ msgid "Default text [Color] of the [LinkButton]."
msgstr ""
#: doc/classes/LinkButton.xml:46
-msgid "Text [Color] used when the [LinkButton] is being hovered."
+msgid ""
+"Text [Color] used when the [LinkButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/LinkButton.xml:49
-msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgid "Text [Color] used when the [LinkButton] is being hovered."
msgstr ""
#: doc/classes/LinkButton.xml:52
+msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:55
msgid "The vertical space between the baseline of text and the underline."
msgstr ""
@@ -32438,26 +32596,33 @@ msgid "Text [Color] used when the [MenuButton] is disabled."
msgstr ""
#: doc/classes/MenuButton.xml:64
-msgid "Text [Color] used when the [MenuButton] is being hovered."
+msgid ""
+"Text [Color] used when the [MenuButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/MenuButton.xml:67
-msgid "Text [Color] used when the [MenuButton] is being pressed."
+msgid "Text [Color] used when the [MenuButton] is being hovered."
msgstr ""
#: doc/classes/MenuButton.xml:70
-msgid "[StyleBox] used when the [MenuButton] is being hovered."
+msgid "Text [Color] used when the [MenuButton] is being pressed."
msgstr ""
#: doc/classes/MenuButton.xml:73
-msgid "The horizontal space between [MenuButton]'s icon and text."
+msgid "[StyleBox] used when the [MenuButton] is being hovered."
msgstr ""
#: doc/classes/MenuButton.xml:76
-msgid "Default [StyleBox] for the [MenuButton]."
+msgid "The horizontal space between [MenuButton]'s icon and text."
msgstr ""
#: doc/classes/MenuButton.xml:79
+msgid "Default [StyleBox] for the [MenuButton]."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:82
msgid "[StyleBox] used when the [MenuButton] is being pressed."
msgstr ""
@@ -34182,7 +34347,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -37066,26 +37231,33 @@ msgid "Text [Color] used when the [OptionButton] is disabled."
msgstr ""
#: doc/classes/OptionButton.xml:212
-msgid "Text [Color] used when the [OptionButton] is being hovered."
+msgid ""
+"Text [Color] used when the [OptionButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/OptionButton.xml:215
-msgid "Text [Color] used when the [OptionButton] is being pressed."
+msgid "Text [Color] used when the [OptionButton] is being hovered."
msgstr ""
#: doc/classes/OptionButton.xml:218
-msgid "[StyleBox] used when the [OptionButton] is being hovered."
+msgid "Text [Color] used when the [OptionButton] is being pressed."
msgstr ""
#: doc/classes/OptionButton.xml:221
-msgid "The horizontal space between [OptionButton]'s icon and text."
+msgid "[StyleBox] used when the [OptionButton] is being hovered."
msgstr ""
#: doc/classes/OptionButton.xml:224
-msgid "Default [StyleBox] for the [OptionButton]."
+msgid "The horizontal space between [OptionButton]'s icon and text."
msgstr ""
#: doc/classes/OptionButton.xml:227
+msgid "Default [StyleBox] for the [OptionButton]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:230
msgid "[StyleBox] used when the [OptionButton] is being pressed."
msgstr ""
@@ -37488,7 +37660,7 @@ msgstr ""
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -37518,14 +37690,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -37535,7 +37707,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -40020,17 +40192,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -40048,11 +40246,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -40247,7 +40445,9 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-msgid "Returns the [Physics2DDirectBodyState] of the body."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
@@ -41049,6 +41249,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -41066,7 +41284,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -41180,7 +41398,9 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-msgid "Returns the [PhysicsDirectBodyState] of the body."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/PhysicsServer.xml:370
@@ -42159,27 +42379,27 @@ msgstr ""
msgid "Removes an element from the array by index."
msgstr ""
-#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolColorArray.xml:66
-#: doc/classes/PoolIntArray.xml:67 doc/classes/PoolRealArray.xml:67
-#: doc/classes/PoolStringArray.xml:74 doc/classes/PoolVector2Array.xml:67
-#: doc/classes/PoolVector3Array.xml:66
+#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolIntArray.xml:67
+#: doc/classes/PoolRealArray.xml:67
msgid ""
"Sets the size of the array. If the array is grown, reserves elements at the "
"end of the array. If the array is shrunk, truncates the array to the new "
-"size."
+"size.\n"
+"[b]Note:[/b] Added elements are not automatically initialized to 0 and will "
+"contain garbage, i.e. indeterminate values."
msgstr ""
-#: doc/classes/PoolByteArray.xml:121
+#: doc/classes/PoolByteArray.xml:122
msgid "Changes the byte at the given index."
msgstr ""
-#: doc/classes/PoolByteArray.xml:127 doc/classes/PoolColorArray.xml:79
-#: doc/classes/PoolRealArray.xml:80 doc/classes/PoolStringArray.xml:87
+#: doc/classes/PoolByteArray.xml:128 doc/classes/PoolColorArray.xml:79
+#: doc/classes/PoolRealArray.xml:81 doc/classes/PoolStringArray.xml:87
#: doc/classes/PoolVector2Array.xml:80 doc/classes/PoolVector3Array.xml:79
msgid "Returns the size of the array."
msgstr ""
-#: doc/classes/PoolByteArray.xml:135
+#: doc/classes/PoolByteArray.xml:136
msgid ""
"Returns the slice of the [PoolByteArray] between indices (inclusive) as a "
"new [PoolByteArray]. Any negative index is considered to be from the end of "
@@ -42211,6 +42431,14 @@ msgstr ""
msgid "Appends a value to the array."
msgstr ""
+#: doc/classes/PoolColorArray.xml:66 doc/classes/PoolStringArray.xml:74
+#: doc/classes/PoolVector2Array.xml:67 doc/classes/PoolVector3Array.xml:66
+msgid ""
+"Sets the size of the array. If the array is grown, reserves elements at the "
+"end of the array. If the array is shrunk, truncates the array to the new "
+"size."
+msgstr ""
+
#: doc/classes/PoolColorArray.xml:73
msgid "Changes the [Color] at the given index."
msgstr ""
@@ -42247,11 +42475,11 @@ msgid ""
"valid, or at the end of the array ([code]idx == size()[/code])."
msgstr ""
-#: doc/classes/PoolIntArray.xml:74
+#: doc/classes/PoolIntArray.xml:75
msgid "Changes the int at the given index."
msgstr ""
-#: doc/classes/PoolIntArray.xml:80
+#: doc/classes/PoolIntArray.xml:81
msgid "Returns the array size."
msgstr ""
@@ -42283,7 +42511,7 @@ msgstr ""
msgid "Appends a [PoolRealArray] at the end of this array."
msgstr ""
-#: doc/classes/PoolRealArray.xml:74
+#: doc/classes/PoolRealArray.xml:75
msgid "Changes the float at the given index."
msgstr ""
@@ -43549,18 +43777,6 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:204
msgid ""
-"The project data directory is used for storing project-specific data "
-"(metadata, shader cache, etc.).\n"
-"[b]Note:[/b] Restart the application after changing this setting.\n"
-"[b]Note:[/b] Changing this value can help on platforms or with third-party "
-"tools where specific directory patterns are disallowed. Only modify this "
-"setting if you know that your environment requires it, as changing the "
-"default can impact compatibility with some external tools or plugins which "
-"expect the default [code].import[/code] folder."
-msgstr ""
-
-#: doc/classes/ProjectSettings.xml:209
-msgid ""
"Specifies a file to override project settings. For example: [code]user://"
"custom_settings.cfg[/code]. See \"Overriding\" in the [ProjectSettings] "
"class description at the top for more information.\n"
@@ -43568,7 +43784,7 @@ msgid ""
"code] will still be read to override the project settings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:213
+#: doc/classes/ProjectSettings.xml:208
msgid ""
"If [code]true[/code], the project will save user data to its own user "
"directory (see [member application/config/custom_user_dir_name]). This "
@@ -43578,13 +43794,28 @@ msgid ""
"user data directory)/Godot/app_userdata/(project name)[/code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:216
+#: doc/classes/ProjectSettings.xml:211
+msgid ""
+"If [code]true[/code], the project will use a hidden directory ([code]."
+"import[/code]) for storing project-specific data (metadata, shader cache, "
+"etc.).\n"
+"If [code]false[/code], a non-hidden directory ([code]import[/code]) will be "
+"used instead.\n"
+"[b]Note:[/b] Restart the application after changing this setting.\n"
+"[b]Note:[/b] Changing this value can help on platforms or with third-party "
+"tools where hidden directory patterns are disallowed. Only modify this "
+"setting if you know that your environment requires it, as changing the "
+"default can impact compatibility with some external tools or plugins which "
+"expect the default [code].import[/code] folder."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:217
msgid ""
"Icon set in [code].ico[/code] format used on Windows to set the game's icon. "
"This is done automatically on start by calling [method OS.set_native_icon]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:219
+#: doc/classes/ProjectSettings.xml:220
msgid ""
"Time samples for frame deltas are subject to random variation introduced by "
"the platform, even when frames are displayed at regular intervals thanks to "
@@ -43598,14 +43829,14 @@ msgid ""
"adequate to render frames at the refresh rate."
msgstr ""
-#: doc/classes/ProjectSettings.xml:224
+#: doc/classes/ProjectSettings.xml:225
msgid ""
"[b]Experimental.[/b] Shifts the measurement of delta time for each frame to "
"just after the drawing has taken place. This may lead to more consistent "
"deltas and a reduction in frame stutters."
msgstr ""
-#: doc/classes/ProjectSettings.xml:227
+#: doc/classes/ProjectSettings.xml:228
msgid ""
"If [code]true[/code], disables printing to standard error. If [code]true[/"
"code], this also hides error and warning messages printed by [method "
@@ -43614,7 +43845,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:231
+#: doc/classes/ProjectSettings.xml:232
msgid ""
"If [code]true[/code], disables printing to standard output. This is "
"equivalent to starting the editor or project with the [code]--quiet[/code] "
@@ -43622,7 +43853,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:235
+#: doc/classes/ProjectSettings.xml:236
msgid ""
"If [code]true[/code], flushes the standard output stream every time a line "
"is printed. This affects both terminal logging and file logging.\n"
@@ -43638,20 +43869,20 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:241
+#: doc/classes/ProjectSettings.xml:242
msgid ""
"Debug build override for [member application/run/flush_stdout_on_print], as "
"performance is less important during debugging.\n"
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:245
+#: doc/classes/ProjectSettings.xml:246
msgid ""
"Forces a delay between frames in the main loop (in milliseconds). This may "
"be useful if you plan to disable vertical synchronization."
msgstr ""
-#: doc/classes/ProjectSettings.xml:248
+#: doc/classes/ProjectSettings.xml:249
msgid ""
"If [code]true[/code], enables low-processor usage mode. This setting only "
"works on desktop platforms. The screen is not redrawn if nothing changes "
@@ -43659,75 +43890,81 @@ msgid ""
"useless (and can hurt performance) in most games."
msgstr ""
-#: doc/classes/ProjectSettings.xml:251
+#: doc/classes/ProjectSettings.xml:252
msgid ""
"Amount of sleeping between frames when the low-processor usage mode is "
"enabled (in microseconds). Higher values will result in lower CPU usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:254
+#: doc/classes/ProjectSettings.xml:255
msgid "Path to the main scene file that will be loaded when the project runs."
msgstr ""
-#: doc/classes/ProjectSettings.xml:257 doc/classes/ProjectSettings.xml:260
+#: doc/classes/ProjectSettings.xml:258 doc/classes/ProjectSettings.xml:261
msgid ""
"Audio buses will disable automatically when sound goes below a given dB "
"threshold for a given time. This saves CPU as effects assigned to that bus "
"will no longer do any processing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:263
+#: doc/classes/ProjectSettings.xml:264
msgid ""
"Default [AudioBusLayout] resource file to use in the project, unless "
"overridden by the scene."
msgstr ""
-#: doc/classes/ProjectSettings.xml:266
+#: doc/classes/ProjectSettings.xml:267
msgid ""
"Specifies the audio driver to use. This setting is platform-dependent as "
"each platform supports different audio drivers. If left empty, the default "
"audio driver will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:269
+#: doc/classes/ProjectSettings.xml:270
msgid ""
"If [code]true[/code], microphone input will be allowed. This requires "
"appropriate permissions to be set when exporting to Android or iOS."
msgstr ""
-#: doc/classes/ProjectSettings.xml:272
+#: doc/classes/ProjectSettings.xml:273
msgid ""
"The mixing rate used for audio (in Hz). In general, it's better to not touch "
"this and leave it to the host operating system."
msgstr ""
-#: doc/classes/ProjectSettings.xml:275
+#: doc/classes/ProjectSettings.xml:276
msgid ""
"Safer override for [member audio/mix_rate] in the Web platform. Here "
"[code]0[/code] means \"let the browser choose\" (since some browsers do not "
"like forcing the mix rate)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:278
+#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:281
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:284
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:287
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43737,7 +43974,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:290
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43747,27 +43984,27 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:293
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:296
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
-#: doc/classes/ProjectSettings.xml:299
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:302
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -43775,81 +44012,81 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:305
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:308
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:311
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:314
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:317
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr ""
-#: doc/classes/ProjectSettings.xml:320
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:323
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:326
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:329
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:332
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:335
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:338
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:341
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -43857,109 +44094,109 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:344
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:347
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:350
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:353
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:356
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:359
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:362
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:365
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:368
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:371
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:374
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:377
+#: doc/classes/ProjectSettings.xml:380
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:380
+#: doc/classes/ProjectSettings.xml:383
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:383
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:386
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:389
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:392
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:395
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:398
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -43970,91 +44207,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:403
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:406
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:409
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:412
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:415
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:418
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:421
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:424
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:427
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:430
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:433
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:436
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:439
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr ""
-#: doc/classes/ProjectSettings.xml:442
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:445
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:448
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:451
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -44063,13 +44300,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:455
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:458
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -44079,7 +44316,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:463
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -44087,19 +44324,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:468
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:472
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:476
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -44113,45 +44350,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:481
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:484
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:488
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:491
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:494
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:497
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:500
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -44160,7 +44397,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:503
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -44171,7 +44408,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:507
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -44187,14 +44424,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:515
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:518
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -44202,49 +44439,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:521
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:524
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:529
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:532
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:535
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:538
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:541
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:544
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:547
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -44253,7 +44490,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:551
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44261,7 +44498,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:555
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44269,7 +44506,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:559
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44279,7 +44516,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:563
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -44288,7 +44525,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:567
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -44297,7 +44534,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:571
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44307,7 +44544,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:575
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44315,7 +44552,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:579
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -44325,7 +44562,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:583
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -44335,7 +44572,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:587
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44343,7 +44580,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:591
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -44352,7 +44589,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:595
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44360,7 +44597,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:599
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -44372,477 +44609,477 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:605
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:608
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:611
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:614
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:617
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:620
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:623
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:626
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:629
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:632
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:635
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:638
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:641
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:644
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:647
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:650
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:653
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:656
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:659
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:662
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:665
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:668
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:671
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:674
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:677
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:680
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:683
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:686
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:689
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:692
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:695
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:698
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:701
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:704
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:707
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:710
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:713
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:716
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:719
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:722
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:725
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:728
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:731
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:734
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:737
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:740
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:743
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:746
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:749
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:752
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:755
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:758
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:761
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:764
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:767
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:770
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:773
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:776
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:779
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:782
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:785
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:788
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:791
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:794
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:797
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:800
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:803
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:806
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:809
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:812
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:815
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:818
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:821
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:824
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:827
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:830
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:833
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:836
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:839
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:842
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:845
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:848
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:851
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:854
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:857
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:860
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:863
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:866
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:869
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:872
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:875
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:878
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:881
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr ""
-#: doc/classes/ProjectSettings.xml:884
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:887
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:890
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:893
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:896
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:899
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:902
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:905
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:908
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:911
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:914
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:917
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:920
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:923
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:926
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:929
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:932
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:935
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:938
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:941
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:946
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:949
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -44850,92 +45087,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:952
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:955
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:958
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:961
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:964
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:967
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:970
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:973
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:976
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:979
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:982
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:985
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:988
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:991
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:994
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:997
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1000
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1003
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -44945,33 +45182,33 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1007
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1010
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1013
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1017
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1021
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -44984,7 +45221,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1025
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -44996,7 +45233,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1033
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45008,7 +45245,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1041
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45021,7 +45258,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1045
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -45029,28 +45266,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1049
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1053
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1056
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1059
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -45060,25 +45297,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1063
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1066
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1069
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1072
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45091,7 +45328,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1076
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45103,7 +45340,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1084
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45115,7 +45352,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1092
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45128,13 +45365,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1096
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1099
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -45142,11 +45379,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1103
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1106
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -45160,7 +45397,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1112
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -45169,7 +45406,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1116
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -45185,7 +45422,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1121
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -45195,7 +45432,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1125
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45205,7 +45442,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1129
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -45216,7 +45453,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1133
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45226,7 +45463,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1137
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -45234,7 +45471,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1141
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -45245,7 +45482,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1145
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -45260,7 +45497,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1151
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -45269,13 +45506,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1156
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1159
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -45284,7 +45521,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1162
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -45294,7 +45531,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1165
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -45306,7 +45543,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1168
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -45316,24 +45553,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1171
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1174
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1177
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1180
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -45342,7 +45579,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1183
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -45350,7 +45587,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1186
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -45359,7 +45596,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1189
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -45369,7 +45606,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1193
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -45377,31 +45614,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1197
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1200
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1203
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1206
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1209
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -45409,7 +45646,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1212
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -45419,46 +45656,53 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1215
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1218
+#: doc/classes/ProjectSettings.xml:1221
+msgid ""
+"iOS specific override for [member rendering/gles2/compatibility/"
+"disable_half_float], due to poor support for half-float vertex compression "
+"on many devices."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1224
msgid ""
-"If [code]true[/code] and available on the target device, enables high "
-"floating point precision for all shader computations in GLES2.\n"
+"If [code]true[/code] and available on the target Android device, enables "
+"high floating point precision for all shader computations in GLES2.\n"
"[b]Warning:[/b] High floating point precision can be extremely slow on older "
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1225
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1228
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1231
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1234
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -45466,7 +45710,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1237
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -45476,7 +45720,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1240
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -45485,7 +45729,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1243
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -45494,20 +45738,20 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1246
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1249
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1252
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -45516,7 +45760,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1255
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -45524,7 +45768,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1258
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -45533,7 +45777,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -45543,20 +45787,20 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1267
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1274
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -45565,13 +45809,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -45581,46 +45825,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1293
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1296
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1299
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1302
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1305
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -45630,7 +45874,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -45642,7 +45886,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -45650,7 +45894,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1316
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -45658,7 +45902,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -45667,7 +45911,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1323
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -45681,7 +45925,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1328
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -45691,7 +45935,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1331
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -45700,7 +45944,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1334
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -45710,54 +45954,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1337
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1340
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1343
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1346
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1349
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1352
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1355
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1358
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -45768,61 +46012,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1365
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1368
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1371
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1374
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1377
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1380
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1383
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1386
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -45833,7 +46077,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -45842,26 +46086,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1393 doc/classes/ProjectSettings.xml:1396
#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1405
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1408
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1411
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -45872,20 +46116,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1418
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -45897,52 +46141,52 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1428
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1435
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1438
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1441
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1444
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1447
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1450
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1453
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -45950,7 +46194,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -45960,10 +46204,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -45972,10 +46216,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -45984,10 +46228,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -45996,10 +46240,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -46008,10 +46252,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -46675,40 +46919,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr ""
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -46716,14 +46974,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -49058,6 +49316,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -49075,7 +49349,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -49083,11 +49357,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -49097,19 +49371,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -54524,20 +54798,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -54548,28 +54827,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -54581,19 +54860,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
@@ -57379,26 +57658,33 @@ msgid "Text [Color] used when the [ToolButton] is disabled."
msgstr ""
#: doc/classes/ToolButton.xml:39
-msgid "Text [Color] used when the [ToolButton] is being hovered."
+msgid ""
+"Text [Color] used when the [ToolButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/ToolButton.xml:42
-msgid "Text [Color] used when the [ToolButton] is being pressed."
+msgid "Text [Color] used when the [ToolButton] is being hovered."
msgstr ""
#: doc/classes/ToolButton.xml:45
-msgid "[StyleBox] used when the [ToolButton] is being hovered."
+msgid "Text [Color] used when the [ToolButton] is being pressed."
msgstr ""
#: doc/classes/ToolButton.xml:48
-msgid "The horizontal space between [ToolButton]'s icon and text."
+msgid "[StyleBox] used when the [ToolButton] is being hovered."
msgstr ""
#: doc/classes/ToolButton.xml:51
-msgid "Default [StyleBox] for the [ToolButton]."
+msgid "The horizontal space between [ToolButton]'s icon and text."
msgstr ""
#: doc/classes/ToolButton.xml:54
+msgid "Default [StyleBox] for the [ToolButton]."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:57
msgid "[StyleBox] used when the [ToolButton] is being pressed."
msgstr ""
diff --git a/doc/translations/sr_Cyrl.po b/doc/translations/sr_Cyrl.po
index bdd83106ae..19ba5471c9 100644
--- a/doc/translations/sr_Cyrl.po
+++ b/doc/translations/sr_Cyrl.po
@@ -5,12 +5,13 @@
#
# Младен Габић <cupakabra@protonmail.com>, 2020.
# Pierre Stempin <pierre.stempin@gmail.com>, 2020.
+# ÐлекÑић Владица <vlajkousk@gmail.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2020-10-12 09:28+0000\n"
-"Last-Translator: Pierre Stempin <pierre.stempin@gmail.com>\n"
+"PO-Revision-Date: 2021-11-07 22:24+0000\n"
+"Last-Translator: ÐлекÑић Владица <vlajkousk@gmail.com>\n"
"Language-Team: Serbian (cyrillic) <https://hosted.weblate.org/projects/godot-"
"engine/godot-class-reference/sr_Cyrl/>\n"
"Language: sr_Cyrl\n"
@@ -19,54 +20,49 @@ msgstr ""
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Generator: Weblate 4.3-dev\n"
+"X-Generator: Weblate 4.9-dev\n"
-#: doc/tools/makerst.py
-#, fuzzy
+#: doc/tools/make_rst.py
msgid "Description"
msgstr "ОпиÑ"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
#, fuzzy
msgid "Tutorials"
-msgstr "Туториали"
+msgstr "Подучавања"
-#: doc/tools/makerst.py
-#, fuzzy
+#: doc/tools/make_rst.py
msgid "Properties"
msgstr "ОÑобине"
-#: doc/tools/makerst.py
-#, fuzzy
+#: doc/tools/make_rst.py
msgid "Methods"
-msgstr "Методе"
+msgstr "ПоÑтупци"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
#, fuzzy
msgid "Theme Properties"
msgstr "ОÑобине Теме"
-#: doc/tools/makerst.py
-#, fuzzy
+#: doc/tools/make_rst.py
msgid "Signals"
-msgstr "Сигнали"
+msgstr "Знаци"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
#, fuzzy
msgid "Enumerations"
msgstr "ПопиÑивање"
-#: doc/tools/makerst.py
-#, fuzzy
+#: doc/tools/make_rst.py
msgid "Constants"
-msgstr "КонÑтанте"
+msgstr "Ðепроменљиве"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
#, fuzzy
msgid "Property Descriptions"
msgstr "ОпиÑи ОÑобина"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
#, fuzzy
msgid "Method Descriptions"
msgstr "ОпиÑи Метода"
@@ -74,14 +70,18 @@ msgstr "ОпиÑи Метода"
#: modules/gdscript/doc_classes/@GDScript.xml:4
#, fuzzy
msgid "Built-in GDScript functions."
-msgstr "Уграђене ГДСкрипта функције."
+msgstr "Уграђена ГДСкрипта извршења."
#: modules/gdscript/doc_classes/@GDScript.xml:7
+#, fuzzy
msgid ""
"List of core built-in GDScript functions. Math functions and other "
"utilities. Everything else is provided by objects. (Keywords: builtin, built "
"in, global functions.)"
msgstr ""
+"СпиÑак Ñржних уграђених ГДСкрипта извршења. Математичка извршења и оÑтале "
+"уÑлуге. Све оÑтало је обезбеђено предметима. (Кључне речи: уграђено, "
+"уграђено, Ñвеобухватна извршења.)"
#: modules/gdscript/doc_classes/@GDScript.xml:19
msgid ""
@@ -3602,112 +3602,121 @@ msgid ""
msgstr ""
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr ""
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
msgstr ""
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
msgstr ""
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
msgstr ""
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr ""
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr ""
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr ""
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
msgstr ""
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr ""
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
msgstr ""
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
msgstr ""
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr ""
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
"positive.\n"
@@ -4785,7 +4794,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -6221,21 +6230,25 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
#: doc/classes/Area.xml:17
msgid ""
-"Returns a list of intersecting [Area]s. For performance reasons (collisions "
-"are all processed at the same time) this list is modified once during the "
-"physics step, not immediately after objects are moved. Consider using "
-"signals instead."
+"Returns a list of intersecting [Area]s. The overlapping area's [member "
+"CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:23
+#: doc/classes/Area.xml:24
msgid ""
-"Returns a list of intersecting [PhysicsBody]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody]s. The overlapping body's "
+"[member CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:30
+#: doc/classes/Area.xml:32
msgid ""
"If [code]true[/code], the given area overlaps the Area.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6243,7 +6256,7 @@ msgid ""
"physics step. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:38
+#: doc/classes/Area.xml:40
msgid ""
"If [code]true[/code], the given physics body overlaps the Area.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6254,7 +6267,7 @@ msgid ""
"their tiles with collision shapes as a virtual physics body)."
msgstr ""
-#: doc/classes/Area.xml:46
+#: doc/classes/Area.xml:48
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
"velocity lost per second.\n"
@@ -6262,41 +6275,41 @@ msgid ""
"details about damping."
msgstr ""
-#: doc/classes/Area.xml:50 doc/classes/Area2D.xml:52
+#: doc/classes/Area.xml:52 doc/classes/Area2D.xml:54
msgid "The name of the area's audio bus."
msgstr ""
-#: doc/classes/Area.xml:53 doc/classes/Area2D.xml:55
+#: doc/classes/Area.xml:55 doc/classes/Area2D.xml:57
msgid ""
"If [code]true[/code], the area's audio bus overrides the default audio bus."
msgstr ""
-#: doc/classes/Area.xml:56
+#: doc/classes/Area.xml:58
msgid ""
"The area's gravity intensity (in meters per second squared). This value "
"multiplies the gravity vector. This is useful to alter the force of gravity "
"without altering its direction."
msgstr ""
-#: doc/classes/Area.xml:59 doc/classes/Area2D.xml:61
+#: doc/classes/Area.xml:61 doc/classes/Area2D.xml:63
msgid ""
"The falloff factor for point gravity. The greater the value, the faster "
"gravity decreases with distance."
msgstr ""
-#: doc/classes/Area.xml:62 doc/classes/Area2D.xml:64
+#: doc/classes/Area.xml:64 doc/classes/Area2D.xml:66
msgid ""
"If [code]true[/code], gravity is calculated from a point (set via [member "
"gravity_vec]). See also [member space_override]."
msgstr ""
-#: doc/classes/Area.xml:65 doc/classes/Area2D.xml:67
+#: doc/classes/Area.xml:67 doc/classes/Area2D.xml:69
msgid ""
"The area's gravity vector (not normalized). If gravity is a point (see "
"[member gravity_point]), this will be the point of attraction."
msgstr ""
-#: doc/classes/Area.xml:68
+#: doc/classes/Area.xml:70
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
"velocity lost per second.\n"
@@ -6304,61 +6317,61 @@ msgid ""
"about damping."
msgstr ""
-#: doc/classes/Area.xml:72 doc/classes/Area2D.xml:74
+#: doc/classes/Area.xml:74 doc/classes/Area2D.xml:76
msgid "If [code]true[/code], other monitoring areas can detect this area."
msgstr ""
-#: doc/classes/Area.xml:75 doc/classes/Area2D.xml:77
+#: doc/classes/Area.xml:77 doc/classes/Area2D.xml:79
msgid ""
"If [code]true[/code], the area detects bodies or areas entering and exiting "
"it."
msgstr ""
-#: doc/classes/Area.xml:78 doc/classes/Area2D.xml:80
+#: doc/classes/Area.xml:80 doc/classes/Area2D.xml:82
msgid "The area's priority. Higher priority areas are processed first."
msgstr ""
-#: doc/classes/Area.xml:81
+#: doc/classes/Area.xml:83
msgid ""
"The degree to which this area applies reverb to its associated audio. Ranges "
"from [code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
msgstr ""
-#: doc/classes/Area.xml:84
+#: doc/classes/Area.xml:86
msgid "If [code]true[/code], the area applies reverb to its associated audio."
msgstr ""
-#: doc/classes/Area.xml:87
+#: doc/classes/Area.xml:89
msgid "The reverb bus name to use for this area's associated audio."
msgstr ""
-#: doc/classes/Area.xml:90
+#: doc/classes/Area.xml:92
msgid ""
"The degree to which this area's reverb is a uniform effect. Ranges from "
"[code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
msgstr ""
-#: doc/classes/Area.xml:93 doc/classes/Area2D.xml:83
+#: doc/classes/Area.xml:95 doc/classes/Area2D.xml:85
msgid ""
"Override mode for gravity and damping calculations within this area. See "
"[enum SpaceOverride] for possible values."
msgstr ""
-#: doc/classes/Area.xml:100
+#: doc/classes/Area.xml:102
msgid ""
"Emitted when another Area enters this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
-#: doc/classes/Area.xml:107
+#: doc/classes/Area.xml:109
msgid ""
"Emitted when another Area exits this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
-#: doc/classes/Area.xml:117 doc/classes/Area.xml:130
+#: doc/classes/Area.xml:119 doc/classes/Area.xml:132
msgid ""
"Emitted when one of another Area's [Shape]s enters one of this Area's "
"[Shape]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6373,7 +6386,7 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:140
+#: doc/classes/Area.xml:142
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] enters this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -6382,7 +6395,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:147
+#: doc/classes/Area.xml:149
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] exits this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -6391,7 +6404,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:157 doc/classes/Area.xml:170
+#: doc/classes/Area.xml:159 doc/classes/Area.xml:172
msgid ""
"Emitted when one of a [PhysicsBody] or [GridMap]'s [Shape]s enters one of "
"this Area's [Shape]s. Requires [member monitoring] to be set to [code]true[/"
@@ -6408,29 +6421,29 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:180 doc/classes/Area2D.xml:170
+#: doc/classes/Area.xml:182 doc/classes/Area2D.xml:172
msgid "This area does not affect gravity/damping."
msgstr ""
-#: doc/classes/Area.xml:183 doc/classes/Area2D.xml:173
+#: doc/classes/Area.xml:185 doc/classes/Area2D.xml:175
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order)."
msgstr ""
-#: doc/classes/Area.xml:186 doc/classes/Area2D.xml:176
+#: doc/classes/Area.xml:188 doc/classes/Area2D.xml:178
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order), ignoring any lower priority areas."
msgstr ""
-#: doc/classes/Area.xml:189 doc/classes/Area2D.xml:179
+#: doc/classes/Area.xml:191 doc/classes/Area2D.xml:181
msgid ""
"This area replaces any gravity/damping, even the defaults, ignoring any "
"lower priority areas."
msgstr ""
-#: doc/classes/Area.xml:192 doc/classes/Area2D.xml:182
+#: doc/classes/Area.xml:194 doc/classes/Area2D.xml:184
msgid ""
"This area replaces any gravity/damping calculated so far (in [member "
"priority] order), but keeps calculating the rest of the areas."
@@ -6469,21 +6482,25 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
#: doc/classes/Area2D.xml:19
msgid ""
-"Returns a list of intersecting [Area2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [Area2D]s. The overlapping area's [member "
+"CollisionObject2D.collision_layer] must be part of this area's [member "
+"CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:25
+#: doc/classes/Area2D.xml:26
msgid ""
-"Returns a list of intersecting [PhysicsBody2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody2D]s. The overlapping body's "
+"[member CollisionObject2D.collision_layer] must be part of this area's "
+"[member CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:32
+#: doc/classes/Area2D.xml:34
msgid ""
"If [code]true[/code], the given area overlaps the Area2D.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6491,7 +6508,7 @@ msgid ""
"the physics step. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:40
+#: doc/classes/Area2D.xml:42
msgid ""
"If [code]true[/code], the given physics body overlaps the Area2D.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6502,7 +6519,7 @@ msgid ""
"register their tiles with collision shapes as a virtual physics body)."
msgstr ""
-#: doc/classes/Area2D.xml:48
+#: doc/classes/Area2D.xml:50
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
"velocity lost per second.\n"
@@ -6510,14 +6527,14 @@ msgid ""
"details about damping."
msgstr ""
-#: doc/classes/Area2D.xml:58
+#: doc/classes/Area2D.xml:60
msgid ""
"The area's gravity intensity (in pixels per second squared). This value "
"multiplies the gravity vector. This is useful to alter the force of gravity "
"without altering its direction."
msgstr ""
-#: doc/classes/Area2D.xml:70
+#: doc/classes/Area2D.xml:72
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
"velocity lost per second.\n"
@@ -6525,21 +6542,21 @@ msgid ""
"about damping."
msgstr ""
-#: doc/classes/Area2D.xml:90
+#: doc/classes/Area2D.xml:92
msgid ""
"Emitted when another Area2D enters this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-#: doc/classes/Area2D.xml:97
+#: doc/classes/Area2D.xml:99
msgid ""
"Emitted when another Area2D exits this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-#: doc/classes/Area2D.xml:107
+#: doc/classes/Area2D.xml:109
msgid ""
"Emitted when one of another Area2D's [Shape2D]s enters one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6554,7 +6571,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:120
+#: doc/classes/Area2D.xml:122
msgid ""
"Emitted when one of another Area2D's [Shape2D]s exits one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6569,7 +6586,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:130
+#: doc/classes/Area2D.xml:132
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] enters this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -6578,7 +6595,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:137
+#: doc/classes/Area2D.xml:139
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] exits this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -6587,7 +6604,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:147
+#: doc/classes/Area2D.xml:149
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s enters one "
"of this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -6606,7 +6623,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:160
+#: doc/classes/Area2D.xml:162
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s exits one of "
"this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -10176,42 +10193,47 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
-"no save path is provided it will try to match the path from the current "
+"no root node is provided, parent of this node will be used as root instead. "
+"If no save path is provided it will try to match the path from the current "
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -10225,62 +10247,62 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
msgid "The rotation of the baked custom sky."
msgstr ""
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -10288,35 +10310,35 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -10324,13 +10346,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -10342,65 +10364,77 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr ""
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
msgid "Baking was successful."
msgstr ""
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr ""
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr ""
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr ""
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:133
+#: doc/classes/BakedLightmap.xml:132
+msgid ""
+"Returns if lightmapper can't be created. Unless you are using a custom "
+"lightmapper, please report this as bug."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:135
+msgid ""
+"There is no root node to start baking from. Either provide [code]from_node[/"
+"code] argument or attach this node to a parent that should be used as root."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:136
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:139
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:142
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -10856,8 +10890,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -11245,26 +11282,33 @@ msgid "Text [Color] used when the [Button] is disabled."
msgstr ""
#: doc/classes/Button.xml:77
-msgid "Text [Color] used when the [Button] is being hovered."
+msgid ""
+"Text [Color] used when the [Button] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/Button.xml:80
-msgid "Text [Color] used when the [Button] is being pressed."
+msgid "Text [Color] used when the [Button] is being hovered."
msgstr ""
#: doc/classes/Button.xml:83
-msgid "[StyleBox] used when the [Button] is being hovered."
+msgid "Text [Color] used when the [Button] is being pressed."
msgstr ""
#: doc/classes/Button.xml:86
-msgid "The horizontal space between [Button]'s icon and text."
+msgid "[StyleBox] used when the [Button] is being hovered."
msgstr ""
#: doc/classes/Button.xml:89
-msgid "Default [StyleBox] for the [Button]."
+msgid "The horizontal space between [Button]'s icon and text."
msgstr ""
#: doc/classes/Button.xml:92
+msgid "Default [StyleBox] for the [Button]."
+msgstr ""
+
+#: doc/classes/Button.xml:95
msgid "[StyleBox] used when the [Button] is being pressed."
msgstr ""
@@ -12733,80 +12777,96 @@ msgstr ""
msgid "The check icon to display when the [CheckBox] is checked."
msgstr ""
-#: doc/classes/CheckBox.xml:30
+#: doc/classes/CheckBox.xml:28
+msgid "The check icon to display when the [CheckBox] is checked and disabled."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:31
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is disabled."
msgstr ""
-#: doc/classes/CheckBox.xml:33
+#: doc/classes/CheckBox.xml:34
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is focused."
msgstr ""
-#: doc/classes/CheckBox.xml:36
+#: doc/classes/CheckBox.xml:37
msgid "The [Font] to use for the [CheckBox] text."
msgstr ""
-#: doc/classes/CheckBox.xml:39
+#: doc/classes/CheckBox.xml:40
msgid "The [CheckBox] text's font color."
msgstr ""
-#: doc/classes/CheckBox.xml:42
+#: doc/classes/CheckBox.xml:43
msgid "The [CheckBox] text's font color when it's disabled."
msgstr ""
-#: doc/classes/CheckBox.xml:45
+#: doc/classes/CheckBox.xml:46
+msgid ""
+"The [CheckBox] text's font color when it's focused. Only replaces the normal "
+"text color of the checkbox. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:49
msgid "The [CheckBox] text's font color when it's hovered."
msgstr ""
-#: doc/classes/CheckBox.xml:48
+#: doc/classes/CheckBox.xml:52
msgid "The [CheckBox] text's font color when it's hovered and pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:51
+#: doc/classes/CheckBox.xml:55
msgid "The [CheckBox] text's font color when it's pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:54
+#: doc/classes/CheckBox.xml:58
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered."
msgstr ""
-#: doc/classes/CheckBox.xml:57
+#: doc/classes/CheckBox.xml:61
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered and "
"pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:60
+#: doc/classes/CheckBox.xml:64
msgid "The separation between the check icon and the text (in pixels)."
msgstr ""
-#: doc/classes/CheckBox.xml:63 doc/classes/CheckButton.xml:58
+#: doc/classes/CheckBox.xml:67 doc/classes/CheckButton.xml:61
msgid "The [StyleBox] to display as a background."
msgstr ""
-#: doc/classes/CheckBox.xml:66
+#: doc/classes/CheckBox.xml:70
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:69
+#: doc/classes/CheckBox.xml:73
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is checked."
msgstr ""
-#: doc/classes/CheckBox.xml:74
+#: doc/classes/CheckBox.xml:78
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is unchecked."
msgstr ""
-#: doc/classes/CheckBox.xml:79
+#: doc/classes/CheckBox.xml:83
msgid "The check icon to display when the [CheckBox] is unchecked."
msgstr ""
+#: doc/classes/CheckBox.xml:86
+msgid ""
+"The check icon to display when the [CheckBox] is unchecked and disabled."
+msgstr ""
+
#: doc/classes/CheckButton.xml:4
msgid "Checkable button. See also [CheckBox]."
msgstr ""
@@ -12850,49 +12910,56 @@ msgid "The [CheckButton] text's font color when it's disabled."
msgstr ""
#: doc/classes/CheckButton.xml:40
-msgid "The [CheckButton] text's font color when it's hovered."
+msgid ""
+"The [CheckButton] text's font color when it's focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/CheckButton.xml:43
-msgid "The [CheckButton] text's font color when it's hovered and pressed."
+msgid "The [CheckButton] text's font color when it's hovered."
msgstr ""
#: doc/classes/CheckButton.xml:46
-msgid "The [CheckButton] text's font color when it's pressed."
+msgid "The [CheckButton] text's font color when it's hovered and pressed."
msgstr ""
#: doc/classes/CheckButton.xml:49
+msgid "The [CheckButton] text's font color when it's pressed."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:52
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered."
msgstr ""
-#: doc/classes/CheckButton.xml:52
+#: doc/classes/CheckButton.xml:55
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered "
"and pressed."
msgstr ""
-#: doc/classes/CheckButton.xml:55
+#: doc/classes/CheckButton.xml:58
msgid "The separation between the toggle icon and the text (in pixels)."
msgstr ""
-#: doc/classes/CheckButton.xml:61
+#: doc/classes/CheckButton.xml:64
msgid "The icon to display when the [CheckButton] is unchecked."
msgstr ""
-#: doc/classes/CheckButton.xml:64
+#: doc/classes/CheckButton.xml:67
msgid "The icon to display when the [CheckButton] is unchecked and disabled."
msgstr ""
-#: doc/classes/CheckButton.xml:67
+#: doc/classes/CheckButton.xml:70
msgid "The icon to display when the [CheckButton] is checked."
msgstr ""
-#: doc/classes/CheckButton.xml:70
+#: doc/classes/CheckButton.xml:73
msgid "The icon to display when the [CheckButton] is checked and disabled."
msgstr ""
-#: doc/classes/CheckButton.xml:73
+#: doc/classes/CheckButton.xml:76
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is pressed."
msgstr ""
@@ -14667,26 +14734,33 @@ msgid "Text [Color] used when the [ColorPickerButton] is disabled."
msgstr ""
#: doc/classes/ColorPickerButton.xml:80
-msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
+msgid ""
+"Text [Color] used when the [ColorPickerButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/ColorPickerButton.xml:83
-msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
+msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
msgstr ""
#: doc/classes/ColorPickerButton.xml:86
-msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
+msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
msgstr ""
#: doc/classes/ColorPickerButton.xml:89
-msgid "The horizontal space between [ColorPickerButton]'s icon and text."
+msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
msgstr ""
#: doc/classes/ColorPickerButton.xml:92
-msgid "Default [StyleBox] for the [ColorPickerButton]."
+msgid "The horizontal space between [ColorPickerButton]'s icon and text."
msgstr ""
#: doc/classes/ColorPickerButton.xml:95
+msgid "Default [StyleBox] for the [ColorPickerButton]."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:98
msgid "[StyleBox] used when the [ColorPickerButton] is being pressed."
msgstr ""
@@ -19916,7 +19990,8 @@ msgid ""
"get_resource_type]. They may optionally specify some import presets that "
"affect the import process. EditorImportPlugins are responsible for creating "
"the resources and saving them in the [code].import[/code] directory (see "
-"[member ProjectSettings.application/config/project_data_dir_name]).\n"
+"[member ProjectSettings.application/config/"
+"use_hidden_project_data_directory]).\n"
"Below is an example EditorImportPlugin that imports a [Mesh] from a file "
"with the extension \".special\" or \".spec\":\n"
"[codeblock]\n"
@@ -20043,7 +20118,7 @@ msgstr ""
msgid ""
"Gets the extension used to save this resource in the [code].import[/code] "
"directory (see [member ProjectSettings.application/config/"
-"project_data_dir_name])."
+"use_hidden_project_data_directory])."
msgstr ""
#: doc/classes/EditorImportPlugin.xml:130
@@ -21078,8 +21153,11 @@ msgstr ""
msgid "Emitted when the value of the edited resource was changed."
msgstr ""
-#: doc/classes/EditorResourcePicker.xml:89
-msgid "Emitted when the resource value was set and user clicked to edit it."
+#: doc/classes/EditorResourcePicker.xml:90
+msgid ""
+"Emitted when the resource value was set and user clicked to edit it. When "
+"[code]edit[/code] is [code]true[/code], the signal was caused by the context "
+"menu \"Edit\" option."
msgstr ""
#: doc/classes/EditorResourcePreview.xml:4
@@ -24828,21 +24906,32 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html"
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -24851,14 +24940,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -24868,80 +24961,80 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
msgstr ""
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr ""
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -27689,16 +27782,18 @@ msgstr ""
#: doc/classes/Image.xml:436
msgid ""
"OpenGL texture format [code]RED[/code] with a single component and a "
-"bitdepth of 8."
+"bitdepth of 8.\n"
+"[b]Note:[/b] When using the GLES2 backend, this uses the alpha channel "
+"instead of the red channel for storage."
msgstr ""
-#: doc/classes/Image.xml:439
+#: doc/classes/Image.xml:440
msgid ""
"OpenGL texture format [code]RG[/code] with two components and a bitdepth of "
"8 for each."
msgstr ""
-#: doc/classes/Image.xml:442
+#: doc/classes/Image.xml:443
msgid ""
"OpenGL texture format [code]RGB[/code] with three components, each with a "
"bitdepth of 8.\n"
@@ -27706,7 +27801,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:446
+#: doc/classes/Image.xml:447
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 8.\n"
@@ -27714,73 +27809,73 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:450
+#: doc/classes/Image.xml:451
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 4."
msgstr ""
-#: doc/classes/Image.xml:453
+#: doc/classes/Image.xml:454
msgid ""
"OpenGL texture format [code]GL_RGB5_A1[/code] where 5 bits of depth for each "
"component of RGB and one bit for alpha."
msgstr ""
-#: doc/classes/Image.xml:456
+#: doc/classes/Image.xml:457
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 32-"
"bit floating-point value."
msgstr ""
-#: doc/classes/Image.xml:459
+#: doc/classes/Image.xml:460
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:462
+#: doc/classes/Image.xml:463
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:465
+#: doc/classes/Image.xml:466
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:468
+#: doc/classes/Image.xml:469
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 16-"
"bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:471
+#: doc/classes/Image.xml:472
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:474
+#: doc/classes/Image.xml:475
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:477
+#: doc/classes/Image.xml:478
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:480
+#: doc/classes/Image.xml:481
msgid ""
"A special OpenGL texture format where the three color components have 9 bits "
"of precision and all three share a single 5-bit exponent."
msgstr ""
-#: doc/classes/Image.xml:483
+#: doc/classes/Image.xml:484
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 1, and is the smallest variation "
@@ -27790,7 +27885,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:487
+#: doc/classes/Image.xml:488
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 2, and color data is interpreted "
@@ -27800,7 +27895,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:491
+#: doc/classes/Image.xml:492
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format also known as Block Compression 3 or BC3 that contains 64 "
@@ -27811,7 +27906,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:495
+#: doc/classes/Image.xml:496
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -27819,7 +27914,7 @@ msgid ""
"DXT5 uses for the alpha channel."
msgstr ""
-#: doc/classes/Image.xml:498
+#: doc/classes/Image.xml:499
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -27827,7 +27922,7 @@ msgid ""
"algorithm that DXT5 uses for the alpha channel."
msgstr ""
-#: doc/classes/Image.xml:501
+#: doc/classes/Image.xml:502
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned normalized "
@@ -27836,21 +27931,21 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:505
+#: doc/classes/Image.xml:506
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with signed floating-point "
"RGB components."
msgstr ""
-#: doc/classes/Image.xml:508
+#: doc/classes/Image.xml:509
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned floating-point "
"RGB components."
msgstr ""
-#: doc/classes/Image.xml:511
+#: doc/classes/Image.xml:512
msgid ""
"Texture format used on PowerVR-supported mobile platforms, uses 2-bit color "
"depth with no alpha. More information can be found [url=https://en.wikipedia."
@@ -27859,25 +27954,25 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:515
+#: doc/classes/Image.xml:516
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with an "
"alpha component."
msgstr ""
-#: doc/classes/Image.xml:518
+#: doc/classes/Image.xml:519
msgid ""
"Similar to [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with 4-"
"bit color depth and no alpha."
msgstr ""
-#: doc/classes/Image.xml:521
+#: doc/classes/Image.xml:522
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC4[/url], but with an "
"alpha component."
msgstr ""
-#: doc/classes/Image.xml:524
+#: doc/classes/Image.xml:525
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC1]Ericsson Texture Compression format 1[/"
@@ -27885,7 +27980,7 @@ msgid ""
"standard. This format cannot store an alpha channel."
msgstr ""
-#: doc/classes/Image.xml:527
+#: doc/classes/Image.xml:528
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27893,7 +27988,7 @@ msgid ""
"unsigned data."
msgstr ""
-#: doc/classes/Image.xml:530
+#: doc/classes/Image.xml:531
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27901,7 +27996,7 @@ msgid ""
"channel of signed data."
msgstr ""
-#: doc/classes/Image.xml:533
+#: doc/classes/Image.xml:534
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27909,7 +28004,7 @@ msgid ""
"of unsigned data."
msgstr ""
-#: doc/classes/Image.xml:536
+#: doc/classes/Image.xml:537
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27917,7 +28012,7 @@ msgid ""
"channels of signed data."
msgstr ""
-#: doc/classes/Image.xml:539
+#: doc/classes/Image.xml:540
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27927,7 +28022,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:543
+#: doc/classes/Image.xml:544
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27937,7 +28032,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:547
+#: doc/classes/Image.xml:548
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27948,31 +28043,31 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:551
+#: doc/classes/Image.xml:552
msgid "Represents the size of the [enum Format] enum."
msgstr ""
-#: doc/classes/Image.xml:554
+#: doc/classes/Image.xml:555
msgid ""
"Performs nearest-neighbor interpolation. If the image is resized, it will be "
"pixelated."
msgstr ""
-#: doc/classes/Image.xml:557
+#: doc/classes/Image.xml:558
msgid ""
"Performs bilinear interpolation. If the image is resized, it will be blurry. "
"This mode is faster than [constant INTERPOLATE_CUBIC], but it results in "
"lower quality."
msgstr ""
-#: doc/classes/Image.xml:560
+#: doc/classes/Image.xml:561
msgid ""
"Performs cubic interpolation. If the image is resized, it will be blurry. "
"This mode often gives better results compared to [constant "
"INTERPOLATE_BILINEAR], at the cost of being slower."
msgstr ""
-#: doc/classes/Image.xml:563
+#: doc/classes/Image.xml:564
msgid ""
"Performs bilinear separately on the two most-suited mipmap levels, then "
"linearly interpolates between them.\n"
@@ -27987,55 +28082,55 @@ msgid ""
"a new set will be generated for the resulting image."
msgstr ""
-#: doc/classes/Image.xml:570
+#: doc/classes/Image.xml:571
msgid ""
"Performs Lanczos interpolation. This is the slowest image resizing mode, but "
"it typically gives the best results, especially when downscalng images."
msgstr ""
-#: doc/classes/Image.xml:573
+#: doc/classes/Image.xml:574
msgid "Image does not have alpha."
msgstr ""
-#: doc/classes/Image.xml:576
+#: doc/classes/Image.xml:577
msgid "Image stores alpha in a single bit."
msgstr ""
-#: doc/classes/Image.xml:579
+#: doc/classes/Image.xml:580
msgid "Image uses alpha."
msgstr ""
-#: doc/classes/Image.xml:582
+#: doc/classes/Image.xml:583
msgid "Use S3TC compression."
msgstr ""
-#: doc/classes/Image.xml:585
+#: doc/classes/Image.xml:586
msgid "Use PVRTC2 compression."
msgstr ""
-#: doc/classes/Image.xml:588
+#: doc/classes/Image.xml:589
msgid "Use PVRTC4 compression."
msgstr ""
-#: doc/classes/Image.xml:591
+#: doc/classes/Image.xml:592
msgid "Use ETC compression."
msgstr ""
-#: doc/classes/Image.xml:594
+#: doc/classes/Image.xml:595
msgid "Use ETC2 compression."
msgstr ""
-#: doc/classes/Image.xml:597
+#: doc/classes/Image.xml:598
msgid ""
"Source texture (before compression) is a regular texture. Default for all "
"textures."
msgstr ""
-#: doc/classes/Image.xml:600
+#: doc/classes/Image.xml:601
msgid "Source texture (before compression) is in sRGB space."
msgstr ""
-#: doc/classes/Image.xml:603
+#: doc/classes/Image.xml:604
msgid ""
"Source texture (before compression) is a normal texture (e.g. it can be "
"compressed into two channels)."
@@ -28259,6 +28354,17 @@ msgstr ""
#: doc/classes/Input.xml:43
msgid ""
+"Sends all input events which are in the current buffer to the game loop. "
+"These events may have been buffered as a result of accumulated input "
+"([method set_use_accumulated_input]) or agile input flushing ([member "
+"ProjectSettings.input_devices/buffering/agile_event_flushing]).\n"
+"The engine will already do this itself at key execution points (at least "
+"once per frame). However, this can be useful in advanced cases where you "
+"want precise control over the timing of event handling."
+msgstr ""
+
+#: doc/classes/Input.xml:50
+msgid ""
"Returns the acceleration of the device's accelerometer sensor, if the device "
"has one. Otherwise, the method returns [constant Vector3.ZERO].\n"
"Note this method returns an empty [Vector3] when running from the editor "
@@ -28270,7 +28376,7 @@ msgid ""
"the Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:53
+#: doc/classes/Input.xml:60
msgid ""
"Returns a value between 0 and 1 representing the raw intensity of the given "
"action, ignoring the action's deadzone. In most cases, you should use "
@@ -28280,7 +28386,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:62
+#: doc/classes/Input.xml:69
msgid ""
"Returns a value between 0 and 1 representing the intensity of the given "
"action. In a joypad, for example, the further away the axis (analog sticks "
@@ -28292,7 +28398,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:71
+#: doc/classes/Input.xml:78
msgid ""
"Get axis input by specifying two actions, one negative and one positive.\n"
"This is a shorthand for writing [code]Input."
@@ -28300,17 +28406,17 @@ msgid ""
"get_action_strength(\"negative_action\")[/code]."
msgstr ""
-#: doc/classes/Input.xml:78
+#: doc/classes/Input.xml:85
msgid ""
"Returns an [Array] containing the device IDs of all currently connected "
"joypads."
msgstr ""
-#: doc/classes/Input.xml:84
+#: doc/classes/Input.xml:91
msgid "Returns the currently assigned cursor shape (see [enum CursorShape])."
msgstr ""
-#: doc/classes/Input.xml:90
+#: doc/classes/Input.xml:97
msgid ""
"Returns the gravity of the device's accelerometer sensor, if the device has "
"one. Otherwise, the method returns [constant Vector3.ZERO].\n"
@@ -28320,7 +28426,7 @@ msgid ""
"Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:97
+#: doc/classes/Input.xml:104
msgid ""
"Returns the rotation rate in rad/s around a device's X, Y, and Z axes of the "
"gyroscope sensor, if the device has one. Otherwise, the method returns "
@@ -28329,53 +28435,53 @@ msgid ""
"it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:106
+#: doc/classes/Input.xml:113
msgid ""
"Returns the current value of the joypad axis at given index (see [enum "
"JoystickList])."
msgstr ""
-#: doc/classes/Input.xml:113
+#: doc/classes/Input.xml:120
msgid "Returns the index of the provided axis name."
msgstr ""
-#: doc/classes/Input.xml:120
+#: doc/classes/Input.xml:127
msgid ""
"Receives a [enum JoystickList] axis and returns its equivalent name as a "
"string."
msgstr ""
-#: doc/classes/Input.xml:127
+#: doc/classes/Input.xml:134
msgid "Returns the index of the provided button name."
msgstr ""
-#: doc/classes/Input.xml:134
+#: doc/classes/Input.xml:141
msgid ""
"Receives a gamepad button from [enum JoystickList] and returns its "
"equivalent name as a string."
msgstr ""
-#: doc/classes/Input.xml:141
+#: doc/classes/Input.xml:148
msgid ""
"Returns a SDL2-compatible device GUID on platforms that use gamepad "
"remapping. Returns [code]\"Default Gamepad\"[/code] otherwise."
msgstr ""
-#: doc/classes/Input.xml:148
+#: doc/classes/Input.xml:155
msgid "Returns the name of the joypad at the specified device index."
msgstr ""
-#: doc/classes/Input.xml:155
+#: doc/classes/Input.xml:162
msgid "Returns the duration of the current vibration effect in seconds."
msgstr ""
-#: doc/classes/Input.xml:162
+#: doc/classes/Input.xml:169
msgid ""
"Returns the strength of the joypad vibration: x is the strength of the weak "
"motor, and y is the strength of the strong motor."
msgstr ""
-#: doc/classes/Input.xml:168
+#: doc/classes/Input.xml:175
msgid ""
"Returns the mouse speed for the last time the cursor was moved, and this "
"until the next frame where the mouse moves. This means that even if the "
@@ -28383,7 +28489,7 @@ msgid ""
"motion."
msgstr ""
-#: doc/classes/Input.xml:174
+#: doc/classes/Input.xml:181
msgid ""
"Returns the magnetic field strength in micro-Tesla for all axes of the "
"device's magnetometer sensor, if the device has one. Otherwise, the method "
@@ -28392,17 +28498,17 @@ msgid ""
"platforms, it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:181
+#: doc/classes/Input.xml:188
msgid ""
"Returns mouse buttons as a bitmask. If multiple mouse buttons are pressed at "
"the same time, the bits are added together."
msgstr ""
-#: doc/classes/Input.xml:187
+#: doc/classes/Input.xml:194
msgid "Returns the mouse mode. See the constants for more information."
msgstr ""
-#: doc/classes/Input.xml:198
+#: doc/classes/Input.xml:205
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -28415,7 +28521,7 @@ msgid ""
"want (on the range of 0 to 1)."
msgstr ""
-#: doc/classes/Input.xml:208
+#: doc/classes/Input.xml:215
msgid ""
"Returns [code]true[/code] when the user starts pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user pressed down "
@@ -28427,7 +28533,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:218
+#: doc/classes/Input.xml:225
msgid ""
"Returns [code]true[/code] when the user stops pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user released the "
@@ -28437,7 +28543,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:227
+#: doc/classes/Input.xml:234
msgid ""
"Returns [code]true[/code] if you are pressing the action event. Note that if "
"an action has multiple buttons assigned and more than one of them is "
@@ -28448,13 +28554,13 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:236
+#: doc/classes/Input.xml:243
msgid ""
"Returns [code]true[/code] if you are pressing the joypad button (see [enum "
"JoystickList])."
msgstr ""
-#: doc/classes/Input.xml:243
+#: doc/classes/Input.xml:250
msgid ""
"Returns [code]true[/code] if the system knows the specified device. This "
"means that it sets all button and axis indices exactly as defined in [enum "
@@ -28462,19 +28568,19 @@ msgid ""
"but you can still retrieve events from them."
msgstr ""
-#: doc/classes/Input.xml:250
+#: doc/classes/Input.xml:257
msgid ""
"Returns [code]true[/code] if you are pressing the key. You can pass a [enum "
"KeyList] constant."
msgstr ""
-#: doc/classes/Input.xml:257
+#: doc/classes/Input.xml:264
msgid ""
"Returns [code]true[/code] if you are pressing the mouse button specified "
"with [enum ButtonList]."
msgstr ""
-#: doc/classes/Input.xml:267
+#: doc/classes/Input.xml:274
msgid ""
"Notifies the [Input] singleton that a connection has changed, to update the "
"state for the [code]device[/code] index.\n"
@@ -28483,7 +28589,7 @@ msgid ""
"triggered internally."
msgstr ""
-#: doc/classes/Input.xml:275
+#: doc/classes/Input.xml:282
msgid ""
"Feeds an [InputEvent] to the game. Can be used to artificially trigger input "
"events from code. Also generates [method Node._input] calls.\n"
@@ -28496,12 +28602,21 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Input.xml:289
+#: doc/classes/Input.xml:296
msgid ""
"Removes all mappings from the internal database that match the given GUID."
msgstr ""
-#: doc/classes/Input.xml:298
+#: doc/classes/Input.xml:303
+msgid ""
+"Sets the acceleration value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:313
msgid ""
"Sets a custom mouse cursor image, which is only visible inside the game "
"window. The hotspot can also be specified. Passing [code]null[/code] to the "
@@ -28516,7 +28631,7 @@ msgid ""
"compression mode can't be used for custom cursors."
msgstr ""
-#: doc/classes/Input.xml:309
+#: doc/classes/Input.xml:324
msgid ""
"Sets the default cursor shape to be used in the viewport instead of "
"[constant CURSOR_ARROW].\n"
@@ -28526,11 +28641,38 @@ msgid ""
"cursor immediately."
msgstr ""
-#: doc/classes/Input.xml:318
+#: doc/classes/Input.xml:333
+msgid ""
+"Sets the gravity value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:341
+msgid ""
+"Sets the value of the rotation rate of the gyroscope sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:349
+msgid ""
+"Sets the value of the magnetic field of the magnetometer sensor. Can be used "
+"for debugging on devices without a hardware sensor, for example in an editor "
+"on a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:357
msgid "Sets the mouse mode. See the constants for more information."
msgstr ""
-#: doc/classes/Input.xml:325
+#: doc/classes/Input.xml:364
msgid ""
"Enables or disables the accumulation of similar input events sent by the "
"operating system. When input accumulation is enabled, all input events "
@@ -28544,7 +28686,7 @@ msgid ""
"results that closely follow the actual input."
msgstr ""
-#: doc/classes/Input.xml:336
+#: doc/classes/Input.xml:375
msgid ""
"Starts to vibrate the joypad. Joypads usually come with two rumble motors, a "
"strong and a weak one. [code]weak_magnitude[/code] is the strength of the "
@@ -28557,34 +28699,34 @@ msgid ""
"few seconds."
msgstr ""
-#: doc/classes/Input.xml:344
+#: doc/classes/Input.xml:383
msgid "Stops the vibration of the joypad."
msgstr ""
-#: doc/classes/Input.xml:351
+#: doc/classes/Input.xml:390
msgid ""
"Vibrate Android and iOS devices.\n"
"[b]Note:[/b] It needs [code]VIBRATE[/code] permission for Android at export "
"settings. iOS does not support duration."
msgstr ""
-#: doc/classes/Input.xml:359
+#: doc/classes/Input.xml:398
msgid "Sets the mouse position to the specified vector."
msgstr ""
-#: doc/classes/Input.xml:368
+#: doc/classes/Input.xml:407
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
-#: doc/classes/Input.xml:374
+#: doc/classes/Input.xml:413
msgid "Makes the mouse cursor visible if it is hidden."
msgstr ""
-#: doc/classes/Input.xml:377
+#: doc/classes/Input.xml:416
msgid "Makes the mouse cursor hidden if it is visible."
msgstr ""
-#: doc/classes/Input.xml:380
+#: doc/classes/Input.xml:419
msgid ""
"Captures the mouse. The mouse will be hidden and its position locked at the "
"center of the screen.\n"
@@ -28592,83 +28734,83 @@ msgid ""
"need to use [member InputEventMouseMotion.relative]."
msgstr ""
-#: doc/classes/Input.xml:384
+#: doc/classes/Input.xml:423
msgid "Makes the mouse cursor visible but confines it to the game window."
msgstr ""
-#: doc/classes/Input.xml:387
+#: doc/classes/Input.xml:426
msgid "Arrow cursor. Standard, default pointing cursor."
msgstr ""
-#: doc/classes/Input.xml:390
+#: doc/classes/Input.xml:429
msgid ""
"I-beam cursor. Usually used to show where the text cursor will appear when "
"the mouse is clicked."
msgstr ""
-#: doc/classes/Input.xml:393
+#: doc/classes/Input.xml:432
msgid ""
"Pointing hand cursor. Usually used to indicate the pointer is over a link or "
"other interactable item."
msgstr ""
-#: doc/classes/Input.xml:396
+#: doc/classes/Input.xml:435
msgid ""
"Cross cursor. Typically appears over regions in which a drawing operation "
"can be performed or for selections."
msgstr ""
-#: doc/classes/Input.xml:399
+#: doc/classes/Input.xml:438
msgid ""
"Wait cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application is still usable during the "
"operation."
msgstr ""
-#: doc/classes/Input.xml:402
+#: doc/classes/Input.xml:441
msgid ""
"Busy cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application isn't usable during the "
"operation (e.g. something is blocking its main thread)."
msgstr ""
-#: doc/classes/Input.xml:405
+#: doc/classes/Input.xml:444
msgid "Drag cursor. Usually displayed when dragging something."
msgstr ""
-#: doc/classes/Input.xml:408
+#: doc/classes/Input.xml:447
msgid ""
"Can drop cursor. Usually displayed when dragging something to indicate that "
"it can be dropped at the current position."
msgstr ""
-#: doc/classes/Input.xml:411
+#: doc/classes/Input.xml:450
msgid ""
"Forbidden cursor. Indicates that the current action is forbidden (for "
"example, when dragging something) or that the control at a position is "
"disabled."
msgstr ""
-#: doc/classes/Input.xml:414
+#: doc/classes/Input.xml:453
msgid ""
"Vertical resize mouse cursor. A double-headed vertical arrow. It tells the "
"user they can resize the window or the panel vertically."
msgstr ""
-#: doc/classes/Input.xml:417
+#: doc/classes/Input.xml:456
msgid ""
"Horizontal resize mouse cursor. A double-headed horizontal arrow. It tells "
"the user they can resize the window or the panel horizontally."
msgstr ""
-#: doc/classes/Input.xml:420
+#: doc/classes/Input.xml:459
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the bottom left to the top right. It tells the user they can resize the "
"window or the panel both horizontally and vertically."
msgstr ""
-#: doc/classes/Input.xml:423
+#: doc/classes/Input.xml:462
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the top left to the bottom right, the opposite of [constant "
@@ -28676,23 +28818,23 @@ msgid ""
"both horizontally and vertically."
msgstr ""
-#: doc/classes/Input.xml:426
+#: doc/classes/Input.xml:465
msgid "Move cursor. Indicates that something can be moved."
msgstr ""
-#: doc/classes/Input.xml:429
+#: doc/classes/Input.xml:468
msgid ""
"Vertical split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_VSIZE]."
msgstr ""
-#: doc/classes/Input.xml:432
+#: doc/classes/Input.xml:471
msgid ""
"Horizontal split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_HSIZE]."
msgstr ""
-#: doc/classes/Input.xml:435
+#: doc/classes/Input.xml:474
msgid "Help cursor. Usually a question mark."
msgstr ""
@@ -29108,7 +29250,9 @@ msgid "The drag position."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -30420,7 +30564,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30485,22 +30630,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -30515,7 +30662,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -30523,19 +30670,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -30606,7 +30753,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30664,7 +30812,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -31949,14 +32099,21 @@ msgid "Default text [Color] of the [LinkButton]."
msgstr ""
#: doc/classes/LinkButton.xml:46
-msgid "Text [Color] used when the [LinkButton] is being hovered."
+msgid ""
+"Text [Color] used when the [LinkButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/LinkButton.xml:49
-msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgid "Text [Color] used when the [LinkButton] is being hovered."
msgstr ""
#: doc/classes/LinkButton.xml:52
+msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:55
msgid "The vertical space between the baseline of text and the underline."
msgstr ""
@@ -32449,26 +32606,33 @@ msgid "Text [Color] used when the [MenuButton] is disabled."
msgstr ""
#: doc/classes/MenuButton.xml:64
-msgid "Text [Color] used when the [MenuButton] is being hovered."
+msgid ""
+"Text [Color] used when the [MenuButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/MenuButton.xml:67
-msgid "Text [Color] used when the [MenuButton] is being pressed."
+msgid "Text [Color] used when the [MenuButton] is being hovered."
msgstr ""
#: doc/classes/MenuButton.xml:70
-msgid "[StyleBox] used when the [MenuButton] is being hovered."
+msgid "Text [Color] used when the [MenuButton] is being pressed."
msgstr ""
#: doc/classes/MenuButton.xml:73
-msgid "The horizontal space between [MenuButton]'s icon and text."
+msgid "[StyleBox] used when the [MenuButton] is being hovered."
msgstr ""
#: doc/classes/MenuButton.xml:76
-msgid "Default [StyleBox] for the [MenuButton]."
+msgid "The horizontal space between [MenuButton]'s icon and text."
msgstr ""
#: doc/classes/MenuButton.xml:79
+msgid "Default [StyleBox] for the [MenuButton]."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:82
msgid "[StyleBox] used when the [MenuButton] is being pressed."
msgstr ""
@@ -34193,7 +34357,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -37077,26 +37241,33 @@ msgid "Text [Color] used when the [OptionButton] is disabled."
msgstr ""
#: doc/classes/OptionButton.xml:212
-msgid "Text [Color] used when the [OptionButton] is being hovered."
+msgid ""
+"Text [Color] used when the [OptionButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/OptionButton.xml:215
-msgid "Text [Color] used when the [OptionButton] is being pressed."
+msgid "Text [Color] used when the [OptionButton] is being hovered."
msgstr ""
#: doc/classes/OptionButton.xml:218
-msgid "[StyleBox] used when the [OptionButton] is being hovered."
+msgid "Text [Color] used when the [OptionButton] is being pressed."
msgstr ""
#: doc/classes/OptionButton.xml:221
-msgid "The horizontal space between [OptionButton]'s icon and text."
+msgid "[StyleBox] used when the [OptionButton] is being hovered."
msgstr ""
#: doc/classes/OptionButton.xml:224
-msgid "Default [StyleBox] for the [OptionButton]."
+msgid "The horizontal space between [OptionButton]'s icon and text."
msgstr ""
#: doc/classes/OptionButton.xml:227
+msgid "Default [StyleBox] for the [OptionButton]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:230
msgid "[StyleBox] used when the [OptionButton] is being pressed."
msgstr ""
@@ -37499,7 +37670,7 @@ msgstr ""
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -37529,14 +37700,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -37546,7 +37717,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -40031,17 +40202,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -40059,11 +40256,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -40258,7 +40455,9 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-msgid "Returns the [Physics2DDirectBodyState] of the body."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
@@ -41060,6 +41259,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -41077,7 +41294,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -41191,7 +41408,9 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-msgid "Returns the [PhysicsDirectBodyState] of the body."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/PhysicsServer.xml:370
@@ -42170,27 +42389,27 @@ msgstr ""
msgid "Removes an element from the array by index."
msgstr ""
-#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolColorArray.xml:66
-#: doc/classes/PoolIntArray.xml:67 doc/classes/PoolRealArray.xml:67
-#: doc/classes/PoolStringArray.xml:74 doc/classes/PoolVector2Array.xml:67
-#: doc/classes/PoolVector3Array.xml:66
+#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolIntArray.xml:67
+#: doc/classes/PoolRealArray.xml:67
msgid ""
"Sets the size of the array. If the array is grown, reserves elements at the "
"end of the array. If the array is shrunk, truncates the array to the new "
-"size."
+"size.\n"
+"[b]Note:[/b] Added elements are not automatically initialized to 0 and will "
+"contain garbage, i.e. indeterminate values."
msgstr ""
-#: doc/classes/PoolByteArray.xml:121
+#: doc/classes/PoolByteArray.xml:122
msgid "Changes the byte at the given index."
msgstr ""
-#: doc/classes/PoolByteArray.xml:127 doc/classes/PoolColorArray.xml:79
-#: doc/classes/PoolRealArray.xml:80 doc/classes/PoolStringArray.xml:87
+#: doc/classes/PoolByteArray.xml:128 doc/classes/PoolColorArray.xml:79
+#: doc/classes/PoolRealArray.xml:81 doc/classes/PoolStringArray.xml:87
#: doc/classes/PoolVector2Array.xml:80 doc/classes/PoolVector3Array.xml:79
msgid "Returns the size of the array."
msgstr ""
-#: doc/classes/PoolByteArray.xml:135
+#: doc/classes/PoolByteArray.xml:136
msgid ""
"Returns the slice of the [PoolByteArray] between indices (inclusive) as a "
"new [PoolByteArray]. Any negative index is considered to be from the end of "
@@ -42222,6 +42441,14 @@ msgstr ""
msgid "Appends a value to the array."
msgstr ""
+#: doc/classes/PoolColorArray.xml:66 doc/classes/PoolStringArray.xml:74
+#: doc/classes/PoolVector2Array.xml:67 doc/classes/PoolVector3Array.xml:66
+msgid ""
+"Sets the size of the array. If the array is grown, reserves elements at the "
+"end of the array. If the array is shrunk, truncates the array to the new "
+"size."
+msgstr ""
+
#: doc/classes/PoolColorArray.xml:73
msgid "Changes the [Color] at the given index."
msgstr ""
@@ -42258,11 +42485,11 @@ msgid ""
"valid, or at the end of the array ([code]idx == size()[/code])."
msgstr ""
-#: doc/classes/PoolIntArray.xml:74
+#: doc/classes/PoolIntArray.xml:75
msgid "Changes the int at the given index."
msgstr ""
-#: doc/classes/PoolIntArray.xml:80
+#: doc/classes/PoolIntArray.xml:81
msgid "Returns the array size."
msgstr ""
@@ -42294,7 +42521,7 @@ msgstr ""
msgid "Appends a [PoolRealArray] at the end of this array."
msgstr ""
-#: doc/classes/PoolRealArray.xml:74
+#: doc/classes/PoolRealArray.xml:75
msgid "Changes the float at the given index."
msgstr ""
@@ -43560,18 +43787,6 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:204
msgid ""
-"The project data directory is used for storing project-specific data "
-"(metadata, shader cache, etc.).\n"
-"[b]Note:[/b] Restart the application after changing this setting.\n"
-"[b]Note:[/b] Changing this value can help on platforms or with third-party "
-"tools where specific directory patterns are disallowed. Only modify this "
-"setting if you know that your environment requires it, as changing the "
-"default can impact compatibility with some external tools or plugins which "
-"expect the default [code].import[/code] folder."
-msgstr ""
-
-#: doc/classes/ProjectSettings.xml:209
-msgid ""
"Specifies a file to override project settings. For example: [code]user://"
"custom_settings.cfg[/code]. See \"Overriding\" in the [ProjectSettings] "
"class description at the top for more information.\n"
@@ -43579,7 +43794,7 @@ msgid ""
"code] will still be read to override the project settings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:213
+#: doc/classes/ProjectSettings.xml:208
msgid ""
"If [code]true[/code], the project will save user data to its own user "
"directory (see [member application/config/custom_user_dir_name]). This "
@@ -43589,13 +43804,28 @@ msgid ""
"user data directory)/Godot/app_userdata/(project name)[/code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:216
+#: doc/classes/ProjectSettings.xml:211
+msgid ""
+"If [code]true[/code], the project will use a hidden directory ([code]."
+"import[/code]) for storing project-specific data (metadata, shader cache, "
+"etc.).\n"
+"If [code]false[/code], a non-hidden directory ([code]import[/code]) will be "
+"used instead.\n"
+"[b]Note:[/b] Restart the application after changing this setting.\n"
+"[b]Note:[/b] Changing this value can help on platforms or with third-party "
+"tools where hidden directory patterns are disallowed. Only modify this "
+"setting if you know that your environment requires it, as changing the "
+"default can impact compatibility with some external tools or plugins which "
+"expect the default [code].import[/code] folder."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:217
msgid ""
"Icon set in [code].ico[/code] format used on Windows to set the game's icon. "
"This is done automatically on start by calling [method OS.set_native_icon]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:219
+#: doc/classes/ProjectSettings.xml:220
msgid ""
"Time samples for frame deltas are subject to random variation introduced by "
"the platform, even when frames are displayed at regular intervals thanks to "
@@ -43609,14 +43839,14 @@ msgid ""
"adequate to render frames at the refresh rate."
msgstr ""
-#: doc/classes/ProjectSettings.xml:224
+#: doc/classes/ProjectSettings.xml:225
msgid ""
"[b]Experimental.[/b] Shifts the measurement of delta time for each frame to "
"just after the drawing has taken place. This may lead to more consistent "
"deltas and a reduction in frame stutters."
msgstr ""
-#: doc/classes/ProjectSettings.xml:227
+#: doc/classes/ProjectSettings.xml:228
msgid ""
"If [code]true[/code], disables printing to standard error. If [code]true[/"
"code], this also hides error and warning messages printed by [method "
@@ -43625,7 +43855,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:231
+#: doc/classes/ProjectSettings.xml:232
msgid ""
"If [code]true[/code], disables printing to standard output. This is "
"equivalent to starting the editor or project with the [code]--quiet[/code] "
@@ -43633,7 +43863,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:235
+#: doc/classes/ProjectSettings.xml:236
msgid ""
"If [code]true[/code], flushes the standard output stream every time a line "
"is printed. This affects both terminal logging and file logging.\n"
@@ -43649,20 +43879,20 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:241
+#: doc/classes/ProjectSettings.xml:242
msgid ""
"Debug build override for [member application/run/flush_stdout_on_print], as "
"performance is less important during debugging.\n"
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:245
+#: doc/classes/ProjectSettings.xml:246
msgid ""
"Forces a delay between frames in the main loop (in milliseconds). This may "
"be useful if you plan to disable vertical synchronization."
msgstr ""
-#: doc/classes/ProjectSettings.xml:248
+#: doc/classes/ProjectSettings.xml:249
msgid ""
"If [code]true[/code], enables low-processor usage mode. This setting only "
"works on desktop platforms. The screen is not redrawn if nothing changes "
@@ -43670,75 +43900,81 @@ msgid ""
"useless (and can hurt performance) in most games."
msgstr ""
-#: doc/classes/ProjectSettings.xml:251
+#: doc/classes/ProjectSettings.xml:252
msgid ""
"Amount of sleeping between frames when the low-processor usage mode is "
"enabled (in microseconds). Higher values will result in lower CPU usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:254
+#: doc/classes/ProjectSettings.xml:255
msgid "Path to the main scene file that will be loaded when the project runs."
msgstr ""
-#: doc/classes/ProjectSettings.xml:257 doc/classes/ProjectSettings.xml:260
+#: doc/classes/ProjectSettings.xml:258 doc/classes/ProjectSettings.xml:261
msgid ""
"Audio buses will disable automatically when sound goes below a given dB "
"threshold for a given time. This saves CPU as effects assigned to that bus "
"will no longer do any processing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:263
+#: doc/classes/ProjectSettings.xml:264
msgid ""
"Default [AudioBusLayout] resource file to use in the project, unless "
"overridden by the scene."
msgstr ""
-#: doc/classes/ProjectSettings.xml:266
+#: doc/classes/ProjectSettings.xml:267
msgid ""
"Specifies the audio driver to use. This setting is platform-dependent as "
"each platform supports different audio drivers. If left empty, the default "
"audio driver will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:269
+#: doc/classes/ProjectSettings.xml:270
msgid ""
"If [code]true[/code], microphone input will be allowed. This requires "
"appropriate permissions to be set when exporting to Android or iOS."
msgstr ""
-#: doc/classes/ProjectSettings.xml:272
+#: doc/classes/ProjectSettings.xml:273
msgid ""
"The mixing rate used for audio (in Hz). In general, it's better to not touch "
"this and leave it to the host operating system."
msgstr ""
-#: doc/classes/ProjectSettings.xml:275
+#: doc/classes/ProjectSettings.xml:276
msgid ""
"Safer override for [member audio/mix_rate] in the Web platform. Here "
"[code]0[/code] means \"let the browser choose\" (since some browsers do not "
"like forcing the mix rate)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:278
+#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:281
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:284
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:287
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43748,7 +43984,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:290
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43758,27 +43994,27 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:293
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:296
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
-#: doc/classes/ProjectSettings.xml:299
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:302
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -43786,81 +44022,81 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:305
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:308
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:311
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:314
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:317
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr ""
-#: doc/classes/ProjectSettings.xml:320
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:323
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:326
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:329
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:332
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:335
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:338
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:341
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -43868,109 +44104,109 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:344
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:347
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:350
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:353
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:356
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:359
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:362
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:365
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:368
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:371
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:374
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:377
+#: doc/classes/ProjectSettings.xml:380
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:380
+#: doc/classes/ProjectSettings.xml:383
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:383
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:386
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:389
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:392
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:395
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:398
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -43981,91 +44217,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:403
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:406
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:409
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:412
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:415
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:418
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:421
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:424
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:427
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:430
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:433
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:436
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:439
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr ""
-#: doc/classes/ProjectSettings.xml:442
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:445
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:448
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:451
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -44074,13 +44310,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:455
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:458
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -44090,7 +44326,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:463
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -44098,19 +44334,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:468
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:472
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:476
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -44124,45 +44360,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:481
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:484
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:488
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:491
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:494
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:497
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:500
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -44171,7 +44407,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:503
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -44182,7 +44418,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:507
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -44198,14 +44434,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:515
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:518
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -44213,49 +44449,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:521
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:524
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:529
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:532
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:535
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:538
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:541
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:544
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:547
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -44264,7 +44500,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:551
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44272,7 +44508,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:555
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44280,7 +44516,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:559
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44290,7 +44526,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:563
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -44299,7 +44535,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:567
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -44308,7 +44544,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:571
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44318,7 +44554,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:575
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44326,7 +44562,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:579
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -44336,7 +44572,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:583
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -44346,7 +44582,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:587
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44354,7 +44590,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:591
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -44363,7 +44599,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:595
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44371,7 +44607,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:599
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -44383,477 +44619,477 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:605
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:608
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:611
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:614
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:617
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:620
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:623
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:626
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:629
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:632
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:635
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:638
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:641
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:644
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:647
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:650
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:653
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:656
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:659
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:662
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:665
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:668
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:671
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:674
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:677
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:680
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:683
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:686
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:689
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:692
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:695
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:698
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:701
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:704
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:707
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:710
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:713
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:716
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:719
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:722
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:725
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:728
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:731
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:734
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:737
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:740
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:743
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:746
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:749
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:752
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:755
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:758
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:761
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:764
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:767
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:770
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:773
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:776
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:779
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:782
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:785
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:788
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:791
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:794
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:797
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:800
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:803
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:806
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:809
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:812
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:815
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:818
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:821
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:824
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:827
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:830
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:833
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:836
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:839
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:842
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:845
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:848
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:851
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:854
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:857
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:860
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:863
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:866
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:869
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:872
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:875
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:878
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:881
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr ""
-#: doc/classes/ProjectSettings.xml:884
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:887
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:890
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:893
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:896
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:899
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:902
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:905
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:908
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:911
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:914
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:917
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:920
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:923
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:926
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:929
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:932
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:935
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:938
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:941
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:946
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:949
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -44861,92 +45097,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:952
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:955
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:958
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:961
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:964
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:967
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:970
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:973
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:976
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:979
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:982
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:985
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:988
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:991
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:994
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:997
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1000
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1003
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -44956,33 +45192,33 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1007
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1010
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1013
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1017
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1021
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -44995,7 +45231,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1025
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45007,7 +45243,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1033
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45019,7 +45255,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1041
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45032,7 +45268,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1045
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -45040,28 +45276,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1049
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1053
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1056
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1059
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -45071,25 +45307,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1063
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1066
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1069
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1072
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45102,7 +45338,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1076
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45114,7 +45350,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1084
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45126,7 +45362,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1092
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45139,13 +45375,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1096
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1099
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -45153,11 +45389,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1103
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1106
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -45171,7 +45407,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1112
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -45180,7 +45416,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1116
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -45196,7 +45432,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1121
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -45206,7 +45442,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1125
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45216,7 +45452,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1129
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -45227,7 +45463,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1133
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45237,7 +45473,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1137
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -45245,7 +45481,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1141
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -45256,7 +45492,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1145
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -45271,7 +45507,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1151
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -45280,13 +45516,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1156
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1159
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -45295,7 +45531,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1162
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -45305,7 +45541,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1165
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -45317,7 +45553,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1168
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -45327,24 +45563,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1171
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1174
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1177
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1180
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -45353,7 +45589,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1183
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -45361,7 +45597,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1186
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -45370,7 +45606,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1189
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -45380,7 +45616,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1193
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -45388,31 +45624,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1197
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1200
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1203
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1206
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1209
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -45420,7 +45656,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1212
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -45430,46 +45666,53 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1215
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1218
+#: doc/classes/ProjectSettings.xml:1221
+msgid ""
+"iOS specific override for [member rendering/gles2/compatibility/"
+"disable_half_float], due to poor support for half-float vertex compression "
+"on many devices."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1224
msgid ""
-"If [code]true[/code] and available on the target device, enables high "
-"floating point precision for all shader computations in GLES2.\n"
+"If [code]true[/code] and available on the target Android device, enables "
+"high floating point precision for all shader computations in GLES2.\n"
"[b]Warning:[/b] High floating point precision can be extremely slow on older "
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1225
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1228
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1231
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1234
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -45477,7 +45720,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1237
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -45487,7 +45730,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1240
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -45496,7 +45739,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1243
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -45505,20 +45748,20 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1246
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1249
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1252
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -45527,7 +45770,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1255
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -45535,7 +45778,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1258
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -45544,7 +45787,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -45554,20 +45797,20 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1267
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1274
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -45576,13 +45819,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -45592,46 +45835,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1293
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1296
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1299
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1302
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1305
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -45641,7 +45884,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -45653,7 +45896,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -45661,7 +45904,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1316
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -45669,7 +45912,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -45678,7 +45921,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1323
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -45692,7 +45935,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1328
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -45702,7 +45945,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1331
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -45711,7 +45954,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1334
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -45721,54 +45964,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1337
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1340
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1343
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1346
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1349
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1352
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1355
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1358
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -45779,61 +46022,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1365
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1368
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1371
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1374
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1377
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1380
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1383
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1386
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -45844,7 +46087,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -45853,26 +46096,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1393 doc/classes/ProjectSettings.xml:1396
#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1405
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1408
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1411
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -45883,20 +46126,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1418
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -45908,52 +46151,52 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1428
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1435
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1438
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1441
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1444
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1447
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1450
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1453
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -45961,7 +46204,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -45971,10 +46214,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -45983,10 +46226,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -45995,10 +46238,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -46007,10 +46250,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -46019,10 +46262,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -46686,40 +46929,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr ""
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -46727,14 +46984,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -49069,6 +49326,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -49086,7 +49359,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -49094,11 +49367,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -49108,19 +49381,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -54535,20 +54808,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -54559,28 +54837,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -54592,19 +54870,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
@@ -57390,26 +57668,33 @@ msgid "Text [Color] used when the [ToolButton] is disabled."
msgstr ""
#: doc/classes/ToolButton.xml:39
-msgid "Text [Color] used when the [ToolButton] is being hovered."
+msgid ""
+"Text [Color] used when the [ToolButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/ToolButton.xml:42
-msgid "Text [Color] used when the [ToolButton] is being pressed."
+msgid "Text [Color] used when the [ToolButton] is being hovered."
msgstr ""
#: doc/classes/ToolButton.xml:45
-msgid "[StyleBox] used when the [ToolButton] is being hovered."
+msgid "Text [Color] used when the [ToolButton] is being pressed."
msgstr ""
#: doc/classes/ToolButton.xml:48
-msgid "The horizontal space between [ToolButton]'s icon and text."
+msgid "[StyleBox] used when the [ToolButton] is being hovered."
msgstr ""
#: doc/classes/ToolButton.xml:51
-msgid "Default [StyleBox] for the [ToolButton]."
+msgid "The horizontal space between [ToolButton]'s icon and text."
msgstr ""
#: doc/classes/ToolButton.xml:54
+msgid "Default [StyleBox] for the [ToolButton]."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:57
msgid "[StyleBox] used when the [ToolButton] is being pressed."
msgstr ""
diff --git a/doc/translations/sv.po b/doc/translations/sv.po
new file mode 100644
index 0000000000..d201e0a1f4
--- /dev/null
+++ b/doc/translations/sv.po
@@ -0,0 +1,69464 @@
+# LANGUAGE translation of the Godot Engine class reference.
+# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur.
+# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md).
+# This file is distributed under the same license as the Godot source code.
+#
+# Christoffer Sundbom <christoffer_karlsson@live.se>, 2021.
+# Kent Jofur <kent.jofur@gmail.com>, 2021.
+msgid ""
+msgstr ""
+"Project-Id-Version: Godot Engine class reference\n"
+"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
+"PO-Revision-Date: 2021-10-31 13:40+0000\n"
+"Last-Translator: Kent Jofur <kent.jofur@gmail.com>\n"
+"Language-Team: Swedish <https://hosted.weblate.org/projects/godot-engine/"
+"godot-class-reference/sv/>\n"
+"Language: sv\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8-bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 4.9-dev\n"
+
+#: doc/tools/make_rst.py
+msgid "Description"
+msgstr "Beskrivning"
+
+#: doc/tools/make_rst.py
+msgid "Tutorials"
+msgstr "Guider"
+
+#: doc/tools/make_rst.py
+msgid "Properties"
+msgstr "Egenskaper"
+
+#: doc/tools/make_rst.py
+msgid "Methods"
+msgstr "Metoder"
+
+#: doc/tools/make_rst.py
+msgid "Theme Properties"
+msgstr "Tema Egenskaper"
+
+#: doc/tools/make_rst.py
+msgid "Signals"
+msgstr "Signaler"
+
+#: doc/tools/make_rst.py
+msgid "Enumerations"
+msgstr "Uppräkningar"
+
+#: doc/tools/make_rst.py
+msgid "Constants"
+msgstr "Konstanter"
+
+#: doc/tools/make_rst.py
+msgid "Property Descriptions"
+msgstr ""
+
+#: doc/tools/make_rst.py
+msgid "Method Descriptions"
+msgstr "Metodbeskrivning"
+
+#: modules/gdscript/doc_classes/@GDScript.xml:4
+msgid "Built-in GDScript functions."
+msgstr "Inbyggda GDScriptfunktioner."
+
+#: modules/gdscript/doc_classes/@GDScript.xml:7
+msgid ""
+"List of core built-in GDScript functions. Math functions and other "
+"utilities. Everything else is provided by objects. (Keywords: builtin, built "
+"in, global functions.)"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:19
+msgid ""
+"Returns a color constructed from integer red, green, blue, and alpha "
+"channels. Each channel should have 8 bits of information ranging from 0 to "
+"255.\n"
+"[code]r8[/code] red channel\n"
+"[code]g8[/code] green channel\n"
+"[code]b8[/code] blue channel\n"
+"[code]a8[/code] alpha channel\n"
+"[codeblock]\n"
+"red = Color8(255, 0, 0)\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:34
+msgid ""
+"Returns a color according to the standardized [code]name[/code] with "
+"[code]alpha[/code] ranging from 0 to 1.\n"
+"[codeblock]\n"
+"red = ColorN(\"red\", 1)\n"
+"[/codeblock]\n"
+"Supported color names are the same as the constants defined in [Color]."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:45
+msgid ""
+"Returns the absolute value of parameter [code]s[/code] (i.e. positive "
+"value).\n"
+"[codeblock]\n"
+"a = abs(-1) # a is 1\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:55
+msgid ""
+"Returns the arc cosine of [code]s[/code] in radians. Use to get the angle of "
+"cosine [code]s[/code]. [code]s[/code] must be between [code]-1.0[/code] and "
+"[code]1.0[/code] (inclusive), otherwise, [method acos] will return [constant "
+"NAN].\n"
+"[codeblock]\n"
+"# c is 0.523599 or 30 degrees if converted with rad2deg(s)\n"
+"c = acos(0.866025)\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:66
+msgid ""
+"Returns the arc sine of [code]s[/code] in radians. Use to get the angle of "
+"sine [code]s[/code]. [code]s[/code] must be between [code]-1.0[/code] and "
+"[code]1.0[/code] (inclusive), otherwise, [method asin] will return [constant "
+"NAN].\n"
+"[codeblock]\n"
+"# s is 0.523599 or 30 degrees if converted with rad2deg(s)\n"
+"s = asin(0.5)\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:78
+msgid ""
+"Asserts that the [code]condition[/code] is [code]true[/code]. If the "
+"[code]condition[/code] is [code]false[/code], an error is generated. When "
+"running from the editor, the running project will also be paused until you "
+"resume it. This can be used as a stronger form of [method push_error] for "
+"reporting errors to project developers or add-on users.\n"
+"[b]Note:[/b] For performance reasons, the code inside [method assert] is "
+"only executed in debug builds or when running the project from the editor. "
+"Don't include code that has side effects in an [method assert] call. "
+"Otherwise, the project will behave differently when exported in release "
+"mode.\n"
+"The optional [code]message[/code] argument, if given, is shown in addition "
+"to the generic \"Assertion failed\" message. You can use this to provide "
+"additional details about why the assertion failed.\n"
+"[codeblock]\n"
+"# Imagine we always want speed to be between 0 and 20.\n"
+"var speed = -10\n"
+"assert(speed < 20) # True, the program will continue\n"
+"assert(speed >= 0) # False, the program will stop\n"
+"assert(speed >= 0 and speed < 20) # You can also combine the two conditional "
+"statements in one check\n"
+"assert(speed < 20, \"speed = %f, but the speed limit is 20\" % speed) # Show "
+"a message with clarifying details\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:95
+msgid ""
+"Returns the arc tangent of [code]s[/code] in radians. Use it to get the "
+"angle from an angle's tangent in trigonometry: [code]atan(tan(angle)) == "
+"angle[/code].\n"
+"The method cannot know in which quadrant the angle should fall. See [method "
+"atan2] if you have both [code]y[/code] and [code]x[/code].\n"
+"[codeblock]\n"
+"a = atan(0.5) # a is 0.463648\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:107
+msgid ""
+"Returns the arc tangent of [code]y/x[/code] in radians. Use to get the angle "
+"of tangent [code]y/x[/code]. To compute the value, the method takes into "
+"account the sign of both arguments in order to determine the quadrant.\n"
+"Important note: The Y coordinate comes first, by convention.\n"
+"[codeblock]\n"
+"a = atan2(0, -1) # a is 3.141593\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:119
+msgid ""
+"Decodes a byte array back to a value. When [code]allow_objects[/code] is "
+"[code]true[/code] decoding objects is allowed.\n"
+"[b]WARNING:[/b] Deserialized object can contain code which gets executed. Do "
+"not use this option if the serialized object comes from untrusted sources to "
+"avoid potential security threats (remote code execution)."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:128
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:145
+msgid ""
+"Converts a 2D point expressed in the cartesian coordinate system (X and Y "
+"axis) to the polar coordinate system (a distance from the origin and an "
+"angle)."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:135
+msgid ""
+"Rounds [code]s[/code] upward (towards positive infinity), returning the "
+"smallest whole number that is not less than [code]s[/code].\n"
+"[codeblock]\n"
+"a = ceil(1.45) # a is 2.0\n"
+"a = ceil(1.001) # a is 2.0\n"
+"[/codeblock]\n"
+"See also [method floor], [method round], [method stepify], and [int]."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:147
+msgid ""
+"Returns a character as a String of the given Unicode code point (which is "
+"compatible with ASCII code).\n"
+"[codeblock]\n"
+"a = char(65) # a is \"A\"\n"
+"a = char(65 + 32) # a is \"a\"\n"
+"a = char(8364) # a is \"€\"\n"
+"[/codeblock]\n"
+"This is the inverse of [method ord]."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:162
+msgid ""
+"Clamps [code]value[/code] and returns a value not less than [code]min[/code] "
+"and not more than [code]max[/code].\n"
+"[codeblock]\n"
+"a = clamp(1000, 1, 20) # a is 20\n"
+"a = clamp(-10, 1, 20) # a is 1\n"
+"a = clamp(15, 1, 20) # a is 15\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:175
+msgid ""
+"Converts from a type to another in the best way possible. The [code]type[/"
+"code] parameter uses the [enum Variant.Type] values.\n"
+"[codeblock]\n"
+"a = Vector2(1, 0)\n"
+"# Prints 1\n"
+"print(a.length())\n"
+"a = convert(a, TYPE_STRING)\n"
+"# Prints 6 as \"(1, 0)\" is 6 characters\n"
+"print(a.length())\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:190
+msgid ""
+"Returns the cosine of angle [code]s[/code] in radians.\n"
+"[codeblock]\n"
+"a = cos(TAU) # a is 1.0\n"
+"a = cos(PI) # a is -1.0\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:201
+msgid ""
+"Returns the hyperbolic cosine of [code]s[/code] in radians.\n"
+"[codeblock]\n"
+"print(cosh(1)) # Prints 1.543081\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:211
+msgid "Converts from decibels to linear energy (audio)."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:218
+msgid "Deprecated alias for [method step_decimals]."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:227
+msgid ""
+"[b]Note:[/b] [code]dectime[/code] has been deprecated and will be removed in "
+"Godot 4.0, please use [method move_toward] instead.\n"
+"Returns the result of [code]value[/code] decreased by [code]step[/code] * "
+"[code]amount[/code].\n"
+"[codeblock]\n"
+"a = dectime(60, 10, 0.1)) # a is 59.0\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:238
+msgid ""
+"Converts an angle expressed in degrees to radians.\n"
+"[codeblock]\n"
+"r = deg2rad(180) # r is 3.141593\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:248
+msgid ""
+"Converts a dictionary (previously created with [method inst2dict]) back to "
+"an instance. Useful for deserializing."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:256
+msgid ""
+"Returns an \"eased\" value of [code]x[/code] based on an easing function "
+"defined with [code]curve[/code]. This easing function is based on an "
+"exponent. The [code]curve[/code] can be any floating-point number, with "
+"specific values leading to the following behaviors:\n"
+"[codeblock]\n"
+"- Lower than -1.0 (exclusive): Ease in-out\n"
+"- 1.0: Linear\n"
+"- Between -1.0 and 0.0 (exclusive): Ease out-in\n"
+"- 0.0: Constant\n"
+"- Between 0.0 to 1.0 (exclusive): Ease in\n"
+"- 1.0: Linear\n"
+"- Greater than 1.0 (exclusive): Ease out\n"
+"[/codeblock]\n"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/"
+"ease_cheatsheet.png]ease() curve values cheatsheet[/url]\n"
+"See also [method smoothstep]. If you need to perform more advanced "
+"transitions, use [Tween] or [AnimationPlayer]."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:274
+msgid ""
+"The natural exponential function. It raises the mathematical constant [b]e[/"
+"b] to the power of [code]s[/code] and returns it.\n"
+"[b]e[/b] has an approximate value of 2.71828, and can be obtained with "
+"[code]exp(1)[/code].\n"
+"For exponents to other bases use the method [method pow].\n"
+"[codeblock]\n"
+"a = exp(2) # Approximately 7.39\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:286
+msgid ""
+"Rounds [code]s[/code] downward (towards negative infinity), returning the "
+"largest whole number that is not more than [code]s[/code].\n"
+"[codeblock]\n"
+"a = floor(2.45) # a is 2.0\n"
+"a = floor(2.99) # a is 2.0\n"
+"a = floor(-2.99) # a is -3.0\n"
+"[/codeblock]\n"
+"See also [method ceil], [method round], [method stepify], and [int].\n"
+"[b]Note:[/b] This method returns a float. If you need an integer and "
+"[code]s[/code] is a non-negative number, you can use [code]int(s)[/code] "
+"directly."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:301
+msgid ""
+"Returns the floating-point remainder of [code]a/b[/code], keeping the sign "
+"of [code]a[/code].\n"
+"[codeblock]\n"
+"r = fmod(7, 5.5) # r is 1.5\n"
+"[/codeblock]\n"
+"For the integer remainder operation, use the % operator."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:313
+msgid ""
+"Returns the floating-point modulus of [code]a/b[/code] that wraps equally in "
+"positive and negative.\n"
+"[codeblock]\n"
+"for i in 7:\n"
+" var x = 0.5 * i - 1.5\n"
+" print(\"%4.1f %4.1f %4.1f\" % [x, fmod(x, 1.5), fposmod(x, 1.5)])\n"
+"[/codeblock]\n"
+"Produces:\n"
+"[codeblock]\n"
+"-1.5 -0.0 0.0\n"
+"-1.0 -1.0 0.5\n"
+"-0.5 -0.5 1.0\n"
+" 0.0 0.0 0.0\n"
+" 0.5 0.5 0.5\n"
+" 1.0 1.0 1.0\n"
+" 1.5 0.0 0.0\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:336
+msgid ""
+"Returns a reference to the specified function [code]funcname[/code] in the "
+"[code]instance[/code] node. As functions aren't first-class objects in "
+"GDscript, use [code]funcref[/code] to store a [FuncRef] in a variable and "
+"call it later.\n"
+"[codeblock]\n"
+"func foo():\n"
+" return(\"bar\")\n"
+"\n"
+"a = funcref(self, \"foo\")\n"
+"print(a.call_func()) # Prints bar\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:349
+msgid ""
+"Returns an array of dictionaries representing the current call stack.\n"
+"[codeblock]\n"
+"func _ready():\n"
+" foo()\n"
+"\n"
+"func foo():\n"
+" bar()\n"
+"\n"
+"func bar():\n"
+" print(get_stack())\n"
+"[/codeblock]\n"
+"would print\n"
+"[codeblock]\n"
+"[{function:bar, line:12, source:res://script.gd}, {function:foo, line:9, "
+"source:res://script.gd}, {function:_ready, line:6, source:res://script.gd}]\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:370
+msgid ""
+"Returns the integer hash of the variable passed.\n"
+"[codeblock]\n"
+"print(hash(\"a\")) # Prints 177670\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:380
+msgid ""
+"Returns the passed instance converted to a dictionary (useful for "
+"serializing).\n"
+"[codeblock]\n"
+"var foo = \"bar\"\n"
+"func _ready():\n"
+" var d = inst2dict(self)\n"
+" print(d.keys())\n"
+" print(d.values())\n"
+"[/codeblock]\n"
+"Prints out:\n"
+"[codeblock]\n"
+"[@subpath, @path, foo]\n"
+"[, res://test.gd, bar]\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:399
+msgid ""
+"Returns the Object that corresponds to [code]instance_id[/code]. All Objects "
+"have a unique instance ID.\n"
+"[codeblock]\n"
+"var foo = \"bar\"\n"
+"func _ready():\n"
+" var id = get_instance_id()\n"
+" var inst = instance_from_id(id)\n"
+" print(inst.foo) # Prints bar\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:415
+msgid ""
+"Returns a normalized value considering the given range. This is the opposite "
+"of [method lerp].\n"
+"[codeblock]\n"
+"var middle = lerp(20, 30, 0.75)\n"
+"# `middle` is now 27.5.\n"
+"# Now, we pretend to have forgotten the original ratio and want to get it "
+"back.\n"
+"var ratio = inverse_lerp(20, 30, 27.5)\n"
+"# `ratio` is now 0.75.\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:430
+msgid ""
+"Returns [code]true[/code] if [code]a[/code] and [code]b[/code] are "
+"approximately equal to each other.\n"
+"Here, approximately equal means that [code]a[/code] and [code]b[/code] are "
+"within a small internal epsilon of each other, which scales with the "
+"magnitude of the numbers.\n"
+"Infinity values of the same sign are considered equal."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:439
+msgid ""
+"Returns whether [code]s[/code] is an infinity value (either positive "
+"infinity or negative infinity)."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:446
+msgid ""
+"Returns whether [code]instance[/code] is a valid object (e.g. has not been "
+"deleted from memory)."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:453
+msgid ""
+"Returns whether [code]s[/code] is a NaN (\"Not a Number\" or invalid) value."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:460
+msgid ""
+"Returns [code]true[/code] if [code]s[/code] is zero or almost zero.\n"
+"This method is faster than using [method is_equal_approx] with one value as "
+"zero."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:468
+msgid ""
+"Returns length of Variant [code]var[/code]. Length is the character count of "
+"String, element count of Array, size of Dictionary, etc.\n"
+"[b]Note:[/b] Generates a fatal error if Variant can not provide a length.\n"
+"[codeblock]\n"
+"a = [1, 2, 3, 4]\n"
+"len(a) # Returns 4\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:482
+msgid ""
+"Linearly interpolates between two values by a normalized value. This is the "
+"opposite of [method inverse_lerp].\n"
+"If the [code]from[/code] and [code]to[/code] arguments are of type [int] or "
+"[float], the return value is a [float].\n"
+"If both are of the same vector type ([Vector2], [Vector3] or [Color]), the "
+"return value will be of the same type ([code]lerp[/code] then calls the "
+"vector type's [code]linear_interpolate[/code] method).\n"
+"[codeblock]\n"
+"lerp(0, 4, 0.75) # Returns 3.0\n"
+"lerp(Vector2(1, 5), Vector2(3, 2), 0.5) # Returns Vector2(2, 3.5)\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:497
+msgid ""
+"Linearly interpolates between two angles (in radians) by a normalized "
+"value.\n"
+"Similar to [method lerp], but interpolates correctly when the angles wrap "
+"around [constant @GDScript.TAU].\n"
+"[codeblock]\n"
+"extends Sprite\n"
+"var elapsed = 0.0\n"
+"func _process(delta):\n"
+" var min_angle = deg2rad(0.0)\n"
+" var max_angle = deg2rad(90.0)\n"
+" rotation = lerp_angle(min_angle, max_angle, elapsed)\n"
+" elapsed += delta\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:514
+msgid ""
+"Converts from linear energy to decibels (audio). This can be used to "
+"implement volume sliders that behave as expected (since volume isn't "
+"linear). Example:\n"
+"[codeblock]\n"
+"# \"Slider\" refers to a node that inherits Range such as HSlider or "
+"VSlider.\n"
+"# Its range must be configured to go from 0 to 1.\n"
+"# Change the bus name if you'd like to change the volume of a specific bus "
+"only.\n"
+"AudioServer.set_bus_volume_db(AudioServer.get_bus_index(\"Master\"), "
+"linear2db($Slider.value))\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:527
+msgid ""
+"Loads a resource from the filesystem located at [code]path[/code]. The "
+"resource is loaded on the method call (unless it's referenced already "
+"elsewhere, e.g. in another script or in the scene), which might cause slight "
+"delay, especially when loading scenes. To avoid unnecessary delays when "
+"loading something multiple times, either store the resource in a variable or "
+"use [method preload].\n"
+"[b]Note:[/b] Resource paths can be obtained by right-clicking on a resource "
+"in the FileSystem dock and choosing \"Copy Path\" or by dragging the file "
+"from the FileSystem dock into the script.\n"
+"[codeblock]\n"
+"# Load a scene called main located in the root of the project directory and "
+"cache it in a variable.\n"
+"var main = load(\"res://main.tscn\") # main will contain a PackedScene "
+"resource.\n"
+"[/codeblock]\n"
+"[b]Important:[/b] The path must be absolute, a local path will just return "
+"[code]null[/code].\n"
+"This method is a simplified version of [method ResourceLoader.load], which "
+"can be used for more advanced scenarios."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:541
+msgid ""
+"Natural logarithm. The amount of time needed to reach a certain level of "
+"continuous growth.\n"
+"[b]Note:[/b] This is not the same as the \"log\" function on most "
+"calculators, which uses a base 10 logarithm.\n"
+"[codeblock]\n"
+"log(10) # Returns 2.302585\n"
+"[/codeblock]\n"
+"[b]Note:[/b] The logarithm of [code]0[/code] returns [code]-inf[/code], "
+"while negative values return [code]-nan[/code]."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:554
+msgid ""
+"Returns the maximum of two values.\n"
+"[codeblock]\n"
+"max(1, 2) # Returns 2\n"
+"max(-3.99, -4) # Returns -3.99\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:566
+msgid ""
+"Returns the minimum of two values.\n"
+"[codeblock]\n"
+"min(1, 2) # Returns 1\n"
+"min(-3.99, -4) # Returns -4\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:579
+msgid ""
+"Moves [code]from[/code] toward [code]to[/code] by the [code]delta[/code] "
+"value.\n"
+"Use a negative [code]delta[/code] value to move away.\n"
+"[codeblock]\n"
+"move_toward(5, 10, 4) # Returns 9\n"
+"move_toward(10, 5, 4) # Returns 6\n"
+"move_toward(10, 5, -1.5) # Returns 11.5\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:592
+msgid ""
+"Returns the nearest equal or larger power of 2 for integer [code]value[/"
+"code].\n"
+"In other words, returns the smallest value [code]a[/code] where [code]a = "
+"pow(2, n)[/code] such that [code]value <= a[/code] for some non-negative "
+"integer [code]n[/code].\n"
+"[codeblock]\n"
+"nearest_po2(3) # Returns 4\n"
+"nearest_po2(4) # Returns 4\n"
+"nearest_po2(5) # Returns 8\n"
+"\n"
+"nearest_po2(0) # Returns 0 (this may not be what you expect)\n"
+"nearest_po2(-1) # Returns 0 (this may not be what you expect)\n"
+"[/codeblock]\n"
+"[b]WARNING:[/b] Due to the way it is implemented, this function returns "
+"[code]0[/code] rather than [code]1[/code] for non-positive values of "
+"[code]value[/code] (in reality, 1 is the smallest integer power of 2)."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:609
+msgid ""
+"Returns an integer representing the Unicode code point of the given Unicode "
+"character [code]char[/code].\n"
+"[codeblock]\n"
+"a = ord(\"A\") # a is 65\n"
+"a = ord(\"a\") # a is 97\n"
+"a = ord(\"€\") # a is 8364\n"
+"[/codeblock]\n"
+"This is the inverse of [method char]."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:622
+msgid ""
+"Parse JSON text to a Variant. (Use [method typeof] to check if the Variant's "
+"type is what you expect.)\n"
+"[b]Note:[/b] The JSON specification does not define integer or float types, "
+"but only a [i]number[/i] type. Therefore, parsing a JSON text will convert "
+"all numerical values to [float] types.\n"
+"[b]Note:[/b] JSON objects do not preserve key order like Godot dictionaries, "
+"thus, you should not rely on keys being in a certain order if a dictionary "
+"is constructed from JSON. In contrast, JSON arrays retain the order of their "
+"elements:\n"
+"[codeblock]\n"
+"var p = JSON.parse('[\"hello\", \"world\", \"!\"]')\n"
+"if typeof(p.result) == TYPE_ARRAY:\n"
+" print(p.result[0]) # Prints \"hello\"\n"
+"else:\n"
+" push_error(\"Unexpected results.\")\n"
+"[/codeblock]\n"
+"See also [JSON] for an alternative way to parse JSON text."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:640
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:142
+msgid ""
+"Converts a 2D point expressed in the polar coordinate system (a distance "
+"from the origin [code]r[/code] and an angle [code]th[/code]) to the "
+"cartesian coordinate system (X and Y axis)."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:648
+msgid ""
+"Returns the integer modulus of [code]a/b[/code] that wraps equally in "
+"positive and negative.\n"
+"[codeblock]\n"
+"for i in range(-3, 4):\n"
+" print(\"%2d %2d %2d\" % [i, i % 3, posmod(i, 3)])\n"
+"[/codeblock]\n"
+"Produces:\n"
+"[codeblock]\n"
+"-3 0 0\n"
+"-2 -2 1\n"
+"-1 -1 2\n"
+" 0 0 0\n"
+" 1 1 1\n"
+" 2 2 2\n"
+" 3 0 0\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:670
+msgid ""
+"Returns the result of [code]base[/code] raised to the power of [code]exp[/"
+"code].\n"
+"[codeblock]\n"
+"pow(2, 5) # Returns 32.0\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:680
+msgid ""
+"Returns a [Resource] from the filesystem located at [code]path[/code]. The "
+"resource is loaded during script parsing, i.e. is loaded with the script and "
+"[method preload] effectively acts as a reference to that resource. Note that "
+"the method requires a constant path. If you want to load a resource from a "
+"dynamic/variable path, use [method load].\n"
+"[b]Note:[/b] Resource paths can be obtained by right clicking on a resource "
+"in the Assets Panel and choosing \"Copy Path\" or by dragging the file from "
+"the FileSystem dock into the script.\n"
+"[codeblock]\n"
+"# Instance a scene.\n"
+"var diamond = preload(\"res://diamond.tscn\").instance()\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:691
+msgid ""
+"Converts one or more arguments of any type to string in the best way "
+"possible and prints them to the console.\n"
+"[codeblock]\n"
+"a = [1, 2, 3]\n"
+"print(\"a\", \"=\", a) # Prints a=[1, 2, 3]\n"
+"[/codeblock]\n"
+"[b]Note:[/b] Consider using [method push_error] and [method push_warning] to "
+"print error and warning messages instead of [method print]. This "
+"distinguishes them from print messages used for debugging purposes, while "
+"also displaying a stack trace when an error or warning is printed."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:702
+msgid "Like [method print], but prints only when used in debug mode."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:708
+msgid ""
+"Prints a stack track at code location, only works when running with debugger "
+"turned on.\n"
+"Output in the console would look something like this:\n"
+"[codeblock]\n"
+"Frame 0 - res://test.gd:16 in function '_process'\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:718
+msgid ""
+"Prints one or more arguments to strings in the best way possible to standard "
+"error line.\n"
+"[codeblock]\n"
+"printerr(\"prints to stderr\")\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:727
+msgid ""
+"Prints one or more arguments to strings in the best way possible to console. "
+"No newline is added at the end.\n"
+"[codeblock]\n"
+"printraw(\"A\")\n"
+"printraw(\"B\")\n"
+"# Prints AB\n"
+"[/codeblock]\n"
+"[b]Note:[/b] Due to limitations with Godot's built-in console, this only "
+"prints to the terminal. If you need to print in the editor, use another "
+"method, such as [method print]."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:739
+msgid ""
+"Prints one or more arguments to the console with a space between each "
+"argument.\n"
+"[codeblock]\n"
+"prints(\"A\", \"B\", \"C\") # Prints A B C\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:748
+msgid ""
+"Prints one or more arguments to the console with a tab between each "
+"argument.\n"
+"[codeblock]\n"
+"printt(\"A\", \"B\", \"C\") # Prints A B C\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:758
+msgid ""
+"Pushes an error message to Godot's built-in debugger and to the OS "
+"terminal.\n"
+"[codeblock]\n"
+"push_error(\"test error\") # Prints \"test error\" to debugger and terminal "
+"as error call\n"
+"[/codeblock]\n"
+"[b]Note:[/b] Errors printed this way will not pause project execution. To "
+"print an error message and pause project execution in debug builds, use "
+"[code]assert(false, \"test error\")[/code] instead."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:769
+msgid ""
+"Pushes a warning message to Godot's built-in debugger and to the OS "
+"terminal.\n"
+"[codeblock]\n"
+"push_warning(\"test warning\") # Prints \"test warning\" to debugger and "
+"terminal as warning call\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:779
+msgid ""
+"Converts an angle expressed in radians to degrees.\n"
+"[codeblock]\n"
+"rad2deg(0.523599) # Returns 30.0\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:790
+msgid ""
+"Random range, any floating point value between [code]from[/code] and "
+"[code]to[/code].\n"
+"[codeblock]\n"
+"prints(rand_range(0, 1), rand_range(0, 1)) # Prints e.g. 0.135591 0.405263\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:800
+msgid ""
+"Random from seed: pass a [code]seed[/code], and an array with both number "
+"and new seed is returned. \"Seed\" here refers to the internal state of the "
+"pseudo random number generator. The internal state of the current "
+"implementation is 64 bits."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:806
+msgid ""
+"Returns a random floating point value on the interval [code][0, 1][/code].\n"
+"[codeblock]\n"
+"randf() # Returns e.g. 0.375671\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:815
+msgid ""
+"Returns a random unsigned 32-bit integer. Use remainder to obtain a random "
+"value in the interval [code][0, N - 1][/code] (where N is smaller than "
+"2^32).\n"
+"[codeblock]\n"
+"randi() # Returns random integer between 0 and 2^32 - 1\n"
+"randi() % 20 # Returns random integer between 0 and 19\n"
+"randi() % 100 # Returns random integer between 0 and 99\n"
+"randi() % 100 + 1 # Returns random integer between 1 and 100\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:827
+msgid ""
+"Randomizes the seed (or the internal state) of the random number generator. "
+"Current implementation reseeds using a number based on time.\n"
+"[codeblock]\n"
+"func _ready():\n"
+" randomize()\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:837
+msgid ""
+"Returns an array with the given range. Range can be 1 argument [code]N[/"
+"code] (0 to [code]N[/code] - 1), two arguments ([code]initial[/code], "
+"[code]final - 1[/code]) or three arguments ([code]initial[/code], "
+"[code]final - 1[/code], [code]increment[/code]). Returns an empty array if "
+"the range isn't valid (e.g. [code]range(2, 5, -1)[/code] or [code]range(5, "
+"5, 1)[/code]).\n"
+"Returns an array with the given range. [code]range()[/code] can have 1 "
+"argument N ([code]0[/code] to [code]N - 1[/code]), two arguments "
+"([code]initial[/code], [code]final - 1[/code]) or three arguments "
+"([code]initial[/code], [code]final - 1[/code], [code]increment[/code]). "
+"[code]increment[/code] can be negative. If [code]increment[/code] is "
+"negative, [code]final - 1[/code] will become [code]final + 1[/code]. Also, "
+"the initial value must be greater than the final value for the loop to run.\n"
+"[codeblock]\n"
+"print(range(4))\n"
+"print(range(2, 5))\n"
+"print(range(0, 6, 2))\n"
+"[/codeblock]\n"
+"Output:\n"
+"[codeblock]\n"
+"[0, 1, 2, 3]\n"
+"[2, 3, 4]\n"
+"[0, 2, 4]\n"
+"[/codeblock]\n"
+"To iterate over an [Array] backwards, use:\n"
+"[codeblock]\n"
+"var array = [3, 6, 9]\n"
+"var i := array.size() - 1\n"
+"while i >= 0:\n"
+" print(array[i])\n"
+" i -= 1\n"
+"[/codeblock]\n"
+"Output:\n"
+"[codeblock]\n"
+"9\n"
+"6\n"
+"3\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:874
+msgid ""
+"Maps a [code]value[/code] from range [code][istart, istop][/code] to [code]"
+"[ostart, ostop][/code].\n"
+"[codeblock]\n"
+"range_lerp(75, 0, 100, -1, 1) # Returns 0.5\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:884
+msgid ""
+"Rounds [code]s[/code] to the nearest whole number, with halfway cases "
+"rounded away from zero.\n"
+"[codeblock]\n"
+"a = round(2.49) # a is 2.0\n"
+"a = round(2.5) # a is 3.0\n"
+"a = round(2.51) # a is 3.0\n"
+"[/codeblock]\n"
+"See also [method floor], [method ceil], [method stepify], and [int]."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:897
+msgid ""
+"Sets seed for the random number generator.\n"
+"[codeblock]\n"
+"my_seed = \"Godot Rocks\"\n"
+"seed(my_seed.hash())\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:908
+msgid ""
+"Returns the sign of [code]s[/code]: -1 or 1. Returns 0 if [code]s[/code] is "
+"0.\n"
+"[codeblock]\n"
+"sign(-6) # Returns -1\n"
+"sign(0) # Returns 0\n"
+"sign(6) # Returns 1\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:920
+msgid ""
+"Returns the sine of angle [code]s[/code] in radians.\n"
+"[codeblock]\n"
+"sin(0.523599) # Returns 0.5\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:930
+msgid ""
+"Returns the hyperbolic sine of [code]s[/code].\n"
+"[codeblock]\n"
+"a = log(2.0) # Returns 0.693147\n"
+"sinh(a) # Returns 0.75\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:943
+msgid ""
+"Returns the result of smoothly interpolating the value of [code]s[/code] "
+"between [code]0[/code] and [code]1[/code], based on the where [code]s[/code] "
+"lies with respect to the edges [code]from[/code] and [code]to[/code].\n"
+"The return value is [code]0[/code] if [code]s <= from[/code], and [code]1[/"
+"code] if [code]s >= to[/code]. If [code]s[/code] lies between [code]from[/"
+"code] and [code]to[/code], the returned value follows an S-shaped curve that "
+"maps [code]s[/code] between [code]0[/code] and [code]1[/code].\n"
+"This S-shaped curve is the cubic Hermite interpolator, given by [code]f(y) = "
+"3*y^2 - 2*y^3[/code] where [code]y = (x-from) / (to-from)[/code].\n"
+"[codeblock]\n"
+"smoothstep(0, 2, -5.0) # Returns 0.0\n"
+"smoothstep(0, 2, 0.5) # Returns 0.15625\n"
+"smoothstep(0, 2, 1.0) # Returns 0.5\n"
+"smoothstep(0, 2, 2.0) # Returns 1.0\n"
+"[/codeblock]\n"
+"Compared to [method ease] with a curve value of [code]-1.6521[/code], "
+"[method smoothstep] returns the smoothest possible curve with no sudden "
+"changes in the derivative. If you need to perform more advanced transitions, "
+"use [Tween] or [AnimationPlayer].\n"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/"
+"smoothstep_ease_comparison.png]Comparison between smoothstep() and ease(x, "
+"-1.6521) return values[/url]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:960
+msgid ""
+"Returns the square root of [code]s[/code], where [code]s[/code] is a non-"
+"negative number.\n"
+"[codeblock]\n"
+"sqrt(9) # Returns 3\n"
+"[/codeblock]\n"
+"[b]Note:[/b] Negative values of [code]s[/code] return NaN. If you need "
+"negative inputs, use [code]System.Numerics.Complex[/code] in C#."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:971
+msgid ""
+"Returns the position of the first non-zero digit, after the decimal point. "
+"Note that the maximum return value is 10, which is a design decision in the "
+"implementation.\n"
+"[codeblock]\n"
+"n = step_decimals(5) # n is 0\n"
+"n = step_decimals(1.0005) # n is 4\n"
+"n = step_decimals(0.000000005) # n is 9\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:984
+msgid ""
+"Snaps float value [code]s[/code] to a given [code]step[/code]. This can also "
+"be used to round a floating point number to an arbitrary number of "
+"decimals.\n"
+"[codeblock]\n"
+"stepify(100, 32) # Returns 96.0\n"
+"stepify(3.14159, 0.01) # Returns 3.14\n"
+"[/codeblock]\n"
+"See also [method ceil], [method floor], [method round], and [int]."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:995
+msgid ""
+"Converts one or more arguments of any type to string in the best way "
+"possible.\n"
+"[codeblock]\n"
+"var a = [10, 20, 30]\n"
+"var b = str(a);\n"
+"len(a) # Returns 3\n"
+"len(b) # Returns 12\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:1008
+msgid ""
+"Converts a formatted string that was returned by [method var2str] to the "
+"original value.\n"
+"[codeblock]\n"
+"a = '{ \"a\": 1, \"b\": 2 }'\n"
+"b = str2var(a)\n"
+"print(b[\"a\"]) # Prints 1\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:1020
+msgid ""
+"Returns the tangent of angle [code]s[/code] in radians.\n"
+"[codeblock]\n"
+"tan(deg2rad(45)) # Returns 1\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:1030
+msgid ""
+"Returns the hyperbolic tangent of [code]s[/code].\n"
+"[codeblock]\n"
+"a = log(2.0) # a is 0.693147\n"
+"b = tanh(a) # b is 0.6\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:1041
+msgid ""
+"Converts a [Variant] [code]var[/code] to JSON text and return the result. "
+"Useful for serializing data to store or send over the network.\n"
+"[codeblock]\n"
+"# Both numbers below are integers.\n"
+"a = { \"a\": 1, \"b\": 2 }\n"
+"b = to_json(a)\n"
+"print(b) # {\"a\":1, \"b\":2}\n"
+"# Both numbers above are floats, even if they display without any decimal "
+"places.\n"
+"[/codeblock]\n"
+"[b]Note:[/b] The JSON specification does not define integer or float types, "
+"but only a [i]number[/i] type. Therefore, converting a [Variant] to JSON "
+"text will convert all numerical values to [float] types.\n"
+"See also [JSON] for an alternative way to convert a [Variant] to JSON text."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:1057
+msgid ""
+"Returns whether the given class exists in [ClassDB].\n"
+"[codeblock]\n"
+"type_exists(\"Sprite\") # Returns true\n"
+"type_exists(\"Variant\") # Returns false\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:1068
+msgid ""
+"Returns the internal type of the given Variant object, using the [enum "
+"Variant.Type] values.\n"
+"[codeblock]\n"
+"p = parse_json('[\"a\", \"b\", \"c\"]')\n"
+"if typeof(p) == TYPE_ARRAY:\n"
+" print(p[0]) # Prints a\n"
+"else:\n"
+" print(\"unexpected results\")\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:1082
+msgid ""
+"Checks that [code]json[/code] is valid JSON data. Returns an empty string if "
+"valid, or an error message otherwise.\n"
+"[codeblock]\n"
+"j = to_json([1, 2, 3])\n"
+"v = validate_json(j)\n"
+"if not v:\n"
+" print(\"Valid JSON.\")\n"
+"else:\n"
+" push_error(\"Invalid JSON: \" + v)\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:1098
+msgid ""
+"Encodes a variable value to a byte array. When [code]full_objects[/code] is "
+"[code]true[/code] encoding objects is allowed (and can potentially include "
+"code)."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:1105
+msgid ""
+"Converts a Variant [code]var[/code] to a formatted string that can later be "
+"parsed using [method str2var].\n"
+"[codeblock]\n"
+"a = { \"a\": 1, \"b\": 2 }\n"
+"print(var2str(a))\n"
+"[/codeblock]\n"
+"prints\n"
+"[codeblock]\n"
+"{\n"
+"\"a\": 1,\n"
+"\"b\": 2\n"
+"}\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:1123
+msgid ""
+"Returns a weak reference to an object.\n"
+"A weak reference to an object is not enough to keep the object alive: when "
+"the only remaining references to a referent are weak references, garbage "
+"collection is free to destroy the referent and reuse its memory for "
+"something else. However, until the object is actually destroyed the weak "
+"reference may return the object even if there are no strong references to it."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:1133
+msgid ""
+"Wraps float [code]value[/code] between [code]min[/code] and [code]max[/"
+"code].\n"
+"Usable for creating loop-alike behavior or infinite surfaces.\n"
+"[codeblock]\n"
+"# Infinite loop between 5.0 and 9.9\n"
+"value = wrapf(value + 0.1, 5.0, 10.0)\n"
+"[/codeblock]\n"
+"[codeblock]\n"
+"# Infinite rotation (in radians)\n"
+"angle = wrapf(angle + 0.1, 0.0, TAU)\n"
+"[/codeblock]\n"
+"[codeblock]\n"
+"# Infinite rotation (in radians)\n"
+"angle = wrapf(angle + 0.1, -PI, PI)\n"
+"[/codeblock]\n"
+"[b]Note:[/b] If [code]min[/code] is [code]0[/code], this is equivalent to "
+"[method fposmod], so prefer using that instead.\n"
+"[code]wrapf[/code] is more flexible than using the [method fposmod] approach "
+"by giving the user control over the minimum value."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:1157
+msgid ""
+"Wraps integer [code]value[/code] between [code]min[/code] and [code]max[/"
+"code].\n"
+"Usable for creating loop-alike behavior or infinite surfaces.\n"
+"[codeblock]\n"
+"# Infinite loop between 5 and 9\n"
+"frame = wrapi(frame + 1, 5, 10)\n"
+"[/codeblock]\n"
+"[codeblock]\n"
+"# result is -2\n"
+"var result = wrapi(-6, -5, -1)\n"
+"[/codeblock]\n"
+"[b]Note:[/b] If [code]min[/code] is [code]0[/code], this is equivalent to "
+"[method posmod], so prefer using that instead.\n"
+"[code]wrapi[/code] is more flexible than using the [method posmod] approach "
+"by giving the user control over the minimum value."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:1176
+msgid ""
+"Stops the function execution and returns the current suspended state to the "
+"calling function.\n"
+"From the caller, call [method GDScriptFunctionState.resume] on the state to "
+"resume execution. This invalidates the state. Within the resumed function, "
+"[code]yield()[/code] returns whatever was passed to the [code]resume()[/"
+"code] function call.\n"
+"If passed an object and a signal, the execution is resumed when the object "
+"emits the given signal. In this case, [code]yield()[/code] returns the "
+"argument passed to [code]emit_signal()[/code] if the signal takes only one "
+"argument, or an array containing all the arguments passed to "
+"[code]emit_signal()[/code] if the signal takes multiple arguments.\n"
+"You can also use [code]yield[/code] to wait for a function to finish:\n"
+"[codeblock]\n"
+"func _ready():\n"
+" yield(countdown(), \"completed\") # waiting for the countdown() function "
+"to complete\n"
+" print('Ready')\n"
+"\n"
+"func countdown():\n"
+" yield(get_tree(), \"idle_frame\") # returns a GDScriptFunctionState "
+"object to _ready()\n"
+" print(3)\n"
+" yield(get_tree().create_timer(1.0), \"timeout\")\n"
+" print(2)\n"
+" yield(get_tree().create_timer(1.0), \"timeout\")\n"
+" print(1)\n"
+" yield(get_tree().create_timer(1.0), \"timeout\")\n"
+"\n"
+"# prints:\n"
+"# 3\n"
+"# 2\n"
+"# 1\n"
+"# Ready\n"
+"[/codeblock]\n"
+"When yielding on a function, the [code]completed[/code] signal will be "
+"emitted automatically when the function returns. It can, therefore, be used "
+"as the [code]signal[/code] parameter of the [code]yield[/code] method to "
+"resume.\n"
+"In order to yield on a function, the resulting function should also return a "
+"[code]GDScriptFunctionState[/code]. Notice [code]yield(get_tree(), "
+"\"idle_frame\")[/code] from the above example."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:1207
+msgid ""
+"Constant that represents how many times the diameter of a circle fits around "
+"its perimeter. This is equivalent to [code]TAU / 2[/code]."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:1210
+msgid ""
+"The circle constant, the circumference of the unit circle in radians. This "
+"is equivalent to [code]PI * 2[/code], or 360 degrees in rotations."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:1213
+msgid ""
+"Positive floating-point infinity. This is the result of floating-point "
+"division when the divisor is [code]0.0[/code]. For negative infinity, use "
+"[code]-INF[/code]. Dividing by [code]-0.0[/code] will result in negative "
+"infinity if the numerator is positive, so dividing by [code]0.0[/code] is "
+"not the same as dividing by [code]-0.0[/code] (despite [code]0.0 == -0.0[/"
+"code] returning [code]true[/code]).\n"
+"[b]Note:[/b] Numeric infinity is only a concept with floating-point numbers, "
+"and has no equivalent for integers. Dividing an integer number by [code]0[/"
+"code] will not result in [constant INF] and will result in a run-time error "
+"instead."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:1217
+msgid ""
+"\"Not a Number\", an invalid floating-point value. [constant NAN] has "
+"special properties, including that it is not equal to itself ([code]NAN == "
+"NAN[/code] returns [code]false[/code]). It is output by some invalid "
+"operations, such as dividing floating-point [code]0.0[/code] by [code]0.0[/"
+"code].\n"
+"[b]Note:[/b] \"Not a Number\" is only a concept with floating-point numbers, "
+"and has no equivalent for integers. Dividing an integer [code]0[/code] by "
+"[code]0[/code] will not result in [constant NAN] and will result in a run-"
+"time error instead."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:4
+msgid "Global scope constants and variables."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:7
+msgid ""
+"Global scope constants and variables. This is all that resides in the "
+"globals, constants regarding error codes, scancodes, property hints, etc.\n"
+"Singletons are also documented here, since they can be accessed from "
+"anywhere."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:16
+msgid "The [ARVRServer] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:19
+msgid "The [AudioServer] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:22
+msgid "The [CameraServer] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:25
+msgid "The [ClassDB] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:28
+msgid "The [Engine] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:31
+msgid "The [Geometry] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:34
+msgid "The [IP] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:37
+msgid "The [Input] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:40
+msgid "The [InputMap] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:43
+msgid "The [JSON] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:46
+msgid ""
+"The [JavaClassWrapper] singleton.\n"
+"[b]Note:[/b] Only implemented on Android."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:50
+msgid ""
+"The [JavaScript] singleton.\n"
+"[b]Note:[/b] Only implemented on HTML5."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:54
+msgid "The [Marshalls] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:57
+msgid "The [EditorNavigationMeshGenerator] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:60
+msgid "The [OS] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:63
+msgid "The [Performance] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:66
+msgid "The [Physics2DServer] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:69
+msgid "The [PhysicsServer] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:72
+msgid "The [ProjectSettings] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:75
+msgid "The [ResourceLoader] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:78
+msgid "The [ResourceSaver] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:81
+msgid "The [TranslationServer] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:84
+msgid "The [VisualScriptEditor] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:87
+msgid "The [VisualServer] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:92
+msgid "Left margin, usually used for [Control] or [StyleBox]-derived classes."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:95
+msgid "Top margin, usually used for [Control] or [StyleBox]-derived classes."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:98
+msgid "Right margin, usually used for [Control] or [StyleBox]-derived classes."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:101
+msgid ""
+"Bottom margin, usually used for [Control] or [StyleBox]-derived classes."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:104
+msgid "Top-left corner."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:107
+msgid "Top-right corner."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:110
+msgid "Bottom-right corner."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:113
+msgid "Bottom-left corner."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:116
+msgid ""
+"General vertical alignment, usually used for [Separator], [ScrollBar], "
+"[Slider], etc."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:119
+msgid ""
+"General horizontal alignment, usually used for [Separator], [ScrollBar], "
+"[Slider], etc."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:122
+msgid "Horizontal left alignment, usually for text-derived classes."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:125
+msgid "Horizontal center alignment, usually for text-derived classes."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:128
+msgid "Horizontal right alignment, usually for text-derived classes."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:131
+msgid "Vertical top alignment, usually for text-derived classes."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:134
+msgid "Vertical center alignment, usually for text-derived classes."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:137
+msgid "Vertical bottom alignment, usually for text-derived classes."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:140
+msgid "Scancodes with this bit applied are non-printable."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:143
+msgid "Escape key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:146
+msgid "Tab key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:149
+msgid "Shift+Tab key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:152
+msgid "Backspace key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:155
+msgid "Return key (on the main keyboard)."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:158
+msgid "Enter key on the numeric keypad."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:161
+msgid "Insert key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:164
+msgid "Delete key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:167
+msgid "Pause key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:170
+msgid "Print Screen key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:173
+msgid "System Request key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:176
+msgid "Clear key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:179
+msgid "Home key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:182
+msgid "End key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:185
+msgid "Left arrow key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:188
+msgid "Up arrow key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:191
+msgid "Right arrow key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:194
+msgid "Down arrow key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:197
+msgid "Page Up key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:200
+msgid "Page Down key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:203
+msgid "Shift key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:206
+msgid "Control key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:209
+msgid "Meta key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:212
+msgid "Alt key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:215
+msgid "Caps Lock key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:218
+msgid "Num Lock key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:221
+msgid "Scroll Lock key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:224
+msgid "F1 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:227
+msgid "F2 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:230
+msgid "F3 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:233
+msgid "F4 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:236
+msgid "F5 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:239
+msgid "F6 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:242
+msgid "F7 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:245
+msgid "F8 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:248
+msgid "F9 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:251
+msgid "F10 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:254
+msgid "F11 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:257
+msgid "F12 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:260
+msgid "F13 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:263
+msgid "F14 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:266
+msgid "F15 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:269
+msgid "F16 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:272
+msgid "Multiply (*) key on the numeric keypad."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:275
+msgid "Divide (/) key on the numeric keypad."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:278
+msgid "Subtract (-) key on the numeric keypad."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:281
+msgid "Period (.) key on the numeric keypad."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:284
+msgid "Add (+) key on the numeric keypad."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:287
+msgid "Number 0 on the numeric keypad."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:290
+msgid "Number 1 on the numeric keypad."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:293
+msgid "Number 2 on the numeric keypad."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:296
+msgid "Number 3 on the numeric keypad."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:299
+msgid "Number 4 on the numeric keypad."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:302
+msgid "Number 5 on the numeric keypad."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:305
+msgid "Number 6 on the numeric keypad."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:308
+msgid "Number 7 on the numeric keypad."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:311
+msgid "Number 8 on the numeric keypad."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:314
+msgid "Number 9 on the numeric keypad."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:317
+msgid "Left Super key (Windows key)."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:320
+msgid "Right Super key (Windows key)."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:323
+msgid "Context menu key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:326
+msgid "Left Hyper key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:329
+msgid "Right Hyper key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:332
+msgid "Help key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:335
+msgid "Left Direction key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:338
+msgid "Right Direction key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:341
+msgid ""
+"Media back key. Not to be confused with the Back button on an Android device."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:344
+msgid "Media forward key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:347 doc/classes/@GlobalScope.xml:380
+msgid "Media stop key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:350
+msgid "Media refresh key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:353
+msgid "Volume down key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:356
+msgid "Mute volume key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:359
+msgid "Volume up key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:362
+msgid "Bass Boost key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:365
+msgid "Bass up key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:368
+msgid "Bass down key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:371
+msgid "Treble up key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:374
+msgid "Treble down key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:377
+msgid "Media play key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:383
+msgid "Previous song key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:386
+msgid "Next song key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:389
+msgid "Media record key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:392
+msgid "Home page key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:395
+msgid "Favorites key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:398
+msgid "Search key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:401
+msgid "Standby key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:404
+msgid "Open URL / Launch Browser key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:407
+msgid "Launch Mail key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:410
+msgid "Launch Media key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:413
+msgid "Launch Shortcut 0 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:416
+msgid "Launch Shortcut 1 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:419
+msgid "Launch Shortcut 2 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:422
+msgid "Launch Shortcut 3 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:425
+msgid "Launch Shortcut 4 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:428
+msgid "Launch Shortcut 5 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:431
+msgid "Launch Shortcut 6 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:434
+msgid "Launch Shortcut 7 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:437
+msgid "Launch Shortcut 8 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:440
+msgid "Launch Shortcut 9 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:443
+msgid "Launch Shortcut A key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:446
+msgid "Launch Shortcut B key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:449
+msgid "Launch Shortcut C key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:452
+msgid "Launch Shortcut D key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:455
+msgid "Launch Shortcut E key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:458
+msgid "Launch Shortcut F key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:461
+msgid "Unknown key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:464
+msgid "Space key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:467
+msgid "! key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:470
+msgid "\" key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:473
+msgid "# key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:476
+msgid "$ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:479
+msgid "% key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:482
+msgid "& key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:485
+msgid "' key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:488
+msgid "( key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:491
+msgid ") key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:494
+msgid "* key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:497
+msgid "+ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:500
+msgid ", key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:503
+msgid "- key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:506
+msgid ". key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:509
+msgid "/ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:512
+msgid "Number 0."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:515
+msgid "Number 1."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:518
+msgid "Number 2."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:521
+msgid "Number 3."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:524
+msgid "Number 4."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:527
+msgid "Number 5."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:530
+msgid "Number 6."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:533
+msgid "Number 7."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:536
+msgid "Number 8."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:539
+msgid "Number 9."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:542
+msgid ": key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:545
+msgid "; key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:548
+msgid "< key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:551
+msgid "= key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:554
+msgid "> key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:557
+msgid "? key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:560
+msgid "@ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:563
+msgid "A key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:566
+msgid "B key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:569
+msgid "C key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:572
+msgid "D key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:575
+msgid "E key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:578
+msgid "F key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:581
+msgid "G key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:584
+msgid "H key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:587
+msgid "I key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:590
+msgid "J key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:593
+msgid "K key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:596
+msgid "L key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:599
+msgid "M key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:602
+msgid "N key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:605
+msgid "O key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:608
+msgid "P key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:611
+msgid "Q key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:614
+msgid "R key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:617
+msgid "S key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:620
+msgid "T key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:623
+msgid "U key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:626
+msgid "V key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:629
+msgid "W key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:632
+msgid "X key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:635
+msgid "Y key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:638
+msgid "Z key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:641
+msgid "[ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:644
+msgid "\\ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:647
+msgid "] key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:650
+msgid "^ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:653
+msgid "_ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:656
+msgid "` key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:659
+msgid "{ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:662
+msgid "| key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:665
+msgid "} key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:668
+msgid "~ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:671
+msgid "Non-breakable space key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:674
+msgid "¡ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:677
+msgid "¢ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:680
+msgid "£ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:683
+msgid "¤ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:686
+msgid "Â¥ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:689
+msgid "¦ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:692
+msgid "§ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:695
+msgid "¨ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:698
+msgid "© key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:701
+msgid "ª key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:704
+msgid "« key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:707
+msgid "¬ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:710
+msgid "Soft hyphen key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:713
+msgid "® key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:716
+msgid "¯ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:719
+msgid "° key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:722
+msgid "± key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:725
+msgid "² key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:728
+msgid "³ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:731
+msgid "´ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:734
+msgid "µ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:737
+msgid "¶ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:740
+msgid "· key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:743
+msgid "¸ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:746
+msgid "¹ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:749
+msgid "º key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:752
+msgid "» key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:755
+msgid "¼ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:758
+msgid "½ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:761
+msgid "¾ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:764
+msgid "¿ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:767
+msgid "À key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:770
+msgid "Ã key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:773
+msgid "Â key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:776
+msgid "Ã key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:779
+msgid "Ä key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:782
+msgid "Ã… key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:785
+msgid "Æ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:788
+msgid "Ç key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:791
+msgid "È key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:794
+msgid "É key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:797
+msgid "Ê key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:800
+msgid "Ë key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:803
+msgid "Ì key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:806
+msgid "Ã key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:809
+msgid "ÃŽ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:812
+msgid "Ã key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:815
+msgid "Ã key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:818
+msgid "Ñ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:821
+msgid "Ã’ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:824
+msgid "Ó key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:827
+msgid "Ô key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:830
+msgid "Õ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:833
+msgid "Ö key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:836
+msgid "× key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:839
+msgid "Ø key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:842
+msgid "Ù key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:845
+msgid "Ú key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:848
+msgid "Û key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:851
+msgid "Ü key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:854
+msgid "Ã key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:857
+msgid "Þ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:860
+msgid "ß key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:863
+msgid "÷ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:866
+msgid "ÿ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:869
+msgid "Key Code mask."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:872
+msgid "Modifier key mask."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:875
+msgid "Shift key mask."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:878
+msgid "Alt key mask."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:881
+msgid "Meta key mask."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:884
+msgid "Ctrl key mask."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:887
+msgid ""
+"Command key mask. On macOS, this is equivalent to [constant KEY_MASK_META]. "
+"On other platforms, this is equivalent to [constant KEY_MASK_CTRL]. This "
+"mask should be preferred to [constant KEY_MASK_META] or [constant "
+"KEY_MASK_CTRL] for system shortcuts as it handles all platforms correctly."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:890
+msgid "Keypad key mask."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:893
+msgid "Group Switch key mask."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:896
+msgid "Left mouse button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:899
+msgid "Right mouse button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:902
+msgid "Middle mouse button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:905
+msgid "Extra mouse button 1 (only present on some mice)."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:908
+msgid "Extra mouse button 2 (only present on some mice)."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:911
+msgid "Mouse wheel up."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:914
+msgid "Mouse wheel down."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:917
+msgid "Mouse wheel left button (only present on some mice)."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:920
+msgid "Mouse wheel right button (only present on some mice)."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:923
+msgid "Left mouse button mask."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:926
+msgid "Right mouse button mask."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:929
+msgid "Middle mouse button mask."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:932
+msgid "Extra mouse button 1 mask."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:935
+msgid "Extra mouse button 2 mask."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:938
+msgid "Invalid button or axis."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:941
+msgid "Gamepad button 0."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:944
+msgid "Gamepad button 1."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:947
+msgid "Gamepad button 2."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:950
+msgid "Gamepad button 3."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:953
+msgid "Gamepad button 4."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:956
+msgid "Gamepad button 5."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:959
+msgid "Gamepad button 6."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:962
+msgid "Gamepad button 7."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:965
+msgid "Gamepad button 8."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:968
+msgid "Gamepad button 9."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:971
+msgid "Gamepad button 10."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:974
+msgid "Gamepad button 11."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:977
+msgid "Gamepad button 12."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:980
+msgid "Gamepad button 13."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:983
+msgid "Gamepad button 14."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:986
+msgid "Gamepad button 15."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:989
+msgid "Gamepad button 16."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:992
+msgid "Gamepad button 17."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:995
+msgid "Gamepad button 18."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:998
+msgid "Gamepad button 19."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1001
+msgid "Gamepad button 20."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1004
+msgid "Gamepad button 21."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1007
+msgid "Gamepad button 22."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1010
+msgid "Represents the maximum number of joystick buttons supported."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1013
+msgid "DualShock circle button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1016
+msgid "DualShock X button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1019
+msgid "DualShock square button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1022
+msgid "DualShock triangle button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1025
+msgid "Xbox controller B button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1028
+msgid "Xbox controller A button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1031
+msgid "Xbox controller X button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1034
+msgid "Xbox controller Y button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1037
+msgid "Nintendo controller A button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1040
+msgid "Nintendo controller B button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1043
+msgid "Nintendo controller X button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1046
+msgid "Nintendo controller Y button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1049
+msgid "Grip (side) buttons on a VR controller."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1052
+msgid "Push down on the touchpad or main joystick on a VR controller."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1055
+msgid "Trigger on a VR controller."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1058
+msgid ""
+"A button on the right Oculus Touch controller, X button on the left "
+"controller (also when used in OpenVR)."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1061
+msgid ""
+"B button on the right Oculus Touch controller, Y button on the left "
+"controller (also when used in OpenVR)."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1064
+msgid "Menu button on either Oculus Touch controller."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1067
+msgid "Menu button in OpenVR (Except when Oculus Touch controllers are used)."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1070
+msgid "Gamepad button Select."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1073
+msgid "Gamepad button Start."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1076
+msgid "Gamepad DPad up."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1079
+msgid "Gamepad DPad down."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1082
+msgid "Gamepad DPad left."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1085
+msgid "Gamepad DPad right."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1088
+msgid "Gamepad SDL guide button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1091
+msgid "Gamepad SDL miscellaneous button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1094
+msgid "Gamepad SDL paddle 1 button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1097
+msgid "Gamepad SDL paddle 2 button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1100
+msgid "Gamepad SDL paddle 3 button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1103
+msgid "Gamepad SDL paddle 4 button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1106
+msgid "Gamepad SDL touchpad button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1109
+msgid "Gamepad left Shoulder button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1112
+msgid "Gamepad left trigger."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1115
+msgid "Gamepad left stick click."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1118
+msgid "Gamepad right Shoulder button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1121
+msgid "Gamepad right trigger."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1124
+msgid "Gamepad right stick click."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1127 doc/classes/@GlobalScope.xml:1160
+msgid "Gamepad left stick horizontal axis."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1130 doc/classes/@GlobalScope.xml:1163
+msgid "Gamepad left stick vertical axis."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1133 doc/classes/@GlobalScope.xml:1166
+msgid "Gamepad right stick horizontal axis."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1136 doc/classes/@GlobalScope.xml:1169
+msgid "Gamepad right stick vertical axis."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1139
+msgid "Generic gamepad axis 4."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1142
+msgid "Generic gamepad axis 5."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1145
+msgid "Gamepad left trigger analog axis."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1148
+msgid "Gamepad right trigger analog axis."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1151
+msgid "Generic gamepad axis 8."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1154
+msgid "Generic gamepad axis 9."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1157
+msgid "Represents the maximum number of joystick axes supported."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1172
+msgid "Gamepad left analog trigger."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1175
+msgid "Gamepad right analog trigger."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1178
+msgid "VR Controller analog trigger."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1181
+msgid "VR Controller analog grip (side buttons)."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1184
+msgid ""
+"OpenVR touchpad X axis (Joystick axis on Oculus Touch and Windows MR "
+"controllers)."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1187
+msgid ""
+"OpenVR touchpad Y axis (Joystick axis on Oculus Touch and Windows MR "
+"controllers)."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1190
+msgid "MIDI note OFF message."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1193
+msgid "MIDI note ON message."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1196
+msgid "MIDI aftertouch message."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1199
+msgid "MIDI control change message."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1202
+msgid "MIDI program change message."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1205
+msgid "MIDI channel pressure message."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1208
+msgid "MIDI pitch bend message."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1211
+msgid ""
+"Methods that return [enum Error] return [constant OK] when no error "
+"occurred. Note that many functions don't return an error code but will print "
+"error messages to standard output.\n"
+"Since [constant OK] has value 0, and all other failure codes are positive "
+"integers, it can also be used in boolean checks, e.g.:\n"
+"[codeblock]\n"
+"var err = method_that_returns_error()\n"
+"if err != OK:\n"
+" print(\"Failure!\")\n"
+"# Or, equivalent:\n"
+"if err:\n"
+" print(\"Still failing!\")\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1223
+msgid "Generic error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1226
+msgid "Unavailable error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1229
+msgid "Unconfigured error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1232
+msgid "Unauthorized error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1235
+msgid "Parameter range error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1238
+msgid "Out of memory (OOM) error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1241
+msgid "File: Not found error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1244
+msgid "File: Bad drive error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1247
+msgid "File: Bad path error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1250
+msgid "File: No permission error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1253
+msgid "File: Already in use error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1256
+msgid "File: Can't open error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1259
+msgid "File: Can't write error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1262
+msgid "File: Can't read error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1265
+msgid "File: Unrecognized error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1268
+msgid "File: Corrupt error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1271
+msgid "File: Missing dependencies error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1274
+msgid "File: End of file (EOF) error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1277
+msgid "Can't open error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1280
+msgid "Can't create error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1283
+msgid "Query failed error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1286
+msgid "Already in use error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1289
+msgid "Locked error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1292
+msgid "Timeout error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1295
+msgid "Can't connect error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1298
+msgid "Can't resolve error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1301
+msgid "Connection error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1304
+msgid "Can't acquire resource error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1307
+msgid "Can't fork process error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1310
+msgid "Invalid data error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1313
+msgid "Invalid parameter error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1316
+msgid "Already exists error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1319
+msgid "Does not exist error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1322
+msgid "Database: Read error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1325
+msgid "Database: Write error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1328
+msgid "Compilation failed error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1331
+msgid "Method not found error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1334
+msgid "Linking failed error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1337
+msgid "Script failed error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1340
+msgid "Cycling link (import cycle) error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1343
+msgid "Invalid declaration error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1346
+msgid "Duplicate symbol error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1349
+msgid "Parse error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1352
+msgid "Busy error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1355
+msgid "Skip error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1358
+msgid "Help error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1361
+msgid "Bug error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1364
+msgid ""
+"Printer on fire error. (This is an easter egg, no engine methods return this "
+"error code.)"
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1367
+msgid "No hint for the edited property."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1370
+msgid ""
+"Hints that an integer or float property should be within a range specified "
+"via the hint string [code]\"min,max\"[/code] or [code]\"min,max,step\"[/"
+"code]. The hint string can optionally include [code]\"or_greater\"[/code] "
+"and/or [code]\"or_lesser\"[/code] to allow manual input going respectively "
+"above the max or below the min values. Example: [code]\"-360,360,1,"
+"or_greater,or_lesser\"[/code]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1373
+msgid ""
+"Hints that a float property should be within an exponential range specified "
+"via the hint string [code]\"min,max\"[/code] or [code]\"min,max,step\"[/"
+"code]. The hint string can optionally include [code]\"or_greater\"[/code] "
+"and/or [code]\"or_lesser\"[/code] to allow manual input going respectively "
+"above the max or below the min values. Example: [code]\"0.01,100,0.01,"
+"or_greater\"[/code]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1376
+msgid ""
+"Hints that an integer, float or string property is an enumerated value to "
+"pick in a list specified via a hint string such as [code]\"Hello,Something,"
+"Else\"[/code]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1379
+msgid ""
+"Hints that a float property should be edited via an exponential easing "
+"function. The hint string can include [code]\"attenuation\"[/code] to flip "
+"the curve horizontally and/or [code]\"inout\"[/code] to also include in/out "
+"easing."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1382 doc/classes/@GlobalScope.xml:1385
+msgid "Deprecated hint, unused."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1388
+msgid ""
+"Hints that an integer property is a bitmask with named bit flags. For "
+"example, to allow toggling bits 0, 1, 2 and 4, the hint could be something "
+"like [code]\"Bit0,Bit1,Bit2,,Bit4\"[/code]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1391
+msgid ""
+"Hints that an integer property is a bitmask using the optionally named 2D "
+"render layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1394
+msgid ""
+"Hints that an integer property is a bitmask using the optionally named 2D "
+"physics layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1397
+msgid ""
+"Hints that an integer property is a bitmask using the optionally named 3D "
+"render layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1400
+msgid ""
+"Hints that an integer property is a bitmask using the optionally named 3D "
+"physics layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1403
+msgid ""
+"Hints that a string property is a path to a file. Editing it will show a "
+"file dialog for picking the path. The hint string can be a set of filters "
+"with wildcards like [code]\"*.png,*.jpg\"[/code]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1406
+msgid ""
+"Hints that a string property is a path to a directory. Editing it will show "
+"a file dialog for picking the path."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1409
+msgid ""
+"Hints that a string property is an absolute path to a file outside the "
+"project folder. Editing it will show a file dialog for picking the path. The "
+"hint string can be a set of filters with wildcards like [code]\"*.png,*.jpg"
+"\"[/code]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1412
+msgid ""
+"Hints that a string property is an absolute path to a directory outside the "
+"project folder. Editing it will show a file dialog for picking the path."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1415
+msgid ""
+"Hints that a property is an instance of a [Resource]-derived type, "
+"optionally specified via the hint string (e.g. [code]\"Texture\"[/code]). "
+"Editing it will show a popup menu of valid resource types to instantiate."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1418
+msgid ""
+"Hints that a string property is text with line breaks. Editing it will show "
+"a text input field where line breaks can be typed."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1421
+msgid ""
+"Hints that a string property should have a placeholder text visible on its "
+"input field, whenever the property is empty. The hint string is the "
+"placeholder text to use."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1424
+msgid ""
+"Hints that a color property should be edited without changing its alpha "
+"component, i.e. only R, G and B channels are edited."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1427
+msgid "Hints that an image is compressed using lossy compression."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1430
+msgid "Hints that an image is compressed using lossless compression."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1433
+msgid "The property is serialized and saved in the scene file (default)."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1436
+msgid "The property is shown in the editor inspector (default)."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1439 doc/classes/@GlobalScope.xml:1442
+msgid "Deprecated usage flag, unused."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1445
+msgid "The property can be checked in the editor inspector."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1448
+msgid "The property is checked in the editor inspector."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1451
+msgid "The property is a translatable string."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1454
+msgid "Used to group properties together in the editor."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1457
+msgid "Used to categorize properties together in the editor."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1460
+msgid "The property does not save its state in [PackedScene]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1463
+msgid "Editing the property prompts the user for restarting the editor."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1466
+msgid ""
+"The property is a script variable which should be serialized and saved in "
+"the scene file."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1469
+msgid "Default usage (storage, editor and network)."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1472
+msgid ""
+"Default usage for translatable strings (storage, editor, network and "
+"internationalized)."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1475
+msgid ""
+"Default usage but without showing the property in the editor (storage, "
+"network)."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1478
+msgid "Flag for a normal method."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1481
+msgid "Flag for an editor method."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1484 doc/classes/@GlobalScope.xml:1490
+#: doc/classes/@GlobalScope.xml:1496
+msgid "Deprecated method flag, unused."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1487
+msgid "Flag for a constant method."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1493
+msgid "Flag for a virtual method."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1499
+msgid "Default method flags."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1502
+msgid "Variable is [code]null[/code]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1505
+msgid "Variable is of type [bool]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1508
+msgid "Variable is of type [int]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1511
+msgid "Variable is of type [float] (real)."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1514
+msgid "Variable is of type [String]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1517
+msgid "Variable is of type [Vector2]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1520
+msgid "Variable is of type [Rect2]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1523
+msgid "Variable is of type [Vector3]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1526
+msgid "Variable is of type [Transform2D]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1529
+msgid "Variable is of type [Plane]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1532
+msgid "Variable is of type [Quat]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1535
+msgid "Variable is of type [AABB]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1538
+msgid "Variable is of type [Basis]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1541
+msgid "Variable is of type [Transform]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1544
+msgid "Variable is of type [Color]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1547
+msgid "Variable is of type [NodePath]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1550
+msgid "Variable is of type [RID]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1553
+msgid "Variable is of type [Object]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1556
+msgid "Variable is of type [Dictionary]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1559
+msgid "Variable is of type [Array]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1562
+msgid "Variable is of type [PoolByteArray]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1565
+msgid "Variable is of type [PoolIntArray]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1568
+msgid "Variable is of type [PoolRealArray]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1571
+msgid "Variable is of type [PoolStringArray]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1574
+msgid "Variable is of type [PoolVector2Array]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1577
+msgid "Variable is of type [PoolVector3Array]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1580
+msgid "Variable is of type [PoolColorArray]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1583
+msgid "Represents the size of the [enum Variant.Type] enum."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1586
+msgid "Equality operator ([code]==[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1589
+msgid "Inequality operator ([code]!=[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1592
+msgid "Less than operator ([code]<[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1595
+msgid "Less than or equal operator ([code]<=[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1598
+msgid "Greater than operator ([code]>[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1601
+msgid "Greater than or equal operator ([code]>=[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1604
+msgid "Addition operator ([code]+[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1607
+msgid "Subtraction operator ([code]-[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1610
+msgid "Multiplication operator ([code]*[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1613
+msgid "Division operator ([code]/[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1616
+msgid "Unary negation operator ([code]-[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1619
+msgid "Unary plus operator ([code]+[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1622
+msgid "Remainder/modulo operator ([code]%[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1625
+msgid "String concatenation operator ([code]+[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1628
+msgid "Left shift operator ([code]<<[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1631
+msgid "Right shift operator ([code]>>[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1634
+msgid "Bitwise AND operator ([code]&[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1637
+msgid "Bitwise OR operator ([code]|[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1640
+msgid "Bitwise XOR operator ([code]^[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1643
+msgid "Bitwise NOT operator ([code]~[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1646
+msgid "Logical AND operator ([code]and[/code] or [code]&&[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1649
+msgid "Logical OR operator ([code]or[/code] or [code]||[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1652
+msgid "Logical XOR operator (not implemented in GDScript)."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1655
+msgid "Logical NOT operator ([code]not[/code] or [code]![/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1658
+msgid "Logical IN operator ([code]in[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1661
+msgid "Represents the size of the [enum Variant.Operator] enum."
+msgstr ""
+
+#: doc/classes/AABB.xml:4
+msgid "Axis-Aligned Bounding Box."
+msgstr ""
+
+#: doc/classes/AABB.xml:7
+msgid ""
+"[AABB] consists of a position, a size, and several utility functions. It is "
+"typically used for fast overlap tests.\n"
+"It uses floating-point coordinates. The 2D counterpart to [AABB] is "
+"[Rect2].\n"
+"[b]Note:[/b] Unlike [Rect2], [AABB] does not have a variant that uses "
+"integer coordinates."
+msgstr ""
+
+#: doc/classes/AABB.xml:12 doc/classes/Basis.xml:13 doc/classes/Plane.xml:10
+#: doc/classes/Rect2.xml:12 doc/classes/Transform.xml:11
+#: doc/classes/Transform2D.xml:11 doc/classes/Vector2.xml:11
+#: doc/classes/Vector3.xml:11
+msgid "https://docs.godotengine.org/en/3.4/tutorials/math/index.html"
+msgstr ""
+
+#: doc/classes/AABB.xml:13 doc/classes/Rect2.xml:13 doc/classes/Vector2.xml:12
+#: doc/classes/Vector3.xml:12
+msgid "https://docs.godotengine.org/en/3.4/tutorials/math/vector_math.html"
+msgstr ""
+
+#: doc/classes/AABB.xml:14 doc/classes/Rect2.xml:14 doc/classes/Vector2.xml:13
+#: doc/classes/Vector3.xml:13
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/math/vectors_advanced.html"
+msgstr ""
+
+#: doc/classes/AABB.xml:22
+msgid "Constructs an [AABB] from a position and size."
+msgstr ""
+
+#: doc/classes/AABB.xml:28
+msgid ""
+"Returns an AABB with equivalent position and size, modified so that the most-"
+"negative corner is the origin and the size is positive."
+msgstr ""
+
+#: doc/classes/AABB.xml:35
+msgid ""
+"Returns [code]true[/code] if this [AABB] completely encloses another one."
+msgstr ""
+
+#: doc/classes/AABB.xml:42
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/AABB.xml:55
+msgid "Returns the volume of the [AABB]."
+msgstr ""
+
+#: doc/classes/AABB.xml:62
+msgid "Gets the position of the 8 endpoints of the [AABB] in space."
+msgstr ""
+
+#: doc/classes/AABB.xml:68
+msgid "Returns the normalized longest axis of the [AABB]."
+msgstr ""
+
+#: doc/classes/AABB.xml:74
+msgid ""
+"Returns the index of the longest axis of the [AABB] (according to "
+"[Vector3]'s [code]AXIS_*[/code] constants)."
+msgstr ""
+
+#: doc/classes/AABB.xml:80
+msgid "Returns the scalar length of the longest axis of the [AABB]."
+msgstr ""
+
+#: doc/classes/AABB.xml:86
+msgid "Returns the normalized shortest axis of the [AABB]."
+msgstr ""
+
+#: doc/classes/AABB.xml:92
+msgid ""
+"Returns the index of the shortest axis of the [AABB] (according to "
+"[Vector3]::AXIS* enum)."
+msgstr ""
+
+#: doc/classes/AABB.xml:98
+msgid "Returns the scalar length of the shortest axis of the [AABB]."
+msgstr ""
+
+#: doc/classes/AABB.xml:105
+msgid ""
+"Returns the support point in a given direction. This is useful for collision "
+"detection algorithms."
+msgstr ""
+
+#: doc/classes/AABB.xml:112
+msgid ""
+"Returns a copy of the [AABB] grown a given amount of units towards all the "
+"sides."
+msgstr ""
+
+#: doc/classes/AABB.xml:118
+msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
+msgstr ""
+
+#: doc/classes/AABB.xml:124
+msgid "Returns [code]true[/code] if the [AABB] is empty."
+msgstr ""
+
+#: doc/classes/AABB.xml:131
+msgid "Returns [code]true[/code] if the [AABB] contains a point."
+msgstr ""
+
+#: doc/classes/AABB.xml:138
+msgid ""
+"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
+"returned on failure."
+msgstr ""
+
+#: doc/classes/AABB.xml:145
+msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
+msgstr ""
+
+#: doc/classes/AABB.xml:152
+msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
+msgstr ""
+
+#: doc/classes/AABB.xml:160
+msgid ""
+"Returns [code]true[/code] if the [AABB] intersects the line segment between "
+"[code]from[/code] and [code]to[/code]."
+msgstr ""
+
+#: doc/classes/AABB.xml:167
+msgid ""
+"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
+"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
+"component."
+msgstr ""
+
+#: doc/classes/AABB.xml:174
+msgid ""
+"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
+msgstr ""
+
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
+msgid ""
+"Ending corner. This is calculated as [code]position + size[/code]. Setting "
+"this value will change the size."
+msgstr ""
+
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
+msgid "Beginning corner. Typically has values lower than [member end]."
+msgstr ""
+
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
+msgid ""
+"Size from [member position] to [member end]. Typically, all components are "
+"positive.\n"
+"If the size is negative, you can use [method abs] to fix it."
+msgstr ""
+
+#: doc/classes/AcceptDialog.xml:4
+msgid "Base dialog for user notification."
+msgstr ""
+
+#: doc/classes/AcceptDialog.xml:7
+msgid ""
+"This dialog is useful for small notifications to the user about an event. It "
+"can only be accepted or closed, with the same result."
+msgstr ""
+
+#: doc/classes/AcceptDialog.xml:18
+msgid ""
+"Adds a button with label [code]text[/code] and a custom [code]action[/code] "
+"to the dialog and returns the created button. [code]action[/code] will be "
+"passed to the [signal custom_action] signal when pressed.\n"
+"If [code]true[/code], [code]right[/code] will place the button to the right "
+"of any sibling buttons.\n"
+"You can use [method remove_button] method to remove a button created with "
+"this method from the dialog."
+msgstr ""
+
+#: doc/classes/AcceptDialog.xml:27
+msgid ""
+"Adds a button with label [code]name[/code] and a cancel action to the dialog "
+"and returns the created button.\n"
+"You can use [method remove_button] method to remove a button created with "
+"this method from the dialog."
+msgstr ""
+
+#: doc/classes/AcceptDialog.xml:34
+msgid ""
+"Returns the label used for built-in text.\n"
+"[b]Warning:[/b] This is a required internal node, removing and freeing it "
+"may cause a crash. If you wish to hide it or any of its children, use their "
+"[member CanvasItem.visible] property."
+msgstr ""
+
+#: doc/classes/AcceptDialog.xml:41
+msgid ""
+"Returns the OK [Button] instance.\n"
+"[b]Warning:[/b] This is a required internal node, removing and freeing it "
+"may cause a crash. If you wish to hide it or any of its children, use their "
+"[member CanvasItem.visible] property."
+msgstr ""
+
+#: doc/classes/AcceptDialog.xml:49
+msgid ""
+"Registers a [LineEdit] in the dialog. When the enter key is pressed, the "
+"dialog will be accepted."
+msgstr ""
+
+#: doc/classes/AcceptDialog.xml:56
+msgid ""
+"Removes the [code]button[/code] from the dialog. Does NOT free the "
+"[code]button[/code]. The [code]button[/code] must be a [Button] added with "
+"[method add_button] or [method add_cancel] method. After removal, pressing "
+"the [code]button[/code] will no longer emit this dialog's [signal "
+"custom_action] signal or cancel this dialog."
+msgstr ""
+
+#: doc/classes/AcceptDialog.xml:62
+msgid "Sets autowrapping for the text in the dialog."
+msgstr ""
+
+#: doc/classes/AcceptDialog.xml:65
+msgid ""
+"If [code]true[/code], the dialog is hidden when the OK button is pressed. "
+"You can set it to [code]false[/code] if you want to do e.g. input validation "
+"when receiving the [signal confirmed] signal, and handle hiding the dialog "
+"in your own logic.\n"
+"[b]Note:[/b] Some nodes derived from this class can have a different default "
+"value, and potentially their own built-in logic overriding this setting. For "
+"example [FileDialog] defaults to [code]false[/code], and has its own input "
+"validation code that is called when you press OK, which eventually hides the "
+"dialog if the input is valid. As such, this property can't be used in "
+"[FileDialog] to disable hiding the dialog when pressing OK."
+msgstr ""
+
+#: doc/classes/AcceptDialog.xml:69
+msgid "The text displayed by the dialog."
+msgstr ""
+
+#: doc/classes/AcceptDialog.xml:76
+msgid "Emitted when the dialog is accepted, i.e. the OK button is pressed."
+msgstr ""
+
+#: doc/classes/AcceptDialog.xml:82
+msgid "Emitted when a custom button is pressed. See [method add_button]."
+msgstr ""
+
+#: doc/classes/AESContext.xml:4
+msgid "Interface to low level AES encryption features."
+msgstr ""
+
+#: doc/classes/AESContext.xml:7
+msgid ""
+"This class provides access to AES encryption/decryption of raw data. Both "
+"AES-ECB and AES-CBC mode are supported.\n"
+"[codeblock]\n"
+"extends Node\n"
+"\n"
+"var aes = AESContext.new()\n"
+"\n"
+"func _ready():\n"
+" var key = \"My secret key!!!\" # Key must be either 16 or 32 bytes.\n"
+" var data = \"My secret text!!\" # Data size must be multiple of 16 "
+"bytes, apply padding if needed.\n"
+" # Encrypt ECB\n"
+" aes.start(AESContext.MODE_ECB_ENCRYPT, key.to_utf8())\n"
+" var encrypted = aes.update(data.to_utf8())\n"
+" aes.finish()\n"
+" # Decrypt ECB\n"
+" aes.start(AESContext.MODE_ECB_DECRYPT, key.to_utf8())\n"
+" var decrypted = aes.update(encrypted)\n"
+" aes.finish()\n"
+" # Check ECB\n"
+" assert(decrypted == data.to_utf8())\n"
+"\n"
+" var iv = \"My secret iv!!!!\" # IV must be of exactly 16 bytes.\n"
+" # Encrypt CBC\n"
+" aes.start(AESContext.MODE_CBC_ENCRYPT, key.to_utf8(), iv.to_utf8())\n"
+" encrypted = aes.update(data.to_utf8())\n"
+" aes.finish()\n"
+" # Decrypt CBC\n"
+" aes.start(AESContext.MODE_CBC_DECRYPT, key.to_utf8(), iv.to_utf8())\n"
+" decrypted = aes.update(encrypted)\n"
+" aes.finish()\n"
+" # Check CBC\n"
+" assert(decrypted == data.to_utf8())\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/AESContext.xml:46
+msgid "Close this AES context so it can be started again. See [method start]."
+msgstr ""
+
+#: doc/classes/AESContext.xml:52
+msgid ""
+"Get the current IV state for this context (IV gets updated when calling "
+"[method update]). You normally don't need this function.\n"
+"[b]Note:[/b] This function only makes sense when the context is started with "
+"[constant MODE_CBC_ENCRYPT] or [constant MODE_CBC_DECRYPT]."
+msgstr ""
+
+#: doc/classes/AESContext.xml:62
+msgid ""
+"Start the AES context in the given [code]mode[/code]. A [code]key[/code] of "
+"either 16 or 32 bytes must always be provided, while an [code]iv[/code] "
+"(initialization vector) of exactly 16 bytes, is only needed when [code]mode[/"
+"code] is either [constant MODE_CBC_ENCRYPT] or [constant MODE_CBC_DECRYPT]."
+msgstr ""
+
+#: doc/classes/AESContext.xml:69
+msgid ""
+"Run the desired operation for this AES context. Will return a "
+"[PoolByteArray] containing the result of encrypting (or decrypting) the "
+"given [code]src[/code]. See [method start] for mode of operation.\n"
+"[b]Note:[/b] The size of [code]src[/code] must be a multiple of 16. Apply "
+"some padding if needed."
+msgstr ""
+
+#: doc/classes/AESContext.xml:76
+msgid "AES electronic codebook encryption mode."
+msgstr ""
+
+#: doc/classes/AESContext.xml:79
+msgid "AES electronic codebook decryption mode."
+msgstr ""
+
+#: doc/classes/AESContext.xml:82
+msgid "AES cipher blocker chaining encryption mode."
+msgstr ""
+
+#: doc/classes/AESContext.xml:85
+msgid "AES cipher blocker chaining decryption mode."
+msgstr ""
+
+#: doc/classes/AESContext.xml:88
+msgid "Maximum value for the mode enum."
+msgstr ""
+
+#: doc/classes/AnimatedSprite.xml:4
+msgid "Sprite node that can use multiple textures for animation."
+msgstr ""
+
+#: doc/classes/AnimatedSprite.xml:7
+msgid ""
+"Animations are created using a [SpriteFrames] resource, which can be "
+"configured in the editor via the SpriteFrames panel.\n"
+"[b]Note:[/b] You can associate a set of normal maps by creating additional "
+"[SpriteFrames] resources with a [code]_normal[/code] suffix. For example, "
+"having 2 [SpriteFrames] resources [code]run[/code] and [code]run_normal[/"
+"code] will make it so the [code]run[/code] animation uses the normal map."
+msgstr ""
+
+#: doc/classes/AnimatedSprite.xml:11 doc/classes/AnimatedSprite3D.xml:10
+#: doc/classes/AnimationPlayer.xml:13
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/2d/2d_sprite_animation.html"
+msgstr ""
+
+#: doc/classes/AnimatedSprite.xml:12 doc/classes/Area2D.xml:11
+#: doc/classes/AudioStreamPlayer.xml:12 doc/classes/Button.xml:24
+#: doc/classes/CanvasLayer.xml:12 doc/classes/CollisionShape2D.xml:11
+#: doc/classes/ColorRect.xml:10 doc/classes/Input.xml:11
+#: doc/classes/InputEvent.xml:12 doc/classes/InputEventAction.xml:11
+#: doc/classes/Label.xml:12 doc/classes/Particles2D.xml:15
+#: doc/classes/Timer.xml:11 doc/classes/VisibilityNotifier2D.xml:12
+msgid "https://godotengine.org/asset-library/asset/515"
+msgstr ""
+
+#: doc/classes/AnimatedSprite.xml:18 doc/classes/AnimatedSprite3D.xml:16
+msgid "Returns [code]true[/code] if an animation is currently being played."
+msgstr ""
+
+#: doc/classes/AnimatedSprite.xml:26
+msgid ""
+"Plays the animation named [code]anim[/code]. If no [code]anim[/code] is "
+"provided, the current animation is played. If [code]backwards[/code] is "
+"[code]true[/code], the animation will be played in reverse."
+msgstr ""
+
+#: doc/classes/AnimatedSprite.xml:32 doc/classes/AnimatedSprite3D.xml:29
+msgid "Stops the current animation (does not reset the frame counter)."
+msgstr ""
+
+#: doc/classes/AnimatedSprite.xml:38 doc/classes/AnimatedSprite3D.xml:35
+msgid ""
+"The current animation from the [code]frames[/code] resource. If this value "
+"changes, the [code]frame[/code] counter is reset."
+msgstr ""
+
+#: doc/classes/AnimatedSprite.xml:41 doc/classes/SpriteBase3D.xml:48
+msgid "If [code]true[/code], texture will be centered."
+msgstr ""
+
+#: doc/classes/AnimatedSprite.xml:44 doc/classes/Sprite.xml:39
+#: doc/classes/SpriteBase3D.xml:54 doc/classes/TextureButton.xml:21
+#: doc/classes/TextureRect.xml:20
+msgid "If [code]true[/code], texture is flipped horizontally."
+msgstr ""
+
+#: doc/classes/AnimatedSprite.xml:47 doc/classes/Sprite.xml:42
+#: doc/classes/SpriteBase3D.xml:57 doc/classes/TextureButton.xml:24
+#: doc/classes/TextureRect.xml:23
+msgid "If [code]true[/code], texture is flipped vertically."
+msgstr ""
+
+#: doc/classes/AnimatedSprite.xml:50 doc/classes/AnimatedSprite3D.xml:38
+msgid "The displayed animation frame's index."
+msgstr ""
+
+#: doc/classes/AnimatedSprite.xml:53 doc/classes/AnimatedSprite3D.xml:41
+msgid "The [SpriteFrames] resource containing the animation(s)."
+msgstr ""
+
+#: doc/classes/AnimatedSprite.xml:56 doc/classes/Sprite.xml:58
+#: doc/classes/SpriteBase3D.xml:63
+msgid "The texture's drawing offset."
+msgstr ""
+
+#: doc/classes/AnimatedSprite.xml:59 doc/classes/AnimatedSprite3D.xml:44
+msgid "If [code]true[/code], the [member animation] is currently playing."
+msgstr ""
+
+#: doc/classes/AnimatedSprite.xml:62
+msgid "The animation speed is multiplied by this value."
+msgstr ""
+
+#: doc/classes/AnimatedSprite.xml:68 doc/classes/AnimatedSprite3D.xml:50
+msgid ""
+"Emitted when the animation is finished (when it plays the last frame). If "
+"the animation is looping, this signal is emitted every time the last frame "
+"is drawn."
+msgstr ""
+
+#: doc/classes/AnimatedSprite.xml:73 doc/classes/AnimatedSprite3D.xml:55
+msgid "Emitted when [member frame] changed."
+msgstr ""
+
+#: doc/classes/AnimatedSprite3D.xml:4
+msgid ""
+"2D sprite node in 3D world, that can use multiple 2D textures for animation."
+msgstr ""
+
+#: doc/classes/AnimatedSprite3D.xml:7
+msgid ""
+"Animations are created using a [SpriteFrames] resource, which can be "
+"configured in the editor via the SpriteFrames panel."
+msgstr ""
+
+#: doc/classes/AnimatedSprite3D.xml:23
+msgid ""
+"Plays the animation named [code]anim[/code]. If no [code]anim[/code] is "
+"provided, the current animation is played."
+msgstr ""
+
+#: doc/classes/AnimatedTexture.xml:4
+msgid "Proxy texture for simple frame-based animations."
+msgstr ""
+
+#: doc/classes/AnimatedTexture.xml:7
+msgid ""
+"[AnimatedTexture] is a resource format for frame-based animations, where "
+"multiple textures can be chained automatically with a predefined delay for "
+"each frame. Unlike [AnimationPlayer] or [AnimatedSprite], it isn't a [Node], "
+"but has the advantage of being usable anywhere a [Texture] resource can be "
+"used, e.g. in a [TileSet].\n"
+"The playback of the animation is controlled by the [member fps] property as "
+"well as each frame's optional delay (see [method set_frame_delay]). The "
+"animation loops, i.e. it will restart at frame 0 automatically after playing "
+"the last frame.\n"
+"[AnimatedTexture] currently requires all frame textures to have the same "
+"size, otherwise the bigger ones will be cropped to match the smallest one.\n"
+"[b]Note:[/b] AnimatedTexture doesn't support using [AtlasTexture]s. Each "
+"frame needs to be a separate [Texture]."
+msgstr ""
+
+#: doc/classes/AnimatedTexture.xml:19
+msgid "Returns the given frame's delay value."
+msgstr ""
+
+#: doc/classes/AnimatedTexture.xml:26
+msgid "Returns the given frame's [Texture]."
+msgstr ""
+
+#: doc/classes/AnimatedTexture.xml:34
+msgid ""
+"Sets an additional delay (in seconds) between this frame and the next one, "
+"that will be added to the time interval defined by [member fps]. By default, "
+"frames have no delay defined. If a delay value is defined, the final time "
+"interval between this frame and the next will be [code]1.0 / fps + delay[/"
+"code].\n"
+"For example, for an animation with 3 frames, 2 FPS and a frame delay on the "
+"second frame of 1.2, the resulting playback will be:\n"
+"[codeblock]\n"
+"Frame 0: 0.5 s (1 / fps)\n"
+"Frame 1: 1.7 s (1 / fps + 1.2)\n"
+"Frame 2: 0.5 s (1 / fps)\n"
+"Total duration: 2.7 s\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/AnimatedTexture.xml:49
+msgid ""
+"Assigns a [Texture] to the given frame. Frame IDs start at 0, so the first "
+"frame has ID 0, and the last frame of the animation has ID [member frames] - "
+"1.\n"
+"You can define any number of textures up to [constant MAX_FRAMES], but keep "
+"in mind that only frames from 0 to [member frames] - 1 will be part of the "
+"animation."
+msgstr ""
+
+#: doc/classes/AnimatedTexture.xml:56
+msgid "Sets the currently visible frame of the texture."
+msgstr ""
+
+#: doc/classes/AnimatedTexture.xml:60
+msgid ""
+"Animation speed in frames per second. This value defines the default time "
+"interval between two frames of the animation, and thus the overall duration "
+"of the animation loop based on the [member frames] property. A value of 0 "
+"means no predefined number of frames per second, the animation will play "
+"according to each frame's frame delay (see [method set_frame_delay]).\n"
+"For example, an animation with 8 frames, no frame delay and a [code]fps[/"
+"code] value of 2 will run for 4 seconds, with each frame lasting 0.5 seconds."
+msgstr ""
+
+#: doc/classes/AnimatedTexture.xml:64
+msgid ""
+"Number of frames to use in the animation. While you can create the frames "
+"independently with [method set_frame_texture], you need to set this value "
+"for the animation to take new frames into account. The maximum number of "
+"frames is [constant MAX_FRAMES]."
+msgstr ""
+
+#: doc/classes/AnimatedTexture.xml:67
+msgid ""
+"If [code]true[/code], the animation will only play once and will not loop "
+"back to the first frame after reaching the end. Note that reaching the end "
+"will not set [member pause] to [code]true[/code]."
+msgstr ""
+
+#: doc/classes/AnimatedTexture.xml:70
+msgid ""
+"If [code]true[/code], the animation will pause where it currently is (i.e. "
+"at [member current_frame]). The animation will continue from where it was "
+"paused when changing this property to [code]false[/code]."
+msgstr ""
+
+#: doc/classes/AnimatedTexture.xml:75
+msgid ""
+"The maximum number of frames supported by [AnimatedTexture]. If you need "
+"more frames in your animation, use [AnimationPlayer] or [AnimatedSprite]."
+msgstr ""
+
+#: doc/classes/Animation.xml:4
+msgid "Contains data used to animate everything in the engine."
+msgstr ""
+
+#: doc/classes/Animation.xml:7
+msgid ""
+"An Animation resource contains data used to animate everything in the "
+"engine. Animations are divided into tracks, and each track must be linked to "
+"a node. The state of that node can be changed through time, by adding timed "
+"keys (events) to the track.\n"
+"[codeblock]\n"
+"# This creates an animation that makes the node \"Enemy\" move to the right "
+"by\n"
+"# 100 pixels in 0.5 seconds.\n"
+"var animation = Animation.new()\n"
+"var track_index = animation.add_track(Animation.TYPE_VALUE)\n"
+"animation.track_set_path(track_index, \"Enemy:position:x\")\n"
+"animation.track_insert_key(track_index, 0.0, 0)\n"
+"animation.track_insert_key(track_index, 0.5, 100)\n"
+"[/codeblock]\n"
+"Animations are just data containers, and must be added to nodes such as an "
+"[AnimationPlayer] or [AnimationTreePlayer] to be played back. Animation "
+"tracks have different types, each with its own set of dedicated methods. "
+"Check [enum TrackType] to see available types."
+msgstr ""
+
+#: doc/classes/Animation.xml:20 doc/classes/AnimationPlayer.xml:12
+msgid "https://docs.godotengine.org/en/3.4/tutorials/animation/index.html"
+msgstr ""
+
+#: doc/classes/Animation.xml:28
+msgid "Adds a track to the Animation."
+msgstr ""
+
+#: doc/classes/Animation.xml:36
+msgid ""
+"Returns the animation name at the key identified by [code]key_idx[/code]. "
+"The [code]track_idx[/code] must be the index of an Animation Track."
+msgstr ""
+
+#: doc/classes/Animation.xml:45
+msgid ""
+"Inserts a key with value [code]animation[/code] at the given [code]time[/"
+"code] (in seconds). The [code]track_idx[/code] must be the index of an "
+"Animation Track."
+msgstr ""
+
+#: doc/classes/Animation.xml:54
+msgid ""
+"Sets the key identified by [code]key_idx[/code] to value [code]animation[/"
+"code]. The [code]track_idx[/code] must be the index of an Animation Track."
+msgstr ""
+
+#: doc/classes/Animation.xml:62
+msgid ""
+"Returns the end offset of the key identified by [code]key_idx[/code]. The "
+"[code]track_idx[/code] must be the index of an Audio Track.\n"
+"End offset is the number of seconds cut off at the ending of the audio "
+"stream."
+msgstr ""
+
+#: doc/classes/Animation.xml:71
+msgid ""
+"Returns the start offset of the key identified by [code]key_idx[/code]. The "
+"[code]track_idx[/code] must be the index of an Audio Track.\n"
+"Start offset is the number of seconds cut off at the beginning of the audio "
+"stream."
+msgstr ""
+
+#: doc/classes/Animation.xml:80
+msgid ""
+"Returns the audio stream of the key identified by [code]key_idx[/code]. The "
+"[code]track_idx[/code] must be the index of an Audio Track."
+msgstr ""
+
+#: doc/classes/Animation.xml:91
+msgid ""
+"Inserts an Audio Track key at the given [code]time[/code] in seconds. The "
+"[code]track_idx[/code] must be the index of an Audio Track.\n"
+"[code]stream[/code] is the [AudioStream] resource to play. "
+"[code]start_offset[/code] is the number of seconds cut off at the beginning "
+"of the audio stream, while [code]end_offset[/code] is at the ending."
+msgstr ""
+
+#: doc/classes/Animation.xml:101
+msgid ""
+"Sets the end offset of the key identified by [code]key_idx[/code] to value "
+"[code]offset[/code]. The [code]track_idx[/code] must be the index of an "
+"Audio Track."
+msgstr ""
+
+#: doc/classes/Animation.xml:110
+msgid ""
+"Sets the start offset of the key identified by [code]key_idx[/code] to value "
+"[code]offset[/code]. The [code]track_idx[/code] must be the index of an "
+"Audio Track."
+msgstr ""
+
+#: doc/classes/Animation.xml:119
+msgid ""
+"Sets the stream of the key identified by [code]key_idx[/code] to value "
+"[code]stream[/code]. The [code]track_idx[/code] must be the index of an "
+"Audio Track."
+msgstr ""
+
+#: doc/classes/Animation.xml:127
+msgid ""
+"Returns the in handle of the key identified by [code]key_idx[/code]. The "
+"[code]track_idx[/code] must be the index of a Bezier Track."
+msgstr ""
+
+#: doc/classes/Animation.xml:135
+msgid ""
+"Returns the out handle of the key identified by [code]key_idx[/code]. The "
+"[code]track_idx[/code] must be the index of a Bezier Track."
+msgstr ""
+
+#: doc/classes/Animation.xml:143
+msgid ""
+"Returns the value of the key identified by [code]key_idx[/code]. The "
+"[code]track_idx[/code] must be the index of a Bezier Track."
+msgstr ""
+
+#: doc/classes/Animation.xml:154
+msgid ""
+"Inserts a Bezier Track key at the given [code]time[/code] in seconds. The "
+"[code]track_idx[/code] must be the index of a Bezier Track.\n"
+"[code]in_handle[/code] is the left-side weight of the added Bezier curve "
+"point, [code]out_handle[/code] is the right-side one, while [code]value[/"
+"code] is the actual value at this point."
+msgstr ""
+
+#: doc/classes/Animation.xml:163
+msgid ""
+"Returns the interpolated value at the given [code]time[/code] (in seconds). "
+"The [code]track_idx[/code] must be the index of a Bezier Track."
+msgstr ""
+
+#: doc/classes/Animation.xml:172
+msgid ""
+"Sets the in handle of the key identified by [code]key_idx[/code] to value "
+"[code]in_handle[/code]. The [code]track_idx[/code] must be the index of a "
+"Bezier Track."
+msgstr ""
+
+#: doc/classes/Animation.xml:181
+msgid ""
+"Sets the out handle of the key identified by [code]key_idx[/code] to value "
+"[code]out_handle[/code]. The [code]track_idx[/code] must be the index of a "
+"Bezier Track."
+msgstr ""
+
+#: doc/classes/Animation.xml:190
+msgid ""
+"Sets the value of the key identified by [code]key_idx[/code] to the given "
+"value. The [code]track_idx[/code] must be the index of a Bezier Track."
+msgstr ""
+
+#: doc/classes/Animation.xml:196
+msgid "Clear the animation (clear all tracks and reset all)."
+msgstr ""
+
+#: doc/classes/Animation.xml:204
+msgid ""
+"Adds a new track that is a copy of the given track from [code]to_animation[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Animation.xml:211
+msgid ""
+"Returns the index of the specified track. If the track is not found, return "
+"-1."
+msgstr ""
+
+#: doc/classes/Animation.xml:217
+msgid "Returns the amount of tracks in the animation."
+msgstr ""
+
+#: doc/classes/Animation.xml:226
+msgid ""
+"Returns all the key indices of a method track, given a position and delta "
+"time."
+msgstr ""
+
+#: doc/classes/Animation.xml:234
+msgid "Returns the method name of a method track."
+msgstr ""
+
+#: doc/classes/Animation.xml:242
+msgid ""
+"Returns the arguments values to be called on a method track for a given key "
+"in a given track."
+msgstr ""
+
+#: doc/classes/Animation.xml:249
+msgid "Removes a track by specifying the track index."
+msgstr ""
+
+#: doc/classes/Animation.xml:258
+msgid ""
+"Finds the key index by time in a given track. Optionally, only find it if "
+"the exact time is given."
+msgstr ""
+
+#: doc/classes/Animation.xml:265
+msgid ""
+"Returns [code]true[/code] if the track at [code]idx[/code] wraps the "
+"interpolation loop. New tracks wrap the interpolation loop by default."
+msgstr ""
+
+#: doc/classes/Animation.xml:272
+msgid "Returns the interpolation type of a given track."
+msgstr ""
+
+#: doc/classes/Animation.xml:279
+msgid "Returns the amount of keys in a given track."
+msgstr ""
+
+#: doc/classes/Animation.xml:287
+msgid "Returns the time at which the key is located."
+msgstr ""
+
+#: doc/classes/Animation.xml:295
+msgid ""
+"Returns the transition curve (easing) for a specific key (see the built-in "
+"math function [method @GDScript.ease])."
+msgstr ""
+
+#: doc/classes/Animation.xml:303
+msgid "Returns the value of a given key in a given track."
+msgstr ""
+
+#: doc/classes/Animation.xml:310
+msgid ""
+"Gets the path of a track. For more information on the path format, see "
+"[method track_set_path]."
+msgstr ""
+
+#: doc/classes/Animation.xml:317
+msgid "Gets the type of a track."
+msgstr ""
+
+#: doc/classes/Animation.xml:327
+msgid "Insert a generic key in a given track."
+msgstr ""
+
+#: doc/classes/Animation.xml:334
+msgid ""
+"Returns [code]true[/code] if the track at index [code]idx[/code] is enabled."
+msgstr ""
+
+#: doc/classes/Animation.xml:341
+msgid ""
+"Returns [code]true[/code] if the given track is imported. Else, return "
+"[code]false[/code]."
+msgstr ""
+
+#: doc/classes/Animation.xml:348
+msgid "Moves a track down."
+msgstr ""
+
+#: doc/classes/Animation.xml:356
+msgid ""
+"Changes the index position of track [code]idx[/code] to the one defined in "
+"[code]to_idx[/code]."
+msgstr ""
+
+#: doc/classes/Animation.xml:363
+msgid "Moves a track up."
+msgstr ""
+
+#: doc/classes/Animation.xml:371
+msgid "Removes a key by index in a given track."
+msgstr ""
+
+#: doc/classes/Animation.xml:379
+msgid "Removes a key by position (seconds) in a given track."
+msgstr ""
+
+#: doc/classes/Animation.xml:387
+msgid "Enables/disables the given track. Tracks are enabled by default."
+msgstr ""
+
+#: doc/classes/Animation.xml:395
+msgid "Sets the given track as imported or not."
+msgstr ""
+
+#: doc/classes/Animation.xml:403
+msgid ""
+"If [code]true[/code], the track at [code]idx[/code] wraps the interpolation "
+"loop."
+msgstr ""
+
+#: doc/classes/Animation.xml:411
+msgid "Sets the interpolation type of a given track."
+msgstr ""
+
+#: doc/classes/Animation.xml:420
+msgid "Sets the time of an existing key."
+msgstr ""
+
+#: doc/classes/Animation.xml:429
+msgid ""
+"Sets the transition curve (easing) for a specific key (see the built-in math "
+"function [method @GDScript.ease])."
+msgstr ""
+
+#: doc/classes/Animation.xml:438
+msgid "Sets the value of an existing key."
+msgstr ""
+
+#: doc/classes/Animation.xml:446
+msgid ""
+"Sets the path of a track. Paths must be valid scene-tree paths to a node and "
+"must be specified starting from the parent node of the node that will "
+"reproduce the animation. Tracks that control properties or bones must append "
+"their name after the path, separated by [code]\":\"[/code].\n"
+"For example, [code]\"character/skeleton:ankle\"[/code] or [code]\"character/"
+"mesh:transform/local\"[/code]."
+msgstr ""
+
+#: doc/classes/Animation.xml:455
+msgid ""
+"Swaps the track [code]idx[/code]'s index position with the track "
+"[code]with_idx[/code]."
+msgstr ""
+
+#: doc/classes/Animation.xml:466
+msgid "Insert a transform key for a transform track."
+msgstr ""
+
+#: doc/classes/Animation.xml:474
+msgid ""
+"Returns the interpolated value of a transform track at a given time (in "
+"seconds). An array consisting of 3 elements: position ([Vector3]), rotation "
+"([Quat]) and scale ([Vector3])."
+msgstr ""
+
+#: doc/classes/Animation.xml:483
+msgid ""
+"Returns all the key indices of a value track, given a position and delta "
+"time."
+msgstr ""
+
+#: doc/classes/Animation.xml:490
+msgid "Returns the update mode of a value track."
+msgstr ""
+
+#: doc/classes/Animation.xml:498
+msgid ""
+"Returns the interpolated value at the given time (in seconds). The "
+"[code]track_idx[/code] must be the index of a value track."
+msgstr ""
+
+#: doc/classes/Animation.xml:506
+msgid "Sets the update mode (see [enum UpdateMode]) of a value track."
+msgstr ""
+
+#: doc/classes/Animation.xml:512
+msgid ""
+"The total length of the animation (in seconds).\n"
+"[b]Note:[/b] Length is not delimited by the last key, as this one may be "
+"before or after the end to ensure correct interpolation and looping."
+msgstr ""
+
+#: doc/classes/Animation.xml:516
+msgid ""
+"A flag indicating that the animation must loop. This is used for correct "
+"interpolation of animation cycles, and for hinting the player that it must "
+"restart the animation."
+msgstr ""
+
+#: doc/classes/Animation.xml:519
+msgid "The animation step value."
+msgstr ""
+
+#: doc/classes/Animation.xml:525
+msgid ""
+"Emitted when there's a change in the list of tracks, e.g. tracks are added, "
+"moved or have changed paths."
+msgstr ""
+
+#: doc/classes/Animation.xml:531
+msgid ""
+"Value tracks set values in node properties, but only those which can be "
+"Interpolated."
+msgstr ""
+
+#: doc/classes/Animation.xml:534
+msgid ""
+"Transform tracks are used to change node local transforms or skeleton pose "
+"bones. Transitions are interpolated."
+msgstr ""
+
+#: doc/classes/Animation.xml:537
+msgid "Method tracks call functions with given arguments per key."
+msgstr ""
+
+#: doc/classes/Animation.xml:540
+msgid ""
+"Bezier tracks are used to interpolate a value using custom curves. They can "
+"also be used to animate sub-properties of vectors and colors (e.g. alpha "
+"value of a [Color])."
+msgstr ""
+
+#: doc/classes/Animation.xml:543
+msgid ""
+"Audio tracks are used to play an audio stream with either type of "
+"[AudioStreamPlayer]. The stream can be trimmed and previewed in the "
+"animation."
+msgstr ""
+
+#: doc/classes/Animation.xml:546
+msgid "Animation tracks play animations in other [AnimationPlayer] nodes."
+msgstr ""
+
+#: doc/classes/Animation.xml:549
+msgid "No interpolation (nearest value)."
+msgstr ""
+
+#: doc/classes/Animation.xml:552
+msgid "Linear interpolation."
+msgstr ""
+
+#: doc/classes/Animation.xml:555
+msgid "Cubic interpolation."
+msgstr ""
+
+#: doc/classes/Animation.xml:558
+msgid "Update between keyframes."
+msgstr ""
+
+#: doc/classes/Animation.xml:561
+msgid "Update at the keyframes and hold the value."
+msgstr ""
+
+#: doc/classes/Animation.xml:564
+msgid "Update at the keyframes."
+msgstr ""
+
+#: doc/classes/Animation.xml:567
+msgid ""
+"Same as linear interpolation, but also interpolates from the current value "
+"(i.e. dynamically at runtime) if the first key isn't at 0 seconds."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:4
+msgid "Base resource for [AnimationTree] nodes."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:7
+msgid ""
+"Base resource for [AnimationTree] nodes. In general, it's not used directly, "
+"but you can create custom ones with custom blending formulas.\n"
+"Inherit this when creating nodes mainly for use in [AnimationNodeBlendTree], "
+"otherwise [AnimationRootNode] should be used instead."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:11 doc/classes/AnimationNodeAdd2.xml:10
+#: doc/classes/AnimationNodeAdd3.xml:14
+#: doc/classes/AnimationNodeAnimation.xml:10
+#: doc/classes/AnimationNodeBlend2.xml:10
+#: doc/classes/AnimationNodeBlend3.xml:14
+#: doc/classes/AnimationNodeBlendSpace1D.xml:13
+#: doc/classes/AnimationNodeBlendSpace2D.xml:12
+#: doc/classes/AnimationNodeBlendTree.xml:10
+#: doc/classes/AnimationNodeOneShot.xml:10
+#: doc/classes/AnimationNodeOutput.xml:9
+#: doc/classes/AnimationNodeStateMachine.xml:15
+#: doc/classes/AnimationNodeStateMachinePlayback.xml:15
+#: doc/classes/AnimationNodeStateMachineTransition.xml:8
+#: doc/classes/AnimationNodeTimeScale.xml:10
+#: doc/classes/AnimationNodeTimeSeek.xml:21
+#: doc/classes/AnimationNodeTransition.xml:10 doc/classes/AnimationTree.xml:11
+#: doc/classes/AnimationTreePlayer.xml:12
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/animation/animation_tree.html"
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:18
+msgid ""
+"Adds an input to the node. This is only useful for nodes created for use in "
+"an [AnimationNodeBlendTree]."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:29
+msgid ""
+"Blend an animation by [code]blend[/code] amount (name must be valid in the "
+"linked [AnimationPlayer]). A [code]time[/code] and [code]delta[/code] may be "
+"passed, as well as whether [code]seek[/code] happened."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:41
+msgid ""
+"Blend an input. This is only useful for nodes created for an "
+"[AnimationNodeBlendTree]. The [code]time[/code] parameter is a relative "
+"delta, unless [code]seek[/code] is [code]true[/code], in which case it is "
+"absolute. A filter mode may be optionally passed (see [enum FilterAction] "
+"for options)."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:54
+msgid ""
+"Blend another animation node (in case this node contains children animation "
+"nodes). This function is only useful if you inherit from [AnimationRootNode] "
+"instead, else editors will not display your node for addition."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:60
+msgid "Gets the text caption for this node (used by some editors)."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:67
+msgid ""
+"Gets a child node by index (used by editors inheriting from "
+"[AnimationRootNode])."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:73
+msgid ""
+"Gets all children nodes in order as a [code]name: node[/code] dictionary. "
+"Only useful when inheriting [AnimationRootNode]."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:79
+msgid ""
+"Amount of inputs in this node, only useful for nodes that go into "
+"[AnimationNodeBlendTree]."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:86
+msgid "Gets the name of an input by index."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:93
+msgid ""
+"Gets the value of a parameter. Parameters are custom local memory used for "
+"your nodes, given a resource can be reused in multiple trees."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:100
+msgid ""
+"Gets the default value of a parameter. Parameters are custom local memory "
+"used for your nodes, given a resource can be reused in multiple trees."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:106
+msgid ""
+"Gets the property information for parameter. Parameters are custom local "
+"memory used for your nodes, given a resource can be reused in multiple "
+"trees. Format is similar to [method Object.get_property_list]."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:112
+msgid ""
+"Returns [code]true[/code] whether you want the blend tree editor to display "
+"filter editing on this node."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:119
+msgid "Returns [code]true[/code] whether a given path is filtered."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:127
+msgid ""
+"User-defined callback called when a custom node is processed. The "
+"[code]time[/code] parameter is a relative delta, unless [code]seek[/code] is "
+"[code]true[/code], in which case it is absolute.\n"
+"Here, call the [method blend_input], [method blend_node] or [method "
+"blend_animation] functions. You can also use [method get_parameter] and "
+"[method set_parameter] to modify local memory.\n"
+"This function should return the time left for the current animation to "
+"finish (if unsure, pass the value from the main blend being called)."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:136
+msgid "Removes an input, call this only when inactive."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:144
+msgid "Adds or removes a path for the filter."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:152
+msgid ""
+"Sets a custom parameter. These are used as local storage, because resources "
+"can be reused across the tree or scenes."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:158
+msgid "If [code]true[/code], filtering is enabled."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:164
+msgid "Called when the node was removed from the graph."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:169
+msgid ""
+"Emitted by nodes that inherit from this class and that have an internal tree "
+"when one of their nodes changes. The nodes that emit this signal are "
+"[AnimationNodeBlendSpace1D], [AnimationNodeBlendSpace2D], "
+"[AnimationNodeStateMachine], and [AnimationNodeBlendTree]."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:175
+msgid "Do not use filtering."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:178
+msgid "Paths matching the filter will be allowed to pass."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:181
+msgid "Paths matching the filter will be discarded."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:184
+msgid "Paths matching the filter will be blended (by the blend value)."
+msgstr ""
+
+#: doc/classes/AnimationNodeAdd2.xml:4
+msgid "Blends two animations additively inside of an [AnimationNodeBlendTree]."
+msgstr ""
+
+#: doc/classes/AnimationNodeAdd2.xml:7
+msgid ""
+"A resource to add to an [AnimationNodeBlendTree]. Blends two animations "
+"additively based on an amount value in the [code][0.0, 1.0][/code] range."
+msgstr ""
+
+#: doc/classes/AnimationNodeAdd2.xml:16 doc/classes/AnimationNodeAdd3.xml:21
+#: doc/classes/AnimationNodeBlend2.xml:18
+#: doc/classes/AnimationNodeBlend3.xml:20
+msgid ""
+"If [code]true[/code], sets the [code]optimization[/code] to [code]false[/"
+"code] when calling [method AnimationNode.blend_input], forcing the blended "
+"animations to update every frame."
+msgstr ""
+
+#: doc/classes/AnimationNodeAdd3.xml:4
+msgid ""
+"Blends two of three animations additively inside of an "
+"[AnimationNodeBlendTree]."
+msgstr ""
+
+#: doc/classes/AnimationNodeAdd3.xml:7
+msgid ""
+"A resource to add to an [AnimationNodeBlendTree]. Blends two animations "
+"together additively out of three based on a value in the [code][-1.0, 1.0][/"
+"code] range.\n"
+"This node has three inputs:\n"
+"- The base animation to add to\n"
+"- A -add animation to blend with when the blend amount is in the [code]"
+"[-1.0, 0.0][/code] range.\n"
+"- A +add animation to blend with when the blend amount is in the [code][0.0, "
+"1.0][/code] range"
+msgstr ""
+
+#: doc/classes/AnimationNodeAdd3.xml:15
+#: doc/classes/AnimationNodeAnimation.xml:12
+#: doc/classes/AnimationNodeBlend2.xml:12
+#: doc/classes/AnimationNodeBlendSpace2D.xml:13
+#: doc/classes/AnimationNodeOneShot.xml:11
+#: doc/classes/AnimationNodeOutput.xml:11
+#: doc/classes/AnimationNodeTransition.xml:12
+#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
+#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
+#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
+#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
+#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
+#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
+#: doc/classes/Quat.xml:13 doc/classes/Skeleton.xml:13
+#: doc/classes/SpotLight.xml:12 doc/classes/StaticBody.xml:12
+#: doc/classes/WorldEnvironment.xml:15
+msgid "https://godotengine.org/asset-library/asset/678"
+msgstr ""
+
+#: doc/classes/AnimationNodeAnimation.xml:4
+msgid "Input animation to use in an [AnimationNodeBlendTree]."
+msgstr ""
+
+#: doc/classes/AnimationNodeAnimation.xml:7
+msgid ""
+"A resource to add to an [AnimationNodeBlendTree]. Only features one output "
+"set using the [member animation] property. Use it as an input for "
+"[AnimationNode] that blend animations together."
+msgstr ""
+
+#: doc/classes/AnimationNodeAnimation.xml:11
+#: doc/classes/AnimationNodeBlend2.xml:11
+#: doc/classes/AnimationNodeOutput.xml:10
+#: doc/classes/AnimationNodeTimeScale.xml:11
+#: doc/classes/AnimationNodeTransition.xml:11 doc/classes/Area.xml:10
+#: doc/classes/Basis.xml:17 doc/classes/BoxShape.xml:12
+#: doc/classes/CollisionShape.xml:12 modules/gridmap/doc_classes/GridMap.xml:15
+#: doc/classes/KinematicBody.xml:14 doc/classes/Mesh.xml:12
+#: doc/classes/MeshInstance.xml:12 doc/classes/MeshLibrary.xml:11
+#: doc/classes/ProjectSettings.xml:14 doc/classes/Transform.xml:15
+msgid "https://godotengine.org/asset-library/asset/125"
+msgstr ""
+
+#: doc/classes/AnimationNodeAnimation.xml:18
+msgid ""
+"Animation to use as an output. It is one of the animations provided by "
+"[member AnimationTree.anim_player]."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlend2.xml:4
+msgid "Blends two animations linearly inside of an [AnimationNodeBlendTree]."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlend2.xml:7
+msgid ""
+"A resource to add to an [AnimationNodeBlendTree]. Blends two animations "
+"linearly based on an amount value in the [code][0.0, 1.0][/code] range."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlend3.xml:4
+msgid ""
+"Blends two of three animations linearly inside of an "
+"[AnimationNodeBlendTree]."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlend3.xml:7
+msgid ""
+"A resource to add to an [AnimationNodeBlendTree]. Blends two animations "
+"together linearly out of three based on a value in the [code][-1.0, 1.0][/"
+"code] range.\n"
+"This node has three inputs:\n"
+"- The base animation\n"
+"- A -blend animation to blend with when the blend amount is in the [code]"
+"[-1.0, 0.0][/code] range.\n"
+"- A +blend animation to blend with when the blend amount is in the [code]"
+"[0.0, 1.0][/code] range"
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace1D.xml:4
+msgid ""
+"Blends linearly between two of any number of [AnimationNode] of any type "
+"placed on a virtual axis."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace1D.xml:7
+msgid ""
+"A resource to add to an [AnimationNodeBlendTree].\n"
+"This is a virtual axis on which you can add any type of [AnimationNode] "
+"using [method add_blend_point].\n"
+"Outputs the linear blend of the two [AnimationNode]s closest to the node's "
+"current value.\n"
+"You can set the extents of the axis using the [member min_space] and [member "
+"max_space]."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace1D.xml:22
+msgid ""
+"Adds a new point that represents a [code]node[/code] on the virtual axis at "
+"a given position set by [code]pos[/code]. You can insert it at a specific "
+"index using the [code]at_index[/code] argument. If you use the default value "
+"for [code]at_index[/code], the point is inserted at the end of the blend "
+"points array."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace1D.xml:28
+msgid "Returns the number of points on the blend axis."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace1D.xml:35
+msgid ""
+"Returns the [AnimationNode] referenced by the point at index [code]point[/"
+"code]."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace1D.xml:42
+#: doc/classes/AnimationNodeBlendSpace2D.xml:52
+msgid "Returns the position of the point at index [code]point[/code]."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace1D.xml:49
+msgid "Removes the point at index [code]point[/code] from the blend axis."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace1D.xml:57
+#: doc/classes/AnimationNodeBlendSpace2D.xml:88
+msgid ""
+"Changes the [AnimationNode] referenced by the point at index [code]point[/"
+"code]."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace1D.xml:65
+#: doc/classes/AnimationNodeBlendSpace2D.xml:96
+msgid ""
+"Updates the position of the point at index [code]point[/code] on the blend "
+"axis."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace1D.xml:71
+msgid ""
+"The blend space's axis's upper limit for the points' position. See [method "
+"add_blend_point]."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace1D.xml:74
+msgid ""
+"The blend space's axis's lower limit for the points' position. See [method "
+"add_blend_point]."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace1D.xml:77
+msgid "Position increment to snap to when moving a point on the axis."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace1D.xml:80
+msgid "Label of the virtual axis of the blend space."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace2D.xml:4
+msgid ""
+"Blends linearly between three [AnimationNode] of any type placed in a 2D "
+"space."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace2D.xml:7
+msgid ""
+"A resource to add to an [AnimationNodeBlendTree].\n"
+"This node allows you to blend linearly between three animations using a "
+"[Vector2] weight.\n"
+"You can add vertices to the blend space with [method add_blend_point] and "
+"automatically triangulate it by setting [member auto_triangles] to "
+"[code]true[/code]. Otherwise, use [method add_triangle] and [method "
+"remove_triangle] to create up the blend space by hand."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace2D.xml:22
+msgid ""
+"Adds a new point that represents a [code]node[/code] at the position set by "
+"[code]pos[/code]. You can insert it at a specific index using the "
+"[code]at_index[/code] argument. If you use the default value for "
+"[code]at_index[/code], the point is inserted at the end of the blend points "
+"array."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace2D.xml:32
+msgid ""
+"Creates a new triangle using three points [code]x[/code], [code]y[/code], "
+"and [code]z[/code]. Triangles can overlap. You can insert the triangle at a "
+"specific index using the [code]at_index[/code] argument. If you use the "
+"default value for [code]at_index[/code], the point is inserted at the end of "
+"the blend points array."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace2D.xml:38
+msgid "Returns the number of points in the blend space."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace2D.xml:45
+msgid ""
+"Returns the [AnimationRootNode] referenced by the point at index "
+"[code]point[/code]."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace2D.xml:58
+msgid "Returns the number of triangles in the blend space."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace2D.xml:66
+msgid ""
+"Returns the position of the point at index [code]point[/code] in the "
+"triangle of index [code]triangle[/code]."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace2D.xml:73
+msgid "Removes the point at index [code]point[/code] from the blend space."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace2D.xml:80
+msgid ""
+"Removes the triangle at index [code]triangle[/code] from the blend space."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace2D.xml:102
+msgid ""
+"If [code]true[/code], the blend space is triangulated automatically. The "
+"mesh updates every time you add or remove points with [method "
+"add_blend_point] and [method remove_blend_point]."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace2D.xml:105
+msgid ""
+"Controls the interpolation between animations. See [enum BlendMode] "
+"constants."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace2D.xml:108
+msgid ""
+"The blend space's X and Y axes' upper limit for the points' position. See "
+"[method add_blend_point]."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace2D.xml:111
+msgid ""
+"The blend space's X and Y axes' lower limit for the points' position. See "
+"[method add_blend_point]."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace2D.xml:114
+msgid "Position increment to snap to when moving a point."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace2D.xml:117
+msgid "Name of the blend space's X axis."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace2D.xml:120
+msgid "Name of the blend space's Y axis."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace2D.xml:126
+msgid ""
+"Emitted every time the blend space's triangles are created, removed, or when "
+"one of their vertices changes position."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace2D.xml:132
+msgid "The interpolation between animations is linear."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace2D.xml:135
+msgid ""
+"The blend space plays the animation of the node the blending position is "
+"closest to. Useful for frame-by-frame 2D animations."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace2D.xml:138
+msgid ""
+"Similar to [constant BLEND_MODE_DISCRETE], but starts the new animation at "
+"the last animation's playback position."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendTree.xml:4
+msgid "[AnimationTree] node resource that contains many blend type nodes."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendTree.xml:7
+msgid ""
+"This node may contain a sub-tree of any other blend type nodes, such as mix, "
+"blend2, blend3, one shot, etc. This is one of the most commonly used roots."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendTree.xml:19
+msgid ""
+"Adds an [AnimationNode] at the given [code]position[/code]. The [code]name[/"
+"code] is used to identify the created sub-node later."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendTree.xml:28
+msgid ""
+"Connects the output of an [AnimationNode] as input for another "
+"[AnimationNode], at the input port specified by [code]input_index[/code]."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendTree.xml:36
+msgid "Disconnects the node connected to the specified input."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendTree.xml:43
+msgid "Returns the sub-node with the specified [code]name[/code]."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendTree.xml:50
+msgid ""
+"Returns the position of the sub-node with the specified [code]name[/code]."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendTree.xml:57
+msgid ""
+"Returns [code]true[/code] if a sub-node with specified [code]name[/code] "
+"exists."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendTree.xml:64
+msgid "Removes a sub-node."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendTree.xml:72
+msgid "Changes the name of a sub-node."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendTree.xml:80
+msgid "Modifies the position of a sub-node."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendTree.xml:86
+msgid "The global offset of all sub-nodes."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendTree.xml:91
+msgid "The connection was successful."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendTree.xml:94
+msgid "The input node is [code]null[/code]."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendTree.xml:97
+msgid "The specified input port is out of range."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendTree.xml:100
+msgid "The output node is [code]null[/code]."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendTree.xml:103
+msgid "Input and output nodes are the same."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendTree.xml:106
+msgid "The specified connection already exists."
+msgstr ""
+
+#: doc/classes/AnimationNodeOneShot.xml:4
+msgid "Plays an animation once in [AnimationNodeBlendTree]."
+msgstr ""
+
+#: doc/classes/AnimationNodeOneShot.xml:7
+msgid ""
+"A resource to add to an [AnimationNodeBlendTree]. This node will execute a "
+"sub-animation and return once it finishes. Blend times for fading in and out "
+"can be customized, as well as filters."
+msgstr ""
+
+#: doc/classes/AnimationNodeOneShot.xml:28
+msgid ""
+"If [code]true[/code], the sub-animation will restart automatically after "
+"finishing."
+msgstr ""
+
+#: doc/classes/AnimationNodeOneShot.xml:31
+msgid "The delay after which the automatic restart is triggered, in seconds."
+msgstr ""
+
+#: doc/classes/AnimationNodeOneShot.xml:34
+msgid ""
+"If [member autorestart] is [code]true[/code], a random additional delay (in "
+"seconds) between 0 and this value will be added to [member "
+"autorestart_delay]."
+msgstr ""
+
+#: doc/classes/AnimationNodeOutput.xml:4
+msgid "Generic output node to be added to [AnimationNodeBlendTree]."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:4
+msgid "State machine for control of animations."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:7
+msgid ""
+"Contains multiple nodes representing animation states, connected in a graph. "
+"Node transitions can be configured to happen automatically or via code, "
+"using a shortest-path algorithm. Retrieve the "
+"[AnimationNodeStateMachinePlayback] object from the [AnimationTree] node to "
+"control it programmatically.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"var state_machine = $AnimationTree.get(\"parameters/playback\")\n"
+"state_machine.travel(\"some_state\")\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:24
+msgid ""
+"Adds a new node to the graph. The [code]position[/code] is used for display "
+"in the editor."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:33
+msgid "Adds a transition between the given nodes."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:39
+#: doc/classes/AnimationNodeStateMachine.xml:72
+msgid "Returns the graph's end node."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:45
+msgid "Returns the draw offset of the graph. Used for display in the editor."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:52
+msgid "Returns the animation node with the given name."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:59
+msgid "Returns the given animation node's name."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:66
+msgid "Returns the given node's coordinates. Used for display in the editor."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:79
+msgid "Returns the given transition."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:85
+msgid "Returns the number of connections in the graph."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:92
+msgid "Returns the given transition's start node."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:99
+msgid "Returns the given transition's end node."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:106
+msgid "Returns [code]true[/code] if the graph contains the given node."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:114
+msgid ""
+"Returns [code]true[/code] if there is a transition between the given nodes."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:121
+msgid "Deletes the given node from the graph."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:129
+msgid "Deletes the transition between the two specified nodes."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:136
+msgid "Deletes the given transition by index."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:144
+msgid "Renames the given node."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:152
+msgid "Replaces the node and keeps its transitions unchanged."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:159
+msgid "Sets the given node as the graph end point."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:166
+msgid "Sets the draw offset of the graph. Used for display in the editor."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:174
+msgid "Sets the node's coordinates. Used for display in the editor."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:181
+msgid "Sets the given node as the graph start point."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachinePlayback.xml:4
+msgid "Playback control for [AnimationNodeStateMachine]."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachinePlayback.xml:7
+msgid ""
+"Allows control of [AnimationTree] state machines created with "
+"[AnimationNodeStateMachine]. Retrieve with [code]$AnimationTree."
+"get(\"parameters/playback\")[/code].\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"var state_machine = $AnimationTree.get(\"parameters/playback\")\n"
+"state_machine.travel(\"some_state\")\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachinePlayback.xml:26
+msgid "Returns the currently playing animation state."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachinePlayback.xml:32
+msgid "Returns the playback position within the current animation state."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachinePlayback.xml:38
+msgid ""
+"Returns the current travel path as computed internally by the A* algorithm."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachinePlayback.xml:44
+msgid "Returns [code]true[/code] if an animation is playing."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachinePlayback.xml:51
+msgid "Starts playing the given animation."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachinePlayback.xml:57
+msgid "Stops the currently playing animation."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachinePlayback.xml:64
+msgid ""
+"Transitions from the current state to another one, following the shortest "
+"path."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachineTransition.xml:14
+msgid ""
+"Turn on auto advance when this condition is set. The provided name will "
+"become a boolean parameter on the [AnimationTree] that can be controlled "
+"from code (see [url=https://docs.godotengine.org/en/3.4/tutorials/animation/"
+"animation_tree.html#controlling-from-code][/url]). For example, if [member "
+"AnimationTree.tree_root] is an [AnimationNodeStateMachine] and [member "
+"advance_condition] is set to [code]\"idle\"[/code]:\n"
+"[codeblock]\n"
+"$animation_tree[\"parameters/conditions/idle\"] = is_on_floor and "
+"(linear_velocity.x == 0)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachineTransition.xml:20
+msgid ""
+"Turn on the transition automatically when this state is reached. This works "
+"best with [constant SWITCH_MODE_AT_END]."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachineTransition.xml:23
+msgid ""
+"Don't use this transition during [method AnimationNodeStateMachinePlayback."
+"travel] or [member auto_advance]."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachineTransition.xml:26
+msgid ""
+"Lower priority transitions are preferred when travelling through the tree "
+"via [method AnimationNodeStateMachinePlayback.travel] or [member "
+"auto_advance]."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachineTransition.xml:29
+msgid "The transition type."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachineTransition.xml:32
+msgid "The time to cross-fade between this state and the next."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachineTransition.xml:38
+msgid "Emitted when [member advance_condition] is changed."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachineTransition.xml:44
+msgid ""
+"Switch to the next state immediately. The current state will end and blend "
+"into the beginning of the new one."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachineTransition.xml:47
+msgid ""
+"Switch to the next state immediately, but will seek the new state to the "
+"playback position of the old state."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachineTransition.xml:50
+msgid ""
+"Wait for the current state playback to end, then switch to the beginning of "
+"the next state animation."
+msgstr ""
+
+#: doc/classes/AnimationNodeTimeScale.xml:4
+msgid "A time-scaling animation node to be used with [AnimationTree]."
+msgstr ""
+
+#: doc/classes/AnimationNodeTimeScale.xml:7
+msgid ""
+"Allows scaling the speed of the animation (or reversing it) in any children "
+"nodes. Setting it to 0 will pause the animation."
+msgstr ""
+
+#: doc/classes/AnimationNodeTimeSeek.xml:4
+msgid "A time-seeking animation node to be used with [AnimationTree]."
+msgstr ""
+
+#: doc/classes/AnimationNodeTimeSeek.xml:7
+msgid ""
+"This node can be used to cause a seek command to happen to any sub-children "
+"of the animation graph. Use this node type to play an [Animation] from the "
+"start or a certain playback position inside the [AnimationNodeBlendTree]. "
+"After setting the time and changing the animation playback, the seek node "
+"automatically goes into sleep mode on the next process frame by setting its "
+"[code]seek_position[/code] value to [code]-1.0[/code].\n"
+"[codeblock]\n"
+"# Play child animation from the start.\n"
+"animation_tree.set(\"parameters/Seek/seek_position\", 0.0)\n"
+"# Alternative syntax (same result as above).\n"
+"animation_tree[\"parameters/Seek/seek_position\"] = 0.0\n"
+"\n"
+"# Play child animation from 12 second timestamp.\n"
+"animation_tree.set(\"parameters/Seek/seek_position\", 12.0)\n"
+"# Alternative syntax (same result as above).\n"
+"animation_tree[\"parameters/Seek/seek_position\"] = 12.0\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/AnimationNodeTransition.xml:4
+msgid "A generic animation transition node for [AnimationTree]."
+msgstr ""
+
+#: doc/classes/AnimationNodeTransition.xml:7
+msgid ""
+"Simple state machine for cases which don't require a more advanced "
+"[AnimationNodeStateMachine]. Animations can be connected to the inputs and "
+"transition times can be specified."
+msgstr ""
+
+#: doc/classes/AnimationNodeTransition.xml:44
+msgid "The number of available input ports for this node."
+msgstr ""
+
+#: doc/classes/AnimationNodeTransition.xml:47
+msgid ""
+"Cross-fading time (in seconds) between each animation connected to the "
+"inputs."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:4
+msgid "Container and player of [Animation] resources."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:7
+msgid ""
+"An animation player is used for general-purpose playback of [Animation] "
+"resources. It contains a dictionary of animations (referenced by name) and "
+"custom blend times between their transitions. Additionally, animations can "
+"be played and blended in different channels.\n"
+"[AnimationPlayer] is more suited than [Tween] for animations where you know "
+"the final values in advance. For example, fading a screen in and out is more "
+"easily done with an [AnimationPlayer] node thanks to the animation tools "
+"provided by the editor. That particular example can also be implemented with "
+"a [Tween] node, but it requires doing everything by code.\n"
+"Updating the target properties of animations occurs at process time."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:22
+msgid ""
+"Adds [code]animation[/code] to the player accessible with the key "
+"[code]name[/code]."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:29
+msgid ""
+"Shifts position in the animation timeline and immediately updates the "
+"animation. [code]delta[/code] is the time in seconds to shift. Events "
+"between the current frame and [code]delta[/code] are handled."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:36
+msgid "Returns the name of the next animation in the queue."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:44
+msgid ""
+"Triggers the [code]anim_to[/code] animation when the [code]anim_from[/code] "
+"animation completes."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:50
+msgid ""
+"[AnimationPlayer] caches animated nodes. It may not notice if a node "
+"disappears; [method clear_caches] forces it to update the cache again."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:56
+msgid "Clears all queued, unplayed animations."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:63
+msgid ""
+"Returns the name of [code]animation[/code] or an empty string if not found."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:70
+msgid ""
+"Returns the [Animation] with key [code]name[/code] or [code]null[/code] if "
+"not found."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:76
+msgid "Returns the list of stored animation names."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:84
+msgid ""
+"Gets the blend time (in seconds) between two animations, referenced by their "
+"names."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:90
+msgid ""
+"Gets the actual playing speed of current animation or 0 if not playing. This "
+"speed is the [member playback_speed] property multiplied by "
+"[code]custom_speed[/code] argument specified when calling the [method play] "
+"method."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:96
+msgid ""
+"Returns a list of the animation names that are currently queued to play."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:103
+msgid ""
+"Returns [code]true[/code] if the [AnimationPlayer] stores an [Animation] "
+"with key [code]name[/code]."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:109
+msgid "Returns [code]true[/code] if playing an animation."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:119
+msgid ""
+"Plays the animation with key [code]name[/code]. Custom blend times and speed "
+"can be set. If [code]custom_speed[/code] is negative and [code]from_end[/"
+"code] is [code]true[/code], the animation will play backwards (which is "
+"equivalent to calling [method play_backwards]).\n"
+"The [AnimationPlayer] keeps track of its current or last played animation "
+"with [member assigned_animation]. If this method is called with that same "
+"animation [code]name[/code], or with no [code]name[/code] parameter, the "
+"assigned animation will resume playing if it was paused, or restart if it "
+"was stopped (see [method stop] for both pause and stop). If the animation "
+"was already playing, it will keep playing.\n"
+"[b]Note:[/b] The animation will be updated the next time the "
+"[AnimationPlayer] is processed. If other variables are updated at the same "
+"time this is called, they may be updated too early. To perform the update "
+"immediately, call [code]advance(0)[/code]."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:129
+msgid ""
+"Plays the animation with key [code]name[/code] in reverse.\n"
+"This method is a shorthand for [method play] with [code]custom_speed = -1.0[/"
+"code] and [code]from_end = true[/code], so see its description for more "
+"information."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:137
+msgid ""
+"Queues an animation for playback once the current one is done.\n"
+"[b]Note:[/b] If a looped animation is currently playing, the queued "
+"animation will never play unless the looped animation is stopped somehow."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:145
+msgid "Removes the animation with key [code]name[/code]."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:153
+msgid ""
+"Renames an existing animation with key [code]name[/code] to [code]newname[/"
+"code]."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:161
+msgid ""
+"Seeks the animation to the [code]seconds[/code] point in time (in seconds). "
+"If [code]update[/code] is [code]true[/code], the animation updates too, "
+"otherwise it updates at process time. Events between the current frame and "
+"[code]seconds[/code] are skipped."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:170
+msgid ""
+"Specifies a blend time (in seconds) between two animations, referenced by "
+"their names."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:177
+msgid ""
+"Stops or pauses the currently playing animation. If [code]reset[/code] is "
+"[code]true[/code], the animation position is reset to [code]0[/code] and the "
+"playback speed is reset to [code]1.0[/code].\n"
+"If [code]reset[/code] is [code]false[/code], the [member "
+"current_animation_position] will be kept and calling [method play] or "
+"[method play_backwards] without arguments or with the same animation name as "
+"[member assigned_animation] will resume the animation."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:184
+msgid ""
+"If playing, the current animation; otherwise, the animation last played. "
+"When set, would change the animation, but would not play it unless currently "
+"playing. See also [member current_animation]."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:187
+msgid "The name of the animation to play when the scene loads."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:190
+msgid ""
+"The name of the currently playing animation. If no animation is playing, the "
+"property's value is an empty string. Changing this value does not restart "
+"the animation. See [method play] for more information on playing "
+"animations.\n"
+"[b]Note:[/b] While this property appears in the inspector, it's not meant to "
+"be edited, and it's not saved in the scene. This property is mainly used to "
+"get the currently playing animation, and internally for animation playback "
+"tracks. For more information, see [Animation]."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:194
+msgid "The length (in seconds) of the currently being played animation."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:197
+msgid "The position (in seconds) of the currently playing animation."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:200
+msgid "The call mode to use for Call Method tracks."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:203
+msgid ""
+"If [code]true[/code], updates animations in response to process-related "
+"notifications."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:206
+msgid ""
+"The default time in which to blend animations. Ranges from 0 to 4096 with "
+"0.01 precision."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:209
+msgid "The process notification in which to update animations."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:212
+msgid ""
+"The speed scaling ratio. For instance, if this value is 1, then the "
+"animation plays at normal speed. If it's 0.5, then it plays at half speed. "
+"If it's 2, then it plays at double speed."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:215
+msgid ""
+"This is used by the editor. If set to [code]true[/code], the scene will be "
+"saved with the effects of the reset animation applied (as if it had been "
+"seeked to time 0), then reverted after saving.\n"
+"In other words, the saved scene file will contain the \"default pose\", as "
+"defined by the reset animation, if any, with the editor keeping the values "
+"that the nodes had before saving."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:219
+msgid "The node from which node path references will travel."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:227
+msgid ""
+"Emitted when a queued animation plays after the previous animation was "
+"finished. See [method queue].\n"
+"[b]Note:[/b] The signal is not emitted when the animation is changed via "
+"[method play] or from [AnimationTree]."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:234
+msgid "Notifies when an animation finished playing."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:240
+msgid "Notifies when an animation starts playing."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:245
+msgid ""
+"Notifies when the caches have been cleared, either automatically, or "
+"manually via [method clear_caches]."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:251 doc/classes/AnimationTreePlayer.xml:505
+msgid ""
+"Process animation during the physics process. This is especially useful when "
+"animating physics bodies."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:254 doc/classes/AnimationTreePlayer.xml:508
+msgid "Process animation during the idle process."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:257
+msgid ""
+"Do not process animation. Use [method advance] to process the animation "
+"manually."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:260
+msgid ""
+"Batch method calls during the animation process, then do the calls after "
+"events are processed. This avoids bugs involving deleting nodes or modifying "
+"the AnimationPlayer while playing."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:263
+msgid "Make method calls immediately when reached in the animation."
+msgstr ""
+
+#: doc/classes/AnimationTree.xml:4
+msgid ""
+"A node to be used for advanced animation transitions in an [AnimationPlayer]."
+msgstr ""
+
+#: doc/classes/AnimationTree.xml:7
+msgid ""
+"A node to be used for advanced animation transitions in an "
+"[AnimationPlayer].\n"
+"[b]Note:[/b] When linked with an [AnimationPlayer], several properties and "
+"methods of the corresponding [AnimationPlayer] will not function as "
+"expected. Playback and transitions should be handled using only the "
+"[AnimationTree] and its constituent [AnimationNode](s). The "
+"[AnimationPlayer] node should be used solely for adding, deleting, and "
+"editing animations."
+msgstr ""
+
+#: doc/classes/AnimationTree.xml:19
+msgid "Manually advance the animations by the specified time (in seconds)."
+msgstr ""
+
+#: doc/classes/AnimationTree.xml:25
+msgid ""
+"Retrieve the motion of the [member root_motion_track] as a [Transform] that "
+"can be used elsewhere. If [member root_motion_track] is not a path to a "
+"track of type [constant Animation.TYPE_TRANSFORM], returns an identity "
+"transformation. See also [member root_motion_track] and [RootMotionView]."
+msgstr ""
+
+#: doc/classes/AnimationTree.xml:38
+msgid "If [code]true[/code], the [AnimationTree] will be processing."
+msgstr ""
+
+#: doc/classes/AnimationTree.xml:41
+msgid "The path to the [AnimationPlayer] used for animating."
+msgstr ""
+
+#: doc/classes/AnimationTree.xml:44
+msgid ""
+"The process mode of this [AnimationTree]. See [enum AnimationProcessMode] "
+"for available modes."
+msgstr ""
+
+#: doc/classes/AnimationTree.xml:47
+msgid ""
+"The path to the Animation track used for root motion. Paths must be valid "
+"scene-tree paths to a node, and must be specified starting from the parent "
+"node of the node that will reproduce the animation. To specify a track that "
+"controls properties or bones, append its name after the path, separated by "
+"[code]\":\"[/code]. For example, [code]\"character/skeleton:ankle\"[/code] "
+"or [code]\"character/mesh:transform/local\"[/code].\n"
+"If the track has type [constant Animation.TYPE_TRANSFORM], the "
+"transformation will be cancelled visually, and the animation will appear to "
+"stay in place. See also [method get_root_motion_transform] and "
+"[RootMotionView]."
+msgstr ""
+
+#: doc/classes/AnimationTree.xml:51
+msgid "The root animation node of this [AnimationTree]. See [AnimationNode]."
+msgstr ""
+
+#: doc/classes/AnimationTree.xml:56
+msgid ""
+"The animations will progress during the physics frame (i.e. [method Node."
+"_physics_process])."
+msgstr ""
+
+#: doc/classes/AnimationTree.xml:59
+msgid ""
+"The animations will progress during the idle frame (i.e. [method Node."
+"_process])."
+msgstr ""
+
+#: doc/classes/AnimationTree.xml:62
+msgid "The animations will only progress manually (see [method advance])."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:4
+msgid ""
+"[i]Deprecated.[/i] Animation player that uses a node graph for blending "
+"animations. Superseded by [AnimationTree]."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:7
+msgid ""
+"[i]Deprecated.[/i] A node graph tool for blending multiple animations bound "
+"to an [AnimationPlayer]. Especially useful for animating characters or other "
+"skeleton-based rigs. It can combine several animations to form a desired "
+"pose.\n"
+"It takes [Animation]s from an [AnimationPlayer] node and mixes them "
+"depending on the graph.\n"
+"See [AnimationTree] for a more full-featured replacement of this node."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:20
+msgid "Adds a [code]type[/code] node to the graph with name [code]id[/code]."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:27
+msgid ""
+"Shifts position in the animation timeline. [code]delta[/code] is the time in "
+"seconds to shift. Events between the current frame and [code]delta[/code] "
+"are handled."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:34
+msgid ""
+"Returns the [AnimationPlayer]'s [Animation] bound to the "
+"[AnimationTreePlayer]'s animation node with name [code]id[/code]."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:41
+msgid ""
+"Returns the name of the [member master_player]'s [Animation] bound to this "
+"animation node."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:48
+msgid ""
+"Returns the absolute playback timestamp of the animation node with name "
+"[code]id[/code]."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:56
+msgid ""
+"Binds a new [Animation] from the [member master_player] to the "
+"[AnimationTreePlayer]'s animation node with name [code]id[/code]."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:65
+msgid ""
+"If [code]enable[/code] is [code]true[/code], the animation node with ID "
+"[code]id[/code] turns off the track modifying the property at [code]path[/"
+"code]. The modified node's children continue to animate."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:73
+msgid ""
+"Binds the [Animation] named [code]source[/code] from [member master_player] "
+"to the animation node [code]id[/code]. Recalculates caches."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:82
+msgid ""
+"Returns whether node [code]id[/code] and [code]dst_id[/code] are connected "
+"at the specified slot."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:89
+msgid "Returns the blend amount of a Blend2 node given its name."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:97
+msgid ""
+"Sets the blend amount of a Blend2 node given its name and value.\n"
+"A Blend2 node blends two animations (A and B) with the amount between 0 and "
+"1.\n"
+"At 0, output is input A. Towards 1, the influence of A gets lessened, the "
+"influence of B gets raised. At 1, output is input B."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:108
+msgid ""
+"If [code]enable[/code] is [code]true[/code], the Blend2 node with name "
+"[code]id[/code] turns off the track modifying the property at [code]path[/"
+"code]. The modified node's children continue to animate."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:115
+msgid "Returns the blend amount of a Blend3 node given its name."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:123
+msgid ""
+"Sets the blend amount of a Blend3 node given its name and value.\n"
+"A Blend3 Node blends three animations (A, B-, B+) with the amount between -1 "
+"and 1.\n"
+"At -1, output is input B-. From -1 to 0, the influence of B- gets lessened, "
+"the influence of A gets raised and the influence of B+ is 0. At 0, output is "
+"input A. From 0 to 1, the influence of A gets lessened, the influence of B+ "
+"gets raised and the influence of B+ is 0. At 1, output is input B+."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:132
+msgid "Returns the blend amount of a Blend4 node given its name."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:140
+msgid ""
+"Sets the blend amount of a Blend4 node given its name and value.\n"
+"A Blend4 Node blends two pairs of animations.\n"
+"The two pairs are blended like Blend2 and then added together."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:151
+msgid ""
+"Connects node [code]id[/code] to [code]dst_id[/code] at the specified input "
+"slot."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:159
+msgid ""
+"Disconnects nodes connected to [code]id[/code] at the specified input slot."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:165
+msgid "Returns a [PoolStringArray] containing the name of all nodes."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:172
+msgid "Returns the mix amount of a Mix node given its name."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:180
+msgid ""
+"Sets the mix amount of a Mix node given its name and value.\n"
+"A Mix node adds input b to input a by the amount given by ratio."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:188
+msgid "Check if a node exists (by name)."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:195
+msgid ""
+"Returns the input count for a given node. Different types of nodes have "
+"different amount of inputs."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:203
+msgid "Returns the input source for a given node input."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:210
+msgid "Returns position of a node in the graph given its name."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:217
+msgid "Gets the node type, will return from [enum NodeType] enum."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:225
+msgid "Renames a node in the graph."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:233
+msgid "Sets the position of a node in the graph given its name and position."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:240
+msgid "Returns the autostart delay of a OneShot node given its name."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:247
+msgid "Returns the autostart random delay of a OneShot node given its name."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:254
+msgid "Returns the fade in time of a OneShot node given its name."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:261
+msgid "Returns the fade out time of a OneShot node given its name."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:268
+msgid "Returns whether a OneShot node will auto restart given its name."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:275
+msgid "Returns whether a OneShot node is active given its name."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:283
+msgid ""
+"Sets the autorestart property of a OneShot node given its name and value."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:291
+msgid ""
+"Sets the autorestart delay of a OneShot node given its name and value in "
+"seconds."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:299
+msgid ""
+"Sets the autorestart random delay of a OneShot node given its name and value "
+"in seconds."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:307
+msgid ""
+"Sets the fade in time of a OneShot node given its name and value in seconds."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:315
+msgid ""
+"Sets the fade out time of a OneShot node given its name and value in seconds."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:324
+msgid ""
+"If [code]enable[/code] is [code]true[/code], the OneShot node with ID "
+"[code]id[/code] turns off the track modifying the property at [code]path[/"
+"code]. The modified node's children continue to animate."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:331
+msgid "Starts a OneShot node given its name."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:338
+msgid "Stops the OneShot node with name [code]id[/code]."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:344
+msgid ""
+"Manually recalculates the cache of track information generated from "
+"animation nodes. Needed when external sources modify the animation nodes' "
+"state."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:351
+msgid "Removes the animation node with name [code]id[/code]."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:357
+msgid "Resets this [AnimationTreePlayer]."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:364
+msgid ""
+"Returns the time scale value of the TimeScale node with name [code]id[/code]."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:372
+msgid ""
+"Sets the time scale of the TimeScale node with name [code]id[/code] to "
+"[code]scale[/code].\n"
+"The TimeScale node is used to speed [Animation]s up if the scale is above 1 "
+"or slow them down if it is below 1.\n"
+"If applied after a blend or mix, affects all input animations to that blend "
+"or mix."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:382
+msgid ""
+"Sets the time seek value of the TimeSeek node with name [code]id[/code] to "
+"[code]seconds[/code].\n"
+"This functions as a seek in the [Animation] or the blend or mix of "
+"[Animation]s input in it."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:391
+msgid ""
+"Deletes the input at [code]input_idx[/code] for the transition node with "
+"name [code]id[/code]."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:398
+msgid ""
+"Returns the index of the currently evaluated input for the transition node "
+"with name [code]id[/code]."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:405
+msgid ""
+"Returns the number of inputs for the transition node with name [code]id[/"
+"code]. You can add inputs by right-clicking on the transition node."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:412
+msgid ""
+"Returns the cross fade time for the transition node with name [code]id[/"
+"code]."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:420
+msgid ""
+"Returns [code]true[/code] if the input at [code]input_idx[/code] on the "
+"transition node with name [code]id[/code] is set to automatically advance to "
+"the next input upon completion."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:428
+msgid ""
+"The transition node with name [code]id[/code] sets its current input at "
+"[code]input_idx[/code]."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:437
+msgid ""
+"The transition node with name [code]id[/code] advances to its next input "
+"automatically when the input at [code]input_idx[/code] completes."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:445
+msgid ""
+"Resizes the number of inputs available for the transition node with name "
+"[code]id[/code]."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:453
+msgid ""
+"The transition node with name [code]id[/code] sets its cross fade time to "
+"[code]time_sec[/code]."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:459
+msgid ""
+"If [code]true[/code], the [AnimationTreePlayer] is able to play animations."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:462
+msgid ""
+"The node from which to relatively access other nodes.\n"
+"It accesses the bones, so it should point to the same node the "
+"[AnimationPlayer] would point its Root Node at."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:466
+msgid ""
+"The path to the [AnimationPlayer] from which this [AnimationTreePlayer] "
+"binds animations to animation nodes.\n"
+"Once set, [Animation] nodes can be added to the [AnimationTreePlayer]."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:470
+msgid "The thread in which to update animations."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:475
+msgid "Output node."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:478
+msgid "Animation node."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:481
+msgid "OneShot node."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:484
+msgid "Mix node."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:487
+msgid "Blend2 node."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:490
+msgid "Blend3 node."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:493
+msgid "Blend4 node."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:496
+msgid "TimeScale node."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:499
+msgid "TimeSeek node."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:502
+msgid "Transition node."
+msgstr ""
+
+#: doc/classes/Area.xml:4
+msgid "3D area for detection and physics and audio influence."
+msgstr ""
+
+#: doc/classes/Area.xml:7
+msgid ""
+"3D area that detects [CollisionObject] nodes overlapping, entering, or "
+"exiting. Can also alter or override local physics parameters (gravity, "
+"damping) and route audio to custom audio buses."
+msgstr ""
+
+#: doc/classes/Area.xml:11 doc/classes/QuadMesh.xml:10
+#: doc/classes/Viewport.xml:17 doc/classes/ViewportTexture.xml:11
+msgid "https://godotengine.org/asset-library/asset/127"
+msgstr ""
+
+#: doc/classes/Area.xml:17
+msgid ""
+"Returns a list of intersecting [Area]s. The overlapping area's [member "
+"CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
+msgstr ""
+
+#: doc/classes/Area.xml:24
+msgid ""
+"Returns a list of intersecting [PhysicsBody]s. The overlapping body's "
+"[member CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
+msgstr ""
+
+#: doc/classes/Area.xml:32
+msgid ""
+"If [code]true[/code], the given area overlaps the Area.\n"
+"[b]Note:[/b] The result of this test is not immediate after moving objects. "
+"For performance, list of overlaps is updated once per frame and before the "
+"physics step. Consider using signals instead."
+msgstr ""
+
+#: doc/classes/Area.xml:40
+msgid ""
+"If [code]true[/code], the given physics body overlaps the Area.\n"
+"[b]Note:[/b] The result of this test is not immediate after moving objects. "
+"For performance, list of overlaps is updated once per frame and before the "
+"physics step. Consider using signals instead.\n"
+"The [code]body[/code] argument can either be a [PhysicsBody] or a [GridMap] "
+"instance (while GridMaps are not physics body themselves, they register "
+"their tiles with collision shapes as a virtual physics body)."
+msgstr ""
+
+#: doc/classes/Area.xml:48
+msgid ""
+"The rate at which objects stop spinning in this area. Represents the angular "
+"velocity lost per second.\n"
+"See [member ProjectSettings.physics/3d/default_angular_damp] for more "
+"details about damping."
+msgstr ""
+
+#: doc/classes/Area.xml:52 doc/classes/Area2D.xml:54
+msgid "The name of the area's audio bus."
+msgstr ""
+
+#: doc/classes/Area.xml:55 doc/classes/Area2D.xml:57
+msgid ""
+"If [code]true[/code], the area's audio bus overrides the default audio bus."
+msgstr ""
+
+#: doc/classes/Area.xml:58
+msgid ""
+"The area's gravity intensity (in meters per second squared). This value "
+"multiplies the gravity vector. This is useful to alter the force of gravity "
+"without altering its direction."
+msgstr ""
+
+#: doc/classes/Area.xml:61 doc/classes/Area2D.xml:63
+msgid ""
+"The falloff factor for point gravity. The greater the value, the faster "
+"gravity decreases with distance."
+msgstr ""
+
+#: doc/classes/Area.xml:64 doc/classes/Area2D.xml:66
+msgid ""
+"If [code]true[/code], gravity is calculated from a point (set via [member "
+"gravity_vec]). See also [member space_override]."
+msgstr ""
+
+#: doc/classes/Area.xml:67 doc/classes/Area2D.xml:69
+msgid ""
+"The area's gravity vector (not normalized). If gravity is a point (see "
+"[member gravity_point]), this will be the point of attraction."
+msgstr ""
+
+#: doc/classes/Area.xml:70
+msgid ""
+"The rate at which objects stop moving in this area. Represents the linear "
+"velocity lost per second.\n"
+"See [member ProjectSettings.physics/3d/default_linear_damp] for more details "
+"about damping."
+msgstr ""
+
+#: doc/classes/Area.xml:74 doc/classes/Area2D.xml:76
+msgid "If [code]true[/code], other monitoring areas can detect this area."
+msgstr ""
+
+#: doc/classes/Area.xml:77 doc/classes/Area2D.xml:79
+msgid ""
+"If [code]true[/code], the area detects bodies or areas entering and exiting "
+"it."
+msgstr ""
+
+#: doc/classes/Area.xml:80 doc/classes/Area2D.xml:82
+msgid "The area's priority. Higher priority areas are processed first."
+msgstr ""
+
+#: doc/classes/Area.xml:83
+msgid ""
+"The degree to which this area applies reverb to its associated audio. Ranges "
+"from [code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
+msgstr ""
+
+#: doc/classes/Area.xml:86
+msgid "If [code]true[/code], the area applies reverb to its associated audio."
+msgstr ""
+
+#: doc/classes/Area.xml:89
+msgid "The reverb bus name to use for this area's associated audio."
+msgstr ""
+
+#: doc/classes/Area.xml:92
+msgid ""
+"The degree to which this area's reverb is a uniform effect. Ranges from "
+"[code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
+msgstr ""
+
+#: doc/classes/Area.xml:95 doc/classes/Area2D.xml:85
+msgid ""
+"Override mode for gravity and damping calculations within this area. See "
+"[enum SpaceOverride] for possible values."
+msgstr ""
+
+#: doc/classes/Area.xml:102
+msgid ""
+"Emitted when another Area enters this Area. Requires [member monitoring] to "
+"be set to [code]true[/code].\n"
+"[code]area[/code] the other Area."
+msgstr ""
+
+#: doc/classes/Area.xml:109
+msgid ""
+"Emitted when another Area exits this Area. Requires [member monitoring] to "
+"be set to [code]true[/code].\n"
+"[code]area[/code] the other Area."
+msgstr ""
+
+#: doc/classes/Area.xml:119 doc/classes/Area.xml:132
+msgid ""
+"Emitted when one of another Area's [Shape]s enters one of this Area's "
+"[Shape]s. Requires [member monitoring] to be set to [code]true[/code].\n"
+"[code]area_rid[/code] the [RID] of the other Area's [CollisionObject] used "
+"by the [PhysicsServer].\n"
+"[code]area[/code] the other Area.\n"
+"[code]area_shape_index[/code] the index of the [Shape] of the other Area "
+"used by the [PhysicsServer]. Get the [CollisionShape] node with [code]area."
+"shape_owner_get_owner(area_shape_index)[/code].\n"
+"[code]local_shape_index[/code] the index of the [Shape] of this Area used by "
+"the [PhysicsServer]. Get the [CollisionShape] node with [code]self."
+"shape_owner_get_owner(local_shape_index)[/code]."
+msgstr ""
+
+#: doc/classes/Area.xml:142
+msgid ""
+"Emitted when a [PhysicsBody] or [GridMap] enters this Area. Requires [member "
+"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
+"[MeshLibrary] has Collision [Shape]s.\n"
+"[code]body[/code] the [Node], if it exists in the tree, of the other "
+"[PhysicsBody] or [GridMap]."
+msgstr ""
+
+#: doc/classes/Area.xml:149
+msgid ""
+"Emitted when a [PhysicsBody] or [GridMap] exits this Area. Requires [member "
+"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
+"[MeshLibrary] has Collision [Shape]s.\n"
+"[code]body[/code] the [Node], if it exists in the tree, of the other "
+"[PhysicsBody] or [GridMap]."
+msgstr ""
+
+#: doc/classes/Area.xml:159 doc/classes/Area.xml:172
+msgid ""
+"Emitted when one of a [PhysicsBody] or [GridMap]'s [Shape]s enters one of "
+"this Area's [Shape]s. Requires [member monitoring] to be set to [code]true[/"
+"code]. [GridMap]s are detected if the [MeshLibrary] has Collision [Shape]s.\n"
+"[code]body_rid[/code] the [RID] of the [PhysicsBody] or [MeshLibrary]'s "
+"[CollisionObject] used by the [PhysicsServer].\n"
+"[code]body[/code] the [Node], if it exists in the tree, of the [PhysicsBody] "
+"or [GridMap].\n"
+"[code]body_shape_index[/code] the index of the [Shape] of the [PhysicsBody] "
+"or [GridMap] used by the [PhysicsServer]. Get the [CollisionShape] node with "
+"[code]body.shape_owner_get_owner(body_shape_index)[/code].\n"
+"[code]local_shape_index[/code] the index of the [Shape] of this Area used by "
+"the [PhysicsServer]. Get the [CollisionShape] node with [code]self."
+"shape_owner_get_owner(local_shape_index)[/code]."
+msgstr ""
+
+#: doc/classes/Area.xml:182 doc/classes/Area2D.xml:172
+msgid "This area does not affect gravity/damping."
+msgstr ""
+
+#: doc/classes/Area.xml:185 doc/classes/Area2D.xml:175
+msgid ""
+"This area adds its gravity/damping values to whatever has been calculated so "
+"far (in [member priority] order)."
+msgstr ""
+
+#: doc/classes/Area.xml:188 doc/classes/Area2D.xml:178
+msgid ""
+"This area adds its gravity/damping values to whatever has been calculated so "
+"far (in [member priority] order), ignoring any lower priority areas."
+msgstr ""
+
+#: doc/classes/Area.xml:191 doc/classes/Area2D.xml:181
+msgid ""
+"This area replaces any gravity/damping, even the defaults, ignoring any "
+"lower priority areas."
+msgstr ""
+
+#: doc/classes/Area.xml:194 doc/classes/Area2D.xml:184
+msgid ""
+"This area replaces any gravity/damping calculated so far (in [member "
+"priority] order), but keeps calculating the rest of the areas."
+msgstr ""
+
+#: doc/classes/Area2D.xml:4
+msgid "2D area for detection and physics and audio influence."
+msgstr ""
+
+#: doc/classes/Area2D.xml:7
+msgid ""
+"2D area that detects [CollisionObject2D] nodes overlapping, entering, or "
+"exiting. Can also alter or override local physics parameters (gravity, "
+"damping) and route audio to a custom audio bus."
+msgstr ""
+
+#: doc/classes/Area2D.xml:10
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/physics/using_area_2d.html"
+msgstr ""
+
+#: doc/classes/Area2D.xml:12 doc/classes/CollisionShape2D.xml:12
+#: doc/classes/RectangleShape2D.xml:10
+msgid "https://godotengine.org/asset-library/asset/121"
+msgstr ""
+
+#: doc/classes/Area2D.xml:13 doc/classes/Camera2D.xml:12
+#: doc/classes/KinematicBody2D.xml:15 doc/classes/TileMap.xml:12
+#: doc/classes/TileSet.xml:12
+msgid "https://godotengine.org/asset-library/asset/120"
+msgstr ""
+
+#: doc/classes/Area2D.xml:19
+msgid ""
+"Returns a list of intersecting [Area2D]s. The overlapping area's [member "
+"CollisionObject2D.collision_layer] must be part of this area's [member "
+"CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
+msgstr ""
+
+#: doc/classes/Area2D.xml:26
+msgid ""
+"Returns a list of intersecting [PhysicsBody2D]s. The overlapping body's "
+"[member CollisionObject2D.collision_layer] must be part of this area's "
+"[member CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
+msgstr ""
+
+#: doc/classes/Area2D.xml:34
+msgid ""
+"If [code]true[/code], the given area overlaps the Area2D.\n"
+"[b]Note:[/b] The result of this test is not immediate after moving objects. "
+"For performance, the list of overlaps is updated once per frame and before "
+"the physics step. Consider using signals instead."
+msgstr ""
+
+#: doc/classes/Area2D.xml:42
+msgid ""
+"If [code]true[/code], the given physics body overlaps the Area2D.\n"
+"[b]Note:[/b] The result of this test is not immediate after moving objects. "
+"For performance, list of overlaps is updated once per frame and before the "
+"physics step. Consider using signals instead.\n"
+"The [code]body[/code] argument can either be a [PhysicsBody2D] or a "
+"[TileMap] instance (while TileMaps are not physics bodies themselves, they "
+"register their tiles with collision shapes as a virtual physics body)."
+msgstr ""
+
+#: doc/classes/Area2D.xml:50
+msgid ""
+"The rate at which objects stop spinning in this area. Represents the angular "
+"velocity lost per second.\n"
+"See [member ProjectSettings.physics/2d/default_angular_damp] for more "
+"details about damping."
+msgstr ""
+
+#: doc/classes/Area2D.xml:60
+msgid ""
+"The area's gravity intensity (in pixels per second squared). This value "
+"multiplies the gravity vector. This is useful to alter the force of gravity "
+"without altering its direction."
+msgstr ""
+
+#: doc/classes/Area2D.xml:72
+msgid ""
+"The rate at which objects stop moving in this area. Represents the linear "
+"velocity lost per second.\n"
+"See [member ProjectSettings.physics/2d/default_linear_damp] for more details "
+"about damping."
+msgstr ""
+
+#: doc/classes/Area2D.xml:92
+msgid ""
+"Emitted when another Area2D enters this Area2D. Requires [member monitoring] "
+"to be set to [code]true[/code].\n"
+"[code]area[/code] the other Area2D."
+msgstr ""
+
+#: doc/classes/Area2D.xml:99
+msgid ""
+"Emitted when another Area2D exits this Area2D. Requires [member monitoring] "
+"to be set to [code]true[/code].\n"
+"[code]area[/code] the other Area2D."
+msgstr ""
+
+#: doc/classes/Area2D.xml:109
+msgid ""
+"Emitted when one of another Area2D's [Shape2D]s enters one of this Area2D's "
+"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
+"[code]area_rid[/code] the [RID] of the other Area2D's [CollisionObject2D] "
+"used by the [Physics2DServer].\n"
+"[code]area[/code] the other Area2D.\n"
+"[code]area_shape_index[/code] the index of the [Shape2D] of the other Area2D "
+"used by the [Physics2DServer]. Get the [CollisionShape2D] node with "
+"[code]area.shape_owner_get_owner(area_shape_index)[/code].\n"
+"[code]local_shape_index[/code] the index of the [Shape2D] of this Area2D "
+"used by the [Physics2DServer]. Get the [CollisionShape2D] node with "
+"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
+msgstr ""
+
+#: doc/classes/Area2D.xml:122
+msgid ""
+"Emitted when one of another Area2D's [Shape2D]s exits one of this Area2D's "
+"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
+"[code]area_rid[/code] the [RID] of the other Area2D's [CollisionObject2D] "
+"used by the [Physics2DServer].\n"
+"[code]area[/code] the other Area2D.\n"
+"[code]area_shape_index[/code] the index of the [Shape2D] of the other Area2D "
+"used by the [Physics2DServer]. Get the [CollisionShape2D] node with "
+"[code]area.shape_owner_get_owner(area_shape_index)[/code].\n"
+"[code]local_shape_index[/code] the index of the [Shape2D] of this Area2D "
+"used by the [Physics2DServer]. Get the [CollisionShape2D] node with "
+"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
+msgstr ""
+
+#: doc/classes/Area2D.xml:132
+msgid ""
+"Emitted when a [PhysicsBody2D] or [TileMap] enters this Area2D. Requires "
+"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
+"if the [TileSet] has Collision [Shape2D]s.\n"
+"[code]body[/code] the [Node], if it exists in the tree, of the other "
+"[PhysicsBody2D] or [TileMap]."
+msgstr ""
+
+#: doc/classes/Area2D.xml:139
+msgid ""
+"Emitted when a [PhysicsBody2D] or [TileMap] exits this Area2D. Requires "
+"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
+"if the [TileSet] has Collision [Shape2D]s.\n"
+"[code]body[/code] the [Node], if it exists in the tree, of the other "
+"[PhysicsBody2D] or [TileMap]."
+msgstr ""
+
+#: doc/classes/Area2D.xml:149
+msgid ""
+"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s enters one "
+"of this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
+"[code]true[/code]. [TileMap]s are detected if the [TileSet] has Collision "
+"[Shape2D]s.\n"
+"[code]body_rid[/code] the [RID] of the [PhysicsBody2D] or [TileSet]'s "
+"[CollisionObject2D] used by the [Physics2DServer].\n"
+"[code]body[/code] the [Node], if it exists in the tree, of the "
+"[PhysicsBody2D] or [TileMap].\n"
+"[code]body_shape_index[/code] the index of the [Shape2D] of the "
+"[PhysicsBody2D] or [TileMap] used by the [Physics2DServer]. Get the "
+"[CollisionShape2D] node with [code]body."
+"shape_owner_get_owner(body_shape_index)[/code].\n"
+"[code]local_shape_index[/code] the index of the [Shape2D] of this Area2D "
+"used by the [Physics2DServer]. Get the [CollisionShape2D] node with "
+"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
+msgstr ""
+
+#: doc/classes/Area2D.xml:162
+msgid ""
+"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s exits one of "
+"this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
+"[code]true[/code]. [TileMap]s are detected if the [TileSet] has Collision "
+"[Shape2D]s.\n"
+"[code]body_rid[/code] the [RID] of the [PhysicsBody2D] or [TileSet]'s "
+"[CollisionObject2D] used by the [Physics2DServer].\n"
+"[code]body[/code] the [Node], if it exists in the tree, of the "
+"[PhysicsBody2D] or [TileMap].\n"
+"[code]body_shape_index[/code] the index of the [Shape2D] of the "
+"[PhysicsBody2D] or [TileMap] used by the [Physics2DServer]. Get the "
+"[CollisionShape2D] node with [code]body."
+"shape_owner_get_owner(body_shape_index)[/code].\n"
+"[code]local_shape_index[/code] the index of the [Shape2D] of this Area2D "
+"used by the [Physics2DServer]. Get the [CollisionShape2D] node with "
+"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
+msgstr ""
+
+#: doc/classes/Array.xml:4
+msgid "A generic array datatype."
+msgstr ""
+
+#: doc/classes/Array.xml:7
+msgid ""
+"A generic array that can contain several elements of any type, accessible by "
+"a numerical index starting at 0. Negative indices can be used to count from "
+"the back, like in Python (-1 is the last element, -2 is the second to last, "
+"etc.).\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"var array = [\"One\", 2, 3, \"Four\"]\n"
+"print(array[0]) # One.\n"
+"print(array[2]) # 3.\n"
+"print(array[-1]) # Four.\n"
+"array[2] = \"Three\"\n"
+"print(array[-2]) # Three.\n"
+"[/codeblock]\n"
+"Arrays can be concatenated using the [code]+[/code] operator:\n"
+"[codeblock]\n"
+"var array1 = [\"One\", 2]\n"
+"var array2 = [3, \"Four\"]\n"
+"print(array1 + array2) # [\"One\", 2, 3, \"Four\"]\n"
+"[/codeblock]\n"
+"[b]Note:[/b] Concatenating with the [code]+=[/code] operator will create a "
+"new array, which has a cost. If you want to append another array to an "
+"existing array, [method append_array] is more efficient.\n"
+"[b]Note:[/b] Arrays are always passed by reference. To get a copy of an "
+"array that can be modified independently of the original array, use [method "
+"duplicate].\n"
+"[b]Note:[/b] When declaring an array with [code]const[/code], the array "
+"itself can still be mutated by defining the values at individual indices or "
+"pushing/removing elements. Using [code]const[/code] will only prevent "
+"assigning the constant with another value after it was initialized."
+msgstr ""
+
+#: doc/classes/Array.xml:34
+msgid "Constructs an array from a [PoolColorArray]."
+msgstr ""
+
+#: doc/classes/Array.xml:41
+msgid "Constructs an array from a [PoolVector3Array]."
+msgstr ""
+
+#: doc/classes/Array.xml:48
+msgid "Constructs an array from a [PoolVector2Array]."
+msgstr ""
+
+#: doc/classes/Array.xml:55
+msgid "Constructs an array from a [PoolStringArray]."
+msgstr ""
+
+#: doc/classes/Array.xml:62
+msgid "Constructs an array from a [PoolRealArray]."
+msgstr ""
+
+#: doc/classes/Array.xml:69
+msgid "Constructs an array from a [PoolIntArray]."
+msgstr ""
+
+#: doc/classes/Array.xml:76
+msgid "Constructs an array from a [PoolByteArray]."
+msgstr ""
+
+#: doc/classes/Array.xml:82 doc/classes/PoolByteArray.xml:23
+#: doc/classes/PoolColorArray.xml:23 doc/classes/PoolIntArray.xml:24
+#: doc/classes/PoolRealArray.xml:24 doc/classes/PoolStringArray.xml:24
+#: doc/classes/PoolVector2Array.xml:24 doc/classes/PoolVector3Array.xml:23
+msgid ""
+"Appends an element at the end of the array (alias of [method push_back])."
+msgstr ""
+
+#: doc/classes/Array.xml:88
+msgid ""
+"Appends another array at the end of this array.\n"
+"[codeblock]\n"
+"var array1 = [1, 2, 3]\n"
+"var array2 = [4, 5, 6]\n"
+"array1.append_array(array2)\n"
+"print(array1) # Prints [1, 2, 3, 4, 5, 6].\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Array.xml:100
+msgid ""
+"Returns the last element of the array. Prints an error and returns "
+"[code]null[/code] if the array is empty.\n"
+"[b]Note:[/b] Calling this function is not the same as writing [code]array[-1]"
+"[/code]. If the array is empty, accessing by index will pause project "
+"execution when running from the editor."
+msgstr ""
+
+#: doc/classes/Array.xml:109
+msgid ""
+"Finds the index of an existing value (or the insertion index that maintains "
+"sorting order, if the value is not yet present in the array) using binary "
+"search. Optionally, a [code]before[/code] specifier can be passed. If "
+"[code]false[/code], the returned index comes after all existing entries of "
+"the value in the array.\n"
+"[b]Note:[/b] Calling [method bsearch] on an unsorted array results in "
+"unexpected behavior."
+msgstr ""
+
+#: doc/classes/Array.xml:120
+msgid ""
+"Finds the index of an existing value (or the insertion index that maintains "
+"sorting order, if the value is not yet present in the array) using binary "
+"search and a custom comparison method declared in the [code]obj[/code]. "
+"Optionally, a [code]before[/code] specifier can be passed. If [code]false[/"
+"code], the returned index comes after all existing entries of the value in "
+"the array. The custom method receives two arguments (an element from the "
+"array and the value searched for) and must return [code]true[/code] if the "
+"first argument is less than the second, and return [code]false[/code] "
+"otherwise.\n"
+"[codeblock]\n"
+"func cardinal_to_algebraic(a):\n"
+" match a:\n"
+" \"one\":\n"
+" return 1\n"
+" \"two\":\n"
+" return 2\n"
+" \"three\":\n"
+" return 3\n"
+" \"four\":\n"
+" return 4\n"
+" _:\n"
+" return 0\n"
+"\n"
+"func compare(a, b):\n"
+" return cardinal_to_algebraic(a) < cardinal_to_algebraic(b)\n"
+"\n"
+"func _ready():\n"
+" var a = [\"one\", \"two\", \"three\", \"four\"]\n"
+" # `compare` is defined in this object, so we use `self` as the `obj` "
+"parameter.\n"
+" print(a.bsearch_custom(\"three\", self, \"compare\", true)) # Expected "
+"value is 2.\n"
+"[/codeblock]\n"
+"[b]Note:[/b] Calling [method bsearch_custom] on an unsorted array results in "
+"unexpected behavior."
+msgstr ""
+
+#: doc/classes/Array.xml:148
+msgid ""
+"Clears the array. This is equivalent to using [method resize] with a size of "
+"[code]0[/code]."
+msgstr ""
+
+#: doc/classes/Array.xml:155
+msgid "Returns the number of times an element is in the array."
+msgstr ""
+
+#: doc/classes/Array.xml:162
+msgid ""
+"Returns a copy of the array.\n"
+"If [code]deep[/code] is [code]true[/code], a deep copy is performed: all "
+"nested arrays and dictionaries are duplicated and will not be shared with "
+"the original array. If [code]false[/code], a shallow copy is made and "
+"references to the original nested arrays and dictionaries are kept, so that "
+"modifying a sub-array or dictionary in the copy will also impact those "
+"referenced in the source array."
+msgstr ""
+
+#: doc/classes/Array.xml:169 doc/classes/PoolByteArray.xml:61
+#: doc/classes/PoolColorArray.xml:35 doc/classes/PoolIntArray.xml:36
+#: doc/classes/PoolRealArray.xml:36 doc/classes/PoolStringArray.xml:36
+#: doc/classes/PoolVector2Array.xml:36 doc/classes/PoolVector3Array.xml:35
+msgid "Returns [code]true[/code] if the array is empty."
+msgstr ""
+
+#: doc/classes/Array.xml:175
+msgid ""
+"Removes the first occurrence of a value from the array. To remove an element "
+"by index, use [method remove] instead.\n"
+"[b]Note:[/b] This method acts in-place and doesn't return a value.\n"
+"[b]Note:[/b] On large arrays, this method will be slower if the removed "
+"element is close to the beginning of the array (index 0). This is because "
+"all elements placed after the removed element have to be reindexed."
+msgstr ""
+
+#: doc/classes/Array.xml:185
+msgid ""
+"Searches the array for a value and returns its index or [code]-1[/code] if "
+"not found. Optionally, the initial search index can be passed."
+msgstr ""
+
+#: doc/classes/Array.xml:192
+msgid ""
+"Searches the array in reverse order for a value and returns its index or "
+"[code]-1[/code] if not found."
+msgstr ""
+
+#: doc/classes/Array.xml:198
+msgid ""
+"Returns the first element of the array. Prints an error and returns "
+"[code]null[/code] if the array is empty.\n"
+"[b]Note:[/b] Calling this function is not the same as writing [code]array[0]"
+"[/code]. If the array is empty, accessing by index will pause project "
+"execution when running from the editor."
+msgstr ""
+
+#: doc/classes/Array.xml:206
+msgid ""
+"Returns [code]true[/code] if the array contains the given value.\n"
+"[codeblock]\n"
+"[\"inside\", 7].has(\"inside\") # True\n"
+"[\"inside\", 7].has(\"outside\") # False\n"
+"[\"inside\", 7].has(7) # True\n"
+"[\"inside\", 7].has(\"7\") # False\n"
+"[/codeblock]\n"
+"[b]Note:[/b] This is equivalent to using the [code]in[/code] operator as "
+"follows:\n"
+"[codeblock]\n"
+"# Will evaluate to `true`.\n"
+"if 2 in [2, 4, 6, 8]:\n"
+" pass\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Array.xml:224
+msgid ""
+"Returns a hashed integer value representing the array and its contents.\n"
+"[b]Note:[/b] Arrays with equal contents can still produce different hashes. "
+"Only the exact same arrays will produce the same hashed integer value."
+msgstr ""
+
+#: doc/classes/Array.xml:232
+msgid ""
+"Inserts a new element at a given position in the array. The position must be "
+"valid, or at the end of the array ([code]pos == size()[/code]).\n"
+"[b]Note:[/b] This method acts in-place and doesn't return a value.\n"
+"[b]Note:[/b] On large arrays, this method will be slower if the inserted "
+"element is close to the beginning of the array (index 0). This is because "
+"all elements placed after the newly inserted element have to be reindexed."
+msgstr ""
+
+#: doc/classes/Array.xml:239 doc/classes/PoolByteArray.xml:96
+#: doc/classes/PoolColorArray.xml:48 doc/classes/PoolIntArray.xml:49
+#: doc/classes/PoolRealArray.xml:49 doc/classes/PoolStringArray.xml:49
+#: doc/classes/PoolVector2Array.xml:49 doc/classes/PoolVector3Array.xml:48
+msgid "Reverses the order of the elements in the array."
+msgstr ""
+
+#: doc/classes/Array.xml:245
+msgid ""
+"Returns the maximum value contained in the array if all elements are of "
+"comparable types. If the elements can't be compared, [code]null[/code] is "
+"returned."
+msgstr ""
+
+#: doc/classes/Array.xml:251
+msgid ""
+"Returns the minimum value contained in the array if all elements are of "
+"comparable types. If the elements can't be compared, [code]null[/code] is "
+"returned."
+msgstr ""
+
+#: doc/classes/Array.xml:258
+msgid ""
+"Removes and returns the element of the array at index [code]position[/code]. "
+"If negative, [code]position[/code] is considered relative to the end of the "
+"array. Leaves the array untouched and returns [code]null[/code] if the array "
+"is empty or if it's accessed out of bounds. An error message is printed when "
+"the array is accessed out of bounds, but not when the array is empty.\n"
+"[b]Note:[/b] On large arrays, this method can be slower than [method "
+"pop_back] as it will reindex the array's elements that are located after the "
+"removed element. The larger the array and the lower the index of the removed "
+"element, the slower [method pop_at] will be."
+msgstr ""
+
+#: doc/classes/Array.xml:265
+msgid ""
+"Removes and returns the last element of the array. Returns [code]null[/code] "
+"if the array is empty, without printing an error message. See also [method "
+"pop_front]."
+msgstr ""
+
+#: doc/classes/Array.xml:271
+msgid ""
+"Removes and returns the first element of the array. Returns [code]null[/"
+"code] if the array is empty, without printing an error message. See also "
+"[method pop_back].\n"
+"[b]Note:[/b] On large arrays, this method is much slower than [method "
+"pop_back] as it will reindex all the array's elements every time it's "
+"called. The larger the array, the slower [method pop_front] will be."
+msgstr ""
+
+#: doc/classes/Array.xml:278
+msgid ""
+"Appends an element at the end of the array. See also [method push_front]."
+msgstr ""
+
+#: doc/classes/Array.xml:284
+msgid ""
+"Adds an element at the beginning of the array. See also [method push_back].\n"
+"[b]Note:[/b] On large arrays, this method is much slower than [method "
+"push_back] as it will reindex all the array's elements every time it's "
+"called. The larger the array, the slower [method push_front] will be."
+msgstr ""
+
+#: doc/classes/Array.xml:291
+msgid ""
+"Removes an element from the array by index. If the index does not exist in "
+"the array, nothing happens. To remove an element by searching for its value, "
+"use [method erase] instead.\n"
+"[b]Note:[/b] This method acts in-place and doesn't return a value.\n"
+"[b]Note:[/b] On large arrays, this method will be slower if the removed "
+"element is close to the beginning of the array (index 0). This is because "
+"all elements placed after the removed element have to be reindexed."
+msgstr ""
+
+#: doc/classes/Array.xml:299
+msgid ""
+"Resizes the array to contain a different number of elements. If the array "
+"size is smaller, elements are cleared, if bigger, new elements are "
+"[code]null[/code]."
+msgstr ""
+
+#: doc/classes/Array.xml:307
+msgid ""
+"Searches the array in reverse order. Optionally, a start search index can be "
+"passed. If negative, the start index is considered relative to the end of "
+"the array."
+msgstr ""
+
+#: doc/classes/Array.xml:312
+msgid ""
+"Shuffles the array such that the items will have a random order. This method "
+"uses the global random number generator common to methods such as [method "
+"@GDScript.randi]. Call [method @GDScript.randomize] to ensure that a new "
+"seed will be used each time if you want non-reproducible shuffling."
+msgstr ""
+
+#: doc/classes/Array.xml:318
+msgid "Returns the number of elements in the array."
+msgstr ""
+
+#: doc/classes/Array.xml:328
+msgid ""
+"Duplicates the subset described in the function and returns it in an array, "
+"deeply copying the array if [code]deep[/code] is [code]true[/code]. Lower "
+"and upper index are inclusive, with the [code]step[/code] describing the "
+"change between indices while slicing."
+msgstr ""
+
+#: doc/classes/Array.xml:333
+msgid ""
+"Sorts the array.\n"
+"[b]Note:[/b] Strings are sorted in alphabetical order (as opposed to natural "
+"order). This may lead to unexpected behavior when sorting an array of "
+"strings ending with a sequence of numbers. Consider the following example:\n"
+"[codeblock]\n"
+"var strings = [\"string1\", \"string2\", \"string10\", \"string11\"]\n"
+"strings.sort()\n"
+"print(strings) # Prints [string1, string10, string11, string2]\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Array.xml:346
+msgid ""
+"Sorts the array using a custom method. The arguments are an object that "
+"holds the method and the name of such method. The custom method receives two "
+"arguments (a pair of elements from the array) and must return either "
+"[code]true[/code] or [code]false[/code].\n"
+"For two elements [code]a[/code] and [code]b[/code], if the given method "
+"returns [code]true[/code], element [code]b[/code] will be after element "
+"[code]a[/code] in the array.\n"
+"[b]Note:[/b] You cannot randomize the return value as the heapsort algorithm "
+"expects a deterministic result. Doing so will result in unexpected "
+"behavior.\n"
+"[codeblock]\n"
+"class MyCustomSorter:\n"
+" static func sort_ascending(a, b):\n"
+" if a[0] < b[0]:\n"
+" return true\n"
+" return false\n"
+"\n"
+"var my_items = [[5, \"Potato\"], [9, \"Rice\"], [4, \"Tomato\"]]\n"
+"my_items.sort_custom(MyCustomSorter, \"sort_ascending\")\n"
+"print(my_items) # Prints [[4, Tomato], [5, Potato], [9, Rice]].\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:4
+msgid ""
+"[Mesh] type that provides utility for constructing a surface from arrays."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:7
+msgid ""
+"The [ArrayMesh] is used to construct a [Mesh] by specifying the attributes "
+"as arrays.\n"
+"The most basic example is the creation of a single triangle:\n"
+"[codeblock]\n"
+"var vertices = PoolVector3Array()\n"
+"vertices.push_back(Vector3(0, 1, 0))\n"
+"vertices.push_back(Vector3(1, 0, 0))\n"
+"vertices.push_back(Vector3(0, 0, 1))\n"
+"# Initialize the ArrayMesh.\n"
+"var arr_mesh = ArrayMesh.new()\n"
+"var arrays = []\n"
+"arrays.resize(ArrayMesh.ARRAY_MAX)\n"
+"arrays[ArrayMesh.ARRAY_VERTEX] = vertices\n"
+"# Create the Mesh.\n"
+"arr_mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, arrays)\n"
+"var m = MeshInstance.new()\n"
+"m.mesh = arr_mesh\n"
+"[/codeblock]\n"
+"The [MeshInstance] is ready to be added to the [SceneTree] to be shown.\n"
+"See also [ImmediateGeometry], [MeshDataTool] and [SurfaceTool] for "
+"procedural geometry generation.\n"
+"[b]Note:[/b] Godot uses clockwise [url=https://learnopengl.com/Advanced-"
+"OpenGL/Face-culling]winding order[/url] for front faces of triangle "
+"primitive modes."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:29
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/content/procedural_geometry/"
+"arraymesh.html"
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:36
+msgid ""
+"Adds name for a blend shape that will be added with [method "
+"add_surface_from_arrays]. Must be called before surface is added."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:46
+msgid ""
+"Creates a new surface.\n"
+"Surfaces are created to be rendered using a [code]primitive[/code], which "
+"may be any of the types defined in [enum Mesh.PrimitiveType]. (As a note, "
+"when using indices, it is recommended to only use points, lines, or "
+"triangles.) [method Mesh.get_surface_count] will become the [code]surf_idx[/"
+"code] for this new surface.\n"
+"The [code]arrays[/code] argument is an array of arrays. See [enum ArrayType] "
+"for the values used in this array. For example, [code]arrays[0][/code] is "
+"the array of vertices. That first vertex sub-array is always required; the "
+"others are optional. Adding an index array puts this function into \"index "
+"mode\" where the vertex and other arrays become the sources of data and the "
+"index array defines the vertex order. All sub-arrays must have the same "
+"length as the vertex array or be empty, except for [constant ARRAY_INDEX] if "
+"it is used."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:54
+msgid "Removes all blend shapes from this [ArrayMesh]."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:60
+msgid "Removes all surfaces from this [ArrayMesh]."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:66
+msgid "Returns the number of blend shapes that the [ArrayMesh] holds."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:73
+msgid "Returns the name of the blend shape at this index."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:81
+msgid ""
+"Will perform a UV unwrap on the [ArrayMesh] to prepare the mesh for "
+"lightmapping."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:87
+msgid "Will regenerate normal maps for the [ArrayMesh]."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:101
+msgid ""
+"Returns the index of the first surface with this name held within this "
+"[ArrayMesh]. If none are found, -1 is returned."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:108
+msgid ""
+"Returns the length in indices of the index array in the requested surface "
+"(see [method add_surface_from_arrays])."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:115
+msgid ""
+"Returns the length in vertices of the vertex array in the requested surface "
+"(see [method add_surface_from_arrays])."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:122
+msgid ""
+"Returns the format mask of the requested surface (see [method "
+"add_surface_from_arrays])."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:129
+msgid "Gets the name assigned to this surface."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:136
+msgid ""
+"Returns the primitive type of the requested surface (see [method "
+"add_surface_from_arrays])."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:143
+msgid ""
+"Removes a surface at position [code]surf_idx[/code], shifting greater "
+"surfaces one [code]surf_idx[/code] slot down."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:151
+msgid "Sets a name for a given surface."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:160
+msgid ""
+"Updates a specified region of mesh arrays on the GPU.\n"
+"[b]Warning:[/b] Only use if you know what you are doing. You can easily "
+"cause crashes by calling this function with improper arguments."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:167
+msgid "Sets the blend shape mode to one of [enum Mesh.BlendShapeMode]."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:170 doc/classes/PrimitiveMesh.xml:26
+msgid ""
+"Overrides the [AABB] with one defined by user for use with frustum culling. "
+"Especially useful to avoid unexpected culling when using a shader to offset "
+"vertices."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:175
+msgid "Default value used for index_array_len when no indices are present."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:178
+msgid "Amount of weights/bone indices per vertex (always 4)."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:181
+msgid "[PoolVector3Array], [PoolVector2Array], or [Array] of vertex positions."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:184
+msgid "[PoolVector3Array] of vertex normals."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:187
+msgid ""
+"[PoolRealArray] of vertex tangents. Each element in groups of 4 floats, "
+"first 3 floats determine the tangent, and the last the binormal direction as "
+"-1 or 1."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:190
+msgid "[PoolColorArray] of vertex colors."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:193
+msgid "[PoolVector2Array] for UV coordinates."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:196
+msgid "[PoolVector2Array] for second UV coordinates."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:199
+msgid ""
+"[PoolRealArray] or [PoolIntArray] of bone indices. Each element in groups of "
+"4 floats."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:202
+msgid "[PoolRealArray] of bone weights. Each element in groups of 4 floats."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:205
+msgid ""
+"[PoolIntArray] of integers used as indices referencing vertices, colors, "
+"normals, tangents, and textures. All of those arrays must have the same "
+"number of elements as the vertex array. No index can be beyond the vertex "
+"array size. When this index array is present, it puts the function into "
+"\"index mode,\" where the index selects the *i*'th vertex, normal, tangent, "
+"color, UV, etc. This means if you want to have different normals or colors "
+"along an edge, you have to duplicate the vertices.\n"
+"For triangles, the index array is interpreted as triples, referring to the "
+"vertices of each triangle. For lines, the index array is in pairs indicating "
+"the start and end of each line."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:209 doc/classes/Mesh.xml:225
+#: doc/classes/VisualServer.xml:3270
+msgid "Represents the size of the [enum ArrayType] enum."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:212
+msgid "Array format will include vertices (mandatory)."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:215
+msgid "Array format will include normals."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:218
+msgid "Array format will include tangents."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:221
+msgid "Array format will include a color array."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:224
+msgid "Array format will include UVs."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:227
+msgid "Array format will include another set of UVs."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:230
+msgid "Array format will include bone indices."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:233
+msgid "Array format will include bone weights."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:236
+msgid "Index array will be used."
+msgstr ""
+
+#: doc/classes/ARVRAnchor.xml:4
+msgid "An anchor point in AR space."
+msgstr ""
+
+#: doc/classes/ARVRAnchor.xml:7
+msgid ""
+"The [ARVRAnchor] point is a spatial node that maps a real world location "
+"identified by the AR platform to a position within the game world. For "
+"example, as long as plane detection in ARKit is on, ARKit will identify and "
+"update the position of planes (tables, floors, etc) and create anchors for "
+"them.\n"
+"This node is mapped to one of the anchors through its unique ID. When you "
+"receive a signal that a new anchor is available, you should add this node to "
+"your scene for that anchor. You can predefine nodes and set the ID; the "
+"nodes will simply remain on 0,0,0 until a plane is recognized.\n"
+"Keep in mind that, as long as plane detection is enabled, the size, placing "
+"and orientation of an anchor will be updated as the detection logic learns "
+"more about the real world out there especially if only part of the surface "
+"is in view."
+msgstr ""
+
+#: doc/classes/ARVRAnchor.xml:17
+msgid "Returns the name given to this anchor."
+msgstr ""
+
+#: doc/classes/ARVRAnchor.xml:23
+msgid ""
+"Returns [code]true[/code] if the anchor is being tracked and [code]false[/"
+"code] if no anchor with this ID is currently known."
+msgstr ""
+
+#: doc/classes/ARVRAnchor.xml:29
+msgid ""
+"If provided by the [ARVRInterface], this returns a mesh object for the "
+"anchor. For an anchor, this can be a shape related to the object being "
+"tracked or it can be a mesh that provides topology related to the anchor and "
+"can be used to create shadows/reflections on surfaces or for generating "
+"collision shapes."
+msgstr ""
+
+#: doc/classes/ARVRAnchor.xml:35
+msgid ""
+"Returns a plane aligned with our anchor; handy for intersection testing."
+msgstr ""
+
+#: doc/classes/ARVRAnchor.xml:41
+msgid ""
+"Returns the estimated size of the plane that was detected. Say when the "
+"anchor relates to a table in the real world, this is the estimated size of "
+"the surface of that table."
+msgstr ""
+
+#: doc/classes/ARVRAnchor.xml:47
+msgid ""
+"The anchor's ID. You can set this before the anchor itself exists. The first "
+"anchor gets an ID of [code]1[/code], the second an ID of [code]2[/code], "
+"etc. When anchors get removed, the engine can then assign the corresponding "
+"ID to new anchors. The most common situation where anchors \"disappear\" is "
+"when the AR server identifies that two anchors represent different parts of "
+"the same plane and merges them."
+msgstr ""
+
+#: doc/classes/ARVRAnchor.xml:54
+msgid ""
+"Emitted when the mesh associated with the anchor changes or when one becomes "
+"available. This is especially important for topology that is constantly "
+"being [code]mesh_updated[/code]."
+msgstr ""
+
+#: doc/classes/ARVRCamera.xml:4
+msgid ""
+"A camera node with a few overrules for AR/VR applied, such as location "
+"tracking."
+msgstr ""
+
+#: doc/classes/ARVRCamera.xml:7
+msgid ""
+"This is a helper spatial node for our camera; note that, if stereoscopic "
+"rendering is applicable (VR-HMD), most of the camera properties are ignored, "
+"as the HMD information overrides them. The only properties that can be "
+"trusted are the near and far planes.\n"
+"The position and orientation of this node is automatically updated by the "
+"ARVR Server to represent the location of the HMD if such tracking is "
+"available and can thus be used by game logic. Note that, in contrast to the "
+"ARVR Controller, the render thread has access to the most up-to-date "
+"tracking data of the HMD and the location of the ARVRCamera can lag a few "
+"milliseconds behind what is used for rendering as a result."
+msgstr ""
+
+#: doc/classes/ARVRCamera.xml:11 doc/classes/ARVRController.xml:12
+#: doc/classes/ARVRInterface.xml:11 doc/classes/ARVROrigin.xml:13
+#: doc/classes/ARVRPositionalTracker.xml:12 doc/classes/ARVRServer.xml:10
+msgid "https://docs.godotengine.org/en/3.4/tutorials/vr/index.html"
+msgstr ""
+
+#: doc/classes/ARVRController.xml:4
+msgid "A spatial node representing a spatially-tracked controller."
+msgstr ""
+
+#: doc/classes/ARVRController.xml:7
+msgid ""
+"This is a helper spatial node that is linked to the tracking of controllers. "
+"It also offers several handy passthroughs to the state of buttons and such "
+"on the controllers.\n"
+"Controllers are linked by their ID. You can create controller nodes before "
+"the controllers are available. If your game always uses two controllers (one "
+"for each hand), you can predefine the controllers with ID 1 and 2; they will "
+"become active as soon as the controllers are identified. If you expect "
+"additional controllers to be used, you should react to the signals and add "
+"ARVRController nodes to your scene.\n"
+"The position of the controller node is automatically updated by the "
+"[ARVRServer]. This makes this node ideal to add child nodes to visualize the "
+"controller."
+msgstr ""
+
+#: doc/classes/ARVRController.xml:18
+msgid ""
+"If active, returns the name of the associated controller if provided by the "
+"AR/VR SDK used."
+msgstr ""
+
+#: doc/classes/ARVRController.xml:24
+msgid ""
+"Returns the hand holding this controller, if known. See [enum "
+"ARVRPositionalTracker.TrackerHand]."
+msgstr ""
+
+#: doc/classes/ARVRController.xml:30
+msgid ""
+"Returns [code]true[/code] if the bound controller is active. ARVR systems "
+"attempt to track active controllers."
+msgstr ""
+
+#: doc/classes/ARVRController.xml:37
+msgid ""
+"Returns the value of the given axis for things like triggers, touchpads, "
+"etc. that are embedded into the controller."
+msgstr ""
+
+#: doc/classes/ARVRController.xml:43
+msgid ""
+"Returns the ID of the joystick object bound to this. Every controller "
+"tracked by the [ARVRServer] that has buttons and axis will also be "
+"registered as a joystick within Godot. This means that all the normal "
+"joystick tracking and input mapping will work for buttons and axis found on "
+"the AR/VR controllers. This ID is purely offered as information so you can "
+"link up the controller with its joystick entry."
+msgstr ""
+
+#: doc/classes/ARVRController.xml:49
+msgid ""
+"If provided by the [ARVRInterface], this returns a mesh associated with the "
+"controller. This can be used to visualize the controller."
+msgstr ""
+
+#: doc/classes/ARVRController.xml:56
+msgid ""
+"Returns [code]true[/code] if the button at index [code]button[/code] is "
+"pressed. See [enum JoystickList], in particular the [code]JOY_VR_*[/code] "
+"constants."
+msgstr ""
+
+#: doc/classes/ARVRController.xml:62
+msgid ""
+"The controller's ID.\n"
+"A controller ID of 0 is unbound and will always result in an inactive node. "
+"Controller ID 1 is reserved for the first controller that identifies itself "
+"as the left-hand controller and ID 2 is reserved for the first controller "
+"that identifies itself as the right-hand controller.\n"
+"For any other controller that the [ARVRServer] detects, we continue with "
+"controller ID 3.\n"
+"When a controller is turned off, its slot is freed. This ensures controllers "
+"will keep the same ID even when controllers with lower IDs are turned off."
+msgstr ""
+
+#: doc/classes/ARVRController.xml:68
+msgid ""
+"The degree to which the controller vibrates. Ranges from [code]0.0[/code] to "
+"[code]1.0[/code] with precision [code].01[/code]. If changed, updates "
+"[member ARVRPositionalTracker.rumble] accordingly.\n"
+"This is a useful property to animate if you want the controller to vibrate "
+"for a limited duration."
+msgstr ""
+
+#: doc/classes/ARVRController.xml:76
+msgid "Emitted when a button on this controller is pressed."
+msgstr ""
+
+#: doc/classes/ARVRController.xml:82
+msgid "Emitted when a button on this controller is released."
+msgstr ""
+
+#: doc/classes/ARVRController.xml:88
+msgid ""
+"Emitted when the mesh associated with the controller changes or when one "
+"becomes available. Generally speaking this will be a static mesh after "
+"becoming available."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:4
+msgid "Base class for an AR/VR interface implementation."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:7
+msgid ""
+"This class needs to be implemented to make an AR or VR platform available to "
+"Godot and these should be implemented as C++ modules or GDNative modules "
+"(note that for GDNative the subclass ARVRScriptInterface should be used). "
+"Part of the interface is exposed to GDScript so you can detect, enable and "
+"configure an AR or VR platform.\n"
+"Interfaces should be written in such a way that simply enabling them will "
+"give us a working setup. You can query the available interfaces through "
+"[ARVRServer]."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:17
+msgid ""
+"If this is an AR interface that requires displaying a camera feed as the "
+"background, this method returns the feed ID in the [CameraServer] for this "
+"interface."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:23
+msgid ""
+"Returns a combination of [enum Capabilities] flags providing information "
+"about the capabilities of this interface."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:29
+msgid "Returns the name of this interface (OpenVR, OpenHMD, ARKit, etc)."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:35
+msgid ""
+"Returns the resolution at which we should render our intermediate results "
+"before things like lens distortion are applied by the VR platform."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:41
+msgid ""
+"If supported, returns the status of our tracking. This will allow you to "
+"provide feedback to the user whether there are issues with positional "
+"tracking."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:47
+msgid ""
+"Call this to initialize this interface. The first interface that is "
+"initialized is identified as the primary interface and it will be used for "
+"rendering output.\n"
+"After initializing the interface you want to use you then need to enable the "
+"AR/VR mode of a viewport and rendering should commence.\n"
+"[b]Note:[/b] You must enable the AR/VR mode on the main viewport for any "
+"device that uses the main output of Godot, such as for mobile VR.\n"
+"If you do this for a platform that handles its own output (such as OpenVR) "
+"Godot will show just one eye without distortion on screen. Alternatively, "
+"you can add a separate viewport node to your scene and enable AR/VR on that "
+"viewport. It will be used to output to the HMD, leaving you free to do "
+"anything you like in the main window, such as using a separate camera as a "
+"spectator camera or rendering something completely different.\n"
+"While currently not used, you can activate additional interfaces. You may "
+"wish to do this if you want to track controllers from other platforms. "
+"However, at this point in time only one interface can render to an HMD."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:57
+msgid ""
+"Returns [code]true[/code] if the current output of this interface is in "
+"stereo."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:63
+msgid "Turns the interface off."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:69
+msgid "On an AR interface, [code]true[/code] if anchor detection is enabled."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:72
+msgid "[code]true[/code] if this interface been initialized."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:75
+msgid "[code]true[/code] if this is the primary interface."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:80
+msgid "No ARVR capabilities."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:83
+msgid ""
+"This interface can work with normal rendering output (non-HMD based AR)."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:86
+msgid "This interface supports stereoscopic rendering."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:89
+msgid "This interface supports AR (video background and real world tracking)."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:92
+msgid ""
+"This interface outputs to an external device. If the main viewport is used, "
+"the on screen output is an unmodified buffer of either the left or right eye "
+"(stretched if the viewport size is not changed to the same aspect ratio of "
+"[method get_render_targetsize]). Using a separate viewport node frees up the "
+"main viewport for other purposes."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:95
+msgid ""
+"Mono output, this is mostly used internally when retrieving positioning "
+"information for our camera node or when stereo scopic rendering is not "
+"supported."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:98
+msgid ""
+"Left eye output, this is mostly used internally when rendering the image for "
+"the left eye and obtaining positioning and projection information."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:101
+msgid ""
+"Right eye output, this is mostly used internally when rendering the image "
+"for the right eye and obtaining positioning and projection information."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:104
+msgid "Tracking is behaving as expected."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:107
+msgid ""
+"Tracking is hindered by excessive motion (the player is moving faster than "
+"tracking can keep up)."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:110
+msgid ""
+"Tracking is hindered by insufficient features, it's too dark (for camera-"
+"based tracking), player is blocked, etc."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:113
+msgid ""
+"We don't know the status of the tracking or this interface does not provide "
+"feedback."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:116
+msgid ""
+"Tracking is not functional (camera not plugged in or obscured, lighthouses "
+"turned off, etc.)."
+msgstr ""
+
+#: modules/gdnative/doc_classes/ARVRInterfaceGDNative.xml:4
+msgid "GDNative wrapper for an ARVR interface."
+msgstr ""
+
+#: modules/gdnative/doc_classes/ARVRInterfaceGDNative.xml:7
+msgid ""
+"This is a wrapper class for GDNative implementations of the ARVR interface. "
+"To use a GDNative ARVR interface, simply instantiate this object and set "
+"your GDNative library containing the ARVR interface implementation."
+msgstr ""
+
+#: doc/classes/ARVROrigin.xml:4
+msgid "The origin point in AR/VR."
+msgstr ""
+
+#: doc/classes/ARVROrigin.xml:7
+msgid ""
+"This is a special node within the AR/VR system that maps the physical "
+"location of the center of our tracking space to the virtual location within "
+"our game world.\n"
+"There should be only one of these nodes in your scene and you must have one. "
+"All the ARVRCamera, ARVRController and ARVRAnchor nodes should be direct "
+"children of this node for spatial tracking to work correctly.\n"
+"It is the position of this node that you update when your character needs to "
+"move through your game world while we're not moving in the real world. "
+"Movement in the real world is always in relation to this origin point.\n"
+"For example, if your character is driving a car, the ARVROrigin node should "
+"be a child node of this car. Or, if you're implementing a teleport system to "
+"move your character, you should change the position of this node."
+msgstr ""
+
+#: doc/classes/ARVROrigin.xml:19
+msgid ""
+"Allows you to adjust the scale to your game's units. Most AR/VR platforms "
+"assume a scale of 1 game world unit = 1 real world meter.\n"
+"[b]Note:[/b] This method is a passthrough to the [ARVRServer] itself."
+msgstr ""
+
+#: doc/classes/ARVRPositionalTracker.xml:4
+msgid "A tracked object."
+msgstr ""
+
+#: doc/classes/ARVRPositionalTracker.xml:7
+msgid ""
+"An instance of this object represents a device that is tracked, such as a "
+"controller or anchor point. HMDs aren't represented here as they are handled "
+"internally.\n"
+"As controllers are turned on and the AR/VR interface detects them, instances "
+"of this object are automatically added to this list of active tracking "
+"objects accessible through the [ARVRServer].\n"
+"The [ARVRController] and [ARVRAnchor] both consume objects of this type and "
+"should be used in your project. The positional trackers are just under-the-"
+"hood objects that make this all work. These are mostly exposed so that "
+"GDNative-based interfaces can interact with them."
+msgstr ""
+
+#: doc/classes/ARVRPositionalTracker.xml:18
+msgid ""
+"Returns the hand holding this tracker, if known. See [enum TrackerHand] "
+"constants."
+msgstr ""
+
+#: doc/classes/ARVRPositionalTracker.xml:24
+msgid ""
+"If this is a controller that is being tracked, the controller will also be "
+"represented by a joystick entry with this ID."
+msgstr ""
+
+#: doc/classes/ARVRPositionalTracker.xml:30
+msgid ""
+"Returns the mesh related to a controller or anchor point if one is available."
+msgstr ""
+
+#: doc/classes/ARVRPositionalTracker.xml:36
+msgid "Returns the controller or anchor point's name if available."
+msgstr ""
+
+#: doc/classes/ARVRPositionalTracker.xml:42
+msgid "Returns the controller's orientation matrix."
+msgstr ""
+
+#: doc/classes/ARVRPositionalTracker.xml:48
+msgid "Returns the world-space controller position."
+msgstr ""
+
+#: doc/classes/ARVRPositionalTracker.xml:54
+msgid ""
+"Returns the internal tracker ID. This uniquely identifies the tracker per "
+"tracker type and matches the ID you need to specify for nodes such as the "
+"[ARVRController] and [ARVRAnchor] nodes."
+msgstr ""
+
+#: doc/classes/ARVRPositionalTracker.xml:60
+msgid "Returns [code]true[/code] if this device tracks orientation."
+msgstr ""
+
+#: doc/classes/ARVRPositionalTracker.xml:66
+msgid "Returns [code]true[/code] if this device tracks position."
+msgstr ""
+
+#: doc/classes/ARVRPositionalTracker.xml:73
+msgid "Returns the transform combining this device's orientation and position."
+msgstr ""
+
+#: doc/classes/ARVRPositionalTracker.xml:79
+msgid "Returns the tracker's type."
+msgstr ""
+
+#: doc/classes/ARVRPositionalTracker.xml:85
+msgid ""
+"The degree to which the tracker rumbles. Ranges from [code]0.0[/code] to "
+"[code]1.0[/code] with precision [code].01[/code]."
+msgstr ""
+
+#: doc/classes/ARVRPositionalTracker.xml:90
+msgid "The hand this tracker is held in is unknown or not applicable."
+msgstr ""
+
+#: doc/classes/ARVRPositionalTracker.xml:93
+msgid "This tracker is the left hand controller."
+msgstr ""
+
+#: doc/classes/ARVRPositionalTracker.xml:96
+msgid "This tracker is the right hand controller."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:4
+msgid "Server for AR and VR features."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:7
+msgid ""
+"The AR/VR server is the heart of our Advanced and Virtual Reality solution "
+"and handles all the processing."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:17
+msgid "Registers an [ARVRInterface] object."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:24
+msgid ""
+"Registers a new [ARVRPositionalTracker] that tracks a spatial location in "
+"real space."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:32
+msgid ""
+"This is an important function to understand correctly. AR and VR platforms "
+"all handle positioning slightly differently.\n"
+"For platforms that do not offer spatial tracking, our origin point (0,0,0) "
+"is the location of our HMD, but you have little control over the direction "
+"the player is facing in the real world.\n"
+"For platforms that do offer spatial tracking, our origin point depends very "
+"much on the system. For OpenVR, our origin point is usually the center of "
+"the tracking space, on the ground. For other platforms, it's often the "
+"location of the tracking camera.\n"
+"This method allows you to center your tracker on the location of the HMD. It "
+"will take the current location of the HMD and use that to adjust all your "
+"tracking data; in essence, realigning the real world to your player's "
+"current position in the game world.\n"
+"For this method to produce usable results, tracking information must be "
+"available. This often takes a few frames after starting your game.\n"
+"You should call this method after a few seconds have passed. For instance, "
+"when the user requests a realignment of the display holding a designated "
+"button on a controller for a short period of time, or when implementing a "
+"teleport mechanism."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:44
+msgid ""
+"Clears our current primary interface if it is set to the provided interface."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:51
+msgid ""
+"Finds an interface by its name. For instance, if your project uses "
+"capabilities of an AR/VR platform, you can find the interface for that "
+"platform by name and initialize it."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:57
+msgid "Returns the primary interface's transformation."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:64
+msgid ""
+"Returns the interface registered at a given index in our list of interfaces."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:70
+msgid ""
+"Returns the number of interfaces currently registered with the AR/VR server. "
+"If your project supports multiple AR/VR platforms, you can look through the "
+"available interface, and either present the user with a selection or simply "
+"try to initialize each interface and use the first one that returns "
+"[code]true[/code]."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:76
+msgid ""
+"Returns a list of available interfaces the ID and name of each interface."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:82
+msgid ""
+"Returns the absolute timestamp (in μs) of the last [ARVRServer] commit of "
+"the AR/VR eyes to [VisualServer]. The value comes from an internal call to "
+"[method OS.get_ticks_usec]."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:88
+msgid ""
+"Returns the duration (in μs) of the last frame. This is computed as the "
+"difference between [method get_last_commit_usec] and [method "
+"get_last_process_usec] when committing."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:94
+msgid ""
+"Returns the absolute timestamp (in μs) of the last [ARVRServer] process "
+"callback. The value comes from an internal call to [method OS."
+"get_ticks_usec]."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:100
+msgid ""
+"Returns the reference frame transform. Mostly used internally and exposed "
+"for GDNative build interfaces."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:107
+msgid "Returns the positional tracker at the given ID."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:113
+msgid "Returns the number of trackers currently registered."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:120
+msgid "Removes this interface."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:127
+msgid "Removes this positional tracker."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:133
+msgid "The primary [ARVRInterface] currently bound to the [ARVRServer]."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:136
+msgid ""
+"Allows you to adjust the scale to your game's units. Most AR/VR platforms "
+"assume a scale of 1 game world unit = 1 real world meter."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:143
+msgid "Emitted when a new interface has been added."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:149
+msgid "Emitted when an interface is removed."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:157
+msgid ""
+"Emitted when a new tracker has been added. If you don't use a fixed number "
+"of controllers or if you're using [ARVRAnchor]s for an AR solution, it is "
+"important to react to this signal to add the appropriate [ARVRController] or "
+"[ARVRAnchor] nodes related to this new tracker."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:165
+msgid ""
+"Emitted when a tracker is removed. You should remove any [ARVRController] or "
+"[ARVRAnchor] points if applicable. This is not mandatory, the nodes simply "
+"become inactive and will be made active again when a new tracker becomes "
+"available (i.e. a new controller is switched on that takes the place of the "
+"previous one)."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:171
+msgid "The tracker tracks the location of a controller."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:174
+msgid "The tracker tracks the location of a base station."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:177
+msgid "The tracker tracks the location and size of an AR anchor."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:180
+msgid "Used internally to filter trackers of any known type."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:183
+msgid "Used internally if we haven't set the tracker type yet."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:186
+msgid "Used internally to select all trackers."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:189
+msgid ""
+"Fully reset the orientation of the HMD. Regardless of what direction the "
+"user is looking to in the real world. The user will look dead ahead in the "
+"virtual world."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:192
+msgid ""
+"Resets the orientation but keeps the tilt of the device. So if we're looking "
+"down, we keep looking down but heading will be reset."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:195
+msgid ""
+"Does not reset the orientation of the HMD, only the position of the player "
+"gets centered."
+msgstr ""
+
+#: doc/classes/AspectRatioContainer.xml:4
+msgid "Container that preserves its child controls' aspect ratio."
+msgstr ""
+
+#: doc/classes/AspectRatioContainer.xml:7
+msgid ""
+"Arranges child controls in a way to preserve their aspect ratio "
+"automatically whenever the container is resized. Solves the problem where "
+"the container size is dynamic and the contents' size needs to adjust "
+"accordingly without losing proportions."
+msgstr ""
+
+#: doc/classes/AspectRatioContainer.xml:15
+msgid "Specifies the horizontal relative position of child controls."
+msgstr ""
+
+#: doc/classes/AspectRatioContainer.xml:18
+msgid "Specifies the vertical relative position of child controls."
+msgstr ""
+
+#: doc/classes/AspectRatioContainer.xml:21
+msgid ""
+"The aspect ratio to enforce on child controls. This is the width divided by "
+"the height. The ratio depends on the [member stretch_mode]."
+msgstr ""
+
+#: doc/classes/AspectRatioContainer.xml:24
+msgid "The stretch mode used to align child controls."
+msgstr ""
+
+#: doc/classes/AspectRatioContainer.xml:29
+msgid ""
+"The height of child controls is automatically adjusted based on the width of "
+"the container."
+msgstr ""
+
+#: doc/classes/AspectRatioContainer.xml:32
+msgid ""
+"The width of child controls is automatically adjusted based on the height of "
+"the container."
+msgstr ""
+
+#: doc/classes/AspectRatioContainer.xml:35
+msgid ""
+"The bounding rectangle of child controls is automatically adjusted to fit "
+"inside the container while keeping the aspect ratio."
+msgstr ""
+
+#: doc/classes/AspectRatioContainer.xml:38
+msgid ""
+"The width and height of child controls is automatically adjusted to make "
+"their bounding rectangle cover the entire area of the container while "
+"keeping the aspect ratio.\n"
+"When the bounding rectangle of child controls exceed the container's size "
+"and [member Control.rect_clip_content] is enabled, this allows to show only "
+"the container's area restricted by its own bounding rectangle."
+msgstr ""
+
+#: doc/classes/AspectRatioContainer.xml:42
+msgid ""
+"Aligns child controls with the beginning (left or top) of the container."
+msgstr ""
+
+#: doc/classes/AspectRatioContainer.xml:45
+msgid "Aligns child controls with the center of the container."
+msgstr ""
+
+#: doc/classes/AspectRatioContainer.xml:48
+msgid "Aligns child controls with the end (right or bottom) of the container."
+msgstr ""
+
+#: doc/classes/AStar.xml:4
+msgid ""
+"An implementation of A* to find the shortest paths among connected points in "
+"space."
+msgstr ""
+
+#: doc/classes/AStar.xml:7
+msgid ""
+"A* (A star) is a computer algorithm that is widely used in pathfinding and "
+"graph traversal, the process of plotting short paths among vertices "
+"(points), passing through a given set of edges (segments). It enjoys "
+"widespread use due to its performance and accuracy. Godot's A* "
+"implementation uses points in three-dimensional space and Euclidean "
+"distances by default.\n"
+"You must add points manually with [method add_point] and create segments "
+"manually with [method connect_points]. Then you can test if there is a path "
+"between two points with the [method are_points_connected] function, get a "
+"path containing indices by [method get_id_path], or one containing actual "
+"coordinates with [method get_point_path].\n"
+"It is also possible to use non-Euclidean distances. To do so, create a class "
+"that extends [code]AStar[/code] and override methods [method _compute_cost] "
+"and [method _estimate_cost]. Both take two indices and return a length, as "
+"is shown in the following example.\n"
+"[codeblock]\n"
+"class MyAStar:\n"
+" extends AStar\n"
+"\n"
+" func _compute_cost(u, v):\n"
+" return abs(u - v)\n"
+"\n"
+" func _estimate_cost(u, v):\n"
+" return min(0, abs(u - v) - 1)\n"
+"[/codeblock]\n"
+"[method _estimate_cost] should return a lower bound of the distance, i.e. "
+"[code]_estimate_cost(u, v) <= _compute_cost(u, v)[/code]. This serves as a "
+"hint to the algorithm because the custom [code]_compute_cost[/code] might be "
+"computation-heavy. If this is not the case, make [method _estimate_cost] "
+"return the same value as [method _compute_cost] to provide the algorithm "
+"with the most accurate information.\n"
+"If the default [method _estimate_cost] and [method _compute_cost] methods "
+"are used, or if the supplied [method _estimate_cost] method returns a lower "
+"bound of the cost, then the paths returned by A* will be the lowest-cost "
+"paths. Here, the cost of a path equals the sum of the [method _compute_cost] "
+"results of all segments in the path multiplied by the [code]weight_scale[/"
+"code]s of the endpoints of the respective segments. If the default methods "
+"are used and the [code]weight_scale[/code]s of all points are set to "
+"[code]1.0[/code], then this equals the sum of Euclidean distances of all "
+"segments in the path."
+msgstr ""
+
+#: doc/classes/AStar.xml:31
+msgid ""
+"Called when computing the cost between two connected points.\n"
+"Note that this function is hidden in the default [code]AStar[/code] class."
+msgstr ""
+
+#: doc/classes/AStar.xml:40
+msgid ""
+"Called when estimating the cost between a point and the path's ending "
+"point.\n"
+"Note that this function is hidden in the default [code]AStar[/code] class."
+msgstr ""
+
+#: doc/classes/AStar.xml:50
+msgid ""
+"Adds a new point at the given position with the given identifier. The "
+"[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must "
+"be 1 or larger.\n"
+"The [code]weight_scale[/code] is multiplied by the result of [method "
+"_compute_cost] when determining the overall cost of traveling across a "
+"segment from a neighboring point to this point. Thus, all else being equal, "
+"the algorithm prefers points with lower [code]weight_scale[/code]s to form a "
+"path.\n"
+"[codeblock]\n"
+"var astar = AStar.new()\n"
+"astar.add_point(1, Vector3(1, 0, 0), 4) # Adds the point (1, 0, 0) with "
+"weight_scale 4 and id 1\n"
+"[/codeblock]\n"
+"If there already exists a point for the given [code]id[/code], its position "
+"and weight scale are updated to the given values."
+msgstr ""
+
+#: doc/classes/AStar.xml:65
+msgid ""
+"Returns whether the two given points are directly connected by a segment. If "
+"[code]bidirectional[/code] is [code]false[/code], returns whether movement "
+"from [code]id[/code] to [code]to_id[/code] is possible through this segment."
+msgstr ""
+
+#: doc/classes/AStar.xml:71 doc/classes/AStar2D.xml:56
+msgid "Clears all the points and segments."
+msgstr ""
+
+#: doc/classes/AStar.xml:80
+msgid ""
+"Creates a segment between the given points. If [code]bidirectional[/code] is "
+"[code]false[/code], only movement from [code]id[/code] to [code]to_id[/code] "
+"is allowed, not the reverse direction.\n"
+"[codeblock]\n"
+"var astar = AStar.new()\n"
+"astar.add_point(1, Vector3(1, 1, 0))\n"
+"astar.add_point(2, Vector3(0, 5, 0))\n"
+"astar.connect_points(1, 2, false)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/AStar.xml:95
+msgid ""
+"Deletes the segment between the given points. If [code]bidirectional[/code] "
+"is [code]false[/code], only movement from [code]id[/code] to [code]to_id[/"
+"code] is prevented, and a unidirectional segment possibly remains."
+msgstr ""
+
+#: doc/classes/AStar.xml:101 doc/classes/AStar2D.xml:85
+msgid "Returns the next available point ID with no point associated to it."
+msgstr ""
+
+#: doc/classes/AStar.xml:109 doc/classes/AStar2D.xml:93
+msgid ""
+"Returns the ID of the closest point to [code]to_position[/code], optionally "
+"taking disabled points into account. Returns [code]-1[/code] if there are no "
+"points in the points pool.\n"
+"[b]Note:[/b] If several points are the closest to [code]to_position[/code], "
+"the one with the smallest ID will be returned, ensuring a deterministic "
+"result."
+msgstr ""
+
+#: doc/classes/AStar.xml:117
+msgid ""
+"Returns the closest position to [code]to_position[/code] that resides inside "
+"a segment between two connected points.\n"
+"[codeblock]\n"
+"var astar = AStar.new()\n"
+"astar.add_point(1, Vector3(0, 0, 0))\n"
+"astar.add_point(2, Vector3(0, 5, 0))\n"
+"astar.connect_points(1, 2)\n"
+"var res = astar.get_closest_position_in_segment(Vector3(3, 3, 0)) # Returns "
+"(0, 3, 0)\n"
+"[/codeblock]\n"
+"The result is in the segment that goes from [code]y = 0[/code] to [code]y = "
+"5[/code]. It's the closest position in the segment to the given point."
+msgstr ""
+
+#: doc/classes/AStar.xml:133
+msgid ""
+"Returns an array with the IDs of the points that form the path found by "
+"AStar between the given points. The array is ordered from the starting point "
+"to the ending point of the path.\n"
+"[codeblock]\n"
+"var astar = AStar.new()\n"
+"astar.add_point(1, Vector3(0, 0, 0))\n"
+"astar.add_point(2, Vector3(0, 1, 0), 1) # Default weight is 1\n"
+"astar.add_point(3, Vector3(1, 1, 0))\n"
+"astar.add_point(4, Vector3(2, 0, 0))\n"
+"\n"
+"astar.connect_points(1, 2, false)\n"
+"astar.connect_points(2, 3, false)\n"
+"astar.connect_points(4, 3, false)\n"
+"astar.connect_points(1, 4, false)\n"
+"\n"
+"var res = astar.get_id_path(1, 3) # Returns [1, 2, 3]\n"
+"[/codeblock]\n"
+"If you change the 2nd point's weight to 3, then the result will be [code][1, "
+"4, 3][/code] instead, because now even though the distance is longer, it's "
+"\"easier\" to get through point 4 than through point 2."
+msgstr ""
+
+#: doc/classes/AStar.xml:154 doc/classes/AStar2D.xml:138
+msgid ""
+"Returns the capacity of the structure backing the points, useful in "
+"conjunction with [code]reserve_space[/code]."
+msgstr ""
+
+#: doc/classes/AStar.xml:161
+msgid ""
+"Returns an array with the IDs of the points that form the connection with "
+"the given point.\n"
+"[codeblock]\n"
+"var astar = AStar.new()\n"
+"astar.add_point(1, Vector3(0, 0, 0))\n"
+"astar.add_point(2, Vector3(0, 1, 0))\n"
+"astar.add_point(3, Vector3(1, 1, 0))\n"
+"astar.add_point(4, Vector3(2, 0, 0))\n"
+"\n"
+"astar.connect_points(1, 2, true)\n"
+"astar.connect_points(1, 3, true)\n"
+"\n"
+"var neighbors = astar.get_point_connections(1) # Returns [2, 3]\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/AStar.xml:179 doc/classes/AStar2D.xml:163
+msgid "Returns the number of points currently in the points pool."
+msgstr ""
+
+#: doc/classes/AStar.xml:187
+msgid ""
+"Returns an array with the points that are in the path found by AStar between "
+"the given points. The array is ordered from the starting point to the ending "
+"point of the path.\n"
+"[b]Note:[/b] This method is not thread-safe. If called from a [Thread], it "
+"will return an empty [PoolVector3Array] and will print an error message."
+msgstr ""
+
+#: doc/classes/AStar.xml:195 doc/classes/AStar2D.xml:179
+msgid ""
+"Returns the position of the point associated with the given [code]id[/code]."
+msgstr ""
+
+#: doc/classes/AStar.xml:202 doc/classes/AStar2D.xml:186
+msgid ""
+"Returns the weight scale of the point associated with the given [code]id[/"
+"code]."
+msgstr ""
+
+#: doc/classes/AStar.xml:208 doc/classes/AStar2D.xml:192
+msgid "Returns an array of all points."
+msgstr ""
+
+#: doc/classes/AStar.xml:215 doc/classes/AStar2D.xml:199
+msgid ""
+"Returns whether a point associated with the given [code]id[/code] exists."
+msgstr ""
+
+#: doc/classes/AStar.xml:222 doc/classes/AStar2D.xml:206
+msgid ""
+"Returns whether a point is disabled or not for pathfinding. By default, all "
+"points are enabled."
+msgstr ""
+
+#: doc/classes/AStar.xml:229 doc/classes/AStar2D.xml:213
+msgid ""
+"Removes the point associated with the given [code]id[/code] from the points "
+"pool."
+msgstr ""
+
+#: doc/classes/AStar.xml:236 doc/classes/AStar2D.xml:220
+msgid ""
+"Reserves space internally for [code]num_nodes[/code] points, useful if "
+"you're adding a known large number of points at once, for a grid for "
+"instance. New capacity must be greater or equals to old capacity."
+msgstr ""
+
+#: doc/classes/AStar.xml:244 doc/classes/AStar2D.xml:228
+msgid ""
+"Disables or enables the specified point for pathfinding. Useful for making a "
+"temporary obstacle."
+msgstr ""
+
+#: doc/classes/AStar.xml:252 doc/classes/AStar2D.xml:236
+msgid ""
+"Sets the [code]position[/code] for the point with the given [code]id[/code]."
+msgstr ""
+
+#: doc/classes/AStar.xml:260 doc/classes/AStar2D.xml:244
+msgid ""
+"Sets the [code]weight_scale[/code] for the point with the given [code]id[/"
+"code]. The [code]weight_scale[/code] is multiplied by the result of [method "
+"_compute_cost] when determining the overall cost of traveling across a "
+"segment from a neighboring point to this point."
+msgstr ""
+
+#: doc/classes/AStar2D.xml:4
+msgid "AStar class representation that uses 2D vectors as edges."
+msgstr ""
+
+#: doc/classes/AStar2D.xml:7
+msgid ""
+"This is a wrapper for the [AStar] class which uses 2D vectors instead of 3D "
+"vectors."
+msgstr ""
+
+#: doc/classes/AStar2D.xml:17
+msgid ""
+"Called when computing the cost between two connected points.\n"
+"Note that this function is hidden in the default [code]AStar2D[/code] class."
+msgstr ""
+
+#: doc/classes/AStar2D.xml:26
+msgid ""
+"Called when estimating the cost between a point and the path's ending "
+"point.\n"
+"Note that this function is hidden in the default [code]AStar2D[/code] class."
+msgstr ""
+
+#: doc/classes/AStar2D.xml:36
+msgid ""
+"Adds a new point at the given position with the given identifier. The "
+"[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must "
+"be 1 or larger.\n"
+"The [code]weight_scale[/code] is multiplied by the result of [method "
+"_compute_cost] when determining the overall cost of traveling across a "
+"segment from a neighboring point to this point. Thus, all else being equal, "
+"the algorithm prefers points with lower [code]weight_scale[/code]s to form a "
+"path.\n"
+"[codeblock]\n"
+"var astar = AStar2D.new()\n"
+"astar.add_point(1, Vector2(1, 0), 4) # Adds the point (1, 0) with "
+"weight_scale 4 and id 1\n"
+"[/codeblock]\n"
+"If there already exists a point for the given [code]id[/code], its position "
+"and weight scale are updated to the given values."
+msgstr ""
+
+#: doc/classes/AStar2D.xml:50
+msgid "Returns whether there is a connection/segment between the given points."
+msgstr ""
+
+#: doc/classes/AStar2D.xml:65
+msgid ""
+"Creates a segment between the given points. If [code]bidirectional[/code] is "
+"[code]false[/code], only movement from [code]id[/code] to [code]to_id[/code] "
+"is allowed, not the reverse direction.\n"
+"[codeblock]\n"
+"var astar = AStar2D.new()\n"
+"astar.add_point(1, Vector2(1, 1))\n"
+"astar.add_point(2, Vector2(0, 5))\n"
+"astar.connect_points(1, 2, false)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/AStar2D.xml:79
+msgid "Deletes the segment between the given points."
+msgstr ""
+
+#: doc/classes/AStar2D.xml:101
+msgid ""
+"Returns the closest position to [code]to_position[/code] that resides inside "
+"a segment between two connected points.\n"
+"[codeblock]\n"
+"var astar = AStar2D.new()\n"
+"astar.add_point(1, Vector2(0, 0))\n"
+"astar.add_point(2, Vector2(0, 5))\n"
+"astar.connect_points(1, 2)\n"
+"var res = astar.get_closest_position_in_segment(Vector2(3, 3)) # Returns (0, "
+"3)\n"
+"[/codeblock]\n"
+"The result is in the segment that goes from [code]y = 0[/code] to [code]y = "
+"5[/code]. It's the closest position in the segment to the given point."
+msgstr ""
+
+#: doc/classes/AStar2D.xml:117
+msgid ""
+"Returns an array with the IDs of the points that form the path found by "
+"AStar2D between the given points. The array is ordered from the starting "
+"point to the ending point of the path.\n"
+"[codeblock]\n"
+"var astar = AStar2D.new()\n"
+"astar.add_point(1, Vector2(0, 0))\n"
+"astar.add_point(2, Vector2(0, 1), 1) # Default weight is 1\n"
+"astar.add_point(3, Vector2(1, 1))\n"
+"astar.add_point(4, Vector2(2, 0))\n"
+"\n"
+"astar.connect_points(1, 2, false)\n"
+"astar.connect_points(2, 3, false)\n"
+"astar.connect_points(4, 3, false)\n"
+"astar.connect_points(1, 4, false)\n"
+"\n"
+"var res = astar.get_id_path(1, 3) # Returns [1, 2, 3]\n"
+"[/codeblock]\n"
+"If you change the 2nd point's weight to 3, then the result will be [code][1, "
+"4, 3][/code] instead, because now even though the distance is longer, it's "
+"\"easier\" to get through point 4 than through point 2."
+msgstr ""
+
+#: doc/classes/AStar2D.xml:145
+msgid ""
+"Returns an array with the IDs of the points that form the connection with "
+"the given point.\n"
+"[codeblock]\n"
+"var astar = AStar2D.new()\n"
+"astar.add_point(1, Vector2(0, 0))\n"
+"astar.add_point(2, Vector2(0, 1))\n"
+"astar.add_point(3, Vector2(1, 1))\n"
+"astar.add_point(4, Vector2(2, 0))\n"
+"\n"
+"astar.connect_points(1, 2, true)\n"
+"astar.connect_points(1, 3, true)\n"
+"\n"
+"var neighbors = astar.get_point_connections(1) # Returns [2, 3]\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/AStar2D.xml:171
+msgid ""
+"Returns an array with the points that are in the path found by AStar2D "
+"between the given points. The array is ordered from the starting point to "
+"the ending point of the path.\n"
+"[b]Note:[/b] This method is not thread-safe. If called from a [Thread], it "
+"will return an empty [PoolVector2Array] and will print an error message."
+msgstr ""
+
+#: doc/classes/AtlasTexture.xml:4
+msgid ""
+"Crops out one part of a texture, such as a texture from a texture atlas."
+msgstr ""
+
+#: doc/classes/AtlasTexture.xml:7
+msgid ""
+"[Texture] resource that crops out one part of the [member atlas] texture, "
+"defined by [member region]. The main use case is cropping out textures from "
+"a texture atlas, which is a big texture file that packs multiple smaller "
+"textures. Consists of a [Texture] for the [member atlas], a [member region] "
+"that defines the area of [member atlas] to use, and a [member margin] that "
+"defines the border width.\n"
+"[AtlasTexture] cannot be used in an [AnimatedTexture], cannot be tiled in "
+"nodes such as [TextureRect], and does not work properly if used inside of "
+"other [AtlasTexture] resources. Multiple [AtlasTexture] resources can be "
+"used to crop multiple textures from the atlas. Using a texture atlas helps "
+"to optimize video memory costs and render calls compared to using multiple "
+"small files.\n"
+"[b]Note:[/b] AtlasTextures don't support repetition. The [constant Texture."
+"FLAG_REPEAT] and [constant Texture.FLAG_MIRRORED_REPEAT] flags are ignored "
+"when using an AtlasTexture."
+msgstr ""
+
+#: doc/classes/AtlasTexture.xml:17
+msgid "The texture that contains the atlas. Can be any [Texture] subtype."
+msgstr ""
+
+#: doc/classes/AtlasTexture.xml:20
+msgid ""
+"If [code]true[/code], clips the area outside of the region to avoid bleeding "
+"of the surrounding texture pixels."
+msgstr ""
+
+#: doc/classes/AtlasTexture.xml:24
+msgid ""
+"The margin around the region. The [Rect2]'s [member Rect2.size] parameter "
+"(\"w\" and \"h\" in the editor) resizes the texture so it fits within the "
+"margin."
+msgstr ""
+
+#: doc/classes/AtlasTexture.xml:27
+msgid "The AtlasTexture's used region."
+msgstr ""
+
+#: doc/classes/AudioBusLayout.xml:4
+msgid "Stores information about the audio buses."
+msgstr ""
+
+#: doc/classes/AudioBusLayout.xml:7
+msgid ""
+"Stores position, muting, solo, bypass, effects, effect position, volume, and "
+"the connections between buses. See [AudioServer] for usage."
+msgstr ""
+
+#: doc/classes/AudioEffect.xml:4
+msgid "Audio effect for audio."
+msgstr ""
+
+#: doc/classes/AudioEffect.xml:7
+msgid ""
+"Base resource for audio bus. Applies an audio effect on the bus that the "
+"resource is applied on."
+msgstr ""
+
+#: doc/classes/AudioEffect.xml:10 doc/classes/AudioEffectRecord.xml:11
+#: doc/classes/AudioServer.xml:12 doc/classes/AudioStream.xml:12
+#: doc/classes/AudioStreamPlayer.xml:15
+msgid "https://godotengine.org/asset-library/asset/527"
+msgstr ""
+
+#: doc/classes/AudioEffectAmplify.xml:4
+msgid ""
+"Adds an amplifying audio effect to an audio bus.\n"
+"Increases or decreases the volume of the selected audio bus."
+msgstr ""
+
+#: doc/classes/AudioEffectAmplify.xml:8
+msgid "Increases or decreases the volume being routed through the audio bus."
+msgstr ""
+
+#: doc/classes/AudioEffectAmplify.xml:16
+msgid ""
+"Amount of amplification in decibels. Positive values make the sound louder, "
+"negative values make it quieter. Value can range from -80 to 24."
+msgstr ""
+
+#: doc/classes/AudioEffectBandLimitFilter.xml:4
+msgid "Adds a band limit filter to the audio bus."
+msgstr ""
+
+#: doc/classes/AudioEffectBandLimitFilter.xml:7
+msgid ""
+"Limits the frequencies in a range around the [member AudioEffectFilter."
+"cutoff_hz] and allows frequencies outside of this range to pass."
+msgstr ""
+
+#: doc/classes/AudioEffectBandPassFilter.xml:4
+msgid "Adds a band pass filter to the audio bus."
+msgstr ""
+
+#: doc/classes/AudioEffectBandPassFilter.xml:7
+msgid ""
+"Attenuates the frequencies inside of a range around the [member "
+"AudioEffectFilter.cutoff_hz] and cuts frequencies outside of this band."
+msgstr ""
+
+#: doc/classes/AudioEffectCapture.xml:4
+msgid "Captures audio from an audio bus in real-time."
+msgstr ""
+
+#: doc/classes/AudioEffectCapture.xml:7
+msgid ""
+"AudioEffectCapture is an AudioEffect which copies all audio frames from the "
+"attached audio effect bus into its internal ring buffer.\n"
+"Application code should consume these audio frames from this ring buffer "
+"using [method get_buffer] and process it as needed, for example to capture "
+"data from a microphone, implement application defined effects, or to "
+"transmit audio over the network."
+msgstr ""
+
+#: doc/classes/AudioEffectCapture.xml:17
+msgid ""
+"Returns [code]true[/code] if at least [code]frames[/code] audio frames are "
+"available to read in the internal ring buffer."
+msgstr ""
+
+#: doc/classes/AudioEffectCapture.xml:23
+msgid "Clears the internal ring buffer."
+msgstr ""
+
+#: doc/classes/AudioEffectCapture.xml:30
+msgid ""
+"Gets the next [code]frames[/code] audio samples from the internal ring "
+"buffer.\n"
+"Returns a [PoolVector2Array] containing exactly [code]frames[/code] audio "
+"samples if available, or an empty [PoolVector2Array] if insufficient data "
+"was available."
+msgstr ""
+
+#: doc/classes/AudioEffectCapture.xml:37
+msgid "Returns the total size of the internal ring buffer in frames."
+msgstr ""
+
+#: doc/classes/AudioEffectCapture.xml:43
+msgid ""
+"Returns the number of audio frames discarded from the audio bus due to full "
+"buffer."
+msgstr ""
+
+#: doc/classes/AudioEffectCapture.xml:49
+msgid ""
+"Returns the number of frames available to read using [method get_buffer]."
+msgstr ""
+
+#: doc/classes/AudioEffectCapture.xml:55
+msgid "Returns the number of audio frames inserted from the audio bus."
+msgstr ""
+
+#: doc/classes/AudioEffectCapture.xml:61
+msgid ""
+"Length of the internal ring buffer, in seconds. Setting the buffer length "
+"will have no effect if already initialized."
+msgstr ""
+
+#: doc/classes/AudioEffectChorus.xml:4
+msgid "Adds a chorus audio effect."
+msgstr ""
+
+#: doc/classes/AudioEffectChorus.xml:7
+msgid ""
+"Adds a chorus audio effect. The effect applies a filter with voices to "
+"duplicate the audio source and manipulate it through the filter."
+msgstr ""
+
+#: doc/classes/AudioEffectChorus.xml:93
+msgid "The effect's raw signal."
+msgstr ""
+
+#: doc/classes/AudioEffectChorus.xml:96 doc/classes/AudioEffectChorus.xml:114
+#: doc/classes/AudioEffectChorus.xml:132 doc/classes/AudioEffectChorus.xml:150
+msgid "The voice's cutoff frequency."
+msgstr ""
+
+#: doc/classes/AudioEffectChorus.xml:99 doc/classes/AudioEffectChorus.xml:117
+#: doc/classes/AudioEffectChorus.xml:135 doc/classes/AudioEffectChorus.xml:153
+msgid "The voice's signal delay."
+msgstr ""
+
+#: doc/classes/AudioEffectChorus.xml:102 doc/classes/AudioEffectChorus.xml:120
+#: doc/classes/AudioEffectChorus.xml:138 doc/classes/AudioEffectChorus.xml:156
+msgid "The voice filter's depth."
+msgstr ""
+
+#: doc/classes/AudioEffectChorus.xml:105 doc/classes/AudioEffectChorus.xml:123
+#: doc/classes/AudioEffectChorus.xml:141 doc/classes/AudioEffectChorus.xml:159
+msgid "The voice's volume."
+msgstr ""
+
+#: doc/classes/AudioEffectChorus.xml:108 doc/classes/AudioEffectChorus.xml:126
+#: doc/classes/AudioEffectChorus.xml:144 doc/classes/AudioEffectChorus.xml:162
+msgid "The voice's pan level."
+msgstr ""
+
+#: doc/classes/AudioEffectChorus.xml:111 doc/classes/AudioEffectChorus.xml:129
+#: doc/classes/AudioEffectChorus.xml:147 doc/classes/AudioEffectChorus.xml:165
+msgid "The voice's filter rate."
+msgstr ""
+
+#: doc/classes/AudioEffectChorus.xml:168
+msgid "The amount of voices in the effect."
+msgstr ""
+
+#: doc/classes/AudioEffectChorus.xml:171
+msgid "The effect's processed signal."
+msgstr ""
+
+#: doc/classes/AudioEffectCompressor.xml:4
+msgid ""
+"Adds a compressor audio effect to an audio bus.\n"
+"Reduces sounds that exceed a certain threshold level, smooths out the "
+"dynamics and increases the overall volume."
+msgstr ""
+
+#: doc/classes/AudioEffectCompressor.xml:8
+msgid ""
+"Dynamic range compressor reduces the level of the sound when the amplitude "
+"goes over a certain threshold in Decibels. One of the main uses of a "
+"compressor is to increase the dynamic range by clipping as little as "
+"possible (when sound goes over 0dB).\n"
+"Compressor has many uses in the mix:\n"
+"- In the Master bus to compress the whole output (although an "
+"[AudioEffectLimiter] is probably better).\n"
+"- In voice channels to ensure they sound as balanced as possible.\n"
+"- Sidechained. This can reduce the sound level sidechained with another "
+"audio bus for threshold detection. This technique is common in video game "
+"mixing to the level of music and SFX while voices are being heard.\n"
+"- Accentuates transients by using a wider attack, making effects sound more "
+"punchy."
+msgstr ""
+
+#: doc/classes/AudioEffectCompressor.xml:21
+msgid ""
+"Compressor's reaction time when the signal exceeds the threshold, in "
+"microseconds. Value can range from 20 to 2000."
+msgstr ""
+
+#: doc/classes/AudioEffectCompressor.xml:24
+msgid "Gain applied to the output signal."
+msgstr ""
+
+#: doc/classes/AudioEffectCompressor.xml:27
+msgid ""
+"Balance between original signal and effect signal. Value can range from 0 "
+"(totally dry) to 1 (totally wet)."
+msgstr ""
+
+#: doc/classes/AudioEffectCompressor.xml:30
+msgid ""
+"Amount of compression applied to the audio once it passes the threshold "
+"level. The higher the ratio, the more the loud parts of the audio will be "
+"compressed. Value can range from 1 to 48."
+msgstr ""
+
+#: doc/classes/AudioEffectCompressor.xml:33
+msgid ""
+"Compressor's delay time to stop reducing the signal after the signal level "
+"falls below the threshold, in milliseconds. Value can range from 20 to 2000."
+msgstr ""
+
+#: doc/classes/AudioEffectCompressor.xml:36
+msgid "Reduce the sound level using another audio bus for threshold detection."
+msgstr ""
+
+#: doc/classes/AudioEffectCompressor.xml:39
+msgid ""
+"The level above which compression is applied to the audio. Value can range "
+"from -60 to 0."
+msgstr ""
+
+#: doc/classes/AudioEffectDelay.xml:4
+msgid ""
+"Adds a delay audio effect to an audio bus. Plays input signal back after a "
+"period of time.\n"
+"Two tap delay and feedback options."
+msgstr ""
+
+#: doc/classes/AudioEffectDelay.xml:8
+msgid ""
+"Plays input signal back after a period of time. The delayed signal may be "
+"played back multiple times to create the sound of a repeating, decaying "
+"echo. Delay effects range from a subtle echo effect to a pronounced blending "
+"of previous sounds with new sounds."
+msgstr ""
+
+#: doc/classes/AudioEffectDelay.xml:16
+msgid ""
+"Output percent of original sound. At 0, only delayed sounds are output. "
+"Value can range from 0 to 1."
+msgstr ""
+
+#: doc/classes/AudioEffectDelay.xml:19
+msgid "If [code]true[/code], feedback is enabled."
+msgstr ""
+
+#: doc/classes/AudioEffectDelay.xml:22
+msgid "Feedback delay time in milliseconds."
+msgstr ""
+
+#: doc/classes/AudioEffectDelay.xml:25 doc/classes/AudioEffectDelay.xml:37
+msgid "Sound level for [code]tap1[/code]."
+msgstr ""
+
+#: doc/classes/AudioEffectDelay.xml:28
+msgid ""
+"Low-pass filter for feedback, in Hz. Frequencies below this value are "
+"filtered out of the source signal."
+msgstr ""
+
+#: doc/classes/AudioEffectDelay.xml:31
+msgid "If [code]true[/code], [code]tap1[/code] will be enabled."
+msgstr ""
+
+#: doc/classes/AudioEffectDelay.xml:34
+msgid "[code]tap1[/code] delay time in milliseconds."
+msgstr ""
+
+#: doc/classes/AudioEffectDelay.xml:40
+msgid ""
+"Pan position for [code]tap1[/code]. Value can range from -1 (fully left) to "
+"1 (fully right)."
+msgstr ""
+
+#: doc/classes/AudioEffectDelay.xml:43
+msgid "If [code]true[/code], [code]tap2[/code] will be enabled."
+msgstr ""
+
+#: doc/classes/AudioEffectDelay.xml:46
+msgid "[b]Tap2[/b] delay time in milliseconds."
+msgstr ""
+
+#: doc/classes/AudioEffectDelay.xml:49
+msgid "Sound level for [code]tap2[/code]."
+msgstr ""
+
+#: doc/classes/AudioEffectDelay.xml:52
+msgid ""
+"Pan position for [code]tap2[/code]. Value can range from -1 (fully left) to "
+"1 (fully right)."
+msgstr ""
+
+#: doc/classes/AudioEffectDistortion.xml:4
+msgid ""
+"Adds a distortion audio effect to an Audio bus.\n"
+"Modify the sound to make it distorted."
+msgstr ""
+
+#: doc/classes/AudioEffectDistortion.xml:8
+msgid ""
+"Different types are available: clip, tan, lo-fi (bit crushing), overdrive, "
+"or waveshape.\n"
+"By distorting the waveform the frequency content change, which will often "
+"make the sound \"crunchy\" or \"abrasive\". For games, it can simulate sound "
+"coming from some saturated device or speaker very efficiently."
+msgstr ""
+
+#: doc/classes/AudioEffectDistortion.xml:12
+#: doc/classes/AudioEffectFilter.xml:10
+#: doc/classes/AudioEffectHighShelfFilter.xml:9
+#: doc/classes/AudioEffectLowShelfFilter.xml:9 doc/classes/AudioServer.xml:10
+msgid "https://docs.godotengine.org/en/3.4/tutorials/audio/audio_buses.html"
+msgstr ""
+
+#: doc/classes/AudioEffectDistortion.xml:18
+msgid "Distortion power. Value can range from 0 to 1."
+msgstr ""
+
+#: doc/classes/AudioEffectDistortion.xml:21
+msgid ""
+"High-pass filter, in Hz. Frequencies higher than this value will not be "
+"affected by the distortion. Value can range from 1 to 20000."
+msgstr ""
+
+#: doc/classes/AudioEffectDistortion.xml:24
+msgid "Distortion type."
+msgstr ""
+
+#: doc/classes/AudioEffectDistortion.xml:27
+msgid ""
+"Increases or decreases the volume after the effect. Value can range from -80 "
+"to 24."
+msgstr ""
+
+#: doc/classes/AudioEffectDistortion.xml:30
+msgid ""
+"Increases or decreases the volume before the effect. Value can range from "
+"-60 to 60."
+msgstr ""
+
+#: doc/classes/AudioEffectDistortion.xml:35
+msgid ""
+"Digital distortion effect which cuts off peaks at the top and bottom of the "
+"waveform."
+msgstr ""
+
+#: doc/classes/AudioEffectDistortion.xml:40
+msgid ""
+"Low-resolution digital distortion effect. You can use it to emulate the "
+"sound of early digital audio devices."
+msgstr ""
+
+#: doc/classes/AudioEffectDistortion.xml:43
+msgid ""
+"Emulates the warm distortion produced by a field effect transistor, which is "
+"commonly used in solid-state musical instrument amplifiers."
+msgstr ""
+
+#: doc/classes/AudioEffectDistortion.xml:46
+msgid ""
+"Waveshaper distortions are used mainly by electronic musicians to achieve an "
+"extra-abrasive sound."
+msgstr ""
+
+#: doc/classes/AudioEffectEQ.xml:4
+msgid ""
+"Base class for audio equalizers. Gives you control over frequencies.\n"
+"Use it to create a custom equalizer if [AudioEffectEQ6], [AudioEffectEQ10] "
+"or [AudioEffectEQ21] don't fit your needs."
+msgstr ""
+
+#: doc/classes/AudioEffectEQ.xml:8
+msgid ""
+"AudioEffectEQ gives you control over frequencies. Use it to compensate for "
+"existing deficiencies in audio. AudioEffectEQs are useful on the Master bus "
+"to completely master a mix and give it more character. They are also useful "
+"when a game is run on a mobile device, to adjust the mix to that kind of "
+"speakers (it can be added but disabled when headphones are plugged)."
+msgstr ""
+
+#: doc/classes/AudioEffectEQ.xml:16
+msgid "Returns the number of bands of the equalizer."
+msgstr ""
+
+#: doc/classes/AudioEffectEQ.xml:23
+msgid "Returns the band's gain at the specified index, in dB."
+msgstr ""
+
+#: doc/classes/AudioEffectEQ.xml:31
+msgid "Sets band's gain at the specified index, in dB."
+msgstr ""
+
+#: doc/classes/AudioEffectEQ10.xml:4
+msgid ""
+"Adds a 10-band equalizer audio effect to an Audio bus. Gives you control "
+"over frequencies from 31 Hz to 16000 Hz.\n"
+"Each frequency can be modulated between -60/+24 dB."
+msgstr ""
+
+#: doc/classes/AudioEffectEQ10.xml:8
+msgid ""
+"Frequency bands:\n"
+"Band 1: 31 Hz\n"
+"Band 2: 62 Hz\n"
+"Band 3: 125 Hz\n"
+"Band 4: 250 Hz\n"
+"Band 5: 500 Hz\n"
+"Band 6: 1000 Hz\n"
+"Band 7: 2000 Hz\n"
+"Band 8: 4000 Hz\n"
+"Band 9: 8000 Hz\n"
+"Band 10: 16000 Hz\n"
+"See also [AudioEffectEQ], [AudioEffectEQ6], [AudioEffectEQ21]."
+msgstr ""
+
+#: doc/classes/AudioEffectEQ21.xml:4
+msgid ""
+"Adds a 21-band equalizer audio effect to an Audio bus. Gives you control "
+"over frequencies from 22 Hz to 22000 Hz.\n"
+"Each frequency can be modulated between -60/+24 dB."
+msgstr ""
+
+#: doc/classes/AudioEffectEQ21.xml:8
+msgid ""
+"Frequency bands:\n"
+"Band 1: 22 Hz\n"
+"Band 2: 32 Hz\n"
+"Band 3: 44 Hz\n"
+"Band 4: 63 Hz\n"
+"Band 5: 90 Hz\n"
+"Band 6: 125 Hz\n"
+"Band 7: 175 Hz\n"
+"Band 8: 250 Hz\n"
+"Band 9: 350 Hz\n"
+"Band 10: 500 Hz\n"
+"Band 11: 700 Hz\n"
+"Band 12: 1000 Hz\n"
+"Band 13: 1400 Hz\n"
+"Band 14: 2000 Hz\n"
+"Band 15: 2800 Hz\n"
+"Band 16: 4000 Hz\n"
+"Band 17: 5600 Hz\n"
+"Band 18: 8000 Hz\n"
+"Band 19: 11000 Hz\n"
+"Band 20: 16000 Hz\n"
+"Band 21: 22000 Hz\n"
+"See also [AudioEffectEQ], [AudioEffectEQ6], [AudioEffectEQ10]."
+msgstr ""
+
+#: doc/classes/AudioEffectEQ6.xml:4
+msgid ""
+"Adds a 6-band equalizer audio effect to an Audio bus. Gives you control over "
+"frequencies from 32 Hz to 10000 Hz.\n"
+"Each frequency can be modulated between -60/+24 dB."
+msgstr ""
+
+#: doc/classes/AudioEffectEQ6.xml:8
+msgid ""
+"Frequency bands:\n"
+"Band 1: 32 Hz\n"
+"Band 2: 100 Hz\n"
+"Band 3: 320 Hz\n"
+"Band 4: 1000 Hz\n"
+"Band 5: 3200 Hz\n"
+"Band 6: 10000 Hz\n"
+"See also [AudioEffectEQ], [AudioEffectEQ10], [AudioEffectEQ21]."
+msgstr ""
+
+#: doc/classes/AudioEffectFilter.xml:4
+msgid "Adds a filter to the audio bus."
+msgstr ""
+
+#: doc/classes/AudioEffectFilter.xml:7
+msgid "Allows frequencies other than the [member cutoff_hz] to pass."
+msgstr ""
+
+#: doc/classes/AudioEffectFilter.xml:16
+msgid "Threshold frequency for the filter, in Hz."
+msgstr ""
+
+#: doc/classes/AudioEffectFilter.xml:21
+msgid "Gain amount of the frequencies after the filter."
+msgstr ""
+
+#: doc/classes/AudioEffectFilter.xml:24
+msgid "Amount of boost in the frequency range near the cutoff frequency."
+msgstr ""
+
+#: doc/classes/AudioEffectHighPassFilter.xml:4
+msgid "Adds a high-pass filter to the Audio Bus."
+msgstr ""
+
+#: doc/classes/AudioEffectHighPassFilter.xml:7
+msgid ""
+"Cuts frequencies lower than the [member AudioEffectFilter.cutoff_hz] and "
+"allows higher frequencies to pass."
+msgstr ""
+
+#: doc/classes/AudioEffectHighShelfFilter.xml:4
+msgid "Reduces all frequencies above the [member AudioEffectFilter.cutoff_hz]."
+msgstr ""
+
+#: doc/classes/AudioEffectLimiter.xml:4
+msgid "Adds a soft-clip limiter audio effect to an Audio bus."
+msgstr ""
+
+#: doc/classes/AudioEffectLimiter.xml:7
+msgid ""
+"A limiter is similar to a compressor, but it's less flexible and designed to "
+"disallow sound going over a given dB threshold. Adding one in the Master bus "
+"is always recommended to reduce the effects of clipping.\n"
+"Soft clipping starts to reduce the peaks a little below the threshold level "
+"and progressively increases its effect as the input level increases such "
+"that the threshold is never exceeded."
+msgstr ""
+
+#: doc/classes/AudioEffectLimiter.xml:16
+msgid ""
+"The waveform's maximum allowed value, in decibels. Value can range from -20 "
+"to -0.1."
+msgstr ""
+
+#: doc/classes/AudioEffectLimiter.xml:19
+msgid ""
+"Applies a gain to the limited waves, in decibels. Value can range from 0 to "
+"6."
+msgstr ""
+
+#: doc/classes/AudioEffectLimiter.xml:24
+msgid ""
+"Threshold from which the limiter begins to be active, in decibels. Value can "
+"range from -30 to 0."
+msgstr ""
+
+#: doc/classes/AudioEffectLowPassFilter.xml:4
+msgid "Adds a low-pass filter to the Audio bus."
+msgstr ""
+
+#: doc/classes/AudioEffectLowPassFilter.xml:7
+msgid ""
+"Cuts frequencies higher than the [member AudioEffectFilter.cutoff_hz] and "
+"allows lower frequencies to pass."
+msgstr ""
+
+#: doc/classes/AudioEffectLowShelfFilter.xml:4
+msgid "Reduces all frequencies below the [member AudioEffectFilter.cutoff_hz]."
+msgstr ""
+
+#: doc/classes/AudioEffectNotchFilter.xml:4
+msgid "Adds a notch filter to the Audio bus."
+msgstr ""
+
+#: doc/classes/AudioEffectNotchFilter.xml:7
+msgid ""
+"Attenuates frequencies in a narrow band around the [member AudioEffectFilter."
+"cutoff_hz] and cuts frequencies outside of this range."
+msgstr ""
+
+#: doc/classes/AudioEffectPanner.xml:4
+msgid "Adds a panner audio effect to an Audio bus. Pans sound left or right."
+msgstr ""
+
+#: doc/classes/AudioEffectPanner.xml:7
+msgid ""
+"Determines how much of an audio signal is sent to the left and right buses."
+msgstr ""
+
+#: doc/classes/AudioEffectPanner.xml:15
+msgid "Pan position. Value can range from -1 (fully left) to 1 (fully right)."
+msgstr ""
+
+#: doc/classes/AudioEffectPhaser.xml:4
+msgid ""
+"Adds a phaser audio effect to an Audio bus.\n"
+"Combines the original signal with a copy that is slightly out of phase with "
+"the original."
+msgstr ""
+
+#: doc/classes/AudioEffectPhaser.xml:8
+msgid ""
+"Combines phase-shifted signals with the original signal. The movement of the "
+"phase-shifted signals is controlled using a low-frequency oscillator."
+msgstr ""
+
+#: doc/classes/AudioEffectPhaser.xml:16
+msgid ""
+"Governs how high the filter frequencies sweep. Low value will primarily "
+"affect bass frequencies. High value can sweep high into the treble. Value "
+"can range from 0.1 to 4."
+msgstr ""
+
+#: doc/classes/AudioEffectPhaser.xml:19
+msgid "Output percent of modified sound. Value can range from 0.1 to 0.9."
+msgstr ""
+
+#: doc/classes/AudioEffectPhaser.xml:22
+msgid ""
+"Determines the maximum frequency affected by the LFO modulations, in Hz. "
+"Value can range from 10 to 10000."
+msgstr ""
+
+#: doc/classes/AudioEffectPhaser.xml:25
+msgid ""
+"Determines the minimum frequency affected by the LFO modulations, in Hz. "
+"Value can range from 10 to 10000."
+msgstr ""
+
+#: doc/classes/AudioEffectPhaser.xml:28
+msgid ""
+"Adjusts the rate in Hz at which the effect sweeps up and down across the "
+"frequency range."
+msgstr ""
+
+#: doc/classes/AudioEffectPitchShift.xml:4
+msgid ""
+"Adds a pitch-shifting audio effect to an Audio bus.\n"
+"Raises or lowers the pitch of original sound."
+msgstr ""
+
+#: doc/classes/AudioEffectPitchShift.xml:8
+msgid ""
+"Allows modulation of pitch independently of tempo. All frequencies can be "
+"increased/decreased with minimal effect on transients."
+msgstr ""
+
+#: doc/classes/AudioEffectPitchShift.xml:16
+msgid ""
+"The size of the [url=https://en.wikipedia.org/wiki/"
+"Fast_Fourier_transform]Fast Fourier transform[/url] buffer. Higher values "
+"smooth out the effect over time, but have greater latency. The effects of "
+"this higher latency are especially noticeable on sounds that have sudden "
+"amplitude changes."
+msgstr ""
+
+#: doc/classes/AudioEffectPitchShift.xml:19
+msgid ""
+"The oversampling factor to use. Higher values result in better quality, but "
+"are more demanding on the CPU and may cause audio cracking if the CPU can't "
+"keep up."
+msgstr ""
+
+#: doc/classes/AudioEffectPitchShift.xml:22
+msgid ""
+"The pitch scale to use. [code]1.0[/code] is the default pitch and plays "
+"sounds unaltered. [member pitch_scale] can range from [code]0.0[/code] "
+"(infinitely low pitch, inaudible) to [code]16[/code] (16 times higher than "
+"the initial pitch)."
+msgstr ""
+
+#: doc/classes/AudioEffectPitchShift.xml:27
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml:28
+msgid ""
+"Use a buffer of 256 samples for the Fast Fourier transform. Lowest latency, "
+"but least stable over time."
+msgstr ""
+
+#: doc/classes/AudioEffectPitchShift.xml:30
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml:31
+msgid ""
+"Use a buffer of 512 samples for the Fast Fourier transform. Low latency, but "
+"less stable over time."
+msgstr ""
+
+#: doc/classes/AudioEffectPitchShift.xml:33
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml:34
+msgid ""
+"Use a buffer of 1024 samples for the Fast Fourier transform. This is a "
+"compromise between latency and stability over time."
+msgstr ""
+
+#: doc/classes/AudioEffectPitchShift.xml:36
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml:37
+msgid ""
+"Use a buffer of 2048 samples for the Fast Fourier transform. High latency, "
+"but stable over time."
+msgstr ""
+
+#: doc/classes/AudioEffectPitchShift.xml:39
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml:40
+msgid ""
+"Use a buffer of 4096 samples for the Fast Fourier transform. Highest "
+"latency, but most stable over time."
+msgstr ""
+
+#: doc/classes/AudioEffectPitchShift.xml:42
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml:43
+msgid "Represents the size of the [enum FFT_Size] enum."
+msgstr ""
+
+#: doc/classes/AudioEffectRecord.xml:4
+msgid "Audio effect used for recording sound from a microphone."
+msgstr ""
+
+#: doc/classes/AudioEffectRecord.xml:7
+msgid ""
+"Allows the user to record sound from a microphone. It sets and gets the "
+"format in which the audio file will be recorded (8-bit, 16-bit, or "
+"compressed). It checks whether or not the recording is active, and if it is, "
+"records the sound. It then returns the recorded sample."
+msgstr ""
+
+#: doc/classes/AudioEffectRecord.xml:10
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/audio/"
+"recording_with_microphone.html"
+msgstr ""
+
+#: doc/classes/AudioEffectRecord.xml:17
+msgid "Returns the recorded sample."
+msgstr ""
+
+#: doc/classes/AudioEffectRecord.xml:23
+msgid "Returns whether the recording is active or not."
+msgstr ""
+
+#: doc/classes/AudioEffectRecord.xml:30
+msgid ""
+"If [code]true[/code], the sound will be recorded. Note that restarting the "
+"recording will remove the previously recorded sample."
+msgstr ""
+
+#: doc/classes/AudioEffectRecord.xml:36
+msgid ""
+"Specifies the format in which the sample will be recorded. See [enum "
+"AudioStreamSample.Format] for available formats."
+msgstr ""
+
+#: doc/classes/AudioEffectReverb.xml:4
+msgid ""
+"Adds a reverberation audio effect to an Audio bus.\n"
+"Simulates the sound of acoustic environments such as rooms, concert halls, "
+"caverns, or an open spaces."
+msgstr ""
+
+#: doc/classes/AudioEffectReverb.xml:8
+msgid ""
+"Simulates rooms of different sizes. Its parameters can be adjusted to "
+"simulate the sound of a specific room."
+msgstr ""
+
+#: doc/classes/AudioEffectReverb.xml:17
+msgid ""
+"Defines how reflective the imaginary room's walls are. Value can range from "
+"0 to 1."
+msgstr ""
+
+#: doc/classes/AudioEffectReverb.xml:20
+msgid ""
+"Output percent of original sound. At 0, only modified sound is outputted. "
+"Value can range from 0 to 1."
+msgstr ""
+
+#: doc/classes/AudioEffectReverb.xml:23
+msgid ""
+"High-pass filter passes signals with a frequency higher than a certain "
+"cutoff frequency and attenuates signals with frequencies lower than the "
+"cutoff frequency. Value can range from 0 to 1."
+msgstr ""
+
+#: doc/classes/AudioEffectReverb.xml:26
+msgid "Output percent of predelay. Value can range from 0 to 1."
+msgstr ""
+
+#: doc/classes/AudioEffectReverb.xml:29
+msgid ""
+"Time between the original signal and the early reflections of the reverb "
+"signal, in milliseconds."
+msgstr ""
+
+#: doc/classes/AudioEffectReverb.xml:32
+msgid ""
+"Dimensions of simulated room. Bigger means more echoes. Value can range from "
+"0 to 1."
+msgstr ""
+
+#: doc/classes/AudioEffectReverb.xml:35
+msgid ""
+"Widens or narrows the stereo image of the reverb tail. 1 means fully widens. "
+"Value can range from 0 to 1."
+msgstr ""
+
+#: doc/classes/AudioEffectReverb.xml:38
+msgid ""
+"Output percent of modified sound. At 0, only original sound is outputted. "
+"Value can range from 0 to 1."
+msgstr ""
+
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml:4
+msgid "Audio effect that can be used for real-time audio visualizations."
+msgstr ""
+
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml:7
+msgid ""
+"This audio effect does not affect sound output, but can be used for real-"
+"time audio visualizations.\n"
+"See also [AudioStreamGenerator] for procedurally generating sounds."
+msgstr ""
+
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml:11
+msgid "Audio Spectrum Demo"
+msgstr ""
+
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml:12
+#: doc/classes/AudioStreamGenerator.xml:13
+#: doc/classes/AudioStreamGeneratorPlayback.xml:11
+msgid "Godot 3.2 will get new audio features"
+msgstr ""
+
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml:18
+msgid ""
+"The length of the buffer to keep (in seconds). Higher values keep data "
+"around for longer, but require more memory."
+msgstr ""
+
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml:21
+msgid ""
+"The size of the [url=https://en.wikipedia.org/wiki/"
+"Fast_Fourier_transform]Fast Fourier transform[/url] buffer. Higher values "
+"smooth out the spectrum analysis over time, but have greater latency. The "
+"effects of this higher latency are especially noticeable with sudden "
+"amplitude changes."
+msgstr ""
+
+#: doc/classes/AudioEffectSpectrumAnalyzerInstance.xml:21
+msgid "Use the average value as magnitude."
+msgstr ""
+
+#: doc/classes/AudioEffectSpectrumAnalyzerInstance.xml:24
+msgid "Use the maximum value as magnitude."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:4
+msgid "Server interface for low-level audio access."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:7
+msgid ""
+"[AudioServer] is a low-level server interface for audio access. It is in "
+"charge of creating sample data (playable audio) as well as its playback via "
+"a voice interface."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:11 doc/classes/AudioStreamPlayer.xml:13
+msgid "https://godotengine.org/asset-library/asset/525"
+msgstr ""
+
+#: doc/classes/AudioServer.xml:13 doc/classes/AudioStream.xml:13
+#: doc/classes/AudioStreamPlayer.xml:16 doc/classes/CanvasItem.xml:17
+msgid "https://godotengine.org/asset-library/asset/528"
+msgstr ""
+
+#: doc/classes/AudioServer.xml:20
+msgid "Adds a bus at [code]at_position[/code]."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:29
+msgid ""
+"Adds an [AudioEffect] effect to the bus [code]bus_idx[/code] at "
+"[code]at_position[/code]."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:35
+msgid ""
+"Name of the current device for audio input (see [method "
+"capture_get_device_list])."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:41
+msgid "Returns the names of all audio input devices detected on the system."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:48
+msgid "Sets which audio input device is used for audio capture."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:54
+msgid "Generates an [AudioBusLayout] using the available buses and effects."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:61
+msgid ""
+"Returns the amount of channels of the bus at index [code]bus_idx[/code]."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:69
+msgid ""
+"Returns the [AudioEffect] at position [code]effect_idx[/code] in bus "
+"[code]bus_idx[/code]."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:76
+msgid "Returns the number of effects on the bus at [code]bus_idx[/code]."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:85
+msgid ""
+"Returns the [AudioEffectInstance] assigned to the given bus and effect "
+"indices (and optionally channel)."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:92
+msgid "Returns the index of the bus with the name [code]bus_name[/code]."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:99
+msgid "Returns the name of the bus with the index [code]bus_idx[/code]."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:107
+msgid ""
+"Returns the peak volume of the left speaker at bus index [code]bus_idx[/"
+"code] and channel index [code]channel[/code]."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:115
+msgid ""
+"Returns the peak volume of the right speaker at bus index [code]bus_idx[/"
+"code] and channel index [code]channel[/code]."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:122
+msgid ""
+"Returns the name of the bus that the bus at index [code]bus_idx[/code] sends "
+"to."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:129
+msgid "Returns the volume of the bus at index [code]bus_idx[/code] in dB."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:135
+msgid "Returns the names of all audio devices detected on the system."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:141
+msgid "Returns the sample rate at the output of the [AudioServer]."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:147
+msgid "Returns the audio driver's output latency."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:153
+msgid "Returns the speaker configuration."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:159
+msgid "Returns the relative time since the last mix occurred."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:165
+msgid "Returns the relative time until the next mix occurs."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:172 doc/classes/AudioServer.xml:232
+msgid ""
+"If [code]true[/code], the bus at index [code]bus_idx[/code] is bypassing "
+"effects."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:180 doc/classes/AudioServer.xml:241
+msgid ""
+"If [code]true[/code], the effect at index [code]effect_idx[/code] on the bus "
+"at index [code]bus_idx[/code] is enabled."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:187 doc/classes/AudioServer.xml:256
+msgid "If [code]true[/code], the bus at index [code]bus_idx[/code] is muted."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:194 doc/classes/AudioServer.xml:280
+msgid ""
+"If [code]true[/code], the bus at index [code]bus_idx[/code] is in solo mode."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:200
+msgid ""
+"Locks the audio driver's main loop.\n"
+"[b]Note:[/b] Remember to unlock it afterwards."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:209
+msgid ""
+"Moves the bus from index [code]index[/code] to index [code]to_index[/code]."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:216
+msgid "Removes the bus at index [code]index[/code]."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:224
+msgid ""
+"Removes the effect at index [code]effect_idx[/code] from the bus at index "
+"[code]bus_idx[/code]."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:248
+msgid "Overwrites the currently used [AudioBusLayout]."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:264
+msgid ""
+"Sets the name of the bus at index [code]bus_idx[/code] to [code]name[/code]."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:272
+msgid ""
+"Connects the output of the bus at [code]bus_idx[/code] to the bus named "
+"[code]send[/code]."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:288
+msgid ""
+"Sets the volume of the bus at index [code]bus_idx[/code] to [code]volume_db[/"
+"code]."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:297
+msgid "Swaps the position of two effects in bus [code]bus_idx[/code]."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:303
+msgid ""
+"Unlocks the audio driver's main loop. (After locking it, you should always "
+"unlock it.)"
+msgstr ""
+
+#: doc/classes/AudioServer.xml:309
+msgid "Number of available audio buses."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:312
+msgid ""
+"Name of the current device for audio output (see [method get_device_list])."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:315
+msgid ""
+"Scales the rate at which audio is played (i.e. setting it to [code]0.5[/"
+"code] will make the audio be played twice as fast)."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:321
+msgid "Emitted when the [AudioBusLayout] changes."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:327
+msgid "Two or fewer speakers were detected."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:330
+msgid "A 3.1 channel surround setup was detected."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:333
+msgid "A 5.1 channel surround setup was detected."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:336
+msgid "A 7.1 channel surround setup was detected."
+msgstr ""
+
+#: doc/classes/AudioStream.xml:4
+msgid "Base class for audio streams."
+msgstr ""
+
+#: doc/classes/AudioStream.xml:7
+msgid ""
+"Base class for audio streams. Audio streams are used for sound effects and "
+"music playback, and support WAV (via [AudioStreamSample]) and OGG (via "
+"[AudioStreamOGGVorbis]) file formats."
+msgstr ""
+
+#: doc/classes/AudioStream.xml:10 doc/classes/AudioStreamPlayer.xml:11
+#: doc/classes/AudioStreamPlayer2D.xml:12
+#: doc/classes/AudioStreamPlayer3D.xml:13
+msgid "https://docs.godotengine.org/en/3.4/tutorials/audio/audio_streams.html"
+msgstr ""
+
+#: doc/classes/AudioStream.xml:11 doc/classes/AudioStreamGenerator.xml:12
+#: doc/classes/AudioStreamGeneratorPlayback.xml:10
+#: doc/classes/AudioStreamPlayback.xml:10 doc/classes/AudioStreamPlayer.xml:14
+msgid "https://godotengine.org/asset-library/asset/526"
+msgstr ""
+
+#: doc/classes/AudioStream.xml:19
+msgid "Returns the length of the audio stream in seconds."
+msgstr ""
+
+#: doc/classes/AudioStreamGenerator.xml:4
+msgid "Audio stream that generates sounds procedurally."
+msgstr ""
+
+#: doc/classes/AudioStreamGenerator.xml:7
+msgid ""
+"This audio stream does not play back sounds, but expects a script to "
+"generate audio data for it instead. See also "
+"[AudioStreamGeneratorPlayback].\n"
+"See also [AudioEffectSpectrumAnalyzer] for performing real-time audio "
+"spectrum analysis.\n"
+"[b]Note:[/b] Due to performance constraints, this class is best used from C# "
+"or from a compiled language via GDNative. If you still want to use this "
+"class from GDScript, consider using a lower [member mix_rate] such as 11,025 "
+"Hz or 22,050 Hz."
+msgstr ""
+
+#: doc/classes/AudioStreamGenerator.xml:19
+msgid ""
+"The length of the buffer to generate (in seconds). Lower values result in "
+"less latency, but require the script to generate audio data faster, "
+"resulting in increased CPU usage and more risk for audio cracking if the CPU "
+"can't keep up."
+msgstr ""
+
+#: doc/classes/AudioStreamGenerator.xml:22
+msgid ""
+"The sample rate to use (in Hz). Higher values are more demanding for the CPU "
+"to generate, but result in better quality.\n"
+"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
+"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
+"[code]48000[/code].\n"
+"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
+"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
+"there is no quality difference to human hearing when going past 40,000 Hz "
+"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
+"generating lower-pitched sounds such as voices, lower sample rates such as "
+"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
+"quality."
+msgstr ""
+
+#: doc/classes/AudioStreamGeneratorPlayback.xml:4
+msgid "Plays back audio generated using [AudioStreamGenerator]."
+msgstr ""
+
+#: doc/classes/AudioStreamGeneratorPlayback.xml:7
+msgid ""
+"This class is meant to be used with [AudioStreamGenerator] to play back the "
+"generated audio in real-time."
+msgstr ""
+
+#: doc/classes/AudioStreamGeneratorPlayback.xml:18
+msgid ""
+"Returns [code]true[/code] if a buffer of the size [code]amount[/code] can be "
+"pushed to the audio sample data buffer without overflowing it, [code]false[/"
+"code] otherwise."
+msgstr ""
+
+#: doc/classes/AudioStreamGeneratorPlayback.xml:24
+msgid "Clears the audio sample data buffer."
+msgstr ""
+
+#: doc/classes/AudioStreamGeneratorPlayback.xml:30
+msgid ""
+"Returns the number of audio data frames left to play. If this returned "
+"number reaches [code]0[/code], the audio will stop playing until frames are "
+"added again. Therefore, make sure your script can always generate and push "
+"new audio frames fast enough to avoid audio cracking."
+msgstr ""
+
+#: doc/classes/AudioStreamGeneratorPlayback.xml:42
+msgid ""
+"Pushes several audio data frames to the buffer. This is usually more "
+"efficient than [method push_frame] in C# and compiled languages via "
+"GDNative, but [method push_buffer] may be [i]less[/i] efficient in GDScript."
+msgstr ""
+
+#: doc/classes/AudioStreamGeneratorPlayback.xml:49
+msgid ""
+"Pushes a single audio data frame to the buffer. This is usually less "
+"efficient than [method push_buffer] in C# and compiled languages via "
+"GDNative, but [method push_frame] may be [i]more[/i] efficient in GDScript."
+msgstr ""
+
+#: modules/minimp3/doc_classes/AudioStreamMP3.xml:4
+#: modules/minimp3/doc_classes/AudioStreamMP3.xml:7
+msgid "MP3 audio stream driver."
+msgstr ""
+
+#: modules/minimp3/doc_classes/AudioStreamMP3.xml:15
+#: modules/stb_vorbis/doc_classes/AudioStreamOGGVorbis.xml:15
+msgid "Contains the audio data in bytes."
+msgstr ""
+
+#: modules/minimp3/doc_classes/AudioStreamMP3.xml:18
+#: modules/stb_vorbis/doc_classes/AudioStreamOGGVorbis.xml:18
+msgid ""
+"If [code]true[/code], the stream will automatically loop when it reaches the "
+"end."
+msgstr ""
+
+#: modules/minimp3/doc_classes/AudioStreamMP3.xml:21
+#: modules/stb_vorbis/doc_classes/AudioStreamOGGVorbis.xml:21
+msgid "Time in seconds at which the stream starts after being looped."
+msgstr ""
+
+#: modules/stb_vorbis/doc_classes/AudioStreamOGGVorbis.xml:4
+#: modules/stb_vorbis/doc_classes/AudioStreamOGGVorbis.xml:7
+msgid "OGG Vorbis audio stream driver."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayback.xml:4
+msgid "Meta class for playing back audio."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayback.xml:7
+msgid ""
+"Can play, loop, pause a scroll through audio. See [AudioStream] and "
+"[AudioStreamOGGVorbis] for usage."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer.xml:4
+msgid "Plays back audio non-positionally."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer.xml:7
+msgid ""
+"Plays an audio stream non-positionally.\n"
+"To play audio positionally, use [AudioStreamPlayer2D] or "
+"[AudioStreamPlayer3D] instead of [AudioStreamPlayer]."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer.xml:22
+msgid "Returns the position in the [AudioStream] in seconds."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer.xml:28
+msgid ""
+"Returns the [AudioStreamPlayback] object associated with this "
+"[AudioStreamPlayer]."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer.xml:35
+msgid "Plays the audio from the given [code]from_position[/code], in seconds."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer.xml:42 doc/classes/AudioStreamPlayer2D.xml:38
+#: doc/classes/AudioStreamPlayer3D.xml:39
+msgid "Sets the position from which audio will be played, in seconds."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer.xml:48 doc/classes/AudioStreamPlayer2D.xml:44
+#: doc/classes/AudioStreamPlayer3D.xml:45
+msgid "Stops the audio."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer.xml:54 doc/classes/AudioStreamPlayer2D.xml:56
+msgid "If [code]true[/code], audio plays when added to scene tree."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer.xml:57 doc/classes/AudioStreamPlayer2D.xml:59
+msgid "Bus on which this audio is playing."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer.xml:60
+msgid ""
+"If the audio configuration has more than two speakers, this sets the target "
+"channels. See [enum MixTarget] constants."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer.xml:63 doc/classes/AudioStreamPlayer2D.xml:65
+#: doc/classes/AudioStreamPlayer3D.xml:91
+msgid ""
+"The pitch and the tempo of the audio, as a multiplier of the audio sample's "
+"sample rate."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer.xml:66 doc/classes/AudioStreamPlayer2D.xml:68
+#: doc/classes/AudioStreamPlayer3D.xml:94
+msgid "If [code]true[/code], audio is playing."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer.xml:69 doc/classes/AudioStreamPlayer2D.xml:71
+msgid "The [AudioStream] object to be played."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer.xml:72 doc/classes/AudioStreamPlayer2D.xml:74
+msgid ""
+"If [code]true[/code], the playback is paused. You can resume it by setting "
+"[code]stream_paused[/code] to [code]false[/code]."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer.xml:75
+msgid "Volume of sound, in dB."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer.xml:81 doc/classes/AudioStreamPlayer2D.xml:83
+#: doc/classes/AudioStreamPlayer3D.xml:112
+msgid "Emitted when the audio stops playing."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer.xml:87
+msgid "The audio will be played only on the first channel."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer.xml:90
+msgid "The audio will be played on all surround channels."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer.xml:93
+msgid ""
+"The audio will be played on the second channel, which is usually the center."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer2D.xml:4
+msgid "Plays positional sound in 2D space."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer2D.xml:7
+msgid ""
+"Plays audio that dampens with distance from screen center.\n"
+"See also [AudioStreamPlayer] to play a sound non-positionally.\n"
+"[b]Note:[/b] Hiding an [AudioStreamPlayer2D] node does not disable its audio "
+"output. To temporarily disable an [AudioStreamPlayer2D]'s audio output, set "
+"[member volume_db] to a very low value like [code]-100[/code] (which isn't "
+"audible to human hearing)."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer2D.xml:18
+#: doc/classes/AudioStreamPlayer3D.xml:19
+msgid "Returns the position in the [AudioStream]."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer2D.xml:24
+msgid ""
+"Returns the [AudioStreamPlayback] object associated with this "
+"[AudioStreamPlayer2D]."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer2D.xml:31
+#: doc/classes/AudioStreamPlayer3D.xml:32
+msgid ""
+"Plays the audio from the given position [code]from_position[/code], in "
+"seconds."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer2D.xml:50
+#: doc/classes/AudioStreamPlayer3D.xml:51
+msgid "Areas in which this sound plays."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer2D.xml:53
+msgid "Dampens audio over distance with this as an exponent."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer2D.xml:62
+msgid "Maximum distance from which audio is still hearable."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer2D.xml:77
+msgid "Base volume without dampening."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:4
+msgid "Plays positional sound in 3D space."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:7
+msgid ""
+"Plays a sound effect with directed sound effects, dampens with distance if "
+"needed, generates effect of hearable position in space. For greater realism, "
+"a low-pass filter is automatically applied to distant sounds. This can be "
+"disabled by setting [member attenuation_filter_cutoff_hz] to [code]20500[/"
+"code].\n"
+"By default, audio is heard from the camera position. This can be changed by "
+"adding a [Listener] node to the scene and enabling it by calling [method "
+"Listener.make_current] on it.\n"
+"See also [AudioStreamPlayer] to play a sound non-positionally.\n"
+"[b]Note:[/b] Hiding an [AudioStreamPlayer3D] node does not disable its audio "
+"output. To temporarily disable an [AudioStreamPlayer3D]'s audio output, set "
+"[member unit_db] to a very low value like [code]-100[/code] (which isn't "
+"audible to human hearing)."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:25
+msgid ""
+"Returns the [AudioStreamPlayback] object associated with this "
+"[AudioStreamPlayer3D]."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:54
+msgid ""
+"Dampens audio using a low-pass filter above this frequency, in Hz. To "
+"disable the dampening effect entirely, set this to [code]20500[/code] as "
+"this frequency is above the human hearing limit."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:57
+msgid "Amount how much the filter affects the loudness, in decibels."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:60
+msgid ""
+"Decides if audio should get quieter with distance linearly, quadratically, "
+"logarithmically, or not be affected by distance, effectively disabling "
+"attenuation."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:63
+msgid ""
+"If [code]true[/code], audio plays when the AudioStreamPlayer3D node is added "
+"to scene tree."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:66
+msgid "The bus on which this audio is playing."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:69
+msgid ""
+"Decides in which step the [url=https://en.wikipedia.org/wiki/"
+"Doppler_effect]Doppler effect[/url] should be calculated.\n"
+"[b]Note:[/b] Only effective if the current [Camera]'s [member Camera."
+"doppler_tracking] property is set to a value other than [constant Camera."
+"DOPPLER_TRACKING_DISABLED]."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:73
+msgid "The angle in which the audio reaches cameras undampened."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:76
+msgid ""
+"If [code]true[/code], the audio should be dampened according to the "
+"direction of the sound."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:79
+msgid ""
+"Dampens audio if camera is outside of [member emission_angle_degrees] and "
+"[member emission_angle_enabled] is set by this factor, in decibels."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:82
+msgid "Sets the absolute maximum of the soundlevel, in decibels."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:85
+msgid ""
+"Sets the distance from which the [member out_of_range_mode] takes effect. "
+"Has no effect if set to 0."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:88
+msgid ""
+"Decides if audio should pause when source is outside of [member "
+"max_distance] range."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:97
+msgid "The [AudioStream] resource to be played."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:100
+msgid ""
+"If [code]true[/code], the playback is paused. You can resume it by setting "
+"[member stream_paused] to [code]false[/code]."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:103
+msgid "The base sound level unaffected by dampening, in decibels."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:106
+msgid ""
+"The factor for the attenuation effect. Higher values make the sound audible "
+"over a larger distance."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:118
+msgid "Linear dampening of loudness according to distance."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:121
+msgid "Squared dampening of loudness according to distance."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:124
+msgid "Logarithmic dampening of loudness according to distance."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:127
+msgid ""
+"No dampening of loudness according to distance. The sound will still be "
+"heard positionally, unlike an [AudioStreamPlayer]. [constant "
+"ATTENUATION_DISABLED] can be combined with a [member max_distance] value "
+"greater than [code]0.0[/code] to achieve linear attenuation clamped to a "
+"sphere of a defined size."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:130
+msgid ""
+"Mix this audio in, even when it's out of range. This increases CPU usage, "
+"but keeps the sound playing at the correct position if the camera leaves and "
+"enters the [AudioStreamPlayer3D]'s [member max_distance] radius."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:133
+msgid ""
+"Pause this audio when it gets out of range. This decreases CPU usage, but "
+"will cause the sound to restart if the camera leaves and enters the "
+"[AudioStreamPlayer3D]'s [member max_distance] radius."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:136
+msgid "Disables doppler tracking."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:139
+msgid "Executes doppler tracking in idle step (every rendered frame)."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:142
+msgid ""
+"Executes doppler tracking in physics step (every simulated physics frame)."
+msgstr ""
+
+#: doc/classes/AudioStreamRandomPitch.xml:4
+msgid "Plays audio with random pitch shifting."
+msgstr ""
+
+#: doc/classes/AudioStreamRandomPitch.xml:7
+msgid "Randomly varies pitch on each start."
+msgstr ""
+
+#: doc/classes/AudioStreamRandomPitch.xml:15
+msgid "The current [AudioStream]."
+msgstr ""
+
+#: doc/classes/AudioStreamRandomPitch.xml:18
+msgid "The intensity of random pitch variation."
+msgstr ""
+
+#: doc/classes/AudioStreamSample.xml:4
+msgid "Stores audio data loaded from WAV files."
+msgstr ""
+
+#: doc/classes/AudioStreamSample.xml:7
+msgid ""
+"AudioStreamSample stores sound samples loaded from WAV files. To play the "
+"stored sound, use an [AudioStreamPlayer] (for non-positional audio) or "
+"[AudioStreamPlayer2D]/[AudioStreamPlayer3D] (for positional audio). The "
+"sound can be looped.\n"
+"This class can also be used to store dynamically-generated PCM audio data. "
+"See also [AudioStreamGenerator] for procedural audio generation."
+msgstr ""
+
+#: doc/classes/AudioStreamSample.xml:17
+msgid ""
+"Saves the AudioStreamSample as a WAV file to [code]path[/code]. Samples with "
+"IMA ADPCM format can't be saved.\n"
+"[b]Note:[/b] A [code].wav[/code] extension is automatically appended to "
+"[code]path[/code] if it is missing."
+msgstr ""
+
+#: doc/classes/AudioStreamSample.xml:24
+msgid ""
+"Contains the audio data in bytes.\n"
+"[b]Note:[/b] This property expects signed PCM8 data. To convert unsigned "
+"PCM8 to signed PCM8, subtract 128 from each byte."
+msgstr ""
+
+#: doc/classes/AudioStreamSample.xml:28
+msgid "Audio format. See [enum Format] constants for values."
+msgstr ""
+
+#: doc/classes/AudioStreamSample.xml:31
+msgid ""
+"The loop start point (in number of samples, relative to the beginning of the "
+"sample). This information will be imported automatically from the WAV file "
+"if present."
+msgstr ""
+
+#: doc/classes/AudioStreamSample.xml:34
+msgid ""
+"The loop end point (in number of samples, relative to the beginning of the "
+"sample). This information will be imported automatically from the WAV file "
+"if present."
+msgstr ""
+
+#: doc/classes/AudioStreamSample.xml:37
+msgid ""
+"The loop mode. This information will be imported automatically from the WAV "
+"file if present. See [enum LoopMode] constants for values."
+msgstr ""
+
+#: doc/classes/AudioStreamSample.xml:40
+msgid ""
+"The sample rate for mixing this audio. Higher values require more storage "
+"space, but result in better quality.\n"
+"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
+"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
+"[code]48000[/code].\n"
+"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
+"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
+"there is no quality difference to human hearing when going past 40,000 Hz "
+"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
+"using lower-pitched sounds such as voices, lower sample rates such as "
+"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
+"quality."
+msgstr ""
+
+#: doc/classes/AudioStreamSample.xml:45
+msgid "If [code]true[/code], audio is stereo."
+msgstr ""
+
+#: doc/classes/AudioStreamSample.xml:50
+msgid "8-bit audio codec."
+msgstr ""
+
+#: doc/classes/AudioStreamSample.xml:53
+msgid "16-bit audio codec."
+msgstr ""
+
+#: doc/classes/AudioStreamSample.xml:56
+msgid "Audio is compressed using IMA ADPCM."
+msgstr ""
+
+#: doc/classes/AudioStreamSample.xml:59
+msgid "Audio does not loop."
+msgstr ""
+
+#: doc/classes/AudioStreamSample.xml:62
+msgid ""
+"Audio loops the data between [member loop_begin] and [member loop_end], "
+"playing forward only."
+msgstr ""
+
+#: doc/classes/AudioStreamSample.xml:65
+msgid ""
+"Audio loops the data between [member loop_begin] and [member loop_end], "
+"playing back and forth."
+msgstr ""
+
+#: doc/classes/AudioStreamSample.xml:68
+msgid ""
+"Audio loops the data between [member loop_begin] and [member loop_end], "
+"playing backward only."
+msgstr ""
+
+#: doc/classes/BackBufferCopy.xml:4
+msgid ""
+"Copies a region of the screen (or the whole screen) to a buffer so it can be "
+"accessed in your shader scripts through the "
+"[code]texture(SCREEN_TEXTURE, ...)[/code] function."
+msgstr ""
+
+#: doc/classes/BackBufferCopy.xml:7
+msgid ""
+"Node for back-buffering the currently-displayed screen. The region defined "
+"in the BackBufferCopy node is buffered with the content of the screen it "
+"covers, or the entire screen according to the copy mode set. Use the "
+"[code]texture(SCREEN_TEXTURE, ...)[/code] function in your shader scripts to "
+"access the buffer.\n"
+"[b]Note:[/b] Since this node inherits from [Node2D] (and not [Control]), "
+"anchors and margins won't apply to child [Control]-derived nodes. This can "
+"be problematic when resizing the window. To avoid this, add [Control]-"
+"derived nodes as [i]siblings[/i] to the BackBufferCopy node instead of "
+"adding them as children."
+msgstr ""
+
+#: doc/classes/BackBufferCopy.xml:16
+msgid "Buffer mode. See [enum CopyMode] constants."
+msgstr ""
+
+#: doc/classes/BackBufferCopy.xml:19
+msgid ""
+"The area covered by the BackBufferCopy. Only used if [member copy_mode] is "
+"[constant COPY_MODE_RECT]."
+msgstr ""
+
+#: doc/classes/BackBufferCopy.xml:24
+msgid ""
+"Disables the buffering mode. This means the BackBufferCopy node will "
+"directly use the portion of screen it covers."
+msgstr ""
+
+#: doc/classes/BackBufferCopy.xml:27
+msgid "BackBufferCopy buffers a rectangular region."
+msgstr ""
+
+#: doc/classes/BackBufferCopy.xml:30
+msgid "BackBufferCopy buffers the entire screen."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:4
+msgid "Prerendered indirect light map for a scene."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:7
+msgid ""
+"Baked lightmaps are an alternative workflow for adding indirect (or baked) "
+"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
+"fine on low-end PCs and mobile devices as they consume almost no resources "
+"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
+"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
+"effect once lightmaps are baked again."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:12
+msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:20
+msgid ""
+"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
+"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
+"no root node is provided, parent of this node will be used as root instead. "
+"If no save path is provided it will try to match the path from the current "
+"[member light_data]."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:26
+msgid ""
+"When enabled, the lightmapper will merge the textures for all meshes into a "
+"single large layered texture. Not supported in GLES2."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:29
+msgid ""
+"Maximum size of each lightmap layer, only used when [member atlas_generate] "
+"is enabled."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:32
+msgid ""
+"Raycasting bias used during baking to avoid floating point precision issues."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:35
+msgid ""
+"The energy multiplier for each bounce. Higher values will make indirect "
+"lighting brighter. A value of [code]1.0[/code] represents physically "
+"accurate behavior, but higher values can be used to make indirect lighting "
+"propagate more visibly when using a low number of bounces. This can be used "
+"to speed up bake times by lowering the number of [member bounces] then "
+"increasing [member bounce_indirect_energy]. Unlike [member BakedLightmapData."
+"energy], this property does not affect direct lighting emitted by light "
+"nodes, emissive materials and the environment.\n"
+"[b]Note:[/b] [member bounce_indirect_energy] only has an effect if [member "
+"bounces] is set to a value greater than or equal to [code]1[/code]."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:39
+msgid ""
+"Number of light bounces that are taken into account during baking. See also "
+"[member bounce_indirect_energy]."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:42
+msgid "Grid size used for real-time capture information on dynamic objects."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:45
+msgid ""
+"When enabled, an octree containing the scene's lighting information will be "
+"computed. This octree will then be used to light dynamic objects in the "
+"scene."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:48
+msgid ""
+"Bias value to reduce the amount of light proagation in the captured octree."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:51
+msgid "Bake quality of the capture data."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:54
+msgid ""
+"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
+"roughly compute a suitable lightmap size."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:57
+msgid ""
+"The environment color when [member environment_mode] is set to [constant "
+"ENVIRONMENT_MODE_CUSTOM_COLOR]."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:60
+msgid ""
+"The energy scaling factor when when [member environment_mode] is set to "
+"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
+"ENVIRONMENT_MODE_CUSTOM_SKY]."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:63
+msgid ""
+"The [Sky] resource to use when [member environment_mode] is set o [constant "
+"ENVIRONMENT_MODE_CUSTOM_SKY]."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:66
+msgid "The rotation of the baked custom sky."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:69
+msgid ""
+"Minimum ambient light for all the lightmap texels. This doesn't take into "
+"account any occlusion from the scene's geometry, it simply ensures a minimum "
+"amount of light on all the lightmap texels. Can be used for artistic control "
+"on shadow color."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:72
+msgid "Decides which environment to use during baking."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:75
+msgid ""
+"Size of the baked lightmap. Only meshes inside this region will be included "
+"in the baked lightmap, also used as the bounds of the captured region for "
+"dynamic lighting."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:78
+msgid ""
+"Deprecated, in previous versions it determined the location where lightmaps "
+"were be saved."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:81
+msgid "The calculated light data."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:84
+msgid ""
+"Determines the amount of samples per texel used in indrect light baking. The "
+"amount of samples for each quality level can be configured in the project "
+"settings."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:87
+msgid ""
+"Store full color values in the lightmap textures. When disabled, lightmap "
+"textures will store a single brightness channel. Can be disabled to reduce "
+"disk usage if the scene contains only white lights or you don't mind losing "
+"color information in indirect lighting."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:90
+msgid ""
+"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
+"to Monte Carlo based global illumination."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:93
+msgid ""
+"If [code]true[/code], stores the lightmap textures in a high dynamic range "
+"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
+"dynamic range PNG image. This can be set to [code]false[/code] to reduce "
+"disk usage, but light values over 1.0 will be clamped and you may see "
+"banding caused by the reduced precision.\n"
+"[b]Note:[/b] Setting [member use_hdr] to [code]true[/code] will decrease "
+"lightmap banding even when using the GLES2 backend or if [member "
+"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:99
+msgid "The lowest bake quality mode. Fastest to calculate."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:102
+msgid "The default bake quality mode."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:105
+msgid "A higher bake quality mode. Takes longer to calculate."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:108
+msgid "The highest bake quality mode. Takes the longest to calculate."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:111
+msgid "Baking was successful."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:114
+msgid ""
+"Returns if no viable save path is found. This can happen where an [member "
+"image_path] is not specified or when the save location is invalid."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
+msgid "Currently unused."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:120
+msgid "Returns when the baker cannot save per-mesh textures to file."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:123
+msgid "The size of the generated lightmaps is too large."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:126
+msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:129
+msgid "Returns if user cancels baking."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:132
+msgid ""
+"Returns if lightmapper can't be created. Unless you are using a custom "
+"lightmapper, please report this as bug."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:135
+msgid ""
+"There is no root node to start baking from. Either provide [code]from_node[/"
+"code] argument or attach this node to a parent that should be used as root."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:138
+msgid "No environment is used during baking."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:141
+msgid "The baked environment is automatically picked from the current scene."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:144
+msgid "A custom sky is used as environment during baking."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:147
+msgid "A custom solid color is used as environment during baking."
+msgstr ""
+
+#: doc/classes/BakedLightmapData.xml:56
+msgid ""
+"Global energy multiplier for baked and dynamic capture objects. This can be "
+"changed at run-time without having to bake lightmaps again.\n"
+"To adjust only the energy of indirect lighting (without affecting direct "
+"lighting or emissive materials), adjust [member BakedLightmap."
+"bounce_indirect_energy] and bake lightmaps again."
+msgstr ""
+
+#: doc/classes/BakedLightmapData.xml:60
+msgid ""
+"Controls whether dynamic capture objects receive environment lighting or not."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:4
+msgid "Base class for different kinds of buttons."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:7
+msgid ""
+"BaseButton is the abstract base class for buttons, so it shouldn't be used "
+"directly (it doesn't display anything). Other types of buttons inherit from "
+"it."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:15
+msgid ""
+"Called when the button is pressed. If you need to know the button's pressed "
+"state (and [member toggle_mode] is active), use [method _toggled] instead."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:22
+msgid ""
+"Called when the button is toggled (only if [member toggle_mode] is active)."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:28
+msgid ""
+"Returns the visual state used to draw the button. This is useful mainly when "
+"implementing your own draw code by either overriding _draw() or connecting "
+"to \"draw\" signal. The visual state of the button is defined by the [enum "
+"DrawMode] enum."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:34
+msgid ""
+"Returns [code]true[/code] if the mouse has entered the button and has not "
+"left it yet."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:41
+msgid ""
+"Changes the [member pressed] state of the button, without emitting [signal "
+"toggled]. Use when you just want to change the state of the button without "
+"sending the pressed event (e.g. when initializing scene). Only works if "
+"[member toggle_mode] is [code]true[/code].\n"
+"[b]Note:[/b] This method doesn't unpress other buttons in its button [member "
+"group]."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:48
+msgid ""
+"Determines when the button is considered clicked, one of the [enum "
+"ActionMode] constants."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:51
+msgid ""
+"Binary mask to choose which mouse buttons this button will respond to.\n"
+"To allow both left-click and right-click, use [code]BUTTON_MASK_LEFT | "
+"BUTTON_MASK_RIGHT[/code]."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:55
+msgid ""
+"If [code]true[/code], the button is in disabled state and can't be clicked "
+"or toggled."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:58
+msgid ""
+"[i]Deprecated.[/i] This property has been deprecated due to redundancy and "
+"will be removed in Godot 4.0. This property no longer has any effect when "
+"set. Please use [member Control.focus_mode] instead."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:62
+msgid "[ButtonGroup] associated to the button."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:65
+msgid ""
+"If [code]true[/code], the button stays pressed when moving the cursor "
+"outside the button while pressing it.\n"
+"[b]Note:[/b] This property only affects the button's visual appearance. "
+"Signals will be emitted at the same moment regardless of this property's "
+"value."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:69
+msgid ""
+"If [code]true[/code], the button's state is pressed. Means the button is "
+"pressed down or toggled (if [member toggle_mode] is active). Only works if "
+"[member toggle_mode] is [code]true[/code].\n"
+"[b]Note:[/b] Setting [member pressed] will result in [signal toggled] to be "
+"emitted. If you want to change the pressed state without emitting that "
+"signal, use [method set_pressed_no_signal]."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:73
+msgid "[ShortCut] associated to the button."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:76
+msgid ""
+"If [code]true[/code], the button will add information about its shortcut in "
+"the tooltip."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:79
+msgid ""
+"If [code]true[/code], the button is in toggle mode. Makes the button flip "
+"state between pressed and unpressed each time its area is clicked."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:85
+msgid "Emitted when the button starts being held down."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:90
+msgid "Emitted when the button stops being held down."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:95
+msgid ""
+"Emitted when the button is toggled or pressed. This is on [signal "
+"button_down] if [member action_mode] is [constant ACTION_MODE_BUTTON_PRESS] "
+"and on [signal button_up] otherwise.\n"
+"If you need to know the button's pressed state (and [member toggle_mode] is "
+"active), use [signal toggled] instead."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:102
+msgid ""
+"Emitted when the button was just toggled between pressed and normal states "
+"(only if [member toggle_mode] is active). The new state is contained in the "
+"[code]button_pressed[/code] argument."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:108
+msgid ""
+"The normal state (i.e. not pressed, not hovered, not toggled and enabled) of "
+"buttons."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:111
+msgid "The state of buttons are pressed."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:114
+msgid "The state of buttons are hovered."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:117
+msgid "The state of buttons are disabled."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:120
+msgid "The state of buttons are both hovered and pressed."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:123
+msgid "Require just a press to consider the button clicked."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:126
+msgid ""
+"Require a press and a subsequent release before considering the button "
+"clicked."
+msgstr ""
+
+#: doc/classes/Basis.xml:4
+msgid "3×3 matrix datatype."
+msgstr ""
+
+#: doc/classes/Basis.xml:7
+msgid ""
+"3×3 matrix used for 3D rotation and scale. Almost always used as an "
+"orthogonal basis for a Transform.\n"
+"Contains 3 vector fields X, Y and Z as its columns, which are typically "
+"interpreted as the local basis vectors of a transformation. For such use, it "
+"is composed of a scaling and a rotation matrix, in that order (M = R.S).\n"
+"Can also be accessed as array of 3D vectors. These vectors are normally "
+"orthogonal to each other, but are not necessarily normalized (due to "
+"scaling).\n"
+"For more information, read the \"Matrices and transforms\" documentation "
+"article."
+msgstr ""
+
+#: doc/classes/Basis.xml:14 doc/classes/Transform.xml:12
+#: doc/classes/Transform2D.xml:12
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/math/matrices_and_transforms."
+"html"
+msgstr ""
+
+#: doc/classes/Basis.xml:15 doc/classes/Transform.xml:13
+msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/using_transforms.html"
+msgstr ""
+
+#: doc/classes/Basis.xml:16 doc/classes/Line2D.xml:11
+#: doc/classes/Transform.xml:14 doc/classes/Transform2D.xml:13
+#: doc/classes/Vector2.xml:15 doc/classes/Vector3.xml:15
+msgid "https://godotengine.org/asset-library/asset/584"
+msgstr ""
+
+#: doc/classes/Basis.xml:18 doc/classes/CylinderShape.xml:12
+#: doc/classes/Dictionary.xml:88 doc/classes/DynamicFont.xml:18
+#: doc/classes/DynamicFontData.xml:10 doc/classes/File.xml:29
+#: doc/classes/Input.xml:12 doc/classes/InputEvent.xml:13
+#: doc/classes/InputEventAction.xml:12 doc/classes/InputEventMouseMotion.xml:12
+#: doc/classes/KinematicBody.xml:15 doc/classes/RayCast.xml:15
+#: doc/classes/StaticBody.xml:13 doc/classes/SurfaceTool.xml:22
+#: doc/classes/TextureButton.xml:12 doc/classes/TextureRect.xml:11
+#: doc/classes/Thread.xml:13 doc/classes/VBoxContainer.xml:10
+msgid "https://godotengine.org/asset-library/asset/676"
+msgstr ""
+
+#: doc/classes/Basis.xml:19 doc/classes/Line2D.xml:12
+#: doc/classes/Transform.xml:16 doc/classes/Transform2D.xml:14
+msgid "https://godotengine.org/asset-library/asset/583"
+msgstr ""
+
+#: doc/classes/Basis.xml:26
+msgid "Constructs a pure rotation basis matrix from the given quaternion."
+msgstr ""
+
+#: doc/classes/Basis.xml:33
+msgid ""
+"Constructs a pure rotation basis matrix from the given Euler angles (in the "
+"YXZ convention: when *composing*, first Y, then X, and Z last), given in the "
+"vector format as (X angle, Y angle, Z angle).\n"
+"Consider using the [Quat] constructor instead, which uses a quaternion "
+"instead of Euler angles."
+msgstr ""
+
+#: doc/classes/Basis.xml:42
+msgid ""
+"Constructs a pure rotation basis matrix, rotated around the given "
+"[code]axis[/code] by [code]phi[/code], in radians. The axis must be a "
+"normalized vector."
+msgstr ""
+
+#: doc/classes/Basis.xml:51
+msgid "Constructs a basis matrix from 3 axis vectors (matrix columns)."
+msgstr ""
+
+#: doc/classes/Basis.xml:57
+msgid ""
+"Returns the determinant of the basis matrix. If the basis is uniformly "
+"scaled, its determinant is the square of the scale.\n"
+"A negative determinant means the basis has a negative scale. A zero "
+"determinant means the basis isn't invertible, and is usually considered "
+"invalid."
+msgstr ""
+
+#: doc/classes/Basis.xml:64
+msgid ""
+"Returns the basis's rotation in the form of Euler angles (in the YXZ "
+"convention: when decomposing, first Z, then X, and Y last). The returned "
+"vector contains the rotation angles in the format (X angle, Y angle, Z "
+"angle).\n"
+"Consider using the [method get_rotation_quat] method instead, which returns "
+"a [Quat] quaternion instead of Euler angles."
+msgstr ""
+
+#: doc/classes/Basis.xml:71
+msgid ""
+"This function considers a discretization of rotations into 24 points on unit "
+"sphere, lying along the vectors (x,y,z) with each component being either -1, "
+"0, or 1, and returns the index of the point best representing the "
+"orientation of the object. It is mainly used by the [GridMap] editor. For "
+"further details, refer to the Godot source code."
+msgstr ""
+
+#: doc/classes/Basis.xml:77
+msgid ""
+"Returns the basis's rotation in the form of a quaternion. See [method "
+"get_euler] if you need Euler angles, but keep in mind quaternions should "
+"generally be preferred to Euler angles."
+msgstr ""
+
+#: doc/classes/Basis.xml:83
+msgid ""
+"Assuming that the matrix is the combination of a rotation and scaling, "
+"return the absolute value of scaling factors along each axis."
+msgstr ""
+
+#: doc/classes/Basis.xml:89
+msgid "Returns the inverse of the matrix."
+msgstr ""
+
+#: doc/classes/Basis.xml:97
+msgid ""
+"Returns [code]true[/code] if this basis and [code]b[/code] are approximately "
+"equal, by calling [code]is_equal_approx[/code] on each component.\n"
+"[b]Note:[/b] For complicated reasons, the epsilon argument is always "
+"discarded. Don't use the epsilon argument, it does nothing."
+msgstr ""
+
+#: doc/classes/Basis.xml:104
+msgid ""
+"Returns the orthonormalized version of the matrix (useful to call from time "
+"to time to avoid rounding error for orthogonal matrices). This performs a "
+"Gram-Schmidt orthonormalization on the basis of the matrix."
+msgstr ""
+
+#: doc/classes/Basis.xml:112
+msgid ""
+"Introduce an additional rotation around the given axis by phi (radians). The "
+"axis must be a normalized vector."
+msgstr ""
+
+#: doc/classes/Basis.xml:119
+msgid ""
+"Introduce an additional scaling specified by the given 3D scaling factor."
+msgstr ""
+
+#: doc/classes/Basis.xml:127
+msgid ""
+"Assuming that the matrix is a proper rotation matrix, slerp performs a "
+"spherical-linear interpolation with another rotation matrix."
+msgstr ""
+
+#: doc/classes/Basis.xml:134
+msgid "Transposed dot product with the X axis of the matrix."
+msgstr ""
+
+#: doc/classes/Basis.xml:141
+msgid "Transposed dot product with the Y axis of the matrix."
+msgstr ""
+
+#: doc/classes/Basis.xml:148
+msgid "Transposed dot product with the Z axis of the matrix."
+msgstr ""
+
+#: doc/classes/Basis.xml:154
+msgid "Returns the transposed version of the matrix."
+msgstr ""
+
+#: doc/classes/Basis.xml:161
+msgid "Returns a vector transformed (multiplied) by the matrix."
+msgstr ""
+
+#: doc/classes/Basis.xml:168
+msgid ""
+"Returns a vector transformed (multiplied) by the transposed basis matrix.\n"
+"[b]Note:[/b] This results in a multiplication by the inverse of the matrix "
+"only if it represents a rotation-reflection."
+msgstr ""
+
+#: doc/classes/Basis.xml:175 doc/classes/Transform2D.xml:150
+msgid ""
+"The basis matrix's X vector (column 0). Equivalent to array index [code]0[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Basis.xml:178 doc/classes/Transform2D.xml:153
+msgid ""
+"The basis matrix's Y vector (column 1). Equivalent to array index [code]1[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Basis.xml:181
+msgid ""
+"The basis matrix's Z vector (column 2). Equivalent to array index [code]2[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Basis.xml:186
+msgid ""
+"The identity basis, with no rotation or scaling applied.\n"
+"This is identical to calling [code]Basis()[/code] without any parameters. "
+"This constant can be used to make your code clearer, and for consistency "
+"with C#."
+msgstr ""
+
+#: doc/classes/Basis.xml:190
+msgid ""
+"The basis that will flip something along the X axis when used in a "
+"transformation."
+msgstr ""
+
+#: doc/classes/Basis.xml:193
+msgid ""
+"The basis that will flip something along the Y axis when used in a "
+"transformation."
+msgstr ""
+
+#: doc/classes/Basis.xml:196
+msgid ""
+"The basis that will flip something along the Z axis when used in a "
+"transformation."
+msgstr ""
+
+#: doc/classes/BitMap.xml:4
+msgid "Boolean matrix."
+msgstr ""
+
+#: doc/classes/BitMap.xml:7
+msgid ""
+"A two-dimensional array of boolean values, can be used to efficiently store "
+"a binary matrix (every matrix element takes only one bit) and query the "
+"values using natural cartesian coordinates."
+msgstr ""
+
+#: doc/classes/BitMap.xml:16
+msgid ""
+"Creates a bitmap with the specified size, filled with [code]false[/code]."
+msgstr ""
+
+#: doc/classes/BitMap.xml:24
+msgid ""
+"Creates a bitmap that matches the given image dimensions, every element of "
+"the bitmap is set to [code]false[/code] if the alpha value of the image at "
+"that position is equal to [code]threshold[/code] or less, and [code]true[/"
+"code] in other case."
+msgstr ""
+
+#: doc/classes/BitMap.xml:31
+msgid "Returns bitmap's value at the specified position."
+msgstr ""
+
+#: doc/classes/BitMap.xml:37
+msgid "Returns bitmap's dimensions."
+msgstr ""
+
+#: doc/classes/BitMap.xml:43
+msgid ""
+"Returns the amount of bitmap elements that are set to [code]true[/code]."
+msgstr ""
+
+#: doc/classes/BitMap.xml:51
+msgid ""
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
+msgstr ""
+
+#: doc/classes/BitMap.xml:66
+msgid ""
+"Sets the bitmap's element at the specified position, to the specified value."
+msgstr ""
+
+#: doc/classes/BitMap.xml:74
+msgid "Sets a rectangular portion of the bitmap to the specified value."
+msgstr ""
+
+#: doc/classes/BitmapFont.xml:4
+msgid ""
+"Renders text using fonts under the [url=https://www.angelcode.com/products/"
+"bmfont/]BMFont[/url] format.\n"
+"Handles files with the [code].fnt[/code] extension."
+msgstr ""
+
+#: doc/classes/BitmapFont.xml:8
+msgid ""
+"Renders text using [code]*.fnt[/code] fonts containing texture atlases. "
+"Supports distance fields. For using vector font files like TTF directly, see "
+"[DynamicFont]."
+msgstr ""
+
+#: doc/classes/BitmapFont.xml:21
+msgid ""
+"Adds a character to the font, where [code]character[/code] is the Unicode "
+"value, [code]texture[/code] is the texture index, [code]rect[/code] is the "
+"region in the texture (in pixels!), [code]align[/code] is the (optional) "
+"alignment for the character and [code]advance[/code] is the (optional) "
+"advance."
+msgstr ""
+
+#: doc/classes/BitmapFont.xml:30
+msgid ""
+"Adds a kerning pair to the [BitmapFont] as a difference. Kerning pairs are "
+"special cases where a typeface advance is determined by the next character."
+msgstr ""
+
+#: doc/classes/BitmapFont.xml:37
+msgid "Adds a texture to the [BitmapFont]."
+msgstr ""
+
+#: doc/classes/BitmapFont.xml:43
+msgid "Clears all the font data and settings."
+msgstr ""
+
+#: doc/classes/BitmapFont.xml:50
+msgid ""
+"Creates a BitmapFont from the [code]*.fnt[/code] file at [code]path[/code]."
+msgstr ""
+
+#: doc/classes/BitmapFont.xml:58
+msgid "Returns a kerning pair as a difference."
+msgstr ""
+
+#: doc/classes/BitmapFont.xml:65
+msgid "Returns the font atlas texture at index [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/BitmapFont.xml:71
+msgid "Returns the number of textures in the BitmapFont atlas."
+msgstr ""
+
+#: doc/classes/BitmapFont.xml:77
+msgid "Ascent (number of pixels above the baseline)."
+msgstr ""
+
+#: doc/classes/BitmapFont.xml:80
+msgid "If [code]true[/code], distance field hint is enabled."
+msgstr ""
+
+#: doc/classes/BitmapFont.xml:83
+msgid "The fallback font."
+msgstr ""
+
+#: doc/classes/BitmapFont.xml:86
+msgid "Total font height (ascent plus descent) in pixels."
+msgstr ""
+
+#: doc/classes/Bone2D.xml:4
+msgid "Joint used with [Skeleton2D] to control and animate other nodes."
+msgstr ""
+
+#: doc/classes/Bone2D.xml:7
+msgid ""
+"Use a hierarchy of [code]Bone2D[/code] bound to a [Skeleton2D] to control, "
+"and animate other [Node2D] nodes.\n"
+"You can use [code]Bone2D[/code] and [code]Skeleton2D[/code] nodes to animate "
+"2D meshes created with the Polygon 2D UV editor.\n"
+"Each bone has a [member rest] transform that you can reset to with [method "
+"apply_rest]. These rest poses are relative to the bone's parent.\n"
+"If in the editor, you can set the rest pose of an entire skeleton using a "
+"menu option, from the code, you need to iterate over the bones to set their "
+"individual rest poses."
+msgstr ""
+
+#: doc/classes/Bone2D.xml:18
+msgid "Stores the node's current transforms in [member rest]."
+msgstr ""
+
+#: doc/classes/Bone2D.xml:24
+msgid ""
+"Returns the node's index as part of the entire skeleton. See [Skeleton2D]."
+msgstr ""
+
+#: doc/classes/Bone2D.xml:30
+msgid ""
+"Returns the node's [member rest] [code]Transform2D[/code] if it doesn't have "
+"a parent, or its rest pose relative to its parent."
+msgstr ""
+
+#: doc/classes/Bone2D.xml:36
+msgid ""
+"Length of the bone's representation drawn in the editor's viewport in pixels."
+msgstr ""
+
+#: doc/classes/Bone2D.xml:39
+msgid ""
+"Rest transform of the bone. You can reset the node's transforms to this "
+"value using [method apply_rest]."
+msgstr ""
+
+#: doc/classes/BoneAttachment.xml:4
+msgid "A node that will attach to a bone."
+msgstr ""
+
+#: doc/classes/BoneAttachment.xml:7
+msgid ""
+"This node must be the child of a [Skeleton] node. You can then select a bone "
+"for this node to attach to. The BoneAttachment node will copy the transform "
+"of the selected bone."
+msgstr ""
+
+#: doc/classes/BoneAttachment.xml:15
+msgid "The name of the attached bone."
+msgstr ""
+
+#: doc/classes/bool.xml:4
+msgid "Boolean built-in type."
+msgstr ""
+
+#: doc/classes/bool.xml:7
+msgid ""
+"Boolean is a built-in type. There are two boolean values: [code]true[/code] "
+"and [code]false[/code]. You can think of it as a switch with on or off (1 or "
+"0) setting. Booleans are used in programming for logic in condition "
+"statements, like [code]if[/code] statements.\n"
+"Booleans can be directly used in [code]if[/code] statements. The code below "
+"demonstrates this on the [code]if can_shoot:[/code] line. You don't need to "
+"use [code]== true[/code], you only need [code]if can_shoot:[/code]. "
+"Similarly, use [code]if not can_shoot:[/code] rather than [code]== false[/"
+"code].\n"
+"[codeblock]\n"
+"var can_shoot = true\n"
+"\n"
+"func shoot():\n"
+" if can_shoot:\n"
+" pass # Perform shooting actions here.\n"
+"[/codeblock]\n"
+"The following code will only create a bullet if both conditions are met: "
+"action \"shoot\" is pressed and if [code]can_shoot[/code] is [code]true[/"
+"code].\n"
+"[b]Note:[/b] [code]Input.is_action_pressed(\"shoot\")[/code] is also a "
+"boolean that is [code]true[/code] when \"shoot\" is pressed and [code]false[/"
+"code] when \"shoot\" isn't pressed.\n"
+"[codeblock]\n"
+"var can_shoot = true\n"
+"\n"
+"func shoot():\n"
+" if can_shoot and Input.is_action_pressed(\"shoot\"):\n"
+" create_bullet()\n"
+"[/codeblock]\n"
+"The following code will set [code]can_shoot[/code] to [code]false[/code] and "
+"start a timer. This will prevent player from shooting until the timer runs "
+"out. Next [code]can_shoot[/code] will be set to [code]true[/code] again "
+"allowing player to shoot once again.\n"
+"[codeblock]\n"
+"var can_shoot = true\n"
+"onready var cool_down = $CoolDownTimer\n"
+"\n"
+"func shoot():\n"
+" if can_shoot and Input.is_action_pressed(\"shoot\"):\n"
+" create_bullet()\n"
+" can_shoot = false\n"
+" cool_down.start()\n"
+"\n"
+"func _on_CoolDownTimer_timeout():\n"
+" can_shoot = true\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/bool.xml:47
+msgid ""
+"Cast an [int] value to a boolean value, this method will return [code]false[/"
+"code] if [code]0[/code] is passed in, and [code]true[/code] for all other "
+"ints."
+msgstr ""
+
+#: doc/classes/bool.xml:54
+msgid ""
+"Cast a [float] value to a boolean value, this method will return "
+"[code]false[/code] if [code]0.0[/code] is passed in, and [code]true[/code] "
+"for all other floats."
+msgstr ""
+
+#: doc/classes/bool.xml:61
+msgid ""
+"Cast a [String] value to a boolean value, this method will return "
+"[code]false[/code] if [code]\"\"[/code] is passed in, and [code]true[/code] "
+"for all non-empty strings.\n"
+"Examples: [code]bool(\"False\")[/code] returns [code]true[/code], "
+"[code]bool(\"\")[/code] returns [code]false[/code]."
+msgstr ""
+
+#: doc/classes/BoxContainer.xml:4
+msgid "Base class for box containers."
+msgstr ""
+
+#: doc/classes/BoxContainer.xml:7
+msgid ""
+"Arranges child controls vertically or horizontally, and rearranges the "
+"controls automatically when their minimum size changes."
+msgstr ""
+
+#: doc/classes/BoxContainer.xml:16
+msgid ""
+"Adds a control to the box as a spacer. If [code]true[/code], [code]begin[/"
+"code] will insert the spacer control in front of other children."
+msgstr ""
+
+#: doc/classes/BoxContainer.xml:22
+msgid ""
+"The alignment of the container's children (must be one of [constant "
+"ALIGN_BEGIN], [constant ALIGN_CENTER] or [constant ALIGN_END])."
+msgstr ""
+
+#: doc/classes/BoxContainer.xml:28
+msgid "Aligns children with the beginning of the container."
+msgstr ""
+
+#: doc/classes/BoxContainer.xml:31
+msgid "Aligns children with the center of the container."
+msgstr ""
+
+#: doc/classes/BoxContainer.xml:34
+msgid "Aligns children with the end of the container."
+msgstr ""
+
+#: doc/classes/BoxShape.xml:4
+msgid "Box shape resource."
+msgstr ""
+
+#: doc/classes/BoxShape.xml:7
+msgid "3D box shape that can be a child of a [PhysicsBody] or [Area]."
+msgstr ""
+
+#: doc/classes/BoxShape.xml:10 doc/classes/CapsuleShape.xml:10
+#: doc/classes/ConcavePolygonShape.xml:11 doc/classes/ConvexPolygonShape.xml:10
+#: doc/classes/CylinderShape.xml:11 doc/classes/ProjectSettings.xml:13
+#: doc/classes/RigidBody.xml:16 doc/classes/SphereShape.xml:10
+#: doc/classes/StaticBody.xml:11
+msgid "https://godotengine.org/asset-library/asset/675"
+msgstr ""
+
+#: doc/classes/BoxShape.xml:11 doc/classes/CollisionShape.xml:11
+#: modules/gridmap/doc_classes/GridMap.xml:16 doc/classes/KinematicBody.xml:13
+#: doc/classes/Mesh.xml:11 doc/classes/MeshInstance.xml:11
+#: doc/classes/MeshLibrary.xml:10
+msgid "https://godotengine.org/asset-library/asset/126"
+msgstr ""
+
+#: doc/classes/BoxShape.xml:18
+msgid ""
+"The box's half extents. The width, height and depth of this shape is twice "
+"the half extents."
+msgstr ""
+
+#: doc/classes/Button.xml:4
+msgid "Standard themed Button."
+msgstr ""
+
+#: doc/classes/Button.xml:7
+msgid ""
+"Button is the standard themed button. It can contain text and an icon, and "
+"will display them according to the current [Theme].\n"
+"[b]Example of creating a button and assigning an action when pressed by code:"
+"[/b]\n"
+"[codeblock]\n"
+"func _ready():\n"
+" var button = Button.new()\n"
+" button.text = \"Click me\"\n"
+" button.connect(\"pressed\", self, \"_button_pressed\")\n"
+" add_child(button)\n"
+"\n"
+"func _button_pressed():\n"
+" print(\"Hello world!\")\n"
+"[/codeblock]\n"
+"Buttons (like all Control nodes) can also be created in the editor, but some "
+"situations may require creating them from code.\n"
+"See also [BaseButton] which contains common properties and methods "
+"associated with this node.\n"
+"[b]Note:[/b] Buttons do not interpret touch input and therefore don't "
+"support multitouch, since mouse emulation can only press one button at a "
+"given time. Use [TouchScreenButton] for buttons that trigger gameplay "
+"movement or actions, as [TouchScreenButton] supports multitouch."
+msgstr ""
+
+#: doc/classes/Button.xml:25 doc/classes/Dictionary.xml:89
+#: doc/classes/GridContainer.xml:12 doc/classes/OS.xml:10
+#: doc/classes/PoolStringArray.xml:11 doc/classes/ProjectSettings.xml:15
+#: doc/classes/ResourceLoader.xml:11 doc/classes/RichTextLabel.xml:17
+msgid "https://godotengine.org/asset-library/asset/677"
+msgstr ""
+
+#: doc/classes/Button.xml:31
+msgid ""
+"Text alignment policy for the button's text, use one of the [enum TextAlign] "
+"constants."
+msgstr ""
+
+#: doc/classes/Button.xml:34
+msgid ""
+"When this property is enabled, text that is too large to fit the button is "
+"clipped, when disabled the Button will always be wide enough to hold the "
+"text."
+msgstr ""
+
+#: doc/classes/Button.xml:37
+msgid ""
+"When enabled, the button's icon will expand/shrink to fit the button's size "
+"while keeping its aspect."
+msgstr ""
+
+#: doc/classes/Button.xml:40
+msgid "Flat buttons don't display decoration."
+msgstr ""
+
+#: doc/classes/Button.xml:43
+msgid ""
+"Button's icon, if text is present the icon will be placed before the text."
+msgstr ""
+
+#: doc/classes/Button.xml:46 doc/classes/LinkButton.xml:18
+msgid "The button's text that will be displayed inside the button's area."
+msgstr ""
+
+#: doc/classes/Button.xml:51
+msgid "Align the text to the left."
+msgstr ""
+
+#: doc/classes/Button.xml:54
+msgid "Align the text to the center."
+msgstr ""
+
+#: doc/classes/Button.xml:57
+msgid "Align the text to the right."
+msgstr ""
+
+#: doc/classes/Button.xml:62
+msgid "[StyleBox] used when the [Button] is disabled."
+msgstr ""
+
+#: doc/classes/Button.xml:65
+msgid ""
+"[StyleBox] used when the [Button] is focused. It is displayed over the "
+"current [StyleBox], so using [StyleBoxEmpty] will just disable the focus "
+"visual effect."
+msgstr ""
+
+#: doc/classes/Button.xml:68
+msgid "[Font] of the [Button]'s text."
+msgstr ""
+
+#: doc/classes/Button.xml:71
+msgid "Default text [Color] of the [Button]."
+msgstr ""
+
+#: doc/classes/Button.xml:74
+msgid "Text [Color] used when the [Button] is disabled."
+msgstr ""
+
+#: doc/classes/Button.xml:77
+msgid ""
+"Text [Color] used when the [Button] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/Button.xml:80
+msgid "Text [Color] used when the [Button] is being hovered."
+msgstr ""
+
+#: doc/classes/Button.xml:83
+msgid "Text [Color] used when the [Button] is being pressed."
+msgstr ""
+
+#: doc/classes/Button.xml:86
+msgid "[StyleBox] used when the [Button] is being hovered."
+msgstr ""
+
+#: doc/classes/Button.xml:89
+msgid "The horizontal space between [Button]'s icon and text."
+msgstr ""
+
+#: doc/classes/Button.xml:92
+msgid "Default [StyleBox] for the [Button]."
+msgstr ""
+
+#: doc/classes/Button.xml:95
+msgid "[StyleBox] used when the [Button] is being pressed."
+msgstr ""
+
+#: doc/classes/ButtonGroup.xml:4
+msgid "Group of Buttons."
+msgstr ""
+
+#: doc/classes/ButtonGroup.xml:7
+msgid ""
+"Group of [Button]. All direct and indirect children buttons become radios. "
+"Only one allows being pressed.\n"
+"[member BaseButton.toggle_mode] should be [code]true[/code]."
+msgstr ""
+
+#: doc/classes/ButtonGroup.xml:16
+msgid ""
+"Returns an [Array] of [Button]s who have this as their [ButtonGroup] (see "
+"[member BaseButton.group])."
+msgstr ""
+
+#: doc/classes/ButtonGroup.xml:22
+msgid "Returns the current pressed button."
+msgstr ""
+
+#: doc/classes/ButtonGroup.xml:33
+msgid "Emitted when one of the buttons of the group is pressed."
+msgstr ""
+
+#: doc/classes/Camera.xml:4
+msgid "Camera node, displays from a point of view."
+msgstr ""
+
+#: doc/classes/Camera.xml:7
+msgid ""
+"Camera is a special node that displays what is visible from its current "
+"location. Cameras register themselves in the nearest [Viewport] node (when "
+"ascending the tree). Only one camera can be active per viewport. If no "
+"viewport is available ascending the tree, the camera will register in the "
+"global viewport. In other words, a camera just provides 3D display "
+"capabilities to a [Viewport], and, without one, a scene registered in that "
+"[Viewport] (or higher viewports) can't be displayed."
+msgstr ""
+
+#: doc/classes/Camera.xml:17
+msgid ""
+"If this is the current camera, remove it from being current. If "
+"[code]enable_next[/code] is [code]true[/code], request to make the next "
+"camera current, if any."
+msgstr ""
+
+#: doc/classes/Camera.xml:23
+msgid "Returns the camera's RID from the [VisualServer]."
+msgstr ""
+
+#: doc/classes/Camera.xml:29
+msgid ""
+"Returns the transform of the camera plus the vertical ([member v_offset]) "
+"and horizontal ([member h_offset]) offsets; and any other adjustments made "
+"to the position and orientation of the camera by subclassed cameras such as "
+"[ClippedCamera], [InterpolatedCamera] and [ARVRCamera]."
+msgstr ""
+
+#: doc/classes/Camera.xml:36
+msgid ""
+"Returns [code]true[/code] if the given [code]layer[/code] in the [member "
+"cull_mask] is enabled, [code]false[/code] otherwise."
+msgstr ""
+
+#: doc/classes/Camera.xml:42
+msgid ""
+"Returns the camera's frustum planes in world space units as an array of "
+"[Plane]s in the following order: near, far, left, top, right, bottom. Not to "
+"be confused with [member frustum_offset]."
+msgstr ""
+
+#: doc/classes/Camera.xml:49
+msgid ""
+"Returns [code]true[/code] if the given position is behind the camera.\n"
+"[b]Note:[/b] A position which returns [code]false[/code] may still be "
+"outside the camera's field of view."
+msgstr ""
+
+#: doc/classes/Camera.xml:56
+msgid ""
+"Makes this camera the current camera for the [Viewport] (see class "
+"description). If the camera node is outside the scene tree, it will attempt "
+"to become current once it's added."
+msgstr ""
+
+#: doc/classes/Camera.xml:63
+msgid ""
+"Returns a normal vector from the screen point location directed along the "
+"camera. Orthogonal cameras are normalized. Perspective cameras account for "
+"perspective, screen width/height, etc."
+msgstr ""
+
+#: doc/classes/Camera.xml:71
+msgid ""
+"Returns the 3D point in world space that maps to the given 2D coordinate in "
+"the [Viewport] rectangle on a plane that is the given [code]z_depth[/code] "
+"distance into the scene away from the camera."
+msgstr ""
+
+#: doc/classes/Camera.xml:78
+msgid ""
+"Returns a normal vector in world space, that is the result of projecting a "
+"point on the [Viewport] rectangle by the camera projection. This is useful "
+"for casting rays in the form of (origin, normal) for object intersection or "
+"picking."
+msgstr ""
+
+#: doc/classes/Camera.xml:85
+msgid ""
+"Returns a 3D position in world space, that is the result of projecting a "
+"point on the [Viewport] rectangle by the camera projection. This is useful "
+"for casting rays in the form of (origin, normal) for object intersection or "
+"picking."
+msgstr ""
+
+#: doc/classes/Camera.xml:93
+msgid ""
+"Enables or disables the given [code]layer[/code] in the [member cull_mask]."
+msgstr ""
+
+#: doc/classes/Camera.xml:103
+msgid ""
+"Sets the camera projection to frustum mode (see [constant "
+"PROJECTION_FRUSTUM]), by specifying a [code]size[/code], an [code]offset[/"
+"code], and the [code]z_near[/code] and [code]z_far[/code] clip planes in "
+"world space units."
+msgstr ""
+
+#: doc/classes/Camera.xml:112
+msgid ""
+"Sets the camera projection to orthogonal mode (see [constant "
+"PROJECTION_ORTHOGONAL]), by specifying a [code]size[/code], and the "
+"[code]z_near[/code] and [code]z_far[/code] clip planes in world space units. "
+"(As a hint, 2D games often use this projection, with values specified in "
+"pixels.)"
+msgstr ""
+
+#: doc/classes/Camera.xml:121
+msgid ""
+"Sets the camera projection to perspective mode (see [constant "
+"PROJECTION_PERSPECTIVE]), by specifying a [code]fov[/code] (field of view) "
+"angle in degrees, and the [code]z_near[/code] and [code]z_far[/code] clip "
+"planes in world space units."
+msgstr ""
+
+#: doc/classes/Camera.xml:128
+msgid ""
+"Returns the 2D coordinate in the [Viewport] rectangle that maps to the given "
+"3D point in world space.\n"
+"[b]Note:[/b] When using this to position GUI elements over a 3D viewport, "
+"use [method is_position_behind] to prevent them from appearing if the 3D "
+"point is behind the camera:\n"
+"[codeblock]\n"
+"# This code block is part of a script that inherits from Spatial.\n"
+"# `control` is a reference to a node inheriting from Control.\n"
+"control.visible = not get_viewport().get_camera()."
+"is_position_behind(global_transform.origin)\n"
+"control.rect_position = get_viewport().get_camera()."
+"unproject_position(global_transform.origin)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Camera.xml:141
+msgid ""
+"The culling mask that describes which 3D render layers are rendered by this "
+"camera."
+msgstr ""
+
+#: doc/classes/Camera.xml:144
+msgid ""
+"If [code]true[/code], the ancestor [Viewport] is currently using this camera."
+msgstr ""
+
+#: doc/classes/Camera.xml:147
+msgid ""
+"If not [constant DOPPLER_TRACKING_DISABLED], this camera will simulate the "
+"[url=https://en.wikipedia.org/wiki/Doppler_effect]Doppler effect[/url] for "
+"objects changed in particular [code]_process[/code] methods. The Doppler "
+"effect is only simulated for [AudioStreamPlayer3D] nodes that have [member "
+"AudioStreamPlayer3D.doppler_tracking] set to a value other than [constant "
+"AudioStreamPlayer3D.DOPPLER_TRACKING_DISABLED].\n"
+"[b]Note:[/b] To toggle the Doppler effect preview in the editor, use the "
+"Perspective menu in the top-left corner of the 3D viewport and toggle "
+"[b]Enable Doppler[/b]."
+msgstr ""
+
+#: doc/classes/Camera.xml:151
+msgid "The [Environment] to use for this camera."
+msgstr ""
+
+#: doc/classes/Camera.xml:154
+msgid ""
+"The distance to the far culling boundary for this camera relative to its "
+"local Z axis."
+msgstr ""
+
+#: doc/classes/Camera.xml:157
+msgid ""
+"The camera's field of view angle (in degrees). Only applicable in "
+"perspective mode. Since [member keep_aspect] locks one axis, [code]fov[/"
+"code] sets the other axis' field of view angle.\n"
+"For reference, the default vertical field of view value ([code]70.0[/code]) "
+"is equivalent to a horizontal FOV of:\n"
+"- ~86.07 degrees in a 4:3 viewport\n"
+"- ~96.50 degrees in a 16:10 viewport\n"
+"- ~102.45 degrees in a 16:9 viewport\n"
+"- ~117.06 degrees in a 21:9 viewport"
+msgstr ""
+
+#: doc/classes/Camera.xml:165
+msgid ""
+"The camera's frustum offset. This can be changed from the default to create "
+"\"tilted frustum\" effects such as [url=https://zdoom.org/wiki/Y-shearing]Y-"
+"shearing[/url]."
+msgstr ""
+
+#: doc/classes/Camera.xml:168
+msgid "The horizontal (X) offset of the camera viewport."
+msgstr ""
+
+#: doc/classes/Camera.xml:171
+msgid ""
+"The axis to lock during [member fov]/[member size] adjustments. Can be "
+"either [constant KEEP_WIDTH] or [constant KEEP_HEIGHT]."
+msgstr ""
+
+#: doc/classes/Camera.xml:174
+msgid ""
+"The distance to the near culling boundary for this camera relative to its "
+"local Z axis."
+msgstr ""
+
+#: doc/classes/Camera.xml:177
+msgid ""
+"The camera's projection mode. In [constant PROJECTION_PERSPECTIVE] mode, "
+"objects' Z distance from the camera's local space scales their perceived "
+"size."
+msgstr ""
+
+#: doc/classes/Camera.xml:180
+msgid ""
+"The camera's size measured as 1/2 the width or height. Only applicable in "
+"orthogonal mode. Since [member keep_aspect] locks on axis, [code]size[/code] "
+"sets the other axis' size length."
+msgstr ""
+
+#: doc/classes/Camera.xml:183
+msgid "The vertical (Y) offset of the camera viewport."
+msgstr ""
+
+#: doc/classes/Camera.xml:188
+msgid ""
+"Perspective projection. Objects on the screen becomes smaller when they are "
+"far away."
+msgstr ""
+
+#: doc/classes/Camera.xml:191
+msgid ""
+"Orthogonal projection, also known as orthographic projection. Objects remain "
+"the same size on the screen no matter how far away they are."
+msgstr ""
+
+#: doc/classes/Camera.xml:194
+msgid ""
+"Frustum projection. This mode allows adjusting [member frustum_offset] to "
+"create \"tilted frustum\" effects."
+msgstr ""
+
+#: doc/classes/Camera.xml:197
+msgid ""
+"Preserves the horizontal aspect ratio; also known as Vert- scaling. This is "
+"usually the best option for projects running in portrait mode, as taller "
+"aspect ratios will benefit from a wider vertical FOV."
+msgstr ""
+
+#: doc/classes/Camera.xml:200
+msgid ""
+"Preserves the vertical aspect ratio; also known as Hor+ scaling. This is "
+"usually the best option for projects running in landscape mode, as wider "
+"aspect ratios will automatically benefit from a wider horizontal FOV."
+msgstr ""
+
+#: doc/classes/Camera.xml:203
+msgid ""
+"Disables [url=https://en.wikipedia.org/wiki/Doppler_effect]Doppler effect[/"
+"url] simulation (default)."
+msgstr ""
+
+#: doc/classes/Camera.xml:206
+msgid ""
+"Simulate [url=https://en.wikipedia.org/wiki/Doppler_effect]Doppler effect[/"
+"url] by tracking positions of objects that are changed in [code]_process[/"
+"code]. Changes in the relative velocity of this camera compared to those "
+"objects affect how Audio is perceived (changing the Audio's [code]pitch "
+"shift[/code])."
+msgstr ""
+
+#: doc/classes/Camera.xml:209
+msgid ""
+"Simulate [url=https://en.wikipedia.org/wiki/Doppler_effect]Doppler effect[/"
+"url] by tracking positions of objects that are changed in "
+"[code]_physics_process[/code]. Changes in the relative velocity of this "
+"camera compared to those objects affect how Audio is perceived (changing the "
+"Audio's [code]pitch shift[/code])."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:4
+msgid "Camera node for 2D scenes."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:7
+msgid ""
+"Camera node for 2D scenes. It forces the screen (current layer) to scroll "
+"following this node. This makes it easier (and faster) to program scrollable "
+"scenes than manually changing the position of [CanvasItem]-based nodes.\n"
+"This node is intended to be a simple helper to get things going quickly, but "
+"more functionality may be desired to change how the camera works. To make "
+"your own custom camera node, inherit it from [Node2D] and change the "
+"transform of the canvas by setting [member Viewport.canvas_transform] in "
+"[Viewport] (you can obtain the current [Viewport] by using [method Node."
+"get_viewport]).\n"
+"Note that the [Camera2D] node's [code]position[/code] doesn't represent the "
+"actual position of the screen, which may differ due to applied smoothing or "
+"limits. You can use [method get_camera_screen_center] to get the real "
+"position."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:13 doc/classes/TileMap.xml:13
+#: doc/classes/TileSet.xml:13
+msgid "https://godotengine.org/asset-library/asset/112"
+msgstr ""
+
+#: doc/classes/Camera2D.xml:14 doc/classes/Environment.xml:18
+#: doc/classes/WorldEnvironment.xml:14
+msgid "https://godotengine.org/asset-library/asset/110"
+msgstr ""
+
+#: doc/classes/Camera2D.xml:20
+msgid "Aligns the camera to the tracked node."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:26
+msgid ""
+"Removes any [Camera2D] from the ancestor [Viewport]'s internal currently-"
+"assigned camera."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:32
+msgid "Forces the camera to update scroll immediately."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:38
+msgid "Returns the camera position."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:44
+msgid ""
+"Returns the location of the [Camera2D]'s screen-center, relative to the "
+"origin."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:51
+msgid ""
+"Returns the specified margin. See also [member drag_margin_bottom], [member "
+"drag_margin_top], [member drag_margin_left], and [member drag_margin_right]."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:58
+msgid ""
+"Returns the specified camera limit. See also [member limit_bottom], [member "
+"limit_top], [member limit_left], and [member limit_right]."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:64
+msgid ""
+"Make this the current 2D camera for the scene (viewport and layer), in case "
+"there are many cameras in the scene."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:70
+msgid ""
+"Sets the camera's position immediately to its current smoothing "
+"destination.\n"
+"This has no effect if smoothing is disabled."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:79
+msgid ""
+"Sets the specified margin. See also [member drag_margin_bottom], [member "
+"drag_margin_top], [member drag_margin_left], and [member drag_margin_right]."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:87
+msgid ""
+"Sets the specified camera limit. See also [member limit_bottom], [member "
+"limit_top], [member limit_left], and [member limit_right]."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:93
+msgid "The Camera2D's anchor point. See [enum AnchorMode] constants."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:96
+msgid ""
+"If [code]true[/code], the camera is the active camera for the current scene. "
+"Only one camera can be current, so setting a different camera [code]current[/"
+"code] will disable this one."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:99
+msgid ""
+"The custom [Viewport] node attached to the [Camera2D]. If [code]null[/code] "
+"or not a [Viewport], uses the default viewport instead."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:102
+msgid ""
+"Bottom margin needed to drag the camera. A value of [code]1[/code] makes the "
+"camera move only when reaching the edge of the screen."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:105
+msgid ""
+"If [code]true[/code], the camera only moves when reaching the horizontal "
+"drag margins. If [code]false[/code], the camera moves horizontally "
+"regardless of margins."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:108
+msgid ""
+"Left margin needed to drag the camera. A value of [code]1[/code] makes the "
+"camera move only when reaching the edge of the screen."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:111
+msgid ""
+"Right margin needed to drag the camera. A value of [code]1[/code] makes the "
+"camera move only when reaching the edge of the screen."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:114
+msgid ""
+"Top margin needed to drag the camera. A value of [code]1[/code] makes the "
+"camera move only when reaching the edge of the screen."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:117
+msgid ""
+"If [code]true[/code], the camera only moves when reaching the vertical drag "
+"margins. If [code]false[/code], the camera moves vertically regardless of "
+"margins."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:120
+msgid ""
+"If [code]true[/code], draws the camera's drag margin rectangle in the editor."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:123
+msgid ""
+"If [code]true[/code], draws the camera's limits rectangle in the editor."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:126
+msgid ""
+"If [code]true[/code], draws the camera's screen rectangle in the editor."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:129
+msgid ""
+"Bottom scroll limit in pixels. The camera stops moving when reaching this "
+"value."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:132
+msgid ""
+"Left scroll limit in pixels. The camera stops moving when reaching this "
+"value."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:135
+msgid ""
+"Right scroll limit in pixels. The camera stops moving when reaching this "
+"value."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:138
+msgid ""
+"If [code]true[/code], the camera smoothly stops when reaches its limits.\n"
+"This has no effect if smoothing is disabled.\n"
+"[b]Note:[/b] To immediately update the camera's position to be within limits "
+"without smoothing, even with this setting enabled, invoke [method "
+"reset_smoothing]."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:143
+msgid ""
+"Top scroll limit in pixels. The camera stops moving when reaching this value."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:146
+msgid ""
+"The camera's offset, useful for looking around or camera shake animations."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:149
+msgid ""
+"The horizontal offset of the camera, relative to the drag margins.\n"
+"[b]Note:[/b] Offset H is used only to force offset relative to margins. It's "
+"not updated in any way if drag margins are enabled and can be used to set "
+"initial offset."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:153
+msgid ""
+"The vertical offset of the camera, relative to the drag margins.\n"
+"[b]Note:[/b] Used the same as [member offset_h]."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:157
+msgid "The camera's process callback. See [enum Camera2DProcessMode]."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:160
+msgid "If [code]true[/code], the camera rotates with the target."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:163
+msgid ""
+"If [code]true[/code], the camera smoothly moves towards the target at "
+"[member smoothing_speed]."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:166
+msgid ""
+"Speed in pixels per second of the camera's smoothing effect when [member "
+"smoothing_enabled] is [code]true[/code]."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:169
+msgid ""
+"The camera's zoom relative to the viewport. Values larger than "
+"[code]Vector2(1, 1)[/code] zoom out and smaller values zoom in. For an "
+"example, use [code]Vector2(0.5, 0.5)[/code] for a 2× zoom-in, and "
+"[code]Vector2(4, 4)[/code] for a 4× zoom-out."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:174
+msgid ""
+"The camera's position is fixed so that the top-left corner is always at the "
+"origin."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:177
+msgid ""
+"The camera's position takes into account vertical/horizontal offsets and the "
+"screen size."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:180 doc/classes/ClippedCamera.xml:89
+msgid "The camera updates with the [code]_physics_process[/code] callback."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:183 doc/classes/ClippedCamera.xml:92
+msgid "The camera updates with the [code]_process[/code] callback."
+msgstr ""
+
+#: doc/classes/CameraFeed.xml:4
+msgid ""
+"A camera feed gives you access to a single physical camera attached to your "
+"device."
+msgstr ""
+
+#: doc/classes/CameraFeed.xml:7
+msgid ""
+"A camera feed gives you access to a single physical camera attached to your "
+"device. When enabled, Godot will start capturing frames from the camera "
+"which can then be used.\n"
+"[b]Note:[/b] Many cameras will return YCbCr images which are split into two "
+"textures and need to be combined in a shader. Godot does this automatically "
+"for you if you set the environment to show the camera image in the "
+"background."
+msgstr ""
+
+#: doc/classes/CameraFeed.xml:16
+msgid "Returns the unique ID for this feed."
+msgstr ""
+
+#: doc/classes/CameraFeed.xml:22
+msgid "Returns the camera's name."
+msgstr ""
+
+#: doc/classes/CameraFeed.xml:28
+msgid "Returns the position of camera on the device."
+msgstr ""
+
+#: doc/classes/CameraFeed.xml:34
+msgid "If [code]true[/code], the feed is active."
+msgstr ""
+
+#: doc/classes/CameraFeed.xml:37
+msgid "The transform applied to the camera's image."
+msgstr ""
+
+#: doc/classes/CameraFeed.xml:42
+msgid "No image set for the feed."
+msgstr ""
+
+#: doc/classes/CameraFeed.xml:45
+msgid "Feed supplies RGB images."
+msgstr ""
+
+#: doc/classes/CameraFeed.xml:48
+msgid "Feed supplies YCbCr images that need to be converted to RGB."
+msgstr ""
+
+#: doc/classes/CameraFeed.xml:51
+msgid ""
+"Feed supplies separate Y and CbCr images that need to be combined and "
+"converted to RGB."
+msgstr ""
+
+#: doc/classes/CameraFeed.xml:54
+msgid "Unspecified position."
+msgstr ""
+
+#: doc/classes/CameraFeed.xml:57
+msgid "Camera is mounted at the front of the device."
+msgstr ""
+
+#: doc/classes/CameraFeed.xml:60
+msgid "Camera is mounted at the back of the device."
+msgstr ""
+
+#: doc/classes/CameraServer.xml:4
+msgid "Server keeping track of different cameras accessible in Godot."
+msgstr ""
+
+#: doc/classes/CameraServer.xml:7
+msgid ""
+"The [CameraServer] keeps track of different cameras accessible in Godot. "
+"These are external cameras such as webcams or the cameras on your phone.\n"
+"It is notably used to provide AR modules with a video feed from the camera."
+msgstr ""
+
+#: doc/classes/CameraServer.xml:17
+msgid "Adds a camera feed to the camera server."
+msgstr ""
+
+#: doc/classes/CameraServer.xml:23
+msgid "Returns an array of [CameraFeed]s."
+msgstr ""
+
+#: doc/classes/CameraServer.xml:30
+msgid "Returns the [CameraFeed] with this id."
+msgstr ""
+
+#: doc/classes/CameraServer.xml:36
+msgid "Returns the number of [CameraFeed]s registered."
+msgstr ""
+
+#: doc/classes/CameraServer.xml:43
+msgid "Removes a [CameraFeed]."
+msgstr ""
+
+#: doc/classes/CameraServer.xml:51
+msgid "Emitted when a [CameraFeed] is added (e.g. webcam is plugged in)."
+msgstr ""
+
+#: doc/classes/CameraServer.xml:57
+msgid "Emitted when a [CameraFeed] is removed (e.g. webcam is unplugged)."
+msgstr ""
+
+#: doc/classes/CameraServer.xml:63
+msgid "The RGBA camera image."
+msgstr ""
+
+#: doc/classes/CameraServer.xml:66
+msgid "The YCbCr camera image."
+msgstr ""
+
+#: doc/classes/CameraServer.xml:69
+msgid "The Y component camera image."
+msgstr ""
+
+#: doc/classes/CameraServer.xml:72
+msgid "The CbCr component camera image."
+msgstr ""
+
+#: doc/classes/CameraTexture.xml:4
+msgid "Texture provided by a [CameraFeed]."
+msgstr ""
+
+#: doc/classes/CameraTexture.xml:7
+msgid ""
+"This texture gives access to the camera texture provided by a [CameraFeed].\n"
+"[b]Note:[/b] Many cameras supply YCbCr images which need to be converted in "
+"a shader."
+msgstr ""
+
+#: doc/classes/CameraTexture.xml:16
+msgid "The ID of the [CameraFeed] for which we want to display the image."
+msgstr ""
+
+#: doc/classes/CameraTexture.xml:19
+msgid ""
+"Convenience property that gives access to the active property of the "
+"[CameraFeed]."
+msgstr ""
+
+#: doc/classes/CameraTexture.xml:23
+msgid ""
+"Which image within the [CameraFeed] we want access to, important if the "
+"camera image is split in a Y and CbCr component."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:4
+msgid "Base class of anything 2D."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:7
+msgid ""
+"Base class of anything 2D. Canvas items are laid out in a tree; children "
+"inherit and extend their parent's transform. [CanvasItem] is extended by "
+"[Control] for anything GUI-related, and by [Node2D] for anything related to "
+"the 2D engine.\n"
+"Any [CanvasItem] can draw. For this, [method update] must be called, then "
+"[constant NOTIFICATION_DRAW] will be received on idle time to request "
+"redraw. Because of this, canvas items don't need to be redrawn on every "
+"frame, improving the performance significantly. Several functions for "
+"drawing on the [CanvasItem] are provided (see [code]draw_*[/code] "
+"functions). However, they can only be used inside the [method Object."
+"_notification], signal or [method _draw] virtual functions.\n"
+"Canvas items are drawn in tree order. By default, children are on top of "
+"their parents so a root [CanvasItem] will be drawn behind everything. This "
+"behavior can be changed on a per-item basis.\n"
+"A [CanvasItem] can also be hidden, which will also hide its children. It "
+"provides many ways to change parameters such as modulation (for itself and "
+"its children) and self modulation (only for itself), as well as its blend "
+"mode.\n"
+"Ultimately, a transform notification can be requested, which will notify the "
+"node that its global position changed in case the parent tree changed.\n"
+"[b]Note:[/b] Unless otherwise specified, all methods that have angle "
+"parameters must have angles specified as [i]radians[/i]. To convert degrees "
+"to radians, use [method @GDScript.deg2rad]."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:15 doc/classes/CanvasLayer.xml:10
+#: doc/classes/InputEvent.xml:11 doc/classes/Viewport.xml:15
+msgid "https://docs.godotengine.org/en/3.4/tutorials/2d/2d_transforms.html"
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:16 doc/classes/Control.xml:18
+#: doc/classes/Node2D.xml:10
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/2d/custom_drawing_in_2d.html"
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:23
+msgid ""
+"Overridable function called by the engine (if defined) to draw the canvas "
+"item."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:37
+msgid ""
+"Draws an arc between the given angles. The larger the value of "
+"[code]point_count[/code], the smoother the curve."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:48
+msgid ""
+"Draws a string character using a custom font. Returns the advance, depending "
+"on the character width and kerning with an optional next character."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:57
+msgid "Draws a colored circle."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:69
+msgid "Draws a colored polygon of any amount of points, convex or concave."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:80
+msgid ""
+"Draws a line from a 2D point to another, with a given color and width. It "
+"can be optionally antialiased."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:91
+msgid ""
+"Draws a [Mesh] in 2D, using the provided texture. See [MeshInstance2D] for "
+"related documentation."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:101
+msgid ""
+"Draws multiple, parallel lines with a uniform [code]color[/code].\n"
+"[b]Note:[/b] [code]width[/code] and [code]antialiased[/code] are currently "
+"not implemented and have no effect."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:112
+msgid ""
+"Draws multiple, parallel lines with a uniform [code]width[/code] and segment-"
+"by-segment coloring. Colors assigned to line segments match by index between "
+"[code]points[/code] and [code]colors[/code].\n"
+"[b]Note:[/b] [code]width[/code] and [code]antialiased[/code] are currently "
+"not implemented and have no effect."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:122
+msgid ""
+"Draws a [MultiMesh] in 2D with the provided texture. See "
+"[MultiMeshInstance2D] for related documentation."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:134
+msgid "Draws a polygon of any amount of points, convex or concave."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:144
+msgid ""
+"Draws interconnected line segments with a uniform [code]color[/code] and "
+"[code]width[/code] and optional antialiasing."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:154
+msgid ""
+"Draws interconnected line segments with a uniform [code]width[/code], "
+"segment-by-segment coloring, and optional antialiasing. Colors assigned to "
+"line segments match by index between [code]points[/code] and [code]colors[/"
+"code]."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:166
+msgid ""
+"Draws a custom primitive. 1 point for a point, 2 points for a line, 3 points "
+"for a triangle and 4 points for a quad."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:177
+msgid ""
+"Draws a rectangle. If [code]filled[/code] is [code]true[/code], the "
+"rectangle will be filled with the [code]color[/code] specified. If "
+"[code]filled[/code] is [code]false[/code], the rectangle will be drawn as a "
+"stroke with the [code]color[/code] and [code]width[/code] specified. If "
+"[code]antialiased[/code] is [code]true[/code], the lines will be "
+"antialiased.\n"
+"[b]Note:[/b] [code]width[/code] and [code]antialiased[/code] are only "
+"effective if [code]filled[/code] is [code]false[/code]."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:187
+msgid ""
+"Sets a custom transform for drawing via components. Anything drawn "
+"afterwards will be transformed by this."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:194
+msgid ""
+"Sets a custom transform for drawing via matrix. Anything drawn afterwards "
+"will be transformed by this."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:205
+msgid ""
+"Draws [code]text[/code] using the specified [code]font[/code] at the "
+"[code]position[/code] (bottom-left corner using the baseline of the font). "
+"The text will have its color multiplied by [code]modulate[/code]. If "
+"[code]clip_w[/code] is greater than or equal to 0, the text will be clipped "
+"if it exceeds the specified width.\n"
+"[b]Example using the default project font:[/b]\n"
+"[codeblock]\n"
+"# If using this method in a script that redraws constantly, move the\n"
+"# `default_font` declaration to a member variable assigned in `_ready()`\n"
+"# so the Control is only created once.\n"
+"var default_font = Control.new().get_font(\"font\")\n"
+"draw_string(default_font, Vector2(64, 64), \"Hello world\")\n"
+"[/codeblock]\n"
+"See also [method Font.draw]."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:222
+msgid "Draws a styled rectangle."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:232
+msgid "Draws a texture at a given position."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:244
+msgid ""
+"Draws a textured rectangle at a given position, optionally modulated by a "
+"color. If [code]transpose[/code] is [code]true[/code], the texture will have "
+"its X and Y coordinates swapped."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:257
+msgid ""
+"Draws a textured rectangle region at a given position, optionally modulated "
+"by a color. If [code]transpose[/code] is [code]true[/code], the texture will "
+"have its X and Y coordinates swapped."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:263 doc/classes/Spatial.xml:19
+msgid ""
+"Forces the transform to update. Transform changes in physics are not instant "
+"for performance reasons. Transforms are accumulated and then set. Use this "
+"if you need an up-to-date transform when doing physics operations."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:269
+msgid "Returns the [RID] of the [World2D] canvas where this item is in."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:275
+msgid "Returns the canvas item RID used by [VisualServer] for this item."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:281
+msgid "Returns the transform matrix of this item's canvas."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:287
+msgid "Returns the global position of the mouse."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:293
+msgid "Returns the global transform matrix of this item."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:299
+msgid ""
+"Returns the global transform matrix of this item in relation to the canvas."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:305
+msgid "Returns the mouse position relative to this item's position."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:311
+msgid "Returns the transform matrix of this item."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:317
+msgid "Returns the viewport's boundaries as a [Rect2]."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:323
+msgid "Returns this item's transform in relation to the viewport."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:329
+msgid "Returns the [World2D] where this item is in."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:335
+msgid "Hide the [CanvasItem] if it's currently visible."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:341
+msgid ""
+"Returns [code]true[/code] if local transform notifications are communicated "
+"to children."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:347
+msgid ""
+"Returns [code]true[/code] if the node is set as top-level. See [method "
+"set_as_toplevel]."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:353
+msgid ""
+"Returns [code]true[/code] if global transform notifications are communicated "
+"to children."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:359 doc/classes/Spatial.xml:89
+msgid ""
+"Returns [code]true[/code] if the node is present in the [SceneTree], its "
+"[member visible] property is [code]true[/code] and all its antecedents are "
+"also visible. If any antecedent is hidden, this node will not be visible in "
+"the scene tree."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:366
+msgid "Assigns [code]screen_point[/code] as this node's new local transform."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:373
+msgid ""
+"Transformations issued by [code]event[/code]'s inputs are applied in local "
+"space instead of global space."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:380
+msgid ""
+"If [code]enable[/code] is [code]true[/code], the node won't inherit its "
+"transform from parent canvas items."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:387
+msgid ""
+"If [code]enable[/code] is [code]true[/code], children will be updated with "
+"local transform data."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:394
+msgid ""
+"If [code]enable[/code] is [code]true[/code], children will be updated with "
+"global transform data."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:400
+msgid ""
+"Show the [CanvasItem] if it's currently hidden. For controls that inherit "
+"[Popup], the correct way to make them visible is to call one of the multiple "
+"[code]popup*()[/code] functions instead."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:406
+msgid ""
+"Queue the [CanvasItem] for update. [constant NOTIFICATION_DRAW] will be "
+"called on idle time to request redraw."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:412
+msgid ""
+"The rendering layers in which this [CanvasItem] responds to [Light2D] nodes."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:415
+msgid "The material applied to textures on this [CanvasItem]."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:418
+msgid "The color applied to textures on this [CanvasItem]."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:421
+msgid ""
+"The color applied to textures on this [CanvasItem]. This is not inherited by "
+"children [CanvasItem]s."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:424
+msgid "If [code]true[/code], the object draws behind its parent."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:427
+msgid "If [code]true[/code], the object draws on top of its parent."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:430
+msgid ""
+"If [code]true[/code], the parent [CanvasItem]'s [member material] property "
+"is used as this one's material."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:433
+msgid ""
+"If [code]true[/code], this [CanvasItem] is drawn. The node is only visible "
+"if all of its antecedents are visible as well (in other words, [method "
+"is_visible_in_tree] must return [code]true[/code]).\n"
+"[b]Note:[/b] For controls that inherit [Popup], the correct way to make them "
+"visible is to call one of the multiple [code]popup*()[/code] functions "
+"instead."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:440
+msgid ""
+"Emitted when the [CanvasItem] must redraw. This can only be connected "
+"realtime, as deferred will not allow drawing."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:445
+msgid "Emitted when becoming hidden."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:450
+msgid ""
+"Emitted when the item's [Rect2] boundaries (position or size) have changed, "
+"or when an action is taking place that may have impacted these boundaries (e."
+"g. changing [member Sprite.texture])."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:455
+msgid "Emitted when the visibility (hidden/visible) changes."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:461 doc/classes/CanvasItemMaterial.xml:39
+msgid ""
+"Mix blending mode. Colors are assumed to be independent of the alpha "
+"(opacity) value."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:464 doc/classes/CanvasItemMaterial.xml:42
+msgid "Additive blending mode."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:467 doc/classes/CanvasItemMaterial.xml:45
+msgid "Subtractive blending mode."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:470 doc/classes/CanvasItemMaterial.xml:48
+msgid "Multiplicative blending mode."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:473 doc/classes/CanvasItemMaterial.xml:51
+msgid ""
+"Mix blending mode. Colors are assumed to be premultiplied by the alpha "
+"(opacity) value."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:476
+msgid ""
+"Disables blending mode. Colors including alpha are written as-is. Only "
+"applicable for render targets with a transparent background. No lighting "
+"will be applied."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:479
+msgid ""
+"The [CanvasItem]'s transform has changed. This notification is only received "
+"if enabled by [method set_notify_transform] or [method "
+"set_notify_local_transform]."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:482
+msgid "The [CanvasItem] is requested to draw."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:485
+msgid "The [CanvasItem]'s visibility has changed."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:488
+msgid "The [CanvasItem] has entered the canvas."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:491
+msgid "The [CanvasItem] has exited the canvas."
+msgstr ""
+
+#: doc/classes/CanvasItemMaterial.xml:4
+msgid "A material for [CanvasItem]s."
+msgstr ""
+
+#: doc/classes/CanvasItemMaterial.xml:7
+msgid ""
+"[CanvasItemMaterial]s provide a means of modifying the textures associated "
+"with a CanvasItem. They specialize in describing blend and lighting "
+"behaviors for textures. Use a [ShaderMaterial] to more fully customize a "
+"material's interactions with a [CanvasItem]."
+msgstr ""
+
+#: doc/classes/CanvasItemMaterial.xml:15
+msgid ""
+"The manner in which a material's rendering is applied to underlying textures."
+msgstr ""
+
+#: doc/classes/CanvasItemMaterial.xml:18
+msgid "The manner in which material reacts to lighting."
+msgstr ""
+
+#: doc/classes/CanvasItemMaterial.xml:21
+msgid ""
+"The number of columns in the spritesheet assigned as [Texture] for a "
+"[Particles2D] or [CPUParticles2D].\n"
+"[b]Note:[/b] This property is only used and visible in the editor if [member "
+"particles_animation] is [code]true[/code]."
+msgstr ""
+
+#: doc/classes/CanvasItemMaterial.xml:25
+msgid ""
+"If [code]true[/code], the particles animation will loop.\n"
+"[b]Note:[/b] This property is only used and visible in the editor if [member "
+"particles_animation] is [code]true[/code]."
+msgstr ""
+
+#: doc/classes/CanvasItemMaterial.xml:29
+msgid ""
+"The number of rows in the spritesheet assigned as [Texture] for a "
+"[Particles2D] or [CPUParticles2D].\n"
+"[b]Note:[/b] This property is only used and visible in the editor if [member "
+"particles_animation] is [code]true[/code]."
+msgstr ""
+
+#: doc/classes/CanvasItemMaterial.xml:33
+msgid ""
+"If [code]true[/code], enable spritesheet-based animation features when "
+"assigned to [Particles2D] and [CPUParticles2D] nodes. The [member "
+"ParticlesMaterial.anim_speed] or [member CPUParticles2D.anim_speed] should "
+"also be set to a positive value for the animation to play.\n"
+"This property (and other [code]particles_anim_*[/code] properties that "
+"depend on it) has no effect on other types of nodes."
+msgstr ""
+
+#: doc/classes/CanvasItemMaterial.xml:54
+msgid ""
+"Render the material using both light and non-light sensitive material "
+"properties."
+msgstr ""
+
+#: doc/classes/CanvasItemMaterial.xml:57
+msgid "Render the material as if there were no light."
+msgstr ""
+
+#: doc/classes/CanvasItemMaterial.xml:60
+msgid "Render the material as if there were only light."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml:4
+msgid "Canvas drawing layer."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml:7
+msgid ""
+"Canvas drawing layer. [CanvasItem] nodes that are direct or indirect "
+"children of a [CanvasLayer] will be drawn in that layer. The layer is a "
+"numeric index that defines the draw order. The default 2D scene renders with "
+"index 0, so a [CanvasLayer] with index -1 will be drawn below, and one with "
+"index 1 will be drawn above. This is very useful for HUDs (in layer 1+ or "
+"above), or backgrounds (in layer -1 or below)."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml:11
+msgid "https://docs.godotengine.org/en/3.4/tutorials/2d/canvas_layers.html"
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml:18
+msgid "Returns the RID of the canvas used by this layer."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml:24
+msgid ""
+"The custom [Viewport] node assigned to the [CanvasLayer]. If [code]null[/"
+"code], uses the default viewport instead."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml:27
+msgid ""
+"Sets the layer to follow the viewport in order to simulate a pseudo 3D "
+"effect."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml:30
+msgid ""
+"Scales the layer when using [member follow_viewport_enable]. Layers moving "
+"into the foreground should have increasing scales, while layers moving into "
+"the background should have decreasing scales."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml:33
+msgid "Layer index for draw order. Lower values are drawn first."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml:36
+msgid "The layer's base offset."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml:39
+msgid "The layer's rotation in radians."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml:42
+msgid "The layer's rotation in degrees."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml:45
+msgid "The layer's scale."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml:48
+msgid "The layer's transform."
+msgstr ""
+
+#: doc/classes/CanvasModulate.xml:4
+msgid "Tint the entire canvas."
+msgstr ""
+
+#: doc/classes/CanvasModulate.xml:7
+msgid ""
+"[CanvasModulate] tints the canvas elements using its assigned [member color]."
+msgstr ""
+
+#: doc/classes/CanvasModulate.xml:15
+msgid "The tint color to apply."
+msgstr ""
+
+#: doc/classes/CapsuleMesh.xml:4 doc/classes/CapsuleMesh.xml:7
+msgid "Class representing a capsule-shaped [PrimitiveMesh]."
+msgstr ""
+
+#: doc/classes/CapsuleMesh.xml:15
+msgid ""
+"Height of the middle cylindrical part of the capsule (without the "
+"hemispherical ends).\n"
+"[b]Note:[/b] The capsule's total height is equal to [member mid_height] + 2 "
+"* [member radius]."
+msgstr ""
+
+#: doc/classes/CapsuleMesh.xml:19
+msgid "Number of radial segments on the capsule mesh."
+msgstr ""
+
+#: doc/classes/CapsuleMesh.xml:22
+msgid "Radius of the capsule mesh."
+msgstr ""
+
+#: doc/classes/CapsuleMesh.xml:25
+msgid "Number of rings along the height of the capsule."
+msgstr ""
+
+#: doc/classes/CapsuleShape.xml:4 doc/classes/CapsuleShape.xml:7
+msgid "Capsule shape for collisions."
+msgstr ""
+
+#: doc/classes/CapsuleShape.xml:16 doc/classes/CapsuleShape2D.xml:15
+msgid "The capsule's height."
+msgstr ""
+
+#: doc/classes/CapsuleShape.xml:19 doc/classes/CapsuleShape2D.xml:18
+msgid "The capsule's radius."
+msgstr ""
+
+#: doc/classes/CapsuleShape2D.xml:4 doc/classes/CapsuleShape2D.xml:7
+msgid "Capsule shape for 2D collisions."
+msgstr ""
+
+#: doc/classes/CenterContainer.xml:4
+msgid "Keeps children controls centered."
+msgstr ""
+
+#: doc/classes/CenterContainer.xml:7
+msgid ""
+"CenterContainer keeps children controls centered. This container keeps all "
+"children to their minimum size, in the center."
+msgstr ""
+
+#: doc/classes/CenterContainer.xml:15
+msgid ""
+"If [code]true[/code], centers children relative to the [CenterContainer]'s "
+"top left corner."
+msgstr ""
+
+#: doc/classes/CharFXTransform.xml:4
+msgid ""
+"Controls how an individual character will be displayed in a [RichTextEffect]."
+msgstr ""
+
+#: doc/classes/CharFXTransform.xml:7
+msgid ""
+"By setting various properties on this object, you can control how individual "
+"characters will be displayed in a [RichTextEffect]."
+msgstr ""
+
+#: doc/classes/CharFXTransform.xml:10 doc/classes/RichTextEffect.xml:16
+#: doc/classes/RichTextLabel.xml:15
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/gui/bbcode_in_richtextlabel."
+"html"
+msgstr ""
+
+#: doc/classes/CharFXTransform.xml:11 doc/classes/RichTextEffect.xml:17
+msgid ""
+"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
+msgstr ""
+
+#: doc/classes/CharFXTransform.xml:17 doc/classes/CharFXTransform.xml:45
+msgid ""
+"The index of the current character (starting from 0). Setting this property "
+"won't affect drawing."
+msgstr ""
+
+#: doc/classes/CharFXTransform.xml:20
+msgid ""
+"The Unicode codepoint the character will use. This only affects non-"
+"whitespace characters. [method @GDScript.ord] can be useful here. For "
+"example, the following will replace all characters with asterisks:\n"
+"[codeblock]\n"
+"# `char_fx` is the CharFXTransform parameter from `_process_custom_fx()`.\n"
+"# See the RichTextEffect documentation for details.\n"
+"char_fx.character = ord(\"*\")\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/CharFXTransform.xml:28
+msgid "The color the character will be drawn with."
+msgstr ""
+
+#: doc/classes/CharFXTransform.xml:31
+msgid ""
+"The time elapsed since the [RichTextLabel] was added to the scene tree (in "
+"seconds). Time stops when the [RichTextLabel] is paused (see [member Node."
+"pause_mode]). Resets when the text in the [RichTextLabel] is changed.\n"
+"[b]Note:[/b] Time still passes while the [RichTextLabel] is hidden."
+msgstr ""
+
+#: doc/classes/CharFXTransform.xml:35
+msgid ""
+"Contains the arguments passed in the opening BBCode tag. By default, "
+"arguments are strings; if their contents match a type such as [bool], [int] "
+"or [float], they will be converted automatically. Color codes in the form "
+"[code]#rrggbb[/code] or [code]#rgb[/code] will be converted to an opaque "
+"[Color]. String arguments may not contain spaces, even if they're quoted. If "
+"present, quotes will also be present in the final string.\n"
+"For example, the opening BBCode tag [code][example foo=hello bar=true baz=42 "
+"color=#ffffff][/code] will map to the following [Dictionary]:\n"
+"[codeblock]\n"
+"{\"foo\": \"hello\", \"bar\": true, \"baz\": 42, \"color\": Color(1, 1, 1, "
+"1)}\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/CharFXTransform.xml:42
+msgid "The position offset the character will be drawn with (in pixels)."
+msgstr ""
+
+#: doc/classes/CharFXTransform.xml:48
+msgid ""
+"If [code]true[/code], the character will be drawn. If [code]false[/code], "
+"the character will be hidden. Characters around hidden characters will "
+"reflow to take the space of hidden characters. If this is not desired, set "
+"their [member color] to [code]Color(1, 1, 1, 0)[/code] instead."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:4
+msgid "Binary choice user interface widget. See also [CheckButton]."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:7
+msgid ""
+"A checkbox allows the user to make a binary choice (choosing only one of two "
+"possible options). It's similar to [CheckButton] in functionality, but it "
+"has a different appearance. To follow established UX patterns, it's "
+"recommended to use CheckBox when toggling it has [b]no[/b] immediate effect "
+"on something. For instance, it should be used when toggling it will only do "
+"something once a confirmation button is pressed.\n"
+"See also [BaseButton] which contains common properties and methods "
+"associated with this node."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:22
+msgid "The vertical offset used when rendering the check icons (in pixels)."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:25
+msgid "The check icon to display when the [CheckBox] is checked."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:28
+msgid "The check icon to display when the [CheckBox] is checked and disabled."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:31
+msgid ""
+"The [StyleBox] to display as a background when the [CheckBox] is disabled."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:34
+msgid ""
+"The [StyleBox] to display as a background when the [CheckBox] is focused."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:37
+msgid "The [Font] to use for the [CheckBox] text."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:40
+msgid "The [CheckBox] text's font color."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:43
+msgid "The [CheckBox] text's font color when it's disabled."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:46
+msgid ""
+"The [CheckBox] text's font color when it's focused. Only replaces the normal "
+"text color of the checkbox. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:49
+msgid "The [CheckBox] text's font color when it's hovered."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:52
+msgid "The [CheckBox] text's font color when it's hovered and pressed."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:55
+msgid "The [CheckBox] text's font color when it's pressed."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:58
+msgid ""
+"The [StyleBox] to display as a background when the [CheckBox] is hovered."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:61
+msgid ""
+"The [StyleBox] to display as a background when the [CheckBox] is hovered and "
+"pressed."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:64
+msgid "The separation between the check icon and the text (in pixels)."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:67 doc/classes/CheckButton.xml:61
+msgid "The [StyleBox] to display as a background."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:70
+msgid ""
+"The [StyleBox] to display as a background when the [CheckBox] is pressed."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:73
+msgid ""
+"If the [CheckBox] is configured as a radio button, the icon to display when "
+"the [CheckBox] is checked."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:78
+msgid ""
+"If the [CheckBox] is configured as a radio button, the icon to display when "
+"the [CheckBox] is unchecked."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:83
+msgid "The check icon to display when the [CheckBox] is unchecked."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:86
+msgid ""
+"The check icon to display when the [CheckBox] is unchecked and disabled."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:4
+msgid "Checkable button. See also [CheckBox]."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:7
+msgid ""
+"CheckButton is a toggle button displayed as a check field. It's similar to "
+"[CheckBox] in functionality, but it has a different appearance. To follow "
+"established UX patterns, it's recommended to use CheckButton when toggling "
+"it has an [b]immediate[/b] effect on something. For instance, it should be "
+"used if toggling it enables/disables a setting without requiring the user to "
+"press a confirmation button.\n"
+"See also [BaseButton] which contains common properties and methods "
+"associated with this node."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:22
+msgid "The vertical offset used when rendering the toggle icons (in pixels)."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:25
+msgid ""
+"The [StyleBox] to display as a background when the [CheckButton] is disabled."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:28
+msgid ""
+"The [StyleBox] to display as a background when the [CheckButton] is focused."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:31
+msgid "The [Font] to use for the [CheckButton] text."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:34
+msgid "The [CheckButton] text's font color."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:37
+msgid "The [CheckButton] text's font color when it's disabled."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:40
+msgid ""
+"The [CheckButton] text's font color when it's focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:43
+msgid "The [CheckButton] text's font color when it's hovered."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:46
+msgid "The [CheckButton] text's font color when it's hovered and pressed."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:49
+msgid "The [CheckButton] text's font color when it's pressed."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:52
+msgid ""
+"The [StyleBox] to display as a background when the [CheckButton] is hovered."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:55
+msgid ""
+"The [StyleBox] to display as a background when the [CheckButton] is hovered "
+"and pressed."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:58
+msgid "The separation between the toggle icon and the text (in pixels)."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:64
+msgid "The icon to display when the [CheckButton] is unchecked."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:67
+msgid "The icon to display when the [CheckButton] is unchecked and disabled."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:70
+msgid "The icon to display when the [CheckButton] is checked."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:73
+msgid "The icon to display when the [CheckButton] is checked and disabled."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:76
+msgid ""
+"The [StyleBox] to display as a background when the [CheckButton] is pressed."
+msgstr ""
+
+#: doc/classes/CircleShape2D.xml:4
+msgid "Circular shape for 2D collisions."
+msgstr ""
+
+#: doc/classes/CircleShape2D.xml:7
+msgid ""
+"Circular shape for 2D collisions. This shape is useful for modeling balls or "
+"small characters and its collision detection with everything else is very "
+"fast."
+msgstr ""
+
+#: doc/classes/CircleShape2D.xml:15
+msgid "The circle's radius."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:4
+msgid "Class information repository."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:7
+msgid "Provides access to metadata stored for every available class."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:16
+msgid ""
+"Returns [code]true[/code] if you can instance objects from the specified "
+"[code]class[/code], [code]false[/code] in other case."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:23
+msgid "Returns whether the specified [code]class[/code] is available or not."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:30
+msgid ""
+"Returns a category associated with the class for use in documentation and "
+"the Asset Library. Debug mode required."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:39
+msgid ""
+"Returns an array with all the keys in [code]enum[/code] of [code]class[/"
+"code] or its ancestry."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:47
+msgid ""
+"Returns an array with all the enums of [code]class[/code] or its ancestry."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:55
+msgid ""
+"Returns the value of the integer constant [code]name[/code] of [code]class[/"
+"code] or its ancestry. Always returns 0 when the constant could not be found."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:64
+msgid ""
+"Returns which enum the integer constant [code]name[/code] of [code]class[/"
+"code] or its ancestry belongs to."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:72
+msgid ""
+"Returns an array with the names all the integer constants of [code]class[/"
+"code] or its ancestry."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:80
+msgid ""
+"Returns an array with all the methods of [code]class[/code] or its ancestry "
+"if [code]no_inheritance[/code] is [code]false[/code]. Every element of the "
+"array is a [Dictionary] with the following keys: [code]args[/code], "
+"[code]default_args[/code], [code]flags[/code], [code]id[/code], [code]name[/"
+"code], [code]return: (class_name, hint, hint_string, name, type, usage)[/"
+"code].\n"
+"[b]Note:[/b] In exported release builds the debug info is not available, so "
+"the returned dictionaries will contain only method names."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:89
+msgid ""
+"Returns the value of [code]property[/code] of [code]class[/code] or its "
+"ancestry."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:97
+msgid ""
+"Returns an array with all the properties of [code]class[/code] or its "
+"ancestry if [code]no_inheritance[/code] is [code]false[/code]."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:105
+msgid ""
+"Returns the [code]signal[/code] data of [code]class[/code] or its ancestry. "
+"The returned value is a [Dictionary] with the following keys: [code]args[/"
+"code], [code]default_args[/code], [code]flags[/code], [code]id[/code], "
+"[code]name[/code], [code]return: (class_name, hint, hint_string, name, type, "
+"usage)[/code]."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:113
+msgid ""
+"Returns an array with all the signals of [code]class[/code] or its ancestry "
+"if [code]no_inheritance[/code] is [code]false[/code]. Every element of the "
+"array is a [Dictionary] as described in [method class_get_signal]."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:122
+msgid ""
+"Returns whether [code]class[/code] or its ancestry has an enum called "
+"[code]name[/code] or not."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:130
+msgid ""
+"Returns whether [code]class[/code] or its ancestry has an integer constant "
+"called [code]name[/code] or not."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:139
+msgid ""
+"Returns whether [code]class[/code] (or its ancestry if [code]no_inheritance[/"
+"code] is [code]false[/code]) has a method called [code]method[/code] or not."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:147
+msgid ""
+"Returns whether [code]class[/code] or its ancestry has a signal called "
+"[code]signal[/code] or not."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:156
+msgid ""
+"Sets [code]property[/code] value of [code]class[/code] to [code]value[/code]."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:162
+msgid "Returns the names of all the classes available."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:169
+msgid ""
+"Returns the names of all the classes that directly or indirectly inherit "
+"from [code]class[/code]."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:176
+msgid "Returns the parent class of [code]class[/code]."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:183
+msgid "Creates an instance of [code]class[/code]."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:190
+msgid "Returns whether this [code]class[/code] is enabled or not."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:198
+msgid ""
+"Returns whether [code]inherits[/code] is an ancestor of [code]class[/code] "
+"or not."
+msgstr ""
+
+#: doc/classes/ClippedCamera.xml:4
+msgid "A [Camera] that includes collision."
+msgstr ""
+
+#: doc/classes/ClippedCamera.xml:7
+msgid ""
+"This node extends [Camera] to add collisions with [Area] and/or "
+"[PhysicsBody] nodes. The camera cannot move through colliding objects."
+msgstr ""
+
+#: doc/classes/ClippedCamera.xml:16
+msgid ""
+"Adds a collision exception so the camera does not collide with the specified "
+"node."
+msgstr ""
+
+#: doc/classes/ClippedCamera.xml:23
+msgid ""
+"Adds a collision exception so the camera does not collide with the specified "
+"[RID]."
+msgstr ""
+
+#: doc/classes/ClippedCamera.xml:29
+msgid "Removes all collision exceptions."
+msgstr ""
+
+#: doc/classes/ClippedCamera.xml:35
+msgid "Returns the distance the camera has been offset due to a collision."
+msgstr ""
+
+#: doc/classes/ClippedCamera.xml:42
+msgid ""
+"Returns [code]true[/code] if the specified bit index is on.\n"
+"[b]Note:[/b] Bit indices range from 0-19."
+msgstr ""
+
+#: doc/classes/ClippedCamera.xml:50
+msgid "Removes a collision exception with the specified node."
+msgstr ""
+
+#: doc/classes/ClippedCamera.xml:57
+msgid "Removes a collision exception with the specified [RID]."
+msgstr ""
+
+#: doc/classes/ClippedCamera.xml:65
+msgid ""
+"Sets the specified bit index to the [code]value[/code].\n"
+"[b]Note:[/b] Bit indices range from 0-19."
+msgstr ""
+
+#: doc/classes/ClippedCamera.xml:72
+msgid "If [code]true[/code], the camera stops on contact with [Area]s."
+msgstr ""
+
+#: doc/classes/ClippedCamera.xml:75
+msgid "If [code]true[/code], the camera stops on contact with [PhysicsBody]s."
+msgstr ""
+
+#: doc/classes/ClippedCamera.xml:78
+msgid ""
+"The camera's collision mask. Only objects in at least one collision layer "
+"matching the mask will be detected. See [url=https://docs.godotengine.org/"
+"en/3.4/tutorials/physics/physics_introduction.html#collision-layers-and-"
+"masks]Collision layers and masks[/url] in the documentation for more "
+"information."
+msgstr ""
+
+#: doc/classes/ClippedCamera.xml:81
+msgid ""
+"The camera's collision margin. The camera can't get closer than this "
+"distance to a colliding object."
+msgstr ""
+
+#: doc/classes/ClippedCamera.xml:84
+msgid "The camera's process callback. See [enum ProcessMode]."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:4
+msgid "Base node for collision objects."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:7
+msgid ""
+"CollisionObject is the base class for physics objects. It can hold any "
+"number of collision [Shape]s. Each shape must be assigned to a [i]shape "
+"owner[/i]. The CollisionObject can have any number of shape owners. Shape "
+"owners are not nodes and do not appear in the editor, but are accessible "
+"through code using the [code]shape_owner_*[/code] methods."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:20
+msgid ""
+"Receives unhandled [InputEvent]s. [code]position[/code] is the location in "
+"world space of the mouse pointer on the surface of the shape with index "
+"[code]shape_idx[/code] and [code]normal[/code] is the normal vector of the "
+"surface at that point. Connect to the [signal input_event] signal to easily "
+"pick up these events."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:27 doc/classes/CollisionObject2D.xml:25
+msgid ""
+"Creates a new shape owner for the given object. Returns [code]owner_id[/"
+"code] of the new owner for future reference."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:34 doc/classes/CollisionObject2D.xml:32
+msgid ""
+"Returns whether or not the specified [code]bit[/code] of the [member "
+"collision_layer] is set."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:41 doc/classes/CollisionObject2D.xml:39
+msgid ""
+"Returns whether or not the specified [code]bit[/code] of the [member "
+"collision_mask] is set."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:47 doc/classes/CollisionObject2D.xml:45
+msgid "Returns the object's [RID]."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:53 doc/classes/CollisionObject2D.xml:58
+msgid ""
+"Returns an [Array] of [code]owner_id[/code] identifiers. You can use these "
+"ids in other methods that take [code]owner_id[/code] as an argument."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:60 doc/classes/CollisionObject2D.xml:65
+msgid "If [code]true[/code], the shape owner and its shapes are disabled."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:67 doc/classes/CollisionObject2D.xml:79
+msgid "Removes the given shape owner."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:75 doc/classes/CollisionObject2D.xml:87
+msgid ""
+"If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/"
+"code] in the the [member collision_layer].\n"
+"If [code]value[/code] is [code]false[/code], clears the specified [code]bit[/"
+"code] in the the [member collision_layer]."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:84 doc/classes/CollisionObject2D.xml:96
+msgid ""
+"If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/"
+"code] in the the [member collision_mask].\n"
+"If [code]value[/code] is [code]false[/code], clears the specified [code]bit[/"
+"code] in the the [member collision_mask]."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:92 doc/classes/CollisionObject2D.xml:104
+msgid "Returns the [code]owner_id[/code] of the given shape."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:100
+msgid "Adds a [Shape] to the shape owner."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:107 doc/classes/CollisionObject2D.xml:119
+msgid "Removes all shapes from the shape owner."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:114 doc/classes/CollisionObject2D.xml:126
+msgid "Returns the parent object of the given shape owner."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:122
+msgid "Returns the [Shape] with the given id from the given shape owner."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:129 doc/classes/CollisionObject2D.xml:141
+msgid "Returns the number of shapes the given shape owner contains."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:137
+msgid ""
+"Returns the child index of the [Shape] with the given id from the given "
+"shape owner."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:144
+msgid "Returns the shape owner's [Transform]."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:152 doc/classes/CollisionObject2D.xml:164
+msgid "Removes a shape from the given shape owner."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:160 doc/classes/CollisionObject2D.xml:172
+msgid "If [code]true[/code], disables the given shape owner."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:168
+msgid "Sets the [Transform] of the given shape owner."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:174
+msgid ""
+"The physics layers this CollisionObject3D is in. Collision objects can exist "
+"in one or more of 32 different layers. See also [member collision_mask].\n"
+"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=https://docs.godotengine.org/en/latest/tutorials/physics/"
+"physics_introduction.html#collision-layers-and-masks]Collision layers and "
+"masks[/url] in the documentation for more information."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:178
+msgid ""
+"The physics layers this CollisionObject3D scans. Collision objects can scan "
+"one or more of 32 different layers. See also [member collision_layer].\n"
+"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=https://docs.godotengine.org/en/latest/tutorials/physics/"
+"physics_introduction.html#collision-layers-and-masks]Collision layers and "
+"masks[/url] in the documentation for more information."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:182
+msgid ""
+"If [code]true[/code], the [CollisionObject] will continue to receive input "
+"events as the mouse is dragged across its shapes."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:185
+msgid ""
+"If [code]true[/code], the [CollisionObject]'s shapes will respond to "
+"[RayCast]s."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:196
+msgid ""
+"Emitted when the object receives an unhandled [InputEvent]. [code]position[/"
+"code] is the location in world space of the mouse pointer on the surface of "
+"the shape with index [code]shape_idx[/code] and [code]normal[/code] is the "
+"normal vector of the surface at that point."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:201
+msgid "Emitted when the mouse pointer enters any of this object's shapes."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:206
+msgid "Emitted when the mouse pointer exits all this object's shapes."
+msgstr ""
+
+#: doc/classes/CollisionObject2D.xml:4
+msgid "Base node for 2D collision objects."
+msgstr ""
+
+#: doc/classes/CollisionObject2D.xml:7
+msgid ""
+"CollisionObject2D is the base class for 2D physics objects. It can hold any "
+"number of 2D collision [Shape2D]s. Each shape must be assigned to a [i]shape "
+"owner[/i]. The CollisionObject2D can have any number of shape owners. Shape "
+"owners are not nodes and do not appear in the editor, but are accessible "
+"through code using the [code]shape_owner_*[/code] methods."
+msgstr ""
+
+#: doc/classes/CollisionObject2D.xml:18
+msgid ""
+"Accepts unhandled [InputEvent]s. Requires [member input_pickable] to be "
+"[code]true[/code]. [code]shape_idx[/code] is the child index of the clicked "
+"[Shape2D]. Connect to the [code]input_event[/code] signal to easily pick up "
+"these events."
+msgstr ""
+
+#: doc/classes/CollisionObject2D.xml:52
+msgid ""
+"Returns the [code]one_way_collision_margin[/code] of the shape owner "
+"identified by given [code]owner_id[/code]."
+msgstr ""
+
+#: doc/classes/CollisionObject2D.xml:72
+msgid ""
+"Returns [code]true[/code] if collisions for the shape owner originating from "
+"this [CollisionObject2D] will not be reported to collided with "
+"[CollisionObject2D]s."
+msgstr ""
+
+#: doc/classes/CollisionObject2D.xml:112
+msgid "Adds a [Shape2D] to the shape owner."
+msgstr ""
+
+#: doc/classes/CollisionObject2D.xml:134
+msgid "Returns the [Shape2D] with the given id from the given shape owner."
+msgstr ""
+
+#: doc/classes/CollisionObject2D.xml:149
+msgid ""
+"Returns the child index of the [Shape2D] with the given id from the given "
+"shape owner."
+msgstr ""
+
+#: doc/classes/CollisionObject2D.xml:156
+msgid "Returns the shape owner's [Transform2D]."
+msgstr ""
+
+#: doc/classes/CollisionObject2D.xml:180
+msgid ""
+"If [code]enable[/code] is [code]true[/code], collisions for the shape owner "
+"originating from this [CollisionObject2D] will not be reported to collided "
+"with [CollisionObject2D]s."
+msgstr ""
+
+#: doc/classes/CollisionObject2D.xml:188
+msgid ""
+"Sets the [code]one_way_collision_margin[/code] of the shape owner identified "
+"by given [code]owner_id[/code] to [code]margin[/code] pixels."
+msgstr ""
+
+#: doc/classes/CollisionObject2D.xml:196
+msgid "Sets the [Transform2D] of the given shape owner."
+msgstr ""
+
+#: doc/classes/CollisionObject2D.xml:202
+msgid ""
+"The physics layers this CollisionObject2D is in. Collision objects can exist "
+"in one or more of 32 different layers. See also [member collision_mask].\n"
+"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=https://docs.godotengine.org/en/latest/tutorials/physics/"
+"physics_introduction.html#collision-layers-and-masks]Collision layers and "
+"masks[/url] in the documentation for more information."
+msgstr ""
+
+#: doc/classes/CollisionObject2D.xml:206
+msgid ""
+"The physics layers this CollisionObject2D scans. Collision objects can scan "
+"one or more of 32 different layers. See also [member collision_layer].\n"
+"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=https://docs.godotengine.org/en/latest/tutorials/physics/"
+"physics_introduction.html#collision-layers-and-masks]Collision layers and "
+"masks[/url] in the documentation for more information."
+msgstr ""
+
+#: doc/classes/CollisionObject2D.xml:210
+msgid ""
+"If [code]true[/code], this object is pickable. A pickable object can detect "
+"the mouse pointer entering/leaving, and if the mouse is inside it, report "
+"input events. Requires at least one [code]collision_layer[/code] bit to be "
+"set."
+msgstr ""
+
+#: doc/classes/CollisionObject2D.xml:219
+msgid ""
+"Emitted when an input event occurs. Requires [member input_pickable] to be "
+"[code]true[/code] and at least one [code]collision_layer[/code] bit to be "
+"set. See [method _input_event] for details."
+msgstr ""
+
+#: doc/classes/CollisionObject2D.xml:224
+msgid ""
+"Emitted when the mouse pointer enters any of this object's shapes. Requires "
+"[member input_pickable] to be [code]true[/code] and at least one "
+"[code]collision_layer[/code] bit to be set."
+msgstr ""
+
+#: doc/classes/CollisionObject2D.xml:229
+msgid ""
+"Emitted when the mouse pointer exits all this object's shapes. Requires "
+"[member input_pickable] to be [code]true[/code] and at least one "
+"[code]collision_layer[/code] bit to be set."
+msgstr ""
+
+#: doc/classes/CollisionPolygon.xml:4
+msgid "Editor-only class for defining a collision polygon in 3D space."
+msgstr ""
+
+#: doc/classes/CollisionPolygon.xml:7
+msgid ""
+"Allows editing a collision polygon's vertices on a selected plane. Can also "
+"set a depth perpendicular to that plane. This class is only available in the "
+"editor. It will not appear in the scene tree at run-time. Creates a [Shape] "
+"for gameplay. Properties modified during gameplay will have no effect."
+msgstr ""
+
+#: doc/classes/CollisionPolygon.xml:15
+msgid ""
+"Length that the resulting collision extends in either direction "
+"perpendicular to its polygon."
+msgstr ""
+
+#: doc/classes/CollisionPolygon.xml:18
+msgid "If [code]true[/code], no collision will be produced."
+msgstr ""
+
+#: doc/classes/CollisionPolygon.xml:21
+msgid ""
+"The collision margin for the generated [Shape]. See [member Shape.margin] "
+"for more details."
+msgstr ""
+
+#: doc/classes/CollisionPolygon.xml:24
+msgid ""
+"Array of vertices which define the polygon.\n"
+"[b]Note:[/b] The returned value is a copy of the original. Methods which "
+"mutate the size or properties of the return value will not impact the "
+"original polygon. To change properties of the polygon, assign it to a "
+"temporary variable and make changes before reassigning the [code]polygon[/"
+"code] member."
+msgstr ""
+
+#: doc/classes/CollisionPolygon2D.xml:4
+msgid "Defines a 2D collision polygon."
+msgstr ""
+
+#: doc/classes/CollisionPolygon2D.xml:7
+msgid ""
+"Provides a 2D collision polygon to a [CollisionObject2D] parent. Polygons "
+"can be drawn in the editor or specified by a list of vertices."
+msgstr ""
+
+#: doc/classes/CollisionPolygon2D.xml:15
+msgid "Collision build mode. Use one of the [enum BuildMode] constants."
+msgstr ""
+
+#: doc/classes/CollisionPolygon2D.xml:18
+msgid "If [code]true[/code], no collisions will be detected."
+msgstr ""
+
+#: doc/classes/CollisionPolygon2D.xml:21
+msgid ""
+"If [code]true[/code], only edges that face up, relative to "
+"[CollisionPolygon2D]'s rotation, will collide with other objects."
+msgstr ""
+
+#: doc/classes/CollisionPolygon2D.xml:24
+msgid ""
+"The margin used for one-way collision (in pixels). Higher values will make "
+"the shape thicker, and work better for colliders that enter the polygon at a "
+"high velocity."
+msgstr ""
+
+#: doc/classes/CollisionPolygon2D.xml:27
+msgid ""
+"The polygon's list of vertices. The final point will be connected to the "
+"first. The returned value is a clone of the [PoolVector2Array], not a "
+"reference."
+msgstr ""
+
+#: doc/classes/CollisionPolygon2D.xml:32
+msgid "Collisions will include the polygon and its contained area."
+msgstr ""
+
+#: doc/classes/CollisionPolygon2D.xml:35
+msgid "Collisions will only include the polygon edges."
+msgstr ""
+
+#: doc/classes/CollisionShape.xml:4
+msgid "Node that represents collision shape data in 3D space."
+msgstr ""
+
+#: doc/classes/CollisionShape.xml:7
+msgid ""
+"Editor facility for creating and editing collision shapes in 3D space. You "
+"can use this node to represent all sorts of collision shapes, for example, "
+"add this to an [Area] to give it a detection shape, or add it to a "
+"[PhysicsBody] to create a solid object. [b]IMPORTANT[/b]: this is an Editor-"
+"only helper to create shapes, use [method CollisionObject."
+"shape_owner_get_shape] to get the actual shape."
+msgstr ""
+
+#: doc/classes/CollisionShape.xml:10 doc/classes/CollisionShape2D.xml:10
+#: doc/classes/Physics2DDirectBodyState.xml:10
+#: doc/classes/Physics2DDirectSpaceState.xml:10 doc/classes/PhysicsBody.xml:10
+#: doc/classes/PhysicsBody2D.xml:10 doc/classes/PhysicsDirectBodyState.xml:10
+#: doc/classes/PhysicsDirectSpaceState.xml:10 doc/classes/RigidBody.xml:14
+#: doc/classes/Shape.xml:10 doc/classes/Shape2D.xml:10
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/physics/physics_introduction."
+"html"
+msgstr ""
+
+#: doc/classes/CollisionShape.xml:19
+msgid ""
+"Sets the collision shape's shape to the addition of all its convexed "
+"[MeshInstance] siblings geometry."
+msgstr ""
+
+#: doc/classes/CollisionShape.xml:26
+msgid ""
+"If this method exists within a script it will be called whenever the shape "
+"resource has been modified."
+msgstr ""
+
+#: doc/classes/CollisionShape.xml:32
+msgid "A disabled collision shape has no effect in the world."
+msgstr ""
+
+#: doc/classes/CollisionShape.xml:35 doc/classes/CollisionShape2D.xml:28
+msgid "The actual shape owned by this collision shape."
+msgstr ""
+
+#: doc/classes/CollisionShape2D.xml:4
+msgid "Node that represents collision shape data in 2D space."
+msgstr ""
+
+#: doc/classes/CollisionShape2D.xml:7
+msgid ""
+"Editor facility for creating and editing collision shapes in 2D space. You "
+"can use this node to represent all sorts of collision shapes, for example, "
+"add this to an [Area2D] to give it a detection shape, or add it to a "
+"[PhysicsBody2D] to create a solid object. [b]IMPORTANT[/b]: this is an "
+"Editor-only helper to create shapes, use [method CollisionObject2D."
+"shape_owner_get_shape] to get the actual shape."
+msgstr ""
+
+#: doc/classes/CollisionShape2D.xml:13 doc/classes/KinematicBody2D.xml:14
+#: doc/classes/RectangleShape2D.xml:11 doc/classes/TileMap.xml:17
+#: doc/classes/TileSet.xml:17
+msgid "https://godotengine.org/asset-library/asset/113"
+msgstr ""
+
+#: doc/classes/CollisionShape2D.xml:19
+msgid ""
+"A disabled collision shape has no effect in the world. This property should "
+"be changed with [method Object.set_deferred]."
+msgstr ""
+
+#: doc/classes/CollisionShape2D.xml:22
+msgid ""
+"Sets whether this collision shape should only detect collision on one side "
+"(top or bottom)."
+msgstr ""
+
+#: doc/classes/CollisionShape2D.xml:25
+msgid ""
+"The margin used for one-way collision (in pixels). Higher values will make "
+"the shape thicker, and work better for colliders that enter the shape at a "
+"high velocity."
+msgstr ""
+
+#: doc/classes/Color.xml:4
+msgid "Color in RGBA format using floats on the range of 0 to 1."
+msgstr ""
+
+#: doc/classes/Color.xml:7
+msgid ""
+"A color represented by red, green, blue, and alpha (RGBA) components. The "
+"alpha component is often used for transparency. Values are in floating-point "
+"and usually range from 0 to 1. Some properties (such as CanvasItem.modulate) "
+"may accept values greater than 1 (overbright or HDR colors).\n"
+"You can also create a color from standardized color names by using [method "
+"@GDScript.ColorN] or directly using the color constants defined here. The "
+"standardized color set is based on the [url=https://en.wikipedia.org/wiki/"
+"X11_color_names]X11 color names[/url].\n"
+"If you want to supply values in a range of 0 to 255, you should use [method "
+"@GDScript.Color8].\n"
+"[b]Note:[/b] In a boolean context, a Color will evaluate to [code]false[/"
+"code] if it's equal to [code]Color(0, 0, 0, 1)[/code] (opaque black). "
+"Otherwise, a Color will always evaluate to [code]true[/code].\n"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/master/img/"
+"color_constants.png]Color constants cheatsheet[/url]"
+msgstr ""
+
+#: doc/classes/Color.xml:14 doc/classes/ColorPickerButton.xml:13
+msgid "https://godotengine.org/asset-library/asset/517"
+msgstr ""
+
+#: doc/classes/Color.xml:15 doc/classes/ColorPicker.xml:11
+msgid "https://godotengine.org/asset-library/asset/146"
+msgstr ""
+
+#: doc/classes/Color.xml:16 doc/classes/ColorPickerButton.xml:12
+msgid "https://godotengine.org/asset-library/asset/133"
+msgstr ""
+
+#: doc/classes/Color.xml:23
+msgid ""
+"Constructs a color from an HTML hexadecimal color string in ARGB or RGB "
+"format. See also [method @GDScript.ColorN].\n"
+"[codeblock]\n"
+"# Each of the following creates the same color RGBA(178, 217, 10, 255).\n"
+"var c1 = Color(\"#ffb2d90a\") # ARGB format with \"#\".\n"
+"var c2 = Color(\"ffb2d90a\") # ARGB format.\n"
+"var c3 = Color(\"#b2d90a\") # RGB format with \"#\".\n"
+"var c4 = Color(\"b2d90a\") # RGB format.\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Color.xml:37
+msgid ""
+"Constructs a color from a 32-bit integer in RGBA format (each byte "
+"represents a color channel).\n"
+"[codeblock]\n"
+"var c = Color(274) # Similar to Color(0.0, 0.0, 0.004, 0.07)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Color.xml:49
+msgid ""
+"Constructs a color from RGB values, typically between 0 and 1. Alpha will be "
+"1.\n"
+"[codeblock]\n"
+"var color = Color(0.2, 1.0, 0.7) # Similar to Color8(51, 255, 178, 255)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Color.xml:62
+msgid ""
+"Constructs a color from RGBA values, typically between 0 and 1.\n"
+"[codeblock]\n"
+"var color = Color(0.2, 1.0, 0.7, 0.8) # Similar to Color8(51, 255, 178, "
+"204)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Color.xml:72
+msgid ""
+"Returns a new color resulting from blending this color over another. If the "
+"color is opaque, the result is also opaque. The second color may have a "
+"range of alpha values.\n"
+"[codeblock]\n"
+"var bg = Color(0.0, 1.0, 0.0, 0.5) # Green with alpha of 50%\n"
+"var fg = Color(1.0, 0.0, 0.0, 0.5) # Red with alpha of 50%\n"
+"var blended_color = bg.blend(fg) # Brown with alpha of 75%\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Color.xml:83
+msgid ""
+"Returns the most contrasting color.\n"
+"[codeblock]\n"
+"var c = Color(0.3, 0.4, 0.9)\n"
+"var contrasted_color = c.contrasted() # Equivalent to RGBA(204, 229, 102, "
+"255)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Color.xml:94
+msgid ""
+"Returns a new color resulting from making this color darker by the specified "
+"percentage (ratio from 0 to 1).\n"
+"[codeblock]\n"
+"var green = Color(0.0, 1.0, 0.0)\n"
+"var darkgreen = green.darkened(0.2) # 20% darker than regular green\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Color.xml:108
+msgid ""
+"Constructs a color from an HSV profile. [code]h[/code], [code]s[/code], and "
+"[code]v[/code] are values between 0 and 1.\n"
+"[codeblock]\n"
+"var c = Color.from_hsv(0.58, 0.5, 0.79, 0.8) # Equivalent to HSV(210, 50, "
+"79, 0.8) or Color8(100, 151, 201, 0.8)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Color.xml:117
+msgid ""
+"Returns the color's grayscale representation.\n"
+"The gray value is calculated as [code](r + g + b) / 3[/code].\n"
+"[codeblock]\n"
+"var c = Color(0.2, 0.45, 0.82)\n"
+"var gray = c.gray() # A value of 0.466667\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Color.xml:128
+msgid ""
+"Returns the inverted color [code](1 - r, 1 - g, 1 - b, a)[/code].\n"
+"[codeblock]\n"
+"var color = Color(0.3, 0.4, 0.9)\n"
+"var inverted_color = color.inverted() # Equivalent to Color(0.7, 0.6, 0.1)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Color.xml:139
+msgid ""
+"Returns [code]true[/code] if this color and [code]color[/code] are "
+"approximately equal, by running [method @GDScript.is_equal_approx] on each "
+"component."
+msgstr ""
+
+#: doc/classes/Color.xml:146
+msgid ""
+"Returns a new color resulting from making this color lighter by the "
+"specified percentage (ratio from 0 to 1).\n"
+"[codeblock]\n"
+"var green = Color(0.0, 1.0, 0.0)\n"
+"var lightgreen = green.lightened(0.2) # 20% lighter than regular green\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Color.xml:158
+msgid ""
+"Returns the linear interpolation with another color. The interpolation "
+"factor [code]weight[/code] is between 0 and 1.\n"
+"[codeblock]\n"
+"var c1 = Color(1.0, 0.0, 0.0)\n"
+"var c2 = Color(0.0, 1.0, 0.0)\n"
+"var li_c = c1.linear_interpolate(c2, 0.5) # Equivalent to Color(0.5, 0.5, "
+"0.0)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Color.xml:169
+msgid ""
+"Returns the color converted to a 32-bit integer in ABGR format (each byte "
+"represents a color channel). ABGR is the reversed version of the default "
+"format.\n"
+"[codeblock]\n"
+"var color = Color(1, 0.5, 0.2)\n"
+"print(color.to_abgr32()) # Prints 4281565439\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Color.xml:179
+msgid ""
+"Returns the color converted to a 64-bit integer in ABGR format (each word "
+"represents a color channel). ABGR is the reversed version of the default "
+"format.\n"
+"[codeblock]\n"
+"var color = Color(1, 0.5, 0.2)\n"
+"print(color.to_abgr64()) # Prints -225178692812801\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Color.xml:189
+msgid ""
+"Returns the color converted to a 32-bit integer in ARGB format (each byte "
+"represents a color channel). ARGB is more compatible with DirectX.\n"
+"[codeblock]\n"
+"var color = Color(1, 0.5, 0.2)\n"
+"print(color.to_argb32()) # Prints 4294934323\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Color.xml:199
+msgid ""
+"Returns the color converted to a 64-bit integer in ARGB format (each word "
+"represents a color channel). ARGB is more compatible with DirectX.\n"
+"[codeblock]\n"
+"var color = Color(1, 0.5, 0.2)\n"
+"print(color.to_argb64()) # Prints -2147470541\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Color.xml:210
+msgid ""
+"Returns the color's HTML hexadecimal color string in ARGB format (ex: "
+"[code]ff34f822[/code]).\n"
+"Setting [code]with_alpha[/code] to [code]false[/code] excludes alpha from "
+"the hexadecimal string.\n"
+"[codeblock]\n"
+"var c = Color(1, 1, 1, 0.5)\n"
+"var s1 = c.to_html() # Returns \"7fffffff\"\n"
+"var s2 = c.to_html(false) # Returns \"ffffff\"\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Color.xml:222
+msgid ""
+"Returns the color converted to a 32-bit integer in RGBA format (each byte "
+"represents a color channel). RGBA is Godot's default format.\n"
+"[codeblock]\n"
+"var color = Color(1, 0.5, 0.2)\n"
+"print(color.to_rgba32()) # Prints 4286526463\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Color.xml:232
+msgid ""
+"Returns the color converted to a 64-bit integer in RGBA format (each word "
+"represents a color channel). RGBA is Godot's default format.\n"
+"[codeblock]\n"
+"var color = Color(1, 0.5, 0.2)\n"
+"print(color.to_rgba64()) # Prints -140736629309441\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Color.xml:242
+msgid ""
+"The color's alpha (transparency) component, typically on the range of 0 to 1."
+msgstr ""
+
+#: doc/classes/Color.xml:245
+msgid "Wrapper for [member a] that uses the range 0 to 255 instead of 0 to 1."
+msgstr ""
+
+#: doc/classes/Color.xml:248
+msgid "The color's blue component, typically on the range of 0 to 1."
+msgstr ""
+
+#: doc/classes/Color.xml:251
+msgid "Wrapper for [member b] that uses the range 0 to 255 instead of 0 to 1."
+msgstr ""
+
+#: doc/classes/Color.xml:254
+msgid "The color's green component, typically on the range of 0 to 1."
+msgstr ""
+
+#: doc/classes/Color.xml:257
+msgid "Wrapper for [member g] that uses the range 0 to 255 instead of 0 to 1."
+msgstr ""
+
+#: doc/classes/Color.xml:260
+msgid "The HSV hue of this color, on the range 0 to 1."
+msgstr ""
+
+#: doc/classes/Color.xml:263
+msgid "The color's red component, typically on the range of 0 to 1."
+msgstr ""
+
+#: doc/classes/Color.xml:266
+msgid "Wrapper for [member r] that uses the range 0 to 255 instead of 0 to 1."
+msgstr ""
+
+#: doc/classes/Color.xml:269
+msgid "The HSV saturation of this color, on the range 0 to 1."
+msgstr ""
+
+#: doc/classes/Color.xml:272
+msgid "The HSV value (brightness) of this color, on the range 0 to 1."
+msgstr ""
+
+#: doc/classes/Color.xml:277
+msgid "Alice blue color."
+msgstr ""
+
+#: doc/classes/Color.xml:280
+msgid "Antique white color."
+msgstr ""
+
+#: doc/classes/Color.xml:283
+msgid "Aqua color."
+msgstr ""
+
+#: doc/classes/Color.xml:286
+msgid "Aquamarine color."
+msgstr ""
+
+#: doc/classes/Color.xml:289
+msgid "Azure color."
+msgstr ""
+
+#: doc/classes/Color.xml:292
+msgid "Beige color."
+msgstr ""
+
+#: doc/classes/Color.xml:295
+msgid "Bisque color."
+msgstr ""
+
+#: doc/classes/Color.xml:298
+msgid "Black color."
+msgstr ""
+
+#: doc/classes/Color.xml:301
+msgid "Blanche almond color."
+msgstr ""
+
+#: doc/classes/Color.xml:304
+msgid "Blue color."
+msgstr ""
+
+#: doc/classes/Color.xml:307
+msgid "Blue violet color."
+msgstr ""
+
+#: doc/classes/Color.xml:310
+msgid "Brown color."
+msgstr ""
+
+#: doc/classes/Color.xml:313
+msgid "Burly wood color."
+msgstr ""
+
+#: doc/classes/Color.xml:316
+msgid "Cadet blue color."
+msgstr ""
+
+#: doc/classes/Color.xml:319
+msgid "Chartreuse color."
+msgstr ""
+
+#: doc/classes/Color.xml:322
+msgid "Chocolate color."
+msgstr ""
+
+#: doc/classes/Color.xml:325
+msgid "Coral color."
+msgstr ""
+
+#: doc/classes/Color.xml:328
+msgid "Cornflower color."
+msgstr ""
+
+#: doc/classes/Color.xml:331
+msgid "Corn silk color."
+msgstr ""
+
+#: doc/classes/Color.xml:334
+msgid "Crimson color."
+msgstr ""
+
+#: doc/classes/Color.xml:337
+msgid "Cyan color."
+msgstr ""
+
+#: doc/classes/Color.xml:340
+msgid "Dark blue color."
+msgstr ""
+
+#: doc/classes/Color.xml:343
+msgid "Dark cyan color."
+msgstr ""
+
+#: doc/classes/Color.xml:346
+msgid "Dark goldenrod color."
+msgstr ""
+
+#: doc/classes/Color.xml:349
+msgid "Dark gray color."
+msgstr ""
+
+#: doc/classes/Color.xml:352
+msgid "Dark green color."
+msgstr ""
+
+#: doc/classes/Color.xml:355
+msgid "Dark khaki color."
+msgstr ""
+
+#: doc/classes/Color.xml:358
+msgid "Dark magenta color."
+msgstr ""
+
+#: doc/classes/Color.xml:361
+msgid "Dark olive green color."
+msgstr ""
+
+#: doc/classes/Color.xml:364
+msgid "Dark orange color."
+msgstr ""
+
+#: doc/classes/Color.xml:367
+msgid "Dark orchid color."
+msgstr ""
+
+#: doc/classes/Color.xml:370
+msgid "Dark red color."
+msgstr ""
+
+#: doc/classes/Color.xml:373
+msgid "Dark salmon color."
+msgstr ""
+
+#: doc/classes/Color.xml:376
+msgid "Dark sea green color."
+msgstr ""
+
+#: doc/classes/Color.xml:379
+msgid "Dark slate blue color."
+msgstr ""
+
+#: doc/classes/Color.xml:382
+msgid "Dark slate gray color."
+msgstr ""
+
+#: doc/classes/Color.xml:385
+msgid "Dark turquoise color."
+msgstr ""
+
+#: doc/classes/Color.xml:388
+msgid "Dark violet color."
+msgstr ""
+
+#: doc/classes/Color.xml:391
+msgid "Deep pink color."
+msgstr ""
+
+#: doc/classes/Color.xml:394
+msgid "Deep sky blue color."
+msgstr ""
+
+#: doc/classes/Color.xml:397
+msgid "Dim gray color."
+msgstr ""
+
+#: doc/classes/Color.xml:400
+msgid "Dodger blue color."
+msgstr ""
+
+#: doc/classes/Color.xml:403
+msgid "Firebrick color."
+msgstr ""
+
+#: doc/classes/Color.xml:406
+msgid "Floral white color."
+msgstr ""
+
+#: doc/classes/Color.xml:409
+msgid "Forest green color."
+msgstr ""
+
+#: doc/classes/Color.xml:412
+msgid "Fuchsia color."
+msgstr ""
+
+#: doc/classes/Color.xml:415
+msgid "Gainsboro color."
+msgstr ""
+
+#: doc/classes/Color.xml:418
+msgid "Ghost white color."
+msgstr ""
+
+#: doc/classes/Color.xml:421
+msgid "Gold color."
+msgstr ""
+
+#: doc/classes/Color.xml:424
+msgid "Goldenrod color."
+msgstr ""
+
+#: doc/classes/Color.xml:427
+msgid "Gray color."
+msgstr ""
+
+#: doc/classes/Color.xml:430
+msgid "Green color."
+msgstr ""
+
+#: doc/classes/Color.xml:433
+msgid "Green yellow color."
+msgstr ""
+
+#: doc/classes/Color.xml:436
+msgid "Honeydew color."
+msgstr ""
+
+#: doc/classes/Color.xml:439
+msgid "Hot pink color."
+msgstr ""
+
+#: doc/classes/Color.xml:442
+msgid "Indian red color."
+msgstr ""
+
+#: doc/classes/Color.xml:445
+msgid "Indigo color."
+msgstr ""
+
+#: doc/classes/Color.xml:448
+msgid "Ivory color."
+msgstr ""
+
+#: doc/classes/Color.xml:451
+msgid "Khaki color."
+msgstr ""
+
+#: doc/classes/Color.xml:454
+msgid "Lavender color."
+msgstr ""
+
+#: doc/classes/Color.xml:457
+msgid "Lavender blush color."
+msgstr ""
+
+#: doc/classes/Color.xml:460
+msgid "Lawn green color."
+msgstr ""
+
+#: doc/classes/Color.xml:463
+msgid "Lemon chiffon color."
+msgstr ""
+
+#: doc/classes/Color.xml:466
+msgid "Light blue color."
+msgstr ""
+
+#: doc/classes/Color.xml:469
+msgid "Light coral color."
+msgstr ""
+
+#: doc/classes/Color.xml:472
+msgid "Light cyan color."
+msgstr ""
+
+#: doc/classes/Color.xml:475
+msgid "Light goldenrod color."
+msgstr ""
+
+#: doc/classes/Color.xml:478
+msgid "Light gray color."
+msgstr ""
+
+#: doc/classes/Color.xml:481
+msgid "Light green color."
+msgstr ""
+
+#: doc/classes/Color.xml:484
+msgid "Light pink color."
+msgstr ""
+
+#: doc/classes/Color.xml:487
+msgid "Light salmon color."
+msgstr ""
+
+#: doc/classes/Color.xml:490
+msgid "Light sea green color."
+msgstr ""
+
+#: doc/classes/Color.xml:493
+msgid "Light sky blue color."
+msgstr ""
+
+#: doc/classes/Color.xml:496
+msgid "Light slate gray color."
+msgstr ""
+
+#: doc/classes/Color.xml:499
+msgid "Light steel blue color."
+msgstr ""
+
+#: doc/classes/Color.xml:502
+msgid "Light yellow color."
+msgstr ""
+
+#: doc/classes/Color.xml:505
+msgid "Lime color."
+msgstr ""
+
+#: doc/classes/Color.xml:508
+msgid "Lime green color."
+msgstr ""
+
+#: doc/classes/Color.xml:511
+msgid "Linen color."
+msgstr ""
+
+#: doc/classes/Color.xml:514
+msgid "Magenta color."
+msgstr ""
+
+#: doc/classes/Color.xml:517
+msgid "Maroon color."
+msgstr ""
+
+#: doc/classes/Color.xml:520
+msgid "Medium aquamarine color."
+msgstr ""
+
+#: doc/classes/Color.xml:523
+msgid "Medium blue color."
+msgstr ""
+
+#: doc/classes/Color.xml:526
+msgid "Medium orchid color."
+msgstr ""
+
+#: doc/classes/Color.xml:529
+msgid "Medium purple color."
+msgstr ""
+
+#: doc/classes/Color.xml:532
+msgid "Medium sea green color."
+msgstr ""
+
+#: doc/classes/Color.xml:535
+msgid "Medium slate blue color."
+msgstr ""
+
+#: doc/classes/Color.xml:538
+msgid "Medium spring green color."
+msgstr ""
+
+#: doc/classes/Color.xml:541
+msgid "Medium turquoise color."
+msgstr ""
+
+#: doc/classes/Color.xml:544
+msgid "Medium violet red color."
+msgstr ""
+
+#: doc/classes/Color.xml:547
+msgid "Midnight blue color."
+msgstr ""
+
+#: doc/classes/Color.xml:550
+msgid "Mint cream color."
+msgstr ""
+
+#: doc/classes/Color.xml:553
+msgid "Misty rose color."
+msgstr ""
+
+#: doc/classes/Color.xml:556
+msgid "Moccasin color."
+msgstr ""
+
+#: doc/classes/Color.xml:559
+msgid "Navajo white color."
+msgstr ""
+
+#: doc/classes/Color.xml:562
+msgid "Navy blue color."
+msgstr ""
+
+#: doc/classes/Color.xml:565
+msgid "Old lace color."
+msgstr ""
+
+#: doc/classes/Color.xml:568
+msgid "Olive color."
+msgstr ""
+
+#: doc/classes/Color.xml:571
+msgid "Olive drab color."
+msgstr ""
+
+#: doc/classes/Color.xml:574
+msgid "Orange color."
+msgstr ""
+
+#: doc/classes/Color.xml:577
+msgid "Orange red color."
+msgstr ""
+
+#: doc/classes/Color.xml:580
+msgid "Orchid color."
+msgstr ""
+
+#: doc/classes/Color.xml:583
+msgid "Pale goldenrod color."
+msgstr ""
+
+#: doc/classes/Color.xml:586
+msgid "Pale green color."
+msgstr ""
+
+#: doc/classes/Color.xml:589
+msgid "Pale turquoise color."
+msgstr ""
+
+#: doc/classes/Color.xml:592
+msgid "Pale violet red color."
+msgstr ""
+
+#: doc/classes/Color.xml:595
+msgid "Papaya whip color."
+msgstr ""
+
+#: doc/classes/Color.xml:598
+msgid "Peach puff color."
+msgstr ""
+
+#: doc/classes/Color.xml:601
+msgid "Peru color."
+msgstr ""
+
+#: doc/classes/Color.xml:604
+msgid "Pink color."
+msgstr ""
+
+#: doc/classes/Color.xml:607
+msgid "Plum color."
+msgstr ""
+
+#: doc/classes/Color.xml:610
+msgid "Powder blue color."
+msgstr ""
+
+#: doc/classes/Color.xml:613
+msgid "Purple color."
+msgstr ""
+
+#: doc/classes/Color.xml:616
+msgid "Rebecca purple color."
+msgstr ""
+
+#: doc/classes/Color.xml:619
+msgid "Red color."
+msgstr ""
+
+#: doc/classes/Color.xml:622
+msgid "Rosy brown color."
+msgstr ""
+
+#: doc/classes/Color.xml:625
+msgid "Royal blue color."
+msgstr ""
+
+#: doc/classes/Color.xml:628
+msgid "Saddle brown color."
+msgstr ""
+
+#: doc/classes/Color.xml:631
+msgid "Salmon color."
+msgstr ""
+
+#: doc/classes/Color.xml:634
+msgid "Sandy brown color."
+msgstr ""
+
+#: doc/classes/Color.xml:637
+msgid "Sea green color."
+msgstr ""
+
+#: doc/classes/Color.xml:640
+msgid "Seashell color."
+msgstr ""
+
+#: doc/classes/Color.xml:643
+msgid "Sienna color."
+msgstr ""
+
+#: doc/classes/Color.xml:646
+msgid "Silver color."
+msgstr ""
+
+#: doc/classes/Color.xml:649
+msgid "Sky blue color."
+msgstr ""
+
+#: doc/classes/Color.xml:652
+msgid "Slate blue color."
+msgstr ""
+
+#: doc/classes/Color.xml:655
+msgid "Slate gray color."
+msgstr ""
+
+#: doc/classes/Color.xml:658
+msgid "Snow color."
+msgstr ""
+
+#: doc/classes/Color.xml:661
+msgid "Spring green color."
+msgstr ""
+
+#: doc/classes/Color.xml:664
+msgid "Steel blue color."
+msgstr ""
+
+#: doc/classes/Color.xml:667
+msgid "Tan color."
+msgstr ""
+
+#: doc/classes/Color.xml:670
+msgid "Teal color."
+msgstr ""
+
+#: doc/classes/Color.xml:673
+msgid "Thistle color."
+msgstr ""
+
+#: doc/classes/Color.xml:676
+msgid "Tomato color."
+msgstr ""
+
+#: doc/classes/Color.xml:679
+msgid "Transparent color (white with no alpha)."
+msgstr ""
+
+#: doc/classes/Color.xml:682
+msgid "Turquoise color."
+msgstr ""
+
+#: doc/classes/Color.xml:685
+msgid "Violet color."
+msgstr ""
+
+#: doc/classes/Color.xml:688
+msgid "Web gray color."
+msgstr ""
+
+#: doc/classes/Color.xml:691
+msgid "Web green color."
+msgstr ""
+
+#: doc/classes/Color.xml:694
+msgid "Web maroon color."
+msgstr ""
+
+#: doc/classes/Color.xml:697
+msgid "Web purple color."
+msgstr ""
+
+#: doc/classes/Color.xml:700
+msgid "Wheat color."
+msgstr ""
+
+#: doc/classes/Color.xml:703
+msgid "White color."
+msgstr ""
+
+#: doc/classes/Color.xml:706
+msgid "White smoke color."
+msgstr ""
+
+#: doc/classes/Color.xml:709
+msgid "Yellow color."
+msgstr ""
+
+#: doc/classes/Color.xml:712
+msgid "Yellow green color."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:4
+msgid "Color picker control."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:7
+msgid ""
+"Displays a color picker widget. Useful for selecting a color from an RGB/"
+"RGBA colorspace.\n"
+"[b]Note:[/b] This control is the color picker widget itself. You can use a "
+"[ColorPickerButton] instead if you need a button that brings up a "
+"[ColorPicker] in a pop-up."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:18
+msgid ""
+"Adds the given color to a list of color presets. The presets are displayed "
+"in the color picker and the user will be able to select them.\n"
+"[b]Note:[/b] The presets list is only for [i]this[/i] color picker."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:26
+msgid ""
+"Removes the given color from the list of color presets of this color picker."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:32
+msgid "Returns the list of colors in the presets of the color picker."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:38 doc/classes/ColorPickerButton.xml:33
+msgid "The currently selected color."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:41
+msgid ""
+"If [code]true[/code], the color will apply only after the user releases the "
+"mouse button, otherwise it will apply immediately even in mouse motion event "
+"(which can cause performance issues)."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:44
+msgid "If [code]true[/code], shows an alpha channel slider (transparency)."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:47
+msgid ""
+"If [code]true[/code], allows editing the color with Hue/Saturation/Value "
+"sliders.\n"
+"[b]Note:[/b] Cannot be enabled if raw mode is on."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:51
+msgid "If [code]true[/code], the \"add preset\" button is enabled."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:54
+msgid "If [code]true[/code], saved color presets are visible."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:57
+msgid ""
+"If [code]true[/code], allows the color R, G, B component values to go beyond "
+"1.0, which can be used for certain special operations that require it (like "
+"tinting without darkening or rendering sprites in HDR).\n"
+"[b]Note:[/b] Cannot be enabled if HSV mode is on."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:65
+msgid "Emitted when the color is changed."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:71
+msgid "Emitted when a preset is added."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:77
+msgid "Emitted when a preset is removed."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:85
+msgid "The icon for the \"Add Preset\" button."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:88
+msgid "Custom texture for the hue selection slider on the right."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:93
+msgid "The width of the hue selection slider."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:98
+msgid "The margin around the [ColorPicker]."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:101
+msgid ""
+"The indicator used to signalize that the color value is outside the 0-1 "
+"range."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:106
+msgid "The icon for the screen color picker button."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:109
+msgid "The height of the saturation-value selection box."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:112
+msgid "The width of the saturation-value selection box."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:4
+msgid "Button that pops out a [ColorPicker]."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:7
+msgid ""
+"Encapsulates a [ColorPicker] making it accessible by pressing a button. "
+"Pressing the button will toggle the [ColorPicker] visibility.\n"
+"See also [BaseButton] which contains common properties and methods "
+"associated with this node.\n"
+"[b]Note:[/b] By default, the button may not be wide enough for the color "
+"preview swatch to be visible. Make sure to set [member Control."
+"rect_min_size] to a big enough value to give the button enough space."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:19
+msgid ""
+"Returns the [ColorPicker] that this node toggles.\n"
+"[b]Warning:[/b] This is a required internal node, removing and freeing it "
+"may cause a crash. If you wish to hide it or any of its children, use their "
+"[member CanvasItem.visible] property."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:26
+msgid ""
+"Returns the control's [PopupPanel] which allows you to connect to popup "
+"signals. This allows you to handle events when the ColorPicker is shown or "
+"hidden.\n"
+"[b]Warning:[/b] This is a required internal node, removing and freeing it "
+"may cause a crash. If you wish to hide it or any of its children, use their "
+"[member CanvasItem.visible] property."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:36
+msgid ""
+"If [code]true[/code], the alpha channel in the displayed [ColorPicker] will "
+"be visible."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:44
+msgid "Emitted when the color changes."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:49
+msgid ""
+"Emitted when the [ColorPicker] is created (the button is pressed for the "
+"first time)."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:54
+msgid "Emitted when the [ColorPicker] is closed."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:62
+msgid "The background of the color preview rect on the button."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:65
+msgid "[StyleBox] used when the [ColorPickerButton] is disabled."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:68
+msgid ""
+"[StyleBox] used when the [ColorPickerButton] is focused. It is displayed "
+"over the current [StyleBox], so using [StyleBoxEmpty] will just disable the "
+"focus visual effect."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:71
+msgid "[Font] of the [ColorPickerButton]'s text."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:74
+msgid "Default text [Color] of the [ColorPickerButton]."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:77
+msgid "Text [Color] used when the [ColorPickerButton] is disabled."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:80
+msgid ""
+"Text [Color] used when the [ColorPickerButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:83
+msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:86
+msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:89
+msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:92
+msgid "The horizontal space between [ColorPickerButton]'s icon and text."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:95
+msgid "Default [StyleBox] for the [ColorPickerButton]."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:98
+msgid "[StyleBox] used when the [ColorPickerButton] is being pressed."
+msgstr ""
+
+#: doc/classes/ColorRect.xml:4
+msgid "Colored rectangle."
+msgstr ""
+
+#: doc/classes/ColorRect.xml:7
+msgid ""
+"Displays a rectangle filled with a solid [member color]. If you need to "
+"display the border alone, consider using [ReferenceRect] instead."
+msgstr ""
+
+#: doc/classes/ColorRect.xml:16
+msgid ""
+"The fill color.\n"
+"[codeblock]\n"
+"$ColorRect.color = Color(1, 0, 0, 1) # Set ColorRect's color to red.\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/ConcavePolygonShape.xml:4
+msgid "Concave polygon shape."
+msgstr ""
+
+#: doc/classes/ConcavePolygonShape.xml:7
+msgid ""
+"Concave polygon shape resource, which can be set into a [PhysicsBody] or "
+"area. This shape is created by feeding a list of triangles.\n"
+"[b]Note:[/b] When used for collision, [ConcavePolygonShape] is intended to "
+"work with static [PhysicsBody] nodes like [StaticBody] and will not work "
+"with [KinematicBody] or [RigidBody] with a mode other than Static."
+msgstr ""
+
+#: doc/classes/ConcavePolygonShape.xml:17
+msgid "Returns the faces (an array of triangles)."
+msgstr ""
+
+#: doc/classes/ConcavePolygonShape.xml:24
+msgid "Sets the faces (an array of triangles)."
+msgstr ""
+
+#: doc/classes/ConcavePolygonShape2D.xml:4
+msgid "Concave polygon 2D shape resource for physics."
+msgstr ""
+
+#: doc/classes/ConcavePolygonShape2D.xml:7
+msgid ""
+"Concave polygon 2D shape resource for physics. It is made out of segments "
+"and is optimal for complex polygonal concave collisions. However, it is not "
+"advised to use for [RigidBody2D] nodes. A CollisionPolygon2D in convex "
+"decomposition mode (solids) or several convex objects are advised for that "
+"instead. Otherwise, a concave polygon 2D shape is better for static "
+"collisions.\n"
+"The main difference between a [ConvexPolygonShape2D] and a "
+"[ConcavePolygonShape2D] is that a concave polygon assumes it is concave and "
+"uses a more complex method of collision detection, and a convex one forces "
+"itself to be convex in order to speed up collision detection."
+msgstr ""
+
+#: doc/classes/ConcavePolygonShape2D.xml:16
+msgid ""
+"The array of points that make up the [ConcavePolygonShape2D]'s line segments."
+msgstr ""
+
+#: doc/classes/ConeTwistJoint.xml:4
+msgid "A twist joint between two 3D PhysicsBodies."
+msgstr ""
+
+#: doc/classes/ConeTwistJoint.xml:7
+msgid ""
+"The joint can rotate the bodies across an axis defined by the local x-axes "
+"of the [Joint].\n"
+"The twist axis is initiated as the X axis of the [Joint].\n"
+"Once the Bodies swing, the twist axis is calculated as the middle of the x-"
+"axes of the Joint in the local space of the two Bodies. See also "
+"[Generic6DOFJoint]."
+msgstr ""
+
+#: doc/classes/ConeTwistJoint.xml:30 doc/classes/ConeTwistJoint.xml:62
+#: doc/classes/PhysicsServer.xml:1076
+msgid ""
+"The speed with which the swing or twist will take place.\n"
+"The higher, the faster."
+msgstr ""
+
+#: doc/classes/ConeTwistJoint.xml:34 doc/classes/ConeTwistJoint.xml:69
+#: doc/classes/PhysicsServer.xml:1083
+msgid ""
+"Defines, how fast the swing- and twist-speed-difference on both sides gets "
+"synced."
+msgstr ""
+
+#: doc/classes/ConeTwistJoint.xml:37 doc/classes/ConeTwistJoint.xml:66
+msgid ""
+"The ease with which the joint starts to twist. If it's too low, it takes "
+"more force to start twisting the joint."
+msgstr ""
+
+#: doc/classes/ConeTwistJoint.xml:40 doc/classes/ConeTwistJoint.xml:52
+#: doc/classes/PhysicsServer.xml:1066
+msgid ""
+"Swing is rotation from side to side, around the axis perpendicular to the "
+"twist axis.\n"
+"The swing span defines, how much rotation will not get corrected along the "
+"swing axis.\n"
+"Could be defined as looseness in the [ConeTwistJoint].\n"
+"If below 0.05, this behavior is locked."
+msgstr ""
+
+#: doc/classes/ConeTwistJoint.xml:46 doc/classes/ConeTwistJoint.xml:58
+#: doc/classes/PhysicsServer.xml:1072
+msgid ""
+"Twist is the rotation around the twist axis, this value defined how far the "
+"joint can twist.\n"
+"Twist is locked if below 0.05."
+msgstr ""
+
+#: doc/classes/ConeTwistJoint.xml:72 doc/classes/Generic6DOFJoint.xml:384
+#: doc/classes/HingeJoint.xml:99 doc/classes/Light.xml:124
+#: doc/classes/SliderJoint.xml:165
+msgid "Represents the size of the [enum Param] enum."
+msgstr ""
+
+#: doc/classes/ConfigFile.xml:4
+msgid "Helper class to handle INI-style files."
+msgstr ""
+
+#: doc/classes/ConfigFile.xml:7
+msgid ""
+"This helper class can be used to store [Variant] values on the filesystem "
+"using INI-style formatting. The stored values are identified by a section "
+"and a key:\n"
+"[codeblock]\n"
+"[section]\n"
+"some_key=42\n"
+"string_example=\"Hello World!\"\n"
+"a_vector=Vector3( 1, 0, 2 )\n"
+"[/codeblock]\n"
+"The stored data can be saved to or parsed from a file, though ConfigFile "
+"objects can also be used directly without accessing the filesystem.\n"
+"The following example shows how to create a simple [ConfigFile] and save it "
+"on disk:\n"
+"[codeblock]\n"
+"# Create new ConfigFile object.\n"
+"var config = ConfigFile.new()\n"
+"\n"
+"# Store some values.\n"
+"config.set_value(\"Player1\", \"player_name\", \"Steve\")\n"
+"config.set_value(\"Player1\", \"best_score\", 10)\n"
+"config.set_value(\"Player2\", \"player_name\", \"V3geta\")\n"
+"config.set_value(\"Player2\", \"best_score\", 9001)\n"
+"\n"
+"# Save it to a file (overwrite if already exists).\n"
+"config.save(\"user://scores.cfg\")\n"
+"[/codeblock]\n"
+"This example shows how the above file could be loaded:\n"
+"[codeblock]\n"
+"var score_data = {}\n"
+"var config = ConfigFile.new()\n"
+"\n"
+"# Load data from a file.\n"
+"var err = config.load(\"user://scores.cfg\")\n"
+"\n"
+"# If the file didn't load, ignore it.\n"
+"if err != OK:\n"
+" return\n"
+"\n"
+"# Iterate over all sections.\n"
+"for player in config.get_sections():\n"
+" # Fetch the data for each section.\n"
+" var player_name = config.get_value(player, \"player_name\")\n"
+" var player_score = config.get_value(player, \"best_score\")\n"
+" score_data[player_name] = player_score\n"
+"[/codeblock]\n"
+"Any operation that mutates the ConfigFile such as [method set_value], "
+"[method clear], or [method erase_section], only changes what is loaded in "
+"memory. If you want to write the change to a file, you have to save the "
+"changes with [method save], [method save_encrypted], or [method "
+"save_encrypted_pass].\n"
+"Keep in mind that section and property names can't contain spaces. Anything "
+"after a space will be ignored on save and on load.\n"
+"ConfigFiles can also contain manually written comment lines starting with a "
+"semicolon ([code];[/code]). Those lines will be ignored when parsing the "
+"file. Note that comments will be lost when saving the ConfigFile. This can "
+"still be useful for dedicated server configuration files, which are "
+"typically never overwritten without explicit user action.\n"
+"[b]Note:[/b] The file extension given to a ConfigFile does not have any "
+"impact on its formatting or behavior. By convention, the [code].cfg[/code] "
+"extension is used here, but any other extension such as [code].ini[/code] is "
+"also valid. Since neither [code].cfg[/code] nor [code].ini[/code] are "
+"standardized, Godot's ConfigFile formatting may differ from files written by "
+"other programs."
+msgstr ""
+
+#: doc/classes/ConfigFile.xml:59
+msgid "Removes the entire contents of the config."
+msgstr ""
+
+#: doc/classes/ConfigFile.xml:66
+msgid ""
+"Deletes the specified section along with all the key-value pairs inside. "
+"Raises an error if the section does not exist."
+msgstr ""
+
+#: doc/classes/ConfigFile.xml:74
+msgid ""
+"Deletes the specified key in a section. Raises an error if either the "
+"section or the key do not exist."
+msgstr ""
+
+#: doc/classes/ConfigFile.xml:81
+msgid ""
+"Returns an array of all defined key identifiers in the specified section. "
+"Raises an error and returns an empty array if the section does not exist."
+msgstr ""
+
+#: doc/classes/ConfigFile.xml:87
+msgid "Returns an array of all defined section identifiers."
+msgstr ""
+
+#: doc/classes/ConfigFile.xml:96
+msgid ""
+"Returns the current value for the specified section and key. If either the "
+"section or the key do not exist, the method returns the fallback "
+"[code]default[/code] value. If [code]default[/code] is not specified or set "
+"to [code]null[/code], an error is also raised."
+msgstr ""
+
+#: doc/classes/ConfigFile.xml:103
+msgid "Returns [code]true[/code] if the specified section exists."
+msgstr ""
+
+#: doc/classes/ConfigFile.xml:111
+msgid "Returns [code]true[/code] if the specified section-key pair exists."
+msgstr ""
+
+#: doc/classes/ConfigFile.xml:118
+msgid ""
+"Loads the config file specified as a parameter. The file's contents are "
+"parsed and loaded in the [ConfigFile] object which the method was called "
+"on.\n"
+"Returns one of the [enum Error] code constants ([code]OK[/code] on success)."
+msgstr ""
+
+#: doc/classes/ConfigFile.xml:127
+msgid ""
+"Loads the encrypted config file specified as a parameter, using the provided "
+"[code]key[/code] to decrypt it. The file's contents are parsed and loaded in "
+"the [ConfigFile] object which the method was called on.\n"
+"Returns one of the [enum Error] code constants ([code]OK[/code] on success)."
+msgstr ""
+
+#: doc/classes/ConfigFile.xml:136
+msgid ""
+"Loads the encrypted config file specified as a parameter, using the provided "
+"[code]password[/code] to decrypt it. The file's contents are parsed and "
+"loaded in the [ConfigFile] object which the method was called on.\n"
+"Returns one of the [enum Error] code constants ([code]OK[/code] on success)."
+msgstr ""
+
+#: doc/classes/ConfigFile.xml:144
+msgid ""
+"Parses the passed string as the contents of a config file. The string is "
+"parsed and loaded in the ConfigFile object which the method was called on.\n"
+"Returns one of the [enum Error] code constants ([code]OK[/code] on success)."
+msgstr ""
+
+#: doc/classes/ConfigFile.xml:152
+msgid ""
+"Saves the contents of the [ConfigFile] object to the file specified as a "
+"parameter. The output file uses an INI-style structure.\n"
+"Returns one of the [enum Error] code constants ([code]OK[/code] on success)."
+msgstr ""
+
+#: doc/classes/ConfigFile.xml:161
+msgid ""
+"Saves the contents of the [ConfigFile] object to the AES-256 encrypted file "
+"specified as a parameter, using the provided [code]key[/code] to encrypt it. "
+"The output file uses an INI-style structure.\n"
+"Returns one of the [enum Error] code constants ([code]OK[/code] on success)."
+msgstr ""
+
+#: doc/classes/ConfigFile.xml:170
+msgid ""
+"Saves the contents of the [ConfigFile] object to the AES-256 encrypted file "
+"specified as a parameter, using the provided [code]password[/code] to "
+"encrypt it. The output file uses an INI-style structure.\n"
+"Returns one of the [enum Error] code constants ([code]OK[/code] on success)."
+msgstr ""
+
+#: doc/classes/ConfigFile.xml:180
+msgid ""
+"Assigns a value to the specified key of the specified section. If either the "
+"section or the key do not exist, they are created. Passing a [code]null[/"
+"code] value deletes the specified key if it exists, and deletes the section "
+"if it ends up empty once the key has been removed."
+msgstr ""
+
+#: doc/classes/ConfirmationDialog.xml:4
+msgid "Dialog for confirmation of actions."
+msgstr ""
+
+#: doc/classes/ConfirmationDialog.xml:7
+msgid ""
+"Dialog for confirmation of actions. This dialog inherits from "
+"[AcceptDialog], but has by default an OK and Cancel button (in host OS "
+"order).\n"
+"To get cancel action, you can use:\n"
+"[codeblock]\n"
+"get_cancel().connect(\"pressed\", self, \"cancelled\")\n"
+"[/codeblock]."
+msgstr ""
+
+#: doc/classes/ConfirmationDialog.xml:19
+msgid ""
+"Returns the cancel button.\n"
+"[b]Warning:[/b] This is a required internal node, removing and freeing it "
+"may cause a crash. If you wish to hide it or any of its children, use their "
+"[member CanvasItem.visible] property."
+msgstr ""
+
+#: doc/classes/Container.xml:4
+msgid "Base node for containers."
+msgstr ""
+
+#: doc/classes/Container.xml:7
+msgid ""
+"Base node for containers. A [Container] contains other controls and "
+"automatically arranges them in a certain way.\n"
+"A Control can inherit this to create custom container classes."
+msgstr ""
+
+#: doc/classes/Container.xml:18
+msgid ""
+"Fit a child control in a given rect. This is mainly a helper for creating "
+"custom container classes."
+msgstr ""
+
+#: doc/classes/Container.xml:24
+msgid ""
+"Queue resort of the contained children. This is called automatically anyway, "
+"but can be called upon request."
+msgstr ""
+
+#: doc/classes/Container.xml:31
+msgid "Emitted when sorting the children is needed."
+msgstr ""
+
+#: doc/classes/Container.xml:37
+msgid ""
+"Notification for when sorting the children, it must be obeyed immediately."
+msgstr ""
+
+#: doc/classes/Control.xml:4
+msgid ""
+"All user interface nodes inherit from Control. A control's anchors and "
+"margins adapt its position and size relative to its parent."
+msgstr ""
+
+#: doc/classes/Control.xml:7
+msgid ""
+"Base class for all UI-related nodes. [Control] features a bounding rectangle "
+"that defines its extents, an anchor position relative to its parent control "
+"or the current viewport, and margins that represent an offset to the anchor. "
+"The margins update automatically when the node, any of its parents, or the "
+"screen size change.\n"
+"For more information on Godot's UI system, anchors, margins, and containers, "
+"see the related tutorials in the manual. To build flexible UIs, you'll need "
+"a mix of UI elements that inherit from [Control] and [Container] nodes.\n"
+"[b]User Interface nodes and input[/b]\n"
+"Godot sends input events to the scene's root node first, by calling [method "
+"Node._input]. [method Node._input] forwards the event down the node tree to "
+"the nodes under the mouse cursor, or on keyboard focus. To do so, it calls "
+"[method MainLoop._input_event]. Call [method accept_event] so no other node "
+"receives the event. Once you accept an input, it becomes handled so [method "
+"Node._unhandled_input] will not process it.\n"
+"Only one [Control] node can be in keyboard focus. Only the node in focus "
+"will receive keyboard events. To get the focus, call [method grab_focus]. "
+"[Control] nodes lose focus when another node grabs it, or if you hide the "
+"node in focus.\n"
+"Sets [member mouse_filter] to [constant MOUSE_FILTER_IGNORE] to tell a "
+"[Control] node to ignore mouse or touch events. You'll need it if you place "
+"an icon on top of a button.\n"
+"[Theme] resources change the Control's appearance. If you change the [Theme] "
+"on a [Control] node, it affects all of its children. To override some of the "
+"theme's parameters, call one of the [code]add_*_override[/code] methods, "
+"like [method add_font_override]. You can override the theme with the "
+"inspector.\n"
+"[b]Note:[/b] Theme items are [i]not[/i] [Object] properties. This means you "
+"can't access their values using [method Object.get] and [method Object.set]. "
+"Instead, use [method get_color], [method get_constant], [method get_font], "
+"[method get_icon], [method get_stylebox], and the [code]add_*_override[/"
+"code] methods provided by this class."
+msgstr ""
+
+#: doc/classes/Control.xml:17
+msgid "https://docs.godotengine.org/en/3.4/tutorials/gui/index.html"
+msgstr ""
+
+#: doc/classes/Control.xml:19
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/gui/control_node_gallery.html"
+msgstr ""
+
+#: doc/classes/Control.xml:20
+msgid "https://github.com/godotengine/godot-demo-projects/tree/master/gui"
+msgstr ""
+
+#: doc/classes/Control.xml:26
+msgid ""
+"Virtual method to be implemented by the user. Returns whether [method "
+"_gui_input] should not be called for children controls outside this "
+"control's rectangle. Input will be clipped to the Rect of this [Control]. "
+"Similar to [member rect_clip_content], but doesn't affect visibility.\n"
+"If not overridden, defaults to [code]false[/code]."
+msgstr ""
+
+#: doc/classes/Control.xml:33
+msgid ""
+"Virtual method to be implemented by the user. Returns the minimum size for "
+"this control. Alternative to [member rect_min_size] for controlling minimum "
+"size via code. The actual minimum size will be the max value of these two "
+"(in each axis separately).\n"
+"If not overridden, defaults to [constant Vector2.ZERO]."
+msgstr ""
+
+#: doc/classes/Control.xml:41
+msgid ""
+"Virtual method to be implemented by the user. Use this method to process and "
+"accept inputs on UI elements. See [method accept_event].\n"
+"Example: clicking a control.\n"
+"[codeblock]\n"
+"func _gui_input(event):\n"
+" if event is InputEventMouseButton:\n"
+" if event.button_index == BUTTON_LEFT and event.pressed:\n"
+" print(\"I've been clicked D:\")\n"
+"[/codeblock]\n"
+"The event won't trigger if:\n"
+"* clicking outside the control (see [method has_point]);\n"
+"* control has [member mouse_filter] set to [constant MOUSE_FILTER_IGNORE];\n"
+"* control is obstructed by another [Control] on top of it, which doesn't "
+"have [member mouse_filter] set to [constant MOUSE_FILTER_IGNORE];\n"
+"* control's parent has [member mouse_filter] set to [constant "
+"MOUSE_FILTER_STOP] or has accepted the event;\n"
+"* it happens outside the parent's rectangle and the parent has either "
+"[member rect_clip_content] or [method _clips_input] enabled.\n"
+"[b]Note:[/b] Event position is relative to the control origin."
+msgstr ""
+
+#: doc/classes/Control.xml:62
+msgid ""
+"Virtual method to be implemented by the user. Returns a [Control] node that "
+"should be used as a tooltip instead of the default one. The [code]for_text[/"
+"code] includes the contents of the [member hint_tooltip] property.\n"
+"The returned node must be of type [Control] or Control-derived. It can have "
+"child nodes of any type. It is freed when the tooltip disappears, so make "
+"sure you always provide a new instance (if you want to use a pre-existing "
+"node from your scene tree, you can duplicate it and pass the duplicated "
+"instance). When [code]null[/code] or a non-Control node is returned, the "
+"default tooltip will be used instead.\n"
+"The returned node will be added as child to a [PopupPanel], so you should "
+"only provide the contents of that panel. That [PopupPanel] can be themed "
+"using [method Theme.set_stylebox] for the type [code]\"TooltipPanel\"[/code] "
+"(see [member hint_tooltip] for an example).\n"
+"[b]Note:[/b] The tooltip is shrunk to minimal size. If you want to ensure "
+"it's fully visible, you might want to set its [member rect_min_size] to some "
+"non-zero value.\n"
+"Example of usage with a custom-constructed node:\n"
+"[codeblock]\n"
+"func _make_custom_tooltip(for_text):\n"
+" var label = Label.new()\n"
+" label.text = for_text\n"
+" return label\n"
+"[/codeblock]\n"
+"Example of usage with a custom scene instance:\n"
+"[codeblock]\n"
+"func _make_custom_tooltip(for_text):\n"
+" var tooltip = preload(\"res://SomeTooltipScene.tscn\").instance()\n"
+" tooltip.get_node(\"Label\").text = for_text\n"
+" return tooltip\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Control.xml:85
+msgid ""
+"Marks an input event as handled. Once you accept an input event, it stops "
+"propagating, even to nodes listening to [method Node._unhandled_input] or "
+"[method Node._unhandled_key_input]."
+msgstr ""
+
+#: doc/classes/Control.xml:93
+msgid ""
+"Creates a local override for a theme [Color] with the specified [code]name[/"
+"code]. Local overrides always take precedence when fetching theme items for "
+"the control. An override cannot be removed, but it can be overridden with "
+"the corresponding default value.\n"
+"See also [method get_color].\n"
+"[b]Example of overriding a label's color and resetting it later:[/b]\n"
+"[codeblock]\n"
+"# Given the child Label node \"MyLabel\", override its font color with a "
+"custom value.\n"
+"$MyLabel.add_color_override(\"font_color\", Color(1, 0.5, 0))\n"
+"# Reset the font color of the child label.\n"
+"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", \"Label"
+"\"))\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Control.xml:109
+msgid ""
+"Creates a local override for a theme constant with the specified [code]name[/"
+"code]. Local overrides always take precedence when fetching theme items for "
+"the control. An override cannot be removed, but it can be overridden with "
+"the corresponding default value.\n"
+"See also [method get_constant]."
+msgstr ""
+
+#: doc/classes/Control.xml:118
+msgid ""
+"Creates a local override for a theme [Font] with the specified [code]name[/"
+"code]. Local overrides always take precedence when fetching theme items for "
+"the control. An override can be removed by assigning it a [code]null[/code] "
+"value.\n"
+"See also [method get_font]."
+msgstr ""
+
+#: doc/classes/Control.xml:127
+msgid ""
+"Creates a local override for a theme icon with the specified [code]name[/"
+"code]. Local overrides always take precedence when fetching theme items for "
+"the control. An override can be removed by assigning it a [code]null[/code] "
+"value.\n"
+"See also [method get_icon]."
+msgstr ""
+
+#: doc/classes/Control.xml:136
+msgid ""
+"Creates a local override for a theme shader with the specified [code]name[/"
+"code]. Local overrides always take precedence when fetching theme items for "
+"the control. An override can be removed by assigning it a [code]null[/code] "
+"value."
+msgstr ""
+
+#: doc/classes/Control.xml:144
+msgid ""
+"Creates a local override for a theme [StyleBox] with the specified "
+"[code]name[/code]. Local overrides always take precedence when fetching "
+"theme items for the control. An override can be removed by assigning it a "
+"[code]null[/code] value.\n"
+"See also [method get_stylebox].\n"
+"[b]Example of modifying a property in a StyleBox by duplicating it:[/b]\n"
+"[codeblock]\n"
+"# The snippet below assumes the child node MyButton has a StyleBoxFlat "
+"assigned.\n"
+"# Resources are shared across instances, so we need to duplicate it\n"
+"# to avoid modifying the appearance of all other buttons.\n"
+"var new_stylebox_normal = $MyButton.get_stylebox(\"normal\").duplicate()\n"
+"new_stylebox_normal.border_width_top = 3\n"
+"new_stylebox_normal.border_color = Color(0, 1, 0.5)\n"
+"$MyButton.add_stylebox_override(\"normal\", new_stylebox_normal)\n"
+"# Remove the stylebox override.\n"
+"$MyButton.add_stylebox_override(\"normal\", null)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Control.xml:165
+msgid ""
+"Godot calls this method to test if [code]data[/code] from a control's "
+"[method get_drag_data] can be dropped at [code]position[/code]. "
+"[code]position[/code] is local to this control.\n"
+"This method should only be used to test the data. Process the data in "
+"[method drop_data].\n"
+"[codeblock]\n"
+"func can_drop_data(position, data):\n"
+" # Check position if it is relevant to you\n"
+" # Otherwise, just check data\n"
+" return typeof(data) == TYPE_DICTIONARY and data.has(\"expected\")\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Control.xml:180
+msgid ""
+"Godot calls this method to pass you the [code]data[/code] from a control's "
+"[method get_drag_data] result. Godot first calls [method can_drop_data] to "
+"test if [code]data[/code] is allowed to drop at [code]position[/code] where "
+"[code]position[/code] is local to this control.\n"
+"[codeblock]\n"
+"func can_drop_data(position, data):\n"
+" return typeof(data) == TYPE_DICTIONARY and data.has(\"color\")\n"
+"\n"
+"func drop_data(position, data):\n"
+" color = data[\"color\"]\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Control.xml:193
+msgid ""
+"Finds the next (below in the tree) [Control] that can receive the focus."
+msgstr ""
+
+#: doc/classes/Control.xml:199
+msgid ""
+"Finds the previous (above in the tree) [Control] that can receive the focus."
+msgstr ""
+
+#: doc/classes/Control.xml:207
+msgid ""
+"Forces drag and bypasses [method get_drag_data] and [method "
+"set_drag_preview] by passing [code]data[/code] and [code]preview[/code]. "
+"Drag will start even if the mouse is neither over nor pressed on this "
+"control.\n"
+"The methods [method can_drop_data] and [method drop_data] must be "
+"implemented on controls that want to receive drop data."
+msgstr ""
+
+#: doc/classes/Control.xml:215
+msgid ""
+"Returns the anchor identified by [code]margin[/code] constant from [enum "
+"Margin] enum. A getter method for [member anchor_bottom], [member "
+"anchor_left], [member anchor_right] and [member anchor_top]."
+msgstr ""
+
+#: doc/classes/Control.xml:221
+msgid ""
+"Returns [member margin_left] and [member margin_top]. See also [member "
+"rect_position]."
+msgstr ""
+
+#: doc/classes/Control.xml:229
+msgid ""
+"Returns a [Color] from the first matching [Theme] in the tree if that "
+"[Theme] has a color item with the specified [code]name[/code] and "
+"[code]theme_type[/code]. If [code]theme_type[/code] is omitted the class "
+"name of the current control is used as the type. If the type is a class name "
+"its parent classes are also checked, in order of inheritance.\n"
+"For the current control its local overrides are considered first (see "
+"[method add_color_override]), then its assigned [member theme]. After the "
+"current control, each parent control and its assigned [member theme] are "
+"considered; controls without a [member theme] assigned are skipped. If no "
+"matching [Theme] is found in the tree, a custom project [Theme] (see [member "
+"ProjectSettings.gui/theme/custom]) and the default [Theme] are used.\n"
+"[codeblock]\n"
+"func _ready():\n"
+" # Get the font color defined for the current Control's class, if it "
+"exists.\n"
+" modulate = get_color(\"font_color\")\n"
+" # Get the font color defined for the Button class.\n"
+" modulate = get_color(\"font_color\", \"Button\")\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Control.xml:243
+msgid ""
+"Returns combined minimum size from [member rect_min_size] and [method "
+"get_minimum_size]."
+msgstr ""
+
+#: doc/classes/Control.xml:251
+msgid ""
+"Returns a constant from the first matching [Theme] in the tree if that "
+"[Theme] has a constant item with the specified [code]name[/code] and "
+"[code]theme_type[/code].\n"
+"See [method get_color] for details."
+msgstr ""
+
+#: doc/classes/Control.xml:259
+msgid ""
+"Returns the mouse cursor shape the control displays on mouse hover. See "
+"[enum CursorShape]."
+msgstr ""
+
+#: doc/classes/Control.xml:266
+msgid ""
+"Godot calls this method to get data that can be dragged and dropped onto "
+"controls that expect drop data. Returns [code]null[/code] if there is no "
+"data to drag. Controls that want to receive drop data should implement "
+"[method can_drop_data] and [method drop_data]. [code]position[/code] is "
+"local to this control. Drag may be forced with [method force_drag].\n"
+"A preview that will follow the mouse that should represent the data can be "
+"set with [method set_drag_preview]. A good time to set the preview is in "
+"this method.\n"
+"[codeblock]\n"
+"func get_drag_data(position):\n"
+" var mydata = make_data()\n"
+" set_drag_preview(make_preview(mydata))\n"
+" return mydata\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Control.xml:279
+msgid "Returns [member margin_right] and [member margin_bottom]."
+msgstr ""
+
+#: doc/classes/Control.xml:286
+msgid ""
+"Returns the focus neighbour identified by [code]margin[/code] constant from "
+"[enum Margin] enum. A getter method for [member focus_neighbour_bottom], "
+"[member focus_neighbour_left], [member focus_neighbour_right] and [member "
+"focus_neighbour_top]."
+msgstr ""
+
+#: doc/classes/Control.xml:292
+msgid ""
+"Returns the control that has the keyboard focus or [code]null[/code] if none."
+msgstr ""
+
+#: doc/classes/Control.xml:300
+msgid ""
+"Returns a [Font] from the first matching [Theme] in the tree if that [Theme] "
+"has a font item with the specified [code]name[/code] and [code]theme_type[/"
+"code].\n"
+"See [method get_color] for details."
+msgstr ""
+
+#: doc/classes/Control.xml:307
+msgid ""
+"Returns the position and size of the control relative to the top-left corner "
+"of the screen. See [member rect_position] and [member rect_size]."
+msgstr ""
+
+#: doc/classes/Control.xml:315
+msgid ""
+"Returns an icon from the first matching [Theme] in the tree if that [Theme] "
+"has an icon item with the specified [code]name[/code] and [code]theme_type[/"
+"code].\n"
+"See [method get_color] for details."
+msgstr ""
+
+#: doc/classes/Control.xml:323
+msgid ""
+"Returns the anchor identified by [code]margin[/code] constant from [enum "
+"Margin] enum. A getter method for [member margin_bottom], [member "
+"margin_left], [member margin_right] and [member margin_top]."
+msgstr ""
+
+#: doc/classes/Control.xml:329
+msgid "Returns the minimum size for this control. See [member rect_min_size]."
+msgstr ""
+
+#: doc/classes/Control.xml:335
+msgid "Returns the width/height occupied in the parent control."
+msgstr ""
+
+#: doc/classes/Control.xml:341
+msgid "Returns the parent control node."
+msgstr ""
+
+#: doc/classes/Control.xml:347
+msgid ""
+"Returns the position and size of the control relative to the top-left corner "
+"of the parent Control. See [member rect_position] and [member rect_size]."
+msgstr ""
+
+#: doc/classes/Control.xml:353
+msgid "Returns the rotation (in radians)."
+msgstr ""
+
+#: doc/classes/Control.xml:361
+msgid ""
+"Returns a [StyleBox] from the first matching [Theme] in the tree if that "
+"[Theme] has a stylebox item with the specified [code]name[/code] and "
+"[code]theme_type[/code].\n"
+"See [method get_color] for details."
+msgstr ""
+
+#: doc/classes/Control.xml:368
+msgid ""
+"Returns the default font from the first matching [Theme] in the tree if that "
+"[Theme] has a valid [member Theme.default_font] value.\n"
+"See [method get_color] for details."
+msgstr ""
+
+#: doc/classes/Control.xml:376
+msgid ""
+"Returns the tooltip, which will appear when the cursor is resting over this "
+"control. See [member hint_tooltip]."
+msgstr ""
+
+#: doc/classes/Control.xml:382
+msgid ""
+"Creates an [InputEventMouseButton] that attempts to click the control. If "
+"the event is received, the control acquires focus.\n"
+"[codeblock]\n"
+"func _process(delta):\n"
+" grab_click_focus() #when clicking another Control node, this node will "
+"be clicked instead\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Control.xml:392
+msgid ""
+"Steal the focus from another control and become the focused control (see "
+"[member focus_mode])."
+msgstr ""
+
+#: doc/classes/Control.xml:400
+msgid ""
+"Returns [code]true[/code] if there is a matching [Theme] in the tree that "
+"has a color item with the specified [code]name[/code] and [code]theme_type[/"
+"code].\n"
+"See [method get_color] for details."
+msgstr ""
+
+#: doc/classes/Control.xml:408
+msgid ""
+"Returns [code]true[/code] if there is a local override for a theme [Color] "
+"with the specified [code]name[/code] in this [Control] node.\n"
+"See [method add_color_override]."
+msgstr ""
+
+#: doc/classes/Control.xml:417
+msgid ""
+"Returns [code]true[/code] if there is a matching [Theme] in the tree that "
+"has a constant item with the specified [code]name[/code] and "
+"[code]theme_type[/code].\n"
+"See [method get_color] for details."
+msgstr ""
+
+#: doc/classes/Control.xml:425
+msgid ""
+"Returns [code]true[/code] if there is a local override for a theme constant "
+"with the specified [code]name[/code] in this [Control] node.\n"
+"See [method add_constant_override]."
+msgstr ""
+
+#: doc/classes/Control.xml:432
+msgid ""
+"Returns [code]true[/code] if this is the current focused control. See "
+"[member focus_mode]."
+msgstr ""
+
+#: doc/classes/Control.xml:440
+msgid ""
+"Returns [code]true[/code] if there is a matching [Theme] in the tree that "
+"has a font item with the specified [code]name[/code] and [code]theme_type[/"
+"code].\n"
+"See [method get_color] for details."
+msgstr ""
+
+#: doc/classes/Control.xml:448
+msgid ""
+"Returns [code]true[/code] if there is a local override for a theme [Font] "
+"with the specified [code]name[/code] in this [Control] node.\n"
+"See [method add_font_override]."
+msgstr ""
+
+#: doc/classes/Control.xml:457
+msgid ""
+"Returns [code]true[/code] if there is a matching [Theme] in the tree that "
+"has an icon item with the specified [code]name[/code] and [code]theme_type[/"
+"code].\n"
+"See [method get_color] for details."
+msgstr ""
+
+#: doc/classes/Control.xml:465
+msgid ""
+"Returns [code]true[/code] if there is a local override for a theme icon with "
+"the specified [code]name[/code] in this [Control] node.\n"
+"See [method add_icon_override]."
+msgstr ""
+
+#: doc/classes/Control.xml:473
+msgid ""
+"Virtual method to be implemented by the user. Returns whether the given "
+"[code]point[/code] is inside this control.\n"
+"If not overridden, default behavior is checking if the point is within "
+"control's Rect.\n"
+"[b]Note:[/b] If you want to check if a point is inside the control, you can "
+"use [code]get_rect().has_point(point)[/code]."
+msgstr ""
+
+#: doc/classes/Control.xml:482
+msgid ""
+"Returns [code]true[/code] if there is a local override for a theme shader "
+"with the specified [code]name[/code] in this [Control] node.\n"
+"See [method add_shader_override]."
+msgstr ""
+
+#: doc/classes/Control.xml:491
+msgid ""
+"Returns [code]true[/code] if there is a matching [Theme] in the tree that "
+"has a stylebox item with the specified [code]name[/code] and "
+"[code]theme_type[/code].\n"
+"See [method get_color] for details."
+msgstr ""
+
+#: doc/classes/Control.xml:499
+msgid ""
+"Returns [code]true[/code] if there is a local override for a theme "
+"[StyleBox] with the specified [code]name[/code] in this [Control] node.\n"
+"See [method add_stylebox_override]."
+msgstr ""
+
+#: doc/classes/Control.xml:506
+msgid ""
+"Invalidates the size cache in this node and in parent nodes up to toplevel. "
+"Intended to be used with [method get_minimum_size] when the return value is "
+"changed. Setting [member rect_min_size] directly calls this method "
+"automatically."
+msgstr ""
+
+#: doc/classes/Control.xml:512
+msgid ""
+"Give up the focus. No other control will be able to receive keyboard input."
+msgstr ""
+
+#: doc/classes/Control.xml:522
+msgid ""
+"Sets the anchor identified by [code]margin[/code] constant from [enum "
+"Margin] enum to value [code]anchor[/code]. A setter method for [member "
+"anchor_bottom], [member anchor_left], [member anchor_right] and [member "
+"anchor_top].\n"
+"If [code]keep_margin[/code] is [code]true[/code], margins aren't updated "
+"after this operation.\n"
+"If [code]push_opposite_anchor[/code] is [code]true[/code] and the opposite "
+"anchor overlaps this anchor, the opposite one will have its value "
+"overridden. For example, when setting left anchor to 1 and the right anchor "
+"has value of 0.5, the right anchor will also get value of 1. If "
+"[code]push_opposite_anchor[/code] was [code]false[/code], the left anchor "
+"would get value 0.5."
+msgstr ""
+
+#: doc/classes/Control.xml:534
+msgid ""
+"Works the same as [method set_anchor], but instead of [code]keep_margin[/"
+"code] argument and automatic update of margin, it allows to set the margin "
+"offset yourself (see [method set_margin])."
+msgstr ""
+
+#: doc/classes/Control.xml:543
+msgid ""
+"Sets both anchor preset and margin preset. See [method set_anchors_preset] "
+"and [method set_margins_preset]."
+msgstr ""
+
+#: doc/classes/Control.xml:551
+msgid ""
+"Sets the anchors to a [code]preset[/code] from [enum Control.LayoutPreset] "
+"enum. This is the code equivalent to using the Layout menu in the 2D "
+"editor.\n"
+"If [code]keep_margins[/code] is [code]true[/code], control's position will "
+"also be updated."
+msgstr ""
+
+#: doc/classes/Control.xml:559
+msgid ""
+"Sets [member margin_left] and [member margin_top] at the same time. "
+"Equivalent of changing [member rect_position]."
+msgstr ""
+
+#: doc/classes/Control.xml:566
+msgid ""
+"Forwards the handling of this control's drag and drop to [code]target[/code] "
+"control.\n"
+"Forwarding can be implemented in the target control similar to the methods "
+"[method get_drag_data], [method can_drop_data], and [method drop_data] but "
+"with two differences:\n"
+"1. The function name must be suffixed with [b]_fw[/b]\n"
+"2. The function must take an extra argument that is the control doing the "
+"forwarding\n"
+"[codeblock]\n"
+"# ThisControl.gd\n"
+"extends Control\n"
+"func _ready():\n"
+" set_drag_forwarding(target_control)\n"
+"\n"
+"# TargetControl.gd\n"
+"extends Control\n"
+"func can_drop_data_fw(position, data, from_control):\n"
+" return true\n"
+"\n"
+"func drop_data_fw(position, data, from_control):\n"
+" my_handle_data(data)\n"
+"\n"
+"func get_drag_data_fw(position, from_control):\n"
+" set_drag_preview(my_preview)\n"
+" return my_data()\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Control.xml:594
+msgid ""
+"Shows the given control at the mouse pointer. A good time to call this "
+"method is in [method get_drag_data]. The control must not be in the scene "
+"tree. You should not free the control, and you should not keep a reference "
+"to the control beyond the duration of the drag. It will be deleted "
+"automatically after the drag has ended.\n"
+"[codeblock]\n"
+"export (Color, RGBA) var color = Color(1, 0, 0, 1)\n"
+"\n"
+"func get_drag_data(position):\n"
+" # Use a control that is not in the tree\n"
+" var cpb = ColorPickerButton.new()\n"
+" cpb.color = color\n"
+" cpb.rect_size = Vector2(50, 50)\n"
+" set_drag_preview(cpb)\n"
+" return color\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Control.xml:612
+msgid "Sets [member margin_right] and [member margin_bottom] at the same time."
+msgstr ""
+
+#: doc/classes/Control.xml:620
+msgid ""
+"Sets the anchor identified by [code]margin[/code] constant from [enum "
+"Margin] enum to [Control] at [code]neighbor[/code] node path. A setter "
+"method for [member focus_neighbour_bottom], [member focus_neighbour_left], "
+"[member focus_neighbour_right] and [member focus_neighbour_top]."
+msgstr ""
+
+#: doc/classes/Control.xml:628
+msgid ""
+"Sets the [member rect_global_position] to given [code]position[/code].\n"
+"If [code]keep_margins[/code] is [code]true[/code], control's anchors will be "
+"updated instead of margins."
+msgstr ""
+
+#: doc/classes/Control.xml:637
+msgid ""
+"Sets the margin identified by [code]margin[/code] constant from [enum "
+"Margin] enum to given [code]offset[/code]. A setter method for [member "
+"margin_bottom], [member margin_left], [member margin_right] and [member "
+"margin_top]."
+msgstr ""
+
+#: doc/classes/Control.xml:646
+msgid ""
+"Sets the margins to a [code]preset[/code] from [enum Control.LayoutPreset] "
+"enum. This is the code equivalent to using the Layout menu in the 2D "
+"editor.\n"
+"Use parameter [code]resize_mode[/code] with constants from [enum Control."
+"LayoutPresetMode] to better determine the resulting size of the [Control]. "
+"Constant size will be ignored if used with presets that change size, e.g. "
+"[code]PRESET_LEFT_WIDE[/code].\n"
+"Use parameter [code]margin[/code] to determine the gap between the [Control] "
+"and the edges."
+msgstr ""
+
+#: doc/classes/Control.xml:656
+msgid ""
+"Sets the [member rect_position] to given [code]position[/code].\n"
+"If [code]keep_margins[/code] is [code]true[/code], control's anchors will be "
+"updated instead of margins."
+msgstr ""
+
+#: doc/classes/Control.xml:664
+msgid "Sets the rotation (in radians)."
+msgstr ""
+
+#: doc/classes/Control.xml:672
+msgid ""
+"Sets the size (see [member rect_size]).\n"
+"If [code]keep_margins[/code] is [code]true[/code], control's anchors will be "
+"updated instead of margins."
+msgstr ""
+
+#: doc/classes/Control.xml:680
+msgid ""
+"Displays a control as modal. Control must be a subwindow. Modal controls "
+"capture the input signals until closed or the area outside them is accessed. "
+"When a modal control loses focus, or the ESC key is pressed, they "
+"automatically hide. Modal controls are used extensively for popup dialogs "
+"and menus.\n"
+"If [code]exclusive[/code] is [code]true[/code], other controls will not "
+"receive input and clicking outside this control will not close it."
+msgstr ""
+
+#: doc/classes/Control.xml:688
+msgid ""
+"Moves the mouse cursor to [code]to_position[/code], relative to [member "
+"rect_position] of this [Control]."
+msgstr ""
+
+#: doc/classes/Control.xml:694
+msgid ""
+"Anchors the bottom edge of the node to the origin, the center, or the end of "
+"its parent control. It changes how the bottom margin updates when the node "
+"moves or changes size. You can use one of the [enum Anchor] constants for "
+"convenience."
+msgstr ""
+
+#: doc/classes/Control.xml:697
+msgid ""
+"Anchors the left edge of the node to the origin, the center or the end of "
+"its parent control. It changes how the left margin updates when the node "
+"moves or changes size. You can use one of the [enum Anchor] constants for "
+"convenience."
+msgstr ""
+
+#: doc/classes/Control.xml:700
+msgid ""
+"Anchors the right edge of the node to the origin, the center or the end of "
+"its parent control. It changes how the right margin updates when the node "
+"moves or changes size. You can use one of the [enum Anchor] constants for "
+"convenience."
+msgstr ""
+
+#: doc/classes/Control.xml:703
+msgid ""
+"Anchors the top edge of the node to the origin, the center or the end of its "
+"parent control. It changes how the top margin updates when the node moves or "
+"changes size. You can use one of the [enum Anchor] constants for convenience."
+msgstr ""
+
+#: doc/classes/Control.xml:706
+msgid ""
+"The focus access mode for the control (None, Click or All). Only one Control "
+"can be focused at the same time, and it will receive keyboard signals."
+msgstr ""
+
+#: doc/classes/Control.xml:709
+msgid ""
+"Tells Godot which node it should give keyboard focus to if the user presses "
+"the down arrow on the keyboard or down on a gamepad by default. You can "
+"change the key by editing the [code]ui_down[/code] input action. The node "
+"must be a [Control]. If this property is not set, Godot will give focus to "
+"the closest [Control] to the bottom of this one."
+msgstr ""
+
+#: doc/classes/Control.xml:712
+msgid ""
+"Tells Godot which node it should give keyboard focus to if the user presses "
+"the left arrow on the keyboard or left on a gamepad by default. You can "
+"change the key by editing the [code]ui_left[/code] input action. The node "
+"must be a [Control]. If this property is not set, Godot will give focus to "
+"the closest [Control] to the left of this one."
+msgstr ""
+
+#: doc/classes/Control.xml:715
+msgid ""
+"Tells Godot which node it should give keyboard focus to if the user presses "
+"the right arrow on the keyboard or right on a gamepad by default. You can "
+"change the key by editing the [code]ui_right[/code] input action. The node "
+"must be a [Control]. If this property is not set, Godot will give focus to "
+"the closest [Control] to the bottom of this one."
+msgstr ""
+
+#: doc/classes/Control.xml:718
+msgid ""
+"Tells Godot which node it should give keyboard focus to if the user presses "
+"the top arrow on the keyboard or top on a gamepad by default. You can change "
+"the key by editing the [code]ui_top[/code] input action. The node must be a "
+"[Control]. If this property is not set, Godot will give focus to the closest "
+"[Control] to the bottom of this one."
+msgstr ""
+
+#: doc/classes/Control.xml:721
+msgid ""
+"Tells Godot which node it should give keyboard focus to if the user presses "
+"Tab on a keyboard by default. You can change the key by editing the "
+"[code]ui_focus_next[/code] input action.\n"
+"If this property is not set, Godot will select a \"best guess\" based on "
+"surrounding nodes in the scene tree."
+msgstr ""
+
+#: doc/classes/Control.xml:725
+msgid ""
+"Tells Godot which node it should give keyboard focus to if the user presses "
+"Shift+Tab on a keyboard by default. You can change the key by editing the "
+"[code]ui_focus_prev[/code] input action.\n"
+"If this property is not set, Godot will select a \"best guess\" based on "
+"surrounding nodes in the scene tree."
+msgstr ""
+
+#: doc/classes/Control.xml:729
+msgid ""
+"Controls the direction on the horizontal axis in which the control should "
+"grow if its horizontal minimum size is changed to be greater than its "
+"current size, as the control always has to be at least the minimum size."
+msgstr ""
+
+#: doc/classes/Control.xml:732
+msgid ""
+"Controls the direction on the vertical axis in which the control should grow "
+"if its vertical minimum size is changed to be greater than its current size, "
+"as the control always has to be at least the minimum size."
+msgstr ""
+
+#: doc/classes/Control.xml:735
+msgid ""
+"Changes the tooltip text. The tooltip appears when the user's mouse cursor "
+"stays idle over this control for a few moments, provided that the [member "
+"mouse_filter] property is not [constant MOUSE_FILTER_IGNORE]. You can change "
+"the time required for the tooltip to appear with [code]gui/timers/"
+"tooltip_delay_sec[/code] option in Project Settings.\n"
+"The tooltip popup will use either a default implementation, or a custom one "
+"that you can provide by overriding [method _make_custom_tooltip]. The "
+"default tooltip includes a [PopupPanel] and [Label] whose theme properties "
+"can be customized using [Theme] methods with the [code]\"TooltipPanel\"[/"
+"code] and [code]\"TooltipLabel\"[/code] respectively. For example:\n"
+"[codeblock]\n"
+"var style_box = StyleBoxFlat.new()\n"
+"style_box.set_bg_color(Color(1, 1, 0))\n"
+"style_box.set_border_width_all(2)\n"
+"# We assume here that the `theme` property has been assigned a custom Theme "
+"beforehand.\n"
+"theme.set_stylebox(\"panel\", \"TooltipPanel\", style_box)\n"
+"theme.set_color(\"font_color\", \"TooltipLabel\", Color(0, 1, 1))\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Control.xml:747
+msgid ""
+"Enables whether input should propagate when you close the control as modal.\n"
+"If [code]false[/code], stops event handling at the viewport input event "
+"handling. The viewport first hides the modal and after marks the input as "
+"handled."
+msgstr ""
+
+#: doc/classes/Control.xml:751
+msgid ""
+"Distance between the node's bottom edge and its parent control, based on "
+"[member anchor_bottom].\n"
+"Margins are often controlled by one or multiple parent [Container] nodes, so "
+"you should not modify them manually if your node is a direct child of a "
+"[Container]. Margins update automatically when you move or resize the node."
+msgstr ""
+
+#: doc/classes/Control.xml:755
+msgid ""
+"Distance between the node's left edge and its parent control, based on "
+"[member anchor_left].\n"
+"Margins are often controlled by one or multiple parent [Container] nodes, so "
+"you should not modify them manually if your node is a direct child of a "
+"[Container]. Margins update automatically when you move or resize the node."
+msgstr ""
+
+#: doc/classes/Control.xml:759
+msgid ""
+"Distance between the node's right edge and its parent control, based on "
+"[member anchor_right].\n"
+"Margins are often controlled by one or multiple parent [Container] nodes, so "
+"you should not modify them manually if your node is a direct child of a "
+"[Container]. Margins update automatically when you move or resize the node."
+msgstr ""
+
+#: doc/classes/Control.xml:763
+msgid ""
+"Distance between the node's top edge and its parent control, based on "
+"[member anchor_top].\n"
+"Margins are often controlled by one or multiple parent [Container] nodes, so "
+"you should not modify them manually if your node is a direct child of a "
+"[Container]. Margins update automatically when you move or resize the node."
+msgstr ""
+
+#: doc/classes/Control.xml:767
+msgid ""
+"The default cursor shape for this control. Useful for Godot plugins and "
+"applications or games that use the system's mouse cursors.\n"
+"[b]Note:[/b] On Linux, shapes may vary depending on the cursor theme of the "
+"system."
+msgstr ""
+
+#: doc/classes/Control.xml:771
+msgid ""
+"Controls whether the control will be able to receive mouse button input "
+"events through [method _gui_input] and how these events should be handled. "
+"Also controls whether the control can receive the [signal mouse_entered], "
+"and [signal mouse_exited] signals. See the constants to learn what each does."
+msgstr ""
+
+#: doc/classes/Control.xml:774
+msgid ""
+"Enables whether rendering of [CanvasItem] based children should be clipped "
+"to this control's rectangle. If [code]true[/code], parts of a child which "
+"would be visibly outside of this control's rectangle will not be rendered."
+msgstr ""
+
+#: doc/classes/Control.xml:777
+msgid ""
+"The node's global position, relative to the world (usually to the top-left "
+"corner of the window)."
+msgstr ""
+
+#: doc/classes/Control.xml:780
+msgid ""
+"The minimum size of the node's bounding rectangle. If you set it to a value "
+"greater than (0, 0), the node's bounding rectangle will always have at least "
+"this size, even if its content is smaller. If it's set to (0, 0), the node "
+"sizes automatically to fit its content, be it a texture or child nodes."
+msgstr ""
+
+#: doc/classes/Control.xml:783
+msgid ""
+"By default, the node's pivot is its top-left corner. When you change its "
+"[member rect_scale], it will scale around this pivot. Set this property to "
+"[member rect_size] / 2 to center the pivot in the node's rectangle."
+msgstr ""
+
+#: doc/classes/Control.xml:786
+msgid ""
+"The node's position, relative to its parent. It corresponds to the "
+"rectangle's top-left corner. The property is not affected by [member "
+"rect_pivot_offset]."
+msgstr ""
+
+#: doc/classes/Control.xml:789
+msgid ""
+"The node's rotation around its pivot, in degrees. See [member "
+"rect_pivot_offset] to change the pivot's position."
+msgstr ""
+
+#: doc/classes/Control.xml:792
+msgid ""
+"The node's scale, relative to its [member rect_size]. Change this property "
+"to scale the node around its [member rect_pivot_offset]. The Control's "
+"[member hint_tooltip] will also scale according to this value.\n"
+"[b]Note:[/b] This property is mainly intended to be used for animation "
+"purposes. Text inside the Control will look pixelated or blurry when the "
+"Control is scaled. To support multiple resolutions in your project, use an "
+"appropriate viewport stretch mode as described in the [url=https://docs."
+"godotengine.org/en/3.4/tutorials/viewports/multiple_resolutions."
+"html]documentation[/url] instead of scaling Controls individually.\n"
+"[b]Note:[/b] If the Control node is a child of a [Container] node, the scale "
+"will be reset to [code]Vector2(1, 1)[/code] when the scene is instanced. To "
+"set the Control's scale when it's instanced, wait for one frame using "
+"[code]yield(get_tree(), \"idle_frame\")[/code] then set its [member "
+"rect_scale] property."
+msgstr ""
+
+#: doc/classes/Control.xml:797
+msgid ""
+"The size of the node's bounding rectangle, in pixels. [Container] nodes "
+"update this property automatically."
+msgstr ""
+
+#: doc/classes/Control.xml:800
+msgid ""
+"Tells the parent [Container] nodes how they should resize and place the node "
+"on the X axis. Use one of the [enum SizeFlags] constants to change the "
+"flags. See the constants to learn what each does."
+msgstr ""
+
+#: doc/classes/Control.xml:803
+msgid ""
+"If the node and at least one of its neighbours uses the [constant "
+"SIZE_EXPAND] size flag, the parent [Container] will let it take more or less "
+"space depending on this property. If this node has a stretch ratio of 2 and "
+"its neighbour a ratio of 1, this node will take two thirds of the available "
+"space."
+msgstr ""
+
+#: doc/classes/Control.xml:806
+msgid ""
+"Tells the parent [Container] nodes how they should resize and place the node "
+"on the Y axis. Use one of the [enum SizeFlags] constants to change the "
+"flags. See the constants to learn what each does."
+msgstr ""
+
+#: doc/classes/Control.xml:809
+msgid ""
+"Changing this property replaces the current [Theme] resource this node and "
+"all its [Control] children use."
+msgstr ""
+
+#: doc/classes/Control.xml:815
+msgid "Emitted when the node gains keyboard focus."
+msgstr ""
+
+#: doc/classes/Control.xml:820
+msgid "Emitted when the node loses keyboard focus."
+msgstr ""
+
+#: doc/classes/Control.xml:826
+msgid "Emitted when the node receives an [InputEvent]."
+msgstr ""
+
+#: doc/classes/Control.xml:831
+msgid "Emitted when the node's minimum size changes."
+msgstr ""
+
+#: doc/classes/Control.xml:836
+msgid "Emitted when a modal [Control] is closed. See [method show_modal]."
+msgstr ""
+
+#: doc/classes/Control.xml:841
+msgid ""
+"Emitted when the mouse enters the control's [code]Rect[/code] area, provided "
+"its [member mouse_filter] lets the event reach it.\n"
+"[b]Note:[/b] [signal mouse_entered] will not be emitted if the mouse enters "
+"a child [Control] node before entering the parent's [code]Rect[/code] area, "
+"at least until the mouse is moved to reach the parent's [code]Rect[/code] "
+"area."
+msgstr ""
+
+#: doc/classes/Control.xml:847
+msgid ""
+"Emitted when the mouse leaves the control's [code]Rect[/code] area, provided "
+"its [member mouse_filter] lets the event reach it.\n"
+"[b]Note:[/b] [signal mouse_exited] will be emitted if the mouse enters a "
+"child [Control] node, even if the mouse cursor is still inside the parent's "
+"[code]Rect[/code] area."
+msgstr ""
+
+#: doc/classes/Control.xml:853
+msgid "Emitted when the control changes size."
+msgstr ""
+
+#: doc/classes/Control.xml:858
+msgid ""
+"Emitted when one of the size flags changes. See [member "
+"size_flags_horizontal] and [member size_flags_vertical]."
+msgstr ""
+
+#: doc/classes/Control.xml:864
+msgid "The node cannot grab focus. Use with [member focus_mode]."
+msgstr ""
+
+#: doc/classes/Control.xml:867
+msgid ""
+"The node can only grab focus on mouse clicks. Use with [member focus_mode]."
+msgstr ""
+
+#: doc/classes/Control.xml:870
+msgid ""
+"The node can grab focus on mouse click or using the arrows and the Tab keys "
+"on the keyboard. Use with [member focus_mode]."
+msgstr ""
+
+#: doc/classes/Control.xml:873
+msgid ""
+"Sent when the node changes size. Use [member rect_size] to get the new size."
+msgstr ""
+
+#: doc/classes/Control.xml:876
+msgid "Sent when the mouse pointer enters the node."
+msgstr ""
+
+#: doc/classes/Control.xml:879
+msgid "Sent when the mouse pointer exits the node."
+msgstr ""
+
+#: doc/classes/Control.xml:882
+msgid "Sent when the node grabs focus."
+msgstr ""
+
+#: doc/classes/Control.xml:885
+msgid "Sent when the node loses focus."
+msgstr ""
+
+#: doc/classes/Control.xml:888
+msgid ""
+"Sent when the node's [member theme] changes, right before Godot redraws the "
+"control. Happens when you call one of the [code]add_*_override[/code] "
+"methods."
+msgstr ""
+
+#: doc/classes/Control.xml:891
+msgid "Sent when an open modal dialog closes. See [method show_modal]."
+msgstr ""
+
+#: doc/classes/Control.xml:894
+msgid ""
+"Sent when this node is inside a [ScrollContainer] which has begun being "
+"scrolled."
+msgstr ""
+
+#: doc/classes/Control.xml:897
+msgid ""
+"Sent when this node is inside a [ScrollContainer] which has stopped being "
+"scrolled."
+msgstr ""
+
+#: doc/classes/Control.xml:900
+msgid ""
+"Show the system's arrow mouse cursor when the user hovers the node. Use with "
+"[member mouse_default_cursor_shape]."
+msgstr ""
+
+#: doc/classes/Control.xml:903
+msgid ""
+"Show the system's I-beam mouse cursor when the user hovers the node. The I-"
+"beam pointer has a shape similar to \"I\". It tells the user they can "
+"highlight or insert text."
+msgstr ""
+
+#: doc/classes/Control.xml:906
+msgid ""
+"Show the system's pointing hand mouse cursor when the user hovers the node."
+msgstr ""
+
+#: doc/classes/Control.xml:909
+msgid "Show the system's cross mouse cursor when the user hovers the node."
+msgstr ""
+
+#: doc/classes/Control.xml:912
+msgid ""
+"Show the system's wait mouse cursor, often an hourglass, when the user "
+"hovers the node."
+msgstr ""
+
+#: doc/classes/Control.xml:915
+msgid ""
+"Show the system's busy mouse cursor when the user hovers the node. Often an "
+"hourglass."
+msgstr ""
+
+#: doc/classes/Control.xml:918
+msgid ""
+"Show the system's drag mouse cursor, often a closed fist or a cross symbol, "
+"when the user hovers the node. It tells the user they're currently dragging "
+"an item, like a node in the Scene dock."
+msgstr ""
+
+#: doc/classes/Control.xml:921
+msgid ""
+"Show the system's drop mouse cursor when the user hovers the node. It can be "
+"an open hand. It tells the user they can drop an item they're currently "
+"grabbing, like a node in the Scene dock."
+msgstr ""
+
+#: doc/classes/Control.xml:924
+msgid ""
+"Show the system's forbidden mouse cursor when the user hovers the node. "
+"Often a crossed circle."
+msgstr ""
+
+#: doc/classes/Control.xml:927
+msgid ""
+"Show the system's vertical resize mouse cursor when the user hovers the "
+"node. A double-headed vertical arrow. It tells the user they can resize the "
+"window or the panel vertically."
+msgstr ""
+
+#: doc/classes/Control.xml:930
+msgid ""
+"Show the system's horizontal resize mouse cursor when the user hovers the "
+"node. A double-headed horizontal arrow. It tells the user they can resize "
+"the window or the panel horizontally."
+msgstr ""
+
+#: doc/classes/Control.xml:933
+msgid ""
+"Show the system's window resize mouse cursor when the user hovers the node. "
+"The cursor is a double-headed arrow that goes from the bottom left to the "
+"top right. It tells the user they can resize the window or the panel both "
+"horizontally and vertically."
+msgstr ""
+
+#: doc/classes/Control.xml:936
+msgid ""
+"Show the system's window resize mouse cursor when the user hovers the node. "
+"The cursor is a double-headed arrow that goes from the top left to the "
+"bottom right, the opposite of [constant CURSOR_BDIAGSIZE]. It tells the user "
+"they can resize the window or the panel both horizontally and vertically."
+msgstr ""
+
+#: doc/classes/Control.xml:939
+msgid ""
+"Show the system's move mouse cursor when the user hovers the node. It shows "
+"2 double-headed arrows at a 90 degree angle. It tells the user they can move "
+"a UI element freely."
+msgstr ""
+
+#: doc/classes/Control.xml:942
+msgid ""
+"Show the system's vertical split mouse cursor when the user hovers the node. "
+"On Windows, it's the same as [constant CURSOR_VSIZE]."
+msgstr ""
+
+#: doc/classes/Control.xml:945
+msgid ""
+"Show the system's horizontal split mouse cursor when the user hovers the "
+"node. On Windows, it's the same as [constant CURSOR_HSIZE]."
+msgstr ""
+
+#: doc/classes/Control.xml:948
+msgid ""
+"Show the system's help mouse cursor when the user hovers the node, a "
+"question mark."
+msgstr ""
+
+#: doc/classes/Control.xml:951
+msgid ""
+"Snap all 4 anchors to the top-left of the parent control's bounds. Use with "
+"[method set_anchors_preset]."
+msgstr ""
+
+#: doc/classes/Control.xml:954
+msgid ""
+"Snap all 4 anchors to the top-right of the parent control's bounds. Use with "
+"[method set_anchors_preset]."
+msgstr ""
+
+#: doc/classes/Control.xml:957
+msgid ""
+"Snap all 4 anchors to the bottom-left of the parent control's bounds. Use "
+"with [method set_anchors_preset]."
+msgstr ""
+
+#: doc/classes/Control.xml:960
+msgid ""
+"Snap all 4 anchors to the bottom-right of the parent control's bounds. Use "
+"with [method set_anchors_preset]."
+msgstr ""
+
+#: doc/classes/Control.xml:963
+msgid ""
+"Snap all 4 anchors to the center of the left edge of the parent control's "
+"bounds. Use with [method set_anchors_preset]."
+msgstr ""
+
+#: doc/classes/Control.xml:966
+msgid ""
+"Snap all 4 anchors to the center of the top edge of the parent control's "
+"bounds. Use with [method set_anchors_preset]."
+msgstr ""
+
+#: doc/classes/Control.xml:969
+msgid ""
+"Snap all 4 anchors to the center of the right edge of the parent control's "
+"bounds. Use with [method set_anchors_preset]."
+msgstr ""
+
+#: doc/classes/Control.xml:972
+msgid ""
+"Snap all 4 anchors to the center of the bottom edge of the parent control's "
+"bounds. Use with [method set_anchors_preset]."
+msgstr ""
+
+#: doc/classes/Control.xml:975
+msgid ""
+"Snap all 4 anchors to the center of the parent control's bounds. Use with "
+"[method set_anchors_preset]."
+msgstr ""
+
+#: doc/classes/Control.xml:978
+msgid ""
+"Snap all 4 anchors to the left edge of the parent control. The left margin "
+"becomes relative to the left edge and the top margin relative to the top "
+"left corner of the node's parent. Use with [method set_anchors_preset]."
+msgstr ""
+
+#: doc/classes/Control.xml:981
+msgid ""
+"Snap all 4 anchors to the top edge of the parent control. The left margin "
+"becomes relative to the top left corner, the top margin relative to the top "
+"edge, and the right margin relative to the top right corner of the node's "
+"parent. Use with [method set_anchors_preset]."
+msgstr ""
+
+#: doc/classes/Control.xml:984
+msgid ""
+"Snap all 4 anchors to the right edge of the parent control. The right margin "
+"becomes relative to the right edge and the top margin relative to the top "
+"right corner of the node's parent. Use with [method set_anchors_preset]."
+msgstr ""
+
+#: doc/classes/Control.xml:987
+msgid ""
+"Snap all 4 anchors to the bottom edge of the parent control. The left margin "
+"becomes relative to the bottom left corner, the bottom margin relative to "
+"the bottom edge, and the right margin relative to the bottom right corner of "
+"the node's parent. Use with [method set_anchors_preset]."
+msgstr ""
+
+#: doc/classes/Control.xml:990
+msgid ""
+"Snap all 4 anchors to a vertical line that cuts the parent control in half. "
+"Use with [method set_anchors_preset]."
+msgstr ""
+
+#: doc/classes/Control.xml:993
+msgid ""
+"Snap all 4 anchors to a horizontal line that cuts the parent control in "
+"half. Use with [method set_anchors_preset]."
+msgstr ""
+
+#: doc/classes/Control.xml:996
+msgid ""
+"Snap all 4 anchors to the respective corners of the parent control. Set all "
+"4 margins to 0 after you applied this preset and the [Control] will fit its "
+"parent control. This is equivalent to the \"Full Rect\" layout option in the "
+"editor. Use with [method set_anchors_preset]."
+msgstr ""
+
+#: doc/classes/Control.xml:999
+msgid "The control will be resized to its minimum size."
+msgstr ""
+
+#: doc/classes/Control.xml:1002
+msgid "The control's width will not change."
+msgstr ""
+
+#: doc/classes/Control.xml:1005
+msgid "The control's height will not change."
+msgstr ""
+
+#: doc/classes/Control.xml:1008
+msgid "The control's size will not change."
+msgstr ""
+
+#: doc/classes/Control.xml:1011
+msgid ""
+"Tells the parent [Container] to expand the bounds of this node to fill all "
+"the available space without pushing any other node. Use with [member "
+"size_flags_horizontal] and [member size_flags_vertical]."
+msgstr ""
+
+#: doc/classes/Control.xml:1014
+msgid ""
+"Tells the parent [Container] to let this node take all the available space "
+"on the axis you flag. If multiple neighboring nodes are set to expand, "
+"they'll share the space based on their stretch ratio. See [member "
+"size_flags_stretch_ratio]. Use with [member size_flags_horizontal] and "
+"[member size_flags_vertical]."
+msgstr ""
+
+#: doc/classes/Control.xml:1017
+msgid ""
+"Sets the node's size flags to both fill and expand. See the 2 constants "
+"above for more information."
+msgstr ""
+
+#: doc/classes/Control.xml:1020
+msgid ""
+"Tells the parent [Container] to center the node in itself. It centers the "
+"control based on its bounding box, so it doesn't work with the fill or "
+"expand size flags. Use with [member size_flags_horizontal] and [member "
+"size_flags_vertical]."
+msgstr ""
+
+#: doc/classes/Control.xml:1023
+msgid ""
+"Tells the parent [Container] to align the node with its end, either the "
+"bottom or the right edge. It doesn't work with the fill or expand size "
+"flags. Use with [member size_flags_horizontal] and [member "
+"size_flags_vertical]."
+msgstr ""
+
+#: doc/classes/Control.xml:1026
+msgid ""
+"The control will receive mouse button input events through [method "
+"_gui_input] if clicked on. And the control will receive the [signal "
+"mouse_entered] and [signal mouse_exited] signals. These events are "
+"automatically marked as handled, and they will not propagate further to "
+"other controls. This also results in blocking signals in other controls."
+msgstr ""
+
+#: doc/classes/Control.xml:1029
+msgid ""
+"The control will receive mouse button input events through [method "
+"_gui_input] if clicked on. And the control will receive the [signal "
+"mouse_entered] and [signal mouse_exited] signals. If this control does not "
+"handle the event, the parent control (if any) will be considered, and so on "
+"until there is no more parent control to potentially handle it. This also "
+"allows signals to fire in other controls. Even if no control handled it at "
+"all, the event will still be handled automatically, so unhandled input will "
+"not be fired."
+msgstr ""
+
+#: doc/classes/Control.xml:1032
+msgid ""
+"The control will not receive mouse button input events through [method "
+"_gui_input]. The control will also not receive the [signal mouse_entered] "
+"nor [signal mouse_exited] signals. This will not block other controls from "
+"receiving these events or firing the signals. Ignored events will not be "
+"handled automatically."
+msgstr ""
+
+#: doc/classes/Control.xml:1035
+msgid ""
+"The control will grow to the left or top to make up if its minimum size is "
+"changed to be greater than its current size on the respective axis."
+msgstr ""
+
+#: doc/classes/Control.xml:1038
+msgid ""
+"The control will grow to the right or bottom to make up if its minimum size "
+"is changed to be greater than its current size on the respective axis."
+msgstr ""
+
+#: doc/classes/Control.xml:1041
+msgid ""
+"The control will grow in both directions equally to make up if its minimum "
+"size is changed to be greater than its current size."
+msgstr ""
+
+#: doc/classes/Control.xml:1044
+msgid ""
+"Snaps one of the 4 anchor's sides to the origin of the node's [code]Rect[/"
+"code], in the top left. Use it with one of the [code]anchor_*[/code] member "
+"variables, like [member anchor_left]. To change all 4 anchors at once, use "
+"[method set_anchors_preset]."
+msgstr ""
+
+#: doc/classes/Control.xml:1047
+msgid ""
+"Snaps one of the 4 anchor's sides to the end of the node's [code]Rect[/"
+"code], in the bottom right. Use it with one of the [code]anchor_*[/code] "
+"member variables, like [member anchor_left]. To change all 4 anchors at "
+"once, use [method set_anchors_preset]."
+msgstr ""
+
+#: doc/classes/ConvexPolygonShape.xml:4
+msgid "Convex polygon shape for 3D physics."
+msgstr ""
+
+#: doc/classes/ConvexPolygonShape.xml:7
+msgid ""
+"Convex polygon shape resource, which can be added to a [PhysicsBody] or area."
+msgstr ""
+
+#: doc/classes/ConvexPolygonShape.xml:16
+msgid "The list of 3D points forming the convex polygon shape."
+msgstr ""
+
+#: doc/classes/ConvexPolygonShape2D.xml:4
+msgid "Convex polygon shape for 2D physics."
+msgstr ""
+
+#: doc/classes/ConvexPolygonShape2D.xml:7
+msgid ""
+"Convex polygon shape for 2D physics. A convex polygon, whatever its shape, "
+"is internally decomposed into as many convex polygons as needed to ensure "
+"all collision checks against it are always done on convex polygons (which "
+"are faster to check).\n"
+"The main difference between a [ConvexPolygonShape2D] and a "
+"[ConcavePolygonShape2D] is that a concave polygon assumes it is concave and "
+"uses a more complex method of collision detection, and a convex one forces "
+"itself to be convex in order to speed up collision detection."
+msgstr ""
+
+#: doc/classes/ConvexPolygonShape2D.xml:17
+msgid ""
+"Based on the set of points provided, this creates and assigns the [member "
+"points] property using the convex hull algorithm. Removing all unneeded "
+"points. See [method Geometry.convex_hull_2d] for details."
+msgstr ""
+
+#: doc/classes/ConvexPolygonShape2D.xml:23
+msgid ""
+"The polygon's list of vertices. Can be in either clockwise or "
+"counterclockwise order."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:4
+msgid "CPU-based 3D particle emitter."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:7
+msgid ""
+"CPU-based 3D particle node used to create a variety of particle systems and "
+"effects.\n"
+"See also [Particles], which provides the same functionality with hardware "
+"acceleration, but may not run on older devices.\n"
+"[b]Note:[/b] Unlike [Particles], the visibility rect is generated on-the-fly "
+"and doesn't need to be configured by the user."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:18
+msgid ""
+"Sets this node's properties to match a given [Particles] node with an "
+"assigned [ParticlesMaterial]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:25 doc/classes/CPUParticles2D.xml:26
+msgid "Returns the base value of the parameter specified by [enum Parameter]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:32 doc/classes/CPUParticles2D.xml:33
+msgid "Returns the [Curve] of the parameter specified by [enum Parameter]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:39 doc/classes/CPUParticles2D.xml:40
+msgid ""
+"Returns the randomness factor of the parameter specified by [enum Parameter]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:46 doc/classes/CPUParticles2D.xml:47
+msgid ""
+"Returns the enabled state of the given flag (see [enum Flags] for options)."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:52 doc/classes/CPUParticles2D.xml:53
+msgid "Restarts the particle emitter."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:60 doc/classes/CPUParticles2D.xml:61
+msgid "Sets the base value of the parameter specified by [enum Parameter]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:68 doc/classes/CPUParticles2D.xml:69
+msgid "Sets the [Curve] of the parameter specified by [enum Parameter]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:76 doc/classes/CPUParticles2D.xml:77
+msgid ""
+"Sets the randomness factor of the parameter specified by [enum Parameter]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:84 doc/classes/CPUParticles2D.xml:85
+msgid "Enables or disables the given flag (see [enum Flags] for options)."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:90 doc/classes/CPUParticles2D.xml:91
+#: doc/classes/Particles.xml:47 doc/classes/Particles2D.xml:33
+msgid ""
+"The number of particles emitted in one emission cycle (corresponding to the "
+"[member lifetime]).\n"
+"[b]Note:[/b] Changing [member amount] will reset the particle emission, "
+"therefore removing all particles that were already emitted before changing "
+"[member amount]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:94 doc/classes/CPUParticles2D.xml:95
+msgid "Initial rotation applied to each particle, in degrees."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:97 doc/classes/CPUParticles2D.xml:98
+msgid "Each particle's rotation will be animated along this [Curve]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:100 doc/classes/CPUParticles2D.xml:101
+#: doc/classes/ParticlesMaterial.xml:84
+msgid "Rotation randomness ratio."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:103 doc/classes/CPUParticles2D.xml:104
+msgid ""
+"Initial angular velocity applied to each particle. Sets the speed of "
+"rotation of the particle."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:106 doc/classes/CPUParticles2D.xml:107
+msgid "Each particle's angular velocity will vary along this [Curve]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:109 doc/classes/CPUParticles2D.xml:110
+#: doc/classes/ParticlesMaterial.xml:94
+msgid "Angular velocity randomness ratio."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:112 doc/classes/CPUParticles2D.xml:113
+#: doc/classes/ParticlesMaterial.xml:97
+msgid "Particle animation offset."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:115 doc/classes/CPUParticles2D.xml:116
+msgid "Each particle's animation offset will vary along this [Curve]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:118 doc/classes/CPUParticles2D.xml:119
+#: doc/classes/ParticlesMaterial.xml:103
+msgid "Animation offset randomness ratio."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:121 doc/classes/CPUParticles2D.xml:122
+#: doc/classes/ParticlesMaterial.xml:106
+msgid "Particle animation speed."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:124 doc/classes/CPUParticles2D.xml:125
+msgid "Each particle's animation speed will vary along this [Curve]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:127 doc/classes/CPUParticles2D.xml:128
+#: doc/classes/ParticlesMaterial.xml:112
+msgid "Animation speed randomness ratio."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:130
+msgid ""
+"Each particle's initial color. To have particle display color in a "
+"[SpatialMaterial] make sure to set [member SpatialMaterial."
+"vertex_color_use_as_albedo] to [code]true[/code]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:133 doc/classes/ParticlesMaterial.xml:118
+msgid ""
+"Each particle's color will vary along this [GradientTexture] over its "
+"lifetime (multiplied with [member color])."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:136 doc/classes/CPUParticles2D.xml:137
+#: doc/classes/ParticlesMaterial.xml:121
+msgid "The rate at which particles lose velocity."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:139 doc/classes/CPUParticles2D.xml:140
+msgid "Damping will vary along this [Curve]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:142 doc/classes/CPUParticles2D.xml:143
+#: doc/classes/ParticlesMaterial.xml:127
+msgid "Damping randomness ratio."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:145 doc/classes/CPUParticles2D.xml:146
+#: doc/classes/ParticlesMaterial.xml:130
+msgid "Unit vector specifying the particles' emission direction."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:148 doc/classes/CPUParticles2D.xml:149
+#: doc/classes/Particles.xml:51 doc/classes/Particles2D.xml:37
+msgid "Particle draw order. Uses [enum DrawOrder] values."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:151
+msgid ""
+"The rectangle's extents if [member emission_shape] is set to [constant "
+"EMISSION_SHAPE_BOX]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:154 doc/classes/CPUParticles2D.xml:152
+msgid ""
+"Sets the [Color]s to modulate particles by when using [constant "
+"EMISSION_SHAPE_POINTS] or [constant EMISSION_SHAPE_DIRECTED_POINTS]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:157 doc/classes/CPUParticles2D.xml:155
+msgid ""
+"Sets the direction the particles will be emitted in when using [constant "
+"EMISSION_SHAPE_DIRECTED_POINTS]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:160 doc/classes/CPUParticles2D.xml:158
+msgid ""
+"Sets the initial positions to spawn particles when using [constant "
+"EMISSION_SHAPE_POINTS] or [constant EMISSION_SHAPE_DIRECTED_POINTS]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:163
+msgid ""
+"The axis for the ring shaped emitter when using [constant "
+"EMISSION_SHAPE_RING]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:166
+msgid ""
+"The height for the ring shaped emitter when using [constant "
+"EMISSION_SHAPE_RING]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:169
+msgid ""
+"The inner radius for the ring shaped emitter when using [constant "
+"EMISSION_SHAPE_RING]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:172
+msgid ""
+"The radius for the ring shaped emitter when using [constant "
+"EMISSION_SHAPE_RING]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:175 doc/classes/CPUParticles2D.xml:164
+msgid ""
+"Particles will be emitted inside this region. See [enum EmissionShape] for "
+"possible values."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:178
+msgid ""
+"The sphere's radius if [enum EmissionShape] is set to [constant "
+"EMISSION_SHAPE_SPHERE]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:181 doc/classes/CPUParticles2D.xml:170
+#: doc/classes/Particles.xml:69 doc/classes/Particles2D.xml:40
+msgid "If [code]true[/code], particles are being emitted."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:184 doc/classes/CPUParticles2D.xml:173
+#: doc/classes/Particles2D.xml:43
+msgid ""
+"How rapidly particles in an emission cycle are emitted. If greater than "
+"[code]0[/code], there will be a gap in emissions before the next cycle "
+"begins."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:187
+msgid ""
+"The particle system's frame rate is fixed to a value. For instance, changing "
+"the value to 2 will make the particles render at 2 frames per second. Note "
+"this does not slow down the particle system itself."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:190 doc/classes/CPUParticles2D.xml:179
+#: doc/classes/ParticlesMaterial.xml:166
+msgid "Align Y axis of particle with the direction of its velocity."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:193 doc/classes/ParticlesMaterial.xml:169
+msgid "If [code]true[/code], particles will not move on the z axis."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:196 doc/classes/ParticlesMaterial.xml:172
+msgid "If [code]true[/code], particles rotate around Y axis by [member angle]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:199
+msgid ""
+"Amount of [member spread] in Y/Z plane. A value of [code]1[/code] restricts "
+"particles to X/Z plane."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:202 doc/classes/CPUParticles2D.xml:182
+#: doc/classes/Particles.xml:78 doc/classes/Particles2D.xml:49
+msgid ""
+"If [code]true[/code], results in fractional delta calculation which has a "
+"smoother particles display effect."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:205 doc/classes/CPUParticles2D.xml:185
+#: doc/classes/ParticlesMaterial.xml:178
+msgid "Gravity applied to every particle."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:208 doc/classes/CPUParticles2D.xml:188
+#: doc/classes/ParticlesMaterial.xml:181
+msgid "Initial hue variation applied to each particle."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:211 doc/classes/CPUParticles2D.xml:191
+msgid "Each particle's hue will vary along this [Curve]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:214 doc/classes/CPUParticles2D.xml:194
+#: doc/classes/ParticlesMaterial.xml:187
+msgid "Hue variation randomness ratio."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:217 doc/classes/CPUParticles2D.xml:197
+#: doc/classes/ParticlesMaterial.xml:190
+msgid ""
+"Initial velocity magnitude for each particle. Direction comes from [member "
+"spread] and the node's orientation."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:220 doc/classes/CPUParticles2D.xml:200
+#: doc/classes/ParticlesMaterial.xml:193
+msgid "Initial velocity randomness ratio."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:223 doc/classes/CPUParticles2D.xml:203
+#: doc/classes/Particles.xml:81 doc/classes/Particles2D.xml:52
+msgid "The amount of time each particle will exist (in seconds)."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:226 doc/classes/CPUParticles2D.xml:206
+#: doc/classes/ParticlesMaterial.xml:196
+msgid "Particle lifetime randomness ratio."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:229 doc/classes/CPUParticles2D.xml:209
+#: doc/classes/ParticlesMaterial.xml:199
+msgid ""
+"Linear acceleration applied to each particle in the direction of motion."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:232 doc/classes/CPUParticles2D.xml:212
+msgid "Each particle's linear acceleration will vary along this [Curve]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:235 doc/classes/CPUParticles2D.xml:215
+#: doc/classes/ParticlesMaterial.xml:205
+msgid "Linear acceleration randomness ratio."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:238 doc/classes/CPUParticles2D.xml:218
+#: doc/classes/Particles.xml:84 doc/classes/Particles2D.xml:55
+msgid ""
+"If [code]true[/code], particles use the parent node's coordinate space. If "
+"[code]false[/code], they use global coordinates."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:241
+msgid ""
+"The [Mesh] used for each particle. If [code]null[/code], particles will be "
+"spheres."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:244 doc/classes/CPUParticles2D.xml:225
+#: doc/classes/Particles2D.xml:62
+msgid ""
+"If [code]true[/code], only one emission cycle occurs. If set [code]true[/"
+"code] during a cycle, emission will stop at the cycle's end."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:247
+msgid ""
+"Orbital velocity applied to each particle. Makes the particles circle around "
+"origin in the local XY plane. Specified in number of full rotations around "
+"origin per second.\n"
+"This property is only available when [member flag_disable_z] is [code]true[/"
+"code]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:251 doc/classes/CPUParticles2D.xml:231
+msgid "Each particle's orbital velocity will vary along this [Curve]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:254 doc/classes/CPUParticles2D.xml:234
+#: doc/classes/ParticlesMaterial.xml:215
+msgid "Orbital velocity randomness ratio."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:257 doc/classes/CPUParticles2D.xml:237
+#: doc/classes/Particles2D.xml:65
+msgid "Particle system starts as if it had already run for this many seconds."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:260 doc/classes/CPUParticles2D.xml:240
+#: doc/classes/ParticlesMaterial.xml:218
+msgid ""
+"Radial acceleration applied to each particle. Makes particle accelerate away "
+"from origin."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:263 doc/classes/CPUParticles2D.xml:243
+msgid "Each particle's radial acceleration will vary along this [Curve]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:266 doc/classes/CPUParticles2D.xml:246
+#: doc/classes/ParticlesMaterial.xml:224
+msgid "Radial acceleration randomness ratio."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:269 doc/classes/CPUParticles2D.xml:249
+#: doc/classes/Particles2D.xml:71
+msgid "Emission lifetime randomness ratio."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:272 doc/classes/CPUParticles2D.xml:252
+#: doc/classes/ParticlesMaterial.xml:227
+msgid "Initial scale applied to each particle."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:275 doc/classes/CPUParticles2D.xml:255
+msgid "Each particle's scale will vary along this [Curve]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:278 doc/classes/CPUParticles2D.xml:258
+#: doc/classes/ParticlesMaterial.xml:233
+msgid "Scale randomness ratio."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:281 doc/classes/CPUParticles2D.xml:261
+#: doc/classes/Particles2D.xml:74
+msgid ""
+"Particle system's running speed scaling ratio. A value of [code]0[/code] can "
+"be used to pause the particles."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:284
+msgid ""
+"Each particle's initial direction range from [code]+spread[/code] to [code]-"
+"spread[/code] degrees. Applied to X/Z plane and Y/Z planes."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:287 doc/classes/CPUParticles2D.xml:267
+#: doc/classes/ParticlesMaterial.xml:239
+msgid ""
+"Tangential acceleration applied to each particle. Tangential acceleration is "
+"perpendicular to the particle's velocity giving the particles a swirling "
+"motion."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:290 doc/classes/CPUParticles2D.xml:270
+msgid "Each particle's tangential acceleration will vary along this [Curve]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:293 doc/classes/CPUParticles2D.xml:273
+#: doc/classes/ParticlesMaterial.xml:245
+msgid "Tangential acceleration randomness ratio."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:298 doc/classes/CPUParticles2D.xml:281
+#: doc/classes/Particles.xml:109 doc/classes/Particles2D.xml:86
+msgid "Particles are drawn in the order emitted."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:301 doc/classes/CPUParticles2D.xml:284
+#: doc/classes/Particles.xml:112 doc/classes/Particles2D.xml:89
+msgid "Particles are drawn in order of remaining lifetime."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:304 doc/classes/Particles.xml:115
+msgid "Particles are drawn in order of depth."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:307 doc/classes/CPUParticles2D.xml:287
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_curve] to set initial velocity properties."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:310 doc/classes/CPUParticles2D.xml:290
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_curve] to set angular velocity properties."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:313 doc/classes/CPUParticles2D.xml:293
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_curve] to set orbital velocity properties."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:316 doc/classes/CPUParticles2D.xml:296
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_curve] to set linear acceleration properties."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:319 doc/classes/CPUParticles2D.xml:299
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_curve] to set radial acceleration properties."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:322 doc/classes/CPUParticles2D.xml:302
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_curve] to set tangential acceleration properties."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:325 doc/classes/CPUParticles2D.xml:305
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_curve] to set damping properties."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:328 doc/classes/CPUParticles2D.xml:308
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_curve] to set angle properties."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:331 doc/classes/CPUParticles2D.xml:311
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_curve] to set scale properties."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:334 doc/classes/CPUParticles2D.xml:314
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_curve] to set hue variation properties."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:337 doc/classes/CPUParticles2D.xml:317
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_curve] to set animation speed properties."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:340 doc/classes/CPUParticles2D.xml:320
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_curve] to set animation offset properties."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:343 doc/classes/CPUParticles2D.xml:323
+#: doc/classes/ParticlesMaterial.xml:295
+msgid "Represents the size of the [enum Parameter] enum."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:346 doc/classes/CPUParticles2D.xml:326
+msgid "Use with [method set_particle_flag] to set [member flag_align_y]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:349
+msgid "Use with [method set_particle_flag] to set [member flag_rotate_y]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:352
+msgid "Use with [method set_particle_flag] to set [member flag_disable_z]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:355 doc/classes/CPUParticles2D.xml:335
+#: doc/classes/GeometryInstance.xml:109 doc/classes/ParticlesMaterial.xml:307
+#: doc/classes/SpatialMaterial.xml:564
+msgid "Represents the size of the [enum Flags] enum."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:358 doc/classes/CPUParticles2D.xml:338
+#: doc/classes/ParticlesMaterial.xml:310
+msgid "All particles will be emitted from a single point."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:361 doc/classes/ParticlesMaterial.xml:313
+msgid "Particles will be emitted in the volume of a sphere."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:364 doc/classes/ParticlesMaterial.xml:316
+msgid "Particles will be emitted in the volume of a box."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:367 doc/classes/CPUParticles2D.xml:347
+msgid ""
+"Particles will be emitted at a position chosen randomly among [member "
+"emission_points]. Particle color will be modulated by [member "
+"emission_colors]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:370 doc/classes/CPUParticles2D.xml:350
+msgid ""
+"Particles will be emitted at a position chosen randomly among [member "
+"emission_points]. Particle velocity and rotation will be set based on "
+"[member emission_normals]. Particle color will be modulated by [member "
+"emission_colors]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:373 doc/classes/ParticlesMaterial.xml:325
+msgid "Particles will be emitted in a ring or cylinder."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:376 doc/classes/CPUParticles2D.xml:353
+#: doc/classes/ParticlesMaterial.xml:328
+msgid "Represents the size of the [enum EmissionShape] enum."
+msgstr ""
+
+#: doc/classes/CPUParticles2D.xml:4
+msgid "CPU-based 2D particle emitter."
+msgstr ""
+
+#: doc/classes/CPUParticles2D.xml:7
+msgid ""
+"CPU-based 2D particle node used to create a variety of particle systems and "
+"effects.\n"
+"See also [Particles2D], which provides the same functionality with hardware "
+"acceleration, but may not run on older devices.\n"
+"[b]Note:[/b] Unlike [Particles2D], the visibility rect is generated on-the-"
+"fly and doesn't need to be configured by the user."
+msgstr ""
+
+#: doc/classes/CPUParticles2D.xml:12 doc/classes/Particles2D.xml:14
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/2d/particle_systems_2d.html"
+msgstr ""
+
+#: doc/classes/CPUParticles2D.xml:19
+msgid ""
+"Sets this node's properties to match a given [Particles2D] node with an "
+"assigned [ParticlesMaterial]."
+msgstr ""
+
+#: doc/classes/CPUParticles2D.xml:131
+msgid ""
+"Each particle's initial color. If [member texture] is defined, it will be "
+"multiplied by this color."
+msgstr ""
+
+#: doc/classes/CPUParticles2D.xml:134
+msgid ""
+"Each particle's color will vary along this [Gradient] (multiplied with "
+"[member color])."
+msgstr ""
+
+#: doc/classes/CPUParticles2D.xml:161
+msgid ""
+"The rectangle's extents if [member emission_shape] is set to [constant "
+"EMISSION_SHAPE_RECTANGLE]."
+msgstr ""
+
+#: doc/classes/CPUParticles2D.xml:167
+msgid ""
+"The sphere's radius if [member emission_shape] is set to [constant "
+"EMISSION_SHAPE_SPHERE]."
+msgstr ""
+
+#: doc/classes/CPUParticles2D.xml:176 doc/classes/Particles.xml:75
+#: doc/classes/Particles2D.xml:46
+msgid ""
+"The particle system's frame rate is fixed to a value. For instance, changing "
+"the value to 2 will make the particles render at 2 frames per second. Note "
+"this does not slow down the simulation of the particle system itself."
+msgstr ""
+
+#: doc/classes/CPUParticles2D.xml:221 doc/classes/Particles2D.xml:58
+msgid ""
+"Normal map to be used for the [member texture] property.\n"
+"[b]Note:[/b] Godot expects the normal map to use X+, Y-, and Z+ coordinates. "
+"See [url=http://wiki.polycount.com/wiki/"
+"Normal_Map_Technical_Details#Common_Swizzle_Coordinates]this page[/url] for "
+"a comparison of normal map coordinates expected by popular engines."
+msgstr ""
+
+#: doc/classes/CPUParticles2D.xml:228
+msgid ""
+"Orbital velocity applied to each particle. Makes the particles circle around "
+"origin. Specified in number of full rotations around origin per second."
+msgstr ""
+
+#: doc/classes/CPUParticles2D.xml:264 doc/classes/ParticlesMaterial.xml:236
+msgid ""
+"Each particle's initial direction range from [code]+spread[/code] to [code]-"
+"spread[/code] degrees."
+msgstr ""
+
+#: doc/classes/CPUParticles2D.xml:276 doc/classes/Particles2D.xml:77
+msgid "Particle texture. If [code]null[/code], particles will be squares."
+msgstr ""
+
+#: doc/classes/CPUParticles2D.xml:329 doc/classes/CPUParticles2D.xml:332
+msgid "Present for consistency with 3D particle nodes, not used in 2D."
+msgstr ""
+
+#: doc/classes/CPUParticles2D.xml:341
+msgid ""
+"Particles will be emitted on the surface of a sphere flattened to two "
+"dimensions."
+msgstr ""
+
+#: doc/classes/CPUParticles2D.xml:344
+msgid "Particles will be emitted in the area of a rectangle."
+msgstr ""
+
+#: doc/classes/Crypto.xml:4
+msgid "Access to advanced cryptographic functionalities."
+msgstr ""
+
+#: doc/classes/Crypto.xml:7
+msgid ""
+"The Crypto class allows you to access some more advanced cryptographic "
+"functionalities in Godot.\n"
+"For now, this includes generating cryptographically secure random bytes, RSA "
+"keys and self-signed X509 certificates generation, asymmetric key encryption/"
+"decryption, and signing/verification.\n"
+"[codeblock]\n"
+"extends Node\n"
+"\n"
+"var crypto = Crypto.new()\n"
+"var key = CryptoKey.new()\n"
+"var cert = X509Certificate.new()\n"
+"\n"
+"func _ready():\n"
+" # Generate new RSA key.\n"
+" key = crypto.generate_rsa(4096)\n"
+" # Generate new self-signed certificate with the given key.\n"
+" cert = crypto.generate_self_signed_certificate(key, \"CN=mydomain.com,"
+"O=My Game Company,C=IT\")\n"
+" # Save key and certificate in the user folder.\n"
+" key.save(\"user://generated.key\")\n"
+" cert.save(\"user://generated.crt\")\n"
+" # Encryption\n"
+" var data = \"Some data\"\n"
+" var encrypted = crypto.encrypt(key, data.to_utf8())\n"
+" # Decryption\n"
+" var decrypted = crypto.decrypt(key, encrypted)\n"
+" # Signing\n"
+" var signature = crypto.sign(HashingContext.HASH_SHA256, data."
+"sha256_buffer(), key)\n"
+" # Verifying\n"
+" var verified = crypto.verify(HashingContext.HASH_SHA256, data."
+"sha256_buffer(), signature, key)\n"
+" # Checks\n"
+" assert(verified)\n"
+" assert(data.to_utf8() == decrypted)\n"
+"[/codeblock]\n"
+"[b]Note:[/b] Not available in HTML5 exports."
+msgstr ""
+
+#: doc/classes/Crypto.xml:47
+msgid ""
+"Compares two [PoolByteArray]s for equality without leaking timing "
+"information in order to prevent timing attacks.\n"
+"See [url=https://paragonie.com/blog/2015/11/preventing-timing-attacks-on-"
+"string-comparison-with-double-hmac-strategy]this blog post[/url] for more "
+"information."
+msgstr ""
+
+#: doc/classes/Crypto.xml:56
+msgid ""
+"Decrypt the given [code]ciphertext[/code] with the provided private "
+"[code]key[/code].\n"
+"[b]Note:[/b] The maximum size of accepted ciphertext is limited by the key "
+"size."
+msgstr ""
+
+#: doc/classes/Crypto.xml:65
+msgid ""
+"Encrypt the given [code]plaintext[/code] with the provided public [code]key[/"
+"code].\n"
+"[b]Note:[/b] The maximum size of accepted plaintext is limited by the key "
+"size."
+msgstr ""
+
+#: doc/classes/Crypto.xml:73
+msgid ""
+"Generates a [PoolByteArray] of cryptographically secure random bytes with "
+"given [code]size[/code]."
+msgstr ""
+
+#: doc/classes/Crypto.xml:80
+msgid ""
+"Generates an RSA [CryptoKey] that can be used for creating self-signed "
+"certificates and passed to [method StreamPeerSSL.accept_stream]."
+msgstr ""
+
+#: doc/classes/Crypto.xml:90
+msgid ""
+"Generates a self-signed [X509Certificate] from the given [CryptoKey] and "
+"[code]issuer_name[/code]. The certificate validity will be defined by "
+"[code]not_before[/code] and [code]not_after[/code] (first valid date and "
+"last valid date). The [code]issuer_name[/code] must contain at least \"CN="
+"\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
+"company name), \"C=\" (country, i.e. 2 lettered ISO-3166 code of the country "
+"the organization is based in).\n"
+"A small example to generate an RSA key and a X509 self-signed certificate.\n"
+"[codeblock]\n"
+"var crypto = Crypto.new()\n"
+"# Generate 4096 bits RSA key.\n"
+"var key = crypto.generate_rsa(4096)\n"
+"# Generate self-signed certificate using the given key.\n"
+"var cert = crypto.generate_self_signed_certificate(key, \"CN=example.com,O=A "
+"Game Company,C=IT\")\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Crypto.xml:107
+msgid ""
+"Generates an [url=https://en.wikipedia.org/wiki/HMAC]HMAC[/url] digest of "
+"[code]msg[/code] using [code]key[/code]. The [code]hash_type[/code] "
+"parameter is the hashing algorithm that is used for the inner and outer "
+"hashes.\n"
+"Currently, only [constant HashingContext.HASH_SHA256] and [constant "
+"HashingContext.HASH_SHA1] are supported."
+msgstr ""
+
+#: doc/classes/Crypto.xml:117
+msgid ""
+"Sign a given [code]hash[/code] of type [code]hash_type[/code] with the "
+"provided private [code]key[/code]."
+msgstr ""
+
+#: doc/classes/Crypto.xml:127
+msgid ""
+"Verify that a given [code]signature[/code] for [code]hash[/code] of type "
+"[code]hash_type[/code] against the provided public [code]key[/code]."
+msgstr ""
+
+#: doc/classes/CryptoKey.xml:4
+msgid "A cryptographic key (RSA)."
+msgstr ""
+
+#: doc/classes/CryptoKey.xml:7
+msgid ""
+"The CryptoKey class represents a cryptographic key. Keys can be loaded and "
+"saved like any other [Resource].\n"
+"They can be used to generate a self-signed [X509Certificate] via [method "
+"Crypto.generate_self_signed_certificate] and as private key in [method "
+"StreamPeerSSL.accept_stream] along with the appropriate certificate.\n"
+"[b]Note:[/b] Not available in HTML5 exports."
+msgstr ""
+
+#: doc/classes/CryptoKey.xml:17
+msgid ""
+"Return [code]true[/code] if this CryptoKey only has the public part, and not "
+"the private one."
+msgstr ""
+
+#: doc/classes/CryptoKey.xml:25
+msgid ""
+"Loads a key from [code]path[/code]. If [code]public_only[/code] is "
+"[code]true[/code], only the public key will be loaded.\n"
+"[b]Note:[/b] [code]path[/code] should be a \"*.pub\" file if "
+"[code]public_only[/code] is [code]true[/code], a \"*.key\" file otherwise."
+msgstr ""
+
+#: doc/classes/CryptoKey.xml:34
+msgid ""
+"Loads a key from the given [code]string[/code]. If [code]public_only[/code] "
+"is [code]true[/code], only the public key will be loaded."
+msgstr ""
+
+#: doc/classes/CryptoKey.xml:42
+msgid ""
+"Saves a key to the given [code]path[/code]. If [code]public_only[/code] is "
+"[code]true[/code], only the public key will be saved.\n"
+"[b]Note:[/b] [code]path[/code] should be a \"*.pub\" file if "
+"[code]public_only[/code] is [code]true[/code], a \"*.key\" file otherwise."
+msgstr ""
+
+#: doc/classes/CryptoKey.xml:50
+msgid ""
+"Returns a string containing the key in PEM format. If [code]public_only[/"
+"code] is [code]true[/code], only the public key will be included."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGBox.xml:4
+msgid "A CSG Box shape."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGBox.xml:7
+msgid "This node allows you to create a box for use with the CSG system."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGBox.xml:15
+msgid "Depth of the box measured from the center of the box."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGBox.xml:18
+msgid "Height of the box measured from the center of the box."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGBox.xml:21
+msgid "The material used to render the box."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGBox.xml:24
+msgid "Width of the box measured from the center of the box."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGCombiner.xml:4
+msgid "A CSG node that allows you to combine other CSG modifiers."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGCombiner.xml:7
+msgid ""
+"For complex arrangements of shapes, it is sometimes needed to add structure "
+"to your CSG nodes. The CSGCombiner node allows you to create this structure. "
+"The node encapsulates the result of the CSG operations of its children. In "
+"this way, it is possible to do operations on one set of shapes that are "
+"children of one CSGCombiner node, and a set of separate operations on a "
+"second set of shapes that are children of a second CSGCombiner node, and "
+"then do an operation that takes the two end results as its input to create "
+"the final shape."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGCylinder.xml:4
+msgid "A CSG Cylinder shape."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGCylinder.xml:7
+msgid ""
+"This node allows you to create a cylinder (or cone) for use with the CSG "
+"system."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGCylinder.xml:15
+msgid ""
+"If [code]true[/code] a cone is created, the [member radius] will only apply "
+"to one side."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGCylinder.xml:18
+msgid "The height of the cylinder."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGCylinder.xml:21
+msgid "The material used to render the cylinder."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGCylinder.xml:24
+msgid "The radius of the cylinder."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGCylinder.xml:27
+msgid ""
+"The number of sides of the cylinder, the higher this number the more detail "
+"there will be in the cylinder."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGCylinder.xml:30
+msgid ""
+"If [code]true[/code] the normals of the cylinder are set to give a smooth "
+"effect making the cylinder seem rounded. If [code]false[/code] the cylinder "
+"will have a flat shaded look."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGMesh.xml:4
+msgid "A CSG Mesh shape that uses a mesh resource."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGMesh.xml:7
+msgid ""
+"This CSG node allows you to use any mesh resource as a CSG shape, provided "
+"it is closed, does not self-intersect, does not contain internal faces and "
+"has no edges that connect to more then two faces."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGMesh.xml:15
+msgid "The [Material] used in drawing the CSG shape."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGMesh.xml:18
+msgid ""
+"The [Mesh] resource to use as a CSG shape.\n"
+"[b]Note:[/b] When using an [ArrayMesh], avoid meshes with vertex normals "
+"unless a flat shader is required. By default, CSGMesh will ignore the mesh's "
+"vertex normals and use a smooth shader calculated using the faces' normals. "
+"If a flat shader is required, ensure that all faces' vertex normals are "
+"parallel."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:4
+msgid "Extrudes a 2D polygon shape to create a 3D mesh."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:7
+msgid ""
+"An array of 2D points is extruded to quickly and easily create a variety of "
+"3D meshes."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:15
+msgid ""
+"When [member mode] is [constant MODE_DEPTH], the depth of the extrusion."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:18
+msgid ""
+"Material to use for the resulting mesh. The UV maps the top half of the "
+"material to the extruded shape (U along the the length of the extrusions and "
+"V around the outline of the [member polygon]), the bottom-left quarter to "
+"the front end face, and the bottom-right quarter to the back end face."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:21
+msgid "The [member mode] used to extrude the [member polygon]."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:24
+msgid ""
+"When [member mode] is [constant MODE_PATH], by default, the top half of the "
+"[member material] is stretched along the entire length of the extruded "
+"shape. If [code]false[/code] the top half of the material is repeated every "
+"step of the extrusion."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:27
+msgid ""
+"When [member mode] is [constant MODE_PATH], the path interval or ratio of "
+"path points to extrusions."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:30
+msgid ""
+"When [member mode] is [constant MODE_PATH], this will determine if the "
+"interval should be by distance ([constant PATH_INTERVAL_DISTANCE]) or "
+"subdivision fractions ([constant PATH_INTERVAL_SUBDIVIDE])."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:33
+msgid ""
+"When [member mode] is [constant MODE_PATH], if [code]true[/code] the ends of "
+"the path are joined, by adding an extrusion between the last and first "
+"points of the path."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:36
+msgid ""
+"When [member mode] is [constant MODE_PATH], if [code]true[/code] the "
+"[Transform] of the [CSGPolygon] is used as the starting point for the "
+"extrusions, not the [Transform] of the [member path_node]."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:39
+msgid ""
+"When [member mode] is [constant MODE_PATH], the location of the [Path] "
+"object used to extrude the [member polygon]."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:42
+msgid ""
+"When [member mode] is [constant MODE_PATH], the [enum PathRotation] method "
+"used to rotate the [member polygon] as it is extruded."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:45
+msgid ""
+"When [member mode] is [constant MODE_PATH], extrusions that are less than "
+"this angle, will be merged together to reduce polygon count."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:48
+msgid ""
+"When [member mode] is [constant MODE_PATH], this is the distance along the "
+"path, in meters, the texture coordinates will tile. When set to 0, texture "
+"coordinates will match geometry exactly with no tiling."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:51
+msgid "The point array that defines the 2D polygon that is extruded."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:54
+msgid "If [code]true[/code], applies smooth shading to the extrusions."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:57
+msgid ""
+"When [member mode] is [constant MODE_SPIN], the total number of degrees the "
+"[member polygon] is rotated when extruding."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:60
+msgid ""
+"When [member mode] is [constant MODE_SPIN], the number of extrusions made."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:65
+msgid "The [member polygon] shape is extruded along the negative Z axis."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:68
+msgid ""
+"The [member polygon] shape is extruded by rotating it around the Y axis."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:71
+msgid ""
+"The [member polygon] shape is extruded along the [Path] specified in [member "
+"path_node]."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:74
+msgid ""
+"The [member polygon] shape is not rotated.\n"
+"[b]Note:[/b] Requires the path's Z coordinates to continually decrease to "
+"ensure viable shapes."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:78
+msgid ""
+"The [member polygon] shape is rotated along the path, but it is not rotated "
+"around the path axis.\n"
+"[b]Note:[/b] Requires the path's Z coordinates to continually decrease to "
+"ensure viable shapes."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:82
+msgid ""
+"The [member polygon] shape follows the path and its rotations around the "
+"path axis."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:85
+msgid ""
+"When [member mode] is set to [constant MODE_PATH], [member path_interval] "
+"will determine the distance, in meters, each interval of the path will "
+"extrude."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:88
+msgid ""
+"When [member mode] is set to [constant MODE_PATH], [member path_interval] "
+"will subdivide the polygons along the path."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPrimitive.xml:4
+msgid "Base class for CSG primitives."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPrimitive.xml:7
+msgid ""
+"Parent class for various CSG primitives. It contains code and functionality "
+"that is common between them. It cannot be used directly. Instead use one of "
+"the various classes that inherit from it."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPrimitive.xml:15
+msgid "Invert the faces of the mesh."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGShape.xml:4
+msgid "The CSG base class."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGShape.xml:7
+msgid ""
+"This is the CSG base class that provides CSG operation support to the "
+"various CSG nodes in Godot."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGShape.xml:16
+#: modules/csg/doc_classes/CSGShape.xml:23 doc/classes/RayCast2D.xml:60
+#: doc/classes/SoftBody.xml:30 doc/classes/SoftBody.xml:37
+msgid "Returns an individual bit on the collision mask."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGShape.xml:29
+msgid ""
+"Returns an [Array] with two elements, the first is the [Transform] of this "
+"node and the second is the root [Mesh] of this node. Only works when this "
+"node is the root shape."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGShape.xml:35
+msgid ""
+"Returns [code]true[/code] if this is a root shape and is thus the object "
+"that is rendered."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGShape.xml:43 doc/classes/SoftBody.xml:66
+msgid ""
+"Sets individual bits on the layer mask. Use this if you only need to change "
+"one layer's value."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGShape.xml:51 doc/classes/SoftBody.xml:74
+msgid ""
+"Sets individual bits on the collision mask. Use this if you only need to "
+"change one layer's value."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGShape.xml:57
+msgid ""
+"Calculate tangents for the CSG shape which allows the use of normal maps. "
+"This is only applied on the root shape, this setting is ignored on any child."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGShape.xml:60
+msgid ""
+"The physics layers this area is in.\n"
+"Collidable objects can exist in any of 32 different layers. These layers "
+"work like a tagging system, and are not visual. A collidable can use these "
+"layers to select with which objects it can collide, using the collision_mask "
+"property.\n"
+"A contact is detected if object A is in any of the layers that object B "
+"scans, or object B is in any layer scanned by object A. See [url=https://"
+"docs.godotengine.org/en/3.4/tutorials/physics/physics_introduction."
+"html#collision-layers-and-masks]Collision layers and masks[/url] in the "
+"documentation for more information."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGShape.xml:65
+msgid ""
+"The physics layers this CSG shape scans for collisions. See [url=https://"
+"docs.godotengine.org/en/3.4/tutorials/physics/physics_introduction."
+"html#collision-layers-and-masks]Collision layers and masks[/url] in the "
+"documentation for more information."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGShape.xml:68
+msgid ""
+"The operation that is performed on this shape. This is ignored for the first "
+"CSG child node as the operation is between this node and the previous child "
+"of this nodes parent."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGShape.xml:71
+msgid ""
+"Snap makes the mesh snap to a given distance so that the faces of two meshes "
+"can be perfectly aligned. A lower value results in greater precision but may "
+"be harder to adjust."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGShape.xml:74
+msgid ""
+"Adds a collision shape to the physics engine for our CSG shape. This will "
+"always act like a static body. Note that the collision shape is still active "
+"even if the CSG shape itself is hidden."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGShape.xml:79
+msgid ""
+"Geometry of both primitives is merged, intersecting geometry is removed."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGShape.xml:82
+msgid "Only intersecting geometry remains, the rest is removed."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGShape.xml:85
+msgid ""
+"The second shape is subtracted from the first, leaving a dent with its shape."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGSphere.xml:4
+msgid "A CSG Sphere shape."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGSphere.xml:7
+msgid "This node allows you to create a sphere for use with the CSG system."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGSphere.xml:15
+msgid "The material used to render the sphere."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGSphere.xml:18
+msgid "Number of vertical slices for the sphere."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGSphere.xml:21
+msgid "Radius of the sphere."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGSphere.xml:24
+msgid "Number of horizontal slices for the sphere."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGSphere.xml:27
+msgid ""
+"If [code]true[/code] the normals of the sphere are set to give a smooth "
+"effect making the sphere seem rounded. If [code]false[/code] the sphere will "
+"have a flat shaded look."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGTorus.xml:4
+msgid "A CSG Torus shape."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGTorus.xml:7
+msgid "This node allows you to create a torus for use with the CSG system."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGTorus.xml:15
+msgid "The inner radius of the torus."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGTorus.xml:18
+msgid "The material used to render the torus."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGTorus.xml:21
+msgid "The outer radius of the torus."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGTorus.xml:24
+msgid "The number of edges each ring of the torus is constructed of."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGTorus.xml:27
+msgid "The number of slices the torus is constructed of."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGTorus.xml:30
+msgid ""
+"If [code]true[/code] the normals of the torus are set to give a smooth "
+"effect making the torus seem rounded. If [code]false[/code] the torus will "
+"have a flat shaded look."
+msgstr ""
+
+#: modules/mono/doc_classes/CSharpScript.xml:4
+msgid ""
+"A script implemented in the C# programming language (Mono-enabled builds "
+"only)."
+msgstr ""
+
+#: modules/mono/doc_classes/CSharpScript.xml:7
+msgid ""
+"This class represents a C# script. It is the C# equivalent of the [GDScript] "
+"class and is only available in Mono-enabled Godot builds.\n"
+"See also [GodotSharp]."
+msgstr ""
+
+#: modules/mono/doc_classes/CSharpScript.xml:11
+msgid ""
+"https://docs.godotengine.org/en/3.4/getting_started/scripting/c_sharp/index."
+"html"
+msgstr ""
+
+#: modules/mono/doc_classes/CSharpScript.xml:18
+#: modules/gdnative/doc_classes/PluginScript.xml:13
+msgid "Returns a new instance of the script."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:4
+msgid "A CubeMap is a 6-sided 3D texture."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:7
+msgid ""
+"A 6-sided 3D texture typically used for faking reflections. It can be used "
+"to make an object look as if it's reflecting its surroundings. This usually "
+"delivers much better performance than other reflection methods."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:15
+msgid "Returns the [CubeMap]'s height."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:22
+msgid ""
+"Returns an [Image] for a side of the [CubeMap] using one of the [enum Side] "
+"constants."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:28
+msgid "Returns the [CubeMap]'s width."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:36
+msgid ""
+"Sets an [Image] for a side of the [CubeMap] using one of the [enum Side] "
+"constants."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:42
+msgid ""
+"The render flags for the [CubeMap]. See the [enum Flags] constants for "
+"details."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:45
+msgid ""
+"The lossy storage quality of the [CubeMap] if the storage mode is set to "
+"[constant STORAGE_COMPRESS_LOSSY]."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:48
+msgid "The [CubeMap]'s storage mode. See [enum Storage] constants."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:53
+msgid "Store the [CubeMap] without any compression."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:56
+msgid "Store the [CubeMap] with strong compression that reduces image quality."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:59
+msgid ""
+"Store the [CubeMap] with moderate compression that doesn't reduce image "
+"quality."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:62
+msgid "Identifier for the left face of the [CubeMap]."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:65
+msgid "Identifier for the right face of the [CubeMap]."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:68
+msgid "Identifier for the bottom face of the [CubeMap]."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:71
+msgid "Identifier for the top face of the [CubeMap]."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:74
+msgid "Identifier for the front face of the [CubeMap]."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:77
+msgid "Identifier for the back face of the [CubeMap]."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:80
+msgid "Generate mipmaps, to enable smooth zooming out of the texture."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:83
+msgid "Repeat (instead of clamp to edge)."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:86
+msgid "Turn on magnifying filter, to enable smooth zooming in of the texture."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:89
+msgid "Default flags. Generate mipmaps, repeat, and filter are enabled."
+msgstr ""
+
+#: doc/classes/CubeMesh.xml:4
+msgid "Generate an axis-aligned cuboid [PrimitiveMesh]."
+msgstr ""
+
+#: doc/classes/CubeMesh.xml:7
+msgid ""
+"Generate an axis-aligned cuboid [PrimitiveMesh].\n"
+"The cube's UV layout is arranged in a 3×2 layout that allows texturing each "
+"face individually. To apply the same texture on all faces, change the "
+"material's UV property to [code]Vector3(3, 2, 1)[/code].\n"
+"[b]Note:[/b] When using a large textured [CubeMesh] (e.g. as a floor), you "
+"may stumble upon UV jittering issues depending on the camera angle. To solve "
+"this, increase [member subdivide_depth], [member subdivide_height] and "
+"[member subdivide_width] until you no longer notice UV jittering."
+msgstr ""
+
+#: doc/classes/CubeMesh.xml:17
+msgid "Size of the cuboid mesh."
+msgstr ""
+
+#: doc/classes/CubeMesh.xml:20
+msgid "Number of extra edge loops inserted along the Z axis."
+msgstr ""
+
+#: doc/classes/CubeMesh.xml:23
+msgid "Number of extra edge loops inserted along the Y axis."
+msgstr ""
+
+#: doc/classes/CubeMesh.xml:26
+msgid "Number of extra edge loops inserted along the X axis."
+msgstr ""
+
+#: doc/classes/CullInstance.xml:4
+msgid "Parent of all nodes that can be culled by the Portal system."
+msgstr ""
+
+#: doc/classes/CullInstance.xml:7
+msgid ""
+"Provides common functionality to nodes that can be culled by the [Portal] "
+"system.\n"
+"[code]Static[/code] and [code]Dynamic[/code] objects are the most "
+"efficiently managed objects in the system, but there are some caveats. They "
+"are expected to be present initially when [Room]s are converted using the "
+"[RoomManager] [code]rooms_convert[/code] function, and their lifetime should "
+"be the same as the game level (i.e. present until you call "
+"[code]rooms_clear[/code] on the [RoomManager]. Although you shouldn't "
+"create / delete these objects during gameplay, you can manage their "
+"visibility with the standard [code]hide[/code] and [code]show[/code] "
+"commands.\n"
+"[code]Roaming[/code] objects on the other hand, require extra processing to "
+"keep track of which [Room] they are within. This enables them to be culled "
+"effectively, wherever they are.\n"
+"[code]Global[/code] objects are not culled by the portal system, and use "
+"view frustum culling only.\n"
+"Objects that are not [code]Static[/code] or [code]Dynamic[/code] can be "
+"freely created and deleted during the lifetime of the game level."
+msgstr ""
+
+#: doc/classes/CullInstance.xml:19
+msgid ""
+"When set to [code]0[/code], [CullInstance]s will be autoplaced in the [Room] "
+"with the highest priority.\n"
+"When set to a value other than [code]0[/code], the system will attempt to "
+"autoplace in a [Room] with the [code]autoplace_priority[/code], if it is "
+"present.\n"
+"This can be used to control autoplacement of building exteriors in an outer "
+"[RoomGroup]."
+msgstr ""
+
+#: doc/classes/CullInstance.xml:24
+msgid ""
+"When a manual bound has not been explicitly specified for a [Room], the "
+"convex hull bound will be estimated from the geometry of the objects within "
+"the room. This setting determines whether the geometry of an object is "
+"included in this estimate of the room bound.\n"
+"[b]Note:[/b] This setting is only relevant when the object is set to "
+"[code]PORTAL_MODE_STATIC[/code] or [code]PORTAL_MODE_DYNAMIC[/code], and for "
+"[Portal]s."
+msgstr ""
+
+#: doc/classes/CullInstance.xml:28
+msgid ""
+"When using [Room]s and [Portal]s, this specifies how the [CullInstance] is "
+"processed in the system."
+msgstr ""
+
+#: doc/classes/CullInstance.xml:33
+msgid ""
+"Use for instances within [Room]s that will [b]not move[/b] - e.g. walls, "
+"floors.\n"
+"[b]Note:[/b] If you attempt to delete a [code]PORTAL_MODE_STATIC[/code] "
+"instance while the room graph is loaded (converted), it will unload the room "
+"graph and deactivate portal culling. This is because the [b]room graph[/b] "
+"data has been invalidated. You will need to reconvert the rooms using the "
+"[RoomManager] to activate the system again."
+msgstr ""
+
+#: doc/classes/CullInstance.xml:37
+msgid ""
+"Use for instances within rooms that will move but [b]not change room[/b] - e."
+"g. moving platforms.\n"
+"[b]Note:[/b] If you attempt to delete a [code]PORTAL_MODE_DYNAMIC[/code] "
+"instance while the room graph is loaded (converted), it will unload the room "
+"graph and deactivate portal culling. This is because the [b]room graph[/b] "
+"data has been invalidated. You will need to reconvert the rooms using the "
+"[RoomManager] to activate the system again."
+msgstr ""
+
+#: doc/classes/CullInstance.xml:41
+msgid "Use for instances that will move [b]between[/b] [Room]s - e.g. players."
+msgstr ""
+
+#: doc/classes/CullInstance.xml:44
+msgid ""
+"Use for instances that will be frustum culled only - e.g. first person "
+"weapon, debug."
+msgstr ""
+
+#: doc/classes/CullInstance.xml:47
+msgid ""
+"Use for instances that will not be shown at all - e.g. [b]manual room "
+"bounds[/b] (specified by prefix [i]'Bound_'[/i])."
+msgstr ""
+
+#: doc/classes/Curve.xml:4
+msgid "A mathematic curve."
+msgstr ""
+
+#: doc/classes/Curve.xml:7
+msgid ""
+"A curve that can be saved and re-used for other objects. By default, it "
+"ranges between [code]0[/code] and [code]1[/code] on the Y axis and positions "
+"points relative to the [code]0.5[/code] Y position."
+msgstr ""
+
+#: doc/classes/Curve.xml:20
+msgid ""
+"Adds a point to the curve. For each side, if the [code]*_mode[/code] is "
+"[constant TANGENT_LINEAR], the [code]*_tangent[/code] angle (in degrees) "
+"uses the slope of the curve halfway to the adjacent point. Allows custom "
+"assignments to the [code]*_tangent[/code] angle if [code]*_mode[/code] is "
+"set to [constant TANGENT_FREE]."
+msgstr ""
+
+#: doc/classes/Curve.xml:26
+msgid "Recomputes the baked cache of points for the curve."
+msgstr ""
+
+#: doc/classes/Curve.xml:32
+msgid ""
+"Removes points that are closer than [code]CMP_EPSILON[/code] (0.00001) units "
+"to their neighbor on the curve."
+msgstr ""
+
+#: doc/classes/Curve.xml:38 doc/classes/Curve2D.xml:27
+#: doc/classes/Curve3D.xml:27
+msgid "Removes all points from the curve."
+msgstr ""
+
+#: doc/classes/Curve.xml:44 doc/classes/Curve2D.xml:61
+#: doc/classes/Curve3D.xml:74
+msgid "Returns the number of points describing the curve."
+msgstr ""
+
+#: doc/classes/Curve.xml:51
+msgid ""
+"Returns the left [enum TangentMode] for the point at [code]index[/code]."
+msgstr ""
+
+#: doc/classes/Curve.xml:58
+msgid ""
+"Returns the left tangent angle (in degrees) for the point at [code]index[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Curve.xml:65
+msgid "Returns the curve coordinates for the point at [code]index[/code]."
+msgstr ""
+
+#: doc/classes/Curve.xml:72
+msgid ""
+"Returns the right [enum TangentMode] for the point at [code]index[/code]."
+msgstr ""
+
+#: doc/classes/Curve.xml:79
+msgid ""
+"Returns the right tangent angle (in degrees) for the point at [code]index[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Curve.xml:86
+msgid ""
+"Returns the Y value for the point that would exist at the X position "
+"[code]offset[/code] along the curve."
+msgstr ""
+
+#: doc/classes/Curve.xml:93
+msgid ""
+"Returns the Y value for the point that would exist at the X position "
+"[code]offset[/code] along the curve using the baked cache. Bakes the curve's "
+"points if not already baked."
+msgstr ""
+
+#: doc/classes/Curve.xml:100
+msgid "Removes the point at [code]index[/code] from the curve."
+msgstr ""
+
+#: doc/classes/Curve.xml:108
+msgid ""
+"Sets the left [enum TangentMode] for the point at [code]index[/code] to "
+"[code]mode[/code]."
+msgstr ""
+
+#: doc/classes/Curve.xml:116
+msgid ""
+"Sets the left tangent angle for the point at [code]index[/code] to "
+"[code]tangent[/code]."
+msgstr ""
+
+#: doc/classes/Curve.xml:124
+msgid "Sets the offset from [code]0.5[/code]."
+msgstr ""
+
+#: doc/classes/Curve.xml:132
+msgid ""
+"Sets the right [enum TangentMode] for the point at [code]index[/code] to "
+"[code]mode[/code]."
+msgstr ""
+
+#: doc/classes/Curve.xml:140
+msgid ""
+"Sets the right tangent angle for the point at [code]index[/code] to "
+"[code]tangent[/code]."
+msgstr ""
+
+#: doc/classes/Curve.xml:148
+msgid ""
+"Assigns the vertical position [code]y[/code] to the point at [code]index[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Curve.xml:154
+msgid "The number of points to include in the baked (i.e. cached) curve data."
+msgstr ""
+
+#: doc/classes/Curve.xml:157
+msgid "The maximum value the curve can reach."
+msgstr ""
+
+#: doc/classes/Curve.xml:160
+msgid "The minimum value the curve can reach."
+msgstr ""
+
+#: doc/classes/Curve.xml:166
+msgid "Emitted when [member max_value] or [member min_value] is changed."
+msgstr ""
+
+#: doc/classes/Curve.xml:172
+msgid "The tangent on this side of the point is user-defined."
+msgstr ""
+
+#: doc/classes/Curve.xml:175
+msgid ""
+"The curve calculates the tangent on this side of the point as the slope "
+"halfway towards the adjacent point."
+msgstr ""
+
+#: doc/classes/Curve.xml:178
+msgid "The total number of available tangent modes."
+msgstr ""
+
+#: doc/classes/Curve2D.xml:4
+msgid "Describes a Bézier curve in 2D space."
+msgstr ""
+
+#: doc/classes/Curve2D.xml:7
+msgid ""
+"This class describes a Bézier curve in 2D space. It is mainly used to give a "
+"shape to a [Path2D], but can be manually sampled for other purposes.\n"
+"It keeps a cache of precalculated points along the curve, to speed up "
+"further calculations."
+msgstr ""
+
+#: doc/classes/Curve2D.xml:20 doc/classes/Curve3D.xml:20
+msgid ""
+"Adds a point to a curve at [code]position[/code], with control points "
+"[code]in[/code] and [code]out[/code].\n"
+"If [code]at_position[/code] is given, the point is inserted before the point "
+"number [code]at_position[/code], moving that point (and every point after) "
+"after the inserted point. If [code]at_position[/code] is not given, or is an "
+"illegal value ([code]at_position <0[/code] or [code]at_position >= [method "
+"get_point_count][/code]), the point will be appended at the end of the point "
+"list."
+msgstr ""
+
+#: doc/classes/Curve2D.xml:33 doc/classes/Curve3D.xml:33
+msgid ""
+"Returns the total length of the curve, based on the cached points. Given "
+"enough density (see [member bake_interval]), it should be approximate enough."
+msgstr ""
+
+#: doc/classes/Curve2D.xml:39
+msgid "Returns the cache of points as a [PoolVector2Array]."
+msgstr ""
+
+#: doc/classes/Curve2D.xml:46
+msgid ""
+"Returns the closest offset to [code]to_point[/code]. This offset is meant to "
+"be used in [method interpolate_baked].\n"
+"[code]to_point[/code] must be in this curve's local space."
+msgstr ""
+
+#: doc/classes/Curve2D.xml:54 doc/classes/Curve3D.xml:67
+msgid ""
+"Returns the closest baked point (in curve's local space) to [code]to_point[/"
+"code].\n"
+"[code]to_point[/code] must be in this curve's local space."
+msgstr ""
+
+#: doc/classes/Curve2D.xml:68
+msgid ""
+"Returns the position of the control point leading to the vertex [code]idx[/"
+"code]. The returned position is relative to the vertex [code]idx[/code]. If "
+"the index is out of bounds, the function sends an error to the console, and "
+"returns [code](0, 0)[/code]."
+msgstr ""
+
+#: doc/classes/Curve2D.xml:75
+msgid ""
+"Returns the position of the control point leading out of the vertex "
+"[code]idx[/code]. The returned position is relative to the vertex [code]idx[/"
+"code]. If the index is out of bounds, the function sends an error to the "
+"console, and returns [code](0, 0)[/code]."
+msgstr ""
+
+#: doc/classes/Curve2D.xml:82
+msgid ""
+"Returns the position of the vertex [code]idx[/code]. If the index is out of "
+"bounds, the function sends an error to the console, and returns [code](0, 0)"
+"[/code]."
+msgstr ""
+
+#: doc/classes/Curve2D.xml:90
+msgid ""
+"Returns the position between the vertex [code]idx[/code] and the vertex "
+"[code]idx + 1[/code], where [code]t[/code] controls if the point is the "
+"first vertex ([code]t = 0.0[/code]), the last vertex ([code]t = 1.0[/code]), "
+"or in between. Values of [code]t[/code] outside the range ([code]0.0 >= t "
+"<=1[/code]) give strange, but predictable results.\n"
+"If [code]idx[/code] is out of bounds it is truncated to the first or last "
+"vertex, and [code]t[/code] is ignored. If the curve has no points, the "
+"function sends an error to the console, and returns [code](0, 0)[/code]."
+msgstr ""
+
+#: doc/classes/Curve2D.xml:99
+msgid ""
+"Returns a point within the curve at position [code]offset[/code], where "
+"[code]offset[/code] is measured as a pixel distance along the curve.\n"
+"To do that, it finds the two cached points where the [code]offset[/code] "
+"lies between, then interpolates the values. This interpolation is cubic if "
+"[code]cubic[/code] is set to [code]true[/code], or linear if set to "
+"[code]false[/code].\n"
+"Cubic interpolation tends to follow the curves better, but linear is faster "
+"(and often, precise enough)."
+msgstr ""
+
+#: doc/classes/Curve2D.xml:108 doc/classes/Curve3D.xml:138
+msgid ""
+"Returns the position at the vertex [code]fofs[/code]. It calls [method "
+"interpolate] using the integer part of [code]fofs[/code] as [code]idx[/"
+"code], and its fractional part as [code]t[/code]."
+msgstr ""
+
+#: doc/classes/Curve2D.xml:115 doc/classes/Curve3D.xml:145
+msgid ""
+"Deletes the point [code]idx[/code] from the curve. Sends an error to the "
+"console if [code]idx[/code] is out of bounds."
+msgstr ""
+
+#: doc/classes/Curve2D.xml:123 doc/classes/Curve3D.xml:153
+msgid ""
+"Sets the position of the control point leading to the vertex [code]idx[/"
+"code]. If the index is out of bounds, the function sends an error to the "
+"console. The position is relative to the vertex."
+msgstr ""
+
+#: doc/classes/Curve2D.xml:131 doc/classes/Curve3D.xml:161
+msgid ""
+"Sets the position of the control point leading out of the vertex [code]idx[/"
+"code]. If the index is out of bounds, the function sends an error to the "
+"console. The position is relative to the vertex."
+msgstr ""
+
+#: doc/classes/Curve2D.xml:139 doc/classes/Curve3D.xml:169
+msgid ""
+"Sets the position for the vertex [code]idx[/code]. If the index is out of "
+"bounds, the function sends an error to the console."
+msgstr ""
+
+#: doc/classes/Curve2D.xml:147 doc/classes/Curve3D.xml:186
+msgid ""
+"Returns a list of points along the curve, with a curvature controlled point "
+"density. That is, the curvier parts will have more points than the "
+"straighter parts.\n"
+"This approximation makes straight segments between each point, then "
+"subdivides those segments until the resulting shape is similar enough.\n"
+"[code]max_stages[/code] controls how many subdivisions a curve segment may "
+"face before it is considered approximate enough. Each subdivision splits the "
+"segment in half, so the default 5 stages may mean up to 32 subdivisions per "
+"curve segment. Increase with care!\n"
+"[code]tolerance_degrees[/code] controls how many degrees the midpoint of a "
+"segment may deviate from the real curve, before the segment has to be "
+"subdivided."
+msgstr ""
+
+#: doc/classes/Curve2D.xml:156
+msgid ""
+"The distance in pixels between two adjacent cached points. Changing it "
+"forces the cache to be recomputed the next time the [method "
+"get_baked_points] or [method get_baked_length] function is called. The "
+"smaller the distance, the more points in the cache and the more memory it "
+"will consume, so use with care."
+msgstr ""
+
+#: doc/classes/Curve3D.xml:4
+msgid "Describes a Bézier curve in 3D space."
+msgstr ""
+
+#: doc/classes/Curve3D.xml:7
+msgid ""
+"This class describes a Bézier curve in 3D space. It is mainly used to give a "
+"shape to a [Path], but can be manually sampled for other purposes.\n"
+"It keeps a cache of precalculated points along the curve, to speed up "
+"further calculations."
+msgstr ""
+
+#: doc/classes/Curve3D.xml:39
+msgid "Returns the cache of points as a [PoolVector3Array]."
+msgstr ""
+
+#: doc/classes/Curve3D.xml:45
+msgid "Returns the cache of tilts as a [PoolRealArray]."
+msgstr ""
+
+#: doc/classes/Curve3D.xml:51
+msgid ""
+"Returns the cache of up vectors as a [PoolVector3Array].\n"
+"If [member up_vector_enabled] is [code]false[/code], the cache will be empty."
+msgstr ""
+
+#: doc/classes/Curve3D.xml:59
+msgid ""
+"Returns the closest offset to [code]to_point[/code]. This offset is meant to "
+"be used in [method interpolate_baked] or [method "
+"interpolate_baked_up_vector].\n"
+"[code]to_point[/code] must be in this curve's local space."
+msgstr ""
+
+#: doc/classes/Curve3D.xml:81
+msgid ""
+"Returns the position of the control point leading to the vertex [code]idx[/"
+"code]. The returned position is relative to the vertex [code]idx[/code]. If "
+"the index is out of bounds, the function sends an error to the console, and "
+"returns [code](0, 0, 0)[/code]."
+msgstr ""
+
+#: doc/classes/Curve3D.xml:88
+msgid ""
+"Returns the position of the control point leading out of the vertex "
+"[code]idx[/code]. The returned position is relative to the vertex [code]idx[/"
+"code]. If the index is out of bounds, the function sends an error to the "
+"console, and returns [code](0, 0, 0)[/code]."
+msgstr ""
+
+#: doc/classes/Curve3D.xml:95
+msgid ""
+"Returns the position of the vertex [code]idx[/code]. If the index is out of "
+"bounds, the function sends an error to the console, and returns [code](0, 0, "
+"0)[/code]."
+msgstr ""
+
+#: doc/classes/Curve3D.xml:102
+msgid ""
+"Returns the tilt angle in radians for the point [code]idx[/code]. If the "
+"index is out of bounds, the function sends an error to the console, and "
+"returns [code]0[/code]."
+msgstr ""
+
+#: doc/classes/Curve3D.xml:110
+msgid ""
+"Returns the position between the vertex [code]idx[/code] and the vertex "
+"[code]idx + 1[/code], where [code]t[/code] controls if the point is the "
+"first vertex ([code]t = 0.0[/code]), the last vertex ([code]t = 1.0[/code]), "
+"or in between. Values of [code]t[/code] outside the range ([code]0.0 >= t "
+"<=1[/code]) give strange, but predictable results.\n"
+"If [code]idx[/code] is out of bounds it is truncated to the first or last "
+"vertex, and [code]t[/code] is ignored. If the curve has no points, the "
+"function sends an error to the console, and returns [code](0, 0, 0)[/code]."
+msgstr ""
+
+#: doc/classes/Curve3D.xml:119
+msgid ""
+"Returns a point within the curve at position [code]offset[/code], where "
+"[code]offset[/code] is measured as a distance in 3D units along the curve.\n"
+"To do that, it finds the two cached points where the [code]offset[/code] "
+"lies between, then interpolates the values. This interpolation is cubic if "
+"[code]cubic[/code] is set to [code]true[/code], or linear if set to "
+"[code]false[/code].\n"
+"Cubic interpolation tends to follow the curves better, but linear is faster "
+"(and often, precise enough)."
+msgstr ""
+
+#: doc/classes/Curve3D.xml:129
+msgid ""
+"Returns an up vector within the curve at position [code]offset[/code], where "
+"[code]offset[/code] is measured as a distance in 3D units along the curve.\n"
+"To do that, it finds the two cached up vectors where the [code]offset[/code] "
+"lies between, then interpolates the values. If [code]apply_tilt[/code] is "
+"[code]true[/code], an interpolated tilt is applied to the interpolated up "
+"vector.\n"
+"If the curve has no up vectors, the function sends an error to the console, "
+"and returns [code](0, 1, 0)[/code]."
+msgstr ""
+
+#: doc/classes/Curve3D.xml:177
+msgid ""
+"Sets the tilt angle in radians for the point [code]idx[/code]. If the index "
+"is out of bounds, the function sends an error to the console.\n"
+"The tilt controls the rotation along the look-at axis an object traveling "
+"the path would have. In the case of a curve controlling a [PathFollow], this "
+"tilt is an offset over the natural tilt the [PathFollow] calculates."
+msgstr ""
+
+#: doc/classes/Curve3D.xml:195
+msgid ""
+"The distance in meters between two adjacent cached points. Changing it "
+"forces the cache to be recomputed the next time the [method "
+"get_baked_points] or [method get_baked_length] function is called. The "
+"smaller the distance, the more points in the cache and the more memory it "
+"will consume, so use with care."
+msgstr ""
+
+#: doc/classes/Curve3D.xml:198
+msgid ""
+"If [code]true[/code], the curve will bake up vectors used for orientation. "
+"This is used when [member PathFollow.rotation_mode] is set to [constant "
+"PathFollow.ROTATION_ORIENTED]. Changing it forces the cache to be recomputed."
+msgstr ""
+
+#: doc/classes/CurveTexture.xml:4
+msgid "A texture that shows a curve."
+msgstr ""
+
+#: doc/classes/CurveTexture.xml:7
+msgid ""
+"Renders a given [Curve] provided to it. Simplifies the task of drawing "
+"curves and/or saving them as image files."
+msgstr ""
+
+#: doc/classes/CurveTexture.xml:15
+msgid "The [code]curve[/code] rendered onto the texture."
+msgstr ""
+
+#: doc/classes/CurveTexture.xml:18
+msgid "The width of the texture."
+msgstr ""
+
+#: doc/classes/CylinderMesh.xml:4
+msgid "Class representing a cylindrical [PrimitiveMesh]."
+msgstr ""
+
+#: doc/classes/CylinderMesh.xml:7
+msgid ""
+"Class representing a cylindrical [PrimitiveMesh]. This class can be used to "
+"create cones by setting either the [member top_radius] or [member "
+"bottom_radius] properties to [code]0.0[/code]."
+msgstr ""
+
+#: doc/classes/CylinderMesh.xml:15
+msgid ""
+"Bottom radius of the cylinder. If set to [code]0.0[/code], the bottom faces "
+"will not be generated, resulting in a conic shape."
+msgstr ""
+
+#: doc/classes/CylinderMesh.xml:18
+msgid "Full height of the cylinder."
+msgstr ""
+
+#: doc/classes/CylinderMesh.xml:21
+msgid ""
+"Number of radial segments on the cylinder. Higher values result in a more "
+"detailed cylinder/cone at the cost of performance."
+msgstr ""
+
+#: doc/classes/CylinderMesh.xml:24
+msgid ""
+"Number of edge rings along the height of the cylinder. Changing [member "
+"rings] does not have any visual impact unless a shader or procedural mesh "
+"tool is used to alter the vertex data. Higher values result in more "
+"subdivisions, which can be used to create smoother-looking effects with "
+"shaders or procedural mesh tools (at the cost of performance). When not "
+"altering the vertex data using a shader or procedural mesh tool, [member "
+"rings] should be kept to its default value."
+msgstr ""
+
+#: doc/classes/CylinderMesh.xml:27
+msgid ""
+"Top radius of the cylinder. If set to [code]0.0[/code], the top faces will "
+"not be generated, resulting in a conic shape."
+msgstr ""
+
+#: doc/classes/CylinderShape.xml:4 doc/classes/CylinderShape.xml:7
+msgid "Cylinder shape for collisions."
+msgstr ""
+
+#: doc/classes/CylinderShape.xml:18
+msgid "The cylinder's height."
+msgstr ""
+
+#: doc/classes/CylinderShape.xml:21
+msgid "The cylinder's radius."
+msgstr ""
+
+#: doc/classes/DampedSpringJoint2D.xml:4
+msgid "Damped spring constraint for 2D physics."
+msgstr ""
+
+#: doc/classes/DampedSpringJoint2D.xml:7
+msgid ""
+"Damped spring constraint for 2D physics. This resembles a spring joint that "
+"always wants to go back to a given length."
+msgstr ""
+
+#: doc/classes/DampedSpringJoint2D.xml:15
+msgid ""
+"The spring joint's damping ratio. A value between [code]0[/code] and "
+"[code]1[/code]. When the two bodies move into different directions the "
+"system tries to align them to the spring axis again. A high [code]damping[/"
+"code] value forces the attached bodies to align faster."
+msgstr ""
+
+#: doc/classes/DampedSpringJoint2D.xml:18
+msgid ""
+"The spring joint's maximum length. The two attached bodies cannot stretch it "
+"past this value."
+msgstr ""
+
+#: doc/classes/DampedSpringJoint2D.xml:21
+msgid ""
+"When the bodies attached to the spring joint move they stretch or squash it. "
+"The joint always tries to resize towards this length."
+msgstr ""
+
+#: doc/classes/DampedSpringJoint2D.xml:24
+msgid ""
+"The higher the value, the less the bodies attached to the joint will deform "
+"it. The joint applies an opposing force to the bodies, the product of the "
+"stiffness multiplied by the size difference from its resting length."
+msgstr ""
+
+#: doc/classes/Dictionary.xml:4
+msgid "Dictionary type."
+msgstr ""
+
+#: doc/classes/Dictionary.xml:7
+msgid ""
+"Dictionary type. Associative container which contains values referenced by "
+"unique keys. Dictionaries are composed of pairs of keys (which must be "
+"unique) and values. Dictionaries will preserve the insertion order when "
+"adding elements, even though this may not be reflected when printing the "
+"dictionary. In other programming languages, this data structure is sometimes "
+"referred to as a hash map or associative array.\n"
+"You can define a dictionary by placing a comma-separated list of [code]key: "
+"value[/code] pairs in curly braces [code]{}[/code].\n"
+"Erasing elements while iterating over them [b]is not supported[/b] and will "
+"result in undefined behavior.\n"
+"[b]Note:[/b] Dictionaries are always passed by reference. To get a copy of a "
+"dictionary which can be modified independently of the original dictionary, "
+"use [method duplicate].\n"
+"Creating a dictionary:\n"
+"[codeblock]\n"
+"var my_dict = {} # Creates an empty dictionary.\n"
+"\n"
+"var dict_variable_key = \"Another key name\"\n"
+"var dict_variable_value = \"value2\"\n"
+"var another_dict = {\n"
+" \"Some key name\": \"value1\",\n"
+" dict_variable_key: dict_variable_value,\n"
+"}\n"
+"\n"
+"var points_dict = {\"White\": 50, \"Yellow\": 75, \"Orange\": 100}\n"
+"\n"
+"# Alternative Lua-style syntax.\n"
+"# Doesn't require quotes around keys, but only string constants can be used "
+"as key names.\n"
+"# Additionally, key names must start with a letter or an underscore.\n"
+"# Here, `some_key` is a string literal, not a variable!\n"
+"another_dict = {\n"
+" some_key = 42,\n"
+"}\n"
+"[/codeblock]\n"
+"You can access a dictionary's values by referencing the appropriate key. In "
+"the above example, [code]points_dict[\"White\"][/code] will return [code]50[/"
+"code]. You can also write [code]points_dict.White[/code], which is "
+"equivalent. However, you'll have to use the bracket syntax if the key you're "
+"accessing the dictionary with isn't a fixed string (such as a number or "
+"variable).\n"
+"[codeblock]\n"
+"export(string, \"White\", \"Yellow\", \"Orange\") var my_color\n"
+"var points_dict = {\"White\": 50, \"Yellow\": 75, \"Orange\": 100}\n"
+"func _ready():\n"
+" # We can't use dot syntax here as `my_color` is a variable.\n"
+" var points = points_dict[my_color]\n"
+"[/codeblock]\n"
+"In the above code, [code]points[/code] will be assigned the value that is "
+"paired with the appropriate color selected in [code]my_color[/code].\n"
+"Dictionaries can contain more complex data:\n"
+"[codeblock]\n"
+"my_dict = {\"First Array\": [1, 2, 3, 4]} # Assigns an Array to a String "
+"key.\n"
+"[/codeblock]\n"
+"To add a key to an existing dictionary, access it like an existing key and "
+"assign to it:\n"
+"[codeblock]\n"
+"var points_dict = {\"White\": 50, \"Yellow\": 75, \"Orange\": 100}\n"
+"points_dict[\"Blue\"] = 150 # Add \"Blue\" as a key and assign 150 as its "
+"value.\n"
+"[/codeblock]\n"
+"Finally, dictionaries can contain different types of keys and values in the "
+"same dictionary:\n"
+"[codeblock]\n"
+"# This is a valid dictionary.\n"
+"# To access the string \"Nested value\" below, use `my_dict.sub_dict."
+"sub_key` or `my_dict[\"sub_dict\"][\"sub_key\"]`.\n"
+"# Indexing styles can be mixed and matched depending on your needs.\n"
+"var my_dict = {\n"
+" \"String Key\": 5,\n"
+" 4: [1, 2, 3],\n"
+" 7: \"Hello\",\n"
+" \"sub_dict\": {\"sub_key\": \"Nested value\"},\n"
+"}\n"
+"[/codeblock]\n"
+"[b]Note:[/b] Unlike [Array]s, you can't compare dictionaries directly:\n"
+"[codeblock]\n"
+"array1 = [1, 2, 3]\n"
+"array2 = [1, 2, 3]\n"
+"\n"
+"func compare_arrays():\n"
+" print(array1 == array2) # Will print true.\n"
+"\n"
+"var dict1 = {\"a\": 1, \"b\": 2, \"c\": 3}\n"
+"var dict2 = {\"a\": 1, \"b\": 2, \"c\": 3}\n"
+"\n"
+"func compare_dictionaries():\n"
+" print(dict1 == dict2) # Will NOT print true.\n"
+"[/codeblock]\n"
+"You need to first calculate the dictionary's hash with [method hash] before "
+"you can compare them:\n"
+"[codeblock]\n"
+"var dict1 = {\"a\": 1, \"b\": 2, \"c\": 3}\n"
+"var dict2 = {\"a\": 1, \"b\": 2, \"c\": 3}\n"
+"\n"
+"func compare_dictionaries():\n"
+" print(dict1.hash() == dict2.hash()) # Will print true.\n"
+"[/codeblock]\n"
+"[b]Note:[/b] When declaring a dictionary with [code]const[/code], the "
+"dictionary itself can still be mutated by defining the values of individual "
+"keys. Using [code]const[/code] will only prevent assigning the constant with "
+"another value after it was initialized."
+msgstr ""
+
+#: doc/classes/Dictionary.xml:87
+msgid ""
+"https://docs.godotengine.org/en/3.4/getting_started/scripting/gdscript/"
+"gdscript_basics.html#dictionary"
+msgstr ""
+
+#: doc/classes/Dictionary.xml:94
+msgid "Clear the dictionary, removing all key/value pairs."
+msgstr ""
+
+#: doc/classes/Dictionary.xml:101
+msgid ""
+"Creates a copy of the dictionary, and returns it. The [code]deep[/code] "
+"parameter causes inner dictionaries and arrays to be copied recursively, but "
+"does not apply to objects."
+msgstr ""
+
+#: doc/classes/Dictionary.xml:107
+msgid "Returns [code]true[/code] if the dictionary is empty."
+msgstr ""
+
+#: doc/classes/Dictionary.xml:114
+msgid ""
+"Erase a dictionary key/value pair by key. Returns [code]true[/code] if the "
+"given key was present in the dictionary, [code]false[/code] otherwise.\n"
+"[b]Note:[/b] Don't erase elements while iterating over the dictionary. You "
+"can iterate over the [method keys] array instead."
+msgstr ""
+
+#: doc/classes/Dictionary.xml:123
+msgid ""
+"Returns the current value for the specified key in the [Dictionary]. If the "
+"key does not exist, the method returns the value of the optional default "
+"argument, or [code]null[/code] if it is omitted."
+msgstr ""
+
+#: doc/classes/Dictionary.xml:130
+msgid ""
+"Returns [code]true[/code] if the dictionary has a given key.\n"
+"[b]Note:[/b] This is equivalent to using the [code]in[/code] operator as "
+"follows:\n"
+"[codeblock]\n"
+"# Will evaluate to `true`.\n"
+"if \"godot\" in {\"godot\": \"engine\"}:\n"
+" pass\n"
+"[/codeblock]\n"
+"This method (like the [code]in[/code] operator) will evaluate to [code]true[/"
+"code] as long as the key exists, even if the associated value is [code]null[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Dictionary.xml:144
+msgid ""
+"Returns [code]true[/code] if the dictionary has all the keys in the given "
+"array."
+msgstr ""
+
+#: doc/classes/Dictionary.xml:150
+msgid ""
+"Returns a hashed integer value representing the dictionary contents. This "
+"can be used to compare dictionaries by value:\n"
+"[codeblock]\n"
+"var dict1 = {0: 10}\n"
+"var dict2 = {0: 10}\n"
+"# The line below prints `true`, whereas it would have printed `false` if "
+"both variables were compared directly.\n"
+"print(dict1.hash() == dict2.hash())\n"
+"[/codeblock]\n"
+"[b]Note:[/b] Dictionaries with the same keys/values but in a different order "
+"will have a different hash."
+msgstr ""
+
+#: doc/classes/Dictionary.xml:163
+msgid "Returns the list of keys in the [Dictionary]."
+msgstr ""
+
+#: doc/classes/Dictionary.xml:169
+msgid "Returns the number of keys in the dictionary."
+msgstr ""
+
+#: doc/classes/Dictionary.xml:175
+msgid "Returns the list of values in the [Dictionary]."
+msgstr ""
+
+#: doc/classes/DirectionalLight.xml:4
+msgid "Directional light from a distance, as from the Sun."
+msgstr ""
+
+#: doc/classes/DirectionalLight.xml:7
+msgid ""
+"A directional light is a type of [Light] node that models an infinite number "
+"of parallel rays covering the entire scene. It is used for lights with "
+"strong intensity that are located far away from the scene to model sunlight "
+"or moonlight. The worldspace location of the DirectionalLight transform "
+"(origin) is ignored. Only the basis is used to determine light direction."
+msgstr ""
+
+#: doc/classes/DirectionalLight.xml:10 doc/classes/Light.xml:10
+#: doc/classes/OmniLight.xml:11 doc/classes/SpotLight.xml:11
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/3d/lights_and_shadows.html"
+msgstr ""
+
+#: doc/classes/DirectionalLight.xml:16
+msgid ""
+"Amount of extra bias for shadow splits that are far away. If self-shadowing "
+"occurs only on the splits far away, increasing this value can fix them."
+msgstr ""
+
+#: doc/classes/DirectionalLight.xml:19
+msgid ""
+"If [code]true[/code], shadow detail is sacrificed in exchange for smoother "
+"transitions between splits."
+msgstr ""
+
+#: doc/classes/DirectionalLight.xml:22
+msgid ""
+"Optimizes shadow rendering for detail versus movement. See [enum "
+"ShadowDepthRange]."
+msgstr ""
+
+#: doc/classes/DirectionalLight.xml:25
+msgid "The maximum distance for shadow splits."
+msgstr ""
+
+#: doc/classes/DirectionalLight.xml:28
+msgid "The light's shadow rendering algorithm. See [enum ShadowMode]."
+msgstr ""
+
+#: doc/classes/DirectionalLight.xml:31
+msgid ""
+"Can be used to fix special cases of self shadowing when objects are "
+"perpendicular to the light."
+msgstr ""
+
+#: doc/classes/DirectionalLight.xml:34
+msgid ""
+"The distance from camera to shadow split 1. Relative to [member "
+"directional_shadow_max_distance]. Only used when [member "
+"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or "
+"[code]SHADOW_PARALLEL_4_SPLITS[/code]."
+msgstr ""
+
+#: doc/classes/DirectionalLight.xml:37
+msgid ""
+"The distance from shadow split 1 to split 2. Relative to [member "
+"directional_shadow_max_distance]. Only used when [member "
+"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or "
+"[code]SHADOW_PARALLEL_4_SPLITS[/code]."
+msgstr ""
+
+#: doc/classes/DirectionalLight.xml:40
+msgid ""
+"The distance from shadow split 2 to split 3. Relative to [member "
+"directional_shadow_max_distance]. Only used when [member "
+"directional_shadow_mode] is [code]SHADOW_PARALLEL_4_SPLITS[/code]."
+msgstr ""
+
+#: doc/classes/DirectionalLight.xml:46
+msgid ""
+"Renders the entire scene's shadow map from an orthogonal point of view. This "
+"is the fastest directional shadow mode. May result in blurrier shadows on "
+"close objects."
+msgstr ""
+
+#: doc/classes/DirectionalLight.xml:49
+msgid ""
+"Splits the view frustum in 2 areas, each with its own shadow map. This "
+"shadow mode is a compromise between [constant SHADOW_ORTHOGONAL] and "
+"[constant SHADOW_PARALLEL_4_SPLITS] in terms of performance."
+msgstr ""
+
+#: doc/classes/DirectionalLight.xml:52
+msgid ""
+"Splits the view frustum in 4 areas, each with its own shadow map. This is "
+"the slowest directional shadow mode."
+msgstr ""
+
+#: doc/classes/DirectionalLight.xml:55
+msgid ""
+"Keeps the shadow stable when the camera moves, at the cost of lower "
+"effective shadow resolution."
+msgstr ""
+
+#: doc/classes/DirectionalLight.xml:58
+msgid ""
+"Tries to achieve maximum shadow resolution. May result in saw effect on "
+"shadow edges. This mode typically works best in games where the camera will "
+"often move at high speeds, such as most racing games."
+msgstr ""
+
+#: doc/classes/Directory.xml:4
+msgid "Type used to handle the filesystem."
+msgstr ""
+
+#: doc/classes/Directory.xml:7
+msgid ""
+"Directory type. It is used to manage directories and their content (not "
+"restricted to the project folder).\n"
+"When creating a new [Directory], its default opened directory will be "
+"[code]res://[/code]. This may change in the future, so it is advised to "
+"always use [method open] to initialize your [Directory] where you want to "
+"operate, with explicit error checking.\n"
+"[b]Note:[/b] Many resources types are imported (e.g. textures or sound "
+"files), and their source asset will not be included in the exported game, as "
+"only the imported version is used. Use [ResourceLoader] to access imported "
+"resources.\n"
+"Here is an example on how to iterate through the files of a directory:\n"
+"[codeblock]\n"
+"func dir_contents(path):\n"
+" var dir = Directory.new()\n"
+" if dir.open(path) == OK:\n"
+" dir.list_dir_begin()\n"
+" var file_name = dir.get_next()\n"
+" while file_name != \"\":\n"
+" if dir.current_is_dir():\n"
+" print(\"Found directory: \" + file_name)\n"
+" else:\n"
+" print(\"Found file: \" + file_name)\n"
+" file_name = dir.get_next()\n"
+" else:\n"
+" print(\"An error occurred when trying to access the path.\")\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Directory.xml:28 doc/classes/File.xml:28
+msgid ""
+"https://docs.godotengine.org/en/3.4/getting_started/step_by_step/filesystem."
+"html"
+msgstr ""
+
+#: doc/classes/Directory.xml:35
+msgid ""
+"Changes the currently opened directory to the one passed as an argument. The "
+"argument can be relative to the current directory (e.g. [code]newdir[/code] "
+"or [code]../newdir[/code]), or an absolute path (e.g. [code]/tmp/newdir[/"
+"code] or [code]res://somedir/newdir[/code]).\n"
+"Returns one of the [enum Error] code constants ([code]OK[/code] on success)."
+msgstr ""
+
+#: doc/classes/Directory.xml:44
+msgid ""
+"Copies the [code]from[/code] file to the [code]to[/code] destination. Both "
+"arguments should be paths to files, either relative or absolute. If the "
+"destination file exists and is not access-protected, it will be "
+"overwritten.\n"
+"Returns one of the [enum Error] code constants ([code]OK[/code] on success)."
+msgstr ""
+
+#: doc/classes/Directory.xml:51
+msgid ""
+"Returns whether the current item processed with the last [method get_next] "
+"call is a directory ([code].[/code] and [code]..[/code] are considered "
+"directories)."
+msgstr ""
+
+#: doc/classes/Directory.xml:58
+msgid ""
+"Returns whether the target directory exists. The argument can be relative to "
+"the current directory, or an absolute path."
+msgstr ""
+
+#: doc/classes/Directory.xml:65
+msgid ""
+"Returns whether the target file exists. The argument can be relative to the "
+"current directory, or an absolute path."
+msgstr ""
+
+#: doc/classes/Directory.xml:71
+msgid ""
+"Returns the absolute path to the currently opened directory (e.g. "
+"[code]res://folder[/code] or [code]C:\\tmp\\folder[/code])."
+msgstr ""
+
+#: doc/classes/Directory.xml:77
+msgid ""
+"Returns the currently opened directory's drive index. See [method get_drive] "
+"to convert returned index to the name of the drive."
+msgstr ""
+
+#: doc/classes/Directory.xml:84
+msgid ""
+"On Windows, returns the name of the drive (partition) passed as an argument "
+"(e.g. [code]C:[/code]). On other platforms, or if the requested drive does "
+"not exist, the method returns an empty String."
+msgstr ""
+
+#: doc/classes/Directory.xml:90
+msgid ""
+"On Windows, returns the number of drives (partitions) mounted on the current "
+"filesystem. On other platforms, the method returns 0."
+msgstr ""
+
+#: doc/classes/Directory.xml:96
+msgid ""
+"Returns the next element (file or directory) in the current directory "
+"(including [code].[/code] and [code]..[/code], unless "
+"[code]skip_navigational[/code] was given to [method list_dir_begin]).\n"
+"The name of the file or directory is returned (and not its full path). Once "
+"the stream has been fully processed, the method returns an empty String and "
+"closes the stream automatically (i.e. [method list_dir_end] would not be "
+"mandatory in such a case)."
+msgstr ""
+
+#: doc/classes/Directory.xml:103
+msgid ""
+"On UNIX desktop systems, returns the available space on the current "
+"directory's disk. On other platforms, this information is not available and "
+"the method returns 0 or -1."
+msgstr ""
+
+#: doc/classes/Directory.xml:111
+msgid ""
+"Initializes the stream used to list all files and directories using the "
+"[method get_next] function, closing the currently opened stream if needed. "
+"Once the stream has been processed, it should typically be closed with "
+"[method list_dir_end].\n"
+"If [code]skip_navigational[/code] is [code]true[/code], [code].[/code] and "
+"[code]..[/code] are filtered out.\n"
+"If [code]skip_hidden[/code] is [code]true[/code], hidden files are filtered "
+"out."
+msgstr ""
+
+#: doc/classes/Directory.xml:119
+msgid ""
+"Closes the current stream opened with [method list_dir_begin] (whether it "
+"has been fully processed with [method get_next] does not matter)."
+msgstr ""
+
+#: doc/classes/Directory.xml:126
+msgid ""
+"Creates a directory. The argument can be relative to the current directory, "
+"or an absolute path. The target directory should be placed in an already "
+"existing directory (to create the full path recursively, see [method "
+"make_dir_recursive]).\n"
+"Returns one of the [enum Error] code constants ([code]OK[/code] on success)."
+msgstr ""
+
+#: doc/classes/Directory.xml:134
+msgid ""
+"Creates a target directory and all necessary intermediate directories in its "
+"path, by calling [method make_dir] recursively. The argument can be relative "
+"to the current directory, or an absolute path.\n"
+"Returns one of the [enum Error] code constants ([code]OK[/code] on success)."
+msgstr ""
+
+#: doc/classes/Directory.xml:142
+msgid ""
+"Opens an existing directory of the filesystem. The [code]path[/code] "
+"argument can be within the project tree ([code]res://folder[/code]), the "
+"user directory ([code]user://folder[/code]) or an absolute path of the user "
+"filesystem (e.g. [code]/tmp/folder[/code] or [code]C:\\tmp\\folder[/code]).\n"
+"Returns one of the [enum Error] code constants ([code]OK[/code] on success)."
+msgstr ""
+
+#: doc/classes/Directory.xml:150
+msgid ""
+"Deletes the target file or an empty directory. The argument can be relative "
+"to the current directory, or an absolute path. If the target directory is "
+"not empty, the operation will fail.\n"
+"Returns one of the [enum Error] code constants ([code]OK[/code] on success)."
+msgstr ""
+
+#: doc/classes/Directory.xml:159
+msgid ""
+"Renames (move) the [code]from[/code] file or directory to the [code]to[/"
+"code] destination. Both arguments should be paths to files or directories, "
+"either relative or absolute. If the destination file or directory exists and "
+"is not access-protected, it will be overwritten.\n"
+"Returns one of the [enum Error] code constants ([code]OK[/code] on success)."
+msgstr ""
+
+#: doc/classes/DTLSServer.xml:4
+msgid "Helper class to implement a DTLS server."
+msgstr ""
+
+#: doc/classes/DTLSServer.xml:7
+msgid ""
+"This class is used to store the state of a DTLS server. Upon [method setup] "
+"it converts connected [PacketPeerUDP] to [PacketPeerDTLS] accepting them via "
+"[method take_connection] as DTLS clients. Under the hood, this class is used "
+"to store the DTLS state and cookies of the server. The reason of why the "
+"state and cookies are needed is outside of the scope of this documentation.\n"
+"Below a small example of how to use it:\n"
+"[codeblock]\n"
+"# server.gd\n"
+"extends Node\n"
+"\n"
+"var dtls := DTLSServer.new()\n"
+"var server := UDPServer.new()\n"
+"var peers = []\n"
+"\n"
+"func _ready():\n"
+" server.listen(4242)\n"
+" var key = load(\"key.key\") # Your private key.\n"
+" var cert = load(\"cert.crt\") # Your X509 certificate.\n"
+" dtls.setup(key, cert)\n"
+"\n"
+"func _process(delta):\n"
+" while server.is_connection_available():\n"
+" var peer : PacketPeerUDP = server.take_connection()\n"
+" var dtls_peer : PacketPeerDTLS = dtls.take_connection(peer)\n"
+" if dtls_peer.get_status() != PacketPeerDTLS.STATUS_HANDSHAKING:\n"
+" continue # It is normal that 50% of the connections fails due to "
+"cookie exchange.\n"
+" print(\"Peer connected!\")\n"
+" peers.append(dtls_peer)\n"
+" for p in peers:\n"
+" p.poll() # Must poll to update the state.\n"
+" if p.get_status() == PacketPeerDTLS.STATUS_CONNECTED:\n"
+" while p.get_available_packet_count() > 0:\n"
+" print(\"Received message from client: %s\" % p.get_packet()."
+"get_string_from_utf8())\n"
+" p.put_packet(\"Hello DTLS client\".to_utf8())\n"
+"[/codeblock]\n"
+"[codeblock]\n"
+"# client.gd\n"
+"extends Node\n"
+"\n"
+"var dtls := PacketPeerDTLS.new()\n"
+"var udp := PacketPeerUDP.new()\n"
+"var connected = false\n"
+"\n"
+"func _ready():\n"
+" udp.connect_to_host(\"127.0.0.1\", 4242)\n"
+" dtls.connect_to_peer(udp, false) # Use true in production for "
+"certificate validation!\n"
+"\n"
+"func _process(delta):\n"
+" dtls.poll()\n"
+" if dtls.get_status() == PacketPeerDTLS.STATUS_CONNECTED:\n"
+" if !connected:\n"
+" # Try to contact server\n"
+" dtls.put_packet(\"The answer is... 42!\".to_utf8())\n"
+" while dtls.get_available_packet_count() > 0:\n"
+" print(\"Connected: %s\" % dtls.get_packet()."
+"get_string_from_utf8())\n"
+" connected = true\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/DTLSServer.xml:70
+msgid ""
+"Setup the DTLS server to use the given [code]private_key[/code] and provide "
+"the given [code]certificate[/code] to clients. You can pass the optional "
+"[code]chain[/code] parameter to provide additional CA chain information "
+"along with the certificate."
+msgstr ""
+
+#: doc/classes/DTLSServer.xml:77
+msgid ""
+"Try to initiate the DTLS handshake with the given [code]udp_peer[/code] "
+"which must be already connected (see [method PacketPeerUDP."
+"connect_to_host]).\n"
+"[b]Note:[/b] You must check that the state of the return PacketPeerUDP is "
+"[constant PacketPeerDTLS.STATUS_HANDSHAKING], as it is normal that 50% of "
+"the new connections will be invalid due to cookie exchange."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:4
+msgid "DynamicFont renders vector font files at runtime."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:7
+msgid ""
+"DynamicFont renders vector font files dynamically at runtime instead of "
+"using a prerendered texture atlas like [BitmapFont]. This trades the faster "
+"loading time of [BitmapFont]s for the ability to change font parameters like "
+"size and spacing during runtime. [DynamicFontData] is used for referencing "
+"the font file paths. DynamicFont also supports defining one or more fallback "
+"fonts, which will be used when displaying a character not supported by the "
+"main font.\n"
+"DynamicFont uses the [url=https://www.freetype.org/]FreeType[/url] library "
+"for rasterization. Supported formats are TrueType ([code].ttf[/code]), "
+"OpenType ([code].otf[/code]) and Web Open Font Format 1 ([code].woff[/"
+"code]). Web Open Font Format 2 ([code].woff2[/code]) is [i]not[/i] "
+"supported.\n"
+"[codeblock]\n"
+"var dynamic_font = DynamicFont.new()\n"
+"dynamic_font.font_data = load(\"res://BarlowCondensed-Bold.ttf\")\n"
+"dynamic_font.size = 64\n"
+"$\"Label\".set(\"custom_fonts/font\", dynamic_font)\n"
+"[/codeblock]\n"
+"[b]Note:[/b] DynamicFont doesn't support features such as kerning, right-to-"
+"left typesetting, ligatures, text shaping, variable fonts and optional font "
+"features yet. If you wish to \"bake\" an optional font feature into a TTF "
+"font file, you can use [url=https://fontforge.org/]FontForge[/url] to do so. "
+"In FontForge, use [b]File > Generate Fonts[/b], click [b]Options[/b], choose "
+"the desired features then generate the font."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:25
+msgid "Adds a fallback font."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:31
+msgid ""
+"Returns a string containing all the characters available in the main and all "
+"the fallback fonts.\n"
+"If a given character is included in more than one font, it appears only once "
+"in the returned string."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:39
+msgid "Returns the fallback font at index [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:45
+msgid "Returns the number of fallback fonts."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:52
+msgid ""
+"Returns the spacing for the given [code]type[/code] (see [enum SpacingType])."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:59
+msgid "Removes the fallback font at index [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:67
+msgid "Sets the fallback font at index [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:75
+msgid ""
+"Sets the spacing for [code]type[/code] (see [enum SpacingType]) to "
+"[code]value[/code] in pixels (not relative to the font size)."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:81
+msgid "Extra spacing at the bottom in pixels."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:84
+msgid ""
+"Extra spacing for each character in pixels.\n"
+"This can be a negative number to make the distance between characters "
+"smaller."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:88
+msgid ""
+"Extra spacing for the space character (in addition to [member "
+"extra_spacing_char]) in pixels.\n"
+"This can be a negative number to make the distance between words smaller."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:92
+msgid "Extra spacing at the top in pixels."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:95
+msgid "The font data."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:98
+msgid ""
+"The font outline's color.\n"
+"[b]Note:[/b] It's recommended to leave this at the default value so that you "
+"can adjust it in individual controls. For example, if the outline is made "
+"black here, it won't be possible to change its color using a Label's font "
+"outline modulate theme item."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:102
+msgid "The font outline's thickness in pixels (not relative to the font size)."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:105
+msgid "The font size in pixels."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:108
+msgid ""
+"If [code]true[/code], filtering is used. This makes the font blurry instead "
+"of pixelated when scaling it if font oversampling is disabled or "
+"ineffective. It's recommended to enable this when using the font in a "
+"control whose size changes over time, unless a pixel art aesthetic is "
+"desired."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:111
+msgid ""
+"If [code]true[/code], mipmapping is used. This improves the font's "
+"appearance when downscaling it if font oversampling is disabled or "
+"ineffective."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:116
+msgid "Spacing at the top."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:119
+msgid "Spacing at the bottom."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:122
+msgid "Spacing for each character."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:125
+msgid "Spacing for the space character."
+msgstr ""
+
+#: doc/classes/DynamicFontData.xml:4
+msgid "Used with [DynamicFont] to describe the location of a font file."
+msgstr ""
+
+#: doc/classes/DynamicFontData.xml:7
+msgid ""
+"Used with [DynamicFont] to describe the location of a vector font file for "
+"dynamic rendering at runtime."
+msgstr ""
+
+#: doc/classes/DynamicFontData.xml:16
+msgid ""
+"If [code]true[/code], the font is rendered with anti-aliasing. This property "
+"applies both to the main font and its outline (if it has one)."
+msgstr ""
+
+#: doc/classes/DynamicFontData.xml:19
+msgid "The path to the vector font file."
+msgstr ""
+
+#: doc/classes/DynamicFontData.xml:22
+msgid "The font hinting mode used by FreeType. See [enum Hinting] for options."
+msgstr ""
+
+#: doc/classes/DynamicFontData.xml:27
+msgid "Disables font hinting (smoother but less crisp)."
+msgstr ""
+
+#: doc/classes/DynamicFontData.xml:30
+msgid "Use the light font hinting mode."
+msgstr ""
+
+#: doc/classes/DynamicFontData.xml:33
+msgid "Use the default font hinting mode (crisper but less smooth)."
+msgstr ""
+
+#: doc/classes/EditorExportPlugin.xml:4
+msgid "A script that is executed when exporting the project."
+msgstr ""
+
+#: doc/classes/EditorExportPlugin.xml:7
+msgid ""
+"Editor export plugins are automatically activated whenever the user exports "
+"the project. Their most common use is to determine what files are being "
+"included in the exported project. For each plugin, [method _export_begin] is "
+"called at the beginning of the export process and then [method _export_file] "
+"is called for each exported file."
+msgstr ""
+
+#: doc/classes/EditorExportPlugin.xml:19
+msgid ""
+"Virtual method to be overridden by the user. It is called when the export "
+"starts and provides all information about the export. [code]features[/code] "
+"is the list of features for the export, [code]is_debug[/code] is [code]true[/"
+"code] for debug builds, [code]path[/code] is the target path for the "
+"exported project. [code]flags[/code] is only used when running a runnable "
+"profile, e.g. when using native run on Android."
+msgstr ""
+
+#: doc/classes/EditorExportPlugin.xml:25
+msgid ""
+"Virtual method to be overridden by the user. Called when the export is "
+"finished."
+msgstr ""
+
+#: doc/classes/EditorExportPlugin.xml:34
+msgid ""
+"Virtual method to be overridden by the user. Called for each exported file, "
+"providing arguments that can be used to identify the file. [code]path[/code] "
+"is the path of the file, [code]type[/code] is the [Resource] represented by "
+"the file (e.g. [PackedScene]) and [code]features[/code] is the list of "
+"features for the export.\n"
+"Calling [method skip] inside this callback will make the file not included "
+"in the export."
+msgstr ""
+
+#: doc/classes/EditorExportPlugin.xml:44
+msgid ""
+"Adds a custom file to be exported. [code]path[/code] is the virtual path "
+"that can be used to load the file, [code]file[/code] is the binary data of "
+"the file. If [code]remap[/code] is [code]true[/code], file will not be "
+"exported, but instead remapped to the given [code]path[/code]."
+msgstr ""
+
+#: doc/classes/EditorExportPlugin.xml:51
+msgid ""
+"Adds an iOS bundle file from the given [code]path[/code] to the exported "
+"project."
+msgstr ""
+
+#: doc/classes/EditorExportPlugin.xml:58
+msgid ""
+"Adds a C++ code to the iOS export. The final code is created from the code "
+"appended by each active export plugin."
+msgstr ""
+
+#: doc/classes/EditorExportPlugin.xml:65
+msgid ""
+"Adds a dynamic library (*.dylib, *.framework) to Linking Phase in iOS's "
+"Xcode project and embeds it into resulting binary.\n"
+"[b]Note:[/b] For static libraries (*.a) works in same way as [method "
+"add_ios_framework].\n"
+"This method should not be used for System libraries as they are already "
+"present on the device."
+msgstr ""
+
+#: doc/classes/EditorExportPlugin.xml:74
+msgid ""
+"Adds a static library (*.a) or dynamic library (*.dylib, *.framework) to "
+"Linking Phase in iOS's Xcode project."
+msgstr ""
+
+#: doc/classes/EditorExportPlugin.xml:81
+msgid "Adds linker flags for the iOS export."
+msgstr ""
+
+#: doc/classes/EditorExportPlugin.xml:88
+msgid "Adds content for iOS Property List files."
+msgstr ""
+
+#: doc/classes/EditorExportPlugin.xml:95
+msgid "Adds a static lib from the given [code]path[/code] to the iOS project."
+msgstr ""
+
+#: doc/classes/EditorExportPlugin.xml:103
+msgid ""
+"Adds a shared object with the given [code]tags[/code] and destination "
+"[code]path[/code]."
+msgstr ""
+
+#: doc/classes/EditorExportPlugin.xml:109
+msgid ""
+"To be called inside [method _export_file]. Skips the current file, so it's "
+"not included in the export."
+msgstr ""
+
+#: doc/classes/EditorFeatureProfile.xml:4
+msgid ""
+"An editor feature profile which can be used to disable specific features."
+msgstr ""
+
+#: doc/classes/EditorFeatureProfile.xml:7
+msgid ""
+"An editor feature profile can be used to disable specific features of the "
+"Godot editor. When disabled, the features won't appear in the editor, which "
+"makes the editor less cluttered. This is useful in education settings to "
+"reduce confusion or when working in a team. For example, artists and level "
+"designers could use a feature profile that disables the script editor to "
+"avoid accidentally making changes to files they aren't supposed to edit.\n"
+"To manage editor feature profiles visually, use [b]Editor > Manage Feature "
+"Profiles...[/b] at the top of the editor window."
+msgstr ""
+
+#: doc/classes/EditorFeatureProfile.xml:17
+msgid "Returns the specified [code]feature[/code]'s human-readable name."
+msgstr ""
+
+#: doc/classes/EditorFeatureProfile.xml:24
+msgid ""
+"Returns [code]true[/code] if the class specified by [code]class_name[/code] "
+"is disabled. When disabled, the class won't appear in the Create New Node "
+"dialog."
+msgstr ""
+
+#: doc/classes/EditorFeatureProfile.xml:31
+msgid ""
+"Returns [code]true[/code] if editing for the class specified by "
+"[code]class_name[/code] is disabled. When disabled, the class will still "
+"appear in the Create New Node dialog but the inspector will be read-only "
+"when selecting a node that extends the class."
+msgstr ""
+
+#: doc/classes/EditorFeatureProfile.xml:39
+msgid ""
+"Returns [code]true[/code] if [code]property[/code] is disabled in the class "
+"specified by [code]class_name[/code]. When a property is disabled, it won't "
+"appear in the inspector when selecting a node that extends the class "
+"specified by [code]class_name[/code]."
+msgstr ""
+
+#: doc/classes/EditorFeatureProfile.xml:46
+msgid ""
+"Returns [code]true[/code] if the [code]feature[/code] is disabled. When a "
+"feature is disabled, it will disappear from the editor entirely."
+msgstr ""
+
+#: doc/classes/EditorFeatureProfile.xml:53
+msgid ""
+"Loads an editor feature profile from a file. The file must follow the JSON "
+"format obtained by using the feature profile manager's [b]Export[/b] button "
+"or the [method save_to_file] method."
+msgstr ""
+
+#: doc/classes/EditorFeatureProfile.xml:60
+msgid ""
+"Saves the editor feature profile to a file in JSON format. It can then be "
+"imported using the feature profile manager's [b]Import[/b] button or the "
+"[method load_from_file] button."
+msgstr ""
+
+#: doc/classes/EditorFeatureProfile.xml:68
+msgid ""
+"If [code]disable[/code] is [code]true[/code], disables the class specified "
+"by [code]class_name[/code]. When disabled, the class won't appear in the "
+"Create New Node dialog."
+msgstr ""
+
+#: doc/classes/EditorFeatureProfile.xml:76
+msgid ""
+"If [code]disable[/code] is [code]true[/code], disables editing for the class "
+"specified by [code]class_name[/code]. When disabled, the class will still "
+"appear in the Create New Node dialog but the inspector will be read-only "
+"when selecting a node that extends the class."
+msgstr ""
+
+#: doc/classes/EditorFeatureProfile.xml:85
+msgid ""
+"If [code]disable[/code] is [code]true[/code], disables editing for "
+"[code]property[/code] in the class specified by [code]class_name[/code]. "
+"When a property is disabled, it won't appear in the inspector when selecting "
+"a node that extends the class specified by [code]class_name[/code]."
+msgstr ""
+
+#: doc/classes/EditorFeatureProfile.xml:93
+msgid ""
+"If [code]disable[/code] is [code]true[/code], disables the editor feature "
+"specified in [code]feature[/code]. When a feature is disabled, it will "
+"disappear from the editor entirely."
+msgstr ""
+
+#: doc/classes/EditorFeatureProfile.xml:99
+msgid ""
+"The 3D editor. If this feature is disabled, the 3D editor won't display but "
+"3D nodes will still display in the Create New Node dialog."
+msgstr ""
+
+#: doc/classes/EditorFeatureProfile.xml:102
+msgid ""
+"The Script tab, which contains the script editor and class reference "
+"browser. If this feature is disabled, the Script tab won't display."
+msgstr ""
+
+#: doc/classes/EditorFeatureProfile.xml:105
+msgid ""
+"The AssetLib tab. If this feature is disabled, the AssetLib tab won't "
+"display."
+msgstr ""
+
+#: doc/classes/EditorFeatureProfile.xml:108
+msgid ""
+"Scene tree editing. If this feature is disabled, the Scene tree dock will "
+"still be visible but will be read-only."
+msgstr ""
+
+#: doc/classes/EditorFeatureProfile.xml:111
+msgid ""
+"The Node dock. If this feature is disabled, signals and groups won't be "
+"visible and modifiable from the editor."
+msgstr ""
+
+#: doc/classes/EditorFeatureProfile.xml:114
+msgid ""
+"The FileSystem dock. If this feature is disabled, the FileSystem dock won't "
+"be visible."
+msgstr ""
+
+#: doc/classes/EditorFeatureProfile.xml:117
+msgid ""
+"The Import dock. If this feature is disabled, the Import dock won't be "
+"visible."
+msgstr ""
+
+#: doc/classes/EditorFeatureProfile.xml:120 doc/classes/SpatialMaterial.xml:471
+msgid "Represents the size of the [enum Feature] enum."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:4
+msgid "A modified version of [FileDialog] used by the editor."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:15
+msgid ""
+"Adds a comma-delimited file extension filter option to the "
+"[EditorFileDialog] with an optional semi-colon-delimited label.\n"
+"For example, [code]\"*.tscn, *.scn; Scenes\"[/code] results in filter text "
+"\"Scenes (*.tscn, *.scn)\"."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:22
+msgid "Removes all filters except for \"All Files (*)\"."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:28
+msgid ""
+"Returns the [code]VBoxContainer[/code] used to display the file system.\n"
+"[b]Warning:[/b] This is a required internal node, removing and freeing it "
+"may cause a crash. If you wish to hide it or any of its children, use their "
+"[member CanvasItem.visible] property."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:35
+msgid ""
+"Notify the [EditorFileDialog] that its view of the data is no longer "
+"accurate. Updates the view contents on next view update."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:41
+msgid ""
+"The location from which the user may select a file, including [code]res://[/"
+"code], [code]user://[/code], and the local file system."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:44
+msgid "The currently occupied directory."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:47
+msgid "The currently selected file."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:50
+msgid "The file system path in the address bar."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:54
+msgid ""
+"If [code]true[/code], the [EditorFileDialog] will not warn the user before "
+"overwriting files."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:57
+msgid ""
+"The view format in which the [EditorFileDialog] displays resources to the "
+"user."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:60
+msgid ""
+"The purpose of the [EditorFileDialog], which defines the allowed behaviors."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:64
+msgid ""
+"If [code]true[/code], hidden files and directories will be visible in the "
+"[EditorFileDialog]."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:72
+msgid "Emitted when a directory is selected."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:78
+msgid "Emitted when a file is selected."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:84
+msgid "Emitted when multiple files are selected."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:90
+msgid ""
+"The [EditorFileDialog] can select only one file. Accepting the window will "
+"open the file."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:93
+msgid ""
+"The [EditorFileDialog] can select multiple files. Accepting the window will "
+"open all files."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:96
+msgid ""
+"The [EditorFileDialog] can select only one directory. Accepting the window "
+"will open the directory."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:99
+msgid ""
+"The [EditorFileDialog] can select a file or directory. Accepting the window "
+"will open it."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:102
+msgid ""
+"The [EditorFileDialog] can select only one file. Accepting the window will "
+"save the file."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:105
+msgid ""
+"The [EditorFileDialog] can only view [code]res://[/code] directory contents."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:108
+msgid ""
+"The [EditorFileDialog] can only view [code]user://[/code] directory contents."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:111
+msgid "The [EditorFileDialog] can view the entire local file system."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:114
+msgid "The [EditorFileDialog] displays resources as thumbnails."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:117
+msgid "The [EditorFileDialog] displays resources as a list of filenames."
+msgstr ""
+
+#: doc/classes/EditorFileSystem.xml:4
+msgid "Resource filesystem, as the editor sees it."
+msgstr ""
+
+#: doc/classes/EditorFileSystem.xml:7
+msgid ""
+"This object holds information of all resources in the filesystem, their "
+"types, etc.\n"
+"[b]Note:[/b] This class shouldn't be instantiated directly. Instead, access "
+"the singleton using [method EditorInterface.get_resource_filesystem]."
+msgstr ""
+
+#: doc/classes/EditorFileSystem.xml:17
+msgid ""
+"Returns the resource type of the file, given the full path. This returns a "
+"string such as [code]\"Resource\"[/code] or [code]\"GDScript\"[/code], "
+"[i]not[/i] a file extension such as [code]\".gd\"[/code]."
+msgstr ""
+
+#: doc/classes/EditorFileSystem.xml:23
+msgid "Gets the root directory object."
+msgstr ""
+
+#: doc/classes/EditorFileSystem.xml:30
+msgid "Returns a view into the filesystem at [code]path[/code]."
+msgstr ""
+
+#: doc/classes/EditorFileSystem.xml:36
+msgid "Returns the scan progress for 0 to 1 if the FS is being scanned."
+msgstr ""
+
+#: doc/classes/EditorFileSystem.xml:42
+msgid "Returns [code]true[/code] of the filesystem is being scanned."
+msgstr ""
+
+#: doc/classes/EditorFileSystem.xml:48
+msgid "Scan the filesystem for changes."
+msgstr ""
+
+#: doc/classes/EditorFileSystem.xml:54
+msgid "Check if the source of any imported resource changed."
+msgstr ""
+
+#: doc/classes/EditorFileSystem.xml:61
+msgid ""
+"Update a file information. Call this if an external program (not Godot) "
+"modified the file."
+msgstr ""
+
+#: doc/classes/EditorFileSystem.xml:67
+msgid "Scans the script files and updates the list of custom class names."
+msgstr ""
+
+#: doc/classes/EditorFileSystem.xml:74
+msgid "Emitted if the filesystem changed."
+msgstr ""
+
+#: doc/classes/EditorFileSystem.xml:80
+msgid "Emitted if a resource is reimported."
+msgstr ""
+
+#: doc/classes/EditorFileSystem.xml:86
+msgid ""
+"Emitted if at least one resource is reloaded when the filesystem is scanned."
+msgstr ""
+
+#: doc/classes/EditorFileSystem.xml:92
+msgid "Emitted if the source of any imported file changed."
+msgstr ""
+
+#: doc/classes/EditorFileSystemDirectory.xml:4
+msgid "A directory for the resource filesystem."
+msgstr ""
+
+#: doc/classes/EditorFileSystemDirectory.xml:7
+msgid "A more generalized, low-level variation of the directory concept."
+msgstr ""
+
+#: doc/classes/EditorFileSystemDirectory.xml:16
+msgid ""
+"Returns the index of the directory with name [code]name[/code] or [code]-1[/"
+"code] if not found."
+msgstr ""
+
+#: doc/classes/EditorFileSystemDirectory.xml:23
+msgid ""
+"Returns the index of the file with name [code]name[/code] or [code]-1[/code] "
+"if not found."
+msgstr ""
+
+#: doc/classes/EditorFileSystemDirectory.xml:30
+msgid "Returns the name of the file at index [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/EditorFileSystemDirectory.xml:36
+msgid "Returns the number of files in this directory."
+msgstr ""
+
+#: doc/classes/EditorFileSystemDirectory.xml:43
+msgid ""
+"Returns [code]true[/code] if the file at index [code]idx[/code] imported "
+"properly."
+msgstr ""
+
+#: doc/classes/EditorFileSystemDirectory.xml:50
+msgid "Returns the path to the file at index [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/EditorFileSystemDirectory.xml:57
+msgid ""
+"Returns the base class of the script class defined in the file at index "
+"[code]idx[/code]. If the file doesn't define a script class using the "
+"[code]class_name[/code] syntax, this will return an empty string."
+msgstr ""
+
+#: doc/classes/EditorFileSystemDirectory.xml:64
+msgid ""
+"Returns the name of the script class defined in the file at index [code]idx[/"
+"code]. If the file doesn't define a script class using the [code]class_name[/"
+"code] syntax, this will return an empty string."
+msgstr ""
+
+#: doc/classes/EditorFileSystemDirectory.xml:71
+msgid ""
+"Returns the resource type of the file at index [code]idx[/code]. This "
+"returns a string such as [code]\"Resource\"[/code] or [code]\"GDScript\"[/"
+"code], [i]not[/i] a file extension such as [code]\".gd\"[/code]."
+msgstr ""
+
+#: doc/classes/EditorFileSystemDirectory.xml:77
+msgid "Returns the name of this directory."
+msgstr ""
+
+#: doc/classes/EditorFileSystemDirectory.xml:83
+msgid ""
+"Returns the parent directory for this directory or [code]null[/code] if "
+"called on a directory at [code]res://[/code] or [code]user://[/code]."
+msgstr ""
+
+#: doc/classes/EditorFileSystemDirectory.xml:89
+msgid "Returns the path to this directory."
+msgstr ""
+
+#: doc/classes/EditorFileSystemDirectory.xml:96
+msgid "Returns the subdirectory at index [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/EditorFileSystemDirectory.xml:102
+msgid "Returns the number of subdirectories in this directory."
+msgstr ""
+
+#: doc/classes/EditorImportPlugin.xml:4
+msgid ""
+"Registers a custom resource importer in the editor. Use the class to parse "
+"any file and import it as a new resource type."
+msgstr ""
+
+#: doc/classes/EditorImportPlugin.xml:7
+msgid ""
+"EditorImportPlugins provide a way to extend the editor's resource import "
+"functionality. Use them to import resources from custom files or to provide "
+"alternatives to the editor's existing importers. Register your "
+"[EditorPlugin] with [method EditorPlugin.add_import_plugin].\n"
+"EditorImportPlugins work by associating with specific file extensions and a "
+"resource type. See [method get_recognized_extensions] and [method "
+"get_resource_type]. They may optionally specify some import presets that "
+"affect the import process. EditorImportPlugins are responsible for creating "
+"the resources and saving them in the [code].import[/code] directory (see "
+"[member ProjectSettings.application/config/"
+"use_hidden_project_data_directory]).\n"
+"Below is an example EditorImportPlugin that imports a [Mesh] from a file "
+"with the extension \".special\" or \".spec\":\n"
+"[codeblock]\n"
+"tool\n"
+"extends EditorImportPlugin\n"
+"\n"
+"func get_importer_name():\n"
+" return \"my.special.plugin\"\n"
+"\n"
+"func get_visible_name():\n"
+" return \"Special Mesh\"\n"
+"\n"
+"func get_recognized_extensions():\n"
+" return [\"special\", \"spec\"]\n"
+"\n"
+"func get_save_extension():\n"
+" return \"mesh\"\n"
+"\n"
+"func get_resource_type():\n"
+" return \"Mesh\"\n"
+"\n"
+"func get_preset_count():\n"
+" return 1\n"
+"\n"
+"func get_preset_name(i):\n"
+" return \"Default\"\n"
+"\n"
+"func get_import_options(i):\n"
+" return [{\"name\": \"my_option\", \"default_value\": false}]\n"
+"\n"
+"func import(source_file, save_path, options, platform_variants, gen_files):\n"
+" var file = File.new()\n"
+" if file.open(source_file, File.READ) != OK:\n"
+" return FAILED\n"
+"\n"
+" var mesh = Mesh.new()\n"
+" # Fill the Mesh with data read in \"file\", left as an exercise to the "
+"reader\n"
+"\n"
+" var filename = save_path + \".\" + get_save_extension()\n"
+" return ResourceSaver.save(filename, mesh)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/EditorImportPlugin.xml:51 doc/classes/ResourceImporter.xml:10
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/plugins/editor/import_plugins."
+"html"
+msgstr ""
+
+#: doc/classes/EditorImportPlugin.xml:58
+msgid ""
+"Gets the options and default values for the preset at this index. Returns an "
+"Array of Dictionaries with the following keys: [code]name[/code], "
+"[code]default_value[/code], [code]property_hint[/code] (optional), "
+"[code]hint_string[/code] (optional), [code]usage[/code] (optional)."
+msgstr ""
+
+#: doc/classes/EditorImportPlugin.xml:64
+msgid ""
+"Gets the order of this importer to be run when importing resources. "
+"Importers with [i]lower[/i] import orders will be called first, and higher "
+"values will be called later. Use this to ensure the importer runs after the "
+"dependencies are already imported. The default import order is [code]0[/"
+"code] unless overridden by a specific importer. See [enum ResourceImporter."
+"ImportOrder] for some predefined values."
+msgstr ""
+
+#: doc/classes/EditorImportPlugin.xml:70
+msgid "Gets the unique name of the importer."
+msgstr ""
+
+#: doc/classes/EditorImportPlugin.xml:78
+msgid ""
+"This method can be overridden to hide specific import options if conditions "
+"are met. This is mainly useful for hiding options that depend on others if "
+"one of them is disabled. For example:\n"
+"[codeblock]\n"
+"func get_option_visibility(option, options):\n"
+" # Only show the lossy quality setting if the compression mode is set to "
+"\"Lossy\".\n"
+" if option == \"compress/lossy_quality\" and options.has(\"compress/mode"
+"\"):\n"
+" return int(options[\"compress/mode\"]) == COMPRESS_LOSSY\n"
+"\n"
+" return true\n"
+"[/codeblock]\n"
+"Return [code]true[/code] to make all options always visible."
+msgstr ""
+
+#: doc/classes/EditorImportPlugin.xml:93
+msgid ""
+"Gets the number of initial presets defined by the plugin. Use [method "
+"get_import_options] to get the default options for the preset and [method "
+"get_preset_name] to get the name of the preset."
+msgstr ""
+
+#: doc/classes/EditorImportPlugin.xml:100
+msgid "Gets the name of the options preset at this index."
+msgstr ""
+
+#: doc/classes/EditorImportPlugin.xml:106
+msgid ""
+"Gets the priority of this plugin for the recognized extension. Higher "
+"priority plugins will be preferred. The default priority is [code]1.0[/code]."
+msgstr ""
+
+#: doc/classes/EditorImportPlugin.xml:112
+msgid ""
+"Gets the list of file extensions to associate with this loader (case-"
+"insensitive). e.g. [code][\"obj\"][/code]."
+msgstr ""
+
+#: doc/classes/EditorImportPlugin.xml:118
+msgid ""
+"Gets the Godot resource type associated with this loader. e.g. [code]\"Mesh"
+"\"[/code] or [code]\"Animation\"[/code]."
+msgstr ""
+
+#: doc/classes/EditorImportPlugin.xml:124
+msgid ""
+"Gets the extension used to save this resource in the [code].import[/code] "
+"directory (see [member ProjectSettings.application/config/"
+"use_hidden_project_data_directory])."
+msgstr ""
+
+#: doc/classes/EditorImportPlugin.xml:130
+msgid ""
+"Gets the name to display in the import window. You should choose this name "
+"as a continuation to \"Import as\", e.g. \"Import as Special Mesh\"."
+msgstr ""
+
+#: doc/classes/EditorImportPlugin.xml:141
+msgid ""
+"Imports [code]source_file[/code] into [code]save_path[/code] with the import "
+"[code]options[/code] specified. The [code]platform_variants[/code] and "
+"[code]gen_files[/code] arrays will be modified by this function.\n"
+"This method must be overridden to do the actual importing work. See this "
+"class' description for an example of overriding this method."
+msgstr ""
+
+#: doc/classes/EditorInspector.xml:4
+msgid "A tab used to edit properties of the selected node."
+msgstr ""
+
+#: doc/classes/EditorInspector.xml:7
+msgid ""
+"The editor inspector is by default located on the right-hand side of the "
+"editor. It's used to edit the properties of the selected node. For example, "
+"you can select a node such as [Sprite] then edit its transform through the "
+"inspector tool. The editor inspector is an essential tool in the game "
+"development workflow.\n"
+"[b]Note:[/b] This class shouldn't be instantiated directly. Instead, access "
+"the singleton using [method EditorInterface.get_inspector]."
+msgstr ""
+
+#: doc/classes/EditorInspector.xml:16
+msgid ""
+"Refreshes the inspector.\n"
+"[b]Note:[/b] To save on CPU resources, calling this method will do nothing "
+"if the time specified in [code]docks/property_editor/auto_refresh_interval[/"
+"code] editor setting hasn't passed yet since this method was last called. "
+"(By default, this interval is set to 0.3 seconds.)"
+msgstr ""
+
+#: doc/classes/EditorInspector.xml:28
+msgid ""
+"Emitted when the Edit button of an [Object] has been pressed in the "
+"inspector. This is mainly used in the remote scene tree inspector."
+msgstr ""
+
+#: doc/classes/EditorInspector.xml:34
+msgid "Emitted when a property is edited in the inspector."
+msgstr ""
+
+#: doc/classes/EditorInspector.xml:40
+msgid ""
+"Emitted when a property is keyed in the inspector. Properties can be keyed "
+"by clicking the \"key\" icon next to a property when the Animation panel is "
+"toggled."
+msgstr ""
+
+#: doc/classes/EditorInspector.xml:46
+msgid "Emitted when a property is selected in the inspector."
+msgstr ""
+
+#: doc/classes/EditorInspector.xml:53
+msgid ""
+"Emitted when a boolean property is toggled in the inspector.\n"
+"[b]Note:[/b] This signal is never emitted if the internal [code]autoclear[/"
+"code] property enabled. Since this property is always enabled in the editor "
+"inspector, this signal is never emitted by the editor itself."
+msgstr ""
+
+#: doc/classes/EditorInspector.xml:61
+msgid "Emitted when a resource is selected in the inspector."
+msgstr ""
+
+#: doc/classes/EditorInspector.xml:66
+msgid ""
+"Emitted when a property that requires a restart to be applied is edited in "
+"the inspector. This is only used in the Project Settings and Editor Settings."
+msgstr ""
+
+#: doc/classes/EditorInspectorPlugin.xml:4
+msgid "Plugin for adding custom property editors on inspector."
+msgstr ""
+
+#: doc/classes/EditorInspectorPlugin.xml:7
+msgid ""
+"These plugins allow adding custom property editors to [EditorInspector].\n"
+"Plugins are registered via [method EditorPlugin.add_inspector_plugin].\n"
+"When an object is edited, the [method can_handle] function is called and "
+"must return [code]true[/code] if the object type is supported.\n"
+"If supported, the function [method parse_begin] will be called, allowing to "
+"place custom controls at the beginning of the class.\n"
+"Subsequently, the [method parse_category] and [method parse_property] are "
+"called for every category and property. They offer the ability to add custom "
+"controls to the inspector too.\n"
+"Finally, [method parse_end] will be called.\n"
+"On each of these calls, the \"add\" functions can be called."
+msgstr ""
+
+#: doc/classes/EditorInspectorPlugin.xml:16
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/plugins/editor/"
+"inspector_plugins.html"
+msgstr ""
+
+#: doc/classes/EditorInspectorPlugin.xml:23
+msgid "Adds a custom control, which is not necessarily a property editor."
+msgstr ""
+
+#: doc/classes/EditorInspectorPlugin.xml:31
+msgid ""
+"Adds a property editor for an individual property. The [code]editor[/code] "
+"control must extend [EditorProperty]."
+msgstr ""
+
+#: doc/classes/EditorInspectorPlugin.xml:40
+msgid ""
+"Adds an editor that allows modifying multiple properties. The [code]editor[/"
+"code] control must extend [EditorProperty]."
+msgstr ""
+
+#: doc/classes/EditorInspectorPlugin.xml:47
+msgid "Returns [code]true[/code] if this object can be handled by this plugin."
+msgstr ""
+
+#: doc/classes/EditorInspectorPlugin.xml:54
+msgid "Called to allow adding controls at the beginning of the list."
+msgstr ""
+
+#: doc/classes/EditorInspectorPlugin.xml:62
+msgid "Called to allow adding controls at the beginning of the category."
+msgstr ""
+
+#: doc/classes/EditorInspectorPlugin.xml:68
+msgid "Called to allow adding controls at the end of the list."
+msgstr ""
+
+#: doc/classes/EditorInspectorPlugin.xml:80
+msgid ""
+"Called to allow adding property specific editors to the inspector. Usually "
+"these inherit [EditorProperty]. Returning [code]true[/code] removes the "
+"built-in editor for this property, otherwise allows to insert a custom "
+"editor before the built-in one."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:4
+msgid "Godot editor's interface."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:7
+msgid ""
+"EditorInterface gives you control over Godot editor's window. It allows "
+"customizing the window, saving and (re-)loading scenes, rendering mesh "
+"previews, inspecting and editing resources and objects, and provides access "
+"to [EditorSettings], [EditorFileSystem], [EditorResourcePreview], "
+"[ScriptEditor], the editor viewport, and information about scenes.\n"
+"[b]Note:[/b] This class shouldn't be instantiated directly. Instead, access "
+"the singleton using [method EditorPlugin.get_editor_interface]."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:17
+msgid ""
+"Edits the given [Node]. The node will be also selected if it's inside the "
+"scene tree."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:24
+msgid "Edits the given [Resource]."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:30
+msgid ""
+"Returns the main container of Godot editor's window. For example, you can "
+"use it to retrieve the size of the container and place your controls "
+"accordingly.\n"
+"[b]Warning:[/b] Removing and freeing this node will render the editor "
+"useless and may cause a crash."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:37
+msgid "Returns the current path being viewed in the [FileSystemDock]."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:43
+msgid "Returns the edited (current) scene's root [Node]."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:49
+msgid ""
+"Returns the actual scale of the editor UI ([code]1.0[/code] being 100% "
+"scale). This can be used to adjust position and dimensions of the UI added "
+"by plugins.\n"
+"[b]Note:[/b] This value is set via the [code]interface/editor/display_scale[/"
+"code] and [code]interface/editor/custom_display_scale[/code] editor "
+"settings. Editor must be restarted for changes to be properly applied."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:56
+msgid "Returns the editor's [EditorSettings] instance."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:62
+msgid ""
+"Returns the main editor control. Use this as a parent for main screens.\n"
+"[b]Note:[/b] This returns the main editor control containing the whole "
+"editor, not the 2D or 3D viewports specifically.\n"
+"[b]Warning:[/b] Removing and freeing this node will render a part of the "
+"editor useless and may cause a crash."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:70
+msgid ""
+"Returns the editor's [FileSystemDock] instance.\n"
+"[b]Warning:[/b] Removing and freeing this node will render a part of the "
+"editor useless and may cause a crash."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:77
+msgid ""
+"Returns the editor's [EditorInspector] instance.\n"
+"[b]Warning:[/b] Removing and freeing this node will render a part of the "
+"editor useless and may cause a crash."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:84
+msgid "Returns an [Array] with the file paths of the currently opened scenes."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:90
+msgid ""
+"Returns the name of the scene that is being played. If no scene is currently "
+"being played, returns an empty string."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:96
+msgid "Returns the editor's [EditorFileSystem] instance."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:102
+msgid "Returns the editor's [EditorResourcePreview] instance."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:108
+msgid ""
+"Returns the editor's [ScriptEditor] instance.\n"
+"[b]Warning:[/b] Removing and freeing this node will render a part of the "
+"editor useless and may cause a crash."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:115
+msgid ""
+"Returns the path of the directory currently selected in the "
+"[FileSystemDock]. If a file is selected, its base directory will be returned "
+"using [method String.get_base_dir] instead."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:121
+msgid "Returns the editor's [EditorSelection] instance."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:130
+msgid ""
+"Shows the given property on the given [code]object[/code] in the editor's "
+"Inspector dock. If [code]inspector_only[/code] is [code]true[/code], plugins "
+"will not attempt to edit [code]object[/code]."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:136
+msgid ""
+"Returns [code]true[/code] if a scene is currently being played, [code]false[/"
+"code] otherwise. Paused scenes are considered as being played."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:143
+msgid ""
+"Returns [code]true[/code] if the specified [code]plugin[/code] is enabled. "
+"The plugin name is the same as its directory name."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:151
+msgid ""
+"Returns mesh previews rendered at the given size as an [Array] of [Texture]s."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:158
+msgid "Opens the scene at the given path."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:164
+msgid "Plays the currently active scene."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:171
+msgid "Plays the scene specified by its filepath."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:177
+msgid "Plays the main scene."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:184
+msgid "Reloads the scene at the given path."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:190
+msgid ""
+"Saves the scene. Returns either [code]OK[/code] or [code]ERR_CANT_CREATE[/"
+"code] (see [@GlobalScope] constants)."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:198
+msgid "Saves the scene as a file at [code]path[/code]."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:205
+msgid ""
+"Selects the file, with the path provided by [code]file[/code], in the "
+"FileSystem dock."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:212
+msgid ""
+"Sets the editor's current main screen to the one specified in [code]name[/"
+"code]. [code]name[/code] must match the text of the tab in question exactly "
+"([code]2D[/code], [code]3D[/code], [code]Script[/code], [code]AssetLib[/"
+"code])."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:220
+msgid ""
+"Sets the enabled status of a plugin. The plugin name is the same as its "
+"directory name."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:226
+msgid "Stops the scene that is currently playing."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:232
+msgid ""
+"If [code]true[/code], enables distraction-free mode which hides side docks "
+"to increase the space available for the main view."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:4
+msgid "Used by the editor to extend its functionality."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:7
+msgid ""
+"Plugins are used by the editor to extend functionality. The most common "
+"types of plugins are those which edit a given node or resource type, import "
+"plugins and export plugins. See also [EditorScript] to add functions to the "
+"editor."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:10
+msgid "https://docs.godotengine.org/en/3.4/tutorials/plugins/editor/index.html"
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:18
+msgid ""
+"Adds a script at [code]path[/code] to the Autoload list as [code]name[/code]."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:26
+msgid ""
+"Adds a control to the bottom panel (together with Output, Debug, Animation, "
+"etc). Returns a reference to the button added. It's up to you to hide/show "
+"the button when needed. When your plugin is deactivated, make sure to remove "
+"your custom control with [method remove_control_from_bottom_panel] and free "
+"it with [method Node.queue_free]."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:34
+msgid ""
+"Adds a custom control to a container (see [enum CustomControlContainer]). "
+"There are many locations where custom controls can be added in the editor "
+"UI.\n"
+"Please remember that you have to manage the visibility of your custom "
+"controls yourself (and likely hide it after adding it).\n"
+"When your plugin is deactivated, make sure to remove your custom control "
+"with [method remove_control_from_container] and free it with [method Node."
+"queue_free]."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:44
+msgid ""
+"Adds the control to a specific dock slot (see [enum DockSlot] for options).\n"
+"If the dock is repositioned and as long as the plugin is active, the editor "
+"will save the dock position on further sessions.\n"
+"When your plugin is deactivated, make sure to remove your custom control "
+"with [method remove_control_from_docks] and free it with [method Node."
+"queue_free]."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:56
+msgid ""
+"Adds a custom type, which will appear in the list of nodes or resources. An "
+"icon can be optionally passed.\n"
+"When given node or resource is selected, the base type will be instanced "
+"(ie, \"Spatial\", \"Control\", \"Resource\"), then the script will be loaded "
+"and set to this object.\n"
+"You can use the virtual method [method handles] to check if your custom "
+"object is being edited by checking the script or using the [code]is[/code] "
+"keyword.\n"
+"During run-time, this will be a simple object with a script so this function "
+"does not need to be called then."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:66
+msgid ""
+"Registers a new [EditorExportPlugin]. Export plugins are used to perform "
+"tasks when the project is being exported.\n"
+"See [method add_inspector_plugin] for an example of how to register a plugin."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:74
+msgid ""
+"Registers a new [EditorImportPlugin]. Import plugins are used to import "
+"custom and unsupported assets as a custom [Resource] type.\n"
+"[b]Note:[/b] If you want to import custom 3D asset formats use [method "
+"add_scene_import_plugin] instead.\n"
+"See [method add_inspector_plugin] for an example of how to register a plugin."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:83
+msgid ""
+"Registers a new [EditorInspectorPlugin]. Inspector plugins are used to "
+"extend [EditorInspector] and provide custom configuration tools for your "
+"object's properties.\n"
+"[b]Note:[/b] Always use [method remove_inspector_plugin] to remove the "
+"registered [EditorInspectorPlugin] when your [EditorPlugin] is disabled to "
+"prevent leaks and an unexpected behavior.\n"
+"[codeblock]\n"
+"const MyInspectorPlugin = preload(\"res://addons/your_addon/path/to/your/"
+"script.gd\")\n"
+"var inspector_plugin = MyInspectorPlugin.new()\n"
+"\n"
+"func _enter_tree():\n"
+" add_inspector_plugin(inspector_plugin)\n"
+"\n"
+"func _exit_tree():\n"
+" remove_inspector_plugin(inspector_plugin)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:101
+msgid ""
+"Registers a new [EditorSceneImporter]. Scene importers are used to import "
+"custom 3D asset formats as scenes."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:108
+msgid ""
+"Registers a new [EditorSpatialGizmoPlugin]. Gizmo plugins are used to add "
+"custom gizmos to the 3D preview viewport for a [Spatial].\n"
+"See [method add_inspector_plugin] for an example of how to register a plugin."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:119
+msgid ""
+"Adds a custom menu item to [b]Project > Tools[/b] as [code]name[/code] that "
+"calls [code]callback[/code] on an instance of [code]handler[/code] with a "
+"parameter [code]ud[/code] when user activates it."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:127
+msgid ""
+"Adds a custom submenu under [b]Project > Tools >[/b] [code]name[/code]. "
+"[code]submenu[/code] should be an object of class [PopupMenu]. This submenu "
+"should be cleaned up using [code]remove_tool_menu_item(name)[/code]."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:133
+msgid ""
+"This method is called when the editor is about to save the project, switch "
+"to another tab, etc. It asks the plugin to apply any pending state changes "
+"to ensure consistency.\n"
+"This is used, for example, in shader editors to let the plugin know that it "
+"must apply the shader code being written by the user to the object."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:140
+msgid ""
+"This method is called when the editor is about to run the project. The "
+"plugin can then perform required operations before the project runs.\n"
+"This method must return a boolean. If this method returns [code]false[/"
+"code], the project will not run. The run is aborted immediately, so this "
+"also prevents all other plugins' [method build] methods from running."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:147
+msgid ""
+"Clear all the state and reset the object being edited to zero. This ensures "
+"your plugin does not keep editing a currently existing node, or a node from "
+"the wrong scene."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:153
+msgid ""
+"Called by the engine when the user disables the [EditorPlugin] in the Plugin "
+"tab of the project settings window."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:160
+msgid ""
+"This function is used for plugins that edit specific object types (nodes or "
+"resources). It requests the editor to edit the given object."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:166
+msgid ""
+"Called by the engine when the user enables the [EditorPlugin] in the Plugin "
+"tab of the project settings window."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:173
+msgid ""
+"Called by the engine when the 2D editor's viewport is updated. Use the "
+"[code]overlay[/code] [Control] for drawing. You can update the viewport "
+"manually by calling [method update_overlays].\n"
+"[codeblock]\n"
+"func forward_canvas_draw_over_viewport(overlay):\n"
+" # Draw a circle at cursor position.\n"
+" overlay.draw_circle(overlay.get_local_mouse_position(), 64, Color."
+"white)\n"
+"\n"
+"func forward_canvas_gui_input(event):\n"
+" if event is InputEventMouseMotion:\n"
+" # Redraw viewport when cursor is moved.\n"
+" update_overlays()\n"
+" return true\n"
+" return false\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:192
+msgid ""
+"This method is the same as [method forward_canvas_draw_over_viewport], "
+"except it draws on top of everything. Useful when you need an extra layer "
+"that shows over anything else.\n"
+"You need to enable calling of this method by using [method "
+"set_force_draw_over_forwarding_enabled]."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:200
+msgid ""
+"Called when there is a root node in the current edited scene, [method "
+"handles] is implemented and an [InputEvent] happens in the 2D viewport. "
+"Intercepts the [InputEvent], if [code]return true[/code] [EditorPlugin] "
+"consumes the [code]event[/code], otherwise forwards [code]event[/code] to "
+"other Editor classes. Example:\n"
+"[codeblock]\n"
+"# Prevents the InputEvent to reach other Editor classes\n"
+"func forward_canvas_gui_input(event):\n"
+" var forward = true\n"
+" return forward\n"
+"[/codeblock]\n"
+"Must [code]return false[/code] in order to forward the [InputEvent] to other "
+"Editor classes. Example:\n"
+"[codeblock]\n"
+"# Consumes InputEventMouseMotion and forwards other InputEvent types\n"
+"func forward_canvas_gui_input(event):\n"
+" var forward = false\n"
+" if event is InputEventMouseMotion:\n"
+" forward = true\n"
+" return forward\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:222
+msgid ""
+"Called by the engine when the 3D editor's viewport is updated. Use the "
+"[code]overlay[/code] [Control] for drawing. You can update the viewport "
+"manually by calling [method update_overlays].\n"
+"[codeblock]\n"
+"func forward_spatial_draw_over_viewport(overlay):\n"
+" # Draw a circle at cursor position.\n"
+" overlay.draw_circle(overlay.get_local_mouse_position(), 64)\n"
+"\n"
+"func forward_spatial_gui_input(camera, event):\n"
+" if event is InputEventMouseMotion:\n"
+" # Redraw viewport when cursor is moved.\n"
+" update_overlays()\n"
+" return true\n"
+" return false\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:241
+msgid ""
+"This method is the same as [method forward_spatial_draw_over_viewport], "
+"except it draws on top of everything. Useful when you need an extra layer "
+"that shows over anything else.\n"
+"You need to enable calling of this method by using [method "
+"set_force_draw_over_forwarding_enabled]."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:250
+msgid ""
+"Called when there is a root node in the current edited scene, [method "
+"handles] is implemented and an [InputEvent] happens in the 3D viewport. "
+"Intercepts the [InputEvent], if [code]return true[/code] [EditorPlugin] "
+"consumes the [code]event[/code], otherwise forwards [code]event[/code] to "
+"other Editor classes. Example:\n"
+"[codeblock]\n"
+"# Prevents the InputEvent to reach other Editor classes\n"
+"func forward_spatial_gui_input(camera, event):\n"
+" var forward = true\n"
+" return forward\n"
+"[/codeblock]\n"
+"Must [code]return false[/code] in order to forward the [InputEvent] to other "
+"Editor classes. Example:\n"
+"[codeblock]\n"
+"# Consumes InputEventMouseMotion and forwards other InputEvent types\n"
+"func forward_spatial_gui_input(camera, event):\n"
+" var forward = false\n"
+" if event is InputEventMouseMotion:\n"
+" forward = true\n"
+" return forward\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:271
+msgid ""
+"This is for editors that edit script-based objects. You can return a list of "
+"breakpoints in the format ([code]script:line[/code]), for example: "
+"[code]res://path_to_script.gd:25[/code]."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:277
+msgid ""
+"Returns the [EditorInterface] object that gives you control over Godot "
+"editor's window and its functionalities."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:283
+msgid ""
+"Override this method in your plugin to return a [Texture] in order to give "
+"it an icon.\n"
+"For main screen plugins, this appears at the top of the screen, to the right "
+"of the \"2D\", \"3D\", \"Script\", and \"AssetLib\" buttons.\n"
+"Ideally, the plugin icon should be white with a transparent background and "
+"16x16 pixels in size.\n"
+"[codeblock]\n"
+"func get_plugin_icon():\n"
+" # You can use a custom icon:\n"
+" return preload(\"res://addons/my_plugin/my_plugin_icon.svg\")\n"
+" # Or use a built-in icon:\n"
+" return get_editor_interface().get_base_control().get_icon(\"Node\", "
+"\"EditorIcons\")\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:298
+msgid ""
+"Override this method in your plugin to provide the name of the plugin when "
+"displayed in the Godot editor.\n"
+"For main screen plugins, this appears at the top of the screen, to the right "
+"of the \"2D\", \"3D\", \"Script\", and \"AssetLib\" buttons."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:305
+msgid ""
+"Gets the Editor's dialogue used for making scripts.\n"
+"[b]Note:[/b] Users can configure it before use.\n"
+"[b]Warning:[/b] Removing and freeing this node will render a part of the "
+"editor useless and may cause a crash."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:313
+msgid ""
+"Gets the state of your plugin editor. This is used when saving the scene (so "
+"state is kept when opening it again) and for switching tabs (so state can be "
+"restored when the tab returns)."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:319
+msgid ""
+"Gets the undo/redo object. Most actions in the editor can be undoable, so "
+"use this object to make sure this happens when it's worth it."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:326
+msgid ""
+"Gets the GUI layout of the plugin. This is used to save the project's editor "
+"layout when [method queue_save_layout] is called or the editor layout was "
+"changed(For example changing the position of a dock)."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:333
+msgid ""
+"Implement this function if your plugin edits a specific type of object "
+"(Resource or Node). If you return [code]true[/code], then you will get the "
+"functions [method edit] and [method make_visible] called when the editor "
+"requests them. If you have declared the methods [method "
+"forward_canvas_gui_input] and [method forward_spatial_gui_input] these will "
+"be called too."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:339
+msgid ""
+"Returns [code]true[/code] if this is a main screen editor plugin (it goes in "
+"the workspace selector together with [b]2D[/b], [b]3D[/b], [b]Script[/b] and "
+"[b]AssetLib[/b])."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:345
+msgid "Minimizes the bottom panel."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:352
+msgid "Makes a specific item in the bottom panel visible."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:359
+msgid ""
+"This function will be called when the editor is requested to become visible. "
+"It is used for plugins that edit a specific object type.\n"
+"Remember that you have to manage the visibility of all your editor controls "
+"manually."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:366
+msgid "Queue save the project's editor layout."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:373
+msgid "Removes an Autoload [code]name[/code] from the list."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:380
+msgid ""
+"Removes the control from the bottom panel. You have to manually [method Node."
+"queue_free] the control."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:388
+msgid ""
+"Removes the control from the specified container. You have to manually "
+"[method Node.queue_free] the control."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:395
+msgid ""
+"Removes the control from the dock. You have to manually [method Node."
+"queue_free] the control."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:402
+msgid "Removes a custom type added by [method add_custom_type]."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:409
+msgid "Removes an export plugin registered by [method add_export_plugin]."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:416
+msgid "Removes an import plugin registered by [method add_import_plugin]."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:423
+msgid "Removes an inspector plugin registered by [method add_import_plugin]"
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:430
+msgid ""
+"Removes a scene importer registered by [method add_scene_import_plugin]."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:437
+msgid "Removes a gizmo plugin registered by [method add_spatial_gizmo_plugin]."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:444
+msgid "Removes a menu [code]name[/code] from [b]Project > Tools[/b]."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:450
+msgid ""
+"This method is called after the editor saves the project or when it's "
+"closed. It asks the plugin to save edited external scenes/resources."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:456
+msgid ""
+"Enables calling of [method forward_canvas_force_draw_over_viewport] for the "
+"2D editor and [method forward_spatial_force_draw_over_viewport] for the 3D "
+"editor when their viewports are updated. You need to call this method only "
+"once and it will work permanently for this plugin."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:462
+msgid ""
+"Use this method if you always want to receive inputs from 3D view screen "
+"inside [method forward_spatial_gui_input]. It might be especially usable if "
+"your plugin will want to use raycast in the scene."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:469
+msgid "Restore the state saved by [method get_state]."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:476
+msgid "Restore the plugin GUI layout saved by [method get_window_layout]."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:482
+msgid ""
+"Updates the overlays of the 2D and 3D editor viewport. Causes methods "
+"[method forward_canvas_draw_over_viewport], [method "
+"forward_canvas_force_draw_over_viewport], [method "
+"forward_spatial_draw_over_viewport] and [method "
+"forward_spatial_force_draw_over_viewport] to be called."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:490
+msgid ""
+"Emitted when user changes the workspace ([b]2D[/b], [b]3D[/b], [b]Script[/"
+"b], [b]AssetLib[/b]). Also works with custom screens defined by plugins."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:501
+msgid ""
+"Emitted when the scene is changed in the editor. The argument will return "
+"the root node of the scene that has just become active. If this scene is new "
+"and empty, the argument will be [code]null[/code]."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:507
+msgid ""
+"Emitted when user closes a scene. The argument is file path to a closed "
+"scene."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:553
+msgid "Represents the size of the [enum DockSlot] enum."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:4
+msgid "Custom control to edit properties for adding into the inspector."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:7
+msgid ""
+"This control allows property editing for one or multiple properties into "
+"[EditorInspector]. It is added via [EditorInspectorPlugin]."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:16
+msgid ""
+"If any of the controls added can gain keyboard focus, add it here. This "
+"ensures that focus will be restored if the inspector is refreshed."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:26
+msgid ""
+"If one or several properties have changed, this must be called. [code]field[/"
+"code] is used in case your editor can modify fields separately (as an "
+"example, Vector3.x). The [code]changing[/code] argument avoids the editor "
+"requesting this property to be refreshed (leave as [code]false[/code] if "
+"unsure)."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:32
+msgid "Gets the edited object."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:38
+msgid ""
+"Gets the edited property. If your editor is for a single property (added via "
+"[method EditorInspectorPlugin.parse_property]), then this will return the "
+"property."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:44
+msgid "Must be implemented to provide a custom tooltip to the property editor."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:51
+msgid ""
+"Puts the [code]editor[/code] control below the property label. The control "
+"must be previously added using [method Node.add_child]."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:57
+msgid "When this virtual function is called, you must update your editor."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:63
+msgid ""
+"Used by the inspector, set to [code]true[/code] when the property is "
+"checkable."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:66
+msgid ""
+"Used by the inspector, set to [code]true[/code] when the property is checked."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:69
+msgid ""
+"Used by the inspector, set to [code]true[/code] when the property is drawn "
+"with the editor theme's warning color. This is used for editable children's "
+"properties."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:72
+msgid ""
+"Used by the inspector, set to [code]true[/code] when the property can add "
+"keys for animation."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:75
+msgid "Set this property to change the label (if you want to show one)."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:78
+msgid ""
+"Used by the inspector, set to [code]true[/code] when the property is read-"
+"only."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:86
+msgid ""
+"Emit it if you want multiple properties modified at the same time. Do not "
+"use if added via [method EditorInspectorPlugin.parse_property]."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:93
+msgid "Used by sub-inspectors. Emit it if what was selected was an Object ID."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:100
+msgid ""
+"Do not emit this manually, use the [method emit_changed] method instead."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:107
+msgid "Emitted when a property was checked. Used internally."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:113
+msgid ""
+"Emit it if you want to add this value as an animation key (check for keying "
+"being enabled first)."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:120
+msgid "Emit it if you want to key a property with a single value."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:127
+msgid ""
+"If you want a sub-resource to be edited, emit this signal with the resource."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:134
+msgid "Emitted when selected. Used internally."
+msgstr ""
+
+#: doc/classes/EditorResourcePicker.xml:4
+msgid "Godot editor's control for selecting [Resource] type properties."
+msgstr ""
+
+#: doc/classes/EditorResourcePicker.xml:7
+msgid ""
+"This [Control] node is used in the editor's Inspector dock to allow editing "
+"of [Resource] type properties. It provides options for creating, loading, "
+"saving and converting resources. Can be used with [EditorInspectorPlugin] to "
+"recreate the same behavior.\n"
+"[b]Note:[/b] This [Control] does not include any editor for the resource, as "
+"editing is controlled by the Inspector dock itself or sub-Inspectors."
+msgstr ""
+
+#: doc/classes/EditorResourcePicker.xml:32
+msgid ""
+"Returns a list of all allowed types and subtypes corresponding to the "
+"[member base_type]. If the [member base_type] is empty, an empty list is "
+"returned."
+msgstr ""
+
+#: doc/classes/EditorResourcePicker.xml:46
+msgid ""
+"This virtual method can be implemented to handle context menu items not "
+"handled by default. See [method set_create_options]."
+msgstr ""
+
+#: doc/classes/EditorResourcePicker.xml:53
+msgid ""
+"This virtual method is called when updating the context menu of "
+"[EditorResourcePicker]. Implement this method to override the \"New ...\" "
+"items with your own options. [code]menu_node[/code] is a reference to the "
+"[PopupMenu] node.\n"
+"[b]Note:[/b] Implement [method handle_menu_selected] to handle these custom "
+"items."
+msgstr ""
+
+#: doc/classes/EditorResourcePicker.xml:61
+msgid ""
+"Sets the toggle mode state for the main button. Works only if [member "
+"toggle_mode] is set to [code]true[/code]."
+msgstr ""
+
+#: doc/classes/EditorResourcePicker.xml:67
+msgid ""
+"The base type of allowed resource types. Can be a comma-separated list of "
+"several options."
+msgstr ""
+
+#: doc/classes/EditorResourcePicker.xml:70
+msgid "If [code]true[/code], the value can be selected and edited."
+msgstr ""
+
+#: doc/classes/EditorResourcePicker.xml:73
+msgid "The edited resource value."
+msgstr ""
+
+#: doc/classes/EditorResourcePicker.xml:76
+msgid ""
+"If [code]true[/code], the main button with the resource preview works in the "
+"toggle mode. Use [method set_toggle_pressed] to manually set the state."
+msgstr ""
+
+#: doc/classes/EditorResourcePicker.xml:83
+msgid "Emitted when the value of the edited resource was changed."
+msgstr ""
+
+#: doc/classes/EditorResourcePicker.xml:90
+msgid ""
+"Emitted when the resource value was set and user clicked to edit it. When "
+"[code]edit[/code] is [code]true[/code], the signal was caused by the context "
+"menu \"Edit\" option."
+msgstr ""
+
+#: doc/classes/EditorResourcePreview.xml:4
+msgid "Helper to generate previews of resources or files."
+msgstr ""
+
+#: doc/classes/EditorResourcePreview.xml:7
+msgid ""
+"This object is used to generate previews for resources of files.\n"
+"[b]Note:[/b] This class shouldn't be instantiated directly. Instead, access "
+"the singleton using [method EditorInterface.get_resource_previewer]."
+msgstr ""
+
+#: doc/classes/EditorResourcePreview.xml:17
+msgid "Create an own, custom preview generator."
+msgstr ""
+
+#: doc/classes/EditorResourcePreview.xml:24
+msgid ""
+"Check if the resource changed, if so, it will be invalidated and the "
+"corresponding signal emitted."
+msgstr ""
+
+#: doc/classes/EditorResourcePreview.xml:34
+msgid ""
+"Queue the [code]resource[/code] being edited for preview. Once the preview "
+"is ready, the [code]receiver[/code]'s [code]receiver_func[/code] will be "
+"called. The [code]receiver_func[/code] must take the following four "
+"arguments: [String] path, [Texture] preview, [Texture] thumbnail_preview, "
+"[Variant] userdata. [code]userdata[/code] can be anything, and will be "
+"returned when [code]receiver_func[/code] is called.\n"
+"[b]Note:[/b] If it was not possible to create the preview the "
+"[code]receiver_func[/code] will still be called, but the preview will be "
+"null."
+msgstr ""
+
+#: doc/classes/EditorResourcePreview.xml:45
+msgid ""
+"Queue a resource file located at [code]path[/code] for preview. Once the "
+"preview is ready, the [code]receiver[/code]'s [code]receiver_func[/code] "
+"will be called. The [code]receiver_func[/code] must take the following four "
+"arguments: [String] path, [Texture] preview, [Texture] thumbnail_preview, "
+"[Variant] userdata. [code]userdata[/code] can be anything, and will be "
+"returned when [code]receiver_func[/code] is called.\n"
+"[b]Note:[/b] If it was not possible to create the preview the "
+"[code]receiver_func[/code] will still be called, but the preview will be "
+"null."
+msgstr ""
+
+#: doc/classes/EditorResourcePreview.xml:53
+msgid "Removes a custom preview generator."
+msgstr ""
+
+#: doc/classes/EditorResourcePreview.xml:61
+msgid ""
+"Emitted if a preview was invalidated (changed). [code]path[/code] "
+"corresponds to the path of the preview."
+msgstr ""
+
+#: doc/classes/EditorResourcePreviewGenerator.xml:4
+msgid "Custom generator of previews."
+msgstr ""
+
+#: doc/classes/EditorResourcePreviewGenerator.xml:7
+msgid ""
+"Custom code to generate previews. Please check [code]file_dialog/"
+"thumbnail_size[/code] in [EditorSettings] to find out the right size to do "
+"previews at."
+msgstr ""
+
+#: doc/classes/EditorResourcePreviewGenerator.xml:15
+msgid ""
+"If this function returns [code]true[/code], the generator will call [method "
+"generate] or [method generate_from_path] for small previews as well.\n"
+"By default, it returns [code]false[/code]."
+msgstr ""
+
+#: doc/classes/EditorResourcePreviewGenerator.xml:24
+msgid ""
+"Generate a preview from a given resource with the specified size. This must "
+"always be implemented.\n"
+"Returning an empty texture is an OK way to fail and let another generator "
+"take care.\n"
+"Care must be taken because this function is always called from a thread (not "
+"the main thread)."
+msgstr ""
+
+#: doc/classes/EditorResourcePreviewGenerator.xml:34
+msgid ""
+"Generate a preview directly from a path with the specified size. "
+"Implementing this is optional, as default code will load and call [method "
+"generate].\n"
+"Returning an empty texture is an OK way to fail and let another generator "
+"take care.\n"
+"Care must be taken because this function is always called from a thread (not "
+"the main thread)."
+msgstr ""
+
+#: doc/classes/EditorResourcePreviewGenerator.xml:42
+msgid ""
+"If this function returns [code]true[/code], the generator will automatically "
+"generate the small previews from the normal preview texture generated by the "
+"methods [method generate] or [method generate_from_path].\n"
+"By default, it returns [code]false[/code]."
+msgstr ""
+
+#: doc/classes/EditorResourcePreviewGenerator.xml:50
+msgid ""
+"Returns [code]true[/code] if your generator supports the resource of type "
+"[code]type[/code]."
+msgstr ""
+
+#: doc/classes/EditorSceneImporter.xml:4
+msgid "Imports scenes from third-parties' 3D files."
+msgstr ""
+
+#: modules/fbx/doc_classes/EditorSceneImporterFBX.xml:4
+msgid "FBX 3D asset importer."
+msgstr ""
+
+#: modules/fbx/doc_classes/EditorSceneImporterFBX.xml:7
+msgid ""
+"This is an FBX 3D asset importer with full support for most FBX features.\n"
+"If exporting a FBX scene from Autodesk Maya, use these FBX export settings:\n"
+"[codeblock]\n"
+"- Smoothing Groups\n"
+"- Smooth Mesh\n"
+"- Triangluate (for meshes with blend shapes)\n"
+"- Bake Animation\n"
+"- Resample All\n"
+"- Deformed Models\n"
+"- Skins\n"
+"- Blend Shapes\n"
+"- Curve Filters\n"
+"- Constant Key Reducer\n"
+"- Auto Tangents Only\n"
+"- *Do not check* Constraints (as it will break the file)\n"
+"- Can check Embed Media (embeds textures into the exported FBX file)\n"
+" - Note that when importing embedded media, the texture and mesh will be a "
+"single immutable file.\n"
+" - You will have to re-export then re-import the FBX if the texture has "
+"changed.\n"
+"- Units: Centimeters\n"
+"- Up Axis: Y\n"
+"- Binary format in FBX 2017\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/EditorScenePostImport.xml:4
+msgid "Post-processes scenes after import."
+msgstr ""
+
+#: doc/classes/EditorScenePostImport.xml:7
+msgid ""
+"Imported scenes can be automatically modified right after import by setting "
+"their [b]Custom Script[/b] Import property to a [code]tool[/code] script "
+"that inherits from this class.\n"
+"The [method post_import] callback receives the imported scene's root node "
+"and returns the modified version of the scene. Usage example:\n"
+"[codeblock]\n"
+"tool # Needed so it runs in editor\n"
+"extends EditorScenePostImport\n"
+"\n"
+"# This sample changes all node names\n"
+"\n"
+"# Called right after the scene is imported and gets the root node\n"
+"func post_import(scene):\n"
+" # Change all node names to \"modified_[oldnodename]\"\n"
+" iterate(scene)\n"
+" return scene # Remember to return the imported scene\n"
+"\n"
+"func iterate(node):\n"
+" if node != null:\n"
+" node.name = \"modified_\" + node.name\n"
+" for child in node.get_children():\n"
+" iterate(child)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/EditorScenePostImport.xml:29
+msgid ""
+"https://docs.godotengine.org/en/3.4/getting_started/workflow/assets/"
+"importing_scenes.html#custom-script"
+msgstr ""
+
+#: doc/classes/EditorScenePostImport.xml:35
+msgid ""
+"Returns the source file path which got imported (e.g. [code]res://scene.dae[/"
+"code])."
+msgstr ""
+
+#: doc/classes/EditorScenePostImport.xml:41
+msgid "Returns the resource folder the imported scene file is located in."
+msgstr ""
+
+#: doc/classes/EditorScenePostImport.xml:48
+msgid ""
+"Called after the scene was imported. This method must return the modified "
+"version of the scene."
+msgstr ""
+
+#: doc/classes/EditorScript.xml:4
+msgid "Base script that can be used to add extension functions to the editor."
+msgstr ""
+
+#: doc/classes/EditorScript.xml:7
+msgid ""
+"Scripts extending this class and implementing its [method _run] method can "
+"be executed from the Script Editor's [b]File > Run[/b] menu option (or by "
+"pressing [code]Ctrl+Shift+X[/code]) while the editor is running. This is "
+"useful for adding custom in-editor functionality to Godot. For more complex "
+"additions, consider using [EditorPlugin]s instead.\n"
+"[b]Note:[/b] Extending scripts need to have [code]tool[/code] mode enabled.\n"
+"[b]Example script:[/b]\n"
+"[codeblock]\n"
+"tool\n"
+"extends EditorScript\n"
+"\n"
+"func _run():\n"
+" print(\"Hello from the Godot Editor!\")\n"
+"[/codeblock]\n"
+"[b]Note:[/b] The script is run in the Editor context, which means the output "
+"is visible in the console window started with the Editor (stdout) instead of "
+"the usual Godot [b]Output[/b] dock."
+msgstr ""
+
+#: doc/classes/EditorScript.xml:25
+msgid "This method is executed by the Editor when [b]File > Run[/b] is used."
+msgstr ""
+
+#: doc/classes/EditorScript.xml:32
+msgid ""
+"Adds [code]node[/code] as a child of the root node in the editor context.\n"
+"[b]Warning:[/b] The implementation of this method is currently disabled."
+msgstr ""
+
+#: doc/classes/EditorScript.xml:39
+msgid "Returns the [EditorInterface] singleton instance."
+msgstr ""
+
+#: doc/classes/EditorScript.xml:45
+msgid "Returns the Editor's currently active scene."
+msgstr ""
+
+#: doc/classes/EditorScriptPicker.xml:4
+msgid ""
+"Godot editor's control for selecting the [code]script[/code] property of a "
+"[Node]."
+msgstr ""
+
+#: doc/classes/EditorScriptPicker.xml:7
+msgid ""
+"Similar to [EditorResourcePicker] this [Control] node is used in the "
+"editor's Inspector dock, but only to edit the [code]script[/code] property "
+"of a [Node]. Default options for creating new resources of all possible "
+"subtypes are replaced with dedicated buttons that open the \"Attach Node "
+"Script\" dialog. Can be used with [EditorInspectorPlugin] to recreate the "
+"same behavior.\n"
+"[b]Note:[/b] You must set the [member script_owner] for the custom context "
+"menu items to work."
+msgstr ""
+
+#: doc/classes/EditorScriptPicker.xml:16
+msgid "The owner [Node] of the script property that holds the edited resource."
+msgstr ""
+
+#: doc/classes/EditorSelection.xml:4
+msgid "Manages the SceneTree selection in the editor."
+msgstr ""
+
+#: doc/classes/EditorSelection.xml:7
+msgid ""
+"This object manages the SceneTree selection in the editor.\n"
+"[b]Note:[/b] This class shouldn't be instantiated directly. Instead, access "
+"the singleton using [method EditorInterface.get_selection]."
+msgstr ""
+
+#: doc/classes/EditorSelection.xml:17
+msgid ""
+"Adds a node to the selection.\n"
+"[b]Note:[/b] The newly selected node will not be automatically edited in the "
+"inspector. If you want to edit a node, use [method EditorInterface."
+"edit_node]."
+msgstr ""
+
+#: doc/classes/EditorSelection.xml:24
+msgid "Clear the selection."
+msgstr ""
+
+#: doc/classes/EditorSelection.xml:30
+msgid "Gets the list of selected nodes."
+msgstr ""
+
+#: doc/classes/EditorSelection.xml:36
+msgid ""
+"Gets the list of selected nodes, optimized for transform operations (i.e. "
+"moving them, rotating, etc). This list avoids situations where a node is "
+"selected and also child/grandchild."
+msgstr ""
+
+#: doc/classes/EditorSelection.xml:43
+msgid "Removes a node from the selection."
+msgstr ""
+
+#: doc/classes/EditorSelection.xml:50
+msgid "Emitted when the selection changes."
+msgstr ""
+
+#: doc/classes/EditorSettings.xml:4
+msgid "Object that holds the project-independent editor settings."
+msgstr ""
+
+#: doc/classes/EditorSettings.xml:7
+msgid ""
+"Object that holds the project-independent editor settings. These settings "
+"are generally visible in the [b]Editor > Editor Settings[/b] menu.\n"
+"Property names use slash delimiters to distinguish sections. Setting values "
+"can be of any [Variant] type. It's recommended to use [code]snake_case[/"
+"code] for editor settings to be consistent with the Godot editor itself.\n"
+"Accessing the settings can be done using the following methods, such as:\n"
+"[codeblock]\n"
+"# `settings.set(\"some/property\", value)` also works as this class "
+"overrides `_set()` internally.\n"
+"settings.set_setting(\"some/property\",value)\n"
+"\n"
+"# `settings.get(\"some/property\", value)` also works as this class "
+"overrides `_get()` internally.\n"
+"settings.get_setting(\"some/property\")\n"
+"\n"
+"var list_of_settings = settings.get_property_list()\n"
+"[/codeblock]\n"
+"[b]Note:[/b] This class shouldn't be instantiated directly. Instead, access "
+"the singleton using [method EditorInterface.get_editor_settings]."
+msgstr ""
+
+#: doc/classes/EditorSettings.xml:28
+msgid ""
+"Adds a custom property info to a property. The dictionary must contain:\n"
+"- [code]name[/code]: [String] (the name of the property)\n"
+"- [code]type[/code]: [int] (see [enum Variant.Type])\n"
+"- optionally [code]hint[/code]: [int] (see [enum PropertyHint]) and "
+"[code]hint_string[/code]: [String]\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"editor_settings.set(\"category/property_name\", 0)\n"
+"\n"
+"var property_info = {\n"
+" \"name\": \"category/property_name\",\n"
+" \"type\": TYPE_INT,\n"
+" \"hint\": PROPERTY_HINT_ENUM,\n"
+" \"hint_string\": \"one,two,three\"\n"
+"}\n"
+"\n"
+"editor_settings.add_property_info(property_info)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/EditorSettings.xml:51
+msgid "Erases the setting whose name is specified by [code]property[/code]."
+msgstr ""
+
+#: doc/classes/EditorSettings.xml:57
+msgid "Returns the list of favorite files and directories for this project."
+msgstr ""
+
+#: doc/classes/EditorSettings.xml:66
+msgid ""
+"Returns project-specific metadata for the [code]section[/code] and "
+"[code]key[/code] specified. If the metadata doesn't exist, [code]default[/"
+"code] will be returned instead. See also [method set_project_metadata]."
+msgstr ""
+
+#: doc/classes/EditorSettings.xml:72
+msgid ""
+"Returns the project-specific settings path. Projects all have a unique "
+"subdirectory inside the settings path where project-specific settings are "
+"saved."
+msgstr ""
+
+#: doc/classes/EditorSettings.xml:78
+msgid ""
+"Returns the list of recently visited folders in the file dialog for this "
+"project."
+msgstr ""
+
+#: doc/classes/EditorSettings.xml:85
+msgid ""
+"Returns the value of the setting specified by [code]name[/code]. This is "
+"equivalent to using [method Object.get] on the EditorSettings instance."
+msgstr ""
+
+#: doc/classes/EditorSettings.xml:91
+msgid ""
+"Gets the global settings path for the engine. Inside this path, you can find "
+"some standard paths such as:\n"
+"[code]settings/tmp[/code] - Used for temporary storage of files\n"
+"[code]settings/templates[/code] - Where export templates are located"
+msgstr ""
+
+#: doc/classes/EditorSettings.xml:100
+msgid ""
+"Returns [code]true[/code] if the setting specified by [code]name[/code] "
+"exists, [code]false[/code] otherwise."
+msgstr ""
+
+#: doc/classes/EditorSettings.xml:107
+msgid ""
+"Returns [code]true[/code] if the setting specified by [code]name[/code] can "
+"have its value reverted to the default value, [code]false[/code] otherwise. "
+"When this method returns [code]true[/code], a Revert button will display "
+"next to the setting in the Editor Settings."
+msgstr ""
+
+#: doc/classes/EditorSettings.xml:114
+msgid ""
+"Returns the default value of the setting specified by [code]name[/code]. "
+"This is the value that would be applied when clicking the Revert button in "
+"the Editor Settings."
+msgstr ""
+
+#: doc/classes/EditorSettings.xml:121
+msgid "Sets the list of favorite files and directories for this project."
+msgstr ""
+
+#: doc/classes/EditorSettings.xml:130
+msgid ""
+"Sets the initial value of the setting specified by [code]name[/code] to "
+"[code]value[/code]. This is used to provide a value for the Revert button in "
+"the Editor Settings. If [code]update_current[/code] is true, the current "
+"value of the setting will be set to [code]value[/code] as well."
+msgstr ""
+
+#: doc/classes/EditorSettings.xml:139
+msgid ""
+"Sets project-specific metadata with the [code]section[/code], [code]key[/"
+"code] and [code]data[/code] specified. This metadata is stored outside the "
+"project folder and therefore won't be checked into version control. See also "
+"[method get_project_metadata]."
+msgstr ""
+
+#: doc/classes/EditorSettings.xml:146
+msgid ""
+"Sets the list of recently visited folders in the file dialog for this "
+"project."
+msgstr ""
+
+#: doc/classes/EditorSettings.xml:154
+msgid ""
+"Sets the [code]value[/code] of the setting specified by [code]name[/code]. "
+"This is equivalent to using [method Object.set] on the EditorSettings "
+"instance."
+msgstr ""
+
+#: doc/classes/EditorSettings.xml:161
+msgid "Emitted after any editor setting has changed."
+msgstr ""
+
+#: doc/classes/EditorSettings.xml:167
+msgid ""
+"Emitted after any editor setting has changed. It's used by various editor "
+"plugins to update their visuals on theme changes or logic on configuration "
+"changes."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmo.xml:4
+msgid "Custom gizmo for editing Spatial objects."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmo.xml:7
+msgid ""
+"Custom gizmo that is used for providing custom visualization and editing "
+"(handles) for 3D Spatial objects. See [EditorSpatialGizmoPlugin] for more "
+"information."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmo.xml:16
+msgid ""
+"Adds the specified [code]segments[/code] to the gizmo's collision shape for "
+"picking. Call this function during [method redraw]."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmo.xml:23
+msgid ""
+"Adds collision triangles to the gizmo for picking. A [TriangleMesh] can be "
+"generated from a regular [Mesh] too. Call this function during [method "
+"redraw]."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmo.xml:33
+msgid ""
+"Adds a list of handles (points) which can be used to deform the object being "
+"edited.\n"
+"There are virtual functions which will be called upon editing of these "
+"handles. Call this function during [method redraw]."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmo.xml:44
+msgid ""
+"Adds lines to the gizmo (as sets of 2 points), with a given material. The "
+"lines are used for visualizing the gizmo. Call this function during [method "
+"redraw]."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmo.xml:54
+msgid ""
+"Adds a mesh to the gizmo with the specified [code]billboard[/code] state, "
+"[code]skeleton[/code] and [code]material[/code]. If [code]billboard[/code] "
+"is [code]true[/code], the mesh will rotate to always face the camera. Call "
+"this function during [method redraw]."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmo.xml:63
+msgid ""
+"Adds an unscaled billboard for visualization. Call this function during "
+"[method redraw]."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmo.xml:69
+msgid ""
+"Removes everything in the gizmo including meshes, collisions and handles."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmo.xml:78
+msgid ""
+"Commit a handle being edited (handles must have been previously added by "
+"[method add_handles]).\n"
+"If the [code]cancel[/code] parameter is [code]true[/code], an option to "
+"restore the edited value to the original is provided."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmo.xml:86
+msgid ""
+"Gets the name of an edited handle (handles must have been previously added "
+"by [method add_handles]).\n"
+"Handles can be named for reference to the user when editing."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmo.xml:94
+msgid ""
+"Gets actual value of a handle. This value can be anything and used for "
+"eventually undoing the motion when calling [method commit_handle]."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmo.xml:100
+msgid ""
+"Returns the [EditorSpatialGizmoPlugin] that owns this gizmo. It's useful to "
+"retrieve materials using [method EditorSpatialGizmoPlugin.get_material]."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmo.xml:106
+msgid "Returns the Spatial node associated with this gizmo."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmo.xml:113
+msgid ""
+"Returns [code]true[/code] if the handle at index [code]index[/code] is "
+"highlighted by being hovered with the mouse."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmo.xml:119
+msgid ""
+"This function is called when the [Spatial] this gizmo refers to changes (the "
+"[method Spatial.update_gizmo] is called)."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmo.xml:128
+msgid ""
+"This function is used when the user drags a gizmo handle (previously added "
+"with [method add_handles]) in screen coordinates.\n"
+"The [Camera] is also provided so screen coordinates can be converted to "
+"raycasts."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmo.xml:136
+msgid ""
+"Sets the gizmo's hidden state. If [code]true[/code], the gizmo will be "
+"hidden. If [code]false[/code], it will be shown."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmo.xml:143
+msgid ""
+"Sets the reference [Spatial] node for the gizmo. [code]node[/code] must "
+"inherit from [Spatial]."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmoPlugin.xml:4
+msgid "Used by the editor to define Spatial gizmo types."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmoPlugin.xml:7
+msgid ""
+"EditorSpatialGizmoPlugin allows you to define a new type of Gizmo. There are "
+"two main ways to do so: extending [EditorSpatialGizmoPlugin] for the simpler "
+"gizmos, or creating a new [EditorSpatialGizmo] type. See the tutorial in the "
+"documentation for more info."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmoPlugin.xml:10
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/plugins/editor/spatial_gizmos."
+"html"
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmoPlugin.xml:18
+msgid ""
+"Adds a new material to the internal material list for the plugin. It can "
+"then be accessed with [method get_material]. Should not be overridden."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmoPlugin.xml:24
+msgid ""
+"Override this method to define whether the gizmo can be hidden or not. "
+"Returns [code]true[/code] if not overridden."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmoPlugin.xml:34
+msgid ""
+"Override this method to commit gizmo handles. Called for this plugin's "
+"active gizmos."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmoPlugin.xml:41
+msgid ""
+"Override this method to return a custom [EditorSpatialGizmo] for the spatial "
+"nodes of your choice, return [code]null[/code] for the rest of nodes. See "
+"also [method has_gizmo]."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmoPlugin.xml:50
+msgid ""
+"Creates a handle material with its variants (selected and/or editable) and "
+"adds them to the internal material list. They can then be accessed with "
+"[method get_material] and used in [method EditorSpatialGizmo.add_handles]. "
+"Should not be overridden.\n"
+"You can optionally provide a texture to use instead of the default icon."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmoPlugin.xml:61
+msgid ""
+"Creates an icon material with its variants (selected and/or editable) and "
+"adds them to the internal material list. They can then be accessed with "
+"[method get_material] and used in [method EditorSpatialGizmo."
+"add_unscaled_billboard]. Should not be overridden."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmoPlugin.xml:72
+msgid ""
+"Creates an unshaded material with its variants (selected and/or editable) "
+"and adds them to the internal material list. They can then be accessed with "
+"[method get_material] and used in [method EditorSpatialGizmo.add_mesh] and "
+"[method EditorSpatialGizmo.add_lines]. Should not be overridden."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmoPlugin.xml:80
+msgid ""
+"Override this method to provide gizmo's handle names. Called for this "
+"plugin's active gizmos."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmoPlugin.xml:88
+msgid ""
+"Gets actual value of a handle from gizmo. Called for this plugin's active "
+"gizmos."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmoPlugin.xml:96
+msgid ""
+"Gets material from the internal list of materials. If an "
+"[EditorSpatialGizmo] is provided, it will try to get the corresponding "
+"variant (selected and/or editable)."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmoPlugin.xml:102
+msgid ""
+"Override this method to provide the name that will appear in the gizmo "
+"visibility menu."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmoPlugin.xml:108
+msgid ""
+"Override this method to set the gizmo's priority. Higher values correspond "
+"to higher priority. If a gizmo with higher priority conflicts with another "
+"gizmo, only the gizmo with higher priority will be used.\n"
+"All built-in editor gizmos return a priority of [code]-1[/code]. If not "
+"overridden, this method will return [code]0[/code], which means custom "
+"gizmos will automatically override built-in gizmos."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmoPlugin.xml:116
+msgid ""
+"Override this method to define which Spatial nodes have a gizmo from this "
+"plugin. Whenever a [Spatial] node is added to a scene this method is called, "
+"if it returns [code]true[/code] the node gets a generic [EditorSpatialGizmo] "
+"assigned and is added to this plugin's list of active gizmos."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmoPlugin.xml:124
+msgid ""
+"Gets whether a handle is highlighted or not. Called for this plugin's active "
+"gizmos."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmoPlugin.xml:130
+msgid ""
+"Override this method to define whether a Spatial with this gizmo should be "
+"selectable even when the gizmo is hidden."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmoPlugin.xml:137
+msgid ""
+"Callback to redraw the provided gizmo. Called for this plugin's active "
+"gizmos."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmoPlugin.xml:147
+msgid ""
+"Update the value of a handle after it has been updated. Called for this "
+"plugin's active gizmos."
+msgstr ""
+
+#: doc/classes/EditorSpinSlider.xml:4
+msgid "Godot editor's control for editing numeric values."
+msgstr ""
+
+#: doc/classes/EditorSpinSlider.xml:7
+msgid ""
+"This [Control] node is used in the editor's Inspector dock to allow editing "
+"of numeric values. Can be used with [EditorInspectorPlugin] to recreate the "
+"same behavior."
+msgstr ""
+
+#: doc/classes/EditorVCSInterface.xml:4
+msgid ""
+"Version Control System (VCS) interface which reads and writes to the local "
+"VCS in use."
+msgstr ""
+
+#: doc/classes/EditorVCSInterface.xml:7
+msgid ""
+"Used by the editor to display VCS extracted information in the editor. The "
+"implementation of this API is included in VCS addons, which are essentially "
+"GDNative plugins that need to be put into the project folder. These VCS "
+"addons are scripts which are attached (on demand) to the object instance of "
+"[code]EditorVCSInterface[/code]. All the functions listed below, instead of "
+"performing the task themselves, they call the internally defined functions "
+"in the VCS addons to provide a plug-n-play experience."
+msgstr ""
+
+#: doc/classes/EditorVCSInterface.xml:16
+msgid ""
+"Creates a version commit if the addon is initialized, else returns without "
+"doing anything. Uses the files which have been staged previously, with the "
+"commit message set to a value as provided as in the argument."
+msgstr ""
+
+#: doc/classes/EditorVCSInterface.xml:23
+msgid ""
+"Returns an [Array] of [Dictionary] objects containing the diff output from "
+"the VCS in use, if a VCS addon is initialized, else returns an empty [Array] "
+"object. The diff contents also consist of some contextual lines which "
+"provide context to the observed line change in the file.\n"
+"Each [Dictionary] object has the line diff contents under the keys:\n"
+"- [code]\"content\"[/code] to store a [String] containing the line contents\n"
+"- [code]\"status\"[/code] to store a [String] which contains [code]\"+\"[/"
+"code] in case the content is a line addition but it stores a [code]\"-\"[/"
+"code] in case of deletion and an empty string in the case the line content "
+"is neither an addition nor a deletion.\n"
+"- [code]\"new_line_number\"[/code] to store an integer containing the new "
+"line number of the line content.\n"
+"- [code]\"line_count\"[/code] to store an integer containing the number of "
+"lines in the line content.\n"
+"- [code]\"old_line_number\"[/code] to store an integer containing the old "
+"line number of the line content.\n"
+"- [code]\"offset\"[/code] to store the offset of the line change since the "
+"first contextual line content."
+msgstr ""
+
+#: doc/classes/EditorVCSInterface.xml:36
+msgid ""
+"Returns a [Dictionary] containing the path of the detected file change "
+"mapped to an integer signifying what kind of change the corresponding file "
+"has experienced.\n"
+"The following integer values are being used to signify that the detected "
+"file is:\n"
+"- [code]0[/code]: New to the VCS working directory\n"
+"- [code]1[/code]: Modified\n"
+"- [code]2[/code]: Renamed\n"
+"- [code]3[/code]: Deleted\n"
+"- [code]4[/code]: Typechanged"
+msgstr ""
+
+#: doc/classes/EditorVCSInterface.xml:48
+msgid "Returns the project name of the VCS working directory."
+msgstr ""
+
+#: doc/classes/EditorVCSInterface.xml:54
+msgid ""
+"Returns the name of the VCS if the VCS has been initialized, else return an "
+"empty string."
+msgstr ""
+
+#: doc/classes/EditorVCSInterface.xml:61
+msgid ""
+"Initializes the VCS addon if not already. Uses the argument value as the "
+"path to the working directory of the project. Creates the initial commit if "
+"required. Returns [code]true[/code] if no failure occurs, else returns "
+"[code]false[/code]."
+msgstr ""
+
+#: doc/classes/EditorVCSInterface.xml:67
+msgid ""
+"Returns [code]true[/code] if the addon is ready to respond to function "
+"calls, else returns [code]false[/code]."
+msgstr ""
+
+#: doc/classes/EditorVCSInterface.xml:73
+msgid ""
+"Returns [code]true[/code] if the VCS addon has been initialized, else "
+"returns [code]false[/code]."
+msgstr ""
+
+#: doc/classes/EditorVCSInterface.xml:79
+msgid ""
+"Shuts down the VCS addon to allow cleanup code to run on call. Returns "
+"[code]true[/code] is no failure occurs, else returns [code]false[/code]."
+msgstr ""
+
+#: doc/classes/EditorVCSInterface.xml:86
+msgid ""
+"Stages the file which should be committed when [method EditorVCSInterface."
+"commit] is called. Argument should contain the absolute path."
+msgstr ""
+
+#: doc/classes/EditorVCSInterface.xml:93
+msgid ""
+"Unstages the file which was staged previously to be committed, so that it is "
+"no longer committed when [method EditorVCSInterface.commit] is called. "
+"Argument should contain the absolute path."
+msgstr ""
+
+#: doc/classes/EncodedObjectAsID.xml:4
+msgid "Holds a reference to an [Object]'s instance ID."
+msgstr ""
+
+#: doc/classes/EncodedObjectAsID.xml:7
+msgid ""
+"Utility class which holds a reference to the internal identifier of an "
+"[Object] instance, as given by [method Object.get_instance_id]. This ID can "
+"then be used to retrieve the object instance with [method @GDScript."
+"instance_from_id].\n"
+"This class is used internally by the editor inspector and script debugger, "
+"but can also be used in plugins to pass and display objects as their IDs."
+msgstr ""
+
+#: doc/classes/EncodedObjectAsID.xml:16
+msgid ""
+"The [Object] identifier stored in this [EncodedObjectAsID] instance. The "
+"object instance can be retrieved with [method @GDScript.instance_from_id]."
+msgstr ""
+
+#: doc/classes/Engine.xml:4
+msgid "Access to engine properties."
+msgstr ""
+
+#: doc/classes/Engine.xml:7
+msgid ""
+"The [Engine] singleton allows you to query and modify the project's run-time "
+"parameters, such as frames per second, time scale, and others."
+msgstr ""
+
+#: doc/classes/Engine.xml:15
+msgid ""
+"Returns engine author information in a Dictionary.\n"
+"[code]lead_developers[/code] - Array of Strings, lead developer names\n"
+"[code]founders[/code] - Array of Strings, founder names\n"
+"[code]project_managers[/code] - Array of Strings, project manager names\n"
+"[code]developers[/code] - Array of Strings, developer names"
+msgstr ""
+
+#: doc/classes/Engine.xml:25
+msgid ""
+"Returns an Array of copyright information Dictionaries.\n"
+"[code]name[/code] - String, component name\n"
+"[code]parts[/code] - Array of Dictionaries {[code]files[/code], "
+"[code]copyright[/code], [code]license[/code]} describing subsections of the "
+"component"
+msgstr ""
+
+#: doc/classes/Engine.xml:33
+msgid ""
+"Returns a Dictionary of Arrays of donor names.\n"
+"{[code]platinum_sponsors[/code], [code]gold_sponsors[/code], "
+"[code]silver_sponsors[/code], [code]bronze_sponsors[/code], "
+"[code]mini_sponsors[/code], [code]gold_donors[/code], [code]silver_donors[/"
+"code], [code]bronze_donors[/code]}"
+msgstr ""
+
+#: doc/classes/Engine.xml:40
+msgid ""
+"Returns the total number of frames drawn. On headless platforms, or if the "
+"render loop is disabled with [code]--disable-render-loop[/code] via command "
+"line, [method get_frames_drawn] always returns [code]0[/code]. See [method "
+"get_idle_frames]."
+msgstr ""
+
+#: doc/classes/Engine.xml:46
+msgid "Returns the frames per second of the running game."
+msgstr ""
+
+#: doc/classes/Engine.xml:52
+msgid ""
+"Returns the total number of frames passed since engine initialization which "
+"is advanced on each [b]idle frame[/b], regardless of whether the render loop "
+"is enabled. See also [method get_frames_drawn] and [method "
+"get_physics_frames].\n"
+"[method get_idle_frames] can be used to run expensive logic less often "
+"without relying on a [Timer]:\n"
+"[codeblock]\n"
+"func _process(_delta):\n"
+" if Engine.get_idle_frames() % 2 == 0:\n"
+" pass # Run expensive logic only once every 2 idle (render) frames "
+"here.\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Engine.xml:64
+msgid ""
+"Returns Dictionary of licenses used by Godot and included third party "
+"components."
+msgstr ""
+
+#: doc/classes/Engine.xml:70
+msgid "Returns Godot license text."
+msgstr ""
+
+#: doc/classes/Engine.xml:76
+msgid "Returns the main loop object (see [MainLoop] and [SceneTree])."
+msgstr ""
+
+#: doc/classes/Engine.xml:82
+msgid ""
+"Returns the total number of frames passed since engine initialization which "
+"is advanced on each [b]physics frame[/b]. See also [method "
+"get_idle_frames].\n"
+"[method get_physics_frames] can be used to run expensive logic less often "
+"without relying on a [Timer]:\n"
+"[codeblock]\n"
+"func _physics_process(_delta):\n"
+" if Engine.get_physics_frames() % 2 == 0:\n"
+" pass # Run expensive logic only once every 2 physics frames here.\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Engine.xml:94
+msgid ""
+"Returns the fraction through the current physics tick we are at the time of "
+"rendering the frame. This can be used to implement fixed timestep "
+"interpolation."
+msgstr ""
+
+#: doc/classes/Engine.xml:101
+msgid ""
+"Returns a global singleton with given [code]name[/code]. Often used for "
+"plugins, e.g. [code]GodotPayment[/code] on Android."
+msgstr ""
+
+#: doc/classes/Engine.xml:107
+msgid ""
+"Returns the current engine version information in a Dictionary.\n"
+"[code]major[/code] - Holds the major version number as an int\n"
+"[code]minor[/code] - Holds the minor version number as an int\n"
+"[code]patch[/code] - Holds the patch version number as an int\n"
+"[code]hex[/code] - Holds the full version number encoded as a "
+"hexadecimal int with one byte (2 places) per number (see example below)\n"
+"[code]status[/code] - Holds the status (e.g. \"beta\", \"rc1\", "
+"\"rc2\", ... \"stable\") as a String\n"
+"[code]build[/code] - Holds the build name (e.g. \"custom_build\") as a "
+"String\n"
+"[code]hash[/code] - Holds the full Git commit hash as a String\n"
+"[code]year[/code] - Holds the year the version was released in as an "
+"int\n"
+"[code]string[/code] - [code]major[/code] + [code]minor[/code] + "
+"[code]patch[/code] + [code]status[/code] + [code]build[/code] in a single "
+"String\n"
+"The [code]hex[/code] value is encoded as follows, from left to right: one "
+"byte for the major, one byte for the minor, one byte for the patch version. "
+"For example, \"3.1.12\" would be [code]0x03010C[/code]. [b]Note:[/b] It's "
+"still an int internally, and printing it will give you its decimal "
+"representation, which is not particularly meaningful. Use hexadecimal "
+"literals for easy version comparisons from code:\n"
+"[codeblock]\n"
+"if Engine.get_version_info().hex >= 0x030200:\n"
+" # Do things specific to version 3.2 or later\n"
+"else:\n"
+" # Do things specific to versions before 3.2\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Engine.xml:130
+msgid ""
+"Returns [code]true[/code] if a singleton with given [code]name[/code] exists "
+"in global scope."
+msgstr ""
+
+#: doc/classes/Engine.xml:136
+msgid ""
+"Returns [code]true[/code] if the game is inside the fixed process and "
+"physics phase of the game loop."
+msgstr ""
+
+#: doc/classes/Engine.xml:142
+msgid ""
+"If [code]true[/code], the script is currently running inside the editor. "
+"This is useful for [code]tool[/code] scripts to conditionally draw editor "
+"helpers, or prevent accidentally running \"game\" code that would affect the "
+"scene state while in the editor:\n"
+"[codeblock]\n"
+"if Engine.editor_hint:\n"
+" draw_gizmos()\n"
+"else:\n"
+" simulate_physics()\n"
+"[/codeblock]\n"
+"See [url=https://docs.godotengine.org/en/3.4/tutorials/misc/"
+"running_code_in_the_editor.html]Running code in the editor[/url] in the "
+"documentation for more information.\n"
+"[b]Note:[/b] To detect whether the script is run from an editor [i]build[/i] "
+"(e.g. when pressing [code]F5[/code]), use [method OS.has_feature] with the "
+"[code]\"editor\"[/code] argument instead. [code]OS.has_feature(\"editor\")[/"
+"code] will evaluate to [code]true[/code] both when the code is running in "
+"the editor and when running the project from the editor, but it will "
+"evaluate to [code]false[/code] when the code is run from an exported project."
+msgstr ""
+
+#: doc/classes/Engine.xml:153
+msgid ""
+"The number of fixed iterations per second. This controls how often physics "
+"simulation and [method Node._physics_process] methods are run. This value "
+"should generally always be set to [code]60[/code] or above, as Godot doesn't "
+"interpolate the physics step. As a result, values lower than [code]60[/code] "
+"will look stuttery. This value can be increased to make input more reactive "
+"or work around tunneling issues, but keep in mind doing so will increase CPU "
+"usage."
+msgstr ""
+
+#: doc/classes/Engine.xml:156
+msgid ""
+"Controls how much physics ticks are synchronized with real time. For 0 or "
+"less, the ticks are synchronized. Such values are recommended for network "
+"games, where clock synchronization matters. Higher values cause higher "
+"deviation of the in-game clock and real clock but smooth out framerate "
+"jitters. The default value of 0.5 should be fine for most; values above 2 "
+"could cause the game to react to dropped frames with a noticeable delay and "
+"are not recommended.\n"
+"[b]Note:[/b] For best results, when using a custom physics interpolation "
+"solution, the physics jitter fix should be disabled by setting [member "
+"physics_jitter_fix] to [code]0[/code]."
+msgstr ""
+
+#: doc/classes/Engine.xml:160
+msgid ""
+"If [code]false[/code], stops printing error and warning messages to the "
+"console and editor Output log. This can be used to hide error and warning "
+"messages during unit test suite runs. This property is equivalent to the "
+"[member ProjectSettings.application/run/disable_stderr] project setting.\n"
+"[b]Warning:[/b] If you set this to [code]false[/code] anywhere in the "
+"project, important error messages may be hidden even if they are emitted "
+"from other scripts. If this is set to [code]false[/code] in a [code]@tool[/"
+"code] script, this will also impact the editor itself. Do [i]not[/i] report "
+"bugs before ensuring error messages are enabled (as they are by default).\n"
+"[b]Note:[/b] This property does not impact the editor's Errors tab when "
+"running a project from the editor."
+msgstr ""
+
+#: doc/classes/Engine.xml:165
+msgid ""
+"The desired frames per second. If the hardware cannot keep up, this setting "
+"may not be respected. A value of 0 means no limit."
+msgstr ""
+
+#: doc/classes/Engine.xml:168
+msgid ""
+"Controls how fast or slow the in-game clock ticks versus the real life one. "
+"It defaults to 1.0. A value of 2.0 means the game moves twice as fast as "
+"real life, whilst a value of 0.5 means the game moves at half the regular "
+"speed."
+msgstr ""
+
+#: doc/classes/Environment.xml:4
+msgid ""
+"Resource for environment nodes (like [WorldEnvironment]) that define "
+"multiple rendering options."
+msgstr ""
+
+#: doc/classes/Environment.xml:7
+msgid ""
+"Resource for environment nodes (like [WorldEnvironment]) that define "
+"multiple environment operations (such as background [Sky] or [Color], "
+"ambient light, fog, depth-of-field...). These parameters affect the final "
+"render of the scene. The order of these operations is:\n"
+"- Depth of Field Blur\n"
+"- Glow\n"
+"- Tonemap (Auto Exposure)\n"
+"- Adjustments\n"
+"These effects will only apply when the [Viewport]'s intended usage is \"3D\" "
+"or \"3D Without Effects\". This can be configured for the root Viewport with "
+"[member ProjectSettings.rendering/quality/intended_usage/"
+"framebuffer_allocation], or for specific Viewports via the [member Viewport."
+"usage] property."
+msgstr ""
+
+#: doc/classes/Environment.xml:15 doc/classes/WorldEnvironment.xml:12
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/3d/"
+"environment_and_post_processing.html"
+msgstr ""
+
+#: doc/classes/Environment.xml:16
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/3d/high_dynamic_range.html"
+msgstr ""
+
+#: doc/classes/Environment.xml:17 doc/classes/Material.xml:10
+#: doc/classes/Mesh.xml:10 doc/classes/MeshInstance.xml:10
+#: doc/classes/WorldEnvironment.xml:13
+msgid "https://godotengine.org/asset-library/asset/123"
+msgstr ""
+
+#: doc/classes/Environment.xml:26
+msgid ""
+"Returns [code]true[/code] if the glow level [code]idx[/code] is specified, "
+"[code]false[/code] otherwise."
+msgstr ""
+
+#: doc/classes/Environment.xml:34
+msgid ""
+"Enables or disables the glow level at index [code]idx[/code]. Each level "
+"relies on the previous level. This means that enabling higher glow levels "
+"will slow down the glow effect rendering, even if previous levels aren't "
+"enabled."
+msgstr ""
+
+#: doc/classes/Environment.xml:40
+msgid ""
+"The global brightness value of the rendered scene. Effective only if "
+"[code]adjustment_enabled[/code] is [code]true[/code]."
+msgstr ""
+
+#: doc/classes/Environment.xml:43
+msgid ""
+"Applies the provided [Texture] resource to affect the global color aspect of "
+"the rendered scene. Effective only if [code]adjustment_enabled[/code] is "
+"[code]true[/code]."
+msgstr ""
+
+#: doc/classes/Environment.xml:46
+msgid ""
+"The global contrast value of the rendered scene (default value is 1). "
+"Effective only if [code]adjustment_enabled[/code] is [code]true[/code]."
+msgstr ""
+
+#: doc/classes/Environment.xml:49
+msgid ""
+"If [code]true[/code], enables the [code]adjustment_*[/code] properties "
+"provided by this resource. If [code]false[/code], modifications to the "
+"[code]adjustment_*[/code] properties will have no effect on the rendered "
+"scene."
+msgstr ""
+
+#: doc/classes/Environment.xml:52
+msgid ""
+"The global color saturation value of the rendered scene (default value is "
+"1). Effective only if [code]adjustment_enabled[/code] is [code]true[/code]."
+msgstr ""
+
+#: doc/classes/Environment.xml:55
+msgid "The ambient light's [Color]."
+msgstr ""
+
+#: doc/classes/Environment.xml:58
+msgid ""
+"The ambient light's energy. The higher the value, the stronger the light."
+msgstr ""
+
+#: doc/classes/Environment.xml:61
+msgid ""
+"Defines the amount of light that the sky brings on the scene. A value of 0 "
+"means that the sky's light emission has no effect on the scene illumination, "
+"thus all ambient illumination is provided by the ambient light. On the "
+"contrary, a value of 1 means that all the light that affects the scene is "
+"provided by the sky, thus the ambient light parameter has no effect on the "
+"scene."
+msgstr ""
+
+#: doc/classes/Environment.xml:64
+msgid ""
+"If [code]true[/code], enables the tonemapping auto exposure mode of the "
+"scene renderer. If [code]true[/code], the renderer will automatically "
+"determine the exposure setting to adapt to the scene's illumination and the "
+"observed light."
+msgstr ""
+
+#: doc/classes/Environment.xml:67
+msgid "The maximum luminance value for the auto exposure."
+msgstr ""
+
+#: doc/classes/Environment.xml:70
+msgid "The minimum luminance value for the auto exposure."
+msgstr ""
+
+#: doc/classes/Environment.xml:73
+msgid ""
+"The scale of the auto exposure effect. Affects the intensity of auto "
+"exposure."
+msgstr ""
+
+#: doc/classes/Environment.xml:76
+msgid ""
+"The speed of the auto exposure effect. Affects the time needed for the "
+"camera to perform auto exposure."
+msgstr ""
+
+#: doc/classes/Environment.xml:79
+msgid "The ID of the camera feed to show in the background."
+msgstr ""
+
+#: doc/classes/Environment.xml:82
+msgid ""
+"The maximum layer ID to display. Only effective when using the [constant "
+"BG_CANVAS] background mode."
+msgstr ""
+
+#: doc/classes/Environment.xml:85
+msgid ""
+"The [Color] displayed for clear areas of the scene. Only effective when "
+"using the [constant BG_COLOR] or [constant BG_COLOR_SKY] background modes)."
+msgstr ""
+
+#: doc/classes/Environment.xml:88
+msgid "The power of the light emitted by the background."
+msgstr ""
+
+#: doc/classes/Environment.xml:91
+msgid "The background mode. See [enum BGMode] for possible values."
+msgstr ""
+
+#: doc/classes/Environment.xml:94
+msgid "The [Sky] resource defined as background."
+msgstr ""
+
+#: doc/classes/Environment.xml:97
+msgid "The [Sky] resource's custom field of view."
+msgstr ""
+
+#: doc/classes/Environment.xml:100
+msgid "The [Sky] resource's rotation expressed as a [Basis]."
+msgstr ""
+
+#: doc/classes/Environment.xml:103
+msgid "The [Sky] resource's rotation expressed as Euler angles in radians."
+msgstr ""
+
+#: doc/classes/Environment.xml:106
+msgid "The [Sky] resource's rotation expressed as Euler angles in degrees."
+msgstr ""
+
+#: doc/classes/Environment.xml:109
+msgid "The amount of far blur for the depth-of-field effect."
+msgstr ""
+
+#: doc/classes/Environment.xml:112
+msgid ""
+"The distance from the camera where the far blur effect affects the rendering."
+msgstr ""
+
+#: doc/classes/Environment.xml:115
+msgid "If [code]true[/code], enables the depth-of-field far blur effect."
+msgstr ""
+
+#: doc/classes/Environment.xml:118
+msgid ""
+"The depth-of-field far blur's quality. Higher values can mitigate the "
+"visible banding effect seen at higher strengths, but are much slower."
+msgstr ""
+
+#: doc/classes/Environment.xml:121
+msgid "The length of the transition between the no-blur area and far blur."
+msgstr ""
+
+#: doc/classes/Environment.xml:124
+msgid "The amount of near blur for the depth-of-field effect."
+msgstr ""
+
+#: doc/classes/Environment.xml:127
+msgid ""
+"Distance from the camera where the near blur effect affects the rendering."
+msgstr ""
+
+#: doc/classes/Environment.xml:130
+msgid "If [code]true[/code], enables the depth-of-field near blur effect."
+msgstr ""
+
+#: doc/classes/Environment.xml:133
+msgid ""
+"The depth-of-field near blur's quality. Higher values can mitigate the "
+"visible banding effect seen at higher strengths, but are much slower."
+msgstr ""
+
+#: doc/classes/Environment.xml:136
+msgid "The length of the transition between the near blur and no-blur area."
+msgstr ""
+
+#: doc/classes/Environment.xml:139
+msgid "The fog's [Color]."
+msgstr ""
+
+#: doc/classes/Environment.xml:142
+msgid "The fog's depth starting distance from the camera."
+msgstr ""
+
+#: doc/classes/Environment.xml:145
+msgid ""
+"The fog depth's intensity curve. A number of presets are available in the "
+"[b]Inspector[/b] by right-clicking the curve."
+msgstr ""
+
+#: doc/classes/Environment.xml:148
+msgid ""
+"If [code]true[/code], the depth fog effect is enabled. When enabled, fog "
+"will appear in the distance (relative to the camera)."
+msgstr ""
+
+#: doc/classes/Environment.xml:151
+msgid ""
+"The fog's depth end distance from the camera. If this value is set to 0, it "
+"will be equal to the current camera's [member Camera.far] value."
+msgstr ""
+
+#: doc/classes/Environment.xml:154
+msgid ""
+"If [code]true[/code], fog effects are enabled. [member fog_height_enabled] "
+"and/or [member fog_depth_enabled] must be set to [code]true[/code] to "
+"actually display fog."
+msgstr ""
+
+#: doc/classes/Environment.xml:157
+msgid ""
+"The height fog's intensity. A number of presets are available in the "
+"[b]Inspector[/b] by right-clicking the curve."
+msgstr ""
+
+#: doc/classes/Environment.xml:160
+msgid ""
+"If [code]true[/code], the height fog effect is enabled. When enabled, fog "
+"will appear in a defined height range, regardless of the distance from the "
+"camera. This can be used to simulate \"deep water\" effects with a lower "
+"performance cost compared to a dedicated shader."
+msgstr ""
+
+#: doc/classes/Environment.xml:163
+msgid ""
+"The Y coordinate where the height fog will be the most intense. If this "
+"value is greater than [member fog_height_min], fog will be displayed from "
+"bottom to top. Otherwise, it will be displayed from top to bottom."
+msgstr ""
+
+#: doc/classes/Environment.xml:166
+msgid ""
+"The Y coordinate where the height fog will be the least intense. If this "
+"value is greater than [member fog_height_max], fog will be displayed from "
+"top to bottom. Otherwise, it will be displayed from bottom to top."
+msgstr ""
+
+#: doc/classes/Environment.xml:169
+msgid ""
+"The intensity of the depth fog color transition when looking towards the "
+"sun. The sun's direction is determined automatically using the "
+"DirectionalLight node in the scene."
+msgstr ""
+
+#: doc/classes/Environment.xml:172
+msgid "The depth fog's [Color] when looking towards the sun."
+msgstr ""
+
+#: doc/classes/Environment.xml:175
+msgid ""
+"The intensity of the fog light transmittance effect. Amount of light that "
+"the fog transmits."
+msgstr ""
+
+#: doc/classes/Environment.xml:178
+msgid ""
+"Enables fog's light transmission effect. If [code]true[/code], light will be "
+"more visible in the fog to simulate light scattering as in real life."
+msgstr ""
+
+#: doc/classes/Environment.xml:181
+msgid ""
+"Smooths out the blockiness created by sampling higher levels, at the cost of "
+"performance.\n"
+"[b]Note:[/b] When using the GLES2 renderer, this is only available if the "
+"GPU supports the [code]GL_EXT_gpu_shader4[/code] extension."
+msgstr ""
+
+#: doc/classes/Environment.xml:185
+msgid "The glow blending mode."
+msgstr ""
+
+#: doc/classes/Environment.xml:188
+msgid ""
+"The bloom's intensity. If set to a value higher than [code]0[/code], this "
+"will make glow visible in areas darker than the [member glow_hdr_threshold]."
+msgstr ""
+
+#: doc/classes/Environment.xml:191
+msgid "If [code]true[/code], the glow effect is enabled."
+msgstr ""
+
+#: doc/classes/Environment.xml:194
+msgid ""
+"The higher threshold of the HDR glow. Areas brighter than this threshold "
+"will be clamped for the purposes of the glow effect."
+msgstr ""
+
+#: doc/classes/Environment.xml:197
+msgid "The bleed scale of the HDR glow."
+msgstr ""
+
+#: doc/classes/Environment.xml:200
+msgid ""
+"The lower threshold of the HDR glow. When using the GLES2 renderer (which "
+"doesn't support HDR), this needs to be below [code]1.0[/code] for glow to be "
+"visible. A value of [code]0.9[/code] works well in this case."
+msgstr ""
+
+#: doc/classes/Environment.xml:203
+msgid ""
+"Takes more samples during downsample pass of glow. This ensures that single "
+"pixels are captured by glow which makes the glow look smoother and more "
+"stable during movement. However, it is very expensive and makes the glow "
+"post process take twice as long."
+msgstr ""
+
+#: doc/classes/Environment.xml:206
+msgid ""
+"The glow intensity. When using the GLES2 renderer, this should be increased "
+"to 1.5 to compensate for the lack of HDR rendering."
+msgstr ""
+
+#: doc/classes/Environment.xml:209
+msgid ""
+"If [code]true[/code], the 1st level of glow is enabled. This is the most "
+"\"local\" level (least blurry)."
+msgstr ""
+
+#: doc/classes/Environment.xml:212
+msgid "If [code]true[/code], the 2th level of glow is enabled."
+msgstr ""
+
+#: doc/classes/Environment.xml:215
+msgid "If [code]true[/code], the 3th level of glow is enabled."
+msgstr ""
+
+#: doc/classes/Environment.xml:218
+msgid "If [code]true[/code], the 4th level of glow is enabled."
+msgstr ""
+
+#: doc/classes/Environment.xml:221
+msgid "If [code]true[/code], the 5th level of glow is enabled."
+msgstr ""
+
+#: doc/classes/Environment.xml:224
+msgid "If [code]true[/code], the 6th level of glow is enabled."
+msgstr ""
+
+#: doc/classes/Environment.xml:227
+msgid ""
+"If [code]true[/code], the 7th level of glow is enabled. This is the most "
+"\"global\" level (blurriest)."
+msgstr ""
+
+#: doc/classes/Environment.xml:230
+msgid ""
+"The glow strength. When using the GLES2 renderer, this should be increased "
+"to 1.3 to compensate for the lack of HDR rendering."
+msgstr ""
+
+#: doc/classes/Environment.xml:233
+msgid "The depth tolerance for screen-space reflections."
+msgstr ""
+
+#: doc/classes/Environment.xml:236
+msgid ""
+"If [code]true[/code], screen-space reflections are enabled. Screen-space "
+"reflections are more accurate than reflections from [GIProbe]s or "
+"[ReflectionProbe]s, but are slower and can't reflect surfaces occluded by "
+"others."
+msgstr ""
+
+#: doc/classes/Environment.xml:239
+msgid ""
+"The fade-in distance for screen-space reflections. Affects the area from the "
+"reflected material to the screen-space reflection)."
+msgstr ""
+
+#: doc/classes/Environment.xml:242
+msgid ""
+"The fade-out distance for screen-space reflections. Affects the area from "
+"the screen-space reflection to the \"global\" reflection."
+msgstr ""
+
+#: doc/classes/Environment.xml:245
+msgid ""
+"The maximum number of steps for screen-space reflections. Higher values are "
+"slower."
+msgstr ""
+
+#: doc/classes/Environment.xml:248
+msgid ""
+"If [code]true[/code], screen-space reflections will take the material "
+"roughness into account."
+msgstr ""
+
+#: doc/classes/Environment.xml:251
+msgid ""
+"The screen-space ambient occlusion intensity on materials that have an AO "
+"texture defined. Values higher than [code]0[/code] will make the SSAO effect "
+"visible in areas darkened by AO textures."
+msgstr ""
+
+#: doc/classes/Environment.xml:254
+msgid ""
+"The screen-space ambient occlusion bias. This should be kept high enough to "
+"prevent \"smooth\" curves from being affected by ambient occlusion."
+msgstr ""
+
+#: doc/classes/Environment.xml:257
+msgid ""
+"The screen-space ambient occlusion blur quality. See [enum SSAOBlur] for "
+"possible values."
+msgstr ""
+
+#: doc/classes/Environment.xml:260
+msgid "The screen-space ambient occlusion color."
+msgstr ""
+
+#: doc/classes/Environment.xml:263
+msgid "The screen-space ambient occlusion edge sharpness."
+msgstr ""
+
+#: doc/classes/Environment.xml:266
+msgid ""
+"If [code]true[/code], the screen-space ambient occlusion effect is enabled. "
+"This darkens objects' corners and cavities to simulate ambient light not "
+"reaching the entire object as in real life. This works well for small, "
+"dynamic objects, but baked lighting or ambient occlusion textures will do a "
+"better job at displaying ambient occlusion on large static objects. This is "
+"a costly effect and should be disabled first when running into performance "
+"issues."
+msgstr ""
+
+#: doc/classes/Environment.xml:269
+msgid ""
+"The primary screen-space ambient occlusion intensity. See also [member "
+"ssao_radius]."
+msgstr ""
+
+#: doc/classes/Environment.xml:272
+msgid ""
+"The secondary screen-space ambient occlusion intensity. See also [member "
+"ssao_radius2]."
+msgstr ""
+
+#: doc/classes/Environment.xml:275
+msgid ""
+"The screen-space ambient occlusion intensity in direct light. In real life, "
+"ambient occlusion only applies to indirect light, which means its effects "
+"can't be seen in direct light. Values higher than [code]0[/code] will make "
+"the SSAO effect visible in direct light."
+msgstr ""
+
+#: doc/classes/Environment.xml:278
+msgid ""
+"The screen-space ambient occlusion quality. Higher qualities will make "
+"better use of small objects for ambient occlusion, but are slower."
+msgstr ""
+
+#: doc/classes/Environment.xml:281
+msgid "The primary screen-space ambient occlusion radius."
+msgstr ""
+
+#: doc/classes/Environment.xml:284
+msgid ""
+"The secondary screen-space ambient occlusion radius. If set to a value "
+"higher than [code]0[/code], enables the secondary screen-space ambient "
+"occlusion effect which can be used to improve the effect's appearance (at "
+"the cost of performance)."
+msgstr ""
+
+#: doc/classes/Environment.xml:287
+msgid "The default exposure used for tonemapping."
+msgstr ""
+
+#: doc/classes/Environment.xml:290
+msgid ""
+"The tonemapping mode to use. Tonemapping is the process that \"converts\" "
+"HDR values to be suitable for rendering on a LDR display. (Godot doesn't "
+"support rendering on HDR displays yet.)"
+msgstr ""
+
+#: doc/classes/Environment.xml:293
+msgid ""
+"The white reference value for tonemapping. Only effective if the [member "
+"tonemap_mode] isn't set to [constant TONE_MAPPER_LINEAR]."
+msgstr ""
+
+#: doc/classes/Environment.xml:298
+msgid ""
+"Keeps on screen every pixel drawn in the background. This is the fastest "
+"background mode, but it can only be safely used in fully-interior scenes (no "
+"visible sky or sky reflections). If enabled in a scene where the background "
+"is visible, \"ghost trail\" artifacts will be visible when moving the camera."
+msgstr ""
+
+#: doc/classes/Environment.xml:301
+msgid ""
+"Clears the background using the clear color defined in [member "
+"ProjectSettings.rendering/environment/default_clear_color]."
+msgstr ""
+
+#: doc/classes/Environment.xml:304
+msgid "Clears the background using a custom clear color."
+msgstr ""
+
+#: doc/classes/Environment.xml:307
+msgid "Displays a user-defined sky in the background."
+msgstr ""
+
+#: doc/classes/Environment.xml:310
+msgid ""
+"Clears the background using a custom clear color and allows defining a sky "
+"for shading and reflection. This mode is slightly faster than [constant "
+"BG_SKY] and should be preferred in scenes where reflections can be visible, "
+"but the sky itself never is (e.g. top-down camera)."
+msgstr ""
+
+#: doc/classes/Environment.xml:313
+msgid "Displays a [CanvasLayer] in the background."
+msgstr ""
+
+#: doc/classes/Environment.xml:316
+msgid "Displays a camera feed in the background."
+msgstr ""
+
+#: doc/classes/Environment.xml:319
+msgid "Represents the size of the [enum BGMode] enum."
+msgstr ""
+
+#: doc/classes/Environment.xml:322
+msgid ""
+"Additive glow blending mode. Mostly used for particles, glows (bloom), lens "
+"flare, bright sources."
+msgstr ""
+
+#: doc/classes/Environment.xml:325
+msgid ""
+"Screen glow blending mode. Increases brightness, used frequently with bloom."
+msgstr ""
+
+#: doc/classes/Environment.xml:328
+msgid ""
+"Soft light glow blending mode. Modifies contrast, exposes shadows and "
+"highlights (vivid bloom)."
+msgstr ""
+
+#: doc/classes/Environment.xml:331
+msgid ""
+"Replace glow blending mode. Replaces all pixels' color by the glow value. "
+"This can be used to simulate a full-screen blur effect by tweaking the glow "
+"parameters to match the original image's brightness."
+msgstr ""
+
+#: doc/classes/Environment.xml:334
+msgid ""
+"Linear tonemapper operator. Reads the linear data and passes it on "
+"unmodified."
+msgstr ""
+
+#: doc/classes/Environment.xml:337
+msgid ""
+"Reinhardt tonemapper operator. Performs a variation on rendered pixels' "
+"colors by this formula: [code]color = color / (1 + color)[/code]."
+msgstr ""
+
+#: doc/classes/Environment.xml:340
+msgid "Filmic tonemapper operator."
+msgstr ""
+
+#: doc/classes/Environment.xml:343
+msgid ""
+"Academy Color Encoding System tonemapper operator. Performs an aproximation "
+"of the ACES tonemapping curve."
+msgstr ""
+
+#: doc/classes/Environment.xml:346
+msgid ""
+"High quality Academy Color Encoding System tonemapper operator that matches "
+"the industry standard. Performs a more physically accurate curve fit which "
+"better simulates how light works in the real world. The color of lights and "
+"emissive materials will become lighter as the emissive energy increases, and "
+"will eventually become white if the light is bright enough to saturate the "
+"camera sensor."
+msgstr ""
+
+#: doc/classes/Environment.xml:349
+msgid "Low depth-of-field blur quality (fastest)."
+msgstr ""
+
+#: doc/classes/Environment.xml:352
+msgid "Medium depth-of-field blur quality."
+msgstr ""
+
+#: doc/classes/Environment.xml:355
+msgid "High depth-of-field blur quality (slowest)."
+msgstr ""
+
+#: doc/classes/Environment.xml:358
+msgid "No blur for the screen-space ambient occlusion effect (fastest)."
+msgstr ""
+
+#: doc/classes/Environment.xml:361
+msgid "1×1 blur for the screen-space ambient occlusion effect."
+msgstr ""
+
+#: doc/classes/Environment.xml:364
+msgid "2×2 blur for the screen-space ambient occlusion effect."
+msgstr ""
+
+#: doc/classes/Environment.xml:367
+msgid "3×3 blur for the screen-space ambient occlusion effect (slowest)."
+msgstr ""
+
+#: doc/classes/Environment.xml:370
+msgid "Low quality for the screen-space ambient occlusion effect (fastest)."
+msgstr ""
+
+#: doc/classes/Environment.xml:373
+msgid "Low quality for the screen-space ambient occlusion effect."
+msgstr ""
+
+#: doc/classes/Environment.xml:376
+msgid "Low quality for the screen-space ambient occlusion effect (slowest)."
+msgstr ""
+
+#: doc/classes/Expression.xml:4
+msgid "A class that stores an expression you can execute."
+msgstr ""
+
+#: doc/classes/Expression.xml:7
+msgid ""
+"An expression can be made of any arithmetic operation, built-in math "
+"function call, method call of a passed instance, or built-in type "
+"construction call.\n"
+"An example expression text using the built-in math functions could be "
+"[code]sqrt(pow(3,2) + pow(4,2))[/code].\n"
+"In the following example we use a [LineEdit] node to write our expression "
+"and show the result.\n"
+"[codeblock]\n"
+"onready var expression = Expression.new()\n"
+"\n"
+"func _ready():\n"
+" $LineEdit.connect(\"text_entered\", self, \"_on_text_entered\")\n"
+"\n"
+"func _on_text_entered(command):\n"
+" var error = expression.parse(command, [])\n"
+" if error != OK:\n"
+" print(expression.get_error_text())\n"
+" return\n"
+" var result = expression.execute([], null, true)\n"
+" if not expression.has_execute_failed():\n"
+" $LineEdit.text = str(result)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Expression.xml:35
+msgid ""
+"Executes the expression that was previously parsed by [method parse] and "
+"returns the result. Before you use the returned object, you should check if "
+"the method failed by calling [method has_execute_failed].\n"
+"If you defined input variables in [method parse], you can specify their "
+"values in the inputs array, in the same order."
+msgstr ""
+
+#: doc/classes/Expression.xml:42
+msgid "Returns the error text if [method parse] has failed."
+msgstr ""
+
+#: doc/classes/Expression.xml:48
+msgid "Returns [code]true[/code] if [method execute] has failed."
+msgstr ""
+
+#: doc/classes/Expression.xml:56
+msgid ""
+"Parses the expression and returns an [enum Error] code.\n"
+"You can optionally specify names of variables that may appear in the "
+"expression with [code]input_names[/code], so that you can bind them when it "
+"gets executed."
+msgstr ""
+
+#: doc/classes/ExternalTexture.xml:4
+msgid "Enable OpenGL ES external texture extension."
+msgstr ""
+
+#: doc/classes/ExternalTexture.xml:7
+msgid ""
+"Enable support for the OpenGL ES external texture extension as defined by "
+"[url=https://www.khronos.org/registry/OpenGL/extensions/OES/"
+"OES_EGL_image_external.txt]OES_EGL_image_external[/url].\n"
+"[b]Note:[/b] This is only supported for Android platforms."
+msgstr ""
+
+#: doc/classes/ExternalTexture.xml:16
+msgid "Returns the external texture name."
+msgstr ""
+
+#: doc/classes/ExternalTexture.xml:23
+msgid "External texture size."
+msgstr ""
+
+#: doc/classes/File.xml:4
+msgid "Type to handle file reading and writing operations."
+msgstr ""
+
+#: doc/classes/File.xml:7
+msgid ""
+"File type. This is used to permanently store data into the user device's "
+"file system and to read from it. This can be used to store game save data or "
+"player configuration files, for example.\n"
+"Here's a sample on how to write and read from a file:\n"
+"[codeblock]\n"
+"func save(content):\n"
+" var file = File.new()\n"
+" file.open(\"user://save_game.dat\", File.WRITE)\n"
+" file.store_string(content)\n"
+" file.close()\n"
+"\n"
+"func load():\n"
+" var file = File.new()\n"
+" file.open(\"user://save_game.dat\", File.READ)\n"
+" var content = file.get_as_text()\n"
+" file.close()\n"
+" return content\n"
+"[/codeblock]\n"
+"In the example above, the file will be saved in the user data folder as "
+"specified in the [url=https://docs.godotengine.org/en/3.4/tutorials/io/"
+"data_paths.html]Data paths[/url] documentation.\n"
+"[b]Note:[/b] To access project resources once exported, it is recommended to "
+"use [ResourceLoader] instead of the [File] API, as some files are converted "
+"to engine-specific formats and their original source files might not be "
+"present in the exported PCK package.\n"
+"[b]Note:[/b] Files are automatically closed only if the process exits "
+"\"normally\" (such as by clicking the window manager's close button or "
+"pressing [b]Alt + F4[/b]). If you stop the project execution by pressing "
+"[b]F8[/b] while the project is running, the file won't be closed as the game "
+"process will be killed. You can work around this by calling [method flush] "
+"at regular intervals."
+msgstr ""
+
+#: doc/classes/File.xml:35
+msgid ""
+"Closes the currently opened file and prevents subsequent read/write "
+"operations. Use [method flush] to persist the data to disk without closing "
+"the file."
+msgstr ""
+
+#: doc/classes/File.xml:41
+msgid ""
+"Returns [code]true[/code] if the file cursor has already read past the end "
+"of the file.\n"
+"[b]Note:[/b] [code]eof_reached() == false[/code] cannot be used to check "
+"whether there is more data available. To loop while there is more data "
+"available, use:\n"
+"[codeblock]\n"
+"while file.get_position() < file.get_len():\n"
+" # Read data\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/File.xml:53
+msgid ""
+"Returns [code]true[/code] if the file exists in the given path.\n"
+"[b]Note:[/b] Many resources types are imported (e.g. textures or sound "
+"files), and their source asset will not be included in the exported game, as "
+"only the imported version is used. See [method ResourceLoader.exists] for an "
+"alternative approach that takes resource remapping into account."
+msgstr ""
+
+#: doc/classes/File.xml:60
+msgid ""
+"Writes the file's buffer to disk. Flushing is automatically performed when "
+"the file is closed. This means you don't need to call [method flush] "
+"manually before closing a file using [method close]. Still, calling [method "
+"flush] can be used to ensure the data is safe even if the project crashes "
+"instead of being closed gracefully.\n"
+"[b]Note:[/b] Only call [method flush] when you actually need it. Otherwise, "
+"it will decrease performance due to constant disk writes."
+msgstr ""
+
+#: doc/classes/File.xml:67
+msgid ""
+"Returns the next 16 bits from the file as an integer. See [method store_16] "
+"for details on what values can be stored and retrieved this way."
+msgstr ""
+
+#: doc/classes/File.xml:73
+msgid ""
+"Returns the next 32 bits from the file as an integer. See [method store_32] "
+"for details on what values can be stored and retrieved this way."
+msgstr ""
+
+#: doc/classes/File.xml:79
+msgid ""
+"Returns the next 64 bits from the file as an integer. See [method store_64] "
+"for details on what values can be stored and retrieved this way."
+msgstr ""
+
+#: doc/classes/File.xml:85
+msgid ""
+"Returns the next 8 bits from the file as an integer. See [method store_8] "
+"for details on what values can be stored and retrieved this way."
+msgstr ""
+
+#: doc/classes/File.xml:91
+msgid ""
+"Returns the whole file as a [String].\n"
+"Text is interpreted as being UTF-8 encoded."
+msgstr ""
+
+#: doc/classes/File.xml:99
+msgid "Returns next [code]len[/code] bytes of the file as a [PoolByteArray]."
+msgstr ""
+
+#: doc/classes/File.xml:106
+msgid ""
+"Returns the next value of the file in CSV (Comma-Separated Values) format. "
+"You can pass a different delimiter [code]delim[/code] to use other than the "
+"default [code]\",\"[/code] (comma). This delimiter must be one-character "
+"long, and cannot be a double quotation mark.\n"
+"Text is interpreted as being UTF-8 encoded. Text values must be enclosed in "
+"double quotes if they include the delimiter character. Double quotes within "
+"a text value can be escaped by doubling their occurrence.\n"
+"For example, the following CSV lines are valid and will be properly parsed "
+"as two strings each:\n"
+"[codeblock]\n"
+"Alice,\"Hello, Bob!\"\n"
+"Bob,Alice! What a surprise!\n"
+"Alice,\"I thought you'd reply with \"\"Hello, world\"\".\"\n"
+"[/codeblock]\n"
+"Note how the second line can omit the enclosing quotes as it does not "
+"include the delimiter. However it [i]could[/i] very well use quotes, it was "
+"only written without for demonstration purposes. The third line must use "
+"[code]\"\"[/code] for each quotation mark that needs to be interpreted as "
+"such instead of the end of a text value."
+msgstr ""
+
+#: doc/classes/File.xml:120
+msgid "Returns the next 64 bits from the file as a floating-point number."
+msgstr ""
+
+#: doc/classes/File.xml:126
+msgid ""
+"Returns the last error that happened when trying to perform operations. "
+"Compare with the [code]ERR_FILE_*[/code] constants from [enum Error]."
+msgstr ""
+
+#: doc/classes/File.xml:132
+msgid "Returns the next 32 bits from the file as a floating-point number."
+msgstr ""
+
+#: doc/classes/File.xml:138
+msgid "Returns the size of the file in bytes."
+msgstr ""
+
+#: doc/classes/File.xml:144
+msgid ""
+"Returns the next line of the file as a [String].\n"
+"Text is interpreted as being UTF-8 encoded."
+msgstr ""
+
+#: doc/classes/File.xml:152
+msgid ""
+"Returns an MD5 String representing the file at the given path or an empty "
+"[String] on failure."
+msgstr ""
+
+#: doc/classes/File.xml:159
+msgid ""
+"Returns the last time the [code]file[/code] was modified in unix timestamp "
+"format or returns a [String] \"ERROR IN [code]file[/code]\". This unix "
+"timestamp can be converted to datetime by using [method OS."
+"get_datetime_from_unix_time]."
+msgstr ""
+
+#: doc/classes/File.xml:165
+msgid ""
+"Returns a [String] saved in Pascal format from the file.\n"
+"Text is interpreted as being UTF-8 encoded."
+msgstr ""
+
+#: doc/classes/File.xml:172
+msgid "Returns the path as a [String] for the current open file."
+msgstr ""
+
+#: doc/classes/File.xml:178
+msgid "Returns the absolute path as a [String] for the current open file."
+msgstr ""
+
+#: doc/classes/File.xml:184
+msgid "Returns the file cursor's position."
+msgstr ""
+
+#: doc/classes/File.xml:190
+msgid "Returns the next bits from the file as a floating-point number."
+msgstr ""
+
+#: doc/classes/File.xml:197
+msgid ""
+"Returns a SHA-256 [String] representing the file at the given path or an "
+"empty [String] on failure."
+msgstr ""
+
+#: doc/classes/File.xml:204
+msgid ""
+"Returns the next [Variant] value from the file. If [code]allow_objects[/"
+"code] is [code]true[/code], decoding objects is allowed.\n"
+"[b]Warning:[/b] Deserialized objects can contain code which gets executed. "
+"Do not use this option if the serialized object comes from untrusted sources "
+"to avoid potential security threats such as remote code execution."
+msgstr ""
+
+#: doc/classes/File.xml:211
+msgid "Returns [code]true[/code] if the file is currently opened."
+msgstr ""
+
+#: doc/classes/File.xml:219
+msgid "Opens the file for writing or reading, depending on the flags."
+msgstr ""
+
+#: doc/classes/File.xml:228
+msgid ""
+"Opens a compressed file for reading or writing.\n"
+"[b]Note:[/b] [method open_compressed] can only read files that were saved by "
+"Godot, not third-party compression formats. See [url=https://github.com/"
+"godotengine/godot/issues/28999]GitHub issue #28999[/url] for a workaround."
+msgstr ""
+
+#: doc/classes/File.xml:238
+msgid ""
+"Opens an encrypted file in write or read mode. You need to pass a binary key "
+"to encrypt/decrypt it.\n"
+"[b]Note:[/b] The provided key must be 32 bytes long."
+msgstr ""
+
+#: doc/classes/File.xml:248
+msgid ""
+"Opens an encrypted file in write or read mode. You need to pass a password "
+"to encrypt/decrypt it."
+msgstr ""
+
+#: doc/classes/File.xml:255
+msgid ""
+"Changes the file reading/writing cursor to the specified position (in bytes "
+"from the beginning of the file)."
+msgstr ""
+
+#: doc/classes/File.xml:262
+msgid ""
+"Changes the file reading/writing cursor to the specified position (in bytes "
+"from the end of the file).\n"
+"[b]Note:[/b] This is an offset, so you should use negative numbers or the "
+"cursor will be at the end of the file."
+msgstr ""
+
+#: doc/classes/File.xml:270
+msgid ""
+"Stores an integer as 16 bits in the file.\n"
+"[b]Note:[/b] The [code]value[/code] should lie in the interval [code][0, "
+"2^16 - 1][/code]. Any other value will overflow and wrap around.\n"
+"To store a signed integer, use [method store_64] or store a signed integer "
+"from the interval [code][-2^15, 2^15 - 1][/code] (i.e. keeping one bit for "
+"the signedness) and compute its sign manually when reading. For example:\n"
+"[codeblock]\n"
+"const MAX_15B = 1 << 15\n"
+"const MAX_16B = 1 << 16\n"
+"\n"
+"func unsigned16_to_signed(unsigned):\n"
+" return (unsigned + MAX_15B) % MAX_16B - MAX_15B\n"
+"\n"
+"func _ready():\n"
+" var f = File.new()\n"
+" f.open(\"user://file.dat\", File.WRITE_READ)\n"
+" f.store_16(-42) # This wraps around and stores 65494 (2^16 - 42).\n"
+" f.store_16(121) # In bounds, will store 121.\n"
+" f.seek(0) # Go back to start to read the stored value.\n"
+" var read1 = f.get_16() # 65494\n"
+" var read2 = f.get_16() # 121\n"
+" var converted1 = unsigned16_to_signed(read1) # -42\n"
+" var converted2 = unsigned16_to_signed(read2) # 121\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/File.xml:297
+msgid ""
+"Stores an integer as 32 bits in the file.\n"
+"[b]Note:[/b] The [code]value[/code] should lie in the interval [code][0, "
+"2^32 - 1][/code]. Any other value will overflow and wrap around.\n"
+"To store a signed integer, use [method store_64], or convert it manually "
+"(see [method store_16] for an example)."
+msgstr ""
+
+#: doc/classes/File.xml:306
+msgid ""
+"Stores an integer as 64 bits in the file.\n"
+"[b]Note:[/b] The [code]value[/code] must lie in the interval [code][-2^63, "
+"2^63 - 1][/code] (i.e. be a valid [int] value)."
+msgstr ""
+
+#: doc/classes/File.xml:314
+msgid ""
+"Stores an integer as 8 bits in the file.\n"
+"[b]Note:[/b] The [code]value[/code] should lie in the interval [code][0, 255]"
+"[/code]. Any other value will overflow and wrap around.\n"
+"To store a signed integer, use [method store_64], or convert it manually "
+"(see [method store_16] for an example)."
+msgstr ""
+
+#: doc/classes/File.xml:323
+msgid "Stores the given array of bytes in the file."
+msgstr ""
+
+#: doc/classes/File.xml:331
+msgid ""
+"Store the given [PoolStringArray] in the file as a line formatted in the CSV "
+"(Comma-Separated Values) format. You can pass a different delimiter "
+"[code]delim[/code] to use other than the default [code]\",\"[/code] (comma). "
+"This delimiter must be one-character long.\n"
+"Text will be encoded as UTF-8."
+msgstr ""
+
+#: doc/classes/File.xml:339
+msgid "Stores a floating-point number as 64 bits in the file."
+msgstr ""
+
+#: doc/classes/File.xml:346
+msgid "Stores a floating-point number as 32 bits in the file."
+msgstr ""
+
+#: doc/classes/File.xml:353
+msgid ""
+"Appends [code]line[/code] to the file followed by a line return character "
+"([code]\\n[/code]), encoding the text as UTF-8."
+msgstr ""
+
+#: doc/classes/File.xml:360
+msgid ""
+"Stores the given [String] as a line in the file in Pascal format (i.e. also "
+"store the length of the string).\n"
+"Text will be encoded as UTF-8."
+msgstr ""
+
+#: doc/classes/File.xml:368
+msgid "Stores a floating-point number in the file."
+msgstr ""
+
+#: doc/classes/File.xml:375
+msgid ""
+"Appends [code]string[/code] to the file without a line return, encoding the "
+"text as UTF-8."
+msgstr ""
+
+#: doc/classes/File.xml:383
+msgid ""
+"Stores any Variant value in the file. If [code]full_objects[/code] is "
+"[code]true[/code], encoding objects is allowed (and can potentially include "
+"code).\n"
+"[b]Note:[/b] Not all properties are included. Only properties that are "
+"configured with the [constant PROPERTY_USAGE_STORAGE] flag set will be "
+"serialized. You can add a new usage flag to a property by overriding the "
+"[method Object._get_property_list] method in your class. You can also check "
+"how property usage is configured by calling [method Object."
+"_get_property_list]. See [enum PropertyUsageFlags] for the possible usage "
+"flags."
+msgstr ""
+
+#: doc/classes/File.xml:390
+msgid ""
+"If [code]true[/code], the file is read with big-endian [url=https://en."
+"wikipedia.org/wiki/Endianness]endianness[/url]. If [code]false[/code], the "
+"file is read with little-endian endianness. If in doubt, leave this to "
+"[code]false[/code] as most files are written with little-endian endianness.\n"
+"[b]Note:[/b] [member endian_swap] is only about the file format, not the CPU "
+"type. The CPU endianness doesn't affect the default endianness for files "
+"written.\n"
+"[b]Note:[/b] This is always reset to [code]false[/code] whenever you open "
+"the file. Therefore, you must set [member endian_swap] [i]after[/i] opening "
+"the file, not before."
+msgstr ""
+
+#: doc/classes/File.xml:397
+msgid ""
+"Opens the file for read operations. The cursor is positioned at the "
+"beginning of the file."
+msgstr ""
+
+#: doc/classes/File.xml:400
+msgid ""
+"Opens the file for write operations. The file is created if it does not "
+"exist, and truncated if it does."
+msgstr ""
+
+#: doc/classes/File.xml:403
+msgid ""
+"Opens the file for read and write operations. Does not truncate the file. "
+"The cursor is positioned at the beginning of the file."
+msgstr ""
+
+#: doc/classes/File.xml:406
+msgid ""
+"Opens the file for read and write operations. The file is created if it does "
+"not exist, and truncated if it does. The cursor is positioned at the "
+"beginning of the file."
+msgstr ""
+
+#: doc/classes/File.xml:409
+msgid "Uses the [url=http://fastlz.org/]FastLZ[/url] compression method."
+msgstr ""
+
+#: doc/classes/File.xml:412
+msgid ""
+"Uses the [url=https://en.wikipedia.org/wiki/DEFLATE]DEFLATE[/url] "
+"compression method."
+msgstr ""
+
+#: doc/classes/File.xml:415
+msgid ""
+"Uses the [url=https://facebook.github.io/zstd/]Zstandard[/url] compression "
+"method."
+msgstr ""
+
+#: doc/classes/File.xml:418
+msgid "Uses the [url=https://www.gzip.org/]gzip[/url] compression method."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:4
+msgid "Dialog for selecting files or directories in the filesystem."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:7
+msgid ""
+"FileDialog is a preset dialog used to choose files and directories in the "
+"filesystem. It supports filter masks. The FileDialog automatically sets its "
+"window title according to the [member mode]. If you want to use a custom "
+"title, disable this by setting [member mode_overrides_title] to [code]false[/"
+"code]."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:16
+msgid ""
+"Adds [code]filter[/code] as a custom filter; [code]filter[/code] should be "
+"of the form [code]\"filename.extension ; Description\"[/code]. For example, "
+"[code]\"*.png ; PNG Images\"[/code]."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:22
+msgid "Clear all the added filters in the dialog."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:28
+msgid "Clear currently selected items in the dialog."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:34
+msgid ""
+"Returns the LineEdit for the selected file.\n"
+"[b]Warning:[/b] This is a required internal node, removing and freeing it "
+"may cause a crash. If you wish to hide it or any of its children, use their "
+"[member CanvasItem.visible] property."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:41
+msgid ""
+"Returns the vertical box container of the dialog, custom controls can be "
+"added to it.\n"
+"[b]Warning:[/b] This is a required internal node, removing and freeing it "
+"may cause a crash. If you wish to hide it or any of its children, use their "
+"[member CanvasItem.visible] property."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:48
+msgid "Invalidate and update the current dialog content list."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:54
+msgid ""
+"The file system access scope. See enum [code]Access[/code] constants.\n"
+"[b]Warning:[/b] Currently, in sandboxed environments such as HTML5 builds or "
+"sandboxed macOS apps, FileDialog cannot access the host file system. See "
+"[url=https://github.com/godotengine/godot-proposals/issues/1123]godot-"
+"proposals#1123[/url]."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:58
+msgid "The current working directory of the file dialog."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:61
+msgid "The currently selected file of the file dialog."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:64
+msgid "The currently selected file path of the file dialog."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:68
+msgid ""
+"The available file type filters. For example, this shows only [code].png[/"
+"code] and [code].gd[/code] files: [code]set_filters(PoolStringArray([\"*."
+"png ; PNG Images\",\"*.gd ; GDScript Files\"]))[/code]."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:71
+msgid ""
+"The dialog's open or save mode, which affects the selection behavior. See "
+"enum [code]Mode[/code] constants."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:74
+msgid ""
+"If [code]true[/code], changing the [code]Mode[/code] property will set the "
+"window title accordingly (e.g. setting mode to [constant MODE_OPEN_FILE] "
+"will change the window title to \"Open a File\")."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:77
+msgid "If [code]true[/code], the dialog will show hidden files."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:85
+msgid "Emitted when the user selects a directory."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:91
+msgid ""
+"Emitted when the user selects a file by double-clicking it or pressing the "
+"[b]OK[/b] button."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:97
+msgid "Emitted when the user selects multiple files."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:103
+msgid "The dialog allows selecting one, and only one file."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:106
+msgid "The dialog allows selecting multiple files."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:109
+msgid ""
+"The dialog only allows selecting a directory, disallowing the selection of "
+"any file."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:112
+msgid "The dialog allows selecting one file or directory."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:115
+msgid "The dialog will warn when a file exists."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:118
+msgid ""
+"The dialog only allows accessing files under the [Resource] path "
+"([code]res://[/code])."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:121
+msgid ""
+"The dialog only allows accessing files under user data path ([code]user://[/"
+"code])."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:124
+msgid "The dialog allows accessing files on the whole file system."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:129
+msgid "Custom icon for files."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:132
+msgid "The color modulation applied to the file icon."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:135
+msgid ""
+"The color tint for disabled files (when the [FileDialog] is used in open "
+"folder mode)."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:138
+msgid "Custom icon for folders."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:141
+msgid "The color modulation applied to the folder icon."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:144
+msgid "Custom icon for the parent folder arrow."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:147
+msgid "Custom icon for the reload button."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:150
+msgid "Custom icon for the toggle hidden button."
+msgstr ""
+
+#: doc/classes/float.xml:4
+msgid "Float built-in type."
+msgstr ""
+
+#: doc/classes/float.xml:7
+msgid ""
+"The [float] built-in type is a 64-bit double-precision floating-point "
+"number, equivalent to [code]double[/code] in C++. This type has 14 reliable "
+"decimal digits of precision. The [float] type can be stored in [Variant], "
+"which is the generic type used by the engine. The maximum value of [float] "
+"is approximately [code]1.79769e308[/code], and the minimum is approximately "
+"[code]-1.79769e308[/code].\n"
+"Most methods and properties in the engine use 32-bit single-precision "
+"floating-point numbers instead, equivalent to [code]float[/code] in C++, "
+"which have 6 reliable decimal digits of precision. For data structures such "
+"as [Vector2] and [Vector3], Godot uses 32-bit floating-point numbers.\n"
+"Math done using the [float] type is not guaranteed to be exact or "
+"deterministic, and will often result in small errors. You should usually use "
+"the [method @GDScript.is_equal_approx] and [method @GDScript.is_zero_approx] "
+"methods instead of [code]==[/code] to compare [float] values for equality."
+msgstr ""
+
+#: doc/classes/float.xml:12
+msgid "https://en.wikipedia.org/wiki/Double-precision_floating-point_format"
+msgstr ""
+
+#: doc/classes/float.xml:13
+msgid "https://en.wikipedia.org/wiki/Single-precision_floating-point_format"
+msgstr ""
+
+#: doc/classes/float.xml:20
+msgid ""
+"Cast a [bool] value to a floating-point value, [code]float(true)[/code] will "
+"be equal to 1.0 and [code]float(false)[/code] will be equal to 0.0."
+msgstr ""
+
+#: doc/classes/float.xml:27
+msgid ""
+"Cast an [int] value to a floating-point value, [code]float(1)[/code] will be "
+"equal to 1.0."
+msgstr ""
+
+#: doc/classes/float.xml:34
+msgid ""
+"Cast a [String] value to a floating-point value. This method accepts float "
+"value strings like [code]\"1.23\"[/code] and exponential notation strings "
+"for its parameter so calling [code]float(\"1e3\")[/code] will return 1000.0 "
+"and calling [code]float(\"1e-3\")[/code] will return 0.001. Calling this "
+"method with an invalid float string will return 0. This method stops parsing "
+"at the first invalid character and will return the parsed result so far, so "
+"calling [code]float(\"1a3\")[/code] will return 1 while calling "
+"[code]float(\"1e3a2\")[/code] will return 1000.0."
+msgstr ""
+
+#: doc/classes/Font.xml:4
+msgid "Internationalized font and text drawing support."
+msgstr ""
+
+#: doc/classes/Font.xml:7
+msgid ""
+"Font contains a Unicode-compatible character set, as well as the ability to "
+"draw it with variable width, ascent, descent and kerning. For creating fonts "
+"from TTF files (or other font formats), see the editor support for fonts.\n"
+"[b]Note:[/b] If a [DynamicFont] doesn't contain a character used in a "
+"string, the character in question will be replaced with codepoint "
+"[code]0xfffd[/code] if it's available in the [DynamicFont]. If this "
+"replacement character isn't available in the DynamicFont, the character will "
+"be hidden without displaying any replacement character in the string.\n"
+"[b]Note:[/b] If a [BitmapFont] doesn't contain a character used in a string, "
+"the character in question will be hidden without displaying any replacement "
+"character in the string.\n"
+"[b]Note:[/b] Unicode characters after [code]0xffff[/code] (such as most "
+"emoji) are [i]not[/i] supported on Windows. They will display as unknown "
+"characters instead. This will be resolved in Godot 4.0."
+msgstr ""
+
+#: doc/classes/Font.xml:24
+msgid ""
+"Draw [code]string[/code] into a canvas item using the font at a given "
+"position, with [code]modulate[/code] color, and optionally clipping the "
+"width. [code]position[/code] specifies the baseline, not the top. To draw "
+"from the top, [i]ascent[/i] must be added to the Y axis.\n"
+"See also [method CanvasItem.draw_string]."
+msgstr ""
+
+#: doc/classes/Font.xml:37
+msgid ""
+"Draw character [code]char[/code] into a canvas item using the font at a "
+"given position, with [code]modulate[/code] color, and optionally kerning if "
+"[code]next[/code] is passed. clipping the width. [code]position[/code] "
+"specifies the baseline, not the top. To draw from the top, [i]ascent[/i] "
+"must be added to the Y axis. The width used by the character is returned, "
+"making this function useful for drawing strings character by character."
+msgstr ""
+
+#: doc/classes/Font.xml:43
+msgid "Returns the font ascent (number of pixels above the baseline)."
+msgstr ""
+
+#: doc/classes/Font.xml:51
+msgid ""
+"Returns the size of a character, optionally taking kerning into account if "
+"the next character is provided. Note that the height returned is the font "
+"height (see [method get_height]) and has no relation to the glyph height."
+msgstr ""
+
+#: doc/classes/Font.xml:57
+msgid "Returns the font descent (number of pixels below the baseline)."
+msgstr ""
+
+#: doc/classes/Font.xml:63
+msgid "Returns the total font height (ascent plus descent) in pixels."
+msgstr ""
+
+#: doc/classes/Font.xml:70
+msgid ""
+"Returns the size of a string, taking kerning and advance into account. Note "
+"that the height returned is the font height (see [method get_height]) and "
+"has no relation to the string."
+msgstr ""
+
+#: doc/classes/Font.xml:78
+msgid ""
+"Returns the size that the string would have with word wrapping enabled with "
+"a fixed [code]width[/code]."
+msgstr ""
+
+#: doc/classes/Font.xml:84
+msgid "Returns [code]true[/code] if the font has an outline."
+msgstr ""
+
+#: doc/classes/Font.xml:95
+msgid ""
+"After editing a font (changing size, ascent, char rects, etc.). Call this "
+"function to propagate changes to controls that might use it."
+msgstr ""
+
+#: doc/classes/FuncRef.xml:4
+msgid "Reference to a function in an object."
+msgstr ""
+
+#: doc/classes/FuncRef.xml:7
+msgid ""
+"In GDScript, functions are not [i]first-class objects[/i]. This means it is "
+"impossible to store them directly as variables, return them from another "
+"function, or pass them as arguments.\n"
+"However, by creating a [FuncRef] using the [method @GDScript.funcref] "
+"function, a reference to a function in a given object can be created, passed "
+"around and called."
+msgstr ""
+
+#: doc/classes/FuncRef.xml:16
+msgid ""
+"Calls the referenced function previously set in [member function] or [method "
+"@GDScript.funcref]."
+msgstr ""
+
+#: doc/classes/FuncRef.xml:23
+msgid ""
+"Calls the referenced function previously set in [member function] or [method "
+"@GDScript.funcref]. Contrarily to [method call_func], this method does not "
+"support a variable number of arguments but expects all parameters to be "
+"passed via a single [Array]."
+msgstr ""
+
+#: doc/classes/FuncRef.xml:29
+msgid "Returns whether the object still exists and has the function assigned."
+msgstr ""
+
+#: doc/classes/FuncRef.xml:36
+msgid ""
+"The object containing the referenced function. This object must be of a type "
+"actually inheriting from [Object], not a built-in type such as [int], "
+"[Vector2] or [Dictionary]."
+msgstr ""
+
+#: doc/classes/FuncRef.xml:42
+msgid "The name of the referenced function."
+msgstr ""
+
+#: modules/gdnative/doc_classes/GDNativeLibrary.xml:4
+msgid ""
+"An external library containing functions or script classes to use in Godot."
+msgstr ""
+
+#: modules/gdnative/doc_classes/GDNativeLibrary.xml:7
+msgid ""
+"A GDNative library can implement [NativeScript]s, global functions to call "
+"with the [GDNative] class, or low-level engine extensions through interfaces "
+"such as [ARVRInterfaceGDNative]. The library must be compiled for each "
+"platform and architecture that the project will run on."
+msgstr ""
+
+#: modules/gdnative/doc_classes/GDNativeLibrary.xml:10
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/plugins/gdnative/gdnative-c-"
+"example.html"
+msgstr ""
+
+#: modules/gdnative/doc_classes/GDNativeLibrary.xml:11
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/plugins/gdnative/gdnative-cpp-"
+"example.html"
+msgstr ""
+
+#: modules/gdnative/doc_classes/GDNativeLibrary.xml:17
+msgid ""
+"Returns paths to all dependency libraries for the current platform and "
+"architecture."
+msgstr ""
+
+#: modules/gdnative/doc_classes/GDNativeLibrary.xml:23
+msgid ""
+"Returns the path to the dynamic library file for the current platform and "
+"architecture."
+msgstr ""
+
+#: modules/gdnative/doc_classes/GDNativeLibrary.xml:29
+msgid ""
+"This resource in INI-style [ConfigFile] format, as in [code].gdnlib[/code] "
+"files."
+msgstr ""
+
+#: modules/gdnative/doc_classes/GDNativeLibrary.xml:32
+msgid ""
+"If [code]true[/code], Godot loads only one copy of the library and each "
+"script that references the library will share static data like static or "
+"global variables.\n"
+"If [code]false[/code], Godot loads a separate copy of the library into "
+"memory for each script that references it."
+msgstr ""
+
+#: modules/gdnative/doc_classes/GDNativeLibrary.xml:36
+msgid ""
+"If [code]true[/code], the editor will temporarily unload the library "
+"whenever the user switches away from the editor window, allowing the user to "
+"recompile the library without restarting Godot.\n"
+"[b]Note:[/b] If the library defines tool scripts that run inside the editor, "
+"[code]reloadable[/code] must be [code]false[/code]. Otherwise, the editor "
+"will attempt to unload the tool scripts while they're in use and crash."
+msgstr ""
+
+#: modules/gdnative/doc_classes/GDNativeLibrary.xml:40
+msgid ""
+"If [code]true[/code], Godot loads the library at startup rather than the "
+"first time a script uses the library, calling [code]{prefix}"
+"gdnative_singleton[/code] after initializing the library (where [code]"
+"{prefix}[/code] is the value of [member symbol_prefix]). The library remains "
+"loaded as long as Godot is running.\n"
+"[b]Note:[/b] A singleton library cannot be [member reloadable]."
+msgstr ""
+
+#: modules/gdnative/doc_classes/GDNativeLibrary.xml:44
+msgid ""
+"The prefix this library's entry point functions begin with. For example, a "
+"GDNativeLibrary would declare its [code]gdnative_init[/code] function as "
+"[code]godot_gdnative_init[/code] by default.\n"
+"On platforms that require statically linking libraries (currently only iOS), "
+"each library must have a different [code]symbol_prefix[/code]."
+msgstr ""
+
+#: modules/gdscript/doc_classes/GDScript.xml:4
+msgid "A script implemented in the GDScript programming language."
+msgstr ""
+
+#: modules/gdscript/doc_classes/GDScript.xml:7
+msgid ""
+"A script implemented in the GDScript programming language. The script "
+"extends the functionality of all objects that instance it.\n"
+"[method new] creates a new instance of the script. [method Object."
+"set_script] extends an existing object, if that object's class matches one "
+"of the script's base classes."
+msgstr ""
+
+#: modules/gdscript/doc_classes/GDScript.xml:11
+msgid ""
+"https://docs.godotengine.org/en/3.4/getting_started/scripting/gdscript/index."
+"html"
+msgstr ""
+
+#: modules/gdscript/doc_classes/GDScript.xml:17
+msgid "Returns byte code for the script source code."
+msgstr ""
+
+#: modules/gdscript/doc_classes/GDScript.xml:23
+msgid ""
+"Returns a new instance of the script.\n"
+"For example:\n"
+"[codeblock]\n"
+"var MyClass = load(\"myclass.gd\")\n"
+"var instance = MyClass.new()\n"
+"assert(instance.get_script() == MyClass)\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/GDScriptFunctionState.xml:4
+msgid "State of a function call after yielding."
+msgstr ""
+
+#: modules/gdscript/doc_classes/GDScriptFunctionState.xml:7
+msgid ""
+"Calling [method @GDScript.yield] within a function will cause that function "
+"to yield and return its current state as an object of this type. The yielded "
+"function call can then be resumed later by calling [method resume] on this "
+"state object."
+msgstr ""
+
+#: modules/gdscript/doc_classes/GDScriptFunctionState.xml:16
+msgid ""
+"Check whether the function call may be resumed. This is not the case if the "
+"function state was already resumed.\n"
+"If [code]extended_check[/code] is enabled, it also checks if the associated "
+"script and object still exist. The extended check is done in debug mode as "
+"part of [method GDScriptFunctionState.resume], but you can use this if you "
+"know you may be trying to resume without knowing for sure the object and/or "
+"script have survived up to that point."
+msgstr ""
+
+#: modules/gdscript/doc_classes/GDScriptFunctionState.xml:24
+msgid ""
+"Resume execution of the yielded function call.\n"
+"If handed an argument, return the argument from the [method @GDScript.yield] "
+"call in the yielded function call. You can pass e.g. an [Array] to hand "
+"multiple arguments.\n"
+"This function returns what the resumed function call returns, possibly "
+"another function state if yielded again."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:4
+msgid ""
+"The generic 6-degrees-of-freedom joint can implement a variety of joint "
+"types by locking certain axes' rotation or translation."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:7
+msgid ""
+"The first 3 DOF axes are linear axes, which represent translation of Bodies, "
+"and the latter 3 DOF axes represent the angular motion. Each axis can be "
+"either locked, or limited."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:93
+msgid ""
+"The amount of rotational damping across the X axis.\n"
+"The lower, the longer an impulse from one side takes to travel to the other "
+"side."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:97
+msgid "If [code]true[/code], rotation across the X axis is limited."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:100
+msgid ""
+"When rotating across the X axis, this error tolerance factor defines how "
+"much the correction gets slowed down. The lower, the slower."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:103
+msgid ""
+"The maximum amount of force that can occur, when rotating around the X axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:106
+msgid ""
+"The minimum rotation in negative direction to break loose and rotate around "
+"the X axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:109
+msgid ""
+"The amount of rotational restitution across the X axis. The lower, the more "
+"restitution occurs."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:112
+msgid "The speed of all rotations across the X axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:115
+msgid ""
+"The minimum rotation in positive direction to break loose and rotate around "
+"the X axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:118
+msgid ""
+"The amount of rotational damping across the Y axis. The lower, the more "
+"dampening occurs."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:121
+msgid "If [code]true[/code], rotation across the Y axis is limited."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:124
+msgid ""
+"When rotating across the Y axis, this error tolerance factor defines how "
+"much the correction gets slowed down. The lower, the slower."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:127
+msgid ""
+"The maximum amount of force that can occur, when rotating around the Y axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:130
+msgid ""
+"The minimum rotation in negative direction to break loose and rotate around "
+"the Y axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:133
+msgid ""
+"The amount of rotational restitution across the Y axis. The lower, the more "
+"restitution occurs."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:136
+msgid "The speed of all rotations across the Y axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:139
+msgid ""
+"The minimum rotation in positive direction to break loose and rotate around "
+"the Y axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:142
+msgid ""
+"The amount of rotational damping across the Z axis. The lower, the more "
+"dampening occurs."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:145
+msgid "If [code]true[/code], rotation across the Z axis is limited."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:148
+msgid ""
+"When rotating across the Z axis, this error tolerance factor defines how "
+"much the correction gets slowed down. The lower, the slower."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:151
+msgid ""
+"The maximum amount of force that can occur, when rotating around the Z axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:154
+msgid ""
+"The minimum rotation in negative direction to break loose and rotate around "
+"the Z axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:157
+msgid ""
+"The amount of rotational restitution across the Z axis. The lower, the more "
+"restitution occurs."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:160
+msgid "The speed of all rotations across the Z axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:163
+msgid ""
+"The minimum rotation in positive direction to break loose and rotate around "
+"the Z axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:166
+msgid "If [code]true[/code], a rotating motor at the X axis is enabled."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:169
+msgid "Maximum acceleration for the motor at the X axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:172
+msgid "Target speed for the motor at the X axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:175
+msgid "If [code]true[/code], a rotating motor at the Y axis is enabled."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:178
+msgid "Maximum acceleration for the motor at the Y axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:181
+msgid "Target speed for the motor at the Y axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:184
+msgid "If [code]true[/code], a rotating motor at the Z axis is enabled."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:187
+msgid "Maximum acceleration for the motor at the Z axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:190
+msgid "Target speed for the motor at the Z axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:217
+msgid "The amount of damping that happens at the X motion."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:220
+msgid "If [code]true[/code], the linear motion across the X axis is limited."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:223
+msgid "The minimum difference between the pivot points' X axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:226
+msgid ""
+"The amount of restitution on the X axis movement. The lower, the more "
+"momentum gets lost."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:229
+msgid ""
+"A factor applied to the movement across the X axis. The lower, the slower "
+"the movement."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:232
+msgid "The maximum difference between the pivot points' X axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:235
+msgid "The amount of damping that happens at the Y motion."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:238
+msgid "If [code]true[/code], the linear motion across the Y axis is limited."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:241
+msgid "The minimum difference between the pivot points' Y axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:244
+msgid ""
+"The amount of restitution on the Y axis movement. The lower, the more "
+"momentum gets lost."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:247
+msgid ""
+"A factor applied to the movement across the Y axis. The lower, the slower "
+"the movement."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:250
+msgid "The maximum difference between the pivot points' Y axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:253
+msgid "The amount of damping that happens at the Z motion."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:256
+msgid "If [code]true[/code], the linear motion across the Z axis is limited."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:259
+msgid "The minimum difference between the pivot points' Z axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:262
+msgid ""
+"The amount of restitution on the Z axis movement. The lower, the more "
+"momentum gets lost."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:265
+msgid ""
+"A factor applied to the movement across the Z axis. The lower, the slower "
+"the movement."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:268
+msgid "The maximum difference between the pivot points' Z axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:271
+msgid ""
+"If [code]true[/code], then there is a linear motor on the X axis. It will "
+"attempt to reach the target velocity while staying within the force limits."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:274
+msgid ""
+"The maximum force the linear motor can apply on the X axis while trying to "
+"reach the target velocity."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:277
+msgid "The speed that the linear motor will attempt to reach on the X axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:280
+msgid ""
+"If [code]true[/code], then there is a linear motor on the Y axis. It will "
+"attempt to reach the target velocity while staying within the force limits."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:283
+msgid ""
+"The maximum force the linear motor can apply on the Y axis while trying to "
+"reach the target velocity."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:286
+msgid "The speed that the linear motor will attempt to reach on the Y axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:289
+msgid ""
+"If [code]true[/code], then there is a linear motor on the Z axis. It will "
+"attempt to reach the target velocity while staying within the force limits."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:292
+msgid ""
+"The maximum force the linear motor can apply on the Z axis while trying to "
+"reach the target velocity."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:295
+msgid "The speed that the linear motor will attempt to reach on the Z axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:324 doc/classes/PhysicsServer.xml:1086
+msgid "The minimum difference between the pivot points' axes."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:327 doc/classes/PhysicsServer.xml:1089
+msgid "The maximum difference between the pivot points' axes."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:330
+msgid ""
+"A factor applied to the movement across the axes. The lower, the slower the "
+"movement."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:333
+msgid ""
+"The amount of restitution on the axes' movement. The lower, the more "
+"momentum gets lost."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:336 doc/classes/PhysicsServer.xml:1098
+msgid ""
+"The amount of damping that happens at the linear motion across the axes."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:339
+msgid "The velocity the linear motor will try to reach."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:342
+msgid ""
+"The maximum force the linear motor will apply while trying to reach the "
+"velocity target."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:351 doc/classes/PhysicsServer.xml:1107
+msgid ""
+"The minimum rotation in negative direction to break loose and rotate around "
+"the axes."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:354 doc/classes/PhysicsServer.xml:1110
+msgid ""
+"The minimum rotation in positive direction to break loose and rotate around "
+"the axes."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:357
+msgid "The speed of all rotations across the axes."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:360 doc/classes/PhysicsServer.xml:1116
+msgid ""
+"The amount of rotational damping across the axes. The lower, the more "
+"dampening occurs."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:363 doc/classes/PhysicsServer.xml:1119
+msgid ""
+"The amount of rotational restitution across the axes. The lower, the more "
+"restitution occurs."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:366 doc/classes/PhysicsServer.xml:1122
+msgid ""
+"The maximum amount of force that can occur, when rotating around the axes."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:369
+msgid ""
+"When rotating across the axes, this error tolerance factor defines how much "
+"the correction gets slowed down. The lower, the slower."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:372 doc/classes/PhysicsServer.xml:1128
+msgid "Target speed for the motor at the axes."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:375 doc/classes/PhysicsServer.xml:1131
+msgid "Maximum acceleration for the motor at the axes."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:387
+msgid "If enabled, linear motion is possible within the given limits."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:390
+msgid "If enabled, rotational motion is possible within the given limits."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:397
+msgid "If enabled, there is a rotational motor across these axes."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:400
+msgid "If enabled, there is a linear motor across these axes."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:403 doc/classes/HingeJoint.xml:108
+msgid "Represents the size of the [enum Flag] enum."
+msgstr ""
+
+#: doc/classes/Geometry.xml:4
+msgid "Helper node to calculate generic geometry operations."
+msgstr ""
+
+#: doc/classes/Geometry.xml:7
+msgid ""
+"Geometry provides users with a set of helper functions to create geometric "
+"shapes, compute intersections between shapes, and process various other "
+"geometric operations."
+msgstr ""
+
+#: doc/classes/Geometry.xml:16
+msgid ""
+"Returns an array with 6 [Plane]s that describe the sides of a box centered "
+"at the origin. The box size is defined by [code]extents[/code], which "
+"represents one (positive) corner of the box (i.e. half its actual size)."
+msgstr ""
+
+#: doc/classes/Geometry.xml:27
+msgid ""
+"Returns an array of [Plane]s closely bounding a faceted capsule centered at "
+"the origin with radius [code]radius[/code] and height [code]height[/code]. "
+"The parameter [code]sides[/code] defines how many planes will be generated "
+"for the side part of the capsule, whereas [code]lats[/code] gives the number "
+"of latitudinal steps at the bottom and top of the capsule. The parameter "
+"[code]axis[/code] describes the axis along which the capsule is oriented (0 "
+"for X, 1 for Y, 2 for Z)."
+msgstr ""
+
+#: doc/classes/Geometry.xml:37
+msgid ""
+"Returns an array of [Plane]s closely bounding a faceted cylinder centered at "
+"the origin with radius [code]radius[/code] and height [code]height[/code]. "
+"The parameter [code]sides[/code] defines how many planes will be generated "
+"for the round part of the cylinder. The parameter [code]axis[/code] "
+"describes the axis along which the cylinder is oriented (0 for X, 1 for Y, 2 "
+"for Z)."
+msgstr ""
+
+#: doc/classes/Geometry.xml:45
+msgid ""
+"Clips the polygon defined by the points in [code]points[/code] against the "
+"[code]plane[/code] and returns the points of the clipped polygon."
+msgstr ""
+
+#: doc/classes/Geometry.xml:53
+msgid ""
+"Clips [code]polygon_a[/code] against [code]polygon_b[/code] and returns an "
+"array of clipped polygons. This performs [constant OPERATION_DIFFERENCE] "
+"between polygons. Returns an empty array if [code]polygon_b[/code] "
+"completely overlaps [code]polygon_a[/code].\n"
+"If [code]polygon_b[/code] is enclosed by [code]polygon_a[/code], returns an "
+"outer polygon (boundary) and inner polygon (hole) which could be "
+"distinguished by calling [method is_polygon_clockwise]."
+msgstr ""
+
+#: doc/classes/Geometry.xml:62
+msgid ""
+"Clips [code]polyline[/code] against [code]polygon[/code] and returns an "
+"array of clipped polylines. This performs [constant OPERATION_DIFFERENCE] "
+"between the polyline and the polygon. This operation can be thought of as "
+"cutting a line with a closed shape."
+msgstr ""
+
+#: doc/classes/Geometry.xml:69
+msgid ""
+"Given an array of [Vector2]s, returns the convex hull as a list of points in "
+"counterclockwise order. The last point is the same as the first one."
+msgstr ""
+
+#: doc/classes/Geometry.xml:77
+msgid ""
+"Mutually excludes common area defined by intersection of [code]polygon_a[/"
+"code] and [code]polygon_b[/code] (see [method intersect_polygons_2d]) and "
+"returns an array of excluded polygons. This performs [constant "
+"OPERATION_XOR] between polygons. In other words, returns all but common area "
+"between polygons.\n"
+"The operation may result in an outer polygon (boundary) and inner polygon "
+"(hole) produced which could be distinguished by calling [method "
+"is_polygon_clockwise]."
+msgstr ""
+
+#: doc/classes/Geometry.xml:87
+msgid ""
+"Returns the 3D point on the 3D segment ([code]s1[/code], [code]s2[/code]) "
+"that is closest to [code]point[/code]. The returned point will always be "
+"inside the specified segment."
+msgstr ""
+
+#: doc/classes/Geometry.xml:96
+msgid ""
+"Returns the 2D point on the 2D segment ([code]s1[/code], [code]s2[/code]) "
+"that is closest to [code]point[/code]. The returned point will always be "
+"inside the specified segment."
+msgstr ""
+
+#: doc/classes/Geometry.xml:105
+msgid ""
+"Returns the 3D point on the 3D line defined by ([code]s1[/code], [code]s2[/"
+"code]) that is closest to [code]point[/code]. The returned point can be "
+"inside the segment ([code]s1[/code], [code]s2[/code]) or outside of it, i.e. "
+"somewhere on the line extending from the segment."
+msgstr ""
+
+#: doc/classes/Geometry.xml:114
+msgid ""
+"Returns the 2D point on the 2D line defined by ([code]s1[/code], [code]s2[/"
+"code]) that is closest to [code]point[/code]. The returned point can be "
+"inside the segment ([code]s1[/code], [code]s2[/code]) or outside of it, i.e. "
+"somewhere on the line extending from the segment."
+msgstr ""
+
+#: doc/classes/Geometry.xml:124
+msgid ""
+"Given the two 3D segments ([code]p1[/code], [code]p2[/code]) and ([code]q1[/"
+"code], [code]q2[/code]), finds those two points on the two segments that are "
+"closest to each other. Returns a [PoolVector3Array] that contains this point "
+"on ([code]p1[/code], [code]p2[/code]) as well the accompanying point on "
+"([code]q1[/code], [code]q2[/code])."
+msgstr ""
+
+#: doc/classes/Geometry.xml:134
+msgid ""
+"Given the two 2D segments ([code]p1[/code], [code]q1[/code]) and ([code]p2[/"
+"code], [code]q2[/code]), finds those two points on the two segments that are "
+"closest to each other. Returns a [PoolVector2Array] that contains this point "
+"on ([code]p1[/code], [code]q1[/code]) as well the accompanying point on "
+"([code]p2[/code], [code]q2[/code])."
+msgstr ""
+
+#: doc/classes/Geometry.xml:141
+msgid "Used internally by the engine."
+msgstr ""
+
+#: doc/classes/Geometry.xml:149
+msgid ""
+"Intersects [code]polygon_a[/code] with [code]polygon_b[/code] and returns an "
+"array of intersected polygons. This performs [constant "
+"OPERATION_INTERSECTION] between polygons. In other words, returns common "
+"area shared by polygons. Returns an empty array if no intersection occurs.\n"
+"The operation may result in an outer polygon (boundary) and inner polygon "
+"(hole) produced which could be distinguished by calling [method "
+"is_polygon_clockwise]."
+msgstr ""
+
+#: doc/classes/Geometry.xml:158
+msgid ""
+"Intersects [code]polyline[/code] with [code]polygon[/code] and returns an "
+"array of intersected polylines. This performs [constant "
+"OPERATION_INTERSECTION] between the polyline and the polygon. This operation "
+"can be thought of as chopping a line with a closed shape."
+msgstr ""
+
+#: doc/classes/Geometry.xml:167
+msgid ""
+"Returns [code]true[/code] if [code]point[/code] is inside the circle or if "
+"it's located exactly [i]on[/i] the circle's boundary, otherwise returns "
+"[code]false[/code]."
+msgstr ""
+
+#: doc/classes/Geometry.xml:175
+msgid ""
+"Returns [code]true[/code] if [code]point[/code] is inside [code]polygon[/"
+"code] or if it's located exactly [i]on[/i] polygon's boundary, otherwise "
+"returns [code]false[/code]."
+msgstr ""
+
+#: doc/classes/Geometry.xml:182
+msgid ""
+"Returns [code]true[/code] if [code]polygon[/code]'s vertices are ordered in "
+"clockwise order, otherwise returns [code]false[/code]."
+msgstr ""
+
+#: doc/classes/Geometry.xml:192
+msgid ""
+"Checks if the two lines ([code]from_a[/code], [code]dir_a[/code]) and "
+"([code]from_b[/code], [code]dir_b[/code]) intersect. If yes, return the "
+"point of intersection as [Vector2]. If no intersection takes place, returns "
+"an empty [Variant].\n"
+"[b]Note:[/b] The lines are specified using direction vectors, not end points."
+msgstr ""
+
+#: doc/classes/Geometry.xml:200
+msgid ""
+"Given an array of [Vector2]s representing tiles, builds an atlas. The "
+"returned dictionary has two keys: [code]points[/code] is a vector of "
+"[Vector2] that specifies the positions of each tile, [code]size[/code] "
+"contains the overall size of the whole atlas as [Vector2]."
+msgstr ""
+
+#: doc/classes/Geometry.xml:208
+msgid ""
+"Merges (combines) [code]polygon_a[/code] and [code]polygon_b[/code] and "
+"returns an array of merged polygons. This performs [constant "
+"OPERATION_UNION] between polygons.\n"
+"The operation may result in an outer polygon (boundary) and multiple inner "
+"polygons (holes) produced which could be distinguished by calling [method "
+"is_polygon_clockwise]."
+msgstr ""
+
+#: doc/classes/Geometry.xml:218
+msgid ""
+"Inflates or deflates [code]polygon[/code] by [code]delta[/code] units "
+"(pixels). If [code]delta[/code] is positive, makes the polygon grow outward. "
+"If [code]delta[/code] is negative, shrinks the polygon inward. Returns an "
+"array of polygons because inflating/deflating may result in multiple "
+"discrete polygons. Returns an empty array if [code]delta[/code] is negative "
+"and the absolute value of it approximately exceeds the minimum bounding "
+"rectangle dimensions of the polygon.\n"
+"Each polygon's vertices will be rounded as determined by [code]join_type[/"
+"code], see [enum PolyJoinType].\n"
+"The operation may result in an outer polygon (boundary) and inner polygon "
+"(hole) produced which could be distinguished by calling [method "
+"is_polygon_clockwise].\n"
+"[b]Note:[/b] To translate the polygon's vertices specifically, use the "
+"[method Transform2D.xform] method:\n"
+"[codeblock]\n"
+"var polygon = PoolVector2Array([Vector2(0, 0), Vector2(100, 0), Vector2(100, "
+"100), Vector2(0, 100)])\n"
+"var offset = Vector2(50, 50)\n"
+"polygon = Transform2D(0, offset).xform(polygon)\n"
+"print(polygon) # prints [Vector2(50, 50), Vector2(150, 50), Vector2(150, "
+"150), Vector2(50, 150)]\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Geometry.xml:237
+msgid ""
+"Inflates or deflates [code]polyline[/code] by [code]delta[/code] units "
+"(pixels), producing polygons. If [code]delta[/code] is positive, makes the "
+"polyline grow outward. Returns an array of polygons because inflating/"
+"deflating may result in multiple discrete polygons. If [code]delta[/code] is "
+"negative, returns an empty array.\n"
+"Each polygon's vertices will be rounded as determined by [code]join_type[/"
+"code], see [enum PolyJoinType].\n"
+"Each polygon's endpoints will be rounded as determined by [code]end_type[/"
+"code], see [enum PolyEndType].\n"
+"The operation may result in an outer polygon (boundary) and inner polygon "
+"(hole) produced which could be distinguished by calling [method "
+"is_polygon_clockwise]."
+msgstr ""
+
+#: doc/classes/Geometry.xml:250
+msgid ""
+"Returns if [code]point[/code] is inside the triangle specified by [code]a[/"
+"code], [code]b[/code] and [code]c[/code]."
+msgstr ""
+
+#: doc/classes/Geometry.xml:261
+msgid ""
+"Tests if the 3D ray starting at [code]from[/code] with the direction of "
+"[code]dir[/code] intersects the triangle specified by [code]a[/code], "
+"[code]b[/code] and [code]c[/code]. If yes, returns the point of intersection "
+"as [Vector3]. If no intersection takes place, an empty [Variant] is returned."
+msgstr ""
+
+#: doc/classes/Geometry.xml:271
+msgid ""
+"Given the 2D segment ([code]segment_from[/code], [code]segment_to[/code]), "
+"returns the position on the segment (as a number between 0 and 1) at which "
+"the segment hits the circle that is located at position "
+"[code]circle_position[/code] and has radius [code]circle_radius[/code]. If "
+"the segment does not intersect the circle, -1 is returned (this is also the "
+"case if the line extending the segment would intersect the circle, but the "
+"segment does not)."
+msgstr ""
+
+#: doc/classes/Geometry.xml:280
+msgid ""
+"Given a convex hull defined though the [Plane]s in the array [code]planes[/"
+"code], tests if the segment ([code]from[/code], [code]to[/code]) intersects "
+"with that hull. If an intersection is found, returns a [PoolVector3Array] "
+"containing the point the intersection and the hull's normal. If no "
+"intersecion is found, an the returned array is empty."
+msgstr ""
+
+#: doc/classes/Geometry.xml:290
+msgid ""
+"Checks if the segment ([code]from[/code], [code]to[/code]) intersects the "
+"cylinder with height [code]height[/code] that is centered at the origin and "
+"has radius [code]radius[/code]. If no, returns an empty [PoolVector3Array]. "
+"If an intersection takes place, the returned array contains the point of "
+"intersection and the cylinder's normal at the point of intersection."
+msgstr ""
+
+#: doc/classes/Geometry.xml:300
+msgid ""
+"Checks if the two segments ([code]from_a[/code], [code]to_a[/code]) and "
+"([code]from_b[/code], [code]to_b[/code]) intersect. If yes, return the point "
+"of intersection as [Vector2]. If no intersection takes place, returns an "
+"empty [Variant]."
+msgstr ""
+
+#: doc/classes/Geometry.xml:310
+msgid ""
+"Checks if the segment ([code]from[/code], [code]to[/code]) intersects the "
+"sphere that is located at [code]sphere_position[/code] and has radius "
+"[code]sphere_radius[/code]. If no, returns an empty [PoolVector3Array]. If "
+"yes, returns a [PoolVector3Array] containing the point of intersection and "
+"the sphere's normal at the point of intersection."
+msgstr ""
+
+#: doc/classes/Geometry.xml:321
+msgid ""
+"Tests if the segment ([code]from[/code], [code]to[/code]) intersects the "
+"triangle [code]a[/code], [code]b[/code], [code]c[/code]. If yes, returns the "
+"point of intersection as [Vector3]. If no intersection takes place, an empty "
+"[Variant] is returned."
+msgstr ""
+
+#: doc/classes/Geometry.xml:328
+msgid ""
+"Triangulates the area specified by discrete set of [code]points[/code] such "
+"that no point is inside the circumcircle of any resulting triangle. Returns "
+"a [PoolIntArray] where each triangle consists of three consecutive point "
+"indices into [code]points[/code] (i.e. the returned array will have [code]n "
+"* 3[/code] elements, with [code]n[/code] being the number of found "
+"triangles). If the triangulation did not succeed, an empty [PoolIntArray] is "
+"returned."
+msgstr ""
+
+#: doc/classes/Geometry.xml:335
+msgid ""
+"Triangulates the polygon specified by the points in [code]polygon[/code]. "
+"Returns a [PoolIntArray] where each triangle consists of three consecutive "
+"point indices into [code]polygon[/code] (i.e. the returned array will have "
+"[code]n * 3[/code] elements, with [code]n[/code] being the number of found "
+"triangles). If the triangulation did not succeed, an empty [PoolIntArray] is "
+"returned."
+msgstr ""
+
+#: doc/classes/Geometry.xml:341
+msgid ""
+"Create regions where either subject or clip polygons (or both) are filled."
+msgstr ""
+
+#: doc/classes/Geometry.xml:344
+msgid ""
+"Create regions where subject polygons are filled except where clip polygons "
+"are filled."
+msgstr ""
+
+#: doc/classes/Geometry.xml:347
+msgid "Create regions where both subject and clip polygons are filled."
+msgstr ""
+
+#: doc/classes/Geometry.xml:350
+msgid ""
+"Create regions where either subject or clip polygons are filled but not "
+"where both are filled."
+msgstr ""
+
+#: doc/classes/Geometry.xml:353
+msgid ""
+"Squaring is applied uniformally at all convex edge joins at [code]1 * delta[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Geometry.xml:356
+msgid ""
+"While flattened paths can never perfectly trace an arc, they are "
+"approximated by a series of arc chords."
+msgstr ""
+
+#: doc/classes/Geometry.xml:359
+msgid ""
+"There's a necessary limit to mitered joins since offsetting edges that join "
+"at very acute angles will produce excessively long and narrow \"spikes\". "
+"For any given edge join, when miter offsetting would exceed that maximum "
+"distance, \"square\" joining is applied."
+msgstr ""
+
+#: doc/classes/Geometry.xml:362
+msgid ""
+"Endpoints are joined using the [enum PolyJoinType] value and the path filled "
+"as a polygon."
+msgstr ""
+
+#: doc/classes/Geometry.xml:365
+msgid ""
+"Endpoints are joined using the [enum PolyJoinType] value and the path filled "
+"as a polyline."
+msgstr ""
+
+#: doc/classes/Geometry.xml:368
+msgid "Endpoints are squared off with no extension."
+msgstr ""
+
+#: doc/classes/Geometry.xml:371
+msgid "Endpoints are squared off and extended by [code]delta[/code] units."
+msgstr ""
+
+#: doc/classes/Geometry.xml:374
+msgid "Endpoints are rounded off and extended by [code]delta[/code] units."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:4
+msgid "Base node for geometry-based visual instances."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:7
+msgid ""
+"Base node for geometry-based visual instances. Shares some common "
+"functionality like visibility and custom materials."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:16
+msgid ""
+"Returns the [enum GeometryInstance.Flags] that have been set for this object."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:23
+msgid ""
+"Overrides the bounding box of this node with a custom one. To remove it, set "
+"an [AABB] with all fields set to zero."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:31
+msgid ""
+"Sets the [enum GeometryInstance.Flags] specified. See [enum GeometryInstance."
+"Flags] for options."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:37
+msgid ""
+"The selected shadow casting flag. See [enum ShadowCastingSetting] for "
+"possible values."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:40
+msgid ""
+"The extra distance added to the GeometryInstance's bounding box ([AABB]) to "
+"increase its cull box."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:43
+msgid ""
+"When disabled, the mesh will be taken into account when computing indirect "
+"lighting, but the resulting lightmap will not be saved. Useful for emissive "
+"only materials or shadow casters."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:46
+msgid ""
+"Scale factor for the generated baked lightmap. Useful for adding detail to "
+"certain mesh instances."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:49
+msgid ""
+"The GeometryInstance's max LOD distance.\n"
+"[b]Note:[/b] This property currently has no effect."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:53
+msgid ""
+"The GeometryInstance's max LOD margin.\n"
+"[b]Note:[/b] This property currently has no effect."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:57
+msgid ""
+"The GeometryInstance's min LOD distance.\n"
+"[b]Note:[/b] This property currently has no effect."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:61
+msgid ""
+"The GeometryInstance's min LOD margin.\n"
+"[b]Note:[/b] This property currently has no effect."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:65
+msgid ""
+"The material override for the whole geometry.\n"
+"If a material is assigned to this property, it will be used instead of any "
+"material set in any material slot of the mesh."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:69
+msgid ""
+"If [code]true[/code], this GeometryInstance will be used when baking lights "
+"using a [GIProbe] or [BakedLightmap]."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:74
+msgid "The generated lightmap texture will have the original size."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:77
+msgid "The generated lightmap texture will be twice as large, on each axis."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:80
+msgid "The generated lightmap texture will be 4 times as large, on each axis."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:83
+msgid "The generated lightmap texture will be 8 times as large, on each axis."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:88
+msgid "Will not cast any shadows."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:91
+msgid ""
+"Will cast shadows from all visible faces in the GeometryInstance.\n"
+"Will take culling into account, so faces not being rendered will not be "
+"taken into account when shadow casting."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:95
+msgid ""
+"Will cast shadows from all visible faces in the GeometryInstance.\n"
+"Will not take culling into account, so all faces will be taken into account "
+"when shadow casting."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:99
+msgid ""
+"Will only show the shadows casted from this object.\n"
+"In other words, the actual mesh will not be visible, only the shadows casted "
+"from the mesh will be."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:103
+msgid ""
+"Will allow the GeometryInstance to be used when baking lights using a "
+"[GIProbe] or [BakedLightmap]."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:106
+msgid ""
+"Unused in this class, exposed for consistency with [enum VisualServer."
+"InstanceFlags]."
+msgstr ""
+
+#: doc/classes/GIProbe.xml:4
+msgid "Real-time global illumination (GI) probe."
+msgstr ""
+
+#: doc/classes/GIProbe.xml:7
+msgid ""
+"[GIProbe]s are used to provide high-quality real-time indirect light to "
+"scenes. They precompute the effect of objects that emit light and the effect "
+"of static geometry to simulate the behavior of complex light in real-time. "
+"[GIProbe]s need to be baked before using, however, once baked, dynamic "
+"objects will receive light from them. Further, lights can be fully dynamic "
+"or baked.\n"
+"Having [GIProbe]s in a scene can be expensive, the quality of the probe can "
+"be turned down in exchange for better performance in the [ProjectSettings] "
+"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
+"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
+"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
+"leaks (avoid one-sided walls). For interior levels, enclose your level "
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
+"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
+"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
+"emit light in a [GIProbe]."
+msgstr ""
+
+#: doc/classes/GIProbe.xml:15
+msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
+msgstr ""
+
+#: doc/classes/GIProbe.xml:24
+msgid ""
+"Bakes the effect from all [GeometryInstance]s marked with [member "
+"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
+"[constant Light.BAKE_INDIRECT] or [constant Light.BAKE_ALL]. If "
+"[code]create_visual_debug[/code] is [code]true[/code], after baking the "
+"light, this will generate a [MultiMesh] that has a cube representing each "
+"solid cell with each cube colored to the cell's albedo color. This can be "
+"used to visualize the [GIProbe]'s data and debug any issues that may be "
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
+msgstr ""
+
+#: doc/classes/GIProbe.xml:31
+msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
+msgstr ""
+
+#: doc/classes/GIProbe.xml:37
+msgid ""
+"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
+"used to avoid self-shadowing, but may introduce light leaking at higher "
+"values. This and [member normal_bias] should be played around with to "
+"minimize self-shadowing and light leaking.\n"
+"[b]Note:[/b] [code]bias[/code] should usually be above 1.0 as that is the "
+"size of the voxels."
+msgstr ""
+
+#: doc/classes/GIProbe.xml:41
+msgid ""
+"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
+"no longer has any effect when enabled."
+msgstr ""
+
+#: doc/classes/GIProbe.xml:44
+msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
+msgstr ""
+
+#: doc/classes/GIProbe.xml:47
+msgid ""
+"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
+"scaled within this range."
+msgstr ""
+
+#: doc/classes/GIProbe.xml:50
+msgid ""
+"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
+"brighter."
+msgstr ""
+
+#: doc/classes/GIProbe.xml:53
+msgid ""
+"The size of the area covered by the [GIProbe]. If you make the extents "
+"larger without increasing the subdivisions with [member subdiv], the size of "
+"each cell will increase and result in lower detailed lighting."
+msgstr ""
+
+#: doc/classes/GIProbe.xml:56
+msgid ""
+"If [code]true[/code], ignores the sky contribution when calculating lighting."
+msgstr ""
+
+#: doc/classes/GIProbe.xml:59
+msgid ""
+"Offsets the lookup into the [GIProbe] based on the object's normal "
+"direction. Can be used to reduce some self-shadowing artifacts."
+msgstr ""
+
+#: doc/classes/GIProbe.xml:62
+msgid ""
+"How much light propagates through the probe internally. A higher value "
+"allows light to spread further."
+msgstr ""
+
+#: doc/classes/GIProbe.xml:65
+msgid ""
+"Number of times to subdivide the grid that the [GIProbe] operates on. A "
+"higher number results in finer detail and thus higher visual quality, while "
+"lower numbers result in better performance."
+msgstr ""
+
+#: doc/classes/GIProbe.xml:70
+msgid ""
+"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
+"Use it if you can, but especially use it on lower-end hardware."
+msgstr ""
+
+#: doc/classes/GIProbe.xml:73
+msgid "Use 128 subdivisions. This is the default quality setting."
+msgstr ""
+
+#: doc/classes/GIProbe.xml:76
+msgid "Use 256 subdivisions."
+msgstr ""
+
+#: doc/classes/GIProbe.xml:79
+msgid ""
+"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
+"On lower-end hardware, this could cause the GPU to stall."
+msgstr ""
+
+#: doc/classes/GIProbe.xml:82
+msgid "Represents the size of the [enum Subdiv] enum."
+msgstr ""
+
+#: modules/gltf/doc_classes/GLTFLight.xml:13
+msgid ""
+"The [Color] of the light. Defaults to white. A black color causes the light "
+"to have no effect."
+msgstr ""
+
+#: modules/gltf/doc_classes/GLTFLight.xml:16
+msgid ""
+"The inner angle of the cone in a spotlight. Must be less than or equal to "
+"the outer cone angle.\n"
+"Within this angle, the light is at full brightness. Between the inner and "
+"outer cone angles, there is a transition from full brightness to zero "
+"brightness. When creating a Godot [SpotLight], the ratio between the inner "
+"and outer cone angles is used to calculate the attenuation of the light."
+msgstr ""
+
+#: modules/gltf/doc_classes/GLTFLight.xml:20
+msgid ""
+"The intensity of the light. This is expressed in candelas (lumens per "
+"steradian) for point and spot lights, and lux (lumens per m²) for "
+"directional lights. When creating a Godot light, this value is converted to "
+"a unitless multiplier."
+msgstr ""
+
+#: modules/gltf/doc_classes/GLTFLight.xml:23
+msgid ""
+"The outer angle of the cone in a spotlight. Must be greater than or equal to "
+"the inner angle.\n"
+"At this angle, the light drops off to zero brightness. Between the inner and "
+"outer cone angles, there is a transition from full brightness to zero "
+"brightness. If this angle is a half turn, then the spotlight emits in all "
+"directions. When creating a Godot [SpotLight], the outer cone angle is used "
+"as the angle of the spotlight."
+msgstr ""
+
+#: modules/gltf/doc_classes/GLTFLight.xml:27
+msgid ""
+"The range of the light, beyond which the light has no effect. GLTF lights "
+"with no range defined behave like physical lights (which have infinite "
+"range). When creating a Godot light, the range is clamped to 4096."
+msgstr ""
+
+#: modules/gltf/doc_classes/GLTFLight.xml:30
+msgid ""
+"The type of the light. The values accepted by Godot are \"point\", \"spot\", "
+"and \"directional\", which correspond to Godot's [OmniLight], [SpotLight], "
+"and [DirectionalLight] respectively."
+msgstr ""
+
+#: modules/mono/doc_classes/GodotSharp.xml:4
+msgid "Bridge between Godot and the Mono runtime (Mono-enabled builds only)."
+msgstr ""
+
+#: modules/mono/doc_classes/GodotSharp.xml:7
+msgid ""
+"This class is a bridge between Godot and the Mono runtime. It exposes "
+"several low-level operations and is only available in Mono-enabled Godot "
+"builds.\n"
+"See also [CSharpScript]."
+msgstr ""
+
+#: modules/mono/doc_classes/GodotSharp.xml:17
+msgid "Attaches the current thread to the Mono runtime."
+msgstr ""
+
+#: modules/mono/doc_classes/GodotSharp.xml:24
+msgid "Detaches the current thread from the Mono runtime."
+msgstr ""
+
+#: modules/mono/doc_classes/GodotSharp.xml:31
+msgid ""
+"Returns the current MonoDomain ID.\n"
+"[b]Note:[/b] The Mono runtime must be initialized for this method to work "
+"(use [method is_runtime_initialized] to check). If the Mono runtime isn't "
+"initialized at the time this method is called, the engine will crash."
+msgstr ""
+
+#: modules/mono/doc_classes/GodotSharp.xml:39
+msgid ""
+"Returns the scripts MonoDomain's ID. This will be the same MonoDomain ID as "
+"[method get_domain_id], unless the scripts domain isn't loaded.\n"
+"[b]Note:[/b] The Mono runtime must be initialized for this method to work "
+"(use [method is_runtime_initialized] to check). If the Mono runtime isn't "
+"initialized at the time this method is called, the engine will crash."
+msgstr ""
+
+#: modules/mono/doc_classes/GodotSharp.xml:49
+msgid ""
+"Returns [code]true[/code] if the domain is being finalized, [code]false[/"
+"code] otherwise."
+msgstr ""
+
+#: modules/mono/doc_classes/GodotSharp.xml:56
+msgid ""
+"Returns [code]true[/code] if the Mono runtime is initialized, [code]false[/"
+"code] otherwise."
+msgstr ""
+
+#: modules/mono/doc_classes/GodotSharp.xml:63
+msgid ""
+"Returns [code]true[/code] if the Mono runtime is shutting down, [code]false[/"
+"code] otherwise."
+msgstr ""
+
+#: modules/mono/doc_classes/GodotSharp.xml:70
+msgid ""
+"Returns [code]true[/code] if the scripts domain is loaded, [code]false[/"
+"code] otherwise."
+msgstr ""
+
+#: doc/classes/Gradient.xml:4
+msgid ""
+"A color interpolator resource which can be used to generate colors between "
+"user-defined color points."
+msgstr ""
+
+#: doc/classes/Gradient.xml:7
+msgid ""
+"Given a set of colors, this resource will interpolate them in order. This "
+"means that if you have color 1, color 2 and color 3, the ramp will "
+"interpolate from color 1 to color 2 and from color 2 to color 3. The ramp "
+"will initially have 2 colors (black and white), one (black) at ramp lower "
+"offset 0 and the other (white) at the ramp higher offset 1."
+msgstr ""
+
+#: doc/classes/Gradient.xml:17
+msgid ""
+"Adds the specified color to the end of the ramp, with the specified offset."
+msgstr ""
+
+#: doc/classes/Gradient.xml:24
+msgid "Returns the color of the ramp color at index [code]point[/code]."
+msgstr ""
+
+#: doc/classes/Gradient.xml:31
+msgid "Returns the offset of the ramp color at index [code]point[/code]."
+msgstr ""
+
+#: doc/classes/Gradient.xml:37
+msgid "Returns the number of colors in the ramp."
+msgstr ""
+
+#: doc/classes/Gradient.xml:44
+msgid "Returns the interpolated color specified by [code]offset[/code]."
+msgstr ""
+
+#: doc/classes/Gradient.xml:51
+msgid "Removes the color at the index [code]point[/code]."
+msgstr ""
+
+#: doc/classes/Gradient.xml:59
+msgid "Sets the color of the ramp color at index [code]point[/code]."
+msgstr ""
+
+#: doc/classes/Gradient.xml:67
+msgid "Sets the offset for the ramp color at index [code]point[/code]."
+msgstr ""
+
+#: doc/classes/Gradient.xml:73
+msgid "Gradient's colors returned as a [PoolColorArray]."
+msgstr ""
+
+#: doc/classes/Gradient.xml:76
+msgid "Gradient's offsets returned as a [PoolRealArray]."
+msgstr ""
+
+#: doc/classes/GradientTexture.xml:4
+msgid "Gradient-filled texture."
+msgstr ""
+
+#: doc/classes/GradientTexture.xml:7
+msgid ""
+"GradientTexture uses a [Gradient] to fill the texture data. The gradient "
+"will be filled from left to right using colors obtained from the gradient. "
+"This means the texture does not necessarily represent an exact copy of the "
+"gradient, but instead an interpolation of samples obtained from the gradient "
+"at fixed steps (see [member width])."
+msgstr ""
+
+#: doc/classes/GradientTexture.xml:15
+msgid "The [Gradient] that will be used to fill the texture."
+msgstr ""
+
+#: doc/classes/GradientTexture.xml:18
+msgid "The number of color samples that will be obtained from the [Gradient]."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:4
+msgid ""
+"GraphEdit is an area capable of showing various GraphNodes. It manages "
+"connection events between them."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:7
+msgid ""
+"GraphEdit manages the showing of GraphNodes it contains, as well as "
+"connections and disconnections between them. Signals are sent for each of "
+"these two events. Disconnection between GraphNode slots is disabled by "
+"default.\n"
+"It is greatly advised to enable low-processor usage mode (see [member OS."
+"low_processor_usage_mode]) when using GraphEdits."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:18
+msgid ""
+"Makes possible the connection between two different slot types. The type is "
+"defined with the [method GraphNode.set_slot] method."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:25
+msgid ""
+"Makes possible to disconnect nodes when dragging from the slot at the left "
+"if it has the specified type."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:32
+msgid ""
+"Makes possible to disconnect nodes when dragging from the slot at the right "
+"if it has the specified type."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:38
+msgid "Removes all connections between nodes."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:48
+msgid ""
+"Create a connection between the [code]from_port[/code] slot of the "
+"[code]from[/code] GraphNode and the [code]to_port[/code] slot of the "
+"[code]to[/code] GraphNode. If the connection already exists, no connection "
+"is created."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:58
+msgid ""
+"Removes the connection between the [code]from_port[/code] slot of the "
+"[code]from[/code] GraphNode and the [code]to_port[/code] slot of the "
+"[code]to[/code] GraphNode. If the connection does not exist, no connection "
+"is removed."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:64
+msgid ""
+"Returns an Array containing the list of connections. A connection consists "
+"in a structure of the form [code]{ from_port: 0, from: \"GraphNode name 0\", "
+"to_port: 1, to: \"GraphNode name 1\" }[/code]."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:70
+msgid ""
+"Gets the [HBoxContainer] that contains the zooming and grid snap controls in "
+"the top left of the graph. You can use this method to reposition the toolbar "
+"or to add your own custom controls to it.\n"
+"[b]Warning:[/b] This is a required internal node, removing and freeing it "
+"may cause a crash. If you wish to hide it or any of its children, use their "
+"[member CanvasItem.visible] property."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:81
+msgid ""
+"Returns [code]true[/code] if the [code]from_port[/code] slot of the "
+"[code]from[/code] GraphNode is connected to the [code]to_port[/code] slot of "
+"the [code]to[/code] GraphNode."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:89
+msgid "Returns whether it's possible to connect slots of the specified types."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:97
+msgid ""
+"Makes it not possible to connect between two different slot types. The type "
+"is defined with the [method GraphNode.set_slot] method."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:104
+msgid ""
+"Removes the possibility to disconnect nodes when dragging from the slot at "
+"the left if it has the specified type."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:111
+msgid ""
+"Removes the possibility to disconnect nodes when dragging from the slot at "
+"the right if it has the specified type."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:122
+msgid ""
+"Sets the coloration of the connection between [code]from[/code]'s "
+"[code]from_port[/code] and [code]to[/code]'s [code]to_port[/code] with the "
+"color provided in the [code]activity[/code] theme property."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:129
+msgid "Sets the specified [code]node[/code] as the one selected."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:136
+msgid "If [code]true[/code], the minimap is visible."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:139
+msgid "The opacity of the minimap rectangle."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:142
+msgid ""
+"The size of the minimap rectangle. The map itself is based on the size of "
+"the grid area and is scaled to fit this rectangle."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:146
+msgid ""
+"If [code]true[/code], enables disconnection of existing connections in the "
+"GraphEdit by dragging the right end."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:149
+msgid "The scroll offset."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:152
+msgid ""
+"If [code]true[/code], makes a label with the current zoom level visible. The "
+"zoom value is displayed in percents."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:155
+msgid "The snapping distance in pixels."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:158
+msgid "If [code]true[/code], enables snapping."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:161
+msgid "The current zoom value."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:164
+msgid "The upper zoom limit."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:167
+msgid "The lower zoom limit."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:170
+msgid "The step of each zoom level."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:176
+msgid "Emitted at the beginning of a GraphNode movement."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:181
+msgid "Emitted at the end of a GraphNode movement."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:189
+msgid ""
+"Emitted when user dragging connection from input port into empty space of "
+"the graph."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:198
+msgid ""
+"Emitted to the GraphEdit when the connection between the [code]from_slot[/"
+"code] slot of the [code]from[/code] GraphNode and the [code]to_slot[/code] "
+"slot of the [code]to[/code] GraphNode is attempted to be created."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:206
+msgid ""
+"Emitted when user dragging connection from output port into empty space of "
+"the graph."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:211
+msgid "Emitted when the user presses [code]Ctrl + C[/code]."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:216
+msgid "Emitted when a GraphNode is attempted to be removed from the GraphEdit."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:225
+msgid ""
+"Emitted to the GraphEdit when the connection between [code]from_slot[/code] "
+"slot of [code]from[/code] GraphNode and [code]to_slot[/code] slot of "
+"[code]to[/code] GraphNode is attempted to be removed."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:230
+msgid ""
+"Emitted when a GraphNode is attempted to be duplicated in the GraphEdit."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:236
+msgid "Emitted when a GraphNode is selected."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:246
+msgid "Emitted when the user presses [code]Ctrl + V[/code]."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:252
+msgid ""
+"Emitted when a popup is requested. Happens on right-clicking in the "
+"GraphEdit. [code]position[/code] is the position of the mouse pointer when "
+"the signal is sent."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:258
+msgid ""
+"Emitted when the scroll offset is changed by the user. It will not be "
+"emitted when changed in code."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:272
+msgid "The background drawn under the grid."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:275
+msgid "Color of major grid lines."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:278
+msgid "Color of minor grid lines."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:283
+msgid "The icon for the zoom out button."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:286
+msgid "The icon for the zoom in button."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:289
+msgid ""
+"The horizontal range within which a port can be grabbed (on both sides)."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:292
+msgid "The vertical range within which a port can be grabbed (on both sides)."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:295
+msgid "The icon for the zoom reset button."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:298
+msgid "The fill color of the selection rectangle."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:301
+msgid "The outline color of the selection rectangle."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:304
+msgid "The icon for the snap toggle button."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:4
+msgid ""
+"A GraphNode is a container with potentially several input and output slots "
+"allowing connections between GraphNodes. Slots can have different, "
+"incompatible types."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:7
+msgid ""
+"A GraphNode is a container. Each GraphNode can have several input and output "
+"slots, sometimes referred to as ports, allowing connections between "
+"GraphNodes. To add a slot to GraphNode, add any [Control]-derived child node "
+"to it.\n"
+"After adding at least one child to GraphNode new sections will be "
+"automatically created in the Inspector called 'Slot'. When 'Slot' is "
+"expanded you will see list with index number for each slot. You can click on "
+"each of them to expand further.\n"
+"In the Inspector you can enable (show) or disable (hide) slots. By default, "
+"all slots are disabled so you may not see any slots on your GraphNode "
+"initially. You can assign a type to each slot. Only slots of the same type "
+"will be able to connect to each other. You can also assign colors to slots. "
+"A tuple of input and output slots is defined for each GUI element included "
+"in the GraphNode. Input connections are on the left and output connections "
+"are on the right side of GraphNode. Only enabled slots are counted as "
+"connections."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:17
+msgid "Disables all input and output slots of the GraphNode."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:24
+msgid "Disables input and output slot whose index is [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:31
+msgid "Returns the [Color] of the input connection [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:37
+msgid ""
+"Returns the number of enabled input slots (connections) to the GraphNode."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:44
+msgid "Returns the position of the input connection [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:51
+msgid "Returns the type of the input connection [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:58
+msgid "Returns the [Color] of the output connection [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:64
+msgid ""
+"Returns the number of enabled output slots (connections) of the GraphNode."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:71
+msgid "Returns the position of the output connection [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:78
+msgid "Returns the type of the output connection [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:85
+msgid "Returns the left (input) [Color] of the slot [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:92
+msgid "Returns the right (output) [Color] of the slot [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:99
+msgid "Returns the left (input) type of the slot [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:106
+msgid "Returns the right (output) type of the slot [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:113
+msgid ""
+"Returns [code]true[/code] if left (input) side of the slot [code]idx[/code] "
+"is enabled."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:120
+msgid ""
+"Returns [code]true[/code] if right (output) side of the slot [code]idx[/"
+"code] is enabled."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:135
+msgid ""
+"Sets properties of the slot with ID [code]idx[/code].\n"
+"If [code]enable_left[/code]/[code]right[/code], a port will appear and the "
+"slot will be able to be connected from this side.\n"
+"[code]type_left[/code]/[code]right[/code] is an arbitrary type of the port. "
+"Only ports with the same type values can be connected.\n"
+"[code]color_left[/code]/[code]right[/code] is the tint of the port's icon on "
+"this side.\n"
+"[code]custom_left[/code]/[code]right[/code] is a custom texture for this "
+"side's port.\n"
+"[b]Note:[/b] This method only sets properties of the slot. To create the "
+"slot, add a [Control]-derived child to the GraphNode.\n"
+"Individual properties can be set using one of the [code]set_slot_*[/code] "
+"methods. You must enable at least one side of the slot to do so."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:149
+msgid ""
+"Sets the [Color] of the left (input) side of the slot [code]idx[/code] to "
+"[code]color_left[/code]."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:157
+msgid ""
+"Sets the [Color] of the right (output) side of the slot [code]idx[/code] to "
+"[code]color_right[/code]."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:165
+msgid ""
+"Toggles the left (input) side of the slot [code]idx[/code]. If "
+"[code]enable_left[/code] is [code]true[/code], a port will appear on the "
+"left side and the slot will be able to be connected from this side."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:173
+msgid ""
+"Toggles the right (output) side of the slot [code]idx[/code]. If "
+"[code]enable_right[/code] is [code]true[/code], a port will appear on the "
+"right side and the slot will be able to be connected from this side."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:181
+msgid ""
+"Sets the left (input) type of the slot [code]idx[/code] to [code]type_left[/"
+"code]."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:189
+msgid ""
+"Sets the right (output) type of the slot [code]idx[/code] to "
+"[code]type_right[/code]."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:195
+msgid "If [code]true[/code], the GraphNode is a comment node."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:198
+msgid ""
+"The offset of the GraphNode, relative to the scroll offset of the "
+"[GraphEdit].\n"
+"[b]Note:[/b] You cannot use position directly, as [GraphEdit] is a "
+"[Container]."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:202
+msgid "Sets the overlay shown above the GraphNode. See [enum Overlay]."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:205
+msgid ""
+"If [code]true[/code], the user can resize the GraphNode.\n"
+"[b]Note:[/b] Dragging the handle will only emit the [signal resize_request] "
+"signal, the GraphNode needs to be resized manually."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:209
+msgid "If [code]true[/code], the GraphNode is selected."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:212
+msgid ""
+"If [code]true[/code], the close button will be visible.\n"
+"[b]Note:[/b] Pressing it will only emit the [signal close_request] signal, "
+"the GraphNode needs to be removed manually."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:216
+msgid "The text displayed in the GraphNode's title bar."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:222
+msgid ""
+"Emitted when the GraphNode is requested to be closed. Happens on clicking "
+"the close button (see [member show_close])."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:229
+msgid "Emitted when the GraphNode is dragged."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:234
+msgid "Emitted when the GraphNode is moved."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:239
+msgid ""
+"Emitted when the GraphNode is requested to be displayed over other ones. "
+"Happens on focusing (clicking into) the GraphNode."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:245
+msgid ""
+"Emitted when the GraphNode is requested to be resized. Happens on dragging "
+"the resizer handle (see [member resizable])."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:251
+msgid "Emitted when any GraphNode's slot is updated."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:257
+msgid "No overlay is shown."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:260
+msgid "Show overlay set in the [code]breakpoint[/code] theme property."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:263
+msgid "Show overlay set in the [code]position[/code] theme property."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:268
+msgid ""
+"The background used when [member overlay] is set to [constant "
+"OVERLAY_BREAKPOINT]."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:271
+msgid ""
+"The icon for the close button, visible when [member show_close] is enabled."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:274
+msgid "The color modulation applied to the close button icon."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:277 doc/classes/WindowDialog.xml:41
+msgid "The vertical offset of the close button."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:280
+msgid "The [StyleBox] used when [member comment] is enabled."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:283
+msgid ""
+"The [StyleBox] used when [member comment] is enabled and the [GraphNode] is "
+"focused."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:290
+msgid "The default background for [GraphNode]."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:293
+msgid "The icon used for representing ports."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:296
+msgid "Horizontal offset for the ports."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:299
+msgid ""
+"The background used when [member overlay] is set to [constant "
+"OVERLAY_POSITION]."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:302
+msgid "The icon used for resizer, visible when [member resizable] is enabled."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:305
+msgid "The color modulation applied to the resizer icon."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:308
+msgid "The background used when the [GraphNode] is selected."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:311
+msgid "The vertical distance between ports."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:314
+msgid "Color of the title text."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:317
+msgid "Font used for the title text."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:320
+msgid "Vertical offset of the title text."
+msgstr ""
+
+#: doc/classes/GridContainer.xml:4
+msgid ""
+"Grid container used to arrange Control-derived children in a grid like "
+"layout."
+msgstr ""
+
+#: doc/classes/GridContainer.xml:7
+msgid ""
+"GridContainer will arrange its Control-derived children in a grid like "
+"structure, the grid columns are specified using the [member columns] "
+"property and the number of rows will be equal to the number of children in "
+"the container divided by the number of columns. For example, if the "
+"container has 5 children, and 2 columns, there will be 3 rows in the "
+"container.\n"
+"Notice that grid layout will preserve the columns and rows for every size of "
+"the container, and that empty columns will be expanded automatically.\n"
+"[b]Note:[/b] GridContainer only works with child nodes inheriting from "
+"Control. It won't rearrange child nodes inheriting from Node2D."
+msgstr ""
+
+#: doc/classes/GridContainer.xml:18
+msgid ""
+"The number of columns in the [GridContainer]. If modified, [GridContainer] "
+"reorders its Control-derived children to accommodate the new layout."
+msgstr ""
+
+#: doc/classes/GridContainer.xml:26
+msgid "The horizontal separation of children nodes."
+msgstr ""
+
+#: doc/classes/GridContainer.xml:29
+msgid "The vertical separation of children nodes."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:4
+msgid "Node for 3D tile-based maps."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:7
+msgid ""
+"GridMap lets you place meshes on a grid interactively. It works both from "
+"the editor and from scripts, which can help you create in-game level "
+"editors.\n"
+"GridMaps use a [MeshLibrary] which contains a list of tiles. Each tile is a "
+"mesh with materials plus optional collision and navigation shapes.\n"
+"A GridMap contains a collection of cells. Each grid cell refers to a tile in "
+"the [MeshLibrary]. All cells in the map have the same dimensions.\n"
+"Internally, a GridMap is split into a sparse collection of octants for "
+"efficient rendering and physics processing. Every octant has the same "
+"dimensions and can contain several cells.\n"
+"[b]Note:[/b] GridMap doesn't extend [VisualInstance] and therefore can't be "
+"hidden or cull masked based on [member VisualInstance.layers]. If you make a "
+"light not affect the first layer, the whole GridMap won't be lit by the "
+"light in question."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:14
+msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/using_gridmaps.html"
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:22
+msgid "Clear all cells."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:39
+msgid ""
+"Returns an array of [ArrayMesh]es and [Transform] references of all bake "
+"meshes that exist within the current GridMap."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:48
+msgid ""
+"The [MeshLibrary] item index located at the grid-based X, Y and Z "
+"coordinates. If the cell is empty, [constant INVALID_CELL_ITEM] will be "
+"returned."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:57
+msgid ""
+"The orientation of the cell at the grid-based X, Y and Z coordinates. -1 is "
+"returned if the cell is empty."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:64
+msgid "Returns an individual bit on the [member collision_layer]."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:71
+msgid "Returns an individual bit on the [member collision_mask]."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:77
+msgid ""
+"Returns an array of [Transform] and [Mesh] references corresponding to the "
+"non-empty cells in the grid. The transforms are specified in world space."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:83
+msgid ""
+"Returns an array of [Vector3] with the non-empty cell coordinates in the "
+"grid map."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:99
+msgid ""
+"Returns the position of a grid cell in the GridMap's local coordinate space."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:116
+msgid ""
+"Sets the mesh index for the cell referenced by its grid-based X, Y and Z "
+"coordinates.\n"
+"A negative item index such as [constant INVALID_CELL_ITEM] will clear the "
+"cell.\n"
+"Optionally, the item's orientation can be passed. For valid orientation "
+"values, see [method Basis.get_orthogonal_index]."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:135
+msgid "Sets an individual bit on the [member collision_layer]."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:143
+msgid "Sets an individual bit on the [member collision_mask]."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:150
+msgid ""
+"Returns the coordinates of the grid cell containing the given point.\n"
+"[code]pos[/code] should be in the GridMap's local coordinate space."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:157
+msgid "If [code]true[/code], grid items are centered on the X axis."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:160
+msgid "If [code]true[/code], grid items are centered on the Y axis."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:163
+msgid "If [code]true[/code], grid items are centered on the Z axis."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:166
+msgid ""
+"The size of each octant measured in number of cells. This applies to all "
+"three axis."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:169
+msgid ""
+"The scale of the cell items.\n"
+"This does not affect the size of the grid cells themselves, only the items "
+"in them. This can be used to make cell items overlap their neighbors."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:173
+msgid ""
+"The dimensions of the grid's cells.\n"
+"This does not affect the size of the meshes. See [member cell_scale]."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:177
+msgid ""
+"The physics layers this GridMap is in.\n"
+"GridMaps act as static bodies, meaning they aren't affected by gravity or "
+"other forces. They only affect other physics bodies that collide with them."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:181
+msgid ""
+"The physics layers this GridMap detects collisions in. See [url=https://docs."
+"godotengine.org/en/3.4/tutorials/physics/physics_introduction.html#collision-"
+"layers-and-masks]Collision layers and masks[/url] in the documentation for "
+"more information."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:184
+msgid "The assigned [MeshLibrary]."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:187
+msgid ""
+"Controls whether this GridMap will be baked in a [BakedLightmap] or not."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:194
+msgid "Emitted when [member cell_size] changes."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:200
+msgid ""
+"Invalid cell item that can be used in [method set_cell_item] to clear cells "
+"(or represent an empty cell in [method get_cell_item])."
+msgstr ""
+
+#: doc/classes/GrooveJoint2D.xml:4
+msgid "Groove constraint for 2D physics."
+msgstr ""
+
+#: doc/classes/GrooveJoint2D.xml:7
+msgid ""
+"Groove constraint for 2D physics. This is useful for making a body \"slide\" "
+"through a segment placed in another."
+msgstr ""
+
+#: doc/classes/GrooveJoint2D.xml:15
+msgid ""
+"The body B's initial anchor position defined by the joint's origin and a "
+"local offset [member initial_offset] along the joint's Y axis (along the "
+"groove)."
+msgstr ""
+
+#: doc/classes/GrooveJoint2D.xml:18
+msgid ""
+"The groove's length. The groove is from the joint's origin towards [member "
+"length] along the joint's local Y axis."
+msgstr ""
+
+#: doc/classes/HashingContext.xml:4
+msgid "Context to compute cryptographic hashes over multiple iterations."
+msgstr ""
+
+#: doc/classes/HashingContext.xml:7
+msgid ""
+"The HashingContext class provides an interface for computing cryptographic "
+"hashes over multiple iterations. This is useful for example when computing "
+"hashes of big files (so you don't have to load them all in memory), network "
+"streams, and data streams in general (so you don't have to hold buffers).\n"
+"The [enum HashType] enum shows the supported hashing algorithms.\n"
+"[codeblock]\n"
+"const CHUNK_SIZE = 1024\n"
+"\n"
+"func hash_file(path):\n"
+" var ctx = HashingContext.new()\n"
+" var file = File.new()\n"
+" # Start a SHA-256 context.\n"
+" ctx.start(HashingContext.HASH_SHA256)\n"
+" # Check that file exists.\n"
+" if not file.file_exists(path):\n"
+" return\n"
+" # Open the file to hash.\n"
+" file.open(path, File.READ)\n"
+" # Update the context after reading each chunk.\n"
+" while not file.eof_reached():\n"
+" ctx.update(file.get_buffer(CHUNK_SIZE))\n"
+" # Get the computed hash.\n"
+" var res = ctx.finish()\n"
+" # Print the result as hex string and array.\n"
+" printt(res.hex_encode(), Array(res))\n"
+"[/codeblock]\n"
+"[b]Note:[/b] Not available in HTML5 exports."
+msgstr ""
+
+#: doc/classes/HashingContext.xml:38
+msgid "Closes the current context, and return the computed hash."
+msgstr ""
+
+#: doc/classes/HashingContext.xml:45
+msgid ""
+"Starts a new hash computation of the given [code]type[/code] (e.g. [constant "
+"HASH_SHA256] to start computation of a SHA-256)."
+msgstr ""
+
+#: doc/classes/HashingContext.xml:52
+msgid "Updates the computation with the given [code]chunk[/code] of data."
+msgstr ""
+
+#: doc/classes/HashingContext.xml:58
+msgid "Hashing algorithm: MD5."
+msgstr ""
+
+#: doc/classes/HashingContext.xml:61
+msgid "Hashing algorithm: SHA-1."
+msgstr ""
+
+#: doc/classes/HashingContext.xml:64
+msgid "Hashing algorithm: SHA-256."
+msgstr ""
+
+#: doc/classes/HBoxContainer.xml:4
+msgid "Horizontal box container."
+msgstr ""
+
+#: doc/classes/HBoxContainer.xml:7
+msgid "Horizontal box container. See [BoxContainer]."
+msgstr ""
+
+#: doc/classes/HBoxContainer.xml:17
+msgid "The horizontal space between the [HBoxContainer]'s elements."
+msgstr ""
+
+#: doc/classes/HeightMapShape.xml:4
+msgid "Height map shape for 3D physics."
+msgstr ""
+
+#: doc/classes/HeightMapShape.xml:7
+msgid ""
+"Height map shape resource, which can be added to a [PhysicsBody] or [Area]."
+msgstr ""
+
+#: doc/classes/HeightMapShape.xml:15
+msgid ""
+"Height map data, pool array must be of [member map_width] * [member "
+"map_depth] size."
+msgstr ""
+
+#: doc/classes/HeightMapShape.xml:18
+msgid ""
+"Depth of the height map data. Changing this will resize the [member "
+"map_data]."
+msgstr ""
+
+#: doc/classes/HeightMapShape.xml:21
+msgid ""
+"Width of the height map data. Changing this will resize the [member "
+"map_data]."
+msgstr ""
+
+#: doc/classes/HingeJoint.xml:4
+msgid "A hinge between two 3D PhysicsBodies."
+msgstr ""
+
+#: doc/classes/HingeJoint.xml:7
+msgid ""
+"A HingeJoint normally uses the Z axis of body A as the hinge axis, another "
+"axis can be specified when adding it manually though. See also "
+"[Generic6DOFJoint]."
+msgstr ""
+
+#: doc/classes/HingeJoint.xml:16 doc/classes/SpriteBase3D.xml:21
+msgid "Returns the value of the specified flag."
+msgstr ""
+
+#: doc/classes/HingeJoint.xml:23 doc/classes/ParticlesMaterial.xml:25
+#: doc/classes/PinJoint.xml:16
+msgid "Returns the value of the specified parameter."
+msgstr ""
+
+#: doc/classes/HingeJoint.xml:31
+msgid "If [code]true[/code], enables the specified flag."
+msgstr ""
+
+#: doc/classes/HingeJoint.xml:39 doc/classes/PinJoint.xml:24
+msgid "Sets the value of the specified parameter."
+msgstr ""
+
+#: doc/classes/HingeJoint.xml:45 doc/classes/HingeJoint.xml:85
+#: doc/classes/PhysicsServer.xml:977
+msgid ""
+"The speed with which the rotation across the axis perpendicular to the hinge "
+"gets corrected."
+msgstr ""
+
+#: doc/classes/HingeJoint.xml:48 doc/classes/HingeJoint.xml:102
+msgid ""
+"If [code]true[/code], the hinges maximum and minimum rotation, defined by "
+"[member angular_limit/lower] and [member angular_limit/upper] has effects."
+msgstr ""
+
+#: doc/classes/HingeJoint.xml:51 doc/classes/HingeJoint.xml:82
+msgid ""
+"The minimum rotation. Only active if [member angular_limit/enable] is "
+"[code]true[/code]."
+msgstr ""
+
+#: doc/classes/HingeJoint.xml:54 doc/classes/HingeJoint.xml:90
+#: doc/classes/PhysicsServer.xml:982
+msgid "The lower this value, the more the rotation gets slowed down."
+msgstr ""
+
+#: doc/classes/HingeJoint.xml:59 doc/classes/HingeJoint.xml:79
+msgid ""
+"The maximum rotation. Only active if [member angular_limit/enable] is "
+"[code]true[/code]."
+msgstr ""
+
+#: doc/classes/HingeJoint.xml:62 doc/classes/HingeJoint.xml:105
+msgid "When activated, a motor turns the hinge."
+msgstr ""
+
+#: doc/classes/HingeJoint.xml:65 doc/classes/HingeJoint.xml:96
+#: doc/classes/PhysicsServer.xml:988
+msgid "Maximum acceleration for the motor."
+msgstr ""
+
+#: doc/classes/HingeJoint.xml:68 doc/classes/HingeJoint.xml:93
+#: doc/classes/PhysicsServer.xml:985
+msgid "Target speed for the motor."
+msgstr ""
+
+#: doc/classes/HingeJoint.xml:71 doc/classes/HingeJoint.xml:76
+#: doc/classes/PhysicsServer.xml:968
+msgid ""
+"The speed with which the two bodies get pulled together when they move in "
+"different directions."
+msgstr ""
+
+#: doc/classes/HMACContext.xml:4
+msgid "Used to create an HMAC for a message using a key."
+msgstr ""
+
+#: doc/classes/HMACContext.xml:7
+msgid ""
+"The HMACContext class is useful for advanced HMAC use cases, such as "
+"streaming the message as it supports creating the message over time rather "
+"than providing it all at once.\n"
+"[codeblock]\n"
+"extends Node\n"
+"var ctx = HMACContext.new()\n"
+"\n"
+"func _ready():\n"
+" var key = \"supersecret\".to_utf8()\n"
+" var err = ctx.start(HashingContext.HASH_SHA256, key)\n"
+" assert(err == OK)\n"
+" var msg1 = \"this is \".to_utf8()\n"
+" var msg2 = \"vewy vewy secret\".to_utf8()\n"
+" err = ctx.update(msg1)\n"
+" assert(err == OK)\n"
+" err = ctx.update(msg2)\n"
+" assert(err == OK)\n"
+" var hmac = ctx.finish()\n"
+" print(hmac.hex_encode())\n"
+"[/codeblock]\n"
+"And in C# we can use the following.\n"
+"[codeblock]\n"
+"using Godot;\n"
+"using System;\n"
+"using System.Diagnostics;\n"
+"\n"
+"public class CryptoNode : Node\n"
+"{\n"
+" private HMACContext ctx = new HMACContext();\n"
+" public override void _Ready()\n"
+" {\n"
+" PoolByteArray key = String(\"supersecret\").to_utf8();\n"
+" Error err = ctx.Start(HashingContext.HASH_SHA256, key);\n"
+" GD.Assert(err == OK);\n"
+" PoolByteArray msg1 = String(\"this is \").to_utf8();\n"
+" PoolByteArray msg2 = String(\"vewy vew secret\").to_utf8();\n"
+" err = ctx.Update(msg1);\n"
+" GD.Assert(err == OK);\n"
+" err = ctx.Update(msg2);\n"
+" GD.Assert(err == OK);\n"
+" PoolByteArray hmac = ctx.Finish();\n"
+" GD.Print(hmac.HexEncode());\n"
+" }\n"
+"}\n"
+"[/codeblock]\n"
+"[b]Note:[/b] Not available in HTML5 exports."
+msgstr ""
+
+#: doc/classes/HMACContext.xml:58
+msgid ""
+"Returns the resulting HMAC. If the HMAC failed, an empty [PoolByteArray] is "
+"returned."
+msgstr ""
+
+#: doc/classes/HMACContext.xml:66
+msgid ""
+"Initializes the HMACContext. This method cannot be called again on the same "
+"HMACContext until [method finish] has been called."
+msgstr ""
+
+#: doc/classes/HMACContext.xml:73
+msgid ""
+"Updates the message to be HMACed. This can be called multiple times before "
+"[method finish] is called to append [code]data[/code] to the message, but "
+"cannot be called until [method start] has been called."
+msgstr ""
+
+#: doc/classes/HScrollBar.xml:4
+msgid "Horizontal scroll bar."
+msgstr ""
+
+#: doc/classes/HScrollBar.xml:7
+msgid ""
+"Horizontal version of [ScrollBar], which goes from left (min) to right (max)."
+msgstr ""
+
+#: doc/classes/HScrollBar.xml:17
+msgid ""
+"Icon used as a button to scroll the [ScrollBar] left. Supports custom step "
+"using the [member ScrollBar.custom_step] property."
+msgstr ""
+
+#: doc/classes/HScrollBar.xml:20 doc/classes/VScrollBar.xml:24
+msgid "Displayed when the mouse cursor hovers over the decrement button."
+msgstr ""
+
+#: doc/classes/HScrollBar.xml:23 doc/classes/VScrollBar.xml:27
+msgid "Displayed when the decrement button is being pressed."
+msgstr ""
+
+#: doc/classes/HScrollBar.xml:26 doc/classes/VScrollBar.xml:30
+msgid ""
+"Used as texture for the grabber, the draggable element representing current "
+"scroll."
+msgstr ""
+
+#: doc/classes/HScrollBar.xml:29 doc/classes/VScrollBar.xml:33
+msgid "Used when the mouse hovers over the grabber."
+msgstr ""
+
+#: doc/classes/HScrollBar.xml:32 doc/classes/VScrollBar.xml:36
+msgid "Used when the grabber is being dragged."
+msgstr ""
+
+#: doc/classes/HScrollBar.xml:35
+msgid ""
+"Icon used as a button to scroll the [ScrollBar] right. Supports custom step "
+"using the [member ScrollBar.custom_step] property."
+msgstr ""
+
+#: doc/classes/HScrollBar.xml:38 doc/classes/VScrollBar.xml:42
+msgid "Displayed when the mouse cursor hovers over the increment button."
+msgstr ""
+
+#: doc/classes/HScrollBar.xml:41 doc/classes/VScrollBar.xml:45
+msgid "Displayed when the increment button is being pressed."
+msgstr ""
+
+#: doc/classes/HScrollBar.xml:44 doc/classes/VScrollBar.xml:48
+msgid "Used as background of this [ScrollBar]."
+msgstr ""
+
+#: doc/classes/HScrollBar.xml:47 doc/classes/VScrollBar.xml:51
+msgid "Used as background when the [ScrollBar] has the GUI focus."
+msgstr ""
+
+#: doc/classes/HSeparator.xml:4
+msgid "Horizontal separator."
+msgstr ""
+
+#: doc/classes/HSeparator.xml:7
+msgid ""
+"Horizontal separator. See [Separator]. Even though it looks horizontal, it "
+"is used to separate objects vertically."
+msgstr ""
+
+#: doc/classes/HSeparator.xml:17
+msgid ""
+"The height of the area covered by the separator. Effectively works like a "
+"minimum height."
+msgstr ""
+
+#: doc/classes/HSeparator.xml:20
+msgid "The style for the separator line. Works best with [StyleBoxLine]."
+msgstr ""
+
+#: doc/classes/HSlider.xml:4
+msgid "Horizontal slider."
+msgstr ""
+
+#: doc/classes/HSlider.xml:7
+msgid ""
+"Horizontal slider. See [Slider]. This one goes from left (min) to right "
+"(max).\n"
+"[b]Note:[/b] The [signal Range.changed] and [signal Range.value_changed] "
+"signals are part of the [Range] class which this class inherits from."
+msgstr ""
+
+#: doc/classes/HSlider.xml:18 doc/classes/VSlider.xml:22
+msgid "The texture for the grabber (the draggable element)."
+msgstr ""
+
+#: doc/classes/HSlider.xml:21
+msgid "The background of the area to the left of the grabber."
+msgstr ""
+
+#: doc/classes/HSlider.xml:26 doc/classes/VSlider.xml:30
+msgid "The texture for the grabber when it's disabled."
+msgstr ""
+
+#: doc/classes/HSlider.xml:29 doc/classes/VSlider.xml:33
+msgid "The texture for the grabber when it's focused."
+msgstr ""
+
+#: doc/classes/HSlider.xml:32
+msgid ""
+"The background for the whole slider. Determines the height of the "
+"[code]grabber_area[/code]."
+msgstr ""
+
+#: doc/classes/HSlider.xml:35 doc/classes/VSlider.xml:39
+msgid ""
+"The texture for the ticks, visible when [member Slider.tick_count] is "
+"greater than 0."
+msgstr ""
+
+#: doc/classes/HSplitContainer.xml:4
+msgid "Horizontal split container."
+msgstr ""
+
+#: doc/classes/HSplitContainer.xml:7
+msgid ""
+"Horizontal split container. See [SplitContainer]. This goes from left to "
+"right."
+msgstr ""
+
+#: doc/classes/HSplitContainer.xml:17 doc/classes/VSplitContainer.xml:17
+msgid ""
+"Boolean value. If 1 ([code]true[/code]), the grabber will hide automatically "
+"when it isn't under the cursor. If 0 ([code]false[/code]), it's always "
+"visible."
+msgstr ""
+
+#: doc/classes/HSplitContainer.xml:22 doc/classes/VSplitContainer.xml:22
+msgid "The icon used for the grabber drawn in the middle area."
+msgstr ""
+
+#: doc/classes/HSplitContainer.xml:25 doc/classes/VSplitContainer.xml:25
+msgid "The space between sides of the container."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:4
+msgid "Low-level hyper-text transfer protocol client."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:7
+msgid ""
+"Hyper-text transfer protocol client (sometimes called \"User Agent\"). Used "
+"to make HTTP requests to download web content, upload files and other data "
+"or to communicate with various services, among other use cases. [b]See the "
+"[HTTPRequest] node for a higher-level alternative.[/b]\n"
+"[b]Note:[/b] This client only needs to connect to a host once (see [method "
+"connect_to_host]) to send multiple requests. Because of this, methods that "
+"take URLs usually take just the part after the host instead of the full URL, "
+"as the client is already connected to a host. See [method request] for a "
+"full example and to get started.\n"
+"A [HTTPClient] should be reused between multiple requests or to connect to "
+"different hosts instead of creating one client per request. Supports SSL and "
+"SSL server certificate verification. HTTP status codes in the 2xx range "
+"indicate success, 3xx redirection (i.e. \"try again, but over here\"), 4xx "
+"something was wrong with the request, and 5xx something went wrong on the "
+"server's side.\n"
+"For more information on HTTP, see https://developer.mozilla.org/en-US/docs/"
+"Web/HTTP (or read RFC 2616 to get it straight from the source: https://tools."
+"ietf.org/html/rfc2616).\n"
+"[b]Note:[/b] When performing HTTP requests from a project exported to HTML5, "
+"keep in mind the remote server may not allow requests from foreign origins "
+"due to [url=https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS]CORS[/"
+"url]. If you host the server in question, you should modify its backend to "
+"allow requests from foreign origins by adding the [code]Access-Control-Allow-"
+"Origin: *[/code] HTTP header.\n"
+"[b]Note:[/b] SSL/TLS support is currently limited to TLS 1.0, TLS 1.1, and "
+"TLS 1.2. Attempting to connect to a TLS 1.3-only server will return an "
+"error.\n"
+"[b]Warning:[/b] SSL/TLS certificate revocation and certificate pinning are "
+"currently not supported. Revoked certificates are accepted as long as they "
+"are otherwise valid. If this is a concern, you may want to use automatically "
+"managed certificates with a short validity period."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:16
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/networking/http_client_class."
+"html"
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:17 doc/classes/HTTPRequest.xml:71
+#: doc/classes/StreamPeerSSL.xml:10
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/networking/ssl_certificates."
+"html"
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:23
+msgid "Closes the current connection, allowing reuse of this [HTTPClient]."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:33
+msgid ""
+"Connects to a host. This needs to be done before any requests are sent.\n"
+"The host should not have http:// prepended but will strip the protocol "
+"identifier if provided.\n"
+"If no [code]port[/code] is specified (or [code]-1[/code] is used), it is "
+"automatically set to 80 for HTTP and 443 for HTTPS (if [code]use_ssl[/code] "
+"is enabled).\n"
+"[code]verify_host[/code] will check the SSL identity of the host if set to "
+"[code]true[/code]."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:42
+msgid ""
+"Returns the response's body length.\n"
+"[b]Note:[/b] Some Web servers may not send a body length. In this case, the "
+"value returned will be [code]-1[/code]. If using chunked transfer encoding, "
+"the body length will also be [code]-1[/code]."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:49
+msgid "Returns the response's HTTP status code."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:55
+msgid "Returns the response headers."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:61
+msgid ""
+"Returns all response headers as a Dictionary of structure [code]{ \"key\": "
+"\"value1; value2\" }[/code] where the case-sensitivity of the keys and "
+"values is kept like the server delivers it. A value is a simple String, this "
+"string can have more than one value where \"; \" is used as separator.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"{\n"
+" \"content-length\": 12,\n"
+" \"Content-Type\": \"application/json; charset=UTF-8\",\n"
+"}\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:74
+msgid ""
+"Returns a [enum Status] constant. Need to call [method poll] in order to get "
+"status updates."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:80
+msgid "If [code]true[/code], this [HTTPClient] has a response available."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:86
+msgid "If [code]true[/code], this [HTTPClient] has a response that is chunked."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:92
+msgid ""
+"This needs to be called in order to have any request processed. Check "
+"results with [method get_status]."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:99
+msgid ""
+"Generates a GET/POST application/x-www-form-urlencoded style query string "
+"from a provided dictionary, e.g.:\n"
+"[codeblock]\n"
+"var fields = {\"username\": \"user\", \"password\": \"pass\"}\n"
+"var query_string = http_client.query_string_from_dict(fields)\n"
+"# Returns \"username=user&password=pass\"\n"
+"[/codeblock]\n"
+"Furthermore, if a key has a [code]null[/code] value, only the key itself is "
+"added, without equal sign and value. If the value is an array, for each "
+"value in it a pair with the same key is added.\n"
+"[codeblock]\n"
+"var fields = {\"single\": 123, \"not_valued\": null, \"multiple\": [22, 33, "
+"44]}\n"
+"var query_string = http_client.query_string_from_dict(fields)\n"
+"# Returns \"single=123&not_valued&multiple=22&multiple=33&multiple=44\"\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:116
+msgid "Reads one chunk from the response."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:126
+msgid ""
+"Sends a request to the connected host.\n"
+"The URL parameter is usually just the part after the host, so for "
+"[code]http://somehost.com/index.php[/code], it is [code]/index.php[/code]. "
+"When sending requests to an HTTP proxy server, it should be an absolute URL. "
+"For [constant HTTPClient.METHOD_OPTIONS] requests, [code]*[/code] is also "
+"allowed. For [constant HTTPClient.METHOD_CONNECT] requests, it should be the "
+"authority component ([code]host:port[/code]).\n"
+"Headers are HTTP request headers. For available HTTP methods, see [enum "
+"Method].\n"
+"To create a POST request with query strings to push to the server, do:\n"
+"[codeblock]\n"
+"var fields = {\"username\" : \"user\", \"password\" : \"pass\"}\n"
+"var query_string = http_client.query_string_from_dict(fields)\n"
+"var headers = [\"Content-Type: application/x-www-form-urlencoded\", "
+"\"Content-Length: \" + str(query_string.length())]\n"
+"var result = http_client.request(http_client.METHOD_POST, \"/index.php\", "
+"headers, query_string)\n"
+"[/codeblock]\n"
+"[b]Note:[/b] The [code]request_data[/code] parameter is ignored if "
+"[code]method[/code] is [constant HTTPClient.METHOD_GET]. This is because GET "
+"methods can't contain request data. As a workaround, you can pass request "
+"data as a query string in the URL. See [method String.http_escape] for an "
+"example."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:146
+msgid ""
+"Sends a raw request to the connected host.\n"
+"The URL parameter is usually just the part after the host, so for "
+"[code]http://somehost.com/index.php[/code], it is [code]/index.php[/code]. "
+"When sending requests to an HTTP proxy server, it should be an absolute URL. "
+"For [constant HTTPClient.METHOD_OPTIONS] requests, [code]*[/code] is also "
+"allowed. For [constant HTTPClient.METHOD_CONNECT] requests, it should be the "
+"authority component ([code]host:port[/code]).\n"
+"Headers are HTTP request headers. For available HTTP methods, see [enum "
+"Method].\n"
+"Sends the body data raw, as a byte array and does not encode it in any way."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:155
+msgid ""
+"If [code]true[/code], execution will block until all data is read from the "
+"response."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:158
+msgid "The connection to use for this client."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:161
+msgid ""
+"The size of the buffer used and maximum bytes to read per iteration. See "
+"[method read_response_body_chunk]."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:166
+msgid ""
+"HTTP GET method. The GET method requests a representation of the specified "
+"resource. Requests using GET should only retrieve data."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:169
+msgid ""
+"HTTP HEAD method. The HEAD method asks for a response identical to that of a "
+"GET request, but without the response body. This is useful to request "
+"metadata like HTTP headers or to check if a resource exists."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:172
+msgid ""
+"HTTP POST method. The POST method is used to submit an entity to the "
+"specified resource, often causing a change in state or side effects on the "
+"server. This is often used for forms and submitting data or uploading files."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:175
+msgid ""
+"HTTP PUT method. The PUT method asks to replace all current representations "
+"of the target resource with the request payload. (You can think of POST as "
+"\"create or update\" and PUT as \"update\", although many services tend to "
+"not make a clear distinction or change their meaning)."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:178
+msgid ""
+"HTTP DELETE method. The DELETE method requests to delete the specified "
+"resource."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:181
+msgid ""
+"HTTP OPTIONS method. The OPTIONS method asks for a description of the "
+"communication options for the target resource. Rarely used."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:184
+msgid ""
+"HTTP TRACE method. The TRACE method performs a message loop-back test along "
+"the path to the target resource. Returns the entire HTTP request received in "
+"the response body. Rarely used."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:187
+msgid ""
+"HTTP CONNECT method. The CONNECT method establishes a tunnel to the server "
+"identified by the target resource. Rarely used."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:190
+msgid ""
+"HTTP PATCH method. The PATCH method is used to apply partial modifications "
+"to a resource."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:193
+msgid "Represents the size of the [enum Method] enum."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:196
+msgid "Status: Disconnected from the server."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:199
+msgid "Status: Currently resolving the hostname for the given URL into an IP."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:202
+msgid "Status: DNS failure: Can't resolve the hostname for the given URL."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:205
+msgid "Status: Currently connecting to server."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:208
+msgid "Status: Can't connect to the server."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:211
+msgid "Status: Connection established."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:214
+msgid "Status: Currently sending request."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:217
+msgid "Status: HTTP body received."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:220
+msgid "Status: Error in HTTP connection."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:223
+msgid "Status: Error in SSL handshake."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:226
+msgid ""
+"HTTP status code [code]100 Continue[/code]. Interim response that indicates "
+"everything so far is OK and that the client should continue with the request "
+"(or ignore this status if already finished)."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:229
+msgid ""
+"HTTP status code [code]101 Switching Protocol[/code]. Sent in response to an "
+"[code]Upgrade[/code] request header by the client. Indicates the protocol "
+"the server is switching to."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:232
+msgid ""
+"HTTP status code [code]102 Processing[/code] (WebDAV). Indicates that the "
+"server has received and is processing the request, but no response is "
+"available yet."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:235
+msgid ""
+"HTTP status code [code]200 OK[/code]. The request has succeeded. Default "
+"response for successful requests. Meaning varies depending on the request. "
+"GET: The resource has been fetched and is transmitted in the message body. "
+"HEAD: The entity headers are in the message body. POST: The resource "
+"describing the result of the action is transmitted in the message body. "
+"TRACE: The message body contains the request message as received by the "
+"server."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:238
+msgid ""
+"HTTP status code [code]201 Created[/code]. The request has succeeded and a "
+"new resource has been created as a result of it. This is typically the "
+"response sent after a PUT request."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:241
+msgid ""
+"HTTP status code [code]202 Accepted[/code]. The request has been received "
+"but not yet acted upon. It is non-committal, meaning that there is no way in "
+"HTTP to later send an asynchronous response indicating the outcome of "
+"processing the request. It is intended for cases where another process or "
+"server handles the request, or for batch processing."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:244
+msgid ""
+"HTTP status code [code]203 Non-Authoritative Information[/code]. This "
+"response code means returned meta-information set is not exact set as "
+"available from the origin server, but collected from a local or a third "
+"party copy. Except this condition, 200 OK response should be preferred "
+"instead of this response."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:247
+msgid ""
+"HTTP status code [code]204 No Content[/code]. There is no content to send "
+"for this request, but the headers may be useful. The user-agent may update "
+"its cached headers for this resource with the new ones."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:250
+msgid ""
+"HTTP status code [code]205 Reset Content[/code]. The server has fulfilled "
+"the request and desires that the client resets the \"document view\" that "
+"caused the request to be sent to its original state as received from the "
+"origin server."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:253
+msgid ""
+"HTTP status code [code]206 Partial Content[/code]. This response code is "
+"used because of a range header sent by the client to separate download into "
+"multiple streams."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:256
+msgid ""
+"HTTP status code [code]207 Multi-Status[/code] (WebDAV). A Multi-Status "
+"response conveys information about multiple resources in situations where "
+"multiple status codes might be appropriate."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:259
+msgid ""
+"HTTP status code [code]208 Already Reported[/code] (WebDAV). Used inside a "
+"DAV: propstat response element to avoid enumerating the internal members of "
+"multiple bindings to the same collection repeatedly."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:262
+msgid ""
+"HTTP status code [code]226 IM Used[/code] (WebDAV). The server has fulfilled "
+"a GET request for the resource, and the response is a representation of the "
+"result of one or more instance-manipulations applied to the current instance."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:265
+msgid ""
+"HTTP status code [code]300 Multiple Choice[/code]. The request has more than "
+"one possible responses and there is no standardized way to choose one of the "
+"responses. User-agent or user should choose one of them."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:268
+msgid ""
+"HTTP status code [code]301 Moved Permanently[/code]. Redirection. This "
+"response code means the URI of requested resource has been changed. The new "
+"URI is usually included in the response."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:271
+msgid ""
+"HTTP status code [code]302 Found[/code]. Temporary redirection. This "
+"response code means the URI of requested resource has been changed "
+"temporarily. New changes in the URI might be made in the future. Therefore, "
+"this same URI should be used by the client in future requests."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:274
+msgid ""
+"HTTP status code [code]303 See Other[/code]. The server is redirecting the "
+"user agent to a different resource, as indicated by a URI in the Location "
+"header field, which is intended to provide an indirect response to the "
+"original request."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:277
+msgid ""
+"HTTP status code [code]304 Not Modified[/code]. A conditional GET or HEAD "
+"request has been received and would have resulted in a 200 OK response if it "
+"were not for the fact that the condition evaluated to [code]false[/code]."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:280
+msgid ""
+"HTTP status code [code]305 Use Proxy[/code]. [i]Deprecated. Do not use.[/i]"
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:283
+msgid ""
+"HTTP status code [code]306 Switch Proxy[/code]. [i]Deprecated. Do not use.[/"
+"i]"
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:286
+msgid ""
+"HTTP status code [code]307 Temporary Redirect[/code]. The target resource "
+"resides temporarily under a different URI and the user agent MUST NOT change "
+"the request method if it performs an automatic redirection to that URI."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:289
+msgid ""
+"HTTP status code [code]308 Permanent Redirect[/code]. The target resource "
+"has been assigned a new permanent URI and any future references to this "
+"resource ought to use one of the enclosed URIs."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:292
+msgid ""
+"HTTP status code [code]400 Bad Request[/code]. The request was invalid. The "
+"server cannot or will not process the request due to something that is "
+"perceived to be a client error (e.g., malformed request syntax, invalid "
+"request message framing, invalid request contents, or deceptive request "
+"routing)."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:295
+msgid ""
+"HTTP status code [code]401 Unauthorized[/code]. Credentials required. The "
+"request has not been applied because it lacks valid authentication "
+"credentials for the target resource."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:298
+msgid ""
+"HTTP status code [code]402 Payment Required[/code]. This response code is "
+"reserved for future use. Initial aim for creating this code was using it for "
+"digital payment systems, however this is not currently used."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:301
+msgid ""
+"HTTP status code [code]403 Forbidden[/code]. The client does not have access "
+"rights to the content, i.e. they are unauthorized, so server is rejecting to "
+"give proper response. Unlike [code]401[/code], the client's identity is "
+"known to the server."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:304
+msgid ""
+"HTTP status code [code]404 Not Found[/code]. The server can not find "
+"requested resource. Either the URL is not recognized or the endpoint is "
+"valid but the resource itself does not exist. May also be sent instead of "
+"403 to hide existence of a resource if the client is not authorized."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:307
+msgid ""
+"HTTP status code [code]405 Method Not Allowed[/code]. The request's HTTP "
+"method is known by the server but has been disabled and cannot be used. For "
+"example, an API may forbid DELETE-ing a resource. The two mandatory methods, "
+"GET and HEAD, must never be disabled and should not return this error code."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:310
+msgid ""
+"HTTP status code [code]406 Not Acceptable[/code]. The target resource does "
+"not have a current representation that would be acceptable to the user "
+"agent, according to the proactive negotiation header fields received in the "
+"request. Used when negotiation content."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:313
+msgid ""
+"HTTP status code [code]407 Proxy Authentication Required[/code]. Similar to "
+"401 Unauthorized, but it indicates that the client needs to authenticate "
+"itself in order to use a proxy."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:316
+msgid ""
+"HTTP status code [code]408 Request Timeout[/code]. The server did not "
+"receive a complete request message within the time that it was prepared to "
+"wait."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:319
+msgid ""
+"HTTP status code [code]409 Conflict[/code]. The request could not be "
+"completed due to a conflict with the current state of the target resource. "
+"This code is used in situations where the user might be able to resolve the "
+"conflict and resubmit the request."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:322
+msgid ""
+"HTTP status code [code]410 Gone[/code]. The target resource is no longer "
+"available at the origin server and this condition is likely permanent."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:325
+msgid ""
+"HTTP status code [code]411 Length Required[/code]. The server refuses to "
+"accept the request without a defined Content-Length header."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:328
+msgid ""
+"HTTP status code [code]412 Precondition Failed[/code]. One or more "
+"conditions given in the request header fields evaluated to [code]false[/"
+"code] when tested on the server."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:331
+msgid ""
+"HTTP status code [code]413 Entity Too Large[/code]. The server is refusing "
+"to process a request because the request payload is larger than the server "
+"is willing or able to process."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:334
+msgid ""
+"HTTP status code [code]414 Request-URI Too Long[/code]. The server is "
+"refusing to service the request because the request-target is longer than "
+"the server is willing to interpret."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:337
+msgid ""
+"HTTP status code [code]415 Unsupported Media Type[/code]. The origin server "
+"is refusing to service the request because the payload is in a format not "
+"supported by this method on the target resource."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:340
+msgid ""
+"HTTP status code [code]416 Requested Range Not Satisfiable[/code]. None of "
+"the ranges in the request's Range header field overlap the current extent of "
+"the selected resource or the set of ranges requested has been rejected due "
+"to invalid ranges or an excessive request of small or overlapping ranges."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:343
+msgid ""
+"HTTP status code [code]417 Expectation Failed[/code]. The expectation given "
+"in the request's Expect header field could not be met by at least one of the "
+"inbound servers."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:346
+msgid ""
+"HTTP status code [code]418 I'm A Teapot[/code]. Any attempt to brew coffee "
+"with a teapot should result in the error code \"418 I'm a teapot\". The "
+"resulting entity body MAY be short and stout."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:349
+msgid ""
+"HTTP status code [code]421 Misdirected Request[/code]. The request was "
+"directed at a server that is not able to produce a response. This can be "
+"sent by a server that is not configured to produce responses for the "
+"combination of scheme and authority that are included in the request URI."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:352
+msgid ""
+"HTTP status code [code]422 Unprocessable Entity[/code] (WebDAV). The server "
+"understands the content type of the request entity (hence a 415 Unsupported "
+"Media Type status code is inappropriate), and the syntax of the request "
+"entity is correct (thus a 400 Bad Request status code is inappropriate) but "
+"was unable to process the contained instructions."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:355
+msgid ""
+"HTTP status code [code]423 Locked[/code] (WebDAV). The source or destination "
+"resource of a method is locked."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:358
+msgid ""
+"HTTP status code [code]424 Failed Dependency[/code] (WebDAV). The method "
+"could not be performed on the resource because the requested action depended "
+"on another action and that action failed."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:361
+msgid ""
+"HTTP status code [code]426 Upgrade Required[/code]. The server refuses to "
+"perform the request using the current protocol but might be willing to do so "
+"after the client upgrades to a different protocol."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:364
+msgid ""
+"HTTP status code [code]428 Precondition Required[/code]. The origin server "
+"requires the request to be conditional."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:367
+msgid ""
+"HTTP status code [code]429 Too Many Requests[/code]. The user has sent too "
+"many requests in a given amount of time (see \"rate limiting\"). Back off "
+"and increase time between requests or try again later."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:370
+msgid ""
+"HTTP status code [code]431 Request Header Fields Too Large[/code]. The "
+"server is unwilling to process the request because its header fields are too "
+"large. The request MAY be resubmitted after reducing the size of the request "
+"header fields."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:373
+msgid ""
+"HTTP status code [code]451 Response Unavailable For Legal Reasons[/code]. "
+"The server is denying access to the resource as a consequence of a legal "
+"demand."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:376
+msgid ""
+"HTTP status code [code]500 Internal Server Error[/code]. The server "
+"encountered an unexpected condition that prevented it from fulfilling the "
+"request."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:379
+msgid ""
+"HTTP status code [code]501 Not Implemented[/code]. The server does not "
+"support the functionality required to fulfill the request."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:382
+msgid ""
+"HTTP status code [code]502 Bad Gateway[/code]. The server, while acting as a "
+"gateway or proxy, received an invalid response from an inbound server it "
+"accessed while attempting to fulfill the request. Usually returned by load "
+"balancers or proxies."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:385
+msgid ""
+"HTTP status code [code]503 Service Unavailable[/code]. The server is "
+"currently unable to handle the request due to a temporary overload or "
+"scheduled maintenance, which will likely be alleviated after some delay. Try "
+"again later."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:388
+msgid ""
+"HTTP status code [code]504 Gateway Timeout[/code]. The server, while acting "
+"as a gateway or proxy, did not receive a timely response from an upstream "
+"server it needed to access in order to complete the request. Usually "
+"returned by load balancers or proxies."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:391
+msgid ""
+"HTTP status code [code]505 HTTP Version Not Supported[/code]. The server "
+"does not support, or refuses to support, the major version of HTTP that was "
+"used in the request message."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:394
+msgid ""
+"HTTP status code [code]506 Variant Also Negotiates[/code]. The server has an "
+"internal configuration error: the chosen variant resource is configured to "
+"engage in transparent content negotiation itself, and is therefore not a "
+"proper end point in the negotiation process."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:397
+msgid ""
+"HTTP status code [code]507 Insufficient Storage[/code]. The method could not "
+"be performed on the resource because the server is unable to store the "
+"representation needed to successfully complete the request."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:400
+msgid ""
+"HTTP status code [code]508 Loop Detected[/code]. The server terminated an "
+"operation because it encountered an infinite loop while processing a request "
+"with \"Depth: infinity\". This status indicates that the entire operation "
+"failed."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:403
+msgid ""
+"HTTP status code [code]510 Not Extended[/code]. The policy for accessing the "
+"resource has not been met in the request. The server should send back all "
+"the information necessary for the client to issue an extended request."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:406
+msgid ""
+"HTTP status code [code]511 Network Authentication Required[/code]. The "
+"client needs to authenticate to gain network access."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:4
+msgid "A node with the ability to send HTTP(S) requests."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:7
+msgid ""
+"A node with the ability to send HTTP requests. Uses [HTTPClient] "
+"internally.\n"
+"Can be used to make HTTP requests, i.e. download or upload files or web "
+"content via HTTP.\n"
+"[b]Warning:[/b] See the notes and warnings on [HTTPClient] for limitations, "
+"especially regarding SSL security.\n"
+"[b]Example of contacting a REST API and printing one of its returned fields:"
+"[/b]\n"
+"[codeblock]\n"
+"func _ready():\n"
+" # Create an HTTP request node and connect its completion signal.\n"
+" var http_request = HTTPRequest.new()\n"
+" add_child(http_request)\n"
+" http_request.connect(\"request_completed\", self, "
+"\"_http_request_completed\")\n"
+"\n"
+" # Perform a GET request. The URL below returns JSON as of writing.\n"
+" var error = http_request.request(\"https://httpbin.org/get\")\n"
+" if error != OK:\n"
+" push_error(\"An error occurred in the HTTP request.\")\n"
+"\n"
+" # Perform a POST request. The URL below returns JSON as of writing.\n"
+" # Note: Don't make simultaneous requests using a single HTTPRequest "
+"node.\n"
+" # The snippet below is provided for reference only.\n"
+" var body = {\"name\": \"Godette\"}\n"
+" error = http_request.request(\"https://httpbin.org/post\", [], true, "
+"HTTPClient.METHOD_POST, body)\n"
+" if error != OK:\n"
+" push_error(\"An error occurred in the HTTP request.\")\n"
+"\n"
+"\n"
+"# Called when the HTTP request is completed.\n"
+"func _http_request_completed(result, response_code, headers, body):\n"
+" var response = parse_json(body.get_string_from_utf8())\n"
+"\n"
+" # Will print the user agent string used by the HTTPRequest node (as "
+"recognized by httpbin.org).\n"
+" print(response.headers[\"User-Agent\"])\n"
+"[/codeblock]\n"
+"[b]Example of loading and displaying an image using HTTPRequest:[/b]\n"
+"[codeblock]\n"
+"func _ready():\n"
+" # Create an HTTP request node and connect its completion signal.\n"
+" var http_request = HTTPRequest.new()\n"
+" add_child(http_request)\n"
+" http_request.connect(\"request_completed\", self, "
+"\"_http_request_completed\")\n"
+"\n"
+" # Perform the HTTP request. The URL below returns a PNG image as of "
+"writing.\n"
+" var error = http_request.request(\"https://via.placeholder.com/512\")\n"
+" if error != OK:\n"
+" push_error(\"An error occurred in the HTTP request.\")\n"
+"\n"
+"\n"
+"# Called when the HTTP request is completed.\n"
+"func _http_request_completed(result, response_code, headers, body):\n"
+" var image = Image.new()\n"
+" var error = image.load_png_from_buffer(body)\n"
+" if error != OK:\n"
+" push_error(\"Couldn't load the image.\")\n"
+"\n"
+" var texture = ImageTexture.new()\n"
+" texture.create_from_image(image)\n"
+"\n"
+" # Display the image in a TextureRect node.\n"
+" var texture_rect = TextureRect.new()\n"
+" add_child(texture_rect)\n"
+" texture_rect.texture = texture\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:70
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/networking/http_request_class."
+"html"
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:77
+msgid "Cancels the current request."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:83
+msgid ""
+"Returns the response body length.\n"
+"[b]Note:[/b] Some Web servers may not send a body length. In this case, the "
+"value returned will be [code]-1[/code]. If using chunked transfer encoding, "
+"the body length will also be [code]-1[/code]."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:90
+msgid "Returns the amount of bytes this HTTPRequest downloaded."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:96
+msgid ""
+"Returns the current status of the underlying [HTTPClient]. See [enum "
+"HTTPClient.Status]."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:107
+msgid ""
+"Creates request on the underlying [HTTPClient]. If there is no configuration "
+"errors, it tries to connect using [method HTTPClient.connect_to_host] and "
+"passes parameters onto [method HTTPClient.request].\n"
+"Returns [constant OK] if request is successfully created. (Does not imply "
+"that the server has responded), [constant ERR_UNCONFIGURED] if not in the "
+"tree, [constant ERR_BUSY] if still processing previous request, [constant "
+"ERR_INVALID_PARAMETER] if given string is not a valid URL format, or "
+"[constant ERR_CANT_CONNECT] if not using thread and the [HTTPClient] cannot "
+"connect to host.\n"
+"[b]Note:[/b] When [code]method[/code] is [constant HTTPClient.METHOD_GET], "
+"the payload sent via [code]request_data[/code] might be ignored by the "
+"server or even cause the server to reject the request (check [url=https://"
+"datatracker.ietf.org/doc/html/rfc7231#section-4.3.1]RFC 7231 section 4.3.1[/"
+"url] for more details). As a workaround, you can send data as a query string "
+"in the URL. See [method String.http_escape] for an example."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:120
+msgid ""
+"Creates request on the underlying [HTTPClient] using a raw array of bytes "
+"for the request body. If there is no configuration errors, it tries to "
+"connect using [method HTTPClient.connect_to_host] and passes parameters onto "
+"[method HTTPClient.request].\n"
+"Returns [constant OK] if request is successfully created. (Does not imply "
+"that the server has responded), [constant ERR_UNCONFIGURED] if not in the "
+"tree, [constant ERR_BUSY] if still processing previous request, [constant "
+"ERR_INVALID_PARAMETER] if given string is not a valid URL format, or "
+"[constant ERR_CANT_CONNECT] if not using thread and the [HTTPClient] cannot "
+"connect to host."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:127
+msgid "Maximum allowed size for response bodies."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:130
+msgid ""
+"The size of the buffer used and maximum bytes to read per iteration. See "
+"[member HTTPClient.read_chunk_size].\n"
+"Set this to a lower value (e.g. 4096 for 4 KiB) when downloading small files "
+"to decrease memory usage at the cost of download speeds."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:134
+msgid "The file to download into. Will output any received file into it."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:137
+msgid "Maximum number of allowed redirects."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:142
+msgid "If [code]true[/code], multithreading is used to improve performance."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:152
+msgid "Emitted when a request is completed."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:158
+msgid "Request successful."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:163
+msgid "Request failed while connecting."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:166
+msgid "Request failed while resolving."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:169
+msgid "Request failed due to connection (read/write) error."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:172
+msgid "Request failed on SSL handshake."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:175
+msgid "Request does not have a response (yet)."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:178
+msgid "Request exceeded its maximum size limit, see [member body_size_limit]."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:181
+msgid "Request failed (currently unused)."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:184
+msgid "HTTPRequest couldn't open the download file."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:187
+msgid "HTTPRequest couldn't write to the download file."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:190
+msgid "Request reached its maximum redirect limit, see [member max_redirects]."
+msgstr ""
+
+#: doc/classes/Image.xml:4
+msgid "Image datatype."
+msgstr ""
+
+#: doc/classes/Image.xml:7
+msgid ""
+"Native image datatype. Contains image data which can be converted to an "
+"[ImageTexture] and provides commonly used [i]image processing[/i] methods. "
+"The maximum width and height for an [Image] are [constant MAX_WIDTH] and "
+"[constant MAX_HEIGHT].\n"
+"An [Image] cannot be assigned to a [code]texture[/code] property of an "
+"object directly (such as [Sprite]), and has to be converted manually to an "
+"[ImageTexture] first.\n"
+"[b]Note:[/b] The maximum image size is 16384×16384 pixels due to graphics "
+"hardware limitations. Larger images may fail to import."
+msgstr ""
+
+#: doc/classes/Image.xml:12 doc/classes/ImageTexture.xml:31
+msgid ""
+"https://docs.godotengine.org/en/3.4/getting_started/workflow/assets/"
+"importing_images.html"
+msgstr ""
+
+#: doc/classes/Image.xml:21
+msgid ""
+"Alpha-blends [code]src_rect[/code] from [code]src[/code] image to this image "
+"at coordinates [code]dest[/code]."
+msgstr ""
+
+#: doc/classes/Image.xml:31
+msgid ""
+"Alpha-blends [code]src_rect[/code] from [code]src[/code] image to this image "
+"using [code]mask[/code] image at coordinates [code]dst[/code]. Alpha "
+"channels are required for both [code]src[/code] and [code]mask[/code]. "
+"[code]dst[/code] pixels and [code]src[/code] pixels will blend if the "
+"corresponding mask pixel's alpha value is not 0. [code]src[/code] image and "
+"[code]mask[/code] image [b]must[/b] have the same size (width and height) "
+"but they can have different formats."
+msgstr ""
+
+#: doc/classes/Image.xml:40
+msgid ""
+"Copies [code]src_rect[/code] from [code]src[/code] image to this image at "
+"coordinates [code]dst[/code]."
+msgstr ""
+
+#: doc/classes/Image.xml:50
+msgid ""
+"Blits [code]src_rect[/code] area from [code]src[/code] image to this image "
+"at the coordinates given by [code]dst[/code]. [code]src[/code] pixel is "
+"copied onto [code]dst[/code] if the corresponding [code]mask[/code] pixel's "
+"alpha value is not 0. [code]src[/code] image and [code]mask[/code] image "
+"[b]must[/b] have the same size (width and height) but they can have "
+"different formats."
+msgstr ""
+
+#: doc/classes/Image.xml:57
+msgid ""
+"Converts a bumpmap to a normalmap. A bumpmap provides a height offset per-"
+"pixel, while a normalmap provides a normal direction per pixel."
+msgstr ""
+
+#: doc/classes/Image.xml:63
+msgid "Removes the image's mipmaps."
+msgstr ""
+
+#: doc/classes/Image.xml:72
+msgid ""
+"Compresses the image to use less memory. Can not directly access pixel data "
+"while the image is compressed. Returns error if the chosen compression mode "
+"is not available. See [enum CompressMode] and [enum CompressSource] "
+"constants."
+msgstr ""
+
+#: doc/classes/Image.xml:79
+msgid "Converts the image's format. See [enum Format] constants."
+msgstr ""
+
+#: doc/classes/Image.xml:86
+msgid "Copies [code]src[/code] image to this image."
+msgstr ""
+
+#: doc/classes/Image.xml:96
+msgid ""
+"Creates an empty image of given size and format. See [enum Format] "
+"constants. If [code]use_mipmaps[/code] is [code]true[/code] then generate "
+"mipmaps for this image. See the [method generate_mipmaps]."
+msgstr ""
+
+#: doc/classes/Image.xml:107
+msgid ""
+"Creates a new image of given size and format. See [enum Format] constants. "
+"Fills the image with the given raw data. If [code]use_mipmaps[/code] is "
+"[code]true[/code] then loads mipmaps for this image from [code]data[/code]. "
+"See [method generate_mipmaps]."
+msgstr ""
+
+#: doc/classes/Image.xml:115
+msgid ""
+"Crops the image to the given [code]width[/code] and [code]height[/code]. If "
+"the specified size is larger than the current size, the extra area is filled "
+"with black pixels."
+msgstr ""
+
+#: doc/classes/Image.xml:121
+msgid ""
+"Decompresses the image if it is compressed. Returns an error if decompress "
+"function is not available."
+msgstr ""
+
+#: doc/classes/Image.xml:127
+msgid ""
+"Returns [constant ALPHA_BLEND] if the image has data for alpha values. "
+"Returns [constant ALPHA_BIT] if all the alpha values are stored in a single "
+"bit. Returns [constant ALPHA_NONE] if no data for alpha values is found."
+msgstr ""
+
+#: doc/classes/Image.xml:133
+msgid ""
+"Stretches the image and enlarges it by a factor of 2. No interpolation is "
+"done."
+msgstr ""
+
+#: doc/classes/Image.xml:140
+msgid "Fills the image with a given [Color]."
+msgstr ""
+
+#: doc/classes/Image.xml:146
+msgid "Blends low-alpha pixels with nearby pixels."
+msgstr ""
+
+#: doc/classes/Image.xml:152
+msgid "Flips the image horizontally."
+msgstr ""
+
+#: doc/classes/Image.xml:158
+msgid "Flips the image vertically."
+msgstr ""
+
+#: doc/classes/Image.xml:165
+msgid ""
+"Generates mipmaps for the image. Mipmaps are precalculated lower-resolution "
+"copies of the image that are automatically used if the image needs to be "
+"scaled down when rendered. They help improve image quality and performance "
+"when rendering. This method returns an error if the image is compressed, in "
+"a custom format, or if the image's width/height is [code]0[/code].\n"
+"[b]Note:[/b] Mipmap generation is done on the CPU, is single-threaded and is "
+"[i]always[/i] done on the main thread. This means generating mipmaps will "
+"result in noticeable stuttering during gameplay, even if [method "
+"generate_mipmaps] is called from a [Thread]."
+msgstr ""
+
+#: doc/classes/Image.xml:172
+msgid "Returns a copy of the image's raw data."
+msgstr ""
+
+#: doc/classes/Image.xml:178
+msgid "Returns the image's format. See [enum Format] constants."
+msgstr ""
+
+#: doc/classes/Image.xml:184
+msgid "Returns the image's height."
+msgstr ""
+
+#: doc/classes/Image.xml:191
+msgid ""
+"Returns the offset where the image's mipmap with index [code]mipmap[/code] "
+"is stored in the [code]data[/code] dictionary."
+msgstr ""
+
+#: doc/classes/Image.xml:199
+msgid ""
+"Returns the color of the pixel at [code](x, y)[/code] if the image is "
+"locked. If the image is unlocked, it always returns a [Color] with the value "
+"[code](0, 0, 0, 1.0)[/code]. This is the same as [method get_pixelv], but "
+"two integer arguments instead of a Vector2 argument."
+msgstr ""
+
+#: doc/classes/Image.xml:206
+msgid ""
+"Returns the color of the pixel at [code]src[/code] if the image is locked. "
+"If the image is unlocked, it always returns a [Color] with the value [code]"
+"(0, 0, 0, 1.0)[/code]. This is the same as [method get_pixel], but with a "
+"Vector2 argument instead of two integer arguments."
+msgstr ""
+
+#: doc/classes/Image.xml:213
+msgid ""
+"Returns a new image that is a copy of the image's area specified with "
+"[code]rect[/code]."
+msgstr ""
+
+#: doc/classes/Image.xml:219
+msgid "Returns the image's size (width and height)."
+msgstr ""
+
+#: doc/classes/Image.xml:225
+msgid ""
+"Returns a [Rect2] enclosing the visible portion of the image, considering "
+"each pixel with a non-zero alpha channel as visible."
+msgstr ""
+
+#: doc/classes/Image.xml:231
+msgid "Returns the image's width."
+msgstr ""
+
+#: doc/classes/Image.xml:237
+msgid "Returns [code]true[/code] if the image has generated mipmaps."
+msgstr ""
+
+#: doc/classes/Image.xml:243
+msgid "Returns [code]true[/code] if the image is compressed."
+msgstr ""
+
+#: doc/classes/Image.xml:249
+msgid "Returns [code]true[/code] if the image has no data."
+msgstr ""
+
+#: doc/classes/Image.xml:255
+msgid ""
+"Returns [code]true[/code] if all the image's pixels have an alpha value of "
+"0. Returns [code]false[/code] if any pixel has an alpha value higher than 0."
+msgstr ""
+
+#: doc/classes/Image.xml:262
+msgid ""
+"Loads an image from file [code]path[/code]. See [url=https://docs."
+"godotengine.org/en/3.4/getting_started/workflow/assets/importing_images."
+"html#supported-image-formats]Supported image formats[/url] for a list of "
+"supported image formats and limitations.\n"
+"[b]Warning:[/b] This method should only be used in the editor or in cases "
+"when you need to load external images at run-time, such as images located at "
+"the [code]user://[/code] directory, and may not work in exported projects.\n"
+"See also [ImageTexture] description for usage examples."
+msgstr ""
+
+#: doc/classes/Image.xml:271
+msgid ""
+"Loads an image from the binary contents of a BMP file.\n"
+"[b]Note:[/b] Godot's BMP module doesn't support 16-bit per pixel images. "
+"Only 1-bit, 4-bit, 8-bit, 24-bit, and 32-bit per pixel images are supported."
+msgstr ""
+
+#: doc/classes/Image.xml:279
+msgid "Loads an image from the binary contents of a JPEG file."
+msgstr ""
+
+#: doc/classes/Image.xml:286
+msgid "Loads an image from the binary contents of a PNG file."
+msgstr ""
+
+#: doc/classes/Image.xml:293
+msgid "Loads an image from the binary contents of a TGA file."
+msgstr ""
+
+#: doc/classes/Image.xml:300
+msgid "Loads an image from the binary contents of a WebP file."
+msgstr ""
+
+#: doc/classes/Image.xml:306
+msgid ""
+"Locks the data for reading and writing access. Sends an error to the console "
+"if the image is not locked when reading or writing a pixel."
+msgstr ""
+
+#: doc/classes/Image.xml:312
+msgid ""
+"Converts the image's data to represent coordinates on a 3D plane. This is "
+"used when the image represents a normalmap. A normalmap can add lots of "
+"detail to a 3D surface without increasing the polygon count."
+msgstr ""
+
+#: doc/classes/Image.xml:318
+msgid ""
+"Multiplies color values with alpha values. Resulting color values for a "
+"pixel are [code](color * alpha)/256[/code]."
+msgstr ""
+
+#: doc/classes/Image.xml:327
+msgid ""
+"Resizes the image to the given [code]width[/code] and [code]height[/code]. "
+"New pixels are calculated using the [code]interpolation[/code] mode defined "
+"via [enum Interpolation] constants."
+msgstr ""
+
+#: doc/classes/Image.xml:335
+msgid ""
+"Resizes the image to the nearest power of 2 for the width and height. If "
+"[code]square[/code] is [code]true[/code] then set width and height to be the "
+"same. New pixels are calculated using the [code]interpolation[/code] mode "
+"defined via [enum Interpolation] constants."
+msgstr ""
+
+#: doc/classes/Image.xml:341
+msgid ""
+"Converts a standard RGBE (Red Green Blue Exponent) image to an sRGB image."
+msgstr ""
+
+#: doc/classes/Image.xml:349
+msgid ""
+"Saves the image as an EXR file to [code]path[/code]. If [code]grayscale[/"
+"code] is [code]true[/code] and the image has only one channel, it will be "
+"saved explicitly as monochrome rather than one red channel. This function "
+"will return [constant ERR_UNAVAILABLE] if Godot was compiled without the "
+"TinyEXR module.\n"
+"[b]Note:[/b] The TinyEXR module is disabled in non-editor builds, which "
+"means [method save_exr] will return [constant ERR_UNAVAILABLE] when it is "
+"called from an exported project."
+msgstr ""
+
+#: doc/classes/Image.xml:357
+msgid "Saves the image as a PNG file to [code]path[/code]."
+msgstr ""
+
+#: doc/classes/Image.xml:371
+msgid ""
+"Sets the [Color] of the pixel at [code](x, y)[/code] if the image is locked. "
+"Example:\n"
+"[codeblock]\n"
+"var img = Image.new()\n"
+"img.create(img_width, img_height, false, Image.FORMAT_RGBA8)\n"
+"img.lock()\n"
+"img.set_pixel(x, y, color) # Works\n"
+"img.unlock()\n"
+"img.set_pixel(x, y, color) # Does not have an effect\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Image.xml:387
+msgid ""
+"Sets the [Color] of the pixel at [code](dst.x, dst.y)[/code] if the image is "
+"locked. Note that the [code]dst[/code] values must be integers. Example:\n"
+"[codeblock]\n"
+"var img = Image.new()\n"
+"img.create(img_width, img_height, false, Image.FORMAT_RGBA8)\n"
+"img.lock()\n"
+"img.set_pixelv(Vector2(x, y), color) # Works\n"
+"img.unlock()\n"
+"img.set_pixelv(Vector2(x, y), color) # Does not have an effect\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Image.xml:401
+msgid "Shrinks the image by a factor of 2."
+msgstr ""
+
+#: doc/classes/Image.xml:407
+msgid "Converts the raw data from the sRGB colorspace to a linear scale."
+msgstr ""
+
+#: doc/classes/Image.xml:413
+msgid "Unlocks the data and prevents changes."
+msgstr ""
+
+#: doc/classes/Image.xml:419
+msgid ""
+"Holds all the image's color data in a given format. See [enum Format] "
+"constants."
+msgstr ""
+
+#: doc/classes/Image.xml:424
+msgid "The maximal width allowed for [Image] resources."
+msgstr ""
+
+#: doc/classes/Image.xml:427
+msgid "The maximal height allowed for [Image] resources."
+msgstr ""
+
+#: doc/classes/Image.xml:430
+msgid "Texture format with a single 8-bit depth representing luminance."
+msgstr ""
+
+#: doc/classes/Image.xml:433
+msgid ""
+"OpenGL texture format with two values, luminance and alpha each stored with "
+"8 bits."
+msgstr ""
+
+#: doc/classes/Image.xml:436
+msgid ""
+"OpenGL texture format [code]RED[/code] with a single component and a "
+"bitdepth of 8.\n"
+"[b]Note:[/b] When using the GLES2 backend, this uses the alpha channel "
+"instead of the red channel for storage."
+msgstr ""
+
+#: doc/classes/Image.xml:440
+msgid ""
+"OpenGL texture format [code]RG[/code] with two components and a bitdepth of "
+"8 for each."
+msgstr ""
+
+#: doc/classes/Image.xml:443
+msgid ""
+"OpenGL texture format [code]RGB[/code] with three components, each with a "
+"bitdepth of 8.\n"
+"[b]Note:[/b] When creating an [ImageTexture], an sRGB to linear color space "
+"conversion is performed."
+msgstr ""
+
+#: doc/classes/Image.xml:447
+msgid ""
+"OpenGL texture format [code]RGBA[/code] with four components, each with a "
+"bitdepth of 8.\n"
+"[b]Note:[/b] When creating an [ImageTexture], an sRGB to linear color space "
+"conversion is performed."
+msgstr ""
+
+#: doc/classes/Image.xml:451
+msgid ""
+"OpenGL texture format [code]RGBA[/code] with four components, each with a "
+"bitdepth of 4."
+msgstr ""
+
+#: doc/classes/Image.xml:454
+msgid ""
+"OpenGL texture format [code]GL_RGB5_A1[/code] where 5 bits of depth for each "
+"component of RGB and one bit for alpha."
+msgstr ""
+
+#: doc/classes/Image.xml:457
+msgid ""
+"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 32-"
+"bit floating-point value."
+msgstr ""
+
+#: doc/classes/Image.xml:460
+msgid ""
+"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
+"each a 32-bit floating-point values."
+msgstr ""
+
+#: doc/classes/Image.xml:463
+msgid ""
+"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
+"components, each a 32-bit floating-point values."
+msgstr ""
+
+#: doc/classes/Image.xml:466
+msgid ""
+"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
+"components, each a 32-bit floating-point values."
+msgstr ""
+
+#: doc/classes/Image.xml:469
+msgid ""
+"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 16-"
+"bit \"half-precision\" floating-point value."
+msgstr ""
+
+#: doc/classes/Image.xml:472
+msgid ""
+"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
+"each a 16-bit \"half-precision\" floating-point value."
+msgstr ""
+
+#: doc/classes/Image.xml:475
+msgid ""
+"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
+"components, each a 16-bit \"half-precision\" floating-point value."
+msgstr ""
+
+#: doc/classes/Image.xml:478
+msgid ""
+"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
+"components, each a 16-bit \"half-precision\" floating-point value."
+msgstr ""
+
+#: doc/classes/Image.xml:481
+msgid ""
+"A special OpenGL texture format where the three color components have 9 bits "
+"of precision and all three share a single 5-bit exponent."
+msgstr ""
+
+#: doc/classes/Image.xml:484
+msgid ""
+"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
+"texture format that uses Block Compression 1, and is the smallest variation "
+"of S3TC, only providing 1 bit of alpha and color data being premultiplied "
+"with alpha.\n"
+"[b]Note:[/b] When creating an [ImageTexture], an sRGB to linear color space "
+"conversion is performed."
+msgstr ""
+
+#: doc/classes/Image.xml:488
+msgid ""
+"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
+"texture format that uses Block Compression 2, and color data is interpreted "
+"as not having been premultiplied by alpha. Well suited for images with sharp "
+"alpha transitions between translucent and opaque areas.\n"
+"[b]Note:[/b] When creating an [ImageTexture], an sRGB to linear color space "
+"conversion is performed."
+msgstr ""
+
+#: doc/classes/Image.xml:492
+msgid ""
+"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
+"texture format also known as Block Compression 3 or BC3 that contains 64 "
+"bits of alpha channel data followed by 64 bits of DXT1-encoded color data. "
+"Color data is not premultiplied by alpha, same as DXT3. DXT5 generally "
+"produces superior results for transparent gradients compared to DXT3.\n"
+"[b]Note:[/b] When creating an [ImageTexture], an sRGB to linear color space "
+"conversion is performed."
+msgstr ""
+
+#: doc/classes/Image.xml:496
+msgid ""
+"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
+"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
+"normalizing the red channel data using the same compression algorithm that "
+"DXT5 uses for the alpha channel."
+msgstr ""
+
+#: doc/classes/Image.xml:499
+msgid ""
+"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
+"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
+"normalizing the red and green channel data using the same compression "
+"algorithm that DXT5 uses for the alpha channel."
+msgstr ""
+
+#: doc/classes/Image.xml:502
+msgid ""
+"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
+"BPTC_Texture_Compression]BPTC[/url] compression with unsigned normalized "
+"RGBA components.\n"
+"[b]Note:[/b] When creating an [ImageTexture], an sRGB to linear color space "
+"conversion is performed."
+msgstr ""
+
+#: doc/classes/Image.xml:506
+msgid ""
+"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
+"BPTC_Texture_Compression]BPTC[/url] compression with signed floating-point "
+"RGB components."
+msgstr ""
+
+#: doc/classes/Image.xml:509
+msgid ""
+"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
+"BPTC_Texture_Compression]BPTC[/url] compression with unsigned floating-point "
+"RGB components."
+msgstr ""
+
+#: doc/classes/Image.xml:512
+msgid ""
+"Texture format used on PowerVR-supported mobile platforms, uses 2-bit color "
+"depth with no alpha. More information can be found [url=https://en.wikipedia."
+"org/wiki/PVRTC]here[/url].\n"
+"[b]Note:[/b] When creating an [ImageTexture], an sRGB to linear color space "
+"conversion is performed."
+msgstr ""
+
+#: doc/classes/Image.xml:516
+msgid ""
+"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with an "
+"alpha component."
+msgstr ""
+
+#: doc/classes/Image.xml:519
+msgid ""
+"Similar to [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with 4-"
+"bit color depth and no alpha."
+msgstr ""
+
+#: doc/classes/Image.xml:522
+msgid ""
+"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC4[/url], but with an "
+"alpha component."
+msgstr ""
+
+#: doc/classes/Image.xml:525
+msgid ""
+"[url=https://en.wikipedia.org/wiki/"
+"Ericsson_Texture_Compression#ETC1]Ericsson Texture Compression format 1[/"
+"url], also referred to as \"ETC1\", and is part of the OpenGL ES graphics "
+"standard. This format cannot store an alpha channel."
+msgstr ""
+
+#: doc/classes/Image.xml:528
+msgid ""
+"[url=https://en.wikipedia.org/wiki/"
+"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
+"format 2[/url] ([code]R11_EAC[/code] variant), which provides one channel of "
+"unsigned data."
+msgstr ""
+
+#: doc/classes/Image.xml:531
+msgid ""
+"[url=https://en.wikipedia.org/wiki/"
+"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
+"format 2[/url] ([code]SIGNED_R11_EAC[/code] variant), which provides one "
+"channel of signed data."
+msgstr ""
+
+#: doc/classes/Image.xml:534
+msgid ""
+"[url=https://en.wikipedia.org/wiki/"
+"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
+"format 2[/url] ([code]RG11_EAC[/code] variant), which provides two channels "
+"of unsigned data."
+msgstr ""
+
+#: doc/classes/Image.xml:537
+msgid ""
+"[url=https://en.wikipedia.org/wiki/"
+"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
+"format 2[/url] ([code]SIGNED_RG11_EAC[/code] variant), which provides two "
+"channels of signed data."
+msgstr ""
+
+#: doc/classes/Image.xml:540
+msgid ""
+"[url=https://en.wikipedia.org/wiki/"
+"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
+"format 2[/url] ([code]RGB8[/code] variant), which is a follow-up of ETC1 and "
+"compresses RGB888 data.\n"
+"[b]Note:[/b] When creating an [ImageTexture], an sRGB to linear color space "
+"conversion is performed."
+msgstr ""
+
+#: doc/classes/Image.xml:544
+msgid ""
+"[url=https://en.wikipedia.org/wiki/"
+"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
+"format 2[/url] ([code]RGBA8[/code]variant), which compresses RGBA8888 data "
+"with full alpha support.\n"
+"[b]Note:[/b] When creating an [ImageTexture], an sRGB to linear color space "
+"conversion is performed."
+msgstr ""
+
+#: doc/classes/Image.xml:548
+msgid ""
+"[url=https://en.wikipedia.org/wiki/"
+"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
+"format 2[/url] ([code]RGB8_PUNCHTHROUGH_ALPHA1[/code] variant), which "
+"compresses RGBA data to make alpha either fully transparent or fully "
+"opaque.\n"
+"[b]Note:[/b] When creating an [ImageTexture], an sRGB to linear color space "
+"conversion is performed."
+msgstr ""
+
+#: doc/classes/Image.xml:552
+msgid "Represents the size of the [enum Format] enum."
+msgstr ""
+
+#: doc/classes/Image.xml:555
+msgid ""
+"Performs nearest-neighbor interpolation. If the image is resized, it will be "
+"pixelated."
+msgstr ""
+
+#: doc/classes/Image.xml:558
+msgid ""
+"Performs bilinear interpolation. If the image is resized, it will be blurry. "
+"This mode is faster than [constant INTERPOLATE_CUBIC], but it results in "
+"lower quality."
+msgstr ""
+
+#: doc/classes/Image.xml:561
+msgid ""
+"Performs cubic interpolation. If the image is resized, it will be blurry. "
+"This mode often gives better results compared to [constant "
+"INTERPOLATE_BILINEAR], at the cost of being slower."
+msgstr ""
+
+#: doc/classes/Image.xml:564
+msgid ""
+"Performs bilinear separately on the two most-suited mipmap levels, then "
+"linearly interpolates between them.\n"
+"It's slower than [constant INTERPOLATE_BILINEAR], but produces higher-"
+"quality results with far fewer aliasing artifacts.\n"
+"If the image does not have mipmaps, they will be generated and used "
+"internally, but no mipmaps will be generated on the resulting image.\n"
+"[b]Note:[/b] If you intend to scale multiple copies of the original image, "
+"it's better to call [method generate_mipmaps]] on it in advance, to avoid "
+"wasting processing power in generating them again and again.\n"
+"On the other hand, if the image already has mipmaps, they will be used, and "
+"a new set will be generated for the resulting image."
+msgstr ""
+
+#: doc/classes/Image.xml:571
+msgid ""
+"Performs Lanczos interpolation. This is the slowest image resizing mode, but "
+"it typically gives the best results, especially when downscalng images."
+msgstr ""
+
+#: doc/classes/Image.xml:574
+msgid "Image does not have alpha."
+msgstr ""
+
+#: doc/classes/Image.xml:577
+msgid "Image stores alpha in a single bit."
+msgstr ""
+
+#: doc/classes/Image.xml:580
+msgid "Image uses alpha."
+msgstr ""
+
+#: doc/classes/Image.xml:583
+msgid "Use S3TC compression."
+msgstr ""
+
+#: doc/classes/Image.xml:586
+msgid "Use PVRTC2 compression."
+msgstr ""
+
+#: doc/classes/Image.xml:589
+msgid "Use PVRTC4 compression."
+msgstr ""
+
+#: doc/classes/Image.xml:592
+msgid "Use ETC compression."
+msgstr ""
+
+#: doc/classes/Image.xml:595
+msgid "Use ETC2 compression."
+msgstr ""
+
+#: doc/classes/Image.xml:598
+msgid ""
+"Source texture (before compression) is a regular texture. Default for all "
+"textures."
+msgstr ""
+
+#: doc/classes/Image.xml:601
+msgid "Source texture (before compression) is in sRGB space."
+msgstr ""
+
+#: doc/classes/Image.xml:604
+msgid ""
+"Source texture (before compression) is a normal texture (e.g. it can be "
+"compressed into two channels)."
+msgstr ""
+
+#: doc/classes/ImageTexture.xml:4
+msgid "A [Texture] based on an [Image]."
+msgstr ""
+
+#: doc/classes/ImageTexture.xml:7
+msgid ""
+"A [Texture] based on an [Image]. For an image to be displayed, an "
+"[ImageTexture] has to be created from it using the [method "
+"create_from_image] method:\n"
+"[codeblock]\n"
+"var texture = ImageTexture.new()\n"
+"var image = Image.new()\n"
+"image.load(\"res://icon.png\")\n"
+"texture.create_from_image(image)\n"
+"$Sprite.texture = texture\n"
+"[/codeblock]\n"
+"This way, textures can be created at run-time by loading images both from "
+"within the editor and externally.\n"
+"[b]Warning:[/b] Prefer to load imported textures with [method @GDScript."
+"load] over loading them from within the filesystem dynamically with [method "
+"Image.load], as it may not work in exported projects:\n"
+"[codeblock]\n"
+"var texture = load(\"res://icon.png\")\n"
+"$Sprite.texture = texture\n"
+"[/codeblock]\n"
+"This is because images have to be imported as [StreamTexture] first to be "
+"loaded with [method @GDScript.load]. If you'd still like to load an image "
+"file just like any other [Resource], import it as an [Image] resource "
+"instead, and then load it normally using the [method @GDScript.load] "
+"method.\n"
+"But do note that the image data can still be retrieved from an imported "
+"texture as well using the [method Texture.get_data] method, which returns a "
+"copy of the data:\n"
+"[codeblock]\n"
+"var texture = load(\"res://icon.png\")\n"
+"var image : Image = texture.get_data()\n"
+"[/codeblock]\n"
+"An [ImageTexture] is not meant to be operated from within the editor "
+"interface directly, and is mostly useful for rendering images on screen "
+"dynamically via code. If you need to generate images procedurally from "
+"within the editor, consider saving and importing images as custom texture "
+"resources implementing a new [EditorImportPlugin].\n"
+"[b]Note:[/b] The maximum texture size is 16384×16384 pixels due to graphics "
+"hardware limitations."
+msgstr ""
+
+#: doc/classes/ImageTexture.xml:41
+msgid ""
+"Create a new [ImageTexture] with [code]width[/code] and [code]height[/"
+"code].\n"
+"[code]format[/code] is a value from [enum Image.Format], [code]flags[/code] "
+"is any combination of [enum Texture.Flags]."
+msgstr ""
+
+#: doc/classes/ImageTexture.xml:50
+msgid ""
+"Initializes the texture by allocating and setting the data from an [Image] "
+"with [code]flags[/code] from [enum Texture.Flags]. An sRGB to linear color "
+"space conversion can take place, according to [enum Image.Format]."
+msgstr ""
+
+#: doc/classes/ImageTexture.xml:56
+msgid "Returns the format of the texture, one of [enum Image.Format]."
+msgstr ""
+
+#: doc/classes/ImageTexture.xml:63
+msgid ""
+"Loads an image from a file path and creates a texture from it.\n"
+"[b]Note:[/b] This method is deprecated and will be removed in Godot 4.0, use "
+"[method Image.load] and [method create_from_image] instead."
+msgstr ""
+
+#: doc/classes/ImageTexture.xml:71
+msgid ""
+"Replaces the texture's data with a new [Image].\n"
+"[b]Note:[/b] The texture has to be initialized first with the [method "
+"create_from_image] method before it can be updated. The new image "
+"dimensions, format, and mipmaps configuration should match the existing "
+"texture's image configuration, otherwise it has to be re-created with the "
+"[method create_from_image] method.\n"
+"Use this method over [method create_from_image] if you need to update the "
+"texture frequently, which is faster than allocating additional memory for a "
+"new texture each time."
+msgstr ""
+
+#: doc/classes/ImageTexture.xml:80 doc/classes/VisualServer.xml:2837
+msgid "Resizes the texture to the specified dimensions."
+msgstr ""
+
+#: doc/classes/ImageTexture.xml:87
+msgid "The storage quality for [constant STORAGE_COMPRESS_LOSSY]."
+msgstr ""
+
+#: doc/classes/ImageTexture.xml:90
+msgid "The storage type (raw, lossy, or compressed)."
+msgstr ""
+
+#: doc/classes/ImageTexture.xml:95
+msgid "[Image] data is stored raw and unaltered."
+msgstr ""
+
+#: doc/classes/ImageTexture.xml:98
+msgid ""
+"[Image] data is compressed with a lossy algorithm. You can set the storage "
+"quality with [member lossy_quality]."
+msgstr ""
+
+#: doc/classes/ImageTexture.xml:101
+msgid "[Image] data is compressed with a lossless algorithm."
+msgstr ""
+
+#: doc/classes/ImmediateGeometry.xml:4
+msgid "Draws simple geometry from code."
+msgstr ""
+
+#: doc/classes/ImmediateGeometry.xml:7
+msgid ""
+"Draws simple geometry from code. Uses a drawing mode similar to OpenGL 1.x.\n"
+"See also [ArrayMesh], [MeshDataTool] and [SurfaceTool] for procedural "
+"geometry generation.\n"
+"[b]Note:[/b] ImmediateGeometry3D is best suited to small amounts of mesh "
+"data that change every frame. It will be slow when handling large amounts of "
+"mesh data. If mesh data doesn't change often, use [ArrayMesh], "
+"[MeshDataTool] or [SurfaceTool] instead.\n"
+"[b]Note:[/b] Godot uses clockwise [url=https://learnopengl.com/Advanced-"
+"OpenGL/Face-culling]winding order[/url] for front faces of triangle "
+"primitive modes.\n"
+"[b]Note:[/b] In case of missing points when handling large amounts of mesh "
+"data, try increasing its buffer size limit under [member ProjectSettings."
+"rendering/limits/buffers/immediate_buffer_size_kb]."
+msgstr ""
+
+#: doc/classes/ImmediateGeometry.xml:23
+msgid ""
+"Simple helper to draw an UV sphere with given latitude, longitude and radius."
+msgstr ""
+
+#: doc/classes/ImmediateGeometry.xml:30
+msgid ""
+"Adds a vertex in local coordinate space with the currently set color/uv/etc."
+msgstr ""
+
+#: doc/classes/ImmediateGeometry.xml:38
+msgid ""
+"Begin drawing (and optionally pass a texture override). When done call "
+"[method end]. For more information on how this works, search for "
+"[code]glBegin()[/code] and [code]glEnd()[/code] references.\n"
+"For the type of primitive, see the [enum Mesh.PrimitiveType] enum."
+msgstr ""
+
+#: doc/classes/ImmediateGeometry.xml:45
+msgid "Clears everything that was drawn using begin/end."
+msgstr ""
+
+#: doc/classes/ImmediateGeometry.xml:51
+msgid "Ends a drawing context and displays the results."
+msgstr ""
+
+#: doc/classes/ImmediateGeometry.xml:58
+msgid "The current drawing color."
+msgstr ""
+
+#: doc/classes/ImmediateGeometry.xml:65
+msgid "The next vertex's normal."
+msgstr ""
+
+#: doc/classes/ImmediateGeometry.xml:72
+msgid "The next vertex's tangent (and binormal facing)."
+msgstr ""
+
+#: doc/classes/ImmediateGeometry.xml:79
+msgid "The next vertex's UV."
+msgstr ""
+
+#: doc/classes/ImmediateGeometry.xml:86
+msgid "The next vertex's second layer UV."
+msgstr ""
+
+#: doc/classes/Input.xml:4
+msgid "A singleton that deals with inputs."
+msgstr ""
+
+#: doc/classes/Input.xml:7
+msgid ""
+"A singleton that deals with inputs. This includes key presses, mouse buttons "
+"and movement, joypads, and input actions. Actions and their events can be "
+"set in the [b]Input Map[/b] tab in the [b]Project > Project Settings[/b], or "
+"with the [InputMap] class."
+msgstr ""
+
+#: doc/classes/Input.xml:10
+msgid "https://docs.godotengine.org/en/3.4/tutorials/inputs/index.html"
+msgstr ""
+
+#: doc/classes/Input.xml:20
+msgid ""
+"This will simulate pressing the specified action.\n"
+"The strength can be used for non-boolean actions, it's ranged between 0 and "
+"1 representing the intensity of the given action.\n"
+"[b]Note:[/b] This method will not cause any [method Node._input] calls. It "
+"is intended to be used with [method is_action_pressed] and [method "
+"is_action_just_pressed]. If you want to simulate [code]_input[/code], use "
+"[method parse_input_event] instead."
+msgstr ""
+
+#: doc/classes/Input.xml:29
+msgid "If the specified action is already pressed, this will release it."
+msgstr ""
+
+#: doc/classes/Input.xml:37
+msgid ""
+"Adds a new mapping entry (in SDL2 format) to the mapping database. "
+"Optionally update already connected devices."
+msgstr ""
+
+#: doc/classes/Input.xml:43
+msgid ""
+"Sends all input events which are in the current buffer to the game loop. "
+"These events may have been buffered as a result of accumulated input "
+"([method set_use_accumulated_input]) or agile input flushing ([member "
+"ProjectSettings.input_devices/buffering/agile_event_flushing]).\n"
+"The engine will already do this itself at key execution points (at least "
+"once per frame). However, this can be useful in advanced cases where you "
+"want precise control over the timing of event handling."
+msgstr ""
+
+#: doc/classes/Input.xml:50
+msgid ""
+"Returns the acceleration of the device's accelerometer sensor, if the device "
+"has one. Otherwise, the method returns [constant Vector3.ZERO].\n"
+"Note this method returns an empty [Vector3] when running from the editor "
+"even when your device has an accelerometer. You must export your project to "
+"a supported device to read values from the accelerometer.\n"
+"[b]Note:[/b] This method only works on iOS, Android, and UWP. On other "
+"platforms, it always returns [constant Vector3.ZERO]. On Android the unit of "
+"measurement for each axis is m/s² while on iOS and UWP it's a multiple of "
+"the Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
+msgstr ""
+
+#: doc/classes/Input.xml:60
+msgid ""
+"Returns a value between 0 and 1 representing the raw intensity of the given "
+"action, ignoring the action's deadzone. In most cases, you should use "
+"[method get_action_strength] instead.\n"
+"If [code]exact[/code] is [code]false[/code], it ignores the input modifiers "
+"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
+"for [InputEventJoypadMotion] events."
+msgstr ""
+
+#: doc/classes/Input.xml:69
+msgid ""
+"Returns a value between 0 and 1 representing the intensity of the given "
+"action. In a joypad, for example, the further away the axis (analog sticks "
+"or L2, R2 triggers) is from the dead zone, the closer the value will be to "
+"1. If the action is mapped to a control that has no axis as the keyboard, "
+"the value returned will be 0 or 1.\n"
+"If [code]exact[/code] is [code]false[/code], it ignores the input modifiers "
+"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
+"for [InputEventJoypadMotion] events."
+msgstr ""
+
+#: doc/classes/Input.xml:78
+msgid ""
+"Get axis input by specifying two actions, one negative and one positive.\n"
+"This is a shorthand for writing [code]Input."
+"get_action_strength(\"positive_action\") - Input."
+"get_action_strength(\"negative_action\")[/code]."
+msgstr ""
+
+#: doc/classes/Input.xml:85
+msgid ""
+"Returns an [Array] containing the device IDs of all currently connected "
+"joypads."
+msgstr ""
+
+#: doc/classes/Input.xml:91
+msgid "Returns the currently assigned cursor shape (see [enum CursorShape])."
+msgstr ""
+
+#: doc/classes/Input.xml:97
+msgid ""
+"Returns the gravity of the device's accelerometer sensor, if the device has "
+"one. Otherwise, the method returns [constant Vector3.ZERO].\n"
+"[b]Note:[/b] This method only works on Android and iOS. On other platforms, "
+"it always returns [constant Vector3.ZERO]. On Android the unit of "
+"measurement for each axis is m/s² while on iOS it's a multiple of the "
+"Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
+msgstr ""
+
+#: doc/classes/Input.xml:104
+msgid ""
+"Returns the rotation rate in rad/s around a device's X, Y, and Z axes of the "
+"gyroscope sensor, if the device has one. Otherwise, the method returns "
+"[constant Vector3.ZERO].\n"
+"[b]Note:[/b] This method only works on Android and iOS. On other platforms, "
+"it always returns [constant Vector3.ZERO]."
+msgstr ""
+
+#: doc/classes/Input.xml:113
+msgid ""
+"Returns the current value of the joypad axis at given index (see [enum "
+"JoystickList])."
+msgstr ""
+
+#: doc/classes/Input.xml:120
+msgid "Returns the index of the provided axis name."
+msgstr ""
+
+#: doc/classes/Input.xml:127
+msgid ""
+"Receives a [enum JoystickList] axis and returns its equivalent name as a "
+"string."
+msgstr ""
+
+#: doc/classes/Input.xml:134
+msgid "Returns the index of the provided button name."
+msgstr ""
+
+#: doc/classes/Input.xml:141
+msgid ""
+"Receives a gamepad button from [enum JoystickList] and returns its "
+"equivalent name as a string."
+msgstr ""
+
+#: doc/classes/Input.xml:148
+msgid ""
+"Returns a SDL2-compatible device GUID on platforms that use gamepad "
+"remapping. Returns [code]\"Default Gamepad\"[/code] otherwise."
+msgstr ""
+
+#: doc/classes/Input.xml:155
+msgid "Returns the name of the joypad at the specified device index."
+msgstr ""
+
+#: doc/classes/Input.xml:162
+msgid "Returns the duration of the current vibration effect in seconds."
+msgstr ""
+
+#: doc/classes/Input.xml:169
+msgid ""
+"Returns the strength of the joypad vibration: x is the strength of the weak "
+"motor, and y is the strength of the strong motor."
+msgstr ""
+
+#: doc/classes/Input.xml:175
+msgid ""
+"Returns the mouse speed for the last time the cursor was moved, and this "
+"until the next frame where the mouse moves. This means that even if the "
+"mouse is not moving, this function will still return the value of the last "
+"motion."
+msgstr ""
+
+#: doc/classes/Input.xml:181
+msgid ""
+"Returns the magnetic field strength in micro-Tesla for all axes of the "
+"device's magnetometer sensor, if the device has one. Otherwise, the method "
+"returns [constant Vector3.ZERO].\n"
+"[b]Note:[/b] This method only works on Android, iOS and UWP. On other "
+"platforms, it always returns [constant Vector3.ZERO]."
+msgstr ""
+
+#: doc/classes/Input.xml:188
+msgid ""
+"Returns mouse buttons as a bitmask. If multiple mouse buttons are pressed at "
+"the same time, the bits are added together."
+msgstr ""
+
+#: doc/classes/Input.xml:194
+msgid "Returns the mouse mode. See the constants for more information."
+msgstr ""
+
+#: doc/classes/Input.xml:205
+msgid ""
+"Gets an input vector by specifying four actions for the positive and "
+"negative X and Y axes.\n"
+"This method is useful when getting vector input, such as from a joystick, "
+"directional pad, arrows, or WASD. The vector has its length limited to 1 and "
+"has a circular deadzone, which is useful for using vector input as "
+"movement.\n"
+"By default, the deadzone is automatically calculated from the average of the "
+"action deadzones. However, you can override the deadzone to be whatever you "
+"want (on the range of 0 to 1)."
+msgstr ""
+
+#: doc/classes/Input.xml:215
+msgid ""
+"Returns [code]true[/code] when the user starts pressing the action event, "
+"meaning it's [code]true[/code] only on the frame that the user pressed down "
+"the button.\n"
+"This is useful for code that needs to run only once when an action is "
+"pressed, instead of every frame while it's pressed.\n"
+"If [code]exact[/code] is [code]false[/code], it ignores the input modifiers "
+"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
+"for [InputEventJoypadMotion] events."
+msgstr ""
+
+#: doc/classes/Input.xml:225
+msgid ""
+"Returns [code]true[/code] when the user stops pressing the action event, "
+"meaning it's [code]true[/code] only on the frame that the user released the "
+"button.\n"
+"If [code]exact[/code] is [code]false[/code], it ignores the input modifiers "
+"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
+"for [InputEventJoypadMotion] events."
+msgstr ""
+
+#: doc/classes/Input.xml:234
+msgid ""
+"Returns [code]true[/code] if you are pressing the action event. Note that if "
+"an action has multiple buttons assigned and more than one of them is "
+"pressed, releasing one button will release the action, even if some other "
+"button assigned to this action is still pressed.\n"
+"If [code]exact[/code] is [code]false[/code], it ignores the input modifiers "
+"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
+"for [InputEventJoypadMotion] events."
+msgstr ""
+
+#: doc/classes/Input.xml:243
+msgid ""
+"Returns [code]true[/code] if you are pressing the joypad button (see [enum "
+"JoystickList])."
+msgstr ""
+
+#: doc/classes/Input.xml:250
+msgid ""
+"Returns [code]true[/code] if the system knows the specified device. This "
+"means that it sets all button and axis indices exactly as defined in [enum "
+"JoystickList]. Unknown joypads are not expected to match these constants, "
+"but you can still retrieve events from them."
+msgstr ""
+
+#: doc/classes/Input.xml:257
+msgid ""
+"Returns [code]true[/code] if you are pressing the key. You can pass a [enum "
+"KeyList] constant."
+msgstr ""
+
+#: doc/classes/Input.xml:264
+msgid ""
+"Returns [code]true[/code] if you are pressing the mouse button specified "
+"with [enum ButtonList]."
+msgstr ""
+
+#: doc/classes/Input.xml:274
+msgid ""
+"Notifies the [Input] singleton that a connection has changed, to update the "
+"state for the [code]device[/code] index.\n"
+"This is used internally and should not have to be called from user scripts. "
+"See [signal joy_connection_changed] for the signal emitted when this is "
+"triggered internally."
+msgstr ""
+
+#: doc/classes/Input.xml:282
+msgid ""
+"Feeds an [InputEvent] to the game. Can be used to artificially trigger input "
+"events from code. Also generates [method Node._input] calls.\n"
+"Example:\n"
+"[codeblock]\n"
+"var a = InputEventAction.new()\n"
+"a.action = \"ui_cancel\"\n"
+"a.pressed = true\n"
+"Input.parse_input_event(a)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Input.xml:296
+msgid ""
+"Removes all mappings from the internal database that match the given GUID."
+msgstr ""
+
+#: doc/classes/Input.xml:303
+msgid ""
+"Sets the acceleration value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:313
+msgid ""
+"Sets a custom mouse cursor image, which is only visible inside the game "
+"window. The hotspot can also be specified. Passing [code]null[/code] to the "
+"image parameter resets to the system cursor. See [enum CursorShape] for the "
+"list of shapes.\n"
+"[code]image[/code]'s size must be lower than 256×256.\n"
+"[code]hotspot[/code] must be within [code]image[/code]'s size.\n"
+"[b]Note:[/b] [AnimatedTexture]s aren't supported as custom mouse cursors. If "
+"using an [AnimatedTexture], only the first frame will be displayed.\n"
+"[b]Note:[/b] Only images imported with the [b]Lossless[/b], [b]Lossy[/b] or "
+"[b]Uncompressed[/b] compression modes are supported. The [b]Video RAM[/b] "
+"compression mode can't be used for custom cursors."
+msgstr ""
+
+#: doc/classes/Input.xml:324
+msgid ""
+"Sets the default cursor shape to be used in the viewport instead of "
+"[constant CURSOR_ARROW].\n"
+"[b]Note:[/b] If you want to change the default cursor shape for [Control]'s "
+"nodes, use [member Control.mouse_default_cursor_shape] instead.\n"
+"[b]Note:[/b] This method generates an [InputEventMouseMotion] to update "
+"cursor immediately."
+msgstr ""
+
+#: doc/classes/Input.xml:333
+msgid ""
+"Sets the gravity value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:341
+msgid ""
+"Sets the value of the rotation rate of the gyroscope sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:349
+msgid ""
+"Sets the value of the magnetic field of the magnetometer sensor. Can be used "
+"for debugging on devices without a hardware sensor, for example in an editor "
+"on a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:357
+msgid "Sets the mouse mode. See the constants for more information."
+msgstr ""
+
+#: doc/classes/Input.xml:364
+msgid ""
+"Enables or disables the accumulation of similar input events sent by the "
+"operating system. When input accumulation is enabled, all input events "
+"generated during a frame will be merged and emitted when the frame is done "
+"rendering. Therefore, this limits the number of input method calls per "
+"second to the rendering FPS.\n"
+"Input accumulation is enabled by default. It can be disabled to get slightly "
+"more precise/reactive input at the cost of increased CPU usage. In "
+"applications where drawing freehand lines is required, input accumulation "
+"should generally be disabled while the user is drawing the line to get "
+"results that closely follow the actual input."
+msgstr ""
+
+#: doc/classes/Input.xml:375
+msgid ""
+"Starts to vibrate the joypad. Joypads usually come with two rumble motors, a "
+"strong and a weak one. [code]weak_magnitude[/code] is the strength of the "
+"weak motor (between 0 and 1) and [code]strong_magnitude[/code] is the "
+"strength of the strong motor (between 0 and 1). [code]duration[/code] is the "
+"duration of the effect in seconds (a duration of 0 will try to play the "
+"vibration indefinitely).\n"
+"[b]Note:[/b] Not every hardware is compatible with long effect durations; it "
+"is recommended to restart an effect if it has to be played for more than a "
+"few seconds."
+msgstr ""
+
+#: doc/classes/Input.xml:383
+msgid "Stops the vibration of the joypad."
+msgstr ""
+
+#: doc/classes/Input.xml:390
+msgid ""
+"Vibrate Android and iOS devices.\n"
+"[b]Note:[/b] It needs [code]VIBRATE[/code] permission for Android at export "
+"settings. iOS does not support duration."
+msgstr ""
+
+#: doc/classes/Input.xml:398
+msgid "Sets the mouse position to the specified vector."
+msgstr ""
+
+#: doc/classes/Input.xml:407
+msgid "Emitted when a joypad device has been connected or disconnected."
+msgstr ""
+
+#: doc/classes/Input.xml:413
+msgid "Makes the mouse cursor visible if it is hidden."
+msgstr ""
+
+#: doc/classes/Input.xml:416
+msgid "Makes the mouse cursor hidden if it is visible."
+msgstr ""
+
+#: doc/classes/Input.xml:419
+msgid ""
+"Captures the mouse. The mouse will be hidden and its position locked at the "
+"center of the screen.\n"
+"[b]Note:[/b] If you want to process the mouse's movement in this mode, you "
+"need to use [member InputEventMouseMotion.relative]."
+msgstr ""
+
+#: doc/classes/Input.xml:423
+msgid "Makes the mouse cursor visible but confines it to the game window."
+msgstr ""
+
+#: doc/classes/Input.xml:426
+msgid "Arrow cursor. Standard, default pointing cursor."
+msgstr ""
+
+#: doc/classes/Input.xml:429
+msgid ""
+"I-beam cursor. Usually used to show where the text cursor will appear when "
+"the mouse is clicked."
+msgstr ""
+
+#: doc/classes/Input.xml:432
+msgid ""
+"Pointing hand cursor. Usually used to indicate the pointer is over a link or "
+"other interactable item."
+msgstr ""
+
+#: doc/classes/Input.xml:435
+msgid ""
+"Cross cursor. Typically appears over regions in which a drawing operation "
+"can be performed or for selections."
+msgstr ""
+
+#: doc/classes/Input.xml:438
+msgid ""
+"Wait cursor. Indicates that the application is busy performing an operation. "
+"This cursor shape denotes that the application is still usable during the "
+"operation."
+msgstr ""
+
+#: doc/classes/Input.xml:441
+msgid ""
+"Busy cursor. Indicates that the application is busy performing an operation. "
+"This cursor shape denotes that the application isn't usable during the "
+"operation (e.g. something is blocking its main thread)."
+msgstr ""
+
+#: doc/classes/Input.xml:444
+msgid "Drag cursor. Usually displayed when dragging something."
+msgstr ""
+
+#: doc/classes/Input.xml:447
+msgid ""
+"Can drop cursor. Usually displayed when dragging something to indicate that "
+"it can be dropped at the current position."
+msgstr ""
+
+#: doc/classes/Input.xml:450
+msgid ""
+"Forbidden cursor. Indicates that the current action is forbidden (for "
+"example, when dragging something) or that the control at a position is "
+"disabled."
+msgstr ""
+
+#: doc/classes/Input.xml:453
+msgid ""
+"Vertical resize mouse cursor. A double-headed vertical arrow. It tells the "
+"user they can resize the window or the panel vertically."
+msgstr ""
+
+#: doc/classes/Input.xml:456
+msgid ""
+"Horizontal resize mouse cursor. A double-headed horizontal arrow. It tells "
+"the user they can resize the window or the panel horizontally."
+msgstr ""
+
+#: doc/classes/Input.xml:459
+msgid ""
+"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
+"from the bottom left to the top right. It tells the user they can resize the "
+"window or the panel both horizontally and vertically."
+msgstr ""
+
+#: doc/classes/Input.xml:462
+msgid ""
+"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
+"from the top left to the bottom right, the opposite of [constant "
+"CURSOR_BDIAGSIZE]. It tells the user they can resize the window or the panel "
+"both horizontally and vertically."
+msgstr ""
+
+#: doc/classes/Input.xml:465
+msgid "Move cursor. Indicates that something can be moved."
+msgstr ""
+
+#: doc/classes/Input.xml:468
+msgid ""
+"Vertical split mouse cursor. On Windows, it's the same as [constant "
+"CURSOR_VSIZE]."
+msgstr ""
+
+#: doc/classes/Input.xml:471
+msgid ""
+"Horizontal split mouse cursor. On Windows, it's the same as [constant "
+"CURSOR_HSIZE]."
+msgstr ""
+
+#: doc/classes/Input.xml:474
+msgid "Help cursor. Usually a question mark."
+msgstr ""
+
+#: doc/classes/InputEvent.xml:4
+msgid "Generic input event."
+msgstr ""
+
+#: doc/classes/InputEvent.xml:7
+msgid "Base class of all sort of input event. See [method Node._input]."
+msgstr ""
+
+#: doc/classes/InputEvent.xml:10 doc/classes/InputEventJoypadButton.xml:10
+#: doc/classes/InputEventJoypadMotion.xml:10 doc/classes/InputEventKey.xml:10
+#: doc/classes/InputEventMouse.xml:10 doc/classes/InputEventScreenDrag.xml:10
+#: doc/classes/InputEventScreenTouch.xml:11
+#: doc/classes/InputEventWithModifiers.xml:10
+msgid "https://docs.godotengine.org/en/3.4/tutorials/inputs/inputevent.html"
+msgstr ""
+
+#: doc/classes/InputEvent.xml:20
+msgid ""
+"Returns [code]true[/code] if the given input event and this input event can "
+"be added together (only for events of type [InputEventMouseMotion]).\n"
+"The given input event's position, global position and speed will be copied. "
+"The resulting [code]relative[/code] is a sum of both events. Both events' "
+"modifiers have to be identical."
+msgstr ""
+
+#: doc/classes/InputEvent.xml:27
+msgid "Returns a [String] representation of the event."
+msgstr ""
+
+#: doc/classes/InputEvent.xml:35
+msgid ""
+"Returns a value between 0.0 and 1.0 depending on the given actions' state. "
+"Useful for getting the value of events of type [InputEventJoypadMotion].\n"
+"If [code]exact_match[/code] is [code]false[/code], it ignores the input "
+"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
+"direction for [InputEventJoypadMotion] events."
+msgstr ""
+
+#: doc/classes/InputEvent.xml:44
+msgid ""
+"Returns [code]true[/code] if this input event matches a pre-defined action "
+"of any type.\n"
+"If [code]exact_match[/code] is [code]false[/code], it ignores the input "
+"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
+"direction for [InputEventJoypadMotion] events."
+msgstr ""
+
+#: doc/classes/InputEvent.xml:54
+msgid ""
+"Returns [code]true[/code] if the given action is being pressed (and is not "
+"an echo event for [InputEventKey] events, unless [code]allow_echo[/code] is "
+"[code]true[/code]). Not relevant for events of type [InputEventMouseMotion] "
+"or [InputEventScreenDrag].\n"
+"If [code]exact_match[/code] is [code]false[/code], it ignores the input "
+"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
+"direction for [InputEventJoypadMotion] events."
+msgstr ""
+
+#: doc/classes/InputEvent.xml:63
+msgid ""
+"Returns [code]true[/code] if the given action is released (i.e. not "
+"pressed). Not relevant for events of type [InputEventMouseMotion] or "
+"[InputEventScreenDrag].\n"
+"If [code]exact_match[/code] is [code]false[/code], it ignores the input "
+"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
+"direction for [InputEventJoypadMotion] events."
+msgstr ""
+
+#: doc/classes/InputEvent.xml:70
+msgid ""
+"Returns [code]true[/code] if this input event's type is one that can be "
+"assigned to an input action."
+msgstr ""
+
+#: doc/classes/InputEvent.xml:76
+msgid ""
+"Returns [code]true[/code] if this input event is an echo event (only for "
+"events of type [InputEventKey])."
+msgstr ""
+
+#: doc/classes/InputEvent.xml:82
+msgid ""
+"Returns [code]true[/code] if this input event is pressed. Not relevant for "
+"events of type [InputEventMouseMotion] or [InputEventScreenDrag]."
+msgstr ""
+
+#: doc/classes/InputEvent.xml:90
+msgid ""
+"Returns [code]true[/code] if the specified [code]event[/code] matches this "
+"event. Only valid for action events i.e key ([InputEventKey]), button "
+"([InputEventMouseButton] or [InputEventJoypadButton]), axis "
+"[InputEventJoypadMotion] or action ([InputEventAction]) events.\n"
+"If [code]exact_match[/code] is [code]false[/code], it ignores the input "
+"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
+"direction for [InputEventJoypadMotion] events."
+msgstr ""
+
+#: doc/classes/InputEvent.xml:99
+msgid ""
+"Returns a copy of the given input event which has been offset by "
+"[code]local_ofs[/code] and transformed by [code]xform[/code]. Relevant for "
+"events of type [InputEventMouseButton], [InputEventMouseMotion], "
+"[InputEventScreenTouch], [InputEventScreenDrag], [InputEventMagnifyGesture] "
+"and [InputEventPanGesture]."
+msgstr ""
+
+#: doc/classes/InputEvent.xml:105
+msgid ""
+"The event's device ID.\n"
+"[b]Note:[/b] This device ID will always be [code]-1[/code] for emulated "
+"mouse input from a touchscreen. This can be used to distinguish emulated "
+"mouse input from physical mouse input."
+msgstr ""
+
+#: doc/classes/InputEventAction.xml:4
+msgid "Input event type for actions."
+msgstr ""
+
+#: doc/classes/InputEventAction.xml:7
+msgid ""
+"Contains a generic action which can be targeted from several types of "
+"inputs. Actions can be created from the [b]Input Map[/b] tab in the "
+"[b]Project > Project Settings[/b] menu. See [method Node._input]."
+msgstr ""
+
+#: doc/classes/InputEventAction.xml:10
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/inputs/inputevent.html#actions"
+msgstr ""
+
+#: doc/classes/InputEventAction.xml:18
+msgid "The action's name. Actions are accessed via this [String]."
+msgstr ""
+
+#: doc/classes/InputEventAction.xml:21
+msgid ""
+"If [code]true[/code], the action's state is pressed. If [code]false[/code], "
+"the action's state is released."
+msgstr ""
+
+#: doc/classes/InputEventAction.xml:24
+msgid ""
+"The action's strength between 0 and 1. This value is considered as equal to "
+"0 if pressed is [code]false[/code]. The event strength allows faking analog "
+"joypad motion events, by specifying how strongly the joypad axis is bent or "
+"pressed."
+msgstr ""
+
+#: doc/classes/InputEventGesture.xml:4
+msgid "Base class for touch control gestures."
+msgstr ""
+
+#: doc/classes/InputEventGesture.xml:14
+msgid ""
+"The local gesture position relative to the [Viewport]. If used in [method "
+"Control._gui_input], the position is relative to the current [Control] that "
+"received this gesture."
+msgstr ""
+
+#: doc/classes/InputEventJoypadButton.xml:4
+msgid "Input event for gamepad buttons."
+msgstr ""
+
+#: doc/classes/InputEventJoypadButton.xml:7
+msgid ""
+"Input event type for gamepad buttons. For gamepad analog sticks and "
+"joysticks, see [InputEventJoypadMotion]."
+msgstr ""
+
+#: doc/classes/InputEventJoypadButton.xml:16
+msgid "Button identifier. One of the [enum JoystickList] button constants."
+msgstr ""
+
+#: doc/classes/InputEventJoypadButton.xml:19
+msgid ""
+"If [code]true[/code], the button's state is pressed. If [code]false[/code], "
+"the button's state is released."
+msgstr ""
+
+#: doc/classes/InputEventJoypadButton.xml:22
+msgid ""
+"Represents the pressure the user puts on the button with his finger, if the "
+"controller supports it. Ranges from [code]0[/code] to [code]1[/code]."
+msgstr ""
+
+#: doc/classes/InputEventJoypadMotion.xml:4
+msgid ""
+"Input event type for gamepad joysticks and other motions. For buttons, see "
+"[code]InputEventJoypadButton[/code]."
+msgstr ""
+
+#: doc/classes/InputEventJoypadMotion.xml:7
+msgid ""
+"Stores information about joystick motions. One [InputEventJoypadMotion] "
+"represents one axis at a time."
+msgstr ""
+
+#: doc/classes/InputEventJoypadMotion.xml:16
+msgid "Axis identifier. Use one of the [enum JoystickList] axis constants."
+msgstr ""
+
+#: doc/classes/InputEventJoypadMotion.xml:19
+msgid ""
+"Current position of the joystick on the given axis. The value ranges from "
+"[code]-1.0[/code] to [code]1.0[/code]. A value of [code]0[/code] means the "
+"axis is in its resting position."
+msgstr ""
+
+#: doc/classes/InputEventKey.xml:4
+msgid "Input event type for keyboard events."
+msgstr ""
+
+#: doc/classes/InputEventKey.xml:7
+msgid ""
+"Stores key presses on the keyboard. Supports key presses, key releases and "
+"[member echo] events."
+msgstr ""
+
+#: doc/classes/InputEventKey.xml:16
+msgid ""
+"Returns the physical scancode combined with modifier keys such as "
+"[code]Shift[/code] or [code]Alt[/code]. See also [InputEventWithModifiers].\n"
+"To get a human-readable representation of the [InputEventKey] with "
+"modifiers, use [code]OS.get_scancode_string(event."
+"get_physical_scancode_with_modifiers())[/code] where [code]event[/code] is "
+"the [InputEventKey]."
+msgstr ""
+
+#: doc/classes/InputEventKey.xml:23
+msgid ""
+"Returns the scancode combined with modifier keys such as [code]Shift[/code] "
+"or [code]Alt[/code]. See also [InputEventWithModifiers].\n"
+"To get a human-readable representation of the [InputEventKey] with "
+"modifiers, use [code]OS.get_scancode_string(event."
+"get_scancode_with_modifiers())[/code] where [code]event[/code] is the "
+"[InputEventKey]."
+msgstr ""
+
+#: doc/classes/InputEventKey.xml:30
+msgid ""
+"If [code]true[/code], the key was already pressed before this event. It "
+"means the user is holding the key down."
+msgstr ""
+
+#: doc/classes/InputEventKey.xml:33
+msgid ""
+"Key physical scancode, which corresponds to one of the [enum KeyList] "
+"constants. Represent the physical location of a key on the 101/102-key US "
+"QWERTY keyboard.\n"
+"To get a human-readable representation of the [InputEventKey], use [code]OS."
+"get_scancode_string(event.physical_scancode)[/code] where [code]event[/code] "
+"is the [InputEventKey]."
+msgstr ""
+
+#: doc/classes/InputEventKey.xml:37
+msgid ""
+"If [code]true[/code], the key's state is pressed. If [code]false[/code], the "
+"key's state is released."
+msgstr ""
+
+#: doc/classes/InputEventKey.xml:40
+msgid ""
+"The key scancode, which corresponds to one of the [enum KeyList] constants. "
+"Represent key in the current keyboard layout.\n"
+"To get a human-readable representation of the [InputEventKey], use [code]OS."
+"get_scancode_string(event.scancode)[/code] where [code]event[/code] is the "
+"[InputEventKey]."
+msgstr ""
+
+#: doc/classes/InputEventKey.xml:44
+msgid ""
+"The key Unicode identifier (when relevant). Unicode identifiers for the "
+"composite characters and complex scripts may not be available unless IME "
+"input mode is active. See [method OS.set_ime_active] for more information."
+msgstr ""
+
+#: doc/classes/InputEventMouse.xml:4
+msgid "Base input event type for mouse events."
+msgstr ""
+
+#: doc/classes/InputEventMouse.xml:7
+msgid "Stores general mouse events information."
+msgstr ""
+
+#: doc/classes/InputEventMouse.xml:16
+msgid ""
+"The mouse button mask identifier, one of or a bitwise combination of the "
+"[enum ButtonList] button masks."
+msgstr ""
+
+#: doc/classes/InputEventMouse.xml:19
+msgid ""
+"The global mouse position relative to the current [Viewport] when used in "
+"[method Control._gui_input], otherwise is at 0,0."
+msgstr ""
+
+#: doc/classes/InputEventMouse.xml:22
+msgid ""
+"The local mouse position relative to the [Viewport]. If used in [method "
+"Control._gui_input], the position is relative to the current [Control] which "
+"is under the mouse."
+msgstr ""
+
+#: doc/classes/InputEventMouseButton.xml:4
+msgid "Input event type for mouse button events."
+msgstr ""
+
+#: doc/classes/InputEventMouseButton.xml:7
+msgid "Contains mouse click information. See [method Node._input]."
+msgstr ""
+
+#: doc/classes/InputEventMouseButton.xml:10
+#: doc/classes/InputEventMouseMotion.xml:11
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/inputs/"
+"mouse_and_input_coordinates.html"
+msgstr ""
+
+#: doc/classes/InputEventMouseButton.xml:16
+msgid ""
+"The mouse button identifier, one of the [enum ButtonList] button or button "
+"wheel constants."
+msgstr ""
+
+#: doc/classes/InputEventMouseButton.xml:19
+msgid "If [code]true[/code], the mouse button's state is a double-click."
+msgstr ""
+
+#: doc/classes/InputEventMouseButton.xml:22
+msgid ""
+"The amount (or delta) of the event. When used for high-precision scroll "
+"events, this indicates the scroll amount (vertical or horizontal). This is "
+"only supported on some platforms; the reported sensitivity varies depending "
+"on the platform. May be [code]0[/code] if not supported."
+msgstr ""
+
+#: doc/classes/InputEventMouseButton.xml:25
+msgid ""
+"If [code]true[/code], the mouse button's state is pressed. If [code]false[/"
+"code], the mouse button's state is released."
+msgstr ""
+
+#: doc/classes/InputEventMouseMotion.xml:4
+msgid "Input event type for mouse motion events."
+msgstr ""
+
+#: doc/classes/InputEventMouseMotion.xml:7
+msgid ""
+"Contains mouse and pen motion information. Supports relative, absolute "
+"positions and speed. See [method Node._input].\n"
+"[b]Note:[/b] By default, this event is only emitted once per frame rendered "
+"at most. If you need more precise input reporting, call [method Input."
+"set_use_accumulated_input] with [code]false[/code] to make events emitted as "
+"often as possible. If you use InputEventMouseMotion to draw lines, consider "
+"implementing [url=https://en.wikipedia.org/wiki/Bresenham"
+"%27s_line_algorithm]Bresenham's line algorithm[/url] as well to avoid "
+"visible gaps in lines if the user is moving the mouse quickly."
+msgstr ""
+
+#: doc/classes/InputEventMouseMotion.xml:18
+msgid ""
+"Represents the pressure the user puts on the pen. Ranges from [code]0.0[/"
+"code] to [code]1.0[/code]."
+msgstr ""
+
+#: doc/classes/InputEventMouseMotion.xml:21
+msgid ""
+"The mouse position relative to the previous position (position at the last "
+"frame).\n"
+"[b]Note:[/b] Since [InputEventMouseMotion] is only emitted when the mouse "
+"moves, the last event won't have a relative position of [code]Vector2(0, 0)[/"
+"code] when the user stops moving the mouse."
+msgstr ""
+
+#: doc/classes/InputEventMouseMotion.xml:25
+msgid "The mouse speed in pixels per second."
+msgstr ""
+
+#: doc/classes/InputEventMouseMotion.xml:28
+msgid ""
+"Represents the angles of tilt of the pen. Positive X-coordinate value "
+"indicates a tilt to the right. Positive Y-coordinate value indicates a tilt "
+"toward the user. Ranges from [code]-1.0[/code] to [code]1.0[/code] for both "
+"axes."
+msgstr ""
+
+#: doc/classes/InputEventScreenDrag.xml:4
+msgid ""
+"Input event type for screen drag events. Only available on mobile devices."
+msgstr ""
+
+#: doc/classes/InputEventScreenDrag.xml:7
+msgid "Contains screen drag information. See [method Node._input]."
+msgstr ""
+
+#: doc/classes/InputEventScreenDrag.xml:16
+msgid "The drag event index in the case of a multi-drag event."
+msgstr ""
+
+#: doc/classes/InputEventScreenDrag.xml:19
+msgid "The drag position."
+msgstr ""
+
+#: doc/classes/InputEventScreenDrag.xml:22
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
+msgstr ""
+
+#: doc/classes/InputEventScreenDrag.xml:25
+msgid "The drag speed."
+msgstr ""
+
+#: doc/classes/InputEventScreenTouch.xml:4
+msgid ""
+"Input event type for screen touch events.\n"
+"(only available on mobile devices)"
+msgstr ""
+
+#: doc/classes/InputEventScreenTouch.xml:8
+msgid ""
+"Stores multi-touch press/release information. Supports touch press, touch "
+"release and [member index] for multi-touch count and order."
+msgstr ""
+
+#: doc/classes/InputEventScreenTouch.xml:17
+msgid ""
+"The touch index in the case of a multi-touch event. One index = one finger."
+msgstr ""
+
+#: doc/classes/InputEventScreenTouch.xml:20
+msgid "The touch position."
+msgstr ""
+
+#: doc/classes/InputEventScreenTouch.xml:23
+msgid ""
+"If [code]true[/code], the touch's state is pressed. If [code]false[/code], "
+"the touch's state is released."
+msgstr ""
+
+#: doc/classes/InputEventWithModifiers.xml:4
+msgid "Base class for keys events with modifiers."
+msgstr ""
+
+#: doc/classes/InputEventWithModifiers.xml:7
+msgid ""
+"Contains keys events information with modifiers support like [code]Shift[/"
+"code] or [code]Alt[/code]. See [method Node._input]."
+msgstr ""
+
+#: doc/classes/InputEventWithModifiers.xml:16
+msgid "State of the [code]Alt[/code] modifier."
+msgstr ""
+
+#: doc/classes/InputEventWithModifiers.xml:19
+msgid "State of the [code]Command[/code] modifier."
+msgstr ""
+
+#: doc/classes/InputEventWithModifiers.xml:22
+msgid "State of the [code]Ctrl[/code] modifier."
+msgstr ""
+
+#: doc/classes/InputEventWithModifiers.xml:25
+msgid "State of the [code]Meta[/code] modifier."
+msgstr ""
+
+#: doc/classes/InputEventWithModifiers.xml:28
+msgid "State of the [code]Shift[/code] modifier."
+msgstr ""
+
+#: doc/classes/InputMap.xml:4
+msgid "Singleton that manages [InputEventAction]."
+msgstr ""
+
+#: doc/classes/InputMap.xml:7
+msgid ""
+"Manages all [InputEventAction] which can be created/modified from the "
+"project settings menu [b]Project > Project Settings > Input Map[/b] or in "
+"code with [method add_action] and [method action_add_event]. See [method "
+"Node._input]."
+msgstr ""
+
+#: doc/classes/InputMap.xml:10
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/inputs/inputevent.html#inputmap"
+msgstr ""
+
+#: doc/classes/InputMap.xml:18
+msgid ""
+"Adds an [InputEvent] to an action. This [InputEvent] will trigger the action."
+msgstr ""
+
+#: doc/classes/InputMap.xml:26
+msgid "Removes an [InputEvent] from an action."
+msgstr ""
+
+#: doc/classes/InputMap.xml:33
+msgid "Removes all events from an action."
+msgstr ""
+
+#: doc/classes/InputMap.xml:40
+msgid "Returns a deadzone value for the action."
+msgstr ""
+
+#: doc/classes/InputMap.xml:48
+msgid ""
+"Returns [code]true[/code] if the action has the given [InputEvent] "
+"associated with it."
+msgstr ""
+
+#: doc/classes/InputMap.xml:56
+msgid "Sets a deadzone value for the action."
+msgstr ""
+
+#: doc/classes/InputMap.xml:64
+msgid ""
+"Adds an empty action to the [InputMap] with a configurable [code]deadzone[/"
+"code].\n"
+"An [InputEvent] can then be added to this action with [method "
+"action_add_event]."
+msgstr ""
+
+#: doc/classes/InputMap.xml:72
+msgid "Removes an action from the [InputMap]."
+msgstr ""
+
+#: doc/classes/InputMap.xml:81
+msgid ""
+"Returns [code]true[/code] if the given event is part of an existing action. "
+"This method ignores keyboard modifiers if the given [InputEvent] is not "
+"pressed (for proper release detection). See [method action_has_event] if you "
+"don't want this behavior.\n"
+"If [code]exact_match[/code] is [code]false[/code], it ignores the input "
+"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
+"direction for [InputEventJoypadMotion] events."
+msgstr ""
+
+#: doc/classes/InputMap.xml:89
+msgid "Returns an array of [InputEvent]s associated with a given action."
+msgstr ""
+
+#: doc/classes/InputMap.xml:95
+msgid "Returns an array of all actions in the [InputMap]."
+msgstr ""
+
+#: doc/classes/InputMap.xml:102
+msgid ""
+"Returns [code]true[/code] if the [InputMap] has a registered action with the "
+"given name."
+msgstr ""
+
+#: doc/classes/InputMap.xml:108
+msgid ""
+"Clears all [InputEventAction] in the [InputMap] and load it anew from "
+"[ProjectSettings]."
+msgstr ""
+
+#: doc/classes/InstancePlaceholder.xml:4
+msgid "Placeholder for the root [Node] of a [PackedScene]."
+msgstr ""
+
+#: doc/classes/InstancePlaceholder.xml:7
+msgid ""
+"Turning on the option [b]Load As Placeholder[/b] for an instanced scene in "
+"the editor causes it to be replaced by an InstancePlaceholder when running "
+"the game. This makes it possible to delay actually loading the scene until "
+"calling [method replace_by_instance]. This is useful to avoid loading large "
+"scenes all at once by loading parts of it selectively.\n"
+"The InstancePlaceholder does not have a transform. This causes any child "
+"nodes to be positioned relatively to the Viewport from point (0,0), rather "
+"than their parent as displayed in the editor. Replacing the placeholder with "
+"a scene with a transform will transform children relatively to their parent "
+"again."
+msgstr ""
+
+#: doc/classes/InstancePlaceholder.xml:18
+msgid ""
+"Not thread-safe. Use [method Object.call_deferred] if calling from a thread."
+msgstr ""
+
+#: doc/classes/InstancePlaceholder.xml:24
+msgid ""
+"Gets the path to the [PackedScene] resource file that is loaded by default "
+"when calling [method replace_by_instance]. Not thread-safe. Use [method "
+"Object.call_deferred] if calling from a thread."
+msgstr ""
+
+#: doc/classes/InstancePlaceholder.xml:37
+msgid ""
+"Replaces this placeholder by the scene handed as an argument, or the "
+"original scene if no argument is given. As for all resources, the scene is "
+"loaded only if it's not loaded already. By manually loading the scene "
+"beforehand, delays caused by this function can be avoided."
+msgstr ""
+
+#: doc/classes/int.xml:4
+msgid "Integer built-in type."
+msgstr ""
+
+#: doc/classes/int.xml:7
+msgid ""
+"Signed 64-bit integer type.\n"
+"It can take values in the interval [code][-2^63, 2^63 - 1][/code], i.e. "
+"[code][-9223372036854775808, 9223372036854775807][/code]. Exceeding those "
+"bounds will wrap around.\n"
+"[int] is a [Variant] type, and will thus be used when assigning an integer "
+"value to a [Variant]. It can also be enforced with the [code]: int[/code] "
+"type hint.\n"
+"[codeblock]\n"
+"var my_variant = 0 # int, value 0.\n"
+"my_variant += 4.2 # float, value 4.2.\n"
+"var my_int: int = 1 # int, value 1.\n"
+"my_int = 4.2 # int, value 4, the right value is implicitly cast to int.\n"
+"my_int = int(\"6.7\") # int, value 6, the String is explicitly cast with "
+"int.\n"
+"\n"
+"var max_int = 9223372036854775807\n"
+"print(max_int) # 9223372036854775807, OK.\n"
+"max_int += 1\n"
+"print(max_int) # -9223372036854775808, we overflowed and wrapped around.\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/int.xml:30
+msgid ""
+"Cast a [bool] value to an integer value, [code]int(true)[/code] will be "
+"equals to 1 and [code]int(false)[/code] will be equals to 0."
+msgstr ""
+
+#: doc/classes/int.xml:37
+msgid ""
+"Cast a float value to an integer value, this method simply removes the "
+"number fractions (i.e. rounds [code]from[/code] towards zero), so for "
+"example [code]int(2.7)[/code] will be equals to 2, [code]int(0.1)[/code] "
+"will be equals to 0 and [code]int(-2.7)[/code] will be equals to -2. This "
+"operation is also called truncation."
+msgstr ""
+
+#: doc/classes/int.xml:44
+msgid ""
+"Cast a [String] value to an integer value, this method is an integer parser "
+"from a string, so calling this method with an invalid integer string will "
+"return 0, a valid string will be something like [code]'1.7'[/code]. This "
+"method will ignore all non-number characters, so calling [code]int('1e3')[/"
+"code] will return 13."
+msgstr ""
+
+#: doc/classes/InterpolatedCamera.xml:4
+msgid "[i]Deprecated.[/i] Camera which moves toward another node."
+msgstr ""
+
+#: doc/classes/InterpolatedCamera.xml:7
+msgid ""
+"[i]Deprecated (will be removed in Godot 4.0).[/i] InterpolatedCamera is a "
+"[Camera] which smoothly moves to match a target node's position and "
+"rotation.\n"
+"If it is not [member enabled] or does not have a valid target set, "
+"InterpolatedCamera acts like a normal Camera."
+msgstr ""
+
+#: doc/classes/InterpolatedCamera.xml:17
+msgid "Sets the node to move toward and orient with."
+msgstr ""
+
+#: doc/classes/InterpolatedCamera.xml:23
+msgid ""
+"If [code]true[/code], and a target is set, the camera will move "
+"automatically."
+msgstr ""
+
+#: doc/classes/InterpolatedCamera.xml:26
+msgid ""
+"How quickly the camera moves toward its target. Higher values will result in "
+"tighter camera motion."
+msgstr ""
+
+#: doc/classes/InterpolatedCamera.xml:29
+msgid "The target's [NodePath]."
+msgstr ""
+
+#: doc/classes/IP.xml:4
+msgid "Internet protocol (IP) support functions such as DNS resolution."
+msgstr ""
+
+#: doc/classes/IP.xml:7
+msgid ""
+"IP contains support functions for the Internet Protocol (IP). TCP/IP support "
+"is in different classes (see [StreamPeerTCP] and [TCP_Server]). IP provides "
+"DNS hostname resolution support, both blocking and threaded."
+msgstr ""
+
+#: doc/classes/IP.xml:16
+msgid ""
+"Removes all of a [code]hostname[/code]'s cached references. If no "
+"[code]hostname[/code] is given, all cached IP addresses are removed."
+msgstr ""
+
+#: doc/classes/IP.xml:23
+msgid ""
+"Removes a given item [code]id[/code] from the queue. This should be used to "
+"free a queue after it has completed to enable more queries to happen."
+msgstr ""
+
+#: doc/classes/IP.xml:29
+msgid "Returns all the user's current IPv4 and IPv6 addresses as an array."
+msgstr ""
+
+#: doc/classes/IP.xml:35
+msgid ""
+"Returns all network adapters as an array.\n"
+"Each adapter is a dictionary of the form:\n"
+"[codeblock]\n"
+"{\n"
+" \"index\": \"1\", # Interface index.\n"
+" \"name\": \"eth0\", # Interface name.\n"
+" \"friendly\": \"Ethernet One\", # A friendly name (might be empty).\n"
+" \"addresses\": [\"192.168.1.101\"], # An array of IP addresses "
+"associated to this interface.\n"
+"}\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/IP.xml:51
+msgid ""
+"Returns a queued hostname's IP address, given its queue [code]id[/code]. "
+"Returns an empty string on error or if resolution hasn't happened yet (see "
+"[method get_resolve_item_status])."
+msgstr ""
+
+#: doc/classes/IP.xml:58
+msgid ""
+"Return resolved addresses, or an empty array if an error happened or "
+"resolution didn't happen yet (see [method get_resolve_item_status])."
+msgstr ""
+
+#: doc/classes/IP.xml:65
+msgid ""
+"Returns a queued hostname's status as a [enum ResolverStatus] constant, "
+"given its queue [code]id[/code]."
+msgstr ""
+
+#: doc/classes/IP.xml:73
+msgid ""
+"Returns a given hostname's IPv4 or IPv6 address when resolved (blocking-type "
+"method). The address type returned depends on the [enum Type] constant given "
+"as [code]ip_type[/code]."
+msgstr ""
+
+#: doc/classes/IP.xml:81
+msgid ""
+"Resolves a given hostname in a blocking way. Addresses are returned as an "
+"[Array] of IPv4 or IPv6 depending on [code]ip_type[/code]."
+msgstr ""
+
+#: doc/classes/IP.xml:89
+msgid ""
+"Creates a queue item to resolve a hostname to an IPv4 or IPv6 address "
+"depending on the [enum Type] constant given as [code]ip_type[/code]. Returns "
+"the queue ID if successful, or [constant RESOLVER_INVALID_ID] on error."
+msgstr ""
+
+#: doc/classes/IP.xml:95
+msgid "DNS hostname resolver status: No status."
+msgstr ""
+
+#: doc/classes/IP.xml:98
+msgid "DNS hostname resolver status: Waiting."
+msgstr ""
+
+#: doc/classes/IP.xml:101
+msgid "DNS hostname resolver status: Done."
+msgstr ""
+
+#: doc/classes/IP.xml:104
+msgid "DNS hostname resolver status: Error."
+msgstr ""
+
+#: doc/classes/IP.xml:107
+msgid ""
+"Maximum number of concurrent DNS resolver queries allowed, [constant "
+"RESOLVER_INVALID_ID] is returned if exceeded."
+msgstr ""
+
+#: doc/classes/IP.xml:110
+msgid ""
+"Invalid ID constant. Returned if [constant RESOLVER_MAX_QUERIES] is exceeded."
+msgstr ""
+
+#: doc/classes/IP.xml:113
+msgid "Address type: None."
+msgstr ""
+
+#: doc/classes/IP.xml:116
+msgid "Address type: Internet protocol version 4 (IPv4)."
+msgstr ""
+
+#: doc/classes/IP.xml:119
+msgid "Address type: Internet protocol version 6 (IPv6)."
+msgstr ""
+
+#: doc/classes/IP.xml:122
+msgid "Address type: Any."
+msgstr ""
+
+#: doc/classes/ItemList.xml:4
+msgid ""
+"Control that provides a list of selectable items (and/or icons) in a single "
+"column, or optionally in multiple columns."
+msgstr ""
+
+#: doc/classes/ItemList.xml:7
+msgid ""
+"This control provides a selectable list of items that may be in a single (or "
+"multiple columns) with option of text, icons, or both text and icon. "
+"Tooltips are supported and may be different for every item in the list.\n"
+"Selectable items in the list may be selected or deselected and multiple "
+"selection may be enabled. Selection with right mouse button may also be "
+"enabled to allow use of popup context menus. Items may also be \"activated\" "
+"by double-clicking them or by pressing Enter.\n"
+"Item text only supports single-line strings, newline characters (e.g. "
+"[code]\\n[/code]) in the string won't produce a newline. Text wrapping is "
+"enabled in [constant ICON_MODE_TOP] mode, but column's width is adjusted to "
+"fully fit its content by default. You need to set [member "
+"fixed_column_width] greater than zero to wrap the text."
+msgstr ""
+
+#: doc/classes/ItemList.xml:19
+msgid "Adds an item to the item list with no text, only an icon."
+msgstr ""
+
+#: doc/classes/ItemList.xml:28
+msgid ""
+"Adds an item to the item list with specified text. Specify an [code]icon[/"
+"code], or use [code]null[/code] as the [code]icon[/code] for a list item "
+"with no icon.\n"
+"If selectable is [code]true[/code], the list item will be selectable."
+msgstr ""
+
+#: doc/classes/ItemList.xml:35
+msgid "Removes all items from the list."
+msgstr ""
+
+#: doc/classes/ItemList.xml:41
+msgid ""
+"Ensure current selection is visible, adjusting the scroll position as "
+"necessary."
+msgstr ""
+
+#: doc/classes/ItemList.xml:49
+msgid ""
+"Returns the item index at the given [code]position[/code].\n"
+"When there is no item at that point, -1 will be returned if [code]exact[/"
+"code] is [code]true[/code], and the closest item index will be returned "
+"otherwise."
+msgstr ""
+
+#: doc/classes/ItemList.xml:56
+msgid "Returns the number of items currently in the list."
+msgstr ""
+
+#: doc/classes/ItemList.xml:63
+msgid ""
+"Returns the custom background color of the item specified by [code]idx[/"
+"code] index."
+msgstr ""
+
+#: doc/classes/ItemList.xml:70
+msgid ""
+"Returns the custom foreground color of the item specified by [code]idx[/"
+"code] index."
+msgstr ""
+
+#: doc/classes/ItemList.xml:77
+msgid "Returns the icon associated with the specified index."
+msgstr ""
+
+#: doc/classes/ItemList.xml:84
+msgid "Returns a [Color] modulating item's icon at the specified index."
+msgstr ""
+
+#: doc/classes/ItemList.xml:91
+msgid ""
+"Returns the region of item's icon used. The whole icon will be used if the "
+"region has no area."
+msgstr ""
+
+#: doc/classes/ItemList.xml:98
+msgid "Returns the metadata value of the specified index."
+msgstr ""
+
+#: doc/classes/ItemList.xml:105
+msgid "Returns the text associated with the specified index."
+msgstr ""
+
+#: doc/classes/ItemList.xml:112
+msgid "Returns the tooltip hint associated with the specified index."
+msgstr ""
+
+#: doc/classes/ItemList.xml:118
+msgid "Returns an array with the indexes of the selected items."
+msgstr ""
+
+#: doc/classes/ItemList.xml:124
+msgid ""
+"Returns the [Object] ID associated with the list.\n"
+"[b]Warning:[/b] This is a required internal node, removing and freeing it "
+"may cause a crash. If you wish to hide it or any of its children, use their "
+"[member CanvasItem.visible] property."
+msgstr ""
+
+#: doc/classes/ItemList.xml:131
+msgid "Returns [code]true[/code] if one or more items are selected."
+msgstr ""
+
+#: doc/classes/ItemList.xml:138
+msgid ""
+"Returns [code]true[/code] if the item at the specified index is disabled."
+msgstr ""
+
+#: doc/classes/ItemList.xml:145
+msgid ""
+"Returns [code]true[/code] if the item icon will be drawn transposed, i.e. "
+"the X and Y axes are swapped."
+msgstr ""
+
+#: doc/classes/ItemList.xml:152
+msgid ""
+"Returns [code]true[/code] if the item at the specified index is selectable."
+msgstr ""
+
+#: doc/classes/ItemList.xml:159
+msgid ""
+"Returns [code]true[/code] if the tooltip is enabled for specified item index."
+msgstr ""
+
+#: doc/classes/ItemList.xml:166
+msgid ""
+"Returns [code]true[/code] if the item at the specified index is currently "
+"selected."
+msgstr ""
+
+#: doc/classes/ItemList.xml:174
+msgid "Moves item from index [code]from_idx[/code] to [code]to_idx[/code]."
+msgstr ""
+
+#: doc/classes/ItemList.xml:181
+msgid "Removes the item specified by [code]idx[/code] index from the list."
+msgstr ""
+
+#: doc/classes/ItemList.xml:189
+msgid ""
+"Select the item at the specified index.\n"
+"[b]Note:[/b] This method does not trigger the item selection signal."
+msgstr ""
+
+#: doc/classes/ItemList.xml:198
+msgid ""
+"Sets the background color of the item specified by [code]idx[/code] index to "
+"the specified [Color]."
+msgstr ""
+
+#: doc/classes/ItemList.xml:206
+msgid ""
+"Sets the foreground color of the item specified by [code]idx[/code] index to "
+"the specified [Color]."
+msgstr ""
+
+#: doc/classes/ItemList.xml:214
+msgid ""
+"Disables (or enables) the item at the specified index.\n"
+"Disabled items cannot be selected and do not trigger activation signals "
+"(when double-clicking or pressing Enter)."
+msgstr ""
+
+#: doc/classes/ItemList.xml:223
+msgid ""
+"Sets (or replaces) the icon's [Texture] associated with the specified index."
+msgstr ""
+
+#: doc/classes/ItemList.xml:231
+msgid ""
+"Sets a modulating [Color] of the item associated with the specified index."
+msgstr ""
+
+#: doc/classes/ItemList.xml:239
+msgid ""
+"Sets the region of item's icon used. The whole icon will be used if the "
+"region has no area."
+msgstr ""
+
+#: doc/classes/ItemList.xml:247
+msgid "Sets whether the item icon will be drawn transposed."
+msgstr ""
+
+#: doc/classes/ItemList.xml:255
+msgid ""
+"Sets a value (of any type) to be stored with the item associated with the "
+"specified index."
+msgstr ""
+
+#: doc/classes/ItemList.xml:263
+msgid ""
+"Allows or disallows selection of the item associated with the specified "
+"index."
+msgstr ""
+
+#: doc/classes/ItemList.xml:271
+msgid "Sets text of the item associated with the specified index."
+msgstr ""
+
+#: doc/classes/ItemList.xml:279
+msgid "Sets the tooltip hint for the item associated with the specified index."
+msgstr ""
+
+#: doc/classes/ItemList.xml:287
+msgid "Sets whether the tooltip hint is enabled for specified item index."
+msgstr ""
+
+#: doc/classes/ItemList.xml:293
+msgid "Sorts items in the list by their text."
+msgstr ""
+
+#: doc/classes/ItemList.xml:300
+msgid "Ensures the item associated with the specified index is not selected."
+msgstr ""
+
+#: doc/classes/ItemList.xml:306
+msgid "Ensures there are no items selected."
+msgstr ""
+
+#: doc/classes/ItemList.xml:312
+msgid ""
+"If [code]true[/code], the currently selected item can be selected again."
+msgstr ""
+
+#: doc/classes/ItemList.xml:315
+msgid "If [code]true[/code], right mouse button click can select items."
+msgstr ""
+
+#: doc/classes/ItemList.xml:318
+msgid ""
+"If [code]true[/code], the control will automatically resize the height to "
+"fit its content."
+msgstr ""
+
+#: doc/classes/ItemList.xml:321
+msgid ""
+"The width all columns will be adjusted to.\n"
+"A value of zero disables the adjustment, each item will have a width equal "
+"to the width of its content and the columns will have an uneven width."
+msgstr ""
+
+#: doc/classes/ItemList.xml:325
+msgid ""
+"The size all icons will be adjusted to.\n"
+"If either X or Y component is not greater than zero, icon size won't be "
+"affected."
+msgstr ""
+
+#: doc/classes/ItemList.xml:330
+msgid ""
+"The icon position, whether above or to the left of the text. See the [enum "
+"IconMode] constants."
+msgstr ""
+
+#: doc/classes/ItemList.xml:333
+msgid ""
+"The scale of icon applied after [member fixed_icon_size] and transposing "
+"takes effect."
+msgstr ""
+
+#: doc/classes/ItemList.xml:336
+msgid ""
+"Maximum columns the list will have.\n"
+"If greater than zero, the content will be split among the specified "
+"columns.\n"
+"A value of zero means unlimited columns, i.e. all items will be put in the "
+"same row."
+msgstr ""
+
+#: doc/classes/ItemList.xml:341
+msgid ""
+"Maximum lines of text allowed in each item. Space will be reserved even when "
+"there is not enough lines of text to display.\n"
+"[b]Note:[/b] This property takes effect only when [member icon_mode] is "
+"[constant ICON_MODE_TOP]. To make the text wrap, [member fixed_column_width] "
+"should be greater than zero."
+msgstr ""
+
+#: doc/classes/ItemList.xml:346
+msgid ""
+"Whether all columns will have the same width.\n"
+"If [code]true[/code], the width is equal to the largest column width of all "
+"columns."
+msgstr ""
+
+#: doc/classes/ItemList.xml:350
+msgid ""
+"Allows single or multiple item selection. See the [enum SelectMode] "
+"constants."
+msgstr ""
+
+#: doc/classes/ItemList.xml:357
+msgid ""
+"Triggered when specified list item is activated via double-clicking or by "
+"pressing Enter."
+msgstr ""
+
+#: doc/classes/ItemList.xml:364
+msgid ""
+"Triggered when specified list item has been selected via right mouse "
+"clicking.\n"
+"The click position is also provided to allow appropriate popup of context "
+"menus at the correct location.\n"
+"[member allow_rmb_select] must be enabled."
+msgstr ""
+
+#: doc/classes/ItemList.xml:372
+msgid ""
+"Triggered when specified item has been selected.\n"
+"[member allow_reselect] must be enabled to reselect an item."
+msgstr ""
+
+#: doc/classes/ItemList.xml:380
+msgid ""
+"Triggered when a multiple selection is altered on a list allowing multiple "
+"selection."
+msgstr ""
+
+#: doc/classes/ItemList.xml:385
+msgid ""
+"Triggered when a left mouse click is issued within the rect of the list but "
+"on empty space."
+msgstr ""
+
+#: doc/classes/ItemList.xml:391
+msgid ""
+"Triggered when a right mouse click is issued within the rect of the list but "
+"on empty space.\n"
+"[member allow_rmb_select] must be enabled."
+msgstr ""
+
+#: doc/classes/ItemList.xml:398
+msgid "Icon is drawn above the text."
+msgstr ""
+
+#: doc/classes/ItemList.xml:401
+msgid "Icon is drawn to the left of the text."
+msgstr ""
+
+#: doc/classes/ItemList.xml:404
+msgid "Only allow selecting a single item."
+msgstr ""
+
+#: doc/classes/ItemList.xml:407
+msgid "Allows selecting multiple items by holding Ctrl or Shift."
+msgstr ""
+
+#: doc/classes/ItemList.xml:412
+msgid ""
+"Default [StyleBox] for the [ItemList], i.e. used when the control is not "
+"being focused."
+msgstr ""
+
+#: doc/classes/ItemList.xml:415
+msgid "[StyleBox] used when the [ItemList] is being focused."
+msgstr ""
+
+#: doc/classes/ItemList.xml:418
+msgid "[StyleBox] used for the cursor, when the [ItemList] is being focused."
+msgstr ""
+
+#: doc/classes/ItemList.xml:421
+msgid ""
+"[StyleBox] used for the cursor, when the [ItemList] is not being focused."
+msgstr ""
+
+#: doc/classes/ItemList.xml:424 doc/classes/Tree.xml:407
+msgid "[Font] of the item's text."
+msgstr ""
+
+#: doc/classes/ItemList.xml:427 doc/classes/Tree.xml:410
+msgid "Default text [Color] of the item."
+msgstr ""
+
+#: doc/classes/ItemList.xml:430 doc/classes/Tree.xml:413
+msgid "Text [Color] used when the item is selected."
+msgstr ""
+
+#: doc/classes/ItemList.xml:433
+msgid ""
+"[Color] of the guideline. The guideline is a line drawn between each row of "
+"items."
+msgstr ""
+
+#: doc/classes/ItemList.xml:436
+msgid "The horizontal spacing between items."
+msgstr ""
+
+#: doc/classes/ItemList.xml:439
+msgid "The spacing between item's icon and text."
+msgstr ""
+
+#: doc/classes/ItemList.xml:442
+msgid "The vertical spacing between each line of text."
+msgstr ""
+
+#: doc/classes/ItemList.xml:445
+msgid ""
+"[StyleBox] for the selected items, used when the [ItemList] is not being "
+"focused."
+msgstr ""
+
+#: doc/classes/ItemList.xml:448
+msgid ""
+"[StyleBox] for the selected items, used when the [ItemList] is being focused."
+msgstr ""
+
+#: doc/classes/ItemList.xml:451
+msgid "The vertical spacing between items."
+msgstr ""
+
+#: doc/classes/JavaScript.xml:4
+msgid ""
+"Singleton that connects the engine with the browser's JavaScript context in "
+"HTML5 export."
+msgstr ""
+
+#: doc/classes/JavaScript.xml:7
+msgid ""
+"The JavaScript singleton is implemented only in the HTML5 export. It's used "
+"to access the browser's JavaScript context. This allows interaction with "
+"embedding pages or calling third-party JavaScript APIs.\n"
+"[b]Note:[/b] This singleton can be disabled at build-time to improve "
+"security. By default, the JavaScript singleton is enabled. Official export "
+"templates also have the JavaScript singleton enabled. See [url=https://docs."
+"godotengine.org/en/3.4/development/compiling/compiling_for_web."
+"html]Compiling for the Web[/url] in the documentation for more information."
+msgstr ""
+
+#: doc/classes/JavaScript.xml:11
+msgid ""
+"https://docs.godotengine.org/en/3.4/getting_started/workflow/export/"
+"exporting_for_web.html#calling-javascript-from-script"
+msgstr ""
+
+#: doc/classes/JavaScript.xml:19
+msgid ""
+"Creates a reference to a script function that can be used as a callback by "
+"JavaScript. The reference must be kept until the callback happens, or it "
+"won't be called at all. See [JavaScriptObject] for usage."
+msgstr ""
+
+#: doc/classes/JavaScript.xml:26
+msgid ""
+"Creates a new JavaScript object using the [code]new[/code] constructor. The "
+"[code]object[/code] must a valid property of the JavaScript [code]window[/"
+"code]. See [JavaScriptObject] for usage."
+msgstr ""
+
+#: doc/classes/JavaScript.xml:35
+msgid ""
+"Prompts the user to download a file containing the specified [code]buffer[/"
+"code]. The file will have the given [code]name[/code] and [code]mime[/code] "
+"type.\n"
+"[b]Note:[/b] The browser may override the [url=https://en.wikipedia.org/wiki/"
+"Media_type]MIME type[/url] provided based on the file [code]name[/code]'s "
+"extension.\n"
+"[b]Note:[/b] Browsers might block the download if [method download_buffer] "
+"is not being called from a user interaction (e.g. button click).\n"
+"[b]Note:[/b] Browsers might ask the user for permission or block the "
+"download if multiple download requests are made in a quick succession."
+msgstr ""
+
+#: doc/classes/JavaScript.xml:46
+msgid ""
+"Execute the string [code]code[/code] as JavaScript code within the browser "
+"window. This is a call to the actual global JavaScript function [code]eval()"
+"[/code].\n"
+"If [code]use_global_execution_context[/code] is [code]true[/code], the code "
+"will be evaluated in the global execution context. Otherwise, it is "
+"evaluated in the execution context of a function within the engine's runtime "
+"environment."
+msgstr ""
+
+#: doc/classes/JavaScript.xml:54
+msgid ""
+"Returns an interface to a JavaScript object that can be used by scripts. The "
+"[code]interface[/code] must be a valid property of the JavaScript "
+"[code]window[/code]. The callback must accept a single [Array] argument, "
+"which will contain the JavaScript [code]arguments[/code]. See "
+"[JavaScriptObject] for usage."
+msgstr ""
+
+#: doc/classes/JavaScriptObject.xml:4
+msgid "A wrapper class for native JavaScript objects."
+msgstr ""
+
+#: doc/classes/JavaScriptObject.xml:7
+msgid ""
+"JavaScriptObject is used to interact with JavaScript objects retrieved or "
+"created via [method JavaScript.get_interface], [method JavaScript."
+"create_object], or [method JavaScript.create_callback].\n"
+"Example:\n"
+"[codeblock]\n"
+"extends Node\n"
+"\n"
+"var _my_js_callback = JavaScript.create_callback(self, \"myCallback\") # "
+"This reference must be kept\n"
+"var console = JavaScript.get_interface(\"console\")\n"
+"\n"
+"func _init():\n"
+" var buf = JavaScript.create_object(\"ArrayBuffer\", 10) # new "
+"ArrayBuffer(10)\n"
+" print(buf) # prints [JavaScriptObject:OBJECT_ID]\n"
+" var uint8arr = JavaScript.create_object(\"Uint8Array\", buf) # new "
+"Uint8Array(buf)\n"
+" uint8arr[1] = 255\n"
+" prints(uint8arr[1], uint8arr.byteLength) # prints 255 10\n"
+" console.log(uint8arr) # prints in browser console \"Uint8Array(10) [ 0, "
+"255, 0, 0, 0, 0, 0, 0, 0, 0 ]\"\n"
+"\n"
+" # Equivalent of JavaScript: Array.from(uint8arr).forEach(myCallback)\n"
+" JavaScript.get_interface(\"Array\").from(uint8arr)."
+"forEach(_my_js_callback)\n"
+"\n"
+"func myCallback(args):\n"
+" # Will be called with the parameters passed to the \"forEach\" callback\n"
+" # [0, 0, [JavaScriptObject:1173]]\n"
+" # [255, 1, [JavaScriptObject:1173]]\n"
+" # ...\n"
+" # [0, 9, [JavaScriptObject:1180]]\n"
+" print(args)\n"
+"[/codeblock]\n"
+"[b]Note:[/b] Only available in the HTML5 platform."
+msgstr ""
+
+#: doc/classes/JNISingleton.xml:4
+msgid ""
+"Singleton that connects the engine with Android plugins to interface with "
+"native Android code."
+msgstr ""
+
+#: doc/classes/JNISingleton.xml:7
+msgid ""
+"The JNISingleton is implemented only in the Android export. It's used to "
+"call methods and connect signals from an Android plugin written in Java or "
+"Kotlin. Methods and signals can be called and connected to the JNISingleton "
+"as if it is a Node. See [url=https://en.wikipedia.org/wiki/"
+"Java_Native_Interface]Java Native Interface - Wikipedia[/url] for more "
+"information."
+msgstr ""
+
+#: doc/classes/JNISingleton.xml:10
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/plugins/android/android_plugin."
+"html"
+msgstr ""
+
+#: doc/classes/Joint.xml:4
+msgid "Base class for all 3D joints."
+msgstr ""
+
+#: doc/classes/Joint.xml:7
+msgid ""
+"Joints are used to bind together two physics bodies. They have a solver "
+"priority and can define if the bodies of the two attached nodes should be "
+"able to collide with each other."
+msgstr ""
+
+#: doc/classes/Joint.xml:10 doc/classes/RigidBody.xml:15
+#: doc/classes/VehicleBody.xml:12 doc/classes/VehicleWheel.xml:11
+msgid "https://godotengine.org/asset-library/asset/524"
+msgstr ""
+
+#: doc/classes/Joint.xml:16
+msgid ""
+"If [code]true[/code], the two bodies of the nodes are not able to collide "
+"with each other."
+msgstr ""
+
+#: doc/classes/Joint.xml:19
+msgid "The node attached to the first side (A) of the joint."
+msgstr ""
+
+#: doc/classes/Joint.xml:22
+msgid "The node attached to the second side (B) of the joint."
+msgstr ""
+
+#: doc/classes/Joint.xml:25
+msgid ""
+"The priority used to define which solver is executed first for multiple "
+"joints. The lower the value, the higher the priority."
+msgstr ""
+
+#: doc/classes/Joint2D.xml:4
+msgid "Base node for all joint constraints in 2D physics."
+msgstr ""
+
+#: doc/classes/Joint2D.xml:7
+msgid ""
+"Base node for all joint constraints in 2D physics. Joints take 2 bodies and "
+"apply a custom constraint."
+msgstr ""
+
+#: doc/classes/Joint2D.xml:15
+msgid ""
+"When [member node_a] and [member node_b] move in different directions the "
+"[code]bias[/code] controls how fast the joint pulls them back to their "
+"original position. The lower the [code]bias[/code] the more the two bodies "
+"can pull on the joint."
+msgstr ""
+
+#: doc/classes/Joint2D.xml:18
+msgid ""
+"If [code]true[/code], [member node_a] and [member node_b] can not collide."
+msgstr ""
+
+#: doc/classes/Joint2D.xml:21
+msgid "The first body attached to the joint. Must derive from [PhysicsBody2D]."
+msgstr ""
+
+#: doc/classes/Joint2D.xml:24
+msgid ""
+"The second body attached to the joint. Must derive from [PhysicsBody2D]."
+msgstr ""
+
+#: doc/classes/JSON.xml:4
+msgid "Helper class for parsing JSON data."
+msgstr ""
+
+#: doc/classes/JSON.xml:7
+msgid ""
+"Helper class for parsing JSON data. For usage example and other important "
+"hints, see [JSONParseResult]."
+msgstr ""
+
+#: doc/classes/JSON.xml:16
+msgid ""
+"Parses a JSON-encoded string and returns a [JSONParseResult] containing the "
+"result."
+msgstr ""
+
+#: doc/classes/JSON.xml:25
+msgid ""
+"Converts a [Variant] var to JSON text and returns the result. Useful for "
+"serializing data to store or send over the network.\n"
+"[b]Note:[/b] The JSON specification does not define integer or float types, "
+"but only a [i]number[/i] type. Therefore, converting a Variant to JSON text "
+"will convert all numerical values to [float] types.\n"
+"Use [code]indent[/code] parameter to pretty print the output.\n"
+"[b]Example output:[/b]\n"
+"[codeblock]\n"
+"## JSON.print(my_dictionary)\n"
+"{\"name\":\"my_dictionary\",\"version\":\"1.0.0\",\"entities\":[{\"name\":"
+"\"entity_0\",\"value\":\"value_0\"},{\"name\":\"entity_1\",\"value\":"
+"\"value_1\"}]}\n"
+"\n"
+"## JSON.print(my_dictionary, \"\\t\")\n"
+"{\n"
+" \"name\": \"my_dictionary\",\n"
+" \"version\": \"1.0.0\",\n"
+" \"entities\": [\n"
+" {\n"
+" \"name\": \"entity_0\",\n"
+" \"value\": \"value_0\"\n"
+" },\n"
+" {\n"
+" \"name\": \"entity_1\",\n"
+" \"value\": \"value_1\"\n"
+" }\n"
+" ]\n"
+"}\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/JSONParseResult.xml:4
+msgid "Data class wrapper for decoded JSON."
+msgstr ""
+
+#: doc/classes/JSONParseResult.xml:7
+msgid ""
+"Returned by [method JSON.parse], [JSONParseResult] contains the decoded JSON "
+"or error information if the JSON source wasn't successfully parsed. You can "
+"check if the JSON source was successfully parsed with [code]if json_result."
+"error == OK[/code]."
+msgstr ""
+
+#: doc/classes/JSONParseResult.xml:15
+msgid ""
+"The error type if the JSON source was not successfully parsed. See the [enum "
+"Error] constants."
+msgstr ""
+
+#: doc/classes/JSONParseResult.xml:18
+msgid ""
+"The line number where the error occurred if the JSON source was not "
+"successfully parsed."
+msgstr ""
+
+#: doc/classes/JSONParseResult.xml:21
+msgid ""
+"The error message if the JSON source was not successfully parsed. See the "
+"[enum Error] constants."
+msgstr ""
+
+#: doc/classes/JSONParseResult.xml:24
+msgid ""
+"A [Variant] containing the parsed JSON. Use [method @GDScript.typeof] or the "
+"[code]is[/code] keyword to check if it is what you expect. For example, if "
+"the JSON source starts with curly braces ([code]{}[/code]), a [Dictionary] "
+"will be returned. If the JSON source starts with brackets ([code][][/code]), "
+"an [Array] will be returned.\n"
+"[b]Note:[/b] The JSON specification does not define integer or float types, "
+"but only a [i]number[/i] type. Therefore, parsing a JSON text will convert "
+"all numerical values to [float] types.\n"
+"[b]Note:[/b] JSON objects do not preserve key order like Godot dictionaries, "
+"thus, you should not rely on keys being in a certain order if a dictionary "
+"is constructed from JSON. In contrast, JSON arrays retain the order of their "
+"elements:\n"
+"[codeblock]\n"
+"var p = JSON.parse('[\"hello\", \"world\", \"!\"]')\n"
+"if typeof(p.result) == TYPE_ARRAY:\n"
+" print(p.result[0]) # Prints \"hello\"\n"
+"else:\n"
+" push_error(\"Unexpected results.\")\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/JSONRPC.xml:4
+msgid "A helper to handle dictionaries which look like JSONRPC documents."
+msgstr ""
+
+#: doc/classes/JSONRPC.xml:7
+msgid ""
+"[url=https://www.jsonrpc.org/]JSON-RPC[/url] is a standard which wraps a "
+"method call in a [JSON] object. The object has a particular structure and "
+"identifies which method is called, the parameters to that function, and "
+"carries an ID to keep track of responses. This class implements that "
+"standard on top of [Dictionary]; you will have to convert between a "
+"[Dictionary] and [JSON] with other functions."
+msgstr ""
+
+#: doc/classes/JSONRPC.xml:17
+msgid ""
+"Returns a dictionary in the form of a JSON-RPC notification. Notifications "
+"are one-shot messages which do not expect a response.\n"
+"- [code]method[/code]: Name of the method being called.\n"
+"- [code]params[/code]: An array or dictionary of parameters being passed to "
+"the method."
+msgstr ""
+
+#: doc/classes/JSONRPC.xml:28
+msgid ""
+"Returns a dictionary in the form of a JSON-RPC request. Requests are sent to "
+"a server with the expectation of a response. The ID field is used for the "
+"server to specify which exact request it is responding to.\n"
+"- [code]method[/code]: Name of the method being called.\n"
+"- [code]params[/code]: An array or dictionary of parameters being passed to "
+"the method.\n"
+"- [code]id[/code]: Uniquely identifies this request. The server is expected "
+"to send a response with the same ID."
+msgstr ""
+
+#: doc/classes/JSONRPC.xml:39
+msgid ""
+"When a server has received and processed a request, it is expected to send a "
+"response. If you did not want a response then you need to have sent a "
+"Notification instead.\n"
+"- [code]result[/code]: The return value of the function which was called.\n"
+"- [code]id[/code]: The ID of the request this response is targeted to."
+msgstr ""
+
+#: doc/classes/JSONRPC.xml:50
+msgid ""
+"Creates a response which indicates a previous reply has failed in some way.\n"
+"- [code]code[/code]: The error code corresponding to what kind of error this "
+"is. See the [enum ErrorCode] constants.\n"
+"- [code]message[/code]: A custom message about this error.\n"
+"- [code]id[/code]: The request this error is a response to."
+msgstr ""
+
+#: doc/classes/JSONRPC.xml:61
+msgid ""
+"Given a Dictionary which takes the form of a JSON-RPC request: unpack the "
+"request and run it. Methods are resolved by looking at the field called "
+"\"method\" and looking for an equivalently named function in the JSONRPC "
+"object. If one is found that method is called.\n"
+"To add new supported methods extend the JSONRPC class and call [method "
+"process_action] on your subclass.\n"
+"[code]action[/code]: The action to be run, as a Dictionary in the form of a "
+"JSON-RPC request or notification."
+msgstr ""
+
+#: doc/classes/JSONRPC.xml:86
+msgid ""
+"A method call was requested but no function of that name existed in the "
+"JSONRPC subclass."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:4
+msgid "Kinematic body 3D node."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:7
+msgid ""
+"Kinematic bodies are special types of bodies that are meant to be user-"
+"controlled. They are not affected by physics at all; to other types of "
+"bodies, such as a character or a rigid body, these are the same as a static "
+"body. However, they have two main uses:\n"
+"[b]Simulated motion:[/b] When these bodies are moved manually, either from "
+"code or from an [AnimationPlayer] (with [member AnimationPlayer."
+"playback_process_mode] set to \"physics\"), the physics will automatically "
+"compute an estimate of their linear and angular velocity. This makes them "
+"very useful for moving platforms or other AnimationPlayer-controlled objects "
+"(like a door, a bridge that opens, etc).\n"
+"[b]Kinematic characters:[/b] KinematicBody also has an API for moving "
+"objects (the [method move_and_collide] and [method move_and_slide] methods) "
+"while performing collision tests. This makes them really useful to implement "
+"characters that collide against a world, but don't require advanced physics."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:12 doc/classes/KinematicBody2D.xml:12
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/physics/kinematic_character_2d."
+"html"
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:23
+msgid ""
+"Returns [code]true[/code] if the specified [code]axis[/code] is locked. See "
+"also [member move_lock_x], [member move_lock_y] and [member move_lock_z]."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:30
+msgid ""
+"Returns the floor's collision angle at the last collision point according to "
+"[code]up_direction[/code], which is [code]Vector3.UP[/code] by default. This "
+"value is always positive and only valid after calling [method "
+"move_and_slide] and when [method is_on_floor] returns [code]true[/code]."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:36 doc/classes/KinematicBody2D.xml:28
+msgid ""
+"Returns the surface normal of the floor at the last collision point. Only "
+"valid after calling [method move_and_slide] or [method "
+"move_and_slide_with_snap] and when [method is_on_floor] returns [code]true[/"
+"code]."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:42 doc/classes/KinematicBody2D.xml:34
+msgid ""
+"Returns the linear velocity of the floor at the last collision point. Only "
+"valid after calling [method move_and_slide] or [method "
+"move_and_slide_with_snap] and when [method is_on_floor] returns [code]true[/"
+"code]."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:48
+msgid ""
+"Returns a [KinematicCollision], which contains information about the latest "
+"collision that occurred during the last call to [method move_and_slide]."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:55
+msgid ""
+"Returns a [KinematicCollision], which contains information about a collision "
+"that occurred during the last call to [method move_and_slide] or [method "
+"move_and_slide_with_snap]. Since the body can collide several times in a "
+"single call to [method move_and_slide], you must specify the index of the "
+"collision in the range 0 to ([method get_slide_count] - 1)."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:61 doc/classes/KinematicBody2D.xml:59
+msgid ""
+"Returns the number of times the body collided and changed direction during "
+"the last call to [method move_and_slide] or [method "
+"move_and_slide_with_snap]."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:67 doc/classes/KinematicBody2D.xml:65
+msgid ""
+"Returns [code]true[/code] if the body collided with the ceiling on the last "
+"call of [method move_and_slide] or [method move_and_slide_with_snap]. "
+"Otherwise, returns [code]false[/code]."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:73 doc/classes/KinematicBody2D.xml:71
+msgid ""
+"Returns [code]true[/code] if the body collided with the floor on the last "
+"call of [method move_and_slide] or [method move_and_slide_with_snap]. "
+"Otherwise, returns [code]false[/code]."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:79 doc/classes/KinematicBody2D.xml:77
+msgid ""
+"Returns [code]true[/code] if the body collided with a wall on the last call "
+"of [method move_and_slide] or [method move_and_slide_with_snap]. Otherwise, "
+"returns [code]false[/code]."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:89
+msgid ""
+"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
+"it collides. Returns a [KinematicCollision], which contains information "
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
+"If [code]test_only[/code] is [code]true[/code], the body does not move but "
+"the would-be collision information is given."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:102
+msgid ""
+"Moves the body along a vector. If the body collides with another, it will "
+"slide along the other body rather than stop immediately. If the other body "
+"is a [KinematicBody] or [RigidBody], it will also be affected by the motion "
+"of the other body. You can use this to make moving and rotating platforms, "
+"or to make nodes push other nodes.\n"
+"This method should be used in [method Node._physics_process] (or in a method "
+"called by [method Node._physics_process]), as it uses the physics step's "
+"[code]delta[/code] value automatically in calculations. Otherwise, the "
+"simulation will run at an incorrect speed.\n"
+"[code]linear_velocity[/code] is the velocity vector (typically meters per "
+"second). Unlike in [method move_and_collide], you should [i]not[/i] multiply "
+"it by [code]delta[/code] — the physics engine handles applying the "
+"velocity.\n"
+"[code]up_direction[/code] is the up direction, used to determine what is a "
+"wall and what is a floor or a ceiling. If set to the default value of "
+"[code]Vector3(0, 0, 0)[/code], everything is considered a wall.\n"
+"If [code]stop_on_slope[/code] is [code]true[/code], body will not slide on "
+"slopes when you include gravity in [code]linear_velocity[/code] and the body "
+"is standing still.\n"
+"If the body collides, it will change direction a maximum of "
+"[code]max_slides[/code] times before it stops.\n"
+"[code]floor_max_angle[/code] is the maximum angle (in radians) where a slope "
+"is still considered a floor (or a ceiling), rather than a wall. The default "
+"value equals 45 degrees.\n"
+"If [code]infinite_inertia[/code] is [code]true[/code], body will be able to "
+"push [RigidBody] nodes, but it won't also detect any collisions with them. "
+"If [code]false[/code], it will interact with [RigidBody] nodes like with "
+"[StaticBody].\n"
+"Returns the [code]linear_velocity[/code] vector, rotated and/or scaled if a "
+"slide collision occurred. To get detailed information about collisions that "
+"occurred, use [method get_slide_collision].\n"
+"When the body touches a moving platform, the platform's velocity is "
+"automatically added to the body motion. If a collision occurs due to the "
+"platform's motion, it will always be first in the slide collisions."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:124
+msgid ""
+"Moves the body while keeping it attached to slopes. Similar to [method "
+"move_and_slide].\n"
+"As long as the [code]snap[/code] vector is in contact with the ground, the "
+"body will remain attached to the surface. This means you must disable snap "
+"in order to jump, for example. You can do this by setting [code]snap[/code] "
+"to [code](0, 0, 0)[/code] or by using [method move_and_slide] instead."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:133
+msgid ""
+"Locks or unlocks the specified [code]axis[/code] depending on the value of "
+"[code]lock[/code]. See also [member move_lock_x], [member move_lock_y] and "
+"[member move_lock_z]."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:142
+msgid ""
+"Checks for collisions without moving the body. Virtually sets the node's "
+"position, scale and rotation to that of the given [Transform], then tries to "
+"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:149
+msgid "Lock the body's X axis movement."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:152
+msgid "Lock the body's Y axis movement."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:155
+msgid "Lock the body's Z axis movement."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
+msgid ""
+"Extra margin used for collision recovery in motion functions (see [method "
+"move_and_collide], [method move_and_slide], [method "
+"move_and_slide_with_snap]).\n"
+"If the body is at least this close to another body, it will consider them to "
+"be colliding and will be pushed away before performing the actual motion.\n"
+"A higher value means it's more flexible for detecting collision, which helps "
+"with consistently detecting walls and floors.\n"
+"A lower value forces the collision algorithm to use more exact detection, so "
+"it can be used in cases that specifically require precision, e.g at very low "
+"scale to avoid visible jittering, or for stability with a stack of kinematic "
+"bodies."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
+msgid ""
+"If [code]true[/code], the body's movement will be synchronized to the "
+"physics frame. This is useful when animating movement via [AnimationPlayer], "
+"for example on moving platforms. Do [b]not[/b] use together with [method "
+"move_and_slide] or [method move_and_collide] functions."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:167
+msgid ""
+"Lock the body's X axis movement. Deprecated alias for [member "
+"axis_lock_motion_x]."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:170
+msgid ""
+"Lock the body's Y axis movement. Deprecated alias for [member "
+"axis_lock_motion_y]."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:173
+msgid ""
+"Lock the body's Z axis movement. Deprecated alias for [member "
+"axis_lock_motion_z]."
+msgstr ""
+
+#: doc/classes/KinematicBody2D.xml:4
+msgid "Kinematic body 2D node."
+msgstr ""
+
+#: doc/classes/KinematicBody2D.xml:7
+msgid ""
+"Kinematic bodies are special types of bodies that are meant to be user-"
+"controlled. They are not affected by physics at all; to other types of "
+"bodies, such as a character or a rigid body, these are the same as a static "
+"body. However, they have two main uses:\n"
+"[b]Simulated motion:[/b] When these bodies are moved manually, either from "
+"code or from an [AnimationPlayer] (with [member AnimationPlayer."
+"playback_process_mode] set to \"physics\"), the physics will automatically "
+"compute an estimate of their linear and angular velocity. This makes them "
+"very useful for moving platforms or other AnimationPlayer-controlled objects "
+"(like a door, a bridge that opens, etc).\n"
+"[b]Kinematic characters:[/b] KinematicBody2D also has an API for moving "
+"objects (the [method move_and_collide] and [method move_and_slide] methods) "
+"while performing collision tests. This makes them really useful to implement "
+"characters that collide against a world, but don't require advanced physics."
+msgstr ""
+
+#: doc/classes/KinematicBody2D.xml:13
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/physics/"
+"using_kinematic_body_2d.html"
+msgstr ""
+
+#: doc/classes/KinematicBody2D.xml:22
+msgid ""
+"Returns the floor's collision angle at the last collision point according to "
+"[code]up_direction[/code], which is [code]Vector2.UP[/code] by default. This "
+"value is always positive and only valid after calling [method "
+"move_and_slide] and when [method is_on_floor] returns [code]true[/code]."
+msgstr ""
+
+#: doc/classes/KinematicBody2D.xml:40
+msgid ""
+"Returns a [KinematicCollision2D], which contains information about the "
+"latest collision that occurred during the last call to [method "
+"move_and_slide]."
+msgstr ""
+
+#: doc/classes/KinematicBody2D.xml:47
+msgid ""
+"Returns a [KinematicCollision2D], which contains information about a "
+"collision that occurred during the last call to [method move_and_slide] or "
+"[method move_and_slide_with_snap]. Since the body can collide several times "
+"in a single call to [method move_and_slide], you must specify the index of "
+"the collision in the range 0 to ([method get_slide_count] - 1).\n"
+"[b]Example usage:[/b]\n"
+"[codeblock]\n"
+"for i in get_slide_count():\n"
+" var collision = get_slide_collision(i)\n"
+" print(\"Collided with: \", collision.collider.name)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/KinematicBody2D.xml:87
+msgid ""
+"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
+"it collides. Returns a [KinematicCollision2D], which contains information "
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
+"If [code]test_only[/code] is [code]true[/code], the body does not move but "
+"the would-be collision information is given."
+msgstr ""
+
+#: doc/classes/KinematicBody2D.xml:100
+msgid ""
+"Moves the body along a vector. If the body collides with another, it will "
+"slide along the other body rather than stop immediately. If the other body "
+"is a [KinematicBody2D] or [RigidBody2D], it will also be affected by the "
+"motion of the other body. You can use this to make moving and rotating "
+"platforms, or to make nodes push other nodes.\n"
+"This method should be used in [method Node._physics_process] (or in a method "
+"called by [method Node._physics_process]), as it uses the physics step's "
+"[code]delta[/code] value automatically in calculations. Otherwise, the "
+"simulation will run at an incorrect speed.\n"
+"[code]linear_velocity[/code] is the velocity vector in pixels per second. "
+"Unlike in [method move_and_collide], you should [i]not[/i] multiply it by "
+"[code]delta[/code] — the physics engine handles applying the velocity.\n"
+"[code]up_direction[/code] is the up direction, used to determine what is a "
+"wall and what is a floor or a ceiling. If set to the default value of "
+"[code]Vector2(0, 0)[/code], everything is considered a wall. This is useful "
+"for topdown games.\n"
+"If [code]stop_on_slope[/code] is [code]true[/code], body will not slide on "
+"slopes when you include gravity in [code]linear_velocity[/code] and the body "
+"is standing still.\n"
+"If the body collides, it will change direction a maximum of "
+"[code]max_slides[/code] times before it stops.\n"
+"[code]floor_max_angle[/code] is the maximum angle (in radians) where a slope "
+"is still considered a floor (or a ceiling), rather than a wall. The default "
+"value equals 45 degrees.\n"
+"If [code]infinite_inertia[/code] is [code]true[/code], body will be able to "
+"push [RigidBody2D] nodes, but it won't also detect any collisions with them. "
+"If [code]false[/code], it will interact with [RigidBody2D] nodes like with "
+"[StaticBody2D].\n"
+"Returns the [code]linear_velocity[/code] vector, rotated and/or scaled if a "
+"slide collision occurred. To get detailed information about collisions that "
+"occurred, use [method get_slide_collision].\n"
+"When the body touches a moving platform, the platform's velocity is "
+"automatically added to the body motion. If a collision occurs due to the "
+"platform's motion, it will always be first in the slide collisions."
+msgstr ""
+
+#: doc/classes/KinematicBody2D.xml:122
+msgid ""
+"Moves the body while keeping it attached to slopes. Similar to [method "
+"move_and_slide].\n"
+"As long as the [code]snap[/code] vector is in contact with the ground, the "
+"body will remain attached to the surface. This means you must disable snap "
+"in order to jump, for example. You can do this by setting [code]snap[/code] "
+"to [code](0, 0)[/code] or by using [method move_and_slide] instead."
+msgstr ""
+
+#: doc/classes/KinematicBody2D.xml:132
+msgid ""
+"Checks for collisions without moving the body. Virtually sets the node's "
+"position, scale and rotation to that of the given [Transform2D], then tries "
+"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
+msgstr ""
+
+#: doc/classes/KinematicCollision.xml:4
+msgid "Collision data for [KinematicBody] collisions."
+msgstr ""
+
+#: doc/classes/KinematicCollision.xml:7
+msgid ""
+"Contains collision data for [KinematicBody] collisions. When a "
+"[KinematicBody] is moved using [method KinematicBody.move_and_collide], it "
+"stops if it detects a collision with another body. If a collision is "
+"detected, a KinematicCollision object is returned.\n"
+"This object contains information about the collision, including the "
+"colliding object, the remaining motion, and the collision position. This "
+"information can be used to calculate a collision response."
+msgstr ""
+
+#: doc/classes/KinematicCollision.xml:17
+msgid ""
+"The collision angle according to [code]up_direction[/code], which is "
+"[code]Vector3.UP[/code] by default. This value is always positive."
+msgstr ""
+
+#: doc/classes/KinematicCollision.xml:23
+#: doc/classes/KinematicCollision2D.xml:23
+msgid "The colliding body."
+msgstr ""
+
+#: doc/classes/KinematicCollision.xml:26
+#: doc/classes/KinematicCollision2D.xml:26
+msgid ""
+"The colliding body's unique instance ID. See [method Object.get_instance_id]."
+msgstr ""
+
+#: doc/classes/KinematicCollision.xml:29
+#: doc/classes/KinematicCollision2D.xml:29
+msgid "The colliding body's metadata. See [Object]."
+msgstr ""
+
+#: doc/classes/KinematicCollision.xml:32
+msgid "The colliding body's [RID] used by the [PhysicsServer]."
+msgstr ""
+
+#: doc/classes/KinematicCollision.xml:35
+#: doc/classes/KinematicCollision2D.xml:35
+msgid "The colliding body's shape."
+msgstr ""
+
+#: doc/classes/KinematicCollision.xml:38
+msgid "The colliding shape's index. See [CollisionObject]."
+msgstr ""
+
+#: doc/classes/KinematicCollision.xml:41
+#: doc/classes/KinematicCollision2D.xml:41
+msgid "The colliding object's velocity."
+msgstr ""
+
+#: doc/classes/KinematicCollision.xml:44
+#: doc/classes/KinematicCollision2D.xml:44
+msgid "The moving object's colliding shape."
+msgstr ""
+
+#: doc/classes/KinematicCollision.xml:47
+#: doc/classes/KinematicCollision2D.xml:47
+msgid "The colliding body's shape's normal at the point of collision."
+msgstr ""
+
+#: doc/classes/KinematicCollision.xml:50
+#: doc/classes/KinematicCollision2D.xml:50
+msgid "The point of collision, in global coordinates."
+msgstr ""
+
+#: doc/classes/KinematicCollision.xml:53
+#: doc/classes/KinematicCollision2D.xml:53
+msgid "The moving object's remaining movement vector."
+msgstr ""
+
+#: doc/classes/KinematicCollision.xml:56
+#: doc/classes/KinematicCollision2D.xml:56
+msgid "The distance the moving object traveled before collision."
+msgstr ""
+
+#: doc/classes/KinematicCollision2D.xml:4
+msgid "Collision data for [KinematicBody2D] collisions."
+msgstr ""
+
+#: doc/classes/KinematicCollision2D.xml:7
+msgid ""
+"Contains collision data for [KinematicBody2D] collisions. When a "
+"[KinematicBody2D] is moved using [method KinematicBody2D.move_and_collide], "
+"it stops if it detects a collision with another body. If a collision is "
+"detected, a KinematicCollision2D object is returned.\n"
+"This object contains information about the collision, including the "
+"colliding object, the remaining motion, and the collision position. This "
+"information can be used to calculate a collision response."
+msgstr ""
+
+#: doc/classes/KinematicCollision2D.xml:17
+msgid ""
+"The collision angle according to [code]up_direction[/code], which is "
+"[code]Vector2.UP[/code] by default. This value is always positive."
+msgstr ""
+
+#: doc/classes/KinematicCollision2D.xml:32
+msgid "The colliding body's [RID] used by the [Physics2DServer]."
+msgstr ""
+
+#: doc/classes/KinematicCollision2D.xml:38
+msgid "The colliding shape's index. See [CollisionObject2D]."
+msgstr ""
+
+#: doc/classes/Label.xml:4
+msgid ""
+"Displays plain text in a line or wrapped inside a rectangle. For formatted "
+"text, use [RichTextLabel]."
+msgstr ""
+
+#: doc/classes/Label.xml:7
+msgid ""
+"Label displays plain text on the screen. It gives you control over the "
+"horizontal and vertical alignment and can wrap the text inside the node's "
+"bounding rectangle. It doesn't support bold, italics, or other formatting. "
+"For that, use [RichTextLabel] instead.\n"
+"[b]Note:[/b] Contrarily to most other [Control]s, Label's [member Control."
+"mouse_filter] defaults to [constant Control.MOUSE_FILTER_IGNORE] (i.e. it "
+"doesn't react to mouse input events). This implies that a label won't "
+"display any configured [member Control.hint_tooltip], unless you change its "
+"mouse filter.\n"
+"[b]Note:[/b] Unicode characters after [code]0xffff[/code] (such as most "
+"emoji) are [i]not[/i] supported on Windows. They will display as unknown "
+"characters instead. This will be resolved in Godot 4.0."
+msgstr ""
+
+#: doc/classes/Label.xml:18
+msgid "Returns the amount of lines of text the Label has."
+msgstr ""
+
+#: doc/classes/Label.xml:24
+msgid "Returns the font size in pixels."
+msgstr ""
+
+#: doc/classes/Label.xml:30
+msgid ""
+"Returns the total number of printable characters in the text (excluding "
+"spaces and newlines)."
+msgstr ""
+
+#: doc/classes/Label.xml:36
+msgid ""
+"Returns the number of lines shown. Useful if the [Label]'s height cannot "
+"currently display all lines."
+msgstr ""
+
+#: doc/classes/Label.xml:42
+msgid ""
+"Controls the text's horizontal align. Supports left, center, right, and "
+"fill, or justify. Set it to one of the [enum Align] constants."
+msgstr ""
+
+#: doc/classes/Label.xml:45
+msgid ""
+"If [code]true[/code], wraps the text inside the node's bounding rectangle. "
+"If you resize the node, it will change its height automatically to show all "
+"the text."
+msgstr ""
+
+#: doc/classes/Label.xml:48
+msgid ""
+"If [code]true[/code], the Label only shows the text that fits inside its "
+"bounding rectangle and will clip text horizontally."
+msgstr ""
+
+#: doc/classes/Label.xml:51
+msgid ""
+"The node ignores the first [code]lines_skipped[/code] lines before it starts "
+"to display text."
+msgstr ""
+
+#: doc/classes/Label.xml:54
+msgid "Limits the lines of text the node shows on screen."
+msgstr ""
+
+#: doc/classes/Label.xml:58
+msgid ""
+"Limits the amount of visible characters. If you set [code]percent_visible[/"
+"code] to 0.5, only up to half of the text's characters will display on "
+"screen. Useful to animate the text in a dialog box."
+msgstr ""
+
+#: doc/classes/Label.xml:62
+msgid "The text to display on screen."
+msgstr ""
+
+#: doc/classes/Label.xml:65
+msgid "If [code]true[/code], all the text displays as UPPERCASE."
+msgstr ""
+
+#: doc/classes/Label.xml:68
+msgid ""
+"Controls the text's vertical align. Supports top, center, bottom, and fill. "
+"Set it to one of the [enum VAlign] constants."
+msgstr ""
+
+#: doc/classes/Label.xml:71
+msgid "Restricts the number of characters to display. Set to -1 to disable."
+msgstr ""
+
+#: doc/classes/Label.xml:76
+msgid "Align rows to the left (default)."
+msgstr ""
+
+#: doc/classes/Label.xml:79
+msgid "Align rows centered."
+msgstr ""
+
+#: doc/classes/Label.xml:82
+msgid "Align rows to the right."
+msgstr ""
+
+#: doc/classes/Label.xml:85
+msgid "Expand row whitespaces to fit the width."
+msgstr ""
+
+#: doc/classes/Label.xml:88
+msgid "Align the whole text to the top."
+msgstr ""
+
+#: doc/classes/Label.xml:91
+msgid "Align the whole text to the center."
+msgstr ""
+
+#: doc/classes/Label.xml:94
+msgid "Align the whole text to the bottom."
+msgstr ""
+
+#: doc/classes/Label.xml:97
+msgid "Align the whole text by spreading the rows."
+msgstr ""
+
+#: doc/classes/Label.xml:102
+msgid "[Font] used for the [Label]'s text."
+msgstr ""
+
+#: doc/classes/Label.xml:105
+msgid "Default text [Color] of the [Label]."
+msgstr ""
+
+#: doc/classes/Label.xml:108
+msgid "[Color] of the text's shadow effect."
+msgstr ""
+
+#: doc/classes/Label.xml:111
+msgid "The tint of [Font]'s outline. See [member DynamicFont.outline_color]."
+msgstr ""
+
+#: doc/classes/Label.xml:114
+msgid "Vertical space between lines in multiline [Label]."
+msgstr ""
+
+#: doc/classes/Label.xml:117
+msgid "Background [StyleBox] for the [Label]."
+msgstr ""
+
+#: doc/classes/Label.xml:120
+msgid ""
+"Boolean value. If set to 1 ([code]true[/code]), the shadow will be displayed "
+"around the whole text as an outline."
+msgstr ""
+
+#: doc/classes/Label.xml:123
+msgid "The horizontal offset of the text's shadow."
+msgstr ""
+
+#: doc/classes/Label.xml:126
+msgid "The vertical offset of the text's shadow."
+msgstr ""
+
+#: doc/classes/LargeTexture.xml:4
+msgid ""
+"[i]Deprecated.[/i] A [Texture] capable of storing many smaller textures with "
+"offsets."
+msgstr ""
+
+#: doc/classes/LargeTexture.xml:7
+msgid ""
+"[i]Deprecated (will be removed in Godot 4.0).[/i] A [Texture] capable of "
+"storing many smaller textures with offsets.\n"
+"You can dynamically add pieces ([Texture]s) to this [LargeTexture] using "
+"different offsets."
+msgstr ""
+
+#: doc/classes/LargeTexture.xml:18
+msgid ""
+"Adds [code]texture[/code] to this [LargeTexture], starting on offset "
+"[code]ofs[/code]."
+msgstr ""
+
+#: doc/classes/LargeTexture.xml:24
+msgid "Clears the [LargeTexture]."
+msgstr ""
+
+#: doc/classes/LargeTexture.xml:30
+msgid "Returns the number of pieces currently in this [LargeTexture]."
+msgstr ""
+
+#: doc/classes/LargeTexture.xml:37
+msgid "Returns the offset of the piece with the index [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/LargeTexture.xml:44
+msgid "Returns the [Texture] of the piece with the index [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/LargeTexture.xml:52
+msgid ""
+"Sets the offset of the piece with the index [code]idx[/code] to [code]ofs[/"
+"code]."
+msgstr ""
+
+#: doc/classes/LargeTexture.xml:60
+msgid ""
+"Sets the [Texture] of the piece with index [code]idx[/code] to "
+"[code]texture[/code]."
+msgstr ""
+
+#: doc/classes/LargeTexture.xml:67
+msgid "Sets the size of this [LargeTexture]."
+msgstr ""
+
+#: doc/classes/Light.xml:4
+msgid "Provides a base class for different kinds of light nodes."
+msgstr ""
+
+#: doc/classes/Light.xml:7
+msgid ""
+"Light is the [i]abstract[/i] base class for light nodes. As it can't be "
+"instanced, it shouldn't be used directly. Other types of light nodes inherit "
+"from it. Light contains the common variables and parameters used for "
+"lighting."
+msgstr ""
+
+#: doc/classes/Light.xml:18
+msgid "Returns the value of the specified [enum Light.Param] parameter."
+msgstr ""
+
+#: doc/classes/Light.xml:26
+msgid "Sets the value of the specified [enum Light.Param] parameter."
+msgstr ""
+
+#: doc/classes/Light.xml:32
+msgid ""
+"If [code]true[/code], the light only appears in the editor and will not be "
+"visible at runtime."
+msgstr ""
+
+#: doc/classes/Light.xml:35
+msgid "The light's bake mode. See [enum BakeMode]."
+msgstr ""
+
+#: doc/classes/Light.xml:38
+msgid ""
+"The light's color. An [i]overbright[/i] color can be used to achieve a "
+"result equivalent to increasing the light's [member light_energy]."
+msgstr ""
+
+#: doc/classes/Light.xml:41
+msgid "The light will affect objects in the selected layers."
+msgstr ""
+
+#: doc/classes/Light.xml:44
+msgid ""
+"The light's strength multiplier (this is not a physical unit). For "
+"[OmniLight] and [SpotLight], changing this value will only change the light "
+"color's intensity, not the light's radius."
+msgstr ""
+
+#: doc/classes/Light.xml:47
+msgid ""
+"Secondary multiplier used with indirect light (light bounces). This works on "
+"both [BakedLightmap] and [GIProbe]."
+msgstr ""
+
+#: doc/classes/Light.xml:50
+msgid ""
+"If [code]true[/code], the light's effect is reversed, darkening areas and "
+"casting bright shadows."
+msgstr ""
+
+#: doc/classes/Light.xml:53
+msgid ""
+"The size of the light in Godot units. Only considered in baked lightmaps and "
+"only if [member light_bake_mode] is set to [constant BAKE_ALL]. Increasing "
+"this value will make the shadows appear blurrier. This can be used to "
+"simulate area lights to an extent."
+msgstr ""
+
+#: doc/classes/Light.xml:56
+msgid ""
+"The intensity of the specular blob in objects affected by the light. At "
+"[code]0[/code], the light becomes a pure diffuse light. When not baking "
+"emission, this can be used to avoid unrealistic reflections when placing "
+"lights above an emissive surface."
+msgstr ""
+
+#: doc/classes/Light.xml:59
+msgid ""
+"Used to adjust shadow appearance. Too small a value results in self-"
+"shadowing (\"shadow acne\"), while too large a value causes shadows to "
+"separate from casters (\"peter-panning\"). Adjust as needed."
+msgstr ""
+
+#: doc/classes/Light.xml:62
+msgid "The color of shadows cast by this light."
+msgstr ""
+
+#: doc/classes/Light.xml:65
+msgid "Attempts to reduce [member shadow_bias] gap."
+msgstr ""
+
+#: doc/classes/Light.xml:68
+msgid "If [code]true[/code], the light will cast shadows."
+msgstr ""
+
+#: doc/classes/Light.xml:71
+msgid ""
+"If [code]true[/code], reverses the backface culling of the mesh. This can be "
+"useful when you have a flat mesh that has a light behind it. If you need to "
+"cast a shadow on both sides of the mesh, set the mesh to use double-sided "
+"shadows with [constant GeometryInstance.SHADOW_CASTING_SETTING_DOUBLE_SIDED]."
+msgstr ""
+
+#: doc/classes/Light.xml:76
+msgid "Constant for accessing [member light_energy]."
+msgstr ""
+
+#: doc/classes/Light.xml:79
+msgid "Constant for accessing [member light_indirect_energy]."
+msgstr ""
+
+#: doc/classes/Light.xml:82
+msgid "Constant for accessing [member light_size]."
+msgstr ""
+
+#: doc/classes/Light.xml:85
+msgid "Constant for accessing [member light_specular]."
+msgstr ""
+
+#: doc/classes/Light.xml:88
+msgid ""
+"Constant for accessing [member OmniLight.omni_range] or [member SpotLight."
+"spot_range]."
+msgstr ""
+
+#: doc/classes/Light.xml:91
+msgid ""
+"Constant for accessing [member OmniLight.omni_attenuation] or [member "
+"SpotLight.spot_attenuation]."
+msgstr ""
+
+#: doc/classes/Light.xml:94
+msgid "Constant for accessing [member SpotLight.spot_angle]."
+msgstr ""
+
+#: doc/classes/Light.xml:97
+msgid "Constant for accessing [member SpotLight.spot_angle_attenuation]."
+msgstr ""
+
+#: doc/classes/Light.xml:100
+msgid "Constant for accessing [member shadow_contact]."
+msgstr ""
+
+#: doc/classes/Light.xml:103
+msgid ""
+"Constant for accessing [member DirectionalLight."
+"directional_shadow_max_distance]."
+msgstr ""
+
+#: doc/classes/Light.xml:106
+msgid ""
+"Constant for accessing [member DirectionalLight.directional_shadow_split_1]."
+msgstr ""
+
+#: doc/classes/Light.xml:109
+msgid ""
+"Constant for accessing [member DirectionalLight.directional_shadow_split_2]."
+msgstr ""
+
+#: doc/classes/Light.xml:112
+msgid ""
+"Constant for accessing [member DirectionalLight.directional_shadow_split_3]."
+msgstr ""
+
+#: doc/classes/Light.xml:115
+msgid ""
+"Constant for accessing [member DirectionalLight."
+"directional_shadow_normal_bias]."
+msgstr ""
+
+#: doc/classes/Light.xml:118
+msgid "Constant for accessing [member shadow_bias]."
+msgstr ""
+
+#: doc/classes/Light.xml:121
+msgid ""
+"Constant for accessing [member DirectionalLight."
+"directional_shadow_bias_split_scale]."
+msgstr ""
+
+#: doc/classes/Light.xml:127
+msgid ""
+"Light is ignored when baking.\n"
+"[b]Note:[/b] Hiding a light does [i]not[/i] affect baking."
+msgstr ""
+
+#: doc/classes/Light.xml:131
+msgid "Only indirect lighting will be baked (default)."
+msgstr ""
+
+#: doc/classes/Light.xml:134
+msgid ""
+"Both direct and indirect light will be baked.\n"
+"[b]Note:[/b] You should hide the light if you don't want it to appear twice "
+"(dynamic and baked)."
+msgstr ""
+
+#: doc/classes/Light2D.xml:4
+msgid "Casts light in a 2D environment."
+msgstr ""
+
+#: doc/classes/Light2D.xml:7
+msgid ""
+"Casts light in a 2D environment. Light is defined by a (usually grayscale) "
+"texture, a color, an energy value, a mode (see constants), and various other "
+"parameters (range and shadows-related).\n"
+"[b]Note:[/b] Light2D can also be used as a mask."
+msgstr ""
+
+#: doc/classes/Light2D.xml:11 doc/classes/LightOccluder2D.xml:10
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/2d/2d_lights_and_shadows.html"
+msgstr ""
+
+#: doc/classes/Light2D.xml:17
+msgid "The Light2D's [Color]."
+msgstr ""
+
+#: doc/classes/Light2D.xml:20
+msgid "If [code]true[/code], Light2D will only appear when editing the scene."
+msgstr ""
+
+#: doc/classes/Light2D.xml:23
+msgid "If [code]true[/code], Light2D will emit light."
+msgstr ""
+
+#: doc/classes/Light2D.xml:26
+msgid ""
+"The Light2D's energy value. The larger the value, the stronger the light."
+msgstr ""
+
+#: doc/classes/Light2D.xml:29
+msgid "The Light2D's mode. See [enum Mode] constants for values."
+msgstr ""
+
+#: doc/classes/Light2D.xml:32
+msgid "The offset of the Light2D's [code]texture[/code]."
+msgstr ""
+
+#: doc/classes/Light2D.xml:35
+msgid "The height of the Light2D. Used with 2D normal mapping."
+msgstr ""
+
+#: doc/classes/Light2D.xml:38
+msgid ""
+"The layer mask. Only objects with a matching mask will be affected by the "
+"Light2D."
+msgstr ""
+
+#: doc/classes/Light2D.xml:41
+msgid "Maximum layer value of objects that are affected by the Light2D."
+msgstr ""
+
+#: doc/classes/Light2D.xml:44
+msgid "Minimum layer value of objects that are affected by the Light2D."
+msgstr ""
+
+#: doc/classes/Light2D.xml:47
+msgid ""
+"Maximum [code]z[/code] value of objects that are affected by the Light2D."
+msgstr ""
+
+#: doc/classes/Light2D.xml:50
+msgid ""
+"Minimum [code]z[/code] value of objects that are affected by the Light2D."
+msgstr ""
+
+#: doc/classes/Light2D.xml:53
+msgid "Shadow buffer size."
+msgstr ""
+
+#: doc/classes/Light2D.xml:56
+msgid "[Color] of shadows cast by the Light2D."
+msgstr ""
+
+#: doc/classes/Light2D.xml:59
+msgid "If [code]true[/code], the Light2D will cast shadows."
+msgstr ""
+
+#: doc/classes/Light2D.xml:62
+msgid "Shadow filter type. See [enum ShadowFilter] for possible values."
+msgstr ""
+
+#: doc/classes/Light2D.xml:65
+msgid "Smoothing value for shadows."
+msgstr ""
+
+#: doc/classes/Light2D.xml:68
+msgid "Smooth shadow gradient length."
+msgstr ""
+
+#: doc/classes/Light2D.xml:71
+msgid ""
+"The shadow mask. Used with [LightOccluder2D] to cast shadows. Only occluders "
+"with a matching light mask will cast shadows."
+msgstr ""
+
+#: doc/classes/Light2D.xml:74
+msgid "[Texture] used for the Light2D's appearance."
+msgstr ""
+
+#: doc/classes/Light2D.xml:77
+msgid "The [code]texture[/code]'s scale factor."
+msgstr ""
+
+#: doc/classes/Light2D.xml:82
+msgid ""
+"Adds the value of pixels corresponding to the Light2D to the values of "
+"pixels under it. This is the common behavior of a light."
+msgstr ""
+
+#: doc/classes/Light2D.xml:85
+msgid ""
+"Subtracts the value of pixels corresponding to the Light2D to the values of "
+"pixels under it, resulting in inversed light effect."
+msgstr ""
+
+#: doc/classes/Light2D.xml:88
+msgid ""
+"Mix the value of pixels corresponding to the Light2D to the values of pixels "
+"under it by linear interpolation."
+msgstr ""
+
+#: doc/classes/Light2D.xml:91
+msgid ""
+"The light texture of the Light2D is used as a mask, hiding or revealing "
+"parts of the screen underneath depending on the value of each pixel of the "
+"light (mask) texture."
+msgstr ""
+
+#: doc/classes/Light2D.xml:94
+msgid "No filter applies to the shadow map. See [member shadow_filter]."
+msgstr ""
+
+#: doc/classes/Light2D.xml:97
+msgid ""
+"Percentage closer filtering (3 samples) applies to the shadow map. See "
+"[member shadow_filter]."
+msgstr ""
+
+#: doc/classes/Light2D.xml:100
+msgid ""
+"Percentage closer filtering (5 samples) applies to the shadow map. See "
+"[member shadow_filter]."
+msgstr ""
+
+#: doc/classes/Light2D.xml:103
+msgid ""
+"Percentage closer filtering (7 samples) applies to the shadow map. See "
+"[member shadow_filter]."
+msgstr ""
+
+#: doc/classes/Light2D.xml:106
+msgid ""
+"Percentage closer filtering (9 samples) applies to the shadow map. See "
+"[member shadow_filter]."
+msgstr ""
+
+#: doc/classes/Light2D.xml:109
+msgid ""
+"Percentage closer filtering (13 samples) applies to the shadow map. See "
+"[member shadow_filter]."
+msgstr ""
+
+#: doc/classes/LightOccluder2D.xml:4
+msgid "Occludes light cast by a Light2D, casting shadows."
+msgstr ""
+
+#: doc/classes/LightOccluder2D.xml:7
+msgid ""
+"Occludes light cast by a Light2D, casting shadows. The LightOccluder2D must "
+"be provided with an [OccluderPolygon2D] in order for the shadow to be "
+"computed."
+msgstr ""
+
+#: doc/classes/LightOccluder2D.xml:16
+msgid ""
+"The LightOccluder2D's light mask. The LightOccluder2D will cast shadows only "
+"from Light2D(s) that have the same light mask(s)."
+msgstr ""
+
+#: doc/classes/LightOccluder2D.xml:19
+msgid "The [OccluderPolygon2D] used to compute the shadow."
+msgstr ""
+
+#: doc/classes/Line2D.xml:4
+msgid "A 2D line."
+msgstr ""
+
+#: doc/classes/Line2D.xml:7
+msgid ""
+"A line through several points in 2D space.\n"
+"[b]Note:[/b] By default, Godot can only draw up to 4,096 polygon points at a "
+"time. To increase this limit, open the Project Settings and increase [member "
+"ProjectSettings.rendering/limits/buffers/canvas_polygon_buffer_size_kb] and "
+"[member ProjectSettings.rendering/limits/buffers/"
+"canvas_polygon_index_buffer_size_kb]."
+msgstr ""
+
+#: doc/classes/Line2D.xml:20
+msgid ""
+"Adds a point at the [code]position[/code]. Appends the point at the end of "
+"the line.\n"
+"If [code]at_position[/code] is given, the point is inserted before the point "
+"number [code]at_position[/code], moving that point (and every point after) "
+"after the inserted point. If [code]at_position[/code] is not given, or is an "
+"illegal value ([code]at_position < 0[/code] or [code]at_position >= [method "
+"get_point_count][/code]), the point will be appended at the end of the point "
+"list."
+msgstr ""
+
+#: doc/classes/Line2D.xml:27
+msgid "Removes all points from the line."
+msgstr ""
+
+#: doc/classes/Line2D.xml:33
+msgid "Returns the Line2D's amount of points."
+msgstr ""
+
+#: doc/classes/Line2D.xml:40
+msgid "Returns point [code]i[/code]'s position."
+msgstr ""
+
+#: doc/classes/Line2D.xml:47
+msgid "Removes the point at index [code]i[/code] from the line."
+msgstr ""
+
+#: doc/classes/Line2D.xml:55
+msgid ""
+"Overwrites the position in point [code]i[/code] with the supplied "
+"[code]position[/code]."
+msgstr ""
+
+#: doc/classes/Line2D.xml:61
+msgid ""
+"If [code]true[/code], the line's border will be anti-aliased.\n"
+"[b]Note:[/b] Line2D is not accelerated by batching when being anti-aliased."
+msgstr ""
+
+#: doc/classes/Line2D.xml:65
+msgid ""
+"Controls the style of the line's first point. Use [enum LineCapMode] "
+"constants."
+msgstr ""
+
+#: doc/classes/Line2D.xml:68
+msgid "The line's color. Will not be used if a gradient is set."
+msgstr ""
+
+#: doc/classes/Line2D.xml:71
+msgid ""
+"Controls the style of the line's last point. Use [enum LineCapMode] "
+"constants."
+msgstr ""
+
+#: doc/classes/Line2D.xml:74
+msgid ""
+"The gradient is drawn through the whole line from start to finish. The "
+"default color will not be used if a gradient is set."
+msgstr ""
+
+#: doc/classes/Line2D.xml:77
+msgid "The style for the points between the start and the end."
+msgstr ""
+
+#: doc/classes/Line2D.xml:80
+msgid ""
+"The points that form the lines. The line is drawn between every point set in "
+"this array. Points are interpreted as local vectors."
+msgstr ""
+
+#: doc/classes/Line2D.xml:83
+msgid ""
+"The smoothness of the rounded joints and caps. This is only used if a cap or "
+"joint is set as round."
+msgstr ""
+
+#: doc/classes/Line2D.xml:86
+msgid ""
+"The direction difference in radians between vector points. This value is "
+"only used if [code]joint mode[/code] is set to [constant LINE_JOINT_SHARP]."
+msgstr ""
+
+#: doc/classes/Line2D.xml:89
+msgid ""
+"The texture used for the line's texture. Uses [code]texture_mode[/code] for "
+"drawing style."
+msgstr ""
+
+#: doc/classes/Line2D.xml:92
+msgid ""
+"The style to render the [code]texture[/code] on the line. Use [enum "
+"LineTextureMode] constants."
+msgstr ""
+
+#: doc/classes/Line2D.xml:95
+msgid "The line's width."
+msgstr ""
+
+#: doc/classes/Line2D.xml:98
+msgid ""
+"The line's width varies with the curve. The original width is simply "
+"multiply by the value of the Curve."
+msgstr ""
+
+#: doc/classes/Line2D.xml:103
+msgid ""
+"The line's joints will be pointy. If [code]sharp_limit[/code] is greater "
+"than the rotation of a joint, it becomes a bevel joint instead."
+msgstr ""
+
+#: doc/classes/Line2D.xml:106
+msgid "The line's joints will be bevelled/chamfered."
+msgstr ""
+
+#: doc/classes/Line2D.xml:109
+msgid "The line's joints will be rounded."
+msgstr ""
+
+#: doc/classes/Line2D.xml:112
+msgid "Don't draw a line cap."
+msgstr ""
+
+#: doc/classes/Line2D.xml:115
+msgid "Draws the line cap as a box."
+msgstr ""
+
+#: doc/classes/Line2D.xml:118
+msgid "Draws the line cap as a circle."
+msgstr ""
+
+#: doc/classes/Line2D.xml:121
+msgid ""
+"Takes the left pixels of the texture and renders it over the whole line."
+msgstr ""
+
+#: doc/classes/Line2D.xml:124
+msgid ""
+"Tiles the texture over the line. The texture must be imported with "
+"[b]Repeat[/b] enabled for it to work properly."
+msgstr ""
+
+#: doc/classes/Line2D.xml:127
+msgid ""
+"Stretches the texture across the line. Import the texture with [b]Repeat[/b] "
+"disabled for best results."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:4
+msgid "Control that provides single-line string editing."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:7
+msgid ""
+"LineEdit provides a single-line string editor, used for text fields.\n"
+"It features many built-in shortcuts which will always be available "
+"([code]Ctrl[/code] here maps to [code]Command[/code] on macOS):\n"
+"- Ctrl + C: Copy\n"
+"- Ctrl + X: Cut\n"
+"- Ctrl + V or Ctrl + Y: Paste/\"yank\"\n"
+"- Ctrl + Z: Undo\n"
+"- Ctrl + Shift + Z: Redo\n"
+"- Ctrl + U: Delete text from the cursor position to the beginning of the "
+"line\n"
+"- Ctrl + K: Delete text from the cursor position to the end of the line\n"
+"- Ctrl + A: Select all text\n"
+"- Up/Down arrow: Move the cursor to the beginning/end of the line\n"
+"On macOS, some extra keyboard shortcuts are available:\n"
+"- Ctrl + F: Like the right arrow key, move the cursor one character right\n"
+"- Ctrl + B: Like the left arrow key, move the cursor one character left\n"
+"- Ctrl + P: Like the up arrow key, move the cursor to the previous line\n"
+"- Ctrl + N: Like the down arrow key, move the cursor to the next line\n"
+"- Ctrl + D: Like the Delete key, delete the character on the right side of "
+"cursor\n"
+"- Ctrl + H: Like the Backspace key, delete the character on the left side of "
+"the cursor\n"
+"- Command + Left arrow: Like the Home key, move the cursor to the beginning "
+"of the line\n"
+"- Command + Right arrow: Like the End key, move the cursor to the end of the "
+"line"
+msgstr ""
+
+#: doc/classes/LineEdit.xml:35
+msgid ""
+"Adds [code]text[/code] after the cursor. If the resulting value is longer "
+"than [member max_length], nothing happens."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:41
+msgid "Erases the [LineEdit]'s [member text]."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:47
+msgid ""
+"Deletes one character at the cursor's current position (equivalent to "
+"pressing the [code]Delete[/code] key)."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:55
+msgid ""
+"Deletes a section of the [member text] going from position "
+"[code]from_column[/code] to [code]to_column[/code]. Both parameters should "
+"be within the text's length."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:61
+msgid "Clears the current selection."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:67
+msgid ""
+"Returns the [PopupMenu] of this [LineEdit]. By default, this menu is "
+"displayed when right-clicking on the [LineEdit].\n"
+"[b]Warning:[/b] This is a required internal node, removing and freeing it "
+"may cause a crash. If you wish to hide it or any of its children, use their "
+"[member CanvasItem.visible] property."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:74
+msgid ""
+"Returns the scroll offset due to [member caret_position], as a number of "
+"characters."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:81
+msgid "Executes a given action as defined in the [enum MenuItems] enum."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:89
+msgid ""
+"Selects characters inside [LineEdit] between [code]from[/code] and [code]to[/"
+"code]. By default, [code]from[/code] is at the beginning and [code]to[/code] "
+"at the end.\n"
+"[codeblock]\n"
+"text = \"Welcome\"\n"
+"select() # Will select \"Welcome\".\n"
+"select(4) # Will select \"ome\".\n"
+"select(2, 5) # Will select \"lco\".\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/LineEdit.xml:101
+msgid "Selects the whole [String]."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:107
+msgid "Text alignment as defined in the [enum Align] enum."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:110 doc/classes/TextEdit.xml:391
+msgid "If [code]true[/code], the caret (visual cursor) blinks."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:113 doc/classes/TextEdit.xml:394
+msgid "Duration (in seconds) of a caret's blinking cycle."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:116
+msgid ""
+"The cursor's position inside the [LineEdit]. When set, the text may scroll "
+"to accommodate it."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:119
+msgid ""
+"If [code]true[/code], the [LineEdit] will show a clear button if [code]text[/"
+"code] is not empty, which can be used to clear the text quickly."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:122
+msgid "If [code]true[/code], the context menu will appear when right-clicked."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:125
+msgid ""
+"If [code]false[/code], existing text cannot be modified and new text cannot "
+"be added."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:128
+msgid ""
+"If [code]true[/code], the [LineEdit] width will increase to stay longer than "
+"the [member text]. It will [b]not[/b] compress if the [member text] is "
+"shortened."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:132
+msgid ""
+"Maximum amount of characters that can be entered inside the [LineEdit]. If "
+"[code]0[/code], there is no limit.\n"
+"When a limit is defined, characters that would exceed [member max_length] "
+"are truncated. This happens both for existing [member text] contents when "
+"setting the max length, or for new text inserted in the [LineEdit], "
+"including pasting. If any input text is truncated, the [signal "
+"text_change_rejected] signal is emitted with the truncated substring as "
+"parameter.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"text = \"Hello world\"\n"
+"max_length = 5\n"
+"# `text` becomes \"Hello\".\n"
+"max_length = 10\n"
+"text += \" goodbye\"\n"
+"# `text` becomes \"Hello good\".\n"
+"# `text_change_rejected` is emitted with \"bye\" as parameter.\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/LineEdit.xml:147
+msgid ""
+"Opacity of the [member placeholder_text]. From [code]0[/code] to [code]1[/"
+"code]."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:150
+msgid ""
+"Text shown when the [LineEdit] is empty. It is [b]not[/b] the [LineEdit]'s "
+"default value (see [member text])."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:153
+msgid ""
+"Sets the icon that will appear in the right end of the [LineEdit] if there's "
+"no [member text], or always, if [member clear_button_enabled] is set to "
+"[code]false[/code]."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:156
+msgid ""
+"If [code]true[/code], every character is replaced with the secret character "
+"(see [member secret_character])."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:159
+msgid ""
+"The character to use to mask secret input (defaults to \"*\"). Only a single "
+"character can be used as the secret character."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:162
+msgid ""
+"If [code]false[/code], it's impossible to select the text using mouse nor "
+"keyboard."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:165
+msgid "If [code]false[/code], using shortcuts will be disabled."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:168
+msgid ""
+"String value of the [LineEdit].\n"
+"[b]Note:[/b] Changing text using this property won't emit the [signal "
+"text_changed] signal."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:172 doc/classes/TextEdit.xml:468
+msgid ""
+"If [code]true[/code], the native virtual keyboard is shown when focused on "
+"platforms that support it."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:179
+msgid ""
+"Emitted when appending text that overflows the [member max_length]. The "
+"appended text is truncated to fit [member max_length], and the part that "
+"couldn't fit is passed as the [code]rejected_substring[/code] argument."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:185 doc/classes/TextEdit.xml:506
+msgid "Emitted when the text changes."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:191
+msgid "Emitted when the user presses [constant KEY_ENTER] on the [LineEdit]."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:197
+msgid "Aligns the text on the left-hand side of the [LineEdit]."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:200
+msgid "Centers the text in the middle of the [LineEdit]."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:203
+msgid "Aligns the text on the right-hand side of the [LineEdit]."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:206
+msgid "Stretches whitespaces to fit the [LineEdit]'s width."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:209 doc/classes/TextEdit.xml:527
+msgid "Cuts (copies and clears) the selected text."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:212 doc/classes/TextEdit.xml:530
+msgid "Copies the selected text."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:215
+msgid ""
+"Pastes the clipboard text over the selected text (or at the cursor's "
+"position).\n"
+"Non-printable escape characters are automatically stripped from the OS "
+"clipboard via [method String.strip_escapes]."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:219
+msgid "Erases the whole [LineEdit] text."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:222
+msgid "Selects the whole [LineEdit] text."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:225 doc/classes/TextEdit.xml:542
+msgid "Undoes the previous action."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:228
+msgid "Reverse the last undo action."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:231 doc/classes/TextEdit.xml:548
+msgid "Represents the size of the [enum MenuItems] enum."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:236
+msgid "Texture for the clear button. See [member clear_button_enabled]."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:239
+msgid "Color used as default tint for the clear button."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:242
+msgid "Color used for the clear button when it's pressed."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:245
+msgid "Color of the [LineEdit]'s visual cursor (caret)."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:248
+msgid "Background used when [LineEdit] has GUI focus."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:251
+msgid "Font used for the text."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:254
+msgid "Default font color."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:257
+msgid "Font color for selected text (inside the selection rectangle)."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:260
+msgid "Font color when editing is disabled."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:263
+msgid ""
+"Minimum horizontal space for the text (not counting the clear button and "
+"content margins). This value is measured in count of space characters (i.e. "
+"this amount of space characters can be displayed without scrolling)."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:266
+msgid "Default background for the [LineEdit]."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:269
+msgid ""
+"Background used when [LineEdit] is in read-only mode ([member editable] is "
+"set to [code]false[/code])."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:272
+msgid "Color of the selection rectangle."
+msgstr ""
+
+#: doc/classes/LineShape2D.xml:4
+msgid "Line shape for 2D collisions."
+msgstr ""
+
+#: doc/classes/LineShape2D.xml:7
+msgid ""
+"Line shape for 2D collisions. It works like a 2D plane and will not allow "
+"any physics body to go to the negative side. Not recommended for rigid "
+"bodies, and usually not recommended for static bodies either because it "
+"forces checks against it on every frame."
+msgstr ""
+
+#: doc/classes/LineShape2D.xml:15
+msgid "The line's distance from the origin."
+msgstr ""
+
+#: doc/classes/LineShape2D.xml:18
+msgid "The line's normal."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:4
+msgid "Simple button used to represent a link to some resource."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:7
+msgid ""
+"This kind of button is primarily used when the interaction with the button "
+"causes a context change (like linking to a web page).\n"
+"See also [BaseButton] which contains common properties and methods "
+"associated with this node."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:21
+msgid ""
+"Determines when to show the underline. See [enum UnderlineMode] for options."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:26
+msgid "The LinkButton will always show an underline at the bottom of its text."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:29
+msgid ""
+"The LinkButton will show an underline at the bottom of its text when the "
+"mouse cursor is over it."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:32
+msgid "The LinkButton will never show an underline at the bottom of its text."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:37
+msgid ""
+"[StyleBox] used when the [LinkButton] is focused. It is displayed over the "
+"current [StyleBox], so using [StyleBoxEmpty] will just disable the focus "
+"visual effect."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:40
+msgid "[Font] of the [LinkButton]'s text."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:43
+msgid "Default text [Color] of the [LinkButton]."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:46
+msgid ""
+"Text [Color] used when the [LinkButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:49
+msgid "Text [Color] used when the [LinkButton] is being hovered."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:52
+msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:55
+msgid "The vertical space between the baseline of text and the underline."
+msgstr ""
+
+#: doc/classes/Listener.xml:4 doc/classes/Listener2D.xml:4
+msgid "Overrides the location sounds are heard from."
+msgstr ""
+
+#: doc/classes/Listener.xml:7
+msgid ""
+"Once added to the scene tree and enabled using [method make_current], this "
+"node will override the location sounds are heard from. This can be used to "
+"listen from a location different from the [Camera]."
+msgstr ""
+
+#: doc/classes/Listener.xml:15
+msgid "Disables the listener to use the current camera's listener instead."
+msgstr ""
+
+#: doc/classes/Listener.xml:21
+msgid "Returns the listener's global orthonormalized [Transform]."
+msgstr ""
+
+#: doc/classes/Listener.xml:27
+msgid ""
+"Returns [code]true[/code] if the listener was made current using [method "
+"make_current], [code]false[/code] otherwise.\n"
+"[b]Note:[/b] There may be more than one Listener marked as \"current\" in "
+"the scene tree, but only the one that was made current last will be used."
+msgstr ""
+
+#: doc/classes/Listener.xml:34
+msgid "Enables the listener. This will override the current camera's listener."
+msgstr ""
+
+#: doc/classes/Listener2D.xml:7
+msgid ""
+"Once added to the scene tree and enabled using [method make_current], this "
+"node will override the location sounds are heard from. Only one [Listener2D] "
+"can be current. Using [method make_current] will disable the previous "
+"[Listener2D].\n"
+"If there is no active [Listener2D] in the current [Viewport], center of the "
+"screen will be used as a hearing point for the audio. [Listener2D] needs to "
+"be inside [SceneTree] to function."
+msgstr ""
+
+#: doc/classes/Listener2D.xml:16
+msgid ""
+"Disables the [Listener2D]. If it's not set as current, this method will have "
+"no effect."
+msgstr ""
+
+#: doc/classes/Listener2D.xml:22
+msgid "Returns [code]true[/code] if this [Listener2D] is currently active."
+msgstr ""
+
+#: doc/classes/Listener2D.xml:28
+msgid ""
+"Makes the [Listener2D] active, setting it as the hearing point for the "
+"sounds. If there is already another active [Listener2D], it will be "
+"disabled.\n"
+"This method will have no effect if the [Listener2D] is not added to "
+"[SceneTree]."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:4
+msgid "Abstract base class for the game's main loop."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:7
+msgid ""
+"[MainLoop] is the abstract base class for a Godot project's game loop. It is "
+"inherited by [SceneTree], which is the default game loop implementation used "
+"in Godot projects, though it is also possible to write and use one's own "
+"[MainLoop] subclass instead of the scene tree.\n"
+"Upon the application start, a [MainLoop] implementation must be provided to "
+"the OS; otherwise, the application will exit. This happens automatically "
+"(and a [SceneTree] is created) unless a main [Script] is provided from the "
+"command line (with e.g. [code]godot -s my_loop.gd[/code], which should then "
+"be a [MainLoop] implementation.\n"
+"Here is an example script implementing a simple [MainLoop]:\n"
+"[codeblock]\n"
+"extends MainLoop\n"
+"\n"
+"var time_elapsed = 0\n"
+"var keys_typed = []\n"
+"var quit = false\n"
+"\n"
+"func _initialize():\n"
+" print(\"Initialized:\")\n"
+" print(\" Starting time: %s\" % str(time_elapsed))\n"
+"\n"
+"func _idle(delta):\n"
+" time_elapsed += delta\n"
+" # Return true to end the main loop.\n"
+" return quit\n"
+"\n"
+"func _input_event(event):\n"
+" # Record keys.\n"
+" if event is InputEventKey and event.pressed and !event.echo:\n"
+" keys_typed.append(OS.get_scancode_string(event.scancode))\n"
+" # Quit on Escape press.\n"
+" if event.scancode == KEY_ESCAPE:\n"
+" quit = true\n"
+" # Quit on any mouse click.\n"
+" if event is InputEventMouseButton:\n"
+" quit = true\n"
+"\n"
+"func _finalize():\n"
+" print(\"Finalized:\")\n"
+" print(\" End time: %s\" % str(time_elapsed))\n"
+" print(\" Keys typed: %s\" % var2str(keys_typed))\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/MainLoop.xml:51
+msgid ""
+"Called when files are dragged from the OS file manager and dropped in the "
+"game window. The arguments are a list of file paths and the identifier of "
+"the screen where the drag originated."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:57
+msgid "Called before the program exits."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:65
+msgid ""
+"Called when the user performs an action in the system global menu (e.g. the "
+"Mac OS menu bar)."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:72
+msgid ""
+"Called each idle frame with the time since the last idle frame as argument "
+"(in seconds). Equivalent to [method Node._process].\n"
+"If implemented, the method must return a boolean value. [code]true[/code] "
+"ends the main loop, while [code]false[/code] lets it proceed to the next "
+"frame."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:79
+msgid "Called once during initialization."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:86
+msgid "Called whenever an [InputEvent] is received by the main loop."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:93
+msgid ""
+"Deprecated callback, does not do anything. Use [method _input_event] to "
+"parse text input. Will be removed in Godot 4.0."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:100
+msgid ""
+"Called each physics frame with the time since the last physics frame as "
+"argument ([code]delta[/code], in seconds). Equivalent to [method Node."
+"_physics_process].\n"
+"If implemented, the method must return a boolean value. [code]true[/code] "
+"ends the main loop, while [code]false[/code] lets it proceed to the next "
+"frame."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:107
+msgid ""
+"Should not be called manually, override [method _finalize] instead. Will be "
+"removed in Godot 4.0."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:114
+msgid ""
+"Should not be called manually, override [method _idle] instead. Will be "
+"removed in Godot 4.0."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:120
+msgid ""
+"Should not be called manually, override [method _initialize] instead. Will "
+"be removed in Godot 4.0."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:127
+msgid ""
+"Should not be called manually, override [method _input_event] instead. Will "
+"be removed in Godot 4.0."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:134
+msgid ""
+"Should not be called manually, override [method _input_text] instead. Will "
+"be removed in Godot 4.0."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:141
+msgid ""
+"Should not be called manually, override [method _iteration] instead. Will be "
+"removed in Godot 4.0."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:150
+msgid "Emitted when a user responds to a permission request."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:156 doc/classes/Node.xml:791
+msgid ""
+"Notification received from the OS when the mouse enters the game window.\n"
+"Implemented on desktop and web platforms."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:160 doc/classes/Node.xml:795
+msgid ""
+"Notification received from the OS when the mouse leaves the game window.\n"
+"Implemented on desktop and web platforms."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:164 doc/classes/Node.xml:799
+msgid ""
+"Notification received from the OS when the game window is focused.\n"
+"Implemented on all platforms."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:168 doc/classes/Node.xml:803
+msgid ""
+"Notification received from the OS when the game window is unfocused.\n"
+"Implemented on all platforms."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:172 doc/classes/Node.xml:807
+msgid ""
+"Notification received from the OS when a quit request is sent (e.g. closing "
+"the window with a \"Close\" button or Alt+F4).\n"
+"Implemented on desktop platforms."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:176 doc/classes/Node.xml:811
+msgid ""
+"Notification received from the OS when a go back request is sent (e.g. "
+"pressing the \"Back\" button on Android).\n"
+"Specific to the Android platform."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:180 doc/classes/Node.xml:815
+msgid ""
+"Notification received from the OS when an unfocus request is sent (e.g. "
+"another OS window wants to take the focus).\n"
+"No supported platforms currently send this notification."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:184 doc/classes/Node.xml:819
+msgid ""
+"Notification received from the OS when the application is exceeding its "
+"allocated memory.\n"
+"Specific to the iOS platform."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:188 doc/classes/Node.xml:823
+msgid ""
+"Notification received when translations may have changed. Can be triggered "
+"by the user changing the locale. Can be used to respond to language changes, "
+"for example to change the UI strings on the fly. Useful when working with "
+"the built-in translation support, like [method Object.tr]."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:191 doc/classes/Node.xml:826
+msgid ""
+"Notification received from the OS when a request for \"About\" information "
+"is sent.\n"
+"Specific to the macOS platform."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:195 doc/classes/Node.xml:830
+msgid ""
+"Notification received from Godot's crash handler when the engine is about to "
+"crash.\n"
+"Implemented on desktop platforms if the crash handler is enabled."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:199 doc/classes/Node.xml:834
+msgid ""
+"Notification received from the OS when an update of the Input Method Engine "
+"occurs (e.g. change of IME cursor position or composition string).\n"
+"Specific to the macOS platform."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:203 doc/classes/Node.xml:838
+msgid ""
+"Notification received from the OS when the app is resumed.\n"
+"Specific to the Android platform."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:207 doc/classes/Node.xml:842
+msgid ""
+"Notification received from the OS when the app is paused.\n"
+"Specific to the Android platform."
+msgstr ""
+
+#: doc/classes/MarginContainer.xml:4
+msgid "Simple margin container."
+msgstr ""
+
+#: doc/classes/MarginContainer.xml:7
+msgid ""
+"Adds a top, left, bottom, and right margin to all [Control] nodes that are "
+"direct children of the container. To control the [MarginContainer]'s margin, "
+"use the [code]margin_*[/code] theme properties listed below.\n"
+"[b]Note:[/b] Be careful, [Control] margin values are different than the "
+"constant margin values. If you want to change the custom margin values of "
+"the [MarginContainer] by code, you should use the following examples:\n"
+"[codeblock]\n"
+"# This code sample assumes the current script is extending MarginContainer.\n"
+"var margin_value = 100\n"
+"add_constant_override(\"margin_top\", margin_value)\n"
+"add_constant_override(\"margin_left\", margin_value)\n"
+"add_constant_override(\"margin_bottom\", margin_value)\n"
+"add_constant_override(\"margin_right\", margin_value)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/MarginContainer.xml:26
+msgid ""
+"All direct children of [MarginContainer] will have a bottom margin of "
+"[code]margin_bottom[/code] pixels."
+msgstr ""
+
+#: doc/classes/MarginContainer.xml:29
+msgid ""
+"All direct children of [MarginContainer] will have a left margin of "
+"[code]margin_left[/code] pixels."
+msgstr ""
+
+#: doc/classes/MarginContainer.xml:32
+msgid ""
+"All direct children of [MarginContainer] will have a right margin of "
+"[code]margin_right[/code] pixels."
+msgstr ""
+
+#: doc/classes/MarginContainer.xml:35
+msgid ""
+"All direct children of [MarginContainer] will have a top margin of "
+"[code]margin_top[/code] pixels."
+msgstr ""
+
+#: doc/classes/Marshalls.xml:4
+msgid "Data transformation (marshalling) and encoding helpers."
+msgstr ""
+
+#: doc/classes/Marshalls.xml:7
+msgid "Provides data transformation and encoding utility functions."
+msgstr ""
+
+#: doc/classes/Marshalls.xml:16
+msgid ""
+"Returns a decoded [PoolByteArray] corresponding to the Base64-encoded string "
+"[code]base64_str[/code]."
+msgstr ""
+
+#: doc/classes/Marshalls.xml:23
+msgid ""
+"Returns a decoded string corresponding to the Base64-encoded string "
+"[code]base64_str[/code]."
+msgstr ""
+
+#: doc/classes/Marshalls.xml:31
+msgid ""
+"Returns a decoded [Variant] corresponding to the Base64-encoded string "
+"[code]base64_str[/code]. If [code]allow_objects[/code] is [code]true[/code], "
+"decoding objects is allowed.\n"
+"[b]Warning:[/b] Deserialized objects can contain code which gets executed. "
+"Do not use this option if the serialized object comes from untrusted sources "
+"to avoid potential security threats such as remote code execution."
+msgstr ""
+
+#: doc/classes/Marshalls.xml:39
+msgid "Returns a Base64-encoded string of a given [PoolByteArray]."
+msgstr ""
+
+#: doc/classes/Marshalls.xml:46
+msgid ""
+"Returns a Base64-encoded string of the UTF-8 string [code]utf8_str[/code]."
+msgstr ""
+
+#: doc/classes/Marshalls.xml:54
+msgid ""
+"Returns a Base64-encoded string of the [Variant] [code]variant[/code]. If "
+"[code]full_objects[/code] is [code]true[/code], encoding objects is allowed "
+"(and can potentially include code)."
+msgstr ""
+
+#: doc/classes/Material.xml:4
+msgid "Abstract base [Resource] for coloring and shading geometry."
+msgstr ""
+
+#: doc/classes/Material.xml:7
+msgid ""
+"Material is a base [Resource] used for coloring and shading geometry. All "
+"materials inherit from it and almost all [VisualInstance] derived nodes "
+"carry a Material. A few flags and parameters are shared between all material "
+"types and are configured here."
+msgstr ""
+
+#: doc/classes/Material.xml:17
+msgid ""
+"Sets the [Material] to be used for the next pass. This renders the object "
+"again using a different material.\n"
+"[b]Note:[/b] This only applies to [SpatialMaterial]s and [ShaderMaterial]s "
+"with type \"Spatial\"."
+msgstr ""
+
+#: doc/classes/Material.xml:21
+msgid ""
+"Sets the render priority for transparent objects in 3D scenes. Higher "
+"priority objects will be sorted in front of lower priority objects.\n"
+"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
+"not impact how transparent objects are sorted relative to opaque objects. "
+"This is because opaque objects are not sorted, while transparent objects are "
+"sorted from back to front (subject to priority)."
+msgstr ""
+
+#: doc/classes/Material.xml:27
+msgid "Maximum value for the [member render_priority] parameter."
+msgstr ""
+
+#: doc/classes/Material.xml:30
+msgid "Minimum value for the [member render_priority] parameter."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:4
+msgid "Special button that brings up a [PopupMenu] when clicked."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:7
+msgid ""
+"Special button that brings up a [PopupMenu] when clicked.\n"
+"New items can be created inside this [PopupMenu] using [code]get_popup()."
+"add_item(\"My Item Name\")[/code]. You can also create them directly from "
+"the editor. To do so, select the [MenuButton] node, then in the toolbar at "
+"the top of the 2D editor, click [b]Items[/b] then click [b]Add[/b] in the "
+"popup. You will be able to give each item new properties.\n"
+"See also [BaseButton] which contains common properties and methods "
+"associated with this node."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:17 doc/classes/OptionButton.xml:86
+msgid ""
+"Returns the [PopupMenu] contained in this button.\n"
+"[b]Warning:[/b] This is a required internal node, removing and freeing it "
+"may cause a crash. If you wish to hide it or any of its children, use their "
+"[member CanvasItem.visible] property."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:25
+msgid ""
+"If [code]true[/code], shortcuts are disabled and cannot be used to trigger "
+"the button."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:34
+msgid ""
+"If [code]true[/code], when the cursor hovers above another [MenuButton] "
+"within the same parent which also has [code]switch_on_hover[/code] enabled, "
+"it will close the current [MenuButton] and open the other one."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:41
+msgid "Emitted when [PopupMenu] of this MenuButton is about to show."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:49
+msgid "[StyleBox] used when the [MenuButton] is disabled."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:52
+msgid ""
+"[StyleBox] used when the [MenuButton] is focused. It is displayed over the "
+"current [StyleBox], so using [StyleBoxEmpty] will just disable the focus "
+"visual effect."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:55
+msgid "[Font] of the [MenuButton]'s text."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:58
+msgid "Default text [Color] of the [MenuButton]."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:61
+msgid "Text [Color] used when the [MenuButton] is disabled."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:64
+msgid ""
+"Text [Color] used when the [MenuButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:67
+msgid "Text [Color] used when the [MenuButton] is being hovered."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:70
+msgid "Text [Color] used when the [MenuButton] is being pressed."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:73
+msgid "[StyleBox] used when the [MenuButton] is being hovered."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:76
+msgid "The horizontal space between [MenuButton]'s icon and text."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:79
+msgid "Default [StyleBox] for the [MenuButton]."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:82
+msgid "[StyleBox] used when the [MenuButton] is being pressed."
+msgstr ""
+
+#: doc/classes/Mesh.xml:4
+msgid "A [Resource] that contains vertex array-based geometry."
+msgstr ""
+
+#: doc/classes/Mesh.xml:7
+msgid ""
+"Mesh is a type of [Resource] that contains vertex array-based geometry, "
+"divided in [i]surfaces[/i]. Each surface contains a completely separate "
+"array and a material used to draw it. Design wise, a mesh with multiple "
+"surfaces is preferred to a single surface, because objects created in 3D "
+"editing software commonly contain multiple materials."
+msgstr ""
+
+#: doc/classes/Mesh.xml:21
+msgid ""
+"Calculate a [ConvexPolygonShape] from the mesh.\n"
+"If [code]clean[/code] is [code]true[/code] (default), duplicate and interior "
+"vertices are removed automatically. You can set it to [code]false[/code] to "
+"make the process faster if not needed.\n"
+"If [code]simplify[/code] is [code]true[/code], the geometry can be further "
+"simplified to reduce the amount of vertices. Disabled by default."
+msgstr ""
+
+#: doc/classes/Mesh.xml:30
+msgid ""
+"Calculate an outline mesh at a defined offset (margin) from the original "
+"mesh.\n"
+"[b]Note:[/b] This method typically returns the vertices in reverse order (e."
+"g. clockwise to counterclockwise)."
+msgstr ""
+
+#: doc/classes/Mesh.xml:37
+msgid "Calculate a [ConcavePolygonShape] from the mesh."
+msgstr ""
+
+#: doc/classes/Mesh.xml:43
+msgid "Generate a [TriangleMesh] from the mesh."
+msgstr ""
+
+#: doc/classes/Mesh.xml:49
+msgid ""
+"Returns the smallest [AABB] enclosing this mesh in local space. Not affected "
+"by [code]custom_aabb[/code]. See also [method VisualInstance."
+"get_transformed_aabb].\n"
+"[b]Note:[/b] This is only implemented for [ArrayMesh] and [PrimitiveMesh]."
+msgstr ""
+
+#: doc/classes/Mesh.xml:56
+msgid ""
+"Returns all the vertices that make up the faces of the mesh. Each three "
+"vertices represent one triangle."
+msgstr ""
+
+#: doc/classes/Mesh.xml:62
+msgid "Returns the amount of surfaces that the [Mesh] holds."
+msgstr ""
+
+#: doc/classes/Mesh.xml:69
+msgid ""
+"Returns the arrays for the vertices, normals, uvs, etc. that make up the "
+"requested surface (see [method ArrayMesh.add_surface_from_arrays])."
+msgstr ""
+
+#: doc/classes/Mesh.xml:76
+msgid "Returns the blend shape arrays for the requested surface."
+msgstr ""
+
+#: doc/classes/Mesh.xml:83
+msgid ""
+"Returns a [Material] in a given surface. Surface is rendered using this "
+"material."
+msgstr ""
+
+#: doc/classes/Mesh.xml:91
+msgid ""
+"Sets a [Material] for a given surface. Surface will be rendered using this "
+"material."
+msgstr ""
+
+#: doc/classes/Mesh.xml:97
+msgid ""
+"Sets a hint to be used for lightmap resolution in [BakedLightmap]. Overrides "
+"[member BakedLightmap.default_texels_per_unit]."
+msgstr ""
+
+#: doc/classes/Mesh.xml:102
+msgid "Render array as points (one vertex equals one point)."
+msgstr ""
+
+#: doc/classes/Mesh.xml:105
+msgid "Render array as lines (every two vertices a line is created)."
+msgstr ""
+
+#: doc/classes/Mesh.xml:108
+msgid "Render array as line strip."
+msgstr ""
+
+#: doc/classes/Mesh.xml:111
+msgid "Render array as line loop (like line strip, but closed)."
+msgstr ""
+
+#: doc/classes/Mesh.xml:114
+msgid "Render array as triangles (every three vertices a triangle is created)."
+msgstr ""
+
+#: doc/classes/Mesh.xml:117
+msgid "Render array as triangle strips."
+msgstr ""
+
+#: doc/classes/Mesh.xml:120
+msgid "Render array as triangle fans."
+msgstr ""
+
+#: doc/classes/Mesh.xml:123 doc/classes/VisualServer.xml:3363
+msgid "Blend shapes are normalized."
+msgstr ""
+
+#: doc/classes/Mesh.xml:126 doc/classes/VisualServer.xml:3366
+msgid "Blend shapes are relative to base weight."
+msgstr ""
+
+#: doc/classes/Mesh.xml:129
+msgid ""
+"Mesh array contains vertices. All meshes require a vertex array so this "
+"should always be present."
+msgstr ""
+
+#: doc/classes/Mesh.xml:132
+msgid "Mesh array contains normals."
+msgstr ""
+
+#: doc/classes/Mesh.xml:135
+msgid "Mesh array contains tangents."
+msgstr ""
+
+#: doc/classes/Mesh.xml:138
+msgid "Mesh array contains colors."
+msgstr ""
+
+#: doc/classes/Mesh.xml:141
+msgid "Mesh array contains UVs."
+msgstr ""
+
+#: doc/classes/Mesh.xml:144
+msgid "Mesh array contains second UV."
+msgstr ""
+
+#: doc/classes/Mesh.xml:147
+msgid "Mesh array contains bones."
+msgstr ""
+
+#: doc/classes/Mesh.xml:150
+msgid "Mesh array contains bone weights."
+msgstr ""
+
+#: doc/classes/Mesh.xml:153
+msgid "Mesh array uses indices."
+msgstr ""
+
+#: doc/classes/Mesh.xml:156
+msgid ""
+"Used internally to calculate other [code]ARRAY_COMPRESS_*[/code] enum "
+"values. Do not use."
+msgstr ""
+
+#: doc/classes/Mesh.xml:159 doc/classes/VisualServer.xml:3300
+msgid "Flag used to mark a compressed (half float) vertex array."
+msgstr ""
+
+#: doc/classes/Mesh.xml:162 doc/classes/VisualServer.xml:3303
+msgid "Flag used to mark a compressed (half float) normal array."
+msgstr ""
+
+#: doc/classes/Mesh.xml:165 doc/classes/VisualServer.xml:3306
+msgid "Flag used to mark a compressed (half float) tangent array."
+msgstr ""
+
+#: doc/classes/Mesh.xml:168 doc/classes/VisualServer.xml:3309
+msgid "Flag used to mark a compressed (half float) color array."
+msgstr ""
+
+#: doc/classes/Mesh.xml:171 doc/classes/VisualServer.xml:3312
+msgid "Flag used to mark a compressed (half float) UV coordinates array."
+msgstr ""
+
+#: doc/classes/Mesh.xml:174 doc/classes/VisualServer.xml:3315
+msgid ""
+"Flag used to mark a compressed (half float) UV coordinates array for the "
+"second UV coordinates."
+msgstr ""
+
+#: doc/classes/Mesh.xml:177 doc/classes/VisualServer.xml:3318
+msgid "Flag used to mark a compressed bone array."
+msgstr ""
+
+#: doc/classes/Mesh.xml:180 doc/classes/VisualServer.xml:3321
+msgid "Flag used to mark a compressed (half float) weight array."
+msgstr ""
+
+#: doc/classes/Mesh.xml:183 doc/classes/VisualServer.xml:3324
+msgid "Flag used to mark a compressed index array."
+msgstr ""
+
+#: doc/classes/Mesh.xml:186 doc/classes/VisualServer.xml:3327
+msgid "Flag used to mark that the array contains 2D vertices."
+msgstr ""
+
+#: doc/classes/Mesh.xml:189 doc/classes/VisualServer.xml:3330
+msgid "Flag used to mark that the array uses 16-bit bones instead of 8-bit."
+msgstr ""
+
+#: doc/classes/Mesh.xml:192 doc/classes/VisualServer.xml:3333
+msgid ""
+"Flag used to mark that the array uses an octahedral representation of normal "
+"and tangent vectors rather than cartesian."
+msgstr ""
+
+#: doc/classes/Mesh.xml:195
+msgid ""
+"Used to set flags [constant ARRAY_COMPRESS_VERTEX], [constant "
+"ARRAY_COMPRESS_NORMAL], [constant ARRAY_COMPRESS_TANGENT], [constant "
+"ARRAY_COMPRESS_COLOR], [constant ARRAY_COMPRESS_TEX_UV], [constant "
+"ARRAY_COMPRESS_TEX_UV2], [constant ARRAY_COMPRESS_WEIGHTS], and [constant "
+"ARRAY_FLAG_USE_OCTAHEDRAL_COMPRESSION] quickly."
+msgstr ""
+
+#: doc/classes/Mesh.xml:198
+msgid "Array of vertices."
+msgstr ""
+
+#: doc/classes/Mesh.xml:201
+msgid "Array of normals."
+msgstr ""
+
+#: doc/classes/Mesh.xml:204
+msgid "Array of tangents as an array of floats, 4 floats per tangent."
+msgstr ""
+
+#: doc/classes/Mesh.xml:207
+msgid "Array of colors."
+msgstr ""
+
+#: doc/classes/Mesh.xml:210
+msgid "Array of UV coordinates."
+msgstr ""
+
+#: doc/classes/Mesh.xml:213
+msgid "Array of second set of UV coordinates."
+msgstr ""
+
+#: doc/classes/Mesh.xml:216
+msgid "Array of bone data."
+msgstr ""
+
+#: doc/classes/Mesh.xml:219
+msgid "Array of weights."
+msgstr ""
+
+#: doc/classes/Mesh.xml:222
+msgid "Array of indices."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:4
+msgid "Helper tool to access and edit [Mesh] data."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:7
+msgid ""
+"MeshDataTool provides access to individual vertices in a [Mesh]. It allows "
+"users to read and edit vertex data of meshes. It also creates an array of "
+"faces and edges.\n"
+"To use MeshDataTool, load a mesh with [method create_from_surface]. When you "
+"are finished editing the data commit the data to a mesh with [method "
+"commit_to_surface].\n"
+"Below is an example of how MeshDataTool may be used.\n"
+"[codeblock]\n"
+"var mesh = ArrayMesh.new()\n"
+"mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, CubeMesh.new()."
+"get_mesh_arrays())\n"
+"var mdt = MeshDataTool.new()\n"
+"mdt.create_from_surface(mesh, 0)\n"
+"for i in range(mdt.get_vertex_count()):\n"
+" var vertex = mdt.get_vertex(i)\n"
+" # In this example we extend the mesh by one unit, which results in "
+"separated faces as it is flat shaded.\n"
+" vertex += mdt.get_vertex_normal(i)\n"
+" # Save your change.\n"
+" mdt.set_vertex(i, vertex)\n"
+"mesh.surface_remove(0)\n"
+"mdt.commit_to_surface(mesh)\n"
+"var mi = MeshInstance.new()\n"
+"mi.mesh = mesh\n"
+"add_child(mi)\n"
+"[/codeblock]\n"
+"See also [ArrayMesh], [ImmediateGeometry] and [SurfaceTool] for procedural "
+"geometry generation.\n"
+"[b]Note:[/b] Godot uses clockwise [url=https://learnopengl.com/Advanced-"
+"OpenGL/Face-culling]winding order[/url] for front faces of triangle "
+"primitive modes."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:36
+msgid "Clears all data currently in MeshDataTool."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:43
+msgid "Adds a new surface to specified [Mesh] with edited data."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:51
+msgid ""
+"Uses specified surface of given [Mesh] to populate data for MeshDataTool.\n"
+"Requires [Mesh] with primitive type [constant Mesh.PRIMITIVE_TRIANGLES]."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:58
+msgid "Returns the number of edges in this [Mesh]."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:65
+msgid "Returns array of faces that touch given edge."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:72
+msgid "Returns meta information assigned to given edge."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:80
+msgid ""
+"Returns index of specified vertex connected to given edge.\n"
+"Vertex argument can only be 0 or 1 because edges are comprised of two "
+"vertices."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:87
+msgid "Returns the number of faces in this [Mesh]."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:95
+msgid ""
+"Returns specified edge associated with given face.\n"
+"Edge argument must 2 or less because a face only has three edges."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:103
+msgid "Returns the metadata associated with the given face."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:110
+msgid "Calculates and returns the face normal of the given face."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:118
+msgid ""
+"Returns the specified vertex of the given face.\n"
+"Vertex argument must be 2 or less because faces contain three vertices."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:125
+msgid ""
+"Returns the [Mesh]'s format. Format is an integer made up of [Mesh] format "
+"flags combined together. For example, a mesh containing both vertices and "
+"normals would return a format of [code]3[/code] because [constant ArrayMesh."
+"ARRAY_FORMAT_VERTEX] is [code]1[/code] and [constant ArrayMesh."
+"ARRAY_FORMAT_NORMAL] is [code]2[/code].\n"
+"See [enum ArrayMesh.ArrayFormat] for a list of format flags."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:132
+msgid "Returns the material assigned to the [Mesh]."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:139
+msgid "Returns the vertex at given index."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:146
+msgid "Returns the bones of the given vertex."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:153
+msgid "Returns the color of the given vertex."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:159
+msgid "Returns the total number of vertices in [Mesh]."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:166
+msgid "Returns an array of edges that share the given vertex."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:173
+msgid "Returns an array of faces that share the given vertex."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:180
+msgid "Returns the metadata associated with the given vertex."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:187
+msgid "Returns the normal of the given vertex."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:194
+msgid "Returns the tangent of the given vertex."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:201
+msgid "Returns the UV of the given vertex."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:208
+msgid "Returns the UV2 of the given vertex."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:215
+msgid "Returns bone weights of the given vertex."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:223
+msgid "Sets the metadata of the given edge."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:231
+msgid "Sets the metadata of the given face."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:238
+msgid "Sets the material to be used by newly-constructed [Mesh]."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:246
+msgid "Sets the position of the given vertex."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:254
+msgid "Sets the bones of the given vertex."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:262
+msgid "Sets the color of the given vertex."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:270
+msgid "Sets the metadata associated with the given vertex."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:278
+msgid "Sets the normal of the given vertex."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:286
+msgid "Sets the tangent of the given vertex."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:294
+msgid "Sets the UV of the given vertex."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:302
+msgid "Sets the UV2 of the given vertex."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:310
+msgid "Sets the bone weights of the given vertex."
+msgstr ""
+
+#: doc/classes/MeshInstance.xml:4
+msgid "Node that instances meshes into a scenario."
+msgstr ""
+
+#: doc/classes/MeshInstance.xml:7
+msgid ""
+"MeshInstance is a node that takes a [Mesh] resource and adds it to the "
+"current scenario by creating an instance of it. This is the class most often "
+"used to get 3D geometry rendered and can be used to instance a single [Mesh] "
+"in many places. This allows to reuse geometry and save on resources. When a "
+"[Mesh] has to be instanced more than thousands of times at close proximity, "
+"consider using a [MultiMesh] in a [MultiMeshInstance] instead."
+msgstr ""
+
+#: doc/classes/MeshInstance.xml:21
+msgid ""
+"This helper creates a [StaticBody] child node with a [ConvexPolygonShape] "
+"collision shape calculated from the mesh geometry. It's mainly used for "
+"testing.\n"
+"If [code]clean[/code] is [code]true[/code] (default), duplicate and interior "
+"vertices are removed automatically. You can set it to [code]false[/code] to "
+"make the process faster if not needed.\n"
+"If [code]simplify[/code] is [code]true[/code], the geometry can be further "
+"simplified to reduce the amount of vertices. Disabled by default."
+msgstr ""
+
+#: doc/classes/MeshInstance.xml:29
+msgid ""
+"This helper creates a [MeshInstance] child node with gizmos at every vertex "
+"calculated from the mesh geometry. It's mainly used for testing."
+msgstr ""
+
+#: doc/classes/MeshInstance.xml:35
+msgid ""
+"This helper creates a [StaticBody] child node with multiple "
+"[ConvexPolygonShape] collision shapes calculated from the mesh geometry via "
+"convex decomposition. It's mainly used for testing."
+msgstr ""
+
+#: doc/classes/MeshInstance.xml:41
+msgid ""
+"This helper creates a [StaticBody] child node with a [ConcavePolygonShape] "
+"collision shape calculated from the mesh geometry. It's mainly used for "
+"testing."
+msgstr ""
+
+#: doc/classes/MeshInstance.xml:48
+msgid ""
+"Returns the [Material] that will be used by the [Mesh] when drawing. This "
+"can return the [member GeometryInstance.material_override], the surface "
+"override [Material] defined in this [MeshInstance], or the surface "
+"[Material] defined in the [Mesh]. For example, if [member GeometryInstance."
+"material_override] is used, all surfaces will return the override material."
+msgstr ""
+
+#: doc/classes/MeshInstance.xml:55
+msgid "Returns the [Material] for a surface of the [Mesh] resource."
+msgstr ""
+
+#: doc/classes/MeshInstance.xml:61
+msgid "Returns the number of surface materials."
+msgstr ""
+
+#: doc/classes/MeshInstance.xml:69
+msgid "Sets the [Material] for a surface of the [Mesh] resource."
+msgstr ""
+
+#: doc/classes/MeshInstance.xml:75
+msgid "The [Mesh] resource for the instance."
+msgstr ""
+
+#: doc/classes/MeshInstance.xml:78
+msgid "[NodePath] to the [Skeleton] associated with the instance."
+msgstr ""
+
+#: doc/classes/MeshInstance.xml:81
+msgid "Sets the skin to be used by this instance."
+msgstr ""
+
+#: doc/classes/MeshInstance.xml:84
+msgid ""
+"If [code]true[/code], normals are transformed when software skinning is "
+"used. Set to [code]false[/code] when normals are not needed for better "
+"performance.\n"
+"See [member ProjectSettings.rendering/quality/skinning/"
+"software_skinning_fallback] for details about how software skinning is "
+"enabled."
+msgstr ""
+
+#: doc/classes/MeshInstance2D.xml:4
+msgid "Node used for displaying a [Mesh] in 2D."
+msgstr ""
+
+#: doc/classes/MeshInstance2D.xml:7
+msgid ""
+"Node used for displaying a [Mesh] in 2D. Can be constructed from an existing "
+"[Sprite] via a tool in the editor toolbar. Select \"Sprite\" then \"Convert "
+"to Mesh2D\", select settings in popup and press \"Create Mesh2D\"."
+msgstr ""
+
+#: doc/classes/MeshInstance2D.xml:10
+msgid "https://docs.godotengine.org/en/3.4/tutorials/2d/2d_meshes.html"
+msgstr ""
+
+#: doc/classes/MeshInstance2D.xml:16
+msgid "The [Mesh] that will be drawn by the [MeshInstance2D]."
+msgstr ""
+
+#: doc/classes/MeshInstance2D.xml:19 doc/classes/MultiMeshInstance2D.xml:19
+msgid ""
+"The normal map that will be used if using the default [CanvasItemMaterial].\n"
+"[b]Note:[/b] Godot expects the normal map to use X+, Y-, and Z+ coordinates. "
+"See [url=http://wiki.polycount.com/wiki/"
+"Normal_Map_Technical_Details#Common_Swizzle_Coordinates]this page[/url] for "
+"a comparison of normal map coordinates expected by popular engines."
+msgstr ""
+
+#: doc/classes/MeshInstance2D.xml:23 doc/classes/MultiMeshInstance2D.xml:23
+msgid ""
+"The [Texture] that will be used if using the default [CanvasItemMaterial]. "
+"Can be accessed as [code]TEXTURE[/code] in CanvasItem shader."
+msgstr ""
+
+#: doc/classes/MeshInstance2D.xml:29 doc/classes/MultiMeshInstance2D.xml:29
+msgid "Emitted when the [member texture] is changed."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:4
+msgid "Library of meshes."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:7
+msgid ""
+"A library of meshes. Contains a list of [Mesh] resources, each with a name "
+"and ID. Each item can also include collision and navigation shapes. This "
+"resource is used in [GridMap]."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:17
+msgid "Clears the library."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:24
+msgid ""
+"Creates a new item in the library with the given ID.\n"
+"You can get an unused ID from [method get_last_unused_item_id]."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:32
+msgid "Returns the first item with the given name."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:38
+msgid "Returns the list of item IDs in use."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:45
+msgid "Returns the item's mesh."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:52
+msgid "Returns the transform applied to the item's mesh."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:59
+msgid "Returns the item's name."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:66
+msgid "Returns the item's navigation mesh."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:73
+msgid "Returns the transform applied to the item's navigation mesh."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:80
+msgid ""
+"When running in the editor, returns a generated item preview (a 3D rendering "
+"in isometric perspective). When used in a running project, returns the "
+"manually-defined item preview which can be set using [method "
+"set_item_preview]. Returns an empty [Texture] if no preview was manually set "
+"in a running project."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:87
+msgid ""
+"Returns an item's collision shapes.\n"
+"The array consists of each [Shape] followed by its [Transform]."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:94
+msgid "Gets an unused ID for a new item."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:101
+msgid "Removes the item."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:109
+msgid "Sets the item's mesh."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:117
+msgid "Sets the transform to apply to the item's mesh."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:125
+msgid ""
+"Sets the item's name.\n"
+"This name is shown in the editor. It can also be used to look up the item "
+"later using [method find_item_by_name]."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:134
+msgid "Sets the item's navigation mesh."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:142
+msgid "Sets the transform to apply to the item's navigation mesh."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:150
+msgid "Sets a texture to use as the item's preview icon in the editor."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:158
+msgid ""
+"Sets an item's collision shapes.\n"
+"The array should consist of [Shape] objects, each followed by a [Transform] "
+"that will be applied to it. For shapes that should not have a transform, use "
+"[constant Transform.IDENTITY]."
+msgstr ""
+
+#: doc/classes/MeshTexture.xml:4
+msgid "Simple texture that uses a mesh to draw itself."
+msgstr ""
+
+#: doc/classes/MeshTexture.xml:7
+msgid ""
+"Simple texture that uses a mesh to draw itself. It's limited because flags "
+"can't be changed and region drawing is not supported."
+msgstr ""
+
+#: doc/classes/MeshTexture.xml:15
+msgid "Sets the base texture that the Mesh will use to draw."
+msgstr ""
+
+#: doc/classes/MeshTexture.xml:19
+msgid "Sets the size of the image, needed for reference."
+msgstr ""
+
+#: doc/classes/MeshTexture.xml:22
+msgid "Sets the mesh used to draw. It must be a mesh using 2D vertices."
+msgstr ""
+
+#: modules/mobile_vr/doc_classes/MobileVRInterface.xml:4
+msgid "Generic mobile VR implementation."
+msgstr ""
+
+#: modules/mobile_vr/doc_classes/MobileVRInterface.xml:7
+msgid ""
+"This is a generic mobile VR implementation where you need to provide details "
+"about the phone and HMD used. It does not rely on any existing framework. "
+"This is the most basic interface we have. For the best effect, you need a "
+"mobile phone with a gyroscope and accelerometer.\n"
+"Note that even though there is no positional tracking, the camera will "
+"assume the headset is at a height of 1.85 meters. You can change this by "
+"setting [member eye_height].\n"
+"You can initialise this interface as follows:\n"
+"[codeblock]\n"
+"var interface = ARVRServer.find_interface(\"Native mobile\")\n"
+"if interface and interface.initialize():\n"
+" get_viewport().arvr = true\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/mobile_vr/doc_classes/MobileVRInterface.xml:22
+msgid ""
+"The distance between the display and the lenses inside of the device in "
+"centimeters."
+msgstr ""
+
+#: modules/mobile_vr/doc_classes/MobileVRInterface.xml:25
+msgid "The width of the display in centimeters."
+msgstr ""
+
+#: modules/mobile_vr/doc_classes/MobileVRInterface.xml:28
+msgid ""
+"The height at which the camera is placed in relation to the ground (i.e. "
+"[ARVROrigin] node)."
+msgstr ""
+
+#: modules/mobile_vr/doc_classes/MobileVRInterface.xml:31
+msgid ""
+"The interocular distance, also known as the interpupillary distance. The "
+"distance between the pupils of the left and right eye."
+msgstr ""
+
+#: modules/mobile_vr/doc_classes/MobileVRInterface.xml:34
+msgid ""
+"The k1 lens factor is one of the two constants that define the strength of "
+"the lens used and directly influences the lens distortion effect."
+msgstr ""
+
+#: modules/mobile_vr/doc_classes/MobileVRInterface.xml:37
+msgid "The k2 lens factor, see k1."
+msgstr ""
+
+#: modules/mobile_vr/doc_classes/MobileVRInterface.xml:40
+msgid ""
+"The oversample setting. Because of the lens distortion we have to render our "
+"buffers at a higher resolution then the screen can natively handle. A value "
+"between 1.5 and 2.0 often provides good results but at the cost of "
+"performance."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:4
+msgid "Provides high-performance mesh instancing."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:7
+msgid ""
+"MultiMesh provides low-level mesh instancing. Drawing thousands of "
+"[MeshInstance] nodes can be slow, since each object is submitted to the GPU "
+"then drawn individually.\n"
+"MultiMesh is much faster as it can draw thousands of instances with a single "
+"draw call, resulting in less API overhead.\n"
+"As a drawback, if the instances are too far away from each other, "
+"performance may be reduced as every single instance will always render (they "
+"are spatially indexed as one, for the whole object).\n"
+"Since instances may have any behavior, the AABB used for visibility must be "
+"provided by the user."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:13 doc/classes/MultiMeshInstance.xml:11
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/3d/vertex_animation/"
+"animating_thousands_of_fish.html"
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:14 doc/classes/MultiMeshInstance.xml:13
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/optimization/using_multimesh."
+"html"
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:20
+msgid ""
+"Returns the visibility axis-aligned bounding box in local space. See also "
+"[method VisualInstance.get_transformed_aabb]."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:27
+msgid "Gets a specific instance's color."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:34
+msgid "Returns the custom data that has been set for a specific instance."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:41
+msgid "Returns the [Transform] of a specific instance."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:48
+msgid "Returns the [Transform2D] of a specific instance."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:55
+msgid ""
+"Sets all data related to the instances in one go. This is especially useful "
+"when loading the data from disk or preparing the data from GDNative.\n"
+"All data is packed in one large float array. An array may look like this: "
+"Transform for instance 1, color data for instance 1, custom data for "
+"instance 1, transform for instance 2, color data for instance 2, etc...\n"
+"[Transform] is stored as 12 floats, [Transform2D] is stored as 8 floats, "
+"[code]COLOR_8BIT[/code] / [code]CUSTOM_DATA_8BIT[/code] is stored as 1 float "
+"(4 bytes as is) and [code]COLOR_FLOAT[/code] / [code]CUSTOM_DATA_FLOAT[/"
+"code] is stored as 4 floats."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:65
+msgid ""
+"Sets the color of a specific instance by [i]multiplying[/i] the mesh's "
+"existing vertex colors.\n"
+"For the color to take effect, ensure that [member color_format] is non-"
+"[code]null[/code] on the [MultiMesh] and [member SpatialMaterial."
+"vertex_color_use_as_albedo] is [code]true[/code] on the material."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:74
+msgid ""
+"Sets custom data for a specific instance. Although [Color] is used, it is "
+"just a container for 4 floating point numbers. The format of the number can "
+"change depending on the [enum CustomDataFormat] used."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:82
+msgid "Sets the [Transform] for a specific instance."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:90
+msgid "Sets the [Transform2D] for a specific instance."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:96
+msgid "Format of colors in color array that gets passed to shader."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:99
+msgid "Format of custom data in custom data array that gets passed to shader."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:102
+msgid ""
+"Number of instances that will get drawn. This clears and (re)sizes the "
+"buffers. By default, all instances are drawn but you can limit this with "
+"[member visible_instance_count]."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:105
+msgid "Mesh to be drawn."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:108
+msgid "Format of transform used to transform mesh, either 2D or 3D."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:111
+msgid ""
+"Limits the number of instances drawn, -1 draws all instances. Changing this "
+"does not change the sizes of the buffers."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:116
+msgid "Use this when using 2D transforms."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:119
+msgid "Use this when using 3D transforms."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:122
+msgid "Use when you are not using per-instance [Color]s."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:125
+msgid ""
+"Compress [Color] data into 8 bits when passing to shader. This uses less "
+"memory and can be faster, but the [Color] loses precision."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:128
+msgid ""
+"The [Color] passed into [method set_instance_color] will use 4 floats. Use "
+"this for highest precision [Color]."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:131
+msgid "Use when you are not using per-instance custom data."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:134
+msgid ""
+"Compress custom_data into 8 bits when passing to shader. This uses less "
+"memory and can be faster, but loses precision and range. Floats packed into "
+"8 bits can only represent values between 0 and 1, numbers outside that range "
+"will be clamped."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:137
+msgid ""
+"The [Color] passed into [method set_instance_custom_data] will use 4 floats. "
+"Use this for highest precision."
+msgstr ""
+
+#: doc/classes/MultiMeshInstance.xml:4
+msgid "Node that instances a [MultiMesh]."
+msgstr ""
+
+#: doc/classes/MultiMeshInstance.xml:7
+msgid ""
+"[MultiMeshInstance] is a specialized node to instance [GeometryInstance]s "
+"based on a [MultiMesh] resource.\n"
+"This is useful to optimize the rendering of a high amount of instances of a "
+"given mesh (for example trees in a forest or grass strands)."
+msgstr ""
+
+#: doc/classes/MultiMeshInstance.xml:12
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/3d/using_multi_mesh_instance."
+"html"
+msgstr ""
+
+#: doc/classes/MultiMeshInstance.xml:19
+msgid ""
+"The [MultiMesh] resource that will be used and shared among all instances of "
+"the [MultiMeshInstance]."
+msgstr ""
+
+#: doc/classes/MultiMeshInstance2D.xml:4
+msgid "Node that instances a [MultiMesh] in 2D."
+msgstr ""
+
+#: doc/classes/MultiMeshInstance2D.xml:7
+msgid ""
+"[MultiMeshInstance2D] is a specialized node to instance a [MultiMesh] "
+"resource in 2D.\n"
+"Usage is the same as [MultiMeshInstance]."
+msgstr ""
+
+#: doc/classes/MultiMeshInstance2D.xml:16
+msgid "The [MultiMesh] that will be drawn by the [MultiMeshInstance2D]."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:4
+msgid "High-level multiplayer API."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:7
+msgid ""
+"This class implements most of the logic behind the high-level multiplayer "
+"API. See also [NetworkedMultiplayerPeer].\n"
+"By default, [SceneTree] has a reference to this class that is used to "
+"provide multiplayer capabilities (i.e. RPC/RSET) across the whole scene.\n"
+"It is possible to override the MultiplayerAPI instance used by specific "
+"Nodes by setting the [member Node.custom_multiplayer] property, effectively "
+"allowing to run both client and server in the same scene.\n"
+"[b]Note:[/b] The high-level multiplayer API protocol is an implementation "
+"detail and isn't meant to be used by non-Godot servers. It may change "
+"without notice."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:18
+msgid ""
+"Clears the current MultiplayerAPI network state (you shouldn't call this "
+"unless you know what you are doing)."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:24
+msgid ""
+"Returns the peer IDs of all connected peers of this MultiplayerAPI's [member "
+"network_peer]."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:30
+msgid ""
+"Returns the unique peer ID of this MultiplayerAPI's [member network_peer]."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:36
+msgid ""
+"Returns the sender's peer ID for the RPC currently being executed.\n"
+"[b]Note:[/b] If not inside an RPC this method will return 0."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:43 doc/classes/SceneTree.xml:123
+msgid "Returns [code]true[/code] if there is a [member network_peer] set."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:49
+msgid ""
+"Returns [code]true[/code] if this MultiplayerAPI's [member network_peer] is "
+"in server mode (listening for connections)."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:55
+msgid ""
+"Method used for polling the MultiplayerAPI. You only need to worry about "
+"this if you are using [member Node.custom_multiplayer] override or you set "
+"[member SceneTree.multiplayer_poll] to [code]false[/code]. By default, "
+"[SceneTree] will poll its MultiplayerAPI for you.\n"
+"[b]Note:[/b] This method results in RPCs and RSETs being called, so they "
+"will be executed in the same context of this function (e.g. [code]_process[/"
+"code], [code]physics[/code], [Thread])."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:65
+msgid ""
+"Sends the given raw [code]bytes[/code] to a specific peer identified by "
+"[code]id[/code] (see [method NetworkedMultiplayerPeer.set_target_peer]). "
+"Default ID is [code]0[/code], i.e. broadcast to all peers."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:71
+msgid ""
+"If [code]true[/code] (or if the [member network_peer] has [member PacketPeer."
+"allow_object_decoding] set to [code]true[/code]), the MultiplayerAPI will "
+"allow encoding and decoding of object during RPCs/RSETs.\n"
+"[b]Warning:[/b] Deserialized objects can contain code which gets executed. "
+"Do not use this option if the serialized object comes from untrusted sources "
+"to avoid potential security threats such as remote code execution."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:75
+msgid ""
+"The peer object to handle the RPC system (effectively enabling networking "
+"when set). Depending on the peer itself, the MultiplayerAPI will become a "
+"network server (check with [method is_network_server]) and will set root "
+"node's network mode to master, or it will become a regular peer with root "
+"node set to puppet. All child nodes are set to inherit the network mode by "
+"default. Handling of networking-related events (connection, disconnection, "
+"new clients) is done by connecting to MultiplayerAPI's signals."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:78
+msgid ""
+"If [code]true[/code], the MultiplayerAPI's [member network_peer] refuses new "
+"incoming connections."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:81
+msgid ""
+"The root node to use for RPCs. Instead of an absolute path, a relative path "
+"will be used to find the node upon which the RPC should be executed.\n"
+"This effectively allows to have different branches of the scene tree to be "
+"managed by different MultiplayerAPI, allowing for example to run both client "
+"and server in the same scene."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:88
+msgid ""
+"Emitted when this MultiplayerAPI's [member network_peer] successfully "
+"connected to a server. Only emitted on clients."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:93
+msgid ""
+"Emitted when this MultiplayerAPI's [member network_peer] fails to establish "
+"a connection to a server. Only emitted on clients."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:99
+msgid ""
+"Emitted when this MultiplayerAPI's [member network_peer] connects with a new "
+"peer. ID is the peer ID of the new peer. Clients get notified when other "
+"clients connect to the same server. Upon connecting to a server, a client "
+"also receives this signal for the server (with ID being 1)."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:105
+msgid ""
+"Emitted when this MultiplayerAPI's [member network_peer] disconnects from a "
+"peer. Clients get notified when other clients disconnect from the same "
+"server."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:112
+msgid ""
+"Emitted when this MultiplayerAPI's [member network_peer] receive a "
+"[code]packet[/code] with custom data (see [method send_bytes]). ID is the "
+"peer ID of the peer that sent the packet."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:117
+msgid ""
+"Emitted when this MultiplayerAPI's [member network_peer] disconnects from "
+"server. Only emitted on clients."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:123
+msgid ""
+"Used with [method Node.rpc_config] or [method Node.rset_config] to disable a "
+"method or property for all RPC calls, making it unavailable. Default for all "
+"methods."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:126
+msgid ""
+"Used with [method Node.rpc_config] or [method Node.rset_config] to set a "
+"method to be called or a property to be changed only on the remote end, not "
+"locally. Analogous to the [code]remote[/code] keyword. Calls and property "
+"changes are accepted from all remote peers, no matter if they are node's "
+"master or puppets."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:129
+msgid ""
+"Used with [method Node.rpc_config] or [method Node.rset_config] to set a "
+"method to be called or a property to be changed only on the network master "
+"for this node. Analogous to the [code]master[/code] keyword. Only accepts "
+"calls or property changes from the node's network puppets, see [method Node."
+"set_network_master]."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:132
+msgid ""
+"Used with [method Node.rpc_config] or [method Node.rset_config] to set a "
+"method to be called or a property to be changed only on puppets for this "
+"node. Analogous to the [code]puppet[/code] keyword. Only accepts calls or "
+"property changes from the node's network master, see [method Node."
+"set_network_master]."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:135
+msgid ""
+"[i]Deprecated.[/i] Use [constant RPC_MODE_PUPPET] instead. Analogous to the "
+"[code]slave[/code] keyword."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:138
+msgid ""
+"Behave like [constant RPC_MODE_REMOTE] but also make the call or property "
+"change locally. Analogous to the [code]remotesync[/code] keyword."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:141
+msgid ""
+"[i]Deprecated.[/i] Use [constant RPC_MODE_REMOTESYNC] instead. Analogous to "
+"the [code]sync[/code] keyword."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:144
+msgid ""
+"Behave like [constant RPC_MODE_MASTER] but also make the call or property "
+"change locally. Analogous to the [code]mastersync[/code] keyword."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:147
+msgid ""
+"Behave like [constant RPC_MODE_PUPPET] but also make the call or property "
+"change locally. Analogous to the [code]puppetsync[/code] keyword."
+msgstr ""
+
+#: doc/classes/Mutex.xml:4
+msgid "A synchronization mutex (mutual exclusion)."
+msgstr ""
+
+#: doc/classes/Mutex.xml:7
+msgid ""
+"A synchronization mutex (mutual exclusion). This is used to synchronize "
+"multiple [Thread]s, and is equivalent to a binary [Semaphore]. It guarantees "
+"that only one thread can ever acquire the lock at a time. A mutex can be "
+"used to protect a critical section; however, be careful to avoid deadlocks."
+msgstr ""
+
+#: doc/classes/Mutex.xml:10 doc/classes/Semaphore.xml:10
+#: doc/classes/Thread.xml:11
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/threads/using_multiple_threads."
+"html"
+msgstr ""
+
+#: doc/classes/Mutex.xml:16
+msgid ""
+"Locks this [Mutex], blocks until it is unlocked by the current owner.\n"
+"[b]Note:[/b] This function returns without blocking if the thread already "
+"has ownership of the mutex."
+msgstr ""
+
+#: doc/classes/Mutex.xml:23
+msgid ""
+"Tries locking this [Mutex], but does not block. Returns [constant OK] on "
+"success, [constant ERR_BUSY] otherwise.\n"
+"[b]Note:[/b] This function returns [constant OK] if the thread already has "
+"ownership of the mutex."
+msgstr ""
+
+#: doc/classes/Mutex.xml:30
+msgid ""
+"Unlocks this [Mutex], leaving it to other threads.\n"
+"[b]Note:[/b] If a thread called [method lock] or [method try_lock] multiple "
+"times while already having ownership of the mutex, it must also call [method "
+"unlock] the same number of times in order to unlock it correctly."
+msgstr ""
+
+#: modules/gdnative/doc_classes/NativeScript.xml:13
+msgid ""
+"Returns the documentation string that was previously set with "
+"[code]godot_nativescript_set_class_documentation[/code]."
+msgstr ""
+
+#: modules/gdnative/doc_classes/NativeScript.xml:20
+msgid ""
+"Returns the documentation string that was previously set with "
+"[code]godot_nativescript_set_method_documentation[/code]."
+msgstr ""
+
+#: modules/gdnative/doc_classes/NativeScript.xml:27
+msgid ""
+"Returns the documentation string that was previously set with "
+"[code]godot_nativescript_set_property_documentation[/code]."
+msgstr ""
+
+#: modules/gdnative/doc_classes/NativeScript.xml:34
+msgid ""
+"Returns the documentation string that was previously set with "
+"[code]godot_nativescript_set_signal_documentation[/code]."
+msgstr ""
+
+#: modules/gdnative/doc_classes/NativeScript.xml:40
+msgid ""
+"Constructs a new object of the base type with a script of this type already "
+"attached.\n"
+"[b]Note:[/b] Any arguments passed to this function will be ignored and not "
+"passed to the native constructor function. This will change with in a future "
+"API extension."
+msgstr ""
+
+#: doc/classes/Navigation.xml:4
+msgid "Mesh-based navigation and pathfinding node."
+msgstr ""
+
+#: doc/classes/Navigation.xml:7
+msgid ""
+"Provides navigation and pathfinding within a collection of "
+"[NavigationMesh]es. By default, these will be automatically collected from "
+"child [NavigationMeshInstance] nodes, but they can also be added on the fly "
+"with [method navmesh_add]. In addition to basic pathfinding, this class also "
+"assists with aligning navigation agents with the meshes they are navigating "
+"on.\n"
+"[b]Note:[/b] The current navigation system has many known issues and will "
+"not always return optimal paths as expected. These issues will be fixed in "
+"Godot 4.0."
+msgstr ""
+
+#: doc/classes/Navigation.xml:11 doc/classes/NavigationMesh.xml:10
+msgid "https://godotengine.org/asset-library/asset/124"
+msgstr ""
+
+#: doc/classes/Navigation.xml:18 doc/classes/Navigation2D.xml:18
+msgid ""
+"Returns the navigation point closest to the point given. Points are in local "
+"coordinate space."
+msgstr ""
+
+#: doc/classes/Navigation.xml:25
+msgid ""
+"Returns the surface normal at the navigation point closest to the point "
+"given. Useful for rotating a navigation agent according to the navigation "
+"mesh it moves on."
+msgstr ""
+
+#: doc/classes/Navigation.xml:32
+msgid ""
+"Returns the owner of the [NavigationMesh] which contains the navigation "
+"point closest to the point given. This is usually a "
+"[NavigationMeshInstance]. For meshes added via [method navmesh_add], returns "
+"the owner that was given (or [code]null[/code] if the [code]owner[/code] "
+"parameter was omitted)."
+msgstr ""
+
+#: doc/classes/Navigation.xml:41
+msgid ""
+"Returns the navigation point closest to the given line segment. When "
+"enabling [code]use_collision[/code], only considers intersection points "
+"between segment and navigation meshes. If multiple intersection points are "
+"found, the one closest to the segment start point is returned."
+msgstr ""
+
+#: doc/classes/Navigation.xml:50
+msgid ""
+"Returns the path between two given points. Points are in local coordinate "
+"space. If [code]optimize[/code] is [code]true[/code] (the default), the "
+"agent properties associated with each [NavigationMesh] (radius, height, "
+"etc.) are considered in the path calculation, otherwise they are ignored.\n"
+"[b]Note:[/b] This method has known issues and will often return non-optimal "
+"paths. These issues will be fixed in Godot 4.0."
+msgstr ""
+
+#: doc/classes/Navigation.xml:60
+msgid ""
+"Adds a [NavigationMesh]. Returns an ID for use with [method navmesh_remove] "
+"or [method navmesh_set_transform]. If given, a [Transform2D] is applied to "
+"the polygon. The optional [code]owner[/code] is used as return value for "
+"[method get_closest_point_owner]."
+msgstr ""
+
+#: doc/classes/Navigation.xml:67
+msgid "Removes the [NavigationMesh] with the given ID."
+msgstr ""
+
+#: doc/classes/Navigation.xml:75
+msgid "Sets the transform applied to the [NavigationMesh] with the given ID."
+msgstr ""
+
+#: doc/classes/Navigation.xml:81
+msgid ""
+"Defines which direction is up. By default, this is [code](0, 1, 0)[/code], "
+"which is the world's \"up\" direction."
+msgstr ""
+
+#: doc/classes/Navigation2D.xml:4
+msgid "2D navigation and pathfinding node."
+msgstr ""
+
+#: doc/classes/Navigation2D.xml:7
+msgid ""
+"Navigation2D provides navigation and pathfinding within a 2D area, specified "
+"as a collection of [NavigationPolygon] resources. By default, these are "
+"automatically collected from child [NavigationPolygonInstance] nodes, but "
+"they can also be added on the fly with [method navpoly_add].\n"
+"[b]Note:[/b] The current navigation system has many known issues and will "
+"not always return optimal paths as expected. These issues will be fixed in "
+"Godot 4.0."
+msgstr ""
+
+#: doc/classes/Navigation2D.xml:11 doc/classes/NavigationPolygon.xml:27
+msgid "https://godotengine.org/asset-library/asset/117"
+msgstr ""
+
+#: doc/classes/Navigation2D.xml:25
+msgid ""
+"Returns the owner of the [NavigationPolygon] which contains the navigation "
+"point closest to the point given. This is usually a "
+"[NavigationPolygonInstance]. For polygons added via [method navpoly_add], "
+"returns the owner that was given (or [code]null[/code] if the [code]owner[/"
+"code] parameter was omitted)."
+msgstr ""
+
+#: doc/classes/Navigation2D.xml:34
+msgid ""
+"Returns the path between two given points. Points are in local coordinate "
+"space. If [code]optimize[/code] is [code]true[/code] (the default), the path "
+"is smoothed by merging path segments where possible.\n"
+"[b]Note:[/b] This method has known issues and will often return non-optimal "
+"paths. These issues will be fixed in Godot 4.0."
+msgstr ""
+
+#: doc/classes/Navigation2D.xml:44
+msgid ""
+"Adds a [NavigationPolygon]. Returns an ID for use with [method "
+"navpoly_remove] or [method navpoly_set_transform]. If given, a [Transform2D] "
+"is applied to the polygon. The optional [code]owner[/code] is used as return "
+"value for [method get_closest_point_owner]."
+msgstr ""
+
+#: doc/classes/Navigation2D.xml:51
+msgid "Removes the [NavigationPolygon] with the given ID."
+msgstr ""
+
+#: doc/classes/Navigation2D.xml:59
+msgid ""
+"Sets the transform applied to the [NavigationPolygon] with the given ID."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:4
+msgid "A mesh to approximate the walkable areas and obstacles."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:7
+msgid ""
+"A navigation mesh is a collection of polygons that define which areas of an "
+"environment are traversable to aid agents in pathfinding through complicated "
+"spaces."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:17 doc/classes/NavigationPolygon.xml:49
+msgid ""
+"Adds a polygon using the indices of the vertices you get when calling "
+"[method get_vertices]."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:23
+msgid ""
+"Clears the array of polygons, but it doesn't clear the array of vertices."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:30
+msgid ""
+"Initializes the navigation mesh by setting the vertices and indices "
+"according to a [Mesh]."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:37
+msgid ""
+"Returns whether the specified [code]bit[/code] of the [member geometry/"
+"collision_mask] is set."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:44 doc/classes/NavigationPolygon.xml:81
+msgid ""
+"Returns a [PoolIntArray] containing the indices of the vertices of a created "
+"polygon."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:50
+msgid "Returns the number of polygons in the navigation mesh."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:56
+msgid ""
+"Returns a [PoolVector3Array] containing all the vertices being used to "
+"create the polygons."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:64
+msgid ""
+"If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/"
+"code] in the [member geometry/collision_mask].\n"
+"If [code]value[/code] is [code]false[/code], clears the specified [code]bit[/"
+"code] in the [member geometry/collision_mask]."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:72 doc/classes/NavigationPolygon.xml:121
+msgid ""
+"Sets the vertices that can be then indexed to create polygons with the "
+"[method add_polygon] method."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:78
+msgid ""
+"The minimum floor to ceiling height that will still allow the floor area to "
+"be considered walkable.\n"
+"[b]Note:[/b] While baking, this value will be rounded up to the nearest "
+"multiple of [member cell/height]."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:82
+msgid ""
+"The minimum ledge height that is considered to still be traversable.\n"
+"[b]Note:[/b] While baking, this value will be rounded down to the nearest "
+"multiple of [member cell/height]."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:86
+msgid "The maximum slope that is considered walkable, in degrees."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:89
+msgid ""
+"The distance to erode/shrink the walkable area of the heightfield away from "
+"obstructions.\n"
+"[b]Note:[/b] While baking, this value will be rounded up to the nearest "
+"multiple of [member cell/size]."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:93
+msgid "The Y axis cell size to use for fields."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:96
+msgid "The XZ plane cell size to use for fields."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:99
+msgid ""
+"The sampling distance to use when generating the detail mesh, in cell unit."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:102
+msgid ""
+"The maximum distance the detail mesh surface should deviate from "
+"heightfield, in cell unit."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:105
+msgid ""
+"The maximum distance a simplfied contour's border edges should deviate the "
+"original raw contour."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:108
+msgid ""
+"The maximum allowed length for contour edges along the border of the mesh.\n"
+"[b]Note:[/b] While baking, this value will be rounded up to the nearest "
+"multiple of [member cell/size]."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:112
+msgid ""
+"If [code]true[/code], marks walkable spans as not walkable if the clearance "
+"above the span is less than [member agent/height]."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:115
+msgid "If [code]true[/code], marks spans that are ledges as non-walkable."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:118
+msgid ""
+"If [code]true[/code], marks non-walkable spans as walkable if their maximum "
+"is within [member agent/max_climb] of a walkable neighbor."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:121
+msgid ""
+"The physics layers to scan for static colliders.\n"
+"Only used when [member geometry/parsed_geometry_type] is [constant "
+"PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:125
+msgid ""
+"Determines which type of nodes will be parsed as geometry. See [enum "
+"ParsedGeometryType] for possible values."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:128
+msgid ""
+"The source of the geometry used when baking. See [enum SourceGeometryMode] "
+"for possible values."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:131
+msgid ""
+"The name of the group to scan for geometry.\n"
+"Only used when [member geometry/source_geometry_mode] is [constant "
+"SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant "
+"SOURCE_GEOMETRY_GROUPS_EXPLICIT]."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:135
+msgid ""
+"The maximum number of vertices allowed for polygons generated during the "
+"contour to polygon conversion process."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:138
+msgid ""
+"Any regions with a size smaller than this will be merged with larger regions "
+"if possible.\n"
+"[b]Note:[/b] This value will be squared to calculate the number of cells. "
+"For example, a value of 20 will set the number of cells to 400."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:142
+msgid ""
+"The minimum size of a region for it to be created.\n"
+"[b]Note:[/b] This value will be squared to calculate the minimum number of "
+"cells allowed to form isolated island areas. For example, a value of 8 will "
+"set the number of cells to 64."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:146
+msgid ""
+"Partitioning algorithm for creating the navigation mesh polys. See [enum "
+"SamplePartitionType] for possible values."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:151
+msgid ""
+"Watershed partitioning. Generally the best choice if you precompute the "
+"navigation mesh, use this if you have large open areas."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:154
+msgid ""
+"Monotone partitioning. Use this if you want fast navigation mesh generation."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:157
+msgid ""
+"Layer partitioning. Good choice to use for tiled navigation mesh with medium "
+"and small sized tiles."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:160
+msgid "Represents the size of the [enum SamplePartitionType] enum."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:163
+msgid ""
+"Parses mesh instances as geometry. This includes [MeshInstance], [CSGShape], "
+"and [GridMap] nodes."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:166
+msgid ""
+"Parses [StaticBody] colliders as geometry. The collider should be in any of "
+"the layers specified by [member geometry/collision_mask]."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:169
+msgid ""
+"Both [constant PARSED_GEOMETRY_MESH_INSTANCES] and [constant "
+"PARSED_GEOMETRY_STATIC_COLLIDERS]."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:172
+msgid "Represents the size of the [enum ParsedGeometryType] enum."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:175
+msgid ""
+"Scans the child nodes of [NavigationMeshInstance] recursively for geometry."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:178
+msgid ""
+"Scans nodes in a group and their child nodes recursively for geometry. The "
+"group is specified by [member geometry/source_group_name]."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:181
+msgid ""
+"Uses nodes in a group for geometry. The group is specified by [member "
+"geometry/source_group_name]."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:184
+msgid "Represents the size of the [enum SourceGeometryMode] enum."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml:4
+msgid "Node that instances navigation meshes into a scenario."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml:7
+msgid ""
+"NavigationMeshInstance is a node that takes a [NavigationMesh] resource and "
+"adds it to the current scenario by creating an instance of it."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml:15
+msgid "If [code]true[/code], the navigation mesh will be used by [Navigation]."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml:18
+msgid "The [NavigationMesh] resource for the instance."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml:4
+msgid ""
+"A node that has methods to draw outlines or use indices of vertices to "
+"create navigation polygons."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml:7
+msgid ""
+"There are two ways to create polygons. Either by using the [method "
+"add_outline] method, or using the [method add_polygon] method.\n"
+"Using [method add_outline]:\n"
+"[codeblock]\n"
+"var polygon = NavigationPolygon.new()\n"
+"var outline = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
+"50), Vector2(50, 0)])\n"
+"polygon.add_outline(outline)\n"
+"polygon.make_polygons_from_outlines()\n"
+"$NavigationPolygonInstance.navpoly = polygon\n"
+"[/codeblock]\n"
+"Using [method add_polygon] and indices of the vertices array.\n"
+"[codeblock]\n"
+"var polygon = NavigationPolygon.new()\n"
+"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
+"50), Vector2(50, 0)])\n"
+"polygon.set_vertices(vertices)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
+"polygon.add_polygon(indices)\n"
+"$NavigationPolygonInstance.navpoly = polygon\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml:34
+msgid ""
+"Appends a [PoolVector2Array] that contains the vertices of an outline to the "
+"internal array that contains all the outlines. You have to call [method "
+"make_polygons_from_outlines] in order for this array to be converted to "
+"polygons that the engine will use."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml:42
+msgid ""
+"Adds a [PoolVector2Array] that contains the vertices of an outline to the "
+"internal array that contains all the outlines at a fixed position. You have "
+"to call [method make_polygons_from_outlines] in order for this array to be "
+"converted to polygons that the engine will use."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml:55
+msgid ""
+"Clears the array of the outlines, but it doesn't clear the vertices and the "
+"polygons that were created by them."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml:61
+msgid ""
+"Clears the array of polygons, but it doesn't clear the array of outlines and "
+"vertices."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml:68
+msgid ""
+"Returns a [PoolVector2Array] containing the vertices of an outline that was "
+"created in the editor or by script."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml:74
+msgid ""
+"Returns the number of outlines that were created in the editor or by script."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml:87
+msgid "Returns the count of all polygons."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml:93
+msgid ""
+"Returns a [PoolVector2Array] containing all the vertices being used to "
+"create the polygons."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml:99
+msgid "Creates polygons from the outlines added in the editor or by script."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml:106
+msgid ""
+"Removes an outline created in the editor or by script. You have to call "
+"[method make_polygons_from_outlines] for the polygons to update."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml:114
+msgid ""
+"Changes an outline created in the editor or by script. You have to call "
+"[method make_polygons_from_outlines] for the polygons to update."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:4
+msgid ""
+"PacketPeer implementation using the [url=http://enet.bespin.org/index."
+"html]ENet[/url] library."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:7
+msgid ""
+"A PacketPeer implementation that should be passed to [member SceneTree."
+"network_peer] after being initialized as either a client or server. Events "
+"can then be handled by connecting to [SceneTree] signals.\n"
+"ENet's purpose is to provide a relatively thin, simple and robust network "
+"communication layer on top of UDP (User Datagram Protocol).\n"
+"[b]Note:[/b] ENet only uses UDP, not TCP. When forwarding the server port to "
+"make your server accessible on the public Internet, you only need to forward "
+"the server port in UDP. You can use the [UPNP] class to try to forward the "
+"server port automatically when starting the server."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:12
+#: doc/classes/NetworkedMultiplayerPeer.xml:11
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/networking/"
+"high_level_multiplayer.html"
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:13
+msgid "http://enet.bespin.org/usergroup0.html"
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:20
+msgid ""
+"Closes the connection. Ignored if no connection is currently established. If "
+"this is a server it tries to notify all clients before forcibly "
+"disconnecting them. If this is a client it simply closes the connection to "
+"the server."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:31
+msgid ""
+"Create client that connects to a server at [code]address[/code] using "
+"specified [code]port[/code]. The given address needs to be either a fully "
+"qualified domain name (e.g. [code]\"www.example.com\"[/code]) or an IP "
+"address in IPv4 or IPv6 format (e.g. [code]\"192.168.1.1\"[/code]). The "
+"[code]port[/code] is the port the server is listening on. The "
+"[code]in_bandwidth[/code] and [code]out_bandwidth[/code] parameters can be "
+"used to limit the incoming and outgoing bandwidth to the given number of "
+"bytes per second. The default of 0 means unlimited bandwidth. Note that ENet "
+"will strategically drop packets on specific sides of a connection between "
+"peers to ensure the peer's bandwidth is not overwhelmed. The bandwidth "
+"parameters also determine the window size of a connection which limits the "
+"amount of reliable packets that may be in transit at any given time. Returns "
+"[constant OK] if a client was created, [constant ERR_ALREADY_IN_USE] if this "
+"NetworkedMultiplayerENet instance already has an open connection (in which "
+"case you need to call [method close_connection] first) or [constant "
+"ERR_CANT_CREATE] if the client could not be created. If [code]client_port[/"
+"code] is specified, the client will also listen to the given port; this is "
+"useful for some NAT traversal techniques."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:41
+msgid ""
+"Create server that listens to connections via [code]port[/code]. The port "
+"needs to be an available, unused port between 0 and 65535. Note that ports "
+"below 1024 are privileged and may require elevated permissions depending on "
+"the platform. To change the interface the server listens on, use [method "
+"set_bind_ip]. The default IP is the wildcard [code]\"*\"[/code], which "
+"listens on all available interfaces. [code]max_clients[/code] is the maximum "
+"number of clients that are allowed at once, any number up to 4095 may be "
+"used, although the achievable number of simultaneous clients may be far "
+"lower and depends on the application. For additional details on the "
+"bandwidth parameters, see [method create_client]. Returns [constant OK] if a "
+"server was created, [constant ERR_ALREADY_IN_USE] if this "
+"NetworkedMultiplayerENet instance already has an open connection (in which "
+"case you need to call [method close_connection] first) or [constant "
+"ERR_CANT_CREATE] if the server could not be created."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:49
+msgid ""
+"Disconnect the given peer. If \"now\" is set to [code]true[/code], the "
+"connection will be closed immediately without flushing queued messages."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:55
+msgid ""
+"Returns the channel of the last packet fetched via [method PacketPeer."
+"get_packet]."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:61
+msgid ""
+"Returns the channel of the next packet that will be retrieved via [method "
+"PacketPeer.get_packet]."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:68
+#: modules/websocket/doc_classes/WebSocketServer.xml:27
+msgid "Returns the IP address of the given peer."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:75
+#: modules/websocket/doc_classes/WebSocketServer.xml:34
+msgid "Returns the remote port of the given peer."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:82
+msgid ""
+"The IP used when creating a server. This is set to the wildcard [code]\"*\"[/"
+"code] by default, which binds to all available interfaces. The given IP "
+"needs to be in IPv4 or IPv6 address format, for example: "
+"[code]\"192.168.1.1\"[/code]."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:89
+msgid ""
+"Configure the [X509Certificate] to use when [member use_dtls] is [code]true[/"
+"code]. For servers, you must also setup the [CryptoKey] via [method "
+"set_dtls_key]."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:96
+msgid ""
+"Configure the [CryptoKey] to use when [member use_dtls] is [code]true[/"
+"code]. Remember to also call [method set_dtls_certificate] to setup your "
+"[X509Certificate]."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:106
+msgid ""
+"Sets the timeout parameters for a peer.The timeout parameters control how "
+"and when a peer will timeout from a failure to acknowledge reliable traffic. "
+"Timeout values are expressed in milliseconds.\n"
+"The [code]timeout_limit[/code] is a factor that, multiplied by a value based "
+"on the average round trip time, will determine the timeout limit for a "
+"reliable packet. When that limit is reached, the timeout will be doubled, "
+"and the peer will be disconnected if that limit has reached "
+"[code]timeout_min[/code]. The [code]timeout_max[/code] parameter, on the "
+"other hand, defines a fixed timeout for which any packet must be "
+"acknowledged or the peer will be dropped."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:113
+msgid ""
+"Enforce ordered packets when using [constant NetworkedMultiplayerPeer."
+"TRANSFER_MODE_UNRELIABLE] (thus behaving similarly to [constant "
+"NetworkedMultiplayerPeer.TRANSFER_MODE_UNRELIABLE_ORDERED]). This is the "
+"only way to use ordering with the RPC system."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:116
+msgid ""
+"The number of channels to be used by ENet. Channels are used to separate "
+"different kinds of data. In reliable or ordered mode, for example, the "
+"packet delivery order is ensured on a per-channel basis. This is done to "
+"combat latency and reduces ordering restrictions on packets. The delivery "
+"status of a packet in one channel won't stall the delivery of other packets "
+"in another channel."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:119
+msgid ""
+"The compression method used for network packets. These have different "
+"tradeoffs of compression speed versus bandwidth, you may need to test which "
+"one works best for your use case if you use compression at all.\n"
+"[b]Note:[/b] Most games' network design involve sending many small packets "
+"frequently (smaller than 4 KB each). If in doubt, it is recommended to keep "
+"the default compression algorithm as it works best on these small packets.\n"
+"[b]Note:[/b] [member compression_mode] must be set to the same value on both "
+"the server and all its clients. Clients will fail to connect if the [member "
+"compression_mode] set on the client differs from the one set on the server. "
+"Prior to Godot 3.4, the default [member compression_mode] was [constant "
+"COMPRESS_NONE]. Nonetheless, mixing engine versions between clients and "
+"server is not recommended and not officially supported."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:124
+msgid ""
+"The hostname used for DTLS verification, to be compared against the \"CN\" "
+"value in the certificate provided by the server.\n"
+"When set to an empty string, the [code]address[/code] parameter passed to "
+"[method create_client] is used instead."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:128
+msgid ""
+"Enable or disable certificate verification when [member use_dtls] "
+"[code]true[/code]."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:132
+msgid ""
+"Enable or disable the server feature that notifies clients of other peers' "
+"connection/disconnection, and relays messages between them. When this option "
+"is [code]false[/code], clients won't be automatically notified of other "
+"peers and won't be able to send them packets through the server."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:135
+msgid ""
+"Set the default channel to be used to transfer data. By default, this value "
+"is [code]-1[/code] which means that ENet will only use 2 channels: one for "
+"reliable packets, and one for unreliable packets. The channel [code]0[/code] "
+"is reserved and cannot be used. Setting this member to any value between "
+"[code]0[/code] and [member channel_count] (excluded) will force ENet to use "
+"that channel for sending data. See [member channel_count] for more "
+"information about ENet channels."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:139
+msgid ""
+"When enabled, the client or server created by this peer, will use "
+"[PacketPeerDTLS] instead of raw UDP sockets for communicating with the "
+"remote peer. This will make the communication encrypted with DTLS at the "
+"cost of higher resource usage and potentially larger packet size.\n"
+"[b]Note:[/b] When creating a DTLS server, make sure you setup the key/"
+"certificate pair via [method set_dtls_key] and [method "
+"set_dtls_certificate]. For DTLS clients, have a look at the [member "
+"dtls_verify] option, and configure the certificate accordingly via [method "
+"set_dtls_certificate]."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:145
+msgid ""
+"No compression. This uses the most bandwidth, but has the upside of "
+"requiring the fewest CPU resources. This option may also be used to make "
+"network debugging using tools like Wireshark easier."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:148
+msgid ""
+"ENet's built-in range encoding. Works well on small packets, but is not the "
+"most efficient algorithm on packets larger than 4 KB."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:151
+msgid ""
+"[url=http://fastlz.org/]FastLZ[/url] compression. This option uses less CPU "
+"resources compared to [constant COMPRESS_ZLIB], at the expense of using more "
+"bandwidth."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:154
+msgid ""
+"[url=https://www.zlib.net/]Zlib[/url] compression. This option uses less "
+"bandwidth compared to [constant COMPRESS_FASTLZ], at the expense of using "
+"more CPU resources. Note that this algorithm is not very efficient on "
+"packets smaller than 4 KB. Therefore, it's recommended to use other "
+"compression algorithms in most cases."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:157
+msgid "[url=https://facebook.github.io/zstd/]Zstandard[/url] compression."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:4
+msgid "A high-level network interface to simplify multiplayer interactions."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:7
+msgid ""
+"Manages the connection to network peers. Assigns unique IDs to each client "
+"connected to the server. See also [MultiplayerAPI].\n"
+"[b]Note:[/b] The high-level multiplayer API protocol is an implementation "
+"detail and isn't meant to be used by non-Godot servers. It may change "
+"without notice."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:12
+msgid "https://godotengine.org/asset-library/asset/537"
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:18
+msgid ""
+"Returns the current state of the connection. See [enum ConnectionStatus]."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:24
+msgid ""
+"Returns the ID of the [NetworkedMultiplayerPeer] who sent the most recent "
+"packet."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:30
+msgid "Returns the ID of this [NetworkedMultiplayerPeer]."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:36
+msgid "Waits up to 1 second to receive a new network event."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:43
+msgid ""
+"Sets the peer to which packets will be sent.\n"
+"The [code]id[/code] can be one of: [constant TARGET_PEER_BROADCAST] to send "
+"to all connected peers, [constant TARGET_PEER_SERVER] to send to the peer "
+"acting as server, a valid peer ID to send to that specific peer, a negative "
+"peer ID to send to all peers except that one. By default, the target peer is "
+"[constant TARGET_PEER_BROADCAST]."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:50
+msgid ""
+"If [code]true[/code], this [NetworkedMultiplayerPeer] refuses new "
+"connections."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:53
+msgid ""
+"The manner in which to send packets to the [code]target_peer[/code]. See "
+"[enum TransferMode]."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:59
+msgid "Emitted when a connection attempt fails."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:64
+msgid "Emitted when a connection attempt succeeds."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:70
+msgid "Emitted by the server when a client connects."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:76
+msgid "Emitted by the server when a client disconnects."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:81
+msgid "Emitted by clients when the server disconnects."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:87
+msgid ""
+"Packets are not acknowledged, no resend attempts are made for lost packets. "
+"Packets may arrive in any order. Potentially faster than [constant "
+"TRANSFER_MODE_UNRELIABLE_ORDERED]. Use for non-critical data, and always "
+"consider whether the order matters."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:90
+msgid ""
+"Packets are not acknowledged, no resend attempts are made for lost packets. "
+"Packets are received in the order they were sent in. Potentially faster than "
+"[constant TRANSFER_MODE_RELIABLE]. Use for non-critical data or data that "
+"would be outdated if received late due to resend attempt(s) anyway, for "
+"example movement and positional data."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:93
+msgid ""
+"Packets must be received and resend attempts should be made until the "
+"packets are acknowledged. Packets must be received in the order they were "
+"sent in. Most reliable transfer mode, but potentially the slowest due to the "
+"overhead. Use for critical data that must be transmitted and arrive in "
+"order, for example an ability being triggered or a chat message. Consider "
+"carefully if the information really is critical, and use sparingly."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:96
+msgid "The ongoing connection disconnected."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:99
+msgid "A connection attempt is ongoing."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:102
+msgid "The connection attempt succeeded."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:105
+msgid "Packets are sent to the server and then redistributed to other peers."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:108
+msgid "Packets are sent to the server alone."
+msgstr ""
+
+#: doc/classes/NinePatchRect.xml:4
+msgid ""
+"Scalable texture-based frame that tiles the texture's centers and sides, but "
+"keeps the corners' original size. Perfect for panels and dialog boxes."
+msgstr ""
+
+#: doc/classes/NinePatchRect.xml:7
+msgid ""
+"Also known as 9-slice panels, NinePatchRect produces clean panels of any "
+"size, based on a small texture. To do so, it splits the texture in a 3×3 "
+"grid. When you scale the node, it tiles the texture's sides horizontally or "
+"vertically, the center on both axes but it doesn't scale or tile the corners."
+msgstr ""
+
+#: doc/classes/NinePatchRect.xml:16
+msgid ""
+"Returns the size of the margin identified by the given [enum Margin] "
+"constant."
+msgstr ""
+
+#: doc/classes/NinePatchRect.xml:24
+msgid ""
+"Sets the size of the margin identified by the given [enum Margin] constant "
+"to [code]value[/code] in pixels."
+msgstr ""
+
+#: doc/classes/NinePatchRect.xml:30
+msgid ""
+"The stretch mode to use for horizontal stretching/tiling. See [enum "
+"NinePatchRect.AxisStretchMode] for possible values."
+msgstr ""
+
+#: doc/classes/NinePatchRect.xml:33
+msgid ""
+"The stretch mode to use for vertical stretching/tiling. See [enum "
+"NinePatchRect.AxisStretchMode] for possible values."
+msgstr ""
+
+#: doc/classes/NinePatchRect.xml:36
+msgid ""
+"If [code]true[/code], draw the panel's center. Else, only draw the 9-slice's "
+"borders."
+msgstr ""
+
+#: doc/classes/NinePatchRect.xml:40
+msgid ""
+"The height of the 9-slice's bottom row. A margin of 16 means the 9-slice's "
+"bottom corners and side will have a height of 16 pixels. You can set all 4 "
+"margin values individually to create panels with non-uniform borders."
+msgstr ""
+
+#: doc/classes/NinePatchRect.xml:43
+msgid ""
+"The width of the 9-slice's left column. A margin of 16 means the 9-slice's "
+"left corners and side will have a width of 16 pixels. You can set all 4 "
+"margin values individually to create panels with non-uniform borders."
+msgstr ""
+
+#: doc/classes/NinePatchRect.xml:46
+msgid ""
+"The width of the 9-slice's right column. A margin of 16 means the 9-slice's "
+"right corners and side will have a width of 16 pixels. You can set all 4 "
+"margin values individually to create panels with non-uniform borders."
+msgstr ""
+
+#: doc/classes/NinePatchRect.xml:49
+msgid ""
+"The height of the 9-slice's top row. A margin of 16 means the 9-slice's top "
+"corners and side will have a height of 16 pixels. You can set all 4 margin "
+"values individually to create panels with non-uniform borders."
+msgstr ""
+
+#: doc/classes/NinePatchRect.xml:52
+msgid ""
+"Rectangular region of the texture to sample from. If you're working with an "
+"atlas, use this property to define the area the 9-slice should use. All "
+"other properties are relative to this one. If the rect is empty, "
+"NinePatchRect will use the whole texture."
+msgstr ""
+
+#: doc/classes/NinePatchRect.xml:55
+msgid "The node's texture resource."
+msgstr ""
+
+#: doc/classes/NinePatchRect.xml:61
+msgid "Emitted when the node's texture changes."
+msgstr ""
+
+#: doc/classes/NinePatchRect.xml:67
+msgid ""
+"Stretches the center texture across the NinePatchRect. This may cause the "
+"texture to be distorted."
+msgstr ""
+
+#: doc/classes/NinePatchRect.xml:70
+msgid ""
+"Repeats the center texture across the NinePatchRect. This won't cause any "
+"visible distortion. The texture must be seamless for this to work without "
+"displaying artifacts between edges.\n"
+"[b]Note:[/b] Only supported when using the GLES3 renderer. When using the "
+"GLES2 renderer, this will behave like [constant AXIS_STRETCH_MODE_STRETCH]."
+msgstr ""
+
+#: doc/classes/NinePatchRect.xml:74
+msgid ""
+"Repeats the center texture across the NinePatchRect, but will also stretch "
+"the texture to make sure each tile is visible in full. This may cause the "
+"texture to be distorted, but less than [constant AXIS_STRETCH_MODE_STRETCH]. "
+"The texture must be seamless for this to work without displaying artifacts "
+"between edges.\n"
+"[b]Note:[/b] Only supported when using the GLES3 renderer. When using the "
+"GLES2 renderer, this will behave like [constant AXIS_STRETCH_MODE_STRETCH]."
+msgstr ""
+
+#: doc/classes/Node.xml:4
+msgid "Base class for all [i]scene[/i] objects."
+msgstr ""
+
+#: doc/classes/Node.xml:7
+msgid ""
+"Nodes are Godot's building blocks. They can be assigned as the child of "
+"another node, resulting in a tree arrangement. A given node can contain any "
+"number of nodes as children with the requirement that all siblings (direct "
+"children of a node) should have unique names.\n"
+"A tree of nodes is called a [i]scene[/i]. Scenes can be saved to the disk "
+"and then instanced into other scenes. This allows for very high flexibility "
+"in the architecture and data model of Godot projects.\n"
+"[b]Scene tree:[/b] The [SceneTree] contains the active tree of nodes. When a "
+"node is added to the scene tree, it receives the [constant "
+"NOTIFICATION_ENTER_TREE] notification and its [method _enter_tree] callback "
+"is triggered. Child nodes are always added [i]after[/i] their parent node, i."
+"e. the [method _enter_tree] callback of a parent node will be triggered "
+"before its child's.\n"
+"Once all nodes have been added in the scene tree, they receive the [constant "
+"NOTIFICATION_READY] notification and their respective [method _ready] "
+"callbacks are triggered. For groups of nodes, the [method _ready] callback "
+"is called in reverse order, starting with the children and moving up to the "
+"parent nodes.\n"
+"This means that when adding a node to the scene tree, the following order "
+"will be used for the callbacks: [method _enter_tree] of the parent, [method "
+"_enter_tree] of the children, [method _ready] of the children and finally "
+"[method _ready] of the parent (recursively for the entire scene tree).\n"
+"[b]Processing:[/b] Nodes can override the \"process\" state, so that they "
+"receive a callback on each frame requesting them to process (do something). "
+"Normal processing (callback [method _process], toggled with [method "
+"set_process]) happens as fast as possible and is dependent on the frame "
+"rate, so the processing time [i]delta[/i] (in seconds) is passed as an "
+"argument. Physics processing (callback [method _physics_process], toggled "
+"with [method set_physics_process]) happens a fixed number of times per "
+"second (60 by default) and is useful for code related to the physics "
+"engine.\n"
+"Nodes can also process input events. When present, the [method _input] "
+"function will be called for each input that the program receives. In many "
+"cases, this can be overkill (unless used for simple projects), and the "
+"[method _unhandled_input] function might be preferred; it is called when the "
+"input event was not handled by anyone else (typically, GUI [Control] nodes), "
+"ensuring that the node only receives the events that were meant for it.\n"
+"To keep track of the scene hierarchy (especially when instancing scenes into "
+"other scenes), an \"owner\" can be set for the node with the [member owner] "
+"property. This keeps track of who instanced what. This is mostly useful when "
+"writing editors and tools, though.\n"
+"Finally, when a node is freed with [method Object.free] or [method "
+"queue_free], it will also free all its children.\n"
+"[b]Groups:[/b] Nodes can be added to as many groups as you want to be easy "
+"to manage, you could create groups like \"enemies\" or \"collectables\" for "
+"example, depending on your game. See [method add_to_group], [method "
+"is_in_group] and [method remove_from_group]. You can then retrieve all nodes "
+"in these groups, iterate them and even call methods on groups via the "
+"methods on [SceneTree].\n"
+"[b]Networking with nodes:[/b] After connecting to a server (or making one, "
+"see [NetworkedMultiplayerENet]), it is possible to use the built-in RPC "
+"(remote procedure call) system to communicate over the network. By calling "
+"[method rpc] with a method name, it will be called locally and in all "
+"connected peers (peers = clients and the server that accepts connections). "
+"To identify which node receives the RPC call, Godot will use its [NodePath] "
+"(make sure node names are the same on all peers). Also, take a look at the "
+"high-level networking tutorial and corresponding demos."
+msgstr ""
+
+#: doc/classes/Node.xml:20
+msgid ""
+"https://docs.godotengine.org/en/3.4/getting_started/step_by_step/"
+"scenes_and_nodes.html"
+msgstr ""
+
+#: doc/classes/Node.xml:21
+msgid "https://github.com/godotengine/godot-demo-projects/"
+msgstr ""
+
+#: doc/classes/Node.xml:27
+msgid ""
+"Called when the node enters the [SceneTree] (e.g. upon instancing, scene "
+"changing, or after calling [method add_child] in a script). If the node has "
+"children, its [method _enter_tree] callback will be called first, and then "
+"that of the children.\n"
+"Corresponds to the [constant NOTIFICATION_ENTER_TREE] notification in "
+"[method Object._notification]."
+msgstr ""
+
+#: doc/classes/Node.xml:34
+msgid ""
+"Called when the node is about to leave the [SceneTree] (e.g. upon freeing, "
+"scene changing, or after calling [method remove_child] in a script). If the "
+"node has children, its [method _exit_tree] callback will be called last, "
+"after all its children have left the tree.\n"
+"Corresponds to the [constant NOTIFICATION_EXIT_TREE] notification in [method "
+"Object._notification] and signal [signal tree_exiting]. To get notified when "
+"the node has already left the active tree, connect to the [signal "
+"tree_exited]."
+msgstr ""
+
+#: doc/classes/Node.xml:41
+msgid ""
+"The string returned from this method is displayed as a warning in the Scene "
+"Dock if the script that overrides it is a [code]tool[/code] script.\n"
+"Returning an empty string produces no warning.\n"
+"Call [method update_configuration_warning] when the warning needs to be "
+"updated for this node."
+msgstr ""
+
+#: doc/classes/Node.xml:50
+msgid ""
+"Called when there is an input event. The input event propagates up through "
+"the node tree until a node consumes it.\n"
+"It is only called if input processing is enabled, which is done "
+"automatically if this method is overridden, and can be toggled with [method "
+"set_process_input].\n"
+"To consume the input event and stop it propagating further to other nodes, "
+"[method SceneTree.set_input_as_handled] can be called.\n"
+"For gameplay input, [method _unhandled_input] and [method "
+"_unhandled_key_input] are usually a better fit as they allow the GUI to "
+"intercept the events first.\n"
+"[b]Note:[/b] This method is only called if the node is present in the scene "
+"tree (i.e. if it's not orphan)."
+msgstr ""
+
+#: doc/classes/Node.xml:61
+msgid ""
+"Called during the physics processing step of the main loop. Physics "
+"processing means that the frame rate is synced to the physics, i.e. the "
+"[code]delta[/code] variable should be constant. [code]delta[/code] is in "
+"seconds.\n"
+"It is only called if physics processing is enabled, which is done "
+"automatically if this method is overridden, and can be toggled with [method "
+"set_physics_process].\n"
+"Corresponds to the [constant NOTIFICATION_PHYSICS_PROCESS] notification in "
+"[method Object._notification].\n"
+"[b]Note:[/b] This method is only called if the node is present in the scene "
+"tree (i.e. if it's not orphan)."
+msgstr ""
+
+#: doc/classes/Node.xml:71
+msgid ""
+"Called during the processing step of the main loop. Processing happens at "
+"every frame and as fast as possible, so the [code]delta[/code] time since "
+"the previous frame is not constant. [code]delta[/code] is in seconds.\n"
+"It is only called if processing is enabled, which is done automatically if "
+"this method is overridden, and can be toggled with [method set_process].\n"
+"Corresponds to the [constant NOTIFICATION_PROCESS] notification in [method "
+"Object._notification].\n"
+"[b]Note:[/b] This method is only called if the node is present in the scene "
+"tree (i.e. if it's not orphan)."
+msgstr ""
+
+#: doc/classes/Node.xml:80
+msgid ""
+"Called when the node is \"ready\", i.e. when both the node and its children "
+"have entered the scene tree. If the node has children, their [method _ready] "
+"callbacks get triggered first, and the parent node will receive the ready "
+"notification afterwards.\n"
+"Corresponds to the [constant NOTIFICATION_READY] notification in [method "
+"Object._notification]. See also the [code]onready[/code] keyword for "
+"variables.\n"
+"Usually used for initialization. For even earlier initialization, [method "
+"Object._init] may be used. See also [method _enter_tree].\n"
+"[b]Note:[/b] [method _ready] may be called only once for each node. After "
+"removing a node from the scene tree and adding again, [code]_ready[/code] "
+"will not be called for the second time. This can be bypassed with requesting "
+"another call with [method request_ready], which may be called anywhere "
+"before adding the node again."
+msgstr ""
+
+#: doc/classes/Node.xml:90
+msgid ""
+"Called when an [InputEvent] hasn't been consumed by [method _input] or any "
+"GUI. The input event propagates up through the node tree until a node "
+"consumes it.\n"
+"It is only called if unhandled input processing is enabled, which is done "
+"automatically if this method is overridden, and can be toggled with [method "
+"set_process_unhandled_input].\n"
+"To consume the input event and stop it propagating further to other nodes, "
+"[method SceneTree.set_input_as_handled] can be called.\n"
+"For gameplay input, this and [method _unhandled_key_input] are usually a "
+"better fit than [method _input] as they allow the GUI to intercept the "
+"events first.\n"
+"[b]Note:[/b] This method is only called if the node is present in the scene "
+"tree (i.e. if it's not orphan)."
+msgstr ""
+
+#: doc/classes/Node.xml:101
+msgid ""
+"Called when an [InputEventKey] hasn't been consumed by [method _input] or "
+"any GUI. The input event propagates up through the node tree until a node "
+"consumes it.\n"
+"It is only called if unhandled key input processing is enabled, which is "
+"done automatically if this method is overridden, and can be toggled with "
+"[method set_process_unhandled_key_input].\n"
+"To consume the input event and stop it propagating further to other nodes, "
+"[method SceneTree.set_input_as_handled] can be called.\n"
+"For gameplay input, this and [method _unhandled_input] are usually a better "
+"fit than [method _input] as they allow the GUI to intercept the events "
+"first.\n"
+"[b]Note:[/b] This method is only called if the node is present in the scene "
+"tree (i.e. if it's not orphan)."
+msgstr ""
+
+#: doc/classes/Node.xml:113
+msgid ""
+"Adds a child node. Nodes can have any number of children, but every child "
+"must have a unique name. Child nodes are automatically deleted when the "
+"parent node is deleted, so an entire scene can be removed by deleting its "
+"topmost node.\n"
+"If [code]legible_unique_name[/code] is [code]true[/code], the child node "
+"will have a human-readable name based on the name of the node being "
+"instanced instead of its type.\n"
+"[b]Note:[/b] If the child node already has a parent, the function will fail. "
+"Use [method remove_child] first to remove the node from its current parent. "
+"For example:\n"
+"[codeblock]\n"
+"if child_node.get_parent():\n"
+" child_node.get_parent().remove_child(child_node)\n"
+"add_child(child_node)\n"
+"[/codeblock]\n"
+"[b]Note:[/b] If you want a child to be persisted to a [PackedScene], you "
+"must set [member owner] in addition to calling [method add_child]. This is "
+"typically relevant for [url=https://godot.readthedocs.io/en/3.2/tutorials/"
+"misc/running_code_in_the_editor.html]tool scripts[/url] and [url=https://"
+"godot.readthedocs.io/en/latest/tutorials/plugins/editor/index.html]editor "
+"plugins[/url]. If [method add_child] is called without setting [member "
+"owner], the newly added [Node] will not be visible in the scene tree, though "
+"it will be visible in the 2D/3D view."
+msgstr ""
+
+#: doc/classes/Node.xml:130
+msgid ""
+"Adds [code]child_node[/code] as a child. The child is placed below the given "
+"[code]node[/code] in the list of children.\n"
+"If [code]legible_unique_name[/code] is [code]true[/code], the child node "
+"will have a human-readable name based on the name of the node being "
+"instanced instead of its type."
+msgstr ""
+
+#: doc/classes/Node.xml:139
+msgid ""
+"Adds the node to a group. Groups are helpers to name and organize a subset "
+"of nodes, for example \"enemies\" or \"collectables\". A node can be in any "
+"number of groups. Nodes can be assigned a group at any time, but will not be "
+"added until they are inside the scene tree (see [method is_inside_tree]). "
+"See notes in the description, and the group methods in [SceneTree].\n"
+"The [code]persistent[/code] option is used when packing node to "
+"[PackedScene] and saving to file. Non-persistent groups aren't stored.\n"
+"[b]Note:[/b] For performance reasons, the order of node groups is [i]not[/i] "
+"guaranteed. The order of node groups should not be relied upon as it can "
+"vary across project runs."
+msgstr ""
+
+#: doc/classes/Node.xml:147
+msgid ""
+"Returns [code]true[/code] if the node can process while the scene tree is "
+"paused (see [member pause_mode]). Always returns [code]true[/code] if the "
+"scene tree is not paused, and [code]false[/code] if the node is not in the "
+"tree."
+msgstr ""
+
+#: doc/classes/Node.xml:154
+msgid ""
+"Duplicates the node, returning a new node.\n"
+"You can fine-tune the behavior using the [code]flags[/code] (see [enum "
+"DuplicateFlags]).\n"
+"[b]Note:[/b] It will not work properly if the node contains a script with "
+"constructor arguments (i.e. needs to supply arguments to [method Object."
+"_init] method). In that case, the node will be duplicated without a script."
+msgstr ""
+
+#: doc/classes/Node.xml:165
+msgid ""
+"Finds a descendant of this node whose name matches [code]mask[/code] as in "
+"[method String.match] (i.e. case-sensitive, but [code]\"*\"[/code] matches "
+"zero or more characters and [code]\"?\"[/code] matches any single character "
+"except [code]\".\"[/code]).\n"
+"[b]Note:[/b] It does not match against the full path, just against "
+"individual node names.\n"
+"If [code]owned[/code] is [code]true[/code], this method only finds nodes "
+"whose owner is this node. This is especially important for scenes "
+"instantiated through a script, because those scenes don't have an owner.\n"
+"[b]Note:[/b] As this method walks through all the descendants of the node, "
+"it is the slowest way to get a reference to another node. Whenever possible, "
+"consider using [method get_node] instead. To avoid using [method find_node] "
+"too often, consider caching the node reference into a variable."
+msgstr ""
+
+#: doc/classes/Node.xml:175
+msgid ""
+"Finds the first parent of the current node whose name matches [code]mask[/"
+"code] as in [method String.match] (i.e. case-sensitive, but [code]\"*\"[/"
+"code] matches zero or more characters and [code]\"?\"[/code] matches any "
+"single character except [code]\".\"[/code]).\n"
+"[b]Note:[/b] It does not match against the full path, just against "
+"individual node names.\n"
+"[b]Note:[/b] As this method walks upwards in the scene tree, it can be slow "
+"in large, deeply nested scene trees. Whenever possible, consider using "
+"[method get_node] instead. To avoid using [method find_parent] too often, "
+"consider caching the node reference into a variable."
+msgstr ""
+
+#: doc/classes/Node.xml:184
+msgid ""
+"Returns a child node by its index (see [method get_child_count]). This "
+"method is often used for iterating all children of a node.\n"
+"To access a child node via its name, use [method get_node]."
+msgstr ""
+
+#: doc/classes/Node.xml:191
+msgid "Returns the number of child nodes."
+msgstr ""
+
+#: doc/classes/Node.xml:197
+msgid "Returns an array of references to node's children."
+msgstr ""
+
+#: doc/classes/Node.xml:203
+msgid ""
+"Returns an array listing the groups that the node is a member of.\n"
+"[b]Note:[/b] For performance reasons, the order of node groups is [i]not[/i] "
+"guaranteed. The order of node groups should not be relied upon as it can "
+"vary across project runs."
+msgstr ""
+
+#: doc/classes/Node.xml:210
+msgid ""
+"Returns the node's index, i.e. its position among the siblings of its parent."
+msgstr ""
+
+#: doc/classes/Node.xml:216
+msgid ""
+"Returns the peer ID of the network master for this node. See [method "
+"set_network_master]."
+msgstr ""
+
+#: doc/classes/Node.xml:223
+msgid ""
+"Fetches a node. The [NodePath] can be either a relative path (from the "
+"current node) or an absolute path (in the scene tree) to a node. If the path "
+"does not exist, a [code]null instance[/code] is returned and an error is "
+"logged. Attempts to access methods on the return value will result in an "
+"\"Attempt to call <method> on a null instance.\" error.\n"
+"[b]Note:[/b] Fetching absolute paths only works when the node is inside the "
+"scene tree (see [method is_inside_tree]).\n"
+"[b]Example:[/b] Assume your current node is Character and the following "
+"tree:\n"
+"[codeblock]\n"
+"/root\n"
+"/root/Character\n"
+"/root/Character/Sword\n"
+"/root/Character/Backpack/Dagger\n"
+"/root/MyGame\n"
+"/root/Swamp/Alligator\n"
+"/root/Swamp/Mosquito\n"
+"/root/Swamp/Goblin\n"
+"[/codeblock]\n"
+"Possible paths are:\n"
+"[codeblock]\n"
+"get_node(\"Sword\")\n"
+"get_node(\"Backpack/Dagger\")\n"
+"get_node(\"../Swamp/Alligator\")\n"
+"get_node(\"/root/MyGame\")\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Node.xml:249
+msgid ""
+"Fetches a node and one of its resources as specified by the [NodePath]'s "
+"subname (e.g. [code]Area2D/CollisionShape2D:shape[/code]). If several nested "
+"resources are specified in the [NodePath], the last one will be fetched.\n"
+"The return value is an array of size 3: the first index points to the [Node] "
+"(or [code]null[/code] if not found), the second index points to the "
+"[Resource] (or [code]null[/code] if not found), and the third index is the "
+"remaining [NodePath], if any.\n"
+"For example, assuming that [code]Area2D/CollisionShape2D[/code] is a valid "
+"node and that its [code]shape[/code] property has been assigned a "
+"[RectangleShape2D] resource, one could have this kind of output:\n"
+"[codeblock]\n"
+"print(get_node_and_resource(\"Area2D/CollisionShape2D\")) # "
+"[[CollisionShape2D:1161], Null, ]\n"
+"print(get_node_and_resource(\"Area2D/CollisionShape2D:shape\")) # "
+"[[CollisionShape2D:1161], [RectangleShape2D:1156], ]\n"
+"print(get_node_and_resource(\"Area2D/CollisionShape2D:shape:extents\")) # "
+"[[CollisionShape2D:1161], [RectangleShape2D:1156], :extents]\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Node.xml:263
+msgid ""
+"Similar to [method get_node], but does not log an error if [code]path[/code] "
+"does not point to a valid [Node]."
+msgstr ""
+
+#: doc/classes/Node.xml:269
+msgid ""
+"Returns the parent node of the current node, or a [code]null instance[/code] "
+"if the node lacks a parent."
+msgstr ""
+
+#: doc/classes/Node.xml:275
+msgid ""
+"Returns the absolute path of the current node. This only works if the "
+"current node is inside the scene tree (see [method is_inside_tree])."
+msgstr ""
+
+#: doc/classes/Node.xml:282
+msgid ""
+"Returns the relative [NodePath] from this node to the specified [code]node[/"
+"code]. Both nodes must be in the same scene or the function will fail."
+msgstr ""
+
+#: doc/classes/Node.xml:288
+msgid ""
+"Returns the time elapsed (in seconds) since the last physics-bound frame "
+"(see [method _physics_process]). This is always a constant value in physics "
+"processing unless the frames per second is changed via [member Engine."
+"iterations_per_second]."
+msgstr ""
+
+#: doc/classes/Node.xml:294
+msgid ""
+"Returns the node's order in the scene tree branch. For example, if called on "
+"the first child node the position is [code]0[/code]."
+msgstr ""
+
+#: doc/classes/Node.xml:300
+msgid ""
+"Returns the time elapsed (in seconds) since the last process callback. This "
+"value may vary from frame to frame."
+msgstr ""
+
+#: doc/classes/Node.xml:306
+msgid ""
+"Returns [code]true[/code] if this is an instance load placeholder. See "
+"[InstancePlaceholder]."
+msgstr ""
+
+#: doc/classes/Node.xml:312
+msgid "Returns the [SceneTree] that contains this node."
+msgstr ""
+
+#: doc/classes/Node.xml:318
+msgid "Returns the node's [Viewport]."
+msgstr ""
+
+#: doc/classes/Node.xml:325
+msgid ""
+"Returns [code]true[/code] if the node that the [NodePath] points to exists."
+msgstr ""
+
+#: doc/classes/Node.xml:332
+msgid ""
+"Returns [code]true[/code] if the [NodePath] points to a valid node and its "
+"subname points to a valid resource, e.g. [code]Area2D/CollisionShape2D:"
+"shape[/code]. Properties with a non-[Resource] type (e.g. nodes or primitive "
+"math types) are not considered resources."
+msgstr ""
+
+#: doc/classes/Node.xml:339
+msgid ""
+"Returns [code]true[/code] if the given node is a direct or indirect child of "
+"the current node."
+msgstr ""
+
+#: doc/classes/Node.xml:345
+msgid ""
+"Returns [code]true[/code] if the node is folded (collapsed) in the Scene "
+"dock."
+msgstr ""
+
+#: doc/classes/Node.xml:352
+msgid ""
+"Returns [code]true[/code] if the given node occurs later in the scene "
+"hierarchy than the current node."
+msgstr ""
+
+#: doc/classes/Node.xml:359
+msgid ""
+"Returns [code]true[/code] if this node is in the specified group. See notes "
+"in the description, and the group methods in [SceneTree]."
+msgstr ""
+
+#: doc/classes/Node.xml:365
+msgid ""
+"Returns [code]true[/code] if this node is currently inside a [SceneTree]."
+msgstr ""
+
+#: doc/classes/Node.xml:371
+msgid ""
+"Returns [code]true[/code] if the local system is the master of this node."
+msgstr ""
+
+#: doc/classes/Node.xml:377
+msgid ""
+"Returns [code]true[/code] if physics processing is enabled (see [method "
+"set_physics_process])."
+msgstr ""
+
+#: doc/classes/Node.xml:383
+msgid ""
+"Returns [code]true[/code] if internal physics processing is enabled (see "
+"[method set_physics_process_internal])."
+msgstr ""
+
+#: doc/classes/Node.xml:389
+msgid ""
+"Returns [code]true[/code] if processing is enabled (see [method "
+"set_process])."
+msgstr ""
+
+#: doc/classes/Node.xml:395
+msgid ""
+"Returns [code]true[/code] if the node is processing input (see [method "
+"set_process_input])."
+msgstr ""
+
+#: doc/classes/Node.xml:401
+msgid ""
+"Returns [code]true[/code] if internal processing is enabled (see [method "
+"set_process_internal])."
+msgstr ""
+
+#: doc/classes/Node.xml:407
+msgid ""
+"Returns [code]true[/code] if the node is processing unhandled input (see "
+"[method set_process_unhandled_input])."
+msgstr ""
+
+#: doc/classes/Node.xml:413
+msgid ""
+"Returns [code]true[/code] if the node is processing unhandled key input (see "
+"[method set_process_unhandled_key_input])."
+msgstr ""
+
+#: doc/classes/Node.xml:421
+msgid ""
+"Moves a child node to a different position (order) among the other children. "
+"Since calls, signals, etc are performed by tree order, changing the order of "
+"children nodes may be useful."
+msgstr ""
+
+#: doc/classes/Node.xml:427
+msgid ""
+"Prints all stray nodes (nodes outside the [SceneTree]). Used for debugging. "
+"Works only in debug builds."
+msgstr ""
+
+#: doc/classes/Node.xml:433
+msgid ""
+"Prints the tree to stdout. Used mainly for debugging purposes. This version "
+"displays the path relative to the current node, and is good for copy/pasting "
+"into the [method get_node] function.\n"
+"[b]Example output:[/b]\n"
+"[codeblock]\n"
+"TheGame\n"
+"TheGame/Menu\n"
+"TheGame/Menu/Label\n"
+"TheGame/Menu/Camera2D\n"
+"TheGame/SplashScreen\n"
+"TheGame/SplashScreen/Camera2D\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Node.xml:448
+msgid ""
+"Similar to [method print_tree], this prints the tree to stdout. This version "
+"displays a more graphical representation similar to what is displayed in the "
+"scene inspector. It is useful for inspecting larger trees.\n"
+"[b]Example output:[/b]\n"
+"[codeblock]\n"
+" â”–â•´TheGame\n"
+" â” â•´Menu\n"
+" ┃ ┠╴Label\n"
+" ┃ ┖╴Camera2D\n"
+" â”–â•´SplashScreen\n"
+" â”–â•´Camera2D\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Node.xml:466
+msgid ""
+"Calls the given method (if present) with the arguments given in [code]args[/"
+"code] on this node and recursively on all its children. If the "
+"[code]parent_first[/code] argument is [code]true[/code], the method will be "
+"called on the current node first, then on all its children. If "
+"[code]parent_first[/code] is [code]false[/code], the children will be called "
+"first."
+msgstr ""
+
+#: doc/classes/Node.xml:473
+msgid ""
+"Notifies the current node and all its children recursively by calling "
+"[method Object.notification] on all of them."
+msgstr ""
+
+#: doc/classes/Node.xml:479
+msgid ""
+"Queues a node for deletion at the end of the current frame. When deleted, "
+"all of its child nodes will be deleted as well. This method ensures it's "
+"safe to delete the node, contrary to [method Object.free]. Use [method "
+"Object.is_queued_for_deletion] to check whether a node will be deleted at "
+"the end of the frame.\n"
+"[b]Important:[/b] If you have a variable pointing to a node, it will [i]not[/"
+"i] be assigned to [code]null[/code] once the node is freed. Instead, it will "
+"point to a [i]previously freed instance[/i] and you should validate it with "
+"[method @GDScript.is_instance_valid] before attempting to call its methods "
+"or access its properties."
+msgstr ""
+
+#: doc/classes/Node.xml:486
+msgid ""
+"Moves this node to the bottom of parent node's children hierarchy. This is "
+"often useful in GUIs ([Control] nodes), because their order of drawing "
+"depends on their order in the tree. The top Node is drawn first, then any "
+"siblings below the top Node in the hierarchy are successively drawn on top "
+"of it. After using [code]raise[/code], a Control will be drawn on top of its "
+"siblings."
+msgstr ""
+
+#: doc/classes/Node.xml:492
+msgid ""
+"Removes a node and sets all its children as children of the parent node (if "
+"it exists). All event subscriptions that pass by the removed node will be "
+"unsubscribed."
+msgstr ""
+
+#: doc/classes/Node.xml:499
+msgid ""
+"Removes a child node. The node is NOT deleted and must be deleted manually.\n"
+"[b]Note:[/b] This function may set the [member owner] of the removed Node "
+"(or its descendants) to be [code]null[/code], if that [member owner] is no "
+"longer a parent or ancestor."
+msgstr ""
+
+#: doc/classes/Node.xml:507
+msgid ""
+"Removes a node from a group. See notes in the description, and the group "
+"methods in [SceneTree]."
+msgstr ""
+
+#: doc/classes/Node.xml:515
+msgid ""
+"Replaces a node in a scene by the given one. Subscriptions that pass through "
+"this node will be lost."
+msgstr ""
+
+#: doc/classes/Node.xml:521
+msgid ""
+"Requests that [code]_ready[/code] be called again. Note that the method "
+"won't be called immediately, but is scheduled for when the node is added to "
+"the scene tree again (see [method _ready]). [code]_ready[/code] is called "
+"only for the node which requested it, which means that you need to request "
+"ready for each child if you want them to call [code]_ready[/code] too (in "
+"which case, [code]_ready[/code] will be called in the same order as it would "
+"normally)."
+msgstr ""
+
+#: doc/classes/Node.xml:528
+msgid ""
+"Sends a remote procedure call request for the given [code]method[/code] to "
+"peers on the network (and locally), optionally sending all additional "
+"arguments as arguments to the method called by the RPC. The call request "
+"will only be received by nodes with the same [NodePath], including the exact "
+"same node name. Behaviour depends on the RPC configuration for the given "
+"method, see [method rpc_config]. Methods are not exposed to RPCs by default. "
+"See also [method rset] and [method rset_config] for properties. Returns an "
+"empty [Variant].\n"
+"[b]Note:[/b] You can only safely use RPCs on clients after you received the "
+"[code]connected_to_server[/code] signal from the [SceneTree]. You also need "
+"to keep track of the connection state, either by the [SceneTree] signals "
+"like [code]server_disconnected[/code] or by checking [code]SceneTree."
+"network_peer.get_connection_status() == CONNECTION_CONNECTED[/code]."
+msgstr ""
+
+#: doc/classes/Node.xml:537
+msgid ""
+"Changes the RPC mode for the given [code]method[/code] to the given "
+"[code]mode[/code]. See [enum MultiplayerAPI.RPCMode]. An alternative is "
+"annotating methods and properties with the corresponding keywords "
+"([code]remote[/code], [code]master[/code], [code]puppet[/code], "
+"[code]remotesync[/code], [code]mastersync[/code], [code]puppetsync[/code]). "
+"By default, methods are not exposed to networking (and RPCs). See also "
+"[method rset] and [method rset_config] for properties."
+msgstr ""
+
+#: doc/classes/Node.xml:545
+msgid ""
+"Sends a [method rpc] to a specific peer identified by [code]peer_id[/code] "
+"(see [method NetworkedMultiplayerPeer.set_target_peer]). Returns an empty "
+"[Variant]."
+msgstr ""
+
+#: doc/classes/Node.xml:552
+msgid ""
+"Sends a [method rpc] using an unreliable protocol. Returns an empty "
+"[Variant]."
+msgstr ""
+
+#: doc/classes/Node.xml:560
+msgid ""
+"Sends a [method rpc] to a specific peer identified by [code]peer_id[/code] "
+"using an unreliable protocol (see [method NetworkedMultiplayerPeer."
+"set_target_peer]). Returns an empty [Variant]."
+msgstr ""
+
+#: doc/classes/Node.xml:568
+msgid ""
+"Remotely changes a property's value on other peers (and locally). Behaviour "
+"depends on the RPC configuration for the given property, see [method "
+"rset_config]. See also [method rpc] for RPCs for methods, most information "
+"applies to this method as well."
+msgstr ""
+
+#: doc/classes/Node.xml:576
+msgid ""
+"Changes the RPC mode for the given [code]property[/code] to the given "
+"[code]mode[/code]. See [enum MultiplayerAPI.RPCMode]. An alternative is "
+"annotating methods and properties with the corresponding keywords "
+"([code]remote[/code], [code]master[/code], [code]puppet[/code], "
+"[code]remotesync[/code], [code]mastersync[/code], [code]puppetsync[/code]). "
+"By default, properties are not exposed to networking (and RPCs). See also "
+"[method rpc] and [method rpc_config] for methods."
+msgstr ""
+
+#: doc/classes/Node.xml:585
+msgid ""
+"Remotely changes the property's value on a specific peer identified by "
+"[code]peer_id[/code] (see [method NetworkedMultiplayerPeer.set_target_peer])."
+msgstr ""
+
+#: doc/classes/Node.xml:593
+msgid ""
+"Remotely changes the property's value on other peers (and locally) using an "
+"unreliable protocol."
+msgstr ""
+
+#: doc/classes/Node.xml:602
+msgid ""
+"Remotely changes property's value on a specific peer identified by "
+"[code]peer_id[/code] using an unreliable protocol (see [method "
+"NetworkedMultiplayerPeer.set_target_peer])."
+msgstr ""
+
+#: doc/classes/Node.xml:609
+msgid "Sets the folded state of the node in the Scene dock."
+msgstr ""
+
+#: doc/classes/Node.xml:617
+msgid ""
+"Sets the node's network master to the peer with the given peer ID. The "
+"network master is the peer that has authority over the node on the network. "
+"Useful in conjunction with the [code]master[/code] and [code]puppet[/code] "
+"keywords. Inherited from the parent node by default, which ultimately "
+"defaults to peer ID 1 (the server). If [code]recursive[/code], the given "
+"peer is recursively set as the master for all children of this node."
+msgstr ""
+
+#: doc/classes/Node.xml:624
+msgid ""
+"Enables or disables physics (i.e. fixed framerate) processing. When a node "
+"is being processed, it will receive a [constant "
+"NOTIFICATION_PHYSICS_PROCESS] at a fixed (usually 60 FPS, see [member Engine."
+"iterations_per_second] to change) interval (and the [method "
+"_physics_process] callback will be called if exists). Enabled automatically "
+"if [method _physics_process] is overridden. Any calls to this before [method "
+"_ready] will be ignored."
+msgstr ""
+
+#: doc/classes/Node.xml:631
+msgid ""
+"Enables or disables internal physics for this node. Internal physics "
+"processing happens in isolation from the normal [method _physics_process] "
+"calls and is used by some nodes internally to guarantee proper functioning "
+"even if the node is paused or physics processing is disabled for scripting "
+"([method set_physics_process]). Only useful for advanced uses to manipulate "
+"built-in nodes' behavior.\n"
+"[b]Warning:[/b] Built-in Nodes rely on the internal processing for their own "
+"logic, so changing this value from your code may lead to unexpected "
+"behavior. Script access to this internal logic is provided for specific "
+"advanced uses, but is unsafe and not supported."
+msgstr ""
+
+#: doc/classes/Node.xml:639
+msgid ""
+"Enables or disables processing. When a node is being processed, it will "
+"receive a [constant NOTIFICATION_PROCESS] on every drawn frame (and the "
+"[method _process] callback will be called if exists). Enabled automatically "
+"if [method _process] is overridden. Any calls to this before [method _ready] "
+"will be ignored."
+msgstr ""
+
+#: doc/classes/Node.xml:646
+msgid ""
+"Enables or disables input processing. This is not required for GUI controls! "
+"Enabled automatically if [method _input] is overridden. Any calls to this "
+"before [method _ready] will be ignored."
+msgstr ""
+
+#: doc/classes/Node.xml:653
+msgid ""
+"Enables or disabled internal processing for this node. Internal processing "
+"happens in isolation from the normal [method _process] calls and is used by "
+"some nodes internally to guarantee proper functioning even if the node is "
+"paused or processing is disabled for scripting ([method set_process]). Only "
+"useful for advanced uses to manipulate built-in nodes' behavior.\n"
+"[b]Warning:[/b] Built-in Nodes rely on the internal processing for their own "
+"logic, so changing this value from your code may lead to unexpected "
+"behavior. Script access to this internal logic is provided for specific "
+"advanced uses, but is unsafe and not supported."
+msgstr ""
+
+#: doc/classes/Node.xml:661
+msgid ""
+"Enables unhandled input processing. This is not required for GUI controls! "
+"It enables the node to receive all input that was not previously handled "
+"(usually by a [Control]). Enabled automatically if [method _unhandled_input] "
+"is overridden. Any calls to this before [method _ready] will be ignored."
+msgstr ""
+
+#: doc/classes/Node.xml:668
+msgid ""
+"Enables unhandled key input processing. Enabled automatically if [method "
+"_unhandled_key_input] is overridden. Any calls to this before [method "
+"_ready] will be ignored."
+msgstr ""
+
+#: doc/classes/Node.xml:675
+msgid ""
+"Sets whether this is an instance load placeholder. See [InstancePlaceholder]."
+msgstr ""
+
+#: doc/classes/Node.xml:681
+msgid ""
+"Updates the warning displayed for this node in the Scene Dock.\n"
+"Use [method _get_configuration_warning] to setup the warning message to "
+"display."
+msgstr ""
+
+#: doc/classes/Node.xml:688
+msgid ""
+"The override to the default [MultiplayerAPI]. Set to [code]null[/code] to "
+"use the default [SceneTree] one."
+msgstr ""
+
+#: doc/classes/Node.xml:691
+msgid ""
+"If a scene is instantiated from a file, its topmost node contains the "
+"absolute file path from which it was loaded in [member filename] (e.g. "
+"[code]res://levels/1.tscn[/code]). Otherwise, [member filename] is set to an "
+"empty string."
+msgstr ""
+
+#: doc/classes/Node.xml:694
+msgid ""
+"The [MultiplayerAPI] instance associated with this node. Either the [member "
+"custom_multiplayer], or the default SceneTree one (if inside tree)."
+msgstr ""
+
+#: doc/classes/Node.xml:697
+msgid ""
+"The name of the node. This name is unique among the siblings (other child "
+"nodes from the same parent). When set to an existing name, the node will be "
+"automatically renamed.\n"
+"[b]Note:[/b] Auto-generated names might include the [code]@[/code] "
+"character, which is reserved for unique names when using [method add_child]. "
+"When setting the name manually, any [code]@[/code] will be removed."
+msgstr ""
+
+#: doc/classes/Node.xml:701
+msgid ""
+"The node owner. A node can have any other node as owner (as long as it is a "
+"valid parent, grandparent, etc. ascending in the tree). When saving a node "
+"(using [PackedScene]), all the nodes it owns will be saved with it. This "
+"allows for the creation of complex [SceneTree]s, with instancing and "
+"subinstancing."
+msgstr ""
+
+#: doc/classes/Node.xml:704
+msgid "Pause mode. How the node will behave if the [SceneTree] is paused."
+msgstr ""
+
+#: doc/classes/Node.xml:707
+msgid ""
+"The node's priority in the execution order of the enabled processing "
+"callbacks (i.e. [constant NOTIFICATION_PROCESS], [constant "
+"NOTIFICATION_PHYSICS_PROCESS] and their internal counterparts). Nodes whose "
+"process priority value is [i]lower[/i] will have their processing callbacks "
+"executed first."
+msgstr ""
+
+#: doc/classes/Node.xml:713
+msgid "Emitted when the node is ready."
+msgstr ""
+
+#: doc/classes/Node.xml:718
+msgid "Emitted when the node is renamed."
+msgstr ""
+
+#: doc/classes/Node.xml:723
+msgid "Emitted when the node enters the tree."
+msgstr ""
+
+#: doc/classes/Node.xml:728
+msgid "Emitted after the node exits the tree and is no longer active."
+msgstr ""
+
+#: doc/classes/Node.xml:733
+msgid ""
+"Emitted when the node is still active but about to exit the tree. This is "
+"the right place for de-initialization (or a \"destructor\", if you will)."
+msgstr ""
+
+#: doc/classes/Node.xml:739
+msgid "Notification received when the node enters a [SceneTree]."
+msgstr ""
+
+#: doc/classes/Node.xml:742
+msgid "Notification received when the node is about to exit a [SceneTree]."
+msgstr ""
+
+#: doc/classes/Node.xml:745
+msgid "Notification received when the node is moved in the parent."
+msgstr ""
+
+#: doc/classes/Node.xml:748
+msgid "Notification received when the node is ready. See [method _ready]."
+msgstr ""
+
+#: doc/classes/Node.xml:751
+msgid "Notification received when the node is paused."
+msgstr ""
+
+#: doc/classes/Node.xml:754
+msgid "Notification received when the node is unpaused."
+msgstr ""
+
+#: doc/classes/Node.xml:757
+msgid ""
+"Notification received every frame when the physics process flag is set (see "
+"[method set_physics_process])."
+msgstr ""
+
+#: doc/classes/Node.xml:760
+msgid ""
+"Notification received every frame when the process flag is set (see [method "
+"set_process])."
+msgstr ""
+
+#: doc/classes/Node.xml:763
+msgid ""
+"Notification received when a node is set as a child of another node.\n"
+"[b]Note:[/b] This doesn't mean that a node entered the [SceneTree]."
+msgstr ""
+
+#: doc/classes/Node.xml:767
+msgid ""
+"Notification received when a node is unparented (parent removed it from the "
+"list of children)."
+msgstr ""
+
+#: doc/classes/Node.xml:770
+msgid "Notification received when the node is instanced."
+msgstr ""
+
+#: doc/classes/Node.xml:773
+msgid "Notification received when a drag begins."
+msgstr ""
+
+#: doc/classes/Node.xml:776
+msgid "Notification received when a drag ends."
+msgstr ""
+
+#: doc/classes/Node.xml:779
+msgid "Notification received when the node's [NodePath] changed."
+msgstr ""
+
+#: doc/classes/Node.xml:782
+msgid ""
+"Notification received every frame when the internal process flag is set (see "
+"[method set_process_internal])."
+msgstr ""
+
+#: doc/classes/Node.xml:785
+msgid ""
+"Notification received every frame when the internal physics process flag is "
+"set (see [method set_physics_process_internal])."
+msgstr ""
+
+#: doc/classes/Node.xml:788
+msgid ""
+"Notification received when the node is ready, just before [constant "
+"NOTIFICATION_READY] is received. Unlike the latter, it's sent every time the "
+"node enters tree, instead of only once."
+msgstr ""
+
+#: doc/classes/Node.xml:846
+msgid ""
+"Inherits pause mode from the node's parent. For the root node, it is "
+"equivalent to [constant PAUSE_MODE_STOP]. Default."
+msgstr ""
+
+#: doc/classes/Node.xml:849
+msgid "Stops processing when the [SceneTree] is paused."
+msgstr ""
+
+#: doc/classes/Node.xml:852
+msgid "Continue to process regardless of the [SceneTree] pause state."
+msgstr ""
+
+#: doc/classes/Node.xml:855
+msgid "Duplicate the node's signals."
+msgstr ""
+
+#: doc/classes/Node.xml:858
+msgid "Duplicate the node's groups."
+msgstr ""
+
+#: doc/classes/Node.xml:861
+msgid "Duplicate the node's scripts."
+msgstr ""
+
+#: doc/classes/Node.xml:864
+msgid ""
+"Duplicate using instancing.\n"
+"An instance stays linked to the original so when the original changes, the "
+"instance changes too."
+msgstr ""
+
+#: doc/classes/Node2D.xml:4
+msgid ""
+"A 2D game object, inherited by all 2D-related nodes. Has a position, "
+"rotation, scale, and Z index."
+msgstr ""
+
+#: doc/classes/Node2D.xml:7
+msgid ""
+"A 2D game object, with a transform (position, rotation, and scale). All 2D "
+"nodes, including physics objects and sprites, inherit from Node2D. Use "
+"Node2D as a parent node to move, scale and rotate children in a 2D project. "
+"Also gives control of the node's render order."
+msgstr ""
+
+#: doc/classes/Node2D.xml:11 doc/classes/Vector2.xml:16
+msgid "https://github.com/godotengine/godot-demo-projects/tree/master/2d"
+msgstr ""
+
+#: doc/classes/Node2D.xml:18
+msgid "Multiplies the current scale by the [code]ratio[/code] vector."
+msgstr ""
+
+#: doc/classes/Node2D.xml:25
+msgid ""
+"Returns the angle between the node and the [code]point[/code] in radians.\n"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/master/img/"
+"node2d_get_angle_to.png]Illustration of the returned angle.[/url]"
+msgstr ""
+
+#: doc/classes/Node2D.xml:33
+msgid "Returns the [Transform2D] relative to this node's parent."
+msgstr ""
+
+#: doc/classes/Node2D.xml:40
+msgid "Adds the [code]offset[/code] vector to the node's global position."
+msgstr ""
+
+#: doc/classes/Node2D.xml:47
+msgid ""
+"Rotates the node so it points towards the [code]point[/code], which is "
+"expected to use global coordinates."
+msgstr ""
+
+#: doc/classes/Node2D.xml:55
+msgid ""
+"Applies a local translation on the node's X axis based on the [method Node."
+"_process]'s [code]delta[/code]. If [code]scaled[/code] is [code]false[/"
+"code], normalizes the movement."
+msgstr ""
+
+#: doc/classes/Node2D.xml:63
+msgid ""
+"Applies a local translation on the node's Y axis based on the [method Node."
+"_process]'s [code]delta[/code]. If [code]scaled[/code] is [code]false[/"
+"code], normalizes the movement."
+msgstr ""
+
+#: doc/classes/Node2D.xml:70
+msgid ""
+"Applies a rotation to the node, in radians, starting from its current "
+"rotation."
+msgstr ""
+
+#: doc/classes/Node2D.xml:77
+msgid ""
+"Transforms the provided local position into a position in global coordinate "
+"space. The input is expected to be local relative to the [Node2D] it is "
+"called on. e.g. Applying this method to the positions of child nodes will "
+"correctly transform their positions into the global coordinate space, but "
+"applying it to a node's own position will give an incorrect result, as it "
+"will incorporate the node's own transformation into its global position."
+msgstr ""
+
+#: doc/classes/Node2D.xml:84
+msgid ""
+"Transforms the provided global position into a position in local coordinate "
+"space. The output will be local relative to the [Node2D] it is called on. e."
+"g. It is appropriate for determining the positions of child nodes, but it is "
+"not appropriate for determining its own position relative to its parent."
+msgstr ""
+
+#: doc/classes/Node2D.xml:91
+msgid ""
+"Translates the node by the given [code]offset[/code] in local coordinates."
+msgstr ""
+
+#: doc/classes/Node2D.xml:97
+msgid "Global position."
+msgstr ""
+
+#: doc/classes/Node2D.xml:100
+msgid "Global rotation in radians."
+msgstr ""
+
+#: doc/classes/Node2D.xml:103
+msgid "Global rotation in degrees."
+msgstr ""
+
+#: doc/classes/Node2D.xml:106
+msgid "Global scale."
+msgstr ""
+
+#: doc/classes/Node2D.xml:109
+msgid "Global [Transform2D]."
+msgstr ""
+
+#: doc/classes/Node2D.xml:112
+msgid "Position, relative to the node's parent."
+msgstr ""
+
+#: doc/classes/Node2D.xml:115
+msgid "Rotation in radians, relative to the node's parent."
+msgstr ""
+
+#: doc/classes/Node2D.xml:118
+msgid "Rotation in degrees, relative to the node's parent."
+msgstr ""
+
+#: doc/classes/Node2D.xml:121
+msgid "The node's scale. Unscaled value: [code](1, 1)[/code]."
+msgstr ""
+
+#: doc/classes/Node2D.xml:124
+msgid "Local [Transform2D]."
+msgstr ""
+
+#: doc/classes/Node2D.xml:127
+msgid ""
+"If [code]true[/code], the node's Z index is relative to its parent's Z "
+"index. If this node's Z index is 2 and its parent's effective Z index is 3, "
+"then this node's effective Z index will be 2 + 3 = 5."
+msgstr ""
+
+#: doc/classes/Node2D.xml:130
+msgid ""
+"Z index. Controls the order in which the nodes render. A node with a higher "
+"Z index will display in front of others. Must be between [constant "
+"VisualServer.CANVAS_ITEM_Z_MIN] and [constant VisualServer."
+"CANVAS_ITEM_Z_MAX] (inclusive)."
+msgstr ""
+
+#: doc/classes/NodePath.xml:4
+msgid "Pre-parsed scene tree path."
+msgstr ""
+
+#: doc/classes/NodePath.xml:7
+msgid ""
+"A pre-parsed relative or absolute path in a scene tree, for use with [method "
+"Node.get_node] and similar functions. It can reference a node, a resource "
+"within a node, or a property of a node or resource. For instance, "
+"[code]\"Path2D/PathFollow2D/Sprite:texture:size\"[/code] would refer to the "
+"[code]size[/code] property of the [code]texture[/code] resource on the node "
+"named [code]\"Sprite\"[/code] which is a child of the other named nodes in "
+"the path.\n"
+"You will usually just pass a string to [method Node.get_node] and it will be "
+"automatically converted, but you may occasionally want to parse a path ahead "
+"of time with [NodePath] or the literal syntax [code]@\"path\"[/code]. "
+"Exporting a [NodePath] variable will give you a node selection widget in the "
+"properties panel of the editor, which can often be useful.\n"
+"A [NodePath] is composed of a list of slash-separated node names (like a "
+"filesystem path) and an optional colon-separated list of \"subnames\" which "
+"can be resources or properties.\n"
+"Some examples of NodePaths include the following:\n"
+"[codeblock]\n"
+"# No leading slash means it is relative to the current node.\n"
+"@\"A\" # Immediate child A\n"
+"@\"A/B\" # A's child B\n"
+"@\".\" # The current node.\n"
+"@\"..\" # The parent node.\n"
+"@\"../C\" # A sibling node C.\n"
+"# A leading slash means it is absolute from the SceneTree.\n"
+"@\"/root\" # Equivalent to get_tree().get_root().\n"
+"@\"/root/Main\" # If your main scene's root node were named \"Main\".\n"
+"@\"/root/MyAutoload\" # If you have an autoloaded node or scene.\n"
+"[/codeblock]\n"
+"[b]Note:[/b] In the editor, [NodePath] properties are automatically updated "
+"when moving, renaming or deleting a node in the scene tree, but they are "
+"never updated at runtime."
+msgstr ""
+
+#: doc/classes/NodePath.xml:26 doc/classes/PackedScene.xml:41
+#: doc/classes/Panel.xml:10 doc/classes/PanelContainer.xml:10
+#: doc/classes/TileMap.xml:16 doc/classes/TileSet.xml:16
+msgid "https://godotengine.org/asset-library/asset/520"
+msgstr ""
+
+#: doc/classes/NodePath.xml:33
+msgid ""
+"Creates a NodePath from a string, e.g. [code]\"Path2D/PathFollow2D/Sprite:"
+"texture:size\"[/code]. A path is absolute if it starts with a slash. "
+"Absolute paths are only valid in the global scene tree, not within "
+"individual scenes. In a relative path, [code]\".\"[/code] and [code]\"..\"[/"
+"code] indicate the current node and its parent.\n"
+"The \"subnames\" optionally included after the path to the target node can "
+"point to resources or properties, and can also be nested.\n"
+"Examples of valid NodePaths (assuming that those nodes exist and have the "
+"referenced resources or properties):\n"
+"[codeblock]\n"
+"# Points to the Sprite node\n"
+"\"Path2D/PathFollow2D/Sprite\"\n"
+"# Points to the Sprite node and its \"texture\" resource.\n"
+"# get_node() would retrieve \"Sprite\", while get_node_and_resource()\n"
+"# would retrieve both the Sprite node and the \"texture\" resource.\n"
+"\"Path2D/PathFollow2D/Sprite:texture\"\n"
+"# Points to the Sprite node and its \"position\" property.\n"
+"\"Path2D/PathFollow2D/Sprite:position\"\n"
+"# Points to the Sprite node and the \"x\" component of its \"position\" "
+"property.\n"
+"\"Path2D/PathFollow2D/Sprite:position:x\"\n"
+"# Absolute path (from \"root\")\n"
+"\"/root/Level/Path2D\"\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/NodePath.xml:55
+msgid ""
+"Returns a node path with a colon character ([code]:[/code]) prepended, "
+"transforming it to a pure property path with no node name (defaults to "
+"resolving from the current node).\n"
+"[codeblock]\n"
+"# This will be parsed as a node path to the \"x\" property in the \"position"
+"\" node\n"
+"var node_path = NodePath(\"position:x\")\n"
+"# This will be parsed as a node path to the \"x\" component of the \"position"
+"\" property in the current node\n"
+"var property_path = node_path.get_as_property_path()\n"
+"print(property_path) # :position:x\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/NodePath.xml:68
+msgid ""
+"Returns all subnames concatenated with a colon character ([code]:[/code]) as "
+"separator, i.e. the right side of the first colon in a node path.\n"
+"[codeblock]\n"
+"var nodepath = NodePath(\"Path2D/PathFollow2D/Sprite:texture:load_path\")\n"
+"print(nodepath.get_concatenated_subnames()) # texture:load_path\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/NodePath.xml:79
+msgid ""
+"Gets the node name indicated by [code]idx[/code] (0 to [method "
+"get_name_count]).\n"
+"[codeblock]\n"
+"var node_path = NodePath(\"Path2D/PathFollow2D/Sprite\")\n"
+"print(node_path.get_name(0)) # Path2D\n"
+"print(node_path.get_name(1)) # PathFollow2D\n"
+"print(node_path.get_name(2)) # Sprite\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/NodePath.xml:91
+msgid ""
+"Gets the number of node names which make up the path. Subnames (see [method "
+"get_subname_count]) are not included.\n"
+"For example, [code]\"Path2D/PathFollow2D/Sprite\"[/code] has 3 names."
+msgstr ""
+
+#: doc/classes/NodePath.xml:99
+msgid ""
+"Gets the resource or property name indicated by [code]idx[/code] (0 to "
+"[method get_subname_count]).\n"
+"[codeblock]\n"
+"var node_path = NodePath(\"Path2D/PathFollow2D/Sprite:texture:load_path\")\n"
+"print(node_path.get_subname(0)) # texture\n"
+"print(node_path.get_subname(1)) # load_path\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/NodePath.xml:110
+msgid ""
+"Gets the number of resource or property names (\"subnames\") in the path. "
+"Each subname is listed after a colon character ([code]:[/code]) in the node "
+"path.\n"
+"For example, [code]\"Path2D/PathFollow2D/Sprite:texture:load_path\"[/code] "
+"has 2 subnames."
+msgstr ""
+
+#: doc/classes/NodePath.xml:117
+msgid ""
+"Returns [code]true[/code] if the node path is absolute (as opposed to "
+"relative), which means that it starts with a slash character ([code]/[/"
+"code]). Absolute node paths can be used to access the root node ([code]\"/"
+"root\"[/code]) or autoloads (e.g. [code]\"/global\"[/code] if a \"global\" "
+"autoload was registered)."
+msgstr ""
+
+#: doc/classes/NodePath.xml:123
+msgid "Returns [code]true[/code] if the node path is empty."
+msgstr ""
+
+#: modules/opensimplex/doc_classes/NoiseTexture.xml:4
+msgid "[OpenSimplexNoise] filled texture."
+msgstr ""
+
+#: modules/opensimplex/doc_classes/NoiseTexture.xml:7
+msgid ""
+"Uses an [OpenSimplexNoise] to fill the texture data. You can specify the "
+"texture size but keep in mind that larger textures will take longer to "
+"generate and seamless noise only works with square sized textures.\n"
+"NoiseTexture can also generate normalmap textures.\n"
+"The class uses [Thread]s to generate the texture data internally, so [method "
+"Texture.get_data] may return [code]null[/code] if the generation process has "
+"not completed yet. In that case, you need to wait for the texture to be "
+"generated before accessing the data:\n"
+"[codeblock]\n"
+"var texture = preload(\"res://noise.tres\")\n"
+"yield(texture, \"changed\")\n"
+"var image = texture.get_data()\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/opensimplex/doc_classes/NoiseTexture.xml:22
+msgid ""
+"If [code]true[/code], the resulting texture contains a normal map created "
+"from the original noise interpreted as a bump map."
+msgstr ""
+
+#: modules/opensimplex/doc_classes/NoiseTexture.xml:25
+msgid ""
+"Strength of the bump maps used in this texture. A higher value will make the "
+"bump maps appear larger while a lower value will make them appear softer."
+msgstr ""
+
+#: modules/opensimplex/doc_classes/NoiseTexture.xml:29
+msgid "Height of the generated texture."
+msgstr ""
+
+#: modules/opensimplex/doc_classes/NoiseTexture.xml:32
+msgid "The [OpenSimplexNoise] instance used to generate the noise."
+msgstr ""
+
+#: modules/opensimplex/doc_classes/NoiseTexture.xml:35
+msgid ""
+"An offset used to specify the noise space coordinate of the top left corner "
+"of the generated noise. This value is ignored if [member seamless] is "
+"enabled."
+msgstr ""
+
+#: modules/opensimplex/doc_classes/NoiseTexture.xml:38
+msgid ""
+"Whether the texture can be tiled without visible seams or not. Seamless "
+"textures take longer to generate.\n"
+"[b]Note:[/b] Seamless noise has a lower contrast compared to non-seamless "
+"noise. This is due to the way noise uses higher dimensions for generating "
+"seamless noise."
+msgstr ""
+
+#: modules/opensimplex/doc_classes/NoiseTexture.xml:42
+msgid "Width of the generated texture."
+msgstr ""
+
+#: doc/classes/Object.xml:4
+msgid "Base class for all non-built-in types."
+msgstr ""
+
+#: doc/classes/Object.xml:7
+msgid ""
+"Every class which is not a built-in type inherits from this class.\n"
+"You can construct Objects from scripting languages, using [code]Object.new()"
+"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct Object"
+"\" node in VisualScript.\n"
+"Objects do not manage memory. If a class inherits from Object, you will have "
+"to delete instances of it manually. To do so, call the [method free] method "
+"from your script or delete the instance from C++.\n"
+"Some classes that extend Object add memory management. This is the case of "
+"[Reference], which counts references and deletes itself automatically when "
+"no longer referenced. [Node], another fundamental type, deletes all its "
+"children when freed from memory.\n"
+"Objects export properties, which are mainly useful for storage and editing, "
+"but not really so much in programming. Properties are exported in [method "
+"_get_property_list] and handled in [method _get] and [method _set]. However, "
+"scripting languages and C++ have simpler means to export them.\n"
+"Property membership can be tested directly in GDScript using [code]in[/"
+"code]:\n"
+"[codeblock]\n"
+"var n = Node2D.new()\n"
+"print(\"position\" in n) # Prints \"True\".\n"
+"print(\"other_property\" in n) # Prints \"False\".\n"
+"[/codeblock]\n"
+"The [code]in[/code] operator will evaluate to [code]true[/code] as long as "
+"the key exists, even if the value is [code]null[/code].\n"
+"Objects also receive notifications. Notifications are a simple way to notify "
+"the object about different events, so they can all be handled together. See "
+"[method _notification].\n"
+"[b]Note:[/b] Unlike references to a [Reference], references to an Object "
+"stored in a variable can become invalid without warning. Therefore, it's "
+"recommended to use [Reference] for data classes instead of [Object].\n"
+"[b]Note:[/b] Due to a bug, you can't create a \"plain\" Object using "
+"[code]Object.new()[/code]. Instead, use [code]ClassDB.instance(\"Object\")[/"
+"code]. This bug only applies to Object itself, not any of its descendents "
+"like [Reference]."
+msgstr ""
+
+#: doc/classes/Object.xml:24 doc/classes/Reference.xml:13
+#: doc/classes/Resource.xml:12
+msgid ""
+"https://docs.godotengine.org/en/3.4/getting_started/workflow/best_practices/"
+"node_alternatives.html"
+msgstr ""
+
+#: doc/classes/Object.xml:25
+msgid ""
+"https://docs.godotengine.org/en/3.4/getting_started/scripting/gdscript/"
+"gdscript_exports.html#advanced-exports"
+msgstr ""
+
+#: doc/classes/Object.xml:32
+msgid ""
+"Virtual method which can be overridden to customize the return value of "
+"[method get].\n"
+"Returns the given property. Returns [code]null[/code] if the [code]property[/"
+"code] does not exist."
+msgstr ""
+
+#: doc/classes/Object.xml:39
+msgid ""
+"Virtual method which can be overridden to customize the return value of "
+"[method get_property_list].\n"
+"Returns the object's property list as an [Array] of dictionaries.\n"
+"Each property's [Dictionary] must contain at least [code]name: String[/code] "
+"and [code]type: int[/code] (see [enum Variant.Type]) entries. Optionally, it "
+"can also include [code]hint: int[/code] (see [enum PropertyHint]), "
+"[code]hint_string: String[/code], and [code]usage: int[/code] (see [enum "
+"PropertyUsageFlags])."
+msgstr ""
+
+#: doc/classes/Object.xml:47
+msgid "Called when the object is initialized."
+msgstr ""
+
+#: doc/classes/Object.xml:54
+msgid ""
+"Called whenever the object receives a notification, which is identified in "
+"[code]what[/code] by a constant. The base [Object] has two constants "
+"[constant NOTIFICATION_POSTINITIALIZE] and [constant "
+"NOTIFICATION_PREDELETE], but subclasses such as [Node] define a lot more "
+"notifications which are also received by this method."
+msgstr ""
+
+#: doc/classes/Object.xml:62
+msgid ""
+"Virtual method which can be overridden to customize the return value of "
+"[method set].\n"
+"Sets a property. Returns [code]true[/code] if the [code]property[/code] "
+"exists."
+msgstr ""
+
+#: doc/classes/Object.xml:69
+msgid ""
+"Virtual method which can be overridden to customize the return value of "
+"[method to_string], and thus the object's representation where it is "
+"converted to a string, e.g. with [code]print(obj)[/code].\n"
+"Returns a [String] representing the object. If not overridden, defaults to "
+"[code]\"[ClassName:RID]\"[/code]."
+msgstr ""
+
+#: doc/classes/Object.xml:78
+msgid ""
+"Adds a user-defined [code]signal[/code]. Arguments are optional, but can be "
+"added as an [Array] of dictionaries, each containing [code]name: String[/"
+"code] and [code]type: int[/code] (see [enum Variant.Type]) entries."
+msgstr ""
+
+#: doc/classes/Object.xml:85
+msgid ""
+"Calls the [code]method[/code] on the object and returns the result. This "
+"method supports a variable number of arguments, so parameters are passed as "
+"a comma separated list. Example:\n"
+"[codeblock]\n"
+"call(\"set\", \"position\", Vector2(42.0, 0.0))\n"
+"[/codeblock]\n"
+"[b]Note:[/b] In C#, the method name must be specified as snake_case if it is "
+"defined by a built-in Godot node. This doesn't apply to user-defined methods "
+"where you should use the same convention as in the C# source (typically "
+"PascalCase)."
+msgstr ""
+
+#: doc/classes/Object.xml:96
+msgid ""
+"Calls the [code]method[/code] on the object during idle time. This method "
+"supports a variable number of arguments, so parameters are passed as a comma "
+"separated list. Example:\n"
+"[codeblock]\n"
+"call_deferred(\"set\", \"position\", Vector2(42.0, 0.0))\n"
+"[/codeblock]\n"
+"[b]Note:[/b] In C#, the method name must be specified as snake_case if it is "
+"defined by a built-in Godot node. This doesn't apply to user-defined methods "
+"where you should use the same convention as in the C# source (typically "
+"PascalCase)."
+msgstr ""
+
+#: doc/classes/Object.xml:108
+msgid ""
+"Calls the [code]method[/code] on the object and returns the result. "
+"Contrarily to [method call], this method does not support a variable number "
+"of arguments but expects all parameters to be via a single [Array].\n"
+"[codeblock]\n"
+"callv(\"set\", [ \"position\", Vector2(42.0, 0.0) ])\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Object.xml:117
+msgid ""
+"Returns [code]true[/code] if the object can translate strings. See [method "
+"set_message_translation] and [method tr]."
+msgstr ""
+
+#: doc/classes/Object.xml:128
+msgid ""
+"Connects a [code]signal[/code] to a [code]method[/code] on a [code]target[/"
+"code] object. Pass optional [code]binds[/code] to the call as an [Array] of "
+"parameters. These parameters will be passed to the method after any "
+"parameter used in the call to [method emit_signal]. Use [code]flags[/code] "
+"to set deferred or one-shot connections. See [enum ConnectFlags] constants.\n"
+"A [code]signal[/code] can only be connected once to a [code]method[/code]. "
+"It will throw an error if already connected, unless the signal was connected "
+"with [constant CONNECT_REFERENCE_COUNTED]. To avoid this, first, use [method "
+"is_connected] to check for existing connections.\n"
+"If the [code]target[/code] is destroyed in the game's lifecycle, the "
+"connection will be lost.\n"
+"Examples:\n"
+"[codeblock]\n"
+"connect(\"pressed\", self, \"_on_Button_pressed\") # BaseButton signal\n"
+"connect(\"text_entered\", self, \"_on_LineEdit_text_entered\") # LineEdit "
+"signal\n"
+"connect(\"hit\", self, \"_on_Player_hit\", [ weapon_type, damage ]) # User-"
+"defined signal\n"
+"[/codeblock]\n"
+"An example of the relationship between [code]binds[/code] passed to [method "
+"connect] and parameters used when calling [method emit_signal]:\n"
+"[codeblock]\n"
+"connect(\"hit\", self, \"_on_Player_hit\", [ weapon_type, damage ]) # "
+"weapon_type and damage are passed last\n"
+"emit_signal(\"hit\", \"Dark lord\", 5) # \"Dark lord\" and 5 are passed "
+"first\n"
+"func _on_Player_hit(hit_by, level, weapon_type, damage):\n"
+" print(\"Hit by %s (lvl %d) with weapon %s for %d damage\" % [hit_by, "
+"level, weapon_type, damage])\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Object.xml:152
+msgid ""
+"Disconnects a [code]signal[/code] from a [code]method[/code] on the given "
+"[code]target[/code].\n"
+"If you try to disconnect a connection that does not exist, the method will "
+"throw an error. Use [method is_connected] to ensure that the connection "
+"exists."
+msgstr ""
+
+#: doc/classes/Object.xml:160
+msgid ""
+"Emits the given [code]signal[/code]. The signal must exist, so it should be "
+"a built-in signal of this class or one of its parent classes, or a user-"
+"defined signal. This method supports a variable number of arguments, so "
+"parameters are passed as a comma separated list. Example:\n"
+"[codeblock]\n"
+"emit_signal(\"hit\", weapon_type, damage)\n"
+"emit_signal(\"game_over\")\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Object.xml:170
+msgid ""
+"Deletes the object from memory immediately. For [Node]s, you may want to use "
+"[method Node.queue_free] to queue the node for safe deletion at the end of "
+"the current frame.\n"
+"[b]Important:[/b] If you have a variable pointing to an object, it will "
+"[i]not[/i] be assigned to [code]null[/code] once the object is freed. "
+"Instead, it will point to a [i]previously freed instance[/i] and you should "
+"validate it with [method @GDScript.is_instance_valid] before attempting to "
+"call its methods or access its properties."
+msgstr ""
+
+#: doc/classes/Object.xml:178
+msgid ""
+"Returns the [Variant] value of the given [code]property[/code]. If the "
+"[code]property[/code] doesn't exist, this will return [code]null[/code].\n"
+"[b]Note:[/b] In C#, the property name must be specified as snake_case if it "
+"is defined by a built-in Godot node. This doesn't apply to user-defined "
+"properties where you should use the same convention as in the C# source "
+"(typically PascalCase)."
+msgstr ""
+
+#: doc/classes/Object.xml:185
+msgid ""
+"Returns the object's class as a [String]. See also [method is_class].\n"
+"[b]Note:[/b] [method get_class] does not take [code]class_name[/code] "
+"declarations into account. If the object has a [code]class_name[/code] "
+"defined, the base class name will be returned instead."
+msgstr ""
+
+#: doc/classes/Object.xml:192
+msgid ""
+"Returns an [Array] of dictionaries with information about signals that are "
+"connected to the object.\n"
+"Each [Dictionary] contains three String entries:\n"
+"- [code]source[/code] is a reference to the signal emitter.\n"
+"- [code]signal_name[/code] is the name of the connected signal.\n"
+"- [code]method_name[/code] is the name of the method to which the signal is "
+"connected."
+msgstr ""
+
+#: doc/classes/Object.xml:203
+msgid ""
+"Gets the object's property indexed by the given [NodePath]. The node path "
+"should be relative to the current object and can use the colon character "
+"([code]:[/code]) to access nested properties. Examples: [code]\"position:x"
+"\"[/code] or [code]\"material:next_pass:blend_mode\"[/code]."
+msgstr ""
+
+#: doc/classes/Object.xml:209
+msgid ""
+"Returns the object's unique instance ID.\n"
+"This ID can be saved in [EncodedObjectAsID], and can be used to retrieve the "
+"object instance with [method @GDScript.instance_from_id]."
+msgstr ""
+
+#: doc/classes/Object.xml:217
+msgid "Returns the object's metadata entry for the given [code]name[/code]."
+msgstr ""
+
+#: doc/classes/Object.xml:223
+msgid "Returns the object's metadata as a [PoolStringArray]."
+msgstr ""
+
+#: doc/classes/Object.xml:229
+msgid "Returns the object's methods and their signatures as an [Array]."
+msgstr ""
+
+#: doc/classes/Object.xml:235
+msgid ""
+"Returns the object's property list as an [Array] of dictionaries.\n"
+"Each property's [Dictionary] contain at least [code]name: String[/code] and "
+"[code]type: int[/code] (see [enum Variant.Type]) entries. Optionally, it can "
+"also include [code]hint: int[/code] (see [enum PropertyHint]), "
+"[code]hint_string: String[/code], and [code]usage: int[/code] (see [enum "
+"PropertyUsageFlags])."
+msgstr ""
+
+#: doc/classes/Object.xml:242
+msgid ""
+"Returns the object's [Script] instance, or [code]null[/code] if none is "
+"assigned."
+msgstr ""
+
+#: doc/classes/Object.xml:249
+msgid "Returns an [Array] of connections for the given [code]signal[/code]."
+msgstr ""
+
+#: doc/classes/Object.xml:255
+msgid "Returns the list of signals as an [Array] of dictionaries."
+msgstr ""
+
+#: doc/classes/Object.xml:262
+msgid ""
+"Returns [code]true[/code] if a metadata entry is found with the given "
+"[code]name[/code]."
+msgstr ""
+
+#: doc/classes/Object.xml:269
+msgid ""
+"Returns [code]true[/code] if the object contains the given [code]method[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Object.xml:276
+msgid "Returns [code]true[/code] if the given [code]signal[/code] exists."
+msgstr ""
+
+#: doc/classes/Object.xml:283
+msgid ""
+"Returns [code]true[/code] if the given user-defined [code]signal[/code] "
+"exists. Only signals added using [method add_user_signal] are taken into "
+"account."
+msgstr ""
+
+#: doc/classes/Object.xml:289
+msgid "Returns [code]true[/code] if signal emission blocking is enabled."
+msgstr ""
+
+#: doc/classes/Object.xml:296
+msgid ""
+"Returns [code]true[/code] if the object inherits from the given [code]class[/"
+"code]. See also [method get_class].\n"
+"[b]Note:[/b] [method is_class] does not take [code]class_name[/code] "
+"declarations into account. If the object has a [code]class_name[/code] "
+"defined, [method is_class] will return [code]false[/code] for that name."
+msgstr ""
+
+#: doc/classes/Object.xml:306
+msgid ""
+"Returns [code]true[/code] if a connection exists for a given [code]signal[/"
+"code], [code]target[/code], and [code]method[/code]."
+msgstr ""
+
+#: doc/classes/Object.xml:312
+msgid ""
+"Returns [code]true[/code] if the [method Node.queue_free] method was called "
+"for the object."
+msgstr ""
+
+#: doc/classes/Object.xml:320
+msgid ""
+"Send a given notification to the object, which will also trigger a call to "
+"the [method _notification] method of all classes that the object inherits "
+"from.\n"
+"If [code]reversed[/code] is [code]true[/code], [method _notification] is "
+"called first on the object's own class, and then up to its successive parent "
+"classes. If [code]reversed[/code] is [code]false[/code], [method "
+"_notification] is called first on the highest ancestor ([Object] itself), "
+"and then down to its successive inheriting classes."
+msgstr ""
+
+#: doc/classes/Object.xml:327
+msgid ""
+"Notify the editor that the property list has changed, so that editor plugins "
+"can take the new values into account. Does nothing on export builds."
+msgstr ""
+
+#: doc/classes/Object.xml:334
+msgid ""
+"Removes a given entry from the object's metadata. See also [method set_meta]."
+msgstr ""
+
+#: doc/classes/Object.xml:342
+msgid ""
+"Assigns a new value to the given property. If the [code]property[/code] does "
+"not exist, nothing will happen.\n"
+"[b]Note:[/b] In C#, the property name must be specified as snake_case if it "
+"is defined by a built-in Godot node. This doesn't apply to user-defined "
+"properties where you should use the same convention as in the C# source "
+"(typically PascalCase)."
+msgstr ""
+
+#: doc/classes/Object.xml:350
+msgid "If set to [code]true[/code], signal emission is blocked."
+msgstr ""
+
+#: doc/classes/Object.xml:358
+msgid ""
+"Assigns a new value to the given property, after the current frame's physics "
+"step. This is equivalent to calling [method set] via [method call_deferred], "
+"i.e. [code]call_deferred(\"set\", property, value)[/code].\n"
+"[b]Note:[/b] In C#, the property name must be specified as snake_case if it "
+"is defined by a built-in Godot node. This doesn't apply to user-defined "
+"properties where you should use the same convention as in the C# source "
+"(typically PascalCase)."
+msgstr ""
+
+#: doc/classes/Object.xml:367
+msgid ""
+"Assigns a new value to the property identified by the [NodePath]. The node "
+"path should be relative to the current object and can use the colon "
+"character ([code]:[/code]) to access nested properties. Example:\n"
+"[codeblock]\n"
+"set_indexed(\"position\", Vector2(42, 0))\n"
+"set_indexed(\"position:y\", -10)\n"
+"print(position) # (42, -10)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Object.xml:379
+msgid ""
+"Defines whether the object can translate strings (with calls to [method "
+"tr]). Enabled by default."
+msgstr ""
+
+#: doc/classes/Object.xml:387
+msgid ""
+"Adds, changes or removes a given entry in the object's metadata. Metadata "
+"are serialized and can take any [Variant] value.\n"
+"To remove a given entry from the object's metadata, use [method "
+"remove_meta]. Metadata is also removed if its value is set to [code]null[/"
+"code]. This means you can also use [code]set_meta(\"name\", null)[/code] to "
+"remove metadata for [code]\"name\"[/code]."
+msgstr ""
+
+#: doc/classes/Object.xml:395
+msgid ""
+"Assigns a script to the object. Each object can have a single script "
+"assigned to it, which are used to extend its functionality.\n"
+"If the object already had a script, the previous script instance will be "
+"freed and its variables and state will be lost. The new script's [method "
+"_init] method will be called."
+msgstr ""
+
+#: doc/classes/Object.xml:402
+msgid ""
+"Returns a [String] representing the object. If not overridden, defaults to "
+"[code]\"[ClassName:RID]\"[/code].\n"
+"Override the method [method _to_string] to customize the [String] "
+"representation."
+msgstr ""
+
+#: doc/classes/Object.xml:410
+msgid ""
+"Translates a message using translation catalogs configured in the Project "
+"Settings.\n"
+"Only works if message translation is enabled (which it is by default), "
+"otherwise it returns the [code]message[/code] unchanged. See [method "
+"set_message_translation]."
+msgstr ""
+
+#: doc/classes/Object.xml:418
+msgid "Emitted whenever the object's script is changed."
+msgstr ""
+
+#: doc/classes/Object.xml:424
+msgid "Called right when the object is initialized. Not available in script."
+msgstr ""
+
+#: doc/classes/Object.xml:427
+msgid "Called before the object is about to be deleted."
+msgstr ""
+
+#: doc/classes/Object.xml:430
+msgid ""
+"Connects a signal in deferred mode. This way, signal emissions are stored in "
+"a queue, then set on idle time."
+msgstr ""
+
+#: doc/classes/Object.xml:433
+msgid "Persisting connections are saved when the object is serialized to file."
+msgstr ""
+
+#: doc/classes/Object.xml:436
+msgid "One-shot connections disconnect themselves after emission."
+msgstr ""
+
+#: doc/classes/Object.xml:439
+msgid ""
+"Connect a signal as reference-counted. This means that a given signal can be "
+"connected several times to the same target, and will only be fully "
+"disconnected once no references are left."
+msgstr ""
+
+#: doc/classes/Occluder.xml:4
+msgid "Allows [OccluderShape]s to be used for occlusion culling."
+msgstr ""
+
+#: doc/classes/Occluder.xml:7
+msgid ""
+"[Occluder]s that are placed within your scene will automatically cull "
+"objects that are hidden from view by the occluder. This can increase "
+"performance by decreasing the amount of objects drawn.\n"
+"[Occluder]s are totally dynamic, you can move them as you wish. This means "
+"you can for example, place occluders on a moving spaceship, and have it "
+"occlude objects as it flies past.\n"
+"You can place a large number of [Occluder]s within a scene. As it would be "
+"counterproductive to cull against hundreds of occluders, the system will "
+"automatically choose a selection of these for active use during any given "
+"frame, based a screen space metric. Larger occluders are favored, as well as "
+"those close to the camera. Note that a small occluder close to the camera "
+"may be a better occluder in terms of screen space than a large occluder far "
+"in the distance.\n"
+"The type of occlusion primitive is determined by the [OccluderShape] that "
+"you add to the [Occluder]. Some [OccluderShape]s may allow more than one "
+"primitive in a single, node, for greater efficiency.\n"
+"Although [Occluder]s work in general use, they also become even more "
+"powerful when used in conjunction with the portal system. Occluders are "
+"placed in rooms (based on their origin), and can block portals (and thus "
+"entire rooms) as well as objects from rendering."
+msgstr ""
+
+#: doc/classes/OccluderPolygon2D.xml:4
+msgid "Defines a 2D polygon for LightOccluder2D."
+msgstr ""
+
+#: doc/classes/OccluderPolygon2D.xml:7
+msgid ""
+"Editor facility that helps you draw a 2D polygon used as resource for "
+"[LightOccluder2D]."
+msgstr ""
+
+#: doc/classes/OccluderPolygon2D.xml:15
+msgid ""
+"If [code]true[/code], closes the polygon. A closed OccluderPolygon2D "
+"occludes the light coming from any direction. An opened OccluderPolygon2D "
+"occludes the light only at its outline's direction."
+msgstr ""
+
+#: doc/classes/OccluderPolygon2D.xml:18
+msgid "The culling mode to use."
+msgstr ""
+
+#: doc/classes/OccluderPolygon2D.xml:21
+msgid ""
+"A [Vector2] array with the index for polygon's vertices positions.\n"
+"[b]Note:[/b] The returned value is a copy of the underlying array, rather "
+"than a reference."
+msgstr ""
+
+#: doc/classes/OccluderPolygon2D.xml:27
+msgid "Culling is disabled. See [member cull_mode]."
+msgstr ""
+
+#: doc/classes/OccluderPolygon2D.xml:30
+msgid ""
+"Culling is performed in the clockwise direction. See [member cull_mode]."
+msgstr ""
+
+#: doc/classes/OccluderPolygon2D.xml:33
+msgid ""
+"Culling is performed in the counterclockwise direction. See [member "
+"cull_mode]."
+msgstr ""
+
+#: doc/classes/OccluderShape.xml:4
+msgid ""
+"Base class for shapes used for occlusion culling by the [Occluder] node."
+msgstr ""
+
+#: doc/classes/OccluderShape.xml:7
+msgid "[Occluder]s can use any primitive shape derived from [OccluderShape]."
+msgstr ""
+
+#: doc/classes/OccluderShapeSphere.xml:4
+msgid "Spherical occlusion primitive for use with the [Occluder] node."
+msgstr ""
+
+#: doc/classes/OccluderShapeSphere.xml:7
+msgid ""
+"[OccluderShape]s are resources used by [Occluder] nodes, allowing geometric "
+"occlusion culling.\n"
+"This shape can include multiple spheres. These can be created and deleted "
+"either in the Editor inspector or by calling [code]set_spheres[/code]. The "
+"sphere positions can be set by dragging the handle in the Editor viewport. "
+"The radius can be set with the smaller handle."
+msgstr ""
+
+#: doc/classes/OccluderShapeSphere.xml:18
+msgid "Sets an individual sphere's position."
+msgstr ""
+
+#: doc/classes/OccluderShapeSphere.xml:26
+msgid "Sets an individual sphere's radius."
+msgstr ""
+
+#: doc/classes/OccluderShapeSphere.xml:32
+msgid ""
+"The sphere data can be accessed as an array of [Plane]s. The position of "
+"each sphere is stored in the [code]normal[/code], and the radius is stored "
+"in the [code]d[/code] value of the plane."
+msgstr ""
+
+#: doc/classes/OmniLight.xml:4
+msgid "Omnidirectional light, such as a light bulb or a candle."
+msgstr ""
+
+#: doc/classes/OmniLight.xml:7
+msgid ""
+"An Omnidirectional light is a type of [Light] that emits light in all "
+"directions. The light is attenuated by distance and this attenuation can be "
+"configured by changing its energy, radius, and attenuation parameters.\n"
+"[b]Note:[/b] By default, only 32 OmniLights may affect a single mesh "
+"[i]resource[/i] at once. Consider splitting your level into several meshes "
+"to decrease the likelihood that more than 32 lights will affect the same "
+"mesh resource. Splitting the level mesh will also improve frustum culling "
+"effectiveness, leading to greater performance. If you need to use more "
+"lights per mesh, you can increase [member ProjectSettings.rendering/limits/"
+"rendering/max_lights_per_object] at the cost of shader compilation times."
+msgstr ""
+
+#: doc/classes/OmniLight.xml:17
+msgid ""
+"The light's attenuation (drop-off) curve. A number of presets are available "
+"in the [b]Inspector[/b] by right-clicking the curve."
+msgstr ""
+
+#: doc/classes/OmniLight.xml:20
+msgid ""
+"The light's radius. Note that the effectively lit area may appear to be "
+"smaller depending on the [member omni_attenuation] in use. No matter the "
+"[member omni_attenuation] in use, the light will never reach anything "
+"outside this radius."
+msgstr ""
+
+#: doc/classes/OmniLight.xml:23
+msgid "See [enum ShadowDetail]."
+msgstr ""
+
+#: doc/classes/OmniLight.xml:26
+msgid "See [enum ShadowMode]."
+msgstr ""
+
+#: doc/classes/OmniLight.xml:31
+msgid ""
+"Shadows are rendered to a dual-paraboloid texture. Faster than [constant "
+"SHADOW_CUBE], but lower-quality."
+msgstr ""
+
+#: doc/classes/OmniLight.xml:34
+msgid ""
+"Shadows are rendered to a cubemap. Slower than [constant "
+"SHADOW_DUAL_PARABOLOID], but higher-quality."
+msgstr ""
+
+#: doc/classes/OmniLight.xml:37
+msgid "Use more detail vertically when computing the shadow."
+msgstr ""
+
+#: doc/classes/OmniLight.xml:40
+msgid "Use more detail horizontally when computing the shadow."
+msgstr ""
+
+#: modules/opensimplex/doc_classes/OpenSimplexNoise.xml:4
+msgid "Noise generator based on Open Simplex."
+msgstr ""
+
+#: modules/opensimplex/doc_classes/OpenSimplexNoise.xml:7
+msgid ""
+"This resource allows you to configure and sample a fractal noise space. Here "
+"is a brief usage example that configures an OpenSimplexNoise and gets "
+"samples at various positions and dimensions:\n"
+"[codeblock]\n"
+"var noise = OpenSimplexNoise.new()\n"
+"\n"
+"# Configure\n"
+"noise.seed = randi()\n"
+"noise.octaves = 4\n"
+"noise.period = 20.0\n"
+"noise.persistence = 0.8\n"
+"\n"
+"# Sample\n"
+"print(\"Values:\")\n"
+"print(noise.get_noise_2d(1.0, 1.0))\n"
+"print(noise.get_noise_3d(0.5, 3.0, 15.0))\n"
+"print(noise.get_noise_4d(0.5, 1.9, 4.7, 0.0))\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/opensimplex/doc_classes/OpenSimplexNoise.xml:33
+msgid ""
+"Generate a noise image in [constant Image.FORMAT_L8] format with the "
+"requested [code]width[/code] and [code]height[/code], based on the current "
+"noise parameters. If [code]noise_offset[/code] is specified, then the offset "
+"value is used as the coordinates of the top-left corner of the generated "
+"noise."
+msgstr ""
+
+#: modules/opensimplex/doc_classes/OpenSimplexNoise.xml:40
+msgid ""
+"Returns the 1D noise value [code][-1,1][/code] at the given x-coordinate.\n"
+"[b]Note:[/b] This method actually returns the 2D noise value [code][-1,1][/"
+"code] with fixed y-coordinate value 0.0."
+msgstr ""
+
+#: modules/opensimplex/doc_classes/OpenSimplexNoise.xml:49
+#: modules/opensimplex/doc_classes/OpenSimplexNoise.xml:56
+msgid "Returns the 2D noise value [code][-1,1][/code] at the given position."
+msgstr ""
+
+#: modules/opensimplex/doc_classes/OpenSimplexNoise.xml:65
+#: modules/opensimplex/doc_classes/OpenSimplexNoise.xml:72
+msgid "Returns the 3D noise value [code][-1,1][/code] at the given position."
+msgstr ""
+
+#: modules/opensimplex/doc_classes/OpenSimplexNoise.xml:82
+msgid "Returns the 4D noise value [code][-1,1][/code] at the given position."
+msgstr ""
+
+#: modules/opensimplex/doc_classes/OpenSimplexNoise.xml:89
+msgid ""
+"Generate a tileable noise image in [constant Image.FORMAT_L8] format, based "
+"on the current noise parameters. Generated seamless images are always square "
+"([code]size[/code] × [code]size[/code]).\n"
+"[b]Note:[/b] Seamless noise has a lower contrast compared to non-seamless "
+"noise. This is due to the way noise uses higher dimensions for generating "
+"seamless noise."
+msgstr ""
+
+#: modules/opensimplex/doc_classes/OpenSimplexNoise.xml:96
+msgid "Difference in period between [member octaves]."
+msgstr ""
+
+#: modules/opensimplex/doc_classes/OpenSimplexNoise.xml:99
+msgid ""
+"Number of OpenSimplex noise layers that are sampled to get the fractal "
+"noise. Higher values result in more detailed noise but take more time to "
+"generate.\n"
+"[b]Note:[/b] The maximum allowed value is 9."
+msgstr ""
+
+#: modules/opensimplex/doc_classes/OpenSimplexNoise.xml:103
+msgid ""
+"Period of the base octave. A lower period results in a higher-frequency "
+"noise (more value changes across the same distance)."
+msgstr ""
+
+#: modules/opensimplex/doc_classes/OpenSimplexNoise.xml:106
+msgid ""
+"Contribution factor of the different octaves. A [code]persistence[/code] "
+"value of 1 means all the octaves have the same contribution, a value of 0.5 "
+"means each octave contributes half as much as the previous one."
+msgstr ""
+
+#: modules/opensimplex/doc_classes/OpenSimplexNoise.xml:109
+msgid ""
+"Seed used to generate random values, different seeds will generate different "
+"noise maps."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:4
+msgid "Button control that provides selectable options when pressed."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:7
+msgid ""
+"OptionButton is a type button that provides a selectable list of items when "
+"pressed. The item selected becomes the \"current\" item and is displayed as "
+"the button text.\n"
+"See also [BaseButton] which contains common properties and methods "
+"associated with this node."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:19
+msgid ""
+"Adds an item, with a [code]texture[/code] icon, text [code]label[/code] and "
+"(optionally) [code]id[/code]. If no [code]id[/code] is passed, the item "
+"index will be used as the item's ID. New items are appended at the end."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:27
+msgid ""
+"Adds an item, with text [code]label[/code] and (optionally) [code]id[/code]. "
+"If no [code]id[/code] is passed, the item index will be used as the item's "
+"ID. New items are appended at the end."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:33
+msgid ""
+"Adds a separator to the list of items. Separators help to group items. "
+"Separator also takes up an index and is appended at the end."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:39
+msgid "Clears all the items in the [OptionButton]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:45
+msgid "Returns the amount of items in the OptionButton, including separators."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:52 doc/classes/PopupMenu.xml:203
+msgid "Returns the icon of the item at index [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:59
+msgid "Returns the ID of the item at index [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:66
+msgid "Returns the index of the item with the given [code]id[/code]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:73
+msgid ""
+"Retrieves the metadata of an item. Metadata may be any type and can be used "
+"to store extra information about an item, such as an external string ID."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:80 doc/classes/PopupMenu.xml:245
+msgid "Returns the text of the item at index [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:93
+msgid ""
+"Returns the ID of the selected item, or [code]0[/code] if no item is "
+"selected."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:99
+msgid ""
+"Gets the metadata of the selected item. Metadata for items can be set using "
+"[method set_item_metadata]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:106
+msgid ""
+"Returns [code]true[/code] if the item at index [code]idx[/code] is disabled."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:113
+msgid "Removes the item at index [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:120
+msgid ""
+"Selects an item by index and makes it the current item. This will work even "
+"if the item is disabled."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:128
+msgid ""
+"Sets whether the item at index [code]idx[/code] is disabled.\n"
+"Disabled items are drawn differently in the dropdown and are not selectable "
+"by the user. If the current selected item is set as disabled, it will remain "
+"selected."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:137
+msgid "Sets the icon of the item at index [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:145
+msgid "Sets the ID of the item at index [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:153
+msgid ""
+"Sets the metadata of an item. Metadata may be of any type and can be used to "
+"store extra information about an item, such as an external string ID."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:161 doc/classes/PopupMenu.xml:432
+msgid "Sets the text of the item at index [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:169
+msgid ""
+"The index of the currently selected item, or [code]-1[/code] if no item is "
+"selected."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:177
+msgid ""
+"Emitted when the user navigates to an item using the [code]ui_up[/code] or "
+"[code]ui_down[/code] actions. The index of the item selected is passed as "
+"argument."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:183
+msgid ""
+"Emitted when the current item has been changed by the user. The index of the "
+"item selected is passed as argument."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:191
+msgid "The arrow icon to be drawn on the right end of the button."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:194
+msgid ""
+"The horizontal space between the arrow icon and the right edge of the button."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:197
+msgid "[StyleBox] used when the [OptionButton] is disabled."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:200
+msgid ""
+"[StyleBox] used when the [OptionButton] is focused. It is displayed over the "
+"current [StyleBox], so using [StyleBoxEmpty] will just disable the focus "
+"visual effect."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:203
+msgid "[Font] of the [OptionButton]'s text."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:206
+msgid "Default text [Color] of the [OptionButton]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:209
+msgid "Text [Color] used when the [OptionButton] is disabled."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:212
+msgid ""
+"Text [Color] used when the [OptionButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:215
+msgid "Text [Color] used when the [OptionButton] is being hovered."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:218
+msgid "Text [Color] used when the [OptionButton] is being pressed."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:221
+msgid "[StyleBox] used when the [OptionButton] is being hovered."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:224
+msgid "The horizontal space between [OptionButton]'s icon and text."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:227
+msgid "Default [StyleBox] for the [OptionButton]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:230
+msgid "[StyleBox] used when the [OptionButton] is being pressed."
+msgstr ""
+
+#: doc/classes/OS.xml:4
+msgid "Operating System functions."
+msgstr ""
+
+#: doc/classes/OS.xml:7
+msgid ""
+"Operating System functions. OS wraps the most common functionality to "
+"communicate with the host operating system, such as the clipboard, video "
+"driver, date and time, timers, environment variables, execution of binaries, "
+"command line, etc."
+msgstr ""
+
+#: doc/classes/OS.xml:18
+msgid ""
+"Displays a modal dialog box using the host OS' facilities. Execution is "
+"blocked until the dialog is closed."
+msgstr ""
+
+#: doc/classes/OS.xml:24
+msgid "Returns [code]true[/code] if the host OS allows drawing."
+msgstr ""
+
+#: doc/classes/OS.xml:30
+msgid ""
+"Returns [code]true[/code] if the current host platform is using multiple "
+"threads."
+msgstr ""
+
+#: doc/classes/OS.xml:36
+msgid "Centers the window on the screen if in windowed mode."
+msgstr ""
+
+#: doc/classes/OS.xml:42
+msgid ""
+"Shuts down system MIDI driver.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:50
+msgid ""
+"Delays execution of the current thread by [code]msec[/code] milliseconds. "
+"[code]msec[/code] must be greater than or equal to [code]0[/code]. "
+"Otherwise, [method delay_msec] will do nothing and will print an error "
+"message.\n"
+"[b]Note:[/b] [method delay_msec] is a [i]blocking[/i] way to delay code "
+"execution. To delay code execution in a non-blocking way, see [method "
+"SceneTree.create_timer]. Yielding with [method SceneTree.create_timer] will "
+"delay the execution of code placed below the [code]yield[/code] without "
+"affecting the rest of the project (or editor, for [EditorPlugin]s and "
+"[EditorScript]s).\n"
+"[b]Note:[/b] When [method delay_msec] is called on the main thread, it will "
+"freeze the project and will prevent it from redrawing and registering input "
+"until the delay has passed. When using [method delay_msec] as part of an "
+"[EditorPlugin] or [EditorScript], it will freeze the editor but won't freeze "
+"the project if it is currently running (since the project is an independent "
+"child process)."
+msgstr ""
+
+#: doc/classes/OS.xml:59
+msgid ""
+"Delays execution of the current thread by [code]usec[/code] microseconds. "
+"[code]usec[/code] must be greater than or equal to [code]0[/code]. "
+"Otherwise, [method delay_usec] will do nothing and will print an error "
+"message.\n"
+"[b]Note:[/b] [method delay_usec] is a [i]blocking[/i] way to delay code "
+"execution. To delay code execution in a non-blocking way, see [method "
+"SceneTree.create_timer]. Yielding with [method SceneTree.create_timer] will "
+"delay the execution of code placed below the [code]yield[/code] without "
+"affecting the rest of the project (or editor, for [EditorPlugin]s and "
+"[EditorScript]s).\n"
+"[b]Note:[/b] When [method delay_usec] is called on the main thread, it will "
+"freeze the project and will prevent it from redrawing and registering input "
+"until the delay has passed. When using [method delay_usec] as part of an "
+"[EditorPlugin] or [EditorScript], it will freeze the editor but won't freeze "
+"the project if it is currently running (since the project is an independent "
+"child process)."
+msgstr ""
+
+#: doc/classes/OS.xml:68
+msgid ""
+"Dumps the memory allocation ringlist to a file (only works in debug).\n"
+"Entry format per line: \"Address - Size - Description\"."
+msgstr ""
+
+#: doc/classes/OS.xml:76
+msgid ""
+"Dumps all used resources to file (only works in debug).\n"
+"Entry format per line: \"Resource Type : Resource Location\".\n"
+"At the end of the file is a statistic of all used Resource Types."
+msgstr ""
+
+#: doc/classes/OS.xml:89
+msgid ""
+"Execute the file at the given path with the arguments passed as an array of "
+"strings. Platform path resolution will take place. The resolved file must "
+"exist and be executable.\n"
+"The arguments are used in the given order and separated by a space, so "
+"[code]OS.execute(\"ping\", [\"-w\", \"3\", \"godotengine.org\"], false)[/"
+"code] will resolve to [code]ping -w 3 godotengine.org[/code] in the system's "
+"shell.\n"
+"This method has slightly different behavior based on whether the "
+"[code]blocking[/code] mode is enabled.\n"
+"If [code]blocking[/code] is [code]true[/code], the Godot thread will pause "
+"its execution while waiting for the process to terminate. The shell output "
+"of the process will be written to the [code]output[/code] array as a single "
+"string. When the process terminates, the Godot thread will resume "
+"execution.\n"
+"If [code]blocking[/code] is [code]false[/code], the Godot thread will "
+"continue while the new process runs. It is not possible to retrieve the "
+"shell output in non-blocking mode, so [code]output[/code] will be empty.\n"
+"The return value also depends on the blocking mode. When blocking, the "
+"method will return an exit code of the process. When non-blocking, the "
+"method returns a process ID, which you can use to monitor the process (and "
+"potentially terminate it with [method kill]). If the process forking (non-"
+"blocking) or opening (blocking) fails, the method will return [code]-1[/"
+"code] or another exit code.\n"
+"Example of blocking mode and retrieving the shell output:\n"
+"[codeblock]\n"
+"var output = []\n"
+"var exit_code = OS.execute(\"ls\", [\"-l\", \"/tmp\"], true, output)\n"
+"[/codeblock]\n"
+"Example of non-blocking mode, running another instance of the project and "
+"storing its process ID:\n"
+"[codeblock]\n"
+"var pid = OS.execute(OS.get_executable_path(), [], false)\n"
+"[/codeblock]\n"
+"If you wish to access a shell built-in or perform a composite command, a "
+"platform-specific shell can be invoked. For example:\n"
+"[codeblock]\n"
+"OS.execute(\"CMD.exe\", [\"/C\", \"cd %TEMP% && dir\"], true, output)\n"
+"[/codeblock]\n"
+"[b]Note:[/b] This method is implemented on Android, iOS, Linux, macOS and "
+"Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:115
+msgid "Returns the scancode of the given string (e.g. \"Escape\")."
+msgstr ""
+
+#: doc/classes/OS.xml:121
+msgid "Returns the total number of available audio drivers."
+msgstr ""
+
+#: doc/classes/OS.xml:128
+msgid "Returns the audio driver name for the given index."
+msgstr ""
+
+#: doc/classes/OS.xml:134
+msgid ""
+"Returns the [i]global[/i] cache data directory according to the operating "
+"system's standards. On desktop platforms, this path can be overridden by "
+"setting the [code]XDG_CACHE_HOME[/code] environment variable before starting "
+"the project. See [url=https://docs.godotengine.org/en/latest/tutorials/io/"
+"data_paths.html]File paths in Godot projects[/url] in the documentation for "
+"more information. See also [method get_config_dir] and [method "
+"get_data_dir].\n"
+"Not to be confused with [method get_user_data_dir], which returns the "
+"[i]project-specific[/i] user data path."
+msgstr ""
+
+#: doc/classes/OS.xml:141
+msgid ""
+"Returns the command-line arguments passed to the engine.\n"
+"Command-line arguments can be written in any form, including both [code]--"
+"key value[/code] and [code]--key=value[/code] forms so they can be properly "
+"parsed, as long as custom command-line arguments do not conflict with engine "
+"arguments.\n"
+"You can also incorporate environment variables using the [method "
+"get_environment] method.\n"
+"You can set [member ProjectSettings.editor/main_run_args] to define command-"
+"line arguments to be passed by the editor when running the project.\n"
+"Here's a minimal example on how to parse command-line arguments into a "
+"dictionary using the [code]--key=value[/code] form for arguments:\n"
+"[codeblock]\n"
+"var arguments = {}\n"
+"for argument in OS.get_cmdline_args():\n"
+" if argument.find(\"=\") > -1:\n"
+" var key_value = argument.split(\"=\")\n"
+" arguments[key_value[0].lstrip(\"--\")] = key_value[1]\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/OS.xml:158
+msgid ""
+"Returns the [i]global[/i] user configuration directory according to the "
+"operating system's standards. On desktop platforms, this path can be "
+"overridden by setting the [code]XDG_CONFIG_HOME[/code] environment variable "
+"before starting the project. See [url=https://docs.godotengine.org/en/latest/"
+"tutorials/io/data_paths.html]File paths in Godot projects[/url] in the "
+"documentation for more information. See also [method get_cache_dir] and "
+"[method get_data_dir].\n"
+"Not to be confused with [method get_user_data_dir], which returns the "
+"[i]project-specific[/i] user data path."
+msgstr ""
+
+#: doc/classes/OS.xml:165
+msgid ""
+"Returns an array of MIDI device names.\n"
+"The returned array will be empty if the system MIDI driver has not "
+"previously been initialised with [method open_midi_inputs].\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:173
+msgid ""
+"Returns the currently used video driver, using one of the values from [enum "
+"VideoDriver]."
+msgstr ""
+
+#: doc/classes/OS.xml:179
+msgid ""
+"Returns the [i]global[/i] user data directory according to the operating "
+"system's standards. On desktop platforms, this path can be overridden by "
+"setting the [code]XDG_DATA_HOME[/code] environment variable before starting "
+"the project. See [url=https://docs.godotengine.org/en/latest/tutorials/io/"
+"data_paths.html]File paths in Godot projects[/url] in the documentation for "
+"more information. See also [method get_cache_dir] and [method "
+"get_config_dir].\n"
+"Not to be confused with [method get_user_data_dir], which returns the "
+"[i]project-specific[/i] user data path."
+msgstr ""
+
+#: doc/classes/OS.xml:187
+msgid ""
+"Returns current date as a dictionary of keys: [code]year[/code], "
+"[code]month[/code], [code]day[/code], [code]weekday[/code], [code]dst[/code] "
+"(Daylight Savings Time)."
+msgstr ""
+
+#: doc/classes/OS.xml:194
+msgid ""
+"Returns current datetime as a dictionary of keys: [code]year[/code], "
+"[code]month[/code], [code]day[/code], [code]weekday[/code], [code]dst[/code] "
+"(Daylight Savings Time), [code]hour[/code], [code]minute[/code], "
+"[code]second[/code]."
+msgstr ""
+
+#: doc/classes/OS.xml:201
+msgid ""
+"Gets a dictionary of time values corresponding to the given UNIX epoch time "
+"(in seconds).\n"
+"The returned Dictionary's values will be the same as [method get_datetime], "
+"with the exception of Daylight Savings Time as it cannot be determined from "
+"the epoch."
+msgstr ""
+
+#: doc/classes/OS.xml:208
+msgid "Returns the total amount of dynamic memory used (only works in debug)."
+msgstr ""
+
+#: doc/classes/OS.xml:215
+msgid ""
+"Returns the value of an environment variable. Returns an empty string if the "
+"environment variable doesn't exist.\n"
+"[b]Note:[/b] Double-check the casing of [code]variable[/code]. Environment "
+"variable names are case-sensitive on all platforms except Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:222
+msgid "Returns the path to the current engine executable."
+msgstr ""
+
+#: doc/classes/OS.xml:228
+msgid ""
+"With this function, you can get the list of dangerous permissions that have "
+"been granted to the Android application.\n"
+"[b]Note:[/b] This method is implemented on Android."
+msgstr ""
+
+#: doc/classes/OS.xml:235
+msgid ""
+"Returns the IME cursor position (the currently-edited portion of the string) "
+"relative to the characters in the composition string.\n"
+"[constant MainLoop.NOTIFICATION_OS_IME_UPDATE] is sent to the application to "
+"notify it of changes to the IME cursor position.\n"
+"[b]Note:[/b] This method is implemented on macOS."
+msgstr ""
+
+#: doc/classes/OS.xml:243
+msgid ""
+"Returns the IME intermediate composition string.\n"
+"[constant MainLoop.NOTIFICATION_OS_IME_UPDATE] is sent to the application to "
+"notify it of changes to the IME composition string.\n"
+"[b]Note:[/b] This method is implemented on macOS."
+msgstr ""
+
+#: doc/classes/OS.xml:251
+msgid ""
+"Returns the current latin keyboard variant as a String.\n"
+"Possible return values are: [code]\"QWERTY\"[/code], [code]\"AZERTY\"[/"
+"code], [code]\"QZERTY\"[/code], [code]\"DVORAK\"[/code], [code]\"NEO\"[/"
+"code], [code]\"COLEMAK\"[/code] or [code]\"ERROR\"[/code].\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows. Returns "
+"[code]\"QWERTY\"[/code] on unsupported platforms."
+msgstr ""
+
+#: doc/classes/OS.xml:259
+msgid ""
+"Returns the host OS locale as a string of the form "
+"[code]language_Script_COUNTRY_VARIANT@extra[/code]. If you want only the "
+"language code and not the fully specified locale from the OS, you can use "
+"[method get_locale_language].\n"
+"[code]language[/code] - 2 or 3-letter [url=https://en.wikipedia.org/wiki/"
+"List_of_ISO_639-1_codes]language code[/url], in lower case.\n"
+"[code]Script[/code] - optional, 4-letter [url=https://en.wikipedia.org/wiki/"
+"ISO_15924]script code[/url], in title case.\n"
+"[code]COUNTRY[/code] - optional, 2 or 3-letter [url=https://en.wikipedia.org/"
+"wiki/ISO_3166-1]country code[/url], in upper case.\n"
+"[code]VARIANT[/code] - optional, language variant, region and sort order. "
+"Variant can have any number of underscored keywords.\n"
+"[code]extra[/code] - optional, semicolon separated list of additional key "
+"words. Currency, calendar, sort order and numbering system information."
+msgstr ""
+
+#: doc/classes/OS.xml:270
+msgid ""
+"Returns the host OS locale's 2 or 3-letter [url=https://en.wikipedia.org/"
+"wiki/List_of_ISO_639-1_codes]language code[/url] as a string which should be "
+"consistent on all platforms. This is equivalent to extracting the "
+"[code]language[/code] part of the [method get_locale] string.\n"
+"This can be used to narrow down fully specified locale strings to only the "
+"\"common\" language code, when you don't need the additional information "
+"about country code or variants. For example, for a French Canadian user with "
+"[code]fr_CA[/code] locale, this would return [code]fr[/code]."
+msgstr ""
+
+#: doc/classes/OS.xml:277
+msgid ""
+"Returns the model name of the current device.\n"
+"[b]Note:[/b] This method is implemented on Android and iOS. Returns "
+"[code]\"GenericDevice\"[/code] on unsupported platforms."
+msgstr ""
+
+#: doc/classes/OS.xml:284
+msgid ""
+"Returns the name of the host OS. Possible values are: [code]\"Android\"[/"
+"code], [code]\"iOS\"[/code], [code]\"HTML5\"[/code], [code]\"OSX\"[/code], "
+"[code]\"Server\"[/code], [code]\"Windows\"[/code], [code]\"UWP\"[/code], "
+"[code]\"X11\"[/code]."
+msgstr ""
+
+#: doc/classes/OS.xml:291
+msgid ""
+"Returns internal structure pointers for use in GDNative plugins.\n"
+"[b]Note:[/b] This method is implemented on Linux and Windows (other OSs will "
+"soon be supported)."
+msgstr ""
+
+#: doc/classes/OS.xml:298
+msgid ""
+"Returns the amount of battery left in the device as a percentage. Returns "
+"[code]-1[/code] if power state is unknown.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:305
+msgid ""
+"Returns an estimate of the time left in seconds before the device runs out "
+"of battery. Returns [code]-1[/code] if power state is unknown.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:312
+msgid ""
+"Returns the current state of the device regarding battery and power. See "
+"[enum PowerState] constants.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:319
+msgid ""
+"Returns the project's process ID.\n"
+"[b]Note:[/b] This method is implemented on Android, iOS, Linux, macOS and "
+"Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:326
+msgid "Returns the number of threads available on the host machine."
+msgstr ""
+
+#: doc/classes/OS.xml:332
+msgid "Returns the window size including decorations like window borders."
+msgstr ""
+
+#: doc/classes/OS.xml:339
+msgid ""
+"Returns the given scancode as a string (e.g. Return values: [code]\"Escape"
+"\"[/code], [code]\"Shift+Escape\"[/code]).\n"
+"See also [member InputEventKey.scancode] and [method InputEventKey."
+"get_scancode_with_modifiers]."
+msgstr ""
+
+#: doc/classes/OS.xml:346
+msgid "Returns the number of displays attached to the host machine."
+msgstr ""
+
+#: doc/classes/OS.xml:353
+msgid ""
+"Returns the dots per inch density of the specified screen. If [code]screen[/"
+"code] is [code]-1[/code] (the default value), the current screen will be "
+"used.\n"
+"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
+"scaling mode is used.\n"
+"[b]Note:[/b] On Android devices, the actual screen densities are grouped "
+"into six generalized densities:\n"
+"[codeblock]\n"
+" ldpi - 120 dpi\n"
+" mdpi - 160 dpi\n"
+" hdpi - 240 dpi\n"
+" xhdpi - 320 dpi\n"
+" xxhdpi - 480 dpi\n"
+"xxxhdpi - 640 dpi\n"
+"[/codeblock]\n"
+"[b]Note:[/b] This method is implemented on Android, Linux, macOS and "
+"Windows. Returns [code]72[/code] on unsupported platforms."
+msgstr ""
+
+#: doc/classes/OS.xml:370
+msgid ""
+"Return the greatest scale factor of all screens.\n"
+"[b]Note:[/b] On macOS returned value is [code]2.0[/code] if there is at "
+"least one hiDPI (Retina) screen in the system, and [code]1.0[/code] in all "
+"other cases.\n"
+"[b]Note:[/b] This method is implemented on macOS."
+msgstr ""
+
+#: doc/classes/OS.xml:379
+msgid ""
+"Returns the position of the specified screen by index. If [code]screen[/"
+"code] is [code]-1[/code] (the default value), the current screen will be "
+"used."
+msgstr ""
+
+#: doc/classes/OS.xml:386
+msgid ""
+"Return the scale factor of the specified screen by index. If [code]screen[/"
+"code] is [code]-1[/code] (the default value), the current screen will be "
+"used.\n"
+"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
+"screen, and [code]1.0[/code] for all other cases.\n"
+"[b]Note:[/b] This method is implemented on macOS."
+msgstr ""
+
+#: doc/classes/OS.xml:395
+msgid ""
+"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
+"code] is [code]-1[/code] (the default value), the current screen will be "
+"used."
+msgstr ""
+
+#: doc/classes/OS.xml:401
+msgid ""
+"Returns the amount of time in milliseconds it took for the boot logo to "
+"appear."
+msgstr ""
+
+#: doc/classes/OS.xml:407
+msgid "Returns the maximum amount of static memory used (only works in debug)."
+msgstr ""
+
+#: doc/classes/OS.xml:413
+msgid "Returns the amount of static memory being used by the program in bytes."
+msgstr ""
+
+#: doc/classes/OS.xml:421
+msgid ""
+"Returns the actual path to commonly used folders across different platforms. "
+"Available locations are specified in [enum SystemDir].\n"
+"[b]Note:[/b] This method is implemented on Android, Linux, macOS and "
+"Windows.\n"
+"[b]Note:[/b] Shared storage is implemented on Android and allows to "
+"differentiate between app specific and shared directories. Shared "
+"directories have additional restrictions on Android."
+msgstr ""
+
+#: doc/classes/OS.xml:429
+msgid "Returns the epoch time of the operating system in milliseconds."
+msgstr ""
+
+#: doc/classes/OS.xml:435
+msgid "Returns the epoch time of the operating system in seconds."
+msgstr ""
+
+#: doc/classes/OS.xml:441
+msgid ""
+"Returns the total number of available tablet drivers.\n"
+"[b]Note:[/b] This method is implemented on Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:449
+msgid ""
+"Returns the tablet driver name for the given index.\n"
+"[b]Note:[/b] This method is implemented on Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:456
+msgid ""
+"Returns the ID of the current thread. This can be used in logs to ease "
+"debugging of multi-threaded applications.\n"
+"[b]Note:[/b] Thread IDs are not deterministic and may be reused across "
+"application restarts."
+msgstr ""
+
+#: doc/classes/OS.xml:463
+msgid ""
+"Returns the amount of time passed in milliseconds since the engine started."
+msgstr ""
+
+#: doc/classes/OS.xml:469
+msgid ""
+"Returns the amount of time passed in microseconds since the engine started."
+msgstr ""
+
+#: doc/classes/OS.xml:476
+msgid "Returns current time as a dictionary of keys: hour, minute, second."
+msgstr ""
+
+#: doc/classes/OS.xml:482
+msgid ""
+"Returns the current time zone as a dictionary with the keys: bias and name."
+msgstr ""
+
+#: doc/classes/OS.xml:488
+msgid ""
+"Returns a string that is unique to the device.\n"
+"[b]Note:[/b] This string may change without notice if the user reinstalls/"
+"upgrades their operating system or changes their hardware. This means it "
+"should generally not be used to encrypt persistent data as the data saved "
+"before an unexpected ID change would become inaccessible. The returned "
+"string may also be falsified using external programs, so do not rely on the "
+"string returned by [method get_unique_id] for security purposes.\n"
+"[b]Note:[/b] Returns an empty string on HTML5 and UWP, as this method isn't "
+"implemented on those platforms yet."
+msgstr ""
+
+#: doc/classes/OS.xml:496
+msgid ""
+"Returns the current UNIX epoch timestamp in seconds.\n"
+"[b]Important:[/b] This is the system clock that the user can manually set. "
+"[b]Never use[/b] this method for precise time calculation since its results "
+"are also subject to automatic adjustments by the operating system. [b]Always "
+"use[/b] [method get_ticks_usec] or [method get_ticks_msec] for precise time "
+"calculation instead, since they are guaranteed to be monotonic (i.e. never "
+"decrease)."
+msgstr ""
+
+#: doc/classes/OS.xml:504
+msgid ""
+"Gets an epoch time value from a dictionary of time values.\n"
+"[code]datetime[/code] must be populated with the following keys: [code]year[/"
+"code], [code]month[/code], [code]day[/code], [code]hour[/code], "
+"[code]minute[/code], [code]second[/code].\n"
+"If the dictionary is empty [code]0[/code] is returned. If some keys are "
+"omitted, they default to the equivalent values for the UNIX epoch timestamp "
+"0 (1970-01-01 at 00:00:00 UTC).\n"
+"You can pass the output from [method get_datetime_from_unix_time] directly "
+"into this function. Daylight Savings Time ([code]dst[/code]), if present, is "
+"ignored."
+msgstr ""
+
+#: doc/classes/OS.xml:513
+msgid ""
+"Returns the absolute directory path where user data is written ([code]user://"
+"[/code]).\n"
+"On Linux, this is [code]~/.local/share/godot/app_userdata/[project_name][/"
+"code], or [code]~/.local/share/[custom_name][/code] if "
+"[code]use_custom_user_dir[/code] is set.\n"
+"On macOS, this is [code]~/Library/Application Support/Godot/app_userdata/"
+"[project_name][/code], or [code]~/Library/Application Support/[custom_name][/"
+"code] if [code]use_custom_user_dir[/code] is set.\n"
+"On Windows, this is [code]%APPDATA%\\Godot\\app_userdata\\[project_name][/"
+"code], or [code]%APPDATA%\\[custom_name][/code] if "
+"[code]use_custom_user_dir[/code] is set. [code]%APPDATA%[/code] expands to "
+"[code]%USERPROFILE%\\AppData\\Roaming[/code].\n"
+"If the project name is empty, [code]user://[/code] falls back to [code]res://"
+"[/code].\n"
+"Not to be confused with [method get_data_dir], which returns the [i]global[/"
+"i] (non-project-specific) user data directory."
+msgstr ""
+
+#: doc/classes/OS.xml:524
+msgid "Returns the number of video drivers supported on the current platform."
+msgstr ""
+
+#: doc/classes/OS.xml:531
+msgid ""
+"Returns the name of the video driver matching the given [code]driver[/code] "
+"index. This index is a value from [enum VideoDriver], and you can use "
+"[method get_current_video_driver] to get the current backend's index."
+msgstr ""
+
+#: doc/classes/OS.xml:537
+msgid ""
+"Returns the on-screen keyboard's height in pixels. Returns 0 if there is no "
+"keyboard or if it is currently hidden."
+msgstr ""
+
+#: doc/classes/OS.xml:543
+msgid ""
+"Returns unobscured area of the window where interactive controls should be "
+"rendered."
+msgstr ""
+
+#: doc/classes/OS.xml:553
+msgid ""
+"Add a new item with text \"label\" to global menu. Use \"_dock\" menu to add "
+"item to the macOS dock icon menu.\n"
+"[b]Note:[/b] This method is implemented on macOS."
+msgstr ""
+
+#: doc/classes/OS.xml:561
+msgid ""
+"Add a separator between items. Separators also occupy an index.\n"
+"[b]Note:[/b] This method is implemented on macOS."
+msgstr ""
+
+#: doc/classes/OS.xml:569
+msgid ""
+"Clear the global menu, in effect removing all items.\n"
+"[b]Note:[/b] This method is implemented on macOS."
+msgstr ""
+
+#: doc/classes/OS.xml:578
+msgid ""
+"Removes the item at index \"idx\" from the global menu. Note that the "
+"indexes of items after the removed item are going to be shifted by one.\n"
+"[b]Note:[/b] This method is implemented on macOS."
+msgstr ""
+
+#: doc/classes/OS.xml:586
+msgid ""
+"Returns [code]true[/code] if the environment variable with the name "
+"[code]variable[/code] exists.\n"
+"[b]Note:[/b] Double-check the casing of [code]variable[/code]. Environment "
+"variable names are case-sensitive on all platforms except Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:594
+msgid ""
+"Returns [code]true[/code] if the feature for the given feature tag is "
+"supported in the currently running instance, depending on the platform, "
+"build etc. Can be used to check whether you're currently running a debug "
+"build, on a certain platform or arch, etc. Refer to the [url=https://docs."
+"godotengine.org/en/3.4/getting_started/workflow/export/feature_tags."
+"html]Feature Tags[/url] documentation for more details.\n"
+"[b]Note:[/b] Tag names are case-sensitive."
+msgstr ""
+
+#: doc/classes/OS.xml:601
+msgid ""
+"Returns [code]true[/code] if the device has a touchscreen or emulates one."
+msgstr ""
+
+#: doc/classes/OS.xml:607
+msgid ""
+"Returns [code]true[/code] if the platform has a virtual keyboard, "
+"[code]false[/code] otherwise."
+msgstr ""
+
+#: doc/classes/OS.xml:613
+msgid "Hides the virtual keyboard if it is shown, does nothing otherwise."
+msgstr ""
+
+#: doc/classes/OS.xml:619
+msgid ""
+"Returns [code]true[/code] if the Godot binary used to run the project is a "
+"[i]debug[/i] export template, or when running in the editor.\n"
+"Returns [code]false[/code] if the Godot binary used to run the project is a "
+"[i]release[/i] export template.\n"
+"To check whether the Godot binary used to run the project is an export "
+"template (debug or release), use [code]OS.has_feature(\"standalone\")[/code] "
+"instead."
+msgstr ""
+
+#: doc/classes/OS.xml:627
+msgid ""
+"Returns [code]true[/code] if the [b]OK[/b] button should appear on the left "
+"and [b]Cancel[/b] on the right."
+msgstr ""
+
+#: doc/classes/OS.xml:634
+msgid ""
+"Returns [code]true[/code] if the input scancode corresponds to a Unicode "
+"character."
+msgstr ""
+
+#: doc/classes/OS.xml:640
+msgid ""
+"Returns [code]true[/code] if the engine was executed with [code]-v[/code] "
+"(verbose stdout)."
+msgstr ""
+
+#: doc/classes/OS.xml:646
+msgid ""
+"If [code]true[/code], the [code]user://[/code] file system is persistent, so "
+"that its state is the same after a player quits and starts the game again. "
+"Relevant to the HTML5 platform, where this persistence may be unavailable."
+msgstr ""
+
+#: doc/classes/OS.xml:652
+msgid ""
+"Returns [code]true[/code] if the window should always be on top of other "
+"windows."
+msgstr ""
+
+#: doc/classes/OS.xml:658
+msgid ""
+"Returns [code]true[/code] if the window is currently focused.\n"
+"[b]Note:[/b] Only implemented on desktop platforms. On other platforms, it "
+"will always return [code]true[/code]."
+msgstr ""
+
+#: doc/classes/OS.xml:665
+msgid ""
+"Returns active keyboard layout index.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:672
+msgid ""
+"Returns the number of keyboard layouts.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:680
+msgid ""
+"Returns the ISO-639/BCP-47 language code of the keyboard layout at position "
+"[code]index[/code].\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:688
+msgid ""
+"Returns the localized name of the keyboard layout at position [code]index[/"
+"code].\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:696
+msgid ""
+"Sets active keyboard layout.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:704
+msgid ""
+"Kill (terminate) the process identified by the given process ID ([code]pid[/"
+"code]), e.g. the one returned by [method execute] in non-blocking mode.\n"
+"[b]Note:[/b] This method can also be used to kill processes that were not "
+"spawned by the game.\n"
+"[b]Note:[/b] This method is implemented on Android, iOS, Linux, macOS and "
+"Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:712
+msgid ""
+"Moves the window to the front.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:719
+msgid ""
+"Returns [code]true[/code] if native video is playing.\n"
+"[b]Note:[/b] This method is only implemented on iOS."
+msgstr ""
+
+#: doc/classes/OS.xml:726
+msgid ""
+"Pauses native video playback.\n"
+"[b]Note:[/b] This method is only implemented on iOS."
+msgstr ""
+
+#: doc/classes/OS.xml:737
+msgid ""
+"Plays native video from the specified path, at the given volume and with "
+"audio and subtitle tracks.\n"
+"[b]Note:[/b] This method is only implemented on iOS."
+msgstr ""
+
+#: doc/classes/OS.xml:744
+msgid ""
+"Stops native video playback.\n"
+"[b]Note:[/b] This method is implemented on iOS."
+msgstr ""
+
+#: doc/classes/OS.xml:751
+msgid ""
+"Resumes native video playback.\n"
+"[b]Note:[/b] This method is implemented on iOS."
+msgstr ""
+
+#: doc/classes/OS.xml:758
+msgid ""
+"Initialises the singleton for the system MIDI driver.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:766
+msgid ""
+"Shows all resources in the game. Optionally, the list can be written to a "
+"file by specifying a file path in [code]tofile[/code]."
+msgstr ""
+
+#: doc/classes/OS.xml:772
+msgid "Shows the list of loaded textures sorted by size in memory."
+msgstr ""
+
+#: doc/classes/OS.xml:779
+msgid "Shows the number of resources loaded by the game of the given types."
+msgstr ""
+
+#: doc/classes/OS.xml:786
+msgid "Shows all resources currently used by the game."
+msgstr ""
+
+#: doc/classes/OS.xml:792
+msgid ""
+"Request the user attention to the window. It'll flash the taskbar button on "
+"Windows or bounce the dock icon on OSX.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:800
+msgid ""
+"At the moment this function is only used by [code]AudioDriverOpenSL[/code] "
+"to request permission for [code]RECORD_AUDIO[/code] on Android."
+msgstr ""
+
+#: doc/classes/OS.xml:806
+msgid ""
+"With this function, you can request dangerous permissions since normal "
+"permissions are automatically granted at install time in Android "
+"applications.\n"
+"[b]Note:[/b] This method is implemented on Android."
+msgstr ""
+
+#: doc/classes/OS.xml:815
+msgid ""
+"Sets the value of the environment variable [code]variable[/code] to "
+"[code]value[/code]. The environment variable will be set for the Godot "
+"process and any process executed with [method execute] after running [method "
+"set_environment]. The environment variable will [i]not[/i] persist to "
+"processes run after the Godot process was terminated.\n"
+"[b]Note:[/b] Double-check the casing of [code]variable[/code]. Environment "
+"variable names are case-sensitive on all platforms except Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:823
+msgid ""
+"Sets the game's icon using an [Image] resource.\n"
+"The same image is used for window caption, taskbar/dock and window selection "
+"dialog. Image is scaled as needed.\n"
+"[b]Note:[/b] This method is implemented on HTML5, Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:832
+msgid ""
+"Sets whether IME input mode should be enabled.\n"
+"If active IME handles key events before the application and creates an "
+"composition string and suggestion list.\n"
+"Application can retrieve the composition status by using [method "
+"get_ime_selection] and [method get_ime_text] functions.\n"
+"Completed composition string is committed when input is finished.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:843
+msgid ""
+"Sets position of IME suggestion list popup (in window coordinates).\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:851
+msgid ""
+"Sets the game's icon using a multi-size platform-specific icon file ([code]*."
+"ico[/code] on Windows and [code]*.icns[/code] on macOS).\n"
+"Appropriate size sub-icons are used for window caption, taskbar/dock and "
+"window selection dialog.\n"
+"[b]Note:[/b] This method is implemented on macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:860
+msgid "Sets the name of the current thread."
+msgstr ""
+
+#: doc/classes/OS.xml:867
+msgid "Enables backup saves if [code]enabled[/code] is [code]true[/code]."
+msgstr ""
+
+#: doc/classes/OS.xml:874
+msgid ""
+"Sets whether the window should always be on top.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:882
+msgid ""
+"Sets a polygonal region of the window which accepts mouse events. Mouse "
+"events outside the region will be passed through.\n"
+"Passing an empty array will disable passthrough support (all mouse events "
+"will be intercepted by the window, which is the default behavior).\n"
+"[codeblock]\n"
+"# Set region, using Path2D node.\n"
+"OS.set_window_mouse_passthrough($Path2D.curve.get_baked_points())\n"
+"\n"
+"# Set region, using Polygon2D node.\n"
+"OS.set_window_mouse_passthrough($Polygon2D.polygon)\n"
+"\n"
+"# Reset region to default.\n"
+"OS.set_window_mouse_passthrough([])\n"
+"[/codeblock]\n"
+"[b]Note:[/b] On Windows, the portion of a window that lies outside the "
+"region is not drawn, while on Linux and macOS it is.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:902
+msgid ""
+"Sets the window title to the specified string.\n"
+"[b]Note:[/b] This should be used sporadically. Don't set this every frame, "
+"as that will negatively affect performance on some window managers.\n"
+"[b]Note:[/b] This method is implemented on HTML5, Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:911
+msgid ""
+"Requests the OS to open a resource with the most appropriate program. For "
+"example:\n"
+"- [code]OS.shell_open(\"C:\\\\Users\\name\\Downloads\")[/code] on Windows "
+"opens the file explorer at the user's Downloads folder.\n"
+"- [code]OS.shell_open(\"https://godotengine.org\")[/code] opens the default "
+"web browser on the official Godot website.\n"
+"- [code]OS.shell_open(\"mailto:example@example.com\")[/code] opens the "
+"default email client with the \"To\" field set to [code]example@example.com[/"
+"code]. See [url=https://blog.escapecreative.com/customizing-mailto-"
+"links/]Customizing [code]mailto:[/code] Links[/url] for a list of fields "
+"that can be added.\n"
+"Use [method ProjectSettings.globalize_path] to convert a [code]res://[/code] "
+"or [code]user://[/code] path into a system path for use with this method.\n"
+"[b]Note:[/b] This method is implemented on Android, iOS, HTML5, Linux, macOS "
+"and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:924
+msgid ""
+"Shows the virtual keyboard if the platform has one.\n"
+"The [code]existing_text[/code] parameter is useful for implementing your own "
+"[LineEdit] or [TextEdit], as it tells the virtual keyboard what text has "
+"already been typed (the virtual keyboard uses it for auto-correct and "
+"predictions).\n"
+"The [code]multiline[/code] parameter needs to be set to [code]true[/code] to "
+"be able to enter multiple lines of text, as in [TextEdit].\n"
+"[b]Note:[/b] This method is implemented on Android, iOS and UWP."
+msgstr ""
+
+#: doc/classes/OS.xml:933
+msgid "The clipboard from the host OS. Might be unavailable on some platforms."
+msgstr ""
+
+#: doc/classes/OS.xml:936
+msgid "The current screen index (starting from 0)."
+msgstr ""
+
+#: doc/classes/OS.xml:939
+msgid ""
+"If [code]true[/code], the engine filters the time delta measured between "
+"each frame, and attempts to compensate for random variation. This will only "
+"operate on systems where V-Sync is active."
+msgstr ""
+
+#: doc/classes/OS.xml:942
+msgid ""
+"The exit code passed to the OS when the main loop exits. By convention, an "
+"exit code of [code]0[/code] indicates success whereas a non-zero exit code "
+"indicates an error. For portability reasons, the exit code should be set "
+"between 0 and 125 (inclusive).\n"
+"[b]Note:[/b] This value will be ignored if using [method SceneTree.quit] "
+"with an [code]exit_code[/code] argument passed."
+msgstr ""
+
+#: doc/classes/OS.xml:946
+msgid ""
+"If [code]true[/code], the engine tries to keep the screen on while the game "
+"is running. Useful on mobile."
+msgstr ""
+
+#: doc/classes/OS.xml:949
+msgid ""
+"If [code]true[/code], the engine optimizes for low processor usage by only "
+"refreshing the screen if needed. Can improve battery consumption on mobile."
+msgstr ""
+
+#: doc/classes/OS.xml:952
+msgid ""
+"The amount of sleeping between frames when the low-processor usage mode is "
+"enabled (in microseconds). Higher values will result in lower CPU usage."
+msgstr ""
+
+#: doc/classes/OS.xml:955
+msgid ""
+"The maximum size of the window (without counting window manager "
+"decorations). Does not affect fullscreen mode. Set to [code](0, 0)[/code] to "
+"reset to the system default value."
+msgstr ""
+
+#: doc/classes/OS.xml:958
+msgid ""
+"The minimum size of the window in pixels (without counting window manager "
+"decorations). Does not affect fullscreen mode. Set to [code](0, 0)[/code] to "
+"reset to the system's default value.\n"
+"[b]Note:[/b] By default, the project window has a minimum size of "
+"[code]Vector2(64, 64)[/code]. This prevents issues that can arise when the "
+"window is resized to a near-zero size."
+msgstr ""
+
+#: doc/classes/OS.xml:962
+msgid "The current screen orientation."
+msgstr ""
+
+#: doc/classes/OS.xml:965
+msgid "The current tablet driver in use."
+msgstr ""
+
+#: doc/classes/OS.xml:968
+msgid "If [code]true[/code], vertical synchronization (Vsync) is enabled."
+msgstr ""
+
+#: doc/classes/OS.xml:971
+msgid ""
+"If [code]true[/code] and [code]vsync_enabled[/code] is true, the operating "
+"system's window compositor will be used for vsync when the compositor is "
+"enabled and the game is in windowed mode.\n"
+"[b]Note:[/b] This option is experimental and meant to alleviate stutter "
+"experienced by some users. However, some users have experienced a Vsync "
+"framerate halving (e.g. from 60 FPS to 30 FPS) when using it.\n"
+"[b]Note:[/b] This property is only implemented on Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:976
+msgid ""
+"If [code]true[/code], removes the window frame.\n"
+"[b]Note:[/b] Setting [code]window_borderless[/code] to [code]false[/code] "
+"disables per-pixel transparency."
+msgstr ""
+
+#: doc/classes/OS.xml:980
+msgid "If [code]true[/code], the window is fullscreen."
+msgstr ""
+
+#: doc/classes/OS.xml:983
+msgid "If [code]true[/code], the window is maximized."
+msgstr ""
+
+#: doc/classes/OS.xml:986
+msgid "If [code]true[/code], the window is minimized."
+msgstr ""
+
+#: doc/classes/OS.xml:989
+msgid ""
+"If [code]true[/code], the window background is transparent and the window "
+"frame is removed.\n"
+"Use [code]get_tree().get_root().set_transparent_background(true)[/code] to "
+"disable main viewport background rendering.\n"
+"[b]Note:[/b] This property has no effect if [member ProjectSettings.display/"
+"window/per_pixel_transparency/allowed] setting is disabled.\n"
+"[b]Note:[/b] This property is implemented on HTML5, Linux, macOS, Windows, "
+"and Android. It can't be changed at runtime for Android. Use [member "
+"ProjectSettings.display/window/per_pixel_transparency/enabled] to set it at "
+"startup instead."
+msgstr ""
+
+#: doc/classes/OS.xml:995
+msgid ""
+"The window position relative to the screen, the origin is the top left "
+"corner, +Y axis goes to the bottom and +X axis goes to the right."
+msgstr ""
+
+#: doc/classes/OS.xml:998
+msgid "If [code]true[/code], the window is resizable by the user."
+msgstr ""
+
+#: doc/classes/OS.xml:1001
+msgid "The size of the window (without counting window manager decorations)."
+msgstr ""
+
+#: doc/classes/OS.xml:1006
+msgid ""
+"The GLES2 rendering backend. It uses OpenGL ES 2.0 on mobile devices, OpenGL "
+"2.1 on desktop platforms and WebGL 1.0 on the web."
+msgstr ""
+
+#: doc/classes/OS.xml:1009
+msgid ""
+"The GLES3 rendering backend. It uses OpenGL ES 3.0 on mobile devices, OpenGL "
+"3.3 on desktop platforms and WebGL 2.0 on the web."
+msgstr ""
+
+#: doc/classes/OS.xml:1012
+msgid "Sunday."
+msgstr ""
+
+#: doc/classes/OS.xml:1015
+msgid "Monday."
+msgstr ""
+
+#: doc/classes/OS.xml:1018
+msgid "Tuesday."
+msgstr ""
+
+#: doc/classes/OS.xml:1021
+msgid "Wednesday."
+msgstr ""
+
+#: doc/classes/OS.xml:1024
+msgid "Thursday."
+msgstr ""
+
+#: doc/classes/OS.xml:1027
+msgid "Friday."
+msgstr ""
+
+#: doc/classes/OS.xml:1030
+msgid "Saturday."
+msgstr ""
+
+#: doc/classes/OS.xml:1033
+msgid "January."
+msgstr ""
+
+#: doc/classes/OS.xml:1036
+msgid "February."
+msgstr ""
+
+#: doc/classes/OS.xml:1039
+msgid "March."
+msgstr ""
+
+#: doc/classes/OS.xml:1042
+msgid "April."
+msgstr ""
+
+#: doc/classes/OS.xml:1045
+msgid "May."
+msgstr ""
+
+#: doc/classes/OS.xml:1048
+msgid "June."
+msgstr ""
+
+#: doc/classes/OS.xml:1051
+msgid "July."
+msgstr ""
+
+#: doc/classes/OS.xml:1054
+msgid "August."
+msgstr ""
+
+#: doc/classes/OS.xml:1057
+msgid "September."
+msgstr ""
+
+#: doc/classes/OS.xml:1060
+msgid "October."
+msgstr ""
+
+#: doc/classes/OS.xml:1063
+msgid "November."
+msgstr ""
+
+#: doc/classes/OS.xml:1066
+msgid "December."
+msgstr ""
+
+#: doc/classes/OS.xml:1069
+msgid ""
+"Application handle:\n"
+"- Windows: [code]HINSTANCE[/code] of the application\n"
+"- MacOS: [code]NSApplication*[/code] of the application (not yet "
+"implemented)\n"
+"- Android: [code]JNIEnv*[/code] of the application (not yet implemented)"
+msgstr ""
+
+#: doc/classes/OS.xml:1075
+msgid ""
+"Display handle:\n"
+"- Linux: [code]X11::Display*[/code] for the display"
+msgstr ""
+
+#: doc/classes/OS.xml:1079
+msgid ""
+"Window handle:\n"
+"- Windows: [code]HWND[/code] of the main window\n"
+"- Linux: [code]X11::Window*[/code] of the main window\n"
+"- MacOS: [code]NSWindow*[/code] of the main window (not yet implemented)\n"
+"- Android: [code]jObject[/code] the main android activity (not yet "
+"implemented)"
+msgstr ""
+
+#: doc/classes/OS.xml:1086
+msgid ""
+"Window view:\n"
+"- Windows: [code]HDC[/code] of the main window drawing context\n"
+"- MacOS: [code]NSView*[/code] of the main windows view (not yet implemented)"
+msgstr ""
+
+#: doc/classes/OS.xml:1091
+msgid ""
+"OpenGL Context:\n"
+"- Windows: [code]HGLRC[/code]\n"
+"- Linux: [code]X11::GLXContext[/code]\n"
+"- MacOS: [code]NSOpenGLContext*[/code] (not yet implemented)"
+msgstr ""
+
+#: doc/classes/OS.xml:1097
+msgid "Landscape screen orientation."
+msgstr ""
+
+#: doc/classes/OS.xml:1100
+msgid "Portrait screen orientation."
+msgstr ""
+
+#: doc/classes/OS.xml:1103
+msgid "Reverse landscape screen orientation."
+msgstr ""
+
+#: doc/classes/OS.xml:1106
+msgid "Reverse portrait screen orientation."
+msgstr ""
+
+#: doc/classes/OS.xml:1109
+msgid "Uses landscape or reverse landscape based on the hardware sensor."
+msgstr ""
+
+#: doc/classes/OS.xml:1112
+msgid "Uses portrait or reverse portrait based on the hardware sensor."
+msgstr ""
+
+#: doc/classes/OS.xml:1115
+msgid "Uses most suitable orientation based on the hardware sensor."
+msgstr ""
+
+#: doc/classes/OS.xml:1118
+msgid "Desktop directory path."
+msgstr ""
+
+#: doc/classes/OS.xml:1121
+msgid "DCIM (Digital Camera Images) directory path."
+msgstr ""
+
+#: doc/classes/OS.xml:1124
+msgid "Documents directory path."
+msgstr ""
+
+#: doc/classes/OS.xml:1127
+msgid "Downloads directory path."
+msgstr ""
+
+#: doc/classes/OS.xml:1130
+msgid "Movies directory path."
+msgstr ""
+
+#: doc/classes/OS.xml:1133
+msgid "Music directory path."
+msgstr ""
+
+#: doc/classes/OS.xml:1136
+msgid "Pictures directory path."
+msgstr ""
+
+#: doc/classes/OS.xml:1139
+msgid "Ringtones directory path."
+msgstr ""
+
+#: doc/classes/OS.xml:1142
+msgid "Unknown powerstate."
+msgstr ""
+
+#: doc/classes/OS.xml:1145
+msgid "Unplugged, running on battery."
+msgstr ""
+
+#: doc/classes/OS.xml:1148
+msgid "Plugged in, no battery available."
+msgstr ""
+
+#: doc/classes/OS.xml:1151
+msgid "Plugged in, battery charging."
+msgstr ""
+
+#: doc/classes/OS.xml:1154
+msgid "Plugged in, battery fully charged."
+msgstr ""
+
+#: doc/classes/PackedDataContainerRef.xml:4
+msgid "Reference version of [PackedDataContainer]."
+msgstr ""
+
+#: doc/classes/PackedScene.xml:4
+msgid "An abstraction of a serialized scene."
+msgstr ""
+
+#: doc/classes/PackedScene.xml:7
+msgid ""
+"A simplified interface to a scene file. Provides access to operations and "
+"checks that can be performed on the scene resource itself.\n"
+"Can be used to save a node to a file. When saving, the node as well as all "
+"the nodes it owns get saved (see [code]owner[/code] property on [Node]).\n"
+"[b]Note:[/b] The node doesn't need to own itself.\n"
+"[b]Example of loading a saved scene:[/b]\n"
+"[codeblock]\n"
+"# Use `load()` instead of `preload()` if the path isn't known at compile-"
+"time.\n"
+"var scene = preload(\"res://scene.tscn\").instance()\n"
+"# Add the node as a child of the node the script is attached to.\n"
+"add_child(scene)\n"
+"[/codeblock]\n"
+"[b]Example of saving a node with different owners:[/b] The following example "
+"creates 3 objects: [code]Node2D[/code] ([code]node[/code]), "
+"[code]RigidBody2D[/code] ([code]rigid[/code]) and [code]CollisionObject2D[/"
+"code] ([code]collision[/code]). [code]collision[/code] is a child of "
+"[code]rigid[/code] which is a child of [code]node[/code]. Only [code]rigid[/"
+"code] is owned by [code]node[/code] and [code]pack[/code] will therefore "
+"only save those two nodes, but not [code]collision[/code].\n"
+"[codeblock]\n"
+"# Create the objects.\n"
+"var node = Node2D.new()\n"
+"var rigid = RigidBody2D.new()\n"
+"var collision = CollisionShape2D.new()\n"
+"\n"
+"# Create the object hierarchy.\n"
+"rigid.add_child(collision)\n"
+"node.add_child(rigid)\n"
+"\n"
+"# Change owner of `rigid`, but not of `collision`.\n"
+"rigid.owner = node\n"
+"\n"
+"var scene = PackedScene.new()\n"
+"# Only `node` and `rigid` are now packed.\n"
+"var result = scene.pack(node)\n"
+"if result == OK:\n"
+" var error = ResourceSaver.save(\"res://path/name.scn\", scene) # Or "
+"\"user://...\"\n"
+" if error != OK:\n"
+" push_error(\"An error occurred while saving the scene to disk.\")\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/PackedScene.xml:47
+msgid "Returns [code]true[/code] if the scene file has nodes."
+msgstr ""
+
+#: doc/classes/PackedScene.xml:53
+msgid ""
+"Returns the [code]SceneState[/code] representing the scene file contents."
+msgstr ""
+
+#: doc/classes/PackedScene.xml:60
+msgid ""
+"Instantiates the scene's node hierarchy. Triggers child scene "
+"instantiation(s). Triggers a [constant Node.NOTIFICATION_INSTANCED] "
+"notification on the root node."
+msgstr ""
+
+#: doc/classes/PackedScene.xml:67
+msgid ""
+"Pack will ignore any sub-nodes not owned by given node. See [member Node."
+"owner]."
+msgstr ""
+
+#: doc/classes/PackedScene.xml:73
+msgid ""
+"A dictionary representation of the scene contents.\n"
+"Available keys include \"rnames\" and \"variants\" for resources, "
+"\"node_count\", \"nodes\", \"node_paths\" for nodes, \"editable_instances\" "
+"for base scene children overrides, \"conn_count\" and \"conns\" for signal "
+"connections, and \"version\" for the format style of the PackedScene."
+msgstr ""
+
+#: doc/classes/PackedScene.xml:79
+msgid "If passed to [method instance], blocks edits to the scene state."
+msgstr ""
+
+#: doc/classes/PackedScene.xml:82
+msgid ""
+"If passed to [method instance], provides local scene resources to the local "
+"scene.\n"
+"[b]Note:[/b] Only available in editor builds."
+msgstr ""
+
+#: doc/classes/PackedScene.xml:86
+msgid ""
+"If passed to [method instance], provides local scene resources to the local "
+"scene. Only the main scene should receive the main edit state.\n"
+"[b]Note:[/b] Only available in editor builds."
+msgstr ""
+
+#: doc/classes/PacketPeer.xml:4
+msgid "Abstraction and base class for packet-based protocols."
+msgstr ""
+
+#: doc/classes/PacketPeer.xml:7
+msgid ""
+"PacketPeer is an abstraction and base class for packet-based protocols (such "
+"as UDP). It provides an API for sending and receiving packets both as raw "
+"data or variables. This makes it easy to transfer data over a protocol, "
+"without having to encode data as low-level bytes or having to worry about "
+"network ordering."
+msgstr ""
+
+#: doc/classes/PacketPeer.xml:15
+msgid "Returns the number of packets currently available in the ring-buffer."
+msgstr ""
+
+#: doc/classes/PacketPeer.xml:21
+msgid "Gets a raw packet."
+msgstr ""
+
+#: doc/classes/PacketPeer.xml:27
+msgid ""
+"Returns the error state of the last packet received (via [method get_packet] "
+"and [method get_var])."
+msgstr ""
+
+#: doc/classes/PacketPeer.xml:34
+msgid ""
+"Gets a Variant. If [code]allow_objects[/code] (or [member "
+"allow_object_decoding]) is [code]true[/code], decoding objects is allowed.\n"
+"[b]Warning:[/b] Deserialized objects can contain code which gets executed. "
+"Do not use this option if the serialized object comes from untrusted sources "
+"to avoid potential security threats such as remote code execution."
+msgstr ""
+
+#: doc/classes/PacketPeer.xml:42
+msgid "Sends a raw packet."
+msgstr ""
+
+#: doc/classes/PacketPeer.xml:50
+msgid ""
+"Sends a [Variant] as a packet. If [code]full_objects[/code] (or [member "
+"allow_object_decoding]) is [code]true[/code], encoding objects is allowed "
+"(and can potentially include code)."
+msgstr ""
+
+#: doc/classes/PacketPeer.xml:56
+msgid ""
+"[i]Deprecated.[/i] Use [code]get_var[/code] and [code]put_var[/code] "
+"parameters instead.\n"
+"If [code]true[/code], the PacketPeer will allow encoding and decoding of "
+"object via [method get_var] and [method put_var].\n"
+"[b]Warning:[/b] Deserialized objects can contain code which gets executed. "
+"Do not use this option if the serialized object comes from untrusted sources "
+"to avoid potential security threats such as remote code execution."
+msgstr ""
+
+#: doc/classes/PacketPeer.xml:61
+msgid ""
+"Maximum buffer size allowed when encoding [Variant]s. Raise this value to "
+"support heavier memory allocations.\n"
+"The [method put_var] method allocates memory on the stack, and the buffer "
+"used will grow automatically to the closest power of two to match the size "
+"of the [Variant]. If the [Variant] is bigger than "
+"[code]encode_buffer_max_size[/code], the method will error out with "
+"[constant ERR_OUT_OF_MEMORY]."
+msgstr ""
+
+#: doc/classes/PacketPeerDTLS.xml:4
+msgid "DTLS packet peer."
+msgstr ""
+
+#: doc/classes/PacketPeerDTLS.xml:7
+msgid ""
+"This class represents a DTLS peer connection. It can be used to connect to a "
+"DTLS server, and is returned by [method DTLSServer.take_connection].\n"
+"[b]Warning:[/b] SSL/TLS certificate revocation and certificate pinning are "
+"currently not supported. Revoked certificates are accepted as long as they "
+"are otherwise valid. If this is a concern, you may want to use automatically "
+"managed certificates with a short validity period."
+msgstr ""
+
+#: doc/classes/PacketPeerDTLS.xml:20
+msgid ""
+"Connects a [code]peer[/code] beginning the DTLS handshake using the "
+"underlying [PacketPeerUDP] which must be connected (see [method "
+"PacketPeerUDP.connect_to_host]). If [code]validate_certs[/code] is "
+"[code]true[/code], [PacketPeerDTLS] will validate that the certificate "
+"presented by the remote peer and match it with the [code]for_hostname[/code] "
+"argument. You can specify a custom [X509Certificate] to use for validation "
+"via the [code]valid_certificate[/code] argument."
+msgstr ""
+
+#: doc/classes/PacketPeerDTLS.xml:26
+msgid "Disconnects this peer, terminating the DTLS session."
+msgstr ""
+
+#: doc/classes/PacketPeerDTLS.xml:32 doc/classes/StreamPeerSSL.xml:43
+msgid "Returns the status of the connection. See [enum Status] for values."
+msgstr ""
+
+#: doc/classes/PacketPeerDTLS.xml:38
+msgid ""
+"Poll the connection to check for incoming packets. Call this frequently to "
+"update the status and keep the connection working."
+msgstr ""
+
+#: doc/classes/PacketPeerDTLS.xml:44
+msgid "A status representing a [PacketPeerDTLS] that is disconnected."
+msgstr ""
+
+#: doc/classes/PacketPeerDTLS.xml:47
+msgid ""
+"A status representing a [PacketPeerDTLS] that is currently performing the "
+"handshake with a remote peer."
+msgstr ""
+
+#: doc/classes/PacketPeerDTLS.xml:50
+msgid ""
+"A status representing a [PacketPeerDTLS] that is connected to a remote peer."
+msgstr ""
+
+#: doc/classes/PacketPeerDTLS.xml:53
+msgid "A status representing a [PacketPeerDTLS] in a generic error state."
+msgstr ""
+
+#: doc/classes/PacketPeerDTLS.xml:56
+msgid ""
+"An error status that shows a mismatch in the DTLS certificate domain "
+"presented by the host and the domain requested for validation."
+msgstr ""
+
+#: doc/classes/PacketPeerStream.xml:4
+msgid "Wrapper to use a PacketPeer over a StreamPeer."
+msgstr ""
+
+#: doc/classes/PacketPeerStream.xml:7
+msgid ""
+"PacketStreamPeer provides a wrapper for working using packets over a stream. "
+"This allows for using packet based code with StreamPeers. PacketPeerStream "
+"implements a custom protocol over the StreamPeer, so the user should not "
+"read or write to the wrapped StreamPeer directly."
+msgstr ""
+
+#: doc/classes/PacketPeerStream.xml:19
+msgid "The wrapped [StreamPeer] object."
+msgstr ""
+
+#: doc/classes/PacketPeerUDP.xml:4
+msgid "UDP packet peer."
+msgstr ""
+
+#: doc/classes/PacketPeerUDP.xml:7
+msgid ""
+"UDP packet peer. Can be used to send raw UDP packets as well as [Variant]s."
+msgstr ""
+
+#: doc/classes/PacketPeerUDP.xml:15
+msgid "Closes the UDP socket the [PacketPeerUDP] is currently listening on."
+msgstr ""
+
+#: doc/classes/PacketPeerUDP.xml:23
+msgid ""
+"Calling this method connects this UDP peer to the given [code]host[/code]/"
+"[code]port[/code] pair. UDP is in reality connectionless, so this option "
+"only means that incoming packets from different addresses are automatically "
+"discarded, and that outgoing packets are always sent to the connected "
+"address (future calls to [method set_dest_address] are not allowed). This "
+"method does not send any data to the remote peer, to do that, use [method "
+"PacketPeer.put_var] or [method PacketPeer.put_packet] as usual. See also "
+"[UDPServer].\n"
+"[b]Note:[/b] Connecting to the remote peer does not help to protect from "
+"malicious attacks like IP spoofing, etc. Think about using an encryption "
+"technique like SSL or DTLS if you feel like your application is transferring "
+"sensitive information."
+msgstr ""
+
+#: doc/classes/PacketPeerUDP.xml:30
+msgid ""
+"Returns the IP of the remote peer that sent the last packet(that was "
+"received with [method PacketPeer.get_packet] or [method PacketPeer.get_var])."
+msgstr ""
+
+#: doc/classes/PacketPeerUDP.xml:36
+msgid ""
+"Returns the port of the remote peer that sent the last packet(that was "
+"received with [method PacketPeer.get_packet] or [method PacketPeer.get_var])."
+msgstr ""
+
+#: doc/classes/PacketPeerUDP.xml:42
+msgid ""
+"Returns [code]true[/code] if the UDP socket is open and has been connected "
+"to a remote address. See [method connect_to_host]."
+msgstr ""
+
+#: doc/classes/PacketPeerUDP.xml:48
+msgid "Returns whether this [PacketPeerUDP] is listening."
+msgstr ""
+
+#: doc/classes/PacketPeerUDP.xml:56
+msgid ""
+"Joins the multicast group specified by [code]multicast_address[/code] using "
+"the interface identified by [code]interface_name[/code].\n"
+"You can join the same multicast group with multiple interfaces. Use [method "
+"IP.get_local_interfaces] to know which are available.\n"
+"[b]Note:[/b] Some Android devices might require the "
+"[code]CHANGE_WIFI_MULTICAST_STATE[/code] permission for multicast to work."
+msgstr ""
+
+#: doc/classes/PacketPeerUDP.xml:66
+msgid ""
+"Removes the interface identified by [code]interface_name[/code] from the "
+"multicast group specified by [code]multicast_address[/code]."
+msgstr ""
+
+#: doc/classes/PacketPeerUDP.xml:75
+msgid ""
+"Makes this [PacketPeerUDP] listen on the [code]port[/code] binding to "
+"[code]bind_address[/code] with a buffer size [code]recv_buf_size[/code].\n"
+"If [code]bind_address[/code] is set to [code]\"*\"[/code] (default), the "
+"peer will listen on all available addresses (both IPv4 and IPv6).\n"
+"If [code]bind_address[/code] is set to [code]\"0.0.0.0\"[/code] (for IPv4) "
+"or [code]\"::\"[/code] (for IPv6), the peer will listen on all available "
+"addresses matching that IP type.\n"
+"If [code]bind_address[/code] is set to any valid address (e.g. "
+"[code]\"192.168.1.101\"[/code], [code]\"::1\"[/code], etc), the peer will "
+"only listen on the interface with that addresses (or fail if no interface "
+"with the given address exists)."
+msgstr ""
+
+#: doc/classes/PacketPeerUDP.xml:85
+msgid ""
+"Enable or disable sending of broadcast packets (e.g. "
+"[code]set_dest_address(\"255.255.255.255\", 4343)[/code]. This option is "
+"disabled by default.\n"
+"[b]Note:[/b] Some Android devices might require the "
+"[code]CHANGE_WIFI_MULTICAST_STATE[/code] permission and this option to be "
+"enabled to receive broadcast packets too."
+msgstr ""
+
+#: doc/classes/PacketPeerUDP.xml:94
+msgid ""
+"Sets the destination address and port for sending packets and variables. A "
+"hostname will be resolved using DNS if needed.\n"
+"[b]Note:[/b] [method set_broadcast_enabled] must be enabled before sending "
+"packets to a broadcast address (e.g. [code]255.255.255.255[/code])."
+msgstr ""
+
+#: doc/classes/PacketPeerUDP.xml:101
+msgid ""
+"Waits for a packet to arrive on the listening port. See [method listen].\n"
+"[b]Note:[/b] [method wait] can't be interrupted once it has been called. "
+"This can be worked around by allowing the other party to send a specific "
+"\"death pill\" packet like this:\n"
+"[codeblock]\n"
+"# Server\n"
+"socket.set_dest_address(\"127.0.0.1\", 789)\n"
+"socket.put_packet(\"Time to stop\".to_ascii())\n"
+"\n"
+"# Client\n"
+"while socket.wait() == OK:\n"
+" var data = socket.get_packet().get_string_from_ascii()\n"
+" if data == \"Time to stop\":\n"
+" return\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Panel.xml:4
+msgid "Provides an opaque background for [Control] children."
+msgstr ""
+
+#: doc/classes/Panel.xml:7
+msgid ""
+"Panel is a [Control] that displays an opaque background. It's commonly used "
+"as a parent and container for other types of [Control] nodes."
+msgstr ""
+
+#: doc/classes/Panel.xml:11
+msgid "https://godotengine.org/asset-library/asset/516"
+msgstr ""
+
+#: doc/classes/Panel.xml:12 doc/classes/Skeleton.xml:12
+#: doc/classes/SkeletonIK.xml:29
+msgid "https://godotengine.org/asset-library/asset/523"
+msgstr ""
+
+#: doc/classes/Panel.xml:20
+msgid "The style of this [Panel]."
+msgstr ""
+
+#: doc/classes/PanelContainer.xml:4
+msgid "Panel container type."
+msgstr ""
+
+#: doc/classes/PanelContainer.xml:7
+msgid ""
+"Panel container type. This container fits controls inside of the delimited "
+"area of a stylebox. It's useful for giving controls an outline."
+msgstr ""
+
+#: doc/classes/PanelContainer.xml:18
+msgid "The style of [PanelContainer]'s background."
+msgstr ""
+
+#: doc/classes/PanoramaSky.xml:4
+msgid "A type of [Sky] used to draw a background texture."
+msgstr ""
+
+#: doc/classes/PanoramaSky.xml:7
+msgid ""
+"A resource referenced in an [Environment] that is used to draw a background. "
+"The Panorama sky functions similar to skyboxes in other engines, except it "
+"uses an equirectangular sky map instead of a cube map.\n"
+"Using an HDR panorama is strongly recommended for accurate, high-quality "
+"reflections. Godot supports the Radiance HDR ([code].hdr[/code]) and OpenEXR "
+"([code].exr[/code]) image formats for this purpose.\n"
+"You can use [url=https://danilw.github.io/GLSL-howto/cubemap_to_panorama_js/"
+"cubemap_to_panorama.html]this tool[/url] to convert a cube map to an "
+"equirectangular sky map."
+msgstr ""
+
+#: doc/classes/PanoramaSky.xml:17
+msgid "[Texture] to be applied to the PanoramaSky."
+msgstr ""
+
+#: doc/classes/ParallaxBackground.xml:4
+msgid "A node used to create a parallax scrolling background."
+msgstr ""
+
+#: doc/classes/ParallaxBackground.xml:7
+msgid ""
+"A ParallaxBackground uses one or more [ParallaxLayer] child nodes to create "
+"a parallax effect. Each [ParallaxLayer] can move at a different speed using "
+"[member ParallaxLayer.motion_offset]. This creates an illusion of depth in a "
+"2D game. If not used with a [Camera2D], you must manually calculate the "
+"[member scroll_offset]."
+msgstr ""
+
+#: doc/classes/ParallaxBackground.xml:16
+msgid "The base position offset for all [ParallaxLayer] children."
+msgstr ""
+
+#: doc/classes/ParallaxBackground.xml:19
+msgid "The base motion scale for all [ParallaxLayer] children."
+msgstr ""
+
+#: doc/classes/ParallaxBackground.xml:22
+msgid ""
+"If [code]true[/code], elements in [ParallaxLayer] child aren't affected by "
+"the zoom level of the camera."
+msgstr ""
+
+#: doc/classes/ParallaxBackground.xml:25
+msgid ""
+"Top-left limits for scrolling to begin. If the camera is outside of this "
+"limit, the background will stop scrolling. Must be lower than [member "
+"scroll_limit_end] to work."
+msgstr ""
+
+#: doc/classes/ParallaxBackground.xml:28
+msgid ""
+"Bottom-right limits for scrolling to end. If the camera is outside of this "
+"limit, the background will stop scrolling. Must be higher than [member "
+"scroll_limit_begin] to work."
+msgstr ""
+
+#: doc/classes/ParallaxBackground.xml:31
+msgid ""
+"The ParallaxBackground's scroll value. Calculated automatically when using a "
+"[Camera2D], but can be used to manually manage scrolling when no camera is "
+"present."
+msgstr ""
+
+#: doc/classes/ParallaxLayer.xml:4
+msgid "A parallax scrolling layer to be used with [ParallaxBackground]."
+msgstr ""
+
+#: doc/classes/ParallaxLayer.xml:7
+msgid ""
+"A ParallaxLayer must be the child of a [ParallaxBackground] node. Each "
+"ParallaxLayer can be set to move at different speeds relative to the camera "
+"movement or the [member ParallaxBackground.scroll_offset] value.\n"
+"This node's children will be affected by its scroll offset.\n"
+"[b]Note:[/b] Any changes to this node's position and scale made after it "
+"enters the scene will be ignored."
+msgstr ""
+
+#: doc/classes/ParallaxLayer.xml:17
+msgid ""
+"The ParallaxLayer's [Texture] mirroring. Useful for creating an infinite "
+"scrolling background. If an axis is set to [code]0[/code], the [Texture] "
+"will not be mirrored."
+msgstr ""
+
+#: doc/classes/ParallaxLayer.xml:20
+msgid ""
+"The ParallaxLayer's offset relative to the parent ParallaxBackground's "
+"[member ParallaxBackground.scroll_offset]."
+msgstr ""
+
+#: doc/classes/ParallaxLayer.xml:23
+msgid ""
+"Multiplies the ParallaxLayer's motion. If an axis is set to [code]0[/code], "
+"it will not scroll."
+msgstr ""
+
+#: doc/classes/Particles.xml:4
+msgid "GPU-based 3D particle emitter."
+msgstr ""
+
+#: doc/classes/Particles.xml:7
+msgid ""
+"3D particle node used to create a variety of particle systems and effects. "
+"[Particles] features an emitter that generates some number of particles at a "
+"given rate.\n"
+"Use the [code]process_material[/code] property to add a [ParticlesMaterial] "
+"to configure particle appearance and behavior. Alternatively, you can add a "
+"[ShaderMaterial] which will be applied to all particles.\n"
+"[b]Note:[/b] [Particles] only work when using the GLES3 renderer. If using "
+"the GLES2 renderer, use [CPUParticles] instead. You can convert [Particles] "
+"to [CPUParticles] by selecting the node, clicking the [b]Particles[/b] menu "
+"at the top of the 3D editor viewport then choosing [b]Convert to "
+"CPUParticles[/b].\n"
+"[b]Note:[/b] After working on a Particles node, remember to update its "
+"[member visibility_aabb] by selecting it, clicking the [b]Particles[/b] menu "
+"at the top of the 3D editor viewport then choose [b]Generate Visibility "
+"AABB[/b]. Otherwise, particles may suddenly disappear depending on the "
+"camera position and angle."
+msgstr ""
+
+#: doc/classes/Particles.xml:13
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/3d/vertex_animation/"
+"controlling_thousands_of_fish.html"
+msgstr ""
+
+#: doc/classes/Particles.xml:20
+msgid ""
+"Returns the axis-aligned bounding box that contains all the particles that "
+"are active in the current frame."
+msgstr ""
+
+#: doc/classes/Particles.xml:27
+msgid "Returns the [Mesh] that is drawn at index [code]pass[/code]."
+msgstr ""
+
+#: doc/classes/Particles.xml:33
+msgid "Restarts the particle emission, clearing existing particles."
+msgstr ""
+
+#: doc/classes/Particles.xml:41
+msgid "Sets the [Mesh] that is drawn at index [code]pass[/code]."
+msgstr ""
+
+#: doc/classes/Particles.xml:54
+msgid "[Mesh] that is drawn for the first draw pass."
+msgstr ""
+
+#: doc/classes/Particles.xml:57
+msgid "[Mesh] that is drawn for the second draw pass."
+msgstr ""
+
+#: doc/classes/Particles.xml:60
+msgid "[Mesh] that is drawn for the third draw pass."
+msgstr ""
+
+#: doc/classes/Particles.xml:63
+msgid "[Mesh] that is drawn for the fourth draw pass."
+msgstr ""
+
+#: doc/classes/Particles.xml:66
+msgid "The number of draw passes when rendering particles."
+msgstr ""
+
+#: doc/classes/Particles.xml:72
+msgid ""
+"Time ratio between each emission. If [code]0[/code], particles are emitted "
+"continuously. If [code]1[/code], all particles are emitted simultaneously."
+msgstr ""
+
+#: doc/classes/Particles.xml:87
+msgid ""
+"If [code]true[/code], only [code]amount[/code] particles will be emitted."
+msgstr ""
+
+#: doc/classes/Particles.xml:90
+msgid ""
+"Amount of time to preprocess the particles before animation starts. Lets you "
+"start the animation some time after particles have started emitting."
+msgstr ""
+
+#: doc/classes/Particles.xml:93 doc/classes/Particles2D.xml:68
+msgid ""
+"[Material] for processing particles. Can be a [ParticlesMaterial] or a "
+"[ShaderMaterial]."
+msgstr ""
+
+#: doc/classes/Particles.xml:96
+msgid "Emission randomness ratio."
+msgstr ""
+
+#: doc/classes/Particles.xml:99
+msgid ""
+"Speed scaling ratio. A value of [code]0[/code] can be used to pause the "
+"particles."
+msgstr ""
+
+#: doc/classes/Particles.xml:102
+msgid ""
+"The [AABB] that determines the node's region which needs to be visible on "
+"screen for the particle system to be active.\n"
+"Grow the box if particles suddenly appear/disappear when the node enters/"
+"exits the screen. The [AABB] can be grown via code or with the [b]Particles "
+"→ Generate AABB[/b] editor tool.\n"
+"[b]Note:[/b] If the [ParticlesMaterial] in use is configured to cast "
+"shadows, you may want to enlarge this AABB to ensure the shadow is updated "
+"when particles are off-screen."
+msgstr ""
+
+#: doc/classes/Particles.xml:118
+msgid "Maximum number of draw passes supported."
+msgstr ""
+
+#: doc/classes/Particles2D.xml:4
+msgid "GPU-based 2D particle emitter."
+msgstr ""
+
+#: doc/classes/Particles2D.xml:7
+msgid ""
+"2D particle node used to create a variety of particle systems and effects. "
+"[Particles2D] features an emitter that generates some number of particles at "
+"a given rate.\n"
+"Use the [code]process_material[/code] property to add a [ParticlesMaterial] "
+"to configure particle appearance and behavior. Alternatively, you can add a "
+"[ShaderMaterial] which will be applied to all particles.\n"
+"[b]Note:[/b] [Particles2D] only work when using the GLES3 renderer. If using "
+"the GLES2 renderer, use [CPUParticles2D] instead. You can convert "
+"[Particles2D] to [CPUParticles2D] by selecting the node, clicking the "
+"[b]Particles[/b] menu at the top of the 2D editor viewport then choosing "
+"[b]Convert to CPUParticles2D[/b].\n"
+"[b]Note:[/b] After working on a Particles node, remember to update its "
+"[member visibility_rect] by selecting it, clicking the [b]Particles[/b] menu "
+"at the top of the 2D editor viewport then choose [b]Generate Visibility "
+"Rect[/b]. Otherwise, particles may suddenly disappear depending on the "
+"camera position and angle.\n"
+"[b]Note:[/b] Unlike [CPUParticles2D], [Particles2D] currently ignore the "
+"texture region defined in [AtlasTexture]s."
+msgstr ""
+
+#: doc/classes/Particles2D.xml:21
+msgid "Returns a rectangle containing the positions of all existing particles."
+msgstr ""
+
+#: doc/classes/Particles2D.xml:27
+msgid "Restarts all the existing particles."
+msgstr ""
+
+#: doc/classes/Particles2D.xml:80
+msgid ""
+"The [Rect2] that determines the node's region which needs to be visible on "
+"screen for the particle system to be active.\n"
+"Grow the rect if particles suddenly appear/disappear when the node enters/"
+"exits the screen. The [Rect2] can be grown via code or with the [b]Particles "
+"→ Generate Visibility Rect[/b] editor tool."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:4
+msgid "Particle properties for [Particles] and [Particles2D] nodes."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:7
+msgid ""
+"ParticlesMaterial defines particle properties and behavior. It is used in "
+"the [code]process_material[/code] of [Particles] and [Particles2D] emitter "
+"nodes.\n"
+"Some of this material's properties are applied to each particle when "
+"emitted, while others can have a [CurveTexture] applied to vary values over "
+"the lifetime of the particle.\n"
+"When a randomness ratio is applied to a property it is used to scale that "
+"property by a random amount. The random ratio is used to interpolate between "
+"[code]1.0[/code] and a random number less than one, the result is multiplied "
+"by the property to obtain the randomized property. For example a random "
+"ratio of [code]0.4[/code] would scale the original property between "
+"[code]0.4-1.0[/code] of its original value."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:18
+msgid "Returns [code]true[/code] if the specified flag is enabled."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:32
+msgid "Returns the randomness ratio associated with the specified parameter."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:39
+msgid "Returns the [Texture] used by the specified parameter."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:47
+msgid ""
+"If [code]true[/code], enables the specified flag. See [enum Flags] for "
+"options."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:55
+msgid "Sets the specified [enum Parameter]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:63
+msgid "Sets the randomness ratio for the specified [enum Parameter]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:71
+msgid "Sets the [Texture] for the specified [enum Parameter]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:77
+msgid ""
+"Initial rotation applied to each particle, in degrees.\n"
+"Only applied when [member flag_disable_z] or [member flag_rotate_y] are "
+"[code]true[/code] or the [SpatialMaterial] being used to draw the particle "
+"is using [constant SpatialMaterial.BILLBOARD_PARTICLES]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:81
+msgid "Each particle's rotation will be animated along this [CurveTexture]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:87
+msgid ""
+"Initial angular velocity applied to each particle. Sets the speed of "
+"rotation of the particle.\n"
+"Only applied when [member flag_disable_z] or [member flag_rotate_y] are "
+"[code]true[/code] or the [SpatialMaterial] being used to draw the particle "
+"is using [constant SpatialMaterial.BILLBOARD_PARTICLES]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:91
+msgid "Each particle's angular velocity will vary along this [CurveTexture]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:100
+msgid "Each particle's animation offset will vary along this [CurveTexture]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:109
+msgid "Each particle's animation speed will vary along this [CurveTexture]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:115
+msgid ""
+"Each particle's initial color. If the [Particles2D]'s [code]texture[/code] "
+"is defined, it will be multiplied by this color. To have particle display "
+"color in a [SpatialMaterial] make sure to set [member SpatialMaterial."
+"vertex_color_use_as_albedo] to [code]true[/code]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:124
+msgid "Damping will vary along this [CurveTexture]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:133
+msgid ""
+"The box's extents if [code]emission_shape[/code] is set to [constant "
+"EMISSION_SHAPE_BOX]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:136
+msgid ""
+"Particle color will be modulated by color determined by sampling this "
+"texture at the same point as the [member emission_point_texture]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:139
+msgid ""
+"Particle velocity and rotation will be set by sampling this texture at the "
+"same point as the [member emission_point_texture]. Used only in [constant "
+"EMISSION_SHAPE_DIRECTED_POINTS]. Can be created automatically from mesh or "
+"node by selecting \"Create Emission Points from Mesh/Node\" under the "
+"\"Particles\" tool in the toolbar."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:142
+msgid ""
+"The number of emission points if [code]emission_shape[/code] is set to "
+"[constant EMISSION_SHAPE_POINTS] or [constant "
+"EMISSION_SHAPE_DIRECTED_POINTS]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:145
+msgid ""
+"Particles will be emitted at positions determined by sampling this texture "
+"at a random position. Used with [constant EMISSION_SHAPE_POINTS] and "
+"[constant EMISSION_SHAPE_DIRECTED_POINTS]. Can be created automatically from "
+"mesh or node by selecting \"Create Emission Points from Mesh/Node\" under "
+"the \"Particles\" tool in the toolbar."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:148
+msgid ""
+"The axis of the ring when using the emitter [constant EMISSION_SHAPE_RING]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:151
+msgid ""
+"The height of the ring when using the emitter [constant EMISSION_SHAPE_RING]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:154
+msgid ""
+"The inner radius of the ring when using the emitter [constant "
+"EMISSION_SHAPE_RING]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:157
+msgid ""
+"The radius of the ring when using the emitter [constant EMISSION_SHAPE_RING]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:160
+msgid ""
+"Particles will be emitted inside this region. Use [enum EmissionShape] "
+"constants for values."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:163
+msgid ""
+"The sphere's radius if [code]emission_shape[/code] is set to [constant "
+"EMISSION_SHAPE_SPHERE]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:175
+msgid "Amount of [member spread] along the Y axis."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:184
+msgid "Each particle's hue will vary along this [CurveTexture]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:202
+msgid ""
+"Each particle's linear acceleration will vary along this [CurveTexture]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:208
+msgid ""
+"Orbital velocity applied to each particle. Makes the particles circle around "
+"origin. Specified in number of full rotations around origin per second.\n"
+"Only available when [member flag_disable_z] is [code]true[/code]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:212
+msgid "Each particle's orbital velocity will vary along this [CurveTexture]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:221
+msgid ""
+"Each particle's radial acceleration will vary along this [CurveTexture]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:230
+msgid "Each particle's scale will vary along this [CurveTexture]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:242
+msgid ""
+"Each particle's tangential acceleration will vary along this [CurveTexture]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:248
+msgid "Trail particles' color will vary along this [GradientTexture]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:251
+msgid ""
+"Emitter will emit [code]amount[/code] divided by [code]trail_divisor[/code] "
+"particles. The remaining particles will be used as trail(s)."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:254
+msgid "Trail particles' size will vary along this [CurveTexture]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:259
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_texture] to set initial velocity properties."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:262
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_texture] to set angular velocity properties."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:265
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_texture] to set orbital velocity properties."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:268
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_texture] to set linear acceleration properties."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:271
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_texture] to set radial acceleration properties."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:274
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_texture] to set tangential acceleration properties."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:277
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_texture] to set damping properties."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:280
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_texture] to set angle properties."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:283
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_texture] to set scale properties."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:286
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_texture] to set hue variation properties."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:289
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_texture] to set animation speed properties."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:292
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_texture] to set animation offset properties."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:298
+msgid "Use with [method set_flag] to set [member flag_align_y]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:301
+msgid "Use with [method set_flag] to set [member flag_rotate_y]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:304
+msgid "Use with [method set_flag] to set [member flag_disable_z]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:319
+msgid ""
+"Particles will be emitted at a position determined by sampling a random "
+"point on the [member emission_point_texture]. Particle color will be "
+"modulated by [member emission_color_texture]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:322
+msgid ""
+"Particles will be emitted at a position determined by sampling a random "
+"point on the [member emission_point_texture]. Particle velocity and rotation "
+"will be set based on [member emission_normal_texture]. Particle color will "
+"be modulated by [member emission_color_texture]."
+msgstr ""
+
+#: doc/classes/Path.xml:4
+msgid "Contains a [Curve3D] path for [PathFollow] nodes to follow."
+msgstr ""
+
+#: doc/classes/Path.xml:7
+msgid ""
+"Can have [PathFollow] child nodes moving along the [Curve3D]. See "
+"[PathFollow] for more information on the usage.\n"
+"Note that the path is considered as relative to the moved nodes (children of "
+"[PathFollow]). As such, the curve should usually start with a zero vector "
+"[code](0, 0, 0)[/code]."
+msgstr ""
+
+#: doc/classes/Path.xml:16
+msgid "A [Curve3D] describing the path."
+msgstr ""
+
+#: doc/classes/Path.xml:22
+msgid "Emitted when the [member curve] changes."
+msgstr ""
+
+#: doc/classes/Path2D.xml:4
+msgid "Contains a [Curve2D] path for [PathFollow2D] nodes to follow."
+msgstr ""
+
+#: doc/classes/Path2D.xml:7
+msgid ""
+"Can have [PathFollow2D] child nodes moving along the [Curve2D]. See "
+"[PathFollow2D] for more information on usage.\n"
+"[b]Note:[/b] The path is considered as relative to the moved nodes (children "
+"of [PathFollow2D]). As such, the curve should usually start with a zero "
+"vector ([code](0, 0)[/code])."
+msgstr ""
+
+#: doc/classes/Path2D.xml:16
+msgid "A [Curve2D] describing the path."
+msgstr ""
+
+#: doc/classes/PathFollow.xml:4
+msgid "Point sampler for a [Path]."
+msgstr ""
+
+#: doc/classes/PathFollow.xml:7
+msgid ""
+"This node takes its parent [Path], and returns the coordinates of a point "
+"within it, given a distance from the first vertex.\n"
+"It is useful for making other nodes follow a path, without coding the "
+"movement pattern. For that, the nodes must be children of this node. The "
+"descendant nodes will then move accordingly when setting an offset in this "
+"node."
+msgstr ""
+
+#: doc/classes/PathFollow.xml:16
+msgid ""
+"If [code]true[/code], the position between two cached points is interpolated "
+"cubically, and linearly otherwise.\n"
+"The points along the [Curve3D] of the [Path] are precomputed before use, for "
+"faster calculations. The point at the requested offset is then calculated "
+"interpolating between two adjacent cached points. This may present a problem "
+"if the curve makes sharp turns, as the cached points may not follow the "
+"curve closely enough.\n"
+"There are two answers to this problem: either increase the number of cached "
+"points and increase memory consumption, or make a cubic interpolation "
+"between two points at the cost of (slightly) slower calculations."
+msgstr ""
+
+#: doc/classes/PathFollow.xml:21 doc/classes/PathFollow2D.xml:21
+msgid "The node's offset along the curve."
+msgstr ""
+
+#: doc/classes/PathFollow.xml:24 doc/classes/PathFollow2D.xml:27
+msgid ""
+"If [code]true[/code], any offset outside the path's length will wrap around, "
+"instead of stopping at the ends. Use it for cyclic paths."
+msgstr ""
+
+#: doc/classes/PathFollow.xml:27
+msgid ""
+"The distance from the first vertex, measured in 3D units along the path. "
+"This sets this node's position to a point within the path."
+msgstr ""
+
+#: doc/classes/PathFollow.xml:30
+msgid ""
+"Allows or forbids rotation on one or more axes, depending on the [enum "
+"RotationMode] constants being used."
+msgstr ""
+
+#: doc/classes/PathFollow.xml:33
+msgid ""
+"The distance from the first vertex, considering 0.0 as the first vertex and "
+"1.0 as the last. This is just another way of expressing the offset within "
+"the path, as the offset supplied is multiplied internally by the path's "
+"length."
+msgstr ""
+
+#: doc/classes/PathFollow.xml:36 doc/classes/PathFollow2D.xml:39
+msgid "The node's offset perpendicular to the curve."
+msgstr ""
+
+#: doc/classes/PathFollow.xml:41
+msgid "Forbids the PathFollow to rotate."
+msgstr ""
+
+#: doc/classes/PathFollow.xml:44
+msgid "Allows the PathFollow to rotate in the Y axis only."
+msgstr ""
+
+#: doc/classes/PathFollow.xml:47
+msgid "Allows the PathFollow to rotate in both the X, and Y axes."
+msgstr ""
+
+#: doc/classes/PathFollow.xml:50
+msgid "Allows the PathFollow to rotate in any axis."
+msgstr ""
+
+#: doc/classes/PathFollow.xml:53
+msgid ""
+"Uses the up vector information in a [Curve3D] to enforce orientation. This "
+"rotation mode requires the [Path]'s [member Curve3D.up_vector_enabled] "
+"property to be set to [code]true[/code]."
+msgstr ""
+
+#: doc/classes/PathFollow2D.xml:4
+msgid "Point sampler for a [Path2D]."
+msgstr ""
+
+#: doc/classes/PathFollow2D.xml:7
+msgid ""
+"This node takes its parent [Path2D], and returns the coordinates of a point "
+"within it, given a distance from the first vertex.\n"
+"It is useful for making other nodes follow a path, without coding the "
+"movement pattern. For that, the nodes must be children of this node. The "
+"descendant nodes will then move accordingly when setting an offset in this "
+"node."
+msgstr ""
+
+#: doc/classes/PathFollow2D.xml:16
+msgid ""
+"If [code]true[/code], the position between two cached points is interpolated "
+"cubically, and linearly otherwise.\n"
+"The points along the [Curve2D] of the [Path2D] are precomputed before use, "
+"for faster calculations. The point at the requested offset is then "
+"calculated interpolating between two adjacent cached points. This may "
+"present a problem if the curve makes sharp turns, as the cached points may "
+"not follow the curve closely enough.\n"
+"There are two answers to this problem: either increase the number of cached "
+"points and increase memory consumption, or make a cubic interpolation "
+"between two points at the cost of (slightly) slower calculations."
+msgstr ""
+
+#: doc/classes/PathFollow2D.xml:24
+msgid ""
+"How far to look ahead of the curve to calculate the tangent if the node is "
+"rotating. E.g. shorter lookaheads will lead to faster rotations."
+msgstr ""
+
+#: doc/classes/PathFollow2D.xml:30
+msgid "The distance along the path in pixels."
+msgstr ""
+
+#: doc/classes/PathFollow2D.xml:33
+msgid ""
+"If [code]true[/code], this node rotates to follow the path, making its "
+"descendants rotate."
+msgstr ""
+
+#: doc/classes/PathFollow2D.xml:36
+msgid ""
+"The distance along the path as a number in the range 0.0 (for the first "
+"vertex) to 1.0 (for the last). This is just another way of expressing the "
+"offset within the path, as the offset supplied is multiplied internally by "
+"the path's length."
+msgstr ""
+
+#: doc/classes/PCKPacker.xml:4
+msgid "Creates packages that can be loaded into a running project."
+msgstr ""
+
+#: doc/classes/PCKPacker.xml:7
+msgid ""
+"The [PCKPacker] is used to create packages that can be loaded into a running "
+"project using [method ProjectSettings.load_resource_pack].\n"
+"[codeblock]\n"
+"var packer = PCKPacker.new()\n"
+"packer.pck_start(\"test.pck\")\n"
+"packer.add_file(\"res://text.txt\", \"text.txt\")\n"
+"packer.flush()\n"
+"[/codeblock]\n"
+"The above [PCKPacker] creates package [code]test.pck[/code], then adds a "
+"file named [code]text.txt[/code] at the root of the package."
+msgstr ""
+
+#: doc/classes/PCKPacker.xml:24
+msgid ""
+"Adds the [code]source_path[/code] file to the current PCK package at the "
+"[code]pck_path[/code] internal path (should start with [code]res://[/code])."
+msgstr ""
+
+#: doc/classes/PCKPacker.xml:31
+msgid ""
+"Writes the files specified using all [method add_file] calls since the last "
+"flush. If [code]verbose[/code] is [code]true[/code], a list of files added "
+"will be printed to the console for easier debugging."
+msgstr ""
+
+#: doc/classes/PCKPacker.xml:39
+msgid ""
+"Creates a new PCK file with the name [code]pck_name[/code]. The [code].pck[/"
+"code] file extension isn't added automatically, so it should be part of "
+"[code]pck_name[/code] (even though it's not required)."
+msgstr ""
+
+#: doc/classes/Performance.xml:4
+msgid "Exposes performance-related data."
+msgstr ""
+
+#: doc/classes/Performance.xml:7
+msgid ""
+"This class provides access to a number of different monitors related to "
+"performance, such as memory usage, draw calls, and FPS. These are the same "
+"as the values displayed in the [b]Monitor[/b] tab in the editor's "
+"[b]Debugger[/b] panel. By using the [method get_monitor] method of this "
+"class, you can access this data from your code.\n"
+"[b]Note:[/b] A few of these monitors are only available in debug mode and "
+"will always return 0 when used in a release build.\n"
+"[b]Note:[/b] Many of these monitors are not updated in real-time, so there "
+"may be a short delay between changes."
+msgstr ""
+
+#: doc/classes/Performance.xml:18
+msgid ""
+"Returns the value of one of the available monitors. You should provide one "
+"of the [enum Monitor] constants as the argument, like this:\n"
+"[codeblock]\n"
+"print(Performance.get_monitor(Performance.TIME_FPS)) # Prints the FPS to the "
+"console\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Performance.xml:27
+msgid "Number of frames per second."
+msgstr ""
+
+#: doc/classes/Performance.xml:30
+msgid "Time it took to complete one frame, in seconds."
+msgstr ""
+
+#: doc/classes/Performance.xml:33
+msgid "Time it took to complete one physics frame, in seconds."
+msgstr ""
+
+#: doc/classes/Performance.xml:36
+msgid ""
+"Static memory currently used, in bytes. Not available in release builds."
+msgstr ""
+
+#: doc/classes/Performance.xml:39
+msgid ""
+"Dynamic memory currently used, in bytes. Not available in release builds."
+msgstr ""
+
+#: doc/classes/Performance.xml:42
+msgid "Available static memory. Not available in release builds."
+msgstr ""
+
+#: doc/classes/Performance.xml:45
+msgid "Available dynamic memory. Not available in release builds."
+msgstr ""
+
+#: doc/classes/Performance.xml:48
+msgid ""
+"Largest amount of memory the message queue buffer has used, in bytes. The "
+"message queue is used for deferred functions calls and notifications."
+msgstr ""
+
+#: doc/classes/Performance.xml:51
+msgid "Number of objects currently instanced (including nodes)."
+msgstr ""
+
+#: doc/classes/Performance.xml:54
+msgid "Number of resources currently used."
+msgstr ""
+
+#: doc/classes/Performance.xml:57
+msgid ""
+"Number of nodes currently instanced in the scene tree. This also includes "
+"the root node."
+msgstr ""
+
+#: doc/classes/Performance.xml:60
+msgid ""
+"Number of orphan nodes, i.e. nodes which are not parented to a node of the "
+"scene tree."
+msgstr ""
+
+#: doc/classes/Performance.xml:63
+msgid "3D objects drawn per frame."
+msgstr ""
+
+#: doc/classes/Performance.xml:66
+msgid "Vertices drawn per frame. 3D only."
+msgstr ""
+
+#: doc/classes/Performance.xml:69
+msgid "Material changes per frame. 3D only."
+msgstr ""
+
+#: doc/classes/Performance.xml:72
+msgid "Shader changes per frame. 3D only."
+msgstr ""
+
+#: doc/classes/Performance.xml:75
+msgid "Render surface changes per frame. 3D only."
+msgstr ""
+
+#: doc/classes/Performance.xml:78
+msgid "Draw calls per frame. 3D only."
+msgstr ""
+
+#: doc/classes/Performance.xml:81
+msgid "Items or joined items drawn per frame."
+msgstr ""
+
+#: doc/classes/Performance.xml:84
+msgid "Draw calls per frame."
+msgstr ""
+
+#: doc/classes/Performance.xml:87 doc/classes/VisualServer.xml:3696
+msgid ""
+"The amount of video memory used, i.e. texture and vertex memory combined."
+msgstr ""
+
+#: doc/classes/Performance.xml:90 doc/classes/VisualServer.xml:3699
+msgid "The amount of texture memory used."
+msgstr ""
+
+#: doc/classes/Performance.xml:93 doc/classes/VisualServer.xml:3702
+msgid "The amount of vertex memory used."
+msgstr ""
+
+#: doc/classes/Performance.xml:96 doc/classes/VisualServer.xml:3693
+msgid ""
+"Unimplemented in the GLES2 and GLES3 rendering backends, always returns 0."
+msgstr ""
+
+#: doc/classes/Performance.xml:99
+msgid "Number of active [RigidBody2D] nodes in the game."
+msgstr ""
+
+#: doc/classes/Performance.xml:102
+msgid "Number of collision pairs in the 2D physics engine."
+msgstr ""
+
+#: doc/classes/Performance.xml:105
+msgid "Number of islands in the 2D physics engine."
+msgstr ""
+
+#: doc/classes/Performance.xml:108
+msgid "Number of active [RigidBody] and [VehicleBody] nodes in the game."
+msgstr ""
+
+#: doc/classes/Performance.xml:111
+msgid "Number of collision pairs in the 3D physics engine."
+msgstr ""
+
+#: doc/classes/Performance.xml:114
+msgid "Number of islands in the 3D physics engine."
+msgstr ""
+
+#: doc/classes/Performance.xml:117
+msgid "Output latency of the [AudioServer]."
+msgstr ""
+
+#: doc/classes/Performance.xml:120
+msgid "Represents the size of the [enum Monitor] enum."
+msgstr ""
+
+#: doc/classes/PHashTranslation.xml:4
+msgid "Optimized translation."
+msgstr ""
+
+#: doc/classes/PHashTranslation.xml:7
+msgid ""
+"Optimized translation. Uses real-time compressed translations, which results "
+"in very small dictionaries."
+msgstr ""
+
+#: doc/classes/PHashTranslation.xml:16
+msgid ""
+"Generates and sets an optimized translation from the given [Translation] "
+"resource."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:4
+msgid "Direct access object to a physics body in the [Physics2DServer]."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:7
+msgid ""
+"Provides direct access to a physics body in the [Physics2DServer], allowing "
+"safe changes to physics properties. This object is passed via the direct "
+"state callback of rigid/character bodies, and is intended for changing the "
+"direct state of that body. See [method RigidBody2D._integrate_forces]."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:11
+#: doc/classes/Physics2DDirectSpaceState.xml:11
+#: doc/classes/PhysicsDirectBodyState.xml:11
+#: doc/classes/PhysicsDirectSpaceState.xml:11 doc/classes/RayCast.xml:14
+#: doc/classes/RayCast2D.xml:14 doc/classes/World.xml:10
+#: doc/classes/World2D.xml:10
+msgid "https://docs.godotengine.org/en/3.4/tutorials/physics/ray-casting.html"
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:18 doc/classes/RigidBody2D.xml:30
+msgid "Adds a constant directional force without affecting rotation."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:26
+#: doc/classes/PhysicsDirectBodyState.xml:27 doc/classes/RigidBody2D.xml:38
+msgid ""
+"Adds a positioned force to the body. Both the force and the offset from the "
+"body origin are in global coordinates."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:33 doc/classes/RigidBody2D.xml:45
+msgid "Adds a constant rotational force."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:40 doc/classes/RigidBody2D.xml:52
+msgid "Applies a directional impulse without affecting rotation."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:48
+msgid ""
+"Applies a positioned impulse to the body. An impulse is time-independent! "
+"Applying an impulse every frame would result in a framerate-dependent force. "
+"For this reason, it should only be used when simulating one-time impacts "
+"(use the \"_force\" functions otherwise). The offset uses the rotation of "
+"the global coordinate system, but is centered at the object's origin."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:55 doc/classes/RigidBody2D.xml:67
+msgid "Applies a rotational impulse to the body."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:62
+#: doc/classes/PhysicsDirectBodyState.xml:64
+msgid "Returns the collider's [RID]."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:69
+#: doc/classes/PhysicsDirectBodyState.xml:71
+msgid "Returns the collider's object id."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:76
+msgid ""
+"Returns the collider object. This depends on how it was created (will return "
+"a scene node if such was used to create it)."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:83
+#: doc/classes/PhysicsDirectBodyState.xml:85
+msgid "Returns the contact position in the collider."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:90
+#: doc/classes/PhysicsDirectBodyState.xml:92
+msgid "Returns the collider's shape index."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:97
+msgid ""
+"Returns the collided shape's metadata. This metadata is different from "
+"[method Object.get_meta], and is set with [method Physics2DServer."
+"shape_set_data]."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:104
+#: doc/classes/PhysicsDirectBodyState.xml:99
+msgid "Returns the linear velocity vector at the collider's contact point."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:110
+msgid ""
+"Returns the number of contacts this body has with other bodies.\n"
+"[b]Note:[/b] By default, this returns 0 unless bodies are configured to "
+"monitor contacts. See [member RigidBody2D.contact_monitor]."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:118
+#: doc/classes/PhysicsDirectBodyState.xml:120
+msgid "Returns the local normal at the contact point."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:125
+#: doc/classes/PhysicsDirectBodyState.xml:127
+msgid "Returns the local position of the contact point."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:132
+#: doc/classes/PhysicsDirectBodyState.xml:134
+msgid "Returns the local shape index of the collision."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:138
+#: doc/classes/PhysicsDirectBodyState.xml:140
+msgid "Returns the current state of the space, useful for queries."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:145
+#: doc/classes/PhysicsDirectBodyState.xml:147
+msgid ""
+"Returns the body's velocity at the given relative position, including both "
+"translation and rotation."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:151
+#: doc/classes/PhysicsDirectBodyState.xml:153
+msgid "Calls the built-in force integration code."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:157
+#: doc/classes/PhysicsDirectBodyState.xml:159 doc/classes/RigidBody2D.xml:101
+msgid "The body's rotational velocity."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:160
+#: doc/classes/PhysicsDirectBodyState.xml:164
+msgid "The inverse of the inertia of the body."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:163
+#: doc/classes/PhysicsDirectBodyState.xml:167
+msgid "The inverse of the mass of the body."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:166
+#: doc/classes/PhysicsDirectBodyState.xml:170 doc/classes/RigidBody2D.xml:146
+msgid "The body's linear velocity."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:169
+#: doc/classes/PhysicsDirectBodyState.xml:175
+msgid "If [code]true[/code], this body is currently sleeping (not active)."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:172
+#: doc/classes/PhysicsDirectBodyState.xml:178
+msgid "The timestep (delta) used for the simulation."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:175
+#: doc/classes/PhysicsDirectBodyState.xml:181
+msgid ""
+"The rate at which the body stops rotating, if there are not any other forces "
+"moving it."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:178
+#: doc/classes/PhysicsDirectBodyState.xml:184
+msgid "The total gravity vector being currently applied to this body."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:181
+#: doc/classes/PhysicsDirectBodyState.xml:187
+msgid ""
+"The rate at which the body stops moving, if there are not any other forces "
+"moving it."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:184
+#: doc/classes/PhysicsDirectBodyState.xml:190
+msgid "The body's transformation matrix."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:4
+msgid "Direct access object to a space in the [Physics2DServer]."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:7
+msgid ""
+"Direct access object to a space in the [Physics2DServer]. It's used mainly "
+"to do queries against objects and areas residing in a given space."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:18
+msgid ""
+"Checks how far a [Shape2D] can move without colliding. All the parameters "
+"for the query, including the shape and the motion, are supplied through a "
+"[Physics2DShapeQueryParameters] object.\n"
+"Returns an array with the safe and unsafe proportions (between 0 and 1) of "
+"the motion. The safe proportion is the maximum fraction of the motion that "
+"can be made without a collision. The unsafe proportion is the minimum "
+"fraction of the distance that must be moved for a collision. If no collision "
+"is detected a result of [code][1.0, 1.0][/code] will be returned.\n"
+"[b]Note:[/b] Any [Shape2D]s that the shape is already colliding with e.g. "
+"inside of, will be ignored. Use [method collide_shape] to determine the "
+"[Shape2D]s that the shape is already colliding with."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:28
+msgid ""
+"Checks the intersections of a shape, given through a "
+"[Physics2DShapeQueryParameters] object, against the space. The resulting "
+"array contains a list of points where the shape intersects another. Like "
+"with [method intersect_shape], the number of returned results can be limited "
+"to save processing time."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:35
+msgid ""
+"Checks the intersections of a shape, given through a "
+"[Physics2DShapeQueryParameters] object, against the space. If it collides "
+"with more than one shape, the nearest one is selected. If the shape did not "
+"intersect anything, then an empty dictionary is returned instead.\n"
+"[b]Note:[/b] This method does not take into account the [code]motion[/code] "
+"property of the object. The returned object is a dictionary containing the "
+"following fields:\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]linear_velocity[/code]: The colliding object's velocity [Vector2]. If "
+"the object is an [Area2D], the result is [code](0, 0)[/code].\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]normal[/code]: The object's surface normal at the intersection point.\n"
+"[code]point[/code]: The intersection point.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:55
+msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:96
+msgid ""
+"Intersects a ray in a given space. The returned object is a dictionary with "
+"the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]normal[/code]: The object's surface normal at the intersection point.\n"
+"[code]position[/code]: The intersection point.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"If the ray did not intersect anything, then an empty dictionary is returned "
+"instead.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:113
+msgid ""
+"Checks the intersections of a shape, given through a "
+"[Physics2DShapeQueryParameters] object, against the space.\n"
+"[b]Note:[/b] This method does not take into account the [code]motion[/code] "
+"property of the object. The intersected shapes are returned in an array "
+"containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:4
+msgid "Server interface for low-level 2D physics access."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:7
+msgid ""
+"Physics2DServer is the server responsible for all 2D physics. It can create "
+"many kinds of physics objects, but does not insert them on the node tree."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:19 doc/classes/PhysicsServer.xml:19
+msgid ""
+"Adds a shape to the area, along with a transform matrix. Shapes are usually "
+"referenced by their index, so you should track which shape has a given index."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:34 doc/classes/Physics2DServer.xml:304
+#: doc/classes/PhysicsServer.xml:27 doc/classes/PhysicsServer.xml:298
+msgid ""
+"Assigns the area to a descendant of [Object], so it can exist in the node "
+"tree."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:41 doc/classes/PhysicsServer.xml:34
+msgid ""
+"Removes all shapes from an area. It does not delete the shapes, so they can "
+"be reassigned later."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:47
+msgid ""
+"Creates an [Area2D]. After creating an [Area2D] with this method, assign it "
+"to a space using [method area_set_space] to use the created [Area2D] in the "
+"physics world."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:60 doc/classes/Physics2DServer.xml:372
+#: doc/classes/PhysicsServer.xml:47 doc/classes/PhysicsServer.xml:362
+msgid "Gets the instance ID of the object the area is assigned to."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:68
+msgid ""
+"Returns an area parameter value. See [enum AreaParameter] for a list of "
+"available parameters."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:76 doc/classes/PhysicsServer.xml:63
+msgid "Returns the [RID] of the nth shape of an area."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:83 doc/classes/PhysicsServer.xml:70
+msgid "Returns the number of shapes assigned to an area."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:91 doc/classes/PhysicsServer.xml:78
+msgid "Returns the transform matrix of a shape within an area."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:98 doc/classes/PhysicsServer.xml:85
+msgid "Returns the space assigned to the area."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:105 doc/classes/PhysicsServer.xml:92
+msgid "Returns the space override mode for the area."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:112 doc/classes/PhysicsServer.xml:99
+msgid "Returns the transform matrix for an area."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:120 doc/classes/PhysicsServer.xml:114
+msgid ""
+"Removes a shape from an area. It does not delete the shape, so it can be "
+"reassigned later."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:136 doc/classes/PhysicsServer.xml:130
+msgid "Assigns the area to one or many physics layers."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:144 doc/classes/PhysicsServer.xml:138
+msgid "Sets which physics layers the area will monitor."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:153 doc/classes/PhysicsServer.xml:147
+msgid ""
+"Sets the function to call when any body/area enters or exits the area. This "
+"callback will be called for any object interacting with the area, and takes "
+"five parameters:\n"
+"1: [constant AREA_BODY_ADDED] or [constant AREA_BODY_REMOVED], depending on "
+"whether the object entered or exited the area.\n"
+"2: [RID] of the object that entered/exited the area.\n"
+"3: Instance ID of the object that entered/exited the area.\n"
+"4: The shape index of the object that entered/exited the area.\n"
+"5: The shape index of the area where the object entered/exited."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:174
+msgid ""
+"Sets the value for an area parameter. See [enum AreaParameter] for a list of "
+"available parameters."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:183 doc/classes/PhysicsServer.xml:185
+msgid ""
+"Substitutes a given area shape by another. The old shape is selected by its "
+"index, the new one by its [RID]."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:192
+msgid "Disables a given shape in an area."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:201 doc/classes/PhysicsServer.xml:202
+msgid "Sets the transform matrix for an area shape."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:209 doc/classes/PhysicsServer.xml:210
+msgid "Assigns a space to the area."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:217
+msgid ""
+"Sets the space override mode for the area. See [enum AreaSpaceOverrideMode] "
+"for a list of available modes."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:225 doc/classes/PhysicsServer.xml:226
+msgid "Sets the transform matrix for an area."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:240 doc/classes/PhysicsServer.xml:241
+msgid "Adds a body to the list of bodies exempt from collisions."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:249
+msgid ""
+"Adds a positioned force to the applied force and torque. As with [method "
+"body_apply_impulse], both the force and the offset from the body origin are "
+"in global coordinates. A force differs from an impulse in that, while the "
+"two are forces, the impulse clears itself after being applied."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:259 doc/classes/PhysicsServer.xml:259
+msgid ""
+"Adds a shape to the body, along with a transform matrix. Shapes are usually "
+"referenced by their index, so you should track which shape has a given index."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:282
+msgid ""
+"Adds a positioned impulse to the applied force and torque. Both the force "
+"and the offset from the body origin are in global coordinates."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:311 doc/classes/PhysicsServer.xml:305
+msgid "Removes all shapes from a body."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:317
+msgid "Creates a physics body."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:330 doc/classes/PhysicsServer.xml:320
+msgid "Returns the physics layer or layers a body belongs to."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:337
+msgid "Returns the physics layer or layers a body can collide with."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:344
+msgid "Returns the continuous collision detection mode."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:351
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
+msgid ""
+"Returns the maximum contacts that can be reported. See [method "
+"body_set_max_contacts_reported]."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:365 doc/classes/PhysicsServer.xml:355
+msgid "Returns the body mode."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:380
+msgid ""
+"Returns the value of a body parameter. See [enum BodyParameter] for a list "
+"of available parameters."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:388 doc/classes/PhysicsServer.xml:378
+msgid "Returns the [RID] of the nth shape of a body."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:395 doc/classes/PhysicsServer.xml:385
+msgid "Returns the number of shapes assigned to a body."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:403
+msgid "Returns the metadata of a shape of a body."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:411 doc/classes/PhysicsServer.xml:393
+msgid "Returns the transform matrix of a body shape."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:418 doc/classes/PhysicsServer.xml:400
+msgid "Returns the [RID] of the space assigned to a body."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:426 doc/classes/PhysicsServer.xml:408
+msgid "Returns a body state."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:433 doc/classes/PhysicsServer.xml:429
+msgid ""
+"Returns whether a body uses a callback function to calculate its own physics "
+"(see [method body_set_force_integration_callback])."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:441
+msgid "Removes a body from the list of bodies exempt from collisions."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:449 doc/classes/PhysicsServer.xml:453
+msgid ""
+"Removes a shape from a body. The shape is not deleted, so it can be reused "
+"afterwards."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:457 doc/classes/PhysicsServer.xml:469
+#: doc/classes/RigidBody.xml:105
+msgid ""
+"Sets an axis velocity. The velocity in the given vector axis will be set as "
+"the given vector length. This is useful for jumping behavior."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:465 doc/classes/PhysicsServer.xml:477
+msgid "Sets the physics layer or layers a body belongs to."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:473 doc/classes/PhysicsServer.xml:485
+msgid "Sets the physics layer or layers a body can collide with."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:481
+msgid ""
+"Sets the continuous collision detection mode using one of the [enum CCDMode] "
+"constants.\n"
+"Continuous collision detection tries to predict where a moving body will "
+"collide, instead of moving it and correcting its movement if it collided."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:492 doc/classes/PhysicsServer.xml:504
+msgid ""
+"Sets the function used to calculate physics for an object, if that object "
+"allows it (see [method body_set_omit_force_integration])."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:500 doc/classes/PhysicsServer.xml:519
+msgid ""
+"Sets the maximum contacts to report. Bodies can keep a log of the contacts "
+"with other bodies, this is enabled by setting the maximum amount of contacts "
+"reported to a number greater than 0."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:508
+msgid "Sets the body mode using one of the [enum BodyMode] constants."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:516 doc/classes/PhysicsServer.xml:535
+msgid ""
+"Sets whether a body uses a callback function to calculate its own physics "
+"(see [method body_set_force_integration_callback])."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:525
+msgid ""
+"Sets a body parameter. See [enum BodyParameter] for a list of available "
+"parameters."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:534 doc/classes/PhysicsServer.xml:561
+msgid ""
+"Substitutes a given body shape by another. The old shape is selected by its "
+"index, the new one by its [RID]."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:544
+msgid ""
+"Enables one way collision on body if [code]enable[/code] is [code]true[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:553
+msgid "Disables shape in body if [code]disable[/code] is [code]true[/code]."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:562
+msgid ""
+"Sets metadata of a shape within a body. This metadata is different from "
+"[method Object.set_meta], and can be retrieved on shape queries."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:571 doc/classes/PhysicsServer.xml:578
+msgid "Sets the transform matrix for a body shape."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:579 doc/classes/PhysicsServer.xml:586
+msgid "Assigns a space to the body (see [method space_create])."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:588
+msgid ""
+"Sets a body state using one of the [enum BodyState] constants.\n"
+"Note that the method doesn't take effect immediately. The state will change "
+"on the next physics frame."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:603
+msgid ""
+"Returns [code]true[/code] if a collision would result from moving in the "
+"given direction from a given point in space. Margin increases the size of "
+"the shapes involved in the collision detection. [Physics2DTestMotionResult] "
+"can be passed to return additional information in."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:633
+msgid ""
+"Creates a damped spring joint between two bodies. If not specified, the "
+"second body is assumed to be the joint itself."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:641
+msgid "Returns the value of a damped spring joint parameter."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:650
+msgid ""
+"Sets a damped spring joint parameter. See [enum DampedStringParam] for a "
+"list of available parameters."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:657
+msgid ""
+"Destroys any of the objects created by Physics2DServer. If the [RID] passed "
+"is not one of the objects that can be created by Physics2DServer, an error "
+"will be sent to the console."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:664
+msgid ""
+"Returns information about the current state of the 2D physics engine. See "
+"[enum ProcessInfo] for a list of available states."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:675
+msgid ""
+"Creates a groove joint between two bodies. If not specified, the bodies are "
+"assumed to be the joint itself."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:683
+msgid "Returns the value of a joint parameter."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:690
+msgid "Returns a joint's type (see [enum JointType])."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:699
+msgid ""
+"Sets a joint parameter. See [enum JointParam] for a list of available "
+"parameters."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:713
+msgid ""
+"Creates a pin joint between two bodies. If not specified, the second body is "
+"assumed to be the joint itself."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:735
+msgid "Activates or deactivates the 2D physics engine."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:742
+msgid ""
+"Sets the amount of iterations for calculating velocities of colliding "
+"bodies. The greater the amount of iterations, the more accurate the "
+"collisions will be. However, a greater amount of iterations requires more "
+"CPU power, which can decrease performance. The default value is [code]8[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:749 doc/classes/PhysicsServer.xml:859
+msgid "Returns the shape data."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:756
+msgid "Returns a shape's type (see [enum ShapeType])."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:764 doc/classes/PhysicsServer.xml:874
+msgid ""
+"Sets the shape data that defines its shape and size. The data to be passed "
+"depends on the kind of shape created [method shape_get_type]."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:770 doc/classes/PhysicsServer.xml:897
+msgid ""
+"Creates a space. A space is a collection of parameters for the physics "
+"engine that can be assigned to an area or a body. It can be assigned to an "
+"area with [method area_set_space], or to a body with [method body_set_space]."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:777
+msgid ""
+"Returns the state of a space, a [Physics2DDirectSpaceState]. This object can "
+"be used to make collision/intersection queries."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:785 doc/classes/PhysicsServer.xml:912
+msgid "Returns the value of a space parameter."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:792 doc/classes/PhysicsServer.xml:919
+msgid "Returns whether the space is active."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:800 doc/classes/PhysicsServer.xml:927
+msgid ""
+"Marks a space as active. It will not have an effect, unless it is assigned "
+"to an area or body."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:809
+msgid ""
+"Sets the value for a space parameter. See [enum SpaceParameter] for a list "
+"of available parameters."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:815 doc/classes/PhysicsServer.xml:1278
+msgid ""
+"Constant to set/get the maximum distance a pair of bodies has to move before "
+"their collision status has to be recalculated."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:818 doc/classes/PhysicsServer.xml:1281
+msgid ""
+"Constant to set/get the maximum distance a shape can be from another before "
+"they are considered separated."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:821 doc/classes/PhysicsServer.xml:1284
+msgid ""
+"Constant to set/get the maximum distance a shape can penetrate another shape "
+"before it is considered a collision."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:824 doc/classes/PhysicsServer.xml:1287
+msgid ""
+"Constant to set/get the threshold linear velocity of activity. A body marked "
+"as potentially inactive for both linear and angular velocity will be put to "
+"sleep after the time given."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:827 doc/classes/PhysicsServer.xml:1290
+msgid ""
+"Constant to set/get the threshold angular velocity of activity. A body "
+"marked as potentially inactive for both linear and angular velocity will be "
+"put to sleep after the time given."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:830 doc/classes/PhysicsServer.xml:1293
+msgid ""
+"Constant to set/get the maximum time of activity. A body marked as "
+"potentially inactive for both linear and angular velocity will be put to "
+"sleep after this time."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:833 doc/classes/PhysicsServer.xml:1298
+msgid ""
+"Constant to set/get the default solver bias for all physics constraints. A "
+"solver bias is a factor controlling how much two objects \"rebound\", after "
+"violating a constraint, to avoid leaving them in that state because of "
+"numerical imprecision."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:836
+msgid ""
+"This is the constant for creating line shapes. A line shape is an infinite "
+"line with an origin point, and a normal. Thus, it can be used for front/"
+"behind checks."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:841
+msgid ""
+"This is the constant for creating segment shapes. A segment shape is a line "
+"from a point A to a point B. It can be checked for intersections."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:844
+msgid ""
+"This is the constant for creating circle shapes. A circle shape only has a "
+"radius. It can be used for intersections and inside/outside checks."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:847
+msgid ""
+"This is the constant for creating rectangle shapes. A rectangle shape is "
+"defined by a width and a height. It can be used for intersections and inside/"
+"outside checks."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:850
+msgid ""
+"This is the constant for creating capsule shapes. A capsule shape is defined "
+"by a radius and a length. It can be used for intersections and inside/"
+"outside checks."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:853
+msgid ""
+"This is the constant for creating convex polygon shapes. A polygon is "
+"defined by a list of points. It can be used for intersections and inside/"
+"outside checks. Unlike the [member CollisionPolygon2D.polygon] property, "
+"polygons modified with [method shape_set_data] do not verify that the points "
+"supplied form is a convex polygon."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:856
+msgid ""
+"This is the constant for creating concave polygon shapes. A polygon is "
+"defined by a list of points. It can be used for intersections checks, but "
+"not for inside/outside checks."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:859 doc/classes/PhysicsServer.xml:1173
+msgid ""
+"This constant is used internally by the engine. Any attempt to create this "
+"kind of shape results in an error."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:862 doc/classes/PhysicsServer.xml:1176
+msgid "Constant to set/get gravity strength in an area."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:865 doc/classes/PhysicsServer.xml:1179
+msgid "Constant to set/get gravity vector/center in an area."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:868 doc/classes/PhysicsServer.xml:1182
+msgid ""
+"Constant to set/get whether the gravity vector of an area is a direction, or "
+"a center point."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:871 doc/classes/PhysicsServer.xml:1185
+msgid ""
+"Constant to set/get the falloff factor for point gravity of an area. The "
+"greater this value is, the faster the strength of gravity decreases with the "
+"square of distance."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:874 doc/classes/PhysicsServer.xml:1188
+msgid ""
+"This constant was used to set/get the falloff factor for point gravity. It "
+"has been superseded by [constant AREA_PARAM_GRAVITY_DISTANCE_SCALE]."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:877 doc/classes/PhysicsServer.xml:1191
+msgid "Constant to set/get the linear dampening factor of an area."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:880 doc/classes/PhysicsServer.xml:1194
+msgid "Constant to set/get the angular dampening factor of an area."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:883 doc/classes/PhysicsServer.xml:1197
+msgid "Constant to set/get the priority (order of processing) of an area."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:886 doc/classes/PhysicsServer.xml:1200
+msgid ""
+"This area does not affect gravity/damp. These are generally areas that exist "
+"only to detect collisions, and objects entering or exiting them."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:889 doc/classes/PhysicsServer.xml:1203
+msgid ""
+"This area adds its gravity/damp values to whatever has been calculated so "
+"far. This way, many overlapping areas can combine their physics to make "
+"interesting effects."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:892 doc/classes/PhysicsServer.xml:1206
+msgid ""
+"This area adds its gravity/damp values to whatever has been calculated so "
+"far. Then stops taking into account the rest of the areas, even the default "
+"one."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:895 doc/classes/PhysicsServer.xml:1209
+msgid ""
+"This area replaces any gravity/damp, even the default one, and stops taking "
+"into account the rest of the areas."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:898 doc/classes/PhysicsServer.xml:1212
+msgid ""
+"This area replaces any gravity/damp calculated so far, but keeps calculating "
+"the rest of the areas, down to the default one."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:901 doc/classes/PhysicsServer.xml:1215
+msgid "Constant for static bodies."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:904 doc/classes/PhysicsServer.xml:1218
+msgid "Constant for kinematic bodies."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:907 doc/classes/PhysicsServer.xml:1221
+msgid "Constant for rigid bodies."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:910 doc/classes/PhysicsServer.xml:1224
+msgid ""
+"Constant for rigid bodies in character mode. In this mode, a body can not "
+"rotate, and only its linear velocity is affected by physics."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:913 doc/classes/PhysicsServer.xml:1227
+msgid "Constant to set/get a body's bounce factor."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:916 doc/classes/PhysicsServer.xml:1230
+msgid "Constant to set/get a body's friction."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:919 doc/classes/PhysicsServer.xml:1233
+msgid "Constant to set/get a body's mass."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:922
+msgid "Constant to set/get a body's inertia."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:925 doc/classes/PhysicsServer.xml:1236
+msgid "Constant to set/get a body's gravity multiplier."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:928 doc/classes/PhysicsServer.xml:1239
+msgid "Constant to set/get a body's linear dampening factor."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:931 doc/classes/PhysicsServer.xml:1242
+msgid "Constant to set/get a body's angular dampening factor."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:934 doc/classes/PhysicsServer.xml:1245
+msgid "Represents the size of the [enum BodyParameter] enum."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:937 doc/classes/PhysicsServer.xml:1248
+msgid "Constant to set/get the current transform matrix of the body."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:940 doc/classes/PhysicsServer.xml:1251
+msgid "Constant to set/get the current linear velocity of the body."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:943 doc/classes/PhysicsServer.xml:1254
+msgid "Constant to set/get the current angular velocity of the body."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:946 doc/classes/PhysicsServer.xml:1257
+msgid "Constant to sleep/wake up a body, or to get whether it is sleeping."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:949 doc/classes/PhysicsServer.xml:1260
+msgid "Constant to set/get whether the body can sleep."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:952
+msgid "Constant to create pin joints."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:955
+msgid "Constant to create groove joints."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:958
+msgid "Constant to create damped spring joints."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:967
+msgid ""
+"Sets the resting length of the spring joint. The joint will always try to go "
+"to back this length when pulled apart."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:970
+msgid ""
+"Sets the stiffness of the spring joint. The joint applies a force equal to "
+"the stiffness times the distance from its resting length."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:973
+msgid ""
+"Sets the damping ratio of the spring joint. A value of 0 indicates an "
+"undamped spring, while 1 causes the system to reach equilibrium as fast as "
+"possible (critical damping)."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:976
+msgid ""
+"Disables continuous collision detection. This is the fastest way to detect "
+"body collisions, but can miss small, fast-moving objects."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:979
+msgid ""
+"Enables continuous collision detection by raycasting. It is faster than "
+"shapecasting, but less precise."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:982
+msgid ""
+"Enables continuous collision detection by shapecasting. It is the slowest "
+"CCD method, and the most precise."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:985 doc/classes/PhysicsServer.xml:1263
+msgid ""
+"The value of the first parameter and area callback function receives, when "
+"an object enters one of its shapes."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:988 doc/classes/PhysicsServer.xml:1266
+msgid ""
+"The value of the first parameter and area callback function receives, when "
+"an object exits one of its shapes."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:991 doc/classes/PhysicsServer.xml:1269
+msgid "Constant to get the number of objects that are not sleeping."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:994 doc/classes/PhysicsServer.xml:1272
+msgid "Constant to get the number of possible collisions."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:997 doc/classes/PhysicsServer.xml:1275
+msgid ""
+"Constant to get the number of space regions where a collision could occur."
+msgstr ""
+
+#: doc/classes/Physics2DShapeQueryParameters.xml:4
+msgid "Parameters to be sent to a 2D shape physics query."
+msgstr ""
+
+#: doc/classes/Physics2DShapeQueryParameters.xml:7
+msgid ""
+"This class contains the shape and other parameters for 2D intersection/"
+"collision queries."
+msgstr ""
+
+#: doc/classes/Physics2DShapeQueryParameters.xml:16
+msgid ""
+"Sets the [Shape2D] that will be used for collision/intersection queries."
+msgstr ""
+
+#: doc/classes/Physics2DShapeQueryParameters.xml:22
+msgid "If [code]true[/code], the query will take [Area2D]s into account."
+msgstr ""
+
+#: doc/classes/Physics2DShapeQueryParameters.xml:25
+msgid ""
+"If [code]true[/code], the query will take [PhysicsBody2D]s into account."
+msgstr ""
+
+#: doc/classes/Physics2DShapeQueryParameters.xml:28
+#: doc/classes/PhysicsShapeQueryParameters.xml:28
+msgid ""
+"The physics layer(s) the query will take into account (as a bitmask). See "
+"[url=https://docs.godotengine.org/en/3.4/tutorials/physics/"
+"physics_introduction.html#collision-layers-and-masks]Collision layers and "
+"masks[/url] in the documentation for more information."
+msgstr ""
+
+#: doc/classes/Physics2DShapeQueryParameters.xml:31
+#: doc/classes/PhysicsShapeQueryParameters.xml:31
+msgid ""
+"The list of objects or object [RID]s that will be excluded from collisions."
+msgstr ""
+
+#: doc/classes/Physics2DShapeQueryParameters.xml:34
+#: doc/classes/PhysicsShapeQueryParameters.xml:34
+msgid "The collision margin for the shape."
+msgstr ""
+
+#: doc/classes/Physics2DShapeQueryParameters.xml:37
+msgid "The motion of the shape being queried for."
+msgstr ""
+
+#: doc/classes/Physics2DShapeQueryParameters.xml:40
+#: doc/classes/PhysicsShapeQueryParameters.xml:37
+msgid "The queried shape's [RID]. See also [method set_shape]."
+msgstr ""
+
+#: doc/classes/Physics2DShapeQueryParameters.xml:43
+#: doc/classes/PhysicsShapeQueryParameters.xml:40
+msgid "The queried shape's transform matrix."
+msgstr ""
+
+#: doc/classes/PhysicsBody.xml:4
+msgid "Base class for all objects affected by physics in 3D space."
+msgstr ""
+
+#: doc/classes/PhysicsBody.xml:7
+msgid ""
+"PhysicsBody is an abstract base class for implementing a physics body. All "
+"*Body types inherit from it."
+msgstr ""
+
+#: doc/classes/PhysicsBody.xml:17 doc/classes/PhysicsBody2D.xml:17
+#: doc/classes/SoftBody.xml:17
+msgid "Adds a body to the list of bodies that this body can't collide with."
+msgstr ""
+
+#: doc/classes/PhysicsBody.xml:23 doc/classes/PhysicsBody2D.xml:23
+#: doc/classes/SoftBody.xml:23
+msgid ""
+"Returns an array of nodes that were added as collision exceptions for this "
+"body."
+msgstr ""
+
+#: doc/classes/PhysicsBody.xml:30 doc/classes/PhysicsBody2D.xml:30
+#: doc/classes/SoftBody.xml:58
+msgid ""
+"Removes a body from the list of bodies that this body can't collide with."
+msgstr ""
+
+#: doc/classes/PhysicsBody2D.xml:4
+msgid "Base class for all objects affected by physics in 2D space."
+msgstr ""
+
+#: doc/classes/PhysicsBody2D.xml:7
+msgid ""
+"PhysicsBody2D is an abstract base class for implementing a physics body. All "
+"*Body2D types inherit from it."
+msgstr ""
+
+#: doc/classes/PhysicsBody2D.xml:37
+msgid ""
+"Both collision_layer and collision_mask. Returns collision_layer when "
+"accessed. Updates collision_layer and collision_mask when modified."
+msgstr ""
+
+#: doc/classes/PhysicsDirectBodyState.xml:4
+msgid "Direct access object to a physics body in the [PhysicsServer]."
+msgstr ""
+
+#: doc/classes/PhysicsDirectBodyState.xml:7
+msgid ""
+"Provides direct access to a physics body in the [PhysicsServer], allowing "
+"safe changes to physics properties. This object is passed via the direct "
+"state callback of rigid/character bodies, and is intended for changing the "
+"direct state of that body. See [method RigidBody._integrate_forces]."
+msgstr ""
+
+#: doc/classes/PhysicsDirectBodyState.xml:18
+msgid ""
+"Adds a constant directional force without affecting rotation.\n"
+"This is equivalent to [code]add_force(force, Vector3(0,0,0))[/code]."
+msgstr ""
+
+#: doc/classes/PhysicsDirectBodyState.xml:34
+msgid "Adds a constant rotational force without affecting position."
+msgstr ""
+
+#: doc/classes/PhysicsDirectBodyState.xml:41
+msgid ""
+"Applies a single directional impulse without affecting rotation.\n"
+"This is equivalent to [code]apply_impulse(Vector3(0, 0, 0), impulse)[/code]."
+msgstr ""
+
+#: doc/classes/PhysicsDirectBodyState.xml:50
+msgid ""
+"Applies a positioned impulse to the body. An impulse is time-independent! "
+"Applying an impulse every frame would result in a framerate-dependent force. "
+"For this reason it should only be used when simulating one-time impacts. The "
+"position uses the rotation of the global coordinate system, but is centered "
+"at the object's origin."
+msgstr ""
+
+#: doc/classes/PhysicsDirectBodyState.xml:57
+msgid ""
+"Apply a torque impulse (which will be affected by the body mass and shape). "
+"This will rotate the body around the vector [code]j[/code] passed as "
+"parameter."
+msgstr ""
+
+#: doc/classes/PhysicsDirectBodyState.xml:78
+msgid "Returns the collider object."
+msgstr ""
+
+#: doc/classes/PhysicsDirectBodyState.xml:105
+msgid ""
+"Returns the number of contacts this body has with other bodies.\n"
+"[b]Note:[/b] By default, this returns 0 unless bodies are configured to "
+"monitor contacts. See [member RigidBody.contact_monitor]."
+msgstr ""
+
+#: doc/classes/PhysicsDirectBodyState.xml:113
+msgid "Impulse created by the contact. Only implemented for Bullet physics."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:4
+msgid "Direct access object to a space in the [PhysicsServer]."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:7
+msgid ""
+"Direct access object to a space in the [PhysicsServer]. It's used mainly to "
+"do queries against objects and areas residing in a given space."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:19
+msgid ""
+"Checks how far a [Shape] can move without colliding. All the parameters for "
+"the query, including the shape, are supplied through a "
+"[PhysicsShapeQueryParameters] object.\n"
+"Returns an array with the safe and unsafe proportions (between 0 and 1) of "
+"the motion. The safe proportion is the maximum fraction of the motion that "
+"can be made without a collision. The unsafe proportion is the minimum "
+"fraction of the distance that must be moved for a collision. If no collision "
+"is detected a result of [code][1.0, 1.0][/code] will be returned.\n"
+"[b]Note:[/b] Any [Shape]s that the shape is already colliding with e.g. "
+"inside of, will be ignored. Use [method collide_shape] to determine the "
+"[Shape]s that the shape is already colliding with."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:29
+msgid ""
+"Checks the intersections of a shape, given through a "
+"[PhysicsShapeQueryParameters] object, against the space. The resulting array "
+"contains a list of points where the shape intersects another. Like with "
+"[method intersect_shape], the number of returned results can be limited to "
+"save processing time."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:36
+msgid ""
+"Checks the intersections of a shape, given through a "
+"[PhysicsShapeQueryParameters] object, against the space. If it collides with "
+"more than one shape, the nearest one is selected. The returned object is a "
+"dictionary containing the following fields:\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]linear_velocity[/code]: The colliding object's velocity [Vector3]. If "
+"the object is an [Area], the result is [code](0, 0, 0)[/code].\n"
+"[code]normal[/code]: The object's surface normal at the intersection point.\n"
+"[code]point[/code]: The intersection point.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"If the shape did not intersect anything, then an empty dictionary is "
+"returned instead."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:55
+msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
+"Intersects a ray in a given space. The returned object is a dictionary with "
+"the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]normal[/code]: The object's surface normal at the intersection point.\n"
+"[code]position[/code]: The intersection point.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"If the ray did not intersect anything, then an empty dictionary is returned "
+"instead.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:89
+msgid ""
+"Checks the intersections of a shape, given through a "
+"[PhysicsShapeQueryParameters] object, against the space. The intersected "
+"shapes are returned in an array containing dictionaries with the following "
+"fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time."
+msgstr ""
+
+#: doc/classes/PhysicsMaterial.xml:4
+msgid "A material for physics properties."
+msgstr ""
+
+#: doc/classes/PhysicsMaterial.xml:7
+msgid ""
+"Provides a means of modifying the collision properties of a [PhysicsBody]."
+msgstr ""
+
+#: doc/classes/PhysicsMaterial.xml:15
+msgid ""
+"If [code]true[/code], subtracts the bounciness from the colliding object's "
+"bounciness instead of adding it."
+msgstr ""
+
+#: doc/classes/PhysicsMaterial.xml:18
+msgid ""
+"The body's bounciness. Values range from [code]0[/code] (no bounce) to "
+"[code]1[/code] (full bounciness)."
+msgstr ""
+
+#: doc/classes/PhysicsMaterial.xml:21
+msgid ""
+"The body's friction. Values range from [code]0[/code] (frictionless) to "
+"[code]1[/code] (maximum friction)."
+msgstr ""
+
+#: doc/classes/PhysicsMaterial.xml:24
+msgid ""
+"If [code]true[/code], the physics engine will use the friction of the object "
+"marked as \"rough\" when two objects collide. If [code]false[/code], the "
+"physics engine will use the lowest friction of all colliding objects "
+"instead. If [code]true[/code] for both colliding objects, the physics engine "
+"will use the highest friction."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:4
+msgid "Server interface for low-level physics access."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:7
+msgid ""
+"PhysicsServer is the server responsible for all 3D physics. It can create "
+"many kinds of physics objects, but does not insert them on the node tree."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:40
+msgid "Creates an [Area]."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:55
+msgid ""
+"Returns an area parameter value. A list of available parameters is on the "
+"[enum AreaParameter] constants."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:106
+msgid "If [code]true[/code], area collides with rays."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:168
+msgid ""
+"Sets the value for an area parameter. A list of available parameters is on "
+"the [enum AreaParameter] constants."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:176
+msgid "Sets object pickable with rays."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:218
+msgid ""
+"Sets the space override mode for the area. The modes are described in the "
+"[enum AreaSpaceOverrideMode] constants."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:282
+msgid ""
+"Gives the body a push at a [code]position[/code] in the direction of the "
+"[code]impulse[/code]."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:290
+msgid "Gives the body a push to rotate it."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:313
+msgid ""
+"Creates a physics body. The first parameter can be any value from [enum "
+"BodyMode] constants, for the type of body created. Additionally, the body "
+"can be created in sleeping state to save processing time."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:327
+msgid ""
+"Returns the physics layer or layers a body can collide with.\n"
+"-"
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:335
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:370
+msgid ""
+"Returns the value of a body parameter. A list of available parameters is on "
+"the [enum BodyParameter] constants."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:422
+msgid ""
+"If [code]true[/code], the continuous collision detection mode is enabled."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:436
+msgid "If [code]true[/code], the body can be detected by rays."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:444
+msgid ""
+"Removes a body from the list of bodies exempt from collisions.\n"
+"Continuous collision detection tries to predict where a moving body will "
+"collide, instead of moving it and correcting its movement if it collided."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:493
+msgid ""
+"If [code]true[/code], the continuous collision detection mode is enabled.\n"
+"Continuous collision detection tries to predict where a moving body will "
+"collide, instead of moving it and correcting its movement if it collided."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:527
+msgid "Sets the body mode, from one of the [enum BodyMode] constants."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:544
+msgid ""
+"Sets a body parameter. A list of available parameters is on the [enum "
+"BodyParameter] constants."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:552
+msgid "Sets the body pickable with rays if [code]enabled[/code] is set."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:595
+msgid "Sets a body state (see [enum BodyState] constants)."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:608
+msgid ""
+"Returns [code]true[/code] if a collision would result from moving in the "
+"given direction from a given point in space. [PhysicsTestMotionResult] can "
+"be passed to return additional information in."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:616
+msgid ""
+"Gets a cone_twist_joint parameter (see [enum ConeTwistJointParam] constants)."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:625
+msgid ""
+"Sets a cone_twist_joint parameter (see [enum ConeTwistJointParam] constants)."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:632
+msgid ""
+"Destroys any of the objects created by PhysicsServer. If the [RID] passed is "
+"not one of the objects that can be created by PhysicsServer, an error will "
+"be sent to the console."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:641
+msgid ""
+"Gets a generic_6_DOF_joint flag (see [enum G6DOFJointAxisFlag] constants)."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:650
+msgid ""
+"Gets a generic_6_DOF_joint parameter (see [enum G6DOFJointAxisParam] "
+"constants)."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:660
+msgid ""
+"Sets a generic_6_DOF_joint flag (see [enum G6DOFJointAxisFlag] constants)."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:670
+msgid ""
+"Sets a generic_6_DOF_joint parameter (see [enum G6DOFJointAxisParam] "
+"constants)."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:677
+msgid "Returns an Info defined by the [enum ProcessInfo] input given."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:685
+msgid "Gets a hinge_joint flag (see [enum HingeJointFlag] constants)."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:693
+msgid "Gets a hinge_joint parameter (see [enum HingeJointParam])."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:702
+msgid "Sets a hinge_joint flag (see [enum HingeJointFlag] constants)."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:711
+msgid "Sets a hinge_joint parameter (see [enum HingeJointParam] constants)."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:721
+msgid "Creates a [ConeTwistJoint]."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:731
+msgid "Creates a [Generic6DOFJoint]."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:741
+msgid "Creates a [HingeJoint]."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:751
+msgid "Creates a [PinJoint]."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:761
+msgid "Creates a [SliderJoint]."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:768
+msgid "Gets the priority value of the Joint."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:775
+msgid "Returns the type of the Joint."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:783
+msgid "Sets the priority value of the Joint."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:790
+msgid ""
+"Returns position of the joint in the local space of body a of the joint."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:797
+msgid ""
+"Returns position of the joint in the local space of body b of the joint."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:805
+msgid "Gets a pin_joint parameter (see [enum PinJointParam] constants)."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:813
+msgid "Sets position of the joint in the local space of body a of the joint."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:821
+msgid "Sets position of the joint in the local space of body b of the joint."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:830
+msgid "Sets a pin_joint parameter (see [enum PinJointParam] constants)."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:837
+msgid "Activates or deactivates the 3D physics engine."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:844
+msgid ""
+"Sets the amount of iterations for calculating velocities of colliding "
+"bodies. The greater the amount of iterations, the more accurate the "
+"collisions will be. However, a greater amount of iterations requires more "
+"CPU power, which can decrease performance. The default value is [code]8[/"
+"code].\n"
+"[b]Note:[/b] Only has an effect when using the GodotPhysics engine, not the "
+"default Bullet physics engine."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:852
+msgid ""
+"Creates a shape of a type from [enum ShapeType]. Does not assign it to a "
+"body or an area. To do so, you must use [method area_set_shape] or [method "
+"body_set_shape]."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:866
+msgid "Returns the type of shape (see [enum ShapeType] constants)."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:882 doc/classes/PhysicsServer.xml:891
+msgid "Gets a slider_joint parameter (see [enum SliderJointParam] constants)."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:904
+msgid ""
+"Returns the state of a space, a [PhysicsDirectSpaceState]. This object can "
+"be used to make collision/intersection queries."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:936
+msgid ""
+"Sets the value for a space parameter. A list of available parameters is on "
+"the [enum SpaceParameter] constants."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:942
+msgid "The [Joint] is a [PinJoint]."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:945
+msgid "The [Joint] is a [HingeJoint]."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:948
+msgid "The [Joint] is a [SliderJoint]."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:951
+msgid "The [Joint] is a [ConeTwistJoint]."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:954
+msgid "The [Joint] is a [Generic6DOFJoint]."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:957
+msgid ""
+"The strength with which the pinned objects try to stay in positional "
+"relation to each other.\n"
+"The higher, the stronger."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:961
+msgid ""
+"The strength with which the pinned objects try to stay in velocity relation "
+"to each other.\n"
+"The higher, the stronger."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:965
+msgid ""
+"If above 0, this value is the maximum value for an impulse that this Joint "
+"puts on its ends."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:971
+msgid "The maximum rotation across the Hinge."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:974
+msgid "The minimum rotation across the Hinge."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:991
+msgid "If [code]true[/code], the Hinge has a maximum and a minimum rotation."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:994
+msgid "If [code]true[/code], a motor turns the Hinge."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:997 doc/classes/SliderJoint.xml:76
+#: doc/classes/SliderJoint.xml:99
+msgid ""
+"The maximum difference between the pivot points on their X axis before "
+"damping happens."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1000 doc/classes/SliderJoint.xml:67
+#: doc/classes/SliderJoint.xml:102
+msgid ""
+"The minimum difference between the pivot points on their X axis before "
+"damping happens."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1003 doc/classes/SliderJoint.xml:73
+#: doc/classes/SliderJoint.xml:105
+msgid ""
+"A factor applied to the movement across the slider axis once the limits get "
+"surpassed. The lower, the slower the movement."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1006 doc/classes/SliderJoint.xml:108
+msgid ""
+"The amount of restitution once the limits are surpassed. The lower, the more "
+"velocityenergy gets lost."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1009 doc/classes/SliderJoint.xml:111
+msgid "The amount of damping once the slider limits are surpassed."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1012 doc/classes/SliderJoint.xml:85
+#: doc/classes/SliderJoint.xml:114
+msgid ""
+"A factor applied to the movement across the slider axis as long as the "
+"slider is in the limits. The lower, the slower the movement."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1015 doc/classes/SliderJoint.xml:82
+#: doc/classes/SliderJoint.xml:117
+msgid "The amount of restitution inside the slider limits."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1018 doc/classes/SliderJoint.xml:79
+#: doc/classes/SliderJoint.xml:120
+msgid "The amount of damping inside the slider limits."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1021 doc/classes/SliderJoint.xml:94
+#: doc/classes/SliderJoint.xml:123
+msgid "A factor applied to the movement across axes orthogonal to the slider."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1024 doc/classes/SliderJoint.xml:91
+#: doc/classes/SliderJoint.xml:126
+msgid ""
+"The amount of restitution when movement is across axes orthogonal to the "
+"slider."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1027 doc/classes/SliderJoint.xml:88
+#: doc/classes/SliderJoint.xml:129
+msgid ""
+"The amount of damping when movement is across axes orthogonal to the slider."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1030 doc/classes/SliderJoint.xml:43
+#: doc/classes/SliderJoint.xml:132
+msgid "The upper limit of rotation in the slider."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1033 doc/classes/SliderJoint.xml:32
+#: doc/classes/SliderJoint.xml:135
+msgid "The lower limit of rotation in the slider."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1036 doc/classes/SliderJoint.xml:138
+msgid "A factor applied to the all rotation once the limit is surpassed."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1039 doc/classes/SliderJoint.xml:141
+msgid "The amount of restitution of the rotation when the limit is surpassed."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1042 doc/classes/SliderJoint.xml:144
+msgid "The amount of damping of the rotation when the limit is surpassed."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1045
+msgid "A factor that gets applied to the all rotation in the limits."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1048 doc/classes/SliderJoint.xml:49
+#: doc/classes/SliderJoint.xml:150
+msgid "The amount of restitution of the rotation in the limits."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1051 doc/classes/SliderJoint.xml:46
+#: doc/classes/SliderJoint.xml:153
+msgid "The amount of damping of the rotation in the limits."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1054
+msgid ""
+"A factor that gets applied to the all rotation across axes orthogonal to the "
+"slider."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1057 doc/classes/SliderJoint.xml:58
+#: doc/classes/SliderJoint.xml:159
+msgid ""
+"The amount of restitution of the rotation across axes orthogonal to the "
+"slider."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1060 doc/classes/SliderJoint.xml:55
+#: doc/classes/SliderJoint.xml:162
+msgid ""
+"The amount of damping of the rotation across axes orthogonal to the slider."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1063
+msgid "Represents the size of the [enum SliderJointParam] enum."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1080
+msgid ""
+"The ease with which the Joint twists, if it's too low, it takes more force "
+"to twist the joint."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1092
+msgid ""
+"A factor that gets applied to the movement across the axes. The lower, the "
+"slower the movement."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1095
+msgid ""
+"The amount of restitution on the axes movement. The lower, the more velocity-"
+"energy gets lost."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1101
+msgid "The velocity that the joint's linear motor will attempt to reach."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1104
+msgid ""
+"The maximum force that the linear motor can apply while trying to reach the "
+"target velocity."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1113
+msgid "A factor that gets multiplied onto all rotations across the axes."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1125
+msgid ""
+"When correcting the crossing of limits in rotation across the axes, this "
+"error tolerance factor defines how much the correction gets slowed down. The "
+"lower, the slower."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1134
+msgid ""
+"If [code]set[/code] there is linear motion possible within the given limits."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1137
+msgid "If [code]set[/code] there is rotational motion possible."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1140
+msgid "If [code]set[/code] there is a rotational motor across these axes."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1143
+msgid ""
+"If [code]set[/code] there is a linear motor on this axis that targets a "
+"specific velocity."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1146
+msgid "The [Shape] is a [PlaneShape]."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1149
+msgid "The [Shape] is a [RayShape]."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1152
+msgid "The [Shape] is a [SphereShape]."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1155
+msgid "The [Shape] is a [BoxShape]."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1158
+msgid "The [Shape] is a [CapsuleShape]."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1161
+msgid "The [Shape] is a [CylinderShape]."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1164
+msgid "The [Shape] is a [ConvexPolygonShape]."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1167
+msgid "The [Shape] is a [ConcavePolygonShape]."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1170
+msgid "The [Shape] is a [HeightMapShape]."
+msgstr ""
+
+#: doc/classes/PhysicsShapeQueryParameters.xml:4
+msgid "Parameters to be sent to a 3D shape physics query."
+msgstr ""
+
+#: doc/classes/PhysicsShapeQueryParameters.xml:7
+msgid ""
+"This class contains the shape and other parameters for 3D intersection/"
+"collision queries."
+msgstr ""
+
+#: doc/classes/PhysicsShapeQueryParameters.xml:16
+msgid "Sets the [Shape] that will be used for collision/intersection queries."
+msgstr ""
+
+#: doc/classes/PhysicsShapeQueryParameters.xml:22
+msgid "If [code]true[/code], the query will take [Area]s into account."
+msgstr ""
+
+#: doc/classes/PhysicsShapeQueryParameters.xml:25
+msgid "If [code]true[/code], the query will take [PhysicsBody]s into account."
+msgstr ""
+
+#: doc/classes/PinJoint.xml:4
+msgid "Pin joint for 3D PhysicsBodies."
+msgstr ""
+
+#: doc/classes/PinJoint.xml:7
+msgid ""
+"Pin joint for 3D rigid bodies. It pins 2 bodies (rigid or static) together. "
+"See also [Generic6DOFJoint]."
+msgstr ""
+
+#: doc/classes/PinJoint.xml:30 doc/classes/PinJoint.xml:41
+msgid ""
+"The force with which the pinned objects stay in positional relation to each "
+"other. The higher, the stronger."
+msgstr ""
+
+#: doc/classes/PinJoint.xml:33 doc/classes/PinJoint.xml:44
+msgid ""
+"The force with which the pinned objects stay in velocity relation to each "
+"other. The higher, the stronger."
+msgstr ""
+
+#: doc/classes/PinJoint.xml:36 doc/classes/PinJoint.xml:47
+msgid ""
+"If above 0, this value is the maximum value for an impulse that this Joint "
+"produces."
+msgstr ""
+
+#: doc/classes/PinJoint2D.xml:4
+msgid "Pin Joint for 2D shapes."
+msgstr ""
+
+#: doc/classes/PinJoint2D.xml:7
+msgid ""
+"Pin Joint for 2D rigid bodies. It pins two bodies (rigid or static) together."
+msgstr ""
+
+#: doc/classes/PinJoint2D.xml:15
+msgid ""
+"The higher this value, the more the bond to the pinned partner can flex."
+msgstr ""
+
+#: doc/classes/Plane.xml:4
+msgid "Plane in hessian form."
+msgstr ""
+
+#: doc/classes/Plane.xml:7
+msgid ""
+"Plane represents a normalized plane equation. Basically, \"normal\" is the "
+"normal of the plane (a,b,c normalized), and \"d\" is the distance from the "
+"origin to the plane (in the direction of \"normal\"). \"Over\" or \"Above\" "
+"the plane is considered the side of the plane towards where the normal is "
+"pointing."
+msgstr ""
+
+#: doc/classes/Plane.xml:20
+msgid ""
+"Creates a plane from the four parameters. The three components of the "
+"resulting plane's [member normal] are [code]a[/code], [code]b[/code] and "
+"[code]c[/code], and the plane has a distance of [code]d[/code] from the "
+"origin."
+msgstr ""
+
+#: doc/classes/Plane.xml:29
+msgid "Creates a plane from the three points, given in clockwise order."
+msgstr ""
+
+#: doc/classes/Plane.xml:37
+msgid "Creates a plane from the normal and the plane's distance to the origin."
+msgstr ""
+
+#: doc/classes/Plane.xml:43
+msgid "Returns the center of the plane."
+msgstr ""
+
+#: doc/classes/Plane.xml:50
+msgid ""
+"Returns the shortest distance from the plane to the position [code]point[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Plane.xml:56
+msgid ""
+"Returns the center of the plane.\n"
+"This method is deprecated, please use [method center] instead."
+msgstr ""
+
+#: doc/classes/Plane.xml:65
+msgid ""
+"Returns [code]true[/code] if [code]point[/code] is inside the plane. "
+"Comparison uses a custom minimum [code]epsilon[/code] threshold."
+msgstr ""
+
+#: doc/classes/Plane.xml:73
+msgid ""
+"Returns the intersection point of the three planes [code]b[/code], [code]c[/"
+"code] and this plane. If no intersection is found, [code]null[/code] is "
+"returned."
+msgstr ""
+
+#: doc/classes/Plane.xml:81
+msgid ""
+"Returns the intersection point of a ray consisting of the position "
+"[code]from[/code] and the direction normal [code]dir[/code] with this plane. "
+"If no intersection is found, [code]null[/code] is returned."
+msgstr ""
+
+#: doc/classes/Plane.xml:89
+msgid ""
+"Returns the intersection point of a segment from position [code]begin[/code] "
+"to position [code]end[/code] with this plane. If no intersection is found, "
+"[code]null[/code] is returned."
+msgstr ""
+
+#: doc/classes/Plane.xml:96
+msgid ""
+"Returns [code]true[/code] if this plane and [code]plane[/code] are "
+"approximately equal, by running [method @GDScript.is_equal_approx] on each "
+"component."
+msgstr ""
+
+#: doc/classes/Plane.xml:103
+msgid ""
+"Returns [code]true[/code] if [code]point[/code] is located above the plane."
+msgstr ""
+
+#: doc/classes/Plane.xml:109
+msgid "Returns a copy of the plane, normalized."
+msgstr ""
+
+#: doc/classes/Plane.xml:116
+msgid ""
+"Returns the orthogonal projection of [code]point[/code] into a point in the "
+"plane."
+msgstr ""
+
+#: doc/classes/Plane.xml:122
+msgid ""
+"The distance from the origin to the plane, in the direction of [member "
+"normal]. This value is typically non-negative.\n"
+"In the scalar equation of the plane [code]ax + by + cz = d[/code], this is "
+"[code]d[/code], while the [code](a, b, c)[/code] coordinates are represented "
+"by the [member normal] property."
+msgstr ""
+
+#: doc/classes/Plane.xml:126
+msgid ""
+"The normal of the plane, which must be normalized.\n"
+"In the scalar equation of the plane [code]ax + by + cz = d[/code], this is "
+"the vector [code](a, b, c)[/code], where [code]d[/code] is the [member d] "
+"property."
+msgstr ""
+
+#: doc/classes/Plane.xml:130
+msgid "The X component of the plane's [member normal] vector."
+msgstr ""
+
+#: doc/classes/Plane.xml:133
+msgid "The Y component of the plane's [member normal] vector."
+msgstr ""
+
+#: doc/classes/Plane.xml:136
+msgid "The Z component of the plane's [member normal] vector."
+msgstr ""
+
+#: doc/classes/Plane.xml:141
+msgid "A plane that extends in the Y and Z axes (normal vector points +X)."
+msgstr ""
+
+#: doc/classes/Plane.xml:144
+msgid "A plane that extends in the X and Z axes (normal vector points +Y)."
+msgstr ""
+
+#: doc/classes/Plane.xml:147
+msgid "A plane that extends in the X and Y axes (normal vector points +Z)."
+msgstr ""
+
+#: doc/classes/PlaneMesh.xml:4
+msgid "Class representing a planar [PrimitiveMesh]."
+msgstr ""
+
+#: doc/classes/PlaneMesh.xml:7
+msgid ""
+"Class representing a planar [PrimitiveMesh]. This flat mesh does not have a "
+"thickness. By default, this mesh is aligned on the X and Z axes; this "
+"default rotation isn't suited for use with billboarded materials. For "
+"billboarded materials, use [QuadMesh] instead.\n"
+"[b]Note:[/b] When using a large textured [PlaneMesh] (e.g. as a floor), you "
+"may stumble upon UV jittering issues depending on the camera angle. To solve "
+"this, increase [member subdivide_depth] and [member subdivide_width] until "
+"you no longer notice UV jittering."
+msgstr ""
+
+#: doc/classes/PlaneMesh.xml:16
+msgid "Offset from the origin of the generated plane. Useful for particles."
+msgstr ""
+
+#: doc/classes/PlaneMesh.xml:19
+msgid "Size of the generated plane."
+msgstr ""
+
+#: doc/classes/PlaneMesh.xml:22
+msgid "Number of subdivision along the Z axis."
+msgstr ""
+
+#: doc/classes/PlaneMesh.xml:25
+msgid "Number of subdivision along the X axis."
+msgstr ""
+
+#: doc/classes/PlaneShape.xml:4
+msgid "Infinite plane shape for 3D collisions."
+msgstr ""
+
+#: doc/classes/PlaneShape.xml:7
+msgid ""
+"An infinite plane shape for 3D collisions. Note that the [Plane]'s normal "
+"matters; anything \"below\" the plane will collide with it. If the "
+"[PlaneShape] is used in a [PhysicsBody], it will cause colliding objects "
+"placed \"below\" it to teleport \"above\" the plane."
+msgstr ""
+
+#: doc/classes/PlaneShape.xml:15
+msgid "The [Plane] used by the [PlaneShape] for collision."
+msgstr ""
+
+#: doc/classes/PointMesh.xml:4
+msgid "Mesh with a single Point primitive."
+msgstr ""
+
+#: doc/classes/PointMesh.xml:7
+msgid ""
+"The PointMesh is made from a single point. Instead of relying on triangles, "
+"points are rendered as a single rectangle on the screen with a constant "
+"size. They are intended to be used with Particle systems, but can be used as "
+"a cheap way to render constant size billboarded sprites (for example in a "
+"point cloud).\n"
+"PointMeshes, must be used with a material that has a point size. Point size "
+"can be accessed in a shader with [code]POINT_SIZE[/code], or in a "
+"[SpatialMaterial] by setting [member SpatialMaterial.flags_use_point_size] "
+"and the variable [member SpatialMaterial.params_point_size].\n"
+"When using PointMeshes, properties that normally alter vertices will be "
+"ignored, including billboard mode, grow, and cull face."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:4
+msgid "A 2D polygon."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:7
+msgid ""
+"A Polygon2D is defined by a set of points. Each point is connected to the "
+"next, with the final point being connected to the first, resulting in a "
+"closed polygon. Polygon2Ds can be filled with color (solid or gradient) or "
+"filled with a given texture.\n"
+"[b]Note:[/b] By default, Godot can only draw up to 4,096 polygon points at a "
+"time. To increase this limit, open the Project Settings and increase [member "
+"ProjectSettings.rendering/limits/buffers/canvas_polygon_buffer_size_kb] and "
+"[member ProjectSettings.rendering/limits/buffers/"
+"canvas_polygon_index_buffer_size_kb]."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:18
+msgid ""
+"Adds a bone with the specified [code]path[/code] and [code]weights[/code]."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:24
+msgid "Removes all bones from this [Polygon2D]."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:31
+msgid "Removes the specified bone from this [Polygon2D]."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:37
+msgid "Returns the number of bones in this [Polygon2D]."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:44
+msgid "Returns the path to the node associated with the specified bone."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:51
+msgid "Returns the height values of the specified bone."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:59
+msgid "Sets the path to the node associated with the specified bone."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:67
+msgid "Sets the weight values for the specified bone."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:73
+msgid "If [code]true[/code], polygon edges will be anti-aliased."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:78
+msgid ""
+"The polygon's fill color. If [code]texture[/code] is defined, it will be "
+"multiplied by this color. It will also be the default color for vertices not "
+"set in [code]vertex_colors[/code]."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:83
+msgid ""
+"Added padding applied to the bounding box when using [code]invert[/code]. "
+"Setting this value too small may result in a \"Bad Polygon\" error."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:86
+msgid ""
+"If [code]true[/code], polygon will be inverted, containing the area outside "
+"the defined points and extending to the [code]invert_border[/code]."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:89
+msgid "The offset applied to each vertex."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:92
+msgid ""
+"The polygon's list of vertices. The final point will be connected to the "
+"first.\n"
+"[b]Note:[/b] This returns a copy of the [PoolVector2Array] rather than a "
+"reference."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:100
+msgid ""
+"The polygon's fill texture. Use [code]uv[/code] to set texture coordinates."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:103
+msgid ""
+"Amount to offset the polygon's [code]texture[/code]. If [code](0, 0)[/code] "
+"the texture's origin (its top-left corner) will be placed at the polygon's "
+"[code]position[/code]."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:106
+msgid "The texture's rotation in radians."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:109
+msgid "The texture's rotation in degrees."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:112
+msgid ""
+"Amount to multiply the [code]uv[/code] coordinates when using a "
+"[code]texture[/code]. Larger values make the texture smaller, and vice versa."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:115
+msgid ""
+"Texture coordinates for each vertex of the polygon. There should be one "
+"[code]uv[/code] per polygon vertex. If there are fewer, undefined vertices "
+"will use [code](0, 0)[/code]."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:118
+msgid ""
+"Color for each vertex. Colors are interpolated between vertices, resulting "
+"in smooth gradients. There should be one per polygon vertex. If there are "
+"fewer, undefined vertices will use [code]color[/code]."
+msgstr ""
+
+#: doc/classes/PoolByteArray.xml:4
+msgid "A pooled [Array] of bytes."
+msgstr ""
+
+#: doc/classes/PoolByteArray.xml:7
+msgid ""
+"An [Array] specifically designed to hold bytes. Optimized for memory usage, "
+"does not fragment the memory.\n"
+"[b]Note:[/b] This type is passed by value and not by reference."
+msgstr ""
+
+#: doc/classes/PoolByteArray.xml:17
+msgid ""
+"Constructs a new [PoolByteArray]. Optionally, you can pass in a generic "
+"[Array] that will be converted."
+msgstr ""
+
+#: doc/classes/PoolByteArray.xml:29
+msgid "Appends a [PoolByteArray] at the end of this array."
+msgstr ""
+
+#: doc/classes/PoolByteArray.xml:36
+msgid ""
+"Returns a new [PoolByteArray] with the data compressed. Set the compression "
+"mode using one of [enum File.CompressionMode]'s constants."
+msgstr ""
+
+#: doc/classes/PoolByteArray.xml:44
+msgid ""
+"Returns a new [PoolByteArray] with the data decompressed. Set "
+"[code]buffer_size[/code] to the size of the uncompressed data. Set the "
+"compression mode using one of [enum File.CompressionMode]'s constants."
+msgstr ""
+
+#: doc/classes/PoolByteArray.xml:52
+msgid ""
+"Returns a new [PoolByteArray] with the data decompressed. Set the "
+"compression mode using one of [enum File.CompressionMode]'s constants. "
+"[b]This method only accepts gzip and deflate compression modes.[/b]\n"
+"This method is potentially slower than [code]decompress[/code], as it may "
+"have to re-allocate it's output buffer multiple times while decompressing, "
+"where as [code]decompress[/code] knows it's output buffer size from the "
+"begining.\n"
+"\n"
+"GZIP has a maximal compression ratio of 1032:1, meaning it's very possible "
+"for a small compressed payload to decompress to a potentially very large "
+"output. To guard against this, you may provide a maximum size this function "
+"is allowed to allocate in bytes via [code]max_output_size[/code]. Passing -1 "
+"will allow for unbounded output. If any positive value is passed, and the "
+"decompression exceeds that ammount in bytes, then an error will be returned."
+msgstr ""
+
+#: doc/classes/PoolByteArray.xml:67
+msgid ""
+"Returns a copy of the array's contents as [String]. Fast alternative to "
+"[method get_string_from_utf8] if the content is ASCII-only. Unlike the UTF-8 "
+"function this function maps every byte to a character in the array. "
+"Multibyte sequences will not be interpreted correctly. For parsing user "
+"input always use [method get_string_from_utf8]."
+msgstr ""
+
+#: doc/classes/PoolByteArray.xml:73
+msgid ""
+"Returns a copy of the array's contents as [String]. Slower than [method "
+"get_string_from_ascii] but supports UTF-8 encoded data. Use this function if "
+"you are unsure about the source of the data. For user input this function "
+"should always be preferred."
+msgstr ""
+
+#: doc/classes/PoolByteArray.xml:79
+msgid ""
+"Returns a hexadecimal representation of this array as a [String].\n"
+"[codeblock]\n"
+"var array = PoolByteArray([11, 46, 255])\n"
+"print(array.hex_encode()) # Prints: 0b2eff\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/PoolByteArray.xml:91 doc/classes/PoolColorArray.xml:43
+#: doc/classes/PoolRealArray.xml:44 doc/classes/PoolStringArray.xml:44
+#: doc/classes/PoolVector2Array.xml:44 doc/classes/PoolVector3Array.xml:43
+msgid ""
+"Inserts a new element at a given position in the array. The position must be "
+"valid, or at the end of the array ([code]idx == size()[/code])."
+msgstr ""
+
+#: doc/classes/PoolByteArray.xml:102 doc/classes/PoolRealArray.xml:55
+msgid "Appends an element at the end of the array."
+msgstr ""
+
+#: doc/classes/PoolByteArray.xml:108 doc/classes/PoolColorArray.xml:60
+#: doc/classes/PoolIntArray.xml:61 doc/classes/PoolRealArray.xml:61
+#: doc/classes/PoolStringArray.xml:68 doc/classes/PoolVector2Array.xml:61
+#: doc/classes/PoolVector3Array.xml:60
+msgid "Removes an element from the array by index."
+msgstr ""
+
+#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolIntArray.xml:67
+#: doc/classes/PoolRealArray.xml:67
+msgid ""
+"Sets the size of the array. If the array is grown, reserves elements at the "
+"end of the array. If the array is shrunk, truncates the array to the new "
+"size.\n"
+"[b]Note:[/b] Added elements are not automatically initialized to 0 and will "
+"contain garbage, i.e. indeterminate values."
+msgstr ""
+
+#: doc/classes/PoolByteArray.xml:122
+msgid "Changes the byte at the given index."
+msgstr ""
+
+#: doc/classes/PoolByteArray.xml:128 doc/classes/PoolColorArray.xml:79
+#: doc/classes/PoolRealArray.xml:81 doc/classes/PoolStringArray.xml:87
+#: doc/classes/PoolVector2Array.xml:80 doc/classes/PoolVector3Array.xml:79
+msgid "Returns the size of the array."
+msgstr ""
+
+#: doc/classes/PoolByteArray.xml:136
+msgid ""
+"Returns the slice of the [PoolByteArray] between indices (inclusive) as a "
+"new [PoolByteArray]. Any negative index is considered to be from the end of "
+"the array."
+msgstr ""
+
+#: doc/classes/PoolColorArray.xml:4
+msgid "A pooled [Array] of [Color]."
+msgstr ""
+
+#: doc/classes/PoolColorArray.xml:7
+msgid ""
+"An [Array] specifically designed to hold [Color]. Optimized for memory "
+"usage, does not fragment the memory.\n"
+"[b]Note:[/b] This type is passed by value and not by reference."
+msgstr ""
+
+#: doc/classes/PoolColorArray.xml:17
+msgid ""
+"Constructs a new [PoolColorArray]. Optionally, you can pass in a generic "
+"[Array] that will be converted."
+msgstr ""
+
+#: doc/classes/PoolColorArray.xml:29
+msgid "Appends a [PoolColorArray] at the end of this array."
+msgstr ""
+
+#: doc/classes/PoolColorArray.xml:54 doc/classes/PoolIntArray.xml:55
+msgid "Appends a value to the array."
+msgstr ""
+
+#: doc/classes/PoolColorArray.xml:66 doc/classes/PoolStringArray.xml:74
+#: doc/classes/PoolVector2Array.xml:67 doc/classes/PoolVector3Array.xml:66
+msgid ""
+"Sets the size of the array. If the array is grown, reserves elements at the "
+"end of the array. If the array is shrunk, truncates the array to the new "
+"size."
+msgstr ""
+
+#: doc/classes/PoolColorArray.xml:73
+msgid "Changes the [Color] at the given index."
+msgstr ""
+
+#: doc/classes/PoolIntArray.xml:4
+msgid "A pooled [Array] of integers ([int])."
+msgstr ""
+
+#: doc/classes/PoolIntArray.xml:7
+msgid ""
+"An [Array] specifically designed to hold integer values ([int]). Optimized "
+"for memory usage, does not fragment the memory.\n"
+"[b]Note:[/b] This type is passed by value and not by reference.\n"
+"[b]Note:[/b] This type is limited to signed 32-bit integers, which means it "
+"can only take values in the interval [code][-2^31, 2^31 - 1][/code], i.e. "
+"[code][-2147483648, 2147483647][/code]. Exceeding those bounds will wrap "
+"around. In comparison, [int] uses signed 64-bit integers which can hold much "
+"larger values."
+msgstr ""
+
+#: doc/classes/PoolIntArray.xml:18
+msgid ""
+"Constructs a new [PoolIntArray]. Optionally, you can pass in a generic "
+"[Array] that will be converted."
+msgstr ""
+
+#: doc/classes/PoolIntArray.xml:30
+msgid "Appends a [PoolIntArray] at the end of this array."
+msgstr ""
+
+#: doc/classes/PoolIntArray.xml:44
+msgid ""
+"Inserts a new int at a given position in the array. The position must be "
+"valid, or at the end of the array ([code]idx == size()[/code])."
+msgstr ""
+
+#: doc/classes/PoolIntArray.xml:75
+msgid "Changes the int at the given index."
+msgstr ""
+
+#: doc/classes/PoolIntArray.xml:81
+msgid "Returns the array size."
+msgstr ""
+
+#: doc/classes/PoolRealArray.xml:4
+msgid "A pooled [Array] of reals ([float])."
+msgstr ""
+
+#: doc/classes/PoolRealArray.xml:7
+msgid ""
+"An [Array] specifically designed to hold floating-point values. Optimized "
+"for memory usage, does not fragment the memory.\n"
+"[b]Note:[/b] This type is passed by value and not by reference.\n"
+"[b]Note:[/b] Unlike primitive [float]s which are 64-bit, numbers stored in "
+"[PoolRealArray] are 32-bit floats. This means values stored in "
+"[PoolRealArray] have lower precision compared to primitive [float]s. If you "
+"need to store 64-bit floats in an array, use a generic [Array] with [float] "
+"elements as these will still be 64-bit. However, using a generic [Array] to "
+"store [float]s will use roughly 6 times more memory compared to a "
+"[PoolRealArray]."
+msgstr ""
+
+#: doc/classes/PoolRealArray.xml:18
+msgid ""
+"Constructs a new [PoolRealArray]. Optionally, you can pass in a generic "
+"[Array] that will be converted."
+msgstr ""
+
+#: doc/classes/PoolRealArray.xml:30
+msgid "Appends a [PoolRealArray] at the end of this array."
+msgstr ""
+
+#: doc/classes/PoolRealArray.xml:75
+msgid "Changes the float at the given index."
+msgstr ""
+
+#: doc/classes/PoolStringArray.xml:4
+msgid "A pooled [Array] of [String]."
+msgstr ""
+
+#: doc/classes/PoolStringArray.xml:7
+msgid ""
+"An [Array] specifically designed to hold [String]s. Optimized for memory "
+"usage, does not fragment the memory.\n"
+"[b]Note:[/b] This type is passed by value and not by reference."
+msgstr ""
+
+#: doc/classes/PoolStringArray.xml:18
+msgid ""
+"Constructs a new [PoolStringArray]. Optionally, you can pass in a generic "
+"[Array] that will be converted."
+msgstr ""
+
+#: doc/classes/PoolStringArray.xml:30
+msgid "Appends a [PoolStringArray] at the end of this array."
+msgstr ""
+
+#: doc/classes/PoolStringArray.xml:56
+msgid ""
+"Returns a [String] with each element of the array joined with the given "
+"[code]delimiter[/code]."
+msgstr ""
+
+#: doc/classes/PoolStringArray.xml:62
+msgid "Appends a string element at end of the array."
+msgstr ""
+
+#: doc/classes/PoolStringArray.xml:81
+msgid "Changes the [String] at the given index."
+msgstr ""
+
+#: doc/classes/PoolVector2Array.xml:4
+msgid "A pooled [Array] of [Vector2]."
+msgstr ""
+
+#: doc/classes/PoolVector2Array.xml:7
+msgid ""
+"An [Array] specifically designed to hold [Vector2]. Optimized for memory "
+"usage, does not fragment the memory.\n"
+"[b]Note:[/b] This type is passed by value and not by reference."
+msgstr ""
+
+#: doc/classes/PoolVector2Array.xml:11 doc/classes/TileMap.xml:15
+#: doc/classes/TileSet.xml:15
+msgid "https://godotengine.org/asset-library/asset/519"
+msgstr ""
+
+#: doc/classes/PoolVector2Array.xml:18
+msgid ""
+"Constructs a new [PoolVector2Array]. Optionally, you can pass in a generic "
+"[Array] that will be converted."
+msgstr ""
+
+#: doc/classes/PoolVector2Array.xml:30
+msgid "Appends a [PoolVector2Array] at the end of this array."
+msgstr ""
+
+#: doc/classes/PoolVector2Array.xml:55
+msgid "Inserts a [Vector2] at the end."
+msgstr ""
+
+#: doc/classes/PoolVector2Array.xml:74
+msgid "Changes the [Vector2] at the given index."
+msgstr ""
+
+#: doc/classes/PoolVector3Array.xml:4
+msgid "A pooled [Array] of [Vector3]."
+msgstr ""
+
+#: doc/classes/PoolVector3Array.xml:7
+msgid ""
+"An [Array] specifically designed to hold [Vector3]. Optimized for memory "
+"usage, does not fragment the memory.\n"
+"[b]Note:[/b] This type is passed by value and not by reference."
+msgstr ""
+
+#: doc/classes/PoolVector3Array.xml:17
+msgid ""
+"Constructs a new [PoolVector3Array]. Optionally, you can pass in a generic "
+"[Array] that will be converted."
+msgstr ""
+
+#: doc/classes/PoolVector3Array.xml:29
+msgid "Appends a [PoolVector3Array] at the end of this array."
+msgstr ""
+
+#: doc/classes/PoolVector3Array.xml:54
+msgid "Inserts a [Vector3] at the end."
+msgstr ""
+
+#: doc/classes/PoolVector3Array.xml:73
+msgid "Changes the [Vector3] at the given index."
+msgstr ""
+
+#: doc/classes/Popup.xml:4
+msgid "Base container control for popups and dialogs."
+msgstr ""
+
+#: doc/classes/Popup.xml:7
+msgid ""
+"Popup is a base [Control] used to show dialogs and popups. It's a subwindow "
+"and modal by default (see [Control]) and has helpers for custom popup "
+"behavior. All popup methods ensure correct placement within the viewport."
+msgstr ""
+
+#: doc/classes/Popup.xml:16
+msgid "Popup (show the control in modal form)."
+msgstr ""
+
+#: doc/classes/Popup.xml:23
+msgid ""
+"Popup (show the control in modal form) in the center of the screen relative "
+"to its current canvas transform, at the current size, or at a size "
+"determined by [code]size[/code]."
+msgstr ""
+
+#: doc/classes/Popup.xml:31
+msgid ""
+"Popup (show the control in modal form) in the center of the screen relative "
+"to the current canvas transform, clamping the size to [code]size[/code], "
+"then ensuring the popup is no larger than the viewport size multiplied by "
+"[code]fallback_ratio[/code]."
+msgstr ""
+
+#: doc/classes/Popup.xml:38
+msgid ""
+"Popup (show the control in modal form) in the center of the screen relative "
+"to the current canvas transform, ensuring the size is never smaller than "
+"[code]minsize[/code]."
+msgstr ""
+
+#: doc/classes/Popup.xml:45
+msgid ""
+"Popup (show the control in modal form) in the center of the screen relative "
+"to the current canvas transform, scaled at a ratio of size of the screen."
+msgstr ""
+
+#: doc/classes/Popup.xml:51
+msgid "Shrink popup to keep to the minimum size of content."
+msgstr ""
+
+#: doc/classes/Popup.xml:57
+msgid ""
+"If [code]true[/code], the popup will not be hidden when a click event occurs "
+"outside of it, or when it receives the [code]ui_cancel[/code] action event.\n"
+"[b]Note:[/b] Enabling this property doesn't affect the Close or Cancel "
+"buttons' behavior in dialogs that inherit from this class. As a workaround, "
+"you can use [method WindowDialog.get_close_button] or [method "
+"ConfirmationDialog.get_cancel] and hide the buttons in question by setting "
+"their [member CanvasItem.visible] property to [code]false[/code]."
+msgstr ""
+
+#: doc/classes/Popup.xml:65
+msgid ""
+"Emitted when a popup is about to be shown. This is often used in [PopupMenu] "
+"to clear the list of options then create a new one according to the current "
+"context."
+msgstr ""
+
+#: doc/classes/Popup.xml:70
+msgid "Emitted when a popup is hidden."
+msgstr ""
+
+#: doc/classes/Popup.xml:76
+msgid "Notification sent right after the popup is shown."
+msgstr ""
+
+#: doc/classes/Popup.xml:79
+msgid "Notification sent right after the popup is hidden."
+msgstr ""
+
+#: doc/classes/PopupDialog.xml:4
+msgid "Base class for popup dialogs."
+msgstr ""
+
+#: doc/classes/PopupDialog.xml:7
+msgid ""
+"PopupDialog is a base class for popup dialogs, along with [WindowDialog]."
+msgstr ""
+
+#: doc/classes/PopupDialog.xml:17
+msgid "Sets a custom [StyleBox] for the panel of the [PopupDialog]."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:4
+msgid "PopupMenu displays a list of options."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:7
+msgid ""
+"[PopupMenu] is a [Control] that displays a list of options. They are popular "
+"in toolbars or context menus."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:18
+msgid ""
+"Adds a new checkable item with text [code]label[/code].\n"
+"An [code]id[/code] can optionally be provided, as well as an accelerator "
+"([code]accel[/code]). If no [code]id[/code] is provided, one will be created "
+"from the index. If no [code]accel[/code] is provided then the default "
+"[code]0[/code] will be assigned to it. See [method get_item_accelerator] for "
+"more info on accelerators.\n"
+"[b]Note:[/b] Checkable items just display a checkmark, but don't have any "
+"built-in checking behavior and must be checked/unchecked manually. See "
+"[method set_item_checked] for more info on how to control it."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:29
+msgid ""
+"Adds a new checkable item and assigns the specified [ShortCut] to it. Sets "
+"the label of the checkbox to the [ShortCut]'s name.\n"
+"An [code]id[/code] can optionally be provided. If no [code]id[/code] is "
+"provided, one will be created from the index.\n"
+"[b]Note:[/b] Checkable items just display a checkmark, but don't have any "
+"built-in checking behavior and must be checked/unchecked manually. See "
+"[method set_item_checked] for more info on how to control it."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:41
+msgid ""
+"Adds a new checkable item with text [code]label[/code] and icon "
+"[code]texture[/code].\n"
+"An [code]id[/code] can optionally be provided, as well as an accelerator "
+"([code]accel[/code]). If no [code]id[/code] is provided, one will be created "
+"from the index. If no [code]accel[/code] is provided then the default "
+"[code]0[/code] will be assigned to it. See [method get_item_accelerator] for "
+"more info on accelerators.\n"
+"[b]Note:[/b] Checkable items just display a checkmark, but don't have any "
+"built-in checking behavior and must be checked/unchecked manually. See "
+"[method set_item_checked] for more info on how to control it."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:53
+msgid ""
+"Adds a new checkable item and assigns the specified [ShortCut] and icon "
+"[code]texture[/code] to it. Sets the label of the checkbox to the "
+"[ShortCut]'s name.\n"
+"An [code]id[/code] can optionally be provided. If no [code]id[/code] is "
+"provided, one will be created from the index.\n"
+"[b]Note:[/b] Checkable items just display a checkmark, but don't have any "
+"built-in checking behavior and must be checked/unchecked manually. See "
+"[method set_item_checked] for more info on how to control it."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:65
+msgid ""
+"Adds a new item with text [code]label[/code] and icon [code]texture[/code].\n"
+"An [code]id[/code] can optionally be provided, as well as an accelerator "
+"([code]accel[/code]). If no [code]id[/code] is provided, one will be created "
+"from the index. If no [code]accel[/code] is provided then the default "
+"[code]0[/code] will be assigned to it. See [method get_item_accelerator] for "
+"more info on accelerators."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:76
+msgid "Same as [method add_icon_check_item], but uses a radio check button."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:86
+msgid ""
+"Same as [method add_icon_check_shortcut], but uses a radio check button."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:96
+msgid ""
+"Adds a new item and assigns the specified [ShortCut] and icon [code]texture[/"
+"code] to it. Sets the label of the checkbox to the [ShortCut]'s name.\n"
+"An [code]id[/code] can optionally be provided. If no [code]id[/code] is "
+"provided, one will be created from the index."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:106
+msgid ""
+"Adds a new item with text [code]label[/code].\n"
+"An [code]id[/code] can optionally be provided, as well as an accelerator "
+"([code]accel[/code]). If no [code]id[/code] is provided, one will be created "
+"from the index. If no [code]accel[/code] is provided then the default "
+"[code]0[/code] will be assigned to it. See [method get_item_accelerator] for "
+"more info on accelerators."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:118
+msgid ""
+"Adds a new multistate item with text [code]label[/code].\n"
+"Contrarily to normal binary items, multistate items can have more than two "
+"states, as defined by [code]max_states[/code]. Each press or activate of the "
+"item will increase the state by one. The default value is defined by "
+"[code]default_state[/code].\n"
+"An [code]id[/code] can optionally be provided, as well as an accelerator "
+"([code]accel[/code]). If no [code]id[/code] is provided, one will be created "
+"from the index. If no [code]accel[/code] is provided then the default "
+"[code]0[/code] will be assigned to it. See [method get_item_accelerator] for "
+"more info on accelerators."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:129
+msgid ""
+"Adds a new radio check button with text [code]label[/code].\n"
+"An [code]id[/code] can optionally be provided, as well as an accelerator "
+"([code]accel[/code]). If no [code]id[/code] is provided, one will be created "
+"from the index. If no [code]accel[/code] is provided then the default "
+"[code]0[/code] will be assigned to it. See [method get_item_accelerator] for "
+"more info on accelerators.\n"
+"[b]Note:[/b] Checkable items just display a checkmark, but don't have any "
+"built-in checking behavior and must be checked/unchecked manually. See "
+"[method set_item_checked] for more info on how to control it."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:140
+msgid ""
+"Adds a new radio check button and assigns a [ShortCut] to it. Sets the label "
+"of the checkbox to the [ShortCut]'s name.\n"
+"An [code]id[/code] can optionally be provided. If no [code]id[/code] is "
+"provided, one will be created from the index.\n"
+"[b]Note:[/b] Checkable items just display a checkmark, but don't have any "
+"built-in checking behavior and must be checked/unchecked manually. See "
+"[method set_item_checked] for more info on how to control it."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:150
+msgid ""
+"Adds a separator between items. Separators also occupy an index, which you "
+"can set by using the [code]id[/code] parameter.\n"
+"A [code]label[/code] can optionally be provided, which will appear at the "
+"center of the separator."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:160
+msgid ""
+"Adds a [ShortCut].\n"
+"An [code]id[/code] can optionally be provided. If no [code]id[/code] is "
+"provided, one will be created from the index."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:170
+msgid ""
+"Adds an item that will act as a submenu of the parent [PopupMenu] node when "
+"clicked. The [code]submenu[/code] argument is the name of the child "
+"[PopupMenu] node that will be shown when the item is clicked.\n"
+"An [code]id[/code] can optionally be provided. If no [code]id[/code] is "
+"provided, one will be created from the index."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:177
+msgid "Removes all items from the [PopupMenu]."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:183
+msgid ""
+"Returns the index of the currently focused item. Returns [code]-1[/code] if "
+"no item is focused."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:190
+msgid ""
+"Returns the accelerator of the item at index [code]idx[/code]. Accelerators "
+"are special combinations of keys that activate the item, no matter which "
+"control is focused."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:196
+msgid "Returns the number of items in the [PopupMenu]."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:210
+msgid ""
+"Returns the id of the item at index [code]idx[/code]. [code]id[/code] can be "
+"manually assigned, while index can not."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:217
+msgid ""
+"Returns the index of the item containing the specified [code]id[/code]. "
+"Index is automatically assigned to each item by the engine. Index can not be "
+"set manually."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:224
+msgid ""
+"Returns the metadata of the specified item, which might be of any type. You "
+"can set it with [method set_item_metadata], which provides a simple way of "
+"assigning context data to items."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:231
+msgid ""
+"Returns the [ShortCut] associated with the specified [code]idx[/code] item."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:238
+msgid ""
+"Returns the submenu name of the item at index [code]idx[/code]. See [method "
+"add_submenu_item] for more info on how to add a submenu."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:252
+msgid ""
+"Returns the tooltip associated with the specified index index [code]idx[/"
+"code]."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:258
+msgid ""
+"Returns [code]true[/code] if the popup will be hidden when the window loses "
+"focus or not."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:265
+msgid ""
+"Returns [code]true[/code] if the item at index [code]idx[/code] is checkable "
+"in some way, i.e. if it has a checkbox or radio button.\n"
+"[b]Note:[/b] Checkable items just display a checkmark or radio button, but "
+"don't have any built-in checking behavior and must be checked/unchecked "
+"manually."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:273
+msgid ""
+"Returns [code]true[/code] if the item at index [code]idx[/code] is checked."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:280
+msgid ""
+"Returns [code]true[/code] if the item at index [code]idx[/code] is disabled. "
+"When it is disabled it can't be selected, or its action invoked.\n"
+"See [method set_item_disabled] for more info on how to disable an item."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:288
+msgid ""
+"Returns [code]true[/code] if the item at index [code]idx[/code] has radio "
+"button-style checkability.\n"
+"[b]Note:[/b] This is purely cosmetic; you must add the logic for checking/"
+"unchecking items in radio groups."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:296
+msgid ""
+"Returns [code]true[/code] if the item is a separator. If it is, it will be "
+"displayed as a line. See [method add_separator] for more info on how to add "
+"a separator."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:303
+msgid "Returns [code]true[/code] if the specified item's shortcut is disabled."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:310
+msgid ""
+"Removes the item at index [code]idx[/code] from the menu.\n"
+"[b]Note:[/b] The indices of items after the removed item will be shifted by "
+"one."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:318
+msgid "Hides the [PopupMenu] when the window loses focus."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:326
+msgid ""
+"Sets the accelerator of the item at index [code]idx[/code]. Accelerators are "
+"special combinations of keys that activate the item, no matter which control "
+"is focused."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:334
+msgid ""
+"Sets whether the item at index [code]idx[/code] has a checkbox. If "
+"[code]false[/code], sets the type of the item to plain text.\n"
+"[b]Note:[/b] Checkable items just display a checkmark, but don't have any "
+"built-in checking behavior and must be checked/unchecked manually."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:343
+msgid ""
+"Sets the type of the item at the specified index [code]idx[/code] to radio "
+"button. If [code]false[/code], sets the type of the item to plain text."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:351
+msgid ""
+"Mark the item at index [code]idx[/code] as a separator, which means that it "
+"would be displayed as a line. If [code]false[/code], sets the type of the "
+"item to plain text."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:359
+msgid "Sets the checkstate status of the item at index [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:367
+msgid ""
+"Enables/disables the item at index [code]idx[/code]. When it is disabled, it "
+"can't be selected and its action can't be invoked."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:375
+msgid "Replaces the [Texture] icon of the specified [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:383
+msgid "Sets the [code]id[/code] of the item at index [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:391
+msgid ""
+"Sets the metadata of an item, which may be of any type. You can later get it "
+"with [method get_item_metadata], which provides a simple way of assigning "
+"context data to items."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:399
+msgid ""
+"Sets the state of a multistate item. See [method add_multistate_item] for "
+"details."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:408
+msgid "Sets a [ShortCut] for the specified item [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:416
+msgid "Disables the [ShortCut] of the specified index [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:424
+msgid ""
+"Sets the submenu of the item at index [code]idx[/code]. The submenu is the "
+"name of a child [PopupMenu] node that would be shown when the item is "
+"clicked."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:440
+msgid ""
+"Sets the [String] tooltip of the item at the specified index [code]idx[/"
+"code]."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:447
+msgid ""
+"Toggles the check state of the item of the specified index [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:454
+msgid ""
+"Cycle to the next state of a multistate item. See [method "
+"add_multistate_item] for details."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:460
+msgid "If [code]true[/code], allows navigating [PopupMenu] with letter keys."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:464
+msgid ""
+"If [code]true[/code], hides the [PopupMenu] when a checkbox or radio button "
+"is selected."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:467
+msgid "If [code]true[/code], hides the [PopupMenu] when an item is selected."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:470
+msgid ""
+"If [code]true[/code], hides the [PopupMenu] when a state item is selected."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:473
+msgid ""
+"Sets the delay time in seconds for the submenu item to popup on mouse "
+"hovering. If the popup menu is added as a child of another (acting as a "
+"submenu), it will inherit the delay time of the parent menu item."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:480
+msgid ""
+"Emitted when user navigated to an item of some [code]id[/code] using "
+"[code]ui_up[/code] or [code]ui_down[/code] action."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:486
+msgid ""
+"Emitted when an item of some [code]id[/code] is pressed or its accelerator "
+"is activated."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:492
+msgid ""
+"Emitted when an item of some [code]index[/code] is pressed or its "
+"accelerator is activated."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:500
+msgid "[Texture] icon for the checked checkbox items."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:503
+msgid "[Font] used for the menu items."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:506
+msgid "The default text [Color] for menu items' names."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:509
+msgid ""
+"The text [Color] used for shortcuts and accelerators that show next to the "
+"menu item name when defined. See [method get_item_accelerator] for more info "
+"on accelerators."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:512
+msgid "[Color] used for disabled menu items' text."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:515
+msgid "[Color] used for the hovered text."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:518
+msgid "[Color] used for labeled separators' text. See [method add_separator]."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:521
+msgid "[StyleBox] displayed when the [PopupMenu] item is hovered."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:524
+msgid ""
+"The horizontal space between the item's name and the shortcut text/submenu "
+"arrow."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:527
+msgid ""
+"[StyleBox] for the left side of labeled separator. See [method "
+"add_separator]."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:530
+msgid ""
+"[StyleBox] for the right side of labeled separator. See [method "
+"add_separator]."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:533
+msgid "Default [StyleBox] of the [PopupMenu] items."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:536
+msgid "[StyleBox] used when the [PopupMenu] item is disabled."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:539
+msgid "[Texture] icon for the checked radio button items."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:542
+msgid "[Texture] icon for the unchecked radio button items."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:545
+msgid "[StyleBox] used for the separators. See [method add_separator]."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:548
+msgid "[Texture] icon for the submenu arrow."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:551
+msgid "[Texture] icon for the unchecked checkbox items."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:554
+msgid "The vertical space between each menu item."
+msgstr ""
+
+#: doc/classes/PopupPanel.xml:4
+msgid "Class for displaying popups with a panel background."
+msgstr ""
+
+#: doc/classes/PopupPanel.xml:7
+msgid ""
+"Class for displaying popups with a panel background. In some cases it might "
+"be simpler to use than [Popup], since it provides a configurable background. "
+"If you are making windows, better check [WindowDialog]."
+msgstr ""
+
+#: doc/classes/PopupPanel.xml:17
+msgid "The background panel style of this [PopupPanel]."
+msgstr ""
+
+#: doc/classes/Portal.xml:4
+msgid "Portal nodes are used to enable visibility between [Room]s."
+msgstr ""
+
+#: doc/classes/Portal.xml:7
+msgid ""
+"[Portal]s are a special type of [MeshInstance] that allow the portal culling "
+"system to 'see' from one room to the next. They often correspond to doors "
+"and windows in level geometry. By only allowing [Camera]s to see through "
+"portals, this allows the system to cull out all the objects in rooms that "
+"cannot be seen through portals. This is a form of [b]occlusion culling[/b], "
+"and can greatly increase performance.\n"
+"There are some limitations to the form of portals:\n"
+"They must be single sided convex polygons, and usually you would orientate "
+"their front faces [b]outward[/b] from the [Room] they are placed in. The "
+"vertices should be positioned on a single plane (although their positioning "
+"does not have to be perfect).\n"
+"There is no need to place an opposite portal in an adjacent room, links are "
+"made two-way automatically."
+msgstr ""
+
+#: doc/classes/Portal.xml:20 doc/classes/Room.xml:21
+msgid "Sets individual points. Primarily for use by the editor."
+msgstr ""
+
+#: doc/classes/Portal.xml:26
+msgid ""
+"This is a shortcut for setting the linked [Room] in the name of the [Portal] "
+"(the name is used during conversion)."
+msgstr ""
+
+#: doc/classes/Portal.xml:29
+msgid ""
+"The points defining the shape of the [Portal] polygon (which should be "
+"convex).\n"
+"These are defined in 2D, with [code]0,0[/code] being the origin of the "
+"[Portal] node's [member Spatial.global_transform].\n"
+"[b]Note:[/b] These raw points are sanitized for winding order internally."
+msgstr ""
+
+#: doc/classes/Portal.xml:34
+msgid ""
+"Visibility through [Portal]s can be turned on and off at runtime - this is "
+"useful for having closable doors."
+msgstr ""
+
+#: doc/classes/Portal.xml:37
+msgid ""
+"Some objects are so big that they may be present in more than one [Room] "
+"('sprawling'). As we often don't want objects that *just* breach the edges "
+"to be assigned to neighbouring rooms, you can assign an extra margin through "
+"the [Portal] to allow objects to breach without sprawling."
+msgstr ""
+
+#: doc/classes/Portal.xml:40
+msgid ""
+"Portals default to being two way - see through in both directions, however "
+"you can make them one way, visible from the source room only."
+msgstr ""
+
+#: doc/classes/Portal.xml:43
+msgid ""
+"In most cases you will want to use the default [Portal] margin in your "
+"portals (this is set in the [RoomManager]).\n"
+"If you want to override this default, set this value to [code]false[/code], "
+"and the local [member portal_margin] will take effect."
+msgstr ""
+
+#: doc/classes/Position2D.xml:4
+msgid "Generic 2D position hint for editing."
+msgstr ""
+
+#: doc/classes/Position2D.xml:7
+msgid ""
+"Generic 2D position hint for editing. It's just like a plain [Node2D], but "
+"it displays as a cross in the 2D editor at all times. You can set cross' "
+"visual size by using the gizmo in the 2D editor while the node is selected."
+msgstr ""
+
+#: doc/classes/Position3D.xml:4
+msgid "Generic 3D position hint for editing."
+msgstr ""
+
+#: doc/classes/Position3D.xml:7
+msgid ""
+"Generic 3D position hint for editing. It's just like a plain [Spatial], but "
+"it displays as a cross in the 3D editor at all times."
+msgstr ""
+
+#: doc/classes/PrimitiveMesh.xml:4
+msgid ""
+"Base class for all primitive meshes. Handles applying a [Material] to a "
+"primitive mesh."
+msgstr ""
+
+#: doc/classes/PrimitiveMesh.xml:7
+msgid ""
+"Base class for all primitive meshes. Handles applying a [Material] to a "
+"primitive mesh. Examples include [CapsuleMesh], [CubeMesh], [CylinderMesh], "
+"[PlaneMesh], [PrismMesh], [QuadMesh], and [SphereMesh]."
+msgstr ""
+
+#: doc/classes/PrimitiveMesh.xml:15
+msgid ""
+"Returns mesh arrays used to constitute surface of [Mesh]. The result can be "
+"passed to [method ArrayMesh.add_surface_from_arrays] to create a new "
+"surface. For example:\n"
+"[codeblock]\n"
+"var c := CylinderMesh.new()\n"
+"var arr_mesh := ArrayMesh.new()\n"
+"arr_mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, c."
+"get_mesh_arrays())\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/PrimitiveMesh.xml:29
+msgid ""
+"If set, the order of the vertices in each triangle are reversed resulting in "
+"the backside of the mesh being drawn.\n"
+"This gives the same result as using [constant SpatialMaterial.CULL_BACK] in "
+"[member SpatialMaterial.params_cull_mode]."
+msgstr ""
+
+#: doc/classes/PrimitiveMesh.xml:33
+msgid "The current [Material] of the primitive mesh."
+msgstr ""
+
+#: doc/classes/PrismMesh.xml:4 doc/classes/PrismMesh.xml:7
+msgid "Class representing a prism-shaped [PrimitiveMesh]."
+msgstr ""
+
+#: doc/classes/PrismMesh.xml:15
+msgid ""
+"Displacement of the upper edge along the X axis. 0.0 positions edge straight "
+"above the bottom-left edge."
+msgstr ""
+
+#: doc/classes/PrismMesh.xml:18
+msgid "Size of the prism."
+msgstr ""
+
+#: doc/classes/PrismMesh.xml:21
+msgid "Number of added edge loops along the Z axis."
+msgstr ""
+
+#: doc/classes/PrismMesh.xml:24
+msgid "Number of added edge loops along the Y axis."
+msgstr ""
+
+#: doc/classes/PrismMesh.xml:27
+msgid "Number of added edge loops along the X axis."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:4
+msgid ""
+"Type of [Sky] that is generated procedurally based on user input parameters."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:7
+msgid ""
+"ProceduralSky provides a way to create an effective background quickly by "
+"defining procedural parameters for the sun, the sky and the ground. The sky "
+"and ground are very similar, they are defined by a color at the horizon, "
+"another color, and finally an easing curve to interpolate between these two "
+"colors. Similarly, the sun is described by a position in the sky, a color, "
+"and an easing curve. However, the sun also defines a minimum and maximum "
+"angle, these two values define at what distance the easing curve begins and "
+"ends from the sun, and thus end up defining the size of the sun in the sky.\n"
+"The ProceduralSky is updated on the CPU after the parameters change. It is "
+"stored in a texture and then displayed as a background in the scene. This "
+"makes it relatively unsuitable for real-time updates during gameplay. "
+"However, with a small enough texture size, it can still be updated "
+"relatively frequently, as it is updated on a background thread when multi-"
+"threading is available."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:16
+msgid "Color of the ground at the bottom."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:19
+msgid ""
+"How quickly the [member ground_horizon_color] fades into the [member "
+"ground_bottom_color]."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:22
+msgid "Amount of energy contribution from the ground."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:25
+msgid "Color of the ground at the horizon."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:28
+msgid ""
+"How quickly the [member sky_horizon_color] fades into the [member "
+"sky_top_color]."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:31
+msgid "Amount of energy contribution from the sky."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:34
+msgid "Color of the sky at the horizon."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:37
+msgid "Color of the sky at the top."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:40
+msgid "Distance from center of sun where it fades out completely."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:43
+msgid "Distance from sun where it goes from solid to starting to fade."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:46
+msgid "The sun's color."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:49
+msgid ""
+"How quickly the sun fades away between [member sun_angle_min] and [member "
+"sun_angle_max]."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:52
+msgid "Amount of energy contribution from the sun."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:55
+msgid "The sun's height using polar coordinates."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:58
+msgid "The direction of the sun using polar coordinates."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:61
+msgid ""
+"Size of [Texture] that the ProceduralSky will generate. The size is set "
+"using [enum TextureSize]."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:66
+msgid "Sky texture will be 256x128."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:69
+msgid "Sky texture will be 512x256."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:72
+msgid "Sky texture will be 1024x512. This is the default size."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:75
+msgid "Sky texture will be 2048x1024."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:78
+msgid "Sky texture will be 4096x2048."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:81
+msgid "Represents the size of the [enum TextureSize] enum."
+msgstr ""
+
+#: doc/classes/ProgressBar.xml:4
+msgid "General-purpose progress bar."
+msgstr ""
+
+#: doc/classes/ProgressBar.xml:7
+msgid "General-purpose progress bar. Shows fill percentage from right to left."
+msgstr ""
+
+#: doc/classes/ProgressBar.xml:15
+msgid "If [code]true[/code], the fill percentage is displayed on the bar."
+msgstr ""
+
+#: doc/classes/ProgressBar.xml:24
+msgid "The style of the background."
+msgstr ""
+
+#: doc/classes/ProgressBar.xml:27
+msgid "The style of the progress (i.e. the part that fills the bar)."
+msgstr ""
+
+#: doc/classes/ProgressBar.xml:30
+msgid ""
+"Font used to draw the fill percentage if [member percent_visible] is "
+"[code]true[/code]."
+msgstr ""
+
+#: doc/classes/ProgressBar.xml:33
+msgid "The color of the text."
+msgstr ""
+
+#: doc/classes/ProgressBar.xml:36
+msgid "The color of the text's shadow."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:4
+msgid "Contains global variables accessible from everywhere."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:7
+msgid ""
+"Contains global variables accessible from everywhere. Use [method "
+"get_setting], [method set_setting] or [method has_setting] to access them. "
+"Variables stored in [code]project.godot[/code] are also loaded into "
+"ProjectSettings, making this object very useful for reading custom game "
+"configuration options.\n"
+"When naming a Project Settings property, use the full path to the setting "
+"including the category. For example, [code]\"application/config/name\"[/"
+"code] for the project name. Category and property names can be viewed in the "
+"Project Settings dialog.\n"
+"[b]Feature tags:[/b] Project settings can be overridden for specific "
+"platforms and configurations (debug, release, ...) using [url=https://docs."
+"godotengine.org/en/latest/tutorials/export/feature_tags.html]feature tags[/"
+"url].\n"
+"[b]Overriding:[/b] Any project setting can be overridden by creating a file "
+"named [code]override.cfg[/code] in the project's root directory. This can "
+"also be used in exported projects by placing this file in the same directory "
+"as the project binary. Overriding will still take the base project "
+"settings' [url=https://docs.godotengine.org/en/latest/tutorials/export/"
+"feature_tags.html]feature tags[/url] in account. Therefore, make sure to "
+"[i]also[/i] override the setting with the desired feature tags if you want "
+"them to override base project settings on all platforms and configurations."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:22
+msgid ""
+"Adds a custom property info to a property. The dictionary must contain:\n"
+"- [code]name[/code]: [String] (the property's name)\n"
+"- [code]type[/code]: [int] (see [enum Variant.Type])\n"
+"- optionally [code]hint[/code]: [int] (see [enum PropertyHint]) and "
+"[code]hint_string[/code]: [String]\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"ProjectSettings.set(\"category/property_name\", 0)\n"
+"\n"
+"var property_info = {\n"
+" \"name\": \"category/property_name\",\n"
+" \"type\": TYPE_INT,\n"
+" \"hint\": PROPERTY_HINT_ENUM,\n"
+" \"hint_string\": \"one,two,three\"\n"
+"}\n"
+"\n"
+"ProjectSettings.add_property_info(property_info)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:45
+msgid "Clears the whole configuration (not recommended, may break things)."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:52
+msgid ""
+"Returns the order of a configuration value (influences when saved to the "
+"config file)."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:59
+msgid ""
+"Returns the value of a setting.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"print(ProjectSettings.get_setting(\"application/config/name\"))\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:70
+msgid ""
+"Returns the absolute, native OS path corresponding to the localized "
+"[code]path[/code] (starting with [code]res://[/code] or [code]user://[/"
+"code]). The returned path will vary depending on the operating system and "
+"user preferences. See [url=https://docs.godotengine.org/en/3.4/tutorials/io/"
+"data_paths.html]File paths in Godot projects[/url] to see what those paths "
+"convert to. See also [method localize_path].\n"
+"[b]Note:[/b] [method globalize_path] with [code]res://[/code] will not work "
+"in an exported project. Instead, prepend the executable's base directory to "
+"the path when running from an exported project:\n"
+"[codeblock]\n"
+"var path = \"\"\n"
+"if OS.has_feature(\"editor\"):\n"
+" # Running from an editor binary.\n"
+" # `path` will contain the absolute path to `hello.txt` located in the "
+"project root.\n"
+" path = ProjectSettings.globalize_path(\"res://hello.txt\")\n"
+"else:\n"
+" # Running from an exported project.\n"
+" # `path` will contain the absolute path to `hello.txt` next to the "
+"executable.\n"
+" # This is *not* identical to using `ProjectSettings.globalize_path()` "
+"with a `res://` path,\n"
+" # but is close enough in spirit.\n"
+" path = OS.get_executable_path().get_base_dir().plus_file(\"hello.txt\")\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:91
+msgid "Returns [code]true[/code] if a configuration value is present."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:100
+msgid ""
+"Loads the contents of the .pck or .zip file specified by [code]pack[/code] "
+"into the resource filesystem ([code]res://[/code]). Returns [code]true[/"
+"code] on success.\n"
+"[b]Note:[/b] If a file from [code]pack[/code] shares the same path as a file "
+"already in the resource filesystem, any attempts to load that file will use "
+"the file from [code]pack[/code] unless [code]replace_files[/code] is set to "
+"[code]false[/code].\n"
+"[b]Note:[/b] The optional [code]offset[/code] parameter can be used to "
+"specify the offset in bytes to the start of the resource pack. This is only "
+"supported for .pck files."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:109
+msgid ""
+"Returns the localized path (starting with [code]res://[/code]) corresponding "
+"to the absolute, native OS [code]path[/code]. See also [method "
+"globalize_path]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:116
+msgid ""
+"Returns [code]true[/code] if the specified property exists and its initial "
+"value differs from the current value."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:123
+msgid ""
+"Returns the specified property's initial value. Returns [code]null[/code] if "
+"the property does not exist."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:129
+msgid ""
+"Saves the configuration to the [code]project.godot[/code] file.\n"
+"[b]Note:[/b] This method is intended to be used by editor plugins, as "
+"modified [ProjectSettings] can't be loaded back in the running app. If you "
+"want to change project settings in exported projects, use [method "
+"save_custom] to save [code]override.cfg[/code] file."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:137
+msgid ""
+"Saves the configuration to a custom file. The file extension must be [code]."
+"godot[/code] (to save in text-based [ConfigFile] format) or [code].binary[/"
+"code] (to save in binary format). You can also save [code]override.cfg[/"
+"code] file, which is also text, but can be used in exported projects unlike "
+"other formats."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:145
+msgid ""
+"Sets the specified property's initial value. This is the value the property "
+"reverts to."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:153
+msgid ""
+"Sets the order of a configuration value (influences when saved to the config "
+"file)."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:161
+msgid ""
+"Sets the value of a setting.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"ProjectSettings.set_setting(\"application/config/name\", \"Example\")\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:171
+msgid ""
+"Comma-separated list of custom Android modules (which must have been built "
+"in the Android export templates) using their Java package path, e.g. "
+"[code]\"org/godotengine/godot/MyCustomSingleton,com/example/foo/"
+"FrenchFriesFactory\"[/code].\n"
+"[b]Note:[/b] Since Godot 3.2.2, the [code]org/godotengine/godot/"
+"GodotPaymentV3[/code] module was deprecated and replaced by the "
+"[code]GodotPayment[/code] plugin which should be enabled in the Android "
+"export preset under [code]Plugins[/code] section. The singleton to access in "
+"code was also renamed to [code]GodotPayment[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:175
+msgid "Background color for the boot splash."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:178
+msgid ""
+"If [code]true[/code], scale the boot splash image to the full window length "
+"when engine starts. If [code]false[/code], the engine will leave it at the "
+"default pixel size."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:181
+msgid "Path to an image used as the boot splash."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:184
+msgid ""
+"If [code]true[/code], applies linear filtering when scaling the image "
+"(recommended for high resolution artwork). If [code]false[/code], uses "
+"nearest-neighbor interpolation (recommended for pixel art)."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:187
+msgid ""
+"This user directory is used for storing persistent data ([code]user://[/"
+"code] filesystem). If left empty, [code]user://[/code] resolves to a project-"
+"specific folder in Godot's own configuration folder (see [method OS."
+"get_user_data_dir]). If a custom directory name is defined, this name will "
+"be used instead and appended to the system-specific user data directory "
+"(same parent folder as the Godot configuration folder documented in [method "
+"OS.get_user_data_dir]).\n"
+"The [member application/config/use_custom_user_dir] setting must be enabled "
+"for this to take effect."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:191
+msgid ""
+"The project's description, displayed as a tooltip in the Project Manager "
+"when hovering the project."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:194
+msgid ""
+"Icon used for the project, set when project loads. Exporters will also use "
+"this icon when possible."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:197
+msgid ""
+"Icon set in [code].icns[/code] format used on macOS to set the game's icon. "
+"This is done automatically on start by calling [method OS.set_native_icon]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:200
+msgid ""
+"The project's name. It is used both by the Project Manager and by exporters. "
+"The project name can be translated by translating its value in localization "
+"files. The window title will be set to match the project name automatically "
+"on startup.\n"
+"[b]Note:[/b] Changing this value will also change the user data folder's "
+"path if [member application/config/use_custom_user_dir] is [code]false[/"
+"code]. After renaming the project, you will no longer be able to access "
+"existing data in [code]user://[/code] unless you rename the old folder to "
+"match the new project name. See [url=https://docs.godotengine.org/en/3.4/"
+"tutorials/io/data_paths.html]Data paths[/url] in the documentation for more "
+"information."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:204
+msgid ""
+"Specifies a file to override project settings. For example: [code]user://"
+"custom_settings.cfg[/code]. See \"Overriding\" in the [ProjectSettings] "
+"class description at the top for more information.\n"
+"[b]Note:[/b] Regardless of this setting's value, [code]res://override.cfg[/"
+"code] will still be read to override the project settings."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:208
+msgid ""
+"If [code]true[/code], the project will save user data to its own user "
+"directory (see [member application/config/custom_user_dir_name]). This "
+"setting is only effective on desktop platforms. A name must be set in the "
+"[member application/config/custom_user_dir_name] setting for this to take "
+"effect. If [code]false[/code], the project will save user data to [code](OS "
+"user data directory)/Godot/app_userdata/(project name)[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:211
+msgid ""
+"If [code]true[/code], the project will use a hidden directory ([code]."
+"import[/code]) for storing project-specific data (metadata, shader cache, "
+"etc.).\n"
+"If [code]false[/code], a non-hidden directory ([code]import[/code]) will be "
+"used instead.\n"
+"[b]Note:[/b] Restart the application after changing this setting.\n"
+"[b]Note:[/b] Changing this value can help on platforms or with third-party "
+"tools where hidden directory patterns are disallowed. Only modify this "
+"setting if you know that your environment requires it, as changing the "
+"default can impact compatibility with some external tools or plugins which "
+"expect the default [code].import[/code] folder."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:217
+msgid ""
+"Icon set in [code].ico[/code] format used on Windows to set the game's icon. "
+"This is done automatically on start by calling [method OS.set_native_icon]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:220
+msgid ""
+"Time samples for frame deltas are subject to random variation introduced by "
+"the platform, even when frames are displayed at regular intervals thanks to "
+"V-Sync. This can lead to jitter. Delta smoothing can often give a better "
+"result by filtering the input deltas to correct for minor fluctuations from "
+"the refresh rate.\n"
+"[b]Note:[/b] Delta smoothing is only attempted when [member display/window/"
+"vsync/use_vsync] is switched on, as it does not work well without V-Sync.\n"
+"It may take several seconds at a stable frame rate before the smoothing is "
+"initially activated. It will only be active on machines where performance is "
+"adequate to render frames at the refresh rate."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:225
+msgid ""
+"[b]Experimental.[/b] Shifts the measurement of delta time for each frame to "
+"just after the drawing has taken place. This may lead to more consistent "
+"deltas and a reduction in frame stutters."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:228
+msgid ""
+"If [code]true[/code], disables printing to standard error. If [code]true[/"
+"code], this also hides error and warning messages printed by [method "
+"@GDScript.push_error] and [method @GDScript.push_warning]. See also [member "
+"application/run/disable_stdout].\n"
+"Changes to this setting will only be applied upon restarting the application."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:232
+msgid ""
+"If [code]true[/code], disables printing to standard output. This is "
+"equivalent to starting the editor or project with the [code]--quiet[/code] "
+"command line argument. See also [member application/run/disable_stderr].\n"
+"Changes to this setting will only be applied upon restarting the application."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:236
+msgid ""
+"If [code]true[/code], flushes the standard output stream every time a line "
+"is printed. This affects both terminal logging and file logging.\n"
+"When running a project, this setting must be enabled if you want logs to be "
+"collected by service managers such as systemd/journalctl. This setting is "
+"disabled by default on release builds, since flushing on every printed line "
+"will negatively affect performance if lots of lines are printed in a rapid "
+"succession. Also, if this setting is enabled, logged files will still be "
+"written successfully if the application crashes or is otherwise killed by "
+"the user (without being closed \"normally\").\n"
+"[b]Note:[/b] Regardless of this setting, the standard error stream "
+"([code]stderr[/code]) is always flushed when a line is printed to it.\n"
+"Changes to this setting will only be applied upon restarting the application."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:242
+msgid ""
+"Debug build override for [member application/run/flush_stdout_on_print], as "
+"performance is less important during debugging.\n"
+"Changes to this setting will only be applied upon restarting the application."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:246
+msgid ""
+"Forces a delay between frames in the main loop (in milliseconds). This may "
+"be useful if you plan to disable vertical synchronization."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:249
+msgid ""
+"If [code]true[/code], enables low-processor usage mode. This setting only "
+"works on desktop platforms. The screen is not redrawn if nothing changes "
+"visually. This is meant for writing applications and editors, but is pretty "
+"useless (and can hurt performance) in most games."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:252
+msgid ""
+"Amount of sleeping between frames when the low-processor usage mode is "
+"enabled (in microseconds). Higher values will result in lower CPU usage."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:255
+msgid "Path to the main scene file that will be loaded when the project runs."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:258 doc/classes/ProjectSettings.xml:261
+msgid ""
+"Audio buses will disable automatically when sound goes below a given dB "
+"threshold for a given time. This saves CPU as effects assigned to that bus "
+"will no longer do any processing."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:264
+msgid ""
+"Default [AudioBusLayout] resource file to use in the project, unless "
+"overridden by the scene."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:267
+msgid ""
+"Specifies the audio driver to use. This setting is platform-dependent as "
+"each platform supports different audio drivers. If left empty, the default "
+"audio driver will be used."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:270
+msgid ""
+"If [code]true[/code], microphone input will be allowed. This requires "
+"appropriate permissions to be set when exporting to Android or iOS."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:273
+msgid ""
+"The mixing rate used for audio (in Hz). In general, it's better to not touch "
+"this and leave it to the host operating system."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:276
+msgid ""
+"Safer override for [member audio/mix_rate] in the Web platform. Here "
+"[code]0[/code] means \"let the browser choose\" (since some browsers do not "
+"like forcing the mix rate)."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:279
+msgid ""
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:284
+msgid ""
+"Safer override for [member audio/output_latency] in the Web platform, to "
+"avoid audio issues especially on mobile devices."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:287
+msgid ""
+"Setting to hardcode audio delay when playing video. Best to leave this "
+"untouched unless you know what you are doing."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:290
+msgid ""
+"The default compression level for gzip. Affects compressed scenes and "
+"resources. Higher levels result in smaller files at the cost of compression "
+"speed. Decompression speed is mostly unaffected by the compression level. "
+"[code]-1[/code] uses the default gzip compression level, which is identical "
+"to [code]6[/code] but could change in the future due to underlying zlib "
+"updates."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:293
+msgid ""
+"The default compression level for Zlib. Affects compressed scenes and "
+"resources. Higher levels result in smaller files at the cost of compression "
+"speed. Decompression speed is mostly unaffected by the compression level. "
+"[code]-1[/code] uses the default gzip compression level, which is identical "
+"to [code]6[/code] but could change in the future due to underlying zlib "
+"updates."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:296
+msgid ""
+"The default compression level for Zstandard. Affects compressed scenes and "
+"resources. Higher levels result in smaller files at the cost of compression "
+"speed. Decompression speed is mostly unaffected by the compression level."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:299
+msgid ""
+"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
+"distance matching[/url] in Zstandard."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:302
+msgid ""
+"Largest size limit (in power of 2) allowed when compressing using long-"
+"distance matching with Zstandard. Higher values can result in better "
+"compression, but will require more memory when compressing and decompressing."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:305
+msgid ""
+"If [code]true[/code], displays getters and setters in autocompletion results "
+"in the script editor. This setting is meant to be used when porting old "
+"projects (Godot 2), as using member variables is the preferred style from "
+"Godot 3 onwards."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:308
+msgid ""
+"If [code]true[/code], enables warnings when a constant is used as a function."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:311
+msgid ""
+"If [code]true[/code], enables warnings when deprecated keywords such as "
+"[code]slave[/code] are used."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:314
+msgid ""
+"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
+"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
+"GDScript warnings."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:317
+msgid ""
+"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
+"not generate warnings."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:320
+msgid ""
+"If [code]true[/code], enables warnings when a function is declared with the "
+"same name as a constant."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:323
+msgid ""
+"If [code]true[/code], enables warnings when a function is declared with the "
+"same name as a variable. This will turn into an error in a future version "
+"when first-class functions become supported in GDScript."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:326
+msgid ""
+"If [code]true[/code], enables warnings when a function assigned to a "
+"variable may yield and return a function state instead of a value."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:329
+msgid ""
+"If [code]true[/code], enables warnings when using a function as if it was a "
+"property."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:332
+msgid ""
+"If [code]true[/code], enables warnings when a ternary operator may emit "
+"values with incompatible types."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:335
+msgid ""
+"If [code]true[/code], enables warnings when dividing an integer by another "
+"integer (the decimal part will be discarded)."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:338
+msgid ""
+"If [code]true[/code], enables warnings when passing a floating-point value "
+"to a function that expects an integer (it will be converted and lose "
+"precision)."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:341
+msgid ""
+"If [code]true[/code], enables warnings when using a property as if it was a "
+"function."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:344
+msgid ""
+"If [code]true[/code], enables warnings when calling a function without using "
+"its return value (by assigning it to a variable or using it as a function "
+"argument). Such return values are sometimes used to denote possible errors "
+"using the [enum Error] enum."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:347
+msgid ""
+"If [code]true[/code], enables warnings when defining a local or subclass "
+"member variable that would shadow a variable at an upper level (such as a "
+"member variable)."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:350
+msgid ""
+"If [code]true[/code], enables warnings when calling an expression that has "
+"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
+"statement."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:353
+msgid ""
+"If [code]true[/code], enables warnings when calling a ternary expression "
+"that has no effect on the surrounding code, such as writing [code]42 if "
+"active else 0[/code] as a statement."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:356
+msgid ""
+"If [code]true[/code], all warnings will be reported as if they were errors."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:359
+msgid ""
+"If [code]true[/code], enables warnings when using a variable that wasn't "
+"previously assigned."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:362
+msgid ""
+"If [code]true[/code], enables warnings when assigning a variable using an "
+"assignment operator like [code]+=[/code] if the variable wasn't previously "
+"assigned."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:365
+msgid ""
+"If [code]true[/code], enables warnings when unreachable code is detected "
+"(such as after a [code]return[/code] statement that will always be executed)."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:368
+msgid ""
+"If [code]true[/code], enables warnings when using an expression whose type "
+"may not be compatible with the function parameter expected."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:371
+msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:374
+msgid ""
+"If [code]true[/code], enables warnings when calling a method whose presence "
+"is not guaranteed at compile-time in the class."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:377
+msgid ""
+"If [code]true[/code], enables warnings when accessing a property whose "
+"presence is not guaranteed at compile-time in the class."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:380
+msgid ""
+"If [code]true[/code], enables warnings when a function parameter is unused."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:383
+msgid ""
+"If [code]true[/code], enables warnings when a member variable is unused."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:386
+msgid "If [code]true[/code], enables warnings when a signal is unused."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:389
+msgid "If [code]true[/code], enables warnings when a local variable is unused."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:392
+msgid ""
+"If [code]true[/code], enables warnings when a variable is declared with the "
+"same name as a function. This will turn into an error in a future version "
+"when first-class functions become supported in GDScript."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:395
+msgid ""
+"If [code]true[/code], enables warnings when assigning the result of a "
+"function that returns [code]void[/code] to a variable."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:398
+msgid "Message to be displayed before the backtrace when the engine crashes."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:401
+msgid ""
+"Maximum number of frames per second allowed. The actual number of frames per "
+"second may still be below this value if the game is lagging.\n"
+"If [member display/window/vsync/use_vsync] is enabled, it takes precedence "
+"and the forced FPS number cannot exceed the monitor's refresh rate.\n"
+"This setting is therefore mostly relevant for lowering the maximum FPS below "
+"VSync, e.g. to perform non-real-time rendering of static frames, or test the "
+"project under lag conditions."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:406
+msgid "Maximum call stack allowed for debugging GDScript."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:409
+msgid "Maximum amount of functions per frame allowed when profiling."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:412
+msgid "Print frames per second to standard output every second."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:415
+msgid ""
+"Print more information to standard output when running. It displays "
+"information such as memory leaks, which scenes and resources are being "
+"loaded, etc."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:418
+msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:421
+msgid ""
+"Color of the contact points between collision shapes, visible when \"Visible "
+"Collision Shapes\" is enabled in the Debug menu."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:424
+msgid ""
+"Sets whether 2D physics will display collision outlines in game when "
+"\"Visible Collision Shapes\" is enabled in the Debug menu."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:427
+msgid ""
+"Maximum number of contact points between collision shapes to display when "
+"\"Visible Collision Shapes\" is enabled in the Debug menu."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:430
+msgid ""
+"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
+"enabled in the Debug menu."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:433
+msgid ""
+"Color of the disabled navigation geometry, visible when \"Visible Navigation"
+"\" is enabled in the Debug menu."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:436
+msgid ""
+"Color of the navigation geometry, visible when \"Visible Navigation\" is "
+"enabled in the Debug menu."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:439
+msgid "Custom image for the mouse cursor (limited to 256×256)."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:442
+msgid "Hotspot for the custom mouse cursor image."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:445
+msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:448
+msgid ""
+"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
+"platform. This setting has no effect on desktop Linux, as DPI-awareness "
+"fallbacks are not supported there."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:451
+msgid ""
+"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
+"the screensaver does not take over. Works on desktop and mobile platforms."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:454
+msgid ""
+"The default screen orientation to use on mobile devices.\n"
+"[b]Note:[/b] When set to a portrait orientation, this project setting does "
+"not flip the project resolution's width and height automatically. Instead, "
+"you have to set [member display/window/size/width] and [member display/"
+"window/size/height] accordingly."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:458
+msgid ""
+"If [code]true[/code], the home indicator is hidden automatically. This only "
+"affects iOS devices without a physical home button."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:461
+msgid ""
+"If [code]true[/code], allows per-pixel transparency for the window "
+"background. This affects performance, so leave it on [code]false[/code] "
+"unless you need it.\n"
+"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
+"[b]Note:[/b] This feature is implemented on HTML5, Linux, macOS, Windows, "
+"and Android."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:466
+msgid ""
+"Sets the window background to transparent when it starts.\n"
+"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
+"[b]Note:[/b] This feature is implemented on HTML5, Linux, macOS, Windows, "
+"and Android."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:471
+msgid ""
+"Forces the main window to be always on top.\n"
+"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:475
+msgid ""
+"Forces the main window to be borderless.\n"
+"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:479
+msgid ""
+"Sets the main window to full screen when the project starts. Note that this "
+"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
+"window is used to emulate fullscreen. On macOS, a new desktop is used to "
+"display the running project.\n"
+"Regardless of the platform, enabling fullscreen will change the window size "
+"to match the monitor's size. Therefore, make sure your project supports "
+"[url=https://docs.godotengine.org/en/3.4/tutorials/rendering/"
+"multiple_resolutions.html]multiple resolutions[/url] when enabling "
+"fullscreen mode.\n"
+"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:484
+msgid ""
+"Sets the game's main viewport height. On desktop platforms, this is the "
+"default window size. Stretch mode settings also use this as a reference when "
+"enabled."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:487
+msgid ""
+"Allows the window to be resizable by default.\n"
+"[b]Note:[/b] This setting is ignored on iOS and Android."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:491
+msgid ""
+"If greater than zero, overrides the window height when running the game. "
+"Useful for testing stretch modes."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:494
+msgid ""
+"If greater than zero, overrides the window width when running the game. "
+"Useful for testing stretch modes."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:497
+msgid ""
+"Sets the game's main viewport width. On desktop platforms, this is the "
+"default window size. Stretch mode settings also use this as a reference when "
+"enabled."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:500
+msgid ""
+"Specifies the tablet driver to use. If left empty, the default driver will "
+"be used."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:503
+msgid ""
+"If [code]true[/code], enables vertical synchronization. This eliminates "
+"tearing that may appear in moving scenes, at the cost of higher input "
+"latency and stuttering at lower framerates. If [code]false[/code], vertical "
+"synchronization will be disabled, however, many platforms will enforce it "
+"regardless (such as mobile platforms and HTML5)."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:506
+msgid ""
+"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
+"enables vertical synchronization via the operating system's window "
+"compositor when in windowed mode and the compositor is enabled. This will "
+"prevent stutter in certain situations. (Windows only.)\n"
+"[b]Note:[/b] This option is experimental and meant to alleviate stutter "
+"experienced by some users. However, some users have experienced a Vsync "
+"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:510
+msgid ""
+"The command-line arguments to append to Godot's own command line when "
+"running the project. This doesn't affect the editor itself.\n"
+"It is possible to make another executable run Godot by using the "
+"[code]%command%[/code] placeholder. The placeholder will be replaced with "
+"Godot's own command line. Program-specific arguments should be placed "
+"[i]before[/i] the placeholder, whereas Godot-specific arguments should be "
+"placed [i]after[/i] the placeholder.\n"
+"For example, this can be used to force the project to run on the dedicated "
+"GPU in a NVIDIA Optimus system on Linux:\n"
+"[codeblock]\n"
+"prime-run %command%\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:518
+msgid ""
+"Search path for project-specific script templates. Godot will search for "
+"script templates both in the editor-specific path and in this project-"
+"specific path."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:521
+msgid ""
+"Text-based file extensions to include in the script editor's \"Find in Files"
+"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
+"your scene files, especially if you use built-in scripts which are "
+"serialized in the scene files."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:524
+msgid ""
+"Default value for [member ScrollContainer.scroll_deadzone], which will be "
+"used for all [ScrollContainer]s unless overridden."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:527
+msgid ""
+"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
+"UWP to follow interface conventions."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:532
+msgid ""
+"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
+"code] or generic [code]tres[/code]/[code]res[/code] extension)."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:535
+msgid ""
+"Path to a custom [Font] resource to use as default for all GUI elements of "
+"the project."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:538
+msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:541
+msgid ""
+"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
+"(in milliseconds)."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:544
+msgid "Timer for detecting idle in [TextEdit] (in seconds)."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:547
+msgid "Default delay for tooltips (in seconds)."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:550
+msgid ""
+"Default [InputEventAction] to confirm a focused button, menu or list item, "
+"or validate input.\n"
+"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
+"necessary for the internal logic of several [Control]s. The events assigned "
+"to the action can however be modified."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:554
+msgid ""
+"Default [InputEventAction] to discard a modal or pending input.\n"
+"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
+"necessary for the internal logic of several [Control]s. The events assigned "
+"to the action can however be modified."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:558
+msgid ""
+"Default [InputEventAction] to move down in the UI.\n"
+"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
+"necessary for the internal logic of several [Control]s. The events assigned "
+"to the action can however be modified."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:562
+msgid ""
+"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
+"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
+"KEY_END] on typical desktop UI systems.\n"
+"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
+"necessary for the internal logic of several [Control]s. The events assigned "
+"to the action can however be modified."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:566
+msgid ""
+"Default [InputEventAction] to focus the next [Control] in the scene. The "
+"focus behavior can be configured via [member Control.focus_next].\n"
+"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
+"necessary for the internal logic of several [Control]s. The events assigned "
+"to the action can however be modified."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:570
+msgid ""
+"Default [InputEventAction] to focus the previous [Control] in the scene. The "
+"focus behavior can be configured via [member Control.focus_previous].\n"
+"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
+"necessary for the internal logic of several [Control]s. The events assigned "
+"to the action can however be modified."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:574
+msgid ""
+"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
+"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
+"KEY_HOME] on typical desktop UI systems.\n"
+"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
+"necessary for the internal logic of several [Control]s. The events assigned "
+"to the action can however be modified."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:578
+msgid ""
+"Default [InputEventAction] to move left in the UI.\n"
+"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
+"necessary for the internal logic of several [Control]s. The events assigned "
+"to the action can however be modified."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:582
+msgid ""
+"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
+"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
+"typical desktop UI systems.\n"
+"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
+"necessary for the internal logic of several [Control]s. The events assigned "
+"to the action can however be modified."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:586
+msgid ""
+"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
+"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
+"typical desktop UI systems.\n"
+"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
+"necessary for the internal logic of several [Control]s. The events assigned "
+"to the action can however be modified."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:590
+msgid ""
+"Default [InputEventAction] to move right in the UI.\n"
+"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
+"necessary for the internal logic of several [Control]s. The events assigned "
+"to the action can however be modified."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:594
+msgid ""
+"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
+"[ItemList] or a [Tree]).\n"
+"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
+"necessary for the internal logic of several [Control]s. The events assigned "
+"to the action can however be modified."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:598
+msgid ""
+"Default [InputEventAction] to move up in the UI.\n"
+"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
+"necessary for the internal logic of several [Control]s. The events assigned "
+"to the action can however be modified."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:602
+msgid ""
+"If [code]true[/code], key/touch/joystick events will be flushed just before "
+"every idle and physics frame.\n"
+"If [code]false[/code], such events will be flushed only once per idle frame, "
+"between iterations of the engine.\n"
+"Enabling this can greatly improve the responsiveness to input, specially in "
+"devices that need to run multiple physics frames per visible (idle) frame, "
+"because they can't run at the target frame rate.\n"
+"[b]Note:[/b] Currently implemented only in Android."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:608
+msgid ""
+"If [code]true[/code], sends mouse input events when tapping or swiping on "
+"the touchscreen."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:611
+msgid ""
+"If [code]true[/code], sends touch input events when clicking or dragging the "
+"mouse."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:614
+msgid "Default delay for touch events. This only affects iOS devices."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:617
+msgid "Optional name for the 2D physics layer 1."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:620
+msgid "Optional name for the 2D physics layer 10."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:623
+msgid "Optional name for the 2D physics layer 11."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:626
+msgid "Optional name for the 2D physics layer 12."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:629
+msgid "Optional name for the 2D physics layer 13."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:632
+msgid "Optional name for the 2D physics layer 14."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:635
+msgid "Optional name for the 2D physics layer 15."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:638
+msgid "Optional name for the 2D physics layer 16."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:641
+msgid "Optional name for the 2D physics layer 17."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:644
+msgid "Optional name for the 2D physics layer 18."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:647
+msgid "Optional name for the 2D physics layer 19."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:650
+msgid "Optional name for the 2D physics layer 2."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:653
+msgid "Optional name for the 2D physics layer 20."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:656
+msgid "Optional name for the 2D physics layer 21."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:659
+msgid "Optional name for the 2D physics layer 22."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:662
+msgid "Optional name for the 2D physics layer 23."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:665
+msgid "Optional name for the 2D physics layer 24."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:668
+msgid "Optional name for the 2D physics layer 25."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:671
+msgid "Optional name for the 2D physics layer 26."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:674
+msgid "Optional name for the 2D physics layer 27."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:677
+msgid "Optional name for the 2D physics layer 28."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:680
+msgid "Optional name for the 2D physics layer 29."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:683
+msgid "Optional name for the 2D physics layer 3."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:686
+msgid "Optional name for the 2D physics layer 30."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:689
+msgid "Optional name for the 2D physics layer 31."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:692
+msgid "Optional name for the 2D physics layer 32."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:695
+msgid "Optional name for the 2D physics layer 4."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:698
+msgid "Optional name for the 2D physics layer 5."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:701
+msgid "Optional name for the 2D physics layer 6."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:704
+msgid "Optional name for the 2D physics layer 7."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:707
+msgid "Optional name for the 2D physics layer 8."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:710
+msgid "Optional name for the 2D physics layer 9."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:713
+msgid "Optional name for the 2D render layer 1."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:716
+msgid "Optional name for the 2D render layer 10."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:719
+msgid "Optional name for the 2D render layer 11."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:722
+msgid "Optional name for the 2D render layer 12."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:725
+msgid "Optional name for the 2D render layer 13."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:728
+msgid "Optional name for the 2D render layer 14."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:731
+msgid "Optional name for the 2D render layer 15."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:734
+msgid "Optional name for the 2D render layer 16."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:737
+msgid "Optional name for the 2D render layer 17."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:740
+msgid "Optional name for the 2D render layer 18."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:743
+msgid "Optional name for the 2D render layer 19."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:746
+msgid "Optional name for the 2D render layer 2."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:749
+msgid "Optional name for the 2D render layer 20."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:752
+msgid "Optional name for the 2D render layer 3."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:755
+msgid "Optional name for the 2D render layer 4."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:758
+msgid "Optional name for the 2D render layer 5."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:761
+msgid "Optional name for the 2D render layer 6."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:764
+msgid "Optional name for the 2D render layer 7."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:767
+msgid "Optional name for the 2D render layer 8."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:770
+msgid "Optional name for the 2D render layer 9."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:773
+msgid "Optional name for the 3D physics layer 1."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:776
+msgid "Optional name for the 3D physics layer 10."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:779
+msgid "Optional name for the 3D physics layer 11."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:782
+msgid "Optional name for the 3D physics layer 12."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:785
+msgid "Optional name for the 3D physics layer 13."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:788
+msgid "Optional name for the 3D physics layer 14."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:791
+msgid "Optional name for the 3D physics layer 15."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:794
+msgid "Optional name for the 3D physics layer 16."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:797
+msgid "Optional name for the 3D physics layer 17."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:800
+msgid "Optional name for the 3D physics layer 18."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:803
+msgid "Optional name for the 3D physics layer 19."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:806
+msgid "Optional name for the 3D physics layer 2."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:809
+msgid "Optional name for the 3D physics layer 20."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:812
+msgid "Optional name for the 3D physics layer 21."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:815
+msgid "Optional name for the 3D physics layer 22."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:818
+msgid "Optional name for the 3D physics layer 23."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:821
+msgid "Optional name for the 3D physics layer 24."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:824
+msgid "Optional name for the 3D physics layer 25."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:827
+msgid "Optional name for the 3D physics layer 26."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:830
+msgid "Optional name for the 3D physics layer 27."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:833
+msgid "Optional name for the 3D physics layer 28."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:836
+msgid "Optional name for the 3D physics layer 29."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:839
+msgid "Optional name for the 3D physics layer 3."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:842
+msgid "Optional name for the 3D physics layer 30."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:845
+msgid "Optional name for the 3D physics layer 31."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:848
+msgid "Optional name for the 3D physics layer 32."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:851
+msgid "Optional name for the 3D physics layer 4."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:854
+msgid "Optional name for the 3D physics layer 5."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:857
+msgid "Optional name for the 3D physics layer 6."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:860
+msgid "Optional name for the 3D physics layer 7."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:863
+msgid "Optional name for the 3D physics layer 8."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:866
+msgid "Optional name for the 3D physics layer 9."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:869
+msgid "Optional name for the 3D render layer 1."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:872
+msgid "Optional name for the 3D render layer 10."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:875
+msgid "Optional name for the 3D render layer 11."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:878
+msgid "Optional name for the 3D render layer 12."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:881
+msgid "Optional name for the 3D render layer 13."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:884
+msgid "Optional name for the 3D render layer 14"
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:887
+msgid "Optional name for the 3D render layer 15."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:890
+msgid "Optional name for the 3D render layer 16."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:893
+msgid "Optional name for the 3D render layer 17."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:896
+msgid "Optional name for the 3D render layer 18."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:899
+msgid "Optional name for the 3D render layer 19."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:902
+msgid "Optional name for the 3D render layer 2."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:905
+msgid "Optional name for the 3D render layer 20."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:908
+msgid "Optional name for the 3D render layer 3."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:911
+msgid "Optional name for the 3D render layer 4."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:914
+msgid "Optional name for the 3D render layer 5."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:917
+msgid "Optional name for the 3D render layer 6."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:920
+msgid "Optional name for the 3D render layer 7."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:923
+msgid "Optional name for the 3D render layer 8."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:926
+msgid "Optional name for the 3D render layer 9."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:929
+msgid ""
+"The locale to fall back to if a translation isn't available in a given "
+"language. If left empty, [code]en[/code] (English) will be used."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:932
+msgid ""
+"If non-empty, this locale will be used when running the project from the "
+"editor."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:935
+msgid "If [code]true[/code], logs all output to files."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:938
+msgid ""
+"Desktop override for [member logging/file_logging/enable_file_logging], as "
+"log files are not readily accessible on mobile/Web platforms."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:941
+msgid ""
+"Path to logs within the project. Using an [code]user://[/code] path is "
+"recommended."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:944
+msgid "Specifies the maximum amount of log files allowed (used for rotation)."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:949
+msgid ""
+"Godot uses a message queue to defer some function calls. If you run out of "
+"space on it (you will see an error), you can increase the size here."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:952
+msgid ""
+"This is used by servers when used in multi-threading mode (servers and "
+"visual). RIDs are preallocated to avoid stalling the server requesting them "
+"on threads. If servers get stalled too often when loading resources in a "
+"thread, increase this number."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:955
+msgid ""
+"Maximum amount of characters allowed to send as output from the debugger. "
+"Over this value, content is dropped. This helps not to stall the debugger "
+"connection."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:958
+msgid ""
+"Maximum number of errors allowed to be sent as output from the debugger. "
+"Over this value, content is dropped. This helps not to stall the debugger "
+"connection."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:961
+msgid ""
+"Maximum amount of messages allowed to send as output from the debugger. Over "
+"this value, content is dropped. This helps not to stall the debugger "
+"connection."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:964
+msgid ""
+"Maximum number of warnings allowed to be sent as output from the debugger. "
+"Over this value, content is dropped. This helps not to stall the debugger "
+"connection."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:967
+msgid ""
+"Default size of packet peer stream for deserializing Godot data (in bytes, "
+"specified as a power of two). The default value [code]16[/code] is equal to "
+"65,536 bytes. Over this size, data is dropped."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:970
+msgid "Timeout (in seconds) for connection attempts using TCP."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:973
+msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:976
+msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:979
+msgid "Maximum number of concurrent input packets for [WebSocketClient]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:982
+msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:985
+msgid "Maximum number of concurrent output packets for [WebSocketClient]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:988
+msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:991
+msgid "Maximum number of concurrent input packets for [WebSocketServer]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:994
+msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:997
+msgid "Maximum number of concurrent output packets for [WebSocketServer]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1000
+msgid ""
+"Amount of read ahead used by remote filesystem. Higher values decrease the "
+"effects of latency at the cost of higher bandwidth usage."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1003
+msgid "Page size used by remote filesystem (in bytes)."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1006
+msgid ""
+"The CA certificates bundle to use for SSL connections. If this is set to a "
+"non-empty value, this will [i]override[/i] Godot's default [url=https://"
+"github.com/godotengine/godot/blob/master/thirdparty/certs/ca-certificates."
+"crt]Mozilla certificate bundle[/url]. If left empty, the default certificate "
+"bundle will be used.\n"
+"If in doubt, leave this setting empty."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1010
+msgid ""
+"When creating node names automatically, set the type of casing in this "
+"project. This is mostly an editor setting."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1013
+msgid ""
+"What to use to separate node name from number. This is mostly an editor "
+"setting."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1016
+msgid ""
+"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
+"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
+"enabled."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1020
+msgid ""
+"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
+"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
+"enabled."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1024
+msgid ""
+"The default angular damp in 2D.\n"
+"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
+"At value [code]0[/code] objects will keep moving with the same velocity. "
+"Values greater than [code]1[/code] will aim to reduce the velocity to "
+"[code]0[/code] in less than a second e.g. a value of [code]2[/code] will aim "
+"to reduce the velocity to [code]0[/code] in half a second. A value equal to "
+"or greater than the physics frame rate ([member ProjectSettings.physics/"
+"common/physics_fps], [code]60[/code] by default) will bring the object to a "
+"stop in one iteration."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1028
+msgid ""
+"The default gravity strength in 2D (in pixels per second squared).\n"
+"[b]Note:[/b] This property is only read when the project starts. To change "
+"the default gravity at runtime, use the following code sample:\n"
+"[codeblock]\n"
+"# Set the default gravity strength to 98.\n"
+"Physics2DServer.area_set_param(get_viewport().find_world_2d().get_space(), "
+"Physics2DServer.AREA_PARAM_GRAVITY, 98)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1036
+msgid ""
+"The default gravity direction in 2D.\n"
+"[b]Note:[/b] This property is only read when the project starts. To change "
+"the default gravity vector at runtime, use the following code sample:\n"
+"[codeblock]\n"
+"# Set the default gravity direction to `Vector2(0, 1)`.\n"
+"Physics2DServer.area_set_param(get_viewport().find_world_2d().get_space(), "
+"Physics2DServer.AREA_PARAM_GRAVITY_VECTOR, Vector2(0, 1))\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1044
+msgid ""
+"The default linear damp in 2D.\n"
+"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
+"At value [code]0[/code] objects will keep moving with the same velocity. "
+"Values greater than [code]1[/code] will aim to reduce the velocity to "
+"[code]0[/code] in less than a second e.g. a value of [code]2[/code] will aim "
+"to reduce the velocity to [code]0[/code] in half a second. A value equal to "
+"or greater than the physics frame rate ([member ProjectSettings.physics/"
+"common/physics_fps], [code]60[/code] by default) will bring the object to a "
+"stop in one iteration."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1048
+msgid ""
+"Threshold defining the surface size that constitutes a large object with "
+"regard to cells in the broad-phase 2D hash grid algorithm.\n"
+"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
+"enabled."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1052
+msgid ""
+"Sets which physics engine to use for 2D physics.\n"
+"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
+"alternative 2D physics server implemented."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1056
+msgid ""
+"Threshold angular velocity under which a 2D physics body will be considered "
+"inactive. See [constant Physics2DServer."
+"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1059
+msgid ""
+"Threshold linear velocity under which a 2D physics body will be considered "
+"inactive. See [constant Physics2DServer."
+"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1062
+msgid ""
+"Sets whether physics is run on the main thread or a separate one. Running "
+"the server on a thread increases performance, but restricts API access to "
+"only physics process.\n"
+"[b]Warning:[/b] As of Godot 3.2, there are mixed reports about the use of a "
+"Multi-Threaded thread model for physics. Be sure to assess whether it does "
+"give you extra performance and no regressions when using it."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1066
+msgid ""
+"Time (in seconds) of inactivity before which a 2D physics body will put to "
+"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1069
+msgid ""
+"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
+"physics spatial partitioning. This may give better performance."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1072
+msgid ""
+"Sets whether the 3D physics world will be created with support for "
+"[SoftBody] physics. Only applies to the Bullet physics engine."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1075
+msgid ""
+"The default angular damp in 3D.\n"
+"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
+"At value [code]0[/code] objects will keep moving with the same velocity. "
+"Values greater than [code]1[/code] will aim to reduce the velocity to "
+"[code]0[/code] in less than a second e.g. a value of [code]2[/code] will aim "
+"to reduce the velocity to [code]0[/code] in half a second. A value equal to "
+"or greater than the physics frame rate ([member ProjectSettings.physics/"
+"common/physics_fps], [code]60[/code] by default) will bring the object to a "
+"stop in one iteration."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1079
+msgid ""
+"The default gravity strength in 3D (in meters per second squared).\n"
+"[b]Note:[/b] This property is only read when the project starts. To change "
+"the default gravity at runtime, use the following code sample:\n"
+"[codeblock]\n"
+"# Set the default gravity strength to 9.8.\n"
+"PhysicsServer.area_set_param(get_viewport().find_world().get_space(), "
+"PhysicsServer.AREA_PARAM_GRAVITY, 9.8)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1087
+msgid ""
+"The default gravity direction in 3D.\n"
+"[b]Note:[/b] This property is only read when the project starts. To change "
+"the default gravity vector at runtime, use the following code sample:\n"
+"[codeblock]\n"
+"# Set the default gravity direction to `Vector3(0, -1, 0)`.\n"
+"PhysicsServer.area_set_param(get_viewport().find_world().get_space(), "
+"PhysicsServer.AREA_PARAM_GRAVITY_VECTOR, Vector3(0, -1, 0))\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1095
+msgid ""
+"The default linear damp in 3D.\n"
+"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
+"At value [code]0[/code] objects will keep moving with the same velocity. "
+"Values greater than [code]1[/code] will aim to reduce the velocity to "
+"[code]0[/code] in less than a second e.g. a value of [code]2[/code] will aim "
+"to reduce the velocity to [code]0[/code] in half a second. A value equal to "
+"or greater than the physics frame rate ([member ProjectSettings.physics/"
+"common/physics_fps], [code]60[/code] by default) will bring the object to a "
+"stop in one iteration."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1099
+msgid ""
+"Enables the use of bounding volume hierarchy instead of octree for 3D "
+"physics spatial partitioning. This may give better performance."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1102
+msgid ""
+"Sets which physics engine to use for 3D physics.\n"
+"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
+"physics engine. The \"GodotPhysics\" engine is still supported as an "
+"alternative."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1106
+msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1109
+msgid ""
+"If enabled, 2D and 3D physics picking behaves this way in relation to "
+"pause:\n"
+"- When pause is started, every collision object that is hovered or captured "
+"(3D only) is released from that condition, getting the relevant mouse-exit "
+"callback, unless its pause mode makes it immune to pause.\n"
+"- During pause, picking only considers collision objects immune to pause, "
+"sending input events and enter/exit callbacks to them as expected.\n"
+"If disabled, the legacy behavior is used, which consists in queuing the "
+"picking input events during pause (so nodes won't get them) and flushing "
+"that queue on resume, against the state of the 2D/3D world at that point."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1115
+msgid ""
+"The number of fixed iterations per second. This controls how often physics "
+"simulation and [method Node._physics_process] methods are run.\n"
+"[b]Note:[/b] This property is only read when the project starts. To change "
+"the physics FPS at runtime, set [member Engine.iterations_per_second] "
+"instead."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1119
+msgid ""
+"Controls how much physics ticks are synchronized with real time. For 0 or "
+"less, the ticks are synchronized. Such values are recommended for network "
+"games, where clock synchronization matters. Higher values cause higher "
+"deviation of in-game clock and real clock, but allows smoothing out "
+"framerate jitters. The default value of 0.5 should be fine for most; values "
+"above 2 could cause the game to react to dropped frames with a noticeable "
+"delay and are not recommended.\n"
+"[b]Note:[/b] For best results, when using a custom physics interpolation "
+"solution, the physics jitter fix should be disabled by setting [member "
+"physics/common/physics_jitter_fix] to [code]0[/code].\n"
+"[b]Note:[/b] This property is only read when the project starts. To change "
+"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1124
+msgid ""
+"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
+"uploading batching data. This may not be necessary but can be used for "
+"safety.\n"
+"[b]Note:[/b] Use with care. You are advised to leave this as default for "
+"exports. A non-default setting that works better on your machine may "
+"adversely affect performance for end users."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1128
+msgid ""
+"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
+"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
+"flag.\n"
+"[b]Note:[/b] Use with care. You are advised to leave this as default for "
+"exports. A non-default setting that works better on your machine may "
+"adversely affect performance for end users."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1132
+msgid ""
+"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
+"[code]glBufferData[/code] is called with NULL data and the full buffer size "
+"prior to uploading new data. This can be important to avoid stalling on some "
+"hardware.\n"
+"[b]Note:[/b] Use with care. You are advised to leave this as default for "
+"exports. A non-default setting that works better on your machine may "
+"adversely affect performance for end users."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1136
+msgid ""
+"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
+"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
+"flag.\n"
+"[b]Note:[/b] Use with care. You are advised to leave this as default for "
+"exports. A non-default setting that works better on your machine may "
+"adversely affect performance for end users."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1140
+msgid ""
+"Choose between fixed mode where corner scalings are preserved matching the "
+"artwork, and scaling mode.\n"
+"Not available in GLES3 when [member rendering/batching/options/use_batching] "
+"is off."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1144
+msgid ""
+"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
+"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
+"[url=https://github.com/godotengine/godot/issues/9913]GitHub issue 9913[/"
+"url] for details.\n"
+"If [code]true[/code], this option enables a \"safe\" code path for such "
+"NVIDIA GPUs at the cost of performance. This option affects GLES2 and GLES3 "
+"rendering, but only on desktop platforms."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1148
+msgid ""
+"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
+"This provides greater compatibility with a wide range of hardware, and also "
+"may be faster in some circumstances.\n"
+"Currently only available when [member rendering/batching/options/"
+"use_batching] is active.\n"
+"[b]Note:[/b] Antialiased software skinned polys are not supported, and will "
+"be rendered without antialiasing.\n"
+"[b]Note:[/b] Custom shaders that use the [code]VERTEX[/code] built-in "
+"operate with [code]VERTEX[/code] position [i]after[/i] skinning, whereas "
+"with hardware skinning, [code]VERTEX[/code] is the position [i]before[/i] "
+"skinning."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1154
+msgid ""
+"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
+"May help in some pixel art styles.\n"
+"This snapping is performed on the GPU in the vertex shader.\n"
+"Consider using the project setting [member rendering/batching/precision/"
+"uv_contract] to prevent artifacts."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1159
+msgid ""
+"When batching is on, this regularly prints a frame diagnosis log. Note that "
+"this will degrade performance."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1162
+msgid ""
+"[b]Experimental.[/b] For regression testing against the old renderer. If "
+"this is switched on, and [code]use_batching[/code] is set, the renderer will "
+"swap alternately between using the old renderer, and the batched renderer, "
+"on each frame. This makes it easy to identify visual differences. "
+"Performance will be degraded."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1165
+msgid ""
+"Lights have the potential to prevent joining items, and break many of the "
+"performance benefits of batching. This setting enables some complex logic to "
+"allow joining items if their lighting is similar, and overlap tests pass. "
+"This can significantly improve performance in some games. Set to 0 to switch "
+"off. With large values the cost of overlap tests may lead to diminishing "
+"returns."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1168
+msgid ""
+"Sets the proportion of the total screen area (in pixels) that must be saved "
+"by a scissor operation in order to activate light scissoring. This can "
+"prevent parts of items being rendered outside the light area. Lower values "
+"scissor more aggressively. A value of 1 scissors none of the items, a value "
+"of 0 scissors every item. The power of 4 of the value is used, in order to "
+"emphasize the lower range, and multiplied by the total screen area in pixels "
+"to give the threshold. This can reduce fill rate requirements in scenes with "
+"a lot of lighting."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1171
+msgid ""
+"Enabling this setting uses the legacy method to draw batches containing only "
+"one rect. The legacy method is faster (approx twice as fast), but can cause "
+"flicker on some systems. In order to directly compare performance with the "
+"non-batching renderer you can set this to true, but it is recommended to "
+"turn this off unless you can guarantee your target hardware will work with "
+"this method."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1174
+msgid ""
+"Turns 2D batching on and off. Batching increases performance by reducing the "
+"amount of graphics API drawcalls."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1177
+msgid "Switches on 2D batching within the editor."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1180
+msgid ""
+"Size of buffer reserved for batched vertices. Larger size enables larger "
+"batches, but there are diminishing returns for the memory used. This should "
+"only have a minor effect on performance."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1183
+msgid ""
+"Including color in the vertex format has a cost, however, not including "
+"color prevents batching across color changes. This threshold determines the "
+"ratio of [code]number of vertex color changes / total number of vertices[/"
+"code] above which vertices will be translated to colored format. A value of "
+"0 will always use colored vertices, 1 will never use colored vertices."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1186
+msgid ""
+"In certain circumstances, the batcher can reorder items in order to better "
+"join them. This may result in better performance. An overlap test is needed "
+"however for each item lookahead, so there is a trade off, with diminishing "
+"returns. If you are getting no benefit, setting this to 0 will switch it off."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1189
+msgid ""
+"Sets the number of commands to lookahead to determine whether to batch "
+"render items. A value of 1 can join items consisting of single commands, 0 "
+"turns off joining. Higher values are in theory more likely to join, however "
+"this has diminishing returns and has a runtime cost so a small value is "
+"recommended."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1192
+msgid ""
+"On some platforms (especially mobile), precision issues in shaders can lead "
+"to reading 1 texel outside of bounds, particularly where rects are scaled. "
+"This can particularly lead to border artifacts around tiles in tilemaps.\n"
+"This adjustment corrects for this by making a small contraction to the UV "
+"coordinates used. Note that this can result in a slight squashing of border "
+"texels."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1196
+msgid ""
+"The amount of UV contraction. This figure is divided by 1000000, and is a "
+"proportion of the total texture dimensions, where the width and height are "
+"both ranged from 0.0 to 1.0.\n"
+"Use the default unless correcting for a problem on particular hardware."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1200
+msgid ""
+"Amount of light samples taken when using [constant BakedLightmap."
+"BAKE_QUALITY_HIGH]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1203
+msgid ""
+"Amount of light samples taken when using [constant BakedLightmap."
+"BAKE_QUALITY_LOW]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1206
+msgid ""
+"Amount of light samples taken when using [constant BakedLightmap."
+"BAKE_QUALITY_MEDIUM]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1209
+msgid ""
+"Amount of light samples taken when using [constant BakedLightmap."
+"BAKE_QUALITY_ULTRA]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1212
+msgid ""
+"Default background clear color. Overridable per [Viewport] using its "
+"[Environment]. See [member Environment.background_mode] and [member "
+"Environment.background_color] in particular. To change this default color "
+"programmatically, use [method VisualServer.set_default_clear_color]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1215
+msgid ""
+"[Environment] that will be used as a fallback environment in case a scene "
+"does not specify its own environment. The default environment is loaded in "
+"at scene load time regardless of whether you have set an environment or not. "
+"If you do not rely on the fallback environment, it is best to delete "
+"[code]default_env.tres[/code], or to specify a different default environment "
+"here."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1218
+msgid ""
+"The use of half-float vertex compression may be producing rendering errors "
+"on some platforms (especially iOS). These have been seen particularly in "
+"particles. Disabling half-float may resolve these problems."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1221
+msgid ""
+"iOS specific override for [member rendering/gles2/compatibility/"
+"disable_half_float], due to poor support for half-float vertex compression "
+"on many devices."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1224
+msgid ""
+"If [code]true[/code] and available on the target Android device, enables "
+"high floating point precision for all shader computations in GLES2.\n"
+"[b]Warning:[/b] High floating point precision can be extremely slow on older "
+"devices and is often not available at all. Use with caution."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1228
+msgid ""
+"Max buffer size for blend shapes. Any blend shape bigger than this will not "
+"work."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1231
+msgid ""
+"Max buffer size for drawing polygons. Any polygon bigger than this will not "
+"work."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1234
+msgid ""
+"Max index buffer size for drawing polygons. Any polygon bigger than this "
+"will not work."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1237
+msgid ""
+"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
+"Nodes using more than this size will not work."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1240
+msgid ""
+"Max number of lights renderable per object. This is further limited by "
+"hardware support. Most devices only support 409 lights, while many devices "
+"(especially mobile) only support 102. Setting this low will slightly reduce "
+"memory usage and may decrease shader compile times."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1243
+msgid ""
+"Max amount of elements renderable in a frame. If more elements than this are "
+"visible per frame, they will not be drawn. Keep in mind elements refer to "
+"mesh surfaces and not meshes themselves. Setting this low will slightly "
+"reduce memory usage and may decrease shader compile times, particularly on "
+"web. For most uses, the default value is suitable, but consider lowering as "
+"much as possible on web export."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1246
+msgid ""
+"Max number of lights renderable in a frame. If more lights than this number "
+"are used, they will be ignored. Setting this low will slightly reduce memory "
+"usage and may decrease shader compile times, particularly on web. For most "
+"uses, the default value is suitable, but consider lowering as much as "
+"possible on web export."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1249
+msgid ""
+"Max number of reflection probes renderable in a frame. If more reflection "
+"probes than this number are used, they will be ignored. Setting this low "
+"will slightly reduce memory usage and may decrease shader compile times, "
+"particularly on web. For most uses, the default value is suitable, but "
+"consider lowering as much as possible on web export."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1252
+msgid ""
+"Shaders have a time variable that constantly increases. At some point, it "
+"needs to be rolled back to zero to avoid precision errors on shader "
+"animations. This setting specifies when (in seconds)."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1255
+msgid ""
+"If [code]true[/code], the texture importer will import lossless textures "
+"using the PNG format. Otherwise, it will default to using WebP."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1258
+msgid ""
+"The default compression level for lossless WebP. Higher levels result in "
+"smaller files at the cost of compression speed. Decompression speed is "
+"mostly unaffected by the compression level. Supported values are 0 to 9. "
+"Note that compression levels above 6 are very slow and offer very little "
+"savings."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1261
+msgid ""
+"On import, mesh vertex data will be split into two streams within a single "
+"vertex buffer, one for position data and the other for interleaved "
+"attributes data. Recommended to be enabled if targeting mobile devices. "
+"Requires manual reimport of meshes after toggling."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1264
+msgid ""
+"Determines the maximum number of sphere occluders that will be used at any "
+"one time.\n"
+"Although you can have many occluders in a scene, each frame the system will "
+"choose from these the most relevant based on a screen space metric, in order "
+"to give the best overall performance."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1268
+msgid ""
+"The default convention is for portal normals to point outward (face outward) "
+"from the source room.\n"
+"If you accidentally build your level with portals facing the wrong way, this "
+"setting can fix the problem.\n"
+"It will flip named portal meshes (i.e. [code]-portal[/code]) on the initial "
+"convertion to [Portal] nodes."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1273
+msgid ""
+"Show conversion logs.\n"
+"[b]Note:[/b] This will automatically be disabled in exports."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1277
+msgid ""
+"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
+"code]. If [code]false[/code], they will be sent as [code]notifications[/"
+"code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1280
+msgid ""
+"If enabled, while merging meshes, the system will also attempt to remove "
+"[Spatial] nodes that no longer have any children.\n"
+"Reducing the number of [Node]s in the scene tree can make traversal more "
+"efficient, but can be switched off in case you wish to use empty [Spatial]s "
+"for markers or some other purpose."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1284
+msgid ""
+"Show logs during PVS generation.\n"
+"[b]Note:[/b] This will automatically be disabled in exports."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1288
+msgid ""
+"Uses a simplified method of generating PVS (potentially visible set) data. "
+"The results may not be accurate where more than one portal join adjacent "
+"rooms.\n"
+"[b]Note:[/b] Generally you should only use this option if you encounter bugs "
+"when it is set to [code]false[/code], i.e. there are problems with the "
+"default method."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1292
+msgid ""
+"If [code]true[/code], allocates the main framebuffer with high dynamic "
+"range. High dynamic range allows the use of [Color] values greater than 1.\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1296
+msgid ""
+"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
+"devices, due to performance concerns or driver support."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1299
+msgid ""
+"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
+"architecture already does this."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1302
+msgid ""
+"If [code]true[/code], performs a previous depth pass before rendering "
+"materials. This increases performance in scenes with high overdraw, when "
+"complex materials and lighting are used."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1305
+msgid ""
+"The directional shadow's size in pixels. Higher values will result in "
+"sharper shadows, at the cost of performance. The value will be rounded up to "
+"the nearest power of 2."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1308
+msgid ""
+"Lower-end override for [member rendering/quality/directional_shadow/size] on "
+"mobile devices, due to performance concerns or driver support."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1311
+msgid ""
+"The video driver to use (\"GLES2\" or \"GLES3\").\n"
+"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
+"video-driver[/code] command line argument, or by the [member rendering/"
+"quality/driver/fallback_to_gles2] option if the target system does not "
+"support GLES3 and falls back to GLES2. In such cases, this property is not "
+"updated, so use [method OS.get_current_video_driver] to query it at run-time."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1315
+msgid ""
+"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
+"driver is not supported.\n"
+"[b]Note:[/b] The two video drivers are not drop-in replacements for each "
+"other, so a game designed for GLES3 might not work properly when falling "
+"back to GLES2. In particular, some features of the GLES3 backend are not "
+"available in GLES2. Enabling this setting also means that both ETC and ETC2 "
+"VRAM-compressed textures will be exported on Android and iOS, increasing the "
+"data pack's size."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1319
+msgid ""
+"Maximum anisotropic filter level used for textures with anisotropy enabled. "
+"Higher values will result in sharper textures when viewed from oblique "
+"angles, at the cost of performance. Only power-of-two values are valid (2, "
+"4, 8, 16)."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1322
+msgid ""
+"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
+"around the edges of polygons. A higher MSAA value results in smoother edges "
+"but can be significantly slower on some hardware.\n"
+"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1326
+msgid ""
+"If set to a value greater than [code]0.0[/code], contrast-adaptive "
+"sharpening will be applied to the 3D viewport. This has a low performance "
+"cost and can be used to recover some of the sharpness lost from using FXAA. "
+"Values around [code]0.5[/code] generally give the best results. See also "
+"[member rendering/quality/filters/use_fxaa]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1329
+msgid ""
+"If [code]true[/code], uses a fast post-processing filter to make banding "
+"significantly less visible. In some cases, debanding may introduce a "
+"slightly noticeable dithering pattern. It's recommended to enable debanding "
+"only when actually needed since the dithering pattern will make lossless-"
+"compressed screenshots larger.\n"
+"[b]Note:[/b] Only available on the GLES3 backend. [member rendering/quality/"
+"depth/hdr] must also be [code]true[/code] for debanding to be effective.\n"
+"[b]Note:[/b] There are known issues with debanding breaking rendering on "
+"mobile platforms. Due to this, it is recommended to leave this option "
+"disabled when targeting mobile platforms."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1334
+msgid ""
+"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
+"antialiasing method, which is fast but will make the image look blurry, "
+"especially at lower resolutions. It can still work relatively well at large "
+"resolutions such as 1440p and 4K. Some of the lost sharpness can be "
+"recovered by enabling contrast-adaptive sharpening (see [member rendering/"
+"quality/filters/sharpen_intensity])."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1337
+msgid ""
+"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
+"mipmaps (also called \"bilinear filtering\"), which will result in visible "
+"seams appearing between mipmap stages. This may increase performance in "
+"mobile as less memory bandwidth is used. If [code]false[/code], linear "
+"mipmap filtering (also called \"trilinear filtering\") is used."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1340
+msgid ""
+"Strategy used for framebuffer allocation. The simpler it is, the less "
+"resources it uses (but the less features it supports). If set to \"2D "
+"Without Sampling\" or \"3D Without Effects\", sample buffers will not be "
+"allocated. This means [code]SCREEN_TEXTURE[/code] and [code]DEPTH_TEXTURE[/"
+"code] will not be available in shaders and post-processing effects will not "
+"be available in the [Environment]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1343
+msgid ""
+"Lower-end override for [member rendering/quality/intended_usage/"
+"framebuffer_allocation] on mobile devices, due to performance concerns or "
+"driver support."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1346
+msgid ""
+"Enable usage of bicubic sampling in baked lightmaps. This results in "
+"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
+"changes to this setting will only be applied upon restarting the application."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1349
+msgid ""
+"Lower-end override for [member rendering/quality/lightmapping/"
+"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1352
+msgid ""
+"Size of the atlas used by reflection probes. A larger size can result in "
+"higher visual quality, while a smaller size will be faster and take up less "
+"memory."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1355
+msgid ""
+"Number of subdivisions to use for the reflection atlas. A higher number "
+"lowers the quality of each atlas, but allows you to use more."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1358
+msgid ""
+"If [code]true[/code], uses a high amount of samples to create blurred "
+"variants of reflection probes and panorama backgrounds (sky). Those blurred "
+"variants are used by rough materials."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1361
+msgid ""
+"Lower-end override for [member rendering/quality/reflections/"
+"high_quality_ggx] on mobile devices, due to performance concerns or driver "
+"support."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1364
+msgid ""
+"Limits the size of the irradiance map which is normally determined by "
+"[member Sky.radiance_size]. A higher size results in a higher quality "
+"irradiance map similarly to [member rendering/quality/reflections/"
+"high_quality_ggx]. Use a higher value when using high-frequency HDRI maps, "
+"otherwise keep this as low as possible.\n"
+"[b]Note:[/b] Low and mid range hardware do not support complex irradiance "
+"maps well and may crash if this is set too high."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1368
+msgid ""
+"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
+"probes and panorama backgrounds (sky). This reduces jitter noise on "
+"reflections, but costs more performance and memory."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1371
+msgid ""
+"Lower-end override for [member rendering/quality/reflections/"
+"texture_array_reflections] on mobile devices, due to performance concerns or "
+"driver support."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1374
+msgid ""
+"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
+"blurred reflections instead of the GGX model."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1377
+msgid ""
+"Lower-end override for [member rendering/quality/shading/"
+"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
+"driver support."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1380
+msgid ""
+"If [code]true[/code], uses faster but lower-quality Lambert material "
+"lighting model instead of Burley."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1383
+msgid ""
+"Lower-end override for [member rendering/quality/shading/"
+"force_lambert_over_burley] on mobile devices, due to performance concerns or "
+"driver support."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1386
+msgid ""
+"If [code]true[/code], forces vertex shading for all rendering. This can "
+"increase performance a lot, but also reduces quality immensely. Can be used "
+"to optimize performance on low-end mobile devices."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1389
+msgid ""
+"Lower-end override for [member rendering/quality/shading/"
+"force_vertex_shading] on mobile devices, due to performance concerns or "
+"driver support."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1392
+msgid ""
+"If [code]true[/code], enables new physical light attenuation for "
+"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
+"appearance with a very small performance cost. When physical light "
+"attenuation is enabled, lights will appear to be darker as a result of the "
+"new attenuation formula. This can be compensated by adjusting the lights' "
+"energy or attenuation values.\n"
+"Changes to this setting will only be applied upon restarting the application."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1396
+msgid ""
+"Size for cubemap into which the shadow is rendered before being copied into "
+"the shadow atlas. A higher number can result in higher resolution shadows "
+"when used with a higher [member rendering/quality/shadow_atlas/size]. "
+"Setting higher than a quarter of the [member rendering/quality/shadow_atlas/"
+"size] will not result in a perceptible increase in visual quality."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
+msgid ""
+"Subdivision quadrant size for shadow mapping. See shadow mapping "
+"documentation."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1411
+msgid ""
+"Size for shadow atlas (used for OmniLights and SpotLights). See "
+"documentation."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1414
+msgid ""
+"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
+"mobile devices, due to performance concerns or driver support."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1417
+msgid ""
+"Shadow filter mode. Higher-quality settings result in smoother shadows that "
+"flicker less when moving. \"Disabled\" is the fastest option, but also has "
+"the lowest quality. \"PCF5\" is smoother but is also slower. \"PCF13\" is "
+"the smoothest option, but is also the slowest.\n"
+"[b]Note:[/b] When using the GLES2 backend, the \"PCF13\" option actually "
+"uses 16 samples to emulate linear filtering in the shader. This results in a "
+"shadow appearance similar to the one produced by the GLES3 backend."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1421
+msgid ""
+"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
+"mobile devices, due to performance concerns or driver support."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1424
+msgid ""
+"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
+"GLES2 and GLES3).\n"
+"See also [member rendering/quality/skinning/software_skinning_fallback]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1428
+msgid ""
+"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
+"doesn't support the default GPU skinning process with GLES2.\n"
+"If [code]false[/code], an alternative skinning process on the GPU is used in "
+"this case (slower in most cases).\n"
+"See also [member rendering/quality/skinning/force_software_skinning].\n"
+"[b]Note:[/b] When the software skinning fallback is triggered, custom vertex "
+"shaders will behave in a different way, because the bone transform will be "
+"already applied to the modelview matrix."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1434
+msgid ""
+"The rendering octree balance can be changed to favor smaller ([code]0[/"
+"code]), or larger ([code]1[/code]) branches.\n"
+"Larger branches can increase performance significantly in some projects."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1438
+msgid ""
+"Enables the use of bounding volume hierarchy instead of octree for rendering "
+"spatial partitioning. This may give better performance."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1441
+msgid ""
+"Improves quality of subsurface scattering, but cost significantly increases."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1444
+msgid "Quality setting for subsurface scattering (samples taken)."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1447
+msgid "Max radius used for subsurface scattering samples."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1450
+msgid ""
+"Weight subsurface scattering samples. Helps to avoid reading samples from "
+"unrelated parts of the screen."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1453
+msgid ""
+"Use high-quality voxel cone tracing. This results in better-looking "
+"reflections, but is much more expensive on the GPU."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1456
+msgid ""
+"Thread model for rendering. Rendering on a thread can vastly improve "
+"performance, but synchronizing to the main thread can cause a bit more "
+"jitter."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1459
+msgid ""
+"If [code]true[/code], a thread safe version of BVH (bounding volume "
+"hierarchy) will be used in rendering and Godot physics.\n"
+"Try enabling this option if you see any visual anomalies in 3D (such as "
+"incorrect object visibility)."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1463
+msgid ""
+"If [code]true[/code], the texture importer will import VRAM-compressed "
+"textures using the BPTC algorithm. This texture compression algorithm is "
+"only supported on desktop platforms, and only when using the GLES3 "
+"renderer.\n"
+"[b]Note:[/b] Changing this setting does [i]not[/i] impact textures that were "
+"already imported before. To make this setting apply to textures that were "
+"already imported, exit the editor, remove the [code].import/[/code] folder "
+"located inside the project folder then restart the editor (see [member "
+"application/config/use_hidden_project_data_directory])."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1467
+msgid ""
+"If [code]true[/code], the texture importer will import VRAM-compressed "
+"textures using the Ericsson Texture Compression algorithm. This algorithm "
+"doesn't support alpha channels in textures.\n"
+"[b]Note:[/b] Changing this setting does [i]not[/i] impact textures that were "
+"already imported before. To make this setting apply to textures that were "
+"already imported, exit the editor, remove the [code].import/[/code] folder "
+"located inside the project folder then restart the editor (see [member "
+"application/config/use_hidden_project_data_directory])."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1471
+msgid ""
+"If [code]true[/code], the texture importer will import VRAM-compressed "
+"textures using the Ericsson Texture Compression 2 algorithm. This texture "
+"compression algorithm is only supported when using the GLES3 renderer.\n"
+"[b]Note:[/b] Changing this setting does [i]not[/i] impact textures that were "
+"already imported before. To make this setting apply to textures that were "
+"already imported, exit the editor, remove the [code].import/[/code] folder "
+"located inside the project folder then restart the editor (see [member "
+"application/config/use_hidden_project_data_directory])."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1475
+msgid ""
+"If [code]true[/code], the texture importer will import VRAM-compressed "
+"textures using the PowerVR Texture Compression algorithm. This texture "
+"compression algorithm is only supported on iOS.\n"
+"[b]Note:[/b] Changing this setting does [i]not[/i] impact textures that were "
+"already imported before. To make this setting apply to textures that were "
+"already imported, exit the editor, remove the [code].import/[/code] folder "
+"located inside the project folder then restart the editor (see [member "
+"application/config/use_hidden_project_data_directory])."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1479
+msgid ""
+"If [code]true[/code], the texture importer will import VRAM-compressed "
+"textures using the S3 Texture Compression algorithm. This algorithm is only "
+"supported on desktop platforms and consoles.\n"
+"[b]Note:[/b] Changing this setting does [i]not[/i] impact textures that were "
+"already imported before. To make this setting apply to textures that were "
+"already imported, exit the editor, remove the [code].import/[/code] folder "
+"located inside the project folder then restart the editor (see [member "
+"application/config/use_hidden_project_data_directory])."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1483
+msgid ""
+"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
+"pixels)."
+msgstr ""
+
+#: doc/classes/ProximityGroup.xml:4 doc/classes/ProximityGroup.xml:7
+msgid "General-purpose proximity detection node."
+msgstr ""
+
+#: doc/classes/QuadMesh.xml:4
+msgid "Class representing a square mesh."
+msgstr ""
+
+#: doc/classes/QuadMesh.xml:7
+msgid ""
+"Class representing a square [PrimitiveMesh]. This flat mesh does not have a "
+"thickness. By default, this mesh is aligned on the X and Y axes; this "
+"default rotation is more suited for use with billboarded materials. Unlike "
+"[PlaneMesh], this mesh doesn't provide subdivision options."
+msgstr ""
+
+#: doc/classes/QuadMesh.xml:11 doc/classes/Viewport.xml:19
+#: doc/classes/ViewportTexture.xml:13
+msgid "https://godotengine.org/asset-library/asset/129"
+msgstr ""
+
+#: doc/classes/QuadMesh.xml:17
+msgid "Offset of the generated Quad. Useful for particles."
+msgstr ""
+
+#: doc/classes/QuadMesh.xml:20
+msgid "Size on the X and Y axes."
+msgstr ""
+
+#: doc/classes/Quat.xml:4
+msgid "Quaternion."
+msgstr ""
+
+#: doc/classes/Quat.xml:7
+msgid ""
+"A unit quaternion used for representing 3D rotations. Quaternions need to be "
+"normalized to be used for rotation.\n"
+"It is similar to Basis, which implements matrix representation of rotations, "
+"and can be parametrized using both an axis-angle pair or Euler angles. Basis "
+"stores rotation, scale, and shearing, while Quat only stores rotation.\n"
+"Due to its compactness and the way it is stored in memory, certain "
+"operations (obtaining axis-angle and performing SLERP, in particular) are "
+"more efficient and robust against floating-point errors."
+msgstr ""
+
+#: doc/classes/Quat.xml:12
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/3d/using_transforms."
+"html#interpolating-with-quaternions"
+msgstr ""
+
+#: doc/classes/Quat.xml:20
+msgid "Constructs a quaternion from the given [Basis]."
+msgstr ""
+
+#: doc/classes/Quat.xml:27
+msgid ""
+"Constructs a quaternion that will perform a rotation specified by Euler "
+"angles (in the YXZ convention: when decomposing, first Z, then X, and Y "
+"last), given in the vector format as (X angle, Y angle, Z angle)."
+msgstr ""
+
+#: doc/classes/Quat.xml:35
+msgid ""
+"Constructs a quaternion that will rotate around the given axis by the "
+"specified angle. The axis must be a normalized vector."
+msgstr ""
+
+#: doc/classes/Quat.xml:45
+msgid "Constructs a quaternion defined by the given values."
+msgstr ""
+
+#: doc/classes/Quat.xml:52
+msgid ""
+"Returns the angle between this quaternion and [code]to[/code]. This is the "
+"magnitude of the angle you would need to rotate by to get from one to the "
+"other.\n"
+"[b]Note:[/b] This method has an abnormally high amount of floating-point "
+"error, so methods such as [method @GDScript.is_zero_approx] will not work "
+"reliably."
+msgstr ""
+
+#: doc/classes/Quat.xml:63
+msgid ""
+"Performs a cubic spherical interpolation between quaternions [code]pre_a[/"
+"code], this vector, [code]b[/code], and [code]post_b[/code], by the given "
+"amount [code]weight[/code]."
+msgstr ""
+
+#: doc/classes/Quat.xml:70
+msgid "Returns the dot product of two quaternions."
+msgstr ""
+
+#: doc/classes/Quat.xml:76
+msgid ""
+"Returns Euler angles (in the YXZ convention: when decomposing, first Z, then "
+"X, and Y last) corresponding to the rotation represented by the unit "
+"quaternion. Returned vector contains the rotation angles in the format (X "
+"angle, Y angle, Z angle)."
+msgstr ""
+
+#: doc/classes/Quat.xml:82
+msgid "Returns the inverse of the quaternion."
+msgstr ""
+
+#: doc/classes/Quat.xml:89
+msgid ""
+"Returns [code]true[/code] if this quaternion and [code]quat[/code] are "
+"approximately equal, by running [method @GDScript.is_equal_approx] on each "
+"component."
+msgstr ""
+
+#: doc/classes/Quat.xml:95
+msgid "Returns whether the quaternion is normalized or not."
+msgstr ""
+
+#: doc/classes/Quat.xml:101
+msgid "Returns the length of the quaternion."
+msgstr ""
+
+#: doc/classes/Quat.xml:107
+msgid "Returns the length of the quaternion, squared."
+msgstr ""
+
+#: doc/classes/Quat.xml:113
+msgid "Returns a copy of the quaternion, normalized to unit length."
+msgstr ""
+
+#: doc/classes/Quat.xml:120
+msgid ""
+"Sets the quaternion to a rotation which rotates around axis by the specified "
+"angle, in radians. The axis must be a normalized vector."
+msgstr ""
+
+#: doc/classes/Quat.xml:126
+msgid ""
+"Sets the quaternion to a rotation specified by Euler angles (in the YXZ "
+"convention: when decomposing, first Z, then X, and Y last), given in the "
+"vector format as (X angle, Y angle, Z angle)."
+msgstr ""
+
+#: doc/classes/Quat.xml:134
+msgid ""
+"Returns the result of the spherical linear interpolation between this "
+"quaternion and [code]to[/code] by amount [code]weight[/code].\n"
+"[b]Note:[/b] Both quaternions must be normalized."
+msgstr ""
+
+#: doc/classes/Quat.xml:143
+msgid ""
+"Returns the result of the spherical linear interpolation between this "
+"quaternion and [code]to[/code] by amount [code]weight[/code], but without "
+"checking if the rotation path is not bigger than 90 degrees."
+msgstr ""
+
+#: doc/classes/Quat.xml:150
+msgid "Returns a vector transformed (multiplied) by this quaternion."
+msgstr ""
+
+#: doc/classes/Quat.xml:156
+msgid ""
+"W component of the quaternion (real part).\n"
+"Quaternion components should usually not be manipulated directly."
+msgstr ""
+
+#: doc/classes/Quat.xml:160
+msgid ""
+"X component of the quaternion (imaginary [code]i[/code] axis part).\n"
+"Quaternion components should usually not be manipulated directly."
+msgstr ""
+
+#: doc/classes/Quat.xml:164
+msgid ""
+"Y component of the quaternion (imaginary [code]j[/code] axis part).\n"
+"Quaternion components should usually not be manipulated directly."
+msgstr ""
+
+#: doc/classes/Quat.xml:168
+msgid ""
+"Z component of the quaternion (imaginary [code]k[/code] axis part).\n"
+"Quaternion components should usually not be manipulated directly."
+msgstr ""
+
+#: doc/classes/Quat.xml:174
+msgid ""
+"The identity quaternion, representing no rotation. Equivalent to an identity "
+"[Basis] matrix. If a vector is transformed by an identity quaternion, it "
+"will not change."
+msgstr ""
+
+#: doc/classes/RandomNumberGenerator.xml:4
+msgid "A class for generating pseudo-random numbers."
+msgstr ""
+
+#: doc/classes/RandomNumberGenerator.xml:7
+msgid ""
+"RandomNumberGenerator is a class for generating pseudo-random numbers. It "
+"currently uses [url=http://www.pcg-random.org/]PCG32[/url].\n"
+"[b]Note:[/b] The underlying algorithm is an implementation detail. As a "
+"result, it should not be depended upon for reproducible random streams "
+"across Godot versions.\n"
+"To generate a random float number (within a given range) based on a time-"
+"dependant seed:\n"
+"[codeblock]\n"
+"var rng = RandomNumberGenerator.new()\n"
+"func _ready():\n"
+" rng.randomize()\n"
+" var my_random_number = rng.randf_range(-10.0, 10.0)\n"
+"[/codeblock]\n"
+"[b]Note:[/b] The default values of [member seed] and [member state] "
+"properties are pseudo-random, and changes when calling [method randomize]. "
+"The [code]0[/code] value documented here is a placeholder, and not the "
+"actual default seed."
+msgstr ""
+
+#: doc/classes/RandomNumberGenerator.xml:19
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/math/random_number_generation."
+"html"
+msgstr ""
+
+#: doc/classes/RandomNumberGenerator.xml:25
+msgid ""
+"Generates a pseudo-random float between [code]0.0[/code] and [code]1.0[/"
+"code] (inclusive)."
+msgstr ""
+
+#: doc/classes/RandomNumberGenerator.xml:33
+msgid ""
+"Generates a pseudo-random float between [code]from[/code] and [code]to[/"
+"code] (inclusive)."
+msgstr ""
+
+#: doc/classes/RandomNumberGenerator.xml:41
+msgid ""
+"Generates a [url=https://en.wikipedia.org/wiki/Normal_distribution]normally-"
+"distributed[/url] pseudo-random number, using Box-Muller transform with the "
+"specified [code]mean[/code] and a standard [code]deviation[/code]. This is "
+"also called Gaussian distribution."
+msgstr ""
+
+#: doc/classes/RandomNumberGenerator.xml:47
+msgid ""
+"Generates a pseudo-random 32-bit unsigned integer between [code]0[/code] and "
+"[code]4294967295[/code] (inclusive)."
+msgstr ""
+
+#: doc/classes/RandomNumberGenerator.xml:55
+msgid ""
+"Generates a pseudo-random 32-bit signed integer between [code]from[/code] "
+"and [code]to[/code] (inclusive)."
+msgstr ""
+
+#: doc/classes/RandomNumberGenerator.xml:61
+msgid "Setups a time-based seed to generator."
+msgstr ""
+
+#: doc/classes/RandomNumberGenerator.xml:67
+msgid ""
+"Initializes the random number generator state based on the given seed value. "
+"A given seed will give a reproducible sequence of pseudo-random numbers.\n"
+"[b]Note:[/b] The RNG does not have an avalanche effect, and can output "
+"similar random streams given similar seeds. Consider using a hash function "
+"to improve your seed quality if they're sourced externally.\n"
+"[b]Note:[/b] Setting this property produces a side effect of changing the "
+"internal [member state], so make sure to initialize the seed [i]before[/i] "
+"modifying the [member state]:\n"
+"[codeblock]\n"
+"var rng = RandomNumberGenerator.new()\n"
+"rng.seed = hash(\"Godot\")\n"
+"rng.state = 100 # Restore to some previously saved state.\n"
+"[/codeblock]\n"
+"[b]Warning:[/b] the getter of this property returns the previous [member "
+"state], and not the initial seed value, which is going to be fixed in Godot "
+"4.0."
+msgstr ""
+
+#: doc/classes/RandomNumberGenerator.xml:78
+msgid ""
+"The current state of the random number generator. Save and restore this "
+"property to restore the generator to a previous state:\n"
+"[codeblock]\n"
+"var rng = RandomNumberGenerator.new()\n"
+"print(rng.randf())\n"
+"var saved_state = rng.state # Store current state.\n"
+"print(rng.randf()) # Advance internal state.\n"
+"rng.state = saved_state # Restore the state.\n"
+"print(rng.randf()) # Prints the same value as in previous.\n"
+"[/codeblock]\n"
+"[b]Note:[/b] Do not set state to arbitrary values, since the random number "
+"generator requires the state to have certain qualities to behave properly. "
+"It should only be set to values that came from the state property itself. To "
+"initialize the random number generator with arbitrary input, use [member "
+"seed] instead."
+msgstr ""
+
+#: doc/classes/Range.xml:4
+msgid "Abstract base class for range-based controls."
+msgstr ""
+
+#: doc/classes/Range.xml:7
+msgid ""
+"Range is a base class for [Control] nodes that change a floating-point "
+"[i]value[/i] between a [i]minimum[/i] and a [i]maximum[/i], using [i]step[/"
+"i] and [i]page[/i], for example a [ScrollBar]."
+msgstr ""
+
+#: doc/classes/Range.xml:16
+msgid ""
+"Binds two ranges together along with any ranges previously grouped with "
+"either of them. When any of range's member variables change, it will share "
+"the new value with all other ranges in its group."
+msgstr ""
+
+#: doc/classes/Range.xml:22
+msgid "Stops range from sharing its member variables with any other."
+msgstr ""
+
+#: doc/classes/Range.xml:28
+msgid ""
+"If [code]true[/code], [member value] may be greater than [member max_value]."
+msgstr ""
+
+#: doc/classes/Range.xml:31
+msgid ""
+"If [code]true[/code], [member value] may be less than [member min_value]."
+msgstr ""
+
+#: doc/classes/Range.xml:34
+msgid ""
+"If [code]true[/code], and [code]min_value[/code] is greater than 0, "
+"[code]value[/code] will be represented exponentially rather than linearly."
+msgstr ""
+
+#: doc/classes/Range.xml:37
+msgid ""
+"Maximum value. Range is clamped if [code]value[/code] is greater than "
+"[code]max_value[/code]."
+msgstr ""
+
+#: doc/classes/Range.xml:40
+msgid ""
+"Minimum value. Range is clamped if [code]value[/code] is less than "
+"[code]min_value[/code]."
+msgstr ""
+
+#: doc/classes/Range.xml:43
+msgid ""
+"Page size. Used mainly for [ScrollBar]. ScrollBar's length is its size "
+"multiplied by [code]page[/code] over the difference between [code]min_value[/"
+"code] and [code]max_value[/code]."
+msgstr ""
+
+#: doc/classes/Range.xml:46
+msgid "The value mapped between 0 and 1."
+msgstr ""
+
+#: doc/classes/Range.xml:49
+msgid ""
+"If [code]true[/code], [code]value[/code] will always be rounded to the "
+"nearest integer."
+msgstr ""
+
+#: doc/classes/Range.xml:52
+msgid ""
+"If greater than 0, [code]value[/code] will always be rounded to a multiple "
+"of [code]step[/code]. If [code]rounded[/code] is also [code]true[/code], "
+"[code]value[/code] will first be rounded to a multiple of [code]step[/code] "
+"then rounded to the nearest integer."
+msgstr ""
+
+#: doc/classes/Range.xml:55
+msgid "Range's current value."
+msgstr ""
+
+#: doc/classes/Range.xml:61
+msgid ""
+"Emitted when [member min_value], [member max_value], [member page], or "
+"[member step] change."
+msgstr ""
+
+#: doc/classes/Range.xml:67
+msgid "Emitted when [member value] changes."
+msgstr ""
+
+#: doc/classes/RayCast.xml:4 doc/classes/RayCast2D.xml:4
+msgid "Query the closest object intersecting a ray."
+msgstr ""
+
+#: doc/classes/RayCast.xml:7
+msgid ""
+"A RayCast represents a line from its origin to its destination position, "
+"[code]cast_to[/code]. It is used to query the 3D space in order to find the "
+"closest object along the path of the ray.\n"
+"RayCast can ignore some objects by adding them to the exception list via "
+"[code]add_exception[/code] or by setting proper filtering with collision "
+"layers and masks.\n"
+"RayCast can be configured to report collisions with [Area]s ([member "
+"collide_with_areas]) and/or [PhysicsBody]s ([member collide_with_bodies]).\n"
+"Only enabled raycasts will be able to query the space and report "
+"collisions.\n"
+"RayCast calculates intersection every physics frame (see [Node]), and the "
+"result is cached so it can be used later until the next frame. If multiple "
+"queries are required between physics frames (or during the same frame), use "
+"[method force_raycast_update] after adjusting the raycast."
+msgstr ""
+
+#: doc/classes/RayCast.xml:22 doc/classes/RayCast2D.xml:21
+msgid ""
+"Adds a collision exception so the ray does not report collisions with the "
+"specified node."
+msgstr ""
+
+#: doc/classes/RayCast.xml:29 doc/classes/RayCast2D.xml:28
+msgid ""
+"Adds a collision exception so the ray does not report collisions with the "
+"specified [RID]."
+msgstr ""
+
+#: doc/classes/RayCast.xml:35 doc/classes/RayCast2D.xml:34
+msgid "Removes all collision exceptions for this ray."
+msgstr ""
+
+#: doc/classes/RayCast.xml:41
+msgid ""
+"Updates the collision information for the ray.\n"
+"Use this method to update the collision information immediately instead of "
+"waiting for the next [code]_physics_process[/code] call, for example if the "
+"ray or its parent has changed state.\n"
+"[b]Note:[/b] [code]enabled[/code] is not required for this to work."
+msgstr ""
+
+#: doc/classes/RayCast.xml:49 doc/classes/RayCast2D.xml:47
+msgid ""
+"Returns the first object that the ray intersects, or [code]null[/code] if no "
+"object is intersecting the ray (i.e. [method is_colliding] returns "
+"[code]false[/code])."
+msgstr ""
+
+#: doc/classes/RayCast.xml:55 doc/classes/RayCast2D.xml:53
+msgid ""
+"Returns the shape ID of the first object that the ray intersects, or "
+"[code]0[/code] if no object is intersecting the ray (i.e. [method "
+"is_colliding] returns [code]false[/code])."
+msgstr ""
+
+#: doc/classes/RayCast.xml:62
+msgid ""
+"Returns [code]true[/code] if the bit index passed is turned on.\n"
+"[b]Note:[/b] Bit indices range from 0-19."
+msgstr ""
+
+#: doc/classes/RayCast.xml:69 doc/classes/RayCast2D.xml:66
+msgid ""
+"Returns the normal of the intersecting object's shape at the collision point."
+msgstr ""
+
+#: doc/classes/RayCast.xml:75 doc/classes/RayCast2D.xml:72
+msgid ""
+"Returns the collision point at which the ray intersects the closest object.\n"
+"[b]Note:[/b] This point is in the [b]global[/b] coordinate system."
+msgstr ""
+
+#: doc/classes/RayCast.xml:82 doc/classes/RayCast2D.xml:79
+msgid ""
+"Returns whether any object is intersecting with the ray's vector "
+"(considering the vector length)."
+msgstr ""
+
+#: doc/classes/RayCast.xml:89 doc/classes/RayCast2D.xml:86
+msgid ""
+"Removes a collision exception so the ray does report collisions with the "
+"specified node."
+msgstr ""
+
+#: doc/classes/RayCast.xml:96 doc/classes/RayCast2D.xml:93
+msgid ""
+"Removes a collision exception so the ray does report collisions with the "
+"specified [RID]."
+msgstr ""
+
+#: doc/classes/RayCast.xml:104
+msgid ""
+"Sets the bit index passed to the [code]value[/code] passed.\n"
+"[b]Note:[/b] Bit indexes range from 0-19."
+msgstr ""
+
+#: doc/classes/RayCast.xml:111 doc/classes/RayCast2D.xml:107
+msgid ""
+"The ray's destination point, relative to the RayCast's [code]position[/code]."
+msgstr ""
+
+#: doc/classes/RayCast.xml:114
+msgid "If [code]true[/code], collision with [Area]s will be reported."
+msgstr ""
+
+#: doc/classes/RayCast.xml:117
+msgid "If [code]true[/code], collision with [PhysicsBody]s will be reported."
+msgstr ""
+
+#: doc/classes/RayCast.xml:120 doc/classes/RayCast2D.xml:116
+msgid ""
+"The ray's collision mask. Only objects in at least one collision layer "
+"enabled in the mask will be detected. See [url=https://docs.godotengine.org/"
+"en/3.4/tutorials/physics/physics_introduction.html#collision-layers-and-"
+"masks]Collision layers and masks[/url] in the documentation for more "
+"information."
+msgstr ""
+
+#: doc/classes/RayCast.xml:123
+msgid ""
+"The custom color to use to draw the shape in the editor and at run-time if "
+"[b]Visible Collision Shapes[/b] is enabled in the [b]Debug[/b] menu. This "
+"color will be highlighted at run-time if the [RayCast] is colliding with "
+"something.\n"
+"If set to [code]Color(0.0, 0.0, 0.0)[/code] (by default), the color set in "
+"[member ProjectSettings.debug/shapes/collision/shape_color] is used."
+msgstr ""
+
+#: doc/classes/RayCast.xml:127
+msgid ""
+"If set to [code]1[/code], a line is used as the debug shape. Otherwise, a "
+"truncated pyramid is drawn to represent the [RayCast]. Requires [b]Visible "
+"Collision Shapes[/b] to be enabled in the [b]Debug[/b] menu for the debug "
+"shape to be visible at run-time."
+msgstr ""
+
+#: doc/classes/RayCast.xml:130 doc/classes/RayCast2D.xml:119
+msgid "If [code]true[/code], collisions will be reported."
+msgstr ""
+
+#: doc/classes/RayCast.xml:133
+msgid ""
+"If [code]true[/code], collisions will be ignored for this RayCast's "
+"immediate parent."
+msgstr ""
+
+#: doc/classes/RayCast2D.xml:7
+msgid ""
+"A RayCast represents a line from its origin to its destination position, "
+"[code]cast_to[/code]. It is used to query the 2D space in order to find the "
+"closest object along the path of the ray.\n"
+"RayCast2D can ignore some objects by adding them to the exception list via "
+"[code]add_exception[/code], by setting proper filtering with collision "
+"layers, or by filtering object types with type masks.\n"
+"RayCast2D can be configured to report collisions with [Area2D]s ([member "
+"collide_with_areas]) and/or [PhysicsBody2D]s ([member "
+"collide_with_bodies]).\n"
+"Only enabled raycasts will be able to query the space and report "
+"collisions.\n"
+"RayCast2D calculates intersection every physics frame (see [Node]), and the "
+"result is cached so it can be used later until the next frame. If multiple "
+"queries are required between physics frames (or during the same frame) use "
+"[method force_raycast_update] after adjusting the raycast."
+msgstr ""
+
+#: doc/classes/RayCast2D.xml:40
+msgid ""
+"Updates the collision information for the ray. Use this method to update the "
+"collision information immediately instead of waiting for the next "
+"[code]_physics_process[/code] call, for example if the ray or its parent has "
+"changed state.\n"
+"[b]Note:[/b] [code]enabled[/code] is not required for this to work."
+msgstr ""
+
+#: doc/classes/RayCast2D.xml:101
+msgid ""
+"Sets or clears individual bits on the collision mask. This makes selecting "
+"the areas scanned easier."
+msgstr ""
+
+#: doc/classes/RayCast2D.xml:110
+msgid "If [code]true[/code], collision with [Area2D]s will be reported."
+msgstr ""
+
+#: doc/classes/RayCast2D.xml:113
+msgid "If [code]true[/code], collision with [PhysicsBody2D]s will be reported."
+msgstr ""
+
+#: doc/classes/RayCast2D.xml:122
+msgid ""
+"If [code]true[/code], the parent node will be excluded from collision "
+"detection."
+msgstr ""
+
+#: doc/classes/RayShape.xml:4
+msgid "Ray shape for 3D collisions."
+msgstr ""
+
+#: doc/classes/RayShape.xml:7
+msgid ""
+"Ray shape for 3D collisions, which can be set into a [PhysicsBody] or "
+"[Area]. A ray is not really a collision body; instead, it tries to separate "
+"itself from whatever is touching its far endpoint. It's often useful for "
+"characters."
+msgstr ""
+
+#: doc/classes/RayShape.xml:15 doc/classes/RayShape2D.xml:15
+msgid "The ray's length."
+msgstr ""
+
+#: doc/classes/RayShape.xml:18 doc/classes/RayShape2D.xml:18
+msgid "If [code]true[/code], allow the shape to return the correct normal."
+msgstr ""
+
+#: doc/classes/RayShape2D.xml:4
+msgid "Ray shape for 2D collisions."
+msgstr ""
+
+#: doc/classes/RayShape2D.xml:7
+msgid ""
+"Ray shape for 2D collisions. A ray is not really a collision body; instead, "
+"it tries to separate itself from whatever is touching its far endpoint. It's "
+"often useful for characters."
+msgstr ""
+
+#: doc/classes/Rect2.xml:4
+msgid "2D axis-aligned bounding box."
+msgstr ""
+
+#: doc/classes/Rect2.xml:7
+msgid ""
+"[Rect2] consists of a position, a size, and several utility functions. It is "
+"typically used for fast overlap tests.\n"
+"It uses floating-point coordinates.\n"
+"The 3D counterpart to [Rect2] is [AABB]."
+msgstr ""
+
+#: doc/classes/Rect2.xml:22
+msgid "Constructs a [Rect2] by position and size."
+msgstr ""
+
+#: doc/classes/Rect2.xml:32
+msgid "Constructs a [Rect2] by x, y, width, and height."
+msgstr ""
+
+#: doc/classes/Rect2.xml:38
+msgid ""
+"Returns a [Rect2] with equivalent position and area, modified so that the "
+"top-left corner is the origin and [code]width[/code] and [code]height[/code] "
+"are positive."
+msgstr ""
+
+#: doc/classes/Rect2.xml:45
+msgid "Returns the intersection of this [Rect2] and b."
+msgstr ""
+
+#: doc/classes/Rect2.xml:52
+msgid ""
+"Returns [code]true[/code] if this [Rect2] completely encloses another one."
+msgstr ""
+
+#: doc/classes/Rect2.xml:59
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Rect2.xml:72
+msgid "Returns the area of the [Rect2]."
+msgstr ""
+
+#: doc/classes/Rect2.xml:79
+msgid ""
+"Returns a copy of the [Rect2] grown a given amount of units towards all the "
+"sides."
+msgstr ""
+
+#: doc/classes/Rect2.xml:89
+msgid ""
+"Returns a copy of the [Rect2] grown a given amount of units towards each "
+"direction individually."
+msgstr ""
+
+#: doc/classes/Rect2.xml:97
+msgid ""
+"Returns a copy of the [Rect2] grown a given amount of units towards the "
+"[enum Margin] direction."
+msgstr ""
+
+#: doc/classes/Rect2.xml:103
+msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
+msgstr ""
+
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
+msgstr ""
+
+#: doc/classes/Rect2.xml:119
+msgid ""
+"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
+"they have at least one point in common).\n"
+"If [code]include_borders[/code] is [code]true[/code], they will also be "
+"considered overlapping if their borders touch, even without intersection."
+msgstr ""
+
+#: doc/classes/Rect2.xml:127
+msgid ""
+"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
+"approximately equal, by calling [code]is_equal_approx[/code] on each "
+"component."
+msgstr ""
+
+#: doc/classes/Rect2.xml:134
+msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
+msgstr ""
+
+#: doc/classes/RectangleShape2D.xml:4
+msgid "Rectangle shape for 2D collisions."
+msgstr ""
+
+#: doc/classes/RectangleShape2D.xml:7
+msgid ""
+"Rectangle shape for 2D collisions. This shape is useful for modeling box-"
+"like 2D objects."
+msgstr ""
+
+#: doc/classes/RectangleShape2D.xml:17
+msgid ""
+"The rectangle's half extents. The width and height of this shape is twice "
+"the half extents."
+msgstr ""
+
+#: doc/classes/Reference.xml:4
+msgid "Base class for reference-counted objects."
+msgstr ""
+
+#: doc/classes/Reference.xml:7
+msgid ""
+"Base class for any object that keeps a reference count. [Resource] and many "
+"other helper objects inherit this class.\n"
+"Unlike other [Object] types, References keep an internal reference counter "
+"so that they are automatically released when no longer in use, and only "
+"then. References therefore do not need to be freed manually with [method "
+"Object.free].\n"
+"In the vast majority of use cases, instantiating and using [Reference]-"
+"derived types is all you need to do. The methods provided in this class are "
+"only for advanced users, and can cause issues if misused.\n"
+"[b]Note:[/b] In C#, references will not be freed instantly after they are no "
+"longer in use. Instead, garbage collection will run periodically and will "
+"free references that are no longer in use. This means that unused references "
+"will linger on for a while before being removed."
+msgstr ""
+
+#: doc/classes/Reference.xml:19
+msgid ""
+"Initializes the internal reference counter. Use this only if you really know "
+"what you are doing.\n"
+"Returns whether the initialization was successful."
+msgstr ""
+
+#: doc/classes/Reference.xml:26
+msgid ""
+"Increments the internal reference counter. Use this only if you really know "
+"what you are doing.\n"
+"Returns [code]true[/code] if the increment was successful, [code]false[/"
+"code] otherwise."
+msgstr ""
+
+#: doc/classes/Reference.xml:33
+msgid ""
+"Decrements the internal reference counter. Use this only if you really know "
+"what you are doing.\n"
+"Returns [code]true[/code] if the decrement was successful, [code]false[/"
+"code] otherwise."
+msgstr ""
+
+#: doc/classes/ReferenceRect.xml:4
+msgid "Reference frame for GUI."
+msgstr ""
+
+#: doc/classes/ReferenceRect.xml:7
+msgid ""
+"A rectangle box that displays only a [member border_color] border color "
+"around its rectangle. [ReferenceRect] has no fill [Color]. If you need to "
+"display a rectangle filled with a solid color, consider using [ColorRect] "
+"instead."
+msgstr ""
+
+#: doc/classes/ReferenceRect.xml:15
+msgid "Sets the border [Color] of the [ReferenceRect]."
+msgstr ""
+
+#: doc/classes/ReferenceRect.xml:18
+msgid ""
+"Sets the border width of the [ReferenceRect]. The border grows both inwards "
+"and outwards with respect to the rectangle box."
+msgstr ""
+
+#: doc/classes/ReferenceRect.xml:21
+msgid ""
+"If set to [code]true[/code], the [ReferenceRect] will only be visible while "
+"in editor. Otherwise, [ReferenceRect] will be visible in game."
+msgstr ""
+
+#: doc/classes/ReflectionProbe.xml:4
+msgid "Captures its surroundings to create reflections."
+msgstr ""
+
+#: doc/classes/ReflectionProbe.xml:7
+msgid ""
+"Capture its surroundings as a dual paraboloid image, and stores versions of "
+"it with increasing levels of blur to simulate different material "
+"roughnesses.\n"
+"The [ReflectionProbe] is used to create high-quality reflections at the cost "
+"of performance. It can be combined with [GIProbe]s and Screen Space "
+"Reflections to achieve high quality reflections. [ReflectionProbe]s render "
+"all objects within their [member cull_mask], so updating them can be quite "
+"expensive. It is best to update them once with the important static objects "
+"and then leave them.\n"
+"[b]Note:[/b] By default Godot will only render 16 reflection probes. If you "
+"need more, increase the number of atlas subdivisions. This setting can be "
+"found in [member ProjectSettings.rendering/quality/reflections/"
+"atlas_subdiv].\n"
+"[b]Note:[/b] The GLES2 backend will only display two reflection probes at "
+"the same time for a single mesh. If possible, split up large meshes that "
+"span over multiple reflection probes into smaller ones."
+msgstr ""
+
+#: doc/classes/ReflectionProbe.xml:13
+msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/reflection_probes.html"
+msgstr ""
+
+#: doc/classes/ReflectionProbe.xml:19
+msgid ""
+"If [code]true[/code], enables box projection. This makes reflections look "
+"more correct in rectangle-shaped rooms by offsetting the reflection center "
+"depending on the camera's location."
+msgstr ""
+
+#: doc/classes/ReflectionProbe.xml:22
+msgid ""
+"Sets the cull mask which determines what objects are drawn by this probe. "
+"Every [VisualInstance] with a layer included in this cull mask will be "
+"rendered by the probe. It is best to only include large objects which are "
+"likely to take up a lot of space in the reflection in order to save on "
+"rendering cost."
+msgstr ""
+
+#: doc/classes/ReflectionProbe.xml:25
+msgid ""
+"If [code]true[/code], computes shadows in the reflection probe. This makes "
+"the reflection probe slower to render; you may want to disable this if using "
+"the [constant UPDATE_ALWAYS] [member update_mode]."
+msgstr ""
+
+#: doc/classes/ReflectionProbe.xml:28
+msgid ""
+"The size of the reflection probe. The larger the extents the more space "
+"covered by the probe which will lower the perceived resolution. It is best "
+"to keep the extents only as large as you need them."
+msgstr ""
+
+#: doc/classes/ReflectionProbe.xml:31
+msgid ""
+"Defines the reflection intensity. Intensity modulates the strength of the "
+"reflection."
+msgstr ""
+
+#: doc/classes/ReflectionProbe.xml:34
+msgid ""
+"Sets the ambient light color to be used when this probe is set to [member "
+"interior_enable]."
+msgstr ""
+
+#: doc/classes/ReflectionProbe.xml:37
+msgid ""
+"Sets the contribution value for how much the reflection affects the ambient "
+"light for this reflection probe when set to [member interior_enable]. Useful "
+"so that ambient light matches the color of the room."
+msgstr ""
+
+#: doc/classes/ReflectionProbe.xml:40
+msgid ""
+"Sets the energy multiplier for this reflection probe's ambient light "
+"contribution when set to [member interior_enable]."
+msgstr ""
+
+#: doc/classes/ReflectionProbe.xml:43
+msgid ""
+"If [code]true[/code], reflections will ignore sky contribution. Ambient "
+"lighting is then controlled by the [code]interior_ambient_*[/code] "
+"properties."
+msgstr ""
+
+#: doc/classes/ReflectionProbe.xml:46
+msgid ""
+"Sets the max distance away from the probe an object can be before it is "
+"culled."
+msgstr ""
+
+#: doc/classes/ReflectionProbe.xml:49
+msgid ""
+"Sets the origin offset to be used when this reflection probe is in box "
+"project mode."
+msgstr ""
+
+#: doc/classes/ReflectionProbe.xml:52
+msgid ""
+"Sets how frequently the probe is updated. Can be [constant UPDATE_ONCE] or "
+"[constant UPDATE_ALWAYS]."
+msgstr ""
+
+#: doc/classes/ReflectionProbe.xml:57
+msgid "Update the probe once on the next frame."
+msgstr ""
+
+#: doc/classes/ReflectionProbe.xml:60
+msgid ""
+"Update the probe every frame. This is needed when you want to capture "
+"dynamic objects. However, it results in an increased render time. Use "
+"[constant UPDATE_ONCE] whenever possible."
+msgstr ""
+
+#: modules/regex/doc_classes/RegEx.xml:4
+msgid "Class for searching text for patterns using regular expressions."
+msgstr ""
+
+#: modules/regex/doc_classes/RegEx.xml:7
+msgid ""
+"A regular expression (or regex) is a compact language that can be used to "
+"recognise strings that follow a specific pattern, such as URLs, email "
+"addresses, complete sentences, etc. For instance, a regex of [code]ab[0-9][/"
+"code] would find any string that is [code]ab[/code] followed by any number "
+"from [code]0[/code] to [code]9[/code]. For a more in-depth look, you can "
+"easily find various tutorials and detailed explanations on the Internet.\n"
+"To begin, the RegEx object needs to be compiled with the search pattern "
+"using [method compile] before it can be used.\n"
+"[codeblock]\n"
+"var regex = RegEx.new()\n"
+"regex.compile(\"\\\\w-(\\\\d+)\")\n"
+"[/codeblock]\n"
+"The search pattern must be escaped first for GDScript before it is escaped "
+"for the expression. For example, [code]compile(\"\\\\d+\")[/code] would be "
+"read by RegEx as [code]\\d+[/code]. Similarly, [code]compile(\"\\\"(?:\\\\\\"
+"\\.|[^\\\"])*\\\"\")[/code] would be read as [code]\"(?:\\\\.|[^\"])*\"[/"
+"code].\n"
+"Using [method search], you can find the pattern within the given text. If a "
+"pattern is found, [RegExMatch] is returned and you can retrieve details of "
+"the results using methods such as [method RegExMatch.get_string] and [method "
+"RegExMatch.get_start].\n"
+"[codeblock]\n"
+"var regex = RegEx.new()\n"
+"regex.compile(\"\\\\w-(\\\\d+)\")\n"
+"var result = regex.search(\"abc n-0123\")\n"
+"if result:\n"
+" print(result.get_string()) # Would print n-0123\n"
+"[/codeblock]\n"
+"The results of capturing groups [code]()[/code] can be retrieved by passing "
+"the group number to the various methods in [RegExMatch]. Group 0 is the "
+"default and will always refer to the entire pattern. In the above example, "
+"calling [code]result.get_string(1)[/code] would give you [code]0123[/code].\n"
+"This version of RegEx also supports named capturing groups, and the names "
+"can be used to retrieve the results. If two or more groups have the same "
+"name, the name would only refer to the first one with a match.\n"
+"[codeblock]\n"
+"var regex = RegEx.new()\n"
+"regex.compile(\"d(?<digit>[0-9]+)|x(?<digit>[0-9a-f]+)\")\n"
+"var result = regex.search(\"the number is x2f\")\n"
+"if result:\n"
+" print(result.get_string(\"digit\")) # Would print 2f\n"
+"[/codeblock]\n"
+"If you need to process multiple results, [method search_all] generates a "
+"list of all non-overlapping results. This can be combined with a [code]for[/"
+"code] loop for convenience.\n"
+"[codeblock]\n"
+"for result in regex.search_all(\"d01, d03, d0c, x3f and x42\"):\n"
+" print(result.get_string(\"digit\"))\n"
+"# Would print 01 03 0 3f 42\n"
+"[/codeblock]\n"
+"[b]Example of splitting a string using a RegEx:[/b]\n"
+"[codeblock]\n"
+"var regex = RegEx.new()\n"
+"regex.compile(\"\\\\S+\") # Negated whitespace character class.\n"
+"var results = []\n"
+"for result in regex.search_all(\"One Two \\n\\tThree\"):\n"
+" results.push_back(result.get_string())\n"
+"# The `results` array now contains \"One\", \"Two\", \"Three\".\n"
+"[/codeblock]\n"
+"[b]Note:[/b] Godot's regex implementation is based on the [url=https://www."
+"pcre.org/]PCRE2[/url] library. You can view the full pattern reference "
+"[url=https://www.pcre.org/current/doc/html/pcre2pattern.html]here[/url].\n"
+"[b]Tip:[/b] You can use [url=https://regexr.com/]Regexr[/url] to test "
+"regular expressions online."
+msgstr ""
+
+#: modules/regex/doc_classes/RegEx.xml:55
+msgid ""
+"This method resets the state of the object, as if it was freshly created. "
+"Namely, it unassigns the regular expression of this object."
+msgstr ""
+
+#: modules/regex/doc_classes/RegEx.xml:62
+msgid ""
+"Compiles and assign the search pattern to use. Returns [constant OK] if the "
+"compilation is successful. If an error is encountered, details are printed "
+"to standard output and an error is returned."
+msgstr ""
+
+#: modules/regex/doc_classes/RegEx.xml:68
+msgid "Returns the number of capturing groups in compiled pattern."
+msgstr ""
+
+#: modules/regex/doc_classes/RegEx.xml:74
+msgid ""
+"Returns an array of names of named capturing groups in the compiled pattern. "
+"They are ordered by appearance."
+msgstr ""
+
+#: modules/regex/doc_classes/RegEx.xml:80
+msgid "Returns the original search pattern that was compiled."
+msgstr ""
+
+#: modules/regex/doc_classes/RegEx.xml:86
+msgid "Returns whether this object has a valid search pattern assigned."
+msgstr ""
+
+#: modules/regex/doc_classes/RegEx.xml:95
+msgid ""
+"Searches the text for the compiled pattern. Returns a [RegExMatch] container "
+"of the first matching result if found, otherwise [code]null[/code]. The "
+"region to search within can be specified without modifying where the start "
+"and end anchor would be."
+msgstr ""
+
+#: modules/regex/doc_classes/RegEx.xml:104
+msgid ""
+"Searches the text for the compiled pattern. Returns an array of [RegExMatch] "
+"containers for each non-overlapping result. If no results were found, an "
+"empty array is returned instead. The region to search within can be "
+"specified without modifying where the start and end anchor would be."
+msgstr ""
+
+#: modules/regex/doc_classes/RegEx.xml:115
+msgid ""
+"Searches the text for the compiled pattern and replaces it with the "
+"specified string. Escapes and backreferences such as [code]$1[/code] and "
+"[code]$name[/code] are expanded and resolved. By default, only the first "
+"instance is replaced, but it can be changed for all instances (global "
+"replacement). The region to search within can be specified without modifying "
+"where the start and end anchor would be."
+msgstr ""
+
+#: modules/regex/doc_classes/RegExMatch.xml:4
+msgid "Contains the results of a [RegEx] search."
+msgstr ""
+
+#: modules/regex/doc_classes/RegExMatch.xml:7
+msgid ""
+"Contains the results of a single [RegEx] match returned by [method RegEx."
+"search] and [method RegEx.search_all]. It can be used to find the position "
+"and range of the match and its capturing groups, and it can extract its "
+"substring for you."
+msgstr ""
+
+#: modules/regex/doc_classes/RegExMatch.xml:16
+msgid ""
+"Returns the end position of the match within the source string. The end "
+"position of capturing groups can be retrieved by providing its group number "
+"as an integer or its string name (if it's a named group). The default value "
+"of 0 refers to the whole pattern.\n"
+"Returns -1 if the group did not match or doesn't exist."
+msgstr ""
+
+#: modules/regex/doc_classes/RegExMatch.xml:23
+msgid "Returns the number of capturing groups."
+msgstr ""
+
+#: modules/regex/doc_classes/RegExMatch.xml:30
+msgid ""
+"Returns the starting position of the match within the source string. The "
+"starting position of capturing groups can be retrieved by providing its "
+"group number as an integer or its string name (if it's a named group). The "
+"default value of 0 refers to the whole pattern.\n"
+"Returns -1 if the group did not match or doesn't exist."
+msgstr ""
+
+#: modules/regex/doc_classes/RegExMatch.xml:38
+msgid ""
+"Returns the substring of the match from the source string. Capturing groups "
+"can be retrieved by providing its group number as an integer or its string "
+"name (if it's a named group). The default value of 0 refers to the whole "
+"pattern.\n"
+"Returns an empty string if the group did not match or doesn't exist."
+msgstr ""
+
+#: modules/regex/doc_classes/RegExMatch.xml:45
+msgid ""
+"A dictionary of named groups and its corresponding group number. Only groups "
+"that were matched are included. If multiple groups have the same name, that "
+"name would refer to the first matching one."
+msgstr ""
+
+#: modules/regex/doc_classes/RegExMatch.xml:48
+msgid "An [Array] of the match and its capturing groups."
+msgstr ""
+
+#: modules/regex/doc_classes/RegExMatch.xml:51
+msgid ""
+"The source string used with the search pattern to find this matching result."
+msgstr ""
+
+#: doc/classes/RemoteTransform.xml:4
+msgid ""
+"RemoteTransform pushes its own [Transform] to another [Spatial] derived Node "
+"in the scene."
+msgstr ""
+
+#: doc/classes/RemoteTransform.xml:7
+msgid ""
+"RemoteTransform pushes its own [Transform] to another [Spatial] derived Node "
+"(called the remote node) in the scene.\n"
+"It can be set to update another Node's position, rotation and/or scale. It "
+"can use either global or local coordinates."
+msgstr ""
+
+#: doc/classes/RemoteTransform.xml:16
+msgid ""
+"[RemoteTransform] caches the remote node. It may not notice if the remote "
+"node disappears; [method force_update_cache] forces it to update the cache "
+"again."
+msgstr ""
+
+#: doc/classes/RemoteTransform.xml:22
+msgid ""
+"The [NodePath] to the remote node, relative to the RemoteTransform's "
+"position in the scene."
+msgstr ""
+
+#: doc/classes/RemoteTransform.xml:25 doc/classes/RemoteTransform2D.xml:25
+msgid "If [code]true[/code], the remote node's position is updated."
+msgstr ""
+
+#: doc/classes/RemoteTransform.xml:28 doc/classes/RemoteTransform2D.xml:28
+msgid "If [code]true[/code], the remote node's rotation is updated."
+msgstr ""
+
+#: doc/classes/RemoteTransform.xml:31 doc/classes/RemoteTransform2D.xml:31
+msgid "If [code]true[/code], the remote node's scale is updated."
+msgstr ""
+
+#: doc/classes/RemoteTransform.xml:34 doc/classes/RemoteTransform2D.xml:34
+msgid ""
+"If [code]true[/code], global coordinates are used. If [code]false[/code], "
+"local coordinates are used."
+msgstr ""
+
+#: doc/classes/RemoteTransform2D.xml:4
+msgid ""
+"RemoteTransform2D pushes its own [Transform2D] to another [CanvasItem] "
+"derived Node in the scene."
+msgstr ""
+
+#: doc/classes/RemoteTransform2D.xml:7
+msgid ""
+"RemoteTransform2D pushes its own [Transform2D] to another [CanvasItem] "
+"derived Node (called the remote node) in the scene.\n"
+"It can be set to update another Node's position, rotation and/or scale. It "
+"can use either global or local coordinates."
+msgstr ""
+
+#: doc/classes/RemoteTransform2D.xml:16
+msgid ""
+"[RemoteTransform2D] caches the remote node. It may not notice if the remote "
+"node disappears; [method force_update_cache] forces it to update the cache "
+"again."
+msgstr ""
+
+#: doc/classes/RemoteTransform2D.xml:22
+msgid ""
+"The [NodePath] to the remote node, relative to the RemoteTransform2D's "
+"position in the scene."
+msgstr ""
+
+#: doc/classes/Resource.xml:4
+msgid "Base class for all resources."
+msgstr ""
+
+#: doc/classes/Resource.xml:7
+msgid ""
+"Resource is the base class for all Godot-specific resource types, serving "
+"primarily as data containers. Since they inherit from [Reference], resources "
+"are reference-counted and freed when no longer in use. They are also cached "
+"once loaded from disk, so that any further attempts to load a resource from "
+"a given path will return the same reference (all this in contrast to a "
+"[Node], which is not reference-counted and can be instanced from disk as "
+"many times as desired). Resources can be saved externally on disk or bundled "
+"into another object, such as a [Node] or another resource.\n"
+"[b]Note:[/b] In C#, resources will not be freed instantly after they are no "
+"longer in use. Instead, garbage collection will run periodically and will "
+"free resources that are no longer in use. This means that unused resources "
+"will linger on for a while before being removed."
+msgstr ""
+
+#: doc/classes/Resource.xml:11
+msgid ""
+"https://docs.godotengine.org/en/3.4/getting_started/step_by_step/resources."
+"html"
+msgstr ""
+
+#: doc/classes/Resource.xml:18
+msgid ""
+"Virtual function which can be overridden to customize the behavior value of "
+"[method setup_local_to_scene]."
+msgstr ""
+
+#: doc/classes/Resource.xml:25
+msgid ""
+"Duplicates the resource, returning a new resource with the exported members "
+"copied. [b]Note:[/b] To duplicate the resource the constructor is called "
+"without arguments. This method will error when the constructor doesn't have "
+"default values.\n"
+"By default, sub-resources are shared between resource copies for efficiency. "
+"This can be changed by passing [code]true[/code] to the [code]subresources[/"
+"code] argument which will copy the subresources.\n"
+"[b]Note:[/b] If [code]subresources[/code] is [code]true[/code], this method "
+"will only perform a shallow copy. Nested resources within subresources will "
+"not be duplicated and will still be shared.\n"
+"[b]Note:[/b] When duplicating a resource, only [code]export[/code]ed "
+"properties are copied. Other properties will be set to their default value "
+"in the new resource."
+msgstr ""
+
+#: doc/classes/Resource.xml:34
+msgid ""
+"Emits the [signal changed] signal.\n"
+"If external objects which depend on this resource should be updated, this "
+"method must be called manually whenever the state of this resource has "
+"changed (such as modification of properties).\n"
+"The method is equivalent to:\n"
+"[codeblock]\n"
+"emit_signal(\"changed\")\n"
+"[/codeblock]\n"
+"[b]Note:[/b] This method is called automatically for built-in resources."
+msgstr ""
+
+#: doc/classes/Resource.xml:46
+msgid ""
+"If [member resource_local_to_scene] is enabled and the resource was loaded "
+"from a [PackedScene] instantiation, returns the local scene where this "
+"resource's unique copy is in use. Otherwise, returns [code]null[/code]."
+msgstr ""
+
+#: doc/classes/Resource.xml:52
+msgid ""
+"Returns the RID of the resource (or an empty RID). Many resources (such as "
+"[Texture], [Mesh], etc) are high-level abstractions of resources stored in a "
+"server, so this function will return the original RID."
+msgstr ""
+
+#: doc/classes/Resource.xml:58
+msgid ""
+"This method is called when a resource with [member resource_local_to_scene] "
+"enabled is loaded from a [PackedScene] instantiation. Its behavior can be "
+"customized by overriding [method _setup_local_to_scene] from script.\n"
+"For most resources, this method performs no base logic. [ViewportTexture] "
+"performs custom logic to properly set the proxy texture and flags in the "
+"local viewport."
+msgstr ""
+
+#: doc/classes/Resource.xml:66
+msgid ""
+"Sets the path of the resource, potentially overriding an existing cache "
+"entry for this path. This differs from setting [member resource_path], as "
+"the latter would error out if another resource was already cached for the "
+"given path."
+msgstr ""
+
+#: doc/classes/Resource.xml:72
+msgid ""
+"If [code]true[/code], the resource will be made unique in each instance of "
+"its local scene. It can thus be modified in a scene instance without "
+"impacting other instances of that same scene."
+msgstr ""
+
+#: doc/classes/Resource.xml:75
+msgid ""
+"The name of the resource. This is an optional identifier. If [member "
+"resource_name] is not empty, its value will be displayed to represent the "
+"current resource in the editor inspector. For built-in scripts, the [member "
+"resource_name] will be displayed as the tab name in the script editor."
+msgstr ""
+
+#: doc/classes/Resource.xml:78
+msgid ""
+"The path to the resource. In case it has its own file, it will return its "
+"filepath. If it's tied to the scene, it will return the scene's path, "
+"followed by the resource's index."
+msgstr ""
+
+#: doc/classes/Resource.xml:84
+msgid ""
+"Emitted whenever the resource changes.\n"
+"[b]Note:[/b] This signal is not emitted automatically for custom resources, "
+"which means that you need to create a setter and emit the signal yourself."
+msgstr ""
+
+#: doc/classes/ResourceFormatLoader.xml:4
+msgid "Loads a specific resource type from a file."
+msgstr ""
+
+#: doc/classes/ResourceFormatLoader.xml:7
+msgid ""
+"Godot loads resources in the editor or in exported games using "
+"ResourceFormatLoaders. They are queried automatically via the "
+"[ResourceLoader] singleton, or when a resource with internal dependencies is "
+"loaded. Each file type may load as a different resource type, so multiple "
+"ResourceFormatLoaders are registered in the engine.\n"
+"Extending this class allows you to define your own loader. Be sure to "
+"respect the documented return types and values. You should give it a global "
+"class name with [code]class_name[/code] for it to be registered. Like built-"
+"in ResourceFormatLoaders, it will be called automatically when loading "
+"resources of its handled type(s). You may also implement a "
+"[ResourceFormatSaver].\n"
+"[b]Note:[/b] You can also extend [EditorImportPlugin] if the resource type "
+"you need exists but Godot is unable to load its format. Choosing one way "
+"over another depends on if the format is suitable or not for the final "
+"exported game. For example, it's better to import [code].png[/code] textures "
+"as [code].stex[/code] ([StreamTexture]) first, so they can be loaded with "
+"better efficiency on the graphics card."
+msgstr ""
+
+#: doc/classes/ResourceFormatLoader.xml:19
+msgid ""
+"If implemented, gets the dependencies of a given resource. If "
+"[code]add_types[/code] is [code]true[/code], paths should be appended "
+"[code]::TypeName[/code], where [code]TypeName[/code] is the class name of "
+"the dependency.\n"
+"[b]Note:[/b] Custom resource types defined by scripts aren't known by the "
+"[ClassDB], so you might just return [code]\"Resource\"[/code] for them."
+msgstr ""
+
+#: doc/classes/ResourceFormatLoader.xml:26
+msgid "Gets the list of extensions for files this loader is able to read."
+msgstr ""
+
+#: doc/classes/ResourceFormatLoader.xml:33
+msgid ""
+"Gets the class name of the resource associated with the given path. If the "
+"loader cannot handle it, it should return [code]\"\"[/code].\n"
+"[b]Note:[/b] Custom resource types defined by scripts aren't known by the "
+"[ClassDB], so you might just return [code]\"Resource\"[/code] for them."
+msgstr ""
+
+#: doc/classes/ResourceFormatLoader.xml:41
+msgid ""
+"Tells which resource class this loader can load.\n"
+"[b]Note:[/b] Custom resource types defined by scripts aren't known by the "
+"[ClassDB], so you might just handle [code]\"Resource\"[/code] for them."
+msgstr ""
+
+#: doc/classes/ResourceFormatLoader.xml:50
+msgid ""
+"Loads a resource when the engine finds this loader to be compatible. If the "
+"loaded resource is the result of an import, [code]original_path[/code] will "
+"target the source file. Returns a [Resource] object on success, or an [enum "
+"Error] constant in case of failure."
+msgstr ""
+
+#: doc/classes/ResourceFormatLoader.xml:58
+msgid ""
+"If implemented, renames dependencies within the given resource and saves it. "
+"[code]renames[/code] is a dictionary [code]{ String => String }[/code] "
+"mapping old dependency paths to new paths.\n"
+"Returns [constant OK] on success, or an [enum Error] constant in case of "
+"failure."
+msgstr ""
+
+#: doc/classes/ResourceFormatSaver.xml:4
+msgid "Saves a specific resource type to a file."
+msgstr ""
+
+#: doc/classes/ResourceFormatSaver.xml:7
+msgid ""
+"The engine can save resources when you do it from the editor, or when you "
+"use the [ResourceSaver] singleton. This is accomplished thanks to multiple "
+"[ResourceFormatSaver]s, each handling its own format and called "
+"automatically by the engine.\n"
+"By default, Godot saves resources as [code].tres[/code] (text-based), [code]."
+"res[/code] (binary) or another built-in format, but you can choose to create "
+"your own format by extending this class. Be sure to respect the documented "
+"return types and values. You should give it a global class name with "
+"[code]class_name[/code] for it to be registered. Like built-in "
+"ResourceFormatSavers, it will be called automatically when saving resources "
+"of its recognized type(s). You may also implement a [ResourceFormatLoader]."
+msgstr ""
+
+#: doc/classes/ResourceFormatSaver.xml:17
+msgid ""
+"Returns the list of extensions available for saving the resource object, "
+"provided it is recognized (see [method recognize])."
+msgstr ""
+
+#: doc/classes/ResourceFormatSaver.xml:24
+msgid "Returns whether the given resource object can be saved by this saver."
+msgstr ""
+
+#: doc/classes/ResourceFormatSaver.xml:33
+msgid ""
+"Saves the given resource object to a file at the target [code]path[/code]. "
+"[code]flags[/code] is a bitmask composed with [enum ResourceSaver."
+"SaverFlags] constants.\n"
+"Returns [constant OK] on success, or an [enum Error] constant in case of "
+"failure."
+msgstr ""
+
+#: doc/classes/ResourceImporter.xml:4
+msgid "Base class for the implementation of core resource importers."
+msgstr ""
+
+#: doc/classes/ResourceImporter.xml:7
+msgid ""
+"This is the base class for the resource importers implemented in core. To "
+"implement your own resource importers using editor plugins, see "
+"[EditorImportPlugin]."
+msgstr ""
+
+#: doc/classes/ResourceImporter.xml:16
+msgid "The default import order."
+msgstr ""
+
+#: doc/classes/ResourceImporter.xml:19
+msgid ""
+"The import order for scenes, which ensures scenes are imported [i]after[/i] "
+"all other core resources such as textures. Custom importers should generally "
+"have an import order lower than [code]100[/code] to avoid issues when "
+"importing scenes that rely on custom resources."
+msgstr ""
+
+#: doc/classes/ResourceInteractiveLoader.xml:4
+msgid "Interactive [Resource] loader."
+msgstr ""
+
+#: doc/classes/ResourceInteractiveLoader.xml:7
+msgid ""
+"Interactive [Resource] loader. This object is returned by [ResourceLoader] "
+"when performing an interactive load. It allows loading resources with high "
+"granularity, which makes it mainly useful for displaying loading bars or "
+"percentages."
+msgstr ""
+
+#: doc/classes/ResourceInteractiveLoader.xml:15
+msgid ""
+"Returns the loaded resource if the load operation completed successfully, "
+"[code]null[/code] otherwise."
+msgstr ""
+
+#: doc/classes/ResourceInteractiveLoader.xml:21
+msgid ""
+"Returns the load stage. The total amount of stages can be queried with "
+"[method get_stage_count]."
+msgstr ""
+
+#: doc/classes/ResourceInteractiveLoader.xml:27
+msgid ""
+"Returns the total amount of stages (calls to [method poll]) needed to "
+"completely load this resource."
+msgstr ""
+
+#: doc/classes/ResourceInteractiveLoader.xml:33
+msgid ""
+"Polls the loading operation, i.e. loads a data chunk up to the next stage.\n"
+"Returns [constant OK] if the poll is successful but the load operation has "
+"not finished yet (intermediate stage). This means [method poll] will have to "
+"be called again until the last stage is completed.\n"
+"Returns [constant ERR_FILE_EOF] if the load operation has completed "
+"successfully. The loaded resource can be obtained by calling [method "
+"get_resource].\n"
+"Returns another [enum Error] code if the poll has failed."
+msgstr ""
+
+#: doc/classes/ResourceInteractiveLoader.xml:42
+msgid ""
+"Polls the loading operation successively until the resource is completely "
+"loaded or a [method poll] fails.\n"
+"Returns [constant ERR_FILE_EOF] if the load operation has completed "
+"successfully. The loaded resource can be obtained by calling [method "
+"get_resource].\n"
+"Returns another [enum Error] code if a poll has failed, aborting the "
+"operation."
+msgstr ""
+
+#: doc/classes/ResourceLoader.xml:4
+msgid "Singleton used to load resource files."
+msgstr ""
+
+#: doc/classes/ResourceLoader.xml:7
+msgid ""
+"Singleton used to load resource files from the filesystem.\n"
+"It uses the many [ResourceFormatLoader] classes registered in the engine "
+"(either built-in or from a plugin) to load files into memory and convert "
+"them to a format that can be used by the engine."
+msgstr ""
+
+#: doc/classes/ResourceLoader.xml:19
+msgid ""
+"Returns whether a recognized resource exists for the given [code]path[/"
+"code].\n"
+"An optional [code]type_hint[/code] can be used to further specify the "
+"[Resource] type that should be handled by the [ResourceFormatLoader]."
+msgstr ""
+
+#: doc/classes/ResourceLoader.xml:27
+msgid ""
+"Returns the dependencies for the resource at the given [code]path[/code]."
+msgstr ""
+
+#: doc/classes/ResourceLoader.xml:34
+msgid "Returns the list of recognized extensions for a resource type."
+msgstr ""
+
+#: doc/classes/ResourceLoader.xml:41
+msgid ""
+"[i]Deprecated method.[/i] Use [method has_cached] or [method exists] instead."
+msgstr ""
+
+#: doc/classes/ResourceLoader.xml:48
+msgid ""
+"Returns whether a cached resource is available for the given [code]path[/"
+"code].\n"
+"Once a resource has been loaded by the engine, it is cached in memory for "
+"faster access, and future calls to the [method load] or [method "
+"load_interactive] methods will use the cached version. The cached resource "
+"can be overridden by using [method Resource.take_over_path] on a new "
+"resource for that same path."
+msgstr ""
+
+#: doc/classes/ResourceLoader.xml:58
+msgid ""
+"Loads a resource at the given [code]path[/code], caching the result for "
+"further access.\n"
+"The registered [ResourceFormatLoader]s are queried sequentially to find the "
+"first one which can handle the file's extension, and then attempt loading. "
+"If loading fails, the remaining ResourceFormatLoaders are also attempted.\n"
+"An optional [code]type_hint[/code] can be used to further specify the "
+"[Resource] type that should be handled by the [ResourceFormatLoader]. "
+"Anything that inherits from [Resource] can be used as a type hint, for "
+"example [Image].\n"
+"If [code]no_cache[/code] is [code]true[/code], the resource cache will be "
+"bypassed and the resource will be loaded anew. Otherwise, the cached "
+"resource will be returned if it exists.\n"
+"Returns an empty resource if no [ResourceFormatLoader] could handle the "
+"file.\n"
+"GDScript has a simplified [method @GDScript.load] built-in method which can "
+"be used in most situations, leaving the use of [ResourceLoader] for more "
+"advanced scenarios."
+msgstr ""
+
+#: doc/classes/ResourceLoader.xml:71
+msgid ""
+"Starts loading a resource interactively. The returned "
+"[ResourceInteractiveLoader] object allows to load with high granularity, "
+"calling its [method ResourceInteractiveLoader.poll] method successively to "
+"load chunks.\n"
+"An optional [code]type_hint[/code] can be used to further specify the "
+"[Resource] type that should be handled by the [ResourceFormatLoader]. "
+"Anything that inherits from [Resource] can be used as a type hint, for "
+"example [Image]."
+msgstr ""
+
+#: doc/classes/ResourceLoader.xml:79
+msgid ""
+"Changes the behavior on missing sub-resources. The default behavior is to "
+"abort loading."
+msgstr ""
+
+#: doc/classes/ResourcePreloader.xml:4
+msgid "Resource Preloader Node."
+msgstr ""
+
+#: doc/classes/ResourcePreloader.xml:7
+msgid ""
+"This node is used to preload sub-resources inside a scene, so when the scene "
+"is loaded, all the resources are ready to use and can be retrieved from the "
+"preloader.\n"
+"GDScript has a simplified [method @GDScript.preload] built-in method which "
+"can be used in most situations, leaving the use of [ResourcePreloader] for "
+"more advanced scenarios."
+msgstr ""
+
+#: doc/classes/ResourcePreloader.xml:18
+msgid ""
+"Adds a resource to the preloader with the given [code]name[/code]. If a "
+"resource with the given [code]name[/code] already exists, the new resource "
+"will be renamed to \"[code]name[/code] N\" where N is an incrementing number "
+"starting from 2."
+msgstr ""
+
+#: doc/classes/ResourcePreloader.xml:25
+msgid "Returns the resource associated to [code]name[/code]."
+msgstr ""
+
+#: doc/classes/ResourcePreloader.xml:31
+msgid "Returns the list of resources inside the preloader."
+msgstr ""
+
+#: doc/classes/ResourcePreloader.xml:38
+msgid ""
+"Returns [code]true[/code] if the preloader contains a resource associated to "
+"[code]name[/code]."
+msgstr ""
+
+#: doc/classes/ResourcePreloader.xml:45
+msgid ""
+"Removes the resource associated to [code]name[/code] from the preloader."
+msgstr ""
+
+#: doc/classes/ResourcePreloader.xml:53
+msgid ""
+"Renames a resource inside the preloader from [code]name[/code] to "
+"[code]newname[/code]."
+msgstr ""
+
+#: doc/classes/ResourceSaver.xml:4
+msgid "Singleton for saving Godot-specific resource types."
+msgstr ""
+
+#: doc/classes/ResourceSaver.xml:7
+msgid ""
+"Singleton for saving Godot-specific resource types to the filesystem.\n"
+"It uses the many [ResourceFormatSaver] classes registered in the engine "
+"(either built-in or from a plugin) to save engine-specific resource data to "
+"text-based (e.g. [code].tres[/code] or [code].tscn[/code]) or binary files "
+"(e.g. [code].res[/code] or [code].scn[/code])."
+msgstr ""
+
+#: doc/classes/ResourceSaver.xml:17
+msgid ""
+"Returns the list of extensions available for saving a resource of a given "
+"type."
+msgstr ""
+
+#: doc/classes/ResourceSaver.xml:26
+msgid ""
+"Saves a resource to disk to the given path, using a [ResourceFormatSaver] "
+"that recognizes the resource object.\n"
+"The [code]flags[/code] bitmask can be specified to customize the save "
+"behavior.\n"
+"Returns [constant OK] on success."
+msgstr ""
+
+#: doc/classes/ResourceSaver.xml:34
+msgid "Save the resource with a path relative to the scene which uses it."
+msgstr ""
+
+#: doc/classes/ResourceSaver.xml:37
+msgid "Bundles external resources."
+msgstr ""
+
+#: doc/classes/ResourceSaver.xml:40
+msgid ""
+"Changes the [member Resource.resource_path] of the saved resource to match "
+"its new location."
+msgstr ""
+
+#: doc/classes/ResourceSaver.xml:43
+msgid ""
+"Do not save editor-specific metadata (identified by their [code]__editor[/"
+"code] prefix)."
+msgstr ""
+
+#: doc/classes/ResourceSaver.xml:46
+msgid "Save as big endian (see [member File.endian_swap])."
+msgstr ""
+
+#: doc/classes/ResourceSaver.xml:49
+msgid ""
+"Compress the resource on save using [constant File.COMPRESSION_ZSTD]. Only "
+"available for binary resource types."
+msgstr ""
+
+#: doc/classes/ResourceSaver.xml:52
+msgid ""
+"Take over the paths of the saved subresources (see [method Resource."
+"take_over_path])."
+msgstr ""
+
+#: doc/classes/RichTextEffect.xml:4
+msgid "A custom effect for use with [RichTextLabel]."
+msgstr ""
+
+#: doc/classes/RichTextEffect.xml:7
+msgid ""
+"A custom effect for use with [RichTextLabel].\n"
+"[b]Note:[/b] For a [RichTextEffect] to be usable, a BBCode tag must be "
+"defined as a member variable called [code]bbcode[/code] in the script.\n"
+"[codeblock]\n"
+"# The RichTextEffect will be usable like this: `[example]Some text[/"
+"example]`\n"
+"var bbcode = \"example\"\n"
+"[/codeblock]\n"
+"[b]Note:[/b] As soon as a [RichTextLabel] contains at least one "
+"[RichTextEffect], it will continuously process the effect unless the project "
+"is paused. This may impact battery life negatively."
+msgstr ""
+
+#: doc/classes/RichTextEffect.xml:24
+msgid ""
+"Override this method to modify properties in [code]char_fx[/code]. The "
+"method must return [code]true[/code] if the character could be transformed "
+"successfully. If the method returns [code]false[/code], it will skip "
+"transformation to avoid displaying broken text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:4
+msgid "Label that displays rich text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:7
+msgid ""
+"Rich text can contain custom text, fonts, images and some basic formatting. "
+"The label manages these as an internal tag stack. It also adapts itself to "
+"given width/heights.\n"
+"[b]Note:[/b] Assignments to [member bbcode_text] clear the tag stack and "
+"reconstruct it from the property's contents. Any edits made to [member "
+"bbcode_text] will erase previous edits made from other manual sources such "
+"as [method append_bbcode] and the [code]push_*[/code] / [method pop] "
+"methods.\n"
+"[b]Note:[/b] RichTextLabel doesn't support entangled BBCode tags. For "
+"example, instead of using [code][b]bold[i]bold italic[/b]italic[/i][/code], "
+"use [code][b]bold[i]bold italic[/i][/b][i]italic[/i][/code].\n"
+"[b]Note:[/b] [code]push_*/pop[/code] functions won't affect BBCode.\n"
+"[b]Note:[/b] Unlike [Label], RichTextLabel doesn't have a [i]property[/i] to "
+"horizontally align text to the center. Instead, enable [member "
+"bbcode_enabled] and surround the text in a [code][center][/code] tag as "
+"follows: [code][center]Example[/center][/code]. There is currently no built-"
+"in way to vertically align text either, but this can be emulated by relying "
+"on anchors/containers and the [member fit_content_height] property.\n"
+"[b]Note:[/b] Unicode characters after [code]0xffff[/code] (such as most "
+"emoji) are [i]not[/i] supported on Windows. They will display as unknown "
+"characters instead. This will be resolved in Godot 4.0."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:16
+msgid "https://godotengine.org/asset-library/asset/132"
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:26
+msgid ""
+"Adds an image's opening and closing tags to the tag stack, optionally "
+"providing a [code]width[/code] and [code]height[/code] to resize the image.\n"
+"If [code]width[/code] or [code]height[/code] is set to 0, the image size "
+"will be adjusted in order to keep the original aspect ratio."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:34
+msgid "Adds raw non-BBCode-parsed text to the tag stack."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:41
+msgid ""
+"Parses [code]bbcode[/code] and adds tags to the tag stack as needed. Returns "
+"the result of the parsing, [constant OK] if successful.\n"
+"[b]Note:[/b] Using this method, you can't close a tag that was opened in a "
+"previous [method append_bbcode] call. This is done to improve performance, "
+"especially when updating large RichTextLabels since rebuilding the whole "
+"BBCode every time would be slower. If you absolutely need to close a tag in "
+"a future method call, append the [member bbcode_text] instead of using "
+"[method append_bbcode]."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:48
+msgid "Clears the tag stack and sets [member bbcode_text] to an empty string."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:54
+msgid "Returns the height of the content."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:60
+msgid ""
+"Returns the total number of newlines in the tag stack's text tags. Considers "
+"wrapped text as one line."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:66
+msgid ""
+"Returns the total number of characters from text tags. Does not include "
+"BBCodes."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:72
+msgid ""
+"Returns the vertical scrollbar.\n"
+"[b]Warning:[/b] This is a required internal node, removing and freeing it "
+"may cause a crash. If you wish to hide it or any of its children, use their "
+"[member CanvasItem.visible] property."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:79
+msgid "Returns the number of visible lines."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:86
+msgid ""
+"Installs a custom effect. [code]effect[/code] should be a valid "
+"[RichTextEffect]."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:92
+msgid "Adds a newline tag to the tag stack."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:99
+msgid ""
+"The assignment version of [method append_bbcode]. Clears the tag stack and "
+"inserts the new content. Returns [constant OK] if parses [code]bbcode[/code] "
+"successfully."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:106
+msgid "Parses BBCode parameter [code]expressions[/code] into a dictionary."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:112
+msgid ""
+"Terminates the current tag. Use after [code]push_*[/code] methods to close "
+"BBCodes manually. Does not need to follow [code]add_*[/code] methods."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:119
+msgid ""
+"Adds an [code][align][/code] tag based on the given [code]align[/code] "
+"value. See [enum Align] for possible values."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:125
+msgid ""
+"Adds a [code][font][/code] tag with a bold font to the tag stack. This is "
+"the same as adding a [code][b][/code] tag if not currently in a [code][i][/"
+"code] tag."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:131
+msgid ""
+"Adds a [code][font][/code] tag with a bold italics font to the tag stack."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:137
+msgid ""
+"Adds a [code][cell][/code] tag to the tag stack. Must be inside a [code]"
+"[table][/code] tag. See [method push_table] for details."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:144
+msgid "Adds a [code][color][/code] tag to the tag stack."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:151
+msgid ""
+"Adds a [code][font][/code] tag to the tag stack. Overrides default fonts for "
+"its duration."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:158
+msgid ""
+"Adds an [code][indent][/code] tag to the tag stack. Multiplies [code]level[/"
+"code] by current [member tab_size] to determine new margin length."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:164
+msgid ""
+"Adds a [code][font][/code] tag with a italics font to the tag stack. This is "
+"the same as adding a [code][i][/code] tag if not currently in a [code][b][/"
+"code] tag."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:171
+msgid ""
+"Adds a [code][list][/code] tag to the tag stack. Similar to the BBCodes "
+"[code][ol][/code] or [code][ul][/code], but supports more list types. Not "
+"fully implemented!"
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:178
+msgid ""
+"Adds a [code][meta][/code] tag to the tag stack. Similar to the BBCode [code]"
+"[url=something]{text}[/url][/code], but supports non-[String] metadata types."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:184
+msgid "Adds a [code][font][/code] tag with a monospace font to the tag stack."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:190
+msgid "Adds a [code][font][/code] tag with a normal font to the tag stack."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:196
+msgid "Adds a [code][s][/code] tag to the tag stack."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:203
+msgid "Adds a [code][table=columns][/code] tag to the tag stack."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:209
+msgid "Adds a [code][u][/code] tag to the tag stack."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:216
+msgid ""
+"Removes a line of content from the label. Returns [code]true[/code] if the "
+"line exists.\n"
+"The [code]line[/code] argument is the index of the line to remove, it can "
+"take values in the interval [code][0, get_line_count() - 1][/code]."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:224
+msgid "Scrolls the window's top line to match [code]line[/code]."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:233
+msgid ""
+"Edits the selected column's expansion options. If [code]expand[/code] is "
+"[code]true[/code], the column expands in proportion to its expansion ratio "
+"versus the other columns' ratios.\n"
+"For example, 2 columns with ratios 3 and 4 plus 70 pixels in available width "
+"would expand 30 and 40 pixels, respectively.\n"
+"If [code]expand[/code] is [code]false[/code], the column will not contribute "
+"to the total ratio."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:241
+msgid ""
+"If [code]true[/code], the label uses BBCode formatting.\n"
+"[b]Note:[/b] Trying to alter the [RichTextLabel]'s text with [method "
+"add_text] will reset this to [code]false[/code]. Use instead [method "
+"append_bbcode] to preserve BBCode formatting."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:245
+msgid ""
+"The label's text in BBCode format. Is not representative of manual "
+"modifications to the internal tag stack. Erases changes made by other "
+"methods when edited.\n"
+"[b]Note:[/b] It is unadvised to use the [code]+=[/code] operator with "
+"[code]bbcode_text[/code] (e.g. [code]bbcode_text += \"some string\"[/code]) "
+"as it replaces the whole text and can cause slowdowns. Use [method "
+"append_bbcode] for adding text instead, unless you absolutely need to close "
+"a tag that was opened in an earlier method call."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:249
+msgid ""
+"The currently installed custom effects. This is an array of "
+"[RichTextEffect]s.\n"
+"To add a custom effect, it's more convenient to use [method install_effect]."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:253
+msgid ""
+"If [code]true[/code], the label's height will be automatically updated to "
+"fit its content.\n"
+"[b]Note:[/b] This property is used as a workaround to fix issues with "
+"[RichTextLabel] in [Container]s, but it's unreliable in some cases and will "
+"be removed in future versions."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:257
+msgid ""
+"If [code]true[/code], the label underlines meta tags such as [code][url]"
+"{text}[/url][/code]."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:260
+msgid "If [code]true[/code], the label uses the custom font color."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:263
+msgid ""
+"The range of characters to display, as a [float] between 0.0 and 1.0. When "
+"assigned an out of range value, it's the same as assigning 1.0.\n"
+"[b]Note:[/b] Setting this property updates [member visible_characters] based "
+"on current [method get_total_character_count]."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:268
+msgid ""
+"If [code]true[/code], the scrollbar is visible. Setting this to [code]false[/"
+"code] does not block scrolling completely. See [method scroll_to_line]."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:271
+msgid ""
+"If [code]true[/code], the window scrolls down to display new content "
+"automatically."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:274
+msgid "If [code]true[/code], the label allows text selection."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:277
+msgid ""
+"The number of spaces associated with a single tab length. Does not affect "
+"[code]\\t[/code] in text tags, only indent tags."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:280
+msgid ""
+"The raw text of the label.\n"
+"When set, clears the tag stack and adds a raw text tag to the top of it. "
+"Does not parse BBCodes. Does not modify [member bbcode_text]."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:284
+msgid ""
+"The restricted number of characters to display in the label. If [code]-1[/"
+"code], all characters will be displayed.\n"
+"[b]Note:[/b] Setting this property updates [member percent_visible] based on "
+"current [method get_total_character_count]."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:292
+msgid ""
+"Triggered when the user clicks on content between meta tags. If the meta is "
+"defined in text, e.g. [code][url={\"data\"=\"hi\"}]hi[/url][/code], then the "
+"parameter for this signal will be a [String] type. If a particular type or "
+"an object is desired, the [method push_meta] method must be used to manually "
+"insert the data into the tag stack."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:298
+msgid "Triggers when the mouse exits a meta tag."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:304
+msgid "Triggers when the mouse enters a meta tag."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:310
+msgid "Makes text left aligned."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:313
+msgid "Makes text centered."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:316
+msgid "Makes text right aligned."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:319
+msgid "Makes text fill width."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:322
+msgid "Each list item has a number marker."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:325
+msgid "Each list item has a letter marker."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:328
+msgid "Each list item has a filled circle marker."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:371
+msgid "The font used for bold text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:374
+msgid "The font used for bold italics text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:377
+msgid "The default text color."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:380
+msgid "The background The background used when the [RichTextLabel] is focused."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:383
+msgid ""
+"The color of selected text, used when [member selection_enabled] is "
+"[code]true[/code]."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:386
+msgid "The color of the font's shadow."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:389
+msgid "The font used for italics text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:392
+msgid "The vertical space between lines."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:395
+msgid "The font used for monospace text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:398
+msgid "The normal background for the [RichTextLabel]."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:401
+msgid "The default text font."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:404
+msgid "The color of the selection box."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:407
+msgid ""
+"Boolean value. If 1 ([code]true[/code]), the shadow will be displayed around "
+"the whole text as an outline."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:410
+msgid "The horizontal offset of the font's shadow."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:413
+msgid "The vertical offset of the font's shadow."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:416
+msgid "The horizontal separation of elements in a table."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:419
+msgid "The vertical separation of elements in a table."
+msgstr ""
+
+#: doc/classes/RID.xml:4
+msgid "Handle for a [Resource]'s unique ID."
+msgstr ""
+
+#: doc/classes/RID.xml:7
+msgid ""
+"The RID type is used to access the unique integer ID of a resource. They are "
+"opaque, which means they do not grant access to the associated resource by "
+"themselves. They are used by and with the low-level Server classes such as "
+"[VisualServer]."
+msgstr ""
+
+#: doc/classes/RID.xml:16
+msgid ""
+"Creates a new RID instance with the ID of a given resource. When not handed "
+"a valid resource, silently stores the unused ID 0."
+msgstr ""
+
+#: doc/classes/RID.xml:22
+msgid "Returns the ID of the referenced resource."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:4
+msgid ""
+"Physics Body whose position is determined through physics simulation in 3D "
+"space."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:7
+msgid ""
+"This is the node that implements full 3D physics. This means that you do not "
+"control a RigidBody directly. Instead, you can apply forces to it (gravity, "
+"impulses, etc.), and the physics simulation will calculate the resulting "
+"movement, collision, bouncing, rotating, etc.\n"
+"A RigidBody has 4 behavior [member mode]s: Rigid, Static, Character, and "
+"Kinematic.\n"
+"[b]Note:[/b] Don't change a RigidBody's position every frame or very often. "
+"Sporadic changes work fine, but physics runs at a different granularity "
+"(fixed Hz) than usual rendering (process callback) and maybe even in a "
+"separate thread, so changing this from a process loop may result in strange "
+"behavior. If you need to directly affect the body's state, use [method "
+"_integrate_forces], which allows you to directly access the physics state.\n"
+"If you need to override the default physics behavior, you can write a custom "
+"force integration function. See [member custom_integrator].\n"
+"With Bullet physics (the default), the center of mass is the RigidBody3D "
+"center. With GodotPhysics, the center of mass is the average of the "
+"[CollisionShape] centers."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:23
+msgid ""
+"Called during physics processing, allowing you to read and safely modify the "
+"simulation state for the object. By default, it works in addition to the "
+"usual physics behavior, but the [member custom_integrator] property allows "
+"you to disable the default behavior and do fully custom force integration "
+"for a body."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:30
+msgid ""
+"Adds a constant directional force (i.e. acceleration) without affecting "
+"rotation.\n"
+"This is equivalent to [code]add_force(force, Vector3(0,0,0))[/code]."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:39
+msgid ""
+"Adds a constant directional force (i.e. acceleration).\n"
+"The position uses the rotation of the global coordinate system, but is "
+"centered at the object's origin."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:47
+msgid ""
+"Adds a constant rotational force (i.e. a motor) without affecting position."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:54
+msgid ""
+"Applies a directional impulse without affecting rotation.\n"
+"This is equivalent to [code]apply_impulse(Vector3(0,0,0), impulse)[/code]."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:63
+msgid ""
+"Applies a positioned impulse to the body. An impulse is time independent! "
+"Applying an impulse every frame would result in a framerate-dependent force. "
+"For this reason it should only be used when simulating one-time impacts. The "
+"position uses the rotation of the global coordinate system, but is centered "
+"at the object's origin."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:70
+msgid ""
+"Applies a torque impulse which will be affected by the body mass and shape. "
+"This will rotate the body around the [code]impulse[/code] vector passed."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:77
+msgid ""
+"Returns [code]true[/code] if the specified linear or rotational axis is "
+"locked."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:83 doc/classes/RigidBody2D.xml:73
+msgid ""
+"Returns a list of the bodies colliding with this one. Requires [member "
+"contact_monitor] to be set to [code]true[/code] and [member "
+"contacts_reported] to be set high enough to detect all the collisions.\n"
+"[b]Note:[/b] The result of this test is not immediate after moving objects. "
+"For performance, list of collisions is updated once per frame and before the "
+"physics step. Consider using signals instead."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:90
+msgid ""
+"Returns the inverse inertia tensor basis. This is used to calculate the "
+"angular acceleration resulting from a torque applied to the RigidBody."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:98
+msgid "Locks the specified linear or rotational axis."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:111
+msgid ""
+"Damps RigidBody's rotational forces.\n"
+"See [member ProjectSettings.physics/3d/default_angular_damp] for more "
+"details about damping."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:115
+msgid "RigidBody's rotational velocity."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:118
+msgid "Lock the body's rotation in the X axis."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:121
+msgid "Lock the body's rotation in the Y axis."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:124
+msgid "Lock the body's rotation in the Z axis."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:127
+msgid "Lock the body's movement in the X axis."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:130
+msgid "Lock the body's movement in the Y axis."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:133
+msgid "Lock the body's movement in the Z axis."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:136 doc/classes/RigidBody2D.xml:110
+#: doc/classes/StaticBody.xml:19 doc/classes/StaticBody2D.xml:16
+msgid ""
+"The body's bounciness. Values range from [code]0[/code] (no bounce) to "
+"[code]1[/code] (full bounciness).\n"
+"Deprecated, use [member PhysicsMaterial.bounce] instead via [member "
+"physics_material_override]."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:140
+msgid ""
+"If [code]true[/code], the body can enter sleep mode when there is no "
+"movement. See [member sleeping].\n"
+"[b]Note:[/b] A RigidBody3D will never enter sleep mode automatically if its "
+"[member mode] is [constant MODE_CHARACTER]. It can still be put to sleep "
+"manually by setting its [member sleeping] property to [code]true[/code]."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:144
+msgid ""
+"If [code]true[/code], the RigidBody will emit signals when it collides with "
+"another RigidBody. See also [member contacts_reported]."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:147
+msgid ""
+"The maximum number of contacts that will be recorded. Requires [member "
+"contact_monitor] to be set to [code]true[/code].\n"
+"[b]Note:[/b] The number of contacts is different from the number of "
+"collisions. Collisions between parallel edges will result in two contacts "
+"(one at each end), and collisions between parallel faces will result in four "
+"contacts (one at each corner)."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:151
+msgid ""
+"If [code]true[/code], continuous collision detection is used.\n"
+"Continuous collision detection tries to predict where a moving body will "
+"collide, instead of moving it and correcting its movement if it collided. "
+"Continuous collision detection is more precise, and misses fewer impacts by "
+"small, fast-moving objects. Not using continuous collision detection is "
+"faster to compute, but can miss small, fast-moving objects."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:155
+msgid ""
+"If [code]true[/code], internal force integration will be disabled (like "
+"gravity or air friction) for this body. Other than collision response, the "
+"body will only move as determined by the [method _integrate_forces] "
+"function, if defined."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:158
+msgid ""
+"The body's friction, from 0 (frictionless) to 1 (max friction).\n"
+"Deprecated, use [member PhysicsMaterial.friction] instead via [member "
+"physics_material_override]."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:162
+msgid ""
+"This is multiplied by the global 3D gravity setting found in [b]Project > "
+"Project Settings > Physics > 3d[/b] to produce RigidBody's gravity. For "
+"example, a value of 1 will be normal gravity, 2 will apply double gravity, "
+"and 0.5 will apply half gravity to this object."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:165
+msgid ""
+"The body's linear damp. Cannot be less than -1.0. If this value is different "
+"from -1.0, any linear damp derived from the world or areas will be "
+"overridden.\n"
+"See [member ProjectSettings.physics/3d/default_linear_damp] for more details "
+"about damping."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:169
+msgid ""
+"The body's linear velocity. Can be used sporadically, but [b]don't set this "
+"every frame[/b], because physics may run in another thread and runs at a "
+"different granularity. Use [method _integrate_forces] as your process loop "
+"for precise control of the body state."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:172 doc/classes/RigidBody2D.xml:149
+msgid "The body's mass."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:175
+msgid "The body mode. See [enum Mode] for possible values."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:178 doc/classes/RigidBody2D.xml:155
+#: doc/classes/StaticBody.xml:33 doc/classes/StaticBody2D.xml:30
+msgid ""
+"The physics material override for the body.\n"
+"If a material is assigned to this property, it will be used instead of any "
+"other physics material, such as an inherited one."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:182 doc/classes/RigidBody2D.xml:159
+msgid ""
+"If [code]true[/code], the body will not move and will not calculate forces "
+"until woken up by another body through, for example, a collision, or by "
+"using the [method apply_impulse] or [method add_force] methods."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:185
+msgid ""
+"The body's weight based on its mass and the global 3D gravity. Global values "
+"are set in [b]Project > Project Settings > Physics > 3d[/b]."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:192
+msgid ""
+"Emitted when a collision with another [PhysicsBody] or [GridMap] occurs. "
+"Requires [member contact_monitor] to be set to [code]true[/code] and [member "
+"contacts_reported] to be set high enough to detect all the collisions. "
+"[GridMap]s are detected if the [MeshLibrary] has Collision [Shape]s.\n"
+"[code]body[/code] the [Node], if it exists in the tree, of the other "
+"[PhysicsBody] or [GridMap]."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:199
+msgid ""
+"Emitted when the collision with another [PhysicsBody] or [GridMap] ends. "
+"Requires [member contact_monitor] to be set to [code]true[/code] and [member "
+"contacts_reported] to be set high enough to detect all the collisions. "
+"[GridMap]s are detected if the [MeshLibrary] has Collision [Shape]s.\n"
+"[code]body[/code] the [Node], if it exists in the tree, of the other "
+"[PhysicsBody] or [GridMap]."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:209
+msgid ""
+"Emitted when one of this RigidBody's [Shape]s collides with another "
+"[PhysicsBody] or [GridMap]'s [Shape]s. Requires [member contact_monitor] to "
+"be set to [code]true[/code] and [member contacts_reported] to be set high "
+"enough to detect all the collisions. [GridMap]s are detected if the "
+"[MeshLibrary] has Collision [Shape]s.\n"
+"[code]body_rid[/code] the [RID] of the other [PhysicsBody] or "
+"[MeshLibrary]'s [CollisionObject] used by the [PhysicsServer].\n"
+"[code]body[/code] the [Node], if it exists in the tree, of the other "
+"[PhysicsBody] or [GridMap].\n"
+"[code]body_shape_index[/code] the index of the [Shape] of the other "
+"[PhysicsBody] or [GridMap] used by the [PhysicsServer]. Get the "
+"[CollisionShape] node with [code]body.shape_owner_get_owner(body_shape_index)"
+"[/code].\n"
+"[code]local_shape_index[/code] the index of the [Shape] of this RigidBody "
+"used by the [PhysicsServer]. Get the [CollisionShape] node with [code]self."
+"shape_owner_get_owner(local_shape_index)[/code].\n"
+"[b]Note:[/b] Bullet physics cannot identify the shape index when using a "
+"[ConcavePolygonShape]. Don't use multiple [CollisionShape]s when using a "
+"[ConcavePolygonShape] with Bullet physics if you need shape indices."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:223
+msgid ""
+"Emitted when the collision between one of this RigidBody's [Shape]s and "
+"another [PhysicsBody] or [GridMap]'s [Shape]s ends. Requires [member "
+"contact_monitor] to be set to [code]true[/code] and [member "
+"contacts_reported] to be set high enough to detect all the collisions. "
+"[GridMap]s are detected if the [MeshLibrary] has Collision [Shape]s.\n"
+"[code]body_rid[/code] the [RID] of the other [PhysicsBody] or "
+"[MeshLibrary]'s [CollisionObject] used by the [PhysicsServer]. [GridMap]s "
+"are detected if the Meshes have [Shape]s.\n"
+"[code]body[/code] the [Node], if it exists in the tree, of the other "
+"[PhysicsBody] or [GridMap].\n"
+"[code]body_shape_index[/code] the index of the [Shape] of the other "
+"[PhysicsBody] or [GridMap] used by the [PhysicsServer]. Get the "
+"[CollisionShape] node with [code]body.shape_owner_get_owner(body_shape_index)"
+"[/code].\n"
+"[code]local_shape_index[/code] the index of the [Shape] of this RigidBody "
+"used by the [PhysicsServer]. Get the [CollisionShape] node with [code]self."
+"shape_owner_get_owner(local_shape_index)[/code].\n"
+"[b]Note:[/b] Bullet physics cannot identify the shape index when using a "
+"[ConcavePolygonShape]. Don't use multiple [CollisionShape]s when using a "
+"[ConcavePolygonShape] with Bullet physics if you need shape indices."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:233 doc/classes/RigidBody2D.xml:208
+msgid ""
+"Emitted when the physics engine changes the body's sleeping state.\n"
+"[b]Note:[/b] Changing the value [member sleeping] will not trigger this "
+"signal. It is only emitted if the sleeping state is changed by the physics "
+"engine or [code]emit_signal(\"sleeping_state_changed\")[/code] is used."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:240
+msgid ""
+"Rigid body mode. This is the \"natural\" state of a rigid body. It is "
+"affected by forces, and can move, rotate, and be affected by user code."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:243
+msgid ""
+"Static mode. The body behaves like a [StaticBody], and can only move by user "
+"code."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:246
+msgid ""
+"Character body mode. This behaves like a rigid body, but can not rotate."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:249
+msgid ""
+"Kinematic body mode. The body behaves like a [KinematicBody], and can only "
+"move by user code."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:4
+msgid "A body that is controlled by the 2D physics engine."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:7
+msgid ""
+"This node implements simulated 2D physics. You do not control a RigidBody2D "
+"directly. Instead, you apply forces to it (gravity, impulses, etc.) and the "
+"physics simulation calculates the resulting movement based on its mass, "
+"friction, and other physical properties.\n"
+"A RigidBody2D has 4 behavior [member mode]s: Rigid, Static, Character, and "
+"Kinematic.\n"
+"[b]Note:[/b] You should not change a RigidBody2D's [code]position[/code] or "
+"[code]linear_velocity[/code] every frame or even very often. If you need to "
+"directly affect the body's state, use [method _integrate_forces], which "
+"allows you to directly access the physics state.\n"
+"Please also keep in mind that physics bodies manage their own transform "
+"which overwrites the ones you set. So any direct or indirect transformation "
+"(including scaling of the node or its parent) will be visible in the editor "
+"only, and immediately reset at runtime.\n"
+"If you need to override the default physics behavior or add a transformation "
+"at runtime, you can write a custom force integration. See [member "
+"custom_integrator].\n"
+"The center of mass is always located at the node's origin without taking "
+"into account the [CollisionShape2D] centroid offsets."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:15
+msgid "https://godotengine.org/asset-library/asset/119"
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:16 doc/classes/Sprite.xml:10
+msgid "https://godotengine.org/asset-library/asset/148"
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:23
+msgid ""
+"Allows you to read and safely modify the simulation state for the object. "
+"Use this instead of [method Node._physics_process] if you need to directly "
+"change the body's [code]position[/code] or other physics properties. By "
+"default, it works in addition to the usual physics behavior, but [member "
+"custom_integrator] allows you to disable the default behavior and write "
+"custom force integration for a body."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:60
+msgid ""
+"Applies a positioned impulse to the body. An impulse is time-independent! "
+"Applying an impulse every frame would result in a framerate-dependent force. "
+"For this reason it should only be used when simulating one-time impacts (use "
+"the \"_force\" functions otherwise). The position uses the rotation of the "
+"global coordinate system, but is centered at the object's origin."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:81
+msgid ""
+"Sets the body's velocity on the given axis. The velocity in the given vector "
+"axis will be set as the given vector length. This is useful for jumping "
+"behavior."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:91
+msgid ""
+"Returns [code]true[/code] if a collision would result from moving in the "
+"given vector. [code]margin[/code] increases the size of the shapes involved "
+"in the collision detection, and [code]result[/code] is an object of type "
+"[Physics2DTestMotionResult], which contains additional information about the "
+"collision (should there be one)."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:97
+msgid ""
+"Damps the body's [member angular_velocity]. If [code]-1[/code], the body "
+"will use the [b]Default Angular Damp[/b] defined in [b]Project > Project "
+"Settings > Physics > 2d[/b].\n"
+"See [member ProjectSettings.physics/2d/default_angular_damp] for more "
+"details about damping."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:104
+msgid "The body's total applied force."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:107
+msgid "The body's total applied torque."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:114
+msgid ""
+"If [code]true[/code], the body can enter sleep mode when there is no "
+"movement. See [member sleeping].\n"
+"[b]Note:[/b] A RigidBody2D will never enter sleep mode automatically if its "
+"[member mode] is [constant MODE_CHARACTER]. It can still be put to sleep "
+"manually by setting its [member sleeping] property to [code]true[/code]."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:118
+msgid ""
+"If [code]true[/code], the body will emit signals when it collides with "
+"another RigidBody2D. See also [member contacts_reported]."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:121
+msgid ""
+"The maximum number of contacts that will be recorded. Requires [member "
+"contact_monitor] to be set to [code]true[/code].\n"
+"[b]Note:[/b] The number of contacts is different from the number of "
+"collisions. Collisions between parallel edges will result in two contacts "
+"(one at each end)."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:125
+msgid ""
+"Continuous collision detection mode.\n"
+"Continuous collision detection tries to predict where a moving body will "
+"collide instead of moving it and correcting its movement after collision. "
+"Continuous collision detection is slower, but more precise and misses fewer "
+"collisions with small, fast-moving objects. Raycasting and shapecasting "
+"methods are available. See [enum CCDMode] for details."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:129
+msgid ""
+"If [code]true[/code], internal force integration is disabled for this body. "
+"Aside from collision response, the body will only move as determined by the "
+"[method _integrate_forces] function."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:132
+msgid ""
+"The body's friction. Values range from [code]0[/code] (frictionless) to "
+"[code]1[/code] (maximum friction).\n"
+"Deprecated, use [member PhysicsMaterial.friction] instead via [member "
+"physics_material_override]."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:136
+msgid ""
+"Multiplies the gravity applied to the body. The body's gravity is calculated "
+"from the [b]Default Gravity[/b] value in [b]Project > Project Settings > "
+"Physics > 2d[/b] and/or any additional gravity vector applied by [Area2D]s."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:139
+msgid ""
+"The body's moment of inertia. This is like mass, but for rotation: it "
+"determines how much torque it takes to rotate the body. The moment of "
+"inertia is usually computed automatically from the mass and the shapes, but "
+"this function allows you to set a custom value. Set 0 inertia to return to "
+"automatically computing it."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:142
+msgid ""
+"Damps the body's [member linear_velocity]. If [code]-1[/code], the body will "
+"use the [b]Default Linear Damp[/b] in [b]Project > Project Settings > "
+"Physics > 2d[/b].\n"
+"See [member ProjectSettings.physics/2d/default_linear_damp] for more details "
+"about damping."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:152
+msgid "The body's mode. See [enum Mode] for possible values."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:162
+msgid ""
+"The body's weight based on its mass and the [b]Default Gravity[/b] value in "
+"[b]Project > Project Settings > Physics > 2d[/b]."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:169
+msgid ""
+"Emitted when a collision with another [PhysicsBody2D] or [TileMap] occurs. "
+"Requires [member contact_monitor] to be set to [code]true[/code] and [member "
+"contacts_reported] to be set high enough to detect all the collisions. "
+"[TileMap]s are detected if the [TileSet] has Collision [Shape2D]s.\n"
+"[code]body[/code] the [Node], if it exists in the tree, of the other "
+"[PhysicsBody2D] or [TileMap]."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:176
+msgid ""
+"Emitted when the collision with another [PhysicsBody2D] or [TileMap] ends. "
+"Requires [member contact_monitor] to be set to [code]true[/code] and [member "
+"contacts_reported] to be set high enough to detect all the collisions. "
+"[TileMap]s are detected if the [TileSet] has Collision [Shape2D]s.\n"
+"[code]body[/code] the [Node], if it exists in the tree, of the other "
+"[PhysicsBody2D] or [TileMap]."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:186
+msgid ""
+"Emitted when one of this RigidBody2D's [Shape2D]s collides with another "
+"[PhysicsBody2D] or [TileMap]'s [Shape2D]s. Requires [member contact_monitor] "
+"to be set to [code]true[/code] and [member contacts_reported] to be set high "
+"enough to detect all the collisions. [TileMap]s are detected if the "
+"[TileSet] has Collision [Shape2D]s.\n"
+"[code]body_rid[/code] the [RID] of the other [PhysicsBody2D] or [TileSet]'s "
+"[CollisionObject2D] used by the [Physics2DServer].\n"
+"[code]body[/code] the [Node], if it exists in the tree, of the other "
+"[PhysicsBody2D] or [TileMap].\n"
+"[code]body_shape_index[/code] the index of the [Shape2D] of the other "
+"[PhysicsBody2D] or [TileMap] used by the [Physics2DServer]. Get the "
+"[CollisionShape2D] node with [code]body."
+"shape_owner_get_owner(body_shape_index)[/code].\n"
+"[code]local_shape_index[/code] the index of the [Shape2D] of this "
+"RigidBody2D used by the [Physics2DServer]. Get the [CollisionShape2D] node "
+"with [code]self.shape_owner_get_owner(local_shape_index)[/code]."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:199
+msgid ""
+"Emitted when the collision between one of this RigidBody2D's [Shape2D]s and "
+"another [PhysicsBody2D] or [TileMap]'s [Shape2D]s ends. Requires [member "
+"contact_monitor] to be set to [code]true[/code] and [member "
+"contacts_reported] to be set high enough to detect all the collisions. "
+"[TileMap]s are detected if the [TileSet] has Collision [Shape2D]s.\n"
+"[code]body_rid[/code] the [RID] of the other [PhysicsBody2D] or [TileSet]'s "
+"[CollisionObject2D] used by the [Physics2DServer].\n"
+"[code]body[/code] the [Node], if it exists in the tree, of the other "
+"[PhysicsBody2D] or [TileMap].\n"
+"[code]body_shape_index[/code] the index of the [Shape2D] of the other "
+"[PhysicsBody2D] or [TileMap] used by the [Physics2DServer]. Get the "
+"[CollisionShape2D] node with [code]body."
+"shape_owner_get_owner(body_shape_index)[/code].\n"
+"[code]local_shape_index[/code] the index of the [Shape2D] of this "
+"RigidBody2D used by the [Physics2DServer]. Get the [CollisionShape2D] node "
+"with [code]self.shape_owner_get_owner(local_shape_index)[/code]."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:215
+msgid ""
+"Rigid mode. The body behaves as a physical object. It collides with other "
+"bodies and responds to forces applied to it. This is the default mode."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:218
+msgid "Static mode. The body behaves like a [StaticBody2D] and does not move."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:221
+msgid ""
+"Character mode. Similar to [constant MODE_RIGID], but the body can not "
+"rotate."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:224
+msgid ""
+"Kinematic mode. The body behaves like a [KinematicBody2D], and must be moved "
+"by code."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:227
+msgid ""
+"Continuous collision detection disabled. This is the fastest way to detect "
+"body collisions, but can miss small, fast-moving objects."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:230
+msgid ""
+"Continuous collision detection enabled using raycasting. This is faster than "
+"shapecasting but less precise."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:233
+msgid ""
+"Continuous collision detection enabled using shapecasting. This is the "
+"slowest CCD method and the most precise."
+msgstr ""
+
+#: doc/classes/Room.xml:4
+msgid "Room node, used to group objects together locally for [Portal] culling."
+msgstr ""
+
+#: doc/classes/Room.xml:7
+msgid ""
+"The [Portal] culling system requires levels to be built using objects "
+"grouped together by location in areas called [Room]s. In many cases these "
+"will correspond to actual rooms in buildings, but not necessarily (a canyon "
+"area may be treated as a room).\n"
+"Any [VisualInstance] that is a child or grandchild of a [Room] will be "
+"assigned to that room, if the [code]portal_mode[/code] of that "
+"[VisualInstance] is set to [code]STATIC[/code] (does not move) or "
+"[code]DYNAMIC[/code] (moves only within the room).\n"
+"Internally the room boundary must form a [b]convex hull[/b], and by default "
+"this is determined automatically by the geometry of the objects you place "
+"within the room.\n"
+"You can alternatively precisely specify a [b]manual bound[/b]. If you place "
+"a [MeshInstance] with a name prefixed by [code]Bound_[/code], it will turn "
+"off the bound generation from geometry, and instead use the vertices of this "
+"MeshInstance to directly calculate a convex hull during the conversion stage "
+"(see [RoomManager]).\n"
+"In order to see from one room into an adjacent room, [Portal]s must be "
+"placed over non-occluded openings between rooms. These will often be placed "
+"over doors and windows."
+msgstr ""
+
+#: doc/classes/Room.xml:27
+msgid ""
+"If [code]points[/code] are set, the [Room] bounding convex hull will be "
+"built from these points. If no points are set, the room bound will either be "
+"derived from a manual bound ([MeshInstance] with name prefix [code]Bound_[/"
+"code]), or from the geometry within the room.\n"
+"Note that you can use the [code]Generate Points[/code] editor button to get "
+"started. This will use either the geometry or manual bound to generate the "
+"room hull, and save the resulting points, allowing you to edit them to "
+"further refine the bound."
+msgstr ""
+
+#: doc/classes/Room.xml:31
+msgid ""
+"The [code]simplify[/code] value determines to what degree room hulls "
+"(bounds) are simplified, by removing similar planes. A value of 0 gives no "
+"simplification, 1 gives maximum simplification."
+msgstr ""
+
+#: doc/classes/Room.xml:34
+msgid ""
+"The room hull simplification can either use the default value set in the "
+"[RoomManager], or override this and use the per room setting."
+msgstr ""
+
+#: doc/classes/RoomGroup.xml:4
+msgid "Groups [Room]s together to allow common functionality."
+msgstr ""
+
+#: doc/classes/RoomGroup.xml:7
+msgid ""
+"Although [Room] behaviour can be specified individually, sometimes it is "
+"faster and more convenient to write functionality for a group of rooms.\n"
+"[RoomGroup]s should be placed as children of the [b]room list[/b] (the "
+"parent [Node] of your [Room]s), and [Room]s should be placed in turn as "
+"children of a [RoomGroup] in order to assign them to the RoomGroup.\n"
+"A [RoomGroup] can for example be used to specify [Room]s that are "
+"[b]outside[/b], and switch on or off a directional light, sky, or rain "
+"effect as the player enters / exits the area.\n"
+"[RoomGroup]s receive [b]gameplay callbacks[/b] when the "
+"[code]gameplay_monitor[/code] is switched on, as [code]signal[/code]s or "
+"[code]notification[/code]s as they enter and exit the [b]gameplay area[/b] "
+"(see [RoomManager] for details)."
+msgstr ""
+
+#: doc/classes/RoomGroup.xml:18
+msgid ""
+"This priority will be applied to [Room]s within the group. The [Room] "
+"priority allows the use of [b]internal rooms[/b], rooms [i]within[/i] "
+"another room or rooms.\n"
+"When the [Camera] is within more than one room (regular and internal), the "
+"higher priority room will take precedence. So with for example, a house "
+"inside a terrain 'room', you would make the house higher priority, so that "
+"when the camera is within the house, the house is used as the source room, "
+"but outside the house, the terrain room would be used instead."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:4
+msgid "The RoomManager node is used to control the portal culling system."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:7
+msgid ""
+"In order to utilize the portal occlusion culling system, you must build your "
+"level using [Room]s and [Portal]s. Before these can be used at runtime, they "
+"must undergo a short conversion process to build the [code]room graph[/"
+"code], runtime data needed for portal culling. The [code]room graph[/code] "
+"is controlled by the [RoomManager] node, and the [RoomManager] also contains "
+"settings that are common throughout the portal system."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:15
+msgid ""
+"This function clears all converted data from the [b]room graph[/b]. Use this "
+"before unloading a level, when transitioning from level to level, or "
+"returning to a main menu."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:21
+msgid ""
+"This is the most important function in the whole portal culling system. "
+"Without it, the system cannot function.\n"
+"First it goes through every [Room] that is a child of the [code]room list[/"
+"code] node (and [RoomGroup]s within) and converts and adds it to the "
+"[code]room graph[/code].\n"
+"This works for both [Room] nodes, and [Spatial] nodes that follow a special "
+"naming convention. They should begin with the prefix [i]'Room_'[/i], "
+"followed by the name you wish to give the room, e.g. [i]'Room_lounge'[/i]. "
+"This will automatically convert such [Spatial]s to [Room] nodes for you. "
+"This is useful if you want to build you entire room system in e.g. Blender, "
+"and reimport multiple times as you work on the level.\n"
+"The conversion will try to assign [VisualInstance]s that are children and "
+"grandchildren of the [Room] to the room. These should be given a suitable "
+"[code]portal mode[/code] (see the [CullInstance] documentation). The default "
+"[code]portal mode[/code] is [code]STATIC[/code] - objects which are not "
+"expected to move while the level is played, which will typically be most "
+"objects.\n"
+"The conversion will usually use the geometry of these [VisualInstance]s (and "
+"the [Portal]s) to calculate a convex hull bound for the room. These bounds "
+"will be shown in the editor with a wireframe. Alternatively you can specify "
+"a manual custom bound for any room, see the [Room] documentation.\n"
+"By definition, [Camera]s within a room can see everything else within the "
+"room (that is one advantage to using convex hulls). However, in order to see "
+"from one room into adjacent rooms, you must place [Portal]s, which represent "
+"openings that the camera can see through, like windows and doors.\n"
+"[Portal]s are really just specialized [MeshInstance]s. In fact you will "
+"usually first create a portal by creating a [MeshInstance], especially a "
+"[code]plane[/code] mesh instance. You would move the plane in the editor to "
+"cover a window or doorway, with the front face pointing outward from the "
+"room. To let the conversion process know you want this mesh to be a portal, "
+"again we use a special naming convention. [MeshInstance]s to be converted to "
+"a [Portal] should start with the prefix [i]'Portal_'[/i].\n"
+"You now have a choice - you can leave the name as [i]'Portal_'[/i] and allow "
+"the system to automatically detect the nearest [Room] to link. In most cases "
+"this will work fine.\n"
+"An alternative method is to specify the [Room] to link to manually, "
+"appending a suffix to the portal name, which should be the name of the room "
+"you intend to link to. For example [i]'Portal_lounge'[/i] will attempt to "
+"link to the room named [i]'Room_lounge'[/i].\n"
+"There is a special case here - Godot does not allow two nodes to share the "
+"same name. What if you want to manually have more than one portal leading "
+"into the same room? Surely they will need to both be called, e.g. "
+"[i]'Portal_lounge'[/i]?\n"
+"The solution is a wildcard character. After the room name, if you use the "
+"character [i]'*'[/i], this character and anything following it will be "
+"ignored. So you can use for example [i]'Portal_lounge*0'[/i], "
+"[i]'Portal_lounge*1'[/i] etc.\n"
+"Note that [Portal]s that have already been converted to [Portal] nodes "
+"(rather than [MeshInstance]s) still need to follow the same naming "
+"convention, as they will be relinked each time during conversion.\n"
+"It is recommended that you only place objects in rooms that are desired to "
+"stay within those rooms - i.e. [code]portal mode[/code]s [code]STATIC[/code] "
+"or [code]DYNAMIC[/code] (not crossing portals). [code]GLOBAL[/code] and "
+"[code]ROAMING[/code] objects are best placed in another part of the scene "
+"tree, to avoid confusion. See [CullInstance] for a full description of "
+"portal modes."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:39
+msgid ""
+"Switches the portal culling system on and off.\n"
+"It is important to note that when portal culling is active, it is "
+"responsible for [b]all[/b] the 3d culling. Some editor functionality may be "
+"more difficult to use, so switching the active flag is intended to be used "
+"to make sure your [Room] / [Portal] layout works within the editor.\n"
+"Switching to [code]active[/code] will have no effect when the [code]room "
+"graph[/code] is unloaded (the rooms have not yet been converted)."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:44
+msgid ""
+"Large objects can 'sprawl' over (be present in) more than one room. It can "
+"be useful to visualize which objects are sprawling outside the current "
+"room.\n"
+"Toggling this setting turns this debug view on and off."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:48
+msgid ""
+"Usually we don't want objects that only [b]just[/b] cross a boundary into an "
+"adjacent [Room] to sprawl into that room. To prevent this, each [Portal] has "
+"an extra margin, or tolerance zone where objects can enter without sprawling "
+"to a neighbouring room.\n"
+"In most cases you can set this here for all portals. It is possible to "
+"override the margin for each portal."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:52
+msgid ""
+"When using a partial or full PVS, the gameplay monitor allows you to receive "
+"callbacks when roaming objects or rooms enter or exit the [b]gameplay area[/"
+"b]. The gameplay area is defined as either the primary, or secondary PVS.\n"
+"These callbacks allow you to, for example, reduce processing for objects "
+"that are far from the player, or turn on and off AI.\n"
+"You can either choose to receive callbacks as notifications through the "
+"[code]_notification[/code] function, or as signals.\n"
+"[code]NOTIFICATION_ENTER_GAMEPLAY[/code]\n"
+"[code]NOTIFICATION_EXIT_GAMEPLAY[/code]\n"
+"Signals: [code]\"gameplay_entered\"[/code], [code]\"gameplay_exited\"[/code]"
+msgstr ""
+
+#: doc/classes/RoomManager.xml:60
+msgid ""
+"If enabled, the system will attempt to merge similar meshes (particularly in "
+"terms of materials) within [Room]s during conversion. This can significantly "
+"reduce the number of drawcalls and state changes required during rendering, "
+"albeit at a cost of reduced culling granularity.\n"
+"[b]Note:[/b] This operates at runtime during the conversion process, and "
+"will only operate on exported or running projects, in order to prevent "
+"accidental alteration to the scene and loss of data."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:64
+msgid ""
+"When converting rooms, the editor will warn you if overlap is detected "
+"between rooms. Overlap can interfere with determining the room that cameras "
+"and objects are within. A small amount can be acceptable, depending on your "
+"level. Here you can alter the threshold at which the editor warning appears. "
+"There are no other side effects."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:67
+msgid ""
+"Portal rendering is recursive - each time a portal is seen through an "
+"earlier portal there is some cost. For this reason, and to prevent the "
+"possibility of infinite loops, this setting provides a hard limit on the "
+"recursion depth.\n"
+"[b]Note:[/b] This value is unused when using [code]Full[/code] PVS mode."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:71
+msgid ""
+"Portal culling normally operates using the current [Camera] / [Camera]s, "
+"however for debugging purposes within the editor, you can use this setting "
+"to override this behaviour and force it to use a particular camera to get a "
+"better idea of what the occlusion culling is doing."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:75
+msgid ""
+"Optionally during conversion the potentially visible set (PVS) of rooms that "
+"are potentially visible from each room can be calculated. This can be used "
+"either to aid in dynamic portal culling, or to totally replace portal "
+"culling.\n"
+"In [code]Full[/code] PVS Mode, all objects within the potentially visible "
+"rooms will be frustum culled, and rendered if they are within the view "
+"frustum."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:79
+msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
+"During the conversion process, the geometry of objects within [Room]s, or a "
+"custom specified manual bound, are used to generate a [b]convex hull bound[/"
+"b].\n"
+"This convex hull is [b]required[/b] in the visibility system, and is used "
+"for many purposes. Most importantly, it is used to decide whether the "
+"[Camera] (or an object) is within a [Room]. The convex hull generating "
+"algorithm is good, but occasionally it can create too many (or too few) "
+"planes to give a good representation of the room volume.\n"
+"The [code]room_simplify[/code] value can be used to gain fine control over "
+"this process. It determines how similar planes can be for them to be "
+"considered the same (and duplicates removed). The value can be set between 0 "
+"(no simplification) and 1 (maximum simplification).\n"
+"The value set here is the default for all rooms, but individual rooms can "
+"override this value if desired.\n"
+"The room convex hulls are shown as a wireframe in the editor."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:91
+msgid ""
+"For the [Room] conversion process to succeed, you must point the "
+"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
+"we refer to as the [code]roomlist[/code] (the roomlist is not a special node "
+"type, it is normally just a [Spatial])."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:94
+msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:97
+msgid ""
+"When receiving gameplay callbacks when objects enter and exit gameplay, the "
+"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
+"visible set) of [Room]s, or the secondary PVS (the primary PVS and their "
+"neighbouring [Room]s).\n"
+"Sometimes using the larger gameplay area of the secondary PVS may be "
+"preferable."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:103
+msgid ""
+"Use only [Portal]s at runtime to determine visibility. PVS will not be "
+"generated at [Room]s conversion, and gameplay notifications cannot be used."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:106
+msgid ""
+"Use a combination of PVS and [Portal]s to determine visibility (this is "
+"usually fastest and most accurate)."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:109
+msgid ""
+"Use only the PVS (potentially visible set) of [Room]s to determine "
+"visibility."
+msgstr ""
+
+#: doc/classes/RootMotionView.xml:4
+msgid "Editor-only helper for setting up root motion in [AnimationTree]."
+msgstr ""
+
+#: doc/classes/RootMotionView.xml:7
+msgid ""
+"[i]Root motion[/i] refers to an animation technique where a mesh's skeleton "
+"is used to give impulse to a character. When working with 3D animations, a "
+"popular technique is for animators to use the root skeleton bone to give "
+"motion to the rest of the skeleton. This allows animating characters in a "
+"way where steps actually match the floor below. It also allows precise "
+"interaction with objects during cinematics. See also [AnimationTree].\n"
+"[b]Note:[/b] [RootMotionView] is only visible in the editor. It will be "
+"hidden automatically in the running project, and will also be converted to a "
+"plain [Node] in the running project. This means a script attached to a "
+"[RootMotionView] node [i]must[/i] have [code]extends Node[/code] instead of "
+"[code]extends RootMotionView[/code]. Additionally, it must not be a "
+"[code]@tool[/code] script."
+msgstr ""
+
+#: doc/classes/RootMotionView.xml:11
+msgid ""
+"https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree."
+"html#root-motion"
+msgstr ""
+
+#: doc/classes/RootMotionView.xml:17
+msgid "Path to an [AnimationTree] node to use as a basis for root motion."
+msgstr ""
+
+#: doc/classes/RootMotionView.xml:20
+msgid "The grid's cell size in 3D units."
+msgstr ""
+
+#: doc/classes/RootMotionView.xml:23
+msgid "The grid's color."
+msgstr ""
+
+#: doc/classes/RootMotionView.xml:26
+msgid ""
+"The grid's radius in 3D units. The grid's opacity will fade gradually as the "
+"distance from the origin increases until this [member radius] is reached."
+msgstr ""
+
+#: doc/classes/RootMotionView.xml:29
+msgid ""
+"If [code]true[/code], the grid's points will all be on the same Y coordinate "
+"([i]local[/i] Y = 0). If [code]false[/code], the points' original Y "
+"coordinate is preserved."
+msgstr ""
+
+#: doc/classes/SceneState.xml:4
+msgid "A script interface to a scene file's data."
+msgstr ""
+
+#: doc/classes/SceneState.xml:7
+msgid ""
+"Maintains a list of resources, nodes, exported, and overridden properties, "
+"and built-in scripts associated with a scene.\n"
+"This class cannot be instantiated directly, it is retrieved for a given "
+"scene as the result of [method PackedScene.get_state]."
+msgstr ""
+
+#: doc/classes/SceneState.xml:17
+msgid ""
+"Returns the list of bound parameters for the signal at [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/SceneState.xml:23
+msgid ""
+"Returns the number of signal connections in the scene.\n"
+"The [code]idx[/code] argument used to query connection metadata in other "
+"[code]get_connection_*[/code] methods in the interval [code][0, "
+"get_connection_count() - 1][/code]."
+msgstr ""
+
+#: doc/classes/SceneState.xml:31
+msgid ""
+"Returns the connection flags for the signal at [code]idx[/code]. See [enum "
+"Object.ConnectFlags] constants."
+msgstr ""
+
+#: doc/classes/SceneState.xml:38
+msgid "Returns the method connected to the signal at [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/SceneState.xml:45
+msgid "Returns the name of the signal at [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/SceneState.xml:52
+msgid ""
+"Returns the path to the node that owns the signal at [code]idx[/code], "
+"relative to the root node."
+msgstr ""
+
+#: doc/classes/SceneState.xml:59
+msgid ""
+"Returns the path to the node that owns the method connected to the signal at "
+"[code]idx[/code], relative to the root node."
+msgstr ""
+
+#: doc/classes/SceneState.xml:65
+msgid ""
+"Returns the number of nodes in the scene.\n"
+"The [code]idx[/code] argument used to query node data in other "
+"[code]get_node_*[/code] methods in the interval [code][0, get_node_count() - "
+"1][/code]."
+msgstr ""
+
+#: doc/classes/SceneState.xml:73
+msgid ""
+"Returns the list of group names associated with the node at [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/SceneState.xml:80
+msgid ""
+"Returns the node's index, which is its position relative to its siblings. "
+"This is only relevant and saved in scenes for cases where new nodes are "
+"added to an instanced or inherited scene among siblings from the base scene. "
+"Despite the name, this index is not related to the [code]idx[/code] argument "
+"used here and in other methods."
+msgstr ""
+
+#: doc/classes/SceneState.xml:87
+msgid ""
+"Returns a [PackedScene] for the node at [code]idx[/code] (i.e. the whole "
+"branch starting at this node, with its child nodes and resources), or "
+"[code]null[/code] if the node is not an instance."
+msgstr ""
+
+#: doc/classes/SceneState.xml:94
+msgid ""
+"Returns the path to the represented scene file if the node at [code]idx[/"
+"code] is an [InstancePlaceholder]."
+msgstr ""
+
+#: doc/classes/SceneState.xml:101
+msgid "Returns the name of the node at [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/SceneState.xml:108
+msgid ""
+"Returns the path to the owner of the node at [code]idx[/code], relative to "
+"the root node."
+msgstr ""
+
+#: doc/classes/SceneState.xml:116
+msgid ""
+"Returns the path to the node at [code]idx[/code].\n"
+"If [code]for_parent[/code] is [code]true[/code], returns the path of the "
+"[code]idx[/code] node's parent instead."
+msgstr ""
+
+#: doc/classes/SceneState.xml:124
+msgid ""
+"Returns the number of exported or overridden properties for the node at "
+"[code]idx[/code].\n"
+"The [code]prop_idx[/code] argument used to query node property data in other "
+"[code]get_node_property_*[/code] methods in the interval [code][0, "
+"get_node_property_count() - 1][/code]."
+msgstr ""
+
+#: doc/classes/SceneState.xml:133
+msgid ""
+"Returns the name of the property at [code]prop_idx[/code] for the node at "
+"[code]idx[/code]."
+msgstr ""
+
+#: doc/classes/SceneState.xml:141
+msgid ""
+"Returns the value of the property at [code]prop_idx[/code] for the node at "
+"[code]idx[/code]."
+msgstr ""
+
+#: doc/classes/SceneState.xml:148
+msgid "Returns the type of the node at [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/SceneState.xml:155
+msgid ""
+"Returns [code]true[/code] if the node at [code]idx[/code] is an "
+"[InstancePlaceholder]."
+msgstr ""
+
+#: doc/classes/SceneState.xml:161
+msgid ""
+"If passed to [method PackedScene.instance], blocks edits to the scene state."
+msgstr ""
+
+#: doc/classes/SceneState.xml:164
+msgid ""
+"If passed to [method PackedScene.instance], provides inherited scene "
+"resources to the local scene.\n"
+"[b]Note:[/b] Only available in editor builds."
+msgstr ""
+
+#: doc/classes/SceneState.xml:168
+msgid ""
+"If passed to [method PackedScene.instance], provides local scene resources "
+"to the local scene. Only the main scene should receive the main edit state.\n"
+"[b]Note:[/b] Only available in editor builds."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:4
+msgid "Manages the game loop via a hierarchy of nodes."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:7
+msgid ""
+"As one of the most important classes, the [SceneTree] manages the hierarchy "
+"of nodes in a scene as well as scenes themselves. Nodes can be added, "
+"retrieved and removed. The whole scene tree (and thus the current scene) can "
+"be paused. Scenes can be loaded, switched and reloaded.\n"
+"You can also use the [SceneTree] to organize your nodes into groups: every "
+"node can be assigned as many groups as you want to create, e.g. an \"enemy\" "
+"group. You can then iterate these groups or even call methods and set "
+"properties on all the group's members at once.\n"
+"[SceneTree] is the default [MainLoop] implementation used by scenes, and is "
+"thus in charge of the game loop."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:12
+msgid ""
+"https://docs.godotengine.org/en/3.4/getting_started/step_by_step/scene_tree."
+"html"
+msgstr ""
+
+#: doc/classes/SceneTree.xml:13
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/viewports/multiple_resolutions."
+"html"
+msgstr ""
+
+#: doc/classes/SceneTree.xml:21
+msgid ""
+"Calls [code]method[/code] on each member of the given group. You can pass "
+"arguments to [code]method[/code] by specifying them at the end of the method "
+"call. This method is equivalent of calling [method call_group_flags] with "
+"[constant GROUP_CALL_DEFAULT] flag.\n"
+"[b]Note:[/b] [code]method[/code] may only have 5 arguments at most (7 "
+"arguments passed to this method in total).\n"
+"[b]Note:[/b] Due to design limitations, [method call_group] will fail "
+"silently if one of the arguments is [code]null[/code].\n"
+"[b]Note:[/b] [method call_group] will always call methods with an one-frame "
+"delay, in a way similar to [method Object.call_deferred]. To call methods "
+"immediately, use [method call_group_flags] with the [constant "
+"GROUP_CALL_REALTIME] flag."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:33
+msgid ""
+"Calls [code]method[/code] on each member of the given group, respecting the "
+"given [enum GroupCallFlags]. You can pass arguments to [code]method[/code] "
+"by specifying them at the end of the method call.\n"
+"[b]Note:[/b] [code]method[/code] may only have 5 arguments at most (8 "
+"arguments passed to this method in total).\n"
+"[b]Note:[/b] Due to design limitations, [method call_group_flags] will fail "
+"silently if one of the arguments is [code]null[/code].\n"
+"[codeblock]\n"
+"# Call the method immediately and in reverse order.\n"
+"get_tree().call_group_flags(SceneTree.GROUP_CALL_REALTIME | SceneTree."
+"GROUP_CALL_REVERSE, \"bases\", \"destroy\")\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/SceneTree.xml:46
+msgid ""
+"Changes the running scene to the one at the given [code]path[/code], after "
+"loading it into a [PackedScene] and creating a new instance.\n"
+"Returns [constant OK] on success, [constant ERR_CANT_OPEN] if the "
+"[code]path[/code] cannot be loaded into a [PackedScene], or [constant "
+"ERR_CANT_CREATE] if that scene cannot be instantiated.\n"
+"[b]Note:[/b] The scene change is deferred, which means that the new scene "
+"node is added on the next idle frame. You won't be able to access it "
+"immediately after the [method change_scene] call."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:55
+msgid ""
+"Changes the running scene to a new instance of the given [PackedScene].\n"
+"Returns [constant OK] on success or [constant ERR_CANT_CREATE] if the scene "
+"cannot be instantiated.\n"
+"[b]Note:[/b] The scene change is deferred, which means that the new scene "
+"node is added on the next idle frame. You won't be able to access it "
+"immediately after the [method change_scene_to] call."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:65
+msgid ""
+"Returns a [SceneTreeTimer] which will [signal SceneTreeTimer.timeout] after "
+"the given time in seconds elapsed in this [SceneTree]. If "
+"[code]pause_mode_process[/code] is set to [code]false[/code], pausing the "
+"[SceneTree] will also pause the timer.\n"
+"Commonly used to create a one-shot delay timer as in the following example:\n"
+"[codeblock]\n"
+"func some_function():\n"
+" print(\"start\")\n"
+" yield(get_tree().create_timer(1.0), \"timeout\")\n"
+" print(\"end\")\n"
+"[/codeblock]\n"
+"The timer will be automatically freed after its time elapses."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:79
+msgid ""
+"Returns the current frame number, i.e. the total frame count since the "
+"application started."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:85
+msgid ""
+"Returns the peer IDs of all connected peers of this [SceneTree]'s [member "
+"network_peer]."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:91
+msgid "Returns the unique peer ID of this [SceneTree]'s [member network_peer]."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:97
+msgid "Returns the number of nodes in this [SceneTree]."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:104
+msgid "Returns a list of all nodes assigned to the given group."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:110
+msgid "Returns the sender's peer ID for the most recently received RPC call."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:117
+msgid "Returns [code]true[/code] if the given group exists."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:129
+msgid ""
+"Returns [code]true[/code] if the most recent [InputEvent] was marked as "
+"handled with [method set_input_as_handled]."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:135
+msgid ""
+"Returns [code]true[/code] if this [SceneTree]'s [member network_peer] is in "
+"server mode (listening for connections)."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:143
+msgid "Sends the given notification to all members of the [code]group[/code]."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:152
+msgid ""
+"Sends the given notification to all members of the [code]group[/code], "
+"respecting the given [enum GroupCallFlags]."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:159
+msgid ""
+"Queues the given object for deletion, delaying the call to [method Object."
+"free] to after the current frame."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:166
+msgid ""
+"Quits the application at the end of the current iteration. A process "
+"[code]exit_code[/code] can optionally be passed as an argument. If this "
+"argument is [code]0[/code] or greater, it will override the [member OS."
+"exit_code] defined before quitting the application.\n"
+"[b]Note:[/b] On iOS this method doesn't work. Instead, as recommended by the "
+"iOS Human Interface Guidelines, the user is expected to close apps via the "
+"Home button."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:173
+msgid ""
+"Reloads the currently active scene.\n"
+"Returns [constant OK] on success, [constant ERR_UNCONFIGURED] if no [member "
+"current_scene] was defined yet, [constant ERR_CANT_OPEN] if [member "
+"current_scene] cannot be loaded into a [PackedScene], or [constant "
+"ERR_CANT_CREATE] if the scene cannot be instantiated."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:181
+msgid ""
+"If [code]true[/code], the application automatically accepts quitting. "
+"Enabled by default.\n"
+"For mobile platforms, see [method set_quit_on_go_back]."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:191
+msgid ""
+"Sets the given [code]property[/code] to [code]value[/code] on all members of "
+"the given group."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:201
+msgid ""
+"Sets the given [code]property[/code] to [code]value[/code] on all members of "
+"the given group, respecting the given [enum GroupCallFlags]."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:207
+msgid "Marks the most recent [InputEvent] as handled."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:214
+msgid ""
+"If [code]true[/code], the application quits automatically on going back (e."
+"g. on Android). Enabled by default.\n"
+"To handle 'Go Back' button when this option is disabled, use [constant "
+"MainLoop.NOTIFICATION_WM_GO_BACK_REQUEST]."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:225
+msgid ""
+"Configures screen stretching to the given [enum StretchMode], [enum "
+"StretchAspect], minimum size and [code]scale[/code]."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:231
+msgid "The current scene."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:234
+msgid ""
+"If [code]true[/code], collision shapes will be visible when running the game "
+"from the editor for debugging purposes."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:237
+msgid ""
+"If [code]true[/code], navigation polygons will be visible when running the "
+"game from the editor for debugging purposes."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:240
+msgid "The root of the edited scene."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:243
+msgid "The default [MultiplayerAPI] instance for this [SceneTree]."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:246
+msgid ""
+"If [code]true[/code] (default value), enables automatic polling of the "
+"[MultiplayerAPI] for this SceneTree during [signal idle_frame].\n"
+"If [code]false[/code], you need to manually call [method MultiplayerAPI."
+"poll] to process network packets and deliver RPCs/RSETs. This allows running "
+"RPCs/RSETs in a different loop (e.g. physics, thread, specific time step) "
+"and for manual [Mutex] protection when accessing the [MultiplayerAPI] from "
+"threads."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:250
+msgid ""
+"The peer object to handle the RPC system (effectively enabling networking "
+"when set). Depending on the peer itself, the [SceneTree] will become a "
+"network server (check with [method is_network_server]) and will set the root "
+"node's network mode to master, or it will become a regular peer with the "
+"root node set to puppet. All child nodes are set to inherit the network mode "
+"by default. Handling of networking-related events (connection, "
+"disconnection, new clients) is done by connecting to [SceneTree]'s signals."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:253
+msgid ""
+"If [code]true[/code], the [SceneTree] is paused. Doing so will have the "
+"following behavior:\n"
+"- 2D and 3D physics will be stopped. This includes signals and collision "
+"detection.\n"
+"- [method Node._process], [method Node._physics_process] and [method Node."
+"_input] will not be called anymore in nodes."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:258
+msgid ""
+"If [code]true[/code], the [SceneTree]'s [member network_peer] refuses new "
+"incoming connections."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:261
+msgid "The [SceneTree]'s root [Viewport]."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:264
+msgid "If [code]true[/code], font oversampling is used."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:270
+msgid ""
+"Emitted whenever this [SceneTree]'s [member network_peer] successfully "
+"connected to a server. Only emitted on clients."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:275
+msgid ""
+"Emitted whenever this [SceneTree]'s [member network_peer] fails to establish "
+"a connection to a server. Only emitted on clients."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:282
+msgid ""
+"Emitted when files are dragged from the OS file manager and dropped in the "
+"game window. The arguments are a list of file paths and the identifier of "
+"the screen where the drag originated."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:289
+msgid "Emitted whenever global menu item is clicked."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:294
+msgid ""
+"Emitted immediately before [method Node._process] is called on every node in "
+"the [SceneTree]."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:300
+msgid ""
+"Emitted whenever this [SceneTree]'s [member network_peer] connects with a "
+"new peer. ID is the peer ID of the new peer. Clients get notified when other "
+"clients connect to the same server. Upon connecting to a server, a client "
+"also receives this signal for the server (with ID being 1)."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:306
+msgid ""
+"Emitted whenever this [SceneTree]'s [member network_peer] disconnects from a "
+"peer. Clients get notified when other clients disconnect from the same "
+"server."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:312
+msgid "Emitted whenever a node is added to the [SceneTree]."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:318
+msgid ""
+"Emitted when a node's configuration changed. Only emitted in [code]tool[/"
+"code] mode."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:324
+msgid "Emitted whenever a node is removed from the [SceneTree]."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:330
+msgid "Emitted whenever a node is renamed."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:335
+msgid ""
+"Emitted immediately before [method Node._physics_process] is called on every "
+"node in the [SceneTree]."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:340
+msgid ""
+"Emitted when the screen resolution (fullscreen) or window size (windowed) "
+"changes."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:345
+msgid ""
+"Emitted whenever this [SceneTree]'s [member network_peer] disconnected from "
+"server. Only emitted on clients."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:350
+msgid ""
+"Emitted whenever the [SceneTree] hierarchy changed (children being moved or "
+"renamed, etc.)."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:356
+msgid "Call a group with no flags (default)."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:359
+msgid "Call a group in reverse scene order."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:362
+msgid "Call a group immediately (calls are normally made on idle)."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:365
+msgid "Call a group only once even if the call is executed many times."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:368
+msgid "No stretching."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:371
+msgid "Render stretching in higher resolution (interpolated)."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:374
+msgid ""
+"Keep the specified display resolution. No interpolation. Content may appear "
+"pixelated."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:377
+msgid ""
+"Fill the window with the content stretched to cover excessive space. Content "
+"may appear stretched."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:380
+msgid ""
+"Retain the same aspect ratio by padding with black bars on either axis. This "
+"prevents distortion."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:383
+msgid ""
+"Expand vertically. Left/right black bars may appear if the window is too "
+"wide."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:386
+msgid ""
+"Expand horizontally. Top/bottom black bars may appear if the window is too "
+"tall."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:389
+msgid ""
+"Expand in both directions, retaining the same aspect ratio. This prevents "
+"distortion while avoiding black bars."
+msgstr ""
+
+#: doc/classes/SceneTreeTimer.xml:4
+msgid "One-shot timer."
+msgstr ""
+
+#: doc/classes/SceneTreeTimer.xml:7
+msgid ""
+"A one-shot timer managed by the scene tree, which emits [signal timeout] on "
+"completion. See also [method SceneTree.create_timer].\n"
+"As opposed to [Timer], it does not require the instantiation of a node. "
+"Commonly used to create a one-shot delay timer as in the following example:\n"
+"[codeblock]\n"
+"func some_function():\n"
+" print(\"Timer started.\")\n"
+" yield(get_tree().create_timer(1.0), \"timeout\")\n"
+" print(\"Timer ended.\")\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/SceneTreeTimer.xml:22
+msgid "The time remaining."
+msgstr ""
+
+#: doc/classes/SceneTreeTimer.xml:28 doc/classes/Timer.xml:61
+msgid "Emitted when the timer reaches 0."
+msgstr ""
+
+#: doc/classes/Script.xml:4
+msgid "A class stored as a resource."
+msgstr ""
+
+#: doc/classes/Script.xml:7
+msgid ""
+"A class stored as a resource. A script extends the functionality of all "
+"objects that instance it.\n"
+"The [code]new[/code] method of a script subclass creates a new instance. "
+"[method Object.set_script] extends an existing object, if that object's "
+"class matches one of the script's base classes."
+msgstr ""
+
+#: doc/classes/Script.xml:11
+msgid ""
+"https://docs.godotengine.org/en/3.4/getting_started/step_by_step/scripting."
+"html"
+msgstr ""
+
+#: doc/classes/Script.xml:17
+msgid "Returns [code]true[/code] if the script can be instanced."
+msgstr ""
+
+#: doc/classes/Script.xml:23
+msgid "Returns the script directly inherited by this script."
+msgstr ""
+
+#: doc/classes/Script.xml:29
+msgid "Returns the script's base type."
+msgstr ""
+
+#: doc/classes/Script.xml:36
+msgid "Returns the default value of the specified property."
+msgstr ""
+
+#: doc/classes/Script.xml:42
+msgid "Returns a dictionary containing constant names and their values."
+msgstr ""
+
+#: doc/classes/Script.xml:48
+msgid "Returns the list of methods in this [Script]."
+msgstr ""
+
+#: doc/classes/Script.xml:54
+msgid "Returns the list of properties in this [Script]."
+msgstr ""
+
+#: doc/classes/Script.xml:60
+msgid "Returns the list of user signals defined in this [Script]."
+msgstr ""
+
+#: doc/classes/Script.xml:67
+msgid ""
+"Returns [code]true[/code] if the script, or a base class, defines a signal "
+"with the given name."
+msgstr ""
+
+#: doc/classes/Script.xml:73
+msgid "Returns [code]true[/code] if the script contains non-empty source code."
+msgstr ""
+
+#: doc/classes/Script.xml:80
+msgid ""
+"Returns [code]true[/code] if [code]base_object[/code] is an instance of this "
+"script."
+msgstr ""
+
+#: doc/classes/Script.xml:86
+msgid ""
+"Returns [code]true[/code] if the script is a tool script. A tool script can "
+"run in the editor."
+msgstr ""
+
+#: doc/classes/Script.xml:93
+msgid "Reloads the script's class implementation. Returns an error code."
+msgstr ""
+
+#: doc/classes/Script.xml:99
+msgid ""
+"The script source code or an empty string if source code is not available. "
+"When set, does not reload the class implementation automatically."
+msgstr ""
+
+#: doc/classes/ScriptCreateDialog.xml:4
+msgid "The Editor's popup dialog for creating new [Script] files."
+msgstr ""
+
+#: doc/classes/ScriptCreateDialog.xml:7
+msgid ""
+"The [ScriptCreateDialog] creates script files according to a given template "
+"for a given scripting language. The standard use is to configure its fields "
+"prior to calling one of the [method Popup.popup] methods.\n"
+"[codeblock]\n"
+"func _ready():\n"
+" dialog.config(\"Node\", \"res://new_node.gd\") # For in-engine types\n"
+" dialog.config(\"\\\"res://base_node.gd\\\"\", \"res://derived_node.gd\") "
+"# For script types\n"
+" dialog.popup_centered()\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/ScriptCreateDialog.xml:25
+msgid "Prefills required fields to configure the ScriptCreateDialog for use."
+msgstr ""
+
+#: doc/classes/ScriptCreateDialog.xml:40
+msgid "Emitted when the user clicks the OK button."
+msgstr ""
+
+#: doc/classes/ScriptEditor.xml:4
+msgid "Godot editor's script editor."
+msgstr ""
+
+#: doc/classes/ScriptEditor.xml:7
+msgid ""
+"[b]Note:[/b] This class shouldn't be instantiated directly. Instead, access "
+"the singleton using [method EditorInterface.get_script_editor]."
+msgstr ""
+
+#: doc/classes/ScriptEditor.xml:31
+msgid "Returns a [Script] that is currently active in editor."
+msgstr ""
+
+#: doc/classes/ScriptEditor.xml:44
+msgid ""
+"Returns an array with all [Script] objects which are currently open in "
+"editor."
+msgstr ""
+
+#: doc/classes/ScriptEditor.xml:51
+msgid "Goes to the specified line in the current script."
+msgstr ""
+
+#: doc/classes/ScriptEditor.xml:59
+msgid ""
+"Opens the script create dialog. The script will extend [code]base_name[/"
+"code]. The file extension can be omitted from [code]base_path[/code]. It "
+"will be added based on the selected scripting language."
+msgstr ""
+
+#: doc/classes/ScriptEditor.xml:67
+msgid ""
+"Emitted when user changed active script. Argument is a freshly activated "
+"[Script]."
+msgstr ""
+
+#: doc/classes/ScriptEditor.xml:73
+msgid ""
+"Emitted when editor is about to close the active script. Argument is a "
+"[Script] that is going to be closed."
+msgstr ""
+
+#: doc/classes/ScrollBar.xml:4
+msgid "Base class for scroll bars."
+msgstr ""
+
+#: doc/classes/ScrollBar.xml:7
+msgid ""
+"Scrollbars are a [Range]-based [Control], that display a draggable area (the "
+"size of the page). Horizontal ([HScrollBar]) and Vertical ([VScrollBar]) "
+"versions are available."
+msgstr ""
+
+#: doc/classes/ScrollBar.xml:15
+msgid ""
+"Overrides the step used when clicking increment and decrement buttons or "
+"when using arrow keys when the [ScrollBar] is focused."
+msgstr ""
+
+#: doc/classes/ScrollBar.xml:23
+msgid "Emitted when the scrollbar is being scrolled."
+msgstr ""
+
+#: doc/classes/ScrollContainer.xml:4
+msgid "A helper node for displaying scrollable elements such as lists."
+msgstr ""
+
+#: doc/classes/ScrollContainer.xml:7
+msgid ""
+"A ScrollContainer node meant to contain a [Control] child. ScrollContainers "
+"will automatically create a scrollbar child ([HScrollBar], [VScrollBar], or "
+"both) when needed and will only draw the Control within the ScrollContainer "
+"area. Scrollbars will automatically be drawn at the right (for vertical) or "
+"bottom (for horizontal) and will enable dragging to move the viewable "
+"Control (and its children) within the ScrollContainer. Scrollbars will also "
+"automatically resize the grabber based on the [member Control.rect_min_size] "
+"of the Control relative to the ScrollContainer. Works great with a [Panel] "
+"control. You can set [code]EXPAND[/code] on the children's size flags, so "
+"they will upscale to the ScrollContainer's size if it's larger (scroll is "
+"invisible for the chosen dimension)."
+msgstr ""
+
+#: doc/classes/ScrollContainer.xml:16
+msgid ""
+"Ensures the given [code]control[/code] is visible (must be a direct or "
+"indirect child of the ScrollContainer). Used by [member follow_focus]."
+msgstr ""
+
+#: doc/classes/ScrollContainer.xml:22
+msgid ""
+"Returns the horizontal scrollbar [HScrollBar] of this [ScrollContainer].\n"
+"[b]Warning:[/b] This is a required internal node, removing and freeing it "
+"may cause a crash. If you wish to disable the horizontal scrollbar, use "
+"[member scroll_horizontal_enabled]. If you want to only hide it instead, use "
+"its [member CanvasItem.visible] property."
+msgstr ""
+
+#: doc/classes/ScrollContainer.xml:29
+msgid ""
+"Returns the vertical scrollbar [VScrollBar] of this [ScrollContainer].\n"
+"[b]Warning:[/b] This is a required internal node, removing and freeing it "
+"may cause a crash. If you wish to disable the vertical scrollbar, use "
+"[member scroll_vertical_enabled]. If you want to only hide it instead, use "
+"its [member CanvasItem.visible] property."
+msgstr ""
+
+#: doc/classes/ScrollContainer.xml:36
+msgid ""
+"If [code]true[/code], the ScrollContainer will automatically scroll to "
+"focused children (including indirect children) to make sure they are fully "
+"visible."
+msgstr ""
+
+#: doc/classes/ScrollContainer.xml:42
+msgid "The current horizontal scroll value."
+msgstr ""
+
+#: doc/classes/ScrollContainer.xml:45
+msgid "If [code]true[/code], enables horizontal scrolling."
+msgstr ""
+
+#: doc/classes/ScrollContainer.xml:48
+msgid "The current vertical scroll value."
+msgstr ""
+
+#: doc/classes/ScrollContainer.xml:51
+msgid "If [code]true[/code], enables vertical scrolling."
+msgstr ""
+
+#: doc/classes/ScrollContainer.xml:57
+msgid "Emitted when scrolling stops."
+msgstr ""
+
+#: doc/classes/ScrollContainer.xml:62
+msgid "Emitted when scrolling is started."
+msgstr ""
+
+#: doc/classes/ScrollContainer.xml:70
+msgid "The background [StyleBox] of the [ScrollContainer]."
+msgstr ""
+
+#: doc/classes/SegmentShape2D.xml:4
+msgid "Segment shape for 2D collisions."
+msgstr ""
+
+#: doc/classes/SegmentShape2D.xml:7
+msgid ""
+"Segment shape for 2D collisions. Consists of two points, [code]a[/code] and "
+"[code]b[/code]."
+msgstr ""
+
+#: doc/classes/SegmentShape2D.xml:15
+msgid "The segment's first point position."
+msgstr ""
+
+#: doc/classes/SegmentShape2D.xml:18
+msgid "The segment's second point position."
+msgstr ""
+
+#: doc/classes/Semaphore.xml:4
+msgid "A synchronization semaphore."
+msgstr ""
+
+#: doc/classes/Semaphore.xml:7
+msgid ""
+"A synchronization semaphore which can be used to synchronize multiple "
+"[Thread]s. Initialized to zero on creation. Be careful to avoid deadlocks. "
+"For a binary version, see [Mutex]."
+msgstr ""
+
+#: doc/classes/Semaphore.xml:16
+msgid ""
+"Lowers the [Semaphore], allowing one more thread in. Returns [constant OK] "
+"on success, [constant ERR_BUSY] otherwise."
+msgstr ""
+
+#: doc/classes/Semaphore.xml:22
+msgid ""
+"Tries to wait for the [Semaphore], if its value is zero, blocks until non-"
+"zero. Returns [constant OK] on success, [constant ERR_BUSY] otherwise."
+msgstr ""
+
+#: doc/classes/Separator.xml:4
+msgid "Base class for separators."
+msgstr ""
+
+#: doc/classes/Separator.xml:7
+msgid ""
+"Separator is a [Control] used for separating other controls. It's purely a "
+"visual decoration. Horizontal ([HSeparator]) and Vertical ([VSeparator]) "
+"versions are available."
+msgstr ""
+
+#: doc/classes/Shader.xml:4
+msgid "A custom shader program."
+msgstr ""
+
+#: doc/classes/Shader.xml:7
+msgid ""
+"This class allows you to define a custom shader program that can be used by "
+"a [ShaderMaterial]. Shaders allow you to write your own custom behavior for "
+"rendering objects or updating particle information. For a detailed "
+"explanation and usage, please see the tutorials linked below."
+msgstr ""
+
+#: doc/classes/Shader.xml:10 doc/classes/ShaderMaterial.xml:11
+msgid "https://docs.godotengine.org/en/3.4/tutorials/shading/index.html"
+msgstr ""
+
+#: doc/classes/Shader.xml:11
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/shading/your_first_shader/"
+"what_are_shaders.html"
+msgstr ""
+
+#: doc/classes/Shader.xml:18
+msgid ""
+"Returns the texture that is set as default for the specified parameter.\n"
+"[b]Note:[/b] [code]param[/code] must match the name of the uniform in the "
+"code exactly."
+msgstr ""
+
+#: doc/classes/Shader.xml:25
+msgid ""
+"Returns the shader mode for the shader, either [constant MODE_CANVAS_ITEM], "
+"[constant MODE_SPATIAL] or [constant MODE_PARTICLES]."
+msgstr ""
+
+#: doc/classes/Shader.xml:32
+msgid ""
+"Returns [code]true[/code] if the shader has this param defined as a uniform "
+"in its code.\n"
+"[b]Note:[/b] [code]param[/code] must match the name of the uniform in the "
+"code exactly."
+msgstr ""
+
+#: doc/classes/Shader.xml:41
+msgid ""
+"Sets the default texture to be used with a texture uniform. The default is "
+"used if a texture is not set in the [ShaderMaterial].\n"
+"[b]Note:[/b] [code]param[/code] must match the name of the uniform in the "
+"code exactly."
+msgstr ""
+
+#: doc/classes/Shader.xml:48
+msgid ""
+"Returns the shader's code as the user has written it, not the full generated "
+"code used internally."
+msgstr ""
+
+#: doc/classes/Shader.xml:51
+msgid ""
+"Returns the shader's custom defines. Custom defines can be used in Godot to "
+"add GLSL preprocessor directives (e.g: extensions) required for the shader "
+"logic.\n"
+"[b]Note:[/b] Custom defines are not validated by the Godot shader parser, so "
+"care should be taken when using them."
+msgstr ""
+
+#: doc/classes/Shader.xml:57
+msgid "Mode used to draw all 3D objects."
+msgstr ""
+
+#: doc/classes/Shader.xml:60
+msgid "Mode used to draw all 2D objects."
+msgstr ""
+
+#: doc/classes/Shader.xml:63
+msgid ""
+"Mode used to calculate particle information on a per-particle basis. Not "
+"used for drawing."
+msgstr ""
+
+#: doc/classes/ShaderMaterial.xml:4
+msgid "A material that uses a custom [Shader] program."
+msgstr ""
+
+#: doc/classes/ShaderMaterial.xml:7
+msgid ""
+"A material that uses a custom [Shader] program to render either items to "
+"screen or process particles. You can create multiple materials for the same "
+"shader but configure different values for the uniforms defined in the "
+"shader.\n"
+"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
+"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
+"emit light in a [GIProbe]."
+msgstr ""
+
+#: doc/classes/ShaderMaterial.xml:18
+msgid ""
+"Returns the current value set for this material of a uniform in the shader."
+msgstr ""
+
+#: doc/classes/ShaderMaterial.xml:25
+msgid ""
+"Returns [code]true[/code] if the property identified by [code]name[/code] "
+"can be reverted to a default value."
+msgstr ""
+
+#: doc/classes/ShaderMaterial.xml:32
+msgid ""
+"Returns the default value of the material property with given [code]name[/"
+"code]."
+msgstr ""
+
+#: doc/classes/ShaderMaterial.xml:40
+msgid ""
+"Changes the value set for this material of a uniform in the shader.\n"
+"[b]Note:[/b] [code]param[/code] must match the name of the uniform in the "
+"code exactly."
+msgstr ""
+
+#: doc/classes/ShaderMaterial.xml:47
+msgid "The [Shader] program used to render this material."
+msgstr ""
+
+#: doc/classes/Shape.xml:4
+msgid "Base class for all 3D shape resources."
+msgstr ""
+
+#: doc/classes/Shape.xml:7
+msgid ""
+"Base class for all 3D shape resources. Nodes that inherit from this can be "
+"used as shapes for a [PhysicsBody] or [Area] objects."
+msgstr ""
+
+#: doc/classes/Shape.xml:16
+msgid ""
+"Returns the [ArrayMesh] used to draw the debug collision for this [Shape]."
+msgstr ""
+
+#: doc/classes/Shape.xml:22
+msgid ""
+"The collision margin for the shape. Used in Bullet Physics only.\n"
+"Collision margins allow collision detection to be more efficient by adding "
+"an extra shell around shapes. Collision algorithms are more expensive when "
+"objects overlap by more than their margin, so a higher value for margins is "
+"better for performance, at the cost of accuracy around edges as it makes "
+"them less sharp."
+msgstr ""
+
+#: doc/classes/Shape2D.xml:4
+msgid "Base class for all 2D shapes."
+msgstr ""
+
+#: doc/classes/Shape2D.xml:7
+msgid "Base class for all 2D shapes. All 2D shape types inherit from this."
+msgstr ""
+
+#: doc/classes/Shape2D.xml:19
+msgid ""
+"Returns [code]true[/code] if this shape is colliding with another.\n"
+"This method needs the transformation matrix for this shape "
+"([code]local_xform[/code]), the shape to check collisions with "
+"([code]with_shape[/code]), and the transformation matrix of that shape "
+"([code]shape_xform[/code])."
+msgstr ""
+
+#: doc/classes/Shape2D.xml:29
+msgid ""
+"Returns a list of the points where this shape touches another. If there are "
+"no collisions the list is empty.\n"
+"This method needs the transformation matrix for this shape "
+"([code]local_xform[/code]), the shape to check collisions with "
+"([code]with_shape[/code]), and the transformation matrix of that shape "
+"([code]shape_xform[/code])."
+msgstr ""
+
+#: doc/classes/Shape2D.xml:41
+msgid ""
+"Returns whether this shape would collide with another, if a given movement "
+"was applied.\n"
+"This method needs the transformation matrix for this shape "
+"([code]local_xform[/code]), the movement to test on this shape "
+"([code]local_motion[/code]), the shape to check collisions with "
+"([code]with_shape[/code]), the transformation matrix of that shape "
+"([code]shape_xform[/code]), and the movement to test onto the other object "
+"([code]shape_motion[/code])."
+msgstr ""
+
+#: doc/classes/Shape2D.xml:53
+msgid ""
+"Returns a list of the points where this shape would touch another, if a "
+"given movement was applied. If there are no collisions the list is empty.\n"
+"This method needs the transformation matrix for this shape "
+"([code]local_xform[/code]), the movement to test on this shape "
+"([code]local_motion[/code]), the shape to check collisions with "
+"([code]with_shape[/code]), the transformation matrix of that shape "
+"([code]shape_xform[/code]), and the movement to test onto the other object "
+"([code]shape_motion[/code])."
+msgstr ""
+
+#: doc/classes/Shape2D.xml:62
+msgid ""
+"Draws a solid shape onto a [CanvasItem] with the [VisualServer] API filled "
+"with the specified [code]color[/code]. The exact drawing method is specific "
+"for each shape and cannot be configured."
+msgstr ""
+
+#: doc/classes/Shape2D.xml:68
+msgid "The shape's custom solver bias."
+msgstr ""
+
+#: doc/classes/ShortCut.xml:4
+msgid "A shortcut for binding input."
+msgstr ""
+
+#: doc/classes/ShortCut.xml:7
+msgid ""
+"A shortcut for binding input.\n"
+"Shortcuts are commonly used for interacting with a [Control] element from a "
+"[InputEvent]."
+msgstr ""
+
+#: doc/classes/ShortCut.xml:16
+msgid "Returns the shortcut's [InputEvent] as a [String]."
+msgstr ""
+
+#: doc/classes/ShortCut.xml:23
+msgid ""
+"Returns [code]true[/code] if the shortcut's [InputEvent] equals [code]event[/"
+"code]."
+msgstr ""
+
+#: doc/classes/ShortCut.xml:29
+msgid "If [code]true[/code], this shortcut is valid."
+msgstr ""
+
+#: doc/classes/ShortCut.xml:35
+msgid ""
+"The shortcut's [InputEvent].\n"
+"Generally the [InputEvent] is a keyboard key, though it can be any "
+"[InputEvent]."
+msgstr ""
+
+#: doc/classes/Skeleton.xml:4
+msgid "Skeleton for characters and animated objects."
+msgstr ""
+
+#: doc/classes/Skeleton.xml:7
+msgid ""
+"Skeleton provides a hierarchical interface for managing bones, including "
+"pose, rest and animation (see [Animation]). It can also use ragdoll "
+"physics.\n"
+"The overall transform of a bone with respect to the skeleton is determined "
+"by the following hierarchical order: rest pose, custom pose and pose.\n"
+"Note that \"global pose\" below refers to the overall transform of the bone "
+"with respect to skeleton, so it not the actual global/world transform of the "
+"bone."
+msgstr ""
+
+#: doc/classes/Skeleton.xml:20
+msgid ""
+"Adds a bone, with name [code]name[/code]. [method get_bone_count] will "
+"become the bone index."
+msgstr ""
+
+#: doc/classes/Skeleton.xml:28 doc/classes/Skeleton.xml:109
+#: doc/classes/Skeleton.xml:212
+msgid "[i]Deprecated soon.[/i]"
+msgstr ""
+
+#: doc/classes/Skeleton.xml:34
+msgid "Clear all the bones in this skeleton."
+msgstr ""
+
+#: doc/classes/Skeleton.xml:46
+msgid "Returns the bone index that matches [code]name[/code] as its name."
+msgstr ""
+
+#: doc/classes/Skeleton.xml:52
+msgid "Returns the amount of bones in the skeleton."
+msgstr ""
+
+#: doc/classes/Skeleton.xml:59
+msgid ""
+"Returns the custom pose of the specified bone. Custom pose is applied on top "
+"of the rest pose."
+msgstr ""
+
+#: doc/classes/Skeleton.xml:66
+msgid ""
+"Returns the overall transform of the specified bone, with respect to the "
+"skeleton. Being relative to the skeleton frame, this is not the actual "
+"\"global\" transform of the bone."
+msgstr ""
+
+#: doc/classes/Skeleton.xml:73
+msgid ""
+"Returns the overall transform of the specified bone, with respect to the "
+"skeleton, but without any global pose overrides. Being relative to the "
+"skeleton frame, this is not the actual \"global\" transform of the bone."
+msgstr ""
+
+#: doc/classes/Skeleton.xml:80
+msgid "Returns the name of the bone at index [code]index[/code]."
+msgstr ""
+
+#: doc/classes/Skeleton.xml:87
+msgid ""
+"Returns the bone index which is the parent of the bone at [code]bone_idx[/"
+"code]. If -1, then bone has no parent.\n"
+"[b]Note:[/b] The parent bone returned will always be less than "
+"[code]bone_idx[/code]."
+msgstr ""
+
+#: doc/classes/Skeleton.xml:95
+msgid ""
+"Returns the pose transform of the specified bone. Pose is applied on top of "
+"the custom pose, which is applied on top the rest pose."
+msgstr ""
+
+#: doc/classes/Skeleton.xml:102
+msgid "Returns the rest transform for a bone [code]bone_idx[/code]."
+msgstr ""
+
+#: doc/classes/Skeleton.xml:187
+msgid ""
+"Sets the bone index [code]parent_idx[/code] as the parent of the bone at "
+"[code]bone_idx[/code]. If -1, then bone has no parent.\n"
+"[b]Note:[/b] [code]parent_idx[/code] must be less than [code]bone_idx[/code]."
+msgstr ""
+
+#: doc/classes/Skeleton.xml:196
+msgid "Sets the pose transform for bone [code]bone_idx[/code]."
+msgstr ""
+
+#: doc/classes/Skeleton.xml:204
+msgid "Sets the rest transform for bone [code]bone_idx[/code]."
+msgstr ""
+
+#: doc/classes/Skeleton2D.xml:4
+msgid "Skeleton for 2D characters and animated objects."
+msgstr ""
+
+#: doc/classes/Skeleton2D.xml:7
+msgid ""
+"Skeleton2D parents a hierarchy of [Bone2D] objects. It is a requirement of "
+"[Bone2D]. Skeleton2D holds a reference to the rest pose of its children and "
+"acts as a single point of access to its bones."
+msgstr ""
+
+#: doc/classes/Skeleton2D.xml:10
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/animation/2d_skeletons.html"
+msgstr ""
+
+#: doc/classes/Skeleton2D.xml:17
+msgid ""
+"Returns a [Bone2D] from the node hierarchy parented by Skeleton2D. The "
+"object to return is identified by the parameter [code]idx[/code]. Bones are "
+"indexed by descending the node hierarchy from top to bottom, adding the "
+"children of each branch before moving to the next sibling."
+msgstr ""
+
+#: doc/classes/Skeleton2D.xml:23
+msgid ""
+"Returns the number of [Bone2D] nodes in the node hierarchy parented by "
+"Skeleton2D."
+msgstr ""
+
+#: doc/classes/Skeleton2D.xml:29
+msgid "Returns the [RID] of a Skeleton2D instance."
+msgstr ""
+
+#: doc/classes/SkeletonIK.xml:4
+msgid ""
+"SkeletonIK is used to place the end bone of a [Skeleton] bone chain at a "
+"certain point in 3D by rotating all bones in the chain accordingly."
+msgstr ""
+
+#: doc/classes/SkeletonIK.xml:7
+msgid ""
+"SkeletonIK is used to place the end bone of a [Skeleton] bone chain at a "
+"certain point in 3D by rotating all bones in the chain accordingly. A "
+"typical scenario for IK in games is to place a characters feet on the ground "
+"or a characters hands on a currently hold object. SkeletonIK uses "
+"FabrikInverseKinematic internally to solve the bone chain and applies the "
+"results to the [Skeleton] [code]bones_global_pose_override[/code] property "
+"for all affected bones in the chain. If fully applied this overwrites any "
+"bone transform from [Animation]s or bone custom poses set by users. The "
+"applied amount can be controlled with the [code]interpolation[/code] "
+"property.\n"
+"[codeblock]\n"
+"# Apply IK effect automatically on every new frame (not the current)\n"
+"skeleton_ik_node.start()\n"
+"\n"
+"# Apply IK effect only on the current frame\n"
+"skeleton_ik_node.start(true)\n"
+"\n"
+"# Stop IK effect and reset bones_global_pose_override on Skeleton\n"
+"skeleton_ik_node.stop()\n"
+"\n"
+"# Apply full IK effect\n"
+"skeleton_ik_node.set_interpolation(1.0)\n"
+"\n"
+"# Apply half IK effect\n"
+"skeleton_ik_node.set_interpolation(0.5)\n"
+"\n"
+"# Apply zero IK effect (a value at or below 0.01 also removes "
+"bones_global_pose_override on Skeleton)\n"
+"skeleton_ik_node.set_interpolation(0.0)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/SkeletonIK.xml:35
+msgid ""
+"Returns the parent [Skeleton] Node that was present when SkeletonIK entered "
+"the [SceneTree]. Returns null if the parent node was not a [Skeleton] Node "
+"when SkeletonIK entered the [SceneTree]."
+msgstr ""
+
+#: doc/classes/SkeletonIK.xml:41
+msgid ""
+"Returns [code]true[/code] if SkeletonIK is applying IK effects on continues "
+"frames to the [Skeleton] bones. Returns [code]false[/code] if SkeletonIK is "
+"stopped or [method start] was used with the [code]one_time[/code] parameter "
+"set to [code]true[/code]."
+msgstr ""
+
+#: doc/classes/SkeletonIK.xml:48
+msgid ""
+"Starts applying IK effects on each frame to the [Skeleton] bones but will "
+"only take effect starting on the next frame. If [code]one_time[/code] is "
+"[code]true[/code], this will take effect immediately but also reset on the "
+"next frame."
+msgstr ""
+
+#: doc/classes/SkeletonIK.xml:54
+msgid ""
+"Stops applying IK effects on each frame to the [Skeleton] bones and also "
+"calls [method Skeleton.clear_bones_global_pose_override] to remove existing "
+"overrides on all bones."
+msgstr ""
+
+#: doc/classes/SkeletonIK.xml:60
+msgid ""
+"Interpolation value for how much the IK results are applied to the current "
+"skeleton bone chain. A value of [code]1.0[/code] will overwrite all skeleton "
+"bone transforms completely while a value of [code]0.0[/code] will visually "
+"disable the SkeletonIK. A value at or below [code]0.01[/code] also calls "
+"[method Skeleton.clear_bones_global_pose_override]."
+msgstr ""
+
+#: doc/classes/SkeletonIK.xml:63
+msgid ""
+"Secondary target position (first is [member target] property or [member "
+"target_node]) for the IK chain. Use magnet position (pole target) to control "
+"the bending of the IK chain. Only works if the bone chain has more than 2 "
+"bones. The middle chain bone position will be linearly interpolated with the "
+"magnet position."
+msgstr ""
+
+#: doc/classes/SkeletonIK.xml:66
+msgid ""
+"Number of iteration loops used by the IK solver to produce more accurate "
+"(and elegant) bone chain results."
+msgstr ""
+
+#: doc/classes/SkeletonIK.xml:69
+msgid ""
+"The minimum distance between bone and goal target. If the distance is below "
+"this value, the IK solver stops further iterations."
+msgstr ""
+
+#: doc/classes/SkeletonIK.xml:72
+msgid ""
+"If [code]true[/code] overwrites the rotation of the tip bone with the "
+"rotation of the [member target] (or [member target_node] if defined)."
+msgstr ""
+
+#: doc/classes/SkeletonIK.xml:75
+msgid "The name of the current root bone, the first bone in the IK chain."
+msgstr ""
+
+#: doc/classes/SkeletonIK.xml:78
+msgid ""
+"First target of the IK chain where the tip bone is placed and, if [member "
+"override_tip_basis] is [code]true[/code], how the tip bone is rotated. If a "
+"[member target_node] path is available the nodes transform is used instead "
+"and this property is ignored."
+msgstr ""
+
+#: doc/classes/SkeletonIK.xml:81
+msgid ""
+"Target node [NodePath] for the IK chain. If available, the node's current "
+"[Transform] is used instead of the [member target] property."
+msgstr ""
+
+#: doc/classes/SkeletonIK.xml:84
+msgid ""
+"The name of the current tip bone, the last bone in the IK chain placed at "
+"the [member target] transform (or [member target_node] if defined)."
+msgstr ""
+
+#: doc/classes/SkeletonIK.xml:87
+msgid ""
+"If [code]true[/code], instructs the IK solver to consider the secondary "
+"magnet target (pole target) when calculating the bone chain. Use the magnet "
+"position (pole target) to control the bending of the IK chain."
+msgstr ""
+
+#: doc/classes/Sky.xml:4 doc/classes/Sky.xml:7
+msgid "The base class for [PanoramaSky] and [ProceduralSky]."
+msgstr ""
+
+#: doc/classes/Sky.xml:15
+msgid ""
+"The [Sky]'s radiance map size. The higher the radiance map size, the more "
+"detailed the lighting from the [Sky] will be.\n"
+"See [enum RadianceSize] constants for values.\n"
+"[b]Note:[/b] You will only benefit from high radiance sizes if you have "
+"perfectly sharp reflective surfaces in your project and are not using "
+"[ReflectionProbe]s or [GIProbe]s. For most projects, keeping [member "
+"radiance_size] to the default value is the best compromise between visuals "
+"and performance. Be careful when using high radiance size values as these "
+"can cause crashes on low-end GPUs."
+msgstr ""
+
+#: doc/classes/Sky.xml:22
+msgid "Radiance texture size is 32×32 pixels."
+msgstr ""
+
+#: doc/classes/Sky.xml:25
+msgid "Radiance texture size is 64×64 pixels."
+msgstr ""
+
+#: doc/classes/Sky.xml:28
+msgid "Radiance texture size is 128×128 pixels."
+msgstr ""
+
+#: doc/classes/Sky.xml:31
+msgid "Radiance texture size is 256×256 pixels."
+msgstr ""
+
+#: doc/classes/Sky.xml:34
+msgid "Radiance texture size is 512×512 pixels."
+msgstr ""
+
+#: doc/classes/Sky.xml:37
+msgid ""
+"Radiance texture size is 1024×1024 pixels.\n"
+"[b]Note:[/b] [constant RADIANCE_SIZE_1024] is not exposed in the inspector "
+"as it is known to cause GPU hangs on certain systems."
+msgstr ""
+
+#: doc/classes/Sky.xml:41
+msgid ""
+"Radiance texture size is 2048×2048 pixels.\n"
+"[b]Note:[/b] [constant RADIANCE_SIZE_2048] is not exposed in the inspector "
+"as it is known to cause GPU hangs on certain systems."
+msgstr ""
+
+#: doc/classes/Sky.xml:45
+msgid "Represents the size of the [enum RadianceSize] enum."
+msgstr ""
+
+#: doc/classes/Slider.xml:4
+msgid "Base class for GUI sliders."
+msgstr ""
+
+#: doc/classes/Slider.xml:7
+msgid ""
+"Base class for GUI sliders.\n"
+"[b]Note:[/b] The [signal Range.changed] and [signal Range.value_changed] "
+"signals are part of the [Range] class which this class inherits from."
+msgstr ""
+
+#: doc/classes/Slider.xml:16
+msgid ""
+"If [code]true[/code], the slider can be interacted with. If [code]false[/"
+"code], the value can be changed only by code."
+msgstr ""
+
+#: doc/classes/Slider.xml:20
+msgid "If [code]true[/code], the value can be changed using the mouse wheel."
+msgstr ""
+
+#: doc/classes/Slider.xml:24
+msgid ""
+"Number of ticks displayed on the slider, including border ticks. Ticks are "
+"uniformly-distributed value markers."
+msgstr ""
+
+#: doc/classes/Slider.xml:27
+msgid ""
+"If [code]true[/code], the slider will display ticks for minimum and maximum "
+"values."
+msgstr ""
+
+#: doc/classes/SliderJoint.xml:4
+msgid "Slider between two PhysicsBodies in 3D."
+msgstr ""
+
+#: doc/classes/SliderJoint.xml:7
+msgid ""
+"Slides across the X axis of the pivot object. See also [Generic6DOFJoint]."
+msgstr ""
+
+#: doc/classes/SliderJoint.xml:28
+msgid ""
+"The amount of damping of the rotation when the limit is surpassed.\n"
+"A lower damping value allows a rotation initiated by body A to travel to "
+"body B slower."
+msgstr ""
+
+#: doc/classes/SliderJoint.xml:35
+msgid ""
+"The amount of restitution of the rotation when the limit is surpassed.\n"
+"Does not affect damping."
+msgstr ""
+
+#: doc/classes/SliderJoint.xml:39
+msgid ""
+"A factor applied to the all rotation once the limit is surpassed.\n"
+"Makes all rotation slower when between 0 and 1."
+msgstr ""
+
+#: doc/classes/SliderJoint.xml:52 doc/classes/SliderJoint.xml:147
+msgid "A factor applied to the all rotation in the limits."
+msgstr ""
+
+#: doc/classes/SliderJoint.xml:61 doc/classes/SliderJoint.xml:156
+msgid ""
+"A factor applied to the all rotation across axes orthogonal to the slider."
+msgstr ""
+
+#: doc/classes/SliderJoint.xml:64
+msgid ""
+"The amount of damping that happens once the limit defined by [member "
+"linear_limit/lower_distance] and [member linear_limit/upper_distance] is "
+"surpassed."
+msgstr ""
+
+#: doc/classes/SliderJoint.xml:70
+msgid ""
+"The amount of restitution once the limits are surpassed. The lower, the more "
+"velocity-energy gets lost."
+msgstr ""
+
+#: doc/classes/SoftBody.xml:4
+msgid "A soft mesh physics body."
+msgstr ""
+
+#: doc/classes/SoftBody.xml:7
+msgid ""
+"A deformable physics body. Used to create elastic or deformable objects such "
+"as cloth, rubber, or other flexible materials."
+msgstr ""
+
+#: doc/classes/SoftBody.xml:10
+msgid "https://docs.godotengine.org/en/3.4/tutorials/physics/soft_body.html"
+msgstr ""
+
+#: doc/classes/SoftBody.xml:44
+msgid "Returns local translation of a vertex in the surface array."
+msgstr ""
+
+#: doc/classes/SoftBody.xml:51
+msgid "Returns [code]true[/code] if vertex is set to pinned."
+msgstr ""
+
+#: doc/classes/SoftBody.xml:83
+msgid ""
+"Sets the pinned state of a surface vertex. When set to [code]true[/code], "
+"the optional [code]attachment_path[/code] can define a [Spatial] the pinned "
+"vertex will be attached to."
+msgstr ""
+
+#: doc/classes/SoftBody.xml:91
+msgid ""
+"The physics layers this SoftBody is in.\n"
+"Collidable objects can exist in any of 32 different layers. These layers "
+"work like a tagging system, and are not visual. A collidable can use these "
+"layers to select with which objects it can collide, using the collision_mask "
+"property.\n"
+"A contact is detected if object A is in any of the layers that object B "
+"scans, or object B is in any layer scanned by object A. See [url=https://"
+"docs.godotengine.org/en/3.4/tutorials/physics/physics_introduction."
+"html#collision-layers-and-masks]Collision layers and masks[/url] in the "
+"documentation for more information."
+msgstr ""
+
+#: doc/classes/SoftBody.xml:96
+msgid ""
+"The physics layers this SoftBody scans for collisions. See [url=https://docs."
+"godotengine.org/en/3.4/tutorials/physics/physics_introduction.html#collision-"
+"layers-and-masks]Collision layers and masks[/url] in the documentation for "
+"more information."
+msgstr ""
+
+#: doc/classes/SoftBody.xml:105
+msgid "[NodePath] to a [CollisionObject] this SoftBody should avoid clipping."
+msgstr ""
+
+#: doc/classes/SoftBody.xml:108
+msgid ""
+"If [code]true[/code], the [SoftBody] is simulated in physics. Can be set to "
+"[code]false[/code] to pause the physics simulation."
+msgstr ""
+
+#: doc/classes/SoftBody.xml:115
+msgid "If [code]true[/code], the [SoftBody] will respond to [RayCast]s."
+msgstr ""
+
+#: doc/classes/SoftBody.xml:118
+msgid ""
+"Increasing this value will improve the resulting simulation, but can affect "
+"performance. Use with care."
+msgstr ""
+
+#: doc/classes/SoftBody.xml:121
+msgid "The SoftBody's mass."
+msgstr ""
+
+#: doc/classes/Spatial.xml:4
+msgid "Most basic 3D game object, parent of all 3D-related nodes."
+msgstr ""
+
+#: doc/classes/Spatial.xml:7
+msgid ""
+"Most basic 3D game object, with a 3D [Transform] and visibility settings. "
+"All other 3D game objects inherit from Spatial. Use [Spatial] as a parent "
+"node to move, scale, rotate and show/hide children in a 3D project.\n"
+"Affine operations (rotate, scale, translate) happen in parent's local "
+"coordinate system, unless the [Spatial] object is set as top-level. Affine "
+"operations in this coordinate system correspond to direct affine operations "
+"on the [Spatial]'s transform. The word local below refers to this coordinate "
+"system. The coordinate system that is attached to the [Spatial] object "
+"itself is referred to as object-local coordinate system.\n"
+"[b]Note:[/b] Unless otherwise specified, all methods that have angle "
+"parameters must have angles specified as [i]radians[/i]. To convert degrees "
+"to radians, use [method @GDScript.deg2rad]."
+msgstr ""
+
+#: doc/classes/Spatial.xml:12
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/3d/introduction_to_3d.html"
+msgstr ""
+
+#: doc/classes/Spatial.xml:13 doc/classes/Vector3.xml:16
+msgid "https://github.com/godotengine/godot-demo-projects/tree/master/3d"
+msgstr ""
+
+#: doc/classes/Spatial.xml:25
+msgid ""
+"Returns the parent [Spatial], or an empty [Object] if no parent exists or "
+"parent is not of type [Spatial]."
+msgstr ""
+
+#: doc/classes/Spatial.xml:31
+msgid ""
+"Returns the current [World] resource this [Spatial] node is registered to."
+msgstr ""
+
+#: doc/classes/Spatial.xml:39
+msgid ""
+"Rotates the global (world) transformation around axis, a unit [Vector3], by "
+"specified angle in radians. The rotation axis is in global coordinate system."
+msgstr ""
+
+#: doc/classes/Spatial.xml:46
+msgid ""
+"Scales the global (world) transformation by the given [Vector3] scale "
+"factors."
+msgstr ""
+
+#: doc/classes/Spatial.xml:53
+msgid ""
+"Moves the global (world) transformation by [Vector3] offset. The offset is "
+"in global coordinate system."
+msgstr ""
+
+#: doc/classes/Spatial.xml:59
+msgid ""
+"Disables rendering of this node. Changes [member visible] to [code]false[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Spatial.xml:65
+msgid ""
+"Returns whether node notifies about its local transformation changes. "
+"[Spatial] will not propagate this by default."
+msgstr ""
+
+#: doc/classes/Spatial.xml:71
+msgid ""
+"Returns whether this node uses a scale of [code](1, 1, 1)[/code] or its "
+"local transformation scale."
+msgstr ""
+
+#: doc/classes/Spatial.xml:77
+msgid ""
+"Returns whether this node is set as Toplevel, that is whether it ignores its "
+"parent nodes transformations."
+msgstr ""
+
+#: doc/classes/Spatial.xml:83
+msgid ""
+"Returns whether the node notifies about its global and local transformation "
+"changes. [Spatial] will not propagate this by default."
+msgstr ""
+
+#: doc/classes/Spatial.xml:97
+msgid ""
+"Rotates itself so that the local -Z axis points towards the [code]target[/"
+"code] position.\n"
+"The transform will first be rotated around the given [code]up[/code] vector, "
+"and then fully aligned to the target by a further rotation around an axis "
+"perpendicular to both the [code]target[/code] and [code]up[/code] vectors.\n"
+"Operations take place in global space."
+msgstr ""
+
+#: doc/classes/Spatial.xml:108
+msgid ""
+"Moves the node to the specified [code]position[/code], and then rotates "
+"itself to point toward the [code]target[/code] as per [method look_at]. "
+"Operations take place in global space."
+msgstr ""
+
+#: doc/classes/Spatial.xml:114
+msgid ""
+"Resets this node's transformations (like scale, skew and taper) preserving "
+"its rotation and translation by performing Gram-Schmidt orthonormalization "
+"on this node's [Transform]."
+msgstr ""
+
+#: doc/classes/Spatial.xml:122
+msgid ""
+"Rotates the local transformation around axis, a unit [Vector3], by specified "
+"angle in radians."
+msgstr ""
+
+#: doc/classes/Spatial.xml:130
+msgid ""
+"Rotates the local transformation around axis, a unit [Vector3], by specified "
+"angle in radians. The rotation axis is in object-local coordinate system."
+msgstr ""
+
+#: doc/classes/Spatial.xml:137
+msgid "Rotates the local transformation around the X axis by angle in radians."
+msgstr ""
+
+#: doc/classes/Spatial.xml:144
+msgid "Rotates the local transformation around the Y axis by angle in radians."
+msgstr ""
+
+#: doc/classes/Spatial.xml:151
+msgid "Rotates the local transformation around the Z axis by angle in radians."
+msgstr ""
+
+#: doc/classes/Spatial.xml:158
+msgid ""
+"Scales the local transformation by given 3D scale factors in object-local "
+"coordinate system."
+msgstr ""
+
+#: doc/classes/Spatial.xml:165
+msgid ""
+"Makes the node ignore its parents transformations. Node transformations are "
+"only in global space."
+msgstr ""
+
+#: doc/classes/Spatial.xml:172
+msgid ""
+"Sets whether the node uses a scale of [code](1, 1, 1)[/code] or its local "
+"transformation scale. Changes to the local transformation scale are "
+"preserved."
+msgstr ""
+
+#: doc/classes/Spatial.xml:178
+msgid ""
+"Reset all transformations for this node (sets its [Transform] to the "
+"identity matrix)."
+msgstr ""
+
+#: doc/classes/Spatial.xml:185
+msgid ""
+"Sets whether the node ignores notification that its transformation (global "
+"or local) changed."
+msgstr ""
+
+#: doc/classes/Spatial.xml:192
+msgid ""
+"Sets whether the node notifies about its local transformation changes. "
+"[Spatial] will not propagate this by default."
+msgstr ""
+
+#: doc/classes/Spatial.xml:199
+msgid ""
+"Sets whether the node notifies about its global and local transformation "
+"changes. [Spatial] will not propagate this by default, unless it is in the "
+"editor context and it has a valid gizmo."
+msgstr ""
+
+#: doc/classes/Spatial.xml:205
+msgid ""
+"Enables rendering of this node. Changes [member visible] to [code]true[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Spatial.xml:212
+msgid ""
+"Transforms [code]local_point[/code] from this node's local space to world "
+"space."
+msgstr ""
+
+#: doc/classes/Spatial.xml:219
+msgid ""
+"Transforms [code]global_point[/code] from world space to this node's local "
+"space."
+msgstr ""
+
+#: doc/classes/Spatial.xml:226
+msgid ""
+"Changes the node's position by the given offset [Vector3].\n"
+"Note that the translation [code]offset[/code] is affected by the node's "
+"scale, so if scaled by e.g. [code](10, 1, 1)[/code], a translation by an "
+"offset of [code](2, 0, 0)[/code] would actually add 20 ([code]2 * 10[/code]) "
+"to the X coordinate."
+msgstr ""
+
+#: doc/classes/Spatial.xml:234
+msgid ""
+"Changes the node's position by the given offset [Vector3] in local space."
+msgstr ""
+
+#: doc/classes/Spatial.xml:240
+msgid "Updates the [SpatialGizmo] of this node."
+msgstr ""
+
+#: doc/classes/Spatial.xml:246
+msgid ""
+"The [SpatialGizmo] for this node. Used for example in [EditorSpatialGizmo] "
+"as custom visualization and editing handles in Editor."
+msgstr ""
+
+#: doc/classes/Spatial.xml:249
+msgid "World space (global) [Transform] of this node."
+msgstr ""
+
+#: doc/classes/Spatial.xml:252
+msgid ""
+"Rotation part of the local transformation in radians, specified in terms of "
+"YXZ-Euler angles in the format (X angle, Y angle, Z angle).\n"
+"[b]Note:[/b] In the mathematical sense, rotation is a matrix and not a "
+"vector. The three Euler angles, which are the three independent parameters "
+"of the Euler-angle parametrization of the rotation matrix, are stored in a "
+"[Vector3] data structure not because the rotation is a vector, but only "
+"because [Vector3] exists as a convenient data-structure to store 3 floating-"
+"point numbers. Therefore, applying affine operations on the rotation \"vector"
+"\" is not meaningful."
+msgstr ""
+
+#: doc/classes/Spatial.xml:256
+msgid ""
+"Rotation part of the local transformation in degrees, specified in terms of "
+"YXZ-Euler angles in the format (X angle, Y angle, Z angle)."
+msgstr ""
+
+#: doc/classes/Spatial.xml:259
+msgid "Scale part of the local transformation."
+msgstr ""
+
+#: doc/classes/Spatial.xml:262
+msgid "Local space [Transform] of this node, with respect to the parent node."
+msgstr ""
+
+#: doc/classes/Spatial.xml:265
+msgid "Local translation of this node."
+msgstr ""
+
+#: doc/classes/Spatial.xml:268
+msgid ""
+"If [code]true[/code], this node is drawn. The node is only visible if all of "
+"its antecedents are visible as well (in other words, [method "
+"is_visible_in_tree] must return [code]true[/code])."
+msgstr ""
+
+#: doc/classes/Spatial.xml:274
+msgid ""
+"Emitted by portal system gameplay monitor when a node enters the gameplay "
+"area."
+msgstr ""
+
+#: doc/classes/Spatial.xml:279
+msgid ""
+"Emitted by portal system gameplay monitor when a node exits the gameplay "
+"area."
+msgstr ""
+
+#: doc/classes/Spatial.xml:284
+msgid "Emitted when node visibility changes."
+msgstr ""
+
+#: doc/classes/Spatial.xml:290
+msgid ""
+"Spatial nodes receives this notification when their global transform "
+"changes. This means that either the current or a parent node changed its "
+"transform.\n"
+"In order for [constant NOTIFICATION_TRANSFORM_CHANGED] to work, users first "
+"need to ask for it, with [method set_notify_transform]. The notification is "
+"also sent if the node is in the editor context and it has a valid gizmo."
+msgstr ""
+
+#: doc/classes/Spatial.xml:294
+msgid ""
+"Spatial nodes receives this notification when they are registered to new "
+"[World] resource."
+msgstr ""
+
+#: doc/classes/Spatial.xml:297
+msgid ""
+"Spatial nodes receives this notification when they are unregistered from "
+"current [World] resource."
+msgstr ""
+
+#: doc/classes/Spatial.xml:300
+msgid "Spatial nodes receives this notification when their visibility changes."
+msgstr ""
+
+#: doc/classes/Spatial.xml:303
+msgid ""
+"Spatial nodes receives this notification if the portal system gameplay "
+"monitor detects they have entered the gameplay area."
+msgstr ""
+
+#: doc/classes/Spatial.xml:306
+msgid ""
+"Spatial nodes receives this notification if the portal system gameplay "
+"monitor detects they have exited the gameplay area."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:4
+msgid "Default 3D rendering material."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:7
+msgid ""
+"This provides a default material with a wide variety of rendering features "
+"and properties without the need to write shader code. See the tutorial below "
+"for details."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:10
+msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/spatial_material.html"
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:17
+msgid "Returns [code]true[/code], if the specified [enum Feature] is enabled."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:24
+msgid ""
+"Returns [code]true[/code], if the specified flag is enabled. See [enum "
+"Flags] enumerator for options."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:31
+msgid ""
+"Returns the [Texture] associated with the specified [enum TextureParam]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:39
+msgid ""
+"If [code]true[/code], enables the specified [enum Feature]. Many features "
+"that are available in [SpatialMaterial]s need to be enabled before use. This "
+"way the cost for using the feature is only incurred when specified. Features "
+"can also be enabled by setting the corresponding member to [code]true[/code]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:47
+msgid ""
+"If [code]true[/code], enables the specified flag. Flags are optional "
+"behaviour that can be turned on and off. Only one flag can be enabled at a "
+"time with this function, the flag enumerators cannot be bit-masked together "
+"to enable or disable multiple flags at once. Flags can also be enabled by "
+"setting the corresponding member to [code]true[/code]. See [enum Flags] "
+"enumerator for options."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:55
+msgid ""
+"Sets the [Texture] to be used by the specified [enum TextureParam]. This "
+"function is called when setting members ending in [code]*_texture[/code]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:61
+msgid "The material's base color."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:64
+msgid ""
+"Texture to multiply by [member albedo_color]. Used for basic texturing of "
+"objects."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:67
+msgid "The strength of the anisotropy effect."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:70
+msgid ""
+"If [code]true[/code], anisotropy is enabled. Changes the shape of the "
+"specular blob and aligns it to tangent space. Mesh tangents are needed for "
+"this to work. If the mesh does not contain tangents the anisotropy effect "
+"will appear broken."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:73
+msgid "Texture that offsets the tangent map for anisotropy calculations."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:76
+msgid ""
+"If [code]true[/code], ambient occlusion is enabled. Ambient occlusion "
+"darkens areas based on the [member ao_texture]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:79
+msgid ""
+"Amount that ambient occlusion affects lighting from lights. If [code]0[/"
+"code], ambient occlusion only affects ambient light. If [code]1[/code], "
+"ambient occlusion affects lights just as much as it affects ambient light. "
+"This can be used to impact the strength of the ambient occlusion effect, but "
+"typically looks unrealistic."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:82
+msgid ""
+"If [code]true[/code], use [code]UV2[/code] coordinates to look up from the "
+"[member ao_texture]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:85
+msgid ""
+"Texture that defines the amount of ambient occlusion for a given point on "
+"the object."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:88 doc/classes/SpatialMaterial.xml:325
+msgid ""
+"Specifies the channel of the [member ao_texture] in which the ambient "
+"occlusion information is stored. This is useful when you store the "
+"information for multiple effects in a single texture. For example if you "
+"stored metallic in the red channel, roughness in the blue, and ambient "
+"occlusion in the green you could reduce the number of textures you use."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:91
+msgid ""
+"Sets the strength of the clearcoat effect. Setting to [code]0[/code] looks "
+"the same as disabling the clearcoat effect."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:94
+msgid ""
+"If [code]true[/code], clearcoat rendering is enabled. Adds a secondary "
+"transparent pass to the lighting calculation resulting in an added specular "
+"blob. This makes materials appear as if they have a clear layer on them that "
+"can be either glossy or rough.\n"
+"[b]Note:[/b] Clearcoat rendering is not visible if the material has [member "
+"flags_unshaded] set to [code]true[/code]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:98
+msgid ""
+"Sets the roughness of the clearcoat pass. A higher value results in a "
+"smoother clearcoat while a lower value results in a rougher clearcoat."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:101
+msgid ""
+"Texture that defines the strength of the clearcoat effect and the glossiness "
+"of the clearcoat. Strength is specified in the red channel while glossiness "
+"is specified in the green channel."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:104
+msgid ""
+"If [code]true[/code], the shader will read depth texture at multiple points "
+"along the view ray to determine occlusion and parrallax. This can be very "
+"performance demanding, but results in more realistic looking depth mapping."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:107
+msgid ""
+"If [code]true[/code], depth mapping is enabled (also called \"parallax "
+"mapping\" or \"height mapping\"). See also [member normal_enabled].\n"
+"[b]Note:[/b] Depth mapping is not supported if triplanar mapping is used on "
+"the same material. The value of [member depth_enabled] will be ignored if "
+"[member uv1_triplanar] is enabled."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:111
+msgid ""
+"If [code]true[/code], direction of the binormal is flipped before using in "
+"the depth effect. This may be necessary if you have encoded your binormals "
+"in a way that is conflicting with the depth effect."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:114
+msgid ""
+"If [code]true[/code], direction of the tangent is flipped before using in "
+"the depth effect. This may be necessary if you have encoded your tangents in "
+"a way that is conflicting with the depth effect."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:117
+msgid ""
+"Number of layers to use when using [member depth_deep_parallax] and the view "
+"direction is perpendicular to the surface of the object. A higher number "
+"will be more performance demanding while a lower number may not look as "
+"crisp."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:120
+msgid ""
+"Number of layers to use when using [member depth_deep_parallax] and the view "
+"direction is parallel to the surface of the object. A higher number will be "
+"more performance demanding while a lower number may not look as crisp."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:123
+msgid ""
+"Scales the depth offset effect. A higher number will create a larger depth."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:126
+msgid ""
+"Texture used to determine depth at a given pixel. Depth is always stored in "
+"the red channel."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:129
+msgid "Texture that specifies the color of the detail overlay."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:132
+msgid ""
+"Specifies how the [member detail_albedo] should blend with the current "
+"[code]ALBEDO[/code]. See [enum BlendMode] for options."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:135
+msgid ""
+"If [code]true[/code], enables the detail overlay. Detail is a second texture "
+"that gets mixed over the surface of the object based on [member "
+"detail_mask]. This can be used to add variation to objects, or to blend "
+"between two different albedo/normal textures."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:138
+msgid ""
+"Texture used to specify how the detail textures get blended with the base "
+"textures."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:141
+msgid ""
+"Texture that specifies the per-pixel normal of the detail overlay.\n"
+"[b]Note:[/b] Godot expects the normal map to use X+, Y-, and Z+ coordinates. "
+"See [url=http://wiki.polycount.com/wiki/"
+"Normal_Map_Technical_Details#Common_Swizzle_Coordinates]this page[/url] for "
+"a comparison of normal map coordinates expected by popular engines."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:145
+msgid ""
+"Specifies whether to use [code]UV[/code] or [code]UV2[/code] for the detail "
+"layer. See [enum DetailUV] for options."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:148
+msgid ""
+"Distance at which the object appears fully opaque.\n"
+"[b]Note:[/b] If [code]distance_fade_max_distance[/code] is less than "
+"[code]distance_fade_min_distance[/code], the behavior will be reversed. The "
+"object will start to fade away at [code]distance_fade_max_distance[/code] "
+"and will fully disappear once it reaches [code]distance_fade_min_distance[/"
+"code]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:152
+msgid ""
+"Distance at which the object starts to become visible. If the object is less "
+"than this distance away, it will be invisible.\n"
+"[b]Note:[/b] If [code]distance_fade_min_distance[/code] is greater than "
+"[code]distance_fade_max_distance[/code], the behavior will be reversed. The "
+"object will start to fade away at [code]distance_fade_max_distance[/code] "
+"and will fully disappear once it reaches [code]distance_fade_min_distance[/"
+"code]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:156
+msgid ""
+"Specifies which type of fade to use. Can be any of the [enum "
+"DistanceFadeMode]s."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:159
+msgid "The emitted light's color. See [member emission_enabled]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:162
+msgid ""
+"If [code]true[/code], the body emits light. Emitting light makes the object "
+"appear brighter. The object can also cast light on other objects if a "
+"[GIProbe] or [BakedLightmap] is used and this object is used in baked "
+"lighting."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:165
+msgid "The emitted light's strength. See [member emission_enabled]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:168
+msgid "Use [code]UV2[/code] to read from the [member emission_texture]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:171
+msgid ""
+"Sets how [member emission] interacts with [member emission_texture]. Can "
+"either add or multiply. See [enum EmissionOperator] for options."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:174
+msgid "Texture that specifies how much surface emits light at a given point."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:177
+msgid ""
+"Forces a conversion of the [member albedo_texture] from sRGB space to linear "
+"space."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:180
+msgid "If [code]true[/code], the object receives no ambient light."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:183
+msgid ""
+"If [code]true[/code], the object receives no shadow that would otherwise be "
+"cast onto it."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:186
+msgid ""
+"If [code]true[/code], the shader will compute extra operations to make sure "
+"the normal stays correct when using a non-uniform scale. Only enable if "
+"using non-uniform scaling."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:189
+msgid ""
+"If [code]true[/code], the object is rendered at the same size regardless of "
+"distance."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:192
+msgid ""
+"If [code]true[/code], depth testing is disabled and the object will be drawn "
+"in render order."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:195
+msgid ""
+"If [code]true[/code], transparency is enabled on the body. See also [member "
+"params_blend_mode]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:198
+msgid "If [code]true[/code], the object is unaffected by lighting."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:201
+msgid ""
+"If [code]true[/code], render point size can be changed.\n"
+"[b]Note:[/b] This is only effective for objects whose geometry is point-"
+"based rather than triangle-based. See also [member params_point_size]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:205
+msgid ""
+"If [code]true[/code], enables the \"shadow to opacity\" render mode where "
+"lighting modifies the alpha so shadowed areas are opaque and non-shadowed "
+"areas are transparent. Useful for overlaying shadows onto a camera feed in "
+"AR."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:208
+msgid ""
+"If [code]true[/code], lighting is calculated per vertex rather than per "
+"pixel. This may increase performance on low-end devices."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:211
+msgid ""
+"If [code]true[/code], triplanar mapping is calculated in world space rather "
+"than object local space. See also [member uv1_triplanar]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:214
+msgid ""
+"A high value makes the material appear more like a metal. Non-metals use "
+"their albedo as the diffuse color and add diffuse to the specular "
+"reflection. With non-metals, the reflection appears on top of the albedo "
+"color. Metals use their albedo as a multiplier to the specular reflection "
+"and set the diffuse color to black resulting in a tinted reflection. "
+"Materials work better when fully metal or fully non-metal, values between "
+"[code]0[/code] and [code]1[/code] should only be used for blending between "
+"metal and non-metal sections. To alter the amount of reflection use [member "
+"roughness]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:217
+msgid ""
+"Sets the size of the specular lobe. The specular lobe is the bright spot "
+"that is reflected from light sources.\n"
+"[b]Note:[/b] Unlike [member metallic], this is not energy-conserving, so it "
+"should be left at [code]0.5[/code] in most cases. See also [member "
+"roughness]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:221
+msgid ""
+"Texture used to specify metallic for an object. This is multiplied by "
+"[member metallic]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:224
+msgid ""
+"Specifies the channel of the [member metallic_texture] in which the metallic "
+"information is stored. This is useful when you store the information for "
+"multiple effects in a single texture. For example if you stored metallic in "
+"the red channel, roughness in the blue, and ambient occlusion in the green "
+"you could reduce the number of textures you use."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:227
+msgid "If [code]true[/code], normal mapping is enabled."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:230
+msgid "The strength of the normal map's effect."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:233
+msgid ""
+"Texture used to specify the normal at a given pixel. The "
+"[code]normal_texture[/code] only uses the red and green channels; the blue "
+"and alpha channels are ignored. The normal read from [code]normal_texture[/"
+"code] is oriented around the surface normal provided by the [Mesh].\n"
+"[b]Note:[/b] The mesh must have both normals and tangents defined in its "
+"vertex data. Otherwise, the normal map won't render correctly and will only "
+"appear to darken the whole surface. If creating geometry with [SurfaceTool], "
+"you can use [method SurfaceTool.generate_normals] and [method SurfaceTool."
+"generate_tangents] to automatically generate normals and tangents "
+"respectively.\n"
+"[b]Note:[/b] Godot expects the normal map to use X+, Y-, and Z+ coordinates. "
+"See [url=http://wiki.polycount.com/wiki/"
+"Normal_Map_Technical_Details#Common_Swizzle_Coordinates]this page[/url] for "
+"a comparison of normal map coordinates expected by popular engines."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:238
+msgid "Threshold at which the alpha scissor will discard values."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:241
+msgid ""
+"If [code]true[/code], the shader will keep the scale set for the mesh. "
+"Otherwise the scale is lost when billboarding. Only applies when [member "
+"params_billboard_mode] is [constant BILLBOARD_ENABLED]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:244
+msgid ""
+"Controls how the object faces the camera. See [enum BillboardMode].\n"
+"[b]Note:[/b] Billboard mode is not suitable for VR because the left-right "
+"vector of the camera is not horizontal when the screen is attached to your "
+"head instead of on the table. See [url=https://github.com/godotengine/godot/"
+"issues/41567]GitHub issue #41567[/url] for details."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:248
+msgid ""
+"The material's blend mode.\n"
+"[b]Note:[/b] Values other than [code]Mix[/code] force the object into the "
+"transparent pipeline. See [enum BlendMode]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:252
+msgid ""
+"Which side of the object is not drawn when backfaces are rendered. See [enum "
+"CullMode]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:255
+msgid ""
+"Determines when depth rendering takes place. See [enum DepthDrawMode]. See "
+"also [member flags_transparent]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:258
+msgid ""
+"The algorithm used for diffuse light scattering. See [enum DiffuseMode]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:261
+msgid ""
+"If [code]true[/code], enables the vertex grow setting. See [member "
+"params_grow_amount]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:264
+msgid "Grows object vertices in the direction of their normals."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:267
+msgid "Currently unimplemented in Godot."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:270
+msgid "The point size in pixels. See [member flags_use_point_size]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:273
+msgid "The method for rendering the specular blob. See [enum SpecularMode]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:276
+msgid ""
+"If [code]true[/code], the shader will discard all pixels that have an alpha "
+"value less than [member params_alpha_scissor_threshold]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:279
+msgid ""
+"The number of horizontal frames in the particle sprite sheet. Only enabled "
+"when using [constant BILLBOARD_PARTICLES]. See [member "
+"params_billboard_mode]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:282
+msgid ""
+"If [code]true[/code], particle animations are looped. Only enabled when "
+"using [constant BILLBOARD_PARTICLES]. See [member params_billboard_mode]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:285
+msgid ""
+"The number of vertical frames in the particle sprite sheet. Only enabled "
+"when using [constant BILLBOARD_PARTICLES]. See [member "
+"params_billboard_mode]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:288
+msgid ""
+"Distance over which the fade effect takes place. The larger the distance the "
+"longer it takes for an object to fade."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:291
+msgid ""
+"If [code]true[/code], the proximity fade effect is enabled. The proximity "
+"fade effect fades out each pixel based on its distance to another object."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:294
+msgid ""
+"If [code]true[/code], the refraction effect is enabled. Refraction distorts "
+"transparency based on light from behind the object. When using the GLES3 "
+"backend, the material's roughness value will affect the blurriness of the "
+"refraction. Higher roughness values will make the refraction look blurrier."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:297
+msgid ""
+"The strength of the refraction effect. Higher values result in a more "
+"distorted appearance for the refraction."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:300
+msgid ""
+"Texture that controls the strength of the refraction per-pixel. Multiplied "
+"by [member refraction_scale]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:303
+msgid ""
+"Specifies the channel of the [member refraction_texture] in which the "
+"refraction information is stored. This is useful when you store the "
+"information for multiple effects in a single texture. For example if you "
+"stored metallic in the red channel, roughness in the blue, and ambient "
+"occlusion in the green you could reduce the number of textures you use."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:306
+msgid "Sets the strength of the rim lighting effect."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:309
+msgid ""
+"If [code]true[/code], rim effect is enabled. Rim lighting increases the "
+"brightness at glancing angles on an object.\n"
+"[b]Note:[/b] Rim lighting is not visible if the material has [member "
+"flags_unshaded] set to [code]true[/code]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:313
+msgid ""
+"Texture used to set the strength of the rim lighting effect per-pixel. "
+"Multiplied by [member rim]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:316
+msgid ""
+"The amount of to blend light and albedo color when rendering rim effect. If "
+"[code]0[/code] the light color is used, while [code]1[/code] means albedo "
+"color is used. An intermediate value generally works best."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:319
+msgid ""
+"Surface reflection. A value of [code]0[/code] represents a perfect mirror "
+"while a value of [code]1[/code] completely blurs the reflection. See also "
+"[member metallic]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:322
+msgid ""
+"Texture used to control the roughness per-pixel. Multiplied by [member "
+"roughness]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:328
+msgid ""
+"If [code]true[/code], subsurface scattering is enabled. Emulates light that "
+"penetrates an object's surface, is scattered, and then emerges."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:331
+msgid "The strength of the subsurface scattering effect."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:334
+msgid ""
+"Texture used to control the subsurface scattering strength. Stored in the "
+"red texture channel. Multiplied by [member subsurf_scatter_strength]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:337
+msgid ""
+"The color used by the transmission effect. Represents the light passing "
+"through an object."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:340
+msgid "If [code]true[/code], the transmission effect is enabled."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:343
+msgid ""
+"Texture used to control the transmission effect per-pixel. Added to [member "
+"transmission]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:346
+msgid ""
+"How much to offset the [code]UV[/code] coordinates. This amount will be "
+"added to [code]UV[/code] in the vertex function. This can be used to offset "
+"a texture."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:349
+msgid ""
+"How much to scale the [code]UV[/code] coordinates. This is multiplied by "
+"[code]UV[/code] in the vertex function."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:352
+msgid ""
+"If [code]true[/code], instead of using [code]UV[/code] textures will use a "
+"triplanar texture lookup to determine how to apply textures. Triplanar uses "
+"the orientation of the object's surface to blend between texture "
+"coordinates. It reads from the source texture 3 times, once for each axis "
+"and then blends between the results based on how closely the pixel aligns "
+"with each axis. This is often used for natural features to get a realistic "
+"blend of materials. Because triplanar texturing requires many more texture "
+"reads per-pixel it is much slower than normal UV texturing. Additionally, "
+"because it is blending the texture between the three axes, it is unsuitable "
+"when you are trying to achieve crisp texturing."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:355 doc/classes/SpatialMaterial.xml:367
+msgid ""
+"A lower number blends the texture more softly while a higher number blends "
+"the texture more sharply."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:358
+msgid ""
+"How much to offset the [code]UV2[/code] coordinates. This amount will be "
+"added to [code]UV2[/code] in the vertex function. This can be used to offset "
+"a texture."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:361
+msgid ""
+"How much to scale the [code]UV2[/code] coordinates. This is multiplied by "
+"[code]UV2[/code] in the vertex function."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:364
+msgid ""
+"If [code]true[/code], instead of using [code]UV2[/code] textures will use a "
+"triplanar texture lookup to determine how to apply textures. Triplanar uses "
+"the orientation of the object's surface to blend between texture "
+"coordinates. It reads from the source texture 3 times, once for each axis "
+"and then blends between the results based on how closely the pixel aligns "
+"with each axis. This is often used for natural features to get a realistic "
+"blend of materials. Because triplanar texturing requires many more texture "
+"reads per-pixel it is much slower than normal UV texturing. Additionally, "
+"because it is blending the texture between the three axes, it is unsuitable "
+"when you are trying to achieve crisp texturing."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:370
+msgid ""
+"If [code]true[/code], the model's vertex colors are processed as sRGB mode."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:373
+msgid "If [code]true[/code], the vertex color is used as albedo color."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:378
+msgid "Texture specifying per-pixel color."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:381
+msgid "Texture specifying per-pixel metallic value."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:384
+msgid "Texture specifying per-pixel roughness value."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:387
+msgid "Texture specifying per-pixel emission color."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:390
+msgid "Texture specifying per-pixel normal vector."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:393
+msgid "Texture specifying per-pixel rim value."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:396
+msgid "Texture specifying per-pixel clearcoat value."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:399
+msgid ""
+"Texture specifying per-pixel flowmap direction for use with [member "
+"anisotropy]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:402
+msgid "Texture specifying per-pixel ambient occlusion value."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:405
+msgid "Texture specifying per-pixel depth."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:408
+msgid "Texture specifying per-pixel subsurface scattering."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:411
+msgid "Texture specifying per-pixel transmission color."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:414
+msgid "Texture specifying per-pixel refraction strength."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:417
+msgid "Texture specifying per-pixel detail mask blending value."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:420
+msgid "Texture specifying per-pixel detail color."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:423
+msgid "Texture specifying per-pixel detail normal."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:426
+msgid "Represents the size of the [enum TextureParam] enum."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:429
+msgid "Use [code]UV[/code] with the detail texture."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:432
+msgid "Use [code]UV2[/code] with the detail texture."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:435
+msgid "Constant for setting [member flags_transparent]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:438
+msgid "Constant for setting [member emission_enabled]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:441
+msgid "Constant for setting [member normal_enabled]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:444
+msgid "Constant for setting [member rim_enabled]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:447
+msgid "Constant for setting [member clearcoat_enabled]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:450
+msgid "Constant for setting [member anisotropy_enabled]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:453
+msgid "Constant for setting [member ao_enabled]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:456
+msgid "Constant for setting [member depth_enabled]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:459
+msgid "Constant for setting [member subsurf_scatter_enabled]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:462
+msgid "Constant for setting [member transmission_enabled]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:465
+msgid "Constant for setting [member refraction_enabled]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:468
+msgid "Constant for setting [member detail_enabled]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:474
+msgid ""
+"Default blend mode. The color of the object is blended over the background "
+"based on the object's alpha value."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:477
+msgid "The color of the object is added to the background."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:480
+msgid "The color of the object is subtracted from the background."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:483
+msgid "The color of the object is multiplied by the background."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:486
+msgid "Default depth draw mode. Depth is drawn only for opaque objects."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:489
+msgid "Depth draw is calculated for both opaque and transparent objects."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:492
+msgid "No depth draw."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:495
+msgid ""
+"For transparent objects, an opaque pass is made first with the opaque parts, "
+"then transparency is drawn."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:498
+msgid "Default cull mode. The back of the object is culled when not visible."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:501
+msgid "The front of the object is culled when not visible."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:504
+msgid "No culling is performed."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:507
+msgid ""
+"No lighting is used on the object. Color comes directly from [code]ALBEDO[/"
+"code]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:510
+msgid ""
+"Lighting is calculated per-vertex rather than per-pixel. This can be used to "
+"increase the speed of the shader at the cost of quality."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:513
+msgid ""
+"Disables the depth test, so this object is drawn on top of all others. "
+"However, objects drawn after it in the draw order may cover it."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:516
+msgid "Set [code]ALBEDO[/code] to the per-vertex color specified in the mesh."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:519
+msgid ""
+"Vertex color is in sRGB space and needs to be converted to linear. Only "
+"applies in the GLES3 renderer."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:522
+msgid ""
+"Uses point size to alter the size of primitive points. Also changes the "
+"albedo texture lookup to use [code]POINT_COORD[/code] instead of [code]UV[/"
+"code]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:525
+msgid ""
+"Object is scaled by depth so that it always appears the same size on screen."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:528
+msgid ""
+"Shader will keep the scale set for the mesh. Otherwise the scale is lost "
+"when billboarding. Only applies when [member params_billboard_mode] is "
+"[constant BILLBOARD_ENABLED]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:531
+msgid ""
+"Use triplanar texture lookup for all texture lookups that would normally use "
+"[code]UV[/code]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:534
+msgid ""
+"Use triplanar texture lookup for all texture lookups that would normally use "
+"[code]UV2[/code]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:537
+msgid ""
+"Use [code]UV2[/code] coordinates to look up from the [member ao_texture]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:540
+msgid ""
+"Use [code]UV2[/code] coordinates to look up from the [member "
+"emission_texture]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:543
+msgid "Use alpha scissor. Set by [member params_use_alpha_scissor]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:546
+msgid ""
+"Use world coordinates in the triplanar texture lookup instead of local "
+"coordinates."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:549
+msgid "Forces the shader to convert albedo from sRGB space to linear space."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:552
+msgid "Disables receiving shadows from other objects."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:555
+msgid "Disables receiving ambient light."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:558
+msgid "Ensures that normals appear correct, even with non-uniform scaling."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:561
+msgid "Enables the shadow to opacity feature."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:567
+msgid "Default diffuse scattering algorithm."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:570
+msgid "Diffuse scattering ignores roughness."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:573
+msgid "Extends Lambert to cover more than 90 degrees when roughness increases."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:576
+msgid "Attempts to use roughness to emulate microsurfacing."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:579
+msgid "Uses a hard cut for lighting, with smoothing affected by roughness."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:582
+msgid "Default specular blob."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:585 doc/classes/SpatialMaterial.xml:588
+msgid "Older specular algorithm, included for compatibility."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:591
+msgid "Toon blob which changes size based on roughness."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:594
+msgid "No specular blob."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:597
+msgid "Billboard mode is disabled."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:600
+msgid "The object's Z axis will always face the camera."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:603
+msgid "The object's X axis will always face the camera."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:606
+msgid ""
+"Used for particle systems when assigned to [Particles] and [CPUParticles] "
+"nodes. Enables [code]particles_anim_*[/code] properties.\n"
+"The [member ParticlesMaterial.anim_speed] or [member CPUParticles."
+"anim_speed] should also be set to a positive value for the animation to play."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:610
+msgid "Used to read from the red channel of a texture."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:613
+msgid "Used to read from the green channel of a texture."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:616
+msgid "Used to read from the blue channel of a texture."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:619
+msgid "Used to read from the alpha channel of a texture."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:625
+msgid "Adds the emission color to the color from the emission texture."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:628
+msgid "Multiplies the emission color by the color from the emission texture."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:631
+msgid "Do not use distance fade."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:634
+msgid ""
+"Smoothly fades the object out based on each pixel's distance from the camera "
+"using the alpha channel."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:637
+msgid ""
+"Smoothly fades the object out based on each pixel's distance from the camera "
+"using a dither approach. Dithering discards pixels based on a set pattern to "
+"smoothly fade without enabling transparency. On certain hardware this can be "
+"faster than [constant DISTANCE_FADE_PIXEL_ALPHA]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:640
+msgid ""
+"Smoothly fades the object out based on the object's distance from the camera "
+"using a dither approach. Dithering discards pixels based on a set pattern to "
+"smoothly fade without enabling transparency. On certain hardware this can be "
+"faster than [constant DISTANCE_FADE_PIXEL_ALPHA]."
+msgstr ""
+
+#: doc/classes/SphereMesh.xml:4 doc/classes/SphereMesh.xml:7
+msgid "Class representing a spherical [PrimitiveMesh]."
+msgstr ""
+
+#: doc/classes/SphereMesh.xml:15
+msgid "Full height of the sphere."
+msgstr ""
+
+#: doc/classes/SphereMesh.xml:18
+msgid ""
+"If [code]true[/code], a hemisphere is created rather than a full sphere.\n"
+"[b]Note:[/b] To get a regular hemisphere, the height and radius of the "
+"sphere must be equal."
+msgstr ""
+
+#: doc/classes/SphereMesh.xml:22
+msgid "Number of radial segments on the sphere."
+msgstr ""
+
+#: doc/classes/SphereMesh.xml:25
+msgid "Radius of sphere."
+msgstr ""
+
+#: doc/classes/SphereMesh.xml:28
+msgid "Number of segments along the height of the sphere."
+msgstr ""
+
+#: doc/classes/SphereShape.xml:4
+msgid "Sphere shape for 3D collisions."
+msgstr ""
+
+#: doc/classes/SphereShape.xml:7
+msgid ""
+"Sphere shape for 3D collisions, which can be set into a [PhysicsBody] or "
+"[Area]. This shape is useful for modeling sphere-like 3D objects."
+msgstr ""
+
+#: doc/classes/SphereShape.xml:16
+msgid "The sphere's radius. The shape's diameter is double the radius."
+msgstr ""
+
+#: doc/classes/SpinBox.xml:4
+msgid "Numerical input text field."
+msgstr ""
+
+#: doc/classes/SpinBox.xml:7
+msgid ""
+"SpinBox is a numerical input text field. It allows entering integers and "
+"floats.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"var spin_box = SpinBox.new()\n"
+"add_child(spin_box)\n"
+"var line_edit = spin_box.get_line_edit()\n"
+"line_edit.context_menu_enabled = false\n"
+"spin_box.align = LineEdit.ALIGN_RIGHT\n"
+"[/codeblock]\n"
+"The above code will create a [SpinBox], disable context menu on it and set "
+"the text alignment to right.\n"
+"See [Range] class for more options over the [SpinBox].\n"
+"[b]Note:[/b] [SpinBox] relies on an underlying [LineEdit] node. To theme a "
+"[SpinBox]'s background, add theme items for [LineEdit] and customize them."
+msgstr ""
+
+#: doc/classes/SpinBox.xml:26
+msgid "Applies the current value of this [SpinBox]."
+msgstr ""
+
+#: doc/classes/SpinBox.xml:32
+msgid ""
+"Returns the [LineEdit] instance from this [SpinBox]. You can use it to "
+"access properties and methods of [LineEdit].\n"
+"[b]Warning:[/b] This is a required internal node, removing and freeing it "
+"may cause a crash. If you wish to hide it or any of its children, use their "
+"[member CanvasItem.visible] property."
+msgstr ""
+
+#: doc/classes/SpinBox.xml:39
+msgid "Sets the text alignment of the [SpinBox]."
+msgstr ""
+
+#: doc/classes/SpinBox.xml:42
+msgid ""
+"If [code]true[/code], the [SpinBox] will be editable. Otherwise, it will be "
+"read only."
+msgstr ""
+
+#: doc/classes/SpinBox.xml:45
+msgid ""
+"Adds the specified [code]prefix[/code] string before the numerical value of "
+"the [SpinBox]."
+msgstr ""
+
+#: doc/classes/SpinBox.xml:48
+msgid ""
+"Adds the specified [code]suffix[/code] string after the numerical value of "
+"the [SpinBox]."
+msgstr ""
+
+#: doc/classes/SpinBox.xml:55
+msgid "Sets a custom [Texture] for up and down arrows of the [SpinBox]."
+msgstr ""
+
+#: doc/classes/SplitContainer.xml:4
+msgid "Container for splitting and adjusting."
+msgstr ""
+
+#: doc/classes/SplitContainer.xml:7
+msgid ""
+"Container for splitting two [Control]s vertically or horizontally, with a "
+"grabber that allows adjusting the split offset or ratio."
+msgstr ""
+
+#: doc/classes/SplitContainer.xml:15
+msgid ""
+"Clamps the [member split_offset] value to not go outside the currently "
+"possible minimal and maximum values."
+msgstr ""
+
+#: doc/classes/SplitContainer.xml:21
+msgid ""
+"If [code]true[/code], the area of the first [Control] will be collapsed and "
+"the dragger will be disabled."
+msgstr ""
+
+#: doc/classes/SplitContainer.xml:24
+msgid ""
+"Determines the dragger's visibility. See [enum DraggerVisibility] for "
+"details."
+msgstr ""
+
+#: doc/classes/SplitContainer.xml:27
+msgid ""
+"The initial offset of the splitting between the two [Control]s, with "
+"[code]0[/code] being at the end of the first [Control]."
+msgstr ""
+
+#: doc/classes/SplitContainer.xml:34
+msgid "Emitted when the dragger is dragged by user."
+msgstr ""
+
+#: doc/classes/SplitContainer.xml:40
+msgid "The split dragger is visible when the cursor hovers it."
+msgstr ""
+
+#: doc/classes/SplitContainer.xml:43
+msgid "The split dragger is never visible."
+msgstr ""
+
+#: doc/classes/SplitContainer.xml:46
+msgid "The split dragger is never visible and its space collapsed."
+msgstr ""
+
+#: doc/classes/SpotLight.xml:4
+msgid "A spotlight, such as a reflector spotlight or a lantern."
+msgstr ""
+
+#: doc/classes/SpotLight.xml:7
+msgid ""
+"A Spotlight is a type of [Light] node that emits lights in a specific "
+"direction, in the shape of a cone. The light is attenuated through the "
+"distance. This attenuation can be configured by changing the energy, radius "
+"and attenuation parameters of [Light].\n"
+"[b]Note:[/b] By default, only 32 SpotLights may affect a single mesh "
+"[i]resource[/i] at once. Consider splitting your level into several meshes "
+"to decrease the likelihood that more than 32 lights will affect the same "
+"mesh resource. Splitting the level mesh will also improve frustum culling "
+"effectiveness, leading to greater performance. If you need to use more "
+"lights per mesh, you can increase [member ProjectSettings.rendering/limits/"
+"rendering/max_lights_per_object] at the cost of shader compilation times."
+msgstr ""
+
+#: doc/classes/SpotLight.xml:18
+msgid "The spotlight's angle in degrees."
+msgstr ""
+
+#: doc/classes/SpotLight.xml:21
+msgid "The spotlight's angular attenuation curve."
+msgstr ""
+
+#: doc/classes/SpotLight.xml:24
+msgid "The spotlight's light energy attenuation curve."
+msgstr ""
+
+#: doc/classes/SpotLight.xml:27
+msgid ""
+"The maximal range that can be reached by the spotlight. Note that the "
+"effectively lit area may appear to be smaller depending on the [member "
+"spot_attenuation] in use. No matter the [member spot_attenuation] in use, "
+"the light will never reach anything outside this range."
+msgstr ""
+
+#: doc/classes/SpringArm.xml:4
+msgid "A helper node, mostly used in 3rd person cameras."
+msgstr ""
+
+#: doc/classes/SpringArm.xml:7
+msgid ""
+"The SpringArm node is a node that casts a ray (or collision shape) along its "
+"z axis and moves all its direct children to the collision point, minus a "
+"margin.\n"
+"The most common use case for this is to make a 3rd person camera that reacts "
+"to collisions in the environment.\n"
+"The SpringArm will either cast a ray, or if a shape is given, it will cast "
+"the shape in the direction of its z axis.\n"
+"If you use the SpringArm as a camera controller for your player, you might "
+"need to exclude the player's collider from the SpringArm's collision check."
+msgstr ""
+
+#: doc/classes/SpringArm.xml:19
+msgid ""
+"Adds the [PhysicsBody] object with the given [RID] to the list of "
+"[PhysicsBody] objects excluded from the collision check."
+msgstr ""
+
+#: doc/classes/SpringArm.xml:25
+msgid ""
+"Clears the list of [PhysicsBody] objects excluded from the collision check."
+msgstr ""
+
+#: doc/classes/SpringArm.xml:31
+msgid "Returns the spring arm's current length."
+msgstr ""
+
+#: doc/classes/SpringArm.xml:38
+msgid ""
+"Removes the given [RID] from the list of [PhysicsBody] objects excluded from "
+"the collision check."
+msgstr ""
+
+#: doc/classes/SpringArm.xml:44
+msgid ""
+"The layers against which the collision check shall be done. See [url=https://"
+"docs.godotengine.org/en/3.4/tutorials/physics/physics_introduction."
+"html#collision-layers-and-masks]Collision layers and masks[/url] in the "
+"documentation for more information."
+msgstr ""
+
+#: doc/classes/SpringArm.xml:47
+msgid ""
+"When the collision check is made, a candidate length for the SpringArm is "
+"given.\n"
+"The margin is then subtracted to this length and the translation is applied "
+"to the child objects of the SpringArm.\n"
+"This margin is useful for when the SpringArm has a [Camera] as a child node: "
+"without the margin, the [Camera] would be placed on the exact point of "
+"collision, while with the margin the [Camera] would be placed close to the "
+"point of collision."
+msgstr ""
+
+#: doc/classes/SpringArm.xml:52
+msgid ""
+"The [Shape] to use for the SpringArm.\n"
+"When the shape is set, the SpringArm will cast the [Shape] on its z axis "
+"instead of performing a ray cast."
+msgstr ""
+
+#: doc/classes/SpringArm.xml:56
+msgid ""
+"The maximum extent of the SpringArm. This is used as a length for both the "
+"ray and the shape cast used internally to calculate the desired position of "
+"the SpringArm's child nodes.\n"
+"To know more about how to perform a shape cast or a ray cast, please consult "
+"the [PhysicsDirectSpaceState] documentation."
+msgstr ""
+
+#: doc/classes/Sprite.xml:4
+msgid "General-purpose sprite node."
+msgstr ""
+
+#: doc/classes/Sprite.xml:7
+msgid ""
+"A node that displays a 2D texture. The texture displayed can be a region "
+"from a larger atlas texture, or a frame from a sprite sheet animation."
+msgstr ""
+
+#: doc/classes/Sprite.xml:16
+msgid ""
+"Returns a [Rect2] representing the Sprite's boundary in local coordinates. "
+"Can be used to detect if the Sprite was clicked. Example:\n"
+"[codeblock]\n"
+"func _input(event):\n"
+" if event is InputEventMouseButton and event.pressed and event."
+"button_index == BUTTON_LEFT:\n"
+" if get_rect().has_point(to_local(event.position)):\n"
+" print(\"A click!\")\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Sprite.xml:29
+msgid ""
+"Returns [code]true[/code], if the pixel at the given position is opaque and "
+"[code]false[/code] in other case.\n"
+"[b]Note:[/b] It also returns [code]false[/code], if the sprite's texture is "
+"[code]null[/code] or if the given position is invalid."
+msgstr ""
+
+#: doc/classes/Sprite.xml:36
+msgid "If [code]true[/code], texture is centered."
+msgstr ""
+
+#: doc/classes/Sprite.xml:45 doc/classes/Sprite3D.xml:15
+msgid ""
+"Current frame to display from sprite sheet. [member hframes] or [member "
+"vframes] must be greater than 1."
+msgstr ""
+
+#: doc/classes/Sprite.xml:48 doc/classes/Sprite3D.xml:18
+msgid ""
+"Coordinates of the frame to display from sprite sheet. This is as an alias "
+"for the [member frame] property. [member hframes] or [member vframes] must "
+"be greater than 1."
+msgstr ""
+
+#: doc/classes/Sprite.xml:51 doc/classes/Sprite3D.xml:21
+msgid "The number of columns in the sprite sheet."
+msgstr ""
+
+#: doc/classes/Sprite.xml:54
+msgid ""
+"The normal map gives depth to the Sprite.\n"
+"[b]Note:[/b] Godot expects the normal map to use X+, Y-, and Z+ coordinates. "
+"See [url=http://wiki.polycount.com/wiki/"
+"Normal_Map_Technical_Details#Common_Swizzle_Coordinates]this page[/url] for "
+"a comparison of normal map coordinates expected by popular engines."
+msgstr ""
+
+#: doc/classes/Sprite.xml:61
+msgid ""
+"If [code]true[/code], texture is cut from a larger atlas texture. See "
+"[member region_rect]."
+msgstr ""
+
+#: doc/classes/Sprite.xml:64
+msgid "If [code]true[/code], the outermost pixels get blurred out."
+msgstr ""
+
+#: doc/classes/Sprite.xml:67 doc/classes/Sprite3D.xml:27
+msgid ""
+"The region of the atlas texture to display. [member region_enabled] must be "
+"[code]true[/code]."
+msgstr ""
+
+#: doc/classes/Sprite.xml:70
+msgid "[Texture] object to draw."
+msgstr ""
+
+#: doc/classes/Sprite.xml:73 doc/classes/Sprite3D.xml:33
+msgid "The number of rows in the sprite sheet."
+msgstr ""
+
+#: doc/classes/Sprite.xml:79 doc/classes/Sprite3D.xml:39
+msgid "Emitted when the [member frame] changes."
+msgstr ""
+
+#: doc/classes/Sprite.xml:84
+msgid "Emitted when the [member texture] changes."
+msgstr ""
+
+#: doc/classes/Sprite3D.xml:4
+msgid "2D sprite node in a 3D world."
+msgstr ""
+
+#: doc/classes/Sprite3D.xml:7
+msgid ""
+"A node that displays a 2D texture in a 3D environment. The texture displayed "
+"can be a region from a larger atlas texture, or a frame from a sprite sheet "
+"animation."
+msgstr ""
+
+#: doc/classes/Sprite3D.xml:24
+msgid ""
+"If [code]true[/code], texture will be cut from a larger atlas texture. See "
+"[member region_rect]."
+msgstr ""
+
+#: doc/classes/Sprite3D.xml:30
+msgid ""
+"[Texture] object to draw. If [member GeometryInstance.material_override] is "
+"used, this will be overridden."
+msgstr ""
+
+#: doc/classes/SpriteBase3D.xml:4
+msgid "2D sprite node in 3D environment."
+msgstr ""
+
+#: doc/classes/SpriteBase3D.xml:7
+msgid "A node that displays 2D texture information in a 3D environment."
+msgstr ""
+
+#: doc/classes/SpriteBase3D.xml:27
+msgid "Returns the rectangle representing this sprite."
+msgstr ""
+
+#: doc/classes/SpriteBase3D.xml:35
+msgid "If [code]true[/code], the specified flag will be enabled."
+msgstr ""
+
+#: doc/classes/SpriteBase3D.xml:43
+msgid "The direction in which the front of the texture faces."
+msgstr ""
+
+#: doc/classes/SpriteBase3D.xml:51
+msgid ""
+"If [code]true[/code], texture can be seen from the back as well, if "
+"[code]false[/code], it is invisible when looking at it from behind."
+msgstr ""
+
+#: doc/classes/SpriteBase3D.xml:60
+msgid ""
+"A color value that gets multiplied on, could be used for mood-coloring or to "
+"simulate the color of light."
+msgstr ""
+
+#: doc/classes/SpriteBase3D.xml:66
+msgid ""
+"The objects' visibility on a scale from [code]0[/code] fully invisible to "
+"[code]1[/code] fully visible."
+msgstr ""
+
+#: doc/classes/SpriteBase3D.xml:69
+msgid "The size of one pixel's width on the sprite to scale it in 3D."
+msgstr ""
+
+#: doc/classes/SpriteBase3D.xml:72
+msgid ""
+"If [code]true[/code], the [Light] in the [Environment] has effects on the "
+"sprite."
+msgstr ""
+
+#: doc/classes/SpriteBase3D.xml:75
+msgid ""
+"If [code]true[/code], the texture's transparency and the opacity are used to "
+"make those parts of the sprite invisible."
+msgstr ""
+
+#: doc/classes/SpriteBase3D.xml:80
+msgid ""
+"If set, the texture's transparency and the opacity are used to make those "
+"parts of the sprite invisible."
+msgstr ""
+
+#: doc/classes/SpriteBase3D.xml:83
+msgid "If set, lights in the environment affect the sprite."
+msgstr ""
+
+#: doc/classes/SpriteBase3D.xml:86
+msgid ""
+"If set, texture can be seen from the back as well, if not, it is invisible "
+"when looking at it from behind."
+msgstr ""
+
+#: doc/classes/SpriteBase3D.xml:89
+msgid "Represents the size of the [enum DrawFlags] enum."
+msgstr ""
+
+#: doc/classes/SpriteFrames.xml:4
+msgid "Sprite frame library for AnimatedSprite."
+msgstr ""
+
+#: doc/classes/SpriteFrames.xml:7
+msgid ""
+"Sprite frame library for [AnimatedSprite]. Contains frames and animation "
+"data for playback.\n"
+"[b]Note:[/b] You can associate a set of normal maps by creating additional "
+"[SpriteFrames] resources with a [code]_normal[/code] suffix. For example, "
+"having 2 [SpriteFrames] resources [code]run[/code] and [code]run_normal[/"
+"code] will make it so the [code]run[/code] animation uses the normal map."
+msgstr ""
+
+#: doc/classes/SpriteFrames.xml:17
+msgid "Adds a new animation to the library."
+msgstr ""
+
+#: doc/classes/SpriteFrames.xml:26
+msgid "Adds a frame to the given animation."
+msgstr ""
+
+#: doc/classes/SpriteFrames.xml:33
+msgid "Removes all frames from the given animation."
+msgstr ""
+
+#: doc/classes/SpriteFrames.xml:39
+msgid "Removes all animations. A \"default\" animation will be created."
+msgstr ""
+
+#: doc/classes/SpriteFrames.xml:46
+msgid ""
+"Returns [code]true[/code] if the given animation is configured to loop when "
+"it finishes playing. Otherwise, returns [code]false[/code]."
+msgstr ""
+
+#: doc/classes/SpriteFrames.xml:52
+msgid ""
+"Returns an array containing the names associated to each animation. Values "
+"are placed in alphabetical order."
+msgstr ""
+
+#: doc/classes/SpriteFrames.xml:59 doc/classes/SpriteFrames.xml:120
+msgid "The animation's speed in frames per second."
+msgstr ""
+
+#: doc/classes/SpriteFrames.xml:67
+msgid "Returns the animation's selected frame."
+msgstr ""
+
+#: doc/classes/SpriteFrames.xml:74
+msgid "Returns the number of frames in the animation."
+msgstr ""
+
+#: doc/classes/SpriteFrames.xml:81
+msgid "If [code]true[/code], the named animation exists."
+msgstr ""
+
+#: doc/classes/SpriteFrames.xml:88
+msgid "Removes the given animation."
+msgstr ""
+
+#: doc/classes/SpriteFrames.xml:96
+msgid "Removes the animation's selected frame."
+msgstr ""
+
+#: doc/classes/SpriteFrames.xml:104
+msgid "Changes the animation's name to [code]newname[/code]."
+msgstr ""
+
+#: doc/classes/SpriteFrames.xml:112
+msgid "If [code]true[/code], the animation will loop."
+msgstr ""
+
+#: doc/classes/SpriteFrames.xml:129
+msgid "Sets the texture of the given frame."
+msgstr ""
+
+#: doc/classes/SpriteFrames.xml:135
+msgid "Compatibility property, always equals to an empty array."
+msgstr ""
+
+#: doc/classes/StaticBody.xml:4
+msgid "Static body for 3D physics."
+msgstr ""
+
+#: doc/classes/StaticBody.xml:7
+msgid ""
+"Static body for 3D physics. A static body is a simple body that is not "
+"intended to move. In contrast to [RigidBody], they don't consume any CPU "
+"resources as long as they don't move.\n"
+"Additionally, a constant linear or angular velocity can be set for the "
+"static body, so even if it doesn't move, it affects other bodies as if it "
+"was moving (this is useful for simulating conveyor belts or conveyor wheels)."
+msgstr ""
+
+#: doc/classes/StaticBody.xml:23
+msgid ""
+"The body's constant angular velocity. This does not rotate the body, but "
+"affects other bodies that touch it, as if it was in a state of rotation."
+msgstr ""
+
+#: doc/classes/StaticBody.xml:26
+msgid ""
+"The body's constant linear velocity. This does not move the body, but "
+"affects other bodies that touch it, as if it was in a state of movement."
+msgstr ""
+
+#: doc/classes/StaticBody.xml:29
+msgid ""
+"The body's friction, from 0 (frictionless) to 1 (full friction).\n"
+"Deprecated, use [member PhysicsMaterial.friction] instead via [member "
+"physics_material_override]."
+msgstr ""
+
+#: doc/classes/StaticBody2D.xml:4
+msgid "Static body for 2D physics."
+msgstr ""
+
+#: doc/classes/StaticBody2D.xml:7
+msgid ""
+"Static body for 2D physics. A StaticBody2D is a body that is not intended to "
+"move. It is ideal for implementing objects in the environment, such as walls "
+"or platforms.\n"
+"Additionally, a constant linear or angular velocity can be set for the "
+"static body, which will affect colliding bodies as if it were moving (for "
+"example, a conveyor belt)."
+msgstr ""
+
+#: doc/classes/StaticBody2D.xml:20
+msgid ""
+"The body's constant angular velocity. This does not rotate the body, but "
+"affects colliding bodies, as if it were rotating."
+msgstr ""
+
+#: doc/classes/StaticBody2D.xml:23
+msgid ""
+"The body's constant linear velocity. This does not move the body, but "
+"affects colliding bodies, as if it were moving."
+msgstr ""
+
+#: doc/classes/StaticBody2D.xml:26
+msgid ""
+"The body's friction. Values range from [code]0[/code] (no friction) to "
+"[code]1[/code] (full friction).\n"
+"Deprecated, use [member PhysicsMaterial.friction] instead via [member "
+"physics_material_override]."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:4
+msgid "Abstraction and base class for stream-based protocols."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:7
+msgid ""
+"StreamPeer is an abstraction and base class for stream-based protocols (such "
+"as TCP). It provides an API for sending and receiving data through streams "
+"as raw data or strings."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:15
+msgid "Gets a signed 16-bit value from the stream."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:21
+msgid "Gets a signed 32-bit value from the stream."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:27
+msgid "Gets a signed 64-bit value from the stream."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:33
+msgid "Gets a signed byte from the stream."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:39
+msgid "Returns the amount of bytes this [StreamPeer] has available."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:46
+msgid ""
+"Returns a chunk data with the received bytes. The amount of bytes to be "
+"received can be requested in the [code]bytes[/code] argument. If not enough "
+"bytes are available, the function will block until the desired amount is "
+"received. This function returns two values, an [enum @GlobalScope.Error] "
+"code and a data array."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:52
+msgid "Gets a double-precision float from the stream."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:58
+msgid "Gets a single-precision float from the stream."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:65
+msgid ""
+"Returns a chunk data with the received bytes. The amount of bytes to be "
+"received can be requested in the \"bytes\" argument. If not enough bytes are "
+"available, the function will return how many were actually received. This "
+"function returns two values, an [enum @GlobalScope.Error] code, and a data "
+"array."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:72
+msgid ""
+"Gets a string with byte-length [code]bytes[/code] from the stream. If "
+"[code]bytes[/code] is negative (default) the length will be read from the "
+"stream using the reverse process of [method put_string]."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:78
+msgid "Gets an unsigned 16-bit value from the stream."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:84
+msgid "Gets an unsigned 32-bit value from the stream."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:90
+msgid "Gets an unsigned 64-bit value from the stream."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:96
+msgid "Gets an unsigned byte from the stream."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:103
+msgid ""
+"Gets an UTF-8 string with byte-length [code]bytes[/code] from the stream "
+"(this decodes the string sent as UTF-8). If [code]bytes[/code] is negative "
+"(default) the length will be read from the stream using the reverse process "
+"of [method put_utf8_string]."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:110
+msgid ""
+"Gets a Variant from the stream. If [code]allow_objects[/code] is [code]true[/"
+"code], decoding objects is allowed.\n"
+"[b]Warning:[/b] Deserialized objects can contain code which gets executed. "
+"Do not use this option if the serialized object comes from untrusted sources "
+"to avoid potential security threats such as remote code execution."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:118
+msgid "Puts a signed 16-bit value into the stream."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:125
+msgid "Puts a signed 32-bit value into the stream."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:132
+msgid "Puts a signed 64-bit value into the stream."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:139
+msgid "Puts a signed byte into the stream."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:146
+msgid ""
+"Sends a chunk of data through the connection, blocking if necessary until "
+"the data is done sending. This function returns an [enum @GlobalScope.Error] "
+"code."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:153
+msgid "Puts a double-precision float into the stream."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:160
+msgid "Puts a single-precision float into the stream."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:167
+msgid ""
+"Sends a chunk of data through the connection. If all the data could not be "
+"sent at once, only part of it will. This function returns two values, an "
+"[enum @GlobalScope.Error] code and an integer, describing how much data was "
+"actually sent."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:174
+msgid ""
+"Puts a zero-terminated ASCII string into the stream prepended by a 32-bit "
+"unsigned integer representing its size.\n"
+"[b]Note:[/b] To put an ASCII string without prepending its size, you can use "
+"[method put_data]:\n"
+"[codeblock]\n"
+"put_data(\"Hello world\".to_ascii())\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:185
+msgid "Puts an unsigned 16-bit value into the stream."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:192
+msgid "Puts an unsigned 32-bit value into the stream."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:199
+msgid "Puts an unsigned 64-bit value into the stream."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:206
+msgid "Puts an unsigned byte into the stream."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:213
+msgid ""
+"Puts a zero-terminated UTF-8 string into the stream prepended by a 32 bits "
+"unsigned integer representing its size.\n"
+"[b]Note:[/b] To put an UTF-8 string without prepending its size, you can use "
+"[method put_data]:\n"
+"[codeblock]\n"
+"put_data(\"Hello world\".to_utf8())\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:225
+msgid ""
+"Puts a Variant into the stream. If [code]full_objects[/code] is [code]true[/"
+"code] encoding objects is allowed (and can potentially include code)."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:231
+msgid ""
+"If [code]true[/code], this [StreamPeer] will using big-endian format for "
+"encoding and decoding."
+msgstr ""
+
+#: doc/classes/StreamPeerSSL.xml:4
+msgid "SSL stream peer."
+msgstr ""
+
+#: doc/classes/StreamPeerSSL.xml:7
+msgid ""
+"SSL stream peer. This object can be used to connect to an SSL server or "
+"accept a single SSL client connection."
+msgstr ""
+
+#: doc/classes/StreamPeerSSL.xml:20
+msgid ""
+"Accepts a peer connection as a server using the given [code]private_key[/"
+"code] and providing the given [code]certificate[/code] to the client. You "
+"can pass the optional [code]chain[/code] parameter to provide additional CA "
+"chain information along with the certificate."
+msgstr ""
+
+#: doc/classes/StreamPeerSSL.xml:30
+msgid ""
+"Connects to a peer using an underlying [StreamPeer] [code]stream[/code]. If "
+"[code]validate_certs[/code] is [code]true[/code], [StreamPeerSSL] will "
+"validate that the certificate presented by the peer matches the "
+"[code]for_hostname[/code].\n"
+"[b]Note:[/b] Specifying a custom [code]valid_certificate[/code] is not "
+"supported in HTML5 exports due to browsers restrictions."
+msgstr ""
+
+#: doc/classes/StreamPeerSSL.xml:37 doc/classes/StreamPeerTCP.xml:23
+msgid "Disconnects from host."
+msgstr ""
+
+#: doc/classes/StreamPeerSSL.xml:49
+msgid ""
+"Poll the connection to check for incoming bytes. Call this right before "
+"[method StreamPeer.get_available_bytes] for it to work properly."
+msgstr ""
+
+#: doc/classes/StreamPeerSSL.xml:59
+msgid "A status representing a [StreamPeerSSL] that is disconnected."
+msgstr ""
+
+#: doc/classes/StreamPeerSSL.xml:62
+msgid "A status representing a [StreamPeerSSL] during handshaking."
+msgstr ""
+
+#: doc/classes/StreamPeerSSL.xml:65
+msgid "A status representing a [StreamPeerSSL] that is connected to a host."
+msgstr ""
+
+#: doc/classes/StreamPeerSSL.xml:68
+msgid "A status representing a [StreamPeerSSL] in error state."
+msgstr ""
+
+#: doc/classes/StreamPeerSSL.xml:71
+msgid ""
+"An error status that shows a mismatch in the SSL certificate domain "
+"presented by the host and the domain requested for validation."
+msgstr ""
+
+#: doc/classes/StreamPeerTCP.xml:4
+msgid "TCP stream peer."
+msgstr ""
+
+#: doc/classes/StreamPeerTCP.xml:7
+msgid ""
+"TCP stream peer. This object can be used to connect to TCP servers, or also "
+"is returned by a TCP server."
+msgstr ""
+
+#: doc/classes/StreamPeerTCP.xml:17
+msgid ""
+"Connects to the specified [code]host:port[/code] pair. A hostname will be "
+"resolved if valid. Returns [constant OK] on success or [constant FAILED] on "
+"failure."
+msgstr ""
+
+#: doc/classes/StreamPeerTCP.xml:29
+msgid "Returns the IP of this peer."
+msgstr ""
+
+#: doc/classes/StreamPeerTCP.xml:35
+msgid "Returns the port of this peer."
+msgstr ""
+
+#: doc/classes/StreamPeerTCP.xml:41
+msgid "Returns the status of the connection, see [enum Status]."
+msgstr ""
+
+#: doc/classes/StreamPeerTCP.xml:47
+msgid ""
+"Returns [code]true[/code] if this peer is currently connected or is "
+"connecting to a host, [code]false[/code] otherwise."
+msgstr ""
+
+#: doc/classes/StreamPeerTCP.xml:54
+msgid ""
+"If [code]enabled[/code] is [code]true[/code], packets will be sent "
+"immediately. If [code]enabled[/code] is [code]false[/code] (the default), "
+"packet transfers will be delayed and combined using [url=https://en."
+"wikipedia.org/wiki/Nagle%27s_algorithm]Nagle's algorithm[/url].\n"
+"[b]Note:[/b] It's recommended to leave this disabled for applications that "
+"send large packets or need to transfer a lot of data, as enabling this can "
+"decrease the total available bandwidth."
+msgstr ""
+
+#: doc/classes/StreamPeerTCP.xml:61
+msgid ""
+"The initial status of the [StreamPeerTCP]. This is also the status after "
+"disconnecting."
+msgstr ""
+
+#: doc/classes/StreamPeerTCP.xml:64
+msgid "A status representing a [StreamPeerTCP] that is connecting to a host."
+msgstr ""
+
+#: doc/classes/StreamPeerTCP.xml:67
+msgid "A status representing a [StreamPeerTCP] that is connected to a host."
+msgstr ""
+
+#: doc/classes/StreamPeerTCP.xml:70
+msgid "A status representing a [StreamPeerTCP] in error state."
+msgstr ""
+
+#: doc/classes/StreamTexture.xml:4
+msgid "A [code].stex[/code] texture."
+msgstr ""
+
+#: doc/classes/StreamTexture.xml:7
+msgid "A texture that is loaded from a [code].stex[/code] file."
+msgstr ""
+
+#: doc/classes/StreamTexture.xml:16
+msgid "Loads the texture from the given path."
+msgstr ""
+
+#: doc/classes/StreamTexture.xml:23
+msgid "The StreamTexture's file path to a [code].stex[/code] file."
+msgstr ""
+
+#: doc/classes/String.xml:4
+msgid "Built-in string class."
+msgstr ""
+
+#: doc/classes/String.xml:7
+msgid ""
+"This is the built-in string class (and the one used by GDScript). It "
+"supports Unicode and provides all necessary means for string handling. "
+"Strings are reference-counted and use a copy-on-write approach, so passing "
+"them around is cheap in resources."
+msgstr ""
+
+#: doc/classes/String.xml:10
+msgid ""
+"https://docs.godotengine.org/en/3.4/getting_started/scripting/gdscript/"
+"gdscript_format_string.html"
+msgstr ""
+
+#: doc/classes/String.xml:17
+msgid "Constructs a new String from the given [bool]."
+msgstr ""
+
+#: doc/classes/String.xml:24
+msgid "Constructs a new String from the given [int]."
+msgstr ""
+
+#: doc/classes/String.xml:31
+msgid "Constructs a new String from the given [float]."
+msgstr ""
+
+#: doc/classes/String.xml:38
+msgid "Constructs a new String from the given [Vector2]."
+msgstr ""
+
+#: doc/classes/String.xml:45
+msgid "Constructs a new String from the given [Rect2]."
+msgstr ""
+
+#: doc/classes/String.xml:52
+msgid "Constructs a new String from the given [Vector3]."
+msgstr ""
+
+#: doc/classes/String.xml:59
+msgid "Constructs a new String from the given [Transform2D]."
+msgstr ""
+
+#: doc/classes/String.xml:66
+msgid "Constructs a new String from the given [Plane]."
+msgstr ""
+
+#: doc/classes/String.xml:73
+msgid "Constructs a new String from the given [Quat]."
+msgstr ""
+
+#: doc/classes/String.xml:80
+msgid "Constructs a new String from the given [AABB]."
+msgstr ""
+
+#: doc/classes/String.xml:87
+msgid "Constructs a new String from the given [Basis]."
+msgstr ""
+
+#: doc/classes/String.xml:94
+msgid "Constructs a new String from the given [Transform]."
+msgstr ""
+
+#: doc/classes/String.xml:101
+msgid "Constructs a new String from the given [Color]."
+msgstr ""
+
+#: doc/classes/String.xml:108
+msgid "Constructs a new String from the given [NodePath]."
+msgstr ""
+
+#: doc/classes/String.xml:115
+msgid "Constructs a new String from the given [RID]."
+msgstr ""
+
+#: doc/classes/String.xml:122
+msgid "Constructs a new String from the given [Dictionary]."
+msgstr ""
+
+#: doc/classes/String.xml:129
+msgid "Constructs a new String from the given [Array]."
+msgstr ""
+
+#: doc/classes/String.xml:136
+msgid "Constructs a new String from the given [PoolByteArray]."
+msgstr ""
+
+#: doc/classes/String.xml:143
+msgid "Constructs a new String from the given [PoolIntArray]."
+msgstr ""
+
+#: doc/classes/String.xml:150
+msgid "Constructs a new String from the given [PoolRealArray]."
+msgstr ""
+
+#: doc/classes/String.xml:157
+msgid "Constructs a new String from the given [PoolStringArray]."
+msgstr ""
+
+#: doc/classes/String.xml:164
+msgid "Constructs a new String from the given [PoolVector2Array]."
+msgstr ""
+
+#: doc/classes/String.xml:171
+msgid "Constructs a new String from the given [PoolVector3Array]."
+msgstr ""
+
+#: doc/classes/String.xml:178
+msgid "Constructs a new String from the given [PoolColorArray]."
+msgstr ""
+
+#: doc/classes/String.xml:185
+msgid "Returns [code]true[/code] if the string begins with the given string."
+msgstr ""
+
+#: doc/classes/String.xml:191
+msgid "Returns the bigrams (pairs of consecutive letters) of this string."
+msgstr ""
+
+#: doc/classes/String.xml:197
+msgid ""
+"Returns a copy of the string with special characters escaped using the C "
+"language standard."
+msgstr ""
+
+#: doc/classes/String.xml:203
+msgid ""
+"Returns a copy of the string with escaped characters replaced by their "
+"meanings. Supported escape sequences are [code]\\'[/code], [code]\\\"[/"
+"code], [code]\\?[/code], [code]\\\\[/code], [code]\\a[/code], [code]\\b[/"
+"code], [code]\\f[/code], [code]\\n[/code], [code]\\r[/code], [code]\\t[/"
+"code], [code]\\v[/code].\n"
+"[b]Note:[/b] Unlike the GDScript parser, this method doesn't support the "
+"[code]\\uXXXX[/code] escape sequence."
+msgstr ""
+
+#: doc/classes/String.xml:210
+msgid ""
+"Changes the case of some letters. Replaces underscores with spaces, adds "
+"spaces before in-word uppercase characters, converts all letters to "
+"lowercase, then capitalizes the first letter and every letter following a "
+"space character. For [code]capitalize camelCase mixed_with_underscores[/"
+"code], it will return [code]Capitalize Camel Case Mixed With Underscores[/"
+"code]."
+msgstr ""
+
+#: doc/classes/String.xml:217
+msgid ""
+"Performs a case-sensitive comparison to another string. Returns [code]-1[/"
+"code] if less than, [code]1[/code] if greater than, or [code]0[/code] if "
+"equal. \"less than\" or \"greater than\" are determined by the [url=https://"
+"en.wikipedia.org/wiki/List_of_Unicode_characters]Unicode code points[/url] "
+"of each string, which roughly matches the alphabetical order.\n"
+"[b]Behavior with different string lengths:[/b] Returns [code]1[/code] if the "
+"\"base\" string is longer than the [code]to[/code] string or [code]-1[/code] "
+"if the \"base\" string is shorter than the [code]to[/code] string. Keep in "
+"mind this length is determined by the number of Unicode codepoints, [i]not[/"
+"i] the actual visible characters.\n"
+"[b]Behavior with empty strings:[/b] Returns [code]-1[/code] if the \"base\" "
+"string is empty, [code]1[/code] if the [code]to[/code] string is empty or "
+"[code]0[/code] if both strings are empty.\n"
+"To get a boolean result from a string comparison, use the [code]==[/code] "
+"operator instead. See also [method nocasecmp_to]."
+msgstr ""
+
+#: doc/classes/String.xml:229
+msgid ""
+"Returns the number of occurrences of substring [code]what[/code] between "
+"[code]from[/code] and [code]to[/code] positions. If [code]from[/code] and "
+"[code]to[/code] equals 0 the whole string will be used. If only [code]to[/"
+"code] equals 0 the remained substring will be used."
+msgstr ""
+
+#: doc/classes/String.xml:238
+msgid ""
+"Returns the number of occurrences of substring [code]what[/code] (ignoring "
+"case) between [code]from[/code] and [code]to[/code] positions. If "
+"[code]from[/code] and [code]to[/code] equals 0 the whole string will be "
+"used. If only [code]to[/code] equals 0 the remained substring will be used."
+msgstr ""
+
+#: doc/classes/String.xml:244
+msgid ""
+"Returns a copy of the string with indentation (leading tabs and spaces) "
+"removed."
+msgstr ""
+
+#: doc/classes/String.xml:250
+msgid ""
+"Returns [code]true[/code] if the length of the string equals [code]0[/code]."
+msgstr ""
+
+#: doc/classes/String.xml:257
+msgid "Returns [code]true[/code] if the string ends with the given string."
+msgstr ""
+
+#: doc/classes/String.xml:264
+msgid ""
+"Erases [code]chars[/code] characters from the string starting from "
+"[code]position[/code]."
+msgstr ""
+
+#: doc/classes/String.xml:272
+msgid ""
+"Finds the first occurrence of a substring. Returns the starting position of "
+"the substring or [code]-1[/code] if not found. Optionally, the initial "
+"search index can be passed.\n"
+"[b]Note:[/b] If you just want to know whether a string contains a substring, "
+"use the [code]in[/code] operator as follows:\n"
+"[codeblock]\n"
+"# Will evaluate to `false`.\n"
+"if \"i\" in \"team\":\n"
+" pass\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/String.xml:285
+msgid ""
+"Finds the last occurrence of a substring. Returns the starting position of "
+"the substring or [code]-1[/code] if not found."
+msgstr ""
+
+#: doc/classes/String.xml:293
+msgid ""
+"Finds the first occurrence of a substring, ignoring case. Returns the "
+"starting position of the substring or [code]-1[/code] if not found. "
+"Optionally, the initial search index can be passed."
+msgstr ""
+
+#: doc/classes/String.xml:301
+msgid ""
+"Formats the string by replacing all occurrences of [code]placeholder[/code] "
+"with [code]values[/code]."
+msgstr ""
+
+#: doc/classes/String.xml:307
+msgid "If the string is a valid file path, returns the base directory name."
+msgstr ""
+
+#: doc/classes/String.xml:313
+msgid ""
+"If the string is a valid file path, returns the full file path without the "
+"extension."
+msgstr ""
+
+#: doc/classes/String.xml:319
+msgid ""
+"Returns the extension without the leading period character ([code].[/code]) "
+"if the string is a valid file name or path. If the string does not contain "
+"an extension, returns an empty string instead.\n"
+"[codeblock]\n"
+"print(\"/path/to/file.txt\".get_extension()) # \"txt\"\n"
+"print(\"file.txt\".get_extension()) # \"txt\"\n"
+"print(\"file.sample.txt\".get_extension()) # \"txt\"\n"
+"print(\".txt\".get_extension()) # \"txt\"\n"
+"print(\"file.txt.\".get_extension()) # \"\" (empty string)\n"
+"print(\"file.txt..\".get_extension()) # \"\" (empty string)\n"
+"print(\"txt\".get_extension()) # \"\" (empty string)\n"
+"print(\"\".get_extension()) # \"\" (empty string)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/String.xml:335
+msgid "If the string is a valid file path, returns the filename."
+msgstr ""
+
+#: doc/classes/String.xml:341
+msgid "Hashes the string and returns a 32-bit integer."
+msgstr ""
+
+#: doc/classes/String.xml:347
+msgid ""
+"Converts a string containing a hexadecimal number into an integer. "
+"Hexadecimal strings are expected to be prefixed with \"[code]0x[/code]\" "
+"otherwise [code]0[/code] is returned.\n"
+"[codeblock]\n"
+"print(\"0xff\".hex_to_int()) # Print \"255\"\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/String.xml:356
+msgid ""
+"Escapes (encodes) a string to URL friendly format. Also referred to as 'URL "
+"encode'.\n"
+"[codeblock]\n"
+"print(\"https://example.org/?escaped=\" + \"Godot Engine:'docs'\"."
+"http_escape())\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/String.xml:365
+msgid ""
+"Unescapes (decodes) a string in URL encoded format. Also referred to as 'URL "
+"decode'.\n"
+"[codeblock]\n"
+"print(\"https://example.org/?escaped=\" + \"Godot%20Engine%3A%27docs%27\"."
+"http_unescape())\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/String.xml:375
+msgid ""
+"Converts [code]size[/code] represented as number of bytes to human-readable "
+"format using internationalized set of data size units, namely: B, KiB, MiB, "
+"GiB, TiB, PiB, EiB. Note that the next smallest unit is picked automatically "
+"to hold at most 1024 units.\n"
+"[codeblock]\n"
+"var bytes = 133790307\n"
+"var size = String.humanize_size(bytes)\n"
+"print(size) # prints \"127.5 MiB\"\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/String.xml:388
+msgid ""
+"Returns a copy of the string with the substring [code]what[/code] inserted "
+"at the given position."
+msgstr ""
+
+#: doc/classes/String.xml:394
+msgid ""
+"If the string is a path to a file or directory, returns [code]true[/code] if "
+"the path is absolute."
+msgstr ""
+
+#: doc/classes/String.xml:400
+msgid ""
+"If the string is a path to a file or directory, returns [code]true[/code] if "
+"the path is relative."
+msgstr ""
+
+#: doc/classes/String.xml:407
+msgid ""
+"Returns [code]true[/code] if this string is a subsequence of the given "
+"string."
+msgstr ""
+
+#: doc/classes/String.xml:414
+msgid ""
+"Returns [code]true[/code] if this string is a subsequence of the given "
+"string, without considering case."
+msgstr ""
+
+#: doc/classes/String.xml:420
+msgid ""
+"Returns [code]true[/code] if this string is free from characters that aren't "
+"allowed in file names, those being:\n"
+"[code]: / \\ ? * \" | % < >[/code]"
+msgstr ""
+
+#: doc/classes/String.xml:427
+msgid "Returns [code]true[/code] if this string contains a valid float."
+msgstr ""
+
+#: doc/classes/String.xml:434
+msgid ""
+"Returns [code]true[/code] if this string contains a valid hexadecimal "
+"number. If [code]with_prefix[/code] is [code]true[/code], then a validity of "
+"the hexadecimal number is determined by [code]0x[/code] prefix, for "
+"instance: [code]0xDEADC0DE[/code]."
+msgstr ""
+
+#: doc/classes/String.xml:440
+msgid ""
+"Returns [code]true[/code] if this string contains a valid color in "
+"hexadecimal HTML notation. Other HTML notations such as named colors or "
+"[code]hsl()[/code] colors aren't considered valid by this method and will "
+"return [code]false[/code]."
+msgstr ""
+
+#: doc/classes/String.xml:446
+msgid ""
+"Returns [code]true[/code] if this string is a valid identifier. A valid "
+"identifier may contain only letters, digits and underscores ([code]_[/code]) "
+"and the first character may not be a digit."
+msgstr ""
+
+#: doc/classes/String.xml:452
+msgid "Returns [code]true[/code] if this string contains a valid integer."
+msgstr ""
+
+#: doc/classes/String.xml:458
+msgid ""
+"Returns [code]true[/code] if this string contains only a well-formatted IPv4 "
+"or IPv6 address. This method considers [url=https://en.wikipedia.org/wiki/"
+"Reserved_IP_addresses]reserved IP addresses[/url] such as [code]0.0.0.0[/"
+"code] as valid."
+msgstr ""
+
+#: doc/classes/String.xml:464
+msgid ""
+"Returns a copy of the string with special characters escaped using the JSON "
+"standard."
+msgstr ""
+
+#: doc/classes/String.xml:471
+msgid "Returns a number of characters from the left of the string."
+msgstr ""
+
+#: doc/classes/String.xml:477
+msgid "Returns the string's amount of characters."
+msgstr ""
+
+#: doc/classes/String.xml:484
+msgid ""
+"Returns a copy of the string with characters removed from the left. The "
+"[code]chars[/code] argument is a string specifying the set of characters to "
+"be removed.\n"
+"[b]Note:[/b] The [code]chars[/code] is not a prefix. See [method "
+"trim_prefix] method that will remove a single prefix string rather than a "
+"set of characters."
+msgstr ""
+
+#: doc/classes/String.xml:492
+msgid ""
+"Does a simple case-sensitive expression match, where [code]\"*\"[/code] "
+"matches zero or more arbitrary characters and [code]\"?\"[/code] matches any "
+"single character except a period ([code]\".\"[/code])."
+msgstr ""
+
+#: doc/classes/String.xml:499
+msgid ""
+"Does a simple case-insensitive expression match, where [code]\"*\"[/code] "
+"matches zero or more arbitrary characters and [code]\"?\"[/code] matches any "
+"single character except a period ([code]\".\"[/code])."
+msgstr ""
+
+#: doc/classes/String.xml:505
+msgid "Returns the MD5 hash of the string as an array of bytes."
+msgstr ""
+
+#: doc/classes/String.xml:511
+msgid "Returns the MD5 hash of the string as a string."
+msgstr ""
+
+#: doc/classes/String.xml:518
+msgid ""
+"Performs a case-insensitive [i]natural order[/i] comparison to another "
+"string. Returns [code]-1[/code] if less than, [code]1[/code] if greater "
+"than, or [code]0[/code] if equal. \"less than\" or \"greater than\" are "
+"determined by the [url=https://en.wikipedia.org/wiki/"
+"List_of_Unicode_characters]Unicode code points[/url] of each string, which "
+"roughly matches the alphabetical order. Internally, lowercase characters "
+"will be converted to uppercase during the comparison.\n"
+"When used for sorting, natural order comparison will order suites of numbers "
+"as expected by most people. If you sort the numbers from 1 to 10 using "
+"natural order, you will get [code][1, 2, 3, ...][/code] instead of [code][1, "
+"10, 2, 3, ...][/code].\n"
+"[b]Behavior with different string lengths:[/b] Returns [code]1[/code] if the "
+"\"base\" string is longer than the [code]to[/code] string or [code]-1[/code] "
+"if the \"base\" string is shorter than the [code]to[/code] string. Keep in "
+"mind this length is determined by the number of Unicode codepoints, [i]not[/"
+"i] the actual visible characters.\n"
+"[b]Behavior with empty strings:[/b] Returns [code]-1[/code] if the \"base\" "
+"string is empty, [code]1[/code] if the [code]to[/code] string is empty or "
+"[code]0[/code] if both strings are empty.\n"
+"To get a boolean result from a string comparison, use the [code]==[/code] "
+"operator instead. See also [method nocasecmp_to] and [method casecmp_to]."
+msgstr ""
+
+#: doc/classes/String.xml:529
+msgid ""
+"Performs a case-insensitive comparison to another string. Returns [code]-1[/"
+"code] if less than, [code]1[/code] if greater than, or [code]0[/code] if "
+"equal. \"less than\" or \"greater than\" are determined by the [url=https://"
+"en.wikipedia.org/wiki/List_of_Unicode_characters]Unicode code points[/url] "
+"of each string, which roughly matches the alphabetical order. Internally, "
+"lowercase characters will be converted to uppercase during the comparison.\n"
+"[b]Behavior with different string lengths:[/b] Returns [code]1[/code] if the "
+"\"base\" string is longer than the [code]to[/code] string or [code]-1[/code] "
+"if the \"base\" string is shorter than the [code]to[/code] string. Keep in "
+"mind this length is determined by the number of Unicode codepoints, [i]not[/"
+"i] the actual visible characters.\n"
+"[b]Behavior with empty strings:[/b] Returns [code]-1[/code] if the \"base\" "
+"string is empty, [code]1[/code] if the [code]to[/code] string is empty or "
+"[code]0[/code] if both strings are empty.\n"
+"To get a boolean result from a string comparison, use the [code]==[/code] "
+"operator instead. See also [method casecmp_to]."
+msgstr ""
+
+#: doc/classes/String.xml:539
+msgid "Returns the character code at position [code]at[/code]."
+msgstr ""
+
+#: doc/classes/String.xml:546
+msgid ""
+"Formats a number to have an exact number of [code]digits[/code] after the "
+"decimal point."
+msgstr ""
+
+#: doc/classes/String.xml:553
+msgid ""
+"Formats a number to have an exact number of [code]digits[/code] before the "
+"decimal point."
+msgstr ""
+
+#: doc/classes/String.xml:559
+msgid "Decode a percent-encoded string. See [method percent_encode]."
+msgstr ""
+
+#: doc/classes/String.xml:565
+msgid ""
+"Percent-encodes a string. Encodes parameters in a URL when sending a HTTP "
+"GET request (and bodies of form-urlencoded POST requests)."
+msgstr ""
+
+#: doc/classes/String.xml:572
+msgid ""
+"If the string is a path, this concatenates [code]file[/code] at the end of "
+"the string as a subpath. E.g. [code]\"this/is\".plus_file(\"path\") == "
+"\"this/is/path\"[/code]."
+msgstr ""
+
+#: doc/classes/String.xml:579
+msgid ""
+"Returns original string repeated a number of times. The number of "
+"repetitions is given by the argument."
+msgstr ""
+
+#: doc/classes/String.xml:587
+msgid ""
+"Replaces occurrences of a case-sensitive substring with the given one inside "
+"the string."
+msgstr ""
+
+#: doc/classes/String.xml:595
+msgid ""
+"Replaces occurrences of a case-insensitive substring with the given one "
+"inside the string."
+msgstr ""
+
+#: doc/classes/String.xml:603
+msgid ""
+"Performs a case-sensitive search for a substring, but starts from the end of "
+"the string instead of the beginning."
+msgstr ""
+
+#: doc/classes/String.xml:611
+msgid ""
+"Performs a case-insensitive search for a substring, but starts from the end "
+"of the string instead of the beginning."
+msgstr ""
+
+#: doc/classes/String.xml:618
+msgid "Returns the right side of the string from a given position."
+msgstr ""
+
+#: doc/classes/String.xml:627
+msgid ""
+"Splits the string by a [code]delimiter[/code] string and returns an array of "
+"the substrings, starting from right.\n"
+"The splits in the returned array are sorted in the same order as the "
+"original string, from left to right.\n"
+"If [code]maxsplit[/code] is specified, it defines the number of splits to do "
+"from the right up to [code]maxsplit[/code]. The default value of 0 means "
+"that all items are split, thus giving the same result as [method split].\n"
+"Example:\n"
+"[codeblock]\n"
+"var some_string = \"One,Two,Three,Four\"\n"
+"var some_array = some_string.rsplit(\",\", true, 1)\n"
+"print(some_array.size()) # Prints 2\n"
+"print(some_array[0]) # Prints \"Four\"\n"
+"print(some_array[1]) # Prints \"Three,Two,One\"\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/String.xml:644
+msgid ""
+"Returns a copy of the string with characters removed from the right. The "
+"[code]chars[/code] argument is a string specifying the set of characters to "
+"be removed.\n"
+"[b]Note:[/b] The [code]chars[/code] is not a suffix. See [method "
+"trim_suffix] method that will remove a single suffix string rather than a "
+"set of characters."
+msgstr ""
+
+#: doc/classes/String.xml:651
+msgid "Returns the SHA-1 hash of the string as an array of bytes."
+msgstr ""
+
+#: doc/classes/String.xml:657
+msgid "Returns the SHA-1 hash of the string as a string."
+msgstr ""
+
+#: doc/classes/String.xml:663
+msgid "Returns the SHA-256 hash of the string as an array of bytes."
+msgstr ""
+
+#: doc/classes/String.xml:669
+msgid "Returns the SHA-256 hash of the string as a string."
+msgstr ""
+
+#: doc/classes/String.xml:676
+msgid ""
+"Returns the similarity index of the text compared to this string. 1 means "
+"totally similar and 0 means totally dissimilar."
+msgstr ""
+
+#: doc/classes/String.xml:682
+msgid "Returns a simplified canonical path."
+msgstr ""
+
+#: doc/classes/String.xml:691
+msgid ""
+"Splits the string by a [code]delimiter[/code] string and returns an array of "
+"the substrings. The [code]delimiter[/code] can be of any length.\n"
+"If [code]maxsplit[/code] is specified, it defines the number of splits to do "
+"from the left up to [code]maxsplit[/code]. The default value of [code]0[/"
+"code] means that all items are split.\n"
+"Example:\n"
+"[codeblock]\n"
+"var some_string = \"One,Two,Three,Four\"\n"
+"var some_array = some_string.split(\",\", true, 1)\n"
+"print(some_array.size()) # Prints 2\n"
+"print(some_array[0]) # Prints \"One\"\n"
+"print(some_array[1]) # Prints \"Two,Three,Four\"\n"
+"[/codeblock]\n"
+"If you need to split strings with more complex rules, use the [RegEx] class "
+"instead."
+msgstr ""
+
+#: doc/classes/String.xml:709
+msgid ""
+"Splits the string in floats by using a delimiter string and returns an array "
+"of the substrings.\n"
+"For example, [code]\"1,2.5,3\"[/code] will return [code][1,2.5,3][/code] if "
+"split by [code]\",\"[/code]."
+msgstr ""
+
+#: doc/classes/String.xml:718
+msgid ""
+"Returns a copy of the string stripped of any non-printable character "
+"(including tabulations, spaces and line breaks) at the beginning and the "
+"end. The optional arguments are used to toggle stripping on the left and "
+"right edges respectively."
+msgstr ""
+
+#: doc/classes/String.xml:724
+msgid ""
+"Returns a copy of the string stripped of any escape character. These include "
+"all non-printable control characters of the first page of the ASCII table (< "
+"32), such as tabulation ([code]\\t[/code] in C) and newline ([code]\\n[/"
+"code] and [code]\\r[/code]) characters, but not spaces."
+msgstr ""
+
+#: doc/classes/String.xml:732
+msgid ""
+"Returns part of the string from the position [code]from[/code] with length "
+"[code]len[/code]. Argument [code]len[/code] is optional and using [code]-1[/"
+"code] will return remaining characters from given position."
+msgstr ""
+
+#: doc/classes/String.xml:738
+msgid ""
+"Converts the String (which is a character array) to [PoolByteArray] (which "
+"is an array of bytes). The conversion is faster compared to [method "
+"to_utf8], as this method assumes that all the characters in the String are "
+"ASCII characters."
+msgstr ""
+
+#: doc/classes/String.xml:744
+msgid ""
+"Converts a string containing a decimal number into a [code]float[/code]."
+msgstr ""
+
+#: doc/classes/String.xml:750
+msgid ""
+"Converts a string containing an integer number into an [code]int[/code]."
+msgstr ""
+
+#: doc/classes/String.xml:756
+msgid "Returns the string converted to lowercase."
+msgstr ""
+
+#: doc/classes/String.xml:762
+msgid "Returns the string converted to uppercase."
+msgstr ""
+
+#: doc/classes/String.xml:768
+msgid ""
+"Converts the String (which is an array of characters) to [PoolByteArray] "
+"(which is an array of bytes). The conversion is a bit slower than [method "
+"to_ascii], but supports all UTF-8 characters. Therefore, you should prefer "
+"this function over [method to_ascii]."
+msgstr ""
+
+#: doc/classes/String.xml:774
+msgid ""
+"Converts the String (which is an array of characters) to [PoolByteArray] "
+"(which is an array of bytes)."
+msgstr ""
+
+#: doc/classes/String.xml:781
+msgid ""
+"Removes a given string from the start if it starts with it or leaves the "
+"string unchanged."
+msgstr ""
+
+#: doc/classes/String.xml:788
+msgid ""
+"Removes a given string from the end if it ends with it or leaves the string "
+"unchanged."
+msgstr ""
+
+#: doc/classes/String.xml:794
+msgid ""
+"Removes any characters from the string that are prohibited in [Node] names "
+"([code].[/code] [code]:[/code] [code]@[/code] [code]/[/code] [code]\"[/"
+"code])."
+msgstr ""
+
+#: doc/classes/String.xml:800
+msgid ""
+"Returns a copy of the string with special characters escaped using the XML "
+"standard."
+msgstr ""
+
+#: doc/classes/String.xml:806
+msgid ""
+"Returns a copy of the string with escaped characters replaced by their "
+"meanings according to the XML standard."
+msgstr ""
+
+#: doc/classes/StyleBox.xml:4
+msgid "Base class for drawing stylized boxes for the UI."
+msgstr ""
+
+#: doc/classes/StyleBox.xml:7
+msgid ""
+"StyleBox is [Resource] that provides an abstract base class for drawing "
+"stylized boxes for the UI. StyleBoxes are used for drawing the styles of "
+"buttons, line edit backgrounds, tree backgrounds, etc. and also for testing "
+"a transparency mask for pointer signals. If mask test fails on a StyleBox "
+"assigned as mask to a control, clicks and motion signals will go through it "
+"to the one below.\n"
+"[b]Note:[/b] For children of [Control] that have [i]Theme Properties[/i], "
+"the [code]focus[/code] [StyleBox] is displayed over the [code]normal[/code], "
+"[code]hover[/code] or [code]pressed[/code] [StyleBox]. This makes the "
+"[code]focus[/code] [StyleBox] more reusable across different nodes."
+msgstr ""
+
+#: doc/classes/StyleBox.xml:18
+msgid ""
+"Draws this stylebox using a [CanvasItem] with given [RID].\n"
+"You can get a [RID] value using [method Object.get_instance_id] on a "
+"[CanvasItem]-derived node."
+msgstr ""
+
+#: doc/classes/StyleBox.xml:25
+msgid "Returns the size of this [StyleBox] without the margins."
+msgstr ""
+
+#: doc/classes/StyleBox.xml:31
+msgid ""
+"Returns the [CanvasItem] that handles its [constant CanvasItem."
+"NOTIFICATION_DRAW] or [method CanvasItem._draw] callback at this moment."
+msgstr ""
+
+#: doc/classes/StyleBox.xml:38
+msgid "Returns the default value of the specified [enum Margin]."
+msgstr ""
+
+#: doc/classes/StyleBox.xml:45
+msgid ""
+"Returns the content margin offset for the specified [enum Margin].\n"
+"Positive values reduce size inwards, unlike [Control]'s margin values."
+msgstr ""
+
+#: doc/classes/StyleBox.xml:52
+msgid "Returns the minimum size that this stylebox can be shrunk to."
+msgstr ""
+
+#: doc/classes/StyleBox.xml:58
+msgid ""
+"Returns the \"offset\" of a stylebox. This helper function returns a value "
+"equivalent to [code]Vector2(style.get_margin(MARGIN_LEFT), style."
+"get_margin(MARGIN_TOP))[/code]."
+msgstr ""
+
+#: doc/classes/StyleBox.xml:66
+msgid ""
+"Sets the default value of the specified [enum Margin] to given [code]offset[/"
+"code] in pixels."
+msgstr ""
+
+#: doc/classes/StyleBox.xml:74
+msgid "Test a position in a rectangle, return whether it passes the mask test."
+msgstr ""
+
+#: doc/classes/StyleBox.xml:80
+msgid ""
+"The bottom margin for the contents of this style box. Increasing this value "
+"reduces the space available to the contents from the bottom.\n"
+"If this value is negative, it is ignored and a child-specific margin is used "
+"instead. For example for [StyleBoxFlat] the border thickness (if any) is "
+"used instead.\n"
+"It is up to the code using this style box to decide what these contents are: "
+"for example, a [Button] respects this content margin for the textual "
+"contents of the button.\n"
+"[method get_margin] should be used to fetch this value as consumer instead "
+"of reading these properties directly. This is because it correctly respects "
+"negative values and the fallback mentioned above."
+msgstr ""
+
+#: doc/classes/StyleBox.xml:86
+msgid ""
+"The left margin for the contents of this style box.Increasing this value "
+"reduces the space available to the contents from the left.\n"
+"Refer to [member content_margin_bottom] for extra considerations."
+msgstr ""
+
+#: doc/classes/StyleBox.xml:90
+msgid ""
+"The right margin for the contents of this style box. Increasing this value "
+"reduces the space available to the contents from the right.\n"
+"Refer to [member content_margin_bottom] for extra considerations."
+msgstr ""
+
+#: doc/classes/StyleBox.xml:94
+msgid ""
+"The top margin for the contents of this style box. Increasing this value "
+"reduces the space available to the contents from the top.\n"
+"Refer to [member content_margin_bottom] for extra considerations."
+msgstr ""
+
+#: doc/classes/StyleBoxEmpty.xml:4
+msgid "Empty stylebox (does not display anything)."
+msgstr ""
+
+#: doc/classes/StyleBoxEmpty.xml:7
+msgid "Empty stylebox (really does not display anything)."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:4
+msgid ""
+"Customizable [StyleBox] with a given set of parameters (no texture required)."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:7
+msgid ""
+"This [StyleBox] can be used to achieve all kinds of looks without the need "
+"of a texture. The following properties are customizable:\n"
+"- Color\n"
+"- Border width (individual width for each border)\n"
+"- Rounded corners (individual radius for each corner)\n"
+"- Shadow (with blur and offset)\n"
+"Setting corner radius to high values is allowed. As soon as corners overlap, "
+"the stylebox will switch to a relative system. Example:\n"
+"[codeblock]\n"
+"height = 30\n"
+"corner_radius_top_left = 50\n"
+"corner_radius_bottom_left = 100\n"
+"[/codeblock]\n"
+"The relative system now would take the 1:2 ratio of the two left corners to "
+"calculate the actual corner width. Both corners added will [b]never[/b] be "
+"more than the height. Result:\n"
+"[codeblock]\n"
+"corner_radius_top_left: 10\n"
+"corner_radius_bottom_left: 20\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:31
+msgid ""
+"Returns the given [code]margin[/code]'s border width. See [enum Margin] for "
+"possible values."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:37
+msgid "Returns the smallest border width out of all four borders."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:44
+msgid ""
+"Returns the given [code]corner[/code]'s radius. See [enum Corner] for "
+"possible values."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:51 doc/classes/StyleBoxTexture.xml:16
+msgid ""
+"Returns the size of the given [code]margin[/code]'s expand margin. See [enum "
+"Margin] for possible values."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:59
+msgid ""
+"Sets the border width to [code]width[/code] pixels for the given "
+"[code]margin[/code]. See [enum Margin] for possible values."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:66
+msgid "Sets the border width to [code]width[/code] pixels for all margins."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:74
+msgid ""
+"Sets the corner radius to [code]radius[/code] pixels for the given "
+"[code]corner[/code]. See [enum Corner] for possible values."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:81
+msgid "Sets the corner radius to [code]radius[/code] pixels for all corners."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:91
+msgid ""
+"Sets the corner radius for each corner to [code]radius_top_left[/code], "
+"[code]radius_top_right[/code], [code]radius_bottom_right[/code], and "
+"[code]radius_bottom_left[/code] pixels."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:99 doc/classes/StyleBoxTexture.xml:48
+msgid ""
+"Sets the expand margin to [code]size[/code] pixels for the given "
+"[code]margin[/code]. See [enum Margin] for possible values."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:106 doc/classes/StyleBoxTexture.xml:30
+msgid "Sets the expand margin to [code]size[/code] pixels for all margins."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:116 doc/classes/StyleBoxTexture.xml:40
+msgid ""
+"Sets the expand margin for each margin to [code]size_left[/code], "
+"[code]size_top[/code], [code]size_right[/code], and [code]size_bottom[/code] "
+"pixels."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:122
+msgid ""
+"Antialiasing draws a small ring around the edges, which fades to "
+"transparency. As a result, edges look much smoother. This is only noticeable "
+"when using rounded corners.\n"
+"[b]Note:[/b] When using beveled corners with 45-degree angles ([member "
+"corner_detail] = 1), it is recommended to set [member anti_aliasing] to "
+"[code]false[/code] to ensure crisp visuals and avoid possible visual "
+"glitches."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:126
+msgid ""
+"This changes the size of the faded ring. Higher values can be used to "
+"achieve a \"blurry\" effect."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:129
+msgid "The background color of the stylebox."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:132
+msgid "If [code]true[/code], the border will fade into the background color."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:135
+msgid "Sets the color of the border."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:138
+msgid "Border width for the bottom border."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:141
+msgid "Border width for the left border."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:144
+msgid "Border width for the right border."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:147
+msgid "Border width for the top border."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:150
+msgid ""
+"This sets the number of vertices used for each corner. Higher values result "
+"in rounder corners but take more processing power to compute. When choosing "
+"a value, you should take the corner radius ([method set_corner_radius_all]) "
+"into account.\n"
+"For corner radii less than 10, [code]4[/code] or [code]5[/code] should be "
+"enough. For corner radii less than 30, values between [code]8[/code] and "
+"[code]12[/code] should be enough.\n"
+"A corner detail of [code]1[/code] will result in chamfered corners instead "
+"of rounded corners, which is useful for some artistic effects."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:155
+msgid ""
+"The bottom-left corner's radius. If [code]0[/code], the corner is not "
+"rounded."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:158
+msgid ""
+"The bottom-right corner's radius. If [code]0[/code], the corner is not "
+"rounded."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:161
+msgid ""
+"The top-left corner's radius. If [code]0[/code], the corner is not rounded."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:164
+msgid ""
+"The top-right corner's radius. If [code]0[/code], the corner is not rounded."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:167
+msgid "Toggles drawing of the inner part of the stylebox."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:170
+msgid ""
+"Expands the stylebox outside of the control rect on the bottom edge. Useful "
+"in combination with [member border_width_bottom] to draw a border outside "
+"the control rect."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:173
+msgid ""
+"Expands the stylebox outside of the control rect on the left edge. Useful in "
+"combination with [member border_width_left] to draw a border outside the "
+"control rect."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:176
+msgid ""
+"Expands the stylebox outside of the control rect on the right edge. Useful "
+"in combination with [member border_width_right] to draw a border outside the "
+"control rect."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:179
+msgid ""
+"Expands the stylebox outside of the control rect on the top edge. Useful in "
+"combination with [member border_width_top] to draw a border outside the "
+"control rect."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:182
+msgid ""
+"The color of the shadow. This has no effect if [member shadow_size] is lower "
+"than 1."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:185
+msgid ""
+"The shadow offset in pixels. Adjusts the position of the shadow relatively "
+"to the stylebox."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:188
+msgid "The shadow size in pixels."
+msgstr ""
+
+#: doc/classes/StyleBoxLine.xml:4
+msgid "[StyleBox] that displays a single line."
+msgstr ""
+
+#: doc/classes/StyleBoxLine.xml:7
+msgid ""
+"[StyleBox] that displays a single line of a given color and thickness. It "
+"can be used to draw things like separators."
+msgstr ""
+
+#: doc/classes/StyleBoxLine.xml:15
+msgid "The line's color."
+msgstr ""
+
+#: doc/classes/StyleBoxLine.xml:18
+msgid ""
+"The number of pixels the line will extend before the [StyleBoxLine]'s "
+"bounds. If set to a negative value, the line will begin inside the "
+"[StyleBoxLine]'s bounds."
+msgstr ""
+
+#: doc/classes/StyleBoxLine.xml:21
+msgid ""
+"The number of pixels the line will extend past the [StyleBoxLine]'s bounds. "
+"If set to a negative value, the line will end inside the [StyleBoxLine]'s "
+"bounds."
+msgstr ""
+
+#: doc/classes/StyleBoxLine.xml:24
+msgid "The line's thickness in pixels."
+msgstr ""
+
+#: doc/classes/StyleBoxLine.xml:27
+msgid ""
+"If [code]true[/code], the line will be vertical. If [code]false[/code], the "
+"line will be horizontal."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:4
+msgid "Texture-based nine-patch [StyleBox]."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:7
+msgid ""
+"Texture-based nine-patch [StyleBox], in a way similar to [NinePatchRect]. "
+"This stylebox performs a 3×3 scaling of a texture, where only the center "
+"cell is fully stretched. This makes it possible to design bordered styles "
+"regardless of the stylebox's size."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:23
+msgid ""
+"Returns the size of the given [code]margin[/code]. See [enum Margin] for "
+"possible values."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:56
+msgid ""
+"Sets the margin to [code]size[/code] pixels for the given [code]margin[/"
+"code]. See [enum Margin] for possible values."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:62
+msgid ""
+"Controls how the stylebox's texture will be stretched or tiled horizontally. "
+"See [enum AxisStretchMode] for possible values."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:65
+msgid ""
+"Controls how the stylebox's texture will be stretched or tiled vertically. "
+"See [enum AxisStretchMode] for possible values."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:68
+msgid ""
+"If [code]true[/code], the nine-patch texture's center tile will be drawn."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:71
+msgid ""
+"Expands the bottom margin of this style box when drawing, causing it to be "
+"drawn larger than requested."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:74
+msgid ""
+"Expands the left margin of this style box when drawing, causing it to be "
+"drawn larger than requested."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:77
+msgid ""
+"Expands the right margin of this style box when drawing, causing it to be "
+"drawn larger than requested."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:80
+msgid ""
+"Expands the top margin of this style box when drawing, causing it to be "
+"drawn larger than requested."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:83
+msgid ""
+"Increases the bottom margin of the 3×3 texture box.\n"
+"A higher value means more of the source texture is considered to be part of "
+"the bottom border of the 3×3 box.\n"
+"This is also the value used as fallback for [member StyleBox."
+"content_margin_bottom] if it is negative."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:88
+msgid ""
+"Increases the left margin of the 3×3 texture box.\n"
+"A higher value means more of the source texture is considered to be part of "
+"the left border of the 3×3 box.\n"
+"This is also the value used as fallback for [member StyleBox."
+"content_margin_left] if it is negative."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:93
+msgid ""
+"Increases the right margin of the 3×3 texture box.\n"
+"A higher value means more of the source texture is considered to be part of "
+"the right border of the 3×3 box.\n"
+"This is also the value used as fallback for [member StyleBox."
+"content_margin_right] if it is negative."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:98
+msgid ""
+"Increases the top margin of the 3×3 texture box.\n"
+"A higher value means more of the source texture is considered to be part of "
+"the top border of the 3×3 box.\n"
+"This is also the value used as fallback for [member StyleBox."
+"content_margin_top] if it is negative."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:103
+msgid "Modulates the color of the texture when this style box is drawn."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:106
+msgid ""
+"The normal map to use when drawing this style box.\n"
+"[b]Note:[/b] Godot expects the normal map to use X+, Y-, and Z+ coordinates. "
+"See [url=http://wiki.polycount.com/wiki/"
+"Normal_Map_Technical_Details#Common_Swizzle_Coordinates]this page[/url] for "
+"a comparison of normal map coordinates expected by popular engines."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:110
+msgid ""
+"Species a sub-region of the texture to use.\n"
+"This is equivalent to first wrapping the texture in an [AtlasTexture] with "
+"the same region."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:114
+msgid "The texture to use when drawing this style box."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:120
+msgid "Emitted when the stylebox's texture is changed."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:126
+msgid ""
+"Stretch the stylebox's texture. This results in visible distortion unless "
+"the texture size matches the stylebox's size perfectly."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:129
+msgid ""
+"Repeats the stylebox's texture to match the stylebox's size according to the "
+"nine-patch system."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:132
+msgid ""
+"Repeats the stylebox's texture to match the stylebox's size according to the "
+"nine-patch system. Unlike [constant AXIS_STRETCH_MODE_TILE], the texture may "
+"be slightly stretched to make the nine-patch texture tile seamlessly."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:4
+msgid "Helper tool to create geometry."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:7
+msgid ""
+"The [SurfaceTool] is used to construct a [Mesh] by specifying vertex "
+"attributes individually. It can be used to construct a [Mesh] from a script. "
+"All properties except indices need to be added before calling [method "
+"add_vertex]. For example, to add vertex colors and UVs:\n"
+"[codeblock]\n"
+"var st = SurfaceTool.new()\n"
+"st.begin(Mesh.PRIMITIVE_TRIANGLES)\n"
+"st.add_color(Color(1, 0, 0))\n"
+"st.add_uv(Vector2(0, 0))\n"
+"st.add_vertex(Vector3(0, 0, 0))\n"
+"[/codeblock]\n"
+"The above [SurfaceTool] now contains one vertex of a triangle which has a UV "
+"coordinate and a specified [Color]. If another vertex were added without "
+"calling [method add_uv] or [method add_color], then the last values would be "
+"used.\n"
+"Vertex attributes must be passed [b]before[/b] calling [method add_vertex]. "
+"Failure to do so will result in an error when committing the vertex "
+"information to a mesh.\n"
+"Additionally, the attributes used before the first vertex is added determine "
+"the format of the mesh. For example, if you only add UVs to the first "
+"vertex, you cannot add color to any of the subsequent vertices.\n"
+"See also [ArrayMesh], [ImmediateGeometry] and [MeshDataTool] for procedural "
+"geometry generation.\n"
+"[b]Note:[/b] Godot uses clockwise [url=https://learnopengl.com/Advanced-"
+"OpenGL/Face-culling]winding order[/url] for front faces of triangle "
+"primitive modes."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:29
+msgid ""
+"Specifies an array of bones to use for the [i]next[/i] vertex. [code]bones[/"
+"code] must contain 4 integers."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:36
+msgid ""
+"Specifies a [Color] to use for the [i]next[/i] vertex. If every vertex needs "
+"to have this information set and you fail to submit it for the first vertex, "
+"this information may not be used at all.\n"
+"[b]Note:[/b] The material must have [member SpatialMaterial."
+"vertex_color_use_as_albedo] enabled for the vertex color to be visible."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:44
+msgid ""
+"Adds an index to index array if you are using indexed vertices. Does not "
+"need to be called before adding vertices."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:51
+msgid ""
+"Specifies a normal to use for the [i]next[/i] vertex. If every vertex needs "
+"to have this information set and you fail to submit it for the first vertex, "
+"this information may not be used at all."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:58
+msgid ""
+"Specifies whether the current vertex (if using only vertex arrays) or "
+"current index (if also using index arrays) should use smooth normals for "
+"normal calculation."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:65
+msgid ""
+"Specifies a tangent to use for the [i]next[/i] vertex. If every vertex needs "
+"to have this information set and you fail to submit it for the first vertex, "
+"this information may not be used at all."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:77
+msgid ""
+"Inserts a triangle fan made of array data into [Mesh] being constructed.\n"
+"Requires the primitive type be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:85
+msgid ""
+"Specifies a set of UV coordinates to use for the [i]next[/i] vertex. If "
+"every vertex needs to have this information set and you fail to submit it "
+"for the first vertex, this information may not be used at all."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:92
+msgid ""
+"Specifies an optional second set of UV coordinates to use for the [i]next[/"
+"i] vertex. If every vertex needs to have this information set and you fail "
+"to submit it for the first vertex, this information may not be used at all."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:99
+msgid ""
+"Specifies the position of current vertex. Should be called after specifying "
+"other vertex properties (e.g. Color, UV)."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:106
+msgid ""
+"Specifies weight values to use for the [i]next[/i] vertex. [code]weights[/"
+"code] must contain 4 values. If every vertex needs to have this information "
+"set and you fail to submit it for the first vertex, this information may not "
+"be used at all."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:115
+msgid ""
+"Append vertices from a given [Mesh] surface onto the current vertex array "
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:123
+msgid ""
+"Called before adding any vertices. Takes the primitive type as an argument "
+"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:129
+msgid "Clear all information passed into the surface tool so far."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:137
+msgid ""
+"Returns a constructed [ArrayMesh] from current information passed in. If an "
+"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
+"to the existing [ArrayMesh].\n"
+"Default flag is [constant Mesh.ARRAY_COMPRESS_DEFAULT] if compression is "
+"enabled. If compression is disabled the default flag is [constant Mesh."
+"ARRAY_FLAG_USE_OCTAHEDRAL_COMPRESSION]. See [code]ARRAY_COMPRESS_*[/code] "
+"constants in [enum Mesh.ArrayFormat] for other flags."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:144
+msgid ""
+"Commits the data to the same format used by [method ArrayMesh."
+"add_surface_from_arrays]. This way you can further process the mesh data "
+"using the [ArrayMesh] API."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:152
+msgid "Creates a vertex array from an existing [Mesh]."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:161
+msgid ""
+"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
+"This can be used to extract a specific pose from a blend shape."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:167
+msgid "Removes the index array by expanding the vertex array."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:174
+msgid ""
+"Generates normals from vertices so you do not have to do it manually. If "
+"[code]flip[/code] is [code]true[/code], the resulting normals will be "
+"inverted. [method generate_normals] should be called [i]after[/i] generating "
+"geometry and [i]before[/i] committing the mesh using [method commit] or "
+"[method commit_to_arrays]. For correct display of normal-mapped surfaces, "
+"you will also have to generate tangents using [method generate_tangents].\n"
+"[b]Note:[/b] [method generate_normals] only works if the primitive type to "
+"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:181
+msgid ""
+"Generates a tangent vector for each vertex. Requires that each vertex have "
+"UVs and normals set already (see [method generate_normals])."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:187
+msgid ""
+"Shrinks the vertex array by creating an index array. This can improve "
+"performance by avoiding vertex reuse."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:194
+msgid "Sets [Material] to be used by the [Mesh] you are constructing."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:4
+msgid "Tabbed container."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:7
+msgid ""
+"Sets the active tab's [code]visible[/code] property to the value [code]true[/"
+"code]. Sets all other children's to [code]false[/code].\n"
+"Ignores non-[Control] children."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:16
+msgid "Returns the child [Control] node located at the active tab index."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:22
+msgid ""
+"Returns the [Popup] node instance if one has been set already with [method "
+"set_popup].\n"
+"[b]Warning:[/b] This is a required internal node, removing and freeing it "
+"may cause a crash. If you wish to hide it or any of its children, use their "
+"[member CanvasItem.visible] property."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:29 doc/classes/Tabs.xml:36
+msgid "Returns the previously active tab index."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:36
+msgid "Returns the [Control] node from the tab at index [code]tab_idx[/code]."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:42 doc/classes/Tabs.xml:48
+msgid "Returns the number of tabs."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:49 doc/classes/Tabs.xml:55
+msgid ""
+"Returns [code]true[/code] if the tab at index [code]tab_idx[/code] is "
+"disabled."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:56
+msgid ""
+"Returns [code]true[/code] if the tab at index [code]tab_idx[/code] is hidden."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:63 doc/classes/Tabs.xml:62
+msgid ""
+"Returns the [Texture] for the tab at index [code]tab_idx[/code] or "
+"[code]null[/code] if the tab has no [Texture]."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:70
+msgid ""
+"Returns the index of the tab at local coordinates [code]point[/code]. "
+"Returns [code]-1[/code] if the point is outside the control boundaries or if "
+"there's no tab at the queried position."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:77
+msgid ""
+"Returns the title of the tab at index [code]tab_idx[/code]. Tab titles "
+"default to the name of the indexed child node, but this can be overridden "
+"with [method set_tab_title]."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:83
+msgid "Returns the [TabContainer] rearrange group id."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:90
+msgid ""
+"If set on a [Popup] node instance, a popup menu icon appears in the top-"
+"right corner of the [TabContainer]. Clicking it will expand the [Popup] node."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:98 doc/classes/Tabs.xml:118
+msgid ""
+"If [code]disabled[/code] is [code]true[/code], disables the tab at index "
+"[code]tab_idx[/code], making it non-interactable."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:106
+msgid ""
+"If [code]hidden[/code] is [code]true[/code], hides the tab at index "
+"[code]tab_idx[/code], making it disappear from the tab area."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:114
+msgid "Sets an icon for the tab at index [code]tab_idx[/code]."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:122
+msgid ""
+"Sets a title for the tab at index [code]tab_idx[/code]. Tab titles default "
+"to the name of the indexed child node."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:129
+msgid ""
+"Defines rearrange group id, choose for each [TabContainer] the same value to "
+"enable tab drag between [TabContainer]. Enable drag with [member "
+"drag_to_rearrange_enabled]."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:135
+msgid ""
+"If [code]true[/code], all tabs are drawn in front of the panel. If "
+"[code]false[/code], inactive tabs are drawn behind the panel."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:138
+msgid ""
+"The current tab index. When set, this index's [Control] node's "
+"[code]visible[/code] property is set to [code]true[/code] and all others are "
+"set to [code]false[/code]."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:141 doc/classes/Tabs.xml:150
+msgid "If [code]true[/code], tabs can be rearranged with mouse drag."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:144
+msgid ""
+"The alignment of all tabs in the tab container. See the [enum TabAlign] "
+"constants for details."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:147
+msgid ""
+"If [code]true[/code], tabs are visible. If [code]false[/code], tabs' content "
+"and titles are hidden."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:150
+msgid ""
+"If [code]true[/code], children [Control] nodes that are hidden have their "
+"minimum size take into account in the total, instead of only the currently "
+"visible one."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:156
+msgid ""
+"Emitted when the [TabContainer]'s [Popup] button is clicked. See [method "
+"set_popup] for details."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:162 doc/classes/Tabs.xml:178
+msgid "Emitted when switching to another tab."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:168
+msgid "Emitted when a tab is selected, even if it is the current tab."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:174 doc/classes/Tabs.xml:202
+msgid "Align the tabs to the left."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:177 doc/classes/Tabs.xml:205
+msgid "Align the tabs to the center."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:180 doc/classes/Tabs.xml:208
+msgid "Align the tabs to the right."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:185 doc/classes/Tabs.xml:237
+msgid ""
+"Icon for the left arrow button that appears when there are too many tabs to "
+"fit in the container width. When the button is disabled (i.e. the first tab "
+"is visible), it appears semi-transparent."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:188 doc/classes/Tabs.xml:240
+msgid ""
+"Icon for the left arrow button that appears when there are too many tabs to "
+"fit in the container width. Used when the button is being hovered with the "
+"cursor."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:191 doc/classes/Tabs.xml:243
+msgid "The font used to draw tab names."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:194 doc/classes/Tabs.xml:246
+msgid "Font color of inactive tabs."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:197 doc/classes/Tabs.xml:249
+msgid "Font color of disabled tabs."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:200 doc/classes/Tabs.xml:252
+msgid "Font color of the currently selected tab."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:203
+msgid "Horizontal separation between tabs."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:206 doc/classes/Tabs.xml:258
+msgid ""
+"Icon for the right arrow button that appears when there are too many tabs to "
+"fit in the container width. When the button is disabled (i.e. the last tab "
+"is visible) it appears semi-transparent."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:209 doc/classes/Tabs.xml:261
+msgid ""
+"Icon for the right arrow button that appears when there are too many tabs to "
+"fit in the container width. Used when the button is being hovered with the "
+"cursor."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:216
+msgid "The icon for the menu button (see [method set_popup])."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:219
+msgid ""
+"The icon for the menu button (see [method set_popup]) when it's being "
+"hovered with the cursor."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:222
+msgid "The style for the background fill."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:225
+msgid "The space at the left and right edges of the tab bar."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:228
+msgid "The style of inactive tabs."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:231
+msgid "The style of disabled tabs."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:234 doc/classes/Tabs.xml:274
+msgid "The style of the currently selected tab."
+msgstr ""
+
+#: doc/classes/Tabs.xml:4
+msgid "Tabs control."
+msgstr ""
+
+#: doc/classes/Tabs.xml:7
+msgid ""
+"Simple tabs control, similar to [TabContainer] but is only in charge of "
+"drawing tabs, not interacting with children."
+msgstr ""
+
+#: doc/classes/Tabs.xml:17
+msgid "Adds a new tab."
+msgstr ""
+
+#: doc/classes/Tabs.xml:24
+msgid "Moves the scroll view to make the tab visible."
+msgstr ""
+
+#: doc/classes/Tabs.xml:30
+msgid ""
+"Returns [code]true[/code] if the offset buttons (the ones that appear when "
+"there's not enough space for all tabs) are visible."
+msgstr ""
+
+#: doc/classes/Tabs.xml:42
+msgid "Returns [code]true[/code] if select with right mouse button is enabled."
+msgstr ""
+
+#: doc/classes/Tabs.xml:68
+msgid "Returns the number of hidden tabs offsetted to the left."
+msgstr ""
+
+#: doc/classes/Tabs.xml:75
+msgid "Returns tab [Rect2] with local position and size."
+msgstr ""
+
+#: doc/classes/Tabs.xml:82
+msgid "Returns the title of the tab at index [code]tab_idx[/code]."
+msgstr ""
+
+#: doc/classes/Tabs.xml:88
+msgid "Returns the [Tabs]' rearrange group ID."
+msgstr ""
+
+#: doc/classes/Tabs.xml:96
+msgid "Moves a tab from [code]from[/code] to [code]to[/code]."
+msgstr ""
+
+#: doc/classes/Tabs.xml:103
+msgid "Removes the tab at index [code]tab_idx[/code]."
+msgstr ""
+
+#: doc/classes/Tabs.xml:110
+msgid ""
+"If [code]true[/code], enables selecting a tab with the right mouse button."
+msgstr ""
+
+#: doc/classes/Tabs.xml:126
+msgid "Sets an [code]icon[/code] for the tab at index [code]tab_idx[/code]."
+msgstr ""
+
+#: doc/classes/Tabs.xml:134
+msgid "Sets a [code]title[/code] for the tab at index [code]tab_idx[/code]."
+msgstr ""
+
+#: doc/classes/Tabs.xml:141
+msgid ""
+"Defines the rearrange group ID. Choose for each [Tabs] the same value to "
+"dragging tabs between [Tabs]. Enable drag with [member "
+"drag_to_rearrange_enabled]."
+msgstr ""
+
+#: doc/classes/Tabs.xml:147
+msgid "Select tab at index [code]tab_idx[/code]."
+msgstr ""
+
+#: doc/classes/Tabs.xml:153
+msgid ""
+"if [code]true[/code], the mouse's scroll wheel can be used to navigate the "
+"scroll view."
+msgstr ""
+
+#: doc/classes/Tabs.xml:156
+msgid "The alignment of all tabs. See [enum TabAlign] for details."
+msgstr ""
+
+#: doc/classes/Tabs.xml:159
+msgid ""
+"Sets when the close button will appear on the tabs. See [enum "
+"CloseButtonDisplayPolicy] for details."
+msgstr ""
+
+#: doc/classes/Tabs.xml:166
+msgid ""
+"Emitted when the active tab is rearranged via mouse drag. See [member "
+"drag_to_rearrange_enabled]."
+msgstr ""
+
+#: doc/classes/Tabs.xml:172
+msgid "Emitted when a tab is right-clicked."
+msgstr ""
+
+#: doc/classes/Tabs.xml:184
+msgid "Emitted when a tab is clicked, even if it is the current tab."
+msgstr ""
+
+#: doc/classes/Tabs.xml:190
+msgid "Emitted when a tab is closed."
+msgstr ""
+
+#: doc/classes/Tabs.xml:196
+msgid "Emitted when a tab is hovered by the mouse."
+msgstr ""
+
+#: doc/classes/Tabs.xml:211
+msgid "Represents the size of the [enum TabAlign] enum."
+msgstr ""
+
+#: doc/classes/Tabs.xml:214
+msgid "Never show the close buttons."
+msgstr ""
+
+#: doc/classes/Tabs.xml:217
+msgid "Only show the close button on the currently active tab."
+msgstr ""
+
+#: doc/classes/Tabs.xml:220
+msgid "Show the close button on all tabs."
+msgstr ""
+
+#: doc/classes/Tabs.xml:223
+msgid "Represents the size of the [enum CloseButtonDisplayPolicy] enum."
+msgstr ""
+
+#: doc/classes/Tabs.xml:228
+msgid "Background of the close button when it's being hovered with the cursor."
+msgstr ""
+
+#: doc/classes/Tabs.xml:231
+msgid "Background of the close button when it's being pressed."
+msgstr ""
+
+#: doc/classes/Tabs.xml:234
+msgid "The icon for the close button (see [member tab_close_display_policy])."
+msgstr ""
+
+#: doc/classes/Tabs.xml:255
+msgid "The horizontal separation between the tabs."
+msgstr ""
+
+#: doc/classes/Tabs.xml:268
+msgid "The style of an inactive tab."
+msgstr ""
+
+#: doc/classes/Tabs.xml:271
+msgid "The style of a disabled tab"
+msgstr ""
+
+#: doc/classes/TCP_Server.xml:4
+msgid "A TCP server."
+msgstr ""
+
+#: doc/classes/TCP_Server.xml:7
+msgid ""
+"A TCP server. Listens to connections on a port and returns a [StreamPeerTCP] "
+"when it gets an incoming connection."
+msgstr ""
+
+#: doc/classes/TCP_Server.xml:15
+msgid "Returns [code]true[/code] if a connection is available for taking."
+msgstr ""
+
+#: doc/classes/TCP_Server.xml:21
+msgid ""
+"Returns [code]true[/code] if the server is currently listening for "
+"connections."
+msgstr ""
+
+#: doc/classes/TCP_Server.xml:29
+msgid ""
+"Listen on the [code]port[/code] binding to [code]bind_address[/code].\n"
+"If [code]bind_address[/code] is set as [code]\"*\"[/code] (default), the "
+"server will listen on all available addresses (both IPv4 and IPv6).\n"
+"If [code]bind_address[/code] is set as [code]\"0.0.0.0\"[/code] (for IPv4) "
+"or [code]\"::\"[/code] (for IPv6), the server will listen on all available "
+"addresses matching that IP type.\n"
+"If [code]bind_address[/code] is set to any valid address (e.g. "
+"[code]\"192.168.1.101\"[/code], [code]\"::1\"[/code], etc), the server will "
+"only listen on the interface with that addresses (or fail if no interface "
+"with the given address exists)."
+msgstr ""
+
+#: doc/classes/TCP_Server.xml:38
+msgid "Stops listening."
+msgstr ""
+
+#: doc/classes/TCP_Server.xml:44
+msgid ""
+"If a connection is available, returns a StreamPeerTCP with the connection."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:4
+msgid "Multiline text editing control."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:7
+msgid ""
+"TextEdit is meant for editing large, multiline text. It also has facilities "
+"for editing code, such as syntax highlighting support and multiple levels of "
+"undo/redo.\n"
+"[b]Note:[/b] When holding down [code]Alt[/code], the vertical scroll wheel "
+"will scroll 5 times as fast as it would normally do. This also works in the "
+"Godot script editor."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:20
+msgid "Adds color region (given the delimiters) and its colors."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:28
+msgid "Adds a [code]keyword[/code] and its [Color]."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:35
+msgid ""
+"Returns if the given line is foldable, that is, it has indented lines right "
+"below it."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:41
+msgid ""
+"Centers the viewport on the line the editing cursor is at. This also resets "
+"the [member scroll_horizontal] value to [code]0[/code]."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:47
+msgid ""
+"Clears all custom syntax coloring information previously added with [method "
+"add_color_region] or [method add_keyword_color]."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:53
+msgid "Clears the undo history."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:59
+msgid "Copy's the current text selection."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:65
+msgid "Returns the column the editing cursor is at."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:71
+msgid "Returns the line the editing cursor is at."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:79
+msgid ""
+"Moves the cursor at the specified [code]column[/code] index.\n"
+"If [code]adjust_viewport[/code] is set to [code]true[/code], the viewport "
+"will center at the cursor position after the move occurs."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:90
+msgid ""
+"Moves the cursor at the specified [code]line[/code] index.\n"
+"If [code]adjust_viewport[/code] is set to [code]true[/code], the viewport "
+"will center at the cursor position after the move occurs.\n"
+"If [code]can_be_hidden[/code] is set to [code]true[/code], the specified "
+"[code]line[/code] can be hidden using [method set_line_as_hidden]."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:98
+msgid "Cut's the current selection."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:104
+msgid "Deselects the current selection."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:110
+msgid "Folds all lines that are possible to be folded (see [method can_fold])."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:117
+msgid "Folds the given line, if possible (see [method can_fold])."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:123
+msgid "Returns an array containing the line number of each breakpoint."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:130
+msgid "Returns the [Color] of the specified [code]keyword[/code]."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:137
+msgid "Returns the text of a specific line."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:143
+msgid "Returns the amount of total lines in the text."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:149
+msgid ""
+"Returns the [PopupMenu] of this [TextEdit]. By default, this menu is "
+"displayed when right-clicking on the [TextEdit].\n"
+"[b]Warning:[/b] This is a required internal node, removing and freeing it "
+"may cause a crash. If you wish to hide it or any of its children, use their "
+"[member CanvasItem.visible] property."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:156
+msgid "Returns the selection begin column."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:162
+msgid "Returns the selection begin line."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:168
+msgid "Returns the text inside the selection."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:174
+msgid "Returns the selection end column."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:180
+msgid "Returns the selection end line."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:186
+msgid ""
+"Returns a [String] text with the word under the caret (text cursor) location."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:193
+msgid ""
+"Returns whether the specified [code]keyword[/code] has a color set to it or "
+"not."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:199 doc/classes/UndoRedo.xml:121
+msgid "Returns [code]true[/code] if a \"redo\" action is available."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:205 doc/classes/UndoRedo.xml:127
+msgid "Returns [code]true[/code] if an \"undo\" action is available."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:212
+msgid "Insert the specified text at the cursor position."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:219
+msgid "Returns whether the line at the specified index is folded or not."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:226
+msgid "Returns whether the line at the specified index is hidden or not."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:233
+msgid ""
+"Returns [code]true[/code] when the specified [code]line[/code] is bookmarked."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:240
+msgid ""
+"Returns [code]true[/code] when the specified [code]line[/code] has a "
+"breakpoint."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:247
+msgid ""
+"Returns [code]true[/code] when the specified [code]line[/code] is marked as "
+"safe."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:253
+msgid "Returns [code]true[/code] if the selection is active."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:260
+msgid ""
+"Triggers a right-click menu action by the specified index. See [enum "
+"MenuItems] for a list of available indexes."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:266
+msgid "Paste the current selection."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:272
+msgid "Perform redo operation."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:278
+msgid ""
+"Removes all the breakpoints. This will not fire the [signal "
+"breakpoint_toggled] signal."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:288
+msgid ""
+"Perform a search inside the text. Search flags can be specified in the [enum "
+"SearchFlags] enum.\n"
+"Returns an empty [code]PoolIntArray[/code] if no result was found. "
+"Otherwise, the result line and column can be accessed at indices specified "
+"in the [enum SearchResult] enum, e.g:\n"
+"[codeblock]\n"
+"var result = search(key, flags, line, column)\n"
+"if result.size() > 0:\n"
+" # Result found.\n"
+" var res_line = result[TextEdit.SEARCH_RESULT_LINE]\n"
+" var res_column = result[TextEdit.SEARCH_RESULT_COLUMN]\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/TextEdit.xml:306
+msgid ""
+"Perform selection, from line/column to line/column.\n"
+"If [member selecting_enabled] is [code]false[/code], no selection will occur."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:313
+msgid ""
+"Select all the text.\n"
+"If [member selecting_enabled] is [code]false[/code], no selection will occur."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:322
+msgid "Sets the text for a specific line."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:330
+msgid ""
+"Bookmarks the [code]line[/code] if [code]bookmark[/code] is true. Deletes "
+"the bookmark if [code]bookmark[/code] is false.\n"
+"Bookmarks are shown in the [member breakpoint_gutter]."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:339
+msgid ""
+"Adds or removes the breakpoint in [code]line[/code]. Breakpoints are shown "
+"in the [member breakpoint_gutter]."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:347
+msgid "If [code]true[/code], hides the line of the specified index."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:355
+msgid ""
+"If [code]true[/code], marks the [code]line[/code] as safe.\n"
+"This will show the line number with the color provided in the "
+"[code]safe_line_number_color[/code] theme property."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:363
+msgid "Toggle the folding of the code block at the given line."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:369
+msgid "Perform undo operation."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:376
+msgid "Unfolds the given line, if folded."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:382
+msgid ""
+"Unhide all lines that were previously set to hidden by [method "
+"set_line_as_hidden]."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:388
+msgid "If [code]true[/code], the breakpoint gutter is visible."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:397
+msgid ""
+"If [code]true[/code], the caret displays as a rectangle.\n"
+"If [code]false[/code], the caret displays as a bar."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:401
+msgid ""
+"If [code]true[/code], a right-click moves the cursor at the mouse position "
+"before displaying the context menu.\n"
+"If [code]false[/code], the context menu disregards mouse location."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:405
+msgid "If [code]true[/code], a right-click displays the context menu."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:408
+msgid ""
+"If [code]true[/code], the \"space\" character will have a visible "
+"representation."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:411
+msgid ""
+"If [code]true[/code], the \"tab\" character will have a visible "
+"representation."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:415
+msgid ""
+"If [code]true[/code], the fold gutter is visible. This enables folding "
+"groups of indented lines."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:418
+msgid ""
+"If [code]true[/code], all lines that have been set to hidden by [method "
+"set_line_as_hidden], will not be visible."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:421
+msgid ""
+"If [code]true[/code], all occurrences of the selected text will be "
+"highlighted."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:424
+msgid "If [code]true[/code], the line containing the cursor is highlighted."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:427
+msgid ""
+"If [code]true[/code], a minimap is shown, providing an outline of your "
+"source code."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:430
+msgid "The width, in pixels, of the minimap."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:434
+msgid ""
+"If [code]true[/code], custom [code]font_color_selected[/code] will be used "
+"for selected text."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:437
+msgid ""
+"If [code]true[/code], read-only mode is enabled. Existing text cannot be "
+"modified and new text cannot be added."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:440
+msgid ""
+"If there is a horizontal scrollbar, this determines the current horizontal "
+"scroll value in pixels."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:443
+msgid ""
+"If there is a vertical scrollbar, this determines the current vertical "
+"scroll value in line numbers, starting at 0 for the top line."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:446
+msgid ""
+"If [code]true[/code], text can be selected.\n"
+"If [code]false[/code], text can not be selected by the user or by the "
+"[method select] or [method select_all] methods."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:450
+msgid ""
+"If [code]true[/code], shortcut keys for context menu items are enabled, even "
+"if the context menu is disabled."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:453
+msgid ""
+"If [code]true[/code], line numbers are displayed to the left of the text."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:456
+msgid ""
+"If [code]true[/code], sets the [code]step[/code] of the scrollbars to "
+"[code]0.25[/code] which results in smoother scrolling."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:459
+msgid ""
+"If [code]true[/code], any custom color properties that have been set for "
+"this [TextEdit] will be visible."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:462
+msgid "String value of the [TextEdit]."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:465
+msgid "Vertical scroll sensitivity."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:471
+msgid ""
+"If [code]true[/code], enables text wrapping when it goes beyond the edge of "
+"what is visible."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:478
+msgid "Emitted when a breakpoint is placed via the breakpoint gutter."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:483
+msgid "Emitted when the cursor changes."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:490
+msgid "Emitted when the info icon is clicked."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:512
+msgid "Match case when searching."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:515
+msgid "Match whole words when searching."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:518
+msgid "Search from end to beginning."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:521
+msgid "Used to access the result column from [method search]."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:524
+msgid "Used to access the result line from [method search]."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:533
+msgid ""
+"Pastes the clipboard text over the selected text (or at the cursor's "
+"position)."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:536
+msgid "Erases the whole [TextEdit] text."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:539
+msgid "Selects the whole [TextEdit] text."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:545
+msgid "Redoes the previous action."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:553
+msgid ""
+"Sets the background [Color] of this [TextEdit]. [member syntax_highlighting] "
+"has to be enabled."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:556
+msgid ""
+"Sets the [Color] of the bookmark marker. [member syntax_highlighting] has to "
+"be enabled."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:561 doc/classes/TextEdit.xml:588
+msgid ""
+"Sets the [Color] of the breakpoints. [member breakpoint_gutter] has to be "
+"enabled."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:599
+msgid "Sets the default [Font]."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:602
+msgid "Sets the font [Color]."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:607
+msgid ""
+"Sets the [Color] of the selected text. [member override_selected_font_color] "
+"has to be enabled."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:612
+msgid ""
+"Sets the [Color] of the line numbers. [member show_line_numbers] has to be "
+"enabled."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:615
+msgid "Sets the spacing between the lines."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:618
+msgid "Sets the [Color] of marked text."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:623
+msgid "Sets the [StyleBox] of this [TextEdit]."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:628
+msgid ""
+"Sets the [StyleBox] of this [TextEdit] when [member readonly] is enabled."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:633
+msgid "Sets the highlight [Color] of text selections."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:640
+msgid "Sets a custom [Texture] for tab text characters."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:643
+msgid ""
+"Sets the highlight [Color] of multiple occurrences. [member "
+"highlight_all_occurrences] has to be enabled."
+msgstr ""
+
+#: doc/classes/Texture.xml:4
+msgid "Texture for 2D and 3D."
+msgstr ""
+
+#: doc/classes/Texture.xml:7
+msgid ""
+"A texture works by registering an image in the video hardware, which then "
+"can be used in 3D models or 2D [Sprite] or GUI [Control].\n"
+"Textures are often created by loading them from a file. See [method "
+"@GDScript.load].\n"
+"[Texture] is a base for other resources. It cannot be used directly.\n"
+"[b]Note:[/b] The maximum texture size is 16384×16384 pixels due to graphics "
+"hardware limitations. Larger textures may fail to import."
+msgstr ""
+
+#: doc/classes/Texture.xml:23
+msgid ""
+"Draws the texture using a [CanvasItem] with the [VisualServer] API at the "
+"specified [code]position[/code]. Equivalent to [method VisualServer."
+"canvas_item_add_texture_rect] with a rect at [code]position[/code] and the "
+"size of this [Texture]."
+msgstr ""
+
+#: doc/classes/Texture.xml:35
+msgid ""
+"Draws the texture using a [CanvasItem] with the [VisualServer] API. "
+"Equivalent to [method VisualServer.canvas_item_add_texture_rect]."
+msgstr ""
+
+#: doc/classes/Texture.xml:48
+msgid ""
+"Draws a part of the texture using a [CanvasItem] with the [VisualServer] "
+"API. Equivalent to [method VisualServer.canvas_item_add_texture_rect_region]."
+msgstr ""
+
+#: doc/classes/Texture.xml:54
+msgid ""
+"Returns an [Image] that is a copy of data from this [Texture]. [Image]s can "
+"be accessed and manipulated directly."
+msgstr ""
+
+#: doc/classes/Texture.xml:60
+msgid "Returns the texture height."
+msgstr ""
+
+#: doc/classes/Texture.xml:66
+msgid "Returns the texture size."
+msgstr ""
+
+#: doc/classes/Texture.xml:72
+msgid "Returns the texture width."
+msgstr ""
+
+#: doc/classes/Texture.xml:78
+msgid "Returns [code]true[/code] if this [Texture] has an alpha channel."
+msgstr ""
+
+#: doc/classes/Texture.xml:84
+msgid ""
+"The texture's [enum Flags]. [enum Flags] are used to set various properties "
+"of the [Texture]."
+msgstr ""
+
+#: doc/classes/Texture.xml:89
+msgid ""
+"Default flags. [constant FLAG_MIPMAPS], [constant FLAG_REPEAT] and [constant "
+"FLAG_FILTER] are enabled."
+msgstr ""
+
+#: doc/classes/Texture.xml:92 doc/classes/VisualServer.xml:3206
+msgid ""
+"Generates mipmaps, which are smaller versions of the same texture to use "
+"when zoomed out, keeping the aspect ratio."
+msgstr ""
+
+#: doc/classes/Texture.xml:95
+msgid ""
+"Repeats the texture (instead of clamp to edge).\n"
+"[b]Note:[/b] Ignored when using an [AtlasTexture] as these don't support "
+"repetition."
+msgstr ""
+
+#: doc/classes/Texture.xml:99 doc/classes/VisualServer.xml:3212
+msgid "Uses a magnifying filter, to enable smooth zooming in of the texture."
+msgstr ""
+
+#: doc/classes/Texture.xml:102 doc/classes/TextureLayered.xml:88
+#: doc/classes/VisualServer.xml:3215
+msgid ""
+"Uses anisotropic mipmap filtering. Generates smaller versions of the same "
+"texture with different aspect ratios.\n"
+"This results in better-looking textures when viewed from oblique angles."
+msgstr ""
+
+#: doc/classes/Texture.xml:106 doc/classes/VisualServer.xml:3219
+msgid "Converts the texture to the sRGB color space."
+msgstr ""
+
+#: doc/classes/Texture.xml:109
+msgid ""
+"Repeats the texture with alternate sections mirrored.\n"
+"[b]Note:[/b] Ignored when using an [AtlasTexture] as these don't support "
+"repetition."
+msgstr ""
+
+#: doc/classes/Texture.xml:113 doc/classes/VisualServer.xml:3225
+msgid "Texture is a video surface."
+msgstr ""
+
+#: doc/classes/Texture3D.xml:4
+msgid "Texture with 3 dimensions."
+msgstr ""
+
+#: doc/classes/Texture3D.xml:7
+msgid ""
+"Texture3D is a 3-dimensional texture that has a width, height, and depth."
+msgstr ""
+
+#: doc/classes/Texture3D.xml:20
+msgid ""
+"Creates the Texture3D with specified [code]width[/code], [code]height[/"
+"code], and [code]depth[/code]. See [enum Image.Format] for [code]format[/"
+"code] options. See [enum TextureLayered.Flags] enumerator for [code]flags[/"
+"code] options."
+msgstr ""
+
+#: doc/classes/TextureArray.xml:4
+msgid "Array of textures stored in a single primitive."
+msgstr ""
+
+#: doc/classes/TextureArray.xml:7
+msgid ""
+"[TextureArray]s store an array of [Image]s in a single [Texture] primitive. "
+"Each layer of the texture array has its own mipmap chain. This makes it is a "
+"good alternative to texture atlases.\n"
+"[TextureArray]s must be displayed using shaders. After importing your file "
+"as a [TextureArray] and setting the appropriate Horizontal and Vertical "
+"Slices, display it by setting it as a uniform to a shader, for example:\n"
+"[codeblock]\n"
+"shader_type canvas_item;\n"
+"\n"
+"uniform sampler2DArray tex;\n"
+"uniform int index;\n"
+"\n"
+"void fragment() {\n"
+" COLOR = texture(tex, vec3(UV.x, UV.y, float(index)));\n"
+"}\n"
+"[/codeblock]\n"
+"Set the integer uniform \"index\" to show a particular part of the texture "
+"as defined by the Horizontal and Vertical Slices in the importer."
+msgstr ""
+
+#: doc/classes/TextureArray.xml:32
+msgid ""
+"Creates the TextureArray with specified [code]width[/code], [code]height[/"
+"code], and [code]depth[/code]. See [enum Image.Format] for [code]format[/"
+"code] options. See [enum TextureLayered.Flags] enumerator for [code]flags[/"
+"code] options."
+msgstr ""
+
+#: doc/classes/TextureButton.xml:4
+msgid ""
+"Texture-based button. Supports Pressed, Hover, Disabled and Focused states."
+msgstr ""
+
+#: doc/classes/TextureButton.xml:7
+msgid ""
+"[TextureButton] has the same functionality as [Button], except it uses "
+"sprites instead of Godot's [Theme] resource. It is faster to create, but it "
+"doesn't support localization like more complex [Control]s.\n"
+"The \"normal\" state must contain a texture ([member texture_normal]); other "
+"textures are optional.\n"
+"See also [BaseButton] which contains common properties and methods "
+"associated with this node."
+msgstr ""
+
+#: doc/classes/TextureButton.xml:18
+msgid ""
+"If [code]true[/code], the texture stretches to the edges of the node's "
+"bounding rectangle using the [member stretch_mode]. If [code]false[/code], "
+"the texture will not scale with the node."
+msgstr ""
+
+#: doc/classes/TextureButton.xml:27
+msgid ""
+"Controls the texture's behavior when you resize the node's bounding "
+"rectangle, [b]only if[/b] [member expand] is [code]true[/code]. Set it to "
+"one of the [enum StretchMode] constants. See the constants to learn more."
+msgstr ""
+
+#: doc/classes/TextureButton.xml:30
+msgid ""
+"Pure black and white [BitMap] image to use for click detection. On the mask, "
+"white pixels represent the button's clickable area. Use it to create buttons "
+"with curved shapes."
+msgstr ""
+
+#: doc/classes/TextureButton.xml:33
+msgid ""
+"Texture to display when the node is disabled. See [member BaseButton."
+"disabled]."
+msgstr ""
+
+#: doc/classes/TextureButton.xml:36
+msgid "Texture to display when the node has mouse or keyboard focus."
+msgstr ""
+
+#: doc/classes/TextureButton.xml:39
+msgid "Texture to display when the mouse hovers the node."
+msgstr ""
+
+#: doc/classes/TextureButton.xml:42
+msgid ""
+"Texture to display by default, when the node is [b]not[/b] in the disabled, "
+"focused, hover or pressed state."
+msgstr ""
+
+#: doc/classes/TextureButton.xml:45
+msgid ""
+"Texture to display on mouse down over the node, if the node has keyboard "
+"focus and the player presses the Enter key or if the player presses the "
+"[member BaseButton.shortcut] key."
+msgstr ""
+
+#: doc/classes/TextureButton.xml:50 doc/classes/TextureRect.xml:38
+msgid "Scale to fit the node's bounding rectangle."
+msgstr ""
+
+#: doc/classes/TextureButton.xml:53 doc/classes/TextureRect.xml:41
+msgid "Tile inside the node's bounding rectangle."
+msgstr ""
+
+#: doc/classes/TextureButton.xml:56 doc/classes/TextureRect.xml:44
+msgid ""
+"The texture keeps its original size and stays in the bounding rectangle's "
+"top-left corner."
+msgstr ""
+
+#: doc/classes/TextureButton.xml:59 doc/classes/TextureRect.xml:47
+msgid ""
+"The texture keeps its original size and stays centered in the node's "
+"bounding rectangle."
+msgstr ""
+
+#: doc/classes/TextureButton.xml:62 doc/classes/TextureRect.xml:50
+msgid ""
+"Scale the texture to fit the node's bounding rectangle, but maintain the "
+"texture's aspect ratio."
+msgstr ""
+
+#: doc/classes/TextureButton.xml:65
+msgid ""
+"Scale the texture to fit the node's bounding rectangle, center it, and "
+"maintain its aspect ratio."
+msgstr ""
+
+#: doc/classes/TextureButton.xml:68 doc/classes/TextureRect.xml:56
+msgid ""
+"Scale the texture so that the shorter side fits the bounding rectangle. The "
+"other side clips to the node's limits."
+msgstr ""
+
+#: doc/classes/TextureLayered.xml:4
+msgid "Base class for 3D texture types."
+msgstr ""
+
+#: doc/classes/TextureLayered.xml:7
+msgid ""
+"Base class for [Texture3D] and [TextureArray]. Cannot be used directly, but "
+"contains all the functions necessary for accessing and using [Texture3D] and "
+"[TextureArray]. Data is set on a per-layer basis. For [Texture3D]s, the "
+"layer specifies the depth or Z-index, they can be treated as a bunch of 2D "
+"slices. Similarly, for [TextureArray]s, the layer specifies the array layer."
+msgstr ""
+
+#: doc/classes/TextureLayered.xml:15
+msgid ""
+"Returns the depth of the texture. Depth is the 3rd dimension (typically Z-"
+"axis)."
+msgstr ""
+
+#: doc/classes/TextureLayered.xml:21
+msgid ""
+"Returns the current format being used by this texture. See [enum Image."
+"Format] for details."
+msgstr ""
+
+#: doc/classes/TextureLayered.xml:27
+msgid ""
+"Returns the height of the texture. Height is typically represented by the Y-"
+"axis."
+msgstr ""
+
+#: doc/classes/TextureLayered.xml:34
+msgid ""
+"Returns an [Image] resource with the data from specified [code]layer[/code]."
+msgstr ""
+
+#: doc/classes/TextureLayered.xml:40
+msgid ""
+"Returns the width of the texture. Width is typically represented by the X-"
+"axis."
+msgstr ""
+
+#: doc/classes/TextureLayered.xml:51
+msgid ""
+"Partially sets the data for a specified [code]layer[/code] by overwriting "
+"using the data of the specified [code]image[/code]. [code]x_offset[/code] "
+"and [code]y_offset[/code] determine where the [Image] is \"stamped\" over "
+"the texture. The [code]image[/code] must fit within the texture."
+msgstr ""
+
+#: doc/classes/TextureLayered.xml:59
+msgid ""
+"Sets the data for the specified layer. Data takes the form of a 2-"
+"dimensional [Image] resource."
+msgstr ""
+
+#: doc/classes/TextureLayered.xml:65
+msgid "Returns a dictionary with all the data used by this texture."
+msgstr ""
+
+#: doc/classes/TextureLayered.xml:68
+msgid "Specifies which [enum Flags] apply to this texture."
+msgstr ""
+
+#: doc/classes/TextureLayered.xml:73
+msgid ""
+"Default flags for [TextureArray]. [constant FLAG_MIPMAPS], [constant "
+"FLAG_REPEAT] and [constant FLAG_FILTER] are enabled."
+msgstr ""
+
+#: doc/classes/TextureLayered.xml:76
+msgid "Default flags for [Texture3D]. [constant FLAG_FILTER] is enabled."
+msgstr ""
+
+#: doc/classes/TextureLayered.xml:79
+msgid "Texture will generate mipmaps on creation."
+msgstr ""
+
+#: doc/classes/TextureLayered.xml:82
+msgid "Texture will repeat when UV used is outside the 0-1 range."
+msgstr ""
+
+#: doc/classes/TextureLayered.xml:85
+msgid ""
+"Use filtering when reading from texture. Filtering smooths out pixels. "
+"Turning filtering off is slightly faster and more appropriate when you need "
+"access to individual pixels."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:4
+msgid ""
+"Texture-based progress bar. Useful for loading screens and life or stamina "
+"bars."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:7
+msgid ""
+"TextureProgress works like [ProgressBar], but uses up to 3 textures instead "
+"of Godot's [Theme] resource. It can be used to create horizontal, vertical "
+"and radial progress bars."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:28
+msgid "The fill direction. See [enum FillMode] for possible values."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:32
+msgid ""
+"If [code]true[/code], Godot treats the bar's textures like in "
+"[NinePatchRect]. Use the [code]stretch_margin_*[/code] properties like "
+"[member stretch_margin_bottom] to set up the nine patch's 3×3 grid. When "
+"using a radial [member fill_mode], this setting will enable stretching."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:35
+msgid ""
+"Offsets [member texture_progress] if [member fill_mode] is [constant "
+"FILL_CLOCKWISE] or [constant FILL_COUNTER_CLOCKWISE]."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:38
+msgid ""
+"Upper limit for the fill of [member texture_progress] if [member fill_mode] "
+"is [constant FILL_CLOCKWISE] or [constant FILL_COUNTER_CLOCKWISE]. When the "
+"node's [code]value[/code] is equal to its [code]max_value[/code], the "
+"texture fills up to this angle.\n"
+"See [member Range.value], [member Range.max_value]."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:42
+msgid ""
+"Starting angle for the fill of [member texture_progress] if [member "
+"fill_mode] is [constant FILL_CLOCKWISE] or [constant "
+"FILL_COUNTER_CLOCKWISE]. When the node's [code]value[/code] is equal to its "
+"[code]min_value[/code], the texture doesn't show up at all. When the "
+"[code]value[/code] increases, the texture fills and tends towards [member "
+"radial_fill_degrees]."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:45
+msgid ""
+"The height of the 9-patch's bottom row. A margin of 16 means the 9-slice's "
+"bottom corners and side will have a height of 16 pixels. You can set all 4 "
+"margin values individually to create panels with non-uniform borders."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:48
+msgid "The width of the 9-patch's left column."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:51
+msgid "The width of the 9-patch's right column."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:54
+msgid "The height of the 9-patch's top row."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:57
+msgid ""
+"[Texture] that draws over the progress bar. Use it to add highlights or an "
+"upper-frame that hides part of [member texture_progress]."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:60
+msgid ""
+"[Texture] that clips based on the node's [code]value[/code] and [member "
+"fill_mode]. As [code]value[/code] increased, the texture fills up. It shows "
+"entirely when [code]value[/code] reaches [code]max_value[/code]. It doesn't "
+"show at all if [code]value[/code] is equal to [code]min_value[/code].\n"
+"The [code]value[/code] property comes from [Range]. See [member Range."
+"value], [member Range.min_value], [member Range.max_value]."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:64
+msgid ""
+"The offset of [member texture_progress]. Useful for [member texture_over] "
+"and [member texture_under] with fancy borders, to avoid transparent margins "
+"in your progress texture."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:67
+msgid "[Texture] that draws under the progress bar. The bar's background."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:70
+msgid ""
+"Multiplies the color of the bar's [code]texture_over[/code] texture. The "
+"effect is similar to [member CanvasItem.modulate], except it only affects "
+"this specific texture instead of the entire node."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:73
+msgid ""
+"Multiplies the color of the bar's [code]texture_progress[/code] texture."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:76
+msgid "Multiplies the color of the bar's [code]texture_under[/code] texture."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:81
+msgid "The [member texture_progress] fills from left to right."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:84
+msgid "The [member texture_progress] fills from right to left."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:87
+msgid "The [member texture_progress] fills from top to bottom."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:90
+msgid "The [member texture_progress] fills from bottom to top."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:93
+msgid ""
+"Turns the node into a radial bar. The [member texture_progress] fills "
+"clockwise. See [member radial_center_offset], [member radial_initial_angle] "
+"and [member radial_fill_degrees] to control the way the bar fills up."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:96
+msgid ""
+"Turns the node into a radial bar. The [member texture_progress] fills "
+"counterclockwise. See [member radial_center_offset], [member "
+"radial_initial_angle] and [member radial_fill_degrees] to control the way "
+"the bar fills up."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:99
+msgid ""
+"The [member texture_progress] fills from the center, expanding both towards "
+"the left and the right."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:102
+msgid ""
+"The [member texture_progress] fills from the center, expanding both towards "
+"the top and the bottom."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:105
+msgid ""
+"Turns the node into a radial bar. The [member texture_progress] fills "
+"radially from the center, expanding both clockwise and counterclockwise. See "
+"[member radial_center_offset], [member radial_initial_angle] and [member "
+"radial_fill_degrees] to control the way the bar fills up."
+msgstr ""
+
+#: doc/classes/TextureRect.xml:4
+msgid "Control for drawing textures."
+msgstr ""
+
+#: doc/classes/TextureRect.xml:7
+msgid ""
+"Used to draw icons and sprites in a user interface. The texture's placement "
+"can be controlled with the [member stretch_mode] property. It can scale, "
+"tile, or stay centered inside its bounding rectangle.\n"
+"[b]Note:[/b] You should enable [member flip_v] when using a TextureRect to "
+"display a [ViewportTexture]. Alternatively, you can enable [member Viewport."
+"render_target_v_flip] on the Viewport. Otherwise, the image will appear "
+"upside down."
+msgstr ""
+
+#: doc/classes/TextureRect.xml:17
+msgid "If [code]true[/code], the texture scales to fit its bounding rectangle."
+msgstr ""
+
+#: doc/classes/TextureRect.xml:27
+msgid ""
+"Controls the texture's behavior when resizing the node's bounding rectangle. "
+"See [enum StretchMode]."
+msgstr ""
+
+#: doc/classes/TextureRect.xml:30
+msgid "The node's [Texture] resource."
+msgstr ""
+
+#: doc/classes/TextureRect.xml:35
+msgid ""
+"Scale to fit the node's bounding rectangle, only if [code]expand[/code] is "
+"[code]true[/code]. Default [code]stretch_mode[/code], for backwards "
+"compatibility. Until you set [code]expand[/code] to [code]true[/code], the "
+"texture will behave like [constant STRETCH_KEEP]."
+msgstr ""
+
+#: doc/classes/TextureRect.xml:53
+msgid ""
+"Scale the texture to fit the node's bounding rectangle, center it and "
+"maintain its aspect ratio."
+msgstr ""
+
+#: doc/classes/Theme.xml:4
+msgid "Theme for controls."
+msgstr ""
+
+#: doc/classes/Theme.xml:7
+msgid ""
+"A theme for skinning controls. Controls can be skinned individually, but for "
+"complex applications, it's more practical to just create a global theme that "
+"defines everything. This theme can be applied to any [Control]; the Control "
+"and its children will automatically use it.\n"
+"Theme resources can alternatively be loaded by writing them in a [code]."
+"theme[/code] file, see the documentation for more information."
+msgstr ""
+
+#: doc/classes/Theme.xml:11
+msgid "https://docs.godotengine.org/en/3.4/tutorials/gui/gui_skinning.html"
+msgstr ""
+
+#: doc/classes/Theme.xml:17
+msgid "Clears all values on the theme."
+msgstr ""
+
+#: doc/classes/Theme.xml:25
+msgid ""
+"Clears the [Color] at [code]name[/code] if the theme has [code]node_type[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Theme.xml:33
+msgid ""
+"Clears the constant at [code]name[/code] if the theme has [code]node_type[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Theme.xml:41
+msgid ""
+"Clears the [Font] at [code]name[/code] if the theme has [code]node_type[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Theme.xml:49
+msgid ""
+"Clears the icon at [code]name[/code] if the theme has [code]node_type[/code]."
+msgstr ""
+
+#: doc/classes/Theme.xml:57
+msgid ""
+"Clears [StyleBox] at [code]name[/code] if the theme has [code]node_type[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Theme.xml:66
+msgid ""
+"Clears the theme item of [code]data_type[/code] at [code]name[/code] if the "
+"theme has [code]node_type[/code]."
+msgstr ""
+
+#: doc/classes/Theme.xml:72
+msgid "Sets the theme's values to a copy of the default theme values."
+msgstr ""
+
+#: doc/classes/Theme.xml:79
+msgid "Sets the theme's values to a copy of a given theme."
+msgstr ""
+
+#: doc/classes/Theme.xml:87
+msgid ""
+"Returns the [Color] at [code]name[/code] if the theme has [code]node_type[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Theme.xml:94
+msgid ""
+"Returns all the [Color]s as a [PoolStringArray] filled with each [Color]'s "
+"name, for use in [method get_color], if the theme has [code]node_type[/code]."
+msgstr ""
+
+#: doc/classes/Theme.xml:100
+msgid ""
+"Returns all the [Color] types as a [PoolStringArray] filled with unique type "
+"names, for use in [method get_color] and/or [method get_color_list]."
+msgstr ""
+
+#: doc/classes/Theme.xml:108
+msgid ""
+"Returns the constant at [code]name[/code] if the theme has [code]node_type[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Theme.xml:115
+msgid ""
+"Returns all the constants as a [PoolStringArray] filled with each constant's "
+"name, for use in [method get_constant], if the theme has [code]node_type[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Theme.xml:121
+msgid ""
+"Returns all the constant types as a [PoolStringArray] filled with unique "
+"type names, for use in [method get_constant] and/or [method "
+"get_constant_list]."
+msgstr ""
+
+#: doc/classes/Theme.xml:129
+msgid ""
+"Returns the [Font] at [code]name[/code] if the theme has [code]node_type[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Theme.xml:136
+msgid ""
+"Returns all the [Font]s as a [PoolStringArray] filled with each [Font]'s "
+"name, for use in [method get_font], if the theme has [code]node_type[/code]."
+msgstr ""
+
+#: doc/classes/Theme.xml:142
+msgid ""
+"Returns all the [Font] types as a [PoolStringArray] filled with unique type "
+"names, for use in [method get_font] and/or [method get_font_list]."
+msgstr ""
+
+#: doc/classes/Theme.xml:150
+msgid ""
+"Returns the icon [Texture] at [code]name[/code] if the theme has "
+"[code]node_type[/code]."
+msgstr ""
+
+#: doc/classes/Theme.xml:157
+msgid ""
+"Returns all the icons as a [PoolStringArray] filled with each [Texture]'s "
+"name, for use in [method get_icon], if the theme has [code]node_type[/code]."
+msgstr ""
+
+#: doc/classes/Theme.xml:163
+msgid ""
+"Returns all the icon types as a [PoolStringArray] filled with unique type "
+"names, for use in [method get_icon] and/or [method get_icon_list]."
+msgstr ""
+
+#: doc/classes/Theme.xml:171
+msgid ""
+"Returns the [StyleBox] at [code]name[/code] if the theme has "
+"[code]node_type[/code].\n"
+"Valid [code]name[/code]s may be found using [method get_stylebox_list]. "
+"Valid [code]node_type[/code]s may be found using [method get_stylebox_types]."
+msgstr ""
+
+#: doc/classes/Theme.xml:179
+msgid ""
+"Returns all the [StyleBox]s as a [PoolStringArray] filled with each "
+"[StyleBox]'s name, for use in [method get_stylebox], if the theme has "
+"[code]node_type[/code].\n"
+"Valid [code]node_type[/code]s may be found using [method get_stylebox_types]."
+msgstr ""
+
+#: doc/classes/Theme.xml:186
+msgid ""
+"Returns all the [StyleBox] types as a [PoolStringArray] filled with unique "
+"type names, for use in [method get_stylebox] and/or [method "
+"get_stylebox_list]."
+msgstr ""
+
+#: doc/classes/Theme.xml:195
+msgid ""
+"Returns the theme item of [code]data_type[/code] at [code]name[/code] if the "
+"theme has [code]node_type[/code].\n"
+"Valid [code]name[/code]s may be found using [method get_theme_item_list] or "
+"a data type specific method. Valid [code]node_type[/code]s may be found "
+"using [method get_theme_item_types] or a data type specific method."
+msgstr ""
+
+#: doc/classes/Theme.xml:204
+msgid ""
+"Returns all the theme items of [code]data_type[/code] as a [PoolStringArray] "
+"filled with each theme items's name, for use in [method get_theme_item] or a "
+"data type specific method, if the theme has [code]node_type[/code].\n"
+"Valid [code]node_type[/code]s may be found using [method "
+"get_theme_item_types] or a data type specific method."
+msgstr ""
+
+#: doc/classes/Theme.xml:212
+msgid ""
+"Returns all the theme items of [code]data_type[/code] types as a "
+"[PoolStringArray] filled with unique type names, for use in [method "
+"get_theme_item], [method get_theme_item_list] or data type specific methods."
+msgstr ""
+
+#: doc/classes/Theme.xml:219
+msgid ""
+"Returns all the theme types as a [PoolStringArray] filled with unique type "
+"names, for use in other [code]get_*[/code] functions of this theme.\n"
+"[b]Note:[/b] [code]node_type[/code] has no effect and will be removed in "
+"future version."
+msgstr ""
+
+#: doc/classes/Theme.xml:228
+msgid ""
+"Returns [code]true[/code] if [Color] with [code]name[/code] is in "
+"[code]node_type[/code].\n"
+"Returns [code]false[/code] if the theme does not have [code]node_type[/code]."
+msgstr ""
+
+#: doc/classes/Theme.xml:237
+msgid ""
+"Returns [code]true[/code] if constant with [code]name[/code] is in "
+"[code]node_type[/code].\n"
+"Returns [code]false[/code] if the theme does not have [code]node_type[/code]."
+msgstr ""
+
+#: doc/classes/Theme.xml:244
+msgid ""
+"Returns [code]true[/code] if this theme has a valid [member default_font] "
+"value."
+msgstr ""
+
+#: doc/classes/Theme.xml:252
+msgid ""
+"Returns [code]true[/code] if [Font] with [code]name[/code] is in "
+"[code]node_type[/code].\n"
+"Returns [code]false[/code] if the theme does not have [code]node_type[/code]."
+msgstr ""
+
+#: doc/classes/Theme.xml:261
+msgid ""
+"Returns [code]true[/code] if icon [Texture] with [code]name[/code] is in "
+"[code]node_type[/code].\n"
+"Returns [code]false[/code] if the theme does not have [code]node_type[/code]."
+msgstr ""
+
+#: doc/classes/Theme.xml:270
+msgid ""
+"Returns [code]true[/code] if [StyleBox] with [code]name[/code] is in "
+"[code]node_type[/code].\n"
+"Returns [code]false[/code] if the theme does not have [code]node_type[/code]."
+msgstr ""
+
+#: doc/classes/Theme.xml:280
+msgid ""
+"Returns [code]true[/code] if a theme item of [code]data_type[/code] with "
+"[code]name[/code] is in [code]node_type[/code].\n"
+"Returns [code]false[/code] if the theme does not have [code]node_type[/code]."
+msgstr ""
+
+#: doc/classes/Theme.xml:288
+msgid ""
+"Adds missing and overrides existing definitions with values from the "
+"[code]other[/code] [Theme].\n"
+"[b]Note:[/b] This modifies the current theme. If you want to merge two "
+"themes together without modifying either one, create a new empty theme and "
+"merge the other two into it one after another."
+msgstr ""
+
+#: doc/classes/Theme.xml:298
+msgid ""
+"Renames the [Color] at [code]old_name[/code] to [code]name[/code] if the "
+"theme has [code]node_type[/code]. If [code]name[/code] is already taken, "
+"this method fails."
+msgstr ""
+
+#: doc/classes/Theme.xml:307
+msgid ""
+"Renames the constant at [code]old_name[/code] to [code]name[/code] if the "
+"theme has [code]node_type[/code]. If [code]name[/code] is already taken, "
+"this method fails."
+msgstr ""
+
+#: doc/classes/Theme.xml:316
+msgid ""
+"Renames the [Font] at [code]old_name[/code] to [code]name[/code] if the "
+"theme has [code]node_type[/code]. If [code]name[/code] is already taken, "
+"this method fails."
+msgstr ""
+
+#: doc/classes/Theme.xml:325
+msgid ""
+"Renames the icon at [code]old_name[/code] to [code]name[/code] if the theme "
+"has [code]node_type[/code]. If [code]name[/code] is already taken, this "
+"method fails."
+msgstr ""
+
+#: doc/classes/Theme.xml:334
+msgid ""
+"Renames [StyleBox] at [code]old_name[/code] to [code]name[/code] if the "
+"theme has [code]node_type[/code]. If [code]name[/code] is already taken, "
+"this method fails."
+msgstr ""
+
+#: doc/classes/Theme.xml:344
+msgid ""
+"Renames the theme item of [code]data_type[/code] at [code]old_name[/code] to "
+"[code]name[/code] if the theme has [code]node_type[/code]. If [code]name[/"
+"code] is already taken, this method fails."
+msgstr ""
+
+#: doc/classes/Theme.xml:353
+msgid ""
+"Sets the theme's [Color] to [code]color[/code] at [code]name[/code] in "
+"[code]node_type[/code].\n"
+"Creates [code]node_type[/code] if the theme does not have it."
+msgstr ""
+
+#: doc/classes/Theme.xml:363
+msgid ""
+"Sets the theme's constant to [code]constant[/code] at [code]name[/code] in "
+"[code]node_type[/code].\n"
+"Creates [code]node_type[/code] if the theme does not have it."
+msgstr ""
+
+#: doc/classes/Theme.xml:373
+msgid ""
+"Sets the theme's [Font] to [code]font[/code] at [code]name[/code] in "
+"[code]node_type[/code].\n"
+"Creates [code]node_type[/code] if the theme does not have it."
+msgstr ""
+
+#: doc/classes/Theme.xml:383
+msgid ""
+"Sets the theme's icon [Texture] to [code]texture[/code] at [code]name[/code] "
+"in [code]node_type[/code].\n"
+"Creates [code]node_type[/code] if the theme does not have it."
+msgstr ""
+
+#: doc/classes/Theme.xml:393
+msgid ""
+"Sets theme's [StyleBox] to [code]stylebox[/code] at [code]name[/code] in "
+"[code]node_type[/code].\n"
+"Creates [code]node_type[/code] if the theme does not have it."
+msgstr ""
+
+#: doc/classes/Theme.xml:404
+msgid ""
+"Sets the theme item of [code]data_type[/code] to [code]value[/code] at "
+"[code]name[/code] in [code]node_type[/code].\n"
+"Does nothing if the [code]value[/code] type does not match [code]data_type[/"
+"code].\n"
+"Creates [code]node_type[/code] if the theme does not have it."
+msgstr ""
+
+#: doc/classes/Theme.xml:412
+msgid ""
+"The default font of this [Theme] resource. Used as a fallback value for font "
+"items defined in this theme, but having invalid values. If this value is "
+"also invalid, the global default value is used.\n"
+"Use [method has_default_font] to check if this value is valid."
+msgstr ""
+
+#: doc/classes/Theme.xml:418
+msgid "Theme's [Color] item type."
+msgstr ""
+
+#: doc/classes/Theme.xml:421
+msgid "Theme's constant item type."
+msgstr ""
+
+#: doc/classes/Theme.xml:424
+msgid "Theme's [Font] item type."
+msgstr ""
+
+#: doc/classes/Theme.xml:427
+msgid "Theme's icon [Texture] item type."
+msgstr ""
+
+#: doc/classes/Theme.xml:430
+msgid "Theme's [StyleBox] item type."
+msgstr ""
+
+#: doc/classes/Theme.xml:433
+msgid "Maximum value for the DataType enum."
+msgstr ""
+
+#: doc/classes/Thread.xml:4
+msgid "A unit of execution in a process."
+msgstr ""
+
+#: doc/classes/Thread.xml:7
+msgid ""
+"A unit of execution in a process. Can run methods on [Object]s "
+"simultaneously. The use of synchronization via [Mutex] or [Semaphore] is "
+"advised if working with shared objects.\n"
+"[b]Note:[/b] Breakpoints won't break on code if it's running in a thread. "
+"This is a current limitation of the GDScript debugger."
+msgstr ""
+
+#: doc/classes/Thread.xml:12
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/threads/thread_safe_apis.html"
+msgstr ""
+
+#: doc/classes/Thread.xml:19
+msgid ""
+"Returns the current [Thread]'s ID, uniquely identifying it among all "
+"threads. If the [Thread] is not running this returns an empty string."
+msgstr ""
+
+#: doc/classes/Thread.xml:25
+msgid ""
+"Returns [code]true[/code] if this [Thread] has been started. Once started, "
+"this will return [code]true[/code] until it is joined using [method "
+"wait_to_finish]. For checking if a [Thread] is still executing its task, use "
+"[method is_alive]."
+msgstr ""
+
+#: doc/classes/Thread.xml:31
+msgid ""
+"Returns [code]true[/code] if this [Thread] is currently running. This is "
+"useful for determining if [method wait_to_finish] can be called without "
+"blocking the calling thread.\n"
+"To check if a [Thread] is joinable, use [method is_active]."
+msgstr ""
+
+#: doc/classes/Thread.xml:42
+msgid ""
+"Starts a new [Thread] that runs [code]method[/code] on object "
+"[code]instance[/code] with [code]userdata[/code] passed as an argument. Even "
+"if no userdata is passed, [code]method[/code] must accept one argument and "
+"it will be null. The [code]priority[/code] of the [Thread] can be changed by "
+"passing a value from the [enum Priority] enum.\n"
+"Returns [constant OK] on success, or [constant ERR_CANT_CREATE] on failure."
+msgstr ""
+
+#: doc/classes/Thread.xml:49
+msgid ""
+"Joins the [Thread] and waits for it to finish. Returns the output of the "
+"method passed to [method start].\n"
+"Should either be used when you want to retrieve the value returned from the "
+"method called by the [Thread] or before freeing the instance that contains "
+"the [Thread].\n"
+"To determine if this can be called without blocking the calling thread, "
+"check if [method is_alive] is [code]false[/code].\n"
+"[b]Note:[/b] After the [Thread] finishes joining it will be disposed. If you "
+"want to use it again you will have to create a new instance of it."
+msgstr ""
+
+#: doc/classes/Thread.xml:58
+msgid "A thread running with lower priority than normally."
+msgstr ""
+
+#: doc/classes/Thread.xml:61
+msgid "A thread with a standard priority."
+msgstr ""
+
+#: doc/classes/Thread.xml:64
+msgid "A thread running with higher priority than normally."
+msgstr ""
+
+#: doc/classes/TileMap.xml:4
+msgid "Node for 2D tile-based maps."
+msgstr ""
+
+#: doc/classes/TileMap.xml:7
+msgid ""
+"Node for 2D tile-based maps. Tilemaps use a [TileSet] which contain a list "
+"of tiles (textures plus optional collision, navigation, and/or occluder "
+"shapes) which are used to create grid-based maps.\n"
+"When doing physics queries against the tilemap, the cell coordinates are "
+"encoded as [code]metadata[/code] for each detected collision shape returned "
+"by methods such as [method Physics2DDirectSpaceState.intersect_shape], "
+"[method Physics2DDirectBodyState.get_contact_collider_shape_metadata], etc."
+msgstr ""
+
+#: doc/classes/TileMap.xml:11 doc/classes/TileSet.xml:11
+msgid "https://docs.godotengine.org/en/3.4/tutorials/2d/using_tilemaps.html"
+msgstr ""
+
+#: doc/classes/TileMap.xml:14 doc/classes/TileSet.xml:14
+msgid "https://godotengine.org/asset-library/asset/111"
+msgstr ""
+
+#: doc/classes/TileMap.xml:23
+msgid "Clears all cells."
+msgstr ""
+
+#: doc/classes/TileMap.xml:29
+msgid "Clears cells that do not exist in the tileset."
+msgstr ""
+
+#: doc/classes/TileMap.xml:37
+msgid ""
+"Returns the tile index of the given cell. If no tile exists in the cell, "
+"returns [constant INVALID_CELL]."
+msgstr ""
+
+#: doc/classes/TileMap.xml:45
+msgid ""
+"Returns the coordinate (subtile column and row) of the autotile variation in "
+"the tileset. Returns a zero vector if the cell doesn't have autotiling."
+msgstr ""
+
+#: doc/classes/TileMap.xml:52
+msgid ""
+"Returns the tile index of the cell given by a Vector2. If no tile exists in "
+"the cell, returns [constant INVALID_CELL]."
+msgstr ""
+
+#: doc/classes/TileMap.xml:59
+msgid "Returns [code]true[/code] if the given collision layer bit is set."
+msgstr ""
+
+#: doc/classes/TileMap.xml:66
+msgid "Returns [code]true[/code] if the given collision mask bit is set."
+msgstr ""
+
+#: doc/classes/TileMap.xml:72
+msgid ""
+"Returns a [Vector2] array with the positions of all cells containing a tile "
+"from the tileset (i.e. a tile index different from [code]-1[/code])."
+msgstr ""
+
+#: doc/classes/TileMap.xml:79
+msgid ""
+"Returns an array of all cells with the given tile index specified in "
+"[code]id[/code]."
+msgstr ""
+
+#: doc/classes/TileMap.xml:85
+msgid "Returns a rectangle enclosing the used (non-empty) tiles of the map."
+msgstr ""
+
+#: doc/classes/TileMap.xml:93
+msgid ""
+"Returns [code]true[/code] if the given cell is transposed, i.e. the X and Y "
+"axes are swapped."
+msgstr ""
+
+#: doc/classes/TileMap.xml:101
+msgid "Returns [code]true[/code] if the given cell is flipped in the X axis."
+msgstr ""
+
+#: doc/classes/TileMap.xml:109
+msgid "Returns [code]true[/code] if the given cell is flipped in the Y axis."
+msgstr ""
+
+#: doc/classes/TileMap.xml:117
+msgid ""
+"Returns the local position of the top left corner of the cell corresponding "
+"to the given tilemap (grid-based) coordinates.\n"
+"To get the global position, use [method Node2D.to_global]:\n"
+"[codeblock]\n"
+"var local_position = my_tilemap.map_to_world(map_position)\n"
+"var global_position = my_tilemap.to_global(local_position)\n"
+"[/codeblock]\n"
+"Optionally, the tilemap's half offset can be ignored."
+msgstr ""
+
+#: doc/classes/TileMap.xml:136
+msgid ""
+"Sets the tile index for the cell given by a Vector2.\n"
+"An index of [code]-1[/code] clears the cell.\n"
+"Optionally, the tile can also be flipped, transposed, or given autotile "
+"coordinates. The autotile coordinate refers to the column and row of the "
+"subtile.\n"
+"[b]Note:[/b] Data such as navigation polygons and collision shapes are not "
+"immediately updated for performance reasons.\n"
+"If you need these to be immediately updated, you can call [method "
+"update_dirty_quadrants].\n"
+"Overriding this method also overrides it internally, allowing custom logic "
+"to be implemented when tiles are placed/removed:\n"
+"[codeblock]\n"
+"func set_cell(x, y, tile, flip_x=false, flip_y=false, transpose=false, "
+"autotile_coord=Vector2()):\n"
+" # Write your custom logic here.\n"
+" # To call the default method:\n"
+" .set_cell(x, y, tile, flip_x, flip_y, transpose, autotile_coord)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/TileMap.xml:158
+msgid ""
+"Sets the tile index for the given cell.\n"
+"An index of [code]-1[/code] clears the cell.\n"
+"Optionally, the tile can also be flipped or transposed.\n"
+"[b]Note:[/b] Data such as navigation polygons and collision shapes are not "
+"immediately updated for performance reasons.\n"
+"If you need these to be immediately updated, you can call [method "
+"update_dirty_quadrants]."
+msgstr ""
+
+#: doc/classes/TileMap.xml:170
+msgid "Sets the given collision layer bit."
+msgstr ""
+
+#: doc/classes/TileMap.xml:178
+msgid "Sets the given collision mask bit."
+msgstr ""
+
+#: doc/classes/TileMap.xml:185
+msgid ""
+"Applies autotiling rules to the cell (and its adjacent cells) referenced by "
+"its grid-based X and Y coordinates."
+msgstr ""
+
+#: doc/classes/TileMap.xml:193
+msgid ""
+"Applies autotiling rules to the cells in the given region (specified by grid-"
+"based X and Y coordinates).\n"
+"Calling with invalid (or missing) parameters applies autotiling rules for "
+"the entire tilemap."
+msgstr ""
+
+#: doc/classes/TileMap.xml:200
+msgid ""
+"Updates the tile map's quadrants, allowing things such as navigation and "
+"collision shapes to be immediately used if modified."
+msgstr ""
+
+#: doc/classes/TileMap.xml:207
+msgid ""
+"Returns the tilemap (grid-based) coordinates corresponding to the given "
+"local position.\n"
+"To use this with a global position, first determine the local position with "
+"[method Node2D.to_local]:\n"
+"[codeblock]\n"
+"var local_position = my_tilemap.to_local(global_position)\n"
+"var map_position = my_tilemap.world_to_map(local_position)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/TileMap.xml:218
+msgid "If [code]true[/code], the cell's UVs will be clipped."
+msgstr ""
+
+#: doc/classes/TileMap.xml:221
+msgid "The custom [Transform2D] to be applied to the TileMap's cells."
+msgstr ""
+
+#: doc/classes/TileMap.xml:224
+msgid ""
+"Amount to offset alternating tiles. See [enum HalfOffset] for possible "
+"values."
+msgstr ""
+
+#: doc/classes/TileMap.xml:227
+msgid ""
+"The TileMap's quadrant size. Optimizes drawing by batching, using chunks of "
+"this size."
+msgstr ""
+
+#: doc/classes/TileMap.xml:230
+msgid "The TileMap's cell size."
+msgstr ""
+
+#: doc/classes/TileMap.xml:233
+msgid "Position for tile origin. See [enum TileOrigin] for possible values."
+msgstr ""
+
+#: doc/classes/TileMap.xml:236
+msgid ""
+"If [code]true[/code], the TileMap's direct children will be drawn in order "
+"of their Y coordinate."
+msgstr ""
+
+#: doc/classes/TileMap.xml:239
+msgid ""
+"If [code]true[/code], the textures will be centered in the middle of each "
+"tile. This is useful for certain isometric or top-down modes when textures "
+"are made larger or smaller than the tiles (e.g. to avoid flickering on tile "
+"edges). The offset is still applied, but from the center of the tile. If "
+"used, [member compatibility_mode] is ignored.\n"
+"If [code]false[/code], the texture position start in the top-left corner "
+"unless [member compatibility_mode] is enabled."
+msgstr ""
+
+#: doc/classes/TileMap.xml:243
+msgid ""
+"Bounce value for static body collisions (see [code]collision_use_kinematic[/"
+"code])."
+msgstr ""
+
+#: doc/classes/TileMap.xml:246
+msgid ""
+"Friction value for static body collisions (see "
+"[code]collision_use_kinematic[/code])."
+msgstr ""
+
+#: doc/classes/TileMap.xml:249
+msgid ""
+"The collision layer(s) for all colliders in the TileMap. See [url=https://"
+"docs.godotengine.org/en/3.4/tutorials/physics/physics_introduction."
+"html#collision-layers-and-masks]Collision layers and masks[/url] in the "
+"documentation for more information."
+msgstr ""
+
+#: doc/classes/TileMap.xml:252
+msgid ""
+"The collision mask(s) for all colliders in the TileMap. See [url=https://"
+"docs.godotengine.org/en/3.4/tutorials/physics/physics_introduction."
+"html#collision-layers-and-masks]Collision layers and masks[/url] in the "
+"documentation for more information."
+msgstr ""
+
+#: doc/classes/TileMap.xml:255
+msgid ""
+"If [code]true[/code], TileMap collisions will be handled as a kinematic "
+"body. If [code]false[/code], collisions will be handled as static body."
+msgstr ""
+
+#: doc/classes/TileMap.xml:258
+msgid ""
+"If [code]true[/code], this tilemap's collision shape will be added to the "
+"collision shape of the parent. The parent has to be a [CollisionObject2D]."
+msgstr ""
+
+#: doc/classes/TileMap.xml:261
+msgid ""
+"If [code]true[/code], the compatibility with the tilemaps made in Godot 3.1 "
+"or earlier is maintained (textures move when the tile origin changes and "
+"rotate if the texture size is not homogeneous). This mode presents problems "
+"when doing [code]flip_h[/code], [code]flip_v[/code] and [code]transpose[/"
+"code] tile operations on non-homogeneous isometric tiles (e.g. 2:1), in "
+"which the texture could not coincide with the collision, thus it is not "
+"recommended for isometric or non-square tiles.\n"
+"If [code]false[/code], the textures do not move when doing [code]flip_h[/"
+"code], [code]flip_v[/code] operations if no offset is used, nor when "
+"changing the tile origin.\n"
+"The compatibility mode doesn't work with the [member centered_textures] "
+"option, because displacing textures with the [member cell_tile_origin] "
+"option or in irregular tiles is not relevant when centering those textures."
+msgstr ""
+
+#: doc/classes/TileMap.xml:266
+msgid "The TileMap orientation mode. See [enum Mode] for possible values."
+msgstr ""
+
+#: doc/classes/TileMap.xml:269
+msgid ""
+"The light mask assigned to all light occluders in the TileMap. The TileSet's "
+"light occluders will cast shadows only from Light2D(s) that have the same "
+"light mask(s)."
+msgstr ""
+
+#: doc/classes/TileMap.xml:272
+msgid ""
+"If [code]true[/code], collision shapes are visible in the editor. Doesn't "
+"affect collision shapes visibility at runtime. To show collision shapes at "
+"runtime, enable [b]Visible Collision Shapes[/b] in the [b]Debug[/b] menu "
+"instead."
+msgstr ""
+
+#: doc/classes/TileMap.xml:275
+msgid "The assigned [TileSet]."
+msgstr ""
+
+#: doc/classes/TileMap.xml:281
+msgid "Emitted when a tilemap setting has changed."
+msgstr ""
+
+#: doc/classes/TileMap.xml:287
+msgid "Returned when a cell doesn't exist."
+msgstr ""
+
+#: doc/classes/TileMap.xml:290
+msgid "Orthogonal orientation mode."
+msgstr ""
+
+#: doc/classes/TileMap.xml:293
+msgid "Isometric orientation mode."
+msgstr ""
+
+#: doc/classes/TileMap.xml:296
+msgid "Custom orientation mode."
+msgstr ""
+
+#: doc/classes/TileMap.xml:299
+msgid "Half offset on the X coordinate."
+msgstr ""
+
+#: doc/classes/TileMap.xml:302
+msgid "Half offset on the Y coordinate."
+msgstr ""
+
+#: doc/classes/TileMap.xml:305
+msgid "Half offset disabled."
+msgstr ""
+
+#: doc/classes/TileMap.xml:308
+msgid "Half offset on the X coordinate (negative)."
+msgstr ""
+
+#: doc/classes/TileMap.xml:311
+msgid "Half offset on the Y coordinate (negative)."
+msgstr ""
+
+#: doc/classes/TileMap.xml:314
+msgid "Tile origin at its top-left corner."
+msgstr ""
+
+#: doc/classes/TileMap.xml:317
+msgid "Tile origin at its center."
+msgstr ""
+
+#: doc/classes/TileMap.xml:320
+msgid "Tile origin at its bottom-left corner."
+msgstr ""
+
+#: doc/classes/TileSet.xml:4
+msgid "Tile library for tilemaps."
+msgstr ""
+
+#: doc/classes/TileSet.xml:7
+msgid ""
+"A TileSet is a library of tiles for a [TileMap]. It contains a list of "
+"tiles, each consisting of a sprite and optional collision shapes.\n"
+"Tiles are referenced by a unique integer ID."
+msgstr ""
+
+#: doc/classes/TileSet.xml:42
+msgid ""
+"Determines when the auto-tiler should consider two different auto-tile IDs "
+"to be bound together.\n"
+"[b]Note:[/b] [code]neighbor_id[/code] will be [code]-1[/code] ([constant "
+"TileMap.INVALID_CELL]) when checking a tile against an empty neighbor tile."
+msgstr ""
+
+#: doc/classes/TileSet.xml:50
+msgid "Clears all bitmask information of the autotile."
+msgstr ""
+
+#: doc/classes/TileSet.xml:58
+msgid ""
+"Returns the bitmask of the subtile from an autotile given its coordinates.\n"
+"The value is the sum of the values in [enum AutotileBindings] present in the "
+"subtile (e.g. a value of 5 means the bitmask has bindings in both the top "
+"left and top right)."
+msgstr ""
+
+#: doc/classes/TileSet.xml:66
+msgid "Returns the [enum BitmaskMode] of the autotile."
+msgstr ""
+
+#: doc/classes/TileSet.xml:73
+msgid ""
+"Returns the subtile that's being used as an icon in an atlas/autotile given "
+"its coordinates.\n"
+"The subtile defined as the icon will be used as a fallback when the atlas/"
+"autotile's bitmask information is incomplete. It will also be used to "
+"represent it in the TileSet editor."
+msgstr ""
+
+#: doc/classes/TileSet.xml:82
+msgid ""
+"Returns the light occluder of the subtile from an atlas/autotile given its "
+"coordinates."
+msgstr ""
+
+#: doc/classes/TileSet.xml:90
+msgid ""
+"Returns the navigation polygon of the subtile from an atlas/autotile given "
+"its coordinates."
+msgstr ""
+
+#: doc/classes/TileSet.xml:97
+msgid "Returns the size of the subtiles in an atlas/autotile."
+msgstr ""
+
+#: doc/classes/TileSet.xml:104
+msgid "Returns the spacing between subtiles of the atlas/autotile."
+msgstr ""
+
+#: doc/classes/TileSet.xml:112
+msgid ""
+"Returns the priority of the subtile from an autotile given its coordinates.\n"
+"When more than one subtile has the same bitmask value, one of them will be "
+"picked randomly for drawing. Its priority will define how often it will be "
+"picked."
+msgstr ""
+
+#: doc/classes/TileSet.xml:121
+msgid ""
+"Returns the drawing index of the subtile from an atlas/autotile given its "
+"coordinates."
+msgstr ""
+
+#: doc/classes/TileSet.xml:130
+msgid ""
+"Sets the bitmask of the subtile from an autotile given its coordinates.\n"
+"The value is the sum of the values in [enum AutotileBindings] present in the "
+"subtile (e.g. a value of 5 means the bitmask has bindings in both the top "
+"left and top right)."
+msgstr ""
+
+#: doc/classes/TileSet.xml:139
+msgid "Sets the [enum BitmaskMode] of the autotile."
+msgstr ""
+
+#: doc/classes/TileSet.xml:147
+msgid ""
+"Sets the subtile that will be used as an icon in an atlas/autotile given its "
+"coordinates.\n"
+"The subtile defined as the icon will be used as a fallback when the atlas/"
+"autotile's bitmask information is incomplete. It will also be used to "
+"represent it in the TileSet editor."
+msgstr ""
+
+#: doc/classes/TileSet.xml:157
+msgid ""
+"Sets the light occluder of the subtile from an atlas/autotile given its "
+"coordinates."
+msgstr ""
+
+#: doc/classes/TileSet.xml:166
+msgid ""
+"Sets the navigation polygon of the subtile from an atlas/autotile given its "
+"coordinates."
+msgstr ""
+
+#: doc/classes/TileSet.xml:174
+msgid "Sets the size of the subtiles in an atlas/autotile."
+msgstr ""
+
+#: doc/classes/TileSet.xml:182
+msgid "Sets the spacing between subtiles of the atlas/autotile."
+msgstr ""
+
+#: doc/classes/TileSet.xml:191
+msgid ""
+"Sets the priority of the subtile from an autotile given its coordinates.\n"
+"When more than one subtile has the same bitmask value, one of them will be "
+"picked randomly for drawing. Its priority will define how often it will be "
+"picked."
+msgstr ""
+
+#: doc/classes/TileSet.xml:201
+msgid ""
+"Sets the drawing index of the subtile from an atlas/autotile given its "
+"coordinates."
+msgstr ""
+
+#: doc/classes/TileSet.xml:207
+msgid "Clears all tiles."
+msgstr ""
+
+#: doc/classes/TileSet.xml:214
+msgid "Creates a new tile with the given ID."
+msgstr ""
+
+#: doc/classes/TileSet.xml:221
+msgid "Returns the first tile matching the given name."
+msgstr ""
+
+#: doc/classes/TileSet.xml:227
+msgid ""
+"Returns the ID following the last currently used ID, useful when creating a "
+"new tile."
+msgstr ""
+
+#: doc/classes/TileSet.xml:233
+msgid "Returns an array of all currently used tile IDs."
+msgstr ""
+
+#: doc/classes/TileSet.xml:240
+msgid "Removes the given tile ID."
+msgstr ""
+
+#: doc/classes/TileSet.xml:251
+msgid "Adds a shape to the tile."
+msgstr ""
+
+#: doc/classes/TileSet.xml:258
+msgid "Returns the tile's light occluder."
+msgstr ""
+
+#: doc/classes/TileSet.xml:265
+msgid "Returns the tile's material."
+msgstr ""
+
+#: doc/classes/TileSet.xml:272
+msgid "Returns the tile's modulation color."
+msgstr ""
+
+#: doc/classes/TileSet.xml:279
+msgid "Returns the tile's name."
+msgstr ""
+
+#: doc/classes/TileSet.xml:286
+msgid "Returns the navigation polygon of the tile."
+msgstr ""
+
+#: doc/classes/TileSet.xml:293
+msgid "Returns the offset of the tile's navigation polygon."
+msgstr ""
+
+#: doc/classes/TileSet.xml:300
+msgid "Returns the tile's normal map texture."
+msgstr ""
+
+#: doc/classes/TileSet.xml:307
+msgid "Returns the offset of the tile's light occluder."
+msgstr ""
+
+#: doc/classes/TileSet.xml:314
+msgid "Returns the tile sub-region in the texture."
+msgstr ""
+
+#: doc/classes/TileSet.xml:322
+msgid "Returns a tile's given shape."
+msgstr ""
+
+#: doc/classes/TileSet.xml:329
+msgid "Returns the number of shapes assigned to a tile."
+msgstr ""
+
+#: doc/classes/TileSet.xml:337
+msgid "Returns the offset of a tile's shape."
+msgstr ""
+
+#: doc/classes/TileSet.xml:345
+msgid "Returns the one-way collision value of a tile's shape."
+msgstr ""
+
+#: doc/classes/TileSet.xml:360
+msgid "Returns the [Transform2D] of a tile's shape."
+msgstr ""
+
+#: doc/classes/TileSet.xml:367
+msgid ""
+"Returns an array of dictionaries describing the tile's shapes.\n"
+"[b]Dictionary structure in the array returned by this method:[/b]\n"
+"[codeblock]\n"
+"{\n"
+" \"autotile_coord\": Vector2,\n"
+" \"one_way\": bool,\n"
+" \"one_way_margin\": int,\n"
+" \"shape\": CollisionShape2D,\n"
+" \"shape_transform\": Transform2D,\n"
+"}\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/TileSet.xml:384
+msgid "Returns the tile's texture."
+msgstr ""
+
+#: doc/classes/TileSet.xml:391
+msgid "Returns the texture offset of the tile."
+msgstr ""
+
+#: doc/classes/TileSet.xml:398
+msgid "Returns the tile's [enum TileMode]."
+msgstr ""
+
+#: doc/classes/TileSet.xml:405
+msgid "Returns the tile's Z index (drawing layer)."
+msgstr ""
+
+#: doc/classes/TileSet.xml:413
+msgid "Sets a light occluder for the tile."
+msgstr ""
+
+#: doc/classes/TileSet.xml:421
+msgid "Sets the tile's material."
+msgstr ""
+
+#: doc/classes/TileSet.xml:429
+msgid "Sets the tile's modulation color."
+msgstr ""
+
+#: doc/classes/TileSet.xml:437
+msgid "Sets the tile's name."
+msgstr ""
+
+#: doc/classes/TileSet.xml:445
+msgid "Sets the tile's navigation polygon."
+msgstr ""
+
+#: doc/classes/TileSet.xml:453
+msgid "Sets an offset for the tile's navigation polygon."
+msgstr ""
+
+#: doc/classes/TileSet.xml:461
+msgid ""
+"Sets the tile's normal map texture.\n"
+"[b]Note:[/b] Godot expects the normal map to use X+, Y-, and Z+ coordinates. "
+"See [url=http://wiki.polycount.com/wiki/"
+"Normal_Map_Technical_Details#Common_Swizzle_Coordinates]this page[/url] for "
+"a comparison of normal map coordinates expected by popular engines."
+msgstr ""
+
+#: doc/classes/TileSet.xml:470
+msgid "Sets an offset for the tile's light occluder."
+msgstr ""
+
+#: doc/classes/TileSet.xml:478
+msgid ""
+"Sets the tile's sub-region in the texture. This is common in texture atlases."
+msgstr ""
+
+#: doc/classes/TileSet.xml:487
+msgid "Sets a shape for the tile, enabling collision."
+msgstr ""
+
+#: doc/classes/TileSet.xml:496
+msgid "Sets the offset of a tile's shape."
+msgstr ""
+
+#: doc/classes/TileSet.xml:505
+msgid "Enables one-way collision on a tile's shape."
+msgstr ""
+
+#: doc/classes/TileSet.xml:522
+msgid "Sets a [Transform2D] on a tile's shape."
+msgstr ""
+
+#: doc/classes/TileSet.xml:530
+msgid "Sets an array of shapes for the tile, enabling collision."
+msgstr ""
+
+#: doc/classes/TileSet.xml:538
+msgid "Sets the tile's texture."
+msgstr ""
+
+#: doc/classes/TileSet.xml:546
+msgid "Sets the tile's texture offset."
+msgstr ""
+
+#: doc/classes/TileSet.xml:554
+msgid "Sets the tile's [enum TileMode]."
+msgstr ""
+
+#: doc/classes/TileSet.xml:562
+msgid "Sets the tile's drawing index."
+msgstr ""
+
+#: doc/classes/Timer.xml:4
+msgid "A countdown timer."
+msgstr ""
+
+#: doc/classes/Timer.xml:7
+msgid ""
+"Counts down a specified interval and emits a signal on reaching 0. Can be "
+"set to repeat or \"one-shot\" mode.\n"
+"[b]Note:[/b] To create a one-shot timer without instantiating a node, use "
+"[method SceneTree.create_timer]."
+msgstr ""
+
+#: doc/classes/Timer.xml:17
+msgid "Returns [code]true[/code] if the timer is stopped."
+msgstr ""
+
+#: doc/classes/Timer.xml:24
+msgid ""
+"Starts the timer. Sets [code]wait_time[/code] to [code]time_sec[/code] if "
+"[code]time_sec > 0[/code]. This also resets the remaining time to "
+"[code]wait_time[/code].\n"
+"[b]Note:[/b] This method will not resume a paused timer. See [member paused]."
+msgstr ""
+
+#: doc/classes/Timer.xml:31
+msgid "Stops the timer."
+msgstr ""
+
+#: doc/classes/Timer.xml:37
+msgid ""
+"If [code]true[/code], the timer will automatically start when entering the "
+"scene tree.\n"
+"[b]Note:[/b] This property is automatically set to [code]false[/code] after "
+"the timer enters the scene tree and starts."
+msgstr ""
+
+#: doc/classes/Timer.xml:41
+msgid ""
+"If [code]true[/code], the timer will stop when reaching 0. If [code]false[/"
+"code], it will restart."
+msgstr ""
+
+#: doc/classes/Timer.xml:44
+msgid ""
+"If [code]true[/code], the timer is paused and will not process until it is "
+"unpaused again, even if [method start] is called."
+msgstr ""
+
+#: doc/classes/Timer.xml:47
+msgid "Processing mode. See [enum TimerProcessMode]."
+msgstr ""
+
+#: doc/classes/Timer.xml:50
+msgid ""
+"The timer's remaining time in seconds. Returns 0 if the timer is inactive.\n"
+"[b]Note:[/b] You cannot set this value. To change the timer's remaining "
+"time, use [method start]."
+msgstr ""
+
+#: doc/classes/Timer.xml:54
+msgid ""
+"The wait time in seconds.\n"
+"[b]Note:[/b] Timers can only emit once per rendered frame at most (or once "
+"per physics frame if [member process_mode] is [constant "
+"TIMER_PROCESS_PHYSICS]). This means very low wait times (lower than 0.05 "
+"seconds) will behave in significantly different ways depending on the "
+"rendered framerate. For very low wait times, it is recommended to use a "
+"process loop in a script instead of using a Timer node."
+msgstr ""
+
+#: doc/classes/Timer.xml:67
+msgid ""
+"Update the timer during the physics step at each frame (fixed framerate "
+"processing)."
+msgstr ""
+
+#: doc/classes/Timer.xml:70
+msgid "Update the timer during the idle time at each frame."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:4
+msgid "Flat button helper class."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:7
+msgid ""
+"This is a helper class to generate a flat [Button] (see [member Button."
+"flat]), creating a [ToolButton] is equivalent to:\n"
+"[codeblock]\n"
+"var btn = Button.new()\n"
+"btn.flat = true\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/ToolButton.xml:24
+msgid "[StyleBox] used when the [ToolButton] is disabled."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:27
+msgid ""
+"[StyleBox] used when the [ToolButton] is focused. It is displayed over the "
+"current [StyleBox], so using [StyleBoxEmpty] will just disable the focus "
+"visual effect."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:30
+msgid "[Font] of the [ToolButton]'s text."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:33
+msgid "Default text [Color] of the [ToolButton]."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:36
+msgid "Text [Color] used when the [ToolButton] is disabled."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:39
+msgid ""
+"Text [Color] used when the [ToolButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:42
+msgid "Text [Color] used when the [ToolButton] is being hovered."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:45
+msgid "Text [Color] used when the [ToolButton] is being pressed."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:48
+msgid "[StyleBox] used when the [ToolButton] is being hovered."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:51
+msgid "The horizontal space between [ToolButton]'s icon and text."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:54
+msgid "Default [StyleBox] for the [ToolButton]."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:57
+msgid "[StyleBox] used when the [ToolButton] is being pressed."
+msgstr ""
+
+#: doc/classes/TouchScreenButton.xml:4
+msgid "Button for touch screen devices for gameplay use."
+msgstr ""
+
+#: doc/classes/TouchScreenButton.xml:7
+msgid ""
+"TouchScreenButton allows you to create on-screen buttons for touch devices. "
+"It's intended for gameplay use, such as a unit you have to touch to move. "
+"Unlike [Button], TouchScreenButton supports multitouch out of the box. "
+"Several TouchScreenButtons can be pressed at the same time with touch "
+"input.\n"
+"This node inherits from [Node2D]. Unlike with [Control] nodes, you cannot "
+"set anchors on it. If you want to create menus or user interfaces, you may "
+"want to use [Button] nodes instead. To make button nodes react to touch "
+"events, you can enable the Emulate Mouse option in the Project Settings.\n"
+"You can configure TouchScreenButton to be visible only on touch devices, "
+"helping you develop your game both for desktop and mobile devices."
+msgstr ""
+
+#: doc/classes/TouchScreenButton.xml:17
+msgid "Returns [code]true[/code] if this button is currently pressed."
+msgstr ""
+
+#: doc/classes/TouchScreenButton.xml:23
+msgid "The button's action. Actions can be handled with [InputEventAction]."
+msgstr ""
+
+#: doc/classes/TouchScreenButton.xml:26
+msgid "The button's bitmask."
+msgstr ""
+
+#: doc/classes/TouchScreenButton.xml:29
+msgid "The button's texture for the normal state."
+msgstr ""
+
+#: doc/classes/TouchScreenButton.xml:32
+msgid ""
+"If [code]true[/code], the [signal pressed] and [signal released] signals are "
+"emitted whenever a pressed finger goes in and out of the button, even if the "
+"pressure started outside the active area of the button.\n"
+"[b]Note:[/b] This is a \"pass-by\" (not \"bypass\") press mode."
+msgstr ""
+
+#: doc/classes/TouchScreenButton.xml:36
+msgid "The button's texture for the pressed state."
+msgstr ""
+
+#: doc/classes/TouchScreenButton.xml:39
+msgid "The button's shape."
+msgstr ""
+
+#: doc/classes/TouchScreenButton.xml:42
+msgid ""
+"If [code]true[/code], the button's shape is centered in the provided "
+"texture. If no texture is used, this property has no effect."
+msgstr ""
+
+#: doc/classes/TouchScreenButton.xml:45
+msgid "If [code]true[/code], the button's shape is visible."
+msgstr ""
+
+#: doc/classes/TouchScreenButton.xml:48
+msgid ""
+"The button's visibility mode. See [enum VisibilityMode] for possible values."
+msgstr ""
+
+#: doc/classes/TouchScreenButton.xml:54
+msgid "Emitted when the button is pressed (down)."
+msgstr ""
+
+#: doc/classes/TouchScreenButton.xml:59
+msgid "Emitted when the button is released (up)."
+msgstr ""
+
+#: doc/classes/TouchScreenButton.xml:65
+msgid "Always visible."
+msgstr ""
+
+#: doc/classes/TouchScreenButton.xml:68
+msgid "Visible on touch screens only."
+msgstr ""
+
+#: doc/classes/Transform.xml:4
+msgid "3D transformation (3×4 matrix)."
+msgstr ""
+
+#: doc/classes/Transform.xml:7
+msgid ""
+"3×4 matrix (3 rows, 4 columns) used for 3D linear transformations. It can "
+"represent transformations such as translation, rotation, or scaling. It "
+"consists of a [member basis] (first 3 columns) and a [Vector3] for the "
+"[member origin] (last column).\n"
+"For more information, read the \"Matrices and transforms\" documentation "
+"article."
+msgstr ""
+
+#: doc/classes/Transform.xml:26
+msgid ""
+"Constructs a Transform from four [Vector3] values (matrix columns). Each "
+"axis corresponds to local basis vectors (some of which may be scaled)."
+msgstr ""
+
+#: doc/classes/Transform.xml:34
+msgid "Constructs a Transform from a [Basis] and [Vector3]."
+msgstr ""
+
+#: doc/classes/Transform.xml:41
+msgid "Constructs a Transform from a [Transform2D]."
+msgstr ""
+
+#: doc/classes/Transform.xml:48
+msgid ""
+"Constructs a Transform from a [Quat]. The origin will be [code]Vector3(0, 0, "
+"0)[/code]."
+msgstr ""
+
+#: doc/classes/Transform.xml:55
+msgid ""
+"Constructs the Transform from a [Basis]. The origin will be Vector3(0, 0, 0)."
+msgstr ""
+
+#: doc/classes/Transform.xml:61 doc/classes/Transform2D.xml:44
+msgid ""
+"Returns the inverse of the transform, under the assumption that the "
+"transformation is composed of rotation, scaling and translation."
+msgstr ""
+
+#: doc/classes/Transform.xml:69
+msgid ""
+"Interpolates the transform to other Transform by weight amount (on the range "
+"of 0.0 to 1.0)."
+msgstr ""
+
+#: doc/classes/Transform.xml:75
+msgid ""
+"Returns the inverse of the transform, under the assumption that the "
+"transformation is composed of rotation and translation (no scaling, use "
+"affine_inverse for transforms with scaling)."
+msgstr ""
+
+#: doc/classes/Transform.xml:82 doc/classes/Transform2D.xml:99
+msgid ""
+"Returns [code]true[/code] if this transform and [code]transform[/code] are "
+"approximately equal, by calling [code]is_equal_approx[/code] on each "
+"component."
+msgstr ""
+
+#: doc/classes/Transform.xml:90
+msgid ""
+"Returns a copy of the transform rotated such that its -Z axis points towards "
+"the [code]target[/code] position.\n"
+"The transform will first be rotated around the given [code]up[/code] vector, "
+"and then fully aligned to the target by a further rotation around an axis "
+"perpendicular to both the [code]target[/code] and [code]up[/code] vectors.\n"
+"Operations take place in global space."
+msgstr ""
+
+#: doc/classes/Transform.xml:98
+msgid ""
+"Returns the transform with the basis orthogonal (90 degrees), and normalized "
+"axis vectors."
+msgstr ""
+
+#: doc/classes/Transform.xml:106
+msgid ""
+"Rotates the transform around the given axis by the given angle (in radians), "
+"using matrix multiplication. The axis must be a normalized vector."
+msgstr ""
+
+#: doc/classes/Transform.xml:113
+msgid ""
+"Scales basis and origin of the transform by the given scale factor, using "
+"matrix multiplication."
+msgstr ""
+
+#: doc/classes/Transform.xml:120 doc/classes/Transform2D.xml:126
+msgid ""
+"Translates the transform by the given offset, relative to the transform's "
+"basis vectors.\n"
+"Unlike [method rotated] and [method scaled], this does not use matrix "
+"multiplication."
+msgstr ""
+
+#: doc/classes/Transform.xml:128
+msgid ""
+"Transforms the given [Vector3], [Plane], [AABB], or [PoolVector3Array] by "
+"this transform."
+msgstr ""
+
+#: doc/classes/Transform.xml:135
+msgid ""
+"Inverse-transforms the given [Vector3], [Plane], [AABB], or "
+"[PoolVector3Array] by this transform."
+msgstr ""
+
+#: doc/classes/Transform.xml:141
+msgid ""
+"The basis is a matrix containing 3 [Vector3] as its columns: X axis, Y axis, "
+"and Z axis. These vectors can be interpreted as the basis vectors of local "
+"coordinate system traveling with the object."
+msgstr ""
+
+#: doc/classes/Transform.xml:144
+msgid ""
+"The translation offset of the transform (column 3, the fourth column). "
+"Equivalent to array index [code]3[/code]."
+msgstr ""
+
+#: doc/classes/Transform.xml:149
+msgid ""
+"[Transform] with no translation, rotation or scaling applied. When applied "
+"to other data structures, [constant IDENTITY] performs no transformation."
+msgstr ""
+
+#: doc/classes/Transform.xml:152
+msgid "[Transform] with mirroring applied perpendicular to the YZ plane."
+msgstr ""
+
+#: doc/classes/Transform.xml:155
+msgid "[Transform] with mirroring applied perpendicular to the XZ plane."
+msgstr ""
+
+#: doc/classes/Transform.xml:158
+msgid "[Transform] with mirroring applied perpendicular to the XY plane."
+msgstr ""
+
+#: doc/classes/Transform2D.xml:4
+msgid "2D transformation (2×3 matrix)."
+msgstr ""
+
+#: doc/classes/Transform2D.xml:7
+msgid ""
+"2×3 matrix (2 rows, 3 columns) used for 2D linear transformations. It can "
+"represent transformations such as translation, rotation, or scaling. It "
+"consists of three [Vector2] values: [member x], [member y], and the [member "
+"origin].\n"
+"For more information, read the \"Matrices and transforms\" documentation "
+"article."
+msgstr ""
+
+#: doc/classes/Transform2D.xml:21
+msgid "Constructs the transform from a 3D [Transform]."
+msgstr ""
+
+#: doc/classes/Transform2D.xml:30
+msgid ""
+"Constructs the transform from 3 [Vector2] values representing [member x], "
+"[member y], and the [member origin] (the three column vectors)."
+msgstr ""
+
+#: doc/classes/Transform2D.xml:38
+msgid "Constructs the transform from a given angle (in radians) and position."
+msgstr ""
+
+#: doc/classes/Transform2D.xml:51
+msgid ""
+"Returns a vector transformed (multiplied) by the basis matrix.\n"
+"This method does not account for translation (the origin vector)."
+msgstr ""
+
+#: doc/classes/Transform2D.xml:59
+msgid ""
+"Returns a vector transformed (multiplied) by the inverse basis matrix.\n"
+"This method does not account for translation (the origin vector)."
+msgstr ""
+
+#: doc/classes/Transform2D.xml:66
+msgid "Returns the transform's origin (translation)."
+msgstr ""
+
+#: doc/classes/Transform2D.xml:72
+msgid "Returns the transform's rotation (in radians)."
+msgstr ""
+
+#: doc/classes/Transform2D.xml:78
+msgid "Returns the scale."
+msgstr ""
+
+#: doc/classes/Transform2D.xml:86
+msgid ""
+"Returns a transform interpolated between this transform and another by a "
+"given [code]weight[/code] (on the range of 0.0 to 1.0)."
+msgstr ""
+
+#: doc/classes/Transform2D.xml:92
+msgid ""
+"Returns the inverse of the transform, under the assumption that the "
+"transformation is composed of rotation and translation (no scaling, use "
+"[method affine_inverse] for transforms with scaling)."
+msgstr ""
+
+#: doc/classes/Transform2D.xml:105
+msgid ""
+"Returns the transform with the basis orthogonal (90 degrees), and normalized "
+"axis vectors (scale of 1 or -1)."
+msgstr ""
+
+#: doc/classes/Transform2D.xml:112
+msgid ""
+"Rotates the transform by the given angle (in radians), using matrix "
+"multiplication."
+msgstr ""
+
+#: doc/classes/Transform2D.xml:119
+msgid ""
+"Scales the transform by the given scale factor, using matrix multiplication."
+msgstr ""
+
+#: doc/classes/Transform2D.xml:134
+msgid ""
+"Transforms the given [Vector2], [Rect2], or [PoolVector2Array] by this "
+"transform."
+msgstr ""
+
+#: doc/classes/Transform2D.xml:141
+msgid ""
+"Inverse-transforms the given [Vector2], [Rect2], or [PoolVector2Array] by "
+"this transform."
+msgstr ""
+
+#: doc/classes/Transform2D.xml:147
+msgid ""
+"The origin vector (column 2, the third column). Equivalent to array index "
+"[code]2[/code]. The origin vector represents translation."
+msgstr ""
+
+#: doc/classes/Transform2D.xml:158
+msgid ""
+"The identity [Transform2D] with no translation, rotation or scaling applied. "
+"When applied to other data structures, [constant IDENTITY] performs no "
+"transformation."
+msgstr ""
+
+#: doc/classes/Transform2D.xml:161
+msgid "The [Transform2D] that will flip something along the X axis."
+msgstr ""
+
+#: doc/classes/Transform2D.xml:164
+msgid "The [Transform2D] that will flip something along the Y axis."
+msgstr ""
+
+#: doc/classes/Translation.xml:4
+msgid "Language Translation."
+msgstr ""
+
+#: doc/classes/Translation.xml:7
+msgid ""
+"Translations are resources that can be loaded and unloaded on demand. They "
+"map a string to another string."
+msgstr ""
+
+#: doc/classes/Translation.xml:10 doc/classes/TranslationServer.xml:10
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/i18n/internationalizing_games."
+"html"
+msgstr ""
+
+#: doc/classes/Translation.xml:11 doc/classes/TranslationServer.xml:11
+msgid "https://docs.godotengine.org/en/3.4/tutorials/i18n/locales.html"
+msgstr ""
+
+#: doc/classes/Translation.xml:18
+msgid "Virtual method to override [method get_message]."
+msgstr ""
+
+#: doc/classes/Translation.xml:26
+msgid "Adds a message if nonexistent, followed by its translation."
+msgstr ""
+
+#: doc/classes/Translation.xml:33
+msgid "Erases a message."
+msgstr ""
+
+#: doc/classes/Translation.xml:40
+msgid "Returns a message's translation."
+msgstr ""
+
+#: doc/classes/Translation.xml:46
+msgid "Returns the number of existing messages."
+msgstr ""
+
+#: doc/classes/Translation.xml:52
+msgid "Returns all the messages (keys)."
+msgstr ""
+
+#: doc/classes/Translation.xml:58
+msgid "The locale of the translation."
+msgstr ""
+
+#: doc/classes/TranslationServer.xml:4
+msgid "Server that manages all translations."
+msgstr ""
+
+#: doc/classes/TranslationServer.xml:7
+msgid ""
+"Server that manages all translations. Translations can be set to it and "
+"removed from it."
+msgstr ""
+
+#: doc/classes/TranslationServer.xml:18
+msgid "Adds a [Translation] resource."
+msgstr ""
+
+#: doc/classes/TranslationServer.xml:24
+msgid "Clears the server from all translations."
+msgstr ""
+
+#: doc/classes/TranslationServer.xml:30
+msgid "Returns an array of all loaded locales of the project."
+msgstr ""
+
+#: doc/classes/TranslationServer.xml:36
+msgid ""
+"Returns the current locale of the project.\n"
+"See also [method OS.get_locale] and [method OS.get_locale_language] to query "
+"the locale of the user system."
+msgstr ""
+
+#: doc/classes/TranslationServer.xml:44
+msgid ""
+"Returns a locale's language and its variant (e.g. [code]\"en_US\"[/code] "
+"would return [code]\"English (United States)\"[/code])."
+msgstr ""
+
+#: doc/classes/TranslationServer.xml:51
+msgid "Removes the given translation from the server."
+msgstr ""
+
+#: doc/classes/TranslationServer.xml:58
+msgid ""
+"Sets the locale of the project. The [code]locale[/code] string will be "
+"standardized to match known locales (e.g. [code]en-US[/code] would be "
+"matched to [code]en_US[/code]).\n"
+"If translations have been loaded beforehand for the new locale, they will be "
+"applied."
+msgstr ""
+
+#: doc/classes/TranslationServer.xml:66
+msgid "Returns the current locale's translation for the given message (key)."
+msgstr ""
+
+#: doc/classes/Tree.xml:4
+msgid "Control to show a tree of items."
+msgstr ""
+
+#: doc/classes/Tree.xml:7
+msgid ""
+"This shows a tree of items that can be selected, expanded and collapsed. The "
+"tree can have multiple columns with custom controls like text editing, "
+"buttons and popups. It can be useful for structured displays and "
+"interactions.\n"
+"Trees are built via code, using [TreeItem] objects to create the structure. "
+"They have a single root but multiple roots can be simulated if a dummy "
+"hidden root is added.\n"
+"[codeblock]\n"
+"func _ready():\n"
+" var tree = Tree.new()\n"
+" var root = tree.create_item()\n"
+" tree.set_hide_root(true)\n"
+" var child1 = tree.create_item(root)\n"
+" var child2 = tree.create_item(root)\n"
+" var subchild1 = tree.create_item(child1)\n"
+" subchild1.set_text(0, \"Subchild1\")\n"
+"[/codeblock]\n"
+"To iterate over all the [TreeItem] objects in a [Tree] object, use [method "
+"TreeItem.get_next] and [method TreeItem.get_children] after getting the root "
+"through [method get_root]. You can use [method Object.free] on a [TreeItem] "
+"to remove it from the [Tree]."
+msgstr ""
+
+#: doc/classes/Tree.xml:27
+msgid "Returns [code]true[/code] if the column titles are being shown."
+msgstr ""
+
+#: doc/classes/Tree.xml:33
+msgid "Clears the tree. This removes all items."
+msgstr ""
+
+#: doc/classes/Tree.xml:41
+msgid ""
+"Creates an item in the tree and adds it as a child of [code]parent[/code].\n"
+"If [code]parent[/code] is [code]null[/code], the root item will be the "
+"parent, or the new item will be the root itself if the tree is empty.\n"
+"The new item will be the [code]idx[/code]th child of parent, or it will be "
+"the last child if there are not enough siblings."
+msgstr ""
+
+#: doc/classes/Tree.xml:49
+msgid ""
+"Edits the selected tree item as if it was clicked. The item must be set "
+"editable with [method TreeItem.set_editable]. Returns [code]true[/code] if "
+"the item could be edited. Fails if no item is selected."
+msgstr ""
+
+#: doc/classes/Tree.xml:55
+msgid ""
+"Makes the currently focused cell visible.\n"
+"This will scroll the tree if necessary. In [constant SELECT_ROW] mode, this "
+"will not do horizontal scrolling, as all the cells in the selected row is "
+"focused logically.\n"
+"[b]Note:[/b] Despite the name of this method, the focus cursor itself is "
+"only visible in [constant SELECT_MULTI] mode."
+msgstr ""
+
+#: doc/classes/Tree.xml:64
+msgid ""
+"Returns the column index at [code]position[/code], or -1 if no item is there."
+msgstr ""
+
+#: doc/classes/Tree.xml:71
+msgid "Returns the column's title."
+msgstr ""
+
+#: doc/classes/Tree.xml:78
+msgid "Returns the column's width in pixels."
+msgstr ""
+
+#: doc/classes/Tree.xml:84
+msgid ""
+"Returns the rectangle for custom popups. Helper to create custom cell "
+"controls that display a popup. See [method TreeItem.set_cell_mode]."
+msgstr ""
+
+#: doc/classes/Tree.xml:91
+msgid ""
+"Returns the drop section at [code]position[/code], or -100 if no item is "
+"there.\n"
+"Values -1, 0, or 1 will be returned for the \"above item\", \"on item\", and "
+"\"below item\" drop sections, respectively. See [enum DropModeFlags] for a "
+"description of each drop section.\n"
+"To get the item which the returned drop section is relative to, use [method "
+"get_item_at_position]."
+msgstr ""
+
+#: doc/classes/Tree.xml:99
+msgid ""
+"Returns the currently edited item. Can be used with [signal item_edited] to "
+"get the item that was modified.\n"
+"[codeblock]\n"
+"func _ready():\n"
+" $Tree.item_edited.connect(on_Tree_item_edited)\n"
+"\n"
+"func on_Tree_item_edited():\n"
+" print($Tree.get_edited()) # This item just got edited (e.g. checked).\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Tree.xml:112
+msgid "Returns the column for the currently edited item."
+msgstr ""
+
+#: doc/classes/Tree.xml:120
+msgid ""
+"Returns the rectangle area for the specified item. If [code]column[/code] is "
+"specified, only get the position and size of that column, otherwise get the "
+"rectangle containing all columns."
+msgstr ""
+
+#: doc/classes/Tree.xml:127
+msgid ""
+"Returns the tree item at the specified position (relative to the tree origin "
+"position)."
+msgstr ""
+
+#: doc/classes/Tree.xml:134
+msgid ""
+"Returns the next selected item after the given one, or [code]null[/code] if "
+"the end is reached.\n"
+"If [code]from[/code] is [code]null[/code], this returns the first selected "
+"item."
+msgstr ""
+
+#: doc/classes/Tree.xml:141
+msgid "Returns the last pressed button's index."
+msgstr ""
+
+#: doc/classes/Tree.xml:147
+msgid ""
+"Returns the tree's root item, or [code]null[/code] if the tree is empty."
+msgstr ""
+
+#: doc/classes/Tree.xml:153
+msgid "Returns the current scrolling position."
+msgstr ""
+
+#: doc/classes/Tree.xml:159
+msgid ""
+"Returns the currently focused item, or [code]null[/code] if no item is "
+"focused.\n"
+"In [constant SELECT_ROW] and [constant SELECT_SINGLE] modes, the focused "
+"item is same as the selected item. In [constant SELECT_MULTI] mode, the "
+"focused item is the item under the focus cursor, not necessarily selected.\n"
+"To get the currently selected item(s), use [method get_next_selected]."
+msgstr ""
+
+#: doc/classes/Tree.xml:167
+msgid ""
+"Returns the currently focused column, or -1 if no column is focused.\n"
+"In [constant SELECT_SINGLE] mode, the focused column is the selected column. "
+"In [constant SELECT_ROW] mode, the focused column is always 0 if any item is "
+"selected. In [constant SELECT_MULTI] mode, the focused column is the column "
+"under the focus cursor, and there are not necessarily any column selected.\n"
+"To tell whether a column of an item is selected, use [method TreeItem."
+"is_selected]."
+msgstr ""
+
+#: doc/classes/Tree.xml:176
+msgid "Causes the [Tree] to jump to the specified item."
+msgstr ""
+
+#: doc/classes/Tree.xml:184
+msgid ""
+"If [code]true[/code], the column will have the \"Expand\" flag of [Control]. "
+"Columns that have the \"Expand\" flag will use their \"min_width\" in a "
+"similar fashion to [member Control.size_flags_stretch_ratio]."
+msgstr ""
+
+#: doc/classes/Tree.xml:192
+msgid ""
+"Sets the minimum width of a column. Columns that have the \"Expand\" flag "
+"will use their \"min_width\" in a similar fashion to [member Control."
+"size_flags_stretch_ratio]."
+msgstr ""
+
+#: doc/classes/Tree.xml:200
+msgid "Sets the title of a column."
+msgstr ""
+
+#: doc/classes/Tree.xml:207
+msgid "If [code]true[/code], column titles are visible."
+msgstr ""
+
+#: doc/classes/Tree.xml:213
+msgid ""
+"If [code]true[/code], the currently selected cell may be selected again."
+msgstr ""
+
+#: doc/classes/Tree.xml:216
+msgid "If [code]true[/code], a right mouse button click can select items."
+msgstr ""
+
+#: doc/classes/Tree.xml:219
+msgid "The number of columns."
+msgstr ""
+
+#: doc/classes/Tree.xml:222
+msgid ""
+"The drop mode as an OR combination of flags. See [enum DropModeFlags] "
+"constants. Once dropping is done, reverts to [constant DROP_MODE_DISABLED]. "
+"Setting this during [method Control.can_drop_data] is recommended.\n"
+"This controls the drop sections, i.e. the decision and drawing of possible "
+"drop locations based on the mouse position."
+msgstr ""
+
+#: doc/classes/Tree.xml:227
+msgid "If [code]true[/code], the folding arrow is hidden."
+msgstr ""
+
+#: doc/classes/Tree.xml:230
+msgid "If [code]true[/code], the tree's root is hidden."
+msgstr ""
+
+#: doc/classes/Tree.xml:234
+msgid ""
+"Allows single or multiple selection. See the [enum SelectMode] constants."
+msgstr ""
+
+#: doc/classes/Tree.xml:243
+msgid ""
+"Emitted when a button on the tree was pressed (see [method TreeItem."
+"add_button])."
+msgstr ""
+
+#: doc/classes/Tree.xml:248
+msgid "Emitted when a cell is selected."
+msgstr ""
+
+#: doc/classes/Tree.xml:254
+msgid "Emitted when a column's title is pressed."
+msgstr ""
+
+#: doc/classes/Tree.xml:260
+msgid ""
+"Emitted when a cell with the [constant TreeItem.CELL_MODE_CUSTOM] is clicked "
+"to be edited."
+msgstr ""
+
+#: doc/classes/Tree.xml:266
+msgid ""
+"Emitted when the right mouse button is pressed in the empty space of the "
+"tree."
+msgstr ""
+
+#: doc/classes/Tree.xml:272
+msgid ""
+"Emitted when the right mouse button is pressed if right mouse button "
+"selection is active and the tree is empty."
+msgstr ""
+
+#: doc/classes/Tree.xml:277
+msgid "Emitted when an item's label is double-clicked."
+msgstr ""
+
+#: doc/classes/Tree.xml:283
+msgid "Emitted when an item is collapsed by a click on the folding arrow."
+msgstr ""
+
+#: doc/classes/Tree.xml:288
+msgid ""
+"Emitted when a custom button is pressed (i.e. in a [constant TreeItem."
+"CELL_MODE_CUSTOM] mode cell)."
+msgstr ""
+
+#: doc/classes/Tree.xml:293
+msgid "Emitted when an item's icon is double-clicked."
+msgstr ""
+
+#: doc/classes/Tree.xml:298
+msgid "Emitted when an item is edited."
+msgstr ""
+
+#: doc/classes/Tree.xml:303
+msgid "Emitted when an item is edited using the right mouse button."
+msgstr ""
+
+#: doc/classes/Tree.xml:309
+msgid "Emitted when an item is selected with the right mouse button."
+msgstr ""
+
+#: doc/classes/Tree.xml:314
+msgid "Emitted when an item is selected."
+msgstr ""
+
+#: doc/classes/Tree.xml:322
+msgid ""
+"Emitted instead of [code]item_selected[/code] if [code]select_mode[/code] is "
+"[constant SELECT_MULTI]."
+msgstr ""
+
+#: doc/classes/Tree.xml:327
+msgid "Emitted when a left mouse button click does not select any item."
+msgstr ""
+
+#: doc/classes/Tree.xml:333
+msgid ""
+"Allows selection of a single cell at a time. From the perspective of items, "
+"only a single item is allowed to be selected. And there is only one column "
+"selected in the selected item.\n"
+"The focus cursor is always hidden in this mode, but it is positioned at the "
+"current selection, making the currently selected item the currently focused "
+"item."
+msgstr ""
+
+#: doc/classes/Tree.xml:337
+msgid ""
+"Allows selection of a single row at a time. From the perspective of items, "
+"only a single items is allowed to be selected. And all the columns are "
+"selected in the selected item.\n"
+"The focus cursor is always hidden in this mode, but it is positioned at the "
+"first column of the current selection, making the currently selected item "
+"the currently focused item."
+msgstr ""
+
+#: doc/classes/Tree.xml:341
+msgid ""
+"Allows selection of multiple cells at the same time. From the perspective of "
+"items, multiple items are allowed to be selected. And there can be multiple "
+"columns selected in each selected item.\n"
+"The focus cursor is visible in this mode, the item or column under the "
+"cursor is not necessarily selected."
+msgstr ""
+
+#: doc/classes/Tree.xml:345
+msgid ""
+"Disables all drop sections, but still allows to detect the \"on item\" drop "
+"section by [method get_drop_section_at_position].\n"
+"[b]Note:[/b] This is the default flag, it has no effect when combined with "
+"other flags."
+msgstr ""
+
+#: doc/classes/Tree.xml:349
+msgid ""
+"Enables the \"on item\" drop section. This drop section covers the entire "
+"item.\n"
+"When combined with [constant DROP_MODE_INBETWEEN], this drop section halves "
+"the height and stays centered vertically."
+msgstr ""
+
+#: doc/classes/Tree.xml:353
+msgid ""
+"Enables \"above item\" and \"below item\" drop sections. The \"above item\" "
+"drop section covers the top half of the item, and the \"below item\" drop "
+"section covers the bottom half.\n"
+"When combined with [constant DROP_MODE_ON_ITEM], these drop sections halves "
+"the height and stays on top / bottom accordingly."
+msgstr ""
+
+#: doc/classes/Tree.xml:359
+msgid "The arrow icon used when a foldable item is not collapsed."
+msgstr ""
+
+#: doc/classes/Tree.xml:362
+msgid "The arrow icon used when a foldable item is collapsed."
+msgstr ""
+
+#: doc/classes/Tree.xml:365
+msgid ""
+"Default [StyleBox] for the [Tree], i.e. used when the control is not being "
+"focused."
+msgstr ""
+
+#: doc/classes/Tree.xml:368
+msgid "[StyleBox] used when the [Tree] is being focused."
+msgstr ""
+
+#: doc/classes/Tree.xml:371
+msgid "The horizontal space between each button in a cell."
+msgstr ""
+
+#: doc/classes/Tree.xml:374
+msgid "[StyleBox] used when a button in the tree is pressed."
+msgstr ""
+
+#: doc/classes/Tree.xml:377
+msgid ""
+"The check icon to display when the [constant TreeItem.CELL_MODE_CHECK] mode "
+"cell is checked."
+msgstr ""
+
+#: doc/classes/Tree.xml:380
+msgid "[StyleBox] used for the cursor, when the [Tree] is being focused."
+msgstr ""
+
+#: doc/classes/Tree.xml:383
+msgid "[StyleBox] used for the cursor, when the [Tree] is not being focused."
+msgstr ""
+
+#: doc/classes/Tree.xml:386
+msgid ""
+"Default [StyleBox] for a [constant TreeItem.CELL_MODE_CUSTOM] mode cell."
+msgstr ""
+
+#: doc/classes/Tree.xml:389
+msgid ""
+"Text [Color] for a [constant TreeItem.CELL_MODE_CUSTOM] mode cell when it's "
+"hovered."
+msgstr ""
+
+#: doc/classes/Tree.xml:392
+msgid ""
+"[StyleBox] for a [constant TreeItem.CELL_MODE_CUSTOM] mode cell when it's "
+"hovered."
+msgstr ""
+
+#: doc/classes/Tree.xml:395
+msgid ""
+"[StyleBox] for a [constant TreeItem.CELL_MODE_CUSTOM] mode cell when it's "
+"pressed."
+msgstr ""
+
+#: doc/classes/Tree.xml:398
+msgid ""
+"Draws the guidelines if not zero, this acts as a boolean. The guideline is a "
+"horizontal line drawn at the bottom of each item."
+msgstr ""
+
+#: doc/classes/Tree.xml:401
+msgid ""
+"Draws the relationship lines if not zero, this acts as a boolean. "
+"Relationship lines are drawn at the start of child items to show hierarchy."
+msgstr ""
+
+#: doc/classes/Tree.xml:404
+msgid ""
+"[Color] used to draw possible drop locations. See [enum DropModeFlags] "
+"constants for further description of drop locations."
+msgstr ""
+
+#: doc/classes/Tree.xml:416
+msgid "[Color] of the guideline."
+msgstr ""
+
+#: doc/classes/Tree.xml:419
+msgid ""
+"The horizontal space between item cells. This is also used as the margin at "
+"the start of an item when folding is disabled."
+msgstr ""
+
+#: doc/classes/Tree.xml:422
+msgid ""
+"The horizontal margin at the start of an item. This is used when folding is "
+"enabled for the item."
+msgstr ""
+
+#: doc/classes/Tree.xml:425
+msgid "[Color] of the relationship lines."
+msgstr ""
+
+#: doc/classes/Tree.xml:428
+msgid ""
+"The maximum distance between the mouse cursor and the control's border to "
+"trigger border scrolling when dragging."
+msgstr ""
+
+#: doc/classes/Tree.xml:431
+msgid "The speed of border scrolling."
+msgstr ""
+
+#: doc/classes/Tree.xml:434
+msgid ""
+"The arrow icon to display for the [constant TreeItem.CELL_MODE_RANGE] mode "
+"cell."
+msgstr ""
+
+#: doc/classes/Tree.xml:437
+msgid ""
+"[StyleBox] for the selected items, used when the [Tree] is not being focused."
+msgstr ""
+
+#: doc/classes/Tree.xml:440
+msgid ""
+"[StyleBox] for the selected items, used when the [Tree] is being focused."
+msgstr ""
+
+#: doc/classes/Tree.xml:443
+msgid "Default text [Color] of the title button."
+msgstr ""
+
+#: doc/classes/Tree.xml:446
+msgid "[Font] of the title button's text."
+msgstr ""
+
+#: doc/classes/Tree.xml:449
+msgid "[StyleBox] used when the title button is being hovered."
+msgstr ""
+
+#: doc/classes/Tree.xml:452
+msgid "Default [StyleBox] for the title button."
+msgstr ""
+
+#: doc/classes/Tree.xml:455
+msgid "[StyleBox] used when the title button is being pressed."
+msgstr ""
+
+#: doc/classes/Tree.xml:458
+msgid ""
+"The check icon to display when the [constant TreeItem.CELL_MODE_CHECK] mode "
+"cell is unchecked."
+msgstr ""
+
+#: doc/classes/Tree.xml:461
+msgid ""
+"The updown arrow icon to display for the [constant TreeItem.CELL_MODE_RANGE] "
+"mode cell."
+msgstr ""
+
+#: doc/classes/Tree.xml:464
+msgid ""
+"The vertical padding inside each item, i.e. the distance between the item's "
+"content and top/bottom border."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:4
+msgid "Control for a single item inside a [Tree]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:7
+msgid ""
+"Control for a single item inside a [Tree]. May have child [TreeItem]s and be "
+"styled as well as contain buttons.\n"
+"You can remove a [TreeItem] by using [method Object.free]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:21
+msgid ""
+"Adds a button with [Texture] [code]button[/code] at column [code]column[/"
+"code]. The [code]button_idx[/code] index is used to identify the button when "
+"calling other methods. If not specified, the next available index is used, "
+"which may be retrieved by calling [method get_button_count] immediately "
+"after this method. Optionally, the button can be [code]disabled[/code] and "
+"have a [code]tooltip[/code]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:28
+msgid ""
+"Calls the [code]method[/code] on the actual TreeItem and its children "
+"recursively. Pass parameters as a comma separated list."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:35
+msgid "Resets the background color for the given column to default."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:42
+msgid "Resets the color for the given column to default."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:49
+msgid "Deselects the given column."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:57
+msgid ""
+"Removes the button at index [code]button_idx[/code] in column [code]column[/"
+"code]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:65
+msgid ""
+"Returns the [Texture] of the button at index [code]button_idx[/code] in "
+"column [code]column[/code]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:72
+msgid ""
+"Returns the number of buttons in column [code]column[/code]. May be used to "
+"get the most recently added button's index, if no index was specified."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:80
+msgid ""
+"Returns the tooltip string for the button at index [code]button_idx[/code] "
+"in column [code]column[/code]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:87
+msgid "Returns the column's cell mode."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:93
+msgid ""
+"Returns the TreeItem's first child item or a null object if there is none."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:100
+msgid "Returns the custom background color of column [code]column[/code]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:107
+msgid "Returns the custom color of column [code]column[/code]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:114
+msgid "Returns [code]true[/code] if [code]expand_right[/code] is set."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:121
+msgid "Returns the given column's icon [Texture]. Error if no icon is set."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:128
+msgid "Returns the column's icon's maximum width."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:135
+msgid "Returns the [Color] modulating the column's icon."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:142
+msgid "Returns the icon [Texture] region as [Rect2]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:149
+msgid ""
+"Returns the metadata value that was set for the given column using [method "
+"set_metadata]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:155
+msgid ""
+"Returns the next TreeItem in the tree or a null object if there is none."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:162
+msgid ""
+"Returns the next visible TreeItem in the tree or a null object if there is "
+"none.\n"
+"If [code]wrap[/code] is enabled, the method will wrap around to the first "
+"visible element in the tree when called on the last visible element, "
+"otherwise it returns [code]null[/code]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:169
+msgid "Returns the parent TreeItem or a null object if there is none."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:175
+msgid ""
+"Returns the previous TreeItem in the tree or a null object if there is none."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:182
+msgid ""
+"Returns the previous visible TreeItem in the tree or a null object if there "
+"is none.\n"
+"If [code]wrap[/code] is enabled, the method will wrap around to the last "
+"visible element in the tree when called on the first visible element, "
+"otherwise it returns [code]null[/code]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:190
+msgid "Returns the value of a [constant CELL_MODE_RANGE] column."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:197
+msgid ""
+"Returns a dictionary containing the range parameters for a given column. The "
+"keys are \"min\", \"max\", \"step\", and \"expr\"."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:204
+msgid "Gets the suffix string shown after the column value."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:211
+msgid "Returns the given column's text."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:218
+msgid "Returns the given column's text alignment."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:225
+msgid "Returns the given column's tooltip."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:233
+msgid ""
+"Returns [code]true[/code] if the button at index [code]button_idx[/code] for "
+"the given column is disabled."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:240
+msgid "Returns [code]true[/code] if the given column is checked."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:253
+msgid "Returns [code]true[/code] if column [code]column[/code] is editable."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:260
+msgid "Returns [code]true[/code] if column [code]column[/code] is selectable."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:267
+msgid "Returns [code]true[/code] if column [code]column[/code] is selected."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:273
+msgid "Moves this TreeItem to the bottom in the [Tree] hierarchy."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:279
+msgid "Moves this TreeItem to the top in the [Tree] hierarchy."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:286
+msgid ""
+"Removes the given child [TreeItem] and all its children from the [Tree]. "
+"Note that it doesn't free the item from memory, so it can be reused later. "
+"To completely remove a [TreeItem] use [method Object.free]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:293
+msgid "Selects the column [code]column[/code]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:302
+msgid ""
+"Sets the given column's button [Texture] at index [code]button_idx[/code] to "
+"[code]button[/code]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:311
+msgid ""
+"If [code]true[/code], disables the button at index [code]button_idx[/code] "
+"in column [code]column[/code]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:319
+msgid ""
+"Sets the given column's cell mode to [code]mode[/code]. See [enum "
+"TreeCellMode] constants."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:327
+msgid "If [code]true[/code], the column [code]column[/code] is checked."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:343
+msgid ""
+"Sets the given column's custom background color and whether to just use it "
+"as an outline."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:351
+msgid "Sets the given column's custom color."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:360
+msgid ""
+"Sets the given column's custom draw callback to [code]callback[/code] method "
+"on [code]object[/code].\n"
+"The [code]callback[/code] should accept two arguments: the [TreeItem] that "
+"is drawn and its position and size as a [Rect2]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:369
+msgid "If [code]true[/code], column [code]column[/code] is editable."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:377
+msgid ""
+"If [code]true[/code], column [code]column[/code] is expanded to the right."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:385
+msgid "Sets the given column's icon [Texture]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:393
+msgid "Sets the given column's icon's maximum width."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:401
+msgid "Modulates the given column's icon with [code]modulate[/code]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:409
+msgid "Sets the given column's icon's texture region."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:417
+msgid ""
+"Sets the metadata value for the given column, which can be retrieved later "
+"using [method get_metadata]. This can be used, for example, to store a "
+"reference to the original data."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:425
+msgid "Sets the value of a [constant CELL_MODE_RANGE] column."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:436
+msgid ""
+"Sets the range of accepted values for a column. The column must be in the "
+"[constant CELL_MODE_RANGE] mode.\n"
+"If [code]expr[/code] is [code]true[/code], the edit mode slider will use an "
+"exponential scale as with [member Range.exp_edit]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:445
+msgid "If [code]true[/code], the given column is selectable."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:453
+msgid ""
+"Sets a string to be shown after a column's value (for example, a unit "
+"abbreviation)."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:461
+msgid "Sets the given column's text value."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:469
+msgid ""
+"Sets the given column's text alignment. See [enum TextAlign] for possible "
+"values."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:477
+msgid "Sets the given column's tooltip text."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:483
+msgid "If [code]true[/code], the TreeItem is collapsed."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:486
+msgid "The custom minimum height."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:489
+msgid "If [code]true[/code], folding is disabled for this TreeItem."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:494
+msgid "Cell contains a string."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:497
+msgid "Cell contains a checkbox."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:500
+msgid "Cell contains a range."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:503
+msgid "Cell contains an icon."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:508
+msgid "Align text to the left. See [code]set_text_align()[/code]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:511
+msgid "Center text. See [code]set_text_align()[/code]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:514
+msgid "Align text to the right. See [code]set_text_align()[/code]."
+msgstr ""
+
+#: doc/classes/TriangleMesh.xml:4
+msgid "Internal mesh type."
+msgstr ""
+
+#: doc/classes/TriangleMesh.xml:7
+msgid "Mesh type used internally for collision calculations."
+msgstr ""
+
+#: doc/classes/Tween.xml:4
+msgid "Smoothly animates a node's properties over time."
+msgstr ""
+
+#: doc/classes/Tween.xml:7
+msgid ""
+"Tweens are useful for animations requiring a numerical property to be "
+"interpolated over a range of values. The name [i]tween[/i] comes from [i]in-"
+"betweening[/i], an animation technique where you specify [i]keyframes[/i] "
+"and the computer interpolates the frames that appear between them.\n"
+"[Tween] is more suited than [AnimationPlayer] for animations where you don't "
+"know the final values in advance. For example, interpolating a dynamically-"
+"chosen camera zoom value is best done with a [Tween] node; it would be "
+"difficult to do the same thing with an [AnimationPlayer] node.\n"
+"Here is a brief usage example that makes a 2D node move smoothly between two "
+"positions:\n"
+"[codeblock]\n"
+"var tween = get_node(\"Tween\")\n"
+"tween.interpolate_property($Node2D, \"position\",\n"
+" Vector2(0, 0), Vector2(100, 100), 1,\n"
+" Tween.TRANS_LINEAR, Tween.EASE_IN_OUT)\n"
+"tween.start()\n"
+"[/codeblock]\n"
+"Many methods require a property name, such as [code]\"position\"[/code] "
+"above. You can find the correct property name by hovering over the property "
+"in the Inspector. You can also provide the components of a property directly "
+"by using [code]\"property:component\"[/code] (e.g. [code]position:x[/code]), "
+"where it would only apply to that particular component.\n"
+"Many of the methods accept [code]trans_type[/code] and [code]ease_type[/"
+"code]. The first accepts an [enum TransitionType] constant, and refers to "
+"the way the timing of the animation is handled (see [url=https://easings."
+"net/]easings.net[/url] for some examples). The second accepts an [enum "
+"EaseType] constant, and controls where the [code]trans_type[/code] is "
+"applied to the interpolation (in the beginning, the end, or both). If you "
+"don't know which transition and easing to pick, you can try different [enum "
+"TransitionType] constants with [constant EASE_IN_OUT], and use the one that "
+"looks best.\n"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/master/img/"
+"tween_cheatsheet.png]Tween easing and transition types cheatsheet[/url]"
+msgstr ""
+
+#: doc/classes/Tween.xml:36
+msgid ""
+"Follows [code]method[/code] of [code]object[/code] and applies the returned "
+"value on [code]target_method[/code] of [code]target[/code], beginning from "
+"[code]initial_val[/code] for [code]duration[/code] seconds, [code]delay[/"
+"code] later. Methods are called with consecutive values.\n"
+"Use [enum TransitionType] for [code]trans_type[/code] and [enum EaseType] "
+"for [code]ease_type[/code] parameters. These values control the timing and "
+"direction of the interpolation. See the class description for more "
+"information."
+msgstr ""
+
+#: doc/classes/Tween.xml:52
+msgid ""
+"Follows [code]property[/code] of [code]object[/code] and applies it on "
+"[code]target_property[/code] of [code]target[/code], beginning from "
+"[code]initial_val[/code] for [code]duration[/code] seconds, [code]delay[/"
+"code] seconds later.\n"
+"Use [enum TransitionType] for [code]trans_type[/code] and [enum EaseType] "
+"for [code]ease_type[/code] parameters. These values control the timing and "
+"direction of the interpolation. See the class description for more "
+"information."
+msgstr ""
+
+#: doc/classes/Tween.xml:59
+msgid ""
+"Returns the total time needed for all tweens to end. If you have two tweens, "
+"one lasting 10 seconds and the other 20 seconds, it would return 20 seconds, "
+"as by that time all tweens would have finished."
+msgstr ""
+
+#: doc/classes/Tween.xml:73
+msgid ""
+"Calls [code]callback[/code] of [code]object[/code] after [code]duration[/"
+"code]. [code]arg1[/code]-[code]arg5[/code] are arguments to be passed to the "
+"callback."
+msgstr ""
+
+#: doc/classes/Tween.xml:87
+msgid ""
+"Calls [code]callback[/code] of [code]object[/code] after [code]duration[/"
+"code] on the main thread (similar to [method Object.call_deferred]). "
+"[code]arg1[/code]-[code]arg5[/code] are arguments to be passed to the "
+"callback."
+msgstr ""
+
+#: doc/classes/Tween.xml:101
+msgid ""
+"Animates [code]method[/code] of [code]object[/code] from [code]initial_val[/"
+"code] to [code]final_val[/code] for [code]duration[/code] seconds, "
+"[code]delay[/code] seconds later. Methods are called with consecutive "
+"values.\n"
+"Use [enum TransitionType] for [code]trans_type[/code] and [enum EaseType] "
+"for [code]ease_type[/code] parameters. These values control the timing and "
+"direction of the interpolation. See the class description for more "
+"information."
+msgstr ""
+
+#: doc/classes/Tween.xml:116
+msgid ""
+"Animates [code]property[/code] of [code]object[/code] from "
+"[code]initial_val[/code] to [code]final_val[/code] for [code]duration[/code] "
+"seconds, [code]delay[/code] seconds later. Setting the initial value to "
+"[code]null[/code] uses the current value of the property.\n"
+"Use [enum TransitionType] for [code]trans_type[/code] and [enum EaseType] "
+"for [code]ease_type[/code] parameters. These values control the timing and "
+"direction of the interpolation. See the class description for more "
+"information."
+msgstr ""
+
+#: doc/classes/Tween.xml:123
+msgid ""
+"Returns [code]true[/code] if any tweens are currently running.\n"
+"[b]Note:[/b] This method doesn't consider tweens that have ended."
+msgstr ""
+
+#: doc/classes/Tween.xml:132
+msgid ""
+"Stops animation and removes a tween, given its object and property/method "
+"pair. By default, all tweens are removed, unless [code]key[/code] is "
+"specified."
+msgstr ""
+
+#: doc/classes/Tween.xml:138
+msgid "Stops animation and removes all tweens."
+msgstr ""
+
+#: doc/classes/Tween.xml:146
+msgid ""
+"Resets a tween to its initial value (the one given, not the one before the "
+"tween), given its object and property/method pair. By default, all tweens "
+"are removed, unless [code]key[/code] is specified."
+msgstr ""
+
+#: doc/classes/Tween.xml:152
+msgid ""
+"Resets all tweens to their initial values (the ones given, not those before "
+"the tween)."
+msgstr ""
+
+#: doc/classes/Tween.xml:160
+msgid ""
+"Continues animating a stopped tween, given its object and property/method "
+"pair. By default, all tweens are resumed, unless [code]key[/code] is "
+"specified."
+msgstr ""
+
+#: doc/classes/Tween.xml:166
+msgid "Continues animating all stopped tweens."
+msgstr ""
+
+#: doc/classes/Tween.xml:173
+msgid "Sets the interpolation to the given [code]time[/code] in seconds."
+msgstr ""
+
+#: doc/classes/Tween.xml:180
+msgid ""
+"Activates/deactivates the tween. See also [method stop_all] and [method "
+"resume_all]."
+msgstr ""
+
+#: doc/classes/Tween.xml:186
+msgid "Starts the tween. You can define animations both before and after this."
+msgstr ""
+
+#: doc/classes/Tween.xml:194
+msgid ""
+"Stops a tween, given its object and property/method pair. By default, all "
+"tweens are stopped, unless [code]key[/code] is specified."
+msgstr ""
+
+#: doc/classes/Tween.xml:200
+msgid "Stops animating all tweens."
+msgstr ""
+
+#: doc/classes/Tween.xml:215
+msgid ""
+"Animates [code]method[/code] of [code]object[/code] from the value returned "
+"by [code]initial_method[/code] to [code]final_val[/code] for [code]duration[/"
+"code] seconds, [code]delay[/code] seconds later. Methods are animated by "
+"calling them with consecutive values.\n"
+"Use [enum TransitionType] for [code]trans_type[/code] and [enum EaseType] "
+"for [code]ease_type[/code] parameters. These values control the timing and "
+"direction of the interpolation. See the class description for more "
+"information."
+msgstr ""
+
+#: doc/classes/Tween.xml:231
+msgid ""
+"Animates [code]property[/code] of [code]object[/code] from the current value "
+"of the [code]initial_val[/code] property of [code]initial[/code] to "
+"[code]final_val[/code] for [code]duration[/code] seconds, [code]delay[/code] "
+"seconds later.\n"
+"Use [enum TransitionType] for [code]trans_type[/code] and [enum EaseType] "
+"for [code]ease_type[/code] parameters. These values control the timing and "
+"direction of the interpolation. See the class description for more "
+"information."
+msgstr ""
+
+#: doc/classes/Tween.xml:238
+msgid "Returns the current time of the tween."
+msgstr ""
+
+#: doc/classes/Tween.xml:244
+msgid "The tween's animation process thread. See [enum TweenProcessMode]."
+msgstr ""
+
+#: doc/classes/Tween.xml:247
+msgid ""
+"The tween's speed multiplier. For example, set it to [code]1.0[/code] for "
+"normal speed, [code]2.0[/code] for two times normal speed, or [code]0.5[/"
+"code] for half of the normal speed. A value of [code]0[/code] pauses the "
+"animation, but see also [method set_active] or [method stop_all] for this."
+msgstr ""
+
+#: doc/classes/Tween.xml:250
+msgid "If [code]true[/code], the tween loops."
+msgstr ""
+
+#: doc/classes/Tween.xml:256
+msgid "Emitted when all processes in a tween end."
+msgstr ""
+
+#: doc/classes/Tween.xml:263
+msgid "Emitted when a tween ends."
+msgstr ""
+
+#: doc/classes/Tween.xml:270
+msgid "Emitted when a tween starts."
+msgstr ""
+
+#: doc/classes/Tween.xml:279
+msgid "Emitted at each step of the animation."
+msgstr ""
+
+#: doc/classes/Tween.xml:285
+msgid "The tween updates with the [code]_physics_process[/code] callback."
+msgstr ""
+
+#: doc/classes/Tween.xml:288
+msgid "The tween updates with the [code]_process[/code] callback."
+msgstr ""
+
+#: doc/classes/Tween.xml:291
+msgid "The animation is interpolated linearly."
+msgstr ""
+
+#: doc/classes/Tween.xml:294
+msgid "The animation is interpolated using a sine function."
+msgstr ""
+
+#: doc/classes/Tween.xml:297
+msgid ""
+"The animation is interpolated with a quintic (to the power of 5) function."
+msgstr ""
+
+#: doc/classes/Tween.xml:300
+msgid ""
+"The animation is interpolated with a quartic (to the power of 4) function."
+msgstr ""
+
+#: doc/classes/Tween.xml:303
+msgid ""
+"The animation is interpolated with a quadratic (to the power of 2) function."
+msgstr ""
+
+#: doc/classes/Tween.xml:306
+msgid ""
+"The animation is interpolated with an exponential (to the power of x) "
+"function."
+msgstr ""
+
+#: doc/classes/Tween.xml:309
+msgid ""
+"The animation is interpolated with elasticity, wiggling around the edges."
+msgstr ""
+
+#: doc/classes/Tween.xml:312
+msgid ""
+"The animation is interpolated with a cubic (to the power of 3) function."
+msgstr ""
+
+#: doc/classes/Tween.xml:315
+msgid "The animation is interpolated with a function using square roots."
+msgstr ""
+
+#: doc/classes/Tween.xml:318
+msgid "The animation is interpolated by bouncing at the end."
+msgstr ""
+
+#: doc/classes/Tween.xml:321
+msgid "The animation is interpolated backing out at ends."
+msgstr ""
+
+#: doc/classes/Tween.xml:324
+msgid "The interpolation starts slowly and speeds up towards the end."
+msgstr ""
+
+#: doc/classes/Tween.xml:327
+msgid "The interpolation starts quickly and slows down towards the end."
+msgstr ""
+
+#: doc/classes/Tween.xml:330
+msgid ""
+"A combination of [constant EASE_IN] and [constant EASE_OUT]. The "
+"interpolation is slowest at both ends."
+msgstr ""
+
+#: doc/classes/Tween.xml:333
+msgid ""
+"A combination of [constant EASE_IN] and [constant EASE_OUT]. The "
+"interpolation is fastest at both ends."
+msgstr ""
+
+#: doc/classes/UDPServer.xml:4
+msgid "Helper class to implement a UDP server."
+msgstr ""
+
+#: doc/classes/UDPServer.xml:7
+msgid ""
+"A simple server that opens a UDP socket and returns connected "
+"[PacketPeerUDP] upon receiving new packets. See also [method PacketPeerUDP."
+"connect_to_host].\n"
+"After starting the server ([method listen]), you will need to [method poll] "
+"it at regular intervals (e.g. inside [method Node._process]) for it to "
+"process new packets, delivering them to the appropriate [PacketPeerUDP], and "
+"taking new connections.\n"
+"Below a small example of how it can be used:\n"
+"[codeblock]\n"
+"# server.gd\n"
+"extends Node\n"
+"\n"
+"var server := UDPServer.new()\n"
+"var peers = []\n"
+"\n"
+"func _ready():\n"
+" server.listen(4242)\n"
+"\n"
+"func _process(delta):\n"
+" server.poll() # Important!\n"
+" if server.is_connection_available():\n"
+" var peer : PacketPeerUDP = server.take_connection()\n"
+" var pkt = peer.get_packet()\n"
+" print(\"Accepted peer: %s:%s\" % [peer.get_packet_ip(), peer."
+"get_packet_port()])\n"
+" print(\"Received data: %s\" % [pkt.get_string_from_utf8()])\n"
+" # Reply so it knows we received the message.\n"
+" peer.put_packet(pkt)\n"
+" # Keep a reference so we can keep contacting the remote peer.\n"
+" peers.append(peer)\n"
+"\n"
+" for i in range(0, peers.size()):\n"
+" pass # Do something with the connected peers.\n"
+"\n"
+"[/codeblock]\n"
+"[codeblock]\n"
+"# client.gd\n"
+"extends Node\n"
+"\n"
+"var udp := PacketPeerUDP.new()\n"
+"var connected = false\n"
+"\n"
+"func _ready():\n"
+" udp.connect_to_host(\"127.0.0.1\", 4242)\n"
+"\n"
+"func _process(delta):\n"
+" if !connected:\n"
+" # Try to contact server\n"
+" udp.put_packet(\"The answer is... 42!\".to_utf8())\n"
+" if udp.get_available_packet_count() > 0:\n"
+" print(\"Connected: %s\" % udp.get_packet().get_string_from_utf8())\n"
+" connected = true\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/UDPServer.xml:61
+msgid ""
+"Returns [code]true[/code] if a packet with a new address/port combination "
+"was received on the socket."
+msgstr ""
+
+#: doc/classes/UDPServer.xml:67
+msgid ""
+"Returns [code]true[/code] if the socket is open and listening on a port."
+msgstr ""
+
+#: doc/classes/UDPServer.xml:75
+msgid ""
+"Starts the server by opening a UDP socket listening on the given port. You "
+"can optionally specify a [code]bind_address[/code] to only listen for "
+"packets sent to that address. See also [method PacketPeerUDP.listen]."
+msgstr ""
+
+#: doc/classes/UDPServer.xml:81
+msgid ""
+"Call this method at regular intervals (e.g. inside [method Node._process]) "
+"to process new packets. And packet from known address/port pair will be "
+"delivered to the appropriate [PacketPeerUDP], any packet received from an "
+"unknown address/port pair will be added as a pending connection (see [method "
+"is_connection_available], [method take_connection]). The maximum number of "
+"pending connection is defined via [member max_pending_connections]."
+msgstr ""
+
+#: doc/classes/UDPServer.xml:87
+msgid ""
+"Stops the server, closing the UDP socket if open. Will close all connected "
+"[PacketPeerUDP] accepted via [method take_connection] (remote peers will not "
+"be notified)."
+msgstr ""
+
+#: doc/classes/UDPServer.xml:93
+msgid ""
+"Returns the first pending connection (connected to the appropriate address/"
+"port). Will return [code]null[/code] if no new connection is available. See "
+"also [method is_connection_available], [method PacketPeerUDP."
+"connect_to_host]."
+msgstr ""
+
+#: doc/classes/UDPServer.xml:99
+msgid ""
+"Define the maximum number of pending connections, during [method poll], any "
+"new pending connection exceeding that value will be automatically dropped. "
+"Setting this value to [code]0[/code] effectively prevents any new pending "
+"connection to be accepted (e.g. when all your players have connected)."
+msgstr ""
+
+#: doc/classes/UndoRedo.xml:4
+msgid "Helper to manage undo/redo operations in the editor or custom tools."
+msgstr ""
+
+#: doc/classes/UndoRedo.xml:7
+msgid ""
+"Helper to manage undo/redo operations in the editor or custom tools. It "
+"works by registering methods and property changes inside \"actions\".\n"
+"Common behavior is to create an action, then add do/undo calls to functions "
+"or property changes, then committing the action.\n"
+"Here's an example on how to add an action to the Godot editor's own "
+"[UndoRedo], from a plugin:\n"
+"[codeblock]\n"
+"var undo_redo = get_undo_redo() # Method of EditorPlugin.\n"
+"\n"
+"func do_something():\n"
+" pass # Put your code here.\n"
+"\n"
+"func undo_something():\n"
+" pass # Put here the code that reverts what's done by "
+"\"do_something()\".\n"
+"\n"
+"func _on_MyButton_pressed():\n"
+" var node = get_node(\"MyNode2D\")\n"
+" undo_redo.create_action(\"Move the node\")\n"
+" undo_redo.add_do_method(self, \"do_something\")\n"
+" undo_redo.add_undo_method(self, \"undo_something\")\n"
+" undo_redo.add_do_property(node, \"position\", Vector2(100,100))\n"
+" undo_redo.add_undo_property(node, \"position\", node.position)\n"
+" undo_redo.commit_action()\n"
+"[/codeblock]\n"
+"[method create_action], [method add_do_method], [method add_undo_method], "
+"[method add_do_property], [method add_undo_property], and [method "
+"commit_action] should be called one after the other, like in the example. "
+"Not doing so could lead to crashes.\n"
+"If you don't need to register a method, you can leave [method add_do_method] "
+"and [method add_undo_method] out; the same goes for properties. You can also "
+"register more than one method/property."
+msgstr ""
+
+#: doc/classes/UndoRedo.xml:39
+msgid "Register a method that will be called when the action is committed."
+msgstr ""
+
+#: doc/classes/UndoRedo.xml:48
+msgid "Register a property value change for \"do\"."
+msgstr ""
+
+#: doc/classes/UndoRedo.xml:55
+msgid ""
+"Register a reference for \"do\" that will be erased if the \"do\" history is "
+"lost. This is useful mostly for new nodes created for the \"do\" call. Do "
+"not use for resources."
+msgstr ""
+
+#: doc/classes/UndoRedo.xml:63
+msgid "Register a method that will be called when the action is undone."
+msgstr ""
+
+#: doc/classes/UndoRedo.xml:72
+msgid "Register a property value change for \"undo\"."
+msgstr ""
+
+#: doc/classes/UndoRedo.xml:79
+msgid ""
+"Register a reference for \"undo\" that will be erased if the \"undo\" "
+"history is lost. This is useful mostly for nodes removed with the \"do\" "
+"call (not the \"undo\" call!)."
+msgstr ""
+
+#: doc/classes/UndoRedo.xml:86
+msgid ""
+"Clear the undo/redo history and associated references.\n"
+"Passing [code]false[/code] to [code]increase_version[/code] will prevent the "
+"version number to be increased from this."
+msgstr ""
+
+#: doc/classes/UndoRedo.xml:93
+msgid ""
+"Commit the action. All \"do\" methods/properties are called/set when this "
+"function is called."
+msgstr ""
+
+#: doc/classes/UndoRedo.xml:101
+msgid ""
+"Create a new action. After this is called, do all your calls to [method "
+"add_do_method], [method add_undo_method], [method add_do_property], and "
+"[method add_undo_property], then commit the action with [method "
+"commit_action].\n"
+"The way actions are merged is dictated by the [code]merge_mode[/code] "
+"argument. See [enum MergeMode] for details."
+msgstr ""
+
+#: doc/classes/UndoRedo.xml:108
+msgid "Gets the name of the current action."
+msgstr ""
+
+#: doc/classes/UndoRedo.xml:114
+msgid ""
+"Gets the version. Every time a new action is committed, the [UndoRedo]'s "
+"version number is increased automatically.\n"
+"This is useful mostly to check if something changed from a saved version."
+msgstr ""
+
+#: doc/classes/UndoRedo.xml:133
+msgid ""
+"Returns [code]true[/code] if the [UndoRedo] is currently committing the "
+"action, i.e. running its \"do\" method or property change (see [method "
+"commit_action])."
+msgstr ""
+
+#: doc/classes/UndoRedo.xml:139
+msgid "Redo the last action."
+msgstr ""
+
+#: doc/classes/UndoRedo.xml:145
+msgid "Undo the last action."
+msgstr ""
+
+#: doc/classes/UndoRedo.xml:152
+msgid "Called when [method undo] or [method redo] was called."
+msgstr ""
+
+#: doc/classes/UndoRedo.xml:158
+msgid "Makes \"do\"/\"undo\" operations stay in separate actions."
+msgstr ""
+
+#: doc/classes/UndoRedo.xml:161
+msgid ""
+"Makes so that the action's \"do\" operation is from the first action created "
+"and the \"undo\" operation is from the last subsequent action with the same "
+"name."
+msgstr ""
+
+#: doc/classes/UndoRedo.xml:164
+msgid "Makes subsequent actions with the same name be merged into one."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:4
+msgid "UPNP network functions."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:7
+msgid ""
+"Provides UPNP functionality to discover [UPNPDevice]s on the local network "
+"and execute commands on them, like managing port mappings (port forwarding) "
+"and querying the local and remote network IP address. Note that methods on "
+"this class are synchronous and block the calling thread.\n"
+"To forward a specific port:\n"
+"[codeblock]\n"
+"const PORT = 7777\n"
+"var upnp = UPNP.new()\n"
+"upnp.discover(2000, 2, \"InternetGatewayDevice\")\n"
+"upnp.add_port_mapping(port)\n"
+"[/codeblock]\n"
+"To close a specific port (e.g. after you have finished using it):\n"
+"[codeblock]\n"
+"upnp.delete_port_mapping(port)\n"
+"[/codeblock]\n"
+"[b]Note:[/b] UPnP discovery blocks the current thread. To perform discovery "
+"without blocking the main thread, use [Thread]s like this:\n"
+"[codeblock]\n"
+"# Emitted when UPnP port mapping setup is completed (regardless of success "
+"or failure).\n"
+"signal upnp_completed(error)\n"
+"\n"
+"# Replace this with your own server port number between 1025 and 65535.\n"
+"const SERVER_PORT = 3928\n"
+"var thread = null\n"
+"\n"
+"func _upnp_setup(server_port):\n"
+" # UPNP queries take some time.\n"
+" var upnp = UPNP.new()\n"
+" var err = upnp.discover()\n"
+"\n"
+" if err != OK:\n"
+" push_error(str(err))\n"
+" emit_signal(\"upnp_completed\", err)\n"
+" return\n"
+"\n"
+" if upnp.get_gateway() and upnp.get_gateway().is_valid_gateway():\n"
+" upnp.add_port_mapping(server_port, server_port, ProjectSettings."
+"get_setting(\"application/config/name\"), \"UDP\")\n"
+" upnp.add_port_mapping(server_port, server_port, ProjectSettings."
+"get_setting(\"application/config/name\"), \"TCP\")\n"
+" emit_signal(\"upnp_completed\", OK)\n"
+"\n"
+"func _ready():\n"
+" thread = Thread.new()\n"
+" thread.start(self, \"_upnp_setup\", SERVER_PORT)\n"
+"\n"
+"func _exit_tree():\n"
+" # Wait for thread finish here to handle game exit while the thread is "
+"running.\n"
+" thread.wait_to_finish()\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:59
+msgid "Adds the given [UPNPDevice] to the list of discovered devices."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:70
+msgid ""
+"Adds a mapping to forward the external [code]port[/code] (between 1 and "
+"65535) on the default gateway (see [method get_gateway]) to the "
+"[code]internal_port[/code] on the local machine for the given protocol "
+"[code]proto[/code] (either [code]TCP[/code] or [code]UDP[/code], with UDP "
+"being the default). If a port mapping for the given port and protocol "
+"combination already exists on that gateway device, this method tries to "
+"overwrite it. If that is not desired, you can retrieve the gateway manually "
+"with [method get_gateway] and call [method add_port_mapping] on it, if any.\n"
+"If [code]internal_port[/code] is [code]0[/code] (the default), the same port "
+"number is used for both the external and the internal port (the [code]port[/"
+"code] value).\n"
+"The description ([code]desc[/code]) is shown in some router UIs and can be "
+"used to point out which application added the mapping. The mapping's lease "
+"duration can be limited by specifying a [code]duration[/code] (in seconds). "
+"However, some routers are incompatible with one or both of these, so use "
+"with caution and add fallback logic in case of errors to retry without them "
+"if in doubt.\n"
+"See [enum UPNPResult] for possible return values."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:79
+msgid "Clears the list of discovered devices."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:87
+msgid ""
+"Deletes the port mapping for the given port and protocol combination on the "
+"default gateway (see [method get_gateway]) if one exists. [code]port[/code] "
+"must be a valid port between 1 and 65535, [code]proto[/code] can be either "
+"[code]TCP[/code] or [code]UDP[/code]. See [enum UPNPResult] for possible "
+"return values."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:96
+msgid ""
+"Discovers local [UPNPDevice]s. Clears the list of previously discovered "
+"devices.\n"
+"Filters for IGD (InternetGatewayDevice) type devices by default, as those "
+"manage port forwarding. [code]timeout[/code] is the time to wait for "
+"responses in milliseconds. [code]ttl[/code] is the time-to-live; only touch "
+"this if you know what you're doing.\n"
+"See [enum UPNPResult] for possible return values."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:105
+msgid "Returns the [UPNPDevice] at the given [code]index[/code]."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:111
+msgid "Returns the number of discovered [UPNPDevice]s."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:117
+msgid ""
+"Returns the default gateway. That is the first discovered [UPNPDevice] that "
+"is also a valid IGD (InternetGatewayDevice)."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:123
+msgid ""
+"Returns the external [IP] address of the default gateway (see [method "
+"get_gateway]) as string. Returns an empty string on error."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:130
+msgid ""
+"Removes the device at [code]index[/code] from the list of discovered devices."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:138
+msgid ""
+"Sets the device at [code]index[/code] from the list of discovered devices to "
+"[code]device[/code]."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:144
+msgid "If [code]true[/code], IPv6 is used for [UPNPDevice] discovery."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:147
+msgid ""
+"If [code]0[/code], the local port to use for discovery is chosen "
+"automatically by the system. If [code]1[/code], discovery will be done from "
+"the source port 1900 (same as destination port). Otherwise, the value will "
+"be used as the port."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:150
+msgid ""
+"Multicast interface to use for discovery. Uses the default multicast "
+"interface if empty."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:155
+msgid "UPNP command or discovery was successful."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:158
+msgid ""
+"Not authorized to use the command on the [UPNPDevice]. May be returned when "
+"the user disabled UPNP on their router."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:161
+msgid ""
+"No port mapping was found for the given port, protocol combination on the "
+"given [UPNPDevice]."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:164
+msgid "Inconsistent parameters."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:167
+msgid ""
+"No such entry in array. May be returned if a given port, protocol "
+"combination is not found on an [UPNPDevice]."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:170
+msgid "The action failed."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:173
+msgid ""
+"The [UPNPDevice] does not allow wildcard values for the source IP address."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:176
+msgid "The [UPNPDevice] does not allow wildcard values for the external port."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:179
+msgid "The [UPNPDevice] does not allow wildcard values for the internal port."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:182
+msgid "The remote host value must be a wildcard."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:185
+msgid "The external port value must be a wildcard."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:188
+msgid ""
+"No port maps are available. May also be returned if port mapping "
+"functionality is not available."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:191
+msgid ""
+"Conflict with other mechanism. May be returned instead of [constant "
+"UPNP_RESULT_CONFLICT_WITH_OTHER_MAPPING] if a port mapping conflicts with an "
+"existing one."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:194
+msgid "Conflict with an existing port mapping."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:197
+msgid "External and internal port values must be the same."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:200
+msgid ""
+"Only permanent leases are supported. Do not use the [code]duration[/code] "
+"parameter when adding port mappings."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:203
+msgid "Invalid gateway."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:206
+msgid "Invalid port."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:209
+msgid "Invalid protocol."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:212
+msgid "Invalid duration."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:215
+msgid "Invalid arguments."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:218
+msgid "Invalid response."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:221
+msgid "Invalid parameter."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:224
+#: modules/upnp/doc_classes/UPNPDevice.xml:69
+msgid "HTTP error."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:227
+msgid "Socket error."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:230
+msgid "Error allocating memory."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:233
+msgid ""
+"No gateway available. You may need to call [method discover] first, or "
+"discovery didn't detect any valid IGDs (InternetGatewayDevices)."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:236
+msgid ""
+"No devices available. You may need to call [method discover] first, or "
+"discovery didn't detect any valid [UPNPDevice]s."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:239
+#: modules/upnp/doc_classes/UPNPDevice.xml:93
+msgid "Unknown error."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNPDevice.xml:4
+msgid "UPNP device."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNPDevice.xml:7
+msgid ""
+"UPNP device. See [UPNP] for UPNP discovery and utility functions. Provides "
+"low-level access to UPNP control commands. Allows to manage port mappings "
+"(port forwarding) and to query network information of the device (like local "
+"and external IP address and status). Note that methods on this class are "
+"synchronous and block the calling thread."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNPDevice.xml:20
+msgid ""
+"Adds a port mapping to forward the given external port on this [UPNPDevice] "
+"for the given protocol to the local machine. See [method UPNP."
+"add_port_mapping]."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNPDevice.xml:28
+msgid ""
+"Deletes the port mapping identified by the given port and protocol "
+"combination on this device. See [method UPNP.delete_port_mapping]."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNPDevice.xml:34
+msgid ""
+"Returns [code]true[/code] if this is a valid IGD (InternetGatewayDevice) "
+"which potentially supports port forwarding."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNPDevice.xml:40
+msgid ""
+"Returns the external IP address of this [UPNPDevice] or an empty string."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNPDevice.xml:46
+msgid "URL to the device description."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNPDevice.xml:49
+msgid "IDG control URL."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNPDevice.xml:52
+msgid ""
+"Address of the local machine in the network connecting it to this "
+"[UPNPDevice]."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNPDevice.xml:55
+msgid "IGD service type."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNPDevice.xml:58
+msgid "IGD status. See [enum IGDStatus]."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNPDevice.xml:61
+msgid "Service type."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNPDevice.xml:66
+msgid "OK."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNPDevice.xml:72
+msgid "Empty HTTP response."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNPDevice.xml:75
+msgid "Returned response contained no URLs."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNPDevice.xml:78
+msgid "Not a valid IGD."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNPDevice.xml:81
+msgid "Disconnected."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNPDevice.xml:84
+msgid "Unknown device."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNPDevice.xml:87
+msgid "Invalid control."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNPDevice.xml:90
+msgid "Memory allocation error."
+msgstr ""
+
+#: doc/classes/Variant.xml:4
+msgid "The most important data type in Godot."
+msgstr ""
+
+#: doc/classes/Variant.xml:7
+msgid ""
+"In computer programming, a Variant class is a class that is designed to "
+"store a variety of other types. Dynamic programming languages like PHP, Lua, "
+"JavaScript and GDScript like to use them to store variables' data on the "
+"backend. With these Variants, properties are able to change value types "
+"freely.\n"
+"[codeblock]\n"
+"var foo = 2 # foo is dynamically an integer\n"
+"foo = \"Now foo is a string!\"\n"
+"foo = Reference.new() # foo is an Object\n"
+"var bar: int = 2 # bar is a statically typed integer.\n"
+"# bar = \"Uh oh! I can't make static variables become a different type!\"\n"
+"[/codeblock]\n"
+"Godot tracks all scripting API variables within Variants. Without even "
+"realizing it, you use Variants all the time. When a particular language "
+"enforces its own rules for keeping data typed, then that language is "
+"applying its own custom logic over the base Variant scripting API.\n"
+"- GDScript automatically wrap values in them. It keeps all data in plain "
+"Variants by default and then optionally enforces custom static typing rules "
+"on variable types.\n"
+"- VisualScript tracks properties inside Variants as well, but it also uses "
+"static typing. The GUI interface enforces that properties have a particular "
+"type that doesn't change over time.\n"
+"- C# is statically typed, but uses the Mono [code]object[/code] type in "
+"place of Godot's Variant class when it needs to represent a dynamic value. "
+"[code]object[/code] is the Mono runtime's equivalent of the same concept.\n"
+"- The statically-typed language NativeScript C++ does not define a built-in "
+"Variant-like class. Godot's GDNative bindings provide their own godot::"
+"Variant class for users; Any point at which the C++ code starts interacting "
+"with the Godot runtime is a place where you might have to start wrapping "
+"data inside Variant objects.\n"
+"The global [method @GDScript.typeof] function returns the enumerated value "
+"of the Variant type stored in the current variable (see [enum Variant."
+"Type]).\n"
+"[codeblock]\n"
+"var foo = 2\n"
+"match typeof(foo):\n"
+" TYPE_NIL:\n"
+" print(\"foo is null\")\n"
+" TYPE_INTEGER:\n"
+" print(\"foo is an integer\")\n"
+" TYPE_OBJECT:\n"
+" # Note that Objects are their own special category.\n"
+" # To get the name of the underlying Object type, you need the "
+"`get_class()` method.\n"
+" print(\"foo is a(n) %s\" % foo.get_class()) # inject the class name "
+"into a formatted string.\n"
+" # Note also that there is not yet any way to get a script's "
+"`class_name` string easily.\n"
+" # To fetch that value, you need to dig deeply into a hidden "
+"ProjectSettings setting: an Array of Dictionaries called "
+"\"_global_script_classes\".\n"
+" # Open your project.godot file to see it up close.\n"
+"[/codeblock]\n"
+"A Variant takes up only 20 bytes and can store almost any engine datatype "
+"inside of it. Variants are rarely used to hold information for long periods "
+"of time. Instead, they are used mainly for communication, editing, "
+"serialization and moving data around.\n"
+"Godot has specifically invested in making its Variant class as flexible as "
+"possible; so much so that it is used for a multitude of operations to "
+"facilitate communication between all of Godot's systems.\n"
+"A Variant:\n"
+"- Can store almost any datatype.\n"
+"- Can perform operations between many variants. GDScript uses Variant as its "
+"atomic/native datatype.\n"
+"- Can be hashed, so it can be compared quickly to other variants.\n"
+"- Can be used to convert safely between datatypes.\n"
+"- Can be used to abstract calling methods and their arguments. Godot exports "
+"all its functions through variants.\n"
+"- Can be used to defer calls or move data between threads.\n"
+"- Can be serialized as binary and stored to disk, or transferred via "
+"network.\n"
+"- Can be serialized to text and use it for printing values and editable "
+"settings.\n"
+"- Can work as an exported property, so the editor can edit it universally.\n"
+"- Can be used for dictionaries, arrays, parsers, etc.\n"
+"[b]Containers (Array and Dictionary):[/b] Both are implemented using "
+"variants. A [Dictionary] can match any datatype used as key to any other "
+"datatype. An [Array] just holds an array of Variants. Of course, a Variant "
+"can also hold a [Dictionary] and an [Array] inside, making it even more "
+"flexible.\n"
+"Modifications to a container will modify all references to it. A [Mutex] "
+"should be created to lock it if multi-threaded access is desired."
+msgstr ""
+
+#: doc/classes/Variant.xml:53
+msgid "https://docs.godotengine.org/en/3.4/development/cpp/variant_class.html"
+msgstr ""
+
+#: doc/classes/VBoxContainer.xml:4
+msgid "Vertical box container."
+msgstr ""
+
+#: doc/classes/VBoxContainer.xml:7
+msgid "Vertical box container. See [BoxContainer]."
+msgstr ""
+
+#: doc/classes/VBoxContainer.xml:18
+msgid "The vertical space between the [VBoxContainer]'s elements."
+msgstr ""
+
+#: doc/classes/Vector2.xml:4
+msgid "Vector used for 2D math."
+msgstr ""
+
+#: doc/classes/Vector2.xml:7
+msgid ""
+"2-element structure that can be used to represent positions in 2D space or "
+"any other pair of numeric values.\n"
+"[b]Note:[/b] In a boolean context, a Vector2 will evaluate to [code]false[/"
+"code] if it's equal to [code]Vector2(0, 0)[/code]. Otherwise, a Vector2 will "
+"always evaluate to [code]true[/code]."
+msgstr ""
+
+#: doc/classes/Vector2.xml:14 doc/classes/Vector3.xml:14
+msgid ""
+"https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab"
+msgstr ""
+
+#: doc/classes/Vector2.xml:24
+msgid ""
+"Constructs a new Vector2 from the given [code]x[/code] and [code]y[/code]."
+msgstr ""
+
+#: doc/classes/Vector2.xml:30 doc/classes/Vector3.xml:31
+msgid ""
+"Returns a new vector with all components in absolute values (i.e. positive)."
+msgstr ""
+
+#: doc/classes/Vector2.xml:36
+msgid ""
+"Returns this vector's angle with respect to the positive X axis, or [code]"
+"(1, 0)[/code] vector, in radians.\n"
+"For example, [code]Vector2.RIGHT.angle()[/code] will return zero, "
+"[code]Vector2.DOWN.angle()[/code] will return [code]PI / 2[/code] (a quarter "
+"turn, or 90 degrees), and [code]Vector2(1, -1).angle()[/code] will return "
+"[code]-PI / 4[/code] (a negative eighth turn, or -45 degrees).\n"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/master/img/"
+"vector2_angle.png]Illustration of the returned angle.[/url]\n"
+"Equivalent to the result of [method @GDScript.atan2] when called with the "
+"vector's [member y] and [member x] as parameters: [code]atan2(y, x)[/code]."
+msgstr ""
+
+#: doc/classes/Vector2.xml:46
+msgid ""
+"Returns the angle to the given vector, in radians.\n"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/master/img/"
+"vector2_angle_to.png]Illustration of the returned angle.[/url]"
+msgstr ""
+
+#: doc/classes/Vector2.xml:54
+msgid ""
+"Returns the angle between the line connecting the two points and the X axis, "
+"in radians.\n"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/master/img/"
+"vector2_angle_to_point.png]Illustration of the returned angle.[/url]"
+msgstr ""
+
+#: doc/classes/Vector2.xml:61
+msgid ""
+"Returns the aspect ratio of this vector, the ratio of [member x] to [member "
+"y]."
+msgstr ""
+
+#: doc/classes/Vector2.xml:68 doc/classes/Vector3.xml:45
+msgid ""
+"Returns the vector \"bounced off\" from a plane defined by the given normal."
+msgstr ""
+
+#: doc/classes/Vector2.xml:74
+msgid ""
+"Returns the vector with all components rounded up (towards positive "
+"infinity)."
+msgstr ""
+
+#: doc/classes/Vector2.xml:81
+msgid ""
+"Returns the vector with a maximum length by limiting its length to "
+"[code]length[/code]."
+msgstr ""
+
+#: doc/classes/Vector2.xml:88
+msgid "Returns the cross product of this vector and [code]with[/code]."
+msgstr ""
+
+#: doc/classes/Vector2.xml:98
+msgid ""
+"Cubically interpolates between this vector and [code]b[/code] using "
+"[code]pre_a[/code] and [code]post_b[/code] as handles, and returns the "
+"result at position [code]weight[/code]. [code]weight[/code] is on the range "
+"of 0.0 to 1.0, representing the amount of interpolation."
+msgstr ""
+
+#: doc/classes/Vector2.xml:105 doc/classes/Vector3.xml:75
+msgid ""
+"Returns the normalized vector pointing from this vector to [code]b[/code]. "
+"This is equivalent to using [code](b - a).normalized()[/code]."
+msgstr ""
+
+#: doc/classes/Vector2.xml:112 doc/classes/Vector3.xml:82
+msgid ""
+"Returns the squared distance between this vector and [code]b[/code].\n"
+"This method runs faster than [method distance_to], so prefer it if you need "
+"to compare vectors or need the squared distance for some formula."
+msgstr ""
+
+#: doc/classes/Vector2.xml:120
+msgid "Returns the distance between this vector and [code]to[/code]."
+msgstr ""
+
+#: doc/classes/Vector2.xml:127
+msgid ""
+"Returns the dot product of this vector and [code]with[/code]. This can be "
+"used to compare the angle between two vectors. For example, this can be used "
+"to determine whether an enemy is facing the player.\n"
+"The dot product will be [code]0[/code] for a straight angle (90 degrees), "
+"greater than 0 for angles narrower than 90 degrees and lower than 0 for "
+"angles wider than 90 degrees.\n"
+"When using unit (normalized) vectors, the result will always be between "
+"[code]-1.0[/code] (180 degree angle) when the vectors are facing opposite "
+"directions, and [code]1.0[/code] (0 degree angle) when the vectors are "
+"aligned.\n"
+"[b]Note:[/b] [code]a.dot(b)[/code] is equivalent to [code]b.dot(a)[/code]."
+msgstr ""
+
+#: doc/classes/Vector2.xml:136
+msgid ""
+"Returns the vector with all components rounded down (towards negative "
+"infinity)."
+msgstr ""
+
+#: doc/classes/Vector2.xml:143 doc/classes/Vector3.xml:119
+msgid ""
+"Returns [code]true[/code] if this vector and [code]v[/code] are "
+"approximately equal, by running [method @GDScript.is_equal_approx] on each "
+"component."
+msgstr ""
+
+#: doc/classes/Vector2.xml:149 doc/classes/Vector3.xml:125
+msgid ""
+"Returns [code]true[/code] if the vector is normalized, [code]false[/code] "
+"otherwise."
+msgstr ""
+
+#: doc/classes/Vector2.xml:155 doc/classes/Vector3.xml:131
+msgid "Returns the length (magnitude) of this vector."
+msgstr ""
+
+#: doc/classes/Vector2.xml:161 doc/classes/Vector3.xml:137
+msgid ""
+"Returns the squared length (squared magnitude) of this vector.\n"
+"This method runs faster than [method length], so prefer it if you need to "
+"compare vectors or need the squared distance for some formula."
+msgstr ""
+
+#: doc/classes/Vector2.xml:170
+msgid ""
+"Returns the result of the linear interpolation between this vector and "
+"[code]to[/code] by amount [code]weight[/code]. [code]weight[/code] is on the "
+"range of 0.0 to 1.0, representing the amount of interpolation."
+msgstr ""
+
+#: doc/classes/Vector2.xml:178
+msgid ""
+"Moves the vector toward [code]to[/code] by the fixed [code]delta[/code] "
+"amount."
+msgstr ""
+
+#: doc/classes/Vector2.xml:184 doc/classes/Vector3.xml:172
+msgid ""
+"Returns the vector scaled to unit length. Equivalent to [code]v / v.length()"
+"[/code]."
+msgstr ""
+
+#: doc/classes/Vector2.xml:191 doc/classes/Vector3.xml:186
+msgid ""
+"Returns a vector composed of the [method @GDScript.fposmod] of this vector's "
+"components and [code]mod[/code]."
+msgstr ""
+
+#: doc/classes/Vector2.xml:198 doc/classes/Vector3.xml:193
+msgid ""
+"Returns a vector composed of the [method @GDScript.fposmod] of this vector's "
+"components and [code]modv[/code]'s components."
+msgstr ""
+
+#: doc/classes/Vector2.xml:205
+msgid "Returns the vector projected onto the vector [code]b[/code]."
+msgstr ""
+
+#: doc/classes/Vector2.xml:212
+msgid "Returns the vector reflected from a plane defined by the given normal."
+msgstr ""
+
+#: doc/classes/Vector2.xml:219
+msgid ""
+"Returns the vector rotated by [code]phi[/code] radians. See also [method "
+"@GDScript.deg2rad]."
+msgstr ""
+
+#: doc/classes/Vector2.xml:225
+msgid ""
+"Returns the vector with all components rounded to the nearest integer, with "
+"halfway cases rounded away from zero."
+msgstr ""
+
+#: doc/classes/Vector2.xml:231
+msgid ""
+"Returns the vector with each component set to one or negative one, depending "
+"on the signs of the components. If a component is zero, it returns positive "
+"one."
+msgstr ""
+
+#: doc/classes/Vector2.xml:239 doc/classes/Vector3.xml:243
+msgid ""
+"Returns the result of spherical linear interpolation between this vector and "
+"[code]to[/code], by amount [code]weight[/code]. [code]weight[/code] is on "
+"the range of 0.0 to 1.0, representing the amount of interpolation.\n"
+"[b]Note:[/b] Both vectors must be normalized."
+msgstr ""
+
+#: doc/classes/Vector2.xml:247 doc/classes/Vector3.xml:251
+msgid "Returns this vector slid along a plane defined by the given normal."
+msgstr ""
+
+#: doc/classes/Vector2.xml:254 doc/classes/Vector3.xml:258
+msgid ""
+"Returns this vector with each component snapped to the nearest multiple of "
+"[code]step[/code]. This can also be used to round to an arbitrary number of "
+"decimals."
+msgstr ""
+
+#: doc/classes/Vector2.xml:260
+msgid ""
+"Returns a perpendicular vector rotated 90 degrees counter-clockwise compared "
+"to the original, with the same length."
+msgstr ""
+
+#: doc/classes/Vector2.xml:266 doc/classes/Vector3.xml:271
+msgid ""
+"The vector's X component. Also accessible by using the index position [code]"
+"[0][/code]."
+msgstr ""
+
+#: doc/classes/Vector2.xml:269 doc/classes/Vector3.xml:274
+msgid ""
+"The vector's Y component. Also accessible by using the index position [code]"
+"[1][/code]."
+msgstr ""
+
+#: doc/classes/Vector2.xml:274
+msgid "Enumerated value for the X axis."
+msgstr ""
+
+#: doc/classes/Vector2.xml:277
+msgid "Enumerated value for the Y axis."
+msgstr ""
+
+#: doc/classes/Vector2.xml:280 doc/classes/Vector3.xml:291
+msgid "Zero vector, a vector with all components set to [code]0[/code]."
+msgstr ""
+
+#: doc/classes/Vector2.xml:283 doc/classes/Vector3.xml:294
+msgid "One vector, a vector with all components set to [code]1[/code]."
+msgstr ""
+
+#: doc/classes/Vector2.xml:286 doc/classes/Vector3.xml:297
+msgid ""
+"Infinity vector, a vector with all components set to [constant @GDScript."
+"INF]."
+msgstr ""
+
+#: doc/classes/Vector2.xml:289
+msgid "Left unit vector. Represents the direction of left."
+msgstr ""
+
+#: doc/classes/Vector2.xml:292
+msgid "Right unit vector. Represents the direction of right."
+msgstr ""
+
+#: doc/classes/Vector2.xml:295
+msgid "Up unit vector. Y is down in 2D, so this vector points -Y."
+msgstr ""
+
+#: doc/classes/Vector2.xml:298
+msgid "Down unit vector. Y is down in 2D, so this vector points +Y."
+msgstr ""
+
+#: doc/classes/Vector3.xml:4
+msgid "Vector used for 3D math."
+msgstr ""
+
+#: doc/classes/Vector3.xml:7
+msgid ""
+"3-element structure that can be used to represent positions in 3D space or "
+"any other pair of numeric values.\n"
+"[b]Note:[/b] In a boolean context, a Vector3 will evaluate to [code]false[/"
+"code] if it's equal to [code]Vector3(0, 0, 0)[/code]. Otherwise, a Vector3 "
+"will always evaluate to [code]true[/code]."
+msgstr ""
+
+#: doc/classes/Vector3.xml:25
+msgid "Returns a Vector3 with the given components."
+msgstr ""
+
+#: doc/classes/Vector3.xml:38
+msgid "Returns the unsigned minimum angle to the given vector, in radians."
+msgstr ""
+
+#: doc/classes/Vector3.xml:51
+msgid ""
+"Returns a new vector with all components rounded up (towards positive "
+"infinity)."
+msgstr ""
+
+#: doc/classes/Vector3.xml:58
+msgid "Returns the cross product of this vector and [code]b[/code]."
+msgstr ""
+
+#: doc/classes/Vector3.xml:68
+msgid ""
+"Performs a cubic interpolation between vectors [code]pre_a[/code], [code]a[/"
+"code], [code]b[/code], [code]post_b[/code] ([code]a[/code] is current), by "
+"the given amount [code]weight[/code]. [code]weight[/code] is on the range of "
+"0.0 to 1.0, representing the amount of interpolation."
+msgstr ""
+
+#: doc/classes/Vector3.xml:90
+msgid "Returns the distance between this vector and [code]b[/code]."
+msgstr ""
+
+#: doc/classes/Vector3.xml:97
+msgid ""
+"Returns the dot product of this vector and [code]b[/code]. This can be used "
+"to compare the angle between two vectors. For example, this can be used to "
+"determine whether an enemy is facing the player.\n"
+"The dot product will be [code]0[/code] for a straight angle (90 degrees), "
+"greater than 0 for angles narrower than 90 degrees and lower than 0 for "
+"angles wider than 90 degrees.\n"
+"When using unit (normalized) vectors, the result will always be between "
+"[code]-1.0[/code] (180 degree angle) when the vectors are facing opposite "
+"directions, and [code]1.0[/code] (0 degree angle) when the vectors are "
+"aligned.\n"
+"[b]Note:[/b] [code]a.dot(b)[/code] is equivalent to [code]b.dot(a)[/code]."
+msgstr ""
+
+#: doc/classes/Vector3.xml:106
+msgid ""
+"Returns a new vector with all components rounded down (towards negative "
+"infinity)."
+msgstr ""
+
+#: doc/classes/Vector3.xml:112
+msgid ""
+"Returns the inverse of the vector. This is the same as [code]Vector3( 1.0 / "
+"v.x, 1.0 / v.y, 1.0 / v.z )[/code]."
+msgstr ""
+
+#: doc/classes/Vector3.xml:146
+msgid ""
+"Returns the result of the linear interpolation between this vector and "
+"[code]to[/code] by amount [code]t[/code]. [code]weight[/code] is on the "
+"range of 0.0 to 1.0, representing the amount of interpolation."
+msgstr ""
+
+#: doc/classes/Vector3.xml:152
+msgid ""
+"Returns the axis of the vector's largest value. See [code]AXIS_*[/code] "
+"constants. If all components are equal, this method returns [constant "
+"AXIS_X]."
+msgstr ""
+
+#: doc/classes/Vector3.xml:158
+msgid ""
+"Returns the axis of the vector's smallest value. See [code]AXIS_*[/code] "
+"constants. If all components are equal, this method returns [constant "
+"AXIS_Z]."
+msgstr ""
+
+#: doc/classes/Vector3.xml:166
+msgid ""
+"Moves this vector toward [code]to[/code] by the fixed [code]delta[/code] "
+"amount."
+msgstr ""
+
+#: doc/classes/Vector3.xml:179
+msgid "Returns the outer product with [code]b[/code]."
+msgstr ""
+
+#: doc/classes/Vector3.xml:200
+msgid "Returns this vector projected onto another vector [code]b[/code]."
+msgstr ""
+
+#: doc/classes/Vector3.xml:207
+msgid "Returns this vector reflected from a plane defined by the given normal."
+msgstr ""
+
+#: doc/classes/Vector3.xml:215
+msgid ""
+"Rotates this vector around a given axis by [code]phi[/code] radians. The "
+"axis must be a normalized vector."
+msgstr ""
+
+#: doc/classes/Vector3.xml:221
+msgid ""
+"Returns this vector with all components rounded to the nearest integer, with "
+"halfway cases rounded away from zero."
+msgstr ""
+
+#: doc/classes/Vector3.xml:227
+msgid ""
+"Returns a vector with each component set to one or negative one, depending "
+"on the signs of this vector's components. If a component is zero, it returns "
+"positive one."
+msgstr ""
+
+#: doc/classes/Vector3.xml:235
+msgid ""
+"Returns the signed angle to the given vector, in radians. The sign of the "
+"angle is positive in a counter-clockwise direction and negative in a "
+"clockwise direction when viewed from the side specified by the [code]axis[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Vector3.xml:264
+msgid ""
+"Returns a diagonal matrix with the vector as main diagonal.\n"
+"This is equivalent to a Basis with no rotation or shearing and this vector's "
+"components set as the scale."
+msgstr ""
+
+#: doc/classes/Vector3.xml:277
+msgid ""
+"The vector's Z component. Also accessible by using the index position [code]"
+"[2][/code]."
+msgstr ""
+
+#: doc/classes/Vector3.xml:282
+msgid ""
+"Enumerated value for the X axis. Returned by [method max_axis] and [method "
+"min_axis]."
+msgstr ""
+
+#: doc/classes/Vector3.xml:285
+msgid ""
+"Enumerated value for the Y axis. Returned by [method max_axis] and [method "
+"min_axis]."
+msgstr ""
+
+#: doc/classes/Vector3.xml:288
+msgid ""
+"Enumerated value for the Z axis. Returned by [method max_axis] and [method "
+"min_axis]."
+msgstr ""
+
+#: doc/classes/Vector3.xml:300
+msgid ""
+"Left unit vector. Represents the local direction of left, and the global "
+"direction of west."
+msgstr ""
+
+#: doc/classes/Vector3.xml:303
+msgid ""
+"Right unit vector. Represents the local direction of right, and the global "
+"direction of east."
+msgstr ""
+
+#: doc/classes/Vector3.xml:306
+msgid "Up unit vector."
+msgstr ""
+
+#: doc/classes/Vector3.xml:309
+msgid "Down unit vector."
+msgstr ""
+
+#: doc/classes/Vector3.xml:312
+msgid ""
+"Forward unit vector. Represents the local direction of forward, and the "
+"global direction of north."
+msgstr ""
+
+#: doc/classes/Vector3.xml:315
+msgid ""
+"Back unit vector. Represents the local direction of back, and the global "
+"direction of south."
+msgstr ""
+
+#: doc/classes/VehicleBody.xml:4
+msgid "Physics body that simulates the behavior of a car."
+msgstr ""
+
+#: doc/classes/VehicleBody.xml:7
+msgid ""
+"This node implements all the physics logic needed to simulate a car. It is "
+"based on the raycast vehicle system commonly found in physics engines. You "
+"will need to add a [CollisionShape] for the main body of your vehicle and "
+"add [VehicleWheel] nodes for the wheels. You should also add a "
+"[MeshInstance] to this node for the 3D model of your car but this model "
+"should not include meshes for the wheels. You should control the vehicle by "
+"using the [member brake], [member engine_force], and [member steering] "
+"properties and not change the position or orientation of this node "
+"directly.\n"
+"[b]Note:[/b] The origin point of your VehicleBody will determine the center "
+"of gravity of your vehicle so it is better to keep this low and move the "
+"[CollisionShape] and [MeshInstance] upwards.\n"
+"[b]Note:[/b] This class has known issues and isn't designed to provide "
+"realistic 3D vehicle physics. If you want advanced vehicle physics, you will "
+"probably have to write your own physics integration using another "
+"[PhysicsBody] class."
+msgstr ""
+
+#: doc/classes/VehicleBody.xml:18
+msgid ""
+"Slows down the vehicle by applying a braking force. The vehicle is only "
+"slowed down if the wheels are in contact with a surface. The force you need "
+"to apply to adequately slow down your vehicle depends on the [member "
+"RigidBody.mass] of the vehicle. For a vehicle with a mass set to 1000, try a "
+"value in the 25 - 30 range for hard braking."
+msgstr ""
+
+#: doc/classes/VehicleBody.xml:21
+msgid ""
+"Accelerates the vehicle by applying an engine force. The vehicle is only "
+"speed up if the wheels that have [member VehicleWheel.use_as_traction] set "
+"to [code]true[/code] and are in contact with a surface. The [member "
+"RigidBody.mass] of the vehicle has an effect on the acceleration of the "
+"vehicle. For a vehicle with a mass set to 1000, try a value in the 25 - 50 "
+"range for acceleration.\n"
+"[b]Note:[/b] The simulation does not take the effect of gears into account, "
+"you will need to add logic for this if you wish to simulate gears.\n"
+"A negative value will result in the vehicle reversing."
+msgstr ""
+
+#: doc/classes/VehicleBody.xml:27
+msgid ""
+"The steering angle for the vehicle. Setting this to a non-zero value will "
+"result in the vehicle turning when it's moving. Wheels that have [member "
+"VehicleWheel.use_as_steering] set to [code]true[/code] will automatically be "
+"rotated."
+msgstr ""
+
+#: doc/classes/VehicleWheel.xml:4
+msgid "Physics object that simulates the behavior of a wheel."
+msgstr ""
+
+#: doc/classes/VehicleWheel.xml:7
+msgid ""
+"This node needs to be used as a child node of [VehicleBody] and simulates "
+"the behavior of one of its wheels. This node also acts as a collider to "
+"detect if the wheel is touching a surface.\n"
+"[b]Note:[/b] This class has known issues and isn't designed to provide "
+"realistic 3D vehicle physics. If you want advanced vehicle physics, you will "
+"probably have to write your own physics integration using another "
+"[PhysicsBody] class."
+msgstr ""
+
+#: doc/classes/VehicleWheel.xml:17
+msgid "Returns the rotational speed of the wheel in revolutions per minute."
+msgstr ""
+
+#: doc/classes/VehicleWheel.xml:23
+msgid ""
+"Returns a value between 0.0 and 1.0 that indicates whether this wheel is "
+"skidding. 0.0 is skidding (the wheel has lost grip, e.g. icy terrain), 1.0 "
+"means not skidding (the wheel has full grip, e.g. dry asphalt road)."
+msgstr ""
+
+#: doc/classes/VehicleWheel.xml:29
+msgid "Returns [code]true[/code] if this wheel is in contact with a surface."
+msgstr ""
+
+#: doc/classes/VehicleWheel.xml:35
+msgid ""
+"Slows down the wheel by applying a braking force. The wheel is only slowed "
+"down if it is in contact with a surface. The force you need to apply to "
+"adequately slow down your vehicle depends on the [member RigidBody.mass] of "
+"the vehicle. For a vehicle with a mass set to 1000, try a value in the 25 - "
+"30 range for hard braking."
+msgstr ""
+
+#: doc/classes/VehicleWheel.xml:38
+msgid ""
+"The damping applied to the spring when the spring is being compressed. This "
+"value should be between 0.0 (no damping) and 1.0. A value of 0.0 means the "
+"car will keep bouncing as the spring keeps its energy. A good value for this "
+"is around 0.3 for a normal car, 0.5 for a race car."
+msgstr ""
+
+#: doc/classes/VehicleWheel.xml:41
+msgid ""
+"The damping applied to the spring when relaxing. This value should be "
+"between 0.0 (no damping) and 1.0. This value should always be slightly "
+"higher than the [member damping_compression] property. For a [member "
+"damping_compression] value of 0.3, try a relaxation value of 0.5."
+msgstr ""
+
+#: doc/classes/VehicleWheel.xml:44
+msgid ""
+"Accelerates the wheel by applying an engine force. The wheel is only speed "
+"up if it is in contact with a surface. The [member RigidBody.mass] of the "
+"vehicle has an effect on the acceleration of the vehicle. For a vehicle with "
+"a mass set to 1000, try a value in the 25 - 50 range for acceleration.\n"
+"[b]Note:[/b] The simulation does not take the effect of gears into account, "
+"you will need to add logic for this if you wish to simulate gears.\n"
+"A negative value will result in the wheel reversing."
+msgstr ""
+
+#: doc/classes/VehicleWheel.xml:49
+msgid ""
+"The steering angle for the wheel. Setting this to a non-zero value will "
+"result in the vehicle turning when it's moving."
+msgstr ""
+
+#: doc/classes/VehicleWheel.xml:52
+msgid ""
+"The maximum force the spring can resist. This value should be higher than a "
+"quarter of the [member RigidBody.mass] of the [VehicleBody] or the spring "
+"will not carry the weight of the vehicle. Good results are often obtained by "
+"a value that is about 3× to 4× this number."
+msgstr ""
+
+#: doc/classes/VehicleWheel.xml:55
+msgid ""
+"This value defines the stiffness of the suspension. Use a value lower than "
+"50 for an off-road car, a value between 50 and 100 for a race car and try "
+"something around 200 for something like a Formula 1 car."
+msgstr ""
+
+#: doc/classes/VehicleWheel.xml:58
+msgid ""
+"This is the distance the suspension can travel. As Godot units are "
+"equivalent to meters, keep this setting relatively low. Try a value between "
+"0.1 and 0.3 depending on the type of car."
+msgstr ""
+
+#: doc/classes/VehicleWheel.xml:61
+msgid ""
+"If [code]true[/code], this wheel will be turned when the car steers. This "
+"value is used in conjunction with [member VehicleBody.steering] and ignored "
+"if you are using the per-wheel [member steering] value instead."
+msgstr ""
+
+#: doc/classes/VehicleWheel.xml:64
+msgid ""
+"If [code]true[/code], this wheel transfers engine force to the ground to "
+"propel the vehicle forward. This value is used in conjunction with [member "
+"VehicleBody.engine_force] and ignored if you are using the per-wheel [member "
+"engine_force] value instead."
+msgstr ""
+
+#: doc/classes/VehicleWheel.xml:67
+msgid ""
+"This determines how much grip this wheel has. It is combined with the "
+"friction setting of the surface the wheel is in contact with. 0.0 means no "
+"grip, 1.0 is normal grip. For a drift car setup, try setting the grip of the "
+"rear wheels slightly lower than the front wheels, or use a lower value to "
+"simulate tire wear.\n"
+"It's best to set this to 1.0 when starting out."
+msgstr ""
+
+#: doc/classes/VehicleWheel.xml:71
+msgid "The radius of the wheel in meters."
+msgstr ""
+
+#: doc/classes/VehicleWheel.xml:74
+msgid ""
+"This is the distance in meters the wheel is lowered from its origin point. "
+"Don't set this to 0.0 and move the wheel into position, instead move the "
+"origin point of your wheel (the gizmo in Godot) to the position the wheel "
+"will take when bottoming out, then use the rest length to move the wheel "
+"down to the position it should be in when the car is in rest."
+msgstr ""
+
+#: doc/classes/VehicleWheel.xml:77
+msgid ""
+"This value affects the roll of your vehicle. If set to 1.0 for all wheels, "
+"your vehicle will be prone to rolling over, while a value of 0.0 will resist "
+"body roll."
+msgstr ""
+
+#: doc/classes/VideoPlayer.xml:4
+msgid "Control for playing video streams."
+msgstr ""
+
+#: doc/classes/VideoPlayer.xml:7
+msgid ""
+"Control node for playing video streams using [VideoStream] resources.\n"
+"Supported video formats are [url=https://www.webmproject.org/]WebM[/url] "
+"([code].webm[/code], [VideoStreamWebm]), [url=https://www.theora.org/]Ogg "
+"Theora[/url] ([code].ogv[/code], [VideoStreamTheora]), and any format "
+"exposed via a GDNative plugin using [VideoStreamGDNative].\n"
+"[b]Note:[/b] Due to a bug, VideoPlayer does not support localization "
+"remapping yet.\n"
+"[b]Warning:[/b] On HTML5, video playback [i]will[/i] perform poorly due to "
+"missing architecture-specific assembly optimizations, especially for VP8/VP9."
+msgstr ""
+
+#: doc/classes/VideoPlayer.xml:18
+msgid ""
+"Returns the video stream's name, or [code]\"<No Stream>\"[/code] if no video "
+"stream is assigned."
+msgstr ""
+
+#: doc/classes/VideoPlayer.xml:24
+msgid "Returns the current frame as a [Texture]."
+msgstr ""
+
+#: doc/classes/VideoPlayer.xml:30
+msgid ""
+"Returns [code]true[/code] if the video is playing.\n"
+"[b]Note:[/b] The video is still considered playing if paused during playback."
+msgstr ""
+
+#: doc/classes/VideoPlayer.xml:37
+msgid ""
+"Starts the video playback from the beginning. If the video is paused, this "
+"will not unpause the video."
+msgstr ""
+
+#: doc/classes/VideoPlayer.xml:43
+msgid ""
+"Stops the video playback and sets the stream position to 0.\n"
+"[b]Note:[/b] Although the stream position will be set to 0, the first frame "
+"of the video stream won't become the current frame."
+msgstr ""
+
+#: doc/classes/VideoPlayer.xml:50
+msgid "The embedded audio track to play."
+msgstr ""
+
+#: doc/classes/VideoPlayer.xml:53
+msgid "If [code]true[/code], playback starts when the scene loads."
+msgstr ""
+
+#: doc/classes/VideoPlayer.xml:56
+msgid "Amount of time in milliseconds to store in buffer while playing."
+msgstr ""
+
+#: doc/classes/VideoPlayer.xml:59
+msgid "Audio bus to use for sound playback."
+msgstr ""
+
+#: doc/classes/VideoPlayer.xml:62
+msgid ""
+"If [code]true[/code], the video scales to the control size. Otherwise, the "
+"control minimum size will be automatically adjusted to match the video "
+"stream's dimensions."
+msgstr ""
+
+#: doc/classes/VideoPlayer.xml:65
+msgid "If [code]true[/code], the video is paused."
+msgstr ""
+
+#: doc/classes/VideoPlayer.xml:68
+msgid "The assigned video stream. See description for supported formats."
+msgstr ""
+
+#: doc/classes/VideoPlayer.xml:71
+msgid ""
+"The current position of the stream, in seconds.\n"
+"[b]Note:[/b] Changing this value won't have any effect as seeking is not "
+"implemented yet, except in video formats implemented by a GDNative add-on."
+msgstr ""
+
+#: doc/classes/VideoPlayer.xml:75
+msgid "Audio volume as a linear value."
+msgstr ""
+
+#: doc/classes/VideoPlayer.xml:78
+msgid "Audio volume in dB."
+msgstr ""
+
+#: doc/classes/VideoPlayer.xml:84
+msgid "Emitted when playback is finished."
+msgstr ""
+
+#: doc/classes/VideoStream.xml:4
+msgid "Base resource for video streams."
+msgstr ""
+
+#: doc/classes/VideoStream.xml:7
+msgid ""
+"Base resource type for all video streams. Classes that derive from "
+"[VideoStream] can all be used as resource types to play back videos in "
+"[VideoPlayer]."
+msgstr ""
+
+#: modules/gdnative/doc_classes/VideoStreamGDNative.xml:4
+msgid "[VideoStream] resource for for video formats implemented via GDNative."
+msgstr ""
+
+#: modules/gdnative/doc_classes/VideoStreamGDNative.xml:7
+msgid ""
+"[VideoStream] resource for for video formats implemented via GDNative.\n"
+"It can be used via [url=https://github.com/KidRigger/godot-"
+"videodecoder]godot-videodecoder[/url] which uses the [url=https://ffmpeg."
+"org]FFmpeg[/url] library."
+msgstr ""
+
+#: modules/gdnative/doc_classes/VideoStreamGDNative.xml:16
+msgid "Returns the video file handled by this [VideoStreamGDNative]."
+msgstr ""
+
+#: modules/gdnative/doc_classes/VideoStreamGDNative.xml:23
+msgid ""
+"Sets the video file that this [VideoStreamGDNative] resource handles. The "
+"supported extensions depend on the GDNative plugins used to expose video "
+"formats."
+msgstr ""
+
+#: modules/theora/doc_classes/VideoStreamTheora.xml:4
+msgid "[VideoStream] resource for Ogg Theora videos."
+msgstr ""
+
+#: modules/theora/doc_classes/VideoStreamTheora.xml:7
+msgid ""
+"[VideoStream] resource handling the [url=https://www.theora.org/]Ogg Theora[/"
+"url] video format with [code].ogv[/code] extension. The Theora codec is less "
+"efficient than [VideoStreamWebm]'s VP8 and VP9, but it requires less CPU "
+"resources to decode. The Theora codec is decoded on the CPU.\n"
+"[b]Note:[/b] While Ogg Theora videos can also have an [code].ogg[/code] "
+"extension, you will have to rename the extension to [code].ogv[/code] to use "
+"those videos within Godot."
+msgstr ""
+
+#: modules/theora/doc_classes/VideoStreamTheora.xml:16
+msgid "Returns the Ogg Theora video file handled by this [VideoStreamTheora]."
+msgstr ""
+
+#: modules/theora/doc_classes/VideoStreamTheora.xml:23
+msgid ""
+"Sets the Ogg Theora video file that this [VideoStreamTheora] resource "
+"handles. The [code]file[/code] name should have the [code].ogv[/code] "
+"extension."
+msgstr ""
+
+#: modules/webm/doc_classes/VideoStreamWebm.xml:4
+msgid "[VideoStream] resource for WebM videos."
+msgstr ""
+
+#: modules/webm/doc_classes/VideoStreamWebm.xml:7
+msgid ""
+"[VideoStream] resource handling the [url=https://www.webmproject.org/]WebM[/"
+"url] video format with [code].webm[/code] extension. Both the VP8 and VP9 "
+"codecs are supported. The VP8 and VP9 codecs are more efficient than "
+"[VideoStreamTheora], but they require more CPU resources to decode "
+"(especially VP9). Both the VP8 and VP9 codecs are decoded on the CPU.\n"
+"[b]Note:[/b] Alpha channel (also known as transparency) is not supported. "
+"The video will always appear to have a black background, even if it "
+"originally contains an alpha channel.\n"
+"[b]Note:[/b] There are known bugs and performance issues with WebM video "
+"playback in Godot. If you run into problems, try using the Ogg Theora format "
+"instead: [VideoStreamTheora]"
+msgstr ""
+
+#: modules/webm/doc_classes/VideoStreamWebm.xml:17
+msgid "Returns the WebM video file handled by this [VideoStreamWebm]."
+msgstr ""
+
+#: modules/webm/doc_classes/VideoStreamWebm.xml:24
+msgid ""
+"Sets the WebM video file that this [VideoStreamWebm] resource handles. The "
+"[code]file[/code] name should have the [code].webm[/code] extension."
+msgstr ""
+
+#: doc/classes/Viewport.xml:4
+msgid "Creates a sub-view into the screen."
+msgstr ""
+
+#: doc/classes/Viewport.xml:7
+msgid ""
+"A Viewport creates a different view into the screen, or a sub-view inside "
+"another viewport. Children 2D Nodes will display on it, and children Camera "
+"3D nodes will render on it too.\n"
+"Optionally, a viewport can have its own 2D or 3D world, so they don't share "
+"what they draw with other viewports.\n"
+"If a viewport is a child of a [ViewportContainer], it will automatically "
+"take up its size, otherwise it must be set manually.\n"
+"Viewports can also choose to be audio listeners, so they generate positional "
+"audio depending on a 2D or 3D camera child of it.\n"
+"Also, viewports can be assigned to different screens in case the devices "
+"have multiple screens.\n"
+"Finally, viewports can also behave as render targets, in which case they "
+"will not be visible unless the associated texture is used to draw."
+msgstr ""
+
+#: doc/classes/Viewport.xml:16
+msgid "https://docs.godotengine.org/en/3.4/tutorials/viewports/index.html"
+msgstr ""
+
+#: doc/classes/Viewport.xml:18 doc/classes/ViewportTexture.xml:12
+msgid "https://godotengine.org/asset-library/asset/128"
+msgstr ""
+
+#: doc/classes/Viewport.xml:20
+msgid "https://godotengine.org/asset-library/asset/130"
+msgstr ""
+
+#: doc/classes/Viewport.xml:21
+msgid "https://godotengine.org/asset-library/asset/541"
+msgstr ""
+
+#: doc/classes/Viewport.xml:22 doc/classes/ViewportTexture.xml:14
+msgid "https://godotengine.org/asset-library/asset/586"
+msgstr ""
+
+#: doc/classes/Viewport.xml:28
+msgid ""
+"Returns the 3D world of the viewport, or if none the world of the parent "
+"viewport."
+msgstr ""
+
+#: doc/classes/Viewport.xml:34
+msgid "Returns the 2D world of the viewport."
+msgstr ""
+
+#: doc/classes/Viewport.xml:40
+msgid "Returns the active 3D camera."
+msgstr ""
+
+#: doc/classes/Viewport.xml:46
+msgid "Returns the total transform of the viewport."
+msgstr ""
+
+#: doc/classes/Viewport.xml:52
+msgid "Returns the topmost modal in the stack."
+msgstr ""
+
+#: doc/classes/Viewport.xml:58
+msgid "Returns the mouse position relative to the viewport."
+msgstr ""
+
+#: doc/classes/Viewport.xml:65
+msgid "Returns information about the viewport from the rendering pipeline."
+msgstr ""
+
+#: doc/classes/Viewport.xml:72
+msgid "Returns the [enum ShadowAtlasQuadrantSubdiv] of the specified quadrant."
+msgstr ""
+
+#: doc/classes/Viewport.xml:78
+msgid "Returns the size override set with [method set_size_override]."
+msgstr ""
+
+#: doc/classes/Viewport.xml:84
+msgid ""
+"Returns the viewport's texture.\n"
+"[b]Note:[/b] Due to the way OpenGL works, the resulting [ViewportTexture] is "
+"flipped vertically. You can use [method Image.flip_y] on the result of "
+"[method Texture.get_data] to flip it back, for example:\n"
+"[codeblock]\n"
+"var img = get_viewport().get_texture().get_data()\n"
+"img.flip_y()\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Viewport.xml:95
+msgid "Returns the viewport's RID from the [VisualServer]."
+msgstr ""
+
+#: doc/classes/Viewport.xml:101
+msgid "Returns the visible rectangle in global screen coordinates."
+msgstr ""
+
+#: doc/classes/Viewport.xml:107
+msgid ""
+"Returns the drag data from the GUI, that was previously returned by [method "
+"Control.get_drag_data]."
+msgstr ""
+
+#: doc/classes/Viewport.xml:113
+msgid "Returns [code]true[/code] if there are visible modals on-screen."
+msgstr ""
+
+#: doc/classes/Viewport.xml:119
+msgid ""
+"Returns [code]true[/code] if the viewport is currently performing a drag "
+"operation."
+msgstr ""
+
+#: doc/classes/Viewport.xml:136
+msgid ""
+"Returns [code]true[/code] if the size override is enabled. See [method "
+"set_size_override]."
+msgstr ""
+
+#: doc/classes/Viewport.xml:143
+msgid ""
+"Attaches this [Viewport] to the root [Viewport] with the specified "
+"rectangle. This bypasses the need for another node to display this "
+"[Viewport] but makes you responsible for updating the position of this "
+"[Viewport] manually."
+msgstr ""
+
+#: doc/classes/Viewport.xml:149
+msgid "Stops the input from propagating further down the [SceneTree]."
+msgstr ""
+
+#: doc/classes/Viewport.xml:157
+msgid ""
+"Sets the number of subdivisions to use in the specified quadrant. A higher "
+"number of subdivisions allows you to have more shadows in the scene at once, "
+"but reduces the quality of the shadows. A good practice is to have quadrants "
+"with a varying number of subdivisions and to have as few subdivisions as "
+"possible."
+msgstr ""
+
+#: doc/classes/Viewport.xml:166
+msgid ""
+"Sets the size override of the viewport. If the [code]enable[/code] parameter "
+"is [code]true[/code] the override is used, otherwise it uses the default "
+"size. If the size parameter is [code](-1, -1)[/code], it won't update the "
+"size."
+msgstr ""
+
+#: doc/classes/Viewport.xml:178
+msgid "Forces update of the 2D and 3D worlds."
+msgstr ""
+
+#: doc/classes/Viewport.xml:185
+msgid "Warps the mouse to a position relative to the viewport."
+msgstr ""
+
+#: doc/classes/Viewport.xml:191
+msgid "If [code]true[/code], the viewport will be used in AR/VR process."
+msgstr ""
+
+#: doc/classes/Viewport.xml:194
+msgid "If [code]true[/code], the viewport will process 2D audio streams."
+msgstr ""
+
+#: doc/classes/Viewport.xml:197
+msgid "If [code]true[/code], the viewport will process 3D audio streams."
+msgstr ""
+
+#: doc/classes/Viewport.xml:200
+msgid ""
+"The canvas transform of the viewport, useful for changing the on-screen "
+"positions of all child [CanvasItem]s. This is relative to the global canvas "
+"transform of the viewport."
+msgstr ""
+
+#: doc/classes/Viewport.xml:203
+msgid ""
+"If [code]true[/code], uses a fast post-processing filter to make banding "
+"significantly less visible. In some cases, debanding may introduce a "
+"slightly noticeable dithering pattern. It's recommended to enable debanding "
+"only when actually needed since the dithering pattern will make lossless-"
+"compressed screenshots larger.\n"
+"[b]Note:[/b] Only available on the GLES3 backend. [member hdr] must also be "
+"[code]true[/code] for debanding to be effective."
+msgstr ""
+
+#: doc/classes/Viewport.xml:207
+msgid "The overlay mode for test rendered geometry in debug purposes."
+msgstr ""
+
+#: doc/classes/Viewport.xml:210
+msgid ""
+"If [code]true[/code], the viewport will disable 3D rendering. For actual "
+"disabling use [code]usage[/code]."
+msgstr ""
+
+#: doc/classes/Viewport.xml:213
+msgid ""
+"Enables fast approximate antialiasing. FXAA is a popular screen-space "
+"antialiasing method, which is fast but will make the image look blurry, "
+"especially at lower resolutions. It can still work relatively well at large "
+"resolutions such as 1440p and 4K. Some of the lost sharpness can be "
+"recovered by enabling contrast-adaptive sharpening (see [member "
+"sharpen_intensity])."
+msgstr ""
+
+#: doc/classes/Viewport.xml:216
+msgid ""
+"The global canvas transform of the viewport. The canvas transform is "
+"relative to this."
+msgstr ""
+
+#: doc/classes/Viewport.xml:219
+msgid "If [code]true[/code], the viewport will not receive input events."
+msgstr ""
+
+#: doc/classes/Viewport.xml:222
+msgid ""
+"If [code]true[/code], the GUI controls on the viewport will lay pixel "
+"perfectly."
+msgstr ""
+
+#: doc/classes/Viewport.xml:227
+msgid ""
+"If [code]true[/code], the viewport rendering will receive benefits from High "
+"Dynamic Range algorithm. High Dynamic Range allows the viewport to receive "
+"values that are outside the 0-1 range. In Godot HDR uses 16 bits, meaning it "
+"does not store the full range of a floating point number.\n"
+"[b]Note:[/b] Requires [member usage] to be set to [constant USAGE_3D] or "
+"[constant USAGE_3D_NO_EFFECTS], since HDR is not supported for 2D."
+msgstr ""
+
+#: doc/classes/Viewport.xml:231
+msgid ""
+"If [code]true[/code], the result after 3D rendering will not have a linear "
+"to sRGB color conversion applied. This is important when the viewport is "
+"used as a render target where the result is used as a texture on a 3D object "
+"rendered in another viewport. It is also important if the viewport is used "
+"to create data that is not color based (noise, heightmaps, pickmaps, etc.). "
+"Do not enable this when the viewport is used as a texture on a 2D object or "
+"if the viewport is your final output. For the GLES2 driver this will convert "
+"the sRGB output to linear, this should only be used for VR plugins that "
+"require input in linear color space!"
+msgstr ""
+
+#: doc/classes/Viewport.xml:234
+msgid ""
+"The multisample anti-aliasing mode. A higher number results in smoother "
+"edges at the cost of significantly worse performance. A value of 4 is best "
+"unless targeting very high-end systems."
+msgstr ""
+
+#: doc/classes/Viewport.xml:237
+msgid ""
+"If [code]true[/code], the viewport will use [World] defined in [code]world[/"
+"code] property."
+msgstr ""
+
+#: doc/classes/Viewport.xml:240
+msgid ""
+"If [code]true[/code], the objects rendered by viewport become subjects of "
+"mouse picking process."
+msgstr ""
+
+#: doc/classes/Viewport.xml:243
+msgid ""
+"If [code]true[/code], renders the Viewport directly to the screen instead of "
+"to the root viewport. Only available in GLES2. This is a low-level "
+"optimization and should not be used in most cases. If used, reading from the "
+"Viewport or from [code]SCREEN_TEXTURE[/code] becomes unavailable. For more "
+"information see [method VisualServer.viewport_set_render_direct_to_screen]."
+msgstr ""
+
+#: doc/classes/Viewport.xml:246
+msgid ""
+"The clear mode when viewport used as a render target.\n"
+"[b]Note:[/b] This property is intended for 2D usage."
+msgstr ""
+
+#: doc/classes/Viewport.xml:250
+msgid "The update mode when viewport used as a render target."
+msgstr ""
+
+#: doc/classes/Viewport.xml:253
+msgid ""
+"If [code]true[/code], the result of rendering will be flipped vertically."
+msgstr ""
+
+#: doc/classes/Viewport.xml:256
+msgid "The subdivision amount of the first quadrant on the shadow atlas."
+msgstr ""
+
+#: doc/classes/Viewport.xml:259
+msgid "The subdivision amount of the second quadrant on the shadow atlas."
+msgstr ""
+
+#: doc/classes/Viewport.xml:262
+msgid "The subdivision amount of the third quadrant on the shadow atlas."
+msgstr ""
+
+#: doc/classes/Viewport.xml:265
+msgid "The subdivision amount of the fourth quadrant on the shadow atlas."
+msgstr ""
+
+#: doc/classes/Viewport.xml:268
+msgid ""
+"The shadow atlas' resolution (used for omni and spot lights). The value will "
+"be rounded up to the nearest power of 2.\n"
+"[b]Note:[/b] If this is set to 0, shadows won't be visible. Since user-"
+"created viewports default to a value of 0, this value must be set above 0 "
+"manually."
+msgstr ""
+
+#: doc/classes/Viewport.xml:272
+msgid ""
+"If set to a value greater than [code]0.0[/code], contrast-adaptive "
+"sharpening will be applied to the 3D viewport. This has a low performance "
+"cost and can be used to recover some of the sharpness lost from using FXAA. "
+"Values around [code]0.5[/code] generally give the best results. See also "
+"[member fxaa]."
+msgstr ""
+
+#: doc/classes/Viewport.xml:275
+msgid ""
+"The width and height of viewport. Must be set to a value greater than or "
+"equal to 2 pixels on both dimensions. Otherwise, nothing will be displayed."
+msgstr ""
+
+#: doc/classes/Viewport.xml:278
+msgid "If [code]true[/code], the size override affects stretch as well."
+msgstr ""
+
+#: doc/classes/Viewport.xml:281
+msgid ""
+"If [code]true[/code], the viewport should render its background as "
+"transparent."
+msgstr ""
+
+#: doc/classes/Viewport.xml:284
+msgid "The rendering mode of viewport."
+msgstr ""
+
+#: doc/classes/Viewport.xml:287
+msgid "The custom [World] which can be used as 3D environment source."
+msgstr ""
+
+#: doc/classes/Viewport.xml:290
+msgid "The custom [World2D] which can be used as 2D environment source."
+msgstr ""
+
+#: doc/classes/Viewport.xml:297
+msgid "Emitted when a Control node grabs keyboard focus."
+msgstr ""
+
+#: doc/classes/Viewport.xml:302
+msgid ""
+"Emitted when the size of the viewport is changed, whether by [method "
+"set_size_override], resize of window, or some other means."
+msgstr ""
+
+#: doc/classes/Viewport.xml:308
+msgid "Do not update the render target."
+msgstr ""
+
+#: doc/classes/Viewport.xml:311
+msgid ""
+"Update the render target once, then switch to [constant UPDATE_DISABLED]."
+msgstr ""
+
+#: doc/classes/Viewport.xml:314
+msgid ""
+"Update the render target only when it is visible. This is the default value."
+msgstr ""
+
+#: doc/classes/Viewport.xml:317
+msgid "Always update the render target."
+msgstr ""
+
+#: doc/classes/Viewport.xml:320
+msgid "This quadrant will not be used."
+msgstr ""
+
+#: doc/classes/Viewport.xml:323
+msgid "This quadrant will only be used by one shadow map."
+msgstr ""
+
+#: doc/classes/Viewport.xml:326
+msgid "This quadrant will be split in 4 and used by up to 4 shadow maps."
+msgstr ""
+
+#: doc/classes/Viewport.xml:329
+msgid "This quadrant will be split 16 ways and used by up to 16 shadow maps."
+msgstr ""
+
+#: doc/classes/Viewport.xml:332
+msgid "This quadrant will be split 64 ways and used by up to 64 shadow maps."
+msgstr ""
+
+#: doc/classes/Viewport.xml:335
+msgid ""
+"This quadrant will be split 256 ways and used by up to 256 shadow maps. "
+"Unless the [member shadow_atlas_size] is very high, the shadows in this "
+"quadrant will be very low resolution."
+msgstr ""
+
+#: doc/classes/Viewport.xml:338
+msgid ""
+"This quadrant will be split 1024 ways and used by up to 1024 shadow maps. "
+"Unless the [member shadow_atlas_size] is very high, the shadows in this "
+"quadrant will be very low resolution."
+msgstr ""
+
+#: doc/classes/Viewport.xml:341
+msgid "Represents the size of the [enum ShadowAtlasQuadrantSubdiv] enum."
+msgstr ""
+
+#: doc/classes/Viewport.xml:344
+msgid "Amount of objects in frame."
+msgstr ""
+
+#: doc/classes/Viewport.xml:347
+msgid "Amount of vertices in frame."
+msgstr ""
+
+#: doc/classes/Viewport.xml:350
+msgid "Amount of material changes in frame."
+msgstr ""
+
+#: doc/classes/Viewport.xml:353
+msgid "Amount of shader changes in frame."
+msgstr ""
+
+#: doc/classes/Viewport.xml:356
+msgid "Amount of surface changes in frame."
+msgstr ""
+
+#: doc/classes/Viewport.xml:359 doc/classes/Viewport.xml:365
+msgid "Amount of draw calls in frame."
+msgstr ""
+
+#: doc/classes/Viewport.xml:362
+msgid "Amount of items or joined items in frame."
+msgstr ""
+
+#: doc/classes/Viewport.xml:368
+msgid "Represents the size of the [enum RenderInfo] enum."
+msgstr ""
+
+#: doc/classes/Viewport.xml:371
+msgid "Objects are displayed normally."
+msgstr ""
+
+#: doc/classes/Viewport.xml:374
+msgid "Objects are displayed without light information."
+msgstr ""
+
+#: doc/classes/Viewport.xml:377
+msgid ""
+"Objected are displayed semi-transparent with additive blending so you can "
+"see where they intersect."
+msgstr ""
+
+#: doc/classes/Viewport.xml:380
+msgid "Objects are displayed in wireframe style."
+msgstr ""
+
+#: doc/classes/Viewport.xml:383
+msgid "Multisample anti-aliasing mode disabled. This is the default value."
+msgstr ""
+
+#: doc/classes/Viewport.xml:386
+msgid "Use 2x Multisample Antialiasing."
+msgstr ""
+
+#: doc/classes/Viewport.xml:389
+msgid "Use 4x Multisample Antialiasing."
+msgstr ""
+
+#: doc/classes/Viewport.xml:392
+msgid ""
+"Use 8x Multisample Antialiasing. Likely unsupported on low-end and older "
+"hardware."
+msgstr ""
+
+#: doc/classes/Viewport.xml:395
+msgid ""
+"Use 16x Multisample Antialiasing. Likely unsupported on medium and low-end "
+"hardware."
+msgstr ""
+
+#: doc/classes/Viewport.xml:398
+msgid ""
+"Allocates all buffers needed for drawing 2D scenes. This takes less VRAM "
+"than the 3D usage modes. Note that 3D rendering effects such as glow and HDR "
+"are not available when using this mode."
+msgstr ""
+
+#: doc/classes/Viewport.xml:401
+msgid ""
+"Allocates buffers needed for 2D scenes without allocating a buffer for "
+"screen copy. Accordingly, you cannot read from the screen. Of the [enum "
+"Usage] types, this requires the least VRAM. Note that 3D rendering effects "
+"such as glow and HDR are not available when using this mode."
+msgstr ""
+
+#: doc/classes/Viewport.xml:404
+msgid ""
+"Allocates full buffers for drawing 3D scenes and all 3D effects including "
+"buffers needed for 2D scenes and effects."
+msgstr ""
+
+#: doc/classes/Viewport.xml:407
+msgid ""
+"Allocates buffers needed for drawing 3D scenes. But does not allocate "
+"buffers needed for reading from the screen and post-processing effects. "
+"Saves some VRAM."
+msgstr ""
+
+#: doc/classes/Viewport.xml:410
+msgid "Always clear the render target before drawing."
+msgstr ""
+
+#: doc/classes/Viewport.xml:413
+msgid "Never clear the render target."
+msgstr ""
+
+#: doc/classes/Viewport.xml:416
+msgid ""
+"Clear the render target next frame, then switch to [constant "
+"CLEAR_MODE_NEVER]."
+msgstr ""
+
+#: doc/classes/ViewportContainer.xml:4
+msgid "Control for holding [Viewport]s."
+msgstr ""
+
+#: doc/classes/ViewportContainer.xml:7
+msgid ""
+"A [Container] node that holds a [Viewport], automatically setting its size.\n"
+"[b]Note:[/b] Changing a ViewportContainer's [member Control.rect_scale] will "
+"cause its contents to appear distorted. To change its visual size without "
+"causing distortion, adjust the node's margins instead (if it's not already "
+"in a container)."
+msgstr ""
+
+#: doc/classes/ViewportContainer.xml:16
+msgid ""
+"If [code]true[/code], the viewport will be scaled to the control's size."
+msgstr ""
+
+#: doc/classes/ViewportContainer.xml:19
+msgid ""
+"Divides the viewport's effective resolution by this value while preserving "
+"its scale. This can be used to speed up rendering.\n"
+"For example, a 1280×720 viewport with [member stretch_shrink] set to "
+"[code]2[/code] will be rendered at 640×360 while occupying the same size in "
+"the container.\n"
+"[b]Note:[/b] [member stretch] must be [code]true[/code] for this property to "
+"work."
+msgstr ""
+
+#: doc/classes/ViewportTexture.xml:4
+msgid "Texture which displays the content of a [Viewport]."
+msgstr ""
+
+#: doc/classes/ViewportTexture.xml:7
+msgid ""
+"Displays the content of a [Viewport] node as a dynamic [Texture]. This can "
+"be used to mix controls, 2D, and 3D elements in the same scene.\n"
+"To create a ViewportTexture in code, use the [method Viewport.get_texture] "
+"method on the target viewport."
+msgstr ""
+
+#: doc/classes/ViewportTexture.xml:22
+msgid ""
+"The path to the [Viewport] node to display. This is relative to the scene "
+"root, not to the node which uses the texture."
+msgstr ""
+
+#: doc/classes/VisibilityEnabler.xml:4 doc/classes/VisibilityEnabler2D.xml:4
+msgid "Enables certain nodes only when approximately visible."
+msgstr ""
+
+#: doc/classes/VisibilityEnabler.xml:7
+msgid ""
+"The VisibilityEnabler will disable [RigidBody] and [AnimationPlayer] nodes "
+"when they are not visible. It will only affect other nodes within the same "
+"scene as the VisibilityEnabler itself.\n"
+"If you just want to receive notifications, use [VisibilityNotifier] "
+"instead.\n"
+"[b]Note:[/b] VisibilityEnabler uses an approximate heuristic for performance "
+"reasons. It doesn't take walls and other occlusion into account. The "
+"heuristic is an implementation detail and may change in future versions. If "
+"you need precise visibility checking, use another method such as adding an "
+"[Area] node as a child of a [Camera] node and/or [method Vector3.dot].\n"
+"[b]Note:[/b] VisibilityEnabler will not affect nodes added after scene "
+"initialization."
+msgstr ""
+
+#: doc/classes/VisibilityEnabler.xml:19 doc/classes/VisibilityEnabler2D.xml:19
+msgid ""
+"Returns whether the enabler identified by given [enum Enabler] constant is "
+"active."
+msgstr ""
+
+#: doc/classes/VisibilityEnabler.xml:27 doc/classes/VisibilityEnabler2D.xml:27
+msgid ""
+"Sets active state of the enabler identified by given [enum Enabler] constant."
+msgstr ""
+
+#: doc/classes/VisibilityEnabler.xml:33
+msgid "If [code]true[/code], [RigidBody] nodes will be paused."
+msgstr ""
+
+#: doc/classes/VisibilityEnabler.xml:36 doc/classes/VisibilityEnabler2D.xml:39
+msgid "If [code]true[/code], [AnimationPlayer] nodes will be paused."
+msgstr ""
+
+#: doc/classes/VisibilityEnabler.xml:41 doc/classes/VisibilityEnabler2D.xml:53
+msgid "This enabler will pause [AnimationPlayer] nodes."
+msgstr ""
+
+#: doc/classes/VisibilityEnabler.xml:44
+msgid "This enabler will freeze [RigidBody] nodes."
+msgstr ""
+
+#: doc/classes/VisibilityEnabler.xml:47 doc/classes/VisibilityEnabler2D.xml:71
+msgid "Represents the size of the [enum Enabler] enum."
+msgstr ""
+
+#: doc/classes/VisibilityEnabler2D.xml:7
+msgid ""
+"The VisibilityEnabler2D will disable [RigidBody2D], [AnimationPlayer], and "
+"other nodes when they are not visible. It will only affect nodes with the "
+"same root node as the VisibilityEnabler2D, and the root node itself.\n"
+"If you just want to receive notifications, use [VisibilityNotifier2D] "
+"instead.\n"
+"[b]Note:[/b] For performance reasons, VisibilityEnabler2D uses an "
+"approximate heuristic with precision determined by [member ProjectSettings."
+"world/2d/cell_size]. If you need precise visibility checking, use another "
+"method such as adding an [Area2D] node as a child of a [Camera2D] node.\n"
+"[b]Note:[/b] VisibilityEnabler2D will not affect nodes added after scene "
+"initialization."
+msgstr ""
+
+#: doc/classes/VisibilityEnabler2D.xml:33
+msgid "If [code]true[/code], [RigidBody2D] nodes will be paused."
+msgstr ""
+
+#: doc/classes/VisibilityEnabler2D.xml:36
+msgid "If [code]true[/code], [AnimatedSprite] nodes will be paused."
+msgstr ""
+
+#: doc/classes/VisibilityEnabler2D.xml:42
+msgid "If [code]true[/code], [Particles2D] nodes will be paused."
+msgstr ""
+
+#: doc/classes/VisibilityEnabler2D.xml:45
+msgid ""
+"If [code]true[/code], the parent's [method Node._physics_process] will be "
+"stopped."
+msgstr ""
+
+#: doc/classes/VisibilityEnabler2D.xml:48
+msgid ""
+"If [code]true[/code], the parent's [method Node._process] will be stopped."
+msgstr ""
+
+#: doc/classes/VisibilityEnabler2D.xml:56
+msgid "This enabler will freeze [RigidBody2D] nodes."
+msgstr ""
+
+#: doc/classes/VisibilityEnabler2D.xml:59
+msgid "This enabler will stop [Particles2D] nodes."
+msgstr ""
+
+#: doc/classes/VisibilityEnabler2D.xml:62
+msgid "This enabler will stop the parent's _process function."
+msgstr ""
+
+#: doc/classes/VisibilityEnabler2D.xml:65
+msgid "This enabler will stop the parent's _physics_process function."
+msgstr ""
+
+#: doc/classes/VisibilityEnabler2D.xml:68
+msgid "This enabler will stop [AnimatedSprite] nodes animations."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier.xml:4 doc/classes/VisibilityNotifier2D.xml:4
+msgid "Detects approximately when the node is visible on screen."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier.xml:7
+msgid ""
+"The VisibilityNotifier detects when it is visible on the screen. It also "
+"notifies when its bounding rectangle enters or exits the screen or a "
+"[Camera]'s view.\n"
+"If you want nodes to be disabled automatically when they exit the screen, "
+"use [VisibilityEnabler] instead.\n"
+"[b]Note:[/b] VisibilityNotifier uses an approximate heuristic for "
+"performance reasons. It doesn't take walls and other occlusion into account. "
+"The heuristic is an implementation detail and may change in future versions. "
+"If you need precise visibility checking, use another method such as adding "
+"an [Area] node as a child of a [Camera] node and/or [method Vector3.dot]."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier.xml:17
+msgid ""
+"If [code]true[/code], the bounding box is on the screen.\n"
+"[b]Note:[/b] It takes one frame for the node's visibility to be assessed "
+"once added to the scene tree, so this method will return [code]false[/code] "
+"right after it is instantiated, even if it will be on screen in the draw "
+"pass."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier.xml:24
+msgid "The VisibilityNotifier's bounding box."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier.xml:31
+msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier.xml:37
+msgid "Emitted when the VisibilityNotifier exits a [Camera]'s view."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier.xml:42
+msgid "Emitted when the VisibilityNotifier enters the screen."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier.xml:47
+msgid "Emitted when the VisibilityNotifier exits the screen."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier2D.xml:7
+msgid ""
+"The VisibilityNotifier2D detects when it is visible on the screen. It also "
+"notifies when its bounding rectangle enters or exits the screen or a "
+"viewport.\n"
+"If you want nodes to be disabled automatically when they exit the screen, "
+"use [VisibilityEnabler2D] instead.\n"
+"[b]Note:[/b] For performance reasons, VisibilityNotifier2D uses an "
+"approximate heuristic with precision determined by [member ProjectSettings."
+"world/2d/cell_size]. If you need precise visibility checking, use another "
+"method such as adding an [Area2D] node as a child of a [Camera2D] node."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier2D.xml:18
+msgid ""
+"If [code]true[/code], the bounding rectangle is on the screen.\n"
+"[b]Note:[/b] It takes one frame for the node's visibility to be assessed "
+"once added to the scene tree, so this method will return [code]false[/code] "
+"right after it is instantiated, even if it will be on screen in the draw "
+"pass."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier2D.xml:25
+msgid "The VisibilityNotifier2D's bounding rectangle."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier2D.xml:31
+msgid "Emitted when the VisibilityNotifier2D enters the screen."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier2D.xml:36
+msgid "Emitted when the VisibilityNotifier2D exits the screen."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier2D.xml:42
+msgid "Emitted when the VisibilityNotifier2D enters a [Viewport]'s view."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier2D.xml:48
+msgid "Emitted when the VisibilityNotifier2D exits a [Viewport]'s view."
+msgstr ""
+
+#: doc/classes/VisualInstance.xml:4
+msgid "Parent of all visual 3D nodes."
+msgstr ""
+
+#: doc/classes/VisualInstance.xml:7
+msgid ""
+"The [VisualInstance] is used to connect a resource to a visual "
+"representation. All visual 3D nodes inherit from the [VisualInstance]. In "
+"general, you should not access the [VisualInstance] properties directly as "
+"they are accessed and managed by the nodes that inherit from "
+"[VisualInstance]. [VisualInstance] is the node representation of the "
+"[VisualServer] instance."
+msgstr ""
+
+#: doc/classes/VisualInstance.xml:15
+msgid ""
+"Returns the [AABB] (also known as the bounding box) for this "
+"[VisualInstance]. See also [method get_transformed_aabb]."
+msgstr ""
+
+#: doc/classes/VisualInstance.xml:21
+msgid ""
+"Returns the RID of the resource associated with this [VisualInstance]. For "
+"example, if the Node is a [MeshInstance], this will return the RID of the "
+"associated [Mesh]."
+msgstr ""
+
+#: doc/classes/VisualInstance.xml:27
+msgid ""
+"Returns the RID of this instance. This RID is the same as the RID returned "
+"by [method VisualServer.instance_create]. This RID is needed if you want to "
+"call [VisualServer] functions directly on this [VisualInstance]."
+msgstr ""
+
+#: doc/classes/VisualInstance.xml:34
+msgid ""
+"Returns [code]true[/code] when the specified layer is enabled in [member "
+"layers] and [code]false[/code] otherwise."
+msgstr ""
+
+#: doc/classes/VisualInstance.xml:40
+msgid ""
+"Returns the transformed [AABB] (also known as the bounding box) for this "
+"[VisualInstance].\n"
+"Transformed in this case means the [AABB] plus the position, rotation, and "
+"scale of the [Spatial]'s [Transform]. See also [method get_aabb]."
+msgstr ""
+
+#: doc/classes/VisualInstance.xml:48
+msgid ""
+"Sets the resource that is instantiated by this [VisualInstance], which "
+"changes how the engine handles the [VisualInstance] under the hood. "
+"Equivalent to [method VisualServer.instance_set_base]."
+msgstr ""
+
+#: doc/classes/VisualInstance.xml:56
+msgid "Enables a particular layer in [member layers]."
+msgstr ""
+
+#: doc/classes/VisualInstance.xml:62
+msgid ""
+"The render layer(s) this [VisualInstance] is drawn on.\n"
+"This object will only be visible for [Camera]s whose cull mask includes the "
+"render object this [VisualInstance] is set to."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:4
+msgid "A script implemented in the Visual Script programming environment."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:7
+msgid ""
+"A script implemented in the Visual Script programming environment. The "
+"script extends the functionality of all objects that instance it.\n"
+"[method Object.set_script] extends an existing object, if that object's "
+"class matches one of the script's base classes.\n"
+"You are most likely to use this class via the Visual Script editor or when "
+"writing plugins for it."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:12
+msgid ""
+"https://docs.godotengine.org/en/3.4/getting_started/scripting/visual_script/"
+"index.html"
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:19
+msgid "Add a custom signal with the specified name to the VisualScript."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:26
+msgid "Add a function with the specified name to the VisualScript."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:36
+msgid "Add a node to a function of the VisualScript."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:45
+msgid ""
+"Add a variable to the VisualScript, optionally giving it a default value or "
+"marking it as exported."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:55
+msgid ""
+"Add an argument to a custom signal added with [method add_custom_signal]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:62
+msgid "Get the count of a custom signal's arguments."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:70
+msgid "Get the name of a custom signal's argument."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:78
+msgid "Get the type of a custom signal's argument."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:86
+msgid "Remove a specific custom signal's argument."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:95
+msgid "Rename a custom signal's argument."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:104
+msgid "Change the type of a custom signal's argument."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:113
+msgid "Swap two of the arguments of a custom signal."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:124
+msgid ""
+"Connect two data ports. The value of [code]from_node[/code]'s "
+"[code]from_port[/code] would be fed into [code]to_node[/code]'s "
+"[code]to_port[/code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:135
+msgid ""
+"Disconnect two data ports previously connected with [method data_connect]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:142
+msgid "Returns the id of a function's entry point node."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:149
+msgid "Returns the position of the center of the screen for a given function."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:157
+msgid "Returns a node given its id and its function."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:165
+msgid "Returns a node's position in pixels."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:172
+msgid "Returns the default (initial) value of a variable."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:179
+msgid "Returns whether a variable is exported."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:186
+msgid ""
+"Returns the information for a given variable as a dictionary. The "
+"information includes its name, type, hint and usage."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:193
+msgid "Returns whether a signal exists with the specified name."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:204
+msgid "Returns whether the specified data ports are connected."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:211
+msgid "Returns whether a function exists with the specified name."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:219
+msgid "Returns whether a node exists with the given id."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:229
+msgid "Returns whether the specified sequence ports are connected."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:236
+msgid "Returns whether a variable exists with the specified name."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:243
+msgid "Remove a custom signal with the given name."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:250
+msgid "Remove a specific function and its nodes from the script."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:258
+msgid "Remove a specific node."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:265
+msgid "Remove a variable with the given name."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:273
+msgid "Change the name of a custom signal."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:281
+msgid "Change the name of a function."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:289
+msgid "Change the name of a variable."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:299
+msgid ""
+"Connect two sequence ports. The execution will flow from of [code]from_node[/"
+"code]'s [code]from_output[/code] into [code]to_node[/code].\n"
+"Unlike [method data_connect], there isn't a [code]to_port[/code], since the "
+"target node can have only one sequence port."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:310
+msgid ""
+"Disconnect two sequence ports previously connected with [method "
+"sequence_connect]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:318
+msgid "Position the center of the screen for a function."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:325
+msgid "Set the base type of the script."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:334
+msgid "Position a node on the screen."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:342
+msgid "Change the default (initial) value of a variable."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:350
+msgid "Change whether a variable is exported."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:358
+msgid ""
+"Set a variable's info, using the same format as [method get_variable_info]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:367
+msgid "Emitted when the ports of a node are changed."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBasicTypeConstant.xml:4
+msgid "A Visual Script node representing a constant from the base types."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBasicTypeConstant.xml:7
+msgid ""
+"A Visual Script node representing a constant from base types, such as "
+"[constant Vector3.AXIS_X]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBasicTypeConstant.xml:15
+msgid "The type to get the constant from."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBasicTypeConstant.xml:18
+msgid "The name of the constant to return."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:4
+msgid "A Visual Script node used to call built-in functions."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:7
+msgid ""
+"A built-in function used inside a [VisualScript]. It is usually a math "
+"function or an utility function.\n"
+"See also [@GDScript], for the same functions in the GDScript language."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:16
+msgid "The function to be executed."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:21
+msgid "Return the sine of the input."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:24
+msgid "Return the cosine of the input."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:27
+msgid "Return the tangent of the input."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:30
+msgid "Return the hyperbolic sine of the input."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:33
+msgid "Return the hyperbolic cosine of the input."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:36
+msgid "Return the hyperbolic tangent of the input."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:39
+msgid "Return the arc sine of the input."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:42
+msgid "Return the arc cosine of the input."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:45
+msgid "Return the arc tangent of the input."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:48
+msgid ""
+"Return the arc tangent of the input, using the signs of both parameters to "
+"determine the exact angle."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:51
+msgid "Return the square root of the input."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:54
+msgid ""
+"Return the remainder of one input divided by the other, using floating-point "
+"numbers."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:57
+msgid ""
+"Return the positive remainder of one input divided by the other, using "
+"floating-point numbers."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:60
+msgid "Return the input rounded down."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:63
+msgid "Return the input rounded up."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:66
+msgid "Return the input rounded to the nearest integer."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:69
+msgid "Return the absolute value of the input."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:72
+msgid ""
+"Return the sign of the input, turning it into 1, -1, or 0. Useful to "
+"determine if the input is positive or negative."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:75
+msgid "Return the input raised to a given power."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:78
+msgid ""
+"Return the natural logarithm of the input. Note that this is not the typical "
+"base-10 logarithm function calculators use."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:81
+msgid ""
+"Return the mathematical constant [b]e[/b] raised to the specified power of "
+"the input. [b]e[/b] has an approximate value of 2.71828."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:84
+msgid ""
+"Return whether the input is NaN (Not a Number) or not. NaN is usually "
+"produced by dividing 0 by 0, though other ways exist."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:87
+msgid ""
+"Return whether the input is an infinite floating-point number or not. "
+"Infinity is usually produced by dividing a number by 0, though other ways "
+"exist."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:90
+msgid ""
+"Easing function, based on exponent. 0 is constant, 1 is linear, 0 to 1 is "
+"ease-in, 1+ is ease out. Negative values are in-out/out in."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:93
+msgid ""
+"Return the number of digit places after the decimal that the first non-zero "
+"digit occurs."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:96
+msgid "Return the input snapped to a given step."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:99
+msgid ""
+"Return a number linearly interpolated between the first two inputs, based on "
+"the third input. Uses the formula [code]a + (a - b) * t[/code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:106
+msgid "Moves the number toward a value, based on the third input."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:109
+msgid ""
+"Return the result of [code]value[/code] decreased by [code]step[/code] * "
+"[code]amount[/code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:112
+msgid ""
+"Randomize the seed (or the internal state) of the random number generator. "
+"Current implementation reseeds using a number based on time."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:115
+msgid ""
+"Return a random 32 bits integer value. To obtain a random value between 0 to "
+"N (where N is smaller than 2^32 - 1), you can use it with the remainder "
+"function."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:118
+msgid ""
+"Return a random floating-point value between 0 and 1. To obtain a random "
+"value between 0 to N, you can use it with multiplication."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:121
+msgid "Return a random floating-point value between the two inputs."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:124
+msgid "Set the seed for the random number generator."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:127
+msgid "Return a random value from the given seed, along with the new seed."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:130
+msgid "Convert the input from degrees to radians."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:133
+msgid "Convert the input from radians to degrees."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:136
+msgid "Convert the input from linear volume to decibel volume."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:139
+msgid "Convert the input from decibel volume to linear volume."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:152
+msgid "Return the greater of the two numbers, also known as their maximum."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:155
+msgid "Return the lesser of the two numbers, also known as their minimum."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:158
+msgid ""
+"Return the input clamped inside the given range, ensuring the result is "
+"never outside it. Equivalent to [code]min(max(input, range_low), range_high)"
+"[/code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:161
+msgid "Return the nearest power of 2 to the input."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:164
+msgid "Create a [WeakRef] from the input."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:167
+msgid "Create a [FuncRef] from the input."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:170
+msgid "Convert between types."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:173
+msgid ""
+"Return the type of the input as an integer. Check [enum Variant.Type] for "
+"the integers that might be returned."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:176
+msgid "Checks if a type is registered in the [ClassDB]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:179
+msgid "Return a character with the given ascii value."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:182
+msgid "Convert the input to a string."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:185
+msgid "Print the given string to the output window."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:188
+msgid "Print the given string to the standard error output."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:191
+msgid ""
+"Print the given string to the standard output, without adding a newline."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:194
+msgid "Serialize a [Variant] to a string."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:197
+msgid ""
+"Deserialize a [Variant] from a string serialized using [constant VAR_TO_STR]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:200
+msgid "Serialize a [Variant] to a [PoolByteArray]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:203
+msgid ""
+"Deserialize a [Variant] from a [PoolByteArray] serialized using [constant "
+"VAR_TO_BYTES]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:206
+msgid ""
+"Return the [Color] with the given name and alpha ranging from 0 to 1.\n"
+"[b]Note:[/b] Names are defined in [code]color_names.inc[/code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:210
+msgid ""
+"Return a number smoothly interpolated between the first two inputs, based on "
+"the third input. Similar to [constant MATH_LERP], but interpolates faster at "
+"the beginning and slower at the end. Using Hermite interpolation formula:\n"
+"[codeblock]\n"
+"var t = clamp((weight - from) / (to - from), 0.0, 1.0)\n"
+"return t * t * (3.0 - 2.0 * t)\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:223
+msgid "Represents the size of the [enum BuiltinFunc] enum."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptClassConstant.xml:4
+msgid "Gets a constant from a given class."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptClassConstant.xml:7
+msgid ""
+"This node returns a constant from a given class, such as [constant "
+"TYPE_INT]. See the given class' documentation for available constants.\n"
+"[b]Input Ports:[/b]\n"
+"none\n"
+"[b]Output Ports:[/b]\n"
+"- Data (variant): [code]value[/code]"
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptClassConstant.xml:19
+msgid "The constant's parent class."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptClassConstant.xml:22
+msgid ""
+"The constant to return. See the given class for its available constants."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptComment.xml:4
+msgid "A Visual Script node used to annotate the script."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptComment.xml:7
+msgid ""
+"A Visual Script node used to display annotations in the script, so that code "
+"may be documented.\n"
+"Comment nodes can be resized so they encompass a group of nodes."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptComment.xml:16
+msgid "The text inside the comment node."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptComment.xml:19
+msgid "The comment node's size (in pixels)."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptComment.xml:22
+msgid "The comment node's title."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptComposeArray.xml:4
+msgid "A Visual Script Node used to create array from a list of items."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptComposeArray.xml:7
+msgid ""
+"A Visual Script Node used to compose array from the list of elements "
+"provided with custom in-graph UI hard coded in the VisualScript Editor."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCondition.xml:4
+msgid "A Visual Script node which branches the flow."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCondition.xml:7
+msgid ""
+"A Visual Script node that checks a [bool] input port. If [code]true[/code], "
+"it will exit via the \"true\" sequence port. If [code]false[/code], it will "
+"exit via the \"false\" sequence port. After exiting either, it exits via the "
+"\"done\" port. Sequence ports may be left disconnected.\n"
+"[b]Input Ports:[/b]\n"
+"- Sequence: [code]if (cond) is[/code]\n"
+"- Data (boolean): [code]cond[/code]\n"
+"[b]Output Ports:[/b]\n"
+"- Sequence: [code]true[/code]\n"
+"- Sequence: [code]false[/code]\n"
+"- Sequence: [code]done[/code]"
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptConstant.xml:4
+msgid "Gets a contant's value."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptConstant.xml:7
+msgid ""
+"This node returns a constant's value.\n"
+"[b]Input Ports:[/b]\n"
+"none\n"
+"[b]Output Ports:[/b]\n"
+"- Data (variant): [code]get[/code]"
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptConstant.xml:19
+msgid "The constant's type."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptConstant.xml:22
+msgid "The constant's value."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptConstructor.xml:4
+msgid "A Visual Script node which calls a base type constructor."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptConstructor.xml:7
+msgid ""
+"A Visual Script node which calls a base type constructor. It can be used for "
+"type conversion as well."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:4
+msgid "A scripted Visual Script node."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:7
+msgid "A custom Visual Script node which can be scripted in powerful ways."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:15
+msgid "Return the node's title."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:21
+msgid "Return the node's category."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:27
+msgid "Return the count of input value ports."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:34
+msgid ""
+"Return the specified input port's hint. See the [enum @GlobalScope."
+"PropertyHint] hints."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:41
+msgid "Return the specified input port's hint string."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:48
+msgid "Return the specified input port's name."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:55
+msgid ""
+"Return the specified input port's type. See the [enum Variant.Type] values."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:61
+msgid "Return the amount of output [b]sequence[/b] ports."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:68
+msgid "Return the specified [b]sequence[/b] output's name."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:74
+msgid "Return the amount of output value ports."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:81
+msgid ""
+"Return the specified output port's hint. See the [enum @GlobalScope."
+"PropertyHint] hints."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:88
+msgid "Return the specified output port's hint string."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:95
+msgid "Return the specified output port's name."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:102
+msgid ""
+"Return the specified output port's type. See the [enum Variant.Type] values."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:108
+msgid ""
+"Return the custom node's text, which is shown right next to the input "
+"[b]sequence[/b] port (if there is none, on the place that is usually taken "
+"by it)."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:114
+msgid ""
+"Return the size of the custom node's working memory. See [method _step] for "
+"more details."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:120
+msgid "Return whether the custom node has an input [b]sequence[/b] port."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:130
+msgid ""
+"Execute the custom node's logic, returning the index of the output sequence "
+"port to use or a [String] when there is an error.\n"
+"The [code]inputs[/code] array contains the values of the input ports.\n"
+"[code]outputs[/code] is an array whose indices should be set to the "
+"respective outputs.\n"
+"The [code]start_mode[/code] is usually [constant START_MODE_BEGIN_SEQUENCE], "
+"unless you have used the [code]STEP_*[/code] constants.\n"
+"[code]working_mem[/code] is an array which can be used to persist "
+"information between runs of the custom node. The size needs to be predefined "
+"using [method _get_working_memory_size].\n"
+"When returning, you can mask the returned value with one of the "
+"[code]STEP_*[/code] constants."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:141
+msgid "The start mode used the first time when [method _step] is called."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:144
+msgid ""
+"The start mode used when [method _step] is called after coming back from a "
+"[constant STEP_PUSH_STACK_BIT]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:147
+msgid ""
+"The start mode used when [method _step] is called after resuming from "
+"[constant STEP_YIELD_BIT]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:150
+msgid ""
+"Hint used by [method _step] to tell that control should return to it when "
+"there is no other node left to execute.\n"
+"This is used by [VisualScriptCondition] to redirect the sequence to the "
+"\"Done\" port after the [code]true[/code]/[code]false[/code] branch has "
+"finished execution."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:154
+msgid ""
+"Hint used by [method _step] to tell that control should return back, either "
+"hitting a previous [constant STEP_PUSH_STACK_BIT] or exiting the function."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:159
+msgid ""
+"Hint used by [method _step] to tell that control should stop and exit the "
+"function."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:162
+msgid ""
+"Hint used by [method _step] to tell that the function should be yielded.\n"
+"Using this requires you to have at least one working memory slot, which is "
+"used for the [VisualScriptFunctionState]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptDeconstruct.xml:4
+#: modules/visual_script/doc_classes/VisualScriptDeconstruct.xml:7
+msgid ""
+"A Visual Script node which deconstructs a base type instance into its parts."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptDeconstruct.xml:15
+msgid "The type to deconstruct."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptEditor.xml:16
+msgid ""
+"Add a custom Visual Script node to the editor. It'll be placed under "
+"\"Custom Nodes\" with the [code]category[/code] as the parameter."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptEditor.xml:24
+msgid ""
+"Remove a custom Visual Script node from the editor. Custom nodes already "
+"placed on scripts won't be removed."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptEditor.xml:31
+msgid "Emitted when a custom Visual Script node is added or removed."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptEmitSignal.xml:4
+msgid "Emits a specified signal."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptEmitSignal.xml:7
+msgid ""
+"Emits a specified signal when it is executed.\n"
+"[b]Input Ports:[/b]\n"
+"- Sequence: [code]emit[/code]\n"
+"[b]Output Ports:[/b]\n"
+"- Sequence"
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptEmitSignal.xml:19
+msgid "The signal to emit."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptEngineSingleton.xml:4
+#: modules/visual_script/doc_classes/VisualScriptEngineSingleton.xml:7
+msgid "A Visual Script node returning a singleton from [@GlobalScope]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptEngineSingleton.xml:15
+msgid "The singleton's name."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptExpression.xml:4
+msgid "A Visual Script node that can execute a custom expression."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptExpression.xml:7
+msgid ""
+"A Visual Script node that can execute a custom expression. Values can be "
+"provided for the input and the expression result can be retrieved from the "
+"output."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunction.xml:4
+msgid "A Visual Script node representing a function."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunction.xml:7
+msgid ""
+"[VisualScriptFunction] represents a function header. It is the starting "
+"point for the function body and can be used to tweak the function's "
+"properties (e.g. RPC mode)."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:4
+msgid "A Visual Script node for calling a function."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:7
+msgid ""
+"[VisualScriptFunctionCall] is created when you add or drag and drop a "
+"function onto the Visual Script graph. It allows to tweak parameters of the "
+"call, e.g. what object the function is called on."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:15
+msgid ""
+"The script to be used when [member call_mode] is set to [constant "
+"CALL_MODE_INSTANCE]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:18
+#: modules/visual_script/doc_classes/VisualScriptYieldSignal.xml:15
+msgid ""
+"The base type to be used when [member call_mode] is set to [constant "
+"CALL_MODE_INSTANCE]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:21
+msgid ""
+"The type to be used when [member call_mode] is set to [constant "
+"CALL_MODE_BASIC_TYPE]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:24
+msgid ""
+"[code]call_mode[/code] determines the target object on which the method will "
+"be called. See [enum CallMode] for options."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:27
+msgid "The name of the function to be called."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:30
+#: modules/visual_script/doc_classes/VisualScriptYieldSignal.xml:21
+msgid ""
+"The node path to use when [member call_mode] is set to [constant "
+"CALL_MODE_NODE_PATH]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:33
+msgid ""
+"The mode for RPC calls. See [method Node.rpc] for more details and [enum "
+"RPCCallMode] for available options."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:36
+msgid ""
+"The singleton to call the method on. Used when [member call_mode] is set to "
+"[constant CALL_MODE_SINGLETON]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:39
+msgid ""
+"Number of default arguments that will be used when calling the function. "
+"Can't be higher than the number of available default arguments in the "
+"method's declaration."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:42
+msgid ""
+"If [code]false[/code], call errors (e.g. wrong number of arguments) will be "
+"ignored."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:47
+msgid "The method will be called on this [Object]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:50
+msgid "The method will be called on the given [Node] in the scene tree."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:53
+msgid ""
+"The method will be called on an instanced node with the given type and "
+"script."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:56
+msgid "The method will be called on a GDScript basic type (e.g. [Vector2])."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:59
+msgid "The method will be called on a singleton."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:62
+msgid "The method will be called locally."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:65
+msgid "The method will be called remotely."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:68
+msgid "The method will be called remotely using an unreliable protocol."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:71
+msgid "The method will be called remotely for the given peer."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:74
+msgid ""
+"The method will be called remotely for the given peer, using an unreliable "
+"protocol."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionState.xml:4
+msgid "A Visual Script node representing a function state."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionState.xml:7
+msgid ""
+"[VisualScriptFunctionState] is returned from [VisualScriptYield] and can be "
+"used to resume a paused function call."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionState.xml:18
+msgid ""
+"Connects this [VisualScriptFunctionState] to a signal in the given object to "
+"automatically resume when it's emitted."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionState.xml:24
+msgid "Returns whether the function state is valid."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionState.xml:31
+msgid "Resumes the function to run from the point it was yielded."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptGlobalConstant.xml:4
+#: modules/visual_script/doc_classes/VisualScriptGlobalConstant.xml:7
+msgid "A Visual Script node returning a constant from [@GlobalScope]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptGlobalConstant.xml:15
+msgid "The constant to be used."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptIndexGet.xml:4
+msgid "A Visual Script node for getting a value from an array or a dictionary."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptIndexGet.xml:7
+msgid ""
+"[VisualScriptIndexGet] will return the value stored in an array or a "
+"dictionary under the given index."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptIndexSet.xml:4
+msgid "A Visual Script node for setting a value in an array or a dictionary."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptIndexSet.xml:7
+msgid ""
+"[VisualScriptIndexSet] will set the value stored in an array or a dictionary "
+"under the given index to the provided new value."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptInputAction.xml:4
+msgid "A Visual Script node returning a state of an action."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptInputAction.xml:7
+msgid ""
+"[VisualScriptInputAction] can be used to check if an action is pressed or "
+"released."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptInputAction.xml:15
+msgid "Name of the action."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptInputAction.xml:18
+msgid "State of the action to check. See [enum Mode] for options."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptInputAction.xml:23
+msgid "[code]True[/code] if action is pressed."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptInputAction.xml:26
+msgid "[code]True[/code] if action is released (i.e. not pressed)."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptInputAction.xml:29
+msgid "[code]True[/code] on the frame the action was pressed."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptInputAction.xml:32
+msgid "[code]True[/code] on the frame the action was released."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptIterator.xml:4
+msgid "Steps through items in a given input."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptIterator.xml:7
+msgid ""
+"This node steps through each item in a given input. Input can be any "
+"sequence data type, such as an [Array] or [String]. When each item has been "
+"processed, execution passed out the [code]exit[/code] Sequence port.\n"
+"[b]Input Ports:[/b]\n"
+"- Sequence: [code]for (elem) in (input)[/code]\n"
+"- Data (variant): [code]input[/code]\n"
+"[b]Output Ports:[/b]\n"
+"- Sequence: [code]each[/code]\n"
+"- Sequence: [code]exit[/code]\n"
+"- Data (variant): [code]elem[/code]"
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptLists.xml:4
+msgid "A Visual Script virtual class for in-graph editable nodes."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptLists.xml:7
+msgid ""
+"A Visual Script virtual class that defines the shape and the default "
+"behavior of the nodes that have to be in-graph editable nodes."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptLists.xml:18
+msgid "Adds an input port to the Visual Script node."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptLists.xml:27
+msgid "Adds an output port to the Visual Script node."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptLists.xml:34
+msgid "Removes an input port from the Visual Script node."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptLists.xml:41
+msgid "Removes an output port from the Visual Script node."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptLists.xml:49
+msgid "Sets the name of an input port."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptLists.xml:57
+msgid "Sets the type of an input port."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptLists.xml:65
+msgid "Sets the name of an output port."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptLists.xml:73
+msgid "Sets the type of an output port."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptLocalVar.xml:4
+msgid "Gets a local variable's value."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptLocalVar.xml:7
+msgid ""
+"Returns a local variable's value. \"Var Name\" must be supplied, with an "
+"optional type.\n"
+"[b]Input Ports:[/b]\n"
+"none\n"
+"[b]Output Ports:[/b]\n"
+"- Data (variant): [code]get[/code]"
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptLocalVar.xml:19
+#: modules/visual_script/doc_classes/VisualScriptLocalVarSet.xml:21
+msgid "The local variable's type."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptLocalVar.xml:22
+#: modules/visual_script/doc_classes/VisualScriptLocalVarSet.xml:24
+msgid "The local variable's name."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptLocalVarSet.xml:4
+msgid "Changes a local variable's value."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptLocalVarSet.xml:7
+msgid ""
+"Changes a local variable's value to the given input. The new value is also "
+"provided on an output Data port.\n"
+"[b]Input Ports:[/b]\n"
+"- Sequence\n"
+"- Data (variant): [code]set[/code]\n"
+"[b]Output Ports:[/b]\n"
+"- Sequence\n"
+"- Data (variant): [code]get[/code]"
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptMathConstant.xml:4
+msgid "Commonly used mathematical constants."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptMathConstant.xml:7
+msgid ""
+"Provides common math constants, such as Pi, on an output Data port.\n"
+"[b]Input Ports:[/b]\n"
+"none\n"
+"[b]Output Ports:[/b]\n"
+"- Data (variant): [code]get[/code]"
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptMathConstant.xml:19
+msgid "The math constant."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptMathConstant.xml:24
+msgid "Unity: [code]1[/code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptMathConstant.xml:27
+msgid "Pi: [code]3.141593[/code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptMathConstant.xml:30
+msgid "Pi divided by two: [code]1.570796[/code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptMathConstant.xml:33
+msgid "Tau: [code]6.283185[/code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptMathConstant.xml:36
+msgid ""
+"Mathematical constant [code]e[/code], the natural log base: [code]2.718282[/"
+"code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptMathConstant.xml:39
+msgid "Square root of two: [code]1.414214[/code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptMathConstant.xml:42
+msgid "Infinity: [code]inf[/code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptMathConstant.xml:45
+msgid "Not a number: [code]nan[/code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptMathConstant.xml:48
+msgid "Represents the size of the [enum MathConstant] enum."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptNode.xml:4
+msgid "A node which is part of a [VisualScript]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptNode.xml:7
+msgid ""
+"A node which is part of a [VisualScript]. Not to be confused with [Node], "
+"which is a part of a [SceneTree]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptNode.xml:16
+msgid ""
+"Returns the default value of a given port. The default value is used when "
+"nothing is connected to the port."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptNode.xml:22
+msgid "Returns the [VisualScript] instance the node is bound to."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptNode.xml:28
+msgid ""
+"Notify that the node's ports have changed. Usually used in conjunction with "
+"[VisualScriptCustomNode] ."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptNode.xml:36
+msgid "Change the default value of a given port."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptNode.xml:43
+msgid "Emitted when the available input/output ports are changed."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptOperator.xml:4
+msgid "A Visual Script node that performs an operation on two values."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptOperator.xml:7
+msgid ""
+"[b]Input Ports:[/b]\n"
+"- Data (variant): [code]A[/code]\n"
+"- Data (variant): [code]B[/code]\n"
+"[b]Output Ports:[/b]\n"
+"- Data (variant): [code]result[/code]"
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptOperator.xml:19
+msgid ""
+"The operation to be performed. See [enum Variant.Operator] for available "
+"options."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptOperator.xml:22
+msgid ""
+"The type of the values for this operation. See [enum Variant.Type] for "
+"available options."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPreload.xml:4
+msgid "Creates a new [Resource] or loads one from the filesystem."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPreload.xml:7
+msgid ""
+"Creates a new [Resource] or loads one from the filesystem.\n"
+"[b]Input Ports:[/b]\n"
+"none\n"
+"[b]Output Ports:[/b]\n"
+"- Data (object): [code]res[/code]"
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPreload.xml:19
+msgid "The [Resource] to load."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertyGet.xml:4
+msgid "A Visual Script node returning a value of a property from an [Object]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertyGet.xml:7
+msgid ""
+"[VisualScriptPropertyGet] can return a value of any property from the "
+"current object or other objects."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertyGet.xml:15
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:18
+msgid ""
+"The script to be used when [member set_mode] is set to [constant "
+"CALL_MODE_INSTANCE]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertyGet.xml:18
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:21
+msgid ""
+"The base type to be used when [member set_mode] is set to [constant "
+"CALL_MODE_INSTANCE]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertyGet.xml:21
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:24
+msgid ""
+"The type to be used when [member set_mode] is set to [constant "
+"CALL_MODE_BASIC_TYPE]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertyGet.xml:24
+msgid ""
+"The indexed name of the property to retrieve. See [method Object."
+"get_indexed] for details."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertyGet.xml:27
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:30
+msgid ""
+"The node path to use when [member set_mode] is set to [constant "
+"CALL_MODE_NODE_PATH]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertyGet.xml:30
+msgid ""
+"The name of the property to retrieve. Changing this will clear [member "
+"index]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertyGet.xml:33
+msgid ""
+"[code]set_mode[/code] determines the target object from which the property "
+"will be retrieved. See [enum CallMode] for options."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertyGet.xml:38
+msgid "The property will be retrieved from this [Object]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertyGet.xml:41
+msgid "The property will be retrieved from the given [Node] in the scene tree."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertyGet.xml:44
+msgid ""
+"The property will be retrieved from an instanced node with the given type "
+"and script."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertyGet.xml:47
+msgid ""
+"The property will be retrieved from a GDScript basic type (e.g. [Vector2])."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:4
+msgid "A Visual Script node that sets a property of an [Object]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:7
+msgid ""
+"[VisualScriptPropertySet] can set the value of any property from the current "
+"object or other objects."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:15
+msgid ""
+"The additional operation to perform when assigning. See [enum AssignOp] for "
+"options."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:27
+msgid ""
+"The indexed name of the property to set. See [method Object.set_indexed] for "
+"details."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:33
+msgid ""
+"The name of the property to set. Changing this will clear [member index]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:36
+msgid ""
+"[code]set_mode[/code] determines the target object on which the property "
+"will be set. See [enum CallMode] for options."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:41
+msgid "The property will be set on this [Object]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:44
+msgid "The property will be set on the given [Node] in the scene tree."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:47
+msgid ""
+"The property will be set on an instanced node with the given type and script."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:50
+msgid "The property will be set on a GDScript basic type (e.g. [Vector2])."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:53
+msgid "The property will be assigned regularly."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:56
+msgid ""
+"The value will be added to the property. Equivalent of doing [code]+=[/code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:59
+msgid ""
+"The value will be subtracted from the property. Equivalent of doing [code]-"
+"=[/code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:62
+msgid ""
+"The property will be multiplied by the value. Equivalent of doing [code]*=[/"
+"code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:65
+msgid ""
+"The property will be divided by the value. Equivalent of doing [code]/=[/"
+"code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:68
+msgid ""
+"A modulo operation will be performed on the property and the value. "
+"Equivalent of doing [code]%=[/code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:71
+msgid ""
+"The property will be binarly shifted to the left by the given value. "
+"Equivalent of doing [code]<<[/code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:74
+msgid ""
+"The property will be binarly shifted to the right by the given value. "
+"Equivalent of doing [code]>>[/code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:77
+msgid ""
+"A binary [code]AND[/code] operation will be performed on the property. "
+"Equivalent of doing [code]&=[/code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:80
+msgid ""
+"A binary [code]OR[/code] operation will be performed on the property. "
+"Equivalent of doing [code]|=[/code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:83
+msgid ""
+"A binary [code]XOR[/code] operation will be performed on the property. "
+"Equivalent of doing [code]^=[/code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptReturn.xml:4
+msgid "Exits a function and returns an optional value."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptReturn.xml:7
+msgid ""
+"Ends the execution of a function and returns control to the calling "
+"function. Optionally, it can return a [Variant] value.\n"
+"[b]Input Ports:[/b]\n"
+"- Sequence\n"
+"- Data (variant): [code]result[/code] (optional)\n"
+"[b]Output Ports:[/b]\n"
+"none"
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptReturn.xml:20
+msgid "If [code]true[/code], the [code]return[/code] input port is available."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptReturn.xml:23
+msgid "The return value's data type."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptSceneNode.xml:4
+msgid "Node reference."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptSceneNode.xml:7
+msgid ""
+"A direct reference to a node.\n"
+"[b]Input Ports:[/b]\n"
+"none\n"
+"[b]Output Ports:[/b]\n"
+"- Data: [code]node[/code] (obj)"
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptSceneNode.xml:19
+msgid "The node's path in the scene tree."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptSceneTree.xml:4
+#: modules/visual_script/doc_classes/VisualScriptSceneTree.xml:7
+msgid "A Visual Script node for accessing [SceneTree] methods."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptSelect.xml:4
+msgid "Chooses between two input values."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptSelect.xml:7
+msgid ""
+"Chooses between two input values based on a Boolean condition.\n"
+"[b]Input Ports:[/b]\n"
+"- Data (boolean): [code]cond[/code]\n"
+"- Data (variant): [code]a[/code]\n"
+"- Data (variant): [code]b[/code]\n"
+"[b]Output Ports:[/b]\n"
+"- Data (variant): [code]out[/code]"
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptSelect.xml:21
+msgid "The input variables' type."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptSelf.xml:4
+msgid "Outputs a reference to the current instance."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptSelf.xml:7
+msgid ""
+"Provides a reference to the node running the visual script.\n"
+"[b]Input Ports:[/b]\n"
+"none\n"
+"[b]Output Ports:[/b]\n"
+"- Data (object): [code]instance[/code]"
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptSequence.xml:4
+msgid "Executes a series of Sequence ports."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptSequence.xml:7
+msgid ""
+"Steps through a series of one or more output Sequence ports. The "
+"[code]current[/code] data port outputs the currently executing item.\n"
+"[b]Input Ports:[/b]\n"
+"- Sequence: [code]in order[/code]\n"
+"[b]Output Ports:[/b]\n"
+"- Sequence: [code]1[/code]\n"
+"- Sequence: [code]2 - n[/code] (optional)\n"
+"- Data (int): [code]current[/code]"
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptSequence.xml:21
+msgid "The number of steps in the sequence."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptSubCall.xml:4
+msgid "Calls a method called [code]_subcall[/code] in this object."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptSubCall.xml:7
+msgid ""
+"[VisualScriptSubCall] will call method named [code]_subcall[/code] in the "
+"current script. It will fail if the method doesn't exist or the provided "
+"arguments are wrong."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptSubCall.xml:16
+msgid "Called by this node."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptSwitch.xml:4
+msgid "Branches program flow based on a given input's value."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptSwitch.xml:7
+msgid ""
+"Branches the flow based on an input's value. Use [b]Case Count[/b] in the "
+"Inspector to set the number of branches and each comparison's optional "
+"type.\n"
+"[b]Input Ports:[/b]\n"
+"- Sequence: [code]'input' is[/code]\n"
+"- Data (variant): [code]=[/code]\n"
+"- Data (variant): [code]=[/code] (optional)\n"
+"- Data (variant): [code]input[/code]\n"
+"[b]Output Ports:[/b]\n"
+"- Sequence\n"
+"- Sequence (optional)\n"
+"- Sequence: [code]done[/code]"
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptTypeCast.xml:4
+msgid "A Visual Script node that casts the given value to another type."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptTypeCast.xml:7
+msgid ""
+"[VisualScriptTypeCast] will perform a type conversion to an [Object]-derived "
+"type."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptTypeCast.xml:15
+msgid ""
+"The target script class to be converted to. If none, only the [member "
+"base_type] will be used."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptTypeCast.xml:18
+msgid "The target type to be converted to."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptVariableGet.xml:4
+msgid "Gets a variable's value."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptVariableGet.xml:7
+msgid ""
+"Returns a variable's value. \"Var Name\" must be supplied, with an optional "
+"type.\n"
+"[b]Input Ports:[/b]\n"
+"none\n"
+"[b]Output Ports:[/b]\n"
+"- Data (variant): [code]value[/code]"
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptVariableGet.xml:19
+#: modules/visual_script/doc_classes/VisualScriptVariableSet.xml:20
+msgid "The variable's name."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptVariableSet.xml:4
+msgid "Changes a variable's value."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptVariableSet.xml:7
+msgid ""
+"Changes a variable's value to the given input.\n"
+"[b]Input Ports:[/b]\n"
+"- Sequence\n"
+"- Data (variant): [code]set[/code]\n"
+"[b]Output Ports:[/b]\n"
+"- Sequence"
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptWhile.xml:4
+msgid "Conditional loop."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptWhile.xml:7
+msgid ""
+"Loops while a condition is [code]true[/code]. Execution continues out the "
+"[code]exit[/code] Sequence port when the loop terminates.\n"
+"[b]Input Ports:[/b]\n"
+"- Sequence: [code]while(cond)[/code]\n"
+"- Data (bool): [code]cond[/code]\n"
+"[b]Output Ports:[/b]\n"
+"- Sequence: [code]repeat[/code]\n"
+"- Sequence: [code]exit[/code]"
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptYield.xml:4
+msgid "A Visual Script node used to pause a function execution."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptYield.xml:7
+msgid ""
+"[VisualScriptYield] will pause the function call and return "
+"[VisualScriptFunctionState], which can be used to resume the function."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptYield.xml:15
+msgid ""
+"The mode to use for yielding. See [enum YieldMode] for available options."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptYield.xml:18
+msgid "The time to wait when [member mode] is set to [constant YIELD_WAIT]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptYield.xml:23
+msgid "Yields during an idle frame."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptYield.xml:26
+msgid "Yields during a physics frame."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptYield.xml:29
+msgid "Yields a function and waits the given time."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptYieldSignal.xml:4
+msgid "A Visual Script node yielding for a signal."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptYieldSignal.xml:7
+msgid ""
+"[VisualScriptYieldSignal] will pause the function execution until the "
+"provided signal is emitted."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptYieldSignal.xml:18
+msgid ""
+"[code]call_mode[/code] determines the target object to wait for the signal "
+"emission. See [enum CallMode] for options."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptYieldSignal.xml:24
+msgid "The signal name to be waited for."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptYieldSignal.xml:29
+msgid "A signal from this [Object] will be used."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptYieldSignal.xml:32
+msgid "A signal from the given [Node] in the scene tree will be used."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptYieldSignal.xml:35
+msgid "A signal from an instanced node with the given type will be used."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:4
+msgid "Server for anything visible."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:7
+msgid ""
+"Server for anything visible. The visual server is the API backend for "
+"everything visible. The whole scene system mounts on it to display.\n"
+"The visual server is completely opaque, the internals are entirely "
+"implementation specific and cannot be accessed.\n"
+"The visual server can be used to bypass the scene system entirely.\n"
+"Resources are created using the [code]*_create[/code] functions.\n"
+"All objects are drawn to a viewport. You can use the [Viewport] attached to "
+"the [SceneTree] or you can create one yourself with [method "
+"viewport_create]. When using a custom scenario or canvas, the scenario or "
+"canvas needs to be attached to the viewport using [method "
+"viewport_set_scenario] or [method viewport_attach_canvas].\n"
+"In 3D, all visual objects must be associated with a scenario. The scenario "
+"is a visual representation of the world. If accessing the visual server from "
+"a running game, the scenario can be accessed from the scene tree from any "
+"[Spatial] node with [method Spatial.get_world]. Otherwise, a scenario can be "
+"created with [method scenario_create].\n"
+"Similarly, in 2D, a canvas is needed to draw all canvas items.\n"
+"In 3D, all visible objects are comprised of a resource and an instance. A "
+"resource can be a mesh, a particle system, a light, or any other 3D object. "
+"In order to be visible resources must be attached to an instance using "
+"[method instance_set_base]. The instance must also be attached to the "
+"scenario using [method instance_set_scenario] in order to be visible.\n"
+"In 2D, all visible objects are some form of canvas item. In order to be "
+"visible, a canvas item needs to be the child of a canvas attached to a "
+"viewport, or it needs to be the child of another canvas item that is "
+"eventually attached to the canvas."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:18
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/optimization/using_servers.html"
+msgstr ""
+
+#: doc/classes/VisualServer.xml:28
+msgid "Sets images to be rendered in the window margin."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:38
+msgid ""
+"Sets margin size, where black bars (or images, if [method "
+"black_bars_set_images] was used) are rendered."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:44
+msgid ""
+"Creates a camera and adds it to the VisualServer. It can be accessed with "
+"the RID that is returned. This RID will be used in all [code]camera_*[/code] "
+"VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:53
+msgid ""
+"Sets the cull mask associated with this camera. The cull mask describes "
+"which 3D layers are rendered by this camera. Equivalent to [member Camera."
+"cull_mask]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:61
+msgid ""
+"Sets the environment used by this camera. Equivalent to [member Camera."
+"environment]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:72
+msgid ""
+"Sets camera to use frustum projection. This mode allows adjusting the "
+"[code]offset[/code] argument to create \"tilted frustum\" effects."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:82
+msgid ""
+"Sets camera to use orthogonal projection, also known as orthographic "
+"projection. Objects remain the same size on the screen no matter how far "
+"away they are."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:92
+msgid ""
+"Sets camera to use perspective projection. Objects on the screen becomes "
+"smaller when they are far away."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:100
+msgid "Sets [Transform] of camera."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:108
+msgid ""
+"If [code]true[/code], preserves the horizontal aspect ratio which is "
+"equivalent to [constant Camera.KEEP_WIDTH]. If [code]false[/code], preserves "
+"the vertical aspect ratio which is equivalent to [constant Camera."
+"KEEP_HEIGHT]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:114
+msgid ""
+"Creates a canvas and returns the assigned [RID]. It can be accessed with the "
+"RID that is returned. This RID will be used in all [code]canvas_*[/code] "
+"VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:125
+msgid "Adds a circle command to the [CanvasItem]'s draw commands."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:133
+msgid ""
+"If ignore is [code]true[/code], the VisualServer does not perform clipping."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:145
+msgid "Adds a line command to the [CanvasItem]'s draw commands."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:157
+msgid "Adds a mesh command to the [CanvasItem]'s draw commands."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:167
+msgid ""
+"Adds a [MultiMesh] to the [CanvasItem]'s draw commands. Only affects its "
+"aabb at the moment."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:184
+msgid ""
+"Adds a nine patch image to the [CanvasItem]'s draw commands.\n"
+"See [NinePatchRect] for more explanation."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:195
+msgid "Adds a particle system to the [CanvasItem]'s draw commands."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:208
+msgid "Adds a polygon to the [CanvasItem]'s draw commands."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:219
+msgid ""
+"Adds a polyline, which is a line from multiple points with a width, to the "
+"[CanvasItem]'s draw commands."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:232
+msgid "Adds a primitive to the [CanvasItem]'s draw commands."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:241
+msgid "Adds a rectangle to the [CanvasItem]'s draw commands."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:249
+msgid ""
+"Adds a [Transform2D] command to the [CanvasItem]'s draw commands.\n"
+"This sets the extra_matrix uniform when executed. This affects the later "
+"commands of the canvas item."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:263
+msgid "Adds a textured rect to the [CanvasItem]'s draw commands."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:277
+msgid ""
+"Adds a texture rect with region setting to the [CanvasItem]'s draw commands."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:295
+msgid "Adds a triangle array to the [CanvasItem]'s draw commands."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:302
+msgid "Clears the [CanvasItem] and removes all commands in it."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:308
+msgid ""
+"Creates a new [CanvasItem] and returns its [RID]. It can be accessed with "
+"the RID that is returned. This RID will be used in all [code]canvas_item_*[/"
+"code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:317
+msgid "Sets clipping for the [CanvasItem]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:326
+msgid "Sets the [CanvasItem] to copy a rect to the backbuffer."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:335
+msgid "Defines a custom drawing rectangle for the [CanvasItem]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:343
+msgid ""
+"Enables the use of distance fields for GUI elements that are rendering "
+"distance field based fonts."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:351
+msgid "Sets [CanvasItem] to be drawn behind its parent."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:359
+msgid "Sets the index for the [CanvasItem]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:367 doc/classes/VisualServer.xml:493
+#: doc/classes/VisualServer.xml:549
+msgid ""
+"The light mask. See [LightOccluder2D] for more information on light masks."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:375
+msgid "Sets a new material to the [CanvasItem]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:383
+msgid "Sets the color that modulates the [CanvasItem] and its children."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:391
+msgid ""
+"Sets the parent for the [CanvasItem]. The parent can be another canvas item, "
+"or it can be the root canvas that is attached to the viewport."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:399
+msgid "Sets the color that modulates the [CanvasItem] without children."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:407
+msgid "Sets if [CanvasItem]'s children should be sorted by y-position."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:415
+msgid "Sets the [CanvasItem]'s [Transform2D]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:423
+msgid "Sets if the [CanvasItem] uses its parent's material."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:431
+msgid "Sets if the canvas item (including its children) is visible."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:439
+msgid ""
+"If this is enabled, the Z index of the parent will be added to the "
+"children's Z index."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:447
+msgid ""
+"Sets the [CanvasItem]'s Z index, i.e. its draw order (lower indexes are "
+"drawn first)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:455
+msgid ""
+"Attaches the canvas light to the canvas. Removes it from its previous canvas."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:461
+msgid ""
+"Creates a canvas light and adds it to the VisualServer. It can be accessed "
+"with the RID that is returned. This RID will be used in all "
+"[code]canvas_light_*[/code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:470
+msgid ""
+"Attaches a light occluder to the canvas. Removes it from its previous canvas."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:476
+msgid ""
+"Creates a light occluder and adds it to the VisualServer. It can be accessed "
+"with the RID that is returned. This RID will be used in all "
+"[code]canvas_light_ocluder_*[/code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:485
+msgid "Enables or disables light occluder."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:501
+msgid "Sets a light occluder's polygon."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:509
+msgid "Sets a light occluder's [Transform2D]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:517
+msgid "Sets the color for a light."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:525
+msgid "Enables or disables a canvas light."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:533
+msgid "Sets a canvas light's energy."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:541
+msgid "Sets a canvas light's height."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:557
+msgid ""
+"The binary mask used to determine which layers this canvas light's shadows "
+"affects. See [LightOccluder2D] for more information on light masks."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:566
+msgid "The layer range that gets rendered with this light."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:574
+msgid "The mode of the light, see [enum CanvasLightMode] constants."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:582
+msgid ""
+"Sets the texture's scale factor of the light. Equivalent to [member Light2D."
+"texture_scale]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:590
+msgid ""
+"Sets the width of the shadow buffer, size gets scaled to the next power of "
+"two for this."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:598
+msgid "Sets the color of the canvas light's shadow."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:606
+msgid "Enables or disables the canvas light's shadow."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:614
+msgid ""
+"Sets the canvas light's shadow's filter, see [enum CanvasLightShadowFilter] "
+"constants."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:622
+msgid "Sets the length of the shadow's gradient."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:630
+msgid "Smoothens the shadow. The lower, the smoother."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:638
+msgid ""
+"Sets texture to be used by light. Equivalent to [member Light2D.texture]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:646
+msgid ""
+"Sets the offset of the light's texture. Equivalent to [member Light2D."
+"offset]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:654
+msgid "Sets the canvas light's [Transform2D]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:663
+msgid ""
+"Sets the Z range of objects that will be affected by this light. Equivalent "
+"to [member Light2D.range_z_min] and [member Light2D.range_z_max]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:669
+msgid ""
+"Creates a new light occluder polygon and adds it to the VisualServer. It can "
+"be accessed with the RID that is returned. This RID will be used in all "
+"[code]canvas_occluder_polygon_*[/code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:678
+msgid ""
+"Sets an occluder polygons cull mode. See [enum "
+"CanvasOccluderPolygonCullMode] constants."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:687
+msgid "Sets the shape of the occluder polygon."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:695
+msgid "Sets the shape of the occluder polygon as lines."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:704
+msgid ""
+"A copy of the canvas item will be drawn with a local offset of the mirroring "
+"[Vector2]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:712
+msgid "Modulates all colors in the given canvas."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:718
+msgid ""
+"Creates a directional light and adds it to the VisualServer. It can be "
+"accessed with the RID that is returned. This RID can be used in most "
+"[code]light_*[/code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method.\n"
+"To place in a scene, attach this directional light to an instance using "
+"[method instance_set_base] using the returned RID."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:728
+msgid ""
+"Draws a frame. [i]This method is deprecated[/i], please use [method "
+"force_draw] instead."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:734
+msgid ""
+"Creates an environment and adds it to the VisualServer. It can be accessed "
+"with the RID that is returned. This RID will be used in all "
+"[code]environment_*[/code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:747
+msgid ""
+"Sets the values to be used with the \"Adjustment\" post-process effect. See "
+"[Environment] for more details."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:757
+msgid "Sets the ambient light parameters. See [Environment] for more details."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:765
+msgid ""
+"Sets the [i]BGMode[/i] of the environment. Equivalent to [member Environment."
+"background_mode]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:773
+msgid ""
+"Color displayed for clear areas of the scene (if using Custom color or Color"
+"+Sky background modes)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:781
+msgid "Sets the intensity of the background color."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:789
+msgid "Sets the maximum layer to use if using Canvas background mode."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:801
+msgid ""
+"Sets the values to be used with the \"DoF Far Blur\" post-process effect. "
+"See [Environment] for more details."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:813
+msgid ""
+"Sets the values to be used with the \"DoF Near Blur\" post-process effect. "
+"See [Environment] for more details."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:824
+msgid ""
+"Sets the variables to be used with the scene fog. See [Environment] for more "
+"details."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:837
+msgid ""
+"Sets the variables to be used with the fog depth effect. See [Environment] "
+"for more details."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:848
+msgid ""
+"Sets the variables to be used with the fog height effect. See [Environment] "
+"for more details."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:866
+msgid ""
+"Sets the variables to be used with the \"glow\" post-process effect. See "
+"[Environment] for more details."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:874
+msgid ""
+"Sets the [Sky] to be used as the environment's background when using "
+"[i]BGMode[/i] sky. Equivalent to [member Environment.background_sky]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:882
+msgid ""
+"Sets a custom field of view for the background [Sky]. Equivalent to [member "
+"Environment.background_sky_custom_fov]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:890
+msgid ""
+"Sets the rotation of the background [Sky] expressed as a [Basis]. Equivalent "
+"to [member Environment.background_sky_orientation]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:909
+msgid ""
+"Sets the variables to be used with the \"Screen Space Ambient Occlusion "
+"(SSAO)\" post-process effect. See [Environment] for more details."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:922
+msgid ""
+"Sets the variables to be used with the \"screen space reflections\" post-"
+"process effect. See [Environment] for more details."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:937
+msgid ""
+"Sets the variables to be used with the \"tonemap\" post-process effect. See "
+"[Environment] for more details."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:943
+msgid "Removes buffers and clears testcubes."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:951
+msgid ""
+"Forces a frame to be drawn when the function is called. Drawing a frame "
+"updates all [Viewport]s that are set to update. Use with extreme caution."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:957
+msgid "Synchronizes threads."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:964
+msgid "Tries to free an object in the VisualServer."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:971
+msgid "Returns a certain information, see [enum RenderInfo] for options."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:977
+msgid "Returns the id of the test cube. Creates one if none exists."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:983
+msgid "Returns the id of the test texture. Creates one if none exists."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:989
+msgid ""
+"Returns the name of the video adapter (e.g. \"GeForce GTX 1080/PCIe/"
+"SSE2\").\n"
+"[b]Note:[/b] When running a headless or server binary, this function returns "
+"an empty string."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:996
+msgid ""
+"Returns the vendor of the video adapter (e.g. \"NVIDIA Corporation\").\n"
+"[b]Note:[/b] When running a headless or server binary, this function returns "
+"an empty string."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1003
+msgid "Returns the id of a white texture. Creates one if none exists."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1009
+msgid ""
+"Creates a GI probe and adds it to the VisualServer. It can be accessed with "
+"the RID that is returned. This RID will be used in all [code]gi_probe_*[/"
+"code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method.\n"
+"To place in a scene, attach this GI probe to an instance using [method "
+"instance_set_base] using the returned RID."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1018
+msgid ""
+"Returns the bias value for the GI probe. Bias is used to avoid self "
+"occlusion. Equivalent to [member GIProbeData.bias]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1025
+msgid ""
+"Returns the axis-aligned bounding box that covers the full extent of the GI "
+"probe."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1032
+msgid "Returns the cell size set by [method gi_probe_set_cell_size]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1039
+msgid "Returns the data used by the GI probe."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1046
+msgid ""
+"Returns the dynamic range set for this GI probe. Equivalent to [member "
+"GIProbe.dynamic_range]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1053
+msgid ""
+"Returns the energy multiplier for this GI probe. Equivalent to [member "
+"GIProbe.energy]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1060
+msgid ""
+"Returns the normal bias for this GI probe. Equivalent to [member GIProbe."
+"normal_bias]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1067
+msgid ""
+"Returns the propagation value for this GI probe. Equivalent to [member "
+"GIProbe.propagation]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1074
+msgid "Returns the Transform set by [method gi_probe_set_to_cell_xform]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1081
+msgid ""
+"Returns [code]true[/code] if the GI probe data associated with this GI probe "
+"is compressed. Equivalent to [member GIProbe.compress]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1088
+msgid ""
+"Returns [code]true[/code] if the GI probe is set to interior, meaning it "
+"does not account for sky light. Equivalent to [member GIProbe.interior]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1096
+msgid ""
+"Sets the bias value to avoid self-occlusion. Equivalent to [member GIProbe."
+"bias]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1104
+msgid ""
+"Sets the axis-aligned bounding box that covers the extent of the GI probe."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1112
+msgid "Sets the size of individual cells within the GI probe."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1120
+msgid ""
+"Sets the compression setting for the GI probe data. Compressed data will "
+"take up less space but may look worse. Equivalent to [member GIProbe."
+"compress]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1128
+msgid ""
+"Sets the data to be used in the GI probe for lighting calculations. Normally "
+"this is created and called internally within the [GIProbe] node. You should "
+"not try to set this yourself."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1136
+msgid ""
+"Sets the dynamic range of the GI probe. Dynamic range sets the limit for how "
+"bright lights can be. A smaller range captures greater detail but limits how "
+"bright lights can be. Equivalent to [member GIProbe.dynamic_range]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1144
+msgid ""
+"Sets the energy multiplier for this GI probe. A higher energy makes the "
+"indirect light from the GI probe brighter. Equivalent to [member GIProbe."
+"energy]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1152
+msgid ""
+"Sets the interior value of this GI probe. A GI probe set to interior does "
+"not include the sky when calculating lighting. Equivalent to [member GIProbe."
+"interior]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1160
+msgid ""
+"Sets the normal bias for this GI probe. Normal bias behaves similar to the "
+"other form of bias and may help reduce self-occlusion. Equivalent to [member "
+"GIProbe.normal_bias]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1168
+msgid ""
+"Sets the propagation of light within this GI probe. Equivalent to [member "
+"GIProbe.propagation]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1176
+msgid "Sets the to cell [Transform] for this GI probe."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1182
+msgid ""
+"Returns [code]true[/code] if changes have been made to the VisualServer's "
+"data. [method draw] is usually called if this happens."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1189
+msgid "Not yet implemented. Always returns [code]false[/code]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1196
+msgid ""
+"Returns [code]true[/code] if the OS supports a certain feature. Features "
+"might be [code]s3tc[/code], [code]etc[/code], [code]etc2[/code], "
+"[code]pvrtc[/code] and [code]skinning_fallback[/code].\n"
+"When rendering with GLES2, returns [code]true[/code] with "
+"[code]skinning_fallback[/code] in case the hardware doesn't support the "
+"default GPU skinning process."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1206
+msgid ""
+"Sets up [ImmediateGeometry] internals to prepare for drawing. Equivalent to "
+"[method ImmediateGeometry.begin]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1213
+msgid ""
+"Clears everything that was set up between [method immediate_begin] and "
+"[method immediate_end]. Equivalent to [method ImmediateGeometry.clear]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1221
+msgid ""
+"Sets the color to be used with next vertex. Equivalent to [method "
+"ImmediateGeometry.set_color]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1227
+msgid ""
+"Creates an immediate geometry and adds it to the VisualServer. It can be "
+"accessed with the RID that is returned. This RID will be used in all "
+"[code]immediate_*[/code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method.\n"
+"To place in a scene, attach this immediate geometry to an instance using "
+"[method instance_set_base] using the returned RID."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1236
+msgid ""
+"Ends drawing the [ImmediateGeometry] and displays it. Equivalent to [method "
+"ImmediateGeometry.end]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1243
+msgid "Returns the material assigned to the [ImmediateGeometry]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1251
+msgid ""
+"Sets the normal to be used with next vertex. Equivalent to [method "
+"ImmediateGeometry.set_normal]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1259
+msgid "Sets the material to be used to draw the [ImmediateGeometry]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1267
+msgid ""
+"Sets the tangent to be used with next vertex. Equivalent to [method "
+"ImmediateGeometry.set_tangent]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1275
+msgid ""
+"Sets the UV to be used with next vertex. Equivalent to [method "
+"ImmediateGeometry.set_uv]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1283
+msgid ""
+"Sets the UV2 to be used with next vertex. Equivalent to [method "
+"ImmediateGeometry.set_uv2]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1291
+msgid ""
+"Adds the next vertex using the information provided in advance. Equivalent "
+"to [method ImmediateGeometry.add_vertex]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1299
+msgid ""
+"Adds the next vertex using the information provided in advance. This is a "
+"helper class that calls [method immediate_vertex] under the hood. Equivalent "
+"to [method ImmediateGeometry.add_vertex]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1305
+msgid ""
+"Initializes the visual server. This function is called internally by "
+"platform-dependent code during engine initialization. If called from a "
+"running game, it will not do anything."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1313
+msgid ""
+"Attaches a unique Object ID to instance. Object ID must be attached to "
+"instance for proper culling with [method instances_cull_aabb], [method "
+"instances_cull_convex], and [method instances_cull_ray]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1321
+msgid ""
+"Attaches a skeleton to an instance. Removes the previous skeleton from the "
+"instance."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1327
+msgid ""
+"Creates a visual instance and adds it to the VisualServer. It can be "
+"accessed with the RID that is returned. This RID will be used in all "
+"[code]instance_*[/code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method.\n"
+"An instance is a way of placing a 3D object in the scenario. Objects like "
+"particles, meshes, and reflection probes need to be associated with an "
+"instance to be visible in the scenario using [method instance_set_base]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1337
+msgid ""
+"Creates a visual instance, adds it to the VisualServer, and sets both base "
+"and scenario. It can be accessed with the RID that is returned. This RID "
+"will be used in all [code]instance_*[/code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1346 doc/classes/VisualServer.xml:1365
+#: doc/classes/VisualServer.xml:1592 doc/classes/VisualServer.xml:2673
+msgid "Not implemented in Godot 3.x."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1354
+msgid ""
+"Sets the shadow casting setting to one of [enum ShadowCastingSetting]. "
+"Equivalent to [member GeometryInstance.cast_shadow]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1374
+msgid ""
+"Sets the flag for a given [enum InstanceFlags]. See [enum InstanceFlags] for "
+"more details."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1382
+msgid ""
+"Sets a material that will override the material for all surfaces on the mesh "
+"associated with this instance. Equivalent to [member GeometryInstance."
+"material_override]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1390
+msgid ""
+"Sets the base of the instance. A base can be any of the 3D objects that are "
+"created in the VisualServer that can be displayed. For example, any of the "
+"light types, mesh, multimesh, immediate geometry, particle system, "
+"reflection probe, lightmap capture, and the GI probe are all types that can "
+"be set as the base of an instance in order to be displayed in the scenario."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1399
+msgid "Sets the weight for a given blend shape associated with this instance."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1407
+msgid ""
+"Sets a custom AABB to use when culling objects from the view frustum. "
+"Equivalent to [method GeometryInstance.set_custom_aabb]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1415
+msgid "Function not implemented in Godot 3.x."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1423
+msgid ""
+"Sets a margin to increase the size of the AABB when culling objects from the "
+"view frustum. This allows you to avoid culling objects that fall outside the "
+"view frustum. Equivalent to [member GeometryInstance.extra_cull_margin]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1431
+msgid ""
+"Sets the render layers that this instance will be drawn to. Equivalent to "
+"[member VisualInstance.layers]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1439
+msgid ""
+"Sets the scenario that the instance is in. The scenario is the 3D world that "
+"the objects will be displayed in."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1448
+msgid ""
+"Sets the material of a specific surface. Equivalent to [method MeshInstance."
+"set_surface_material]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1456
+msgid ""
+"Sets the world space transform of the instance. Equivalent to [member "
+"Spatial.transform]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1467
+msgid "Sets the lightmap to use with this instance."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1475
+msgid ""
+"Sets whether an instance is drawn or not. Equivalent to [member Spatial."
+"visible]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1483
+msgid ""
+"Returns an array of object IDs intersecting with the provided AABB. Only "
+"visual 3D nodes are considered, such as [MeshInstance] or "
+"[DirectionalLight]. Use [method @GDScript.instance_from_id] to obtain the "
+"actual nodes. A scenario RID must be provided, which is available in the "
+"[World] you want to query. This forces an update for all resources queued to "
+"update.\n"
+"[b]Warning:[/b] This function is primarily intended for editor usage. For in-"
+"game use cases, prefer physics collision."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1492
+msgid ""
+"Returns an array of object IDs intersecting with the provided convex shape. "
+"Only visual 3D nodes are considered, such as [MeshInstance] or "
+"[DirectionalLight]. Use [method @GDScript.instance_from_id] to obtain the "
+"actual nodes. A scenario RID must be provided, which is available in the "
+"[World] you want to query. This forces an update for all resources queued to "
+"update.\n"
+"[b]Warning:[/b] This function is primarily intended for editor usage. For in-"
+"game use cases, prefer physics collision."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1502
+msgid ""
+"Returns an array of object IDs intersecting with the provided 3D ray. Only "
+"visual 3D nodes are considered, such as [MeshInstance] or "
+"[DirectionalLight]. Use [method @GDScript.instance_from_id] to obtain the "
+"actual nodes. A scenario RID must be provided, which is available in the "
+"[World] you want to query. This forces an update for all resources queued to "
+"update.\n"
+"[b]Warning:[/b] This function is primarily intended for editor usage. For in-"
+"game use cases, prefer physics collision."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1511
+msgid ""
+"If [code]true[/code], this directional light will blend between shadow map "
+"splits resulting in a smoother transition between them. Equivalent to "
+"[member DirectionalLight.directional_shadow_blend_splits]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1519
+msgid ""
+"Sets the shadow depth range mode for this directional light. Equivalent to "
+"[member DirectionalLight.directional_shadow_depth_range]. See [enum "
+"LightDirectionalShadowDepthRangeMode] for options."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1527
+msgid ""
+"Sets the shadow mode for this directional light. Equivalent to [member "
+"DirectionalLight.directional_shadow_mode]. See [enum "
+"LightDirectionalShadowMode] for options."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1535
+msgid ""
+"Sets whether to use vertical or horizontal detail for this omni light. This "
+"can be used to alleviate artifacts in the shadow map. Equivalent to [member "
+"OmniLight.omni_shadow_detail]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1543
+msgid ""
+"Sets whether to use a dual paraboloid or a cubemap for the shadow map. Dual "
+"paraboloid is faster but may suffer from artifacts. Equivalent to [member "
+"OmniLight.omni_shadow_mode]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1551
+msgid ""
+"Sets the bake mode for this light, see [enum LightBakeMode] for options. The "
+"bake mode affects how the light will be baked in [BakedLightmap]s and "
+"[GIProbe]s."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1559
+msgid "Sets the color of the light. Equivalent to [member Light.light_color]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1567
+msgid ""
+"Sets the cull mask for this Light. Lights only affect objects in the "
+"selected layers. Equivalent to [member Light.light_cull_mask]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1575
+msgid ""
+"If [code]true[/code], light will subtract light instead of adding light. "
+"Equivalent to [member Light.light_negative]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1584
+msgid ""
+"Sets the specified light parameter. See [enum LightParam] for options. "
+"Equivalent to [method Light.set_param]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1600
+msgid ""
+"If [code]true[/code], reverses the backface culling of the mesh. This can be "
+"useful when you have a flat mesh that has a light behind it. If you need to "
+"cast a shadow on both sides of the mesh, set the mesh to use double sided "
+"shadows with [method instance_geometry_set_cast_shadows_setting]. Equivalent "
+"to [member Light.shadow_reverse_cull_face]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1608
+msgid ""
+"If [code]true[/code], light will cast shadows. Equivalent to [member Light."
+"shadow_enabled]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1616
+msgid ""
+"Sets the color of the shadow cast by the light. Equivalent to [member Light."
+"shadow_color]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1624
+msgid ""
+"Sets whether GI probes capture light information from this light. "
+"[i]Deprecated method.[/i] Use [method light_set_bake_mode] instead. This "
+"method is only kept for compatibility reasons and calls [method "
+"light_set_bake_mode] internally, setting the bake mode to [constant "
+"LIGHT_BAKE_DISABLED] or [constant LIGHT_BAKE_INDIRECT] depending on the "
+"given parameter."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1630
+msgid ""
+"Creates a lightmap capture and adds it to the VisualServer. It can be "
+"accessed with the RID that is returned. This RID will be used in all "
+"[code]lightmap_capture_*[/code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method.\n"
+"To place in a scene, attach this lightmap capture to an instance using "
+"[method instance_set_base] using the returned RID."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1639
+msgid "Returns the size of the lightmap capture area."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1646
+msgid "Returns the energy multiplier used by the lightmap capture."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1653
+msgid "Returns the octree used by the lightmap capture."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1660
+msgid ""
+"Returns the cell subdivision amount used by this lightmap capture's octree."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1667
+msgid "Returns the cell transform for this lightmap capture's octree."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1674
+msgid "Returns [code]true[/code] if capture is in \"interior\" mode."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1682
+msgid ""
+"Sets the size of the area covered by the lightmap capture. Equivalent to "
+"[member BakedLightmapData.bounds]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1690
+msgid ""
+"Sets the energy multiplier for this lightmap capture. Equivalent to [member "
+"BakedLightmapData.energy]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1698
+msgid ""
+"Sets the \"interior\" mode for this lightmap capture. Equivalent to [member "
+"BakedLightmapData.interior]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1706
+msgid ""
+"Sets the octree to be used by this lightmap capture. This function is "
+"normally used by the [BakedLightmap] node. Equivalent to [member "
+"BakedLightmapData.octree]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1714
+msgid ""
+"Sets the subdivision level of this lightmap capture's octree. Equivalent to "
+"[member BakedLightmapData.cell_subdiv]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1722
+msgid ""
+"Sets the octree cell transform for this lightmap capture's octree. "
+"Equivalent to [member BakedLightmapData.cell_space_transform]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1731
+msgid ""
+"Returns a mesh of a sphere with the given amount of horizontal and vertical "
+"subdivisions."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1737
+msgid ""
+"Creates an empty material and adds it to the VisualServer. It can be "
+"accessed with the RID that is returned. This RID will be used in all "
+"[code]material_*[/code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1746
+msgid "Returns the value of a certain material's parameter."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1754
+msgid ""
+"Returns the default value for the param if available. Otherwise returns an "
+"empty [Variant]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1761
+msgid ""
+"Returns the shader of a certain material's shader. Returns an empty RID if "
+"the material doesn't have a shader."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1769
+msgid "Sets a material's line width."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1777
+msgid "Sets an object's next material."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1786
+msgid "Sets a material's parameter."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1794
+msgid "Sets a material's render priority."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1802
+msgid "Sets a shader material's shader."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1813
+msgid ""
+"Adds a surface generated from the Arrays to a mesh. See [enum PrimitiveType] "
+"constants for types."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1820
+msgid "Removes all surfaces from a mesh."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1826
+msgid ""
+"Creates a new mesh and adds it to the VisualServer. It can be accessed with "
+"the RID that is returned. This RID will be used in all [code]mesh_*[/code] "
+"VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method.\n"
+"To place in a scene, attach this mesh to an instance using [method "
+"instance_set_base] using the returned RID."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1835
+msgid "Returns a mesh's blend shape count."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1842
+msgid "Returns a mesh's blend shape mode."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1849
+msgid "Returns a mesh's custom aabb."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1856
+msgid "Returns a mesh's number of surfaces."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1864
+msgid "Removes a mesh's surface."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1872
+msgid "Sets a mesh's blend shape count."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1880
+msgid "Sets a mesh's blend shape mode."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1888
+msgid "Sets a mesh's custom aabb."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1896
+msgid "Returns a mesh's surface's aabb."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1904
+msgid "Returns a mesh's surface's vertex buffer."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1912
+msgid "Returns a mesh's surface's amount of indices."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1920
+msgid "Returns a mesh's surface's amount of vertices."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1928
+msgid "Returns a mesh's surface's buffer arrays."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1936
+msgid "Returns a mesh's surface's arrays for blend shapes."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1944
+msgid "Returns the format of a mesh's surface."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1954
+msgid "Function is unused in Godot 3.x."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1971
+msgid "Returns a mesh's surface's index buffer."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1979
+msgid "Returns a mesh's surface's material."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1987
+msgid "Returns the primitive type of a mesh's surface."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1995
+msgid "Returns the aabb of a mesh's surface's skeleton."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2004
+msgid "Sets a mesh's surface's material."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2014
+msgid ""
+"Updates a specific region of a vertex buffer for the specified surface. "
+"Warning: this function alters the vertex buffer directly with no safety "
+"mechanisms, you can easily corrupt your mesh."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2025
+msgid ""
+"Allocates space for the multimesh data. Format parameters determine how the "
+"data will be stored by OpenGL. See [enum MultimeshTransformFormat], [enum "
+"MultimeshColorFormat], and [enum MultimeshCustomDataFormat] for usage. "
+"Equivalent to [member MultiMesh.instance_count]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2031
+msgid ""
+"Creates a new multimesh on the VisualServer and returns an [RID] handle. "
+"This RID will be used in all [code]multimesh_*[/code] VisualServer "
+"functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method.\n"
+"To place in a scene, attach this multimesh to an instance using [method "
+"instance_set_base] using the returned RID."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2040
+msgid ""
+"Calculates and returns the axis-aligned bounding box that encloses all "
+"instances within the multimesh."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2047
+msgid "Returns the number of instances allocated for this multimesh."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2054
+msgid ""
+"Returns the RID of the mesh that will be used in drawing this multimesh."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2061
+msgid "Returns the number of visible instances for this multimesh."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2069
+msgid "Returns the color by which the specified instance will be modulated."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2077
+msgid "Returns the custom data associated with the specified instance."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2085
+msgid "Returns the [Transform] of the specified instance."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2093
+msgid ""
+"Returns the [Transform2D] of the specified instance. For use when the "
+"multimesh is set to use 2D transforms."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2102
+msgid ""
+"Sets the color by which this instance will be modulated. Equivalent to "
+"[method MultiMesh.set_instance_color]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2111
+msgid ""
+"Sets the custom data for this instance. Custom data is passed as a [Color], "
+"but is interpreted as a [code]vec4[/code] in the shader. Equivalent to "
+"[method MultiMesh.set_instance_custom_data]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2120
+msgid ""
+"Sets the [Transform] for this instance. Equivalent to [method MultiMesh."
+"set_instance_transform]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2129
+msgid ""
+"Sets the [Transform2D] for this instance. For use when multimesh is used in "
+"2D. Equivalent to [method MultiMesh.set_instance_transform_2d]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2137
+msgid ""
+"Sets all data related to the instances in one go. This is especially useful "
+"when loading the data from disk or preparing the data from GDNative.\n"
+"\n"
+"All data is packed in one large float array. An array may look like this: "
+"Transform for instance 1, color data for instance 1, custom data for "
+"instance 1, transform for instance 2, color data for instance 2, etc.\n"
+"\n"
+"[Transform] is stored as 12 floats, [Transform2D] is stored as 8 floats, "
+"[code]COLOR_8BIT[/code] / [code]CUSTOM_DATA_8BIT[/code] is stored as 1 float "
+"(4 bytes as is) and [code]COLOR_FLOAT[/code] / [code]CUSTOM_DATA_FLOAT[/"
+"code] is stored as 4 floats."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2149
+msgid ""
+"Sets the mesh to be drawn by the multimesh. Equivalent to [member MultiMesh."
+"mesh]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2157
+msgid ""
+"Sets the number of instances visible at a given time. If -1, all instances "
+"that have been allocated are drawn. Equivalent to [member MultiMesh."
+"visible_instance_count]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2163
+msgid ""
+"Creates a new omni light and adds it to the VisualServer. It can be accessed "
+"with the RID that is returned. This RID can be used in most [code]light_*[/"
+"code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method.\n"
+"To place in a scene, attach this omni light to an instance using [method "
+"instance_set_base] using the returned RID."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2171
+msgid ""
+"Creates a particle system and adds it to the VisualServer. It can be "
+"accessed with the RID that is returned. This RID will be used in all "
+"[code]particles_*[/code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method.\n"
+"To place in a scene, attach these particles to an instance using [method "
+"instance_set_base] using the returned RID."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2180
+msgid ""
+"Calculates and returns the axis-aligned bounding box that contains all the "
+"particles. Equivalent to [method Particles.capture_aabb]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2187
+msgid "Returns [code]true[/code] if particles are currently set to emitting."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2194
+msgid ""
+"Returns [code]true[/code] if particles are not emitting and particles are "
+"set to inactive."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2201
+msgid ""
+"Add particle system to list of particle systems that need to be updated. "
+"Update will take place on the next frame, or on the next call to [method "
+"instances_cull_aabb], [method instances_cull_convex], or [method "
+"instances_cull_ray]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2208
+msgid ""
+"Reset the particles on the next update. Equivalent to [method Particles."
+"restart]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2216
+msgid ""
+"Sets the number of particles to be drawn and allocates the memory for them. "
+"Equivalent to [member Particles.amount]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2224
+msgid ""
+"Sets a custom axis-aligned bounding box for the particle system. Equivalent "
+"to [member Particles.visibility_aabb]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2232
+msgid ""
+"Sets the draw order of the particles to one of the named enums from [enum "
+"ParticlesDrawOrder]. See [enum ParticlesDrawOrder] for options. Equivalent "
+"to [member Particles.draw_order]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2241
+msgid ""
+"Sets the mesh to be used for the specified draw pass. Equivalent to [member "
+"Particles.draw_pass_1], [member Particles.draw_pass_2], [member Particles."
+"draw_pass_3], and [member Particles.draw_pass_4]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2249
+msgid ""
+"Sets the number of draw passes to use. Equivalent to [member Particles."
+"draw_passes]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2257
+msgid ""
+"Sets the [Transform] that will be used by the particles when they first emit."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2265
+msgid ""
+"If [code]true[/code], particles will emit over time. Setting to false does "
+"not reset the particles, but only stops their emission. Equivalent to "
+"[member Particles.emitting]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2273
+msgid ""
+"Sets the explosiveness ratio. Equivalent to [member Particles.explosiveness]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2281
+msgid ""
+"Sets the frame rate that the particle system rendering will be fixed to. "
+"Equivalent to [member Particles.fixed_fps]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2289
+msgid ""
+"If [code]true[/code], uses fractional delta which smooths the movement of "
+"the particles. Equivalent to [member Particles.fract_delta]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2297
+msgid ""
+"Sets the lifetime of each particle in the system. Equivalent to [member "
+"Particles.lifetime]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2305
+msgid ""
+"If [code]true[/code], particles will emit once and then stop. Equivalent to "
+"[member Particles.one_shot]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2313
+msgid ""
+"Sets the preprocess time for the particles' animation. This lets you delay "
+"starting an animation until after the particles have begun emitting. "
+"Equivalent to [member Particles.preprocess]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2321
+msgid ""
+"Sets the material for processing the particles.\n"
+"[b]Note:[/b] This is not the material used to draw the materials. Equivalent "
+"to [member Particles.process_material]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2330
+msgid ""
+"Sets the emission randomness ratio. This randomizes the emission of "
+"particles within their phase. Equivalent to [member Particles.randomness]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2338
+msgid ""
+"Sets the speed scale of the particle system. Equivalent to [member Particles."
+"speed_scale]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2346
+msgid ""
+"If [code]true[/code], particles use local coordinates. If [code]false[/code] "
+"they use global coordinates. Equivalent to [member Particles.local_coords]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2352
+msgid ""
+"Creates a reflection probe and adds it to the VisualServer. It can be "
+"accessed with the RID that is returned. This RID will be used in all "
+"[code]reflection_probe_*[/code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method.\n"
+"To place in a scene, attach this reflection probe to an instance using "
+"[method instance_set_base] using the returned RID."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2362
+msgid ""
+"If [code]true[/code], reflections will ignore sky contribution. Equivalent "
+"to [member ReflectionProbe.interior_enable]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2370
+msgid ""
+"Sets the render cull mask for this reflection probe. Only instances with a "
+"matching cull mask will be rendered by this probe. Equivalent to [member "
+"ReflectionProbe.cull_mask]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2378
+msgid ""
+"If [code]true[/code], uses box projection. This can make reflections look "
+"more correct in certain situations. Equivalent to [member ReflectionProbe."
+"box_projection]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2386
+msgid ""
+"If [code]true[/code], computes shadows in the reflection probe. This makes "
+"the reflection much slower to compute. Equivalent to [member ReflectionProbe."
+"enable_shadows]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2394
+msgid ""
+"Sets the size of the area that the reflection probe will capture. Equivalent "
+"to [member ReflectionProbe.extents]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2402
+msgid ""
+"Sets the intensity of the reflection probe. Intensity modulates the strength "
+"of the reflection. Equivalent to [member ReflectionProbe.intensity]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2410
+msgid ""
+"Sets the ambient light color for this reflection probe when set to interior "
+"mode. Equivalent to [member ReflectionProbe.interior_ambient_color]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2418
+msgid ""
+"Sets the energy multiplier for this reflection probes ambient light "
+"contribution when set to interior mode. Equivalent to [member "
+"ReflectionProbe.interior_ambient_energy]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2426
+msgid ""
+"Sets the contribution value for how much the reflection affects the ambient "
+"light for this reflection probe when set to interior mode. Useful so that "
+"ambient light matches the color of the room. Equivalent to [member "
+"ReflectionProbe.interior_ambient_contrib]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2434
+msgid ""
+"Sets the max distance away from the probe an object can be before it is "
+"culled. Equivalent to [member ReflectionProbe.max_distance]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2442
+msgid ""
+"Sets the origin offset to be used when this reflection probe is in box "
+"project mode. Equivalent to [member ReflectionProbe.origin_offset]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2450
+msgid ""
+"Sets how often the reflection probe updates. Can either be once or every "
+"frame. See [enum ReflectionProbeUpdateMode] for options."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2459
+msgid ""
+"Schedules a callback to the corresponding named [code]method[/code] on "
+"[code]where[/code] after a frame has been drawn.\n"
+"The callback method must use only 1 argument which will be called with "
+"[code]userdata[/code]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2466
+msgid ""
+"Creates a scenario and adds it to the VisualServer. It can be accessed with "
+"the RID that is returned. This RID will be used in all [code]scenario_*[/"
+"code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method.\n"
+"The scenario is the 3D world that all the visual instances exist in."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2476
+msgid ""
+"Sets the [enum ScenarioDebugMode] for this scenario. See [enum "
+"ScenarioDebugMode] for options."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2484
+msgid "Sets the environment that will be used with this scenario."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2492
+msgid ""
+"Sets the fallback environment to be used by this scenario. The fallback "
+"environment is used if no environment is set. Internally, this is used by "
+"the editor to provide a default environment."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2501
+msgid ""
+"Sets the size of the reflection atlas shared by all reflection probes in "
+"this scenario."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2511
+msgid ""
+"Sets a boot image. The color defines the background color. If [code]scale[/"
+"code] is [code]true[/code], the image will be scaled to fit the screen size. "
+"If [code]use_filter[/code] is [code]true[/code], the image will be scaled "
+"with linear interpolation. If [code]use_filter[/code] is [code]false[/code], "
+"the image will be scaled with nearest-neighbor interpolation."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2518
+msgid ""
+"If [code]true[/code], the engine will generate wireframes for use with the "
+"wireframe debug mode."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2525
+msgid ""
+"Sets the default clear color which is used when a specific clear color has "
+"not been selected."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2532
+msgid ""
+"Sets the scale to apply to the passage of time for the shaders' [code]TIME[/"
+"code] builtin.\n"
+"The default value is [code]1.0[/code], which means [code]TIME[/code] will "
+"count the real time as it goes by, without narrowing or stretching it."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2540
+msgid "Enables or disables occlusion culling."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2546
+msgid ""
+"Creates an empty shader and adds it to the VisualServer. It can be accessed "
+"with the RID that is returned. This RID will be used in all [code]shader_*[/"
+"code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2554
+msgid "Returns a shader's code."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2562
+msgid "Returns a default texture from a shader searched by name."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2569
+msgid "Returns the parameters of a shader."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2577
+msgid "Sets a shader's code."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2586
+msgid "Sets a shader's default texture. Overwrites the texture given by name."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2595
+msgid "Allocates the GPU buffers for this skeleton."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2603
+msgid "Returns the [Transform] set for a specific bone of this skeleton."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2611
+msgid "Returns the [Transform2D] set for a specific bone of this skeleton."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2620
+msgid "Sets the [Transform] for a specific bone of this skeleton."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2629
+msgid "Sets the [Transform2D] for a specific bone of this skeleton."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2635
+msgid ""
+"Creates a skeleton and adds it to the VisualServer. It can be accessed with "
+"the RID that is returned. This RID will be used in all [code]skeleton_*[/"
+"code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2643
+msgid "Returns the number of bones allocated for this skeleton."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2649
+msgid ""
+"Creates an empty sky and adds it to the VisualServer. It can be accessed "
+"with the RID that is returned. This RID will be used in all [code]sky_*[/"
+"code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2659
+msgid "Sets a sky's texture."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2665
+msgid ""
+"Creates a spot light and adds it to the VisualServer. It can be accessed "
+"with the RID that is returned. This RID can be used in most [code]light_*[/"
+"code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method.\n"
+"To place in a scene, attach this spot light to an instance using [method "
+"instance_set_base] using the returned RID."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2686
+msgid "Allocates the GPU memory for the texture."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2694
+msgid "Binds the texture to a texture slot."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2700
+msgid ""
+"Creates an empty texture and adds it to the VisualServer. It can be accessed "
+"with the RID that is returned. This RID will be used in all [code]texture_*[/"
+"code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2709
+msgid ""
+"Creates a texture, allocates the space for an image, and fills in the image."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2715
+msgid "Returns a list of all the textures and their information."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2723
+msgid ""
+"Returns a copy of a texture's image unless it's a CubeMap, in which case it "
+"returns the [RID] of the image at one of the cubes sides."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2730
+msgid "Returns the depth of the texture."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2737
+msgid "Returns the flags of a texture."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2744
+msgid "Returns the format of the texture's image."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2751
+msgid "Returns the texture's height."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2758
+msgid "Returns the texture's path."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2765
+msgid "Returns the opengl id of the texture's image."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2772
+msgid "Returns the type of the texture, can be any of the [enum TextureType]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2779
+msgid "Returns the texture's width."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2788
+msgid ""
+"Sets the texture's image data. If it's a CubeMap, it sets the image data at "
+"a cube side."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2804
+msgid ""
+"Sets a part of the data for a texture. Warning: this function calls the "
+"underlying graphics API directly and may corrupt your texture if used "
+"improperly."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2812
+msgid "Sets the texture's flags. See [enum TextureFlags] for options."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2820
+msgid "Sets the texture's path."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2827
+msgid ""
+"If [code]true[/code], sets internal processes to shrink all image data to "
+"half the size."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2844
+msgid ""
+"If [code]true[/code], the image will be stored in the texture's images array "
+"if overwritten."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2852
+msgid "Sets a viewport's camera."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2860
+msgid "Sets a viewport's canvas."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2869
+msgid ""
+"Copies viewport to a region of the screen specified by [code]rect[/code]. If "
+"[member Viewport.render_direct_to_screen] is [code]true[/code], then "
+"viewport does not use a framebuffer and the contents of the viewport are "
+"rendered directly to screen. However, note that the root viewport is drawn "
+"last, therefore it will draw over the screen. Accordingly, you must set the "
+"root viewport to an area that does not cover the area that you have attached "
+"this viewport to.\n"
+"For example, you can set the root viewport to not render at all with the "
+"following code:\n"
+"[codeblock]\n"
+"func _ready():\n"
+" get_viewport().set_attach_to_screen_rect(Rect2())\n"
+" $Viewport.set_attach_to_screen_rect(Rect2(0, 0, 600, 600))\n"
+"[/codeblock]\n"
+"Using this can result in significant optimization, especially on lower-end "
+"devices. However, it comes at the cost of having to manage your viewports "
+"manually. For a further optimization see, [method "
+"viewport_set_render_direct_to_screen]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2882
+msgid ""
+"Creates an empty viewport and adds it to the VisualServer. It can be "
+"accessed with the RID that is returned. This RID will be used in all "
+"[code]viewport_*[/code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2890
+msgid "Detaches the viewport from the screen."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2898
+msgid ""
+"Returns a viewport's render information. For options, see the [enum "
+"ViewportRenderInfo] constants."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2905
+msgid "Returns the viewport's last rendered frame."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2913
+msgid "Detaches a viewport from a canvas and vice versa."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2921
+msgid "If [code]true[/code], sets the viewport active, else sets it inactive."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2931
+msgid ""
+"Sets the stacking order for a viewport's canvas.\n"
+"[code]layer[/code] is the actual canvas layer, while [code]sublayer[/code] "
+"specifies the stacking order of the canvas among those in the same layer."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2941
+msgid "Sets the transformation of a viewport's canvas."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2949
+msgid ""
+"Sets the clear mode of a viewport. See [enum ViewportClearMode] for options."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2957
+msgid ""
+"Sets the debug draw mode of a viewport. See [enum ViewportDebugDraw] for "
+"options."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2965
+msgid "If [code]true[/code], a viewport's 3D rendering is disabled."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2973
+msgid ""
+"If [code]true[/code], rendering of a viewport's environment is disabled."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2981
+msgid "Sets the viewport's global transformation matrix."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2989
+msgid "If [code]true[/code], the viewport renders to hdr."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2997
+msgid "If [code]true[/code], the viewport's canvas is not rendered."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3005
+msgid "Currently unimplemented in Godot 3.x."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3013
+msgid "Sets the anti-aliasing mode. See [enum ViewportMSAA] for options."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3021
+msgid "Sets the viewport's parent to another viewport."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3029
+msgid ""
+"If [code]true[/code], render the contents of the viewport directly to "
+"screen. This allows a low-level optimization where you can skip drawing a "
+"viewport to the root viewport. While this optimization can result in a "
+"significant increase in speed (especially on older devices), it comes at a "
+"cost of usability. When this is enabled, you cannot read from the viewport "
+"or from the [code]SCREEN_TEXTURE[/code]. You also lose the benefit of "
+"certain window settings, such as the various stretch modes. Another "
+"consequence to be aware of is that in 2D the rendering happens in window "
+"coordinates, so if you have a viewport that is double the size of the "
+"window, and you set this, then only the portion that fits within the window "
+"will be drawn, no automatic scaling is possible, even if your game scene is "
+"significantly larger than the window size."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3037
+msgid ""
+"Sets a viewport's scenario.\n"
+"The scenario contains information about the [enum ScenarioDebugMode], "
+"environment information, reflection atlas etc."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3047
+msgid "Sets the shadow atlas quadrant's subdivision."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3055
+msgid ""
+"Sets the size of the shadow atlas's images (used for omni and spot lights). "
+"The value will be rounded up to the nearest power of 2."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3063
+msgid ""
+"Sets the sharpening [code]intensity[/code] for the [code]viewport[/code]. If "
+"set to a value greater than [code]0.0[/code], contrast-adaptive sharpening "
+"will be applied to the 3D viewport. This has a low performance cost and can "
+"be used to recover some of the sharpness lost from using FXAA. Values around "
+"[code]0.5[/code] generally give the best results. See also [method "
+"viewport_set_use_fxaa]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3072
+msgid "Sets the viewport's width and height."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3080
+msgid ""
+"If [code]true[/code], the viewport renders its background as transparent."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3088
+msgid ""
+"Sets when the viewport should be updated. See [enum ViewportUpdateMode] "
+"constants for options."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3096
+msgid ""
+"Sets the viewport's 2D/3D mode. See [enum ViewportUsage] constants for "
+"options."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3104
+msgid ""
+"If [code]true[/code], the viewport uses augmented or virtual reality "
+"technologies. See [ARVRInterface]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3112
+msgid ""
+"If [code]true[/code], uses a fast post-processing filter to make banding "
+"significantly less visible. In some cases, debanding may introduce a "
+"slightly noticeable dithering pattern. It's recommended to enable debanding "
+"only when actually needed since the dithering pattern will make lossless-"
+"compressed screenshots larger.\n"
+"[b]Note:[/b] Only available on the GLES3 backend. [member Viewport.hdr] must "
+"also be [code]true[/code] for debanding to be effective."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3121
+msgid ""
+"Enables fast approximate antialiasing for this viewport. FXAA is a popular "
+"screen-space antialiasing method, which is fast but will make the image look "
+"blurry, especially at lower resolutions. It can still work relatively well "
+"at large resolutions such as 1440p and 4K. Some of the lost sharpness can be "
+"recovered by enabling contrast-adaptive sharpening (see [method "
+"viewport_set_sharpen_intensity])."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3129
+msgid "If [code]true[/code], the viewport's rendering is flipped vertically."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3135
+msgid ""
+"If [code]false[/code], disables rendering completely, but the engine logic "
+"is still being processed. You can call [method force_draw] to draw a frame "
+"even with rendering disabled."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3141
+msgid ""
+"Emitted at the end of the frame, after the VisualServer has finished "
+"updating all the Viewports."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3146
+msgid ""
+"Emitted at the beginning of the frame, before the VisualServer updates all "
+"the Viewports."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3152
+msgid "Marks an error that shows that the index array is empty."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3155
+msgid "Number of weights/bones per vertex."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3158
+msgid "The minimum Z-layer for canvas items."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3161
+msgid "The maximum Z-layer for canvas items."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3164
+msgid ""
+"Max number of glow levels that can be used with glow post-process effect."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3167
+msgid "Unused enum in Godot 3.x."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3170
+msgid "The minimum renderpriority of all materials."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3173
+msgid "The maximum renderpriority of all materials."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3176
+msgid "Marks the left side of a cubemap."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3179
+msgid "Marks the right side of a cubemap."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3182
+msgid "Marks the bottom side of a cubemap."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3185
+msgid "Marks the top side of a cubemap."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3188
+msgid "Marks the front side of a cubemap."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3191
+msgid "Marks the back side of a cubemap."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3194
+msgid "Normal texture with 2 dimensions, width and height."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3197
+msgid ""
+"Texture made up of six faces, can be looked up with a [code]vec3[/code] in "
+"shader."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3200
+msgid "An array of 2-dimensional textures."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3203
+msgid "A 3-dimensional texture with width, height, and depth."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3209
+msgid "Repeats the texture (instead of clamp to edge)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3222
+msgid "Repeats the texture with alternate sections mirrored."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3228
+msgid ""
+"Default flags. [constant TEXTURE_FLAG_MIPMAPS], [constant "
+"TEXTURE_FLAG_REPEAT] and [constant TEXTURE_FLAG_FILTER] are enabled."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3231
+msgid "Shader is a 3D shader."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3234
+msgid "Shader is a 2D shader."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3237
+msgid "Shader is a particle shader."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3240
+msgid "Represents the size of the [enum ShaderMode] enum."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3243
+msgid "Array is a vertex array."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3246
+msgid "Array is a normal array."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3249
+msgid "Array is a tangent array."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3252
+msgid "Array is a color array."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3255
+msgid "Array is an UV coordinates array."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3258
+msgid "Array is an UV coordinates array for the second UV coordinates."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3261
+msgid "Array contains bone information."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3264
+msgid "Array is weight information."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3267
+msgid "Array is index array."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3273
+msgid "Flag used to mark a vertex array."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3276
+msgid "Flag used to mark a normal array."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3279
+msgid "Flag used to mark a tangent array."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3282
+msgid "Flag used to mark a color array."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3285
+msgid "Flag used to mark an UV coordinates array."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3288
+msgid ""
+"Flag used to mark an UV coordinates array for the second UV coordinates."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3291
+msgid "Flag used to mark a bone information array."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3294
+msgid "Flag used to mark a weights array."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3297
+msgid "Flag used to mark an index array."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3336
+msgid ""
+"Used to set flags [constant ARRAY_COMPRESS_NORMAL], [constant "
+"ARRAY_COMPRESS_TANGENT], [constant ARRAY_COMPRESS_COLOR], [constant "
+"ARRAY_COMPRESS_TEX_UV], [constant ARRAY_COMPRESS_TEX_UV2], [constant "
+"ARRAY_COMPRESS_WEIGHTS], and [constant "
+"ARRAY_FLAG_USE_OCTAHEDRAL_COMPRESSION] quickly."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3339
+msgid "Primitive to draw consists of points."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3342
+msgid "Primitive to draw consists of lines."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3345
+msgid "Primitive to draw consists of a line strip from start to end."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3348
+msgid ""
+"Primitive to draw consists of a line loop (a line strip with a line between "
+"the last and the first vertex)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3351
+msgid "Primitive to draw consists of triangles."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3354
+msgid ""
+"Primitive to draw consists of a triangle strip (the last 3 vertices are "
+"always combined to make a triangle)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3357
+msgid ""
+"Primitive to draw consists of a triangle strip (the last 2 vertices are "
+"always combined with the first to make a triangle)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3360
+msgid "Represents the size of the [enum PrimitiveType] enum."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3369
+msgid "Is a directional (sun) light."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3372
+msgid "Is an omni light."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3375
+msgid "Is a spot light."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3378
+msgid "The light's energy."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3381
+msgid "Secondary multiplier used with indirect light (light bounces)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3384
+msgid ""
+"The light's size, currently only used for soft shadows in baked lightmaps."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3387
+msgid "The light's influence on specularity."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3390
+msgid "The light's range."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3393
+msgid "The light's attenuation."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3396
+msgid "The spotlight's angle."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3399
+msgid "The spotlight's attenuation."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3402
+msgid "Scales the shadow color."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3405
+msgid "Max distance that shadows will be rendered."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3408
+msgid "Proportion of shadow atlas occupied by the first split."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3411
+msgid "Proportion of shadow atlas occupied by the second split."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3414
+msgid ""
+"Proportion of shadow atlas occupied by the third split. The fourth split "
+"occupies the rest."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3417
+msgid ""
+"Normal bias used to offset shadow lookup by object normal. Can be used to "
+"fix self-shadowing artifacts."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3420
+msgid "Bias the shadow lookup to fix self-shadowing artifacts."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3423
+msgid ""
+"Increases bias on further splits to fix self-shadowing that only occurs far "
+"away from the camera."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3426
+msgid "Represents the size of the [enum LightParam] enum."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3435
+msgid "Use a dual paraboloid shadow map for omni lights."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3438
+msgid ""
+"Use a cubemap shadow map for omni lights. Slower but better quality than "
+"dual paraboloid."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3441
+msgid "Use more detail vertically when computing shadow map."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3444
+msgid "Use more detail horizontally when computing shadow map."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3447
+msgid "Use orthogonal shadow projection for directional light."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3450
+msgid "Use 2 splits for shadow projection when using directional light."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3453
+msgid "Use 4 splits for shadow projection when using directional light."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3456
+msgid ""
+"Keeps shadows stable as camera moves but has lower effective resolution."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3459
+msgid ""
+"Optimize use of shadow maps, increasing the effective resolution. But may "
+"result in shadows moving or flickering slightly."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3462
+msgid "Do not update the viewport."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3465
+msgid "Update the viewport once then set to disabled."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3468
+msgid "Update the viewport whenever it is visible."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3471
+msgid "Always update the viewport."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3474
+msgid "The viewport is always cleared before drawing."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3477
+msgid "The viewport is never cleared before drawing."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3480
+msgid ""
+"The viewport is cleared once, then the clear mode is set to [constant "
+"VIEWPORT_CLEAR_NEVER]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3483
+msgid "Multisample antialiasing is disabled."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3486
+msgid "Multisample antialiasing is set to 2×."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3489
+msgid "Multisample antialiasing is set to 4×."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3492
+msgid "Multisample antialiasing is set to 8×."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3495
+msgid "Multisample antialiasing is set to 16×."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3498
+msgid ""
+"Multisample antialiasing is set to 2× on external texture. Special mode for "
+"GLES2 Android VR (Oculus Quest and Go)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3501
+msgid ""
+"Multisample antialiasing is set to 4× on external texture. Special mode for "
+"GLES2 Android VR (Oculus Quest and Go)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3504
+msgid "The Viewport does not render 3D but samples."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3507
+msgid "The Viewport does not render 3D and does not sample."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3510
+msgid "The Viewport renders 3D with effects."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3513
+msgid "The Viewport renders 3D but without effects."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3516
+msgid "Number of objects drawn in a single frame."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3519
+msgid "Number of vertices drawn in a single frame."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3522
+msgid "Number of material changes during this frame."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3525
+msgid "Number of shader changes during this frame."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3528
+msgid "Number of surface changes during this frame."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3531
+msgid "Number of draw calls during this frame."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3534
+msgid "Number of 2d items drawn this frame."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3537
+msgid "Number of 2d draw calls during this frame."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3540
+msgid "Represents the size of the [enum ViewportRenderInfo] enum."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3543
+msgid "Debug draw is disabled. Default setting."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3546
+msgid "Debug draw sets objects to unshaded."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3549
+msgid "Overwrites clear color to [code](0,0,0,0)[/code]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3552
+msgid "Debug draw draws objects in wireframe."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3555
+msgid "Do not use a debug mode."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3558
+msgid "Draw all objects as wireframe models."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3561
+msgid ""
+"Draw all objects in a way that displays how much overdraw is occurring. "
+"Overdraw occurs when a section of pixels is drawn and shaded and then "
+"another object covers it up. To optimize a scene, you should reduce overdraw."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3564
+msgid ""
+"Draw all objects without shading. Equivalent to setting all objects shaders "
+"to [code]unshaded[/code]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3567
+msgid "The instance does not have a type."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3570
+msgid "The instance is a mesh."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3573
+msgid "The instance is a multimesh."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3576
+msgid "The instance is an immediate geometry."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3579
+msgid "The instance is a particle emitter."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3582
+msgid "The instance is a light."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3585
+msgid "The instance is a reflection probe."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3588
+msgid "The instance is a GI probe."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3591
+msgid "The instance is a lightmap capture."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3594
+msgid "Represents the size of the [enum InstanceType] enum."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3597
+msgid ""
+"A combination of the flags of geometry instances (mesh, multimesh, immediate "
+"and particles)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3600
+msgid "Allows the instance to be used in baked lighting."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3603
+msgid "When set, manually requests to draw geometry on next frame."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3606
+msgid "Represents the size of the [enum InstanceFlags] enum."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3609
+msgid "Disable shadows from this instance."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3612
+msgid "Cast shadows from this instance."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3615
+msgid ""
+"Disable backface culling when rendering the shadow of the object. This is "
+"slightly slower but may result in more correct shadows."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3618
+msgid ""
+"Only render the shadows from the object. The object itself will not be drawn."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3621
+msgid "The nine patch gets stretched where needed."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3624
+msgid "The nine patch gets filled with tiles where needed."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3627
+msgid ""
+"The nine patch gets filled with tiles where needed and stretches them a bit "
+"if needed."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3630
+msgid "Adds light color additive to the canvas."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3633
+msgid "Adds light color subtractive to the canvas."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3636
+msgid "The light adds color depending on transparency."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3639
+msgid "The light adds color depending on mask."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3642
+msgid "Do not apply a filter to canvas light shadows."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3645
+msgid "Use PCF3 filtering to filter canvas light shadows."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3648
+msgid "Use PCF5 filtering to filter canvas light shadows."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3651
+msgid "Use PCF7 filtering to filter canvas light shadows."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3654
+msgid "Use PCF9 filtering to filter canvas light shadows."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3657
+msgid "Use PCF13 filtering to filter canvas light shadows."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3660
+msgid "Culling of the canvas occluder is disabled."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3663
+msgid "Culling of the canvas occluder is clockwise."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3666
+msgid "Culling of the canvas occluder is counterclockwise."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3669
+msgid "The amount of objects in the frame."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3672
+msgid "The amount of vertices in the frame."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3675
+msgid "The amount of modified materials in the frame."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3678
+msgid "The amount of shader rebinds in the frame."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3681
+msgid "The amount of surface changes in the frame."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3684
+msgid "The amount of draw calls in frame."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3687
+msgid "The amount of 2d items in the frame."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3690
+msgid "The amount of 2d draw calls in frame."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3705
+msgid "Hardware supports shaders. This enum is currently unused in Godot 3.x."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3708
+msgid ""
+"Hardware supports multithreading. This enum is currently unused in Godot 3.x."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3711
+msgid "Use [Transform2D] to store MultiMesh transform."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3714
+msgid "Use [Transform] to store MultiMesh transform."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3717
+msgid "MultiMesh does not use per-instance color."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3720
+msgid ""
+"MultiMesh color uses 8 bits per component. This packs the color into a "
+"single float."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3723
+msgid "MultiMesh color uses a float per channel."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3726
+msgid "MultiMesh does not use custom data."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3729
+msgid ""
+"MultiMesh custom data uses 8 bits per component. This packs the 4-component "
+"custom data into a single float."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3732
+msgid "MultiMesh custom data uses a float per component."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3735
+msgid "Reflection probe will update reflections once and then stop."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3738
+msgid ""
+"Reflection probe will update each frame. This mode is necessary to capture "
+"moving objects."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3741
+msgid "Draw particles in the order that they appear in the particles array."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3744
+msgid "Sort particles based on their lifetime."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3747
+msgid "Sort particles based on their distance to the camera."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3750
+msgid "Use the clear color as background."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3753
+msgid "Use a specified color as the background."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3756
+msgid "Use a sky resource for the background."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3759
+msgid ""
+"Use a custom color for background, but use a sky for shading and reflections."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3762
+msgid ""
+"Use a specified canvas layer as the background. This can be useful for "
+"instantiating a 2D scene in a 3D world."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3765
+msgid ""
+"Do not clear the background, use whatever was rendered last frame as the "
+"background."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3768
+msgid "Represents the size of the [enum EnvironmentBG] enum."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3771
+msgid "Use lowest blur quality. Fastest, but may look bad."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3774
+msgid "Use medium blur quality."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3777
+msgid "Used highest blur quality. Looks the best, but is the slowest."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3780
+msgid "Add the effect of the glow on top of the scene."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3783
+msgid ""
+"Blends the glow effect with the screen. Does not get as bright as additive."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3786
+msgid "Produces a subtle color disturbance around objects."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3789
+msgid "Shows the glow effect by itself without the underlying scene."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3792
+msgid "Output color as they came in."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3795
+msgid "Use the Reinhard tonemapper."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3798
+msgid "Use the filmic tonemapper."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3801
+msgid "Use the ACES tonemapper."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3804
+msgid "Use the ACES Fitted tonemapper."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3807
+msgid "Lowest quality of screen space ambient occlusion."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3810
+msgid "Medium quality screen space ambient occlusion."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3813
+msgid "Highest quality screen space ambient occlusion."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3816
+msgid "Disables the blur set for SSAO. Will make SSAO look noisier."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3819
+msgid "Perform a 1x1 blur on the SSAO output."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3822
+msgid "Performs a 2x2 blur on the SSAO output."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3825
+msgid "Performs a 3x3 blur on the SSAO output. Use this for smoothest SSAO."
+msgstr ""
+
+#: doc/classes/VisualShader.xml:4
+msgid "A custom shader program with a visual editor."
+msgstr ""
+
+#: doc/classes/VisualShader.xml:7
+msgid ""
+"This class allows you to define a custom shader program that can be used for "
+"various materials to render objects.\n"
+"The visual shader editor creates the shader."
+msgstr ""
+
+#: doc/classes/VisualShader.xml:20
+msgid "Adds the specified node to the shader."
+msgstr ""
+
+#: doc/classes/VisualShader.xml:31
+msgid ""
+"Returns [code]true[/code] if the specified nodes and ports can be connected "
+"together."
+msgstr ""
+
+#: doc/classes/VisualShader.xml:42 doc/classes/VisualShader.xml:64
+msgid "Connects the specified nodes and ports."
+msgstr ""
+
+#: doc/classes/VisualShader.xml:53
+msgid ""
+"Connects the specified nodes and ports, even if they can't be connected. "
+"Such connection is invalid and will not function properly."
+msgstr ""
+
+#: doc/classes/VisualShader.xml:72
+msgid ""
+"Returns the shader node instance with specified [code]type[/code] and "
+"[code]id[/code]."
+msgstr ""
+
+#: doc/classes/VisualShader.xml:79
+msgid "Returns the list of connected nodes with the specified type."
+msgstr ""
+
+#: doc/classes/VisualShader.xml:86
+msgid "Returns the list of all nodes in the shader with the specified type."
+msgstr ""
+
+#: doc/classes/VisualShader.xml:94
+msgid "Returns the position of the specified node within the shader graph."
+msgstr ""
+
+#: doc/classes/VisualShader.xml:111
+msgid ""
+"Returns [code]true[/code] if the specified node and port connection exist."
+msgstr ""
+
+#: doc/classes/VisualShader.xml:119
+msgid "Removes the specified node from the shader."
+msgstr ""
+
+#: doc/classes/VisualShader.xml:126
+msgid "Sets the mode of this shader."
+msgstr ""
+
+#: doc/classes/VisualShader.xml:135
+msgid "Sets the position of the specified node."
+msgstr ""
+
+#: doc/classes/VisualShader.xml:141
+msgid "The offset vector of the whole graph."
+msgstr ""
+
+#: doc/classes/VisualShader.xml:146
+msgid "A vertex shader, operating on vertices."
+msgstr ""
+
+#: doc/classes/VisualShader.xml:149
+msgid "A fragment shader, operating on fragments (pixels)."
+msgstr ""
+
+#: doc/classes/VisualShader.xml:152
+msgid "A shader for light calculations."
+msgstr ""
+
+#: doc/classes/VisualShader.xml:155
+msgid "Represents the size of the [enum Type] enum."
+msgstr ""
+
+#: doc/classes/VisualShaderNode.xml:4
+msgid "Base class for nodes in a visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNode.xml:7
+msgid ""
+"Visual shader graphs consist of various nodes. Each node in the graph is a "
+"separate object and they are represented as a rectangular boxes with title "
+"and a set of properties. Each node has also connection ports that allow to "
+"connect it to another nodes and control the flow of the shader."
+msgstr ""
+
+#: doc/classes/VisualShaderNode.xml:10
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/shading/visual_shaders.html"
+msgstr ""
+
+#: doc/classes/VisualShaderNode.xml:16
+msgid ""
+"Returns an [Array] containing default values for all of the input ports of "
+"the node in the form [code][index0, value0, index1, value1, ...][/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNode.xml:23
+msgid "Returns the default value of the input [code]port[/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNode.xml:30
+msgid ""
+"Sets the default input ports values using an [Array] of the form [code]"
+"[index0, value0, index1, value1, ...][/code]. For example: [code][0, "
+"Vector3(0, 0, 0), 1, Vector3(0, 0, 0)][/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNode.xml:38
+msgid "Sets the default value for the selected input [code]port[/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNode.xml:44
+msgid ""
+"Sets the output port index which will be showed for preview. If set to "
+"[code]-1[/code] no port will be open for preview."
+msgstr ""
+
+#: doc/classes/VisualShaderNode.xml:50
+msgid ""
+"Emitted when the node requests an editor refresh. Currently called only in "
+"setter of [member VisualShaderNodeTexture.source], "
+"[VisualShaderNodeTexture], and [VisualShaderNodeCubeMap] (and their "
+"derivatives)."
+msgstr ""
+
+#: doc/classes/VisualShaderNode.xml:56
+msgid ""
+"Floating-point scalar. Translated to [code]float[/code] type in shader code."
+msgstr ""
+
+#: doc/classes/VisualShaderNode.xml:59
+msgid ""
+"3D vector of floating-point values. Translated to [code]vec3[/code] type in "
+"shader code."
+msgstr ""
+
+#: doc/classes/VisualShaderNode.xml:62
+msgid "Boolean type. Translated to [code]bool[/code] type in shader code."
+msgstr ""
+
+#: doc/classes/VisualShaderNode.xml:65
+msgid "Transform type. Translated to [code]mat4[/code] type in shader code."
+msgstr ""
+
+#: doc/classes/VisualShaderNode.xml:68
+msgid ""
+"Sampler type. Translated to reference of sampler uniform in shader code. Can "
+"only be used for input ports in non-uniform nodes."
+msgstr ""
+
+#: doc/classes/VisualShaderNode.xml:71
+msgid "Represents the size of the [enum PortType] enum."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeBooleanConstant.xml:4
+msgid "A boolean constant to be used within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeBooleanConstant.xml:7
+msgid ""
+"Has only one output port and no inputs.\n"
+"Translated to [code]bool[/code] in the shader language."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeBooleanConstant.xml:16
+msgid "A boolean constant which represents a state of this node."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeBooleanUniform.xml:4
+msgid "A boolean uniform to be used within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeBooleanUniform.xml:7
+msgid "Translated to [code]uniform bool[/code] in the shader language."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorConstant.xml:4
+msgid "A [Color] constant to be used within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorConstant.xml:7
+msgid ""
+"Has two output ports representing RGB and alpha channels of [Color].\n"
+"Translated to [code]vec3 rgb[/code] and [code]float alpha[/code] in the "
+"shader language."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorConstant.xml:16
+msgid "A [Color] constant which represents a state of this node."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorFunc.xml:4
+msgid "A [Color] function to be used within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorFunc.xml:7
+msgid ""
+"Accept a [Color] to the input port and transform it according to [member "
+"function]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorFunc.xml:15
+msgid ""
+"A function to be applied to the input color. See [enum Function] for options."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorFunc.xml:20
+msgid ""
+"Converts the color to grayscale using the following formula:\n"
+"[codeblock]\n"
+"vec3 c = input;\n"
+"float max1 = max(c.r, c.g);\n"
+"float max2 = max(max1, c.b);\n"
+"float max3 = max(max1, max2);\n"
+"return vec3(max3, max3, max3);\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorFunc.xml:30
+msgid ""
+"Applies sepia tone effect using the following formula:\n"
+"[codeblock]\n"
+"vec3 c = input;\n"
+"float r = (c.r * 0.393) + (c.g * 0.769) + (c.b * 0.189);\n"
+"float g = (c.r * 0.349) + (c.g * 0.686) + (c.b * 0.168);\n"
+"float b = (c.r * 0.272) + (c.g * 0.534) + (c.b * 0.131);\n"
+"return vec3(r, g, b);\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorOp.xml:4
+msgid "A [Color] operator to be used within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorOp.xml:7
+msgid "Applies [member operator] to two color inputs."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorOp.xml:15
+msgid ""
+"An operator to be applied to the inputs. See [enum Operator] for options."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorOp.xml:20
+msgid ""
+"Produce a screen effect with the following formula:\n"
+"[codeblock]\n"
+"result = vec3(1.0) - (vec3(1.0) - a) * (vec3(1.0) - b);\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorOp.xml:26
+msgid ""
+"Produce a difference effect with the following formula:\n"
+"[codeblock]\n"
+"result = abs(a - b);\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorOp.xml:32
+msgid ""
+"Produce a darken effect with the following formula:\n"
+"[codeblock]\n"
+"result = min(a, b);\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorOp.xml:38
+msgid ""
+"Produce a lighten effect with the following formula:\n"
+"[codeblock]\n"
+"result = max(a, b);\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorOp.xml:44
+msgid ""
+"Produce an overlay effect with the following formula:\n"
+"[codeblock]\n"
+"for (int i = 0; i < 3; i++) {\n"
+" float base = a[i];\n"
+" float blend = b[i];\n"
+" if (base < 0.5) {\n"
+" result[i] = 2.0 * base * blend;\n"
+" } else {\n"
+" result[i] = 1.0 - 2.0 * (1.0 - blend) * (1.0 - base);\n"
+" }\n"
+"}\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorOp.xml:58
+msgid ""
+"Produce a dodge effect with the following formula:\n"
+"[codeblock]\n"
+"result = a / (vec3(1.0) - b);\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorOp.xml:64
+msgid ""
+"Produce a burn effect with the following formula:\n"
+"[codeblock]\n"
+"result = vec3(1.0) - (vec3(1.0) - a) / b;\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorOp.xml:70
+msgid ""
+"Produce a soft light effect with the following formula:\n"
+"[codeblock]\n"
+"for (int i = 0; i < 3; i++) {\n"
+" float base = a[i];\n"
+" float blend = b[i];\n"
+" if (base < 0.5) {\n"
+" result[i] = base * (blend + 0.5);\n"
+" } else {\n"
+" result[i] = 1.0 - (1.0 - base) * (1.0 - (blend - 0.5));\n"
+" }\n"
+"}\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorOp.xml:84
+msgid ""
+"Produce a hard light effect with the following formula:\n"
+"[codeblock]\n"
+"for (int i = 0; i < 3; i++) {\n"
+" float base = a[i];\n"
+" float blend = b[i];\n"
+" if (base < 0.5) {\n"
+" result[i] = base * (2.0 * blend);\n"
+" } else {\n"
+" result[i] = 1.0 - (1.0 - base) * (1.0 - 2.0 * (blend - 0.5));\n"
+" }\n"
+"}\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorUniform.xml:4
+msgid "A [Color] uniform to be used within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorUniform.xml:7
+msgid "Translated to [code]uniform vec4[/code] in the shader language."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCompare.xml:4
+msgid "A comparison function for common types within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCompare.xml:7
+msgid ""
+"Compares [code]a[/code] and [code]b[/code] of [member type] by [member "
+"function]. Returns a boolean scalar. Translates to [code]if[/code] "
+"instruction in shader code."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCompare.xml:15
+msgid ""
+"Extra condition which is applied if [member type] is set to [constant "
+"CTYPE_VECTOR]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCompare.xml:18
+msgid "A comparison function. See [enum Function] for options."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCompare.xml:21
+msgid ""
+"The type to be used in the comparison. See [enum ComparisonType] for options."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCompare.xml:26
+msgid "A floating-point scalar."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCompare.xml:29
+msgid "A 3D vector type."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCompare.xml:32
+msgid "A boolean type."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCompare.xml:35
+msgid "A transform ([code]mat4[/code]) type."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCompare.xml:38
+msgid "Comparison for equality ([code]a == b[/code])."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCompare.xml:41
+msgid "Comparison for inequality ([code]a != b[/code])."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCompare.xml:44
+msgid ""
+"Comparison for greater than ([code]a > b[/code]). Cannot be used if [member "
+"type] set to [constant CTYPE_BOOLEAN] or [constant CTYPE_TRANSFORM]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCompare.xml:47
+msgid ""
+"Comparison for greater than or equal ([code]a >= b[/code]). Cannot be used "
+"if [member type] set to [constant CTYPE_BOOLEAN] or [constant "
+"CTYPE_TRANSFORM]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCompare.xml:50
+msgid ""
+"Comparison for less than ([code]a < b[/code]). Cannot be used if [member "
+"type] set to [constant CTYPE_BOOLEAN] or [constant CTYPE_TRANSFORM]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCompare.xml:53
+msgid ""
+"Comparison for less than or equal ([code]a < b[/code]). Cannot be used if "
+"[member type] set to [constant CTYPE_BOOLEAN] or [constant CTYPE_TRANSFORM]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCompare.xml:56
+msgid ""
+"The result will be true if all of component in vector satisfy the comparison "
+"condition."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCompare.xml:59
+msgid ""
+"The result will be true if any of component in vector satisfy the comparison "
+"condition."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCubeMap.xml:4
+msgid "A [CubeMap] sampling node to be used within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCubeMap.xml:7
+msgid ""
+"Translated to [code]texture(cubemap, vec3)[/code] in the shader language. "
+"Returns a color vector and alpha channel as scalar."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCubeMap.xml:15
+msgid ""
+"The [CubeMap] texture to sample when using [constant SOURCE_TEXTURE] as "
+"[member source]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCubeMap.xml:18
+msgid ""
+"Defines which source should be used for the sampling. See [enum Source] for "
+"options."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCubeMap.xml:21
+#: doc/classes/VisualShaderNodeTextureUniform.xml:18
+msgid ""
+"Defines the type of data provided by the source texture. See [enum "
+"TextureType] for options."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCubeMap.xml:26
+msgid ""
+"Use the [CubeMap] set via [member cube_map]. If this is set to [member "
+"source], the [code]samplerCube[/code] port is ignored."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCubeMap.xml:29
+msgid ""
+"Use the [CubeMap] sampler reference passed via the [code]samplerCube[/code] "
+"port. If this is set to [member source], the [member cube_map] texture is "
+"ignored."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCubeMap.xml:32
+#: doc/classes/VisualShaderNodeTexture.xml:44
+#: doc/classes/VisualShaderNodeTextureUniform.xml:23
+msgid "No hints are added to the uniform declaration."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCubeMap.xml:35
+#: doc/classes/VisualShaderNodeTexture.xml:47
+#: doc/classes/VisualShaderNodeTextureUniform.xml:26
+msgid ""
+"Adds [code]hint_albedo[/code] as hint to the uniform declaration for proper "
+"sRGB to linear conversion."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCubeMap.xml:38
+#: doc/classes/VisualShaderNodeTexture.xml:50
+#: doc/classes/VisualShaderNodeTextureUniform.xml:29
+msgid ""
+"Adds [code]hint_normal[/code] as hint to the uniform declaration, which "
+"internally converts the texture for proper usage as normal map."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCubeMapUniform.xml:4
+msgid "A [CubeMap] uniform node to be used within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCubeMapUniform.xml:7
+msgid ""
+"Translated to [code]uniform samplerCube[/code] in the shader language. The "
+"output value can be used as port for [VisualShaderNodeCubeMap]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCustom.xml:4
+msgid ""
+"Virtual class to define custom [VisualShaderNode]s for use in the Visual "
+"Shader Editor."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCustom.xml:7
+msgid ""
+"By inheriting this class you can create a custom [VisualShader] script addon "
+"which will be automatically added to the Visual Shader Editor. The "
+"[VisualShaderNode]'s behavior is defined by overriding the provided virtual "
+"methods.\n"
+"In order for the node to be registered as an editor addon, you must use the "
+"[code]tool[/code] keyword and provide a [code]class_name[/code] for your "
+"custom script. For example:\n"
+"[codeblock]\n"
+"tool\n"
+"extends VisualShaderNodeCustom\n"
+"class_name VisualShaderNodeNoise\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCustom.xml:16
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/plugins/editor/"
+"visual_shader_plugins.html"
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCustom.xml:22
+msgid ""
+"Override this method to define the category of the associated custom node in "
+"the Visual Shader Editor's members dialog. The path may look like "
+"[code]\"MyGame/MyFunctions/Noise\"[/code].\n"
+"Defining this method is [b]optional[/b]. If not overridden, the node will be "
+"filed under the \"Custom\" category."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCustom.xml:33
+msgid ""
+"Override this method to define the actual shader code of the associated "
+"custom node. The shader code should be returned as a string, which can have "
+"multiple lines (the [code]\"\"\"[/code] multiline string construct can be "
+"used for convenience).\n"
+"The [code]input_vars[/code] and [code]output_vars[/code] arrays contain the "
+"string names of the various input and output variables, as defined by "
+"[code]_get_input_*[/code] and [code]_get_output_*[/code] virtual methods in "
+"this class.\n"
+"The output ports can be assigned values in the shader code. For example, "
+"[code]return output_vars[0] + \" = \" + input_vars[0] + \";\"[/code].\n"
+"You can customize the generated code based on the shader [code]mode[/code] "
+"(see [enum Shader.Mode]) and/or [code]type[/code] (see [enum VisualShader."
+"Type]).\n"
+"Defining this method is [b]required[/b]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCustom.xml:43
+msgid ""
+"Override this method to define the description of the associated custom node "
+"in the Visual Shader Editor's members dialog.\n"
+"Defining this method is [b]optional[/b]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCustom.xml:51
+msgid ""
+"Override this method to add shader code on top of the global shader, to "
+"define your own standard library of reusable methods, varyings, constants, "
+"uniforms, etc. The shader code should be returned as a string, which can "
+"have multiple lines (the [code]\"\"\"[/code] multiline string construct can "
+"be used for convenience).\n"
+"Be careful with this functionality as it can cause name conflicts with other "
+"custom nodes, so be sure to give the defined entities unique names.\n"
+"You can customize the generated code based on the shader [code]mode[/code] "
+"(see [enum Shader.Mode]).\n"
+"Defining this method is [b]optional[/b]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCustom.xml:60
+msgid ""
+"Override this method to define the amount of input ports of the associated "
+"custom node.\n"
+"Defining this method is [b]required[/b]. If not overridden, the node has no "
+"input ports."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCustom.xml:68
+msgid ""
+"Override this method to define the names of input ports of the associated "
+"custom node. The names are used both for the input slots in the editor and "
+"as identifiers in the shader code, and are passed in the [code]input_vars[/"
+"code] array in [method _get_code].\n"
+"Defining this method is [b]optional[/b], but recommended. If not overridden, "
+"input ports are named as [code]\"in\" + str(port)[/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCustom.xml:76
+msgid ""
+"Override this method to define the returned type of each input port of the "
+"associated custom node (see [enum VisualShaderNode.PortType] for possible "
+"types).\n"
+"Defining this method is [b]optional[/b], but recommended. If not overridden, "
+"input ports will return the [constant VisualShaderNode.PORT_TYPE_SCALAR] "
+"type."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCustom.xml:83
+msgid ""
+"Override this method to define the name of the associated custom node in the "
+"Visual Shader Editor's members dialog and graph.\n"
+"Defining this method is [b]optional[/b], but recommended. If not overridden, "
+"the node will be named as \"Unnamed\"."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCustom.xml:90
+msgid ""
+"Override this method to define the amount of output ports of the associated "
+"custom node.\n"
+"Defining this method is [b]required[/b]. If not overridden, the node has no "
+"output ports."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCustom.xml:98
+msgid ""
+"Override this method to define the names of output ports of the associated "
+"custom node. The names are used both for the output slots in the editor and "
+"as identifiers in the shader code, and are passed in the [code]output_vars[/"
+"code] array in [method _get_code].\n"
+"Defining this method is [b]optional[/b], but recommended. If not overridden, "
+"output ports are named as [code]\"out\" + str(port)[/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCustom.xml:106
+msgid ""
+"Override this method to define the returned type of each output port of the "
+"associated custom node (see [enum VisualShaderNode.PortType] for possible "
+"types).\n"
+"Defining this method is [b]optional[/b], but recommended. If not overridden, "
+"output ports will return the [constant VisualShaderNode.PORT_TYPE_SCALAR] "
+"type."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCustom.xml:113
+msgid ""
+"Override this method to define the return icon of the associated custom node "
+"in the Visual Shader Editor's members dialog.\n"
+"Defining this method is [b]optional[/b]. If not overridden, no return icon "
+"is shown."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCustom.xml:120
+msgid ""
+"Override this method to define the subcategory of the associated custom node "
+"in the Visual Shader Editor's members dialog.\n"
+"Defining this method is [b]optional[/b]. If not overridden, the node will be "
+"filed under the root of the main category (see [method _get_category])."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeDeterminant.xml:4
+msgid ""
+"Calculates the determinant of a [Transform] within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeDeterminant.xml:7
+msgid "Translates to [code]determinant(x)[/code] in the shader language."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeDotProduct.xml:4
+msgid "Calculates a dot product of two vectors within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeDotProduct.xml:7
+msgid "Translates to [code]dot(a, b)[/code] in the shader language."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeExpression.xml:4
+msgid ""
+"A custom visual shader graph expression written in Godot Shading Language."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeExpression.xml:7
+msgid ""
+"Custom Godot Shading Language expression, with a custom amount of input and "
+"output ports.\n"
+"The provided code is directly injected into the graph's matching shader "
+"function ([code]vertex[/code], [code]fragment[/code], or [code]light[/"
+"code]), so it cannot be used to declare functions, varyings, uniforms, or "
+"global constants. See [VisualShaderNodeGlobalExpression] for such global "
+"definitions."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeExpression.xml:16
+msgid ""
+"An expression in Godot Shading Language, which will be injected at the start "
+"of the graph's matching shader function ([code]vertex[/code], "
+"[code]fragment[/code], or [code]light[/code]), and thus cannot be used to "
+"declare functions, varyings, uniforms, or global constants."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeFaceForward.xml:4
+msgid ""
+"Returns the vector that points in the same direction as a reference vector "
+"within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeFaceForward.xml:7
+msgid ""
+"Translates to [code]faceforward(N, I, Nref)[/code] in the shader language. "
+"The function has three vector parameters: [code]N[/code], the vector to "
+"orient, [code]I[/code], the incident vector, and [code]Nref[/code], the "
+"reference vector. If the dot product of [code]I[/code] and [code]Nref[/code] "
+"is smaller than zero the return value is [code]N[/code]. Otherwise, [code]-"
+"N[/code] is returned."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeFresnel.xml:4
+msgid "A Fresnel effect to be used within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeFresnel.xml:7
+msgid ""
+"Returns falloff based on the dot product of surface normal and view "
+"direction of camera (pass associated inputs to it)."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGlobalExpression.xml:4
+msgid ""
+"A custom global visual shader graph expression written in Godot Shading "
+"Language."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGlobalExpression.xml:7
+msgid ""
+"Custom Godot Shader Language expression, which is placed on top of the "
+"generated shader. You can place various function definitions inside to call "
+"later in [VisualShaderNodeExpression]s (which are injected in the main "
+"shader functions). You can also declare varyings, uniforms and global "
+"constants."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:4
+msgid ""
+"Base class for a family of nodes with variable amount of input and output "
+"ports within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:7
+msgid "Currently, has no direct usage, use the derived classes instead."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:18
+msgid ""
+"Adds an input port with the specified [code]type[/code] (see [enum "
+"VisualShaderNode.PortType]) and [code]name[/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:27
+msgid ""
+"Adds an output port with the specified [code]type[/code] (see [enum "
+"VisualShaderNode.PortType]) and [code]name[/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:33
+msgid "Removes all previously specified input ports."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:39
+msgid "Removes all previously specified output ports."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:45
+msgid ""
+"Returns a free input port ID which can be used in [method add_input_port]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:51
+msgid ""
+"Returns a free output port ID which can be used in [method add_output_port]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:57
+msgid ""
+"Returns the number of input ports in use. Alternative for [method "
+"get_free_input_port_id]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:63
+msgid ""
+"Returns a [String] description of the input ports as a colon-separated list "
+"using the format [code]id,type,name;[/code] (see [method add_input_port])."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:69
+msgid ""
+"Returns the number of output ports in use. Alternative for [method "
+"get_free_output_port_id]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:75
+msgid ""
+"Returns a [String] description of the output ports as a colon-separated list "
+"using the format [code]id,type,name;[/code] (see [method add_output_port])."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:82
+msgid "Returns [code]true[/code] if the specified input port exists."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:89
+msgid "Returns [code]true[/code] if the specified output port exists."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:96
+msgid ""
+"Returns [code]true[/code] if the specified port name does not override an "
+"existed port name and is valid within the shader."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:103
+msgid "Removes the specified input port."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:110
+msgid "Removes the specified output port."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:118
+msgid "Renames the specified input port."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:126
+msgid ""
+"Sets the specified input port's type (see [enum VisualShaderNode.PortType])."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:133
+msgid ""
+"Defines all input ports using a [String] formatted as a colon-separated "
+"list: [code]id,type,name;[/code] (see [method add_input_port])."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:141
+msgid "Renames the specified output port."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:149
+msgid ""
+"Sets the specified output port's type (see [enum VisualShaderNode.PortType])."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:156
+msgid ""
+"Defines all output ports using a [String] formatted as a colon-separated "
+"list: [code]id,type,name;[/code] (see [method add_output_port])."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:162
+msgid "The size of the node in the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeInput.xml:6
+msgid ""
+"Gives access to input variables (built-ins) available for the shader. See "
+"the shading reference for the list of available built-ins for each shader "
+"type (check [code]Tutorials[/code] section for link)."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeInput.xml:9
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/shading/shading_reference/"
+"index.html"
+msgstr ""
+
+#: doc/classes/VisualShaderNodeInput.xml:20
+msgid ""
+"One of the several input constants in lower-case style like: \"vertex"
+"\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeIs.xml:4
+msgid ""
+"A boolean comparison operator to be used within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeIs.xml:7
+msgid ""
+"Returns the boolean result of the comparison between [code]INF[/code] or "
+"[code]NaN[/code] and a scalar parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeIs.xml:15
+msgid "The comparison function. See [enum Function] for options."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeIs.xml:20
+msgid "Comparison with [code]INF[/code] (Infinity)."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeIs.xml:23
+msgid ""
+"Comparison with [code]NaN[/code] (Not a Number; denotes invalid numeric "
+"results, e.g. division by zero)."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeOuterProduct.xml:4
+msgid ""
+"Calculates an outer product of two vectors within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeOuterProduct.xml:7
+msgid ""
+"[code]OuterProduct[/code] treats the first parameter [code]c[/code] as a "
+"column vector (matrix with one column) and the second parameter [code]r[/"
+"code] as a row vector (matrix with one row) and does a linear algebraic "
+"matrix multiply [code]c * r[/code], yielding a matrix whose number of rows "
+"is the number of components in [code]c[/code] and whose number of columns is "
+"the number of components in [code]r[/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeOutput.xml:4
+msgid "Represents the output shader parameters within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeOutput.xml:7
+msgid ""
+"This visual shader node is present in all shader graphs in form of \"Output"
+"\" block with multiple output value ports."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeScalarClamp.xml:4
+msgid "Clamps a scalar value within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeScalarClamp.xml:7
+msgid ""
+"Constrains a value to lie between [code]min[/code] and [code]max[/code] "
+"values."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeScalarDerivativeFunc.xml:4
+msgid "Calculates a scalar derivative within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeScalarDerivativeFunc.xml:7
+#: doc/classes/VisualShaderNodeVectorDerivativeFunc.xml:7
+msgid ""
+"This node is only available in [code]Fragment[/code] and [code]Light[/code] "
+"visual shaders."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeScalarDerivativeFunc.xml:15
+msgid "The derivative type. See [enum Function] for options."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeScalarDerivativeFunc.xml:20
+#: doc/classes/VisualShaderNodeVectorDerivativeFunc.xml:20
+msgid "Sum of absolute derivative in [code]x[/code] and [code]y[/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeScalarDerivativeFunc.xml:23
+#: doc/classes/VisualShaderNodeVectorDerivativeFunc.xml:23
+msgid "Derivative in [code]x[/code] using local differencing."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeScalarDerivativeFunc.xml:26
+#: doc/classes/VisualShaderNodeVectorDerivativeFunc.xml:26
+msgid "Derivative in [code]y[/code] using local differencing."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeScalarInterp.xml:4
+msgid ""
+"Linearly interpolates between two scalars within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeScalarInterp.xml:7
+msgid "Translates to [code]mix(a, b, weight)[/code] in the shader language."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeScalarSmoothStep.xml:4
+msgid "Calculates a scalar SmoothStep function within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeScalarSmoothStep.xml:7
+msgid ""
+"Translates to [code]smoothstep(edge0, edge1, x)[/code] in the shader "
+"language.\n"
+"Returns [code]0.0[/code] if [code]x[/code] is smaller than [code]edge0[/"
+"code] and [code]1.0[/code] if [code]x[/code] is larger than [code]edge1[/"
+"code]. Otherwise the return value is interpolated between [code]0.0[/code] "
+"and [code]1.0[/code] using Hermite polynomials."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeScalarSwitch.xml:4
+msgid "A boolean/scalar function for use within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeScalarSwitch.xml:7
+msgid ""
+"Returns an associated scalar if the provided boolean value is [code]true[/"
+"code] or [code]false[/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeSwitch.xml:4
+msgid "A boolean/vector function for use within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeSwitch.xml:7
+msgid ""
+"Returns an associated vector if the provided boolean value is [code]true[/"
+"code] or [code]false[/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTexture.xml:4
+msgid "Performs a texture lookup within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTexture.xml:7
+msgid ""
+"Performs a lookup operation on the provided texture, with support for "
+"multiple texture sources to choose from."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTexture.xml:15
+msgid "Determines the source for the lookup. See [enum Source] for options."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTexture.xml:18
+msgid "The source texture, if needed for the selected [member source]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTexture.xml:21
+msgid ""
+"Specifies the type of the texture if [member source] is set to [constant "
+"SOURCE_TEXTURE]. See [enum TextureType] for options."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTexture.xml:26
+msgid "Use the texture given as an argument for this function."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTexture.xml:29
+msgid "Use the current viewport's texture as the source."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTexture.xml:32
+msgid ""
+"Use the texture from this shader's texture built-in (e.g. a texture of a "
+"[Sprite])."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTexture.xml:35
+msgid "Use the texture from this shader's normal map built-in."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTexture.xml:38
+msgid "Use the depth texture available for this shader."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTexture.xml:41
+msgid "Use the texture provided in the input port for this function."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTextureUniform.xml:4
+msgid "Performs a uniform texture lookup within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTextureUniform.xml:7
+msgid ""
+"Performs a lookup operation on the texture provided as a uniform for the "
+"shader."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTextureUniform.xml:15
+msgid "Sets the default color if no texture is assigned to the uniform."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTextureUniform.xml:32
+msgid ""
+"Adds [code]hint_aniso[/code] as hint to the uniform declaration to use for a "
+"flowmap."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTextureUniform.xml:35
+msgid "Defaults to white color."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTextureUniform.xml:38
+msgid "Defaults to black color."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTextureUniformTriplanar.xml:4
+msgid ""
+"Performs a uniform texture lookup with triplanar within the visual shader "
+"graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTextureUniformTriplanar.xml:7
+msgid ""
+"Performs a lookup operation on the texture provided as a uniform for the "
+"shader, with support for triplanar mapping."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformCompose.xml:4
+msgid ""
+"Composes a [Transform] from four [Vector3]s within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformCompose.xml:7
+msgid ""
+"Creates a 4x4 transform matrix using four vectors of type [code]vec3[/code]. "
+"Each vector is one row in the matrix and the last column is a [code]vec4(0, "
+"0, 0, 1)[/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformConstant.xml:4
+msgid "A [Transform] constant for use within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformConstant.xml:7
+msgid "A constant [Transform], which can be used as an input node."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformConstant.xml:15
+msgid "A [Transform] constant which represents the state of this node."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformDecompose.xml:4
+msgid ""
+"Decomposes a [Transform] into four [Vector3]s within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformDecompose.xml:7
+msgid ""
+"Takes a 4x4 transform matrix and decomposes it into four [code]vec3[/code] "
+"values, one from each row of the matrix."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformFunc.xml:4
+msgid "Computes a [Transform] function within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformFunc.xml:7
+msgid "Computes an inverse or transpose function on the provided [Transform]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformFunc.xml:15
+msgid "The function to be computed. See [enum Function] for options."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformFunc.xml:20
+msgid "Perform the inverse operation on the [Transform] matrix."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformFunc.xml:23
+msgid "Perform the transpose operation on the [Transform] matrix."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformMult.xml:4
+msgid "Multiplies [Transform] by [Transform] within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformMult.xml:7
+msgid ""
+"A multiplication operation on two transforms (4x4 matrices), with support "
+"for different multiplication operators."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformMult.xml:15
+msgid ""
+"The multiplication type to be performed on the transforms. See [enum "
+"Operator] for options."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformMult.xml:20
+msgid "Multiplies transform [code]a[/code] by the transform [code]b[/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformMult.xml:23
+msgid "Multiplies transform [code]b[/code] by the transform [code]a[/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformMult.xml:26
+msgid ""
+"Performs a component-wise multiplication of transform [code]a[/code] by the "
+"transform [code]b[/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformMult.xml:29
+msgid ""
+"Performs a component-wise multiplication of transform [code]b[/code] by the "
+"transform [code]a[/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformUniform.xml:4
+msgid "A [Transform] uniform for use within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformUniform.xml:7
+msgid "Translated to [code]uniform mat4[/code] in the shader language."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformVecMult.xml:4
+msgid ""
+"Multiplies a [Transform] and a [Vector3] within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformVecMult.xml:7
+msgid ""
+"A multiplication operation on a transform (4x4 matrix) and a vector, with "
+"support for different multiplication operators."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformVecMult.xml:15
+msgid ""
+"The multiplication type to be performed. See [enum Operator] for options."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformVecMult.xml:20
+msgid "Multiplies transform [code]a[/code] by the vector [code]b[/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformVecMult.xml:23
+msgid "Multiplies vector [code]b[/code] by the transform [code]a[/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformVecMult.xml:26
+msgid ""
+"Multiplies transform [code]a[/code] by the vector [code]b[/code], skipping "
+"the last row and column of the transform."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformVecMult.xml:29
+msgid ""
+"Multiplies vector [code]b[/code] by the transform [code]a[/code], skipping "
+"the last row and column of the transform."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeUniform.xml:4
+msgid "A base type for the uniforms within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeUniform.xml:7
+msgid ""
+"A uniform represents a variable in the shader which is set externally, i.e. "
+"from the [ShaderMaterial]. Uniforms are exposed as properties in the "
+"[ShaderMaterial] and can be assigned from the inspector or from a script."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeUniform.xml:15
+msgid ""
+"Name of the uniform, by which it can be accessed through the "
+"[ShaderMaterial] properties."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeUniformRef.xml:4
+msgid "A reference to an existing [VisualShaderNodeUniform]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeUniformRef.xml:7
+msgid ""
+"Creating a reference to a [VisualShaderNodeUniform] allows you to reuse this "
+"uniform in different shaders or shader stages easily."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeUniformRef.xml:15
+msgid "The name of the uniform which this reference points to."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVec3Constant.xml:4
+msgid "A [Vector3] constant to be used within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVec3Constant.xml:7
+msgid "A constant [Vector3], which can be used as an input node."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVec3Constant.xml:15
+msgid "A [Vector3] constant which represents the state of this node."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVec3Uniform.xml:4
+msgid "A [Vector3] uniform to be used within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVec3Uniform.xml:7
+msgid "Translated to [code]uniform vec3[/code] in the shader language."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorClamp.xml:4
+msgid "Clamps a vector value within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorClamp.xml:7
+msgid ""
+"Constrains a value to lie between [code]min[/code] and [code]max[/code] "
+"values. The operation is performed on each component of the vector "
+"individually."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorCompose.xml:4
+msgid "Composes a [Vector3] from three scalars within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorCompose.xml:7
+msgid ""
+"Creates a [code]vec3[/code] using three scalar values that can be provided "
+"from separate inputs."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorDecompose.xml:4
+msgid ""
+"Decomposes a [Vector3] into three scalars within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorDecompose.xml:7
+msgid ""
+"Takes a [code]vec3[/code] and decomposes it into three scalar values that "
+"can be used as separate inputs."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorDerivativeFunc.xml:4
+msgid "Calculates a vector derivative within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorDerivativeFunc.xml:15
+msgid "A derivative type. See [enum Function] for options."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorDistance.xml:4
+msgid ""
+"Returns the distance between two points. To be used within the visual shader "
+"graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorDistance.xml:7
+msgid ""
+"Calculates distance from point represented by vector [code]p0[/code] to "
+"vector [code]p1[/code].\n"
+"Translated to [code]distance(p0, p1)[/code] in the shader language."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:4
+msgid "A vector function to be used within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:7
+msgid "A visual shader node able to perform different functions using vectors."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:15
+msgid "The function to be performed. See [enum Function] for options."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:20
+msgid ""
+"Normalizes the vector so that it has a length of [code]1[/code] but points "
+"in the same direction."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:23
+msgid "Clamps the value between [code]0.0[/code] and [code]1.0[/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:26
+msgid "Returns the opposite value of the parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:29
+msgid "Returns [code]1/vector[/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:32
+msgid "Converts RGB vector to HSV equivalent."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:35
+msgid "Converts HSV vector to RGB equivalent."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:38
+msgid "Returns the absolute value of the parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:41
+msgid "Returns the arc-cosine of the parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:44
+msgid "Returns the inverse hyperbolic cosine of the parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:47
+msgid "Returns the arc-sine of the parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:50
+msgid "Returns the inverse hyperbolic sine of the parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:53
+msgid "Returns the arc-tangent of the parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:56
+msgid "Returns the inverse hyperbolic tangent of the parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:59
+msgid ""
+"Finds the nearest integer that is greater than or equal to the parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:62
+msgid "Returns the cosine of the parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:65
+msgid "Returns the hyperbolic cosine of the parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:68
+msgid "Converts a quantity in radians to degrees."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:71
+msgid "Base-e Exponential."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:74
+msgid "Base-2 Exponential."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:77
+msgid "Finds the nearest integer less than or equal to the parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:80
+msgid "Computes the fractional part of the argument."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:83
+msgid "Returns the inverse of the square root of the parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:86
+msgid "Natural logarithm."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:89
+msgid "Base-2 logarithm."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:92
+msgid "Converts a quantity in degrees to radians."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:95
+msgid "Finds the nearest integer to the parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:98
+msgid "Finds the nearest even integer to the parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:101
+msgid ""
+"Extracts the sign of the parameter, i.e. returns [code]-1[/code] if the "
+"parameter is negative, [code]1[/code] if it's positive and [code]0[/code] "
+"otherwise."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:104
+msgid "Returns the sine of the parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:107
+msgid "Returns the hyperbolic sine of the parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:110
+msgid "Returns the square root of the parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:113
+msgid "Returns the tangent of the parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:116
+msgid "Returns the hyperbolic tangent of the parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:119
+msgid ""
+"Returns a value equal to the nearest integer to the parameter whose absolute "
+"value is not larger than the absolute value of the parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:122
+msgid "Returns [code]1.0 - vector[/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorInterp.xml:4
+msgid ""
+"Linearly interpolates between two vectors within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorInterp.xml:7
+msgid ""
+"Translates to [code]mix(a, b, weight)[/code] in the shader language, where "
+"[code]weight[/code] is a [Vector3] with weights for each component."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorLen.xml:4
+msgid "Returns the length of a [Vector3] within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorLen.xml:7
+msgid "Translated to [code]length(p0)[/code] in the shader language."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorOp.xml:4
+msgid "A vector operator to be used within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorOp.xml:7
+msgid ""
+"A visual shader node for use of vector operators. Operates on vector "
+"[code]a[/code] and vector [code]b[/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorOp.xml:15
+msgid "The operator to be used. See [enum Operator] for options."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorOp.xml:20
+msgid "Adds two vectors."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorOp.xml:23
+msgid "Subtracts a vector from a vector."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorOp.xml:26
+msgid "Multiplies two vectors."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorOp.xml:29
+msgid "Divides vector by vector."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorOp.xml:32
+msgid "Returns the remainder of the two vectors."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorOp.xml:35
+msgid ""
+"Returns the value of the first parameter raised to the power of the second, "
+"for each component of the vectors."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorOp.xml:38
+msgid "Returns the greater of two values, for each component of the vectors."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorOp.xml:41
+msgid "Returns the lesser of two values, for each component of the vectors."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorOp.xml:44
+msgid "Calculates the cross product of two vectors."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorOp.xml:47
+msgid "Returns the arc-tangent of the parameters."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorOp.xml:50
+msgid ""
+"Returns the vector that points in the direction of reflection. [code]a[/"
+"code] is incident vector and [code]b[/code] is the normal vector."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorOp.xml:53
+msgid ""
+"Vector step operator. Returns [code]0.0[/code] if [code]a[/code] is smaller "
+"than [code]b[/code] and [code]1.0[/code] otherwise."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorRefract.xml:4
+msgid ""
+"Returns the [Vector3] that points in the direction of refraction. For use "
+"within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorRefract.xml:7
+msgid ""
+"Translated to [code]refract(I, N, eta)[/code] in the shader language, where "
+"[code]I[/code] is the incident vector, [code]N[/code] is the normal vector "
+"and [code]eta[/code] is the ratio of the indices of the refraction."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorScalarMix.xml:4
+msgid ""
+"Linearly interpolates between two vectors using a scalar. For use within the "
+"visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorScalarMix.xml:7
+msgid ""
+"Translates to [code]mix(a, b, weight)[/code] in the shader language, where "
+"[code]a[/code] and [code]b[/code] are vectors and [code]weight[/code] is a "
+"scalar."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorScalarSmoothStep.xml:4
+msgid ""
+"Calculates a vector SmoothStep function using scalar within the visual "
+"shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorScalarSmoothStep.xml:7
+msgid ""
+"Translates to [code]smoothstep(edge0, edge1, x)[/code] in the shader "
+"language, where [code]x[/code] is a scalar.\n"
+"Returns [code]0.0[/code] if [code]x[/code] is smaller than [code]edge0[/"
+"code] and [code]1.0[/code] if [code]x[/code] is larger than [code]edge1[/"
+"code]. Otherwise the return value is interpolated between [code]0.0[/code] "
+"and [code]1.0[/code] using Hermite polynomials."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorScalarStep.xml:4
+msgid "Calculates a vector Step function within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorScalarStep.xml:7
+msgid ""
+"Translates to [code]step(edge, x)[/code] in the shader language.\n"
+"Returns [code]0.0[/code] if [code]x[/code] is smaller than [code]edge[/code] "
+"and [code]1.0[/code] otherwise."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorSmoothStep.xml:4
+msgid "Calculates a vector SmoothStep function within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorSmoothStep.xml:7
+msgid ""
+"Translates to [code]smoothstep(edge0, edge1, x)[/code] in the shader "
+"language, where [code]x[/code] is a vector.\n"
+"Returns [code]0.0[/code] if [code]x[/code] is smaller than [code]edge0[/"
+"code] and [code]1.0[/code] if [code]x[/code] is larger than [code]edge1[/"
+"code]. Otherwise the return value is interpolated between [code]0.0[/code] "
+"and [code]1.0[/code] using Hermite polynomials."
+msgstr ""
+
+#: doc/classes/VScrollBar.xml:4
+msgid "Vertical scroll bar."
+msgstr ""
+
+#: doc/classes/VScrollBar.xml:7
+msgid ""
+"Vertical version of [ScrollBar], which goes from top (min) to bottom (max)."
+msgstr ""
+
+#: doc/classes/VScrollBar.xml:21
+msgid ""
+"Icon used as a button to scroll the [ScrollBar] up. Supports custom step "
+"using the [member ScrollBar.custom_step] property."
+msgstr ""
+
+#: doc/classes/VScrollBar.xml:39
+msgid ""
+"Icon used as a button to scroll the [ScrollBar] down. Supports custom step "
+"using the [member ScrollBar.custom_step] property."
+msgstr ""
+
+#: doc/classes/VSeparator.xml:4
+msgid "Vertical version of [Separator]."
+msgstr ""
+
+#: doc/classes/VSeparator.xml:7
+msgid ""
+"Vertical version of [Separator]. Even though it looks vertical, it is used "
+"to separate objects horizontally."
+msgstr ""
+
+#: doc/classes/VSeparator.xml:17
+msgid ""
+"The width of the area covered by the separator. Effectively works like a "
+"minimum width."
+msgstr ""
+
+#: doc/classes/VSeparator.xml:20
+msgid ""
+"The style for the separator line. Works best with [StyleBoxLine] (remember "
+"to enable [member StyleBoxLine.vertical])."
+msgstr ""
+
+#: doc/classes/VSlider.xml:4
+msgid "Vertical slider."
+msgstr ""
+
+#: doc/classes/VSlider.xml:7
+msgid ""
+"Vertical slider. See [Slider]. This one goes from bottom (min) to top "
+"(max).\n"
+"[b]Note:[/b] The [signal Range.changed] and [signal Range.value_changed] "
+"signals are part of the [Range] class which this class inherits from."
+msgstr ""
+
+#: doc/classes/VSlider.xml:25
+msgid "The background of the area below the grabber."
+msgstr ""
+
+#: doc/classes/VSlider.xml:36
+msgid ""
+"The background for the whole slider. Determines the width of the "
+"[code]grabber_area[/code]."
+msgstr ""
+
+#: doc/classes/VSplitContainer.xml:4
+msgid "Vertical split container."
+msgstr ""
+
+#: doc/classes/VSplitContainer.xml:7
+msgid ""
+"Vertical split container. See [SplitContainer]. This goes from top to bottom."
+msgstr ""
+
+#: doc/classes/WeakRef.xml:4
+msgid ""
+"Holds an [Object], but does not contribute to the reference count if the "
+"object is a reference."
+msgstr ""
+
+#: doc/classes/WeakRef.xml:7
+msgid ""
+"A weakref can hold a [Reference], without contributing to the reference "
+"counter. A weakref can be created from an [Object] using [method @GDScript."
+"weakref]. If this object is not a reference, weakref still works, however, "
+"it does not have any effect on the object. Weakrefs are useful in cases "
+"where multiple classes have variables that refer to each other. Without "
+"weakrefs, using these classes could lead to memory leaks, since both "
+"references keep each other from being released. Making part of the variables "
+"a weakref can prevent this cyclic dependency, and allows the references to "
+"be released."
+msgstr ""
+
+#: doc/classes/WeakRef.xml:15
+msgid "Returns the [Object] this weakref is referring to."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCDataChannel.xml:13
+msgid "Closes this data channel, notifying the other peer."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCDataChannel.xml:19
+msgid ""
+"Returns the number of bytes currently queued to be sent over this channel."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCDataChannel.xml:25
+msgid ""
+"Returns the id assigned to this channel during creation (or auto-assigned "
+"during negotiation).\n"
+"If the channel is not negotiated out-of-band the id will only be available "
+"after the connection is established (will return [code]65535[/code] until "
+"then)."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCDataChannel.xml:32
+msgid "Returns the label assigned to this channel during creation."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCDataChannel.xml:38
+msgid ""
+"Returns the [code]maxPacketLifeTime[/code] value assigned to this channel "
+"during creation.\n"
+"Will be [code]65535[/code] if not specified."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCDataChannel.xml:45
+msgid ""
+"Returns the [code]maxRetransmits[/code] value assigned to this channel "
+"during creation.\n"
+"Will be [code]65535[/code] if not specified."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCDataChannel.xml:52
+msgid ""
+"Returns the sub-protocol assigned to this channel during creation. An empty "
+"string if not specified."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCDataChannel.xml:58
+msgid "Returns the current state of this channel, see [enum ChannelState]."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCDataChannel.xml:64
+msgid ""
+"Returns [code]true[/code] if this channel was created with out-of-band "
+"configuration."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCDataChannel.xml:70
+msgid ""
+"Returns [code]true[/code] if this channel was created with ordering enabled "
+"(default)."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCDataChannel.xml:76
+msgid "Reserved, but not used for now."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCDataChannel.xml:82
+msgid ""
+"Returns [code]true[/code] if the last received packet was transferred as "
+"text. See [member write_mode]."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCDataChannel.xml:88
+msgid ""
+"The transfer mode to use when sending outgoing packet. Either text or binary."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCDataChannel.xml:93
+msgid ""
+"Tells the channel to send data over this channel as text. An external peer "
+"(non-Godot) would receive this as a string."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCDataChannel.xml:96
+msgid ""
+"Tells the channel to send data over this channel as binary. An external peer "
+"(non-Godot) would receive this as array buffer or blob."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCDataChannel.xml:99
+msgid "The channel was created, but it's still trying to connect."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCDataChannel.xml:102
+msgid "The channel is currently open, and data can flow over it."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCDataChannel.xml:105
+msgid ""
+"The channel is being closed, no new messages will be accepted, but those "
+"already in queue will be flushed."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCDataChannel.xml:108
+msgid "The channel was closed, or connection failed."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCMultiplayer.xml:4
+msgid ""
+"A simple interface to create a peer-to-peer mesh network composed of "
+"[WebRTCPeerConnection] that is compatible with the [MultiplayerAPI]."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCMultiplayer.xml:7
+msgid ""
+"This class constructs a full mesh of [WebRTCPeerConnection] (one connection "
+"for each peer) that can be used as a [member MultiplayerAPI.network_peer].\n"
+"You can add each [WebRTCPeerConnection] via [method add_peer] or remove them "
+"via [method remove_peer]. Peers must be added in [constant "
+"WebRTCPeerConnection.STATE_NEW] state to allow it to create the appropriate "
+"channels. This class will not create offers nor set descriptions, it will "
+"only poll them, and notify connections and disconnections.\n"
+"[signal NetworkedMultiplayerPeer.connection_succeeded] and [signal "
+"NetworkedMultiplayerPeer.server_disconnected] will not be emitted unless "
+"[code]server_compatibility[/code] is [code]true[/code] in [method "
+"initialize]. Beside that data transfer works like in a "
+"[NetworkedMultiplayerPeer]."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCMultiplayer.xml:20
+msgid ""
+"Add a new peer to the mesh with the given [code]peer_id[/code]. The "
+"[WebRTCPeerConnection] must be in state [constant WebRTCPeerConnection."
+"STATE_NEW].\n"
+"Three channels will be created for reliable, unreliable, and ordered "
+"transport. The value of [code]unreliable_lifetime[/code] will be passed to "
+"the [code]maxPacketLifetime[/code] option when creating unreliable and "
+"ordered channels (see [method WebRTCPeerConnection.create_data_channel])."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCMultiplayer.xml:27
+msgid "Close all the add peer connections and channels, freeing all resources."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCMultiplayer.xml:34
+msgid ""
+"Return a dictionary representation of the peer with given [code]peer_id[/"
+"code] with three keys. [code]connection[/code] containing the "
+"[WebRTCPeerConnection] to this peer, [code]channels[/code] an array of three "
+"[WebRTCDataChannel], and [code]connected[/code] a boolean representing if "
+"the peer connection is currently connected (all three channels are open)."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCMultiplayer.xml:40
+msgid ""
+"Returns a dictionary which keys are the peer ids and values the peer "
+"representation as in [method get_peer]."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCMultiplayer.xml:47
+msgid ""
+"Returns [code]true[/code] if the given [code]peer_id[/code] is in the peers "
+"map (it might not be connected though)."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCMultiplayer.xml:55
+msgid ""
+"Initialize the multiplayer peer with the given [code]peer_id[/code] (must be "
+"between 1 and 2147483647).\n"
+"If [code]server_compatibilty[/code] is [code]false[/code] (default), the "
+"multiplayer peer will be immediately in state [constant "
+"NetworkedMultiplayerPeer.CONNECTION_CONNECTED] and [signal "
+"NetworkedMultiplayerPeer.connection_succeeded] will not be emitted.\n"
+"If [code]server_compatibilty[/code] is [code]true[/code] the peer will "
+"suppress all [signal NetworkedMultiplayerPeer.peer_connected] signals until "
+"a peer with id [constant NetworkedMultiplayerPeer.TARGET_PEER_SERVER] "
+"connects and then emit [signal NetworkedMultiplayerPeer."
+"connection_succeeded]. After that the signal [signal "
+"NetworkedMultiplayerPeer.peer_connected] will be emitted for every already "
+"connected peer, and any new peer that might connect. If the server peer "
+"disconnects after that, signal [signal NetworkedMultiplayerPeer."
+"server_disconnected] will be emitted and state will become [constant "
+"NetworkedMultiplayerPeer.CONNECTION_CONNECTED]."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCMultiplayer.xml:64
+msgid ""
+"Remove the peer with given [code]peer_id[/code] from the mesh. If the peer "
+"was connected, and [signal NetworkedMultiplayerPeer.peer_connected] was "
+"emitted for it, then [signal NetworkedMultiplayerPeer.peer_disconnected] "
+"will be emitted."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml:4
+msgid "Interface to a WebRTC peer connection."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml:7
+msgid ""
+"A WebRTC connection between the local computer and a remote peer. Provides "
+"an interface to connect, maintain and monitor the connection.\n"
+"Setting up a WebRTC connection between two peers from now on) may not seem a "
+"trivial task, but it can be broken down into 3 main steps:\n"
+"- The peer that wants to initiate the connection ([code]A[/code] from now "
+"on) creates an offer and send it to the other peer ([code]B[/code] from now "
+"on).\n"
+"- [code]B[/code] receives the offer, generate and answer, and sends it to "
+"[code]A[/code]).\n"
+"- [code]A[/code] and [code]B[/code] then generates and exchange ICE "
+"candidates with each other.\n"
+"After these steps, the connection should become connected. Keep on reading "
+"or look into the tutorial for more information."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml:23
+msgid ""
+"Add an ice candidate generated by a remote peer (and received over the "
+"signaling server). See [signal ice_candidate_created]."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml:29
+msgid ""
+"Close the peer connection and all data channels associated with it.\n"
+"[b]Note:[/b] You cannot reuse this object for a new connection unless you "
+"call [method initialize]."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml:39
+msgid ""
+"Returns a new [WebRTCDataChannel] (or [code]null[/code] on failure) with "
+"given [code]label[/code] and optionally configured via the [code]options[/"
+"code] dictionary. This method can only be called when the connection is in "
+"state [constant STATE_NEW].\n"
+"There are two ways to create a working data channel: either call [method "
+"create_data_channel] on only one of the peer and listen to [signal "
+"data_channel_received] on the other, or call [method create_data_channel] on "
+"both peers, with the same values, and the [code]negotiated[/code] option set "
+"to [code]true[/code].\n"
+"Valid [code]options[/code] are:\n"
+"[codeblock]\n"
+"{\n"
+" \"negotiated\": true, # When set to true (default off), means the "
+"channel is negotiated out of band. \"id\" must be set too. "
+"\"data_channel_received\" will not be called.\n"
+" \"id\": 1, # When \"negotiated\" is true this value must also be set to "
+"the same value on both peer.\n"
+"\n"
+" # Only one of maxRetransmits and maxPacketLifeTime can be specified, not "
+"both. They make the channel unreliable (but also better at real time).\n"
+" \"maxRetransmits\": 1, # Specify the maximum number of attempt the peer "
+"will make to retransmits packets if they are not acknowledged.\n"
+" \"maxPacketLifeTime\": 100, # Specify the maximum amount of time before "
+"giving up retransmitions of unacknowledged packets (in milliseconds).\n"
+" \"ordered\": true, # When in unreliable mode (i.e. either "
+"\"maxRetransmits\" or \"maxPacketLifetime\" is set), \"ordered\" (true by "
+"default) specify if packet ordering is to be enforced.\n"
+"\n"
+" \"protocol\": \"my-custom-protocol\", # A custom sub-protocol string for "
+"this channel.\n"
+"}\n"
+"[/codeblock]\n"
+"[b]Note:[/b] You must keep a reference to channels created this way, or it "
+"will be closed."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml:61
+msgid ""
+"Creates a new SDP offer to start a WebRTC connection with a remote peer. At "
+"least one [WebRTCDataChannel] must have been created before calling this "
+"method.\n"
+"If this functions returns [constant OK], [signal "
+"session_description_created] will be called when the session is ready to be "
+"sent."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml:68
+msgid "Returns the connection state. See [enum ConnectionState]."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml:76
+msgid ""
+"Re-initialize this peer connection, closing any previously active "
+"connection, and going back to state [constant STATE_NEW]. A dictionary of "
+"[code]options[/code] can be passed to configure the peer connection.\n"
+"Valid [code]options[/code] are:\n"
+"[codeblock]\n"
+"{\n"
+" \"iceServers\": [\n"
+" {\n"
+" \"urls\": [ \"stun:stun.example.com:3478\" ], # One or more STUN "
+"servers.\n"
+" },\n"
+" {\n"
+" \"urls\": [ \"turn:turn.example.com:3478\" ], # One or more TURN "
+"servers.\n"
+" \"username\": \"a_username\", # Optional username for the TURN "
+"server.\n"
+" \"credential\": \"a_password\", # Optional password for the TURN "
+"server.\n"
+" }\n"
+" ]\n"
+"}\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml:97
+msgid ""
+"Call this method frequently (e.g. in [method Node._process] or [method Node."
+"_physics_process]) to properly receive signals."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml:105
+msgid ""
+"Sets the SDP description of the local peer. This should be called in "
+"response to [signal session_description_created].\n"
+"After calling this function the peer will start emitting [signal "
+"ice_candidate_created] (unless an [enum Error] different from [constant OK] "
+"is returned)."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml:114
+msgid ""
+"Sets the SDP description of the remote peer. This should be called with the "
+"values generated by a remote peer and received over the signaling server.\n"
+"If [code]type[/code] is [code]offer[/code] the peer will emit [signal "
+"session_description_created] with the appropriate answer.\n"
+"If [code]type[/code] is [code]answer[/code] the peer will start emitting "
+"[signal ice_candidate_created]."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml:124
+msgid ""
+"Emitted when a new in-band channel is received, i.e. when the channel was "
+"created with [code]negotiated: false[/code] (default).\n"
+"The object will be an instance of [WebRTCDataChannel]. You must keep a "
+"reference of it or it will be closed automatically. See [method "
+"create_data_channel]."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml:133
+msgid ""
+"Emitted when a new ICE candidate has been created. The three parameters are "
+"meant to be passed to the remote peer over the signaling server."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml:140
+msgid ""
+"Emitted after a successful call to [method create_offer] or [method "
+"set_remote_description] (when it generates an answer). The parameters are "
+"meant to be passed to [method set_local_description] on this object, and "
+"sent to the remote peer over the signaling server."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml:146
+msgid ""
+"The connection is new, data channels and an offer can be created in this "
+"state."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml:149
+msgid ""
+"The peer is connecting, ICE is in progress, none of the transports has "
+"failed."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml:152
+msgid "The peer is connected, all ICE transports are connected."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml:155
+msgid "At least one ICE transport is disconnected."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml:158
+msgid "One or more of the ICE transports failed."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml:161
+msgid ""
+"The peer connection is closed (after calling [method close] for example)."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketClient.xml:4
+msgid "A WebSocket client implementation."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketClient.xml:7
+msgid ""
+"This class implements a WebSocket client compatible with any RFC 6455-"
+"compliant WebSocket server.\n"
+"This client can be optionally used as a network peer for the "
+"[MultiplayerAPI].\n"
+"After starting the client ([method connect_to_url]), you will need to "
+"[method NetworkedMultiplayerPeer.poll] it at regular intervals (e.g. inside "
+"[method Node._process]).\n"
+"You will receive appropriate signals when connecting, disconnecting, or when "
+"new data is available."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketClient.xml:22
+msgid ""
+"Connects to the given URL requesting one of the given [code]protocols[/code] "
+"as sub-protocol. If the list empty (default), no sub-protocol will be "
+"requested.\n"
+"If [code]true[/code] is passed as [code]gd_mp_api[/code], the client will "
+"behave like a network peer for the [MultiplayerAPI], connections to non-"
+"Godot servers will not work, and [signal data_received] will not be "
+"emitted.\n"
+"If [code]false[/code] is passed instead (default), you must call "
+"[PacketPeer] functions ([code]put_packet[/code], [code]get_packet[/code], "
+"etc.) on the [WebSocketPeer] returned via [code]get_peer(1)[/code] and not "
+"on this object directly (e.g. [code]get_peer(1).put_packet(data)[/code]).\n"
+"You can optionally pass a list of [code]custom_headers[/code] to be added to "
+"the handshake HTTP request.\n"
+"[b]Note:[/b] To avoid mixed content warnings or errors in HTML5, you may "
+"have to use a [code]url[/code] that starts with [code]wss://[/code] (secure) "
+"instead of [code]ws://[/code]. When doing so, make sure to use the fully "
+"qualified domain name that matches the one defined in the server's SSL "
+"certificate. Do not connect directly via the IP address for [code]wss://[/"
+"code] connections, as it won't match with the SSL certificate.\n"
+"[b]Note:[/b] Specifying [code]custom_headers[/code] is not supported in "
+"HTML5 exports due to browsers restrictions."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketClient.xml:35
+msgid ""
+"Disconnects this client from the connected host. See [method WebSocketPeer."
+"close] for more information."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketClient.xml:41
+msgid "Return the IP address of the currently connected host."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketClient.xml:47
+msgid "Return the IP port of the currently connected host."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketClient.xml:53
+msgid ""
+"If specified, this [X509Certificate] will be the only one accepted when "
+"connecting to an SSL host. Any other certificate provided by the server will "
+"be regarded as invalid.\n"
+"[b]Note:[/b] Specifying a custom [code]trusted_ssl_certificate[/code] is not "
+"supported in HTML5 exports due to browsers restrictions."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketClient.xml:57
+msgid ""
+"If [code]true[/code], SSL certificate verification is enabled.\n"
+"[b]Note:[/b] You must specify the certificates to be used in the Project "
+"Settings for it to work when exported."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketClient.xml:65
+msgid ""
+"Emitted when the connection to the server is closed. [code]was_clean_close[/"
+"code] will be [code]true[/code] if the connection was shutdown cleanly."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketClient.xml:70
+msgid "Emitted when the connection to the server fails."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketClient.xml:76
+msgid ""
+"Emitted when a connection with the server is established, [code]protocol[/"
+"code] will contain the sub-protocol agreed with the server."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketClient.xml:81
+msgid ""
+"Emitted when a WebSocket message is received.\n"
+"[b]Note:[/b] This signal is [i]not[/i] emitted when used as high-level "
+"multiplayer peer."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketClient.xml:89
+msgid ""
+"Emitted when the server requests a clean close. You should keep polling "
+"until you get a [signal connection_closed] signal to achieve the clean "
+"close. See [method WebSocketPeer.close] for more details."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketMultiplayerPeer.xml:4
+msgid "Base class for WebSocket server and client."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketMultiplayerPeer.xml:7
+msgid ""
+"Base class for WebSocket server and client, allowing them to be used as "
+"network peer for the [MultiplayerAPI]."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketMultiplayerPeer.xml:16
+msgid ""
+"Returns the [WebSocketPeer] associated to the given [code]peer_id[/code]."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketMultiplayerPeer.xml:26
+msgid ""
+"Configures the buffer sizes for this WebSocket peer. Default values can be "
+"specified in the Project Settings under [code]network/limits[/code]. For "
+"server, values are meant per connected peer.\n"
+"The first two parameters define the size and queued packets limits of the "
+"input buffer, the last two of the output buffer.\n"
+"Buffer sizes are expressed in KiB, so [code]4 = 2^12 = 4096 bytes[/code]. "
+"All parameters will be rounded up to the nearest power of two.\n"
+"[b]Note:[/b] HTML5 exports only use the input buffer since the output one is "
+"managed by browsers."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketMultiplayerPeer.xml:41
+msgid ""
+"Emitted when a packet is received from a peer.\n"
+"[b]Note:[/b] This signal is only emitted when the client or server is "
+"configured to use Godot multiplayer API."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketPeer.xml:4
+msgid "A class representing a specific WebSocket connection."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketPeer.xml:7
+msgid ""
+"This class represents a specific WebSocket connection, allowing you to do "
+"lower level operations with it.\n"
+"You can choose to write to the socket in binary or text mode, and you can "
+"recognize the mode used for writing by the other peer."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketPeer.xml:18
+msgid ""
+"Closes this WebSocket connection. [code]code[/code] is the status code for "
+"the closure (see RFC 6455 section 7.4 for a list of valid status codes). "
+"[code]reason[/code] is the human readable reason for closing the connection "
+"(can be any UTF-8 string that's smaller than 123 bytes).\n"
+"[b]Note:[/b] To achieve a clean close, you will need to keep polling until "
+"either [signal WebSocketClient.connection_closed] or [signal WebSocketServer."
+"client_disconnected] is received.\n"
+"[b]Note:[/b] The HTML5 export might not support all status codes. Please "
+"refer to browser-specific documentation for more details."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketPeer.xml:26
+msgid ""
+"Returns the IP address of the connected peer.\n"
+"[b]Note:[/b] Not available in the HTML5 export."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketPeer.xml:33
+msgid ""
+"Returns the remote port of the connected peer.\n"
+"[b]Note:[/b] Not available in the HTML5 export."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketPeer.xml:40
+msgid ""
+"Returns the current amount of data in the outbound websocket buffer. [b]Note:"
+"[/b] HTML5 exports use WebSocket.bufferedAmount, while other platforms use "
+"an internal buffer."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketPeer.xml:46
+msgid "Gets the current selected write mode. See [enum WriteMode]."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketPeer.xml:52
+msgid "Returns [code]true[/code] if this peer is currently connected."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketPeer.xml:59
+msgid ""
+"Disable Nagle's algorithm on the underling TCP socket (default). See [method "
+"StreamPeerTCP.set_no_delay] for more information.\n"
+"[b]Note:[/b] Not available in the HTML5 export."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketPeer.xml:67
+msgid "Sets the socket to use the given [enum WriteMode]."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketPeer.xml:73
+msgid ""
+"Returns [code]true[/code] if the last received packet was sent as a text "
+"payload. See [enum WriteMode]."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketPeer.xml:79
+msgid ""
+"Specifies that WebSockets messages should be transferred as text payload "
+"(only valid UTF-8 is allowed)."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketPeer.xml:82
+msgid ""
+"Specifies that WebSockets messages should be transferred as binary payload "
+"(any byte combination is allowed)."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketServer.xml:4
+msgid "A WebSocket server implementation."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketServer.xml:7
+msgid ""
+"This class implements a WebSocket server that can also support the high-"
+"level multiplayer API.\n"
+"After starting the server ([method listen]), you will need to [method "
+"NetworkedMultiplayerPeer.poll] it at regular intervals (e.g. inside [method "
+"Node._process]). When clients connect, disconnect, or send data, you will "
+"receive the appropriate signal.\n"
+"[b]Note:[/b] Not available in HTML5 exports."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketServer.xml:20
+msgid ""
+"Disconnects the peer identified by [code]id[/code] from the server. See "
+"[method WebSocketPeer.close] for more information."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketServer.xml:41
+msgid "Returns [code]true[/code] if a peer with the given ID is connected."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketServer.xml:47
+msgid ""
+"Returns [code]true[/code] if the server is actively listening on a port."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketServer.xml:56
+msgid ""
+"Starts listening on the given port.\n"
+"You can specify the desired subprotocols via the \"protocols\" array. If the "
+"list empty (default), no sub-protocol will be requested.\n"
+"If [code]true[/code] is passed as [code]gd_mp_api[/code], the server will "
+"behave like a network peer for the [MultiplayerAPI], connections from non-"
+"Godot clients will not work, and [signal data_received] will not be "
+"emitted.\n"
+"If [code]false[/code] is passed instead (default), you must call "
+"[PacketPeer] functions ([code]put_packet[/code], [code]get_packet[/code], "
+"etc.), on the [WebSocketPeer] returned via [code]get_peer(id)[/code] to "
+"communicate with the peer with given [code]id[/code] (e.g. "
+"[code]get_peer(id).get_available_packet_count[/code])."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketServer.xml:65
+msgid "Stops the server and clear its state."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketServer.xml:71
+msgid ""
+"When not set to [code]*[/code] will restrict incoming connections to the "
+"specified IP address. Setting [code]bind_ip[/code] to [code]127.0.0.1[/code] "
+"will cause the server to listen only to the local host."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketServer.xml:74
+msgid ""
+"When using SSL (see [member private_key] and [member ssl_certificate]), you "
+"can set this to a valid [X509Certificate] to be provided as additional CA "
+"chain information during the SSL handshake."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketServer.xml:77
+msgid ""
+"The time in seconds before a pending client (i.e. a client that has not yet "
+"finished the HTTP handshake) is considered stale and forcefully disconnected."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketServer.xml:80
+msgid ""
+"When set to a valid [CryptoKey] (along with [member ssl_certificate]) will "
+"cause the server to require SSL instead of regular TCP (i.e. the [code]wss://"
+"[/code] protocol)."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketServer.xml:83
+msgid ""
+"When set to a valid [X509Certificate] (along with [member private_key]) will "
+"cause the server to require SSL instead of regular TCP (i.e. the [code]wss://"
+"[/code] protocol)."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketServer.xml:92
+msgid ""
+"Emitted when a client requests a clean close. You should keep polling until "
+"you get a [signal client_disconnected] signal with the same [code]id[/code] "
+"to achieve the clean close. See [method WebSocketPeer.close] for more "
+"details."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketServer.xml:99
+msgid ""
+"Emitted when a new client connects. \"protocol\" will be the sub-protocol "
+"agreed with the client."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketServer.xml:106
+msgid ""
+"Emitted when a client disconnects. [code]was_clean_close[/code] will be "
+"[code]true[/code] if the connection was shutdown cleanly."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketServer.xml:112
+msgid ""
+"Emitted when a new message is received.\n"
+"[b]Note:[/b] This signal is [i]not[/i] emitted when used as high-level "
+"multiplayer peer."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:4
+msgid "AR/VR interface using WebXR."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:7
+msgid ""
+"WebXR is an open standard that allows creating VR and AR applications that "
+"run in the web browser.\n"
+"As such, this interface is only available when running in an HTML5 export.\n"
+"WebXR supports a wide range of devices, from the very capable (like Valve "
+"Index, HTC Vive, Oculus Rift and Quest) down to the much less capable (like "
+"Google Cardboard, Oculus Go, GearVR, or plain smartphones).\n"
+"Since WebXR is based on Javascript, it makes extensive use of callbacks, "
+"which means that [WebXRInterface] is forced to use signals, where other AR/"
+"VR interfaces would instead use functions that return a result immediately. "
+"This makes [WebXRInterface] quite a bit more complicated to initialize than "
+"other AR/VR interfaces.\n"
+"Here's the minimum code required to start an immersive VR session:\n"
+"[codeblock]\n"
+"extends Spatial\n"
+"\n"
+"var webxr_interface\n"
+"var vr_supported = false\n"
+"\n"
+"func _ready():\n"
+" # We assume this node has a button as a child.\n"
+" # This button is for the user to consent to entering immersive VR mode.\n"
+" $Button.connect(\"pressed\", self, \"_on_Button_pressed\")\n"
+"\n"
+" webxr_interface = ARVRServer.find_interface(\"WebXR\")\n"
+" if webxr_interface:\n"
+" # WebXR uses a lot of asynchronous callbacks, so we connect to "
+"various\n"
+" # signals in order to receive them.\n"
+" webxr_interface.connect(\"session_supported\", self, "
+"\"_webxr_session_supported\")\n"
+" webxr_interface.connect(\"session_started\", self, "
+"\"_webxr_session_started\")\n"
+" webxr_interface.connect(\"session_ended\", self, "
+"\"_webxr_session_ended\")\n"
+" webxr_interface.connect(\"session_failed\", self, "
+"\"_webxr_session_failed\")\n"
+"\n"
+" # This returns immediately - our _webxr_session_supported() method\n"
+" # (which we connected to the \"session_supported\" signal above) "
+"will\n"
+" # be called sometime later to let us know if it's supported or not.\n"
+" webxr_interface.is_session_supported(\"immersive-vr\")\n"
+"\n"
+"func _webxr_session_supported(session_mode, supported):\n"
+" if session_mode == 'immersive-vr':\n"
+" vr_supported = supported\n"
+"\n"
+"func _on_Button_pressed():\n"
+" if not vr_supported:\n"
+" OS.alert(\"Your browser doesn't support VR\")\n"
+" return\n"
+"\n"
+" # We want an immersive VR session, as opposed to AR ('immersive-ar') or "
+"a\n"
+" # simple 3DoF viewer ('viewer').\n"
+" webxr_interface.session_mode = 'immersive-vr'\n"
+" # 'bounded-floor' is room scale, 'local-floor' is a standing or sitting\n"
+" # experience (it puts you 1.6m above the ground if you have 3DoF "
+"headset),\n"
+" # whereas as 'local' puts you down at the ARVROrigin.\n"
+" # This list means it'll first try to request 'bounded-floor', then\n"
+" # fallback on 'local-floor' and ultimately 'local', if nothing else is\n"
+" # supported.\n"
+" webxr_interface.requested_reference_space_types = 'bounded-floor, local-"
+"floor, local'\n"
+" # In order to use 'local-floor' or 'bounded-floor' we must also\n"
+" # mark the features as required or optional.\n"
+" webxr_interface.required_features = 'local-floor'\n"
+" webxr_interface.optional_features = 'bounded-floor'\n"
+"\n"
+" # This will return false if we're unable to even request the session,\n"
+" # however, it can still fail asynchronously later in the process, so we\n"
+" # only know if it's really succeeded or failed when our\n"
+" # _webxr_session_started() or _webxr_session_failed() methods are "
+"called.\n"
+" if not webxr_interface.initialize():\n"
+" OS.alert(\"Failed to initialize\")\n"
+" return\n"
+"\n"
+"func _webxr_session_started():\n"
+" $Button.visible = false\n"
+" # This tells Godot to start rendering to the headset.\n"
+" get_viewport().arvr = true\n"
+" # This will be the reference space type you ultimately got, out of the\n"
+" # types that you requested above. This is useful if you want the game "
+"to\n"
+" # work a little differently in 'bounded-floor' versus 'local-floor'.\n"
+" print (\"Reference space type: \" + webxr_interface."
+"reference_space_type)\n"
+"\n"
+"func _webxr_session_ended():\n"
+" $Button.visible = true\n"
+" # If the user exits immersive mode, then we tell Godot to render to the "
+"web\n"
+" # page again.\n"
+" get_viewport().arvr = false\n"
+"\n"
+"func _webxr_session_failed(message):\n"
+" OS.alert(\"Failed to initialize: \" + message)\n"
+"[/codeblock]\n"
+"There are several ways to handle \"controller\" input:\n"
+"- Using [ARVRController] nodes and their [signal ARVRController."
+"button_pressed] and [signal ARVRController.button_release] signals. This is "
+"how controllers are typically handled in AR/VR apps in Godot, however, this "
+"will only work with advanced VR controllers like the Oculus Touch or Index "
+"controllers, for example. The buttons codes are defined by [url=https://"
+"immersive-web.github.io/webxr-gamepads-module/#xr-standard-gamepad-"
+"mapping]Section 3.3 of the WebXR Gamepads Module[/url].\n"
+"- Using [method Node._unhandled_input] and [InputEventJoypadButton] or "
+"[InputEventJoypadMotion]. This works the same as normal joypads, except the "
+"[member InputEvent.device] starts at 100, so the left controller is 100 and "
+"the right controller is 101, and the button codes are also defined by "
+"[url=https://immersive-web.github.io/webxr-gamepads-module/#xr-standard-"
+"gamepad-mapping]Section 3.3 of the WebXR Gamepads Module[/url].\n"
+"- Using the [signal select], [signal squeeze] and related signals. This "
+"method will work for both advanced VR controllers, and non-traditional "
+"\"controllers\" like a tap on the screen, a spoken voice command or a button "
+"press on the device itself. The [code]controller_id[/code] passed to these "
+"signals is the same id as used in [member ARVRController.controller_id].\n"
+"You can use one or all of these methods to allow your game or app to support "
+"a wider or narrower set of devices and input methods, or to allow more "
+"advanced interations with more advanced devices."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:94
+msgid "https://www.snopekgames.com/blog/2020/how-make-vr-game-webxr-godot"
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:101
+msgid ""
+"Gets an [ARVRPositionalTracker] for the given [code]controller_id[/code].\n"
+"In the context of WebXR, a \"controller\" can be an advanced VR controller "
+"like the Oculus Touch or Index controllers, or even a tap on the screen, a "
+"spoken voice command or a button press on the device itself. When a non-"
+"traditional controller is used, interpret the position and orientation of "
+"the [ARVRPositionalTracker] as a ray pointing at the object the user wishes "
+"to interact with.\n"
+"Use this method to get information about the controller that triggered one "
+"of these signals:\n"
+"- [signal selectstart]\n"
+"- [signal select]\n"
+"- [signal selectend]\n"
+"- [signal squeezestart]\n"
+"- [signal squeeze]\n"
+"- [signal squeezestart]"
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:116
+msgid ""
+"Checks if the given [code]session_mode[/code] is supported by the user's "
+"browser.\n"
+"Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/"
+"API/XRSessionMode]WebXR's XRSessionMode[/url], including: [code]\"immersive-"
+"vr\"[/code], [code]\"immersive-ar\"[/code], and [code]\"inline\"[/code].\n"
+"This method returns nothing, instead it emits the [signal session_supported] "
+"signal with the result."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:124
+msgid ""
+"The vertices of a polygon which defines the boundaries of the user's play "
+"area.\n"
+"This will only be available if [member reference_space_type] is "
+"[code]\"bounded-floor\"[/code] and only on certain browsers and devices that "
+"support it.\n"
+"The [signal reference_space_reset] signal may indicate when this changes."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:129
+msgid ""
+"A comma-seperated list of optional features used by [method ARVRInterface."
+"initialize] when setting up the WebXR session.\n"
+"If a user's browser or device doesn't support one of the given features, "
+"initialization will continue, but you won't be able to use the requested "
+"feature.\n"
+"This doesn't have any effect on the interface when already initialized.\n"
+"Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/"
+"API/XRReferenceSpaceType]WebXR's XRReferenceSpaceType[/url]. If you want to "
+"use a particular reference space type, it must be listed in either [member "
+"required_features] or [member optional_features]."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:135
+msgid ""
+"The reference space type (from the list of requested types set in the "
+"[member requested_reference_space_types] property), that was ultimately used "
+"by [method ARVRInterface.initialize] when setting up the WebXR session.\n"
+"Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/"
+"API/XRReferenceSpaceType]WebXR's XRReferenceSpaceType[/url]. If you want to "
+"use a particular reference space type, it must be listed in either [member "
+"required_features] or [member optional_features]."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:139
+msgid ""
+"A comma-seperated list of reference space types used by [method "
+"ARVRInterface.initialize] when setting up the WebXR session.\n"
+"The reference space types are requested in order, and the first on supported "
+"by the users device or browser will be used. The [member "
+"reference_space_type] property contains the reference space type that was "
+"ultimately used.\n"
+"This doesn't have any effect on the interface when already initialized.\n"
+"Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/"
+"API/XRReferenceSpaceType]WebXR's XRReferenceSpaceType[/url]. If you want to "
+"use a particular reference space type, it must be listed in either [member "
+"required_features] or [member optional_features]."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:145
+msgid ""
+"A comma-seperated list of required features used by [method ARVRInterface."
+"initialize] when setting up the WebXR session.\n"
+"If a user's browser or device doesn't support one of the given features, "
+"initialization will fail and [signal session_failed] will be emitted.\n"
+"This doesn't have any effect on the interface when already initialized.\n"
+"Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/"
+"API/XRReferenceSpaceType]WebXR's XRReferenceSpaceType[/url]. If you want to "
+"use a particular reference space type, it must be listed in either [member "
+"required_features] or [member optional_features]."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:151
+msgid ""
+"The session mode used by [method ARVRInterface.initialize] when setting up "
+"the WebXR session.\n"
+"This doesn't have any effect on the interface when already initialized.\n"
+"Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/"
+"API/XRSessionMode]WebXR's XRSessionMode[/url], including: [code]\"immersive-"
+"vr\"[/code], [code]\"immersive-ar\"[/code], and [code]\"inline\"[/code]."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:156
+msgid ""
+"Indicates if the WebXR session's imagery is visible to the user.\n"
+"Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/"
+"API/XRVisibilityState]WebXR's XRVisibilityState[/url], including "
+"[code]\"hidden\"[/code], [code]\"visible\"[/code], and [code]\"visible-"
+"blurred\"[/code]."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:163
+msgid ""
+"Emitted to indicate that the reference space has been reset or "
+"reconfigured.\n"
+"When (or whether) this is emitted depends on the user's browser or device, "
+"but may include when the user has changed the dimensions of their play space "
+"(which you may be able to access via [member bounds_geometry]) or pressed/"
+"held a button to recenter their position.\n"
+"See [url=https://developer.mozilla.org/en-US/docs/Web/API/XRReferenceSpace/"
+"reset_event]WebXR's XRReferenceSpace reset event[/url] for more information."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:171
+msgid ""
+"Emitted after one of the \"controllers\" has finished its \"primary action"
+"\".\n"
+"Use [method get_controller] to get more information about the controller."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:178
+msgid ""
+"Emitted when one of the \"controllers\" has finished its \"primary action"
+"\".\n"
+"Use [method get_controller] to get more information about the controller."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:185
+msgid ""
+"Emitted when one of the \"controllers\" has started its \"primary action\".\n"
+"Use [method get_controller] to get more information about the controller."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:191
+msgid ""
+"Emitted when the user ends the WebXR session (which can be done using UI "
+"from the browser or device).\n"
+"At this point, you should do [code]get_viewport().arvr = false[/code] to "
+"instruct Godot to resume rendering to the screen."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:198
+msgid ""
+"Emitted by [method ARVRInterface.initialize] if the session fails to start.\n"
+"[code]message[/code] may optionally contain an error message from WebXR, or "
+"an empty string if no message is available."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:204
+msgid ""
+"Emitted by [method ARVRInterface.initialize] if the session is successfully "
+"started.\n"
+"At this point, it's safe to do [code]get_viewport().arvr = true[/code] to "
+"instruct Godot to start rendering to the AR/VR device."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:212
+msgid ""
+"Emitted by [method is_session_supported] to indicate if the given "
+"[code]session_mode[/code] is supported or not."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:218
+msgid ""
+"Emitted after one of the \"controllers\" has finished its \"primary squeeze "
+"action\".\n"
+"Use [method get_controller] to get more information about the controller."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:225
+msgid ""
+"Emitted when one of the \"controllers\" has finished its \"primary squeeze "
+"action\".\n"
+"Use [method get_controller] to get more information about the controller."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:232
+msgid ""
+"Emitted when one of the \"controllers\" has started its \"primary squeeze "
+"action\".\n"
+"Use [method get_controller] to get more information about the controller."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:238
+msgid "Emitted when [member visibility_state] has changed."
+msgstr ""
+
+#: doc/classes/WindowDialog.xml:4
+msgid "Base class for window dialogs."
+msgstr ""
+
+#: doc/classes/WindowDialog.xml:7
+msgid ""
+"Windowdialog is the base class for all window-based dialogs. It's a by-"
+"default toplevel [Control] that draws a window decoration and allows motion "
+"and resizing."
+msgstr ""
+
+#: doc/classes/WindowDialog.xml:15
+msgid ""
+"Returns the close [TextureButton].\n"
+"[b]Warning:[/b] This is a required internal node, removing and freeing it "
+"may cause a crash. If you wish to hide it or any of its children, use their "
+"[member CanvasItem.visible] property."
+msgstr ""
+
+#: doc/classes/WindowDialog.xml:22
+msgid "If [code]true[/code], the user can resize the window."
+msgstr ""
+
+#: doc/classes/WindowDialog.xml:25
+msgid "The text displayed in the window's title bar."
+msgstr ""
+
+#: doc/classes/WindowDialog.xml:32
+msgid "The icon for the close button."
+msgstr ""
+
+#: doc/classes/WindowDialog.xml:35
+msgid "The horizontal offset of the close button."
+msgstr ""
+
+#: doc/classes/WindowDialog.xml:38
+msgid ""
+"The icon used for the close button when it's hovered with the mouse cursor."
+msgstr ""
+
+#: doc/classes/WindowDialog.xml:44
+msgid ""
+"The style for both the content background of the [WindowDialog] and the "
+"title bar. The title bar is created with a top border and an expand margin "
+"using the [code]panel[/code] stylebox."
+msgstr ""
+
+#: doc/classes/WindowDialog.xml:47
+msgid ""
+"The thickness of the border that can be dragged when scaling the window (if "
+"[member resizable] is enabled)."
+msgstr ""
+
+#: doc/classes/WindowDialog.xml:50
+msgid "The color of the title text."
+msgstr ""
+
+#: doc/classes/WindowDialog.xml:53
+msgid "The font used to draw the title."
+msgstr ""
+
+#: doc/classes/WindowDialog.xml:56
+msgid "The vertical offset of the title text."
+msgstr ""
+
+#: doc/classes/World.xml:4
+msgid "Class that has everything pertaining to a world."
+msgstr ""
+
+#: doc/classes/World.xml:7
+msgid ""
+"Class that has everything pertaining to a world. A physics space, a visual "
+"scenario and a sound space. Spatial nodes register their resources into the "
+"current world."
+msgstr ""
+
+#: doc/classes/World.xml:16
+msgid ""
+"Direct access to the world's physics 3D space state. Used for querying "
+"current and potential collisions."
+msgstr ""
+
+#: doc/classes/World.xml:19
+msgid "The World's [Environment]."
+msgstr ""
+
+#: doc/classes/World.xml:22
+msgid ""
+"The World's fallback_environment will be used if the World's [Environment] "
+"fails or is missing."
+msgstr ""
+
+#: doc/classes/World.xml:25
+msgid "The World's visual scenario."
+msgstr ""
+
+#: doc/classes/World.xml:28
+msgid "The World's physics space."
+msgstr ""
+
+#: doc/classes/World2D.xml:4
+msgid "Class that has everything pertaining to a 2D world."
+msgstr ""
+
+#: doc/classes/World2D.xml:7
+msgid ""
+"Class that has everything pertaining to a 2D world. A physics space, a "
+"visual scenario and a sound space. 2D nodes register their resources into "
+"the current 2D world."
+msgstr ""
+
+#: doc/classes/World2D.xml:16
+msgid ""
+"The [RID] of this world's canvas resource. Used by the [VisualServer] for 2D "
+"drawing."
+msgstr ""
+
+#: doc/classes/World2D.xml:19
+msgid ""
+"Direct access to the world's physics 2D space state. Used for querying "
+"current and potential collisions. When using multi-threaded physics, access "
+"is limited to [code]_physics_process(delta)[/code] in the main thread."
+msgstr ""
+
+#: doc/classes/World2D.xml:22
+msgid ""
+"The [RID] of this world's physics space resource. Used by the "
+"[Physics2DServer] for 2D physics, treating it as both a space and an area."
+msgstr ""
+
+#: doc/classes/WorldEnvironment.xml:4
+msgid ""
+"Default environment properties for the entire scene (post-processing "
+"effects, lighting and background settings)."
+msgstr ""
+
+#: doc/classes/WorldEnvironment.xml:7
+msgid ""
+"The [WorldEnvironment] node is used to configure the default [Environment] "
+"for the scene.\n"
+"The parameters defined in the [WorldEnvironment] can be overridden by an "
+"[Environment] node set on the current [Camera]. Additionally, only one "
+"[WorldEnvironment] may be instanced in a given scene at a time.\n"
+"The [WorldEnvironment] allows the user to specify default lighting "
+"parameters (e.g. ambient lighting), various post-processing effects (e.g. "
+"SSAO, DOF, Tonemapping), and how to draw the background (e.g. solid color, "
+"skybox). Usually, these are added in order to improve the realism/color "
+"balance of the scene."
+msgstr ""
+
+#: doc/classes/WorldEnvironment.xml:21
+msgid ""
+"The [Environment] resource used by this [WorldEnvironment], defining the "
+"default properties."
+msgstr ""
+
+#: doc/classes/X509Certificate.xml:4
+msgid "An X509 certificate (e.g. for SSL)."
+msgstr ""
+
+#: doc/classes/X509Certificate.xml:7
+msgid ""
+"The X509Certificate class represents an X509 certificate. Certificates can "
+"be loaded and saved like any other [Resource].\n"
+"They can be used as the server certificate in [method StreamPeerSSL."
+"accept_stream] (along with the proper [CryptoKey]), and to specify the only "
+"certificate that should be accepted when connecting to an SSL server via "
+"[method StreamPeerSSL.connect_to_stream].\n"
+"[b]Note:[/b] Not available in HTML5 exports."
+msgstr ""
+
+#: doc/classes/X509Certificate.xml:18
+msgid "Loads a certificate from [code]path[/code] (\"*.crt\" file)."
+msgstr ""
+
+#: doc/classes/X509Certificate.xml:25
+msgid ""
+"Saves a certificate to the given [code]path[/code] (should be a \"*.crt\" "
+"file)."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:4
+msgid ""
+"Low-level class for creating parsers for [url=https://en.wikipedia.org/wiki/"
+"XML]XML[/url] files."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:7
+msgid ""
+"This class can serve as base to make custom XML parsers. Since XML is a very "
+"flexible standard, this interface is low-level so it can be applied to any "
+"possible schema."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:15
+msgid "Gets the amount of attributes in the current element."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:22
+msgid ""
+"Gets the name of the attribute specified by the index in [code]idx[/code] "
+"argument."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:29
+msgid ""
+"Gets the value of the attribute specified by the index in [code]idx[/code] "
+"argument."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:35
+msgid "Gets the current line in the parsed file (currently not implemented)."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:42
+msgid ""
+"Gets the value of a certain attribute of the current element by name. This "
+"will raise an error if the element has no such attribute."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:49
+msgid ""
+"Gets the value of a certain attribute of the current element by name. This "
+"will return an empty [String] if the attribute is not found."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:55
+msgid ""
+"Gets the contents of a text node. This will raise an error in any other type "
+"of node."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:61
+msgid ""
+"Gets the name of the current element node. This will raise an error if the "
+"current node type is neither [constant NODE_ELEMENT] nor [constant "
+"NODE_ELEMENT_END]."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:67
+msgid ""
+"Gets the byte offset of the current node since the beginning of the file or "
+"buffer."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:73
+msgid ""
+"Gets the type of the current node. Compare with [enum NodeType] constants."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:80
+msgid "Check whether the current element has a certain attribute."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:86
+msgid ""
+"Check whether the current element is empty (this only works for completely "
+"empty tags, e.g. [code]<element \\>[/code])."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:93
+msgid "Opens an XML file for parsing. This returns an error code."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:100
+msgid "Opens an XML raw buffer for parsing. This returns an error code."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:106
+msgid "Reads the next node of the file. This returns an error code."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:113
+msgid ""
+"Moves the buffer cursor to a certain offset (since the beginning) and read "
+"the next node there. This returns an error code."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:119
+msgid ""
+"Skips the current section. If the node contains other elements, they will be "
+"ignored and the cursor will go to the closing of the current element."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:125
+msgid "There's no node (no file or buffer opened)."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:128
+msgid "Element (tag)."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:131
+msgid "End of element."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:134
+msgid "Text node."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:137
+msgid "Comment node."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:140
+msgid "CDATA content."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:143
+msgid "Unknown node."
+msgstr ""
+
+#: doc/classes/YSort.xml:4
+msgid "Sort all child nodes based on their Y positions."
+msgstr ""
+
+#: doc/classes/YSort.xml:7
+msgid ""
+"Sort all child nodes based on their Y positions. The child node must inherit "
+"from [CanvasItem] for it to be sorted. Nodes that have a higher Y position "
+"will be drawn later, so they will appear on top of nodes that have a lower Y "
+"position.\n"
+"Nesting of YSort nodes is possible. Children YSort nodes will be sorted in "
+"the same space as the parent YSort, allowing to better organize a scene or "
+"divide it in multiple ones, yet keep the unique sorting."
+msgstr ""
+
+#: doc/classes/YSort.xml:16
+msgid ""
+"If [code]true[/code], child nodes are sorted, otherwise sorting is disabled."
+msgstr ""
diff --git a/doc/translations/th.po b/doc/translations/th.po
index 6e2512e6fa..028fd593bb 100644
--- a/doc/translations/th.po
+++ b/doc/translations/th.po
@@ -23,43 +23,43 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 4.7-dev\n"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Description"
msgstr "รายละเอียด"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Tutorials"
msgstr "บทสอน"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Properties"
msgstr "คุณสมบัติ"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Methods"
msgstr "เมธอด"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Theme Properties"
msgstr "คุณสมบัติธีม"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Signals"
msgstr "สัà¸à¸à¸²à¸“"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Enumerations"
msgstr "อีนัม"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Constants"
msgstr "ค่าคงที่"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Property Descriptions"
msgstr "รายละเอียดของคุณสมบัติ"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Method Descriptions"
msgstr "รายละเอียดเมท็อด"
@@ -3690,112 +3690,121 @@ msgid ""
msgstr ""
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr ""
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
msgstr ""
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
msgstr ""
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
msgstr ""
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr ""
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr ""
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr ""
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
msgstr ""
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr ""
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
msgstr ""
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
msgstr ""
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr ""
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
"positive.\n"
@@ -4873,7 +4882,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -6310,21 +6319,25 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
#: doc/classes/Area.xml:17
msgid ""
-"Returns a list of intersecting [Area]s. For performance reasons (collisions "
-"are all processed at the same time) this list is modified once during the "
-"physics step, not immediately after objects are moved. Consider using "
-"signals instead."
+"Returns a list of intersecting [Area]s. The overlapping area's [member "
+"CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:23
+#: doc/classes/Area.xml:24
msgid ""
-"Returns a list of intersecting [PhysicsBody]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody]s. The overlapping body's "
+"[member CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:30
+#: doc/classes/Area.xml:32
msgid ""
"If [code]true[/code], the given area overlaps the Area.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6332,7 +6345,7 @@ msgid ""
"physics step. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:38
+#: doc/classes/Area.xml:40
msgid ""
"If [code]true[/code], the given physics body overlaps the Area.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6343,7 +6356,7 @@ msgid ""
"their tiles with collision shapes as a virtual physics body)."
msgstr ""
-#: doc/classes/Area.xml:46
+#: doc/classes/Area.xml:48
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
"velocity lost per second.\n"
@@ -6351,41 +6364,41 @@ msgid ""
"details about damping."
msgstr ""
-#: doc/classes/Area.xml:50 doc/classes/Area2D.xml:52
+#: doc/classes/Area.xml:52 doc/classes/Area2D.xml:54
msgid "The name of the area's audio bus."
msgstr ""
-#: doc/classes/Area.xml:53 doc/classes/Area2D.xml:55
+#: doc/classes/Area.xml:55 doc/classes/Area2D.xml:57
msgid ""
"If [code]true[/code], the area's audio bus overrides the default audio bus."
msgstr ""
-#: doc/classes/Area.xml:56
+#: doc/classes/Area.xml:58
msgid ""
"The area's gravity intensity (in meters per second squared). This value "
"multiplies the gravity vector. This is useful to alter the force of gravity "
"without altering its direction."
msgstr ""
-#: doc/classes/Area.xml:59 doc/classes/Area2D.xml:61
+#: doc/classes/Area.xml:61 doc/classes/Area2D.xml:63
msgid ""
"The falloff factor for point gravity. The greater the value, the faster "
"gravity decreases with distance."
msgstr ""
-#: doc/classes/Area.xml:62 doc/classes/Area2D.xml:64
+#: doc/classes/Area.xml:64 doc/classes/Area2D.xml:66
msgid ""
"If [code]true[/code], gravity is calculated from a point (set via [member "
"gravity_vec]). See also [member space_override]."
msgstr ""
-#: doc/classes/Area.xml:65 doc/classes/Area2D.xml:67
+#: doc/classes/Area.xml:67 doc/classes/Area2D.xml:69
msgid ""
"The area's gravity vector (not normalized). If gravity is a point (see "
"[member gravity_point]), this will be the point of attraction."
msgstr ""
-#: doc/classes/Area.xml:68
+#: doc/classes/Area.xml:70
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
"velocity lost per second.\n"
@@ -6393,61 +6406,61 @@ msgid ""
"about damping."
msgstr ""
-#: doc/classes/Area.xml:72 doc/classes/Area2D.xml:74
+#: doc/classes/Area.xml:74 doc/classes/Area2D.xml:76
msgid "If [code]true[/code], other monitoring areas can detect this area."
msgstr ""
-#: doc/classes/Area.xml:75 doc/classes/Area2D.xml:77
+#: doc/classes/Area.xml:77 doc/classes/Area2D.xml:79
msgid ""
"If [code]true[/code], the area detects bodies or areas entering and exiting "
"it."
msgstr ""
-#: doc/classes/Area.xml:78 doc/classes/Area2D.xml:80
+#: doc/classes/Area.xml:80 doc/classes/Area2D.xml:82
msgid "The area's priority. Higher priority areas are processed first."
msgstr ""
-#: doc/classes/Area.xml:81
+#: doc/classes/Area.xml:83
msgid ""
"The degree to which this area applies reverb to its associated audio. Ranges "
"from [code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
msgstr ""
-#: doc/classes/Area.xml:84
+#: doc/classes/Area.xml:86
msgid "If [code]true[/code], the area applies reverb to its associated audio."
msgstr ""
-#: doc/classes/Area.xml:87
+#: doc/classes/Area.xml:89
msgid "The reverb bus name to use for this area's associated audio."
msgstr ""
-#: doc/classes/Area.xml:90
+#: doc/classes/Area.xml:92
msgid ""
"The degree to which this area's reverb is a uniform effect. Ranges from "
"[code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
msgstr ""
-#: doc/classes/Area.xml:93 doc/classes/Area2D.xml:83
+#: doc/classes/Area.xml:95 doc/classes/Area2D.xml:85
msgid ""
"Override mode for gravity and damping calculations within this area. See "
"[enum SpaceOverride] for possible values."
msgstr ""
-#: doc/classes/Area.xml:100
+#: doc/classes/Area.xml:102
msgid ""
"Emitted when another Area enters this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
-#: doc/classes/Area.xml:107
+#: doc/classes/Area.xml:109
msgid ""
"Emitted when another Area exits this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
-#: doc/classes/Area.xml:117 doc/classes/Area.xml:130
+#: doc/classes/Area.xml:119 doc/classes/Area.xml:132
msgid ""
"Emitted when one of another Area's [Shape]s enters one of this Area's "
"[Shape]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6462,7 +6475,7 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:140
+#: doc/classes/Area.xml:142
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] enters this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -6471,7 +6484,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:147
+#: doc/classes/Area.xml:149
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] exits this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -6480,7 +6493,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:157 doc/classes/Area.xml:170
+#: doc/classes/Area.xml:159 doc/classes/Area.xml:172
msgid ""
"Emitted when one of a [PhysicsBody] or [GridMap]'s [Shape]s enters one of "
"this Area's [Shape]s. Requires [member monitoring] to be set to [code]true[/"
@@ -6497,29 +6510,29 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:180 doc/classes/Area2D.xml:170
+#: doc/classes/Area.xml:182 doc/classes/Area2D.xml:172
msgid "This area does not affect gravity/damping."
msgstr ""
-#: doc/classes/Area.xml:183 doc/classes/Area2D.xml:173
+#: doc/classes/Area.xml:185 doc/classes/Area2D.xml:175
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order)."
msgstr ""
-#: doc/classes/Area.xml:186 doc/classes/Area2D.xml:176
+#: doc/classes/Area.xml:188 doc/classes/Area2D.xml:178
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order), ignoring any lower priority areas."
msgstr ""
-#: doc/classes/Area.xml:189 doc/classes/Area2D.xml:179
+#: doc/classes/Area.xml:191 doc/classes/Area2D.xml:181
msgid ""
"This area replaces any gravity/damping, even the defaults, ignoring any "
"lower priority areas."
msgstr ""
-#: doc/classes/Area.xml:192 doc/classes/Area2D.xml:182
+#: doc/classes/Area.xml:194 doc/classes/Area2D.xml:184
msgid ""
"This area replaces any gravity/damping calculated so far (in [member "
"priority] order), but keeps calculating the rest of the areas."
@@ -6558,21 +6571,25 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
#: doc/classes/Area2D.xml:19
msgid ""
-"Returns a list of intersecting [Area2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [Area2D]s. The overlapping area's [member "
+"CollisionObject2D.collision_layer] must be part of this area's [member "
+"CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:25
+#: doc/classes/Area2D.xml:26
msgid ""
-"Returns a list of intersecting [PhysicsBody2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody2D]s. The overlapping body's "
+"[member CollisionObject2D.collision_layer] must be part of this area's "
+"[member CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:32
+#: doc/classes/Area2D.xml:34
msgid ""
"If [code]true[/code], the given area overlaps the Area2D.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6580,7 +6597,7 @@ msgid ""
"the physics step. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:40
+#: doc/classes/Area2D.xml:42
msgid ""
"If [code]true[/code], the given physics body overlaps the Area2D.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6591,7 +6608,7 @@ msgid ""
"register their tiles with collision shapes as a virtual physics body)."
msgstr ""
-#: doc/classes/Area2D.xml:48
+#: doc/classes/Area2D.xml:50
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
"velocity lost per second.\n"
@@ -6599,14 +6616,14 @@ msgid ""
"details about damping."
msgstr ""
-#: doc/classes/Area2D.xml:58
+#: doc/classes/Area2D.xml:60
msgid ""
"The area's gravity intensity (in pixels per second squared). This value "
"multiplies the gravity vector. This is useful to alter the force of gravity "
"without altering its direction."
msgstr ""
-#: doc/classes/Area2D.xml:70
+#: doc/classes/Area2D.xml:72
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
"velocity lost per second.\n"
@@ -6614,21 +6631,21 @@ msgid ""
"about damping."
msgstr ""
-#: doc/classes/Area2D.xml:90
+#: doc/classes/Area2D.xml:92
msgid ""
"Emitted when another Area2D enters this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-#: doc/classes/Area2D.xml:97
+#: doc/classes/Area2D.xml:99
msgid ""
"Emitted when another Area2D exits this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-#: doc/classes/Area2D.xml:107
+#: doc/classes/Area2D.xml:109
msgid ""
"Emitted when one of another Area2D's [Shape2D]s enters one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6643,7 +6660,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:120
+#: doc/classes/Area2D.xml:122
msgid ""
"Emitted when one of another Area2D's [Shape2D]s exits one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6658,7 +6675,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:130
+#: doc/classes/Area2D.xml:132
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] enters this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -6667,7 +6684,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:137
+#: doc/classes/Area2D.xml:139
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] exits this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -6676,7 +6693,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:147
+#: doc/classes/Area2D.xml:149
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s enters one "
"of this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -6695,7 +6712,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:160
+#: doc/classes/Area2D.xml:162
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s exits one of "
"this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -10266,42 +10283,47 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
-"no save path is provided it will try to match the path from the current "
+"no root node is provided, parent of this node will be used as root instead. "
+"If no save path is provided it will try to match the path from the current "
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -10315,62 +10337,62 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
msgid "The rotation of the baked custom sky."
msgstr ""
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -10378,35 +10400,35 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -10414,13 +10436,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -10432,65 +10454,77 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr ""
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
msgid "Baking was successful."
msgstr ""
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr ""
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr ""
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr ""
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:133
+#: doc/classes/BakedLightmap.xml:132
+msgid ""
+"Returns if lightmapper can't be created. Unless you are using a custom "
+"lightmapper, please report this as bug."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:135
+msgid ""
+"There is no root node to start baking from. Either provide [code]from_node[/"
+"code] argument or attach this node to a parent that should be used as root."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:136
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:139
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:142
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -10946,8 +10980,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -11335,26 +11372,33 @@ msgid "Text [Color] used when the [Button] is disabled."
msgstr ""
#: doc/classes/Button.xml:77
-msgid "Text [Color] used when the [Button] is being hovered."
+msgid ""
+"Text [Color] used when the [Button] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/Button.xml:80
-msgid "Text [Color] used when the [Button] is being pressed."
+msgid "Text [Color] used when the [Button] is being hovered."
msgstr ""
#: doc/classes/Button.xml:83
-msgid "[StyleBox] used when the [Button] is being hovered."
+msgid "Text [Color] used when the [Button] is being pressed."
msgstr ""
#: doc/classes/Button.xml:86
-msgid "The horizontal space between [Button]'s icon and text."
+msgid "[StyleBox] used when the [Button] is being hovered."
msgstr ""
#: doc/classes/Button.xml:89
-msgid "Default [StyleBox] for the [Button]."
+msgid "The horizontal space between [Button]'s icon and text."
msgstr ""
#: doc/classes/Button.xml:92
+msgid "Default [StyleBox] for the [Button]."
+msgstr ""
+
+#: doc/classes/Button.xml:95
msgid "[StyleBox] used when the [Button] is being pressed."
msgstr ""
@@ -12825,80 +12869,96 @@ msgstr ""
msgid "The check icon to display when the [CheckBox] is checked."
msgstr ""
-#: doc/classes/CheckBox.xml:30
+#: doc/classes/CheckBox.xml:28
+msgid "The check icon to display when the [CheckBox] is checked and disabled."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:31
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is disabled."
msgstr ""
-#: doc/classes/CheckBox.xml:33
+#: doc/classes/CheckBox.xml:34
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is focused."
msgstr ""
-#: doc/classes/CheckBox.xml:36
+#: doc/classes/CheckBox.xml:37
msgid "The [Font] to use for the [CheckBox] text."
msgstr ""
-#: doc/classes/CheckBox.xml:39
+#: doc/classes/CheckBox.xml:40
msgid "The [CheckBox] text's font color."
msgstr ""
-#: doc/classes/CheckBox.xml:42
+#: doc/classes/CheckBox.xml:43
msgid "The [CheckBox] text's font color when it's disabled."
msgstr ""
-#: doc/classes/CheckBox.xml:45
+#: doc/classes/CheckBox.xml:46
+msgid ""
+"The [CheckBox] text's font color when it's focused. Only replaces the normal "
+"text color of the checkbox. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:49
msgid "The [CheckBox] text's font color when it's hovered."
msgstr ""
-#: doc/classes/CheckBox.xml:48
+#: doc/classes/CheckBox.xml:52
msgid "The [CheckBox] text's font color when it's hovered and pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:51
+#: doc/classes/CheckBox.xml:55
msgid "The [CheckBox] text's font color when it's pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:54
+#: doc/classes/CheckBox.xml:58
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered."
msgstr ""
-#: doc/classes/CheckBox.xml:57
+#: doc/classes/CheckBox.xml:61
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered and "
"pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:60
+#: doc/classes/CheckBox.xml:64
msgid "The separation between the check icon and the text (in pixels)."
msgstr ""
-#: doc/classes/CheckBox.xml:63 doc/classes/CheckButton.xml:58
+#: doc/classes/CheckBox.xml:67 doc/classes/CheckButton.xml:61
msgid "The [StyleBox] to display as a background."
msgstr ""
-#: doc/classes/CheckBox.xml:66
+#: doc/classes/CheckBox.xml:70
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:69
+#: doc/classes/CheckBox.xml:73
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is checked."
msgstr ""
-#: doc/classes/CheckBox.xml:74
+#: doc/classes/CheckBox.xml:78
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is unchecked."
msgstr ""
-#: doc/classes/CheckBox.xml:79
+#: doc/classes/CheckBox.xml:83
msgid "The check icon to display when the [CheckBox] is unchecked."
msgstr ""
+#: doc/classes/CheckBox.xml:86
+msgid ""
+"The check icon to display when the [CheckBox] is unchecked and disabled."
+msgstr ""
+
#: doc/classes/CheckButton.xml:4
msgid "Checkable button. See also [CheckBox]."
msgstr ""
@@ -12942,49 +13002,56 @@ msgid "The [CheckButton] text's font color when it's disabled."
msgstr ""
#: doc/classes/CheckButton.xml:40
-msgid "The [CheckButton] text's font color when it's hovered."
+msgid ""
+"The [CheckButton] text's font color when it's focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/CheckButton.xml:43
-msgid "The [CheckButton] text's font color when it's hovered and pressed."
+msgid "The [CheckButton] text's font color when it's hovered."
msgstr ""
#: doc/classes/CheckButton.xml:46
-msgid "The [CheckButton] text's font color when it's pressed."
+msgid "The [CheckButton] text's font color when it's hovered and pressed."
msgstr ""
#: doc/classes/CheckButton.xml:49
+msgid "The [CheckButton] text's font color when it's pressed."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:52
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered."
msgstr ""
-#: doc/classes/CheckButton.xml:52
+#: doc/classes/CheckButton.xml:55
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered "
"and pressed."
msgstr ""
-#: doc/classes/CheckButton.xml:55
+#: doc/classes/CheckButton.xml:58
msgid "The separation between the toggle icon and the text (in pixels)."
msgstr ""
-#: doc/classes/CheckButton.xml:61
+#: doc/classes/CheckButton.xml:64
msgid "The icon to display when the [CheckButton] is unchecked."
msgstr ""
-#: doc/classes/CheckButton.xml:64
+#: doc/classes/CheckButton.xml:67
msgid "The icon to display when the [CheckButton] is unchecked and disabled."
msgstr ""
-#: doc/classes/CheckButton.xml:67
+#: doc/classes/CheckButton.xml:70
msgid "The icon to display when the [CheckButton] is checked."
msgstr ""
-#: doc/classes/CheckButton.xml:70
+#: doc/classes/CheckButton.xml:73
msgid "The icon to display when the [CheckButton] is checked and disabled."
msgstr ""
-#: doc/classes/CheckButton.xml:73
+#: doc/classes/CheckButton.xml:76
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is pressed."
msgstr ""
@@ -14759,26 +14826,33 @@ msgid "Text [Color] used when the [ColorPickerButton] is disabled."
msgstr ""
#: doc/classes/ColorPickerButton.xml:80
-msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
+msgid ""
+"Text [Color] used when the [ColorPickerButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/ColorPickerButton.xml:83
-msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
+msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
msgstr ""
#: doc/classes/ColorPickerButton.xml:86
-msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
+msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
msgstr ""
#: doc/classes/ColorPickerButton.xml:89
-msgid "The horizontal space between [ColorPickerButton]'s icon and text."
+msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
msgstr ""
#: doc/classes/ColorPickerButton.xml:92
-msgid "Default [StyleBox] for the [ColorPickerButton]."
+msgid "The horizontal space between [ColorPickerButton]'s icon and text."
msgstr ""
#: doc/classes/ColorPickerButton.xml:95
+msgid "Default [StyleBox] for the [ColorPickerButton]."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:98
msgid "[StyleBox] used when the [ColorPickerButton] is being pressed."
msgstr ""
@@ -20008,7 +20082,8 @@ msgid ""
"get_resource_type]. They may optionally specify some import presets that "
"affect the import process. EditorImportPlugins are responsible for creating "
"the resources and saving them in the [code].import[/code] directory (see "
-"[member ProjectSettings.application/config/project_data_dir_name]).\n"
+"[member ProjectSettings.application/config/"
+"use_hidden_project_data_directory]).\n"
"Below is an example EditorImportPlugin that imports a [Mesh] from a file "
"with the extension \".special\" or \".spec\":\n"
"[codeblock]\n"
@@ -20135,7 +20210,7 @@ msgstr ""
msgid ""
"Gets the extension used to save this resource in the [code].import[/code] "
"directory (see [member ProjectSettings.application/config/"
-"project_data_dir_name])."
+"use_hidden_project_data_directory])."
msgstr ""
#: doc/classes/EditorImportPlugin.xml:130
@@ -21170,8 +21245,11 @@ msgstr ""
msgid "Emitted when the value of the edited resource was changed."
msgstr ""
-#: doc/classes/EditorResourcePicker.xml:89
-msgid "Emitted when the resource value was set and user clicked to edit it."
+#: doc/classes/EditorResourcePicker.xml:90
+msgid ""
+"Emitted when the resource value was set and user clicked to edit it. When "
+"[code]edit[/code] is [code]true[/code], the signal was caused by the context "
+"menu \"Edit\" option."
msgstr ""
#: doc/classes/EditorResourcePreview.xml:4
@@ -24920,21 +24998,32 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html"
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -24943,14 +25032,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -24960,80 +25053,80 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
msgstr ""
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr ""
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -27782,16 +27875,18 @@ msgstr ""
#: doc/classes/Image.xml:436
msgid ""
"OpenGL texture format [code]RED[/code] with a single component and a "
-"bitdepth of 8."
+"bitdepth of 8.\n"
+"[b]Note:[/b] When using the GLES2 backend, this uses the alpha channel "
+"instead of the red channel for storage."
msgstr ""
-#: doc/classes/Image.xml:439
+#: doc/classes/Image.xml:440
msgid ""
"OpenGL texture format [code]RG[/code] with two components and a bitdepth of "
"8 for each."
msgstr ""
-#: doc/classes/Image.xml:442
+#: doc/classes/Image.xml:443
msgid ""
"OpenGL texture format [code]RGB[/code] with three components, each with a "
"bitdepth of 8.\n"
@@ -27799,7 +27894,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:446
+#: doc/classes/Image.xml:447
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 8.\n"
@@ -27807,73 +27902,73 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:450
+#: doc/classes/Image.xml:451
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 4."
msgstr ""
-#: doc/classes/Image.xml:453
+#: doc/classes/Image.xml:454
msgid ""
"OpenGL texture format [code]GL_RGB5_A1[/code] where 5 bits of depth for each "
"component of RGB and one bit for alpha."
msgstr ""
-#: doc/classes/Image.xml:456
+#: doc/classes/Image.xml:457
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 32-"
"bit floating-point value."
msgstr ""
-#: doc/classes/Image.xml:459
+#: doc/classes/Image.xml:460
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:462
+#: doc/classes/Image.xml:463
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:465
+#: doc/classes/Image.xml:466
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:468
+#: doc/classes/Image.xml:469
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 16-"
"bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:471
+#: doc/classes/Image.xml:472
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:474
+#: doc/classes/Image.xml:475
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:477
+#: doc/classes/Image.xml:478
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:480
+#: doc/classes/Image.xml:481
msgid ""
"A special OpenGL texture format where the three color components have 9 bits "
"of precision and all three share a single 5-bit exponent."
msgstr ""
-#: doc/classes/Image.xml:483
+#: doc/classes/Image.xml:484
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 1, and is the smallest variation "
@@ -27883,7 +27978,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:487
+#: doc/classes/Image.xml:488
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 2, and color data is interpreted "
@@ -27893,7 +27988,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:491
+#: doc/classes/Image.xml:492
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format also known as Block Compression 3 or BC3 that contains 64 "
@@ -27904,7 +27999,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:495
+#: doc/classes/Image.xml:496
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -27912,7 +28007,7 @@ msgid ""
"DXT5 uses for the alpha channel."
msgstr ""
-#: doc/classes/Image.xml:498
+#: doc/classes/Image.xml:499
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -27920,7 +28015,7 @@ msgid ""
"algorithm that DXT5 uses for the alpha channel."
msgstr ""
-#: doc/classes/Image.xml:501
+#: doc/classes/Image.xml:502
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned normalized "
@@ -27929,21 +28024,21 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:505
+#: doc/classes/Image.xml:506
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with signed floating-point "
"RGB components."
msgstr ""
-#: doc/classes/Image.xml:508
+#: doc/classes/Image.xml:509
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned floating-point "
"RGB components."
msgstr ""
-#: doc/classes/Image.xml:511
+#: doc/classes/Image.xml:512
msgid ""
"Texture format used on PowerVR-supported mobile platforms, uses 2-bit color "
"depth with no alpha. More information can be found [url=https://en.wikipedia."
@@ -27952,25 +28047,25 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:515
+#: doc/classes/Image.xml:516
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with an "
"alpha component."
msgstr ""
-#: doc/classes/Image.xml:518
+#: doc/classes/Image.xml:519
msgid ""
"Similar to [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with 4-"
"bit color depth and no alpha."
msgstr ""
-#: doc/classes/Image.xml:521
+#: doc/classes/Image.xml:522
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC4[/url], but with an "
"alpha component."
msgstr ""
-#: doc/classes/Image.xml:524
+#: doc/classes/Image.xml:525
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC1]Ericsson Texture Compression format 1[/"
@@ -27978,7 +28073,7 @@ msgid ""
"standard. This format cannot store an alpha channel."
msgstr ""
-#: doc/classes/Image.xml:527
+#: doc/classes/Image.xml:528
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27986,7 +28081,7 @@ msgid ""
"unsigned data."
msgstr ""
-#: doc/classes/Image.xml:530
+#: doc/classes/Image.xml:531
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -27994,7 +28089,7 @@ msgid ""
"channel of signed data."
msgstr ""
-#: doc/classes/Image.xml:533
+#: doc/classes/Image.xml:534
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28002,7 +28097,7 @@ msgid ""
"of unsigned data."
msgstr ""
-#: doc/classes/Image.xml:536
+#: doc/classes/Image.xml:537
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28010,7 +28105,7 @@ msgid ""
"channels of signed data."
msgstr ""
-#: doc/classes/Image.xml:539
+#: doc/classes/Image.xml:540
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28020,7 +28115,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:543
+#: doc/classes/Image.xml:544
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28030,7 +28125,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:547
+#: doc/classes/Image.xml:548
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28041,31 +28136,31 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:551
+#: doc/classes/Image.xml:552
msgid "Represents the size of the [enum Format] enum."
msgstr ""
-#: doc/classes/Image.xml:554
+#: doc/classes/Image.xml:555
msgid ""
"Performs nearest-neighbor interpolation. If the image is resized, it will be "
"pixelated."
msgstr ""
-#: doc/classes/Image.xml:557
+#: doc/classes/Image.xml:558
msgid ""
"Performs bilinear interpolation. If the image is resized, it will be blurry. "
"This mode is faster than [constant INTERPOLATE_CUBIC], but it results in "
"lower quality."
msgstr ""
-#: doc/classes/Image.xml:560
+#: doc/classes/Image.xml:561
msgid ""
"Performs cubic interpolation. If the image is resized, it will be blurry. "
"This mode often gives better results compared to [constant "
"INTERPOLATE_BILINEAR], at the cost of being slower."
msgstr ""
-#: doc/classes/Image.xml:563
+#: doc/classes/Image.xml:564
msgid ""
"Performs bilinear separately on the two most-suited mipmap levels, then "
"linearly interpolates between them.\n"
@@ -28080,55 +28175,55 @@ msgid ""
"a new set will be generated for the resulting image."
msgstr ""
-#: doc/classes/Image.xml:570
+#: doc/classes/Image.xml:571
msgid ""
"Performs Lanczos interpolation. This is the slowest image resizing mode, but "
"it typically gives the best results, especially when downscalng images."
msgstr ""
-#: doc/classes/Image.xml:573
+#: doc/classes/Image.xml:574
msgid "Image does not have alpha."
msgstr ""
-#: doc/classes/Image.xml:576
+#: doc/classes/Image.xml:577
msgid "Image stores alpha in a single bit."
msgstr ""
-#: doc/classes/Image.xml:579
+#: doc/classes/Image.xml:580
msgid "Image uses alpha."
msgstr ""
-#: doc/classes/Image.xml:582
+#: doc/classes/Image.xml:583
msgid "Use S3TC compression."
msgstr ""
-#: doc/classes/Image.xml:585
+#: doc/classes/Image.xml:586
msgid "Use PVRTC2 compression."
msgstr ""
-#: doc/classes/Image.xml:588
+#: doc/classes/Image.xml:589
msgid "Use PVRTC4 compression."
msgstr ""
-#: doc/classes/Image.xml:591
+#: doc/classes/Image.xml:592
msgid "Use ETC compression."
msgstr ""
-#: doc/classes/Image.xml:594
+#: doc/classes/Image.xml:595
msgid "Use ETC2 compression."
msgstr ""
-#: doc/classes/Image.xml:597
+#: doc/classes/Image.xml:598
msgid ""
"Source texture (before compression) is a regular texture. Default for all "
"textures."
msgstr ""
-#: doc/classes/Image.xml:600
+#: doc/classes/Image.xml:601
msgid "Source texture (before compression) is in sRGB space."
msgstr ""
-#: doc/classes/Image.xml:603
+#: doc/classes/Image.xml:604
msgid ""
"Source texture (before compression) is a normal texture (e.g. it can be "
"compressed into two channels)."
@@ -28353,6 +28448,17 @@ msgstr ""
#: doc/classes/Input.xml:43
msgid ""
+"Sends all input events which are in the current buffer to the game loop. "
+"These events may have been buffered as a result of accumulated input "
+"([method set_use_accumulated_input]) or agile input flushing ([member "
+"ProjectSettings.input_devices/buffering/agile_event_flushing]).\n"
+"The engine will already do this itself at key execution points (at least "
+"once per frame). However, this can be useful in advanced cases where you "
+"want precise control over the timing of event handling."
+msgstr ""
+
+#: doc/classes/Input.xml:50
+msgid ""
"Returns the acceleration of the device's accelerometer sensor, if the device "
"has one. Otherwise, the method returns [constant Vector3.ZERO].\n"
"Note this method returns an empty [Vector3] when running from the editor "
@@ -28364,7 +28470,7 @@ msgid ""
"the Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:53
+#: doc/classes/Input.xml:60
msgid ""
"Returns a value between 0 and 1 representing the raw intensity of the given "
"action, ignoring the action's deadzone. In most cases, you should use "
@@ -28374,7 +28480,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:62
+#: doc/classes/Input.xml:69
#, fuzzy
msgid ""
"Returns a value between 0 and 1 representing the intensity of the given "
@@ -28390,7 +28496,7 @@ msgstr ""
"(อะนาล็อà¸à¸«à¸£à¸·à¸­à¸—ริà¸à¹€à¸à¸­à¸£à¹Œ L2, R2) อยู่ห่างจาภdead zone มาà¸à¹€à¸—่าใดค่าà¸à¹‡à¸ˆà¸°à¸¢à¸´à¹ˆà¸‡à¹ƒà¸à¸¥à¹‰à¹€à¸„ียงà¸à¸±à¸š 1 "
"มาà¸à¸‚ึ้นเท่านั้น ถ้าà¸à¸²à¸£ action ถูà¸à¸ˆà¸±à¸šà¸„ู่à¸à¸±à¸šà¸•ัวควบคุมที่ไม่มีà¹à¸à¸™à¹€à¸›à¹‡à¸™à¹à¸›à¹‰à¸™à¸žà¸´à¸¡à¸žà¹Œà¸„่าที่ส่งคืนà¸à¹‡à¸ˆà¸°à¹€à¸›à¹‡à¸™ 0 หรือ 1"
-#: doc/classes/Input.xml:71
+#: doc/classes/Input.xml:78
msgid ""
"Get axis input by specifying two actions, one negative and one positive.\n"
"This is a shorthand for writing [code]Input."
@@ -28398,17 +28504,17 @@ msgid ""
"get_action_strength(\"negative_action\")[/code]."
msgstr ""
-#: doc/classes/Input.xml:78
+#: doc/classes/Input.xml:85
msgid ""
"Returns an [Array] containing the device IDs of all currently connected "
"joypads."
msgstr ""
-#: doc/classes/Input.xml:84
+#: doc/classes/Input.xml:91
msgid "Returns the currently assigned cursor shape (see [enum CursorShape])."
msgstr ""
-#: doc/classes/Input.xml:90
+#: doc/classes/Input.xml:97
msgid ""
"Returns the gravity of the device's accelerometer sensor, if the device has "
"one. Otherwise, the method returns [constant Vector3.ZERO].\n"
@@ -28418,7 +28524,7 @@ msgid ""
"Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:97
+#: doc/classes/Input.xml:104
msgid ""
"Returns the rotation rate in rad/s around a device's X, Y, and Z axes of the "
"gyroscope sensor, if the device has one. Otherwise, the method returns "
@@ -28427,53 +28533,53 @@ msgid ""
"it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:106
+#: doc/classes/Input.xml:113
msgid ""
"Returns the current value of the joypad axis at given index (see [enum "
"JoystickList])."
msgstr ""
-#: doc/classes/Input.xml:113
+#: doc/classes/Input.xml:120
msgid "Returns the index of the provided axis name."
msgstr ""
-#: doc/classes/Input.xml:120
+#: doc/classes/Input.xml:127
msgid ""
"Receives a [enum JoystickList] axis and returns its equivalent name as a "
"string."
msgstr ""
-#: doc/classes/Input.xml:127
+#: doc/classes/Input.xml:134
msgid "Returns the index of the provided button name."
msgstr ""
-#: doc/classes/Input.xml:134
+#: doc/classes/Input.xml:141
msgid ""
"Receives a gamepad button from [enum JoystickList] and returns its "
"equivalent name as a string."
msgstr ""
-#: doc/classes/Input.xml:141
+#: doc/classes/Input.xml:148
msgid ""
"Returns a SDL2-compatible device GUID on platforms that use gamepad "
"remapping. Returns [code]\"Default Gamepad\"[/code] otherwise."
msgstr ""
-#: doc/classes/Input.xml:148
+#: doc/classes/Input.xml:155
msgid "Returns the name of the joypad at the specified device index."
msgstr ""
-#: doc/classes/Input.xml:155
+#: doc/classes/Input.xml:162
msgid "Returns the duration of the current vibration effect in seconds."
msgstr ""
-#: doc/classes/Input.xml:162
+#: doc/classes/Input.xml:169
msgid ""
"Returns the strength of the joypad vibration: x is the strength of the weak "
"motor, and y is the strength of the strong motor."
msgstr ""
-#: doc/classes/Input.xml:168
+#: doc/classes/Input.xml:175
msgid ""
"Returns the mouse speed for the last time the cursor was moved, and this "
"until the next frame where the mouse moves. This means that even if the "
@@ -28481,7 +28587,7 @@ msgid ""
"motion."
msgstr ""
-#: doc/classes/Input.xml:174
+#: doc/classes/Input.xml:181
msgid ""
"Returns the magnetic field strength in micro-Tesla for all axes of the "
"device's magnetometer sensor, if the device has one. Otherwise, the method "
@@ -28490,17 +28596,17 @@ msgid ""
"platforms, it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:181
+#: doc/classes/Input.xml:188
msgid ""
"Returns mouse buttons as a bitmask. If multiple mouse buttons are pressed at "
"the same time, the bits are added together."
msgstr ""
-#: doc/classes/Input.xml:187
+#: doc/classes/Input.xml:194
msgid "Returns the mouse mode. See the constants for more information."
msgstr ""
-#: doc/classes/Input.xml:198
+#: doc/classes/Input.xml:205
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -28513,7 +28619,7 @@ msgid ""
"want (on the range of 0 to 1)."
msgstr ""
-#: doc/classes/Input.xml:208
+#: doc/classes/Input.xml:215
msgid ""
"Returns [code]true[/code] when the user starts pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user pressed down "
@@ -28525,7 +28631,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:218
+#: doc/classes/Input.xml:225
msgid ""
"Returns [code]true[/code] when the user stops pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user released the "
@@ -28535,7 +28641,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:227
+#: doc/classes/Input.xml:234
#, fuzzy
msgid ""
"Returns [code]true[/code] if you are pressing the action event. Note that if "
@@ -28550,13 +28656,13 @@ msgstr ""
"action มีà¸à¸²à¸£à¸à¸³à¸«à¸™à¸”ปุ่มไว้หลายปุ่มà¹à¸¥à¸°à¸¡à¸µà¸à¸²à¸£à¸à¸”มาà¸à¸à¸§à¹ˆà¸²à¸«à¸™à¸¶à¹ˆà¸‡à¸›à¸¸à¹ˆà¸¡ à¸à¸²à¸£à¸›à¸¥à¹ˆà¸­à¸¢à¸›à¸¸à¹ˆà¸¡à¸„รั้งเดียวจะเป็นà¸à¸²à¸£à¸¢à¸à¹€à¸¥à¸´à¸ "
"action นี้à¹à¸¡à¹‰à¸§à¹ˆà¸²à¸ˆà¸°à¸¢à¸±à¸‡à¸à¸”ปุ่มอื่นที่à¸à¸³à¸«à¸™à¸” action นี้อยู่à¸à¹‡à¸•าม"
-#: doc/classes/Input.xml:236
+#: doc/classes/Input.xml:243
msgid ""
"Returns [code]true[/code] if you are pressing the joypad button (see [enum "
"JoystickList])."
msgstr ""
-#: doc/classes/Input.xml:243
+#: doc/classes/Input.xml:250
msgid ""
"Returns [code]true[/code] if the system knows the specified device. This "
"means that it sets all button and axis indices exactly as defined in [enum "
@@ -28564,19 +28670,19 @@ msgid ""
"but you can still retrieve events from them."
msgstr ""
-#: doc/classes/Input.xml:250
+#: doc/classes/Input.xml:257
msgid ""
"Returns [code]true[/code] if you are pressing the key. You can pass a [enum "
"KeyList] constant."
msgstr ""
-#: doc/classes/Input.xml:257
+#: doc/classes/Input.xml:264
msgid ""
"Returns [code]true[/code] if you are pressing the mouse button specified "
"with [enum ButtonList]."
msgstr ""
-#: doc/classes/Input.xml:267
+#: doc/classes/Input.xml:274
msgid ""
"Notifies the [Input] singleton that a connection has changed, to update the "
"state for the [code]device[/code] index.\n"
@@ -28585,7 +28691,7 @@ msgid ""
"triggered internally."
msgstr ""
-#: doc/classes/Input.xml:275
+#: doc/classes/Input.xml:282
msgid ""
"Feeds an [InputEvent] to the game. Can be used to artificially trigger input "
"events from code. Also generates [method Node._input] calls.\n"
@@ -28598,12 +28704,21 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Input.xml:289
+#: doc/classes/Input.xml:296
msgid ""
"Removes all mappings from the internal database that match the given GUID."
msgstr ""
-#: doc/classes/Input.xml:298
+#: doc/classes/Input.xml:303
+msgid ""
+"Sets the acceleration value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:313
msgid ""
"Sets a custom mouse cursor image, which is only visible inside the game "
"window. The hotspot can also be specified. Passing [code]null[/code] to the "
@@ -28618,7 +28733,7 @@ msgid ""
"compression mode can't be used for custom cursors."
msgstr ""
-#: doc/classes/Input.xml:309
+#: doc/classes/Input.xml:324
msgid ""
"Sets the default cursor shape to be used in the viewport instead of "
"[constant CURSOR_ARROW].\n"
@@ -28628,11 +28743,38 @@ msgid ""
"cursor immediately."
msgstr ""
-#: doc/classes/Input.xml:318
+#: doc/classes/Input.xml:333
+msgid ""
+"Sets the gravity value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:341
+msgid ""
+"Sets the value of the rotation rate of the gyroscope sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:349
+msgid ""
+"Sets the value of the magnetic field of the magnetometer sensor. Can be used "
+"for debugging on devices without a hardware sensor, for example in an editor "
+"on a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:357
msgid "Sets the mouse mode. See the constants for more information."
msgstr ""
-#: doc/classes/Input.xml:325
+#: doc/classes/Input.xml:364
msgid ""
"Enables or disables the accumulation of similar input events sent by the "
"operating system. When input accumulation is enabled, all input events "
@@ -28646,7 +28788,7 @@ msgid ""
"results that closely follow the actual input."
msgstr ""
-#: doc/classes/Input.xml:336
+#: doc/classes/Input.xml:375
msgid ""
"Starts to vibrate the joypad. Joypads usually come with two rumble motors, a "
"strong and a weak one. [code]weak_magnitude[/code] is the strength of the "
@@ -28659,34 +28801,34 @@ msgid ""
"few seconds."
msgstr ""
-#: doc/classes/Input.xml:344
+#: doc/classes/Input.xml:383
msgid "Stops the vibration of the joypad."
msgstr ""
-#: doc/classes/Input.xml:351
+#: doc/classes/Input.xml:390
msgid ""
"Vibrate Android and iOS devices.\n"
"[b]Note:[/b] It needs [code]VIBRATE[/code] permission for Android at export "
"settings. iOS does not support duration."
msgstr ""
-#: doc/classes/Input.xml:359
+#: doc/classes/Input.xml:398
msgid "Sets the mouse position to the specified vector."
msgstr ""
-#: doc/classes/Input.xml:368
+#: doc/classes/Input.xml:407
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
-#: doc/classes/Input.xml:374
+#: doc/classes/Input.xml:413
msgid "Makes the mouse cursor visible if it is hidden."
msgstr ""
-#: doc/classes/Input.xml:377
+#: doc/classes/Input.xml:416
msgid "Makes the mouse cursor hidden if it is visible."
msgstr ""
-#: doc/classes/Input.xml:380
+#: doc/classes/Input.xml:419
msgid ""
"Captures the mouse. The mouse will be hidden and its position locked at the "
"center of the screen.\n"
@@ -28694,83 +28836,83 @@ msgid ""
"need to use [member InputEventMouseMotion.relative]."
msgstr ""
-#: doc/classes/Input.xml:384
+#: doc/classes/Input.xml:423
msgid "Makes the mouse cursor visible but confines it to the game window."
msgstr ""
-#: doc/classes/Input.xml:387
+#: doc/classes/Input.xml:426
msgid "Arrow cursor. Standard, default pointing cursor."
msgstr ""
-#: doc/classes/Input.xml:390
+#: doc/classes/Input.xml:429
msgid ""
"I-beam cursor. Usually used to show where the text cursor will appear when "
"the mouse is clicked."
msgstr ""
-#: doc/classes/Input.xml:393
+#: doc/classes/Input.xml:432
msgid ""
"Pointing hand cursor. Usually used to indicate the pointer is over a link or "
"other interactable item."
msgstr ""
-#: doc/classes/Input.xml:396
+#: doc/classes/Input.xml:435
msgid ""
"Cross cursor. Typically appears over regions in which a drawing operation "
"can be performed or for selections."
msgstr ""
-#: doc/classes/Input.xml:399
+#: doc/classes/Input.xml:438
msgid ""
"Wait cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application is still usable during the "
"operation."
msgstr ""
-#: doc/classes/Input.xml:402
+#: doc/classes/Input.xml:441
msgid ""
"Busy cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application isn't usable during the "
"operation (e.g. something is blocking its main thread)."
msgstr ""
-#: doc/classes/Input.xml:405
+#: doc/classes/Input.xml:444
msgid "Drag cursor. Usually displayed when dragging something."
msgstr ""
-#: doc/classes/Input.xml:408
+#: doc/classes/Input.xml:447
msgid ""
"Can drop cursor. Usually displayed when dragging something to indicate that "
"it can be dropped at the current position."
msgstr ""
-#: doc/classes/Input.xml:411
+#: doc/classes/Input.xml:450
msgid ""
"Forbidden cursor. Indicates that the current action is forbidden (for "
"example, when dragging something) or that the control at a position is "
"disabled."
msgstr ""
-#: doc/classes/Input.xml:414
+#: doc/classes/Input.xml:453
msgid ""
"Vertical resize mouse cursor. A double-headed vertical arrow. It tells the "
"user they can resize the window or the panel vertically."
msgstr ""
-#: doc/classes/Input.xml:417
+#: doc/classes/Input.xml:456
msgid ""
"Horizontal resize mouse cursor. A double-headed horizontal arrow. It tells "
"the user they can resize the window or the panel horizontally."
msgstr ""
-#: doc/classes/Input.xml:420
+#: doc/classes/Input.xml:459
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the bottom left to the top right. It tells the user they can resize the "
"window or the panel both horizontally and vertically."
msgstr ""
-#: doc/classes/Input.xml:423
+#: doc/classes/Input.xml:462
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the top left to the bottom right, the opposite of [constant "
@@ -28778,23 +28920,23 @@ msgid ""
"both horizontally and vertically."
msgstr ""
-#: doc/classes/Input.xml:426
+#: doc/classes/Input.xml:465
msgid "Move cursor. Indicates that something can be moved."
msgstr ""
-#: doc/classes/Input.xml:429
+#: doc/classes/Input.xml:468
msgid ""
"Vertical split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_VSIZE]."
msgstr ""
-#: doc/classes/Input.xml:432
+#: doc/classes/Input.xml:471
msgid ""
"Horizontal split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_HSIZE]."
msgstr ""
-#: doc/classes/Input.xml:435
+#: doc/classes/Input.xml:474
msgid "Help cursor. Usually a question mark."
msgstr ""
@@ -29210,7 +29352,9 @@ msgid "The drag position."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -30523,7 +30667,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30592,22 +30737,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -30622,7 +30769,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -30630,19 +30777,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -30710,10 +30857,12 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody2D.xml:87
+#, fuzzy
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30775,7 +30924,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -32061,14 +32212,21 @@ msgid "Default text [Color] of the [LinkButton]."
msgstr ""
#: doc/classes/LinkButton.xml:46
-msgid "Text [Color] used when the [LinkButton] is being hovered."
+msgid ""
+"Text [Color] used when the [LinkButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/LinkButton.xml:49
-msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgid "Text [Color] used when the [LinkButton] is being hovered."
msgstr ""
#: doc/classes/LinkButton.xml:52
+msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:55
msgid "The vertical space between the baseline of text and the underline."
msgstr ""
@@ -32561,26 +32719,33 @@ msgid "Text [Color] used when the [MenuButton] is disabled."
msgstr ""
#: doc/classes/MenuButton.xml:64
-msgid "Text [Color] used when the [MenuButton] is being hovered."
+msgid ""
+"Text [Color] used when the [MenuButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/MenuButton.xml:67
-msgid "Text [Color] used when the [MenuButton] is being pressed."
+msgid "Text [Color] used when the [MenuButton] is being hovered."
msgstr ""
#: doc/classes/MenuButton.xml:70
-msgid "[StyleBox] used when the [MenuButton] is being hovered."
+msgid "Text [Color] used when the [MenuButton] is being pressed."
msgstr ""
#: doc/classes/MenuButton.xml:73
-msgid "The horizontal space between [MenuButton]'s icon and text."
+msgid "[StyleBox] used when the [MenuButton] is being hovered."
msgstr ""
#: doc/classes/MenuButton.xml:76
-msgid "Default [StyleBox] for the [MenuButton]."
+msgid "The horizontal space between [MenuButton]'s icon and text."
msgstr ""
#: doc/classes/MenuButton.xml:79
+msgid "Default [StyleBox] for the [MenuButton]."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:82
msgid "[StyleBox] used when the [MenuButton] is being pressed."
msgstr ""
@@ -34305,7 +34470,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -37219,26 +37384,33 @@ msgid "Text [Color] used when the [OptionButton] is disabled."
msgstr ""
#: doc/classes/OptionButton.xml:212
-msgid "Text [Color] used when the [OptionButton] is being hovered."
+msgid ""
+"Text [Color] used when the [OptionButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/OptionButton.xml:215
-msgid "Text [Color] used when the [OptionButton] is being pressed."
+msgid "Text [Color] used when the [OptionButton] is being hovered."
msgstr ""
#: doc/classes/OptionButton.xml:218
-msgid "[StyleBox] used when the [OptionButton] is being hovered."
+msgid "Text [Color] used when the [OptionButton] is being pressed."
msgstr ""
#: doc/classes/OptionButton.xml:221
-msgid "The horizontal space between [OptionButton]'s icon and text."
+msgid "[StyleBox] used when the [OptionButton] is being hovered."
msgstr ""
#: doc/classes/OptionButton.xml:224
-msgid "Default [StyleBox] for the [OptionButton]."
+msgid "The horizontal space between [OptionButton]'s icon and text."
msgstr ""
#: doc/classes/OptionButton.xml:227
+msgid "Default [StyleBox] for the [OptionButton]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:230
msgid "[StyleBox] used when the [OptionButton] is being pressed."
msgstr ""
@@ -37642,7 +37814,7 @@ msgstr "คืนค่าชื่อของอุปà¸à¸£à¸“์เสีย
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -37672,14 +37844,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -37689,7 +37861,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -40178,17 +40350,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -40206,11 +40404,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -40405,7 +40603,9 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-msgid "Returns the [Physics2DDirectBodyState] of the body."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
@@ -41208,6 +41408,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -41225,7 +41443,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -41339,7 +41557,9 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-msgid "Returns the [PhysicsDirectBodyState] of the body."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/PhysicsServer.xml:370
@@ -42319,27 +42539,27 @@ msgstr ""
msgid "Removes an element from the array by index."
msgstr ""
-#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolColorArray.xml:66
-#: doc/classes/PoolIntArray.xml:67 doc/classes/PoolRealArray.xml:67
-#: doc/classes/PoolStringArray.xml:74 doc/classes/PoolVector2Array.xml:67
-#: doc/classes/PoolVector3Array.xml:66
+#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolIntArray.xml:67
+#: doc/classes/PoolRealArray.xml:67
msgid ""
"Sets the size of the array. If the array is grown, reserves elements at the "
"end of the array. If the array is shrunk, truncates the array to the new "
-"size."
+"size.\n"
+"[b]Note:[/b] Added elements are not automatically initialized to 0 and will "
+"contain garbage, i.e. indeterminate values."
msgstr ""
-#: doc/classes/PoolByteArray.xml:121
+#: doc/classes/PoolByteArray.xml:122
msgid "Changes the byte at the given index."
msgstr ""
-#: doc/classes/PoolByteArray.xml:127 doc/classes/PoolColorArray.xml:79
-#: doc/classes/PoolRealArray.xml:80 doc/classes/PoolStringArray.xml:87
+#: doc/classes/PoolByteArray.xml:128 doc/classes/PoolColorArray.xml:79
+#: doc/classes/PoolRealArray.xml:81 doc/classes/PoolStringArray.xml:87
#: doc/classes/PoolVector2Array.xml:80 doc/classes/PoolVector3Array.xml:79
msgid "Returns the size of the array."
msgstr ""
-#: doc/classes/PoolByteArray.xml:135
+#: doc/classes/PoolByteArray.xml:136
msgid ""
"Returns the slice of the [PoolByteArray] between indices (inclusive) as a "
"new [PoolByteArray]. Any negative index is considered to be from the end of "
@@ -42371,6 +42591,14 @@ msgstr ""
msgid "Appends a value to the array."
msgstr ""
+#: doc/classes/PoolColorArray.xml:66 doc/classes/PoolStringArray.xml:74
+#: doc/classes/PoolVector2Array.xml:67 doc/classes/PoolVector3Array.xml:66
+msgid ""
+"Sets the size of the array. If the array is grown, reserves elements at the "
+"end of the array. If the array is shrunk, truncates the array to the new "
+"size."
+msgstr ""
+
#: doc/classes/PoolColorArray.xml:73
msgid "Changes the [Color] at the given index."
msgstr ""
@@ -42407,11 +42635,11 @@ msgid ""
"valid, or at the end of the array ([code]idx == size()[/code])."
msgstr ""
-#: doc/classes/PoolIntArray.xml:74
+#: doc/classes/PoolIntArray.xml:75
msgid "Changes the int at the given index."
msgstr ""
-#: doc/classes/PoolIntArray.xml:80
+#: doc/classes/PoolIntArray.xml:81
msgid "Returns the array size."
msgstr ""
@@ -42443,7 +42671,7 @@ msgstr ""
msgid "Appends a [PoolRealArray] at the end of this array."
msgstr ""
-#: doc/classes/PoolRealArray.xml:74
+#: doc/classes/PoolRealArray.xml:75
msgid "Changes the float at the given index."
msgstr ""
@@ -43709,18 +43937,6 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:204
msgid ""
-"The project data directory is used for storing project-specific data "
-"(metadata, shader cache, etc.).\n"
-"[b]Note:[/b] Restart the application after changing this setting.\n"
-"[b]Note:[/b] Changing this value can help on platforms or with third-party "
-"tools where specific directory patterns are disallowed. Only modify this "
-"setting if you know that your environment requires it, as changing the "
-"default can impact compatibility with some external tools or plugins which "
-"expect the default [code].import[/code] folder."
-msgstr ""
-
-#: doc/classes/ProjectSettings.xml:209
-msgid ""
"Specifies a file to override project settings. For example: [code]user://"
"custom_settings.cfg[/code]. See \"Overriding\" in the [ProjectSettings] "
"class description at the top for more information.\n"
@@ -43728,7 +43944,7 @@ msgid ""
"code] will still be read to override the project settings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:213
+#: doc/classes/ProjectSettings.xml:208
msgid ""
"If [code]true[/code], the project will save user data to its own user "
"directory (see [member application/config/custom_user_dir_name]). This "
@@ -43738,13 +43954,28 @@ msgid ""
"user data directory)/Godot/app_userdata/(project name)[/code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:216
+#: doc/classes/ProjectSettings.xml:211
+msgid ""
+"If [code]true[/code], the project will use a hidden directory ([code]."
+"import[/code]) for storing project-specific data (metadata, shader cache, "
+"etc.).\n"
+"If [code]false[/code], a non-hidden directory ([code]import[/code]) will be "
+"used instead.\n"
+"[b]Note:[/b] Restart the application after changing this setting.\n"
+"[b]Note:[/b] Changing this value can help on platforms or with third-party "
+"tools where hidden directory patterns are disallowed. Only modify this "
+"setting if you know that your environment requires it, as changing the "
+"default can impact compatibility with some external tools or plugins which "
+"expect the default [code].import[/code] folder."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:217
msgid ""
"Icon set in [code].ico[/code] format used on Windows to set the game's icon. "
"This is done automatically on start by calling [method OS.set_native_icon]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:219
+#: doc/classes/ProjectSettings.xml:220
msgid ""
"Time samples for frame deltas are subject to random variation introduced by "
"the platform, even when frames are displayed at regular intervals thanks to "
@@ -43758,14 +43989,14 @@ msgid ""
"adequate to render frames at the refresh rate."
msgstr ""
-#: doc/classes/ProjectSettings.xml:224
+#: doc/classes/ProjectSettings.xml:225
msgid ""
"[b]Experimental.[/b] Shifts the measurement of delta time for each frame to "
"just after the drawing has taken place. This may lead to more consistent "
"deltas and a reduction in frame stutters."
msgstr ""
-#: doc/classes/ProjectSettings.xml:227
+#: doc/classes/ProjectSettings.xml:228
msgid ""
"If [code]true[/code], disables printing to standard error. If [code]true[/"
"code], this also hides error and warning messages printed by [method "
@@ -43774,7 +44005,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:231
+#: doc/classes/ProjectSettings.xml:232
msgid ""
"If [code]true[/code], disables printing to standard output. This is "
"equivalent to starting the editor or project with the [code]--quiet[/code] "
@@ -43782,7 +44013,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:235
+#: doc/classes/ProjectSettings.xml:236
msgid ""
"If [code]true[/code], flushes the standard output stream every time a line "
"is printed. This affects both terminal logging and file logging.\n"
@@ -43798,20 +44029,20 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:241
+#: doc/classes/ProjectSettings.xml:242
msgid ""
"Debug build override for [member application/run/flush_stdout_on_print], as "
"performance is less important during debugging.\n"
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:245
+#: doc/classes/ProjectSettings.xml:246
msgid ""
"Forces a delay between frames in the main loop (in milliseconds). This may "
"be useful if you plan to disable vertical synchronization."
msgstr ""
-#: doc/classes/ProjectSettings.xml:248
+#: doc/classes/ProjectSettings.xml:249
msgid ""
"If [code]true[/code], enables low-processor usage mode. This setting only "
"works on desktop platforms. The screen is not redrawn if nothing changes "
@@ -43819,75 +44050,81 @@ msgid ""
"useless (and can hurt performance) in most games."
msgstr ""
-#: doc/classes/ProjectSettings.xml:251
+#: doc/classes/ProjectSettings.xml:252
msgid ""
"Amount of sleeping between frames when the low-processor usage mode is "
"enabled (in microseconds). Higher values will result in lower CPU usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:254
+#: doc/classes/ProjectSettings.xml:255
msgid "Path to the main scene file that will be loaded when the project runs."
msgstr ""
-#: doc/classes/ProjectSettings.xml:257 doc/classes/ProjectSettings.xml:260
+#: doc/classes/ProjectSettings.xml:258 doc/classes/ProjectSettings.xml:261
msgid ""
"Audio buses will disable automatically when sound goes below a given dB "
"threshold for a given time. This saves CPU as effects assigned to that bus "
"will no longer do any processing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:263
+#: doc/classes/ProjectSettings.xml:264
msgid ""
"Default [AudioBusLayout] resource file to use in the project, unless "
"overridden by the scene."
msgstr ""
-#: doc/classes/ProjectSettings.xml:266
+#: doc/classes/ProjectSettings.xml:267
msgid ""
"Specifies the audio driver to use. This setting is platform-dependent as "
"each platform supports different audio drivers. If left empty, the default "
"audio driver will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:269
+#: doc/classes/ProjectSettings.xml:270
msgid ""
"If [code]true[/code], microphone input will be allowed. This requires "
"appropriate permissions to be set when exporting to Android or iOS."
msgstr ""
-#: doc/classes/ProjectSettings.xml:272
+#: doc/classes/ProjectSettings.xml:273
msgid ""
"The mixing rate used for audio (in Hz). In general, it's better to not touch "
"this and leave it to the host operating system."
msgstr ""
-#: doc/classes/ProjectSettings.xml:275
+#: doc/classes/ProjectSettings.xml:276
msgid ""
"Safer override for [member audio/mix_rate] in the Web platform. Here "
"[code]0[/code] means \"let the browser choose\" (since some browsers do not "
"like forcing the mix rate)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:278
+#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:281
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:284
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:287
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43897,7 +44134,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:290
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43907,27 +44144,27 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:293
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:296
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
-#: doc/classes/ProjectSettings.xml:299
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:302
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -43935,81 +44172,81 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:305
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:308
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:311
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:314
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:317
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr ""
-#: doc/classes/ProjectSettings.xml:320
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:323
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:326
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:329
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:332
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:335
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:338
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:341
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -44017,109 +44254,109 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:344
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:347
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:350
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:353
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:356
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:359
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:362
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:365
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:368
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:371
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:374
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:377
+#: doc/classes/ProjectSettings.xml:380
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:380
+#: doc/classes/ProjectSettings.xml:383
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:383
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:386
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:389
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:392
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:395
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:398
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -44130,91 +44367,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:403
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:406
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:409
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:412
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:415
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:418
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:421
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:424
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:427
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:430
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:433
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:436
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:439
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr ""
-#: doc/classes/ProjectSettings.xml:442
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:445
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:448
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:451
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -44223,13 +44460,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:455
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:458
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -44239,7 +44476,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:463
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -44247,19 +44484,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:468
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:472
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:476
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -44273,45 +44510,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:481
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:484
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:488
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:491
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:494
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:497
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:500
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -44320,7 +44557,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:503
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -44331,7 +44568,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:507
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -44347,14 +44584,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:515
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:518
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -44362,49 +44599,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:521
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:524
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:529
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:532
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:535
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:538
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:541
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:544
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:547
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -44413,7 +44650,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:551
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44421,7 +44658,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:555
+#: doc/classes/ProjectSettings.xml:558
#, fuzzy
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
@@ -44434,7 +44671,7 @@ msgstr ""
"ได้เนื่องจาà¸à¸ˆà¸³à¹€à¸›à¹‡à¸™à¸ªà¸³à¸«à¸£à¸±à¸š logic ในà¸à¸²à¸£ [Control] ต่างๆ อย่างไรà¸à¹‡à¸•าม event "
"ที่à¸à¸³à¸«à¸™à¸”ให้à¸à¸±à¸šà¸à¸²à¸£ action สามารถà¹à¸à¹‰à¹„ขได้"
-#: doc/classes/ProjectSettings.xml:559
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44444,7 +44681,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:563
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -44453,7 +44690,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:567
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -44462,7 +44699,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:571
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44472,7 +44709,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:575
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44480,7 +44717,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:579
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -44490,7 +44727,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:583
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -44500,7 +44737,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:587
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44508,7 +44745,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:591
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -44517,7 +44754,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:595
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44525,7 +44762,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:599
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -44537,477 +44774,477 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:605
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:608
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:611
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:614
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:617
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:620
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:623
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:626
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:629
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:632
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:635
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:638
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:641
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:644
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:647
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:650
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:653
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:656
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:659
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:662
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:665
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:668
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:671
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:674
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:677
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:680
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:683
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:686
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:689
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:692
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:695
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:698
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:701
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:704
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:707
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:710
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:713
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:716
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:719
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:722
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:725
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:728
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:731
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:734
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:737
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:740
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:743
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:746
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:749
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:752
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:755
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:758
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:761
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:764
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:767
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:770
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:773
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:776
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:779
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:782
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:785
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:788
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:791
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:794
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:797
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:800
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:803
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:806
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:809
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:812
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:815
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:818
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:821
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:824
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:827
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:830
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:833
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:836
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:839
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:842
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:845
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:848
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:851
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:854
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:857
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:860
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:863
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:866
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:869
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:872
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:875
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:878
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:881
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr ""
-#: doc/classes/ProjectSettings.xml:884
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:887
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:890
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:893
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:896
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:899
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:902
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:905
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:908
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:911
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:914
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:917
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:920
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:923
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:926
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:929
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:932
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:935
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:938
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:941
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:946
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:949
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -45015,92 +45252,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:952
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:955
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:958
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:961
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:964
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:967
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:970
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:973
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:976
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:979
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:982
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:985
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:988
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:991
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:994
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:997
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1000
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1003
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -45110,33 +45347,33 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1007
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1010
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1013
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1017
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1021
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45149,7 +45386,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1025
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45161,7 +45398,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1033
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45173,7 +45410,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1041
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45186,7 +45423,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1045
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -45194,28 +45431,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1049
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1053
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1056
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1059
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -45225,25 +45462,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1063
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1066
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1069
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1072
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45256,7 +45493,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1076
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45268,7 +45505,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1084
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45280,7 +45517,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1092
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45293,13 +45530,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1096
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1099
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -45307,11 +45544,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1103
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1106
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -45325,7 +45562,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1112
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -45334,7 +45571,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1116
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -45350,7 +45587,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1121
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -45360,7 +45597,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1125
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45370,7 +45607,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1129
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -45381,7 +45618,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1133
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45391,7 +45628,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1137
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -45399,7 +45636,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1141
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -45410,7 +45647,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1145
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -45425,7 +45662,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1151
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -45434,13 +45671,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1156
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1159
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -45449,7 +45686,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1162
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -45459,7 +45696,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1165
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -45471,7 +45708,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1168
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -45481,24 +45718,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1171
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1174
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1177
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1180
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -45507,7 +45744,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1183
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -45515,7 +45752,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1186
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -45524,7 +45761,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1189
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -45534,7 +45771,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1193
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -45542,31 +45779,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1197
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1200
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1203
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1206
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1209
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -45574,7 +45811,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1212
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -45584,46 +45821,53 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1215
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1218
+#: doc/classes/ProjectSettings.xml:1221
+msgid ""
+"iOS specific override for [member rendering/gles2/compatibility/"
+"disable_half_float], due to poor support for half-float vertex compression "
+"on many devices."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1224
msgid ""
-"If [code]true[/code] and available on the target device, enables high "
-"floating point precision for all shader computations in GLES2.\n"
+"If [code]true[/code] and available on the target Android device, enables "
+"high floating point precision for all shader computations in GLES2.\n"
"[b]Warning:[/b] High floating point precision can be extremely slow on older "
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1225
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1228
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1231
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1234
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -45631,7 +45875,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1237
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -45641,7 +45885,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1240
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -45650,7 +45894,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1243
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -45659,20 +45903,20 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1246
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1249
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1252
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -45681,7 +45925,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1255
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -45689,7 +45933,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1258
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -45698,7 +45942,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -45708,20 +45952,20 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1267
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1274
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -45730,13 +45974,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -45746,46 +45990,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1293
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1296
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1299
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1302
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1305
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -45795,7 +46039,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -45807,7 +46051,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -45815,7 +46059,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1316
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -45823,7 +46067,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -45832,7 +46076,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1323
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -45846,7 +46090,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1328
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -45856,7 +46100,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1331
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -45865,7 +46109,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1334
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -45875,54 +46119,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1337
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1340
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1343
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1346
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1349
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1352
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1355
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1358
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -45933,61 +46177,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1365
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1368
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1371
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1374
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1377
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1380
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1383
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1386
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -45998,7 +46242,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -46007,26 +46251,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1393 doc/classes/ProjectSettings.xml:1396
#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1405
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1408
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1411
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -46037,20 +46281,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1418
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -46062,52 +46306,52 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1428
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1435
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1438
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1441
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1444
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1447
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1450
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1453
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -46115,7 +46359,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -46125,10 +46369,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -46137,10 +46381,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -46149,10 +46393,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -46161,10 +46405,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -46173,10 +46417,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -46840,40 +47084,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr ""
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -46881,14 +47139,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -49223,6 +49481,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -49240,7 +49514,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -49248,11 +49522,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -49262,19 +49536,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -54690,20 +54964,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -54714,28 +54993,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -54747,19 +55026,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
@@ -57545,26 +57824,33 @@ msgid "Text [Color] used when the [ToolButton] is disabled."
msgstr ""
#: doc/classes/ToolButton.xml:39
-msgid "Text [Color] used when the [ToolButton] is being hovered."
+msgid ""
+"Text [Color] used when the [ToolButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/ToolButton.xml:42
-msgid "Text [Color] used when the [ToolButton] is being pressed."
+msgid "Text [Color] used when the [ToolButton] is being hovered."
msgstr ""
#: doc/classes/ToolButton.xml:45
-msgid "[StyleBox] used when the [ToolButton] is being hovered."
+msgid "Text [Color] used when the [ToolButton] is being pressed."
msgstr ""
#: doc/classes/ToolButton.xml:48
-msgid "The horizontal space between [ToolButton]'s icon and text."
+msgid "[StyleBox] used when the [ToolButton] is being hovered."
msgstr ""
#: doc/classes/ToolButton.xml:51
-msgid "Default [StyleBox] for the [ToolButton]."
+msgid "The horizontal space between [ToolButton]'s icon and text."
msgstr ""
#: doc/classes/ToolButton.xml:54
+msgid "Default [StyleBox] for the [ToolButton]."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:57
msgid "[StyleBox] used when the [ToolButton] is being pressed."
msgstr ""
diff --git a/doc/translations/tl.po b/doc/translations/tl.po
new file mode 100644
index 0000000000..f72fe4d604
--- /dev/null
+++ b/doc/translations/tl.po
@@ -0,0 +1,69539 @@
+# Tagalog translation of the Godot Engine class reference.
+# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur.
+# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md).
+# This file is distributed under the same license as the Godot source code.
+#
+# Napstaguy04 <brokenscreen3@gmail.com>, 2021.
+msgid ""
+msgstr ""
+"Project-Id-Version: Godot Engine class reference\n"
+"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
+"PO-Revision-Date: 2021-11-15 21:14+0000\n"
+"Last-Translator: Napstaguy04 <brokenscreen3@gmail.com>\n"
+"Language-Team: Tagalog <https://hosted.weblate.org/projects/godot-engine/"
+"godot-class-reference/tl/>\n"
+"Language: tl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8-bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1 && n != 2 && n != 3 && (n % 10 == 4 "
+"|| n % 10 == 6 || n % 10 == 9);\n"
+"X-Generator: Weblate 4.9.1-dev\n"
+
+#: doc/tools/make_rst.py
+msgid "Description"
+msgstr "Paglalarawan"
+
+#: doc/tools/make_rst.py
+msgid "Tutorials"
+msgstr "Mga Tutorial"
+
+#: doc/tools/make_rst.py
+msgid "Properties"
+msgstr "Mga Katangian"
+
+#: doc/tools/make_rst.py
+msgid "Methods"
+msgstr "Mga Method"
+
+#: doc/tools/make_rst.py
+msgid "Theme Properties"
+msgstr "Mga Katangian ng Theme"
+
+#: doc/tools/make_rst.py
+msgid "Signals"
+msgstr "Mga Hudyat"
+
+#: doc/tools/make_rst.py
+msgid "Enumerations"
+msgstr "Mga Enumerasyon"
+
+#: doc/tools/make_rst.py
+msgid "Constants"
+msgstr "Mga Konstant"
+
+#: doc/tools/make_rst.py
+msgid "Property Descriptions"
+msgstr "Mga Paglalarawan ng Katangian"
+
+#: doc/tools/make_rst.py
+msgid "Method Descriptions"
+msgstr "Panglalarawan ng mga Method"
+
+#: modules/gdscript/doc_classes/@GDScript.xml:4
+msgid "Built-in GDScript functions."
+msgstr "Mga built-in na function ng GDScript."
+
+#: modules/gdscript/doc_classes/@GDScript.xml:7
+msgid ""
+"List of core built-in GDScript functions. Math functions and other "
+"utilities. Everything else is provided by objects. (Keywords: builtin, built "
+"in, global functions.)"
+msgstr ""
+"Talaan ng mga built-in function ng GDScript. Mga function sa matematika at "
+"iba pang mga utility. Lahat ng iba pa ay ibinibigay ng mga objects. (Mga "
+"keyword: builtin, built in, global function.)"
+
+#: modules/gdscript/doc_classes/@GDScript.xml:19
+msgid ""
+"Returns a color constructed from integer red, green, blue, and alpha "
+"channels. Each channel should have 8 bits of information ranging from 0 to "
+"255.\n"
+"[code]r8[/code] red channel\n"
+"[code]g8[/code] green channel\n"
+"[code]b8[/code] blue channel\n"
+"[code]a8[/code] alpha channel\n"
+"[codeblock]\n"
+"red = Color8(255, 0, 0)\n"
+"[/codeblock]"
+msgstr ""
+"Ibinabalik ang kulay na ginawa mula sa pula, berde, asul, at alpha integer "
+"na mga channel. Ang bawat channel ay dapat may 8 bits ng impormasyon mula 0 "
+"hanggang 255.\n"
+"[code]r8[/code] pulang channel\n"
+"[code]g8[/code] lungtiang channel\n"
+"[code]b8[/code] bughaw na channel\n"
+"[code]a8[/code] alpha channel\n"
+"[codeblock]\n"
+"pula = Color8(255, 0, 0)\n"
+"[/codeblock]"
+
+#: modules/gdscript/doc_classes/@GDScript.xml:34
+msgid ""
+"Returns a color according to the standardized [code]name[/code] with "
+"[code]alpha[/code] ranging from 0 to 1.\n"
+"[codeblock]\n"
+"red = ColorN(\"red\", 1)\n"
+"[/codeblock]\n"
+"Supported color names are the same as the constants defined in [Color]."
+msgstr ""
+"Ibinabalik ang kulay ayon sa karaniwang [code]name[/code] na may "
+"[code]alpha[/code] mula 0 hanggang 1.\n"
+"[codeblock]\n"
+"pula = ColorN(\"red\",1)\n"
+"[/codeblock]\n"
+"Ang mga pangalan ng mga sinusuportahang kulay ay tumutugma sa mga constant "
+"na tinukoy sa [Kulay]."
+
+#: modules/gdscript/doc_classes/@GDScript.xml:45
+msgid ""
+"Returns the absolute value of parameter [code]s[/code] (i.e. positive "
+"value).\n"
+"[codeblock]\n"
+"a = abs(-1) # a is 1\n"
+"[/codeblock]"
+msgstr ""
+"Ibinabalik ang absolute value ng [code]s[/code] parameter (hal: positive "
+"value).\n"
+"[codeblock]\n"
+"a = abs(-1) # a ay 1\n"
+"[/codeblock]"
+
+#: modules/gdscript/doc_classes/@GDScript.xml:55
+msgid ""
+"Returns the arc cosine of [code]s[/code] in radians. Use to get the angle of "
+"cosine [code]s[/code]. [code]s[/code] must be between [code]-1.0[/code] and "
+"[code]1.0[/code] (inclusive), otherwise, [method acos] will return [constant "
+"NAN].\n"
+"[codeblock]\n"
+"# c is 0.523599 or 30 degrees if converted with rad2deg(s)\n"
+"c = acos(0.866025)\n"
+"[/codeblock]"
+msgstr ""
+"Ibinabalik ang arc cosine ng [code]s[/code] sa radians. Gamitin ito para "
+"makuha ang cosine angle [code]s[/code]. [code]s[/code] ay dapat nasa pagitan "
+"ng [code]-1.0[/code] at [code]1.0[/code] (napapabilang o inclusive), o kung "
+"hindi, [method acos] ay babalik ng [constant NAN].\n"
+"[codeblock]\n"
+"# ang c ay 0.523599 o 30 degrees kung iko-convert sa rad2deg(s)\n"
+"c = acos(0.866025)\n"
+"[/codeblock]"
+
+#: modules/gdscript/doc_classes/@GDScript.xml:66
+msgid ""
+"Returns the arc sine of [code]s[/code] in radians. Use to get the angle of "
+"sine [code]s[/code]. [code]s[/code] must be between [code]-1.0[/code] and "
+"[code]1.0[/code] (inclusive), otherwise, [method asin] will return [constant "
+"NAN].\n"
+"[codeblock]\n"
+"# s is 0.523599 or 30 degrees if converted with rad2deg(s)\n"
+"s = asin(0.5)\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:78
+msgid ""
+"Asserts that the [code]condition[/code] is [code]true[/code]. If the "
+"[code]condition[/code] is [code]false[/code], an error is generated. When "
+"running from the editor, the running project will also be paused until you "
+"resume it. This can be used as a stronger form of [method push_error] for "
+"reporting errors to project developers or add-on users.\n"
+"[b]Note:[/b] For performance reasons, the code inside [method assert] is "
+"only executed in debug builds or when running the project from the editor. "
+"Don't include code that has side effects in an [method assert] call. "
+"Otherwise, the project will behave differently when exported in release "
+"mode.\n"
+"The optional [code]message[/code] argument, if given, is shown in addition "
+"to the generic \"Assertion failed\" message. You can use this to provide "
+"additional details about why the assertion failed.\n"
+"[codeblock]\n"
+"# Imagine we always want speed to be between 0 and 20.\n"
+"var speed = -10\n"
+"assert(speed < 20) # True, the program will continue\n"
+"assert(speed >= 0) # False, the program will stop\n"
+"assert(speed >= 0 and speed < 20) # You can also combine the two conditional "
+"statements in one check\n"
+"assert(speed < 20, \"speed = %f, but the speed limit is 20\" % speed) # Show "
+"a message with clarifying details\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:95
+msgid ""
+"Returns the arc tangent of [code]s[/code] in radians. Use it to get the "
+"angle from an angle's tangent in trigonometry: [code]atan(tan(angle)) == "
+"angle[/code].\n"
+"The method cannot know in which quadrant the angle should fall. See [method "
+"atan2] if you have both [code]y[/code] and [code]x[/code].\n"
+"[codeblock]\n"
+"a = atan(0.5) # a is 0.463648\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:107
+msgid ""
+"Returns the arc tangent of [code]y/x[/code] in radians. Use to get the angle "
+"of tangent [code]y/x[/code]. To compute the value, the method takes into "
+"account the sign of both arguments in order to determine the quadrant.\n"
+"Important note: The Y coordinate comes first, by convention.\n"
+"[codeblock]\n"
+"a = atan2(0, -1) # a is 3.141593\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:119
+msgid ""
+"Decodes a byte array back to a value. When [code]allow_objects[/code] is "
+"[code]true[/code] decoding objects is allowed.\n"
+"[b]WARNING:[/b] Deserialized object can contain code which gets executed. Do "
+"not use this option if the serialized object comes from untrusted sources to "
+"avoid potential security threats (remote code execution)."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:128
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:145
+msgid ""
+"Converts a 2D point expressed in the cartesian coordinate system (X and Y "
+"axis) to the polar coordinate system (a distance from the origin and an "
+"angle)."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:135
+msgid ""
+"Rounds [code]s[/code] upward (towards positive infinity), returning the "
+"smallest whole number that is not less than [code]s[/code].\n"
+"[codeblock]\n"
+"a = ceil(1.45) # a is 2.0\n"
+"a = ceil(1.001) # a is 2.0\n"
+"[/codeblock]\n"
+"See also [method floor], [method round], [method stepify], and [int]."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:147
+msgid ""
+"Returns a character as a String of the given Unicode code point (which is "
+"compatible with ASCII code).\n"
+"[codeblock]\n"
+"a = char(65) # a is \"A\"\n"
+"a = char(65 + 32) # a is \"a\"\n"
+"a = char(8364) # a is \"€\"\n"
+"[/codeblock]\n"
+"This is the inverse of [method ord]."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:162
+msgid ""
+"Clamps [code]value[/code] and returns a value not less than [code]min[/code] "
+"and not more than [code]max[/code].\n"
+"[codeblock]\n"
+"a = clamp(1000, 1, 20) # a is 20\n"
+"a = clamp(-10, 1, 20) # a is 1\n"
+"a = clamp(15, 1, 20) # a is 15\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:175
+msgid ""
+"Converts from a type to another in the best way possible. The [code]type[/"
+"code] parameter uses the [enum Variant.Type] values.\n"
+"[codeblock]\n"
+"a = Vector2(1, 0)\n"
+"# Prints 1\n"
+"print(a.length())\n"
+"a = convert(a, TYPE_STRING)\n"
+"# Prints 6 as \"(1, 0)\" is 6 characters\n"
+"print(a.length())\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:190
+msgid ""
+"Returns the cosine of angle [code]s[/code] in radians.\n"
+"[codeblock]\n"
+"a = cos(TAU) # a is 1.0\n"
+"a = cos(PI) # a is -1.0\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:201
+msgid ""
+"Returns the hyperbolic cosine of [code]s[/code] in radians.\n"
+"[codeblock]\n"
+"print(cosh(1)) # Prints 1.543081\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:211
+msgid "Converts from decibels to linear energy (audio)."
+msgstr "Kino-convert ang mga decibel sa linear na enerhiya (audio)."
+
+#: modules/gdscript/doc_classes/@GDScript.xml:218
+msgid "Deprecated alias for [method step_decimals]."
+msgstr "Hindi ginagamit na alias para sa [method step_decimals]."
+
+#: modules/gdscript/doc_classes/@GDScript.xml:227
+msgid ""
+"[b]Note:[/b] [code]dectime[/code] has been deprecated and will be removed in "
+"Godot 4.0, please use [method move_toward] instead.\n"
+"Returns the result of [code]value[/code] decreased by [code]step[/code] * "
+"[code]amount[/code].\n"
+"[codeblock]\n"
+"a = dectime(60, 10, 0.1)) # a is 59.0\n"
+"[/codeblock]"
+msgstr ""
+"[b]Puna:[/b] [code]dectime[/code] ay hindi na ginagamit at aalisin na sa "
+"Godot 4.0, maaring gamitin nalang ang [method move_toward].\n"
+"Ibinabalik ang resulta ng [code]value[/code] na ibinawas ng [code]step[/"
+"code] ng [code]amount[/code].\n"
+"[codeblock]\n"
+"a = dectime(60, 10, 0.1)) #59.0 ang kakalabasan ng a\n"
+"[/codeblock]"
+
+#: modules/gdscript/doc_classes/@GDScript.xml:238
+msgid ""
+"Converts an angle expressed in degrees to radians.\n"
+"[codeblock]\n"
+"r = deg2rad(180) # r is 3.141593\n"
+"[/codeblock]"
+msgstr ""
+"Kino-convert ang anggulo (degrees) sa radians.\n"
+"[codeblock]\n"
+"r = deg2rad(180) # r = 3.141593\n"
+"[/codeblock]"
+
+#: modules/gdscript/doc_classes/@GDScript.xml:248
+msgid ""
+"Converts a dictionary (previously created with [method inst2dict]) back to "
+"an instance. Useful for deserializing."
+msgstr ""
+"Kino-convert ang isang [code]dictionary[/code] (dating nilikha gamit ng "
+"[method inst2dict] ) pabalik sa isang instance. Kapaki-pakinabang para sa "
+"deserialization."
+
+#: modules/gdscript/doc_classes/@GDScript.xml:256
+msgid ""
+"Returns an \"eased\" value of [code]x[/code] based on an easing function "
+"defined with [code]curve[/code]. This easing function is based on an "
+"exponent. The [code]curve[/code] can be any floating-point number, with "
+"specific values leading to the following behaviors:\n"
+"[codeblock]\n"
+"- Lower than -1.0 (exclusive): Ease in-out\n"
+"- 1.0: Linear\n"
+"- Between -1.0 and 0.0 (exclusive): Ease out-in\n"
+"- 0.0: Constant\n"
+"- Between 0.0 to 1.0 (exclusive): Ease in\n"
+"- 1.0: Linear\n"
+"- Greater than 1.0 (exclusive): Ease out\n"
+"[/codeblock]\n"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/"
+"ease_cheatsheet.png]ease() curve values cheatsheet[/url]\n"
+"See also [method smoothstep]. If you need to perform more advanced "
+"transitions, use [Tween] or [AnimationPlayer]."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:274
+msgid ""
+"The natural exponential function. It raises the mathematical constant [b]e[/"
+"b] to the power of [code]s[/code] and returns it.\n"
+"[b]e[/b] has an approximate value of 2.71828, and can be obtained with "
+"[code]exp(1)[/code].\n"
+"For exponents to other bases use the method [method pow].\n"
+"[codeblock]\n"
+"a = exp(2) # Approximately 7.39\n"
+"[/codeblock]"
+msgstr ""
+"Ang natural na exponential function. Tinataas ang mathematical constant "
+"[b]e[/b] sa power ng [code]s[/code] at binabalik ito.\n"
+"[b]e[/b] ay may tinatayang value na 2.71828, at maaring kunin ito sa "
+"[code]exp(1)[/code].\n"
+"Para sa mga exponents para sa mga ibang bases, gamitin ang method sa baba "
+"[method pow].\n"
+"[codeblock]\n"
+"a = exp(2) # Tinatayang 7.39\n"
+"[/codeblock]"
+
+#: modules/gdscript/doc_classes/@GDScript.xml:286
+msgid ""
+"Rounds [code]s[/code] downward (towards negative infinity), returning the "
+"largest whole number that is not more than [code]s[/code].\n"
+"[codeblock]\n"
+"a = floor(2.45) # a is 2.0\n"
+"a = floor(2.99) # a is 2.0\n"
+"a = floor(-2.99) # a is -3.0\n"
+"[/codeblock]\n"
+"See also [method ceil], [method round], [method stepify], and [int].\n"
+"[b]Note:[/b] This method returns a float. If you need an integer and "
+"[code]s[/code] is a non-negative number, you can use [code]int(s)[/code] "
+"directly."
+msgstr ""
+"Ri-naround ang [code]s[/code] pababa (patungo sa negatibong walang hanggan) "
+"at ibinabalik ang pinakamalaking integer na hindi hihigit sa [code]s[/"
+"code].\n"
+"[codeblock]\n"
+"a = floor(2.99) # katumbas ng 2.0\n"
+"a = floor(-2.99) # katumbas ng 2.0\n"
+"a = floor(-2.99) # katumbas ng -3.0\n"
+"[/codeblock]\n"
+"[b] Tandaan: [/b] Ang method na 'to ay nagbabalik ng float. Kung kailangan "
+"mo ng integer at kung [code]s[/code] ay hindi negative, maaari mong "
+"direktang gamitin ang [code]int(s)[/code]."
+
+#: modules/gdscript/doc_classes/@GDScript.xml:301
+msgid ""
+"Returns the floating-point remainder of [code]a/b[/code], keeping the sign "
+"of [code]a[/code].\n"
+"[codeblock]\n"
+"r = fmod(7, 5.5) # r is 1.5\n"
+"[/codeblock]\n"
+"For the integer remainder operation, use the % operator."
+msgstr ""
+"Ibinabalik ang the floating-point ng labi (remainder) ng [code]a/b[/code], "
+"habang pinapanatili ang sign ng [code]a[/code].\n"
+"[codeblock]\n"
+"r = fmod(7, 5.5) # katumbas ng 1.5\n"
+"[/codeblock]\n"
+"Para sa operasyon sa integer remainder, gamitin ang operator %."
+
+#: modules/gdscript/doc_classes/@GDScript.xml:313
+msgid ""
+"Returns the floating-point modulus of [code]a/b[/code] that wraps equally in "
+"positive and negative.\n"
+"[codeblock]\n"
+"for i in 7:\n"
+" var x = 0.5 * i - 1.5\n"
+" print(\"%4.1f %4.1f %4.1f\" % [x, fmod(x, 1.5), fposmod(x, 1.5)])\n"
+"[/codeblock]\n"
+"Produces:\n"
+"[codeblock]\n"
+"-1.5 -0.0 0.0\n"
+"-1.0 -1.0 0.5\n"
+"-0.5 -0.5 1.0\n"
+" 0.0 0.0 0.0\n"
+" 0.5 0.5 0.5\n"
+" 1.0 1.0 1.0\n"
+" 1.5 0.0 0.0\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:336
+msgid ""
+"Returns a reference to the specified function [code]funcname[/code] in the "
+"[code]instance[/code] node. As functions aren't first-class objects in "
+"GDscript, use [code]funcref[/code] to store a [FuncRef] in a variable and "
+"call it later.\n"
+"[codeblock]\n"
+"func foo():\n"
+" return(\"bar\")\n"
+"\n"
+"a = funcref(self, \"foo\")\n"
+"print(a.call_func()) # Prints bar\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:349
+msgid ""
+"Returns an array of dictionaries representing the current call stack.\n"
+"[codeblock]\n"
+"func _ready():\n"
+" foo()\n"
+"\n"
+"func foo():\n"
+" bar()\n"
+"\n"
+"func bar():\n"
+" print(get_stack())\n"
+"[/codeblock]\n"
+"would print\n"
+"[codeblock]\n"
+"[{function:bar, line:12, source:res://script.gd}, {function:foo, line:9, "
+"source:res://script.gd}, {function:_ready, line:6, source:res://script.gd}]\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:370
+msgid ""
+"Returns the integer hash of the variable passed.\n"
+"[codeblock]\n"
+"print(hash(\"a\")) # Prints 177670\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:380
+msgid ""
+"Returns the passed instance converted to a dictionary (useful for "
+"serializing).\n"
+"[codeblock]\n"
+"var foo = \"bar\"\n"
+"func _ready():\n"
+" var d = inst2dict(self)\n"
+" print(d.keys())\n"
+" print(d.values())\n"
+"[/codeblock]\n"
+"Prints out:\n"
+"[codeblock]\n"
+"[@subpath, @path, foo]\n"
+"[, res://test.gd, bar]\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:399
+msgid ""
+"Returns the Object that corresponds to [code]instance_id[/code]. All Objects "
+"have a unique instance ID.\n"
+"[codeblock]\n"
+"var foo = \"bar\"\n"
+"func _ready():\n"
+" var id = get_instance_id()\n"
+" var inst = instance_from_id(id)\n"
+" print(inst.foo) # Prints bar\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:415
+msgid ""
+"Returns a normalized value considering the given range. This is the opposite "
+"of [method lerp].\n"
+"[codeblock]\n"
+"var middle = lerp(20, 30, 0.75)\n"
+"# `middle` is now 27.5.\n"
+"# Now, we pretend to have forgotten the original ratio and want to get it "
+"back.\n"
+"var ratio = inverse_lerp(20, 30, 27.5)\n"
+"# `ratio` is now 0.75.\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:430
+msgid ""
+"Returns [code]true[/code] if [code]a[/code] and [code]b[/code] are "
+"approximately equal to each other.\n"
+"Here, approximately equal means that [code]a[/code] and [code]b[/code] are "
+"within a small internal epsilon of each other, which scales with the "
+"magnitude of the numbers.\n"
+"Infinity values of the same sign are considered equal."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:439
+msgid ""
+"Returns whether [code]s[/code] is an infinity value (either positive "
+"infinity or negative infinity)."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:446
+msgid ""
+"Returns whether [code]instance[/code] is a valid object (e.g. has not been "
+"deleted from memory)."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:453
+msgid ""
+"Returns whether [code]s[/code] is a NaN (\"Not a Number\" or invalid) value."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:460
+msgid ""
+"Returns [code]true[/code] if [code]s[/code] is zero or almost zero.\n"
+"This method is faster than using [method is_equal_approx] with one value as "
+"zero."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:468
+msgid ""
+"Returns length of Variant [code]var[/code]. Length is the character count of "
+"String, element count of Array, size of Dictionary, etc.\n"
+"[b]Note:[/b] Generates a fatal error if Variant can not provide a length.\n"
+"[codeblock]\n"
+"a = [1, 2, 3, 4]\n"
+"len(a) # Returns 4\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:482
+msgid ""
+"Linearly interpolates between two values by a normalized value. This is the "
+"opposite of [method inverse_lerp].\n"
+"If the [code]from[/code] and [code]to[/code] arguments are of type [int] or "
+"[float], the return value is a [float].\n"
+"If both are of the same vector type ([Vector2], [Vector3] or [Color]), the "
+"return value will be of the same type ([code]lerp[/code] then calls the "
+"vector type's [code]linear_interpolate[/code] method).\n"
+"[codeblock]\n"
+"lerp(0, 4, 0.75) # Returns 3.0\n"
+"lerp(Vector2(1, 5), Vector2(3, 2), 0.5) # Returns Vector2(2, 3.5)\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:497
+msgid ""
+"Linearly interpolates between two angles (in radians) by a normalized "
+"value.\n"
+"Similar to [method lerp], but interpolates correctly when the angles wrap "
+"around [constant @GDScript.TAU].\n"
+"[codeblock]\n"
+"extends Sprite\n"
+"var elapsed = 0.0\n"
+"func _process(delta):\n"
+" var min_angle = deg2rad(0.0)\n"
+" var max_angle = deg2rad(90.0)\n"
+" rotation = lerp_angle(min_angle, max_angle, elapsed)\n"
+" elapsed += delta\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:514
+msgid ""
+"Converts from linear energy to decibels (audio). This can be used to "
+"implement volume sliders that behave as expected (since volume isn't "
+"linear). Example:\n"
+"[codeblock]\n"
+"# \"Slider\" refers to a node that inherits Range such as HSlider or "
+"VSlider.\n"
+"# Its range must be configured to go from 0 to 1.\n"
+"# Change the bus name if you'd like to change the volume of a specific bus "
+"only.\n"
+"AudioServer.set_bus_volume_db(AudioServer.get_bus_index(\"Master\"), "
+"linear2db($Slider.value))\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:527
+msgid ""
+"Loads a resource from the filesystem located at [code]path[/code]. The "
+"resource is loaded on the method call (unless it's referenced already "
+"elsewhere, e.g. in another script or in the scene), which might cause slight "
+"delay, especially when loading scenes. To avoid unnecessary delays when "
+"loading something multiple times, either store the resource in a variable or "
+"use [method preload].\n"
+"[b]Note:[/b] Resource paths can be obtained by right-clicking on a resource "
+"in the FileSystem dock and choosing \"Copy Path\" or by dragging the file "
+"from the FileSystem dock into the script.\n"
+"[codeblock]\n"
+"# Load a scene called main located in the root of the project directory and "
+"cache it in a variable.\n"
+"var main = load(\"res://main.tscn\") # main will contain a PackedScene "
+"resource.\n"
+"[/codeblock]\n"
+"[b]Important:[/b] The path must be absolute, a local path will just return "
+"[code]null[/code].\n"
+"This method is a simplified version of [method ResourceLoader.load], which "
+"can be used for more advanced scenarios."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:541
+msgid ""
+"Natural logarithm. The amount of time needed to reach a certain level of "
+"continuous growth.\n"
+"[b]Note:[/b] This is not the same as the \"log\" function on most "
+"calculators, which uses a base 10 logarithm.\n"
+"[codeblock]\n"
+"log(10) # Returns 2.302585\n"
+"[/codeblock]\n"
+"[b]Note:[/b] The logarithm of [code]0[/code] returns [code]-inf[/code], "
+"while negative values return [code]-nan[/code]."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:554
+msgid ""
+"Returns the maximum of two values.\n"
+"[codeblock]\n"
+"max(1, 2) # Returns 2\n"
+"max(-3.99, -4) # Returns -3.99\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:566
+msgid ""
+"Returns the minimum of two values.\n"
+"[codeblock]\n"
+"min(1, 2) # Returns 1\n"
+"min(-3.99, -4) # Returns -4\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:579
+msgid ""
+"Moves [code]from[/code] toward [code]to[/code] by the [code]delta[/code] "
+"value.\n"
+"Use a negative [code]delta[/code] value to move away.\n"
+"[codeblock]\n"
+"move_toward(5, 10, 4) # Returns 9\n"
+"move_toward(10, 5, 4) # Returns 6\n"
+"move_toward(10, 5, -1.5) # Returns 11.5\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:592
+msgid ""
+"Returns the nearest equal or larger power of 2 for integer [code]value[/"
+"code].\n"
+"In other words, returns the smallest value [code]a[/code] where [code]a = "
+"pow(2, n)[/code] such that [code]value <= a[/code] for some non-negative "
+"integer [code]n[/code].\n"
+"[codeblock]\n"
+"nearest_po2(3) # Returns 4\n"
+"nearest_po2(4) # Returns 4\n"
+"nearest_po2(5) # Returns 8\n"
+"\n"
+"nearest_po2(0) # Returns 0 (this may not be what you expect)\n"
+"nearest_po2(-1) # Returns 0 (this may not be what you expect)\n"
+"[/codeblock]\n"
+"[b]WARNING:[/b] Due to the way it is implemented, this function returns "
+"[code]0[/code] rather than [code]1[/code] for non-positive values of "
+"[code]value[/code] (in reality, 1 is the smallest integer power of 2)."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:609
+msgid ""
+"Returns an integer representing the Unicode code point of the given Unicode "
+"character [code]char[/code].\n"
+"[codeblock]\n"
+"a = ord(\"A\") # a is 65\n"
+"a = ord(\"a\") # a is 97\n"
+"a = ord(\"€\") # a is 8364\n"
+"[/codeblock]\n"
+"This is the inverse of [method char]."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:622
+msgid ""
+"Parse JSON text to a Variant. (Use [method typeof] to check if the Variant's "
+"type is what you expect.)\n"
+"[b]Note:[/b] The JSON specification does not define integer or float types, "
+"but only a [i]number[/i] type. Therefore, parsing a JSON text will convert "
+"all numerical values to [float] types.\n"
+"[b]Note:[/b] JSON objects do not preserve key order like Godot dictionaries, "
+"thus, you should not rely on keys being in a certain order if a dictionary "
+"is constructed from JSON. In contrast, JSON arrays retain the order of their "
+"elements:\n"
+"[codeblock]\n"
+"var p = JSON.parse('[\"hello\", \"world\", \"!\"]')\n"
+"if typeof(p.result) == TYPE_ARRAY:\n"
+" print(p.result[0]) # Prints \"hello\"\n"
+"else:\n"
+" push_error(\"Unexpected results.\")\n"
+"[/codeblock]\n"
+"See also [JSON] for an alternative way to parse JSON text."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:640
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:142
+msgid ""
+"Converts a 2D point expressed in the polar coordinate system (a distance "
+"from the origin [code]r[/code] and an angle [code]th[/code]) to the "
+"cartesian coordinate system (X and Y axis)."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:648
+msgid ""
+"Returns the integer modulus of [code]a/b[/code] that wraps equally in "
+"positive and negative.\n"
+"[codeblock]\n"
+"for i in range(-3, 4):\n"
+" print(\"%2d %2d %2d\" % [i, i % 3, posmod(i, 3)])\n"
+"[/codeblock]\n"
+"Produces:\n"
+"[codeblock]\n"
+"-3 0 0\n"
+"-2 -2 1\n"
+"-1 -1 2\n"
+" 0 0 0\n"
+" 1 1 1\n"
+" 2 2 2\n"
+" 3 0 0\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:670
+msgid ""
+"Returns the result of [code]base[/code] raised to the power of [code]exp[/"
+"code].\n"
+"[codeblock]\n"
+"pow(2, 5) # Returns 32.0\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:680
+msgid ""
+"Returns a [Resource] from the filesystem located at [code]path[/code]. The "
+"resource is loaded during script parsing, i.e. is loaded with the script and "
+"[method preload] effectively acts as a reference to that resource. Note that "
+"the method requires a constant path. If you want to load a resource from a "
+"dynamic/variable path, use [method load].\n"
+"[b]Note:[/b] Resource paths can be obtained by right clicking on a resource "
+"in the Assets Panel and choosing \"Copy Path\" or by dragging the file from "
+"the FileSystem dock into the script.\n"
+"[codeblock]\n"
+"# Instance a scene.\n"
+"var diamond = preload(\"res://diamond.tscn\").instance()\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:691
+msgid ""
+"Converts one or more arguments of any type to string in the best way "
+"possible and prints them to the console.\n"
+"[codeblock]\n"
+"a = [1, 2, 3]\n"
+"print(\"a\", \"=\", a) # Prints a=[1, 2, 3]\n"
+"[/codeblock]\n"
+"[b]Note:[/b] Consider using [method push_error] and [method push_warning] to "
+"print error and warning messages instead of [method print]. This "
+"distinguishes them from print messages used for debugging purposes, while "
+"also displaying a stack trace when an error or warning is printed."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:702
+msgid "Like [method print], but prints only when used in debug mode."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:708
+msgid ""
+"Prints a stack track at code location, only works when running with debugger "
+"turned on.\n"
+"Output in the console would look something like this:\n"
+"[codeblock]\n"
+"Frame 0 - res://test.gd:16 in function '_process'\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:718
+msgid ""
+"Prints one or more arguments to strings in the best way possible to standard "
+"error line.\n"
+"[codeblock]\n"
+"printerr(\"prints to stderr\")\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:727
+msgid ""
+"Prints one or more arguments to strings in the best way possible to console. "
+"No newline is added at the end.\n"
+"[codeblock]\n"
+"printraw(\"A\")\n"
+"printraw(\"B\")\n"
+"# Prints AB\n"
+"[/codeblock]\n"
+"[b]Note:[/b] Due to limitations with Godot's built-in console, this only "
+"prints to the terminal. If you need to print in the editor, use another "
+"method, such as [method print]."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:739
+msgid ""
+"Prints one or more arguments to the console with a space between each "
+"argument.\n"
+"[codeblock]\n"
+"prints(\"A\", \"B\", \"C\") # Prints A B C\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:748
+msgid ""
+"Prints one or more arguments to the console with a tab between each "
+"argument.\n"
+"[codeblock]\n"
+"printt(\"A\", \"B\", \"C\") # Prints A B C\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:758
+msgid ""
+"Pushes an error message to Godot's built-in debugger and to the OS "
+"terminal.\n"
+"[codeblock]\n"
+"push_error(\"test error\") # Prints \"test error\" to debugger and terminal "
+"as error call\n"
+"[/codeblock]\n"
+"[b]Note:[/b] Errors printed this way will not pause project execution. To "
+"print an error message and pause project execution in debug builds, use "
+"[code]assert(false, \"test error\")[/code] instead."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:769
+msgid ""
+"Pushes a warning message to Godot's built-in debugger and to the OS "
+"terminal.\n"
+"[codeblock]\n"
+"push_warning(\"test warning\") # Prints \"test warning\" to debugger and "
+"terminal as warning call\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:779
+msgid ""
+"Converts an angle expressed in radians to degrees.\n"
+"[codeblock]\n"
+"rad2deg(0.523599) # Returns 30.0\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:790
+msgid ""
+"Random range, any floating point value between [code]from[/code] and "
+"[code]to[/code].\n"
+"[codeblock]\n"
+"prints(rand_range(0, 1), rand_range(0, 1)) # Prints e.g. 0.135591 0.405263\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:800
+msgid ""
+"Random from seed: pass a [code]seed[/code], and an array with both number "
+"and new seed is returned. \"Seed\" here refers to the internal state of the "
+"pseudo random number generator. The internal state of the current "
+"implementation is 64 bits."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:806
+msgid ""
+"Returns a random floating point value on the interval [code][0, 1][/code].\n"
+"[codeblock]\n"
+"randf() # Returns e.g. 0.375671\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:815
+msgid ""
+"Returns a random unsigned 32-bit integer. Use remainder to obtain a random "
+"value in the interval [code][0, N - 1][/code] (where N is smaller than "
+"2^32).\n"
+"[codeblock]\n"
+"randi() # Returns random integer between 0 and 2^32 - 1\n"
+"randi() % 20 # Returns random integer between 0 and 19\n"
+"randi() % 100 # Returns random integer between 0 and 99\n"
+"randi() % 100 + 1 # Returns random integer between 1 and 100\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:827
+msgid ""
+"Randomizes the seed (or the internal state) of the random number generator. "
+"Current implementation reseeds using a number based on time.\n"
+"[codeblock]\n"
+"func _ready():\n"
+" randomize()\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:837
+msgid ""
+"Returns an array with the given range. Range can be 1 argument [code]N[/"
+"code] (0 to [code]N[/code] - 1), two arguments ([code]initial[/code], "
+"[code]final - 1[/code]) or three arguments ([code]initial[/code], "
+"[code]final - 1[/code], [code]increment[/code]). Returns an empty array if "
+"the range isn't valid (e.g. [code]range(2, 5, -1)[/code] or [code]range(5, "
+"5, 1)[/code]).\n"
+"Returns an array with the given range. [code]range()[/code] can have 1 "
+"argument N ([code]0[/code] to [code]N - 1[/code]), two arguments "
+"([code]initial[/code], [code]final - 1[/code]) or three arguments "
+"([code]initial[/code], [code]final - 1[/code], [code]increment[/code]). "
+"[code]increment[/code] can be negative. If [code]increment[/code] is "
+"negative, [code]final - 1[/code] will become [code]final + 1[/code]. Also, "
+"the initial value must be greater than the final value for the loop to run.\n"
+"[codeblock]\n"
+"print(range(4))\n"
+"print(range(2, 5))\n"
+"print(range(0, 6, 2))\n"
+"[/codeblock]\n"
+"Output:\n"
+"[codeblock]\n"
+"[0, 1, 2, 3]\n"
+"[2, 3, 4]\n"
+"[0, 2, 4]\n"
+"[/codeblock]\n"
+"To iterate over an [Array] backwards, use:\n"
+"[codeblock]\n"
+"var array = [3, 6, 9]\n"
+"var i := array.size() - 1\n"
+"while i >= 0:\n"
+" print(array[i])\n"
+" i -= 1\n"
+"[/codeblock]\n"
+"Output:\n"
+"[codeblock]\n"
+"9\n"
+"6\n"
+"3\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:874
+msgid ""
+"Maps a [code]value[/code] from range [code][istart, istop][/code] to [code]"
+"[ostart, ostop][/code].\n"
+"[codeblock]\n"
+"range_lerp(75, 0, 100, -1, 1) # Returns 0.5\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:884
+msgid ""
+"Rounds [code]s[/code] to the nearest whole number, with halfway cases "
+"rounded away from zero.\n"
+"[codeblock]\n"
+"a = round(2.49) # a is 2.0\n"
+"a = round(2.5) # a is 3.0\n"
+"a = round(2.51) # a is 3.0\n"
+"[/codeblock]\n"
+"See also [method floor], [method ceil], [method stepify], and [int]."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:897
+msgid ""
+"Sets seed for the random number generator.\n"
+"[codeblock]\n"
+"my_seed = \"Godot Rocks\"\n"
+"seed(my_seed.hash())\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:908
+msgid ""
+"Returns the sign of [code]s[/code]: -1 or 1. Returns 0 if [code]s[/code] is "
+"0.\n"
+"[codeblock]\n"
+"sign(-6) # Returns -1\n"
+"sign(0) # Returns 0\n"
+"sign(6) # Returns 1\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:920
+msgid ""
+"Returns the sine of angle [code]s[/code] in radians.\n"
+"[codeblock]\n"
+"sin(0.523599) # Returns 0.5\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:930
+msgid ""
+"Returns the hyperbolic sine of [code]s[/code].\n"
+"[codeblock]\n"
+"a = log(2.0) # Returns 0.693147\n"
+"sinh(a) # Returns 0.75\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:943
+msgid ""
+"Returns the result of smoothly interpolating the value of [code]s[/code] "
+"between [code]0[/code] and [code]1[/code], based on the where [code]s[/code] "
+"lies with respect to the edges [code]from[/code] and [code]to[/code].\n"
+"The return value is [code]0[/code] if [code]s <= from[/code], and [code]1[/"
+"code] if [code]s >= to[/code]. If [code]s[/code] lies between [code]from[/"
+"code] and [code]to[/code], the returned value follows an S-shaped curve that "
+"maps [code]s[/code] between [code]0[/code] and [code]1[/code].\n"
+"This S-shaped curve is the cubic Hermite interpolator, given by [code]f(y) = "
+"3*y^2 - 2*y^3[/code] where [code]y = (x-from) / (to-from)[/code].\n"
+"[codeblock]\n"
+"smoothstep(0, 2, -5.0) # Returns 0.0\n"
+"smoothstep(0, 2, 0.5) # Returns 0.15625\n"
+"smoothstep(0, 2, 1.0) # Returns 0.5\n"
+"smoothstep(0, 2, 2.0) # Returns 1.0\n"
+"[/codeblock]\n"
+"Compared to [method ease] with a curve value of [code]-1.6521[/code], "
+"[method smoothstep] returns the smoothest possible curve with no sudden "
+"changes in the derivative. If you need to perform more advanced transitions, "
+"use [Tween] or [AnimationPlayer].\n"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/"
+"smoothstep_ease_comparison.png]Comparison between smoothstep() and ease(x, "
+"-1.6521) return values[/url]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:960
+msgid ""
+"Returns the square root of [code]s[/code], where [code]s[/code] is a non-"
+"negative number.\n"
+"[codeblock]\n"
+"sqrt(9) # Returns 3\n"
+"[/codeblock]\n"
+"[b]Note:[/b] Negative values of [code]s[/code] return NaN. If you need "
+"negative inputs, use [code]System.Numerics.Complex[/code] in C#."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:971
+msgid ""
+"Returns the position of the first non-zero digit, after the decimal point. "
+"Note that the maximum return value is 10, which is a design decision in the "
+"implementation.\n"
+"[codeblock]\n"
+"n = step_decimals(5) # n is 0\n"
+"n = step_decimals(1.0005) # n is 4\n"
+"n = step_decimals(0.000000005) # n is 9\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:984
+msgid ""
+"Snaps float value [code]s[/code] to a given [code]step[/code]. This can also "
+"be used to round a floating point number to an arbitrary number of "
+"decimals.\n"
+"[codeblock]\n"
+"stepify(100, 32) # Returns 96.0\n"
+"stepify(3.14159, 0.01) # Returns 3.14\n"
+"[/codeblock]\n"
+"See also [method ceil], [method floor], [method round], and [int]."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:995
+msgid ""
+"Converts one or more arguments of any type to string in the best way "
+"possible.\n"
+"[codeblock]\n"
+"var a = [10, 20, 30]\n"
+"var b = str(a);\n"
+"len(a) # Returns 3\n"
+"len(b) # Returns 12\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:1008
+msgid ""
+"Converts a formatted string that was returned by [method var2str] to the "
+"original value.\n"
+"[codeblock]\n"
+"a = '{ \"a\": 1, \"b\": 2 }'\n"
+"b = str2var(a)\n"
+"print(b[\"a\"]) # Prints 1\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:1020
+msgid ""
+"Returns the tangent of angle [code]s[/code] in radians.\n"
+"[codeblock]\n"
+"tan(deg2rad(45)) # Returns 1\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:1030
+msgid ""
+"Returns the hyperbolic tangent of [code]s[/code].\n"
+"[codeblock]\n"
+"a = log(2.0) # a is 0.693147\n"
+"b = tanh(a) # b is 0.6\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:1041
+msgid ""
+"Converts a [Variant] [code]var[/code] to JSON text and return the result. "
+"Useful for serializing data to store or send over the network.\n"
+"[codeblock]\n"
+"# Both numbers below are integers.\n"
+"a = { \"a\": 1, \"b\": 2 }\n"
+"b = to_json(a)\n"
+"print(b) # {\"a\":1, \"b\":2}\n"
+"# Both numbers above are floats, even if they display without any decimal "
+"places.\n"
+"[/codeblock]\n"
+"[b]Note:[/b] The JSON specification does not define integer or float types, "
+"but only a [i]number[/i] type. Therefore, converting a [Variant] to JSON "
+"text will convert all numerical values to [float] types.\n"
+"See also [JSON] for an alternative way to convert a [Variant] to JSON text."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:1057
+msgid ""
+"Returns whether the given class exists in [ClassDB].\n"
+"[codeblock]\n"
+"type_exists(\"Sprite\") # Returns true\n"
+"type_exists(\"Variant\") # Returns false\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:1068
+msgid ""
+"Returns the internal type of the given Variant object, using the [enum "
+"Variant.Type] values.\n"
+"[codeblock]\n"
+"p = parse_json('[\"a\", \"b\", \"c\"]')\n"
+"if typeof(p) == TYPE_ARRAY:\n"
+" print(p[0]) # Prints a\n"
+"else:\n"
+" print(\"unexpected results\")\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:1082
+msgid ""
+"Checks that [code]json[/code] is valid JSON data. Returns an empty string if "
+"valid, or an error message otherwise.\n"
+"[codeblock]\n"
+"j = to_json([1, 2, 3])\n"
+"v = validate_json(j)\n"
+"if not v:\n"
+" print(\"Valid JSON.\")\n"
+"else:\n"
+" push_error(\"Invalid JSON: \" + v)\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:1098
+msgid ""
+"Encodes a variable value to a byte array. When [code]full_objects[/code] is "
+"[code]true[/code] encoding objects is allowed (and can potentially include "
+"code)."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:1105
+msgid ""
+"Converts a Variant [code]var[/code] to a formatted string that can later be "
+"parsed using [method str2var].\n"
+"[codeblock]\n"
+"a = { \"a\": 1, \"b\": 2 }\n"
+"print(var2str(a))\n"
+"[/codeblock]\n"
+"prints\n"
+"[codeblock]\n"
+"{\n"
+"\"a\": 1,\n"
+"\"b\": 2\n"
+"}\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:1123
+msgid ""
+"Returns a weak reference to an object.\n"
+"A weak reference to an object is not enough to keep the object alive: when "
+"the only remaining references to a referent are weak references, garbage "
+"collection is free to destroy the referent and reuse its memory for "
+"something else. However, until the object is actually destroyed the weak "
+"reference may return the object even if there are no strong references to it."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:1133
+msgid ""
+"Wraps float [code]value[/code] between [code]min[/code] and [code]max[/"
+"code].\n"
+"Usable for creating loop-alike behavior or infinite surfaces.\n"
+"[codeblock]\n"
+"# Infinite loop between 5.0 and 9.9\n"
+"value = wrapf(value + 0.1, 5.0, 10.0)\n"
+"[/codeblock]\n"
+"[codeblock]\n"
+"# Infinite rotation (in radians)\n"
+"angle = wrapf(angle + 0.1, 0.0, TAU)\n"
+"[/codeblock]\n"
+"[codeblock]\n"
+"# Infinite rotation (in radians)\n"
+"angle = wrapf(angle + 0.1, -PI, PI)\n"
+"[/codeblock]\n"
+"[b]Note:[/b] If [code]min[/code] is [code]0[/code], this is equivalent to "
+"[method fposmod], so prefer using that instead.\n"
+"[code]wrapf[/code] is more flexible than using the [method fposmod] approach "
+"by giving the user control over the minimum value."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:1157
+msgid ""
+"Wraps integer [code]value[/code] between [code]min[/code] and [code]max[/"
+"code].\n"
+"Usable for creating loop-alike behavior or infinite surfaces.\n"
+"[codeblock]\n"
+"# Infinite loop between 5 and 9\n"
+"frame = wrapi(frame + 1, 5, 10)\n"
+"[/codeblock]\n"
+"[codeblock]\n"
+"# result is -2\n"
+"var result = wrapi(-6, -5, -1)\n"
+"[/codeblock]\n"
+"[b]Note:[/b] If [code]min[/code] is [code]0[/code], this is equivalent to "
+"[method posmod], so prefer using that instead.\n"
+"[code]wrapi[/code] is more flexible than using the [method posmod] approach "
+"by giving the user control over the minimum value."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:1176
+msgid ""
+"Stops the function execution and returns the current suspended state to the "
+"calling function.\n"
+"From the caller, call [method GDScriptFunctionState.resume] on the state to "
+"resume execution. This invalidates the state. Within the resumed function, "
+"[code]yield()[/code] returns whatever was passed to the [code]resume()[/"
+"code] function call.\n"
+"If passed an object and a signal, the execution is resumed when the object "
+"emits the given signal. In this case, [code]yield()[/code] returns the "
+"argument passed to [code]emit_signal()[/code] if the signal takes only one "
+"argument, or an array containing all the arguments passed to "
+"[code]emit_signal()[/code] if the signal takes multiple arguments.\n"
+"You can also use [code]yield[/code] to wait for a function to finish:\n"
+"[codeblock]\n"
+"func _ready():\n"
+" yield(countdown(), \"completed\") # waiting for the countdown() function "
+"to complete\n"
+" print('Ready')\n"
+"\n"
+"func countdown():\n"
+" yield(get_tree(), \"idle_frame\") # returns a GDScriptFunctionState "
+"object to _ready()\n"
+" print(3)\n"
+" yield(get_tree().create_timer(1.0), \"timeout\")\n"
+" print(2)\n"
+" yield(get_tree().create_timer(1.0), \"timeout\")\n"
+" print(1)\n"
+" yield(get_tree().create_timer(1.0), \"timeout\")\n"
+"\n"
+"# prints:\n"
+"# 3\n"
+"# 2\n"
+"# 1\n"
+"# Ready\n"
+"[/codeblock]\n"
+"When yielding on a function, the [code]completed[/code] signal will be "
+"emitted automatically when the function returns. It can, therefore, be used "
+"as the [code]signal[/code] parameter of the [code]yield[/code] method to "
+"resume.\n"
+"In order to yield on a function, the resulting function should also return a "
+"[code]GDScriptFunctionState[/code]. Notice [code]yield(get_tree(), "
+"\"idle_frame\")[/code] from the above example."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:1207
+msgid ""
+"Constant that represents how many times the diameter of a circle fits around "
+"its perimeter. This is equivalent to [code]TAU / 2[/code]."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:1210
+msgid ""
+"The circle constant, the circumference of the unit circle in radians. This "
+"is equivalent to [code]PI * 2[/code], or 360 degrees in rotations."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:1213
+msgid ""
+"Positive floating-point infinity. This is the result of floating-point "
+"division when the divisor is [code]0.0[/code]. For negative infinity, use "
+"[code]-INF[/code]. Dividing by [code]-0.0[/code] will result in negative "
+"infinity if the numerator is positive, so dividing by [code]0.0[/code] is "
+"not the same as dividing by [code]-0.0[/code] (despite [code]0.0 == -0.0[/"
+"code] returning [code]true[/code]).\n"
+"[b]Note:[/b] Numeric infinity is only a concept with floating-point numbers, "
+"and has no equivalent for integers. Dividing an integer number by [code]0[/"
+"code] will not result in [constant INF] and will result in a run-time error "
+"instead."
+msgstr ""
+
+#: modules/gdscript/doc_classes/@GDScript.xml:1217
+msgid ""
+"\"Not a Number\", an invalid floating-point value. [constant NAN] has "
+"special properties, including that it is not equal to itself ([code]NAN == "
+"NAN[/code] returns [code]false[/code]). It is output by some invalid "
+"operations, such as dividing floating-point [code]0.0[/code] by [code]0.0[/"
+"code].\n"
+"[b]Note:[/b] \"Not a Number\" is only a concept with floating-point numbers, "
+"and has no equivalent for integers. Dividing an integer [code]0[/code] by "
+"[code]0[/code] will not result in [constant NAN] and will result in a run-"
+"time error instead."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:4
+msgid "Global scope constants and variables."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:7
+msgid ""
+"Global scope constants and variables. This is all that resides in the "
+"globals, constants regarding error codes, scancodes, property hints, etc.\n"
+"Singletons are also documented here, since they can be accessed from "
+"anywhere."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:16
+msgid "The [ARVRServer] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:19
+msgid "The [AudioServer] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:22
+msgid "The [CameraServer] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:25
+msgid "The [ClassDB] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:28
+msgid "The [Engine] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:31
+msgid "The [Geometry] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:34
+msgid "The [IP] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:37
+msgid "The [Input] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:40
+msgid "The [InputMap] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:43
+msgid "The [JSON] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:46
+msgid ""
+"The [JavaClassWrapper] singleton.\n"
+"[b]Note:[/b] Only implemented on Android."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:50
+msgid ""
+"The [JavaScript] singleton.\n"
+"[b]Note:[/b] Only implemented on HTML5."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:54
+msgid "The [Marshalls] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:57
+msgid "The [EditorNavigationMeshGenerator] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:60
+msgid "The [OS] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:63
+msgid "The [Performance] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:66
+msgid "The [Physics2DServer] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:69
+msgid "The [PhysicsServer] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:72
+msgid "The [ProjectSettings] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:75
+msgid "The [ResourceLoader] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:78
+msgid "The [ResourceSaver] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:81
+msgid "The [TranslationServer] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:84
+msgid "The [VisualScriptEditor] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:87
+msgid "The [VisualServer] singleton."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:92
+msgid "Left margin, usually used for [Control] or [StyleBox]-derived classes."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:95
+msgid "Top margin, usually used for [Control] or [StyleBox]-derived classes."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:98
+msgid "Right margin, usually used for [Control] or [StyleBox]-derived classes."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:101
+msgid ""
+"Bottom margin, usually used for [Control] or [StyleBox]-derived classes."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:104
+msgid "Top-left corner."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:107
+msgid "Top-right corner."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:110
+msgid "Bottom-right corner."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:113
+msgid "Bottom-left corner."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:116
+msgid ""
+"General vertical alignment, usually used for [Separator], [ScrollBar], "
+"[Slider], etc."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:119
+msgid ""
+"General horizontal alignment, usually used for [Separator], [ScrollBar], "
+"[Slider], etc."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:122
+msgid "Horizontal left alignment, usually for text-derived classes."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:125
+msgid "Horizontal center alignment, usually for text-derived classes."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:128
+msgid "Horizontal right alignment, usually for text-derived classes."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:131
+msgid "Vertical top alignment, usually for text-derived classes."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:134
+msgid "Vertical center alignment, usually for text-derived classes."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:137
+msgid "Vertical bottom alignment, usually for text-derived classes."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:140
+msgid "Scancodes with this bit applied are non-printable."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:143
+msgid "Escape key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:146
+msgid "Tab key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:149
+msgid "Shift+Tab key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:152
+msgid "Backspace key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:155
+msgid "Return key (on the main keyboard)."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:158
+msgid "Enter key on the numeric keypad."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:161
+msgid "Insert key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:164
+msgid "Delete key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:167
+msgid "Pause key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:170
+msgid "Print Screen key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:173
+msgid "System Request key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:176
+msgid "Clear key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:179
+msgid "Home key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:182
+msgid "End key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:185
+msgid "Left arrow key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:188
+msgid "Up arrow key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:191
+msgid "Right arrow key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:194
+msgid "Down arrow key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:197
+msgid "Page Up key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:200
+msgid "Page Down key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:203
+msgid "Shift key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:206
+msgid "Control key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:209
+msgid "Meta key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:212
+msgid "Alt key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:215
+msgid "Caps Lock key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:218
+msgid "Num Lock key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:221
+msgid "Scroll Lock key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:224
+msgid "F1 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:227
+msgid "F2 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:230
+msgid "F3 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:233
+msgid "F4 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:236
+msgid "F5 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:239
+msgid "F6 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:242
+msgid "F7 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:245
+msgid "F8 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:248
+msgid "F9 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:251
+msgid "F10 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:254
+msgid "F11 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:257
+msgid "F12 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:260
+msgid "F13 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:263
+msgid "F14 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:266
+msgid "F15 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:269
+msgid "F16 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:272
+msgid "Multiply (*) key on the numeric keypad."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:275
+msgid "Divide (/) key on the numeric keypad."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:278
+msgid "Subtract (-) key on the numeric keypad."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:281
+msgid "Period (.) key on the numeric keypad."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:284
+msgid "Add (+) key on the numeric keypad."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:287
+msgid "Number 0 on the numeric keypad."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:290
+msgid "Number 1 on the numeric keypad."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:293
+msgid "Number 2 on the numeric keypad."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:296
+msgid "Number 3 on the numeric keypad."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:299
+msgid "Number 4 on the numeric keypad."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:302
+msgid "Number 5 on the numeric keypad."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:305
+msgid "Number 6 on the numeric keypad."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:308
+msgid "Number 7 on the numeric keypad."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:311
+msgid "Number 8 on the numeric keypad."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:314
+msgid "Number 9 on the numeric keypad."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:317
+msgid "Left Super key (Windows key)."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:320
+msgid "Right Super key (Windows key)."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:323
+msgid "Context menu key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:326
+msgid "Left Hyper key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:329
+msgid "Right Hyper key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:332
+msgid "Help key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:335
+msgid "Left Direction key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:338
+msgid "Right Direction key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:341
+msgid ""
+"Media back key. Not to be confused with the Back button on an Android device."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:344
+msgid "Media forward key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:347 doc/classes/@GlobalScope.xml:380
+msgid "Media stop key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:350
+msgid "Media refresh key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:353
+msgid "Volume down key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:356
+msgid "Mute volume key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:359
+msgid "Volume up key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:362
+msgid "Bass Boost key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:365
+msgid "Bass up key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:368
+msgid "Bass down key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:371
+msgid "Treble up key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:374
+msgid "Treble down key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:377
+msgid "Media play key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:383
+msgid "Previous song key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:386
+msgid "Next song key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:389
+msgid "Media record key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:392
+msgid "Home page key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:395
+msgid "Favorites key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:398
+msgid "Search key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:401
+msgid "Standby key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:404
+msgid "Open URL / Launch Browser key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:407
+msgid "Launch Mail key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:410
+msgid "Launch Media key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:413
+msgid "Launch Shortcut 0 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:416
+msgid "Launch Shortcut 1 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:419
+msgid "Launch Shortcut 2 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:422
+msgid "Launch Shortcut 3 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:425
+msgid "Launch Shortcut 4 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:428
+msgid "Launch Shortcut 5 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:431
+msgid "Launch Shortcut 6 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:434
+msgid "Launch Shortcut 7 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:437
+msgid "Launch Shortcut 8 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:440
+msgid "Launch Shortcut 9 key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:443
+msgid "Launch Shortcut A key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:446
+msgid "Launch Shortcut B key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:449
+msgid "Launch Shortcut C key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:452
+msgid "Launch Shortcut D key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:455
+msgid "Launch Shortcut E key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:458
+msgid "Launch Shortcut F key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:461
+msgid "Unknown key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:464
+msgid "Space key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:467
+msgid "! key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:470
+msgid "\" key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:473
+msgid "# key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:476
+msgid "$ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:479
+msgid "% key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:482
+msgid "& key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:485
+msgid "' key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:488
+msgid "( key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:491
+msgid ") key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:494
+msgid "* key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:497
+msgid "+ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:500
+msgid ", key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:503
+msgid "- key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:506
+msgid ". key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:509
+msgid "/ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:512
+msgid "Number 0."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:515
+msgid "Number 1."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:518
+msgid "Number 2."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:521
+msgid "Number 3."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:524
+msgid "Number 4."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:527
+msgid "Number 5."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:530
+msgid "Number 6."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:533
+msgid "Number 7."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:536
+msgid "Number 8."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:539
+msgid "Number 9."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:542
+msgid ": key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:545
+msgid "; key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:548
+msgid "< key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:551
+msgid "= key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:554
+msgid "> key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:557
+msgid "? key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:560
+msgid "@ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:563
+msgid "A key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:566
+msgid "B key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:569
+msgid "C key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:572
+msgid "D key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:575
+msgid "E key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:578
+msgid "F key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:581
+msgid "G key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:584
+msgid "H key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:587
+msgid "I key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:590
+msgid "J key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:593
+msgid "K key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:596
+msgid "L key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:599
+msgid "M key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:602
+msgid "N key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:605
+msgid "O key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:608
+msgid "P key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:611
+msgid "Q key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:614
+msgid "R key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:617
+msgid "S key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:620
+msgid "T key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:623
+msgid "U key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:626
+msgid "V key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:629
+msgid "W key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:632
+msgid "X key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:635
+msgid "Y key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:638
+msgid "Z key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:641
+msgid "[ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:644
+msgid "\\ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:647
+msgid "] key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:650
+msgid "^ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:653
+msgid "_ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:656
+msgid "` key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:659
+msgid "{ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:662
+msgid "| key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:665
+msgid "} key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:668
+msgid "~ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:671
+msgid "Non-breakable space key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:674
+msgid "¡ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:677
+msgid "¢ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:680
+msgid "£ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:683
+msgid "¤ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:686
+msgid "Â¥ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:689
+msgid "¦ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:692
+msgid "§ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:695
+msgid "¨ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:698
+msgid "© key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:701
+msgid "ª key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:704
+msgid "« key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:707
+msgid "¬ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:710
+msgid "Soft hyphen key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:713
+msgid "® key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:716
+msgid "¯ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:719
+msgid "° key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:722
+msgid "± key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:725
+msgid "² key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:728
+msgid "³ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:731
+msgid "´ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:734
+msgid "µ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:737
+msgid "¶ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:740
+msgid "· key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:743
+msgid "¸ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:746
+msgid "¹ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:749
+msgid "º key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:752
+msgid "» key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:755
+msgid "¼ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:758
+msgid "½ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:761
+msgid "¾ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:764
+msgid "¿ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:767
+msgid "À key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:770
+msgid "Ã key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:773
+msgid "Â key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:776
+msgid "Ã key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:779
+msgid "Ä key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:782
+msgid "Ã… key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:785
+msgid "Æ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:788
+msgid "Ç key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:791
+msgid "È key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:794
+msgid "É key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:797
+msgid "Ê key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:800
+msgid "Ë key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:803
+msgid "Ì key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:806
+msgid "Ã key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:809
+msgid "ÃŽ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:812
+msgid "Ã key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:815
+msgid "Ã key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:818
+msgid "Ñ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:821
+msgid "Ã’ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:824
+msgid "Ó key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:827
+msgid "Ô key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:830
+msgid "Õ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:833
+msgid "Ö key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:836
+msgid "× key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:839
+msgid "Ø key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:842
+msgid "Ù key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:845
+msgid "Ú key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:848
+msgid "Û key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:851
+msgid "Ü key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:854
+msgid "Ã key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:857
+msgid "Þ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:860
+msgid "ß key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:863
+msgid "÷ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:866
+msgid "ÿ key."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:869
+msgid "Key Code mask."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:872
+msgid "Modifier key mask."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:875
+msgid "Shift key mask."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:878
+msgid "Alt key mask."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:881
+msgid "Meta key mask."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:884
+msgid "Ctrl key mask."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:887
+msgid ""
+"Command key mask. On macOS, this is equivalent to [constant KEY_MASK_META]. "
+"On other platforms, this is equivalent to [constant KEY_MASK_CTRL]. This "
+"mask should be preferred to [constant KEY_MASK_META] or [constant "
+"KEY_MASK_CTRL] for system shortcuts as it handles all platforms correctly."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:890
+msgid "Keypad key mask."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:893
+msgid "Group Switch key mask."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:896
+msgid "Left mouse button."
+msgstr "Kaliwang pindutan ng mouse."
+
+#: doc/classes/@GlobalScope.xml:899
+msgid "Right mouse button."
+msgstr "Kanang pindutan ng mouse."
+
+#: doc/classes/@GlobalScope.xml:902
+msgid "Middle mouse button."
+msgstr "Gitnang pindutan ng mouse."
+
+#: doc/classes/@GlobalScope.xml:905
+msgid "Extra mouse button 1 (only present on some mice)."
+msgstr "ika-1 Dagdag na pindutan ng mouse (Mahahanap lang sa iilang mouse)."
+
+#: doc/classes/@GlobalScope.xml:908
+msgid "Extra mouse button 2 (only present on some mice)."
+msgstr "ika-2 Dagdag na pindutan ng mouse (Mahahanap lang sa iilang mouse)."
+
+#: doc/classes/@GlobalScope.xml:911
+msgid "Mouse wheel up."
+msgstr "Pagtaas ng mouse wheel."
+
+#: doc/classes/@GlobalScope.xml:914
+msgid "Mouse wheel down."
+msgstr "Pagbaba ng mouse wheel."
+
+#: doc/classes/@GlobalScope.xml:917
+msgid "Mouse wheel left button (only present on some mice)."
+msgstr "Kaliwang pindutan sa mouse wheel (Mahahanap lang sa iilang mouse)."
+
+#: doc/classes/@GlobalScope.xml:920
+msgid "Mouse wheel right button (only present on some mice)."
+msgstr "Kanang pindutan sa mouse wheel (Mahahanap lang sa iilang mouse)."
+
+#: doc/classes/@GlobalScope.xml:923
+msgid "Left mouse button mask."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:926
+msgid "Right mouse button mask."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:929
+msgid "Middle mouse button mask."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:932
+msgid "Extra mouse button 1 mask."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:935
+msgid "Extra mouse button 2 mask."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:938
+msgid "Invalid button or axis."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:941
+msgid "Gamepad button 0."
+msgstr "Ika-0 pindutan ng gamepad."
+
+#: doc/classes/@GlobalScope.xml:944
+msgid "Gamepad button 1."
+msgstr "Ika-1 pindutan ng gamepad."
+
+#: doc/classes/@GlobalScope.xml:947
+msgid "Gamepad button 2."
+msgstr "Ika-2 pindutan ng gamepad."
+
+#: doc/classes/@GlobalScope.xml:950
+msgid "Gamepad button 3."
+msgstr "Ika-3 pindutan ng gamepad."
+
+#: doc/classes/@GlobalScope.xml:953
+msgid "Gamepad button 4."
+msgstr "Ika-4 pindutan ng gamepad."
+
+#: doc/classes/@GlobalScope.xml:956
+msgid "Gamepad button 5."
+msgstr "Ika-5 pindutan ng gamepad."
+
+#: doc/classes/@GlobalScope.xml:959
+msgid "Gamepad button 6."
+msgstr "Ika-6 pindutan ng gamepad."
+
+#: doc/classes/@GlobalScope.xml:962
+msgid "Gamepad button 7."
+msgstr "Ika-7 pindutan ng gamepad."
+
+#: doc/classes/@GlobalScope.xml:965
+msgid "Gamepad button 8."
+msgstr "Ika-8 pindutan ng gamepad."
+
+#: doc/classes/@GlobalScope.xml:968
+msgid "Gamepad button 9."
+msgstr "Ika-9 pindutan ng gamepad."
+
+#: doc/classes/@GlobalScope.xml:971
+msgid "Gamepad button 10."
+msgstr "Ika-10 pindutan ng gamepad."
+
+#: doc/classes/@GlobalScope.xml:974
+msgid "Gamepad button 11."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:977
+msgid "Gamepad button 12."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:980
+msgid "Gamepad button 13."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:983
+msgid "Gamepad button 14."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:986
+msgid "Gamepad button 15."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:989
+msgid "Gamepad button 16."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:992
+msgid "Gamepad button 17."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:995
+msgid "Gamepad button 18."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:998
+msgid "Gamepad button 19."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1001
+msgid "Gamepad button 20."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1004
+msgid "Gamepad button 21."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1007
+msgid "Gamepad button 22."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1010
+msgid "Represents the maximum number of joystick buttons supported."
+msgstr "Kumakatawan sa pinakamaraming bilang ng joystick na sinusuportahan."
+
+#: doc/classes/@GlobalScope.xml:1013
+msgid "DualShock circle button."
+msgstr "Pabilog na pindutang Dualshock."
+
+#: doc/classes/@GlobalScope.xml:1016
+msgid "DualShock X button."
+msgstr "Pindutang X ng Dualshock."
+
+#: doc/classes/@GlobalScope.xml:1019
+msgid "DualShock square button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1022
+msgid "DualShock triangle button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1025
+msgid "Xbox controller B button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1028
+msgid "Xbox controller A button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1031
+msgid "Xbox controller X button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1034
+msgid "Xbox controller Y button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1037
+msgid "Nintendo controller A button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1040
+msgid "Nintendo controller B button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1043
+msgid "Nintendo controller X button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1046
+msgid "Nintendo controller Y button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1049
+msgid "Grip (side) buttons on a VR controller."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1052
+msgid "Push down on the touchpad or main joystick on a VR controller."
+msgstr "Pumindot sa touchpad o sa main joystick sa VR controller."
+
+#: doc/classes/@GlobalScope.xml:1055
+msgid "Trigger on a VR controller."
+msgstr "Trigger sa VR Controller."
+
+#: doc/classes/@GlobalScope.xml:1058
+msgid ""
+"A button on the right Oculus Touch controller, X button on the left "
+"controller (also when used in OpenVR)."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1061
+msgid ""
+"B button on the right Oculus Touch controller, Y button on the left "
+"controller (also when used in OpenVR)."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1064
+msgid "Menu button on either Oculus Touch controller."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1067
+msgid "Menu button in OpenVR (Except when Oculus Touch controllers are used)."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1070
+msgid "Gamepad button Select."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1073
+msgid "Gamepad button Start."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1076
+msgid "Gamepad DPad up."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1079
+msgid "Gamepad DPad down."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1082
+msgid "Gamepad DPad left."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1085
+msgid "Gamepad DPad right."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1088
+msgid "Gamepad SDL guide button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1091
+msgid "Gamepad SDL miscellaneous button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1094
+msgid "Gamepad SDL paddle 1 button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1097
+msgid "Gamepad SDL paddle 2 button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1100
+msgid "Gamepad SDL paddle 3 button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1103
+msgid "Gamepad SDL paddle 4 button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1106
+msgid "Gamepad SDL touchpad button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1109
+msgid "Gamepad left Shoulder button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1112
+msgid "Gamepad left trigger."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1115
+msgid "Gamepad left stick click."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1118
+msgid "Gamepad right Shoulder button."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1121
+msgid "Gamepad right trigger."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1124
+msgid "Gamepad right stick click."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1127 doc/classes/@GlobalScope.xml:1160
+msgid "Gamepad left stick horizontal axis."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1130 doc/classes/@GlobalScope.xml:1163
+msgid "Gamepad left stick vertical axis."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1133 doc/classes/@GlobalScope.xml:1166
+msgid "Gamepad right stick horizontal axis."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1136 doc/classes/@GlobalScope.xml:1169
+msgid "Gamepad right stick vertical axis."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1139
+msgid "Generic gamepad axis 4."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1142
+msgid "Generic gamepad axis 5."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1145
+msgid "Gamepad left trigger analog axis."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1148
+msgid "Gamepad right trigger analog axis."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1151
+msgid "Generic gamepad axis 8."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1154
+msgid "Generic gamepad axis 9."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1157
+msgid "Represents the maximum number of joystick axes supported."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1172
+msgid "Gamepad left analog trigger."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1175
+msgid "Gamepad right analog trigger."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1178
+msgid "VR Controller analog trigger."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1181
+msgid "VR Controller analog grip (side buttons)."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1184
+msgid ""
+"OpenVR touchpad X axis (Joystick axis on Oculus Touch and Windows MR "
+"controllers)."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1187
+msgid ""
+"OpenVR touchpad Y axis (Joystick axis on Oculus Touch and Windows MR "
+"controllers)."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1190
+msgid "MIDI note OFF message."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1193
+msgid "MIDI note ON message."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1196
+msgid "MIDI aftertouch message."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1199
+msgid "MIDI control change message."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1202
+msgid "MIDI program change message."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1205
+msgid "MIDI channel pressure message."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1208
+msgid "MIDI pitch bend message."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1211
+msgid ""
+"Methods that return [enum Error] return [constant OK] when no error "
+"occurred. Note that many functions don't return an error code but will print "
+"error messages to standard output.\n"
+"Since [constant OK] has value 0, and all other failure codes are positive "
+"integers, it can also be used in boolean checks, e.g.:\n"
+"[codeblock]\n"
+"var err = method_that_returns_error()\n"
+"if err != OK:\n"
+" print(\"Failure!\")\n"
+"# Or, equivalent:\n"
+"if err:\n"
+" print(\"Still failing!\")\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1223
+msgid "Generic error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1226
+msgid "Unavailable error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1229
+msgid "Unconfigured error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1232
+msgid "Unauthorized error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1235
+msgid "Parameter range error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1238
+msgid "Out of memory (OOM) error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1241
+msgid "File: Not found error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1244
+msgid "File: Bad drive error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1247
+msgid "File: Bad path error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1250
+msgid "File: No permission error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1253
+msgid "File: Already in use error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1256
+msgid "File: Can't open error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1259
+msgid "File: Can't write error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1262
+msgid "File: Can't read error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1265
+msgid "File: Unrecognized error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1268
+msgid "File: Corrupt error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1271
+msgid "File: Missing dependencies error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1274
+msgid "File: End of file (EOF) error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1277
+msgid "Can't open error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1280
+msgid "Can't create error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1283
+msgid "Query failed error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1286
+msgid "Already in use error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1289
+msgid "Locked error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1292
+msgid "Timeout error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1295
+msgid "Can't connect error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1298
+msgid "Can't resolve error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1301
+msgid "Connection error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1304
+msgid "Can't acquire resource error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1307
+msgid "Can't fork process error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1310
+msgid "Invalid data error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1313
+msgid "Invalid parameter error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1316
+msgid "Already exists error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1319
+msgid "Does not exist error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1322
+msgid "Database: Read error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1325
+msgid "Database: Write error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1328
+msgid "Compilation failed error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1331
+msgid "Method not found error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1334
+msgid "Linking failed error."
+msgstr "Nabigo ang pagkakawing."
+
+#: doc/classes/@GlobalScope.xml:1337
+msgid "Script failed error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1340
+msgid "Cycling link (import cycle) error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1343
+msgid "Invalid declaration error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1346
+msgid "Duplicate symbol error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1349
+msgid "Parse error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1352
+msgid "Busy error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1355
+msgid "Skip error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1358
+msgid "Help error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1361
+msgid "Bug error."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1364
+msgid ""
+"Printer on fire error. (This is an easter egg, no engine methods return this "
+"error code.)"
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1367
+msgid "No hint for the edited property."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1370
+msgid ""
+"Hints that an integer or float property should be within a range specified "
+"via the hint string [code]\"min,max\"[/code] or [code]\"min,max,step\"[/"
+"code]. The hint string can optionally include [code]\"or_greater\"[/code] "
+"and/or [code]\"or_lesser\"[/code] to allow manual input going respectively "
+"above the max or below the min values. Example: [code]\"-360,360,1,"
+"or_greater,or_lesser\"[/code]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1373
+msgid ""
+"Hints that a float property should be within an exponential range specified "
+"via the hint string [code]\"min,max\"[/code] or [code]\"min,max,step\"[/"
+"code]. The hint string can optionally include [code]\"or_greater\"[/code] "
+"and/or [code]\"or_lesser\"[/code] to allow manual input going respectively "
+"above the max or below the min values. Example: [code]\"0.01,100,0.01,"
+"or_greater\"[/code]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1376
+msgid ""
+"Hints that an integer, float or string property is an enumerated value to "
+"pick in a list specified via a hint string such as [code]\"Hello,Something,"
+"Else\"[/code]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1379
+msgid ""
+"Hints that a float property should be edited via an exponential easing "
+"function. The hint string can include [code]\"attenuation\"[/code] to flip "
+"the curve horizontally and/or [code]\"inout\"[/code] to also include in/out "
+"easing."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1382 doc/classes/@GlobalScope.xml:1385
+msgid "Deprecated hint, unused."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1388
+msgid ""
+"Hints that an integer property is a bitmask with named bit flags. For "
+"example, to allow toggling bits 0, 1, 2 and 4, the hint could be something "
+"like [code]\"Bit0,Bit1,Bit2,,Bit4\"[/code]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1391
+msgid ""
+"Hints that an integer property is a bitmask using the optionally named 2D "
+"render layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1394
+msgid ""
+"Hints that an integer property is a bitmask using the optionally named 2D "
+"physics layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1397
+msgid ""
+"Hints that an integer property is a bitmask using the optionally named 3D "
+"render layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1400
+msgid ""
+"Hints that an integer property is a bitmask using the optionally named 3D "
+"physics layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1403
+msgid ""
+"Hints that a string property is a path to a file. Editing it will show a "
+"file dialog for picking the path. The hint string can be a set of filters "
+"with wildcards like [code]\"*.png,*.jpg\"[/code]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1406
+msgid ""
+"Hints that a string property is a path to a directory. Editing it will show "
+"a file dialog for picking the path."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1409
+msgid ""
+"Hints that a string property is an absolute path to a file outside the "
+"project folder. Editing it will show a file dialog for picking the path. The "
+"hint string can be a set of filters with wildcards like [code]\"*.png,*.jpg"
+"\"[/code]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1412
+msgid ""
+"Hints that a string property is an absolute path to a directory outside the "
+"project folder. Editing it will show a file dialog for picking the path."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1415
+msgid ""
+"Hints that a property is an instance of a [Resource]-derived type, "
+"optionally specified via the hint string (e.g. [code]\"Texture\"[/code]). "
+"Editing it will show a popup menu of valid resource types to instantiate."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1418
+msgid ""
+"Hints that a string property is text with line breaks. Editing it will show "
+"a text input field where line breaks can be typed."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1421
+msgid ""
+"Hints that a string property should have a placeholder text visible on its "
+"input field, whenever the property is empty. The hint string is the "
+"placeholder text to use."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1424
+msgid ""
+"Hints that a color property should be edited without changing its alpha "
+"component, i.e. only R, G and B channels are edited."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1427
+msgid "Hints that an image is compressed using lossy compression."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1430
+msgid "Hints that an image is compressed using lossless compression."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1433
+msgid "The property is serialized and saved in the scene file (default)."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1436
+msgid "The property is shown in the editor inspector (default)."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1439 doc/classes/@GlobalScope.xml:1442
+msgid "Deprecated usage flag, unused."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1445
+msgid "The property can be checked in the editor inspector."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1448
+msgid "The property is checked in the editor inspector."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1451
+msgid "The property is a translatable string."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1454
+msgid "Used to group properties together in the editor."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1457
+msgid "Used to categorize properties together in the editor."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1460
+msgid "The property does not save its state in [PackedScene]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1463
+msgid "Editing the property prompts the user for restarting the editor."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1466
+msgid ""
+"The property is a script variable which should be serialized and saved in "
+"the scene file."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1469
+msgid "Default usage (storage, editor and network)."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1472
+msgid ""
+"Default usage for translatable strings (storage, editor, network and "
+"internationalized)."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1475
+msgid ""
+"Default usage but without showing the property in the editor (storage, "
+"network)."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1478
+msgid "Flag for a normal method."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1481
+msgid "Flag for an editor method."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1484 doc/classes/@GlobalScope.xml:1490
+#: doc/classes/@GlobalScope.xml:1496
+msgid "Deprecated method flag, unused."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1487
+msgid "Flag for a constant method."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1493
+msgid "Flag for a virtual method."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1499
+msgid "Default method flags."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1502
+msgid "Variable is [code]null[/code]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1505
+msgid "Variable is of type [bool]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1508
+msgid "Variable is of type [int]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1511
+msgid "Variable is of type [float] (real)."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1514
+msgid "Variable is of type [String]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1517
+msgid "Variable is of type [Vector2]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1520
+msgid "Variable is of type [Rect2]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1523
+msgid "Variable is of type [Vector3]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1526
+msgid "Variable is of type [Transform2D]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1529
+msgid "Variable is of type [Plane]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1532
+msgid "Variable is of type [Quat]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1535
+msgid "Variable is of type [AABB]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1538
+msgid "Variable is of type [Basis]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1541
+msgid "Variable is of type [Transform]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1544
+msgid "Variable is of type [Color]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1547
+msgid "Variable is of type [NodePath]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1550
+msgid "Variable is of type [RID]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1553
+msgid "Variable is of type [Object]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1556
+msgid "Variable is of type [Dictionary]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1559
+msgid "Variable is of type [Array]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1562
+msgid "Variable is of type [PoolByteArray]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1565
+msgid "Variable is of type [PoolIntArray]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1568
+msgid "Variable is of type [PoolRealArray]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1571
+msgid "Variable is of type [PoolStringArray]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1574
+msgid "Variable is of type [PoolVector2Array]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1577
+msgid "Variable is of type [PoolVector3Array]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1580
+msgid "Variable is of type [PoolColorArray]."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1583
+msgid "Represents the size of the [enum Variant.Type] enum."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1586
+msgid "Equality operator ([code]==[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1589
+msgid "Inequality operator ([code]!=[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1592
+msgid "Less than operator ([code]<[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1595
+msgid "Less than or equal operator ([code]<=[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1598
+msgid "Greater than operator ([code]>[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1601
+msgid "Greater than or equal operator ([code]>=[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1604
+msgid "Addition operator ([code]+[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1607
+msgid "Subtraction operator ([code]-[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1610
+msgid "Multiplication operator ([code]*[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1613
+msgid "Division operator ([code]/[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1616
+msgid "Unary negation operator ([code]-[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1619
+msgid "Unary plus operator ([code]+[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1622
+msgid "Remainder/modulo operator ([code]%[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1625
+msgid "String concatenation operator ([code]+[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1628
+msgid "Left shift operator ([code]<<[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1631
+msgid "Right shift operator ([code]>>[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1634
+msgid "Bitwise AND operator ([code]&[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1637
+msgid "Bitwise OR operator ([code]|[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1640
+msgid "Bitwise XOR operator ([code]^[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1643
+msgid "Bitwise NOT operator ([code]~[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1646
+msgid "Logical AND operator ([code]and[/code] or [code]&&[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1649
+msgid "Logical OR operator ([code]or[/code] or [code]||[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1652
+msgid "Logical XOR operator (not implemented in GDScript)."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1655
+msgid "Logical NOT operator ([code]not[/code] or [code]![/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1658
+msgid "Logical IN operator ([code]in[/code])."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml:1661
+msgid "Represents the size of the [enum Variant.Operator] enum."
+msgstr ""
+
+#: doc/classes/AABB.xml:4
+msgid "Axis-Aligned Bounding Box."
+msgstr ""
+
+#: doc/classes/AABB.xml:7
+msgid ""
+"[AABB] consists of a position, a size, and several utility functions. It is "
+"typically used for fast overlap tests.\n"
+"It uses floating-point coordinates. The 2D counterpart to [AABB] is "
+"[Rect2].\n"
+"[b]Note:[/b] Unlike [Rect2], [AABB] does not have a variant that uses "
+"integer coordinates."
+msgstr ""
+
+#: doc/classes/AABB.xml:12 doc/classes/Basis.xml:13 doc/classes/Plane.xml:10
+#: doc/classes/Rect2.xml:12 doc/classes/Transform.xml:11
+#: doc/classes/Transform2D.xml:11 doc/classes/Vector2.xml:11
+#: doc/classes/Vector3.xml:11
+msgid "https://docs.godotengine.org/en/3.4/tutorials/math/index.html"
+msgstr ""
+
+#: doc/classes/AABB.xml:13 doc/classes/Rect2.xml:13 doc/classes/Vector2.xml:12
+#: doc/classes/Vector3.xml:12
+msgid "https://docs.godotengine.org/en/3.4/tutorials/math/vector_math.html"
+msgstr ""
+
+#: doc/classes/AABB.xml:14 doc/classes/Rect2.xml:14 doc/classes/Vector2.xml:13
+#: doc/classes/Vector3.xml:13
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/math/vectors_advanced.html"
+msgstr ""
+
+#: doc/classes/AABB.xml:22
+msgid "Constructs an [AABB] from a position and size."
+msgstr ""
+
+#: doc/classes/AABB.xml:28
+msgid ""
+"Returns an AABB with equivalent position and size, modified so that the most-"
+"negative corner is the origin and the size is positive."
+msgstr ""
+
+#: doc/classes/AABB.xml:35
+msgid ""
+"Returns [code]true[/code] if this [AABB] completely encloses another one."
+msgstr ""
+
+#: doc/classes/AABB.xml:42
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/AABB.xml:55
+msgid "Returns the volume of the [AABB]."
+msgstr ""
+
+#: doc/classes/AABB.xml:62
+msgid "Gets the position of the 8 endpoints of the [AABB] in space."
+msgstr ""
+
+#: doc/classes/AABB.xml:68
+msgid "Returns the normalized longest axis of the [AABB]."
+msgstr ""
+
+#: doc/classes/AABB.xml:74
+msgid ""
+"Returns the index of the longest axis of the [AABB] (according to "
+"[Vector3]'s [code]AXIS_*[/code] constants)."
+msgstr ""
+
+#: doc/classes/AABB.xml:80
+msgid "Returns the scalar length of the longest axis of the [AABB]."
+msgstr ""
+
+#: doc/classes/AABB.xml:86
+msgid "Returns the normalized shortest axis of the [AABB]."
+msgstr ""
+
+#: doc/classes/AABB.xml:92
+msgid ""
+"Returns the index of the shortest axis of the [AABB] (according to "
+"[Vector3]::AXIS* enum)."
+msgstr ""
+
+#: doc/classes/AABB.xml:98
+msgid "Returns the scalar length of the shortest axis of the [AABB]."
+msgstr ""
+
+#: doc/classes/AABB.xml:105
+msgid ""
+"Returns the support point in a given direction. This is useful for collision "
+"detection algorithms."
+msgstr ""
+
+#: doc/classes/AABB.xml:112
+msgid ""
+"Returns a copy of the [AABB] grown a given amount of units towards all the "
+"sides."
+msgstr ""
+
+#: doc/classes/AABB.xml:118
+msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
+msgstr ""
+
+#: doc/classes/AABB.xml:124
+msgid "Returns [code]true[/code] if the [AABB] is empty."
+msgstr ""
+
+#: doc/classes/AABB.xml:131
+msgid "Returns [code]true[/code] if the [AABB] contains a point."
+msgstr ""
+
+#: doc/classes/AABB.xml:138
+msgid ""
+"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
+"returned on failure."
+msgstr ""
+
+#: doc/classes/AABB.xml:145
+msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
+msgstr ""
+
+#: doc/classes/AABB.xml:152
+msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
+msgstr ""
+
+#: doc/classes/AABB.xml:160
+msgid ""
+"Returns [code]true[/code] if the [AABB] intersects the line segment between "
+"[code]from[/code] and [code]to[/code]."
+msgstr ""
+
+#: doc/classes/AABB.xml:167
+msgid ""
+"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
+"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
+"component."
+msgstr ""
+
+#: doc/classes/AABB.xml:174
+msgid ""
+"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
+msgstr ""
+
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
+msgid ""
+"Ending corner. This is calculated as [code]position + size[/code]. Setting "
+"this value will change the size."
+msgstr ""
+
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
+msgid "Beginning corner. Typically has values lower than [member end]."
+msgstr ""
+
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
+msgid ""
+"Size from [member position] to [member end]. Typically, all components are "
+"positive.\n"
+"If the size is negative, you can use [method abs] to fix it."
+msgstr ""
+
+#: doc/classes/AcceptDialog.xml:4
+msgid "Base dialog for user notification."
+msgstr ""
+
+#: doc/classes/AcceptDialog.xml:7
+msgid ""
+"This dialog is useful for small notifications to the user about an event. It "
+"can only be accepted or closed, with the same result."
+msgstr ""
+
+#: doc/classes/AcceptDialog.xml:18
+msgid ""
+"Adds a button with label [code]text[/code] and a custom [code]action[/code] "
+"to the dialog and returns the created button. [code]action[/code] will be "
+"passed to the [signal custom_action] signal when pressed.\n"
+"If [code]true[/code], [code]right[/code] will place the button to the right "
+"of any sibling buttons.\n"
+"You can use [method remove_button] method to remove a button created with "
+"this method from the dialog."
+msgstr ""
+
+#: doc/classes/AcceptDialog.xml:27
+msgid ""
+"Adds a button with label [code]name[/code] and a cancel action to the dialog "
+"and returns the created button.\n"
+"You can use [method remove_button] method to remove a button created with "
+"this method from the dialog."
+msgstr ""
+
+#: doc/classes/AcceptDialog.xml:34
+msgid ""
+"Returns the label used for built-in text.\n"
+"[b]Warning:[/b] This is a required internal node, removing and freeing it "
+"may cause a crash. If you wish to hide it or any of its children, use their "
+"[member CanvasItem.visible] property."
+msgstr ""
+
+#: doc/classes/AcceptDialog.xml:41
+msgid ""
+"Returns the OK [Button] instance.\n"
+"[b]Warning:[/b] This is a required internal node, removing and freeing it "
+"may cause a crash. If you wish to hide it or any of its children, use their "
+"[member CanvasItem.visible] property."
+msgstr ""
+
+#: doc/classes/AcceptDialog.xml:49
+msgid ""
+"Registers a [LineEdit] in the dialog. When the enter key is pressed, the "
+"dialog will be accepted."
+msgstr ""
+
+#: doc/classes/AcceptDialog.xml:56
+msgid ""
+"Removes the [code]button[/code] from the dialog. Does NOT free the "
+"[code]button[/code]. The [code]button[/code] must be a [Button] added with "
+"[method add_button] or [method add_cancel] method. After removal, pressing "
+"the [code]button[/code] will no longer emit this dialog's [signal "
+"custom_action] signal or cancel this dialog."
+msgstr ""
+
+#: doc/classes/AcceptDialog.xml:62
+msgid "Sets autowrapping for the text in the dialog."
+msgstr ""
+
+#: doc/classes/AcceptDialog.xml:65
+msgid ""
+"If [code]true[/code], the dialog is hidden when the OK button is pressed. "
+"You can set it to [code]false[/code] if you want to do e.g. input validation "
+"when receiving the [signal confirmed] signal, and handle hiding the dialog "
+"in your own logic.\n"
+"[b]Note:[/b] Some nodes derived from this class can have a different default "
+"value, and potentially their own built-in logic overriding this setting. For "
+"example [FileDialog] defaults to [code]false[/code], and has its own input "
+"validation code that is called when you press OK, which eventually hides the "
+"dialog if the input is valid. As such, this property can't be used in "
+"[FileDialog] to disable hiding the dialog when pressing OK."
+msgstr ""
+
+#: doc/classes/AcceptDialog.xml:69
+msgid "The text displayed by the dialog."
+msgstr ""
+
+#: doc/classes/AcceptDialog.xml:76
+msgid "Emitted when the dialog is accepted, i.e. the OK button is pressed."
+msgstr ""
+
+#: doc/classes/AcceptDialog.xml:82
+msgid "Emitted when a custom button is pressed. See [method add_button]."
+msgstr ""
+
+#: doc/classes/AESContext.xml:4
+msgid "Interface to low level AES encryption features."
+msgstr ""
+
+#: doc/classes/AESContext.xml:7
+msgid ""
+"This class provides access to AES encryption/decryption of raw data. Both "
+"AES-ECB and AES-CBC mode are supported.\n"
+"[codeblock]\n"
+"extends Node\n"
+"\n"
+"var aes = AESContext.new()\n"
+"\n"
+"func _ready():\n"
+" var key = \"My secret key!!!\" # Key must be either 16 or 32 bytes.\n"
+" var data = \"My secret text!!\" # Data size must be multiple of 16 "
+"bytes, apply padding if needed.\n"
+" # Encrypt ECB\n"
+" aes.start(AESContext.MODE_ECB_ENCRYPT, key.to_utf8())\n"
+" var encrypted = aes.update(data.to_utf8())\n"
+" aes.finish()\n"
+" # Decrypt ECB\n"
+" aes.start(AESContext.MODE_ECB_DECRYPT, key.to_utf8())\n"
+" var decrypted = aes.update(encrypted)\n"
+" aes.finish()\n"
+" # Check ECB\n"
+" assert(decrypted == data.to_utf8())\n"
+"\n"
+" var iv = \"My secret iv!!!!\" # IV must be of exactly 16 bytes.\n"
+" # Encrypt CBC\n"
+" aes.start(AESContext.MODE_CBC_ENCRYPT, key.to_utf8(), iv.to_utf8())\n"
+" encrypted = aes.update(data.to_utf8())\n"
+" aes.finish()\n"
+" # Decrypt CBC\n"
+" aes.start(AESContext.MODE_CBC_DECRYPT, key.to_utf8(), iv.to_utf8())\n"
+" decrypted = aes.update(encrypted)\n"
+" aes.finish()\n"
+" # Check CBC\n"
+" assert(decrypted == data.to_utf8())\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/AESContext.xml:46
+msgid "Close this AES context so it can be started again. See [method start]."
+msgstr ""
+
+#: doc/classes/AESContext.xml:52
+msgid ""
+"Get the current IV state for this context (IV gets updated when calling "
+"[method update]). You normally don't need this function.\n"
+"[b]Note:[/b] This function only makes sense when the context is started with "
+"[constant MODE_CBC_ENCRYPT] or [constant MODE_CBC_DECRYPT]."
+msgstr ""
+
+#: doc/classes/AESContext.xml:62
+msgid ""
+"Start the AES context in the given [code]mode[/code]. A [code]key[/code] of "
+"either 16 or 32 bytes must always be provided, while an [code]iv[/code] "
+"(initialization vector) of exactly 16 bytes, is only needed when [code]mode[/"
+"code] is either [constant MODE_CBC_ENCRYPT] or [constant MODE_CBC_DECRYPT]."
+msgstr ""
+
+#: doc/classes/AESContext.xml:69
+msgid ""
+"Run the desired operation for this AES context. Will return a "
+"[PoolByteArray] containing the result of encrypting (or decrypting) the "
+"given [code]src[/code]. See [method start] for mode of operation.\n"
+"[b]Note:[/b] The size of [code]src[/code] must be a multiple of 16. Apply "
+"some padding if needed."
+msgstr ""
+
+#: doc/classes/AESContext.xml:76
+msgid "AES electronic codebook encryption mode."
+msgstr ""
+
+#: doc/classes/AESContext.xml:79
+msgid "AES electronic codebook decryption mode."
+msgstr ""
+
+#: doc/classes/AESContext.xml:82
+msgid "AES cipher blocker chaining encryption mode."
+msgstr ""
+
+#: doc/classes/AESContext.xml:85
+msgid "AES cipher blocker chaining decryption mode."
+msgstr ""
+
+#: doc/classes/AESContext.xml:88
+msgid "Maximum value for the mode enum."
+msgstr ""
+
+#: doc/classes/AnimatedSprite.xml:4
+msgid "Sprite node that can use multiple textures for animation."
+msgstr ""
+
+#: doc/classes/AnimatedSprite.xml:7
+msgid ""
+"Animations are created using a [SpriteFrames] resource, which can be "
+"configured in the editor via the SpriteFrames panel.\n"
+"[b]Note:[/b] You can associate a set of normal maps by creating additional "
+"[SpriteFrames] resources with a [code]_normal[/code] suffix. For example, "
+"having 2 [SpriteFrames] resources [code]run[/code] and [code]run_normal[/"
+"code] will make it so the [code]run[/code] animation uses the normal map."
+msgstr ""
+
+#: doc/classes/AnimatedSprite.xml:11 doc/classes/AnimatedSprite3D.xml:10
+#: doc/classes/AnimationPlayer.xml:13
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/2d/2d_sprite_animation.html"
+msgstr ""
+
+#: doc/classes/AnimatedSprite.xml:12 doc/classes/Area2D.xml:11
+#: doc/classes/AudioStreamPlayer.xml:12 doc/classes/Button.xml:24
+#: doc/classes/CanvasLayer.xml:12 doc/classes/CollisionShape2D.xml:11
+#: doc/classes/ColorRect.xml:10 doc/classes/Input.xml:11
+#: doc/classes/InputEvent.xml:12 doc/classes/InputEventAction.xml:11
+#: doc/classes/Label.xml:12 doc/classes/Particles2D.xml:15
+#: doc/classes/Timer.xml:11 doc/classes/VisibilityNotifier2D.xml:12
+msgid "https://godotengine.org/asset-library/asset/515"
+msgstr ""
+
+#: doc/classes/AnimatedSprite.xml:18 doc/classes/AnimatedSprite3D.xml:16
+msgid "Returns [code]true[/code] if an animation is currently being played."
+msgstr ""
+
+#: doc/classes/AnimatedSprite.xml:26
+msgid ""
+"Plays the animation named [code]anim[/code]. If no [code]anim[/code] is "
+"provided, the current animation is played. If [code]backwards[/code] is "
+"[code]true[/code], the animation will be played in reverse."
+msgstr ""
+
+#: doc/classes/AnimatedSprite.xml:32 doc/classes/AnimatedSprite3D.xml:29
+msgid "Stops the current animation (does not reset the frame counter)."
+msgstr ""
+
+#: doc/classes/AnimatedSprite.xml:38 doc/classes/AnimatedSprite3D.xml:35
+msgid ""
+"The current animation from the [code]frames[/code] resource. If this value "
+"changes, the [code]frame[/code] counter is reset."
+msgstr ""
+
+#: doc/classes/AnimatedSprite.xml:41 doc/classes/SpriteBase3D.xml:48
+msgid "If [code]true[/code], texture will be centered."
+msgstr ""
+
+#: doc/classes/AnimatedSprite.xml:44 doc/classes/Sprite.xml:39
+#: doc/classes/SpriteBase3D.xml:54 doc/classes/TextureButton.xml:21
+#: doc/classes/TextureRect.xml:20
+msgid "If [code]true[/code], texture is flipped horizontally."
+msgstr ""
+
+#: doc/classes/AnimatedSprite.xml:47 doc/classes/Sprite.xml:42
+#: doc/classes/SpriteBase3D.xml:57 doc/classes/TextureButton.xml:24
+#: doc/classes/TextureRect.xml:23
+msgid "If [code]true[/code], texture is flipped vertically."
+msgstr ""
+
+#: doc/classes/AnimatedSprite.xml:50 doc/classes/AnimatedSprite3D.xml:38
+msgid "The displayed animation frame's index."
+msgstr ""
+
+#: doc/classes/AnimatedSprite.xml:53 doc/classes/AnimatedSprite3D.xml:41
+msgid "The [SpriteFrames] resource containing the animation(s)."
+msgstr ""
+
+#: doc/classes/AnimatedSprite.xml:56 doc/classes/Sprite.xml:58
+#: doc/classes/SpriteBase3D.xml:63
+msgid "The texture's drawing offset."
+msgstr ""
+
+#: doc/classes/AnimatedSprite.xml:59 doc/classes/AnimatedSprite3D.xml:44
+msgid "If [code]true[/code], the [member animation] is currently playing."
+msgstr ""
+
+#: doc/classes/AnimatedSprite.xml:62
+msgid "The animation speed is multiplied by this value."
+msgstr ""
+
+#: doc/classes/AnimatedSprite.xml:68 doc/classes/AnimatedSprite3D.xml:50
+msgid ""
+"Emitted when the animation is finished (when it plays the last frame). If "
+"the animation is looping, this signal is emitted every time the last frame "
+"is drawn."
+msgstr ""
+
+#: doc/classes/AnimatedSprite.xml:73 doc/classes/AnimatedSprite3D.xml:55
+msgid "Emitted when [member frame] changed."
+msgstr ""
+
+#: doc/classes/AnimatedSprite3D.xml:4
+msgid ""
+"2D sprite node in 3D world, that can use multiple 2D textures for animation."
+msgstr ""
+
+#: doc/classes/AnimatedSprite3D.xml:7
+msgid ""
+"Animations are created using a [SpriteFrames] resource, which can be "
+"configured in the editor via the SpriteFrames panel."
+msgstr ""
+
+#: doc/classes/AnimatedSprite3D.xml:23
+msgid ""
+"Plays the animation named [code]anim[/code]. If no [code]anim[/code] is "
+"provided, the current animation is played."
+msgstr ""
+
+#: doc/classes/AnimatedTexture.xml:4
+msgid "Proxy texture for simple frame-based animations."
+msgstr ""
+
+#: doc/classes/AnimatedTexture.xml:7
+msgid ""
+"[AnimatedTexture] is a resource format for frame-based animations, where "
+"multiple textures can be chained automatically with a predefined delay for "
+"each frame. Unlike [AnimationPlayer] or [AnimatedSprite], it isn't a [Node], "
+"but has the advantage of being usable anywhere a [Texture] resource can be "
+"used, e.g. in a [TileSet].\n"
+"The playback of the animation is controlled by the [member fps] property as "
+"well as each frame's optional delay (see [method set_frame_delay]). The "
+"animation loops, i.e. it will restart at frame 0 automatically after playing "
+"the last frame.\n"
+"[AnimatedTexture] currently requires all frame textures to have the same "
+"size, otherwise the bigger ones will be cropped to match the smallest one.\n"
+"[b]Note:[/b] AnimatedTexture doesn't support using [AtlasTexture]s. Each "
+"frame needs to be a separate [Texture]."
+msgstr ""
+
+#: doc/classes/AnimatedTexture.xml:19
+msgid "Returns the given frame's delay value."
+msgstr ""
+
+#: doc/classes/AnimatedTexture.xml:26
+msgid "Returns the given frame's [Texture]."
+msgstr ""
+
+#: doc/classes/AnimatedTexture.xml:34
+msgid ""
+"Sets an additional delay (in seconds) between this frame and the next one, "
+"that will be added to the time interval defined by [member fps]. By default, "
+"frames have no delay defined. If a delay value is defined, the final time "
+"interval between this frame and the next will be [code]1.0 / fps + delay[/"
+"code].\n"
+"For example, for an animation with 3 frames, 2 FPS and a frame delay on the "
+"second frame of 1.2, the resulting playback will be:\n"
+"[codeblock]\n"
+"Frame 0: 0.5 s (1 / fps)\n"
+"Frame 1: 1.7 s (1 / fps + 1.2)\n"
+"Frame 2: 0.5 s (1 / fps)\n"
+"Total duration: 2.7 s\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/AnimatedTexture.xml:49
+msgid ""
+"Assigns a [Texture] to the given frame. Frame IDs start at 0, so the first "
+"frame has ID 0, and the last frame of the animation has ID [member frames] - "
+"1.\n"
+"You can define any number of textures up to [constant MAX_FRAMES], but keep "
+"in mind that only frames from 0 to [member frames] - 1 will be part of the "
+"animation."
+msgstr ""
+
+#: doc/classes/AnimatedTexture.xml:56
+msgid "Sets the currently visible frame of the texture."
+msgstr ""
+
+#: doc/classes/AnimatedTexture.xml:60
+msgid ""
+"Animation speed in frames per second. This value defines the default time "
+"interval between two frames of the animation, and thus the overall duration "
+"of the animation loop based on the [member frames] property. A value of 0 "
+"means no predefined number of frames per second, the animation will play "
+"according to each frame's frame delay (see [method set_frame_delay]).\n"
+"For example, an animation with 8 frames, no frame delay and a [code]fps[/"
+"code] value of 2 will run for 4 seconds, with each frame lasting 0.5 seconds."
+msgstr ""
+
+#: doc/classes/AnimatedTexture.xml:64
+msgid ""
+"Number of frames to use in the animation. While you can create the frames "
+"independently with [method set_frame_texture], you need to set this value "
+"for the animation to take new frames into account. The maximum number of "
+"frames is [constant MAX_FRAMES]."
+msgstr ""
+
+#: doc/classes/AnimatedTexture.xml:67
+msgid ""
+"If [code]true[/code], the animation will only play once and will not loop "
+"back to the first frame after reaching the end. Note that reaching the end "
+"will not set [member pause] to [code]true[/code]."
+msgstr ""
+
+#: doc/classes/AnimatedTexture.xml:70
+msgid ""
+"If [code]true[/code], the animation will pause where it currently is (i.e. "
+"at [member current_frame]). The animation will continue from where it was "
+"paused when changing this property to [code]false[/code]."
+msgstr ""
+
+#: doc/classes/AnimatedTexture.xml:75
+msgid ""
+"The maximum number of frames supported by [AnimatedTexture]. If you need "
+"more frames in your animation, use [AnimationPlayer] or [AnimatedSprite]."
+msgstr ""
+
+#: doc/classes/Animation.xml:4
+msgid "Contains data used to animate everything in the engine."
+msgstr ""
+
+#: doc/classes/Animation.xml:7
+msgid ""
+"An Animation resource contains data used to animate everything in the "
+"engine. Animations are divided into tracks, and each track must be linked to "
+"a node. The state of that node can be changed through time, by adding timed "
+"keys (events) to the track.\n"
+"[codeblock]\n"
+"# This creates an animation that makes the node \"Enemy\" move to the right "
+"by\n"
+"# 100 pixels in 0.5 seconds.\n"
+"var animation = Animation.new()\n"
+"var track_index = animation.add_track(Animation.TYPE_VALUE)\n"
+"animation.track_set_path(track_index, \"Enemy:position:x\")\n"
+"animation.track_insert_key(track_index, 0.0, 0)\n"
+"animation.track_insert_key(track_index, 0.5, 100)\n"
+"[/codeblock]\n"
+"Animations are just data containers, and must be added to nodes such as an "
+"[AnimationPlayer] or [AnimationTreePlayer] to be played back. Animation "
+"tracks have different types, each with its own set of dedicated methods. "
+"Check [enum TrackType] to see available types."
+msgstr ""
+
+#: doc/classes/Animation.xml:20 doc/classes/AnimationPlayer.xml:12
+msgid "https://docs.godotengine.org/en/3.4/tutorials/animation/index.html"
+msgstr ""
+
+#: doc/classes/Animation.xml:28
+msgid "Adds a track to the Animation."
+msgstr ""
+
+#: doc/classes/Animation.xml:36
+msgid ""
+"Returns the animation name at the key identified by [code]key_idx[/code]. "
+"The [code]track_idx[/code] must be the index of an Animation Track."
+msgstr ""
+
+#: doc/classes/Animation.xml:45
+msgid ""
+"Inserts a key with value [code]animation[/code] at the given [code]time[/"
+"code] (in seconds). The [code]track_idx[/code] must be the index of an "
+"Animation Track."
+msgstr ""
+
+#: doc/classes/Animation.xml:54
+msgid ""
+"Sets the key identified by [code]key_idx[/code] to value [code]animation[/"
+"code]. The [code]track_idx[/code] must be the index of an Animation Track."
+msgstr ""
+
+#: doc/classes/Animation.xml:62
+msgid ""
+"Returns the end offset of the key identified by [code]key_idx[/code]. The "
+"[code]track_idx[/code] must be the index of an Audio Track.\n"
+"End offset is the number of seconds cut off at the ending of the audio "
+"stream."
+msgstr ""
+
+#: doc/classes/Animation.xml:71
+msgid ""
+"Returns the start offset of the key identified by [code]key_idx[/code]. The "
+"[code]track_idx[/code] must be the index of an Audio Track.\n"
+"Start offset is the number of seconds cut off at the beginning of the audio "
+"stream."
+msgstr ""
+
+#: doc/classes/Animation.xml:80
+msgid ""
+"Returns the audio stream of the key identified by [code]key_idx[/code]. The "
+"[code]track_idx[/code] must be the index of an Audio Track."
+msgstr ""
+
+#: doc/classes/Animation.xml:91
+msgid ""
+"Inserts an Audio Track key at the given [code]time[/code] in seconds. The "
+"[code]track_idx[/code] must be the index of an Audio Track.\n"
+"[code]stream[/code] is the [AudioStream] resource to play. "
+"[code]start_offset[/code] is the number of seconds cut off at the beginning "
+"of the audio stream, while [code]end_offset[/code] is at the ending."
+msgstr ""
+
+#: doc/classes/Animation.xml:101
+msgid ""
+"Sets the end offset of the key identified by [code]key_idx[/code] to value "
+"[code]offset[/code]. The [code]track_idx[/code] must be the index of an "
+"Audio Track."
+msgstr ""
+
+#: doc/classes/Animation.xml:110
+msgid ""
+"Sets the start offset of the key identified by [code]key_idx[/code] to value "
+"[code]offset[/code]. The [code]track_idx[/code] must be the index of an "
+"Audio Track."
+msgstr ""
+
+#: doc/classes/Animation.xml:119
+msgid ""
+"Sets the stream of the key identified by [code]key_idx[/code] to value "
+"[code]stream[/code]. The [code]track_idx[/code] must be the index of an "
+"Audio Track."
+msgstr ""
+
+#: doc/classes/Animation.xml:127
+msgid ""
+"Returns the in handle of the key identified by [code]key_idx[/code]. The "
+"[code]track_idx[/code] must be the index of a Bezier Track."
+msgstr ""
+
+#: doc/classes/Animation.xml:135
+msgid ""
+"Returns the out handle of the key identified by [code]key_idx[/code]. The "
+"[code]track_idx[/code] must be the index of a Bezier Track."
+msgstr ""
+
+#: doc/classes/Animation.xml:143
+msgid ""
+"Returns the value of the key identified by [code]key_idx[/code]. The "
+"[code]track_idx[/code] must be the index of a Bezier Track."
+msgstr ""
+
+#: doc/classes/Animation.xml:154
+msgid ""
+"Inserts a Bezier Track key at the given [code]time[/code] in seconds. The "
+"[code]track_idx[/code] must be the index of a Bezier Track.\n"
+"[code]in_handle[/code] is the left-side weight of the added Bezier curve "
+"point, [code]out_handle[/code] is the right-side one, while [code]value[/"
+"code] is the actual value at this point."
+msgstr ""
+
+#: doc/classes/Animation.xml:163
+msgid ""
+"Returns the interpolated value at the given [code]time[/code] (in seconds). "
+"The [code]track_idx[/code] must be the index of a Bezier Track."
+msgstr ""
+
+#: doc/classes/Animation.xml:172
+msgid ""
+"Sets the in handle of the key identified by [code]key_idx[/code] to value "
+"[code]in_handle[/code]. The [code]track_idx[/code] must be the index of a "
+"Bezier Track."
+msgstr ""
+
+#: doc/classes/Animation.xml:181
+msgid ""
+"Sets the out handle of the key identified by [code]key_idx[/code] to value "
+"[code]out_handle[/code]. The [code]track_idx[/code] must be the index of a "
+"Bezier Track."
+msgstr ""
+
+#: doc/classes/Animation.xml:190
+msgid ""
+"Sets the value of the key identified by [code]key_idx[/code] to the given "
+"value. The [code]track_idx[/code] must be the index of a Bezier Track."
+msgstr ""
+
+#: doc/classes/Animation.xml:196
+msgid "Clear the animation (clear all tracks and reset all)."
+msgstr ""
+
+#: doc/classes/Animation.xml:204
+msgid ""
+"Adds a new track that is a copy of the given track from [code]to_animation[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Animation.xml:211
+msgid ""
+"Returns the index of the specified track. If the track is not found, return "
+"-1."
+msgstr ""
+
+#: doc/classes/Animation.xml:217
+msgid "Returns the amount of tracks in the animation."
+msgstr ""
+
+#: doc/classes/Animation.xml:226
+msgid ""
+"Returns all the key indices of a method track, given a position and delta "
+"time."
+msgstr ""
+
+#: doc/classes/Animation.xml:234
+msgid "Returns the method name of a method track."
+msgstr ""
+
+#: doc/classes/Animation.xml:242
+msgid ""
+"Returns the arguments values to be called on a method track for a given key "
+"in a given track."
+msgstr ""
+
+#: doc/classes/Animation.xml:249
+msgid "Removes a track by specifying the track index."
+msgstr ""
+
+#: doc/classes/Animation.xml:258
+msgid ""
+"Finds the key index by time in a given track. Optionally, only find it if "
+"the exact time is given."
+msgstr ""
+
+#: doc/classes/Animation.xml:265
+msgid ""
+"Returns [code]true[/code] if the track at [code]idx[/code] wraps the "
+"interpolation loop. New tracks wrap the interpolation loop by default."
+msgstr ""
+
+#: doc/classes/Animation.xml:272
+msgid "Returns the interpolation type of a given track."
+msgstr ""
+
+#: doc/classes/Animation.xml:279
+msgid "Returns the amount of keys in a given track."
+msgstr ""
+
+#: doc/classes/Animation.xml:287
+msgid "Returns the time at which the key is located."
+msgstr ""
+
+#: doc/classes/Animation.xml:295
+msgid ""
+"Returns the transition curve (easing) for a specific key (see the built-in "
+"math function [method @GDScript.ease])."
+msgstr ""
+
+#: doc/classes/Animation.xml:303
+msgid "Returns the value of a given key in a given track."
+msgstr ""
+
+#: doc/classes/Animation.xml:310
+msgid ""
+"Gets the path of a track. For more information on the path format, see "
+"[method track_set_path]."
+msgstr ""
+
+#: doc/classes/Animation.xml:317
+msgid "Gets the type of a track."
+msgstr ""
+
+#: doc/classes/Animation.xml:327
+msgid "Insert a generic key in a given track."
+msgstr ""
+
+#: doc/classes/Animation.xml:334
+msgid ""
+"Returns [code]true[/code] if the track at index [code]idx[/code] is enabled."
+msgstr ""
+
+#: doc/classes/Animation.xml:341
+msgid ""
+"Returns [code]true[/code] if the given track is imported. Else, return "
+"[code]false[/code]."
+msgstr ""
+
+#: doc/classes/Animation.xml:348
+msgid "Moves a track down."
+msgstr ""
+
+#: doc/classes/Animation.xml:356
+msgid ""
+"Changes the index position of track [code]idx[/code] to the one defined in "
+"[code]to_idx[/code]."
+msgstr ""
+
+#: doc/classes/Animation.xml:363
+msgid "Moves a track up."
+msgstr ""
+
+#: doc/classes/Animation.xml:371
+msgid "Removes a key by index in a given track."
+msgstr ""
+
+#: doc/classes/Animation.xml:379
+msgid "Removes a key by position (seconds) in a given track."
+msgstr ""
+
+#: doc/classes/Animation.xml:387
+msgid "Enables/disables the given track. Tracks are enabled by default."
+msgstr ""
+
+#: doc/classes/Animation.xml:395
+msgid "Sets the given track as imported or not."
+msgstr ""
+
+#: doc/classes/Animation.xml:403
+msgid ""
+"If [code]true[/code], the track at [code]idx[/code] wraps the interpolation "
+"loop."
+msgstr ""
+
+#: doc/classes/Animation.xml:411
+msgid "Sets the interpolation type of a given track."
+msgstr ""
+
+#: doc/classes/Animation.xml:420
+msgid "Sets the time of an existing key."
+msgstr ""
+
+#: doc/classes/Animation.xml:429
+msgid ""
+"Sets the transition curve (easing) for a specific key (see the built-in math "
+"function [method @GDScript.ease])."
+msgstr ""
+
+#: doc/classes/Animation.xml:438
+msgid "Sets the value of an existing key."
+msgstr ""
+
+#: doc/classes/Animation.xml:446
+msgid ""
+"Sets the path of a track. Paths must be valid scene-tree paths to a node and "
+"must be specified starting from the parent node of the node that will "
+"reproduce the animation. Tracks that control properties or bones must append "
+"their name after the path, separated by [code]\":\"[/code].\n"
+"For example, [code]\"character/skeleton:ankle\"[/code] or [code]\"character/"
+"mesh:transform/local\"[/code]."
+msgstr ""
+
+#: doc/classes/Animation.xml:455
+msgid ""
+"Swaps the track [code]idx[/code]'s index position with the track "
+"[code]with_idx[/code]."
+msgstr ""
+
+#: doc/classes/Animation.xml:466
+msgid "Insert a transform key for a transform track."
+msgstr ""
+
+#: doc/classes/Animation.xml:474
+msgid ""
+"Returns the interpolated value of a transform track at a given time (in "
+"seconds). An array consisting of 3 elements: position ([Vector3]), rotation "
+"([Quat]) and scale ([Vector3])."
+msgstr ""
+
+#: doc/classes/Animation.xml:483
+msgid ""
+"Returns all the key indices of a value track, given a position and delta "
+"time."
+msgstr ""
+
+#: doc/classes/Animation.xml:490
+msgid "Returns the update mode of a value track."
+msgstr ""
+
+#: doc/classes/Animation.xml:498
+msgid ""
+"Returns the interpolated value at the given time (in seconds). The "
+"[code]track_idx[/code] must be the index of a value track."
+msgstr ""
+
+#: doc/classes/Animation.xml:506
+msgid "Sets the update mode (see [enum UpdateMode]) of a value track."
+msgstr ""
+
+#: doc/classes/Animation.xml:512
+msgid ""
+"The total length of the animation (in seconds).\n"
+"[b]Note:[/b] Length is not delimited by the last key, as this one may be "
+"before or after the end to ensure correct interpolation and looping."
+msgstr ""
+
+#: doc/classes/Animation.xml:516
+msgid ""
+"A flag indicating that the animation must loop. This is used for correct "
+"interpolation of animation cycles, and for hinting the player that it must "
+"restart the animation."
+msgstr ""
+
+#: doc/classes/Animation.xml:519
+msgid "The animation step value."
+msgstr ""
+
+#: doc/classes/Animation.xml:525
+msgid ""
+"Emitted when there's a change in the list of tracks, e.g. tracks are added, "
+"moved or have changed paths."
+msgstr ""
+
+#: doc/classes/Animation.xml:531
+msgid ""
+"Value tracks set values in node properties, but only those which can be "
+"Interpolated."
+msgstr ""
+
+#: doc/classes/Animation.xml:534
+msgid ""
+"Transform tracks are used to change node local transforms or skeleton pose "
+"bones. Transitions are interpolated."
+msgstr ""
+
+#: doc/classes/Animation.xml:537
+msgid "Method tracks call functions with given arguments per key."
+msgstr ""
+
+#: doc/classes/Animation.xml:540
+msgid ""
+"Bezier tracks are used to interpolate a value using custom curves. They can "
+"also be used to animate sub-properties of vectors and colors (e.g. alpha "
+"value of a [Color])."
+msgstr ""
+
+#: doc/classes/Animation.xml:543
+msgid ""
+"Audio tracks are used to play an audio stream with either type of "
+"[AudioStreamPlayer]. The stream can be trimmed and previewed in the "
+"animation."
+msgstr ""
+
+#: doc/classes/Animation.xml:546
+msgid "Animation tracks play animations in other [AnimationPlayer] nodes."
+msgstr ""
+
+#: doc/classes/Animation.xml:549
+msgid "No interpolation (nearest value)."
+msgstr ""
+
+#: doc/classes/Animation.xml:552
+msgid "Linear interpolation."
+msgstr ""
+
+#: doc/classes/Animation.xml:555
+msgid "Cubic interpolation."
+msgstr ""
+
+#: doc/classes/Animation.xml:558
+msgid "Update between keyframes."
+msgstr ""
+
+#: doc/classes/Animation.xml:561
+msgid "Update at the keyframes and hold the value."
+msgstr ""
+
+#: doc/classes/Animation.xml:564
+msgid "Update at the keyframes."
+msgstr ""
+
+#: doc/classes/Animation.xml:567
+msgid ""
+"Same as linear interpolation, but also interpolates from the current value "
+"(i.e. dynamically at runtime) if the first key isn't at 0 seconds."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:4
+msgid "Base resource for [AnimationTree] nodes."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:7
+msgid ""
+"Base resource for [AnimationTree] nodes. In general, it's not used directly, "
+"but you can create custom ones with custom blending formulas.\n"
+"Inherit this when creating nodes mainly for use in [AnimationNodeBlendTree], "
+"otherwise [AnimationRootNode] should be used instead."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:11 doc/classes/AnimationNodeAdd2.xml:10
+#: doc/classes/AnimationNodeAdd3.xml:14
+#: doc/classes/AnimationNodeAnimation.xml:10
+#: doc/classes/AnimationNodeBlend2.xml:10
+#: doc/classes/AnimationNodeBlend3.xml:14
+#: doc/classes/AnimationNodeBlendSpace1D.xml:13
+#: doc/classes/AnimationNodeBlendSpace2D.xml:12
+#: doc/classes/AnimationNodeBlendTree.xml:10
+#: doc/classes/AnimationNodeOneShot.xml:10
+#: doc/classes/AnimationNodeOutput.xml:9
+#: doc/classes/AnimationNodeStateMachine.xml:15
+#: doc/classes/AnimationNodeStateMachinePlayback.xml:15
+#: doc/classes/AnimationNodeStateMachineTransition.xml:8
+#: doc/classes/AnimationNodeTimeScale.xml:10
+#: doc/classes/AnimationNodeTimeSeek.xml:21
+#: doc/classes/AnimationNodeTransition.xml:10 doc/classes/AnimationTree.xml:11
+#: doc/classes/AnimationTreePlayer.xml:12
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/animation/animation_tree.html"
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:18
+msgid ""
+"Adds an input to the node. This is only useful for nodes created for use in "
+"an [AnimationNodeBlendTree]."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:29
+msgid ""
+"Blend an animation by [code]blend[/code] amount (name must be valid in the "
+"linked [AnimationPlayer]). A [code]time[/code] and [code]delta[/code] may be "
+"passed, as well as whether [code]seek[/code] happened."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:41
+msgid ""
+"Blend an input. This is only useful for nodes created for an "
+"[AnimationNodeBlendTree]. The [code]time[/code] parameter is a relative "
+"delta, unless [code]seek[/code] is [code]true[/code], in which case it is "
+"absolute. A filter mode may be optionally passed (see [enum FilterAction] "
+"for options)."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:54
+msgid ""
+"Blend another animation node (in case this node contains children animation "
+"nodes). This function is only useful if you inherit from [AnimationRootNode] "
+"instead, else editors will not display your node for addition."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:60
+msgid "Gets the text caption for this node (used by some editors)."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:67
+msgid ""
+"Gets a child node by index (used by editors inheriting from "
+"[AnimationRootNode])."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:73
+msgid ""
+"Gets all children nodes in order as a [code]name: node[/code] dictionary. "
+"Only useful when inheriting [AnimationRootNode]."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:79
+msgid ""
+"Amount of inputs in this node, only useful for nodes that go into "
+"[AnimationNodeBlendTree]."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:86
+msgid "Gets the name of an input by index."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:93
+msgid ""
+"Gets the value of a parameter. Parameters are custom local memory used for "
+"your nodes, given a resource can be reused in multiple trees."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:100
+msgid ""
+"Gets the default value of a parameter. Parameters are custom local memory "
+"used for your nodes, given a resource can be reused in multiple trees."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:106
+msgid ""
+"Gets the property information for parameter. Parameters are custom local "
+"memory used for your nodes, given a resource can be reused in multiple "
+"trees. Format is similar to [method Object.get_property_list]."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:112
+msgid ""
+"Returns [code]true[/code] whether you want the blend tree editor to display "
+"filter editing on this node."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:119
+msgid "Returns [code]true[/code] whether a given path is filtered."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:127
+msgid ""
+"User-defined callback called when a custom node is processed. The "
+"[code]time[/code] parameter is a relative delta, unless [code]seek[/code] is "
+"[code]true[/code], in which case it is absolute.\n"
+"Here, call the [method blend_input], [method blend_node] or [method "
+"blend_animation] functions. You can also use [method get_parameter] and "
+"[method set_parameter] to modify local memory.\n"
+"This function should return the time left for the current animation to "
+"finish (if unsure, pass the value from the main blend being called)."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:136
+msgid "Removes an input, call this only when inactive."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:144
+msgid "Adds or removes a path for the filter."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:152
+msgid ""
+"Sets a custom parameter. These are used as local storage, because resources "
+"can be reused across the tree or scenes."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:158
+msgid "If [code]true[/code], filtering is enabled."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:164
+msgid "Called when the node was removed from the graph."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:169
+msgid ""
+"Emitted by nodes that inherit from this class and that have an internal tree "
+"when one of their nodes changes. The nodes that emit this signal are "
+"[AnimationNodeBlendSpace1D], [AnimationNodeBlendSpace2D], "
+"[AnimationNodeStateMachine], and [AnimationNodeBlendTree]."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:175
+msgid "Do not use filtering."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:178
+msgid "Paths matching the filter will be allowed to pass."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:181
+msgid "Paths matching the filter will be discarded."
+msgstr ""
+
+#: doc/classes/AnimationNode.xml:184
+msgid "Paths matching the filter will be blended (by the blend value)."
+msgstr ""
+
+#: doc/classes/AnimationNodeAdd2.xml:4
+msgid "Blends two animations additively inside of an [AnimationNodeBlendTree]."
+msgstr ""
+
+#: doc/classes/AnimationNodeAdd2.xml:7
+msgid ""
+"A resource to add to an [AnimationNodeBlendTree]. Blends two animations "
+"additively based on an amount value in the [code][0.0, 1.0][/code] range."
+msgstr ""
+
+#: doc/classes/AnimationNodeAdd2.xml:16 doc/classes/AnimationNodeAdd3.xml:21
+#: doc/classes/AnimationNodeBlend2.xml:18
+#: doc/classes/AnimationNodeBlend3.xml:20
+msgid ""
+"If [code]true[/code], sets the [code]optimization[/code] to [code]false[/"
+"code] when calling [method AnimationNode.blend_input], forcing the blended "
+"animations to update every frame."
+msgstr ""
+
+#: doc/classes/AnimationNodeAdd3.xml:4
+msgid ""
+"Blends two of three animations additively inside of an "
+"[AnimationNodeBlendTree]."
+msgstr ""
+
+#: doc/classes/AnimationNodeAdd3.xml:7
+msgid ""
+"A resource to add to an [AnimationNodeBlendTree]. Blends two animations "
+"together additively out of three based on a value in the [code][-1.0, 1.0][/"
+"code] range.\n"
+"This node has three inputs:\n"
+"- The base animation to add to\n"
+"- A -add animation to blend with when the blend amount is in the [code]"
+"[-1.0, 0.0][/code] range.\n"
+"- A +add animation to blend with when the blend amount is in the [code][0.0, "
+"1.0][/code] range"
+msgstr ""
+
+#: doc/classes/AnimationNodeAdd3.xml:15
+#: doc/classes/AnimationNodeAnimation.xml:12
+#: doc/classes/AnimationNodeBlend2.xml:12
+#: doc/classes/AnimationNodeBlendSpace2D.xml:13
+#: doc/classes/AnimationNodeOneShot.xml:11
+#: doc/classes/AnimationNodeOutput.xml:11
+#: doc/classes/AnimationNodeTransition.xml:12
+#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
+#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
+#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
+#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
+#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
+#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
+#: doc/classes/Quat.xml:13 doc/classes/Skeleton.xml:13
+#: doc/classes/SpotLight.xml:12 doc/classes/StaticBody.xml:12
+#: doc/classes/WorldEnvironment.xml:15
+msgid "https://godotengine.org/asset-library/asset/678"
+msgstr ""
+
+#: doc/classes/AnimationNodeAnimation.xml:4
+msgid "Input animation to use in an [AnimationNodeBlendTree]."
+msgstr ""
+
+#: doc/classes/AnimationNodeAnimation.xml:7
+msgid ""
+"A resource to add to an [AnimationNodeBlendTree]. Only features one output "
+"set using the [member animation] property. Use it as an input for "
+"[AnimationNode] that blend animations together."
+msgstr ""
+
+#: doc/classes/AnimationNodeAnimation.xml:11
+#: doc/classes/AnimationNodeBlend2.xml:11
+#: doc/classes/AnimationNodeOutput.xml:10
+#: doc/classes/AnimationNodeTimeScale.xml:11
+#: doc/classes/AnimationNodeTransition.xml:11 doc/classes/Area.xml:10
+#: doc/classes/Basis.xml:17 doc/classes/BoxShape.xml:12
+#: doc/classes/CollisionShape.xml:12 modules/gridmap/doc_classes/GridMap.xml:15
+#: doc/classes/KinematicBody.xml:14 doc/classes/Mesh.xml:12
+#: doc/classes/MeshInstance.xml:12 doc/classes/MeshLibrary.xml:11
+#: doc/classes/ProjectSettings.xml:14 doc/classes/Transform.xml:15
+msgid "https://godotengine.org/asset-library/asset/125"
+msgstr ""
+
+#: doc/classes/AnimationNodeAnimation.xml:18
+msgid ""
+"Animation to use as an output. It is one of the animations provided by "
+"[member AnimationTree.anim_player]."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlend2.xml:4
+msgid "Blends two animations linearly inside of an [AnimationNodeBlendTree]."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlend2.xml:7
+msgid ""
+"A resource to add to an [AnimationNodeBlendTree]. Blends two animations "
+"linearly based on an amount value in the [code][0.0, 1.0][/code] range."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlend3.xml:4
+msgid ""
+"Blends two of three animations linearly inside of an "
+"[AnimationNodeBlendTree]."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlend3.xml:7
+msgid ""
+"A resource to add to an [AnimationNodeBlendTree]. Blends two animations "
+"together linearly out of three based on a value in the [code][-1.0, 1.0][/"
+"code] range.\n"
+"This node has three inputs:\n"
+"- The base animation\n"
+"- A -blend animation to blend with when the blend amount is in the [code]"
+"[-1.0, 0.0][/code] range.\n"
+"- A +blend animation to blend with when the blend amount is in the [code]"
+"[0.0, 1.0][/code] range"
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace1D.xml:4
+msgid ""
+"Blends linearly between two of any number of [AnimationNode] of any type "
+"placed on a virtual axis."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace1D.xml:7
+msgid ""
+"A resource to add to an [AnimationNodeBlendTree].\n"
+"This is a virtual axis on which you can add any type of [AnimationNode] "
+"using [method add_blend_point].\n"
+"Outputs the linear blend of the two [AnimationNode]s closest to the node's "
+"current value.\n"
+"You can set the extents of the axis using the [member min_space] and [member "
+"max_space]."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace1D.xml:22
+msgid ""
+"Adds a new point that represents a [code]node[/code] on the virtual axis at "
+"a given position set by [code]pos[/code]. You can insert it at a specific "
+"index using the [code]at_index[/code] argument. If you use the default value "
+"for [code]at_index[/code], the point is inserted at the end of the blend "
+"points array."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace1D.xml:28
+msgid "Returns the number of points on the blend axis."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace1D.xml:35
+msgid ""
+"Returns the [AnimationNode] referenced by the point at index [code]point[/"
+"code]."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace1D.xml:42
+#: doc/classes/AnimationNodeBlendSpace2D.xml:52
+msgid "Returns the position of the point at index [code]point[/code]."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace1D.xml:49
+msgid "Removes the point at index [code]point[/code] from the blend axis."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace1D.xml:57
+#: doc/classes/AnimationNodeBlendSpace2D.xml:88
+msgid ""
+"Changes the [AnimationNode] referenced by the point at index [code]point[/"
+"code]."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace1D.xml:65
+#: doc/classes/AnimationNodeBlendSpace2D.xml:96
+msgid ""
+"Updates the position of the point at index [code]point[/code] on the blend "
+"axis."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace1D.xml:71
+msgid ""
+"The blend space's axis's upper limit for the points' position. See [method "
+"add_blend_point]."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace1D.xml:74
+msgid ""
+"The blend space's axis's lower limit for the points' position. See [method "
+"add_blend_point]."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace1D.xml:77
+msgid "Position increment to snap to when moving a point on the axis."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace1D.xml:80
+msgid "Label of the virtual axis of the blend space."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace2D.xml:4
+msgid ""
+"Blends linearly between three [AnimationNode] of any type placed in a 2D "
+"space."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace2D.xml:7
+msgid ""
+"A resource to add to an [AnimationNodeBlendTree].\n"
+"This node allows you to blend linearly between three animations using a "
+"[Vector2] weight.\n"
+"You can add vertices to the blend space with [method add_blend_point] and "
+"automatically triangulate it by setting [member auto_triangles] to "
+"[code]true[/code]. Otherwise, use [method add_triangle] and [method "
+"remove_triangle] to create up the blend space by hand."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace2D.xml:22
+msgid ""
+"Adds a new point that represents a [code]node[/code] at the position set by "
+"[code]pos[/code]. You can insert it at a specific index using the "
+"[code]at_index[/code] argument. If you use the default value for "
+"[code]at_index[/code], the point is inserted at the end of the blend points "
+"array."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace2D.xml:32
+msgid ""
+"Creates a new triangle using three points [code]x[/code], [code]y[/code], "
+"and [code]z[/code]. Triangles can overlap. You can insert the triangle at a "
+"specific index using the [code]at_index[/code] argument. If you use the "
+"default value for [code]at_index[/code], the point is inserted at the end of "
+"the blend points array."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace2D.xml:38
+msgid "Returns the number of points in the blend space."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace2D.xml:45
+msgid ""
+"Returns the [AnimationRootNode] referenced by the point at index "
+"[code]point[/code]."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace2D.xml:58
+msgid "Returns the number of triangles in the blend space."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace2D.xml:66
+msgid ""
+"Returns the position of the point at index [code]point[/code] in the "
+"triangle of index [code]triangle[/code]."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace2D.xml:73
+msgid "Removes the point at index [code]point[/code] from the blend space."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace2D.xml:80
+msgid ""
+"Removes the triangle at index [code]triangle[/code] from the blend space."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace2D.xml:102
+msgid ""
+"If [code]true[/code], the blend space is triangulated automatically. The "
+"mesh updates every time you add or remove points with [method "
+"add_blend_point] and [method remove_blend_point]."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace2D.xml:105
+msgid ""
+"Controls the interpolation between animations. See [enum BlendMode] "
+"constants."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace2D.xml:108
+msgid ""
+"The blend space's X and Y axes' upper limit for the points' position. See "
+"[method add_blend_point]."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace2D.xml:111
+msgid ""
+"The blend space's X and Y axes' lower limit for the points' position. See "
+"[method add_blend_point]."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace2D.xml:114
+msgid "Position increment to snap to when moving a point."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace2D.xml:117
+msgid "Name of the blend space's X axis."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace2D.xml:120
+msgid "Name of the blend space's Y axis."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace2D.xml:126
+msgid ""
+"Emitted every time the blend space's triangles are created, removed, or when "
+"one of their vertices changes position."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace2D.xml:132
+msgid "The interpolation between animations is linear."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace2D.xml:135
+msgid ""
+"The blend space plays the animation of the node the blending position is "
+"closest to. Useful for frame-by-frame 2D animations."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendSpace2D.xml:138
+msgid ""
+"Similar to [constant BLEND_MODE_DISCRETE], but starts the new animation at "
+"the last animation's playback position."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendTree.xml:4
+msgid "[AnimationTree] node resource that contains many blend type nodes."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendTree.xml:7
+msgid ""
+"This node may contain a sub-tree of any other blend type nodes, such as mix, "
+"blend2, blend3, one shot, etc. This is one of the most commonly used roots."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendTree.xml:19
+msgid ""
+"Adds an [AnimationNode] at the given [code]position[/code]. The [code]name[/"
+"code] is used to identify the created sub-node later."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendTree.xml:28
+msgid ""
+"Connects the output of an [AnimationNode] as input for another "
+"[AnimationNode], at the input port specified by [code]input_index[/code]."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendTree.xml:36
+msgid "Disconnects the node connected to the specified input."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendTree.xml:43
+msgid "Returns the sub-node with the specified [code]name[/code]."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendTree.xml:50
+msgid ""
+"Returns the position of the sub-node with the specified [code]name[/code]."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendTree.xml:57
+msgid ""
+"Returns [code]true[/code] if a sub-node with specified [code]name[/code] "
+"exists."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendTree.xml:64
+msgid "Removes a sub-node."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendTree.xml:72
+msgid "Changes the name of a sub-node."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendTree.xml:80
+msgid "Modifies the position of a sub-node."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendTree.xml:86
+msgid "The global offset of all sub-nodes."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendTree.xml:91
+msgid "The connection was successful."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendTree.xml:94
+msgid "The input node is [code]null[/code]."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendTree.xml:97
+msgid "The specified input port is out of range."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendTree.xml:100
+msgid "The output node is [code]null[/code]."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendTree.xml:103
+msgid "Input and output nodes are the same."
+msgstr ""
+
+#: doc/classes/AnimationNodeBlendTree.xml:106
+msgid "The specified connection already exists."
+msgstr ""
+
+#: doc/classes/AnimationNodeOneShot.xml:4
+msgid "Plays an animation once in [AnimationNodeBlendTree]."
+msgstr ""
+
+#: doc/classes/AnimationNodeOneShot.xml:7
+msgid ""
+"A resource to add to an [AnimationNodeBlendTree]. This node will execute a "
+"sub-animation and return once it finishes. Blend times for fading in and out "
+"can be customized, as well as filters."
+msgstr ""
+
+#: doc/classes/AnimationNodeOneShot.xml:28
+msgid ""
+"If [code]true[/code], the sub-animation will restart automatically after "
+"finishing."
+msgstr ""
+
+#: doc/classes/AnimationNodeOneShot.xml:31
+msgid "The delay after which the automatic restart is triggered, in seconds."
+msgstr ""
+
+#: doc/classes/AnimationNodeOneShot.xml:34
+msgid ""
+"If [member autorestart] is [code]true[/code], a random additional delay (in "
+"seconds) between 0 and this value will be added to [member "
+"autorestart_delay]."
+msgstr ""
+
+#: doc/classes/AnimationNodeOutput.xml:4
+msgid "Generic output node to be added to [AnimationNodeBlendTree]."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:4
+msgid "State machine for control of animations."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:7
+msgid ""
+"Contains multiple nodes representing animation states, connected in a graph. "
+"Node transitions can be configured to happen automatically or via code, "
+"using a shortest-path algorithm. Retrieve the "
+"[AnimationNodeStateMachinePlayback] object from the [AnimationTree] node to "
+"control it programmatically.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"var state_machine = $AnimationTree.get(\"parameters/playback\")\n"
+"state_machine.travel(\"some_state\")\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:24
+msgid ""
+"Adds a new node to the graph. The [code]position[/code] is used for display "
+"in the editor."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:33
+msgid "Adds a transition between the given nodes."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:39
+#: doc/classes/AnimationNodeStateMachine.xml:72
+msgid "Returns the graph's end node."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:45
+msgid "Returns the draw offset of the graph. Used for display in the editor."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:52
+msgid "Returns the animation node with the given name."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:59
+msgid "Returns the given animation node's name."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:66
+msgid "Returns the given node's coordinates. Used for display in the editor."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:79
+msgid "Returns the given transition."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:85
+msgid "Returns the number of connections in the graph."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:92
+msgid "Returns the given transition's start node."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:99
+msgid "Returns the given transition's end node."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:106
+msgid "Returns [code]true[/code] if the graph contains the given node."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:114
+msgid ""
+"Returns [code]true[/code] if there is a transition between the given nodes."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:121
+msgid "Deletes the given node from the graph."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:129
+msgid "Deletes the transition between the two specified nodes."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:136
+msgid "Deletes the given transition by index."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:144
+msgid "Renames the given node."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:152
+msgid "Replaces the node and keeps its transitions unchanged."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:159
+msgid "Sets the given node as the graph end point."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:166
+msgid "Sets the draw offset of the graph. Used for display in the editor."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:174
+msgid "Sets the node's coordinates. Used for display in the editor."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachine.xml:181
+msgid "Sets the given node as the graph start point."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachinePlayback.xml:4
+msgid "Playback control for [AnimationNodeStateMachine]."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachinePlayback.xml:7
+msgid ""
+"Allows control of [AnimationTree] state machines created with "
+"[AnimationNodeStateMachine]. Retrieve with [code]$AnimationTree."
+"get(\"parameters/playback\")[/code].\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"var state_machine = $AnimationTree.get(\"parameters/playback\")\n"
+"state_machine.travel(\"some_state\")\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachinePlayback.xml:26
+msgid "Returns the currently playing animation state."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachinePlayback.xml:32
+msgid "Returns the playback position within the current animation state."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachinePlayback.xml:38
+msgid ""
+"Returns the current travel path as computed internally by the A* algorithm."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachinePlayback.xml:44
+msgid "Returns [code]true[/code] if an animation is playing."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachinePlayback.xml:51
+msgid "Starts playing the given animation."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachinePlayback.xml:57
+msgid "Stops the currently playing animation."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachinePlayback.xml:64
+msgid ""
+"Transitions from the current state to another one, following the shortest "
+"path."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachineTransition.xml:14
+msgid ""
+"Turn on auto advance when this condition is set. The provided name will "
+"become a boolean parameter on the [AnimationTree] that can be controlled "
+"from code (see [url=https://docs.godotengine.org/en/3.4/tutorials/animation/"
+"animation_tree.html#controlling-from-code][/url]). For example, if [member "
+"AnimationTree.tree_root] is an [AnimationNodeStateMachine] and [member "
+"advance_condition] is set to [code]\"idle\"[/code]:\n"
+"[codeblock]\n"
+"$animation_tree[\"parameters/conditions/idle\"] = is_on_floor and "
+"(linear_velocity.x == 0)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachineTransition.xml:20
+msgid ""
+"Turn on the transition automatically when this state is reached. This works "
+"best with [constant SWITCH_MODE_AT_END]."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachineTransition.xml:23
+msgid ""
+"Don't use this transition during [method AnimationNodeStateMachinePlayback."
+"travel] or [member auto_advance]."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachineTransition.xml:26
+msgid ""
+"Lower priority transitions are preferred when travelling through the tree "
+"via [method AnimationNodeStateMachinePlayback.travel] or [member "
+"auto_advance]."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachineTransition.xml:29
+msgid "The transition type."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachineTransition.xml:32
+msgid "The time to cross-fade between this state and the next."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachineTransition.xml:38
+msgid "Emitted when [member advance_condition] is changed."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachineTransition.xml:44
+msgid ""
+"Switch to the next state immediately. The current state will end and blend "
+"into the beginning of the new one."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachineTransition.xml:47
+msgid ""
+"Switch to the next state immediately, but will seek the new state to the "
+"playback position of the old state."
+msgstr ""
+
+#: doc/classes/AnimationNodeStateMachineTransition.xml:50
+msgid ""
+"Wait for the current state playback to end, then switch to the beginning of "
+"the next state animation."
+msgstr ""
+
+#: doc/classes/AnimationNodeTimeScale.xml:4
+msgid "A time-scaling animation node to be used with [AnimationTree]."
+msgstr ""
+
+#: doc/classes/AnimationNodeTimeScale.xml:7
+msgid ""
+"Allows scaling the speed of the animation (or reversing it) in any children "
+"nodes. Setting it to 0 will pause the animation."
+msgstr ""
+
+#: doc/classes/AnimationNodeTimeSeek.xml:4
+msgid "A time-seeking animation node to be used with [AnimationTree]."
+msgstr ""
+
+#: doc/classes/AnimationNodeTimeSeek.xml:7
+msgid ""
+"This node can be used to cause a seek command to happen to any sub-children "
+"of the animation graph. Use this node type to play an [Animation] from the "
+"start or a certain playback position inside the [AnimationNodeBlendTree]. "
+"After setting the time and changing the animation playback, the seek node "
+"automatically goes into sleep mode on the next process frame by setting its "
+"[code]seek_position[/code] value to [code]-1.0[/code].\n"
+"[codeblock]\n"
+"# Play child animation from the start.\n"
+"animation_tree.set(\"parameters/Seek/seek_position\", 0.0)\n"
+"# Alternative syntax (same result as above).\n"
+"animation_tree[\"parameters/Seek/seek_position\"] = 0.0\n"
+"\n"
+"# Play child animation from 12 second timestamp.\n"
+"animation_tree.set(\"parameters/Seek/seek_position\", 12.0)\n"
+"# Alternative syntax (same result as above).\n"
+"animation_tree[\"parameters/Seek/seek_position\"] = 12.0\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/AnimationNodeTransition.xml:4
+msgid "A generic animation transition node for [AnimationTree]."
+msgstr ""
+
+#: doc/classes/AnimationNodeTransition.xml:7
+msgid ""
+"Simple state machine for cases which don't require a more advanced "
+"[AnimationNodeStateMachine]. Animations can be connected to the inputs and "
+"transition times can be specified."
+msgstr ""
+
+#: doc/classes/AnimationNodeTransition.xml:44
+msgid "The number of available input ports for this node."
+msgstr ""
+
+#: doc/classes/AnimationNodeTransition.xml:47
+msgid ""
+"Cross-fading time (in seconds) between each animation connected to the "
+"inputs."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:4
+msgid "Container and player of [Animation] resources."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:7
+msgid ""
+"An animation player is used for general-purpose playback of [Animation] "
+"resources. It contains a dictionary of animations (referenced by name) and "
+"custom blend times between their transitions. Additionally, animations can "
+"be played and blended in different channels.\n"
+"[AnimationPlayer] is more suited than [Tween] for animations where you know "
+"the final values in advance. For example, fading a screen in and out is more "
+"easily done with an [AnimationPlayer] node thanks to the animation tools "
+"provided by the editor. That particular example can also be implemented with "
+"a [Tween] node, but it requires doing everything by code.\n"
+"Updating the target properties of animations occurs at process time."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:22
+msgid ""
+"Adds [code]animation[/code] to the player accessible with the key "
+"[code]name[/code]."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:29
+msgid ""
+"Shifts position in the animation timeline and immediately updates the "
+"animation. [code]delta[/code] is the time in seconds to shift. Events "
+"between the current frame and [code]delta[/code] are handled."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:36
+msgid "Returns the name of the next animation in the queue."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:44
+msgid ""
+"Triggers the [code]anim_to[/code] animation when the [code]anim_from[/code] "
+"animation completes."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:50
+msgid ""
+"[AnimationPlayer] caches animated nodes. It may not notice if a node "
+"disappears; [method clear_caches] forces it to update the cache again."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:56
+msgid "Clears all queued, unplayed animations."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:63
+msgid ""
+"Returns the name of [code]animation[/code] or an empty string if not found."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:70
+msgid ""
+"Returns the [Animation] with key [code]name[/code] or [code]null[/code] if "
+"not found."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:76
+msgid "Returns the list of stored animation names."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:84
+msgid ""
+"Gets the blend time (in seconds) between two animations, referenced by their "
+"names."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:90
+msgid ""
+"Gets the actual playing speed of current animation or 0 if not playing. This "
+"speed is the [member playback_speed] property multiplied by "
+"[code]custom_speed[/code] argument specified when calling the [method play] "
+"method."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:96
+msgid ""
+"Returns a list of the animation names that are currently queued to play."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:103
+msgid ""
+"Returns [code]true[/code] if the [AnimationPlayer] stores an [Animation] "
+"with key [code]name[/code]."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:109
+msgid "Returns [code]true[/code] if playing an animation."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:119
+msgid ""
+"Plays the animation with key [code]name[/code]. Custom blend times and speed "
+"can be set. If [code]custom_speed[/code] is negative and [code]from_end[/"
+"code] is [code]true[/code], the animation will play backwards (which is "
+"equivalent to calling [method play_backwards]).\n"
+"The [AnimationPlayer] keeps track of its current or last played animation "
+"with [member assigned_animation]. If this method is called with that same "
+"animation [code]name[/code], or with no [code]name[/code] parameter, the "
+"assigned animation will resume playing if it was paused, or restart if it "
+"was stopped (see [method stop] for both pause and stop). If the animation "
+"was already playing, it will keep playing.\n"
+"[b]Note:[/b] The animation will be updated the next time the "
+"[AnimationPlayer] is processed. If other variables are updated at the same "
+"time this is called, they may be updated too early. To perform the update "
+"immediately, call [code]advance(0)[/code]."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:129
+msgid ""
+"Plays the animation with key [code]name[/code] in reverse.\n"
+"This method is a shorthand for [method play] with [code]custom_speed = -1.0[/"
+"code] and [code]from_end = true[/code], so see its description for more "
+"information."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:137
+msgid ""
+"Queues an animation for playback once the current one is done.\n"
+"[b]Note:[/b] If a looped animation is currently playing, the queued "
+"animation will never play unless the looped animation is stopped somehow."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:145
+msgid "Removes the animation with key [code]name[/code]."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:153
+msgid ""
+"Renames an existing animation with key [code]name[/code] to [code]newname[/"
+"code]."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:161
+msgid ""
+"Seeks the animation to the [code]seconds[/code] point in time (in seconds). "
+"If [code]update[/code] is [code]true[/code], the animation updates too, "
+"otherwise it updates at process time. Events between the current frame and "
+"[code]seconds[/code] are skipped."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:170
+msgid ""
+"Specifies a blend time (in seconds) between two animations, referenced by "
+"their names."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:177
+msgid ""
+"Stops or pauses the currently playing animation. If [code]reset[/code] is "
+"[code]true[/code], the animation position is reset to [code]0[/code] and the "
+"playback speed is reset to [code]1.0[/code].\n"
+"If [code]reset[/code] is [code]false[/code], the [member "
+"current_animation_position] will be kept and calling [method play] or "
+"[method play_backwards] without arguments or with the same animation name as "
+"[member assigned_animation] will resume the animation."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:184
+msgid ""
+"If playing, the current animation; otherwise, the animation last played. "
+"When set, would change the animation, but would not play it unless currently "
+"playing. See also [member current_animation]."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:187
+msgid "The name of the animation to play when the scene loads."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:190
+msgid ""
+"The name of the currently playing animation. If no animation is playing, the "
+"property's value is an empty string. Changing this value does not restart "
+"the animation. See [method play] for more information on playing "
+"animations.\n"
+"[b]Note:[/b] While this property appears in the inspector, it's not meant to "
+"be edited, and it's not saved in the scene. This property is mainly used to "
+"get the currently playing animation, and internally for animation playback "
+"tracks. For more information, see [Animation]."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:194
+msgid "The length (in seconds) of the currently being played animation."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:197
+msgid "The position (in seconds) of the currently playing animation."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:200
+msgid "The call mode to use for Call Method tracks."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:203
+msgid ""
+"If [code]true[/code], updates animations in response to process-related "
+"notifications."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:206
+msgid ""
+"The default time in which to blend animations. Ranges from 0 to 4096 with "
+"0.01 precision."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:209
+msgid "The process notification in which to update animations."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:212
+msgid ""
+"The speed scaling ratio. For instance, if this value is 1, then the "
+"animation plays at normal speed. If it's 0.5, then it plays at half speed. "
+"If it's 2, then it plays at double speed."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:215
+msgid ""
+"This is used by the editor. If set to [code]true[/code], the scene will be "
+"saved with the effects of the reset animation applied (as if it had been "
+"seeked to time 0), then reverted after saving.\n"
+"In other words, the saved scene file will contain the \"default pose\", as "
+"defined by the reset animation, if any, with the editor keeping the values "
+"that the nodes had before saving."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:219
+msgid "The node from which node path references will travel."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:227
+msgid ""
+"Emitted when a queued animation plays after the previous animation was "
+"finished. See [method queue].\n"
+"[b]Note:[/b] The signal is not emitted when the animation is changed via "
+"[method play] or from [AnimationTree]."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:234
+msgid "Notifies when an animation finished playing."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:240
+msgid "Notifies when an animation starts playing."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:245
+msgid ""
+"Notifies when the caches have been cleared, either automatically, or "
+"manually via [method clear_caches]."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:251 doc/classes/AnimationTreePlayer.xml:505
+msgid ""
+"Process animation during the physics process. This is especially useful when "
+"animating physics bodies."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:254 doc/classes/AnimationTreePlayer.xml:508
+msgid "Process animation during the idle process."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:257
+msgid ""
+"Do not process animation. Use [method advance] to process the animation "
+"manually."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:260
+msgid ""
+"Batch method calls during the animation process, then do the calls after "
+"events are processed. This avoids bugs involving deleting nodes or modifying "
+"the AnimationPlayer while playing."
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml:263
+msgid "Make method calls immediately when reached in the animation."
+msgstr ""
+
+#: doc/classes/AnimationTree.xml:4
+msgid ""
+"A node to be used for advanced animation transitions in an [AnimationPlayer]."
+msgstr ""
+
+#: doc/classes/AnimationTree.xml:7
+msgid ""
+"A node to be used for advanced animation transitions in an "
+"[AnimationPlayer].\n"
+"[b]Note:[/b] When linked with an [AnimationPlayer], several properties and "
+"methods of the corresponding [AnimationPlayer] will not function as "
+"expected. Playback and transitions should be handled using only the "
+"[AnimationTree] and its constituent [AnimationNode](s). The "
+"[AnimationPlayer] node should be used solely for adding, deleting, and "
+"editing animations."
+msgstr ""
+
+#: doc/classes/AnimationTree.xml:19
+msgid "Manually advance the animations by the specified time (in seconds)."
+msgstr ""
+
+#: doc/classes/AnimationTree.xml:25
+msgid ""
+"Retrieve the motion of the [member root_motion_track] as a [Transform] that "
+"can be used elsewhere. If [member root_motion_track] is not a path to a "
+"track of type [constant Animation.TYPE_TRANSFORM], returns an identity "
+"transformation. See also [member root_motion_track] and [RootMotionView]."
+msgstr ""
+
+#: doc/classes/AnimationTree.xml:38
+msgid "If [code]true[/code], the [AnimationTree] will be processing."
+msgstr ""
+
+#: doc/classes/AnimationTree.xml:41
+msgid "The path to the [AnimationPlayer] used for animating."
+msgstr ""
+
+#: doc/classes/AnimationTree.xml:44
+msgid ""
+"The process mode of this [AnimationTree]. See [enum AnimationProcessMode] "
+"for available modes."
+msgstr ""
+
+#: doc/classes/AnimationTree.xml:47
+msgid ""
+"The path to the Animation track used for root motion. Paths must be valid "
+"scene-tree paths to a node, and must be specified starting from the parent "
+"node of the node that will reproduce the animation. To specify a track that "
+"controls properties or bones, append its name after the path, separated by "
+"[code]\":\"[/code]. For example, [code]\"character/skeleton:ankle\"[/code] "
+"or [code]\"character/mesh:transform/local\"[/code].\n"
+"If the track has type [constant Animation.TYPE_TRANSFORM], the "
+"transformation will be cancelled visually, and the animation will appear to "
+"stay in place. See also [method get_root_motion_transform] and "
+"[RootMotionView]."
+msgstr ""
+
+#: doc/classes/AnimationTree.xml:51
+msgid "The root animation node of this [AnimationTree]. See [AnimationNode]."
+msgstr ""
+
+#: doc/classes/AnimationTree.xml:56
+msgid ""
+"The animations will progress during the physics frame (i.e. [method Node."
+"_physics_process])."
+msgstr ""
+
+#: doc/classes/AnimationTree.xml:59
+msgid ""
+"The animations will progress during the idle frame (i.e. [method Node."
+"_process])."
+msgstr ""
+
+#: doc/classes/AnimationTree.xml:62
+msgid "The animations will only progress manually (see [method advance])."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:4
+msgid ""
+"[i]Deprecated.[/i] Animation player that uses a node graph for blending "
+"animations. Superseded by [AnimationTree]."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:7
+msgid ""
+"[i]Deprecated.[/i] A node graph tool for blending multiple animations bound "
+"to an [AnimationPlayer]. Especially useful for animating characters or other "
+"skeleton-based rigs. It can combine several animations to form a desired "
+"pose.\n"
+"It takes [Animation]s from an [AnimationPlayer] node and mixes them "
+"depending on the graph.\n"
+"See [AnimationTree] for a more full-featured replacement of this node."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:20
+msgid "Adds a [code]type[/code] node to the graph with name [code]id[/code]."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:27
+msgid ""
+"Shifts position in the animation timeline. [code]delta[/code] is the time in "
+"seconds to shift. Events between the current frame and [code]delta[/code] "
+"are handled."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:34
+msgid ""
+"Returns the [AnimationPlayer]'s [Animation] bound to the "
+"[AnimationTreePlayer]'s animation node with name [code]id[/code]."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:41
+msgid ""
+"Returns the name of the [member master_player]'s [Animation] bound to this "
+"animation node."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:48
+msgid ""
+"Returns the absolute playback timestamp of the animation node with name "
+"[code]id[/code]."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:56
+msgid ""
+"Binds a new [Animation] from the [member master_player] to the "
+"[AnimationTreePlayer]'s animation node with name [code]id[/code]."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:65
+msgid ""
+"If [code]enable[/code] is [code]true[/code], the animation node with ID "
+"[code]id[/code] turns off the track modifying the property at [code]path[/"
+"code]. The modified node's children continue to animate."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:73
+msgid ""
+"Binds the [Animation] named [code]source[/code] from [member master_player] "
+"to the animation node [code]id[/code]. Recalculates caches."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:82
+msgid ""
+"Returns whether node [code]id[/code] and [code]dst_id[/code] are connected "
+"at the specified slot."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:89
+msgid "Returns the blend amount of a Blend2 node given its name."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:97
+msgid ""
+"Sets the blend amount of a Blend2 node given its name and value.\n"
+"A Blend2 node blends two animations (A and B) with the amount between 0 and "
+"1.\n"
+"At 0, output is input A. Towards 1, the influence of A gets lessened, the "
+"influence of B gets raised. At 1, output is input B."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:108
+msgid ""
+"If [code]enable[/code] is [code]true[/code], the Blend2 node with name "
+"[code]id[/code] turns off the track modifying the property at [code]path[/"
+"code]. The modified node's children continue to animate."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:115
+msgid "Returns the blend amount of a Blend3 node given its name."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:123
+msgid ""
+"Sets the blend amount of a Blend3 node given its name and value.\n"
+"A Blend3 Node blends three animations (A, B-, B+) with the amount between -1 "
+"and 1.\n"
+"At -1, output is input B-. From -1 to 0, the influence of B- gets lessened, "
+"the influence of A gets raised and the influence of B+ is 0. At 0, output is "
+"input A. From 0 to 1, the influence of A gets lessened, the influence of B+ "
+"gets raised and the influence of B+ is 0. At 1, output is input B+."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:132
+msgid "Returns the blend amount of a Blend4 node given its name."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:140
+msgid ""
+"Sets the blend amount of a Blend4 node given its name and value.\n"
+"A Blend4 Node blends two pairs of animations.\n"
+"The two pairs are blended like Blend2 and then added together."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:151
+msgid ""
+"Connects node [code]id[/code] to [code]dst_id[/code] at the specified input "
+"slot."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:159
+msgid ""
+"Disconnects nodes connected to [code]id[/code] at the specified input slot."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:165
+msgid "Returns a [PoolStringArray] containing the name of all nodes."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:172
+msgid "Returns the mix amount of a Mix node given its name."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:180
+msgid ""
+"Sets the mix amount of a Mix node given its name and value.\n"
+"A Mix node adds input b to input a by the amount given by ratio."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:188
+msgid "Check if a node exists (by name)."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:195
+msgid ""
+"Returns the input count for a given node. Different types of nodes have "
+"different amount of inputs."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:203
+msgid "Returns the input source for a given node input."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:210
+msgid "Returns position of a node in the graph given its name."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:217
+msgid "Gets the node type, will return from [enum NodeType] enum."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:225
+msgid "Renames a node in the graph."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:233
+msgid "Sets the position of a node in the graph given its name and position."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:240
+msgid "Returns the autostart delay of a OneShot node given its name."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:247
+msgid "Returns the autostart random delay of a OneShot node given its name."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:254
+msgid "Returns the fade in time of a OneShot node given its name."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:261
+msgid "Returns the fade out time of a OneShot node given its name."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:268
+msgid "Returns whether a OneShot node will auto restart given its name."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:275
+msgid "Returns whether a OneShot node is active given its name."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:283
+msgid ""
+"Sets the autorestart property of a OneShot node given its name and value."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:291
+msgid ""
+"Sets the autorestart delay of a OneShot node given its name and value in "
+"seconds."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:299
+msgid ""
+"Sets the autorestart random delay of a OneShot node given its name and value "
+"in seconds."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:307
+msgid ""
+"Sets the fade in time of a OneShot node given its name and value in seconds."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:315
+msgid ""
+"Sets the fade out time of a OneShot node given its name and value in seconds."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:324
+msgid ""
+"If [code]enable[/code] is [code]true[/code], the OneShot node with ID "
+"[code]id[/code] turns off the track modifying the property at [code]path[/"
+"code]. The modified node's children continue to animate."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:331
+msgid "Starts a OneShot node given its name."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:338
+msgid "Stops the OneShot node with name [code]id[/code]."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:344
+msgid ""
+"Manually recalculates the cache of track information generated from "
+"animation nodes. Needed when external sources modify the animation nodes' "
+"state."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:351
+msgid "Removes the animation node with name [code]id[/code]."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:357
+msgid "Resets this [AnimationTreePlayer]."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:364
+msgid ""
+"Returns the time scale value of the TimeScale node with name [code]id[/code]."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:372
+msgid ""
+"Sets the time scale of the TimeScale node with name [code]id[/code] to "
+"[code]scale[/code].\n"
+"The TimeScale node is used to speed [Animation]s up if the scale is above 1 "
+"or slow them down if it is below 1.\n"
+"If applied after a blend or mix, affects all input animations to that blend "
+"or mix."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:382
+msgid ""
+"Sets the time seek value of the TimeSeek node with name [code]id[/code] to "
+"[code]seconds[/code].\n"
+"This functions as a seek in the [Animation] or the blend or mix of "
+"[Animation]s input in it."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:391
+msgid ""
+"Deletes the input at [code]input_idx[/code] for the transition node with "
+"name [code]id[/code]."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:398
+msgid ""
+"Returns the index of the currently evaluated input for the transition node "
+"with name [code]id[/code]."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:405
+msgid ""
+"Returns the number of inputs for the transition node with name [code]id[/"
+"code]. You can add inputs by right-clicking on the transition node."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:412
+msgid ""
+"Returns the cross fade time for the transition node with name [code]id[/"
+"code]."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:420
+msgid ""
+"Returns [code]true[/code] if the input at [code]input_idx[/code] on the "
+"transition node with name [code]id[/code] is set to automatically advance to "
+"the next input upon completion."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:428
+msgid ""
+"The transition node with name [code]id[/code] sets its current input at "
+"[code]input_idx[/code]."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:437
+msgid ""
+"The transition node with name [code]id[/code] advances to its next input "
+"automatically when the input at [code]input_idx[/code] completes."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:445
+msgid ""
+"Resizes the number of inputs available for the transition node with name "
+"[code]id[/code]."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:453
+msgid ""
+"The transition node with name [code]id[/code] sets its cross fade time to "
+"[code]time_sec[/code]."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:459
+msgid ""
+"If [code]true[/code], the [AnimationTreePlayer] is able to play animations."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:462
+msgid ""
+"The node from which to relatively access other nodes.\n"
+"It accesses the bones, so it should point to the same node the "
+"[AnimationPlayer] would point its Root Node at."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:466
+msgid ""
+"The path to the [AnimationPlayer] from which this [AnimationTreePlayer] "
+"binds animations to animation nodes.\n"
+"Once set, [Animation] nodes can be added to the [AnimationTreePlayer]."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:470
+msgid "The thread in which to update animations."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:475
+msgid "Output node."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:478
+msgid "Animation node."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:481
+msgid "OneShot node."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:484
+msgid "Mix node."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:487
+msgid "Blend2 node."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:490
+msgid "Blend3 node."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:493
+msgid "Blend4 node."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:496
+msgid "TimeScale node."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:499
+msgid "TimeSeek node."
+msgstr ""
+
+#: doc/classes/AnimationTreePlayer.xml:502
+msgid "Transition node."
+msgstr ""
+
+#: doc/classes/Area.xml:4
+msgid "3D area for detection and physics and audio influence."
+msgstr ""
+
+#: doc/classes/Area.xml:7
+msgid ""
+"3D area that detects [CollisionObject] nodes overlapping, entering, or "
+"exiting. Can also alter or override local physics parameters (gravity, "
+"damping) and route audio to custom audio buses."
+msgstr ""
+
+#: doc/classes/Area.xml:11 doc/classes/QuadMesh.xml:10
+#: doc/classes/Viewport.xml:17 doc/classes/ViewportTexture.xml:11
+msgid "https://godotengine.org/asset-library/asset/127"
+msgstr ""
+
+#: doc/classes/Area.xml:17
+msgid ""
+"Returns a list of intersecting [Area]s. The overlapping area's [member "
+"CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
+msgstr ""
+
+#: doc/classes/Area.xml:24
+msgid ""
+"Returns a list of intersecting [PhysicsBody]s. The overlapping body's "
+"[member CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
+msgstr ""
+
+#: doc/classes/Area.xml:32
+msgid ""
+"If [code]true[/code], the given area overlaps the Area.\n"
+"[b]Note:[/b] The result of this test is not immediate after moving objects. "
+"For performance, list of overlaps is updated once per frame and before the "
+"physics step. Consider using signals instead."
+msgstr ""
+
+#: doc/classes/Area.xml:40
+msgid ""
+"If [code]true[/code], the given physics body overlaps the Area.\n"
+"[b]Note:[/b] The result of this test is not immediate after moving objects. "
+"For performance, list of overlaps is updated once per frame and before the "
+"physics step. Consider using signals instead.\n"
+"The [code]body[/code] argument can either be a [PhysicsBody] or a [GridMap] "
+"instance (while GridMaps are not physics body themselves, they register "
+"their tiles with collision shapes as a virtual physics body)."
+msgstr ""
+
+#: doc/classes/Area.xml:48
+msgid ""
+"The rate at which objects stop spinning in this area. Represents the angular "
+"velocity lost per second.\n"
+"See [member ProjectSettings.physics/3d/default_angular_damp] for more "
+"details about damping."
+msgstr ""
+
+#: doc/classes/Area.xml:52 doc/classes/Area2D.xml:54
+msgid "The name of the area's audio bus."
+msgstr ""
+
+#: doc/classes/Area.xml:55 doc/classes/Area2D.xml:57
+msgid ""
+"If [code]true[/code], the area's audio bus overrides the default audio bus."
+msgstr ""
+
+#: doc/classes/Area.xml:58
+msgid ""
+"The area's gravity intensity (in meters per second squared). This value "
+"multiplies the gravity vector. This is useful to alter the force of gravity "
+"without altering its direction."
+msgstr ""
+
+#: doc/classes/Area.xml:61 doc/classes/Area2D.xml:63
+msgid ""
+"The falloff factor for point gravity. The greater the value, the faster "
+"gravity decreases with distance."
+msgstr ""
+
+#: doc/classes/Area.xml:64 doc/classes/Area2D.xml:66
+msgid ""
+"If [code]true[/code], gravity is calculated from a point (set via [member "
+"gravity_vec]). See also [member space_override]."
+msgstr ""
+
+#: doc/classes/Area.xml:67 doc/classes/Area2D.xml:69
+msgid ""
+"The area's gravity vector (not normalized). If gravity is a point (see "
+"[member gravity_point]), this will be the point of attraction."
+msgstr ""
+
+#: doc/classes/Area.xml:70
+msgid ""
+"The rate at which objects stop moving in this area. Represents the linear "
+"velocity lost per second.\n"
+"See [member ProjectSettings.physics/3d/default_linear_damp] for more details "
+"about damping."
+msgstr ""
+
+#: doc/classes/Area.xml:74 doc/classes/Area2D.xml:76
+msgid "If [code]true[/code], other monitoring areas can detect this area."
+msgstr ""
+
+#: doc/classes/Area.xml:77 doc/classes/Area2D.xml:79
+msgid ""
+"If [code]true[/code], the area detects bodies or areas entering and exiting "
+"it."
+msgstr ""
+
+#: doc/classes/Area.xml:80 doc/classes/Area2D.xml:82
+msgid "The area's priority. Higher priority areas are processed first."
+msgstr ""
+
+#: doc/classes/Area.xml:83
+msgid ""
+"The degree to which this area applies reverb to its associated audio. Ranges "
+"from [code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
+msgstr ""
+
+#: doc/classes/Area.xml:86
+msgid "If [code]true[/code], the area applies reverb to its associated audio."
+msgstr ""
+
+#: doc/classes/Area.xml:89
+msgid "The reverb bus name to use for this area's associated audio."
+msgstr ""
+
+#: doc/classes/Area.xml:92
+msgid ""
+"The degree to which this area's reverb is a uniform effect. Ranges from "
+"[code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
+msgstr ""
+
+#: doc/classes/Area.xml:95 doc/classes/Area2D.xml:85
+msgid ""
+"Override mode for gravity and damping calculations within this area. See "
+"[enum SpaceOverride] for possible values."
+msgstr ""
+
+#: doc/classes/Area.xml:102
+msgid ""
+"Emitted when another Area enters this Area. Requires [member monitoring] to "
+"be set to [code]true[/code].\n"
+"[code]area[/code] the other Area."
+msgstr ""
+
+#: doc/classes/Area.xml:109
+msgid ""
+"Emitted when another Area exits this Area. Requires [member monitoring] to "
+"be set to [code]true[/code].\n"
+"[code]area[/code] the other Area."
+msgstr ""
+
+#: doc/classes/Area.xml:119 doc/classes/Area.xml:132
+msgid ""
+"Emitted when one of another Area's [Shape]s enters one of this Area's "
+"[Shape]s. Requires [member monitoring] to be set to [code]true[/code].\n"
+"[code]area_rid[/code] the [RID] of the other Area's [CollisionObject] used "
+"by the [PhysicsServer].\n"
+"[code]area[/code] the other Area.\n"
+"[code]area_shape_index[/code] the index of the [Shape] of the other Area "
+"used by the [PhysicsServer]. Get the [CollisionShape] node with [code]area."
+"shape_owner_get_owner(area_shape_index)[/code].\n"
+"[code]local_shape_index[/code] the index of the [Shape] of this Area used by "
+"the [PhysicsServer]. Get the [CollisionShape] node with [code]self."
+"shape_owner_get_owner(local_shape_index)[/code]."
+msgstr ""
+
+#: doc/classes/Area.xml:142
+msgid ""
+"Emitted when a [PhysicsBody] or [GridMap] enters this Area. Requires [member "
+"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
+"[MeshLibrary] has Collision [Shape]s.\n"
+"[code]body[/code] the [Node], if it exists in the tree, of the other "
+"[PhysicsBody] or [GridMap]."
+msgstr ""
+
+#: doc/classes/Area.xml:149
+msgid ""
+"Emitted when a [PhysicsBody] or [GridMap] exits this Area. Requires [member "
+"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
+"[MeshLibrary] has Collision [Shape]s.\n"
+"[code]body[/code] the [Node], if it exists in the tree, of the other "
+"[PhysicsBody] or [GridMap]."
+msgstr ""
+
+#: doc/classes/Area.xml:159 doc/classes/Area.xml:172
+msgid ""
+"Emitted when one of a [PhysicsBody] or [GridMap]'s [Shape]s enters one of "
+"this Area's [Shape]s. Requires [member monitoring] to be set to [code]true[/"
+"code]. [GridMap]s are detected if the [MeshLibrary] has Collision [Shape]s.\n"
+"[code]body_rid[/code] the [RID] of the [PhysicsBody] or [MeshLibrary]'s "
+"[CollisionObject] used by the [PhysicsServer].\n"
+"[code]body[/code] the [Node], if it exists in the tree, of the [PhysicsBody] "
+"or [GridMap].\n"
+"[code]body_shape_index[/code] the index of the [Shape] of the [PhysicsBody] "
+"or [GridMap] used by the [PhysicsServer]. Get the [CollisionShape] node with "
+"[code]body.shape_owner_get_owner(body_shape_index)[/code].\n"
+"[code]local_shape_index[/code] the index of the [Shape] of this Area used by "
+"the [PhysicsServer]. Get the [CollisionShape] node with [code]self."
+"shape_owner_get_owner(local_shape_index)[/code]."
+msgstr ""
+
+#: doc/classes/Area.xml:182 doc/classes/Area2D.xml:172
+msgid "This area does not affect gravity/damping."
+msgstr ""
+
+#: doc/classes/Area.xml:185 doc/classes/Area2D.xml:175
+msgid ""
+"This area adds its gravity/damping values to whatever has been calculated so "
+"far (in [member priority] order)."
+msgstr ""
+
+#: doc/classes/Area.xml:188 doc/classes/Area2D.xml:178
+msgid ""
+"This area adds its gravity/damping values to whatever has been calculated so "
+"far (in [member priority] order), ignoring any lower priority areas."
+msgstr ""
+
+#: doc/classes/Area.xml:191 doc/classes/Area2D.xml:181
+msgid ""
+"This area replaces any gravity/damping, even the defaults, ignoring any "
+"lower priority areas."
+msgstr ""
+
+#: doc/classes/Area.xml:194 doc/classes/Area2D.xml:184
+msgid ""
+"This area replaces any gravity/damping calculated so far (in [member "
+"priority] order), but keeps calculating the rest of the areas."
+msgstr ""
+
+#: doc/classes/Area2D.xml:4
+msgid "2D area for detection and physics and audio influence."
+msgstr ""
+
+#: doc/classes/Area2D.xml:7
+msgid ""
+"2D area that detects [CollisionObject2D] nodes overlapping, entering, or "
+"exiting. Can also alter or override local physics parameters (gravity, "
+"damping) and route audio to a custom audio bus."
+msgstr ""
+
+#: doc/classes/Area2D.xml:10
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/physics/using_area_2d.html"
+msgstr ""
+
+#: doc/classes/Area2D.xml:12 doc/classes/CollisionShape2D.xml:12
+#: doc/classes/RectangleShape2D.xml:10
+msgid "https://godotengine.org/asset-library/asset/121"
+msgstr ""
+
+#: doc/classes/Area2D.xml:13 doc/classes/Camera2D.xml:12
+#: doc/classes/KinematicBody2D.xml:15 doc/classes/TileMap.xml:12
+#: doc/classes/TileSet.xml:12
+msgid "https://godotengine.org/asset-library/asset/120"
+msgstr ""
+
+#: doc/classes/Area2D.xml:19
+msgid ""
+"Returns a list of intersecting [Area2D]s. The overlapping area's [member "
+"CollisionObject2D.collision_layer] must be part of this area's [member "
+"CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
+msgstr ""
+
+#: doc/classes/Area2D.xml:26
+msgid ""
+"Returns a list of intersecting [PhysicsBody2D]s. The overlapping body's "
+"[member CollisionObject2D.collision_layer] must be part of this area's "
+"[member CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
+msgstr ""
+
+#: doc/classes/Area2D.xml:34
+msgid ""
+"If [code]true[/code], the given area overlaps the Area2D.\n"
+"[b]Note:[/b] The result of this test is not immediate after moving objects. "
+"For performance, the list of overlaps is updated once per frame and before "
+"the physics step. Consider using signals instead."
+msgstr ""
+
+#: doc/classes/Area2D.xml:42
+msgid ""
+"If [code]true[/code], the given physics body overlaps the Area2D.\n"
+"[b]Note:[/b] The result of this test is not immediate after moving objects. "
+"For performance, list of overlaps is updated once per frame and before the "
+"physics step. Consider using signals instead.\n"
+"The [code]body[/code] argument can either be a [PhysicsBody2D] or a "
+"[TileMap] instance (while TileMaps are not physics bodies themselves, they "
+"register their tiles with collision shapes as a virtual physics body)."
+msgstr ""
+
+#: doc/classes/Area2D.xml:50
+msgid ""
+"The rate at which objects stop spinning in this area. Represents the angular "
+"velocity lost per second.\n"
+"See [member ProjectSettings.physics/2d/default_angular_damp] for more "
+"details about damping."
+msgstr ""
+
+#: doc/classes/Area2D.xml:60
+msgid ""
+"The area's gravity intensity (in pixels per second squared). This value "
+"multiplies the gravity vector. This is useful to alter the force of gravity "
+"without altering its direction."
+msgstr ""
+
+#: doc/classes/Area2D.xml:72
+msgid ""
+"The rate at which objects stop moving in this area. Represents the linear "
+"velocity lost per second.\n"
+"See [member ProjectSettings.physics/2d/default_linear_damp] for more details "
+"about damping."
+msgstr ""
+
+#: doc/classes/Area2D.xml:92
+msgid ""
+"Emitted when another Area2D enters this Area2D. Requires [member monitoring] "
+"to be set to [code]true[/code].\n"
+"[code]area[/code] the other Area2D."
+msgstr ""
+
+#: doc/classes/Area2D.xml:99
+msgid ""
+"Emitted when another Area2D exits this Area2D. Requires [member monitoring] "
+"to be set to [code]true[/code].\n"
+"[code]area[/code] the other Area2D."
+msgstr ""
+
+#: doc/classes/Area2D.xml:109
+msgid ""
+"Emitted when one of another Area2D's [Shape2D]s enters one of this Area2D's "
+"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
+"[code]area_rid[/code] the [RID] of the other Area2D's [CollisionObject2D] "
+"used by the [Physics2DServer].\n"
+"[code]area[/code] the other Area2D.\n"
+"[code]area_shape_index[/code] the index of the [Shape2D] of the other Area2D "
+"used by the [Physics2DServer]. Get the [CollisionShape2D] node with "
+"[code]area.shape_owner_get_owner(area_shape_index)[/code].\n"
+"[code]local_shape_index[/code] the index of the [Shape2D] of this Area2D "
+"used by the [Physics2DServer]. Get the [CollisionShape2D] node with "
+"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
+msgstr ""
+
+#: doc/classes/Area2D.xml:122
+msgid ""
+"Emitted when one of another Area2D's [Shape2D]s exits one of this Area2D's "
+"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
+"[code]area_rid[/code] the [RID] of the other Area2D's [CollisionObject2D] "
+"used by the [Physics2DServer].\n"
+"[code]area[/code] the other Area2D.\n"
+"[code]area_shape_index[/code] the index of the [Shape2D] of the other Area2D "
+"used by the [Physics2DServer]. Get the [CollisionShape2D] node with "
+"[code]area.shape_owner_get_owner(area_shape_index)[/code].\n"
+"[code]local_shape_index[/code] the index of the [Shape2D] of this Area2D "
+"used by the [Physics2DServer]. Get the [CollisionShape2D] node with "
+"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
+msgstr ""
+
+#: doc/classes/Area2D.xml:132
+msgid ""
+"Emitted when a [PhysicsBody2D] or [TileMap] enters this Area2D. Requires "
+"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
+"if the [TileSet] has Collision [Shape2D]s.\n"
+"[code]body[/code] the [Node], if it exists in the tree, of the other "
+"[PhysicsBody2D] or [TileMap]."
+msgstr ""
+
+#: doc/classes/Area2D.xml:139
+msgid ""
+"Emitted when a [PhysicsBody2D] or [TileMap] exits this Area2D. Requires "
+"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
+"if the [TileSet] has Collision [Shape2D]s.\n"
+"[code]body[/code] the [Node], if it exists in the tree, of the other "
+"[PhysicsBody2D] or [TileMap]."
+msgstr ""
+
+#: doc/classes/Area2D.xml:149
+msgid ""
+"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s enters one "
+"of this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
+"[code]true[/code]. [TileMap]s are detected if the [TileSet] has Collision "
+"[Shape2D]s.\n"
+"[code]body_rid[/code] the [RID] of the [PhysicsBody2D] or [TileSet]'s "
+"[CollisionObject2D] used by the [Physics2DServer].\n"
+"[code]body[/code] the [Node], if it exists in the tree, of the "
+"[PhysicsBody2D] or [TileMap].\n"
+"[code]body_shape_index[/code] the index of the [Shape2D] of the "
+"[PhysicsBody2D] or [TileMap] used by the [Physics2DServer]. Get the "
+"[CollisionShape2D] node with [code]body."
+"shape_owner_get_owner(body_shape_index)[/code].\n"
+"[code]local_shape_index[/code] the index of the [Shape2D] of this Area2D "
+"used by the [Physics2DServer]. Get the [CollisionShape2D] node with "
+"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
+msgstr ""
+
+#: doc/classes/Area2D.xml:162
+msgid ""
+"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s exits one of "
+"this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
+"[code]true[/code]. [TileMap]s are detected if the [TileSet] has Collision "
+"[Shape2D]s.\n"
+"[code]body_rid[/code] the [RID] of the [PhysicsBody2D] or [TileSet]'s "
+"[CollisionObject2D] used by the [Physics2DServer].\n"
+"[code]body[/code] the [Node], if it exists in the tree, of the "
+"[PhysicsBody2D] or [TileMap].\n"
+"[code]body_shape_index[/code] the index of the [Shape2D] of the "
+"[PhysicsBody2D] or [TileMap] used by the [Physics2DServer]. Get the "
+"[CollisionShape2D] node with [code]body."
+"shape_owner_get_owner(body_shape_index)[/code].\n"
+"[code]local_shape_index[/code] the index of the [Shape2D] of this Area2D "
+"used by the [Physics2DServer]. Get the [CollisionShape2D] node with "
+"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
+msgstr ""
+
+#: doc/classes/Array.xml:4
+msgid "A generic array datatype."
+msgstr ""
+
+#: doc/classes/Array.xml:7
+msgid ""
+"A generic array that can contain several elements of any type, accessible by "
+"a numerical index starting at 0. Negative indices can be used to count from "
+"the back, like in Python (-1 is the last element, -2 is the second to last, "
+"etc.).\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"var array = [\"One\", 2, 3, \"Four\"]\n"
+"print(array[0]) # One.\n"
+"print(array[2]) # 3.\n"
+"print(array[-1]) # Four.\n"
+"array[2] = \"Three\"\n"
+"print(array[-2]) # Three.\n"
+"[/codeblock]\n"
+"Arrays can be concatenated using the [code]+[/code] operator:\n"
+"[codeblock]\n"
+"var array1 = [\"One\", 2]\n"
+"var array2 = [3, \"Four\"]\n"
+"print(array1 + array2) # [\"One\", 2, 3, \"Four\"]\n"
+"[/codeblock]\n"
+"[b]Note:[/b] Concatenating with the [code]+=[/code] operator will create a "
+"new array, which has a cost. If you want to append another array to an "
+"existing array, [method append_array] is more efficient.\n"
+"[b]Note:[/b] Arrays are always passed by reference. To get a copy of an "
+"array that can be modified independently of the original array, use [method "
+"duplicate].\n"
+"[b]Note:[/b] When declaring an array with [code]const[/code], the array "
+"itself can still be mutated by defining the values at individual indices or "
+"pushing/removing elements. Using [code]const[/code] will only prevent "
+"assigning the constant with another value after it was initialized."
+msgstr ""
+
+#: doc/classes/Array.xml:34
+msgid "Constructs an array from a [PoolColorArray]."
+msgstr ""
+
+#: doc/classes/Array.xml:41
+msgid "Constructs an array from a [PoolVector3Array]."
+msgstr ""
+
+#: doc/classes/Array.xml:48
+msgid "Constructs an array from a [PoolVector2Array]."
+msgstr ""
+
+#: doc/classes/Array.xml:55
+msgid "Constructs an array from a [PoolStringArray]."
+msgstr ""
+
+#: doc/classes/Array.xml:62
+msgid "Constructs an array from a [PoolRealArray]."
+msgstr ""
+
+#: doc/classes/Array.xml:69
+msgid "Constructs an array from a [PoolIntArray]."
+msgstr ""
+
+#: doc/classes/Array.xml:76
+msgid "Constructs an array from a [PoolByteArray]."
+msgstr ""
+
+#: doc/classes/Array.xml:82 doc/classes/PoolByteArray.xml:23
+#: doc/classes/PoolColorArray.xml:23 doc/classes/PoolIntArray.xml:24
+#: doc/classes/PoolRealArray.xml:24 doc/classes/PoolStringArray.xml:24
+#: doc/classes/PoolVector2Array.xml:24 doc/classes/PoolVector3Array.xml:23
+msgid ""
+"Appends an element at the end of the array (alias of [method push_back])."
+msgstr ""
+
+#: doc/classes/Array.xml:88
+msgid ""
+"Appends another array at the end of this array.\n"
+"[codeblock]\n"
+"var array1 = [1, 2, 3]\n"
+"var array2 = [4, 5, 6]\n"
+"array1.append_array(array2)\n"
+"print(array1) # Prints [1, 2, 3, 4, 5, 6].\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Array.xml:100
+msgid ""
+"Returns the last element of the array. Prints an error and returns "
+"[code]null[/code] if the array is empty.\n"
+"[b]Note:[/b] Calling this function is not the same as writing [code]array[-1]"
+"[/code]. If the array is empty, accessing by index will pause project "
+"execution when running from the editor."
+msgstr ""
+
+#: doc/classes/Array.xml:109
+msgid ""
+"Finds the index of an existing value (or the insertion index that maintains "
+"sorting order, if the value is not yet present in the array) using binary "
+"search. Optionally, a [code]before[/code] specifier can be passed. If "
+"[code]false[/code], the returned index comes after all existing entries of "
+"the value in the array.\n"
+"[b]Note:[/b] Calling [method bsearch] on an unsorted array results in "
+"unexpected behavior."
+msgstr ""
+
+#: doc/classes/Array.xml:120
+msgid ""
+"Finds the index of an existing value (or the insertion index that maintains "
+"sorting order, if the value is not yet present in the array) using binary "
+"search and a custom comparison method declared in the [code]obj[/code]. "
+"Optionally, a [code]before[/code] specifier can be passed. If [code]false[/"
+"code], the returned index comes after all existing entries of the value in "
+"the array. The custom method receives two arguments (an element from the "
+"array and the value searched for) and must return [code]true[/code] if the "
+"first argument is less than the second, and return [code]false[/code] "
+"otherwise.\n"
+"[codeblock]\n"
+"func cardinal_to_algebraic(a):\n"
+" match a:\n"
+" \"one\":\n"
+" return 1\n"
+" \"two\":\n"
+" return 2\n"
+" \"three\":\n"
+" return 3\n"
+" \"four\":\n"
+" return 4\n"
+" _:\n"
+" return 0\n"
+"\n"
+"func compare(a, b):\n"
+" return cardinal_to_algebraic(a) < cardinal_to_algebraic(b)\n"
+"\n"
+"func _ready():\n"
+" var a = [\"one\", \"two\", \"three\", \"four\"]\n"
+" # `compare` is defined in this object, so we use `self` as the `obj` "
+"parameter.\n"
+" print(a.bsearch_custom(\"three\", self, \"compare\", true)) # Expected "
+"value is 2.\n"
+"[/codeblock]\n"
+"[b]Note:[/b] Calling [method bsearch_custom] on an unsorted array results in "
+"unexpected behavior."
+msgstr ""
+
+#: doc/classes/Array.xml:148
+msgid ""
+"Clears the array. This is equivalent to using [method resize] with a size of "
+"[code]0[/code]."
+msgstr ""
+
+#: doc/classes/Array.xml:155
+msgid "Returns the number of times an element is in the array."
+msgstr ""
+
+#: doc/classes/Array.xml:162
+msgid ""
+"Returns a copy of the array.\n"
+"If [code]deep[/code] is [code]true[/code], a deep copy is performed: all "
+"nested arrays and dictionaries are duplicated and will not be shared with "
+"the original array. If [code]false[/code], a shallow copy is made and "
+"references to the original nested arrays and dictionaries are kept, so that "
+"modifying a sub-array or dictionary in the copy will also impact those "
+"referenced in the source array."
+msgstr ""
+
+#: doc/classes/Array.xml:169 doc/classes/PoolByteArray.xml:61
+#: doc/classes/PoolColorArray.xml:35 doc/classes/PoolIntArray.xml:36
+#: doc/classes/PoolRealArray.xml:36 doc/classes/PoolStringArray.xml:36
+#: doc/classes/PoolVector2Array.xml:36 doc/classes/PoolVector3Array.xml:35
+msgid "Returns [code]true[/code] if the array is empty."
+msgstr ""
+
+#: doc/classes/Array.xml:175
+msgid ""
+"Removes the first occurrence of a value from the array. To remove an element "
+"by index, use [method remove] instead.\n"
+"[b]Note:[/b] This method acts in-place and doesn't return a value.\n"
+"[b]Note:[/b] On large arrays, this method will be slower if the removed "
+"element is close to the beginning of the array (index 0). This is because "
+"all elements placed after the removed element have to be reindexed."
+msgstr ""
+
+#: doc/classes/Array.xml:185
+msgid ""
+"Searches the array for a value and returns its index or [code]-1[/code] if "
+"not found. Optionally, the initial search index can be passed."
+msgstr ""
+
+#: doc/classes/Array.xml:192
+msgid ""
+"Searches the array in reverse order for a value and returns its index or "
+"[code]-1[/code] if not found."
+msgstr ""
+
+#: doc/classes/Array.xml:198
+msgid ""
+"Returns the first element of the array. Prints an error and returns "
+"[code]null[/code] if the array is empty.\n"
+"[b]Note:[/b] Calling this function is not the same as writing [code]array[0]"
+"[/code]. If the array is empty, accessing by index will pause project "
+"execution when running from the editor."
+msgstr ""
+
+#: doc/classes/Array.xml:206
+msgid ""
+"Returns [code]true[/code] if the array contains the given value.\n"
+"[codeblock]\n"
+"[\"inside\", 7].has(\"inside\") # True\n"
+"[\"inside\", 7].has(\"outside\") # False\n"
+"[\"inside\", 7].has(7) # True\n"
+"[\"inside\", 7].has(\"7\") # False\n"
+"[/codeblock]\n"
+"[b]Note:[/b] This is equivalent to using the [code]in[/code] operator as "
+"follows:\n"
+"[codeblock]\n"
+"# Will evaluate to `true`.\n"
+"if 2 in [2, 4, 6, 8]:\n"
+" pass\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Array.xml:224
+msgid ""
+"Returns a hashed integer value representing the array and its contents.\n"
+"[b]Note:[/b] Arrays with equal contents can still produce different hashes. "
+"Only the exact same arrays will produce the same hashed integer value."
+msgstr ""
+
+#: doc/classes/Array.xml:232
+msgid ""
+"Inserts a new element at a given position in the array. The position must be "
+"valid, or at the end of the array ([code]pos == size()[/code]).\n"
+"[b]Note:[/b] This method acts in-place and doesn't return a value.\n"
+"[b]Note:[/b] On large arrays, this method will be slower if the inserted "
+"element is close to the beginning of the array (index 0). This is because "
+"all elements placed after the newly inserted element have to be reindexed."
+msgstr ""
+
+#: doc/classes/Array.xml:239 doc/classes/PoolByteArray.xml:96
+#: doc/classes/PoolColorArray.xml:48 doc/classes/PoolIntArray.xml:49
+#: doc/classes/PoolRealArray.xml:49 doc/classes/PoolStringArray.xml:49
+#: doc/classes/PoolVector2Array.xml:49 doc/classes/PoolVector3Array.xml:48
+msgid "Reverses the order of the elements in the array."
+msgstr ""
+
+#: doc/classes/Array.xml:245
+msgid ""
+"Returns the maximum value contained in the array if all elements are of "
+"comparable types. If the elements can't be compared, [code]null[/code] is "
+"returned."
+msgstr ""
+
+#: doc/classes/Array.xml:251
+msgid ""
+"Returns the minimum value contained in the array if all elements are of "
+"comparable types. If the elements can't be compared, [code]null[/code] is "
+"returned."
+msgstr ""
+
+#: doc/classes/Array.xml:258
+msgid ""
+"Removes and returns the element of the array at index [code]position[/code]. "
+"If negative, [code]position[/code] is considered relative to the end of the "
+"array. Leaves the array untouched and returns [code]null[/code] if the array "
+"is empty or if it's accessed out of bounds. An error message is printed when "
+"the array is accessed out of bounds, but not when the array is empty.\n"
+"[b]Note:[/b] On large arrays, this method can be slower than [method "
+"pop_back] as it will reindex the array's elements that are located after the "
+"removed element. The larger the array and the lower the index of the removed "
+"element, the slower [method pop_at] will be."
+msgstr ""
+
+#: doc/classes/Array.xml:265
+msgid ""
+"Removes and returns the last element of the array. Returns [code]null[/code] "
+"if the array is empty, without printing an error message. See also [method "
+"pop_front]."
+msgstr ""
+
+#: doc/classes/Array.xml:271
+msgid ""
+"Removes and returns the first element of the array. Returns [code]null[/"
+"code] if the array is empty, without printing an error message. See also "
+"[method pop_back].\n"
+"[b]Note:[/b] On large arrays, this method is much slower than [method "
+"pop_back] as it will reindex all the array's elements every time it's "
+"called. The larger the array, the slower [method pop_front] will be."
+msgstr ""
+
+#: doc/classes/Array.xml:278
+msgid ""
+"Appends an element at the end of the array. See also [method push_front]."
+msgstr ""
+
+#: doc/classes/Array.xml:284
+msgid ""
+"Adds an element at the beginning of the array. See also [method push_back].\n"
+"[b]Note:[/b] On large arrays, this method is much slower than [method "
+"push_back] as it will reindex all the array's elements every time it's "
+"called. The larger the array, the slower [method push_front] will be."
+msgstr ""
+
+#: doc/classes/Array.xml:291
+msgid ""
+"Removes an element from the array by index. If the index does not exist in "
+"the array, nothing happens. To remove an element by searching for its value, "
+"use [method erase] instead.\n"
+"[b]Note:[/b] This method acts in-place and doesn't return a value.\n"
+"[b]Note:[/b] On large arrays, this method will be slower if the removed "
+"element is close to the beginning of the array (index 0). This is because "
+"all elements placed after the removed element have to be reindexed."
+msgstr ""
+
+#: doc/classes/Array.xml:299
+msgid ""
+"Resizes the array to contain a different number of elements. If the array "
+"size is smaller, elements are cleared, if bigger, new elements are "
+"[code]null[/code]."
+msgstr ""
+
+#: doc/classes/Array.xml:307
+msgid ""
+"Searches the array in reverse order. Optionally, a start search index can be "
+"passed. If negative, the start index is considered relative to the end of "
+"the array."
+msgstr ""
+
+#: doc/classes/Array.xml:312
+msgid ""
+"Shuffles the array such that the items will have a random order. This method "
+"uses the global random number generator common to methods such as [method "
+"@GDScript.randi]. Call [method @GDScript.randomize] to ensure that a new "
+"seed will be used each time if you want non-reproducible shuffling."
+msgstr ""
+
+#: doc/classes/Array.xml:318
+msgid "Returns the number of elements in the array."
+msgstr ""
+
+#: doc/classes/Array.xml:328
+msgid ""
+"Duplicates the subset described in the function and returns it in an array, "
+"deeply copying the array if [code]deep[/code] is [code]true[/code]. Lower "
+"and upper index are inclusive, with the [code]step[/code] describing the "
+"change between indices while slicing."
+msgstr ""
+
+#: doc/classes/Array.xml:333
+msgid ""
+"Sorts the array.\n"
+"[b]Note:[/b] Strings are sorted in alphabetical order (as opposed to natural "
+"order). This may lead to unexpected behavior when sorting an array of "
+"strings ending with a sequence of numbers. Consider the following example:\n"
+"[codeblock]\n"
+"var strings = [\"string1\", \"string2\", \"string10\", \"string11\"]\n"
+"strings.sort()\n"
+"print(strings) # Prints [string1, string10, string11, string2]\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Array.xml:346
+msgid ""
+"Sorts the array using a custom method. The arguments are an object that "
+"holds the method and the name of such method. The custom method receives two "
+"arguments (a pair of elements from the array) and must return either "
+"[code]true[/code] or [code]false[/code].\n"
+"For two elements [code]a[/code] and [code]b[/code], if the given method "
+"returns [code]true[/code], element [code]b[/code] will be after element "
+"[code]a[/code] in the array.\n"
+"[b]Note:[/b] You cannot randomize the return value as the heapsort algorithm "
+"expects a deterministic result. Doing so will result in unexpected "
+"behavior.\n"
+"[codeblock]\n"
+"class MyCustomSorter:\n"
+" static func sort_ascending(a, b):\n"
+" if a[0] < b[0]:\n"
+" return true\n"
+" return false\n"
+"\n"
+"var my_items = [[5, \"Potato\"], [9, \"Rice\"], [4, \"Tomato\"]]\n"
+"my_items.sort_custom(MyCustomSorter, \"sort_ascending\")\n"
+"print(my_items) # Prints [[4, Tomato], [5, Potato], [9, Rice]].\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:4
+msgid ""
+"[Mesh] type that provides utility for constructing a surface from arrays."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:7
+msgid ""
+"The [ArrayMesh] is used to construct a [Mesh] by specifying the attributes "
+"as arrays.\n"
+"The most basic example is the creation of a single triangle:\n"
+"[codeblock]\n"
+"var vertices = PoolVector3Array()\n"
+"vertices.push_back(Vector3(0, 1, 0))\n"
+"vertices.push_back(Vector3(1, 0, 0))\n"
+"vertices.push_back(Vector3(0, 0, 1))\n"
+"# Initialize the ArrayMesh.\n"
+"var arr_mesh = ArrayMesh.new()\n"
+"var arrays = []\n"
+"arrays.resize(ArrayMesh.ARRAY_MAX)\n"
+"arrays[ArrayMesh.ARRAY_VERTEX] = vertices\n"
+"# Create the Mesh.\n"
+"arr_mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, arrays)\n"
+"var m = MeshInstance.new()\n"
+"m.mesh = arr_mesh\n"
+"[/codeblock]\n"
+"The [MeshInstance] is ready to be added to the [SceneTree] to be shown.\n"
+"See also [ImmediateGeometry], [MeshDataTool] and [SurfaceTool] for "
+"procedural geometry generation.\n"
+"[b]Note:[/b] Godot uses clockwise [url=https://learnopengl.com/Advanced-"
+"OpenGL/Face-culling]winding order[/url] for front faces of triangle "
+"primitive modes."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:29
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/content/procedural_geometry/"
+"arraymesh.html"
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:36
+msgid ""
+"Adds name for a blend shape that will be added with [method "
+"add_surface_from_arrays]. Must be called before surface is added."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:46
+msgid ""
+"Creates a new surface.\n"
+"Surfaces are created to be rendered using a [code]primitive[/code], which "
+"may be any of the types defined in [enum Mesh.PrimitiveType]. (As a note, "
+"when using indices, it is recommended to only use points, lines, or "
+"triangles.) [method Mesh.get_surface_count] will become the [code]surf_idx[/"
+"code] for this new surface.\n"
+"The [code]arrays[/code] argument is an array of arrays. See [enum ArrayType] "
+"for the values used in this array. For example, [code]arrays[0][/code] is "
+"the array of vertices. That first vertex sub-array is always required; the "
+"others are optional. Adding an index array puts this function into \"index "
+"mode\" where the vertex and other arrays become the sources of data and the "
+"index array defines the vertex order. All sub-arrays must have the same "
+"length as the vertex array or be empty, except for [constant ARRAY_INDEX] if "
+"it is used."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:54
+msgid "Removes all blend shapes from this [ArrayMesh]."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:60
+msgid "Removes all surfaces from this [ArrayMesh]."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:66
+msgid "Returns the number of blend shapes that the [ArrayMesh] holds."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:73
+msgid "Returns the name of the blend shape at this index."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:81
+msgid ""
+"Will perform a UV unwrap on the [ArrayMesh] to prepare the mesh for "
+"lightmapping."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:87
+msgid "Will regenerate normal maps for the [ArrayMesh]."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:101
+msgid ""
+"Returns the index of the first surface with this name held within this "
+"[ArrayMesh]. If none are found, -1 is returned."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:108
+msgid ""
+"Returns the length in indices of the index array in the requested surface "
+"(see [method add_surface_from_arrays])."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:115
+msgid ""
+"Returns the length in vertices of the vertex array in the requested surface "
+"(see [method add_surface_from_arrays])."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:122
+msgid ""
+"Returns the format mask of the requested surface (see [method "
+"add_surface_from_arrays])."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:129
+msgid "Gets the name assigned to this surface."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:136
+msgid ""
+"Returns the primitive type of the requested surface (see [method "
+"add_surface_from_arrays])."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:143
+msgid ""
+"Removes a surface at position [code]surf_idx[/code], shifting greater "
+"surfaces one [code]surf_idx[/code] slot down."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:151
+msgid "Sets a name for a given surface."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:160
+msgid ""
+"Updates a specified region of mesh arrays on the GPU.\n"
+"[b]Warning:[/b] Only use if you know what you are doing. You can easily "
+"cause crashes by calling this function with improper arguments."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:167
+msgid "Sets the blend shape mode to one of [enum Mesh.BlendShapeMode]."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:170 doc/classes/PrimitiveMesh.xml:26
+msgid ""
+"Overrides the [AABB] with one defined by user for use with frustum culling. "
+"Especially useful to avoid unexpected culling when using a shader to offset "
+"vertices."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:175
+msgid "Default value used for index_array_len when no indices are present."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:178
+msgid "Amount of weights/bone indices per vertex (always 4)."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:181
+msgid "[PoolVector3Array], [PoolVector2Array], or [Array] of vertex positions."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:184
+msgid "[PoolVector3Array] of vertex normals."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:187
+msgid ""
+"[PoolRealArray] of vertex tangents. Each element in groups of 4 floats, "
+"first 3 floats determine the tangent, and the last the binormal direction as "
+"-1 or 1."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:190
+msgid "[PoolColorArray] of vertex colors."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:193
+msgid "[PoolVector2Array] for UV coordinates."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:196
+msgid "[PoolVector2Array] for second UV coordinates."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:199
+msgid ""
+"[PoolRealArray] or [PoolIntArray] of bone indices. Each element in groups of "
+"4 floats."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:202
+msgid "[PoolRealArray] of bone weights. Each element in groups of 4 floats."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:205
+msgid ""
+"[PoolIntArray] of integers used as indices referencing vertices, colors, "
+"normals, tangents, and textures. All of those arrays must have the same "
+"number of elements as the vertex array. No index can be beyond the vertex "
+"array size. When this index array is present, it puts the function into "
+"\"index mode,\" where the index selects the *i*'th vertex, normal, tangent, "
+"color, UV, etc. This means if you want to have different normals or colors "
+"along an edge, you have to duplicate the vertices.\n"
+"For triangles, the index array is interpreted as triples, referring to the "
+"vertices of each triangle. For lines, the index array is in pairs indicating "
+"the start and end of each line."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:209 doc/classes/Mesh.xml:225
+#: doc/classes/VisualServer.xml:3270
+msgid "Represents the size of the [enum ArrayType] enum."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:212
+msgid "Array format will include vertices (mandatory)."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:215
+msgid "Array format will include normals."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:218
+msgid "Array format will include tangents."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:221
+msgid "Array format will include a color array."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:224
+msgid "Array format will include UVs."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:227
+msgid "Array format will include another set of UVs."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:230
+msgid "Array format will include bone indices."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:233
+msgid "Array format will include bone weights."
+msgstr ""
+
+#: doc/classes/ArrayMesh.xml:236
+msgid "Index array will be used."
+msgstr ""
+
+#: doc/classes/ARVRAnchor.xml:4
+msgid "An anchor point in AR space."
+msgstr ""
+
+#: doc/classes/ARVRAnchor.xml:7
+msgid ""
+"The [ARVRAnchor] point is a spatial node that maps a real world location "
+"identified by the AR platform to a position within the game world. For "
+"example, as long as plane detection in ARKit is on, ARKit will identify and "
+"update the position of planes (tables, floors, etc) and create anchors for "
+"them.\n"
+"This node is mapped to one of the anchors through its unique ID. When you "
+"receive a signal that a new anchor is available, you should add this node to "
+"your scene for that anchor. You can predefine nodes and set the ID; the "
+"nodes will simply remain on 0,0,0 until a plane is recognized.\n"
+"Keep in mind that, as long as plane detection is enabled, the size, placing "
+"and orientation of an anchor will be updated as the detection logic learns "
+"more about the real world out there especially if only part of the surface "
+"is in view."
+msgstr ""
+
+#: doc/classes/ARVRAnchor.xml:17
+msgid "Returns the name given to this anchor."
+msgstr ""
+
+#: doc/classes/ARVRAnchor.xml:23
+msgid ""
+"Returns [code]true[/code] if the anchor is being tracked and [code]false[/"
+"code] if no anchor with this ID is currently known."
+msgstr ""
+
+#: doc/classes/ARVRAnchor.xml:29
+msgid ""
+"If provided by the [ARVRInterface], this returns a mesh object for the "
+"anchor. For an anchor, this can be a shape related to the object being "
+"tracked or it can be a mesh that provides topology related to the anchor and "
+"can be used to create shadows/reflections on surfaces or for generating "
+"collision shapes."
+msgstr ""
+
+#: doc/classes/ARVRAnchor.xml:35
+msgid ""
+"Returns a plane aligned with our anchor; handy for intersection testing."
+msgstr ""
+
+#: doc/classes/ARVRAnchor.xml:41
+msgid ""
+"Returns the estimated size of the plane that was detected. Say when the "
+"anchor relates to a table in the real world, this is the estimated size of "
+"the surface of that table."
+msgstr ""
+
+#: doc/classes/ARVRAnchor.xml:47
+msgid ""
+"The anchor's ID. You can set this before the anchor itself exists. The first "
+"anchor gets an ID of [code]1[/code], the second an ID of [code]2[/code], "
+"etc. When anchors get removed, the engine can then assign the corresponding "
+"ID to new anchors. The most common situation where anchors \"disappear\" is "
+"when the AR server identifies that two anchors represent different parts of "
+"the same plane and merges them."
+msgstr ""
+
+#: doc/classes/ARVRAnchor.xml:54
+msgid ""
+"Emitted when the mesh associated with the anchor changes or when one becomes "
+"available. This is especially important for topology that is constantly "
+"being [code]mesh_updated[/code]."
+msgstr ""
+
+#: doc/classes/ARVRCamera.xml:4
+msgid ""
+"A camera node with a few overrules for AR/VR applied, such as location "
+"tracking."
+msgstr ""
+
+#: doc/classes/ARVRCamera.xml:7
+msgid ""
+"This is a helper spatial node for our camera; note that, if stereoscopic "
+"rendering is applicable (VR-HMD), most of the camera properties are ignored, "
+"as the HMD information overrides them. The only properties that can be "
+"trusted are the near and far planes.\n"
+"The position and orientation of this node is automatically updated by the "
+"ARVR Server to represent the location of the HMD if such tracking is "
+"available and can thus be used by game logic. Note that, in contrast to the "
+"ARVR Controller, the render thread has access to the most up-to-date "
+"tracking data of the HMD and the location of the ARVRCamera can lag a few "
+"milliseconds behind what is used for rendering as a result."
+msgstr ""
+
+#: doc/classes/ARVRCamera.xml:11 doc/classes/ARVRController.xml:12
+#: doc/classes/ARVRInterface.xml:11 doc/classes/ARVROrigin.xml:13
+#: doc/classes/ARVRPositionalTracker.xml:12 doc/classes/ARVRServer.xml:10
+msgid "https://docs.godotengine.org/en/3.4/tutorials/vr/index.html"
+msgstr ""
+
+#: doc/classes/ARVRController.xml:4
+msgid "A spatial node representing a spatially-tracked controller."
+msgstr ""
+
+#: doc/classes/ARVRController.xml:7
+msgid ""
+"This is a helper spatial node that is linked to the tracking of controllers. "
+"It also offers several handy passthroughs to the state of buttons and such "
+"on the controllers.\n"
+"Controllers are linked by their ID. You can create controller nodes before "
+"the controllers are available. If your game always uses two controllers (one "
+"for each hand), you can predefine the controllers with ID 1 and 2; they will "
+"become active as soon as the controllers are identified. If you expect "
+"additional controllers to be used, you should react to the signals and add "
+"ARVRController nodes to your scene.\n"
+"The position of the controller node is automatically updated by the "
+"[ARVRServer]. This makes this node ideal to add child nodes to visualize the "
+"controller."
+msgstr ""
+
+#: doc/classes/ARVRController.xml:18
+msgid ""
+"If active, returns the name of the associated controller if provided by the "
+"AR/VR SDK used."
+msgstr ""
+
+#: doc/classes/ARVRController.xml:24
+msgid ""
+"Returns the hand holding this controller, if known. See [enum "
+"ARVRPositionalTracker.TrackerHand]."
+msgstr ""
+
+#: doc/classes/ARVRController.xml:30
+msgid ""
+"Returns [code]true[/code] if the bound controller is active. ARVR systems "
+"attempt to track active controllers."
+msgstr ""
+
+#: doc/classes/ARVRController.xml:37
+msgid ""
+"Returns the value of the given axis for things like triggers, touchpads, "
+"etc. that are embedded into the controller."
+msgstr ""
+
+#: doc/classes/ARVRController.xml:43
+msgid ""
+"Returns the ID of the joystick object bound to this. Every controller "
+"tracked by the [ARVRServer] that has buttons and axis will also be "
+"registered as a joystick within Godot. This means that all the normal "
+"joystick tracking and input mapping will work for buttons and axis found on "
+"the AR/VR controllers. This ID is purely offered as information so you can "
+"link up the controller with its joystick entry."
+msgstr ""
+
+#: doc/classes/ARVRController.xml:49
+msgid ""
+"If provided by the [ARVRInterface], this returns a mesh associated with the "
+"controller. This can be used to visualize the controller."
+msgstr ""
+
+#: doc/classes/ARVRController.xml:56
+msgid ""
+"Returns [code]true[/code] if the button at index [code]button[/code] is "
+"pressed. See [enum JoystickList], in particular the [code]JOY_VR_*[/code] "
+"constants."
+msgstr ""
+
+#: doc/classes/ARVRController.xml:62
+msgid ""
+"The controller's ID.\n"
+"A controller ID of 0 is unbound and will always result in an inactive node. "
+"Controller ID 1 is reserved for the first controller that identifies itself "
+"as the left-hand controller and ID 2 is reserved for the first controller "
+"that identifies itself as the right-hand controller.\n"
+"For any other controller that the [ARVRServer] detects, we continue with "
+"controller ID 3.\n"
+"When a controller is turned off, its slot is freed. This ensures controllers "
+"will keep the same ID even when controllers with lower IDs are turned off."
+msgstr ""
+
+#: doc/classes/ARVRController.xml:68
+msgid ""
+"The degree to which the controller vibrates. Ranges from [code]0.0[/code] to "
+"[code]1.0[/code] with precision [code].01[/code]. If changed, updates "
+"[member ARVRPositionalTracker.rumble] accordingly.\n"
+"This is a useful property to animate if you want the controller to vibrate "
+"for a limited duration."
+msgstr ""
+
+#: doc/classes/ARVRController.xml:76
+msgid "Emitted when a button on this controller is pressed."
+msgstr ""
+
+#: doc/classes/ARVRController.xml:82
+msgid "Emitted when a button on this controller is released."
+msgstr ""
+
+#: doc/classes/ARVRController.xml:88
+msgid ""
+"Emitted when the mesh associated with the controller changes or when one "
+"becomes available. Generally speaking this will be a static mesh after "
+"becoming available."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:4
+msgid "Base class for an AR/VR interface implementation."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:7
+msgid ""
+"This class needs to be implemented to make an AR or VR platform available to "
+"Godot and these should be implemented as C++ modules or GDNative modules "
+"(note that for GDNative the subclass ARVRScriptInterface should be used). "
+"Part of the interface is exposed to GDScript so you can detect, enable and "
+"configure an AR or VR platform.\n"
+"Interfaces should be written in such a way that simply enabling them will "
+"give us a working setup. You can query the available interfaces through "
+"[ARVRServer]."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:17
+msgid ""
+"If this is an AR interface that requires displaying a camera feed as the "
+"background, this method returns the feed ID in the [CameraServer] for this "
+"interface."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:23
+msgid ""
+"Returns a combination of [enum Capabilities] flags providing information "
+"about the capabilities of this interface."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:29
+msgid "Returns the name of this interface (OpenVR, OpenHMD, ARKit, etc)."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:35
+msgid ""
+"Returns the resolution at which we should render our intermediate results "
+"before things like lens distortion are applied by the VR platform."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:41
+msgid ""
+"If supported, returns the status of our tracking. This will allow you to "
+"provide feedback to the user whether there are issues with positional "
+"tracking."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:47
+msgid ""
+"Call this to initialize this interface. The first interface that is "
+"initialized is identified as the primary interface and it will be used for "
+"rendering output.\n"
+"After initializing the interface you want to use you then need to enable the "
+"AR/VR mode of a viewport and rendering should commence.\n"
+"[b]Note:[/b] You must enable the AR/VR mode on the main viewport for any "
+"device that uses the main output of Godot, such as for mobile VR.\n"
+"If you do this for a platform that handles its own output (such as OpenVR) "
+"Godot will show just one eye without distortion on screen. Alternatively, "
+"you can add a separate viewport node to your scene and enable AR/VR on that "
+"viewport. It will be used to output to the HMD, leaving you free to do "
+"anything you like in the main window, such as using a separate camera as a "
+"spectator camera or rendering something completely different.\n"
+"While currently not used, you can activate additional interfaces. You may "
+"wish to do this if you want to track controllers from other platforms. "
+"However, at this point in time only one interface can render to an HMD."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:57
+msgid ""
+"Returns [code]true[/code] if the current output of this interface is in "
+"stereo."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:63
+msgid "Turns the interface off."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:69
+msgid "On an AR interface, [code]true[/code] if anchor detection is enabled."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:72
+msgid "[code]true[/code] if this interface been initialized."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:75
+msgid "[code]true[/code] if this is the primary interface."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:80
+msgid "No ARVR capabilities."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:83
+msgid ""
+"This interface can work with normal rendering output (non-HMD based AR)."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:86
+msgid "This interface supports stereoscopic rendering."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:89
+msgid "This interface supports AR (video background and real world tracking)."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:92
+msgid ""
+"This interface outputs to an external device. If the main viewport is used, "
+"the on screen output is an unmodified buffer of either the left or right eye "
+"(stretched if the viewport size is not changed to the same aspect ratio of "
+"[method get_render_targetsize]). Using a separate viewport node frees up the "
+"main viewport for other purposes."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:95
+msgid ""
+"Mono output, this is mostly used internally when retrieving positioning "
+"information for our camera node or when stereo scopic rendering is not "
+"supported."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:98
+msgid ""
+"Left eye output, this is mostly used internally when rendering the image for "
+"the left eye and obtaining positioning and projection information."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:101
+msgid ""
+"Right eye output, this is mostly used internally when rendering the image "
+"for the right eye and obtaining positioning and projection information."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:104
+msgid "Tracking is behaving as expected."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:107
+msgid ""
+"Tracking is hindered by excessive motion (the player is moving faster than "
+"tracking can keep up)."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:110
+msgid ""
+"Tracking is hindered by insufficient features, it's too dark (for camera-"
+"based tracking), player is blocked, etc."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:113
+msgid ""
+"We don't know the status of the tracking or this interface does not provide "
+"feedback."
+msgstr ""
+
+#: doc/classes/ARVRInterface.xml:116
+msgid ""
+"Tracking is not functional (camera not plugged in or obscured, lighthouses "
+"turned off, etc.)."
+msgstr ""
+
+#: modules/gdnative/doc_classes/ARVRInterfaceGDNative.xml:4
+msgid "GDNative wrapper for an ARVR interface."
+msgstr ""
+
+#: modules/gdnative/doc_classes/ARVRInterfaceGDNative.xml:7
+msgid ""
+"This is a wrapper class for GDNative implementations of the ARVR interface. "
+"To use a GDNative ARVR interface, simply instantiate this object and set "
+"your GDNative library containing the ARVR interface implementation."
+msgstr ""
+
+#: doc/classes/ARVROrigin.xml:4
+msgid "The origin point in AR/VR."
+msgstr ""
+
+#: doc/classes/ARVROrigin.xml:7
+msgid ""
+"This is a special node within the AR/VR system that maps the physical "
+"location of the center of our tracking space to the virtual location within "
+"our game world.\n"
+"There should be only one of these nodes in your scene and you must have one. "
+"All the ARVRCamera, ARVRController and ARVRAnchor nodes should be direct "
+"children of this node for spatial tracking to work correctly.\n"
+"It is the position of this node that you update when your character needs to "
+"move through your game world while we're not moving in the real world. "
+"Movement in the real world is always in relation to this origin point.\n"
+"For example, if your character is driving a car, the ARVROrigin node should "
+"be a child node of this car. Or, if you're implementing a teleport system to "
+"move your character, you should change the position of this node."
+msgstr ""
+
+#: doc/classes/ARVROrigin.xml:19
+msgid ""
+"Allows you to adjust the scale to your game's units. Most AR/VR platforms "
+"assume a scale of 1 game world unit = 1 real world meter.\n"
+"[b]Note:[/b] This method is a passthrough to the [ARVRServer] itself."
+msgstr ""
+
+#: doc/classes/ARVRPositionalTracker.xml:4
+msgid "A tracked object."
+msgstr ""
+
+#: doc/classes/ARVRPositionalTracker.xml:7
+msgid ""
+"An instance of this object represents a device that is tracked, such as a "
+"controller or anchor point. HMDs aren't represented here as they are handled "
+"internally.\n"
+"As controllers are turned on and the AR/VR interface detects them, instances "
+"of this object are automatically added to this list of active tracking "
+"objects accessible through the [ARVRServer].\n"
+"The [ARVRController] and [ARVRAnchor] both consume objects of this type and "
+"should be used in your project. The positional trackers are just under-the-"
+"hood objects that make this all work. These are mostly exposed so that "
+"GDNative-based interfaces can interact with them."
+msgstr ""
+
+#: doc/classes/ARVRPositionalTracker.xml:18
+msgid ""
+"Returns the hand holding this tracker, if known. See [enum TrackerHand] "
+"constants."
+msgstr ""
+
+#: doc/classes/ARVRPositionalTracker.xml:24
+msgid ""
+"If this is a controller that is being tracked, the controller will also be "
+"represented by a joystick entry with this ID."
+msgstr ""
+
+#: doc/classes/ARVRPositionalTracker.xml:30
+msgid ""
+"Returns the mesh related to a controller or anchor point if one is available."
+msgstr ""
+
+#: doc/classes/ARVRPositionalTracker.xml:36
+msgid "Returns the controller or anchor point's name if available."
+msgstr ""
+
+#: doc/classes/ARVRPositionalTracker.xml:42
+msgid "Returns the controller's orientation matrix."
+msgstr ""
+
+#: doc/classes/ARVRPositionalTracker.xml:48
+msgid "Returns the world-space controller position."
+msgstr ""
+
+#: doc/classes/ARVRPositionalTracker.xml:54
+msgid ""
+"Returns the internal tracker ID. This uniquely identifies the tracker per "
+"tracker type and matches the ID you need to specify for nodes such as the "
+"[ARVRController] and [ARVRAnchor] nodes."
+msgstr ""
+
+#: doc/classes/ARVRPositionalTracker.xml:60
+msgid "Returns [code]true[/code] if this device tracks orientation."
+msgstr ""
+
+#: doc/classes/ARVRPositionalTracker.xml:66
+msgid "Returns [code]true[/code] if this device tracks position."
+msgstr ""
+
+#: doc/classes/ARVRPositionalTracker.xml:73
+msgid "Returns the transform combining this device's orientation and position."
+msgstr ""
+
+#: doc/classes/ARVRPositionalTracker.xml:79
+msgid "Returns the tracker's type."
+msgstr ""
+
+#: doc/classes/ARVRPositionalTracker.xml:85
+msgid ""
+"The degree to which the tracker rumbles. Ranges from [code]0.0[/code] to "
+"[code]1.0[/code] with precision [code].01[/code]."
+msgstr ""
+
+#: doc/classes/ARVRPositionalTracker.xml:90
+msgid "The hand this tracker is held in is unknown or not applicable."
+msgstr ""
+
+#: doc/classes/ARVRPositionalTracker.xml:93
+msgid "This tracker is the left hand controller."
+msgstr ""
+
+#: doc/classes/ARVRPositionalTracker.xml:96
+msgid "This tracker is the right hand controller."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:4
+msgid "Server for AR and VR features."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:7
+msgid ""
+"The AR/VR server is the heart of our Advanced and Virtual Reality solution "
+"and handles all the processing."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:17
+msgid "Registers an [ARVRInterface] object."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:24
+msgid ""
+"Registers a new [ARVRPositionalTracker] that tracks a spatial location in "
+"real space."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:32
+msgid ""
+"This is an important function to understand correctly. AR and VR platforms "
+"all handle positioning slightly differently.\n"
+"For platforms that do not offer spatial tracking, our origin point (0,0,0) "
+"is the location of our HMD, but you have little control over the direction "
+"the player is facing in the real world.\n"
+"For platforms that do offer spatial tracking, our origin point depends very "
+"much on the system. For OpenVR, our origin point is usually the center of "
+"the tracking space, on the ground. For other platforms, it's often the "
+"location of the tracking camera.\n"
+"This method allows you to center your tracker on the location of the HMD. It "
+"will take the current location of the HMD and use that to adjust all your "
+"tracking data; in essence, realigning the real world to your player's "
+"current position in the game world.\n"
+"For this method to produce usable results, tracking information must be "
+"available. This often takes a few frames after starting your game.\n"
+"You should call this method after a few seconds have passed. For instance, "
+"when the user requests a realignment of the display holding a designated "
+"button on a controller for a short period of time, or when implementing a "
+"teleport mechanism."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:44
+msgid ""
+"Clears our current primary interface if it is set to the provided interface."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:51
+msgid ""
+"Finds an interface by its name. For instance, if your project uses "
+"capabilities of an AR/VR platform, you can find the interface for that "
+"platform by name and initialize it."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:57
+msgid "Returns the primary interface's transformation."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:64
+msgid ""
+"Returns the interface registered at a given index in our list of interfaces."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:70
+msgid ""
+"Returns the number of interfaces currently registered with the AR/VR server. "
+"If your project supports multiple AR/VR platforms, you can look through the "
+"available interface, and either present the user with a selection or simply "
+"try to initialize each interface and use the first one that returns "
+"[code]true[/code]."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:76
+msgid ""
+"Returns a list of available interfaces the ID and name of each interface."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:82
+msgid ""
+"Returns the absolute timestamp (in μs) of the last [ARVRServer] commit of "
+"the AR/VR eyes to [VisualServer]. The value comes from an internal call to "
+"[method OS.get_ticks_usec]."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:88
+msgid ""
+"Returns the duration (in μs) of the last frame. This is computed as the "
+"difference between [method get_last_commit_usec] and [method "
+"get_last_process_usec] when committing."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:94
+msgid ""
+"Returns the absolute timestamp (in μs) of the last [ARVRServer] process "
+"callback. The value comes from an internal call to [method OS."
+"get_ticks_usec]."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:100
+msgid ""
+"Returns the reference frame transform. Mostly used internally and exposed "
+"for GDNative build interfaces."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:107
+msgid "Returns the positional tracker at the given ID."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:113
+msgid "Returns the number of trackers currently registered."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:120
+msgid "Removes this interface."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:127
+msgid "Removes this positional tracker."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:133
+msgid "The primary [ARVRInterface] currently bound to the [ARVRServer]."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:136
+msgid ""
+"Allows you to adjust the scale to your game's units. Most AR/VR platforms "
+"assume a scale of 1 game world unit = 1 real world meter."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:143
+msgid "Emitted when a new interface has been added."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:149
+msgid "Emitted when an interface is removed."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:157
+msgid ""
+"Emitted when a new tracker has been added. If you don't use a fixed number "
+"of controllers or if you're using [ARVRAnchor]s for an AR solution, it is "
+"important to react to this signal to add the appropriate [ARVRController] or "
+"[ARVRAnchor] nodes related to this new tracker."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:165
+msgid ""
+"Emitted when a tracker is removed. You should remove any [ARVRController] or "
+"[ARVRAnchor] points if applicable. This is not mandatory, the nodes simply "
+"become inactive and will be made active again when a new tracker becomes "
+"available (i.e. a new controller is switched on that takes the place of the "
+"previous one)."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:171
+msgid "The tracker tracks the location of a controller."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:174
+msgid "The tracker tracks the location of a base station."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:177
+msgid "The tracker tracks the location and size of an AR anchor."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:180
+msgid "Used internally to filter trackers of any known type."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:183
+msgid "Used internally if we haven't set the tracker type yet."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:186
+msgid "Used internally to select all trackers."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:189
+msgid ""
+"Fully reset the orientation of the HMD. Regardless of what direction the "
+"user is looking to in the real world. The user will look dead ahead in the "
+"virtual world."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:192
+msgid ""
+"Resets the orientation but keeps the tilt of the device. So if we're looking "
+"down, we keep looking down but heading will be reset."
+msgstr ""
+
+#: doc/classes/ARVRServer.xml:195
+msgid ""
+"Does not reset the orientation of the HMD, only the position of the player "
+"gets centered."
+msgstr ""
+
+#: doc/classes/AspectRatioContainer.xml:4
+msgid "Container that preserves its child controls' aspect ratio."
+msgstr ""
+
+#: doc/classes/AspectRatioContainer.xml:7
+msgid ""
+"Arranges child controls in a way to preserve their aspect ratio "
+"automatically whenever the container is resized. Solves the problem where "
+"the container size is dynamic and the contents' size needs to adjust "
+"accordingly without losing proportions."
+msgstr ""
+
+#: doc/classes/AspectRatioContainer.xml:15
+msgid "Specifies the horizontal relative position of child controls."
+msgstr ""
+
+#: doc/classes/AspectRatioContainer.xml:18
+msgid "Specifies the vertical relative position of child controls."
+msgstr ""
+
+#: doc/classes/AspectRatioContainer.xml:21
+msgid ""
+"The aspect ratio to enforce on child controls. This is the width divided by "
+"the height. The ratio depends on the [member stretch_mode]."
+msgstr ""
+
+#: doc/classes/AspectRatioContainer.xml:24
+msgid "The stretch mode used to align child controls."
+msgstr ""
+
+#: doc/classes/AspectRatioContainer.xml:29
+msgid ""
+"The height of child controls is automatically adjusted based on the width of "
+"the container."
+msgstr ""
+
+#: doc/classes/AspectRatioContainer.xml:32
+msgid ""
+"The width of child controls is automatically adjusted based on the height of "
+"the container."
+msgstr ""
+
+#: doc/classes/AspectRatioContainer.xml:35
+msgid ""
+"The bounding rectangle of child controls is automatically adjusted to fit "
+"inside the container while keeping the aspect ratio."
+msgstr ""
+
+#: doc/classes/AspectRatioContainer.xml:38
+msgid ""
+"The width and height of child controls is automatically adjusted to make "
+"their bounding rectangle cover the entire area of the container while "
+"keeping the aspect ratio.\n"
+"When the bounding rectangle of child controls exceed the container's size "
+"and [member Control.rect_clip_content] is enabled, this allows to show only "
+"the container's area restricted by its own bounding rectangle."
+msgstr ""
+
+#: doc/classes/AspectRatioContainer.xml:42
+msgid ""
+"Aligns child controls with the beginning (left or top) of the container."
+msgstr ""
+
+#: doc/classes/AspectRatioContainer.xml:45
+msgid "Aligns child controls with the center of the container."
+msgstr ""
+
+#: doc/classes/AspectRatioContainer.xml:48
+msgid "Aligns child controls with the end (right or bottom) of the container."
+msgstr ""
+
+#: doc/classes/AStar.xml:4
+msgid ""
+"An implementation of A* to find the shortest paths among connected points in "
+"space."
+msgstr ""
+
+#: doc/classes/AStar.xml:7
+msgid ""
+"A* (A star) is a computer algorithm that is widely used in pathfinding and "
+"graph traversal, the process of plotting short paths among vertices "
+"(points), passing through a given set of edges (segments). It enjoys "
+"widespread use due to its performance and accuracy. Godot's A* "
+"implementation uses points in three-dimensional space and Euclidean "
+"distances by default.\n"
+"You must add points manually with [method add_point] and create segments "
+"manually with [method connect_points]. Then you can test if there is a path "
+"between two points with the [method are_points_connected] function, get a "
+"path containing indices by [method get_id_path], or one containing actual "
+"coordinates with [method get_point_path].\n"
+"It is also possible to use non-Euclidean distances. To do so, create a class "
+"that extends [code]AStar[/code] and override methods [method _compute_cost] "
+"and [method _estimate_cost]. Both take two indices and return a length, as "
+"is shown in the following example.\n"
+"[codeblock]\n"
+"class MyAStar:\n"
+" extends AStar\n"
+"\n"
+" func _compute_cost(u, v):\n"
+" return abs(u - v)\n"
+"\n"
+" func _estimate_cost(u, v):\n"
+" return min(0, abs(u - v) - 1)\n"
+"[/codeblock]\n"
+"[method _estimate_cost] should return a lower bound of the distance, i.e. "
+"[code]_estimate_cost(u, v) <= _compute_cost(u, v)[/code]. This serves as a "
+"hint to the algorithm because the custom [code]_compute_cost[/code] might be "
+"computation-heavy. If this is not the case, make [method _estimate_cost] "
+"return the same value as [method _compute_cost] to provide the algorithm "
+"with the most accurate information.\n"
+"If the default [method _estimate_cost] and [method _compute_cost] methods "
+"are used, or if the supplied [method _estimate_cost] method returns a lower "
+"bound of the cost, then the paths returned by A* will be the lowest-cost "
+"paths. Here, the cost of a path equals the sum of the [method _compute_cost] "
+"results of all segments in the path multiplied by the [code]weight_scale[/"
+"code]s of the endpoints of the respective segments. If the default methods "
+"are used and the [code]weight_scale[/code]s of all points are set to "
+"[code]1.0[/code], then this equals the sum of Euclidean distances of all "
+"segments in the path."
+msgstr ""
+
+#: doc/classes/AStar.xml:31
+msgid ""
+"Called when computing the cost between two connected points.\n"
+"Note that this function is hidden in the default [code]AStar[/code] class."
+msgstr ""
+
+#: doc/classes/AStar.xml:40
+msgid ""
+"Called when estimating the cost between a point and the path's ending "
+"point.\n"
+"Note that this function is hidden in the default [code]AStar[/code] class."
+msgstr ""
+
+#: doc/classes/AStar.xml:50
+msgid ""
+"Adds a new point at the given position with the given identifier. The "
+"[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must "
+"be 1 or larger.\n"
+"The [code]weight_scale[/code] is multiplied by the result of [method "
+"_compute_cost] when determining the overall cost of traveling across a "
+"segment from a neighboring point to this point. Thus, all else being equal, "
+"the algorithm prefers points with lower [code]weight_scale[/code]s to form a "
+"path.\n"
+"[codeblock]\n"
+"var astar = AStar.new()\n"
+"astar.add_point(1, Vector3(1, 0, 0), 4) # Adds the point (1, 0, 0) with "
+"weight_scale 4 and id 1\n"
+"[/codeblock]\n"
+"If there already exists a point for the given [code]id[/code], its position "
+"and weight scale are updated to the given values."
+msgstr ""
+
+#: doc/classes/AStar.xml:65
+msgid ""
+"Returns whether the two given points are directly connected by a segment. If "
+"[code]bidirectional[/code] is [code]false[/code], returns whether movement "
+"from [code]id[/code] to [code]to_id[/code] is possible through this segment."
+msgstr ""
+
+#: doc/classes/AStar.xml:71 doc/classes/AStar2D.xml:56
+msgid "Clears all the points and segments."
+msgstr ""
+
+#: doc/classes/AStar.xml:80
+msgid ""
+"Creates a segment between the given points. If [code]bidirectional[/code] is "
+"[code]false[/code], only movement from [code]id[/code] to [code]to_id[/code] "
+"is allowed, not the reverse direction.\n"
+"[codeblock]\n"
+"var astar = AStar.new()\n"
+"astar.add_point(1, Vector3(1, 1, 0))\n"
+"astar.add_point(2, Vector3(0, 5, 0))\n"
+"astar.connect_points(1, 2, false)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/AStar.xml:95
+msgid ""
+"Deletes the segment between the given points. If [code]bidirectional[/code] "
+"is [code]false[/code], only movement from [code]id[/code] to [code]to_id[/"
+"code] is prevented, and a unidirectional segment possibly remains."
+msgstr ""
+
+#: doc/classes/AStar.xml:101 doc/classes/AStar2D.xml:85
+msgid "Returns the next available point ID with no point associated to it."
+msgstr ""
+
+#: doc/classes/AStar.xml:109 doc/classes/AStar2D.xml:93
+msgid ""
+"Returns the ID of the closest point to [code]to_position[/code], optionally "
+"taking disabled points into account. Returns [code]-1[/code] if there are no "
+"points in the points pool.\n"
+"[b]Note:[/b] If several points are the closest to [code]to_position[/code], "
+"the one with the smallest ID will be returned, ensuring a deterministic "
+"result."
+msgstr ""
+
+#: doc/classes/AStar.xml:117
+msgid ""
+"Returns the closest position to [code]to_position[/code] that resides inside "
+"a segment between two connected points.\n"
+"[codeblock]\n"
+"var astar = AStar.new()\n"
+"astar.add_point(1, Vector3(0, 0, 0))\n"
+"astar.add_point(2, Vector3(0, 5, 0))\n"
+"astar.connect_points(1, 2)\n"
+"var res = astar.get_closest_position_in_segment(Vector3(3, 3, 0)) # Returns "
+"(0, 3, 0)\n"
+"[/codeblock]\n"
+"The result is in the segment that goes from [code]y = 0[/code] to [code]y = "
+"5[/code]. It's the closest position in the segment to the given point."
+msgstr ""
+
+#: doc/classes/AStar.xml:133
+msgid ""
+"Returns an array with the IDs of the points that form the path found by "
+"AStar between the given points. The array is ordered from the starting point "
+"to the ending point of the path.\n"
+"[codeblock]\n"
+"var astar = AStar.new()\n"
+"astar.add_point(1, Vector3(0, 0, 0))\n"
+"astar.add_point(2, Vector3(0, 1, 0), 1) # Default weight is 1\n"
+"astar.add_point(3, Vector3(1, 1, 0))\n"
+"astar.add_point(4, Vector3(2, 0, 0))\n"
+"\n"
+"astar.connect_points(1, 2, false)\n"
+"astar.connect_points(2, 3, false)\n"
+"astar.connect_points(4, 3, false)\n"
+"astar.connect_points(1, 4, false)\n"
+"\n"
+"var res = astar.get_id_path(1, 3) # Returns [1, 2, 3]\n"
+"[/codeblock]\n"
+"If you change the 2nd point's weight to 3, then the result will be [code][1, "
+"4, 3][/code] instead, because now even though the distance is longer, it's "
+"\"easier\" to get through point 4 than through point 2."
+msgstr ""
+
+#: doc/classes/AStar.xml:154 doc/classes/AStar2D.xml:138
+msgid ""
+"Returns the capacity of the structure backing the points, useful in "
+"conjunction with [code]reserve_space[/code]."
+msgstr ""
+
+#: doc/classes/AStar.xml:161
+msgid ""
+"Returns an array with the IDs of the points that form the connection with "
+"the given point.\n"
+"[codeblock]\n"
+"var astar = AStar.new()\n"
+"astar.add_point(1, Vector3(0, 0, 0))\n"
+"astar.add_point(2, Vector3(0, 1, 0))\n"
+"astar.add_point(3, Vector3(1, 1, 0))\n"
+"astar.add_point(4, Vector3(2, 0, 0))\n"
+"\n"
+"astar.connect_points(1, 2, true)\n"
+"astar.connect_points(1, 3, true)\n"
+"\n"
+"var neighbors = astar.get_point_connections(1) # Returns [2, 3]\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/AStar.xml:179 doc/classes/AStar2D.xml:163
+msgid "Returns the number of points currently in the points pool."
+msgstr ""
+
+#: doc/classes/AStar.xml:187
+msgid ""
+"Returns an array with the points that are in the path found by AStar between "
+"the given points. The array is ordered from the starting point to the ending "
+"point of the path.\n"
+"[b]Note:[/b] This method is not thread-safe. If called from a [Thread], it "
+"will return an empty [PoolVector3Array] and will print an error message."
+msgstr ""
+
+#: doc/classes/AStar.xml:195 doc/classes/AStar2D.xml:179
+msgid ""
+"Returns the position of the point associated with the given [code]id[/code]."
+msgstr ""
+
+#: doc/classes/AStar.xml:202 doc/classes/AStar2D.xml:186
+msgid ""
+"Returns the weight scale of the point associated with the given [code]id[/"
+"code]."
+msgstr ""
+
+#: doc/classes/AStar.xml:208 doc/classes/AStar2D.xml:192
+msgid "Returns an array of all points."
+msgstr ""
+
+#: doc/classes/AStar.xml:215 doc/classes/AStar2D.xml:199
+msgid ""
+"Returns whether a point associated with the given [code]id[/code] exists."
+msgstr ""
+
+#: doc/classes/AStar.xml:222 doc/classes/AStar2D.xml:206
+msgid ""
+"Returns whether a point is disabled or not for pathfinding. By default, all "
+"points are enabled."
+msgstr ""
+
+#: doc/classes/AStar.xml:229 doc/classes/AStar2D.xml:213
+msgid ""
+"Removes the point associated with the given [code]id[/code] from the points "
+"pool."
+msgstr ""
+
+#: doc/classes/AStar.xml:236 doc/classes/AStar2D.xml:220
+msgid ""
+"Reserves space internally for [code]num_nodes[/code] points, useful if "
+"you're adding a known large number of points at once, for a grid for "
+"instance. New capacity must be greater or equals to old capacity."
+msgstr ""
+
+#: doc/classes/AStar.xml:244 doc/classes/AStar2D.xml:228
+msgid ""
+"Disables or enables the specified point for pathfinding. Useful for making a "
+"temporary obstacle."
+msgstr ""
+
+#: doc/classes/AStar.xml:252 doc/classes/AStar2D.xml:236
+msgid ""
+"Sets the [code]position[/code] for the point with the given [code]id[/code]."
+msgstr ""
+
+#: doc/classes/AStar.xml:260 doc/classes/AStar2D.xml:244
+msgid ""
+"Sets the [code]weight_scale[/code] for the point with the given [code]id[/"
+"code]. The [code]weight_scale[/code] is multiplied by the result of [method "
+"_compute_cost] when determining the overall cost of traveling across a "
+"segment from a neighboring point to this point."
+msgstr ""
+
+#: doc/classes/AStar2D.xml:4
+msgid "AStar class representation that uses 2D vectors as edges."
+msgstr ""
+
+#: doc/classes/AStar2D.xml:7
+msgid ""
+"This is a wrapper for the [AStar] class which uses 2D vectors instead of 3D "
+"vectors."
+msgstr ""
+
+#: doc/classes/AStar2D.xml:17
+msgid ""
+"Called when computing the cost between two connected points.\n"
+"Note that this function is hidden in the default [code]AStar2D[/code] class."
+msgstr ""
+
+#: doc/classes/AStar2D.xml:26
+msgid ""
+"Called when estimating the cost between a point and the path's ending "
+"point.\n"
+"Note that this function is hidden in the default [code]AStar2D[/code] class."
+msgstr ""
+
+#: doc/classes/AStar2D.xml:36
+msgid ""
+"Adds a new point at the given position with the given identifier. The "
+"[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must "
+"be 1 or larger.\n"
+"The [code]weight_scale[/code] is multiplied by the result of [method "
+"_compute_cost] when determining the overall cost of traveling across a "
+"segment from a neighboring point to this point. Thus, all else being equal, "
+"the algorithm prefers points with lower [code]weight_scale[/code]s to form a "
+"path.\n"
+"[codeblock]\n"
+"var astar = AStar2D.new()\n"
+"astar.add_point(1, Vector2(1, 0), 4) # Adds the point (1, 0) with "
+"weight_scale 4 and id 1\n"
+"[/codeblock]\n"
+"If there already exists a point for the given [code]id[/code], its position "
+"and weight scale are updated to the given values."
+msgstr ""
+
+#: doc/classes/AStar2D.xml:50
+msgid "Returns whether there is a connection/segment between the given points."
+msgstr ""
+
+#: doc/classes/AStar2D.xml:65
+msgid ""
+"Creates a segment between the given points. If [code]bidirectional[/code] is "
+"[code]false[/code], only movement from [code]id[/code] to [code]to_id[/code] "
+"is allowed, not the reverse direction.\n"
+"[codeblock]\n"
+"var astar = AStar2D.new()\n"
+"astar.add_point(1, Vector2(1, 1))\n"
+"astar.add_point(2, Vector2(0, 5))\n"
+"astar.connect_points(1, 2, false)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/AStar2D.xml:79
+msgid "Deletes the segment between the given points."
+msgstr ""
+
+#: doc/classes/AStar2D.xml:101
+msgid ""
+"Returns the closest position to [code]to_position[/code] that resides inside "
+"a segment between two connected points.\n"
+"[codeblock]\n"
+"var astar = AStar2D.new()\n"
+"astar.add_point(1, Vector2(0, 0))\n"
+"astar.add_point(2, Vector2(0, 5))\n"
+"astar.connect_points(1, 2)\n"
+"var res = astar.get_closest_position_in_segment(Vector2(3, 3)) # Returns (0, "
+"3)\n"
+"[/codeblock]\n"
+"The result is in the segment that goes from [code]y = 0[/code] to [code]y = "
+"5[/code]. It's the closest position in the segment to the given point."
+msgstr ""
+
+#: doc/classes/AStar2D.xml:117
+msgid ""
+"Returns an array with the IDs of the points that form the path found by "
+"AStar2D between the given points. The array is ordered from the starting "
+"point to the ending point of the path.\n"
+"[codeblock]\n"
+"var astar = AStar2D.new()\n"
+"astar.add_point(1, Vector2(0, 0))\n"
+"astar.add_point(2, Vector2(0, 1), 1) # Default weight is 1\n"
+"astar.add_point(3, Vector2(1, 1))\n"
+"astar.add_point(4, Vector2(2, 0))\n"
+"\n"
+"astar.connect_points(1, 2, false)\n"
+"astar.connect_points(2, 3, false)\n"
+"astar.connect_points(4, 3, false)\n"
+"astar.connect_points(1, 4, false)\n"
+"\n"
+"var res = astar.get_id_path(1, 3) # Returns [1, 2, 3]\n"
+"[/codeblock]\n"
+"If you change the 2nd point's weight to 3, then the result will be [code][1, "
+"4, 3][/code] instead, because now even though the distance is longer, it's "
+"\"easier\" to get through point 4 than through point 2."
+msgstr ""
+
+#: doc/classes/AStar2D.xml:145
+msgid ""
+"Returns an array with the IDs of the points that form the connection with "
+"the given point.\n"
+"[codeblock]\n"
+"var astar = AStar2D.new()\n"
+"astar.add_point(1, Vector2(0, 0))\n"
+"astar.add_point(2, Vector2(0, 1))\n"
+"astar.add_point(3, Vector2(1, 1))\n"
+"astar.add_point(4, Vector2(2, 0))\n"
+"\n"
+"astar.connect_points(1, 2, true)\n"
+"astar.connect_points(1, 3, true)\n"
+"\n"
+"var neighbors = astar.get_point_connections(1) # Returns [2, 3]\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/AStar2D.xml:171
+msgid ""
+"Returns an array with the points that are in the path found by AStar2D "
+"between the given points. The array is ordered from the starting point to "
+"the ending point of the path.\n"
+"[b]Note:[/b] This method is not thread-safe. If called from a [Thread], it "
+"will return an empty [PoolVector2Array] and will print an error message."
+msgstr ""
+
+#: doc/classes/AtlasTexture.xml:4
+msgid ""
+"Crops out one part of a texture, such as a texture from a texture atlas."
+msgstr ""
+
+#: doc/classes/AtlasTexture.xml:7
+msgid ""
+"[Texture] resource that crops out one part of the [member atlas] texture, "
+"defined by [member region]. The main use case is cropping out textures from "
+"a texture atlas, which is a big texture file that packs multiple smaller "
+"textures. Consists of a [Texture] for the [member atlas], a [member region] "
+"that defines the area of [member atlas] to use, and a [member margin] that "
+"defines the border width.\n"
+"[AtlasTexture] cannot be used in an [AnimatedTexture], cannot be tiled in "
+"nodes such as [TextureRect], and does not work properly if used inside of "
+"other [AtlasTexture] resources. Multiple [AtlasTexture] resources can be "
+"used to crop multiple textures from the atlas. Using a texture atlas helps "
+"to optimize video memory costs and render calls compared to using multiple "
+"small files.\n"
+"[b]Note:[/b] AtlasTextures don't support repetition. The [constant Texture."
+"FLAG_REPEAT] and [constant Texture.FLAG_MIRRORED_REPEAT] flags are ignored "
+"when using an AtlasTexture."
+msgstr ""
+
+#: doc/classes/AtlasTexture.xml:17
+msgid "The texture that contains the atlas. Can be any [Texture] subtype."
+msgstr ""
+
+#: doc/classes/AtlasTexture.xml:20
+msgid ""
+"If [code]true[/code], clips the area outside of the region to avoid bleeding "
+"of the surrounding texture pixels."
+msgstr ""
+
+#: doc/classes/AtlasTexture.xml:24
+msgid ""
+"The margin around the region. The [Rect2]'s [member Rect2.size] parameter "
+"(\"w\" and \"h\" in the editor) resizes the texture so it fits within the "
+"margin."
+msgstr ""
+
+#: doc/classes/AtlasTexture.xml:27
+msgid "The AtlasTexture's used region."
+msgstr ""
+
+#: doc/classes/AudioBusLayout.xml:4
+msgid "Stores information about the audio buses."
+msgstr ""
+
+#: doc/classes/AudioBusLayout.xml:7
+msgid ""
+"Stores position, muting, solo, bypass, effects, effect position, volume, and "
+"the connections between buses. See [AudioServer] for usage."
+msgstr ""
+
+#: doc/classes/AudioEffect.xml:4
+msgid "Audio effect for audio."
+msgstr ""
+
+#: doc/classes/AudioEffect.xml:7
+msgid ""
+"Base resource for audio bus. Applies an audio effect on the bus that the "
+"resource is applied on."
+msgstr ""
+
+#: doc/classes/AudioEffect.xml:10 doc/classes/AudioEffectRecord.xml:11
+#: doc/classes/AudioServer.xml:12 doc/classes/AudioStream.xml:12
+#: doc/classes/AudioStreamPlayer.xml:15
+msgid "https://godotengine.org/asset-library/asset/527"
+msgstr ""
+
+#: doc/classes/AudioEffectAmplify.xml:4
+msgid ""
+"Adds an amplifying audio effect to an audio bus.\n"
+"Increases or decreases the volume of the selected audio bus."
+msgstr ""
+
+#: doc/classes/AudioEffectAmplify.xml:8
+msgid "Increases or decreases the volume being routed through the audio bus."
+msgstr ""
+
+#: doc/classes/AudioEffectAmplify.xml:16
+msgid ""
+"Amount of amplification in decibels. Positive values make the sound louder, "
+"negative values make it quieter. Value can range from -80 to 24."
+msgstr ""
+
+#: doc/classes/AudioEffectBandLimitFilter.xml:4
+msgid "Adds a band limit filter to the audio bus."
+msgstr ""
+
+#: doc/classes/AudioEffectBandLimitFilter.xml:7
+msgid ""
+"Limits the frequencies in a range around the [member AudioEffectFilter."
+"cutoff_hz] and allows frequencies outside of this range to pass."
+msgstr ""
+
+#: doc/classes/AudioEffectBandPassFilter.xml:4
+msgid "Adds a band pass filter to the audio bus."
+msgstr ""
+
+#: doc/classes/AudioEffectBandPassFilter.xml:7
+msgid ""
+"Attenuates the frequencies inside of a range around the [member "
+"AudioEffectFilter.cutoff_hz] and cuts frequencies outside of this band."
+msgstr ""
+
+#: doc/classes/AudioEffectCapture.xml:4
+msgid "Captures audio from an audio bus in real-time."
+msgstr ""
+
+#: doc/classes/AudioEffectCapture.xml:7
+msgid ""
+"AudioEffectCapture is an AudioEffect which copies all audio frames from the "
+"attached audio effect bus into its internal ring buffer.\n"
+"Application code should consume these audio frames from this ring buffer "
+"using [method get_buffer] and process it as needed, for example to capture "
+"data from a microphone, implement application defined effects, or to "
+"transmit audio over the network."
+msgstr ""
+
+#: doc/classes/AudioEffectCapture.xml:17
+msgid ""
+"Returns [code]true[/code] if at least [code]frames[/code] audio frames are "
+"available to read in the internal ring buffer."
+msgstr ""
+
+#: doc/classes/AudioEffectCapture.xml:23
+msgid "Clears the internal ring buffer."
+msgstr ""
+
+#: doc/classes/AudioEffectCapture.xml:30
+msgid ""
+"Gets the next [code]frames[/code] audio samples from the internal ring "
+"buffer.\n"
+"Returns a [PoolVector2Array] containing exactly [code]frames[/code] audio "
+"samples if available, or an empty [PoolVector2Array] if insufficient data "
+"was available."
+msgstr ""
+
+#: doc/classes/AudioEffectCapture.xml:37
+msgid "Returns the total size of the internal ring buffer in frames."
+msgstr ""
+
+#: doc/classes/AudioEffectCapture.xml:43
+msgid ""
+"Returns the number of audio frames discarded from the audio bus due to full "
+"buffer."
+msgstr ""
+
+#: doc/classes/AudioEffectCapture.xml:49
+msgid ""
+"Returns the number of frames available to read using [method get_buffer]."
+msgstr ""
+
+#: doc/classes/AudioEffectCapture.xml:55
+msgid "Returns the number of audio frames inserted from the audio bus."
+msgstr ""
+
+#: doc/classes/AudioEffectCapture.xml:61
+msgid ""
+"Length of the internal ring buffer, in seconds. Setting the buffer length "
+"will have no effect if already initialized."
+msgstr ""
+
+#: doc/classes/AudioEffectChorus.xml:4
+msgid "Adds a chorus audio effect."
+msgstr ""
+
+#: doc/classes/AudioEffectChorus.xml:7
+msgid ""
+"Adds a chorus audio effect. The effect applies a filter with voices to "
+"duplicate the audio source and manipulate it through the filter."
+msgstr ""
+
+#: doc/classes/AudioEffectChorus.xml:93
+msgid "The effect's raw signal."
+msgstr ""
+
+#: doc/classes/AudioEffectChorus.xml:96 doc/classes/AudioEffectChorus.xml:114
+#: doc/classes/AudioEffectChorus.xml:132 doc/classes/AudioEffectChorus.xml:150
+msgid "The voice's cutoff frequency."
+msgstr ""
+
+#: doc/classes/AudioEffectChorus.xml:99 doc/classes/AudioEffectChorus.xml:117
+#: doc/classes/AudioEffectChorus.xml:135 doc/classes/AudioEffectChorus.xml:153
+msgid "The voice's signal delay."
+msgstr ""
+
+#: doc/classes/AudioEffectChorus.xml:102 doc/classes/AudioEffectChorus.xml:120
+#: doc/classes/AudioEffectChorus.xml:138 doc/classes/AudioEffectChorus.xml:156
+msgid "The voice filter's depth."
+msgstr ""
+
+#: doc/classes/AudioEffectChorus.xml:105 doc/classes/AudioEffectChorus.xml:123
+#: doc/classes/AudioEffectChorus.xml:141 doc/classes/AudioEffectChorus.xml:159
+msgid "The voice's volume."
+msgstr ""
+
+#: doc/classes/AudioEffectChorus.xml:108 doc/classes/AudioEffectChorus.xml:126
+#: doc/classes/AudioEffectChorus.xml:144 doc/classes/AudioEffectChorus.xml:162
+msgid "The voice's pan level."
+msgstr ""
+
+#: doc/classes/AudioEffectChorus.xml:111 doc/classes/AudioEffectChorus.xml:129
+#: doc/classes/AudioEffectChorus.xml:147 doc/classes/AudioEffectChorus.xml:165
+msgid "The voice's filter rate."
+msgstr ""
+
+#: doc/classes/AudioEffectChorus.xml:168
+msgid "The amount of voices in the effect."
+msgstr ""
+
+#: doc/classes/AudioEffectChorus.xml:171
+msgid "The effect's processed signal."
+msgstr ""
+
+#: doc/classes/AudioEffectCompressor.xml:4
+msgid ""
+"Adds a compressor audio effect to an audio bus.\n"
+"Reduces sounds that exceed a certain threshold level, smooths out the "
+"dynamics and increases the overall volume."
+msgstr ""
+
+#: doc/classes/AudioEffectCompressor.xml:8
+msgid ""
+"Dynamic range compressor reduces the level of the sound when the amplitude "
+"goes over a certain threshold in Decibels. One of the main uses of a "
+"compressor is to increase the dynamic range by clipping as little as "
+"possible (when sound goes over 0dB).\n"
+"Compressor has many uses in the mix:\n"
+"- In the Master bus to compress the whole output (although an "
+"[AudioEffectLimiter] is probably better).\n"
+"- In voice channels to ensure they sound as balanced as possible.\n"
+"- Sidechained. This can reduce the sound level sidechained with another "
+"audio bus for threshold detection. This technique is common in video game "
+"mixing to the level of music and SFX while voices are being heard.\n"
+"- Accentuates transients by using a wider attack, making effects sound more "
+"punchy."
+msgstr ""
+
+#: doc/classes/AudioEffectCompressor.xml:21
+msgid ""
+"Compressor's reaction time when the signal exceeds the threshold, in "
+"microseconds. Value can range from 20 to 2000."
+msgstr ""
+
+#: doc/classes/AudioEffectCompressor.xml:24
+msgid "Gain applied to the output signal."
+msgstr ""
+
+#: doc/classes/AudioEffectCompressor.xml:27
+msgid ""
+"Balance between original signal and effect signal. Value can range from 0 "
+"(totally dry) to 1 (totally wet)."
+msgstr ""
+
+#: doc/classes/AudioEffectCompressor.xml:30
+msgid ""
+"Amount of compression applied to the audio once it passes the threshold "
+"level. The higher the ratio, the more the loud parts of the audio will be "
+"compressed. Value can range from 1 to 48."
+msgstr ""
+
+#: doc/classes/AudioEffectCompressor.xml:33
+msgid ""
+"Compressor's delay time to stop reducing the signal after the signal level "
+"falls below the threshold, in milliseconds. Value can range from 20 to 2000."
+msgstr ""
+
+#: doc/classes/AudioEffectCompressor.xml:36
+msgid "Reduce the sound level using another audio bus for threshold detection."
+msgstr ""
+
+#: doc/classes/AudioEffectCompressor.xml:39
+msgid ""
+"The level above which compression is applied to the audio. Value can range "
+"from -60 to 0."
+msgstr ""
+
+#: doc/classes/AudioEffectDelay.xml:4
+msgid ""
+"Adds a delay audio effect to an audio bus. Plays input signal back after a "
+"period of time.\n"
+"Two tap delay and feedback options."
+msgstr ""
+
+#: doc/classes/AudioEffectDelay.xml:8
+msgid ""
+"Plays input signal back after a period of time. The delayed signal may be "
+"played back multiple times to create the sound of a repeating, decaying "
+"echo. Delay effects range from a subtle echo effect to a pronounced blending "
+"of previous sounds with new sounds."
+msgstr ""
+
+#: doc/classes/AudioEffectDelay.xml:16
+msgid ""
+"Output percent of original sound. At 0, only delayed sounds are output. "
+"Value can range from 0 to 1."
+msgstr ""
+
+#: doc/classes/AudioEffectDelay.xml:19
+msgid "If [code]true[/code], feedback is enabled."
+msgstr ""
+
+#: doc/classes/AudioEffectDelay.xml:22
+msgid "Feedback delay time in milliseconds."
+msgstr ""
+
+#: doc/classes/AudioEffectDelay.xml:25 doc/classes/AudioEffectDelay.xml:37
+msgid "Sound level for [code]tap1[/code]."
+msgstr ""
+
+#: doc/classes/AudioEffectDelay.xml:28
+msgid ""
+"Low-pass filter for feedback, in Hz. Frequencies below this value are "
+"filtered out of the source signal."
+msgstr ""
+
+#: doc/classes/AudioEffectDelay.xml:31
+msgid "If [code]true[/code], [code]tap1[/code] will be enabled."
+msgstr ""
+
+#: doc/classes/AudioEffectDelay.xml:34
+msgid "[code]tap1[/code] delay time in milliseconds."
+msgstr ""
+
+#: doc/classes/AudioEffectDelay.xml:40
+msgid ""
+"Pan position for [code]tap1[/code]. Value can range from -1 (fully left) to "
+"1 (fully right)."
+msgstr ""
+
+#: doc/classes/AudioEffectDelay.xml:43
+msgid "If [code]true[/code], [code]tap2[/code] will be enabled."
+msgstr ""
+
+#: doc/classes/AudioEffectDelay.xml:46
+msgid "[b]Tap2[/b] delay time in milliseconds."
+msgstr ""
+
+#: doc/classes/AudioEffectDelay.xml:49
+msgid "Sound level for [code]tap2[/code]."
+msgstr ""
+
+#: doc/classes/AudioEffectDelay.xml:52
+msgid ""
+"Pan position for [code]tap2[/code]. Value can range from -1 (fully left) to "
+"1 (fully right)."
+msgstr ""
+
+#: doc/classes/AudioEffectDistortion.xml:4
+msgid ""
+"Adds a distortion audio effect to an Audio bus.\n"
+"Modify the sound to make it distorted."
+msgstr ""
+
+#: doc/classes/AudioEffectDistortion.xml:8
+msgid ""
+"Different types are available: clip, tan, lo-fi (bit crushing), overdrive, "
+"or waveshape.\n"
+"By distorting the waveform the frequency content change, which will often "
+"make the sound \"crunchy\" or \"abrasive\". For games, it can simulate sound "
+"coming from some saturated device or speaker very efficiently."
+msgstr ""
+
+#: doc/classes/AudioEffectDistortion.xml:12
+#: doc/classes/AudioEffectFilter.xml:10
+#: doc/classes/AudioEffectHighShelfFilter.xml:9
+#: doc/classes/AudioEffectLowShelfFilter.xml:9 doc/classes/AudioServer.xml:10
+msgid "https://docs.godotengine.org/en/3.4/tutorials/audio/audio_buses.html"
+msgstr ""
+
+#: doc/classes/AudioEffectDistortion.xml:18
+msgid "Distortion power. Value can range from 0 to 1."
+msgstr ""
+
+#: doc/classes/AudioEffectDistortion.xml:21
+msgid ""
+"High-pass filter, in Hz. Frequencies higher than this value will not be "
+"affected by the distortion. Value can range from 1 to 20000."
+msgstr ""
+
+#: doc/classes/AudioEffectDistortion.xml:24
+msgid "Distortion type."
+msgstr ""
+
+#: doc/classes/AudioEffectDistortion.xml:27
+msgid ""
+"Increases or decreases the volume after the effect. Value can range from -80 "
+"to 24."
+msgstr ""
+
+#: doc/classes/AudioEffectDistortion.xml:30
+msgid ""
+"Increases or decreases the volume before the effect. Value can range from "
+"-60 to 60."
+msgstr ""
+
+#: doc/classes/AudioEffectDistortion.xml:35
+msgid ""
+"Digital distortion effect which cuts off peaks at the top and bottom of the "
+"waveform."
+msgstr ""
+
+#: doc/classes/AudioEffectDistortion.xml:40
+msgid ""
+"Low-resolution digital distortion effect. You can use it to emulate the "
+"sound of early digital audio devices."
+msgstr ""
+
+#: doc/classes/AudioEffectDistortion.xml:43
+msgid ""
+"Emulates the warm distortion produced by a field effect transistor, which is "
+"commonly used in solid-state musical instrument amplifiers."
+msgstr ""
+
+#: doc/classes/AudioEffectDistortion.xml:46
+msgid ""
+"Waveshaper distortions are used mainly by electronic musicians to achieve an "
+"extra-abrasive sound."
+msgstr ""
+
+#: doc/classes/AudioEffectEQ.xml:4
+msgid ""
+"Base class for audio equalizers. Gives you control over frequencies.\n"
+"Use it to create a custom equalizer if [AudioEffectEQ6], [AudioEffectEQ10] "
+"or [AudioEffectEQ21] don't fit your needs."
+msgstr ""
+
+#: doc/classes/AudioEffectEQ.xml:8
+msgid ""
+"AudioEffectEQ gives you control over frequencies. Use it to compensate for "
+"existing deficiencies in audio. AudioEffectEQs are useful on the Master bus "
+"to completely master a mix and give it more character. They are also useful "
+"when a game is run on a mobile device, to adjust the mix to that kind of "
+"speakers (it can be added but disabled when headphones are plugged)."
+msgstr ""
+
+#: doc/classes/AudioEffectEQ.xml:16
+msgid "Returns the number of bands of the equalizer."
+msgstr ""
+
+#: doc/classes/AudioEffectEQ.xml:23
+msgid "Returns the band's gain at the specified index, in dB."
+msgstr ""
+
+#: doc/classes/AudioEffectEQ.xml:31
+msgid "Sets band's gain at the specified index, in dB."
+msgstr ""
+
+#: doc/classes/AudioEffectEQ10.xml:4
+msgid ""
+"Adds a 10-band equalizer audio effect to an Audio bus. Gives you control "
+"over frequencies from 31 Hz to 16000 Hz.\n"
+"Each frequency can be modulated between -60/+24 dB."
+msgstr ""
+
+#: doc/classes/AudioEffectEQ10.xml:8
+msgid ""
+"Frequency bands:\n"
+"Band 1: 31 Hz\n"
+"Band 2: 62 Hz\n"
+"Band 3: 125 Hz\n"
+"Band 4: 250 Hz\n"
+"Band 5: 500 Hz\n"
+"Band 6: 1000 Hz\n"
+"Band 7: 2000 Hz\n"
+"Band 8: 4000 Hz\n"
+"Band 9: 8000 Hz\n"
+"Band 10: 16000 Hz\n"
+"See also [AudioEffectEQ], [AudioEffectEQ6], [AudioEffectEQ21]."
+msgstr ""
+
+#: doc/classes/AudioEffectEQ21.xml:4
+msgid ""
+"Adds a 21-band equalizer audio effect to an Audio bus. Gives you control "
+"over frequencies from 22 Hz to 22000 Hz.\n"
+"Each frequency can be modulated between -60/+24 dB."
+msgstr ""
+
+#: doc/classes/AudioEffectEQ21.xml:8
+msgid ""
+"Frequency bands:\n"
+"Band 1: 22 Hz\n"
+"Band 2: 32 Hz\n"
+"Band 3: 44 Hz\n"
+"Band 4: 63 Hz\n"
+"Band 5: 90 Hz\n"
+"Band 6: 125 Hz\n"
+"Band 7: 175 Hz\n"
+"Band 8: 250 Hz\n"
+"Band 9: 350 Hz\n"
+"Band 10: 500 Hz\n"
+"Band 11: 700 Hz\n"
+"Band 12: 1000 Hz\n"
+"Band 13: 1400 Hz\n"
+"Band 14: 2000 Hz\n"
+"Band 15: 2800 Hz\n"
+"Band 16: 4000 Hz\n"
+"Band 17: 5600 Hz\n"
+"Band 18: 8000 Hz\n"
+"Band 19: 11000 Hz\n"
+"Band 20: 16000 Hz\n"
+"Band 21: 22000 Hz\n"
+"See also [AudioEffectEQ], [AudioEffectEQ6], [AudioEffectEQ10]."
+msgstr ""
+
+#: doc/classes/AudioEffectEQ6.xml:4
+msgid ""
+"Adds a 6-band equalizer audio effect to an Audio bus. Gives you control over "
+"frequencies from 32 Hz to 10000 Hz.\n"
+"Each frequency can be modulated between -60/+24 dB."
+msgstr ""
+
+#: doc/classes/AudioEffectEQ6.xml:8
+msgid ""
+"Frequency bands:\n"
+"Band 1: 32 Hz\n"
+"Band 2: 100 Hz\n"
+"Band 3: 320 Hz\n"
+"Band 4: 1000 Hz\n"
+"Band 5: 3200 Hz\n"
+"Band 6: 10000 Hz\n"
+"See also [AudioEffectEQ], [AudioEffectEQ10], [AudioEffectEQ21]."
+msgstr ""
+
+#: doc/classes/AudioEffectFilter.xml:4
+msgid "Adds a filter to the audio bus."
+msgstr ""
+
+#: doc/classes/AudioEffectFilter.xml:7
+msgid "Allows frequencies other than the [member cutoff_hz] to pass."
+msgstr ""
+
+#: doc/classes/AudioEffectFilter.xml:16
+msgid "Threshold frequency for the filter, in Hz."
+msgstr ""
+
+#: doc/classes/AudioEffectFilter.xml:21
+msgid "Gain amount of the frequencies after the filter."
+msgstr ""
+
+#: doc/classes/AudioEffectFilter.xml:24
+msgid "Amount of boost in the frequency range near the cutoff frequency."
+msgstr ""
+
+#: doc/classes/AudioEffectHighPassFilter.xml:4
+msgid "Adds a high-pass filter to the Audio Bus."
+msgstr ""
+
+#: doc/classes/AudioEffectHighPassFilter.xml:7
+msgid ""
+"Cuts frequencies lower than the [member AudioEffectFilter.cutoff_hz] and "
+"allows higher frequencies to pass."
+msgstr ""
+
+#: doc/classes/AudioEffectHighShelfFilter.xml:4
+msgid "Reduces all frequencies above the [member AudioEffectFilter.cutoff_hz]."
+msgstr ""
+
+#: doc/classes/AudioEffectLimiter.xml:4
+msgid "Adds a soft-clip limiter audio effect to an Audio bus."
+msgstr ""
+
+#: doc/classes/AudioEffectLimiter.xml:7
+msgid ""
+"A limiter is similar to a compressor, but it's less flexible and designed to "
+"disallow sound going over a given dB threshold. Adding one in the Master bus "
+"is always recommended to reduce the effects of clipping.\n"
+"Soft clipping starts to reduce the peaks a little below the threshold level "
+"and progressively increases its effect as the input level increases such "
+"that the threshold is never exceeded."
+msgstr ""
+
+#: doc/classes/AudioEffectLimiter.xml:16
+msgid ""
+"The waveform's maximum allowed value, in decibels. Value can range from -20 "
+"to -0.1."
+msgstr ""
+
+#: doc/classes/AudioEffectLimiter.xml:19
+msgid ""
+"Applies a gain to the limited waves, in decibels. Value can range from 0 to "
+"6."
+msgstr ""
+
+#: doc/classes/AudioEffectLimiter.xml:24
+msgid ""
+"Threshold from which the limiter begins to be active, in decibels. Value can "
+"range from -30 to 0."
+msgstr ""
+
+#: doc/classes/AudioEffectLowPassFilter.xml:4
+msgid "Adds a low-pass filter to the Audio bus."
+msgstr ""
+
+#: doc/classes/AudioEffectLowPassFilter.xml:7
+msgid ""
+"Cuts frequencies higher than the [member AudioEffectFilter.cutoff_hz] and "
+"allows lower frequencies to pass."
+msgstr ""
+
+#: doc/classes/AudioEffectLowShelfFilter.xml:4
+msgid "Reduces all frequencies below the [member AudioEffectFilter.cutoff_hz]."
+msgstr ""
+
+#: doc/classes/AudioEffectNotchFilter.xml:4
+msgid "Adds a notch filter to the Audio bus."
+msgstr ""
+
+#: doc/classes/AudioEffectNotchFilter.xml:7
+msgid ""
+"Attenuates frequencies in a narrow band around the [member AudioEffectFilter."
+"cutoff_hz] and cuts frequencies outside of this range."
+msgstr ""
+
+#: doc/classes/AudioEffectPanner.xml:4
+msgid "Adds a panner audio effect to an Audio bus. Pans sound left or right."
+msgstr ""
+
+#: doc/classes/AudioEffectPanner.xml:7
+msgid ""
+"Determines how much of an audio signal is sent to the left and right buses."
+msgstr ""
+
+#: doc/classes/AudioEffectPanner.xml:15
+msgid "Pan position. Value can range from -1 (fully left) to 1 (fully right)."
+msgstr ""
+
+#: doc/classes/AudioEffectPhaser.xml:4
+msgid ""
+"Adds a phaser audio effect to an Audio bus.\n"
+"Combines the original signal with a copy that is slightly out of phase with "
+"the original."
+msgstr ""
+
+#: doc/classes/AudioEffectPhaser.xml:8
+msgid ""
+"Combines phase-shifted signals with the original signal. The movement of the "
+"phase-shifted signals is controlled using a low-frequency oscillator."
+msgstr ""
+
+#: doc/classes/AudioEffectPhaser.xml:16
+msgid ""
+"Governs how high the filter frequencies sweep. Low value will primarily "
+"affect bass frequencies. High value can sweep high into the treble. Value "
+"can range from 0.1 to 4."
+msgstr ""
+
+#: doc/classes/AudioEffectPhaser.xml:19
+msgid "Output percent of modified sound. Value can range from 0.1 to 0.9."
+msgstr ""
+
+#: doc/classes/AudioEffectPhaser.xml:22
+msgid ""
+"Determines the maximum frequency affected by the LFO modulations, in Hz. "
+"Value can range from 10 to 10000."
+msgstr ""
+
+#: doc/classes/AudioEffectPhaser.xml:25
+msgid ""
+"Determines the minimum frequency affected by the LFO modulations, in Hz. "
+"Value can range from 10 to 10000."
+msgstr ""
+
+#: doc/classes/AudioEffectPhaser.xml:28
+msgid ""
+"Adjusts the rate in Hz at which the effect sweeps up and down across the "
+"frequency range."
+msgstr ""
+
+#: doc/classes/AudioEffectPitchShift.xml:4
+msgid ""
+"Adds a pitch-shifting audio effect to an Audio bus.\n"
+"Raises or lowers the pitch of original sound."
+msgstr ""
+
+#: doc/classes/AudioEffectPitchShift.xml:8
+msgid ""
+"Allows modulation of pitch independently of tempo. All frequencies can be "
+"increased/decreased with minimal effect on transients."
+msgstr ""
+
+#: doc/classes/AudioEffectPitchShift.xml:16
+msgid ""
+"The size of the [url=https://en.wikipedia.org/wiki/"
+"Fast_Fourier_transform]Fast Fourier transform[/url] buffer. Higher values "
+"smooth out the effect over time, but have greater latency. The effects of "
+"this higher latency are especially noticeable on sounds that have sudden "
+"amplitude changes."
+msgstr ""
+
+#: doc/classes/AudioEffectPitchShift.xml:19
+msgid ""
+"The oversampling factor to use. Higher values result in better quality, but "
+"are more demanding on the CPU and may cause audio cracking if the CPU can't "
+"keep up."
+msgstr ""
+
+#: doc/classes/AudioEffectPitchShift.xml:22
+msgid ""
+"The pitch scale to use. [code]1.0[/code] is the default pitch and plays "
+"sounds unaltered. [member pitch_scale] can range from [code]0.0[/code] "
+"(infinitely low pitch, inaudible) to [code]16[/code] (16 times higher than "
+"the initial pitch)."
+msgstr ""
+
+#: doc/classes/AudioEffectPitchShift.xml:27
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml:28
+msgid ""
+"Use a buffer of 256 samples for the Fast Fourier transform. Lowest latency, "
+"but least stable over time."
+msgstr ""
+
+#: doc/classes/AudioEffectPitchShift.xml:30
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml:31
+msgid ""
+"Use a buffer of 512 samples for the Fast Fourier transform. Low latency, but "
+"less stable over time."
+msgstr ""
+
+#: doc/classes/AudioEffectPitchShift.xml:33
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml:34
+msgid ""
+"Use a buffer of 1024 samples for the Fast Fourier transform. This is a "
+"compromise between latency and stability over time."
+msgstr ""
+
+#: doc/classes/AudioEffectPitchShift.xml:36
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml:37
+msgid ""
+"Use a buffer of 2048 samples for the Fast Fourier transform. High latency, "
+"but stable over time."
+msgstr ""
+
+#: doc/classes/AudioEffectPitchShift.xml:39
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml:40
+msgid ""
+"Use a buffer of 4096 samples for the Fast Fourier transform. Highest "
+"latency, but most stable over time."
+msgstr ""
+
+#: doc/classes/AudioEffectPitchShift.xml:42
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml:43
+msgid "Represents the size of the [enum FFT_Size] enum."
+msgstr ""
+
+#: doc/classes/AudioEffectRecord.xml:4
+msgid "Audio effect used for recording sound from a microphone."
+msgstr ""
+
+#: doc/classes/AudioEffectRecord.xml:7
+msgid ""
+"Allows the user to record sound from a microphone. It sets and gets the "
+"format in which the audio file will be recorded (8-bit, 16-bit, or "
+"compressed). It checks whether or not the recording is active, and if it is, "
+"records the sound. It then returns the recorded sample."
+msgstr ""
+
+#: doc/classes/AudioEffectRecord.xml:10
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/audio/"
+"recording_with_microphone.html"
+msgstr ""
+
+#: doc/classes/AudioEffectRecord.xml:17
+msgid "Returns the recorded sample."
+msgstr ""
+
+#: doc/classes/AudioEffectRecord.xml:23
+msgid "Returns whether the recording is active or not."
+msgstr ""
+
+#: doc/classes/AudioEffectRecord.xml:30
+msgid ""
+"If [code]true[/code], the sound will be recorded. Note that restarting the "
+"recording will remove the previously recorded sample."
+msgstr ""
+
+#: doc/classes/AudioEffectRecord.xml:36
+msgid ""
+"Specifies the format in which the sample will be recorded. See [enum "
+"AudioStreamSample.Format] for available formats."
+msgstr ""
+
+#: doc/classes/AudioEffectReverb.xml:4
+msgid ""
+"Adds a reverberation audio effect to an Audio bus.\n"
+"Simulates the sound of acoustic environments such as rooms, concert halls, "
+"caverns, or an open spaces."
+msgstr ""
+
+#: doc/classes/AudioEffectReverb.xml:8
+msgid ""
+"Simulates rooms of different sizes. Its parameters can be adjusted to "
+"simulate the sound of a specific room."
+msgstr ""
+
+#: doc/classes/AudioEffectReverb.xml:17
+msgid ""
+"Defines how reflective the imaginary room's walls are. Value can range from "
+"0 to 1."
+msgstr ""
+
+#: doc/classes/AudioEffectReverb.xml:20
+msgid ""
+"Output percent of original sound. At 0, only modified sound is outputted. "
+"Value can range from 0 to 1."
+msgstr ""
+
+#: doc/classes/AudioEffectReverb.xml:23
+msgid ""
+"High-pass filter passes signals with a frequency higher than a certain "
+"cutoff frequency and attenuates signals with frequencies lower than the "
+"cutoff frequency. Value can range from 0 to 1."
+msgstr ""
+
+#: doc/classes/AudioEffectReverb.xml:26
+msgid "Output percent of predelay. Value can range from 0 to 1."
+msgstr ""
+
+#: doc/classes/AudioEffectReverb.xml:29
+msgid ""
+"Time between the original signal and the early reflections of the reverb "
+"signal, in milliseconds."
+msgstr ""
+
+#: doc/classes/AudioEffectReverb.xml:32
+msgid ""
+"Dimensions of simulated room. Bigger means more echoes. Value can range from "
+"0 to 1."
+msgstr ""
+
+#: doc/classes/AudioEffectReverb.xml:35
+msgid ""
+"Widens or narrows the stereo image of the reverb tail. 1 means fully widens. "
+"Value can range from 0 to 1."
+msgstr ""
+
+#: doc/classes/AudioEffectReverb.xml:38
+msgid ""
+"Output percent of modified sound. At 0, only original sound is outputted. "
+"Value can range from 0 to 1."
+msgstr ""
+
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml:4
+msgid "Audio effect that can be used for real-time audio visualizations."
+msgstr ""
+
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml:7
+msgid ""
+"This audio effect does not affect sound output, but can be used for real-"
+"time audio visualizations.\n"
+"See also [AudioStreamGenerator] for procedurally generating sounds."
+msgstr ""
+
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml:11
+msgid "Audio Spectrum Demo"
+msgstr ""
+
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml:12
+#: doc/classes/AudioStreamGenerator.xml:13
+#: doc/classes/AudioStreamGeneratorPlayback.xml:11
+msgid "Godot 3.2 will get new audio features"
+msgstr ""
+
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml:18
+msgid ""
+"The length of the buffer to keep (in seconds). Higher values keep data "
+"around for longer, but require more memory."
+msgstr ""
+
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml:21
+msgid ""
+"The size of the [url=https://en.wikipedia.org/wiki/"
+"Fast_Fourier_transform]Fast Fourier transform[/url] buffer. Higher values "
+"smooth out the spectrum analysis over time, but have greater latency. The "
+"effects of this higher latency are especially noticeable with sudden "
+"amplitude changes."
+msgstr ""
+
+#: doc/classes/AudioEffectSpectrumAnalyzerInstance.xml:21
+msgid "Use the average value as magnitude."
+msgstr ""
+
+#: doc/classes/AudioEffectSpectrumAnalyzerInstance.xml:24
+msgid "Use the maximum value as magnitude."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:4
+msgid "Server interface for low-level audio access."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:7
+msgid ""
+"[AudioServer] is a low-level server interface for audio access. It is in "
+"charge of creating sample data (playable audio) as well as its playback via "
+"a voice interface."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:11 doc/classes/AudioStreamPlayer.xml:13
+msgid "https://godotengine.org/asset-library/asset/525"
+msgstr ""
+
+#: doc/classes/AudioServer.xml:13 doc/classes/AudioStream.xml:13
+#: doc/classes/AudioStreamPlayer.xml:16 doc/classes/CanvasItem.xml:17
+msgid "https://godotengine.org/asset-library/asset/528"
+msgstr ""
+
+#: doc/classes/AudioServer.xml:20
+msgid "Adds a bus at [code]at_position[/code]."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:29
+msgid ""
+"Adds an [AudioEffect] effect to the bus [code]bus_idx[/code] at "
+"[code]at_position[/code]."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:35
+msgid ""
+"Name of the current device for audio input (see [method "
+"capture_get_device_list])."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:41
+msgid "Returns the names of all audio input devices detected on the system."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:48
+msgid "Sets which audio input device is used for audio capture."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:54
+msgid "Generates an [AudioBusLayout] using the available buses and effects."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:61
+msgid ""
+"Returns the amount of channels of the bus at index [code]bus_idx[/code]."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:69
+msgid ""
+"Returns the [AudioEffect] at position [code]effect_idx[/code] in bus "
+"[code]bus_idx[/code]."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:76
+msgid "Returns the number of effects on the bus at [code]bus_idx[/code]."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:85
+msgid ""
+"Returns the [AudioEffectInstance] assigned to the given bus and effect "
+"indices (and optionally channel)."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:92
+msgid "Returns the index of the bus with the name [code]bus_name[/code]."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:99
+msgid "Returns the name of the bus with the index [code]bus_idx[/code]."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:107
+msgid ""
+"Returns the peak volume of the left speaker at bus index [code]bus_idx[/"
+"code] and channel index [code]channel[/code]."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:115
+msgid ""
+"Returns the peak volume of the right speaker at bus index [code]bus_idx[/"
+"code] and channel index [code]channel[/code]."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:122
+msgid ""
+"Returns the name of the bus that the bus at index [code]bus_idx[/code] sends "
+"to."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:129
+msgid "Returns the volume of the bus at index [code]bus_idx[/code] in dB."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:135
+msgid "Returns the names of all audio devices detected on the system."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:141
+msgid "Returns the sample rate at the output of the [AudioServer]."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:147
+msgid "Returns the audio driver's output latency."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:153
+msgid "Returns the speaker configuration."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:159
+msgid "Returns the relative time since the last mix occurred."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:165
+msgid "Returns the relative time until the next mix occurs."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:172 doc/classes/AudioServer.xml:232
+msgid ""
+"If [code]true[/code], the bus at index [code]bus_idx[/code] is bypassing "
+"effects."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:180 doc/classes/AudioServer.xml:241
+msgid ""
+"If [code]true[/code], the effect at index [code]effect_idx[/code] on the bus "
+"at index [code]bus_idx[/code] is enabled."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:187 doc/classes/AudioServer.xml:256
+msgid "If [code]true[/code], the bus at index [code]bus_idx[/code] is muted."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:194 doc/classes/AudioServer.xml:280
+msgid ""
+"If [code]true[/code], the bus at index [code]bus_idx[/code] is in solo mode."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:200
+msgid ""
+"Locks the audio driver's main loop.\n"
+"[b]Note:[/b] Remember to unlock it afterwards."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:209
+msgid ""
+"Moves the bus from index [code]index[/code] to index [code]to_index[/code]."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:216
+msgid "Removes the bus at index [code]index[/code]."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:224
+msgid ""
+"Removes the effect at index [code]effect_idx[/code] from the bus at index "
+"[code]bus_idx[/code]."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:248
+msgid "Overwrites the currently used [AudioBusLayout]."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:264
+msgid ""
+"Sets the name of the bus at index [code]bus_idx[/code] to [code]name[/code]."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:272
+msgid ""
+"Connects the output of the bus at [code]bus_idx[/code] to the bus named "
+"[code]send[/code]."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:288
+msgid ""
+"Sets the volume of the bus at index [code]bus_idx[/code] to [code]volume_db[/"
+"code]."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:297
+msgid "Swaps the position of two effects in bus [code]bus_idx[/code]."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:303
+msgid ""
+"Unlocks the audio driver's main loop. (After locking it, you should always "
+"unlock it.)"
+msgstr ""
+
+#: doc/classes/AudioServer.xml:309
+msgid "Number of available audio buses."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:312
+msgid ""
+"Name of the current device for audio output (see [method get_device_list])."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:315
+msgid ""
+"Scales the rate at which audio is played (i.e. setting it to [code]0.5[/"
+"code] will make the audio be played twice as fast)."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:321
+msgid "Emitted when the [AudioBusLayout] changes."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:327
+msgid "Two or fewer speakers were detected."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:330
+msgid "A 3.1 channel surround setup was detected."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:333
+msgid "A 5.1 channel surround setup was detected."
+msgstr ""
+
+#: doc/classes/AudioServer.xml:336
+msgid "A 7.1 channel surround setup was detected."
+msgstr ""
+
+#: doc/classes/AudioStream.xml:4
+msgid "Base class for audio streams."
+msgstr ""
+
+#: doc/classes/AudioStream.xml:7
+msgid ""
+"Base class for audio streams. Audio streams are used for sound effects and "
+"music playback, and support WAV (via [AudioStreamSample]) and OGG (via "
+"[AudioStreamOGGVorbis]) file formats."
+msgstr ""
+
+#: doc/classes/AudioStream.xml:10 doc/classes/AudioStreamPlayer.xml:11
+#: doc/classes/AudioStreamPlayer2D.xml:12
+#: doc/classes/AudioStreamPlayer3D.xml:13
+msgid "https://docs.godotengine.org/en/3.4/tutorials/audio/audio_streams.html"
+msgstr ""
+
+#: doc/classes/AudioStream.xml:11 doc/classes/AudioStreamGenerator.xml:12
+#: doc/classes/AudioStreamGeneratorPlayback.xml:10
+#: doc/classes/AudioStreamPlayback.xml:10 doc/classes/AudioStreamPlayer.xml:14
+msgid "https://godotengine.org/asset-library/asset/526"
+msgstr ""
+
+#: doc/classes/AudioStream.xml:19
+msgid "Returns the length of the audio stream in seconds."
+msgstr ""
+
+#: doc/classes/AudioStreamGenerator.xml:4
+msgid "Audio stream that generates sounds procedurally."
+msgstr ""
+
+#: doc/classes/AudioStreamGenerator.xml:7
+msgid ""
+"This audio stream does not play back sounds, but expects a script to "
+"generate audio data for it instead. See also "
+"[AudioStreamGeneratorPlayback].\n"
+"See also [AudioEffectSpectrumAnalyzer] for performing real-time audio "
+"spectrum analysis.\n"
+"[b]Note:[/b] Due to performance constraints, this class is best used from C# "
+"or from a compiled language via GDNative. If you still want to use this "
+"class from GDScript, consider using a lower [member mix_rate] such as 11,025 "
+"Hz or 22,050 Hz."
+msgstr ""
+
+#: doc/classes/AudioStreamGenerator.xml:19
+msgid ""
+"The length of the buffer to generate (in seconds). Lower values result in "
+"less latency, but require the script to generate audio data faster, "
+"resulting in increased CPU usage and more risk for audio cracking if the CPU "
+"can't keep up."
+msgstr ""
+
+#: doc/classes/AudioStreamGenerator.xml:22
+msgid ""
+"The sample rate to use (in Hz). Higher values are more demanding for the CPU "
+"to generate, but result in better quality.\n"
+"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
+"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
+"[code]48000[/code].\n"
+"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
+"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
+"there is no quality difference to human hearing when going past 40,000 Hz "
+"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
+"generating lower-pitched sounds such as voices, lower sample rates such as "
+"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
+"quality."
+msgstr ""
+
+#: doc/classes/AudioStreamGeneratorPlayback.xml:4
+msgid "Plays back audio generated using [AudioStreamGenerator]."
+msgstr ""
+
+#: doc/classes/AudioStreamGeneratorPlayback.xml:7
+msgid ""
+"This class is meant to be used with [AudioStreamGenerator] to play back the "
+"generated audio in real-time."
+msgstr ""
+
+#: doc/classes/AudioStreamGeneratorPlayback.xml:18
+msgid ""
+"Returns [code]true[/code] if a buffer of the size [code]amount[/code] can be "
+"pushed to the audio sample data buffer without overflowing it, [code]false[/"
+"code] otherwise."
+msgstr ""
+
+#: doc/classes/AudioStreamGeneratorPlayback.xml:24
+msgid "Clears the audio sample data buffer."
+msgstr ""
+
+#: doc/classes/AudioStreamGeneratorPlayback.xml:30
+msgid ""
+"Returns the number of audio data frames left to play. If this returned "
+"number reaches [code]0[/code], the audio will stop playing until frames are "
+"added again. Therefore, make sure your script can always generate and push "
+"new audio frames fast enough to avoid audio cracking."
+msgstr ""
+
+#: doc/classes/AudioStreamGeneratorPlayback.xml:42
+msgid ""
+"Pushes several audio data frames to the buffer. This is usually more "
+"efficient than [method push_frame] in C# and compiled languages via "
+"GDNative, but [method push_buffer] may be [i]less[/i] efficient in GDScript."
+msgstr ""
+
+#: doc/classes/AudioStreamGeneratorPlayback.xml:49
+msgid ""
+"Pushes a single audio data frame to the buffer. This is usually less "
+"efficient than [method push_buffer] in C# and compiled languages via "
+"GDNative, but [method push_frame] may be [i]more[/i] efficient in GDScript."
+msgstr ""
+
+#: modules/minimp3/doc_classes/AudioStreamMP3.xml:4
+#: modules/minimp3/doc_classes/AudioStreamMP3.xml:7
+msgid "MP3 audio stream driver."
+msgstr ""
+
+#: modules/minimp3/doc_classes/AudioStreamMP3.xml:15
+#: modules/stb_vorbis/doc_classes/AudioStreamOGGVorbis.xml:15
+msgid "Contains the audio data in bytes."
+msgstr ""
+
+#: modules/minimp3/doc_classes/AudioStreamMP3.xml:18
+#: modules/stb_vorbis/doc_classes/AudioStreamOGGVorbis.xml:18
+msgid ""
+"If [code]true[/code], the stream will automatically loop when it reaches the "
+"end."
+msgstr ""
+
+#: modules/minimp3/doc_classes/AudioStreamMP3.xml:21
+#: modules/stb_vorbis/doc_classes/AudioStreamOGGVorbis.xml:21
+msgid "Time in seconds at which the stream starts after being looped."
+msgstr ""
+
+#: modules/stb_vorbis/doc_classes/AudioStreamOGGVorbis.xml:4
+#: modules/stb_vorbis/doc_classes/AudioStreamOGGVorbis.xml:7
+msgid "OGG Vorbis audio stream driver."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayback.xml:4
+msgid "Meta class for playing back audio."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayback.xml:7
+msgid ""
+"Can play, loop, pause a scroll through audio. See [AudioStream] and "
+"[AudioStreamOGGVorbis] for usage."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer.xml:4
+msgid "Plays back audio non-positionally."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer.xml:7
+msgid ""
+"Plays an audio stream non-positionally.\n"
+"To play audio positionally, use [AudioStreamPlayer2D] or "
+"[AudioStreamPlayer3D] instead of [AudioStreamPlayer]."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer.xml:22
+msgid "Returns the position in the [AudioStream] in seconds."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer.xml:28
+msgid ""
+"Returns the [AudioStreamPlayback] object associated with this "
+"[AudioStreamPlayer]."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer.xml:35
+msgid "Plays the audio from the given [code]from_position[/code], in seconds."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer.xml:42 doc/classes/AudioStreamPlayer2D.xml:38
+#: doc/classes/AudioStreamPlayer3D.xml:39
+msgid "Sets the position from which audio will be played, in seconds."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer.xml:48 doc/classes/AudioStreamPlayer2D.xml:44
+#: doc/classes/AudioStreamPlayer3D.xml:45
+msgid "Stops the audio."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer.xml:54 doc/classes/AudioStreamPlayer2D.xml:56
+msgid "If [code]true[/code], audio plays when added to scene tree."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer.xml:57 doc/classes/AudioStreamPlayer2D.xml:59
+msgid "Bus on which this audio is playing."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer.xml:60
+msgid ""
+"If the audio configuration has more than two speakers, this sets the target "
+"channels. See [enum MixTarget] constants."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer.xml:63 doc/classes/AudioStreamPlayer2D.xml:65
+#: doc/classes/AudioStreamPlayer3D.xml:91
+msgid ""
+"The pitch and the tempo of the audio, as a multiplier of the audio sample's "
+"sample rate."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer.xml:66 doc/classes/AudioStreamPlayer2D.xml:68
+#: doc/classes/AudioStreamPlayer3D.xml:94
+msgid "If [code]true[/code], audio is playing."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer.xml:69 doc/classes/AudioStreamPlayer2D.xml:71
+msgid "The [AudioStream] object to be played."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer.xml:72 doc/classes/AudioStreamPlayer2D.xml:74
+msgid ""
+"If [code]true[/code], the playback is paused. You can resume it by setting "
+"[code]stream_paused[/code] to [code]false[/code]."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer.xml:75
+msgid "Volume of sound, in dB."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer.xml:81 doc/classes/AudioStreamPlayer2D.xml:83
+#: doc/classes/AudioStreamPlayer3D.xml:112
+msgid "Emitted when the audio stops playing."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer.xml:87
+msgid "The audio will be played only on the first channel."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer.xml:90
+msgid "The audio will be played on all surround channels."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer.xml:93
+msgid ""
+"The audio will be played on the second channel, which is usually the center."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer2D.xml:4
+msgid "Plays positional sound in 2D space."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer2D.xml:7
+msgid ""
+"Plays audio that dampens with distance from screen center.\n"
+"See also [AudioStreamPlayer] to play a sound non-positionally.\n"
+"[b]Note:[/b] Hiding an [AudioStreamPlayer2D] node does not disable its audio "
+"output. To temporarily disable an [AudioStreamPlayer2D]'s audio output, set "
+"[member volume_db] to a very low value like [code]-100[/code] (which isn't "
+"audible to human hearing)."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer2D.xml:18
+#: doc/classes/AudioStreamPlayer3D.xml:19
+msgid "Returns the position in the [AudioStream]."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer2D.xml:24
+msgid ""
+"Returns the [AudioStreamPlayback] object associated with this "
+"[AudioStreamPlayer2D]."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer2D.xml:31
+#: doc/classes/AudioStreamPlayer3D.xml:32
+msgid ""
+"Plays the audio from the given position [code]from_position[/code], in "
+"seconds."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer2D.xml:50
+#: doc/classes/AudioStreamPlayer3D.xml:51
+msgid "Areas in which this sound plays."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer2D.xml:53
+msgid "Dampens audio over distance with this as an exponent."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer2D.xml:62
+msgid "Maximum distance from which audio is still hearable."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer2D.xml:77
+msgid "Base volume without dampening."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:4
+msgid "Plays positional sound in 3D space."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:7
+msgid ""
+"Plays a sound effect with directed sound effects, dampens with distance if "
+"needed, generates effect of hearable position in space. For greater realism, "
+"a low-pass filter is automatically applied to distant sounds. This can be "
+"disabled by setting [member attenuation_filter_cutoff_hz] to [code]20500[/"
+"code].\n"
+"By default, audio is heard from the camera position. This can be changed by "
+"adding a [Listener] node to the scene and enabling it by calling [method "
+"Listener.make_current] on it.\n"
+"See also [AudioStreamPlayer] to play a sound non-positionally.\n"
+"[b]Note:[/b] Hiding an [AudioStreamPlayer3D] node does not disable its audio "
+"output. To temporarily disable an [AudioStreamPlayer3D]'s audio output, set "
+"[member unit_db] to a very low value like [code]-100[/code] (which isn't "
+"audible to human hearing)."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:25
+msgid ""
+"Returns the [AudioStreamPlayback] object associated with this "
+"[AudioStreamPlayer3D]."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:54
+msgid ""
+"Dampens audio using a low-pass filter above this frequency, in Hz. To "
+"disable the dampening effect entirely, set this to [code]20500[/code] as "
+"this frequency is above the human hearing limit."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:57
+msgid "Amount how much the filter affects the loudness, in decibels."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:60
+msgid ""
+"Decides if audio should get quieter with distance linearly, quadratically, "
+"logarithmically, or not be affected by distance, effectively disabling "
+"attenuation."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:63
+msgid ""
+"If [code]true[/code], audio plays when the AudioStreamPlayer3D node is added "
+"to scene tree."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:66
+msgid "The bus on which this audio is playing."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:69
+msgid ""
+"Decides in which step the [url=https://en.wikipedia.org/wiki/"
+"Doppler_effect]Doppler effect[/url] should be calculated.\n"
+"[b]Note:[/b] Only effective if the current [Camera]'s [member Camera."
+"doppler_tracking] property is set to a value other than [constant Camera."
+"DOPPLER_TRACKING_DISABLED]."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:73
+msgid "The angle in which the audio reaches cameras undampened."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:76
+msgid ""
+"If [code]true[/code], the audio should be dampened according to the "
+"direction of the sound."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:79
+msgid ""
+"Dampens audio if camera is outside of [member emission_angle_degrees] and "
+"[member emission_angle_enabled] is set by this factor, in decibels."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:82
+msgid "Sets the absolute maximum of the soundlevel, in decibels."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:85
+msgid ""
+"Sets the distance from which the [member out_of_range_mode] takes effect. "
+"Has no effect if set to 0."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:88
+msgid ""
+"Decides if audio should pause when source is outside of [member "
+"max_distance] range."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:97
+msgid "The [AudioStream] resource to be played."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:100
+msgid ""
+"If [code]true[/code], the playback is paused. You can resume it by setting "
+"[member stream_paused] to [code]false[/code]."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:103
+msgid "The base sound level unaffected by dampening, in decibels."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:106
+msgid ""
+"The factor for the attenuation effect. Higher values make the sound audible "
+"over a larger distance."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:118
+msgid "Linear dampening of loudness according to distance."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:121
+msgid "Squared dampening of loudness according to distance."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:124
+msgid "Logarithmic dampening of loudness according to distance."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:127
+msgid ""
+"No dampening of loudness according to distance. The sound will still be "
+"heard positionally, unlike an [AudioStreamPlayer]. [constant "
+"ATTENUATION_DISABLED] can be combined with a [member max_distance] value "
+"greater than [code]0.0[/code] to achieve linear attenuation clamped to a "
+"sphere of a defined size."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:130
+msgid ""
+"Mix this audio in, even when it's out of range. This increases CPU usage, "
+"but keeps the sound playing at the correct position if the camera leaves and "
+"enters the [AudioStreamPlayer3D]'s [member max_distance] radius."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:133
+msgid ""
+"Pause this audio when it gets out of range. This decreases CPU usage, but "
+"will cause the sound to restart if the camera leaves and enters the "
+"[AudioStreamPlayer3D]'s [member max_distance] radius."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:136
+msgid "Disables doppler tracking."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:139
+msgid "Executes doppler tracking in idle step (every rendered frame)."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml:142
+msgid ""
+"Executes doppler tracking in physics step (every simulated physics frame)."
+msgstr ""
+
+#: doc/classes/AudioStreamRandomPitch.xml:4
+msgid "Plays audio with random pitch shifting."
+msgstr ""
+
+#: doc/classes/AudioStreamRandomPitch.xml:7
+msgid "Randomly varies pitch on each start."
+msgstr ""
+
+#: doc/classes/AudioStreamRandomPitch.xml:15
+msgid "The current [AudioStream]."
+msgstr ""
+
+#: doc/classes/AudioStreamRandomPitch.xml:18
+msgid "The intensity of random pitch variation."
+msgstr ""
+
+#: doc/classes/AudioStreamSample.xml:4
+msgid "Stores audio data loaded from WAV files."
+msgstr ""
+
+#: doc/classes/AudioStreamSample.xml:7
+msgid ""
+"AudioStreamSample stores sound samples loaded from WAV files. To play the "
+"stored sound, use an [AudioStreamPlayer] (for non-positional audio) or "
+"[AudioStreamPlayer2D]/[AudioStreamPlayer3D] (for positional audio). The "
+"sound can be looped.\n"
+"This class can also be used to store dynamically-generated PCM audio data. "
+"See also [AudioStreamGenerator] for procedural audio generation."
+msgstr ""
+
+#: doc/classes/AudioStreamSample.xml:17
+msgid ""
+"Saves the AudioStreamSample as a WAV file to [code]path[/code]. Samples with "
+"IMA ADPCM format can't be saved.\n"
+"[b]Note:[/b] A [code].wav[/code] extension is automatically appended to "
+"[code]path[/code] if it is missing."
+msgstr ""
+
+#: doc/classes/AudioStreamSample.xml:24
+msgid ""
+"Contains the audio data in bytes.\n"
+"[b]Note:[/b] This property expects signed PCM8 data. To convert unsigned "
+"PCM8 to signed PCM8, subtract 128 from each byte."
+msgstr ""
+
+#: doc/classes/AudioStreamSample.xml:28
+msgid "Audio format. See [enum Format] constants for values."
+msgstr ""
+
+#: doc/classes/AudioStreamSample.xml:31
+msgid ""
+"The loop start point (in number of samples, relative to the beginning of the "
+"sample). This information will be imported automatically from the WAV file "
+"if present."
+msgstr ""
+
+#: doc/classes/AudioStreamSample.xml:34
+msgid ""
+"The loop end point (in number of samples, relative to the beginning of the "
+"sample). This information will be imported automatically from the WAV file "
+"if present."
+msgstr ""
+
+#: doc/classes/AudioStreamSample.xml:37
+msgid ""
+"The loop mode. This information will be imported automatically from the WAV "
+"file if present. See [enum LoopMode] constants for values."
+msgstr ""
+
+#: doc/classes/AudioStreamSample.xml:40
+msgid ""
+"The sample rate for mixing this audio. Higher values require more storage "
+"space, but result in better quality.\n"
+"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
+"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
+"[code]48000[/code].\n"
+"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
+"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
+"there is no quality difference to human hearing when going past 40,000 Hz "
+"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
+"using lower-pitched sounds such as voices, lower sample rates such as "
+"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
+"quality."
+msgstr ""
+
+#: doc/classes/AudioStreamSample.xml:45
+msgid "If [code]true[/code], audio is stereo."
+msgstr ""
+
+#: doc/classes/AudioStreamSample.xml:50
+msgid "8-bit audio codec."
+msgstr ""
+
+#: doc/classes/AudioStreamSample.xml:53
+msgid "16-bit audio codec."
+msgstr ""
+
+#: doc/classes/AudioStreamSample.xml:56
+msgid "Audio is compressed using IMA ADPCM."
+msgstr ""
+
+#: doc/classes/AudioStreamSample.xml:59
+msgid "Audio does not loop."
+msgstr ""
+
+#: doc/classes/AudioStreamSample.xml:62
+msgid ""
+"Audio loops the data between [member loop_begin] and [member loop_end], "
+"playing forward only."
+msgstr ""
+
+#: doc/classes/AudioStreamSample.xml:65
+msgid ""
+"Audio loops the data between [member loop_begin] and [member loop_end], "
+"playing back and forth."
+msgstr ""
+
+#: doc/classes/AudioStreamSample.xml:68
+msgid ""
+"Audio loops the data between [member loop_begin] and [member loop_end], "
+"playing backward only."
+msgstr ""
+
+#: doc/classes/BackBufferCopy.xml:4
+msgid ""
+"Copies a region of the screen (or the whole screen) to a buffer so it can be "
+"accessed in your shader scripts through the "
+"[code]texture(SCREEN_TEXTURE, ...)[/code] function."
+msgstr ""
+
+#: doc/classes/BackBufferCopy.xml:7
+msgid ""
+"Node for back-buffering the currently-displayed screen. The region defined "
+"in the BackBufferCopy node is buffered with the content of the screen it "
+"covers, or the entire screen according to the copy mode set. Use the "
+"[code]texture(SCREEN_TEXTURE, ...)[/code] function in your shader scripts to "
+"access the buffer.\n"
+"[b]Note:[/b] Since this node inherits from [Node2D] (and not [Control]), "
+"anchors and margins won't apply to child [Control]-derived nodes. This can "
+"be problematic when resizing the window. To avoid this, add [Control]-"
+"derived nodes as [i]siblings[/i] to the BackBufferCopy node instead of "
+"adding them as children."
+msgstr ""
+
+#: doc/classes/BackBufferCopy.xml:16
+msgid "Buffer mode. See [enum CopyMode] constants."
+msgstr ""
+
+#: doc/classes/BackBufferCopy.xml:19
+msgid ""
+"The area covered by the BackBufferCopy. Only used if [member copy_mode] is "
+"[constant COPY_MODE_RECT]."
+msgstr ""
+
+#: doc/classes/BackBufferCopy.xml:24
+msgid ""
+"Disables the buffering mode. This means the BackBufferCopy node will "
+"directly use the portion of screen it covers."
+msgstr ""
+
+#: doc/classes/BackBufferCopy.xml:27
+msgid "BackBufferCopy buffers a rectangular region."
+msgstr ""
+
+#: doc/classes/BackBufferCopy.xml:30
+msgid "BackBufferCopy buffers the entire screen."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:4
+msgid "Prerendered indirect light map for a scene."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:7
+msgid ""
+"Baked lightmaps are an alternative workflow for adding indirect (or baked) "
+"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
+"fine on low-end PCs and mobile devices as they consume almost no resources "
+"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
+"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
+"effect once lightmaps are baked again."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:12
+msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:20
+msgid ""
+"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
+"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
+"no root node is provided, parent of this node will be used as root instead. "
+"If no save path is provided it will try to match the path from the current "
+"[member light_data]."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:26
+msgid ""
+"When enabled, the lightmapper will merge the textures for all meshes into a "
+"single large layered texture. Not supported in GLES2."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:29
+msgid ""
+"Maximum size of each lightmap layer, only used when [member atlas_generate] "
+"is enabled."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:32
+msgid ""
+"Raycasting bias used during baking to avoid floating point precision issues."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:35
+msgid ""
+"The energy multiplier for each bounce. Higher values will make indirect "
+"lighting brighter. A value of [code]1.0[/code] represents physically "
+"accurate behavior, but higher values can be used to make indirect lighting "
+"propagate more visibly when using a low number of bounces. This can be used "
+"to speed up bake times by lowering the number of [member bounces] then "
+"increasing [member bounce_indirect_energy]. Unlike [member BakedLightmapData."
+"energy], this property does not affect direct lighting emitted by light "
+"nodes, emissive materials and the environment.\n"
+"[b]Note:[/b] [member bounce_indirect_energy] only has an effect if [member "
+"bounces] is set to a value greater than or equal to [code]1[/code]."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:39
+msgid ""
+"Number of light bounces that are taken into account during baking. See also "
+"[member bounce_indirect_energy]."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:42
+msgid "Grid size used for real-time capture information on dynamic objects."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:45
+msgid ""
+"When enabled, an octree containing the scene's lighting information will be "
+"computed. This octree will then be used to light dynamic objects in the "
+"scene."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:48
+msgid ""
+"Bias value to reduce the amount of light proagation in the captured octree."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:51
+msgid "Bake quality of the capture data."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:54
+msgid ""
+"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
+"roughly compute a suitable lightmap size."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:57
+msgid ""
+"The environment color when [member environment_mode] is set to [constant "
+"ENVIRONMENT_MODE_CUSTOM_COLOR]."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:60
+msgid ""
+"The energy scaling factor when when [member environment_mode] is set to "
+"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
+"ENVIRONMENT_MODE_CUSTOM_SKY]."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:63
+msgid ""
+"The [Sky] resource to use when [member environment_mode] is set o [constant "
+"ENVIRONMENT_MODE_CUSTOM_SKY]."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:66
+msgid "The rotation of the baked custom sky."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:69
+msgid ""
+"Minimum ambient light for all the lightmap texels. This doesn't take into "
+"account any occlusion from the scene's geometry, it simply ensures a minimum "
+"amount of light on all the lightmap texels. Can be used for artistic control "
+"on shadow color."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:72
+msgid "Decides which environment to use during baking."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:75
+msgid ""
+"Size of the baked lightmap. Only meshes inside this region will be included "
+"in the baked lightmap, also used as the bounds of the captured region for "
+"dynamic lighting."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:78
+msgid ""
+"Deprecated, in previous versions it determined the location where lightmaps "
+"were be saved."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:81
+msgid "The calculated light data."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:84
+msgid ""
+"Determines the amount of samples per texel used in indrect light baking. The "
+"amount of samples for each quality level can be configured in the project "
+"settings."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:87
+msgid ""
+"Store full color values in the lightmap textures. When disabled, lightmap "
+"textures will store a single brightness channel. Can be disabled to reduce "
+"disk usage if the scene contains only white lights or you don't mind losing "
+"color information in indirect lighting."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:90
+msgid ""
+"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
+"to Monte Carlo based global illumination."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:93
+msgid ""
+"If [code]true[/code], stores the lightmap textures in a high dynamic range "
+"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
+"dynamic range PNG image. This can be set to [code]false[/code] to reduce "
+"disk usage, but light values over 1.0 will be clamped and you may see "
+"banding caused by the reduced precision.\n"
+"[b]Note:[/b] Setting [member use_hdr] to [code]true[/code] will decrease "
+"lightmap banding even when using the GLES2 backend or if [member "
+"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:99
+msgid "The lowest bake quality mode. Fastest to calculate."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:102
+msgid "The default bake quality mode."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:105
+msgid "A higher bake quality mode. Takes longer to calculate."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:108
+msgid "The highest bake quality mode. Takes the longest to calculate."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:111
+msgid "Baking was successful."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:114
+msgid ""
+"Returns if no viable save path is found. This can happen where an [member "
+"image_path] is not specified or when the save location is invalid."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
+msgid "Currently unused."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:120
+msgid "Returns when the baker cannot save per-mesh textures to file."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:123
+msgid "The size of the generated lightmaps is too large."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:126
+msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:129
+msgid "Returns if user cancels baking."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:132
+msgid ""
+"Returns if lightmapper can't be created. Unless you are using a custom "
+"lightmapper, please report this as bug."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:135
+msgid ""
+"There is no root node to start baking from. Either provide [code]from_node[/"
+"code] argument or attach this node to a parent that should be used as root."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:138
+msgid "No environment is used during baking."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:141
+msgid "The baked environment is automatically picked from the current scene."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:144
+msgid "A custom sky is used as environment during baking."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:147
+msgid "A custom solid color is used as environment during baking."
+msgstr ""
+
+#: doc/classes/BakedLightmapData.xml:56
+msgid ""
+"Global energy multiplier for baked and dynamic capture objects. This can be "
+"changed at run-time without having to bake lightmaps again.\n"
+"To adjust only the energy of indirect lighting (without affecting direct "
+"lighting or emissive materials), adjust [member BakedLightmap."
+"bounce_indirect_energy] and bake lightmaps again."
+msgstr ""
+
+#: doc/classes/BakedLightmapData.xml:60
+msgid ""
+"Controls whether dynamic capture objects receive environment lighting or not."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:4
+msgid "Base class for different kinds of buttons."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:7
+msgid ""
+"BaseButton is the abstract base class for buttons, so it shouldn't be used "
+"directly (it doesn't display anything). Other types of buttons inherit from "
+"it."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:15
+msgid ""
+"Called when the button is pressed. If you need to know the button's pressed "
+"state (and [member toggle_mode] is active), use [method _toggled] instead."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:22
+msgid ""
+"Called when the button is toggled (only if [member toggle_mode] is active)."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:28
+msgid ""
+"Returns the visual state used to draw the button. This is useful mainly when "
+"implementing your own draw code by either overriding _draw() or connecting "
+"to \"draw\" signal. The visual state of the button is defined by the [enum "
+"DrawMode] enum."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:34
+msgid ""
+"Returns [code]true[/code] if the mouse has entered the button and has not "
+"left it yet."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:41
+msgid ""
+"Changes the [member pressed] state of the button, without emitting [signal "
+"toggled]. Use when you just want to change the state of the button without "
+"sending the pressed event (e.g. when initializing scene). Only works if "
+"[member toggle_mode] is [code]true[/code].\n"
+"[b]Note:[/b] This method doesn't unpress other buttons in its button [member "
+"group]."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:48
+msgid ""
+"Determines when the button is considered clicked, one of the [enum "
+"ActionMode] constants."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:51
+msgid ""
+"Binary mask to choose which mouse buttons this button will respond to.\n"
+"To allow both left-click and right-click, use [code]BUTTON_MASK_LEFT | "
+"BUTTON_MASK_RIGHT[/code]."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:55
+msgid ""
+"If [code]true[/code], the button is in disabled state and can't be clicked "
+"or toggled."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:58
+msgid ""
+"[i]Deprecated.[/i] This property has been deprecated due to redundancy and "
+"will be removed in Godot 4.0. This property no longer has any effect when "
+"set. Please use [member Control.focus_mode] instead."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:62
+msgid "[ButtonGroup] associated to the button."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:65
+msgid ""
+"If [code]true[/code], the button stays pressed when moving the cursor "
+"outside the button while pressing it.\n"
+"[b]Note:[/b] This property only affects the button's visual appearance. "
+"Signals will be emitted at the same moment regardless of this property's "
+"value."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:69
+msgid ""
+"If [code]true[/code], the button's state is pressed. Means the button is "
+"pressed down or toggled (if [member toggle_mode] is active). Only works if "
+"[member toggle_mode] is [code]true[/code].\n"
+"[b]Note:[/b] Setting [member pressed] will result in [signal toggled] to be "
+"emitted. If you want to change the pressed state without emitting that "
+"signal, use [method set_pressed_no_signal]."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:73
+msgid "[ShortCut] associated to the button."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:76
+msgid ""
+"If [code]true[/code], the button will add information about its shortcut in "
+"the tooltip."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:79
+msgid ""
+"If [code]true[/code], the button is in toggle mode. Makes the button flip "
+"state between pressed and unpressed each time its area is clicked."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:85
+msgid "Emitted when the button starts being held down."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:90
+msgid "Emitted when the button stops being held down."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:95
+msgid ""
+"Emitted when the button is toggled or pressed. This is on [signal "
+"button_down] if [member action_mode] is [constant ACTION_MODE_BUTTON_PRESS] "
+"and on [signal button_up] otherwise.\n"
+"If you need to know the button's pressed state (and [member toggle_mode] is "
+"active), use [signal toggled] instead."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:102
+msgid ""
+"Emitted when the button was just toggled between pressed and normal states "
+"(only if [member toggle_mode] is active). The new state is contained in the "
+"[code]button_pressed[/code] argument."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:108
+msgid ""
+"The normal state (i.e. not pressed, not hovered, not toggled and enabled) of "
+"buttons."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:111
+msgid "The state of buttons are pressed."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:114
+msgid "The state of buttons are hovered."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:117
+msgid "The state of buttons are disabled."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:120
+msgid "The state of buttons are both hovered and pressed."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:123
+msgid "Require just a press to consider the button clicked."
+msgstr ""
+
+#: doc/classes/BaseButton.xml:126
+msgid ""
+"Require a press and a subsequent release before considering the button "
+"clicked."
+msgstr ""
+
+#: doc/classes/Basis.xml:4
+msgid "3×3 matrix datatype."
+msgstr ""
+
+#: doc/classes/Basis.xml:7
+msgid ""
+"3×3 matrix used for 3D rotation and scale. Almost always used as an "
+"orthogonal basis for a Transform.\n"
+"Contains 3 vector fields X, Y and Z as its columns, which are typically "
+"interpreted as the local basis vectors of a transformation. For such use, it "
+"is composed of a scaling and a rotation matrix, in that order (M = R.S).\n"
+"Can also be accessed as array of 3D vectors. These vectors are normally "
+"orthogonal to each other, but are not necessarily normalized (due to "
+"scaling).\n"
+"For more information, read the \"Matrices and transforms\" documentation "
+"article."
+msgstr ""
+
+#: doc/classes/Basis.xml:14 doc/classes/Transform.xml:12
+#: doc/classes/Transform2D.xml:12
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/math/matrices_and_transforms."
+"html"
+msgstr ""
+
+#: doc/classes/Basis.xml:15 doc/classes/Transform.xml:13
+msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/using_transforms.html"
+msgstr ""
+
+#: doc/classes/Basis.xml:16 doc/classes/Line2D.xml:11
+#: doc/classes/Transform.xml:14 doc/classes/Transform2D.xml:13
+#: doc/classes/Vector2.xml:15 doc/classes/Vector3.xml:15
+msgid "https://godotengine.org/asset-library/asset/584"
+msgstr ""
+
+#: doc/classes/Basis.xml:18 doc/classes/CylinderShape.xml:12
+#: doc/classes/Dictionary.xml:88 doc/classes/DynamicFont.xml:18
+#: doc/classes/DynamicFontData.xml:10 doc/classes/File.xml:29
+#: doc/classes/Input.xml:12 doc/classes/InputEvent.xml:13
+#: doc/classes/InputEventAction.xml:12 doc/classes/InputEventMouseMotion.xml:12
+#: doc/classes/KinematicBody.xml:15 doc/classes/RayCast.xml:15
+#: doc/classes/StaticBody.xml:13 doc/classes/SurfaceTool.xml:22
+#: doc/classes/TextureButton.xml:12 doc/classes/TextureRect.xml:11
+#: doc/classes/Thread.xml:13 doc/classes/VBoxContainer.xml:10
+msgid "https://godotengine.org/asset-library/asset/676"
+msgstr ""
+
+#: doc/classes/Basis.xml:19 doc/classes/Line2D.xml:12
+#: doc/classes/Transform.xml:16 doc/classes/Transform2D.xml:14
+msgid "https://godotengine.org/asset-library/asset/583"
+msgstr ""
+
+#: doc/classes/Basis.xml:26
+msgid "Constructs a pure rotation basis matrix from the given quaternion."
+msgstr ""
+
+#: doc/classes/Basis.xml:33
+msgid ""
+"Constructs a pure rotation basis matrix from the given Euler angles (in the "
+"YXZ convention: when *composing*, first Y, then X, and Z last), given in the "
+"vector format as (X angle, Y angle, Z angle).\n"
+"Consider using the [Quat] constructor instead, which uses a quaternion "
+"instead of Euler angles."
+msgstr ""
+
+#: doc/classes/Basis.xml:42
+msgid ""
+"Constructs a pure rotation basis matrix, rotated around the given "
+"[code]axis[/code] by [code]phi[/code], in radians. The axis must be a "
+"normalized vector."
+msgstr ""
+
+#: doc/classes/Basis.xml:51
+msgid "Constructs a basis matrix from 3 axis vectors (matrix columns)."
+msgstr ""
+
+#: doc/classes/Basis.xml:57
+msgid ""
+"Returns the determinant of the basis matrix. If the basis is uniformly "
+"scaled, its determinant is the square of the scale.\n"
+"A negative determinant means the basis has a negative scale. A zero "
+"determinant means the basis isn't invertible, and is usually considered "
+"invalid."
+msgstr ""
+
+#: doc/classes/Basis.xml:64
+msgid ""
+"Returns the basis's rotation in the form of Euler angles (in the YXZ "
+"convention: when decomposing, first Z, then X, and Y last). The returned "
+"vector contains the rotation angles in the format (X angle, Y angle, Z "
+"angle).\n"
+"Consider using the [method get_rotation_quat] method instead, which returns "
+"a [Quat] quaternion instead of Euler angles."
+msgstr ""
+
+#: doc/classes/Basis.xml:71
+msgid ""
+"This function considers a discretization of rotations into 24 points on unit "
+"sphere, lying along the vectors (x,y,z) with each component being either -1, "
+"0, or 1, and returns the index of the point best representing the "
+"orientation of the object. It is mainly used by the [GridMap] editor. For "
+"further details, refer to the Godot source code."
+msgstr ""
+
+#: doc/classes/Basis.xml:77
+msgid ""
+"Returns the basis's rotation in the form of a quaternion. See [method "
+"get_euler] if you need Euler angles, but keep in mind quaternions should "
+"generally be preferred to Euler angles."
+msgstr ""
+
+#: doc/classes/Basis.xml:83
+msgid ""
+"Assuming that the matrix is the combination of a rotation and scaling, "
+"return the absolute value of scaling factors along each axis."
+msgstr ""
+
+#: doc/classes/Basis.xml:89
+msgid "Returns the inverse of the matrix."
+msgstr ""
+
+#: doc/classes/Basis.xml:97
+msgid ""
+"Returns [code]true[/code] if this basis and [code]b[/code] are approximately "
+"equal, by calling [code]is_equal_approx[/code] on each component.\n"
+"[b]Note:[/b] For complicated reasons, the epsilon argument is always "
+"discarded. Don't use the epsilon argument, it does nothing."
+msgstr ""
+
+#: doc/classes/Basis.xml:104
+msgid ""
+"Returns the orthonormalized version of the matrix (useful to call from time "
+"to time to avoid rounding error for orthogonal matrices). This performs a "
+"Gram-Schmidt orthonormalization on the basis of the matrix."
+msgstr ""
+
+#: doc/classes/Basis.xml:112
+msgid ""
+"Introduce an additional rotation around the given axis by phi (radians). The "
+"axis must be a normalized vector."
+msgstr ""
+
+#: doc/classes/Basis.xml:119
+msgid ""
+"Introduce an additional scaling specified by the given 3D scaling factor."
+msgstr ""
+
+#: doc/classes/Basis.xml:127
+msgid ""
+"Assuming that the matrix is a proper rotation matrix, slerp performs a "
+"spherical-linear interpolation with another rotation matrix."
+msgstr ""
+
+#: doc/classes/Basis.xml:134
+msgid "Transposed dot product with the X axis of the matrix."
+msgstr ""
+
+#: doc/classes/Basis.xml:141
+msgid "Transposed dot product with the Y axis of the matrix."
+msgstr ""
+
+#: doc/classes/Basis.xml:148
+msgid "Transposed dot product with the Z axis of the matrix."
+msgstr ""
+
+#: doc/classes/Basis.xml:154
+msgid "Returns the transposed version of the matrix."
+msgstr ""
+
+#: doc/classes/Basis.xml:161
+msgid "Returns a vector transformed (multiplied) by the matrix."
+msgstr ""
+
+#: doc/classes/Basis.xml:168
+msgid ""
+"Returns a vector transformed (multiplied) by the transposed basis matrix.\n"
+"[b]Note:[/b] This results in a multiplication by the inverse of the matrix "
+"only if it represents a rotation-reflection."
+msgstr ""
+
+#: doc/classes/Basis.xml:175 doc/classes/Transform2D.xml:150
+msgid ""
+"The basis matrix's X vector (column 0). Equivalent to array index [code]0[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Basis.xml:178 doc/classes/Transform2D.xml:153
+msgid ""
+"The basis matrix's Y vector (column 1). Equivalent to array index [code]1[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Basis.xml:181
+msgid ""
+"The basis matrix's Z vector (column 2). Equivalent to array index [code]2[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Basis.xml:186
+msgid ""
+"The identity basis, with no rotation or scaling applied.\n"
+"This is identical to calling [code]Basis()[/code] without any parameters. "
+"This constant can be used to make your code clearer, and for consistency "
+"with C#."
+msgstr ""
+
+#: doc/classes/Basis.xml:190
+msgid ""
+"The basis that will flip something along the X axis when used in a "
+"transformation."
+msgstr ""
+
+#: doc/classes/Basis.xml:193
+msgid ""
+"The basis that will flip something along the Y axis when used in a "
+"transformation."
+msgstr ""
+
+#: doc/classes/Basis.xml:196
+msgid ""
+"The basis that will flip something along the Z axis when used in a "
+"transformation."
+msgstr ""
+
+#: doc/classes/BitMap.xml:4
+msgid "Boolean matrix."
+msgstr ""
+
+#: doc/classes/BitMap.xml:7
+msgid ""
+"A two-dimensional array of boolean values, can be used to efficiently store "
+"a binary matrix (every matrix element takes only one bit) and query the "
+"values using natural cartesian coordinates."
+msgstr ""
+
+#: doc/classes/BitMap.xml:16
+msgid ""
+"Creates a bitmap with the specified size, filled with [code]false[/code]."
+msgstr ""
+
+#: doc/classes/BitMap.xml:24
+msgid ""
+"Creates a bitmap that matches the given image dimensions, every element of "
+"the bitmap is set to [code]false[/code] if the alpha value of the image at "
+"that position is equal to [code]threshold[/code] or less, and [code]true[/"
+"code] in other case."
+msgstr ""
+
+#: doc/classes/BitMap.xml:31
+msgid "Returns bitmap's value at the specified position."
+msgstr ""
+
+#: doc/classes/BitMap.xml:37
+msgid "Returns bitmap's dimensions."
+msgstr ""
+
+#: doc/classes/BitMap.xml:43
+msgid ""
+"Returns the amount of bitmap elements that are set to [code]true[/code]."
+msgstr ""
+
+#: doc/classes/BitMap.xml:51
+msgid ""
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
+msgstr ""
+
+#: doc/classes/BitMap.xml:66
+msgid ""
+"Sets the bitmap's element at the specified position, to the specified value."
+msgstr ""
+
+#: doc/classes/BitMap.xml:74
+msgid "Sets a rectangular portion of the bitmap to the specified value."
+msgstr ""
+
+#: doc/classes/BitmapFont.xml:4
+msgid ""
+"Renders text using fonts under the [url=https://www.angelcode.com/products/"
+"bmfont/]BMFont[/url] format.\n"
+"Handles files with the [code].fnt[/code] extension."
+msgstr ""
+
+#: doc/classes/BitmapFont.xml:8
+msgid ""
+"Renders text using [code]*.fnt[/code] fonts containing texture atlases. "
+"Supports distance fields. For using vector font files like TTF directly, see "
+"[DynamicFont]."
+msgstr ""
+
+#: doc/classes/BitmapFont.xml:21
+msgid ""
+"Adds a character to the font, where [code]character[/code] is the Unicode "
+"value, [code]texture[/code] is the texture index, [code]rect[/code] is the "
+"region in the texture (in pixels!), [code]align[/code] is the (optional) "
+"alignment for the character and [code]advance[/code] is the (optional) "
+"advance."
+msgstr ""
+
+#: doc/classes/BitmapFont.xml:30
+msgid ""
+"Adds a kerning pair to the [BitmapFont] as a difference. Kerning pairs are "
+"special cases where a typeface advance is determined by the next character."
+msgstr ""
+
+#: doc/classes/BitmapFont.xml:37
+msgid "Adds a texture to the [BitmapFont]."
+msgstr ""
+
+#: doc/classes/BitmapFont.xml:43
+msgid "Clears all the font data and settings."
+msgstr ""
+
+#: doc/classes/BitmapFont.xml:50
+msgid ""
+"Creates a BitmapFont from the [code]*.fnt[/code] file at [code]path[/code]."
+msgstr ""
+
+#: doc/classes/BitmapFont.xml:58
+msgid "Returns a kerning pair as a difference."
+msgstr ""
+
+#: doc/classes/BitmapFont.xml:65
+msgid "Returns the font atlas texture at index [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/BitmapFont.xml:71
+msgid "Returns the number of textures in the BitmapFont atlas."
+msgstr ""
+
+#: doc/classes/BitmapFont.xml:77
+msgid "Ascent (number of pixels above the baseline)."
+msgstr ""
+
+#: doc/classes/BitmapFont.xml:80
+msgid "If [code]true[/code], distance field hint is enabled."
+msgstr ""
+
+#: doc/classes/BitmapFont.xml:83
+msgid "The fallback font."
+msgstr ""
+
+#: doc/classes/BitmapFont.xml:86
+msgid "Total font height (ascent plus descent) in pixels."
+msgstr ""
+
+#: doc/classes/Bone2D.xml:4
+msgid "Joint used with [Skeleton2D] to control and animate other nodes."
+msgstr ""
+
+#: doc/classes/Bone2D.xml:7
+msgid ""
+"Use a hierarchy of [code]Bone2D[/code] bound to a [Skeleton2D] to control, "
+"and animate other [Node2D] nodes.\n"
+"You can use [code]Bone2D[/code] and [code]Skeleton2D[/code] nodes to animate "
+"2D meshes created with the Polygon 2D UV editor.\n"
+"Each bone has a [member rest] transform that you can reset to with [method "
+"apply_rest]. These rest poses are relative to the bone's parent.\n"
+"If in the editor, you can set the rest pose of an entire skeleton using a "
+"menu option, from the code, you need to iterate over the bones to set their "
+"individual rest poses."
+msgstr ""
+
+#: doc/classes/Bone2D.xml:18
+msgid "Stores the node's current transforms in [member rest]."
+msgstr ""
+
+#: doc/classes/Bone2D.xml:24
+msgid ""
+"Returns the node's index as part of the entire skeleton. See [Skeleton2D]."
+msgstr ""
+
+#: doc/classes/Bone2D.xml:30
+msgid ""
+"Returns the node's [member rest] [code]Transform2D[/code] if it doesn't have "
+"a parent, or its rest pose relative to its parent."
+msgstr ""
+
+#: doc/classes/Bone2D.xml:36
+msgid ""
+"Length of the bone's representation drawn in the editor's viewport in pixels."
+msgstr ""
+
+#: doc/classes/Bone2D.xml:39
+msgid ""
+"Rest transform of the bone. You can reset the node's transforms to this "
+"value using [method apply_rest]."
+msgstr ""
+
+#: doc/classes/BoneAttachment.xml:4
+msgid "A node that will attach to a bone."
+msgstr ""
+
+#: doc/classes/BoneAttachment.xml:7
+msgid ""
+"This node must be the child of a [Skeleton] node. You can then select a bone "
+"for this node to attach to. The BoneAttachment node will copy the transform "
+"of the selected bone."
+msgstr ""
+
+#: doc/classes/BoneAttachment.xml:15
+msgid "The name of the attached bone."
+msgstr ""
+
+#: doc/classes/bool.xml:4
+msgid "Boolean built-in type."
+msgstr ""
+
+#: doc/classes/bool.xml:7
+msgid ""
+"Boolean is a built-in type. There are two boolean values: [code]true[/code] "
+"and [code]false[/code]. You can think of it as a switch with on or off (1 or "
+"0) setting. Booleans are used in programming for logic in condition "
+"statements, like [code]if[/code] statements.\n"
+"Booleans can be directly used in [code]if[/code] statements. The code below "
+"demonstrates this on the [code]if can_shoot:[/code] line. You don't need to "
+"use [code]== true[/code], you only need [code]if can_shoot:[/code]. "
+"Similarly, use [code]if not can_shoot:[/code] rather than [code]== false[/"
+"code].\n"
+"[codeblock]\n"
+"var can_shoot = true\n"
+"\n"
+"func shoot():\n"
+" if can_shoot:\n"
+" pass # Perform shooting actions here.\n"
+"[/codeblock]\n"
+"The following code will only create a bullet if both conditions are met: "
+"action \"shoot\" is pressed and if [code]can_shoot[/code] is [code]true[/"
+"code].\n"
+"[b]Note:[/b] [code]Input.is_action_pressed(\"shoot\")[/code] is also a "
+"boolean that is [code]true[/code] when \"shoot\" is pressed and [code]false[/"
+"code] when \"shoot\" isn't pressed.\n"
+"[codeblock]\n"
+"var can_shoot = true\n"
+"\n"
+"func shoot():\n"
+" if can_shoot and Input.is_action_pressed(\"shoot\"):\n"
+" create_bullet()\n"
+"[/codeblock]\n"
+"The following code will set [code]can_shoot[/code] to [code]false[/code] and "
+"start a timer. This will prevent player from shooting until the timer runs "
+"out. Next [code]can_shoot[/code] will be set to [code]true[/code] again "
+"allowing player to shoot once again.\n"
+"[codeblock]\n"
+"var can_shoot = true\n"
+"onready var cool_down = $CoolDownTimer\n"
+"\n"
+"func shoot():\n"
+" if can_shoot and Input.is_action_pressed(\"shoot\"):\n"
+" create_bullet()\n"
+" can_shoot = false\n"
+" cool_down.start()\n"
+"\n"
+"func _on_CoolDownTimer_timeout():\n"
+" can_shoot = true\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/bool.xml:47
+msgid ""
+"Cast an [int] value to a boolean value, this method will return [code]false[/"
+"code] if [code]0[/code] is passed in, and [code]true[/code] for all other "
+"ints."
+msgstr ""
+
+#: doc/classes/bool.xml:54
+msgid ""
+"Cast a [float] value to a boolean value, this method will return "
+"[code]false[/code] if [code]0.0[/code] is passed in, and [code]true[/code] "
+"for all other floats."
+msgstr ""
+
+#: doc/classes/bool.xml:61
+msgid ""
+"Cast a [String] value to a boolean value, this method will return "
+"[code]false[/code] if [code]\"\"[/code] is passed in, and [code]true[/code] "
+"for all non-empty strings.\n"
+"Examples: [code]bool(\"False\")[/code] returns [code]true[/code], "
+"[code]bool(\"\")[/code] returns [code]false[/code]."
+msgstr ""
+
+#: doc/classes/BoxContainer.xml:4
+msgid "Base class for box containers."
+msgstr ""
+
+#: doc/classes/BoxContainer.xml:7
+msgid ""
+"Arranges child controls vertically or horizontally, and rearranges the "
+"controls automatically when their minimum size changes."
+msgstr ""
+
+#: doc/classes/BoxContainer.xml:16
+msgid ""
+"Adds a control to the box as a spacer. If [code]true[/code], [code]begin[/"
+"code] will insert the spacer control in front of other children."
+msgstr ""
+
+#: doc/classes/BoxContainer.xml:22
+msgid ""
+"The alignment of the container's children (must be one of [constant "
+"ALIGN_BEGIN], [constant ALIGN_CENTER] or [constant ALIGN_END])."
+msgstr ""
+
+#: doc/classes/BoxContainer.xml:28
+msgid "Aligns children with the beginning of the container."
+msgstr ""
+
+#: doc/classes/BoxContainer.xml:31
+msgid "Aligns children with the center of the container."
+msgstr ""
+
+#: doc/classes/BoxContainer.xml:34
+msgid "Aligns children with the end of the container."
+msgstr ""
+
+#: doc/classes/BoxShape.xml:4
+msgid "Box shape resource."
+msgstr ""
+
+#: doc/classes/BoxShape.xml:7
+msgid "3D box shape that can be a child of a [PhysicsBody] or [Area]."
+msgstr ""
+
+#: doc/classes/BoxShape.xml:10 doc/classes/CapsuleShape.xml:10
+#: doc/classes/ConcavePolygonShape.xml:11 doc/classes/ConvexPolygonShape.xml:10
+#: doc/classes/CylinderShape.xml:11 doc/classes/ProjectSettings.xml:13
+#: doc/classes/RigidBody.xml:16 doc/classes/SphereShape.xml:10
+#: doc/classes/StaticBody.xml:11
+msgid "https://godotengine.org/asset-library/asset/675"
+msgstr ""
+
+#: doc/classes/BoxShape.xml:11 doc/classes/CollisionShape.xml:11
+#: modules/gridmap/doc_classes/GridMap.xml:16 doc/classes/KinematicBody.xml:13
+#: doc/classes/Mesh.xml:11 doc/classes/MeshInstance.xml:11
+#: doc/classes/MeshLibrary.xml:10
+msgid "https://godotengine.org/asset-library/asset/126"
+msgstr ""
+
+#: doc/classes/BoxShape.xml:18
+msgid ""
+"The box's half extents. The width, height and depth of this shape is twice "
+"the half extents."
+msgstr ""
+
+#: doc/classes/Button.xml:4
+msgid "Standard themed Button."
+msgstr ""
+
+#: doc/classes/Button.xml:7
+msgid ""
+"Button is the standard themed button. It can contain text and an icon, and "
+"will display them according to the current [Theme].\n"
+"[b]Example of creating a button and assigning an action when pressed by code:"
+"[/b]\n"
+"[codeblock]\n"
+"func _ready():\n"
+" var button = Button.new()\n"
+" button.text = \"Click me\"\n"
+" button.connect(\"pressed\", self, \"_button_pressed\")\n"
+" add_child(button)\n"
+"\n"
+"func _button_pressed():\n"
+" print(\"Hello world!\")\n"
+"[/codeblock]\n"
+"Buttons (like all Control nodes) can also be created in the editor, but some "
+"situations may require creating them from code.\n"
+"See also [BaseButton] which contains common properties and methods "
+"associated with this node.\n"
+"[b]Note:[/b] Buttons do not interpret touch input and therefore don't "
+"support multitouch, since mouse emulation can only press one button at a "
+"given time. Use [TouchScreenButton] for buttons that trigger gameplay "
+"movement or actions, as [TouchScreenButton] supports multitouch."
+msgstr ""
+
+#: doc/classes/Button.xml:25 doc/classes/Dictionary.xml:89
+#: doc/classes/GridContainer.xml:12 doc/classes/OS.xml:10
+#: doc/classes/PoolStringArray.xml:11 doc/classes/ProjectSettings.xml:15
+#: doc/classes/ResourceLoader.xml:11 doc/classes/RichTextLabel.xml:17
+msgid "https://godotengine.org/asset-library/asset/677"
+msgstr ""
+
+#: doc/classes/Button.xml:31
+msgid ""
+"Text alignment policy for the button's text, use one of the [enum TextAlign] "
+"constants."
+msgstr ""
+
+#: doc/classes/Button.xml:34
+msgid ""
+"When this property is enabled, text that is too large to fit the button is "
+"clipped, when disabled the Button will always be wide enough to hold the "
+"text."
+msgstr ""
+
+#: doc/classes/Button.xml:37
+msgid ""
+"When enabled, the button's icon will expand/shrink to fit the button's size "
+"while keeping its aspect."
+msgstr ""
+
+#: doc/classes/Button.xml:40
+msgid "Flat buttons don't display decoration."
+msgstr ""
+
+#: doc/classes/Button.xml:43
+msgid ""
+"Button's icon, if text is present the icon will be placed before the text."
+msgstr ""
+
+#: doc/classes/Button.xml:46 doc/classes/LinkButton.xml:18
+msgid "The button's text that will be displayed inside the button's area."
+msgstr ""
+
+#: doc/classes/Button.xml:51
+msgid "Align the text to the left."
+msgstr ""
+
+#: doc/classes/Button.xml:54
+msgid "Align the text to the center."
+msgstr ""
+
+#: doc/classes/Button.xml:57
+msgid "Align the text to the right."
+msgstr ""
+
+#: doc/classes/Button.xml:62
+msgid "[StyleBox] used when the [Button] is disabled."
+msgstr ""
+
+#: doc/classes/Button.xml:65
+msgid ""
+"[StyleBox] used when the [Button] is focused. It is displayed over the "
+"current [StyleBox], so using [StyleBoxEmpty] will just disable the focus "
+"visual effect."
+msgstr ""
+
+#: doc/classes/Button.xml:68
+msgid "[Font] of the [Button]'s text."
+msgstr ""
+
+#: doc/classes/Button.xml:71
+msgid "Default text [Color] of the [Button]."
+msgstr ""
+
+#: doc/classes/Button.xml:74
+msgid "Text [Color] used when the [Button] is disabled."
+msgstr ""
+
+#: doc/classes/Button.xml:77
+msgid ""
+"Text [Color] used when the [Button] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/Button.xml:80
+msgid "Text [Color] used when the [Button] is being hovered."
+msgstr ""
+
+#: doc/classes/Button.xml:83
+msgid "Text [Color] used when the [Button] is being pressed."
+msgstr ""
+
+#: doc/classes/Button.xml:86
+msgid "[StyleBox] used when the [Button] is being hovered."
+msgstr ""
+
+#: doc/classes/Button.xml:89
+msgid "The horizontal space between [Button]'s icon and text."
+msgstr ""
+
+#: doc/classes/Button.xml:92
+msgid "Default [StyleBox] for the [Button]."
+msgstr ""
+
+#: doc/classes/Button.xml:95
+msgid "[StyleBox] used when the [Button] is being pressed."
+msgstr ""
+
+#: doc/classes/ButtonGroup.xml:4
+msgid "Group of Buttons."
+msgstr ""
+
+#: doc/classes/ButtonGroup.xml:7
+msgid ""
+"Group of [Button]. All direct and indirect children buttons become radios. "
+"Only one allows being pressed.\n"
+"[member BaseButton.toggle_mode] should be [code]true[/code]."
+msgstr ""
+
+#: doc/classes/ButtonGroup.xml:16
+msgid ""
+"Returns an [Array] of [Button]s who have this as their [ButtonGroup] (see "
+"[member BaseButton.group])."
+msgstr ""
+
+#: doc/classes/ButtonGroup.xml:22
+msgid "Returns the current pressed button."
+msgstr ""
+
+#: doc/classes/ButtonGroup.xml:33
+msgid "Emitted when one of the buttons of the group is pressed."
+msgstr ""
+
+#: doc/classes/Camera.xml:4
+msgid "Camera node, displays from a point of view."
+msgstr ""
+
+#: doc/classes/Camera.xml:7
+msgid ""
+"Camera is a special node that displays what is visible from its current "
+"location. Cameras register themselves in the nearest [Viewport] node (when "
+"ascending the tree). Only one camera can be active per viewport. If no "
+"viewport is available ascending the tree, the camera will register in the "
+"global viewport. In other words, a camera just provides 3D display "
+"capabilities to a [Viewport], and, without one, a scene registered in that "
+"[Viewport] (or higher viewports) can't be displayed."
+msgstr ""
+
+#: doc/classes/Camera.xml:17
+msgid ""
+"If this is the current camera, remove it from being current. If "
+"[code]enable_next[/code] is [code]true[/code], request to make the next "
+"camera current, if any."
+msgstr ""
+
+#: doc/classes/Camera.xml:23
+msgid "Returns the camera's RID from the [VisualServer]."
+msgstr ""
+
+#: doc/classes/Camera.xml:29
+msgid ""
+"Returns the transform of the camera plus the vertical ([member v_offset]) "
+"and horizontal ([member h_offset]) offsets; and any other adjustments made "
+"to the position and orientation of the camera by subclassed cameras such as "
+"[ClippedCamera], [InterpolatedCamera] and [ARVRCamera]."
+msgstr ""
+
+#: doc/classes/Camera.xml:36
+msgid ""
+"Returns [code]true[/code] if the given [code]layer[/code] in the [member "
+"cull_mask] is enabled, [code]false[/code] otherwise."
+msgstr ""
+
+#: doc/classes/Camera.xml:42
+msgid ""
+"Returns the camera's frustum planes in world space units as an array of "
+"[Plane]s in the following order: near, far, left, top, right, bottom. Not to "
+"be confused with [member frustum_offset]."
+msgstr ""
+
+#: doc/classes/Camera.xml:49
+msgid ""
+"Returns [code]true[/code] if the given position is behind the camera.\n"
+"[b]Note:[/b] A position which returns [code]false[/code] may still be "
+"outside the camera's field of view."
+msgstr ""
+
+#: doc/classes/Camera.xml:56
+msgid ""
+"Makes this camera the current camera for the [Viewport] (see class "
+"description). If the camera node is outside the scene tree, it will attempt "
+"to become current once it's added."
+msgstr ""
+
+#: doc/classes/Camera.xml:63
+msgid ""
+"Returns a normal vector from the screen point location directed along the "
+"camera. Orthogonal cameras are normalized. Perspective cameras account for "
+"perspective, screen width/height, etc."
+msgstr ""
+
+#: doc/classes/Camera.xml:71
+msgid ""
+"Returns the 3D point in world space that maps to the given 2D coordinate in "
+"the [Viewport] rectangle on a plane that is the given [code]z_depth[/code] "
+"distance into the scene away from the camera."
+msgstr ""
+
+#: doc/classes/Camera.xml:78
+msgid ""
+"Returns a normal vector in world space, that is the result of projecting a "
+"point on the [Viewport] rectangle by the camera projection. This is useful "
+"for casting rays in the form of (origin, normal) for object intersection or "
+"picking."
+msgstr ""
+
+#: doc/classes/Camera.xml:85
+msgid ""
+"Returns a 3D position in world space, that is the result of projecting a "
+"point on the [Viewport] rectangle by the camera projection. This is useful "
+"for casting rays in the form of (origin, normal) for object intersection or "
+"picking."
+msgstr ""
+
+#: doc/classes/Camera.xml:93
+msgid ""
+"Enables or disables the given [code]layer[/code] in the [member cull_mask]."
+msgstr ""
+
+#: doc/classes/Camera.xml:103
+msgid ""
+"Sets the camera projection to frustum mode (see [constant "
+"PROJECTION_FRUSTUM]), by specifying a [code]size[/code], an [code]offset[/"
+"code], and the [code]z_near[/code] and [code]z_far[/code] clip planes in "
+"world space units."
+msgstr ""
+
+#: doc/classes/Camera.xml:112
+msgid ""
+"Sets the camera projection to orthogonal mode (see [constant "
+"PROJECTION_ORTHOGONAL]), by specifying a [code]size[/code], and the "
+"[code]z_near[/code] and [code]z_far[/code] clip planes in world space units. "
+"(As a hint, 2D games often use this projection, with values specified in "
+"pixels.)"
+msgstr ""
+
+#: doc/classes/Camera.xml:121
+msgid ""
+"Sets the camera projection to perspective mode (see [constant "
+"PROJECTION_PERSPECTIVE]), by specifying a [code]fov[/code] (field of view) "
+"angle in degrees, and the [code]z_near[/code] and [code]z_far[/code] clip "
+"planes in world space units."
+msgstr ""
+
+#: doc/classes/Camera.xml:128
+msgid ""
+"Returns the 2D coordinate in the [Viewport] rectangle that maps to the given "
+"3D point in world space.\n"
+"[b]Note:[/b] When using this to position GUI elements over a 3D viewport, "
+"use [method is_position_behind] to prevent them from appearing if the 3D "
+"point is behind the camera:\n"
+"[codeblock]\n"
+"# This code block is part of a script that inherits from Spatial.\n"
+"# `control` is a reference to a node inheriting from Control.\n"
+"control.visible = not get_viewport().get_camera()."
+"is_position_behind(global_transform.origin)\n"
+"control.rect_position = get_viewport().get_camera()."
+"unproject_position(global_transform.origin)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Camera.xml:141
+msgid ""
+"The culling mask that describes which 3D render layers are rendered by this "
+"camera."
+msgstr ""
+
+#: doc/classes/Camera.xml:144
+msgid ""
+"If [code]true[/code], the ancestor [Viewport] is currently using this camera."
+msgstr ""
+
+#: doc/classes/Camera.xml:147
+msgid ""
+"If not [constant DOPPLER_TRACKING_DISABLED], this camera will simulate the "
+"[url=https://en.wikipedia.org/wiki/Doppler_effect]Doppler effect[/url] for "
+"objects changed in particular [code]_process[/code] methods. The Doppler "
+"effect is only simulated for [AudioStreamPlayer3D] nodes that have [member "
+"AudioStreamPlayer3D.doppler_tracking] set to a value other than [constant "
+"AudioStreamPlayer3D.DOPPLER_TRACKING_DISABLED].\n"
+"[b]Note:[/b] To toggle the Doppler effect preview in the editor, use the "
+"Perspective menu in the top-left corner of the 3D viewport and toggle "
+"[b]Enable Doppler[/b]."
+msgstr ""
+
+#: doc/classes/Camera.xml:151
+msgid "The [Environment] to use for this camera."
+msgstr ""
+
+#: doc/classes/Camera.xml:154
+msgid ""
+"The distance to the far culling boundary for this camera relative to its "
+"local Z axis."
+msgstr ""
+
+#: doc/classes/Camera.xml:157
+msgid ""
+"The camera's field of view angle (in degrees). Only applicable in "
+"perspective mode. Since [member keep_aspect] locks one axis, [code]fov[/"
+"code] sets the other axis' field of view angle.\n"
+"For reference, the default vertical field of view value ([code]70.0[/code]) "
+"is equivalent to a horizontal FOV of:\n"
+"- ~86.07 degrees in a 4:3 viewport\n"
+"- ~96.50 degrees in a 16:10 viewport\n"
+"- ~102.45 degrees in a 16:9 viewport\n"
+"- ~117.06 degrees in a 21:9 viewport"
+msgstr ""
+
+#: doc/classes/Camera.xml:165
+msgid ""
+"The camera's frustum offset. This can be changed from the default to create "
+"\"tilted frustum\" effects such as [url=https://zdoom.org/wiki/Y-shearing]Y-"
+"shearing[/url]."
+msgstr ""
+
+#: doc/classes/Camera.xml:168
+msgid "The horizontal (X) offset of the camera viewport."
+msgstr ""
+
+#: doc/classes/Camera.xml:171
+msgid ""
+"The axis to lock during [member fov]/[member size] adjustments. Can be "
+"either [constant KEEP_WIDTH] or [constant KEEP_HEIGHT]."
+msgstr ""
+
+#: doc/classes/Camera.xml:174
+msgid ""
+"The distance to the near culling boundary for this camera relative to its "
+"local Z axis."
+msgstr ""
+
+#: doc/classes/Camera.xml:177
+msgid ""
+"The camera's projection mode. In [constant PROJECTION_PERSPECTIVE] mode, "
+"objects' Z distance from the camera's local space scales their perceived "
+"size."
+msgstr ""
+
+#: doc/classes/Camera.xml:180
+msgid ""
+"The camera's size measured as 1/2 the width or height. Only applicable in "
+"orthogonal mode. Since [member keep_aspect] locks on axis, [code]size[/code] "
+"sets the other axis' size length."
+msgstr ""
+
+#: doc/classes/Camera.xml:183
+msgid "The vertical (Y) offset of the camera viewport."
+msgstr ""
+
+#: doc/classes/Camera.xml:188
+msgid ""
+"Perspective projection. Objects on the screen becomes smaller when they are "
+"far away."
+msgstr ""
+
+#: doc/classes/Camera.xml:191
+msgid ""
+"Orthogonal projection, also known as orthographic projection. Objects remain "
+"the same size on the screen no matter how far away they are."
+msgstr ""
+
+#: doc/classes/Camera.xml:194
+msgid ""
+"Frustum projection. This mode allows adjusting [member frustum_offset] to "
+"create \"tilted frustum\" effects."
+msgstr ""
+
+#: doc/classes/Camera.xml:197
+msgid ""
+"Preserves the horizontal aspect ratio; also known as Vert- scaling. This is "
+"usually the best option for projects running in portrait mode, as taller "
+"aspect ratios will benefit from a wider vertical FOV."
+msgstr ""
+
+#: doc/classes/Camera.xml:200
+msgid ""
+"Preserves the vertical aspect ratio; also known as Hor+ scaling. This is "
+"usually the best option for projects running in landscape mode, as wider "
+"aspect ratios will automatically benefit from a wider horizontal FOV."
+msgstr ""
+
+#: doc/classes/Camera.xml:203
+msgid ""
+"Disables [url=https://en.wikipedia.org/wiki/Doppler_effect]Doppler effect[/"
+"url] simulation (default)."
+msgstr ""
+
+#: doc/classes/Camera.xml:206
+msgid ""
+"Simulate [url=https://en.wikipedia.org/wiki/Doppler_effect]Doppler effect[/"
+"url] by tracking positions of objects that are changed in [code]_process[/"
+"code]. Changes in the relative velocity of this camera compared to those "
+"objects affect how Audio is perceived (changing the Audio's [code]pitch "
+"shift[/code])."
+msgstr ""
+
+#: doc/classes/Camera.xml:209
+msgid ""
+"Simulate [url=https://en.wikipedia.org/wiki/Doppler_effect]Doppler effect[/"
+"url] by tracking positions of objects that are changed in "
+"[code]_physics_process[/code]. Changes in the relative velocity of this "
+"camera compared to those objects affect how Audio is perceived (changing the "
+"Audio's [code]pitch shift[/code])."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:4
+msgid "Camera node for 2D scenes."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:7
+msgid ""
+"Camera node for 2D scenes. It forces the screen (current layer) to scroll "
+"following this node. This makes it easier (and faster) to program scrollable "
+"scenes than manually changing the position of [CanvasItem]-based nodes.\n"
+"This node is intended to be a simple helper to get things going quickly, but "
+"more functionality may be desired to change how the camera works. To make "
+"your own custom camera node, inherit it from [Node2D] and change the "
+"transform of the canvas by setting [member Viewport.canvas_transform] in "
+"[Viewport] (you can obtain the current [Viewport] by using [method Node."
+"get_viewport]).\n"
+"Note that the [Camera2D] node's [code]position[/code] doesn't represent the "
+"actual position of the screen, which may differ due to applied smoothing or "
+"limits. You can use [method get_camera_screen_center] to get the real "
+"position."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:13 doc/classes/TileMap.xml:13
+#: doc/classes/TileSet.xml:13
+msgid "https://godotengine.org/asset-library/asset/112"
+msgstr ""
+
+#: doc/classes/Camera2D.xml:14 doc/classes/Environment.xml:18
+#: doc/classes/WorldEnvironment.xml:14
+msgid "https://godotengine.org/asset-library/asset/110"
+msgstr ""
+
+#: doc/classes/Camera2D.xml:20
+msgid "Aligns the camera to the tracked node."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:26
+msgid ""
+"Removes any [Camera2D] from the ancestor [Viewport]'s internal currently-"
+"assigned camera."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:32
+msgid "Forces the camera to update scroll immediately."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:38
+msgid "Returns the camera position."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:44
+msgid ""
+"Returns the location of the [Camera2D]'s screen-center, relative to the "
+"origin."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:51
+msgid ""
+"Returns the specified margin. See also [member drag_margin_bottom], [member "
+"drag_margin_top], [member drag_margin_left], and [member drag_margin_right]."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:58
+msgid ""
+"Returns the specified camera limit. See also [member limit_bottom], [member "
+"limit_top], [member limit_left], and [member limit_right]."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:64
+msgid ""
+"Make this the current 2D camera for the scene (viewport and layer), in case "
+"there are many cameras in the scene."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:70
+msgid ""
+"Sets the camera's position immediately to its current smoothing "
+"destination.\n"
+"This has no effect if smoothing is disabled."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:79
+msgid ""
+"Sets the specified margin. See also [member drag_margin_bottom], [member "
+"drag_margin_top], [member drag_margin_left], and [member drag_margin_right]."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:87
+msgid ""
+"Sets the specified camera limit. See also [member limit_bottom], [member "
+"limit_top], [member limit_left], and [member limit_right]."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:93
+msgid "The Camera2D's anchor point. See [enum AnchorMode] constants."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:96
+msgid ""
+"If [code]true[/code], the camera is the active camera for the current scene. "
+"Only one camera can be current, so setting a different camera [code]current[/"
+"code] will disable this one."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:99
+msgid ""
+"The custom [Viewport] node attached to the [Camera2D]. If [code]null[/code] "
+"or not a [Viewport], uses the default viewport instead."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:102
+msgid ""
+"Bottom margin needed to drag the camera. A value of [code]1[/code] makes the "
+"camera move only when reaching the edge of the screen."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:105
+msgid ""
+"If [code]true[/code], the camera only moves when reaching the horizontal "
+"drag margins. If [code]false[/code], the camera moves horizontally "
+"regardless of margins."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:108
+msgid ""
+"Left margin needed to drag the camera. A value of [code]1[/code] makes the "
+"camera move only when reaching the edge of the screen."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:111
+msgid ""
+"Right margin needed to drag the camera. A value of [code]1[/code] makes the "
+"camera move only when reaching the edge of the screen."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:114
+msgid ""
+"Top margin needed to drag the camera. A value of [code]1[/code] makes the "
+"camera move only when reaching the edge of the screen."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:117
+msgid ""
+"If [code]true[/code], the camera only moves when reaching the vertical drag "
+"margins. If [code]false[/code], the camera moves vertically regardless of "
+"margins."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:120
+msgid ""
+"If [code]true[/code], draws the camera's drag margin rectangle in the editor."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:123
+msgid ""
+"If [code]true[/code], draws the camera's limits rectangle in the editor."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:126
+msgid ""
+"If [code]true[/code], draws the camera's screen rectangle in the editor."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:129
+msgid ""
+"Bottom scroll limit in pixels. The camera stops moving when reaching this "
+"value."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:132
+msgid ""
+"Left scroll limit in pixels. The camera stops moving when reaching this "
+"value."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:135
+msgid ""
+"Right scroll limit in pixels. The camera stops moving when reaching this "
+"value."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:138
+msgid ""
+"If [code]true[/code], the camera smoothly stops when reaches its limits.\n"
+"This has no effect if smoothing is disabled.\n"
+"[b]Note:[/b] To immediately update the camera's position to be within limits "
+"without smoothing, even with this setting enabled, invoke [method "
+"reset_smoothing]."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:143
+msgid ""
+"Top scroll limit in pixels. The camera stops moving when reaching this value."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:146
+msgid ""
+"The camera's offset, useful for looking around or camera shake animations."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:149
+msgid ""
+"The horizontal offset of the camera, relative to the drag margins.\n"
+"[b]Note:[/b] Offset H is used only to force offset relative to margins. It's "
+"not updated in any way if drag margins are enabled and can be used to set "
+"initial offset."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:153
+msgid ""
+"The vertical offset of the camera, relative to the drag margins.\n"
+"[b]Note:[/b] Used the same as [member offset_h]."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:157
+msgid "The camera's process callback. See [enum Camera2DProcessMode]."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:160
+msgid "If [code]true[/code], the camera rotates with the target."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:163
+msgid ""
+"If [code]true[/code], the camera smoothly moves towards the target at "
+"[member smoothing_speed]."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:166
+msgid ""
+"Speed in pixels per second of the camera's smoothing effect when [member "
+"smoothing_enabled] is [code]true[/code]."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:169
+msgid ""
+"The camera's zoom relative to the viewport. Values larger than "
+"[code]Vector2(1, 1)[/code] zoom out and smaller values zoom in. For an "
+"example, use [code]Vector2(0.5, 0.5)[/code] for a 2× zoom-in, and "
+"[code]Vector2(4, 4)[/code] for a 4× zoom-out."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:174
+msgid ""
+"The camera's position is fixed so that the top-left corner is always at the "
+"origin."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:177
+msgid ""
+"The camera's position takes into account vertical/horizontal offsets and the "
+"screen size."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:180 doc/classes/ClippedCamera.xml:89
+msgid "The camera updates with the [code]_physics_process[/code] callback."
+msgstr ""
+
+#: doc/classes/Camera2D.xml:183 doc/classes/ClippedCamera.xml:92
+msgid "The camera updates with the [code]_process[/code] callback."
+msgstr ""
+
+#: doc/classes/CameraFeed.xml:4
+msgid ""
+"A camera feed gives you access to a single physical camera attached to your "
+"device."
+msgstr ""
+
+#: doc/classes/CameraFeed.xml:7
+msgid ""
+"A camera feed gives you access to a single physical camera attached to your "
+"device. When enabled, Godot will start capturing frames from the camera "
+"which can then be used.\n"
+"[b]Note:[/b] Many cameras will return YCbCr images which are split into two "
+"textures and need to be combined in a shader. Godot does this automatically "
+"for you if you set the environment to show the camera image in the "
+"background."
+msgstr ""
+
+#: doc/classes/CameraFeed.xml:16
+msgid "Returns the unique ID for this feed."
+msgstr ""
+
+#: doc/classes/CameraFeed.xml:22
+msgid "Returns the camera's name."
+msgstr ""
+
+#: doc/classes/CameraFeed.xml:28
+msgid "Returns the position of camera on the device."
+msgstr ""
+
+#: doc/classes/CameraFeed.xml:34
+msgid "If [code]true[/code], the feed is active."
+msgstr ""
+
+#: doc/classes/CameraFeed.xml:37
+msgid "The transform applied to the camera's image."
+msgstr ""
+
+#: doc/classes/CameraFeed.xml:42
+msgid "No image set for the feed."
+msgstr ""
+
+#: doc/classes/CameraFeed.xml:45
+msgid "Feed supplies RGB images."
+msgstr ""
+
+#: doc/classes/CameraFeed.xml:48
+msgid "Feed supplies YCbCr images that need to be converted to RGB."
+msgstr ""
+
+#: doc/classes/CameraFeed.xml:51
+msgid ""
+"Feed supplies separate Y and CbCr images that need to be combined and "
+"converted to RGB."
+msgstr ""
+
+#: doc/classes/CameraFeed.xml:54
+msgid "Unspecified position."
+msgstr ""
+
+#: doc/classes/CameraFeed.xml:57
+msgid "Camera is mounted at the front of the device."
+msgstr ""
+
+#: doc/classes/CameraFeed.xml:60
+msgid "Camera is mounted at the back of the device."
+msgstr ""
+
+#: doc/classes/CameraServer.xml:4
+msgid "Server keeping track of different cameras accessible in Godot."
+msgstr ""
+
+#: doc/classes/CameraServer.xml:7
+msgid ""
+"The [CameraServer] keeps track of different cameras accessible in Godot. "
+"These are external cameras such as webcams or the cameras on your phone.\n"
+"It is notably used to provide AR modules with a video feed from the camera."
+msgstr ""
+
+#: doc/classes/CameraServer.xml:17
+msgid "Adds a camera feed to the camera server."
+msgstr ""
+
+#: doc/classes/CameraServer.xml:23
+msgid "Returns an array of [CameraFeed]s."
+msgstr ""
+
+#: doc/classes/CameraServer.xml:30
+msgid "Returns the [CameraFeed] with this id."
+msgstr ""
+
+#: doc/classes/CameraServer.xml:36
+msgid "Returns the number of [CameraFeed]s registered."
+msgstr ""
+
+#: doc/classes/CameraServer.xml:43
+msgid "Removes a [CameraFeed]."
+msgstr ""
+
+#: doc/classes/CameraServer.xml:51
+msgid "Emitted when a [CameraFeed] is added (e.g. webcam is plugged in)."
+msgstr ""
+
+#: doc/classes/CameraServer.xml:57
+msgid "Emitted when a [CameraFeed] is removed (e.g. webcam is unplugged)."
+msgstr ""
+
+#: doc/classes/CameraServer.xml:63
+msgid "The RGBA camera image."
+msgstr ""
+
+#: doc/classes/CameraServer.xml:66
+msgid "The YCbCr camera image."
+msgstr ""
+
+#: doc/classes/CameraServer.xml:69
+msgid "The Y component camera image."
+msgstr ""
+
+#: doc/classes/CameraServer.xml:72
+msgid "The CbCr component camera image."
+msgstr ""
+
+#: doc/classes/CameraTexture.xml:4
+msgid "Texture provided by a [CameraFeed]."
+msgstr ""
+
+#: doc/classes/CameraTexture.xml:7
+msgid ""
+"This texture gives access to the camera texture provided by a [CameraFeed].\n"
+"[b]Note:[/b] Many cameras supply YCbCr images which need to be converted in "
+"a shader."
+msgstr ""
+
+#: doc/classes/CameraTexture.xml:16
+msgid "The ID of the [CameraFeed] for which we want to display the image."
+msgstr ""
+
+#: doc/classes/CameraTexture.xml:19
+msgid ""
+"Convenience property that gives access to the active property of the "
+"[CameraFeed]."
+msgstr ""
+
+#: doc/classes/CameraTexture.xml:23
+msgid ""
+"Which image within the [CameraFeed] we want access to, important if the "
+"camera image is split in a Y and CbCr component."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:4
+msgid "Base class of anything 2D."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:7
+msgid ""
+"Base class of anything 2D. Canvas items are laid out in a tree; children "
+"inherit and extend their parent's transform. [CanvasItem] is extended by "
+"[Control] for anything GUI-related, and by [Node2D] for anything related to "
+"the 2D engine.\n"
+"Any [CanvasItem] can draw. For this, [method update] must be called, then "
+"[constant NOTIFICATION_DRAW] will be received on idle time to request "
+"redraw. Because of this, canvas items don't need to be redrawn on every "
+"frame, improving the performance significantly. Several functions for "
+"drawing on the [CanvasItem] are provided (see [code]draw_*[/code] "
+"functions). However, they can only be used inside the [method Object."
+"_notification], signal or [method _draw] virtual functions.\n"
+"Canvas items are drawn in tree order. By default, children are on top of "
+"their parents so a root [CanvasItem] will be drawn behind everything. This "
+"behavior can be changed on a per-item basis.\n"
+"A [CanvasItem] can also be hidden, which will also hide its children. It "
+"provides many ways to change parameters such as modulation (for itself and "
+"its children) and self modulation (only for itself), as well as its blend "
+"mode.\n"
+"Ultimately, a transform notification can be requested, which will notify the "
+"node that its global position changed in case the parent tree changed.\n"
+"[b]Note:[/b] Unless otherwise specified, all methods that have angle "
+"parameters must have angles specified as [i]radians[/i]. To convert degrees "
+"to radians, use [method @GDScript.deg2rad]."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:15 doc/classes/CanvasLayer.xml:10
+#: doc/classes/InputEvent.xml:11 doc/classes/Viewport.xml:15
+msgid "https://docs.godotengine.org/en/3.4/tutorials/2d/2d_transforms.html"
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:16 doc/classes/Control.xml:18
+#: doc/classes/Node2D.xml:10
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/2d/custom_drawing_in_2d.html"
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:23
+msgid ""
+"Overridable function called by the engine (if defined) to draw the canvas "
+"item."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:37
+msgid ""
+"Draws an arc between the given angles. The larger the value of "
+"[code]point_count[/code], the smoother the curve."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:48
+msgid ""
+"Draws a string character using a custom font. Returns the advance, depending "
+"on the character width and kerning with an optional next character."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:57
+msgid "Draws a colored circle."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:69
+msgid "Draws a colored polygon of any amount of points, convex or concave."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:80
+msgid ""
+"Draws a line from a 2D point to another, with a given color and width. It "
+"can be optionally antialiased."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:91
+msgid ""
+"Draws a [Mesh] in 2D, using the provided texture. See [MeshInstance2D] for "
+"related documentation."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:101
+msgid ""
+"Draws multiple, parallel lines with a uniform [code]color[/code].\n"
+"[b]Note:[/b] [code]width[/code] and [code]antialiased[/code] are currently "
+"not implemented and have no effect."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:112
+msgid ""
+"Draws multiple, parallel lines with a uniform [code]width[/code] and segment-"
+"by-segment coloring. Colors assigned to line segments match by index between "
+"[code]points[/code] and [code]colors[/code].\n"
+"[b]Note:[/b] [code]width[/code] and [code]antialiased[/code] are currently "
+"not implemented and have no effect."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:122
+msgid ""
+"Draws a [MultiMesh] in 2D with the provided texture. See "
+"[MultiMeshInstance2D] for related documentation."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:134
+msgid "Draws a polygon of any amount of points, convex or concave."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:144
+msgid ""
+"Draws interconnected line segments with a uniform [code]color[/code] and "
+"[code]width[/code] and optional antialiasing."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:154
+msgid ""
+"Draws interconnected line segments with a uniform [code]width[/code], "
+"segment-by-segment coloring, and optional antialiasing. Colors assigned to "
+"line segments match by index between [code]points[/code] and [code]colors[/"
+"code]."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:166
+msgid ""
+"Draws a custom primitive. 1 point for a point, 2 points for a line, 3 points "
+"for a triangle and 4 points for a quad."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:177
+msgid ""
+"Draws a rectangle. If [code]filled[/code] is [code]true[/code], the "
+"rectangle will be filled with the [code]color[/code] specified. If "
+"[code]filled[/code] is [code]false[/code], the rectangle will be drawn as a "
+"stroke with the [code]color[/code] and [code]width[/code] specified. If "
+"[code]antialiased[/code] is [code]true[/code], the lines will be "
+"antialiased.\n"
+"[b]Note:[/b] [code]width[/code] and [code]antialiased[/code] are only "
+"effective if [code]filled[/code] is [code]false[/code]."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:187
+msgid ""
+"Sets a custom transform for drawing via components. Anything drawn "
+"afterwards will be transformed by this."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:194
+msgid ""
+"Sets a custom transform for drawing via matrix. Anything drawn afterwards "
+"will be transformed by this."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:205
+msgid ""
+"Draws [code]text[/code] using the specified [code]font[/code] at the "
+"[code]position[/code] (bottom-left corner using the baseline of the font). "
+"The text will have its color multiplied by [code]modulate[/code]. If "
+"[code]clip_w[/code] is greater than or equal to 0, the text will be clipped "
+"if it exceeds the specified width.\n"
+"[b]Example using the default project font:[/b]\n"
+"[codeblock]\n"
+"# If using this method in a script that redraws constantly, move the\n"
+"# `default_font` declaration to a member variable assigned in `_ready()`\n"
+"# so the Control is only created once.\n"
+"var default_font = Control.new().get_font(\"font\")\n"
+"draw_string(default_font, Vector2(64, 64), \"Hello world\")\n"
+"[/codeblock]\n"
+"See also [method Font.draw]."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:222
+msgid "Draws a styled rectangle."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:232
+msgid "Draws a texture at a given position."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:244
+msgid ""
+"Draws a textured rectangle at a given position, optionally modulated by a "
+"color. If [code]transpose[/code] is [code]true[/code], the texture will have "
+"its X and Y coordinates swapped."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:257
+msgid ""
+"Draws a textured rectangle region at a given position, optionally modulated "
+"by a color. If [code]transpose[/code] is [code]true[/code], the texture will "
+"have its X and Y coordinates swapped."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:263 doc/classes/Spatial.xml:19
+msgid ""
+"Forces the transform to update. Transform changes in physics are not instant "
+"for performance reasons. Transforms are accumulated and then set. Use this "
+"if you need an up-to-date transform when doing physics operations."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:269
+msgid "Returns the [RID] of the [World2D] canvas where this item is in."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:275
+msgid "Returns the canvas item RID used by [VisualServer] for this item."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:281
+msgid "Returns the transform matrix of this item's canvas."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:287
+msgid "Returns the global position of the mouse."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:293
+msgid "Returns the global transform matrix of this item."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:299
+msgid ""
+"Returns the global transform matrix of this item in relation to the canvas."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:305
+msgid "Returns the mouse position relative to this item's position."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:311
+msgid "Returns the transform matrix of this item."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:317
+msgid "Returns the viewport's boundaries as a [Rect2]."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:323
+msgid "Returns this item's transform in relation to the viewport."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:329
+msgid "Returns the [World2D] where this item is in."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:335
+msgid "Hide the [CanvasItem] if it's currently visible."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:341
+msgid ""
+"Returns [code]true[/code] if local transform notifications are communicated "
+"to children."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:347
+msgid ""
+"Returns [code]true[/code] if the node is set as top-level. See [method "
+"set_as_toplevel]."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:353
+msgid ""
+"Returns [code]true[/code] if global transform notifications are communicated "
+"to children."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:359 doc/classes/Spatial.xml:89
+msgid ""
+"Returns [code]true[/code] if the node is present in the [SceneTree], its "
+"[member visible] property is [code]true[/code] and all its antecedents are "
+"also visible. If any antecedent is hidden, this node will not be visible in "
+"the scene tree."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:366
+msgid "Assigns [code]screen_point[/code] as this node's new local transform."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:373
+msgid ""
+"Transformations issued by [code]event[/code]'s inputs are applied in local "
+"space instead of global space."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:380
+msgid ""
+"If [code]enable[/code] is [code]true[/code], the node won't inherit its "
+"transform from parent canvas items."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:387
+msgid ""
+"If [code]enable[/code] is [code]true[/code], children will be updated with "
+"local transform data."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:394
+msgid ""
+"If [code]enable[/code] is [code]true[/code], children will be updated with "
+"global transform data."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:400
+msgid ""
+"Show the [CanvasItem] if it's currently hidden. For controls that inherit "
+"[Popup], the correct way to make them visible is to call one of the multiple "
+"[code]popup*()[/code] functions instead."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:406
+msgid ""
+"Queue the [CanvasItem] for update. [constant NOTIFICATION_DRAW] will be "
+"called on idle time to request redraw."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:412
+msgid ""
+"The rendering layers in which this [CanvasItem] responds to [Light2D] nodes."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:415
+msgid "The material applied to textures on this [CanvasItem]."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:418
+msgid "The color applied to textures on this [CanvasItem]."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:421
+msgid ""
+"The color applied to textures on this [CanvasItem]. This is not inherited by "
+"children [CanvasItem]s."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:424
+msgid "If [code]true[/code], the object draws behind its parent."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:427
+msgid "If [code]true[/code], the object draws on top of its parent."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:430
+msgid ""
+"If [code]true[/code], the parent [CanvasItem]'s [member material] property "
+"is used as this one's material."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:433
+msgid ""
+"If [code]true[/code], this [CanvasItem] is drawn. The node is only visible "
+"if all of its antecedents are visible as well (in other words, [method "
+"is_visible_in_tree] must return [code]true[/code]).\n"
+"[b]Note:[/b] For controls that inherit [Popup], the correct way to make them "
+"visible is to call one of the multiple [code]popup*()[/code] functions "
+"instead."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:440
+msgid ""
+"Emitted when the [CanvasItem] must redraw. This can only be connected "
+"realtime, as deferred will not allow drawing."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:445
+msgid "Emitted when becoming hidden."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:450
+msgid ""
+"Emitted when the item's [Rect2] boundaries (position or size) have changed, "
+"or when an action is taking place that may have impacted these boundaries (e."
+"g. changing [member Sprite.texture])."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:455
+msgid "Emitted when the visibility (hidden/visible) changes."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:461 doc/classes/CanvasItemMaterial.xml:39
+msgid ""
+"Mix blending mode. Colors are assumed to be independent of the alpha "
+"(opacity) value."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:464 doc/classes/CanvasItemMaterial.xml:42
+msgid "Additive blending mode."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:467 doc/classes/CanvasItemMaterial.xml:45
+msgid "Subtractive blending mode."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:470 doc/classes/CanvasItemMaterial.xml:48
+msgid "Multiplicative blending mode."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:473 doc/classes/CanvasItemMaterial.xml:51
+msgid ""
+"Mix blending mode. Colors are assumed to be premultiplied by the alpha "
+"(opacity) value."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:476
+msgid ""
+"Disables blending mode. Colors including alpha are written as-is. Only "
+"applicable for render targets with a transparent background. No lighting "
+"will be applied."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:479
+msgid ""
+"The [CanvasItem]'s transform has changed. This notification is only received "
+"if enabled by [method set_notify_transform] or [method "
+"set_notify_local_transform]."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:482
+msgid "The [CanvasItem] is requested to draw."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:485
+msgid "The [CanvasItem]'s visibility has changed."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:488
+msgid "The [CanvasItem] has entered the canvas."
+msgstr ""
+
+#: doc/classes/CanvasItem.xml:491
+msgid "The [CanvasItem] has exited the canvas."
+msgstr ""
+
+#: doc/classes/CanvasItemMaterial.xml:4
+msgid "A material for [CanvasItem]s."
+msgstr ""
+
+#: doc/classes/CanvasItemMaterial.xml:7
+msgid ""
+"[CanvasItemMaterial]s provide a means of modifying the textures associated "
+"with a CanvasItem. They specialize in describing blend and lighting "
+"behaviors for textures. Use a [ShaderMaterial] to more fully customize a "
+"material's interactions with a [CanvasItem]."
+msgstr ""
+
+#: doc/classes/CanvasItemMaterial.xml:15
+msgid ""
+"The manner in which a material's rendering is applied to underlying textures."
+msgstr ""
+
+#: doc/classes/CanvasItemMaterial.xml:18
+msgid "The manner in which material reacts to lighting."
+msgstr ""
+
+#: doc/classes/CanvasItemMaterial.xml:21
+msgid ""
+"The number of columns in the spritesheet assigned as [Texture] for a "
+"[Particles2D] or [CPUParticles2D].\n"
+"[b]Note:[/b] This property is only used and visible in the editor if [member "
+"particles_animation] is [code]true[/code]."
+msgstr ""
+
+#: doc/classes/CanvasItemMaterial.xml:25
+msgid ""
+"If [code]true[/code], the particles animation will loop.\n"
+"[b]Note:[/b] This property is only used and visible in the editor if [member "
+"particles_animation] is [code]true[/code]."
+msgstr ""
+
+#: doc/classes/CanvasItemMaterial.xml:29
+msgid ""
+"The number of rows in the spritesheet assigned as [Texture] for a "
+"[Particles2D] or [CPUParticles2D].\n"
+"[b]Note:[/b] This property is only used and visible in the editor if [member "
+"particles_animation] is [code]true[/code]."
+msgstr ""
+
+#: doc/classes/CanvasItemMaterial.xml:33
+msgid ""
+"If [code]true[/code], enable spritesheet-based animation features when "
+"assigned to [Particles2D] and [CPUParticles2D] nodes. The [member "
+"ParticlesMaterial.anim_speed] or [member CPUParticles2D.anim_speed] should "
+"also be set to a positive value for the animation to play.\n"
+"This property (and other [code]particles_anim_*[/code] properties that "
+"depend on it) has no effect on other types of nodes."
+msgstr ""
+
+#: doc/classes/CanvasItemMaterial.xml:54
+msgid ""
+"Render the material using both light and non-light sensitive material "
+"properties."
+msgstr ""
+
+#: doc/classes/CanvasItemMaterial.xml:57
+msgid "Render the material as if there were no light."
+msgstr ""
+
+#: doc/classes/CanvasItemMaterial.xml:60
+msgid "Render the material as if there were only light."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml:4
+msgid "Canvas drawing layer."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml:7
+msgid ""
+"Canvas drawing layer. [CanvasItem] nodes that are direct or indirect "
+"children of a [CanvasLayer] will be drawn in that layer. The layer is a "
+"numeric index that defines the draw order. The default 2D scene renders with "
+"index 0, so a [CanvasLayer] with index -1 will be drawn below, and one with "
+"index 1 will be drawn above. This is very useful for HUDs (in layer 1+ or "
+"above), or backgrounds (in layer -1 or below)."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml:11
+msgid "https://docs.godotengine.org/en/3.4/tutorials/2d/canvas_layers.html"
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml:18
+msgid "Returns the RID of the canvas used by this layer."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml:24
+msgid ""
+"The custom [Viewport] node assigned to the [CanvasLayer]. If [code]null[/"
+"code], uses the default viewport instead."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml:27
+msgid ""
+"Sets the layer to follow the viewport in order to simulate a pseudo 3D "
+"effect."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml:30
+msgid ""
+"Scales the layer when using [member follow_viewport_enable]. Layers moving "
+"into the foreground should have increasing scales, while layers moving into "
+"the background should have decreasing scales."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml:33
+msgid "Layer index for draw order. Lower values are drawn first."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml:36
+msgid "The layer's base offset."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml:39
+msgid "The layer's rotation in radians."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml:42
+msgid "The layer's rotation in degrees."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml:45
+msgid "The layer's scale."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml:48
+msgid "The layer's transform."
+msgstr ""
+
+#: doc/classes/CanvasModulate.xml:4
+msgid "Tint the entire canvas."
+msgstr ""
+
+#: doc/classes/CanvasModulate.xml:7
+msgid ""
+"[CanvasModulate] tints the canvas elements using its assigned [member color]."
+msgstr ""
+
+#: doc/classes/CanvasModulate.xml:15
+msgid "The tint color to apply."
+msgstr ""
+
+#: doc/classes/CapsuleMesh.xml:4 doc/classes/CapsuleMesh.xml:7
+msgid "Class representing a capsule-shaped [PrimitiveMesh]."
+msgstr ""
+
+#: doc/classes/CapsuleMesh.xml:15
+msgid ""
+"Height of the middle cylindrical part of the capsule (without the "
+"hemispherical ends).\n"
+"[b]Note:[/b] The capsule's total height is equal to [member mid_height] + 2 "
+"* [member radius]."
+msgstr ""
+
+#: doc/classes/CapsuleMesh.xml:19
+msgid "Number of radial segments on the capsule mesh."
+msgstr ""
+
+#: doc/classes/CapsuleMesh.xml:22
+msgid "Radius of the capsule mesh."
+msgstr ""
+
+#: doc/classes/CapsuleMesh.xml:25
+msgid "Number of rings along the height of the capsule."
+msgstr ""
+
+#: doc/classes/CapsuleShape.xml:4 doc/classes/CapsuleShape.xml:7
+msgid "Capsule shape for collisions."
+msgstr ""
+
+#: doc/classes/CapsuleShape.xml:16 doc/classes/CapsuleShape2D.xml:15
+msgid "The capsule's height."
+msgstr ""
+
+#: doc/classes/CapsuleShape.xml:19 doc/classes/CapsuleShape2D.xml:18
+msgid "The capsule's radius."
+msgstr ""
+
+#: doc/classes/CapsuleShape2D.xml:4 doc/classes/CapsuleShape2D.xml:7
+msgid "Capsule shape for 2D collisions."
+msgstr ""
+
+#: doc/classes/CenterContainer.xml:4
+msgid "Keeps children controls centered."
+msgstr ""
+
+#: doc/classes/CenterContainer.xml:7
+msgid ""
+"CenterContainer keeps children controls centered. This container keeps all "
+"children to their minimum size, in the center."
+msgstr ""
+
+#: doc/classes/CenterContainer.xml:15
+msgid ""
+"If [code]true[/code], centers children relative to the [CenterContainer]'s "
+"top left corner."
+msgstr ""
+
+#: doc/classes/CharFXTransform.xml:4
+msgid ""
+"Controls how an individual character will be displayed in a [RichTextEffect]."
+msgstr ""
+
+#: doc/classes/CharFXTransform.xml:7
+msgid ""
+"By setting various properties on this object, you can control how individual "
+"characters will be displayed in a [RichTextEffect]."
+msgstr ""
+
+#: doc/classes/CharFXTransform.xml:10 doc/classes/RichTextEffect.xml:16
+#: doc/classes/RichTextLabel.xml:15
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/gui/bbcode_in_richtextlabel."
+"html"
+msgstr ""
+
+#: doc/classes/CharFXTransform.xml:11 doc/classes/RichTextEffect.xml:17
+msgid ""
+"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
+msgstr ""
+
+#: doc/classes/CharFXTransform.xml:17 doc/classes/CharFXTransform.xml:45
+msgid ""
+"The index of the current character (starting from 0). Setting this property "
+"won't affect drawing."
+msgstr ""
+
+#: doc/classes/CharFXTransform.xml:20
+msgid ""
+"The Unicode codepoint the character will use. This only affects non-"
+"whitespace characters. [method @GDScript.ord] can be useful here. For "
+"example, the following will replace all characters with asterisks:\n"
+"[codeblock]\n"
+"# `char_fx` is the CharFXTransform parameter from `_process_custom_fx()`.\n"
+"# See the RichTextEffect documentation for details.\n"
+"char_fx.character = ord(\"*\")\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/CharFXTransform.xml:28
+msgid "The color the character will be drawn with."
+msgstr ""
+
+#: doc/classes/CharFXTransform.xml:31
+msgid ""
+"The time elapsed since the [RichTextLabel] was added to the scene tree (in "
+"seconds). Time stops when the [RichTextLabel] is paused (see [member Node."
+"pause_mode]). Resets when the text in the [RichTextLabel] is changed.\n"
+"[b]Note:[/b] Time still passes while the [RichTextLabel] is hidden."
+msgstr ""
+
+#: doc/classes/CharFXTransform.xml:35
+msgid ""
+"Contains the arguments passed in the opening BBCode tag. By default, "
+"arguments are strings; if their contents match a type such as [bool], [int] "
+"or [float], they will be converted automatically. Color codes in the form "
+"[code]#rrggbb[/code] or [code]#rgb[/code] will be converted to an opaque "
+"[Color]. String arguments may not contain spaces, even if they're quoted. If "
+"present, quotes will also be present in the final string.\n"
+"For example, the opening BBCode tag [code][example foo=hello bar=true baz=42 "
+"color=#ffffff][/code] will map to the following [Dictionary]:\n"
+"[codeblock]\n"
+"{\"foo\": \"hello\", \"bar\": true, \"baz\": 42, \"color\": Color(1, 1, 1, "
+"1)}\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/CharFXTransform.xml:42
+msgid "The position offset the character will be drawn with (in pixels)."
+msgstr ""
+
+#: doc/classes/CharFXTransform.xml:48
+msgid ""
+"If [code]true[/code], the character will be drawn. If [code]false[/code], "
+"the character will be hidden. Characters around hidden characters will "
+"reflow to take the space of hidden characters. If this is not desired, set "
+"their [member color] to [code]Color(1, 1, 1, 0)[/code] instead."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:4
+msgid "Binary choice user interface widget. See also [CheckButton]."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:7
+msgid ""
+"A checkbox allows the user to make a binary choice (choosing only one of two "
+"possible options). It's similar to [CheckButton] in functionality, but it "
+"has a different appearance. To follow established UX patterns, it's "
+"recommended to use CheckBox when toggling it has [b]no[/b] immediate effect "
+"on something. For instance, it should be used when toggling it will only do "
+"something once a confirmation button is pressed.\n"
+"See also [BaseButton] which contains common properties and methods "
+"associated with this node."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:22
+msgid "The vertical offset used when rendering the check icons (in pixels)."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:25
+msgid "The check icon to display when the [CheckBox] is checked."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:28
+msgid "The check icon to display when the [CheckBox] is checked and disabled."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:31
+msgid ""
+"The [StyleBox] to display as a background when the [CheckBox] is disabled."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:34
+msgid ""
+"The [StyleBox] to display as a background when the [CheckBox] is focused."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:37
+msgid "The [Font] to use for the [CheckBox] text."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:40
+msgid "The [CheckBox] text's font color."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:43
+msgid "The [CheckBox] text's font color when it's disabled."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:46
+msgid ""
+"The [CheckBox] text's font color when it's focused. Only replaces the normal "
+"text color of the checkbox. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:49
+msgid "The [CheckBox] text's font color when it's hovered."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:52
+msgid "The [CheckBox] text's font color when it's hovered and pressed."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:55
+msgid "The [CheckBox] text's font color when it's pressed."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:58
+msgid ""
+"The [StyleBox] to display as a background when the [CheckBox] is hovered."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:61
+msgid ""
+"The [StyleBox] to display as a background when the [CheckBox] is hovered and "
+"pressed."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:64
+msgid "The separation between the check icon and the text (in pixels)."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:67 doc/classes/CheckButton.xml:61
+msgid "The [StyleBox] to display as a background."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:70
+msgid ""
+"The [StyleBox] to display as a background when the [CheckBox] is pressed."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:73
+msgid ""
+"If the [CheckBox] is configured as a radio button, the icon to display when "
+"the [CheckBox] is checked."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:78
+msgid ""
+"If the [CheckBox] is configured as a radio button, the icon to display when "
+"the [CheckBox] is unchecked."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:83
+msgid "The check icon to display when the [CheckBox] is unchecked."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:86
+msgid ""
+"The check icon to display when the [CheckBox] is unchecked and disabled."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:4
+msgid "Checkable button. See also [CheckBox]."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:7
+msgid ""
+"CheckButton is a toggle button displayed as a check field. It's similar to "
+"[CheckBox] in functionality, but it has a different appearance. To follow "
+"established UX patterns, it's recommended to use CheckButton when toggling "
+"it has an [b]immediate[/b] effect on something. For instance, it should be "
+"used if toggling it enables/disables a setting without requiring the user to "
+"press a confirmation button.\n"
+"See also [BaseButton] which contains common properties and methods "
+"associated with this node."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:22
+msgid "The vertical offset used when rendering the toggle icons (in pixels)."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:25
+msgid ""
+"The [StyleBox] to display as a background when the [CheckButton] is disabled."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:28
+msgid ""
+"The [StyleBox] to display as a background when the [CheckButton] is focused."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:31
+msgid "The [Font] to use for the [CheckButton] text."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:34
+msgid "The [CheckButton] text's font color."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:37
+msgid "The [CheckButton] text's font color when it's disabled."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:40
+msgid ""
+"The [CheckButton] text's font color when it's focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:43
+msgid "The [CheckButton] text's font color when it's hovered."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:46
+msgid "The [CheckButton] text's font color when it's hovered and pressed."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:49
+msgid "The [CheckButton] text's font color when it's pressed."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:52
+msgid ""
+"The [StyleBox] to display as a background when the [CheckButton] is hovered."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:55
+msgid ""
+"The [StyleBox] to display as a background when the [CheckButton] is hovered "
+"and pressed."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:58
+msgid "The separation between the toggle icon and the text (in pixels)."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:64
+msgid "The icon to display when the [CheckButton] is unchecked."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:67
+msgid "The icon to display when the [CheckButton] is unchecked and disabled."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:70
+msgid "The icon to display when the [CheckButton] is checked."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:73
+msgid "The icon to display when the [CheckButton] is checked and disabled."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:76
+msgid ""
+"The [StyleBox] to display as a background when the [CheckButton] is pressed."
+msgstr ""
+
+#: doc/classes/CircleShape2D.xml:4
+msgid "Circular shape for 2D collisions."
+msgstr ""
+
+#: doc/classes/CircleShape2D.xml:7
+msgid ""
+"Circular shape for 2D collisions. This shape is useful for modeling balls or "
+"small characters and its collision detection with everything else is very "
+"fast."
+msgstr ""
+
+#: doc/classes/CircleShape2D.xml:15
+msgid "The circle's radius."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:4
+msgid "Class information repository."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:7
+msgid "Provides access to metadata stored for every available class."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:16
+msgid ""
+"Returns [code]true[/code] if you can instance objects from the specified "
+"[code]class[/code], [code]false[/code] in other case."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:23
+msgid "Returns whether the specified [code]class[/code] is available or not."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:30
+msgid ""
+"Returns a category associated with the class for use in documentation and "
+"the Asset Library. Debug mode required."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:39
+msgid ""
+"Returns an array with all the keys in [code]enum[/code] of [code]class[/"
+"code] or its ancestry."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:47
+msgid ""
+"Returns an array with all the enums of [code]class[/code] or its ancestry."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:55
+msgid ""
+"Returns the value of the integer constant [code]name[/code] of [code]class[/"
+"code] or its ancestry. Always returns 0 when the constant could not be found."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:64
+msgid ""
+"Returns which enum the integer constant [code]name[/code] of [code]class[/"
+"code] or its ancestry belongs to."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:72
+msgid ""
+"Returns an array with the names all the integer constants of [code]class[/"
+"code] or its ancestry."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:80
+msgid ""
+"Returns an array with all the methods of [code]class[/code] or its ancestry "
+"if [code]no_inheritance[/code] is [code]false[/code]. Every element of the "
+"array is a [Dictionary] with the following keys: [code]args[/code], "
+"[code]default_args[/code], [code]flags[/code], [code]id[/code], [code]name[/"
+"code], [code]return: (class_name, hint, hint_string, name, type, usage)[/"
+"code].\n"
+"[b]Note:[/b] In exported release builds the debug info is not available, so "
+"the returned dictionaries will contain only method names."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:89
+msgid ""
+"Returns the value of [code]property[/code] of [code]class[/code] or its "
+"ancestry."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:97
+msgid ""
+"Returns an array with all the properties of [code]class[/code] or its "
+"ancestry if [code]no_inheritance[/code] is [code]false[/code]."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:105
+msgid ""
+"Returns the [code]signal[/code] data of [code]class[/code] or its ancestry. "
+"The returned value is a [Dictionary] with the following keys: [code]args[/"
+"code], [code]default_args[/code], [code]flags[/code], [code]id[/code], "
+"[code]name[/code], [code]return: (class_name, hint, hint_string, name, type, "
+"usage)[/code]."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:113
+msgid ""
+"Returns an array with all the signals of [code]class[/code] or its ancestry "
+"if [code]no_inheritance[/code] is [code]false[/code]. Every element of the "
+"array is a [Dictionary] as described in [method class_get_signal]."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:122
+msgid ""
+"Returns whether [code]class[/code] or its ancestry has an enum called "
+"[code]name[/code] or not."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:130
+msgid ""
+"Returns whether [code]class[/code] or its ancestry has an integer constant "
+"called [code]name[/code] or not."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:139
+msgid ""
+"Returns whether [code]class[/code] (or its ancestry if [code]no_inheritance[/"
+"code] is [code]false[/code]) has a method called [code]method[/code] or not."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:147
+msgid ""
+"Returns whether [code]class[/code] or its ancestry has a signal called "
+"[code]signal[/code] or not."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:156
+msgid ""
+"Sets [code]property[/code] value of [code]class[/code] to [code]value[/code]."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:162
+msgid "Returns the names of all the classes available."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:169
+msgid ""
+"Returns the names of all the classes that directly or indirectly inherit "
+"from [code]class[/code]."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:176
+msgid "Returns the parent class of [code]class[/code]."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:183
+msgid "Creates an instance of [code]class[/code]."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:190
+msgid "Returns whether this [code]class[/code] is enabled or not."
+msgstr ""
+
+#: doc/classes/ClassDB.xml:198
+msgid ""
+"Returns whether [code]inherits[/code] is an ancestor of [code]class[/code] "
+"or not."
+msgstr ""
+
+#: doc/classes/ClippedCamera.xml:4
+msgid "A [Camera] that includes collision."
+msgstr ""
+
+#: doc/classes/ClippedCamera.xml:7
+msgid ""
+"This node extends [Camera] to add collisions with [Area] and/or "
+"[PhysicsBody] nodes. The camera cannot move through colliding objects."
+msgstr ""
+
+#: doc/classes/ClippedCamera.xml:16
+msgid ""
+"Adds a collision exception so the camera does not collide with the specified "
+"node."
+msgstr ""
+
+#: doc/classes/ClippedCamera.xml:23
+msgid ""
+"Adds a collision exception so the camera does not collide with the specified "
+"[RID]."
+msgstr ""
+
+#: doc/classes/ClippedCamera.xml:29
+msgid "Removes all collision exceptions."
+msgstr ""
+
+#: doc/classes/ClippedCamera.xml:35
+msgid "Returns the distance the camera has been offset due to a collision."
+msgstr ""
+
+#: doc/classes/ClippedCamera.xml:42
+msgid ""
+"Returns [code]true[/code] if the specified bit index is on.\n"
+"[b]Note:[/b] Bit indices range from 0-19."
+msgstr ""
+
+#: doc/classes/ClippedCamera.xml:50
+msgid "Removes a collision exception with the specified node."
+msgstr ""
+
+#: doc/classes/ClippedCamera.xml:57
+msgid "Removes a collision exception with the specified [RID]."
+msgstr ""
+
+#: doc/classes/ClippedCamera.xml:65
+msgid ""
+"Sets the specified bit index to the [code]value[/code].\n"
+"[b]Note:[/b] Bit indices range from 0-19."
+msgstr ""
+
+#: doc/classes/ClippedCamera.xml:72
+msgid "If [code]true[/code], the camera stops on contact with [Area]s."
+msgstr ""
+
+#: doc/classes/ClippedCamera.xml:75
+msgid "If [code]true[/code], the camera stops on contact with [PhysicsBody]s."
+msgstr ""
+
+#: doc/classes/ClippedCamera.xml:78
+msgid ""
+"The camera's collision mask. Only objects in at least one collision layer "
+"matching the mask will be detected. See [url=https://docs.godotengine.org/"
+"en/3.4/tutorials/physics/physics_introduction.html#collision-layers-and-"
+"masks]Collision layers and masks[/url] in the documentation for more "
+"information."
+msgstr ""
+
+#: doc/classes/ClippedCamera.xml:81
+msgid ""
+"The camera's collision margin. The camera can't get closer than this "
+"distance to a colliding object."
+msgstr ""
+
+#: doc/classes/ClippedCamera.xml:84
+msgid "The camera's process callback. See [enum ProcessMode]."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:4
+msgid "Base node for collision objects."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:7
+msgid ""
+"CollisionObject is the base class for physics objects. It can hold any "
+"number of collision [Shape]s. Each shape must be assigned to a [i]shape "
+"owner[/i]. The CollisionObject can have any number of shape owners. Shape "
+"owners are not nodes and do not appear in the editor, but are accessible "
+"through code using the [code]shape_owner_*[/code] methods."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:20
+msgid ""
+"Receives unhandled [InputEvent]s. [code]position[/code] is the location in "
+"world space of the mouse pointer on the surface of the shape with index "
+"[code]shape_idx[/code] and [code]normal[/code] is the normal vector of the "
+"surface at that point. Connect to the [signal input_event] signal to easily "
+"pick up these events."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:27 doc/classes/CollisionObject2D.xml:25
+msgid ""
+"Creates a new shape owner for the given object. Returns [code]owner_id[/"
+"code] of the new owner for future reference."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:34 doc/classes/CollisionObject2D.xml:32
+msgid ""
+"Returns whether or not the specified [code]bit[/code] of the [member "
+"collision_layer] is set."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:41 doc/classes/CollisionObject2D.xml:39
+msgid ""
+"Returns whether or not the specified [code]bit[/code] of the [member "
+"collision_mask] is set."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:47 doc/classes/CollisionObject2D.xml:45
+msgid "Returns the object's [RID]."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:53 doc/classes/CollisionObject2D.xml:58
+msgid ""
+"Returns an [Array] of [code]owner_id[/code] identifiers. You can use these "
+"ids in other methods that take [code]owner_id[/code] as an argument."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:60 doc/classes/CollisionObject2D.xml:65
+msgid "If [code]true[/code], the shape owner and its shapes are disabled."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:67 doc/classes/CollisionObject2D.xml:79
+msgid "Removes the given shape owner."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:75 doc/classes/CollisionObject2D.xml:87
+msgid ""
+"If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/"
+"code] in the the [member collision_layer].\n"
+"If [code]value[/code] is [code]false[/code], clears the specified [code]bit[/"
+"code] in the the [member collision_layer]."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:84 doc/classes/CollisionObject2D.xml:96
+msgid ""
+"If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/"
+"code] in the the [member collision_mask].\n"
+"If [code]value[/code] is [code]false[/code], clears the specified [code]bit[/"
+"code] in the the [member collision_mask]."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:92 doc/classes/CollisionObject2D.xml:104
+msgid "Returns the [code]owner_id[/code] of the given shape."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:100
+msgid "Adds a [Shape] to the shape owner."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:107 doc/classes/CollisionObject2D.xml:119
+msgid "Removes all shapes from the shape owner."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:114 doc/classes/CollisionObject2D.xml:126
+msgid "Returns the parent object of the given shape owner."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:122
+msgid "Returns the [Shape] with the given id from the given shape owner."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:129 doc/classes/CollisionObject2D.xml:141
+msgid "Returns the number of shapes the given shape owner contains."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:137
+msgid ""
+"Returns the child index of the [Shape] with the given id from the given "
+"shape owner."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:144
+msgid "Returns the shape owner's [Transform]."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:152 doc/classes/CollisionObject2D.xml:164
+msgid "Removes a shape from the given shape owner."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:160 doc/classes/CollisionObject2D.xml:172
+msgid "If [code]true[/code], disables the given shape owner."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:168
+msgid "Sets the [Transform] of the given shape owner."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:174
+msgid ""
+"The physics layers this CollisionObject3D is in. Collision objects can exist "
+"in one or more of 32 different layers. See also [member collision_mask].\n"
+"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=https://docs.godotengine.org/en/latest/tutorials/physics/"
+"physics_introduction.html#collision-layers-and-masks]Collision layers and "
+"masks[/url] in the documentation for more information."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:178
+msgid ""
+"The physics layers this CollisionObject3D scans. Collision objects can scan "
+"one or more of 32 different layers. See also [member collision_layer].\n"
+"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=https://docs.godotengine.org/en/latest/tutorials/physics/"
+"physics_introduction.html#collision-layers-and-masks]Collision layers and "
+"masks[/url] in the documentation for more information."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:182
+msgid ""
+"If [code]true[/code], the [CollisionObject] will continue to receive input "
+"events as the mouse is dragged across its shapes."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:185
+msgid ""
+"If [code]true[/code], the [CollisionObject]'s shapes will respond to "
+"[RayCast]s."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:196
+msgid ""
+"Emitted when the object receives an unhandled [InputEvent]. [code]position[/"
+"code] is the location in world space of the mouse pointer on the surface of "
+"the shape with index [code]shape_idx[/code] and [code]normal[/code] is the "
+"normal vector of the surface at that point."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:201
+msgid "Emitted when the mouse pointer enters any of this object's shapes."
+msgstr ""
+
+#: doc/classes/CollisionObject.xml:206
+msgid "Emitted when the mouse pointer exits all this object's shapes."
+msgstr ""
+
+#: doc/classes/CollisionObject2D.xml:4
+msgid "Base node for 2D collision objects."
+msgstr ""
+
+#: doc/classes/CollisionObject2D.xml:7
+msgid ""
+"CollisionObject2D is the base class for 2D physics objects. It can hold any "
+"number of 2D collision [Shape2D]s. Each shape must be assigned to a [i]shape "
+"owner[/i]. The CollisionObject2D can have any number of shape owners. Shape "
+"owners are not nodes and do not appear in the editor, but are accessible "
+"through code using the [code]shape_owner_*[/code] methods."
+msgstr ""
+
+#: doc/classes/CollisionObject2D.xml:18
+msgid ""
+"Accepts unhandled [InputEvent]s. Requires [member input_pickable] to be "
+"[code]true[/code]. [code]shape_idx[/code] is the child index of the clicked "
+"[Shape2D]. Connect to the [code]input_event[/code] signal to easily pick up "
+"these events."
+msgstr ""
+
+#: doc/classes/CollisionObject2D.xml:52
+msgid ""
+"Returns the [code]one_way_collision_margin[/code] of the shape owner "
+"identified by given [code]owner_id[/code]."
+msgstr ""
+
+#: doc/classes/CollisionObject2D.xml:72
+msgid ""
+"Returns [code]true[/code] if collisions for the shape owner originating from "
+"this [CollisionObject2D] will not be reported to collided with "
+"[CollisionObject2D]s."
+msgstr ""
+
+#: doc/classes/CollisionObject2D.xml:112
+msgid "Adds a [Shape2D] to the shape owner."
+msgstr ""
+
+#: doc/classes/CollisionObject2D.xml:134
+msgid "Returns the [Shape2D] with the given id from the given shape owner."
+msgstr ""
+
+#: doc/classes/CollisionObject2D.xml:149
+msgid ""
+"Returns the child index of the [Shape2D] with the given id from the given "
+"shape owner."
+msgstr ""
+
+#: doc/classes/CollisionObject2D.xml:156
+msgid "Returns the shape owner's [Transform2D]."
+msgstr ""
+
+#: doc/classes/CollisionObject2D.xml:180
+msgid ""
+"If [code]enable[/code] is [code]true[/code], collisions for the shape owner "
+"originating from this [CollisionObject2D] will not be reported to collided "
+"with [CollisionObject2D]s."
+msgstr ""
+
+#: doc/classes/CollisionObject2D.xml:188
+msgid ""
+"Sets the [code]one_way_collision_margin[/code] of the shape owner identified "
+"by given [code]owner_id[/code] to [code]margin[/code] pixels."
+msgstr ""
+
+#: doc/classes/CollisionObject2D.xml:196
+msgid "Sets the [Transform2D] of the given shape owner."
+msgstr ""
+
+#: doc/classes/CollisionObject2D.xml:202
+msgid ""
+"The physics layers this CollisionObject2D is in. Collision objects can exist "
+"in one or more of 32 different layers. See also [member collision_mask].\n"
+"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=https://docs.godotengine.org/en/latest/tutorials/physics/"
+"physics_introduction.html#collision-layers-and-masks]Collision layers and "
+"masks[/url] in the documentation for more information."
+msgstr ""
+
+#: doc/classes/CollisionObject2D.xml:206
+msgid ""
+"The physics layers this CollisionObject2D scans. Collision objects can scan "
+"one or more of 32 different layers. See also [member collision_layer].\n"
+"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=https://docs.godotengine.org/en/latest/tutorials/physics/"
+"physics_introduction.html#collision-layers-and-masks]Collision layers and "
+"masks[/url] in the documentation for more information."
+msgstr ""
+
+#: doc/classes/CollisionObject2D.xml:210
+msgid ""
+"If [code]true[/code], this object is pickable. A pickable object can detect "
+"the mouse pointer entering/leaving, and if the mouse is inside it, report "
+"input events. Requires at least one [code]collision_layer[/code] bit to be "
+"set."
+msgstr ""
+
+#: doc/classes/CollisionObject2D.xml:219
+msgid ""
+"Emitted when an input event occurs. Requires [member input_pickable] to be "
+"[code]true[/code] and at least one [code]collision_layer[/code] bit to be "
+"set. See [method _input_event] for details."
+msgstr ""
+
+#: doc/classes/CollisionObject2D.xml:224
+msgid ""
+"Emitted when the mouse pointer enters any of this object's shapes. Requires "
+"[member input_pickable] to be [code]true[/code] and at least one "
+"[code]collision_layer[/code] bit to be set."
+msgstr ""
+
+#: doc/classes/CollisionObject2D.xml:229
+msgid ""
+"Emitted when the mouse pointer exits all this object's shapes. Requires "
+"[member input_pickable] to be [code]true[/code] and at least one "
+"[code]collision_layer[/code] bit to be set."
+msgstr ""
+
+#: doc/classes/CollisionPolygon.xml:4
+msgid "Editor-only class for defining a collision polygon in 3D space."
+msgstr ""
+
+#: doc/classes/CollisionPolygon.xml:7
+msgid ""
+"Allows editing a collision polygon's vertices on a selected plane. Can also "
+"set a depth perpendicular to that plane. This class is only available in the "
+"editor. It will not appear in the scene tree at run-time. Creates a [Shape] "
+"for gameplay. Properties modified during gameplay will have no effect."
+msgstr ""
+
+#: doc/classes/CollisionPolygon.xml:15
+msgid ""
+"Length that the resulting collision extends in either direction "
+"perpendicular to its polygon."
+msgstr ""
+
+#: doc/classes/CollisionPolygon.xml:18
+msgid "If [code]true[/code], no collision will be produced."
+msgstr ""
+
+#: doc/classes/CollisionPolygon.xml:21
+msgid ""
+"The collision margin for the generated [Shape]. See [member Shape.margin] "
+"for more details."
+msgstr ""
+
+#: doc/classes/CollisionPolygon.xml:24
+msgid ""
+"Array of vertices which define the polygon.\n"
+"[b]Note:[/b] The returned value is a copy of the original. Methods which "
+"mutate the size or properties of the return value will not impact the "
+"original polygon. To change properties of the polygon, assign it to a "
+"temporary variable and make changes before reassigning the [code]polygon[/"
+"code] member."
+msgstr ""
+
+#: doc/classes/CollisionPolygon2D.xml:4
+msgid "Defines a 2D collision polygon."
+msgstr ""
+
+#: doc/classes/CollisionPolygon2D.xml:7
+msgid ""
+"Provides a 2D collision polygon to a [CollisionObject2D] parent. Polygons "
+"can be drawn in the editor or specified by a list of vertices."
+msgstr ""
+
+#: doc/classes/CollisionPolygon2D.xml:15
+msgid "Collision build mode. Use one of the [enum BuildMode] constants."
+msgstr ""
+
+#: doc/classes/CollisionPolygon2D.xml:18
+msgid "If [code]true[/code], no collisions will be detected."
+msgstr ""
+
+#: doc/classes/CollisionPolygon2D.xml:21
+msgid ""
+"If [code]true[/code], only edges that face up, relative to "
+"[CollisionPolygon2D]'s rotation, will collide with other objects."
+msgstr ""
+
+#: doc/classes/CollisionPolygon2D.xml:24
+msgid ""
+"The margin used for one-way collision (in pixels). Higher values will make "
+"the shape thicker, and work better for colliders that enter the polygon at a "
+"high velocity."
+msgstr ""
+
+#: doc/classes/CollisionPolygon2D.xml:27
+msgid ""
+"The polygon's list of vertices. The final point will be connected to the "
+"first. The returned value is a clone of the [PoolVector2Array], not a "
+"reference."
+msgstr ""
+
+#: doc/classes/CollisionPolygon2D.xml:32
+msgid "Collisions will include the polygon and its contained area."
+msgstr ""
+
+#: doc/classes/CollisionPolygon2D.xml:35
+msgid "Collisions will only include the polygon edges."
+msgstr ""
+
+#: doc/classes/CollisionShape.xml:4
+msgid "Node that represents collision shape data in 3D space."
+msgstr ""
+
+#: doc/classes/CollisionShape.xml:7
+msgid ""
+"Editor facility for creating and editing collision shapes in 3D space. You "
+"can use this node to represent all sorts of collision shapes, for example, "
+"add this to an [Area] to give it a detection shape, or add it to a "
+"[PhysicsBody] to create a solid object. [b]IMPORTANT[/b]: this is an Editor-"
+"only helper to create shapes, use [method CollisionObject."
+"shape_owner_get_shape] to get the actual shape."
+msgstr ""
+
+#: doc/classes/CollisionShape.xml:10 doc/classes/CollisionShape2D.xml:10
+#: doc/classes/Physics2DDirectBodyState.xml:10
+#: doc/classes/Physics2DDirectSpaceState.xml:10 doc/classes/PhysicsBody.xml:10
+#: doc/classes/PhysicsBody2D.xml:10 doc/classes/PhysicsDirectBodyState.xml:10
+#: doc/classes/PhysicsDirectSpaceState.xml:10 doc/classes/RigidBody.xml:14
+#: doc/classes/Shape.xml:10 doc/classes/Shape2D.xml:10
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/physics/physics_introduction."
+"html"
+msgstr ""
+
+#: doc/classes/CollisionShape.xml:19
+msgid ""
+"Sets the collision shape's shape to the addition of all its convexed "
+"[MeshInstance] siblings geometry."
+msgstr ""
+
+#: doc/classes/CollisionShape.xml:26
+msgid ""
+"If this method exists within a script it will be called whenever the shape "
+"resource has been modified."
+msgstr ""
+
+#: doc/classes/CollisionShape.xml:32
+msgid "A disabled collision shape has no effect in the world."
+msgstr ""
+
+#: doc/classes/CollisionShape.xml:35 doc/classes/CollisionShape2D.xml:28
+msgid "The actual shape owned by this collision shape."
+msgstr ""
+
+#: doc/classes/CollisionShape2D.xml:4
+msgid "Node that represents collision shape data in 2D space."
+msgstr ""
+
+#: doc/classes/CollisionShape2D.xml:7
+msgid ""
+"Editor facility for creating and editing collision shapes in 2D space. You "
+"can use this node to represent all sorts of collision shapes, for example, "
+"add this to an [Area2D] to give it a detection shape, or add it to a "
+"[PhysicsBody2D] to create a solid object. [b]IMPORTANT[/b]: this is an "
+"Editor-only helper to create shapes, use [method CollisionObject2D."
+"shape_owner_get_shape] to get the actual shape."
+msgstr ""
+
+#: doc/classes/CollisionShape2D.xml:13 doc/classes/KinematicBody2D.xml:14
+#: doc/classes/RectangleShape2D.xml:11 doc/classes/TileMap.xml:17
+#: doc/classes/TileSet.xml:17
+msgid "https://godotengine.org/asset-library/asset/113"
+msgstr ""
+
+#: doc/classes/CollisionShape2D.xml:19
+msgid ""
+"A disabled collision shape has no effect in the world. This property should "
+"be changed with [method Object.set_deferred]."
+msgstr ""
+
+#: doc/classes/CollisionShape2D.xml:22
+msgid ""
+"Sets whether this collision shape should only detect collision on one side "
+"(top or bottom)."
+msgstr ""
+
+#: doc/classes/CollisionShape2D.xml:25
+msgid ""
+"The margin used for one-way collision (in pixels). Higher values will make "
+"the shape thicker, and work better for colliders that enter the shape at a "
+"high velocity."
+msgstr ""
+
+#: doc/classes/Color.xml:4
+msgid "Color in RGBA format using floats on the range of 0 to 1."
+msgstr ""
+
+#: doc/classes/Color.xml:7
+msgid ""
+"A color represented by red, green, blue, and alpha (RGBA) components. The "
+"alpha component is often used for transparency. Values are in floating-point "
+"and usually range from 0 to 1. Some properties (such as CanvasItem.modulate) "
+"may accept values greater than 1 (overbright or HDR colors).\n"
+"You can also create a color from standardized color names by using [method "
+"@GDScript.ColorN] or directly using the color constants defined here. The "
+"standardized color set is based on the [url=https://en.wikipedia.org/wiki/"
+"X11_color_names]X11 color names[/url].\n"
+"If you want to supply values in a range of 0 to 255, you should use [method "
+"@GDScript.Color8].\n"
+"[b]Note:[/b] In a boolean context, a Color will evaluate to [code]false[/"
+"code] if it's equal to [code]Color(0, 0, 0, 1)[/code] (opaque black). "
+"Otherwise, a Color will always evaluate to [code]true[/code].\n"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/master/img/"
+"color_constants.png]Color constants cheatsheet[/url]"
+msgstr ""
+
+#: doc/classes/Color.xml:14 doc/classes/ColorPickerButton.xml:13
+msgid "https://godotengine.org/asset-library/asset/517"
+msgstr ""
+
+#: doc/classes/Color.xml:15 doc/classes/ColorPicker.xml:11
+msgid "https://godotengine.org/asset-library/asset/146"
+msgstr ""
+
+#: doc/classes/Color.xml:16 doc/classes/ColorPickerButton.xml:12
+msgid "https://godotengine.org/asset-library/asset/133"
+msgstr ""
+
+#: doc/classes/Color.xml:23
+msgid ""
+"Constructs a color from an HTML hexadecimal color string in ARGB or RGB "
+"format. See also [method @GDScript.ColorN].\n"
+"[codeblock]\n"
+"# Each of the following creates the same color RGBA(178, 217, 10, 255).\n"
+"var c1 = Color(\"#ffb2d90a\") # ARGB format with \"#\".\n"
+"var c2 = Color(\"ffb2d90a\") # ARGB format.\n"
+"var c3 = Color(\"#b2d90a\") # RGB format with \"#\".\n"
+"var c4 = Color(\"b2d90a\") # RGB format.\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Color.xml:37
+msgid ""
+"Constructs a color from a 32-bit integer in RGBA format (each byte "
+"represents a color channel).\n"
+"[codeblock]\n"
+"var c = Color(274) # Similar to Color(0.0, 0.0, 0.004, 0.07)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Color.xml:49
+msgid ""
+"Constructs a color from RGB values, typically between 0 and 1. Alpha will be "
+"1.\n"
+"[codeblock]\n"
+"var color = Color(0.2, 1.0, 0.7) # Similar to Color8(51, 255, 178, 255)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Color.xml:62
+msgid ""
+"Constructs a color from RGBA values, typically between 0 and 1.\n"
+"[codeblock]\n"
+"var color = Color(0.2, 1.0, 0.7, 0.8) # Similar to Color8(51, 255, 178, "
+"204)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Color.xml:72
+msgid ""
+"Returns a new color resulting from blending this color over another. If the "
+"color is opaque, the result is also opaque. The second color may have a "
+"range of alpha values.\n"
+"[codeblock]\n"
+"var bg = Color(0.0, 1.0, 0.0, 0.5) # Green with alpha of 50%\n"
+"var fg = Color(1.0, 0.0, 0.0, 0.5) # Red with alpha of 50%\n"
+"var blended_color = bg.blend(fg) # Brown with alpha of 75%\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Color.xml:83
+msgid ""
+"Returns the most contrasting color.\n"
+"[codeblock]\n"
+"var c = Color(0.3, 0.4, 0.9)\n"
+"var contrasted_color = c.contrasted() # Equivalent to RGBA(204, 229, 102, "
+"255)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Color.xml:94
+msgid ""
+"Returns a new color resulting from making this color darker by the specified "
+"percentage (ratio from 0 to 1).\n"
+"[codeblock]\n"
+"var green = Color(0.0, 1.0, 0.0)\n"
+"var darkgreen = green.darkened(0.2) # 20% darker than regular green\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Color.xml:108
+msgid ""
+"Constructs a color from an HSV profile. [code]h[/code], [code]s[/code], and "
+"[code]v[/code] are values between 0 and 1.\n"
+"[codeblock]\n"
+"var c = Color.from_hsv(0.58, 0.5, 0.79, 0.8) # Equivalent to HSV(210, 50, "
+"79, 0.8) or Color8(100, 151, 201, 0.8)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Color.xml:117
+msgid ""
+"Returns the color's grayscale representation.\n"
+"The gray value is calculated as [code](r + g + b) / 3[/code].\n"
+"[codeblock]\n"
+"var c = Color(0.2, 0.45, 0.82)\n"
+"var gray = c.gray() # A value of 0.466667\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Color.xml:128
+msgid ""
+"Returns the inverted color [code](1 - r, 1 - g, 1 - b, a)[/code].\n"
+"[codeblock]\n"
+"var color = Color(0.3, 0.4, 0.9)\n"
+"var inverted_color = color.inverted() # Equivalent to Color(0.7, 0.6, 0.1)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Color.xml:139
+msgid ""
+"Returns [code]true[/code] if this color and [code]color[/code] are "
+"approximately equal, by running [method @GDScript.is_equal_approx] on each "
+"component."
+msgstr ""
+
+#: doc/classes/Color.xml:146
+msgid ""
+"Returns a new color resulting from making this color lighter by the "
+"specified percentage (ratio from 0 to 1).\n"
+"[codeblock]\n"
+"var green = Color(0.0, 1.0, 0.0)\n"
+"var lightgreen = green.lightened(0.2) # 20% lighter than regular green\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Color.xml:158
+msgid ""
+"Returns the linear interpolation with another color. The interpolation "
+"factor [code]weight[/code] is between 0 and 1.\n"
+"[codeblock]\n"
+"var c1 = Color(1.0, 0.0, 0.0)\n"
+"var c2 = Color(0.0, 1.0, 0.0)\n"
+"var li_c = c1.linear_interpolate(c2, 0.5) # Equivalent to Color(0.5, 0.5, "
+"0.0)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Color.xml:169
+msgid ""
+"Returns the color converted to a 32-bit integer in ABGR format (each byte "
+"represents a color channel). ABGR is the reversed version of the default "
+"format.\n"
+"[codeblock]\n"
+"var color = Color(1, 0.5, 0.2)\n"
+"print(color.to_abgr32()) # Prints 4281565439\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Color.xml:179
+msgid ""
+"Returns the color converted to a 64-bit integer in ABGR format (each word "
+"represents a color channel). ABGR is the reversed version of the default "
+"format.\n"
+"[codeblock]\n"
+"var color = Color(1, 0.5, 0.2)\n"
+"print(color.to_abgr64()) # Prints -225178692812801\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Color.xml:189
+msgid ""
+"Returns the color converted to a 32-bit integer in ARGB format (each byte "
+"represents a color channel). ARGB is more compatible with DirectX.\n"
+"[codeblock]\n"
+"var color = Color(1, 0.5, 0.2)\n"
+"print(color.to_argb32()) # Prints 4294934323\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Color.xml:199
+msgid ""
+"Returns the color converted to a 64-bit integer in ARGB format (each word "
+"represents a color channel). ARGB is more compatible with DirectX.\n"
+"[codeblock]\n"
+"var color = Color(1, 0.5, 0.2)\n"
+"print(color.to_argb64()) # Prints -2147470541\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Color.xml:210
+msgid ""
+"Returns the color's HTML hexadecimal color string in ARGB format (ex: "
+"[code]ff34f822[/code]).\n"
+"Setting [code]with_alpha[/code] to [code]false[/code] excludes alpha from "
+"the hexadecimal string.\n"
+"[codeblock]\n"
+"var c = Color(1, 1, 1, 0.5)\n"
+"var s1 = c.to_html() # Returns \"7fffffff\"\n"
+"var s2 = c.to_html(false) # Returns \"ffffff\"\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Color.xml:222
+msgid ""
+"Returns the color converted to a 32-bit integer in RGBA format (each byte "
+"represents a color channel). RGBA is Godot's default format.\n"
+"[codeblock]\n"
+"var color = Color(1, 0.5, 0.2)\n"
+"print(color.to_rgba32()) # Prints 4286526463\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Color.xml:232
+msgid ""
+"Returns the color converted to a 64-bit integer in RGBA format (each word "
+"represents a color channel). RGBA is Godot's default format.\n"
+"[codeblock]\n"
+"var color = Color(1, 0.5, 0.2)\n"
+"print(color.to_rgba64()) # Prints -140736629309441\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Color.xml:242
+msgid ""
+"The color's alpha (transparency) component, typically on the range of 0 to 1."
+msgstr ""
+
+#: doc/classes/Color.xml:245
+msgid "Wrapper for [member a] that uses the range 0 to 255 instead of 0 to 1."
+msgstr ""
+
+#: doc/classes/Color.xml:248
+msgid "The color's blue component, typically on the range of 0 to 1."
+msgstr ""
+
+#: doc/classes/Color.xml:251
+msgid "Wrapper for [member b] that uses the range 0 to 255 instead of 0 to 1."
+msgstr ""
+
+#: doc/classes/Color.xml:254
+msgid "The color's green component, typically on the range of 0 to 1."
+msgstr ""
+
+#: doc/classes/Color.xml:257
+msgid "Wrapper for [member g] that uses the range 0 to 255 instead of 0 to 1."
+msgstr ""
+
+#: doc/classes/Color.xml:260
+msgid "The HSV hue of this color, on the range 0 to 1."
+msgstr ""
+
+#: doc/classes/Color.xml:263
+msgid "The color's red component, typically on the range of 0 to 1."
+msgstr ""
+
+#: doc/classes/Color.xml:266
+msgid "Wrapper for [member r] that uses the range 0 to 255 instead of 0 to 1."
+msgstr ""
+
+#: doc/classes/Color.xml:269
+msgid "The HSV saturation of this color, on the range 0 to 1."
+msgstr ""
+
+#: doc/classes/Color.xml:272
+msgid "The HSV value (brightness) of this color, on the range 0 to 1."
+msgstr ""
+
+#: doc/classes/Color.xml:277
+msgid "Alice blue color."
+msgstr ""
+
+#: doc/classes/Color.xml:280
+msgid "Antique white color."
+msgstr ""
+
+#: doc/classes/Color.xml:283
+msgid "Aqua color."
+msgstr ""
+
+#: doc/classes/Color.xml:286
+msgid "Aquamarine color."
+msgstr ""
+
+#: doc/classes/Color.xml:289
+msgid "Azure color."
+msgstr ""
+
+#: doc/classes/Color.xml:292
+msgid "Beige color."
+msgstr ""
+
+#: doc/classes/Color.xml:295
+msgid "Bisque color."
+msgstr ""
+
+#: doc/classes/Color.xml:298
+msgid "Black color."
+msgstr ""
+
+#: doc/classes/Color.xml:301
+msgid "Blanche almond color."
+msgstr ""
+
+#: doc/classes/Color.xml:304
+msgid "Blue color."
+msgstr ""
+
+#: doc/classes/Color.xml:307
+msgid "Blue violet color."
+msgstr ""
+
+#: doc/classes/Color.xml:310
+msgid "Brown color."
+msgstr ""
+
+#: doc/classes/Color.xml:313
+msgid "Burly wood color."
+msgstr ""
+
+#: doc/classes/Color.xml:316
+msgid "Cadet blue color."
+msgstr ""
+
+#: doc/classes/Color.xml:319
+msgid "Chartreuse color."
+msgstr ""
+
+#: doc/classes/Color.xml:322
+msgid "Chocolate color."
+msgstr ""
+
+#: doc/classes/Color.xml:325
+msgid "Coral color."
+msgstr ""
+
+#: doc/classes/Color.xml:328
+msgid "Cornflower color."
+msgstr ""
+
+#: doc/classes/Color.xml:331
+msgid "Corn silk color."
+msgstr ""
+
+#: doc/classes/Color.xml:334
+msgid "Crimson color."
+msgstr ""
+
+#: doc/classes/Color.xml:337
+msgid "Cyan color."
+msgstr ""
+
+#: doc/classes/Color.xml:340
+msgid "Dark blue color."
+msgstr ""
+
+#: doc/classes/Color.xml:343
+msgid "Dark cyan color."
+msgstr ""
+
+#: doc/classes/Color.xml:346
+msgid "Dark goldenrod color."
+msgstr ""
+
+#: doc/classes/Color.xml:349
+msgid "Dark gray color."
+msgstr ""
+
+#: doc/classes/Color.xml:352
+msgid "Dark green color."
+msgstr ""
+
+#: doc/classes/Color.xml:355
+msgid "Dark khaki color."
+msgstr ""
+
+#: doc/classes/Color.xml:358
+msgid "Dark magenta color."
+msgstr ""
+
+#: doc/classes/Color.xml:361
+msgid "Dark olive green color."
+msgstr ""
+
+#: doc/classes/Color.xml:364
+msgid "Dark orange color."
+msgstr ""
+
+#: doc/classes/Color.xml:367
+msgid "Dark orchid color."
+msgstr ""
+
+#: doc/classes/Color.xml:370
+msgid "Dark red color."
+msgstr ""
+
+#: doc/classes/Color.xml:373
+msgid "Dark salmon color."
+msgstr ""
+
+#: doc/classes/Color.xml:376
+msgid "Dark sea green color."
+msgstr ""
+
+#: doc/classes/Color.xml:379
+msgid "Dark slate blue color."
+msgstr ""
+
+#: doc/classes/Color.xml:382
+msgid "Dark slate gray color."
+msgstr ""
+
+#: doc/classes/Color.xml:385
+msgid "Dark turquoise color."
+msgstr ""
+
+#: doc/classes/Color.xml:388
+msgid "Dark violet color."
+msgstr ""
+
+#: doc/classes/Color.xml:391
+msgid "Deep pink color."
+msgstr ""
+
+#: doc/classes/Color.xml:394
+msgid "Deep sky blue color."
+msgstr ""
+
+#: doc/classes/Color.xml:397
+msgid "Dim gray color."
+msgstr ""
+
+#: doc/classes/Color.xml:400
+msgid "Dodger blue color."
+msgstr ""
+
+#: doc/classes/Color.xml:403
+msgid "Firebrick color."
+msgstr ""
+
+#: doc/classes/Color.xml:406
+msgid "Floral white color."
+msgstr ""
+
+#: doc/classes/Color.xml:409
+msgid "Forest green color."
+msgstr ""
+
+#: doc/classes/Color.xml:412
+msgid "Fuchsia color."
+msgstr ""
+
+#: doc/classes/Color.xml:415
+msgid "Gainsboro color."
+msgstr ""
+
+#: doc/classes/Color.xml:418
+msgid "Ghost white color."
+msgstr ""
+
+#: doc/classes/Color.xml:421
+msgid "Gold color."
+msgstr ""
+
+#: doc/classes/Color.xml:424
+msgid "Goldenrod color."
+msgstr ""
+
+#: doc/classes/Color.xml:427
+msgid "Gray color."
+msgstr ""
+
+#: doc/classes/Color.xml:430
+msgid "Green color."
+msgstr ""
+
+#: doc/classes/Color.xml:433
+msgid "Green yellow color."
+msgstr ""
+
+#: doc/classes/Color.xml:436
+msgid "Honeydew color."
+msgstr ""
+
+#: doc/classes/Color.xml:439
+msgid "Hot pink color."
+msgstr ""
+
+#: doc/classes/Color.xml:442
+msgid "Indian red color."
+msgstr ""
+
+#: doc/classes/Color.xml:445
+msgid "Indigo color."
+msgstr ""
+
+#: doc/classes/Color.xml:448
+msgid "Ivory color."
+msgstr ""
+
+#: doc/classes/Color.xml:451
+msgid "Khaki color."
+msgstr ""
+
+#: doc/classes/Color.xml:454
+msgid "Lavender color."
+msgstr ""
+
+#: doc/classes/Color.xml:457
+msgid "Lavender blush color."
+msgstr ""
+
+#: doc/classes/Color.xml:460
+msgid "Lawn green color."
+msgstr ""
+
+#: doc/classes/Color.xml:463
+msgid "Lemon chiffon color."
+msgstr ""
+
+#: doc/classes/Color.xml:466
+msgid "Light blue color."
+msgstr ""
+
+#: doc/classes/Color.xml:469
+msgid "Light coral color."
+msgstr ""
+
+#: doc/classes/Color.xml:472
+msgid "Light cyan color."
+msgstr ""
+
+#: doc/classes/Color.xml:475
+msgid "Light goldenrod color."
+msgstr ""
+
+#: doc/classes/Color.xml:478
+msgid "Light gray color."
+msgstr ""
+
+#: doc/classes/Color.xml:481
+msgid "Light green color."
+msgstr ""
+
+#: doc/classes/Color.xml:484
+msgid "Light pink color."
+msgstr ""
+
+#: doc/classes/Color.xml:487
+msgid "Light salmon color."
+msgstr ""
+
+#: doc/classes/Color.xml:490
+msgid "Light sea green color."
+msgstr ""
+
+#: doc/classes/Color.xml:493
+msgid "Light sky blue color."
+msgstr ""
+
+#: doc/classes/Color.xml:496
+msgid "Light slate gray color."
+msgstr ""
+
+#: doc/classes/Color.xml:499
+msgid "Light steel blue color."
+msgstr ""
+
+#: doc/classes/Color.xml:502
+msgid "Light yellow color."
+msgstr ""
+
+#: doc/classes/Color.xml:505
+msgid "Lime color."
+msgstr ""
+
+#: doc/classes/Color.xml:508
+msgid "Lime green color."
+msgstr ""
+
+#: doc/classes/Color.xml:511
+msgid "Linen color."
+msgstr ""
+
+#: doc/classes/Color.xml:514
+msgid "Magenta color."
+msgstr ""
+
+#: doc/classes/Color.xml:517
+msgid "Maroon color."
+msgstr ""
+
+#: doc/classes/Color.xml:520
+msgid "Medium aquamarine color."
+msgstr ""
+
+#: doc/classes/Color.xml:523
+msgid "Medium blue color."
+msgstr ""
+
+#: doc/classes/Color.xml:526
+msgid "Medium orchid color."
+msgstr ""
+
+#: doc/classes/Color.xml:529
+msgid "Medium purple color."
+msgstr ""
+
+#: doc/classes/Color.xml:532
+msgid "Medium sea green color."
+msgstr ""
+
+#: doc/classes/Color.xml:535
+msgid "Medium slate blue color."
+msgstr ""
+
+#: doc/classes/Color.xml:538
+msgid "Medium spring green color."
+msgstr ""
+
+#: doc/classes/Color.xml:541
+msgid "Medium turquoise color."
+msgstr ""
+
+#: doc/classes/Color.xml:544
+msgid "Medium violet red color."
+msgstr ""
+
+#: doc/classes/Color.xml:547
+msgid "Midnight blue color."
+msgstr ""
+
+#: doc/classes/Color.xml:550
+msgid "Mint cream color."
+msgstr ""
+
+#: doc/classes/Color.xml:553
+msgid "Misty rose color."
+msgstr ""
+
+#: doc/classes/Color.xml:556
+msgid "Moccasin color."
+msgstr ""
+
+#: doc/classes/Color.xml:559
+msgid "Navajo white color."
+msgstr ""
+
+#: doc/classes/Color.xml:562
+msgid "Navy blue color."
+msgstr ""
+
+#: doc/classes/Color.xml:565
+msgid "Old lace color."
+msgstr ""
+
+#: doc/classes/Color.xml:568
+msgid "Olive color."
+msgstr ""
+
+#: doc/classes/Color.xml:571
+msgid "Olive drab color."
+msgstr ""
+
+#: doc/classes/Color.xml:574
+msgid "Orange color."
+msgstr ""
+
+#: doc/classes/Color.xml:577
+msgid "Orange red color."
+msgstr ""
+
+#: doc/classes/Color.xml:580
+msgid "Orchid color."
+msgstr ""
+
+#: doc/classes/Color.xml:583
+msgid "Pale goldenrod color."
+msgstr ""
+
+#: doc/classes/Color.xml:586
+msgid "Pale green color."
+msgstr ""
+
+#: doc/classes/Color.xml:589
+msgid "Pale turquoise color."
+msgstr ""
+
+#: doc/classes/Color.xml:592
+msgid "Pale violet red color."
+msgstr ""
+
+#: doc/classes/Color.xml:595
+msgid "Papaya whip color."
+msgstr ""
+
+#: doc/classes/Color.xml:598
+msgid "Peach puff color."
+msgstr ""
+
+#: doc/classes/Color.xml:601
+msgid "Peru color."
+msgstr ""
+
+#: doc/classes/Color.xml:604
+msgid "Pink color."
+msgstr ""
+
+#: doc/classes/Color.xml:607
+msgid "Plum color."
+msgstr ""
+
+#: doc/classes/Color.xml:610
+msgid "Powder blue color."
+msgstr ""
+
+#: doc/classes/Color.xml:613
+msgid "Purple color."
+msgstr ""
+
+#: doc/classes/Color.xml:616
+msgid "Rebecca purple color."
+msgstr ""
+
+#: doc/classes/Color.xml:619
+msgid "Red color."
+msgstr ""
+
+#: doc/classes/Color.xml:622
+msgid "Rosy brown color."
+msgstr ""
+
+#: doc/classes/Color.xml:625
+msgid "Royal blue color."
+msgstr ""
+
+#: doc/classes/Color.xml:628
+msgid "Saddle brown color."
+msgstr ""
+
+#: doc/classes/Color.xml:631
+msgid "Salmon color."
+msgstr ""
+
+#: doc/classes/Color.xml:634
+msgid "Sandy brown color."
+msgstr ""
+
+#: doc/classes/Color.xml:637
+msgid "Sea green color."
+msgstr ""
+
+#: doc/classes/Color.xml:640
+msgid "Seashell color."
+msgstr ""
+
+#: doc/classes/Color.xml:643
+msgid "Sienna color."
+msgstr ""
+
+#: doc/classes/Color.xml:646
+msgid "Silver color."
+msgstr ""
+
+#: doc/classes/Color.xml:649
+msgid "Sky blue color."
+msgstr ""
+
+#: doc/classes/Color.xml:652
+msgid "Slate blue color."
+msgstr ""
+
+#: doc/classes/Color.xml:655
+msgid "Slate gray color."
+msgstr ""
+
+#: doc/classes/Color.xml:658
+msgid "Snow color."
+msgstr ""
+
+#: doc/classes/Color.xml:661
+msgid "Spring green color."
+msgstr ""
+
+#: doc/classes/Color.xml:664
+msgid "Steel blue color."
+msgstr ""
+
+#: doc/classes/Color.xml:667
+msgid "Tan color."
+msgstr ""
+
+#: doc/classes/Color.xml:670
+msgid "Teal color."
+msgstr ""
+
+#: doc/classes/Color.xml:673
+msgid "Thistle color."
+msgstr ""
+
+#: doc/classes/Color.xml:676
+msgid "Tomato color."
+msgstr ""
+
+#: doc/classes/Color.xml:679
+msgid "Transparent color (white with no alpha)."
+msgstr ""
+
+#: doc/classes/Color.xml:682
+msgid "Turquoise color."
+msgstr ""
+
+#: doc/classes/Color.xml:685
+msgid "Violet color."
+msgstr ""
+
+#: doc/classes/Color.xml:688
+msgid "Web gray color."
+msgstr ""
+
+#: doc/classes/Color.xml:691
+msgid "Web green color."
+msgstr ""
+
+#: doc/classes/Color.xml:694
+msgid "Web maroon color."
+msgstr ""
+
+#: doc/classes/Color.xml:697
+msgid "Web purple color."
+msgstr ""
+
+#: doc/classes/Color.xml:700
+msgid "Wheat color."
+msgstr ""
+
+#: doc/classes/Color.xml:703
+msgid "White color."
+msgstr ""
+
+#: doc/classes/Color.xml:706
+msgid "White smoke color."
+msgstr ""
+
+#: doc/classes/Color.xml:709
+msgid "Yellow color."
+msgstr ""
+
+#: doc/classes/Color.xml:712
+msgid "Yellow green color."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:4
+msgid "Color picker control."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:7
+msgid ""
+"Displays a color picker widget. Useful for selecting a color from an RGB/"
+"RGBA colorspace.\n"
+"[b]Note:[/b] This control is the color picker widget itself. You can use a "
+"[ColorPickerButton] instead if you need a button that brings up a "
+"[ColorPicker] in a pop-up."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:18
+msgid ""
+"Adds the given color to a list of color presets. The presets are displayed "
+"in the color picker and the user will be able to select them.\n"
+"[b]Note:[/b] The presets list is only for [i]this[/i] color picker."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:26
+msgid ""
+"Removes the given color from the list of color presets of this color picker."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:32
+msgid "Returns the list of colors in the presets of the color picker."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:38 doc/classes/ColorPickerButton.xml:33
+msgid "The currently selected color."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:41
+msgid ""
+"If [code]true[/code], the color will apply only after the user releases the "
+"mouse button, otherwise it will apply immediately even in mouse motion event "
+"(which can cause performance issues)."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:44
+msgid "If [code]true[/code], shows an alpha channel slider (transparency)."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:47
+msgid ""
+"If [code]true[/code], allows editing the color with Hue/Saturation/Value "
+"sliders.\n"
+"[b]Note:[/b] Cannot be enabled if raw mode is on."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:51
+msgid "If [code]true[/code], the \"add preset\" button is enabled."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:54
+msgid "If [code]true[/code], saved color presets are visible."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:57
+msgid ""
+"If [code]true[/code], allows the color R, G, B component values to go beyond "
+"1.0, which can be used for certain special operations that require it (like "
+"tinting without darkening or rendering sprites in HDR).\n"
+"[b]Note:[/b] Cannot be enabled if HSV mode is on."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:65
+msgid "Emitted when the color is changed."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:71
+msgid "Emitted when a preset is added."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:77
+msgid "Emitted when a preset is removed."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:85
+msgid "The icon for the \"Add Preset\" button."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:88
+msgid "Custom texture for the hue selection slider on the right."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:93
+msgid "The width of the hue selection slider."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:98
+msgid "The margin around the [ColorPicker]."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:101
+msgid ""
+"The indicator used to signalize that the color value is outside the 0-1 "
+"range."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:106
+msgid "The icon for the screen color picker button."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:109
+msgid "The height of the saturation-value selection box."
+msgstr ""
+
+#: doc/classes/ColorPicker.xml:112
+msgid "The width of the saturation-value selection box."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:4
+msgid "Button that pops out a [ColorPicker]."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:7
+msgid ""
+"Encapsulates a [ColorPicker] making it accessible by pressing a button. "
+"Pressing the button will toggle the [ColorPicker] visibility.\n"
+"See also [BaseButton] which contains common properties and methods "
+"associated with this node.\n"
+"[b]Note:[/b] By default, the button may not be wide enough for the color "
+"preview swatch to be visible. Make sure to set [member Control."
+"rect_min_size] to a big enough value to give the button enough space."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:19
+msgid ""
+"Returns the [ColorPicker] that this node toggles.\n"
+"[b]Warning:[/b] This is a required internal node, removing and freeing it "
+"may cause a crash. If you wish to hide it or any of its children, use their "
+"[member CanvasItem.visible] property."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:26
+msgid ""
+"Returns the control's [PopupPanel] which allows you to connect to popup "
+"signals. This allows you to handle events when the ColorPicker is shown or "
+"hidden.\n"
+"[b]Warning:[/b] This is a required internal node, removing and freeing it "
+"may cause a crash. If you wish to hide it or any of its children, use their "
+"[member CanvasItem.visible] property."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:36
+msgid ""
+"If [code]true[/code], the alpha channel in the displayed [ColorPicker] will "
+"be visible."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:44
+msgid "Emitted when the color changes."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:49
+msgid ""
+"Emitted when the [ColorPicker] is created (the button is pressed for the "
+"first time)."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:54
+msgid "Emitted when the [ColorPicker] is closed."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:62
+msgid "The background of the color preview rect on the button."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:65
+msgid "[StyleBox] used when the [ColorPickerButton] is disabled."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:68
+msgid ""
+"[StyleBox] used when the [ColorPickerButton] is focused. It is displayed "
+"over the current [StyleBox], so using [StyleBoxEmpty] will just disable the "
+"focus visual effect."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:71
+msgid "[Font] of the [ColorPickerButton]'s text."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:74
+msgid "Default text [Color] of the [ColorPickerButton]."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:77
+msgid "Text [Color] used when the [ColorPickerButton] is disabled."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:80
+msgid ""
+"Text [Color] used when the [ColorPickerButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:83
+msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:86
+msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:89
+msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:92
+msgid "The horizontal space between [ColorPickerButton]'s icon and text."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:95
+msgid "Default [StyleBox] for the [ColorPickerButton]."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:98
+msgid "[StyleBox] used when the [ColorPickerButton] is being pressed."
+msgstr ""
+
+#: doc/classes/ColorRect.xml:4
+msgid "Colored rectangle."
+msgstr ""
+
+#: doc/classes/ColorRect.xml:7
+msgid ""
+"Displays a rectangle filled with a solid [member color]. If you need to "
+"display the border alone, consider using [ReferenceRect] instead."
+msgstr ""
+
+#: doc/classes/ColorRect.xml:16
+msgid ""
+"The fill color.\n"
+"[codeblock]\n"
+"$ColorRect.color = Color(1, 0, 0, 1) # Set ColorRect's color to red.\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/ConcavePolygonShape.xml:4
+msgid "Concave polygon shape."
+msgstr ""
+
+#: doc/classes/ConcavePolygonShape.xml:7
+msgid ""
+"Concave polygon shape resource, which can be set into a [PhysicsBody] or "
+"area. This shape is created by feeding a list of triangles.\n"
+"[b]Note:[/b] When used for collision, [ConcavePolygonShape] is intended to "
+"work with static [PhysicsBody] nodes like [StaticBody] and will not work "
+"with [KinematicBody] or [RigidBody] with a mode other than Static."
+msgstr ""
+
+#: doc/classes/ConcavePolygonShape.xml:17
+msgid "Returns the faces (an array of triangles)."
+msgstr ""
+
+#: doc/classes/ConcavePolygonShape.xml:24
+msgid "Sets the faces (an array of triangles)."
+msgstr ""
+
+#: doc/classes/ConcavePolygonShape2D.xml:4
+msgid "Concave polygon 2D shape resource for physics."
+msgstr ""
+
+#: doc/classes/ConcavePolygonShape2D.xml:7
+msgid ""
+"Concave polygon 2D shape resource for physics. It is made out of segments "
+"and is optimal for complex polygonal concave collisions. However, it is not "
+"advised to use for [RigidBody2D] nodes. A CollisionPolygon2D in convex "
+"decomposition mode (solids) or several convex objects are advised for that "
+"instead. Otherwise, a concave polygon 2D shape is better for static "
+"collisions.\n"
+"The main difference between a [ConvexPolygonShape2D] and a "
+"[ConcavePolygonShape2D] is that a concave polygon assumes it is concave and "
+"uses a more complex method of collision detection, and a convex one forces "
+"itself to be convex in order to speed up collision detection."
+msgstr ""
+
+#: doc/classes/ConcavePolygonShape2D.xml:16
+msgid ""
+"The array of points that make up the [ConcavePolygonShape2D]'s line segments."
+msgstr ""
+
+#: doc/classes/ConeTwistJoint.xml:4
+msgid "A twist joint between two 3D PhysicsBodies."
+msgstr ""
+
+#: doc/classes/ConeTwistJoint.xml:7
+msgid ""
+"The joint can rotate the bodies across an axis defined by the local x-axes "
+"of the [Joint].\n"
+"The twist axis is initiated as the X axis of the [Joint].\n"
+"Once the Bodies swing, the twist axis is calculated as the middle of the x-"
+"axes of the Joint in the local space of the two Bodies. See also "
+"[Generic6DOFJoint]."
+msgstr ""
+
+#: doc/classes/ConeTwistJoint.xml:30 doc/classes/ConeTwistJoint.xml:62
+#: doc/classes/PhysicsServer.xml:1076
+msgid ""
+"The speed with which the swing or twist will take place.\n"
+"The higher, the faster."
+msgstr ""
+
+#: doc/classes/ConeTwistJoint.xml:34 doc/classes/ConeTwistJoint.xml:69
+#: doc/classes/PhysicsServer.xml:1083
+msgid ""
+"Defines, how fast the swing- and twist-speed-difference on both sides gets "
+"synced."
+msgstr ""
+
+#: doc/classes/ConeTwistJoint.xml:37 doc/classes/ConeTwistJoint.xml:66
+msgid ""
+"The ease with which the joint starts to twist. If it's too low, it takes "
+"more force to start twisting the joint."
+msgstr ""
+
+#: doc/classes/ConeTwistJoint.xml:40 doc/classes/ConeTwistJoint.xml:52
+#: doc/classes/PhysicsServer.xml:1066
+msgid ""
+"Swing is rotation from side to side, around the axis perpendicular to the "
+"twist axis.\n"
+"The swing span defines, how much rotation will not get corrected along the "
+"swing axis.\n"
+"Could be defined as looseness in the [ConeTwistJoint].\n"
+"If below 0.05, this behavior is locked."
+msgstr ""
+
+#: doc/classes/ConeTwistJoint.xml:46 doc/classes/ConeTwistJoint.xml:58
+#: doc/classes/PhysicsServer.xml:1072
+msgid ""
+"Twist is the rotation around the twist axis, this value defined how far the "
+"joint can twist.\n"
+"Twist is locked if below 0.05."
+msgstr ""
+
+#: doc/classes/ConeTwistJoint.xml:72 doc/classes/Generic6DOFJoint.xml:384
+#: doc/classes/HingeJoint.xml:99 doc/classes/Light.xml:124
+#: doc/classes/SliderJoint.xml:165
+msgid "Represents the size of the [enum Param] enum."
+msgstr ""
+
+#: doc/classes/ConfigFile.xml:4
+msgid "Helper class to handle INI-style files."
+msgstr ""
+
+#: doc/classes/ConfigFile.xml:7
+msgid ""
+"This helper class can be used to store [Variant] values on the filesystem "
+"using INI-style formatting. The stored values are identified by a section "
+"and a key:\n"
+"[codeblock]\n"
+"[section]\n"
+"some_key=42\n"
+"string_example=\"Hello World!\"\n"
+"a_vector=Vector3( 1, 0, 2 )\n"
+"[/codeblock]\n"
+"The stored data can be saved to or parsed from a file, though ConfigFile "
+"objects can also be used directly without accessing the filesystem.\n"
+"The following example shows how to create a simple [ConfigFile] and save it "
+"on disk:\n"
+"[codeblock]\n"
+"# Create new ConfigFile object.\n"
+"var config = ConfigFile.new()\n"
+"\n"
+"# Store some values.\n"
+"config.set_value(\"Player1\", \"player_name\", \"Steve\")\n"
+"config.set_value(\"Player1\", \"best_score\", 10)\n"
+"config.set_value(\"Player2\", \"player_name\", \"V3geta\")\n"
+"config.set_value(\"Player2\", \"best_score\", 9001)\n"
+"\n"
+"# Save it to a file (overwrite if already exists).\n"
+"config.save(\"user://scores.cfg\")\n"
+"[/codeblock]\n"
+"This example shows how the above file could be loaded:\n"
+"[codeblock]\n"
+"var score_data = {}\n"
+"var config = ConfigFile.new()\n"
+"\n"
+"# Load data from a file.\n"
+"var err = config.load(\"user://scores.cfg\")\n"
+"\n"
+"# If the file didn't load, ignore it.\n"
+"if err != OK:\n"
+" return\n"
+"\n"
+"# Iterate over all sections.\n"
+"for player in config.get_sections():\n"
+" # Fetch the data for each section.\n"
+" var player_name = config.get_value(player, \"player_name\")\n"
+" var player_score = config.get_value(player, \"best_score\")\n"
+" score_data[player_name] = player_score\n"
+"[/codeblock]\n"
+"Any operation that mutates the ConfigFile such as [method set_value], "
+"[method clear], or [method erase_section], only changes what is loaded in "
+"memory. If you want to write the change to a file, you have to save the "
+"changes with [method save], [method save_encrypted], or [method "
+"save_encrypted_pass].\n"
+"Keep in mind that section and property names can't contain spaces. Anything "
+"after a space will be ignored on save and on load.\n"
+"ConfigFiles can also contain manually written comment lines starting with a "
+"semicolon ([code];[/code]). Those lines will be ignored when parsing the "
+"file. Note that comments will be lost when saving the ConfigFile. This can "
+"still be useful for dedicated server configuration files, which are "
+"typically never overwritten without explicit user action.\n"
+"[b]Note:[/b] The file extension given to a ConfigFile does not have any "
+"impact on its formatting or behavior. By convention, the [code].cfg[/code] "
+"extension is used here, but any other extension such as [code].ini[/code] is "
+"also valid. Since neither [code].cfg[/code] nor [code].ini[/code] are "
+"standardized, Godot's ConfigFile formatting may differ from files written by "
+"other programs."
+msgstr ""
+
+#: doc/classes/ConfigFile.xml:59
+msgid "Removes the entire contents of the config."
+msgstr ""
+
+#: doc/classes/ConfigFile.xml:66
+msgid ""
+"Deletes the specified section along with all the key-value pairs inside. "
+"Raises an error if the section does not exist."
+msgstr ""
+
+#: doc/classes/ConfigFile.xml:74
+msgid ""
+"Deletes the specified key in a section. Raises an error if either the "
+"section or the key do not exist."
+msgstr ""
+
+#: doc/classes/ConfigFile.xml:81
+msgid ""
+"Returns an array of all defined key identifiers in the specified section. "
+"Raises an error and returns an empty array if the section does not exist."
+msgstr ""
+
+#: doc/classes/ConfigFile.xml:87
+msgid "Returns an array of all defined section identifiers."
+msgstr ""
+
+#: doc/classes/ConfigFile.xml:96
+msgid ""
+"Returns the current value for the specified section and key. If either the "
+"section or the key do not exist, the method returns the fallback "
+"[code]default[/code] value. If [code]default[/code] is not specified or set "
+"to [code]null[/code], an error is also raised."
+msgstr ""
+
+#: doc/classes/ConfigFile.xml:103
+msgid "Returns [code]true[/code] if the specified section exists."
+msgstr ""
+
+#: doc/classes/ConfigFile.xml:111
+msgid "Returns [code]true[/code] if the specified section-key pair exists."
+msgstr ""
+
+#: doc/classes/ConfigFile.xml:118
+msgid ""
+"Loads the config file specified as a parameter. The file's contents are "
+"parsed and loaded in the [ConfigFile] object which the method was called "
+"on.\n"
+"Returns one of the [enum Error] code constants ([code]OK[/code] on success)."
+msgstr ""
+
+#: doc/classes/ConfigFile.xml:127
+msgid ""
+"Loads the encrypted config file specified as a parameter, using the provided "
+"[code]key[/code] to decrypt it. The file's contents are parsed and loaded in "
+"the [ConfigFile] object which the method was called on.\n"
+"Returns one of the [enum Error] code constants ([code]OK[/code] on success)."
+msgstr ""
+
+#: doc/classes/ConfigFile.xml:136
+msgid ""
+"Loads the encrypted config file specified as a parameter, using the provided "
+"[code]password[/code] to decrypt it. The file's contents are parsed and "
+"loaded in the [ConfigFile] object which the method was called on.\n"
+"Returns one of the [enum Error] code constants ([code]OK[/code] on success)."
+msgstr ""
+
+#: doc/classes/ConfigFile.xml:144
+msgid ""
+"Parses the passed string as the contents of a config file. The string is "
+"parsed and loaded in the ConfigFile object which the method was called on.\n"
+"Returns one of the [enum Error] code constants ([code]OK[/code] on success)."
+msgstr ""
+
+#: doc/classes/ConfigFile.xml:152
+msgid ""
+"Saves the contents of the [ConfigFile] object to the file specified as a "
+"parameter. The output file uses an INI-style structure.\n"
+"Returns one of the [enum Error] code constants ([code]OK[/code] on success)."
+msgstr ""
+
+#: doc/classes/ConfigFile.xml:161
+msgid ""
+"Saves the contents of the [ConfigFile] object to the AES-256 encrypted file "
+"specified as a parameter, using the provided [code]key[/code] to encrypt it. "
+"The output file uses an INI-style structure.\n"
+"Returns one of the [enum Error] code constants ([code]OK[/code] on success)."
+msgstr ""
+
+#: doc/classes/ConfigFile.xml:170
+msgid ""
+"Saves the contents of the [ConfigFile] object to the AES-256 encrypted file "
+"specified as a parameter, using the provided [code]password[/code] to "
+"encrypt it. The output file uses an INI-style structure.\n"
+"Returns one of the [enum Error] code constants ([code]OK[/code] on success)."
+msgstr ""
+
+#: doc/classes/ConfigFile.xml:180
+msgid ""
+"Assigns a value to the specified key of the specified section. If either the "
+"section or the key do not exist, they are created. Passing a [code]null[/"
+"code] value deletes the specified key if it exists, and deletes the section "
+"if it ends up empty once the key has been removed."
+msgstr ""
+
+#: doc/classes/ConfirmationDialog.xml:4
+msgid "Dialog for confirmation of actions."
+msgstr ""
+
+#: doc/classes/ConfirmationDialog.xml:7
+msgid ""
+"Dialog for confirmation of actions. This dialog inherits from "
+"[AcceptDialog], but has by default an OK and Cancel button (in host OS "
+"order).\n"
+"To get cancel action, you can use:\n"
+"[codeblock]\n"
+"get_cancel().connect(\"pressed\", self, \"cancelled\")\n"
+"[/codeblock]."
+msgstr ""
+
+#: doc/classes/ConfirmationDialog.xml:19
+msgid ""
+"Returns the cancel button.\n"
+"[b]Warning:[/b] This is a required internal node, removing and freeing it "
+"may cause a crash. If you wish to hide it or any of its children, use their "
+"[member CanvasItem.visible] property."
+msgstr ""
+
+#: doc/classes/Container.xml:4
+msgid "Base node for containers."
+msgstr ""
+
+#: doc/classes/Container.xml:7
+msgid ""
+"Base node for containers. A [Container] contains other controls and "
+"automatically arranges them in a certain way.\n"
+"A Control can inherit this to create custom container classes."
+msgstr ""
+
+#: doc/classes/Container.xml:18
+msgid ""
+"Fit a child control in a given rect. This is mainly a helper for creating "
+"custom container classes."
+msgstr ""
+
+#: doc/classes/Container.xml:24
+msgid ""
+"Queue resort of the contained children. This is called automatically anyway, "
+"but can be called upon request."
+msgstr ""
+
+#: doc/classes/Container.xml:31
+msgid "Emitted when sorting the children is needed."
+msgstr ""
+
+#: doc/classes/Container.xml:37
+msgid ""
+"Notification for when sorting the children, it must be obeyed immediately."
+msgstr ""
+
+#: doc/classes/Control.xml:4
+msgid ""
+"All user interface nodes inherit from Control. A control's anchors and "
+"margins adapt its position and size relative to its parent."
+msgstr ""
+
+#: doc/classes/Control.xml:7
+msgid ""
+"Base class for all UI-related nodes. [Control] features a bounding rectangle "
+"that defines its extents, an anchor position relative to its parent control "
+"or the current viewport, and margins that represent an offset to the anchor. "
+"The margins update automatically when the node, any of its parents, or the "
+"screen size change.\n"
+"For more information on Godot's UI system, anchors, margins, and containers, "
+"see the related tutorials in the manual. To build flexible UIs, you'll need "
+"a mix of UI elements that inherit from [Control] and [Container] nodes.\n"
+"[b]User Interface nodes and input[/b]\n"
+"Godot sends input events to the scene's root node first, by calling [method "
+"Node._input]. [method Node._input] forwards the event down the node tree to "
+"the nodes under the mouse cursor, or on keyboard focus. To do so, it calls "
+"[method MainLoop._input_event]. Call [method accept_event] so no other node "
+"receives the event. Once you accept an input, it becomes handled so [method "
+"Node._unhandled_input] will not process it.\n"
+"Only one [Control] node can be in keyboard focus. Only the node in focus "
+"will receive keyboard events. To get the focus, call [method grab_focus]. "
+"[Control] nodes lose focus when another node grabs it, or if you hide the "
+"node in focus.\n"
+"Sets [member mouse_filter] to [constant MOUSE_FILTER_IGNORE] to tell a "
+"[Control] node to ignore mouse or touch events. You'll need it if you place "
+"an icon on top of a button.\n"
+"[Theme] resources change the Control's appearance. If you change the [Theme] "
+"on a [Control] node, it affects all of its children. To override some of the "
+"theme's parameters, call one of the [code]add_*_override[/code] methods, "
+"like [method add_font_override]. You can override the theme with the "
+"inspector.\n"
+"[b]Note:[/b] Theme items are [i]not[/i] [Object] properties. This means you "
+"can't access their values using [method Object.get] and [method Object.set]. "
+"Instead, use [method get_color], [method get_constant], [method get_font], "
+"[method get_icon], [method get_stylebox], and the [code]add_*_override[/"
+"code] methods provided by this class."
+msgstr ""
+
+#: doc/classes/Control.xml:17
+msgid "https://docs.godotengine.org/en/3.4/tutorials/gui/index.html"
+msgstr ""
+
+#: doc/classes/Control.xml:19
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/gui/control_node_gallery.html"
+msgstr ""
+
+#: doc/classes/Control.xml:20
+msgid "https://github.com/godotengine/godot-demo-projects/tree/master/gui"
+msgstr ""
+
+#: doc/classes/Control.xml:26
+msgid ""
+"Virtual method to be implemented by the user. Returns whether [method "
+"_gui_input] should not be called for children controls outside this "
+"control's rectangle. Input will be clipped to the Rect of this [Control]. "
+"Similar to [member rect_clip_content], but doesn't affect visibility.\n"
+"If not overridden, defaults to [code]false[/code]."
+msgstr ""
+
+#: doc/classes/Control.xml:33
+msgid ""
+"Virtual method to be implemented by the user. Returns the minimum size for "
+"this control. Alternative to [member rect_min_size] for controlling minimum "
+"size via code. The actual minimum size will be the max value of these two "
+"(in each axis separately).\n"
+"If not overridden, defaults to [constant Vector2.ZERO]."
+msgstr ""
+
+#: doc/classes/Control.xml:41
+msgid ""
+"Virtual method to be implemented by the user. Use this method to process and "
+"accept inputs on UI elements. See [method accept_event].\n"
+"Example: clicking a control.\n"
+"[codeblock]\n"
+"func _gui_input(event):\n"
+" if event is InputEventMouseButton:\n"
+" if event.button_index == BUTTON_LEFT and event.pressed:\n"
+" print(\"I've been clicked D:\")\n"
+"[/codeblock]\n"
+"The event won't trigger if:\n"
+"* clicking outside the control (see [method has_point]);\n"
+"* control has [member mouse_filter] set to [constant MOUSE_FILTER_IGNORE];\n"
+"* control is obstructed by another [Control] on top of it, which doesn't "
+"have [member mouse_filter] set to [constant MOUSE_FILTER_IGNORE];\n"
+"* control's parent has [member mouse_filter] set to [constant "
+"MOUSE_FILTER_STOP] or has accepted the event;\n"
+"* it happens outside the parent's rectangle and the parent has either "
+"[member rect_clip_content] or [method _clips_input] enabled.\n"
+"[b]Note:[/b] Event position is relative to the control origin."
+msgstr ""
+
+#: doc/classes/Control.xml:62
+msgid ""
+"Virtual method to be implemented by the user. Returns a [Control] node that "
+"should be used as a tooltip instead of the default one. The [code]for_text[/"
+"code] includes the contents of the [member hint_tooltip] property.\n"
+"The returned node must be of type [Control] or Control-derived. It can have "
+"child nodes of any type. It is freed when the tooltip disappears, so make "
+"sure you always provide a new instance (if you want to use a pre-existing "
+"node from your scene tree, you can duplicate it and pass the duplicated "
+"instance). When [code]null[/code] or a non-Control node is returned, the "
+"default tooltip will be used instead.\n"
+"The returned node will be added as child to a [PopupPanel], so you should "
+"only provide the contents of that panel. That [PopupPanel] can be themed "
+"using [method Theme.set_stylebox] for the type [code]\"TooltipPanel\"[/code] "
+"(see [member hint_tooltip] for an example).\n"
+"[b]Note:[/b] The tooltip is shrunk to minimal size. If you want to ensure "
+"it's fully visible, you might want to set its [member rect_min_size] to some "
+"non-zero value.\n"
+"Example of usage with a custom-constructed node:\n"
+"[codeblock]\n"
+"func _make_custom_tooltip(for_text):\n"
+" var label = Label.new()\n"
+" label.text = for_text\n"
+" return label\n"
+"[/codeblock]\n"
+"Example of usage with a custom scene instance:\n"
+"[codeblock]\n"
+"func _make_custom_tooltip(for_text):\n"
+" var tooltip = preload(\"res://SomeTooltipScene.tscn\").instance()\n"
+" tooltip.get_node(\"Label\").text = for_text\n"
+" return tooltip\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Control.xml:85
+msgid ""
+"Marks an input event as handled. Once you accept an input event, it stops "
+"propagating, even to nodes listening to [method Node._unhandled_input] or "
+"[method Node._unhandled_key_input]."
+msgstr ""
+
+#: doc/classes/Control.xml:93
+msgid ""
+"Creates a local override for a theme [Color] with the specified [code]name[/"
+"code]. Local overrides always take precedence when fetching theme items for "
+"the control. An override cannot be removed, but it can be overridden with "
+"the corresponding default value.\n"
+"See also [method get_color].\n"
+"[b]Example of overriding a label's color and resetting it later:[/b]\n"
+"[codeblock]\n"
+"# Given the child Label node \"MyLabel\", override its font color with a "
+"custom value.\n"
+"$MyLabel.add_color_override(\"font_color\", Color(1, 0.5, 0))\n"
+"# Reset the font color of the child label.\n"
+"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", \"Label"
+"\"))\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Control.xml:109
+msgid ""
+"Creates a local override for a theme constant with the specified [code]name[/"
+"code]. Local overrides always take precedence when fetching theme items for "
+"the control. An override cannot be removed, but it can be overridden with "
+"the corresponding default value.\n"
+"See also [method get_constant]."
+msgstr ""
+
+#: doc/classes/Control.xml:118
+msgid ""
+"Creates a local override for a theme [Font] with the specified [code]name[/"
+"code]. Local overrides always take precedence when fetching theme items for "
+"the control. An override can be removed by assigning it a [code]null[/code] "
+"value.\n"
+"See also [method get_font]."
+msgstr ""
+
+#: doc/classes/Control.xml:127
+msgid ""
+"Creates a local override for a theme icon with the specified [code]name[/"
+"code]. Local overrides always take precedence when fetching theme items for "
+"the control. An override can be removed by assigning it a [code]null[/code] "
+"value.\n"
+"See also [method get_icon]."
+msgstr ""
+
+#: doc/classes/Control.xml:136
+msgid ""
+"Creates a local override for a theme shader with the specified [code]name[/"
+"code]. Local overrides always take precedence when fetching theme items for "
+"the control. An override can be removed by assigning it a [code]null[/code] "
+"value."
+msgstr ""
+
+#: doc/classes/Control.xml:144
+msgid ""
+"Creates a local override for a theme [StyleBox] with the specified "
+"[code]name[/code]. Local overrides always take precedence when fetching "
+"theme items for the control. An override can be removed by assigning it a "
+"[code]null[/code] value.\n"
+"See also [method get_stylebox].\n"
+"[b]Example of modifying a property in a StyleBox by duplicating it:[/b]\n"
+"[codeblock]\n"
+"# The snippet below assumes the child node MyButton has a StyleBoxFlat "
+"assigned.\n"
+"# Resources are shared across instances, so we need to duplicate it\n"
+"# to avoid modifying the appearance of all other buttons.\n"
+"var new_stylebox_normal = $MyButton.get_stylebox(\"normal\").duplicate()\n"
+"new_stylebox_normal.border_width_top = 3\n"
+"new_stylebox_normal.border_color = Color(0, 1, 0.5)\n"
+"$MyButton.add_stylebox_override(\"normal\", new_stylebox_normal)\n"
+"# Remove the stylebox override.\n"
+"$MyButton.add_stylebox_override(\"normal\", null)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Control.xml:165
+msgid ""
+"Godot calls this method to test if [code]data[/code] from a control's "
+"[method get_drag_data] can be dropped at [code]position[/code]. "
+"[code]position[/code] is local to this control.\n"
+"This method should only be used to test the data. Process the data in "
+"[method drop_data].\n"
+"[codeblock]\n"
+"func can_drop_data(position, data):\n"
+" # Check position if it is relevant to you\n"
+" # Otherwise, just check data\n"
+" return typeof(data) == TYPE_DICTIONARY and data.has(\"expected\")\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Control.xml:180
+msgid ""
+"Godot calls this method to pass you the [code]data[/code] from a control's "
+"[method get_drag_data] result. Godot first calls [method can_drop_data] to "
+"test if [code]data[/code] is allowed to drop at [code]position[/code] where "
+"[code]position[/code] is local to this control.\n"
+"[codeblock]\n"
+"func can_drop_data(position, data):\n"
+" return typeof(data) == TYPE_DICTIONARY and data.has(\"color\")\n"
+"\n"
+"func drop_data(position, data):\n"
+" color = data[\"color\"]\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Control.xml:193
+msgid ""
+"Finds the next (below in the tree) [Control] that can receive the focus."
+msgstr ""
+
+#: doc/classes/Control.xml:199
+msgid ""
+"Finds the previous (above in the tree) [Control] that can receive the focus."
+msgstr ""
+
+#: doc/classes/Control.xml:207
+msgid ""
+"Forces drag and bypasses [method get_drag_data] and [method "
+"set_drag_preview] by passing [code]data[/code] and [code]preview[/code]. "
+"Drag will start even if the mouse is neither over nor pressed on this "
+"control.\n"
+"The methods [method can_drop_data] and [method drop_data] must be "
+"implemented on controls that want to receive drop data."
+msgstr ""
+
+#: doc/classes/Control.xml:215
+msgid ""
+"Returns the anchor identified by [code]margin[/code] constant from [enum "
+"Margin] enum. A getter method for [member anchor_bottom], [member "
+"anchor_left], [member anchor_right] and [member anchor_top]."
+msgstr ""
+
+#: doc/classes/Control.xml:221
+msgid ""
+"Returns [member margin_left] and [member margin_top]. See also [member "
+"rect_position]."
+msgstr ""
+
+#: doc/classes/Control.xml:229
+msgid ""
+"Returns a [Color] from the first matching [Theme] in the tree if that "
+"[Theme] has a color item with the specified [code]name[/code] and "
+"[code]theme_type[/code]. If [code]theme_type[/code] is omitted the class "
+"name of the current control is used as the type. If the type is a class name "
+"its parent classes are also checked, in order of inheritance.\n"
+"For the current control its local overrides are considered first (see "
+"[method add_color_override]), then its assigned [member theme]. After the "
+"current control, each parent control and its assigned [member theme] are "
+"considered; controls without a [member theme] assigned are skipped. If no "
+"matching [Theme] is found in the tree, a custom project [Theme] (see [member "
+"ProjectSettings.gui/theme/custom]) and the default [Theme] are used.\n"
+"[codeblock]\n"
+"func _ready():\n"
+" # Get the font color defined for the current Control's class, if it "
+"exists.\n"
+" modulate = get_color(\"font_color\")\n"
+" # Get the font color defined for the Button class.\n"
+" modulate = get_color(\"font_color\", \"Button\")\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Control.xml:243
+msgid ""
+"Returns combined minimum size from [member rect_min_size] and [method "
+"get_minimum_size]."
+msgstr ""
+
+#: doc/classes/Control.xml:251
+msgid ""
+"Returns a constant from the first matching [Theme] in the tree if that "
+"[Theme] has a constant item with the specified [code]name[/code] and "
+"[code]theme_type[/code].\n"
+"See [method get_color] for details."
+msgstr ""
+
+#: doc/classes/Control.xml:259
+msgid ""
+"Returns the mouse cursor shape the control displays on mouse hover. See "
+"[enum CursorShape]."
+msgstr ""
+
+#: doc/classes/Control.xml:266
+msgid ""
+"Godot calls this method to get data that can be dragged and dropped onto "
+"controls that expect drop data. Returns [code]null[/code] if there is no "
+"data to drag. Controls that want to receive drop data should implement "
+"[method can_drop_data] and [method drop_data]. [code]position[/code] is "
+"local to this control. Drag may be forced with [method force_drag].\n"
+"A preview that will follow the mouse that should represent the data can be "
+"set with [method set_drag_preview]. A good time to set the preview is in "
+"this method.\n"
+"[codeblock]\n"
+"func get_drag_data(position):\n"
+" var mydata = make_data()\n"
+" set_drag_preview(make_preview(mydata))\n"
+" return mydata\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Control.xml:279
+msgid "Returns [member margin_right] and [member margin_bottom]."
+msgstr ""
+
+#: doc/classes/Control.xml:286
+msgid ""
+"Returns the focus neighbour identified by [code]margin[/code] constant from "
+"[enum Margin] enum. A getter method for [member focus_neighbour_bottom], "
+"[member focus_neighbour_left], [member focus_neighbour_right] and [member "
+"focus_neighbour_top]."
+msgstr ""
+
+#: doc/classes/Control.xml:292
+msgid ""
+"Returns the control that has the keyboard focus or [code]null[/code] if none."
+msgstr ""
+
+#: doc/classes/Control.xml:300
+msgid ""
+"Returns a [Font] from the first matching [Theme] in the tree if that [Theme] "
+"has a font item with the specified [code]name[/code] and [code]theme_type[/"
+"code].\n"
+"See [method get_color] for details."
+msgstr ""
+
+#: doc/classes/Control.xml:307
+msgid ""
+"Returns the position and size of the control relative to the top-left corner "
+"of the screen. See [member rect_position] and [member rect_size]."
+msgstr ""
+
+#: doc/classes/Control.xml:315
+msgid ""
+"Returns an icon from the first matching [Theme] in the tree if that [Theme] "
+"has an icon item with the specified [code]name[/code] and [code]theme_type[/"
+"code].\n"
+"See [method get_color] for details."
+msgstr ""
+
+#: doc/classes/Control.xml:323
+msgid ""
+"Returns the anchor identified by [code]margin[/code] constant from [enum "
+"Margin] enum. A getter method for [member margin_bottom], [member "
+"margin_left], [member margin_right] and [member margin_top]."
+msgstr ""
+
+#: doc/classes/Control.xml:329
+msgid "Returns the minimum size for this control. See [member rect_min_size]."
+msgstr ""
+
+#: doc/classes/Control.xml:335
+msgid "Returns the width/height occupied in the parent control."
+msgstr ""
+
+#: doc/classes/Control.xml:341
+msgid "Returns the parent control node."
+msgstr ""
+
+#: doc/classes/Control.xml:347
+msgid ""
+"Returns the position and size of the control relative to the top-left corner "
+"of the parent Control. See [member rect_position] and [member rect_size]."
+msgstr ""
+
+#: doc/classes/Control.xml:353
+msgid "Returns the rotation (in radians)."
+msgstr ""
+
+#: doc/classes/Control.xml:361
+msgid ""
+"Returns a [StyleBox] from the first matching [Theme] in the tree if that "
+"[Theme] has a stylebox item with the specified [code]name[/code] and "
+"[code]theme_type[/code].\n"
+"See [method get_color] for details."
+msgstr ""
+
+#: doc/classes/Control.xml:368
+msgid ""
+"Returns the default font from the first matching [Theme] in the tree if that "
+"[Theme] has a valid [member Theme.default_font] value.\n"
+"See [method get_color] for details."
+msgstr ""
+
+#: doc/classes/Control.xml:376
+msgid ""
+"Returns the tooltip, which will appear when the cursor is resting over this "
+"control. See [member hint_tooltip]."
+msgstr ""
+
+#: doc/classes/Control.xml:382
+msgid ""
+"Creates an [InputEventMouseButton] that attempts to click the control. If "
+"the event is received, the control acquires focus.\n"
+"[codeblock]\n"
+"func _process(delta):\n"
+" grab_click_focus() #when clicking another Control node, this node will "
+"be clicked instead\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Control.xml:392
+msgid ""
+"Steal the focus from another control and become the focused control (see "
+"[member focus_mode])."
+msgstr ""
+
+#: doc/classes/Control.xml:400
+msgid ""
+"Returns [code]true[/code] if there is a matching [Theme] in the tree that "
+"has a color item with the specified [code]name[/code] and [code]theme_type[/"
+"code].\n"
+"See [method get_color] for details."
+msgstr ""
+
+#: doc/classes/Control.xml:408
+msgid ""
+"Returns [code]true[/code] if there is a local override for a theme [Color] "
+"with the specified [code]name[/code] in this [Control] node.\n"
+"See [method add_color_override]."
+msgstr ""
+
+#: doc/classes/Control.xml:417
+msgid ""
+"Returns [code]true[/code] if there is a matching [Theme] in the tree that "
+"has a constant item with the specified [code]name[/code] and "
+"[code]theme_type[/code].\n"
+"See [method get_color] for details."
+msgstr ""
+
+#: doc/classes/Control.xml:425
+msgid ""
+"Returns [code]true[/code] if there is a local override for a theme constant "
+"with the specified [code]name[/code] in this [Control] node.\n"
+"See [method add_constant_override]."
+msgstr ""
+
+#: doc/classes/Control.xml:432
+msgid ""
+"Returns [code]true[/code] if this is the current focused control. See "
+"[member focus_mode]."
+msgstr ""
+
+#: doc/classes/Control.xml:440
+msgid ""
+"Returns [code]true[/code] if there is a matching [Theme] in the tree that "
+"has a font item with the specified [code]name[/code] and [code]theme_type[/"
+"code].\n"
+"See [method get_color] for details."
+msgstr ""
+
+#: doc/classes/Control.xml:448
+msgid ""
+"Returns [code]true[/code] if there is a local override for a theme [Font] "
+"with the specified [code]name[/code] in this [Control] node.\n"
+"See [method add_font_override]."
+msgstr ""
+
+#: doc/classes/Control.xml:457
+msgid ""
+"Returns [code]true[/code] if there is a matching [Theme] in the tree that "
+"has an icon item with the specified [code]name[/code] and [code]theme_type[/"
+"code].\n"
+"See [method get_color] for details."
+msgstr ""
+
+#: doc/classes/Control.xml:465
+msgid ""
+"Returns [code]true[/code] if there is a local override for a theme icon with "
+"the specified [code]name[/code] in this [Control] node.\n"
+"See [method add_icon_override]."
+msgstr ""
+
+#: doc/classes/Control.xml:473
+msgid ""
+"Virtual method to be implemented by the user. Returns whether the given "
+"[code]point[/code] is inside this control.\n"
+"If not overridden, default behavior is checking if the point is within "
+"control's Rect.\n"
+"[b]Note:[/b] If you want to check if a point is inside the control, you can "
+"use [code]get_rect().has_point(point)[/code]."
+msgstr ""
+
+#: doc/classes/Control.xml:482
+msgid ""
+"Returns [code]true[/code] if there is a local override for a theme shader "
+"with the specified [code]name[/code] in this [Control] node.\n"
+"See [method add_shader_override]."
+msgstr ""
+
+#: doc/classes/Control.xml:491
+msgid ""
+"Returns [code]true[/code] if there is a matching [Theme] in the tree that "
+"has a stylebox item with the specified [code]name[/code] and "
+"[code]theme_type[/code].\n"
+"See [method get_color] for details."
+msgstr ""
+
+#: doc/classes/Control.xml:499
+msgid ""
+"Returns [code]true[/code] if there is a local override for a theme "
+"[StyleBox] with the specified [code]name[/code] in this [Control] node.\n"
+"See [method add_stylebox_override]."
+msgstr ""
+
+#: doc/classes/Control.xml:506
+msgid ""
+"Invalidates the size cache in this node and in parent nodes up to toplevel. "
+"Intended to be used with [method get_minimum_size] when the return value is "
+"changed. Setting [member rect_min_size] directly calls this method "
+"automatically."
+msgstr ""
+
+#: doc/classes/Control.xml:512
+msgid ""
+"Give up the focus. No other control will be able to receive keyboard input."
+msgstr ""
+
+#: doc/classes/Control.xml:522
+msgid ""
+"Sets the anchor identified by [code]margin[/code] constant from [enum "
+"Margin] enum to value [code]anchor[/code]. A setter method for [member "
+"anchor_bottom], [member anchor_left], [member anchor_right] and [member "
+"anchor_top].\n"
+"If [code]keep_margin[/code] is [code]true[/code], margins aren't updated "
+"after this operation.\n"
+"If [code]push_opposite_anchor[/code] is [code]true[/code] and the opposite "
+"anchor overlaps this anchor, the opposite one will have its value "
+"overridden. For example, when setting left anchor to 1 and the right anchor "
+"has value of 0.5, the right anchor will also get value of 1. If "
+"[code]push_opposite_anchor[/code] was [code]false[/code], the left anchor "
+"would get value 0.5."
+msgstr ""
+
+#: doc/classes/Control.xml:534
+msgid ""
+"Works the same as [method set_anchor], but instead of [code]keep_margin[/"
+"code] argument and automatic update of margin, it allows to set the margin "
+"offset yourself (see [method set_margin])."
+msgstr ""
+
+#: doc/classes/Control.xml:543
+msgid ""
+"Sets both anchor preset and margin preset. See [method set_anchors_preset] "
+"and [method set_margins_preset]."
+msgstr ""
+
+#: doc/classes/Control.xml:551
+msgid ""
+"Sets the anchors to a [code]preset[/code] from [enum Control.LayoutPreset] "
+"enum. This is the code equivalent to using the Layout menu in the 2D "
+"editor.\n"
+"If [code]keep_margins[/code] is [code]true[/code], control's position will "
+"also be updated."
+msgstr ""
+
+#: doc/classes/Control.xml:559
+msgid ""
+"Sets [member margin_left] and [member margin_top] at the same time. "
+"Equivalent of changing [member rect_position]."
+msgstr ""
+
+#: doc/classes/Control.xml:566
+msgid ""
+"Forwards the handling of this control's drag and drop to [code]target[/code] "
+"control.\n"
+"Forwarding can be implemented in the target control similar to the methods "
+"[method get_drag_data], [method can_drop_data], and [method drop_data] but "
+"with two differences:\n"
+"1. The function name must be suffixed with [b]_fw[/b]\n"
+"2. The function must take an extra argument that is the control doing the "
+"forwarding\n"
+"[codeblock]\n"
+"# ThisControl.gd\n"
+"extends Control\n"
+"func _ready():\n"
+" set_drag_forwarding(target_control)\n"
+"\n"
+"# TargetControl.gd\n"
+"extends Control\n"
+"func can_drop_data_fw(position, data, from_control):\n"
+" return true\n"
+"\n"
+"func drop_data_fw(position, data, from_control):\n"
+" my_handle_data(data)\n"
+"\n"
+"func get_drag_data_fw(position, from_control):\n"
+" set_drag_preview(my_preview)\n"
+" return my_data()\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Control.xml:594
+msgid ""
+"Shows the given control at the mouse pointer. A good time to call this "
+"method is in [method get_drag_data]. The control must not be in the scene "
+"tree. You should not free the control, and you should not keep a reference "
+"to the control beyond the duration of the drag. It will be deleted "
+"automatically after the drag has ended.\n"
+"[codeblock]\n"
+"export (Color, RGBA) var color = Color(1, 0, 0, 1)\n"
+"\n"
+"func get_drag_data(position):\n"
+" # Use a control that is not in the tree\n"
+" var cpb = ColorPickerButton.new()\n"
+" cpb.color = color\n"
+" cpb.rect_size = Vector2(50, 50)\n"
+" set_drag_preview(cpb)\n"
+" return color\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Control.xml:612
+msgid "Sets [member margin_right] and [member margin_bottom] at the same time."
+msgstr ""
+
+#: doc/classes/Control.xml:620
+msgid ""
+"Sets the anchor identified by [code]margin[/code] constant from [enum "
+"Margin] enum to [Control] at [code]neighbor[/code] node path. A setter "
+"method for [member focus_neighbour_bottom], [member focus_neighbour_left], "
+"[member focus_neighbour_right] and [member focus_neighbour_top]."
+msgstr ""
+
+#: doc/classes/Control.xml:628
+msgid ""
+"Sets the [member rect_global_position] to given [code]position[/code].\n"
+"If [code]keep_margins[/code] is [code]true[/code], control's anchors will be "
+"updated instead of margins."
+msgstr ""
+
+#: doc/classes/Control.xml:637
+msgid ""
+"Sets the margin identified by [code]margin[/code] constant from [enum "
+"Margin] enum to given [code]offset[/code]. A setter method for [member "
+"margin_bottom], [member margin_left], [member margin_right] and [member "
+"margin_top]."
+msgstr ""
+
+#: doc/classes/Control.xml:646
+msgid ""
+"Sets the margins to a [code]preset[/code] from [enum Control.LayoutPreset] "
+"enum. This is the code equivalent to using the Layout menu in the 2D "
+"editor.\n"
+"Use parameter [code]resize_mode[/code] with constants from [enum Control."
+"LayoutPresetMode] to better determine the resulting size of the [Control]. "
+"Constant size will be ignored if used with presets that change size, e.g. "
+"[code]PRESET_LEFT_WIDE[/code].\n"
+"Use parameter [code]margin[/code] to determine the gap between the [Control] "
+"and the edges."
+msgstr ""
+
+#: doc/classes/Control.xml:656
+msgid ""
+"Sets the [member rect_position] to given [code]position[/code].\n"
+"If [code]keep_margins[/code] is [code]true[/code], control's anchors will be "
+"updated instead of margins."
+msgstr ""
+
+#: doc/classes/Control.xml:664
+msgid "Sets the rotation (in radians)."
+msgstr ""
+
+#: doc/classes/Control.xml:672
+msgid ""
+"Sets the size (see [member rect_size]).\n"
+"If [code]keep_margins[/code] is [code]true[/code], control's anchors will be "
+"updated instead of margins."
+msgstr ""
+
+#: doc/classes/Control.xml:680
+msgid ""
+"Displays a control as modal. Control must be a subwindow. Modal controls "
+"capture the input signals until closed or the area outside them is accessed. "
+"When a modal control loses focus, or the ESC key is pressed, they "
+"automatically hide. Modal controls are used extensively for popup dialogs "
+"and menus.\n"
+"If [code]exclusive[/code] is [code]true[/code], other controls will not "
+"receive input and clicking outside this control will not close it."
+msgstr ""
+
+#: doc/classes/Control.xml:688
+msgid ""
+"Moves the mouse cursor to [code]to_position[/code], relative to [member "
+"rect_position] of this [Control]."
+msgstr ""
+
+#: doc/classes/Control.xml:694
+msgid ""
+"Anchors the bottom edge of the node to the origin, the center, or the end of "
+"its parent control. It changes how the bottom margin updates when the node "
+"moves or changes size. You can use one of the [enum Anchor] constants for "
+"convenience."
+msgstr ""
+
+#: doc/classes/Control.xml:697
+msgid ""
+"Anchors the left edge of the node to the origin, the center or the end of "
+"its parent control. It changes how the left margin updates when the node "
+"moves or changes size. You can use one of the [enum Anchor] constants for "
+"convenience."
+msgstr ""
+
+#: doc/classes/Control.xml:700
+msgid ""
+"Anchors the right edge of the node to the origin, the center or the end of "
+"its parent control. It changes how the right margin updates when the node "
+"moves or changes size. You can use one of the [enum Anchor] constants for "
+"convenience."
+msgstr ""
+
+#: doc/classes/Control.xml:703
+msgid ""
+"Anchors the top edge of the node to the origin, the center or the end of its "
+"parent control. It changes how the top margin updates when the node moves or "
+"changes size. You can use one of the [enum Anchor] constants for convenience."
+msgstr ""
+
+#: doc/classes/Control.xml:706
+msgid ""
+"The focus access mode for the control (None, Click or All). Only one Control "
+"can be focused at the same time, and it will receive keyboard signals."
+msgstr ""
+
+#: doc/classes/Control.xml:709
+msgid ""
+"Tells Godot which node it should give keyboard focus to if the user presses "
+"the down arrow on the keyboard or down on a gamepad by default. You can "
+"change the key by editing the [code]ui_down[/code] input action. The node "
+"must be a [Control]. If this property is not set, Godot will give focus to "
+"the closest [Control] to the bottom of this one."
+msgstr ""
+
+#: doc/classes/Control.xml:712
+msgid ""
+"Tells Godot which node it should give keyboard focus to if the user presses "
+"the left arrow on the keyboard or left on a gamepad by default. You can "
+"change the key by editing the [code]ui_left[/code] input action. The node "
+"must be a [Control]. If this property is not set, Godot will give focus to "
+"the closest [Control] to the left of this one."
+msgstr ""
+
+#: doc/classes/Control.xml:715
+msgid ""
+"Tells Godot which node it should give keyboard focus to if the user presses "
+"the right arrow on the keyboard or right on a gamepad by default. You can "
+"change the key by editing the [code]ui_right[/code] input action. The node "
+"must be a [Control]. If this property is not set, Godot will give focus to "
+"the closest [Control] to the bottom of this one."
+msgstr ""
+
+#: doc/classes/Control.xml:718
+msgid ""
+"Tells Godot which node it should give keyboard focus to if the user presses "
+"the top arrow on the keyboard or top on a gamepad by default. You can change "
+"the key by editing the [code]ui_top[/code] input action. The node must be a "
+"[Control]. If this property is not set, Godot will give focus to the closest "
+"[Control] to the bottom of this one."
+msgstr ""
+
+#: doc/classes/Control.xml:721
+msgid ""
+"Tells Godot which node it should give keyboard focus to if the user presses "
+"Tab on a keyboard by default. You can change the key by editing the "
+"[code]ui_focus_next[/code] input action.\n"
+"If this property is not set, Godot will select a \"best guess\" based on "
+"surrounding nodes in the scene tree."
+msgstr ""
+
+#: doc/classes/Control.xml:725
+msgid ""
+"Tells Godot which node it should give keyboard focus to if the user presses "
+"Shift+Tab on a keyboard by default. You can change the key by editing the "
+"[code]ui_focus_prev[/code] input action.\n"
+"If this property is not set, Godot will select a \"best guess\" based on "
+"surrounding nodes in the scene tree."
+msgstr ""
+
+#: doc/classes/Control.xml:729
+msgid ""
+"Controls the direction on the horizontal axis in which the control should "
+"grow if its horizontal minimum size is changed to be greater than its "
+"current size, as the control always has to be at least the minimum size."
+msgstr ""
+
+#: doc/classes/Control.xml:732
+msgid ""
+"Controls the direction on the vertical axis in which the control should grow "
+"if its vertical minimum size is changed to be greater than its current size, "
+"as the control always has to be at least the minimum size."
+msgstr ""
+
+#: doc/classes/Control.xml:735
+msgid ""
+"Changes the tooltip text. The tooltip appears when the user's mouse cursor "
+"stays idle over this control for a few moments, provided that the [member "
+"mouse_filter] property is not [constant MOUSE_FILTER_IGNORE]. You can change "
+"the time required for the tooltip to appear with [code]gui/timers/"
+"tooltip_delay_sec[/code] option in Project Settings.\n"
+"The tooltip popup will use either a default implementation, or a custom one "
+"that you can provide by overriding [method _make_custom_tooltip]. The "
+"default tooltip includes a [PopupPanel] and [Label] whose theme properties "
+"can be customized using [Theme] methods with the [code]\"TooltipPanel\"[/"
+"code] and [code]\"TooltipLabel\"[/code] respectively. For example:\n"
+"[codeblock]\n"
+"var style_box = StyleBoxFlat.new()\n"
+"style_box.set_bg_color(Color(1, 1, 0))\n"
+"style_box.set_border_width_all(2)\n"
+"# We assume here that the `theme` property has been assigned a custom Theme "
+"beforehand.\n"
+"theme.set_stylebox(\"panel\", \"TooltipPanel\", style_box)\n"
+"theme.set_color(\"font_color\", \"TooltipLabel\", Color(0, 1, 1))\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Control.xml:747
+msgid ""
+"Enables whether input should propagate when you close the control as modal.\n"
+"If [code]false[/code], stops event handling at the viewport input event "
+"handling. The viewport first hides the modal and after marks the input as "
+"handled."
+msgstr ""
+
+#: doc/classes/Control.xml:751
+msgid ""
+"Distance between the node's bottom edge and its parent control, based on "
+"[member anchor_bottom].\n"
+"Margins are often controlled by one or multiple parent [Container] nodes, so "
+"you should not modify them manually if your node is a direct child of a "
+"[Container]. Margins update automatically when you move or resize the node."
+msgstr ""
+
+#: doc/classes/Control.xml:755
+msgid ""
+"Distance between the node's left edge and its parent control, based on "
+"[member anchor_left].\n"
+"Margins are often controlled by one or multiple parent [Container] nodes, so "
+"you should not modify them manually if your node is a direct child of a "
+"[Container]. Margins update automatically when you move or resize the node."
+msgstr ""
+
+#: doc/classes/Control.xml:759
+msgid ""
+"Distance between the node's right edge and its parent control, based on "
+"[member anchor_right].\n"
+"Margins are often controlled by one or multiple parent [Container] nodes, so "
+"you should not modify them manually if your node is a direct child of a "
+"[Container]. Margins update automatically when you move or resize the node."
+msgstr ""
+
+#: doc/classes/Control.xml:763
+msgid ""
+"Distance between the node's top edge and its parent control, based on "
+"[member anchor_top].\n"
+"Margins are often controlled by one or multiple parent [Container] nodes, so "
+"you should not modify them manually if your node is a direct child of a "
+"[Container]. Margins update automatically when you move or resize the node."
+msgstr ""
+
+#: doc/classes/Control.xml:767
+msgid ""
+"The default cursor shape for this control. Useful for Godot plugins and "
+"applications or games that use the system's mouse cursors.\n"
+"[b]Note:[/b] On Linux, shapes may vary depending on the cursor theme of the "
+"system."
+msgstr ""
+
+#: doc/classes/Control.xml:771
+msgid ""
+"Controls whether the control will be able to receive mouse button input "
+"events through [method _gui_input] and how these events should be handled. "
+"Also controls whether the control can receive the [signal mouse_entered], "
+"and [signal mouse_exited] signals. See the constants to learn what each does."
+msgstr ""
+
+#: doc/classes/Control.xml:774
+msgid ""
+"Enables whether rendering of [CanvasItem] based children should be clipped "
+"to this control's rectangle. If [code]true[/code], parts of a child which "
+"would be visibly outside of this control's rectangle will not be rendered."
+msgstr ""
+
+#: doc/classes/Control.xml:777
+msgid ""
+"The node's global position, relative to the world (usually to the top-left "
+"corner of the window)."
+msgstr ""
+
+#: doc/classes/Control.xml:780
+msgid ""
+"The minimum size of the node's bounding rectangle. If you set it to a value "
+"greater than (0, 0), the node's bounding rectangle will always have at least "
+"this size, even if its content is smaller. If it's set to (0, 0), the node "
+"sizes automatically to fit its content, be it a texture or child nodes."
+msgstr ""
+
+#: doc/classes/Control.xml:783
+msgid ""
+"By default, the node's pivot is its top-left corner. When you change its "
+"[member rect_scale], it will scale around this pivot. Set this property to "
+"[member rect_size] / 2 to center the pivot in the node's rectangle."
+msgstr ""
+
+#: doc/classes/Control.xml:786
+msgid ""
+"The node's position, relative to its parent. It corresponds to the "
+"rectangle's top-left corner. The property is not affected by [member "
+"rect_pivot_offset]."
+msgstr ""
+
+#: doc/classes/Control.xml:789
+msgid ""
+"The node's rotation around its pivot, in degrees. See [member "
+"rect_pivot_offset] to change the pivot's position."
+msgstr ""
+
+#: doc/classes/Control.xml:792
+msgid ""
+"The node's scale, relative to its [member rect_size]. Change this property "
+"to scale the node around its [member rect_pivot_offset]. The Control's "
+"[member hint_tooltip] will also scale according to this value.\n"
+"[b]Note:[/b] This property is mainly intended to be used for animation "
+"purposes. Text inside the Control will look pixelated or blurry when the "
+"Control is scaled. To support multiple resolutions in your project, use an "
+"appropriate viewport stretch mode as described in the [url=https://docs."
+"godotengine.org/en/3.4/tutorials/viewports/multiple_resolutions."
+"html]documentation[/url] instead of scaling Controls individually.\n"
+"[b]Note:[/b] If the Control node is a child of a [Container] node, the scale "
+"will be reset to [code]Vector2(1, 1)[/code] when the scene is instanced. To "
+"set the Control's scale when it's instanced, wait for one frame using "
+"[code]yield(get_tree(), \"idle_frame\")[/code] then set its [member "
+"rect_scale] property."
+msgstr ""
+
+#: doc/classes/Control.xml:797
+msgid ""
+"The size of the node's bounding rectangle, in pixels. [Container] nodes "
+"update this property automatically."
+msgstr ""
+
+#: doc/classes/Control.xml:800
+msgid ""
+"Tells the parent [Container] nodes how they should resize and place the node "
+"on the X axis. Use one of the [enum SizeFlags] constants to change the "
+"flags. See the constants to learn what each does."
+msgstr ""
+
+#: doc/classes/Control.xml:803
+msgid ""
+"If the node and at least one of its neighbours uses the [constant "
+"SIZE_EXPAND] size flag, the parent [Container] will let it take more or less "
+"space depending on this property. If this node has a stretch ratio of 2 and "
+"its neighbour a ratio of 1, this node will take two thirds of the available "
+"space."
+msgstr ""
+
+#: doc/classes/Control.xml:806
+msgid ""
+"Tells the parent [Container] nodes how they should resize and place the node "
+"on the Y axis. Use one of the [enum SizeFlags] constants to change the "
+"flags. See the constants to learn what each does."
+msgstr ""
+
+#: doc/classes/Control.xml:809
+msgid ""
+"Changing this property replaces the current [Theme] resource this node and "
+"all its [Control] children use."
+msgstr ""
+
+#: doc/classes/Control.xml:815
+msgid "Emitted when the node gains keyboard focus."
+msgstr ""
+
+#: doc/classes/Control.xml:820
+msgid "Emitted when the node loses keyboard focus."
+msgstr ""
+
+#: doc/classes/Control.xml:826
+msgid "Emitted when the node receives an [InputEvent]."
+msgstr ""
+
+#: doc/classes/Control.xml:831
+msgid "Emitted when the node's minimum size changes."
+msgstr ""
+
+#: doc/classes/Control.xml:836
+msgid "Emitted when a modal [Control] is closed. See [method show_modal]."
+msgstr ""
+
+#: doc/classes/Control.xml:841
+msgid ""
+"Emitted when the mouse enters the control's [code]Rect[/code] area, provided "
+"its [member mouse_filter] lets the event reach it.\n"
+"[b]Note:[/b] [signal mouse_entered] will not be emitted if the mouse enters "
+"a child [Control] node before entering the parent's [code]Rect[/code] area, "
+"at least until the mouse is moved to reach the parent's [code]Rect[/code] "
+"area."
+msgstr ""
+
+#: doc/classes/Control.xml:847
+msgid ""
+"Emitted when the mouse leaves the control's [code]Rect[/code] area, provided "
+"its [member mouse_filter] lets the event reach it.\n"
+"[b]Note:[/b] [signal mouse_exited] will be emitted if the mouse enters a "
+"child [Control] node, even if the mouse cursor is still inside the parent's "
+"[code]Rect[/code] area."
+msgstr ""
+
+#: doc/classes/Control.xml:853
+msgid "Emitted when the control changes size."
+msgstr ""
+
+#: doc/classes/Control.xml:858
+msgid ""
+"Emitted when one of the size flags changes. See [member "
+"size_flags_horizontal] and [member size_flags_vertical]."
+msgstr ""
+
+#: doc/classes/Control.xml:864
+msgid "The node cannot grab focus. Use with [member focus_mode]."
+msgstr ""
+
+#: doc/classes/Control.xml:867
+msgid ""
+"The node can only grab focus on mouse clicks. Use with [member focus_mode]."
+msgstr ""
+
+#: doc/classes/Control.xml:870
+msgid ""
+"The node can grab focus on mouse click or using the arrows and the Tab keys "
+"on the keyboard. Use with [member focus_mode]."
+msgstr ""
+
+#: doc/classes/Control.xml:873
+msgid ""
+"Sent when the node changes size. Use [member rect_size] to get the new size."
+msgstr ""
+
+#: doc/classes/Control.xml:876
+msgid "Sent when the mouse pointer enters the node."
+msgstr ""
+
+#: doc/classes/Control.xml:879
+msgid "Sent when the mouse pointer exits the node."
+msgstr ""
+
+#: doc/classes/Control.xml:882
+msgid "Sent when the node grabs focus."
+msgstr ""
+
+#: doc/classes/Control.xml:885
+msgid "Sent when the node loses focus."
+msgstr ""
+
+#: doc/classes/Control.xml:888
+msgid ""
+"Sent when the node's [member theme] changes, right before Godot redraws the "
+"control. Happens when you call one of the [code]add_*_override[/code] "
+"methods."
+msgstr ""
+
+#: doc/classes/Control.xml:891
+msgid "Sent when an open modal dialog closes. See [method show_modal]."
+msgstr ""
+
+#: doc/classes/Control.xml:894
+msgid ""
+"Sent when this node is inside a [ScrollContainer] which has begun being "
+"scrolled."
+msgstr ""
+
+#: doc/classes/Control.xml:897
+msgid ""
+"Sent when this node is inside a [ScrollContainer] which has stopped being "
+"scrolled."
+msgstr ""
+
+#: doc/classes/Control.xml:900
+msgid ""
+"Show the system's arrow mouse cursor when the user hovers the node. Use with "
+"[member mouse_default_cursor_shape]."
+msgstr ""
+
+#: doc/classes/Control.xml:903
+msgid ""
+"Show the system's I-beam mouse cursor when the user hovers the node. The I-"
+"beam pointer has a shape similar to \"I\". It tells the user they can "
+"highlight or insert text."
+msgstr ""
+
+#: doc/classes/Control.xml:906
+msgid ""
+"Show the system's pointing hand mouse cursor when the user hovers the node."
+msgstr ""
+
+#: doc/classes/Control.xml:909
+msgid "Show the system's cross mouse cursor when the user hovers the node."
+msgstr ""
+
+#: doc/classes/Control.xml:912
+msgid ""
+"Show the system's wait mouse cursor, often an hourglass, when the user "
+"hovers the node."
+msgstr ""
+
+#: doc/classes/Control.xml:915
+msgid ""
+"Show the system's busy mouse cursor when the user hovers the node. Often an "
+"hourglass."
+msgstr ""
+
+#: doc/classes/Control.xml:918
+msgid ""
+"Show the system's drag mouse cursor, often a closed fist or a cross symbol, "
+"when the user hovers the node. It tells the user they're currently dragging "
+"an item, like a node in the Scene dock."
+msgstr ""
+
+#: doc/classes/Control.xml:921
+msgid ""
+"Show the system's drop mouse cursor when the user hovers the node. It can be "
+"an open hand. It tells the user they can drop an item they're currently "
+"grabbing, like a node in the Scene dock."
+msgstr ""
+
+#: doc/classes/Control.xml:924
+msgid ""
+"Show the system's forbidden mouse cursor when the user hovers the node. "
+"Often a crossed circle."
+msgstr ""
+
+#: doc/classes/Control.xml:927
+msgid ""
+"Show the system's vertical resize mouse cursor when the user hovers the "
+"node. A double-headed vertical arrow. It tells the user they can resize the "
+"window or the panel vertically."
+msgstr ""
+
+#: doc/classes/Control.xml:930
+msgid ""
+"Show the system's horizontal resize mouse cursor when the user hovers the "
+"node. A double-headed horizontal arrow. It tells the user they can resize "
+"the window or the panel horizontally."
+msgstr ""
+
+#: doc/classes/Control.xml:933
+msgid ""
+"Show the system's window resize mouse cursor when the user hovers the node. "
+"The cursor is a double-headed arrow that goes from the bottom left to the "
+"top right. It tells the user they can resize the window or the panel both "
+"horizontally and vertically."
+msgstr ""
+
+#: doc/classes/Control.xml:936
+msgid ""
+"Show the system's window resize mouse cursor when the user hovers the node. "
+"The cursor is a double-headed arrow that goes from the top left to the "
+"bottom right, the opposite of [constant CURSOR_BDIAGSIZE]. It tells the user "
+"they can resize the window or the panel both horizontally and vertically."
+msgstr ""
+
+#: doc/classes/Control.xml:939
+msgid ""
+"Show the system's move mouse cursor when the user hovers the node. It shows "
+"2 double-headed arrows at a 90 degree angle. It tells the user they can move "
+"a UI element freely."
+msgstr ""
+
+#: doc/classes/Control.xml:942
+msgid ""
+"Show the system's vertical split mouse cursor when the user hovers the node. "
+"On Windows, it's the same as [constant CURSOR_VSIZE]."
+msgstr ""
+
+#: doc/classes/Control.xml:945
+msgid ""
+"Show the system's horizontal split mouse cursor when the user hovers the "
+"node. On Windows, it's the same as [constant CURSOR_HSIZE]."
+msgstr ""
+
+#: doc/classes/Control.xml:948
+msgid ""
+"Show the system's help mouse cursor when the user hovers the node, a "
+"question mark."
+msgstr ""
+
+#: doc/classes/Control.xml:951
+msgid ""
+"Snap all 4 anchors to the top-left of the parent control's bounds. Use with "
+"[method set_anchors_preset]."
+msgstr ""
+
+#: doc/classes/Control.xml:954
+msgid ""
+"Snap all 4 anchors to the top-right of the parent control's bounds. Use with "
+"[method set_anchors_preset]."
+msgstr ""
+
+#: doc/classes/Control.xml:957
+msgid ""
+"Snap all 4 anchors to the bottom-left of the parent control's bounds. Use "
+"with [method set_anchors_preset]."
+msgstr ""
+
+#: doc/classes/Control.xml:960
+msgid ""
+"Snap all 4 anchors to the bottom-right of the parent control's bounds. Use "
+"with [method set_anchors_preset]."
+msgstr ""
+
+#: doc/classes/Control.xml:963
+msgid ""
+"Snap all 4 anchors to the center of the left edge of the parent control's "
+"bounds. Use with [method set_anchors_preset]."
+msgstr ""
+
+#: doc/classes/Control.xml:966
+msgid ""
+"Snap all 4 anchors to the center of the top edge of the parent control's "
+"bounds. Use with [method set_anchors_preset]."
+msgstr ""
+
+#: doc/classes/Control.xml:969
+msgid ""
+"Snap all 4 anchors to the center of the right edge of the parent control's "
+"bounds. Use with [method set_anchors_preset]."
+msgstr ""
+
+#: doc/classes/Control.xml:972
+msgid ""
+"Snap all 4 anchors to the center of the bottom edge of the parent control's "
+"bounds. Use with [method set_anchors_preset]."
+msgstr ""
+
+#: doc/classes/Control.xml:975
+msgid ""
+"Snap all 4 anchors to the center of the parent control's bounds. Use with "
+"[method set_anchors_preset]."
+msgstr ""
+
+#: doc/classes/Control.xml:978
+msgid ""
+"Snap all 4 anchors to the left edge of the parent control. The left margin "
+"becomes relative to the left edge and the top margin relative to the top "
+"left corner of the node's parent. Use with [method set_anchors_preset]."
+msgstr ""
+
+#: doc/classes/Control.xml:981
+msgid ""
+"Snap all 4 anchors to the top edge of the parent control. The left margin "
+"becomes relative to the top left corner, the top margin relative to the top "
+"edge, and the right margin relative to the top right corner of the node's "
+"parent. Use with [method set_anchors_preset]."
+msgstr ""
+
+#: doc/classes/Control.xml:984
+msgid ""
+"Snap all 4 anchors to the right edge of the parent control. The right margin "
+"becomes relative to the right edge and the top margin relative to the top "
+"right corner of the node's parent. Use with [method set_anchors_preset]."
+msgstr ""
+
+#: doc/classes/Control.xml:987
+msgid ""
+"Snap all 4 anchors to the bottom edge of the parent control. The left margin "
+"becomes relative to the bottom left corner, the bottom margin relative to "
+"the bottom edge, and the right margin relative to the bottom right corner of "
+"the node's parent. Use with [method set_anchors_preset]."
+msgstr ""
+
+#: doc/classes/Control.xml:990
+msgid ""
+"Snap all 4 anchors to a vertical line that cuts the parent control in half. "
+"Use with [method set_anchors_preset]."
+msgstr ""
+
+#: doc/classes/Control.xml:993
+msgid ""
+"Snap all 4 anchors to a horizontal line that cuts the parent control in "
+"half. Use with [method set_anchors_preset]."
+msgstr ""
+
+#: doc/classes/Control.xml:996
+msgid ""
+"Snap all 4 anchors to the respective corners of the parent control. Set all "
+"4 margins to 0 after you applied this preset and the [Control] will fit its "
+"parent control. This is equivalent to the \"Full Rect\" layout option in the "
+"editor. Use with [method set_anchors_preset]."
+msgstr ""
+
+#: doc/classes/Control.xml:999
+msgid "The control will be resized to its minimum size."
+msgstr ""
+
+#: doc/classes/Control.xml:1002
+msgid "The control's width will not change."
+msgstr ""
+
+#: doc/classes/Control.xml:1005
+msgid "The control's height will not change."
+msgstr ""
+
+#: doc/classes/Control.xml:1008
+msgid "The control's size will not change."
+msgstr ""
+
+#: doc/classes/Control.xml:1011
+msgid ""
+"Tells the parent [Container] to expand the bounds of this node to fill all "
+"the available space without pushing any other node. Use with [member "
+"size_flags_horizontal] and [member size_flags_vertical]."
+msgstr ""
+
+#: doc/classes/Control.xml:1014
+msgid ""
+"Tells the parent [Container] to let this node take all the available space "
+"on the axis you flag. If multiple neighboring nodes are set to expand, "
+"they'll share the space based on their stretch ratio. See [member "
+"size_flags_stretch_ratio]. Use with [member size_flags_horizontal] and "
+"[member size_flags_vertical]."
+msgstr ""
+
+#: doc/classes/Control.xml:1017
+msgid ""
+"Sets the node's size flags to both fill and expand. See the 2 constants "
+"above for more information."
+msgstr ""
+
+#: doc/classes/Control.xml:1020
+msgid ""
+"Tells the parent [Container] to center the node in itself. It centers the "
+"control based on its bounding box, so it doesn't work with the fill or "
+"expand size flags. Use with [member size_flags_horizontal] and [member "
+"size_flags_vertical]."
+msgstr ""
+
+#: doc/classes/Control.xml:1023
+msgid ""
+"Tells the parent [Container] to align the node with its end, either the "
+"bottom or the right edge. It doesn't work with the fill or expand size "
+"flags. Use with [member size_flags_horizontal] and [member "
+"size_flags_vertical]."
+msgstr ""
+
+#: doc/classes/Control.xml:1026
+msgid ""
+"The control will receive mouse button input events through [method "
+"_gui_input] if clicked on. And the control will receive the [signal "
+"mouse_entered] and [signal mouse_exited] signals. These events are "
+"automatically marked as handled, and they will not propagate further to "
+"other controls. This also results in blocking signals in other controls."
+msgstr ""
+
+#: doc/classes/Control.xml:1029
+msgid ""
+"The control will receive mouse button input events through [method "
+"_gui_input] if clicked on. And the control will receive the [signal "
+"mouse_entered] and [signal mouse_exited] signals. If this control does not "
+"handle the event, the parent control (if any) will be considered, and so on "
+"until there is no more parent control to potentially handle it. This also "
+"allows signals to fire in other controls. Even if no control handled it at "
+"all, the event will still be handled automatically, so unhandled input will "
+"not be fired."
+msgstr ""
+
+#: doc/classes/Control.xml:1032
+msgid ""
+"The control will not receive mouse button input events through [method "
+"_gui_input]. The control will also not receive the [signal mouse_entered] "
+"nor [signal mouse_exited] signals. This will not block other controls from "
+"receiving these events or firing the signals. Ignored events will not be "
+"handled automatically."
+msgstr ""
+
+#: doc/classes/Control.xml:1035
+msgid ""
+"The control will grow to the left or top to make up if its minimum size is "
+"changed to be greater than its current size on the respective axis."
+msgstr ""
+
+#: doc/classes/Control.xml:1038
+msgid ""
+"The control will grow to the right or bottom to make up if its minimum size "
+"is changed to be greater than its current size on the respective axis."
+msgstr ""
+
+#: doc/classes/Control.xml:1041
+msgid ""
+"The control will grow in both directions equally to make up if its minimum "
+"size is changed to be greater than its current size."
+msgstr ""
+
+#: doc/classes/Control.xml:1044
+msgid ""
+"Snaps one of the 4 anchor's sides to the origin of the node's [code]Rect[/"
+"code], in the top left. Use it with one of the [code]anchor_*[/code] member "
+"variables, like [member anchor_left]. To change all 4 anchors at once, use "
+"[method set_anchors_preset]."
+msgstr ""
+
+#: doc/classes/Control.xml:1047
+msgid ""
+"Snaps one of the 4 anchor's sides to the end of the node's [code]Rect[/"
+"code], in the bottom right. Use it with one of the [code]anchor_*[/code] "
+"member variables, like [member anchor_left]. To change all 4 anchors at "
+"once, use [method set_anchors_preset]."
+msgstr ""
+
+#: doc/classes/ConvexPolygonShape.xml:4
+msgid "Convex polygon shape for 3D physics."
+msgstr ""
+
+#: doc/classes/ConvexPolygonShape.xml:7
+msgid ""
+"Convex polygon shape resource, which can be added to a [PhysicsBody] or area."
+msgstr ""
+
+#: doc/classes/ConvexPolygonShape.xml:16
+msgid "The list of 3D points forming the convex polygon shape."
+msgstr ""
+
+#: doc/classes/ConvexPolygonShape2D.xml:4
+msgid "Convex polygon shape for 2D physics."
+msgstr ""
+
+#: doc/classes/ConvexPolygonShape2D.xml:7
+msgid ""
+"Convex polygon shape for 2D physics. A convex polygon, whatever its shape, "
+"is internally decomposed into as many convex polygons as needed to ensure "
+"all collision checks against it are always done on convex polygons (which "
+"are faster to check).\n"
+"The main difference between a [ConvexPolygonShape2D] and a "
+"[ConcavePolygonShape2D] is that a concave polygon assumes it is concave and "
+"uses a more complex method of collision detection, and a convex one forces "
+"itself to be convex in order to speed up collision detection."
+msgstr ""
+
+#: doc/classes/ConvexPolygonShape2D.xml:17
+msgid ""
+"Based on the set of points provided, this creates and assigns the [member "
+"points] property using the convex hull algorithm. Removing all unneeded "
+"points. See [method Geometry.convex_hull_2d] for details."
+msgstr ""
+
+#: doc/classes/ConvexPolygonShape2D.xml:23
+msgid ""
+"The polygon's list of vertices. Can be in either clockwise or "
+"counterclockwise order."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:4
+msgid "CPU-based 3D particle emitter."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:7
+msgid ""
+"CPU-based 3D particle node used to create a variety of particle systems and "
+"effects.\n"
+"See also [Particles], which provides the same functionality with hardware "
+"acceleration, but may not run on older devices.\n"
+"[b]Note:[/b] Unlike [Particles], the visibility rect is generated on-the-fly "
+"and doesn't need to be configured by the user."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:18
+msgid ""
+"Sets this node's properties to match a given [Particles] node with an "
+"assigned [ParticlesMaterial]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:25 doc/classes/CPUParticles2D.xml:26
+msgid "Returns the base value of the parameter specified by [enum Parameter]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:32 doc/classes/CPUParticles2D.xml:33
+msgid "Returns the [Curve] of the parameter specified by [enum Parameter]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:39 doc/classes/CPUParticles2D.xml:40
+msgid ""
+"Returns the randomness factor of the parameter specified by [enum Parameter]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:46 doc/classes/CPUParticles2D.xml:47
+msgid ""
+"Returns the enabled state of the given flag (see [enum Flags] for options)."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:52 doc/classes/CPUParticles2D.xml:53
+msgid "Restarts the particle emitter."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:60 doc/classes/CPUParticles2D.xml:61
+msgid "Sets the base value of the parameter specified by [enum Parameter]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:68 doc/classes/CPUParticles2D.xml:69
+msgid "Sets the [Curve] of the parameter specified by [enum Parameter]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:76 doc/classes/CPUParticles2D.xml:77
+msgid ""
+"Sets the randomness factor of the parameter specified by [enum Parameter]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:84 doc/classes/CPUParticles2D.xml:85
+msgid "Enables or disables the given flag (see [enum Flags] for options)."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:90 doc/classes/CPUParticles2D.xml:91
+#: doc/classes/Particles.xml:47 doc/classes/Particles2D.xml:33
+msgid ""
+"The number of particles emitted in one emission cycle (corresponding to the "
+"[member lifetime]).\n"
+"[b]Note:[/b] Changing [member amount] will reset the particle emission, "
+"therefore removing all particles that were already emitted before changing "
+"[member amount]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:94 doc/classes/CPUParticles2D.xml:95
+msgid "Initial rotation applied to each particle, in degrees."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:97 doc/classes/CPUParticles2D.xml:98
+msgid "Each particle's rotation will be animated along this [Curve]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:100 doc/classes/CPUParticles2D.xml:101
+#: doc/classes/ParticlesMaterial.xml:84
+msgid "Rotation randomness ratio."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:103 doc/classes/CPUParticles2D.xml:104
+msgid ""
+"Initial angular velocity applied to each particle. Sets the speed of "
+"rotation of the particle."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:106 doc/classes/CPUParticles2D.xml:107
+msgid "Each particle's angular velocity will vary along this [Curve]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:109 doc/classes/CPUParticles2D.xml:110
+#: doc/classes/ParticlesMaterial.xml:94
+msgid "Angular velocity randomness ratio."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:112 doc/classes/CPUParticles2D.xml:113
+#: doc/classes/ParticlesMaterial.xml:97
+msgid "Particle animation offset."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:115 doc/classes/CPUParticles2D.xml:116
+msgid "Each particle's animation offset will vary along this [Curve]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:118 doc/classes/CPUParticles2D.xml:119
+#: doc/classes/ParticlesMaterial.xml:103
+msgid "Animation offset randomness ratio."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:121 doc/classes/CPUParticles2D.xml:122
+#: doc/classes/ParticlesMaterial.xml:106
+msgid "Particle animation speed."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:124 doc/classes/CPUParticles2D.xml:125
+msgid "Each particle's animation speed will vary along this [Curve]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:127 doc/classes/CPUParticles2D.xml:128
+#: doc/classes/ParticlesMaterial.xml:112
+msgid "Animation speed randomness ratio."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:130
+msgid ""
+"Each particle's initial color. To have particle display color in a "
+"[SpatialMaterial] make sure to set [member SpatialMaterial."
+"vertex_color_use_as_albedo] to [code]true[/code]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:133 doc/classes/ParticlesMaterial.xml:118
+msgid ""
+"Each particle's color will vary along this [GradientTexture] over its "
+"lifetime (multiplied with [member color])."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:136 doc/classes/CPUParticles2D.xml:137
+#: doc/classes/ParticlesMaterial.xml:121
+msgid "The rate at which particles lose velocity."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:139 doc/classes/CPUParticles2D.xml:140
+msgid "Damping will vary along this [Curve]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:142 doc/classes/CPUParticles2D.xml:143
+#: doc/classes/ParticlesMaterial.xml:127
+msgid "Damping randomness ratio."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:145 doc/classes/CPUParticles2D.xml:146
+#: doc/classes/ParticlesMaterial.xml:130
+msgid "Unit vector specifying the particles' emission direction."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:148 doc/classes/CPUParticles2D.xml:149
+#: doc/classes/Particles.xml:51 doc/classes/Particles2D.xml:37
+msgid "Particle draw order. Uses [enum DrawOrder] values."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:151
+msgid ""
+"The rectangle's extents if [member emission_shape] is set to [constant "
+"EMISSION_SHAPE_BOX]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:154 doc/classes/CPUParticles2D.xml:152
+msgid ""
+"Sets the [Color]s to modulate particles by when using [constant "
+"EMISSION_SHAPE_POINTS] or [constant EMISSION_SHAPE_DIRECTED_POINTS]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:157 doc/classes/CPUParticles2D.xml:155
+msgid ""
+"Sets the direction the particles will be emitted in when using [constant "
+"EMISSION_SHAPE_DIRECTED_POINTS]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:160 doc/classes/CPUParticles2D.xml:158
+msgid ""
+"Sets the initial positions to spawn particles when using [constant "
+"EMISSION_SHAPE_POINTS] or [constant EMISSION_SHAPE_DIRECTED_POINTS]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:163
+msgid ""
+"The axis for the ring shaped emitter when using [constant "
+"EMISSION_SHAPE_RING]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:166
+msgid ""
+"The height for the ring shaped emitter when using [constant "
+"EMISSION_SHAPE_RING]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:169
+msgid ""
+"The inner radius for the ring shaped emitter when using [constant "
+"EMISSION_SHAPE_RING]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:172
+msgid ""
+"The radius for the ring shaped emitter when using [constant "
+"EMISSION_SHAPE_RING]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:175 doc/classes/CPUParticles2D.xml:164
+msgid ""
+"Particles will be emitted inside this region. See [enum EmissionShape] for "
+"possible values."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:178
+msgid ""
+"The sphere's radius if [enum EmissionShape] is set to [constant "
+"EMISSION_SHAPE_SPHERE]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:181 doc/classes/CPUParticles2D.xml:170
+#: doc/classes/Particles.xml:69 doc/classes/Particles2D.xml:40
+msgid "If [code]true[/code], particles are being emitted."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:184 doc/classes/CPUParticles2D.xml:173
+#: doc/classes/Particles2D.xml:43
+msgid ""
+"How rapidly particles in an emission cycle are emitted. If greater than "
+"[code]0[/code], there will be a gap in emissions before the next cycle "
+"begins."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:187
+msgid ""
+"The particle system's frame rate is fixed to a value. For instance, changing "
+"the value to 2 will make the particles render at 2 frames per second. Note "
+"this does not slow down the particle system itself."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:190 doc/classes/CPUParticles2D.xml:179
+#: doc/classes/ParticlesMaterial.xml:166
+msgid "Align Y axis of particle with the direction of its velocity."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:193 doc/classes/ParticlesMaterial.xml:169
+msgid "If [code]true[/code], particles will not move on the z axis."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:196 doc/classes/ParticlesMaterial.xml:172
+msgid "If [code]true[/code], particles rotate around Y axis by [member angle]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:199
+msgid ""
+"Amount of [member spread] in Y/Z plane. A value of [code]1[/code] restricts "
+"particles to X/Z plane."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:202 doc/classes/CPUParticles2D.xml:182
+#: doc/classes/Particles.xml:78 doc/classes/Particles2D.xml:49
+msgid ""
+"If [code]true[/code], results in fractional delta calculation which has a "
+"smoother particles display effect."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:205 doc/classes/CPUParticles2D.xml:185
+#: doc/classes/ParticlesMaterial.xml:178
+msgid "Gravity applied to every particle."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:208 doc/classes/CPUParticles2D.xml:188
+#: doc/classes/ParticlesMaterial.xml:181
+msgid "Initial hue variation applied to each particle."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:211 doc/classes/CPUParticles2D.xml:191
+msgid "Each particle's hue will vary along this [Curve]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:214 doc/classes/CPUParticles2D.xml:194
+#: doc/classes/ParticlesMaterial.xml:187
+msgid "Hue variation randomness ratio."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:217 doc/classes/CPUParticles2D.xml:197
+#: doc/classes/ParticlesMaterial.xml:190
+msgid ""
+"Initial velocity magnitude for each particle. Direction comes from [member "
+"spread] and the node's orientation."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:220 doc/classes/CPUParticles2D.xml:200
+#: doc/classes/ParticlesMaterial.xml:193
+msgid "Initial velocity randomness ratio."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:223 doc/classes/CPUParticles2D.xml:203
+#: doc/classes/Particles.xml:81 doc/classes/Particles2D.xml:52
+msgid "The amount of time each particle will exist (in seconds)."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:226 doc/classes/CPUParticles2D.xml:206
+#: doc/classes/ParticlesMaterial.xml:196
+msgid "Particle lifetime randomness ratio."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:229 doc/classes/CPUParticles2D.xml:209
+#: doc/classes/ParticlesMaterial.xml:199
+msgid ""
+"Linear acceleration applied to each particle in the direction of motion."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:232 doc/classes/CPUParticles2D.xml:212
+msgid "Each particle's linear acceleration will vary along this [Curve]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:235 doc/classes/CPUParticles2D.xml:215
+#: doc/classes/ParticlesMaterial.xml:205
+msgid "Linear acceleration randomness ratio."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:238 doc/classes/CPUParticles2D.xml:218
+#: doc/classes/Particles.xml:84 doc/classes/Particles2D.xml:55
+msgid ""
+"If [code]true[/code], particles use the parent node's coordinate space. If "
+"[code]false[/code], they use global coordinates."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:241
+msgid ""
+"The [Mesh] used for each particle. If [code]null[/code], particles will be "
+"spheres."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:244 doc/classes/CPUParticles2D.xml:225
+#: doc/classes/Particles2D.xml:62
+msgid ""
+"If [code]true[/code], only one emission cycle occurs. If set [code]true[/"
+"code] during a cycle, emission will stop at the cycle's end."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:247
+msgid ""
+"Orbital velocity applied to each particle. Makes the particles circle around "
+"origin in the local XY plane. Specified in number of full rotations around "
+"origin per second.\n"
+"This property is only available when [member flag_disable_z] is [code]true[/"
+"code]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:251 doc/classes/CPUParticles2D.xml:231
+msgid "Each particle's orbital velocity will vary along this [Curve]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:254 doc/classes/CPUParticles2D.xml:234
+#: doc/classes/ParticlesMaterial.xml:215
+msgid "Orbital velocity randomness ratio."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:257 doc/classes/CPUParticles2D.xml:237
+#: doc/classes/Particles2D.xml:65
+msgid "Particle system starts as if it had already run for this many seconds."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:260 doc/classes/CPUParticles2D.xml:240
+#: doc/classes/ParticlesMaterial.xml:218
+msgid ""
+"Radial acceleration applied to each particle. Makes particle accelerate away "
+"from origin."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:263 doc/classes/CPUParticles2D.xml:243
+msgid "Each particle's radial acceleration will vary along this [Curve]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:266 doc/classes/CPUParticles2D.xml:246
+#: doc/classes/ParticlesMaterial.xml:224
+msgid "Radial acceleration randomness ratio."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:269 doc/classes/CPUParticles2D.xml:249
+#: doc/classes/Particles2D.xml:71
+msgid "Emission lifetime randomness ratio."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:272 doc/classes/CPUParticles2D.xml:252
+#: doc/classes/ParticlesMaterial.xml:227
+msgid "Initial scale applied to each particle."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:275 doc/classes/CPUParticles2D.xml:255
+msgid "Each particle's scale will vary along this [Curve]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:278 doc/classes/CPUParticles2D.xml:258
+#: doc/classes/ParticlesMaterial.xml:233
+msgid "Scale randomness ratio."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:281 doc/classes/CPUParticles2D.xml:261
+#: doc/classes/Particles2D.xml:74
+msgid ""
+"Particle system's running speed scaling ratio. A value of [code]0[/code] can "
+"be used to pause the particles."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:284
+msgid ""
+"Each particle's initial direction range from [code]+spread[/code] to [code]-"
+"spread[/code] degrees. Applied to X/Z plane and Y/Z planes."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:287 doc/classes/CPUParticles2D.xml:267
+#: doc/classes/ParticlesMaterial.xml:239
+msgid ""
+"Tangential acceleration applied to each particle. Tangential acceleration is "
+"perpendicular to the particle's velocity giving the particles a swirling "
+"motion."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:290 doc/classes/CPUParticles2D.xml:270
+msgid "Each particle's tangential acceleration will vary along this [Curve]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:293 doc/classes/CPUParticles2D.xml:273
+#: doc/classes/ParticlesMaterial.xml:245
+msgid "Tangential acceleration randomness ratio."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:298 doc/classes/CPUParticles2D.xml:281
+#: doc/classes/Particles.xml:109 doc/classes/Particles2D.xml:86
+msgid "Particles are drawn in the order emitted."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:301 doc/classes/CPUParticles2D.xml:284
+#: doc/classes/Particles.xml:112 doc/classes/Particles2D.xml:89
+msgid "Particles are drawn in order of remaining lifetime."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:304 doc/classes/Particles.xml:115
+msgid "Particles are drawn in order of depth."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:307 doc/classes/CPUParticles2D.xml:287
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_curve] to set initial velocity properties."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:310 doc/classes/CPUParticles2D.xml:290
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_curve] to set angular velocity properties."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:313 doc/classes/CPUParticles2D.xml:293
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_curve] to set orbital velocity properties."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:316 doc/classes/CPUParticles2D.xml:296
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_curve] to set linear acceleration properties."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:319 doc/classes/CPUParticles2D.xml:299
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_curve] to set radial acceleration properties."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:322 doc/classes/CPUParticles2D.xml:302
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_curve] to set tangential acceleration properties."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:325 doc/classes/CPUParticles2D.xml:305
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_curve] to set damping properties."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:328 doc/classes/CPUParticles2D.xml:308
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_curve] to set angle properties."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:331 doc/classes/CPUParticles2D.xml:311
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_curve] to set scale properties."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:334 doc/classes/CPUParticles2D.xml:314
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_curve] to set hue variation properties."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:337 doc/classes/CPUParticles2D.xml:317
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_curve] to set animation speed properties."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:340 doc/classes/CPUParticles2D.xml:320
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_curve] to set animation offset properties."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:343 doc/classes/CPUParticles2D.xml:323
+#: doc/classes/ParticlesMaterial.xml:295
+msgid "Represents the size of the [enum Parameter] enum."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:346 doc/classes/CPUParticles2D.xml:326
+msgid "Use with [method set_particle_flag] to set [member flag_align_y]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:349
+msgid "Use with [method set_particle_flag] to set [member flag_rotate_y]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:352
+msgid "Use with [method set_particle_flag] to set [member flag_disable_z]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:355 doc/classes/CPUParticles2D.xml:335
+#: doc/classes/GeometryInstance.xml:109 doc/classes/ParticlesMaterial.xml:307
+#: doc/classes/SpatialMaterial.xml:564
+msgid "Represents the size of the [enum Flags] enum."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:358 doc/classes/CPUParticles2D.xml:338
+#: doc/classes/ParticlesMaterial.xml:310
+msgid "All particles will be emitted from a single point."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:361 doc/classes/ParticlesMaterial.xml:313
+msgid "Particles will be emitted in the volume of a sphere."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:364 doc/classes/ParticlesMaterial.xml:316
+msgid "Particles will be emitted in the volume of a box."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:367 doc/classes/CPUParticles2D.xml:347
+msgid ""
+"Particles will be emitted at a position chosen randomly among [member "
+"emission_points]. Particle color will be modulated by [member "
+"emission_colors]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:370 doc/classes/CPUParticles2D.xml:350
+msgid ""
+"Particles will be emitted at a position chosen randomly among [member "
+"emission_points]. Particle velocity and rotation will be set based on "
+"[member emission_normals]. Particle color will be modulated by [member "
+"emission_colors]."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:373 doc/classes/ParticlesMaterial.xml:325
+msgid "Particles will be emitted in a ring or cylinder."
+msgstr ""
+
+#: doc/classes/CPUParticles.xml:376 doc/classes/CPUParticles2D.xml:353
+#: doc/classes/ParticlesMaterial.xml:328
+msgid "Represents the size of the [enum EmissionShape] enum."
+msgstr ""
+
+#: doc/classes/CPUParticles2D.xml:4
+msgid "CPU-based 2D particle emitter."
+msgstr ""
+
+#: doc/classes/CPUParticles2D.xml:7
+msgid ""
+"CPU-based 2D particle node used to create a variety of particle systems and "
+"effects.\n"
+"See also [Particles2D], which provides the same functionality with hardware "
+"acceleration, but may not run on older devices.\n"
+"[b]Note:[/b] Unlike [Particles2D], the visibility rect is generated on-the-"
+"fly and doesn't need to be configured by the user."
+msgstr ""
+
+#: doc/classes/CPUParticles2D.xml:12 doc/classes/Particles2D.xml:14
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/2d/particle_systems_2d.html"
+msgstr ""
+
+#: doc/classes/CPUParticles2D.xml:19
+msgid ""
+"Sets this node's properties to match a given [Particles2D] node with an "
+"assigned [ParticlesMaterial]."
+msgstr ""
+
+#: doc/classes/CPUParticles2D.xml:131
+msgid ""
+"Each particle's initial color. If [member texture] is defined, it will be "
+"multiplied by this color."
+msgstr ""
+
+#: doc/classes/CPUParticles2D.xml:134
+msgid ""
+"Each particle's color will vary along this [Gradient] (multiplied with "
+"[member color])."
+msgstr ""
+
+#: doc/classes/CPUParticles2D.xml:161
+msgid ""
+"The rectangle's extents if [member emission_shape] is set to [constant "
+"EMISSION_SHAPE_RECTANGLE]."
+msgstr ""
+
+#: doc/classes/CPUParticles2D.xml:167
+msgid ""
+"The sphere's radius if [member emission_shape] is set to [constant "
+"EMISSION_SHAPE_SPHERE]."
+msgstr ""
+
+#: doc/classes/CPUParticles2D.xml:176 doc/classes/Particles.xml:75
+#: doc/classes/Particles2D.xml:46
+msgid ""
+"The particle system's frame rate is fixed to a value. For instance, changing "
+"the value to 2 will make the particles render at 2 frames per second. Note "
+"this does not slow down the simulation of the particle system itself."
+msgstr ""
+
+#: doc/classes/CPUParticles2D.xml:221 doc/classes/Particles2D.xml:58
+msgid ""
+"Normal map to be used for the [member texture] property.\n"
+"[b]Note:[/b] Godot expects the normal map to use X+, Y-, and Z+ coordinates. "
+"See [url=http://wiki.polycount.com/wiki/"
+"Normal_Map_Technical_Details#Common_Swizzle_Coordinates]this page[/url] for "
+"a comparison of normal map coordinates expected by popular engines."
+msgstr ""
+
+#: doc/classes/CPUParticles2D.xml:228
+msgid ""
+"Orbital velocity applied to each particle. Makes the particles circle around "
+"origin. Specified in number of full rotations around origin per second."
+msgstr ""
+
+#: doc/classes/CPUParticles2D.xml:264 doc/classes/ParticlesMaterial.xml:236
+msgid ""
+"Each particle's initial direction range from [code]+spread[/code] to [code]-"
+"spread[/code] degrees."
+msgstr ""
+
+#: doc/classes/CPUParticles2D.xml:276 doc/classes/Particles2D.xml:77
+msgid "Particle texture. If [code]null[/code], particles will be squares."
+msgstr ""
+
+#: doc/classes/CPUParticles2D.xml:329 doc/classes/CPUParticles2D.xml:332
+msgid "Present for consistency with 3D particle nodes, not used in 2D."
+msgstr ""
+
+#: doc/classes/CPUParticles2D.xml:341
+msgid ""
+"Particles will be emitted on the surface of a sphere flattened to two "
+"dimensions."
+msgstr ""
+
+#: doc/classes/CPUParticles2D.xml:344
+msgid "Particles will be emitted in the area of a rectangle."
+msgstr ""
+
+#: doc/classes/Crypto.xml:4
+msgid "Access to advanced cryptographic functionalities."
+msgstr ""
+
+#: doc/classes/Crypto.xml:7
+msgid ""
+"The Crypto class allows you to access some more advanced cryptographic "
+"functionalities in Godot.\n"
+"For now, this includes generating cryptographically secure random bytes, RSA "
+"keys and self-signed X509 certificates generation, asymmetric key encryption/"
+"decryption, and signing/verification.\n"
+"[codeblock]\n"
+"extends Node\n"
+"\n"
+"var crypto = Crypto.new()\n"
+"var key = CryptoKey.new()\n"
+"var cert = X509Certificate.new()\n"
+"\n"
+"func _ready():\n"
+" # Generate new RSA key.\n"
+" key = crypto.generate_rsa(4096)\n"
+" # Generate new self-signed certificate with the given key.\n"
+" cert = crypto.generate_self_signed_certificate(key, \"CN=mydomain.com,"
+"O=My Game Company,C=IT\")\n"
+" # Save key and certificate in the user folder.\n"
+" key.save(\"user://generated.key\")\n"
+" cert.save(\"user://generated.crt\")\n"
+" # Encryption\n"
+" var data = \"Some data\"\n"
+" var encrypted = crypto.encrypt(key, data.to_utf8())\n"
+" # Decryption\n"
+" var decrypted = crypto.decrypt(key, encrypted)\n"
+" # Signing\n"
+" var signature = crypto.sign(HashingContext.HASH_SHA256, data."
+"sha256_buffer(), key)\n"
+" # Verifying\n"
+" var verified = crypto.verify(HashingContext.HASH_SHA256, data."
+"sha256_buffer(), signature, key)\n"
+" # Checks\n"
+" assert(verified)\n"
+" assert(data.to_utf8() == decrypted)\n"
+"[/codeblock]\n"
+"[b]Note:[/b] Not available in HTML5 exports."
+msgstr ""
+
+#: doc/classes/Crypto.xml:47
+msgid ""
+"Compares two [PoolByteArray]s for equality without leaking timing "
+"information in order to prevent timing attacks.\n"
+"See [url=https://paragonie.com/blog/2015/11/preventing-timing-attacks-on-"
+"string-comparison-with-double-hmac-strategy]this blog post[/url] for more "
+"information."
+msgstr ""
+
+#: doc/classes/Crypto.xml:56
+msgid ""
+"Decrypt the given [code]ciphertext[/code] with the provided private "
+"[code]key[/code].\n"
+"[b]Note:[/b] The maximum size of accepted ciphertext is limited by the key "
+"size."
+msgstr ""
+
+#: doc/classes/Crypto.xml:65
+msgid ""
+"Encrypt the given [code]plaintext[/code] with the provided public [code]key[/"
+"code].\n"
+"[b]Note:[/b] The maximum size of accepted plaintext is limited by the key "
+"size."
+msgstr ""
+
+#: doc/classes/Crypto.xml:73
+msgid ""
+"Generates a [PoolByteArray] of cryptographically secure random bytes with "
+"given [code]size[/code]."
+msgstr ""
+
+#: doc/classes/Crypto.xml:80
+msgid ""
+"Generates an RSA [CryptoKey] that can be used for creating self-signed "
+"certificates and passed to [method StreamPeerSSL.accept_stream]."
+msgstr ""
+
+#: doc/classes/Crypto.xml:90
+msgid ""
+"Generates a self-signed [X509Certificate] from the given [CryptoKey] and "
+"[code]issuer_name[/code]. The certificate validity will be defined by "
+"[code]not_before[/code] and [code]not_after[/code] (first valid date and "
+"last valid date). The [code]issuer_name[/code] must contain at least \"CN="
+"\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
+"company name), \"C=\" (country, i.e. 2 lettered ISO-3166 code of the country "
+"the organization is based in).\n"
+"A small example to generate an RSA key and a X509 self-signed certificate.\n"
+"[codeblock]\n"
+"var crypto = Crypto.new()\n"
+"# Generate 4096 bits RSA key.\n"
+"var key = crypto.generate_rsa(4096)\n"
+"# Generate self-signed certificate using the given key.\n"
+"var cert = crypto.generate_self_signed_certificate(key, \"CN=example.com,O=A "
+"Game Company,C=IT\")\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Crypto.xml:107
+msgid ""
+"Generates an [url=https://en.wikipedia.org/wiki/HMAC]HMAC[/url] digest of "
+"[code]msg[/code] using [code]key[/code]. The [code]hash_type[/code] "
+"parameter is the hashing algorithm that is used for the inner and outer "
+"hashes.\n"
+"Currently, only [constant HashingContext.HASH_SHA256] and [constant "
+"HashingContext.HASH_SHA1] are supported."
+msgstr ""
+
+#: doc/classes/Crypto.xml:117
+msgid ""
+"Sign a given [code]hash[/code] of type [code]hash_type[/code] with the "
+"provided private [code]key[/code]."
+msgstr ""
+
+#: doc/classes/Crypto.xml:127
+msgid ""
+"Verify that a given [code]signature[/code] for [code]hash[/code] of type "
+"[code]hash_type[/code] against the provided public [code]key[/code]."
+msgstr ""
+
+#: doc/classes/CryptoKey.xml:4
+msgid "A cryptographic key (RSA)."
+msgstr ""
+
+#: doc/classes/CryptoKey.xml:7
+msgid ""
+"The CryptoKey class represents a cryptographic key. Keys can be loaded and "
+"saved like any other [Resource].\n"
+"They can be used to generate a self-signed [X509Certificate] via [method "
+"Crypto.generate_self_signed_certificate] and as private key in [method "
+"StreamPeerSSL.accept_stream] along with the appropriate certificate.\n"
+"[b]Note:[/b] Not available in HTML5 exports."
+msgstr ""
+
+#: doc/classes/CryptoKey.xml:17
+msgid ""
+"Return [code]true[/code] if this CryptoKey only has the public part, and not "
+"the private one."
+msgstr ""
+
+#: doc/classes/CryptoKey.xml:25
+msgid ""
+"Loads a key from [code]path[/code]. If [code]public_only[/code] is "
+"[code]true[/code], only the public key will be loaded.\n"
+"[b]Note:[/b] [code]path[/code] should be a \"*.pub\" file if "
+"[code]public_only[/code] is [code]true[/code], a \"*.key\" file otherwise."
+msgstr ""
+
+#: doc/classes/CryptoKey.xml:34
+msgid ""
+"Loads a key from the given [code]string[/code]. If [code]public_only[/code] "
+"is [code]true[/code], only the public key will be loaded."
+msgstr ""
+
+#: doc/classes/CryptoKey.xml:42
+msgid ""
+"Saves a key to the given [code]path[/code]. If [code]public_only[/code] is "
+"[code]true[/code], only the public key will be saved.\n"
+"[b]Note:[/b] [code]path[/code] should be a \"*.pub\" file if "
+"[code]public_only[/code] is [code]true[/code], a \"*.key\" file otherwise."
+msgstr ""
+
+#: doc/classes/CryptoKey.xml:50
+msgid ""
+"Returns a string containing the key in PEM format. If [code]public_only[/"
+"code] is [code]true[/code], only the public key will be included."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGBox.xml:4
+msgid "A CSG Box shape."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGBox.xml:7
+msgid "This node allows you to create a box for use with the CSG system."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGBox.xml:15
+msgid "Depth of the box measured from the center of the box."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGBox.xml:18
+msgid "Height of the box measured from the center of the box."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGBox.xml:21
+msgid "The material used to render the box."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGBox.xml:24
+msgid "Width of the box measured from the center of the box."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGCombiner.xml:4
+msgid "A CSG node that allows you to combine other CSG modifiers."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGCombiner.xml:7
+msgid ""
+"For complex arrangements of shapes, it is sometimes needed to add structure "
+"to your CSG nodes. The CSGCombiner node allows you to create this structure. "
+"The node encapsulates the result of the CSG operations of its children. In "
+"this way, it is possible to do operations on one set of shapes that are "
+"children of one CSGCombiner node, and a set of separate operations on a "
+"second set of shapes that are children of a second CSGCombiner node, and "
+"then do an operation that takes the two end results as its input to create "
+"the final shape."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGCylinder.xml:4
+msgid "A CSG Cylinder shape."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGCylinder.xml:7
+msgid ""
+"This node allows you to create a cylinder (or cone) for use with the CSG "
+"system."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGCylinder.xml:15
+msgid ""
+"If [code]true[/code] a cone is created, the [member radius] will only apply "
+"to one side."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGCylinder.xml:18
+msgid "The height of the cylinder."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGCylinder.xml:21
+msgid "The material used to render the cylinder."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGCylinder.xml:24
+msgid "The radius of the cylinder."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGCylinder.xml:27
+msgid ""
+"The number of sides of the cylinder, the higher this number the more detail "
+"there will be in the cylinder."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGCylinder.xml:30
+msgid ""
+"If [code]true[/code] the normals of the cylinder are set to give a smooth "
+"effect making the cylinder seem rounded. If [code]false[/code] the cylinder "
+"will have a flat shaded look."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGMesh.xml:4
+msgid "A CSG Mesh shape that uses a mesh resource."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGMesh.xml:7
+msgid ""
+"This CSG node allows you to use any mesh resource as a CSG shape, provided "
+"it is closed, does not self-intersect, does not contain internal faces and "
+"has no edges that connect to more then two faces."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGMesh.xml:15
+msgid "The [Material] used in drawing the CSG shape."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGMesh.xml:18
+msgid ""
+"The [Mesh] resource to use as a CSG shape.\n"
+"[b]Note:[/b] When using an [ArrayMesh], avoid meshes with vertex normals "
+"unless a flat shader is required. By default, CSGMesh will ignore the mesh's "
+"vertex normals and use a smooth shader calculated using the faces' normals. "
+"If a flat shader is required, ensure that all faces' vertex normals are "
+"parallel."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:4
+msgid "Extrudes a 2D polygon shape to create a 3D mesh."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:7
+msgid ""
+"An array of 2D points is extruded to quickly and easily create a variety of "
+"3D meshes."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:15
+msgid ""
+"When [member mode] is [constant MODE_DEPTH], the depth of the extrusion."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:18
+msgid ""
+"Material to use for the resulting mesh. The UV maps the top half of the "
+"material to the extruded shape (U along the the length of the extrusions and "
+"V around the outline of the [member polygon]), the bottom-left quarter to "
+"the front end face, and the bottom-right quarter to the back end face."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:21
+msgid "The [member mode] used to extrude the [member polygon]."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:24
+msgid ""
+"When [member mode] is [constant MODE_PATH], by default, the top half of the "
+"[member material] is stretched along the entire length of the extruded "
+"shape. If [code]false[/code] the top half of the material is repeated every "
+"step of the extrusion."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:27
+msgid ""
+"When [member mode] is [constant MODE_PATH], the path interval or ratio of "
+"path points to extrusions."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:30
+msgid ""
+"When [member mode] is [constant MODE_PATH], this will determine if the "
+"interval should be by distance ([constant PATH_INTERVAL_DISTANCE]) or "
+"subdivision fractions ([constant PATH_INTERVAL_SUBDIVIDE])."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:33
+msgid ""
+"When [member mode] is [constant MODE_PATH], if [code]true[/code] the ends of "
+"the path are joined, by adding an extrusion between the last and first "
+"points of the path."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:36
+msgid ""
+"When [member mode] is [constant MODE_PATH], if [code]true[/code] the "
+"[Transform] of the [CSGPolygon] is used as the starting point for the "
+"extrusions, not the [Transform] of the [member path_node]."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:39
+msgid ""
+"When [member mode] is [constant MODE_PATH], the location of the [Path] "
+"object used to extrude the [member polygon]."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:42
+msgid ""
+"When [member mode] is [constant MODE_PATH], the [enum PathRotation] method "
+"used to rotate the [member polygon] as it is extruded."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:45
+msgid ""
+"When [member mode] is [constant MODE_PATH], extrusions that are less than "
+"this angle, will be merged together to reduce polygon count."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:48
+msgid ""
+"When [member mode] is [constant MODE_PATH], this is the distance along the "
+"path, in meters, the texture coordinates will tile. When set to 0, texture "
+"coordinates will match geometry exactly with no tiling."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:51
+msgid "The point array that defines the 2D polygon that is extruded."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:54
+msgid "If [code]true[/code], applies smooth shading to the extrusions."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:57
+msgid ""
+"When [member mode] is [constant MODE_SPIN], the total number of degrees the "
+"[member polygon] is rotated when extruding."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:60
+msgid ""
+"When [member mode] is [constant MODE_SPIN], the number of extrusions made."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:65
+msgid "The [member polygon] shape is extruded along the negative Z axis."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:68
+msgid ""
+"The [member polygon] shape is extruded by rotating it around the Y axis."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:71
+msgid ""
+"The [member polygon] shape is extruded along the [Path] specified in [member "
+"path_node]."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:74
+msgid ""
+"The [member polygon] shape is not rotated.\n"
+"[b]Note:[/b] Requires the path's Z coordinates to continually decrease to "
+"ensure viable shapes."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:78
+msgid ""
+"The [member polygon] shape is rotated along the path, but it is not rotated "
+"around the path axis.\n"
+"[b]Note:[/b] Requires the path's Z coordinates to continually decrease to "
+"ensure viable shapes."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:82
+msgid ""
+"The [member polygon] shape follows the path and its rotations around the "
+"path axis."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:85
+msgid ""
+"When [member mode] is set to [constant MODE_PATH], [member path_interval] "
+"will determine the distance, in meters, each interval of the path will "
+"extrude."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPolygon.xml:88
+msgid ""
+"When [member mode] is set to [constant MODE_PATH], [member path_interval] "
+"will subdivide the polygons along the path."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPrimitive.xml:4
+msgid "Base class for CSG primitives."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPrimitive.xml:7
+msgid ""
+"Parent class for various CSG primitives. It contains code and functionality "
+"that is common between them. It cannot be used directly. Instead use one of "
+"the various classes that inherit from it."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGPrimitive.xml:15
+msgid "Invert the faces of the mesh."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGShape.xml:4
+msgid "The CSG base class."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGShape.xml:7
+msgid ""
+"This is the CSG base class that provides CSG operation support to the "
+"various CSG nodes in Godot."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGShape.xml:16
+#: modules/csg/doc_classes/CSGShape.xml:23 doc/classes/RayCast2D.xml:60
+#: doc/classes/SoftBody.xml:30 doc/classes/SoftBody.xml:37
+msgid "Returns an individual bit on the collision mask."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGShape.xml:29
+msgid ""
+"Returns an [Array] with two elements, the first is the [Transform] of this "
+"node and the second is the root [Mesh] of this node. Only works when this "
+"node is the root shape."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGShape.xml:35
+msgid ""
+"Returns [code]true[/code] if this is a root shape and is thus the object "
+"that is rendered."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGShape.xml:43 doc/classes/SoftBody.xml:66
+msgid ""
+"Sets individual bits on the layer mask. Use this if you only need to change "
+"one layer's value."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGShape.xml:51 doc/classes/SoftBody.xml:74
+msgid ""
+"Sets individual bits on the collision mask. Use this if you only need to "
+"change one layer's value."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGShape.xml:57
+msgid ""
+"Calculate tangents for the CSG shape which allows the use of normal maps. "
+"This is only applied on the root shape, this setting is ignored on any child."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGShape.xml:60
+msgid ""
+"The physics layers this area is in.\n"
+"Collidable objects can exist in any of 32 different layers. These layers "
+"work like a tagging system, and are not visual. A collidable can use these "
+"layers to select with which objects it can collide, using the collision_mask "
+"property.\n"
+"A contact is detected if object A is in any of the layers that object B "
+"scans, or object B is in any layer scanned by object A. See [url=https://"
+"docs.godotengine.org/en/3.4/tutorials/physics/physics_introduction."
+"html#collision-layers-and-masks]Collision layers and masks[/url] in the "
+"documentation for more information."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGShape.xml:65
+msgid ""
+"The physics layers this CSG shape scans for collisions. See [url=https://"
+"docs.godotengine.org/en/3.4/tutorials/physics/physics_introduction."
+"html#collision-layers-and-masks]Collision layers and masks[/url] in the "
+"documentation for more information."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGShape.xml:68
+msgid ""
+"The operation that is performed on this shape. This is ignored for the first "
+"CSG child node as the operation is between this node and the previous child "
+"of this nodes parent."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGShape.xml:71
+msgid ""
+"Snap makes the mesh snap to a given distance so that the faces of two meshes "
+"can be perfectly aligned. A lower value results in greater precision but may "
+"be harder to adjust."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGShape.xml:74
+msgid ""
+"Adds a collision shape to the physics engine for our CSG shape. This will "
+"always act like a static body. Note that the collision shape is still active "
+"even if the CSG shape itself is hidden."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGShape.xml:79
+msgid ""
+"Geometry of both primitives is merged, intersecting geometry is removed."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGShape.xml:82
+msgid "Only intersecting geometry remains, the rest is removed."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGShape.xml:85
+msgid ""
+"The second shape is subtracted from the first, leaving a dent with its shape."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGSphere.xml:4
+msgid "A CSG Sphere shape."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGSphere.xml:7
+msgid "This node allows you to create a sphere for use with the CSG system."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGSphere.xml:15
+msgid "The material used to render the sphere."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGSphere.xml:18
+msgid "Number of vertical slices for the sphere."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGSphere.xml:21
+msgid "Radius of the sphere."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGSphere.xml:24
+msgid "Number of horizontal slices for the sphere."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGSphere.xml:27
+msgid ""
+"If [code]true[/code] the normals of the sphere are set to give a smooth "
+"effect making the sphere seem rounded. If [code]false[/code] the sphere will "
+"have a flat shaded look."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGTorus.xml:4
+msgid "A CSG Torus shape."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGTorus.xml:7
+msgid "This node allows you to create a torus for use with the CSG system."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGTorus.xml:15
+msgid "The inner radius of the torus."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGTorus.xml:18
+msgid "The material used to render the torus."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGTorus.xml:21
+msgid "The outer radius of the torus."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGTorus.xml:24
+msgid "The number of edges each ring of the torus is constructed of."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGTorus.xml:27
+msgid "The number of slices the torus is constructed of."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGTorus.xml:30
+msgid ""
+"If [code]true[/code] the normals of the torus are set to give a smooth "
+"effect making the torus seem rounded. If [code]false[/code] the torus will "
+"have a flat shaded look."
+msgstr ""
+
+#: modules/mono/doc_classes/CSharpScript.xml:4
+msgid ""
+"A script implemented in the C# programming language (Mono-enabled builds "
+"only)."
+msgstr ""
+
+#: modules/mono/doc_classes/CSharpScript.xml:7
+msgid ""
+"This class represents a C# script. It is the C# equivalent of the [GDScript] "
+"class and is only available in Mono-enabled Godot builds.\n"
+"See also [GodotSharp]."
+msgstr ""
+
+#: modules/mono/doc_classes/CSharpScript.xml:11
+msgid ""
+"https://docs.godotengine.org/en/3.4/getting_started/scripting/c_sharp/index."
+"html"
+msgstr ""
+
+#: modules/mono/doc_classes/CSharpScript.xml:18
+#: modules/gdnative/doc_classes/PluginScript.xml:13
+msgid "Returns a new instance of the script."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:4
+msgid "A CubeMap is a 6-sided 3D texture."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:7
+msgid ""
+"A 6-sided 3D texture typically used for faking reflections. It can be used "
+"to make an object look as if it's reflecting its surroundings. This usually "
+"delivers much better performance than other reflection methods."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:15
+msgid "Returns the [CubeMap]'s height."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:22
+msgid ""
+"Returns an [Image] for a side of the [CubeMap] using one of the [enum Side] "
+"constants."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:28
+msgid "Returns the [CubeMap]'s width."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:36
+msgid ""
+"Sets an [Image] for a side of the [CubeMap] using one of the [enum Side] "
+"constants."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:42
+msgid ""
+"The render flags for the [CubeMap]. See the [enum Flags] constants for "
+"details."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:45
+msgid ""
+"The lossy storage quality of the [CubeMap] if the storage mode is set to "
+"[constant STORAGE_COMPRESS_LOSSY]."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:48
+msgid "The [CubeMap]'s storage mode. See [enum Storage] constants."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:53
+msgid "Store the [CubeMap] without any compression."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:56
+msgid "Store the [CubeMap] with strong compression that reduces image quality."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:59
+msgid ""
+"Store the [CubeMap] with moderate compression that doesn't reduce image "
+"quality."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:62
+msgid "Identifier for the left face of the [CubeMap]."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:65
+msgid "Identifier for the right face of the [CubeMap]."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:68
+msgid "Identifier for the bottom face of the [CubeMap]."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:71
+msgid "Identifier for the top face of the [CubeMap]."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:74
+msgid "Identifier for the front face of the [CubeMap]."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:77
+msgid "Identifier for the back face of the [CubeMap]."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:80
+msgid "Generate mipmaps, to enable smooth zooming out of the texture."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:83
+msgid "Repeat (instead of clamp to edge)."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:86
+msgid "Turn on magnifying filter, to enable smooth zooming in of the texture."
+msgstr ""
+
+#: doc/classes/CubeMap.xml:89
+msgid "Default flags. Generate mipmaps, repeat, and filter are enabled."
+msgstr ""
+
+#: doc/classes/CubeMesh.xml:4
+msgid "Generate an axis-aligned cuboid [PrimitiveMesh]."
+msgstr ""
+
+#: doc/classes/CubeMesh.xml:7
+msgid ""
+"Generate an axis-aligned cuboid [PrimitiveMesh].\n"
+"The cube's UV layout is arranged in a 3×2 layout that allows texturing each "
+"face individually. To apply the same texture on all faces, change the "
+"material's UV property to [code]Vector3(3, 2, 1)[/code].\n"
+"[b]Note:[/b] When using a large textured [CubeMesh] (e.g. as a floor), you "
+"may stumble upon UV jittering issues depending on the camera angle. To solve "
+"this, increase [member subdivide_depth], [member subdivide_height] and "
+"[member subdivide_width] until you no longer notice UV jittering."
+msgstr ""
+
+#: doc/classes/CubeMesh.xml:17
+msgid "Size of the cuboid mesh."
+msgstr ""
+
+#: doc/classes/CubeMesh.xml:20
+msgid "Number of extra edge loops inserted along the Z axis."
+msgstr ""
+
+#: doc/classes/CubeMesh.xml:23
+msgid "Number of extra edge loops inserted along the Y axis."
+msgstr ""
+
+#: doc/classes/CubeMesh.xml:26
+msgid "Number of extra edge loops inserted along the X axis."
+msgstr ""
+
+#: doc/classes/CullInstance.xml:4
+msgid "Parent of all nodes that can be culled by the Portal system."
+msgstr ""
+
+#: doc/classes/CullInstance.xml:7
+msgid ""
+"Provides common functionality to nodes that can be culled by the [Portal] "
+"system.\n"
+"[code]Static[/code] and [code]Dynamic[/code] objects are the most "
+"efficiently managed objects in the system, but there are some caveats. They "
+"are expected to be present initially when [Room]s are converted using the "
+"[RoomManager] [code]rooms_convert[/code] function, and their lifetime should "
+"be the same as the game level (i.e. present until you call "
+"[code]rooms_clear[/code] on the [RoomManager]. Although you shouldn't "
+"create / delete these objects during gameplay, you can manage their "
+"visibility with the standard [code]hide[/code] and [code]show[/code] "
+"commands.\n"
+"[code]Roaming[/code] objects on the other hand, require extra processing to "
+"keep track of which [Room] they are within. This enables them to be culled "
+"effectively, wherever they are.\n"
+"[code]Global[/code] objects are not culled by the portal system, and use "
+"view frustum culling only.\n"
+"Objects that are not [code]Static[/code] or [code]Dynamic[/code] can be "
+"freely created and deleted during the lifetime of the game level."
+msgstr ""
+
+#: doc/classes/CullInstance.xml:19
+msgid ""
+"When set to [code]0[/code], [CullInstance]s will be autoplaced in the [Room] "
+"with the highest priority.\n"
+"When set to a value other than [code]0[/code], the system will attempt to "
+"autoplace in a [Room] with the [code]autoplace_priority[/code], if it is "
+"present.\n"
+"This can be used to control autoplacement of building exteriors in an outer "
+"[RoomGroup]."
+msgstr ""
+
+#: doc/classes/CullInstance.xml:24
+msgid ""
+"When a manual bound has not been explicitly specified for a [Room], the "
+"convex hull bound will be estimated from the geometry of the objects within "
+"the room. This setting determines whether the geometry of an object is "
+"included in this estimate of the room bound.\n"
+"[b]Note:[/b] This setting is only relevant when the object is set to "
+"[code]PORTAL_MODE_STATIC[/code] or [code]PORTAL_MODE_DYNAMIC[/code], and for "
+"[Portal]s."
+msgstr ""
+
+#: doc/classes/CullInstance.xml:28
+msgid ""
+"When using [Room]s and [Portal]s, this specifies how the [CullInstance] is "
+"processed in the system."
+msgstr ""
+
+#: doc/classes/CullInstance.xml:33
+msgid ""
+"Use for instances within [Room]s that will [b]not move[/b] - e.g. walls, "
+"floors.\n"
+"[b]Note:[/b] If you attempt to delete a [code]PORTAL_MODE_STATIC[/code] "
+"instance while the room graph is loaded (converted), it will unload the room "
+"graph and deactivate portal culling. This is because the [b]room graph[/b] "
+"data has been invalidated. You will need to reconvert the rooms using the "
+"[RoomManager] to activate the system again."
+msgstr ""
+
+#: doc/classes/CullInstance.xml:37
+msgid ""
+"Use for instances within rooms that will move but [b]not change room[/b] - e."
+"g. moving platforms.\n"
+"[b]Note:[/b] If you attempt to delete a [code]PORTAL_MODE_DYNAMIC[/code] "
+"instance while the room graph is loaded (converted), it will unload the room "
+"graph and deactivate portal culling. This is because the [b]room graph[/b] "
+"data has been invalidated. You will need to reconvert the rooms using the "
+"[RoomManager] to activate the system again."
+msgstr ""
+
+#: doc/classes/CullInstance.xml:41
+msgid "Use for instances that will move [b]between[/b] [Room]s - e.g. players."
+msgstr ""
+
+#: doc/classes/CullInstance.xml:44
+msgid ""
+"Use for instances that will be frustum culled only - e.g. first person "
+"weapon, debug."
+msgstr ""
+
+#: doc/classes/CullInstance.xml:47
+msgid ""
+"Use for instances that will not be shown at all - e.g. [b]manual room "
+"bounds[/b] (specified by prefix [i]'Bound_'[/i])."
+msgstr ""
+
+#: doc/classes/Curve.xml:4
+msgid "A mathematic curve."
+msgstr ""
+
+#: doc/classes/Curve.xml:7
+msgid ""
+"A curve that can be saved and re-used for other objects. By default, it "
+"ranges between [code]0[/code] and [code]1[/code] on the Y axis and positions "
+"points relative to the [code]0.5[/code] Y position."
+msgstr ""
+
+#: doc/classes/Curve.xml:20
+msgid ""
+"Adds a point to the curve. For each side, if the [code]*_mode[/code] is "
+"[constant TANGENT_LINEAR], the [code]*_tangent[/code] angle (in degrees) "
+"uses the slope of the curve halfway to the adjacent point. Allows custom "
+"assignments to the [code]*_tangent[/code] angle if [code]*_mode[/code] is "
+"set to [constant TANGENT_FREE]."
+msgstr ""
+
+#: doc/classes/Curve.xml:26
+msgid "Recomputes the baked cache of points for the curve."
+msgstr ""
+
+#: doc/classes/Curve.xml:32
+msgid ""
+"Removes points that are closer than [code]CMP_EPSILON[/code] (0.00001) units "
+"to their neighbor on the curve."
+msgstr ""
+
+#: doc/classes/Curve.xml:38 doc/classes/Curve2D.xml:27
+#: doc/classes/Curve3D.xml:27
+msgid "Removes all points from the curve."
+msgstr ""
+
+#: doc/classes/Curve.xml:44 doc/classes/Curve2D.xml:61
+#: doc/classes/Curve3D.xml:74
+msgid "Returns the number of points describing the curve."
+msgstr ""
+
+#: doc/classes/Curve.xml:51
+msgid ""
+"Returns the left [enum TangentMode] for the point at [code]index[/code]."
+msgstr ""
+
+#: doc/classes/Curve.xml:58
+msgid ""
+"Returns the left tangent angle (in degrees) for the point at [code]index[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Curve.xml:65
+msgid "Returns the curve coordinates for the point at [code]index[/code]."
+msgstr ""
+
+#: doc/classes/Curve.xml:72
+msgid ""
+"Returns the right [enum TangentMode] for the point at [code]index[/code]."
+msgstr ""
+
+#: doc/classes/Curve.xml:79
+msgid ""
+"Returns the right tangent angle (in degrees) for the point at [code]index[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Curve.xml:86
+msgid ""
+"Returns the Y value for the point that would exist at the X position "
+"[code]offset[/code] along the curve."
+msgstr ""
+
+#: doc/classes/Curve.xml:93
+msgid ""
+"Returns the Y value for the point that would exist at the X position "
+"[code]offset[/code] along the curve using the baked cache. Bakes the curve's "
+"points if not already baked."
+msgstr ""
+
+#: doc/classes/Curve.xml:100
+msgid "Removes the point at [code]index[/code] from the curve."
+msgstr ""
+
+#: doc/classes/Curve.xml:108
+msgid ""
+"Sets the left [enum TangentMode] for the point at [code]index[/code] to "
+"[code]mode[/code]."
+msgstr ""
+
+#: doc/classes/Curve.xml:116
+msgid ""
+"Sets the left tangent angle for the point at [code]index[/code] to "
+"[code]tangent[/code]."
+msgstr ""
+
+#: doc/classes/Curve.xml:124
+msgid "Sets the offset from [code]0.5[/code]."
+msgstr ""
+
+#: doc/classes/Curve.xml:132
+msgid ""
+"Sets the right [enum TangentMode] for the point at [code]index[/code] to "
+"[code]mode[/code]."
+msgstr ""
+
+#: doc/classes/Curve.xml:140
+msgid ""
+"Sets the right tangent angle for the point at [code]index[/code] to "
+"[code]tangent[/code]."
+msgstr ""
+
+#: doc/classes/Curve.xml:148
+msgid ""
+"Assigns the vertical position [code]y[/code] to the point at [code]index[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Curve.xml:154
+msgid "The number of points to include in the baked (i.e. cached) curve data."
+msgstr ""
+
+#: doc/classes/Curve.xml:157
+msgid "The maximum value the curve can reach."
+msgstr ""
+
+#: doc/classes/Curve.xml:160
+msgid "The minimum value the curve can reach."
+msgstr ""
+
+#: doc/classes/Curve.xml:166
+msgid "Emitted when [member max_value] or [member min_value] is changed."
+msgstr ""
+
+#: doc/classes/Curve.xml:172
+msgid "The tangent on this side of the point is user-defined."
+msgstr ""
+
+#: doc/classes/Curve.xml:175
+msgid ""
+"The curve calculates the tangent on this side of the point as the slope "
+"halfway towards the adjacent point."
+msgstr ""
+
+#: doc/classes/Curve.xml:178
+msgid "The total number of available tangent modes."
+msgstr ""
+
+#: doc/classes/Curve2D.xml:4
+msgid "Describes a Bézier curve in 2D space."
+msgstr ""
+
+#: doc/classes/Curve2D.xml:7
+msgid ""
+"This class describes a Bézier curve in 2D space. It is mainly used to give a "
+"shape to a [Path2D], but can be manually sampled for other purposes.\n"
+"It keeps a cache of precalculated points along the curve, to speed up "
+"further calculations."
+msgstr ""
+
+#: doc/classes/Curve2D.xml:20 doc/classes/Curve3D.xml:20
+msgid ""
+"Adds a point to a curve at [code]position[/code], with control points "
+"[code]in[/code] and [code]out[/code].\n"
+"If [code]at_position[/code] is given, the point is inserted before the point "
+"number [code]at_position[/code], moving that point (and every point after) "
+"after the inserted point. If [code]at_position[/code] is not given, or is an "
+"illegal value ([code]at_position <0[/code] or [code]at_position >= [method "
+"get_point_count][/code]), the point will be appended at the end of the point "
+"list."
+msgstr ""
+
+#: doc/classes/Curve2D.xml:33 doc/classes/Curve3D.xml:33
+msgid ""
+"Returns the total length of the curve, based on the cached points. Given "
+"enough density (see [member bake_interval]), it should be approximate enough."
+msgstr ""
+
+#: doc/classes/Curve2D.xml:39
+msgid "Returns the cache of points as a [PoolVector2Array]."
+msgstr ""
+
+#: doc/classes/Curve2D.xml:46
+msgid ""
+"Returns the closest offset to [code]to_point[/code]. This offset is meant to "
+"be used in [method interpolate_baked].\n"
+"[code]to_point[/code] must be in this curve's local space."
+msgstr ""
+
+#: doc/classes/Curve2D.xml:54 doc/classes/Curve3D.xml:67
+msgid ""
+"Returns the closest baked point (in curve's local space) to [code]to_point[/"
+"code].\n"
+"[code]to_point[/code] must be in this curve's local space."
+msgstr ""
+
+#: doc/classes/Curve2D.xml:68
+msgid ""
+"Returns the position of the control point leading to the vertex [code]idx[/"
+"code]. The returned position is relative to the vertex [code]idx[/code]. If "
+"the index is out of bounds, the function sends an error to the console, and "
+"returns [code](0, 0)[/code]."
+msgstr ""
+
+#: doc/classes/Curve2D.xml:75
+msgid ""
+"Returns the position of the control point leading out of the vertex "
+"[code]idx[/code]. The returned position is relative to the vertex [code]idx[/"
+"code]. If the index is out of bounds, the function sends an error to the "
+"console, and returns [code](0, 0)[/code]."
+msgstr ""
+
+#: doc/classes/Curve2D.xml:82
+msgid ""
+"Returns the position of the vertex [code]idx[/code]. If the index is out of "
+"bounds, the function sends an error to the console, and returns [code](0, 0)"
+"[/code]."
+msgstr ""
+
+#: doc/classes/Curve2D.xml:90
+msgid ""
+"Returns the position between the vertex [code]idx[/code] and the vertex "
+"[code]idx + 1[/code], where [code]t[/code] controls if the point is the "
+"first vertex ([code]t = 0.0[/code]), the last vertex ([code]t = 1.0[/code]), "
+"or in between. Values of [code]t[/code] outside the range ([code]0.0 >= t "
+"<=1[/code]) give strange, but predictable results.\n"
+"If [code]idx[/code] is out of bounds it is truncated to the first or last "
+"vertex, and [code]t[/code] is ignored. If the curve has no points, the "
+"function sends an error to the console, and returns [code](0, 0)[/code]."
+msgstr ""
+
+#: doc/classes/Curve2D.xml:99
+msgid ""
+"Returns a point within the curve at position [code]offset[/code], where "
+"[code]offset[/code] is measured as a pixel distance along the curve.\n"
+"To do that, it finds the two cached points where the [code]offset[/code] "
+"lies between, then interpolates the values. This interpolation is cubic if "
+"[code]cubic[/code] is set to [code]true[/code], or linear if set to "
+"[code]false[/code].\n"
+"Cubic interpolation tends to follow the curves better, but linear is faster "
+"(and often, precise enough)."
+msgstr ""
+
+#: doc/classes/Curve2D.xml:108 doc/classes/Curve3D.xml:138
+msgid ""
+"Returns the position at the vertex [code]fofs[/code]. It calls [method "
+"interpolate] using the integer part of [code]fofs[/code] as [code]idx[/"
+"code], and its fractional part as [code]t[/code]."
+msgstr ""
+
+#: doc/classes/Curve2D.xml:115 doc/classes/Curve3D.xml:145
+msgid ""
+"Deletes the point [code]idx[/code] from the curve. Sends an error to the "
+"console if [code]idx[/code] is out of bounds."
+msgstr ""
+
+#: doc/classes/Curve2D.xml:123 doc/classes/Curve3D.xml:153
+msgid ""
+"Sets the position of the control point leading to the vertex [code]idx[/"
+"code]. If the index is out of bounds, the function sends an error to the "
+"console. The position is relative to the vertex."
+msgstr ""
+
+#: doc/classes/Curve2D.xml:131 doc/classes/Curve3D.xml:161
+msgid ""
+"Sets the position of the control point leading out of the vertex [code]idx[/"
+"code]. If the index is out of bounds, the function sends an error to the "
+"console. The position is relative to the vertex."
+msgstr ""
+
+#: doc/classes/Curve2D.xml:139 doc/classes/Curve3D.xml:169
+msgid ""
+"Sets the position for the vertex [code]idx[/code]. If the index is out of "
+"bounds, the function sends an error to the console."
+msgstr ""
+
+#: doc/classes/Curve2D.xml:147 doc/classes/Curve3D.xml:186
+msgid ""
+"Returns a list of points along the curve, with a curvature controlled point "
+"density. That is, the curvier parts will have more points than the "
+"straighter parts.\n"
+"This approximation makes straight segments between each point, then "
+"subdivides those segments until the resulting shape is similar enough.\n"
+"[code]max_stages[/code] controls how many subdivisions a curve segment may "
+"face before it is considered approximate enough. Each subdivision splits the "
+"segment in half, so the default 5 stages may mean up to 32 subdivisions per "
+"curve segment. Increase with care!\n"
+"[code]tolerance_degrees[/code] controls how many degrees the midpoint of a "
+"segment may deviate from the real curve, before the segment has to be "
+"subdivided."
+msgstr ""
+
+#: doc/classes/Curve2D.xml:156
+msgid ""
+"The distance in pixels between two adjacent cached points. Changing it "
+"forces the cache to be recomputed the next time the [method "
+"get_baked_points] or [method get_baked_length] function is called. The "
+"smaller the distance, the more points in the cache and the more memory it "
+"will consume, so use with care."
+msgstr ""
+
+#: doc/classes/Curve3D.xml:4
+msgid "Describes a Bézier curve in 3D space."
+msgstr ""
+
+#: doc/classes/Curve3D.xml:7
+msgid ""
+"This class describes a Bézier curve in 3D space. It is mainly used to give a "
+"shape to a [Path], but can be manually sampled for other purposes.\n"
+"It keeps a cache of precalculated points along the curve, to speed up "
+"further calculations."
+msgstr ""
+
+#: doc/classes/Curve3D.xml:39
+msgid "Returns the cache of points as a [PoolVector3Array]."
+msgstr ""
+
+#: doc/classes/Curve3D.xml:45
+msgid "Returns the cache of tilts as a [PoolRealArray]."
+msgstr ""
+
+#: doc/classes/Curve3D.xml:51
+msgid ""
+"Returns the cache of up vectors as a [PoolVector3Array].\n"
+"If [member up_vector_enabled] is [code]false[/code], the cache will be empty."
+msgstr ""
+
+#: doc/classes/Curve3D.xml:59
+msgid ""
+"Returns the closest offset to [code]to_point[/code]. This offset is meant to "
+"be used in [method interpolate_baked] or [method "
+"interpolate_baked_up_vector].\n"
+"[code]to_point[/code] must be in this curve's local space."
+msgstr ""
+
+#: doc/classes/Curve3D.xml:81
+msgid ""
+"Returns the position of the control point leading to the vertex [code]idx[/"
+"code]. The returned position is relative to the vertex [code]idx[/code]. If "
+"the index is out of bounds, the function sends an error to the console, and "
+"returns [code](0, 0, 0)[/code]."
+msgstr ""
+
+#: doc/classes/Curve3D.xml:88
+msgid ""
+"Returns the position of the control point leading out of the vertex "
+"[code]idx[/code]. The returned position is relative to the vertex [code]idx[/"
+"code]. If the index is out of bounds, the function sends an error to the "
+"console, and returns [code](0, 0, 0)[/code]."
+msgstr ""
+
+#: doc/classes/Curve3D.xml:95
+msgid ""
+"Returns the position of the vertex [code]idx[/code]. If the index is out of "
+"bounds, the function sends an error to the console, and returns [code](0, 0, "
+"0)[/code]."
+msgstr ""
+
+#: doc/classes/Curve3D.xml:102
+msgid ""
+"Returns the tilt angle in radians for the point [code]idx[/code]. If the "
+"index is out of bounds, the function sends an error to the console, and "
+"returns [code]0[/code]."
+msgstr ""
+
+#: doc/classes/Curve3D.xml:110
+msgid ""
+"Returns the position between the vertex [code]idx[/code] and the vertex "
+"[code]idx + 1[/code], where [code]t[/code] controls if the point is the "
+"first vertex ([code]t = 0.0[/code]), the last vertex ([code]t = 1.0[/code]), "
+"or in between. Values of [code]t[/code] outside the range ([code]0.0 >= t "
+"<=1[/code]) give strange, but predictable results.\n"
+"If [code]idx[/code] is out of bounds it is truncated to the first or last "
+"vertex, and [code]t[/code] is ignored. If the curve has no points, the "
+"function sends an error to the console, and returns [code](0, 0, 0)[/code]."
+msgstr ""
+
+#: doc/classes/Curve3D.xml:119
+msgid ""
+"Returns a point within the curve at position [code]offset[/code], where "
+"[code]offset[/code] is measured as a distance in 3D units along the curve.\n"
+"To do that, it finds the two cached points where the [code]offset[/code] "
+"lies between, then interpolates the values. This interpolation is cubic if "
+"[code]cubic[/code] is set to [code]true[/code], or linear if set to "
+"[code]false[/code].\n"
+"Cubic interpolation tends to follow the curves better, but linear is faster "
+"(and often, precise enough)."
+msgstr ""
+
+#: doc/classes/Curve3D.xml:129
+msgid ""
+"Returns an up vector within the curve at position [code]offset[/code], where "
+"[code]offset[/code] is measured as a distance in 3D units along the curve.\n"
+"To do that, it finds the two cached up vectors where the [code]offset[/code] "
+"lies between, then interpolates the values. If [code]apply_tilt[/code] is "
+"[code]true[/code], an interpolated tilt is applied to the interpolated up "
+"vector.\n"
+"If the curve has no up vectors, the function sends an error to the console, "
+"and returns [code](0, 1, 0)[/code]."
+msgstr ""
+
+#: doc/classes/Curve3D.xml:177
+msgid ""
+"Sets the tilt angle in radians for the point [code]idx[/code]. If the index "
+"is out of bounds, the function sends an error to the console.\n"
+"The tilt controls the rotation along the look-at axis an object traveling "
+"the path would have. In the case of a curve controlling a [PathFollow], this "
+"tilt is an offset over the natural tilt the [PathFollow] calculates."
+msgstr ""
+
+#: doc/classes/Curve3D.xml:195
+msgid ""
+"The distance in meters between two adjacent cached points. Changing it "
+"forces the cache to be recomputed the next time the [method "
+"get_baked_points] or [method get_baked_length] function is called. The "
+"smaller the distance, the more points in the cache and the more memory it "
+"will consume, so use with care."
+msgstr ""
+
+#: doc/classes/Curve3D.xml:198
+msgid ""
+"If [code]true[/code], the curve will bake up vectors used for orientation. "
+"This is used when [member PathFollow.rotation_mode] is set to [constant "
+"PathFollow.ROTATION_ORIENTED]. Changing it forces the cache to be recomputed."
+msgstr ""
+
+#: doc/classes/CurveTexture.xml:4
+msgid "A texture that shows a curve."
+msgstr ""
+
+#: doc/classes/CurveTexture.xml:7
+msgid ""
+"Renders a given [Curve] provided to it. Simplifies the task of drawing "
+"curves and/or saving them as image files."
+msgstr ""
+
+#: doc/classes/CurveTexture.xml:15
+msgid "The [code]curve[/code] rendered onto the texture."
+msgstr ""
+
+#: doc/classes/CurveTexture.xml:18
+msgid "The width of the texture."
+msgstr ""
+
+#: doc/classes/CylinderMesh.xml:4
+msgid "Class representing a cylindrical [PrimitiveMesh]."
+msgstr ""
+
+#: doc/classes/CylinderMesh.xml:7
+msgid ""
+"Class representing a cylindrical [PrimitiveMesh]. This class can be used to "
+"create cones by setting either the [member top_radius] or [member "
+"bottom_radius] properties to [code]0.0[/code]."
+msgstr ""
+
+#: doc/classes/CylinderMesh.xml:15
+msgid ""
+"Bottom radius of the cylinder. If set to [code]0.0[/code], the bottom faces "
+"will not be generated, resulting in a conic shape."
+msgstr ""
+
+#: doc/classes/CylinderMesh.xml:18
+msgid "Full height of the cylinder."
+msgstr ""
+
+#: doc/classes/CylinderMesh.xml:21
+msgid ""
+"Number of radial segments on the cylinder. Higher values result in a more "
+"detailed cylinder/cone at the cost of performance."
+msgstr ""
+
+#: doc/classes/CylinderMesh.xml:24
+msgid ""
+"Number of edge rings along the height of the cylinder. Changing [member "
+"rings] does not have any visual impact unless a shader or procedural mesh "
+"tool is used to alter the vertex data. Higher values result in more "
+"subdivisions, which can be used to create smoother-looking effects with "
+"shaders or procedural mesh tools (at the cost of performance). When not "
+"altering the vertex data using a shader or procedural mesh tool, [member "
+"rings] should be kept to its default value."
+msgstr ""
+
+#: doc/classes/CylinderMesh.xml:27
+msgid ""
+"Top radius of the cylinder. If set to [code]0.0[/code], the top faces will "
+"not be generated, resulting in a conic shape."
+msgstr ""
+
+#: doc/classes/CylinderShape.xml:4 doc/classes/CylinderShape.xml:7
+msgid "Cylinder shape for collisions."
+msgstr ""
+
+#: doc/classes/CylinderShape.xml:18
+msgid "The cylinder's height."
+msgstr ""
+
+#: doc/classes/CylinderShape.xml:21
+msgid "The cylinder's radius."
+msgstr ""
+
+#: doc/classes/DampedSpringJoint2D.xml:4
+msgid "Damped spring constraint for 2D physics."
+msgstr ""
+
+#: doc/classes/DampedSpringJoint2D.xml:7
+msgid ""
+"Damped spring constraint for 2D physics. This resembles a spring joint that "
+"always wants to go back to a given length."
+msgstr ""
+
+#: doc/classes/DampedSpringJoint2D.xml:15
+msgid ""
+"The spring joint's damping ratio. A value between [code]0[/code] and "
+"[code]1[/code]. When the two bodies move into different directions the "
+"system tries to align them to the spring axis again. A high [code]damping[/"
+"code] value forces the attached bodies to align faster."
+msgstr ""
+
+#: doc/classes/DampedSpringJoint2D.xml:18
+msgid ""
+"The spring joint's maximum length. The two attached bodies cannot stretch it "
+"past this value."
+msgstr ""
+
+#: doc/classes/DampedSpringJoint2D.xml:21
+msgid ""
+"When the bodies attached to the spring joint move they stretch or squash it. "
+"The joint always tries to resize towards this length."
+msgstr ""
+
+#: doc/classes/DampedSpringJoint2D.xml:24
+msgid ""
+"The higher the value, the less the bodies attached to the joint will deform "
+"it. The joint applies an opposing force to the bodies, the product of the "
+"stiffness multiplied by the size difference from its resting length."
+msgstr ""
+
+#: doc/classes/Dictionary.xml:4
+msgid "Dictionary type."
+msgstr ""
+
+#: doc/classes/Dictionary.xml:7
+msgid ""
+"Dictionary type. Associative container which contains values referenced by "
+"unique keys. Dictionaries are composed of pairs of keys (which must be "
+"unique) and values. Dictionaries will preserve the insertion order when "
+"adding elements, even though this may not be reflected when printing the "
+"dictionary. In other programming languages, this data structure is sometimes "
+"referred to as a hash map or associative array.\n"
+"You can define a dictionary by placing a comma-separated list of [code]key: "
+"value[/code] pairs in curly braces [code]{}[/code].\n"
+"Erasing elements while iterating over them [b]is not supported[/b] and will "
+"result in undefined behavior.\n"
+"[b]Note:[/b] Dictionaries are always passed by reference. To get a copy of a "
+"dictionary which can be modified independently of the original dictionary, "
+"use [method duplicate].\n"
+"Creating a dictionary:\n"
+"[codeblock]\n"
+"var my_dict = {} # Creates an empty dictionary.\n"
+"\n"
+"var dict_variable_key = \"Another key name\"\n"
+"var dict_variable_value = \"value2\"\n"
+"var another_dict = {\n"
+" \"Some key name\": \"value1\",\n"
+" dict_variable_key: dict_variable_value,\n"
+"}\n"
+"\n"
+"var points_dict = {\"White\": 50, \"Yellow\": 75, \"Orange\": 100}\n"
+"\n"
+"# Alternative Lua-style syntax.\n"
+"# Doesn't require quotes around keys, but only string constants can be used "
+"as key names.\n"
+"# Additionally, key names must start with a letter or an underscore.\n"
+"# Here, `some_key` is a string literal, not a variable!\n"
+"another_dict = {\n"
+" some_key = 42,\n"
+"}\n"
+"[/codeblock]\n"
+"You can access a dictionary's values by referencing the appropriate key. In "
+"the above example, [code]points_dict[\"White\"][/code] will return [code]50[/"
+"code]. You can also write [code]points_dict.White[/code], which is "
+"equivalent. However, you'll have to use the bracket syntax if the key you're "
+"accessing the dictionary with isn't a fixed string (such as a number or "
+"variable).\n"
+"[codeblock]\n"
+"export(string, \"White\", \"Yellow\", \"Orange\") var my_color\n"
+"var points_dict = {\"White\": 50, \"Yellow\": 75, \"Orange\": 100}\n"
+"func _ready():\n"
+" # We can't use dot syntax here as `my_color` is a variable.\n"
+" var points = points_dict[my_color]\n"
+"[/codeblock]\n"
+"In the above code, [code]points[/code] will be assigned the value that is "
+"paired with the appropriate color selected in [code]my_color[/code].\n"
+"Dictionaries can contain more complex data:\n"
+"[codeblock]\n"
+"my_dict = {\"First Array\": [1, 2, 3, 4]} # Assigns an Array to a String "
+"key.\n"
+"[/codeblock]\n"
+"To add a key to an existing dictionary, access it like an existing key and "
+"assign to it:\n"
+"[codeblock]\n"
+"var points_dict = {\"White\": 50, \"Yellow\": 75, \"Orange\": 100}\n"
+"points_dict[\"Blue\"] = 150 # Add \"Blue\" as a key and assign 150 as its "
+"value.\n"
+"[/codeblock]\n"
+"Finally, dictionaries can contain different types of keys and values in the "
+"same dictionary:\n"
+"[codeblock]\n"
+"# This is a valid dictionary.\n"
+"# To access the string \"Nested value\" below, use `my_dict.sub_dict."
+"sub_key` or `my_dict[\"sub_dict\"][\"sub_key\"]`.\n"
+"# Indexing styles can be mixed and matched depending on your needs.\n"
+"var my_dict = {\n"
+" \"String Key\": 5,\n"
+" 4: [1, 2, 3],\n"
+" 7: \"Hello\",\n"
+" \"sub_dict\": {\"sub_key\": \"Nested value\"},\n"
+"}\n"
+"[/codeblock]\n"
+"[b]Note:[/b] Unlike [Array]s, you can't compare dictionaries directly:\n"
+"[codeblock]\n"
+"array1 = [1, 2, 3]\n"
+"array2 = [1, 2, 3]\n"
+"\n"
+"func compare_arrays():\n"
+" print(array1 == array2) # Will print true.\n"
+"\n"
+"var dict1 = {\"a\": 1, \"b\": 2, \"c\": 3}\n"
+"var dict2 = {\"a\": 1, \"b\": 2, \"c\": 3}\n"
+"\n"
+"func compare_dictionaries():\n"
+" print(dict1 == dict2) # Will NOT print true.\n"
+"[/codeblock]\n"
+"You need to first calculate the dictionary's hash with [method hash] before "
+"you can compare them:\n"
+"[codeblock]\n"
+"var dict1 = {\"a\": 1, \"b\": 2, \"c\": 3}\n"
+"var dict2 = {\"a\": 1, \"b\": 2, \"c\": 3}\n"
+"\n"
+"func compare_dictionaries():\n"
+" print(dict1.hash() == dict2.hash()) # Will print true.\n"
+"[/codeblock]\n"
+"[b]Note:[/b] When declaring a dictionary with [code]const[/code], the "
+"dictionary itself can still be mutated by defining the values of individual "
+"keys. Using [code]const[/code] will only prevent assigning the constant with "
+"another value after it was initialized."
+msgstr ""
+
+#: doc/classes/Dictionary.xml:87
+msgid ""
+"https://docs.godotengine.org/en/3.4/getting_started/scripting/gdscript/"
+"gdscript_basics.html#dictionary"
+msgstr ""
+
+#: doc/classes/Dictionary.xml:94
+msgid "Clear the dictionary, removing all key/value pairs."
+msgstr ""
+
+#: doc/classes/Dictionary.xml:101
+msgid ""
+"Creates a copy of the dictionary, and returns it. The [code]deep[/code] "
+"parameter causes inner dictionaries and arrays to be copied recursively, but "
+"does not apply to objects."
+msgstr ""
+
+#: doc/classes/Dictionary.xml:107
+msgid "Returns [code]true[/code] if the dictionary is empty."
+msgstr ""
+
+#: doc/classes/Dictionary.xml:114
+msgid ""
+"Erase a dictionary key/value pair by key. Returns [code]true[/code] if the "
+"given key was present in the dictionary, [code]false[/code] otherwise.\n"
+"[b]Note:[/b] Don't erase elements while iterating over the dictionary. You "
+"can iterate over the [method keys] array instead."
+msgstr ""
+
+#: doc/classes/Dictionary.xml:123
+msgid ""
+"Returns the current value for the specified key in the [Dictionary]. If the "
+"key does not exist, the method returns the value of the optional default "
+"argument, or [code]null[/code] if it is omitted."
+msgstr ""
+
+#: doc/classes/Dictionary.xml:130
+msgid ""
+"Returns [code]true[/code] if the dictionary has a given key.\n"
+"[b]Note:[/b] This is equivalent to using the [code]in[/code] operator as "
+"follows:\n"
+"[codeblock]\n"
+"# Will evaluate to `true`.\n"
+"if \"godot\" in {\"godot\": \"engine\"}:\n"
+" pass\n"
+"[/codeblock]\n"
+"This method (like the [code]in[/code] operator) will evaluate to [code]true[/"
+"code] as long as the key exists, even if the associated value is [code]null[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Dictionary.xml:144
+msgid ""
+"Returns [code]true[/code] if the dictionary has all the keys in the given "
+"array."
+msgstr ""
+
+#: doc/classes/Dictionary.xml:150
+msgid ""
+"Returns a hashed integer value representing the dictionary contents. This "
+"can be used to compare dictionaries by value:\n"
+"[codeblock]\n"
+"var dict1 = {0: 10}\n"
+"var dict2 = {0: 10}\n"
+"# The line below prints `true`, whereas it would have printed `false` if "
+"both variables were compared directly.\n"
+"print(dict1.hash() == dict2.hash())\n"
+"[/codeblock]\n"
+"[b]Note:[/b] Dictionaries with the same keys/values but in a different order "
+"will have a different hash."
+msgstr ""
+
+#: doc/classes/Dictionary.xml:163
+msgid "Returns the list of keys in the [Dictionary]."
+msgstr ""
+
+#: doc/classes/Dictionary.xml:169
+msgid "Returns the number of keys in the dictionary."
+msgstr ""
+
+#: doc/classes/Dictionary.xml:175
+msgid "Returns the list of values in the [Dictionary]."
+msgstr ""
+
+#: doc/classes/DirectionalLight.xml:4
+msgid "Directional light from a distance, as from the Sun."
+msgstr ""
+
+#: doc/classes/DirectionalLight.xml:7
+msgid ""
+"A directional light is a type of [Light] node that models an infinite number "
+"of parallel rays covering the entire scene. It is used for lights with "
+"strong intensity that are located far away from the scene to model sunlight "
+"or moonlight. The worldspace location of the DirectionalLight transform "
+"(origin) is ignored. Only the basis is used to determine light direction."
+msgstr ""
+
+#: doc/classes/DirectionalLight.xml:10 doc/classes/Light.xml:10
+#: doc/classes/OmniLight.xml:11 doc/classes/SpotLight.xml:11
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/3d/lights_and_shadows.html"
+msgstr ""
+
+#: doc/classes/DirectionalLight.xml:16
+msgid ""
+"Amount of extra bias for shadow splits that are far away. If self-shadowing "
+"occurs only on the splits far away, increasing this value can fix them."
+msgstr ""
+
+#: doc/classes/DirectionalLight.xml:19
+msgid ""
+"If [code]true[/code], shadow detail is sacrificed in exchange for smoother "
+"transitions between splits."
+msgstr ""
+
+#: doc/classes/DirectionalLight.xml:22
+msgid ""
+"Optimizes shadow rendering for detail versus movement. See [enum "
+"ShadowDepthRange]."
+msgstr ""
+
+#: doc/classes/DirectionalLight.xml:25
+msgid "The maximum distance for shadow splits."
+msgstr ""
+
+#: doc/classes/DirectionalLight.xml:28
+msgid "The light's shadow rendering algorithm. See [enum ShadowMode]."
+msgstr ""
+
+#: doc/classes/DirectionalLight.xml:31
+msgid ""
+"Can be used to fix special cases of self shadowing when objects are "
+"perpendicular to the light."
+msgstr ""
+
+#: doc/classes/DirectionalLight.xml:34
+msgid ""
+"The distance from camera to shadow split 1. Relative to [member "
+"directional_shadow_max_distance]. Only used when [member "
+"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or "
+"[code]SHADOW_PARALLEL_4_SPLITS[/code]."
+msgstr ""
+
+#: doc/classes/DirectionalLight.xml:37
+msgid ""
+"The distance from shadow split 1 to split 2. Relative to [member "
+"directional_shadow_max_distance]. Only used when [member "
+"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or "
+"[code]SHADOW_PARALLEL_4_SPLITS[/code]."
+msgstr ""
+
+#: doc/classes/DirectionalLight.xml:40
+msgid ""
+"The distance from shadow split 2 to split 3. Relative to [member "
+"directional_shadow_max_distance]. Only used when [member "
+"directional_shadow_mode] is [code]SHADOW_PARALLEL_4_SPLITS[/code]."
+msgstr ""
+
+#: doc/classes/DirectionalLight.xml:46
+msgid ""
+"Renders the entire scene's shadow map from an orthogonal point of view. This "
+"is the fastest directional shadow mode. May result in blurrier shadows on "
+"close objects."
+msgstr ""
+
+#: doc/classes/DirectionalLight.xml:49
+msgid ""
+"Splits the view frustum in 2 areas, each with its own shadow map. This "
+"shadow mode is a compromise between [constant SHADOW_ORTHOGONAL] and "
+"[constant SHADOW_PARALLEL_4_SPLITS] in terms of performance."
+msgstr ""
+
+#: doc/classes/DirectionalLight.xml:52
+msgid ""
+"Splits the view frustum in 4 areas, each with its own shadow map. This is "
+"the slowest directional shadow mode."
+msgstr ""
+
+#: doc/classes/DirectionalLight.xml:55
+msgid ""
+"Keeps the shadow stable when the camera moves, at the cost of lower "
+"effective shadow resolution."
+msgstr ""
+
+#: doc/classes/DirectionalLight.xml:58
+msgid ""
+"Tries to achieve maximum shadow resolution. May result in saw effect on "
+"shadow edges. This mode typically works best in games where the camera will "
+"often move at high speeds, such as most racing games."
+msgstr ""
+
+#: doc/classes/Directory.xml:4
+msgid "Type used to handle the filesystem."
+msgstr ""
+
+#: doc/classes/Directory.xml:7
+msgid ""
+"Directory type. It is used to manage directories and their content (not "
+"restricted to the project folder).\n"
+"When creating a new [Directory], its default opened directory will be "
+"[code]res://[/code]. This may change in the future, so it is advised to "
+"always use [method open] to initialize your [Directory] where you want to "
+"operate, with explicit error checking.\n"
+"[b]Note:[/b] Many resources types are imported (e.g. textures or sound "
+"files), and their source asset will not be included in the exported game, as "
+"only the imported version is used. Use [ResourceLoader] to access imported "
+"resources.\n"
+"Here is an example on how to iterate through the files of a directory:\n"
+"[codeblock]\n"
+"func dir_contents(path):\n"
+" var dir = Directory.new()\n"
+" if dir.open(path) == OK:\n"
+" dir.list_dir_begin()\n"
+" var file_name = dir.get_next()\n"
+" while file_name != \"\":\n"
+" if dir.current_is_dir():\n"
+" print(\"Found directory: \" + file_name)\n"
+" else:\n"
+" print(\"Found file: \" + file_name)\n"
+" file_name = dir.get_next()\n"
+" else:\n"
+" print(\"An error occurred when trying to access the path.\")\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Directory.xml:28 doc/classes/File.xml:28
+msgid ""
+"https://docs.godotengine.org/en/3.4/getting_started/step_by_step/filesystem."
+"html"
+msgstr ""
+
+#: doc/classes/Directory.xml:35
+msgid ""
+"Changes the currently opened directory to the one passed as an argument. The "
+"argument can be relative to the current directory (e.g. [code]newdir[/code] "
+"or [code]../newdir[/code]), or an absolute path (e.g. [code]/tmp/newdir[/"
+"code] or [code]res://somedir/newdir[/code]).\n"
+"Returns one of the [enum Error] code constants ([code]OK[/code] on success)."
+msgstr ""
+
+#: doc/classes/Directory.xml:44
+msgid ""
+"Copies the [code]from[/code] file to the [code]to[/code] destination. Both "
+"arguments should be paths to files, either relative or absolute. If the "
+"destination file exists and is not access-protected, it will be "
+"overwritten.\n"
+"Returns one of the [enum Error] code constants ([code]OK[/code] on success)."
+msgstr ""
+
+#: doc/classes/Directory.xml:51
+msgid ""
+"Returns whether the current item processed with the last [method get_next] "
+"call is a directory ([code].[/code] and [code]..[/code] are considered "
+"directories)."
+msgstr ""
+
+#: doc/classes/Directory.xml:58
+msgid ""
+"Returns whether the target directory exists. The argument can be relative to "
+"the current directory, or an absolute path."
+msgstr ""
+
+#: doc/classes/Directory.xml:65
+msgid ""
+"Returns whether the target file exists. The argument can be relative to the "
+"current directory, or an absolute path."
+msgstr ""
+
+#: doc/classes/Directory.xml:71
+msgid ""
+"Returns the absolute path to the currently opened directory (e.g. "
+"[code]res://folder[/code] or [code]C:\\tmp\\folder[/code])."
+msgstr ""
+
+#: doc/classes/Directory.xml:77
+msgid ""
+"Returns the currently opened directory's drive index. See [method get_drive] "
+"to convert returned index to the name of the drive."
+msgstr ""
+
+#: doc/classes/Directory.xml:84
+msgid ""
+"On Windows, returns the name of the drive (partition) passed as an argument "
+"(e.g. [code]C:[/code]). On other platforms, or if the requested drive does "
+"not exist, the method returns an empty String."
+msgstr ""
+
+#: doc/classes/Directory.xml:90
+msgid ""
+"On Windows, returns the number of drives (partitions) mounted on the current "
+"filesystem. On other platforms, the method returns 0."
+msgstr ""
+
+#: doc/classes/Directory.xml:96
+msgid ""
+"Returns the next element (file or directory) in the current directory "
+"(including [code].[/code] and [code]..[/code], unless "
+"[code]skip_navigational[/code] was given to [method list_dir_begin]).\n"
+"The name of the file or directory is returned (and not its full path). Once "
+"the stream has been fully processed, the method returns an empty String and "
+"closes the stream automatically (i.e. [method list_dir_end] would not be "
+"mandatory in such a case)."
+msgstr ""
+
+#: doc/classes/Directory.xml:103
+msgid ""
+"On UNIX desktop systems, returns the available space on the current "
+"directory's disk. On other platforms, this information is not available and "
+"the method returns 0 or -1."
+msgstr ""
+
+#: doc/classes/Directory.xml:111
+msgid ""
+"Initializes the stream used to list all files and directories using the "
+"[method get_next] function, closing the currently opened stream if needed. "
+"Once the stream has been processed, it should typically be closed with "
+"[method list_dir_end].\n"
+"If [code]skip_navigational[/code] is [code]true[/code], [code].[/code] and "
+"[code]..[/code] are filtered out.\n"
+"If [code]skip_hidden[/code] is [code]true[/code], hidden files are filtered "
+"out."
+msgstr ""
+
+#: doc/classes/Directory.xml:119
+msgid ""
+"Closes the current stream opened with [method list_dir_begin] (whether it "
+"has been fully processed with [method get_next] does not matter)."
+msgstr ""
+
+#: doc/classes/Directory.xml:126
+msgid ""
+"Creates a directory. The argument can be relative to the current directory, "
+"or an absolute path. The target directory should be placed in an already "
+"existing directory (to create the full path recursively, see [method "
+"make_dir_recursive]).\n"
+"Returns one of the [enum Error] code constants ([code]OK[/code] on success)."
+msgstr ""
+
+#: doc/classes/Directory.xml:134
+msgid ""
+"Creates a target directory and all necessary intermediate directories in its "
+"path, by calling [method make_dir] recursively. The argument can be relative "
+"to the current directory, or an absolute path.\n"
+"Returns one of the [enum Error] code constants ([code]OK[/code] on success)."
+msgstr ""
+
+#: doc/classes/Directory.xml:142
+msgid ""
+"Opens an existing directory of the filesystem. The [code]path[/code] "
+"argument can be within the project tree ([code]res://folder[/code]), the "
+"user directory ([code]user://folder[/code]) or an absolute path of the user "
+"filesystem (e.g. [code]/tmp/folder[/code] or [code]C:\\tmp\\folder[/code]).\n"
+"Returns one of the [enum Error] code constants ([code]OK[/code] on success)."
+msgstr ""
+
+#: doc/classes/Directory.xml:150
+msgid ""
+"Deletes the target file or an empty directory. The argument can be relative "
+"to the current directory, or an absolute path. If the target directory is "
+"not empty, the operation will fail.\n"
+"Returns one of the [enum Error] code constants ([code]OK[/code] on success)."
+msgstr ""
+
+#: doc/classes/Directory.xml:159
+msgid ""
+"Renames (move) the [code]from[/code] file or directory to the [code]to[/"
+"code] destination. Both arguments should be paths to files or directories, "
+"either relative or absolute. If the destination file or directory exists and "
+"is not access-protected, it will be overwritten.\n"
+"Returns one of the [enum Error] code constants ([code]OK[/code] on success)."
+msgstr ""
+
+#: doc/classes/DTLSServer.xml:4
+msgid "Helper class to implement a DTLS server."
+msgstr ""
+
+#: doc/classes/DTLSServer.xml:7
+msgid ""
+"This class is used to store the state of a DTLS server. Upon [method setup] "
+"it converts connected [PacketPeerUDP] to [PacketPeerDTLS] accepting them via "
+"[method take_connection] as DTLS clients. Under the hood, this class is used "
+"to store the DTLS state and cookies of the server. The reason of why the "
+"state and cookies are needed is outside of the scope of this documentation.\n"
+"Below a small example of how to use it:\n"
+"[codeblock]\n"
+"# server.gd\n"
+"extends Node\n"
+"\n"
+"var dtls := DTLSServer.new()\n"
+"var server := UDPServer.new()\n"
+"var peers = []\n"
+"\n"
+"func _ready():\n"
+" server.listen(4242)\n"
+" var key = load(\"key.key\") # Your private key.\n"
+" var cert = load(\"cert.crt\") # Your X509 certificate.\n"
+" dtls.setup(key, cert)\n"
+"\n"
+"func _process(delta):\n"
+" while server.is_connection_available():\n"
+" var peer : PacketPeerUDP = server.take_connection()\n"
+" var dtls_peer : PacketPeerDTLS = dtls.take_connection(peer)\n"
+" if dtls_peer.get_status() != PacketPeerDTLS.STATUS_HANDSHAKING:\n"
+" continue # It is normal that 50% of the connections fails due to "
+"cookie exchange.\n"
+" print(\"Peer connected!\")\n"
+" peers.append(dtls_peer)\n"
+" for p in peers:\n"
+" p.poll() # Must poll to update the state.\n"
+" if p.get_status() == PacketPeerDTLS.STATUS_CONNECTED:\n"
+" while p.get_available_packet_count() > 0:\n"
+" print(\"Received message from client: %s\" % p.get_packet()."
+"get_string_from_utf8())\n"
+" p.put_packet(\"Hello DTLS client\".to_utf8())\n"
+"[/codeblock]\n"
+"[codeblock]\n"
+"# client.gd\n"
+"extends Node\n"
+"\n"
+"var dtls := PacketPeerDTLS.new()\n"
+"var udp := PacketPeerUDP.new()\n"
+"var connected = false\n"
+"\n"
+"func _ready():\n"
+" udp.connect_to_host(\"127.0.0.1\", 4242)\n"
+" dtls.connect_to_peer(udp, false) # Use true in production for "
+"certificate validation!\n"
+"\n"
+"func _process(delta):\n"
+" dtls.poll()\n"
+" if dtls.get_status() == PacketPeerDTLS.STATUS_CONNECTED:\n"
+" if !connected:\n"
+" # Try to contact server\n"
+" dtls.put_packet(\"The answer is... 42!\".to_utf8())\n"
+" while dtls.get_available_packet_count() > 0:\n"
+" print(\"Connected: %s\" % dtls.get_packet()."
+"get_string_from_utf8())\n"
+" connected = true\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/DTLSServer.xml:70
+msgid ""
+"Setup the DTLS server to use the given [code]private_key[/code] and provide "
+"the given [code]certificate[/code] to clients. You can pass the optional "
+"[code]chain[/code] parameter to provide additional CA chain information "
+"along with the certificate."
+msgstr ""
+
+#: doc/classes/DTLSServer.xml:77
+msgid ""
+"Try to initiate the DTLS handshake with the given [code]udp_peer[/code] "
+"which must be already connected (see [method PacketPeerUDP."
+"connect_to_host]).\n"
+"[b]Note:[/b] You must check that the state of the return PacketPeerUDP is "
+"[constant PacketPeerDTLS.STATUS_HANDSHAKING], as it is normal that 50% of "
+"the new connections will be invalid due to cookie exchange."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:4
+msgid "DynamicFont renders vector font files at runtime."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:7
+msgid ""
+"DynamicFont renders vector font files dynamically at runtime instead of "
+"using a prerendered texture atlas like [BitmapFont]. This trades the faster "
+"loading time of [BitmapFont]s for the ability to change font parameters like "
+"size and spacing during runtime. [DynamicFontData] is used for referencing "
+"the font file paths. DynamicFont also supports defining one or more fallback "
+"fonts, which will be used when displaying a character not supported by the "
+"main font.\n"
+"DynamicFont uses the [url=https://www.freetype.org/]FreeType[/url] library "
+"for rasterization. Supported formats are TrueType ([code].ttf[/code]), "
+"OpenType ([code].otf[/code]) and Web Open Font Format 1 ([code].woff[/"
+"code]). Web Open Font Format 2 ([code].woff2[/code]) is [i]not[/i] "
+"supported.\n"
+"[codeblock]\n"
+"var dynamic_font = DynamicFont.new()\n"
+"dynamic_font.font_data = load(\"res://BarlowCondensed-Bold.ttf\")\n"
+"dynamic_font.size = 64\n"
+"$\"Label\".set(\"custom_fonts/font\", dynamic_font)\n"
+"[/codeblock]\n"
+"[b]Note:[/b] DynamicFont doesn't support features such as kerning, right-to-"
+"left typesetting, ligatures, text shaping, variable fonts and optional font "
+"features yet. If you wish to \"bake\" an optional font feature into a TTF "
+"font file, you can use [url=https://fontforge.org/]FontForge[/url] to do so. "
+"In FontForge, use [b]File > Generate Fonts[/b], click [b]Options[/b], choose "
+"the desired features then generate the font."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:25
+msgid "Adds a fallback font."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:31
+msgid ""
+"Returns a string containing all the characters available in the main and all "
+"the fallback fonts.\n"
+"If a given character is included in more than one font, it appears only once "
+"in the returned string."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:39
+msgid "Returns the fallback font at index [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:45
+msgid "Returns the number of fallback fonts."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:52
+msgid ""
+"Returns the spacing for the given [code]type[/code] (see [enum SpacingType])."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:59
+msgid "Removes the fallback font at index [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:67
+msgid "Sets the fallback font at index [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:75
+msgid ""
+"Sets the spacing for [code]type[/code] (see [enum SpacingType]) to "
+"[code]value[/code] in pixels (not relative to the font size)."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:81
+msgid "Extra spacing at the bottom in pixels."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:84
+msgid ""
+"Extra spacing for each character in pixels.\n"
+"This can be a negative number to make the distance between characters "
+"smaller."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:88
+msgid ""
+"Extra spacing for the space character (in addition to [member "
+"extra_spacing_char]) in pixels.\n"
+"This can be a negative number to make the distance between words smaller."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:92
+msgid "Extra spacing at the top in pixels."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:95
+msgid "The font data."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:98
+msgid ""
+"The font outline's color.\n"
+"[b]Note:[/b] It's recommended to leave this at the default value so that you "
+"can adjust it in individual controls. For example, if the outline is made "
+"black here, it won't be possible to change its color using a Label's font "
+"outline modulate theme item."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:102
+msgid "The font outline's thickness in pixels (not relative to the font size)."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:105
+msgid "The font size in pixels."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:108
+msgid ""
+"If [code]true[/code], filtering is used. This makes the font blurry instead "
+"of pixelated when scaling it if font oversampling is disabled or "
+"ineffective. It's recommended to enable this when using the font in a "
+"control whose size changes over time, unless a pixel art aesthetic is "
+"desired."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:111
+msgid ""
+"If [code]true[/code], mipmapping is used. This improves the font's "
+"appearance when downscaling it if font oversampling is disabled or "
+"ineffective."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:116
+msgid "Spacing at the top."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:119
+msgid "Spacing at the bottom."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:122
+msgid "Spacing for each character."
+msgstr ""
+
+#: doc/classes/DynamicFont.xml:125
+msgid "Spacing for the space character."
+msgstr ""
+
+#: doc/classes/DynamicFontData.xml:4
+msgid "Used with [DynamicFont] to describe the location of a font file."
+msgstr ""
+
+#: doc/classes/DynamicFontData.xml:7
+msgid ""
+"Used with [DynamicFont] to describe the location of a vector font file for "
+"dynamic rendering at runtime."
+msgstr ""
+
+#: doc/classes/DynamicFontData.xml:16
+msgid ""
+"If [code]true[/code], the font is rendered with anti-aliasing. This property "
+"applies both to the main font and its outline (if it has one)."
+msgstr ""
+
+#: doc/classes/DynamicFontData.xml:19
+msgid "The path to the vector font file."
+msgstr ""
+
+#: doc/classes/DynamicFontData.xml:22
+msgid "The font hinting mode used by FreeType. See [enum Hinting] for options."
+msgstr ""
+
+#: doc/classes/DynamicFontData.xml:27
+msgid "Disables font hinting (smoother but less crisp)."
+msgstr ""
+
+#: doc/classes/DynamicFontData.xml:30
+msgid "Use the light font hinting mode."
+msgstr ""
+
+#: doc/classes/DynamicFontData.xml:33
+msgid "Use the default font hinting mode (crisper but less smooth)."
+msgstr ""
+
+#: doc/classes/EditorExportPlugin.xml:4
+msgid "A script that is executed when exporting the project."
+msgstr ""
+
+#: doc/classes/EditorExportPlugin.xml:7
+msgid ""
+"Editor export plugins are automatically activated whenever the user exports "
+"the project. Their most common use is to determine what files are being "
+"included in the exported project. For each plugin, [method _export_begin] is "
+"called at the beginning of the export process and then [method _export_file] "
+"is called for each exported file."
+msgstr ""
+
+#: doc/classes/EditorExportPlugin.xml:19
+msgid ""
+"Virtual method to be overridden by the user. It is called when the export "
+"starts and provides all information about the export. [code]features[/code] "
+"is the list of features for the export, [code]is_debug[/code] is [code]true[/"
+"code] for debug builds, [code]path[/code] is the target path for the "
+"exported project. [code]flags[/code] is only used when running a runnable "
+"profile, e.g. when using native run on Android."
+msgstr ""
+
+#: doc/classes/EditorExportPlugin.xml:25
+msgid ""
+"Virtual method to be overridden by the user. Called when the export is "
+"finished."
+msgstr ""
+
+#: doc/classes/EditorExportPlugin.xml:34
+msgid ""
+"Virtual method to be overridden by the user. Called for each exported file, "
+"providing arguments that can be used to identify the file. [code]path[/code] "
+"is the path of the file, [code]type[/code] is the [Resource] represented by "
+"the file (e.g. [PackedScene]) and [code]features[/code] is the list of "
+"features for the export.\n"
+"Calling [method skip] inside this callback will make the file not included "
+"in the export."
+msgstr ""
+
+#: doc/classes/EditorExportPlugin.xml:44
+msgid ""
+"Adds a custom file to be exported. [code]path[/code] is the virtual path "
+"that can be used to load the file, [code]file[/code] is the binary data of "
+"the file. If [code]remap[/code] is [code]true[/code], file will not be "
+"exported, but instead remapped to the given [code]path[/code]."
+msgstr ""
+
+#: doc/classes/EditorExportPlugin.xml:51
+msgid ""
+"Adds an iOS bundle file from the given [code]path[/code] to the exported "
+"project."
+msgstr ""
+
+#: doc/classes/EditorExportPlugin.xml:58
+msgid ""
+"Adds a C++ code to the iOS export. The final code is created from the code "
+"appended by each active export plugin."
+msgstr ""
+
+#: doc/classes/EditorExportPlugin.xml:65
+msgid ""
+"Adds a dynamic library (*.dylib, *.framework) to Linking Phase in iOS's "
+"Xcode project and embeds it into resulting binary.\n"
+"[b]Note:[/b] For static libraries (*.a) works in same way as [method "
+"add_ios_framework].\n"
+"This method should not be used for System libraries as they are already "
+"present on the device."
+msgstr ""
+
+#: doc/classes/EditorExportPlugin.xml:74
+msgid ""
+"Adds a static library (*.a) or dynamic library (*.dylib, *.framework) to "
+"Linking Phase in iOS's Xcode project."
+msgstr ""
+
+#: doc/classes/EditorExportPlugin.xml:81
+msgid "Adds linker flags for the iOS export."
+msgstr ""
+
+#: doc/classes/EditorExportPlugin.xml:88
+msgid "Adds content for iOS Property List files."
+msgstr ""
+
+#: doc/classes/EditorExportPlugin.xml:95
+msgid "Adds a static lib from the given [code]path[/code] to the iOS project."
+msgstr ""
+
+#: doc/classes/EditorExportPlugin.xml:103
+msgid ""
+"Adds a shared object with the given [code]tags[/code] and destination "
+"[code]path[/code]."
+msgstr ""
+
+#: doc/classes/EditorExportPlugin.xml:109
+msgid ""
+"To be called inside [method _export_file]. Skips the current file, so it's "
+"not included in the export."
+msgstr ""
+
+#: doc/classes/EditorFeatureProfile.xml:4
+msgid ""
+"An editor feature profile which can be used to disable specific features."
+msgstr ""
+
+#: doc/classes/EditorFeatureProfile.xml:7
+msgid ""
+"An editor feature profile can be used to disable specific features of the "
+"Godot editor. When disabled, the features won't appear in the editor, which "
+"makes the editor less cluttered. This is useful in education settings to "
+"reduce confusion or when working in a team. For example, artists and level "
+"designers could use a feature profile that disables the script editor to "
+"avoid accidentally making changes to files they aren't supposed to edit.\n"
+"To manage editor feature profiles visually, use [b]Editor > Manage Feature "
+"Profiles...[/b] at the top of the editor window."
+msgstr ""
+
+#: doc/classes/EditorFeatureProfile.xml:17
+msgid "Returns the specified [code]feature[/code]'s human-readable name."
+msgstr ""
+
+#: doc/classes/EditorFeatureProfile.xml:24
+msgid ""
+"Returns [code]true[/code] if the class specified by [code]class_name[/code] "
+"is disabled. When disabled, the class won't appear in the Create New Node "
+"dialog."
+msgstr ""
+
+#: doc/classes/EditorFeatureProfile.xml:31
+msgid ""
+"Returns [code]true[/code] if editing for the class specified by "
+"[code]class_name[/code] is disabled. When disabled, the class will still "
+"appear in the Create New Node dialog but the inspector will be read-only "
+"when selecting a node that extends the class."
+msgstr ""
+
+#: doc/classes/EditorFeatureProfile.xml:39
+msgid ""
+"Returns [code]true[/code] if [code]property[/code] is disabled in the class "
+"specified by [code]class_name[/code]. When a property is disabled, it won't "
+"appear in the inspector when selecting a node that extends the class "
+"specified by [code]class_name[/code]."
+msgstr ""
+
+#: doc/classes/EditorFeatureProfile.xml:46
+msgid ""
+"Returns [code]true[/code] if the [code]feature[/code] is disabled. When a "
+"feature is disabled, it will disappear from the editor entirely."
+msgstr ""
+
+#: doc/classes/EditorFeatureProfile.xml:53
+msgid ""
+"Loads an editor feature profile from a file. The file must follow the JSON "
+"format obtained by using the feature profile manager's [b]Export[/b] button "
+"or the [method save_to_file] method."
+msgstr ""
+
+#: doc/classes/EditorFeatureProfile.xml:60
+msgid ""
+"Saves the editor feature profile to a file in JSON format. It can then be "
+"imported using the feature profile manager's [b]Import[/b] button or the "
+"[method load_from_file] button."
+msgstr ""
+
+#: doc/classes/EditorFeatureProfile.xml:68
+msgid ""
+"If [code]disable[/code] is [code]true[/code], disables the class specified "
+"by [code]class_name[/code]. When disabled, the class won't appear in the "
+"Create New Node dialog."
+msgstr ""
+
+#: doc/classes/EditorFeatureProfile.xml:76
+msgid ""
+"If [code]disable[/code] is [code]true[/code], disables editing for the class "
+"specified by [code]class_name[/code]. When disabled, the class will still "
+"appear in the Create New Node dialog but the inspector will be read-only "
+"when selecting a node that extends the class."
+msgstr ""
+
+#: doc/classes/EditorFeatureProfile.xml:85
+msgid ""
+"If [code]disable[/code] is [code]true[/code], disables editing for "
+"[code]property[/code] in the class specified by [code]class_name[/code]. "
+"When a property is disabled, it won't appear in the inspector when selecting "
+"a node that extends the class specified by [code]class_name[/code]."
+msgstr ""
+
+#: doc/classes/EditorFeatureProfile.xml:93
+msgid ""
+"If [code]disable[/code] is [code]true[/code], disables the editor feature "
+"specified in [code]feature[/code]. When a feature is disabled, it will "
+"disappear from the editor entirely."
+msgstr ""
+
+#: doc/classes/EditorFeatureProfile.xml:99
+msgid ""
+"The 3D editor. If this feature is disabled, the 3D editor won't display but "
+"3D nodes will still display in the Create New Node dialog."
+msgstr ""
+
+#: doc/classes/EditorFeatureProfile.xml:102
+msgid ""
+"The Script tab, which contains the script editor and class reference "
+"browser. If this feature is disabled, the Script tab won't display."
+msgstr ""
+
+#: doc/classes/EditorFeatureProfile.xml:105
+msgid ""
+"The AssetLib tab. If this feature is disabled, the AssetLib tab won't "
+"display."
+msgstr ""
+
+#: doc/classes/EditorFeatureProfile.xml:108
+msgid ""
+"Scene tree editing. If this feature is disabled, the Scene tree dock will "
+"still be visible but will be read-only."
+msgstr ""
+
+#: doc/classes/EditorFeatureProfile.xml:111
+msgid ""
+"The Node dock. If this feature is disabled, signals and groups won't be "
+"visible and modifiable from the editor."
+msgstr ""
+
+#: doc/classes/EditorFeatureProfile.xml:114
+msgid ""
+"The FileSystem dock. If this feature is disabled, the FileSystem dock won't "
+"be visible."
+msgstr ""
+
+#: doc/classes/EditorFeatureProfile.xml:117
+msgid ""
+"The Import dock. If this feature is disabled, the Import dock won't be "
+"visible."
+msgstr ""
+
+#: doc/classes/EditorFeatureProfile.xml:120 doc/classes/SpatialMaterial.xml:471
+msgid "Represents the size of the [enum Feature] enum."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:4
+msgid "A modified version of [FileDialog] used by the editor."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:15
+msgid ""
+"Adds a comma-delimited file extension filter option to the "
+"[EditorFileDialog] with an optional semi-colon-delimited label.\n"
+"For example, [code]\"*.tscn, *.scn; Scenes\"[/code] results in filter text "
+"\"Scenes (*.tscn, *.scn)\"."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:22
+msgid "Removes all filters except for \"All Files (*)\"."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:28
+msgid ""
+"Returns the [code]VBoxContainer[/code] used to display the file system.\n"
+"[b]Warning:[/b] This is a required internal node, removing and freeing it "
+"may cause a crash. If you wish to hide it or any of its children, use their "
+"[member CanvasItem.visible] property."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:35
+msgid ""
+"Notify the [EditorFileDialog] that its view of the data is no longer "
+"accurate. Updates the view contents on next view update."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:41
+msgid ""
+"The location from which the user may select a file, including [code]res://[/"
+"code], [code]user://[/code], and the local file system."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:44
+msgid "The currently occupied directory."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:47
+msgid "The currently selected file."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:50
+msgid "The file system path in the address bar."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:54
+msgid ""
+"If [code]true[/code], the [EditorFileDialog] will not warn the user before "
+"overwriting files."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:57
+msgid ""
+"The view format in which the [EditorFileDialog] displays resources to the "
+"user."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:60
+msgid ""
+"The purpose of the [EditorFileDialog], which defines the allowed behaviors."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:64
+msgid ""
+"If [code]true[/code], hidden files and directories will be visible in the "
+"[EditorFileDialog]."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:72
+msgid "Emitted when a directory is selected."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:78
+msgid "Emitted when a file is selected."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:84
+msgid "Emitted when multiple files are selected."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:90
+msgid ""
+"The [EditorFileDialog] can select only one file. Accepting the window will "
+"open the file."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:93
+msgid ""
+"The [EditorFileDialog] can select multiple files. Accepting the window will "
+"open all files."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:96
+msgid ""
+"The [EditorFileDialog] can select only one directory. Accepting the window "
+"will open the directory."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:99
+msgid ""
+"The [EditorFileDialog] can select a file or directory. Accepting the window "
+"will open it."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:102
+msgid ""
+"The [EditorFileDialog] can select only one file. Accepting the window will "
+"save the file."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:105
+msgid ""
+"The [EditorFileDialog] can only view [code]res://[/code] directory contents."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:108
+msgid ""
+"The [EditorFileDialog] can only view [code]user://[/code] directory contents."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:111
+msgid "The [EditorFileDialog] can view the entire local file system."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:114
+msgid "The [EditorFileDialog] displays resources as thumbnails."
+msgstr ""
+
+#: doc/classes/EditorFileDialog.xml:117
+msgid "The [EditorFileDialog] displays resources as a list of filenames."
+msgstr ""
+
+#: doc/classes/EditorFileSystem.xml:4
+msgid "Resource filesystem, as the editor sees it."
+msgstr ""
+
+#: doc/classes/EditorFileSystem.xml:7
+msgid ""
+"This object holds information of all resources in the filesystem, their "
+"types, etc.\n"
+"[b]Note:[/b] This class shouldn't be instantiated directly. Instead, access "
+"the singleton using [method EditorInterface.get_resource_filesystem]."
+msgstr ""
+
+#: doc/classes/EditorFileSystem.xml:17
+msgid ""
+"Returns the resource type of the file, given the full path. This returns a "
+"string such as [code]\"Resource\"[/code] or [code]\"GDScript\"[/code], "
+"[i]not[/i] a file extension such as [code]\".gd\"[/code]."
+msgstr ""
+
+#: doc/classes/EditorFileSystem.xml:23
+msgid "Gets the root directory object."
+msgstr ""
+
+#: doc/classes/EditorFileSystem.xml:30
+msgid "Returns a view into the filesystem at [code]path[/code]."
+msgstr ""
+
+#: doc/classes/EditorFileSystem.xml:36
+msgid "Returns the scan progress for 0 to 1 if the FS is being scanned."
+msgstr ""
+
+#: doc/classes/EditorFileSystem.xml:42
+msgid "Returns [code]true[/code] of the filesystem is being scanned."
+msgstr ""
+
+#: doc/classes/EditorFileSystem.xml:48
+msgid "Scan the filesystem for changes."
+msgstr ""
+
+#: doc/classes/EditorFileSystem.xml:54
+msgid "Check if the source of any imported resource changed."
+msgstr ""
+
+#: doc/classes/EditorFileSystem.xml:61
+msgid ""
+"Update a file information. Call this if an external program (not Godot) "
+"modified the file."
+msgstr ""
+
+#: doc/classes/EditorFileSystem.xml:67
+msgid "Scans the script files and updates the list of custom class names."
+msgstr ""
+
+#: doc/classes/EditorFileSystem.xml:74
+msgid "Emitted if the filesystem changed."
+msgstr ""
+
+#: doc/classes/EditorFileSystem.xml:80
+msgid "Emitted if a resource is reimported."
+msgstr ""
+
+#: doc/classes/EditorFileSystem.xml:86
+msgid ""
+"Emitted if at least one resource is reloaded when the filesystem is scanned."
+msgstr ""
+
+#: doc/classes/EditorFileSystem.xml:92
+msgid "Emitted if the source of any imported file changed."
+msgstr ""
+
+#: doc/classes/EditorFileSystemDirectory.xml:4
+msgid "A directory for the resource filesystem."
+msgstr ""
+
+#: doc/classes/EditorFileSystemDirectory.xml:7
+msgid "A more generalized, low-level variation of the directory concept."
+msgstr ""
+
+#: doc/classes/EditorFileSystemDirectory.xml:16
+msgid ""
+"Returns the index of the directory with name [code]name[/code] or [code]-1[/"
+"code] if not found."
+msgstr ""
+
+#: doc/classes/EditorFileSystemDirectory.xml:23
+msgid ""
+"Returns the index of the file with name [code]name[/code] or [code]-1[/code] "
+"if not found."
+msgstr ""
+
+#: doc/classes/EditorFileSystemDirectory.xml:30
+msgid "Returns the name of the file at index [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/EditorFileSystemDirectory.xml:36
+msgid "Returns the number of files in this directory."
+msgstr ""
+
+#: doc/classes/EditorFileSystemDirectory.xml:43
+msgid ""
+"Returns [code]true[/code] if the file at index [code]idx[/code] imported "
+"properly."
+msgstr ""
+
+#: doc/classes/EditorFileSystemDirectory.xml:50
+msgid "Returns the path to the file at index [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/EditorFileSystemDirectory.xml:57
+msgid ""
+"Returns the base class of the script class defined in the file at index "
+"[code]idx[/code]. If the file doesn't define a script class using the "
+"[code]class_name[/code] syntax, this will return an empty string."
+msgstr ""
+
+#: doc/classes/EditorFileSystemDirectory.xml:64
+msgid ""
+"Returns the name of the script class defined in the file at index [code]idx[/"
+"code]. If the file doesn't define a script class using the [code]class_name[/"
+"code] syntax, this will return an empty string."
+msgstr ""
+
+#: doc/classes/EditorFileSystemDirectory.xml:71
+msgid ""
+"Returns the resource type of the file at index [code]idx[/code]. This "
+"returns a string such as [code]\"Resource\"[/code] or [code]\"GDScript\"[/"
+"code], [i]not[/i] a file extension such as [code]\".gd\"[/code]."
+msgstr ""
+
+#: doc/classes/EditorFileSystemDirectory.xml:77
+msgid "Returns the name of this directory."
+msgstr ""
+
+#: doc/classes/EditorFileSystemDirectory.xml:83
+msgid ""
+"Returns the parent directory for this directory or [code]null[/code] if "
+"called on a directory at [code]res://[/code] or [code]user://[/code]."
+msgstr ""
+
+#: doc/classes/EditorFileSystemDirectory.xml:89
+msgid "Returns the path to this directory."
+msgstr ""
+
+#: doc/classes/EditorFileSystemDirectory.xml:96
+msgid "Returns the subdirectory at index [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/EditorFileSystemDirectory.xml:102
+msgid "Returns the number of subdirectories in this directory."
+msgstr ""
+
+#: doc/classes/EditorImportPlugin.xml:4
+msgid ""
+"Registers a custom resource importer in the editor. Use the class to parse "
+"any file and import it as a new resource type."
+msgstr ""
+
+#: doc/classes/EditorImportPlugin.xml:7
+msgid ""
+"EditorImportPlugins provide a way to extend the editor's resource import "
+"functionality. Use them to import resources from custom files or to provide "
+"alternatives to the editor's existing importers. Register your "
+"[EditorPlugin] with [method EditorPlugin.add_import_plugin].\n"
+"EditorImportPlugins work by associating with specific file extensions and a "
+"resource type. See [method get_recognized_extensions] and [method "
+"get_resource_type]. They may optionally specify some import presets that "
+"affect the import process. EditorImportPlugins are responsible for creating "
+"the resources and saving them in the [code].import[/code] directory (see "
+"[member ProjectSettings.application/config/"
+"use_hidden_project_data_directory]).\n"
+"Below is an example EditorImportPlugin that imports a [Mesh] from a file "
+"with the extension \".special\" or \".spec\":\n"
+"[codeblock]\n"
+"tool\n"
+"extends EditorImportPlugin\n"
+"\n"
+"func get_importer_name():\n"
+" return \"my.special.plugin\"\n"
+"\n"
+"func get_visible_name():\n"
+" return \"Special Mesh\"\n"
+"\n"
+"func get_recognized_extensions():\n"
+" return [\"special\", \"spec\"]\n"
+"\n"
+"func get_save_extension():\n"
+" return \"mesh\"\n"
+"\n"
+"func get_resource_type():\n"
+" return \"Mesh\"\n"
+"\n"
+"func get_preset_count():\n"
+" return 1\n"
+"\n"
+"func get_preset_name(i):\n"
+" return \"Default\"\n"
+"\n"
+"func get_import_options(i):\n"
+" return [{\"name\": \"my_option\", \"default_value\": false}]\n"
+"\n"
+"func import(source_file, save_path, options, platform_variants, gen_files):\n"
+" var file = File.new()\n"
+" if file.open(source_file, File.READ) != OK:\n"
+" return FAILED\n"
+"\n"
+" var mesh = Mesh.new()\n"
+" # Fill the Mesh with data read in \"file\", left as an exercise to the "
+"reader\n"
+"\n"
+" var filename = save_path + \".\" + get_save_extension()\n"
+" return ResourceSaver.save(filename, mesh)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/EditorImportPlugin.xml:51 doc/classes/ResourceImporter.xml:10
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/plugins/editor/import_plugins."
+"html"
+msgstr ""
+
+#: doc/classes/EditorImportPlugin.xml:58
+msgid ""
+"Gets the options and default values for the preset at this index. Returns an "
+"Array of Dictionaries with the following keys: [code]name[/code], "
+"[code]default_value[/code], [code]property_hint[/code] (optional), "
+"[code]hint_string[/code] (optional), [code]usage[/code] (optional)."
+msgstr ""
+
+#: doc/classes/EditorImportPlugin.xml:64
+msgid ""
+"Gets the order of this importer to be run when importing resources. "
+"Importers with [i]lower[/i] import orders will be called first, and higher "
+"values will be called later. Use this to ensure the importer runs after the "
+"dependencies are already imported. The default import order is [code]0[/"
+"code] unless overridden by a specific importer. See [enum ResourceImporter."
+"ImportOrder] for some predefined values."
+msgstr ""
+
+#: doc/classes/EditorImportPlugin.xml:70
+msgid "Gets the unique name of the importer."
+msgstr ""
+
+#: doc/classes/EditorImportPlugin.xml:78
+msgid ""
+"This method can be overridden to hide specific import options if conditions "
+"are met. This is mainly useful for hiding options that depend on others if "
+"one of them is disabled. For example:\n"
+"[codeblock]\n"
+"func get_option_visibility(option, options):\n"
+" # Only show the lossy quality setting if the compression mode is set to "
+"\"Lossy\".\n"
+" if option == \"compress/lossy_quality\" and options.has(\"compress/mode"
+"\"):\n"
+" return int(options[\"compress/mode\"]) == COMPRESS_LOSSY\n"
+"\n"
+" return true\n"
+"[/codeblock]\n"
+"Return [code]true[/code] to make all options always visible."
+msgstr ""
+
+#: doc/classes/EditorImportPlugin.xml:93
+msgid ""
+"Gets the number of initial presets defined by the plugin. Use [method "
+"get_import_options] to get the default options for the preset and [method "
+"get_preset_name] to get the name of the preset."
+msgstr ""
+
+#: doc/classes/EditorImportPlugin.xml:100
+msgid "Gets the name of the options preset at this index."
+msgstr ""
+
+#: doc/classes/EditorImportPlugin.xml:106
+msgid ""
+"Gets the priority of this plugin for the recognized extension. Higher "
+"priority plugins will be preferred. The default priority is [code]1.0[/code]."
+msgstr ""
+
+#: doc/classes/EditorImportPlugin.xml:112
+msgid ""
+"Gets the list of file extensions to associate with this loader (case-"
+"insensitive). e.g. [code][\"obj\"][/code]."
+msgstr ""
+
+#: doc/classes/EditorImportPlugin.xml:118
+msgid ""
+"Gets the Godot resource type associated with this loader. e.g. [code]\"Mesh"
+"\"[/code] or [code]\"Animation\"[/code]."
+msgstr ""
+
+#: doc/classes/EditorImportPlugin.xml:124
+msgid ""
+"Gets the extension used to save this resource in the [code].import[/code] "
+"directory (see [member ProjectSettings.application/config/"
+"use_hidden_project_data_directory])."
+msgstr ""
+
+#: doc/classes/EditorImportPlugin.xml:130
+msgid ""
+"Gets the name to display in the import window. You should choose this name "
+"as a continuation to \"Import as\", e.g. \"Import as Special Mesh\"."
+msgstr ""
+
+#: doc/classes/EditorImportPlugin.xml:141
+msgid ""
+"Imports [code]source_file[/code] into [code]save_path[/code] with the import "
+"[code]options[/code] specified. The [code]platform_variants[/code] and "
+"[code]gen_files[/code] arrays will be modified by this function.\n"
+"This method must be overridden to do the actual importing work. See this "
+"class' description for an example of overriding this method."
+msgstr ""
+
+#: doc/classes/EditorInspector.xml:4
+msgid "A tab used to edit properties of the selected node."
+msgstr ""
+
+#: doc/classes/EditorInspector.xml:7
+msgid ""
+"The editor inspector is by default located on the right-hand side of the "
+"editor. It's used to edit the properties of the selected node. For example, "
+"you can select a node such as [Sprite] then edit its transform through the "
+"inspector tool. The editor inspector is an essential tool in the game "
+"development workflow.\n"
+"[b]Note:[/b] This class shouldn't be instantiated directly. Instead, access "
+"the singleton using [method EditorInterface.get_inspector]."
+msgstr ""
+
+#: doc/classes/EditorInspector.xml:16
+msgid ""
+"Refreshes the inspector.\n"
+"[b]Note:[/b] To save on CPU resources, calling this method will do nothing "
+"if the time specified in [code]docks/property_editor/auto_refresh_interval[/"
+"code] editor setting hasn't passed yet since this method was last called. "
+"(By default, this interval is set to 0.3 seconds.)"
+msgstr ""
+
+#: doc/classes/EditorInspector.xml:28
+msgid ""
+"Emitted when the Edit button of an [Object] has been pressed in the "
+"inspector. This is mainly used in the remote scene tree inspector."
+msgstr ""
+
+#: doc/classes/EditorInspector.xml:34
+msgid "Emitted when a property is edited in the inspector."
+msgstr ""
+
+#: doc/classes/EditorInspector.xml:40
+msgid ""
+"Emitted when a property is keyed in the inspector. Properties can be keyed "
+"by clicking the \"key\" icon next to a property when the Animation panel is "
+"toggled."
+msgstr ""
+
+#: doc/classes/EditorInspector.xml:46
+msgid "Emitted when a property is selected in the inspector."
+msgstr ""
+
+#: doc/classes/EditorInspector.xml:53
+msgid ""
+"Emitted when a boolean property is toggled in the inspector.\n"
+"[b]Note:[/b] This signal is never emitted if the internal [code]autoclear[/"
+"code] property enabled. Since this property is always enabled in the editor "
+"inspector, this signal is never emitted by the editor itself."
+msgstr ""
+
+#: doc/classes/EditorInspector.xml:61
+msgid "Emitted when a resource is selected in the inspector."
+msgstr ""
+
+#: doc/classes/EditorInspector.xml:66
+msgid ""
+"Emitted when a property that requires a restart to be applied is edited in "
+"the inspector. This is only used in the Project Settings and Editor Settings."
+msgstr ""
+
+#: doc/classes/EditorInspectorPlugin.xml:4
+msgid "Plugin for adding custom property editors on inspector."
+msgstr ""
+
+#: doc/classes/EditorInspectorPlugin.xml:7
+msgid ""
+"These plugins allow adding custom property editors to [EditorInspector].\n"
+"Plugins are registered via [method EditorPlugin.add_inspector_plugin].\n"
+"When an object is edited, the [method can_handle] function is called and "
+"must return [code]true[/code] if the object type is supported.\n"
+"If supported, the function [method parse_begin] will be called, allowing to "
+"place custom controls at the beginning of the class.\n"
+"Subsequently, the [method parse_category] and [method parse_property] are "
+"called for every category and property. They offer the ability to add custom "
+"controls to the inspector too.\n"
+"Finally, [method parse_end] will be called.\n"
+"On each of these calls, the \"add\" functions can be called."
+msgstr ""
+
+#: doc/classes/EditorInspectorPlugin.xml:16
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/plugins/editor/"
+"inspector_plugins.html"
+msgstr ""
+
+#: doc/classes/EditorInspectorPlugin.xml:23
+msgid "Adds a custom control, which is not necessarily a property editor."
+msgstr ""
+
+#: doc/classes/EditorInspectorPlugin.xml:31
+msgid ""
+"Adds a property editor for an individual property. The [code]editor[/code] "
+"control must extend [EditorProperty]."
+msgstr ""
+
+#: doc/classes/EditorInspectorPlugin.xml:40
+msgid ""
+"Adds an editor that allows modifying multiple properties. The [code]editor[/"
+"code] control must extend [EditorProperty]."
+msgstr ""
+
+#: doc/classes/EditorInspectorPlugin.xml:47
+msgid "Returns [code]true[/code] if this object can be handled by this plugin."
+msgstr ""
+
+#: doc/classes/EditorInspectorPlugin.xml:54
+msgid "Called to allow adding controls at the beginning of the list."
+msgstr ""
+
+#: doc/classes/EditorInspectorPlugin.xml:62
+msgid "Called to allow adding controls at the beginning of the category."
+msgstr ""
+
+#: doc/classes/EditorInspectorPlugin.xml:68
+msgid "Called to allow adding controls at the end of the list."
+msgstr ""
+
+#: doc/classes/EditorInspectorPlugin.xml:80
+msgid ""
+"Called to allow adding property specific editors to the inspector. Usually "
+"these inherit [EditorProperty]. Returning [code]true[/code] removes the "
+"built-in editor for this property, otherwise allows to insert a custom "
+"editor before the built-in one."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:4
+msgid "Godot editor's interface."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:7
+msgid ""
+"EditorInterface gives you control over Godot editor's window. It allows "
+"customizing the window, saving and (re-)loading scenes, rendering mesh "
+"previews, inspecting and editing resources and objects, and provides access "
+"to [EditorSettings], [EditorFileSystem], [EditorResourcePreview], "
+"[ScriptEditor], the editor viewport, and information about scenes.\n"
+"[b]Note:[/b] This class shouldn't be instantiated directly. Instead, access "
+"the singleton using [method EditorPlugin.get_editor_interface]."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:17
+msgid ""
+"Edits the given [Node]. The node will be also selected if it's inside the "
+"scene tree."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:24
+msgid "Edits the given [Resource]."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:30
+msgid ""
+"Returns the main container of Godot editor's window. For example, you can "
+"use it to retrieve the size of the container and place your controls "
+"accordingly.\n"
+"[b]Warning:[/b] Removing and freeing this node will render the editor "
+"useless and may cause a crash."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:37
+msgid "Returns the current path being viewed in the [FileSystemDock]."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:43
+msgid "Returns the edited (current) scene's root [Node]."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:49
+msgid ""
+"Returns the actual scale of the editor UI ([code]1.0[/code] being 100% "
+"scale). This can be used to adjust position and dimensions of the UI added "
+"by plugins.\n"
+"[b]Note:[/b] This value is set via the [code]interface/editor/display_scale[/"
+"code] and [code]interface/editor/custom_display_scale[/code] editor "
+"settings. Editor must be restarted for changes to be properly applied."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:56
+msgid "Returns the editor's [EditorSettings] instance."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:62
+msgid ""
+"Returns the main editor control. Use this as a parent for main screens.\n"
+"[b]Note:[/b] This returns the main editor control containing the whole "
+"editor, not the 2D or 3D viewports specifically.\n"
+"[b]Warning:[/b] Removing and freeing this node will render a part of the "
+"editor useless and may cause a crash."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:70
+msgid ""
+"Returns the editor's [FileSystemDock] instance.\n"
+"[b]Warning:[/b] Removing and freeing this node will render a part of the "
+"editor useless and may cause a crash."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:77
+msgid ""
+"Returns the editor's [EditorInspector] instance.\n"
+"[b]Warning:[/b] Removing and freeing this node will render a part of the "
+"editor useless and may cause a crash."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:84
+msgid "Returns an [Array] with the file paths of the currently opened scenes."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:90
+msgid ""
+"Returns the name of the scene that is being played. If no scene is currently "
+"being played, returns an empty string."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:96
+msgid "Returns the editor's [EditorFileSystem] instance."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:102
+msgid "Returns the editor's [EditorResourcePreview] instance."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:108
+msgid ""
+"Returns the editor's [ScriptEditor] instance.\n"
+"[b]Warning:[/b] Removing and freeing this node will render a part of the "
+"editor useless and may cause a crash."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:115
+msgid ""
+"Returns the path of the directory currently selected in the "
+"[FileSystemDock]. If a file is selected, its base directory will be returned "
+"using [method String.get_base_dir] instead."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:121
+msgid "Returns the editor's [EditorSelection] instance."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:130
+msgid ""
+"Shows the given property on the given [code]object[/code] in the editor's "
+"Inspector dock. If [code]inspector_only[/code] is [code]true[/code], plugins "
+"will not attempt to edit [code]object[/code]."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:136
+msgid ""
+"Returns [code]true[/code] if a scene is currently being played, [code]false[/"
+"code] otherwise. Paused scenes are considered as being played."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:143
+msgid ""
+"Returns [code]true[/code] if the specified [code]plugin[/code] is enabled. "
+"The plugin name is the same as its directory name."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:151
+msgid ""
+"Returns mesh previews rendered at the given size as an [Array] of [Texture]s."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:158
+msgid "Opens the scene at the given path."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:164
+msgid "Plays the currently active scene."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:171
+msgid "Plays the scene specified by its filepath."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:177
+msgid "Plays the main scene."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:184
+msgid "Reloads the scene at the given path."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:190
+msgid ""
+"Saves the scene. Returns either [code]OK[/code] or [code]ERR_CANT_CREATE[/"
+"code] (see [@GlobalScope] constants)."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:198
+msgid "Saves the scene as a file at [code]path[/code]."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:205
+msgid ""
+"Selects the file, with the path provided by [code]file[/code], in the "
+"FileSystem dock."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:212
+msgid ""
+"Sets the editor's current main screen to the one specified in [code]name[/"
+"code]. [code]name[/code] must match the text of the tab in question exactly "
+"([code]2D[/code], [code]3D[/code], [code]Script[/code], [code]AssetLib[/"
+"code])."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:220
+msgid ""
+"Sets the enabled status of a plugin. The plugin name is the same as its "
+"directory name."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:226
+msgid "Stops the scene that is currently playing."
+msgstr ""
+
+#: doc/classes/EditorInterface.xml:232
+msgid ""
+"If [code]true[/code], enables distraction-free mode which hides side docks "
+"to increase the space available for the main view."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:4
+msgid "Used by the editor to extend its functionality."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:7
+msgid ""
+"Plugins are used by the editor to extend functionality. The most common "
+"types of plugins are those which edit a given node or resource type, import "
+"plugins and export plugins. See also [EditorScript] to add functions to the "
+"editor."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:10
+msgid "https://docs.godotengine.org/en/3.4/tutorials/plugins/editor/index.html"
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:18
+msgid ""
+"Adds a script at [code]path[/code] to the Autoload list as [code]name[/code]."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:26
+msgid ""
+"Adds a control to the bottom panel (together with Output, Debug, Animation, "
+"etc). Returns a reference to the button added. It's up to you to hide/show "
+"the button when needed. When your plugin is deactivated, make sure to remove "
+"your custom control with [method remove_control_from_bottom_panel] and free "
+"it with [method Node.queue_free]."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:34
+msgid ""
+"Adds a custom control to a container (see [enum CustomControlContainer]). "
+"There are many locations where custom controls can be added in the editor "
+"UI.\n"
+"Please remember that you have to manage the visibility of your custom "
+"controls yourself (and likely hide it after adding it).\n"
+"When your plugin is deactivated, make sure to remove your custom control "
+"with [method remove_control_from_container] and free it with [method Node."
+"queue_free]."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:44
+msgid ""
+"Adds the control to a specific dock slot (see [enum DockSlot] for options).\n"
+"If the dock is repositioned and as long as the plugin is active, the editor "
+"will save the dock position on further sessions.\n"
+"When your plugin is deactivated, make sure to remove your custom control "
+"with [method remove_control_from_docks] and free it with [method Node."
+"queue_free]."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:56
+msgid ""
+"Adds a custom type, which will appear in the list of nodes or resources. An "
+"icon can be optionally passed.\n"
+"When given node or resource is selected, the base type will be instanced "
+"(ie, \"Spatial\", \"Control\", \"Resource\"), then the script will be loaded "
+"and set to this object.\n"
+"You can use the virtual method [method handles] to check if your custom "
+"object is being edited by checking the script or using the [code]is[/code] "
+"keyword.\n"
+"During run-time, this will be a simple object with a script so this function "
+"does not need to be called then."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:66
+msgid ""
+"Registers a new [EditorExportPlugin]. Export plugins are used to perform "
+"tasks when the project is being exported.\n"
+"See [method add_inspector_plugin] for an example of how to register a plugin."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:74
+msgid ""
+"Registers a new [EditorImportPlugin]. Import plugins are used to import "
+"custom and unsupported assets as a custom [Resource] type.\n"
+"[b]Note:[/b] If you want to import custom 3D asset formats use [method "
+"add_scene_import_plugin] instead.\n"
+"See [method add_inspector_plugin] for an example of how to register a plugin."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:83
+msgid ""
+"Registers a new [EditorInspectorPlugin]. Inspector plugins are used to "
+"extend [EditorInspector] and provide custom configuration tools for your "
+"object's properties.\n"
+"[b]Note:[/b] Always use [method remove_inspector_plugin] to remove the "
+"registered [EditorInspectorPlugin] when your [EditorPlugin] is disabled to "
+"prevent leaks and an unexpected behavior.\n"
+"[codeblock]\n"
+"const MyInspectorPlugin = preload(\"res://addons/your_addon/path/to/your/"
+"script.gd\")\n"
+"var inspector_plugin = MyInspectorPlugin.new()\n"
+"\n"
+"func _enter_tree():\n"
+" add_inspector_plugin(inspector_plugin)\n"
+"\n"
+"func _exit_tree():\n"
+" remove_inspector_plugin(inspector_plugin)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:101
+msgid ""
+"Registers a new [EditorSceneImporter]. Scene importers are used to import "
+"custom 3D asset formats as scenes."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:108
+msgid ""
+"Registers a new [EditorSpatialGizmoPlugin]. Gizmo plugins are used to add "
+"custom gizmos to the 3D preview viewport for a [Spatial].\n"
+"See [method add_inspector_plugin] for an example of how to register a plugin."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:119
+msgid ""
+"Adds a custom menu item to [b]Project > Tools[/b] as [code]name[/code] that "
+"calls [code]callback[/code] on an instance of [code]handler[/code] with a "
+"parameter [code]ud[/code] when user activates it."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:127
+msgid ""
+"Adds a custom submenu under [b]Project > Tools >[/b] [code]name[/code]. "
+"[code]submenu[/code] should be an object of class [PopupMenu]. This submenu "
+"should be cleaned up using [code]remove_tool_menu_item(name)[/code]."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:133
+msgid ""
+"This method is called when the editor is about to save the project, switch "
+"to another tab, etc. It asks the plugin to apply any pending state changes "
+"to ensure consistency.\n"
+"This is used, for example, in shader editors to let the plugin know that it "
+"must apply the shader code being written by the user to the object."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:140
+msgid ""
+"This method is called when the editor is about to run the project. The "
+"plugin can then perform required operations before the project runs.\n"
+"This method must return a boolean. If this method returns [code]false[/"
+"code], the project will not run. The run is aborted immediately, so this "
+"also prevents all other plugins' [method build] methods from running."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:147
+msgid ""
+"Clear all the state and reset the object being edited to zero. This ensures "
+"your plugin does not keep editing a currently existing node, or a node from "
+"the wrong scene."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:153
+msgid ""
+"Called by the engine when the user disables the [EditorPlugin] in the Plugin "
+"tab of the project settings window."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:160
+msgid ""
+"This function is used for plugins that edit specific object types (nodes or "
+"resources). It requests the editor to edit the given object."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:166
+msgid ""
+"Called by the engine when the user enables the [EditorPlugin] in the Plugin "
+"tab of the project settings window."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:173
+msgid ""
+"Called by the engine when the 2D editor's viewport is updated. Use the "
+"[code]overlay[/code] [Control] for drawing. You can update the viewport "
+"manually by calling [method update_overlays].\n"
+"[codeblock]\n"
+"func forward_canvas_draw_over_viewport(overlay):\n"
+" # Draw a circle at cursor position.\n"
+" overlay.draw_circle(overlay.get_local_mouse_position(), 64, Color."
+"white)\n"
+"\n"
+"func forward_canvas_gui_input(event):\n"
+" if event is InputEventMouseMotion:\n"
+" # Redraw viewport when cursor is moved.\n"
+" update_overlays()\n"
+" return true\n"
+" return false\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:192
+msgid ""
+"This method is the same as [method forward_canvas_draw_over_viewport], "
+"except it draws on top of everything. Useful when you need an extra layer "
+"that shows over anything else.\n"
+"You need to enable calling of this method by using [method "
+"set_force_draw_over_forwarding_enabled]."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:200
+msgid ""
+"Called when there is a root node in the current edited scene, [method "
+"handles] is implemented and an [InputEvent] happens in the 2D viewport. "
+"Intercepts the [InputEvent], if [code]return true[/code] [EditorPlugin] "
+"consumes the [code]event[/code], otherwise forwards [code]event[/code] to "
+"other Editor classes. Example:\n"
+"[codeblock]\n"
+"# Prevents the InputEvent to reach other Editor classes\n"
+"func forward_canvas_gui_input(event):\n"
+" var forward = true\n"
+" return forward\n"
+"[/codeblock]\n"
+"Must [code]return false[/code] in order to forward the [InputEvent] to other "
+"Editor classes. Example:\n"
+"[codeblock]\n"
+"# Consumes InputEventMouseMotion and forwards other InputEvent types\n"
+"func forward_canvas_gui_input(event):\n"
+" var forward = false\n"
+" if event is InputEventMouseMotion:\n"
+" forward = true\n"
+" return forward\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:222
+msgid ""
+"Called by the engine when the 3D editor's viewport is updated. Use the "
+"[code]overlay[/code] [Control] for drawing. You can update the viewport "
+"manually by calling [method update_overlays].\n"
+"[codeblock]\n"
+"func forward_spatial_draw_over_viewport(overlay):\n"
+" # Draw a circle at cursor position.\n"
+" overlay.draw_circle(overlay.get_local_mouse_position(), 64)\n"
+"\n"
+"func forward_spatial_gui_input(camera, event):\n"
+" if event is InputEventMouseMotion:\n"
+" # Redraw viewport when cursor is moved.\n"
+" update_overlays()\n"
+" return true\n"
+" return false\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:241
+msgid ""
+"This method is the same as [method forward_spatial_draw_over_viewport], "
+"except it draws on top of everything. Useful when you need an extra layer "
+"that shows over anything else.\n"
+"You need to enable calling of this method by using [method "
+"set_force_draw_over_forwarding_enabled]."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:250
+msgid ""
+"Called when there is a root node in the current edited scene, [method "
+"handles] is implemented and an [InputEvent] happens in the 3D viewport. "
+"Intercepts the [InputEvent], if [code]return true[/code] [EditorPlugin] "
+"consumes the [code]event[/code], otherwise forwards [code]event[/code] to "
+"other Editor classes. Example:\n"
+"[codeblock]\n"
+"# Prevents the InputEvent to reach other Editor classes\n"
+"func forward_spatial_gui_input(camera, event):\n"
+" var forward = true\n"
+" return forward\n"
+"[/codeblock]\n"
+"Must [code]return false[/code] in order to forward the [InputEvent] to other "
+"Editor classes. Example:\n"
+"[codeblock]\n"
+"# Consumes InputEventMouseMotion and forwards other InputEvent types\n"
+"func forward_spatial_gui_input(camera, event):\n"
+" var forward = false\n"
+" if event is InputEventMouseMotion:\n"
+" forward = true\n"
+" return forward\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:271
+msgid ""
+"This is for editors that edit script-based objects. You can return a list of "
+"breakpoints in the format ([code]script:line[/code]), for example: "
+"[code]res://path_to_script.gd:25[/code]."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:277
+msgid ""
+"Returns the [EditorInterface] object that gives you control over Godot "
+"editor's window and its functionalities."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:283
+msgid ""
+"Override this method in your plugin to return a [Texture] in order to give "
+"it an icon.\n"
+"For main screen plugins, this appears at the top of the screen, to the right "
+"of the \"2D\", \"3D\", \"Script\", and \"AssetLib\" buttons.\n"
+"Ideally, the plugin icon should be white with a transparent background and "
+"16x16 pixels in size.\n"
+"[codeblock]\n"
+"func get_plugin_icon():\n"
+" # You can use a custom icon:\n"
+" return preload(\"res://addons/my_plugin/my_plugin_icon.svg\")\n"
+" # Or use a built-in icon:\n"
+" return get_editor_interface().get_base_control().get_icon(\"Node\", "
+"\"EditorIcons\")\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:298
+msgid ""
+"Override this method in your plugin to provide the name of the plugin when "
+"displayed in the Godot editor.\n"
+"For main screen plugins, this appears at the top of the screen, to the right "
+"of the \"2D\", \"3D\", \"Script\", and \"AssetLib\" buttons."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:305
+msgid ""
+"Gets the Editor's dialogue used for making scripts.\n"
+"[b]Note:[/b] Users can configure it before use.\n"
+"[b]Warning:[/b] Removing and freeing this node will render a part of the "
+"editor useless and may cause a crash."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:313
+msgid ""
+"Gets the state of your plugin editor. This is used when saving the scene (so "
+"state is kept when opening it again) and for switching tabs (so state can be "
+"restored when the tab returns)."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:319
+msgid ""
+"Gets the undo/redo object. Most actions in the editor can be undoable, so "
+"use this object to make sure this happens when it's worth it."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:326
+msgid ""
+"Gets the GUI layout of the plugin. This is used to save the project's editor "
+"layout when [method queue_save_layout] is called or the editor layout was "
+"changed(For example changing the position of a dock)."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:333
+msgid ""
+"Implement this function if your plugin edits a specific type of object "
+"(Resource or Node). If you return [code]true[/code], then you will get the "
+"functions [method edit] and [method make_visible] called when the editor "
+"requests them. If you have declared the methods [method "
+"forward_canvas_gui_input] and [method forward_spatial_gui_input] these will "
+"be called too."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:339
+msgid ""
+"Returns [code]true[/code] if this is a main screen editor plugin (it goes in "
+"the workspace selector together with [b]2D[/b], [b]3D[/b], [b]Script[/b] and "
+"[b]AssetLib[/b])."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:345
+msgid "Minimizes the bottom panel."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:352
+msgid "Makes a specific item in the bottom panel visible."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:359
+msgid ""
+"This function will be called when the editor is requested to become visible. "
+"It is used for plugins that edit a specific object type.\n"
+"Remember that you have to manage the visibility of all your editor controls "
+"manually."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:366
+msgid "Queue save the project's editor layout."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:373
+msgid "Removes an Autoload [code]name[/code] from the list."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:380
+msgid ""
+"Removes the control from the bottom panel. You have to manually [method Node."
+"queue_free] the control."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:388
+msgid ""
+"Removes the control from the specified container. You have to manually "
+"[method Node.queue_free] the control."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:395
+msgid ""
+"Removes the control from the dock. You have to manually [method Node."
+"queue_free] the control."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:402
+msgid "Removes a custom type added by [method add_custom_type]."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:409
+msgid "Removes an export plugin registered by [method add_export_plugin]."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:416
+msgid "Removes an import plugin registered by [method add_import_plugin]."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:423
+msgid "Removes an inspector plugin registered by [method add_import_plugin]"
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:430
+msgid ""
+"Removes a scene importer registered by [method add_scene_import_plugin]."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:437
+msgid "Removes a gizmo plugin registered by [method add_spatial_gizmo_plugin]."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:444
+msgid "Removes a menu [code]name[/code] from [b]Project > Tools[/b]."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:450
+msgid ""
+"This method is called after the editor saves the project or when it's "
+"closed. It asks the plugin to save edited external scenes/resources."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:456
+msgid ""
+"Enables calling of [method forward_canvas_force_draw_over_viewport] for the "
+"2D editor and [method forward_spatial_force_draw_over_viewport] for the 3D "
+"editor when their viewports are updated. You need to call this method only "
+"once and it will work permanently for this plugin."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:462
+msgid ""
+"Use this method if you always want to receive inputs from 3D view screen "
+"inside [method forward_spatial_gui_input]. It might be especially usable if "
+"your plugin will want to use raycast in the scene."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:469
+msgid "Restore the state saved by [method get_state]."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:476
+msgid "Restore the plugin GUI layout saved by [method get_window_layout]."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:482
+msgid ""
+"Updates the overlays of the 2D and 3D editor viewport. Causes methods "
+"[method forward_canvas_draw_over_viewport], [method "
+"forward_canvas_force_draw_over_viewport], [method "
+"forward_spatial_draw_over_viewport] and [method "
+"forward_spatial_force_draw_over_viewport] to be called."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:490
+msgid ""
+"Emitted when user changes the workspace ([b]2D[/b], [b]3D[/b], [b]Script[/"
+"b], [b]AssetLib[/b]). Also works with custom screens defined by plugins."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:501
+msgid ""
+"Emitted when the scene is changed in the editor. The argument will return "
+"the root node of the scene that has just become active. If this scene is new "
+"and empty, the argument will be [code]null[/code]."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:507
+msgid ""
+"Emitted when user closes a scene. The argument is file path to a closed "
+"scene."
+msgstr ""
+
+#: doc/classes/EditorPlugin.xml:553
+msgid "Represents the size of the [enum DockSlot] enum."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:4
+msgid "Custom control to edit properties for adding into the inspector."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:7
+msgid ""
+"This control allows property editing for one or multiple properties into "
+"[EditorInspector]. It is added via [EditorInspectorPlugin]."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:16
+msgid ""
+"If any of the controls added can gain keyboard focus, add it here. This "
+"ensures that focus will be restored if the inspector is refreshed."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:26
+msgid ""
+"If one or several properties have changed, this must be called. [code]field[/"
+"code] is used in case your editor can modify fields separately (as an "
+"example, Vector3.x). The [code]changing[/code] argument avoids the editor "
+"requesting this property to be refreshed (leave as [code]false[/code] if "
+"unsure)."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:32
+msgid "Gets the edited object."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:38
+msgid ""
+"Gets the edited property. If your editor is for a single property (added via "
+"[method EditorInspectorPlugin.parse_property]), then this will return the "
+"property."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:44
+msgid "Must be implemented to provide a custom tooltip to the property editor."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:51
+msgid ""
+"Puts the [code]editor[/code] control below the property label. The control "
+"must be previously added using [method Node.add_child]."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:57
+msgid "When this virtual function is called, you must update your editor."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:63
+msgid ""
+"Used by the inspector, set to [code]true[/code] when the property is "
+"checkable."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:66
+msgid ""
+"Used by the inspector, set to [code]true[/code] when the property is checked."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:69
+msgid ""
+"Used by the inspector, set to [code]true[/code] when the property is drawn "
+"with the editor theme's warning color. This is used for editable children's "
+"properties."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:72
+msgid ""
+"Used by the inspector, set to [code]true[/code] when the property can add "
+"keys for animation."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:75
+msgid "Set this property to change the label (if you want to show one)."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:78
+msgid ""
+"Used by the inspector, set to [code]true[/code] when the property is read-"
+"only."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:86
+msgid ""
+"Emit it if you want multiple properties modified at the same time. Do not "
+"use if added via [method EditorInspectorPlugin.parse_property]."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:93
+msgid "Used by sub-inspectors. Emit it if what was selected was an Object ID."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:100
+msgid ""
+"Do not emit this manually, use the [method emit_changed] method instead."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:107
+msgid "Emitted when a property was checked. Used internally."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:113
+msgid ""
+"Emit it if you want to add this value as an animation key (check for keying "
+"being enabled first)."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:120
+msgid "Emit it if you want to key a property with a single value."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:127
+msgid ""
+"If you want a sub-resource to be edited, emit this signal with the resource."
+msgstr ""
+
+#: doc/classes/EditorProperty.xml:134
+msgid "Emitted when selected. Used internally."
+msgstr ""
+
+#: doc/classes/EditorResourcePicker.xml:4
+msgid "Godot editor's control for selecting [Resource] type properties."
+msgstr ""
+
+#: doc/classes/EditorResourcePicker.xml:7
+msgid ""
+"This [Control] node is used in the editor's Inspector dock to allow editing "
+"of [Resource] type properties. It provides options for creating, loading, "
+"saving and converting resources. Can be used with [EditorInspectorPlugin] to "
+"recreate the same behavior.\n"
+"[b]Note:[/b] This [Control] does not include any editor for the resource, as "
+"editing is controlled by the Inspector dock itself or sub-Inspectors."
+msgstr ""
+
+#: doc/classes/EditorResourcePicker.xml:32
+msgid ""
+"Returns a list of all allowed types and subtypes corresponding to the "
+"[member base_type]. If the [member base_type] is empty, an empty list is "
+"returned."
+msgstr ""
+
+#: doc/classes/EditorResourcePicker.xml:46
+msgid ""
+"This virtual method can be implemented to handle context menu items not "
+"handled by default. See [method set_create_options]."
+msgstr ""
+
+#: doc/classes/EditorResourcePicker.xml:53
+msgid ""
+"This virtual method is called when updating the context menu of "
+"[EditorResourcePicker]. Implement this method to override the \"New ...\" "
+"items with your own options. [code]menu_node[/code] is a reference to the "
+"[PopupMenu] node.\n"
+"[b]Note:[/b] Implement [method handle_menu_selected] to handle these custom "
+"items."
+msgstr ""
+
+#: doc/classes/EditorResourcePicker.xml:61
+msgid ""
+"Sets the toggle mode state for the main button. Works only if [member "
+"toggle_mode] is set to [code]true[/code]."
+msgstr ""
+
+#: doc/classes/EditorResourcePicker.xml:67
+msgid ""
+"The base type of allowed resource types. Can be a comma-separated list of "
+"several options."
+msgstr ""
+
+#: doc/classes/EditorResourcePicker.xml:70
+msgid "If [code]true[/code], the value can be selected and edited."
+msgstr ""
+
+#: doc/classes/EditorResourcePicker.xml:73
+msgid "The edited resource value."
+msgstr ""
+
+#: doc/classes/EditorResourcePicker.xml:76
+msgid ""
+"If [code]true[/code], the main button with the resource preview works in the "
+"toggle mode. Use [method set_toggle_pressed] to manually set the state."
+msgstr ""
+
+#: doc/classes/EditorResourcePicker.xml:83
+msgid "Emitted when the value of the edited resource was changed."
+msgstr ""
+
+#: doc/classes/EditorResourcePicker.xml:90
+msgid ""
+"Emitted when the resource value was set and user clicked to edit it. When "
+"[code]edit[/code] is [code]true[/code], the signal was caused by the context "
+"menu \"Edit\" option."
+msgstr ""
+
+#: doc/classes/EditorResourcePreview.xml:4
+msgid "Helper to generate previews of resources or files."
+msgstr ""
+
+#: doc/classes/EditorResourcePreview.xml:7
+msgid ""
+"This object is used to generate previews for resources of files.\n"
+"[b]Note:[/b] This class shouldn't be instantiated directly. Instead, access "
+"the singleton using [method EditorInterface.get_resource_previewer]."
+msgstr ""
+
+#: doc/classes/EditorResourcePreview.xml:17
+msgid "Create an own, custom preview generator."
+msgstr ""
+
+#: doc/classes/EditorResourcePreview.xml:24
+msgid ""
+"Check if the resource changed, if so, it will be invalidated and the "
+"corresponding signal emitted."
+msgstr ""
+
+#: doc/classes/EditorResourcePreview.xml:34
+msgid ""
+"Queue the [code]resource[/code] being edited for preview. Once the preview "
+"is ready, the [code]receiver[/code]'s [code]receiver_func[/code] will be "
+"called. The [code]receiver_func[/code] must take the following four "
+"arguments: [String] path, [Texture] preview, [Texture] thumbnail_preview, "
+"[Variant] userdata. [code]userdata[/code] can be anything, and will be "
+"returned when [code]receiver_func[/code] is called.\n"
+"[b]Note:[/b] If it was not possible to create the preview the "
+"[code]receiver_func[/code] will still be called, but the preview will be "
+"null."
+msgstr ""
+
+#: doc/classes/EditorResourcePreview.xml:45
+msgid ""
+"Queue a resource file located at [code]path[/code] for preview. Once the "
+"preview is ready, the [code]receiver[/code]'s [code]receiver_func[/code] "
+"will be called. The [code]receiver_func[/code] must take the following four "
+"arguments: [String] path, [Texture] preview, [Texture] thumbnail_preview, "
+"[Variant] userdata. [code]userdata[/code] can be anything, and will be "
+"returned when [code]receiver_func[/code] is called.\n"
+"[b]Note:[/b] If it was not possible to create the preview the "
+"[code]receiver_func[/code] will still be called, but the preview will be "
+"null."
+msgstr ""
+
+#: doc/classes/EditorResourcePreview.xml:53
+msgid "Removes a custom preview generator."
+msgstr ""
+
+#: doc/classes/EditorResourcePreview.xml:61
+msgid ""
+"Emitted if a preview was invalidated (changed). [code]path[/code] "
+"corresponds to the path of the preview."
+msgstr ""
+
+#: doc/classes/EditorResourcePreviewGenerator.xml:4
+msgid "Custom generator of previews."
+msgstr ""
+
+#: doc/classes/EditorResourcePreviewGenerator.xml:7
+msgid ""
+"Custom code to generate previews. Please check [code]file_dialog/"
+"thumbnail_size[/code] in [EditorSettings] to find out the right size to do "
+"previews at."
+msgstr ""
+
+#: doc/classes/EditorResourcePreviewGenerator.xml:15
+msgid ""
+"If this function returns [code]true[/code], the generator will call [method "
+"generate] or [method generate_from_path] for small previews as well.\n"
+"By default, it returns [code]false[/code]."
+msgstr ""
+
+#: doc/classes/EditorResourcePreviewGenerator.xml:24
+msgid ""
+"Generate a preview from a given resource with the specified size. This must "
+"always be implemented.\n"
+"Returning an empty texture is an OK way to fail and let another generator "
+"take care.\n"
+"Care must be taken because this function is always called from a thread (not "
+"the main thread)."
+msgstr ""
+
+#: doc/classes/EditorResourcePreviewGenerator.xml:34
+msgid ""
+"Generate a preview directly from a path with the specified size. "
+"Implementing this is optional, as default code will load and call [method "
+"generate].\n"
+"Returning an empty texture is an OK way to fail and let another generator "
+"take care.\n"
+"Care must be taken because this function is always called from a thread (not "
+"the main thread)."
+msgstr ""
+
+#: doc/classes/EditorResourcePreviewGenerator.xml:42
+msgid ""
+"If this function returns [code]true[/code], the generator will automatically "
+"generate the small previews from the normal preview texture generated by the "
+"methods [method generate] or [method generate_from_path].\n"
+"By default, it returns [code]false[/code]."
+msgstr ""
+
+#: doc/classes/EditorResourcePreviewGenerator.xml:50
+msgid ""
+"Returns [code]true[/code] if your generator supports the resource of type "
+"[code]type[/code]."
+msgstr ""
+
+#: doc/classes/EditorSceneImporter.xml:4
+msgid "Imports scenes from third-parties' 3D files."
+msgstr ""
+
+#: modules/fbx/doc_classes/EditorSceneImporterFBX.xml:4
+msgid "FBX 3D asset importer."
+msgstr ""
+
+#: modules/fbx/doc_classes/EditorSceneImporterFBX.xml:7
+msgid ""
+"This is an FBX 3D asset importer with full support for most FBX features.\n"
+"If exporting a FBX scene from Autodesk Maya, use these FBX export settings:\n"
+"[codeblock]\n"
+"- Smoothing Groups\n"
+"- Smooth Mesh\n"
+"- Triangluate (for meshes with blend shapes)\n"
+"- Bake Animation\n"
+"- Resample All\n"
+"- Deformed Models\n"
+"- Skins\n"
+"- Blend Shapes\n"
+"- Curve Filters\n"
+"- Constant Key Reducer\n"
+"- Auto Tangents Only\n"
+"- *Do not check* Constraints (as it will break the file)\n"
+"- Can check Embed Media (embeds textures into the exported FBX file)\n"
+" - Note that when importing embedded media, the texture and mesh will be a "
+"single immutable file.\n"
+" - You will have to re-export then re-import the FBX if the texture has "
+"changed.\n"
+"- Units: Centimeters\n"
+"- Up Axis: Y\n"
+"- Binary format in FBX 2017\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/EditorScenePostImport.xml:4
+msgid "Post-processes scenes after import."
+msgstr ""
+
+#: doc/classes/EditorScenePostImport.xml:7
+msgid ""
+"Imported scenes can be automatically modified right after import by setting "
+"their [b]Custom Script[/b] Import property to a [code]tool[/code] script "
+"that inherits from this class.\n"
+"The [method post_import] callback receives the imported scene's root node "
+"and returns the modified version of the scene. Usage example:\n"
+"[codeblock]\n"
+"tool # Needed so it runs in editor\n"
+"extends EditorScenePostImport\n"
+"\n"
+"# This sample changes all node names\n"
+"\n"
+"# Called right after the scene is imported and gets the root node\n"
+"func post_import(scene):\n"
+" # Change all node names to \"modified_[oldnodename]\"\n"
+" iterate(scene)\n"
+" return scene # Remember to return the imported scene\n"
+"\n"
+"func iterate(node):\n"
+" if node != null:\n"
+" node.name = \"modified_\" + node.name\n"
+" for child in node.get_children():\n"
+" iterate(child)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/EditorScenePostImport.xml:29
+msgid ""
+"https://docs.godotengine.org/en/3.4/getting_started/workflow/assets/"
+"importing_scenes.html#custom-script"
+msgstr ""
+
+#: doc/classes/EditorScenePostImport.xml:35
+msgid ""
+"Returns the source file path which got imported (e.g. [code]res://scene.dae[/"
+"code])."
+msgstr ""
+
+#: doc/classes/EditorScenePostImport.xml:41
+msgid "Returns the resource folder the imported scene file is located in."
+msgstr ""
+
+#: doc/classes/EditorScenePostImport.xml:48
+msgid ""
+"Called after the scene was imported. This method must return the modified "
+"version of the scene."
+msgstr ""
+
+#: doc/classes/EditorScript.xml:4
+msgid "Base script that can be used to add extension functions to the editor."
+msgstr ""
+
+#: doc/classes/EditorScript.xml:7
+msgid ""
+"Scripts extending this class and implementing its [method _run] method can "
+"be executed from the Script Editor's [b]File > Run[/b] menu option (or by "
+"pressing [code]Ctrl+Shift+X[/code]) while the editor is running. This is "
+"useful for adding custom in-editor functionality to Godot. For more complex "
+"additions, consider using [EditorPlugin]s instead.\n"
+"[b]Note:[/b] Extending scripts need to have [code]tool[/code] mode enabled.\n"
+"[b]Example script:[/b]\n"
+"[codeblock]\n"
+"tool\n"
+"extends EditorScript\n"
+"\n"
+"func _run():\n"
+" print(\"Hello from the Godot Editor!\")\n"
+"[/codeblock]\n"
+"[b]Note:[/b] The script is run in the Editor context, which means the output "
+"is visible in the console window started with the Editor (stdout) instead of "
+"the usual Godot [b]Output[/b] dock."
+msgstr ""
+
+#: doc/classes/EditorScript.xml:25
+msgid "This method is executed by the Editor when [b]File > Run[/b] is used."
+msgstr ""
+
+#: doc/classes/EditorScript.xml:32
+msgid ""
+"Adds [code]node[/code] as a child of the root node in the editor context.\n"
+"[b]Warning:[/b] The implementation of this method is currently disabled."
+msgstr ""
+
+#: doc/classes/EditorScript.xml:39
+msgid "Returns the [EditorInterface] singleton instance."
+msgstr ""
+
+#: doc/classes/EditorScript.xml:45
+msgid "Returns the Editor's currently active scene."
+msgstr ""
+
+#: doc/classes/EditorScriptPicker.xml:4
+msgid ""
+"Godot editor's control for selecting the [code]script[/code] property of a "
+"[Node]."
+msgstr ""
+
+#: doc/classes/EditorScriptPicker.xml:7
+msgid ""
+"Similar to [EditorResourcePicker] this [Control] node is used in the "
+"editor's Inspector dock, but only to edit the [code]script[/code] property "
+"of a [Node]. Default options for creating new resources of all possible "
+"subtypes are replaced with dedicated buttons that open the \"Attach Node "
+"Script\" dialog. Can be used with [EditorInspectorPlugin] to recreate the "
+"same behavior.\n"
+"[b]Note:[/b] You must set the [member script_owner] for the custom context "
+"menu items to work."
+msgstr ""
+
+#: doc/classes/EditorScriptPicker.xml:16
+msgid "The owner [Node] of the script property that holds the edited resource."
+msgstr ""
+
+#: doc/classes/EditorSelection.xml:4
+msgid "Manages the SceneTree selection in the editor."
+msgstr ""
+
+#: doc/classes/EditorSelection.xml:7
+msgid ""
+"This object manages the SceneTree selection in the editor.\n"
+"[b]Note:[/b] This class shouldn't be instantiated directly. Instead, access "
+"the singleton using [method EditorInterface.get_selection]."
+msgstr ""
+
+#: doc/classes/EditorSelection.xml:17
+msgid ""
+"Adds a node to the selection.\n"
+"[b]Note:[/b] The newly selected node will not be automatically edited in the "
+"inspector. If you want to edit a node, use [method EditorInterface."
+"edit_node]."
+msgstr ""
+
+#: doc/classes/EditorSelection.xml:24
+msgid "Clear the selection."
+msgstr ""
+
+#: doc/classes/EditorSelection.xml:30
+msgid "Gets the list of selected nodes."
+msgstr ""
+
+#: doc/classes/EditorSelection.xml:36
+msgid ""
+"Gets the list of selected nodes, optimized for transform operations (i.e. "
+"moving them, rotating, etc). This list avoids situations where a node is "
+"selected and also child/grandchild."
+msgstr ""
+
+#: doc/classes/EditorSelection.xml:43
+msgid "Removes a node from the selection."
+msgstr ""
+
+#: doc/classes/EditorSelection.xml:50
+msgid "Emitted when the selection changes."
+msgstr ""
+
+#: doc/classes/EditorSettings.xml:4
+msgid "Object that holds the project-independent editor settings."
+msgstr ""
+
+#: doc/classes/EditorSettings.xml:7
+msgid ""
+"Object that holds the project-independent editor settings. These settings "
+"are generally visible in the [b]Editor > Editor Settings[/b] menu.\n"
+"Property names use slash delimiters to distinguish sections. Setting values "
+"can be of any [Variant] type. It's recommended to use [code]snake_case[/"
+"code] for editor settings to be consistent with the Godot editor itself.\n"
+"Accessing the settings can be done using the following methods, such as:\n"
+"[codeblock]\n"
+"# `settings.set(\"some/property\", value)` also works as this class "
+"overrides `_set()` internally.\n"
+"settings.set_setting(\"some/property\",value)\n"
+"\n"
+"# `settings.get(\"some/property\", value)` also works as this class "
+"overrides `_get()` internally.\n"
+"settings.get_setting(\"some/property\")\n"
+"\n"
+"var list_of_settings = settings.get_property_list()\n"
+"[/codeblock]\n"
+"[b]Note:[/b] This class shouldn't be instantiated directly. Instead, access "
+"the singleton using [method EditorInterface.get_editor_settings]."
+msgstr ""
+
+#: doc/classes/EditorSettings.xml:28
+msgid ""
+"Adds a custom property info to a property. The dictionary must contain:\n"
+"- [code]name[/code]: [String] (the name of the property)\n"
+"- [code]type[/code]: [int] (see [enum Variant.Type])\n"
+"- optionally [code]hint[/code]: [int] (see [enum PropertyHint]) and "
+"[code]hint_string[/code]: [String]\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"editor_settings.set(\"category/property_name\", 0)\n"
+"\n"
+"var property_info = {\n"
+" \"name\": \"category/property_name\",\n"
+" \"type\": TYPE_INT,\n"
+" \"hint\": PROPERTY_HINT_ENUM,\n"
+" \"hint_string\": \"one,two,three\"\n"
+"}\n"
+"\n"
+"editor_settings.add_property_info(property_info)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/EditorSettings.xml:51
+msgid "Erases the setting whose name is specified by [code]property[/code]."
+msgstr ""
+
+#: doc/classes/EditorSettings.xml:57
+msgid "Returns the list of favorite files and directories for this project."
+msgstr ""
+
+#: doc/classes/EditorSettings.xml:66
+msgid ""
+"Returns project-specific metadata for the [code]section[/code] and "
+"[code]key[/code] specified. If the metadata doesn't exist, [code]default[/"
+"code] will be returned instead. See also [method set_project_metadata]."
+msgstr ""
+
+#: doc/classes/EditorSettings.xml:72
+msgid ""
+"Returns the project-specific settings path. Projects all have a unique "
+"subdirectory inside the settings path where project-specific settings are "
+"saved."
+msgstr ""
+
+#: doc/classes/EditorSettings.xml:78
+msgid ""
+"Returns the list of recently visited folders in the file dialog for this "
+"project."
+msgstr ""
+
+#: doc/classes/EditorSettings.xml:85
+msgid ""
+"Returns the value of the setting specified by [code]name[/code]. This is "
+"equivalent to using [method Object.get] on the EditorSettings instance."
+msgstr ""
+
+#: doc/classes/EditorSettings.xml:91
+msgid ""
+"Gets the global settings path for the engine. Inside this path, you can find "
+"some standard paths such as:\n"
+"[code]settings/tmp[/code] - Used for temporary storage of files\n"
+"[code]settings/templates[/code] - Where export templates are located"
+msgstr ""
+
+#: doc/classes/EditorSettings.xml:100
+msgid ""
+"Returns [code]true[/code] if the setting specified by [code]name[/code] "
+"exists, [code]false[/code] otherwise."
+msgstr ""
+
+#: doc/classes/EditorSettings.xml:107
+msgid ""
+"Returns [code]true[/code] if the setting specified by [code]name[/code] can "
+"have its value reverted to the default value, [code]false[/code] otherwise. "
+"When this method returns [code]true[/code], a Revert button will display "
+"next to the setting in the Editor Settings."
+msgstr ""
+
+#: doc/classes/EditorSettings.xml:114
+msgid ""
+"Returns the default value of the setting specified by [code]name[/code]. "
+"This is the value that would be applied when clicking the Revert button in "
+"the Editor Settings."
+msgstr ""
+
+#: doc/classes/EditorSettings.xml:121
+msgid "Sets the list of favorite files and directories for this project."
+msgstr ""
+
+#: doc/classes/EditorSettings.xml:130
+msgid ""
+"Sets the initial value of the setting specified by [code]name[/code] to "
+"[code]value[/code]. This is used to provide a value for the Revert button in "
+"the Editor Settings. If [code]update_current[/code] is true, the current "
+"value of the setting will be set to [code]value[/code] as well."
+msgstr ""
+
+#: doc/classes/EditorSettings.xml:139
+msgid ""
+"Sets project-specific metadata with the [code]section[/code], [code]key[/"
+"code] and [code]data[/code] specified. This metadata is stored outside the "
+"project folder and therefore won't be checked into version control. See also "
+"[method get_project_metadata]."
+msgstr ""
+
+#: doc/classes/EditorSettings.xml:146
+msgid ""
+"Sets the list of recently visited folders in the file dialog for this "
+"project."
+msgstr ""
+
+#: doc/classes/EditorSettings.xml:154
+msgid ""
+"Sets the [code]value[/code] of the setting specified by [code]name[/code]. "
+"This is equivalent to using [method Object.set] on the EditorSettings "
+"instance."
+msgstr ""
+
+#: doc/classes/EditorSettings.xml:161
+msgid "Emitted after any editor setting has changed."
+msgstr ""
+
+#: doc/classes/EditorSettings.xml:167
+msgid ""
+"Emitted after any editor setting has changed. It's used by various editor "
+"plugins to update their visuals on theme changes or logic on configuration "
+"changes."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmo.xml:4
+msgid "Custom gizmo for editing Spatial objects."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmo.xml:7
+msgid ""
+"Custom gizmo that is used for providing custom visualization and editing "
+"(handles) for 3D Spatial objects. See [EditorSpatialGizmoPlugin] for more "
+"information."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmo.xml:16
+msgid ""
+"Adds the specified [code]segments[/code] to the gizmo's collision shape for "
+"picking. Call this function during [method redraw]."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmo.xml:23
+msgid ""
+"Adds collision triangles to the gizmo for picking. A [TriangleMesh] can be "
+"generated from a regular [Mesh] too. Call this function during [method "
+"redraw]."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmo.xml:33
+msgid ""
+"Adds a list of handles (points) which can be used to deform the object being "
+"edited.\n"
+"There are virtual functions which will be called upon editing of these "
+"handles. Call this function during [method redraw]."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmo.xml:44
+msgid ""
+"Adds lines to the gizmo (as sets of 2 points), with a given material. The "
+"lines are used for visualizing the gizmo. Call this function during [method "
+"redraw]."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmo.xml:54
+msgid ""
+"Adds a mesh to the gizmo with the specified [code]billboard[/code] state, "
+"[code]skeleton[/code] and [code]material[/code]. If [code]billboard[/code] "
+"is [code]true[/code], the mesh will rotate to always face the camera. Call "
+"this function during [method redraw]."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmo.xml:63
+msgid ""
+"Adds an unscaled billboard for visualization. Call this function during "
+"[method redraw]."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmo.xml:69
+msgid ""
+"Removes everything in the gizmo including meshes, collisions and handles."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmo.xml:78
+msgid ""
+"Commit a handle being edited (handles must have been previously added by "
+"[method add_handles]).\n"
+"If the [code]cancel[/code] parameter is [code]true[/code], an option to "
+"restore the edited value to the original is provided."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmo.xml:86
+msgid ""
+"Gets the name of an edited handle (handles must have been previously added "
+"by [method add_handles]).\n"
+"Handles can be named for reference to the user when editing."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmo.xml:94
+msgid ""
+"Gets actual value of a handle. This value can be anything and used for "
+"eventually undoing the motion when calling [method commit_handle]."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmo.xml:100
+msgid ""
+"Returns the [EditorSpatialGizmoPlugin] that owns this gizmo. It's useful to "
+"retrieve materials using [method EditorSpatialGizmoPlugin.get_material]."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmo.xml:106
+msgid "Returns the Spatial node associated with this gizmo."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmo.xml:113
+msgid ""
+"Returns [code]true[/code] if the handle at index [code]index[/code] is "
+"highlighted by being hovered with the mouse."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmo.xml:119
+msgid ""
+"This function is called when the [Spatial] this gizmo refers to changes (the "
+"[method Spatial.update_gizmo] is called)."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmo.xml:128
+msgid ""
+"This function is used when the user drags a gizmo handle (previously added "
+"with [method add_handles]) in screen coordinates.\n"
+"The [Camera] is also provided so screen coordinates can be converted to "
+"raycasts."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmo.xml:136
+msgid ""
+"Sets the gizmo's hidden state. If [code]true[/code], the gizmo will be "
+"hidden. If [code]false[/code], it will be shown."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmo.xml:143
+msgid ""
+"Sets the reference [Spatial] node for the gizmo. [code]node[/code] must "
+"inherit from [Spatial]."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmoPlugin.xml:4
+msgid "Used by the editor to define Spatial gizmo types."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmoPlugin.xml:7
+msgid ""
+"EditorSpatialGizmoPlugin allows you to define a new type of Gizmo. There are "
+"two main ways to do so: extending [EditorSpatialGizmoPlugin] for the simpler "
+"gizmos, or creating a new [EditorSpatialGizmo] type. See the tutorial in the "
+"documentation for more info."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmoPlugin.xml:10
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/plugins/editor/spatial_gizmos."
+"html"
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmoPlugin.xml:18
+msgid ""
+"Adds a new material to the internal material list for the plugin. It can "
+"then be accessed with [method get_material]. Should not be overridden."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmoPlugin.xml:24
+msgid ""
+"Override this method to define whether the gizmo can be hidden or not. "
+"Returns [code]true[/code] if not overridden."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmoPlugin.xml:34
+msgid ""
+"Override this method to commit gizmo handles. Called for this plugin's "
+"active gizmos."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmoPlugin.xml:41
+msgid ""
+"Override this method to return a custom [EditorSpatialGizmo] for the spatial "
+"nodes of your choice, return [code]null[/code] for the rest of nodes. See "
+"also [method has_gizmo]."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmoPlugin.xml:50
+msgid ""
+"Creates a handle material with its variants (selected and/or editable) and "
+"adds them to the internal material list. They can then be accessed with "
+"[method get_material] and used in [method EditorSpatialGizmo.add_handles]. "
+"Should not be overridden.\n"
+"You can optionally provide a texture to use instead of the default icon."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmoPlugin.xml:61
+msgid ""
+"Creates an icon material with its variants (selected and/or editable) and "
+"adds them to the internal material list. They can then be accessed with "
+"[method get_material] and used in [method EditorSpatialGizmo."
+"add_unscaled_billboard]. Should not be overridden."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmoPlugin.xml:72
+msgid ""
+"Creates an unshaded material with its variants (selected and/or editable) "
+"and adds them to the internal material list. They can then be accessed with "
+"[method get_material] and used in [method EditorSpatialGizmo.add_mesh] and "
+"[method EditorSpatialGizmo.add_lines]. Should not be overridden."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmoPlugin.xml:80
+msgid ""
+"Override this method to provide gizmo's handle names. Called for this "
+"plugin's active gizmos."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmoPlugin.xml:88
+msgid ""
+"Gets actual value of a handle from gizmo. Called for this plugin's active "
+"gizmos."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmoPlugin.xml:96
+msgid ""
+"Gets material from the internal list of materials. If an "
+"[EditorSpatialGizmo] is provided, it will try to get the corresponding "
+"variant (selected and/or editable)."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmoPlugin.xml:102
+msgid ""
+"Override this method to provide the name that will appear in the gizmo "
+"visibility menu."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmoPlugin.xml:108
+msgid ""
+"Override this method to set the gizmo's priority. Higher values correspond "
+"to higher priority. If a gizmo with higher priority conflicts with another "
+"gizmo, only the gizmo with higher priority will be used.\n"
+"All built-in editor gizmos return a priority of [code]-1[/code]. If not "
+"overridden, this method will return [code]0[/code], which means custom "
+"gizmos will automatically override built-in gizmos."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmoPlugin.xml:116
+msgid ""
+"Override this method to define which Spatial nodes have a gizmo from this "
+"plugin. Whenever a [Spatial] node is added to a scene this method is called, "
+"if it returns [code]true[/code] the node gets a generic [EditorSpatialGizmo] "
+"assigned and is added to this plugin's list of active gizmos."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmoPlugin.xml:124
+msgid ""
+"Gets whether a handle is highlighted or not. Called for this plugin's active "
+"gizmos."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmoPlugin.xml:130
+msgid ""
+"Override this method to define whether a Spatial with this gizmo should be "
+"selectable even when the gizmo is hidden."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmoPlugin.xml:137
+msgid ""
+"Callback to redraw the provided gizmo. Called for this plugin's active "
+"gizmos."
+msgstr ""
+
+#: doc/classes/EditorSpatialGizmoPlugin.xml:147
+msgid ""
+"Update the value of a handle after it has been updated. Called for this "
+"plugin's active gizmos."
+msgstr ""
+
+#: doc/classes/EditorSpinSlider.xml:4
+msgid "Godot editor's control for editing numeric values."
+msgstr ""
+
+#: doc/classes/EditorSpinSlider.xml:7
+msgid ""
+"This [Control] node is used in the editor's Inspector dock to allow editing "
+"of numeric values. Can be used with [EditorInspectorPlugin] to recreate the "
+"same behavior."
+msgstr ""
+
+#: doc/classes/EditorVCSInterface.xml:4
+msgid ""
+"Version Control System (VCS) interface which reads and writes to the local "
+"VCS in use."
+msgstr ""
+
+#: doc/classes/EditorVCSInterface.xml:7
+msgid ""
+"Used by the editor to display VCS extracted information in the editor. The "
+"implementation of this API is included in VCS addons, which are essentially "
+"GDNative plugins that need to be put into the project folder. These VCS "
+"addons are scripts which are attached (on demand) to the object instance of "
+"[code]EditorVCSInterface[/code]. All the functions listed below, instead of "
+"performing the task themselves, they call the internally defined functions "
+"in the VCS addons to provide a plug-n-play experience."
+msgstr ""
+
+#: doc/classes/EditorVCSInterface.xml:16
+msgid ""
+"Creates a version commit if the addon is initialized, else returns without "
+"doing anything. Uses the files which have been staged previously, with the "
+"commit message set to a value as provided as in the argument."
+msgstr ""
+
+#: doc/classes/EditorVCSInterface.xml:23
+msgid ""
+"Returns an [Array] of [Dictionary] objects containing the diff output from "
+"the VCS in use, if a VCS addon is initialized, else returns an empty [Array] "
+"object. The diff contents also consist of some contextual lines which "
+"provide context to the observed line change in the file.\n"
+"Each [Dictionary] object has the line diff contents under the keys:\n"
+"- [code]\"content\"[/code] to store a [String] containing the line contents\n"
+"- [code]\"status\"[/code] to store a [String] which contains [code]\"+\"[/"
+"code] in case the content is a line addition but it stores a [code]\"-\"[/"
+"code] in case of deletion and an empty string in the case the line content "
+"is neither an addition nor a deletion.\n"
+"- [code]\"new_line_number\"[/code] to store an integer containing the new "
+"line number of the line content.\n"
+"- [code]\"line_count\"[/code] to store an integer containing the number of "
+"lines in the line content.\n"
+"- [code]\"old_line_number\"[/code] to store an integer containing the old "
+"line number of the line content.\n"
+"- [code]\"offset\"[/code] to store the offset of the line change since the "
+"first contextual line content."
+msgstr ""
+
+#: doc/classes/EditorVCSInterface.xml:36
+msgid ""
+"Returns a [Dictionary] containing the path of the detected file change "
+"mapped to an integer signifying what kind of change the corresponding file "
+"has experienced.\n"
+"The following integer values are being used to signify that the detected "
+"file is:\n"
+"- [code]0[/code]: New to the VCS working directory\n"
+"- [code]1[/code]: Modified\n"
+"- [code]2[/code]: Renamed\n"
+"- [code]3[/code]: Deleted\n"
+"- [code]4[/code]: Typechanged"
+msgstr ""
+
+#: doc/classes/EditorVCSInterface.xml:48
+msgid "Returns the project name of the VCS working directory."
+msgstr ""
+
+#: doc/classes/EditorVCSInterface.xml:54
+msgid ""
+"Returns the name of the VCS if the VCS has been initialized, else return an "
+"empty string."
+msgstr ""
+
+#: doc/classes/EditorVCSInterface.xml:61
+msgid ""
+"Initializes the VCS addon if not already. Uses the argument value as the "
+"path to the working directory of the project. Creates the initial commit if "
+"required. Returns [code]true[/code] if no failure occurs, else returns "
+"[code]false[/code]."
+msgstr ""
+
+#: doc/classes/EditorVCSInterface.xml:67
+msgid ""
+"Returns [code]true[/code] if the addon is ready to respond to function "
+"calls, else returns [code]false[/code]."
+msgstr ""
+
+#: doc/classes/EditorVCSInterface.xml:73
+msgid ""
+"Returns [code]true[/code] if the VCS addon has been initialized, else "
+"returns [code]false[/code]."
+msgstr ""
+
+#: doc/classes/EditorVCSInterface.xml:79
+msgid ""
+"Shuts down the VCS addon to allow cleanup code to run on call. Returns "
+"[code]true[/code] is no failure occurs, else returns [code]false[/code]."
+msgstr ""
+
+#: doc/classes/EditorVCSInterface.xml:86
+msgid ""
+"Stages the file which should be committed when [method EditorVCSInterface."
+"commit] is called. Argument should contain the absolute path."
+msgstr ""
+
+#: doc/classes/EditorVCSInterface.xml:93
+msgid ""
+"Unstages the file which was staged previously to be committed, so that it is "
+"no longer committed when [method EditorVCSInterface.commit] is called. "
+"Argument should contain the absolute path."
+msgstr ""
+
+#: doc/classes/EncodedObjectAsID.xml:4
+msgid "Holds a reference to an [Object]'s instance ID."
+msgstr ""
+
+#: doc/classes/EncodedObjectAsID.xml:7
+msgid ""
+"Utility class which holds a reference to the internal identifier of an "
+"[Object] instance, as given by [method Object.get_instance_id]. This ID can "
+"then be used to retrieve the object instance with [method @GDScript."
+"instance_from_id].\n"
+"This class is used internally by the editor inspector and script debugger, "
+"but can also be used in plugins to pass and display objects as their IDs."
+msgstr ""
+
+#: doc/classes/EncodedObjectAsID.xml:16
+msgid ""
+"The [Object] identifier stored in this [EncodedObjectAsID] instance. The "
+"object instance can be retrieved with [method @GDScript.instance_from_id]."
+msgstr ""
+
+#: doc/classes/Engine.xml:4
+msgid "Access to engine properties."
+msgstr ""
+
+#: doc/classes/Engine.xml:7
+msgid ""
+"The [Engine] singleton allows you to query and modify the project's run-time "
+"parameters, such as frames per second, time scale, and others."
+msgstr ""
+
+#: doc/classes/Engine.xml:15
+msgid ""
+"Returns engine author information in a Dictionary.\n"
+"[code]lead_developers[/code] - Array of Strings, lead developer names\n"
+"[code]founders[/code] - Array of Strings, founder names\n"
+"[code]project_managers[/code] - Array of Strings, project manager names\n"
+"[code]developers[/code] - Array of Strings, developer names"
+msgstr ""
+
+#: doc/classes/Engine.xml:25
+msgid ""
+"Returns an Array of copyright information Dictionaries.\n"
+"[code]name[/code] - String, component name\n"
+"[code]parts[/code] - Array of Dictionaries {[code]files[/code], "
+"[code]copyright[/code], [code]license[/code]} describing subsections of the "
+"component"
+msgstr ""
+
+#: doc/classes/Engine.xml:33
+msgid ""
+"Returns a Dictionary of Arrays of donor names.\n"
+"{[code]platinum_sponsors[/code], [code]gold_sponsors[/code], "
+"[code]silver_sponsors[/code], [code]bronze_sponsors[/code], "
+"[code]mini_sponsors[/code], [code]gold_donors[/code], [code]silver_donors[/"
+"code], [code]bronze_donors[/code]}"
+msgstr ""
+
+#: doc/classes/Engine.xml:40
+msgid ""
+"Returns the total number of frames drawn. On headless platforms, or if the "
+"render loop is disabled with [code]--disable-render-loop[/code] via command "
+"line, [method get_frames_drawn] always returns [code]0[/code]. See [method "
+"get_idle_frames]."
+msgstr ""
+
+#: doc/classes/Engine.xml:46
+msgid "Returns the frames per second of the running game."
+msgstr ""
+
+#: doc/classes/Engine.xml:52
+msgid ""
+"Returns the total number of frames passed since engine initialization which "
+"is advanced on each [b]idle frame[/b], regardless of whether the render loop "
+"is enabled. See also [method get_frames_drawn] and [method "
+"get_physics_frames].\n"
+"[method get_idle_frames] can be used to run expensive logic less often "
+"without relying on a [Timer]:\n"
+"[codeblock]\n"
+"func _process(_delta):\n"
+" if Engine.get_idle_frames() % 2 == 0:\n"
+" pass # Run expensive logic only once every 2 idle (render) frames "
+"here.\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Engine.xml:64
+msgid ""
+"Returns Dictionary of licenses used by Godot and included third party "
+"components."
+msgstr ""
+
+#: doc/classes/Engine.xml:70
+msgid "Returns Godot license text."
+msgstr ""
+
+#: doc/classes/Engine.xml:76
+msgid "Returns the main loop object (see [MainLoop] and [SceneTree])."
+msgstr ""
+
+#: doc/classes/Engine.xml:82
+msgid ""
+"Returns the total number of frames passed since engine initialization which "
+"is advanced on each [b]physics frame[/b]. See also [method "
+"get_idle_frames].\n"
+"[method get_physics_frames] can be used to run expensive logic less often "
+"without relying on a [Timer]:\n"
+"[codeblock]\n"
+"func _physics_process(_delta):\n"
+" if Engine.get_physics_frames() % 2 == 0:\n"
+" pass # Run expensive logic only once every 2 physics frames here.\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Engine.xml:94
+msgid ""
+"Returns the fraction through the current physics tick we are at the time of "
+"rendering the frame. This can be used to implement fixed timestep "
+"interpolation."
+msgstr ""
+
+#: doc/classes/Engine.xml:101
+msgid ""
+"Returns a global singleton with given [code]name[/code]. Often used for "
+"plugins, e.g. [code]GodotPayment[/code] on Android."
+msgstr ""
+
+#: doc/classes/Engine.xml:107
+msgid ""
+"Returns the current engine version information in a Dictionary.\n"
+"[code]major[/code] - Holds the major version number as an int\n"
+"[code]minor[/code] - Holds the minor version number as an int\n"
+"[code]patch[/code] - Holds the patch version number as an int\n"
+"[code]hex[/code] - Holds the full version number encoded as a "
+"hexadecimal int with one byte (2 places) per number (see example below)\n"
+"[code]status[/code] - Holds the status (e.g. \"beta\", \"rc1\", "
+"\"rc2\", ... \"stable\") as a String\n"
+"[code]build[/code] - Holds the build name (e.g. \"custom_build\") as a "
+"String\n"
+"[code]hash[/code] - Holds the full Git commit hash as a String\n"
+"[code]year[/code] - Holds the year the version was released in as an "
+"int\n"
+"[code]string[/code] - [code]major[/code] + [code]minor[/code] + "
+"[code]patch[/code] + [code]status[/code] + [code]build[/code] in a single "
+"String\n"
+"The [code]hex[/code] value is encoded as follows, from left to right: one "
+"byte for the major, one byte for the minor, one byte for the patch version. "
+"For example, \"3.1.12\" would be [code]0x03010C[/code]. [b]Note:[/b] It's "
+"still an int internally, and printing it will give you its decimal "
+"representation, which is not particularly meaningful. Use hexadecimal "
+"literals for easy version comparisons from code:\n"
+"[codeblock]\n"
+"if Engine.get_version_info().hex >= 0x030200:\n"
+" # Do things specific to version 3.2 or later\n"
+"else:\n"
+" # Do things specific to versions before 3.2\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Engine.xml:130
+msgid ""
+"Returns [code]true[/code] if a singleton with given [code]name[/code] exists "
+"in global scope."
+msgstr ""
+
+#: doc/classes/Engine.xml:136
+msgid ""
+"Returns [code]true[/code] if the game is inside the fixed process and "
+"physics phase of the game loop."
+msgstr ""
+
+#: doc/classes/Engine.xml:142
+msgid ""
+"If [code]true[/code], the script is currently running inside the editor. "
+"This is useful for [code]tool[/code] scripts to conditionally draw editor "
+"helpers, or prevent accidentally running \"game\" code that would affect the "
+"scene state while in the editor:\n"
+"[codeblock]\n"
+"if Engine.editor_hint:\n"
+" draw_gizmos()\n"
+"else:\n"
+" simulate_physics()\n"
+"[/codeblock]\n"
+"See [url=https://docs.godotengine.org/en/3.4/tutorials/misc/"
+"running_code_in_the_editor.html]Running code in the editor[/url] in the "
+"documentation for more information.\n"
+"[b]Note:[/b] To detect whether the script is run from an editor [i]build[/i] "
+"(e.g. when pressing [code]F5[/code]), use [method OS.has_feature] with the "
+"[code]\"editor\"[/code] argument instead. [code]OS.has_feature(\"editor\")[/"
+"code] will evaluate to [code]true[/code] both when the code is running in "
+"the editor and when running the project from the editor, but it will "
+"evaluate to [code]false[/code] when the code is run from an exported project."
+msgstr ""
+
+#: doc/classes/Engine.xml:153
+msgid ""
+"The number of fixed iterations per second. This controls how often physics "
+"simulation and [method Node._physics_process] methods are run. This value "
+"should generally always be set to [code]60[/code] or above, as Godot doesn't "
+"interpolate the physics step. As a result, values lower than [code]60[/code] "
+"will look stuttery. This value can be increased to make input more reactive "
+"or work around tunneling issues, but keep in mind doing so will increase CPU "
+"usage."
+msgstr ""
+
+#: doc/classes/Engine.xml:156
+msgid ""
+"Controls how much physics ticks are synchronized with real time. For 0 or "
+"less, the ticks are synchronized. Such values are recommended for network "
+"games, where clock synchronization matters. Higher values cause higher "
+"deviation of the in-game clock and real clock but smooth out framerate "
+"jitters. The default value of 0.5 should be fine for most; values above 2 "
+"could cause the game to react to dropped frames with a noticeable delay and "
+"are not recommended.\n"
+"[b]Note:[/b] For best results, when using a custom physics interpolation "
+"solution, the physics jitter fix should be disabled by setting [member "
+"physics_jitter_fix] to [code]0[/code]."
+msgstr ""
+
+#: doc/classes/Engine.xml:160
+msgid ""
+"If [code]false[/code], stops printing error and warning messages to the "
+"console and editor Output log. This can be used to hide error and warning "
+"messages during unit test suite runs. This property is equivalent to the "
+"[member ProjectSettings.application/run/disable_stderr] project setting.\n"
+"[b]Warning:[/b] If you set this to [code]false[/code] anywhere in the "
+"project, important error messages may be hidden even if they are emitted "
+"from other scripts. If this is set to [code]false[/code] in a [code]@tool[/"
+"code] script, this will also impact the editor itself. Do [i]not[/i] report "
+"bugs before ensuring error messages are enabled (as they are by default).\n"
+"[b]Note:[/b] This property does not impact the editor's Errors tab when "
+"running a project from the editor."
+msgstr ""
+
+#: doc/classes/Engine.xml:165
+msgid ""
+"The desired frames per second. If the hardware cannot keep up, this setting "
+"may not be respected. A value of 0 means no limit."
+msgstr ""
+
+#: doc/classes/Engine.xml:168
+msgid ""
+"Controls how fast or slow the in-game clock ticks versus the real life one. "
+"It defaults to 1.0. A value of 2.0 means the game moves twice as fast as "
+"real life, whilst a value of 0.5 means the game moves at half the regular "
+"speed."
+msgstr ""
+
+#: doc/classes/Environment.xml:4
+msgid ""
+"Resource for environment nodes (like [WorldEnvironment]) that define "
+"multiple rendering options."
+msgstr ""
+
+#: doc/classes/Environment.xml:7
+msgid ""
+"Resource for environment nodes (like [WorldEnvironment]) that define "
+"multiple environment operations (such as background [Sky] or [Color], "
+"ambient light, fog, depth-of-field...). These parameters affect the final "
+"render of the scene. The order of these operations is:\n"
+"- Depth of Field Blur\n"
+"- Glow\n"
+"- Tonemap (Auto Exposure)\n"
+"- Adjustments\n"
+"These effects will only apply when the [Viewport]'s intended usage is \"3D\" "
+"or \"3D Without Effects\". This can be configured for the root Viewport with "
+"[member ProjectSettings.rendering/quality/intended_usage/"
+"framebuffer_allocation], or for specific Viewports via the [member Viewport."
+"usage] property."
+msgstr ""
+
+#: doc/classes/Environment.xml:15 doc/classes/WorldEnvironment.xml:12
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/3d/"
+"environment_and_post_processing.html"
+msgstr ""
+
+#: doc/classes/Environment.xml:16
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/3d/high_dynamic_range.html"
+msgstr ""
+
+#: doc/classes/Environment.xml:17 doc/classes/Material.xml:10
+#: doc/classes/Mesh.xml:10 doc/classes/MeshInstance.xml:10
+#: doc/classes/WorldEnvironment.xml:13
+msgid "https://godotengine.org/asset-library/asset/123"
+msgstr ""
+
+#: doc/classes/Environment.xml:26
+msgid ""
+"Returns [code]true[/code] if the glow level [code]idx[/code] is specified, "
+"[code]false[/code] otherwise."
+msgstr ""
+
+#: doc/classes/Environment.xml:34
+msgid ""
+"Enables or disables the glow level at index [code]idx[/code]. Each level "
+"relies on the previous level. This means that enabling higher glow levels "
+"will slow down the glow effect rendering, even if previous levels aren't "
+"enabled."
+msgstr ""
+
+#: doc/classes/Environment.xml:40
+msgid ""
+"The global brightness value of the rendered scene. Effective only if "
+"[code]adjustment_enabled[/code] is [code]true[/code]."
+msgstr ""
+
+#: doc/classes/Environment.xml:43
+msgid ""
+"Applies the provided [Texture] resource to affect the global color aspect of "
+"the rendered scene. Effective only if [code]adjustment_enabled[/code] is "
+"[code]true[/code]."
+msgstr ""
+
+#: doc/classes/Environment.xml:46
+msgid ""
+"The global contrast value of the rendered scene (default value is 1). "
+"Effective only if [code]adjustment_enabled[/code] is [code]true[/code]."
+msgstr ""
+
+#: doc/classes/Environment.xml:49
+msgid ""
+"If [code]true[/code], enables the [code]adjustment_*[/code] properties "
+"provided by this resource. If [code]false[/code], modifications to the "
+"[code]adjustment_*[/code] properties will have no effect on the rendered "
+"scene."
+msgstr ""
+
+#: doc/classes/Environment.xml:52
+msgid ""
+"The global color saturation value of the rendered scene (default value is "
+"1). Effective only if [code]adjustment_enabled[/code] is [code]true[/code]."
+msgstr ""
+
+#: doc/classes/Environment.xml:55
+msgid "The ambient light's [Color]."
+msgstr ""
+
+#: doc/classes/Environment.xml:58
+msgid ""
+"The ambient light's energy. The higher the value, the stronger the light."
+msgstr ""
+
+#: doc/classes/Environment.xml:61
+msgid ""
+"Defines the amount of light that the sky brings on the scene. A value of 0 "
+"means that the sky's light emission has no effect on the scene illumination, "
+"thus all ambient illumination is provided by the ambient light. On the "
+"contrary, a value of 1 means that all the light that affects the scene is "
+"provided by the sky, thus the ambient light parameter has no effect on the "
+"scene."
+msgstr ""
+
+#: doc/classes/Environment.xml:64
+msgid ""
+"If [code]true[/code], enables the tonemapping auto exposure mode of the "
+"scene renderer. If [code]true[/code], the renderer will automatically "
+"determine the exposure setting to adapt to the scene's illumination and the "
+"observed light."
+msgstr ""
+
+#: doc/classes/Environment.xml:67
+msgid "The maximum luminance value for the auto exposure."
+msgstr ""
+
+#: doc/classes/Environment.xml:70
+msgid "The minimum luminance value for the auto exposure."
+msgstr ""
+
+#: doc/classes/Environment.xml:73
+msgid ""
+"The scale of the auto exposure effect. Affects the intensity of auto "
+"exposure."
+msgstr ""
+
+#: doc/classes/Environment.xml:76
+msgid ""
+"The speed of the auto exposure effect. Affects the time needed for the "
+"camera to perform auto exposure."
+msgstr ""
+
+#: doc/classes/Environment.xml:79
+msgid "The ID of the camera feed to show in the background."
+msgstr ""
+
+#: doc/classes/Environment.xml:82
+msgid ""
+"The maximum layer ID to display. Only effective when using the [constant "
+"BG_CANVAS] background mode."
+msgstr ""
+
+#: doc/classes/Environment.xml:85
+msgid ""
+"The [Color] displayed for clear areas of the scene. Only effective when "
+"using the [constant BG_COLOR] or [constant BG_COLOR_SKY] background modes)."
+msgstr ""
+
+#: doc/classes/Environment.xml:88
+msgid "The power of the light emitted by the background."
+msgstr ""
+
+#: doc/classes/Environment.xml:91
+msgid "The background mode. See [enum BGMode] for possible values."
+msgstr ""
+
+#: doc/classes/Environment.xml:94
+msgid "The [Sky] resource defined as background."
+msgstr ""
+
+#: doc/classes/Environment.xml:97
+msgid "The [Sky] resource's custom field of view."
+msgstr ""
+
+#: doc/classes/Environment.xml:100
+msgid "The [Sky] resource's rotation expressed as a [Basis]."
+msgstr ""
+
+#: doc/classes/Environment.xml:103
+msgid "The [Sky] resource's rotation expressed as Euler angles in radians."
+msgstr ""
+
+#: doc/classes/Environment.xml:106
+msgid "The [Sky] resource's rotation expressed as Euler angles in degrees."
+msgstr ""
+
+#: doc/classes/Environment.xml:109
+msgid "The amount of far blur for the depth-of-field effect."
+msgstr ""
+
+#: doc/classes/Environment.xml:112
+msgid ""
+"The distance from the camera where the far blur effect affects the rendering."
+msgstr ""
+
+#: doc/classes/Environment.xml:115
+msgid "If [code]true[/code], enables the depth-of-field far blur effect."
+msgstr ""
+
+#: doc/classes/Environment.xml:118
+msgid ""
+"The depth-of-field far blur's quality. Higher values can mitigate the "
+"visible banding effect seen at higher strengths, but are much slower."
+msgstr ""
+
+#: doc/classes/Environment.xml:121
+msgid "The length of the transition between the no-blur area and far blur."
+msgstr ""
+
+#: doc/classes/Environment.xml:124
+msgid "The amount of near blur for the depth-of-field effect."
+msgstr ""
+
+#: doc/classes/Environment.xml:127
+msgid ""
+"Distance from the camera where the near blur effect affects the rendering."
+msgstr ""
+
+#: doc/classes/Environment.xml:130
+msgid "If [code]true[/code], enables the depth-of-field near blur effect."
+msgstr ""
+
+#: doc/classes/Environment.xml:133
+msgid ""
+"The depth-of-field near blur's quality. Higher values can mitigate the "
+"visible banding effect seen at higher strengths, but are much slower."
+msgstr ""
+
+#: doc/classes/Environment.xml:136
+msgid "The length of the transition between the near blur and no-blur area."
+msgstr ""
+
+#: doc/classes/Environment.xml:139
+msgid "The fog's [Color]."
+msgstr ""
+
+#: doc/classes/Environment.xml:142
+msgid "The fog's depth starting distance from the camera."
+msgstr ""
+
+#: doc/classes/Environment.xml:145
+msgid ""
+"The fog depth's intensity curve. A number of presets are available in the "
+"[b]Inspector[/b] by right-clicking the curve."
+msgstr ""
+
+#: doc/classes/Environment.xml:148
+msgid ""
+"If [code]true[/code], the depth fog effect is enabled. When enabled, fog "
+"will appear in the distance (relative to the camera)."
+msgstr ""
+
+#: doc/classes/Environment.xml:151
+msgid ""
+"The fog's depth end distance from the camera. If this value is set to 0, it "
+"will be equal to the current camera's [member Camera.far] value."
+msgstr ""
+
+#: doc/classes/Environment.xml:154
+msgid ""
+"If [code]true[/code], fog effects are enabled. [member fog_height_enabled] "
+"and/or [member fog_depth_enabled] must be set to [code]true[/code] to "
+"actually display fog."
+msgstr ""
+
+#: doc/classes/Environment.xml:157
+msgid ""
+"The height fog's intensity. A number of presets are available in the "
+"[b]Inspector[/b] by right-clicking the curve."
+msgstr ""
+
+#: doc/classes/Environment.xml:160
+msgid ""
+"If [code]true[/code], the height fog effect is enabled. When enabled, fog "
+"will appear in a defined height range, regardless of the distance from the "
+"camera. This can be used to simulate \"deep water\" effects with a lower "
+"performance cost compared to a dedicated shader."
+msgstr ""
+
+#: doc/classes/Environment.xml:163
+msgid ""
+"The Y coordinate where the height fog will be the most intense. If this "
+"value is greater than [member fog_height_min], fog will be displayed from "
+"bottom to top. Otherwise, it will be displayed from top to bottom."
+msgstr ""
+
+#: doc/classes/Environment.xml:166
+msgid ""
+"The Y coordinate where the height fog will be the least intense. If this "
+"value is greater than [member fog_height_max], fog will be displayed from "
+"top to bottom. Otherwise, it will be displayed from bottom to top."
+msgstr ""
+
+#: doc/classes/Environment.xml:169
+msgid ""
+"The intensity of the depth fog color transition when looking towards the "
+"sun. The sun's direction is determined automatically using the "
+"DirectionalLight node in the scene."
+msgstr ""
+
+#: doc/classes/Environment.xml:172
+msgid "The depth fog's [Color] when looking towards the sun."
+msgstr ""
+
+#: doc/classes/Environment.xml:175
+msgid ""
+"The intensity of the fog light transmittance effect. Amount of light that "
+"the fog transmits."
+msgstr ""
+
+#: doc/classes/Environment.xml:178
+msgid ""
+"Enables fog's light transmission effect. If [code]true[/code], light will be "
+"more visible in the fog to simulate light scattering as in real life."
+msgstr ""
+
+#: doc/classes/Environment.xml:181
+msgid ""
+"Smooths out the blockiness created by sampling higher levels, at the cost of "
+"performance.\n"
+"[b]Note:[/b] When using the GLES2 renderer, this is only available if the "
+"GPU supports the [code]GL_EXT_gpu_shader4[/code] extension."
+msgstr ""
+
+#: doc/classes/Environment.xml:185
+msgid "The glow blending mode."
+msgstr ""
+
+#: doc/classes/Environment.xml:188
+msgid ""
+"The bloom's intensity. If set to a value higher than [code]0[/code], this "
+"will make glow visible in areas darker than the [member glow_hdr_threshold]."
+msgstr ""
+
+#: doc/classes/Environment.xml:191
+msgid "If [code]true[/code], the glow effect is enabled."
+msgstr ""
+
+#: doc/classes/Environment.xml:194
+msgid ""
+"The higher threshold of the HDR glow. Areas brighter than this threshold "
+"will be clamped for the purposes of the glow effect."
+msgstr ""
+
+#: doc/classes/Environment.xml:197
+msgid "The bleed scale of the HDR glow."
+msgstr ""
+
+#: doc/classes/Environment.xml:200
+msgid ""
+"The lower threshold of the HDR glow. When using the GLES2 renderer (which "
+"doesn't support HDR), this needs to be below [code]1.0[/code] for glow to be "
+"visible. A value of [code]0.9[/code] works well in this case."
+msgstr ""
+
+#: doc/classes/Environment.xml:203
+msgid ""
+"Takes more samples during downsample pass of glow. This ensures that single "
+"pixels are captured by glow which makes the glow look smoother and more "
+"stable during movement. However, it is very expensive and makes the glow "
+"post process take twice as long."
+msgstr ""
+
+#: doc/classes/Environment.xml:206
+msgid ""
+"The glow intensity. When using the GLES2 renderer, this should be increased "
+"to 1.5 to compensate for the lack of HDR rendering."
+msgstr ""
+
+#: doc/classes/Environment.xml:209
+msgid ""
+"If [code]true[/code], the 1st level of glow is enabled. This is the most "
+"\"local\" level (least blurry)."
+msgstr ""
+
+#: doc/classes/Environment.xml:212
+msgid "If [code]true[/code], the 2th level of glow is enabled."
+msgstr ""
+
+#: doc/classes/Environment.xml:215
+msgid "If [code]true[/code], the 3th level of glow is enabled."
+msgstr ""
+
+#: doc/classes/Environment.xml:218
+msgid "If [code]true[/code], the 4th level of glow is enabled."
+msgstr ""
+
+#: doc/classes/Environment.xml:221
+msgid "If [code]true[/code], the 5th level of glow is enabled."
+msgstr ""
+
+#: doc/classes/Environment.xml:224
+msgid "If [code]true[/code], the 6th level of glow is enabled."
+msgstr ""
+
+#: doc/classes/Environment.xml:227
+msgid ""
+"If [code]true[/code], the 7th level of glow is enabled. This is the most "
+"\"global\" level (blurriest)."
+msgstr ""
+
+#: doc/classes/Environment.xml:230
+msgid ""
+"The glow strength. When using the GLES2 renderer, this should be increased "
+"to 1.3 to compensate for the lack of HDR rendering."
+msgstr ""
+
+#: doc/classes/Environment.xml:233
+msgid "The depth tolerance for screen-space reflections."
+msgstr ""
+
+#: doc/classes/Environment.xml:236
+msgid ""
+"If [code]true[/code], screen-space reflections are enabled. Screen-space "
+"reflections are more accurate than reflections from [GIProbe]s or "
+"[ReflectionProbe]s, but are slower and can't reflect surfaces occluded by "
+"others."
+msgstr ""
+
+#: doc/classes/Environment.xml:239
+msgid ""
+"The fade-in distance for screen-space reflections. Affects the area from the "
+"reflected material to the screen-space reflection)."
+msgstr ""
+
+#: doc/classes/Environment.xml:242
+msgid ""
+"The fade-out distance for screen-space reflections. Affects the area from "
+"the screen-space reflection to the \"global\" reflection."
+msgstr ""
+
+#: doc/classes/Environment.xml:245
+msgid ""
+"The maximum number of steps for screen-space reflections. Higher values are "
+"slower."
+msgstr ""
+
+#: doc/classes/Environment.xml:248
+msgid ""
+"If [code]true[/code], screen-space reflections will take the material "
+"roughness into account."
+msgstr ""
+
+#: doc/classes/Environment.xml:251
+msgid ""
+"The screen-space ambient occlusion intensity on materials that have an AO "
+"texture defined. Values higher than [code]0[/code] will make the SSAO effect "
+"visible in areas darkened by AO textures."
+msgstr ""
+
+#: doc/classes/Environment.xml:254
+msgid ""
+"The screen-space ambient occlusion bias. This should be kept high enough to "
+"prevent \"smooth\" curves from being affected by ambient occlusion."
+msgstr ""
+
+#: doc/classes/Environment.xml:257
+msgid ""
+"The screen-space ambient occlusion blur quality. See [enum SSAOBlur] for "
+"possible values."
+msgstr ""
+
+#: doc/classes/Environment.xml:260
+msgid "The screen-space ambient occlusion color."
+msgstr ""
+
+#: doc/classes/Environment.xml:263
+msgid "The screen-space ambient occlusion edge sharpness."
+msgstr ""
+
+#: doc/classes/Environment.xml:266
+msgid ""
+"If [code]true[/code], the screen-space ambient occlusion effect is enabled. "
+"This darkens objects' corners and cavities to simulate ambient light not "
+"reaching the entire object as in real life. This works well for small, "
+"dynamic objects, but baked lighting or ambient occlusion textures will do a "
+"better job at displaying ambient occlusion on large static objects. This is "
+"a costly effect and should be disabled first when running into performance "
+"issues."
+msgstr ""
+
+#: doc/classes/Environment.xml:269
+msgid ""
+"The primary screen-space ambient occlusion intensity. See also [member "
+"ssao_radius]."
+msgstr ""
+
+#: doc/classes/Environment.xml:272
+msgid ""
+"The secondary screen-space ambient occlusion intensity. See also [member "
+"ssao_radius2]."
+msgstr ""
+
+#: doc/classes/Environment.xml:275
+msgid ""
+"The screen-space ambient occlusion intensity in direct light. In real life, "
+"ambient occlusion only applies to indirect light, which means its effects "
+"can't be seen in direct light. Values higher than [code]0[/code] will make "
+"the SSAO effect visible in direct light."
+msgstr ""
+
+#: doc/classes/Environment.xml:278
+msgid ""
+"The screen-space ambient occlusion quality. Higher qualities will make "
+"better use of small objects for ambient occlusion, but are slower."
+msgstr ""
+
+#: doc/classes/Environment.xml:281
+msgid "The primary screen-space ambient occlusion radius."
+msgstr ""
+
+#: doc/classes/Environment.xml:284
+msgid ""
+"The secondary screen-space ambient occlusion radius. If set to a value "
+"higher than [code]0[/code], enables the secondary screen-space ambient "
+"occlusion effect which can be used to improve the effect's appearance (at "
+"the cost of performance)."
+msgstr ""
+
+#: doc/classes/Environment.xml:287
+msgid "The default exposure used for tonemapping."
+msgstr ""
+
+#: doc/classes/Environment.xml:290
+msgid ""
+"The tonemapping mode to use. Tonemapping is the process that \"converts\" "
+"HDR values to be suitable for rendering on a LDR display. (Godot doesn't "
+"support rendering on HDR displays yet.)"
+msgstr ""
+
+#: doc/classes/Environment.xml:293
+msgid ""
+"The white reference value for tonemapping. Only effective if the [member "
+"tonemap_mode] isn't set to [constant TONE_MAPPER_LINEAR]."
+msgstr ""
+
+#: doc/classes/Environment.xml:298
+msgid ""
+"Keeps on screen every pixel drawn in the background. This is the fastest "
+"background mode, but it can only be safely used in fully-interior scenes (no "
+"visible sky or sky reflections). If enabled in a scene where the background "
+"is visible, \"ghost trail\" artifacts will be visible when moving the camera."
+msgstr ""
+
+#: doc/classes/Environment.xml:301
+msgid ""
+"Clears the background using the clear color defined in [member "
+"ProjectSettings.rendering/environment/default_clear_color]."
+msgstr ""
+
+#: doc/classes/Environment.xml:304
+msgid "Clears the background using a custom clear color."
+msgstr ""
+
+#: doc/classes/Environment.xml:307
+msgid "Displays a user-defined sky in the background."
+msgstr ""
+
+#: doc/classes/Environment.xml:310
+msgid ""
+"Clears the background using a custom clear color and allows defining a sky "
+"for shading and reflection. This mode is slightly faster than [constant "
+"BG_SKY] and should be preferred in scenes where reflections can be visible, "
+"but the sky itself never is (e.g. top-down camera)."
+msgstr ""
+
+#: doc/classes/Environment.xml:313
+msgid "Displays a [CanvasLayer] in the background."
+msgstr ""
+
+#: doc/classes/Environment.xml:316
+msgid "Displays a camera feed in the background."
+msgstr ""
+
+#: doc/classes/Environment.xml:319
+msgid "Represents the size of the [enum BGMode] enum."
+msgstr ""
+
+#: doc/classes/Environment.xml:322
+msgid ""
+"Additive glow blending mode. Mostly used for particles, glows (bloom), lens "
+"flare, bright sources."
+msgstr ""
+
+#: doc/classes/Environment.xml:325
+msgid ""
+"Screen glow blending mode. Increases brightness, used frequently with bloom."
+msgstr ""
+
+#: doc/classes/Environment.xml:328
+msgid ""
+"Soft light glow blending mode. Modifies contrast, exposes shadows and "
+"highlights (vivid bloom)."
+msgstr ""
+
+#: doc/classes/Environment.xml:331
+msgid ""
+"Replace glow blending mode. Replaces all pixels' color by the glow value. "
+"This can be used to simulate a full-screen blur effect by tweaking the glow "
+"parameters to match the original image's brightness."
+msgstr ""
+
+#: doc/classes/Environment.xml:334
+msgid ""
+"Linear tonemapper operator. Reads the linear data and passes it on "
+"unmodified."
+msgstr ""
+
+#: doc/classes/Environment.xml:337
+msgid ""
+"Reinhardt tonemapper operator. Performs a variation on rendered pixels' "
+"colors by this formula: [code]color = color / (1 + color)[/code]."
+msgstr ""
+
+#: doc/classes/Environment.xml:340
+msgid "Filmic tonemapper operator."
+msgstr ""
+
+#: doc/classes/Environment.xml:343
+msgid ""
+"Academy Color Encoding System tonemapper operator. Performs an aproximation "
+"of the ACES tonemapping curve."
+msgstr ""
+
+#: doc/classes/Environment.xml:346
+msgid ""
+"High quality Academy Color Encoding System tonemapper operator that matches "
+"the industry standard. Performs a more physically accurate curve fit which "
+"better simulates how light works in the real world. The color of lights and "
+"emissive materials will become lighter as the emissive energy increases, and "
+"will eventually become white if the light is bright enough to saturate the "
+"camera sensor."
+msgstr ""
+
+#: doc/classes/Environment.xml:349
+msgid "Low depth-of-field blur quality (fastest)."
+msgstr ""
+
+#: doc/classes/Environment.xml:352
+msgid "Medium depth-of-field blur quality."
+msgstr ""
+
+#: doc/classes/Environment.xml:355
+msgid "High depth-of-field blur quality (slowest)."
+msgstr ""
+
+#: doc/classes/Environment.xml:358
+msgid "No blur for the screen-space ambient occlusion effect (fastest)."
+msgstr ""
+
+#: doc/classes/Environment.xml:361
+msgid "1×1 blur for the screen-space ambient occlusion effect."
+msgstr ""
+
+#: doc/classes/Environment.xml:364
+msgid "2×2 blur for the screen-space ambient occlusion effect."
+msgstr ""
+
+#: doc/classes/Environment.xml:367
+msgid "3×3 blur for the screen-space ambient occlusion effect (slowest)."
+msgstr ""
+
+#: doc/classes/Environment.xml:370
+msgid "Low quality for the screen-space ambient occlusion effect (fastest)."
+msgstr ""
+
+#: doc/classes/Environment.xml:373
+msgid "Low quality for the screen-space ambient occlusion effect."
+msgstr ""
+
+#: doc/classes/Environment.xml:376
+msgid "Low quality for the screen-space ambient occlusion effect (slowest)."
+msgstr ""
+
+#: doc/classes/Expression.xml:4
+msgid "A class that stores an expression you can execute."
+msgstr ""
+
+#: doc/classes/Expression.xml:7
+msgid ""
+"An expression can be made of any arithmetic operation, built-in math "
+"function call, method call of a passed instance, or built-in type "
+"construction call.\n"
+"An example expression text using the built-in math functions could be "
+"[code]sqrt(pow(3,2) + pow(4,2))[/code].\n"
+"In the following example we use a [LineEdit] node to write our expression "
+"and show the result.\n"
+"[codeblock]\n"
+"onready var expression = Expression.new()\n"
+"\n"
+"func _ready():\n"
+" $LineEdit.connect(\"text_entered\", self, \"_on_text_entered\")\n"
+"\n"
+"func _on_text_entered(command):\n"
+" var error = expression.parse(command, [])\n"
+" if error != OK:\n"
+" print(expression.get_error_text())\n"
+" return\n"
+" var result = expression.execute([], null, true)\n"
+" if not expression.has_execute_failed():\n"
+" $LineEdit.text = str(result)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Expression.xml:35
+msgid ""
+"Executes the expression that was previously parsed by [method parse] and "
+"returns the result. Before you use the returned object, you should check if "
+"the method failed by calling [method has_execute_failed].\n"
+"If you defined input variables in [method parse], you can specify their "
+"values in the inputs array, in the same order."
+msgstr ""
+
+#: doc/classes/Expression.xml:42
+msgid "Returns the error text if [method parse] has failed."
+msgstr ""
+
+#: doc/classes/Expression.xml:48
+msgid "Returns [code]true[/code] if [method execute] has failed."
+msgstr ""
+
+#: doc/classes/Expression.xml:56
+msgid ""
+"Parses the expression and returns an [enum Error] code.\n"
+"You can optionally specify names of variables that may appear in the "
+"expression with [code]input_names[/code], so that you can bind them when it "
+"gets executed."
+msgstr ""
+
+#: doc/classes/ExternalTexture.xml:4
+msgid "Enable OpenGL ES external texture extension."
+msgstr ""
+
+#: doc/classes/ExternalTexture.xml:7
+msgid ""
+"Enable support for the OpenGL ES external texture extension as defined by "
+"[url=https://www.khronos.org/registry/OpenGL/extensions/OES/"
+"OES_EGL_image_external.txt]OES_EGL_image_external[/url].\n"
+"[b]Note:[/b] This is only supported for Android platforms."
+msgstr ""
+
+#: doc/classes/ExternalTexture.xml:16
+msgid "Returns the external texture name."
+msgstr ""
+
+#: doc/classes/ExternalTexture.xml:23
+msgid "External texture size."
+msgstr ""
+
+#: doc/classes/File.xml:4
+msgid "Type to handle file reading and writing operations."
+msgstr ""
+
+#: doc/classes/File.xml:7
+msgid ""
+"File type. This is used to permanently store data into the user device's "
+"file system and to read from it. This can be used to store game save data or "
+"player configuration files, for example.\n"
+"Here's a sample on how to write and read from a file:\n"
+"[codeblock]\n"
+"func save(content):\n"
+" var file = File.new()\n"
+" file.open(\"user://save_game.dat\", File.WRITE)\n"
+" file.store_string(content)\n"
+" file.close()\n"
+"\n"
+"func load():\n"
+" var file = File.new()\n"
+" file.open(\"user://save_game.dat\", File.READ)\n"
+" var content = file.get_as_text()\n"
+" file.close()\n"
+" return content\n"
+"[/codeblock]\n"
+"In the example above, the file will be saved in the user data folder as "
+"specified in the [url=https://docs.godotengine.org/en/3.4/tutorials/io/"
+"data_paths.html]Data paths[/url] documentation.\n"
+"[b]Note:[/b] To access project resources once exported, it is recommended to "
+"use [ResourceLoader] instead of the [File] API, as some files are converted "
+"to engine-specific formats and their original source files might not be "
+"present in the exported PCK package.\n"
+"[b]Note:[/b] Files are automatically closed only if the process exits "
+"\"normally\" (such as by clicking the window manager's close button or "
+"pressing [b]Alt + F4[/b]). If you stop the project execution by pressing "
+"[b]F8[/b] while the project is running, the file won't be closed as the game "
+"process will be killed. You can work around this by calling [method flush] "
+"at regular intervals."
+msgstr ""
+
+#: doc/classes/File.xml:35
+msgid ""
+"Closes the currently opened file and prevents subsequent read/write "
+"operations. Use [method flush] to persist the data to disk without closing "
+"the file."
+msgstr ""
+
+#: doc/classes/File.xml:41
+msgid ""
+"Returns [code]true[/code] if the file cursor has already read past the end "
+"of the file.\n"
+"[b]Note:[/b] [code]eof_reached() == false[/code] cannot be used to check "
+"whether there is more data available. To loop while there is more data "
+"available, use:\n"
+"[codeblock]\n"
+"while file.get_position() < file.get_len():\n"
+" # Read data\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/File.xml:53
+msgid ""
+"Returns [code]true[/code] if the file exists in the given path.\n"
+"[b]Note:[/b] Many resources types are imported (e.g. textures or sound "
+"files), and their source asset will not be included in the exported game, as "
+"only the imported version is used. See [method ResourceLoader.exists] for an "
+"alternative approach that takes resource remapping into account."
+msgstr ""
+
+#: doc/classes/File.xml:60
+msgid ""
+"Writes the file's buffer to disk. Flushing is automatically performed when "
+"the file is closed. This means you don't need to call [method flush] "
+"manually before closing a file using [method close]. Still, calling [method "
+"flush] can be used to ensure the data is safe even if the project crashes "
+"instead of being closed gracefully.\n"
+"[b]Note:[/b] Only call [method flush] when you actually need it. Otherwise, "
+"it will decrease performance due to constant disk writes."
+msgstr ""
+
+#: doc/classes/File.xml:67
+msgid ""
+"Returns the next 16 bits from the file as an integer. See [method store_16] "
+"for details on what values can be stored and retrieved this way."
+msgstr ""
+
+#: doc/classes/File.xml:73
+msgid ""
+"Returns the next 32 bits from the file as an integer. See [method store_32] "
+"for details on what values can be stored and retrieved this way."
+msgstr ""
+
+#: doc/classes/File.xml:79
+msgid ""
+"Returns the next 64 bits from the file as an integer. See [method store_64] "
+"for details on what values can be stored and retrieved this way."
+msgstr ""
+
+#: doc/classes/File.xml:85
+msgid ""
+"Returns the next 8 bits from the file as an integer. See [method store_8] "
+"for details on what values can be stored and retrieved this way."
+msgstr ""
+
+#: doc/classes/File.xml:91
+msgid ""
+"Returns the whole file as a [String].\n"
+"Text is interpreted as being UTF-8 encoded."
+msgstr ""
+
+#: doc/classes/File.xml:99
+msgid "Returns next [code]len[/code] bytes of the file as a [PoolByteArray]."
+msgstr ""
+
+#: doc/classes/File.xml:106
+msgid ""
+"Returns the next value of the file in CSV (Comma-Separated Values) format. "
+"You can pass a different delimiter [code]delim[/code] to use other than the "
+"default [code]\",\"[/code] (comma). This delimiter must be one-character "
+"long, and cannot be a double quotation mark.\n"
+"Text is interpreted as being UTF-8 encoded. Text values must be enclosed in "
+"double quotes if they include the delimiter character. Double quotes within "
+"a text value can be escaped by doubling their occurrence.\n"
+"For example, the following CSV lines are valid and will be properly parsed "
+"as two strings each:\n"
+"[codeblock]\n"
+"Alice,\"Hello, Bob!\"\n"
+"Bob,Alice! What a surprise!\n"
+"Alice,\"I thought you'd reply with \"\"Hello, world\"\".\"\n"
+"[/codeblock]\n"
+"Note how the second line can omit the enclosing quotes as it does not "
+"include the delimiter. However it [i]could[/i] very well use quotes, it was "
+"only written without for demonstration purposes. The third line must use "
+"[code]\"\"[/code] for each quotation mark that needs to be interpreted as "
+"such instead of the end of a text value."
+msgstr ""
+
+#: doc/classes/File.xml:120
+msgid "Returns the next 64 bits from the file as a floating-point number."
+msgstr ""
+
+#: doc/classes/File.xml:126
+msgid ""
+"Returns the last error that happened when trying to perform operations. "
+"Compare with the [code]ERR_FILE_*[/code] constants from [enum Error]."
+msgstr ""
+
+#: doc/classes/File.xml:132
+msgid "Returns the next 32 bits from the file as a floating-point number."
+msgstr ""
+
+#: doc/classes/File.xml:138
+msgid "Returns the size of the file in bytes."
+msgstr ""
+
+#: doc/classes/File.xml:144
+msgid ""
+"Returns the next line of the file as a [String].\n"
+"Text is interpreted as being UTF-8 encoded."
+msgstr ""
+
+#: doc/classes/File.xml:152
+msgid ""
+"Returns an MD5 String representing the file at the given path or an empty "
+"[String] on failure."
+msgstr ""
+
+#: doc/classes/File.xml:159
+msgid ""
+"Returns the last time the [code]file[/code] was modified in unix timestamp "
+"format or returns a [String] \"ERROR IN [code]file[/code]\". This unix "
+"timestamp can be converted to datetime by using [method OS."
+"get_datetime_from_unix_time]."
+msgstr ""
+
+#: doc/classes/File.xml:165
+msgid ""
+"Returns a [String] saved in Pascal format from the file.\n"
+"Text is interpreted as being UTF-8 encoded."
+msgstr ""
+
+#: doc/classes/File.xml:172
+msgid "Returns the path as a [String] for the current open file."
+msgstr ""
+
+#: doc/classes/File.xml:178
+msgid "Returns the absolute path as a [String] for the current open file."
+msgstr ""
+
+#: doc/classes/File.xml:184
+msgid "Returns the file cursor's position."
+msgstr ""
+
+#: doc/classes/File.xml:190
+msgid "Returns the next bits from the file as a floating-point number."
+msgstr ""
+
+#: doc/classes/File.xml:197
+msgid ""
+"Returns a SHA-256 [String] representing the file at the given path or an "
+"empty [String] on failure."
+msgstr ""
+
+#: doc/classes/File.xml:204
+msgid ""
+"Returns the next [Variant] value from the file. If [code]allow_objects[/"
+"code] is [code]true[/code], decoding objects is allowed.\n"
+"[b]Warning:[/b] Deserialized objects can contain code which gets executed. "
+"Do not use this option if the serialized object comes from untrusted sources "
+"to avoid potential security threats such as remote code execution."
+msgstr ""
+
+#: doc/classes/File.xml:211
+msgid "Returns [code]true[/code] if the file is currently opened."
+msgstr ""
+
+#: doc/classes/File.xml:219
+msgid "Opens the file for writing or reading, depending on the flags."
+msgstr ""
+
+#: doc/classes/File.xml:228
+msgid ""
+"Opens a compressed file for reading or writing.\n"
+"[b]Note:[/b] [method open_compressed] can only read files that were saved by "
+"Godot, not third-party compression formats. See [url=https://github.com/"
+"godotengine/godot/issues/28999]GitHub issue #28999[/url] for a workaround."
+msgstr ""
+
+#: doc/classes/File.xml:238
+msgid ""
+"Opens an encrypted file in write or read mode. You need to pass a binary key "
+"to encrypt/decrypt it.\n"
+"[b]Note:[/b] The provided key must be 32 bytes long."
+msgstr ""
+
+#: doc/classes/File.xml:248
+msgid ""
+"Opens an encrypted file in write or read mode. You need to pass a password "
+"to encrypt/decrypt it."
+msgstr ""
+
+#: doc/classes/File.xml:255
+msgid ""
+"Changes the file reading/writing cursor to the specified position (in bytes "
+"from the beginning of the file)."
+msgstr ""
+
+#: doc/classes/File.xml:262
+msgid ""
+"Changes the file reading/writing cursor to the specified position (in bytes "
+"from the end of the file).\n"
+"[b]Note:[/b] This is an offset, so you should use negative numbers or the "
+"cursor will be at the end of the file."
+msgstr ""
+
+#: doc/classes/File.xml:270
+msgid ""
+"Stores an integer as 16 bits in the file.\n"
+"[b]Note:[/b] The [code]value[/code] should lie in the interval [code][0, "
+"2^16 - 1][/code]. Any other value will overflow and wrap around.\n"
+"To store a signed integer, use [method store_64] or store a signed integer "
+"from the interval [code][-2^15, 2^15 - 1][/code] (i.e. keeping one bit for "
+"the signedness) and compute its sign manually when reading. For example:\n"
+"[codeblock]\n"
+"const MAX_15B = 1 << 15\n"
+"const MAX_16B = 1 << 16\n"
+"\n"
+"func unsigned16_to_signed(unsigned):\n"
+" return (unsigned + MAX_15B) % MAX_16B - MAX_15B\n"
+"\n"
+"func _ready():\n"
+" var f = File.new()\n"
+" f.open(\"user://file.dat\", File.WRITE_READ)\n"
+" f.store_16(-42) # This wraps around and stores 65494 (2^16 - 42).\n"
+" f.store_16(121) # In bounds, will store 121.\n"
+" f.seek(0) # Go back to start to read the stored value.\n"
+" var read1 = f.get_16() # 65494\n"
+" var read2 = f.get_16() # 121\n"
+" var converted1 = unsigned16_to_signed(read1) # -42\n"
+" var converted2 = unsigned16_to_signed(read2) # 121\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/File.xml:297
+msgid ""
+"Stores an integer as 32 bits in the file.\n"
+"[b]Note:[/b] The [code]value[/code] should lie in the interval [code][0, "
+"2^32 - 1][/code]. Any other value will overflow and wrap around.\n"
+"To store a signed integer, use [method store_64], or convert it manually "
+"(see [method store_16] for an example)."
+msgstr ""
+
+#: doc/classes/File.xml:306
+msgid ""
+"Stores an integer as 64 bits in the file.\n"
+"[b]Note:[/b] The [code]value[/code] must lie in the interval [code][-2^63, "
+"2^63 - 1][/code] (i.e. be a valid [int] value)."
+msgstr ""
+
+#: doc/classes/File.xml:314
+msgid ""
+"Stores an integer as 8 bits in the file.\n"
+"[b]Note:[/b] The [code]value[/code] should lie in the interval [code][0, 255]"
+"[/code]. Any other value will overflow and wrap around.\n"
+"To store a signed integer, use [method store_64], or convert it manually "
+"(see [method store_16] for an example)."
+msgstr ""
+
+#: doc/classes/File.xml:323
+msgid "Stores the given array of bytes in the file."
+msgstr ""
+
+#: doc/classes/File.xml:331
+msgid ""
+"Store the given [PoolStringArray] in the file as a line formatted in the CSV "
+"(Comma-Separated Values) format. You can pass a different delimiter "
+"[code]delim[/code] to use other than the default [code]\",\"[/code] (comma). "
+"This delimiter must be one-character long.\n"
+"Text will be encoded as UTF-8."
+msgstr ""
+
+#: doc/classes/File.xml:339
+msgid "Stores a floating-point number as 64 bits in the file."
+msgstr ""
+
+#: doc/classes/File.xml:346
+msgid "Stores a floating-point number as 32 bits in the file."
+msgstr ""
+
+#: doc/classes/File.xml:353
+msgid ""
+"Appends [code]line[/code] to the file followed by a line return character "
+"([code]\\n[/code]), encoding the text as UTF-8."
+msgstr ""
+
+#: doc/classes/File.xml:360
+msgid ""
+"Stores the given [String] as a line in the file in Pascal format (i.e. also "
+"store the length of the string).\n"
+"Text will be encoded as UTF-8."
+msgstr ""
+
+#: doc/classes/File.xml:368
+msgid "Stores a floating-point number in the file."
+msgstr ""
+
+#: doc/classes/File.xml:375
+msgid ""
+"Appends [code]string[/code] to the file without a line return, encoding the "
+"text as UTF-8."
+msgstr ""
+
+#: doc/classes/File.xml:383
+msgid ""
+"Stores any Variant value in the file. If [code]full_objects[/code] is "
+"[code]true[/code], encoding objects is allowed (and can potentially include "
+"code).\n"
+"[b]Note:[/b] Not all properties are included. Only properties that are "
+"configured with the [constant PROPERTY_USAGE_STORAGE] flag set will be "
+"serialized. You can add a new usage flag to a property by overriding the "
+"[method Object._get_property_list] method in your class. You can also check "
+"how property usage is configured by calling [method Object."
+"_get_property_list]. See [enum PropertyUsageFlags] for the possible usage "
+"flags."
+msgstr ""
+
+#: doc/classes/File.xml:390
+msgid ""
+"If [code]true[/code], the file is read with big-endian [url=https://en."
+"wikipedia.org/wiki/Endianness]endianness[/url]. If [code]false[/code], the "
+"file is read with little-endian endianness. If in doubt, leave this to "
+"[code]false[/code] as most files are written with little-endian endianness.\n"
+"[b]Note:[/b] [member endian_swap] is only about the file format, not the CPU "
+"type. The CPU endianness doesn't affect the default endianness for files "
+"written.\n"
+"[b]Note:[/b] This is always reset to [code]false[/code] whenever you open "
+"the file. Therefore, you must set [member endian_swap] [i]after[/i] opening "
+"the file, not before."
+msgstr ""
+
+#: doc/classes/File.xml:397
+msgid ""
+"Opens the file for read operations. The cursor is positioned at the "
+"beginning of the file."
+msgstr ""
+
+#: doc/classes/File.xml:400
+msgid ""
+"Opens the file for write operations. The file is created if it does not "
+"exist, and truncated if it does."
+msgstr ""
+
+#: doc/classes/File.xml:403
+msgid ""
+"Opens the file for read and write operations. Does not truncate the file. "
+"The cursor is positioned at the beginning of the file."
+msgstr ""
+
+#: doc/classes/File.xml:406
+msgid ""
+"Opens the file for read and write operations. The file is created if it does "
+"not exist, and truncated if it does. The cursor is positioned at the "
+"beginning of the file."
+msgstr ""
+
+#: doc/classes/File.xml:409
+msgid "Uses the [url=http://fastlz.org/]FastLZ[/url] compression method."
+msgstr ""
+
+#: doc/classes/File.xml:412
+msgid ""
+"Uses the [url=https://en.wikipedia.org/wiki/DEFLATE]DEFLATE[/url] "
+"compression method."
+msgstr ""
+
+#: doc/classes/File.xml:415
+msgid ""
+"Uses the [url=https://facebook.github.io/zstd/]Zstandard[/url] compression "
+"method."
+msgstr ""
+
+#: doc/classes/File.xml:418
+msgid "Uses the [url=https://www.gzip.org/]gzip[/url] compression method."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:4
+msgid "Dialog for selecting files or directories in the filesystem."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:7
+msgid ""
+"FileDialog is a preset dialog used to choose files and directories in the "
+"filesystem. It supports filter masks. The FileDialog automatically sets its "
+"window title according to the [member mode]. If you want to use a custom "
+"title, disable this by setting [member mode_overrides_title] to [code]false[/"
+"code]."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:16
+msgid ""
+"Adds [code]filter[/code] as a custom filter; [code]filter[/code] should be "
+"of the form [code]\"filename.extension ; Description\"[/code]. For example, "
+"[code]\"*.png ; PNG Images\"[/code]."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:22
+msgid "Clear all the added filters in the dialog."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:28
+msgid "Clear currently selected items in the dialog."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:34
+msgid ""
+"Returns the LineEdit for the selected file.\n"
+"[b]Warning:[/b] This is a required internal node, removing and freeing it "
+"may cause a crash. If you wish to hide it or any of its children, use their "
+"[member CanvasItem.visible] property."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:41
+msgid ""
+"Returns the vertical box container of the dialog, custom controls can be "
+"added to it.\n"
+"[b]Warning:[/b] This is a required internal node, removing and freeing it "
+"may cause a crash. If you wish to hide it or any of its children, use their "
+"[member CanvasItem.visible] property."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:48
+msgid "Invalidate and update the current dialog content list."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:54
+msgid ""
+"The file system access scope. See enum [code]Access[/code] constants.\n"
+"[b]Warning:[/b] Currently, in sandboxed environments such as HTML5 builds or "
+"sandboxed macOS apps, FileDialog cannot access the host file system. See "
+"[url=https://github.com/godotengine/godot-proposals/issues/1123]godot-"
+"proposals#1123[/url]."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:58
+msgid "The current working directory of the file dialog."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:61
+msgid "The currently selected file of the file dialog."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:64
+msgid "The currently selected file path of the file dialog."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:68
+msgid ""
+"The available file type filters. For example, this shows only [code].png[/"
+"code] and [code].gd[/code] files: [code]set_filters(PoolStringArray([\"*."
+"png ; PNG Images\",\"*.gd ; GDScript Files\"]))[/code]."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:71
+msgid ""
+"The dialog's open or save mode, which affects the selection behavior. See "
+"enum [code]Mode[/code] constants."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:74
+msgid ""
+"If [code]true[/code], changing the [code]Mode[/code] property will set the "
+"window title accordingly (e.g. setting mode to [constant MODE_OPEN_FILE] "
+"will change the window title to \"Open a File\")."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:77
+msgid "If [code]true[/code], the dialog will show hidden files."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:85
+msgid "Emitted when the user selects a directory."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:91
+msgid ""
+"Emitted when the user selects a file by double-clicking it or pressing the "
+"[b]OK[/b] button."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:97
+msgid "Emitted when the user selects multiple files."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:103
+msgid "The dialog allows selecting one, and only one file."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:106
+msgid "The dialog allows selecting multiple files."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:109
+msgid ""
+"The dialog only allows selecting a directory, disallowing the selection of "
+"any file."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:112
+msgid "The dialog allows selecting one file or directory."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:115
+msgid "The dialog will warn when a file exists."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:118
+msgid ""
+"The dialog only allows accessing files under the [Resource] path "
+"([code]res://[/code])."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:121
+msgid ""
+"The dialog only allows accessing files under user data path ([code]user://[/"
+"code])."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:124
+msgid "The dialog allows accessing files on the whole file system."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:129
+msgid "Custom icon for files."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:132
+msgid "The color modulation applied to the file icon."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:135
+msgid ""
+"The color tint for disabled files (when the [FileDialog] is used in open "
+"folder mode)."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:138
+msgid "Custom icon for folders."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:141
+msgid "The color modulation applied to the folder icon."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:144
+msgid "Custom icon for the parent folder arrow."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:147
+msgid "Custom icon for the reload button."
+msgstr ""
+
+#: doc/classes/FileDialog.xml:150
+msgid "Custom icon for the toggle hidden button."
+msgstr ""
+
+#: doc/classes/float.xml:4
+msgid "Float built-in type."
+msgstr ""
+
+#: doc/classes/float.xml:7
+msgid ""
+"The [float] built-in type is a 64-bit double-precision floating-point "
+"number, equivalent to [code]double[/code] in C++. This type has 14 reliable "
+"decimal digits of precision. The [float] type can be stored in [Variant], "
+"which is the generic type used by the engine. The maximum value of [float] "
+"is approximately [code]1.79769e308[/code], and the minimum is approximately "
+"[code]-1.79769e308[/code].\n"
+"Most methods and properties in the engine use 32-bit single-precision "
+"floating-point numbers instead, equivalent to [code]float[/code] in C++, "
+"which have 6 reliable decimal digits of precision. For data structures such "
+"as [Vector2] and [Vector3], Godot uses 32-bit floating-point numbers.\n"
+"Math done using the [float] type is not guaranteed to be exact or "
+"deterministic, and will often result in small errors. You should usually use "
+"the [method @GDScript.is_equal_approx] and [method @GDScript.is_zero_approx] "
+"methods instead of [code]==[/code] to compare [float] values for equality."
+msgstr ""
+
+#: doc/classes/float.xml:12
+msgid "https://en.wikipedia.org/wiki/Double-precision_floating-point_format"
+msgstr ""
+
+#: doc/classes/float.xml:13
+msgid "https://en.wikipedia.org/wiki/Single-precision_floating-point_format"
+msgstr ""
+
+#: doc/classes/float.xml:20
+msgid ""
+"Cast a [bool] value to a floating-point value, [code]float(true)[/code] will "
+"be equal to 1.0 and [code]float(false)[/code] will be equal to 0.0."
+msgstr ""
+
+#: doc/classes/float.xml:27
+msgid ""
+"Cast an [int] value to a floating-point value, [code]float(1)[/code] will be "
+"equal to 1.0."
+msgstr ""
+
+#: doc/classes/float.xml:34
+msgid ""
+"Cast a [String] value to a floating-point value. This method accepts float "
+"value strings like [code]\"1.23\"[/code] and exponential notation strings "
+"for its parameter so calling [code]float(\"1e3\")[/code] will return 1000.0 "
+"and calling [code]float(\"1e-3\")[/code] will return 0.001. Calling this "
+"method with an invalid float string will return 0. This method stops parsing "
+"at the first invalid character and will return the parsed result so far, so "
+"calling [code]float(\"1a3\")[/code] will return 1 while calling "
+"[code]float(\"1e3a2\")[/code] will return 1000.0."
+msgstr ""
+
+#: doc/classes/Font.xml:4
+msgid "Internationalized font and text drawing support."
+msgstr ""
+
+#: doc/classes/Font.xml:7
+msgid ""
+"Font contains a Unicode-compatible character set, as well as the ability to "
+"draw it with variable width, ascent, descent and kerning. For creating fonts "
+"from TTF files (or other font formats), see the editor support for fonts.\n"
+"[b]Note:[/b] If a [DynamicFont] doesn't contain a character used in a "
+"string, the character in question will be replaced with codepoint "
+"[code]0xfffd[/code] if it's available in the [DynamicFont]. If this "
+"replacement character isn't available in the DynamicFont, the character will "
+"be hidden without displaying any replacement character in the string.\n"
+"[b]Note:[/b] If a [BitmapFont] doesn't contain a character used in a string, "
+"the character in question will be hidden without displaying any replacement "
+"character in the string.\n"
+"[b]Note:[/b] Unicode characters after [code]0xffff[/code] (such as most "
+"emoji) are [i]not[/i] supported on Windows. They will display as unknown "
+"characters instead. This will be resolved in Godot 4.0."
+msgstr ""
+
+#: doc/classes/Font.xml:24
+msgid ""
+"Draw [code]string[/code] into a canvas item using the font at a given "
+"position, with [code]modulate[/code] color, and optionally clipping the "
+"width. [code]position[/code] specifies the baseline, not the top. To draw "
+"from the top, [i]ascent[/i] must be added to the Y axis.\n"
+"See also [method CanvasItem.draw_string]."
+msgstr ""
+
+#: doc/classes/Font.xml:37
+msgid ""
+"Draw character [code]char[/code] into a canvas item using the font at a "
+"given position, with [code]modulate[/code] color, and optionally kerning if "
+"[code]next[/code] is passed. clipping the width. [code]position[/code] "
+"specifies the baseline, not the top. To draw from the top, [i]ascent[/i] "
+"must be added to the Y axis. The width used by the character is returned, "
+"making this function useful for drawing strings character by character."
+msgstr ""
+
+#: doc/classes/Font.xml:43
+msgid "Returns the font ascent (number of pixels above the baseline)."
+msgstr ""
+
+#: doc/classes/Font.xml:51
+msgid ""
+"Returns the size of a character, optionally taking kerning into account if "
+"the next character is provided. Note that the height returned is the font "
+"height (see [method get_height]) and has no relation to the glyph height."
+msgstr ""
+
+#: doc/classes/Font.xml:57
+msgid "Returns the font descent (number of pixels below the baseline)."
+msgstr ""
+
+#: doc/classes/Font.xml:63
+msgid "Returns the total font height (ascent plus descent) in pixels."
+msgstr ""
+
+#: doc/classes/Font.xml:70
+msgid ""
+"Returns the size of a string, taking kerning and advance into account. Note "
+"that the height returned is the font height (see [method get_height]) and "
+"has no relation to the string."
+msgstr ""
+
+#: doc/classes/Font.xml:78
+msgid ""
+"Returns the size that the string would have with word wrapping enabled with "
+"a fixed [code]width[/code]."
+msgstr ""
+
+#: doc/classes/Font.xml:84
+msgid "Returns [code]true[/code] if the font has an outline."
+msgstr ""
+
+#: doc/classes/Font.xml:95
+msgid ""
+"After editing a font (changing size, ascent, char rects, etc.). Call this "
+"function to propagate changes to controls that might use it."
+msgstr ""
+
+#: doc/classes/FuncRef.xml:4
+msgid "Reference to a function in an object."
+msgstr ""
+
+#: doc/classes/FuncRef.xml:7
+msgid ""
+"In GDScript, functions are not [i]first-class objects[/i]. This means it is "
+"impossible to store them directly as variables, return them from another "
+"function, or pass them as arguments.\n"
+"However, by creating a [FuncRef] using the [method @GDScript.funcref] "
+"function, a reference to a function in a given object can be created, passed "
+"around and called."
+msgstr ""
+
+#: doc/classes/FuncRef.xml:16
+msgid ""
+"Calls the referenced function previously set in [member function] or [method "
+"@GDScript.funcref]."
+msgstr ""
+
+#: doc/classes/FuncRef.xml:23
+msgid ""
+"Calls the referenced function previously set in [member function] or [method "
+"@GDScript.funcref]. Contrarily to [method call_func], this method does not "
+"support a variable number of arguments but expects all parameters to be "
+"passed via a single [Array]."
+msgstr ""
+
+#: doc/classes/FuncRef.xml:29
+msgid "Returns whether the object still exists and has the function assigned."
+msgstr ""
+
+#: doc/classes/FuncRef.xml:36
+msgid ""
+"The object containing the referenced function. This object must be of a type "
+"actually inheriting from [Object], not a built-in type such as [int], "
+"[Vector2] or [Dictionary]."
+msgstr ""
+
+#: doc/classes/FuncRef.xml:42
+msgid "The name of the referenced function."
+msgstr ""
+
+#: modules/gdnative/doc_classes/GDNativeLibrary.xml:4
+msgid ""
+"An external library containing functions or script classes to use in Godot."
+msgstr ""
+
+#: modules/gdnative/doc_classes/GDNativeLibrary.xml:7
+msgid ""
+"A GDNative library can implement [NativeScript]s, global functions to call "
+"with the [GDNative] class, or low-level engine extensions through interfaces "
+"such as [ARVRInterfaceGDNative]. The library must be compiled for each "
+"platform and architecture that the project will run on."
+msgstr ""
+
+#: modules/gdnative/doc_classes/GDNativeLibrary.xml:10
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/plugins/gdnative/gdnative-c-"
+"example.html"
+msgstr ""
+
+#: modules/gdnative/doc_classes/GDNativeLibrary.xml:11
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/plugins/gdnative/gdnative-cpp-"
+"example.html"
+msgstr ""
+
+#: modules/gdnative/doc_classes/GDNativeLibrary.xml:17
+msgid ""
+"Returns paths to all dependency libraries for the current platform and "
+"architecture."
+msgstr ""
+
+#: modules/gdnative/doc_classes/GDNativeLibrary.xml:23
+msgid ""
+"Returns the path to the dynamic library file for the current platform and "
+"architecture."
+msgstr ""
+
+#: modules/gdnative/doc_classes/GDNativeLibrary.xml:29
+msgid ""
+"This resource in INI-style [ConfigFile] format, as in [code].gdnlib[/code] "
+"files."
+msgstr ""
+
+#: modules/gdnative/doc_classes/GDNativeLibrary.xml:32
+msgid ""
+"If [code]true[/code], Godot loads only one copy of the library and each "
+"script that references the library will share static data like static or "
+"global variables.\n"
+"If [code]false[/code], Godot loads a separate copy of the library into "
+"memory for each script that references it."
+msgstr ""
+
+#: modules/gdnative/doc_classes/GDNativeLibrary.xml:36
+msgid ""
+"If [code]true[/code], the editor will temporarily unload the library "
+"whenever the user switches away from the editor window, allowing the user to "
+"recompile the library without restarting Godot.\n"
+"[b]Note:[/b] If the library defines tool scripts that run inside the editor, "
+"[code]reloadable[/code] must be [code]false[/code]. Otherwise, the editor "
+"will attempt to unload the tool scripts while they're in use and crash."
+msgstr ""
+
+#: modules/gdnative/doc_classes/GDNativeLibrary.xml:40
+msgid ""
+"If [code]true[/code], Godot loads the library at startup rather than the "
+"first time a script uses the library, calling [code]{prefix}"
+"gdnative_singleton[/code] after initializing the library (where [code]"
+"{prefix}[/code] is the value of [member symbol_prefix]). The library remains "
+"loaded as long as Godot is running.\n"
+"[b]Note:[/b] A singleton library cannot be [member reloadable]."
+msgstr ""
+
+#: modules/gdnative/doc_classes/GDNativeLibrary.xml:44
+msgid ""
+"The prefix this library's entry point functions begin with. For example, a "
+"GDNativeLibrary would declare its [code]gdnative_init[/code] function as "
+"[code]godot_gdnative_init[/code] by default.\n"
+"On platforms that require statically linking libraries (currently only iOS), "
+"each library must have a different [code]symbol_prefix[/code]."
+msgstr ""
+
+#: modules/gdscript/doc_classes/GDScript.xml:4
+msgid "A script implemented in the GDScript programming language."
+msgstr ""
+
+#: modules/gdscript/doc_classes/GDScript.xml:7
+msgid ""
+"A script implemented in the GDScript programming language. The script "
+"extends the functionality of all objects that instance it.\n"
+"[method new] creates a new instance of the script. [method Object."
+"set_script] extends an existing object, if that object's class matches one "
+"of the script's base classes."
+msgstr ""
+
+#: modules/gdscript/doc_classes/GDScript.xml:11
+msgid ""
+"https://docs.godotengine.org/en/3.4/getting_started/scripting/gdscript/index."
+"html"
+msgstr ""
+
+#: modules/gdscript/doc_classes/GDScript.xml:17
+msgid "Returns byte code for the script source code."
+msgstr ""
+
+#: modules/gdscript/doc_classes/GDScript.xml:23
+msgid ""
+"Returns a new instance of the script.\n"
+"For example:\n"
+"[codeblock]\n"
+"var MyClass = load(\"myclass.gd\")\n"
+"var instance = MyClass.new()\n"
+"assert(instance.get_script() == MyClass)\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/gdscript/doc_classes/GDScriptFunctionState.xml:4
+msgid "State of a function call after yielding."
+msgstr ""
+
+#: modules/gdscript/doc_classes/GDScriptFunctionState.xml:7
+msgid ""
+"Calling [method @GDScript.yield] within a function will cause that function "
+"to yield and return its current state as an object of this type. The yielded "
+"function call can then be resumed later by calling [method resume] on this "
+"state object."
+msgstr ""
+
+#: modules/gdscript/doc_classes/GDScriptFunctionState.xml:16
+msgid ""
+"Check whether the function call may be resumed. This is not the case if the "
+"function state was already resumed.\n"
+"If [code]extended_check[/code] is enabled, it also checks if the associated "
+"script and object still exist. The extended check is done in debug mode as "
+"part of [method GDScriptFunctionState.resume], but you can use this if you "
+"know you may be trying to resume without knowing for sure the object and/or "
+"script have survived up to that point."
+msgstr ""
+
+#: modules/gdscript/doc_classes/GDScriptFunctionState.xml:24
+msgid ""
+"Resume execution of the yielded function call.\n"
+"If handed an argument, return the argument from the [method @GDScript.yield] "
+"call in the yielded function call. You can pass e.g. an [Array] to hand "
+"multiple arguments.\n"
+"This function returns what the resumed function call returns, possibly "
+"another function state if yielded again."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:4
+msgid ""
+"The generic 6-degrees-of-freedom joint can implement a variety of joint "
+"types by locking certain axes' rotation or translation."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:7
+msgid ""
+"The first 3 DOF axes are linear axes, which represent translation of Bodies, "
+"and the latter 3 DOF axes represent the angular motion. Each axis can be "
+"either locked, or limited."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:93
+msgid ""
+"The amount of rotational damping across the X axis.\n"
+"The lower, the longer an impulse from one side takes to travel to the other "
+"side."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:97
+msgid "If [code]true[/code], rotation across the X axis is limited."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:100
+msgid ""
+"When rotating across the X axis, this error tolerance factor defines how "
+"much the correction gets slowed down. The lower, the slower."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:103
+msgid ""
+"The maximum amount of force that can occur, when rotating around the X axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:106
+msgid ""
+"The minimum rotation in negative direction to break loose and rotate around "
+"the X axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:109
+msgid ""
+"The amount of rotational restitution across the X axis. The lower, the more "
+"restitution occurs."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:112
+msgid "The speed of all rotations across the X axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:115
+msgid ""
+"The minimum rotation in positive direction to break loose and rotate around "
+"the X axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:118
+msgid ""
+"The amount of rotational damping across the Y axis. The lower, the more "
+"dampening occurs."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:121
+msgid "If [code]true[/code], rotation across the Y axis is limited."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:124
+msgid ""
+"When rotating across the Y axis, this error tolerance factor defines how "
+"much the correction gets slowed down. The lower, the slower."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:127
+msgid ""
+"The maximum amount of force that can occur, when rotating around the Y axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:130
+msgid ""
+"The minimum rotation in negative direction to break loose and rotate around "
+"the Y axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:133
+msgid ""
+"The amount of rotational restitution across the Y axis. The lower, the more "
+"restitution occurs."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:136
+msgid "The speed of all rotations across the Y axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:139
+msgid ""
+"The minimum rotation in positive direction to break loose and rotate around "
+"the Y axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:142
+msgid ""
+"The amount of rotational damping across the Z axis. The lower, the more "
+"dampening occurs."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:145
+msgid "If [code]true[/code], rotation across the Z axis is limited."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:148
+msgid ""
+"When rotating across the Z axis, this error tolerance factor defines how "
+"much the correction gets slowed down. The lower, the slower."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:151
+msgid ""
+"The maximum amount of force that can occur, when rotating around the Z axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:154
+msgid ""
+"The minimum rotation in negative direction to break loose and rotate around "
+"the Z axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:157
+msgid ""
+"The amount of rotational restitution across the Z axis. The lower, the more "
+"restitution occurs."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:160
+msgid "The speed of all rotations across the Z axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:163
+msgid ""
+"The minimum rotation in positive direction to break loose and rotate around "
+"the Z axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:166
+msgid "If [code]true[/code], a rotating motor at the X axis is enabled."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:169
+msgid "Maximum acceleration for the motor at the X axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:172
+msgid "Target speed for the motor at the X axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:175
+msgid "If [code]true[/code], a rotating motor at the Y axis is enabled."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:178
+msgid "Maximum acceleration for the motor at the Y axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:181
+msgid "Target speed for the motor at the Y axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:184
+msgid "If [code]true[/code], a rotating motor at the Z axis is enabled."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:187
+msgid "Maximum acceleration for the motor at the Z axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:190
+msgid "Target speed for the motor at the Z axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:217
+msgid "The amount of damping that happens at the X motion."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:220
+msgid "If [code]true[/code], the linear motion across the X axis is limited."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:223
+msgid "The minimum difference between the pivot points' X axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:226
+msgid ""
+"The amount of restitution on the X axis movement. The lower, the more "
+"momentum gets lost."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:229
+msgid ""
+"A factor applied to the movement across the X axis. The lower, the slower "
+"the movement."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:232
+msgid "The maximum difference between the pivot points' X axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:235
+msgid "The amount of damping that happens at the Y motion."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:238
+msgid "If [code]true[/code], the linear motion across the Y axis is limited."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:241
+msgid "The minimum difference between the pivot points' Y axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:244
+msgid ""
+"The amount of restitution on the Y axis movement. The lower, the more "
+"momentum gets lost."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:247
+msgid ""
+"A factor applied to the movement across the Y axis. The lower, the slower "
+"the movement."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:250
+msgid "The maximum difference between the pivot points' Y axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:253
+msgid "The amount of damping that happens at the Z motion."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:256
+msgid "If [code]true[/code], the linear motion across the Z axis is limited."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:259
+msgid "The minimum difference between the pivot points' Z axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:262
+msgid ""
+"The amount of restitution on the Z axis movement. The lower, the more "
+"momentum gets lost."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:265
+msgid ""
+"A factor applied to the movement across the Z axis. The lower, the slower "
+"the movement."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:268
+msgid "The maximum difference between the pivot points' Z axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:271
+msgid ""
+"If [code]true[/code], then there is a linear motor on the X axis. It will "
+"attempt to reach the target velocity while staying within the force limits."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:274
+msgid ""
+"The maximum force the linear motor can apply on the X axis while trying to "
+"reach the target velocity."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:277
+msgid "The speed that the linear motor will attempt to reach on the X axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:280
+msgid ""
+"If [code]true[/code], then there is a linear motor on the Y axis. It will "
+"attempt to reach the target velocity while staying within the force limits."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:283
+msgid ""
+"The maximum force the linear motor can apply on the Y axis while trying to "
+"reach the target velocity."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:286
+msgid "The speed that the linear motor will attempt to reach on the Y axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:289
+msgid ""
+"If [code]true[/code], then there is a linear motor on the Z axis. It will "
+"attempt to reach the target velocity while staying within the force limits."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:292
+msgid ""
+"The maximum force the linear motor can apply on the Z axis while trying to "
+"reach the target velocity."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:295
+msgid "The speed that the linear motor will attempt to reach on the Z axis."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:324 doc/classes/PhysicsServer.xml:1086
+msgid "The minimum difference between the pivot points' axes."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:327 doc/classes/PhysicsServer.xml:1089
+msgid "The maximum difference between the pivot points' axes."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:330
+msgid ""
+"A factor applied to the movement across the axes. The lower, the slower the "
+"movement."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:333
+msgid ""
+"The amount of restitution on the axes' movement. The lower, the more "
+"momentum gets lost."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:336 doc/classes/PhysicsServer.xml:1098
+msgid ""
+"The amount of damping that happens at the linear motion across the axes."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:339
+msgid "The velocity the linear motor will try to reach."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:342
+msgid ""
+"The maximum force the linear motor will apply while trying to reach the "
+"velocity target."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:351 doc/classes/PhysicsServer.xml:1107
+msgid ""
+"The minimum rotation in negative direction to break loose and rotate around "
+"the axes."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:354 doc/classes/PhysicsServer.xml:1110
+msgid ""
+"The minimum rotation in positive direction to break loose and rotate around "
+"the axes."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:357
+msgid "The speed of all rotations across the axes."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:360 doc/classes/PhysicsServer.xml:1116
+msgid ""
+"The amount of rotational damping across the axes. The lower, the more "
+"dampening occurs."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:363 doc/classes/PhysicsServer.xml:1119
+msgid ""
+"The amount of rotational restitution across the axes. The lower, the more "
+"restitution occurs."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:366 doc/classes/PhysicsServer.xml:1122
+msgid ""
+"The maximum amount of force that can occur, when rotating around the axes."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:369
+msgid ""
+"When rotating across the axes, this error tolerance factor defines how much "
+"the correction gets slowed down. The lower, the slower."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:372 doc/classes/PhysicsServer.xml:1128
+msgid "Target speed for the motor at the axes."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:375 doc/classes/PhysicsServer.xml:1131
+msgid "Maximum acceleration for the motor at the axes."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:387
+msgid "If enabled, linear motion is possible within the given limits."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:390
+msgid "If enabled, rotational motion is possible within the given limits."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:397
+msgid "If enabled, there is a rotational motor across these axes."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:400
+msgid "If enabled, there is a linear motor across these axes."
+msgstr ""
+
+#: doc/classes/Generic6DOFJoint.xml:403 doc/classes/HingeJoint.xml:108
+msgid "Represents the size of the [enum Flag] enum."
+msgstr ""
+
+#: doc/classes/Geometry.xml:4
+msgid "Helper node to calculate generic geometry operations."
+msgstr ""
+
+#: doc/classes/Geometry.xml:7
+msgid ""
+"Geometry provides users with a set of helper functions to create geometric "
+"shapes, compute intersections between shapes, and process various other "
+"geometric operations."
+msgstr ""
+
+#: doc/classes/Geometry.xml:16
+msgid ""
+"Returns an array with 6 [Plane]s that describe the sides of a box centered "
+"at the origin. The box size is defined by [code]extents[/code], which "
+"represents one (positive) corner of the box (i.e. half its actual size)."
+msgstr ""
+
+#: doc/classes/Geometry.xml:27
+msgid ""
+"Returns an array of [Plane]s closely bounding a faceted capsule centered at "
+"the origin with radius [code]radius[/code] and height [code]height[/code]. "
+"The parameter [code]sides[/code] defines how many planes will be generated "
+"for the side part of the capsule, whereas [code]lats[/code] gives the number "
+"of latitudinal steps at the bottom and top of the capsule. The parameter "
+"[code]axis[/code] describes the axis along which the capsule is oriented (0 "
+"for X, 1 for Y, 2 for Z)."
+msgstr ""
+
+#: doc/classes/Geometry.xml:37
+msgid ""
+"Returns an array of [Plane]s closely bounding a faceted cylinder centered at "
+"the origin with radius [code]radius[/code] and height [code]height[/code]. "
+"The parameter [code]sides[/code] defines how many planes will be generated "
+"for the round part of the cylinder. The parameter [code]axis[/code] "
+"describes the axis along which the cylinder is oriented (0 for X, 1 for Y, 2 "
+"for Z)."
+msgstr ""
+
+#: doc/classes/Geometry.xml:45
+msgid ""
+"Clips the polygon defined by the points in [code]points[/code] against the "
+"[code]plane[/code] and returns the points of the clipped polygon."
+msgstr ""
+
+#: doc/classes/Geometry.xml:53
+msgid ""
+"Clips [code]polygon_a[/code] against [code]polygon_b[/code] and returns an "
+"array of clipped polygons. This performs [constant OPERATION_DIFFERENCE] "
+"between polygons. Returns an empty array if [code]polygon_b[/code] "
+"completely overlaps [code]polygon_a[/code].\n"
+"If [code]polygon_b[/code] is enclosed by [code]polygon_a[/code], returns an "
+"outer polygon (boundary) and inner polygon (hole) which could be "
+"distinguished by calling [method is_polygon_clockwise]."
+msgstr ""
+
+#: doc/classes/Geometry.xml:62
+msgid ""
+"Clips [code]polyline[/code] against [code]polygon[/code] and returns an "
+"array of clipped polylines. This performs [constant OPERATION_DIFFERENCE] "
+"between the polyline and the polygon. This operation can be thought of as "
+"cutting a line with a closed shape."
+msgstr ""
+
+#: doc/classes/Geometry.xml:69
+msgid ""
+"Given an array of [Vector2]s, returns the convex hull as a list of points in "
+"counterclockwise order. The last point is the same as the first one."
+msgstr ""
+
+#: doc/classes/Geometry.xml:77
+msgid ""
+"Mutually excludes common area defined by intersection of [code]polygon_a[/"
+"code] and [code]polygon_b[/code] (see [method intersect_polygons_2d]) and "
+"returns an array of excluded polygons. This performs [constant "
+"OPERATION_XOR] between polygons. In other words, returns all but common area "
+"between polygons.\n"
+"The operation may result in an outer polygon (boundary) and inner polygon "
+"(hole) produced which could be distinguished by calling [method "
+"is_polygon_clockwise]."
+msgstr ""
+
+#: doc/classes/Geometry.xml:87
+msgid ""
+"Returns the 3D point on the 3D segment ([code]s1[/code], [code]s2[/code]) "
+"that is closest to [code]point[/code]. The returned point will always be "
+"inside the specified segment."
+msgstr ""
+
+#: doc/classes/Geometry.xml:96
+msgid ""
+"Returns the 2D point on the 2D segment ([code]s1[/code], [code]s2[/code]) "
+"that is closest to [code]point[/code]. The returned point will always be "
+"inside the specified segment."
+msgstr ""
+
+#: doc/classes/Geometry.xml:105
+msgid ""
+"Returns the 3D point on the 3D line defined by ([code]s1[/code], [code]s2[/"
+"code]) that is closest to [code]point[/code]. The returned point can be "
+"inside the segment ([code]s1[/code], [code]s2[/code]) or outside of it, i.e. "
+"somewhere on the line extending from the segment."
+msgstr ""
+
+#: doc/classes/Geometry.xml:114
+msgid ""
+"Returns the 2D point on the 2D line defined by ([code]s1[/code], [code]s2[/"
+"code]) that is closest to [code]point[/code]. The returned point can be "
+"inside the segment ([code]s1[/code], [code]s2[/code]) or outside of it, i.e. "
+"somewhere on the line extending from the segment."
+msgstr ""
+
+#: doc/classes/Geometry.xml:124
+msgid ""
+"Given the two 3D segments ([code]p1[/code], [code]p2[/code]) and ([code]q1[/"
+"code], [code]q2[/code]), finds those two points on the two segments that are "
+"closest to each other. Returns a [PoolVector3Array] that contains this point "
+"on ([code]p1[/code], [code]p2[/code]) as well the accompanying point on "
+"([code]q1[/code], [code]q2[/code])."
+msgstr ""
+
+#: doc/classes/Geometry.xml:134
+msgid ""
+"Given the two 2D segments ([code]p1[/code], [code]q1[/code]) and ([code]p2[/"
+"code], [code]q2[/code]), finds those two points on the two segments that are "
+"closest to each other. Returns a [PoolVector2Array] that contains this point "
+"on ([code]p1[/code], [code]q1[/code]) as well the accompanying point on "
+"([code]p2[/code], [code]q2[/code])."
+msgstr ""
+
+#: doc/classes/Geometry.xml:141
+msgid "Used internally by the engine."
+msgstr ""
+
+#: doc/classes/Geometry.xml:149
+msgid ""
+"Intersects [code]polygon_a[/code] with [code]polygon_b[/code] and returns an "
+"array of intersected polygons. This performs [constant "
+"OPERATION_INTERSECTION] between polygons. In other words, returns common "
+"area shared by polygons. Returns an empty array if no intersection occurs.\n"
+"The operation may result in an outer polygon (boundary) and inner polygon "
+"(hole) produced which could be distinguished by calling [method "
+"is_polygon_clockwise]."
+msgstr ""
+
+#: doc/classes/Geometry.xml:158
+msgid ""
+"Intersects [code]polyline[/code] with [code]polygon[/code] and returns an "
+"array of intersected polylines. This performs [constant "
+"OPERATION_INTERSECTION] between the polyline and the polygon. This operation "
+"can be thought of as chopping a line with a closed shape."
+msgstr ""
+
+#: doc/classes/Geometry.xml:167
+msgid ""
+"Returns [code]true[/code] if [code]point[/code] is inside the circle or if "
+"it's located exactly [i]on[/i] the circle's boundary, otherwise returns "
+"[code]false[/code]."
+msgstr ""
+
+#: doc/classes/Geometry.xml:175
+msgid ""
+"Returns [code]true[/code] if [code]point[/code] is inside [code]polygon[/"
+"code] or if it's located exactly [i]on[/i] polygon's boundary, otherwise "
+"returns [code]false[/code]."
+msgstr ""
+
+#: doc/classes/Geometry.xml:182
+msgid ""
+"Returns [code]true[/code] if [code]polygon[/code]'s vertices are ordered in "
+"clockwise order, otherwise returns [code]false[/code]."
+msgstr ""
+
+#: doc/classes/Geometry.xml:192
+msgid ""
+"Checks if the two lines ([code]from_a[/code], [code]dir_a[/code]) and "
+"([code]from_b[/code], [code]dir_b[/code]) intersect. If yes, return the "
+"point of intersection as [Vector2]. If no intersection takes place, returns "
+"an empty [Variant].\n"
+"[b]Note:[/b] The lines are specified using direction vectors, not end points."
+msgstr ""
+
+#: doc/classes/Geometry.xml:200
+msgid ""
+"Given an array of [Vector2]s representing tiles, builds an atlas. The "
+"returned dictionary has two keys: [code]points[/code] is a vector of "
+"[Vector2] that specifies the positions of each tile, [code]size[/code] "
+"contains the overall size of the whole atlas as [Vector2]."
+msgstr ""
+
+#: doc/classes/Geometry.xml:208
+msgid ""
+"Merges (combines) [code]polygon_a[/code] and [code]polygon_b[/code] and "
+"returns an array of merged polygons. This performs [constant "
+"OPERATION_UNION] between polygons.\n"
+"The operation may result in an outer polygon (boundary) and multiple inner "
+"polygons (holes) produced which could be distinguished by calling [method "
+"is_polygon_clockwise]."
+msgstr ""
+
+#: doc/classes/Geometry.xml:218
+msgid ""
+"Inflates or deflates [code]polygon[/code] by [code]delta[/code] units "
+"(pixels). If [code]delta[/code] is positive, makes the polygon grow outward. "
+"If [code]delta[/code] is negative, shrinks the polygon inward. Returns an "
+"array of polygons because inflating/deflating may result in multiple "
+"discrete polygons. Returns an empty array if [code]delta[/code] is negative "
+"and the absolute value of it approximately exceeds the minimum bounding "
+"rectangle dimensions of the polygon.\n"
+"Each polygon's vertices will be rounded as determined by [code]join_type[/"
+"code], see [enum PolyJoinType].\n"
+"The operation may result in an outer polygon (boundary) and inner polygon "
+"(hole) produced which could be distinguished by calling [method "
+"is_polygon_clockwise].\n"
+"[b]Note:[/b] To translate the polygon's vertices specifically, use the "
+"[method Transform2D.xform] method:\n"
+"[codeblock]\n"
+"var polygon = PoolVector2Array([Vector2(0, 0), Vector2(100, 0), Vector2(100, "
+"100), Vector2(0, 100)])\n"
+"var offset = Vector2(50, 50)\n"
+"polygon = Transform2D(0, offset).xform(polygon)\n"
+"print(polygon) # prints [Vector2(50, 50), Vector2(150, 50), Vector2(150, "
+"150), Vector2(50, 150)]\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Geometry.xml:237
+msgid ""
+"Inflates or deflates [code]polyline[/code] by [code]delta[/code] units "
+"(pixels), producing polygons. If [code]delta[/code] is positive, makes the "
+"polyline grow outward. Returns an array of polygons because inflating/"
+"deflating may result in multiple discrete polygons. If [code]delta[/code] is "
+"negative, returns an empty array.\n"
+"Each polygon's vertices will be rounded as determined by [code]join_type[/"
+"code], see [enum PolyJoinType].\n"
+"Each polygon's endpoints will be rounded as determined by [code]end_type[/"
+"code], see [enum PolyEndType].\n"
+"The operation may result in an outer polygon (boundary) and inner polygon "
+"(hole) produced which could be distinguished by calling [method "
+"is_polygon_clockwise]."
+msgstr ""
+
+#: doc/classes/Geometry.xml:250
+msgid ""
+"Returns if [code]point[/code] is inside the triangle specified by [code]a[/"
+"code], [code]b[/code] and [code]c[/code]."
+msgstr ""
+
+#: doc/classes/Geometry.xml:261
+msgid ""
+"Tests if the 3D ray starting at [code]from[/code] with the direction of "
+"[code]dir[/code] intersects the triangle specified by [code]a[/code], "
+"[code]b[/code] and [code]c[/code]. If yes, returns the point of intersection "
+"as [Vector3]. If no intersection takes place, an empty [Variant] is returned."
+msgstr ""
+
+#: doc/classes/Geometry.xml:271
+msgid ""
+"Given the 2D segment ([code]segment_from[/code], [code]segment_to[/code]), "
+"returns the position on the segment (as a number between 0 and 1) at which "
+"the segment hits the circle that is located at position "
+"[code]circle_position[/code] and has radius [code]circle_radius[/code]. If "
+"the segment does not intersect the circle, -1 is returned (this is also the "
+"case if the line extending the segment would intersect the circle, but the "
+"segment does not)."
+msgstr ""
+
+#: doc/classes/Geometry.xml:280
+msgid ""
+"Given a convex hull defined though the [Plane]s in the array [code]planes[/"
+"code], tests if the segment ([code]from[/code], [code]to[/code]) intersects "
+"with that hull. If an intersection is found, returns a [PoolVector3Array] "
+"containing the point the intersection and the hull's normal. If no "
+"intersecion is found, an the returned array is empty."
+msgstr ""
+
+#: doc/classes/Geometry.xml:290
+msgid ""
+"Checks if the segment ([code]from[/code], [code]to[/code]) intersects the "
+"cylinder with height [code]height[/code] that is centered at the origin and "
+"has radius [code]radius[/code]. If no, returns an empty [PoolVector3Array]. "
+"If an intersection takes place, the returned array contains the point of "
+"intersection and the cylinder's normal at the point of intersection."
+msgstr ""
+
+#: doc/classes/Geometry.xml:300
+msgid ""
+"Checks if the two segments ([code]from_a[/code], [code]to_a[/code]) and "
+"([code]from_b[/code], [code]to_b[/code]) intersect. If yes, return the point "
+"of intersection as [Vector2]. If no intersection takes place, returns an "
+"empty [Variant]."
+msgstr ""
+
+#: doc/classes/Geometry.xml:310
+msgid ""
+"Checks if the segment ([code]from[/code], [code]to[/code]) intersects the "
+"sphere that is located at [code]sphere_position[/code] and has radius "
+"[code]sphere_radius[/code]. If no, returns an empty [PoolVector3Array]. If "
+"yes, returns a [PoolVector3Array] containing the point of intersection and "
+"the sphere's normal at the point of intersection."
+msgstr ""
+
+#: doc/classes/Geometry.xml:321
+msgid ""
+"Tests if the segment ([code]from[/code], [code]to[/code]) intersects the "
+"triangle [code]a[/code], [code]b[/code], [code]c[/code]. If yes, returns the "
+"point of intersection as [Vector3]. If no intersection takes place, an empty "
+"[Variant] is returned."
+msgstr ""
+
+#: doc/classes/Geometry.xml:328
+msgid ""
+"Triangulates the area specified by discrete set of [code]points[/code] such "
+"that no point is inside the circumcircle of any resulting triangle. Returns "
+"a [PoolIntArray] where each triangle consists of three consecutive point "
+"indices into [code]points[/code] (i.e. the returned array will have [code]n "
+"* 3[/code] elements, with [code]n[/code] being the number of found "
+"triangles). If the triangulation did not succeed, an empty [PoolIntArray] is "
+"returned."
+msgstr ""
+
+#: doc/classes/Geometry.xml:335
+msgid ""
+"Triangulates the polygon specified by the points in [code]polygon[/code]. "
+"Returns a [PoolIntArray] where each triangle consists of three consecutive "
+"point indices into [code]polygon[/code] (i.e. the returned array will have "
+"[code]n * 3[/code] elements, with [code]n[/code] being the number of found "
+"triangles). If the triangulation did not succeed, an empty [PoolIntArray] is "
+"returned."
+msgstr ""
+
+#: doc/classes/Geometry.xml:341
+msgid ""
+"Create regions where either subject or clip polygons (or both) are filled."
+msgstr ""
+
+#: doc/classes/Geometry.xml:344
+msgid ""
+"Create regions where subject polygons are filled except where clip polygons "
+"are filled."
+msgstr ""
+
+#: doc/classes/Geometry.xml:347
+msgid "Create regions where both subject and clip polygons are filled."
+msgstr ""
+
+#: doc/classes/Geometry.xml:350
+msgid ""
+"Create regions where either subject or clip polygons are filled but not "
+"where both are filled."
+msgstr ""
+
+#: doc/classes/Geometry.xml:353
+msgid ""
+"Squaring is applied uniformally at all convex edge joins at [code]1 * delta[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Geometry.xml:356
+msgid ""
+"While flattened paths can never perfectly trace an arc, they are "
+"approximated by a series of arc chords."
+msgstr ""
+
+#: doc/classes/Geometry.xml:359
+msgid ""
+"There's a necessary limit to mitered joins since offsetting edges that join "
+"at very acute angles will produce excessively long and narrow \"spikes\". "
+"For any given edge join, when miter offsetting would exceed that maximum "
+"distance, \"square\" joining is applied."
+msgstr ""
+
+#: doc/classes/Geometry.xml:362
+msgid ""
+"Endpoints are joined using the [enum PolyJoinType] value and the path filled "
+"as a polygon."
+msgstr ""
+
+#: doc/classes/Geometry.xml:365
+msgid ""
+"Endpoints are joined using the [enum PolyJoinType] value and the path filled "
+"as a polyline."
+msgstr ""
+
+#: doc/classes/Geometry.xml:368
+msgid "Endpoints are squared off with no extension."
+msgstr ""
+
+#: doc/classes/Geometry.xml:371
+msgid "Endpoints are squared off and extended by [code]delta[/code] units."
+msgstr ""
+
+#: doc/classes/Geometry.xml:374
+msgid "Endpoints are rounded off and extended by [code]delta[/code] units."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:4
+msgid "Base node for geometry-based visual instances."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:7
+msgid ""
+"Base node for geometry-based visual instances. Shares some common "
+"functionality like visibility and custom materials."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:16
+msgid ""
+"Returns the [enum GeometryInstance.Flags] that have been set for this object."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:23
+msgid ""
+"Overrides the bounding box of this node with a custom one. To remove it, set "
+"an [AABB] with all fields set to zero."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:31
+msgid ""
+"Sets the [enum GeometryInstance.Flags] specified. See [enum GeometryInstance."
+"Flags] for options."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:37
+msgid ""
+"The selected shadow casting flag. See [enum ShadowCastingSetting] for "
+"possible values."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:40
+msgid ""
+"The extra distance added to the GeometryInstance's bounding box ([AABB]) to "
+"increase its cull box."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:43
+msgid ""
+"When disabled, the mesh will be taken into account when computing indirect "
+"lighting, but the resulting lightmap will not be saved. Useful for emissive "
+"only materials or shadow casters."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:46
+msgid ""
+"Scale factor for the generated baked lightmap. Useful for adding detail to "
+"certain mesh instances."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:49
+msgid ""
+"The GeometryInstance's max LOD distance.\n"
+"[b]Note:[/b] This property currently has no effect."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:53
+msgid ""
+"The GeometryInstance's max LOD margin.\n"
+"[b]Note:[/b] This property currently has no effect."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:57
+msgid ""
+"The GeometryInstance's min LOD distance.\n"
+"[b]Note:[/b] This property currently has no effect."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:61
+msgid ""
+"The GeometryInstance's min LOD margin.\n"
+"[b]Note:[/b] This property currently has no effect."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:65
+msgid ""
+"The material override for the whole geometry.\n"
+"If a material is assigned to this property, it will be used instead of any "
+"material set in any material slot of the mesh."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:69
+msgid ""
+"If [code]true[/code], this GeometryInstance will be used when baking lights "
+"using a [GIProbe] or [BakedLightmap]."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:74
+msgid "The generated lightmap texture will have the original size."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:77
+msgid "The generated lightmap texture will be twice as large, on each axis."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:80
+msgid "The generated lightmap texture will be 4 times as large, on each axis."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:83
+msgid "The generated lightmap texture will be 8 times as large, on each axis."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:88
+msgid "Will not cast any shadows."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:91
+msgid ""
+"Will cast shadows from all visible faces in the GeometryInstance.\n"
+"Will take culling into account, so faces not being rendered will not be "
+"taken into account when shadow casting."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:95
+msgid ""
+"Will cast shadows from all visible faces in the GeometryInstance.\n"
+"Will not take culling into account, so all faces will be taken into account "
+"when shadow casting."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:99
+msgid ""
+"Will only show the shadows casted from this object.\n"
+"In other words, the actual mesh will not be visible, only the shadows casted "
+"from the mesh will be."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:103
+msgid ""
+"Will allow the GeometryInstance to be used when baking lights using a "
+"[GIProbe] or [BakedLightmap]."
+msgstr ""
+
+#: doc/classes/GeometryInstance.xml:106
+msgid ""
+"Unused in this class, exposed for consistency with [enum VisualServer."
+"InstanceFlags]."
+msgstr ""
+
+#: doc/classes/GIProbe.xml:4
+msgid "Real-time global illumination (GI) probe."
+msgstr ""
+
+#: doc/classes/GIProbe.xml:7
+msgid ""
+"[GIProbe]s are used to provide high-quality real-time indirect light to "
+"scenes. They precompute the effect of objects that emit light and the effect "
+"of static geometry to simulate the behavior of complex light in real-time. "
+"[GIProbe]s need to be baked before using, however, once baked, dynamic "
+"objects will receive light from them. Further, lights can be fully dynamic "
+"or baked.\n"
+"Having [GIProbe]s in a scene can be expensive, the quality of the probe can "
+"be turned down in exchange for better performance in the [ProjectSettings] "
+"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
+"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
+"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
+"leaks (avoid one-sided walls). For interior levels, enclose your level "
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
+"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
+"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
+"emit light in a [GIProbe]."
+msgstr ""
+
+#: doc/classes/GIProbe.xml:15
+msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
+msgstr ""
+
+#: doc/classes/GIProbe.xml:24
+msgid ""
+"Bakes the effect from all [GeometryInstance]s marked with [member "
+"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
+"[constant Light.BAKE_INDIRECT] or [constant Light.BAKE_ALL]. If "
+"[code]create_visual_debug[/code] is [code]true[/code], after baking the "
+"light, this will generate a [MultiMesh] that has a cube representing each "
+"solid cell with each cube colored to the cell's albedo color. This can be "
+"used to visualize the [GIProbe]'s data and debug any issues that may be "
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
+msgstr ""
+
+#: doc/classes/GIProbe.xml:31
+msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
+msgstr ""
+
+#: doc/classes/GIProbe.xml:37
+msgid ""
+"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
+"used to avoid self-shadowing, but may introduce light leaking at higher "
+"values. This and [member normal_bias] should be played around with to "
+"minimize self-shadowing and light leaking.\n"
+"[b]Note:[/b] [code]bias[/code] should usually be above 1.0 as that is the "
+"size of the voxels."
+msgstr ""
+
+#: doc/classes/GIProbe.xml:41
+msgid ""
+"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
+"no longer has any effect when enabled."
+msgstr ""
+
+#: doc/classes/GIProbe.xml:44
+msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
+msgstr ""
+
+#: doc/classes/GIProbe.xml:47
+msgid ""
+"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
+"scaled within this range."
+msgstr ""
+
+#: doc/classes/GIProbe.xml:50
+msgid ""
+"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
+"brighter."
+msgstr ""
+
+#: doc/classes/GIProbe.xml:53
+msgid ""
+"The size of the area covered by the [GIProbe]. If you make the extents "
+"larger without increasing the subdivisions with [member subdiv], the size of "
+"each cell will increase and result in lower detailed lighting."
+msgstr ""
+
+#: doc/classes/GIProbe.xml:56
+msgid ""
+"If [code]true[/code], ignores the sky contribution when calculating lighting."
+msgstr ""
+
+#: doc/classes/GIProbe.xml:59
+msgid ""
+"Offsets the lookup into the [GIProbe] based on the object's normal "
+"direction. Can be used to reduce some self-shadowing artifacts."
+msgstr ""
+
+#: doc/classes/GIProbe.xml:62
+msgid ""
+"How much light propagates through the probe internally. A higher value "
+"allows light to spread further."
+msgstr ""
+
+#: doc/classes/GIProbe.xml:65
+msgid ""
+"Number of times to subdivide the grid that the [GIProbe] operates on. A "
+"higher number results in finer detail and thus higher visual quality, while "
+"lower numbers result in better performance."
+msgstr ""
+
+#: doc/classes/GIProbe.xml:70
+msgid ""
+"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
+"Use it if you can, but especially use it on lower-end hardware."
+msgstr ""
+
+#: doc/classes/GIProbe.xml:73
+msgid "Use 128 subdivisions. This is the default quality setting."
+msgstr ""
+
+#: doc/classes/GIProbe.xml:76
+msgid "Use 256 subdivisions."
+msgstr ""
+
+#: doc/classes/GIProbe.xml:79
+msgid ""
+"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
+"On lower-end hardware, this could cause the GPU to stall."
+msgstr ""
+
+#: doc/classes/GIProbe.xml:82
+msgid "Represents the size of the [enum Subdiv] enum."
+msgstr ""
+
+#: modules/gltf/doc_classes/GLTFLight.xml:13
+msgid ""
+"The [Color] of the light. Defaults to white. A black color causes the light "
+"to have no effect."
+msgstr ""
+
+#: modules/gltf/doc_classes/GLTFLight.xml:16
+msgid ""
+"The inner angle of the cone in a spotlight. Must be less than or equal to "
+"the outer cone angle.\n"
+"Within this angle, the light is at full brightness. Between the inner and "
+"outer cone angles, there is a transition from full brightness to zero "
+"brightness. When creating a Godot [SpotLight], the ratio between the inner "
+"and outer cone angles is used to calculate the attenuation of the light."
+msgstr ""
+
+#: modules/gltf/doc_classes/GLTFLight.xml:20
+msgid ""
+"The intensity of the light. This is expressed in candelas (lumens per "
+"steradian) for point and spot lights, and lux (lumens per m²) for "
+"directional lights. When creating a Godot light, this value is converted to "
+"a unitless multiplier."
+msgstr ""
+
+#: modules/gltf/doc_classes/GLTFLight.xml:23
+msgid ""
+"The outer angle of the cone in a spotlight. Must be greater than or equal to "
+"the inner angle.\n"
+"At this angle, the light drops off to zero brightness. Between the inner and "
+"outer cone angles, there is a transition from full brightness to zero "
+"brightness. If this angle is a half turn, then the spotlight emits in all "
+"directions. When creating a Godot [SpotLight], the outer cone angle is used "
+"as the angle of the spotlight."
+msgstr ""
+
+#: modules/gltf/doc_classes/GLTFLight.xml:27
+msgid ""
+"The range of the light, beyond which the light has no effect. GLTF lights "
+"with no range defined behave like physical lights (which have infinite "
+"range). When creating a Godot light, the range is clamped to 4096."
+msgstr ""
+
+#: modules/gltf/doc_classes/GLTFLight.xml:30
+msgid ""
+"The type of the light. The values accepted by Godot are \"point\", \"spot\", "
+"and \"directional\", which correspond to Godot's [OmniLight], [SpotLight], "
+"and [DirectionalLight] respectively."
+msgstr ""
+
+#: modules/mono/doc_classes/GodotSharp.xml:4
+msgid "Bridge between Godot and the Mono runtime (Mono-enabled builds only)."
+msgstr ""
+
+#: modules/mono/doc_classes/GodotSharp.xml:7
+msgid ""
+"This class is a bridge between Godot and the Mono runtime. It exposes "
+"several low-level operations and is only available in Mono-enabled Godot "
+"builds.\n"
+"See also [CSharpScript]."
+msgstr ""
+
+#: modules/mono/doc_classes/GodotSharp.xml:17
+msgid "Attaches the current thread to the Mono runtime."
+msgstr ""
+
+#: modules/mono/doc_classes/GodotSharp.xml:24
+msgid "Detaches the current thread from the Mono runtime."
+msgstr ""
+
+#: modules/mono/doc_classes/GodotSharp.xml:31
+msgid ""
+"Returns the current MonoDomain ID.\n"
+"[b]Note:[/b] The Mono runtime must be initialized for this method to work "
+"(use [method is_runtime_initialized] to check). If the Mono runtime isn't "
+"initialized at the time this method is called, the engine will crash."
+msgstr ""
+
+#: modules/mono/doc_classes/GodotSharp.xml:39
+msgid ""
+"Returns the scripts MonoDomain's ID. This will be the same MonoDomain ID as "
+"[method get_domain_id], unless the scripts domain isn't loaded.\n"
+"[b]Note:[/b] The Mono runtime must be initialized for this method to work "
+"(use [method is_runtime_initialized] to check). If the Mono runtime isn't "
+"initialized at the time this method is called, the engine will crash."
+msgstr ""
+
+#: modules/mono/doc_classes/GodotSharp.xml:49
+msgid ""
+"Returns [code]true[/code] if the domain is being finalized, [code]false[/"
+"code] otherwise."
+msgstr ""
+
+#: modules/mono/doc_classes/GodotSharp.xml:56
+msgid ""
+"Returns [code]true[/code] if the Mono runtime is initialized, [code]false[/"
+"code] otherwise."
+msgstr ""
+
+#: modules/mono/doc_classes/GodotSharp.xml:63
+msgid ""
+"Returns [code]true[/code] if the Mono runtime is shutting down, [code]false[/"
+"code] otherwise."
+msgstr ""
+
+#: modules/mono/doc_classes/GodotSharp.xml:70
+msgid ""
+"Returns [code]true[/code] if the scripts domain is loaded, [code]false[/"
+"code] otherwise."
+msgstr ""
+
+#: doc/classes/Gradient.xml:4
+msgid ""
+"A color interpolator resource which can be used to generate colors between "
+"user-defined color points."
+msgstr ""
+
+#: doc/classes/Gradient.xml:7
+msgid ""
+"Given a set of colors, this resource will interpolate them in order. This "
+"means that if you have color 1, color 2 and color 3, the ramp will "
+"interpolate from color 1 to color 2 and from color 2 to color 3. The ramp "
+"will initially have 2 colors (black and white), one (black) at ramp lower "
+"offset 0 and the other (white) at the ramp higher offset 1."
+msgstr ""
+
+#: doc/classes/Gradient.xml:17
+msgid ""
+"Adds the specified color to the end of the ramp, with the specified offset."
+msgstr ""
+
+#: doc/classes/Gradient.xml:24
+msgid "Returns the color of the ramp color at index [code]point[/code]."
+msgstr ""
+
+#: doc/classes/Gradient.xml:31
+msgid "Returns the offset of the ramp color at index [code]point[/code]."
+msgstr ""
+
+#: doc/classes/Gradient.xml:37
+msgid "Returns the number of colors in the ramp."
+msgstr ""
+
+#: doc/classes/Gradient.xml:44
+msgid "Returns the interpolated color specified by [code]offset[/code]."
+msgstr ""
+
+#: doc/classes/Gradient.xml:51
+msgid "Removes the color at the index [code]point[/code]."
+msgstr ""
+
+#: doc/classes/Gradient.xml:59
+msgid "Sets the color of the ramp color at index [code]point[/code]."
+msgstr ""
+
+#: doc/classes/Gradient.xml:67
+msgid "Sets the offset for the ramp color at index [code]point[/code]."
+msgstr ""
+
+#: doc/classes/Gradient.xml:73
+msgid "Gradient's colors returned as a [PoolColorArray]."
+msgstr ""
+
+#: doc/classes/Gradient.xml:76
+msgid "Gradient's offsets returned as a [PoolRealArray]."
+msgstr ""
+
+#: doc/classes/GradientTexture.xml:4
+msgid "Gradient-filled texture."
+msgstr ""
+
+#: doc/classes/GradientTexture.xml:7
+msgid ""
+"GradientTexture uses a [Gradient] to fill the texture data. The gradient "
+"will be filled from left to right using colors obtained from the gradient. "
+"This means the texture does not necessarily represent an exact copy of the "
+"gradient, but instead an interpolation of samples obtained from the gradient "
+"at fixed steps (see [member width])."
+msgstr ""
+
+#: doc/classes/GradientTexture.xml:15
+msgid "The [Gradient] that will be used to fill the texture."
+msgstr ""
+
+#: doc/classes/GradientTexture.xml:18
+msgid "The number of color samples that will be obtained from the [Gradient]."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:4
+msgid ""
+"GraphEdit is an area capable of showing various GraphNodes. It manages "
+"connection events between them."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:7
+msgid ""
+"GraphEdit manages the showing of GraphNodes it contains, as well as "
+"connections and disconnections between them. Signals are sent for each of "
+"these two events. Disconnection between GraphNode slots is disabled by "
+"default.\n"
+"It is greatly advised to enable low-processor usage mode (see [member OS."
+"low_processor_usage_mode]) when using GraphEdits."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:18
+msgid ""
+"Makes possible the connection between two different slot types. The type is "
+"defined with the [method GraphNode.set_slot] method."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:25
+msgid ""
+"Makes possible to disconnect nodes when dragging from the slot at the left "
+"if it has the specified type."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:32
+msgid ""
+"Makes possible to disconnect nodes when dragging from the slot at the right "
+"if it has the specified type."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:38
+msgid "Removes all connections between nodes."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:48
+msgid ""
+"Create a connection between the [code]from_port[/code] slot of the "
+"[code]from[/code] GraphNode and the [code]to_port[/code] slot of the "
+"[code]to[/code] GraphNode. If the connection already exists, no connection "
+"is created."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:58
+msgid ""
+"Removes the connection between the [code]from_port[/code] slot of the "
+"[code]from[/code] GraphNode and the [code]to_port[/code] slot of the "
+"[code]to[/code] GraphNode. If the connection does not exist, no connection "
+"is removed."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:64
+msgid ""
+"Returns an Array containing the list of connections. A connection consists "
+"in a structure of the form [code]{ from_port: 0, from: \"GraphNode name 0\", "
+"to_port: 1, to: \"GraphNode name 1\" }[/code]."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:70
+msgid ""
+"Gets the [HBoxContainer] that contains the zooming and grid snap controls in "
+"the top left of the graph. You can use this method to reposition the toolbar "
+"or to add your own custom controls to it.\n"
+"[b]Warning:[/b] This is a required internal node, removing and freeing it "
+"may cause a crash. If you wish to hide it or any of its children, use their "
+"[member CanvasItem.visible] property."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:81
+msgid ""
+"Returns [code]true[/code] if the [code]from_port[/code] slot of the "
+"[code]from[/code] GraphNode is connected to the [code]to_port[/code] slot of "
+"the [code]to[/code] GraphNode."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:89
+msgid "Returns whether it's possible to connect slots of the specified types."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:97
+msgid ""
+"Makes it not possible to connect between two different slot types. The type "
+"is defined with the [method GraphNode.set_slot] method."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:104
+msgid ""
+"Removes the possibility to disconnect nodes when dragging from the slot at "
+"the left if it has the specified type."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:111
+msgid ""
+"Removes the possibility to disconnect nodes when dragging from the slot at "
+"the right if it has the specified type."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:122
+msgid ""
+"Sets the coloration of the connection between [code]from[/code]'s "
+"[code]from_port[/code] and [code]to[/code]'s [code]to_port[/code] with the "
+"color provided in the [code]activity[/code] theme property."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:129
+msgid "Sets the specified [code]node[/code] as the one selected."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:136
+msgid "If [code]true[/code], the minimap is visible."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:139
+msgid "The opacity of the minimap rectangle."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:142
+msgid ""
+"The size of the minimap rectangle. The map itself is based on the size of "
+"the grid area and is scaled to fit this rectangle."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:146
+msgid ""
+"If [code]true[/code], enables disconnection of existing connections in the "
+"GraphEdit by dragging the right end."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:149
+msgid "The scroll offset."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:152
+msgid ""
+"If [code]true[/code], makes a label with the current zoom level visible. The "
+"zoom value is displayed in percents."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:155
+msgid "The snapping distance in pixels."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:158
+msgid "If [code]true[/code], enables snapping."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:161
+msgid "The current zoom value."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:164
+msgid "The upper zoom limit."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:167
+msgid "The lower zoom limit."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:170
+msgid "The step of each zoom level."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:176
+msgid "Emitted at the beginning of a GraphNode movement."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:181
+msgid "Emitted at the end of a GraphNode movement."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:189
+msgid ""
+"Emitted when user dragging connection from input port into empty space of "
+"the graph."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:198
+msgid ""
+"Emitted to the GraphEdit when the connection between the [code]from_slot[/"
+"code] slot of the [code]from[/code] GraphNode and the [code]to_slot[/code] "
+"slot of the [code]to[/code] GraphNode is attempted to be created."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:206
+msgid ""
+"Emitted when user dragging connection from output port into empty space of "
+"the graph."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:211
+msgid "Emitted when the user presses [code]Ctrl + C[/code]."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:216
+msgid "Emitted when a GraphNode is attempted to be removed from the GraphEdit."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:225
+msgid ""
+"Emitted to the GraphEdit when the connection between [code]from_slot[/code] "
+"slot of [code]from[/code] GraphNode and [code]to_slot[/code] slot of "
+"[code]to[/code] GraphNode is attempted to be removed."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:230
+msgid ""
+"Emitted when a GraphNode is attempted to be duplicated in the GraphEdit."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:236
+msgid "Emitted when a GraphNode is selected."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:246
+msgid "Emitted when the user presses [code]Ctrl + V[/code]."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:252
+msgid ""
+"Emitted when a popup is requested. Happens on right-clicking in the "
+"GraphEdit. [code]position[/code] is the position of the mouse pointer when "
+"the signal is sent."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:258
+msgid ""
+"Emitted when the scroll offset is changed by the user. It will not be "
+"emitted when changed in code."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:272
+msgid "The background drawn under the grid."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:275
+msgid "Color of major grid lines."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:278
+msgid "Color of minor grid lines."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:283
+msgid "The icon for the zoom out button."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:286
+msgid "The icon for the zoom in button."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:289
+msgid ""
+"The horizontal range within which a port can be grabbed (on both sides)."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:292
+msgid "The vertical range within which a port can be grabbed (on both sides)."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:295
+msgid "The icon for the zoom reset button."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:298
+msgid "The fill color of the selection rectangle."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:301
+msgid "The outline color of the selection rectangle."
+msgstr ""
+
+#: doc/classes/GraphEdit.xml:304
+msgid "The icon for the snap toggle button."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:4
+msgid ""
+"A GraphNode is a container with potentially several input and output slots "
+"allowing connections between GraphNodes. Slots can have different, "
+"incompatible types."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:7
+msgid ""
+"A GraphNode is a container. Each GraphNode can have several input and output "
+"slots, sometimes referred to as ports, allowing connections between "
+"GraphNodes. To add a slot to GraphNode, add any [Control]-derived child node "
+"to it.\n"
+"After adding at least one child to GraphNode new sections will be "
+"automatically created in the Inspector called 'Slot'. When 'Slot' is "
+"expanded you will see list with index number for each slot. You can click on "
+"each of them to expand further.\n"
+"In the Inspector you can enable (show) or disable (hide) slots. By default, "
+"all slots are disabled so you may not see any slots on your GraphNode "
+"initially. You can assign a type to each slot. Only slots of the same type "
+"will be able to connect to each other. You can also assign colors to slots. "
+"A tuple of input and output slots is defined for each GUI element included "
+"in the GraphNode. Input connections are on the left and output connections "
+"are on the right side of GraphNode. Only enabled slots are counted as "
+"connections."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:17
+msgid "Disables all input and output slots of the GraphNode."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:24
+msgid "Disables input and output slot whose index is [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:31
+msgid "Returns the [Color] of the input connection [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:37
+msgid ""
+"Returns the number of enabled input slots (connections) to the GraphNode."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:44
+msgid "Returns the position of the input connection [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:51
+msgid "Returns the type of the input connection [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:58
+msgid "Returns the [Color] of the output connection [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:64
+msgid ""
+"Returns the number of enabled output slots (connections) of the GraphNode."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:71
+msgid "Returns the position of the output connection [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:78
+msgid "Returns the type of the output connection [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:85
+msgid "Returns the left (input) [Color] of the slot [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:92
+msgid "Returns the right (output) [Color] of the slot [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:99
+msgid "Returns the left (input) type of the slot [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:106
+msgid "Returns the right (output) type of the slot [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:113
+msgid ""
+"Returns [code]true[/code] if left (input) side of the slot [code]idx[/code] "
+"is enabled."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:120
+msgid ""
+"Returns [code]true[/code] if right (output) side of the slot [code]idx[/"
+"code] is enabled."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:135
+msgid ""
+"Sets properties of the slot with ID [code]idx[/code].\n"
+"If [code]enable_left[/code]/[code]right[/code], a port will appear and the "
+"slot will be able to be connected from this side.\n"
+"[code]type_left[/code]/[code]right[/code] is an arbitrary type of the port. "
+"Only ports with the same type values can be connected.\n"
+"[code]color_left[/code]/[code]right[/code] is the tint of the port's icon on "
+"this side.\n"
+"[code]custom_left[/code]/[code]right[/code] is a custom texture for this "
+"side's port.\n"
+"[b]Note:[/b] This method only sets properties of the slot. To create the "
+"slot, add a [Control]-derived child to the GraphNode.\n"
+"Individual properties can be set using one of the [code]set_slot_*[/code] "
+"methods. You must enable at least one side of the slot to do so."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:149
+msgid ""
+"Sets the [Color] of the left (input) side of the slot [code]idx[/code] to "
+"[code]color_left[/code]."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:157
+msgid ""
+"Sets the [Color] of the right (output) side of the slot [code]idx[/code] to "
+"[code]color_right[/code]."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:165
+msgid ""
+"Toggles the left (input) side of the slot [code]idx[/code]. If "
+"[code]enable_left[/code] is [code]true[/code], a port will appear on the "
+"left side and the slot will be able to be connected from this side."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:173
+msgid ""
+"Toggles the right (output) side of the slot [code]idx[/code]. If "
+"[code]enable_right[/code] is [code]true[/code], a port will appear on the "
+"right side and the slot will be able to be connected from this side."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:181
+msgid ""
+"Sets the left (input) type of the slot [code]idx[/code] to [code]type_left[/"
+"code]."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:189
+msgid ""
+"Sets the right (output) type of the slot [code]idx[/code] to "
+"[code]type_right[/code]."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:195
+msgid "If [code]true[/code], the GraphNode is a comment node."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:198
+msgid ""
+"The offset of the GraphNode, relative to the scroll offset of the "
+"[GraphEdit].\n"
+"[b]Note:[/b] You cannot use position directly, as [GraphEdit] is a "
+"[Container]."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:202
+msgid "Sets the overlay shown above the GraphNode. See [enum Overlay]."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:205
+msgid ""
+"If [code]true[/code], the user can resize the GraphNode.\n"
+"[b]Note:[/b] Dragging the handle will only emit the [signal resize_request] "
+"signal, the GraphNode needs to be resized manually."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:209
+msgid "If [code]true[/code], the GraphNode is selected."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:212
+msgid ""
+"If [code]true[/code], the close button will be visible.\n"
+"[b]Note:[/b] Pressing it will only emit the [signal close_request] signal, "
+"the GraphNode needs to be removed manually."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:216
+msgid "The text displayed in the GraphNode's title bar."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:222
+msgid ""
+"Emitted when the GraphNode is requested to be closed. Happens on clicking "
+"the close button (see [member show_close])."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:229
+msgid "Emitted when the GraphNode is dragged."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:234
+msgid "Emitted when the GraphNode is moved."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:239
+msgid ""
+"Emitted when the GraphNode is requested to be displayed over other ones. "
+"Happens on focusing (clicking into) the GraphNode."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:245
+msgid ""
+"Emitted when the GraphNode is requested to be resized. Happens on dragging "
+"the resizer handle (see [member resizable])."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:251
+msgid "Emitted when any GraphNode's slot is updated."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:257
+msgid "No overlay is shown."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:260
+msgid "Show overlay set in the [code]breakpoint[/code] theme property."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:263
+msgid "Show overlay set in the [code]position[/code] theme property."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:268
+msgid ""
+"The background used when [member overlay] is set to [constant "
+"OVERLAY_BREAKPOINT]."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:271
+msgid ""
+"The icon for the close button, visible when [member show_close] is enabled."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:274
+msgid "The color modulation applied to the close button icon."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:277 doc/classes/WindowDialog.xml:41
+msgid "The vertical offset of the close button."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:280
+msgid "The [StyleBox] used when [member comment] is enabled."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:283
+msgid ""
+"The [StyleBox] used when [member comment] is enabled and the [GraphNode] is "
+"focused."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:290
+msgid "The default background for [GraphNode]."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:293
+msgid "The icon used for representing ports."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:296
+msgid "Horizontal offset for the ports."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:299
+msgid ""
+"The background used when [member overlay] is set to [constant "
+"OVERLAY_POSITION]."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:302
+msgid "The icon used for resizer, visible when [member resizable] is enabled."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:305
+msgid "The color modulation applied to the resizer icon."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:308
+msgid "The background used when the [GraphNode] is selected."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:311
+msgid "The vertical distance between ports."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:314
+msgid "Color of the title text."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:317
+msgid "Font used for the title text."
+msgstr ""
+
+#: doc/classes/GraphNode.xml:320
+msgid "Vertical offset of the title text."
+msgstr ""
+
+#: doc/classes/GridContainer.xml:4
+msgid ""
+"Grid container used to arrange Control-derived children in a grid like "
+"layout."
+msgstr ""
+
+#: doc/classes/GridContainer.xml:7
+msgid ""
+"GridContainer will arrange its Control-derived children in a grid like "
+"structure, the grid columns are specified using the [member columns] "
+"property and the number of rows will be equal to the number of children in "
+"the container divided by the number of columns. For example, if the "
+"container has 5 children, and 2 columns, there will be 3 rows in the "
+"container.\n"
+"Notice that grid layout will preserve the columns and rows for every size of "
+"the container, and that empty columns will be expanded automatically.\n"
+"[b]Note:[/b] GridContainer only works with child nodes inheriting from "
+"Control. It won't rearrange child nodes inheriting from Node2D."
+msgstr ""
+
+#: doc/classes/GridContainer.xml:18
+msgid ""
+"The number of columns in the [GridContainer]. If modified, [GridContainer] "
+"reorders its Control-derived children to accommodate the new layout."
+msgstr ""
+
+#: doc/classes/GridContainer.xml:26
+msgid "The horizontal separation of children nodes."
+msgstr ""
+
+#: doc/classes/GridContainer.xml:29
+msgid "The vertical separation of children nodes."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:4
+msgid "Node for 3D tile-based maps."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:7
+msgid ""
+"GridMap lets you place meshes on a grid interactively. It works both from "
+"the editor and from scripts, which can help you create in-game level "
+"editors.\n"
+"GridMaps use a [MeshLibrary] which contains a list of tiles. Each tile is a "
+"mesh with materials plus optional collision and navigation shapes.\n"
+"A GridMap contains a collection of cells. Each grid cell refers to a tile in "
+"the [MeshLibrary]. All cells in the map have the same dimensions.\n"
+"Internally, a GridMap is split into a sparse collection of octants for "
+"efficient rendering and physics processing. Every octant has the same "
+"dimensions and can contain several cells.\n"
+"[b]Note:[/b] GridMap doesn't extend [VisualInstance] and therefore can't be "
+"hidden or cull masked based on [member VisualInstance.layers]. If you make a "
+"light not affect the first layer, the whole GridMap won't be lit by the "
+"light in question."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:14
+msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/using_gridmaps.html"
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:22
+msgid "Clear all cells."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:39
+msgid ""
+"Returns an array of [ArrayMesh]es and [Transform] references of all bake "
+"meshes that exist within the current GridMap."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:48
+msgid ""
+"The [MeshLibrary] item index located at the grid-based X, Y and Z "
+"coordinates. If the cell is empty, [constant INVALID_CELL_ITEM] will be "
+"returned."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:57
+msgid ""
+"The orientation of the cell at the grid-based X, Y and Z coordinates. -1 is "
+"returned if the cell is empty."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:64
+msgid "Returns an individual bit on the [member collision_layer]."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:71
+msgid "Returns an individual bit on the [member collision_mask]."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:77
+msgid ""
+"Returns an array of [Transform] and [Mesh] references corresponding to the "
+"non-empty cells in the grid. The transforms are specified in world space."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:83
+msgid ""
+"Returns an array of [Vector3] with the non-empty cell coordinates in the "
+"grid map."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:99
+msgid ""
+"Returns the position of a grid cell in the GridMap's local coordinate space."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:116
+msgid ""
+"Sets the mesh index for the cell referenced by its grid-based X, Y and Z "
+"coordinates.\n"
+"A negative item index such as [constant INVALID_CELL_ITEM] will clear the "
+"cell.\n"
+"Optionally, the item's orientation can be passed. For valid orientation "
+"values, see [method Basis.get_orthogonal_index]."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:135
+msgid "Sets an individual bit on the [member collision_layer]."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:143
+msgid "Sets an individual bit on the [member collision_mask]."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:150
+msgid ""
+"Returns the coordinates of the grid cell containing the given point.\n"
+"[code]pos[/code] should be in the GridMap's local coordinate space."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:157
+msgid "If [code]true[/code], grid items are centered on the X axis."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:160
+msgid "If [code]true[/code], grid items are centered on the Y axis."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:163
+msgid "If [code]true[/code], grid items are centered on the Z axis."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:166
+msgid ""
+"The size of each octant measured in number of cells. This applies to all "
+"three axis."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:169
+msgid ""
+"The scale of the cell items.\n"
+"This does not affect the size of the grid cells themselves, only the items "
+"in them. This can be used to make cell items overlap their neighbors."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:173
+msgid ""
+"The dimensions of the grid's cells.\n"
+"This does not affect the size of the meshes. See [member cell_scale]."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:177
+msgid ""
+"The physics layers this GridMap is in.\n"
+"GridMaps act as static bodies, meaning they aren't affected by gravity or "
+"other forces. They only affect other physics bodies that collide with them."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:181
+msgid ""
+"The physics layers this GridMap detects collisions in. See [url=https://docs."
+"godotengine.org/en/3.4/tutorials/physics/physics_introduction.html#collision-"
+"layers-and-masks]Collision layers and masks[/url] in the documentation for "
+"more information."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:184
+msgid "The assigned [MeshLibrary]."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:187
+msgid ""
+"Controls whether this GridMap will be baked in a [BakedLightmap] or not."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:194
+msgid "Emitted when [member cell_size] changes."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml:200
+msgid ""
+"Invalid cell item that can be used in [method set_cell_item] to clear cells "
+"(or represent an empty cell in [method get_cell_item])."
+msgstr ""
+
+#: doc/classes/GrooveJoint2D.xml:4
+msgid "Groove constraint for 2D physics."
+msgstr ""
+
+#: doc/classes/GrooveJoint2D.xml:7
+msgid ""
+"Groove constraint for 2D physics. This is useful for making a body \"slide\" "
+"through a segment placed in another."
+msgstr ""
+
+#: doc/classes/GrooveJoint2D.xml:15
+msgid ""
+"The body B's initial anchor position defined by the joint's origin and a "
+"local offset [member initial_offset] along the joint's Y axis (along the "
+"groove)."
+msgstr ""
+
+#: doc/classes/GrooveJoint2D.xml:18
+msgid ""
+"The groove's length. The groove is from the joint's origin towards [member "
+"length] along the joint's local Y axis."
+msgstr ""
+
+#: doc/classes/HashingContext.xml:4
+msgid "Context to compute cryptographic hashes over multiple iterations."
+msgstr ""
+
+#: doc/classes/HashingContext.xml:7
+msgid ""
+"The HashingContext class provides an interface for computing cryptographic "
+"hashes over multiple iterations. This is useful for example when computing "
+"hashes of big files (so you don't have to load them all in memory), network "
+"streams, and data streams in general (so you don't have to hold buffers).\n"
+"The [enum HashType] enum shows the supported hashing algorithms.\n"
+"[codeblock]\n"
+"const CHUNK_SIZE = 1024\n"
+"\n"
+"func hash_file(path):\n"
+" var ctx = HashingContext.new()\n"
+" var file = File.new()\n"
+" # Start a SHA-256 context.\n"
+" ctx.start(HashingContext.HASH_SHA256)\n"
+" # Check that file exists.\n"
+" if not file.file_exists(path):\n"
+" return\n"
+" # Open the file to hash.\n"
+" file.open(path, File.READ)\n"
+" # Update the context after reading each chunk.\n"
+" while not file.eof_reached():\n"
+" ctx.update(file.get_buffer(CHUNK_SIZE))\n"
+" # Get the computed hash.\n"
+" var res = ctx.finish()\n"
+" # Print the result as hex string and array.\n"
+" printt(res.hex_encode(), Array(res))\n"
+"[/codeblock]\n"
+"[b]Note:[/b] Not available in HTML5 exports."
+msgstr ""
+
+#: doc/classes/HashingContext.xml:38
+msgid "Closes the current context, and return the computed hash."
+msgstr ""
+
+#: doc/classes/HashingContext.xml:45
+msgid ""
+"Starts a new hash computation of the given [code]type[/code] (e.g. [constant "
+"HASH_SHA256] to start computation of a SHA-256)."
+msgstr ""
+
+#: doc/classes/HashingContext.xml:52
+msgid "Updates the computation with the given [code]chunk[/code] of data."
+msgstr ""
+
+#: doc/classes/HashingContext.xml:58
+msgid "Hashing algorithm: MD5."
+msgstr ""
+
+#: doc/classes/HashingContext.xml:61
+msgid "Hashing algorithm: SHA-1."
+msgstr ""
+
+#: doc/classes/HashingContext.xml:64
+msgid "Hashing algorithm: SHA-256."
+msgstr ""
+
+#: doc/classes/HBoxContainer.xml:4
+msgid "Horizontal box container."
+msgstr ""
+
+#: doc/classes/HBoxContainer.xml:7
+msgid "Horizontal box container. See [BoxContainer]."
+msgstr ""
+
+#: doc/classes/HBoxContainer.xml:17
+msgid "The horizontal space between the [HBoxContainer]'s elements."
+msgstr ""
+
+#: doc/classes/HeightMapShape.xml:4
+msgid "Height map shape for 3D physics."
+msgstr ""
+
+#: doc/classes/HeightMapShape.xml:7
+msgid ""
+"Height map shape resource, which can be added to a [PhysicsBody] or [Area]."
+msgstr ""
+
+#: doc/classes/HeightMapShape.xml:15
+msgid ""
+"Height map data, pool array must be of [member map_width] * [member "
+"map_depth] size."
+msgstr ""
+
+#: doc/classes/HeightMapShape.xml:18
+msgid ""
+"Depth of the height map data. Changing this will resize the [member "
+"map_data]."
+msgstr ""
+
+#: doc/classes/HeightMapShape.xml:21
+msgid ""
+"Width of the height map data. Changing this will resize the [member "
+"map_data]."
+msgstr ""
+
+#: doc/classes/HingeJoint.xml:4
+msgid "A hinge between two 3D PhysicsBodies."
+msgstr ""
+
+#: doc/classes/HingeJoint.xml:7
+msgid ""
+"A HingeJoint normally uses the Z axis of body A as the hinge axis, another "
+"axis can be specified when adding it manually though. See also "
+"[Generic6DOFJoint]."
+msgstr ""
+
+#: doc/classes/HingeJoint.xml:16 doc/classes/SpriteBase3D.xml:21
+msgid "Returns the value of the specified flag."
+msgstr ""
+
+#: doc/classes/HingeJoint.xml:23 doc/classes/ParticlesMaterial.xml:25
+#: doc/classes/PinJoint.xml:16
+msgid "Returns the value of the specified parameter."
+msgstr ""
+
+#: doc/classes/HingeJoint.xml:31
+msgid "If [code]true[/code], enables the specified flag."
+msgstr ""
+
+#: doc/classes/HingeJoint.xml:39 doc/classes/PinJoint.xml:24
+msgid "Sets the value of the specified parameter."
+msgstr ""
+
+#: doc/classes/HingeJoint.xml:45 doc/classes/HingeJoint.xml:85
+#: doc/classes/PhysicsServer.xml:977
+msgid ""
+"The speed with which the rotation across the axis perpendicular to the hinge "
+"gets corrected."
+msgstr ""
+
+#: doc/classes/HingeJoint.xml:48 doc/classes/HingeJoint.xml:102
+msgid ""
+"If [code]true[/code], the hinges maximum and minimum rotation, defined by "
+"[member angular_limit/lower] and [member angular_limit/upper] has effects."
+msgstr ""
+
+#: doc/classes/HingeJoint.xml:51 doc/classes/HingeJoint.xml:82
+msgid ""
+"The minimum rotation. Only active if [member angular_limit/enable] is "
+"[code]true[/code]."
+msgstr ""
+
+#: doc/classes/HingeJoint.xml:54 doc/classes/HingeJoint.xml:90
+#: doc/classes/PhysicsServer.xml:982
+msgid "The lower this value, the more the rotation gets slowed down."
+msgstr ""
+
+#: doc/classes/HingeJoint.xml:59 doc/classes/HingeJoint.xml:79
+msgid ""
+"The maximum rotation. Only active if [member angular_limit/enable] is "
+"[code]true[/code]."
+msgstr ""
+
+#: doc/classes/HingeJoint.xml:62 doc/classes/HingeJoint.xml:105
+msgid "When activated, a motor turns the hinge."
+msgstr ""
+
+#: doc/classes/HingeJoint.xml:65 doc/classes/HingeJoint.xml:96
+#: doc/classes/PhysicsServer.xml:988
+msgid "Maximum acceleration for the motor."
+msgstr ""
+
+#: doc/classes/HingeJoint.xml:68 doc/classes/HingeJoint.xml:93
+#: doc/classes/PhysicsServer.xml:985
+msgid "Target speed for the motor."
+msgstr ""
+
+#: doc/classes/HingeJoint.xml:71 doc/classes/HingeJoint.xml:76
+#: doc/classes/PhysicsServer.xml:968
+msgid ""
+"The speed with which the two bodies get pulled together when they move in "
+"different directions."
+msgstr ""
+
+#: doc/classes/HMACContext.xml:4
+msgid "Used to create an HMAC for a message using a key."
+msgstr ""
+
+#: doc/classes/HMACContext.xml:7
+msgid ""
+"The HMACContext class is useful for advanced HMAC use cases, such as "
+"streaming the message as it supports creating the message over time rather "
+"than providing it all at once.\n"
+"[codeblock]\n"
+"extends Node\n"
+"var ctx = HMACContext.new()\n"
+"\n"
+"func _ready():\n"
+" var key = \"supersecret\".to_utf8()\n"
+" var err = ctx.start(HashingContext.HASH_SHA256, key)\n"
+" assert(err == OK)\n"
+" var msg1 = \"this is \".to_utf8()\n"
+" var msg2 = \"vewy vewy secret\".to_utf8()\n"
+" err = ctx.update(msg1)\n"
+" assert(err == OK)\n"
+" err = ctx.update(msg2)\n"
+" assert(err == OK)\n"
+" var hmac = ctx.finish()\n"
+" print(hmac.hex_encode())\n"
+"[/codeblock]\n"
+"And in C# we can use the following.\n"
+"[codeblock]\n"
+"using Godot;\n"
+"using System;\n"
+"using System.Diagnostics;\n"
+"\n"
+"public class CryptoNode : Node\n"
+"{\n"
+" private HMACContext ctx = new HMACContext();\n"
+" public override void _Ready()\n"
+" {\n"
+" PoolByteArray key = String(\"supersecret\").to_utf8();\n"
+" Error err = ctx.Start(HashingContext.HASH_SHA256, key);\n"
+" GD.Assert(err == OK);\n"
+" PoolByteArray msg1 = String(\"this is \").to_utf8();\n"
+" PoolByteArray msg2 = String(\"vewy vew secret\").to_utf8();\n"
+" err = ctx.Update(msg1);\n"
+" GD.Assert(err == OK);\n"
+" err = ctx.Update(msg2);\n"
+" GD.Assert(err == OK);\n"
+" PoolByteArray hmac = ctx.Finish();\n"
+" GD.Print(hmac.HexEncode());\n"
+" }\n"
+"}\n"
+"[/codeblock]\n"
+"[b]Note:[/b] Not available in HTML5 exports."
+msgstr ""
+
+#: doc/classes/HMACContext.xml:58
+msgid ""
+"Returns the resulting HMAC. If the HMAC failed, an empty [PoolByteArray] is "
+"returned."
+msgstr ""
+
+#: doc/classes/HMACContext.xml:66
+msgid ""
+"Initializes the HMACContext. This method cannot be called again on the same "
+"HMACContext until [method finish] has been called."
+msgstr ""
+
+#: doc/classes/HMACContext.xml:73
+msgid ""
+"Updates the message to be HMACed. This can be called multiple times before "
+"[method finish] is called to append [code]data[/code] to the message, but "
+"cannot be called until [method start] has been called."
+msgstr ""
+
+#: doc/classes/HScrollBar.xml:4
+msgid "Horizontal scroll bar."
+msgstr ""
+
+#: doc/classes/HScrollBar.xml:7
+msgid ""
+"Horizontal version of [ScrollBar], which goes from left (min) to right (max)."
+msgstr ""
+
+#: doc/classes/HScrollBar.xml:17
+msgid ""
+"Icon used as a button to scroll the [ScrollBar] left. Supports custom step "
+"using the [member ScrollBar.custom_step] property."
+msgstr ""
+
+#: doc/classes/HScrollBar.xml:20 doc/classes/VScrollBar.xml:24
+msgid "Displayed when the mouse cursor hovers over the decrement button."
+msgstr ""
+
+#: doc/classes/HScrollBar.xml:23 doc/classes/VScrollBar.xml:27
+msgid "Displayed when the decrement button is being pressed."
+msgstr ""
+
+#: doc/classes/HScrollBar.xml:26 doc/classes/VScrollBar.xml:30
+msgid ""
+"Used as texture for the grabber, the draggable element representing current "
+"scroll."
+msgstr ""
+
+#: doc/classes/HScrollBar.xml:29 doc/classes/VScrollBar.xml:33
+msgid "Used when the mouse hovers over the grabber."
+msgstr ""
+
+#: doc/classes/HScrollBar.xml:32 doc/classes/VScrollBar.xml:36
+msgid "Used when the grabber is being dragged."
+msgstr ""
+
+#: doc/classes/HScrollBar.xml:35
+msgid ""
+"Icon used as a button to scroll the [ScrollBar] right. Supports custom step "
+"using the [member ScrollBar.custom_step] property."
+msgstr ""
+
+#: doc/classes/HScrollBar.xml:38 doc/classes/VScrollBar.xml:42
+msgid "Displayed when the mouse cursor hovers over the increment button."
+msgstr ""
+
+#: doc/classes/HScrollBar.xml:41 doc/classes/VScrollBar.xml:45
+msgid "Displayed when the increment button is being pressed."
+msgstr ""
+
+#: doc/classes/HScrollBar.xml:44 doc/classes/VScrollBar.xml:48
+msgid "Used as background of this [ScrollBar]."
+msgstr ""
+
+#: doc/classes/HScrollBar.xml:47 doc/classes/VScrollBar.xml:51
+msgid "Used as background when the [ScrollBar] has the GUI focus."
+msgstr ""
+
+#: doc/classes/HSeparator.xml:4
+msgid "Horizontal separator."
+msgstr ""
+
+#: doc/classes/HSeparator.xml:7
+msgid ""
+"Horizontal separator. See [Separator]. Even though it looks horizontal, it "
+"is used to separate objects vertically."
+msgstr ""
+
+#: doc/classes/HSeparator.xml:17
+msgid ""
+"The height of the area covered by the separator. Effectively works like a "
+"minimum height."
+msgstr ""
+
+#: doc/classes/HSeparator.xml:20
+msgid "The style for the separator line. Works best with [StyleBoxLine]."
+msgstr ""
+
+#: doc/classes/HSlider.xml:4
+msgid "Horizontal slider."
+msgstr ""
+
+#: doc/classes/HSlider.xml:7
+msgid ""
+"Horizontal slider. See [Slider]. This one goes from left (min) to right "
+"(max).\n"
+"[b]Note:[/b] The [signal Range.changed] and [signal Range.value_changed] "
+"signals are part of the [Range] class which this class inherits from."
+msgstr ""
+
+#: doc/classes/HSlider.xml:18 doc/classes/VSlider.xml:22
+msgid "The texture for the grabber (the draggable element)."
+msgstr ""
+
+#: doc/classes/HSlider.xml:21
+msgid "The background of the area to the left of the grabber."
+msgstr ""
+
+#: doc/classes/HSlider.xml:26 doc/classes/VSlider.xml:30
+msgid "The texture for the grabber when it's disabled."
+msgstr ""
+
+#: doc/classes/HSlider.xml:29 doc/classes/VSlider.xml:33
+msgid "The texture for the grabber when it's focused."
+msgstr ""
+
+#: doc/classes/HSlider.xml:32
+msgid ""
+"The background for the whole slider. Determines the height of the "
+"[code]grabber_area[/code]."
+msgstr ""
+
+#: doc/classes/HSlider.xml:35 doc/classes/VSlider.xml:39
+msgid ""
+"The texture for the ticks, visible when [member Slider.tick_count] is "
+"greater than 0."
+msgstr ""
+
+#: doc/classes/HSplitContainer.xml:4
+msgid "Horizontal split container."
+msgstr ""
+
+#: doc/classes/HSplitContainer.xml:7
+msgid ""
+"Horizontal split container. See [SplitContainer]. This goes from left to "
+"right."
+msgstr ""
+
+#: doc/classes/HSplitContainer.xml:17 doc/classes/VSplitContainer.xml:17
+msgid ""
+"Boolean value. If 1 ([code]true[/code]), the grabber will hide automatically "
+"when it isn't under the cursor. If 0 ([code]false[/code]), it's always "
+"visible."
+msgstr ""
+
+#: doc/classes/HSplitContainer.xml:22 doc/classes/VSplitContainer.xml:22
+msgid "The icon used for the grabber drawn in the middle area."
+msgstr ""
+
+#: doc/classes/HSplitContainer.xml:25 doc/classes/VSplitContainer.xml:25
+msgid "The space between sides of the container."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:4
+msgid "Low-level hyper-text transfer protocol client."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:7
+msgid ""
+"Hyper-text transfer protocol client (sometimes called \"User Agent\"). Used "
+"to make HTTP requests to download web content, upload files and other data "
+"or to communicate with various services, among other use cases. [b]See the "
+"[HTTPRequest] node for a higher-level alternative.[/b]\n"
+"[b]Note:[/b] This client only needs to connect to a host once (see [method "
+"connect_to_host]) to send multiple requests. Because of this, methods that "
+"take URLs usually take just the part after the host instead of the full URL, "
+"as the client is already connected to a host. See [method request] for a "
+"full example and to get started.\n"
+"A [HTTPClient] should be reused between multiple requests or to connect to "
+"different hosts instead of creating one client per request. Supports SSL and "
+"SSL server certificate verification. HTTP status codes in the 2xx range "
+"indicate success, 3xx redirection (i.e. \"try again, but over here\"), 4xx "
+"something was wrong with the request, and 5xx something went wrong on the "
+"server's side.\n"
+"For more information on HTTP, see https://developer.mozilla.org/en-US/docs/"
+"Web/HTTP (or read RFC 2616 to get it straight from the source: https://tools."
+"ietf.org/html/rfc2616).\n"
+"[b]Note:[/b] When performing HTTP requests from a project exported to HTML5, "
+"keep in mind the remote server may not allow requests from foreign origins "
+"due to [url=https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS]CORS[/"
+"url]. If you host the server in question, you should modify its backend to "
+"allow requests from foreign origins by adding the [code]Access-Control-Allow-"
+"Origin: *[/code] HTTP header.\n"
+"[b]Note:[/b] SSL/TLS support is currently limited to TLS 1.0, TLS 1.1, and "
+"TLS 1.2. Attempting to connect to a TLS 1.3-only server will return an "
+"error.\n"
+"[b]Warning:[/b] SSL/TLS certificate revocation and certificate pinning are "
+"currently not supported. Revoked certificates are accepted as long as they "
+"are otherwise valid. If this is a concern, you may want to use automatically "
+"managed certificates with a short validity period."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:16
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/networking/http_client_class."
+"html"
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:17 doc/classes/HTTPRequest.xml:71
+#: doc/classes/StreamPeerSSL.xml:10
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/networking/ssl_certificates."
+"html"
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:23
+msgid "Closes the current connection, allowing reuse of this [HTTPClient]."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:33
+msgid ""
+"Connects to a host. This needs to be done before any requests are sent.\n"
+"The host should not have http:// prepended but will strip the protocol "
+"identifier if provided.\n"
+"If no [code]port[/code] is specified (or [code]-1[/code] is used), it is "
+"automatically set to 80 for HTTP and 443 for HTTPS (if [code]use_ssl[/code] "
+"is enabled).\n"
+"[code]verify_host[/code] will check the SSL identity of the host if set to "
+"[code]true[/code]."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:42
+msgid ""
+"Returns the response's body length.\n"
+"[b]Note:[/b] Some Web servers may not send a body length. In this case, the "
+"value returned will be [code]-1[/code]. If using chunked transfer encoding, "
+"the body length will also be [code]-1[/code]."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:49
+msgid "Returns the response's HTTP status code."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:55
+msgid "Returns the response headers."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:61
+msgid ""
+"Returns all response headers as a Dictionary of structure [code]{ \"key\": "
+"\"value1; value2\" }[/code] where the case-sensitivity of the keys and "
+"values is kept like the server delivers it. A value is a simple String, this "
+"string can have more than one value where \"; \" is used as separator.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"{\n"
+" \"content-length\": 12,\n"
+" \"Content-Type\": \"application/json; charset=UTF-8\",\n"
+"}\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:74
+msgid ""
+"Returns a [enum Status] constant. Need to call [method poll] in order to get "
+"status updates."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:80
+msgid "If [code]true[/code], this [HTTPClient] has a response available."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:86
+msgid "If [code]true[/code], this [HTTPClient] has a response that is chunked."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:92
+msgid ""
+"This needs to be called in order to have any request processed. Check "
+"results with [method get_status]."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:99
+msgid ""
+"Generates a GET/POST application/x-www-form-urlencoded style query string "
+"from a provided dictionary, e.g.:\n"
+"[codeblock]\n"
+"var fields = {\"username\": \"user\", \"password\": \"pass\"}\n"
+"var query_string = http_client.query_string_from_dict(fields)\n"
+"# Returns \"username=user&password=pass\"\n"
+"[/codeblock]\n"
+"Furthermore, if a key has a [code]null[/code] value, only the key itself is "
+"added, without equal sign and value. If the value is an array, for each "
+"value in it a pair with the same key is added.\n"
+"[codeblock]\n"
+"var fields = {\"single\": 123, \"not_valued\": null, \"multiple\": [22, 33, "
+"44]}\n"
+"var query_string = http_client.query_string_from_dict(fields)\n"
+"# Returns \"single=123&not_valued&multiple=22&multiple=33&multiple=44\"\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:116
+msgid "Reads one chunk from the response."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:126
+msgid ""
+"Sends a request to the connected host.\n"
+"The URL parameter is usually just the part after the host, so for "
+"[code]http://somehost.com/index.php[/code], it is [code]/index.php[/code]. "
+"When sending requests to an HTTP proxy server, it should be an absolute URL. "
+"For [constant HTTPClient.METHOD_OPTIONS] requests, [code]*[/code] is also "
+"allowed. For [constant HTTPClient.METHOD_CONNECT] requests, it should be the "
+"authority component ([code]host:port[/code]).\n"
+"Headers are HTTP request headers. For available HTTP methods, see [enum "
+"Method].\n"
+"To create a POST request with query strings to push to the server, do:\n"
+"[codeblock]\n"
+"var fields = {\"username\" : \"user\", \"password\" : \"pass\"}\n"
+"var query_string = http_client.query_string_from_dict(fields)\n"
+"var headers = [\"Content-Type: application/x-www-form-urlencoded\", "
+"\"Content-Length: \" + str(query_string.length())]\n"
+"var result = http_client.request(http_client.METHOD_POST, \"/index.php\", "
+"headers, query_string)\n"
+"[/codeblock]\n"
+"[b]Note:[/b] The [code]request_data[/code] parameter is ignored if "
+"[code]method[/code] is [constant HTTPClient.METHOD_GET]. This is because GET "
+"methods can't contain request data. As a workaround, you can pass request "
+"data as a query string in the URL. See [method String.http_escape] for an "
+"example."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:146
+msgid ""
+"Sends a raw request to the connected host.\n"
+"The URL parameter is usually just the part after the host, so for "
+"[code]http://somehost.com/index.php[/code], it is [code]/index.php[/code]. "
+"When sending requests to an HTTP proxy server, it should be an absolute URL. "
+"For [constant HTTPClient.METHOD_OPTIONS] requests, [code]*[/code] is also "
+"allowed. For [constant HTTPClient.METHOD_CONNECT] requests, it should be the "
+"authority component ([code]host:port[/code]).\n"
+"Headers are HTTP request headers. For available HTTP methods, see [enum "
+"Method].\n"
+"Sends the body data raw, as a byte array and does not encode it in any way."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:155
+msgid ""
+"If [code]true[/code], execution will block until all data is read from the "
+"response."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:158
+msgid "The connection to use for this client."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:161
+msgid ""
+"The size of the buffer used and maximum bytes to read per iteration. See "
+"[method read_response_body_chunk]."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:166
+msgid ""
+"HTTP GET method. The GET method requests a representation of the specified "
+"resource. Requests using GET should only retrieve data."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:169
+msgid ""
+"HTTP HEAD method. The HEAD method asks for a response identical to that of a "
+"GET request, but without the response body. This is useful to request "
+"metadata like HTTP headers or to check if a resource exists."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:172
+msgid ""
+"HTTP POST method. The POST method is used to submit an entity to the "
+"specified resource, often causing a change in state or side effects on the "
+"server. This is often used for forms and submitting data or uploading files."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:175
+msgid ""
+"HTTP PUT method. The PUT method asks to replace all current representations "
+"of the target resource with the request payload. (You can think of POST as "
+"\"create or update\" and PUT as \"update\", although many services tend to "
+"not make a clear distinction or change their meaning)."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:178
+msgid ""
+"HTTP DELETE method. The DELETE method requests to delete the specified "
+"resource."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:181
+msgid ""
+"HTTP OPTIONS method. The OPTIONS method asks for a description of the "
+"communication options for the target resource. Rarely used."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:184
+msgid ""
+"HTTP TRACE method. The TRACE method performs a message loop-back test along "
+"the path to the target resource. Returns the entire HTTP request received in "
+"the response body. Rarely used."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:187
+msgid ""
+"HTTP CONNECT method. The CONNECT method establishes a tunnel to the server "
+"identified by the target resource. Rarely used."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:190
+msgid ""
+"HTTP PATCH method. The PATCH method is used to apply partial modifications "
+"to a resource."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:193
+msgid "Represents the size of the [enum Method] enum."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:196
+msgid "Status: Disconnected from the server."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:199
+msgid "Status: Currently resolving the hostname for the given URL into an IP."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:202
+msgid "Status: DNS failure: Can't resolve the hostname for the given URL."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:205
+msgid "Status: Currently connecting to server."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:208
+msgid "Status: Can't connect to the server."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:211
+msgid "Status: Connection established."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:214
+msgid "Status: Currently sending request."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:217
+msgid "Status: HTTP body received."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:220
+msgid "Status: Error in HTTP connection."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:223
+msgid "Status: Error in SSL handshake."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:226
+msgid ""
+"HTTP status code [code]100 Continue[/code]. Interim response that indicates "
+"everything so far is OK and that the client should continue with the request "
+"(or ignore this status if already finished)."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:229
+msgid ""
+"HTTP status code [code]101 Switching Protocol[/code]. Sent in response to an "
+"[code]Upgrade[/code] request header by the client. Indicates the protocol "
+"the server is switching to."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:232
+msgid ""
+"HTTP status code [code]102 Processing[/code] (WebDAV). Indicates that the "
+"server has received and is processing the request, but no response is "
+"available yet."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:235
+msgid ""
+"HTTP status code [code]200 OK[/code]. The request has succeeded. Default "
+"response for successful requests. Meaning varies depending on the request. "
+"GET: The resource has been fetched and is transmitted in the message body. "
+"HEAD: The entity headers are in the message body. POST: The resource "
+"describing the result of the action is transmitted in the message body. "
+"TRACE: The message body contains the request message as received by the "
+"server."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:238
+msgid ""
+"HTTP status code [code]201 Created[/code]. The request has succeeded and a "
+"new resource has been created as a result of it. This is typically the "
+"response sent after a PUT request."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:241
+msgid ""
+"HTTP status code [code]202 Accepted[/code]. The request has been received "
+"but not yet acted upon. It is non-committal, meaning that there is no way in "
+"HTTP to later send an asynchronous response indicating the outcome of "
+"processing the request. It is intended for cases where another process or "
+"server handles the request, or for batch processing."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:244
+msgid ""
+"HTTP status code [code]203 Non-Authoritative Information[/code]. This "
+"response code means returned meta-information set is not exact set as "
+"available from the origin server, but collected from a local or a third "
+"party copy. Except this condition, 200 OK response should be preferred "
+"instead of this response."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:247
+msgid ""
+"HTTP status code [code]204 No Content[/code]. There is no content to send "
+"for this request, but the headers may be useful. The user-agent may update "
+"its cached headers for this resource with the new ones."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:250
+msgid ""
+"HTTP status code [code]205 Reset Content[/code]. The server has fulfilled "
+"the request and desires that the client resets the \"document view\" that "
+"caused the request to be sent to its original state as received from the "
+"origin server."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:253
+msgid ""
+"HTTP status code [code]206 Partial Content[/code]. This response code is "
+"used because of a range header sent by the client to separate download into "
+"multiple streams."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:256
+msgid ""
+"HTTP status code [code]207 Multi-Status[/code] (WebDAV). A Multi-Status "
+"response conveys information about multiple resources in situations where "
+"multiple status codes might be appropriate."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:259
+msgid ""
+"HTTP status code [code]208 Already Reported[/code] (WebDAV). Used inside a "
+"DAV: propstat response element to avoid enumerating the internal members of "
+"multiple bindings to the same collection repeatedly."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:262
+msgid ""
+"HTTP status code [code]226 IM Used[/code] (WebDAV). The server has fulfilled "
+"a GET request for the resource, and the response is a representation of the "
+"result of one or more instance-manipulations applied to the current instance."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:265
+msgid ""
+"HTTP status code [code]300 Multiple Choice[/code]. The request has more than "
+"one possible responses and there is no standardized way to choose one of the "
+"responses. User-agent or user should choose one of them."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:268
+msgid ""
+"HTTP status code [code]301 Moved Permanently[/code]. Redirection. This "
+"response code means the URI of requested resource has been changed. The new "
+"URI is usually included in the response."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:271
+msgid ""
+"HTTP status code [code]302 Found[/code]. Temporary redirection. This "
+"response code means the URI of requested resource has been changed "
+"temporarily. New changes in the URI might be made in the future. Therefore, "
+"this same URI should be used by the client in future requests."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:274
+msgid ""
+"HTTP status code [code]303 See Other[/code]. The server is redirecting the "
+"user agent to a different resource, as indicated by a URI in the Location "
+"header field, which is intended to provide an indirect response to the "
+"original request."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:277
+msgid ""
+"HTTP status code [code]304 Not Modified[/code]. A conditional GET or HEAD "
+"request has been received and would have resulted in a 200 OK response if it "
+"were not for the fact that the condition evaluated to [code]false[/code]."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:280
+msgid ""
+"HTTP status code [code]305 Use Proxy[/code]. [i]Deprecated. Do not use.[/i]"
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:283
+msgid ""
+"HTTP status code [code]306 Switch Proxy[/code]. [i]Deprecated. Do not use.[/"
+"i]"
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:286
+msgid ""
+"HTTP status code [code]307 Temporary Redirect[/code]. The target resource "
+"resides temporarily under a different URI and the user agent MUST NOT change "
+"the request method if it performs an automatic redirection to that URI."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:289
+msgid ""
+"HTTP status code [code]308 Permanent Redirect[/code]. The target resource "
+"has been assigned a new permanent URI and any future references to this "
+"resource ought to use one of the enclosed URIs."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:292
+msgid ""
+"HTTP status code [code]400 Bad Request[/code]. The request was invalid. The "
+"server cannot or will not process the request due to something that is "
+"perceived to be a client error (e.g., malformed request syntax, invalid "
+"request message framing, invalid request contents, or deceptive request "
+"routing)."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:295
+msgid ""
+"HTTP status code [code]401 Unauthorized[/code]. Credentials required. The "
+"request has not been applied because it lacks valid authentication "
+"credentials for the target resource."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:298
+msgid ""
+"HTTP status code [code]402 Payment Required[/code]. This response code is "
+"reserved for future use. Initial aim for creating this code was using it for "
+"digital payment systems, however this is not currently used."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:301
+msgid ""
+"HTTP status code [code]403 Forbidden[/code]. The client does not have access "
+"rights to the content, i.e. they are unauthorized, so server is rejecting to "
+"give proper response. Unlike [code]401[/code], the client's identity is "
+"known to the server."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:304
+msgid ""
+"HTTP status code [code]404 Not Found[/code]. The server can not find "
+"requested resource. Either the URL is not recognized or the endpoint is "
+"valid but the resource itself does not exist. May also be sent instead of "
+"403 to hide existence of a resource if the client is not authorized."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:307
+msgid ""
+"HTTP status code [code]405 Method Not Allowed[/code]. The request's HTTP "
+"method is known by the server but has been disabled and cannot be used. For "
+"example, an API may forbid DELETE-ing a resource. The two mandatory methods, "
+"GET and HEAD, must never be disabled and should not return this error code."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:310
+msgid ""
+"HTTP status code [code]406 Not Acceptable[/code]. The target resource does "
+"not have a current representation that would be acceptable to the user "
+"agent, according to the proactive negotiation header fields received in the "
+"request. Used when negotiation content."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:313
+msgid ""
+"HTTP status code [code]407 Proxy Authentication Required[/code]. Similar to "
+"401 Unauthorized, but it indicates that the client needs to authenticate "
+"itself in order to use a proxy."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:316
+msgid ""
+"HTTP status code [code]408 Request Timeout[/code]. The server did not "
+"receive a complete request message within the time that it was prepared to "
+"wait."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:319
+msgid ""
+"HTTP status code [code]409 Conflict[/code]. The request could not be "
+"completed due to a conflict with the current state of the target resource. "
+"This code is used in situations where the user might be able to resolve the "
+"conflict and resubmit the request."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:322
+msgid ""
+"HTTP status code [code]410 Gone[/code]. The target resource is no longer "
+"available at the origin server and this condition is likely permanent."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:325
+msgid ""
+"HTTP status code [code]411 Length Required[/code]. The server refuses to "
+"accept the request without a defined Content-Length header."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:328
+msgid ""
+"HTTP status code [code]412 Precondition Failed[/code]. One or more "
+"conditions given in the request header fields evaluated to [code]false[/"
+"code] when tested on the server."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:331
+msgid ""
+"HTTP status code [code]413 Entity Too Large[/code]. The server is refusing "
+"to process a request because the request payload is larger than the server "
+"is willing or able to process."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:334
+msgid ""
+"HTTP status code [code]414 Request-URI Too Long[/code]. The server is "
+"refusing to service the request because the request-target is longer than "
+"the server is willing to interpret."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:337
+msgid ""
+"HTTP status code [code]415 Unsupported Media Type[/code]. The origin server "
+"is refusing to service the request because the payload is in a format not "
+"supported by this method on the target resource."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:340
+msgid ""
+"HTTP status code [code]416 Requested Range Not Satisfiable[/code]. None of "
+"the ranges in the request's Range header field overlap the current extent of "
+"the selected resource or the set of ranges requested has been rejected due "
+"to invalid ranges or an excessive request of small or overlapping ranges."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:343
+msgid ""
+"HTTP status code [code]417 Expectation Failed[/code]. The expectation given "
+"in the request's Expect header field could not be met by at least one of the "
+"inbound servers."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:346
+msgid ""
+"HTTP status code [code]418 I'm A Teapot[/code]. Any attempt to brew coffee "
+"with a teapot should result in the error code \"418 I'm a teapot\". The "
+"resulting entity body MAY be short and stout."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:349
+msgid ""
+"HTTP status code [code]421 Misdirected Request[/code]. The request was "
+"directed at a server that is not able to produce a response. This can be "
+"sent by a server that is not configured to produce responses for the "
+"combination of scheme and authority that are included in the request URI."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:352
+msgid ""
+"HTTP status code [code]422 Unprocessable Entity[/code] (WebDAV). The server "
+"understands the content type of the request entity (hence a 415 Unsupported "
+"Media Type status code is inappropriate), and the syntax of the request "
+"entity is correct (thus a 400 Bad Request status code is inappropriate) but "
+"was unable to process the contained instructions."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:355
+msgid ""
+"HTTP status code [code]423 Locked[/code] (WebDAV). The source or destination "
+"resource of a method is locked."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:358
+msgid ""
+"HTTP status code [code]424 Failed Dependency[/code] (WebDAV). The method "
+"could not be performed on the resource because the requested action depended "
+"on another action and that action failed."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:361
+msgid ""
+"HTTP status code [code]426 Upgrade Required[/code]. The server refuses to "
+"perform the request using the current protocol but might be willing to do so "
+"after the client upgrades to a different protocol."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:364
+msgid ""
+"HTTP status code [code]428 Precondition Required[/code]. The origin server "
+"requires the request to be conditional."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:367
+msgid ""
+"HTTP status code [code]429 Too Many Requests[/code]. The user has sent too "
+"many requests in a given amount of time (see \"rate limiting\"). Back off "
+"and increase time between requests or try again later."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:370
+msgid ""
+"HTTP status code [code]431 Request Header Fields Too Large[/code]. The "
+"server is unwilling to process the request because its header fields are too "
+"large. The request MAY be resubmitted after reducing the size of the request "
+"header fields."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:373
+msgid ""
+"HTTP status code [code]451 Response Unavailable For Legal Reasons[/code]. "
+"The server is denying access to the resource as a consequence of a legal "
+"demand."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:376
+msgid ""
+"HTTP status code [code]500 Internal Server Error[/code]. The server "
+"encountered an unexpected condition that prevented it from fulfilling the "
+"request."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:379
+msgid ""
+"HTTP status code [code]501 Not Implemented[/code]. The server does not "
+"support the functionality required to fulfill the request."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:382
+msgid ""
+"HTTP status code [code]502 Bad Gateway[/code]. The server, while acting as a "
+"gateway or proxy, received an invalid response from an inbound server it "
+"accessed while attempting to fulfill the request. Usually returned by load "
+"balancers or proxies."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:385
+msgid ""
+"HTTP status code [code]503 Service Unavailable[/code]. The server is "
+"currently unable to handle the request due to a temporary overload or "
+"scheduled maintenance, which will likely be alleviated after some delay. Try "
+"again later."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:388
+msgid ""
+"HTTP status code [code]504 Gateway Timeout[/code]. The server, while acting "
+"as a gateway or proxy, did not receive a timely response from an upstream "
+"server it needed to access in order to complete the request. Usually "
+"returned by load balancers or proxies."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:391
+msgid ""
+"HTTP status code [code]505 HTTP Version Not Supported[/code]. The server "
+"does not support, or refuses to support, the major version of HTTP that was "
+"used in the request message."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:394
+msgid ""
+"HTTP status code [code]506 Variant Also Negotiates[/code]. The server has an "
+"internal configuration error: the chosen variant resource is configured to "
+"engage in transparent content negotiation itself, and is therefore not a "
+"proper end point in the negotiation process."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:397
+msgid ""
+"HTTP status code [code]507 Insufficient Storage[/code]. The method could not "
+"be performed on the resource because the server is unable to store the "
+"representation needed to successfully complete the request."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:400
+msgid ""
+"HTTP status code [code]508 Loop Detected[/code]. The server terminated an "
+"operation because it encountered an infinite loop while processing a request "
+"with \"Depth: infinity\". This status indicates that the entire operation "
+"failed."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:403
+msgid ""
+"HTTP status code [code]510 Not Extended[/code]. The policy for accessing the "
+"resource has not been met in the request. The server should send back all "
+"the information necessary for the client to issue an extended request."
+msgstr ""
+
+#: doc/classes/HTTPClient.xml:406
+msgid ""
+"HTTP status code [code]511 Network Authentication Required[/code]. The "
+"client needs to authenticate to gain network access."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:4
+msgid "A node with the ability to send HTTP(S) requests."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:7
+msgid ""
+"A node with the ability to send HTTP requests. Uses [HTTPClient] "
+"internally.\n"
+"Can be used to make HTTP requests, i.e. download or upload files or web "
+"content via HTTP.\n"
+"[b]Warning:[/b] See the notes and warnings on [HTTPClient] for limitations, "
+"especially regarding SSL security.\n"
+"[b]Example of contacting a REST API and printing one of its returned fields:"
+"[/b]\n"
+"[codeblock]\n"
+"func _ready():\n"
+" # Create an HTTP request node and connect its completion signal.\n"
+" var http_request = HTTPRequest.new()\n"
+" add_child(http_request)\n"
+" http_request.connect(\"request_completed\", self, "
+"\"_http_request_completed\")\n"
+"\n"
+" # Perform a GET request. The URL below returns JSON as of writing.\n"
+" var error = http_request.request(\"https://httpbin.org/get\")\n"
+" if error != OK:\n"
+" push_error(\"An error occurred in the HTTP request.\")\n"
+"\n"
+" # Perform a POST request. The URL below returns JSON as of writing.\n"
+" # Note: Don't make simultaneous requests using a single HTTPRequest "
+"node.\n"
+" # The snippet below is provided for reference only.\n"
+" var body = {\"name\": \"Godette\"}\n"
+" error = http_request.request(\"https://httpbin.org/post\", [], true, "
+"HTTPClient.METHOD_POST, body)\n"
+" if error != OK:\n"
+" push_error(\"An error occurred in the HTTP request.\")\n"
+"\n"
+"\n"
+"# Called when the HTTP request is completed.\n"
+"func _http_request_completed(result, response_code, headers, body):\n"
+" var response = parse_json(body.get_string_from_utf8())\n"
+"\n"
+" # Will print the user agent string used by the HTTPRequest node (as "
+"recognized by httpbin.org).\n"
+" print(response.headers[\"User-Agent\"])\n"
+"[/codeblock]\n"
+"[b]Example of loading and displaying an image using HTTPRequest:[/b]\n"
+"[codeblock]\n"
+"func _ready():\n"
+" # Create an HTTP request node and connect its completion signal.\n"
+" var http_request = HTTPRequest.new()\n"
+" add_child(http_request)\n"
+" http_request.connect(\"request_completed\", self, "
+"\"_http_request_completed\")\n"
+"\n"
+" # Perform the HTTP request. The URL below returns a PNG image as of "
+"writing.\n"
+" var error = http_request.request(\"https://via.placeholder.com/512\")\n"
+" if error != OK:\n"
+" push_error(\"An error occurred in the HTTP request.\")\n"
+"\n"
+"\n"
+"# Called when the HTTP request is completed.\n"
+"func _http_request_completed(result, response_code, headers, body):\n"
+" var image = Image.new()\n"
+" var error = image.load_png_from_buffer(body)\n"
+" if error != OK:\n"
+" push_error(\"Couldn't load the image.\")\n"
+"\n"
+" var texture = ImageTexture.new()\n"
+" texture.create_from_image(image)\n"
+"\n"
+" # Display the image in a TextureRect node.\n"
+" var texture_rect = TextureRect.new()\n"
+" add_child(texture_rect)\n"
+" texture_rect.texture = texture\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:70
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/networking/http_request_class."
+"html"
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:77
+msgid "Cancels the current request."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:83
+msgid ""
+"Returns the response body length.\n"
+"[b]Note:[/b] Some Web servers may not send a body length. In this case, the "
+"value returned will be [code]-1[/code]. If using chunked transfer encoding, "
+"the body length will also be [code]-1[/code]."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:90
+msgid "Returns the amount of bytes this HTTPRequest downloaded."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:96
+msgid ""
+"Returns the current status of the underlying [HTTPClient]. See [enum "
+"HTTPClient.Status]."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:107
+msgid ""
+"Creates request on the underlying [HTTPClient]. If there is no configuration "
+"errors, it tries to connect using [method HTTPClient.connect_to_host] and "
+"passes parameters onto [method HTTPClient.request].\n"
+"Returns [constant OK] if request is successfully created. (Does not imply "
+"that the server has responded), [constant ERR_UNCONFIGURED] if not in the "
+"tree, [constant ERR_BUSY] if still processing previous request, [constant "
+"ERR_INVALID_PARAMETER] if given string is not a valid URL format, or "
+"[constant ERR_CANT_CONNECT] if not using thread and the [HTTPClient] cannot "
+"connect to host.\n"
+"[b]Note:[/b] When [code]method[/code] is [constant HTTPClient.METHOD_GET], "
+"the payload sent via [code]request_data[/code] might be ignored by the "
+"server or even cause the server to reject the request (check [url=https://"
+"datatracker.ietf.org/doc/html/rfc7231#section-4.3.1]RFC 7231 section 4.3.1[/"
+"url] for more details). As a workaround, you can send data as a query string "
+"in the URL. See [method String.http_escape] for an example."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:120
+msgid ""
+"Creates request on the underlying [HTTPClient] using a raw array of bytes "
+"for the request body. If there is no configuration errors, it tries to "
+"connect using [method HTTPClient.connect_to_host] and passes parameters onto "
+"[method HTTPClient.request].\n"
+"Returns [constant OK] if request is successfully created. (Does not imply "
+"that the server has responded), [constant ERR_UNCONFIGURED] if not in the "
+"tree, [constant ERR_BUSY] if still processing previous request, [constant "
+"ERR_INVALID_PARAMETER] if given string is not a valid URL format, or "
+"[constant ERR_CANT_CONNECT] if not using thread and the [HTTPClient] cannot "
+"connect to host."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:127
+msgid "Maximum allowed size for response bodies."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:130
+msgid ""
+"The size of the buffer used and maximum bytes to read per iteration. See "
+"[member HTTPClient.read_chunk_size].\n"
+"Set this to a lower value (e.g. 4096 for 4 KiB) when downloading small files "
+"to decrease memory usage at the cost of download speeds."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:134
+msgid "The file to download into. Will output any received file into it."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:137
+msgid "Maximum number of allowed redirects."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:142
+msgid "If [code]true[/code], multithreading is used to improve performance."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:152
+msgid "Emitted when a request is completed."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:158
+msgid "Request successful."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:163
+msgid "Request failed while connecting."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:166
+msgid "Request failed while resolving."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:169
+msgid "Request failed due to connection (read/write) error."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:172
+msgid "Request failed on SSL handshake."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:175
+msgid "Request does not have a response (yet)."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:178
+msgid "Request exceeded its maximum size limit, see [member body_size_limit]."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:181
+msgid "Request failed (currently unused)."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:184
+msgid "HTTPRequest couldn't open the download file."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:187
+msgid "HTTPRequest couldn't write to the download file."
+msgstr ""
+
+#: doc/classes/HTTPRequest.xml:190
+msgid "Request reached its maximum redirect limit, see [member max_redirects]."
+msgstr ""
+
+#: doc/classes/Image.xml:4
+msgid "Image datatype."
+msgstr ""
+
+#: doc/classes/Image.xml:7
+msgid ""
+"Native image datatype. Contains image data which can be converted to an "
+"[ImageTexture] and provides commonly used [i]image processing[/i] methods. "
+"The maximum width and height for an [Image] are [constant MAX_WIDTH] and "
+"[constant MAX_HEIGHT].\n"
+"An [Image] cannot be assigned to a [code]texture[/code] property of an "
+"object directly (such as [Sprite]), and has to be converted manually to an "
+"[ImageTexture] first.\n"
+"[b]Note:[/b] The maximum image size is 16384×16384 pixels due to graphics "
+"hardware limitations. Larger images may fail to import."
+msgstr ""
+
+#: doc/classes/Image.xml:12 doc/classes/ImageTexture.xml:31
+msgid ""
+"https://docs.godotengine.org/en/3.4/getting_started/workflow/assets/"
+"importing_images.html"
+msgstr ""
+
+#: doc/classes/Image.xml:21
+msgid ""
+"Alpha-blends [code]src_rect[/code] from [code]src[/code] image to this image "
+"at coordinates [code]dest[/code]."
+msgstr ""
+
+#: doc/classes/Image.xml:31
+msgid ""
+"Alpha-blends [code]src_rect[/code] from [code]src[/code] image to this image "
+"using [code]mask[/code] image at coordinates [code]dst[/code]. Alpha "
+"channels are required for both [code]src[/code] and [code]mask[/code]. "
+"[code]dst[/code] pixels and [code]src[/code] pixels will blend if the "
+"corresponding mask pixel's alpha value is not 0. [code]src[/code] image and "
+"[code]mask[/code] image [b]must[/b] have the same size (width and height) "
+"but they can have different formats."
+msgstr ""
+
+#: doc/classes/Image.xml:40
+msgid ""
+"Copies [code]src_rect[/code] from [code]src[/code] image to this image at "
+"coordinates [code]dst[/code]."
+msgstr ""
+
+#: doc/classes/Image.xml:50
+msgid ""
+"Blits [code]src_rect[/code] area from [code]src[/code] image to this image "
+"at the coordinates given by [code]dst[/code]. [code]src[/code] pixel is "
+"copied onto [code]dst[/code] if the corresponding [code]mask[/code] pixel's "
+"alpha value is not 0. [code]src[/code] image and [code]mask[/code] image "
+"[b]must[/b] have the same size (width and height) but they can have "
+"different formats."
+msgstr ""
+
+#: doc/classes/Image.xml:57
+msgid ""
+"Converts a bumpmap to a normalmap. A bumpmap provides a height offset per-"
+"pixel, while a normalmap provides a normal direction per pixel."
+msgstr ""
+
+#: doc/classes/Image.xml:63
+msgid "Removes the image's mipmaps."
+msgstr ""
+
+#: doc/classes/Image.xml:72
+msgid ""
+"Compresses the image to use less memory. Can not directly access pixel data "
+"while the image is compressed. Returns error if the chosen compression mode "
+"is not available. See [enum CompressMode] and [enum CompressSource] "
+"constants."
+msgstr ""
+
+#: doc/classes/Image.xml:79
+msgid "Converts the image's format. See [enum Format] constants."
+msgstr ""
+
+#: doc/classes/Image.xml:86
+msgid "Copies [code]src[/code] image to this image."
+msgstr ""
+
+#: doc/classes/Image.xml:96
+msgid ""
+"Creates an empty image of given size and format. See [enum Format] "
+"constants. If [code]use_mipmaps[/code] is [code]true[/code] then generate "
+"mipmaps for this image. See the [method generate_mipmaps]."
+msgstr ""
+
+#: doc/classes/Image.xml:107
+msgid ""
+"Creates a new image of given size and format. See [enum Format] constants. "
+"Fills the image with the given raw data. If [code]use_mipmaps[/code] is "
+"[code]true[/code] then loads mipmaps for this image from [code]data[/code]. "
+"See [method generate_mipmaps]."
+msgstr ""
+
+#: doc/classes/Image.xml:115
+msgid ""
+"Crops the image to the given [code]width[/code] and [code]height[/code]. If "
+"the specified size is larger than the current size, the extra area is filled "
+"with black pixels."
+msgstr ""
+
+#: doc/classes/Image.xml:121
+msgid ""
+"Decompresses the image if it is compressed. Returns an error if decompress "
+"function is not available."
+msgstr ""
+
+#: doc/classes/Image.xml:127
+msgid ""
+"Returns [constant ALPHA_BLEND] if the image has data for alpha values. "
+"Returns [constant ALPHA_BIT] if all the alpha values are stored in a single "
+"bit. Returns [constant ALPHA_NONE] if no data for alpha values is found."
+msgstr ""
+
+#: doc/classes/Image.xml:133
+msgid ""
+"Stretches the image and enlarges it by a factor of 2. No interpolation is "
+"done."
+msgstr ""
+
+#: doc/classes/Image.xml:140
+msgid "Fills the image with a given [Color]."
+msgstr ""
+
+#: doc/classes/Image.xml:146
+msgid "Blends low-alpha pixels with nearby pixels."
+msgstr ""
+
+#: doc/classes/Image.xml:152
+msgid "Flips the image horizontally."
+msgstr ""
+
+#: doc/classes/Image.xml:158
+msgid "Flips the image vertically."
+msgstr ""
+
+#: doc/classes/Image.xml:165
+msgid ""
+"Generates mipmaps for the image. Mipmaps are precalculated lower-resolution "
+"copies of the image that are automatically used if the image needs to be "
+"scaled down when rendered. They help improve image quality and performance "
+"when rendering. This method returns an error if the image is compressed, in "
+"a custom format, or if the image's width/height is [code]0[/code].\n"
+"[b]Note:[/b] Mipmap generation is done on the CPU, is single-threaded and is "
+"[i]always[/i] done on the main thread. This means generating mipmaps will "
+"result in noticeable stuttering during gameplay, even if [method "
+"generate_mipmaps] is called from a [Thread]."
+msgstr ""
+
+#: doc/classes/Image.xml:172
+msgid "Returns a copy of the image's raw data."
+msgstr ""
+
+#: doc/classes/Image.xml:178
+msgid "Returns the image's format. See [enum Format] constants."
+msgstr ""
+
+#: doc/classes/Image.xml:184
+msgid "Returns the image's height."
+msgstr ""
+
+#: doc/classes/Image.xml:191
+msgid ""
+"Returns the offset where the image's mipmap with index [code]mipmap[/code] "
+"is stored in the [code]data[/code] dictionary."
+msgstr ""
+
+#: doc/classes/Image.xml:199
+msgid ""
+"Returns the color of the pixel at [code](x, y)[/code] if the image is "
+"locked. If the image is unlocked, it always returns a [Color] with the value "
+"[code](0, 0, 0, 1.0)[/code]. This is the same as [method get_pixelv], but "
+"two integer arguments instead of a Vector2 argument."
+msgstr ""
+
+#: doc/classes/Image.xml:206
+msgid ""
+"Returns the color of the pixel at [code]src[/code] if the image is locked. "
+"If the image is unlocked, it always returns a [Color] with the value [code]"
+"(0, 0, 0, 1.0)[/code]. This is the same as [method get_pixel], but with a "
+"Vector2 argument instead of two integer arguments."
+msgstr ""
+
+#: doc/classes/Image.xml:213
+msgid ""
+"Returns a new image that is a copy of the image's area specified with "
+"[code]rect[/code]."
+msgstr ""
+
+#: doc/classes/Image.xml:219
+msgid "Returns the image's size (width and height)."
+msgstr ""
+
+#: doc/classes/Image.xml:225
+msgid ""
+"Returns a [Rect2] enclosing the visible portion of the image, considering "
+"each pixel with a non-zero alpha channel as visible."
+msgstr ""
+
+#: doc/classes/Image.xml:231
+msgid "Returns the image's width."
+msgstr ""
+
+#: doc/classes/Image.xml:237
+msgid "Returns [code]true[/code] if the image has generated mipmaps."
+msgstr ""
+
+#: doc/classes/Image.xml:243
+msgid "Returns [code]true[/code] if the image is compressed."
+msgstr ""
+
+#: doc/classes/Image.xml:249
+msgid "Returns [code]true[/code] if the image has no data."
+msgstr ""
+
+#: doc/classes/Image.xml:255
+msgid ""
+"Returns [code]true[/code] if all the image's pixels have an alpha value of "
+"0. Returns [code]false[/code] if any pixel has an alpha value higher than 0."
+msgstr ""
+
+#: doc/classes/Image.xml:262
+msgid ""
+"Loads an image from file [code]path[/code]. See [url=https://docs."
+"godotengine.org/en/3.4/getting_started/workflow/assets/importing_images."
+"html#supported-image-formats]Supported image formats[/url] for a list of "
+"supported image formats and limitations.\n"
+"[b]Warning:[/b] This method should only be used in the editor or in cases "
+"when you need to load external images at run-time, such as images located at "
+"the [code]user://[/code] directory, and may not work in exported projects.\n"
+"See also [ImageTexture] description for usage examples."
+msgstr ""
+
+#: doc/classes/Image.xml:271
+msgid ""
+"Loads an image from the binary contents of a BMP file.\n"
+"[b]Note:[/b] Godot's BMP module doesn't support 16-bit per pixel images. "
+"Only 1-bit, 4-bit, 8-bit, 24-bit, and 32-bit per pixel images are supported."
+msgstr ""
+
+#: doc/classes/Image.xml:279
+msgid "Loads an image from the binary contents of a JPEG file."
+msgstr ""
+
+#: doc/classes/Image.xml:286
+msgid "Loads an image from the binary contents of a PNG file."
+msgstr ""
+
+#: doc/classes/Image.xml:293
+msgid "Loads an image from the binary contents of a TGA file."
+msgstr ""
+
+#: doc/classes/Image.xml:300
+msgid "Loads an image from the binary contents of a WebP file."
+msgstr ""
+
+#: doc/classes/Image.xml:306
+msgid ""
+"Locks the data for reading and writing access. Sends an error to the console "
+"if the image is not locked when reading or writing a pixel."
+msgstr ""
+
+#: doc/classes/Image.xml:312
+msgid ""
+"Converts the image's data to represent coordinates on a 3D plane. This is "
+"used when the image represents a normalmap. A normalmap can add lots of "
+"detail to a 3D surface without increasing the polygon count."
+msgstr ""
+
+#: doc/classes/Image.xml:318
+msgid ""
+"Multiplies color values with alpha values. Resulting color values for a "
+"pixel are [code](color * alpha)/256[/code]."
+msgstr ""
+
+#: doc/classes/Image.xml:327
+msgid ""
+"Resizes the image to the given [code]width[/code] and [code]height[/code]. "
+"New pixels are calculated using the [code]interpolation[/code] mode defined "
+"via [enum Interpolation] constants."
+msgstr ""
+
+#: doc/classes/Image.xml:335
+msgid ""
+"Resizes the image to the nearest power of 2 for the width and height. If "
+"[code]square[/code] is [code]true[/code] then set width and height to be the "
+"same. New pixels are calculated using the [code]interpolation[/code] mode "
+"defined via [enum Interpolation] constants."
+msgstr ""
+
+#: doc/classes/Image.xml:341
+msgid ""
+"Converts a standard RGBE (Red Green Blue Exponent) image to an sRGB image."
+msgstr ""
+
+#: doc/classes/Image.xml:349
+msgid ""
+"Saves the image as an EXR file to [code]path[/code]. If [code]grayscale[/"
+"code] is [code]true[/code] and the image has only one channel, it will be "
+"saved explicitly as monochrome rather than one red channel. This function "
+"will return [constant ERR_UNAVAILABLE] if Godot was compiled without the "
+"TinyEXR module.\n"
+"[b]Note:[/b] The TinyEXR module is disabled in non-editor builds, which "
+"means [method save_exr] will return [constant ERR_UNAVAILABLE] when it is "
+"called from an exported project."
+msgstr ""
+
+#: doc/classes/Image.xml:357
+msgid "Saves the image as a PNG file to [code]path[/code]."
+msgstr ""
+
+#: doc/classes/Image.xml:371
+msgid ""
+"Sets the [Color] of the pixel at [code](x, y)[/code] if the image is locked. "
+"Example:\n"
+"[codeblock]\n"
+"var img = Image.new()\n"
+"img.create(img_width, img_height, false, Image.FORMAT_RGBA8)\n"
+"img.lock()\n"
+"img.set_pixel(x, y, color) # Works\n"
+"img.unlock()\n"
+"img.set_pixel(x, y, color) # Does not have an effect\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Image.xml:387
+msgid ""
+"Sets the [Color] of the pixel at [code](dst.x, dst.y)[/code] if the image is "
+"locked. Note that the [code]dst[/code] values must be integers. Example:\n"
+"[codeblock]\n"
+"var img = Image.new()\n"
+"img.create(img_width, img_height, false, Image.FORMAT_RGBA8)\n"
+"img.lock()\n"
+"img.set_pixelv(Vector2(x, y), color) # Works\n"
+"img.unlock()\n"
+"img.set_pixelv(Vector2(x, y), color) # Does not have an effect\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Image.xml:401
+msgid "Shrinks the image by a factor of 2."
+msgstr ""
+
+#: doc/classes/Image.xml:407
+msgid "Converts the raw data from the sRGB colorspace to a linear scale."
+msgstr ""
+
+#: doc/classes/Image.xml:413
+msgid "Unlocks the data and prevents changes."
+msgstr ""
+
+#: doc/classes/Image.xml:419
+msgid ""
+"Holds all the image's color data in a given format. See [enum Format] "
+"constants."
+msgstr ""
+
+#: doc/classes/Image.xml:424
+msgid "The maximal width allowed for [Image] resources."
+msgstr ""
+
+#: doc/classes/Image.xml:427
+msgid "The maximal height allowed for [Image] resources."
+msgstr ""
+
+#: doc/classes/Image.xml:430
+msgid "Texture format with a single 8-bit depth representing luminance."
+msgstr ""
+
+#: doc/classes/Image.xml:433
+msgid ""
+"OpenGL texture format with two values, luminance and alpha each stored with "
+"8 bits."
+msgstr ""
+
+#: doc/classes/Image.xml:436
+msgid ""
+"OpenGL texture format [code]RED[/code] with a single component and a "
+"bitdepth of 8.\n"
+"[b]Note:[/b] When using the GLES2 backend, this uses the alpha channel "
+"instead of the red channel for storage."
+msgstr ""
+
+#: doc/classes/Image.xml:440
+msgid ""
+"OpenGL texture format [code]RG[/code] with two components and a bitdepth of "
+"8 for each."
+msgstr ""
+
+#: doc/classes/Image.xml:443
+msgid ""
+"OpenGL texture format [code]RGB[/code] with three components, each with a "
+"bitdepth of 8.\n"
+"[b]Note:[/b] When creating an [ImageTexture], an sRGB to linear color space "
+"conversion is performed."
+msgstr ""
+
+#: doc/classes/Image.xml:447
+msgid ""
+"OpenGL texture format [code]RGBA[/code] with four components, each with a "
+"bitdepth of 8.\n"
+"[b]Note:[/b] When creating an [ImageTexture], an sRGB to linear color space "
+"conversion is performed."
+msgstr ""
+
+#: doc/classes/Image.xml:451
+msgid ""
+"OpenGL texture format [code]RGBA[/code] with four components, each with a "
+"bitdepth of 4."
+msgstr ""
+
+#: doc/classes/Image.xml:454
+msgid ""
+"OpenGL texture format [code]GL_RGB5_A1[/code] where 5 bits of depth for each "
+"component of RGB and one bit for alpha."
+msgstr ""
+
+#: doc/classes/Image.xml:457
+msgid ""
+"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 32-"
+"bit floating-point value."
+msgstr ""
+
+#: doc/classes/Image.xml:460
+msgid ""
+"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
+"each a 32-bit floating-point values."
+msgstr ""
+
+#: doc/classes/Image.xml:463
+msgid ""
+"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
+"components, each a 32-bit floating-point values."
+msgstr ""
+
+#: doc/classes/Image.xml:466
+msgid ""
+"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
+"components, each a 32-bit floating-point values."
+msgstr ""
+
+#: doc/classes/Image.xml:469
+msgid ""
+"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 16-"
+"bit \"half-precision\" floating-point value."
+msgstr ""
+
+#: doc/classes/Image.xml:472
+msgid ""
+"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
+"each a 16-bit \"half-precision\" floating-point value."
+msgstr ""
+
+#: doc/classes/Image.xml:475
+msgid ""
+"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
+"components, each a 16-bit \"half-precision\" floating-point value."
+msgstr ""
+
+#: doc/classes/Image.xml:478
+msgid ""
+"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
+"components, each a 16-bit \"half-precision\" floating-point value."
+msgstr ""
+
+#: doc/classes/Image.xml:481
+msgid ""
+"A special OpenGL texture format where the three color components have 9 bits "
+"of precision and all three share a single 5-bit exponent."
+msgstr ""
+
+#: doc/classes/Image.xml:484
+msgid ""
+"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
+"texture format that uses Block Compression 1, and is the smallest variation "
+"of S3TC, only providing 1 bit of alpha and color data being premultiplied "
+"with alpha.\n"
+"[b]Note:[/b] When creating an [ImageTexture], an sRGB to linear color space "
+"conversion is performed."
+msgstr ""
+
+#: doc/classes/Image.xml:488
+msgid ""
+"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
+"texture format that uses Block Compression 2, and color data is interpreted "
+"as not having been premultiplied by alpha. Well suited for images with sharp "
+"alpha transitions between translucent and opaque areas.\n"
+"[b]Note:[/b] When creating an [ImageTexture], an sRGB to linear color space "
+"conversion is performed."
+msgstr ""
+
+#: doc/classes/Image.xml:492
+msgid ""
+"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
+"texture format also known as Block Compression 3 or BC3 that contains 64 "
+"bits of alpha channel data followed by 64 bits of DXT1-encoded color data. "
+"Color data is not premultiplied by alpha, same as DXT3. DXT5 generally "
+"produces superior results for transparent gradients compared to DXT3.\n"
+"[b]Note:[/b] When creating an [ImageTexture], an sRGB to linear color space "
+"conversion is performed."
+msgstr ""
+
+#: doc/classes/Image.xml:496
+msgid ""
+"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
+"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
+"normalizing the red channel data using the same compression algorithm that "
+"DXT5 uses for the alpha channel."
+msgstr ""
+
+#: doc/classes/Image.xml:499
+msgid ""
+"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
+"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
+"normalizing the red and green channel data using the same compression "
+"algorithm that DXT5 uses for the alpha channel."
+msgstr ""
+
+#: doc/classes/Image.xml:502
+msgid ""
+"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
+"BPTC_Texture_Compression]BPTC[/url] compression with unsigned normalized "
+"RGBA components.\n"
+"[b]Note:[/b] When creating an [ImageTexture], an sRGB to linear color space "
+"conversion is performed."
+msgstr ""
+
+#: doc/classes/Image.xml:506
+msgid ""
+"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
+"BPTC_Texture_Compression]BPTC[/url] compression with signed floating-point "
+"RGB components."
+msgstr ""
+
+#: doc/classes/Image.xml:509
+msgid ""
+"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
+"BPTC_Texture_Compression]BPTC[/url] compression with unsigned floating-point "
+"RGB components."
+msgstr ""
+
+#: doc/classes/Image.xml:512
+msgid ""
+"Texture format used on PowerVR-supported mobile platforms, uses 2-bit color "
+"depth with no alpha. More information can be found [url=https://en.wikipedia."
+"org/wiki/PVRTC]here[/url].\n"
+"[b]Note:[/b] When creating an [ImageTexture], an sRGB to linear color space "
+"conversion is performed."
+msgstr ""
+
+#: doc/classes/Image.xml:516
+msgid ""
+"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with an "
+"alpha component."
+msgstr ""
+
+#: doc/classes/Image.xml:519
+msgid ""
+"Similar to [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with 4-"
+"bit color depth and no alpha."
+msgstr ""
+
+#: doc/classes/Image.xml:522
+msgid ""
+"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC4[/url], but with an "
+"alpha component."
+msgstr ""
+
+#: doc/classes/Image.xml:525
+msgid ""
+"[url=https://en.wikipedia.org/wiki/"
+"Ericsson_Texture_Compression#ETC1]Ericsson Texture Compression format 1[/"
+"url], also referred to as \"ETC1\", and is part of the OpenGL ES graphics "
+"standard. This format cannot store an alpha channel."
+msgstr ""
+
+#: doc/classes/Image.xml:528
+msgid ""
+"[url=https://en.wikipedia.org/wiki/"
+"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
+"format 2[/url] ([code]R11_EAC[/code] variant), which provides one channel of "
+"unsigned data."
+msgstr ""
+
+#: doc/classes/Image.xml:531
+msgid ""
+"[url=https://en.wikipedia.org/wiki/"
+"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
+"format 2[/url] ([code]SIGNED_R11_EAC[/code] variant), which provides one "
+"channel of signed data."
+msgstr ""
+
+#: doc/classes/Image.xml:534
+msgid ""
+"[url=https://en.wikipedia.org/wiki/"
+"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
+"format 2[/url] ([code]RG11_EAC[/code] variant), which provides two channels "
+"of unsigned data."
+msgstr ""
+
+#: doc/classes/Image.xml:537
+msgid ""
+"[url=https://en.wikipedia.org/wiki/"
+"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
+"format 2[/url] ([code]SIGNED_RG11_EAC[/code] variant), which provides two "
+"channels of signed data."
+msgstr ""
+
+#: doc/classes/Image.xml:540
+msgid ""
+"[url=https://en.wikipedia.org/wiki/"
+"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
+"format 2[/url] ([code]RGB8[/code] variant), which is a follow-up of ETC1 and "
+"compresses RGB888 data.\n"
+"[b]Note:[/b] When creating an [ImageTexture], an sRGB to linear color space "
+"conversion is performed."
+msgstr ""
+
+#: doc/classes/Image.xml:544
+msgid ""
+"[url=https://en.wikipedia.org/wiki/"
+"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
+"format 2[/url] ([code]RGBA8[/code]variant), which compresses RGBA8888 data "
+"with full alpha support.\n"
+"[b]Note:[/b] When creating an [ImageTexture], an sRGB to linear color space "
+"conversion is performed."
+msgstr ""
+
+#: doc/classes/Image.xml:548
+msgid ""
+"[url=https://en.wikipedia.org/wiki/"
+"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
+"format 2[/url] ([code]RGB8_PUNCHTHROUGH_ALPHA1[/code] variant), which "
+"compresses RGBA data to make alpha either fully transparent or fully "
+"opaque.\n"
+"[b]Note:[/b] When creating an [ImageTexture], an sRGB to linear color space "
+"conversion is performed."
+msgstr ""
+
+#: doc/classes/Image.xml:552
+msgid "Represents the size of the [enum Format] enum."
+msgstr ""
+
+#: doc/classes/Image.xml:555
+msgid ""
+"Performs nearest-neighbor interpolation. If the image is resized, it will be "
+"pixelated."
+msgstr ""
+
+#: doc/classes/Image.xml:558
+msgid ""
+"Performs bilinear interpolation. If the image is resized, it will be blurry. "
+"This mode is faster than [constant INTERPOLATE_CUBIC], but it results in "
+"lower quality."
+msgstr ""
+
+#: doc/classes/Image.xml:561
+msgid ""
+"Performs cubic interpolation. If the image is resized, it will be blurry. "
+"This mode often gives better results compared to [constant "
+"INTERPOLATE_BILINEAR], at the cost of being slower."
+msgstr ""
+
+#: doc/classes/Image.xml:564
+msgid ""
+"Performs bilinear separately on the two most-suited mipmap levels, then "
+"linearly interpolates between them.\n"
+"It's slower than [constant INTERPOLATE_BILINEAR], but produces higher-"
+"quality results with far fewer aliasing artifacts.\n"
+"If the image does not have mipmaps, they will be generated and used "
+"internally, but no mipmaps will be generated on the resulting image.\n"
+"[b]Note:[/b] If you intend to scale multiple copies of the original image, "
+"it's better to call [method generate_mipmaps]] on it in advance, to avoid "
+"wasting processing power in generating them again and again.\n"
+"On the other hand, if the image already has mipmaps, they will be used, and "
+"a new set will be generated for the resulting image."
+msgstr ""
+
+#: doc/classes/Image.xml:571
+msgid ""
+"Performs Lanczos interpolation. This is the slowest image resizing mode, but "
+"it typically gives the best results, especially when downscalng images."
+msgstr ""
+
+#: doc/classes/Image.xml:574
+msgid "Image does not have alpha."
+msgstr ""
+
+#: doc/classes/Image.xml:577
+msgid "Image stores alpha in a single bit."
+msgstr ""
+
+#: doc/classes/Image.xml:580
+msgid "Image uses alpha."
+msgstr ""
+
+#: doc/classes/Image.xml:583
+msgid "Use S3TC compression."
+msgstr ""
+
+#: doc/classes/Image.xml:586
+msgid "Use PVRTC2 compression."
+msgstr ""
+
+#: doc/classes/Image.xml:589
+msgid "Use PVRTC4 compression."
+msgstr ""
+
+#: doc/classes/Image.xml:592
+msgid "Use ETC compression."
+msgstr ""
+
+#: doc/classes/Image.xml:595
+msgid "Use ETC2 compression."
+msgstr ""
+
+#: doc/classes/Image.xml:598
+msgid ""
+"Source texture (before compression) is a regular texture. Default for all "
+"textures."
+msgstr ""
+
+#: doc/classes/Image.xml:601
+msgid "Source texture (before compression) is in sRGB space."
+msgstr ""
+
+#: doc/classes/Image.xml:604
+msgid ""
+"Source texture (before compression) is a normal texture (e.g. it can be "
+"compressed into two channels)."
+msgstr ""
+
+#: doc/classes/ImageTexture.xml:4
+msgid "A [Texture] based on an [Image]."
+msgstr ""
+
+#: doc/classes/ImageTexture.xml:7
+msgid ""
+"A [Texture] based on an [Image]. For an image to be displayed, an "
+"[ImageTexture] has to be created from it using the [method "
+"create_from_image] method:\n"
+"[codeblock]\n"
+"var texture = ImageTexture.new()\n"
+"var image = Image.new()\n"
+"image.load(\"res://icon.png\")\n"
+"texture.create_from_image(image)\n"
+"$Sprite.texture = texture\n"
+"[/codeblock]\n"
+"This way, textures can be created at run-time by loading images both from "
+"within the editor and externally.\n"
+"[b]Warning:[/b] Prefer to load imported textures with [method @GDScript."
+"load] over loading them from within the filesystem dynamically with [method "
+"Image.load], as it may not work in exported projects:\n"
+"[codeblock]\n"
+"var texture = load(\"res://icon.png\")\n"
+"$Sprite.texture = texture\n"
+"[/codeblock]\n"
+"This is because images have to be imported as [StreamTexture] first to be "
+"loaded with [method @GDScript.load]. If you'd still like to load an image "
+"file just like any other [Resource], import it as an [Image] resource "
+"instead, and then load it normally using the [method @GDScript.load] "
+"method.\n"
+"But do note that the image data can still be retrieved from an imported "
+"texture as well using the [method Texture.get_data] method, which returns a "
+"copy of the data:\n"
+"[codeblock]\n"
+"var texture = load(\"res://icon.png\")\n"
+"var image : Image = texture.get_data()\n"
+"[/codeblock]\n"
+"An [ImageTexture] is not meant to be operated from within the editor "
+"interface directly, and is mostly useful for rendering images on screen "
+"dynamically via code. If you need to generate images procedurally from "
+"within the editor, consider saving and importing images as custom texture "
+"resources implementing a new [EditorImportPlugin].\n"
+"[b]Note:[/b] The maximum texture size is 16384×16384 pixels due to graphics "
+"hardware limitations."
+msgstr ""
+
+#: doc/classes/ImageTexture.xml:41
+msgid ""
+"Create a new [ImageTexture] with [code]width[/code] and [code]height[/"
+"code].\n"
+"[code]format[/code] is a value from [enum Image.Format], [code]flags[/code] "
+"is any combination of [enum Texture.Flags]."
+msgstr ""
+
+#: doc/classes/ImageTexture.xml:50
+msgid ""
+"Initializes the texture by allocating and setting the data from an [Image] "
+"with [code]flags[/code] from [enum Texture.Flags]. An sRGB to linear color "
+"space conversion can take place, according to [enum Image.Format]."
+msgstr ""
+
+#: doc/classes/ImageTexture.xml:56
+msgid "Returns the format of the texture, one of [enum Image.Format]."
+msgstr ""
+
+#: doc/classes/ImageTexture.xml:63
+msgid ""
+"Loads an image from a file path and creates a texture from it.\n"
+"[b]Note:[/b] This method is deprecated and will be removed in Godot 4.0, use "
+"[method Image.load] and [method create_from_image] instead."
+msgstr ""
+
+#: doc/classes/ImageTexture.xml:71
+msgid ""
+"Replaces the texture's data with a new [Image].\n"
+"[b]Note:[/b] The texture has to be initialized first with the [method "
+"create_from_image] method before it can be updated. The new image "
+"dimensions, format, and mipmaps configuration should match the existing "
+"texture's image configuration, otherwise it has to be re-created with the "
+"[method create_from_image] method.\n"
+"Use this method over [method create_from_image] if you need to update the "
+"texture frequently, which is faster than allocating additional memory for a "
+"new texture each time."
+msgstr ""
+
+#: doc/classes/ImageTexture.xml:80 doc/classes/VisualServer.xml:2837
+msgid "Resizes the texture to the specified dimensions."
+msgstr ""
+
+#: doc/classes/ImageTexture.xml:87
+msgid "The storage quality for [constant STORAGE_COMPRESS_LOSSY]."
+msgstr ""
+
+#: doc/classes/ImageTexture.xml:90
+msgid "The storage type (raw, lossy, or compressed)."
+msgstr ""
+
+#: doc/classes/ImageTexture.xml:95
+msgid "[Image] data is stored raw and unaltered."
+msgstr ""
+
+#: doc/classes/ImageTexture.xml:98
+msgid ""
+"[Image] data is compressed with a lossy algorithm. You can set the storage "
+"quality with [member lossy_quality]."
+msgstr ""
+
+#: doc/classes/ImageTexture.xml:101
+msgid "[Image] data is compressed with a lossless algorithm."
+msgstr ""
+
+#: doc/classes/ImmediateGeometry.xml:4
+msgid "Draws simple geometry from code."
+msgstr ""
+
+#: doc/classes/ImmediateGeometry.xml:7
+msgid ""
+"Draws simple geometry from code. Uses a drawing mode similar to OpenGL 1.x.\n"
+"See also [ArrayMesh], [MeshDataTool] and [SurfaceTool] for procedural "
+"geometry generation.\n"
+"[b]Note:[/b] ImmediateGeometry3D is best suited to small amounts of mesh "
+"data that change every frame. It will be slow when handling large amounts of "
+"mesh data. If mesh data doesn't change often, use [ArrayMesh], "
+"[MeshDataTool] or [SurfaceTool] instead.\n"
+"[b]Note:[/b] Godot uses clockwise [url=https://learnopengl.com/Advanced-"
+"OpenGL/Face-culling]winding order[/url] for front faces of triangle "
+"primitive modes.\n"
+"[b]Note:[/b] In case of missing points when handling large amounts of mesh "
+"data, try increasing its buffer size limit under [member ProjectSettings."
+"rendering/limits/buffers/immediate_buffer_size_kb]."
+msgstr ""
+
+#: doc/classes/ImmediateGeometry.xml:23
+msgid ""
+"Simple helper to draw an UV sphere with given latitude, longitude and radius."
+msgstr ""
+
+#: doc/classes/ImmediateGeometry.xml:30
+msgid ""
+"Adds a vertex in local coordinate space with the currently set color/uv/etc."
+msgstr ""
+
+#: doc/classes/ImmediateGeometry.xml:38
+msgid ""
+"Begin drawing (and optionally pass a texture override). When done call "
+"[method end]. For more information on how this works, search for "
+"[code]glBegin()[/code] and [code]glEnd()[/code] references.\n"
+"For the type of primitive, see the [enum Mesh.PrimitiveType] enum."
+msgstr ""
+
+#: doc/classes/ImmediateGeometry.xml:45
+msgid "Clears everything that was drawn using begin/end."
+msgstr ""
+
+#: doc/classes/ImmediateGeometry.xml:51
+msgid "Ends a drawing context and displays the results."
+msgstr ""
+
+#: doc/classes/ImmediateGeometry.xml:58
+msgid "The current drawing color."
+msgstr ""
+
+#: doc/classes/ImmediateGeometry.xml:65
+msgid "The next vertex's normal."
+msgstr ""
+
+#: doc/classes/ImmediateGeometry.xml:72
+msgid "The next vertex's tangent (and binormal facing)."
+msgstr ""
+
+#: doc/classes/ImmediateGeometry.xml:79
+msgid "The next vertex's UV."
+msgstr ""
+
+#: doc/classes/ImmediateGeometry.xml:86
+msgid "The next vertex's second layer UV."
+msgstr ""
+
+#: doc/classes/Input.xml:4
+msgid "A singleton that deals with inputs."
+msgstr ""
+
+#: doc/classes/Input.xml:7
+msgid ""
+"A singleton that deals with inputs. This includes key presses, mouse buttons "
+"and movement, joypads, and input actions. Actions and their events can be "
+"set in the [b]Input Map[/b] tab in the [b]Project > Project Settings[/b], or "
+"with the [InputMap] class."
+msgstr ""
+
+#: doc/classes/Input.xml:10
+msgid "https://docs.godotengine.org/en/3.4/tutorials/inputs/index.html"
+msgstr ""
+
+#: doc/classes/Input.xml:20
+msgid ""
+"This will simulate pressing the specified action.\n"
+"The strength can be used for non-boolean actions, it's ranged between 0 and "
+"1 representing the intensity of the given action.\n"
+"[b]Note:[/b] This method will not cause any [method Node._input] calls. It "
+"is intended to be used with [method is_action_pressed] and [method "
+"is_action_just_pressed]. If you want to simulate [code]_input[/code], use "
+"[method parse_input_event] instead."
+msgstr ""
+
+#: doc/classes/Input.xml:29
+msgid "If the specified action is already pressed, this will release it."
+msgstr ""
+
+#: doc/classes/Input.xml:37
+msgid ""
+"Adds a new mapping entry (in SDL2 format) to the mapping database. "
+"Optionally update already connected devices."
+msgstr ""
+
+#: doc/classes/Input.xml:43
+msgid ""
+"Sends all input events which are in the current buffer to the game loop. "
+"These events may have been buffered as a result of accumulated input "
+"([method set_use_accumulated_input]) or agile input flushing ([member "
+"ProjectSettings.input_devices/buffering/agile_event_flushing]).\n"
+"The engine will already do this itself at key execution points (at least "
+"once per frame). However, this can be useful in advanced cases where you "
+"want precise control over the timing of event handling."
+msgstr ""
+
+#: doc/classes/Input.xml:50
+msgid ""
+"Returns the acceleration of the device's accelerometer sensor, if the device "
+"has one. Otherwise, the method returns [constant Vector3.ZERO].\n"
+"Note this method returns an empty [Vector3] when running from the editor "
+"even when your device has an accelerometer. You must export your project to "
+"a supported device to read values from the accelerometer.\n"
+"[b]Note:[/b] This method only works on iOS, Android, and UWP. On other "
+"platforms, it always returns [constant Vector3.ZERO]. On Android the unit of "
+"measurement for each axis is m/s² while on iOS and UWP it's a multiple of "
+"the Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
+msgstr ""
+
+#: doc/classes/Input.xml:60
+msgid ""
+"Returns a value between 0 and 1 representing the raw intensity of the given "
+"action, ignoring the action's deadzone. In most cases, you should use "
+"[method get_action_strength] instead.\n"
+"If [code]exact[/code] is [code]false[/code], it ignores the input modifiers "
+"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
+"for [InputEventJoypadMotion] events."
+msgstr ""
+
+#: doc/classes/Input.xml:69
+msgid ""
+"Returns a value between 0 and 1 representing the intensity of the given "
+"action. In a joypad, for example, the further away the axis (analog sticks "
+"or L2, R2 triggers) is from the dead zone, the closer the value will be to "
+"1. If the action is mapped to a control that has no axis as the keyboard, "
+"the value returned will be 0 or 1.\n"
+"If [code]exact[/code] is [code]false[/code], it ignores the input modifiers "
+"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
+"for [InputEventJoypadMotion] events."
+msgstr ""
+
+#: doc/classes/Input.xml:78
+msgid ""
+"Get axis input by specifying two actions, one negative and one positive.\n"
+"This is a shorthand for writing [code]Input."
+"get_action_strength(\"positive_action\") - Input."
+"get_action_strength(\"negative_action\")[/code]."
+msgstr ""
+
+#: doc/classes/Input.xml:85
+msgid ""
+"Returns an [Array] containing the device IDs of all currently connected "
+"joypads."
+msgstr ""
+
+#: doc/classes/Input.xml:91
+msgid "Returns the currently assigned cursor shape (see [enum CursorShape])."
+msgstr ""
+
+#: doc/classes/Input.xml:97
+msgid ""
+"Returns the gravity of the device's accelerometer sensor, if the device has "
+"one. Otherwise, the method returns [constant Vector3.ZERO].\n"
+"[b]Note:[/b] This method only works on Android and iOS. On other platforms, "
+"it always returns [constant Vector3.ZERO]. On Android the unit of "
+"measurement for each axis is m/s² while on iOS it's a multiple of the "
+"Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
+msgstr ""
+
+#: doc/classes/Input.xml:104
+msgid ""
+"Returns the rotation rate in rad/s around a device's X, Y, and Z axes of the "
+"gyroscope sensor, if the device has one. Otherwise, the method returns "
+"[constant Vector3.ZERO].\n"
+"[b]Note:[/b] This method only works on Android and iOS. On other platforms, "
+"it always returns [constant Vector3.ZERO]."
+msgstr ""
+
+#: doc/classes/Input.xml:113
+msgid ""
+"Returns the current value of the joypad axis at given index (see [enum "
+"JoystickList])."
+msgstr ""
+
+#: doc/classes/Input.xml:120
+msgid "Returns the index of the provided axis name."
+msgstr ""
+
+#: doc/classes/Input.xml:127
+msgid ""
+"Receives a [enum JoystickList] axis and returns its equivalent name as a "
+"string."
+msgstr ""
+
+#: doc/classes/Input.xml:134
+msgid "Returns the index of the provided button name."
+msgstr ""
+
+#: doc/classes/Input.xml:141
+msgid ""
+"Receives a gamepad button from [enum JoystickList] and returns its "
+"equivalent name as a string."
+msgstr ""
+
+#: doc/classes/Input.xml:148
+msgid ""
+"Returns a SDL2-compatible device GUID on platforms that use gamepad "
+"remapping. Returns [code]\"Default Gamepad\"[/code] otherwise."
+msgstr ""
+
+#: doc/classes/Input.xml:155
+msgid "Returns the name of the joypad at the specified device index."
+msgstr ""
+
+#: doc/classes/Input.xml:162
+msgid "Returns the duration of the current vibration effect in seconds."
+msgstr ""
+
+#: doc/classes/Input.xml:169
+msgid ""
+"Returns the strength of the joypad vibration: x is the strength of the weak "
+"motor, and y is the strength of the strong motor."
+msgstr ""
+
+#: doc/classes/Input.xml:175
+msgid ""
+"Returns the mouse speed for the last time the cursor was moved, and this "
+"until the next frame where the mouse moves. This means that even if the "
+"mouse is not moving, this function will still return the value of the last "
+"motion."
+msgstr ""
+
+#: doc/classes/Input.xml:181
+msgid ""
+"Returns the magnetic field strength in micro-Tesla for all axes of the "
+"device's magnetometer sensor, if the device has one. Otherwise, the method "
+"returns [constant Vector3.ZERO].\n"
+"[b]Note:[/b] This method only works on Android, iOS and UWP. On other "
+"platforms, it always returns [constant Vector3.ZERO]."
+msgstr ""
+
+#: doc/classes/Input.xml:188
+msgid ""
+"Returns mouse buttons as a bitmask. If multiple mouse buttons are pressed at "
+"the same time, the bits are added together."
+msgstr ""
+
+#: doc/classes/Input.xml:194
+msgid "Returns the mouse mode. See the constants for more information."
+msgstr ""
+
+#: doc/classes/Input.xml:205
+msgid ""
+"Gets an input vector by specifying four actions for the positive and "
+"negative X and Y axes.\n"
+"This method is useful when getting vector input, such as from a joystick, "
+"directional pad, arrows, or WASD. The vector has its length limited to 1 and "
+"has a circular deadzone, which is useful for using vector input as "
+"movement.\n"
+"By default, the deadzone is automatically calculated from the average of the "
+"action deadzones. However, you can override the deadzone to be whatever you "
+"want (on the range of 0 to 1)."
+msgstr ""
+
+#: doc/classes/Input.xml:215
+msgid ""
+"Returns [code]true[/code] when the user starts pressing the action event, "
+"meaning it's [code]true[/code] only on the frame that the user pressed down "
+"the button.\n"
+"This is useful for code that needs to run only once when an action is "
+"pressed, instead of every frame while it's pressed.\n"
+"If [code]exact[/code] is [code]false[/code], it ignores the input modifiers "
+"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
+"for [InputEventJoypadMotion] events."
+msgstr ""
+
+#: doc/classes/Input.xml:225
+msgid ""
+"Returns [code]true[/code] when the user stops pressing the action event, "
+"meaning it's [code]true[/code] only on the frame that the user released the "
+"button.\n"
+"If [code]exact[/code] is [code]false[/code], it ignores the input modifiers "
+"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
+"for [InputEventJoypadMotion] events."
+msgstr ""
+
+#: doc/classes/Input.xml:234
+msgid ""
+"Returns [code]true[/code] if you are pressing the action event. Note that if "
+"an action has multiple buttons assigned and more than one of them is "
+"pressed, releasing one button will release the action, even if some other "
+"button assigned to this action is still pressed.\n"
+"If [code]exact[/code] is [code]false[/code], it ignores the input modifiers "
+"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
+"for [InputEventJoypadMotion] events."
+msgstr ""
+
+#: doc/classes/Input.xml:243
+msgid ""
+"Returns [code]true[/code] if you are pressing the joypad button (see [enum "
+"JoystickList])."
+msgstr ""
+
+#: doc/classes/Input.xml:250
+msgid ""
+"Returns [code]true[/code] if the system knows the specified device. This "
+"means that it sets all button and axis indices exactly as defined in [enum "
+"JoystickList]. Unknown joypads are not expected to match these constants, "
+"but you can still retrieve events from them."
+msgstr ""
+
+#: doc/classes/Input.xml:257
+msgid ""
+"Returns [code]true[/code] if you are pressing the key. You can pass a [enum "
+"KeyList] constant."
+msgstr ""
+
+#: doc/classes/Input.xml:264
+msgid ""
+"Returns [code]true[/code] if you are pressing the mouse button specified "
+"with [enum ButtonList]."
+msgstr ""
+
+#: doc/classes/Input.xml:274
+msgid ""
+"Notifies the [Input] singleton that a connection has changed, to update the "
+"state for the [code]device[/code] index.\n"
+"This is used internally and should not have to be called from user scripts. "
+"See [signal joy_connection_changed] for the signal emitted when this is "
+"triggered internally."
+msgstr ""
+
+#: doc/classes/Input.xml:282
+msgid ""
+"Feeds an [InputEvent] to the game. Can be used to artificially trigger input "
+"events from code. Also generates [method Node._input] calls.\n"
+"Example:\n"
+"[codeblock]\n"
+"var a = InputEventAction.new()\n"
+"a.action = \"ui_cancel\"\n"
+"a.pressed = true\n"
+"Input.parse_input_event(a)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Input.xml:296
+msgid ""
+"Removes all mappings from the internal database that match the given GUID."
+msgstr ""
+
+#: doc/classes/Input.xml:303
+msgid ""
+"Sets the acceleration value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:313
+msgid ""
+"Sets a custom mouse cursor image, which is only visible inside the game "
+"window. The hotspot can also be specified. Passing [code]null[/code] to the "
+"image parameter resets to the system cursor. See [enum CursorShape] for the "
+"list of shapes.\n"
+"[code]image[/code]'s size must be lower than 256×256.\n"
+"[code]hotspot[/code] must be within [code]image[/code]'s size.\n"
+"[b]Note:[/b] [AnimatedTexture]s aren't supported as custom mouse cursors. If "
+"using an [AnimatedTexture], only the first frame will be displayed.\n"
+"[b]Note:[/b] Only images imported with the [b]Lossless[/b], [b]Lossy[/b] or "
+"[b]Uncompressed[/b] compression modes are supported. The [b]Video RAM[/b] "
+"compression mode can't be used for custom cursors."
+msgstr ""
+
+#: doc/classes/Input.xml:324
+msgid ""
+"Sets the default cursor shape to be used in the viewport instead of "
+"[constant CURSOR_ARROW].\n"
+"[b]Note:[/b] If you want to change the default cursor shape for [Control]'s "
+"nodes, use [member Control.mouse_default_cursor_shape] instead.\n"
+"[b]Note:[/b] This method generates an [InputEventMouseMotion] to update "
+"cursor immediately."
+msgstr ""
+
+#: doc/classes/Input.xml:333
+msgid ""
+"Sets the gravity value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:341
+msgid ""
+"Sets the value of the rotation rate of the gyroscope sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:349
+msgid ""
+"Sets the value of the magnetic field of the magnetometer sensor. Can be used "
+"for debugging on devices without a hardware sensor, for example in an editor "
+"on a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:357
+msgid "Sets the mouse mode. See the constants for more information."
+msgstr ""
+
+#: doc/classes/Input.xml:364
+msgid ""
+"Enables or disables the accumulation of similar input events sent by the "
+"operating system. When input accumulation is enabled, all input events "
+"generated during a frame will be merged and emitted when the frame is done "
+"rendering. Therefore, this limits the number of input method calls per "
+"second to the rendering FPS.\n"
+"Input accumulation is enabled by default. It can be disabled to get slightly "
+"more precise/reactive input at the cost of increased CPU usage. In "
+"applications where drawing freehand lines is required, input accumulation "
+"should generally be disabled while the user is drawing the line to get "
+"results that closely follow the actual input."
+msgstr ""
+
+#: doc/classes/Input.xml:375
+msgid ""
+"Starts to vibrate the joypad. Joypads usually come with two rumble motors, a "
+"strong and a weak one. [code]weak_magnitude[/code] is the strength of the "
+"weak motor (between 0 and 1) and [code]strong_magnitude[/code] is the "
+"strength of the strong motor (between 0 and 1). [code]duration[/code] is the "
+"duration of the effect in seconds (a duration of 0 will try to play the "
+"vibration indefinitely).\n"
+"[b]Note:[/b] Not every hardware is compatible with long effect durations; it "
+"is recommended to restart an effect if it has to be played for more than a "
+"few seconds."
+msgstr ""
+
+#: doc/classes/Input.xml:383
+msgid "Stops the vibration of the joypad."
+msgstr ""
+
+#: doc/classes/Input.xml:390
+msgid ""
+"Vibrate Android and iOS devices.\n"
+"[b]Note:[/b] It needs [code]VIBRATE[/code] permission for Android at export "
+"settings. iOS does not support duration."
+msgstr ""
+
+#: doc/classes/Input.xml:398
+msgid "Sets the mouse position to the specified vector."
+msgstr ""
+
+#: doc/classes/Input.xml:407
+msgid "Emitted when a joypad device has been connected or disconnected."
+msgstr ""
+
+#: doc/classes/Input.xml:413
+msgid "Makes the mouse cursor visible if it is hidden."
+msgstr ""
+
+#: doc/classes/Input.xml:416
+msgid "Makes the mouse cursor hidden if it is visible."
+msgstr ""
+
+#: doc/classes/Input.xml:419
+msgid ""
+"Captures the mouse. The mouse will be hidden and its position locked at the "
+"center of the screen.\n"
+"[b]Note:[/b] If you want to process the mouse's movement in this mode, you "
+"need to use [member InputEventMouseMotion.relative]."
+msgstr ""
+
+#: doc/classes/Input.xml:423
+msgid "Makes the mouse cursor visible but confines it to the game window."
+msgstr ""
+
+#: doc/classes/Input.xml:426
+msgid "Arrow cursor. Standard, default pointing cursor."
+msgstr ""
+
+#: doc/classes/Input.xml:429
+msgid ""
+"I-beam cursor. Usually used to show where the text cursor will appear when "
+"the mouse is clicked."
+msgstr ""
+
+#: doc/classes/Input.xml:432
+msgid ""
+"Pointing hand cursor. Usually used to indicate the pointer is over a link or "
+"other interactable item."
+msgstr ""
+
+#: doc/classes/Input.xml:435
+msgid ""
+"Cross cursor. Typically appears over regions in which a drawing operation "
+"can be performed or for selections."
+msgstr ""
+
+#: doc/classes/Input.xml:438
+msgid ""
+"Wait cursor. Indicates that the application is busy performing an operation. "
+"This cursor shape denotes that the application is still usable during the "
+"operation."
+msgstr ""
+
+#: doc/classes/Input.xml:441
+msgid ""
+"Busy cursor. Indicates that the application is busy performing an operation. "
+"This cursor shape denotes that the application isn't usable during the "
+"operation (e.g. something is blocking its main thread)."
+msgstr ""
+
+#: doc/classes/Input.xml:444
+msgid "Drag cursor. Usually displayed when dragging something."
+msgstr ""
+
+#: doc/classes/Input.xml:447
+msgid ""
+"Can drop cursor. Usually displayed when dragging something to indicate that "
+"it can be dropped at the current position."
+msgstr ""
+
+#: doc/classes/Input.xml:450
+msgid ""
+"Forbidden cursor. Indicates that the current action is forbidden (for "
+"example, when dragging something) or that the control at a position is "
+"disabled."
+msgstr ""
+
+#: doc/classes/Input.xml:453
+msgid ""
+"Vertical resize mouse cursor. A double-headed vertical arrow. It tells the "
+"user they can resize the window or the panel vertically."
+msgstr ""
+
+#: doc/classes/Input.xml:456
+msgid ""
+"Horizontal resize mouse cursor. A double-headed horizontal arrow. It tells "
+"the user they can resize the window or the panel horizontally."
+msgstr ""
+
+#: doc/classes/Input.xml:459
+msgid ""
+"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
+"from the bottom left to the top right. It tells the user they can resize the "
+"window or the panel both horizontally and vertically."
+msgstr ""
+
+#: doc/classes/Input.xml:462
+msgid ""
+"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
+"from the top left to the bottom right, the opposite of [constant "
+"CURSOR_BDIAGSIZE]. It tells the user they can resize the window or the panel "
+"both horizontally and vertically."
+msgstr ""
+
+#: doc/classes/Input.xml:465
+msgid "Move cursor. Indicates that something can be moved."
+msgstr ""
+
+#: doc/classes/Input.xml:468
+msgid ""
+"Vertical split mouse cursor. On Windows, it's the same as [constant "
+"CURSOR_VSIZE]."
+msgstr ""
+
+#: doc/classes/Input.xml:471
+msgid ""
+"Horizontal split mouse cursor. On Windows, it's the same as [constant "
+"CURSOR_HSIZE]."
+msgstr ""
+
+#: doc/classes/Input.xml:474
+msgid "Help cursor. Usually a question mark."
+msgstr ""
+
+#: doc/classes/InputEvent.xml:4
+msgid "Generic input event."
+msgstr ""
+
+#: doc/classes/InputEvent.xml:7
+msgid "Base class of all sort of input event. See [method Node._input]."
+msgstr ""
+
+#: doc/classes/InputEvent.xml:10 doc/classes/InputEventJoypadButton.xml:10
+#: doc/classes/InputEventJoypadMotion.xml:10 doc/classes/InputEventKey.xml:10
+#: doc/classes/InputEventMouse.xml:10 doc/classes/InputEventScreenDrag.xml:10
+#: doc/classes/InputEventScreenTouch.xml:11
+#: doc/classes/InputEventWithModifiers.xml:10
+msgid "https://docs.godotengine.org/en/3.4/tutorials/inputs/inputevent.html"
+msgstr ""
+
+#: doc/classes/InputEvent.xml:20
+msgid ""
+"Returns [code]true[/code] if the given input event and this input event can "
+"be added together (only for events of type [InputEventMouseMotion]).\n"
+"The given input event's position, global position and speed will be copied. "
+"The resulting [code]relative[/code] is a sum of both events. Both events' "
+"modifiers have to be identical."
+msgstr ""
+
+#: doc/classes/InputEvent.xml:27
+msgid "Returns a [String] representation of the event."
+msgstr ""
+
+#: doc/classes/InputEvent.xml:35
+msgid ""
+"Returns a value between 0.0 and 1.0 depending on the given actions' state. "
+"Useful for getting the value of events of type [InputEventJoypadMotion].\n"
+"If [code]exact_match[/code] is [code]false[/code], it ignores the input "
+"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
+"direction for [InputEventJoypadMotion] events."
+msgstr ""
+
+#: doc/classes/InputEvent.xml:44
+msgid ""
+"Returns [code]true[/code] if this input event matches a pre-defined action "
+"of any type.\n"
+"If [code]exact_match[/code] is [code]false[/code], it ignores the input "
+"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
+"direction for [InputEventJoypadMotion] events."
+msgstr ""
+
+#: doc/classes/InputEvent.xml:54
+msgid ""
+"Returns [code]true[/code] if the given action is being pressed (and is not "
+"an echo event for [InputEventKey] events, unless [code]allow_echo[/code] is "
+"[code]true[/code]). Not relevant for events of type [InputEventMouseMotion] "
+"or [InputEventScreenDrag].\n"
+"If [code]exact_match[/code] is [code]false[/code], it ignores the input "
+"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
+"direction for [InputEventJoypadMotion] events."
+msgstr ""
+
+#: doc/classes/InputEvent.xml:63
+msgid ""
+"Returns [code]true[/code] if the given action is released (i.e. not "
+"pressed). Not relevant for events of type [InputEventMouseMotion] or "
+"[InputEventScreenDrag].\n"
+"If [code]exact_match[/code] is [code]false[/code], it ignores the input "
+"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
+"direction for [InputEventJoypadMotion] events."
+msgstr ""
+
+#: doc/classes/InputEvent.xml:70
+msgid ""
+"Returns [code]true[/code] if this input event's type is one that can be "
+"assigned to an input action."
+msgstr ""
+
+#: doc/classes/InputEvent.xml:76
+msgid ""
+"Returns [code]true[/code] if this input event is an echo event (only for "
+"events of type [InputEventKey])."
+msgstr ""
+
+#: doc/classes/InputEvent.xml:82
+msgid ""
+"Returns [code]true[/code] if this input event is pressed. Not relevant for "
+"events of type [InputEventMouseMotion] or [InputEventScreenDrag]."
+msgstr ""
+
+#: doc/classes/InputEvent.xml:90
+msgid ""
+"Returns [code]true[/code] if the specified [code]event[/code] matches this "
+"event. Only valid for action events i.e key ([InputEventKey]), button "
+"([InputEventMouseButton] or [InputEventJoypadButton]), axis "
+"[InputEventJoypadMotion] or action ([InputEventAction]) events.\n"
+"If [code]exact_match[/code] is [code]false[/code], it ignores the input "
+"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
+"direction for [InputEventJoypadMotion] events."
+msgstr ""
+
+#: doc/classes/InputEvent.xml:99
+msgid ""
+"Returns a copy of the given input event which has been offset by "
+"[code]local_ofs[/code] and transformed by [code]xform[/code]. Relevant for "
+"events of type [InputEventMouseButton], [InputEventMouseMotion], "
+"[InputEventScreenTouch], [InputEventScreenDrag], [InputEventMagnifyGesture] "
+"and [InputEventPanGesture]."
+msgstr ""
+
+#: doc/classes/InputEvent.xml:105
+msgid ""
+"The event's device ID.\n"
+"[b]Note:[/b] This device ID will always be [code]-1[/code] for emulated "
+"mouse input from a touchscreen. This can be used to distinguish emulated "
+"mouse input from physical mouse input."
+msgstr ""
+
+#: doc/classes/InputEventAction.xml:4
+msgid "Input event type for actions."
+msgstr ""
+
+#: doc/classes/InputEventAction.xml:7
+msgid ""
+"Contains a generic action which can be targeted from several types of "
+"inputs. Actions can be created from the [b]Input Map[/b] tab in the "
+"[b]Project > Project Settings[/b] menu. See [method Node._input]."
+msgstr ""
+
+#: doc/classes/InputEventAction.xml:10
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/inputs/inputevent.html#actions"
+msgstr ""
+
+#: doc/classes/InputEventAction.xml:18
+msgid "The action's name. Actions are accessed via this [String]."
+msgstr ""
+
+#: doc/classes/InputEventAction.xml:21
+msgid ""
+"If [code]true[/code], the action's state is pressed. If [code]false[/code], "
+"the action's state is released."
+msgstr ""
+
+#: doc/classes/InputEventAction.xml:24
+msgid ""
+"The action's strength between 0 and 1. This value is considered as equal to "
+"0 if pressed is [code]false[/code]. The event strength allows faking analog "
+"joypad motion events, by specifying how strongly the joypad axis is bent or "
+"pressed."
+msgstr ""
+
+#: doc/classes/InputEventGesture.xml:4
+msgid "Base class for touch control gestures."
+msgstr ""
+
+#: doc/classes/InputEventGesture.xml:14
+msgid ""
+"The local gesture position relative to the [Viewport]. If used in [method "
+"Control._gui_input], the position is relative to the current [Control] that "
+"received this gesture."
+msgstr ""
+
+#: doc/classes/InputEventJoypadButton.xml:4
+msgid "Input event for gamepad buttons."
+msgstr ""
+
+#: doc/classes/InputEventJoypadButton.xml:7
+msgid ""
+"Input event type for gamepad buttons. For gamepad analog sticks and "
+"joysticks, see [InputEventJoypadMotion]."
+msgstr ""
+
+#: doc/classes/InputEventJoypadButton.xml:16
+msgid "Button identifier. One of the [enum JoystickList] button constants."
+msgstr ""
+
+#: doc/classes/InputEventJoypadButton.xml:19
+msgid ""
+"If [code]true[/code], the button's state is pressed. If [code]false[/code], "
+"the button's state is released."
+msgstr ""
+
+#: doc/classes/InputEventJoypadButton.xml:22
+msgid ""
+"Represents the pressure the user puts on the button with his finger, if the "
+"controller supports it. Ranges from [code]0[/code] to [code]1[/code]."
+msgstr ""
+
+#: doc/classes/InputEventJoypadMotion.xml:4
+msgid ""
+"Input event type for gamepad joysticks and other motions. For buttons, see "
+"[code]InputEventJoypadButton[/code]."
+msgstr ""
+
+#: doc/classes/InputEventJoypadMotion.xml:7
+msgid ""
+"Stores information about joystick motions. One [InputEventJoypadMotion] "
+"represents one axis at a time."
+msgstr ""
+
+#: doc/classes/InputEventJoypadMotion.xml:16
+msgid "Axis identifier. Use one of the [enum JoystickList] axis constants."
+msgstr ""
+
+#: doc/classes/InputEventJoypadMotion.xml:19
+msgid ""
+"Current position of the joystick on the given axis. The value ranges from "
+"[code]-1.0[/code] to [code]1.0[/code]. A value of [code]0[/code] means the "
+"axis is in its resting position."
+msgstr ""
+
+#: doc/classes/InputEventKey.xml:4
+msgid "Input event type for keyboard events."
+msgstr ""
+
+#: doc/classes/InputEventKey.xml:7
+msgid ""
+"Stores key presses on the keyboard. Supports key presses, key releases and "
+"[member echo] events."
+msgstr ""
+
+#: doc/classes/InputEventKey.xml:16
+msgid ""
+"Returns the physical scancode combined with modifier keys such as "
+"[code]Shift[/code] or [code]Alt[/code]. See also [InputEventWithModifiers].\n"
+"To get a human-readable representation of the [InputEventKey] with "
+"modifiers, use [code]OS.get_scancode_string(event."
+"get_physical_scancode_with_modifiers())[/code] where [code]event[/code] is "
+"the [InputEventKey]."
+msgstr ""
+
+#: doc/classes/InputEventKey.xml:23
+msgid ""
+"Returns the scancode combined with modifier keys such as [code]Shift[/code] "
+"or [code]Alt[/code]. See also [InputEventWithModifiers].\n"
+"To get a human-readable representation of the [InputEventKey] with "
+"modifiers, use [code]OS.get_scancode_string(event."
+"get_scancode_with_modifiers())[/code] where [code]event[/code] is the "
+"[InputEventKey]."
+msgstr ""
+
+#: doc/classes/InputEventKey.xml:30
+msgid ""
+"If [code]true[/code], the key was already pressed before this event. It "
+"means the user is holding the key down."
+msgstr ""
+
+#: doc/classes/InputEventKey.xml:33
+msgid ""
+"Key physical scancode, which corresponds to one of the [enum KeyList] "
+"constants. Represent the physical location of a key on the 101/102-key US "
+"QWERTY keyboard.\n"
+"To get a human-readable representation of the [InputEventKey], use [code]OS."
+"get_scancode_string(event.physical_scancode)[/code] where [code]event[/code] "
+"is the [InputEventKey]."
+msgstr ""
+
+#: doc/classes/InputEventKey.xml:37
+msgid ""
+"If [code]true[/code], the key's state is pressed. If [code]false[/code], the "
+"key's state is released."
+msgstr ""
+
+#: doc/classes/InputEventKey.xml:40
+msgid ""
+"The key scancode, which corresponds to one of the [enum KeyList] constants. "
+"Represent key in the current keyboard layout.\n"
+"To get a human-readable representation of the [InputEventKey], use [code]OS."
+"get_scancode_string(event.scancode)[/code] where [code]event[/code] is the "
+"[InputEventKey]."
+msgstr ""
+
+#: doc/classes/InputEventKey.xml:44
+msgid ""
+"The key Unicode identifier (when relevant). Unicode identifiers for the "
+"composite characters and complex scripts may not be available unless IME "
+"input mode is active. See [method OS.set_ime_active] for more information."
+msgstr ""
+
+#: doc/classes/InputEventMouse.xml:4
+msgid "Base input event type for mouse events."
+msgstr ""
+
+#: doc/classes/InputEventMouse.xml:7
+msgid "Stores general mouse events information."
+msgstr ""
+
+#: doc/classes/InputEventMouse.xml:16
+msgid ""
+"The mouse button mask identifier, one of or a bitwise combination of the "
+"[enum ButtonList] button masks."
+msgstr ""
+
+#: doc/classes/InputEventMouse.xml:19
+msgid ""
+"The global mouse position relative to the current [Viewport] when used in "
+"[method Control._gui_input], otherwise is at 0,0."
+msgstr ""
+
+#: doc/classes/InputEventMouse.xml:22
+msgid ""
+"The local mouse position relative to the [Viewport]. If used in [method "
+"Control._gui_input], the position is relative to the current [Control] which "
+"is under the mouse."
+msgstr ""
+
+#: doc/classes/InputEventMouseButton.xml:4
+msgid "Input event type for mouse button events."
+msgstr ""
+
+#: doc/classes/InputEventMouseButton.xml:7
+msgid "Contains mouse click information. See [method Node._input]."
+msgstr ""
+
+#: doc/classes/InputEventMouseButton.xml:10
+#: doc/classes/InputEventMouseMotion.xml:11
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/inputs/"
+"mouse_and_input_coordinates.html"
+msgstr ""
+
+#: doc/classes/InputEventMouseButton.xml:16
+msgid ""
+"The mouse button identifier, one of the [enum ButtonList] button or button "
+"wheel constants."
+msgstr ""
+
+#: doc/classes/InputEventMouseButton.xml:19
+msgid "If [code]true[/code], the mouse button's state is a double-click."
+msgstr ""
+
+#: doc/classes/InputEventMouseButton.xml:22
+msgid ""
+"The amount (or delta) of the event. When used for high-precision scroll "
+"events, this indicates the scroll amount (vertical or horizontal). This is "
+"only supported on some platforms; the reported sensitivity varies depending "
+"on the platform. May be [code]0[/code] if not supported."
+msgstr ""
+
+#: doc/classes/InputEventMouseButton.xml:25
+msgid ""
+"If [code]true[/code], the mouse button's state is pressed. If [code]false[/"
+"code], the mouse button's state is released."
+msgstr ""
+
+#: doc/classes/InputEventMouseMotion.xml:4
+msgid "Input event type for mouse motion events."
+msgstr ""
+
+#: doc/classes/InputEventMouseMotion.xml:7
+msgid ""
+"Contains mouse and pen motion information. Supports relative, absolute "
+"positions and speed. See [method Node._input].\n"
+"[b]Note:[/b] By default, this event is only emitted once per frame rendered "
+"at most. If you need more precise input reporting, call [method Input."
+"set_use_accumulated_input] with [code]false[/code] to make events emitted as "
+"often as possible. If you use InputEventMouseMotion to draw lines, consider "
+"implementing [url=https://en.wikipedia.org/wiki/Bresenham"
+"%27s_line_algorithm]Bresenham's line algorithm[/url] as well to avoid "
+"visible gaps in lines if the user is moving the mouse quickly."
+msgstr ""
+
+#: doc/classes/InputEventMouseMotion.xml:18
+msgid ""
+"Represents the pressure the user puts on the pen. Ranges from [code]0.0[/"
+"code] to [code]1.0[/code]."
+msgstr ""
+
+#: doc/classes/InputEventMouseMotion.xml:21
+msgid ""
+"The mouse position relative to the previous position (position at the last "
+"frame).\n"
+"[b]Note:[/b] Since [InputEventMouseMotion] is only emitted when the mouse "
+"moves, the last event won't have a relative position of [code]Vector2(0, 0)[/"
+"code] when the user stops moving the mouse."
+msgstr ""
+
+#: doc/classes/InputEventMouseMotion.xml:25
+msgid "The mouse speed in pixels per second."
+msgstr ""
+
+#: doc/classes/InputEventMouseMotion.xml:28
+msgid ""
+"Represents the angles of tilt of the pen. Positive X-coordinate value "
+"indicates a tilt to the right. Positive Y-coordinate value indicates a tilt "
+"toward the user. Ranges from [code]-1.0[/code] to [code]1.0[/code] for both "
+"axes."
+msgstr ""
+
+#: doc/classes/InputEventScreenDrag.xml:4
+msgid ""
+"Input event type for screen drag events. Only available on mobile devices."
+msgstr ""
+
+#: doc/classes/InputEventScreenDrag.xml:7
+msgid "Contains screen drag information. See [method Node._input]."
+msgstr ""
+
+#: doc/classes/InputEventScreenDrag.xml:16
+msgid "The drag event index in the case of a multi-drag event."
+msgstr ""
+
+#: doc/classes/InputEventScreenDrag.xml:19
+msgid "The drag position."
+msgstr ""
+
+#: doc/classes/InputEventScreenDrag.xml:22
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
+msgstr ""
+
+#: doc/classes/InputEventScreenDrag.xml:25
+msgid "The drag speed."
+msgstr ""
+
+#: doc/classes/InputEventScreenTouch.xml:4
+msgid ""
+"Input event type for screen touch events.\n"
+"(only available on mobile devices)"
+msgstr ""
+
+#: doc/classes/InputEventScreenTouch.xml:8
+msgid ""
+"Stores multi-touch press/release information. Supports touch press, touch "
+"release and [member index] for multi-touch count and order."
+msgstr ""
+
+#: doc/classes/InputEventScreenTouch.xml:17
+msgid ""
+"The touch index in the case of a multi-touch event. One index = one finger."
+msgstr ""
+
+#: doc/classes/InputEventScreenTouch.xml:20
+msgid "The touch position."
+msgstr ""
+
+#: doc/classes/InputEventScreenTouch.xml:23
+msgid ""
+"If [code]true[/code], the touch's state is pressed. If [code]false[/code], "
+"the touch's state is released."
+msgstr ""
+
+#: doc/classes/InputEventWithModifiers.xml:4
+msgid "Base class for keys events with modifiers."
+msgstr ""
+
+#: doc/classes/InputEventWithModifiers.xml:7
+msgid ""
+"Contains keys events information with modifiers support like [code]Shift[/"
+"code] or [code]Alt[/code]. See [method Node._input]."
+msgstr ""
+
+#: doc/classes/InputEventWithModifiers.xml:16
+msgid "State of the [code]Alt[/code] modifier."
+msgstr ""
+
+#: doc/classes/InputEventWithModifiers.xml:19
+msgid "State of the [code]Command[/code] modifier."
+msgstr ""
+
+#: doc/classes/InputEventWithModifiers.xml:22
+msgid "State of the [code]Ctrl[/code] modifier."
+msgstr ""
+
+#: doc/classes/InputEventWithModifiers.xml:25
+msgid "State of the [code]Meta[/code] modifier."
+msgstr ""
+
+#: doc/classes/InputEventWithModifiers.xml:28
+msgid "State of the [code]Shift[/code] modifier."
+msgstr ""
+
+#: doc/classes/InputMap.xml:4
+msgid "Singleton that manages [InputEventAction]."
+msgstr ""
+
+#: doc/classes/InputMap.xml:7
+msgid ""
+"Manages all [InputEventAction] which can be created/modified from the "
+"project settings menu [b]Project > Project Settings > Input Map[/b] or in "
+"code with [method add_action] and [method action_add_event]. See [method "
+"Node._input]."
+msgstr ""
+
+#: doc/classes/InputMap.xml:10
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/inputs/inputevent.html#inputmap"
+msgstr ""
+
+#: doc/classes/InputMap.xml:18
+msgid ""
+"Adds an [InputEvent] to an action. This [InputEvent] will trigger the action."
+msgstr ""
+
+#: doc/classes/InputMap.xml:26
+msgid "Removes an [InputEvent] from an action."
+msgstr ""
+
+#: doc/classes/InputMap.xml:33
+msgid "Removes all events from an action."
+msgstr ""
+
+#: doc/classes/InputMap.xml:40
+msgid "Returns a deadzone value for the action."
+msgstr ""
+
+#: doc/classes/InputMap.xml:48
+msgid ""
+"Returns [code]true[/code] if the action has the given [InputEvent] "
+"associated with it."
+msgstr ""
+
+#: doc/classes/InputMap.xml:56
+msgid "Sets a deadzone value for the action."
+msgstr ""
+
+#: doc/classes/InputMap.xml:64
+msgid ""
+"Adds an empty action to the [InputMap] with a configurable [code]deadzone[/"
+"code].\n"
+"An [InputEvent] can then be added to this action with [method "
+"action_add_event]."
+msgstr ""
+
+#: doc/classes/InputMap.xml:72
+msgid "Removes an action from the [InputMap]."
+msgstr ""
+
+#: doc/classes/InputMap.xml:81
+msgid ""
+"Returns [code]true[/code] if the given event is part of an existing action. "
+"This method ignores keyboard modifiers if the given [InputEvent] is not "
+"pressed (for proper release detection). See [method action_has_event] if you "
+"don't want this behavior.\n"
+"If [code]exact_match[/code] is [code]false[/code], it ignores the input "
+"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
+"direction for [InputEventJoypadMotion] events."
+msgstr ""
+
+#: doc/classes/InputMap.xml:89
+msgid "Returns an array of [InputEvent]s associated with a given action."
+msgstr ""
+
+#: doc/classes/InputMap.xml:95
+msgid "Returns an array of all actions in the [InputMap]."
+msgstr ""
+
+#: doc/classes/InputMap.xml:102
+msgid ""
+"Returns [code]true[/code] if the [InputMap] has a registered action with the "
+"given name."
+msgstr ""
+
+#: doc/classes/InputMap.xml:108
+msgid ""
+"Clears all [InputEventAction] in the [InputMap] and load it anew from "
+"[ProjectSettings]."
+msgstr ""
+
+#: doc/classes/InstancePlaceholder.xml:4
+msgid "Placeholder for the root [Node] of a [PackedScene]."
+msgstr ""
+
+#: doc/classes/InstancePlaceholder.xml:7
+msgid ""
+"Turning on the option [b]Load As Placeholder[/b] for an instanced scene in "
+"the editor causes it to be replaced by an InstancePlaceholder when running "
+"the game. This makes it possible to delay actually loading the scene until "
+"calling [method replace_by_instance]. This is useful to avoid loading large "
+"scenes all at once by loading parts of it selectively.\n"
+"The InstancePlaceholder does not have a transform. This causes any child "
+"nodes to be positioned relatively to the Viewport from point (0,0), rather "
+"than their parent as displayed in the editor. Replacing the placeholder with "
+"a scene with a transform will transform children relatively to their parent "
+"again."
+msgstr ""
+
+#: doc/classes/InstancePlaceholder.xml:18
+msgid ""
+"Not thread-safe. Use [method Object.call_deferred] if calling from a thread."
+msgstr ""
+
+#: doc/classes/InstancePlaceholder.xml:24
+msgid ""
+"Gets the path to the [PackedScene] resource file that is loaded by default "
+"when calling [method replace_by_instance]. Not thread-safe. Use [method "
+"Object.call_deferred] if calling from a thread."
+msgstr ""
+
+#: doc/classes/InstancePlaceholder.xml:37
+msgid ""
+"Replaces this placeholder by the scene handed as an argument, or the "
+"original scene if no argument is given. As for all resources, the scene is "
+"loaded only if it's not loaded already. By manually loading the scene "
+"beforehand, delays caused by this function can be avoided."
+msgstr ""
+
+#: doc/classes/int.xml:4
+msgid "Integer built-in type."
+msgstr ""
+
+#: doc/classes/int.xml:7
+msgid ""
+"Signed 64-bit integer type.\n"
+"It can take values in the interval [code][-2^63, 2^63 - 1][/code], i.e. "
+"[code][-9223372036854775808, 9223372036854775807][/code]. Exceeding those "
+"bounds will wrap around.\n"
+"[int] is a [Variant] type, and will thus be used when assigning an integer "
+"value to a [Variant]. It can also be enforced with the [code]: int[/code] "
+"type hint.\n"
+"[codeblock]\n"
+"var my_variant = 0 # int, value 0.\n"
+"my_variant += 4.2 # float, value 4.2.\n"
+"var my_int: int = 1 # int, value 1.\n"
+"my_int = 4.2 # int, value 4, the right value is implicitly cast to int.\n"
+"my_int = int(\"6.7\") # int, value 6, the String is explicitly cast with "
+"int.\n"
+"\n"
+"var max_int = 9223372036854775807\n"
+"print(max_int) # 9223372036854775807, OK.\n"
+"max_int += 1\n"
+"print(max_int) # -9223372036854775808, we overflowed and wrapped around.\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/int.xml:30
+msgid ""
+"Cast a [bool] value to an integer value, [code]int(true)[/code] will be "
+"equals to 1 and [code]int(false)[/code] will be equals to 0."
+msgstr ""
+
+#: doc/classes/int.xml:37
+msgid ""
+"Cast a float value to an integer value, this method simply removes the "
+"number fractions (i.e. rounds [code]from[/code] towards zero), so for "
+"example [code]int(2.7)[/code] will be equals to 2, [code]int(0.1)[/code] "
+"will be equals to 0 and [code]int(-2.7)[/code] will be equals to -2. This "
+"operation is also called truncation."
+msgstr ""
+
+#: doc/classes/int.xml:44
+msgid ""
+"Cast a [String] value to an integer value, this method is an integer parser "
+"from a string, so calling this method with an invalid integer string will "
+"return 0, a valid string will be something like [code]'1.7'[/code]. This "
+"method will ignore all non-number characters, so calling [code]int('1e3')[/"
+"code] will return 13."
+msgstr ""
+
+#: doc/classes/InterpolatedCamera.xml:4
+msgid "[i]Deprecated.[/i] Camera which moves toward another node."
+msgstr ""
+
+#: doc/classes/InterpolatedCamera.xml:7
+msgid ""
+"[i]Deprecated (will be removed in Godot 4.0).[/i] InterpolatedCamera is a "
+"[Camera] which smoothly moves to match a target node's position and "
+"rotation.\n"
+"If it is not [member enabled] or does not have a valid target set, "
+"InterpolatedCamera acts like a normal Camera."
+msgstr ""
+
+#: doc/classes/InterpolatedCamera.xml:17
+msgid "Sets the node to move toward and orient with."
+msgstr ""
+
+#: doc/classes/InterpolatedCamera.xml:23
+msgid ""
+"If [code]true[/code], and a target is set, the camera will move "
+"automatically."
+msgstr ""
+
+#: doc/classes/InterpolatedCamera.xml:26
+msgid ""
+"How quickly the camera moves toward its target. Higher values will result in "
+"tighter camera motion."
+msgstr ""
+
+#: doc/classes/InterpolatedCamera.xml:29
+msgid "The target's [NodePath]."
+msgstr ""
+
+#: doc/classes/IP.xml:4
+msgid "Internet protocol (IP) support functions such as DNS resolution."
+msgstr ""
+
+#: doc/classes/IP.xml:7
+msgid ""
+"IP contains support functions for the Internet Protocol (IP). TCP/IP support "
+"is in different classes (see [StreamPeerTCP] and [TCP_Server]). IP provides "
+"DNS hostname resolution support, both blocking and threaded."
+msgstr ""
+
+#: doc/classes/IP.xml:16
+msgid ""
+"Removes all of a [code]hostname[/code]'s cached references. If no "
+"[code]hostname[/code] is given, all cached IP addresses are removed."
+msgstr ""
+
+#: doc/classes/IP.xml:23
+msgid ""
+"Removes a given item [code]id[/code] from the queue. This should be used to "
+"free a queue after it has completed to enable more queries to happen."
+msgstr ""
+
+#: doc/classes/IP.xml:29
+msgid "Returns all the user's current IPv4 and IPv6 addresses as an array."
+msgstr ""
+
+#: doc/classes/IP.xml:35
+msgid ""
+"Returns all network adapters as an array.\n"
+"Each adapter is a dictionary of the form:\n"
+"[codeblock]\n"
+"{\n"
+" \"index\": \"1\", # Interface index.\n"
+" \"name\": \"eth0\", # Interface name.\n"
+" \"friendly\": \"Ethernet One\", # A friendly name (might be empty).\n"
+" \"addresses\": [\"192.168.1.101\"], # An array of IP addresses "
+"associated to this interface.\n"
+"}\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/IP.xml:51
+msgid ""
+"Returns a queued hostname's IP address, given its queue [code]id[/code]. "
+"Returns an empty string on error or if resolution hasn't happened yet (see "
+"[method get_resolve_item_status])."
+msgstr ""
+
+#: doc/classes/IP.xml:58
+msgid ""
+"Return resolved addresses, or an empty array if an error happened or "
+"resolution didn't happen yet (see [method get_resolve_item_status])."
+msgstr ""
+
+#: doc/classes/IP.xml:65
+msgid ""
+"Returns a queued hostname's status as a [enum ResolverStatus] constant, "
+"given its queue [code]id[/code]."
+msgstr ""
+
+#: doc/classes/IP.xml:73
+msgid ""
+"Returns a given hostname's IPv4 or IPv6 address when resolved (blocking-type "
+"method). The address type returned depends on the [enum Type] constant given "
+"as [code]ip_type[/code]."
+msgstr ""
+
+#: doc/classes/IP.xml:81
+msgid ""
+"Resolves a given hostname in a blocking way. Addresses are returned as an "
+"[Array] of IPv4 or IPv6 depending on [code]ip_type[/code]."
+msgstr ""
+
+#: doc/classes/IP.xml:89
+msgid ""
+"Creates a queue item to resolve a hostname to an IPv4 or IPv6 address "
+"depending on the [enum Type] constant given as [code]ip_type[/code]. Returns "
+"the queue ID if successful, or [constant RESOLVER_INVALID_ID] on error."
+msgstr ""
+
+#: doc/classes/IP.xml:95
+msgid "DNS hostname resolver status: No status."
+msgstr ""
+
+#: doc/classes/IP.xml:98
+msgid "DNS hostname resolver status: Waiting."
+msgstr ""
+
+#: doc/classes/IP.xml:101
+msgid "DNS hostname resolver status: Done."
+msgstr ""
+
+#: doc/classes/IP.xml:104
+msgid "DNS hostname resolver status: Error."
+msgstr ""
+
+#: doc/classes/IP.xml:107
+msgid ""
+"Maximum number of concurrent DNS resolver queries allowed, [constant "
+"RESOLVER_INVALID_ID] is returned if exceeded."
+msgstr ""
+
+#: doc/classes/IP.xml:110
+msgid ""
+"Invalid ID constant. Returned if [constant RESOLVER_MAX_QUERIES] is exceeded."
+msgstr ""
+
+#: doc/classes/IP.xml:113
+msgid "Address type: None."
+msgstr ""
+
+#: doc/classes/IP.xml:116
+msgid "Address type: Internet protocol version 4 (IPv4)."
+msgstr ""
+
+#: doc/classes/IP.xml:119
+msgid "Address type: Internet protocol version 6 (IPv6)."
+msgstr ""
+
+#: doc/classes/IP.xml:122
+msgid "Address type: Any."
+msgstr ""
+
+#: doc/classes/ItemList.xml:4
+msgid ""
+"Control that provides a list of selectable items (and/or icons) in a single "
+"column, or optionally in multiple columns."
+msgstr ""
+
+#: doc/classes/ItemList.xml:7
+msgid ""
+"This control provides a selectable list of items that may be in a single (or "
+"multiple columns) with option of text, icons, or both text and icon. "
+"Tooltips are supported and may be different for every item in the list.\n"
+"Selectable items in the list may be selected or deselected and multiple "
+"selection may be enabled. Selection with right mouse button may also be "
+"enabled to allow use of popup context menus. Items may also be \"activated\" "
+"by double-clicking them or by pressing Enter.\n"
+"Item text only supports single-line strings, newline characters (e.g. "
+"[code]\\n[/code]) in the string won't produce a newline. Text wrapping is "
+"enabled in [constant ICON_MODE_TOP] mode, but column's width is adjusted to "
+"fully fit its content by default. You need to set [member "
+"fixed_column_width] greater than zero to wrap the text."
+msgstr ""
+
+#: doc/classes/ItemList.xml:19
+msgid "Adds an item to the item list with no text, only an icon."
+msgstr ""
+
+#: doc/classes/ItemList.xml:28
+msgid ""
+"Adds an item to the item list with specified text. Specify an [code]icon[/"
+"code], or use [code]null[/code] as the [code]icon[/code] for a list item "
+"with no icon.\n"
+"If selectable is [code]true[/code], the list item will be selectable."
+msgstr ""
+
+#: doc/classes/ItemList.xml:35
+msgid "Removes all items from the list."
+msgstr ""
+
+#: doc/classes/ItemList.xml:41
+msgid ""
+"Ensure current selection is visible, adjusting the scroll position as "
+"necessary."
+msgstr ""
+
+#: doc/classes/ItemList.xml:49
+msgid ""
+"Returns the item index at the given [code]position[/code].\n"
+"When there is no item at that point, -1 will be returned if [code]exact[/"
+"code] is [code]true[/code], and the closest item index will be returned "
+"otherwise."
+msgstr ""
+
+#: doc/classes/ItemList.xml:56
+msgid "Returns the number of items currently in the list."
+msgstr ""
+
+#: doc/classes/ItemList.xml:63
+msgid ""
+"Returns the custom background color of the item specified by [code]idx[/"
+"code] index."
+msgstr ""
+
+#: doc/classes/ItemList.xml:70
+msgid ""
+"Returns the custom foreground color of the item specified by [code]idx[/"
+"code] index."
+msgstr ""
+
+#: doc/classes/ItemList.xml:77
+msgid "Returns the icon associated with the specified index."
+msgstr ""
+
+#: doc/classes/ItemList.xml:84
+msgid "Returns a [Color] modulating item's icon at the specified index."
+msgstr ""
+
+#: doc/classes/ItemList.xml:91
+msgid ""
+"Returns the region of item's icon used. The whole icon will be used if the "
+"region has no area."
+msgstr ""
+
+#: doc/classes/ItemList.xml:98
+msgid "Returns the metadata value of the specified index."
+msgstr ""
+
+#: doc/classes/ItemList.xml:105
+msgid "Returns the text associated with the specified index."
+msgstr ""
+
+#: doc/classes/ItemList.xml:112
+msgid "Returns the tooltip hint associated with the specified index."
+msgstr ""
+
+#: doc/classes/ItemList.xml:118
+msgid "Returns an array with the indexes of the selected items."
+msgstr ""
+
+#: doc/classes/ItemList.xml:124
+msgid ""
+"Returns the [Object] ID associated with the list.\n"
+"[b]Warning:[/b] This is a required internal node, removing and freeing it "
+"may cause a crash. If you wish to hide it or any of its children, use their "
+"[member CanvasItem.visible] property."
+msgstr ""
+
+#: doc/classes/ItemList.xml:131
+msgid "Returns [code]true[/code] if one or more items are selected."
+msgstr ""
+
+#: doc/classes/ItemList.xml:138
+msgid ""
+"Returns [code]true[/code] if the item at the specified index is disabled."
+msgstr ""
+
+#: doc/classes/ItemList.xml:145
+msgid ""
+"Returns [code]true[/code] if the item icon will be drawn transposed, i.e. "
+"the X and Y axes are swapped."
+msgstr ""
+
+#: doc/classes/ItemList.xml:152
+msgid ""
+"Returns [code]true[/code] if the item at the specified index is selectable."
+msgstr ""
+
+#: doc/classes/ItemList.xml:159
+msgid ""
+"Returns [code]true[/code] if the tooltip is enabled for specified item index."
+msgstr ""
+
+#: doc/classes/ItemList.xml:166
+msgid ""
+"Returns [code]true[/code] if the item at the specified index is currently "
+"selected."
+msgstr ""
+
+#: doc/classes/ItemList.xml:174
+msgid "Moves item from index [code]from_idx[/code] to [code]to_idx[/code]."
+msgstr ""
+
+#: doc/classes/ItemList.xml:181
+msgid "Removes the item specified by [code]idx[/code] index from the list."
+msgstr ""
+
+#: doc/classes/ItemList.xml:189
+msgid ""
+"Select the item at the specified index.\n"
+"[b]Note:[/b] This method does not trigger the item selection signal."
+msgstr ""
+
+#: doc/classes/ItemList.xml:198
+msgid ""
+"Sets the background color of the item specified by [code]idx[/code] index to "
+"the specified [Color]."
+msgstr ""
+
+#: doc/classes/ItemList.xml:206
+msgid ""
+"Sets the foreground color of the item specified by [code]idx[/code] index to "
+"the specified [Color]."
+msgstr ""
+
+#: doc/classes/ItemList.xml:214
+msgid ""
+"Disables (or enables) the item at the specified index.\n"
+"Disabled items cannot be selected and do not trigger activation signals "
+"(when double-clicking or pressing Enter)."
+msgstr ""
+
+#: doc/classes/ItemList.xml:223
+msgid ""
+"Sets (or replaces) the icon's [Texture] associated with the specified index."
+msgstr ""
+
+#: doc/classes/ItemList.xml:231
+msgid ""
+"Sets a modulating [Color] of the item associated with the specified index."
+msgstr ""
+
+#: doc/classes/ItemList.xml:239
+msgid ""
+"Sets the region of item's icon used. The whole icon will be used if the "
+"region has no area."
+msgstr ""
+
+#: doc/classes/ItemList.xml:247
+msgid "Sets whether the item icon will be drawn transposed."
+msgstr ""
+
+#: doc/classes/ItemList.xml:255
+msgid ""
+"Sets a value (of any type) to be stored with the item associated with the "
+"specified index."
+msgstr ""
+
+#: doc/classes/ItemList.xml:263
+msgid ""
+"Allows or disallows selection of the item associated with the specified "
+"index."
+msgstr ""
+
+#: doc/classes/ItemList.xml:271
+msgid "Sets text of the item associated with the specified index."
+msgstr ""
+
+#: doc/classes/ItemList.xml:279
+msgid "Sets the tooltip hint for the item associated with the specified index."
+msgstr ""
+
+#: doc/classes/ItemList.xml:287
+msgid "Sets whether the tooltip hint is enabled for specified item index."
+msgstr ""
+
+#: doc/classes/ItemList.xml:293
+msgid "Sorts items in the list by their text."
+msgstr ""
+
+#: doc/classes/ItemList.xml:300
+msgid "Ensures the item associated with the specified index is not selected."
+msgstr ""
+
+#: doc/classes/ItemList.xml:306
+msgid "Ensures there are no items selected."
+msgstr ""
+
+#: doc/classes/ItemList.xml:312
+msgid ""
+"If [code]true[/code], the currently selected item can be selected again."
+msgstr ""
+
+#: doc/classes/ItemList.xml:315
+msgid "If [code]true[/code], right mouse button click can select items."
+msgstr ""
+
+#: doc/classes/ItemList.xml:318
+msgid ""
+"If [code]true[/code], the control will automatically resize the height to "
+"fit its content."
+msgstr ""
+
+#: doc/classes/ItemList.xml:321
+msgid ""
+"The width all columns will be adjusted to.\n"
+"A value of zero disables the adjustment, each item will have a width equal "
+"to the width of its content and the columns will have an uneven width."
+msgstr ""
+
+#: doc/classes/ItemList.xml:325
+msgid ""
+"The size all icons will be adjusted to.\n"
+"If either X or Y component is not greater than zero, icon size won't be "
+"affected."
+msgstr ""
+
+#: doc/classes/ItemList.xml:330
+msgid ""
+"The icon position, whether above or to the left of the text. See the [enum "
+"IconMode] constants."
+msgstr ""
+
+#: doc/classes/ItemList.xml:333
+msgid ""
+"The scale of icon applied after [member fixed_icon_size] and transposing "
+"takes effect."
+msgstr ""
+
+#: doc/classes/ItemList.xml:336
+msgid ""
+"Maximum columns the list will have.\n"
+"If greater than zero, the content will be split among the specified "
+"columns.\n"
+"A value of zero means unlimited columns, i.e. all items will be put in the "
+"same row."
+msgstr ""
+
+#: doc/classes/ItemList.xml:341
+msgid ""
+"Maximum lines of text allowed in each item. Space will be reserved even when "
+"there is not enough lines of text to display.\n"
+"[b]Note:[/b] This property takes effect only when [member icon_mode] is "
+"[constant ICON_MODE_TOP]. To make the text wrap, [member fixed_column_width] "
+"should be greater than zero."
+msgstr ""
+
+#: doc/classes/ItemList.xml:346
+msgid ""
+"Whether all columns will have the same width.\n"
+"If [code]true[/code], the width is equal to the largest column width of all "
+"columns."
+msgstr ""
+
+#: doc/classes/ItemList.xml:350
+msgid ""
+"Allows single or multiple item selection. See the [enum SelectMode] "
+"constants."
+msgstr ""
+
+#: doc/classes/ItemList.xml:357
+msgid ""
+"Triggered when specified list item is activated via double-clicking or by "
+"pressing Enter."
+msgstr ""
+
+#: doc/classes/ItemList.xml:364
+msgid ""
+"Triggered when specified list item has been selected via right mouse "
+"clicking.\n"
+"The click position is also provided to allow appropriate popup of context "
+"menus at the correct location.\n"
+"[member allow_rmb_select] must be enabled."
+msgstr ""
+
+#: doc/classes/ItemList.xml:372
+msgid ""
+"Triggered when specified item has been selected.\n"
+"[member allow_reselect] must be enabled to reselect an item."
+msgstr ""
+
+#: doc/classes/ItemList.xml:380
+msgid ""
+"Triggered when a multiple selection is altered on a list allowing multiple "
+"selection."
+msgstr ""
+
+#: doc/classes/ItemList.xml:385
+msgid ""
+"Triggered when a left mouse click is issued within the rect of the list but "
+"on empty space."
+msgstr ""
+
+#: doc/classes/ItemList.xml:391
+msgid ""
+"Triggered when a right mouse click is issued within the rect of the list but "
+"on empty space.\n"
+"[member allow_rmb_select] must be enabled."
+msgstr ""
+
+#: doc/classes/ItemList.xml:398
+msgid "Icon is drawn above the text."
+msgstr ""
+
+#: doc/classes/ItemList.xml:401
+msgid "Icon is drawn to the left of the text."
+msgstr ""
+
+#: doc/classes/ItemList.xml:404
+msgid "Only allow selecting a single item."
+msgstr ""
+
+#: doc/classes/ItemList.xml:407
+msgid "Allows selecting multiple items by holding Ctrl or Shift."
+msgstr ""
+
+#: doc/classes/ItemList.xml:412
+msgid ""
+"Default [StyleBox] for the [ItemList], i.e. used when the control is not "
+"being focused."
+msgstr ""
+
+#: doc/classes/ItemList.xml:415
+msgid "[StyleBox] used when the [ItemList] is being focused."
+msgstr ""
+
+#: doc/classes/ItemList.xml:418
+msgid "[StyleBox] used for the cursor, when the [ItemList] is being focused."
+msgstr ""
+
+#: doc/classes/ItemList.xml:421
+msgid ""
+"[StyleBox] used for the cursor, when the [ItemList] is not being focused."
+msgstr ""
+
+#: doc/classes/ItemList.xml:424 doc/classes/Tree.xml:407
+msgid "[Font] of the item's text."
+msgstr ""
+
+#: doc/classes/ItemList.xml:427 doc/classes/Tree.xml:410
+msgid "Default text [Color] of the item."
+msgstr ""
+
+#: doc/classes/ItemList.xml:430 doc/classes/Tree.xml:413
+msgid "Text [Color] used when the item is selected."
+msgstr ""
+
+#: doc/classes/ItemList.xml:433
+msgid ""
+"[Color] of the guideline. The guideline is a line drawn between each row of "
+"items."
+msgstr ""
+
+#: doc/classes/ItemList.xml:436
+msgid "The horizontal spacing between items."
+msgstr ""
+
+#: doc/classes/ItemList.xml:439
+msgid "The spacing between item's icon and text."
+msgstr ""
+
+#: doc/classes/ItemList.xml:442
+msgid "The vertical spacing between each line of text."
+msgstr ""
+
+#: doc/classes/ItemList.xml:445
+msgid ""
+"[StyleBox] for the selected items, used when the [ItemList] is not being "
+"focused."
+msgstr ""
+
+#: doc/classes/ItemList.xml:448
+msgid ""
+"[StyleBox] for the selected items, used when the [ItemList] is being focused."
+msgstr ""
+
+#: doc/classes/ItemList.xml:451
+msgid "The vertical spacing between items."
+msgstr ""
+
+#: doc/classes/JavaScript.xml:4
+msgid ""
+"Singleton that connects the engine with the browser's JavaScript context in "
+"HTML5 export."
+msgstr ""
+
+#: doc/classes/JavaScript.xml:7
+msgid ""
+"The JavaScript singleton is implemented only in the HTML5 export. It's used "
+"to access the browser's JavaScript context. This allows interaction with "
+"embedding pages or calling third-party JavaScript APIs.\n"
+"[b]Note:[/b] This singleton can be disabled at build-time to improve "
+"security. By default, the JavaScript singleton is enabled. Official export "
+"templates also have the JavaScript singleton enabled. See [url=https://docs."
+"godotengine.org/en/3.4/development/compiling/compiling_for_web."
+"html]Compiling for the Web[/url] in the documentation for more information."
+msgstr ""
+
+#: doc/classes/JavaScript.xml:11
+msgid ""
+"https://docs.godotengine.org/en/3.4/getting_started/workflow/export/"
+"exporting_for_web.html#calling-javascript-from-script"
+msgstr ""
+
+#: doc/classes/JavaScript.xml:19
+msgid ""
+"Creates a reference to a script function that can be used as a callback by "
+"JavaScript. The reference must be kept until the callback happens, or it "
+"won't be called at all. See [JavaScriptObject] for usage."
+msgstr ""
+
+#: doc/classes/JavaScript.xml:26
+msgid ""
+"Creates a new JavaScript object using the [code]new[/code] constructor. The "
+"[code]object[/code] must a valid property of the JavaScript [code]window[/"
+"code]. See [JavaScriptObject] for usage."
+msgstr ""
+
+#: doc/classes/JavaScript.xml:35
+msgid ""
+"Prompts the user to download a file containing the specified [code]buffer[/"
+"code]. The file will have the given [code]name[/code] and [code]mime[/code] "
+"type.\n"
+"[b]Note:[/b] The browser may override the [url=https://en.wikipedia.org/wiki/"
+"Media_type]MIME type[/url] provided based on the file [code]name[/code]'s "
+"extension.\n"
+"[b]Note:[/b] Browsers might block the download if [method download_buffer] "
+"is not being called from a user interaction (e.g. button click).\n"
+"[b]Note:[/b] Browsers might ask the user for permission or block the "
+"download if multiple download requests are made in a quick succession."
+msgstr ""
+
+#: doc/classes/JavaScript.xml:46
+msgid ""
+"Execute the string [code]code[/code] as JavaScript code within the browser "
+"window. This is a call to the actual global JavaScript function [code]eval()"
+"[/code].\n"
+"If [code]use_global_execution_context[/code] is [code]true[/code], the code "
+"will be evaluated in the global execution context. Otherwise, it is "
+"evaluated in the execution context of a function within the engine's runtime "
+"environment."
+msgstr ""
+
+#: doc/classes/JavaScript.xml:54
+msgid ""
+"Returns an interface to a JavaScript object that can be used by scripts. The "
+"[code]interface[/code] must be a valid property of the JavaScript "
+"[code]window[/code]. The callback must accept a single [Array] argument, "
+"which will contain the JavaScript [code]arguments[/code]. See "
+"[JavaScriptObject] for usage."
+msgstr ""
+
+#: doc/classes/JavaScriptObject.xml:4
+msgid "A wrapper class for native JavaScript objects."
+msgstr ""
+
+#: doc/classes/JavaScriptObject.xml:7
+msgid ""
+"JavaScriptObject is used to interact with JavaScript objects retrieved or "
+"created via [method JavaScript.get_interface], [method JavaScript."
+"create_object], or [method JavaScript.create_callback].\n"
+"Example:\n"
+"[codeblock]\n"
+"extends Node\n"
+"\n"
+"var _my_js_callback = JavaScript.create_callback(self, \"myCallback\") # "
+"This reference must be kept\n"
+"var console = JavaScript.get_interface(\"console\")\n"
+"\n"
+"func _init():\n"
+" var buf = JavaScript.create_object(\"ArrayBuffer\", 10) # new "
+"ArrayBuffer(10)\n"
+" print(buf) # prints [JavaScriptObject:OBJECT_ID]\n"
+" var uint8arr = JavaScript.create_object(\"Uint8Array\", buf) # new "
+"Uint8Array(buf)\n"
+" uint8arr[1] = 255\n"
+" prints(uint8arr[1], uint8arr.byteLength) # prints 255 10\n"
+" console.log(uint8arr) # prints in browser console \"Uint8Array(10) [ 0, "
+"255, 0, 0, 0, 0, 0, 0, 0, 0 ]\"\n"
+"\n"
+" # Equivalent of JavaScript: Array.from(uint8arr).forEach(myCallback)\n"
+" JavaScript.get_interface(\"Array\").from(uint8arr)."
+"forEach(_my_js_callback)\n"
+"\n"
+"func myCallback(args):\n"
+" # Will be called with the parameters passed to the \"forEach\" callback\n"
+" # [0, 0, [JavaScriptObject:1173]]\n"
+" # [255, 1, [JavaScriptObject:1173]]\n"
+" # ...\n"
+" # [0, 9, [JavaScriptObject:1180]]\n"
+" print(args)\n"
+"[/codeblock]\n"
+"[b]Note:[/b] Only available in the HTML5 platform."
+msgstr ""
+
+#: doc/classes/JNISingleton.xml:4
+msgid ""
+"Singleton that connects the engine with Android plugins to interface with "
+"native Android code."
+msgstr ""
+
+#: doc/classes/JNISingleton.xml:7
+msgid ""
+"The JNISingleton is implemented only in the Android export. It's used to "
+"call methods and connect signals from an Android plugin written in Java or "
+"Kotlin. Methods and signals can be called and connected to the JNISingleton "
+"as if it is a Node. See [url=https://en.wikipedia.org/wiki/"
+"Java_Native_Interface]Java Native Interface - Wikipedia[/url] for more "
+"information."
+msgstr ""
+
+#: doc/classes/JNISingleton.xml:10
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/plugins/android/android_plugin."
+"html"
+msgstr ""
+
+#: doc/classes/Joint.xml:4
+msgid "Base class for all 3D joints."
+msgstr ""
+
+#: doc/classes/Joint.xml:7
+msgid ""
+"Joints are used to bind together two physics bodies. They have a solver "
+"priority and can define if the bodies of the two attached nodes should be "
+"able to collide with each other."
+msgstr ""
+
+#: doc/classes/Joint.xml:10 doc/classes/RigidBody.xml:15
+#: doc/classes/VehicleBody.xml:12 doc/classes/VehicleWheel.xml:11
+msgid "https://godotengine.org/asset-library/asset/524"
+msgstr ""
+
+#: doc/classes/Joint.xml:16
+msgid ""
+"If [code]true[/code], the two bodies of the nodes are not able to collide "
+"with each other."
+msgstr ""
+
+#: doc/classes/Joint.xml:19
+msgid "The node attached to the first side (A) of the joint."
+msgstr ""
+
+#: doc/classes/Joint.xml:22
+msgid "The node attached to the second side (B) of the joint."
+msgstr ""
+
+#: doc/classes/Joint.xml:25
+msgid ""
+"The priority used to define which solver is executed first for multiple "
+"joints. The lower the value, the higher the priority."
+msgstr ""
+
+#: doc/classes/Joint2D.xml:4
+msgid "Base node for all joint constraints in 2D physics."
+msgstr ""
+
+#: doc/classes/Joint2D.xml:7
+msgid ""
+"Base node for all joint constraints in 2D physics. Joints take 2 bodies and "
+"apply a custom constraint."
+msgstr ""
+
+#: doc/classes/Joint2D.xml:15
+msgid ""
+"When [member node_a] and [member node_b] move in different directions the "
+"[code]bias[/code] controls how fast the joint pulls them back to their "
+"original position. The lower the [code]bias[/code] the more the two bodies "
+"can pull on the joint."
+msgstr ""
+
+#: doc/classes/Joint2D.xml:18
+msgid ""
+"If [code]true[/code], [member node_a] and [member node_b] can not collide."
+msgstr ""
+
+#: doc/classes/Joint2D.xml:21
+msgid "The first body attached to the joint. Must derive from [PhysicsBody2D]."
+msgstr ""
+
+#: doc/classes/Joint2D.xml:24
+msgid ""
+"The second body attached to the joint. Must derive from [PhysicsBody2D]."
+msgstr ""
+
+#: doc/classes/JSON.xml:4
+msgid "Helper class for parsing JSON data."
+msgstr ""
+
+#: doc/classes/JSON.xml:7
+msgid ""
+"Helper class for parsing JSON data. For usage example and other important "
+"hints, see [JSONParseResult]."
+msgstr ""
+
+#: doc/classes/JSON.xml:16
+msgid ""
+"Parses a JSON-encoded string and returns a [JSONParseResult] containing the "
+"result."
+msgstr ""
+
+#: doc/classes/JSON.xml:25
+msgid ""
+"Converts a [Variant] var to JSON text and returns the result. Useful for "
+"serializing data to store or send over the network.\n"
+"[b]Note:[/b] The JSON specification does not define integer or float types, "
+"but only a [i]number[/i] type. Therefore, converting a Variant to JSON text "
+"will convert all numerical values to [float] types.\n"
+"Use [code]indent[/code] parameter to pretty print the output.\n"
+"[b]Example output:[/b]\n"
+"[codeblock]\n"
+"## JSON.print(my_dictionary)\n"
+"{\"name\":\"my_dictionary\",\"version\":\"1.0.0\",\"entities\":[{\"name\":"
+"\"entity_0\",\"value\":\"value_0\"},{\"name\":\"entity_1\",\"value\":"
+"\"value_1\"}]}\n"
+"\n"
+"## JSON.print(my_dictionary, \"\\t\")\n"
+"{\n"
+" \"name\": \"my_dictionary\",\n"
+" \"version\": \"1.0.0\",\n"
+" \"entities\": [\n"
+" {\n"
+" \"name\": \"entity_0\",\n"
+" \"value\": \"value_0\"\n"
+" },\n"
+" {\n"
+" \"name\": \"entity_1\",\n"
+" \"value\": \"value_1\"\n"
+" }\n"
+" ]\n"
+"}\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/JSONParseResult.xml:4
+msgid "Data class wrapper for decoded JSON."
+msgstr ""
+
+#: doc/classes/JSONParseResult.xml:7
+msgid ""
+"Returned by [method JSON.parse], [JSONParseResult] contains the decoded JSON "
+"or error information if the JSON source wasn't successfully parsed. You can "
+"check if the JSON source was successfully parsed with [code]if json_result."
+"error == OK[/code]."
+msgstr ""
+
+#: doc/classes/JSONParseResult.xml:15
+msgid ""
+"The error type if the JSON source was not successfully parsed. See the [enum "
+"Error] constants."
+msgstr ""
+
+#: doc/classes/JSONParseResult.xml:18
+msgid ""
+"The line number where the error occurred if the JSON source was not "
+"successfully parsed."
+msgstr ""
+
+#: doc/classes/JSONParseResult.xml:21
+msgid ""
+"The error message if the JSON source was not successfully parsed. See the "
+"[enum Error] constants."
+msgstr ""
+
+#: doc/classes/JSONParseResult.xml:24
+msgid ""
+"A [Variant] containing the parsed JSON. Use [method @GDScript.typeof] or the "
+"[code]is[/code] keyword to check if it is what you expect. For example, if "
+"the JSON source starts with curly braces ([code]{}[/code]), a [Dictionary] "
+"will be returned. If the JSON source starts with brackets ([code][][/code]), "
+"an [Array] will be returned.\n"
+"[b]Note:[/b] The JSON specification does not define integer or float types, "
+"but only a [i]number[/i] type. Therefore, parsing a JSON text will convert "
+"all numerical values to [float] types.\n"
+"[b]Note:[/b] JSON objects do not preserve key order like Godot dictionaries, "
+"thus, you should not rely on keys being in a certain order if a dictionary "
+"is constructed from JSON. In contrast, JSON arrays retain the order of their "
+"elements:\n"
+"[codeblock]\n"
+"var p = JSON.parse('[\"hello\", \"world\", \"!\"]')\n"
+"if typeof(p.result) == TYPE_ARRAY:\n"
+" print(p.result[0]) # Prints \"hello\"\n"
+"else:\n"
+" push_error(\"Unexpected results.\")\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/JSONRPC.xml:4
+msgid "A helper to handle dictionaries which look like JSONRPC documents."
+msgstr ""
+
+#: doc/classes/JSONRPC.xml:7
+msgid ""
+"[url=https://www.jsonrpc.org/]JSON-RPC[/url] is a standard which wraps a "
+"method call in a [JSON] object. The object has a particular structure and "
+"identifies which method is called, the parameters to that function, and "
+"carries an ID to keep track of responses. This class implements that "
+"standard on top of [Dictionary]; you will have to convert between a "
+"[Dictionary] and [JSON] with other functions."
+msgstr ""
+
+#: doc/classes/JSONRPC.xml:17
+msgid ""
+"Returns a dictionary in the form of a JSON-RPC notification. Notifications "
+"are one-shot messages which do not expect a response.\n"
+"- [code]method[/code]: Name of the method being called.\n"
+"- [code]params[/code]: An array or dictionary of parameters being passed to "
+"the method."
+msgstr ""
+
+#: doc/classes/JSONRPC.xml:28
+msgid ""
+"Returns a dictionary in the form of a JSON-RPC request. Requests are sent to "
+"a server with the expectation of a response. The ID field is used for the "
+"server to specify which exact request it is responding to.\n"
+"- [code]method[/code]: Name of the method being called.\n"
+"- [code]params[/code]: An array or dictionary of parameters being passed to "
+"the method.\n"
+"- [code]id[/code]: Uniquely identifies this request. The server is expected "
+"to send a response with the same ID."
+msgstr ""
+
+#: doc/classes/JSONRPC.xml:39
+msgid ""
+"When a server has received and processed a request, it is expected to send a "
+"response. If you did not want a response then you need to have sent a "
+"Notification instead.\n"
+"- [code]result[/code]: The return value of the function which was called.\n"
+"- [code]id[/code]: The ID of the request this response is targeted to."
+msgstr ""
+
+#: doc/classes/JSONRPC.xml:50
+msgid ""
+"Creates a response which indicates a previous reply has failed in some way.\n"
+"- [code]code[/code]: The error code corresponding to what kind of error this "
+"is. See the [enum ErrorCode] constants.\n"
+"- [code]message[/code]: A custom message about this error.\n"
+"- [code]id[/code]: The request this error is a response to."
+msgstr ""
+
+#: doc/classes/JSONRPC.xml:61
+msgid ""
+"Given a Dictionary which takes the form of a JSON-RPC request: unpack the "
+"request and run it. Methods are resolved by looking at the field called "
+"\"method\" and looking for an equivalently named function in the JSONRPC "
+"object. If one is found that method is called.\n"
+"To add new supported methods extend the JSONRPC class and call [method "
+"process_action] on your subclass.\n"
+"[code]action[/code]: The action to be run, as a Dictionary in the form of a "
+"JSON-RPC request or notification."
+msgstr ""
+
+#: doc/classes/JSONRPC.xml:86
+msgid ""
+"A method call was requested but no function of that name existed in the "
+"JSONRPC subclass."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:4
+msgid "Kinematic body 3D node."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:7
+msgid ""
+"Kinematic bodies are special types of bodies that are meant to be user-"
+"controlled. They are not affected by physics at all; to other types of "
+"bodies, such as a character or a rigid body, these are the same as a static "
+"body. However, they have two main uses:\n"
+"[b]Simulated motion:[/b] When these bodies are moved manually, either from "
+"code or from an [AnimationPlayer] (with [member AnimationPlayer."
+"playback_process_mode] set to \"physics\"), the physics will automatically "
+"compute an estimate of their linear and angular velocity. This makes them "
+"very useful for moving platforms or other AnimationPlayer-controlled objects "
+"(like a door, a bridge that opens, etc).\n"
+"[b]Kinematic characters:[/b] KinematicBody also has an API for moving "
+"objects (the [method move_and_collide] and [method move_and_slide] methods) "
+"while performing collision tests. This makes them really useful to implement "
+"characters that collide against a world, but don't require advanced physics."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:12 doc/classes/KinematicBody2D.xml:12
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/physics/kinematic_character_2d."
+"html"
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:23
+msgid ""
+"Returns [code]true[/code] if the specified [code]axis[/code] is locked. See "
+"also [member move_lock_x], [member move_lock_y] and [member move_lock_z]."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:30
+msgid ""
+"Returns the floor's collision angle at the last collision point according to "
+"[code]up_direction[/code], which is [code]Vector3.UP[/code] by default. This "
+"value is always positive and only valid after calling [method "
+"move_and_slide] and when [method is_on_floor] returns [code]true[/code]."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:36 doc/classes/KinematicBody2D.xml:28
+msgid ""
+"Returns the surface normal of the floor at the last collision point. Only "
+"valid after calling [method move_and_slide] or [method "
+"move_and_slide_with_snap] and when [method is_on_floor] returns [code]true[/"
+"code]."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:42 doc/classes/KinematicBody2D.xml:34
+msgid ""
+"Returns the linear velocity of the floor at the last collision point. Only "
+"valid after calling [method move_and_slide] or [method "
+"move_and_slide_with_snap] and when [method is_on_floor] returns [code]true[/"
+"code]."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:48
+msgid ""
+"Returns a [KinematicCollision], which contains information about the latest "
+"collision that occurred during the last call to [method move_and_slide]."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:55
+msgid ""
+"Returns a [KinematicCollision], which contains information about a collision "
+"that occurred during the last call to [method move_and_slide] or [method "
+"move_and_slide_with_snap]. Since the body can collide several times in a "
+"single call to [method move_and_slide], you must specify the index of the "
+"collision in the range 0 to ([method get_slide_count] - 1)."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:61 doc/classes/KinematicBody2D.xml:59
+msgid ""
+"Returns the number of times the body collided and changed direction during "
+"the last call to [method move_and_slide] or [method "
+"move_and_slide_with_snap]."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:67 doc/classes/KinematicBody2D.xml:65
+msgid ""
+"Returns [code]true[/code] if the body collided with the ceiling on the last "
+"call of [method move_and_slide] or [method move_and_slide_with_snap]. "
+"Otherwise, returns [code]false[/code]."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:73 doc/classes/KinematicBody2D.xml:71
+msgid ""
+"Returns [code]true[/code] if the body collided with the floor on the last "
+"call of [method move_and_slide] or [method move_and_slide_with_snap]. "
+"Otherwise, returns [code]false[/code]."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:79 doc/classes/KinematicBody2D.xml:77
+msgid ""
+"Returns [code]true[/code] if the body collided with a wall on the last call "
+"of [method move_and_slide] or [method move_and_slide_with_snap]. Otherwise, "
+"returns [code]false[/code]."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:89
+msgid ""
+"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
+"it collides. Returns a [KinematicCollision], which contains information "
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
+"If [code]test_only[/code] is [code]true[/code], the body does not move but "
+"the would-be collision information is given."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:102
+msgid ""
+"Moves the body along a vector. If the body collides with another, it will "
+"slide along the other body rather than stop immediately. If the other body "
+"is a [KinematicBody] or [RigidBody], it will also be affected by the motion "
+"of the other body. You can use this to make moving and rotating platforms, "
+"or to make nodes push other nodes.\n"
+"This method should be used in [method Node._physics_process] (or in a method "
+"called by [method Node._physics_process]), as it uses the physics step's "
+"[code]delta[/code] value automatically in calculations. Otherwise, the "
+"simulation will run at an incorrect speed.\n"
+"[code]linear_velocity[/code] is the velocity vector (typically meters per "
+"second). Unlike in [method move_and_collide], you should [i]not[/i] multiply "
+"it by [code]delta[/code] — the physics engine handles applying the "
+"velocity.\n"
+"[code]up_direction[/code] is the up direction, used to determine what is a "
+"wall and what is a floor or a ceiling. If set to the default value of "
+"[code]Vector3(0, 0, 0)[/code], everything is considered a wall.\n"
+"If [code]stop_on_slope[/code] is [code]true[/code], body will not slide on "
+"slopes when you include gravity in [code]linear_velocity[/code] and the body "
+"is standing still.\n"
+"If the body collides, it will change direction a maximum of "
+"[code]max_slides[/code] times before it stops.\n"
+"[code]floor_max_angle[/code] is the maximum angle (in radians) where a slope "
+"is still considered a floor (or a ceiling), rather than a wall. The default "
+"value equals 45 degrees.\n"
+"If [code]infinite_inertia[/code] is [code]true[/code], body will be able to "
+"push [RigidBody] nodes, but it won't also detect any collisions with them. "
+"If [code]false[/code], it will interact with [RigidBody] nodes like with "
+"[StaticBody].\n"
+"Returns the [code]linear_velocity[/code] vector, rotated and/or scaled if a "
+"slide collision occurred. To get detailed information about collisions that "
+"occurred, use [method get_slide_collision].\n"
+"When the body touches a moving platform, the platform's velocity is "
+"automatically added to the body motion. If a collision occurs due to the "
+"platform's motion, it will always be first in the slide collisions."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:124
+msgid ""
+"Moves the body while keeping it attached to slopes. Similar to [method "
+"move_and_slide].\n"
+"As long as the [code]snap[/code] vector is in contact with the ground, the "
+"body will remain attached to the surface. This means you must disable snap "
+"in order to jump, for example. You can do this by setting [code]snap[/code] "
+"to [code](0, 0, 0)[/code] or by using [method move_and_slide] instead."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:133
+msgid ""
+"Locks or unlocks the specified [code]axis[/code] depending on the value of "
+"[code]lock[/code]. See also [member move_lock_x], [member move_lock_y] and "
+"[member move_lock_z]."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:142
+msgid ""
+"Checks for collisions without moving the body. Virtually sets the node's "
+"position, scale and rotation to that of the given [Transform], then tries to "
+"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:149
+msgid "Lock the body's X axis movement."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:152
+msgid "Lock the body's Y axis movement."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:155
+msgid "Lock the body's Z axis movement."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
+msgid ""
+"Extra margin used for collision recovery in motion functions (see [method "
+"move_and_collide], [method move_and_slide], [method "
+"move_and_slide_with_snap]).\n"
+"If the body is at least this close to another body, it will consider them to "
+"be colliding and will be pushed away before performing the actual motion.\n"
+"A higher value means it's more flexible for detecting collision, which helps "
+"with consistently detecting walls and floors.\n"
+"A lower value forces the collision algorithm to use more exact detection, so "
+"it can be used in cases that specifically require precision, e.g at very low "
+"scale to avoid visible jittering, or for stability with a stack of kinematic "
+"bodies."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
+msgid ""
+"If [code]true[/code], the body's movement will be synchronized to the "
+"physics frame. This is useful when animating movement via [AnimationPlayer], "
+"for example on moving platforms. Do [b]not[/b] use together with [method "
+"move_and_slide] or [method move_and_collide] functions."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:167
+msgid ""
+"Lock the body's X axis movement. Deprecated alias for [member "
+"axis_lock_motion_x]."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:170
+msgid ""
+"Lock the body's Y axis movement. Deprecated alias for [member "
+"axis_lock_motion_y]."
+msgstr ""
+
+#: doc/classes/KinematicBody.xml:173
+msgid ""
+"Lock the body's Z axis movement. Deprecated alias for [member "
+"axis_lock_motion_z]."
+msgstr ""
+
+#: doc/classes/KinematicBody2D.xml:4
+msgid "Kinematic body 2D node."
+msgstr ""
+
+#: doc/classes/KinematicBody2D.xml:7
+msgid ""
+"Kinematic bodies are special types of bodies that are meant to be user-"
+"controlled. They are not affected by physics at all; to other types of "
+"bodies, such as a character or a rigid body, these are the same as a static "
+"body. However, they have two main uses:\n"
+"[b]Simulated motion:[/b] When these bodies are moved manually, either from "
+"code or from an [AnimationPlayer] (with [member AnimationPlayer."
+"playback_process_mode] set to \"physics\"), the physics will automatically "
+"compute an estimate of their linear and angular velocity. This makes them "
+"very useful for moving platforms or other AnimationPlayer-controlled objects "
+"(like a door, a bridge that opens, etc).\n"
+"[b]Kinematic characters:[/b] KinematicBody2D also has an API for moving "
+"objects (the [method move_and_collide] and [method move_and_slide] methods) "
+"while performing collision tests. This makes them really useful to implement "
+"characters that collide against a world, but don't require advanced physics."
+msgstr ""
+
+#: doc/classes/KinematicBody2D.xml:13
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/physics/"
+"using_kinematic_body_2d.html"
+msgstr ""
+
+#: doc/classes/KinematicBody2D.xml:22
+msgid ""
+"Returns the floor's collision angle at the last collision point according to "
+"[code]up_direction[/code], which is [code]Vector2.UP[/code] by default. This "
+"value is always positive and only valid after calling [method "
+"move_and_slide] and when [method is_on_floor] returns [code]true[/code]."
+msgstr ""
+
+#: doc/classes/KinematicBody2D.xml:40
+msgid ""
+"Returns a [KinematicCollision2D], which contains information about the "
+"latest collision that occurred during the last call to [method "
+"move_and_slide]."
+msgstr ""
+
+#: doc/classes/KinematicBody2D.xml:47
+msgid ""
+"Returns a [KinematicCollision2D], which contains information about a "
+"collision that occurred during the last call to [method move_and_slide] or "
+"[method move_and_slide_with_snap]. Since the body can collide several times "
+"in a single call to [method move_and_slide], you must specify the index of "
+"the collision in the range 0 to ([method get_slide_count] - 1).\n"
+"[b]Example usage:[/b]\n"
+"[codeblock]\n"
+"for i in get_slide_count():\n"
+" var collision = get_slide_collision(i)\n"
+" print(\"Collided with: \", collision.collider.name)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/KinematicBody2D.xml:87
+msgid ""
+"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
+"it collides. Returns a [KinematicCollision2D], which contains information "
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
+"If [code]test_only[/code] is [code]true[/code], the body does not move but "
+"the would-be collision information is given."
+msgstr ""
+
+#: doc/classes/KinematicBody2D.xml:100
+msgid ""
+"Moves the body along a vector. If the body collides with another, it will "
+"slide along the other body rather than stop immediately. If the other body "
+"is a [KinematicBody2D] or [RigidBody2D], it will also be affected by the "
+"motion of the other body. You can use this to make moving and rotating "
+"platforms, or to make nodes push other nodes.\n"
+"This method should be used in [method Node._physics_process] (or in a method "
+"called by [method Node._physics_process]), as it uses the physics step's "
+"[code]delta[/code] value automatically in calculations. Otherwise, the "
+"simulation will run at an incorrect speed.\n"
+"[code]linear_velocity[/code] is the velocity vector in pixels per second. "
+"Unlike in [method move_and_collide], you should [i]not[/i] multiply it by "
+"[code]delta[/code] — the physics engine handles applying the velocity.\n"
+"[code]up_direction[/code] is the up direction, used to determine what is a "
+"wall and what is a floor or a ceiling. If set to the default value of "
+"[code]Vector2(0, 0)[/code], everything is considered a wall. This is useful "
+"for topdown games.\n"
+"If [code]stop_on_slope[/code] is [code]true[/code], body will not slide on "
+"slopes when you include gravity in [code]linear_velocity[/code] and the body "
+"is standing still.\n"
+"If the body collides, it will change direction a maximum of "
+"[code]max_slides[/code] times before it stops.\n"
+"[code]floor_max_angle[/code] is the maximum angle (in radians) where a slope "
+"is still considered a floor (or a ceiling), rather than a wall. The default "
+"value equals 45 degrees.\n"
+"If [code]infinite_inertia[/code] is [code]true[/code], body will be able to "
+"push [RigidBody2D] nodes, but it won't also detect any collisions with them. "
+"If [code]false[/code], it will interact with [RigidBody2D] nodes like with "
+"[StaticBody2D].\n"
+"Returns the [code]linear_velocity[/code] vector, rotated and/or scaled if a "
+"slide collision occurred. To get detailed information about collisions that "
+"occurred, use [method get_slide_collision].\n"
+"When the body touches a moving platform, the platform's velocity is "
+"automatically added to the body motion. If a collision occurs due to the "
+"platform's motion, it will always be first in the slide collisions."
+msgstr ""
+
+#: doc/classes/KinematicBody2D.xml:122
+msgid ""
+"Moves the body while keeping it attached to slopes. Similar to [method "
+"move_and_slide].\n"
+"As long as the [code]snap[/code] vector is in contact with the ground, the "
+"body will remain attached to the surface. This means you must disable snap "
+"in order to jump, for example. You can do this by setting [code]snap[/code] "
+"to [code](0, 0)[/code] or by using [method move_and_slide] instead."
+msgstr ""
+
+#: doc/classes/KinematicBody2D.xml:132
+msgid ""
+"Checks for collisions without moving the body. Virtually sets the node's "
+"position, scale and rotation to that of the given [Transform2D], then tries "
+"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
+msgstr ""
+
+#: doc/classes/KinematicCollision.xml:4
+msgid "Collision data for [KinematicBody] collisions."
+msgstr ""
+
+#: doc/classes/KinematicCollision.xml:7
+msgid ""
+"Contains collision data for [KinematicBody] collisions. When a "
+"[KinematicBody] is moved using [method KinematicBody.move_and_collide], it "
+"stops if it detects a collision with another body. If a collision is "
+"detected, a KinematicCollision object is returned.\n"
+"This object contains information about the collision, including the "
+"colliding object, the remaining motion, and the collision position. This "
+"information can be used to calculate a collision response."
+msgstr ""
+
+#: doc/classes/KinematicCollision.xml:17
+msgid ""
+"The collision angle according to [code]up_direction[/code], which is "
+"[code]Vector3.UP[/code] by default. This value is always positive."
+msgstr ""
+
+#: doc/classes/KinematicCollision.xml:23
+#: doc/classes/KinematicCollision2D.xml:23
+msgid "The colliding body."
+msgstr ""
+
+#: doc/classes/KinematicCollision.xml:26
+#: doc/classes/KinematicCollision2D.xml:26
+msgid ""
+"The colliding body's unique instance ID. See [method Object.get_instance_id]."
+msgstr ""
+
+#: doc/classes/KinematicCollision.xml:29
+#: doc/classes/KinematicCollision2D.xml:29
+msgid "The colliding body's metadata. See [Object]."
+msgstr ""
+
+#: doc/classes/KinematicCollision.xml:32
+msgid "The colliding body's [RID] used by the [PhysicsServer]."
+msgstr ""
+
+#: doc/classes/KinematicCollision.xml:35
+#: doc/classes/KinematicCollision2D.xml:35
+msgid "The colliding body's shape."
+msgstr ""
+
+#: doc/classes/KinematicCollision.xml:38
+msgid "The colliding shape's index. See [CollisionObject]."
+msgstr ""
+
+#: doc/classes/KinematicCollision.xml:41
+#: doc/classes/KinematicCollision2D.xml:41
+msgid "The colliding object's velocity."
+msgstr ""
+
+#: doc/classes/KinematicCollision.xml:44
+#: doc/classes/KinematicCollision2D.xml:44
+msgid "The moving object's colliding shape."
+msgstr ""
+
+#: doc/classes/KinematicCollision.xml:47
+#: doc/classes/KinematicCollision2D.xml:47
+msgid "The colliding body's shape's normal at the point of collision."
+msgstr ""
+
+#: doc/classes/KinematicCollision.xml:50
+#: doc/classes/KinematicCollision2D.xml:50
+msgid "The point of collision, in global coordinates."
+msgstr ""
+
+#: doc/classes/KinematicCollision.xml:53
+#: doc/classes/KinematicCollision2D.xml:53
+msgid "The moving object's remaining movement vector."
+msgstr ""
+
+#: doc/classes/KinematicCollision.xml:56
+#: doc/classes/KinematicCollision2D.xml:56
+msgid "The distance the moving object traveled before collision."
+msgstr ""
+
+#: doc/classes/KinematicCollision2D.xml:4
+msgid "Collision data for [KinematicBody2D] collisions."
+msgstr ""
+
+#: doc/classes/KinematicCollision2D.xml:7
+msgid ""
+"Contains collision data for [KinematicBody2D] collisions. When a "
+"[KinematicBody2D] is moved using [method KinematicBody2D.move_and_collide], "
+"it stops if it detects a collision with another body. If a collision is "
+"detected, a KinematicCollision2D object is returned.\n"
+"This object contains information about the collision, including the "
+"colliding object, the remaining motion, and the collision position. This "
+"information can be used to calculate a collision response."
+msgstr ""
+
+#: doc/classes/KinematicCollision2D.xml:17
+msgid ""
+"The collision angle according to [code]up_direction[/code], which is "
+"[code]Vector2.UP[/code] by default. This value is always positive."
+msgstr ""
+
+#: doc/classes/KinematicCollision2D.xml:32
+msgid "The colliding body's [RID] used by the [Physics2DServer]."
+msgstr ""
+
+#: doc/classes/KinematicCollision2D.xml:38
+msgid "The colliding shape's index. See [CollisionObject2D]."
+msgstr ""
+
+#: doc/classes/Label.xml:4
+msgid ""
+"Displays plain text in a line or wrapped inside a rectangle. For formatted "
+"text, use [RichTextLabel]."
+msgstr ""
+
+#: doc/classes/Label.xml:7
+msgid ""
+"Label displays plain text on the screen. It gives you control over the "
+"horizontal and vertical alignment and can wrap the text inside the node's "
+"bounding rectangle. It doesn't support bold, italics, or other formatting. "
+"For that, use [RichTextLabel] instead.\n"
+"[b]Note:[/b] Contrarily to most other [Control]s, Label's [member Control."
+"mouse_filter] defaults to [constant Control.MOUSE_FILTER_IGNORE] (i.e. it "
+"doesn't react to mouse input events). This implies that a label won't "
+"display any configured [member Control.hint_tooltip], unless you change its "
+"mouse filter.\n"
+"[b]Note:[/b] Unicode characters after [code]0xffff[/code] (such as most "
+"emoji) are [i]not[/i] supported on Windows. They will display as unknown "
+"characters instead. This will be resolved in Godot 4.0."
+msgstr ""
+
+#: doc/classes/Label.xml:18
+msgid "Returns the amount of lines of text the Label has."
+msgstr ""
+
+#: doc/classes/Label.xml:24
+msgid "Returns the font size in pixels."
+msgstr ""
+
+#: doc/classes/Label.xml:30
+msgid ""
+"Returns the total number of printable characters in the text (excluding "
+"spaces and newlines)."
+msgstr ""
+
+#: doc/classes/Label.xml:36
+msgid ""
+"Returns the number of lines shown. Useful if the [Label]'s height cannot "
+"currently display all lines."
+msgstr ""
+
+#: doc/classes/Label.xml:42
+msgid ""
+"Controls the text's horizontal align. Supports left, center, right, and "
+"fill, or justify. Set it to one of the [enum Align] constants."
+msgstr ""
+
+#: doc/classes/Label.xml:45
+msgid ""
+"If [code]true[/code], wraps the text inside the node's bounding rectangle. "
+"If you resize the node, it will change its height automatically to show all "
+"the text."
+msgstr ""
+
+#: doc/classes/Label.xml:48
+msgid ""
+"If [code]true[/code], the Label only shows the text that fits inside its "
+"bounding rectangle and will clip text horizontally."
+msgstr ""
+
+#: doc/classes/Label.xml:51
+msgid ""
+"The node ignores the first [code]lines_skipped[/code] lines before it starts "
+"to display text."
+msgstr ""
+
+#: doc/classes/Label.xml:54
+msgid "Limits the lines of text the node shows on screen."
+msgstr ""
+
+#: doc/classes/Label.xml:58
+msgid ""
+"Limits the amount of visible characters. If you set [code]percent_visible[/"
+"code] to 0.5, only up to half of the text's characters will display on "
+"screen. Useful to animate the text in a dialog box."
+msgstr ""
+
+#: doc/classes/Label.xml:62
+msgid "The text to display on screen."
+msgstr ""
+
+#: doc/classes/Label.xml:65
+msgid "If [code]true[/code], all the text displays as UPPERCASE."
+msgstr ""
+
+#: doc/classes/Label.xml:68
+msgid ""
+"Controls the text's vertical align. Supports top, center, bottom, and fill. "
+"Set it to one of the [enum VAlign] constants."
+msgstr ""
+
+#: doc/classes/Label.xml:71
+msgid "Restricts the number of characters to display. Set to -1 to disable."
+msgstr ""
+
+#: doc/classes/Label.xml:76
+msgid "Align rows to the left (default)."
+msgstr ""
+
+#: doc/classes/Label.xml:79
+msgid "Align rows centered."
+msgstr ""
+
+#: doc/classes/Label.xml:82
+msgid "Align rows to the right."
+msgstr ""
+
+#: doc/classes/Label.xml:85
+msgid "Expand row whitespaces to fit the width."
+msgstr ""
+
+#: doc/classes/Label.xml:88
+msgid "Align the whole text to the top."
+msgstr ""
+
+#: doc/classes/Label.xml:91
+msgid "Align the whole text to the center."
+msgstr ""
+
+#: doc/classes/Label.xml:94
+msgid "Align the whole text to the bottom."
+msgstr ""
+
+#: doc/classes/Label.xml:97
+msgid "Align the whole text by spreading the rows."
+msgstr ""
+
+#: doc/classes/Label.xml:102
+msgid "[Font] used for the [Label]'s text."
+msgstr ""
+
+#: doc/classes/Label.xml:105
+msgid "Default text [Color] of the [Label]."
+msgstr ""
+
+#: doc/classes/Label.xml:108
+msgid "[Color] of the text's shadow effect."
+msgstr ""
+
+#: doc/classes/Label.xml:111
+msgid "The tint of [Font]'s outline. See [member DynamicFont.outline_color]."
+msgstr ""
+
+#: doc/classes/Label.xml:114
+msgid "Vertical space between lines in multiline [Label]."
+msgstr ""
+
+#: doc/classes/Label.xml:117
+msgid "Background [StyleBox] for the [Label]."
+msgstr ""
+
+#: doc/classes/Label.xml:120
+msgid ""
+"Boolean value. If set to 1 ([code]true[/code]), the shadow will be displayed "
+"around the whole text as an outline."
+msgstr ""
+
+#: doc/classes/Label.xml:123
+msgid "The horizontal offset of the text's shadow."
+msgstr ""
+
+#: doc/classes/Label.xml:126
+msgid "The vertical offset of the text's shadow."
+msgstr ""
+
+#: doc/classes/LargeTexture.xml:4
+msgid ""
+"[i]Deprecated.[/i] A [Texture] capable of storing many smaller textures with "
+"offsets."
+msgstr ""
+
+#: doc/classes/LargeTexture.xml:7
+msgid ""
+"[i]Deprecated (will be removed in Godot 4.0).[/i] A [Texture] capable of "
+"storing many smaller textures with offsets.\n"
+"You can dynamically add pieces ([Texture]s) to this [LargeTexture] using "
+"different offsets."
+msgstr ""
+
+#: doc/classes/LargeTexture.xml:18
+msgid ""
+"Adds [code]texture[/code] to this [LargeTexture], starting on offset "
+"[code]ofs[/code]."
+msgstr ""
+
+#: doc/classes/LargeTexture.xml:24
+msgid "Clears the [LargeTexture]."
+msgstr ""
+
+#: doc/classes/LargeTexture.xml:30
+msgid "Returns the number of pieces currently in this [LargeTexture]."
+msgstr ""
+
+#: doc/classes/LargeTexture.xml:37
+msgid "Returns the offset of the piece with the index [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/LargeTexture.xml:44
+msgid "Returns the [Texture] of the piece with the index [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/LargeTexture.xml:52
+msgid ""
+"Sets the offset of the piece with the index [code]idx[/code] to [code]ofs[/"
+"code]."
+msgstr ""
+
+#: doc/classes/LargeTexture.xml:60
+msgid ""
+"Sets the [Texture] of the piece with index [code]idx[/code] to "
+"[code]texture[/code]."
+msgstr ""
+
+#: doc/classes/LargeTexture.xml:67
+msgid "Sets the size of this [LargeTexture]."
+msgstr ""
+
+#: doc/classes/Light.xml:4
+msgid "Provides a base class for different kinds of light nodes."
+msgstr ""
+
+#: doc/classes/Light.xml:7
+msgid ""
+"Light is the [i]abstract[/i] base class for light nodes. As it can't be "
+"instanced, it shouldn't be used directly. Other types of light nodes inherit "
+"from it. Light contains the common variables and parameters used for "
+"lighting."
+msgstr ""
+
+#: doc/classes/Light.xml:18
+msgid "Returns the value of the specified [enum Light.Param] parameter."
+msgstr ""
+
+#: doc/classes/Light.xml:26
+msgid "Sets the value of the specified [enum Light.Param] parameter."
+msgstr ""
+
+#: doc/classes/Light.xml:32
+msgid ""
+"If [code]true[/code], the light only appears in the editor and will not be "
+"visible at runtime."
+msgstr ""
+
+#: doc/classes/Light.xml:35
+msgid "The light's bake mode. See [enum BakeMode]."
+msgstr ""
+
+#: doc/classes/Light.xml:38
+msgid ""
+"The light's color. An [i]overbright[/i] color can be used to achieve a "
+"result equivalent to increasing the light's [member light_energy]."
+msgstr ""
+
+#: doc/classes/Light.xml:41
+msgid "The light will affect objects in the selected layers."
+msgstr ""
+
+#: doc/classes/Light.xml:44
+msgid ""
+"The light's strength multiplier (this is not a physical unit). For "
+"[OmniLight] and [SpotLight], changing this value will only change the light "
+"color's intensity, not the light's radius."
+msgstr ""
+
+#: doc/classes/Light.xml:47
+msgid ""
+"Secondary multiplier used with indirect light (light bounces). This works on "
+"both [BakedLightmap] and [GIProbe]."
+msgstr ""
+
+#: doc/classes/Light.xml:50
+msgid ""
+"If [code]true[/code], the light's effect is reversed, darkening areas and "
+"casting bright shadows."
+msgstr ""
+
+#: doc/classes/Light.xml:53
+msgid ""
+"The size of the light in Godot units. Only considered in baked lightmaps and "
+"only if [member light_bake_mode] is set to [constant BAKE_ALL]. Increasing "
+"this value will make the shadows appear blurrier. This can be used to "
+"simulate area lights to an extent."
+msgstr ""
+
+#: doc/classes/Light.xml:56
+msgid ""
+"The intensity of the specular blob in objects affected by the light. At "
+"[code]0[/code], the light becomes a pure diffuse light. When not baking "
+"emission, this can be used to avoid unrealistic reflections when placing "
+"lights above an emissive surface."
+msgstr ""
+
+#: doc/classes/Light.xml:59
+msgid ""
+"Used to adjust shadow appearance. Too small a value results in self-"
+"shadowing (\"shadow acne\"), while too large a value causes shadows to "
+"separate from casters (\"peter-panning\"). Adjust as needed."
+msgstr ""
+
+#: doc/classes/Light.xml:62
+msgid "The color of shadows cast by this light."
+msgstr ""
+
+#: doc/classes/Light.xml:65
+msgid "Attempts to reduce [member shadow_bias] gap."
+msgstr ""
+
+#: doc/classes/Light.xml:68
+msgid "If [code]true[/code], the light will cast shadows."
+msgstr ""
+
+#: doc/classes/Light.xml:71
+msgid ""
+"If [code]true[/code], reverses the backface culling of the mesh. This can be "
+"useful when you have a flat mesh that has a light behind it. If you need to "
+"cast a shadow on both sides of the mesh, set the mesh to use double-sided "
+"shadows with [constant GeometryInstance.SHADOW_CASTING_SETTING_DOUBLE_SIDED]."
+msgstr ""
+
+#: doc/classes/Light.xml:76
+msgid "Constant for accessing [member light_energy]."
+msgstr ""
+
+#: doc/classes/Light.xml:79
+msgid "Constant for accessing [member light_indirect_energy]."
+msgstr ""
+
+#: doc/classes/Light.xml:82
+msgid "Constant for accessing [member light_size]."
+msgstr ""
+
+#: doc/classes/Light.xml:85
+msgid "Constant for accessing [member light_specular]."
+msgstr ""
+
+#: doc/classes/Light.xml:88
+msgid ""
+"Constant for accessing [member OmniLight.omni_range] or [member SpotLight."
+"spot_range]."
+msgstr ""
+
+#: doc/classes/Light.xml:91
+msgid ""
+"Constant for accessing [member OmniLight.omni_attenuation] or [member "
+"SpotLight.spot_attenuation]."
+msgstr ""
+
+#: doc/classes/Light.xml:94
+msgid "Constant for accessing [member SpotLight.spot_angle]."
+msgstr ""
+
+#: doc/classes/Light.xml:97
+msgid "Constant for accessing [member SpotLight.spot_angle_attenuation]."
+msgstr ""
+
+#: doc/classes/Light.xml:100
+msgid "Constant for accessing [member shadow_contact]."
+msgstr ""
+
+#: doc/classes/Light.xml:103
+msgid ""
+"Constant for accessing [member DirectionalLight."
+"directional_shadow_max_distance]."
+msgstr ""
+
+#: doc/classes/Light.xml:106
+msgid ""
+"Constant for accessing [member DirectionalLight.directional_shadow_split_1]."
+msgstr ""
+
+#: doc/classes/Light.xml:109
+msgid ""
+"Constant for accessing [member DirectionalLight.directional_shadow_split_2]."
+msgstr ""
+
+#: doc/classes/Light.xml:112
+msgid ""
+"Constant for accessing [member DirectionalLight.directional_shadow_split_3]."
+msgstr ""
+
+#: doc/classes/Light.xml:115
+msgid ""
+"Constant for accessing [member DirectionalLight."
+"directional_shadow_normal_bias]."
+msgstr ""
+
+#: doc/classes/Light.xml:118
+msgid "Constant for accessing [member shadow_bias]."
+msgstr ""
+
+#: doc/classes/Light.xml:121
+msgid ""
+"Constant for accessing [member DirectionalLight."
+"directional_shadow_bias_split_scale]."
+msgstr ""
+
+#: doc/classes/Light.xml:127
+msgid ""
+"Light is ignored when baking.\n"
+"[b]Note:[/b] Hiding a light does [i]not[/i] affect baking."
+msgstr ""
+
+#: doc/classes/Light.xml:131
+msgid "Only indirect lighting will be baked (default)."
+msgstr ""
+
+#: doc/classes/Light.xml:134
+msgid ""
+"Both direct and indirect light will be baked.\n"
+"[b]Note:[/b] You should hide the light if you don't want it to appear twice "
+"(dynamic and baked)."
+msgstr ""
+
+#: doc/classes/Light2D.xml:4
+msgid "Casts light in a 2D environment."
+msgstr ""
+
+#: doc/classes/Light2D.xml:7
+msgid ""
+"Casts light in a 2D environment. Light is defined by a (usually grayscale) "
+"texture, a color, an energy value, a mode (see constants), and various other "
+"parameters (range and shadows-related).\n"
+"[b]Note:[/b] Light2D can also be used as a mask."
+msgstr ""
+
+#: doc/classes/Light2D.xml:11 doc/classes/LightOccluder2D.xml:10
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/2d/2d_lights_and_shadows.html"
+msgstr ""
+
+#: doc/classes/Light2D.xml:17
+msgid "The Light2D's [Color]."
+msgstr ""
+
+#: doc/classes/Light2D.xml:20
+msgid "If [code]true[/code], Light2D will only appear when editing the scene."
+msgstr ""
+
+#: doc/classes/Light2D.xml:23
+msgid "If [code]true[/code], Light2D will emit light."
+msgstr ""
+
+#: doc/classes/Light2D.xml:26
+msgid ""
+"The Light2D's energy value. The larger the value, the stronger the light."
+msgstr ""
+
+#: doc/classes/Light2D.xml:29
+msgid "The Light2D's mode. See [enum Mode] constants for values."
+msgstr ""
+
+#: doc/classes/Light2D.xml:32
+msgid "The offset of the Light2D's [code]texture[/code]."
+msgstr ""
+
+#: doc/classes/Light2D.xml:35
+msgid "The height of the Light2D. Used with 2D normal mapping."
+msgstr ""
+
+#: doc/classes/Light2D.xml:38
+msgid ""
+"The layer mask. Only objects with a matching mask will be affected by the "
+"Light2D."
+msgstr ""
+
+#: doc/classes/Light2D.xml:41
+msgid "Maximum layer value of objects that are affected by the Light2D."
+msgstr ""
+
+#: doc/classes/Light2D.xml:44
+msgid "Minimum layer value of objects that are affected by the Light2D."
+msgstr ""
+
+#: doc/classes/Light2D.xml:47
+msgid ""
+"Maximum [code]z[/code] value of objects that are affected by the Light2D."
+msgstr ""
+
+#: doc/classes/Light2D.xml:50
+msgid ""
+"Minimum [code]z[/code] value of objects that are affected by the Light2D."
+msgstr ""
+
+#: doc/classes/Light2D.xml:53
+msgid "Shadow buffer size."
+msgstr ""
+
+#: doc/classes/Light2D.xml:56
+msgid "[Color] of shadows cast by the Light2D."
+msgstr ""
+
+#: doc/classes/Light2D.xml:59
+msgid "If [code]true[/code], the Light2D will cast shadows."
+msgstr ""
+
+#: doc/classes/Light2D.xml:62
+msgid "Shadow filter type. See [enum ShadowFilter] for possible values."
+msgstr ""
+
+#: doc/classes/Light2D.xml:65
+msgid "Smoothing value for shadows."
+msgstr ""
+
+#: doc/classes/Light2D.xml:68
+msgid "Smooth shadow gradient length."
+msgstr ""
+
+#: doc/classes/Light2D.xml:71
+msgid ""
+"The shadow mask. Used with [LightOccluder2D] to cast shadows. Only occluders "
+"with a matching light mask will cast shadows."
+msgstr ""
+
+#: doc/classes/Light2D.xml:74
+msgid "[Texture] used for the Light2D's appearance."
+msgstr ""
+
+#: doc/classes/Light2D.xml:77
+msgid "The [code]texture[/code]'s scale factor."
+msgstr ""
+
+#: doc/classes/Light2D.xml:82
+msgid ""
+"Adds the value of pixels corresponding to the Light2D to the values of "
+"pixels under it. This is the common behavior of a light."
+msgstr ""
+
+#: doc/classes/Light2D.xml:85
+msgid ""
+"Subtracts the value of pixels corresponding to the Light2D to the values of "
+"pixels under it, resulting in inversed light effect."
+msgstr ""
+
+#: doc/classes/Light2D.xml:88
+msgid ""
+"Mix the value of pixels corresponding to the Light2D to the values of pixels "
+"under it by linear interpolation."
+msgstr ""
+
+#: doc/classes/Light2D.xml:91
+msgid ""
+"The light texture of the Light2D is used as a mask, hiding or revealing "
+"parts of the screen underneath depending on the value of each pixel of the "
+"light (mask) texture."
+msgstr ""
+
+#: doc/classes/Light2D.xml:94
+msgid "No filter applies to the shadow map. See [member shadow_filter]."
+msgstr ""
+
+#: doc/classes/Light2D.xml:97
+msgid ""
+"Percentage closer filtering (3 samples) applies to the shadow map. See "
+"[member shadow_filter]."
+msgstr ""
+
+#: doc/classes/Light2D.xml:100
+msgid ""
+"Percentage closer filtering (5 samples) applies to the shadow map. See "
+"[member shadow_filter]."
+msgstr ""
+
+#: doc/classes/Light2D.xml:103
+msgid ""
+"Percentage closer filtering (7 samples) applies to the shadow map. See "
+"[member shadow_filter]."
+msgstr ""
+
+#: doc/classes/Light2D.xml:106
+msgid ""
+"Percentage closer filtering (9 samples) applies to the shadow map. See "
+"[member shadow_filter]."
+msgstr ""
+
+#: doc/classes/Light2D.xml:109
+msgid ""
+"Percentage closer filtering (13 samples) applies to the shadow map. See "
+"[member shadow_filter]."
+msgstr ""
+
+#: doc/classes/LightOccluder2D.xml:4
+msgid "Occludes light cast by a Light2D, casting shadows."
+msgstr ""
+
+#: doc/classes/LightOccluder2D.xml:7
+msgid ""
+"Occludes light cast by a Light2D, casting shadows. The LightOccluder2D must "
+"be provided with an [OccluderPolygon2D] in order for the shadow to be "
+"computed."
+msgstr ""
+
+#: doc/classes/LightOccluder2D.xml:16
+msgid ""
+"The LightOccluder2D's light mask. The LightOccluder2D will cast shadows only "
+"from Light2D(s) that have the same light mask(s)."
+msgstr ""
+
+#: doc/classes/LightOccluder2D.xml:19
+msgid "The [OccluderPolygon2D] used to compute the shadow."
+msgstr ""
+
+#: doc/classes/Line2D.xml:4
+msgid "A 2D line."
+msgstr ""
+
+#: doc/classes/Line2D.xml:7
+msgid ""
+"A line through several points in 2D space.\n"
+"[b]Note:[/b] By default, Godot can only draw up to 4,096 polygon points at a "
+"time. To increase this limit, open the Project Settings and increase [member "
+"ProjectSettings.rendering/limits/buffers/canvas_polygon_buffer_size_kb] and "
+"[member ProjectSettings.rendering/limits/buffers/"
+"canvas_polygon_index_buffer_size_kb]."
+msgstr ""
+
+#: doc/classes/Line2D.xml:20
+msgid ""
+"Adds a point at the [code]position[/code]. Appends the point at the end of "
+"the line.\n"
+"If [code]at_position[/code] is given, the point is inserted before the point "
+"number [code]at_position[/code], moving that point (and every point after) "
+"after the inserted point. If [code]at_position[/code] is not given, or is an "
+"illegal value ([code]at_position < 0[/code] or [code]at_position >= [method "
+"get_point_count][/code]), the point will be appended at the end of the point "
+"list."
+msgstr ""
+
+#: doc/classes/Line2D.xml:27
+msgid "Removes all points from the line."
+msgstr ""
+
+#: doc/classes/Line2D.xml:33
+msgid "Returns the Line2D's amount of points."
+msgstr ""
+
+#: doc/classes/Line2D.xml:40
+msgid "Returns point [code]i[/code]'s position."
+msgstr ""
+
+#: doc/classes/Line2D.xml:47
+msgid "Removes the point at index [code]i[/code] from the line."
+msgstr ""
+
+#: doc/classes/Line2D.xml:55
+msgid ""
+"Overwrites the position in point [code]i[/code] with the supplied "
+"[code]position[/code]."
+msgstr ""
+
+#: doc/classes/Line2D.xml:61
+msgid ""
+"If [code]true[/code], the line's border will be anti-aliased.\n"
+"[b]Note:[/b] Line2D is not accelerated by batching when being anti-aliased."
+msgstr ""
+
+#: doc/classes/Line2D.xml:65
+msgid ""
+"Controls the style of the line's first point. Use [enum LineCapMode] "
+"constants."
+msgstr ""
+
+#: doc/classes/Line2D.xml:68
+msgid "The line's color. Will not be used if a gradient is set."
+msgstr ""
+
+#: doc/classes/Line2D.xml:71
+msgid ""
+"Controls the style of the line's last point. Use [enum LineCapMode] "
+"constants."
+msgstr ""
+
+#: doc/classes/Line2D.xml:74
+msgid ""
+"The gradient is drawn through the whole line from start to finish. The "
+"default color will not be used if a gradient is set."
+msgstr ""
+
+#: doc/classes/Line2D.xml:77
+msgid "The style for the points between the start and the end."
+msgstr ""
+
+#: doc/classes/Line2D.xml:80
+msgid ""
+"The points that form the lines. The line is drawn between every point set in "
+"this array. Points are interpreted as local vectors."
+msgstr ""
+
+#: doc/classes/Line2D.xml:83
+msgid ""
+"The smoothness of the rounded joints and caps. This is only used if a cap or "
+"joint is set as round."
+msgstr ""
+
+#: doc/classes/Line2D.xml:86
+msgid ""
+"The direction difference in radians between vector points. This value is "
+"only used if [code]joint mode[/code] is set to [constant LINE_JOINT_SHARP]."
+msgstr ""
+
+#: doc/classes/Line2D.xml:89
+msgid ""
+"The texture used for the line's texture. Uses [code]texture_mode[/code] for "
+"drawing style."
+msgstr ""
+
+#: doc/classes/Line2D.xml:92
+msgid ""
+"The style to render the [code]texture[/code] on the line. Use [enum "
+"LineTextureMode] constants."
+msgstr ""
+
+#: doc/classes/Line2D.xml:95
+msgid "The line's width."
+msgstr ""
+
+#: doc/classes/Line2D.xml:98
+msgid ""
+"The line's width varies with the curve. The original width is simply "
+"multiply by the value of the Curve."
+msgstr ""
+
+#: doc/classes/Line2D.xml:103
+msgid ""
+"The line's joints will be pointy. If [code]sharp_limit[/code] is greater "
+"than the rotation of a joint, it becomes a bevel joint instead."
+msgstr ""
+
+#: doc/classes/Line2D.xml:106
+msgid "The line's joints will be bevelled/chamfered."
+msgstr ""
+
+#: doc/classes/Line2D.xml:109
+msgid "The line's joints will be rounded."
+msgstr ""
+
+#: doc/classes/Line2D.xml:112
+msgid "Don't draw a line cap."
+msgstr ""
+
+#: doc/classes/Line2D.xml:115
+msgid "Draws the line cap as a box."
+msgstr ""
+
+#: doc/classes/Line2D.xml:118
+msgid "Draws the line cap as a circle."
+msgstr ""
+
+#: doc/classes/Line2D.xml:121
+msgid ""
+"Takes the left pixels of the texture and renders it over the whole line."
+msgstr ""
+
+#: doc/classes/Line2D.xml:124
+msgid ""
+"Tiles the texture over the line. The texture must be imported with "
+"[b]Repeat[/b] enabled for it to work properly."
+msgstr ""
+
+#: doc/classes/Line2D.xml:127
+msgid ""
+"Stretches the texture across the line. Import the texture with [b]Repeat[/b] "
+"disabled for best results."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:4
+msgid "Control that provides single-line string editing."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:7
+msgid ""
+"LineEdit provides a single-line string editor, used for text fields.\n"
+"It features many built-in shortcuts which will always be available "
+"([code]Ctrl[/code] here maps to [code]Command[/code] on macOS):\n"
+"- Ctrl + C: Copy\n"
+"- Ctrl + X: Cut\n"
+"- Ctrl + V or Ctrl + Y: Paste/\"yank\"\n"
+"- Ctrl + Z: Undo\n"
+"- Ctrl + Shift + Z: Redo\n"
+"- Ctrl + U: Delete text from the cursor position to the beginning of the "
+"line\n"
+"- Ctrl + K: Delete text from the cursor position to the end of the line\n"
+"- Ctrl + A: Select all text\n"
+"- Up/Down arrow: Move the cursor to the beginning/end of the line\n"
+"On macOS, some extra keyboard shortcuts are available:\n"
+"- Ctrl + F: Like the right arrow key, move the cursor one character right\n"
+"- Ctrl + B: Like the left arrow key, move the cursor one character left\n"
+"- Ctrl + P: Like the up arrow key, move the cursor to the previous line\n"
+"- Ctrl + N: Like the down arrow key, move the cursor to the next line\n"
+"- Ctrl + D: Like the Delete key, delete the character on the right side of "
+"cursor\n"
+"- Ctrl + H: Like the Backspace key, delete the character on the left side of "
+"the cursor\n"
+"- Command + Left arrow: Like the Home key, move the cursor to the beginning "
+"of the line\n"
+"- Command + Right arrow: Like the End key, move the cursor to the end of the "
+"line"
+msgstr ""
+
+#: doc/classes/LineEdit.xml:35
+msgid ""
+"Adds [code]text[/code] after the cursor. If the resulting value is longer "
+"than [member max_length], nothing happens."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:41
+msgid "Erases the [LineEdit]'s [member text]."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:47
+msgid ""
+"Deletes one character at the cursor's current position (equivalent to "
+"pressing the [code]Delete[/code] key)."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:55
+msgid ""
+"Deletes a section of the [member text] going from position "
+"[code]from_column[/code] to [code]to_column[/code]. Both parameters should "
+"be within the text's length."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:61
+msgid "Clears the current selection."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:67
+msgid ""
+"Returns the [PopupMenu] of this [LineEdit]. By default, this menu is "
+"displayed when right-clicking on the [LineEdit].\n"
+"[b]Warning:[/b] This is a required internal node, removing and freeing it "
+"may cause a crash. If you wish to hide it or any of its children, use their "
+"[member CanvasItem.visible] property."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:74
+msgid ""
+"Returns the scroll offset due to [member caret_position], as a number of "
+"characters."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:81
+msgid "Executes a given action as defined in the [enum MenuItems] enum."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:89
+msgid ""
+"Selects characters inside [LineEdit] between [code]from[/code] and [code]to[/"
+"code]. By default, [code]from[/code] is at the beginning and [code]to[/code] "
+"at the end.\n"
+"[codeblock]\n"
+"text = \"Welcome\"\n"
+"select() # Will select \"Welcome\".\n"
+"select(4) # Will select \"ome\".\n"
+"select(2, 5) # Will select \"lco\".\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/LineEdit.xml:101
+msgid "Selects the whole [String]."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:107
+msgid "Text alignment as defined in the [enum Align] enum."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:110 doc/classes/TextEdit.xml:391
+msgid "If [code]true[/code], the caret (visual cursor) blinks."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:113 doc/classes/TextEdit.xml:394
+msgid "Duration (in seconds) of a caret's blinking cycle."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:116
+msgid ""
+"The cursor's position inside the [LineEdit]. When set, the text may scroll "
+"to accommodate it."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:119
+msgid ""
+"If [code]true[/code], the [LineEdit] will show a clear button if [code]text[/"
+"code] is not empty, which can be used to clear the text quickly."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:122
+msgid "If [code]true[/code], the context menu will appear when right-clicked."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:125
+msgid ""
+"If [code]false[/code], existing text cannot be modified and new text cannot "
+"be added."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:128
+msgid ""
+"If [code]true[/code], the [LineEdit] width will increase to stay longer than "
+"the [member text]. It will [b]not[/b] compress if the [member text] is "
+"shortened."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:132
+msgid ""
+"Maximum amount of characters that can be entered inside the [LineEdit]. If "
+"[code]0[/code], there is no limit.\n"
+"When a limit is defined, characters that would exceed [member max_length] "
+"are truncated. This happens both for existing [member text] contents when "
+"setting the max length, or for new text inserted in the [LineEdit], "
+"including pasting. If any input text is truncated, the [signal "
+"text_change_rejected] signal is emitted with the truncated substring as "
+"parameter.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"text = \"Hello world\"\n"
+"max_length = 5\n"
+"# `text` becomes \"Hello\".\n"
+"max_length = 10\n"
+"text += \" goodbye\"\n"
+"# `text` becomes \"Hello good\".\n"
+"# `text_change_rejected` is emitted with \"bye\" as parameter.\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/LineEdit.xml:147
+msgid ""
+"Opacity of the [member placeholder_text]. From [code]0[/code] to [code]1[/"
+"code]."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:150
+msgid ""
+"Text shown when the [LineEdit] is empty. It is [b]not[/b] the [LineEdit]'s "
+"default value (see [member text])."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:153
+msgid ""
+"Sets the icon that will appear in the right end of the [LineEdit] if there's "
+"no [member text], or always, if [member clear_button_enabled] is set to "
+"[code]false[/code]."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:156
+msgid ""
+"If [code]true[/code], every character is replaced with the secret character "
+"(see [member secret_character])."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:159
+msgid ""
+"The character to use to mask secret input (defaults to \"*\"). Only a single "
+"character can be used as the secret character."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:162
+msgid ""
+"If [code]false[/code], it's impossible to select the text using mouse nor "
+"keyboard."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:165
+msgid "If [code]false[/code], using shortcuts will be disabled."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:168
+msgid ""
+"String value of the [LineEdit].\n"
+"[b]Note:[/b] Changing text using this property won't emit the [signal "
+"text_changed] signal."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:172 doc/classes/TextEdit.xml:468
+msgid ""
+"If [code]true[/code], the native virtual keyboard is shown when focused on "
+"platforms that support it."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:179
+msgid ""
+"Emitted when appending text that overflows the [member max_length]. The "
+"appended text is truncated to fit [member max_length], and the part that "
+"couldn't fit is passed as the [code]rejected_substring[/code] argument."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:185 doc/classes/TextEdit.xml:506
+msgid "Emitted when the text changes."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:191
+msgid "Emitted when the user presses [constant KEY_ENTER] on the [LineEdit]."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:197
+msgid "Aligns the text on the left-hand side of the [LineEdit]."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:200
+msgid "Centers the text in the middle of the [LineEdit]."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:203
+msgid "Aligns the text on the right-hand side of the [LineEdit]."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:206
+msgid "Stretches whitespaces to fit the [LineEdit]'s width."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:209 doc/classes/TextEdit.xml:527
+msgid "Cuts (copies and clears) the selected text."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:212 doc/classes/TextEdit.xml:530
+msgid "Copies the selected text."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:215
+msgid ""
+"Pastes the clipboard text over the selected text (or at the cursor's "
+"position).\n"
+"Non-printable escape characters are automatically stripped from the OS "
+"clipboard via [method String.strip_escapes]."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:219
+msgid "Erases the whole [LineEdit] text."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:222
+msgid "Selects the whole [LineEdit] text."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:225 doc/classes/TextEdit.xml:542
+msgid "Undoes the previous action."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:228
+msgid "Reverse the last undo action."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:231 doc/classes/TextEdit.xml:548
+msgid "Represents the size of the [enum MenuItems] enum."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:236
+msgid "Texture for the clear button. See [member clear_button_enabled]."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:239
+msgid "Color used as default tint for the clear button."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:242
+msgid "Color used for the clear button when it's pressed."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:245
+msgid "Color of the [LineEdit]'s visual cursor (caret)."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:248
+msgid "Background used when [LineEdit] has GUI focus."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:251
+msgid "Font used for the text."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:254
+msgid "Default font color."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:257
+msgid "Font color for selected text (inside the selection rectangle)."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:260
+msgid "Font color when editing is disabled."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:263
+msgid ""
+"Minimum horizontal space for the text (not counting the clear button and "
+"content margins). This value is measured in count of space characters (i.e. "
+"this amount of space characters can be displayed without scrolling)."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:266
+msgid "Default background for the [LineEdit]."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:269
+msgid ""
+"Background used when [LineEdit] is in read-only mode ([member editable] is "
+"set to [code]false[/code])."
+msgstr ""
+
+#: doc/classes/LineEdit.xml:272
+msgid "Color of the selection rectangle."
+msgstr ""
+
+#: doc/classes/LineShape2D.xml:4
+msgid "Line shape for 2D collisions."
+msgstr ""
+
+#: doc/classes/LineShape2D.xml:7
+msgid ""
+"Line shape for 2D collisions. It works like a 2D plane and will not allow "
+"any physics body to go to the negative side. Not recommended for rigid "
+"bodies, and usually not recommended for static bodies either because it "
+"forces checks against it on every frame."
+msgstr ""
+
+#: doc/classes/LineShape2D.xml:15
+msgid "The line's distance from the origin."
+msgstr ""
+
+#: doc/classes/LineShape2D.xml:18
+msgid "The line's normal."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:4
+msgid "Simple button used to represent a link to some resource."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:7
+msgid ""
+"This kind of button is primarily used when the interaction with the button "
+"causes a context change (like linking to a web page).\n"
+"See also [BaseButton] which contains common properties and methods "
+"associated with this node."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:21
+msgid ""
+"Determines when to show the underline. See [enum UnderlineMode] for options."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:26
+msgid "The LinkButton will always show an underline at the bottom of its text."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:29
+msgid ""
+"The LinkButton will show an underline at the bottom of its text when the "
+"mouse cursor is over it."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:32
+msgid "The LinkButton will never show an underline at the bottom of its text."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:37
+msgid ""
+"[StyleBox] used when the [LinkButton] is focused. It is displayed over the "
+"current [StyleBox], so using [StyleBoxEmpty] will just disable the focus "
+"visual effect."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:40
+msgid "[Font] of the [LinkButton]'s text."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:43
+msgid "Default text [Color] of the [LinkButton]."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:46
+msgid ""
+"Text [Color] used when the [LinkButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:49
+msgid "Text [Color] used when the [LinkButton] is being hovered."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:52
+msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:55
+msgid "The vertical space between the baseline of text and the underline."
+msgstr ""
+
+#: doc/classes/Listener.xml:4 doc/classes/Listener2D.xml:4
+msgid "Overrides the location sounds are heard from."
+msgstr ""
+
+#: doc/classes/Listener.xml:7
+msgid ""
+"Once added to the scene tree and enabled using [method make_current], this "
+"node will override the location sounds are heard from. This can be used to "
+"listen from a location different from the [Camera]."
+msgstr ""
+
+#: doc/classes/Listener.xml:15
+msgid "Disables the listener to use the current camera's listener instead."
+msgstr ""
+
+#: doc/classes/Listener.xml:21
+msgid "Returns the listener's global orthonormalized [Transform]."
+msgstr ""
+
+#: doc/classes/Listener.xml:27
+msgid ""
+"Returns [code]true[/code] if the listener was made current using [method "
+"make_current], [code]false[/code] otherwise.\n"
+"[b]Note:[/b] There may be more than one Listener marked as \"current\" in "
+"the scene tree, but only the one that was made current last will be used."
+msgstr ""
+
+#: doc/classes/Listener.xml:34
+msgid "Enables the listener. This will override the current camera's listener."
+msgstr ""
+
+#: doc/classes/Listener2D.xml:7
+msgid ""
+"Once added to the scene tree and enabled using [method make_current], this "
+"node will override the location sounds are heard from. Only one [Listener2D] "
+"can be current. Using [method make_current] will disable the previous "
+"[Listener2D].\n"
+"If there is no active [Listener2D] in the current [Viewport], center of the "
+"screen will be used as a hearing point for the audio. [Listener2D] needs to "
+"be inside [SceneTree] to function."
+msgstr ""
+
+#: doc/classes/Listener2D.xml:16
+msgid ""
+"Disables the [Listener2D]. If it's not set as current, this method will have "
+"no effect."
+msgstr ""
+
+#: doc/classes/Listener2D.xml:22
+msgid "Returns [code]true[/code] if this [Listener2D] is currently active."
+msgstr ""
+
+#: doc/classes/Listener2D.xml:28
+msgid ""
+"Makes the [Listener2D] active, setting it as the hearing point for the "
+"sounds. If there is already another active [Listener2D], it will be "
+"disabled.\n"
+"This method will have no effect if the [Listener2D] is not added to "
+"[SceneTree]."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:4
+msgid "Abstract base class for the game's main loop."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:7
+msgid ""
+"[MainLoop] is the abstract base class for a Godot project's game loop. It is "
+"inherited by [SceneTree], which is the default game loop implementation used "
+"in Godot projects, though it is also possible to write and use one's own "
+"[MainLoop] subclass instead of the scene tree.\n"
+"Upon the application start, a [MainLoop] implementation must be provided to "
+"the OS; otherwise, the application will exit. This happens automatically "
+"(and a [SceneTree] is created) unless a main [Script] is provided from the "
+"command line (with e.g. [code]godot -s my_loop.gd[/code], which should then "
+"be a [MainLoop] implementation.\n"
+"Here is an example script implementing a simple [MainLoop]:\n"
+"[codeblock]\n"
+"extends MainLoop\n"
+"\n"
+"var time_elapsed = 0\n"
+"var keys_typed = []\n"
+"var quit = false\n"
+"\n"
+"func _initialize():\n"
+" print(\"Initialized:\")\n"
+" print(\" Starting time: %s\" % str(time_elapsed))\n"
+"\n"
+"func _idle(delta):\n"
+" time_elapsed += delta\n"
+" # Return true to end the main loop.\n"
+" return quit\n"
+"\n"
+"func _input_event(event):\n"
+" # Record keys.\n"
+" if event is InputEventKey and event.pressed and !event.echo:\n"
+" keys_typed.append(OS.get_scancode_string(event.scancode))\n"
+" # Quit on Escape press.\n"
+" if event.scancode == KEY_ESCAPE:\n"
+" quit = true\n"
+" # Quit on any mouse click.\n"
+" if event is InputEventMouseButton:\n"
+" quit = true\n"
+"\n"
+"func _finalize():\n"
+" print(\"Finalized:\")\n"
+" print(\" End time: %s\" % str(time_elapsed))\n"
+" print(\" Keys typed: %s\" % var2str(keys_typed))\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/MainLoop.xml:51
+msgid ""
+"Called when files are dragged from the OS file manager and dropped in the "
+"game window. The arguments are a list of file paths and the identifier of "
+"the screen where the drag originated."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:57
+msgid "Called before the program exits."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:65
+msgid ""
+"Called when the user performs an action in the system global menu (e.g. the "
+"Mac OS menu bar)."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:72
+msgid ""
+"Called each idle frame with the time since the last idle frame as argument "
+"(in seconds). Equivalent to [method Node._process].\n"
+"If implemented, the method must return a boolean value. [code]true[/code] "
+"ends the main loop, while [code]false[/code] lets it proceed to the next "
+"frame."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:79
+msgid "Called once during initialization."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:86
+msgid "Called whenever an [InputEvent] is received by the main loop."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:93
+msgid ""
+"Deprecated callback, does not do anything. Use [method _input_event] to "
+"parse text input. Will be removed in Godot 4.0."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:100
+msgid ""
+"Called each physics frame with the time since the last physics frame as "
+"argument ([code]delta[/code], in seconds). Equivalent to [method Node."
+"_physics_process].\n"
+"If implemented, the method must return a boolean value. [code]true[/code] "
+"ends the main loop, while [code]false[/code] lets it proceed to the next "
+"frame."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:107
+msgid ""
+"Should not be called manually, override [method _finalize] instead. Will be "
+"removed in Godot 4.0."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:114
+msgid ""
+"Should not be called manually, override [method _idle] instead. Will be "
+"removed in Godot 4.0."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:120
+msgid ""
+"Should not be called manually, override [method _initialize] instead. Will "
+"be removed in Godot 4.0."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:127
+msgid ""
+"Should not be called manually, override [method _input_event] instead. Will "
+"be removed in Godot 4.0."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:134
+msgid ""
+"Should not be called manually, override [method _input_text] instead. Will "
+"be removed in Godot 4.0."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:141
+msgid ""
+"Should not be called manually, override [method _iteration] instead. Will be "
+"removed in Godot 4.0."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:150
+msgid "Emitted when a user responds to a permission request."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:156 doc/classes/Node.xml:791
+msgid ""
+"Notification received from the OS when the mouse enters the game window.\n"
+"Implemented on desktop and web platforms."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:160 doc/classes/Node.xml:795
+msgid ""
+"Notification received from the OS when the mouse leaves the game window.\n"
+"Implemented on desktop and web platforms."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:164 doc/classes/Node.xml:799
+msgid ""
+"Notification received from the OS when the game window is focused.\n"
+"Implemented on all platforms."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:168 doc/classes/Node.xml:803
+msgid ""
+"Notification received from the OS when the game window is unfocused.\n"
+"Implemented on all platforms."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:172 doc/classes/Node.xml:807
+msgid ""
+"Notification received from the OS when a quit request is sent (e.g. closing "
+"the window with a \"Close\" button or Alt+F4).\n"
+"Implemented on desktop platforms."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:176 doc/classes/Node.xml:811
+msgid ""
+"Notification received from the OS when a go back request is sent (e.g. "
+"pressing the \"Back\" button on Android).\n"
+"Specific to the Android platform."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:180 doc/classes/Node.xml:815
+msgid ""
+"Notification received from the OS when an unfocus request is sent (e.g. "
+"another OS window wants to take the focus).\n"
+"No supported platforms currently send this notification."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:184 doc/classes/Node.xml:819
+msgid ""
+"Notification received from the OS when the application is exceeding its "
+"allocated memory.\n"
+"Specific to the iOS platform."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:188 doc/classes/Node.xml:823
+msgid ""
+"Notification received when translations may have changed. Can be triggered "
+"by the user changing the locale. Can be used to respond to language changes, "
+"for example to change the UI strings on the fly. Useful when working with "
+"the built-in translation support, like [method Object.tr]."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:191 doc/classes/Node.xml:826
+msgid ""
+"Notification received from the OS when a request for \"About\" information "
+"is sent.\n"
+"Specific to the macOS platform."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:195 doc/classes/Node.xml:830
+msgid ""
+"Notification received from Godot's crash handler when the engine is about to "
+"crash.\n"
+"Implemented on desktop platforms if the crash handler is enabled."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:199 doc/classes/Node.xml:834
+msgid ""
+"Notification received from the OS when an update of the Input Method Engine "
+"occurs (e.g. change of IME cursor position or composition string).\n"
+"Specific to the macOS platform."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:203 doc/classes/Node.xml:838
+msgid ""
+"Notification received from the OS when the app is resumed.\n"
+"Specific to the Android platform."
+msgstr ""
+
+#: doc/classes/MainLoop.xml:207 doc/classes/Node.xml:842
+msgid ""
+"Notification received from the OS when the app is paused.\n"
+"Specific to the Android platform."
+msgstr ""
+
+#: doc/classes/MarginContainer.xml:4
+msgid "Simple margin container."
+msgstr ""
+
+#: doc/classes/MarginContainer.xml:7
+msgid ""
+"Adds a top, left, bottom, and right margin to all [Control] nodes that are "
+"direct children of the container. To control the [MarginContainer]'s margin, "
+"use the [code]margin_*[/code] theme properties listed below.\n"
+"[b]Note:[/b] Be careful, [Control] margin values are different than the "
+"constant margin values. If you want to change the custom margin values of "
+"the [MarginContainer] by code, you should use the following examples:\n"
+"[codeblock]\n"
+"# This code sample assumes the current script is extending MarginContainer.\n"
+"var margin_value = 100\n"
+"add_constant_override(\"margin_top\", margin_value)\n"
+"add_constant_override(\"margin_left\", margin_value)\n"
+"add_constant_override(\"margin_bottom\", margin_value)\n"
+"add_constant_override(\"margin_right\", margin_value)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/MarginContainer.xml:26
+msgid ""
+"All direct children of [MarginContainer] will have a bottom margin of "
+"[code]margin_bottom[/code] pixels."
+msgstr ""
+
+#: doc/classes/MarginContainer.xml:29
+msgid ""
+"All direct children of [MarginContainer] will have a left margin of "
+"[code]margin_left[/code] pixels."
+msgstr ""
+
+#: doc/classes/MarginContainer.xml:32
+msgid ""
+"All direct children of [MarginContainer] will have a right margin of "
+"[code]margin_right[/code] pixels."
+msgstr ""
+
+#: doc/classes/MarginContainer.xml:35
+msgid ""
+"All direct children of [MarginContainer] will have a top margin of "
+"[code]margin_top[/code] pixels."
+msgstr ""
+
+#: doc/classes/Marshalls.xml:4
+msgid "Data transformation (marshalling) and encoding helpers."
+msgstr ""
+
+#: doc/classes/Marshalls.xml:7
+msgid "Provides data transformation and encoding utility functions."
+msgstr ""
+
+#: doc/classes/Marshalls.xml:16
+msgid ""
+"Returns a decoded [PoolByteArray] corresponding to the Base64-encoded string "
+"[code]base64_str[/code]."
+msgstr ""
+
+#: doc/classes/Marshalls.xml:23
+msgid ""
+"Returns a decoded string corresponding to the Base64-encoded string "
+"[code]base64_str[/code]."
+msgstr ""
+
+#: doc/classes/Marshalls.xml:31
+msgid ""
+"Returns a decoded [Variant] corresponding to the Base64-encoded string "
+"[code]base64_str[/code]. If [code]allow_objects[/code] is [code]true[/code], "
+"decoding objects is allowed.\n"
+"[b]Warning:[/b] Deserialized objects can contain code which gets executed. "
+"Do not use this option if the serialized object comes from untrusted sources "
+"to avoid potential security threats such as remote code execution."
+msgstr ""
+
+#: doc/classes/Marshalls.xml:39
+msgid "Returns a Base64-encoded string of a given [PoolByteArray]."
+msgstr ""
+
+#: doc/classes/Marshalls.xml:46
+msgid ""
+"Returns a Base64-encoded string of the UTF-8 string [code]utf8_str[/code]."
+msgstr ""
+
+#: doc/classes/Marshalls.xml:54
+msgid ""
+"Returns a Base64-encoded string of the [Variant] [code]variant[/code]. If "
+"[code]full_objects[/code] is [code]true[/code], encoding objects is allowed "
+"(and can potentially include code)."
+msgstr ""
+
+#: doc/classes/Material.xml:4
+msgid "Abstract base [Resource] for coloring and shading geometry."
+msgstr ""
+
+#: doc/classes/Material.xml:7
+msgid ""
+"Material is a base [Resource] used for coloring and shading geometry. All "
+"materials inherit from it and almost all [VisualInstance] derived nodes "
+"carry a Material. A few flags and parameters are shared between all material "
+"types and are configured here."
+msgstr ""
+
+#: doc/classes/Material.xml:17
+msgid ""
+"Sets the [Material] to be used for the next pass. This renders the object "
+"again using a different material.\n"
+"[b]Note:[/b] This only applies to [SpatialMaterial]s and [ShaderMaterial]s "
+"with type \"Spatial\"."
+msgstr ""
+
+#: doc/classes/Material.xml:21
+msgid ""
+"Sets the render priority for transparent objects in 3D scenes. Higher "
+"priority objects will be sorted in front of lower priority objects.\n"
+"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
+"not impact how transparent objects are sorted relative to opaque objects. "
+"This is because opaque objects are not sorted, while transparent objects are "
+"sorted from back to front (subject to priority)."
+msgstr ""
+
+#: doc/classes/Material.xml:27
+msgid "Maximum value for the [member render_priority] parameter."
+msgstr ""
+
+#: doc/classes/Material.xml:30
+msgid "Minimum value for the [member render_priority] parameter."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:4
+msgid "Special button that brings up a [PopupMenu] when clicked."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:7
+msgid ""
+"Special button that brings up a [PopupMenu] when clicked.\n"
+"New items can be created inside this [PopupMenu] using [code]get_popup()."
+"add_item(\"My Item Name\")[/code]. You can also create them directly from "
+"the editor. To do so, select the [MenuButton] node, then in the toolbar at "
+"the top of the 2D editor, click [b]Items[/b] then click [b]Add[/b] in the "
+"popup. You will be able to give each item new properties.\n"
+"See also [BaseButton] which contains common properties and methods "
+"associated with this node."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:17 doc/classes/OptionButton.xml:86
+msgid ""
+"Returns the [PopupMenu] contained in this button.\n"
+"[b]Warning:[/b] This is a required internal node, removing and freeing it "
+"may cause a crash. If you wish to hide it or any of its children, use their "
+"[member CanvasItem.visible] property."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:25
+msgid ""
+"If [code]true[/code], shortcuts are disabled and cannot be used to trigger "
+"the button."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:34
+msgid ""
+"If [code]true[/code], when the cursor hovers above another [MenuButton] "
+"within the same parent which also has [code]switch_on_hover[/code] enabled, "
+"it will close the current [MenuButton] and open the other one."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:41
+msgid "Emitted when [PopupMenu] of this MenuButton is about to show."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:49
+msgid "[StyleBox] used when the [MenuButton] is disabled."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:52
+msgid ""
+"[StyleBox] used when the [MenuButton] is focused. It is displayed over the "
+"current [StyleBox], so using [StyleBoxEmpty] will just disable the focus "
+"visual effect."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:55
+msgid "[Font] of the [MenuButton]'s text."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:58
+msgid "Default text [Color] of the [MenuButton]."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:61
+msgid "Text [Color] used when the [MenuButton] is disabled."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:64
+msgid ""
+"Text [Color] used when the [MenuButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:67
+msgid "Text [Color] used when the [MenuButton] is being hovered."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:70
+msgid "Text [Color] used when the [MenuButton] is being pressed."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:73
+msgid "[StyleBox] used when the [MenuButton] is being hovered."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:76
+msgid "The horizontal space between [MenuButton]'s icon and text."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:79
+msgid "Default [StyleBox] for the [MenuButton]."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:82
+msgid "[StyleBox] used when the [MenuButton] is being pressed."
+msgstr ""
+
+#: doc/classes/Mesh.xml:4
+msgid "A [Resource] that contains vertex array-based geometry."
+msgstr ""
+
+#: doc/classes/Mesh.xml:7
+msgid ""
+"Mesh is a type of [Resource] that contains vertex array-based geometry, "
+"divided in [i]surfaces[/i]. Each surface contains a completely separate "
+"array and a material used to draw it. Design wise, a mesh with multiple "
+"surfaces is preferred to a single surface, because objects created in 3D "
+"editing software commonly contain multiple materials."
+msgstr ""
+
+#: doc/classes/Mesh.xml:21
+msgid ""
+"Calculate a [ConvexPolygonShape] from the mesh.\n"
+"If [code]clean[/code] is [code]true[/code] (default), duplicate and interior "
+"vertices are removed automatically. You can set it to [code]false[/code] to "
+"make the process faster if not needed.\n"
+"If [code]simplify[/code] is [code]true[/code], the geometry can be further "
+"simplified to reduce the amount of vertices. Disabled by default."
+msgstr ""
+
+#: doc/classes/Mesh.xml:30
+msgid ""
+"Calculate an outline mesh at a defined offset (margin) from the original "
+"mesh.\n"
+"[b]Note:[/b] This method typically returns the vertices in reverse order (e."
+"g. clockwise to counterclockwise)."
+msgstr ""
+
+#: doc/classes/Mesh.xml:37
+msgid "Calculate a [ConcavePolygonShape] from the mesh."
+msgstr ""
+
+#: doc/classes/Mesh.xml:43
+msgid "Generate a [TriangleMesh] from the mesh."
+msgstr ""
+
+#: doc/classes/Mesh.xml:49
+msgid ""
+"Returns the smallest [AABB] enclosing this mesh in local space. Not affected "
+"by [code]custom_aabb[/code]. See also [method VisualInstance."
+"get_transformed_aabb].\n"
+"[b]Note:[/b] This is only implemented for [ArrayMesh] and [PrimitiveMesh]."
+msgstr ""
+
+#: doc/classes/Mesh.xml:56
+msgid ""
+"Returns all the vertices that make up the faces of the mesh. Each three "
+"vertices represent one triangle."
+msgstr ""
+
+#: doc/classes/Mesh.xml:62
+msgid "Returns the amount of surfaces that the [Mesh] holds."
+msgstr ""
+
+#: doc/classes/Mesh.xml:69
+msgid ""
+"Returns the arrays for the vertices, normals, uvs, etc. that make up the "
+"requested surface (see [method ArrayMesh.add_surface_from_arrays])."
+msgstr ""
+
+#: doc/classes/Mesh.xml:76
+msgid "Returns the blend shape arrays for the requested surface."
+msgstr ""
+
+#: doc/classes/Mesh.xml:83
+msgid ""
+"Returns a [Material] in a given surface. Surface is rendered using this "
+"material."
+msgstr ""
+
+#: doc/classes/Mesh.xml:91
+msgid ""
+"Sets a [Material] for a given surface. Surface will be rendered using this "
+"material."
+msgstr ""
+
+#: doc/classes/Mesh.xml:97
+msgid ""
+"Sets a hint to be used for lightmap resolution in [BakedLightmap]. Overrides "
+"[member BakedLightmap.default_texels_per_unit]."
+msgstr ""
+
+#: doc/classes/Mesh.xml:102
+msgid "Render array as points (one vertex equals one point)."
+msgstr ""
+
+#: doc/classes/Mesh.xml:105
+msgid "Render array as lines (every two vertices a line is created)."
+msgstr ""
+
+#: doc/classes/Mesh.xml:108
+msgid "Render array as line strip."
+msgstr ""
+
+#: doc/classes/Mesh.xml:111
+msgid "Render array as line loop (like line strip, but closed)."
+msgstr ""
+
+#: doc/classes/Mesh.xml:114
+msgid "Render array as triangles (every three vertices a triangle is created)."
+msgstr ""
+
+#: doc/classes/Mesh.xml:117
+msgid "Render array as triangle strips."
+msgstr ""
+
+#: doc/classes/Mesh.xml:120
+msgid "Render array as triangle fans."
+msgstr ""
+
+#: doc/classes/Mesh.xml:123 doc/classes/VisualServer.xml:3363
+msgid "Blend shapes are normalized."
+msgstr ""
+
+#: doc/classes/Mesh.xml:126 doc/classes/VisualServer.xml:3366
+msgid "Blend shapes are relative to base weight."
+msgstr ""
+
+#: doc/classes/Mesh.xml:129
+msgid ""
+"Mesh array contains vertices. All meshes require a vertex array so this "
+"should always be present."
+msgstr ""
+
+#: doc/classes/Mesh.xml:132
+msgid "Mesh array contains normals."
+msgstr ""
+
+#: doc/classes/Mesh.xml:135
+msgid "Mesh array contains tangents."
+msgstr ""
+
+#: doc/classes/Mesh.xml:138
+msgid "Mesh array contains colors."
+msgstr ""
+
+#: doc/classes/Mesh.xml:141
+msgid "Mesh array contains UVs."
+msgstr ""
+
+#: doc/classes/Mesh.xml:144
+msgid "Mesh array contains second UV."
+msgstr ""
+
+#: doc/classes/Mesh.xml:147
+msgid "Mesh array contains bones."
+msgstr ""
+
+#: doc/classes/Mesh.xml:150
+msgid "Mesh array contains bone weights."
+msgstr ""
+
+#: doc/classes/Mesh.xml:153
+msgid "Mesh array uses indices."
+msgstr ""
+
+#: doc/classes/Mesh.xml:156
+msgid ""
+"Used internally to calculate other [code]ARRAY_COMPRESS_*[/code] enum "
+"values. Do not use."
+msgstr ""
+
+#: doc/classes/Mesh.xml:159 doc/classes/VisualServer.xml:3300
+msgid "Flag used to mark a compressed (half float) vertex array."
+msgstr ""
+
+#: doc/classes/Mesh.xml:162 doc/classes/VisualServer.xml:3303
+msgid "Flag used to mark a compressed (half float) normal array."
+msgstr ""
+
+#: doc/classes/Mesh.xml:165 doc/classes/VisualServer.xml:3306
+msgid "Flag used to mark a compressed (half float) tangent array."
+msgstr ""
+
+#: doc/classes/Mesh.xml:168 doc/classes/VisualServer.xml:3309
+msgid "Flag used to mark a compressed (half float) color array."
+msgstr ""
+
+#: doc/classes/Mesh.xml:171 doc/classes/VisualServer.xml:3312
+msgid "Flag used to mark a compressed (half float) UV coordinates array."
+msgstr ""
+
+#: doc/classes/Mesh.xml:174 doc/classes/VisualServer.xml:3315
+msgid ""
+"Flag used to mark a compressed (half float) UV coordinates array for the "
+"second UV coordinates."
+msgstr ""
+
+#: doc/classes/Mesh.xml:177 doc/classes/VisualServer.xml:3318
+msgid "Flag used to mark a compressed bone array."
+msgstr ""
+
+#: doc/classes/Mesh.xml:180 doc/classes/VisualServer.xml:3321
+msgid "Flag used to mark a compressed (half float) weight array."
+msgstr ""
+
+#: doc/classes/Mesh.xml:183 doc/classes/VisualServer.xml:3324
+msgid "Flag used to mark a compressed index array."
+msgstr ""
+
+#: doc/classes/Mesh.xml:186 doc/classes/VisualServer.xml:3327
+msgid "Flag used to mark that the array contains 2D vertices."
+msgstr ""
+
+#: doc/classes/Mesh.xml:189 doc/classes/VisualServer.xml:3330
+msgid "Flag used to mark that the array uses 16-bit bones instead of 8-bit."
+msgstr ""
+
+#: doc/classes/Mesh.xml:192 doc/classes/VisualServer.xml:3333
+msgid ""
+"Flag used to mark that the array uses an octahedral representation of normal "
+"and tangent vectors rather than cartesian."
+msgstr ""
+
+#: doc/classes/Mesh.xml:195
+msgid ""
+"Used to set flags [constant ARRAY_COMPRESS_VERTEX], [constant "
+"ARRAY_COMPRESS_NORMAL], [constant ARRAY_COMPRESS_TANGENT], [constant "
+"ARRAY_COMPRESS_COLOR], [constant ARRAY_COMPRESS_TEX_UV], [constant "
+"ARRAY_COMPRESS_TEX_UV2], [constant ARRAY_COMPRESS_WEIGHTS], and [constant "
+"ARRAY_FLAG_USE_OCTAHEDRAL_COMPRESSION] quickly."
+msgstr ""
+
+#: doc/classes/Mesh.xml:198
+msgid "Array of vertices."
+msgstr ""
+
+#: doc/classes/Mesh.xml:201
+msgid "Array of normals."
+msgstr ""
+
+#: doc/classes/Mesh.xml:204
+msgid "Array of tangents as an array of floats, 4 floats per tangent."
+msgstr ""
+
+#: doc/classes/Mesh.xml:207
+msgid "Array of colors."
+msgstr ""
+
+#: doc/classes/Mesh.xml:210
+msgid "Array of UV coordinates."
+msgstr ""
+
+#: doc/classes/Mesh.xml:213
+msgid "Array of second set of UV coordinates."
+msgstr ""
+
+#: doc/classes/Mesh.xml:216
+msgid "Array of bone data."
+msgstr ""
+
+#: doc/classes/Mesh.xml:219
+msgid "Array of weights."
+msgstr ""
+
+#: doc/classes/Mesh.xml:222
+msgid "Array of indices."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:4
+msgid "Helper tool to access and edit [Mesh] data."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:7
+msgid ""
+"MeshDataTool provides access to individual vertices in a [Mesh]. It allows "
+"users to read and edit vertex data of meshes. It also creates an array of "
+"faces and edges.\n"
+"To use MeshDataTool, load a mesh with [method create_from_surface]. When you "
+"are finished editing the data commit the data to a mesh with [method "
+"commit_to_surface].\n"
+"Below is an example of how MeshDataTool may be used.\n"
+"[codeblock]\n"
+"var mesh = ArrayMesh.new()\n"
+"mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, CubeMesh.new()."
+"get_mesh_arrays())\n"
+"var mdt = MeshDataTool.new()\n"
+"mdt.create_from_surface(mesh, 0)\n"
+"for i in range(mdt.get_vertex_count()):\n"
+" var vertex = mdt.get_vertex(i)\n"
+" # In this example we extend the mesh by one unit, which results in "
+"separated faces as it is flat shaded.\n"
+" vertex += mdt.get_vertex_normal(i)\n"
+" # Save your change.\n"
+" mdt.set_vertex(i, vertex)\n"
+"mesh.surface_remove(0)\n"
+"mdt.commit_to_surface(mesh)\n"
+"var mi = MeshInstance.new()\n"
+"mi.mesh = mesh\n"
+"add_child(mi)\n"
+"[/codeblock]\n"
+"See also [ArrayMesh], [ImmediateGeometry] and [SurfaceTool] for procedural "
+"geometry generation.\n"
+"[b]Note:[/b] Godot uses clockwise [url=https://learnopengl.com/Advanced-"
+"OpenGL/Face-culling]winding order[/url] for front faces of triangle "
+"primitive modes."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:36
+msgid "Clears all data currently in MeshDataTool."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:43
+msgid "Adds a new surface to specified [Mesh] with edited data."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:51
+msgid ""
+"Uses specified surface of given [Mesh] to populate data for MeshDataTool.\n"
+"Requires [Mesh] with primitive type [constant Mesh.PRIMITIVE_TRIANGLES]."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:58
+msgid "Returns the number of edges in this [Mesh]."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:65
+msgid "Returns array of faces that touch given edge."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:72
+msgid "Returns meta information assigned to given edge."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:80
+msgid ""
+"Returns index of specified vertex connected to given edge.\n"
+"Vertex argument can only be 0 or 1 because edges are comprised of two "
+"vertices."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:87
+msgid "Returns the number of faces in this [Mesh]."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:95
+msgid ""
+"Returns specified edge associated with given face.\n"
+"Edge argument must 2 or less because a face only has three edges."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:103
+msgid "Returns the metadata associated with the given face."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:110
+msgid "Calculates and returns the face normal of the given face."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:118
+msgid ""
+"Returns the specified vertex of the given face.\n"
+"Vertex argument must be 2 or less because faces contain three vertices."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:125
+msgid ""
+"Returns the [Mesh]'s format. Format is an integer made up of [Mesh] format "
+"flags combined together. For example, a mesh containing both vertices and "
+"normals would return a format of [code]3[/code] because [constant ArrayMesh."
+"ARRAY_FORMAT_VERTEX] is [code]1[/code] and [constant ArrayMesh."
+"ARRAY_FORMAT_NORMAL] is [code]2[/code].\n"
+"See [enum ArrayMesh.ArrayFormat] for a list of format flags."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:132
+msgid "Returns the material assigned to the [Mesh]."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:139
+msgid "Returns the vertex at given index."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:146
+msgid "Returns the bones of the given vertex."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:153
+msgid "Returns the color of the given vertex."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:159
+msgid "Returns the total number of vertices in [Mesh]."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:166
+msgid "Returns an array of edges that share the given vertex."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:173
+msgid "Returns an array of faces that share the given vertex."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:180
+msgid "Returns the metadata associated with the given vertex."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:187
+msgid "Returns the normal of the given vertex."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:194
+msgid "Returns the tangent of the given vertex."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:201
+msgid "Returns the UV of the given vertex."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:208
+msgid "Returns the UV2 of the given vertex."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:215
+msgid "Returns bone weights of the given vertex."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:223
+msgid "Sets the metadata of the given edge."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:231
+msgid "Sets the metadata of the given face."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:238
+msgid "Sets the material to be used by newly-constructed [Mesh]."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:246
+msgid "Sets the position of the given vertex."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:254
+msgid "Sets the bones of the given vertex."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:262
+msgid "Sets the color of the given vertex."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:270
+msgid "Sets the metadata associated with the given vertex."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:278
+msgid "Sets the normal of the given vertex."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:286
+msgid "Sets the tangent of the given vertex."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:294
+msgid "Sets the UV of the given vertex."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:302
+msgid "Sets the UV2 of the given vertex."
+msgstr ""
+
+#: doc/classes/MeshDataTool.xml:310
+msgid "Sets the bone weights of the given vertex."
+msgstr ""
+
+#: doc/classes/MeshInstance.xml:4
+msgid "Node that instances meshes into a scenario."
+msgstr ""
+
+#: doc/classes/MeshInstance.xml:7
+msgid ""
+"MeshInstance is a node that takes a [Mesh] resource and adds it to the "
+"current scenario by creating an instance of it. This is the class most often "
+"used to get 3D geometry rendered and can be used to instance a single [Mesh] "
+"in many places. This allows to reuse geometry and save on resources. When a "
+"[Mesh] has to be instanced more than thousands of times at close proximity, "
+"consider using a [MultiMesh] in a [MultiMeshInstance] instead."
+msgstr ""
+
+#: doc/classes/MeshInstance.xml:21
+msgid ""
+"This helper creates a [StaticBody] child node with a [ConvexPolygonShape] "
+"collision shape calculated from the mesh geometry. It's mainly used for "
+"testing.\n"
+"If [code]clean[/code] is [code]true[/code] (default), duplicate and interior "
+"vertices are removed automatically. You can set it to [code]false[/code] to "
+"make the process faster if not needed.\n"
+"If [code]simplify[/code] is [code]true[/code], the geometry can be further "
+"simplified to reduce the amount of vertices. Disabled by default."
+msgstr ""
+
+#: doc/classes/MeshInstance.xml:29
+msgid ""
+"This helper creates a [MeshInstance] child node with gizmos at every vertex "
+"calculated from the mesh geometry. It's mainly used for testing."
+msgstr ""
+
+#: doc/classes/MeshInstance.xml:35
+msgid ""
+"This helper creates a [StaticBody] child node with multiple "
+"[ConvexPolygonShape] collision shapes calculated from the mesh geometry via "
+"convex decomposition. It's mainly used for testing."
+msgstr ""
+
+#: doc/classes/MeshInstance.xml:41
+msgid ""
+"This helper creates a [StaticBody] child node with a [ConcavePolygonShape] "
+"collision shape calculated from the mesh geometry. It's mainly used for "
+"testing."
+msgstr ""
+
+#: doc/classes/MeshInstance.xml:48
+msgid ""
+"Returns the [Material] that will be used by the [Mesh] when drawing. This "
+"can return the [member GeometryInstance.material_override], the surface "
+"override [Material] defined in this [MeshInstance], or the surface "
+"[Material] defined in the [Mesh]. For example, if [member GeometryInstance."
+"material_override] is used, all surfaces will return the override material."
+msgstr ""
+
+#: doc/classes/MeshInstance.xml:55
+msgid "Returns the [Material] for a surface of the [Mesh] resource."
+msgstr ""
+
+#: doc/classes/MeshInstance.xml:61
+msgid "Returns the number of surface materials."
+msgstr ""
+
+#: doc/classes/MeshInstance.xml:69
+msgid "Sets the [Material] for a surface of the [Mesh] resource."
+msgstr ""
+
+#: doc/classes/MeshInstance.xml:75
+msgid "The [Mesh] resource for the instance."
+msgstr ""
+
+#: doc/classes/MeshInstance.xml:78
+msgid "[NodePath] to the [Skeleton] associated with the instance."
+msgstr ""
+
+#: doc/classes/MeshInstance.xml:81
+msgid "Sets the skin to be used by this instance."
+msgstr ""
+
+#: doc/classes/MeshInstance.xml:84
+msgid ""
+"If [code]true[/code], normals are transformed when software skinning is "
+"used. Set to [code]false[/code] when normals are not needed for better "
+"performance.\n"
+"See [member ProjectSettings.rendering/quality/skinning/"
+"software_skinning_fallback] for details about how software skinning is "
+"enabled."
+msgstr ""
+
+#: doc/classes/MeshInstance2D.xml:4
+msgid "Node used for displaying a [Mesh] in 2D."
+msgstr ""
+
+#: doc/classes/MeshInstance2D.xml:7
+msgid ""
+"Node used for displaying a [Mesh] in 2D. Can be constructed from an existing "
+"[Sprite] via a tool in the editor toolbar. Select \"Sprite\" then \"Convert "
+"to Mesh2D\", select settings in popup and press \"Create Mesh2D\"."
+msgstr ""
+
+#: doc/classes/MeshInstance2D.xml:10
+msgid "https://docs.godotengine.org/en/3.4/tutorials/2d/2d_meshes.html"
+msgstr ""
+
+#: doc/classes/MeshInstance2D.xml:16
+msgid "The [Mesh] that will be drawn by the [MeshInstance2D]."
+msgstr ""
+
+#: doc/classes/MeshInstance2D.xml:19 doc/classes/MultiMeshInstance2D.xml:19
+msgid ""
+"The normal map that will be used if using the default [CanvasItemMaterial].\n"
+"[b]Note:[/b] Godot expects the normal map to use X+, Y-, and Z+ coordinates. "
+"See [url=http://wiki.polycount.com/wiki/"
+"Normal_Map_Technical_Details#Common_Swizzle_Coordinates]this page[/url] for "
+"a comparison of normal map coordinates expected by popular engines."
+msgstr ""
+
+#: doc/classes/MeshInstance2D.xml:23 doc/classes/MultiMeshInstance2D.xml:23
+msgid ""
+"The [Texture] that will be used if using the default [CanvasItemMaterial]. "
+"Can be accessed as [code]TEXTURE[/code] in CanvasItem shader."
+msgstr ""
+
+#: doc/classes/MeshInstance2D.xml:29 doc/classes/MultiMeshInstance2D.xml:29
+msgid "Emitted when the [member texture] is changed."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:4
+msgid "Library of meshes."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:7
+msgid ""
+"A library of meshes. Contains a list of [Mesh] resources, each with a name "
+"and ID. Each item can also include collision and navigation shapes. This "
+"resource is used in [GridMap]."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:17
+msgid "Clears the library."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:24
+msgid ""
+"Creates a new item in the library with the given ID.\n"
+"You can get an unused ID from [method get_last_unused_item_id]."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:32
+msgid "Returns the first item with the given name."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:38
+msgid "Returns the list of item IDs in use."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:45
+msgid "Returns the item's mesh."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:52
+msgid "Returns the transform applied to the item's mesh."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:59
+msgid "Returns the item's name."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:66
+msgid "Returns the item's navigation mesh."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:73
+msgid "Returns the transform applied to the item's navigation mesh."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:80
+msgid ""
+"When running in the editor, returns a generated item preview (a 3D rendering "
+"in isometric perspective). When used in a running project, returns the "
+"manually-defined item preview which can be set using [method "
+"set_item_preview]. Returns an empty [Texture] if no preview was manually set "
+"in a running project."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:87
+msgid ""
+"Returns an item's collision shapes.\n"
+"The array consists of each [Shape] followed by its [Transform]."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:94
+msgid "Gets an unused ID for a new item."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:101
+msgid "Removes the item."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:109
+msgid "Sets the item's mesh."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:117
+msgid "Sets the transform to apply to the item's mesh."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:125
+msgid ""
+"Sets the item's name.\n"
+"This name is shown in the editor. It can also be used to look up the item "
+"later using [method find_item_by_name]."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:134
+msgid "Sets the item's navigation mesh."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:142
+msgid "Sets the transform to apply to the item's navigation mesh."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:150
+msgid "Sets a texture to use as the item's preview icon in the editor."
+msgstr ""
+
+#: doc/classes/MeshLibrary.xml:158
+msgid ""
+"Sets an item's collision shapes.\n"
+"The array should consist of [Shape] objects, each followed by a [Transform] "
+"that will be applied to it. For shapes that should not have a transform, use "
+"[constant Transform.IDENTITY]."
+msgstr ""
+
+#: doc/classes/MeshTexture.xml:4
+msgid "Simple texture that uses a mesh to draw itself."
+msgstr ""
+
+#: doc/classes/MeshTexture.xml:7
+msgid ""
+"Simple texture that uses a mesh to draw itself. It's limited because flags "
+"can't be changed and region drawing is not supported."
+msgstr ""
+
+#: doc/classes/MeshTexture.xml:15
+msgid "Sets the base texture that the Mesh will use to draw."
+msgstr ""
+
+#: doc/classes/MeshTexture.xml:19
+msgid "Sets the size of the image, needed for reference."
+msgstr ""
+
+#: doc/classes/MeshTexture.xml:22
+msgid "Sets the mesh used to draw. It must be a mesh using 2D vertices."
+msgstr ""
+
+#: modules/mobile_vr/doc_classes/MobileVRInterface.xml:4
+msgid "Generic mobile VR implementation."
+msgstr ""
+
+#: modules/mobile_vr/doc_classes/MobileVRInterface.xml:7
+msgid ""
+"This is a generic mobile VR implementation where you need to provide details "
+"about the phone and HMD used. It does not rely on any existing framework. "
+"This is the most basic interface we have. For the best effect, you need a "
+"mobile phone with a gyroscope and accelerometer.\n"
+"Note that even though there is no positional tracking, the camera will "
+"assume the headset is at a height of 1.85 meters. You can change this by "
+"setting [member eye_height].\n"
+"You can initialise this interface as follows:\n"
+"[codeblock]\n"
+"var interface = ARVRServer.find_interface(\"Native mobile\")\n"
+"if interface and interface.initialize():\n"
+" get_viewport().arvr = true\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/mobile_vr/doc_classes/MobileVRInterface.xml:22
+msgid ""
+"The distance between the display and the lenses inside of the device in "
+"centimeters."
+msgstr ""
+
+#: modules/mobile_vr/doc_classes/MobileVRInterface.xml:25
+msgid "The width of the display in centimeters."
+msgstr ""
+
+#: modules/mobile_vr/doc_classes/MobileVRInterface.xml:28
+msgid ""
+"The height at which the camera is placed in relation to the ground (i.e. "
+"[ARVROrigin] node)."
+msgstr ""
+
+#: modules/mobile_vr/doc_classes/MobileVRInterface.xml:31
+msgid ""
+"The interocular distance, also known as the interpupillary distance. The "
+"distance between the pupils of the left and right eye."
+msgstr ""
+
+#: modules/mobile_vr/doc_classes/MobileVRInterface.xml:34
+msgid ""
+"The k1 lens factor is one of the two constants that define the strength of "
+"the lens used and directly influences the lens distortion effect."
+msgstr ""
+
+#: modules/mobile_vr/doc_classes/MobileVRInterface.xml:37
+msgid "The k2 lens factor, see k1."
+msgstr ""
+
+#: modules/mobile_vr/doc_classes/MobileVRInterface.xml:40
+msgid ""
+"The oversample setting. Because of the lens distortion we have to render our "
+"buffers at a higher resolution then the screen can natively handle. A value "
+"between 1.5 and 2.0 often provides good results but at the cost of "
+"performance."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:4
+msgid "Provides high-performance mesh instancing."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:7
+msgid ""
+"MultiMesh provides low-level mesh instancing. Drawing thousands of "
+"[MeshInstance] nodes can be slow, since each object is submitted to the GPU "
+"then drawn individually.\n"
+"MultiMesh is much faster as it can draw thousands of instances with a single "
+"draw call, resulting in less API overhead.\n"
+"As a drawback, if the instances are too far away from each other, "
+"performance may be reduced as every single instance will always render (they "
+"are spatially indexed as one, for the whole object).\n"
+"Since instances may have any behavior, the AABB used for visibility must be "
+"provided by the user."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:13 doc/classes/MultiMeshInstance.xml:11
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/3d/vertex_animation/"
+"animating_thousands_of_fish.html"
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:14 doc/classes/MultiMeshInstance.xml:13
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/optimization/using_multimesh."
+"html"
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:20
+msgid ""
+"Returns the visibility axis-aligned bounding box in local space. See also "
+"[method VisualInstance.get_transformed_aabb]."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:27
+msgid "Gets a specific instance's color."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:34
+msgid "Returns the custom data that has been set for a specific instance."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:41
+msgid "Returns the [Transform] of a specific instance."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:48
+msgid "Returns the [Transform2D] of a specific instance."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:55
+msgid ""
+"Sets all data related to the instances in one go. This is especially useful "
+"when loading the data from disk or preparing the data from GDNative.\n"
+"All data is packed in one large float array. An array may look like this: "
+"Transform for instance 1, color data for instance 1, custom data for "
+"instance 1, transform for instance 2, color data for instance 2, etc...\n"
+"[Transform] is stored as 12 floats, [Transform2D] is stored as 8 floats, "
+"[code]COLOR_8BIT[/code] / [code]CUSTOM_DATA_8BIT[/code] is stored as 1 float "
+"(4 bytes as is) and [code]COLOR_FLOAT[/code] / [code]CUSTOM_DATA_FLOAT[/"
+"code] is stored as 4 floats."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:65
+msgid ""
+"Sets the color of a specific instance by [i]multiplying[/i] the mesh's "
+"existing vertex colors.\n"
+"For the color to take effect, ensure that [member color_format] is non-"
+"[code]null[/code] on the [MultiMesh] and [member SpatialMaterial."
+"vertex_color_use_as_albedo] is [code]true[/code] on the material."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:74
+msgid ""
+"Sets custom data for a specific instance. Although [Color] is used, it is "
+"just a container for 4 floating point numbers. The format of the number can "
+"change depending on the [enum CustomDataFormat] used."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:82
+msgid "Sets the [Transform] for a specific instance."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:90
+msgid "Sets the [Transform2D] for a specific instance."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:96
+msgid "Format of colors in color array that gets passed to shader."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:99
+msgid "Format of custom data in custom data array that gets passed to shader."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:102
+msgid ""
+"Number of instances that will get drawn. This clears and (re)sizes the "
+"buffers. By default, all instances are drawn but you can limit this with "
+"[member visible_instance_count]."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:105
+msgid "Mesh to be drawn."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:108
+msgid "Format of transform used to transform mesh, either 2D or 3D."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:111
+msgid ""
+"Limits the number of instances drawn, -1 draws all instances. Changing this "
+"does not change the sizes of the buffers."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:116
+msgid "Use this when using 2D transforms."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:119
+msgid "Use this when using 3D transforms."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:122
+msgid "Use when you are not using per-instance [Color]s."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:125
+msgid ""
+"Compress [Color] data into 8 bits when passing to shader. This uses less "
+"memory and can be faster, but the [Color] loses precision."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:128
+msgid ""
+"The [Color] passed into [method set_instance_color] will use 4 floats. Use "
+"this for highest precision [Color]."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:131
+msgid "Use when you are not using per-instance custom data."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:134
+msgid ""
+"Compress custom_data into 8 bits when passing to shader. This uses less "
+"memory and can be faster, but loses precision and range. Floats packed into "
+"8 bits can only represent values between 0 and 1, numbers outside that range "
+"will be clamped."
+msgstr ""
+
+#: doc/classes/MultiMesh.xml:137
+msgid ""
+"The [Color] passed into [method set_instance_custom_data] will use 4 floats. "
+"Use this for highest precision."
+msgstr ""
+
+#: doc/classes/MultiMeshInstance.xml:4
+msgid "Node that instances a [MultiMesh]."
+msgstr ""
+
+#: doc/classes/MultiMeshInstance.xml:7
+msgid ""
+"[MultiMeshInstance] is a specialized node to instance [GeometryInstance]s "
+"based on a [MultiMesh] resource.\n"
+"This is useful to optimize the rendering of a high amount of instances of a "
+"given mesh (for example trees in a forest or grass strands)."
+msgstr ""
+
+#: doc/classes/MultiMeshInstance.xml:12
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/3d/using_multi_mesh_instance."
+"html"
+msgstr ""
+
+#: doc/classes/MultiMeshInstance.xml:19
+msgid ""
+"The [MultiMesh] resource that will be used and shared among all instances of "
+"the [MultiMeshInstance]."
+msgstr ""
+
+#: doc/classes/MultiMeshInstance2D.xml:4
+msgid "Node that instances a [MultiMesh] in 2D."
+msgstr ""
+
+#: doc/classes/MultiMeshInstance2D.xml:7
+msgid ""
+"[MultiMeshInstance2D] is a specialized node to instance a [MultiMesh] "
+"resource in 2D.\n"
+"Usage is the same as [MultiMeshInstance]."
+msgstr ""
+
+#: doc/classes/MultiMeshInstance2D.xml:16
+msgid "The [MultiMesh] that will be drawn by the [MultiMeshInstance2D]."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:4
+msgid "High-level multiplayer API."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:7
+msgid ""
+"This class implements most of the logic behind the high-level multiplayer "
+"API. See also [NetworkedMultiplayerPeer].\n"
+"By default, [SceneTree] has a reference to this class that is used to "
+"provide multiplayer capabilities (i.e. RPC/RSET) across the whole scene.\n"
+"It is possible to override the MultiplayerAPI instance used by specific "
+"Nodes by setting the [member Node.custom_multiplayer] property, effectively "
+"allowing to run both client and server in the same scene.\n"
+"[b]Note:[/b] The high-level multiplayer API protocol is an implementation "
+"detail and isn't meant to be used by non-Godot servers. It may change "
+"without notice."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:18
+msgid ""
+"Clears the current MultiplayerAPI network state (you shouldn't call this "
+"unless you know what you are doing)."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:24
+msgid ""
+"Returns the peer IDs of all connected peers of this MultiplayerAPI's [member "
+"network_peer]."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:30
+msgid ""
+"Returns the unique peer ID of this MultiplayerAPI's [member network_peer]."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:36
+msgid ""
+"Returns the sender's peer ID for the RPC currently being executed.\n"
+"[b]Note:[/b] If not inside an RPC this method will return 0."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:43 doc/classes/SceneTree.xml:123
+msgid "Returns [code]true[/code] if there is a [member network_peer] set."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:49
+msgid ""
+"Returns [code]true[/code] if this MultiplayerAPI's [member network_peer] is "
+"in server mode (listening for connections)."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:55
+msgid ""
+"Method used for polling the MultiplayerAPI. You only need to worry about "
+"this if you are using [member Node.custom_multiplayer] override or you set "
+"[member SceneTree.multiplayer_poll] to [code]false[/code]. By default, "
+"[SceneTree] will poll its MultiplayerAPI for you.\n"
+"[b]Note:[/b] This method results in RPCs and RSETs being called, so they "
+"will be executed in the same context of this function (e.g. [code]_process[/"
+"code], [code]physics[/code], [Thread])."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:65
+msgid ""
+"Sends the given raw [code]bytes[/code] to a specific peer identified by "
+"[code]id[/code] (see [method NetworkedMultiplayerPeer.set_target_peer]). "
+"Default ID is [code]0[/code], i.e. broadcast to all peers."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:71
+msgid ""
+"If [code]true[/code] (or if the [member network_peer] has [member PacketPeer."
+"allow_object_decoding] set to [code]true[/code]), the MultiplayerAPI will "
+"allow encoding and decoding of object during RPCs/RSETs.\n"
+"[b]Warning:[/b] Deserialized objects can contain code which gets executed. "
+"Do not use this option if the serialized object comes from untrusted sources "
+"to avoid potential security threats such as remote code execution."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:75
+msgid ""
+"The peer object to handle the RPC system (effectively enabling networking "
+"when set). Depending on the peer itself, the MultiplayerAPI will become a "
+"network server (check with [method is_network_server]) and will set root "
+"node's network mode to master, or it will become a regular peer with root "
+"node set to puppet. All child nodes are set to inherit the network mode by "
+"default. Handling of networking-related events (connection, disconnection, "
+"new clients) is done by connecting to MultiplayerAPI's signals."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:78
+msgid ""
+"If [code]true[/code], the MultiplayerAPI's [member network_peer] refuses new "
+"incoming connections."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:81
+msgid ""
+"The root node to use for RPCs. Instead of an absolute path, a relative path "
+"will be used to find the node upon which the RPC should be executed.\n"
+"This effectively allows to have different branches of the scene tree to be "
+"managed by different MultiplayerAPI, allowing for example to run both client "
+"and server in the same scene."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:88
+msgid ""
+"Emitted when this MultiplayerAPI's [member network_peer] successfully "
+"connected to a server. Only emitted on clients."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:93
+msgid ""
+"Emitted when this MultiplayerAPI's [member network_peer] fails to establish "
+"a connection to a server. Only emitted on clients."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:99
+msgid ""
+"Emitted when this MultiplayerAPI's [member network_peer] connects with a new "
+"peer. ID is the peer ID of the new peer. Clients get notified when other "
+"clients connect to the same server. Upon connecting to a server, a client "
+"also receives this signal for the server (with ID being 1)."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:105
+msgid ""
+"Emitted when this MultiplayerAPI's [member network_peer] disconnects from a "
+"peer. Clients get notified when other clients disconnect from the same "
+"server."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:112
+msgid ""
+"Emitted when this MultiplayerAPI's [member network_peer] receive a "
+"[code]packet[/code] with custom data (see [method send_bytes]). ID is the "
+"peer ID of the peer that sent the packet."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:117
+msgid ""
+"Emitted when this MultiplayerAPI's [member network_peer] disconnects from "
+"server. Only emitted on clients."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:123
+msgid ""
+"Used with [method Node.rpc_config] or [method Node.rset_config] to disable a "
+"method or property for all RPC calls, making it unavailable. Default for all "
+"methods."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:126
+msgid ""
+"Used with [method Node.rpc_config] or [method Node.rset_config] to set a "
+"method to be called or a property to be changed only on the remote end, not "
+"locally. Analogous to the [code]remote[/code] keyword. Calls and property "
+"changes are accepted from all remote peers, no matter if they are node's "
+"master or puppets."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:129
+msgid ""
+"Used with [method Node.rpc_config] or [method Node.rset_config] to set a "
+"method to be called or a property to be changed only on the network master "
+"for this node. Analogous to the [code]master[/code] keyword. Only accepts "
+"calls or property changes from the node's network puppets, see [method Node."
+"set_network_master]."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:132
+msgid ""
+"Used with [method Node.rpc_config] or [method Node.rset_config] to set a "
+"method to be called or a property to be changed only on puppets for this "
+"node. Analogous to the [code]puppet[/code] keyword. Only accepts calls or "
+"property changes from the node's network master, see [method Node."
+"set_network_master]."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:135
+msgid ""
+"[i]Deprecated.[/i] Use [constant RPC_MODE_PUPPET] instead. Analogous to the "
+"[code]slave[/code] keyword."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:138
+msgid ""
+"Behave like [constant RPC_MODE_REMOTE] but also make the call or property "
+"change locally. Analogous to the [code]remotesync[/code] keyword."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:141
+msgid ""
+"[i]Deprecated.[/i] Use [constant RPC_MODE_REMOTESYNC] instead. Analogous to "
+"the [code]sync[/code] keyword."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:144
+msgid ""
+"Behave like [constant RPC_MODE_MASTER] but also make the call or property "
+"change locally. Analogous to the [code]mastersync[/code] keyword."
+msgstr ""
+
+#: doc/classes/MultiplayerAPI.xml:147
+msgid ""
+"Behave like [constant RPC_MODE_PUPPET] but also make the call or property "
+"change locally. Analogous to the [code]puppetsync[/code] keyword."
+msgstr ""
+
+#: doc/classes/Mutex.xml:4
+msgid "A synchronization mutex (mutual exclusion)."
+msgstr ""
+
+#: doc/classes/Mutex.xml:7
+msgid ""
+"A synchronization mutex (mutual exclusion). This is used to synchronize "
+"multiple [Thread]s, and is equivalent to a binary [Semaphore]. It guarantees "
+"that only one thread can ever acquire the lock at a time. A mutex can be "
+"used to protect a critical section; however, be careful to avoid deadlocks."
+msgstr ""
+
+#: doc/classes/Mutex.xml:10 doc/classes/Semaphore.xml:10
+#: doc/classes/Thread.xml:11
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/threads/using_multiple_threads."
+"html"
+msgstr ""
+
+#: doc/classes/Mutex.xml:16
+msgid ""
+"Locks this [Mutex], blocks until it is unlocked by the current owner.\n"
+"[b]Note:[/b] This function returns without blocking if the thread already "
+"has ownership of the mutex."
+msgstr ""
+
+#: doc/classes/Mutex.xml:23
+msgid ""
+"Tries locking this [Mutex], but does not block. Returns [constant OK] on "
+"success, [constant ERR_BUSY] otherwise.\n"
+"[b]Note:[/b] This function returns [constant OK] if the thread already has "
+"ownership of the mutex."
+msgstr ""
+
+#: doc/classes/Mutex.xml:30
+msgid ""
+"Unlocks this [Mutex], leaving it to other threads.\n"
+"[b]Note:[/b] If a thread called [method lock] or [method try_lock] multiple "
+"times while already having ownership of the mutex, it must also call [method "
+"unlock] the same number of times in order to unlock it correctly."
+msgstr ""
+
+#: modules/gdnative/doc_classes/NativeScript.xml:13
+msgid ""
+"Returns the documentation string that was previously set with "
+"[code]godot_nativescript_set_class_documentation[/code]."
+msgstr ""
+
+#: modules/gdnative/doc_classes/NativeScript.xml:20
+msgid ""
+"Returns the documentation string that was previously set with "
+"[code]godot_nativescript_set_method_documentation[/code]."
+msgstr ""
+
+#: modules/gdnative/doc_classes/NativeScript.xml:27
+msgid ""
+"Returns the documentation string that was previously set with "
+"[code]godot_nativescript_set_property_documentation[/code]."
+msgstr ""
+
+#: modules/gdnative/doc_classes/NativeScript.xml:34
+msgid ""
+"Returns the documentation string that was previously set with "
+"[code]godot_nativescript_set_signal_documentation[/code]."
+msgstr ""
+
+#: modules/gdnative/doc_classes/NativeScript.xml:40
+msgid ""
+"Constructs a new object of the base type with a script of this type already "
+"attached.\n"
+"[b]Note:[/b] Any arguments passed to this function will be ignored and not "
+"passed to the native constructor function. This will change with in a future "
+"API extension."
+msgstr ""
+
+#: doc/classes/Navigation.xml:4
+msgid "Mesh-based navigation and pathfinding node."
+msgstr ""
+
+#: doc/classes/Navigation.xml:7
+msgid ""
+"Provides navigation and pathfinding within a collection of "
+"[NavigationMesh]es. By default, these will be automatically collected from "
+"child [NavigationMeshInstance] nodes, but they can also be added on the fly "
+"with [method navmesh_add]. In addition to basic pathfinding, this class also "
+"assists with aligning navigation agents with the meshes they are navigating "
+"on.\n"
+"[b]Note:[/b] The current navigation system has many known issues and will "
+"not always return optimal paths as expected. These issues will be fixed in "
+"Godot 4.0."
+msgstr ""
+
+#: doc/classes/Navigation.xml:11 doc/classes/NavigationMesh.xml:10
+msgid "https://godotengine.org/asset-library/asset/124"
+msgstr ""
+
+#: doc/classes/Navigation.xml:18 doc/classes/Navigation2D.xml:18
+msgid ""
+"Returns the navigation point closest to the point given. Points are in local "
+"coordinate space."
+msgstr ""
+
+#: doc/classes/Navigation.xml:25
+msgid ""
+"Returns the surface normal at the navigation point closest to the point "
+"given. Useful for rotating a navigation agent according to the navigation "
+"mesh it moves on."
+msgstr ""
+
+#: doc/classes/Navigation.xml:32
+msgid ""
+"Returns the owner of the [NavigationMesh] which contains the navigation "
+"point closest to the point given. This is usually a "
+"[NavigationMeshInstance]. For meshes added via [method navmesh_add], returns "
+"the owner that was given (or [code]null[/code] if the [code]owner[/code] "
+"parameter was omitted)."
+msgstr ""
+
+#: doc/classes/Navigation.xml:41
+msgid ""
+"Returns the navigation point closest to the given line segment. When "
+"enabling [code]use_collision[/code], only considers intersection points "
+"between segment and navigation meshes. If multiple intersection points are "
+"found, the one closest to the segment start point is returned."
+msgstr ""
+
+#: doc/classes/Navigation.xml:50
+msgid ""
+"Returns the path between two given points. Points are in local coordinate "
+"space. If [code]optimize[/code] is [code]true[/code] (the default), the "
+"agent properties associated with each [NavigationMesh] (radius, height, "
+"etc.) are considered in the path calculation, otherwise they are ignored.\n"
+"[b]Note:[/b] This method has known issues and will often return non-optimal "
+"paths. These issues will be fixed in Godot 4.0."
+msgstr ""
+
+#: doc/classes/Navigation.xml:60
+msgid ""
+"Adds a [NavigationMesh]. Returns an ID for use with [method navmesh_remove] "
+"or [method navmesh_set_transform]. If given, a [Transform2D] is applied to "
+"the polygon. The optional [code]owner[/code] is used as return value for "
+"[method get_closest_point_owner]."
+msgstr ""
+
+#: doc/classes/Navigation.xml:67
+msgid "Removes the [NavigationMesh] with the given ID."
+msgstr ""
+
+#: doc/classes/Navigation.xml:75
+msgid "Sets the transform applied to the [NavigationMesh] with the given ID."
+msgstr ""
+
+#: doc/classes/Navigation.xml:81
+msgid ""
+"Defines which direction is up. By default, this is [code](0, 1, 0)[/code], "
+"which is the world's \"up\" direction."
+msgstr ""
+
+#: doc/classes/Navigation2D.xml:4
+msgid "2D navigation and pathfinding node."
+msgstr ""
+
+#: doc/classes/Navigation2D.xml:7
+msgid ""
+"Navigation2D provides navigation and pathfinding within a 2D area, specified "
+"as a collection of [NavigationPolygon] resources. By default, these are "
+"automatically collected from child [NavigationPolygonInstance] nodes, but "
+"they can also be added on the fly with [method navpoly_add].\n"
+"[b]Note:[/b] The current navigation system has many known issues and will "
+"not always return optimal paths as expected. These issues will be fixed in "
+"Godot 4.0."
+msgstr ""
+
+#: doc/classes/Navigation2D.xml:11 doc/classes/NavigationPolygon.xml:27
+msgid "https://godotengine.org/asset-library/asset/117"
+msgstr ""
+
+#: doc/classes/Navigation2D.xml:25
+msgid ""
+"Returns the owner of the [NavigationPolygon] which contains the navigation "
+"point closest to the point given. This is usually a "
+"[NavigationPolygonInstance]. For polygons added via [method navpoly_add], "
+"returns the owner that was given (or [code]null[/code] if the [code]owner[/"
+"code] parameter was omitted)."
+msgstr ""
+
+#: doc/classes/Navigation2D.xml:34
+msgid ""
+"Returns the path between two given points. Points are in local coordinate "
+"space. If [code]optimize[/code] is [code]true[/code] (the default), the path "
+"is smoothed by merging path segments where possible.\n"
+"[b]Note:[/b] This method has known issues and will often return non-optimal "
+"paths. These issues will be fixed in Godot 4.0."
+msgstr ""
+
+#: doc/classes/Navigation2D.xml:44
+msgid ""
+"Adds a [NavigationPolygon]. Returns an ID for use with [method "
+"navpoly_remove] or [method navpoly_set_transform]. If given, a [Transform2D] "
+"is applied to the polygon. The optional [code]owner[/code] is used as return "
+"value for [method get_closest_point_owner]."
+msgstr ""
+
+#: doc/classes/Navigation2D.xml:51
+msgid "Removes the [NavigationPolygon] with the given ID."
+msgstr ""
+
+#: doc/classes/Navigation2D.xml:59
+msgid ""
+"Sets the transform applied to the [NavigationPolygon] with the given ID."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:4
+msgid "A mesh to approximate the walkable areas and obstacles."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:7
+msgid ""
+"A navigation mesh is a collection of polygons that define which areas of an "
+"environment are traversable to aid agents in pathfinding through complicated "
+"spaces."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:17 doc/classes/NavigationPolygon.xml:49
+msgid ""
+"Adds a polygon using the indices of the vertices you get when calling "
+"[method get_vertices]."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:23
+msgid ""
+"Clears the array of polygons, but it doesn't clear the array of vertices."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:30
+msgid ""
+"Initializes the navigation mesh by setting the vertices and indices "
+"according to a [Mesh]."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:37
+msgid ""
+"Returns whether the specified [code]bit[/code] of the [member geometry/"
+"collision_mask] is set."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:44 doc/classes/NavigationPolygon.xml:81
+msgid ""
+"Returns a [PoolIntArray] containing the indices of the vertices of a created "
+"polygon."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:50
+msgid "Returns the number of polygons in the navigation mesh."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:56
+msgid ""
+"Returns a [PoolVector3Array] containing all the vertices being used to "
+"create the polygons."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:64
+msgid ""
+"If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/"
+"code] in the [member geometry/collision_mask].\n"
+"If [code]value[/code] is [code]false[/code], clears the specified [code]bit[/"
+"code] in the [member geometry/collision_mask]."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:72 doc/classes/NavigationPolygon.xml:121
+msgid ""
+"Sets the vertices that can be then indexed to create polygons with the "
+"[method add_polygon] method."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:78
+msgid ""
+"The minimum floor to ceiling height that will still allow the floor area to "
+"be considered walkable.\n"
+"[b]Note:[/b] While baking, this value will be rounded up to the nearest "
+"multiple of [member cell/height]."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:82
+msgid ""
+"The minimum ledge height that is considered to still be traversable.\n"
+"[b]Note:[/b] While baking, this value will be rounded down to the nearest "
+"multiple of [member cell/height]."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:86
+msgid "The maximum slope that is considered walkable, in degrees."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:89
+msgid ""
+"The distance to erode/shrink the walkable area of the heightfield away from "
+"obstructions.\n"
+"[b]Note:[/b] While baking, this value will be rounded up to the nearest "
+"multiple of [member cell/size]."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:93
+msgid "The Y axis cell size to use for fields."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:96
+msgid "The XZ plane cell size to use for fields."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:99
+msgid ""
+"The sampling distance to use when generating the detail mesh, in cell unit."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:102
+msgid ""
+"The maximum distance the detail mesh surface should deviate from "
+"heightfield, in cell unit."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:105
+msgid ""
+"The maximum distance a simplfied contour's border edges should deviate the "
+"original raw contour."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:108
+msgid ""
+"The maximum allowed length for contour edges along the border of the mesh.\n"
+"[b]Note:[/b] While baking, this value will be rounded up to the nearest "
+"multiple of [member cell/size]."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:112
+msgid ""
+"If [code]true[/code], marks walkable spans as not walkable if the clearance "
+"above the span is less than [member agent/height]."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:115
+msgid "If [code]true[/code], marks spans that are ledges as non-walkable."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:118
+msgid ""
+"If [code]true[/code], marks non-walkable spans as walkable if their maximum "
+"is within [member agent/max_climb] of a walkable neighbor."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:121
+msgid ""
+"The physics layers to scan for static colliders.\n"
+"Only used when [member geometry/parsed_geometry_type] is [constant "
+"PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:125
+msgid ""
+"Determines which type of nodes will be parsed as geometry. See [enum "
+"ParsedGeometryType] for possible values."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:128
+msgid ""
+"The source of the geometry used when baking. See [enum SourceGeometryMode] "
+"for possible values."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:131
+msgid ""
+"The name of the group to scan for geometry.\n"
+"Only used when [member geometry/source_geometry_mode] is [constant "
+"SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant "
+"SOURCE_GEOMETRY_GROUPS_EXPLICIT]."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:135
+msgid ""
+"The maximum number of vertices allowed for polygons generated during the "
+"contour to polygon conversion process."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:138
+msgid ""
+"Any regions with a size smaller than this will be merged with larger regions "
+"if possible.\n"
+"[b]Note:[/b] This value will be squared to calculate the number of cells. "
+"For example, a value of 20 will set the number of cells to 400."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:142
+msgid ""
+"The minimum size of a region for it to be created.\n"
+"[b]Note:[/b] This value will be squared to calculate the minimum number of "
+"cells allowed to form isolated island areas. For example, a value of 8 will "
+"set the number of cells to 64."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:146
+msgid ""
+"Partitioning algorithm for creating the navigation mesh polys. See [enum "
+"SamplePartitionType] for possible values."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:151
+msgid ""
+"Watershed partitioning. Generally the best choice if you precompute the "
+"navigation mesh, use this if you have large open areas."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:154
+msgid ""
+"Monotone partitioning. Use this if you want fast navigation mesh generation."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:157
+msgid ""
+"Layer partitioning. Good choice to use for tiled navigation mesh with medium "
+"and small sized tiles."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:160
+msgid "Represents the size of the [enum SamplePartitionType] enum."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:163
+msgid ""
+"Parses mesh instances as geometry. This includes [MeshInstance], [CSGShape], "
+"and [GridMap] nodes."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:166
+msgid ""
+"Parses [StaticBody] colliders as geometry. The collider should be in any of "
+"the layers specified by [member geometry/collision_mask]."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:169
+msgid ""
+"Both [constant PARSED_GEOMETRY_MESH_INSTANCES] and [constant "
+"PARSED_GEOMETRY_STATIC_COLLIDERS]."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:172
+msgid "Represents the size of the [enum ParsedGeometryType] enum."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:175
+msgid ""
+"Scans the child nodes of [NavigationMeshInstance] recursively for geometry."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:178
+msgid ""
+"Scans nodes in a group and their child nodes recursively for geometry. The "
+"group is specified by [member geometry/source_group_name]."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:181
+msgid ""
+"Uses nodes in a group for geometry. The group is specified by [member "
+"geometry/source_group_name]."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml:184
+msgid "Represents the size of the [enum SourceGeometryMode] enum."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml:4
+msgid "Node that instances navigation meshes into a scenario."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml:7
+msgid ""
+"NavigationMeshInstance is a node that takes a [NavigationMesh] resource and "
+"adds it to the current scenario by creating an instance of it."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml:15
+msgid "If [code]true[/code], the navigation mesh will be used by [Navigation]."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml:18
+msgid "The [NavigationMesh] resource for the instance."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml:4
+msgid ""
+"A node that has methods to draw outlines or use indices of vertices to "
+"create navigation polygons."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml:7
+msgid ""
+"There are two ways to create polygons. Either by using the [method "
+"add_outline] method, or using the [method add_polygon] method.\n"
+"Using [method add_outline]:\n"
+"[codeblock]\n"
+"var polygon = NavigationPolygon.new()\n"
+"var outline = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
+"50), Vector2(50, 0)])\n"
+"polygon.add_outline(outline)\n"
+"polygon.make_polygons_from_outlines()\n"
+"$NavigationPolygonInstance.navpoly = polygon\n"
+"[/codeblock]\n"
+"Using [method add_polygon] and indices of the vertices array.\n"
+"[codeblock]\n"
+"var polygon = NavigationPolygon.new()\n"
+"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
+"50), Vector2(50, 0)])\n"
+"polygon.set_vertices(vertices)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
+"polygon.add_polygon(indices)\n"
+"$NavigationPolygonInstance.navpoly = polygon\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml:34
+msgid ""
+"Appends a [PoolVector2Array] that contains the vertices of an outline to the "
+"internal array that contains all the outlines. You have to call [method "
+"make_polygons_from_outlines] in order for this array to be converted to "
+"polygons that the engine will use."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml:42
+msgid ""
+"Adds a [PoolVector2Array] that contains the vertices of an outline to the "
+"internal array that contains all the outlines at a fixed position. You have "
+"to call [method make_polygons_from_outlines] in order for this array to be "
+"converted to polygons that the engine will use."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml:55
+msgid ""
+"Clears the array of the outlines, but it doesn't clear the vertices and the "
+"polygons that were created by them."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml:61
+msgid ""
+"Clears the array of polygons, but it doesn't clear the array of outlines and "
+"vertices."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml:68
+msgid ""
+"Returns a [PoolVector2Array] containing the vertices of an outline that was "
+"created in the editor or by script."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml:74
+msgid ""
+"Returns the number of outlines that were created in the editor or by script."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml:87
+msgid "Returns the count of all polygons."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml:93
+msgid ""
+"Returns a [PoolVector2Array] containing all the vertices being used to "
+"create the polygons."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml:99
+msgid "Creates polygons from the outlines added in the editor or by script."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml:106
+msgid ""
+"Removes an outline created in the editor or by script. You have to call "
+"[method make_polygons_from_outlines] for the polygons to update."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml:114
+msgid ""
+"Changes an outline created in the editor or by script. You have to call "
+"[method make_polygons_from_outlines] for the polygons to update."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:4
+msgid ""
+"PacketPeer implementation using the [url=http://enet.bespin.org/index."
+"html]ENet[/url] library."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:7
+msgid ""
+"A PacketPeer implementation that should be passed to [member SceneTree."
+"network_peer] after being initialized as either a client or server. Events "
+"can then be handled by connecting to [SceneTree] signals.\n"
+"ENet's purpose is to provide a relatively thin, simple and robust network "
+"communication layer on top of UDP (User Datagram Protocol).\n"
+"[b]Note:[/b] ENet only uses UDP, not TCP. When forwarding the server port to "
+"make your server accessible on the public Internet, you only need to forward "
+"the server port in UDP. You can use the [UPNP] class to try to forward the "
+"server port automatically when starting the server."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:12
+#: doc/classes/NetworkedMultiplayerPeer.xml:11
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/networking/"
+"high_level_multiplayer.html"
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:13
+msgid "http://enet.bespin.org/usergroup0.html"
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:20
+msgid ""
+"Closes the connection. Ignored if no connection is currently established. If "
+"this is a server it tries to notify all clients before forcibly "
+"disconnecting them. If this is a client it simply closes the connection to "
+"the server."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:31
+msgid ""
+"Create client that connects to a server at [code]address[/code] using "
+"specified [code]port[/code]. The given address needs to be either a fully "
+"qualified domain name (e.g. [code]\"www.example.com\"[/code]) or an IP "
+"address in IPv4 or IPv6 format (e.g. [code]\"192.168.1.1\"[/code]). The "
+"[code]port[/code] is the port the server is listening on. The "
+"[code]in_bandwidth[/code] and [code]out_bandwidth[/code] parameters can be "
+"used to limit the incoming and outgoing bandwidth to the given number of "
+"bytes per second. The default of 0 means unlimited bandwidth. Note that ENet "
+"will strategically drop packets on specific sides of a connection between "
+"peers to ensure the peer's bandwidth is not overwhelmed. The bandwidth "
+"parameters also determine the window size of a connection which limits the "
+"amount of reliable packets that may be in transit at any given time. Returns "
+"[constant OK] if a client was created, [constant ERR_ALREADY_IN_USE] if this "
+"NetworkedMultiplayerENet instance already has an open connection (in which "
+"case you need to call [method close_connection] first) or [constant "
+"ERR_CANT_CREATE] if the client could not be created. If [code]client_port[/"
+"code] is specified, the client will also listen to the given port; this is "
+"useful for some NAT traversal techniques."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:41
+msgid ""
+"Create server that listens to connections via [code]port[/code]. The port "
+"needs to be an available, unused port between 0 and 65535. Note that ports "
+"below 1024 are privileged and may require elevated permissions depending on "
+"the platform. To change the interface the server listens on, use [method "
+"set_bind_ip]. The default IP is the wildcard [code]\"*\"[/code], which "
+"listens on all available interfaces. [code]max_clients[/code] is the maximum "
+"number of clients that are allowed at once, any number up to 4095 may be "
+"used, although the achievable number of simultaneous clients may be far "
+"lower and depends on the application. For additional details on the "
+"bandwidth parameters, see [method create_client]. Returns [constant OK] if a "
+"server was created, [constant ERR_ALREADY_IN_USE] if this "
+"NetworkedMultiplayerENet instance already has an open connection (in which "
+"case you need to call [method close_connection] first) or [constant "
+"ERR_CANT_CREATE] if the server could not be created."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:49
+msgid ""
+"Disconnect the given peer. If \"now\" is set to [code]true[/code], the "
+"connection will be closed immediately without flushing queued messages."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:55
+msgid ""
+"Returns the channel of the last packet fetched via [method PacketPeer."
+"get_packet]."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:61
+msgid ""
+"Returns the channel of the next packet that will be retrieved via [method "
+"PacketPeer.get_packet]."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:68
+#: modules/websocket/doc_classes/WebSocketServer.xml:27
+msgid "Returns the IP address of the given peer."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:75
+#: modules/websocket/doc_classes/WebSocketServer.xml:34
+msgid "Returns the remote port of the given peer."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:82
+msgid ""
+"The IP used when creating a server. This is set to the wildcard [code]\"*\"[/"
+"code] by default, which binds to all available interfaces. The given IP "
+"needs to be in IPv4 or IPv6 address format, for example: "
+"[code]\"192.168.1.1\"[/code]."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:89
+msgid ""
+"Configure the [X509Certificate] to use when [member use_dtls] is [code]true[/"
+"code]. For servers, you must also setup the [CryptoKey] via [method "
+"set_dtls_key]."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:96
+msgid ""
+"Configure the [CryptoKey] to use when [member use_dtls] is [code]true[/"
+"code]. Remember to also call [method set_dtls_certificate] to setup your "
+"[X509Certificate]."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:106
+msgid ""
+"Sets the timeout parameters for a peer.The timeout parameters control how "
+"and when a peer will timeout from a failure to acknowledge reliable traffic. "
+"Timeout values are expressed in milliseconds.\n"
+"The [code]timeout_limit[/code] is a factor that, multiplied by a value based "
+"on the average round trip time, will determine the timeout limit for a "
+"reliable packet. When that limit is reached, the timeout will be doubled, "
+"and the peer will be disconnected if that limit has reached "
+"[code]timeout_min[/code]. The [code]timeout_max[/code] parameter, on the "
+"other hand, defines a fixed timeout for which any packet must be "
+"acknowledged or the peer will be dropped."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:113
+msgid ""
+"Enforce ordered packets when using [constant NetworkedMultiplayerPeer."
+"TRANSFER_MODE_UNRELIABLE] (thus behaving similarly to [constant "
+"NetworkedMultiplayerPeer.TRANSFER_MODE_UNRELIABLE_ORDERED]). This is the "
+"only way to use ordering with the RPC system."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:116
+msgid ""
+"The number of channels to be used by ENet. Channels are used to separate "
+"different kinds of data. In reliable or ordered mode, for example, the "
+"packet delivery order is ensured on a per-channel basis. This is done to "
+"combat latency and reduces ordering restrictions on packets. The delivery "
+"status of a packet in one channel won't stall the delivery of other packets "
+"in another channel."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:119
+msgid ""
+"The compression method used for network packets. These have different "
+"tradeoffs of compression speed versus bandwidth, you may need to test which "
+"one works best for your use case if you use compression at all.\n"
+"[b]Note:[/b] Most games' network design involve sending many small packets "
+"frequently (smaller than 4 KB each). If in doubt, it is recommended to keep "
+"the default compression algorithm as it works best on these small packets.\n"
+"[b]Note:[/b] [member compression_mode] must be set to the same value on both "
+"the server and all its clients. Clients will fail to connect if the [member "
+"compression_mode] set on the client differs from the one set on the server. "
+"Prior to Godot 3.4, the default [member compression_mode] was [constant "
+"COMPRESS_NONE]. Nonetheless, mixing engine versions between clients and "
+"server is not recommended and not officially supported."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:124
+msgid ""
+"The hostname used for DTLS verification, to be compared against the \"CN\" "
+"value in the certificate provided by the server.\n"
+"When set to an empty string, the [code]address[/code] parameter passed to "
+"[method create_client] is used instead."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:128
+msgid ""
+"Enable or disable certificate verification when [member use_dtls] "
+"[code]true[/code]."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:132
+msgid ""
+"Enable or disable the server feature that notifies clients of other peers' "
+"connection/disconnection, and relays messages between them. When this option "
+"is [code]false[/code], clients won't be automatically notified of other "
+"peers and won't be able to send them packets through the server."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:135
+msgid ""
+"Set the default channel to be used to transfer data. By default, this value "
+"is [code]-1[/code] which means that ENet will only use 2 channels: one for "
+"reliable packets, and one for unreliable packets. The channel [code]0[/code] "
+"is reserved and cannot be used. Setting this member to any value between "
+"[code]0[/code] and [member channel_count] (excluded) will force ENet to use "
+"that channel for sending data. See [member channel_count] for more "
+"information about ENet channels."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:139
+msgid ""
+"When enabled, the client or server created by this peer, will use "
+"[PacketPeerDTLS] instead of raw UDP sockets for communicating with the "
+"remote peer. This will make the communication encrypted with DTLS at the "
+"cost of higher resource usage and potentially larger packet size.\n"
+"[b]Note:[/b] When creating a DTLS server, make sure you setup the key/"
+"certificate pair via [method set_dtls_key] and [method "
+"set_dtls_certificate]. For DTLS clients, have a look at the [member "
+"dtls_verify] option, and configure the certificate accordingly via [method "
+"set_dtls_certificate]."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:145
+msgid ""
+"No compression. This uses the most bandwidth, but has the upside of "
+"requiring the fewest CPU resources. This option may also be used to make "
+"network debugging using tools like Wireshark easier."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:148
+msgid ""
+"ENet's built-in range encoding. Works well on small packets, but is not the "
+"most efficient algorithm on packets larger than 4 KB."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:151
+msgid ""
+"[url=http://fastlz.org/]FastLZ[/url] compression. This option uses less CPU "
+"resources compared to [constant COMPRESS_ZLIB], at the expense of using more "
+"bandwidth."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:154
+msgid ""
+"[url=https://www.zlib.net/]Zlib[/url] compression. This option uses less "
+"bandwidth compared to [constant COMPRESS_FASTLZ], at the expense of using "
+"more CPU resources. Note that this algorithm is not very efficient on "
+"packets smaller than 4 KB. Therefore, it's recommended to use other "
+"compression algorithms in most cases."
+msgstr ""
+
+#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:157
+msgid "[url=https://facebook.github.io/zstd/]Zstandard[/url] compression."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:4
+msgid "A high-level network interface to simplify multiplayer interactions."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:7
+msgid ""
+"Manages the connection to network peers. Assigns unique IDs to each client "
+"connected to the server. See also [MultiplayerAPI].\n"
+"[b]Note:[/b] The high-level multiplayer API protocol is an implementation "
+"detail and isn't meant to be used by non-Godot servers. It may change "
+"without notice."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:12
+msgid "https://godotengine.org/asset-library/asset/537"
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:18
+msgid ""
+"Returns the current state of the connection. See [enum ConnectionStatus]."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:24
+msgid ""
+"Returns the ID of the [NetworkedMultiplayerPeer] who sent the most recent "
+"packet."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:30
+msgid "Returns the ID of this [NetworkedMultiplayerPeer]."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:36
+msgid "Waits up to 1 second to receive a new network event."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:43
+msgid ""
+"Sets the peer to which packets will be sent.\n"
+"The [code]id[/code] can be one of: [constant TARGET_PEER_BROADCAST] to send "
+"to all connected peers, [constant TARGET_PEER_SERVER] to send to the peer "
+"acting as server, a valid peer ID to send to that specific peer, a negative "
+"peer ID to send to all peers except that one. By default, the target peer is "
+"[constant TARGET_PEER_BROADCAST]."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:50
+msgid ""
+"If [code]true[/code], this [NetworkedMultiplayerPeer] refuses new "
+"connections."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:53
+msgid ""
+"The manner in which to send packets to the [code]target_peer[/code]. See "
+"[enum TransferMode]."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:59
+msgid "Emitted when a connection attempt fails."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:64
+msgid "Emitted when a connection attempt succeeds."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:70
+msgid "Emitted by the server when a client connects."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:76
+msgid "Emitted by the server when a client disconnects."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:81
+msgid "Emitted by clients when the server disconnects."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:87
+msgid ""
+"Packets are not acknowledged, no resend attempts are made for lost packets. "
+"Packets may arrive in any order. Potentially faster than [constant "
+"TRANSFER_MODE_UNRELIABLE_ORDERED]. Use for non-critical data, and always "
+"consider whether the order matters."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:90
+msgid ""
+"Packets are not acknowledged, no resend attempts are made for lost packets. "
+"Packets are received in the order they were sent in. Potentially faster than "
+"[constant TRANSFER_MODE_RELIABLE]. Use for non-critical data or data that "
+"would be outdated if received late due to resend attempt(s) anyway, for "
+"example movement and positional data."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:93
+msgid ""
+"Packets must be received and resend attempts should be made until the "
+"packets are acknowledged. Packets must be received in the order they were "
+"sent in. Most reliable transfer mode, but potentially the slowest due to the "
+"overhead. Use for critical data that must be transmitted and arrive in "
+"order, for example an ability being triggered or a chat message. Consider "
+"carefully if the information really is critical, and use sparingly."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:96
+msgid "The ongoing connection disconnected."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:99
+msgid "A connection attempt is ongoing."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:102
+msgid "The connection attempt succeeded."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:105
+msgid "Packets are sent to the server and then redistributed to other peers."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml:108
+msgid "Packets are sent to the server alone."
+msgstr ""
+
+#: doc/classes/NinePatchRect.xml:4
+msgid ""
+"Scalable texture-based frame that tiles the texture's centers and sides, but "
+"keeps the corners' original size. Perfect for panels and dialog boxes."
+msgstr ""
+
+#: doc/classes/NinePatchRect.xml:7
+msgid ""
+"Also known as 9-slice panels, NinePatchRect produces clean panels of any "
+"size, based on a small texture. To do so, it splits the texture in a 3×3 "
+"grid. When you scale the node, it tiles the texture's sides horizontally or "
+"vertically, the center on both axes but it doesn't scale or tile the corners."
+msgstr ""
+
+#: doc/classes/NinePatchRect.xml:16
+msgid ""
+"Returns the size of the margin identified by the given [enum Margin] "
+"constant."
+msgstr ""
+
+#: doc/classes/NinePatchRect.xml:24
+msgid ""
+"Sets the size of the margin identified by the given [enum Margin] constant "
+"to [code]value[/code] in pixels."
+msgstr ""
+
+#: doc/classes/NinePatchRect.xml:30
+msgid ""
+"The stretch mode to use for horizontal stretching/tiling. See [enum "
+"NinePatchRect.AxisStretchMode] for possible values."
+msgstr ""
+
+#: doc/classes/NinePatchRect.xml:33
+msgid ""
+"The stretch mode to use for vertical stretching/tiling. See [enum "
+"NinePatchRect.AxisStretchMode] for possible values."
+msgstr ""
+
+#: doc/classes/NinePatchRect.xml:36
+msgid ""
+"If [code]true[/code], draw the panel's center. Else, only draw the 9-slice's "
+"borders."
+msgstr ""
+
+#: doc/classes/NinePatchRect.xml:40
+msgid ""
+"The height of the 9-slice's bottom row. A margin of 16 means the 9-slice's "
+"bottom corners and side will have a height of 16 pixels. You can set all 4 "
+"margin values individually to create panels with non-uniform borders."
+msgstr ""
+
+#: doc/classes/NinePatchRect.xml:43
+msgid ""
+"The width of the 9-slice's left column. A margin of 16 means the 9-slice's "
+"left corners and side will have a width of 16 pixels. You can set all 4 "
+"margin values individually to create panels with non-uniform borders."
+msgstr ""
+
+#: doc/classes/NinePatchRect.xml:46
+msgid ""
+"The width of the 9-slice's right column. A margin of 16 means the 9-slice's "
+"right corners and side will have a width of 16 pixels. You can set all 4 "
+"margin values individually to create panels with non-uniform borders."
+msgstr ""
+
+#: doc/classes/NinePatchRect.xml:49
+msgid ""
+"The height of the 9-slice's top row. A margin of 16 means the 9-slice's top "
+"corners and side will have a height of 16 pixels. You can set all 4 margin "
+"values individually to create panels with non-uniform borders."
+msgstr ""
+
+#: doc/classes/NinePatchRect.xml:52
+msgid ""
+"Rectangular region of the texture to sample from. If you're working with an "
+"atlas, use this property to define the area the 9-slice should use. All "
+"other properties are relative to this one. If the rect is empty, "
+"NinePatchRect will use the whole texture."
+msgstr ""
+
+#: doc/classes/NinePatchRect.xml:55
+msgid "The node's texture resource."
+msgstr ""
+
+#: doc/classes/NinePatchRect.xml:61
+msgid "Emitted when the node's texture changes."
+msgstr ""
+
+#: doc/classes/NinePatchRect.xml:67
+msgid ""
+"Stretches the center texture across the NinePatchRect. This may cause the "
+"texture to be distorted."
+msgstr ""
+
+#: doc/classes/NinePatchRect.xml:70
+msgid ""
+"Repeats the center texture across the NinePatchRect. This won't cause any "
+"visible distortion. The texture must be seamless for this to work without "
+"displaying artifacts between edges.\n"
+"[b]Note:[/b] Only supported when using the GLES3 renderer. When using the "
+"GLES2 renderer, this will behave like [constant AXIS_STRETCH_MODE_STRETCH]."
+msgstr ""
+
+#: doc/classes/NinePatchRect.xml:74
+msgid ""
+"Repeats the center texture across the NinePatchRect, but will also stretch "
+"the texture to make sure each tile is visible in full. This may cause the "
+"texture to be distorted, but less than [constant AXIS_STRETCH_MODE_STRETCH]. "
+"The texture must be seamless for this to work without displaying artifacts "
+"between edges.\n"
+"[b]Note:[/b] Only supported when using the GLES3 renderer. When using the "
+"GLES2 renderer, this will behave like [constant AXIS_STRETCH_MODE_STRETCH]."
+msgstr ""
+
+#: doc/classes/Node.xml:4
+msgid "Base class for all [i]scene[/i] objects."
+msgstr ""
+
+#: doc/classes/Node.xml:7
+msgid ""
+"Nodes are Godot's building blocks. They can be assigned as the child of "
+"another node, resulting in a tree arrangement. A given node can contain any "
+"number of nodes as children with the requirement that all siblings (direct "
+"children of a node) should have unique names.\n"
+"A tree of nodes is called a [i]scene[/i]. Scenes can be saved to the disk "
+"and then instanced into other scenes. This allows for very high flexibility "
+"in the architecture and data model of Godot projects.\n"
+"[b]Scene tree:[/b] The [SceneTree] contains the active tree of nodes. When a "
+"node is added to the scene tree, it receives the [constant "
+"NOTIFICATION_ENTER_TREE] notification and its [method _enter_tree] callback "
+"is triggered. Child nodes are always added [i]after[/i] their parent node, i."
+"e. the [method _enter_tree] callback of a parent node will be triggered "
+"before its child's.\n"
+"Once all nodes have been added in the scene tree, they receive the [constant "
+"NOTIFICATION_READY] notification and their respective [method _ready] "
+"callbacks are triggered. For groups of nodes, the [method _ready] callback "
+"is called in reverse order, starting with the children and moving up to the "
+"parent nodes.\n"
+"This means that when adding a node to the scene tree, the following order "
+"will be used for the callbacks: [method _enter_tree] of the parent, [method "
+"_enter_tree] of the children, [method _ready] of the children and finally "
+"[method _ready] of the parent (recursively for the entire scene tree).\n"
+"[b]Processing:[/b] Nodes can override the \"process\" state, so that they "
+"receive a callback on each frame requesting them to process (do something). "
+"Normal processing (callback [method _process], toggled with [method "
+"set_process]) happens as fast as possible and is dependent on the frame "
+"rate, so the processing time [i]delta[/i] (in seconds) is passed as an "
+"argument. Physics processing (callback [method _physics_process], toggled "
+"with [method set_physics_process]) happens a fixed number of times per "
+"second (60 by default) and is useful for code related to the physics "
+"engine.\n"
+"Nodes can also process input events. When present, the [method _input] "
+"function will be called for each input that the program receives. In many "
+"cases, this can be overkill (unless used for simple projects), and the "
+"[method _unhandled_input] function might be preferred; it is called when the "
+"input event was not handled by anyone else (typically, GUI [Control] nodes), "
+"ensuring that the node only receives the events that were meant for it.\n"
+"To keep track of the scene hierarchy (especially when instancing scenes into "
+"other scenes), an \"owner\" can be set for the node with the [member owner] "
+"property. This keeps track of who instanced what. This is mostly useful when "
+"writing editors and tools, though.\n"
+"Finally, when a node is freed with [method Object.free] or [method "
+"queue_free], it will also free all its children.\n"
+"[b]Groups:[/b] Nodes can be added to as many groups as you want to be easy "
+"to manage, you could create groups like \"enemies\" or \"collectables\" for "
+"example, depending on your game. See [method add_to_group], [method "
+"is_in_group] and [method remove_from_group]. You can then retrieve all nodes "
+"in these groups, iterate them and even call methods on groups via the "
+"methods on [SceneTree].\n"
+"[b]Networking with nodes:[/b] After connecting to a server (or making one, "
+"see [NetworkedMultiplayerENet]), it is possible to use the built-in RPC "
+"(remote procedure call) system to communicate over the network. By calling "
+"[method rpc] with a method name, it will be called locally and in all "
+"connected peers (peers = clients and the server that accepts connections). "
+"To identify which node receives the RPC call, Godot will use its [NodePath] "
+"(make sure node names are the same on all peers). Also, take a look at the "
+"high-level networking tutorial and corresponding demos."
+msgstr ""
+
+#: doc/classes/Node.xml:20
+msgid ""
+"https://docs.godotengine.org/en/3.4/getting_started/step_by_step/"
+"scenes_and_nodes.html"
+msgstr ""
+
+#: doc/classes/Node.xml:21
+msgid "https://github.com/godotengine/godot-demo-projects/"
+msgstr ""
+
+#: doc/classes/Node.xml:27
+msgid ""
+"Called when the node enters the [SceneTree] (e.g. upon instancing, scene "
+"changing, or after calling [method add_child] in a script). If the node has "
+"children, its [method _enter_tree] callback will be called first, and then "
+"that of the children.\n"
+"Corresponds to the [constant NOTIFICATION_ENTER_TREE] notification in "
+"[method Object._notification]."
+msgstr ""
+
+#: doc/classes/Node.xml:34
+msgid ""
+"Called when the node is about to leave the [SceneTree] (e.g. upon freeing, "
+"scene changing, or after calling [method remove_child] in a script). If the "
+"node has children, its [method _exit_tree] callback will be called last, "
+"after all its children have left the tree.\n"
+"Corresponds to the [constant NOTIFICATION_EXIT_TREE] notification in [method "
+"Object._notification] and signal [signal tree_exiting]. To get notified when "
+"the node has already left the active tree, connect to the [signal "
+"tree_exited]."
+msgstr ""
+
+#: doc/classes/Node.xml:41
+msgid ""
+"The string returned from this method is displayed as a warning in the Scene "
+"Dock if the script that overrides it is a [code]tool[/code] script.\n"
+"Returning an empty string produces no warning.\n"
+"Call [method update_configuration_warning] when the warning needs to be "
+"updated for this node."
+msgstr ""
+
+#: doc/classes/Node.xml:50
+msgid ""
+"Called when there is an input event. The input event propagates up through "
+"the node tree until a node consumes it.\n"
+"It is only called if input processing is enabled, which is done "
+"automatically if this method is overridden, and can be toggled with [method "
+"set_process_input].\n"
+"To consume the input event and stop it propagating further to other nodes, "
+"[method SceneTree.set_input_as_handled] can be called.\n"
+"For gameplay input, [method _unhandled_input] and [method "
+"_unhandled_key_input] are usually a better fit as they allow the GUI to "
+"intercept the events first.\n"
+"[b]Note:[/b] This method is only called if the node is present in the scene "
+"tree (i.e. if it's not orphan)."
+msgstr ""
+
+#: doc/classes/Node.xml:61
+msgid ""
+"Called during the physics processing step of the main loop. Physics "
+"processing means that the frame rate is synced to the physics, i.e. the "
+"[code]delta[/code] variable should be constant. [code]delta[/code] is in "
+"seconds.\n"
+"It is only called if physics processing is enabled, which is done "
+"automatically if this method is overridden, and can be toggled with [method "
+"set_physics_process].\n"
+"Corresponds to the [constant NOTIFICATION_PHYSICS_PROCESS] notification in "
+"[method Object._notification].\n"
+"[b]Note:[/b] This method is only called if the node is present in the scene "
+"tree (i.e. if it's not orphan)."
+msgstr ""
+
+#: doc/classes/Node.xml:71
+msgid ""
+"Called during the processing step of the main loop. Processing happens at "
+"every frame and as fast as possible, so the [code]delta[/code] time since "
+"the previous frame is not constant. [code]delta[/code] is in seconds.\n"
+"It is only called if processing is enabled, which is done automatically if "
+"this method is overridden, and can be toggled with [method set_process].\n"
+"Corresponds to the [constant NOTIFICATION_PROCESS] notification in [method "
+"Object._notification].\n"
+"[b]Note:[/b] This method is only called if the node is present in the scene "
+"tree (i.e. if it's not orphan)."
+msgstr ""
+
+#: doc/classes/Node.xml:80
+msgid ""
+"Called when the node is \"ready\", i.e. when both the node and its children "
+"have entered the scene tree. If the node has children, their [method _ready] "
+"callbacks get triggered first, and the parent node will receive the ready "
+"notification afterwards.\n"
+"Corresponds to the [constant NOTIFICATION_READY] notification in [method "
+"Object._notification]. See also the [code]onready[/code] keyword for "
+"variables.\n"
+"Usually used for initialization. For even earlier initialization, [method "
+"Object._init] may be used. See also [method _enter_tree].\n"
+"[b]Note:[/b] [method _ready] may be called only once for each node. After "
+"removing a node from the scene tree and adding again, [code]_ready[/code] "
+"will not be called for the second time. This can be bypassed with requesting "
+"another call with [method request_ready], which may be called anywhere "
+"before adding the node again."
+msgstr ""
+
+#: doc/classes/Node.xml:90
+msgid ""
+"Called when an [InputEvent] hasn't been consumed by [method _input] or any "
+"GUI. The input event propagates up through the node tree until a node "
+"consumes it.\n"
+"It is only called if unhandled input processing is enabled, which is done "
+"automatically if this method is overridden, and can be toggled with [method "
+"set_process_unhandled_input].\n"
+"To consume the input event and stop it propagating further to other nodes, "
+"[method SceneTree.set_input_as_handled] can be called.\n"
+"For gameplay input, this and [method _unhandled_key_input] are usually a "
+"better fit than [method _input] as they allow the GUI to intercept the "
+"events first.\n"
+"[b]Note:[/b] This method is only called if the node is present in the scene "
+"tree (i.e. if it's not orphan)."
+msgstr ""
+
+#: doc/classes/Node.xml:101
+msgid ""
+"Called when an [InputEventKey] hasn't been consumed by [method _input] or "
+"any GUI. The input event propagates up through the node tree until a node "
+"consumes it.\n"
+"It is only called if unhandled key input processing is enabled, which is "
+"done automatically if this method is overridden, and can be toggled with "
+"[method set_process_unhandled_key_input].\n"
+"To consume the input event and stop it propagating further to other nodes, "
+"[method SceneTree.set_input_as_handled] can be called.\n"
+"For gameplay input, this and [method _unhandled_input] are usually a better "
+"fit than [method _input] as they allow the GUI to intercept the events "
+"first.\n"
+"[b]Note:[/b] This method is only called if the node is present in the scene "
+"tree (i.e. if it's not orphan)."
+msgstr ""
+
+#: doc/classes/Node.xml:113
+msgid ""
+"Adds a child node. Nodes can have any number of children, but every child "
+"must have a unique name. Child nodes are automatically deleted when the "
+"parent node is deleted, so an entire scene can be removed by deleting its "
+"topmost node.\n"
+"If [code]legible_unique_name[/code] is [code]true[/code], the child node "
+"will have a human-readable name based on the name of the node being "
+"instanced instead of its type.\n"
+"[b]Note:[/b] If the child node already has a parent, the function will fail. "
+"Use [method remove_child] first to remove the node from its current parent. "
+"For example:\n"
+"[codeblock]\n"
+"if child_node.get_parent():\n"
+" child_node.get_parent().remove_child(child_node)\n"
+"add_child(child_node)\n"
+"[/codeblock]\n"
+"[b]Note:[/b] If you want a child to be persisted to a [PackedScene], you "
+"must set [member owner] in addition to calling [method add_child]. This is "
+"typically relevant for [url=https://godot.readthedocs.io/en/3.2/tutorials/"
+"misc/running_code_in_the_editor.html]tool scripts[/url] and [url=https://"
+"godot.readthedocs.io/en/latest/tutorials/plugins/editor/index.html]editor "
+"plugins[/url]. If [method add_child] is called without setting [member "
+"owner], the newly added [Node] will not be visible in the scene tree, though "
+"it will be visible in the 2D/3D view."
+msgstr ""
+
+#: doc/classes/Node.xml:130
+msgid ""
+"Adds [code]child_node[/code] as a child. The child is placed below the given "
+"[code]node[/code] in the list of children.\n"
+"If [code]legible_unique_name[/code] is [code]true[/code], the child node "
+"will have a human-readable name based on the name of the node being "
+"instanced instead of its type."
+msgstr ""
+
+#: doc/classes/Node.xml:139
+msgid ""
+"Adds the node to a group. Groups are helpers to name and organize a subset "
+"of nodes, for example \"enemies\" or \"collectables\". A node can be in any "
+"number of groups. Nodes can be assigned a group at any time, but will not be "
+"added until they are inside the scene tree (see [method is_inside_tree]). "
+"See notes in the description, and the group methods in [SceneTree].\n"
+"The [code]persistent[/code] option is used when packing node to "
+"[PackedScene] and saving to file. Non-persistent groups aren't stored.\n"
+"[b]Note:[/b] For performance reasons, the order of node groups is [i]not[/i] "
+"guaranteed. The order of node groups should not be relied upon as it can "
+"vary across project runs."
+msgstr ""
+
+#: doc/classes/Node.xml:147
+msgid ""
+"Returns [code]true[/code] if the node can process while the scene tree is "
+"paused (see [member pause_mode]). Always returns [code]true[/code] if the "
+"scene tree is not paused, and [code]false[/code] if the node is not in the "
+"tree."
+msgstr ""
+
+#: doc/classes/Node.xml:154
+msgid ""
+"Duplicates the node, returning a new node.\n"
+"You can fine-tune the behavior using the [code]flags[/code] (see [enum "
+"DuplicateFlags]).\n"
+"[b]Note:[/b] It will not work properly if the node contains a script with "
+"constructor arguments (i.e. needs to supply arguments to [method Object."
+"_init] method). In that case, the node will be duplicated without a script."
+msgstr ""
+
+#: doc/classes/Node.xml:165
+msgid ""
+"Finds a descendant of this node whose name matches [code]mask[/code] as in "
+"[method String.match] (i.e. case-sensitive, but [code]\"*\"[/code] matches "
+"zero or more characters and [code]\"?\"[/code] matches any single character "
+"except [code]\".\"[/code]).\n"
+"[b]Note:[/b] It does not match against the full path, just against "
+"individual node names.\n"
+"If [code]owned[/code] is [code]true[/code], this method only finds nodes "
+"whose owner is this node. This is especially important for scenes "
+"instantiated through a script, because those scenes don't have an owner.\n"
+"[b]Note:[/b] As this method walks through all the descendants of the node, "
+"it is the slowest way to get a reference to another node. Whenever possible, "
+"consider using [method get_node] instead. To avoid using [method find_node] "
+"too often, consider caching the node reference into a variable."
+msgstr ""
+
+#: doc/classes/Node.xml:175
+msgid ""
+"Finds the first parent of the current node whose name matches [code]mask[/"
+"code] as in [method String.match] (i.e. case-sensitive, but [code]\"*\"[/"
+"code] matches zero or more characters and [code]\"?\"[/code] matches any "
+"single character except [code]\".\"[/code]).\n"
+"[b]Note:[/b] It does not match against the full path, just against "
+"individual node names.\n"
+"[b]Note:[/b] As this method walks upwards in the scene tree, it can be slow "
+"in large, deeply nested scene trees. Whenever possible, consider using "
+"[method get_node] instead. To avoid using [method find_parent] too often, "
+"consider caching the node reference into a variable."
+msgstr ""
+
+#: doc/classes/Node.xml:184
+msgid ""
+"Returns a child node by its index (see [method get_child_count]). This "
+"method is often used for iterating all children of a node.\n"
+"To access a child node via its name, use [method get_node]."
+msgstr ""
+
+#: doc/classes/Node.xml:191
+msgid "Returns the number of child nodes."
+msgstr ""
+
+#: doc/classes/Node.xml:197
+msgid "Returns an array of references to node's children."
+msgstr ""
+
+#: doc/classes/Node.xml:203
+msgid ""
+"Returns an array listing the groups that the node is a member of.\n"
+"[b]Note:[/b] For performance reasons, the order of node groups is [i]not[/i] "
+"guaranteed. The order of node groups should not be relied upon as it can "
+"vary across project runs."
+msgstr ""
+
+#: doc/classes/Node.xml:210
+msgid ""
+"Returns the node's index, i.e. its position among the siblings of its parent."
+msgstr ""
+
+#: doc/classes/Node.xml:216
+msgid ""
+"Returns the peer ID of the network master for this node. See [method "
+"set_network_master]."
+msgstr ""
+
+#: doc/classes/Node.xml:223
+msgid ""
+"Fetches a node. The [NodePath] can be either a relative path (from the "
+"current node) or an absolute path (in the scene tree) to a node. If the path "
+"does not exist, a [code]null instance[/code] is returned and an error is "
+"logged. Attempts to access methods on the return value will result in an "
+"\"Attempt to call <method> on a null instance.\" error.\n"
+"[b]Note:[/b] Fetching absolute paths only works when the node is inside the "
+"scene tree (see [method is_inside_tree]).\n"
+"[b]Example:[/b] Assume your current node is Character and the following "
+"tree:\n"
+"[codeblock]\n"
+"/root\n"
+"/root/Character\n"
+"/root/Character/Sword\n"
+"/root/Character/Backpack/Dagger\n"
+"/root/MyGame\n"
+"/root/Swamp/Alligator\n"
+"/root/Swamp/Mosquito\n"
+"/root/Swamp/Goblin\n"
+"[/codeblock]\n"
+"Possible paths are:\n"
+"[codeblock]\n"
+"get_node(\"Sword\")\n"
+"get_node(\"Backpack/Dagger\")\n"
+"get_node(\"../Swamp/Alligator\")\n"
+"get_node(\"/root/MyGame\")\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Node.xml:249
+msgid ""
+"Fetches a node and one of its resources as specified by the [NodePath]'s "
+"subname (e.g. [code]Area2D/CollisionShape2D:shape[/code]). If several nested "
+"resources are specified in the [NodePath], the last one will be fetched.\n"
+"The return value is an array of size 3: the first index points to the [Node] "
+"(or [code]null[/code] if not found), the second index points to the "
+"[Resource] (or [code]null[/code] if not found), and the third index is the "
+"remaining [NodePath], if any.\n"
+"For example, assuming that [code]Area2D/CollisionShape2D[/code] is a valid "
+"node and that its [code]shape[/code] property has been assigned a "
+"[RectangleShape2D] resource, one could have this kind of output:\n"
+"[codeblock]\n"
+"print(get_node_and_resource(\"Area2D/CollisionShape2D\")) # "
+"[[CollisionShape2D:1161], Null, ]\n"
+"print(get_node_and_resource(\"Area2D/CollisionShape2D:shape\")) # "
+"[[CollisionShape2D:1161], [RectangleShape2D:1156], ]\n"
+"print(get_node_and_resource(\"Area2D/CollisionShape2D:shape:extents\")) # "
+"[[CollisionShape2D:1161], [RectangleShape2D:1156], :extents]\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Node.xml:263
+msgid ""
+"Similar to [method get_node], but does not log an error if [code]path[/code] "
+"does not point to a valid [Node]."
+msgstr ""
+
+#: doc/classes/Node.xml:269
+msgid ""
+"Returns the parent node of the current node, or a [code]null instance[/code] "
+"if the node lacks a parent."
+msgstr ""
+
+#: doc/classes/Node.xml:275
+msgid ""
+"Returns the absolute path of the current node. This only works if the "
+"current node is inside the scene tree (see [method is_inside_tree])."
+msgstr ""
+
+#: doc/classes/Node.xml:282
+msgid ""
+"Returns the relative [NodePath] from this node to the specified [code]node[/"
+"code]. Both nodes must be in the same scene or the function will fail."
+msgstr ""
+
+#: doc/classes/Node.xml:288
+msgid ""
+"Returns the time elapsed (in seconds) since the last physics-bound frame "
+"(see [method _physics_process]). This is always a constant value in physics "
+"processing unless the frames per second is changed via [member Engine."
+"iterations_per_second]."
+msgstr ""
+
+#: doc/classes/Node.xml:294
+msgid ""
+"Returns the node's order in the scene tree branch. For example, if called on "
+"the first child node the position is [code]0[/code]."
+msgstr ""
+
+#: doc/classes/Node.xml:300
+msgid ""
+"Returns the time elapsed (in seconds) since the last process callback. This "
+"value may vary from frame to frame."
+msgstr ""
+
+#: doc/classes/Node.xml:306
+msgid ""
+"Returns [code]true[/code] if this is an instance load placeholder. See "
+"[InstancePlaceholder]."
+msgstr ""
+
+#: doc/classes/Node.xml:312
+msgid "Returns the [SceneTree] that contains this node."
+msgstr ""
+
+#: doc/classes/Node.xml:318
+msgid "Returns the node's [Viewport]."
+msgstr ""
+
+#: doc/classes/Node.xml:325
+msgid ""
+"Returns [code]true[/code] if the node that the [NodePath] points to exists."
+msgstr ""
+
+#: doc/classes/Node.xml:332
+msgid ""
+"Returns [code]true[/code] if the [NodePath] points to a valid node and its "
+"subname points to a valid resource, e.g. [code]Area2D/CollisionShape2D:"
+"shape[/code]. Properties with a non-[Resource] type (e.g. nodes or primitive "
+"math types) are not considered resources."
+msgstr ""
+
+#: doc/classes/Node.xml:339
+msgid ""
+"Returns [code]true[/code] if the given node is a direct or indirect child of "
+"the current node."
+msgstr ""
+
+#: doc/classes/Node.xml:345
+msgid ""
+"Returns [code]true[/code] if the node is folded (collapsed) in the Scene "
+"dock."
+msgstr ""
+
+#: doc/classes/Node.xml:352
+msgid ""
+"Returns [code]true[/code] if the given node occurs later in the scene "
+"hierarchy than the current node."
+msgstr ""
+
+#: doc/classes/Node.xml:359
+msgid ""
+"Returns [code]true[/code] if this node is in the specified group. See notes "
+"in the description, and the group methods in [SceneTree]."
+msgstr ""
+
+#: doc/classes/Node.xml:365
+msgid ""
+"Returns [code]true[/code] if this node is currently inside a [SceneTree]."
+msgstr ""
+
+#: doc/classes/Node.xml:371
+msgid ""
+"Returns [code]true[/code] if the local system is the master of this node."
+msgstr ""
+
+#: doc/classes/Node.xml:377
+msgid ""
+"Returns [code]true[/code] if physics processing is enabled (see [method "
+"set_physics_process])."
+msgstr ""
+
+#: doc/classes/Node.xml:383
+msgid ""
+"Returns [code]true[/code] if internal physics processing is enabled (see "
+"[method set_physics_process_internal])."
+msgstr ""
+
+#: doc/classes/Node.xml:389
+msgid ""
+"Returns [code]true[/code] if processing is enabled (see [method "
+"set_process])."
+msgstr ""
+
+#: doc/classes/Node.xml:395
+msgid ""
+"Returns [code]true[/code] if the node is processing input (see [method "
+"set_process_input])."
+msgstr ""
+
+#: doc/classes/Node.xml:401
+msgid ""
+"Returns [code]true[/code] if internal processing is enabled (see [method "
+"set_process_internal])."
+msgstr ""
+
+#: doc/classes/Node.xml:407
+msgid ""
+"Returns [code]true[/code] if the node is processing unhandled input (see "
+"[method set_process_unhandled_input])."
+msgstr ""
+
+#: doc/classes/Node.xml:413
+msgid ""
+"Returns [code]true[/code] if the node is processing unhandled key input (see "
+"[method set_process_unhandled_key_input])."
+msgstr ""
+
+#: doc/classes/Node.xml:421
+msgid ""
+"Moves a child node to a different position (order) among the other children. "
+"Since calls, signals, etc are performed by tree order, changing the order of "
+"children nodes may be useful."
+msgstr ""
+
+#: doc/classes/Node.xml:427
+msgid ""
+"Prints all stray nodes (nodes outside the [SceneTree]). Used for debugging. "
+"Works only in debug builds."
+msgstr ""
+
+#: doc/classes/Node.xml:433
+msgid ""
+"Prints the tree to stdout. Used mainly for debugging purposes. This version "
+"displays the path relative to the current node, and is good for copy/pasting "
+"into the [method get_node] function.\n"
+"[b]Example output:[/b]\n"
+"[codeblock]\n"
+"TheGame\n"
+"TheGame/Menu\n"
+"TheGame/Menu/Label\n"
+"TheGame/Menu/Camera2D\n"
+"TheGame/SplashScreen\n"
+"TheGame/SplashScreen/Camera2D\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Node.xml:448
+msgid ""
+"Similar to [method print_tree], this prints the tree to stdout. This version "
+"displays a more graphical representation similar to what is displayed in the "
+"scene inspector. It is useful for inspecting larger trees.\n"
+"[b]Example output:[/b]\n"
+"[codeblock]\n"
+" â”–â•´TheGame\n"
+" â” â•´Menu\n"
+" ┃ ┠╴Label\n"
+" ┃ ┖╴Camera2D\n"
+" â”–â•´SplashScreen\n"
+" â”–â•´Camera2D\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Node.xml:466
+msgid ""
+"Calls the given method (if present) with the arguments given in [code]args[/"
+"code] on this node and recursively on all its children. If the "
+"[code]parent_first[/code] argument is [code]true[/code], the method will be "
+"called on the current node first, then on all its children. If "
+"[code]parent_first[/code] is [code]false[/code], the children will be called "
+"first."
+msgstr ""
+
+#: doc/classes/Node.xml:473
+msgid ""
+"Notifies the current node and all its children recursively by calling "
+"[method Object.notification] on all of them."
+msgstr ""
+
+#: doc/classes/Node.xml:479
+msgid ""
+"Queues a node for deletion at the end of the current frame. When deleted, "
+"all of its child nodes will be deleted as well. This method ensures it's "
+"safe to delete the node, contrary to [method Object.free]. Use [method "
+"Object.is_queued_for_deletion] to check whether a node will be deleted at "
+"the end of the frame.\n"
+"[b]Important:[/b] If you have a variable pointing to a node, it will [i]not[/"
+"i] be assigned to [code]null[/code] once the node is freed. Instead, it will "
+"point to a [i]previously freed instance[/i] and you should validate it with "
+"[method @GDScript.is_instance_valid] before attempting to call its methods "
+"or access its properties."
+msgstr ""
+
+#: doc/classes/Node.xml:486
+msgid ""
+"Moves this node to the bottom of parent node's children hierarchy. This is "
+"often useful in GUIs ([Control] nodes), because their order of drawing "
+"depends on their order in the tree. The top Node is drawn first, then any "
+"siblings below the top Node in the hierarchy are successively drawn on top "
+"of it. After using [code]raise[/code], a Control will be drawn on top of its "
+"siblings."
+msgstr ""
+
+#: doc/classes/Node.xml:492
+msgid ""
+"Removes a node and sets all its children as children of the parent node (if "
+"it exists). All event subscriptions that pass by the removed node will be "
+"unsubscribed."
+msgstr ""
+
+#: doc/classes/Node.xml:499
+msgid ""
+"Removes a child node. The node is NOT deleted and must be deleted manually.\n"
+"[b]Note:[/b] This function may set the [member owner] of the removed Node "
+"(or its descendants) to be [code]null[/code], if that [member owner] is no "
+"longer a parent or ancestor."
+msgstr ""
+
+#: doc/classes/Node.xml:507
+msgid ""
+"Removes a node from a group. See notes in the description, and the group "
+"methods in [SceneTree]."
+msgstr ""
+
+#: doc/classes/Node.xml:515
+msgid ""
+"Replaces a node in a scene by the given one. Subscriptions that pass through "
+"this node will be lost."
+msgstr ""
+
+#: doc/classes/Node.xml:521
+msgid ""
+"Requests that [code]_ready[/code] be called again. Note that the method "
+"won't be called immediately, but is scheduled for when the node is added to "
+"the scene tree again (see [method _ready]). [code]_ready[/code] is called "
+"only for the node which requested it, which means that you need to request "
+"ready for each child if you want them to call [code]_ready[/code] too (in "
+"which case, [code]_ready[/code] will be called in the same order as it would "
+"normally)."
+msgstr ""
+
+#: doc/classes/Node.xml:528
+msgid ""
+"Sends a remote procedure call request for the given [code]method[/code] to "
+"peers on the network (and locally), optionally sending all additional "
+"arguments as arguments to the method called by the RPC. The call request "
+"will only be received by nodes with the same [NodePath], including the exact "
+"same node name. Behaviour depends on the RPC configuration for the given "
+"method, see [method rpc_config]. Methods are not exposed to RPCs by default. "
+"See also [method rset] and [method rset_config] for properties. Returns an "
+"empty [Variant].\n"
+"[b]Note:[/b] You can only safely use RPCs on clients after you received the "
+"[code]connected_to_server[/code] signal from the [SceneTree]. You also need "
+"to keep track of the connection state, either by the [SceneTree] signals "
+"like [code]server_disconnected[/code] or by checking [code]SceneTree."
+"network_peer.get_connection_status() == CONNECTION_CONNECTED[/code]."
+msgstr ""
+
+#: doc/classes/Node.xml:537
+msgid ""
+"Changes the RPC mode for the given [code]method[/code] to the given "
+"[code]mode[/code]. See [enum MultiplayerAPI.RPCMode]. An alternative is "
+"annotating methods and properties with the corresponding keywords "
+"([code]remote[/code], [code]master[/code], [code]puppet[/code], "
+"[code]remotesync[/code], [code]mastersync[/code], [code]puppetsync[/code]). "
+"By default, methods are not exposed to networking (and RPCs). See also "
+"[method rset] and [method rset_config] for properties."
+msgstr ""
+
+#: doc/classes/Node.xml:545
+msgid ""
+"Sends a [method rpc] to a specific peer identified by [code]peer_id[/code] "
+"(see [method NetworkedMultiplayerPeer.set_target_peer]). Returns an empty "
+"[Variant]."
+msgstr ""
+
+#: doc/classes/Node.xml:552
+msgid ""
+"Sends a [method rpc] using an unreliable protocol. Returns an empty "
+"[Variant]."
+msgstr ""
+
+#: doc/classes/Node.xml:560
+msgid ""
+"Sends a [method rpc] to a specific peer identified by [code]peer_id[/code] "
+"using an unreliable protocol (see [method NetworkedMultiplayerPeer."
+"set_target_peer]). Returns an empty [Variant]."
+msgstr ""
+
+#: doc/classes/Node.xml:568
+msgid ""
+"Remotely changes a property's value on other peers (and locally). Behaviour "
+"depends on the RPC configuration for the given property, see [method "
+"rset_config]. See also [method rpc] for RPCs for methods, most information "
+"applies to this method as well."
+msgstr ""
+
+#: doc/classes/Node.xml:576
+msgid ""
+"Changes the RPC mode for the given [code]property[/code] to the given "
+"[code]mode[/code]. See [enum MultiplayerAPI.RPCMode]. An alternative is "
+"annotating methods and properties with the corresponding keywords "
+"([code]remote[/code], [code]master[/code], [code]puppet[/code], "
+"[code]remotesync[/code], [code]mastersync[/code], [code]puppetsync[/code]). "
+"By default, properties are not exposed to networking (and RPCs). See also "
+"[method rpc] and [method rpc_config] for methods."
+msgstr ""
+
+#: doc/classes/Node.xml:585
+msgid ""
+"Remotely changes the property's value on a specific peer identified by "
+"[code]peer_id[/code] (see [method NetworkedMultiplayerPeer.set_target_peer])."
+msgstr ""
+
+#: doc/classes/Node.xml:593
+msgid ""
+"Remotely changes the property's value on other peers (and locally) using an "
+"unreliable protocol."
+msgstr ""
+
+#: doc/classes/Node.xml:602
+msgid ""
+"Remotely changes property's value on a specific peer identified by "
+"[code]peer_id[/code] using an unreliable protocol (see [method "
+"NetworkedMultiplayerPeer.set_target_peer])."
+msgstr ""
+
+#: doc/classes/Node.xml:609
+msgid "Sets the folded state of the node in the Scene dock."
+msgstr ""
+
+#: doc/classes/Node.xml:617
+msgid ""
+"Sets the node's network master to the peer with the given peer ID. The "
+"network master is the peer that has authority over the node on the network. "
+"Useful in conjunction with the [code]master[/code] and [code]puppet[/code] "
+"keywords. Inherited from the parent node by default, which ultimately "
+"defaults to peer ID 1 (the server). If [code]recursive[/code], the given "
+"peer is recursively set as the master for all children of this node."
+msgstr ""
+
+#: doc/classes/Node.xml:624
+msgid ""
+"Enables or disables physics (i.e. fixed framerate) processing. When a node "
+"is being processed, it will receive a [constant "
+"NOTIFICATION_PHYSICS_PROCESS] at a fixed (usually 60 FPS, see [member Engine."
+"iterations_per_second] to change) interval (and the [method "
+"_physics_process] callback will be called if exists). Enabled automatically "
+"if [method _physics_process] is overridden. Any calls to this before [method "
+"_ready] will be ignored."
+msgstr ""
+
+#: doc/classes/Node.xml:631
+msgid ""
+"Enables or disables internal physics for this node. Internal physics "
+"processing happens in isolation from the normal [method _physics_process] "
+"calls and is used by some nodes internally to guarantee proper functioning "
+"even if the node is paused or physics processing is disabled for scripting "
+"([method set_physics_process]). Only useful for advanced uses to manipulate "
+"built-in nodes' behavior.\n"
+"[b]Warning:[/b] Built-in Nodes rely on the internal processing for their own "
+"logic, so changing this value from your code may lead to unexpected "
+"behavior. Script access to this internal logic is provided for specific "
+"advanced uses, but is unsafe and not supported."
+msgstr ""
+
+#: doc/classes/Node.xml:639
+msgid ""
+"Enables or disables processing. When a node is being processed, it will "
+"receive a [constant NOTIFICATION_PROCESS] on every drawn frame (and the "
+"[method _process] callback will be called if exists). Enabled automatically "
+"if [method _process] is overridden. Any calls to this before [method _ready] "
+"will be ignored."
+msgstr ""
+
+#: doc/classes/Node.xml:646
+msgid ""
+"Enables or disables input processing. This is not required for GUI controls! "
+"Enabled automatically if [method _input] is overridden. Any calls to this "
+"before [method _ready] will be ignored."
+msgstr ""
+
+#: doc/classes/Node.xml:653
+msgid ""
+"Enables or disabled internal processing for this node. Internal processing "
+"happens in isolation from the normal [method _process] calls and is used by "
+"some nodes internally to guarantee proper functioning even if the node is "
+"paused or processing is disabled for scripting ([method set_process]). Only "
+"useful for advanced uses to manipulate built-in nodes' behavior.\n"
+"[b]Warning:[/b] Built-in Nodes rely on the internal processing for their own "
+"logic, so changing this value from your code may lead to unexpected "
+"behavior. Script access to this internal logic is provided for specific "
+"advanced uses, but is unsafe and not supported."
+msgstr ""
+
+#: doc/classes/Node.xml:661
+msgid ""
+"Enables unhandled input processing. This is not required for GUI controls! "
+"It enables the node to receive all input that was not previously handled "
+"(usually by a [Control]). Enabled automatically if [method _unhandled_input] "
+"is overridden. Any calls to this before [method _ready] will be ignored."
+msgstr ""
+
+#: doc/classes/Node.xml:668
+msgid ""
+"Enables unhandled key input processing. Enabled automatically if [method "
+"_unhandled_key_input] is overridden. Any calls to this before [method "
+"_ready] will be ignored."
+msgstr ""
+
+#: doc/classes/Node.xml:675
+msgid ""
+"Sets whether this is an instance load placeholder. See [InstancePlaceholder]."
+msgstr ""
+
+#: doc/classes/Node.xml:681
+msgid ""
+"Updates the warning displayed for this node in the Scene Dock.\n"
+"Use [method _get_configuration_warning] to setup the warning message to "
+"display."
+msgstr ""
+
+#: doc/classes/Node.xml:688
+msgid ""
+"The override to the default [MultiplayerAPI]. Set to [code]null[/code] to "
+"use the default [SceneTree] one."
+msgstr ""
+
+#: doc/classes/Node.xml:691
+msgid ""
+"If a scene is instantiated from a file, its topmost node contains the "
+"absolute file path from which it was loaded in [member filename] (e.g. "
+"[code]res://levels/1.tscn[/code]). Otherwise, [member filename] is set to an "
+"empty string."
+msgstr ""
+
+#: doc/classes/Node.xml:694
+msgid ""
+"The [MultiplayerAPI] instance associated with this node. Either the [member "
+"custom_multiplayer], or the default SceneTree one (if inside tree)."
+msgstr ""
+
+#: doc/classes/Node.xml:697
+msgid ""
+"The name of the node. This name is unique among the siblings (other child "
+"nodes from the same parent). When set to an existing name, the node will be "
+"automatically renamed.\n"
+"[b]Note:[/b] Auto-generated names might include the [code]@[/code] "
+"character, which is reserved for unique names when using [method add_child]. "
+"When setting the name manually, any [code]@[/code] will be removed."
+msgstr ""
+
+#: doc/classes/Node.xml:701
+msgid ""
+"The node owner. A node can have any other node as owner (as long as it is a "
+"valid parent, grandparent, etc. ascending in the tree). When saving a node "
+"(using [PackedScene]), all the nodes it owns will be saved with it. This "
+"allows for the creation of complex [SceneTree]s, with instancing and "
+"subinstancing."
+msgstr ""
+
+#: doc/classes/Node.xml:704
+msgid "Pause mode. How the node will behave if the [SceneTree] is paused."
+msgstr ""
+
+#: doc/classes/Node.xml:707
+msgid ""
+"The node's priority in the execution order of the enabled processing "
+"callbacks (i.e. [constant NOTIFICATION_PROCESS], [constant "
+"NOTIFICATION_PHYSICS_PROCESS] and their internal counterparts). Nodes whose "
+"process priority value is [i]lower[/i] will have their processing callbacks "
+"executed first."
+msgstr ""
+
+#: doc/classes/Node.xml:713
+msgid "Emitted when the node is ready."
+msgstr ""
+
+#: doc/classes/Node.xml:718
+msgid "Emitted when the node is renamed."
+msgstr ""
+
+#: doc/classes/Node.xml:723
+msgid "Emitted when the node enters the tree."
+msgstr ""
+
+#: doc/classes/Node.xml:728
+msgid "Emitted after the node exits the tree and is no longer active."
+msgstr ""
+
+#: doc/classes/Node.xml:733
+msgid ""
+"Emitted when the node is still active but about to exit the tree. This is "
+"the right place for de-initialization (or a \"destructor\", if you will)."
+msgstr ""
+
+#: doc/classes/Node.xml:739
+msgid "Notification received when the node enters a [SceneTree]."
+msgstr ""
+
+#: doc/classes/Node.xml:742
+msgid "Notification received when the node is about to exit a [SceneTree]."
+msgstr ""
+
+#: doc/classes/Node.xml:745
+msgid "Notification received when the node is moved in the parent."
+msgstr ""
+
+#: doc/classes/Node.xml:748
+msgid "Notification received when the node is ready. See [method _ready]."
+msgstr ""
+
+#: doc/classes/Node.xml:751
+msgid "Notification received when the node is paused."
+msgstr ""
+
+#: doc/classes/Node.xml:754
+msgid "Notification received when the node is unpaused."
+msgstr ""
+
+#: doc/classes/Node.xml:757
+msgid ""
+"Notification received every frame when the physics process flag is set (see "
+"[method set_physics_process])."
+msgstr ""
+
+#: doc/classes/Node.xml:760
+msgid ""
+"Notification received every frame when the process flag is set (see [method "
+"set_process])."
+msgstr ""
+
+#: doc/classes/Node.xml:763
+msgid ""
+"Notification received when a node is set as a child of another node.\n"
+"[b]Note:[/b] This doesn't mean that a node entered the [SceneTree]."
+msgstr ""
+
+#: doc/classes/Node.xml:767
+msgid ""
+"Notification received when a node is unparented (parent removed it from the "
+"list of children)."
+msgstr ""
+
+#: doc/classes/Node.xml:770
+msgid "Notification received when the node is instanced."
+msgstr ""
+
+#: doc/classes/Node.xml:773
+msgid "Notification received when a drag begins."
+msgstr ""
+
+#: doc/classes/Node.xml:776
+msgid "Notification received when a drag ends."
+msgstr ""
+
+#: doc/classes/Node.xml:779
+msgid "Notification received when the node's [NodePath] changed."
+msgstr ""
+
+#: doc/classes/Node.xml:782
+msgid ""
+"Notification received every frame when the internal process flag is set (see "
+"[method set_process_internal])."
+msgstr ""
+
+#: doc/classes/Node.xml:785
+msgid ""
+"Notification received every frame when the internal physics process flag is "
+"set (see [method set_physics_process_internal])."
+msgstr ""
+
+#: doc/classes/Node.xml:788
+msgid ""
+"Notification received when the node is ready, just before [constant "
+"NOTIFICATION_READY] is received. Unlike the latter, it's sent every time the "
+"node enters tree, instead of only once."
+msgstr ""
+
+#: doc/classes/Node.xml:846
+msgid ""
+"Inherits pause mode from the node's parent. For the root node, it is "
+"equivalent to [constant PAUSE_MODE_STOP]. Default."
+msgstr ""
+
+#: doc/classes/Node.xml:849
+msgid "Stops processing when the [SceneTree] is paused."
+msgstr ""
+
+#: doc/classes/Node.xml:852
+msgid "Continue to process regardless of the [SceneTree] pause state."
+msgstr ""
+
+#: doc/classes/Node.xml:855
+msgid "Duplicate the node's signals."
+msgstr ""
+
+#: doc/classes/Node.xml:858
+msgid "Duplicate the node's groups."
+msgstr ""
+
+#: doc/classes/Node.xml:861
+msgid "Duplicate the node's scripts."
+msgstr ""
+
+#: doc/classes/Node.xml:864
+msgid ""
+"Duplicate using instancing.\n"
+"An instance stays linked to the original so when the original changes, the "
+"instance changes too."
+msgstr ""
+
+#: doc/classes/Node2D.xml:4
+msgid ""
+"A 2D game object, inherited by all 2D-related nodes. Has a position, "
+"rotation, scale, and Z index."
+msgstr ""
+
+#: doc/classes/Node2D.xml:7
+msgid ""
+"A 2D game object, with a transform (position, rotation, and scale). All 2D "
+"nodes, including physics objects and sprites, inherit from Node2D. Use "
+"Node2D as a parent node to move, scale and rotate children in a 2D project. "
+"Also gives control of the node's render order."
+msgstr ""
+
+#: doc/classes/Node2D.xml:11 doc/classes/Vector2.xml:16
+msgid "https://github.com/godotengine/godot-demo-projects/tree/master/2d"
+msgstr ""
+
+#: doc/classes/Node2D.xml:18
+msgid "Multiplies the current scale by the [code]ratio[/code] vector."
+msgstr ""
+
+#: doc/classes/Node2D.xml:25
+msgid ""
+"Returns the angle between the node and the [code]point[/code] in radians.\n"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/master/img/"
+"node2d_get_angle_to.png]Illustration of the returned angle.[/url]"
+msgstr ""
+
+#: doc/classes/Node2D.xml:33
+msgid "Returns the [Transform2D] relative to this node's parent."
+msgstr ""
+
+#: doc/classes/Node2D.xml:40
+msgid "Adds the [code]offset[/code] vector to the node's global position."
+msgstr ""
+
+#: doc/classes/Node2D.xml:47
+msgid ""
+"Rotates the node so it points towards the [code]point[/code], which is "
+"expected to use global coordinates."
+msgstr ""
+
+#: doc/classes/Node2D.xml:55
+msgid ""
+"Applies a local translation on the node's X axis based on the [method Node."
+"_process]'s [code]delta[/code]. If [code]scaled[/code] is [code]false[/"
+"code], normalizes the movement."
+msgstr ""
+
+#: doc/classes/Node2D.xml:63
+msgid ""
+"Applies a local translation on the node's Y axis based on the [method Node."
+"_process]'s [code]delta[/code]. If [code]scaled[/code] is [code]false[/"
+"code], normalizes the movement."
+msgstr ""
+
+#: doc/classes/Node2D.xml:70
+msgid ""
+"Applies a rotation to the node, in radians, starting from its current "
+"rotation."
+msgstr ""
+
+#: doc/classes/Node2D.xml:77
+msgid ""
+"Transforms the provided local position into a position in global coordinate "
+"space. The input is expected to be local relative to the [Node2D] it is "
+"called on. e.g. Applying this method to the positions of child nodes will "
+"correctly transform their positions into the global coordinate space, but "
+"applying it to a node's own position will give an incorrect result, as it "
+"will incorporate the node's own transformation into its global position."
+msgstr ""
+
+#: doc/classes/Node2D.xml:84
+msgid ""
+"Transforms the provided global position into a position in local coordinate "
+"space. The output will be local relative to the [Node2D] it is called on. e."
+"g. It is appropriate for determining the positions of child nodes, but it is "
+"not appropriate for determining its own position relative to its parent."
+msgstr ""
+
+#: doc/classes/Node2D.xml:91
+msgid ""
+"Translates the node by the given [code]offset[/code] in local coordinates."
+msgstr ""
+
+#: doc/classes/Node2D.xml:97
+msgid "Global position."
+msgstr ""
+
+#: doc/classes/Node2D.xml:100
+msgid "Global rotation in radians."
+msgstr ""
+
+#: doc/classes/Node2D.xml:103
+msgid "Global rotation in degrees."
+msgstr ""
+
+#: doc/classes/Node2D.xml:106
+msgid "Global scale."
+msgstr ""
+
+#: doc/classes/Node2D.xml:109
+msgid "Global [Transform2D]."
+msgstr ""
+
+#: doc/classes/Node2D.xml:112
+msgid "Position, relative to the node's parent."
+msgstr ""
+
+#: doc/classes/Node2D.xml:115
+msgid "Rotation in radians, relative to the node's parent."
+msgstr ""
+
+#: doc/classes/Node2D.xml:118
+msgid "Rotation in degrees, relative to the node's parent."
+msgstr ""
+
+#: doc/classes/Node2D.xml:121
+msgid "The node's scale. Unscaled value: [code](1, 1)[/code]."
+msgstr ""
+
+#: doc/classes/Node2D.xml:124
+msgid "Local [Transform2D]."
+msgstr ""
+
+#: doc/classes/Node2D.xml:127
+msgid ""
+"If [code]true[/code], the node's Z index is relative to its parent's Z "
+"index. If this node's Z index is 2 and its parent's effective Z index is 3, "
+"then this node's effective Z index will be 2 + 3 = 5."
+msgstr ""
+
+#: doc/classes/Node2D.xml:130
+msgid ""
+"Z index. Controls the order in which the nodes render. A node with a higher "
+"Z index will display in front of others. Must be between [constant "
+"VisualServer.CANVAS_ITEM_Z_MIN] and [constant VisualServer."
+"CANVAS_ITEM_Z_MAX] (inclusive)."
+msgstr ""
+
+#: doc/classes/NodePath.xml:4
+msgid "Pre-parsed scene tree path."
+msgstr ""
+
+#: doc/classes/NodePath.xml:7
+msgid ""
+"A pre-parsed relative or absolute path in a scene tree, for use with [method "
+"Node.get_node] and similar functions. It can reference a node, a resource "
+"within a node, or a property of a node or resource. For instance, "
+"[code]\"Path2D/PathFollow2D/Sprite:texture:size\"[/code] would refer to the "
+"[code]size[/code] property of the [code]texture[/code] resource on the node "
+"named [code]\"Sprite\"[/code] which is a child of the other named nodes in "
+"the path.\n"
+"You will usually just pass a string to [method Node.get_node] and it will be "
+"automatically converted, but you may occasionally want to parse a path ahead "
+"of time with [NodePath] or the literal syntax [code]@\"path\"[/code]. "
+"Exporting a [NodePath] variable will give you a node selection widget in the "
+"properties panel of the editor, which can often be useful.\n"
+"A [NodePath] is composed of a list of slash-separated node names (like a "
+"filesystem path) and an optional colon-separated list of \"subnames\" which "
+"can be resources or properties.\n"
+"Some examples of NodePaths include the following:\n"
+"[codeblock]\n"
+"# No leading slash means it is relative to the current node.\n"
+"@\"A\" # Immediate child A\n"
+"@\"A/B\" # A's child B\n"
+"@\".\" # The current node.\n"
+"@\"..\" # The parent node.\n"
+"@\"../C\" # A sibling node C.\n"
+"# A leading slash means it is absolute from the SceneTree.\n"
+"@\"/root\" # Equivalent to get_tree().get_root().\n"
+"@\"/root/Main\" # If your main scene's root node were named \"Main\".\n"
+"@\"/root/MyAutoload\" # If you have an autoloaded node or scene.\n"
+"[/codeblock]\n"
+"[b]Note:[/b] In the editor, [NodePath] properties are automatically updated "
+"when moving, renaming or deleting a node in the scene tree, but they are "
+"never updated at runtime."
+msgstr ""
+
+#: doc/classes/NodePath.xml:26 doc/classes/PackedScene.xml:41
+#: doc/classes/Panel.xml:10 doc/classes/PanelContainer.xml:10
+#: doc/classes/TileMap.xml:16 doc/classes/TileSet.xml:16
+msgid "https://godotengine.org/asset-library/asset/520"
+msgstr ""
+
+#: doc/classes/NodePath.xml:33
+msgid ""
+"Creates a NodePath from a string, e.g. [code]\"Path2D/PathFollow2D/Sprite:"
+"texture:size\"[/code]. A path is absolute if it starts with a slash. "
+"Absolute paths are only valid in the global scene tree, not within "
+"individual scenes. In a relative path, [code]\".\"[/code] and [code]\"..\"[/"
+"code] indicate the current node and its parent.\n"
+"The \"subnames\" optionally included after the path to the target node can "
+"point to resources or properties, and can also be nested.\n"
+"Examples of valid NodePaths (assuming that those nodes exist and have the "
+"referenced resources or properties):\n"
+"[codeblock]\n"
+"# Points to the Sprite node\n"
+"\"Path2D/PathFollow2D/Sprite\"\n"
+"# Points to the Sprite node and its \"texture\" resource.\n"
+"# get_node() would retrieve \"Sprite\", while get_node_and_resource()\n"
+"# would retrieve both the Sprite node and the \"texture\" resource.\n"
+"\"Path2D/PathFollow2D/Sprite:texture\"\n"
+"# Points to the Sprite node and its \"position\" property.\n"
+"\"Path2D/PathFollow2D/Sprite:position\"\n"
+"# Points to the Sprite node and the \"x\" component of its \"position\" "
+"property.\n"
+"\"Path2D/PathFollow2D/Sprite:position:x\"\n"
+"# Absolute path (from \"root\")\n"
+"\"/root/Level/Path2D\"\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/NodePath.xml:55
+msgid ""
+"Returns a node path with a colon character ([code]:[/code]) prepended, "
+"transforming it to a pure property path with no node name (defaults to "
+"resolving from the current node).\n"
+"[codeblock]\n"
+"# This will be parsed as a node path to the \"x\" property in the \"position"
+"\" node\n"
+"var node_path = NodePath(\"position:x\")\n"
+"# This will be parsed as a node path to the \"x\" component of the \"position"
+"\" property in the current node\n"
+"var property_path = node_path.get_as_property_path()\n"
+"print(property_path) # :position:x\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/NodePath.xml:68
+msgid ""
+"Returns all subnames concatenated with a colon character ([code]:[/code]) as "
+"separator, i.e. the right side of the first colon in a node path.\n"
+"[codeblock]\n"
+"var nodepath = NodePath(\"Path2D/PathFollow2D/Sprite:texture:load_path\")\n"
+"print(nodepath.get_concatenated_subnames()) # texture:load_path\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/NodePath.xml:79
+msgid ""
+"Gets the node name indicated by [code]idx[/code] (0 to [method "
+"get_name_count]).\n"
+"[codeblock]\n"
+"var node_path = NodePath(\"Path2D/PathFollow2D/Sprite\")\n"
+"print(node_path.get_name(0)) # Path2D\n"
+"print(node_path.get_name(1)) # PathFollow2D\n"
+"print(node_path.get_name(2)) # Sprite\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/NodePath.xml:91
+msgid ""
+"Gets the number of node names which make up the path. Subnames (see [method "
+"get_subname_count]) are not included.\n"
+"For example, [code]\"Path2D/PathFollow2D/Sprite\"[/code] has 3 names."
+msgstr ""
+
+#: doc/classes/NodePath.xml:99
+msgid ""
+"Gets the resource or property name indicated by [code]idx[/code] (0 to "
+"[method get_subname_count]).\n"
+"[codeblock]\n"
+"var node_path = NodePath(\"Path2D/PathFollow2D/Sprite:texture:load_path\")\n"
+"print(node_path.get_subname(0)) # texture\n"
+"print(node_path.get_subname(1)) # load_path\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/NodePath.xml:110
+msgid ""
+"Gets the number of resource or property names (\"subnames\") in the path. "
+"Each subname is listed after a colon character ([code]:[/code]) in the node "
+"path.\n"
+"For example, [code]\"Path2D/PathFollow2D/Sprite:texture:load_path\"[/code] "
+"has 2 subnames."
+msgstr ""
+
+#: doc/classes/NodePath.xml:117
+msgid ""
+"Returns [code]true[/code] if the node path is absolute (as opposed to "
+"relative), which means that it starts with a slash character ([code]/[/"
+"code]). Absolute node paths can be used to access the root node ([code]\"/"
+"root\"[/code]) or autoloads (e.g. [code]\"/global\"[/code] if a \"global\" "
+"autoload was registered)."
+msgstr ""
+
+#: doc/classes/NodePath.xml:123
+msgid "Returns [code]true[/code] if the node path is empty."
+msgstr ""
+
+#: modules/opensimplex/doc_classes/NoiseTexture.xml:4
+msgid "[OpenSimplexNoise] filled texture."
+msgstr ""
+
+#: modules/opensimplex/doc_classes/NoiseTexture.xml:7
+msgid ""
+"Uses an [OpenSimplexNoise] to fill the texture data. You can specify the "
+"texture size but keep in mind that larger textures will take longer to "
+"generate and seamless noise only works with square sized textures.\n"
+"NoiseTexture can also generate normalmap textures.\n"
+"The class uses [Thread]s to generate the texture data internally, so [method "
+"Texture.get_data] may return [code]null[/code] if the generation process has "
+"not completed yet. In that case, you need to wait for the texture to be "
+"generated before accessing the data:\n"
+"[codeblock]\n"
+"var texture = preload(\"res://noise.tres\")\n"
+"yield(texture, \"changed\")\n"
+"var image = texture.get_data()\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/opensimplex/doc_classes/NoiseTexture.xml:22
+msgid ""
+"If [code]true[/code], the resulting texture contains a normal map created "
+"from the original noise interpreted as a bump map."
+msgstr ""
+
+#: modules/opensimplex/doc_classes/NoiseTexture.xml:25
+msgid ""
+"Strength of the bump maps used in this texture. A higher value will make the "
+"bump maps appear larger while a lower value will make them appear softer."
+msgstr ""
+
+#: modules/opensimplex/doc_classes/NoiseTexture.xml:29
+msgid "Height of the generated texture."
+msgstr ""
+
+#: modules/opensimplex/doc_classes/NoiseTexture.xml:32
+msgid "The [OpenSimplexNoise] instance used to generate the noise."
+msgstr ""
+
+#: modules/opensimplex/doc_classes/NoiseTexture.xml:35
+msgid ""
+"An offset used to specify the noise space coordinate of the top left corner "
+"of the generated noise. This value is ignored if [member seamless] is "
+"enabled."
+msgstr ""
+
+#: modules/opensimplex/doc_classes/NoiseTexture.xml:38
+msgid ""
+"Whether the texture can be tiled without visible seams or not. Seamless "
+"textures take longer to generate.\n"
+"[b]Note:[/b] Seamless noise has a lower contrast compared to non-seamless "
+"noise. This is due to the way noise uses higher dimensions for generating "
+"seamless noise."
+msgstr ""
+
+#: modules/opensimplex/doc_classes/NoiseTexture.xml:42
+msgid "Width of the generated texture."
+msgstr ""
+
+#: doc/classes/Object.xml:4
+msgid "Base class for all non-built-in types."
+msgstr ""
+
+#: doc/classes/Object.xml:7
+msgid ""
+"Every class which is not a built-in type inherits from this class.\n"
+"You can construct Objects from scripting languages, using [code]Object.new()"
+"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct Object"
+"\" node in VisualScript.\n"
+"Objects do not manage memory. If a class inherits from Object, you will have "
+"to delete instances of it manually. To do so, call the [method free] method "
+"from your script or delete the instance from C++.\n"
+"Some classes that extend Object add memory management. This is the case of "
+"[Reference], which counts references and deletes itself automatically when "
+"no longer referenced. [Node], another fundamental type, deletes all its "
+"children when freed from memory.\n"
+"Objects export properties, which are mainly useful for storage and editing, "
+"but not really so much in programming. Properties are exported in [method "
+"_get_property_list] and handled in [method _get] and [method _set]. However, "
+"scripting languages and C++ have simpler means to export them.\n"
+"Property membership can be tested directly in GDScript using [code]in[/"
+"code]:\n"
+"[codeblock]\n"
+"var n = Node2D.new()\n"
+"print(\"position\" in n) # Prints \"True\".\n"
+"print(\"other_property\" in n) # Prints \"False\".\n"
+"[/codeblock]\n"
+"The [code]in[/code] operator will evaluate to [code]true[/code] as long as "
+"the key exists, even if the value is [code]null[/code].\n"
+"Objects also receive notifications. Notifications are a simple way to notify "
+"the object about different events, so they can all be handled together. See "
+"[method _notification].\n"
+"[b]Note:[/b] Unlike references to a [Reference], references to an Object "
+"stored in a variable can become invalid without warning. Therefore, it's "
+"recommended to use [Reference] for data classes instead of [Object].\n"
+"[b]Note:[/b] Due to a bug, you can't create a \"plain\" Object using "
+"[code]Object.new()[/code]. Instead, use [code]ClassDB.instance(\"Object\")[/"
+"code]. This bug only applies to Object itself, not any of its descendents "
+"like [Reference]."
+msgstr ""
+
+#: doc/classes/Object.xml:24 doc/classes/Reference.xml:13
+#: doc/classes/Resource.xml:12
+msgid ""
+"https://docs.godotengine.org/en/3.4/getting_started/workflow/best_practices/"
+"node_alternatives.html"
+msgstr ""
+
+#: doc/classes/Object.xml:25
+msgid ""
+"https://docs.godotengine.org/en/3.4/getting_started/scripting/gdscript/"
+"gdscript_exports.html#advanced-exports"
+msgstr ""
+
+#: doc/classes/Object.xml:32
+msgid ""
+"Virtual method which can be overridden to customize the return value of "
+"[method get].\n"
+"Returns the given property. Returns [code]null[/code] if the [code]property[/"
+"code] does not exist."
+msgstr ""
+
+#: doc/classes/Object.xml:39
+msgid ""
+"Virtual method which can be overridden to customize the return value of "
+"[method get_property_list].\n"
+"Returns the object's property list as an [Array] of dictionaries.\n"
+"Each property's [Dictionary] must contain at least [code]name: String[/code] "
+"and [code]type: int[/code] (see [enum Variant.Type]) entries. Optionally, it "
+"can also include [code]hint: int[/code] (see [enum PropertyHint]), "
+"[code]hint_string: String[/code], and [code]usage: int[/code] (see [enum "
+"PropertyUsageFlags])."
+msgstr ""
+
+#: doc/classes/Object.xml:47
+msgid "Called when the object is initialized."
+msgstr ""
+
+#: doc/classes/Object.xml:54
+msgid ""
+"Called whenever the object receives a notification, which is identified in "
+"[code]what[/code] by a constant. The base [Object] has two constants "
+"[constant NOTIFICATION_POSTINITIALIZE] and [constant "
+"NOTIFICATION_PREDELETE], but subclasses such as [Node] define a lot more "
+"notifications which are also received by this method."
+msgstr ""
+
+#: doc/classes/Object.xml:62
+msgid ""
+"Virtual method which can be overridden to customize the return value of "
+"[method set].\n"
+"Sets a property. Returns [code]true[/code] if the [code]property[/code] "
+"exists."
+msgstr ""
+
+#: doc/classes/Object.xml:69
+msgid ""
+"Virtual method which can be overridden to customize the return value of "
+"[method to_string], and thus the object's representation where it is "
+"converted to a string, e.g. with [code]print(obj)[/code].\n"
+"Returns a [String] representing the object. If not overridden, defaults to "
+"[code]\"[ClassName:RID]\"[/code]."
+msgstr ""
+
+#: doc/classes/Object.xml:78
+msgid ""
+"Adds a user-defined [code]signal[/code]. Arguments are optional, but can be "
+"added as an [Array] of dictionaries, each containing [code]name: String[/"
+"code] and [code]type: int[/code] (see [enum Variant.Type]) entries."
+msgstr ""
+
+#: doc/classes/Object.xml:85
+msgid ""
+"Calls the [code]method[/code] on the object and returns the result. This "
+"method supports a variable number of arguments, so parameters are passed as "
+"a comma separated list. Example:\n"
+"[codeblock]\n"
+"call(\"set\", \"position\", Vector2(42.0, 0.0))\n"
+"[/codeblock]\n"
+"[b]Note:[/b] In C#, the method name must be specified as snake_case if it is "
+"defined by a built-in Godot node. This doesn't apply to user-defined methods "
+"where you should use the same convention as in the C# source (typically "
+"PascalCase)."
+msgstr ""
+
+#: doc/classes/Object.xml:96
+msgid ""
+"Calls the [code]method[/code] on the object during idle time. This method "
+"supports a variable number of arguments, so parameters are passed as a comma "
+"separated list. Example:\n"
+"[codeblock]\n"
+"call_deferred(\"set\", \"position\", Vector2(42.0, 0.0))\n"
+"[/codeblock]\n"
+"[b]Note:[/b] In C#, the method name must be specified as snake_case if it is "
+"defined by a built-in Godot node. This doesn't apply to user-defined methods "
+"where you should use the same convention as in the C# source (typically "
+"PascalCase)."
+msgstr ""
+
+#: doc/classes/Object.xml:108
+msgid ""
+"Calls the [code]method[/code] on the object and returns the result. "
+"Contrarily to [method call], this method does not support a variable number "
+"of arguments but expects all parameters to be via a single [Array].\n"
+"[codeblock]\n"
+"callv(\"set\", [ \"position\", Vector2(42.0, 0.0) ])\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Object.xml:117
+msgid ""
+"Returns [code]true[/code] if the object can translate strings. See [method "
+"set_message_translation] and [method tr]."
+msgstr ""
+
+#: doc/classes/Object.xml:128
+msgid ""
+"Connects a [code]signal[/code] to a [code]method[/code] on a [code]target[/"
+"code] object. Pass optional [code]binds[/code] to the call as an [Array] of "
+"parameters. These parameters will be passed to the method after any "
+"parameter used in the call to [method emit_signal]. Use [code]flags[/code] "
+"to set deferred or one-shot connections. See [enum ConnectFlags] constants.\n"
+"A [code]signal[/code] can only be connected once to a [code]method[/code]. "
+"It will throw an error if already connected, unless the signal was connected "
+"with [constant CONNECT_REFERENCE_COUNTED]. To avoid this, first, use [method "
+"is_connected] to check for existing connections.\n"
+"If the [code]target[/code] is destroyed in the game's lifecycle, the "
+"connection will be lost.\n"
+"Examples:\n"
+"[codeblock]\n"
+"connect(\"pressed\", self, \"_on_Button_pressed\") # BaseButton signal\n"
+"connect(\"text_entered\", self, \"_on_LineEdit_text_entered\") # LineEdit "
+"signal\n"
+"connect(\"hit\", self, \"_on_Player_hit\", [ weapon_type, damage ]) # User-"
+"defined signal\n"
+"[/codeblock]\n"
+"An example of the relationship between [code]binds[/code] passed to [method "
+"connect] and parameters used when calling [method emit_signal]:\n"
+"[codeblock]\n"
+"connect(\"hit\", self, \"_on_Player_hit\", [ weapon_type, damage ]) # "
+"weapon_type and damage are passed last\n"
+"emit_signal(\"hit\", \"Dark lord\", 5) # \"Dark lord\" and 5 are passed "
+"first\n"
+"func _on_Player_hit(hit_by, level, weapon_type, damage):\n"
+" print(\"Hit by %s (lvl %d) with weapon %s for %d damage\" % [hit_by, "
+"level, weapon_type, damage])\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Object.xml:152
+msgid ""
+"Disconnects a [code]signal[/code] from a [code]method[/code] on the given "
+"[code]target[/code].\n"
+"If you try to disconnect a connection that does not exist, the method will "
+"throw an error. Use [method is_connected] to ensure that the connection "
+"exists."
+msgstr ""
+
+#: doc/classes/Object.xml:160
+msgid ""
+"Emits the given [code]signal[/code]. The signal must exist, so it should be "
+"a built-in signal of this class or one of its parent classes, or a user-"
+"defined signal. This method supports a variable number of arguments, so "
+"parameters are passed as a comma separated list. Example:\n"
+"[codeblock]\n"
+"emit_signal(\"hit\", weapon_type, damage)\n"
+"emit_signal(\"game_over\")\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Object.xml:170
+msgid ""
+"Deletes the object from memory immediately. For [Node]s, you may want to use "
+"[method Node.queue_free] to queue the node for safe deletion at the end of "
+"the current frame.\n"
+"[b]Important:[/b] If you have a variable pointing to an object, it will "
+"[i]not[/i] be assigned to [code]null[/code] once the object is freed. "
+"Instead, it will point to a [i]previously freed instance[/i] and you should "
+"validate it with [method @GDScript.is_instance_valid] before attempting to "
+"call its methods or access its properties."
+msgstr ""
+
+#: doc/classes/Object.xml:178
+msgid ""
+"Returns the [Variant] value of the given [code]property[/code]. If the "
+"[code]property[/code] doesn't exist, this will return [code]null[/code].\n"
+"[b]Note:[/b] In C#, the property name must be specified as snake_case if it "
+"is defined by a built-in Godot node. This doesn't apply to user-defined "
+"properties where you should use the same convention as in the C# source "
+"(typically PascalCase)."
+msgstr ""
+
+#: doc/classes/Object.xml:185
+msgid ""
+"Returns the object's class as a [String]. See also [method is_class].\n"
+"[b]Note:[/b] [method get_class] does not take [code]class_name[/code] "
+"declarations into account. If the object has a [code]class_name[/code] "
+"defined, the base class name will be returned instead."
+msgstr ""
+
+#: doc/classes/Object.xml:192
+msgid ""
+"Returns an [Array] of dictionaries with information about signals that are "
+"connected to the object.\n"
+"Each [Dictionary] contains three String entries:\n"
+"- [code]source[/code] is a reference to the signal emitter.\n"
+"- [code]signal_name[/code] is the name of the connected signal.\n"
+"- [code]method_name[/code] is the name of the method to which the signal is "
+"connected."
+msgstr ""
+
+#: doc/classes/Object.xml:203
+msgid ""
+"Gets the object's property indexed by the given [NodePath]. The node path "
+"should be relative to the current object and can use the colon character "
+"([code]:[/code]) to access nested properties. Examples: [code]\"position:x"
+"\"[/code] or [code]\"material:next_pass:blend_mode\"[/code]."
+msgstr ""
+
+#: doc/classes/Object.xml:209
+msgid ""
+"Returns the object's unique instance ID.\n"
+"This ID can be saved in [EncodedObjectAsID], and can be used to retrieve the "
+"object instance with [method @GDScript.instance_from_id]."
+msgstr ""
+
+#: doc/classes/Object.xml:217
+msgid "Returns the object's metadata entry for the given [code]name[/code]."
+msgstr ""
+
+#: doc/classes/Object.xml:223
+msgid "Returns the object's metadata as a [PoolStringArray]."
+msgstr ""
+
+#: doc/classes/Object.xml:229
+msgid "Returns the object's methods and their signatures as an [Array]."
+msgstr ""
+
+#: doc/classes/Object.xml:235
+msgid ""
+"Returns the object's property list as an [Array] of dictionaries.\n"
+"Each property's [Dictionary] contain at least [code]name: String[/code] and "
+"[code]type: int[/code] (see [enum Variant.Type]) entries. Optionally, it can "
+"also include [code]hint: int[/code] (see [enum PropertyHint]), "
+"[code]hint_string: String[/code], and [code]usage: int[/code] (see [enum "
+"PropertyUsageFlags])."
+msgstr ""
+
+#: doc/classes/Object.xml:242
+msgid ""
+"Returns the object's [Script] instance, or [code]null[/code] if none is "
+"assigned."
+msgstr ""
+
+#: doc/classes/Object.xml:249
+msgid "Returns an [Array] of connections for the given [code]signal[/code]."
+msgstr ""
+
+#: doc/classes/Object.xml:255
+msgid "Returns the list of signals as an [Array] of dictionaries."
+msgstr ""
+
+#: doc/classes/Object.xml:262
+msgid ""
+"Returns [code]true[/code] if a metadata entry is found with the given "
+"[code]name[/code]."
+msgstr ""
+
+#: doc/classes/Object.xml:269
+msgid ""
+"Returns [code]true[/code] if the object contains the given [code]method[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Object.xml:276
+msgid "Returns [code]true[/code] if the given [code]signal[/code] exists."
+msgstr ""
+
+#: doc/classes/Object.xml:283
+msgid ""
+"Returns [code]true[/code] if the given user-defined [code]signal[/code] "
+"exists. Only signals added using [method add_user_signal] are taken into "
+"account."
+msgstr ""
+
+#: doc/classes/Object.xml:289
+msgid "Returns [code]true[/code] if signal emission blocking is enabled."
+msgstr ""
+
+#: doc/classes/Object.xml:296
+msgid ""
+"Returns [code]true[/code] if the object inherits from the given [code]class[/"
+"code]. See also [method get_class].\n"
+"[b]Note:[/b] [method is_class] does not take [code]class_name[/code] "
+"declarations into account. If the object has a [code]class_name[/code] "
+"defined, [method is_class] will return [code]false[/code] for that name."
+msgstr ""
+
+#: doc/classes/Object.xml:306
+msgid ""
+"Returns [code]true[/code] if a connection exists for a given [code]signal[/"
+"code], [code]target[/code], and [code]method[/code]."
+msgstr ""
+
+#: doc/classes/Object.xml:312
+msgid ""
+"Returns [code]true[/code] if the [method Node.queue_free] method was called "
+"for the object."
+msgstr ""
+
+#: doc/classes/Object.xml:320
+msgid ""
+"Send a given notification to the object, which will also trigger a call to "
+"the [method _notification] method of all classes that the object inherits "
+"from.\n"
+"If [code]reversed[/code] is [code]true[/code], [method _notification] is "
+"called first on the object's own class, and then up to its successive parent "
+"classes. If [code]reversed[/code] is [code]false[/code], [method "
+"_notification] is called first on the highest ancestor ([Object] itself), "
+"and then down to its successive inheriting classes."
+msgstr ""
+
+#: doc/classes/Object.xml:327
+msgid ""
+"Notify the editor that the property list has changed, so that editor plugins "
+"can take the new values into account. Does nothing on export builds."
+msgstr ""
+
+#: doc/classes/Object.xml:334
+msgid ""
+"Removes a given entry from the object's metadata. See also [method set_meta]."
+msgstr ""
+
+#: doc/classes/Object.xml:342
+msgid ""
+"Assigns a new value to the given property. If the [code]property[/code] does "
+"not exist, nothing will happen.\n"
+"[b]Note:[/b] In C#, the property name must be specified as snake_case if it "
+"is defined by a built-in Godot node. This doesn't apply to user-defined "
+"properties where you should use the same convention as in the C# source "
+"(typically PascalCase)."
+msgstr ""
+
+#: doc/classes/Object.xml:350
+msgid "If set to [code]true[/code], signal emission is blocked."
+msgstr ""
+
+#: doc/classes/Object.xml:358
+msgid ""
+"Assigns a new value to the given property, after the current frame's physics "
+"step. This is equivalent to calling [method set] via [method call_deferred], "
+"i.e. [code]call_deferred(\"set\", property, value)[/code].\n"
+"[b]Note:[/b] In C#, the property name must be specified as snake_case if it "
+"is defined by a built-in Godot node. This doesn't apply to user-defined "
+"properties where you should use the same convention as in the C# source "
+"(typically PascalCase)."
+msgstr ""
+
+#: doc/classes/Object.xml:367
+msgid ""
+"Assigns a new value to the property identified by the [NodePath]. The node "
+"path should be relative to the current object and can use the colon "
+"character ([code]:[/code]) to access nested properties. Example:\n"
+"[codeblock]\n"
+"set_indexed(\"position\", Vector2(42, 0))\n"
+"set_indexed(\"position:y\", -10)\n"
+"print(position) # (42, -10)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Object.xml:379
+msgid ""
+"Defines whether the object can translate strings (with calls to [method "
+"tr]). Enabled by default."
+msgstr ""
+
+#: doc/classes/Object.xml:387
+msgid ""
+"Adds, changes or removes a given entry in the object's metadata. Metadata "
+"are serialized and can take any [Variant] value.\n"
+"To remove a given entry from the object's metadata, use [method "
+"remove_meta]. Metadata is also removed if its value is set to [code]null[/"
+"code]. This means you can also use [code]set_meta(\"name\", null)[/code] to "
+"remove metadata for [code]\"name\"[/code]."
+msgstr ""
+
+#: doc/classes/Object.xml:395
+msgid ""
+"Assigns a script to the object. Each object can have a single script "
+"assigned to it, which are used to extend its functionality.\n"
+"If the object already had a script, the previous script instance will be "
+"freed and its variables and state will be lost. The new script's [method "
+"_init] method will be called."
+msgstr ""
+
+#: doc/classes/Object.xml:402
+msgid ""
+"Returns a [String] representing the object. If not overridden, defaults to "
+"[code]\"[ClassName:RID]\"[/code].\n"
+"Override the method [method _to_string] to customize the [String] "
+"representation."
+msgstr ""
+
+#: doc/classes/Object.xml:410
+msgid ""
+"Translates a message using translation catalogs configured in the Project "
+"Settings.\n"
+"Only works if message translation is enabled (which it is by default), "
+"otherwise it returns the [code]message[/code] unchanged. See [method "
+"set_message_translation]."
+msgstr ""
+
+#: doc/classes/Object.xml:418
+msgid "Emitted whenever the object's script is changed."
+msgstr ""
+
+#: doc/classes/Object.xml:424
+msgid "Called right when the object is initialized. Not available in script."
+msgstr ""
+
+#: doc/classes/Object.xml:427
+msgid "Called before the object is about to be deleted."
+msgstr ""
+
+#: doc/classes/Object.xml:430
+msgid ""
+"Connects a signal in deferred mode. This way, signal emissions are stored in "
+"a queue, then set on idle time."
+msgstr ""
+
+#: doc/classes/Object.xml:433
+msgid "Persisting connections are saved when the object is serialized to file."
+msgstr ""
+
+#: doc/classes/Object.xml:436
+msgid "One-shot connections disconnect themselves after emission."
+msgstr ""
+
+#: doc/classes/Object.xml:439
+msgid ""
+"Connect a signal as reference-counted. This means that a given signal can be "
+"connected several times to the same target, and will only be fully "
+"disconnected once no references are left."
+msgstr ""
+
+#: doc/classes/Occluder.xml:4
+msgid "Allows [OccluderShape]s to be used for occlusion culling."
+msgstr ""
+
+#: doc/classes/Occluder.xml:7
+msgid ""
+"[Occluder]s that are placed within your scene will automatically cull "
+"objects that are hidden from view by the occluder. This can increase "
+"performance by decreasing the amount of objects drawn.\n"
+"[Occluder]s are totally dynamic, you can move them as you wish. This means "
+"you can for example, place occluders on a moving spaceship, and have it "
+"occlude objects as it flies past.\n"
+"You can place a large number of [Occluder]s within a scene. As it would be "
+"counterproductive to cull against hundreds of occluders, the system will "
+"automatically choose a selection of these for active use during any given "
+"frame, based a screen space metric. Larger occluders are favored, as well as "
+"those close to the camera. Note that a small occluder close to the camera "
+"may be a better occluder in terms of screen space than a large occluder far "
+"in the distance.\n"
+"The type of occlusion primitive is determined by the [OccluderShape] that "
+"you add to the [Occluder]. Some [OccluderShape]s may allow more than one "
+"primitive in a single, node, for greater efficiency.\n"
+"Although [Occluder]s work in general use, they also become even more "
+"powerful when used in conjunction with the portal system. Occluders are "
+"placed in rooms (based on their origin), and can block portals (and thus "
+"entire rooms) as well as objects from rendering."
+msgstr ""
+
+#: doc/classes/OccluderPolygon2D.xml:4
+msgid "Defines a 2D polygon for LightOccluder2D."
+msgstr ""
+
+#: doc/classes/OccluderPolygon2D.xml:7
+msgid ""
+"Editor facility that helps you draw a 2D polygon used as resource for "
+"[LightOccluder2D]."
+msgstr ""
+
+#: doc/classes/OccluderPolygon2D.xml:15
+msgid ""
+"If [code]true[/code], closes the polygon. A closed OccluderPolygon2D "
+"occludes the light coming from any direction. An opened OccluderPolygon2D "
+"occludes the light only at its outline's direction."
+msgstr ""
+
+#: doc/classes/OccluderPolygon2D.xml:18
+msgid "The culling mode to use."
+msgstr ""
+
+#: doc/classes/OccluderPolygon2D.xml:21
+msgid ""
+"A [Vector2] array with the index for polygon's vertices positions.\n"
+"[b]Note:[/b] The returned value is a copy of the underlying array, rather "
+"than a reference."
+msgstr ""
+
+#: doc/classes/OccluderPolygon2D.xml:27
+msgid "Culling is disabled. See [member cull_mode]."
+msgstr ""
+
+#: doc/classes/OccluderPolygon2D.xml:30
+msgid ""
+"Culling is performed in the clockwise direction. See [member cull_mode]."
+msgstr ""
+
+#: doc/classes/OccluderPolygon2D.xml:33
+msgid ""
+"Culling is performed in the counterclockwise direction. See [member "
+"cull_mode]."
+msgstr ""
+
+#: doc/classes/OccluderShape.xml:4
+msgid ""
+"Base class for shapes used for occlusion culling by the [Occluder] node."
+msgstr ""
+
+#: doc/classes/OccluderShape.xml:7
+msgid "[Occluder]s can use any primitive shape derived from [OccluderShape]."
+msgstr ""
+
+#: doc/classes/OccluderShapeSphere.xml:4
+msgid "Spherical occlusion primitive for use with the [Occluder] node."
+msgstr ""
+
+#: doc/classes/OccluderShapeSphere.xml:7
+msgid ""
+"[OccluderShape]s are resources used by [Occluder] nodes, allowing geometric "
+"occlusion culling.\n"
+"This shape can include multiple spheres. These can be created and deleted "
+"either in the Editor inspector or by calling [code]set_spheres[/code]. The "
+"sphere positions can be set by dragging the handle in the Editor viewport. "
+"The radius can be set with the smaller handle."
+msgstr ""
+
+#: doc/classes/OccluderShapeSphere.xml:18
+msgid "Sets an individual sphere's position."
+msgstr ""
+
+#: doc/classes/OccluderShapeSphere.xml:26
+msgid "Sets an individual sphere's radius."
+msgstr ""
+
+#: doc/classes/OccluderShapeSphere.xml:32
+msgid ""
+"The sphere data can be accessed as an array of [Plane]s. The position of "
+"each sphere is stored in the [code]normal[/code], and the radius is stored "
+"in the [code]d[/code] value of the plane."
+msgstr ""
+
+#: doc/classes/OmniLight.xml:4
+msgid "Omnidirectional light, such as a light bulb or a candle."
+msgstr ""
+
+#: doc/classes/OmniLight.xml:7
+msgid ""
+"An Omnidirectional light is a type of [Light] that emits light in all "
+"directions. The light is attenuated by distance and this attenuation can be "
+"configured by changing its energy, radius, and attenuation parameters.\n"
+"[b]Note:[/b] By default, only 32 OmniLights may affect a single mesh "
+"[i]resource[/i] at once. Consider splitting your level into several meshes "
+"to decrease the likelihood that more than 32 lights will affect the same "
+"mesh resource. Splitting the level mesh will also improve frustum culling "
+"effectiveness, leading to greater performance. If you need to use more "
+"lights per mesh, you can increase [member ProjectSettings.rendering/limits/"
+"rendering/max_lights_per_object] at the cost of shader compilation times."
+msgstr ""
+
+#: doc/classes/OmniLight.xml:17
+msgid ""
+"The light's attenuation (drop-off) curve. A number of presets are available "
+"in the [b]Inspector[/b] by right-clicking the curve."
+msgstr ""
+
+#: doc/classes/OmniLight.xml:20
+msgid ""
+"The light's radius. Note that the effectively lit area may appear to be "
+"smaller depending on the [member omni_attenuation] in use. No matter the "
+"[member omni_attenuation] in use, the light will never reach anything "
+"outside this radius."
+msgstr ""
+
+#: doc/classes/OmniLight.xml:23
+msgid "See [enum ShadowDetail]."
+msgstr ""
+
+#: doc/classes/OmniLight.xml:26
+msgid "See [enum ShadowMode]."
+msgstr ""
+
+#: doc/classes/OmniLight.xml:31
+msgid ""
+"Shadows are rendered to a dual-paraboloid texture. Faster than [constant "
+"SHADOW_CUBE], but lower-quality."
+msgstr ""
+
+#: doc/classes/OmniLight.xml:34
+msgid ""
+"Shadows are rendered to a cubemap. Slower than [constant "
+"SHADOW_DUAL_PARABOLOID], but higher-quality."
+msgstr ""
+
+#: doc/classes/OmniLight.xml:37
+msgid "Use more detail vertically when computing the shadow."
+msgstr ""
+
+#: doc/classes/OmniLight.xml:40
+msgid "Use more detail horizontally when computing the shadow."
+msgstr ""
+
+#: modules/opensimplex/doc_classes/OpenSimplexNoise.xml:4
+msgid "Noise generator based on Open Simplex."
+msgstr ""
+
+#: modules/opensimplex/doc_classes/OpenSimplexNoise.xml:7
+msgid ""
+"This resource allows you to configure and sample a fractal noise space. Here "
+"is a brief usage example that configures an OpenSimplexNoise and gets "
+"samples at various positions and dimensions:\n"
+"[codeblock]\n"
+"var noise = OpenSimplexNoise.new()\n"
+"\n"
+"# Configure\n"
+"noise.seed = randi()\n"
+"noise.octaves = 4\n"
+"noise.period = 20.0\n"
+"noise.persistence = 0.8\n"
+"\n"
+"# Sample\n"
+"print(\"Values:\")\n"
+"print(noise.get_noise_2d(1.0, 1.0))\n"
+"print(noise.get_noise_3d(0.5, 3.0, 15.0))\n"
+"print(noise.get_noise_4d(0.5, 1.9, 4.7, 0.0))\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/opensimplex/doc_classes/OpenSimplexNoise.xml:33
+msgid ""
+"Generate a noise image in [constant Image.FORMAT_L8] format with the "
+"requested [code]width[/code] and [code]height[/code], based on the current "
+"noise parameters. If [code]noise_offset[/code] is specified, then the offset "
+"value is used as the coordinates of the top-left corner of the generated "
+"noise."
+msgstr ""
+
+#: modules/opensimplex/doc_classes/OpenSimplexNoise.xml:40
+msgid ""
+"Returns the 1D noise value [code][-1,1][/code] at the given x-coordinate.\n"
+"[b]Note:[/b] This method actually returns the 2D noise value [code][-1,1][/"
+"code] with fixed y-coordinate value 0.0."
+msgstr ""
+
+#: modules/opensimplex/doc_classes/OpenSimplexNoise.xml:49
+#: modules/opensimplex/doc_classes/OpenSimplexNoise.xml:56
+msgid "Returns the 2D noise value [code][-1,1][/code] at the given position."
+msgstr ""
+
+#: modules/opensimplex/doc_classes/OpenSimplexNoise.xml:65
+#: modules/opensimplex/doc_classes/OpenSimplexNoise.xml:72
+msgid "Returns the 3D noise value [code][-1,1][/code] at the given position."
+msgstr ""
+
+#: modules/opensimplex/doc_classes/OpenSimplexNoise.xml:82
+msgid "Returns the 4D noise value [code][-1,1][/code] at the given position."
+msgstr ""
+
+#: modules/opensimplex/doc_classes/OpenSimplexNoise.xml:89
+msgid ""
+"Generate a tileable noise image in [constant Image.FORMAT_L8] format, based "
+"on the current noise parameters. Generated seamless images are always square "
+"([code]size[/code] × [code]size[/code]).\n"
+"[b]Note:[/b] Seamless noise has a lower contrast compared to non-seamless "
+"noise. This is due to the way noise uses higher dimensions for generating "
+"seamless noise."
+msgstr ""
+
+#: modules/opensimplex/doc_classes/OpenSimplexNoise.xml:96
+msgid "Difference in period between [member octaves]."
+msgstr ""
+
+#: modules/opensimplex/doc_classes/OpenSimplexNoise.xml:99
+msgid ""
+"Number of OpenSimplex noise layers that are sampled to get the fractal "
+"noise. Higher values result in more detailed noise but take more time to "
+"generate.\n"
+"[b]Note:[/b] The maximum allowed value is 9."
+msgstr ""
+
+#: modules/opensimplex/doc_classes/OpenSimplexNoise.xml:103
+msgid ""
+"Period of the base octave. A lower period results in a higher-frequency "
+"noise (more value changes across the same distance)."
+msgstr ""
+
+#: modules/opensimplex/doc_classes/OpenSimplexNoise.xml:106
+msgid ""
+"Contribution factor of the different octaves. A [code]persistence[/code] "
+"value of 1 means all the octaves have the same contribution, a value of 0.5 "
+"means each octave contributes half as much as the previous one."
+msgstr ""
+
+#: modules/opensimplex/doc_classes/OpenSimplexNoise.xml:109
+msgid ""
+"Seed used to generate random values, different seeds will generate different "
+"noise maps."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:4
+msgid "Button control that provides selectable options when pressed."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:7
+msgid ""
+"OptionButton is a type button that provides a selectable list of items when "
+"pressed. The item selected becomes the \"current\" item and is displayed as "
+"the button text.\n"
+"See also [BaseButton] which contains common properties and methods "
+"associated with this node."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:19
+msgid ""
+"Adds an item, with a [code]texture[/code] icon, text [code]label[/code] and "
+"(optionally) [code]id[/code]. If no [code]id[/code] is passed, the item "
+"index will be used as the item's ID. New items are appended at the end."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:27
+msgid ""
+"Adds an item, with text [code]label[/code] and (optionally) [code]id[/code]. "
+"If no [code]id[/code] is passed, the item index will be used as the item's "
+"ID. New items are appended at the end."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:33
+msgid ""
+"Adds a separator to the list of items. Separators help to group items. "
+"Separator also takes up an index and is appended at the end."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:39
+msgid "Clears all the items in the [OptionButton]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:45
+msgid "Returns the amount of items in the OptionButton, including separators."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:52 doc/classes/PopupMenu.xml:203
+msgid "Returns the icon of the item at index [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:59
+msgid "Returns the ID of the item at index [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:66
+msgid "Returns the index of the item with the given [code]id[/code]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:73
+msgid ""
+"Retrieves the metadata of an item. Metadata may be any type and can be used "
+"to store extra information about an item, such as an external string ID."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:80 doc/classes/PopupMenu.xml:245
+msgid "Returns the text of the item at index [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:93
+msgid ""
+"Returns the ID of the selected item, or [code]0[/code] if no item is "
+"selected."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:99
+msgid ""
+"Gets the metadata of the selected item. Metadata for items can be set using "
+"[method set_item_metadata]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:106
+msgid ""
+"Returns [code]true[/code] if the item at index [code]idx[/code] is disabled."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:113
+msgid "Removes the item at index [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:120
+msgid ""
+"Selects an item by index and makes it the current item. This will work even "
+"if the item is disabled."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:128
+msgid ""
+"Sets whether the item at index [code]idx[/code] is disabled.\n"
+"Disabled items are drawn differently in the dropdown and are not selectable "
+"by the user. If the current selected item is set as disabled, it will remain "
+"selected."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:137
+msgid "Sets the icon of the item at index [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:145
+msgid "Sets the ID of the item at index [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:153
+msgid ""
+"Sets the metadata of an item. Metadata may be of any type and can be used to "
+"store extra information about an item, such as an external string ID."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:161 doc/classes/PopupMenu.xml:432
+msgid "Sets the text of the item at index [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:169
+msgid ""
+"The index of the currently selected item, or [code]-1[/code] if no item is "
+"selected."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:177
+msgid ""
+"Emitted when the user navigates to an item using the [code]ui_up[/code] or "
+"[code]ui_down[/code] actions. The index of the item selected is passed as "
+"argument."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:183
+msgid ""
+"Emitted when the current item has been changed by the user. The index of the "
+"item selected is passed as argument."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:191
+msgid "The arrow icon to be drawn on the right end of the button."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:194
+msgid ""
+"The horizontal space between the arrow icon and the right edge of the button."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:197
+msgid "[StyleBox] used when the [OptionButton] is disabled."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:200
+msgid ""
+"[StyleBox] used when the [OptionButton] is focused. It is displayed over the "
+"current [StyleBox], so using [StyleBoxEmpty] will just disable the focus "
+"visual effect."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:203
+msgid "[Font] of the [OptionButton]'s text."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:206
+msgid "Default text [Color] of the [OptionButton]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:209
+msgid "Text [Color] used when the [OptionButton] is disabled."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:212
+msgid ""
+"Text [Color] used when the [OptionButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:215
+msgid "Text [Color] used when the [OptionButton] is being hovered."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:218
+msgid "Text [Color] used when the [OptionButton] is being pressed."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:221
+msgid "[StyleBox] used when the [OptionButton] is being hovered."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:224
+msgid "The horizontal space between [OptionButton]'s icon and text."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:227
+msgid "Default [StyleBox] for the [OptionButton]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:230
+msgid "[StyleBox] used when the [OptionButton] is being pressed."
+msgstr ""
+
+#: doc/classes/OS.xml:4
+msgid "Operating System functions."
+msgstr ""
+
+#: doc/classes/OS.xml:7
+msgid ""
+"Operating System functions. OS wraps the most common functionality to "
+"communicate with the host operating system, such as the clipboard, video "
+"driver, date and time, timers, environment variables, execution of binaries, "
+"command line, etc."
+msgstr ""
+
+#: doc/classes/OS.xml:18
+msgid ""
+"Displays a modal dialog box using the host OS' facilities. Execution is "
+"blocked until the dialog is closed."
+msgstr ""
+
+#: doc/classes/OS.xml:24
+msgid "Returns [code]true[/code] if the host OS allows drawing."
+msgstr ""
+
+#: doc/classes/OS.xml:30
+msgid ""
+"Returns [code]true[/code] if the current host platform is using multiple "
+"threads."
+msgstr ""
+
+#: doc/classes/OS.xml:36
+msgid "Centers the window on the screen if in windowed mode."
+msgstr ""
+
+#: doc/classes/OS.xml:42
+msgid ""
+"Shuts down system MIDI driver.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:50
+msgid ""
+"Delays execution of the current thread by [code]msec[/code] milliseconds. "
+"[code]msec[/code] must be greater than or equal to [code]0[/code]. "
+"Otherwise, [method delay_msec] will do nothing and will print an error "
+"message.\n"
+"[b]Note:[/b] [method delay_msec] is a [i]blocking[/i] way to delay code "
+"execution. To delay code execution in a non-blocking way, see [method "
+"SceneTree.create_timer]. Yielding with [method SceneTree.create_timer] will "
+"delay the execution of code placed below the [code]yield[/code] without "
+"affecting the rest of the project (or editor, for [EditorPlugin]s and "
+"[EditorScript]s).\n"
+"[b]Note:[/b] When [method delay_msec] is called on the main thread, it will "
+"freeze the project and will prevent it from redrawing and registering input "
+"until the delay has passed. When using [method delay_msec] as part of an "
+"[EditorPlugin] or [EditorScript], it will freeze the editor but won't freeze "
+"the project if it is currently running (since the project is an independent "
+"child process)."
+msgstr ""
+
+#: doc/classes/OS.xml:59
+msgid ""
+"Delays execution of the current thread by [code]usec[/code] microseconds. "
+"[code]usec[/code] must be greater than or equal to [code]0[/code]. "
+"Otherwise, [method delay_usec] will do nothing and will print an error "
+"message.\n"
+"[b]Note:[/b] [method delay_usec] is a [i]blocking[/i] way to delay code "
+"execution. To delay code execution in a non-blocking way, see [method "
+"SceneTree.create_timer]. Yielding with [method SceneTree.create_timer] will "
+"delay the execution of code placed below the [code]yield[/code] without "
+"affecting the rest of the project (or editor, for [EditorPlugin]s and "
+"[EditorScript]s).\n"
+"[b]Note:[/b] When [method delay_usec] is called on the main thread, it will "
+"freeze the project and will prevent it from redrawing and registering input "
+"until the delay has passed. When using [method delay_usec] as part of an "
+"[EditorPlugin] or [EditorScript], it will freeze the editor but won't freeze "
+"the project if it is currently running (since the project is an independent "
+"child process)."
+msgstr ""
+
+#: doc/classes/OS.xml:68
+msgid ""
+"Dumps the memory allocation ringlist to a file (only works in debug).\n"
+"Entry format per line: \"Address - Size - Description\"."
+msgstr ""
+
+#: doc/classes/OS.xml:76
+msgid ""
+"Dumps all used resources to file (only works in debug).\n"
+"Entry format per line: \"Resource Type : Resource Location\".\n"
+"At the end of the file is a statistic of all used Resource Types."
+msgstr ""
+
+#: doc/classes/OS.xml:89
+msgid ""
+"Execute the file at the given path with the arguments passed as an array of "
+"strings. Platform path resolution will take place. The resolved file must "
+"exist and be executable.\n"
+"The arguments are used in the given order and separated by a space, so "
+"[code]OS.execute(\"ping\", [\"-w\", \"3\", \"godotengine.org\"], false)[/"
+"code] will resolve to [code]ping -w 3 godotengine.org[/code] in the system's "
+"shell.\n"
+"This method has slightly different behavior based on whether the "
+"[code]blocking[/code] mode is enabled.\n"
+"If [code]blocking[/code] is [code]true[/code], the Godot thread will pause "
+"its execution while waiting for the process to terminate. The shell output "
+"of the process will be written to the [code]output[/code] array as a single "
+"string. When the process terminates, the Godot thread will resume "
+"execution.\n"
+"If [code]blocking[/code] is [code]false[/code], the Godot thread will "
+"continue while the new process runs. It is not possible to retrieve the "
+"shell output in non-blocking mode, so [code]output[/code] will be empty.\n"
+"The return value also depends on the blocking mode. When blocking, the "
+"method will return an exit code of the process. When non-blocking, the "
+"method returns a process ID, which you can use to monitor the process (and "
+"potentially terminate it with [method kill]). If the process forking (non-"
+"blocking) or opening (blocking) fails, the method will return [code]-1[/"
+"code] or another exit code.\n"
+"Example of blocking mode and retrieving the shell output:\n"
+"[codeblock]\n"
+"var output = []\n"
+"var exit_code = OS.execute(\"ls\", [\"-l\", \"/tmp\"], true, output)\n"
+"[/codeblock]\n"
+"Example of non-blocking mode, running another instance of the project and "
+"storing its process ID:\n"
+"[codeblock]\n"
+"var pid = OS.execute(OS.get_executable_path(), [], false)\n"
+"[/codeblock]\n"
+"If you wish to access a shell built-in or perform a composite command, a "
+"platform-specific shell can be invoked. For example:\n"
+"[codeblock]\n"
+"OS.execute(\"CMD.exe\", [\"/C\", \"cd %TEMP% && dir\"], true, output)\n"
+"[/codeblock]\n"
+"[b]Note:[/b] This method is implemented on Android, iOS, Linux, macOS and "
+"Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:115
+msgid "Returns the scancode of the given string (e.g. \"Escape\")."
+msgstr ""
+
+#: doc/classes/OS.xml:121
+msgid "Returns the total number of available audio drivers."
+msgstr ""
+
+#: doc/classes/OS.xml:128
+msgid "Returns the audio driver name for the given index."
+msgstr ""
+
+#: doc/classes/OS.xml:134
+msgid ""
+"Returns the [i]global[/i] cache data directory according to the operating "
+"system's standards. On desktop platforms, this path can be overridden by "
+"setting the [code]XDG_CACHE_HOME[/code] environment variable before starting "
+"the project. See [url=https://docs.godotengine.org/en/latest/tutorials/io/"
+"data_paths.html]File paths in Godot projects[/url] in the documentation for "
+"more information. See also [method get_config_dir] and [method "
+"get_data_dir].\n"
+"Not to be confused with [method get_user_data_dir], which returns the "
+"[i]project-specific[/i] user data path."
+msgstr ""
+
+#: doc/classes/OS.xml:141
+msgid ""
+"Returns the command-line arguments passed to the engine.\n"
+"Command-line arguments can be written in any form, including both [code]--"
+"key value[/code] and [code]--key=value[/code] forms so they can be properly "
+"parsed, as long as custom command-line arguments do not conflict with engine "
+"arguments.\n"
+"You can also incorporate environment variables using the [method "
+"get_environment] method.\n"
+"You can set [member ProjectSettings.editor/main_run_args] to define command-"
+"line arguments to be passed by the editor when running the project.\n"
+"Here's a minimal example on how to parse command-line arguments into a "
+"dictionary using the [code]--key=value[/code] form for arguments:\n"
+"[codeblock]\n"
+"var arguments = {}\n"
+"for argument in OS.get_cmdline_args():\n"
+" if argument.find(\"=\") > -1:\n"
+" var key_value = argument.split(\"=\")\n"
+" arguments[key_value[0].lstrip(\"--\")] = key_value[1]\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/OS.xml:158
+msgid ""
+"Returns the [i]global[/i] user configuration directory according to the "
+"operating system's standards. On desktop platforms, this path can be "
+"overridden by setting the [code]XDG_CONFIG_HOME[/code] environment variable "
+"before starting the project. See [url=https://docs.godotengine.org/en/latest/"
+"tutorials/io/data_paths.html]File paths in Godot projects[/url] in the "
+"documentation for more information. See also [method get_cache_dir] and "
+"[method get_data_dir].\n"
+"Not to be confused with [method get_user_data_dir], which returns the "
+"[i]project-specific[/i] user data path."
+msgstr ""
+
+#: doc/classes/OS.xml:165
+msgid ""
+"Returns an array of MIDI device names.\n"
+"The returned array will be empty if the system MIDI driver has not "
+"previously been initialised with [method open_midi_inputs].\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:173
+msgid ""
+"Returns the currently used video driver, using one of the values from [enum "
+"VideoDriver]."
+msgstr ""
+
+#: doc/classes/OS.xml:179
+msgid ""
+"Returns the [i]global[/i] user data directory according to the operating "
+"system's standards. On desktop platforms, this path can be overridden by "
+"setting the [code]XDG_DATA_HOME[/code] environment variable before starting "
+"the project. See [url=https://docs.godotengine.org/en/latest/tutorials/io/"
+"data_paths.html]File paths in Godot projects[/url] in the documentation for "
+"more information. See also [method get_cache_dir] and [method "
+"get_config_dir].\n"
+"Not to be confused with [method get_user_data_dir], which returns the "
+"[i]project-specific[/i] user data path."
+msgstr ""
+
+#: doc/classes/OS.xml:187
+msgid ""
+"Returns current date as a dictionary of keys: [code]year[/code], "
+"[code]month[/code], [code]day[/code], [code]weekday[/code], [code]dst[/code] "
+"(Daylight Savings Time)."
+msgstr ""
+
+#: doc/classes/OS.xml:194
+msgid ""
+"Returns current datetime as a dictionary of keys: [code]year[/code], "
+"[code]month[/code], [code]day[/code], [code]weekday[/code], [code]dst[/code] "
+"(Daylight Savings Time), [code]hour[/code], [code]minute[/code], "
+"[code]second[/code]."
+msgstr ""
+
+#: doc/classes/OS.xml:201
+msgid ""
+"Gets a dictionary of time values corresponding to the given UNIX epoch time "
+"(in seconds).\n"
+"The returned Dictionary's values will be the same as [method get_datetime], "
+"with the exception of Daylight Savings Time as it cannot be determined from "
+"the epoch."
+msgstr ""
+
+#: doc/classes/OS.xml:208
+msgid "Returns the total amount of dynamic memory used (only works in debug)."
+msgstr ""
+
+#: doc/classes/OS.xml:215
+msgid ""
+"Returns the value of an environment variable. Returns an empty string if the "
+"environment variable doesn't exist.\n"
+"[b]Note:[/b] Double-check the casing of [code]variable[/code]. Environment "
+"variable names are case-sensitive on all platforms except Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:222
+msgid "Returns the path to the current engine executable."
+msgstr ""
+
+#: doc/classes/OS.xml:228
+msgid ""
+"With this function, you can get the list of dangerous permissions that have "
+"been granted to the Android application.\n"
+"[b]Note:[/b] This method is implemented on Android."
+msgstr ""
+
+#: doc/classes/OS.xml:235
+msgid ""
+"Returns the IME cursor position (the currently-edited portion of the string) "
+"relative to the characters in the composition string.\n"
+"[constant MainLoop.NOTIFICATION_OS_IME_UPDATE] is sent to the application to "
+"notify it of changes to the IME cursor position.\n"
+"[b]Note:[/b] This method is implemented on macOS."
+msgstr ""
+
+#: doc/classes/OS.xml:243
+msgid ""
+"Returns the IME intermediate composition string.\n"
+"[constant MainLoop.NOTIFICATION_OS_IME_UPDATE] is sent to the application to "
+"notify it of changes to the IME composition string.\n"
+"[b]Note:[/b] This method is implemented on macOS."
+msgstr ""
+
+#: doc/classes/OS.xml:251
+msgid ""
+"Returns the current latin keyboard variant as a String.\n"
+"Possible return values are: [code]\"QWERTY\"[/code], [code]\"AZERTY\"[/"
+"code], [code]\"QZERTY\"[/code], [code]\"DVORAK\"[/code], [code]\"NEO\"[/"
+"code], [code]\"COLEMAK\"[/code] or [code]\"ERROR\"[/code].\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows. Returns "
+"[code]\"QWERTY\"[/code] on unsupported platforms."
+msgstr ""
+
+#: doc/classes/OS.xml:259
+msgid ""
+"Returns the host OS locale as a string of the form "
+"[code]language_Script_COUNTRY_VARIANT@extra[/code]. If you want only the "
+"language code and not the fully specified locale from the OS, you can use "
+"[method get_locale_language].\n"
+"[code]language[/code] - 2 or 3-letter [url=https://en.wikipedia.org/wiki/"
+"List_of_ISO_639-1_codes]language code[/url], in lower case.\n"
+"[code]Script[/code] - optional, 4-letter [url=https://en.wikipedia.org/wiki/"
+"ISO_15924]script code[/url], in title case.\n"
+"[code]COUNTRY[/code] - optional, 2 or 3-letter [url=https://en.wikipedia.org/"
+"wiki/ISO_3166-1]country code[/url], in upper case.\n"
+"[code]VARIANT[/code] - optional, language variant, region and sort order. "
+"Variant can have any number of underscored keywords.\n"
+"[code]extra[/code] - optional, semicolon separated list of additional key "
+"words. Currency, calendar, sort order and numbering system information."
+msgstr ""
+
+#: doc/classes/OS.xml:270
+msgid ""
+"Returns the host OS locale's 2 or 3-letter [url=https://en.wikipedia.org/"
+"wiki/List_of_ISO_639-1_codes]language code[/url] as a string which should be "
+"consistent on all platforms. This is equivalent to extracting the "
+"[code]language[/code] part of the [method get_locale] string.\n"
+"This can be used to narrow down fully specified locale strings to only the "
+"\"common\" language code, when you don't need the additional information "
+"about country code or variants. For example, for a French Canadian user with "
+"[code]fr_CA[/code] locale, this would return [code]fr[/code]."
+msgstr ""
+
+#: doc/classes/OS.xml:277
+msgid ""
+"Returns the model name of the current device.\n"
+"[b]Note:[/b] This method is implemented on Android and iOS. Returns "
+"[code]\"GenericDevice\"[/code] on unsupported platforms."
+msgstr ""
+
+#: doc/classes/OS.xml:284
+msgid ""
+"Returns the name of the host OS. Possible values are: [code]\"Android\"[/"
+"code], [code]\"iOS\"[/code], [code]\"HTML5\"[/code], [code]\"OSX\"[/code], "
+"[code]\"Server\"[/code], [code]\"Windows\"[/code], [code]\"UWP\"[/code], "
+"[code]\"X11\"[/code]."
+msgstr ""
+
+#: doc/classes/OS.xml:291
+msgid ""
+"Returns internal structure pointers for use in GDNative plugins.\n"
+"[b]Note:[/b] This method is implemented on Linux and Windows (other OSs will "
+"soon be supported)."
+msgstr ""
+
+#: doc/classes/OS.xml:298
+msgid ""
+"Returns the amount of battery left in the device as a percentage. Returns "
+"[code]-1[/code] if power state is unknown.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:305
+msgid ""
+"Returns an estimate of the time left in seconds before the device runs out "
+"of battery. Returns [code]-1[/code] if power state is unknown.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:312
+msgid ""
+"Returns the current state of the device regarding battery and power. See "
+"[enum PowerState] constants.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:319
+msgid ""
+"Returns the project's process ID.\n"
+"[b]Note:[/b] This method is implemented on Android, iOS, Linux, macOS and "
+"Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:326
+msgid "Returns the number of threads available on the host machine."
+msgstr ""
+
+#: doc/classes/OS.xml:332
+msgid "Returns the window size including decorations like window borders."
+msgstr ""
+
+#: doc/classes/OS.xml:339
+msgid ""
+"Returns the given scancode as a string (e.g. Return values: [code]\"Escape"
+"\"[/code], [code]\"Shift+Escape\"[/code]).\n"
+"See also [member InputEventKey.scancode] and [method InputEventKey."
+"get_scancode_with_modifiers]."
+msgstr ""
+
+#: doc/classes/OS.xml:346
+msgid "Returns the number of displays attached to the host machine."
+msgstr ""
+
+#: doc/classes/OS.xml:353
+msgid ""
+"Returns the dots per inch density of the specified screen. If [code]screen[/"
+"code] is [code]-1[/code] (the default value), the current screen will be "
+"used.\n"
+"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
+"scaling mode is used.\n"
+"[b]Note:[/b] On Android devices, the actual screen densities are grouped "
+"into six generalized densities:\n"
+"[codeblock]\n"
+" ldpi - 120 dpi\n"
+" mdpi - 160 dpi\n"
+" hdpi - 240 dpi\n"
+" xhdpi - 320 dpi\n"
+" xxhdpi - 480 dpi\n"
+"xxxhdpi - 640 dpi\n"
+"[/codeblock]\n"
+"[b]Note:[/b] This method is implemented on Android, Linux, macOS and "
+"Windows. Returns [code]72[/code] on unsupported platforms."
+msgstr ""
+
+#: doc/classes/OS.xml:370
+msgid ""
+"Return the greatest scale factor of all screens.\n"
+"[b]Note:[/b] On macOS returned value is [code]2.0[/code] if there is at "
+"least one hiDPI (Retina) screen in the system, and [code]1.0[/code] in all "
+"other cases.\n"
+"[b]Note:[/b] This method is implemented on macOS."
+msgstr ""
+
+#: doc/classes/OS.xml:379
+msgid ""
+"Returns the position of the specified screen by index. If [code]screen[/"
+"code] is [code]-1[/code] (the default value), the current screen will be "
+"used."
+msgstr ""
+
+#: doc/classes/OS.xml:386
+msgid ""
+"Return the scale factor of the specified screen by index. If [code]screen[/"
+"code] is [code]-1[/code] (the default value), the current screen will be "
+"used.\n"
+"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
+"screen, and [code]1.0[/code] for all other cases.\n"
+"[b]Note:[/b] This method is implemented on macOS."
+msgstr ""
+
+#: doc/classes/OS.xml:395
+msgid ""
+"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
+"code] is [code]-1[/code] (the default value), the current screen will be "
+"used."
+msgstr ""
+
+#: doc/classes/OS.xml:401
+msgid ""
+"Returns the amount of time in milliseconds it took for the boot logo to "
+"appear."
+msgstr ""
+
+#: doc/classes/OS.xml:407
+msgid "Returns the maximum amount of static memory used (only works in debug)."
+msgstr ""
+
+#: doc/classes/OS.xml:413
+msgid "Returns the amount of static memory being used by the program in bytes."
+msgstr ""
+
+#: doc/classes/OS.xml:421
+msgid ""
+"Returns the actual path to commonly used folders across different platforms. "
+"Available locations are specified in [enum SystemDir].\n"
+"[b]Note:[/b] This method is implemented on Android, Linux, macOS and "
+"Windows.\n"
+"[b]Note:[/b] Shared storage is implemented on Android and allows to "
+"differentiate between app specific and shared directories. Shared "
+"directories have additional restrictions on Android."
+msgstr ""
+
+#: doc/classes/OS.xml:429
+msgid "Returns the epoch time of the operating system in milliseconds."
+msgstr ""
+
+#: doc/classes/OS.xml:435
+msgid "Returns the epoch time of the operating system in seconds."
+msgstr ""
+
+#: doc/classes/OS.xml:441
+msgid ""
+"Returns the total number of available tablet drivers.\n"
+"[b]Note:[/b] This method is implemented on Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:449
+msgid ""
+"Returns the tablet driver name for the given index.\n"
+"[b]Note:[/b] This method is implemented on Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:456
+msgid ""
+"Returns the ID of the current thread. This can be used in logs to ease "
+"debugging of multi-threaded applications.\n"
+"[b]Note:[/b] Thread IDs are not deterministic and may be reused across "
+"application restarts."
+msgstr ""
+
+#: doc/classes/OS.xml:463
+msgid ""
+"Returns the amount of time passed in milliseconds since the engine started."
+msgstr ""
+
+#: doc/classes/OS.xml:469
+msgid ""
+"Returns the amount of time passed in microseconds since the engine started."
+msgstr ""
+
+#: doc/classes/OS.xml:476
+msgid "Returns current time as a dictionary of keys: hour, minute, second."
+msgstr ""
+
+#: doc/classes/OS.xml:482
+msgid ""
+"Returns the current time zone as a dictionary with the keys: bias and name."
+msgstr ""
+
+#: doc/classes/OS.xml:488
+msgid ""
+"Returns a string that is unique to the device.\n"
+"[b]Note:[/b] This string may change without notice if the user reinstalls/"
+"upgrades their operating system or changes their hardware. This means it "
+"should generally not be used to encrypt persistent data as the data saved "
+"before an unexpected ID change would become inaccessible. The returned "
+"string may also be falsified using external programs, so do not rely on the "
+"string returned by [method get_unique_id] for security purposes.\n"
+"[b]Note:[/b] Returns an empty string on HTML5 and UWP, as this method isn't "
+"implemented on those platforms yet."
+msgstr ""
+
+#: doc/classes/OS.xml:496
+msgid ""
+"Returns the current UNIX epoch timestamp in seconds.\n"
+"[b]Important:[/b] This is the system clock that the user can manually set. "
+"[b]Never use[/b] this method for precise time calculation since its results "
+"are also subject to automatic adjustments by the operating system. [b]Always "
+"use[/b] [method get_ticks_usec] or [method get_ticks_msec] for precise time "
+"calculation instead, since they are guaranteed to be monotonic (i.e. never "
+"decrease)."
+msgstr ""
+
+#: doc/classes/OS.xml:504
+msgid ""
+"Gets an epoch time value from a dictionary of time values.\n"
+"[code]datetime[/code] must be populated with the following keys: [code]year[/"
+"code], [code]month[/code], [code]day[/code], [code]hour[/code], "
+"[code]minute[/code], [code]second[/code].\n"
+"If the dictionary is empty [code]0[/code] is returned. If some keys are "
+"omitted, they default to the equivalent values for the UNIX epoch timestamp "
+"0 (1970-01-01 at 00:00:00 UTC).\n"
+"You can pass the output from [method get_datetime_from_unix_time] directly "
+"into this function. Daylight Savings Time ([code]dst[/code]), if present, is "
+"ignored."
+msgstr ""
+
+#: doc/classes/OS.xml:513
+msgid ""
+"Returns the absolute directory path where user data is written ([code]user://"
+"[/code]).\n"
+"On Linux, this is [code]~/.local/share/godot/app_userdata/[project_name][/"
+"code], or [code]~/.local/share/[custom_name][/code] if "
+"[code]use_custom_user_dir[/code] is set.\n"
+"On macOS, this is [code]~/Library/Application Support/Godot/app_userdata/"
+"[project_name][/code], or [code]~/Library/Application Support/[custom_name][/"
+"code] if [code]use_custom_user_dir[/code] is set.\n"
+"On Windows, this is [code]%APPDATA%\\Godot\\app_userdata\\[project_name][/"
+"code], or [code]%APPDATA%\\[custom_name][/code] if "
+"[code]use_custom_user_dir[/code] is set. [code]%APPDATA%[/code] expands to "
+"[code]%USERPROFILE%\\AppData\\Roaming[/code].\n"
+"If the project name is empty, [code]user://[/code] falls back to [code]res://"
+"[/code].\n"
+"Not to be confused with [method get_data_dir], which returns the [i]global[/"
+"i] (non-project-specific) user data directory."
+msgstr ""
+
+#: doc/classes/OS.xml:524
+msgid "Returns the number of video drivers supported on the current platform."
+msgstr ""
+
+#: doc/classes/OS.xml:531
+msgid ""
+"Returns the name of the video driver matching the given [code]driver[/code] "
+"index. This index is a value from [enum VideoDriver], and you can use "
+"[method get_current_video_driver] to get the current backend's index."
+msgstr ""
+
+#: doc/classes/OS.xml:537
+msgid ""
+"Returns the on-screen keyboard's height in pixels. Returns 0 if there is no "
+"keyboard or if it is currently hidden."
+msgstr ""
+
+#: doc/classes/OS.xml:543
+msgid ""
+"Returns unobscured area of the window where interactive controls should be "
+"rendered."
+msgstr ""
+
+#: doc/classes/OS.xml:553
+msgid ""
+"Add a new item with text \"label\" to global menu. Use \"_dock\" menu to add "
+"item to the macOS dock icon menu.\n"
+"[b]Note:[/b] This method is implemented on macOS."
+msgstr ""
+
+#: doc/classes/OS.xml:561
+msgid ""
+"Add a separator between items. Separators also occupy an index.\n"
+"[b]Note:[/b] This method is implemented on macOS."
+msgstr ""
+
+#: doc/classes/OS.xml:569
+msgid ""
+"Clear the global menu, in effect removing all items.\n"
+"[b]Note:[/b] This method is implemented on macOS."
+msgstr ""
+
+#: doc/classes/OS.xml:578
+msgid ""
+"Removes the item at index \"idx\" from the global menu. Note that the "
+"indexes of items after the removed item are going to be shifted by one.\n"
+"[b]Note:[/b] This method is implemented on macOS."
+msgstr ""
+
+#: doc/classes/OS.xml:586
+msgid ""
+"Returns [code]true[/code] if the environment variable with the name "
+"[code]variable[/code] exists.\n"
+"[b]Note:[/b] Double-check the casing of [code]variable[/code]. Environment "
+"variable names are case-sensitive on all platforms except Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:594
+msgid ""
+"Returns [code]true[/code] if the feature for the given feature tag is "
+"supported in the currently running instance, depending on the platform, "
+"build etc. Can be used to check whether you're currently running a debug "
+"build, on a certain platform or arch, etc. Refer to the [url=https://docs."
+"godotengine.org/en/3.4/getting_started/workflow/export/feature_tags."
+"html]Feature Tags[/url] documentation for more details.\n"
+"[b]Note:[/b] Tag names are case-sensitive."
+msgstr ""
+
+#: doc/classes/OS.xml:601
+msgid ""
+"Returns [code]true[/code] if the device has a touchscreen or emulates one."
+msgstr ""
+
+#: doc/classes/OS.xml:607
+msgid ""
+"Returns [code]true[/code] if the platform has a virtual keyboard, "
+"[code]false[/code] otherwise."
+msgstr ""
+
+#: doc/classes/OS.xml:613
+msgid "Hides the virtual keyboard if it is shown, does nothing otherwise."
+msgstr ""
+
+#: doc/classes/OS.xml:619
+msgid ""
+"Returns [code]true[/code] if the Godot binary used to run the project is a "
+"[i]debug[/i] export template, or when running in the editor.\n"
+"Returns [code]false[/code] if the Godot binary used to run the project is a "
+"[i]release[/i] export template.\n"
+"To check whether the Godot binary used to run the project is an export "
+"template (debug or release), use [code]OS.has_feature(\"standalone\")[/code] "
+"instead."
+msgstr ""
+
+#: doc/classes/OS.xml:627
+msgid ""
+"Returns [code]true[/code] if the [b]OK[/b] button should appear on the left "
+"and [b]Cancel[/b] on the right."
+msgstr ""
+
+#: doc/classes/OS.xml:634
+msgid ""
+"Returns [code]true[/code] if the input scancode corresponds to a Unicode "
+"character."
+msgstr ""
+
+#: doc/classes/OS.xml:640
+msgid ""
+"Returns [code]true[/code] if the engine was executed with [code]-v[/code] "
+"(verbose stdout)."
+msgstr ""
+
+#: doc/classes/OS.xml:646
+msgid ""
+"If [code]true[/code], the [code]user://[/code] file system is persistent, so "
+"that its state is the same after a player quits and starts the game again. "
+"Relevant to the HTML5 platform, where this persistence may be unavailable."
+msgstr ""
+
+#: doc/classes/OS.xml:652
+msgid ""
+"Returns [code]true[/code] if the window should always be on top of other "
+"windows."
+msgstr ""
+
+#: doc/classes/OS.xml:658
+msgid ""
+"Returns [code]true[/code] if the window is currently focused.\n"
+"[b]Note:[/b] Only implemented on desktop platforms. On other platforms, it "
+"will always return [code]true[/code]."
+msgstr ""
+
+#: doc/classes/OS.xml:665
+msgid ""
+"Returns active keyboard layout index.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:672
+msgid ""
+"Returns the number of keyboard layouts.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:680
+msgid ""
+"Returns the ISO-639/BCP-47 language code of the keyboard layout at position "
+"[code]index[/code].\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:688
+msgid ""
+"Returns the localized name of the keyboard layout at position [code]index[/"
+"code].\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:696
+msgid ""
+"Sets active keyboard layout.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:704
+msgid ""
+"Kill (terminate) the process identified by the given process ID ([code]pid[/"
+"code]), e.g. the one returned by [method execute] in non-blocking mode.\n"
+"[b]Note:[/b] This method can also be used to kill processes that were not "
+"spawned by the game.\n"
+"[b]Note:[/b] This method is implemented on Android, iOS, Linux, macOS and "
+"Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:712
+msgid ""
+"Moves the window to the front.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:719
+msgid ""
+"Returns [code]true[/code] if native video is playing.\n"
+"[b]Note:[/b] This method is only implemented on iOS."
+msgstr ""
+
+#: doc/classes/OS.xml:726
+msgid ""
+"Pauses native video playback.\n"
+"[b]Note:[/b] This method is only implemented on iOS."
+msgstr ""
+
+#: doc/classes/OS.xml:737
+msgid ""
+"Plays native video from the specified path, at the given volume and with "
+"audio and subtitle tracks.\n"
+"[b]Note:[/b] This method is only implemented on iOS."
+msgstr ""
+
+#: doc/classes/OS.xml:744
+msgid ""
+"Stops native video playback.\n"
+"[b]Note:[/b] This method is implemented on iOS."
+msgstr ""
+
+#: doc/classes/OS.xml:751
+msgid ""
+"Resumes native video playback.\n"
+"[b]Note:[/b] This method is implemented on iOS."
+msgstr ""
+
+#: doc/classes/OS.xml:758
+msgid ""
+"Initialises the singleton for the system MIDI driver.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:766
+msgid ""
+"Shows all resources in the game. Optionally, the list can be written to a "
+"file by specifying a file path in [code]tofile[/code]."
+msgstr ""
+
+#: doc/classes/OS.xml:772
+msgid "Shows the list of loaded textures sorted by size in memory."
+msgstr ""
+
+#: doc/classes/OS.xml:779
+msgid "Shows the number of resources loaded by the game of the given types."
+msgstr ""
+
+#: doc/classes/OS.xml:786
+msgid "Shows all resources currently used by the game."
+msgstr ""
+
+#: doc/classes/OS.xml:792
+msgid ""
+"Request the user attention to the window. It'll flash the taskbar button on "
+"Windows or bounce the dock icon on OSX.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:800
+msgid ""
+"At the moment this function is only used by [code]AudioDriverOpenSL[/code] "
+"to request permission for [code]RECORD_AUDIO[/code] on Android."
+msgstr ""
+
+#: doc/classes/OS.xml:806
+msgid ""
+"With this function, you can request dangerous permissions since normal "
+"permissions are automatically granted at install time in Android "
+"applications.\n"
+"[b]Note:[/b] This method is implemented on Android."
+msgstr ""
+
+#: doc/classes/OS.xml:815
+msgid ""
+"Sets the value of the environment variable [code]variable[/code] to "
+"[code]value[/code]. The environment variable will be set for the Godot "
+"process and any process executed with [method execute] after running [method "
+"set_environment]. The environment variable will [i]not[/i] persist to "
+"processes run after the Godot process was terminated.\n"
+"[b]Note:[/b] Double-check the casing of [code]variable[/code]. Environment "
+"variable names are case-sensitive on all platforms except Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:823
+msgid ""
+"Sets the game's icon using an [Image] resource.\n"
+"The same image is used for window caption, taskbar/dock and window selection "
+"dialog. Image is scaled as needed.\n"
+"[b]Note:[/b] This method is implemented on HTML5, Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:832
+msgid ""
+"Sets whether IME input mode should be enabled.\n"
+"If active IME handles key events before the application and creates an "
+"composition string and suggestion list.\n"
+"Application can retrieve the composition status by using [method "
+"get_ime_selection] and [method get_ime_text] functions.\n"
+"Completed composition string is committed when input is finished.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:843
+msgid ""
+"Sets position of IME suggestion list popup (in window coordinates).\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:851
+msgid ""
+"Sets the game's icon using a multi-size platform-specific icon file ([code]*."
+"ico[/code] on Windows and [code]*.icns[/code] on macOS).\n"
+"Appropriate size sub-icons are used for window caption, taskbar/dock and "
+"window selection dialog.\n"
+"[b]Note:[/b] This method is implemented on macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:860
+msgid "Sets the name of the current thread."
+msgstr ""
+
+#: doc/classes/OS.xml:867
+msgid "Enables backup saves if [code]enabled[/code] is [code]true[/code]."
+msgstr ""
+
+#: doc/classes/OS.xml:874
+msgid ""
+"Sets whether the window should always be on top.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:882
+msgid ""
+"Sets a polygonal region of the window which accepts mouse events. Mouse "
+"events outside the region will be passed through.\n"
+"Passing an empty array will disable passthrough support (all mouse events "
+"will be intercepted by the window, which is the default behavior).\n"
+"[codeblock]\n"
+"# Set region, using Path2D node.\n"
+"OS.set_window_mouse_passthrough($Path2D.curve.get_baked_points())\n"
+"\n"
+"# Set region, using Polygon2D node.\n"
+"OS.set_window_mouse_passthrough($Polygon2D.polygon)\n"
+"\n"
+"# Reset region to default.\n"
+"OS.set_window_mouse_passthrough([])\n"
+"[/codeblock]\n"
+"[b]Note:[/b] On Windows, the portion of a window that lies outside the "
+"region is not drawn, while on Linux and macOS it is.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:902
+msgid ""
+"Sets the window title to the specified string.\n"
+"[b]Note:[/b] This should be used sporadically. Don't set this every frame, "
+"as that will negatively affect performance on some window managers.\n"
+"[b]Note:[/b] This method is implemented on HTML5, Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:911
+msgid ""
+"Requests the OS to open a resource with the most appropriate program. For "
+"example:\n"
+"- [code]OS.shell_open(\"C:\\\\Users\\name\\Downloads\")[/code] on Windows "
+"opens the file explorer at the user's Downloads folder.\n"
+"- [code]OS.shell_open(\"https://godotengine.org\")[/code] opens the default "
+"web browser on the official Godot website.\n"
+"- [code]OS.shell_open(\"mailto:example@example.com\")[/code] opens the "
+"default email client with the \"To\" field set to [code]example@example.com[/"
+"code]. See [url=https://blog.escapecreative.com/customizing-mailto-"
+"links/]Customizing [code]mailto:[/code] Links[/url] for a list of fields "
+"that can be added.\n"
+"Use [method ProjectSettings.globalize_path] to convert a [code]res://[/code] "
+"or [code]user://[/code] path into a system path for use with this method.\n"
+"[b]Note:[/b] This method is implemented on Android, iOS, HTML5, Linux, macOS "
+"and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:924
+msgid ""
+"Shows the virtual keyboard if the platform has one.\n"
+"The [code]existing_text[/code] parameter is useful for implementing your own "
+"[LineEdit] or [TextEdit], as it tells the virtual keyboard what text has "
+"already been typed (the virtual keyboard uses it for auto-correct and "
+"predictions).\n"
+"The [code]multiline[/code] parameter needs to be set to [code]true[/code] to "
+"be able to enter multiple lines of text, as in [TextEdit].\n"
+"[b]Note:[/b] This method is implemented on Android, iOS and UWP."
+msgstr ""
+
+#: doc/classes/OS.xml:933
+msgid "The clipboard from the host OS. Might be unavailable on some platforms."
+msgstr ""
+
+#: doc/classes/OS.xml:936
+msgid "The current screen index (starting from 0)."
+msgstr ""
+
+#: doc/classes/OS.xml:939
+msgid ""
+"If [code]true[/code], the engine filters the time delta measured between "
+"each frame, and attempts to compensate for random variation. This will only "
+"operate on systems where V-Sync is active."
+msgstr ""
+
+#: doc/classes/OS.xml:942
+msgid ""
+"The exit code passed to the OS when the main loop exits. By convention, an "
+"exit code of [code]0[/code] indicates success whereas a non-zero exit code "
+"indicates an error. For portability reasons, the exit code should be set "
+"between 0 and 125 (inclusive).\n"
+"[b]Note:[/b] This value will be ignored if using [method SceneTree.quit] "
+"with an [code]exit_code[/code] argument passed."
+msgstr ""
+
+#: doc/classes/OS.xml:946
+msgid ""
+"If [code]true[/code], the engine tries to keep the screen on while the game "
+"is running. Useful on mobile."
+msgstr ""
+
+#: doc/classes/OS.xml:949
+msgid ""
+"If [code]true[/code], the engine optimizes for low processor usage by only "
+"refreshing the screen if needed. Can improve battery consumption on mobile."
+msgstr ""
+
+#: doc/classes/OS.xml:952
+msgid ""
+"The amount of sleeping between frames when the low-processor usage mode is "
+"enabled (in microseconds). Higher values will result in lower CPU usage."
+msgstr ""
+
+#: doc/classes/OS.xml:955
+msgid ""
+"The maximum size of the window (without counting window manager "
+"decorations). Does not affect fullscreen mode. Set to [code](0, 0)[/code] to "
+"reset to the system default value."
+msgstr ""
+
+#: doc/classes/OS.xml:958
+msgid ""
+"The minimum size of the window in pixels (without counting window manager "
+"decorations). Does not affect fullscreen mode. Set to [code](0, 0)[/code] to "
+"reset to the system's default value.\n"
+"[b]Note:[/b] By default, the project window has a minimum size of "
+"[code]Vector2(64, 64)[/code]. This prevents issues that can arise when the "
+"window is resized to a near-zero size."
+msgstr ""
+
+#: doc/classes/OS.xml:962
+msgid "The current screen orientation."
+msgstr ""
+
+#: doc/classes/OS.xml:965
+msgid "The current tablet driver in use."
+msgstr ""
+
+#: doc/classes/OS.xml:968
+msgid "If [code]true[/code], vertical synchronization (Vsync) is enabled."
+msgstr ""
+
+#: doc/classes/OS.xml:971
+msgid ""
+"If [code]true[/code] and [code]vsync_enabled[/code] is true, the operating "
+"system's window compositor will be used for vsync when the compositor is "
+"enabled and the game is in windowed mode.\n"
+"[b]Note:[/b] This option is experimental and meant to alleviate stutter "
+"experienced by some users. However, some users have experienced a Vsync "
+"framerate halving (e.g. from 60 FPS to 30 FPS) when using it.\n"
+"[b]Note:[/b] This property is only implemented on Windows."
+msgstr ""
+
+#: doc/classes/OS.xml:976
+msgid ""
+"If [code]true[/code], removes the window frame.\n"
+"[b]Note:[/b] Setting [code]window_borderless[/code] to [code]false[/code] "
+"disables per-pixel transparency."
+msgstr ""
+
+#: doc/classes/OS.xml:980
+msgid "If [code]true[/code], the window is fullscreen."
+msgstr ""
+
+#: doc/classes/OS.xml:983
+msgid "If [code]true[/code], the window is maximized."
+msgstr ""
+
+#: doc/classes/OS.xml:986
+msgid "If [code]true[/code], the window is minimized."
+msgstr ""
+
+#: doc/classes/OS.xml:989
+msgid ""
+"If [code]true[/code], the window background is transparent and the window "
+"frame is removed.\n"
+"Use [code]get_tree().get_root().set_transparent_background(true)[/code] to "
+"disable main viewport background rendering.\n"
+"[b]Note:[/b] This property has no effect if [member ProjectSettings.display/"
+"window/per_pixel_transparency/allowed] setting is disabled.\n"
+"[b]Note:[/b] This property is implemented on HTML5, Linux, macOS, Windows, "
+"and Android. It can't be changed at runtime for Android. Use [member "
+"ProjectSettings.display/window/per_pixel_transparency/enabled] to set it at "
+"startup instead."
+msgstr ""
+
+#: doc/classes/OS.xml:995
+msgid ""
+"The window position relative to the screen, the origin is the top left "
+"corner, +Y axis goes to the bottom and +X axis goes to the right."
+msgstr ""
+
+#: doc/classes/OS.xml:998
+msgid "If [code]true[/code], the window is resizable by the user."
+msgstr ""
+
+#: doc/classes/OS.xml:1001
+msgid "The size of the window (without counting window manager decorations)."
+msgstr ""
+
+#: doc/classes/OS.xml:1006
+msgid ""
+"The GLES2 rendering backend. It uses OpenGL ES 2.0 on mobile devices, OpenGL "
+"2.1 on desktop platforms and WebGL 1.0 on the web."
+msgstr ""
+
+#: doc/classes/OS.xml:1009
+msgid ""
+"The GLES3 rendering backend. It uses OpenGL ES 3.0 on mobile devices, OpenGL "
+"3.3 on desktop platforms and WebGL 2.0 on the web."
+msgstr ""
+
+#: doc/classes/OS.xml:1012
+msgid "Sunday."
+msgstr ""
+
+#: doc/classes/OS.xml:1015
+msgid "Monday."
+msgstr ""
+
+#: doc/classes/OS.xml:1018
+msgid "Tuesday."
+msgstr ""
+
+#: doc/classes/OS.xml:1021
+msgid "Wednesday."
+msgstr ""
+
+#: doc/classes/OS.xml:1024
+msgid "Thursday."
+msgstr ""
+
+#: doc/classes/OS.xml:1027
+msgid "Friday."
+msgstr ""
+
+#: doc/classes/OS.xml:1030
+msgid "Saturday."
+msgstr ""
+
+#: doc/classes/OS.xml:1033
+msgid "January."
+msgstr ""
+
+#: doc/classes/OS.xml:1036
+msgid "February."
+msgstr ""
+
+#: doc/classes/OS.xml:1039
+msgid "March."
+msgstr ""
+
+#: doc/classes/OS.xml:1042
+msgid "April."
+msgstr ""
+
+#: doc/classes/OS.xml:1045
+msgid "May."
+msgstr ""
+
+#: doc/classes/OS.xml:1048
+msgid "June."
+msgstr ""
+
+#: doc/classes/OS.xml:1051
+msgid "July."
+msgstr ""
+
+#: doc/classes/OS.xml:1054
+msgid "August."
+msgstr ""
+
+#: doc/classes/OS.xml:1057
+msgid "September."
+msgstr ""
+
+#: doc/classes/OS.xml:1060
+msgid "October."
+msgstr ""
+
+#: doc/classes/OS.xml:1063
+msgid "November."
+msgstr ""
+
+#: doc/classes/OS.xml:1066
+msgid "December."
+msgstr ""
+
+#: doc/classes/OS.xml:1069
+msgid ""
+"Application handle:\n"
+"- Windows: [code]HINSTANCE[/code] of the application\n"
+"- MacOS: [code]NSApplication*[/code] of the application (not yet "
+"implemented)\n"
+"- Android: [code]JNIEnv*[/code] of the application (not yet implemented)"
+msgstr ""
+
+#: doc/classes/OS.xml:1075
+msgid ""
+"Display handle:\n"
+"- Linux: [code]X11::Display*[/code] for the display"
+msgstr ""
+
+#: doc/classes/OS.xml:1079
+msgid ""
+"Window handle:\n"
+"- Windows: [code]HWND[/code] of the main window\n"
+"- Linux: [code]X11::Window*[/code] of the main window\n"
+"- MacOS: [code]NSWindow*[/code] of the main window (not yet implemented)\n"
+"- Android: [code]jObject[/code] the main android activity (not yet "
+"implemented)"
+msgstr ""
+
+#: doc/classes/OS.xml:1086
+msgid ""
+"Window view:\n"
+"- Windows: [code]HDC[/code] of the main window drawing context\n"
+"- MacOS: [code]NSView*[/code] of the main windows view (not yet implemented)"
+msgstr ""
+
+#: doc/classes/OS.xml:1091
+msgid ""
+"OpenGL Context:\n"
+"- Windows: [code]HGLRC[/code]\n"
+"- Linux: [code]X11::GLXContext[/code]\n"
+"- MacOS: [code]NSOpenGLContext*[/code] (not yet implemented)"
+msgstr ""
+
+#: doc/classes/OS.xml:1097
+msgid "Landscape screen orientation."
+msgstr ""
+
+#: doc/classes/OS.xml:1100
+msgid "Portrait screen orientation."
+msgstr ""
+
+#: doc/classes/OS.xml:1103
+msgid "Reverse landscape screen orientation."
+msgstr ""
+
+#: doc/classes/OS.xml:1106
+msgid "Reverse portrait screen orientation."
+msgstr ""
+
+#: doc/classes/OS.xml:1109
+msgid "Uses landscape or reverse landscape based on the hardware sensor."
+msgstr ""
+
+#: doc/classes/OS.xml:1112
+msgid "Uses portrait or reverse portrait based on the hardware sensor."
+msgstr ""
+
+#: doc/classes/OS.xml:1115
+msgid "Uses most suitable orientation based on the hardware sensor."
+msgstr ""
+
+#: doc/classes/OS.xml:1118
+msgid "Desktop directory path."
+msgstr ""
+
+#: doc/classes/OS.xml:1121
+msgid "DCIM (Digital Camera Images) directory path."
+msgstr ""
+
+#: doc/classes/OS.xml:1124
+msgid "Documents directory path."
+msgstr ""
+
+#: doc/classes/OS.xml:1127
+msgid "Downloads directory path."
+msgstr ""
+
+#: doc/classes/OS.xml:1130
+msgid "Movies directory path."
+msgstr ""
+
+#: doc/classes/OS.xml:1133
+msgid "Music directory path."
+msgstr ""
+
+#: doc/classes/OS.xml:1136
+msgid "Pictures directory path."
+msgstr ""
+
+#: doc/classes/OS.xml:1139
+msgid "Ringtones directory path."
+msgstr ""
+
+#: doc/classes/OS.xml:1142
+msgid "Unknown powerstate."
+msgstr ""
+
+#: doc/classes/OS.xml:1145
+msgid "Unplugged, running on battery."
+msgstr ""
+
+#: doc/classes/OS.xml:1148
+msgid "Plugged in, no battery available."
+msgstr ""
+
+#: doc/classes/OS.xml:1151
+msgid "Plugged in, battery charging."
+msgstr ""
+
+#: doc/classes/OS.xml:1154
+msgid "Plugged in, battery fully charged."
+msgstr ""
+
+#: doc/classes/PackedDataContainerRef.xml:4
+msgid "Reference version of [PackedDataContainer]."
+msgstr ""
+
+#: doc/classes/PackedScene.xml:4
+msgid "An abstraction of a serialized scene."
+msgstr ""
+
+#: doc/classes/PackedScene.xml:7
+msgid ""
+"A simplified interface to a scene file. Provides access to operations and "
+"checks that can be performed on the scene resource itself.\n"
+"Can be used to save a node to a file. When saving, the node as well as all "
+"the nodes it owns get saved (see [code]owner[/code] property on [Node]).\n"
+"[b]Note:[/b] The node doesn't need to own itself.\n"
+"[b]Example of loading a saved scene:[/b]\n"
+"[codeblock]\n"
+"# Use `load()` instead of `preload()` if the path isn't known at compile-"
+"time.\n"
+"var scene = preload(\"res://scene.tscn\").instance()\n"
+"# Add the node as a child of the node the script is attached to.\n"
+"add_child(scene)\n"
+"[/codeblock]\n"
+"[b]Example of saving a node with different owners:[/b] The following example "
+"creates 3 objects: [code]Node2D[/code] ([code]node[/code]), "
+"[code]RigidBody2D[/code] ([code]rigid[/code]) and [code]CollisionObject2D[/"
+"code] ([code]collision[/code]). [code]collision[/code] is a child of "
+"[code]rigid[/code] which is a child of [code]node[/code]. Only [code]rigid[/"
+"code] is owned by [code]node[/code] and [code]pack[/code] will therefore "
+"only save those two nodes, but not [code]collision[/code].\n"
+"[codeblock]\n"
+"# Create the objects.\n"
+"var node = Node2D.new()\n"
+"var rigid = RigidBody2D.new()\n"
+"var collision = CollisionShape2D.new()\n"
+"\n"
+"# Create the object hierarchy.\n"
+"rigid.add_child(collision)\n"
+"node.add_child(rigid)\n"
+"\n"
+"# Change owner of `rigid`, but not of `collision`.\n"
+"rigid.owner = node\n"
+"\n"
+"var scene = PackedScene.new()\n"
+"# Only `node` and `rigid` are now packed.\n"
+"var result = scene.pack(node)\n"
+"if result == OK:\n"
+" var error = ResourceSaver.save(\"res://path/name.scn\", scene) # Or "
+"\"user://...\"\n"
+" if error != OK:\n"
+" push_error(\"An error occurred while saving the scene to disk.\")\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/PackedScene.xml:47
+msgid "Returns [code]true[/code] if the scene file has nodes."
+msgstr ""
+
+#: doc/classes/PackedScene.xml:53
+msgid ""
+"Returns the [code]SceneState[/code] representing the scene file contents."
+msgstr ""
+
+#: doc/classes/PackedScene.xml:60
+msgid ""
+"Instantiates the scene's node hierarchy. Triggers child scene "
+"instantiation(s). Triggers a [constant Node.NOTIFICATION_INSTANCED] "
+"notification on the root node."
+msgstr ""
+
+#: doc/classes/PackedScene.xml:67
+msgid ""
+"Pack will ignore any sub-nodes not owned by given node. See [member Node."
+"owner]."
+msgstr ""
+
+#: doc/classes/PackedScene.xml:73
+msgid ""
+"A dictionary representation of the scene contents.\n"
+"Available keys include \"rnames\" and \"variants\" for resources, "
+"\"node_count\", \"nodes\", \"node_paths\" for nodes, \"editable_instances\" "
+"for base scene children overrides, \"conn_count\" and \"conns\" for signal "
+"connections, and \"version\" for the format style of the PackedScene."
+msgstr ""
+
+#: doc/classes/PackedScene.xml:79
+msgid "If passed to [method instance], blocks edits to the scene state."
+msgstr ""
+
+#: doc/classes/PackedScene.xml:82
+msgid ""
+"If passed to [method instance], provides local scene resources to the local "
+"scene.\n"
+"[b]Note:[/b] Only available in editor builds."
+msgstr ""
+
+#: doc/classes/PackedScene.xml:86
+msgid ""
+"If passed to [method instance], provides local scene resources to the local "
+"scene. Only the main scene should receive the main edit state.\n"
+"[b]Note:[/b] Only available in editor builds."
+msgstr ""
+
+#: doc/classes/PacketPeer.xml:4
+msgid "Abstraction and base class for packet-based protocols."
+msgstr ""
+
+#: doc/classes/PacketPeer.xml:7
+msgid ""
+"PacketPeer is an abstraction and base class for packet-based protocols (such "
+"as UDP). It provides an API for sending and receiving packets both as raw "
+"data or variables. This makes it easy to transfer data over a protocol, "
+"without having to encode data as low-level bytes or having to worry about "
+"network ordering."
+msgstr ""
+
+#: doc/classes/PacketPeer.xml:15
+msgid "Returns the number of packets currently available in the ring-buffer."
+msgstr ""
+
+#: doc/classes/PacketPeer.xml:21
+msgid "Gets a raw packet."
+msgstr ""
+
+#: doc/classes/PacketPeer.xml:27
+msgid ""
+"Returns the error state of the last packet received (via [method get_packet] "
+"and [method get_var])."
+msgstr ""
+
+#: doc/classes/PacketPeer.xml:34
+msgid ""
+"Gets a Variant. If [code]allow_objects[/code] (or [member "
+"allow_object_decoding]) is [code]true[/code], decoding objects is allowed.\n"
+"[b]Warning:[/b] Deserialized objects can contain code which gets executed. "
+"Do not use this option if the serialized object comes from untrusted sources "
+"to avoid potential security threats such as remote code execution."
+msgstr ""
+
+#: doc/classes/PacketPeer.xml:42
+msgid "Sends a raw packet."
+msgstr ""
+
+#: doc/classes/PacketPeer.xml:50
+msgid ""
+"Sends a [Variant] as a packet. If [code]full_objects[/code] (or [member "
+"allow_object_decoding]) is [code]true[/code], encoding objects is allowed "
+"(and can potentially include code)."
+msgstr ""
+
+#: doc/classes/PacketPeer.xml:56
+msgid ""
+"[i]Deprecated.[/i] Use [code]get_var[/code] and [code]put_var[/code] "
+"parameters instead.\n"
+"If [code]true[/code], the PacketPeer will allow encoding and decoding of "
+"object via [method get_var] and [method put_var].\n"
+"[b]Warning:[/b] Deserialized objects can contain code which gets executed. "
+"Do not use this option if the serialized object comes from untrusted sources "
+"to avoid potential security threats such as remote code execution."
+msgstr ""
+
+#: doc/classes/PacketPeer.xml:61
+msgid ""
+"Maximum buffer size allowed when encoding [Variant]s. Raise this value to "
+"support heavier memory allocations.\n"
+"The [method put_var] method allocates memory on the stack, and the buffer "
+"used will grow automatically to the closest power of two to match the size "
+"of the [Variant]. If the [Variant] is bigger than "
+"[code]encode_buffer_max_size[/code], the method will error out with "
+"[constant ERR_OUT_OF_MEMORY]."
+msgstr ""
+
+#: doc/classes/PacketPeerDTLS.xml:4
+msgid "DTLS packet peer."
+msgstr ""
+
+#: doc/classes/PacketPeerDTLS.xml:7
+msgid ""
+"This class represents a DTLS peer connection. It can be used to connect to a "
+"DTLS server, and is returned by [method DTLSServer.take_connection].\n"
+"[b]Warning:[/b] SSL/TLS certificate revocation and certificate pinning are "
+"currently not supported. Revoked certificates are accepted as long as they "
+"are otherwise valid. If this is a concern, you may want to use automatically "
+"managed certificates with a short validity period."
+msgstr ""
+
+#: doc/classes/PacketPeerDTLS.xml:20
+msgid ""
+"Connects a [code]peer[/code] beginning the DTLS handshake using the "
+"underlying [PacketPeerUDP] which must be connected (see [method "
+"PacketPeerUDP.connect_to_host]). If [code]validate_certs[/code] is "
+"[code]true[/code], [PacketPeerDTLS] will validate that the certificate "
+"presented by the remote peer and match it with the [code]for_hostname[/code] "
+"argument. You can specify a custom [X509Certificate] to use for validation "
+"via the [code]valid_certificate[/code] argument."
+msgstr ""
+
+#: doc/classes/PacketPeerDTLS.xml:26
+msgid "Disconnects this peer, terminating the DTLS session."
+msgstr ""
+
+#: doc/classes/PacketPeerDTLS.xml:32 doc/classes/StreamPeerSSL.xml:43
+msgid "Returns the status of the connection. See [enum Status] for values."
+msgstr ""
+
+#: doc/classes/PacketPeerDTLS.xml:38
+msgid ""
+"Poll the connection to check for incoming packets. Call this frequently to "
+"update the status and keep the connection working."
+msgstr ""
+
+#: doc/classes/PacketPeerDTLS.xml:44
+msgid "A status representing a [PacketPeerDTLS] that is disconnected."
+msgstr ""
+
+#: doc/classes/PacketPeerDTLS.xml:47
+msgid ""
+"A status representing a [PacketPeerDTLS] that is currently performing the "
+"handshake with a remote peer."
+msgstr ""
+
+#: doc/classes/PacketPeerDTLS.xml:50
+msgid ""
+"A status representing a [PacketPeerDTLS] that is connected to a remote peer."
+msgstr ""
+
+#: doc/classes/PacketPeerDTLS.xml:53
+msgid "A status representing a [PacketPeerDTLS] in a generic error state."
+msgstr ""
+
+#: doc/classes/PacketPeerDTLS.xml:56
+msgid ""
+"An error status that shows a mismatch in the DTLS certificate domain "
+"presented by the host and the domain requested for validation."
+msgstr ""
+
+#: doc/classes/PacketPeerStream.xml:4
+msgid "Wrapper to use a PacketPeer over a StreamPeer."
+msgstr ""
+
+#: doc/classes/PacketPeerStream.xml:7
+msgid ""
+"PacketStreamPeer provides a wrapper for working using packets over a stream. "
+"This allows for using packet based code with StreamPeers. PacketPeerStream "
+"implements a custom protocol over the StreamPeer, so the user should not "
+"read or write to the wrapped StreamPeer directly."
+msgstr ""
+
+#: doc/classes/PacketPeerStream.xml:19
+msgid "The wrapped [StreamPeer] object."
+msgstr ""
+
+#: doc/classes/PacketPeerUDP.xml:4
+msgid "UDP packet peer."
+msgstr ""
+
+#: doc/classes/PacketPeerUDP.xml:7
+msgid ""
+"UDP packet peer. Can be used to send raw UDP packets as well as [Variant]s."
+msgstr ""
+
+#: doc/classes/PacketPeerUDP.xml:15
+msgid "Closes the UDP socket the [PacketPeerUDP] is currently listening on."
+msgstr ""
+
+#: doc/classes/PacketPeerUDP.xml:23
+msgid ""
+"Calling this method connects this UDP peer to the given [code]host[/code]/"
+"[code]port[/code] pair. UDP is in reality connectionless, so this option "
+"only means that incoming packets from different addresses are automatically "
+"discarded, and that outgoing packets are always sent to the connected "
+"address (future calls to [method set_dest_address] are not allowed). This "
+"method does not send any data to the remote peer, to do that, use [method "
+"PacketPeer.put_var] or [method PacketPeer.put_packet] as usual. See also "
+"[UDPServer].\n"
+"[b]Note:[/b] Connecting to the remote peer does not help to protect from "
+"malicious attacks like IP spoofing, etc. Think about using an encryption "
+"technique like SSL or DTLS if you feel like your application is transferring "
+"sensitive information."
+msgstr ""
+
+#: doc/classes/PacketPeerUDP.xml:30
+msgid ""
+"Returns the IP of the remote peer that sent the last packet(that was "
+"received with [method PacketPeer.get_packet] or [method PacketPeer.get_var])."
+msgstr ""
+
+#: doc/classes/PacketPeerUDP.xml:36
+msgid ""
+"Returns the port of the remote peer that sent the last packet(that was "
+"received with [method PacketPeer.get_packet] or [method PacketPeer.get_var])."
+msgstr ""
+
+#: doc/classes/PacketPeerUDP.xml:42
+msgid ""
+"Returns [code]true[/code] if the UDP socket is open and has been connected "
+"to a remote address. See [method connect_to_host]."
+msgstr ""
+
+#: doc/classes/PacketPeerUDP.xml:48
+msgid "Returns whether this [PacketPeerUDP] is listening."
+msgstr ""
+
+#: doc/classes/PacketPeerUDP.xml:56
+msgid ""
+"Joins the multicast group specified by [code]multicast_address[/code] using "
+"the interface identified by [code]interface_name[/code].\n"
+"You can join the same multicast group with multiple interfaces. Use [method "
+"IP.get_local_interfaces] to know which are available.\n"
+"[b]Note:[/b] Some Android devices might require the "
+"[code]CHANGE_WIFI_MULTICAST_STATE[/code] permission for multicast to work."
+msgstr ""
+
+#: doc/classes/PacketPeerUDP.xml:66
+msgid ""
+"Removes the interface identified by [code]interface_name[/code] from the "
+"multicast group specified by [code]multicast_address[/code]."
+msgstr ""
+
+#: doc/classes/PacketPeerUDP.xml:75
+msgid ""
+"Makes this [PacketPeerUDP] listen on the [code]port[/code] binding to "
+"[code]bind_address[/code] with a buffer size [code]recv_buf_size[/code].\n"
+"If [code]bind_address[/code] is set to [code]\"*\"[/code] (default), the "
+"peer will listen on all available addresses (both IPv4 and IPv6).\n"
+"If [code]bind_address[/code] is set to [code]\"0.0.0.0\"[/code] (for IPv4) "
+"or [code]\"::\"[/code] (for IPv6), the peer will listen on all available "
+"addresses matching that IP type.\n"
+"If [code]bind_address[/code] is set to any valid address (e.g. "
+"[code]\"192.168.1.101\"[/code], [code]\"::1\"[/code], etc), the peer will "
+"only listen on the interface with that addresses (or fail if no interface "
+"with the given address exists)."
+msgstr ""
+
+#: doc/classes/PacketPeerUDP.xml:85
+msgid ""
+"Enable or disable sending of broadcast packets (e.g. "
+"[code]set_dest_address(\"255.255.255.255\", 4343)[/code]. This option is "
+"disabled by default.\n"
+"[b]Note:[/b] Some Android devices might require the "
+"[code]CHANGE_WIFI_MULTICAST_STATE[/code] permission and this option to be "
+"enabled to receive broadcast packets too."
+msgstr ""
+
+#: doc/classes/PacketPeerUDP.xml:94
+msgid ""
+"Sets the destination address and port for sending packets and variables. A "
+"hostname will be resolved using DNS if needed.\n"
+"[b]Note:[/b] [method set_broadcast_enabled] must be enabled before sending "
+"packets to a broadcast address (e.g. [code]255.255.255.255[/code])."
+msgstr ""
+
+#: doc/classes/PacketPeerUDP.xml:101
+msgid ""
+"Waits for a packet to arrive on the listening port. See [method listen].\n"
+"[b]Note:[/b] [method wait] can't be interrupted once it has been called. "
+"This can be worked around by allowing the other party to send a specific "
+"\"death pill\" packet like this:\n"
+"[codeblock]\n"
+"# Server\n"
+"socket.set_dest_address(\"127.0.0.1\", 789)\n"
+"socket.put_packet(\"Time to stop\".to_ascii())\n"
+"\n"
+"# Client\n"
+"while socket.wait() == OK:\n"
+" var data = socket.get_packet().get_string_from_ascii()\n"
+" if data == \"Time to stop\":\n"
+" return\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Panel.xml:4
+msgid "Provides an opaque background for [Control] children."
+msgstr ""
+
+#: doc/classes/Panel.xml:7
+msgid ""
+"Panel is a [Control] that displays an opaque background. It's commonly used "
+"as a parent and container for other types of [Control] nodes."
+msgstr ""
+
+#: doc/classes/Panel.xml:11
+msgid "https://godotengine.org/asset-library/asset/516"
+msgstr ""
+
+#: doc/classes/Panel.xml:12 doc/classes/Skeleton.xml:12
+#: doc/classes/SkeletonIK.xml:29
+msgid "https://godotengine.org/asset-library/asset/523"
+msgstr ""
+
+#: doc/classes/Panel.xml:20
+msgid "The style of this [Panel]."
+msgstr ""
+
+#: doc/classes/PanelContainer.xml:4
+msgid "Panel container type."
+msgstr ""
+
+#: doc/classes/PanelContainer.xml:7
+msgid ""
+"Panel container type. This container fits controls inside of the delimited "
+"area of a stylebox. It's useful for giving controls an outline."
+msgstr ""
+
+#: doc/classes/PanelContainer.xml:18
+msgid "The style of [PanelContainer]'s background."
+msgstr ""
+
+#: doc/classes/PanoramaSky.xml:4
+msgid "A type of [Sky] used to draw a background texture."
+msgstr ""
+
+#: doc/classes/PanoramaSky.xml:7
+msgid ""
+"A resource referenced in an [Environment] that is used to draw a background. "
+"The Panorama sky functions similar to skyboxes in other engines, except it "
+"uses an equirectangular sky map instead of a cube map.\n"
+"Using an HDR panorama is strongly recommended for accurate, high-quality "
+"reflections. Godot supports the Radiance HDR ([code].hdr[/code]) and OpenEXR "
+"([code].exr[/code]) image formats for this purpose.\n"
+"You can use [url=https://danilw.github.io/GLSL-howto/cubemap_to_panorama_js/"
+"cubemap_to_panorama.html]this tool[/url] to convert a cube map to an "
+"equirectangular sky map."
+msgstr ""
+
+#: doc/classes/PanoramaSky.xml:17
+msgid "[Texture] to be applied to the PanoramaSky."
+msgstr ""
+
+#: doc/classes/ParallaxBackground.xml:4
+msgid "A node used to create a parallax scrolling background."
+msgstr ""
+
+#: doc/classes/ParallaxBackground.xml:7
+msgid ""
+"A ParallaxBackground uses one or more [ParallaxLayer] child nodes to create "
+"a parallax effect. Each [ParallaxLayer] can move at a different speed using "
+"[member ParallaxLayer.motion_offset]. This creates an illusion of depth in a "
+"2D game. If not used with a [Camera2D], you must manually calculate the "
+"[member scroll_offset]."
+msgstr ""
+
+#: doc/classes/ParallaxBackground.xml:16
+msgid "The base position offset for all [ParallaxLayer] children."
+msgstr ""
+
+#: doc/classes/ParallaxBackground.xml:19
+msgid "The base motion scale for all [ParallaxLayer] children."
+msgstr ""
+
+#: doc/classes/ParallaxBackground.xml:22
+msgid ""
+"If [code]true[/code], elements in [ParallaxLayer] child aren't affected by "
+"the zoom level of the camera."
+msgstr ""
+
+#: doc/classes/ParallaxBackground.xml:25
+msgid ""
+"Top-left limits for scrolling to begin. If the camera is outside of this "
+"limit, the background will stop scrolling. Must be lower than [member "
+"scroll_limit_end] to work."
+msgstr ""
+
+#: doc/classes/ParallaxBackground.xml:28
+msgid ""
+"Bottom-right limits for scrolling to end. If the camera is outside of this "
+"limit, the background will stop scrolling. Must be higher than [member "
+"scroll_limit_begin] to work."
+msgstr ""
+
+#: doc/classes/ParallaxBackground.xml:31
+msgid ""
+"The ParallaxBackground's scroll value. Calculated automatically when using a "
+"[Camera2D], but can be used to manually manage scrolling when no camera is "
+"present."
+msgstr ""
+
+#: doc/classes/ParallaxLayer.xml:4
+msgid "A parallax scrolling layer to be used with [ParallaxBackground]."
+msgstr ""
+
+#: doc/classes/ParallaxLayer.xml:7
+msgid ""
+"A ParallaxLayer must be the child of a [ParallaxBackground] node. Each "
+"ParallaxLayer can be set to move at different speeds relative to the camera "
+"movement or the [member ParallaxBackground.scroll_offset] value.\n"
+"This node's children will be affected by its scroll offset.\n"
+"[b]Note:[/b] Any changes to this node's position and scale made after it "
+"enters the scene will be ignored."
+msgstr ""
+
+#: doc/classes/ParallaxLayer.xml:17
+msgid ""
+"The ParallaxLayer's [Texture] mirroring. Useful for creating an infinite "
+"scrolling background. If an axis is set to [code]0[/code], the [Texture] "
+"will not be mirrored."
+msgstr ""
+
+#: doc/classes/ParallaxLayer.xml:20
+msgid ""
+"The ParallaxLayer's offset relative to the parent ParallaxBackground's "
+"[member ParallaxBackground.scroll_offset]."
+msgstr ""
+
+#: doc/classes/ParallaxLayer.xml:23
+msgid ""
+"Multiplies the ParallaxLayer's motion. If an axis is set to [code]0[/code], "
+"it will not scroll."
+msgstr ""
+
+#: doc/classes/Particles.xml:4
+msgid "GPU-based 3D particle emitter."
+msgstr ""
+
+#: doc/classes/Particles.xml:7
+msgid ""
+"3D particle node used to create a variety of particle systems and effects. "
+"[Particles] features an emitter that generates some number of particles at a "
+"given rate.\n"
+"Use the [code]process_material[/code] property to add a [ParticlesMaterial] "
+"to configure particle appearance and behavior. Alternatively, you can add a "
+"[ShaderMaterial] which will be applied to all particles.\n"
+"[b]Note:[/b] [Particles] only work when using the GLES3 renderer. If using "
+"the GLES2 renderer, use [CPUParticles] instead. You can convert [Particles] "
+"to [CPUParticles] by selecting the node, clicking the [b]Particles[/b] menu "
+"at the top of the 3D editor viewport then choosing [b]Convert to "
+"CPUParticles[/b].\n"
+"[b]Note:[/b] After working on a Particles node, remember to update its "
+"[member visibility_aabb] by selecting it, clicking the [b]Particles[/b] menu "
+"at the top of the 3D editor viewport then choose [b]Generate Visibility "
+"AABB[/b]. Otherwise, particles may suddenly disappear depending on the "
+"camera position and angle."
+msgstr ""
+
+#: doc/classes/Particles.xml:13
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/3d/vertex_animation/"
+"controlling_thousands_of_fish.html"
+msgstr ""
+
+#: doc/classes/Particles.xml:20
+msgid ""
+"Returns the axis-aligned bounding box that contains all the particles that "
+"are active in the current frame."
+msgstr ""
+
+#: doc/classes/Particles.xml:27
+msgid "Returns the [Mesh] that is drawn at index [code]pass[/code]."
+msgstr ""
+
+#: doc/classes/Particles.xml:33
+msgid "Restarts the particle emission, clearing existing particles."
+msgstr ""
+
+#: doc/classes/Particles.xml:41
+msgid "Sets the [Mesh] that is drawn at index [code]pass[/code]."
+msgstr ""
+
+#: doc/classes/Particles.xml:54
+msgid "[Mesh] that is drawn for the first draw pass."
+msgstr ""
+
+#: doc/classes/Particles.xml:57
+msgid "[Mesh] that is drawn for the second draw pass."
+msgstr ""
+
+#: doc/classes/Particles.xml:60
+msgid "[Mesh] that is drawn for the third draw pass."
+msgstr ""
+
+#: doc/classes/Particles.xml:63
+msgid "[Mesh] that is drawn for the fourth draw pass."
+msgstr ""
+
+#: doc/classes/Particles.xml:66
+msgid "The number of draw passes when rendering particles."
+msgstr ""
+
+#: doc/classes/Particles.xml:72
+msgid ""
+"Time ratio between each emission. If [code]0[/code], particles are emitted "
+"continuously. If [code]1[/code], all particles are emitted simultaneously."
+msgstr ""
+
+#: doc/classes/Particles.xml:87
+msgid ""
+"If [code]true[/code], only [code]amount[/code] particles will be emitted."
+msgstr ""
+
+#: doc/classes/Particles.xml:90
+msgid ""
+"Amount of time to preprocess the particles before animation starts. Lets you "
+"start the animation some time after particles have started emitting."
+msgstr ""
+
+#: doc/classes/Particles.xml:93 doc/classes/Particles2D.xml:68
+msgid ""
+"[Material] for processing particles. Can be a [ParticlesMaterial] or a "
+"[ShaderMaterial]."
+msgstr ""
+
+#: doc/classes/Particles.xml:96
+msgid "Emission randomness ratio."
+msgstr ""
+
+#: doc/classes/Particles.xml:99
+msgid ""
+"Speed scaling ratio. A value of [code]0[/code] can be used to pause the "
+"particles."
+msgstr ""
+
+#: doc/classes/Particles.xml:102
+msgid ""
+"The [AABB] that determines the node's region which needs to be visible on "
+"screen for the particle system to be active.\n"
+"Grow the box if particles suddenly appear/disappear when the node enters/"
+"exits the screen. The [AABB] can be grown via code or with the [b]Particles "
+"→ Generate AABB[/b] editor tool.\n"
+"[b]Note:[/b] If the [ParticlesMaterial] in use is configured to cast "
+"shadows, you may want to enlarge this AABB to ensure the shadow is updated "
+"when particles are off-screen."
+msgstr ""
+
+#: doc/classes/Particles.xml:118
+msgid "Maximum number of draw passes supported."
+msgstr ""
+
+#: doc/classes/Particles2D.xml:4
+msgid "GPU-based 2D particle emitter."
+msgstr ""
+
+#: doc/classes/Particles2D.xml:7
+msgid ""
+"2D particle node used to create a variety of particle systems and effects. "
+"[Particles2D] features an emitter that generates some number of particles at "
+"a given rate.\n"
+"Use the [code]process_material[/code] property to add a [ParticlesMaterial] "
+"to configure particle appearance and behavior. Alternatively, you can add a "
+"[ShaderMaterial] which will be applied to all particles.\n"
+"[b]Note:[/b] [Particles2D] only work when using the GLES3 renderer. If using "
+"the GLES2 renderer, use [CPUParticles2D] instead. You can convert "
+"[Particles2D] to [CPUParticles2D] by selecting the node, clicking the "
+"[b]Particles[/b] menu at the top of the 2D editor viewport then choosing "
+"[b]Convert to CPUParticles2D[/b].\n"
+"[b]Note:[/b] After working on a Particles node, remember to update its "
+"[member visibility_rect] by selecting it, clicking the [b]Particles[/b] menu "
+"at the top of the 2D editor viewport then choose [b]Generate Visibility "
+"Rect[/b]. Otherwise, particles may suddenly disappear depending on the "
+"camera position and angle.\n"
+"[b]Note:[/b] Unlike [CPUParticles2D], [Particles2D] currently ignore the "
+"texture region defined in [AtlasTexture]s."
+msgstr ""
+
+#: doc/classes/Particles2D.xml:21
+msgid "Returns a rectangle containing the positions of all existing particles."
+msgstr ""
+
+#: doc/classes/Particles2D.xml:27
+msgid "Restarts all the existing particles."
+msgstr ""
+
+#: doc/classes/Particles2D.xml:80
+msgid ""
+"The [Rect2] that determines the node's region which needs to be visible on "
+"screen for the particle system to be active.\n"
+"Grow the rect if particles suddenly appear/disappear when the node enters/"
+"exits the screen. The [Rect2] can be grown via code or with the [b]Particles "
+"→ Generate Visibility Rect[/b] editor tool."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:4
+msgid "Particle properties for [Particles] and [Particles2D] nodes."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:7
+msgid ""
+"ParticlesMaterial defines particle properties and behavior. It is used in "
+"the [code]process_material[/code] of [Particles] and [Particles2D] emitter "
+"nodes.\n"
+"Some of this material's properties are applied to each particle when "
+"emitted, while others can have a [CurveTexture] applied to vary values over "
+"the lifetime of the particle.\n"
+"When a randomness ratio is applied to a property it is used to scale that "
+"property by a random amount. The random ratio is used to interpolate between "
+"[code]1.0[/code] and a random number less than one, the result is multiplied "
+"by the property to obtain the randomized property. For example a random "
+"ratio of [code]0.4[/code] would scale the original property between "
+"[code]0.4-1.0[/code] of its original value."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:18
+msgid "Returns [code]true[/code] if the specified flag is enabled."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:32
+msgid "Returns the randomness ratio associated with the specified parameter."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:39
+msgid "Returns the [Texture] used by the specified parameter."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:47
+msgid ""
+"If [code]true[/code], enables the specified flag. See [enum Flags] for "
+"options."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:55
+msgid "Sets the specified [enum Parameter]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:63
+msgid "Sets the randomness ratio for the specified [enum Parameter]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:71
+msgid "Sets the [Texture] for the specified [enum Parameter]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:77
+msgid ""
+"Initial rotation applied to each particle, in degrees.\n"
+"Only applied when [member flag_disable_z] or [member flag_rotate_y] are "
+"[code]true[/code] or the [SpatialMaterial] being used to draw the particle "
+"is using [constant SpatialMaterial.BILLBOARD_PARTICLES]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:81
+msgid "Each particle's rotation will be animated along this [CurveTexture]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:87
+msgid ""
+"Initial angular velocity applied to each particle. Sets the speed of "
+"rotation of the particle.\n"
+"Only applied when [member flag_disable_z] or [member flag_rotate_y] are "
+"[code]true[/code] or the [SpatialMaterial] being used to draw the particle "
+"is using [constant SpatialMaterial.BILLBOARD_PARTICLES]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:91
+msgid "Each particle's angular velocity will vary along this [CurveTexture]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:100
+msgid "Each particle's animation offset will vary along this [CurveTexture]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:109
+msgid "Each particle's animation speed will vary along this [CurveTexture]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:115
+msgid ""
+"Each particle's initial color. If the [Particles2D]'s [code]texture[/code] "
+"is defined, it will be multiplied by this color. To have particle display "
+"color in a [SpatialMaterial] make sure to set [member SpatialMaterial."
+"vertex_color_use_as_albedo] to [code]true[/code]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:124
+msgid "Damping will vary along this [CurveTexture]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:133
+msgid ""
+"The box's extents if [code]emission_shape[/code] is set to [constant "
+"EMISSION_SHAPE_BOX]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:136
+msgid ""
+"Particle color will be modulated by color determined by sampling this "
+"texture at the same point as the [member emission_point_texture]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:139
+msgid ""
+"Particle velocity and rotation will be set by sampling this texture at the "
+"same point as the [member emission_point_texture]. Used only in [constant "
+"EMISSION_SHAPE_DIRECTED_POINTS]. Can be created automatically from mesh or "
+"node by selecting \"Create Emission Points from Mesh/Node\" under the "
+"\"Particles\" tool in the toolbar."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:142
+msgid ""
+"The number of emission points if [code]emission_shape[/code] is set to "
+"[constant EMISSION_SHAPE_POINTS] or [constant "
+"EMISSION_SHAPE_DIRECTED_POINTS]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:145
+msgid ""
+"Particles will be emitted at positions determined by sampling this texture "
+"at a random position. Used with [constant EMISSION_SHAPE_POINTS] and "
+"[constant EMISSION_SHAPE_DIRECTED_POINTS]. Can be created automatically from "
+"mesh or node by selecting \"Create Emission Points from Mesh/Node\" under "
+"the \"Particles\" tool in the toolbar."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:148
+msgid ""
+"The axis of the ring when using the emitter [constant EMISSION_SHAPE_RING]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:151
+msgid ""
+"The height of the ring when using the emitter [constant EMISSION_SHAPE_RING]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:154
+msgid ""
+"The inner radius of the ring when using the emitter [constant "
+"EMISSION_SHAPE_RING]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:157
+msgid ""
+"The radius of the ring when using the emitter [constant EMISSION_SHAPE_RING]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:160
+msgid ""
+"Particles will be emitted inside this region. Use [enum EmissionShape] "
+"constants for values."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:163
+msgid ""
+"The sphere's radius if [code]emission_shape[/code] is set to [constant "
+"EMISSION_SHAPE_SPHERE]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:175
+msgid "Amount of [member spread] along the Y axis."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:184
+msgid "Each particle's hue will vary along this [CurveTexture]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:202
+msgid ""
+"Each particle's linear acceleration will vary along this [CurveTexture]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:208
+msgid ""
+"Orbital velocity applied to each particle. Makes the particles circle around "
+"origin. Specified in number of full rotations around origin per second.\n"
+"Only available when [member flag_disable_z] is [code]true[/code]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:212
+msgid "Each particle's orbital velocity will vary along this [CurveTexture]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:221
+msgid ""
+"Each particle's radial acceleration will vary along this [CurveTexture]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:230
+msgid "Each particle's scale will vary along this [CurveTexture]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:242
+msgid ""
+"Each particle's tangential acceleration will vary along this [CurveTexture]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:248
+msgid "Trail particles' color will vary along this [GradientTexture]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:251
+msgid ""
+"Emitter will emit [code]amount[/code] divided by [code]trail_divisor[/code] "
+"particles. The remaining particles will be used as trail(s)."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:254
+msgid "Trail particles' size will vary along this [CurveTexture]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:259
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_texture] to set initial velocity properties."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:262
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_texture] to set angular velocity properties."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:265
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_texture] to set orbital velocity properties."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:268
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_texture] to set linear acceleration properties."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:271
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_texture] to set radial acceleration properties."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:274
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_texture] to set tangential acceleration properties."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:277
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_texture] to set damping properties."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:280
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_texture] to set angle properties."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:283
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_texture] to set scale properties."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:286
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_texture] to set hue variation properties."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:289
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_texture] to set animation speed properties."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:292
+msgid ""
+"Use with [method set_param], [method set_param_randomness], and [method "
+"set_param_texture] to set animation offset properties."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:298
+msgid "Use with [method set_flag] to set [member flag_align_y]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:301
+msgid "Use with [method set_flag] to set [member flag_rotate_y]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:304
+msgid "Use with [method set_flag] to set [member flag_disable_z]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:319
+msgid ""
+"Particles will be emitted at a position determined by sampling a random "
+"point on the [member emission_point_texture]. Particle color will be "
+"modulated by [member emission_color_texture]."
+msgstr ""
+
+#: doc/classes/ParticlesMaterial.xml:322
+msgid ""
+"Particles will be emitted at a position determined by sampling a random "
+"point on the [member emission_point_texture]. Particle velocity and rotation "
+"will be set based on [member emission_normal_texture]. Particle color will "
+"be modulated by [member emission_color_texture]."
+msgstr ""
+
+#: doc/classes/Path.xml:4
+msgid "Contains a [Curve3D] path for [PathFollow] nodes to follow."
+msgstr ""
+
+#: doc/classes/Path.xml:7
+msgid ""
+"Can have [PathFollow] child nodes moving along the [Curve3D]. See "
+"[PathFollow] for more information on the usage.\n"
+"Note that the path is considered as relative to the moved nodes (children of "
+"[PathFollow]). As such, the curve should usually start with a zero vector "
+"[code](0, 0, 0)[/code]."
+msgstr ""
+
+#: doc/classes/Path.xml:16
+msgid "A [Curve3D] describing the path."
+msgstr ""
+
+#: doc/classes/Path.xml:22
+msgid "Emitted when the [member curve] changes."
+msgstr ""
+
+#: doc/classes/Path2D.xml:4
+msgid "Contains a [Curve2D] path for [PathFollow2D] nodes to follow."
+msgstr ""
+
+#: doc/classes/Path2D.xml:7
+msgid ""
+"Can have [PathFollow2D] child nodes moving along the [Curve2D]. See "
+"[PathFollow2D] for more information on usage.\n"
+"[b]Note:[/b] The path is considered as relative to the moved nodes (children "
+"of [PathFollow2D]). As such, the curve should usually start with a zero "
+"vector ([code](0, 0)[/code])."
+msgstr ""
+
+#: doc/classes/Path2D.xml:16
+msgid "A [Curve2D] describing the path."
+msgstr ""
+
+#: doc/classes/PathFollow.xml:4
+msgid "Point sampler for a [Path]."
+msgstr ""
+
+#: doc/classes/PathFollow.xml:7
+msgid ""
+"This node takes its parent [Path], and returns the coordinates of a point "
+"within it, given a distance from the first vertex.\n"
+"It is useful for making other nodes follow a path, without coding the "
+"movement pattern. For that, the nodes must be children of this node. The "
+"descendant nodes will then move accordingly when setting an offset in this "
+"node."
+msgstr ""
+
+#: doc/classes/PathFollow.xml:16
+msgid ""
+"If [code]true[/code], the position between two cached points is interpolated "
+"cubically, and linearly otherwise.\n"
+"The points along the [Curve3D] of the [Path] are precomputed before use, for "
+"faster calculations. The point at the requested offset is then calculated "
+"interpolating between two adjacent cached points. This may present a problem "
+"if the curve makes sharp turns, as the cached points may not follow the "
+"curve closely enough.\n"
+"There are two answers to this problem: either increase the number of cached "
+"points and increase memory consumption, or make a cubic interpolation "
+"between two points at the cost of (slightly) slower calculations."
+msgstr ""
+
+#: doc/classes/PathFollow.xml:21 doc/classes/PathFollow2D.xml:21
+msgid "The node's offset along the curve."
+msgstr ""
+
+#: doc/classes/PathFollow.xml:24 doc/classes/PathFollow2D.xml:27
+msgid ""
+"If [code]true[/code], any offset outside the path's length will wrap around, "
+"instead of stopping at the ends. Use it for cyclic paths."
+msgstr ""
+
+#: doc/classes/PathFollow.xml:27
+msgid ""
+"The distance from the first vertex, measured in 3D units along the path. "
+"This sets this node's position to a point within the path."
+msgstr ""
+
+#: doc/classes/PathFollow.xml:30
+msgid ""
+"Allows or forbids rotation on one or more axes, depending on the [enum "
+"RotationMode] constants being used."
+msgstr ""
+
+#: doc/classes/PathFollow.xml:33
+msgid ""
+"The distance from the first vertex, considering 0.0 as the first vertex and "
+"1.0 as the last. This is just another way of expressing the offset within "
+"the path, as the offset supplied is multiplied internally by the path's "
+"length."
+msgstr ""
+
+#: doc/classes/PathFollow.xml:36 doc/classes/PathFollow2D.xml:39
+msgid "The node's offset perpendicular to the curve."
+msgstr ""
+
+#: doc/classes/PathFollow.xml:41
+msgid "Forbids the PathFollow to rotate."
+msgstr ""
+
+#: doc/classes/PathFollow.xml:44
+msgid "Allows the PathFollow to rotate in the Y axis only."
+msgstr ""
+
+#: doc/classes/PathFollow.xml:47
+msgid "Allows the PathFollow to rotate in both the X, and Y axes."
+msgstr ""
+
+#: doc/classes/PathFollow.xml:50
+msgid "Allows the PathFollow to rotate in any axis."
+msgstr ""
+
+#: doc/classes/PathFollow.xml:53
+msgid ""
+"Uses the up vector information in a [Curve3D] to enforce orientation. This "
+"rotation mode requires the [Path]'s [member Curve3D.up_vector_enabled] "
+"property to be set to [code]true[/code]."
+msgstr ""
+
+#: doc/classes/PathFollow2D.xml:4
+msgid "Point sampler for a [Path2D]."
+msgstr ""
+
+#: doc/classes/PathFollow2D.xml:7
+msgid ""
+"This node takes its parent [Path2D], and returns the coordinates of a point "
+"within it, given a distance from the first vertex.\n"
+"It is useful for making other nodes follow a path, without coding the "
+"movement pattern. For that, the nodes must be children of this node. The "
+"descendant nodes will then move accordingly when setting an offset in this "
+"node."
+msgstr ""
+
+#: doc/classes/PathFollow2D.xml:16
+msgid ""
+"If [code]true[/code], the position between two cached points is interpolated "
+"cubically, and linearly otherwise.\n"
+"The points along the [Curve2D] of the [Path2D] are precomputed before use, "
+"for faster calculations. The point at the requested offset is then "
+"calculated interpolating between two adjacent cached points. This may "
+"present a problem if the curve makes sharp turns, as the cached points may "
+"not follow the curve closely enough.\n"
+"There are two answers to this problem: either increase the number of cached "
+"points and increase memory consumption, or make a cubic interpolation "
+"between two points at the cost of (slightly) slower calculations."
+msgstr ""
+
+#: doc/classes/PathFollow2D.xml:24
+msgid ""
+"How far to look ahead of the curve to calculate the tangent if the node is "
+"rotating. E.g. shorter lookaheads will lead to faster rotations."
+msgstr ""
+
+#: doc/classes/PathFollow2D.xml:30
+msgid "The distance along the path in pixels."
+msgstr ""
+
+#: doc/classes/PathFollow2D.xml:33
+msgid ""
+"If [code]true[/code], this node rotates to follow the path, making its "
+"descendants rotate."
+msgstr ""
+
+#: doc/classes/PathFollow2D.xml:36
+msgid ""
+"The distance along the path as a number in the range 0.0 (for the first "
+"vertex) to 1.0 (for the last). This is just another way of expressing the "
+"offset within the path, as the offset supplied is multiplied internally by "
+"the path's length."
+msgstr ""
+
+#: doc/classes/PCKPacker.xml:4
+msgid "Creates packages that can be loaded into a running project."
+msgstr ""
+
+#: doc/classes/PCKPacker.xml:7
+msgid ""
+"The [PCKPacker] is used to create packages that can be loaded into a running "
+"project using [method ProjectSettings.load_resource_pack].\n"
+"[codeblock]\n"
+"var packer = PCKPacker.new()\n"
+"packer.pck_start(\"test.pck\")\n"
+"packer.add_file(\"res://text.txt\", \"text.txt\")\n"
+"packer.flush()\n"
+"[/codeblock]\n"
+"The above [PCKPacker] creates package [code]test.pck[/code], then adds a "
+"file named [code]text.txt[/code] at the root of the package."
+msgstr ""
+
+#: doc/classes/PCKPacker.xml:24
+msgid ""
+"Adds the [code]source_path[/code] file to the current PCK package at the "
+"[code]pck_path[/code] internal path (should start with [code]res://[/code])."
+msgstr ""
+
+#: doc/classes/PCKPacker.xml:31
+msgid ""
+"Writes the files specified using all [method add_file] calls since the last "
+"flush. If [code]verbose[/code] is [code]true[/code], a list of files added "
+"will be printed to the console for easier debugging."
+msgstr ""
+
+#: doc/classes/PCKPacker.xml:39
+msgid ""
+"Creates a new PCK file with the name [code]pck_name[/code]. The [code].pck[/"
+"code] file extension isn't added automatically, so it should be part of "
+"[code]pck_name[/code] (even though it's not required)."
+msgstr ""
+
+#: doc/classes/Performance.xml:4
+msgid "Exposes performance-related data."
+msgstr ""
+
+#: doc/classes/Performance.xml:7
+msgid ""
+"This class provides access to a number of different monitors related to "
+"performance, such as memory usage, draw calls, and FPS. These are the same "
+"as the values displayed in the [b]Monitor[/b] tab in the editor's "
+"[b]Debugger[/b] panel. By using the [method get_monitor] method of this "
+"class, you can access this data from your code.\n"
+"[b]Note:[/b] A few of these monitors are only available in debug mode and "
+"will always return 0 when used in a release build.\n"
+"[b]Note:[/b] Many of these monitors are not updated in real-time, so there "
+"may be a short delay between changes."
+msgstr ""
+
+#: doc/classes/Performance.xml:18
+msgid ""
+"Returns the value of one of the available monitors. You should provide one "
+"of the [enum Monitor] constants as the argument, like this:\n"
+"[codeblock]\n"
+"print(Performance.get_monitor(Performance.TIME_FPS)) # Prints the FPS to the "
+"console\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Performance.xml:27
+msgid "Number of frames per second."
+msgstr ""
+
+#: doc/classes/Performance.xml:30
+msgid "Time it took to complete one frame, in seconds."
+msgstr ""
+
+#: doc/classes/Performance.xml:33
+msgid "Time it took to complete one physics frame, in seconds."
+msgstr ""
+
+#: doc/classes/Performance.xml:36
+msgid ""
+"Static memory currently used, in bytes. Not available in release builds."
+msgstr ""
+
+#: doc/classes/Performance.xml:39
+msgid ""
+"Dynamic memory currently used, in bytes. Not available in release builds."
+msgstr ""
+
+#: doc/classes/Performance.xml:42
+msgid "Available static memory. Not available in release builds."
+msgstr ""
+
+#: doc/classes/Performance.xml:45
+msgid "Available dynamic memory. Not available in release builds."
+msgstr ""
+
+#: doc/classes/Performance.xml:48
+msgid ""
+"Largest amount of memory the message queue buffer has used, in bytes. The "
+"message queue is used for deferred functions calls and notifications."
+msgstr ""
+
+#: doc/classes/Performance.xml:51
+msgid "Number of objects currently instanced (including nodes)."
+msgstr ""
+
+#: doc/classes/Performance.xml:54
+msgid "Number of resources currently used."
+msgstr ""
+
+#: doc/classes/Performance.xml:57
+msgid ""
+"Number of nodes currently instanced in the scene tree. This also includes "
+"the root node."
+msgstr ""
+
+#: doc/classes/Performance.xml:60
+msgid ""
+"Number of orphan nodes, i.e. nodes which are not parented to a node of the "
+"scene tree."
+msgstr ""
+
+#: doc/classes/Performance.xml:63
+msgid "3D objects drawn per frame."
+msgstr ""
+
+#: doc/classes/Performance.xml:66
+msgid "Vertices drawn per frame. 3D only."
+msgstr ""
+
+#: doc/classes/Performance.xml:69
+msgid "Material changes per frame. 3D only."
+msgstr ""
+
+#: doc/classes/Performance.xml:72
+msgid "Shader changes per frame. 3D only."
+msgstr ""
+
+#: doc/classes/Performance.xml:75
+msgid "Render surface changes per frame. 3D only."
+msgstr ""
+
+#: doc/classes/Performance.xml:78
+msgid "Draw calls per frame. 3D only."
+msgstr ""
+
+#: doc/classes/Performance.xml:81
+msgid "Items or joined items drawn per frame."
+msgstr ""
+
+#: doc/classes/Performance.xml:84
+msgid "Draw calls per frame."
+msgstr ""
+
+#: doc/classes/Performance.xml:87 doc/classes/VisualServer.xml:3696
+msgid ""
+"The amount of video memory used, i.e. texture and vertex memory combined."
+msgstr ""
+
+#: doc/classes/Performance.xml:90 doc/classes/VisualServer.xml:3699
+msgid "The amount of texture memory used."
+msgstr ""
+
+#: doc/classes/Performance.xml:93 doc/classes/VisualServer.xml:3702
+msgid "The amount of vertex memory used."
+msgstr ""
+
+#: doc/classes/Performance.xml:96 doc/classes/VisualServer.xml:3693
+msgid ""
+"Unimplemented in the GLES2 and GLES3 rendering backends, always returns 0."
+msgstr ""
+
+#: doc/classes/Performance.xml:99
+msgid "Number of active [RigidBody2D] nodes in the game."
+msgstr ""
+
+#: doc/classes/Performance.xml:102
+msgid "Number of collision pairs in the 2D physics engine."
+msgstr ""
+
+#: doc/classes/Performance.xml:105
+msgid "Number of islands in the 2D physics engine."
+msgstr ""
+
+#: doc/classes/Performance.xml:108
+msgid "Number of active [RigidBody] and [VehicleBody] nodes in the game."
+msgstr ""
+
+#: doc/classes/Performance.xml:111
+msgid "Number of collision pairs in the 3D physics engine."
+msgstr ""
+
+#: doc/classes/Performance.xml:114
+msgid "Number of islands in the 3D physics engine."
+msgstr ""
+
+#: doc/classes/Performance.xml:117
+msgid "Output latency of the [AudioServer]."
+msgstr ""
+
+#: doc/classes/Performance.xml:120
+msgid "Represents the size of the [enum Monitor] enum."
+msgstr ""
+
+#: doc/classes/PHashTranslation.xml:4
+msgid "Optimized translation."
+msgstr ""
+
+#: doc/classes/PHashTranslation.xml:7
+msgid ""
+"Optimized translation. Uses real-time compressed translations, which results "
+"in very small dictionaries."
+msgstr ""
+
+#: doc/classes/PHashTranslation.xml:16
+msgid ""
+"Generates and sets an optimized translation from the given [Translation] "
+"resource."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:4
+msgid "Direct access object to a physics body in the [Physics2DServer]."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:7
+msgid ""
+"Provides direct access to a physics body in the [Physics2DServer], allowing "
+"safe changes to physics properties. This object is passed via the direct "
+"state callback of rigid/character bodies, and is intended for changing the "
+"direct state of that body. See [method RigidBody2D._integrate_forces]."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:11
+#: doc/classes/Physics2DDirectSpaceState.xml:11
+#: doc/classes/PhysicsDirectBodyState.xml:11
+#: doc/classes/PhysicsDirectSpaceState.xml:11 doc/classes/RayCast.xml:14
+#: doc/classes/RayCast2D.xml:14 doc/classes/World.xml:10
+#: doc/classes/World2D.xml:10
+msgid "https://docs.godotengine.org/en/3.4/tutorials/physics/ray-casting.html"
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:18 doc/classes/RigidBody2D.xml:30
+msgid "Adds a constant directional force without affecting rotation."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:26
+#: doc/classes/PhysicsDirectBodyState.xml:27 doc/classes/RigidBody2D.xml:38
+msgid ""
+"Adds a positioned force to the body. Both the force and the offset from the "
+"body origin are in global coordinates."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:33 doc/classes/RigidBody2D.xml:45
+msgid "Adds a constant rotational force."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:40 doc/classes/RigidBody2D.xml:52
+msgid "Applies a directional impulse without affecting rotation."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:48
+msgid ""
+"Applies a positioned impulse to the body. An impulse is time-independent! "
+"Applying an impulse every frame would result in a framerate-dependent force. "
+"For this reason, it should only be used when simulating one-time impacts "
+"(use the \"_force\" functions otherwise). The offset uses the rotation of "
+"the global coordinate system, but is centered at the object's origin."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:55 doc/classes/RigidBody2D.xml:67
+msgid "Applies a rotational impulse to the body."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:62
+#: doc/classes/PhysicsDirectBodyState.xml:64
+msgid "Returns the collider's [RID]."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:69
+#: doc/classes/PhysicsDirectBodyState.xml:71
+msgid "Returns the collider's object id."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:76
+msgid ""
+"Returns the collider object. This depends on how it was created (will return "
+"a scene node if such was used to create it)."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:83
+#: doc/classes/PhysicsDirectBodyState.xml:85
+msgid "Returns the contact position in the collider."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:90
+#: doc/classes/PhysicsDirectBodyState.xml:92
+msgid "Returns the collider's shape index."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:97
+msgid ""
+"Returns the collided shape's metadata. This metadata is different from "
+"[method Object.get_meta], and is set with [method Physics2DServer."
+"shape_set_data]."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:104
+#: doc/classes/PhysicsDirectBodyState.xml:99
+msgid "Returns the linear velocity vector at the collider's contact point."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:110
+msgid ""
+"Returns the number of contacts this body has with other bodies.\n"
+"[b]Note:[/b] By default, this returns 0 unless bodies are configured to "
+"monitor contacts. See [member RigidBody2D.contact_monitor]."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:118
+#: doc/classes/PhysicsDirectBodyState.xml:120
+msgid "Returns the local normal at the contact point."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:125
+#: doc/classes/PhysicsDirectBodyState.xml:127
+msgid "Returns the local position of the contact point."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:132
+#: doc/classes/PhysicsDirectBodyState.xml:134
+msgid "Returns the local shape index of the collision."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:138
+#: doc/classes/PhysicsDirectBodyState.xml:140
+msgid "Returns the current state of the space, useful for queries."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:145
+#: doc/classes/PhysicsDirectBodyState.xml:147
+msgid ""
+"Returns the body's velocity at the given relative position, including both "
+"translation and rotation."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:151
+#: doc/classes/PhysicsDirectBodyState.xml:153
+msgid "Calls the built-in force integration code."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:157
+#: doc/classes/PhysicsDirectBodyState.xml:159 doc/classes/RigidBody2D.xml:101
+msgid "The body's rotational velocity."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:160
+#: doc/classes/PhysicsDirectBodyState.xml:164
+msgid "The inverse of the inertia of the body."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:163
+#: doc/classes/PhysicsDirectBodyState.xml:167
+msgid "The inverse of the mass of the body."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:166
+#: doc/classes/PhysicsDirectBodyState.xml:170 doc/classes/RigidBody2D.xml:146
+msgid "The body's linear velocity."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:169
+#: doc/classes/PhysicsDirectBodyState.xml:175
+msgid "If [code]true[/code], this body is currently sleeping (not active)."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:172
+#: doc/classes/PhysicsDirectBodyState.xml:178
+msgid "The timestep (delta) used for the simulation."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:175
+#: doc/classes/PhysicsDirectBodyState.xml:181
+msgid ""
+"The rate at which the body stops rotating, if there are not any other forces "
+"moving it."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:178
+#: doc/classes/PhysicsDirectBodyState.xml:184
+msgid "The total gravity vector being currently applied to this body."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:181
+#: doc/classes/PhysicsDirectBodyState.xml:187
+msgid ""
+"The rate at which the body stops moving, if there are not any other forces "
+"moving it."
+msgstr ""
+
+#: doc/classes/Physics2DDirectBodyState.xml:184
+#: doc/classes/PhysicsDirectBodyState.xml:190
+msgid "The body's transformation matrix."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:4
+msgid "Direct access object to a space in the [Physics2DServer]."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:7
+msgid ""
+"Direct access object to a space in the [Physics2DServer]. It's used mainly "
+"to do queries against objects and areas residing in a given space."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:18
+msgid ""
+"Checks how far a [Shape2D] can move without colliding. All the parameters "
+"for the query, including the shape and the motion, are supplied through a "
+"[Physics2DShapeQueryParameters] object.\n"
+"Returns an array with the safe and unsafe proportions (between 0 and 1) of "
+"the motion. The safe proportion is the maximum fraction of the motion that "
+"can be made without a collision. The unsafe proportion is the minimum "
+"fraction of the distance that must be moved for a collision. If no collision "
+"is detected a result of [code][1.0, 1.0][/code] will be returned.\n"
+"[b]Note:[/b] Any [Shape2D]s that the shape is already colliding with e.g. "
+"inside of, will be ignored. Use [method collide_shape] to determine the "
+"[Shape2D]s that the shape is already colliding with."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:28
+msgid ""
+"Checks the intersections of a shape, given through a "
+"[Physics2DShapeQueryParameters] object, against the space. The resulting "
+"array contains a list of points where the shape intersects another. Like "
+"with [method intersect_shape], the number of returned results can be limited "
+"to save processing time."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:35
+msgid ""
+"Checks the intersections of a shape, given through a "
+"[Physics2DShapeQueryParameters] object, against the space. If it collides "
+"with more than one shape, the nearest one is selected. If the shape did not "
+"intersect anything, then an empty dictionary is returned instead.\n"
+"[b]Note:[/b] This method does not take into account the [code]motion[/code] "
+"property of the object. The returned object is a dictionary containing the "
+"following fields:\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]linear_velocity[/code]: The colliding object's velocity [Vector2]. If "
+"the object is an [Area2D], the result is [code](0, 0)[/code].\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]normal[/code]: The object's surface normal at the intersection point.\n"
+"[code]point[/code]: The intersection point.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:55
+msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:96
+msgid ""
+"Intersects a ray in a given space. The returned object is a dictionary with "
+"the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]normal[/code]: The object's surface normal at the intersection point.\n"
+"[code]position[/code]: The intersection point.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"If the ray did not intersect anything, then an empty dictionary is returned "
+"instead.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:113
+msgid ""
+"Checks the intersections of a shape, given through a "
+"[Physics2DShapeQueryParameters] object, against the space.\n"
+"[b]Note:[/b] This method does not take into account the [code]motion[/code] "
+"property of the object. The intersected shapes are returned in an array "
+"containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:4
+msgid "Server interface for low-level 2D physics access."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:7
+msgid ""
+"Physics2DServer is the server responsible for all 2D physics. It can create "
+"many kinds of physics objects, but does not insert them on the node tree."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:19 doc/classes/PhysicsServer.xml:19
+msgid ""
+"Adds a shape to the area, along with a transform matrix. Shapes are usually "
+"referenced by their index, so you should track which shape has a given index."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:34 doc/classes/Physics2DServer.xml:304
+#: doc/classes/PhysicsServer.xml:27 doc/classes/PhysicsServer.xml:298
+msgid ""
+"Assigns the area to a descendant of [Object], so it can exist in the node "
+"tree."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:41 doc/classes/PhysicsServer.xml:34
+msgid ""
+"Removes all shapes from an area. It does not delete the shapes, so they can "
+"be reassigned later."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:47
+msgid ""
+"Creates an [Area2D]. After creating an [Area2D] with this method, assign it "
+"to a space using [method area_set_space] to use the created [Area2D] in the "
+"physics world."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:60 doc/classes/Physics2DServer.xml:372
+#: doc/classes/PhysicsServer.xml:47 doc/classes/PhysicsServer.xml:362
+msgid "Gets the instance ID of the object the area is assigned to."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:68
+msgid ""
+"Returns an area parameter value. See [enum AreaParameter] for a list of "
+"available parameters."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:76 doc/classes/PhysicsServer.xml:63
+msgid "Returns the [RID] of the nth shape of an area."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:83 doc/classes/PhysicsServer.xml:70
+msgid "Returns the number of shapes assigned to an area."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:91 doc/classes/PhysicsServer.xml:78
+msgid "Returns the transform matrix of a shape within an area."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:98 doc/classes/PhysicsServer.xml:85
+msgid "Returns the space assigned to the area."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:105 doc/classes/PhysicsServer.xml:92
+msgid "Returns the space override mode for the area."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:112 doc/classes/PhysicsServer.xml:99
+msgid "Returns the transform matrix for an area."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:120 doc/classes/PhysicsServer.xml:114
+msgid ""
+"Removes a shape from an area. It does not delete the shape, so it can be "
+"reassigned later."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:136 doc/classes/PhysicsServer.xml:130
+msgid "Assigns the area to one or many physics layers."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:144 doc/classes/PhysicsServer.xml:138
+msgid "Sets which physics layers the area will monitor."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:153 doc/classes/PhysicsServer.xml:147
+msgid ""
+"Sets the function to call when any body/area enters or exits the area. This "
+"callback will be called for any object interacting with the area, and takes "
+"five parameters:\n"
+"1: [constant AREA_BODY_ADDED] or [constant AREA_BODY_REMOVED], depending on "
+"whether the object entered or exited the area.\n"
+"2: [RID] of the object that entered/exited the area.\n"
+"3: Instance ID of the object that entered/exited the area.\n"
+"4: The shape index of the object that entered/exited the area.\n"
+"5: The shape index of the area where the object entered/exited."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:174
+msgid ""
+"Sets the value for an area parameter. See [enum AreaParameter] for a list of "
+"available parameters."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:183 doc/classes/PhysicsServer.xml:185
+msgid ""
+"Substitutes a given area shape by another. The old shape is selected by its "
+"index, the new one by its [RID]."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:192
+msgid "Disables a given shape in an area."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:201 doc/classes/PhysicsServer.xml:202
+msgid "Sets the transform matrix for an area shape."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:209 doc/classes/PhysicsServer.xml:210
+msgid "Assigns a space to the area."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:217
+msgid ""
+"Sets the space override mode for the area. See [enum AreaSpaceOverrideMode] "
+"for a list of available modes."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:225 doc/classes/PhysicsServer.xml:226
+msgid "Sets the transform matrix for an area."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:240 doc/classes/PhysicsServer.xml:241
+msgid "Adds a body to the list of bodies exempt from collisions."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:249
+msgid ""
+"Adds a positioned force to the applied force and torque. As with [method "
+"body_apply_impulse], both the force and the offset from the body origin are "
+"in global coordinates. A force differs from an impulse in that, while the "
+"two are forces, the impulse clears itself after being applied."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:259 doc/classes/PhysicsServer.xml:259
+msgid ""
+"Adds a shape to the body, along with a transform matrix. Shapes are usually "
+"referenced by their index, so you should track which shape has a given index."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:282
+msgid ""
+"Adds a positioned impulse to the applied force and torque. Both the force "
+"and the offset from the body origin are in global coordinates."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:311 doc/classes/PhysicsServer.xml:305
+msgid "Removes all shapes from a body."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:317
+msgid "Creates a physics body."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:330 doc/classes/PhysicsServer.xml:320
+msgid "Returns the physics layer or layers a body belongs to."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:337
+msgid "Returns the physics layer or layers a body can collide with."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:344
+msgid "Returns the continuous collision detection mode."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:351
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
+msgid ""
+"Returns the maximum contacts that can be reported. See [method "
+"body_set_max_contacts_reported]."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:365 doc/classes/PhysicsServer.xml:355
+msgid "Returns the body mode."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:380
+msgid ""
+"Returns the value of a body parameter. See [enum BodyParameter] for a list "
+"of available parameters."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:388 doc/classes/PhysicsServer.xml:378
+msgid "Returns the [RID] of the nth shape of a body."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:395 doc/classes/PhysicsServer.xml:385
+msgid "Returns the number of shapes assigned to a body."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:403
+msgid "Returns the metadata of a shape of a body."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:411 doc/classes/PhysicsServer.xml:393
+msgid "Returns the transform matrix of a body shape."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:418 doc/classes/PhysicsServer.xml:400
+msgid "Returns the [RID] of the space assigned to a body."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:426 doc/classes/PhysicsServer.xml:408
+msgid "Returns a body state."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:433 doc/classes/PhysicsServer.xml:429
+msgid ""
+"Returns whether a body uses a callback function to calculate its own physics "
+"(see [method body_set_force_integration_callback])."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:441
+msgid "Removes a body from the list of bodies exempt from collisions."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:449 doc/classes/PhysicsServer.xml:453
+msgid ""
+"Removes a shape from a body. The shape is not deleted, so it can be reused "
+"afterwards."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:457 doc/classes/PhysicsServer.xml:469
+#: doc/classes/RigidBody.xml:105
+msgid ""
+"Sets an axis velocity. The velocity in the given vector axis will be set as "
+"the given vector length. This is useful for jumping behavior."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:465 doc/classes/PhysicsServer.xml:477
+msgid "Sets the physics layer or layers a body belongs to."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:473 doc/classes/PhysicsServer.xml:485
+msgid "Sets the physics layer or layers a body can collide with."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:481
+msgid ""
+"Sets the continuous collision detection mode using one of the [enum CCDMode] "
+"constants.\n"
+"Continuous collision detection tries to predict where a moving body will "
+"collide, instead of moving it and correcting its movement if it collided."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:492 doc/classes/PhysicsServer.xml:504
+msgid ""
+"Sets the function used to calculate physics for an object, if that object "
+"allows it (see [method body_set_omit_force_integration])."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:500 doc/classes/PhysicsServer.xml:519
+msgid ""
+"Sets the maximum contacts to report. Bodies can keep a log of the contacts "
+"with other bodies, this is enabled by setting the maximum amount of contacts "
+"reported to a number greater than 0."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:508
+msgid "Sets the body mode using one of the [enum BodyMode] constants."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:516 doc/classes/PhysicsServer.xml:535
+msgid ""
+"Sets whether a body uses a callback function to calculate its own physics "
+"(see [method body_set_force_integration_callback])."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:525
+msgid ""
+"Sets a body parameter. See [enum BodyParameter] for a list of available "
+"parameters."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:534 doc/classes/PhysicsServer.xml:561
+msgid ""
+"Substitutes a given body shape by another. The old shape is selected by its "
+"index, the new one by its [RID]."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:544
+msgid ""
+"Enables one way collision on body if [code]enable[/code] is [code]true[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:553
+msgid "Disables shape in body if [code]disable[/code] is [code]true[/code]."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:562
+msgid ""
+"Sets metadata of a shape within a body. This metadata is different from "
+"[method Object.set_meta], and can be retrieved on shape queries."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:571 doc/classes/PhysicsServer.xml:578
+msgid "Sets the transform matrix for a body shape."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:579 doc/classes/PhysicsServer.xml:586
+msgid "Assigns a space to the body (see [method space_create])."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:588
+msgid ""
+"Sets a body state using one of the [enum BodyState] constants.\n"
+"Note that the method doesn't take effect immediately. The state will change "
+"on the next physics frame."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:603
+msgid ""
+"Returns [code]true[/code] if a collision would result from moving in the "
+"given direction from a given point in space. Margin increases the size of "
+"the shapes involved in the collision detection. [Physics2DTestMotionResult] "
+"can be passed to return additional information in."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:633
+msgid ""
+"Creates a damped spring joint between two bodies. If not specified, the "
+"second body is assumed to be the joint itself."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:641
+msgid "Returns the value of a damped spring joint parameter."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:650
+msgid ""
+"Sets a damped spring joint parameter. See [enum DampedStringParam] for a "
+"list of available parameters."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:657
+msgid ""
+"Destroys any of the objects created by Physics2DServer. If the [RID] passed "
+"is not one of the objects that can be created by Physics2DServer, an error "
+"will be sent to the console."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:664
+msgid ""
+"Returns information about the current state of the 2D physics engine. See "
+"[enum ProcessInfo] for a list of available states."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:675
+msgid ""
+"Creates a groove joint between two bodies. If not specified, the bodies are "
+"assumed to be the joint itself."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:683
+msgid "Returns the value of a joint parameter."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:690
+msgid "Returns a joint's type (see [enum JointType])."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:699
+msgid ""
+"Sets a joint parameter. See [enum JointParam] for a list of available "
+"parameters."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:713
+msgid ""
+"Creates a pin joint between two bodies. If not specified, the second body is "
+"assumed to be the joint itself."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:735
+msgid "Activates or deactivates the 2D physics engine."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:742
+msgid ""
+"Sets the amount of iterations for calculating velocities of colliding "
+"bodies. The greater the amount of iterations, the more accurate the "
+"collisions will be. However, a greater amount of iterations requires more "
+"CPU power, which can decrease performance. The default value is [code]8[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:749 doc/classes/PhysicsServer.xml:859
+msgid "Returns the shape data."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:756
+msgid "Returns a shape's type (see [enum ShapeType])."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:764 doc/classes/PhysicsServer.xml:874
+msgid ""
+"Sets the shape data that defines its shape and size. The data to be passed "
+"depends on the kind of shape created [method shape_get_type]."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:770 doc/classes/PhysicsServer.xml:897
+msgid ""
+"Creates a space. A space is a collection of parameters for the physics "
+"engine that can be assigned to an area or a body. It can be assigned to an "
+"area with [method area_set_space], or to a body with [method body_set_space]."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:777
+msgid ""
+"Returns the state of a space, a [Physics2DDirectSpaceState]. This object can "
+"be used to make collision/intersection queries."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:785 doc/classes/PhysicsServer.xml:912
+msgid "Returns the value of a space parameter."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:792 doc/classes/PhysicsServer.xml:919
+msgid "Returns whether the space is active."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:800 doc/classes/PhysicsServer.xml:927
+msgid ""
+"Marks a space as active. It will not have an effect, unless it is assigned "
+"to an area or body."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:809
+msgid ""
+"Sets the value for a space parameter. See [enum SpaceParameter] for a list "
+"of available parameters."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:815 doc/classes/PhysicsServer.xml:1278
+msgid ""
+"Constant to set/get the maximum distance a pair of bodies has to move before "
+"their collision status has to be recalculated."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:818 doc/classes/PhysicsServer.xml:1281
+msgid ""
+"Constant to set/get the maximum distance a shape can be from another before "
+"they are considered separated."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:821 doc/classes/PhysicsServer.xml:1284
+msgid ""
+"Constant to set/get the maximum distance a shape can penetrate another shape "
+"before it is considered a collision."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:824 doc/classes/PhysicsServer.xml:1287
+msgid ""
+"Constant to set/get the threshold linear velocity of activity. A body marked "
+"as potentially inactive for both linear and angular velocity will be put to "
+"sleep after the time given."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:827 doc/classes/PhysicsServer.xml:1290
+msgid ""
+"Constant to set/get the threshold angular velocity of activity. A body "
+"marked as potentially inactive for both linear and angular velocity will be "
+"put to sleep after the time given."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:830 doc/classes/PhysicsServer.xml:1293
+msgid ""
+"Constant to set/get the maximum time of activity. A body marked as "
+"potentially inactive for both linear and angular velocity will be put to "
+"sleep after this time."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:833 doc/classes/PhysicsServer.xml:1298
+msgid ""
+"Constant to set/get the default solver bias for all physics constraints. A "
+"solver bias is a factor controlling how much two objects \"rebound\", after "
+"violating a constraint, to avoid leaving them in that state because of "
+"numerical imprecision."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:836
+msgid ""
+"This is the constant for creating line shapes. A line shape is an infinite "
+"line with an origin point, and a normal. Thus, it can be used for front/"
+"behind checks."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:841
+msgid ""
+"This is the constant for creating segment shapes. A segment shape is a line "
+"from a point A to a point B. It can be checked for intersections."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:844
+msgid ""
+"This is the constant for creating circle shapes. A circle shape only has a "
+"radius. It can be used for intersections and inside/outside checks."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:847
+msgid ""
+"This is the constant for creating rectangle shapes. A rectangle shape is "
+"defined by a width and a height. It can be used for intersections and inside/"
+"outside checks."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:850
+msgid ""
+"This is the constant for creating capsule shapes. A capsule shape is defined "
+"by a radius and a length. It can be used for intersections and inside/"
+"outside checks."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:853
+msgid ""
+"This is the constant for creating convex polygon shapes. A polygon is "
+"defined by a list of points. It can be used for intersections and inside/"
+"outside checks. Unlike the [member CollisionPolygon2D.polygon] property, "
+"polygons modified with [method shape_set_data] do not verify that the points "
+"supplied form is a convex polygon."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:856
+msgid ""
+"This is the constant for creating concave polygon shapes. A polygon is "
+"defined by a list of points. It can be used for intersections checks, but "
+"not for inside/outside checks."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:859 doc/classes/PhysicsServer.xml:1173
+msgid ""
+"This constant is used internally by the engine. Any attempt to create this "
+"kind of shape results in an error."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:862 doc/classes/PhysicsServer.xml:1176
+msgid "Constant to set/get gravity strength in an area."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:865 doc/classes/PhysicsServer.xml:1179
+msgid "Constant to set/get gravity vector/center in an area."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:868 doc/classes/PhysicsServer.xml:1182
+msgid ""
+"Constant to set/get whether the gravity vector of an area is a direction, or "
+"a center point."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:871 doc/classes/PhysicsServer.xml:1185
+msgid ""
+"Constant to set/get the falloff factor for point gravity of an area. The "
+"greater this value is, the faster the strength of gravity decreases with the "
+"square of distance."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:874 doc/classes/PhysicsServer.xml:1188
+msgid ""
+"This constant was used to set/get the falloff factor for point gravity. It "
+"has been superseded by [constant AREA_PARAM_GRAVITY_DISTANCE_SCALE]."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:877 doc/classes/PhysicsServer.xml:1191
+msgid "Constant to set/get the linear dampening factor of an area."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:880 doc/classes/PhysicsServer.xml:1194
+msgid "Constant to set/get the angular dampening factor of an area."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:883 doc/classes/PhysicsServer.xml:1197
+msgid "Constant to set/get the priority (order of processing) of an area."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:886 doc/classes/PhysicsServer.xml:1200
+msgid ""
+"This area does not affect gravity/damp. These are generally areas that exist "
+"only to detect collisions, and objects entering or exiting them."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:889 doc/classes/PhysicsServer.xml:1203
+msgid ""
+"This area adds its gravity/damp values to whatever has been calculated so "
+"far. This way, many overlapping areas can combine their physics to make "
+"interesting effects."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:892 doc/classes/PhysicsServer.xml:1206
+msgid ""
+"This area adds its gravity/damp values to whatever has been calculated so "
+"far. Then stops taking into account the rest of the areas, even the default "
+"one."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:895 doc/classes/PhysicsServer.xml:1209
+msgid ""
+"This area replaces any gravity/damp, even the default one, and stops taking "
+"into account the rest of the areas."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:898 doc/classes/PhysicsServer.xml:1212
+msgid ""
+"This area replaces any gravity/damp calculated so far, but keeps calculating "
+"the rest of the areas, down to the default one."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:901 doc/classes/PhysicsServer.xml:1215
+msgid "Constant for static bodies."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:904 doc/classes/PhysicsServer.xml:1218
+msgid "Constant for kinematic bodies."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:907 doc/classes/PhysicsServer.xml:1221
+msgid "Constant for rigid bodies."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:910 doc/classes/PhysicsServer.xml:1224
+msgid ""
+"Constant for rigid bodies in character mode. In this mode, a body can not "
+"rotate, and only its linear velocity is affected by physics."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:913 doc/classes/PhysicsServer.xml:1227
+msgid "Constant to set/get a body's bounce factor."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:916 doc/classes/PhysicsServer.xml:1230
+msgid "Constant to set/get a body's friction."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:919 doc/classes/PhysicsServer.xml:1233
+msgid "Constant to set/get a body's mass."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:922
+msgid "Constant to set/get a body's inertia."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:925 doc/classes/PhysicsServer.xml:1236
+msgid "Constant to set/get a body's gravity multiplier."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:928 doc/classes/PhysicsServer.xml:1239
+msgid "Constant to set/get a body's linear dampening factor."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:931 doc/classes/PhysicsServer.xml:1242
+msgid "Constant to set/get a body's angular dampening factor."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:934 doc/classes/PhysicsServer.xml:1245
+msgid "Represents the size of the [enum BodyParameter] enum."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:937 doc/classes/PhysicsServer.xml:1248
+msgid "Constant to set/get the current transform matrix of the body."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:940 doc/classes/PhysicsServer.xml:1251
+msgid "Constant to set/get the current linear velocity of the body."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:943 doc/classes/PhysicsServer.xml:1254
+msgid "Constant to set/get the current angular velocity of the body."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:946 doc/classes/PhysicsServer.xml:1257
+msgid "Constant to sleep/wake up a body, or to get whether it is sleeping."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:949 doc/classes/PhysicsServer.xml:1260
+msgid "Constant to set/get whether the body can sleep."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:952
+msgid "Constant to create pin joints."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:955
+msgid "Constant to create groove joints."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:958
+msgid "Constant to create damped spring joints."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:967
+msgid ""
+"Sets the resting length of the spring joint. The joint will always try to go "
+"to back this length when pulled apart."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:970
+msgid ""
+"Sets the stiffness of the spring joint. The joint applies a force equal to "
+"the stiffness times the distance from its resting length."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:973
+msgid ""
+"Sets the damping ratio of the spring joint. A value of 0 indicates an "
+"undamped spring, while 1 causes the system to reach equilibrium as fast as "
+"possible (critical damping)."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:976
+msgid ""
+"Disables continuous collision detection. This is the fastest way to detect "
+"body collisions, but can miss small, fast-moving objects."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:979
+msgid ""
+"Enables continuous collision detection by raycasting. It is faster than "
+"shapecasting, but less precise."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:982
+msgid ""
+"Enables continuous collision detection by shapecasting. It is the slowest "
+"CCD method, and the most precise."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:985 doc/classes/PhysicsServer.xml:1263
+msgid ""
+"The value of the first parameter and area callback function receives, when "
+"an object enters one of its shapes."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:988 doc/classes/PhysicsServer.xml:1266
+msgid ""
+"The value of the first parameter and area callback function receives, when "
+"an object exits one of its shapes."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:991 doc/classes/PhysicsServer.xml:1269
+msgid "Constant to get the number of objects that are not sleeping."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:994 doc/classes/PhysicsServer.xml:1272
+msgid "Constant to get the number of possible collisions."
+msgstr ""
+
+#: doc/classes/Physics2DServer.xml:997 doc/classes/PhysicsServer.xml:1275
+msgid ""
+"Constant to get the number of space regions where a collision could occur."
+msgstr ""
+
+#: doc/classes/Physics2DShapeQueryParameters.xml:4
+msgid "Parameters to be sent to a 2D shape physics query."
+msgstr ""
+
+#: doc/classes/Physics2DShapeQueryParameters.xml:7
+msgid ""
+"This class contains the shape and other parameters for 2D intersection/"
+"collision queries."
+msgstr ""
+
+#: doc/classes/Physics2DShapeQueryParameters.xml:16
+msgid ""
+"Sets the [Shape2D] that will be used for collision/intersection queries."
+msgstr ""
+
+#: doc/classes/Physics2DShapeQueryParameters.xml:22
+msgid "If [code]true[/code], the query will take [Area2D]s into account."
+msgstr ""
+
+#: doc/classes/Physics2DShapeQueryParameters.xml:25
+msgid ""
+"If [code]true[/code], the query will take [PhysicsBody2D]s into account."
+msgstr ""
+
+#: doc/classes/Physics2DShapeQueryParameters.xml:28
+#: doc/classes/PhysicsShapeQueryParameters.xml:28
+msgid ""
+"The physics layer(s) the query will take into account (as a bitmask). See "
+"[url=https://docs.godotengine.org/en/3.4/tutorials/physics/"
+"physics_introduction.html#collision-layers-and-masks]Collision layers and "
+"masks[/url] in the documentation for more information."
+msgstr ""
+
+#: doc/classes/Physics2DShapeQueryParameters.xml:31
+#: doc/classes/PhysicsShapeQueryParameters.xml:31
+msgid ""
+"The list of objects or object [RID]s that will be excluded from collisions."
+msgstr ""
+
+#: doc/classes/Physics2DShapeQueryParameters.xml:34
+#: doc/classes/PhysicsShapeQueryParameters.xml:34
+msgid "The collision margin for the shape."
+msgstr ""
+
+#: doc/classes/Physics2DShapeQueryParameters.xml:37
+msgid "The motion of the shape being queried for."
+msgstr ""
+
+#: doc/classes/Physics2DShapeQueryParameters.xml:40
+#: doc/classes/PhysicsShapeQueryParameters.xml:37
+msgid "The queried shape's [RID]. See also [method set_shape]."
+msgstr ""
+
+#: doc/classes/Physics2DShapeQueryParameters.xml:43
+#: doc/classes/PhysicsShapeQueryParameters.xml:40
+msgid "The queried shape's transform matrix."
+msgstr ""
+
+#: doc/classes/PhysicsBody.xml:4
+msgid "Base class for all objects affected by physics in 3D space."
+msgstr ""
+
+#: doc/classes/PhysicsBody.xml:7
+msgid ""
+"PhysicsBody is an abstract base class for implementing a physics body. All "
+"*Body types inherit from it."
+msgstr ""
+
+#: doc/classes/PhysicsBody.xml:17 doc/classes/PhysicsBody2D.xml:17
+#: doc/classes/SoftBody.xml:17
+msgid "Adds a body to the list of bodies that this body can't collide with."
+msgstr ""
+
+#: doc/classes/PhysicsBody.xml:23 doc/classes/PhysicsBody2D.xml:23
+#: doc/classes/SoftBody.xml:23
+msgid ""
+"Returns an array of nodes that were added as collision exceptions for this "
+"body."
+msgstr ""
+
+#: doc/classes/PhysicsBody.xml:30 doc/classes/PhysicsBody2D.xml:30
+#: doc/classes/SoftBody.xml:58
+msgid ""
+"Removes a body from the list of bodies that this body can't collide with."
+msgstr ""
+
+#: doc/classes/PhysicsBody2D.xml:4
+msgid "Base class for all objects affected by physics in 2D space."
+msgstr ""
+
+#: doc/classes/PhysicsBody2D.xml:7
+msgid ""
+"PhysicsBody2D is an abstract base class for implementing a physics body. All "
+"*Body2D types inherit from it."
+msgstr ""
+
+#: doc/classes/PhysicsBody2D.xml:37
+msgid ""
+"Both collision_layer and collision_mask. Returns collision_layer when "
+"accessed. Updates collision_layer and collision_mask when modified."
+msgstr ""
+
+#: doc/classes/PhysicsDirectBodyState.xml:4
+msgid "Direct access object to a physics body in the [PhysicsServer]."
+msgstr ""
+
+#: doc/classes/PhysicsDirectBodyState.xml:7
+msgid ""
+"Provides direct access to a physics body in the [PhysicsServer], allowing "
+"safe changes to physics properties. This object is passed via the direct "
+"state callback of rigid/character bodies, and is intended for changing the "
+"direct state of that body. See [method RigidBody._integrate_forces]."
+msgstr ""
+
+#: doc/classes/PhysicsDirectBodyState.xml:18
+msgid ""
+"Adds a constant directional force without affecting rotation.\n"
+"This is equivalent to [code]add_force(force, Vector3(0,0,0))[/code]."
+msgstr ""
+
+#: doc/classes/PhysicsDirectBodyState.xml:34
+msgid "Adds a constant rotational force without affecting position."
+msgstr ""
+
+#: doc/classes/PhysicsDirectBodyState.xml:41
+msgid ""
+"Applies a single directional impulse without affecting rotation.\n"
+"This is equivalent to [code]apply_impulse(Vector3(0, 0, 0), impulse)[/code]."
+msgstr ""
+
+#: doc/classes/PhysicsDirectBodyState.xml:50
+msgid ""
+"Applies a positioned impulse to the body. An impulse is time-independent! "
+"Applying an impulse every frame would result in a framerate-dependent force. "
+"For this reason it should only be used when simulating one-time impacts. The "
+"position uses the rotation of the global coordinate system, but is centered "
+"at the object's origin."
+msgstr ""
+
+#: doc/classes/PhysicsDirectBodyState.xml:57
+msgid ""
+"Apply a torque impulse (which will be affected by the body mass and shape). "
+"This will rotate the body around the vector [code]j[/code] passed as "
+"parameter."
+msgstr ""
+
+#: doc/classes/PhysicsDirectBodyState.xml:78
+msgid "Returns the collider object."
+msgstr ""
+
+#: doc/classes/PhysicsDirectBodyState.xml:105
+msgid ""
+"Returns the number of contacts this body has with other bodies.\n"
+"[b]Note:[/b] By default, this returns 0 unless bodies are configured to "
+"monitor contacts. See [member RigidBody.contact_monitor]."
+msgstr ""
+
+#: doc/classes/PhysicsDirectBodyState.xml:113
+msgid "Impulse created by the contact. Only implemented for Bullet physics."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:4
+msgid "Direct access object to a space in the [PhysicsServer]."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:7
+msgid ""
+"Direct access object to a space in the [PhysicsServer]. It's used mainly to "
+"do queries against objects and areas residing in a given space."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:19
+msgid ""
+"Checks how far a [Shape] can move without colliding. All the parameters for "
+"the query, including the shape, are supplied through a "
+"[PhysicsShapeQueryParameters] object.\n"
+"Returns an array with the safe and unsafe proportions (between 0 and 1) of "
+"the motion. The safe proportion is the maximum fraction of the motion that "
+"can be made without a collision. The unsafe proportion is the minimum "
+"fraction of the distance that must be moved for a collision. If no collision "
+"is detected a result of [code][1.0, 1.0][/code] will be returned.\n"
+"[b]Note:[/b] Any [Shape]s that the shape is already colliding with e.g. "
+"inside of, will be ignored. Use [method collide_shape] to determine the "
+"[Shape]s that the shape is already colliding with."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:29
+msgid ""
+"Checks the intersections of a shape, given through a "
+"[PhysicsShapeQueryParameters] object, against the space. The resulting array "
+"contains a list of points where the shape intersects another. Like with "
+"[method intersect_shape], the number of returned results can be limited to "
+"save processing time."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:36
+msgid ""
+"Checks the intersections of a shape, given through a "
+"[PhysicsShapeQueryParameters] object, against the space. If it collides with "
+"more than one shape, the nearest one is selected. The returned object is a "
+"dictionary containing the following fields:\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]linear_velocity[/code]: The colliding object's velocity [Vector3]. If "
+"the object is an [Area], the result is [code](0, 0, 0)[/code].\n"
+"[code]normal[/code]: The object's surface normal at the intersection point.\n"
+"[code]point[/code]: The intersection point.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"If the shape did not intersect anything, then an empty dictionary is "
+"returned instead."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:55
+msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
+"Intersects a ray in a given space. The returned object is a dictionary with "
+"the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]normal[/code]: The object's surface normal at the intersection point.\n"
+"[code]position[/code]: The intersection point.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"If the ray did not intersect anything, then an empty dictionary is returned "
+"instead.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:89
+msgid ""
+"Checks the intersections of a shape, given through a "
+"[PhysicsShapeQueryParameters] object, against the space. The intersected "
+"shapes are returned in an array containing dictionaries with the following "
+"fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time."
+msgstr ""
+
+#: doc/classes/PhysicsMaterial.xml:4
+msgid "A material for physics properties."
+msgstr ""
+
+#: doc/classes/PhysicsMaterial.xml:7
+msgid ""
+"Provides a means of modifying the collision properties of a [PhysicsBody]."
+msgstr ""
+
+#: doc/classes/PhysicsMaterial.xml:15
+msgid ""
+"If [code]true[/code], subtracts the bounciness from the colliding object's "
+"bounciness instead of adding it."
+msgstr ""
+
+#: doc/classes/PhysicsMaterial.xml:18
+msgid ""
+"The body's bounciness. Values range from [code]0[/code] (no bounce) to "
+"[code]1[/code] (full bounciness)."
+msgstr ""
+
+#: doc/classes/PhysicsMaterial.xml:21
+msgid ""
+"The body's friction. Values range from [code]0[/code] (frictionless) to "
+"[code]1[/code] (maximum friction)."
+msgstr ""
+
+#: doc/classes/PhysicsMaterial.xml:24
+msgid ""
+"If [code]true[/code], the physics engine will use the friction of the object "
+"marked as \"rough\" when two objects collide. If [code]false[/code], the "
+"physics engine will use the lowest friction of all colliding objects "
+"instead. If [code]true[/code] for both colliding objects, the physics engine "
+"will use the highest friction."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:4
+msgid "Server interface for low-level physics access."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:7
+msgid ""
+"PhysicsServer is the server responsible for all 3D physics. It can create "
+"many kinds of physics objects, but does not insert them on the node tree."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:40
+msgid "Creates an [Area]."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:55
+msgid ""
+"Returns an area parameter value. A list of available parameters is on the "
+"[enum AreaParameter] constants."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:106
+msgid "If [code]true[/code], area collides with rays."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:168
+msgid ""
+"Sets the value for an area parameter. A list of available parameters is on "
+"the [enum AreaParameter] constants."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:176
+msgid "Sets object pickable with rays."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:218
+msgid ""
+"Sets the space override mode for the area. The modes are described in the "
+"[enum AreaSpaceOverrideMode] constants."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:282
+msgid ""
+"Gives the body a push at a [code]position[/code] in the direction of the "
+"[code]impulse[/code]."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:290
+msgid "Gives the body a push to rotate it."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:313
+msgid ""
+"Creates a physics body. The first parameter can be any value from [enum "
+"BodyMode] constants, for the type of body created. Additionally, the body "
+"can be created in sleeping state to save processing time."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:327
+msgid ""
+"Returns the physics layer or layers a body can collide with.\n"
+"-"
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:335
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:370
+msgid ""
+"Returns the value of a body parameter. A list of available parameters is on "
+"the [enum BodyParameter] constants."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:422
+msgid ""
+"If [code]true[/code], the continuous collision detection mode is enabled."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:436
+msgid "If [code]true[/code], the body can be detected by rays."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:444
+msgid ""
+"Removes a body from the list of bodies exempt from collisions.\n"
+"Continuous collision detection tries to predict where a moving body will "
+"collide, instead of moving it and correcting its movement if it collided."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:493
+msgid ""
+"If [code]true[/code], the continuous collision detection mode is enabled.\n"
+"Continuous collision detection tries to predict where a moving body will "
+"collide, instead of moving it and correcting its movement if it collided."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:527
+msgid "Sets the body mode, from one of the [enum BodyMode] constants."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:544
+msgid ""
+"Sets a body parameter. A list of available parameters is on the [enum "
+"BodyParameter] constants."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:552
+msgid "Sets the body pickable with rays if [code]enabled[/code] is set."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:595
+msgid "Sets a body state (see [enum BodyState] constants)."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:608
+msgid ""
+"Returns [code]true[/code] if a collision would result from moving in the "
+"given direction from a given point in space. [PhysicsTestMotionResult] can "
+"be passed to return additional information in."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:616
+msgid ""
+"Gets a cone_twist_joint parameter (see [enum ConeTwistJointParam] constants)."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:625
+msgid ""
+"Sets a cone_twist_joint parameter (see [enum ConeTwistJointParam] constants)."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:632
+msgid ""
+"Destroys any of the objects created by PhysicsServer. If the [RID] passed is "
+"not one of the objects that can be created by PhysicsServer, an error will "
+"be sent to the console."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:641
+msgid ""
+"Gets a generic_6_DOF_joint flag (see [enum G6DOFJointAxisFlag] constants)."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:650
+msgid ""
+"Gets a generic_6_DOF_joint parameter (see [enum G6DOFJointAxisParam] "
+"constants)."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:660
+msgid ""
+"Sets a generic_6_DOF_joint flag (see [enum G6DOFJointAxisFlag] constants)."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:670
+msgid ""
+"Sets a generic_6_DOF_joint parameter (see [enum G6DOFJointAxisParam] "
+"constants)."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:677
+msgid "Returns an Info defined by the [enum ProcessInfo] input given."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:685
+msgid "Gets a hinge_joint flag (see [enum HingeJointFlag] constants)."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:693
+msgid "Gets a hinge_joint parameter (see [enum HingeJointParam])."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:702
+msgid "Sets a hinge_joint flag (see [enum HingeJointFlag] constants)."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:711
+msgid "Sets a hinge_joint parameter (see [enum HingeJointParam] constants)."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:721
+msgid "Creates a [ConeTwistJoint]."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:731
+msgid "Creates a [Generic6DOFJoint]."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:741
+msgid "Creates a [HingeJoint]."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:751
+msgid "Creates a [PinJoint]."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:761
+msgid "Creates a [SliderJoint]."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:768
+msgid "Gets the priority value of the Joint."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:775
+msgid "Returns the type of the Joint."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:783
+msgid "Sets the priority value of the Joint."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:790
+msgid ""
+"Returns position of the joint in the local space of body a of the joint."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:797
+msgid ""
+"Returns position of the joint in the local space of body b of the joint."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:805
+msgid "Gets a pin_joint parameter (see [enum PinJointParam] constants)."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:813
+msgid "Sets position of the joint in the local space of body a of the joint."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:821
+msgid "Sets position of the joint in the local space of body b of the joint."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:830
+msgid "Sets a pin_joint parameter (see [enum PinJointParam] constants)."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:837
+msgid "Activates or deactivates the 3D physics engine."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:844
+msgid ""
+"Sets the amount of iterations for calculating velocities of colliding "
+"bodies. The greater the amount of iterations, the more accurate the "
+"collisions will be. However, a greater amount of iterations requires more "
+"CPU power, which can decrease performance. The default value is [code]8[/"
+"code].\n"
+"[b]Note:[/b] Only has an effect when using the GodotPhysics engine, not the "
+"default Bullet physics engine."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:852
+msgid ""
+"Creates a shape of a type from [enum ShapeType]. Does not assign it to a "
+"body or an area. To do so, you must use [method area_set_shape] or [method "
+"body_set_shape]."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:866
+msgid "Returns the type of shape (see [enum ShapeType] constants)."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:882 doc/classes/PhysicsServer.xml:891
+msgid "Gets a slider_joint parameter (see [enum SliderJointParam] constants)."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:904
+msgid ""
+"Returns the state of a space, a [PhysicsDirectSpaceState]. This object can "
+"be used to make collision/intersection queries."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:936
+msgid ""
+"Sets the value for a space parameter. A list of available parameters is on "
+"the [enum SpaceParameter] constants."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:942
+msgid "The [Joint] is a [PinJoint]."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:945
+msgid "The [Joint] is a [HingeJoint]."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:948
+msgid "The [Joint] is a [SliderJoint]."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:951
+msgid "The [Joint] is a [ConeTwistJoint]."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:954
+msgid "The [Joint] is a [Generic6DOFJoint]."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:957
+msgid ""
+"The strength with which the pinned objects try to stay in positional "
+"relation to each other.\n"
+"The higher, the stronger."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:961
+msgid ""
+"The strength with which the pinned objects try to stay in velocity relation "
+"to each other.\n"
+"The higher, the stronger."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:965
+msgid ""
+"If above 0, this value is the maximum value for an impulse that this Joint "
+"puts on its ends."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:971
+msgid "The maximum rotation across the Hinge."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:974
+msgid "The minimum rotation across the Hinge."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:991
+msgid "If [code]true[/code], the Hinge has a maximum and a minimum rotation."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:994
+msgid "If [code]true[/code], a motor turns the Hinge."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:997 doc/classes/SliderJoint.xml:76
+#: doc/classes/SliderJoint.xml:99
+msgid ""
+"The maximum difference between the pivot points on their X axis before "
+"damping happens."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1000 doc/classes/SliderJoint.xml:67
+#: doc/classes/SliderJoint.xml:102
+msgid ""
+"The minimum difference between the pivot points on their X axis before "
+"damping happens."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1003 doc/classes/SliderJoint.xml:73
+#: doc/classes/SliderJoint.xml:105
+msgid ""
+"A factor applied to the movement across the slider axis once the limits get "
+"surpassed. The lower, the slower the movement."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1006 doc/classes/SliderJoint.xml:108
+msgid ""
+"The amount of restitution once the limits are surpassed. The lower, the more "
+"velocityenergy gets lost."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1009 doc/classes/SliderJoint.xml:111
+msgid "The amount of damping once the slider limits are surpassed."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1012 doc/classes/SliderJoint.xml:85
+#: doc/classes/SliderJoint.xml:114
+msgid ""
+"A factor applied to the movement across the slider axis as long as the "
+"slider is in the limits. The lower, the slower the movement."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1015 doc/classes/SliderJoint.xml:82
+#: doc/classes/SliderJoint.xml:117
+msgid "The amount of restitution inside the slider limits."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1018 doc/classes/SliderJoint.xml:79
+#: doc/classes/SliderJoint.xml:120
+msgid "The amount of damping inside the slider limits."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1021 doc/classes/SliderJoint.xml:94
+#: doc/classes/SliderJoint.xml:123
+msgid "A factor applied to the movement across axes orthogonal to the slider."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1024 doc/classes/SliderJoint.xml:91
+#: doc/classes/SliderJoint.xml:126
+msgid ""
+"The amount of restitution when movement is across axes orthogonal to the "
+"slider."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1027 doc/classes/SliderJoint.xml:88
+#: doc/classes/SliderJoint.xml:129
+msgid ""
+"The amount of damping when movement is across axes orthogonal to the slider."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1030 doc/classes/SliderJoint.xml:43
+#: doc/classes/SliderJoint.xml:132
+msgid "The upper limit of rotation in the slider."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1033 doc/classes/SliderJoint.xml:32
+#: doc/classes/SliderJoint.xml:135
+msgid "The lower limit of rotation in the slider."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1036 doc/classes/SliderJoint.xml:138
+msgid "A factor applied to the all rotation once the limit is surpassed."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1039 doc/classes/SliderJoint.xml:141
+msgid "The amount of restitution of the rotation when the limit is surpassed."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1042 doc/classes/SliderJoint.xml:144
+msgid "The amount of damping of the rotation when the limit is surpassed."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1045
+msgid "A factor that gets applied to the all rotation in the limits."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1048 doc/classes/SliderJoint.xml:49
+#: doc/classes/SliderJoint.xml:150
+msgid "The amount of restitution of the rotation in the limits."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1051 doc/classes/SliderJoint.xml:46
+#: doc/classes/SliderJoint.xml:153
+msgid "The amount of damping of the rotation in the limits."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1054
+msgid ""
+"A factor that gets applied to the all rotation across axes orthogonal to the "
+"slider."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1057 doc/classes/SliderJoint.xml:58
+#: doc/classes/SliderJoint.xml:159
+msgid ""
+"The amount of restitution of the rotation across axes orthogonal to the "
+"slider."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1060 doc/classes/SliderJoint.xml:55
+#: doc/classes/SliderJoint.xml:162
+msgid ""
+"The amount of damping of the rotation across axes orthogonal to the slider."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1063
+msgid "Represents the size of the [enum SliderJointParam] enum."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1080
+msgid ""
+"The ease with which the Joint twists, if it's too low, it takes more force "
+"to twist the joint."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1092
+msgid ""
+"A factor that gets applied to the movement across the axes. The lower, the "
+"slower the movement."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1095
+msgid ""
+"The amount of restitution on the axes movement. The lower, the more velocity-"
+"energy gets lost."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1101
+msgid "The velocity that the joint's linear motor will attempt to reach."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1104
+msgid ""
+"The maximum force that the linear motor can apply while trying to reach the "
+"target velocity."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1113
+msgid "A factor that gets multiplied onto all rotations across the axes."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1125
+msgid ""
+"When correcting the crossing of limits in rotation across the axes, this "
+"error tolerance factor defines how much the correction gets slowed down. The "
+"lower, the slower."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1134
+msgid ""
+"If [code]set[/code] there is linear motion possible within the given limits."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1137
+msgid "If [code]set[/code] there is rotational motion possible."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1140
+msgid "If [code]set[/code] there is a rotational motor across these axes."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1143
+msgid ""
+"If [code]set[/code] there is a linear motor on this axis that targets a "
+"specific velocity."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1146
+msgid "The [Shape] is a [PlaneShape]."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1149
+msgid "The [Shape] is a [RayShape]."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1152
+msgid "The [Shape] is a [SphereShape]."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1155
+msgid "The [Shape] is a [BoxShape]."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1158
+msgid "The [Shape] is a [CapsuleShape]."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1161
+msgid "The [Shape] is a [CylinderShape]."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1164
+msgid "The [Shape] is a [ConvexPolygonShape]."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1167
+msgid "The [Shape] is a [ConcavePolygonShape]."
+msgstr ""
+
+#: doc/classes/PhysicsServer.xml:1170
+msgid "The [Shape] is a [HeightMapShape]."
+msgstr ""
+
+#: doc/classes/PhysicsShapeQueryParameters.xml:4
+msgid "Parameters to be sent to a 3D shape physics query."
+msgstr ""
+
+#: doc/classes/PhysicsShapeQueryParameters.xml:7
+msgid ""
+"This class contains the shape and other parameters for 3D intersection/"
+"collision queries."
+msgstr ""
+
+#: doc/classes/PhysicsShapeQueryParameters.xml:16
+msgid "Sets the [Shape] that will be used for collision/intersection queries."
+msgstr ""
+
+#: doc/classes/PhysicsShapeQueryParameters.xml:22
+msgid "If [code]true[/code], the query will take [Area]s into account."
+msgstr ""
+
+#: doc/classes/PhysicsShapeQueryParameters.xml:25
+msgid "If [code]true[/code], the query will take [PhysicsBody]s into account."
+msgstr ""
+
+#: doc/classes/PinJoint.xml:4
+msgid "Pin joint for 3D PhysicsBodies."
+msgstr ""
+
+#: doc/classes/PinJoint.xml:7
+msgid ""
+"Pin joint for 3D rigid bodies. It pins 2 bodies (rigid or static) together. "
+"See also [Generic6DOFJoint]."
+msgstr ""
+
+#: doc/classes/PinJoint.xml:30 doc/classes/PinJoint.xml:41
+msgid ""
+"The force with which the pinned objects stay in positional relation to each "
+"other. The higher, the stronger."
+msgstr ""
+
+#: doc/classes/PinJoint.xml:33 doc/classes/PinJoint.xml:44
+msgid ""
+"The force with which the pinned objects stay in velocity relation to each "
+"other. The higher, the stronger."
+msgstr ""
+
+#: doc/classes/PinJoint.xml:36 doc/classes/PinJoint.xml:47
+msgid ""
+"If above 0, this value is the maximum value for an impulse that this Joint "
+"produces."
+msgstr ""
+
+#: doc/classes/PinJoint2D.xml:4
+msgid "Pin Joint for 2D shapes."
+msgstr ""
+
+#: doc/classes/PinJoint2D.xml:7
+msgid ""
+"Pin Joint for 2D rigid bodies. It pins two bodies (rigid or static) together."
+msgstr ""
+
+#: doc/classes/PinJoint2D.xml:15
+msgid ""
+"The higher this value, the more the bond to the pinned partner can flex."
+msgstr ""
+
+#: doc/classes/Plane.xml:4
+msgid "Plane in hessian form."
+msgstr ""
+
+#: doc/classes/Plane.xml:7
+msgid ""
+"Plane represents a normalized plane equation. Basically, \"normal\" is the "
+"normal of the plane (a,b,c normalized), and \"d\" is the distance from the "
+"origin to the plane (in the direction of \"normal\"). \"Over\" or \"Above\" "
+"the plane is considered the side of the plane towards where the normal is "
+"pointing."
+msgstr ""
+
+#: doc/classes/Plane.xml:20
+msgid ""
+"Creates a plane from the four parameters. The three components of the "
+"resulting plane's [member normal] are [code]a[/code], [code]b[/code] and "
+"[code]c[/code], and the plane has a distance of [code]d[/code] from the "
+"origin."
+msgstr ""
+
+#: doc/classes/Plane.xml:29
+msgid "Creates a plane from the three points, given in clockwise order."
+msgstr ""
+
+#: doc/classes/Plane.xml:37
+msgid "Creates a plane from the normal and the plane's distance to the origin."
+msgstr ""
+
+#: doc/classes/Plane.xml:43
+msgid "Returns the center of the plane."
+msgstr ""
+
+#: doc/classes/Plane.xml:50
+msgid ""
+"Returns the shortest distance from the plane to the position [code]point[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Plane.xml:56
+msgid ""
+"Returns the center of the plane.\n"
+"This method is deprecated, please use [method center] instead."
+msgstr ""
+
+#: doc/classes/Plane.xml:65
+msgid ""
+"Returns [code]true[/code] if [code]point[/code] is inside the plane. "
+"Comparison uses a custom minimum [code]epsilon[/code] threshold."
+msgstr ""
+
+#: doc/classes/Plane.xml:73
+msgid ""
+"Returns the intersection point of the three planes [code]b[/code], [code]c[/"
+"code] and this plane. If no intersection is found, [code]null[/code] is "
+"returned."
+msgstr ""
+
+#: doc/classes/Plane.xml:81
+msgid ""
+"Returns the intersection point of a ray consisting of the position "
+"[code]from[/code] and the direction normal [code]dir[/code] with this plane. "
+"If no intersection is found, [code]null[/code] is returned."
+msgstr ""
+
+#: doc/classes/Plane.xml:89
+msgid ""
+"Returns the intersection point of a segment from position [code]begin[/code] "
+"to position [code]end[/code] with this plane. If no intersection is found, "
+"[code]null[/code] is returned."
+msgstr ""
+
+#: doc/classes/Plane.xml:96
+msgid ""
+"Returns [code]true[/code] if this plane and [code]plane[/code] are "
+"approximately equal, by running [method @GDScript.is_equal_approx] on each "
+"component."
+msgstr ""
+
+#: doc/classes/Plane.xml:103
+msgid ""
+"Returns [code]true[/code] if [code]point[/code] is located above the plane."
+msgstr ""
+
+#: doc/classes/Plane.xml:109
+msgid "Returns a copy of the plane, normalized."
+msgstr ""
+
+#: doc/classes/Plane.xml:116
+msgid ""
+"Returns the orthogonal projection of [code]point[/code] into a point in the "
+"plane."
+msgstr ""
+
+#: doc/classes/Plane.xml:122
+msgid ""
+"The distance from the origin to the plane, in the direction of [member "
+"normal]. This value is typically non-negative.\n"
+"In the scalar equation of the plane [code]ax + by + cz = d[/code], this is "
+"[code]d[/code], while the [code](a, b, c)[/code] coordinates are represented "
+"by the [member normal] property."
+msgstr ""
+
+#: doc/classes/Plane.xml:126
+msgid ""
+"The normal of the plane, which must be normalized.\n"
+"In the scalar equation of the plane [code]ax + by + cz = d[/code], this is "
+"the vector [code](a, b, c)[/code], where [code]d[/code] is the [member d] "
+"property."
+msgstr ""
+
+#: doc/classes/Plane.xml:130
+msgid "The X component of the plane's [member normal] vector."
+msgstr ""
+
+#: doc/classes/Plane.xml:133
+msgid "The Y component of the plane's [member normal] vector."
+msgstr ""
+
+#: doc/classes/Plane.xml:136
+msgid "The Z component of the plane's [member normal] vector."
+msgstr ""
+
+#: doc/classes/Plane.xml:141
+msgid "A plane that extends in the Y and Z axes (normal vector points +X)."
+msgstr ""
+
+#: doc/classes/Plane.xml:144
+msgid "A plane that extends in the X and Z axes (normal vector points +Y)."
+msgstr ""
+
+#: doc/classes/Plane.xml:147
+msgid "A plane that extends in the X and Y axes (normal vector points +Z)."
+msgstr ""
+
+#: doc/classes/PlaneMesh.xml:4
+msgid "Class representing a planar [PrimitiveMesh]."
+msgstr ""
+
+#: doc/classes/PlaneMesh.xml:7
+msgid ""
+"Class representing a planar [PrimitiveMesh]. This flat mesh does not have a "
+"thickness. By default, this mesh is aligned on the X and Z axes; this "
+"default rotation isn't suited for use with billboarded materials. For "
+"billboarded materials, use [QuadMesh] instead.\n"
+"[b]Note:[/b] When using a large textured [PlaneMesh] (e.g. as a floor), you "
+"may stumble upon UV jittering issues depending on the camera angle. To solve "
+"this, increase [member subdivide_depth] and [member subdivide_width] until "
+"you no longer notice UV jittering."
+msgstr ""
+
+#: doc/classes/PlaneMesh.xml:16
+msgid "Offset from the origin of the generated plane. Useful for particles."
+msgstr ""
+
+#: doc/classes/PlaneMesh.xml:19
+msgid "Size of the generated plane."
+msgstr ""
+
+#: doc/classes/PlaneMesh.xml:22
+msgid "Number of subdivision along the Z axis."
+msgstr ""
+
+#: doc/classes/PlaneMesh.xml:25
+msgid "Number of subdivision along the X axis."
+msgstr ""
+
+#: doc/classes/PlaneShape.xml:4
+msgid "Infinite plane shape for 3D collisions."
+msgstr ""
+
+#: doc/classes/PlaneShape.xml:7
+msgid ""
+"An infinite plane shape for 3D collisions. Note that the [Plane]'s normal "
+"matters; anything \"below\" the plane will collide with it. If the "
+"[PlaneShape] is used in a [PhysicsBody], it will cause colliding objects "
+"placed \"below\" it to teleport \"above\" the plane."
+msgstr ""
+
+#: doc/classes/PlaneShape.xml:15
+msgid "The [Plane] used by the [PlaneShape] for collision."
+msgstr ""
+
+#: doc/classes/PointMesh.xml:4
+msgid "Mesh with a single Point primitive."
+msgstr ""
+
+#: doc/classes/PointMesh.xml:7
+msgid ""
+"The PointMesh is made from a single point. Instead of relying on triangles, "
+"points are rendered as a single rectangle on the screen with a constant "
+"size. They are intended to be used with Particle systems, but can be used as "
+"a cheap way to render constant size billboarded sprites (for example in a "
+"point cloud).\n"
+"PointMeshes, must be used with a material that has a point size. Point size "
+"can be accessed in a shader with [code]POINT_SIZE[/code], or in a "
+"[SpatialMaterial] by setting [member SpatialMaterial.flags_use_point_size] "
+"and the variable [member SpatialMaterial.params_point_size].\n"
+"When using PointMeshes, properties that normally alter vertices will be "
+"ignored, including billboard mode, grow, and cull face."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:4
+msgid "A 2D polygon."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:7
+msgid ""
+"A Polygon2D is defined by a set of points. Each point is connected to the "
+"next, with the final point being connected to the first, resulting in a "
+"closed polygon. Polygon2Ds can be filled with color (solid or gradient) or "
+"filled with a given texture.\n"
+"[b]Note:[/b] By default, Godot can only draw up to 4,096 polygon points at a "
+"time. To increase this limit, open the Project Settings and increase [member "
+"ProjectSettings.rendering/limits/buffers/canvas_polygon_buffer_size_kb] and "
+"[member ProjectSettings.rendering/limits/buffers/"
+"canvas_polygon_index_buffer_size_kb]."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:18
+msgid ""
+"Adds a bone with the specified [code]path[/code] and [code]weights[/code]."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:24
+msgid "Removes all bones from this [Polygon2D]."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:31
+msgid "Removes the specified bone from this [Polygon2D]."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:37
+msgid "Returns the number of bones in this [Polygon2D]."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:44
+msgid "Returns the path to the node associated with the specified bone."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:51
+msgid "Returns the height values of the specified bone."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:59
+msgid "Sets the path to the node associated with the specified bone."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:67
+msgid "Sets the weight values for the specified bone."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:73
+msgid "If [code]true[/code], polygon edges will be anti-aliased."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:78
+msgid ""
+"The polygon's fill color. If [code]texture[/code] is defined, it will be "
+"multiplied by this color. It will also be the default color for vertices not "
+"set in [code]vertex_colors[/code]."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:83
+msgid ""
+"Added padding applied to the bounding box when using [code]invert[/code]. "
+"Setting this value too small may result in a \"Bad Polygon\" error."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:86
+msgid ""
+"If [code]true[/code], polygon will be inverted, containing the area outside "
+"the defined points and extending to the [code]invert_border[/code]."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:89
+msgid "The offset applied to each vertex."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:92
+msgid ""
+"The polygon's list of vertices. The final point will be connected to the "
+"first.\n"
+"[b]Note:[/b] This returns a copy of the [PoolVector2Array] rather than a "
+"reference."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:100
+msgid ""
+"The polygon's fill texture. Use [code]uv[/code] to set texture coordinates."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:103
+msgid ""
+"Amount to offset the polygon's [code]texture[/code]. If [code](0, 0)[/code] "
+"the texture's origin (its top-left corner) will be placed at the polygon's "
+"[code]position[/code]."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:106
+msgid "The texture's rotation in radians."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:109
+msgid "The texture's rotation in degrees."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:112
+msgid ""
+"Amount to multiply the [code]uv[/code] coordinates when using a "
+"[code]texture[/code]. Larger values make the texture smaller, and vice versa."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:115
+msgid ""
+"Texture coordinates for each vertex of the polygon. There should be one "
+"[code]uv[/code] per polygon vertex. If there are fewer, undefined vertices "
+"will use [code](0, 0)[/code]."
+msgstr ""
+
+#: doc/classes/Polygon2D.xml:118
+msgid ""
+"Color for each vertex. Colors are interpolated between vertices, resulting "
+"in smooth gradients. There should be one per polygon vertex. If there are "
+"fewer, undefined vertices will use [code]color[/code]."
+msgstr ""
+
+#: doc/classes/PoolByteArray.xml:4
+msgid "A pooled [Array] of bytes."
+msgstr ""
+
+#: doc/classes/PoolByteArray.xml:7
+msgid ""
+"An [Array] specifically designed to hold bytes. Optimized for memory usage, "
+"does not fragment the memory.\n"
+"[b]Note:[/b] This type is passed by value and not by reference."
+msgstr ""
+
+#: doc/classes/PoolByteArray.xml:17
+msgid ""
+"Constructs a new [PoolByteArray]. Optionally, you can pass in a generic "
+"[Array] that will be converted."
+msgstr ""
+
+#: doc/classes/PoolByteArray.xml:29
+msgid "Appends a [PoolByteArray] at the end of this array."
+msgstr ""
+
+#: doc/classes/PoolByteArray.xml:36
+msgid ""
+"Returns a new [PoolByteArray] with the data compressed. Set the compression "
+"mode using one of [enum File.CompressionMode]'s constants."
+msgstr ""
+
+#: doc/classes/PoolByteArray.xml:44
+msgid ""
+"Returns a new [PoolByteArray] with the data decompressed. Set "
+"[code]buffer_size[/code] to the size of the uncompressed data. Set the "
+"compression mode using one of [enum File.CompressionMode]'s constants."
+msgstr ""
+
+#: doc/classes/PoolByteArray.xml:52
+msgid ""
+"Returns a new [PoolByteArray] with the data decompressed. Set the "
+"compression mode using one of [enum File.CompressionMode]'s constants. "
+"[b]This method only accepts gzip and deflate compression modes.[/b]\n"
+"This method is potentially slower than [code]decompress[/code], as it may "
+"have to re-allocate it's output buffer multiple times while decompressing, "
+"where as [code]decompress[/code] knows it's output buffer size from the "
+"begining.\n"
+"\n"
+"GZIP has a maximal compression ratio of 1032:1, meaning it's very possible "
+"for a small compressed payload to decompress to a potentially very large "
+"output. To guard against this, you may provide a maximum size this function "
+"is allowed to allocate in bytes via [code]max_output_size[/code]. Passing -1 "
+"will allow for unbounded output. If any positive value is passed, and the "
+"decompression exceeds that ammount in bytes, then an error will be returned."
+msgstr ""
+
+#: doc/classes/PoolByteArray.xml:67
+msgid ""
+"Returns a copy of the array's contents as [String]. Fast alternative to "
+"[method get_string_from_utf8] if the content is ASCII-only. Unlike the UTF-8 "
+"function this function maps every byte to a character in the array. "
+"Multibyte sequences will not be interpreted correctly. For parsing user "
+"input always use [method get_string_from_utf8]."
+msgstr ""
+
+#: doc/classes/PoolByteArray.xml:73
+msgid ""
+"Returns a copy of the array's contents as [String]. Slower than [method "
+"get_string_from_ascii] but supports UTF-8 encoded data. Use this function if "
+"you are unsure about the source of the data. For user input this function "
+"should always be preferred."
+msgstr ""
+
+#: doc/classes/PoolByteArray.xml:79
+msgid ""
+"Returns a hexadecimal representation of this array as a [String].\n"
+"[codeblock]\n"
+"var array = PoolByteArray([11, 46, 255])\n"
+"print(array.hex_encode()) # Prints: 0b2eff\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/PoolByteArray.xml:91 doc/classes/PoolColorArray.xml:43
+#: doc/classes/PoolRealArray.xml:44 doc/classes/PoolStringArray.xml:44
+#: doc/classes/PoolVector2Array.xml:44 doc/classes/PoolVector3Array.xml:43
+msgid ""
+"Inserts a new element at a given position in the array. The position must be "
+"valid, or at the end of the array ([code]idx == size()[/code])."
+msgstr ""
+
+#: doc/classes/PoolByteArray.xml:102 doc/classes/PoolRealArray.xml:55
+msgid "Appends an element at the end of the array."
+msgstr ""
+
+#: doc/classes/PoolByteArray.xml:108 doc/classes/PoolColorArray.xml:60
+#: doc/classes/PoolIntArray.xml:61 doc/classes/PoolRealArray.xml:61
+#: doc/classes/PoolStringArray.xml:68 doc/classes/PoolVector2Array.xml:61
+#: doc/classes/PoolVector3Array.xml:60
+msgid "Removes an element from the array by index."
+msgstr ""
+
+#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolIntArray.xml:67
+#: doc/classes/PoolRealArray.xml:67
+msgid ""
+"Sets the size of the array. If the array is grown, reserves elements at the "
+"end of the array. If the array is shrunk, truncates the array to the new "
+"size.\n"
+"[b]Note:[/b] Added elements are not automatically initialized to 0 and will "
+"contain garbage, i.e. indeterminate values."
+msgstr ""
+
+#: doc/classes/PoolByteArray.xml:122
+msgid "Changes the byte at the given index."
+msgstr ""
+
+#: doc/classes/PoolByteArray.xml:128 doc/classes/PoolColorArray.xml:79
+#: doc/classes/PoolRealArray.xml:81 doc/classes/PoolStringArray.xml:87
+#: doc/classes/PoolVector2Array.xml:80 doc/classes/PoolVector3Array.xml:79
+msgid "Returns the size of the array."
+msgstr ""
+
+#: doc/classes/PoolByteArray.xml:136
+msgid ""
+"Returns the slice of the [PoolByteArray] between indices (inclusive) as a "
+"new [PoolByteArray]. Any negative index is considered to be from the end of "
+"the array."
+msgstr ""
+
+#: doc/classes/PoolColorArray.xml:4
+msgid "A pooled [Array] of [Color]."
+msgstr ""
+
+#: doc/classes/PoolColorArray.xml:7
+msgid ""
+"An [Array] specifically designed to hold [Color]. Optimized for memory "
+"usage, does not fragment the memory.\n"
+"[b]Note:[/b] This type is passed by value and not by reference."
+msgstr ""
+
+#: doc/classes/PoolColorArray.xml:17
+msgid ""
+"Constructs a new [PoolColorArray]. Optionally, you can pass in a generic "
+"[Array] that will be converted."
+msgstr ""
+
+#: doc/classes/PoolColorArray.xml:29
+msgid "Appends a [PoolColorArray] at the end of this array."
+msgstr ""
+
+#: doc/classes/PoolColorArray.xml:54 doc/classes/PoolIntArray.xml:55
+msgid "Appends a value to the array."
+msgstr ""
+
+#: doc/classes/PoolColorArray.xml:66 doc/classes/PoolStringArray.xml:74
+#: doc/classes/PoolVector2Array.xml:67 doc/classes/PoolVector3Array.xml:66
+msgid ""
+"Sets the size of the array. If the array is grown, reserves elements at the "
+"end of the array. If the array is shrunk, truncates the array to the new "
+"size."
+msgstr ""
+
+#: doc/classes/PoolColorArray.xml:73
+msgid "Changes the [Color] at the given index."
+msgstr ""
+
+#: doc/classes/PoolIntArray.xml:4
+msgid "A pooled [Array] of integers ([int])."
+msgstr ""
+
+#: doc/classes/PoolIntArray.xml:7
+msgid ""
+"An [Array] specifically designed to hold integer values ([int]). Optimized "
+"for memory usage, does not fragment the memory.\n"
+"[b]Note:[/b] This type is passed by value and not by reference.\n"
+"[b]Note:[/b] This type is limited to signed 32-bit integers, which means it "
+"can only take values in the interval [code][-2^31, 2^31 - 1][/code], i.e. "
+"[code][-2147483648, 2147483647][/code]. Exceeding those bounds will wrap "
+"around. In comparison, [int] uses signed 64-bit integers which can hold much "
+"larger values."
+msgstr ""
+
+#: doc/classes/PoolIntArray.xml:18
+msgid ""
+"Constructs a new [PoolIntArray]. Optionally, you can pass in a generic "
+"[Array] that will be converted."
+msgstr ""
+
+#: doc/classes/PoolIntArray.xml:30
+msgid "Appends a [PoolIntArray] at the end of this array."
+msgstr ""
+
+#: doc/classes/PoolIntArray.xml:44
+msgid ""
+"Inserts a new int at a given position in the array. The position must be "
+"valid, or at the end of the array ([code]idx == size()[/code])."
+msgstr ""
+
+#: doc/classes/PoolIntArray.xml:75
+msgid "Changes the int at the given index."
+msgstr ""
+
+#: doc/classes/PoolIntArray.xml:81
+msgid "Returns the array size."
+msgstr ""
+
+#: doc/classes/PoolRealArray.xml:4
+msgid "A pooled [Array] of reals ([float])."
+msgstr ""
+
+#: doc/classes/PoolRealArray.xml:7
+msgid ""
+"An [Array] specifically designed to hold floating-point values. Optimized "
+"for memory usage, does not fragment the memory.\n"
+"[b]Note:[/b] This type is passed by value and not by reference.\n"
+"[b]Note:[/b] Unlike primitive [float]s which are 64-bit, numbers stored in "
+"[PoolRealArray] are 32-bit floats. This means values stored in "
+"[PoolRealArray] have lower precision compared to primitive [float]s. If you "
+"need to store 64-bit floats in an array, use a generic [Array] with [float] "
+"elements as these will still be 64-bit. However, using a generic [Array] to "
+"store [float]s will use roughly 6 times more memory compared to a "
+"[PoolRealArray]."
+msgstr ""
+
+#: doc/classes/PoolRealArray.xml:18
+msgid ""
+"Constructs a new [PoolRealArray]. Optionally, you can pass in a generic "
+"[Array] that will be converted."
+msgstr ""
+
+#: doc/classes/PoolRealArray.xml:30
+msgid "Appends a [PoolRealArray] at the end of this array."
+msgstr ""
+
+#: doc/classes/PoolRealArray.xml:75
+msgid "Changes the float at the given index."
+msgstr ""
+
+#: doc/classes/PoolStringArray.xml:4
+msgid "A pooled [Array] of [String]."
+msgstr ""
+
+#: doc/classes/PoolStringArray.xml:7
+msgid ""
+"An [Array] specifically designed to hold [String]s. Optimized for memory "
+"usage, does not fragment the memory.\n"
+"[b]Note:[/b] This type is passed by value and not by reference."
+msgstr ""
+
+#: doc/classes/PoolStringArray.xml:18
+msgid ""
+"Constructs a new [PoolStringArray]. Optionally, you can pass in a generic "
+"[Array] that will be converted."
+msgstr ""
+
+#: doc/classes/PoolStringArray.xml:30
+msgid "Appends a [PoolStringArray] at the end of this array."
+msgstr ""
+
+#: doc/classes/PoolStringArray.xml:56
+msgid ""
+"Returns a [String] with each element of the array joined with the given "
+"[code]delimiter[/code]."
+msgstr ""
+
+#: doc/classes/PoolStringArray.xml:62
+msgid "Appends a string element at end of the array."
+msgstr ""
+
+#: doc/classes/PoolStringArray.xml:81
+msgid "Changes the [String] at the given index."
+msgstr ""
+
+#: doc/classes/PoolVector2Array.xml:4
+msgid "A pooled [Array] of [Vector2]."
+msgstr ""
+
+#: doc/classes/PoolVector2Array.xml:7
+msgid ""
+"An [Array] specifically designed to hold [Vector2]. Optimized for memory "
+"usage, does not fragment the memory.\n"
+"[b]Note:[/b] This type is passed by value and not by reference."
+msgstr ""
+
+#: doc/classes/PoolVector2Array.xml:11 doc/classes/TileMap.xml:15
+#: doc/classes/TileSet.xml:15
+msgid "https://godotengine.org/asset-library/asset/519"
+msgstr ""
+
+#: doc/classes/PoolVector2Array.xml:18
+msgid ""
+"Constructs a new [PoolVector2Array]. Optionally, you can pass in a generic "
+"[Array] that will be converted."
+msgstr ""
+
+#: doc/classes/PoolVector2Array.xml:30
+msgid "Appends a [PoolVector2Array] at the end of this array."
+msgstr ""
+
+#: doc/classes/PoolVector2Array.xml:55
+msgid "Inserts a [Vector2] at the end."
+msgstr ""
+
+#: doc/classes/PoolVector2Array.xml:74
+msgid "Changes the [Vector2] at the given index."
+msgstr ""
+
+#: doc/classes/PoolVector3Array.xml:4
+msgid "A pooled [Array] of [Vector3]."
+msgstr ""
+
+#: doc/classes/PoolVector3Array.xml:7
+msgid ""
+"An [Array] specifically designed to hold [Vector3]. Optimized for memory "
+"usage, does not fragment the memory.\n"
+"[b]Note:[/b] This type is passed by value and not by reference."
+msgstr ""
+
+#: doc/classes/PoolVector3Array.xml:17
+msgid ""
+"Constructs a new [PoolVector3Array]. Optionally, you can pass in a generic "
+"[Array] that will be converted."
+msgstr ""
+
+#: doc/classes/PoolVector3Array.xml:29
+msgid "Appends a [PoolVector3Array] at the end of this array."
+msgstr ""
+
+#: doc/classes/PoolVector3Array.xml:54
+msgid "Inserts a [Vector3] at the end."
+msgstr ""
+
+#: doc/classes/PoolVector3Array.xml:73
+msgid "Changes the [Vector3] at the given index."
+msgstr ""
+
+#: doc/classes/Popup.xml:4
+msgid "Base container control for popups and dialogs."
+msgstr ""
+
+#: doc/classes/Popup.xml:7
+msgid ""
+"Popup is a base [Control] used to show dialogs and popups. It's a subwindow "
+"and modal by default (see [Control]) and has helpers for custom popup "
+"behavior. All popup methods ensure correct placement within the viewport."
+msgstr ""
+
+#: doc/classes/Popup.xml:16
+msgid "Popup (show the control in modal form)."
+msgstr ""
+
+#: doc/classes/Popup.xml:23
+msgid ""
+"Popup (show the control in modal form) in the center of the screen relative "
+"to its current canvas transform, at the current size, or at a size "
+"determined by [code]size[/code]."
+msgstr ""
+
+#: doc/classes/Popup.xml:31
+msgid ""
+"Popup (show the control in modal form) in the center of the screen relative "
+"to the current canvas transform, clamping the size to [code]size[/code], "
+"then ensuring the popup is no larger than the viewport size multiplied by "
+"[code]fallback_ratio[/code]."
+msgstr ""
+
+#: doc/classes/Popup.xml:38
+msgid ""
+"Popup (show the control in modal form) in the center of the screen relative "
+"to the current canvas transform, ensuring the size is never smaller than "
+"[code]minsize[/code]."
+msgstr ""
+
+#: doc/classes/Popup.xml:45
+msgid ""
+"Popup (show the control in modal form) in the center of the screen relative "
+"to the current canvas transform, scaled at a ratio of size of the screen."
+msgstr ""
+
+#: doc/classes/Popup.xml:51
+msgid "Shrink popup to keep to the minimum size of content."
+msgstr ""
+
+#: doc/classes/Popup.xml:57
+msgid ""
+"If [code]true[/code], the popup will not be hidden when a click event occurs "
+"outside of it, or when it receives the [code]ui_cancel[/code] action event.\n"
+"[b]Note:[/b] Enabling this property doesn't affect the Close or Cancel "
+"buttons' behavior in dialogs that inherit from this class. As a workaround, "
+"you can use [method WindowDialog.get_close_button] or [method "
+"ConfirmationDialog.get_cancel] and hide the buttons in question by setting "
+"their [member CanvasItem.visible] property to [code]false[/code]."
+msgstr ""
+
+#: doc/classes/Popup.xml:65
+msgid ""
+"Emitted when a popup is about to be shown. This is often used in [PopupMenu] "
+"to clear the list of options then create a new one according to the current "
+"context."
+msgstr ""
+
+#: doc/classes/Popup.xml:70
+msgid "Emitted when a popup is hidden."
+msgstr ""
+
+#: doc/classes/Popup.xml:76
+msgid "Notification sent right after the popup is shown."
+msgstr ""
+
+#: doc/classes/Popup.xml:79
+msgid "Notification sent right after the popup is hidden."
+msgstr ""
+
+#: doc/classes/PopupDialog.xml:4
+msgid "Base class for popup dialogs."
+msgstr ""
+
+#: doc/classes/PopupDialog.xml:7
+msgid ""
+"PopupDialog is a base class for popup dialogs, along with [WindowDialog]."
+msgstr ""
+
+#: doc/classes/PopupDialog.xml:17
+msgid "Sets a custom [StyleBox] for the panel of the [PopupDialog]."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:4
+msgid "PopupMenu displays a list of options."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:7
+msgid ""
+"[PopupMenu] is a [Control] that displays a list of options. They are popular "
+"in toolbars or context menus."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:18
+msgid ""
+"Adds a new checkable item with text [code]label[/code].\n"
+"An [code]id[/code] can optionally be provided, as well as an accelerator "
+"([code]accel[/code]). If no [code]id[/code] is provided, one will be created "
+"from the index. If no [code]accel[/code] is provided then the default "
+"[code]0[/code] will be assigned to it. See [method get_item_accelerator] for "
+"more info on accelerators.\n"
+"[b]Note:[/b] Checkable items just display a checkmark, but don't have any "
+"built-in checking behavior and must be checked/unchecked manually. See "
+"[method set_item_checked] for more info on how to control it."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:29
+msgid ""
+"Adds a new checkable item and assigns the specified [ShortCut] to it. Sets "
+"the label of the checkbox to the [ShortCut]'s name.\n"
+"An [code]id[/code] can optionally be provided. If no [code]id[/code] is "
+"provided, one will be created from the index.\n"
+"[b]Note:[/b] Checkable items just display a checkmark, but don't have any "
+"built-in checking behavior and must be checked/unchecked manually. See "
+"[method set_item_checked] for more info on how to control it."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:41
+msgid ""
+"Adds a new checkable item with text [code]label[/code] and icon "
+"[code]texture[/code].\n"
+"An [code]id[/code] can optionally be provided, as well as an accelerator "
+"([code]accel[/code]). If no [code]id[/code] is provided, one will be created "
+"from the index. If no [code]accel[/code] is provided then the default "
+"[code]0[/code] will be assigned to it. See [method get_item_accelerator] for "
+"more info on accelerators.\n"
+"[b]Note:[/b] Checkable items just display a checkmark, but don't have any "
+"built-in checking behavior and must be checked/unchecked manually. See "
+"[method set_item_checked] for more info on how to control it."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:53
+msgid ""
+"Adds a new checkable item and assigns the specified [ShortCut] and icon "
+"[code]texture[/code] to it. Sets the label of the checkbox to the "
+"[ShortCut]'s name.\n"
+"An [code]id[/code] can optionally be provided. If no [code]id[/code] is "
+"provided, one will be created from the index.\n"
+"[b]Note:[/b] Checkable items just display a checkmark, but don't have any "
+"built-in checking behavior and must be checked/unchecked manually. See "
+"[method set_item_checked] for more info on how to control it."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:65
+msgid ""
+"Adds a new item with text [code]label[/code] and icon [code]texture[/code].\n"
+"An [code]id[/code] can optionally be provided, as well as an accelerator "
+"([code]accel[/code]). If no [code]id[/code] is provided, one will be created "
+"from the index. If no [code]accel[/code] is provided then the default "
+"[code]0[/code] will be assigned to it. See [method get_item_accelerator] for "
+"more info on accelerators."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:76
+msgid "Same as [method add_icon_check_item], but uses a radio check button."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:86
+msgid ""
+"Same as [method add_icon_check_shortcut], but uses a radio check button."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:96
+msgid ""
+"Adds a new item and assigns the specified [ShortCut] and icon [code]texture[/"
+"code] to it. Sets the label of the checkbox to the [ShortCut]'s name.\n"
+"An [code]id[/code] can optionally be provided. If no [code]id[/code] is "
+"provided, one will be created from the index."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:106
+msgid ""
+"Adds a new item with text [code]label[/code].\n"
+"An [code]id[/code] can optionally be provided, as well as an accelerator "
+"([code]accel[/code]). If no [code]id[/code] is provided, one will be created "
+"from the index. If no [code]accel[/code] is provided then the default "
+"[code]0[/code] will be assigned to it. See [method get_item_accelerator] for "
+"more info on accelerators."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:118
+msgid ""
+"Adds a new multistate item with text [code]label[/code].\n"
+"Contrarily to normal binary items, multistate items can have more than two "
+"states, as defined by [code]max_states[/code]. Each press or activate of the "
+"item will increase the state by one. The default value is defined by "
+"[code]default_state[/code].\n"
+"An [code]id[/code] can optionally be provided, as well as an accelerator "
+"([code]accel[/code]). If no [code]id[/code] is provided, one will be created "
+"from the index. If no [code]accel[/code] is provided then the default "
+"[code]0[/code] will be assigned to it. See [method get_item_accelerator] for "
+"more info on accelerators."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:129
+msgid ""
+"Adds a new radio check button with text [code]label[/code].\n"
+"An [code]id[/code] can optionally be provided, as well as an accelerator "
+"([code]accel[/code]). If no [code]id[/code] is provided, one will be created "
+"from the index. If no [code]accel[/code] is provided then the default "
+"[code]0[/code] will be assigned to it. See [method get_item_accelerator] for "
+"more info on accelerators.\n"
+"[b]Note:[/b] Checkable items just display a checkmark, but don't have any "
+"built-in checking behavior and must be checked/unchecked manually. See "
+"[method set_item_checked] for more info on how to control it."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:140
+msgid ""
+"Adds a new radio check button and assigns a [ShortCut] to it. Sets the label "
+"of the checkbox to the [ShortCut]'s name.\n"
+"An [code]id[/code] can optionally be provided. If no [code]id[/code] is "
+"provided, one will be created from the index.\n"
+"[b]Note:[/b] Checkable items just display a checkmark, but don't have any "
+"built-in checking behavior and must be checked/unchecked manually. See "
+"[method set_item_checked] for more info on how to control it."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:150
+msgid ""
+"Adds a separator between items. Separators also occupy an index, which you "
+"can set by using the [code]id[/code] parameter.\n"
+"A [code]label[/code] can optionally be provided, which will appear at the "
+"center of the separator."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:160
+msgid ""
+"Adds a [ShortCut].\n"
+"An [code]id[/code] can optionally be provided. If no [code]id[/code] is "
+"provided, one will be created from the index."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:170
+msgid ""
+"Adds an item that will act as a submenu of the parent [PopupMenu] node when "
+"clicked. The [code]submenu[/code] argument is the name of the child "
+"[PopupMenu] node that will be shown when the item is clicked.\n"
+"An [code]id[/code] can optionally be provided. If no [code]id[/code] is "
+"provided, one will be created from the index."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:177
+msgid "Removes all items from the [PopupMenu]."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:183
+msgid ""
+"Returns the index of the currently focused item. Returns [code]-1[/code] if "
+"no item is focused."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:190
+msgid ""
+"Returns the accelerator of the item at index [code]idx[/code]. Accelerators "
+"are special combinations of keys that activate the item, no matter which "
+"control is focused."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:196
+msgid "Returns the number of items in the [PopupMenu]."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:210
+msgid ""
+"Returns the id of the item at index [code]idx[/code]. [code]id[/code] can be "
+"manually assigned, while index can not."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:217
+msgid ""
+"Returns the index of the item containing the specified [code]id[/code]. "
+"Index is automatically assigned to each item by the engine. Index can not be "
+"set manually."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:224
+msgid ""
+"Returns the metadata of the specified item, which might be of any type. You "
+"can set it with [method set_item_metadata], which provides a simple way of "
+"assigning context data to items."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:231
+msgid ""
+"Returns the [ShortCut] associated with the specified [code]idx[/code] item."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:238
+msgid ""
+"Returns the submenu name of the item at index [code]idx[/code]. See [method "
+"add_submenu_item] for more info on how to add a submenu."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:252
+msgid ""
+"Returns the tooltip associated with the specified index index [code]idx[/"
+"code]."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:258
+msgid ""
+"Returns [code]true[/code] if the popup will be hidden when the window loses "
+"focus or not."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:265
+msgid ""
+"Returns [code]true[/code] if the item at index [code]idx[/code] is checkable "
+"in some way, i.e. if it has a checkbox or radio button.\n"
+"[b]Note:[/b] Checkable items just display a checkmark or radio button, but "
+"don't have any built-in checking behavior and must be checked/unchecked "
+"manually."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:273
+msgid ""
+"Returns [code]true[/code] if the item at index [code]idx[/code] is checked."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:280
+msgid ""
+"Returns [code]true[/code] if the item at index [code]idx[/code] is disabled. "
+"When it is disabled it can't be selected, or its action invoked.\n"
+"See [method set_item_disabled] for more info on how to disable an item."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:288
+msgid ""
+"Returns [code]true[/code] if the item at index [code]idx[/code] has radio "
+"button-style checkability.\n"
+"[b]Note:[/b] This is purely cosmetic; you must add the logic for checking/"
+"unchecking items in radio groups."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:296
+msgid ""
+"Returns [code]true[/code] if the item is a separator. If it is, it will be "
+"displayed as a line. See [method add_separator] for more info on how to add "
+"a separator."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:303
+msgid "Returns [code]true[/code] if the specified item's shortcut is disabled."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:310
+msgid ""
+"Removes the item at index [code]idx[/code] from the menu.\n"
+"[b]Note:[/b] The indices of items after the removed item will be shifted by "
+"one."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:318
+msgid "Hides the [PopupMenu] when the window loses focus."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:326
+msgid ""
+"Sets the accelerator of the item at index [code]idx[/code]. Accelerators are "
+"special combinations of keys that activate the item, no matter which control "
+"is focused."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:334
+msgid ""
+"Sets whether the item at index [code]idx[/code] has a checkbox. If "
+"[code]false[/code], sets the type of the item to plain text.\n"
+"[b]Note:[/b] Checkable items just display a checkmark, but don't have any "
+"built-in checking behavior and must be checked/unchecked manually."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:343
+msgid ""
+"Sets the type of the item at the specified index [code]idx[/code] to radio "
+"button. If [code]false[/code], sets the type of the item to plain text."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:351
+msgid ""
+"Mark the item at index [code]idx[/code] as a separator, which means that it "
+"would be displayed as a line. If [code]false[/code], sets the type of the "
+"item to plain text."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:359
+msgid "Sets the checkstate status of the item at index [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:367
+msgid ""
+"Enables/disables the item at index [code]idx[/code]. When it is disabled, it "
+"can't be selected and its action can't be invoked."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:375
+msgid "Replaces the [Texture] icon of the specified [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:383
+msgid "Sets the [code]id[/code] of the item at index [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:391
+msgid ""
+"Sets the metadata of an item, which may be of any type. You can later get it "
+"with [method get_item_metadata], which provides a simple way of assigning "
+"context data to items."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:399
+msgid ""
+"Sets the state of a multistate item. See [method add_multistate_item] for "
+"details."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:408
+msgid "Sets a [ShortCut] for the specified item [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:416
+msgid "Disables the [ShortCut] of the specified index [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:424
+msgid ""
+"Sets the submenu of the item at index [code]idx[/code]. The submenu is the "
+"name of a child [PopupMenu] node that would be shown when the item is "
+"clicked."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:440
+msgid ""
+"Sets the [String] tooltip of the item at the specified index [code]idx[/"
+"code]."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:447
+msgid ""
+"Toggles the check state of the item of the specified index [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:454
+msgid ""
+"Cycle to the next state of a multistate item. See [method "
+"add_multistate_item] for details."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:460
+msgid "If [code]true[/code], allows navigating [PopupMenu] with letter keys."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:464
+msgid ""
+"If [code]true[/code], hides the [PopupMenu] when a checkbox or radio button "
+"is selected."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:467
+msgid "If [code]true[/code], hides the [PopupMenu] when an item is selected."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:470
+msgid ""
+"If [code]true[/code], hides the [PopupMenu] when a state item is selected."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:473
+msgid ""
+"Sets the delay time in seconds for the submenu item to popup on mouse "
+"hovering. If the popup menu is added as a child of another (acting as a "
+"submenu), it will inherit the delay time of the parent menu item."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:480
+msgid ""
+"Emitted when user navigated to an item of some [code]id[/code] using "
+"[code]ui_up[/code] or [code]ui_down[/code] action."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:486
+msgid ""
+"Emitted when an item of some [code]id[/code] is pressed or its accelerator "
+"is activated."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:492
+msgid ""
+"Emitted when an item of some [code]index[/code] is pressed or its "
+"accelerator is activated."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:500
+msgid "[Texture] icon for the checked checkbox items."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:503
+msgid "[Font] used for the menu items."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:506
+msgid "The default text [Color] for menu items' names."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:509
+msgid ""
+"The text [Color] used for shortcuts and accelerators that show next to the "
+"menu item name when defined. See [method get_item_accelerator] for more info "
+"on accelerators."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:512
+msgid "[Color] used for disabled menu items' text."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:515
+msgid "[Color] used for the hovered text."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:518
+msgid "[Color] used for labeled separators' text. See [method add_separator]."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:521
+msgid "[StyleBox] displayed when the [PopupMenu] item is hovered."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:524
+msgid ""
+"The horizontal space between the item's name and the shortcut text/submenu "
+"arrow."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:527
+msgid ""
+"[StyleBox] for the left side of labeled separator. See [method "
+"add_separator]."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:530
+msgid ""
+"[StyleBox] for the right side of labeled separator. See [method "
+"add_separator]."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:533
+msgid "Default [StyleBox] of the [PopupMenu] items."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:536
+msgid "[StyleBox] used when the [PopupMenu] item is disabled."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:539
+msgid "[Texture] icon for the checked radio button items."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:542
+msgid "[Texture] icon for the unchecked radio button items."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:545
+msgid "[StyleBox] used for the separators. See [method add_separator]."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:548
+msgid "[Texture] icon for the submenu arrow."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:551
+msgid "[Texture] icon for the unchecked checkbox items."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml:554
+msgid "The vertical space between each menu item."
+msgstr ""
+
+#: doc/classes/PopupPanel.xml:4
+msgid "Class for displaying popups with a panel background."
+msgstr ""
+
+#: doc/classes/PopupPanel.xml:7
+msgid ""
+"Class for displaying popups with a panel background. In some cases it might "
+"be simpler to use than [Popup], since it provides a configurable background. "
+"If you are making windows, better check [WindowDialog]."
+msgstr ""
+
+#: doc/classes/PopupPanel.xml:17
+msgid "The background panel style of this [PopupPanel]."
+msgstr ""
+
+#: doc/classes/Portal.xml:4
+msgid "Portal nodes are used to enable visibility between [Room]s."
+msgstr ""
+
+#: doc/classes/Portal.xml:7
+msgid ""
+"[Portal]s are a special type of [MeshInstance] that allow the portal culling "
+"system to 'see' from one room to the next. They often correspond to doors "
+"and windows in level geometry. By only allowing [Camera]s to see through "
+"portals, this allows the system to cull out all the objects in rooms that "
+"cannot be seen through portals. This is a form of [b]occlusion culling[/b], "
+"and can greatly increase performance.\n"
+"There are some limitations to the form of portals:\n"
+"They must be single sided convex polygons, and usually you would orientate "
+"their front faces [b]outward[/b] from the [Room] they are placed in. The "
+"vertices should be positioned on a single plane (although their positioning "
+"does not have to be perfect).\n"
+"There is no need to place an opposite portal in an adjacent room, links are "
+"made two-way automatically."
+msgstr ""
+
+#: doc/classes/Portal.xml:20 doc/classes/Room.xml:21
+msgid "Sets individual points. Primarily for use by the editor."
+msgstr ""
+
+#: doc/classes/Portal.xml:26
+msgid ""
+"This is a shortcut for setting the linked [Room] in the name of the [Portal] "
+"(the name is used during conversion)."
+msgstr ""
+
+#: doc/classes/Portal.xml:29
+msgid ""
+"The points defining the shape of the [Portal] polygon (which should be "
+"convex).\n"
+"These are defined in 2D, with [code]0,0[/code] being the origin of the "
+"[Portal] node's [member Spatial.global_transform].\n"
+"[b]Note:[/b] These raw points are sanitized for winding order internally."
+msgstr ""
+
+#: doc/classes/Portal.xml:34
+msgid ""
+"Visibility through [Portal]s can be turned on and off at runtime - this is "
+"useful for having closable doors."
+msgstr ""
+
+#: doc/classes/Portal.xml:37
+msgid ""
+"Some objects are so big that they may be present in more than one [Room] "
+"('sprawling'). As we often don't want objects that *just* breach the edges "
+"to be assigned to neighbouring rooms, you can assign an extra margin through "
+"the [Portal] to allow objects to breach without sprawling."
+msgstr ""
+
+#: doc/classes/Portal.xml:40
+msgid ""
+"Portals default to being two way - see through in both directions, however "
+"you can make them one way, visible from the source room only."
+msgstr ""
+
+#: doc/classes/Portal.xml:43
+msgid ""
+"In most cases you will want to use the default [Portal] margin in your "
+"portals (this is set in the [RoomManager]).\n"
+"If you want to override this default, set this value to [code]false[/code], "
+"and the local [member portal_margin] will take effect."
+msgstr ""
+
+#: doc/classes/Position2D.xml:4
+msgid "Generic 2D position hint for editing."
+msgstr ""
+
+#: doc/classes/Position2D.xml:7
+msgid ""
+"Generic 2D position hint for editing. It's just like a plain [Node2D], but "
+"it displays as a cross in the 2D editor at all times. You can set cross' "
+"visual size by using the gizmo in the 2D editor while the node is selected."
+msgstr ""
+
+#: doc/classes/Position3D.xml:4
+msgid "Generic 3D position hint for editing."
+msgstr ""
+
+#: doc/classes/Position3D.xml:7
+msgid ""
+"Generic 3D position hint for editing. It's just like a plain [Spatial], but "
+"it displays as a cross in the 3D editor at all times."
+msgstr ""
+
+#: doc/classes/PrimitiveMesh.xml:4
+msgid ""
+"Base class for all primitive meshes. Handles applying a [Material] to a "
+"primitive mesh."
+msgstr ""
+
+#: doc/classes/PrimitiveMesh.xml:7
+msgid ""
+"Base class for all primitive meshes. Handles applying a [Material] to a "
+"primitive mesh. Examples include [CapsuleMesh], [CubeMesh], [CylinderMesh], "
+"[PlaneMesh], [PrismMesh], [QuadMesh], and [SphereMesh]."
+msgstr ""
+
+#: doc/classes/PrimitiveMesh.xml:15
+msgid ""
+"Returns mesh arrays used to constitute surface of [Mesh]. The result can be "
+"passed to [method ArrayMesh.add_surface_from_arrays] to create a new "
+"surface. For example:\n"
+"[codeblock]\n"
+"var c := CylinderMesh.new()\n"
+"var arr_mesh := ArrayMesh.new()\n"
+"arr_mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, c."
+"get_mesh_arrays())\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/PrimitiveMesh.xml:29
+msgid ""
+"If set, the order of the vertices in each triangle are reversed resulting in "
+"the backside of the mesh being drawn.\n"
+"This gives the same result as using [constant SpatialMaterial.CULL_BACK] in "
+"[member SpatialMaterial.params_cull_mode]."
+msgstr ""
+
+#: doc/classes/PrimitiveMesh.xml:33
+msgid "The current [Material] of the primitive mesh."
+msgstr ""
+
+#: doc/classes/PrismMesh.xml:4 doc/classes/PrismMesh.xml:7
+msgid "Class representing a prism-shaped [PrimitiveMesh]."
+msgstr ""
+
+#: doc/classes/PrismMesh.xml:15
+msgid ""
+"Displacement of the upper edge along the X axis. 0.0 positions edge straight "
+"above the bottom-left edge."
+msgstr ""
+
+#: doc/classes/PrismMesh.xml:18
+msgid "Size of the prism."
+msgstr ""
+
+#: doc/classes/PrismMesh.xml:21
+msgid "Number of added edge loops along the Z axis."
+msgstr ""
+
+#: doc/classes/PrismMesh.xml:24
+msgid "Number of added edge loops along the Y axis."
+msgstr ""
+
+#: doc/classes/PrismMesh.xml:27
+msgid "Number of added edge loops along the X axis."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:4
+msgid ""
+"Type of [Sky] that is generated procedurally based on user input parameters."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:7
+msgid ""
+"ProceduralSky provides a way to create an effective background quickly by "
+"defining procedural parameters for the sun, the sky and the ground. The sky "
+"and ground are very similar, they are defined by a color at the horizon, "
+"another color, and finally an easing curve to interpolate between these two "
+"colors. Similarly, the sun is described by a position in the sky, a color, "
+"and an easing curve. However, the sun also defines a minimum and maximum "
+"angle, these two values define at what distance the easing curve begins and "
+"ends from the sun, and thus end up defining the size of the sun in the sky.\n"
+"The ProceduralSky is updated on the CPU after the parameters change. It is "
+"stored in a texture and then displayed as a background in the scene. This "
+"makes it relatively unsuitable for real-time updates during gameplay. "
+"However, with a small enough texture size, it can still be updated "
+"relatively frequently, as it is updated on a background thread when multi-"
+"threading is available."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:16
+msgid "Color of the ground at the bottom."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:19
+msgid ""
+"How quickly the [member ground_horizon_color] fades into the [member "
+"ground_bottom_color]."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:22
+msgid "Amount of energy contribution from the ground."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:25
+msgid "Color of the ground at the horizon."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:28
+msgid ""
+"How quickly the [member sky_horizon_color] fades into the [member "
+"sky_top_color]."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:31
+msgid "Amount of energy contribution from the sky."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:34
+msgid "Color of the sky at the horizon."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:37
+msgid "Color of the sky at the top."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:40
+msgid "Distance from center of sun where it fades out completely."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:43
+msgid "Distance from sun where it goes from solid to starting to fade."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:46
+msgid "The sun's color."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:49
+msgid ""
+"How quickly the sun fades away between [member sun_angle_min] and [member "
+"sun_angle_max]."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:52
+msgid "Amount of energy contribution from the sun."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:55
+msgid "The sun's height using polar coordinates."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:58
+msgid "The direction of the sun using polar coordinates."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:61
+msgid ""
+"Size of [Texture] that the ProceduralSky will generate. The size is set "
+"using [enum TextureSize]."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:66
+msgid "Sky texture will be 256x128."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:69
+msgid "Sky texture will be 512x256."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:72
+msgid "Sky texture will be 1024x512. This is the default size."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:75
+msgid "Sky texture will be 2048x1024."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:78
+msgid "Sky texture will be 4096x2048."
+msgstr ""
+
+#: doc/classes/ProceduralSky.xml:81
+msgid "Represents the size of the [enum TextureSize] enum."
+msgstr ""
+
+#: doc/classes/ProgressBar.xml:4
+msgid "General-purpose progress bar."
+msgstr ""
+
+#: doc/classes/ProgressBar.xml:7
+msgid "General-purpose progress bar. Shows fill percentage from right to left."
+msgstr ""
+
+#: doc/classes/ProgressBar.xml:15
+msgid "If [code]true[/code], the fill percentage is displayed on the bar."
+msgstr ""
+
+#: doc/classes/ProgressBar.xml:24
+msgid "The style of the background."
+msgstr ""
+
+#: doc/classes/ProgressBar.xml:27
+msgid "The style of the progress (i.e. the part that fills the bar)."
+msgstr ""
+
+#: doc/classes/ProgressBar.xml:30
+msgid ""
+"Font used to draw the fill percentage if [member percent_visible] is "
+"[code]true[/code]."
+msgstr ""
+
+#: doc/classes/ProgressBar.xml:33
+msgid "The color of the text."
+msgstr ""
+
+#: doc/classes/ProgressBar.xml:36
+msgid "The color of the text's shadow."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:4
+msgid "Contains global variables accessible from everywhere."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:7
+msgid ""
+"Contains global variables accessible from everywhere. Use [method "
+"get_setting], [method set_setting] or [method has_setting] to access them. "
+"Variables stored in [code]project.godot[/code] are also loaded into "
+"ProjectSettings, making this object very useful for reading custom game "
+"configuration options.\n"
+"When naming a Project Settings property, use the full path to the setting "
+"including the category. For example, [code]\"application/config/name\"[/"
+"code] for the project name. Category and property names can be viewed in the "
+"Project Settings dialog.\n"
+"[b]Feature tags:[/b] Project settings can be overridden for specific "
+"platforms and configurations (debug, release, ...) using [url=https://docs."
+"godotengine.org/en/latest/tutorials/export/feature_tags.html]feature tags[/"
+"url].\n"
+"[b]Overriding:[/b] Any project setting can be overridden by creating a file "
+"named [code]override.cfg[/code] in the project's root directory. This can "
+"also be used in exported projects by placing this file in the same directory "
+"as the project binary. Overriding will still take the base project "
+"settings' [url=https://docs.godotengine.org/en/latest/tutorials/export/"
+"feature_tags.html]feature tags[/url] in account. Therefore, make sure to "
+"[i]also[/i] override the setting with the desired feature tags if you want "
+"them to override base project settings on all platforms and configurations."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:22
+msgid ""
+"Adds a custom property info to a property. The dictionary must contain:\n"
+"- [code]name[/code]: [String] (the property's name)\n"
+"- [code]type[/code]: [int] (see [enum Variant.Type])\n"
+"- optionally [code]hint[/code]: [int] (see [enum PropertyHint]) and "
+"[code]hint_string[/code]: [String]\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"ProjectSettings.set(\"category/property_name\", 0)\n"
+"\n"
+"var property_info = {\n"
+" \"name\": \"category/property_name\",\n"
+" \"type\": TYPE_INT,\n"
+" \"hint\": PROPERTY_HINT_ENUM,\n"
+" \"hint_string\": \"one,two,three\"\n"
+"}\n"
+"\n"
+"ProjectSettings.add_property_info(property_info)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:45
+msgid "Clears the whole configuration (not recommended, may break things)."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:52
+msgid ""
+"Returns the order of a configuration value (influences when saved to the "
+"config file)."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:59
+msgid ""
+"Returns the value of a setting.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"print(ProjectSettings.get_setting(\"application/config/name\"))\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:70
+msgid ""
+"Returns the absolute, native OS path corresponding to the localized "
+"[code]path[/code] (starting with [code]res://[/code] or [code]user://[/"
+"code]). The returned path will vary depending on the operating system and "
+"user preferences. See [url=https://docs.godotengine.org/en/3.4/tutorials/io/"
+"data_paths.html]File paths in Godot projects[/url] to see what those paths "
+"convert to. See also [method localize_path].\n"
+"[b]Note:[/b] [method globalize_path] with [code]res://[/code] will not work "
+"in an exported project. Instead, prepend the executable's base directory to "
+"the path when running from an exported project:\n"
+"[codeblock]\n"
+"var path = \"\"\n"
+"if OS.has_feature(\"editor\"):\n"
+" # Running from an editor binary.\n"
+" # `path` will contain the absolute path to `hello.txt` located in the "
+"project root.\n"
+" path = ProjectSettings.globalize_path(\"res://hello.txt\")\n"
+"else:\n"
+" # Running from an exported project.\n"
+" # `path` will contain the absolute path to `hello.txt` next to the "
+"executable.\n"
+" # This is *not* identical to using `ProjectSettings.globalize_path()` "
+"with a `res://` path,\n"
+" # but is close enough in spirit.\n"
+" path = OS.get_executable_path().get_base_dir().plus_file(\"hello.txt\")\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:91
+msgid "Returns [code]true[/code] if a configuration value is present."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:100
+msgid ""
+"Loads the contents of the .pck or .zip file specified by [code]pack[/code] "
+"into the resource filesystem ([code]res://[/code]). Returns [code]true[/"
+"code] on success.\n"
+"[b]Note:[/b] If a file from [code]pack[/code] shares the same path as a file "
+"already in the resource filesystem, any attempts to load that file will use "
+"the file from [code]pack[/code] unless [code]replace_files[/code] is set to "
+"[code]false[/code].\n"
+"[b]Note:[/b] The optional [code]offset[/code] parameter can be used to "
+"specify the offset in bytes to the start of the resource pack. This is only "
+"supported for .pck files."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:109
+msgid ""
+"Returns the localized path (starting with [code]res://[/code]) corresponding "
+"to the absolute, native OS [code]path[/code]. See also [method "
+"globalize_path]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:116
+msgid ""
+"Returns [code]true[/code] if the specified property exists and its initial "
+"value differs from the current value."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:123
+msgid ""
+"Returns the specified property's initial value. Returns [code]null[/code] if "
+"the property does not exist."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:129
+msgid ""
+"Saves the configuration to the [code]project.godot[/code] file.\n"
+"[b]Note:[/b] This method is intended to be used by editor plugins, as "
+"modified [ProjectSettings] can't be loaded back in the running app. If you "
+"want to change project settings in exported projects, use [method "
+"save_custom] to save [code]override.cfg[/code] file."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:137
+msgid ""
+"Saves the configuration to a custom file. The file extension must be [code]."
+"godot[/code] (to save in text-based [ConfigFile] format) or [code].binary[/"
+"code] (to save in binary format). You can also save [code]override.cfg[/"
+"code] file, which is also text, but can be used in exported projects unlike "
+"other formats."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:145
+msgid ""
+"Sets the specified property's initial value. This is the value the property "
+"reverts to."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:153
+msgid ""
+"Sets the order of a configuration value (influences when saved to the config "
+"file)."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:161
+msgid ""
+"Sets the value of a setting.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"ProjectSettings.set_setting(\"application/config/name\", \"Example\")\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:171
+msgid ""
+"Comma-separated list of custom Android modules (which must have been built "
+"in the Android export templates) using their Java package path, e.g. "
+"[code]\"org/godotengine/godot/MyCustomSingleton,com/example/foo/"
+"FrenchFriesFactory\"[/code].\n"
+"[b]Note:[/b] Since Godot 3.2.2, the [code]org/godotengine/godot/"
+"GodotPaymentV3[/code] module was deprecated and replaced by the "
+"[code]GodotPayment[/code] plugin which should be enabled in the Android "
+"export preset under [code]Plugins[/code] section. The singleton to access in "
+"code was also renamed to [code]GodotPayment[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:175
+msgid "Background color for the boot splash."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:178
+msgid ""
+"If [code]true[/code], scale the boot splash image to the full window length "
+"when engine starts. If [code]false[/code], the engine will leave it at the "
+"default pixel size."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:181
+msgid "Path to an image used as the boot splash."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:184
+msgid ""
+"If [code]true[/code], applies linear filtering when scaling the image "
+"(recommended for high resolution artwork). If [code]false[/code], uses "
+"nearest-neighbor interpolation (recommended for pixel art)."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:187
+msgid ""
+"This user directory is used for storing persistent data ([code]user://[/"
+"code] filesystem). If left empty, [code]user://[/code] resolves to a project-"
+"specific folder in Godot's own configuration folder (see [method OS."
+"get_user_data_dir]). If a custom directory name is defined, this name will "
+"be used instead and appended to the system-specific user data directory "
+"(same parent folder as the Godot configuration folder documented in [method "
+"OS.get_user_data_dir]).\n"
+"The [member application/config/use_custom_user_dir] setting must be enabled "
+"for this to take effect."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:191
+msgid ""
+"The project's description, displayed as a tooltip in the Project Manager "
+"when hovering the project."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:194
+msgid ""
+"Icon used for the project, set when project loads. Exporters will also use "
+"this icon when possible."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:197
+msgid ""
+"Icon set in [code].icns[/code] format used on macOS to set the game's icon. "
+"This is done automatically on start by calling [method OS.set_native_icon]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:200
+msgid ""
+"The project's name. It is used both by the Project Manager and by exporters. "
+"The project name can be translated by translating its value in localization "
+"files. The window title will be set to match the project name automatically "
+"on startup.\n"
+"[b]Note:[/b] Changing this value will also change the user data folder's "
+"path if [member application/config/use_custom_user_dir] is [code]false[/"
+"code]. After renaming the project, you will no longer be able to access "
+"existing data in [code]user://[/code] unless you rename the old folder to "
+"match the new project name. See [url=https://docs.godotengine.org/en/3.4/"
+"tutorials/io/data_paths.html]Data paths[/url] in the documentation for more "
+"information."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:204
+msgid ""
+"Specifies a file to override project settings. For example: [code]user://"
+"custom_settings.cfg[/code]. See \"Overriding\" in the [ProjectSettings] "
+"class description at the top for more information.\n"
+"[b]Note:[/b] Regardless of this setting's value, [code]res://override.cfg[/"
+"code] will still be read to override the project settings."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:208
+msgid ""
+"If [code]true[/code], the project will save user data to its own user "
+"directory (see [member application/config/custom_user_dir_name]). This "
+"setting is only effective on desktop platforms. A name must be set in the "
+"[member application/config/custom_user_dir_name] setting for this to take "
+"effect. If [code]false[/code], the project will save user data to [code](OS "
+"user data directory)/Godot/app_userdata/(project name)[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:211
+msgid ""
+"If [code]true[/code], the project will use a hidden directory ([code]."
+"import[/code]) for storing project-specific data (metadata, shader cache, "
+"etc.).\n"
+"If [code]false[/code], a non-hidden directory ([code]import[/code]) will be "
+"used instead.\n"
+"[b]Note:[/b] Restart the application after changing this setting.\n"
+"[b]Note:[/b] Changing this value can help on platforms or with third-party "
+"tools where hidden directory patterns are disallowed. Only modify this "
+"setting if you know that your environment requires it, as changing the "
+"default can impact compatibility with some external tools or plugins which "
+"expect the default [code].import[/code] folder."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:217
+msgid ""
+"Icon set in [code].ico[/code] format used on Windows to set the game's icon. "
+"This is done automatically on start by calling [method OS.set_native_icon]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:220
+msgid ""
+"Time samples for frame deltas are subject to random variation introduced by "
+"the platform, even when frames are displayed at regular intervals thanks to "
+"V-Sync. This can lead to jitter. Delta smoothing can often give a better "
+"result by filtering the input deltas to correct for minor fluctuations from "
+"the refresh rate.\n"
+"[b]Note:[/b] Delta smoothing is only attempted when [member display/window/"
+"vsync/use_vsync] is switched on, as it does not work well without V-Sync.\n"
+"It may take several seconds at a stable frame rate before the smoothing is "
+"initially activated. It will only be active on machines where performance is "
+"adequate to render frames at the refresh rate."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:225
+msgid ""
+"[b]Experimental.[/b] Shifts the measurement of delta time for each frame to "
+"just after the drawing has taken place. This may lead to more consistent "
+"deltas and a reduction in frame stutters."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:228
+msgid ""
+"If [code]true[/code], disables printing to standard error. If [code]true[/"
+"code], this also hides error and warning messages printed by [method "
+"@GDScript.push_error] and [method @GDScript.push_warning]. See also [member "
+"application/run/disable_stdout].\n"
+"Changes to this setting will only be applied upon restarting the application."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:232
+msgid ""
+"If [code]true[/code], disables printing to standard output. This is "
+"equivalent to starting the editor or project with the [code]--quiet[/code] "
+"command line argument. See also [member application/run/disable_stderr].\n"
+"Changes to this setting will only be applied upon restarting the application."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:236
+msgid ""
+"If [code]true[/code], flushes the standard output stream every time a line "
+"is printed. This affects both terminal logging and file logging.\n"
+"When running a project, this setting must be enabled if you want logs to be "
+"collected by service managers such as systemd/journalctl. This setting is "
+"disabled by default on release builds, since flushing on every printed line "
+"will negatively affect performance if lots of lines are printed in a rapid "
+"succession. Also, if this setting is enabled, logged files will still be "
+"written successfully if the application crashes or is otherwise killed by "
+"the user (without being closed \"normally\").\n"
+"[b]Note:[/b] Regardless of this setting, the standard error stream "
+"([code]stderr[/code]) is always flushed when a line is printed to it.\n"
+"Changes to this setting will only be applied upon restarting the application."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:242
+msgid ""
+"Debug build override for [member application/run/flush_stdout_on_print], as "
+"performance is less important during debugging.\n"
+"Changes to this setting will only be applied upon restarting the application."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:246
+msgid ""
+"Forces a delay between frames in the main loop (in milliseconds). This may "
+"be useful if you plan to disable vertical synchronization."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:249
+msgid ""
+"If [code]true[/code], enables low-processor usage mode. This setting only "
+"works on desktop platforms. The screen is not redrawn if nothing changes "
+"visually. This is meant for writing applications and editors, but is pretty "
+"useless (and can hurt performance) in most games."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:252
+msgid ""
+"Amount of sleeping between frames when the low-processor usage mode is "
+"enabled (in microseconds). Higher values will result in lower CPU usage."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:255
+msgid "Path to the main scene file that will be loaded when the project runs."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:258 doc/classes/ProjectSettings.xml:261
+msgid ""
+"Audio buses will disable automatically when sound goes below a given dB "
+"threshold for a given time. This saves CPU as effects assigned to that bus "
+"will no longer do any processing."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:264
+msgid ""
+"Default [AudioBusLayout] resource file to use in the project, unless "
+"overridden by the scene."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:267
+msgid ""
+"Specifies the audio driver to use. This setting is platform-dependent as "
+"each platform supports different audio drivers. If left empty, the default "
+"audio driver will be used."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:270
+msgid ""
+"If [code]true[/code], microphone input will be allowed. This requires "
+"appropriate permissions to be set when exporting to Android or iOS."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:273
+msgid ""
+"The mixing rate used for audio (in Hz). In general, it's better to not touch "
+"this and leave it to the host operating system."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:276
+msgid ""
+"Safer override for [member audio/mix_rate] in the Web platform. Here "
+"[code]0[/code] means \"let the browser choose\" (since some browsers do not "
+"like forcing the mix rate)."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:279
+msgid ""
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:284
+msgid ""
+"Safer override for [member audio/output_latency] in the Web platform, to "
+"avoid audio issues especially on mobile devices."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:287
+msgid ""
+"Setting to hardcode audio delay when playing video. Best to leave this "
+"untouched unless you know what you are doing."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:290
+msgid ""
+"The default compression level for gzip. Affects compressed scenes and "
+"resources. Higher levels result in smaller files at the cost of compression "
+"speed. Decompression speed is mostly unaffected by the compression level. "
+"[code]-1[/code] uses the default gzip compression level, which is identical "
+"to [code]6[/code] but could change in the future due to underlying zlib "
+"updates."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:293
+msgid ""
+"The default compression level for Zlib. Affects compressed scenes and "
+"resources. Higher levels result in smaller files at the cost of compression "
+"speed. Decompression speed is mostly unaffected by the compression level. "
+"[code]-1[/code] uses the default gzip compression level, which is identical "
+"to [code]6[/code] but could change in the future due to underlying zlib "
+"updates."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:296
+msgid ""
+"The default compression level for Zstandard. Affects compressed scenes and "
+"resources. Higher levels result in smaller files at the cost of compression "
+"speed. Decompression speed is mostly unaffected by the compression level."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:299
+msgid ""
+"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
+"distance matching[/url] in Zstandard."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:302
+msgid ""
+"Largest size limit (in power of 2) allowed when compressing using long-"
+"distance matching with Zstandard. Higher values can result in better "
+"compression, but will require more memory when compressing and decompressing."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:305
+msgid ""
+"If [code]true[/code], displays getters and setters in autocompletion results "
+"in the script editor. This setting is meant to be used when porting old "
+"projects (Godot 2), as using member variables is the preferred style from "
+"Godot 3 onwards."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:308
+msgid ""
+"If [code]true[/code], enables warnings when a constant is used as a function."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:311
+msgid ""
+"If [code]true[/code], enables warnings when deprecated keywords such as "
+"[code]slave[/code] are used."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:314
+msgid ""
+"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
+"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
+"GDScript warnings."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:317
+msgid ""
+"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
+"not generate warnings."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:320
+msgid ""
+"If [code]true[/code], enables warnings when a function is declared with the "
+"same name as a constant."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:323
+msgid ""
+"If [code]true[/code], enables warnings when a function is declared with the "
+"same name as a variable. This will turn into an error in a future version "
+"when first-class functions become supported in GDScript."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:326
+msgid ""
+"If [code]true[/code], enables warnings when a function assigned to a "
+"variable may yield and return a function state instead of a value."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:329
+msgid ""
+"If [code]true[/code], enables warnings when using a function as if it was a "
+"property."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:332
+msgid ""
+"If [code]true[/code], enables warnings when a ternary operator may emit "
+"values with incompatible types."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:335
+msgid ""
+"If [code]true[/code], enables warnings when dividing an integer by another "
+"integer (the decimal part will be discarded)."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:338
+msgid ""
+"If [code]true[/code], enables warnings when passing a floating-point value "
+"to a function that expects an integer (it will be converted and lose "
+"precision)."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:341
+msgid ""
+"If [code]true[/code], enables warnings when using a property as if it was a "
+"function."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:344
+msgid ""
+"If [code]true[/code], enables warnings when calling a function without using "
+"its return value (by assigning it to a variable or using it as a function "
+"argument). Such return values are sometimes used to denote possible errors "
+"using the [enum Error] enum."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:347
+msgid ""
+"If [code]true[/code], enables warnings when defining a local or subclass "
+"member variable that would shadow a variable at an upper level (such as a "
+"member variable)."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:350
+msgid ""
+"If [code]true[/code], enables warnings when calling an expression that has "
+"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
+"statement."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:353
+msgid ""
+"If [code]true[/code], enables warnings when calling a ternary expression "
+"that has no effect on the surrounding code, such as writing [code]42 if "
+"active else 0[/code] as a statement."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:356
+msgid ""
+"If [code]true[/code], all warnings will be reported as if they were errors."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:359
+msgid ""
+"If [code]true[/code], enables warnings when using a variable that wasn't "
+"previously assigned."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:362
+msgid ""
+"If [code]true[/code], enables warnings when assigning a variable using an "
+"assignment operator like [code]+=[/code] if the variable wasn't previously "
+"assigned."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:365
+msgid ""
+"If [code]true[/code], enables warnings when unreachable code is detected "
+"(such as after a [code]return[/code] statement that will always be executed)."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:368
+msgid ""
+"If [code]true[/code], enables warnings when using an expression whose type "
+"may not be compatible with the function parameter expected."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:371
+msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:374
+msgid ""
+"If [code]true[/code], enables warnings when calling a method whose presence "
+"is not guaranteed at compile-time in the class."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:377
+msgid ""
+"If [code]true[/code], enables warnings when accessing a property whose "
+"presence is not guaranteed at compile-time in the class."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:380
+msgid ""
+"If [code]true[/code], enables warnings when a function parameter is unused."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:383
+msgid ""
+"If [code]true[/code], enables warnings when a member variable is unused."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:386
+msgid "If [code]true[/code], enables warnings when a signal is unused."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:389
+msgid "If [code]true[/code], enables warnings when a local variable is unused."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:392
+msgid ""
+"If [code]true[/code], enables warnings when a variable is declared with the "
+"same name as a function. This will turn into an error in a future version "
+"when first-class functions become supported in GDScript."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:395
+msgid ""
+"If [code]true[/code], enables warnings when assigning the result of a "
+"function that returns [code]void[/code] to a variable."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:398
+msgid "Message to be displayed before the backtrace when the engine crashes."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:401
+msgid ""
+"Maximum number of frames per second allowed. The actual number of frames per "
+"second may still be below this value if the game is lagging.\n"
+"If [member display/window/vsync/use_vsync] is enabled, it takes precedence "
+"and the forced FPS number cannot exceed the monitor's refresh rate.\n"
+"This setting is therefore mostly relevant for lowering the maximum FPS below "
+"VSync, e.g. to perform non-real-time rendering of static frames, or test the "
+"project under lag conditions."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:406
+msgid "Maximum call stack allowed for debugging GDScript."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:409
+msgid "Maximum amount of functions per frame allowed when profiling."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:412
+msgid "Print frames per second to standard output every second."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:415
+msgid ""
+"Print more information to standard output when running. It displays "
+"information such as memory leaks, which scenes and resources are being "
+"loaded, etc."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:418
+msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:421
+msgid ""
+"Color of the contact points between collision shapes, visible when \"Visible "
+"Collision Shapes\" is enabled in the Debug menu."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:424
+msgid ""
+"Sets whether 2D physics will display collision outlines in game when "
+"\"Visible Collision Shapes\" is enabled in the Debug menu."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:427
+msgid ""
+"Maximum number of contact points between collision shapes to display when "
+"\"Visible Collision Shapes\" is enabled in the Debug menu."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:430
+msgid ""
+"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
+"enabled in the Debug menu."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:433
+msgid ""
+"Color of the disabled navigation geometry, visible when \"Visible Navigation"
+"\" is enabled in the Debug menu."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:436
+msgid ""
+"Color of the navigation geometry, visible when \"Visible Navigation\" is "
+"enabled in the Debug menu."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:439
+msgid "Custom image for the mouse cursor (limited to 256×256)."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:442
+msgid "Hotspot for the custom mouse cursor image."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:445
+msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:448
+msgid ""
+"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
+"platform. This setting has no effect on desktop Linux, as DPI-awareness "
+"fallbacks are not supported there."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:451
+msgid ""
+"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
+"the screensaver does not take over. Works on desktop and mobile platforms."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:454
+msgid ""
+"The default screen orientation to use on mobile devices.\n"
+"[b]Note:[/b] When set to a portrait orientation, this project setting does "
+"not flip the project resolution's width and height automatically. Instead, "
+"you have to set [member display/window/size/width] and [member display/"
+"window/size/height] accordingly."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:458
+msgid ""
+"If [code]true[/code], the home indicator is hidden automatically. This only "
+"affects iOS devices without a physical home button."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:461
+msgid ""
+"If [code]true[/code], allows per-pixel transparency for the window "
+"background. This affects performance, so leave it on [code]false[/code] "
+"unless you need it.\n"
+"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
+"[b]Note:[/b] This feature is implemented on HTML5, Linux, macOS, Windows, "
+"and Android."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:466
+msgid ""
+"Sets the window background to transparent when it starts.\n"
+"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
+"[b]Note:[/b] This feature is implemented on HTML5, Linux, macOS, Windows, "
+"and Android."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:471
+msgid ""
+"Forces the main window to be always on top.\n"
+"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:475
+msgid ""
+"Forces the main window to be borderless.\n"
+"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:479
+msgid ""
+"Sets the main window to full screen when the project starts. Note that this "
+"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
+"window is used to emulate fullscreen. On macOS, a new desktop is used to "
+"display the running project.\n"
+"Regardless of the platform, enabling fullscreen will change the window size "
+"to match the monitor's size. Therefore, make sure your project supports "
+"[url=https://docs.godotengine.org/en/3.4/tutorials/rendering/"
+"multiple_resolutions.html]multiple resolutions[/url] when enabling "
+"fullscreen mode.\n"
+"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:484
+msgid ""
+"Sets the game's main viewport height. On desktop platforms, this is the "
+"default window size. Stretch mode settings also use this as a reference when "
+"enabled."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:487
+msgid ""
+"Allows the window to be resizable by default.\n"
+"[b]Note:[/b] This setting is ignored on iOS and Android."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:491
+msgid ""
+"If greater than zero, overrides the window height when running the game. "
+"Useful for testing stretch modes."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:494
+msgid ""
+"If greater than zero, overrides the window width when running the game. "
+"Useful for testing stretch modes."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:497
+msgid ""
+"Sets the game's main viewport width. On desktop platforms, this is the "
+"default window size. Stretch mode settings also use this as a reference when "
+"enabled."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:500
+msgid ""
+"Specifies the tablet driver to use. If left empty, the default driver will "
+"be used."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:503
+msgid ""
+"If [code]true[/code], enables vertical synchronization. This eliminates "
+"tearing that may appear in moving scenes, at the cost of higher input "
+"latency and stuttering at lower framerates. If [code]false[/code], vertical "
+"synchronization will be disabled, however, many platforms will enforce it "
+"regardless (such as mobile platforms and HTML5)."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:506
+msgid ""
+"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
+"enables vertical synchronization via the operating system's window "
+"compositor when in windowed mode and the compositor is enabled. This will "
+"prevent stutter in certain situations. (Windows only.)\n"
+"[b]Note:[/b] This option is experimental and meant to alleviate stutter "
+"experienced by some users. However, some users have experienced a Vsync "
+"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:510
+msgid ""
+"The command-line arguments to append to Godot's own command line when "
+"running the project. This doesn't affect the editor itself.\n"
+"It is possible to make another executable run Godot by using the "
+"[code]%command%[/code] placeholder. The placeholder will be replaced with "
+"Godot's own command line. Program-specific arguments should be placed "
+"[i]before[/i] the placeholder, whereas Godot-specific arguments should be "
+"placed [i]after[/i] the placeholder.\n"
+"For example, this can be used to force the project to run on the dedicated "
+"GPU in a NVIDIA Optimus system on Linux:\n"
+"[codeblock]\n"
+"prime-run %command%\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:518
+msgid ""
+"Search path for project-specific script templates. Godot will search for "
+"script templates both in the editor-specific path and in this project-"
+"specific path."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:521
+msgid ""
+"Text-based file extensions to include in the script editor's \"Find in Files"
+"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
+"your scene files, especially if you use built-in scripts which are "
+"serialized in the scene files."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:524
+msgid ""
+"Default value for [member ScrollContainer.scroll_deadzone], which will be "
+"used for all [ScrollContainer]s unless overridden."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:527
+msgid ""
+"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
+"UWP to follow interface conventions."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:532
+msgid ""
+"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
+"code] or generic [code]tres[/code]/[code]res[/code] extension)."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:535
+msgid ""
+"Path to a custom [Font] resource to use as default for all GUI elements of "
+"the project."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:538
+msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:541
+msgid ""
+"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
+"(in milliseconds)."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:544
+msgid "Timer for detecting idle in [TextEdit] (in seconds)."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:547
+msgid "Default delay for tooltips (in seconds)."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:550
+msgid ""
+"Default [InputEventAction] to confirm a focused button, menu or list item, "
+"or validate input.\n"
+"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
+"necessary for the internal logic of several [Control]s. The events assigned "
+"to the action can however be modified."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:554
+msgid ""
+"Default [InputEventAction] to discard a modal or pending input.\n"
+"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
+"necessary for the internal logic of several [Control]s. The events assigned "
+"to the action can however be modified."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:558
+msgid ""
+"Default [InputEventAction] to move down in the UI.\n"
+"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
+"necessary for the internal logic of several [Control]s. The events assigned "
+"to the action can however be modified."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:562
+msgid ""
+"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
+"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
+"KEY_END] on typical desktop UI systems.\n"
+"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
+"necessary for the internal logic of several [Control]s. The events assigned "
+"to the action can however be modified."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:566
+msgid ""
+"Default [InputEventAction] to focus the next [Control] in the scene. The "
+"focus behavior can be configured via [member Control.focus_next].\n"
+"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
+"necessary for the internal logic of several [Control]s. The events assigned "
+"to the action can however be modified."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:570
+msgid ""
+"Default [InputEventAction] to focus the previous [Control] in the scene. The "
+"focus behavior can be configured via [member Control.focus_previous].\n"
+"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
+"necessary for the internal logic of several [Control]s. The events assigned "
+"to the action can however be modified."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:574
+msgid ""
+"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
+"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
+"KEY_HOME] on typical desktop UI systems.\n"
+"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
+"necessary for the internal logic of several [Control]s. The events assigned "
+"to the action can however be modified."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:578
+msgid ""
+"Default [InputEventAction] to move left in the UI.\n"
+"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
+"necessary for the internal logic of several [Control]s. The events assigned "
+"to the action can however be modified."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:582
+msgid ""
+"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
+"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
+"typical desktop UI systems.\n"
+"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
+"necessary for the internal logic of several [Control]s. The events assigned "
+"to the action can however be modified."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:586
+msgid ""
+"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
+"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
+"typical desktop UI systems.\n"
+"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
+"necessary for the internal logic of several [Control]s. The events assigned "
+"to the action can however be modified."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:590
+msgid ""
+"Default [InputEventAction] to move right in the UI.\n"
+"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
+"necessary for the internal logic of several [Control]s. The events assigned "
+"to the action can however be modified."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:594
+msgid ""
+"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
+"[ItemList] or a [Tree]).\n"
+"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
+"necessary for the internal logic of several [Control]s. The events assigned "
+"to the action can however be modified."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:598
+msgid ""
+"Default [InputEventAction] to move up in the UI.\n"
+"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
+"necessary for the internal logic of several [Control]s. The events assigned "
+"to the action can however be modified."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:602
+msgid ""
+"If [code]true[/code], key/touch/joystick events will be flushed just before "
+"every idle and physics frame.\n"
+"If [code]false[/code], such events will be flushed only once per idle frame, "
+"between iterations of the engine.\n"
+"Enabling this can greatly improve the responsiveness to input, specially in "
+"devices that need to run multiple physics frames per visible (idle) frame, "
+"because they can't run at the target frame rate.\n"
+"[b]Note:[/b] Currently implemented only in Android."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:608
+msgid ""
+"If [code]true[/code], sends mouse input events when tapping or swiping on "
+"the touchscreen."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:611
+msgid ""
+"If [code]true[/code], sends touch input events when clicking or dragging the "
+"mouse."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:614
+msgid "Default delay for touch events. This only affects iOS devices."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:617
+msgid "Optional name for the 2D physics layer 1."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:620
+msgid "Optional name for the 2D physics layer 10."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:623
+msgid "Optional name for the 2D physics layer 11."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:626
+msgid "Optional name for the 2D physics layer 12."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:629
+msgid "Optional name for the 2D physics layer 13."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:632
+msgid "Optional name for the 2D physics layer 14."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:635
+msgid "Optional name for the 2D physics layer 15."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:638
+msgid "Optional name for the 2D physics layer 16."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:641
+msgid "Optional name for the 2D physics layer 17."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:644
+msgid "Optional name for the 2D physics layer 18."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:647
+msgid "Optional name for the 2D physics layer 19."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:650
+msgid "Optional name for the 2D physics layer 2."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:653
+msgid "Optional name for the 2D physics layer 20."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:656
+msgid "Optional name for the 2D physics layer 21."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:659
+msgid "Optional name for the 2D physics layer 22."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:662
+msgid "Optional name for the 2D physics layer 23."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:665
+msgid "Optional name for the 2D physics layer 24."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:668
+msgid "Optional name for the 2D physics layer 25."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:671
+msgid "Optional name for the 2D physics layer 26."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:674
+msgid "Optional name for the 2D physics layer 27."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:677
+msgid "Optional name for the 2D physics layer 28."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:680
+msgid "Optional name for the 2D physics layer 29."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:683
+msgid "Optional name for the 2D physics layer 3."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:686
+msgid "Optional name for the 2D physics layer 30."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:689
+msgid "Optional name for the 2D physics layer 31."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:692
+msgid "Optional name for the 2D physics layer 32."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:695
+msgid "Optional name for the 2D physics layer 4."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:698
+msgid "Optional name for the 2D physics layer 5."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:701
+msgid "Optional name for the 2D physics layer 6."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:704
+msgid "Optional name for the 2D physics layer 7."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:707
+msgid "Optional name for the 2D physics layer 8."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:710
+msgid "Optional name for the 2D physics layer 9."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:713
+msgid "Optional name for the 2D render layer 1."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:716
+msgid "Optional name for the 2D render layer 10."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:719
+msgid "Optional name for the 2D render layer 11."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:722
+msgid "Optional name for the 2D render layer 12."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:725
+msgid "Optional name for the 2D render layer 13."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:728
+msgid "Optional name for the 2D render layer 14."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:731
+msgid "Optional name for the 2D render layer 15."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:734
+msgid "Optional name for the 2D render layer 16."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:737
+msgid "Optional name for the 2D render layer 17."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:740
+msgid "Optional name for the 2D render layer 18."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:743
+msgid "Optional name for the 2D render layer 19."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:746
+msgid "Optional name for the 2D render layer 2."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:749
+msgid "Optional name for the 2D render layer 20."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:752
+msgid "Optional name for the 2D render layer 3."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:755
+msgid "Optional name for the 2D render layer 4."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:758
+msgid "Optional name for the 2D render layer 5."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:761
+msgid "Optional name for the 2D render layer 6."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:764
+msgid "Optional name for the 2D render layer 7."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:767
+msgid "Optional name for the 2D render layer 8."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:770
+msgid "Optional name for the 2D render layer 9."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:773
+msgid "Optional name for the 3D physics layer 1."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:776
+msgid "Optional name for the 3D physics layer 10."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:779
+msgid "Optional name for the 3D physics layer 11."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:782
+msgid "Optional name for the 3D physics layer 12."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:785
+msgid "Optional name for the 3D physics layer 13."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:788
+msgid "Optional name for the 3D physics layer 14."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:791
+msgid "Optional name for the 3D physics layer 15."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:794
+msgid "Optional name for the 3D physics layer 16."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:797
+msgid "Optional name for the 3D physics layer 17."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:800
+msgid "Optional name for the 3D physics layer 18."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:803
+msgid "Optional name for the 3D physics layer 19."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:806
+msgid "Optional name for the 3D physics layer 2."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:809
+msgid "Optional name for the 3D physics layer 20."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:812
+msgid "Optional name for the 3D physics layer 21."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:815
+msgid "Optional name for the 3D physics layer 22."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:818
+msgid "Optional name for the 3D physics layer 23."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:821
+msgid "Optional name for the 3D physics layer 24."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:824
+msgid "Optional name for the 3D physics layer 25."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:827
+msgid "Optional name for the 3D physics layer 26."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:830
+msgid "Optional name for the 3D physics layer 27."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:833
+msgid "Optional name for the 3D physics layer 28."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:836
+msgid "Optional name for the 3D physics layer 29."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:839
+msgid "Optional name for the 3D physics layer 3."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:842
+msgid "Optional name for the 3D physics layer 30."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:845
+msgid "Optional name for the 3D physics layer 31."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:848
+msgid "Optional name for the 3D physics layer 32."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:851
+msgid "Optional name for the 3D physics layer 4."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:854
+msgid "Optional name for the 3D physics layer 5."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:857
+msgid "Optional name for the 3D physics layer 6."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:860
+msgid "Optional name for the 3D physics layer 7."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:863
+msgid "Optional name for the 3D physics layer 8."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:866
+msgid "Optional name for the 3D physics layer 9."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:869
+msgid "Optional name for the 3D render layer 1."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:872
+msgid "Optional name for the 3D render layer 10."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:875
+msgid "Optional name for the 3D render layer 11."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:878
+msgid "Optional name for the 3D render layer 12."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:881
+msgid "Optional name for the 3D render layer 13."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:884
+msgid "Optional name for the 3D render layer 14"
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:887
+msgid "Optional name for the 3D render layer 15."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:890
+msgid "Optional name for the 3D render layer 16."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:893
+msgid "Optional name for the 3D render layer 17."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:896
+msgid "Optional name for the 3D render layer 18."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:899
+msgid "Optional name for the 3D render layer 19."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:902
+msgid "Optional name for the 3D render layer 2."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:905
+msgid "Optional name for the 3D render layer 20."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:908
+msgid "Optional name for the 3D render layer 3."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:911
+msgid "Optional name for the 3D render layer 4."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:914
+msgid "Optional name for the 3D render layer 5."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:917
+msgid "Optional name for the 3D render layer 6."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:920
+msgid "Optional name for the 3D render layer 7."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:923
+msgid "Optional name for the 3D render layer 8."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:926
+msgid "Optional name for the 3D render layer 9."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:929
+msgid ""
+"The locale to fall back to if a translation isn't available in a given "
+"language. If left empty, [code]en[/code] (English) will be used."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:932
+msgid ""
+"If non-empty, this locale will be used when running the project from the "
+"editor."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:935
+msgid "If [code]true[/code], logs all output to files."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:938
+msgid ""
+"Desktop override for [member logging/file_logging/enable_file_logging], as "
+"log files are not readily accessible on mobile/Web platforms."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:941
+msgid ""
+"Path to logs within the project. Using an [code]user://[/code] path is "
+"recommended."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:944
+msgid "Specifies the maximum amount of log files allowed (used for rotation)."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:949
+msgid ""
+"Godot uses a message queue to defer some function calls. If you run out of "
+"space on it (you will see an error), you can increase the size here."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:952
+msgid ""
+"This is used by servers when used in multi-threading mode (servers and "
+"visual). RIDs are preallocated to avoid stalling the server requesting them "
+"on threads. If servers get stalled too often when loading resources in a "
+"thread, increase this number."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:955
+msgid ""
+"Maximum amount of characters allowed to send as output from the debugger. "
+"Over this value, content is dropped. This helps not to stall the debugger "
+"connection."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:958
+msgid ""
+"Maximum number of errors allowed to be sent as output from the debugger. "
+"Over this value, content is dropped. This helps not to stall the debugger "
+"connection."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:961
+msgid ""
+"Maximum amount of messages allowed to send as output from the debugger. Over "
+"this value, content is dropped. This helps not to stall the debugger "
+"connection."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:964
+msgid ""
+"Maximum number of warnings allowed to be sent as output from the debugger. "
+"Over this value, content is dropped. This helps not to stall the debugger "
+"connection."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:967
+msgid ""
+"Default size of packet peer stream for deserializing Godot data (in bytes, "
+"specified as a power of two). The default value [code]16[/code] is equal to "
+"65,536 bytes. Over this size, data is dropped."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:970
+msgid "Timeout (in seconds) for connection attempts using TCP."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:973
+msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:976
+msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:979
+msgid "Maximum number of concurrent input packets for [WebSocketClient]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:982
+msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:985
+msgid "Maximum number of concurrent output packets for [WebSocketClient]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:988
+msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:991
+msgid "Maximum number of concurrent input packets for [WebSocketServer]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:994
+msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:997
+msgid "Maximum number of concurrent output packets for [WebSocketServer]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1000
+msgid ""
+"Amount of read ahead used by remote filesystem. Higher values decrease the "
+"effects of latency at the cost of higher bandwidth usage."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1003
+msgid "Page size used by remote filesystem (in bytes)."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1006
+msgid ""
+"The CA certificates bundle to use for SSL connections. If this is set to a "
+"non-empty value, this will [i]override[/i] Godot's default [url=https://"
+"github.com/godotengine/godot/blob/master/thirdparty/certs/ca-certificates."
+"crt]Mozilla certificate bundle[/url]. If left empty, the default certificate "
+"bundle will be used.\n"
+"If in doubt, leave this setting empty."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1010
+msgid ""
+"When creating node names automatically, set the type of casing in this "
+"project. This is mostly an editor setting."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1013
+msgid ""
+"What to use to separate node name from number. This is mostly an editor "
+"setting."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1016
+msgid ""
+"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
+"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
+"enabled."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1020
+msgid ""
+"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
+"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
+"enabled."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1024
+msgid ""
+"The default angular damp in 2D.\n"
+"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
+"At value [code]0[/code] objects will keep moving with the same velocity. "
+"Values greater than [code]1[/code] will aim to reduce the velocity to "
+"[code]0[/code] in less than a second e.g. a value of [code]2[/code] will aim "
+"to reduce the velocity to [code]0[/code] in half a second. A value equal to "
+"or greater than the physics frame rate ([member ProjectSettings.physics/"
+"common/physics_fps], [code]60[/code] by default) will bring the object to a "
+"stop in one iteration."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1028
+msgid ""
+"The default gravity strength in 2D (in pixels per second squared).\n"
+"[b]Note:[/b] This property is only read when the project starts. To change "
+"the default gravity at runtime, use the following code sample:\n"
+"[codeblock]\n"
+"# Set the default gravity strength to 98.\n"
+"Physics2DServer.area_set_param(get_viewport().find_world_2d().get_space(), "
+"Physics2DServer.AREA_PARAM_GRAVITY, 98)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1036
+msgid ""
+"The default gravity direction in 2D.\n"
+"[b]Note:[/b] This property is only read when the project starts. To change "
+"the default gravity vector at runtime, use the following code sample:\n"
+"[codeblock]\n"
+"# Set the default gravity direction to `Vector2(0, 1)`.\n"
+"Physics2DServer.area_set_param(get_viewport().find_world_2d().get_space(), "
+"Physics2DServer.AREA_PARAM_GRAVITY_VECTOR, Vector2(0, 1))\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1044
+msgid ""
+"The default linear damp in 2D.\n"
+"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
+"At value [code]0[/code] objects will keep moving with the same velocity. "
+"Values greater than [code]1[/code] will aim to reduce the velocity to "
+"[code]0[/code] in less than a second e.g. a value of [code]2[/code] will aim "
+"to reduce the velocity to [code]0[/code] in half a second. A value equal to "
+"or greater than the physics frame rate ([member ProjectSettings.physics/"
+"common/physics_fps], [code]60[/code] by default) will bring the object to a "
+"stop in one iteration."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1048
+msgid ""
+"Threshold defining the surface size that constitutes a large object with "
+"regard to cells in the broad-phase 2D hash grid algorithm.\n"
+"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
+"enabled."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1052
+msgid ""
+"Sets which physics engine to use for 2D physics.\n"
+"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
+"alternative 2D physics server implemented."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1056
+msgid ""
+"Threshold angular velocity under which a 2D physics body will be considered "
+"inactive. See [constant Physics2DServer."
+"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1059
+msgid ""
+"Threshold linear velocity under which a 2D physics body will be considered "
+"inactive. See [constant Physics2DServer."
+"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1062
+msgid ""
+"Sets whether physics is run on the main thread or a separate one. Running "
+"the server on a thread increases performance, but restricts API access to "
+"only physics process.\n"
+"[b]Warning:[/b] As of Godot 3.2, there are mixed reports about the use of a "
+"Multi-Threaded thread model for physics. Be sure to assess whether it does "
+"give you extra performance and no regressions when using it."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1066
+msgid ""
+"Time (in seconds) of inactivity before which a 2D physics body will put to "
+"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1069
+msgid ""
+"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
+"physics spatial partitioning. This may give better performance."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1072
+msgid ""
+"Sets whether the 3D physics world will be created with support for "
+"[SoftBody] physics. Only applies to the Bullet physics engine."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1075
+msgid ""
+"The default angular damp in 3D.\n"
+"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
+"At value [code]0[/code] objects will keep moving with the same velocity. "
+"Values greater than [code]1[/code] will aim to reduce the velocity to "
+"[code]0[/code] in less than a second e.g. a value of [code]2[/code] will aim "
+"to reduce the velocity to [code]0[/code] in half a second. A value equal to "
+"or greater than the physics frame rate ([member ProjectSettings.physics/"
+"common/physics_fps], [code]60[/code] by default) will bring the object to a "
+"stop in one iteration."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1079
+msgid ""
+"The default gravity strength in 3D (in meters per second squared).\n"
+"[b]Note:[/b] This property is only read when the project starts. To change "
+"the default gravity at runtime, use the following code sample:\n"
+"[codeblock]\n"
+"# Set the default gravity strength to 9.8.\n"
+"PhysicsServer.area_set_param(get_viewport().find_world().get_space(), "
+"PhysicsServer.AREA_PARAM_GRAVITY, 9.8)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1087
+msgid ""
+"The default gravity direction in 3D.\n"
+"[b]Note:[/b] This property is only read when the project starts. To change "
+"the default gravity vector at runtime, use the following code sample:\n"
+"[codeblock]\n"
+"# Set the default gravity direction to `Vector3(0, -1, 0)`.\n"
+"PhysicsServer.area_set_param(get_viewport().find_world().get_space(), "
+"PhysicsServer.AREA_PARAM_GRAVITY_VECTOR, Vector3(0, -1, 0))\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1095
+msgid ""
+"The default linear damp in 3D.\n"
+"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
+"At value [code]0[/code] objects will keep moving with the same velocity. "
+"Values greater than [code]1[/code] will aim to reduce the velocity to "
+"[code]0[/code] in less than a second e.g. a value of [code]2[/code] will aim "
+"to reduce the velocity to [code]0[/code] in half a second. A value equal to "
+"or greater than the physics frame rate ([member ProjectSettings.physics/"
+"common/physics_fps], [code]60[/code] by default) will bring the object to a "
+"stop in one iteration."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1099
+msgid ""
+"Enables the use of bounding volume hierarchy instead of octree for 3D "
+"physics spatial partitioning. This may give better performance."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1102
+msgid ""
+"Sets which physics engine to use for 3D physics.\n"
+"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
+"physics engine. The \"GodotPhysics\" engine is still supported as an "
+"alternative."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1106
+msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1109
+msgid ""
+"If enabled, 2D and 3D physics picking behaves this way in relation to "
+"pause:\n"
+"- When pause is started, every collision object that is hovered or captured "
+"(3D only) is released from that condition, getting the relevant mouse-exit "
+"callback, unless its pause mode makes it immune to pause.\n"
+"- During pause, picking only considers collision objects immune to pause, "
+"sending input events and enter/exit callbacks to them as expected.\n"
+"If disabled, the legacy behavior is used, which consists in queuing the "
+"picking input events during pause (so nodes won't get them) and flushing "
+"that queue on resume, against the state of the 2D/3D world at that point."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1115
+msgid ""
+"The number of fixed iterations per second. This controls how often physics "
+"simulation and [method Node._physics_process] methods are run.\n"
+"[b]Note:[/b] This property is only read when the project starts. To change "
+"the physics FPS at runtime, set [member Engine.iterations_per_second] "
+"instead."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1119
+msgid ""
+"Controls how much physics ticks are synchronized with real time. For 0 or "
+"less, the ticks are synchronized. Such values are recommended for network "
+"games, where clock synchronization matters. Higher values cause higher "
+"deviation of in-game clock and real clock, but allows smoothing out "
+"framerate jitters. The default value of 0.5 should be fine for most; values "
+"above 2 could cause the game to react to dropped frames with a noticeable "
+"delay and are not recommended.\n"
+"[b]Note:[/b] For best results, when using a custom physics interpolation "
+"solution, the physics jitter fix should be disabled by setting [member "
+"physics/common/physics_jitter_fix] to [code]0[/code].\n"
+"[b]Note:[/b] This property is only read when the project starts. To change "
+"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1124
+msgid ""
+"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
+"uploading batching data. This may not be necessary but can be used for "
+"safety.\n"
+"[b]Note:[/b] Use with care. You are advised to leave this as default for "
+"exports. A non-default setting that works better on your machine may "
+"adversely affect performance for end users."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1128
+msgid ""
+"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
+"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
+"flag.\n"
+"[b]Note:[/b] Use with care. You are advised to leave this as default for "
+"exports. A non-default setting that works better on your machine may "
+"adversely affect performance for end users."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1132
+msgid ""
+"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
+"[code]glBufferData[/code] is called with NULL data and the full buffer size "
+"prior to uploading new data. This can be important to avoid stalling on some "
+"hardware.\n"
+"[b]Note:[/b] Use with care. You are advised to leave this as default for "
+"exports. A non-default setting that works better on your machine may "
+"adversely affect performance for end users."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1136
+msgid ""
+"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
+"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
+"flag.\n"
+"[b]Note:[/b] Use with care. You are advised to leave this as default for "
+"exports. A non-default setting that works better on your machine may "
+"adversely affect performance for end users."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1140
+msgid ""
+"Choose between fixed mode where corner scalings are preserved matching the "
+"artwork, and scaling mode.\n"
+"Not available in GLES3 when [member rendering/batching/options/use_batching] "
+"is off."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1144
+msgid ""
+"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
+"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
+"[url=https://github.com/godotengine/godot/issues/9913]GitHub issue 9913[/"
+"url] for details.\n"
+"If [code]true[/code], this option enables a \"safe\" code path for such "
+"NVIDIA GPUs at the cost of performance. This option affects GLES2 and GLES3 "
+"rendering, but only on desktop platforms."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1148
+msgid ""
+"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
+"This provides greater compatibility with a wide range of hardware, and also "
+"may be faster in some circumstances.\n"
+"Currently only available when [member rendering/batching/options/"
+"use_batching] is active.\n"
+"[b]Note:[/b] Antialiased software skinned polys are not supported, and will "
+"be rendered without antialiasing.\n"
+"[b]Note:[/b] Custom shaders that use the [code]VERTEX[/code] built-in "
+"operate with [code]VERTEX[/code] position [i]after[/i] skinning, whereas "
+"with hardware skinning, [code]VERTEX[/code] is the position [i]before[/i] "
+"skinning."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1154
+msgid ""
+"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
+"May help in some pixel art styles.\n"
+"This snapping is performed on the GPU in the vertex shader.\n"
+"Consider using the project setting [member rendering/batching/precision/"
+"uv_contract] to prevent artifacts."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1159
+msgid ""
+"When batching is on, this regularly prints a frame diagnosis log. Note that "
+"this will degrade performance."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1162
+msgid ""
+"[b]Experimental.[/b] For regression testing against the old renderer. If "
+"this is switched on, and [code]use_batching[/code] is set, the renderer will "
+"swap alternately between using the old renderer, and the batched renderer, "
+"on each frame. This makes it easy to identify visual differences. "
+"Performance will be degraded."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1165
+msgid ""
+"Lights have the potential to prevent joining items, and break many of the "
+"performance benefits of batching. This setting enables some complex logic to "
+"allow joining items if their lighting is similar, and overlap tests pass. "
+"This can significantly improve performance in some games. Set to 0 to switch "
+"off. With large values the cost of overlap tests may lead to diminishing "
+"returns."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1168
+msgid ""
+"Sets the proportion of the total screen area (in pixels) that must be saved "
+"by a scissor operation in order to activate light scissoring. This can "
+"prevent parts of items being rendered outside the light area. Lower values "
+"scissor more aggressively. A value of 1 scissors none of the items, a value "
+"of 0 scissors every item. The power of 4 of the value is used, in order to "
+"emphasize the lower range, and multiplied by the total screen area in pixels "
+"to give the threshold. This can reduce fill rate requirements in scenes with "
+"a lot of lighting."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1171
+msgid ""
+"Enabling this setting uses the legacy method to draw batches containing only "
+"one rect. The legacy method is faster (approx twice as fast), but can cause "
+"flicker on some systems. In order to directly compare performance with the "
+"non-batching renderer you can set this to true, but it is recommended to "
+"turn this off unless you can guarantee your target hardware will work with "
+"this method."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1174
+msgid ""
+"Turns 2D batching on and off. Batching increases performance by reducing the "
+"amount of graphics API drawcalls."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1177
+msgid "Switches on 2D batching within the editor."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1180
+msgid ""
+"Size of buffer reserved for batched vertices. Larger size enables larger "
+"batches, but there are diminishing returns for the memory used. This should "
+"only have a minor effect on performance."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1183
+msgid ""
+"Including color in the vertex format has a cost, however, not including "
+"color prevents batching across color changes. This threshold determines the "
+"ratio of [code]number of vertex color changes / total number of vertices[/"
+"code] above which vertices will be translated to colored format. A value of "
+"0 will always use colored vertices, 1 will never use colored vertices."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1186
+msgid ""
+"In certain circumstances, the batcher can reorder items in order to better "
+"join them. This may result in better performance. An overlap test is needed "
+"however for each item lookahead, so there is a trade off, with diminishing "
+"returns. If you are getting no benefit, setting this to 0 will switch it off."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1189
+msgid ""
+"Sets the number of commands to lookahead to determine whether to batch "
+"render items. A value of 1 can join items consisting of single commands, 0 "
+"turns off joining. Higher values are in theory more likely to join, however "
+"this has diminishing returns and has a runtime cost so a small value is "
+"recommended."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1192
+msgid ""
+"On some platforms (especially mobile), precision issues in shaders can lead "
+"to reading 1 texel outside of bounds, particularly where rects are scaled. "
+"This can particularly lead to border artifacts around tiles in tilemaps.\n"
+"This adjustment corrects for this by making a small contraction to the UV "
+"coordinates used. Note that this can result in a slight squashing of border "
+"texels."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1196
+msgid ""
+"The amount of UV contraction. This figure is divided by 1000000, and is a "
+"proportion of the total texture dimensions, where the width and height are "
+"both ranged from 0.0 to 1.0.\n"
+"Use the default unless correcting for a problem on particular hardware."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1200
+msgid ""
+"Amount of light samples taken when using [constant BakedLightmap."
+"BAKE_QUALITY_HIGH]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1203
+msgid ""
+"Amount of light samples taken when using [constant BakedLightmap."
+"BAKE_QUALITY_LOW]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1206
+msgid ""
+"Amount of light samples taken when using [constant BakedLightmap."
+"BAKE_QUALITY_MEDIUM]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1209
+msgid ""
+"Amount of light samples taken when using [constant BakedLightmap."
+"BAKE_QUALITY_ULTRA]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1212
+msgid ""
+"Default background clear color. Overridable per [Viewport] using its "
+"[Environment]. See [member Environment.background_mode] and [member "
+"Environment.background_color] in particular. To change this default color "
+"programmatically, use [method VisualServer.set_default_clear_color]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1215
+msgid ""
+"[Environment] that will be used as a fallback environment in case a scene "
+"does not specify its own environment. The default environment is loaded in "
+"at scene load time regardless of whether you have set an environment or not. "
+"If you do not rely on the fallback environment, it is best to delete "
+"[code]default_env.tres[/code], or to specify a different default environment "
+"here."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1218
+msgid ""
+"The use of half-float vertex compression may be producing rendering errors "
+"on some platforms (especially iOS). These have been seen particularly in "
+"particles. Disabling half-float may resolve these problems."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1221
+msgid ""
+"iOS specific override for [member rendering/gles2/compatibility/"
+"disable_half_float], due to poor support for half-float vertex compression "
+"on many devices."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1224
+msgid ""
+"If [code]true[/code] and available on the target Android device, enables "
+"high floating point precision for all shader computations in GLES2.\n"
+"[b]Warning:[/b] High floating point precision can be extremely slow on older "
+"devices and is often not available at all. Use with caution."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1228
+msgid ""
+"Max buffer size for blend shapes. Any blend shape bigger than this will not "
+"work."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1231
+msgid ""
+"Max buffer size for drawing polygons. Any polygon bigger than this will not "
+"work."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1234
+msgid ""
+"Max index buffer size for drawing polygons. Any polygon bigger than this "
+"will not work."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1237
+msgid ""
+"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
+"Nodes using more than this size will not work."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1240
+msgid ""
+"Max number of lights renderable per object. This is further limited by "
+"hardware support. Most devices only support 409 lights, while many devices "
+"(especially mobile) only support 102. Setting this low will slightly reduce "
+"memory usage and may decrease shader compile times."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1243
+msgid ""
+"Max amount of elements renderable in a frame. If more elements than this are "
+"visible per frame, they will not be drawn. Keep in mind elements refer to "
+"mesh surfaces and not meshes themselves. Setting this low will slightly "
+"reduce memory usage and may decrease shader compile times, particularly on "
+"web. For most uses, the default value is suitable, but consider lowering as "
+"much as possible on web export."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1246
+msgid ""
+"Max number of lights renderable in a frame. If more lights than this number "
+"are used, they will be ignored. Setting this low will slightly reduce memory "
+"usage and may decrease shader compile times, particularly on web. For most "
+"uses, the default value is suitable, but consider lowering as much as "
+"possible on web export."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1249
+msgid ""
+"Max number of reflection probes renderable in a frame. If more reflection "
+"probes than this number are used, they will be ignored. Setting this low "
+"will slightly reduce memory usage and may decrease shader compile times, "
+"particularly on web. For most uses, the default value is suitable, but "
+"consider lowering as much as possible on web export."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1252
+msgid ""
+"Shaders have a time variable that constantly increases. At some point, it "
+"needs to be rolled back to zero to avoid precision errors on shader "
+"animations. This setting specifies when (in seconds)."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1255
+msgid ""
+"If [code]true[/code], the texture importer will import lossless textures "
+"using the PNG format. Otherwise, it will default to using WebP."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1258
+msgid ""
+"The default compression level for lossless WebP. Higher levels result in "
+"smaller files at the cost of compression speed. Decompression speed is "
+"mostly unaffected by the compression level. Supported values are 0 to 9. "
+"Note that compression levels above 6 are very slow and offer very little "
+"savings."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1261
+msgid ""
+"On import, mesh vertex data will be split into two streams within a single "
+"vertex buffer, one for position data and the other for interleaved "
+"attributes data. Recommended to be enabled if targeting mobile devices. "
+"Requires manual reimport of meshes after toggling."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1264
+msgid ""
+"Determines the maximum number of sphere occluders that will be used at any "
+"one time.\n"
+"Although you can have many occluders in a scene, each frame the system will "
+"choose from these the most relevant based on a screen space metric, in order "
+"to give the best overall performance."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1268
+msgid ""
+"The default convention is for portal normals to point outward (face outward) "
+"from the source room.\n"
+"If you accidentally build your level with portals facing the wrong way, this "
+"setting can fix the problem.\n"
+"It will flip named portal meshes (i.e. [code]-portal[/code]) on the initial "
+"convertion to [Portal] nodes."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1273
+msgid ""
+"Show conversion logs.\n"
+"[b]Note:[/b] This will automatically be disabled in exports."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1277
+msgid ""
+"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
+"code]. If [code]false[/code], they will be sent as [code]notifications[/"
+"code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1280
+msgid ""
+"If enabled, while merging meshes, the system will also attempt to remove "
+"[Spatial] nodes that no longer have any children.\n"
+"Reducing the number of [Node]s in the scene tree can make traversal more "
+"efficient, but can be switched off in case you wish to use empty [Spatial]s "
+"for markers or some other purpose."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1284
+msgid ""
+"Show logs during PVS generation.\n"
+"[b]Note:[/b] This will automatically be disabled in exports."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1288
+msgid ""
+"Uses a simplified method of generating PVS (potentially visible set) data. "
+"The results may not be accurate where more than one portal join adjacent "
+"rooms.\n"
+"[b]Note:[/b] Generally you should only use this option if you encounter bugs "
+"when it is set to [code]false[/code], i.e. there are problems with the "
+"default method."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1292
+msgid ""
+"If [code]true[/code], allocates the main framebuffer with high dynamic "
+"range. High dynamic range allows the use of [Color] values greater than 1.\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1296
+msgid ""
+"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
+"devices, due to performance concerns or driver support."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1299
+msgid ""
+"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
+"architecture already does this."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1302
+msgid ""
+"If [code]true[/code], performs a previous depth pass before rendering "
+"materials. This increases performance in scenes with high overdraw, when "
+"complex materials and lighting are used."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1305
+msgid ""
+"The directional shadow's size in pixels. Higher values will result in "
+"sharper shadows, at the cost of performance. The value will be rounded up to "
+"the nearest power of 2."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1308
+msgid ""
+"Lower-end override for [member rendering/quality/directional_shadow/size] on "
+"mobile devices, due to performance concerns or driver support."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1311
+msgid ""
+"The video driver to use (\"GLES2\" or \"GLES3\").\n"
+"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
+"video-driver[/code] command line argument, or by the [member rendering/"
+"quality/driver/fallback_to_gles2] option if the target system does not "
+"support GLES3 and falls back to GLES2. In such cases, this property is not "
+"updated, so use [method OS.get_current_video_driver] to query it at run-time."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1315
+msgid ""
+"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
+"driver is not supported.\n"
+"[b]Note:[/b] The two video drivers are not drop-in replacements for each "
+"other, so a game designed for GLES3 might not work properly when falling "
+"back to GLES2. In particular, some features of the GLES3 backend are not "
+"available in GLES2. Enabling this setting also means that both ETC and ETC2 "
+"VRAM-compressed textures will be exported on Android and iOS, increasing the "
+"data pack's size."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1319
+msgid ""
+"Maximum anisotropic filter level used for textures with anisotropy enabled. "
+"Higher values will result in sharper textures when viewed from oblique "
+"angles, at the cost of performance. Only power-of-two values are valid (2, "
+"4, 8, 16)."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1322
+msgid ""
+"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
+"around the edges of polygons. A higher MSAA value results in smoother edges "
+"but can be significantly slower on some hardware.\n"
+"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1326
+msgid ""
+"If set to a value greater than [code]0.0[/code], contrast-adaptive "
+"sharpening will be applied to the 3D viewport. This has a low performance "
+"cost and can be used to recover some of the sharpness lost from using FXAA. "
+"Values around [code]0.5[/code] generally give the best results. See also "
+"[member rendering/quality/filters/use_fxaa]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1329
+msgid ""
+"If [code]true[/code], uses a fast post-processing filter to make banding "
+"significantly less visible. In some cases, debanding may introduce a "
+"slightly noticeable dithering pattern. It's recommended to enable debanding "
+"only when actually needed since the dithering pattern will make lossless-"
+"compressed screenshots larger.\n"
+"[b]Note:[/b] Only available on the GLES3 backend. [member rendering/quality/"
+"depth/hdr] must also be [code]true[/code] for debanding to be effective.\n"
+"[b]Note:[/b] There are known issues with debanding breaking rendering on "
+"mobile platforms. Due to this, it is recommended to leave this option "
+"disabled when targeting mobile platforms."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1334
+msgid ""
+"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
+"antialiasing method, which is fast but will make the image look blurry, "
+"especially at lower resolutions. It can still work relatively well at large "
+"resolutions such as 1440p and 4K. Some of the lost sharpness can be "
+"recovered by enabling contrast-adaptive sharpening (see [member rendering/"
+"quality/filters/sharpen_intensity])."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1337
+msgid ""
+"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
+"mipmaps (also called \"bilinear filtering\"), which will result in visible "
+"seams appearing between mipmap stages. This may increase performance in "
+"mobile as less memory bandwidth is used. If [code]false[/code], linear "
+"mipmap filtering (also called \"trilinear filtering\") is used."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1340
+msgid ""
+"Strategy used for framebuffer allocation. The simpler it is, the less "
+"resources it uses (but the less features it supports). If set to \"2D "
+"Without Sampling\" or \"3D Without Effects\", sample buffers will not be "
+"allocated. This means [code]SCREEN_TEXTURE[/code] and [code]DEPTH_TEXTURE[/"
+"code] will not be available in shaders and post-processing effects will not "
+"be available in the [Environment]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1343
+msgid ""
+"Lower-end override for [member rendering/quality/intended_usage/"
+"framebuffer_allocation] on mobile devices, due to performance concerns or "
+"driver support."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1346
+msgid ""
+"Enable usage of bicubic sampling in baked lightmaps. This results in "
+"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
+"changes to this setting will only be applied upon restarting the application."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1349
+msgid ""
+"Lower-end override for [member rendering/quality/lightmapping/"
+"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1352
+msgid ""
+"Size of the atlas used by reflection probes. A larger size can result in "
+"higher visual quality, while a smaller size will be faster and take up less "
+"memory."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1355
+msgid ""
+"Number of subdivisions to use for the reflection atlas. A higher number "
+"lowers the quality of each atlas, but allows you to use more."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1358
+msgid ""
+"If [code]true[/code], uses a high amount of samples to create blurred "
+"variants of reflection probes and panorama backgrounds (sky). Those blurred "
+"variants are used by rough materials."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1361
+msgid ""
+"Lower-end override for [member rendering/quality/reflections/"
+"high_quality_ggx] on mobile devices, due to performance concerns or driver "
+"support."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1364
+msgid ""
+"Limits the size of the irradiance map which is normally determined by "
+"[member Sky.radiance_size]. A higher size results in a higher quality "
+"irradiance map similarly to [member rendering/quality/reflections/"
+"high_quality_ggx]. Use a higher value when using high-frequency HDRI maps, "
+"otherwise keep this as low as possible.\n"
+"[b]Note:[/b] Low and mid range hardware do not support complex irradiance "
+"maps well and may crash if this is set too high."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1368
+msgid ""
+"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
+"probes and panorama backgrounds (sky). This reduces jitter noise on "
+"reflections, but costs more performance and memory."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1371
+msgid ""
+"Lower-end override for [member rendering/quality/reflections/"
+"texture_array_reflections] on mobile devices, due to performance concerns or "
+"driver support."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1374
+msgid ""
+"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
+"blurred reflections instead of the GGX model."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1377
+msgid ""
+"Lower-end override for [member rendering/quality/shading/"
+"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
+"driver support."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1380
+msgid ""
+"If [code]true[/code], uses faster but lower-quality Lambert material "
+"lighting model instead of Burley."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1383
+msgid ""
+"Lower-end override for [member rendering/quality/shading/"
+"force_lambert_over_burley] on mobile devices, due to performance concerns or "
+"driver support."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1386
+msgid ""
+"If [code]true[/code], forces vertex shading for all rendering. This can "
+"increase performance a lot, but also reduces quality immensely. Can be used "
+"to optimize performance on low-end mobile devices."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1389
+msgid ""
+"Lower-end override for [member rendering/quality/shading/"
+"force_vertex_shading] on mobile devices, due to performance concerns or "
+"driver support."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1392
+msgid ""
+"If [code]true[/code], enables new physical light attenuation for "
+"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
+"appearance with a very small performance cost. When physical light "
+"attenuation is enabled, lights will appear to be darker as a result of the "
+"new attenuation formula. This can be compensated by adjusting the lights' "
+"energy or attenuation values.\n"
+"Changes to this setting will only be applied upon restarting the application."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1396
+msgid ""
+"Size for cubemap into which the shadow is rendered before being copied into "
+"the shadow atlas. A higher number can result in higher resolution shadows "
+"when used with a higher [member rendering/quality/shadow_atlas/size]. "
+"Setting higher than a quarter of the [member rendering/quality/shadow_atlas/"
+"size] will not result in a perceptible increase in visual quality."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
+msgid ""
+"Subdivision quadrant size for shadow mapping. See shadow mapping "
+"documentation."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1411
+msgid ""
+"Size for shadow atlas (used for OmniLights and SpotLights). See "
+"documentation."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1414
+msgid ""
+"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
+"mobile devices, due to performance concerns or driver support."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1417
+msgid ""
+"Shadow filter mode. Higher-quality settings result in smoother shadows that "
+"flicker less when moving. \"Disabled\" is the fastest option, but also has "
+"the lowest quality. \"PCF5\" is smoother but is also slower. \"PCF13\" is "
+"the smoothest option, but is also the slowest.\n"
+"[b]Note:[/b] When using the GLES2 backend, the \"PCF13\" option actually "
+"uses 16 samples to emulate linear filtering in the shader. This results in a "
+"shadow appearance similar to the one produced by the GLES3 backend."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1421
+msgid ""
+"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
+"mobile devices, due to performance concerns or driver support."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1424
+msgid ""
+"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
+"GLES2 and GLES3).\n"
+"See also [member rendering/quality/skinning/software_skinning_fallback]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1428
+msgid ""
+"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
+"doesn't support the default GPU skinning process with GLES2.\n"
+"If [code]false[/code], an alternative skinning process on the GPU is used in "
+"this case (slower in most cases).\n"
+"See also [member rendering/quality/skinning/force_software_skinning].\n"
+"[b]Note:[/b] When the software skinning fallback is triggered, custom vertex "
+"shaders will behave in a different way, because the bone transform will be "
+"already applied to the modelview matrix."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1434
+msgid ""
+"The rendering octree balance can be changed to favor smaller ([code]0[/"
+"code]), or larger ([code]1[/code]) branches.\n"
+"Larger branches can increase performance significantly in some projects."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1438
+msgid ""
+"Enables the use of bounding volume hierarchy instead of octree for rendering "
+"spatial partitioning. This may give better performance."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1441
+msgid ""
+"Improves quality of subsurface scattering, but cost significantly increases."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1444
+msgid "Quality setting for subsurface scattering (samples taken)."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1447
+msgid "Max radius used for subsurface scattering samples."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1450
+msgid ""
+"Weight subsurface scattering samples. Helps to avoid reading samples from "
+"unrelated parts of the screen."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1453
+msgid ""
+"Use high-quality voxel cone tracing. This results in better-looking "
+"reflections, but is much more expensive on the GPU."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1456
+msgid ""
+"Thread model for rendering. Rendering on a thread can vastly improve "
+"performance, but synchronizing to the main thread can cause a bit more "
+"jitter."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1459
+msgid ""
+"If [code]true[/code], a thread safe version of BVH (bounding volume "
+"hierarchy) will be used in rendering and Godot physics.\n"
+"Try enabling this option if you see any visual anomalies in 3D (such as "
+"incorrect object visibility)."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1463
+msgid ""
+"If [code]true[/code], the texture importer will import VRAM-compressed "
+"textures using the BPTC algorithm. This texture compression algorithm is "
+"only supported on desktop platforms, and only when using the GLES3 "
+"renderer.\n"
+"[b]Note:[/b] Changing this setting does [i]not[/i] impact textures that were "
+"already imported before. To make this setting apply to textures that were "
+"already imported, exit the editor, remove the [code].import/[/code] folder "
+"located inside the project folder then restart the editor (see [member "
+"application/config/use_hidden_project_data_directory])."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1467
+msgid ""
+"If [code]true[/code], the texture importer will import VRAM-compressed "
+"textures using the Ericsson Texture Compression algorithm. This algorithm "
+"doesn't support alpha channels in textures.\n"
+"[b]Note:[/b] Changing this setting does [i]not[/i] impact textures that were "
+"already imported before. To make this setting apply to textures that were "
+"already imported, exit the editor, remove the [code].import/[/code] folder "
+"located inside the project folder then restart the editor (see [member "
+"application/config/use_hidden_project_data_directory])."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1471
+msgid ""
+"If [code]true[/code], the texture importer will import VRAM-compressed "
+"textures using the Ericsson Texture Compression 2 algorithm. This texture "
+"compression algorithm is only supported when using the GLES3 renderer.\n"
+"[b]Note:[/b] Changing this setting does [i]not[/i] impact textures that were "
+"already imported before. To make this setting apply to textures that were "
+"already imported, exit the editor, remove the [code].import/[/code] folder "
+"located inside the project folder then restart the editor (see [member "
+"application/config/use_hidden_project_data_directory])."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1475
+msgid ""
+"If [code]true[/code], the texture importer will import VRAM-compressed "
+"textures using the PowerVR Texture Compression algorithm. This texture "
+"compression algorithm is only supported on iOS.\n"
+"[b]Note:[/b] Changing this setting does [i]not[/i] impact textures that were "
+"already imported before. To make this setting apply to textures that were "
+"already imported, exit the editor, remove the [code].import/[/code] folder "
+"located inside the project folder then restart the editor (see [member "
+"application/config/use_hidden_project_data_directory])."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1479
+msgid ""
+"If [code]true[/code], the texture importer will import VRAM-compressed "
+"textures using the S3 Texture Compression algorithm. This algorithm is only "
+"supported on desktop platforms and consoles.\n"
+"[b]Note:[/b] Changing this setting does [i]not[/i] impact textures that were "
+"already imported before. To make this setting apply to textures that were "
+"already imported, exit the editor, remove the [code].import/[/code] folder "
+"located inside the project folder then restart the editor (see [member "
+"application/config/use_hidden_project_data_directory])."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1483
+msgid ""
+"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
+"pixels)."
+msgstr ""
+
+#: doc/classes/ProximityGroup.xml:4 doc/classes/ProximityGroup.xml:7
+msgid "General-purpose proximity detection node."
+msgstr ""
+
+#: doc/classes/QuadMesh.xml:4
+msgid "Class representing a square mesh."
+msgstr ""
+
+#: doc/classes/QuadMesh.xml:7
+msgid ""
+"Class representing a square [PrimitiveMesh]. This flat mesh does not have a "
+"thickness. By default, this mesh is aligned on the X and Y axes; this "
+"default rotation is more suited for use with billboarded materials. Unlike "
+"[PlaneMesh], this mesh doesn't provide subdivision options."
+msgstr ""
+
+#: doc/classes/QuadMesh.xml:11 doc/classes/Viewport.xml:19
+#: doc/classes/ViewportTexture.xml:13
+msgid "https://godotengine.org/asset-library/asset/129"
+msgstr ""
+
+#: doc/classes/QuadMesh.xml:17
+msgid "Offset of the generated Quad. Useful for particles."
+msgstr ""
+
+#: doc/classes/QuadMesh.xml:20
+msgid "Size on the X and Y axes."
+msgstr ""
+
+#: doc/classes/Quat.xml:4
+msgid "Quaternion."
+msgstr ""
+
+#: doc/classes/Quat.xml:7
+msgid ""
+"A unit quaternion used for representing 3D rotations. Quaternions need to be "
+"normalized to be used for rotation.\n"
+"It is similar to Basis, which implements matrix representation of rotations, "
+"and can be parametrized using both an axis-angle pair or Euler angles. Basis "
+"stores rotation, scale, and shearing, while Quat only stores rotation.\n"
+"Due to its compactness and the way it is stored in memory, certain "
+"operations (obtaining axis-angle and performing SLERP, in particular) are "
+"more efficient and robust against floating-point errors."
+msgstr ""
+
+#: doc/classes/Quat.xml:12
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/3d/using_transforms."
+"html#interpolating-with-quaternions"
+msgstr ""
+
+#: doc/classes/Quat.xml:20
+msgid "Constructs a quaternion from the given [Basis]."
+msgstr ""
+
+#: doc/classes/Quat.xml:27
+msgid ""
+"Constructs a quaternion that will perform a rotation specified by Euler "
+"angles (in the YXZ convention: when decomposing, first Z, then X, and Y "
+"last), given in the vector format as (X angle, Y angle, Z angle)."
+msgstr ""
+
+#: doc/classes/Quat.xml:35
+msgid ""
+"Constructs a quaternion that will rotate around the given axis by the "
+"specified angle. The axis must be a normalized vector."
+msgstr ""
+
+#: doc/classes/Quat.xml:45
+msgid "Constructs a quaternion defined by the given values."
+msgstr ""
+
+#: doc/classes/Quat.xml:52
+msgid ""
+"Returns the angle between this quaternion and [code]to[/code]. This is the "
+"magnitude of the angle you would need to rotate by to get from one to the "
+"other.\n"
+"[b]Note:[/b] This method has an abnormally high amount of floating-point "
+"error, so methods such as [method @GDScript.is_zero_approx] will not work "
+"reliably."
+msgstr ""
+
+#: doc/classes/Quat.xml:63
+msgid ""
+"Performs a cubic spherical interpolation between quaternions [code]pre_a[/"
+"code], this vector, [code]b[/code], and [code]post_b[/code], by the given "
+"amount [code]weight[/code]."
+msgstr ""
+
+#: doc/classes/Quat.xml:70
+msgid "Returns the dot product of two quaternions."
+msgstr ""
+
+#: doc/classes/Quat.xml:76
+msgid ""
+"Returns Euler angles (in the YXZ convention: when decomposing, first Z, then "
+"X, and Y last) corresponding to the rotation represented by the unit "
+"quaternion. Returned vector contains the rotation angles in the format (X "
+"angle, Y angle, Z angle)."
+msgstr ""
+
+#: doc/classes/Quat.xml:82
+msgid "Returns the inverse of the quaternion."
+msgstr ""
+
+#: doc/classes/Quat.xml:89
+msgid ""
+"Returns [code]true[/code] if this quaternion and [code]quat[/code] are "
+"approximately equal, by running [method @GDScript.is_equal_approx] on each "
+"component."
+msgstr ""
+
+#: doc/classes/Quat.xml:95
+msgid "Returns whether the quaternion is normalized or not."
+msgstr ""
+
+#: doc/classes/Quat.xml:101
+msgid "Returns the length of the quaternion."
+msgstr ""
+
+#: doc/classes/Quat.xml:107
+msgid "Returns the length of the quaternion, squared."
+msgstr ""
+
+#: doc/classes/Quat.xml:113
+msgid "Returns a copy of the quaternion, normalized to unit length."
+msgstr ""
+
+#: doc/classes/Quat.xml:120
+msgid ""
+"Sets the quaternion to a rotation which rotates around axis by the specified "
+"angle, in radians. The axis must be a normalized vector."
+msgstr ""
+
+#: doc/classes/Quat.xml:126
+msgid ""
+"Sets the quaternion to a rotation specified by Euler angles (in the YXZ "
+"convention: when decomposing, first Z, then X, and Y last), given in the "
+"vector format as (X angle, Y angle, Z angle)."
+msgstr ""
+
+#: doc/classes/Quat.xml:134
+msgid ""
+"Returns the result of the spherical linear interpolation between this "
+"quaternion and [code]to[/code] by amount [code]weight[/code].\n"
+"[b]Note:[/b] Both quaternions must be normalized."
+msgstr ""
+
+#: doc/classes/Quat.xml:143
+msgid ""
+"Returns the result of the spherical linear interpolation between this "
+"quaternion and [code]to[/code] by amount [code]weight[/code], but without "
+"checking if the rotation path is not bigger than 90 degrees."
+msgstr ""
+
+#: doc/classes/Quat.xml:150
+msgid "Returns a vector transformed (multiplied) by this quaternion."
+msgstr ""
+
+#: doc/classes/Quat.xml:156
+msgid ""
+"W component of the quaternion (real part).\n"
+"Quaternion components should usually not be manipulated directly."
+msgstr ""
+
+#: doc/classes/Quat.xml:160
+msgid ""
+"X component of the quaternion (imaginary [code]i[/code] axis part).\n"
+"Quaternion components should usually not be manipulated directly."
+msgstr ""
+
+#: doc/classes/Quat.xml:164
+msgid ""
+"Y component of the quaternion (imaginary [code]j[/code] axis part).\n"
+"Quaternion components should usually not be manipulated directly."
+msgstr ""
+
+#: doc/classes/Quat.xml:168
+msgid ""
+"Z component of the quaternion (imaginary [code]k[/code] axis part).\n"
+"Quaternion components should usually not be manipulated directly."
+msgstr ""
+
+#: doc/classes/Quat.xml:174
+msgid ""
+"The identity quaternion, representing no rotation. Equivalent to an identity "
+"[Basis] matrix. If a vector is transformed by an identity quaternion, it "
+"will not change."
+msgstr ""
+
+#: doc/classes/RandomNumberGenerator.xml:4
+msgid "A class for generating pseudo-random numbers."
+msgstr ""
+
+#: doc/classes/RandomNumberGenerator.xml:7
+msgid ""
+"RandomNumberGenerator is a class for generating pseudo-random numbers. It "
+"currently uses [url=http://www.pcg-random.org/]PCG32[/url].\n"
+"[b]Note:[/b] The underlying algorithm is an implementation detail. As a "
+"result, it should not be depended upon for reproducible random streams "
+"across Godot versions.\n"
+"To generate a random float number (within a given range) based on a time-"
+"dependant seed:\n"
+"[codeblock]\n"
+"var rng = RandomNumberGenerator.new()\n"
+"func _ready():\n"
+" rng.randomize()\n"
+" var my_random_number = rng.randf_range(-10.0, 10.0)\n"
+"[/codeblock]\n"
+"[b]Note:[/b] The default values of [member seed] and [member state] "
+"properties are pseudo-random, and changes when calling [method randomize]. "
+"The [code]0[/code] value documented here is a placeholder, and not the "
+"actual default seed."
+msgstr ""
+
+#: doc/classes/RandomNumberGenerator.xml:19
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/math/random_number_generation."
+"html"
+msgstr ""
+
+#: doc/classes/RandomNumberGenerator.xml:25
+msgid ""
+"Generates a pseudo-random float between [code]0.0[/code] and [code]1.0[/"
+"code] (inclusive)."
+msgstr ""
+
+#: doc/classes/RandomNumberGenerator.xml:33
+msgid ""
+"Generates a pseudo-random float between [code]from[/code] and [code]to[/"
+"code] (inclusive)."
+msgstr ""
+
+#: doc/classes/RandomNumberGenerator.xml:41
+msgid ""
+"Generates a [url=https://en.wikipedia.org/wiki/Normal_distribution]normally-"
+"distributed[/url] pseudo-random number, using Box-Muller transform with the "
+"specified [code]mean[/code] and a standard [code]deviation[/code]. This is "
+"also called Gaussian distribution."
+msgstr ""
+
+#: doc/classes/RandomNumberGenerator.xml:47
+msgid ""
+"Generates a pseudo-random 32-bit unsigned integer between [code]0[/code] and "
+"[code]4294967295[/code] (inclusive)."
+msgstr ""
+
+#: doc/classes/RandomNumberGenerator.xml:55
+msgid ""
+"Generates a pseudo-random 32-bit signed integer between [code]from[/code] "
+"and [code]to[/code] (inclusive)."
+msgstr ""
+
+#: doc/classes/RandomNumberGenerator.xml:61
+msgid "Setups a time-based seed to generator."
+msgstr ""
+
+#: doc/classes/RandomNumberGenerator.xml:67
+msgid ""
+"Initializes the random number generator state based on the given seed value. "
+"A given seed will give a reproducible sequence of pseudo-random numbers.\n"
+"[b]Note:[/b] The RNG does not have an avalanche effect, and can output "
+"similar random streams given similar seeds. Consider using a hash function "
+"to improve your seed quality if they're sourced externally.\n"
+"[b]Note:[/b] Setting this property produces a side effect of changing the "
+"internal [member state], so make sure to initialize the seed [i]before[/i] "
+"modifying the [member state]:\n"
+"[codeblock]\n"
+"var rng = RandomNumberGenerator.new()\n"
+"rng.seed = hash(\"Godot\")\n"
+"rng.state = 100 # Restore to some previously saved state.\n"
+"[/codeblock]\n"
+"[b]Warning:[/b] the getter of this property returns the previous [member "
+"state], and not the initial seed value, which is going to be fixed in Godot "
+"4.0."
+msgstr ""
+
+#: doc/classes/RandomNumberGenerator.xml:78
+msgid ""
+"The current state of the random number generator. Save and restore this "
+"property to restore the generator to a previous state:\n"
+"[codeblock]\n"
+"var rng = RandomNumberGenerator.new()\n"
+"print(rng.randf())\n"
+"var saved_state = rng.state # Store current state.\n"
+"print(rng.randf()) # Advance internal state.\n"
+"rng.state = saved_state # Restore the state.\n"
+"print(rng.randf()) # Prints the same value as in previous.\n"
+"[/codeblock]\n"
+"[b]Note:[/b] Do not set state to arbitrary values, since the random number "
+"generator requires the state to have certain qualities to behave properly. "
+"It should only be set to values that came from the state property itself. To "
+"initialize the random number generator with arbitrary input, use [member "
+"seed] instead."
+msgstr ""
+
+#: doc/classes/Range.xml:4
+msgid "Abstract base class for range-based controls."
+msgstr ""
+
+#: doc/classes/Range.xml:7
+msgid ""
+"Range is a base class for [Control] nodes that change a floating-point "
+"[i]value[/i] between a [i]minimum[/i] and a [i]maximum[/i], using [i]step[/"
+"i] and [i]page[/i], for example a [ScrollBar]."
+msgstr ""
+
+#: doc/classes/Range.xml:16
+msgid ""
+"Binds two ranges together along with any ranges previously grouped with "
+"either of them. When any of range's member variables change, it will share "
+"the new value with all other ranges in its group."
+msgstr ""
+
+#: doc/classes/Range.xml:22
+msgid "Stops range from sharing its member variables with any other."
+msgstr ""
+
+#: doc/classes/Range.xml:28
+msgid ""
+"If [code]true[/code], [member value] may be greater than [member max_value]."
+msgstr ""
+
+#: doc/classes/Range.xml:31
+msgid ""
+"If [code]true[/code], [member value] may be less than [member min_value]."
+msgstr ""
+
+#: doc/classes/Range.xml:34
+msgid ""
+"If [code]true[/code], and [code]min_value[/code] is greater than 0, "
+"[code]value[/code] will be represented exponentially rather than linearly."
+msgstr ""
+
+#: doc/classes/Range.xml:37
+msgid ""
+"Maximum value. Range is clamped if [code]value[/code] is greater than "
+"[code]max_value[/code]."
+msgstr ""
+
+#: doc/classes/Range.xml:40
+msgid ""
+"Minimum value. Range is clamped if [code]value[/code] is less than "
+"[code]min_value[/code]."
+msgstr ""
+
+#: doc/classes/Range.xml:43
+msgid ""
+"Page size. Used mainly for [ScrollBar]. ScrollBar's length is its size "
+"multiplied by [code]page[/code] over the difference between [code]min_value[/"
+"code] and [code]max_value[/code]."
+msgstr ""
+
+#: doc/classes/Range.xml:46
+msgid "The value mapped between 0 and 1."
+msgstr ""
+
+#: doc/classes/Range.xml:49
+msgid ""
+"If [code]true[/code], [code]value[/code] will always be rounded to the "
+"nearest integer."
+msgstr ""
+
+#: doc/classes/Range.xml:52
+msgid ""
+"If greater than 0, [code]value[/code] will always be rounded to a multiple "
+"of [code]step[/code]. If [code]rounded[/code] is also [code]true[/code], "
+"[code]value[/code] will first be rounded to a multiple of [code]step[/code] "
+"then rounded to the nearest integer."
+msgstr ""
+
+#: doc/classes/Range.xml:55
+msgid "Range's current value."
+msgstr ""
+
+#: doc/classes/Range.xml:61
+msgid ""
+"Emitted when [member min_value], [member max_value], [member page], or "
+"[member step] change."
+msgstr ""
+
+#: doc/classes/Range.xml:67
+msgid "Emitted when [member value] changes."
+msgstr ""
+
+#: doc/classes/RayCast.xml:4 doc/classes/RayCast2D.xml:4
+msgid "Query the closest object intersecting a ray."
+msgstr ""
+
+#: doc/classes/RayCast.xml:7
+msgid ""
+"A RayCast represents a line from its origin to its destination position, "
+"[code]cast_to[/code]. It is used to query the 3D space in order to find the "
+"closest object along the path of the ray.\n"
+"RayCast can ignore some objects by adding them to the exception list via "
+"[code]add_exception[/code] or by setting proper filtering with collision "
+"layers and masks.\n"
+"RayCast can be configured to report collisions with [Area]s ([member "
+"collide_with_areas]) and/or [PhysicsBody]s ([member collide_with_bodies]).\n"
+"Only enabled raycasts will be able to query the space and report "
+"collisions.\n"
+"RayCast calculates intersection every physics frame (see [Node]), and the "
+"result is cached so it can be used later until the next frame. If multiple "
+"queries are required between physics frames (or during the same frame), use "
+"[method force_raycast_update] after adjusting the raycast."
+msgstr ""
+
+#: doc/classes/RayCast.xml:22 doc/classes/RayCast2D.xml:21
+msgid ""
+"Adds a collision exception so the ray does not report collisions with the "
+"specified node."
+msgstr ""
+
+#: doc/classes/RayCast.xml:29 doc/classes/RayCast2D.xml:28
+msgid ""
+"Adds a collision exception so the ray does not report collisions with the "
+"specified [RID]."
+msgstr ""
+
+#: doc/classes/RayCast.xml:35 doc/classes/RayCast2D.xml:34
+msgid "Removes all collision exceptions for this ray."
+msgstr ""
+
+#: doc/classes/RayCast.xml:41
+msgid ""
+"Updates the collision information for the ray.\n"
+"Use this method to update the collision information immediately instead of "
+"waiting for the next [code]_physics_process[/code] call, for example if the "
+"ray or its parent has changed state.\n"
+"[b]Note:[/b] [code]enabled[/code] is not required for this to work."
+msgstr ""
+
+#: doc/classes/RayCast.xml:49 doc/classes/RayCast2D.xml:47
+msgid ""
+"Returns the first object that the ray intersects, or [code]null[/code] if no "
+"object is intersecting the ray (i.e. [method is_colliding] returns "
+"[code]false[/code])."
+msgstr ""
+
+#: doc/classes/RayCast.xml:55 doc/classes/RayCast2D.xml:53
+msgid ""
+"Returns the shape ID of the first object that the ray intersects, or "
+"[code]0[/code] if no object is intersecting the ray (i.e. [method "
+"is_colliding] returns [code]false[/code])."
+msgstr ""
+
+#: doc/classes/RayCast.xml:62
+msgid ""
+"Returns [code]true[/code] if the bit index passed is turned on.\n"
+"[b]Note:[/b] Bit indices range from 0-19."
+msgstr ""
+
+#: doc/classes/RayCast.xml:69 doc/classes/RayCast2D.xml:66
+msgid ""
+"Returns the normal of the intersecting object's shape at the collision point."
+msgstr ""
+
+#: doc/classes/RayCast.xml:75 doc/classes/RayCast2D.xml:72
+msgid ""
+"Returns the collision point at which the ray intersects the closest object.\n"
+"[b]Note:[/b] This point is in the [b]global[/b] coordinate system."
+msgstr ""
+
+#: doc/classes/RayCast.xml:82 doc/classes/RayCast2D.xml:79
+msgid ""
+"Returns whether any object is intersecting with the ray's vector "
+"(considering the vector length)."
+msgstr ""
+
+#: doc/classes/RayCast.xml:89 doc/classes/RayCast2D.xml:86
+msgid ""
+"Removes a collision exception so the ray does report collisions with the "
+"specified node."
+msgstr ""
+
+#: doc/classes/RayCast.xml:96 doc/classes/RayCast2D.xml:93
+msgid ""
+"Removes a collision exception so the ray does report collisions with the "
+"specified [RID]."
+msgstr ""
+
+#: doc/classes/RayCast.xml:104
+msgid ""
+"Sets the bit index passed to the [code]value[/code] passed.\n"
+"[b]Note:[/b] Bit indexes range from 0-19."
+msgstr ""
+
+#: doc/classes/RayCast.xml:111 doc/classes/RayCast2D.xml:107
+msgid ""
+"The ray's destination point, relative to the RayCast's [code]position[/code]."
+msgstr ""
+
+#: doc/classes/RayCast.xml:114
+msgid "If [code]true[/code], collision with [Area]s will be reported."
+msgstr ""
+
+#: doc/classes/RayCast.xml:117
+msgid "If [code]true[/code], collision with [PhysicsBody]s will be reported."
+msgstr ""
+
+#: doc/classes/RayCast.xml:120 doc/classes/RayCast2D.xml:116
+msgid ""
+"The ray's collision mask. Only objects in at least one collision layer "
+"enabled in the mask will be detected. See [url=https://docs.godotengine.org/"
+"en/3.4/tutorials/physics/physics_introduction.html#collision-layers-and-"
+"masks]Collision layers and masks[/url] in the documentation for more "
+"information."
+msgstr ""
+
+#: doc/classes/RayCast.xml:123
+msgid ""
+"The custom color to use to draw the shape in the editor and at run-time if "
+"[b]Visible Collision Shapes[/b] is enabled in the [b]Debug[/b] menu. This "
+"color will be highlighted at run-time if the [RayCast] is colliding with "
+"something.\n"
+"If set to [code]Color(0.0, 0.0, 0.0)[/code] (by default), the color set in "
+"[member ProjectSettings.debug/shapes/collision/shape_color] is used."
+msgstr ""
+
+#: doc/classes/RayCast.xml:127
+msgid ""
+"If set to [code]1[/code], a line is used as the debug shape. Otherwise, a "
+"truncated pyramid is drawn to represent the [RayCast]. Requires [b]Visible "
+"Collision Shapes[/b] to be enabled in the [b]Debug[/b] menu for the debug "
+"shape to be visible at run-time."
+msgstr ""
+
+#: doc/classes/RayCast.xml:130 doc/classes/RayCast2D.xml:119
+msgid "If [code]true[/code], collisions will be reported."
+msgstr ""
+
+#: doc/classes/RayCast.xml:133
+msgid ""
+"If [code]true[/code], collisions will be ignored for this RayCast's "
+"immediate parent."
+msgstr ""
+
+#: doc/classes/RayCast2D.xml:7
+msgid ""
+"A RayCast represents a line from its origin to its destination position, "
+"[code]cast_to[/code]. It is used to query the 2D space in order to find the "
+"closest object along the path of the ray.\n"
+"RayCast2D can ignore some objects by adding them to the exception list via "
+"[code]add_exception[/code], by setting proper filtering with collision "
+"layers, or by filtering object types with type masks.\n"
+"RayCast2D can be configured to report collisions with [Area2D]s ([member "
+"collide_with_areas]) and/or [PhysicsBody2D]s ([member "
+"collide_with_bodies]).\n"
+"Only enabled raycasts will be able to query the space and report "
+"collisions.\n"
+"RayCast2D calculates intersection every physics frame (see [Node]), and the "
+"result is cached so it can be used later until the next frame. If multiple "
+"queries are required between physics frames (or during the same frame) use "
+"[method force_raycast_update] after adjusting the raycast."
+msgstr ""
+
+#: doc/classes/RayCast2D.xml:40
+msgid ""
+"Updates the collision information for the ray. Use this method to update the "
+"collision information immediately instead of waiting for the next "
+"[code]_physics_process[/code] call, for example if the ray or its parent has "
+"changed state.\n"
+"[b]Note:[/b] [code]enabled[/code] is not required for this to work."
+msgstr ""
+
+#: doc/classes/RayCast2D.xml:101
+msgid ""
+"Sets or clears individual bits on the collision mask. This makes selecting "
+"the areas scanned easier."
+msgstr ""
+
+#: doc/classes/RayCast2D.xml:110
+msgid "If [code]true[/code], collision with [Area2D]s will be reported."
+msgstr ""
+
+#: doc/classes/RayCast2D.xml:113
+msgid "If [code]true[/code], collision with [PhysicsBody2D]s will be reported."
+msgstr ""
+
+#: doc/classes/RayCast2D.xml:122
+msgid ""
+"If [code]true[/code], the parent node will be excluded from collision "
+"detection."
+msgstr ""
+
+#: doc/classes/RayShape.xml:4
+msgid "Ray shape for 3D collisions."
+msgstr ""
+
+#: doc/classes/RayShape.xml:7
+msgid ""
+"Ray shape for 3D collisions, which can be set into a [PhysicsBody] or "
+"[Area]. A ray is not really a collision body; instead, it tries to separate "
+"itself from whatever is touching its far endpoint. It's often useful for "
+"characters."
+msgstr ""
+
+#: doc/classes/RayShape.xml:15 doc/classes/RayShape2D.xml:15
+msgid "The ray's length."
+msgstr ""
+
+#: doc/classes/RayShape.xml:18 doc/classes/RayShape2D.xml:18
+msgid "If [code]true[/code], allow the shape to return the correct normal."
+msgstr ""
+
+#: doc/classes/RayShape2D.xml:4
+msgid "Ray shape for 2D collisions."
+msgstr ""
+
+#: doc/classes/RayShape2D.xml:7
+msgid ""
+"Ray shape for 2D collisions. A ray is not really a collision body; instead, "
+"it tries to separate itself from whatever is touching its far endpoint. It's "
+"often useful for characters."
+msgstr ""
+
+#: doc/classes/Rect2.xml:4
+msgid "2D axis-aligned bounding box."
+msgstr ""
+
+#: doc/classes/Rect2.xml:7
+msgid ""
+"[Rect2] consists of a position, a size, and several utility functions. It is "
+"typically used for fast overlap tests.\n"
+"It uses floating-point coordinates.\n"
+"The 3D counterpart to [Rect2] is [AABB]."
+msgstr ""
+
+#: doc/classes/Rect2.xml:22
+msgid "Constructs a [Rect2] by position and size."
+msgstr ""
+
+#: doc/classes/Rect2.xml:32
+msgid "Constructs a [Rect2] by x, y, width, and height."
+msgstr ""
+
+#: doc/classes/Rect2.xml:38
+msgid ""
+"Returns a [Rect2] with equivalent position and area, modified so that the "
+"top-left corner is the origin and [code]width[/code] and [code]height[/code] "
+"are positive."
+msgstr ""
+
+#: doc/classes/Rect2.xml:45
+msgid "Returns the intersection of this [Rect2] and b."
+msgstr ""
+
+#: doc/classes/Rect2.xml:52
+msgid ""
+"Returns [code]true[/code] if this [Rect2] completely encloses another one."
+msgstr ""
+
+#: doc/classes/Rect2.xml:59
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Rect2.xml:72
+msgid "Returns the area of the [Rect2]."
+msgstr ""
+
+#: doc/classes/Rect2.xml:79
+msgid ""
+"Returns a copy of the [Rect2] grown a given amount of units towards all the "
+"sides."
+msgstr ""
+
+#: doc/classes/Rect2.xml:89
+msgid ""
+"Returns a copy of the [Rect2] grown a given amount of units towards each "
+"direction individually."
+msgstr ""
+
+#: doc/classes/Rect2.xml:97
+msgid ""
+"Returns a copy of the [Rect2] grown a given amount of units towards the "
+"[enum Margin] direction."
+msgstr ""
+
+#: doc/classes/Rect2.xml:103
+msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
+msgstr ""
+
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
+msgstr ""
+
+#: doc/classes/Rect2.xml:119
+msgid ""
+"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
+"they have at least one point in common).\n"
+"If [code]include_borders[/code] is [code]true[/code], they will also be "
+"considered overlapping if their borders touch, even without intersection."
+msgstr ""
+
+#: doc/classes/Rect2.xml:127
+msgid ""
+"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
+"approximately equal, by calling [code]is_equal_approx[/code] on each "
+"component."
+msgstr ""
+
+#: doc/classes/Rect2.xml:134
+msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
+msgstr ""
+
+#: doc/classes/RectangleShape2D.xml:4
+msgid "Rectangle shape for 2D collisions."
+msgstr ""
+
+#: doc/classes/RectangleShape2D.xml:7
+msgid ""
+"Rectangle shape for 2D collisions. This shape is useful for modeling box-"
+"like 2D objects."
+msgstr ""
+
+#: doc/classes/RectangleShape2D.xml:17
+msgid ""
+"The rectangle's half extents. The width and height of this shape is twice "
+"the half extents."
+msgstr ""
+
+#: doc/classes/Reference.xml:4
+msgid "Base class for reference-counted objects."
+msgstr ""
+
+#: doc/classes/Reference.xml:7
+msgid ""
+"Base class for any object that keeps a reference count. [Resource] and many "
+"other helper objects inherit this class.\n"
+"Unlike other [Object] types, References keep an internal reference counter "
+"so that they are automatically released when no longer in use, and only "
+"then. References therefore do not need to be freed manually with [method "
+"Object.free].\n"
+"In the vast majority of use cases, instantiating and using [Reference]-"
+"derived types is all you need to do. The methods provided in this class are "
+"only for advanced users, and can cause issues if misused.\n"
+"[b]Note:[/b] In C#, references will not be freed instantly after they are no "
+"longer in use. Instead, garbage collection will run periodically and will "
+"free references that are no longer in use. This means that unused references "
+"will linger on for a while before being removed."
+msgstr ""
+
+#: doc/classes/Reference.xml:19
+msgid ""
+"Initializes the internal reference counter. Use this only if you really know "
+"what you are doing.\n"
+"Returns whether the initialization was successful."
+msgstr ""
+
+#: doc/classes/Reference.xml:26
+msgid ""
+"Increments the internal reference counter. Use this only if you really know "
+"what you are doing.\n"
+"Returns [code]true[/code] if the increment was successful, [code]false[/"
+"code] otherwise."
+msgstr ""
+
+#: doc/classes/Reference.xml:33
+msgid ""
+"Decrements the internal reference counter. Use this only if you really know "
+"what you are doing.\n"
+"Returns [code]true[/code] if the decrement was successful, [code]false[/"
+"code] otherwise."
+msgstr ""
+
+#: doc/classes/ReferenceRect.xml:4
+msgid "Reference frame for GUI."
+msgstr ""
+
+#: doc/classes/ReferenceRect.xml:7
+msgid ""
+"A rectangle box that displays only a [member border_color] border color "
+"around its rectangle. [ReferenceRect] has no fill [Color]. If you need to "
+"display a rectangle filled with a solid color, consider using [ColorRect] "
+"instead."
+msgstr ""
+
+#: doc/classes/ReferenceRect.xml:15
+msgid "Sets the border [Color] of the [ReferenceRect]."
+msgstr ""
+
+#: doc/classes/ReferenceRect.xml:18
+msgid ""
+"Sets the border width of the [ReferenceRect]. The border grows both inwards "
+"and outwards with respect to the rectangle box."
+msgstr ""
+
+#: doc/classes/ReferenceRect.xml:21
+msgid ""
+"If set to [code]true[/code], the [ReferenceRect] will only be visible while "
+"in editor. Otherwise, [ReferenceRect] will be visible in game."
+msgstr ""
+
+#: doc/classes/ReflectionProbe.xml:4
+msgid "Captures its surroundings to create reflections."
+msgstr ""
+
+#: doc/classes/ReflectionProbe.xml:7
+msgid ""
+"Capture its surroundings as a dual paraboloid image, and stores versions of "
+"it with increasing levels of blur to simulate different material "
+"roughnesses.\n"
+"The [ReflectionProbe] is used to create high-quality reflections at the cost "
+"of performance. It can be combined with [GIProbe]s and Screen Space "
+"Reflections to achieve high quality reflections. [ReflectionProbe]s render "
+"all objects within their [member cull_mask], so updating them can be quite "
+"expensive. It is best to update them once with the important static objects "
+"and then leave them.\n"
+"[b]Note:[/b] By default Godot will only render 16 reflection probes. If you "
+"need more, increase the number of atlas subdivisions. This setting can be "
+"found in [member ProjectSettings.rendering/quality/reflections/"
+"atlas_subdiv].\n"
+"[b]Note:[/b] The GLES2 backend will only display two reflection probes at "
+"the same time for a single mesh. If possible, split up large meshes that "
+"span over multiple reflection probes into smaller ones."
+msgstr ""
+
+#: doc/classes/ReflectionProbe.xml:13
+msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/reflection_probes.html"
+msgstr ""
+
+#: doc/classes/ReflectionProbe.xml:19
+msgid ""
+"If [code]true[/code], enables box projection. This makes reflections look "
+"more correct in rectangle-shaped rooms by offsetting the reflection center "
+"depending on the camera's location."
+msgstr ""
+
+#: doc/classes/ReflectionProbe.xml:22
+msgid ""
+"Sets the cull mask which determines what objects are drawn by this probe. "
+"Every [VisualInstance] with a layer included in this cull mask will be "
+"rendered by the probe. It is best to only include large objects which are "
+"likely to take up a lot of space in the reflection in order to save on "
+"rendering cost."
+msgstr ""
+
+#: doc/classes/ReflectionProbe.xml:25
+msgid ""
+"If [code]true[/code], computes shadows in the reflection probe. This makes "
+"the reflection probe slower to render; you may want to disable this if using "
+"the [constant UPDATE_ALWAYS] [member update_mode]."
+msgstr ""
+
+#: doc/classes/ReflectionProbe.xml:28
+msgid ""
+"The size of the reflection probe. The larger the extents the more space "
+"covered by the probe which will lower the perceived resolution. It is best "
+"to keep the extents only as large as you need them."
+msgstr ""
+
+#: doc/classes/ReflectionProbe.xml:31
+msgid ""
+"Defines the reflection intensity. Intensity modulates the strength of the "
+"reflection."
+msgstr ""
+
+#: doc/classes/ReflectionProbe.xml:34
+msgid ""
+"Sets the ambient light color to be used when this probe is set to [member "
+"interior_enable]."
+msgstr ""
+
+#: doc/classes/ReflectionProbe.xml:37
+msgid ""
+"Sets the contribution value for how much the reflection affects the ambient "
+"light for this reflection probe when set to [member interior_enable]. Useful "
+"so that ambient light matches the color of the room."
+msgstr ""
+
+#: doc/classes/ReflectionProbe.xml:40
+msgid ""
+"Sets the energy multiplier for this reflection probe's ambient light "
+"contribution when set to [member interior_enable]."
+msgstr ""
+
+#: doc/classes/ReflectionProbe.xml:43
+msgid ""
+"If [code]true[/code], reflections will ignore sky contribution. Ambient "
+"lighting is then controlled by the [code]interior_ambient_*[/code] "
+"properties."
+msgstr ""
+
+#: doc/classes/ReflectionProbe.xml:46
+msgid ""
+"Sets the max distance away from the probe an object can be before it is "
+"culled."
+msgstr ""
+
+#: doc/classes/ReflectionProbe.xml:49
+msgid ""
+"Sets the origin offset to be used when this reflection probe is in box "
+"project mode."
+msgstr ""
+
+#: doc/classes/ReflectionProbe.xml:52
+msgid ""
+"Sets how frequently the probe is updated. Can be [constant UPDATE_ONCE] or "
+"[constant UPDATE_ALWAYS]."
+msgstr ""
+
+#: doc/classes/ReflectionProbe.xml:57
+msgid "Update the probe once on the next frame."
+msgstr ""
+
+#: doc/classes/ReflectionProbe.xml:60
+msgid ""
+"Update the probe every frame. This is needed when you want to capture "
+"dynamic objects. However, it results in an increased render time. Use "
+"[constant UPDATE_ONCE] whenever possible."
+msgstr ""
+
+#: modules/regex/doc_classes/RegEx.xml:4
+msgid "Class for searching text for patterns using regular expressions."
+msgstr ""
+
+#: modules/regex/doc_classes/RegEx.xml:7
+msgid ""
+"A regular expression (or regex) is a compact language that can be used to "
+"recognise strings that follow a specific pattern, such as URLs, email "
+"addresses, complete sentences, etc. For instance, a regex of [code]ab[0-9][/"
+"code] would find any string that is [code]ab[/code] followed by any number "
+"from [code]0[/code] to [code]9[/code]. For a more in-depth look, you can "
+"easily find various tutorials and detailed explanations on the Internet.\n"
+"To begin, the RegEx object needs to be compiled with the search pattern "
+"using [method compile] before it can be used.\n"
+"[codeblock]\n"
+"var regex = RegEx.new()\n"
+"regex.compile(\"\\\\w-(\\\\d+)\")\n"
+"[/codeblock]\n"
+"The search pattern must be escaped first for GDScript before it is escaped "
+"for the expression. For example, [code]compile(\"\\\\d+\")[/code] would be "
+"read by RegEx as [code]\\d+[/code]. Similarly, [code]compile(\"\\\"(?:\\\\\\"
+"\\.|[^\\\"])*\\\"\")[/code] would be read as [code]\"(?:\\\\.|[^\"])*\"[/"
+"code].\n"
+"Using [method search], you can find the pattern within the given text. If a "
+"pattern is found, [RegExMatch] is returned and you can retrieve details of "
+"the results using methods such as [method RegExMatch.get_string] and [method "
+"RegExMatch.get_start].\n"
+"[codeblock]\n"
+"var regex = RegEx.new()\n"
+"regex.compile(\"\\\\w-(\\\\d+)\")\n"
+"var result = regex.search(\"abc n-0123\")\n"
+"if result:\n"
+" print(result.get_string()) # Would print n-0123\n"
+"[/codeblock]\n"
+"The results of capturing groups [code]()[/code] can be retrieved by passing "
+"the group number to the various methods in [RegExMatch]. Group 0 is the "
+"default and will always refer to the entire pattern. In the above example, "
+"calling [code]result.get_string(1)[/code] would give you [code]0123[/code].\n"
+"This version of RegEx also supports named capturing groups, and the names "
+"can be used to retrieve the results. If two or more groups have the same "
+"name, the name would only refer to the first one with a match.\n"
+"[codeblock]\n"
+"var regex = RegEx.new()\n"
+"regex.compile(\"d(?<digit>[0-9]+)|x(?<digit>[0-9a-f]+)\")\n"
+"var result = regex.search(\"the number is x2f\")\n"
+"if result:\n"
+" print(result.get_string(\"digit\")) # Would print 2f\n"
+"[/codeblock]\n"
+"If you need to process multiple results, [method search_all] generates a "
+"list of all non-overlapping results. This can be combined with a [code]for[/"
+"code] loop for convenience.\n"
+"[codeblock]\n"
+"for result in regex.search_all(\"d01, d03, d0c, x3f and x42\"):\n"
+" print(result.get_string(\"digit\"))\n"
+"# Would print 01 03 0 3f 42\n"
+"[/codeblock]\n"
+"[b]Example of splitting a string using a RegEx:[/b]\n"
+"[codeblock]\n"
+"var regex = RegEx.new()\n"
+"regex.compile(\"\\\\S+\") # Negated whitespace character class.\n"
+"var results = []\n"
+"for result in regex.search_all(\"One Two \\n\\tThree\"):\n"
+" results.push_back(result.get_string())\n"
+"# The `results` array now contains \"One\", \"Two\", \"Three\".\n"
+"[/codeblock]\n"
+"[b]Note:[/b] Godot's regex implementation is based on the [url=https://www."
+"pcre.org/]PCRE2[/url] library. You can view the full pattern reference "
+"[url=https://www.pcre.org/current/doc/html/pcre2pattern.html]here[/url].\n"
+"[b]Tip:[/b] You can use [url=https://regexr.com/]Regexr[/url] to test "
+"regular expressions online."
+msgstr ""
+
+#: modules/regex/doc_classes/RegEx.xml:55
+msgid ""
+"This method resets the state of the object, as if it was freshly created. "
+"Namely, it unassigns the regular expression of this object."
+msgstr ""
+
+#: modules/regex/doc_classes/RegEx.xml:62
+msgid ""
+"Compiles and assign the search pattern to use. Returns [constant OK] if the "
+"compilation is successful. If an error is encountered, details are printed "
+"to standard output and an error is returned."
+msgstr ""
+
+#: modules/regex/doc_classes/RegEx.xml:68
+msgid "Returns the number of capturing groups in compiled pattern."
+msgstr ""
+
+#: modules/regex/doc_classes/RegEx.xml:74
+msgid ""
+"Returns an array of names of named capturing groups in the compiled pattern. "
+"They are ordered by appearance."
+msgstr ""
+
+#: modules/regex/doc_classes/RegEx.xml:80
+msgid "Returns the original search pattern that was compiled."
+msgstr ""
+
+#: modules/regex/doc_classes/RegEx.xml:86
+msgid "Returns whether this object has a valid search pattern assigned."
+msgstr ""
+
+#: modules/regex/doc_classes/RegEx.xml:95
+msgid ""
+"Searches the text for the compiled pattern. Returns a [RegExMatch] container "
+"of the first matching result if found, otherwise [code]null[/code]. The "
+"region to search within can be specified without modifying where the start "
+"and end anchor would be."
+msgstr ""
+
+#: modules/regex/doc_classes/RegEx.xml:104
+msgid ""
+"Searches the text for the compiled pattern. Returns an array of [RegExMatch] "
+"containers for each non-overlapping result. If no results were found, an "
+"empty array is returned instead. The region to search within can be "
+"specified without modifying where the start and end anchor would be."
+msgstr ""
+
+#: modules/regex/doc_classes/RegEx.xml:115
+msgid ""
+"Searches the text for the compiled pattern and replaces it with the "
+"specified string. Escapes and backreferences such as [code]$1[/code] and "
+"[code]$name[/code] are expanded and resolved. By default, only the first "
+"instance is replaced, but it can be changed for all instances (global "
+"replacement). The region to search within can be specified without modifying "
+"where the start and end anchor would be."
+msgstr ""
+
+#: modules/regex/doc_classes/RegExMatch.xml:4
+msgid "Contains the results of a [RegEx] search."
+msgstr ""
+
+#: modules/regex/doc_classes/RegExMatch.xml:7
+msgid ""
+"Contains the results of a single [RegEx] match returned by [method RegEx."
+"search] and [method RegEx.search_all]. It can be used to find the position "
+"and range of the match and its capturing groups, and it can extract its "
+"substring for you."
+msgstr ""
+
+#: modules/regex/doc_classes/RegExMatch.xml:16
+msgid ""
+"Returns the end position of the match within the source string. The end "
+"position of capturing groups can be retrieved by providing its group number "
+"as an integer or its string name (if it's a named group). The default value "
+"of 0 refers to the whole pattern.\n"
+"Returns -1 if the group did not match or doesn't exist."
+msgstr ""
+
+#: modules/regex/doc_classes/RegExMatch.xml:23
+msgid "Returns the number of capturing groups."
+msgstr ""
+
+#: modules/regex/doc_classes/RegExMatch.xml:30
+msgid ""
+"Returns the starting position of the match within the source string. The "
+"starting position of capturing groups can be retrieved by providing its "
+"group number as an integer or its string name (if it's a named group). The "
+"default value of 0 refers to the whole pattern.\n"
+"Returns -1 if the group did not match or doesn't exist."
+msgstr ""
+
+#: modules/regex/doc_classes/RegExMatch.xml:38
+msgid ""
+"Returns the substring of the match from the source string. Capturing groups "
+"can be retrieved by providing its group number as an integer or its string "
+"name (if it's a named group). The default value of 0 refers to the whole "
+"pattern.\n"
+"Returns an empty string if the group did not match or doesn't exist."
+msgstr ""
+
+#: modules/regex/doc_classes/RegExMatch.xml:45
+msgid ""
+"A dictionary of named groups and its corresponding group number. Only groups "
+"that were matched are included. If multiple groups have the same name, that "
+"name would refer to the first matching one."
+msgstr ""
+
+#: modules/regex/doc_classes/RegExMatch.xml:48
+msgid "An [Array] of the match and its capturing groups."
+msgstr ""
+
+#: modules/regex/doc_classes/RegExMatch.xml:51
+msgid ""
+"The source string used with the search pattern to find this matching result."
+msgstr ""
+
+#: doc/classes/RemoteTransform.xml:4
+msgid ""
+"RemoteTransform pushes its own [Transform] to another [Spatial] derived Node "
+"in the scene."
+msgstr ""
+
+#: doc/classes/RemoteTransform.xml:7
+msgid ""
+"RemoteTransform pushes its own [Transform] to another [Spatial] derived Node "
+"(called the remote node) in the scene.\n"
+"It can be set to update another Node's position, rotation and/or scale. It "
+"can use either global or local coordinates."
+msgstr ""
+
+#: doc/classes/RemoteTransform.xml:16
+msgid ""
+"[RemoteTransform] caches the remote node. It may not notice if the remote "
+"node disappears; [method force_update_cache] forces it to update the cache "
+"again."
+msgstr ""
+
+#: doc/classes/RemoteTransform.xml:22
+msgid ""
+"The [NodePath] to the remote node, relative to the RemoteTransform's "
+"position in the scene."
+msgstr ""
+
+#: doc/classes/RemoteTransform.xml:25 doc/classes/RemoteTransform2D.xml:25
+msgid "If [code]true[/code], the remote node's position is updated."
+msgstr ""
+
+#: doc/classes/RemoteTransform.xml:28 doc/classes/RemoteTransform2D.xml:28
+msgid "If [code]true[/code], the remote node's rotation is updated."
+msgstr ""
+
+#: doc/classes/RemoteTransform.xml:31 doc/classes/RemoteTransform2D.xml:31
+msgid "If [code]true[/code], the remote node's scale is updated."
+msgstr ""
+
+#: doc/classes/RemoteTransform.xml:34 doc/classes/RemoteTransform2D.xml:34
+msgid ""
+"If [code]true[/code], global coordinates are used. If [code]false[/code], "
+"local coordinates are used."
+msgstr ""
+
+#: doc/classes/RemoteTransform2D.xml:4
+msgid ""
+"RemoteTransform2D pushes its own [Transform2D] to another [CanvasItem] "
+"derived Node in the scene."
+msgstr ""
+
+#: doc/classes/RemoteTransform2D.xml:7
+msgid ""
+"RemoteTransform2D pushes its own [Transform2D] to another [CanvasItem] "
+"derived Node (called the remote node) in the scene.\n"
+"It can be set to update another Node's position, rotation and/or scale. It "
+"can use either global or local coordinates."
+msgstr ""
+
+#: doc/classes/RemoteTransform2D.xml:16
+msgid ""
+"[RemoteTransform2D] caches the remote node. It may not notice if the remote "
+"node disappears; [method force_update_cache] forces it to update the cache "
+"again."
+msgstr ""
+
+#: doc/classes/RemoteTransform2D.xml:22
+msgid ""
+"The [NodePath] to the remote node, relative to the RemoteTransform2D's "
+"position in the scene."
+msgstr ""
+
+#: doc/classes/Resource.xml:4
+msgid "Base class for all resources."
+msgstr ""
+
+#: doc/classes/Resource.xml:7
+msgid ""
+"Resource is the base class for all Godot-specific resource types, serving "
+"primarily as data containers. Since they inherit from [Reference], resources "
+"are reference-counted and freed when no longer in use. They are also cached "
+"once loaded from disk, so that any further attempts to load a resource from "
+"a given path will return the same reference (all this in contrast to a "
+"[Node], which is not reference-counted and can be instanced from disk as "
+"many times as desired). Resources can be saved externally on disk or bundled "
+"into another object, such as a [Node] or another resource.\n"
+"[b]Note:[/b] In C#, resources will not be freed instantly after they are no "
+"longer in use. Instead, garbage collection will run periodically and will "
+"free resources that are no longer in use. This means that unused resources "
+"will linger on for a while before being removed."
+msgstr ""
+
+#: doc/classes/Resource.xml:11
+msgid ""
+"https://docs.godotengine.org/en/3.4/getting_started/step_by_step/resources."
+"html"
+msgstr ""
+
+#: doc/classes/Resource.xml:18
+msgid ""
+"Virtual function which can be overridden to customize the behavior value of "
+"[method setup_local_to_scene]."
+msgstr ""
+
+#: doc/classes/Resource.xml:25
+msgid ""
+"Duplicates the resource, returning a new resource with the exported members "
+"copied. [b]Note:[/b] To duplicate the resource the constructor is called "
+"without arguments. This method will error when the constructor doesn't have "
+"default values.\n"
+"By default, sub-resources are shared between resource copies for efficiency. "
+"This can be changed by passing [code]true[/code] to the [code]subresources[/"
+"code] argument which will copy the subresources.\n"
+"[b]Note:[/b] If [code]subresources[/code] is [code]true[/code], this method "
+"will only perform a shallow copy. Nested resources within subresources will "
+"not be duplicated and will still be shared.\n"
+"[b]Note:[/b] When duplicating a resource, only [code]export[/code]ed "
+"properties are copied. Other properties will be set to their default value "
+"in the new resource."
+msgstr ""
+
+#: doc/classes/Resource.xml:34
+msgid ""
+"Emits the [signal changed] signal.\n"
+"If external objects which depend on this resource should be updated, this "
+"method must be called manually whenever the state of this resource has "
+"changed (such as modification of properties).\n"
+"The method is equivalent to:\n"
+"[codeblock]\n"
+"emit_signal(\"changed\")\n"
+"[/codeblock]\n"
+"[b]Note:[/b] This method is called automatically for built-in resources."
+msgstr ""
+
+#: doc/classes/Resource.xml:46
+msgid ""
+"If [member resource_local_to_scene] is enabled and the resource was loaded "
+"from a [PackedScene] instantiation, returns the local scene where this "
+"resource's unique copy is in use. Otherwise, returns [code]null[/code]."
+msgstr ""
+
+#: doc/classes/Resource.xml:52
+msgid ""
+"Returns the RID of the resource (or an empty RID). Many resources (such as "
+"[Texture], [Mesh], etc) are high-level abstractions of resources stored in a "
+"server, so this function will return the original RID."
+msgstr ""
+
+#: doc/classes/Resource.xml:58
+msgid ""
+"This method is called when a resource with [member resource_local_to_scene] "
+"enabled is loaded from a [PackedScene] instantiation. Its behavior can be "
+"customized by overriding [method _setup_local_to_scene] from script.\n"
+"For most resources, this method performs no base logic. [ViewportTexture] "
+"performs custom logic to properly set the proxy texture and flags in the "
+"local viewport."
+msgstr ""
+
+#: doc/classes/Resource.xml:66
+msgid ""
+"Sets the path of the resource, potentially overriding an existing cache "
+"entry for this path. This differs from setting [member resource_path], as "
+"the latter would error out if another resource was already cached for the "
+"given path."
+msgstr ""
+
+#: doc/classes/Resource.xml:72
+msgid ""
+"If [code]true[/code], the resource will be made unique in each instance of "
+"its local scene. It can thus be modified in a scene instance without "
+"impacting other instances of that same scene."
+msgstr ""
+
+#: doc/classes/Resource.xml:75
+msgid ""
+"The name of the resource. This is an optional identifier. If [member "
+"resource_name] is not empty, its value will be displayed to represent the "
+"current resource in the editor inspector. For built-in scripts, the [member "
+"resource_name] will be displayed as the tab name in the script editor."
+msgstr ""
+
+#: doc/classes/Resource.xml:78
+msgid ""
+"The path to the resource. In case it has its own file, it will return its "
+"filepath. If it's tied to the scene, it will return the scene's path, "
+"followed by the resource's index."
+msgstr ""
+
+#: doc/classes/Resource.xml:84
+msgid ""
+"Emitted whenever the resource changes.\n"
+"[b]Note:[/b] This signal is not emitted automatically for custom resources, "
+"which means that you need to create a setter and emit the signal yourself."
+msgstr ""
+
+#: doc/classes/ResourceFormatLoader.xml:4
+msgid "Loads a specific resource type from a file."
+msgstr ""
+
+#: doc/classes/ResourceFormatLoader.xml:7
+msgid ""
+"Godot loads resources in the editor or in exported games using "
+"ResourceFormatLoaders. They are queried automatically via the "
+"[ResourceLoader] singleton, or when a resource with internal dependencies is "
+"loaded. Each file type may load as a different resource type, so multiple "
+"ResourceFormatLoaders are registered in the engine.\n"
+"Extending this class allows you to define your own loader. Be sure to "
+"respect the documented return types and values. You should give it a global "
+"class name with [code]class_name[/code] for it to be registered. Like built-"
+"in ResourceFormatLoaders, it will be called automatically when loading "
+"resources of its handled type(s). You may also implement a "
+"[ResourceFormatSaver].\n"
+"[b]Note:[/b] You can also extend [EditorImportPlugin] if the resource type "
+"you need exists but Godot is unable to load its format. Choosing one way "
+"over another depends on if the format is suitable or not for the final "
+"exported game. For example, it's better to import [code].png[/code] textures "
+"as [code].stex[/code] ([StreamTexture]) first, so they can be loaded with "
+"better efficiency on the graphics card."
+msgstr ""
+
+#: doc/classes/ResourceFormatLoader.xml:19
+msgid ""
+"If implemented, gets the dependencies of a given resource. If "
+"[code]add_types[/code] is [code]true[/code], paths should be appended "
+"[code]::TypeName[/code], where [code]TypeName[/code] is the class name of "
+"the dependency.\n"
+"[b]Note:[/b] Custom resource types defined by scripts aren't known by the "
+"[ClassDB], so you might just return [code]\"Resource\"[/code] for them."
+msgstr ""
+
+#: doc/classes/ResourceFormatLoader.xml:26
+msgid "Gets the list of extensions for files this loader is able to read."
+msgstr ""
+
+#: doc/classes/ResourceFormatLoader.xml:33
+msgid ""
+"Gets the class name of the resource associated with the given path. If the "
+"loader cannot handle it, it should return [code]\"\"[/code].\n"
+"[b]Note:[/b] Custom resource types defined by scripts aren't known by the "
+"[ClassDB], so you might just return [code]\"Resource\"[/code] for them."
+msgstr ""
+
+#: doc/classes/ResourceFormatLoader.xml:41
+msgid ""
+"Tells which resource class this loader can load.\n"
+"[b]Note:[/b] Custom resource types defined by scripts aren't known by the "
+"[ClassDB], so you might just handle [code]\"Resource\"[/code] for them."
+msgstr ""
+
+#: doc/classes/ResourceFormatLoader.xml:50
+msgid ""
+"Loads a resource when the engine finds this loader to be compatible. If the "
+"loaded resource is the result of an import, [code]original_path[/code] will "
+"target the source file. Returns a [Resource] object on success, or an [enum "
+"Error] constant in case of failure."
+msgstr ""
+
+#: doc/classes/ResourceFormatLoader.xml:58
+msgid ""
+"If implemented, renames dependencies within the given resource and saves it. "
+"[code]renames[/code] is a dictionary [code]{ String => String }[/code] "
+"mapping old dependency paths to new paths.\n"
+"Returns [constant OK] on success, or an [enum Error] constant in case of "
+"failure."
+msgstr ""
+
+#: doc/classes/ResourceFormatSaver.xml:4
+msgid "Saves a specific resource type to a file."
+msgstr ""
+
+#: doc/classes/ResourceFormatSaver.xml:7
+msgid ""
+"The engine can save resources when you do it from the editor, or when you "
+"use the [ResourceSaver] singleton. This is accomplished thanks to multiple "
+"[ResourceFormatSaver]s, each handling its own format and called "
+"automatically by the engine.\n"
+"By default, Godot saves resources as [code].tres[/code] (text-based), [code]."
+"res[/code] (binary) or another built-in format, but you can choose to create "
+"your own format by extending this class. Be sure to respect the documented "
+"return types and values. You should give it a global class name with "
+"[code]class_name[/code] for it to be registered. Like built-in "
+"ResourceFormatSavers, it will be called automatically when saving resources "
+"of its recognized type(s). You may also implement a [ResourceFormatLoader]."
+msgstr ""
+
+#: doc/classes/ResourceFormatSaver.xml:17
+msgid ""
+"Returns the list of extensions available for saving the resource object, "
+"provided it is recognized (see [method recognize])."
+msgstr ""
+
+#: doc/classes/ResourceFormatSaver.xml:24
+msgid "Returns whether the given resource object can be saved by this saver."
+msgstr ""
+
+#: doc/classes/ResourceFormatSaver.xml:33
+msgid ""
+"Saves the given resource object to a file at the target [code]path[/code]. "
+"[code]flags[/code] is a bitmask composed with [enum ResourceSaver."
+"SaverFlags] constants.\n"
+"Returns [constant OK] on success, or an [enum Error] constant in case of "
+"failure."
+msgstr ""
+
+#: doc/classes/ResourceImporter.xml:4
+msgid "Base class for the implementation of core resource importers."
+msgstr ""
+
+#: doc/classes/ResourceImporter.xml:7
+msgid ""
+"This is the base class for the resource importers implemented in core. To "
+"implement your own resource importers using editor plugins, see "
+"[EditorImportPlugin]."
+msgstr ""
+
+#: doc/classes/ResourceImporter.xml:16
+msgid "The default import order."
+msgstr ""
+
+#: doc/classes/ResourceImporter.xml:19
+msgid ""
+"The import order for scenes, which ensures scenes are imported [i]after[/i] "
+"all other core resources such as textures. Custom importers should generally "
+"have an import order lower than [code]100[/code] to avoid issues when "
+"importing scenes that rely on custom resources."
+msgstr ""
+
+#: doc/classes/ResourceInteractiveLoader.xml:4
+msgid "Interactive [Resource] loader."
+msgstr ""
+
+#: doc/classes/ResourceInteractiveLoader.xml:7
+msgid ""
+"Interactive [Resource] loader. This object is returned by [ResourceLoader] "
+"when performing an interactive load. It allows loading resources with high "
+"granularity, which makes it mainly useful for displaying loading bars or "
+"percentages."
+msgstr ""
+
+#: doc/classes/ResourceInteractiveLoader.xml:15
+msgid ""
+"Returns the loaded resource if the load operation completed successfully, "
+"[code]null[/code] otherwise."
+msgstr ""
+
+#: doc/classes/ResourceInteractiveLoader.xml:21
+msgid ""
+"Returns the load stage. The total amount of stages can be queried with "
+"[method get_stage_count]."
+msgstr ""
+
+#: doc/classes/ResourceInteractiveLoader.xml:27
+msgid ""
+"Returns the total amount of stages (calls to [method poll]) needed to "
+"completely load this resource."
+msgstr ""
+
+#: doc/classes/ResourceInteractiveLoader.xml:33
+msgid ""
+"Polls the loading operation, i.e. loads a data chunk up to the next stage.\n"
+"Returns [constant OK] if the poll is successful but the load operation has "
+"not finished yet (intermediate stage). This means [method poll] will have to "
+"be called again until the last stage is completed.\n"
+"Returns [constant ERR_FILE_EOF] if the load operation has completed "
+"successfully. The loaded resource can be obtained by calling [method "
+"get_resource].\n"
+"Returns another [enum Error] code if the poll has failed."
+msgstr ""
+
+#: doc/classes/ResourceInteractiveLoader.xml:42
+msgid ""
+"Polls the loading operation successively until the resource is completely "
+"loaded or a [method poll] fails.\n"
+"Returns [constant ERR_FILE_EOF] if the load operation has completed "
+"successfully. The loaded resource can be obtained by calling [method "
+"get_resource].\n"
+"Returns another [enum Error] code if a poll has failed, aborting the "
+"operation."
+msgstr ""
+
+#: doc/classes/ResourceLoader.xml:4
+msgid "Singleton used to load resource files."
+msgstr ""
+
+#: doc/classes/ResourceLoader.xml:7
+msgid ""
+"Singleton used to load resource files from the filesystem.\n"
+"It uses the many [ResourceFormatLoader] classes registered in the engine "
+"(either built-in or from a plugin) to load files into memory and convert "
+"them to a format that can be used by the engine."
+msgstr ""
+
+#: doc/classes/ResourceLoader.xml:19
+msgid ""
+"Returns whether a recognized resource exists for the given [code]path[/"
+"code].\n"
+"An optional [code]type_hint[/code] can be used to further specify the "
+"[Resource] type that should be handled by the [ResourceFormatLoader]."
+msgstr ""
+
+#: doc/classes/ResourceLoader.xml:27
+msgid ""
+"Returns the dependencies for the resource at the given [code]path[/code]."
+msgstr ""
+
+#: doc/classes/ResourceLoader.xml:34
+msgid "Returns the list of recognized extensions for a resource type."
+msgstr ""
+
+#: doc/classes/ResourceLoader.xml:41
+msgid ""
+"[i]Deprecated method.[/i] Use [method has_cached] or [method exists] instead."
+msgstr ""
+
+#: doc/classes/ResourceLoader.xml:48
+msgid ""
+"Returns whether a cached resource is available for the given [code]path[/"
+"code].\n"
+"Once a resource has been loaded by the engine, it is cached in memory for "
+"faster access, and future calls to the [method load] or [method "
+"load_interactive] methods will use the cached version. The cached resource "
+"can be overridden by using [method Resource.take_over_path] on a new "
+"resource for that same path."
+msgstr ""
+
+#: doc/classes/ResourceLoader.xml:58
+msgid ""
+"Loads a resource at the given [code]path[/code], caching the result for "
+"further access.\n"
+"The registered [ResourceFormatLoader]s are queried sequentially to find the "
+"first one which can handle the file's extension, and then attempt loading. "
+"If loading fails, the remaining ResourceFormatLoaders are also attempted.\n"
+"An optional [code]type_hint[/code] can be used to further specify the "
+"[Resource] type that should be handled by the [ResourceFormatLoader]. "
+"Anything that inherits from [Resource] can be used as a type hint, for "
+"example [Image].\n"
+"If [code]no_cache[/code] is [code]true[/code], the resource cache will be "
+"bypassed and the resource will be loaded anew. Otherwise, the cached "
+"resource will be returned if it exists.\n"
+"Returns an empty resource if no [ResourceFormatLoader] could handle the "
+"file.\n"
+"GDScript has a simplified [method @GDScript.load] built-in method which can "
+"be used in most situations, leaving the use of [ResourceLoader] for more "
+"advanced scenarios."
+msgstr ""
+
+#: doc/classes/ResourceLoader.xml:71
+msgid ""
+"Starts loading a resource interactively. The returned "
+"[ResourceInteractiveLoader] object allows to load with high granularity, "
+"calling its [method ResourceInteractiveLoader.poll] method successively to "
+"load chunks.\n"
+"An optional [code]type_hint[/code] can be used to further specify the "
+"[Resource] type that should be handled by the [ResourceFormatLoader]. "
+"Anything that inherits from [Resource] can be used as a type hint, for "
+"example [Image]."
+msgstr ""
+
+#: doc/classes/ResourceLoader.xml:79
+msgid ""
+"Changes the behavior on missing sub-resources. The default behavior is to "
+"abort loading."
+msgstr ""
+
+#: doc/classes/ResourcePreloader.xml:4
+msgid "Resource Preloader Node."
+msgstr ""
+
+#: doc/classes/ResourcePreloader.xml:7
+msgid ""
+"This node is used to preload sub-resources inside a scene, so when the scene "
+"is loaded, all the resources are ready to use and can be retrieved from the "
+"preloader.\n"
+"GDScript has a simplified [method @GDScript.preload] built-in method which "
+"can be used in most situations, leaving the use of [ResourcePreloader] for "
+"more advanced scenarios."
+msgstr ""
+
+#: doc/classes/ResourcePreloader.xml:18
+msgid ""
+"Adds a resource to the preloader with the given [code]name[/code]. If a "
+"resource with the given [code]name[/code] already exists, the new resource "
+"will be renamed to \"[code]name[/code] N\" where N is an incrementing number "
+"starting from 2."
+msgstr ""
+
+#: doc/classes/ResourcePreloader.xml:25
+msgid "Returns the resource associated to [code]name[/code]."
+msgstr ""
+
+#: doc/classes/ResourcePreloader.xml:31
+msgid "Returns the list of resources inside the preloader."
+msgstr ""
+
+#: doc/classes/ResourcePreloader.xml:38
+msgid ""
+"Returns [code]true[/code] if the preloader contains a resource associated to "
+"[code]name[/code]."
+msgstr ""
+
+#: doc/classes/ResourcePreloader.xml:45
+msgid ""
+"Removes the resource associated to [code]name[/code] from the preloader."
+msgstr ""
+
+#: doc/classes/ResourcePreloader.xml:53
+msgid ""
+"Renames a resource inside the preloader from [code]name[/code] to "
+"[code]newname[/code]."
+msgstr ""
+
+#: doc/classes/ResourceSaver.xml:4
+msgid "Singleton for saving Godot-specific resource types."
+msgstr ""
+
+#: doc/classes/ResourceSaver.xml:7
+msgid ""
+"Singleton for saving Godot-specific resource types to the filesystem.\n"
+"It uses the many [ResourceFormatSaver] classes registered in the engine "
+"(either built-in or from a plugin) to save engine-specific resource data to "
+"text-based (e.g. [code].tres[/code] or [code].tscn[/code]) or binary files "
+"(e.g. [code].res[/code] or [code].scn[/code])."
+msgstr ""
+
+#: doc/classes/ResourceSaver.xml:17
+msgid ""
+"Returns the list of extensions available for saving a resource of a given "
+"type."
+msgstr ""
+
+#: doc/classes/ResourceSaver.xml:26
+msgid ""
+"Saves a resource to disk to the given path, using a [ResourceFormatSaver] "
+"that recognizes the resource object.\n"
+"The [code]flags[/code] bitmask can be specified to customize the save "
+"behavior.\n"
+"Returns [constant OK] on success."
+msgstr ""
+
+#: doc/classes/ResourceSaver.xml:34
+msgid "Save the resource with a path relative to the scene which uses it."
+msgstr ""
+
+#: doc/classes/ResourceSaver.xml:37
+msgid "Bundles external resources."
+msgstr ""
+
+#: doc/classes/ResourceSaver.xml:40
+msgid ""
+"Changes the [member Resource.resource_path] of the saved resource to match "
+"its new location."
+msgstr ""
+
+#: doc/classes/ResourceSaver.xml:43
+msgid ""
+"Do not save editor-specific metadata (identified by their [code]__editor[/"
+"code] prefix)."
+msgstr ""
+
+#: doc/classes/ResourceSaver.xml:46
+msgid "Save as big endian (see [member File.endian_swap])."
+msgstr ""
+
+#: doc/classes/ResourceSaver.xml:49
+msgid ""
+"Compress the resource on save using [constant File.COMPRESSION_ZSTD]. Only "
+"available for binary resource types."
+msgstr ""
+
+#: doc/classes/ResourceSaver.xml:52
+msgid ""
+"Take over the paths of the saved subresources (see [method Resource."
+"take_over_path])."
+msgstr ""
+
+#: doc/classes/RichTextEffect.xml:4
+msgid "A custom effect for use with [RichTextLabel]."
+msgstr ""
+
+#: doc/classes/RichTextEffect.xml:7
+msgid ""
+"A custom effect for use with [RichTextLabel].\n"
+"[b]Note:[/b] For a [RichTextEffect] to be usable, a BBCode tag must be "
+"defined as a member variable called [code]bbcode[/code] in the script.\n"
+"[codeblock]\n"
+"# The RichTextEffect will be usable like this: `[example]Some text[/"
+"example]`\n"
+"var bbcode = \"example\"\n"
+"[/codeblock]\n"
+"[b]Note:[/b] As soon as a [RichTextLabel] contains at least one "
+"[RichTextEffect], it will continuously process the effect unless the project "
+"is paused. This may impact battery life negatively."
+msgstr ""
+
+#: doc/classes/RichTextEffect.xml:24
+msgid ""
+"Override this method to modify properties in [code]char_fx[/code]. The "
+"method must return [code]true[/code] if the character could be transformed "
+"successfully. If the method returns [code]false[/code], it will skip "
+"transformation to avoid displaying broken text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:4
+msgid "Label that displays rich text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:7
+msgid ""
+"Rich text can contain custom text, fonts, images and some basic formatting. "
+"The label manages these as an internal tag stack. It also adapts itself to "
+"given width/heights.\n"
+"[b]Note:[/b] Assignments to [member bbcode_text] clear the tag stack and "
+"reconstruct it from the property's contents. Any edits made to [member "
+"bbcode_text] will erase previous edits made from other manual sources such "
+"as [method append_bbcode] and the [code]push_*[/code] / [method pop] "
+"methods.\n"
+"[b]Note:[/b] RichTextLabel doesn't support entangled BBCode tags. For "
+"example, instead of using [code][b]bold[i]bold italic[/b]italic[/i][/code], "
+"use [code][b]bold[i]bold italic[/i][/b][i]italic[/i][/code].\n"
+"[b]Note:[/b] [code]push_*/pop[/code] functions won't affect BBCode.\n"
+"[b]Note:[/b] Unlike [Label], RichTextLabel doesn't have a [i]property[/i] to "
+"horizontally align text to the center. Instead, enable [member "
+"bbcode_enabled] and surround the text in a [code][center][/code] tag as "
+"follows: [code][center]Example[/center][/code]. There is currently no built-"
+"in way to vertically align text either, but this can be emulated by relying "
+"on anchors/containers and the [member fit_content_height] property.\n"
+"[b]Note:[/b] Unicode characters after [code]0xffff[/code] (such as most "
+"emoji) are [i]not[/i] supported on Windows. They will display as unknown "
+"characters instead. This will be resolved in Godot 4.0."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:16
+msgid "https://godotengine.org/asset-library/asset/132"
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:26
+msgid ""
+"Adds an image's opening and closing tags to the tag stack, optionally "
+"providing a [code]width[/code] and [code]height[/code] to resize the image.\n"
+"If [code]width[/code] or [code]height[/code] is set to 0, the image size "
+"will be adjusted in order to keep the original aspect ratio."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:34
+msgid "Adds raw non-BBCode-parsed text to the tag stack."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:41
+msgid ""
+"Parses [code]bbcode[/code] and adds tags to the tag stack as needed. Returns "
+"the result of the parsing, [constant OK] if successful.\n"
+"[b]Note:[/b] Using this method, you can't close a tag that was opened in a "
+"previous [method append_bbcode] call. This is done to improve performance, "
+"especially when updating large RichTextLabels since rebuilding the whole "
+"BBCode every time would be slower. If you absolutely need to close a tag in "
+"a future method call, append the [member bbcode_text] instead of using "
+"[method append_bbcode]."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:48
+msgid "Clears the tag stack and sets [member bbcode_text] to an empty string."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:54
+msgid "Returns the height of the content."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:60
+msgid ""
+"Returns the total number of newlines in the tag stack's text tags. Considers "
+"wrapped text as one line."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:66
+msgid ""
+"Returns the total number of characters from text tags. Does not include "
+"BBCodes."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:72
+msgid ""
+"Returns the vertical scrollbar.\n"
+"[b]Warning:[/b] This is a required internal node, removing and freeing it "
+"may cause a crash. If you wish to hide it or any of its children, use their "
+"[member CanvasItem.visible] property."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:79
+msgid "Returns the number of visible lines."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:86
+msgid ""
+"Installs a custom effect. [code]effect[/code] should be a valid "
+"[RichTextEffect]."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:92
+msgid "Adds a newline tag to the tag stack."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:99
+msgid ""
+"The assignment version of [method append_bbcode]. Clears the tag stack and "
+"inserts the new content. Returns [constant OK] if parses [code]bbcode[/code] "
+"successfully."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:106
+msgid "Parses BBCode parameter [code]expressions[/code] into a dictionary."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:112
+msgid ""
+"Terminates the current tag. Use after [code]push_*[/code] methods to close "
+"BBCodes manually. Does not need to follow [code]add_*[/code] methods."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:119
+msgid ""
+"Adds an [code][align][/code] tag based on the given [code]align[/code] "
+"value. See [enum Align] for possible values."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:125
+msgid ""
+"Adds a [code][font][/code] tag with a bold font to the tag stack. This is "
+"the same as adding a [code][b][/code] tag if not currently in a [code][i][/"
+"code] tag."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:131
+msgid ""
+"Adds a [code][font][/code] tag with a bold italics font to the tag stack."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:137
+msgid ""
+"Adds a [code][cell][/code] tag to the tag stack. Must be inside a [code]"
+"[table][/code] tag. See [method push_table] for details."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:144
+msgid "Adds a [code][color][/code] tag to the tag stack."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:151
+msgid ""
+"Adds a [code][font][/code] tag to the tag stack. Overrides default fonts for "
+"its duration."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:158
+msgid ""
+"Adds an [code][indent][/code] tag to the tag stack. Multiplies [code]level[/"
+"code] by current [member tab_size] to determine new margin length."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:164
+msgid ""
+"Adds a [code][font][/code] tag with a italics font to the tag stack. This is "
+"the same as adding a [code][i][/code] tag if not currently in a [code][b][/"
+"code] tag."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:171
+msgid ""
+"Adds a [code][list][/code] tag to the tag stack. Similar to the BBCodes "
+"[code][ol][/code] or [code][ul][/code], but supports more list types. Not "
+"fully implemented!"
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:178
+msgid ""
+"Adds a [code][meta][/code] tag to the tag stack. Similar to the BBCode [code]"
+"[url=something]{text}[/url][/code], but supports non-[String] metadata types."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:184
+msgid "Adds a [code][font][/code] tag with a monospace font to the tag stack."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:190
+msgid "Adds a [code][font][/code] tag with a normal font to the tag stack."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:196
+msgid "Adds a [code][s][/code] tag to the tag stack."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:203
+msgid "Adds a [code][table=columns][/code] tag to the tag stack."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:209
+msgid "Adds a [code][u][/code] tag to the tag stack."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:216
+msgid ""
+"Removes a line of content from the label. Returns [code]true[/code] if the "
+"line exists.\n"
+"The [code]line[/code] argument is the index of the line to remove, it can "
+"take values in the interval [code][0, get_line_count() - 1][/code]."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:224
+msgid "Scrolls the window's top line to match [code]line[/code]."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:233
+msgid ""
+"Edits the selected column's expansion options. If [code]expand[/code] is "
+"[code]true[/code], the column expands in proportion to its expansion ratio "
+"versus the other columns' ratios.\n"
+"For example, 2 columns with ratios 3 and 4 plus 70 pixels in available width "
+"would expand 30 and 40 pixels, respectively.\n"
+"If [code]expand[/code] is [code]false[/code], the column will not contribute "
+"to the total ratio."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:241
+msgid ""
+"If [code]true[/code], the label uses BBCode formatting.\n"
+"[b]Note:[/b] Trying to alter the [RichTextLabel]'s text with [method "
+"add_text] will reset this to [code]false[/code]. Use instead [method "
+"append_bbcode] to preserve BBCode formatting."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:245
+msgid ""
+"The label's text in BBCode format. Is not representative of manual "
+"modifications to the internal tag stack. Erases changes made by other "
+"methods when edited.\n"
+"[b]Note:[/b] It is unadvised to use the [code]+=[/code] operator with "
+"[code]bbcode_text[/code] (e.g. [code]bbcode_text += \"some string\"[/code]) "
+"as it replaces the whole text and can cause slowdowns. Use [method "
+"append_bbcode] for adding text instead, unless you absolutely need to close "
+"a tag that was opened in an earlier method call."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:249
+msgid ""
+"The currently installed custom effects. This is an array of "
+"[RichTextEffect]s.\n"
+"To add a custom effect, it's more convenient to use [method install_effect]."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:253
+msgid ""
+"If [code]true[/code], the label's height will be automatically updated to "
+"fit its content.\n"
+"[b]Note:[/b] This property is used as a workaround to fix issues with "
+"[RichTextLabel] in [Container]s, but it's unreliable in some cases and will "
+"be removed in future versions."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:257
+msgid ""
+"If [code]true[/code], the label underlines meta tags such as [code][url]"
+"{text}[/url][/code]."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:260
+msgid "If [code]true[/code], the label uses the custom font color."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:263
+msgid ""
+"The range of characters to display, as a [float] between 0.0 and 1.0. When "
+"assigned an out of range value, it's the same as assigning 1.0.\n"
+"[b]Note:[/b] Setting this property updates [member visible_characters] based "
+"on current [method get_total_character_count]."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:268
+msgid ""
+"If [code]true[/code], the scrollbar is visible. Setting this to [code]false[/"
+"code] does not block scrolling completely. See [method scroll_to_line]."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:271
+msgid ""
+"If [code]true[/code], the window scrolls down to display new content "
+"automatically."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:274
+msgid "If [code]true[/code], the label allows text selection."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:277
+msgid ""
+"The number of spaces associated with a single tab length. Does not affect "
+"[code]\\t[/code] in text tags, only indent tags."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:280
+msgid ""
+"The raw text of the label.\n"
+"When set, clears the tag stack and adds a raw text tag to the top of it. "
+"Does not parse BBCodes. Does not modify [member bbcode_text]."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:284
+msgid ""
+"The restricted number of characters to display in the label. If [code]-1[/"
+"code], all characters will be displayed.\n"
+"[b]Note:[/b] Setting this property updates [member percent_visible] based on "
+"current [method get_total_character_count]."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:292
+msgid ""
+"Triggered when the user clicks on content between meta tags. If the meta is "
+"defined in text, e.g. [code][url={\"data\"=\"hi\"}]hi[/url][/code], then the "
+"parameter for this signal will be a [String] type. If a particular type or "
+"an object is desired, the [method push_meta] method must be used to manually "
+"insert the data into the tag stack."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:298
+msgid "Triggers when the mouse exits a meta tag."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:304
+msgid "Triggers when the mouse enters a meta tag."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:310
+msgid "Makes text left aligned."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:313
+msgid "Makes text centered."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:316
+msgid "Makes text right aligned."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:319
+msgid "Makes text fill width."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:322
+msgid "Each list item has a number marker."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:325
+msgid "Each list item has a letter marker."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:328
+msgid "Each list item has a filled circle marker."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:371
+msgid "The font used for bold text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:374
+msgid "The font used for bold italics text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:377
+msgid "The default text color."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:380
+msgid "The background The background used when the [RichTextLabel] is focused."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:383
+msgid ""
+"The color of selected text, used when [member selection_enabled] is "
+"[code]true[/code]."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:386
+msgid "The color of the font's shadow."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:389
+msgid "The font used for italics text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:392
+msgid "The vertical space between lines."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:395
+msgid "The font used for monospace text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:398
+msgid "The normal background for the [RichTextLabel]."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:401
+msgid "The default text font."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:404
+msgid "The color of the selection box."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:407
+msgid ""
+"Boolean value. If 1 ([code]true[/code]), the shadow will be displayed around "
+"the whole text as an outline."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:410
+msgid "The horizontal offset of the font's shadow."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:413
+msgid "The vertical offset of the font's shadow."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:416
+msgid "The horizontal separation of elements in a table."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml:419
+msgid "The vertical separation of elements in a table."
+msgstr ""
+
+#: doc/classes/RID.xml:4
+msgid "Handle for a [Resource]'s unique ID."
+msgstr ""
+
+#: doc/classes/RID.xml:7
+msgid ""
+"The RID type is used to access the unique integer ID of a resource. They are "
+"opaque, which means they do not grant access to the associated resource by "
+"themselves. They are used by and with the low-level Server classes such as "
+"[VisualServer]."
+msgstr ""
+
+#: doc/classes/RID.xml:16
+msgid ""
+"Creates a new RID instance with the ID of a given resource. When not handed "
+"a valid resource, silently stores the unused ID 0."
+msgstr ""
+
+#: doc/classes/RID.xml:22
+msgid "Returns the ID of the referenced resource."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:4
+msgid ""
+"Physics Body whose position is determined through physics simulation in 3D "
+"space."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:7
+msgid ""
+"This is the node that implements full 3D physics. This means that you do not "
+"control a RigidBody directly. Instead, you can apply forces to it (gravity, "
+"impulses, etc.), and the physics simulation will calculate the resulting "
+"movement, collision, bouncing, rotating, etc.\n"
+"A RigidBody has 4 behavior [member mode]s: Rigid, Static, Character, and "
+"Kinematic.\n"
+"[b]Note:[/b] Don't change a RigidBody's position every frame or very often. "
+"Sporadic changes work fine, but physics runs at a different granularity "
+"(fixed Hz) than usual rendering (process callback) and maybe even in a "
+"separate thread, so changing this from a process loop may result in strange "
+"behavior. If you need to directly affect the body's state, use [method "
+"_integrate_forces], which allows you to directly access the physics state.\n"
+"If you need to override the default physics behavior, you can write a custom "
+"force integration function. See [member custom_integrator].\n"
+"With Bullet physics (the default), the center of mass is the RigidBody3D "
+"center. With GodotPhysics, the center of mass is the average of the "
+"[CollisionShape] centers."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:23
+msgid ""
+"Called during physics processing, allowing you to read and safely modify the "
+"simulation state for the object. By default, it works in addition to the "
+"usual physics behavior, but the [member custom_integrator] property allows "
+"you to disable the default behavior and do fully custom force integration "
+"for a body."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:30
+msgid ""
+"Adds a constant directional force (i.e. acceleration) without affecting "
+"rotation.\n"
+"This is equivalent to [code]add_force(force, Vector3(0,0,0))[/code]."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:39
+msgid ""
+"Adds a constant directional force (i.e. acceleration).\n"
+"The position uses the rotation of the global coordinate system, but is "
+"centered at the object's origin."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:47
+msgid ""
+"Adds a constant rotational force (i.e. a motor) without affecting position."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:54
+msgid ""
+"Applies a directional impulse without affecting rotation.\n"
+"This is equivalent to [code]apply_impulse(Vector3(0,0,0), impulse)[/code]."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:63
+msgid ""
+"Applies a positioned impulse to the body. An impulse is time independent! "
+"Applying an impulse every frame would result in a framerate-dependent force. "
+"For this reason it should only be used when simulating one-time impacts. The "
+"position uses the rotation of the global coordinate system, but is centered "
+"at the object's origin."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:70
+msgid ""
+"Applies a torque impulse which will be affected by the body mass and shape. "
+"This will rotate the body around the [code]impulse[/code] vector passed."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:77
+msgid ""
+"Returns [code]true[/code] if the specified linear or rotational axis is "
+"locked."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:83 doc/classes/RigidBody2D.xml:73
+msgid ""
+"Returns a list of the bodies colliding with this one. Requires [member "
+"contact_monitor] to be set to [code]true[/code] and [member "
+"contacts_reported] to be set high enough to detect all the collisions.\n"
+"[b]Note:[/b] The result of this test is not immediate after moving objects. "
+"For performance, list of collisions is updated once per frame and before the "
+"physics step. Consider using signals instead."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:90
+msgid ""
+"Returns the inverse inertia tensor basis. This is used to calculate the "
+"angular acceleration resulting from a torque applied to the RigidBody."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:98
+msgid "Locks the specified linear or rotational axis."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:111
+msgid ""
+"Damps RigidBody's rotational forces.\n"
+"See [member ProjectSettings.physics/3d/default_angular_damp] for more "
+"details about damping."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:115
+msgid "RigidBody's rotational velocity."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:118
+msgid "Lock the body's rotation in the X axis."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:121
+msgid "Lock the body's rotation in the Y axis."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:124
+msgid "Lock the body's rotation in the Z axis."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:127
+msgid "Lock the body's movement in the X axis."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:130
+msgid "Lock the body's movement in the Y axis."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:133
+msgid "Lock the body's movement in the Z axis."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:136 doc/classes/RigidBody2D.xml:110
+#: doc/classes/StaticBody.xml:19 doc/classes/StaticBody2D.xml:16
+msgid ""
+"The body's bounciness. Values range from [code]0[/code] (no bounce) to "
+"[code]1[/code] (full bounciness).\n"
+"Deprecated, use [member PhysicsMaterial.bounce] instead via [member "
+"physics_material_override]."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:140
+msgid ""
+"If [code]true[/code], the body can enter sleep mode when there is no "
+"movement. See [member sleeping].\n"
+"[b]Note:[/b] A RigidBody3D will never enter sleep mode automatically if its "
+"[member mode] is [constant MODE_CHARACTER]. It can still be put to sleep "
+"manually by setting its [member sleeping] property to [code]true[/code]."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:144
+msgid ""
+"If [code]true[/code], the RigidBody will emit signals when it collides with "
+"another RigidBody. See also [member contacts_reported]."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:147
+msgid ""
+"The maximum number of contacts that will be recorded. Requires [member "
+"contact_monitor] to be set to [code]true[/code].\n"
+"[b]Note:[/b] The number of contacts is different from the number of "
+"collisions. Collisions between parallel edges will result in two contacts "
+"(one at each end), and collisions between parallel faces will result in four "
+"contacts (one at each corner)."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:151
+msgid ""
+"If [code]true[/code], continuous collision detection is used.\n"
+"Continuous collision detection tries to predict where a moving body will "
+"collide, instead of moving it and correcting its movement if it collided. "
+"Continuous collision detection is more precise, and misses fewer impacts by "
+"small, fast-moving objects. Not using continuous collision detection is "
+"faster to compute, but can miss small, fast-moving objects."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:155
+msgid ""
+"If [code]true[/code], internal force integration will be disabled (like "
+"gravity or air friction) for this body. Other than collision response, the "
+"body will only move as determined by the [method _integrate_forces] "
+"function, if defined."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:158
+msgid ""
+"The body's friction, from 0 (frictionless) to 1 (max friction).\n"
+"Deprecated, use [member PhysicsMaterial.friction] instead via [member "
+"physics_material_override]."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:162
+msgid ""
+"This is multiplied by the global 3D gravity setting found in [b]Project > "
+"Project Settings > Physics > 3d[/b] to produce RigidBody's gravity. For "
+"example, a value of 1 will be normal gravity, 2 will apply double gravity, "
+"and 0.5 will apply half gravity to this object."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:165
+msgid ""
+"The body's linear damp. Cannot be less than -1.0. If this value is different "
+"from -1.0, any linear damp derived from the world or areas will be "
+"overridden.\n"
+"See [member ProjectSettings.physics/3d/default_linear_damp] for more details "
+"about damping."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:169
+msgid ""
+"The body's linear velocity. Can be used sporadically, but [b]don't set this "
+"every frame[/b], because physics may run in another thread and runs at a "
+"different granularity. Use [method _integrate_forces] as your process loop "
+"for precise control of the body state."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:172 doc/classes/RigidBody2D.xml:149
+msgid "The body's mass."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:175
+msgid "The body mode. See [enum Mode] for possible values."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:178 doc/classes/RigidBody2D.xml:155
+#: doc/classes/StaticBody.xml:33 doc/classes/StaticBody2D.xml:30
+msgid ""
+"The physics material override for the body.\n"
+"If a material is assigned to this property, it will be used instead of any "
+"other physics material, such as an inherited one."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:182 doc/classes/RigidBody2D.xml:159
+msgid ""
+"If [code]true[/code], the body will not move and will not calculate forces "
+"until woken up by another body through, for example, a collision, or by "
+"using the [method apply_impulse] or [method add_force] methods."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:185
+msgid ""
+"The body's weight based on its mass and the global 3D gravity. Global values "
+"are set in [b]Project > Project Settings > Physics > 3d[/b]."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:192
+msgid ""
+"Emitted when a collision with another [PhysicsBody] or [GridMap] occurs. "
+"Requires [member contact_monitor] to be set to [code]true[/code] and [member "
+"contacts_reported] to be set high enough to detect all the collisions. "
+"[GridMap]s are detected if the [MeshLibrary] has Collision [Shape]s.\n"
+"[code]body[/code] the [Node], if it exists in the tree, of the other "
+"[PhysicsBody] or [GridMap]."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:199
+msgid ""
+"Emitted when the collision with another [PhysicsBody] or [GridMap] ends. "
+"Requires [member contact_monitor] to be set to [code]true[/code] and [member "
+"contacts_reported] to be set high enough to detect all the collisions. "
+"[GridMap]s are detected if the [MeshLibrary] has Collision [Shape]s.\n"
+"[code]body[/code] the [Node], if it exists in the tree, of the other "
+"[PhysicsBody] or [GridMap]."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:209
+msgid ""
+"Emitted when one of this RigidBody's [Shape]s collides with another "
+"[PhysicsBody] or [GridMap]'s [Shape]s. Requires [member contact_monitor] to "
+"be set to [code]true[/code] and [member contacts_reported] to be set high "
+"enough to detect all the collisions. [GridMap]s are detected if the "
+"[MeshLibrary] has Collision [Shape]s.\n"
+"[code]body_rid[/code] the [RID] of the other [PhysicsBody] or "
+"[MeshLibrary]'s [CollisionObject] used by the [PhysicsServer].\n"
+"[code]body[/code] the [Node], if it exists in the tree, of the other "
+"[PhysicsBody] or [GridMap].\n"
+"[code]body_shape_index[/code] the index of the [Shape] of the other "
+"[PhysicsBody] or [GridMap] used by the [PhysicsServer]. Get the "
+"[CollisionShape] node with [code]body.shape_owner_get_owner(body_shape_index)"
+"[/code].\n"
+"[code]local_shape_index[/code] the index of the [Shape] of this RigidBody "
+"used by the [PhysicsServer]. Get the [CollisionShape] node with [code]self."
+"shape_owner_get_owner(local_shape_index)[/code].\n"
+"[b]Note:[/b] Bullet physics cannot identify the shape index when using a "
+"[ConcavePolygonShape]. Don't use multiple [CollisionShape]s when using a "
+"[ConcavePolygonShape] with Bullet physics if you need shape indices."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:223
+msgid ""
+"Emitted when the collision between one of this RigidBody's [Shape]s and "
+"another [PhysicsBody] or [GridMap]'s [Shape]s ends. Requires [member "
+"contact_monitor] to be set to [code]true[/code] and [member "
+"contacts_reported] to be set high enough to detect all the collisions. "
+"[GridMap]s are detected if the [MeshLibrary] has Collision [Shape]s.\n"
+"[code]body_rid[/code] the [RID] of the other [PhysicsBody] or "
+"[MeshLibrary]'s [CollisionObject] used by the [PhysicsServer]. [GridMap]s "
+"are detected if the Meshes have [Shape]s.\n"
+"[code]body[/code] the [Node], if it exists in the tree, of the other "
+"[PhysicsBody] or [GridMap].\n"
+"[code]body_shape_index[/code] the index of the [Shape] of the other "
+"[PhysicsBody] or [GridMap] used by the [PhysicsServer]. Get the "
+"[CollisionShape] node with [code]body.shape_owner_get_owner(body_shape_index)"
+"[/code].\n"
+"[code]local_shape_index[/code] the index of the [Shape] of this RigidBody "
+"used by the [PhysicsServer]. Get the [CollisionShape] node with [code]self."
+"shape_owner_get_owner(local_shape_index)[/code].\n"
+"[b]Note:[/b] Bullet physics cannot identify the shape index when using a "
+"[ConcavePolygonShape]. Don't use multiple [CollisionShape]s when using a "
+"[ConcavePolygonShape] with Bullet physics if you need shape indices."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:233 doc/classes/RigidBody2D.xml:208
+msgid ""
+"Emitted when the physics engine changes the body's sleeping state.\n"
+"[b]Note:[/b] Changing the value [member sleeping] will not trigger this "
+"signal. It is only emitted if the sleeping state is changed by the physics "
+"engine or [code]emit_signal(\"sleeping_state_changed\")[/code] is used."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:240
+msgid ""
+"Rigid body mode. This is the \"natural\" state of a rigid body. It is "
+"affected by forces, and can move, rotate, and be affected by user code."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:243
+msgid ""
+"Static mode. The body behaves like a [StaticBody], and can only move by user "
+"code."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:246
+msgid ""
+"Character body mode. This behaves like a rigid body, but can not rotate."
+msgstr ""
+
+#: doc/classes/RigidBody.xml:249
+msgid ""
+"Kinematic body mode. The body behaves like a [KinematicBody], and can only "
+"move by user code."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:4
+msgid "A body that is controlled by the 2D physics engine."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:7
+msgid ""
+"This node implements simulated 2D physics. You do not control a RigidBody2D "
+"directly. Instead, you apply forces to it (gravity, impulses, etc.) and the "
+"physics simulation calculates the resulting movement based on its mass, "
+"friction, and other physical properties.\n"
+"A RigidBody2D has 4 behavior [member mode]s: Rigid, Static, Character, and "
+"Kinematic.\n"
+"[b]Note:[/b] You should not change a RigidBody2D's [code]position[/code] or "
+"[code]linear_velocity[/code] every frame or even very often. If you need to "
+"directly affect the body's state, use [method _integrate_forces], which "
+"allows you to directly access the physics state.\n"
+"Please also keep in mind that physics bodies manage their own transform "
+"which overwrites the ones you set. So any direct or indirect transformation "
+"(including scaling of the node or its parent) will be visible in the editor "
+"only, and immediately reset at runtime.\n"
+"If you need to override the default physics behavior or add a transformation "
+"at runtime, you can write a custom force integration. See [member "
+"custom_integrator].\n"
+"The center of mass is always located at the node's origin without taking "
+"into account the [CollisionShape2D] centroid offsets."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:15
+msgid "https://godotengine.org/asset-library/asset/119"
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:16 doc/classes/Sprite.xml:10
+msgid "https://godotengine.org/asset-library/asset/148"
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:23
+msgid ""
+"Allows you to read and safely modify the simulation state for the object. "
+"Use this instead of [method Node._physics_process] if you need to directly "
+"change the body's [code]position[/code] or other physics properties. By "
+"default, it works in addition to the usual physics behavior, but [member "
+"custom_integrator] allows you to disable the default behavior and write "
+"custom force integration for a body."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:60
+msgid ""
+"Applies a positioned impulse to the body. An impulse is time-independent! "
+"Applying an impulse every frame would result in a framerate-dependent force. "
+"For this reason it should only be used when simulating one-time impacts (use "
+"the \"_force\" functions otherwise). The position uses the rotation of the "
+"global coordinate system, but is centered at the object's origin."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:81
+msgid ""
+"Sets the body's velocity on the given axis. The velocity in the given vector "
+"axis will be set as the given vector length. This is useful for jumping "
+"behavior."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:91
+msgid ""
+"Returns [code]true[/code] if a collision would result from moving in the "
+"given vector. [code]margin[/code] increases the size of the shapes involved "
+"in the collision detection, and [code]result[/code] is an object of type "
+"[Physics2DTestMotionResult], which contains additional information about the "
+"collision (should there be one)."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:97
+msgid ""
+"Damps the body's [member angular_velocity]. If [code]-1[/code], the body "
+"will use the [b]Default Angular Damp[/b] defined in [b]Project > Project "
+"Settings > Physics > 2d[/b].\n"
+"See [member ProjectSettings.physics/2d/default_angular_damp] for more "
+"details about damping."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:104
+msgid "The body's total applied force."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:107
+msgid "The body's total applied torque."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:114
+msgid ""
+"If [code]true[/code], the body can enter sleep mode when there is no "
+"movement. See [member sleeping].\n"
+"[b]Note:[/b] A RigidBody2D will never enter sleep mode automatically if its "
+"[member mode] is [constant MODE_CHARACTER]. It can still be put to sleep "
+"manually by setting its [member sleeping] property to [code]true[/code]."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:118
+msgid ""
+"If [code]true[/code], the body will emit signals when it collides with "
+"another RigidBody2D. See also [member contacts_reported]."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:121
+msgid ""
+"The maximum number of contacts that will be recorded. Requires [member "
+"contact_monitor] to be set to [code]true[/code].\n"
+"[b]Note:[/b] The number of contacts is different from the number of "
+"collisions. Collisions between parallel edges will result in two contacts "
+"(one at each end)."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:125
+msgid ""
+"Continuous collision detection mode.\n"
+"Continuous collision detection tries to predict where a moving body will "
+"collide instead of moving it and correcting its movement after collision. "
+"Continuous collision detection is slower, but more precise and misses fewer "
+"collisions with small, fast-moving objects. Raycasting and shapecasting "
+"methods are available. See [enum CCDMode] for details."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:129
+msgid ""
+"If [code]true[/code], internal force integration is disabled for this body. "
+"Aside from collision response, the body will only move as determined by the "
+"[method _integrate_forces] function."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:132
+msgid ""
+"The body's friction. Values range from [code]0[/code] (frictionless) to "
+"[code]1[/code] (maximum friction).\n"
+"Deprecated, use [member PhysicsMaterial.friction] instead via [member "
+"physics_material_override]."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:136
+msgid ""
+"Multiplies the gravity applied to the body. The body's gravity is calculated "
+"from the [b]Default Gravity[/b] value in [b]Project > Project Settings > "
+"Physics > 2d[/b] and/or any additional gravity vector applied by [Area2D]s."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:139
+msgid ""
+"The body's moment of inertia. This is like mass, but for rotation: it "
+"determines how much torque it takes to rotate the body. The moment of "
+"inertia is usually computed automatically from the mass and the shapes, but "
+"this function allows you to set a custom value. Set 0 inertia to return to "
+"automatically computing it."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:142
+msgid ""
+"Damps the body's [member linear_velocity]. If [code]-1[/code], the body will "
+"use the [b]Default Linear Damp[/b] in [b]Project > Project Settings > "
+"Physics > 2d[/b].\n"
+"See [member ProjectSettings.physics/2d/default_linear_damp] for more details "
+"about damping."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:152
+msgid "The body's mode. See [enum Mode] for possible values."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:162
+msgid ""
+"The body's weight based on its mass and the [b]Default Gravity[/b] value in "
+"[b]Project > Project Settings > Physics > 2d[/b]."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:169
+msgid ""
+"Emitted when a collision with another [PhysicsBody2D] or [TileMap] occurs. "
+"Requires [member contact_monitor] to be set to [code]true[/code] and [member "
+"contacts_reported] to be set high enough to detect all the collisions. "
+"[TileMap]s are detected if the [TileSet] has Collision [Shape2D]s.\n"
+"[code]body[/code] the [Node], if it exists in the tree, of the other "
+"[PhysicsBody2D] or [TileMap]."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:176
+msgid ""
+"Emitted when the collision with another [PhysicsBody2D] or [TileMap] ends. "
+"Requires [member contact_monitor] to be set to [code]true[/code] and [member "
+"contacts_reported] to be set high enough to detect all the collisions. "
+"[TileMap]s are detected if the [TileSet] has Collision [Shape2D]s.\n"
+"[code]body[/code] the [Node], if it exists in the tree, of the other "
+"[PhysicsBody2D] or [TileMap]."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:186
+msgid ""
+"Emitted when one of this RigidBody2D's [Shape2D]s collides with another "
+"[PhysicsBody2D] or [TileMap]'s [Shape2D]s. Requires [member contact_monitor] "
+"to be set to [code]true[/code] and [member contacts_reported] to be set high "
+"enough to detect all the collisions. [TileMap]s are detected if the "
+"[TileSet] has Collision [Shape2D]s.\n"
+"[code]body_rid[/code] the [RID] of the other [PhysicsBody2D] or [TileSet]'s "
+"[CollisionObject2D] used by the [Physics2DServer].\n"
+"[code]body[/code] the [Node], if it exists in the tree, of the other "
+"[PhysicsBody2D] or [TileMap].\n"
+"[code]body_shape_index[/code] the index of the [Shape2D] of the other "
+"[PhysicsBody2D] or [TileMap] used by the [Physics2DServer]. Get the "
+"[CollisionShape2D] node with [code]body."
+"shape_owner_get_owner(body_shape_index)[/code].\n"
+"[code]local_shape_index[/code] the index of the [Shape2D] of this "
+"RigidBody2D used by the [Physics2DServer]. Get the [CollisionShape2D] node "
+"with [code]self.shape_owner_get_owner(local_shape_index)[/code]."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:199
+msgid ""
+"Emitted when the collision between one of this RigidBody2D's [Shape2D]s and "
+"another [PhysicsBody2D] or [TileMap]'s [Shape2D]s ends. Requires [member "
+"contact_monitor] to be set to [code]true[/code] and [member "
+"contacts_reported] to be set high enough to detect all the collisions. "
+"[TileMap]s are detected if the [TileSet] has Collision [Shape2D]s.\n"
+"[code]body_rid[/code] the [RID] of the other [PhysicsBody2D] or [TileSet]'s "
+"[CollisionObject2D] used by the [Physics2DServer].\n"
+"[code]body[/code] the [Node], if it exists in the tree, of the other "
+"[PhysicsBody2D] or [TileMap].\n"
+"[code]body_shape_index[/code] the index of the [Shape2D] of the other "
+"[PhysicsBody2D] or [TileMap] used by the [Physics2DServer]. Get the "
+"[CollisionShape2D] node with [code]body."
+"shape_owner_get_owner(body_shape_index)[/code].\n"
+"[code]local_shape_index[/code] the index of the [Shape2D] of this "
+"RigidBody2D used by the [Physics2DServer]. Get the [CollisionShape2D] node "
+"with [code]self.shape_owner_get_owner(local_shape_index)[/code]."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:215
+msgid ""
+"Rigid mode. The body behaves as a physical object. It collides with other "
+"bodies and responds to forces applied to it. This is the default mode."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:218
+msgid "Static mode. The body behaves like a [StaticBody2D] and does not move."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:221
+msgid ""
+"Character mode. Similar to [constant MODE_RIGID], but the body can not "
+"rotate."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:224
+msgid ""
+"Kinematic mode. The body behaves like a [KinematicBody2D], and must be moved "
+"by code."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:227
+msgid ""
+"Continuous collision detection disabled. This is the fastest way to detect "
+"body collisions, but can miss small, fast-moving objects."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:230
+msgid ""
+"Continuous collision detection enabled using raycasting. This is faster than "
+"shapecasting but less precise."
+msgstr ""
+
+#: doc/classes/RigidBody2D.xml:233
+msgid ""
+"Continuous collision detection enabled using shapecasting. This is the "
+"slowest CCD method and the most precise."
+msgstr ""
+
+#: doc/classes/Room.xml:4
+msgid "Room node, used to group objects together locally for [Portal] culling."
+msgstr ""
+
+#: doc/classes/Room.xml:7
+msgid ""
+"The [Portal] culling system requires levels to be built using objects "
+"grouped together by location in areas called [Room]s. In many cases these "
+"will correspond to actual rooms in buildings, but not necessarily (a canyon "
+"area may be treated as a room).\n"
+"Any [VisualInstance] that is a child or grandchild of a [Room] will be "
+"assigned to that room, if the [code]portal_mode[/code] of that "
+"[VisualInstance] is set to [code]STATIC[/code] (does not move) or "
+"[code]DYNAMIC[/code] (moves only within the room).\n"
+"Internally the room boundary must form a [b]convex hull[/b], and by default "
+"this is determined automatically by the geometry of the objects you place "
+"within the room.\n"
+"You can alternatively precisely specify a [b]manual bound[/b]. If you place "
+"a [MeshInstance] with a name prefixed by [code]Bound_[/code], it will turn "
+"off the bound generation from geometry, and instead use the vertices of this "
+"MeshInstance to directly calculate a convex hull during the conversion stage "
+"(see [RoomManager]).\n"
+"In order to see from one room into an adjacent room, [Portal]s must be "
+"placed over non-occluded openings between rooms. These will often be placed "
+"over doors and windows."
+msgstr ""
+
+#: doc/classes/Room.xml:27
+msgid ""
+"If [code]points[/code] are set, the [Room] bounding convex hull will be "
+"built from these points. If no points are set, the room bound will either be "
+"derived from a manual bound ([MeshInstance] with name prefix [code]Bound_[/"
+"code]), or from the geometry within the room.\n"
+"Note that you can use the [code]Generate Points[/code] editor button to get "
+"started. This will use either the geometry or manual bound to generate the "
+"room hull, and save the resulting points, allowing you to edit them to "
+"further refine the bound."
+msgstr ""
+
+#: doc/classes/Room.xml:31
+msgid ""
+"The [code]simplify[/code] value determines to what degree room hulls "
+"(bounds) are simplified, by removing similar planes. A value of 0 gives no "
+"simplification, 1 gives maximum simplification."
+msgstr ""
+
+#: doc/classes/Room.xml:34
+msgid ""
+"The room hull simplification can either use the default value set in the "
+"[RoomManager], or override this and use the per room setting."
+msgstr ""
+
+#: doc/classes/RoomGroup.xml:4
+msgid "Groups [Room]s together to allow common functionality."
+msgstr ""
+
+#: doc/classes/RoomGroup.xml:7
+msgid ""
+"Although [Room] behaviour can be specified individually, sometimes it is "
+"faster and more convenient to write functionality for a group of rooms.\n"
+"[RoomGroup]s should be placed as children of the [b]room list[/b] (the "
+"parent [Node] of your [Room]s), and [Room]s should be placed in turn as "
+"children of a [RoomGroup] in order to assign them to the RoomGroup.\n"
+"A [RoomGroup] can for example be used to specify [Room]s that are "
+"[b]outside[/b], and switch on or off a directional light, sky, or rain "
+"effect as the player enters / exits the area.\n"
+"[RoomGroup]s receive [b]gameplay callbacks[/b] when the "
+"[code]gameplay_monitor[/code] is switched on, as [code]signal[/code]s or "
+"[code]notification[/code]s as they enter and exit the [b]gameplay area[/b] "
+"(see [RoomManager] for details)."
+msgstr ""
+
+#: doc/classes/RoomGroup.xml:18
+msgid ""
+"This priority will be applied to [Room]s within the group. The [Room] "
+"priority allows the use of [b]internal rooms[/b], rooms [i]within[/i] "
+"another room or rooms.\n"
+"When the [Camera] is within more than one room (regular and internal), the "
+"higher priority room will take precedence. So with for example, a house "
+"inside a terrain 'room', you would make the house higher priority, so that "
+"when the camera is within the house, the house is used as the source room, "
+"but outside the house, the terrain room would be used instead."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:4
+msgid "The RoomManager node is used to control the portal culling system."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:7
+msgid ""
+"In order to utilize the portal occlusion culling system, you must build your "
+"level using [Room]s and [Portal]s. Before these can be used at runtime, they "
+"must undergo a short conversion process to build the [code]room graph[/"
+"code], runtime data needed for portal culling. The [code]room graph[/code] "
+"is controlled by the [RoomManager] node, and the [RoomManager] also contains "
+"settings that are common throughout the portal system."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:15
+msgid ""
+"This function clears all converted data from the [b]room graph[/b]. Use this "
+"before unloading a level, when transitioning from level to level, or "
+"returning to a main menu."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:21
+msgid ""
+"This is the most important function in the whole portal culling system. "
+"Without it, the system cannot function.\n"
+"First it goes through every [Room] that is a child of the [code]room list[/"
+"code] node (and [RoomGroup]s within) and converts and adds it to the "
+"[code]room graph[/code].\n"
+"This works for both [Room] nodes, and [Spatial] nodes that follow a special "
+"naming convention. They should begin with the prefix [i]'Room_'[/i], "
+"followed by the name you wish to give the room, e.g. [i]'Room_lounge'[/i]. "
+"This will automatically convert such [Spatial]s to [Room] nodes for you. "
+"This is useful if you want to build you entire room system in e.g. Blender, "
+"and reimport multiple times as you work on the level.\n"
+"The conversion will try to assign [VisualInstance]s that are children and "
+"grandchildren of the [Room] to the room. These should be given a suitable "
+"[code]portal mode[/code] (see the [CullInstance] documentation). The default "
+"[code]portal mode[/code] is [code]STATIC[/code] - objects which are not "
+"expected to move while the level is played, which will typically be most "
+"objects.\n"
+"The conversion will usually use the geometry of these [VisualInstance]s (and "
+"the [Portal]s) to calculate a convex hull bound for the room. These bounds "
+"will be shown in the editor with a wireframe. Alternatively you can specify "
+"a manual custom bound for any room, see the [Room] documentation.\n"
+"By definition, [Camera]s within a room can see everything else within the "
+"room (that is one advantage to using convex hulls). However, in order to see "
+"from one room into adjacent rooms, you must place [Portal]s, which represent "
+"openings that the camera can see through, like windows and doors.\n"
+"[Portal]s are really just specialized [MeshInstance]s. In fact you will "
+"usually first create a portal by creating a [MeshInstance], especially a "
+"[code]plane[/code] mesh instance. You would move the plane in the editor to "
+"cover a window or doorway, with the front face pointing outward from the "
+"room. To let the conversion process know you want this mesh to be a portal, "
+"again we use a special naming convention. [MeshInstance]s to be converted to "
+"a [Portal] should start with the prefix [i]'Portal_'[/i].\n"
+"You now have a choice - you can leave the name as [i]'Portal_'[/i] and allow "
+"the system to automatically detect the nearest [Room] to link. In most cases "
+"this will work fine.\n"
+"An alternative method is to specify the [Room] to link to manually, "
+"appending a suffix to the portal name, which should be the name of the room "
+"you intend to link to. For example [i]'Portal_lounge'[/i] will attempt to "
+"link to the room named [i]'Room_lounge'[/i].\n"
+"There is a special case here - Godot does not allow two nodes to share the "
+"same name. What if you want to manually have more than one portal leading "
+"into the same room? Surely they will need to both be called, e.g. "
+"[i]'Portal_lounge'[/i]?\n"
+"The solution is a wildcard character. After the room name, if you use the "
+"character [i]'*'[/i], this character and anything following it will be "
+"ignored. So you can use for example [i]'Portal_lounge*0'[/i], "
+"[i]'Portal_lounge*1'[/i] etc.\n"
+"Note that [Portal]s that have already been converted to [Portal] nodes "
+"(rather than [MeshInstance]s) still need to follow the same naming "
+"convention, as they will be relinked each time during conversion.\n"
+"It is recommended that you only place objects in rooms that are desired to "
+"stay within those rooms - i.e. [code]portal mode[/code]s [code]STATIC[/code] "
+"or [code]DYNAMIC[/code] (not crossing portals). [code]GLOBAL[/code] and "
+"[code]ROAMING[/code] objects are best placed in another part of the scene "
+"tree, to avoid confusion. See [CullInstance] for a full description of "
+"portal modes."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:39
+msgid ""
+"Switches the portal culling system on and off.\n"
+"It is important to note that when portal culling is active, it is "
+"responsible for [b]all[/b] the 3d culling. Some editor functionality may be "
+"more difficult to use, so switching the active flag is intended to be used "
+"to make sure your [Room] / [Portal] layout works within the editor.\n"
+"Switching to [code]active[/code] will have no effect when the [code]room "
+"graph[/code] is unloaded (the rooms have not yet been converted)."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:44
+msgid ""
+"Large objects can 'sprawl' over (be present in) more than one room. It can "
+"be useful to visualize which objects are sprawling outside the current "
+"room.\n"
+"Toggling this setting turns this debug view on and off."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:48
+msgid ""
+"Usually we don't want objects that only [b]just[/b] cross a boundary into an "
+"adjacent [Room] to sprawl into that room. To prevent this, each [Portal] has "
+"an extra margin, or tolerance zone where objects can enter without sprawling "
+"to a neighbouring room.\n"
+"In most cases you can set this here for all portals. It is possible to "
+"override the margin for each portal."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:52
+msgid ""
+"When using a partial or full PVS, the gameplay monitor allows you to receive "
+"callbacks when roaming objects or rooms enter or exit the [b]gameplay area[/"
+"b]. The gameplay area is defined as either the primary, or secondary PVS.\n"
+"These callbacks allow you to, for example, reduce processing for objects "
+"that are far from the player, or turn on and off AI.\n"
+"You can either choose to receive callbacks as notifications through the "
+"[code]_notification[/code] function, or as signals.\n"
+"[code]NOTIFICATION_ENTER_GAMEPLAY[/code]\n"
+"[code]NOTIFICATION_EXIT_GAMEPLAY[/code]\n"
+"Signals: [code]\"gameplay_entered\"[/code], [code]\"gameplay_exited\"[/code]"
+msgstr ""
+
+#: doc/classes/RoomManager.xml:60
+msgid ""
+"If enabled, the system will attempt to merge similar meshes (particularly in "
+"terms of materials) within [Room]s during conversion. This can significantly "
+"reduce the number of drawcalls and state changes required during rendering, "
+"albeit at a cost of reduced culling granularity.\n"
+"[b]Note:[/b] This operates at runtime during the conversion process, and "
+"will only operate on exported or running projects, in order to prevent "
+"accidental alteration to the scene and loss of data."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:64
+msgid ""
+"When converting rooms, the editor will warn you if overlap is detected "
+"between rooms. Overlap can interfere with determining the room that cameras "
+"and objects are within. A small amount can be acceptable, depending on your "
+"level. Here you can alter the threshold at which the editor warning appears. "
+"There are no other side effects."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:67
+msgid ""
+"Portal rendering is recursive - each time a portal is seen through an "
+"earlier portal there is some cost. For this reason, and to prevent the "
+"possibility of infinite loops, this setting provides a hard limit on the "
+"recursion depth.\n"
+"[b]Note:[/b] This value is unused when using [code]Full[/code] PVS mode."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:71
+msgid ""
+"Portal culling normally operates using the current [Camera] / [Camera]s, "
+"however for debugging purposes within the editor, you can use this setting "
+"to override this behaviour and force it to use a particular camera to get a "
+"better idea of what the occlusion culling is doing."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:75
+msgid ""
+"Optionally during conversion the potentially visible set (PVS) of rooms that "
+"are potentially visible from each room can be calculated. This can be used "
+"either to aid in dynamic portal culling, or to totally replace portal "
+"culling.\n"
+"In [code]Full[/code] PVS Mode, all objects within the potentially visible "
+"rooms will be frustum culled, and rendered if they are within the view "
+"frustum."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:79
+msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
+"During the conversion process, the geometry of objects within [Room]s, or a "
+"custom specified manual bound, are used to generate a [b]convex hull bound[/"
+"b].\n"
+"This convex hull is [b]required[/b] in the visibility system, and is used "
+"for many purposes. Most importantly, it is used to decide whether the "
+"[Camera] (or an object) is within a [Room]. The convex hull generating "
+"algorithm is good, but occasionally it can create too many (or too few) "
+"planes to give a good representation of the room volume.\n"
+"The [code]room_simplify[/code] value can be used to gain fine control over "
+"this process. It determines how similar planes can be for them to be "
+"considered the same (and duplicates removed). The value can be set between 0 "
+"(no simplification) and 1 (maximum simplification).\n"
+"The value set here is the default for all rooms, but individual rooms can "
+"override this value if desired.\n"
+"The room convex hulls are shown as a wireframe in the editor."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:91
+msgid ""
+"For the [Room] conversion process to succeed, you must point the "
+"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
+"we refer to as the [code]roomlist[/code] (the roomlist is not a special node "
+"type, it is normally just a [Spatial])."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:94
+msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:97
+msgid ""
+"When receiving gameplay callbacks when objects enter and exit gameplay, the "
+"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
+"visible set) of [Room]s, or the secondary PVS (the primary PVS and their "
+"neighbouring [Room]s).\n"
+"Sometimes using the larger gameplay area of the secondary PVS may be "
+"preferable."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:103
+msgid ""
+"Use only [Portal]s at runtime to determine visibility. PVS will not be "
+"generated at [Room]s conversion, and gameplay notifications cannot be used."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:106
+msgid ""
+"Use a combination of PVS and [Portal]s to determine visibility (this is "
+"usually fastest and most accurate)."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:109
+msgid ""
+"Use only the PVS (potentially visible set) of [Room]s to determine "
+"visibility."
+msgstr ""
+
+#: doc/classes/RootMotionView.xml:4
+msgid "Editor-only helper for setting up root motion in [AnimationTree]."
+msgstr ""
+
+#: doc/classes/RootMotionView.xml:7
+msgid ""
+"[i]Root motion[/i] refers to an animation technique where a mesh's skeleton "
+"is used to give impulse to a character. When working with 3D animations, a "
+"popular technique is for animators to use the root skeleton bone to give "
+"motion to the rest of the skeleton. This allows animating characters in a "
+"way where steps actually match the floor below. It also allows precise "
+"interaction with objects during cinematics. See also [AnimationTree].\n"
+"[b]Note:[/b] [RootMotionView] is only visible in the editor. It will be "
+"hidden automatically in the running project, and will also be converted to a "
+"plain [Node] in the running project. This means a script attached to a "
+"[RootMotionView] node [i]must[/i] have [code]extends Node[/code] instead of "
+"[code]extends RootMotionView[/code]. Additionally, it must not be a "
+"[code]@tool[/code] script."
+msgstr ""
+
+#: doc/classes/RootMotionView.xml:11
+msgid ""
+"https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree."
+"html#root-motion"
+msgstr ""
+
+#: doc/classes/RootMotionView.xml:17
+msgid "Path to an [AnimationTree] node to use as a basis for root motion."
+msgstr ""
+
+#: doc/classes/RootMotionView.xml:20
+msgid "The grid's cell size in 3D units."
+msgstr ""
+
+#: doc/classes/RootMotionView.xml:23
+msgid "The grid's color."
+msgstr ""
+
+#: doc/classes/RootMotionView.xml:26
+msgid ""
+"The grid's radius in 3D units. The grid's opacity will fade gradually as the "
+"distance from the origin increases until this [member radius] is reached."
+msgstr ""
+
+#: doc/classes/RootMotionView.xml:29
+msgid ""
+"If [code]true[/code], the grid's points will all be on the same Y coordinate "
+"([i]local[/i] Y = 0). If [code]false[/code], the points' original Y "
+"coordinate is preserved."
+msgstr ""
+
+#: doc/classes/SceneState.xml:4
+msgid "A script interface to a scene file's data."
+msgstr ""
+
+#: doc/classes/SceneState.xml:7
+msgid ""
+"Maintains a list of resources, nodes, exported, and overridden properties, "
+"and built-in scripts associated with a scene.\n"
+"This class cannot be instantiated directly, it is retrieved for a given "
+"scene as the result of [method PackedScene.get_state]."
+msgstr ""
+
+#: doc/classes/SceneState.xml:17
+msgid ""
+"Returns the list of bound parameters for the signal at [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/SceneState.xml:23
+msgid ""
+"Returns the number of signal connections in the scene.\n"
+"The [code]idx[/code] argument used to query connection metadata in other "
+"[code]get_connection_*[/code] methods in the interval [code][0, "
+"get_connection_count() - 1][/code]."
+msgstr ""
+
+#: doc/classes/SceneState.xml:31
+msgid ""
+"Returns the connection flags for the signal at [code]idx[/code]. See [enum "
+"Object.ConnectFlags] constants."
+msgstr ""
+
+#: doc/classes/SceneState.xml:38
+msgid "Returns the method connected to the signal at [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/SceneState.xml:45
+msgid "Returns the name of the signal at [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/SceneState.xml:52
+msgid ""
+"Returns the path to the node that owns the signal at [code]idx[/code], "
+"relative to the root node."
+msgstr ""
+
+#: doc/classes/SceneState.xml:59
+msgid ""
+"Returns the path to the node that owns the method connected to the signal at "
+"[code]idx[/code], relative to the root node."
+msgstr ""
+
+#: doc/classes/SceneState.xml:65
+msgid ""
+"Returns the number of nodes in the scene.\n"
+"The [code]idx[/code] argument used to query node data in other "
+"[code]get_node_*[/code] methods in the interval [code][0, get_node_count() - "
+"1][/code]."
+msgstr ""
+
+#: doc/classes/SceneState.xml:73
+msgid ""
+"Returns the list of group names associated with the node at [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/SceneState.xml:80
+msgid ""
+"Returns the node's index, which is its position relative to its siblings. "
+"This is only relevant and saved in scenes for cases where new nodes are "
+"added to an instanced or inherited scene among siblings from the base scene. "
+"Despite the name, this index is not related to the [code]idx[/code] argument "
+"used here and in other methods."
+msgstr ""
+
+#: doc/classes/SceneState.xml:87
+msgid ""
+"Returns a [PackedScene] for the node at [code]idx[/code] (i.e. the whole "
+"branch starting at this node, with its child nodes and resources), or "
+"[code]null[/code] if the node is not an instance."
+msgstr ""
+
+#: doc/classes/SceneState.xml:94
+msgid ""
+"Returns the path to the represented scene file if the node at [code]idx[/"
+"code] is an [InstancePlaceholder]."
+msgstr ""
+
+#: doc/classes/SceneState.xml:101
+msgid "Returns the name of the node at [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/SceneState.xml:108
+msgid ""
+"Returns the path to the owner of the node at [code]idx[/code], relative to "
+"the root node."
+msgstr ""
+
+#: doc/classes/SceneState.xml:116
+msgid ""
+"Returns the path to the node at [code]idx[/code].\n"
+"If [code]for_parent[/code] is [code]true[/code], returns the path of the "
+"[code]idx[/code] node's parent instead."
+msgstr ""
+
+#: doc/classes/SceneState.xml:124
+msgid ""
+"Returns the number of exported or overridden properties for the node at "
+"[code]idx[/code].\n"
+"The [code]prop_idx[/code] argument used to query node property data in other "
+"[code]get_node_property_*[/code] methods in the interval [code][0, "
+"get_node_property_count() - 1][/code]."
+msgstr ""
+
+#: doc/classes/SceneState.xml:133
+msgid ""
+"Returns the name of the property at [code]prop_idx[/code] for the node at "
+"[code]idx[/code]."
+msgstr ""
+
+#: doc/classes/SceneState.xml:141
+msgid ""
+"Returns the value of the property at [code]prop_idx[/code] for the node at "
+"[code]idx[/code]."
+msgstr ""
+
+#: doc/classes/SceneState.xml:148
+msgid "Returns the type of the node at [code]idx[/code]."
+msgstr ""
+
+#: doc/classes/SceneState.xml:155
+msgid ""
+"Returns [code]true[/code] if the node at [code]idx[/code] is an "
+"[InstancePlaceholder]."
+msgstr ""
+
+#: doc/classes/SceneState.xml:161
+msgid ""
+"If passed to [method PackedScene.instance], blocks edits to the scene state."
+msgstr ""
+
+#: doc/classes/SceneState.xml:164
+msgid ""
+"If passed to [method PackedScene.instance], provides inherited scene "
+"resources to the local scene.\n"
+"[b]Note:[/b] Only available in editor builds."
+msgstr ""
+
+#: doc/classes/SceneState.xml:168
+msgid ""
+"If passed to [method PackedScene.instance], provides local scene resources "
+"to the local scene. Only the main scene should receive the main edit state.\n"
+"[b]Note:[/b] Only available in editor builds."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:4
+msgid "Manages the game loop via a hierarchy of nodes."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:7
+msgid ""
+"As one of the most important classes, the [SceneTree] manages the hierarchy "
+"of nodes in a scene as well as scenes themselves. Nodes can be added, "
+"retrieved and removed. The whole scene tree (and thus the current scene) can "
+"be paused. Scenes can be loaded, switched and reloaded.\n"
+"You can also use the [SceneTree] to organize your nodes into groups: every "
+"node can be assigned as many groups as you want to create, e.g. an \"enemy\" "
+"group. You can then iterate these groups or even call methods and set "
+"properties on all the group's members at once.\n"
+"[SceneTree] is the default [MainLoop] implementation used by scenes, and is "
+"thus in charge of the game loop."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:12
+msgid ""
+"https://docs.godotengine.org/en/3.4/getting_started/step_by_step/scene_tree."
+"html"
+msgstr ""
+
+#: doc/classes/SceneTree.xml:13
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/viewports/multiple_resolutions."
+"html"
+msgstr ""
+
+#: doc/classes/SceneTree.xml:21
+msgid ""
+"Calls [code]method[/code] on each member of the given group. You can pass "
+"arguments to [code]method[/code] by specifying them at the end of the method "
+"call. This method is equivalent of calling [method call_group_flags] with "
+"[constant GROUP_CALL_DEFAULT] flag.\n"
+"[b]Note:[/b] [code]method[/code] may only have 5 arguments at most (7 "
+"arguments passed to this method in total).\n"
+"[b]Note:[/b] Due to design limitations, [method call_group] will fail "
+"silently if one of the arguments is [code]null[/code].\n"
+"[b]Note:[/b] [method call_group] will always call methods with an one-frame "
+"delay, in a way similar to [method Object.call_deferred]. To call methods "
+"immediately, use [method call_group_flags] with the [constant "
+"GROUP_CALL_REALTIME] flag."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:33
+msgid ""
+"Calls [code]method[/code] on each member of the given group, respecting the "
+"given [enum GroupCallFlags]. You can pass arguments to [code]method[/code] "
+"by specifying them at the end of the method call.\n"
+"[b]Note:[/b] [code]method[/code] may only have 5 arguments at most (8 "
+"arguments passed to this method in total).\n"
+"[b]Note:[/b] Due to design limitations, [method call_group_flags] will fail "
+"silently if one of the arguments is [code]null[/code].\n"
+"[codeblock]\n"
+"# Call the method immediately and in reverse order.\n"
+"get_tree().call_group_flags(SceneTree.GROUP_CALL_REALTIME | SceneTree."
+"GROUP_CALL_REVERSE, \"bases\", \"destroy\")\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/SceneTree.xml:46
+msgid ""
+"Changes the running scene to the one at the given [code]path[/code], after "
+"loading it into a [PackedScene] and creating a new instance.\n"
+"Returns [constant OK] on success, [constant ERR_CANT_OPEN] if the "
+"[code]path[/code] cannot be loaded into a [PackedScene], or [constant "
+"ERR_CANT_CREATE] if that scene cannot be instantiated.\n"
+"[b]Note:[/b] The scene change is deferred, which means that the new scene "
+"node is added on the next idle frame. You won't be able to access it "
+"immediately after the [method change_scene] call."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:55
+msgid ""
+"Changes the running scene to a new instance of the given [PackedScene].\n"
+"Returns [constant OK] on success or [constant ERR_CANT_CREATE] if the scene "
+"cannot be instantiated.\n"
+"[b]Note:[/b] The scene change is deferred, which means that the new scene "
+"node is added on the next idle frame. You won't be able to access it "
+"immediately after the [method change_scene_to] call."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:65
+msgid ""
+"Returns a [SceneTreeTimer] which will [signal SceneTreeTimer.timeout] after "
+"the given time in seconds elapsed in this [SceneTree]. If "
+"[code]pause_mode_process[/code] is set to [code]false[/code], pausing the "
+"[SceneTree] will also pause the timer.\n"
+"Commonly used to create a one-shot delay timer as in the following example:\n"
+"[codeblock]\n"
+"func some_function():\n"
+" print(\"start\")\n"
+" yield(get_tree().create_timer(1.0), \"timeout\")\n"
+" print(\"end\")\n"
+"[/codeblock]\n"
+"The timer will be automatically freed after its time elapses."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:79
+msgid ""
+"Returns the current frame number, i.e. the total frame count since the "
+"application started."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:85
+msgid ""
+"Returns the peer IDs of all connected peers of this [SceneTree]'s [member "
+"network_peer]."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:91
+msgid "Returns the unique peer ID of this [SceneTree]'s [member network_peer]."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:97
+msgid "Returns the number of nodes in this [SceneTree]."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:104
+msgid "Returns a list of all nodes assigned to the given group."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:110
+msgid "Returns the sender's peer ID for the most recently received RPC call."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:117
+msgid "Returns [code]true[/code] if the given group exists."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:129
+msgid ""
+"Returns [code]true[/code] if the most recent [InputEvent] was marked as "
+"handled with [method set_input_as_handled]."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:135
+msgid ""
+"Returns [code]true[/code] if this [SceneTree]'s [member network_peer] is in "
+"server mode (listening for connections)."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:143
+msgid "Sends the given notification to all members of the [code]group[/code]."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:152
+msgid ""
+"Sends the given notification to all members of the [code]group[/code], "
+"respecting the given [enum GroupCallFlags]."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:159
+msgid ""
+"Queues the given object for deletion, delaying the call to [method Object."
+"free] to after the current frame."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:166
+msgid ""
+"Quits the application at the end of the current iteration. A process "
+"[code]exit_code[/code] can optionally be passed as an argument. If this "
+"argument is [code]0[/code] or greater, it will override the [member OS."
+"exit_code] defined before quitting the application.\n"
+"[b]Note:[/b] On iOS this method doesn't work. Instead, as recommended by the "
+"iOS Human Interface Guidelines, the user is expected to close apps via the "
+"Home button."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:173
+msgid ""
+"Reloads the currently active scene.\n"
+"Returns [constant OK] on success, [constant ERR_UNCONFIGURED] if no [member "
+"current_scene] was defined yet, [constant ERR_CANT_OPEN] if [member "
+"current_scene] cannot be loaded into a [PackedScene], or [constant "
+"ERR_CANT_CREATE] if the scene cannot be instantiated."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:181
+msgid ""
+"If [code]true[/code], the application automatically accepts quitting. "
+"Enabled by default.\n"
+"For mobile platforms, see [method set_quit_on_go_back]."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:191
+msgid ""
+"Sets the given [code]property[/code] to [code]value[/code] on all members of "
+"the given group."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:201
+msgid ""
+"Sets the given [code]property[/code] to [code]value[/code] on all members of "
+"the given group, respecting the given [enum GroupCallFlags]."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:207
+msgid "Marks the most recent [InputEvent] as handled."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:214
+msgid ""
+"If [code]true[/code], the application quits automatically on going back (e."
+"g. on Android). Enabled by default.\n"
+"To handle 'Go Back' button when this option is disabled, use [constant "
+"MainLoop.NOTIFICATION_WM_GO_BACK_REQUEST]."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:225
+msgid ""
+"Configures screen stretching to the given [enum StretchMode], [enum "
+"StretchAspect], minimum size and [code]scale[/code]."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:231
+msgid "The current scene."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:234
+msgid ""
+"If [code]true[/code], collision shapes will be visible when running the game "
+"from the editor for debugging purposes."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:237
+msgid ""
+"If [code]true[/code], navigation polygons will be visible when running the "
+"game from the editor for debugging purposes."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:240
+msgid "The root of the edited scene."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:243
+msgid "The default [MultiplayerAPI] instance for this [SceneTree]."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:246
+msgid ""
+"If [code]true[/code] (default value), enables automatic polling of the "
+"[MultiplayerAPI] for this SceneTree during [signal idle_frame].\n"
+"If [code]false[/code], you need to manually call [method MultiplayerAPI."
+"poll] to process network packets and deliver RPCs/RSETs. This allows running "
+"RPCs/RSETs in a different loop (e.g. physics, thread, specific time step) "
+"and for manual [Mutex] protection when accessing the [MultiplayerAPI] from "
+"threads."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:250
+msgid ""
+"The peer object to handle the RPC system (effectively enabling networking "
+"when set). Depending on the peer itself, the [SceneTree] will become a "
+"network server (check with [method is_network_server]) and will set the root "
+"node's network mode to master, or it will become a regular peer with the "
+"root node set to puppet. All child nodes are set to inherit the network mode "
+"by default. Handling of networking-related events (connection, "
+"disconnection, new clients) is done by connecting to [SceneTree]'s signals."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:253
+msgid ""
+"If [code]true[/code], the [SceneTree] is paused. Doing so will have the "
+"following behavior:\n"
+"- 2D and 3D physics will be stopped. This includes signals and collision "
+"detection.\n"
+"- [method Node._process], [method Node._physics_process] and [method Node."
+"_input] will not be called anymore in nodes."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:258
+msgid ""
+"If [code]true[/code], the [SceneTree]'s [member network_peer] refuses new "
+"incoming connections."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:261
+msgid "The [SceneTree]'s root [Viewport]."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:264
+msgid "If [code]true[/code], font oversampling is used."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:270
+msgid ""
+"Emitted whenever this [SceneTree]'s [member network_peer] successfully "
+"connected to a server. Only emitted on clients."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:275
+msgid ""
+"Emitted whenever this [SceneTree]'s [member network_peer] fails to establish "
+"a connection to a server. Only emitted on clients."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:282
+msgid ""
+"Emitted when files are dragged from the OS file manager and dropped in the "
+"game window. The arguments are a list of file paths and the identifier of "
+"the screen where the drag originated."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:289
+msgid "Emitted whenever global menu item is clicked."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:294
+msgid ""
+"Emitted immediately before [method Node._process] is called on every node in "
+"the [SceneTree]."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:300
+msgid ""
+"Emitted whenever this [SceneTree]'s [member network_peer] connects with a "
+"new peer. ID is the peer ID of the new peer. Clients get notified when other "
+"clients connect to the same server. Upon connecting to a server, a client "
+"also receives this signal for the server (with ID being 1)."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:306
+msgid ""
+"Emitted whenever this [SceneTree]'s [member network_peer] disconnects from a "
+"peer. Clients get notified when other clients disconnect from the same "
+"server."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:312
+msgid "Emitted whenever a node is added to the [SceneTree]."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:318
+msgid ""
+"Emitted when a node's configuration changed. Only emitted in [code]tool[/"
+"code] mode."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:324
+msgid "Emitted whenever a node is removed from the [SceneTree]."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:330
+msgid "Emitted whenever a node is renamed."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:335
+msgid ""
+"Emitted immediately before [method Node._physics_process] is called on every "
+"node in the [SceneTree]."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:340
+msgid ""
+"Emitted when the screen resolution (fullscreen) or window size (windowed) "
+"changes."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:345
+msgid ""
+"Emitted whenever this [SceneTree]'s [member network_peer] disconnected from "
+"server. Only emitted on clients."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:350
+msgid ""
+"Emitted whenever the [SceneTree] hierarchy changed (children being moved or "
+"renamed, etc.)."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:356
+msgid "Call a group with no flags (default)."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:359
+msgid "Call a group in reverse scene order."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:362
+msgid "Call a group immediately (calls are normally made on idle)."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:365
+msgid "Call a group only once even if the call is executed many times."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:368
+msgid "No stretching."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:371
+msgid "Render stretching in higher resolution (interpolated)."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:374
+msgid ""
+"Keep the specified display resolution. No interpolation. Content may appear "
+"pixelated."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:377
+msgid ""
+"Fill the window with the content stretched to cover excessive space. Content "
+"may appear stretched."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:380
+msgid ""
+"Retain the same aspect ratio by padding with black bars on either axis. This "
+"prevents distortion."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:383
+msgid ""
+"Expand vertically. Left/right black bars may appear if the window is too "
+"wide."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:386
+msgid ""
+"Expand horizontally. Top/bottom black bars may appear if the window is too "
+"tall."
+msgstr ""
+
+#: doc/classes/SceneTree.xml:389
+msgid ""
+"Expand in both directions, retaining the same aspect ratio. This prevents "
+"distortion while avoiding black bars."
+msgstr ""
+
+#: doc/classes/SceneTreeTimer.xml:4
+msgid "One-shot timer."
+msgstr ""
+
+#: doc/classes/SceneTreeTimer.xml:7
+msgid ""
+"A one-shot timer managed by the scene tree, which emits [signal timeout] on "
+"completion. See also [method SceneTree.create_timer].\n"
+"As opposed to [Timer], it does not require the instantiation of a node. "
+"Commonly used to create a one-shot delay timer as in the following example:\n"
+"[codeblock]\n"
+"func some_function():\n"
+" print(\"Timer started.\")\n"
+" yield(get_tree().create_timer(1.0), \"timeout\")\n"
+" print(\"Timer ended.\")\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/SceneTreeTimer.xml:22
+msgid "The time remaining."
+msgstr ""
+
+#: doc/classes/SceneTreeTimer.xml:28 doc/classes/Timer.xml:61
+msgid "Emitted when the timer reaches 0."
+msgstr ""
+
+#: doc/classes/Script.xml:4
+msgid "A class stored as a resource."
+msgstr ""
+
+#: doc/classes/Script.xml:7
+msgid ""
+"A class stored as a resource. A script extends the functionality of all "
+"objects that instance it.\n"
+"The [code]new[/code] method of a script subclass creates a new instance. "
+"[method Object.set_script] extends an existing object, if that object's "
+"class matches one of the script's base classes."
+msgstr ""
+
+#: doc/classes/Script.xml:11
+msgid ""
+"https://docs.godotengine.org/en/3.4/getting_started/step_by_step/scripting."
+"html"
+msgstr ""
+
+#: doc/classes/Script.xml:17
+msgid "Returns [code]true[/code] if the script can be instanced."
+msgstr ""
+
+#: doc/classes/Script.xml:23
+msgid "Returns the script directly inherited by this script."
+msgstr ""
+
+#: doc/classes/Script.xml:29
+msgid "Returns the script's base type."
+msgstr ""
+
+#: doc/classes/Script.xml:36
+msgid "Returns the default value of the specified property."
+msgstr ""
+
+#: doc/classes/Script.xml:42
+msgid "Returns a dictionary containing constant names and their values."
+msgstr ""
+
+#: doc/classes/Script.xml:48
+msgid "Returns the list of methods in this [Script]."
+msgstr ""
+
+#: doc/classes/Script.xml:54
+msgid "Returns the list of properties in this [Script]."
+msgstr ""
+
+#: doc/classes/Script.xml:60
+msgid "Returns the list of user signals defined in this [Script]."
+msgstr ""
+
+#: doc/classes/Script.xml:67
+msgid ""
+"Returns [code]true[/code] if the script, or a base class, defines a signal "
+"with the given name."
+msgstr ""
+
+#: doc/classes/Script.xml:73
+msgid "Returns [code]true[/code] if the script contains non-empty source code."
+msgstr ""
+
+#: doc/classes/Script.xml:80
+msgid ""
+"Returns [code]true[/code] if [code]base_object[/code] is an instance of this "
+"script."
+msgstr ""
+
+#: doc/classes/Script.xml:86
+msgid ""
+"Returns [code]true[/code] if the script is a tool script. A tool script can "
+"run in the editor."
+msgstr ""
+
+#: doc/classes/Script.xml:93
+msgid "Reloads the script's class implementation. Returns an error code."
+msgstr ""
+
+#: doc/classes/Script.xml:99
+msgid ""
+"The script source code or an empty string if source code is not available. "
+"When set, does not reload the class implementation automatically."
+msgstr ""
+
+#: doc/classes/ScriptCreateDialog.xml:4
+msgid "The Editor's popup dialog for creating new [Script] files."
+msgstr ""
+
+#: doc/classes/ScriptCreateDialog.xml:7
+msgid ""
+"The [ScriptCreateDialog] creates script files according to a given template "
+"for a given scripting language. The standard use is to configure its fields "
+"prior to calling one of the [method Popup.popup] methods.\n"
+"[codeblock]\n"
+"func _ready():\n"
+" dialog.config(\"Node\", \"res://new_node.gd\") # For in-engine types\n"
+" dialog.config(\"\\\"res://base_node.gd\\\"\", \"res://derived_node.gd\") "
+"# For script types\n"
+" dialog.popup_centered()\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/ScriptCreateDialog.xml:25
+msgid "Prefills required fields to configure the ScriptCreateDialog for use."
+msgstr ""
+
+#: doc/classes/ScriptCreateDialog.xml:40
+msgid "Emitted when the user clicks the OK button."
+msgstr ""
+
+#: doc/classes/ScriptEditor.xml:4
+msgid "Godot editor's script editor."
+msgstr ""
+
+#: doc/classes/ScriptEditor.xml:7
+msgid ""
+"[b]Note:[/b] This class shouldn't be instantiated directly. Instead, access "
+"the singleton using [method EditorInterface.get_script_editor]."
+msgstr ""
+
+#: doc/classes/ScriptEditor.xml:31
+msgid "Returns a [Script] that is currently active in editor."
+msgstr ""
+
+#: doc/classes/ScriptEditor.xml:44
+msgid ""
+"Returns an array with all [Script] objects which are currently open in "
+"editor."
+msgstr ""
+
+#: doc/classes/ScriptEditor.xml:51
+msgid "Goes to the specified line in the current script."
+msgstr ""
+
+#: doc/classes/ScriptEditor.xml:59
+msgid ""
+"Opens the script create dialog. The script will extend [code]base_name[/"
+"code]. The file extension can be omitted from [code]base_path[/code]. It "
+"will be added based on the selected scripting language."
+msgstr ""
+
+#: doc/classes/ScriptEditor.xml:67
+msgid ""
+"Emitted when user changed active script. Argument is a freshly activated "
+"[Script]."
+msgstr ""
+
+#: doc/classes/ScriptEditor.xml:73
+msgid ""
+"Emitted when editor is about to close the active script. Argument is a "
+"[Script] that is going to be closed."
+msgstr ""
+
+#: doc/classes/ScrollBar.xml:4
+msgid "Base class for scroll bars."
+msgstr ""
+
+#: doc/classes/ScrollBar.xml:7
+msgid ""
+"Scrollbars are a [Range]-based [Control], that display a draggable area (the "
+"size of the page). Horizontal ([HScrollBar]) and Vertical ([VScrollBar]) "
+"versions are available."
+msgstr ""
+
+#: doc/classes/ScrollBar.xml:15
+msgid ""
+"Overrides the step used when clicking increment and decrement buttons or "
+"when using arrow keys when the [ScrollBar] is focused."
+msgstr ""
+
+#: doc/classes/ScrollBar.xml:23
+msgid "Emitted when the scrollbar is being scrolled."
+msgstr ""
+
+#: doc/classes/ScrollContainer.xml:4
+msgid "A helper node for displaying scrollable elements such as lists."
+msgstr ""
+
+#: doc/classes/ScrollContainer.xml:7
+msgid ""
+"A ScrollContainer node meant to contain a [Control] child. ScrollContainers "
+"will automatically create a scrollbar child ([HScrollBar], [VScrollBar], or "
+"both) when needed and will only draw the Control within the ScrollContainer "
+"area. Scrollbars will automatically be drawn at the right (for vertical) or "
+"bottom (for horizontal) and will enable dragging to move the viewable "
+"Control (and its children) within the ScrollContainer. Scrollbars will also "
+"automatically resize the grabber based on the [member Control.rect_min_size] "
+"of the Control relative to the ScrollContainer. Works great with a [Panel] "
+"control. You can set [code]EXPAND[/code] on the children's size flags, so "
+"they will upscale to the ScrollContainer's size if it's larger (scroll is "
+"invisible for the chosen dimension)."
+msgstr ""
+
+#: doc/classes/ScrollContainer.xml:16
+msgid ""
+"Ensures the given [code]control[/code] is visible (must be a direct or "
+"indirect child of the ScrollContainer). Used by [member follow_focus]."
+msgstr ""
+
+#: doc/classes/ScrollContainer.xml:22
+msgid ""
+"Returns the horizontal scrollbar [HScrollBar] of this [ScrollContainer].\n"
+"[b]Warning:[/b] This is a required internal node, removing and freeing it "
+"may cause a crash. If you wish to disable the horizontal scrollbar, use "
+"[member scroll_horizontal_enabled]. If you want to only hide it instead, use "
+"its [member CanvasItem.visible] property."
+msgstr ""
+
+#: doc/classes/ScrollContainer.xml:29
+msgid ""
+"Returns the vertical scrollbar [VScrollBar] of this [ScrollContainer].\n"
+"[b]Warning:[/b] This is a required internal node, removing and freeing it "
+"may cause a crash. If you wish to disable the vertical scrollbar, use "
+"[member scroll_vertical_enabled]. If you want to only hide it instead, use "
+"its [member CanvasItem.visible] property."
+msgstr ""
+
+#: doc/classes/ScrollContainer.xml:36
+msgid ""
+"If [code]true[/code], the ScrollContainer will automatically scroll to "
+"focused children (including indirect children) to make sure they are fully "
+"visible."
+msgstr ""
+
+#: doc/classes/ScrollContainer.xml:42
+msgid "The current horizontal scroll value."
+msgstr ""
+
+#: doc/classes/ScrollContainer.xml:45
+msgid "If [code]true[/code], enables horizontal scrolling."
+msgstr ""
+
+#: doc/classes/ScrollContainer.xml:48
+msgid "The current vertical scroll value."
+msgstr ""
+
+#: doc/classes/ScrollContainer.xml:51
+msgid "If [code]true[/code], enables vertical scrolling."
+msgstr ""
+
+#: doc/classes/ScrollContainer.xml:57
+msgid "Emitted when scrolling stops."
+msgstr ""
+
+#: doc/classes/ScrollContainer.xml:62
+msgid "Emitted when scrolling is started."
+msgstr ""
+
+#: doc/classes/ScrollContainer.xml:70
+msgid "The background [StyleBox] of the [ScrollContainer]."
+msgstr ""
+
+#: doc/classes/SegmentShape2D.xml:4
+msgid "Segment shape for 2D collisions."
+msgstr ""
+
+#: doc/classes/SegmentShape2D.xml:7
+msgid ""
+"Segment shape for 2D collisions. Consists of two points, [code]a[/code] and "
+"[code]b[/code]."
+msgstr ""
+
+#: doc/classes/SegmentShape2D.xml:15
+msgid "The segment's first point position."
+msgstr ""
+
+#: doc/classes/SegmentShape2D.xml:18
+msgid "The segment's second point position."
+msgstr ""
+
+#: doc/classes/Semaphore.xml:4
+msgid "A synchronization semaphore."
+msgstr ""
+
+#: doc/classes/Semaphore.xml:7
+msgid ""
+"A synchronization semaphore which can be used to synchronize multiple "
+"[Thread]s. Initialized to zero on creation. Be careful to avoid deadlocks. "
+"For a binary version, see [Mutex]."
+msgstr ""
+
+#: doc/classes/Semaphore.xml:16
+msgid ""
+"Lowers the [Semaphore], allowing one more thread in. Returns [constant OK] "
+"on success, [constant ERR_BUSY] otherwise."
+msgstr ""
+
+#: doc/classes/Semaphore.xml:22
+msgid ""
+"Tries to wait for the [Semaphore], if its value is zero, blocks until non-"
+"zero. Returns [constant OK] on success, [constant ERR_BUSY] otherwise."
+msgstr ""
+
+#: doc/classes/Separator.xml:4
+msgid "Base class for separators."
+msgstr ""
+
+#: doc/classes/Separator.xml:7
+msgid ""
+"Separator is a [Control] used for separating other controls. It's purely a "
+"visual decoration. Horizontal ([HSeparator]) and Vertical ([VSeparator]) "
+"versions are available."
+msgstr ""
+
+#: doc/classes/Shader.xml:4
+msgid "A custom shader program."
+msgstr ""
+
+#: doc/classes/Shader.xml:7
+msgid ""
+"This class allows you to define a custom shader program that can be used by "
+"a [ShaderMaterial]. Shaders allow you to write your own custom behavior for "
+"rendering objects or updating particle information. For a detailed "
+"explanation and usage, please see the tutorials linked below."
+msgstr ""
+
+#: doc/classes/Shader.xml:10 doc/classes/ShaderMaterial.xml:11
+msgid "https://docs.godotengine.org/en/3.4/tutorials/shading/index.html"
+msgstr ""
+
+#: doc/classes/Shader.xml:11
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/shading/your_first_shader/"
+"what_are_shaders.html"
+msgstr ""
+
+#: doc/classes/Shader.xml:18
+msgid ""
+"Returns the texture that is set as default for the specified parameter.\n"
+"[b]Note:[/b] [code]param[/code] must match the name of the uniform in the "
+"code exactly."
+msgstr ""
+
+#: doc/classes/Shader.xml:25
+msgid ""
+"Returns the shader mode for the shader, either [constant MODE_CANVAS_ITEM], "
+"[constant MODE_SPATIAL] or [constant MODE_PARTICLES]."
+msgstr ""
+
+#: doc/classes/Shader.xml:32
+msgid ""
+"Returns [code]true[/code] if the shader has this param defined as a uniform "
+"in its code.\n"
+"[b]Note:[/b] [code]param[/code] must match the name of the uniform in the "
+"code exactly."
+msgstr ""
+
+#: doc/classes/Shader.xml:41
+msgid ""
+"Sets the default texture to be used with a texture uniform. The default is "
+"used if a texture is not set in the [ShaderMaterial].\n"
+"[b]Note:[/b] [code]param[/code] must match the name of the uniform in the "
+"code exactly."
+msgstr ""
+
+#: doc/classes/Shader.xml:48
+msgid ""
+"Returns the shader's code as the user has written it, not the full generated "
+"code used internally."
+msgstr ""
+
+#: doc/classes/Shader.xml:51
+msgid ""
+"Returns the shader's custom defines. Custom defines can be used in Godot to "
+"add GLSL preprocessor directives (e.g: extensions) required for the shader "
+"logic.\n"
+"[b]Note:[/b] Custom defines are not validated by the Godot shader parser, so "
+"care should be taken when using them."
+msgstr ""
+
+#: doc/classes/Shader.xml:57
+msgid "Mode used to draw all 3D objects."
+msgstr ""
+
+#: doc/classes/Shader.xml:60
+msgid "Mode used to draw all 2D objects."
+msgstr ""
+
+#: doc/classes/Shader.xml:63
+msgid ""
+"Mode used to calculate particle information on a per-particle basis. Not "
+"used for drawing."
+msgstr ""
+
+#: doc/classes/ShaderMaterial.xml:4
+msgid "A material that uses a custom [Shader] program."
+msgstr ""
+
+#: doc/classes/ShaderMaterial.xml:7
+msgid ""
+"A material that uses a custom [Shader] program to render either items to "
+"screen or process particles. You can create multiple materials for the same "
+"shader but configure different values for the uniforms defined in the "
+"shader.\n"
+"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
+"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
+"emit light in a [GIProbe]."
+msgstr ""
+
+#: doc/classes/ShaderMaterial.xml:18
+msgid ""
+"Returns the current value set for this material of a uniform in the shader."
+msgstr ""
+
+#: doc/classes/ShaderMaterial.xml:25
+msgid ""
+"Returns [code]true[/code] if the property identified by [code]name[/code] "
+"can be reverted to a default value."
+msgstr ""
+
+#: doc/classes/ShaderMaterial.xml:32
+msgid ""
+"Returns the default value of the material property with given [code]name[/"
+"code]."
+msgstr ""
+
+#: doc/classes/ShaderMaterial.xml:40
+msgid ""
+"Changes the value set for this material of a uniform in the shader.\n"
+"[b]Note:[/b] [code]param[/code] must match the name of the uniform in the "
+"code exactly."
+msgstr ""
+
+#: doc/classes/ShaderMaterial.xml:47
+msgid "The [Shader] program used to render this material."
+msgstr ""
+
+#: doc/classes/Shape.xml:4
+msgid "Base class for all 3D shape resources."
+msgstr ""
+
+#: doc/classes/Shape.xml:7
+msgid ""
+"Base class for all 3D shape resources. Nodes that inherit from this can be "
+"used as shapes for a [PhysicsBody] or [Area] objects."
+msgstr ""
+
+#: doc/classes/Shape.xml:16
+msgid ""
+"Returns the [ArrayMesh] used to draw the debug collision for this [Shape]."
+msgstr ""
+
+#: doc/classes/Shape.xml:22
+msgid ""
+"The collision margin for the shape. Used in Bullet Physics only.\n"
+"Collision margins allow collision detection to be more efficient by adding "
+"an extra shell around shapes. Collision algorithms are more expensive when "
+"objects overlap by more than their margin, so a higher value for margins is "
+"better for performance, at the cost of accuracy around edges as it makes "
+"them less sharp."
+msgstr ""
+
+#: doc/classes/Shape2D.xml:4
+msgid "Base class for all 2D shapes."
+msgstr ""
+
+#: doc/classes/Shape2D.xml:7
+msgid "Base class for all 2D shapes. All 2D shape types inherit from this."
+msgstr ""
+
+#: doc/classes/Shape2D.xml:19
+msgid ""
+"Returns [code]true[/code] if this shape is colliding with another.\n"
+"This method needs the transformation matrix for this shape "
+"([code]local_xform[/code]), the shape to check collisions with "
+"([code]with_shape[/code]), and the transformation matrix of that shape "
+"([code]shape_xform[/code])."
+msgstr ""
+
+#: doc/classes/Shape2D.xml:29
+msgid ""
+"Returns a list of the points where this shape touches another. If there are "
+"no collisions the list is empty.\n"
+"This method needs the transformation matrix for this shape "
+"([code]local_xform[/code]), the shape to check collisions with "
+"([code]with_shape[/code]), and the transformation matrix of that shape "
+"([code]shape_xform[/code])."
+msgstr ""
+
+#: doc/classes/Shape2D.xml:41
+msgid ""
+"Returns whether this shape would collide with another, if a given movement "
+"was applied.\n"
+"This method needs the transformation matrix for this shape "
+"([code]local_xform[/code]), the movement to test on this shape "
+"([code]local_motion[/code]), the shape to check collisions with "
+"([code]with_shape[/code]), the transformation matrix of that shape "
+"([code]shape_xform[/code]), and the movement to test onto the other object "
+"([code]shape_motion[/code])."
+msgstr ""
+
+#: doc/classes/Shape2D.xml:53
+msgid ""
+"Returns a list of the points where this shape would touch another, if a "
+"given movement was applied. If there are no collisions the list is empty.\n"
+"This method needs the transformation matrix for this shape "
+"([code]local_xform[/code]), the movement to test on this shape "
+"([code]local_motion[/code]), the shape to check collisions with "
+"([code]with_shape[/code]), the transformation matrix of that shape "
+"([code]shape_xform[/code]), and the movement to test onto the other object "
+"([code]shape_motion[/code])."
+msgstr ""
+
+#: doc/classes/Shape2D.xml:62
+msgid ""
+"Draws a solid shape onto a [CanvasItem] with the [VisualServer] API filled "
+"with the specified [code]color[/code]. The exact drawing method is specific "
+"for each shape and cannot be configured."
+msgstr ""
+
+#: doc/classes/Shape2D.xml:68
+msgid "The shape's custom solver bias."
+msgstr ""
+
+#: doc/classes/ShortCut.xml:4
+msgid "A shortcut for binding input."
+msgstr ""
+
+#: doc/classes/ShortCut.xml:7
+msgid ""
+"A shortcut for binding input.\n"
+"Shortcuts are commonly used for interacting with a [Control] element from a "
+"[InputEvent]."
+msgstr ""
+
+#: doc/classes/ShortCut.xml:16
+msgid "Returns the shortcut's [InputEvent] as a [String]."
+msgstr ""
+
+#: doc/classes/ShortCut.xml:23
+msgid ""
+"Returns [code]true[/code] if the shortcut's [InputEvent] equals [code]event[/"
+"code]."
+msgstr ""
+
+#: doc/classes/ShortCut.xml:29
+msgid "If [code]true[/code], this shortcut is valid."
+msgstr ""
+
+#: doc/classes/ShortCut.xml:35
+msgid ""
+"The shortcut's [InputEvent].\n"
+"Generally the [InputEvent] is a keyboard key, though it can be any "
+"[InputEvent]."
+msgstr ""
+
+#: doc/classes/Skeleton.xml:4
+msgid "Skeleton for characters and animated objects."
+msgstr ""
+
+#: doc/classes/Skeleton.xml:7
+msgid ""
+"Skeleton provides a hierarchical interface for managing bones, including "
+"pose, rest and animation (see [Animation]). It can also use ragdoll "
+"physics.\n"
+"The overall transform of a bone with respect to the skeleton is determined "
+"by the following hierarchical order: rest pose, custom pose and pose.\n"
+"Note that \"global pose\" below refers to the overall transform of the bone "
+"with respect to skeleton, so it not the actual global/world transform of the "
+"bone."
+msgstr ""
+
+#: doc/classes/Skeleton.xml:20
+msgid ""
+"Adds a bone, with name [code]name[/code]. [method get_bone_count] will "
+"become the bone index."
+msgstr ""
+
+#: doc/classes/Skeleton.xml:28 doc/classes/Skeleton.xml:109
+#: doc/classes/Skeleton.xml:212
+msgid "[i]Deprecated soon.[/i]"
+msgstr ""
+
+#: doc/classes/Skeleton.xml:34
+msgid "Clear all the bones in this skeleton."
+msgstr ""
+
+#: doc/classes/Skeleton.xml:46
+msgid "Returns the bone index that matches [code]name[/code] as its name."
+msgstr ""
+
+#: doc/classes/Skeleton.xml:52
+msgid "Returns the amount of bones in the skeleton."
+msgstr ""
+
+#: doc/classes/Skeleton.xml:59
+msgid ""
+"Returns the custom pose of the specified bone. Custom pose is applied on top "
+"of the rest pose."
+msgstr ""
+
+#: doc/classes/Skeleton.xml:66
+msgid ""
+"Returns the overall transform of the specified bone, with respect to the "
+"skeleton. Being relative to the skeleton frame, this is not the actual "
+"\"global\" transform of the bone."
+msgstr ""
+
+#: doc/classes/Skeleton.xml:73
+msgid ""
+"Returns the overall transform of the specified bone, with respect to the "
+"skeleton, but without any global pose overrides. Being relative to the "
+"skeleton frame, this is not the actual \"global\" transform of the bone."
+msgstr ""
+
+#: doc/classes/Skeleton.xml:80
+msgid "Returns the name of the bone at index [code]index[/code]."
+msgstr ""
+
+#: doc/classes/Skeleton.xml:87
+msgid ""
+"Returns the bone index which is the parent of the bone at [code]bone_idx[/"
+"code]. If -1, then bone has no parent.\n"
+"[b]Note:[/b] The parent bone returned will always be less than "
+"[code]bone_idx[/code]."
+msgstr ""
+
+#: doc/classes/Skeleton.xml:95
+msgid ""
+"Returns the pose transform of the specified bone. Pose is applied on top of "
+"the custom pose, which is applied on top the rest pose."
+msgstr ""
+
+#: doc/classes/Skeleton.xml:102
+msgid "Returns the rest transform for a bone [code]bone_idx[/code]."
+msgstr ""
+
+#: doc/classes/Skeleton.xml:187
+msgid ""
+"Sets the bone index [code]parent_idx[/code] as the parent of the bone at "
+"[code]bone_idx[/code]. If -1, then bone has no parent.\n"
+"[b]Note:[/b] [code]parent_idx[/code] must be less than [code]bone_idx[/code]."
+msgstr ""
+
+#: doc/classes/Skeleton.xml:196
+msgid "Sets the pose transform for bone [code]bone_idx[/code]."
+msgstr ""
+
+#: doc/classes/Skeleton.xml:204
+msgid "Sets the rest transform for bone [code]bone_idx[/code]."
+msgstr ""
+
+#: doc/classes/Skeleton2D.xml:4
+msgid "Skeleton for 2D characters and animated objects."
+msgstr ""
+
+#: doc/classes/Skeleton2D.xml:7
+msgid ""
+"Skeleton2D parents a hierarchy of [Bone2D] objects. It is a requirement of "
+"[Bone2D]. Skeleton2D holds a reference to the rest pose of its children and "
+"acts as a single point of access to its bones."
+msgstr ""
+
+#: doc/classes/Skeleton2D.xml:10
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/animation/2d_skeletons.html"
+msgstr ""
+
+#: doc/classes/Skeleton2D.xml:17
+msgid ""
+"Returns a [Bone2D] from the node hierarchy parented by Skeleton2D. The "
+"object to return is identified by the parameter [code]idx[/code]. Bones are "
+"indexed by descending the node hierarchy from top to bottom, adding the "
+"children of each branch before moving to the next sibling."
+msgstr ""
+
+#: doc/classes/Skeleton2D.xml:23
+msgid ""
+"Returns the number of [Bone2D] nodes in the node hierarchy parented by "
+"Skeleton2D."
+msgstr ""
+
+#: doc/classes/Skeleton2D.xml:29
+msgid "Returns the [RID] of a Skeleton2D instance."
+msgstr ""
+
+#: doc/classes/SkeletonIK.xml:4
+msgid ""
+"SkeletonIK is used to place the end bone of a [Skeleton] bone chain at a "
+"certain point in 3D by rotating all bones in the chain accordingly."
+msgstr ""
+
+#: doc/classes/SkeletonIK.xml:7
+msgid ""
+"SkeletonIK is used to place the end bone of a [Skeleton] bone chain at a "
+"certain point in 3D by rotating all bones in the chain accordingly. A "
+"typical scenario for IK in games is to place a characters feet on the ground "
+"or a characters hands on a currently hold object. SkeletonIK uses "
+"FabrikInverseKinematic internally to solve the bone chain and applies the "
+"results to the [Skeleton] [code]bones_global_pose_override[/code] property "
+"for all affected bones in the chain. If fully applied this overwrites any "
+"bone transform from [Animation]s or bone custom poses set by users. The "
+"applied amount can be controlled with the [code]interpolation[/code] "
+"property.\n"
+"[codeblock]\n"
+"# Apply IK effect automatically on every new frame (not the current)\n"
+"skeleton_ik_node.start()\n"
+"\n"
+"# Apply IK effect only on the current frame\n"
+"skeleton_ik_node.start(true)\n"
+"\n"
+"# Stop IK effect and reset bones_global_pose_override on Skeleton\n"
+"skeleton_ik_node.stop()\n"
+"\n"
+"# Apply full IK effect\n"
+"skeleton_ik_node.set_interpolation(1.0)\n"
+"\n"
+"# Apply half IK effect\n"
+"skeleton_ik_node.set_interpolation(0.5)\n"
+"\n"
+"# Apply zero IK effect (a value at or below 0.01 also removes "
+"bones_global_pose_override on Skeleton)\n"
+"skeleton_ik_node.set_interpolation(0.0)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/SkeletonIK.xml:35
+msgid ""
+"Returns the parent [Skeleton] Node that was present when SkeletonIK entered "
+"the [SceneTree]. Returns null if the parent node was not a [Skeleton] Node "
+"when SkeletonIK entered the [SceneTree]."
+msgstr ""
+
+#: doc/classes/SkeletonIK.xml:41
+msgid ""
+"Returns [code]true[/code] if SkeletonIK is applying IK effects on continues "
+"frames to the [Skeleton] bones. Returns [code]false[/code] if SkeletonIK is "
+"stopped or [method start] was used with the [code]one_time[/code] parameter "
+"set to [code]true[/code]."
+msgstr ""
+
+#: doc/classes/SkeletonIK.xml:48
+msgid ""
+"Starts applying IK effects on each frame to the [Skeleton] bones but will "
+"only take effect starting on the next frame. If [code]one_time[/code] is "
+"[code]true[/code], this will take effect immediately but also reset on the "
+"next frame."
+msgstr ""
+
+#: doc/classes/SkeletonIK.xml:54
+msgid ""
+"Stops applying IK effects on each frame to the [Skeleton] bones and also "
+"calls [method Skeleton.clear_bones_global_pose_override] to remove existing "
+"overrides on all bones."
+msgstr ""
+
+#: doc/classes/SkeletonIK.xml:60
+msgid ""
+"Interpolation value for how much the IK results are applied to the current "
+"skeleton bone chain. A value of [code]1.0[/code] will overwrite all skeleton "
+"bone transforms completely while a value of [code]0.0[/code] will visually "
+"disable the SkeletonIK. A value at or below [code]0.01[/code] also calls "
+"[method Skeleton.clear_bones_global_pose_override]."
+msgstr ""
+
+#: doc/classes/SkeletonIK.xml:63
+msgid ""
+"Secondary target position (first is [member target] property or [member "
+"target_node]) for the IK chain. Use magnet position (pole target) to control "
+"the bending of the IK chain. Only works if the bone chain has more than 2 "
+"bones. The middle chain bone position will be linearly interpolated with the "
+"magnet position."
+msgstr ""
+
+#: doc/classes/SkeletonIK.xml:66
+msgid ""
+"Number of iteration loops used by the IK solver to produce more accurate "
+"(and elegant) bone chain results."
+msgstr ""
+
+#: doc/classes/SkeletonIK.xml:69
+msgid ""
+"The minimum distance between bone and goal target. If the distance is below "
+"this value, the IK solver stops further iterations."
+msgstr ""
+
+#: doc/classes/SkeletonIK.xml:72
+msgid ""
+"If [code]true[/code] overwrites the rotation of the tip bone with the "
+"rotation of the [member target] (or [member target_node] if defined)."
+msgstr ""
+
+#: doc/classes/SkeletonIK.xml:75
+msgid "The name of the current root bone, the first bone in the IK chain."
+msgstr ""
+
+#: doc/classes/SkeletonIK.xml:78
+msgid ""
+"First target of the IK chain where the tip bone is placed and, if [member "
+"override_tip_basis] is [code]true[/code], how the tip bone is rotated. If a "
+"[member target_node] path is available the nodes transform is used instead "
+"and this property is ignored."
+msgstr ""
+
+#: doc/classes/SkeletonIK.xml:81
+msgid ""
+"Target node [NodePath] for the IK chain. If available, the node's current "
+"[Transform] is used instead of the [member target] property."
+msgstr ""
+
+#: doc/classes/SkeletonIK.xml:84
+msgid ""
+"The name of the current tip bone, the last bone in the IK chain placed at "
+"the [member target] transform (or [member target_node] if defined)."
+msgstr ""
+
+#: doc/classes/SkeletonIK.xml:87
+msgid ""
+"If [code]true[/code], instructs the IK solver to consider the secondary "
+"magnet target (pole target) when calculating the bone chain. Use the magnet "
+"position (pole target) to control the bending of the IK chain."
+msgstr ""
+
+#: doc/classes/Sky.xml:4 doc/classes/Sky.xml:7
+msgid "The base class for [PanoramaSky] and [ProceduralSky]."
+msgstr ""
+
+#: doc/classes/Sky.xml:15
+msgid ""
+"The [Sky]'s radiance map size. The higher the radiance map size, the more "
+"detailed the lighting from the [Sky] will be.\n"
+"See [enum RadianceSize] constants for values.\n"
+"[b]Note:[/b] You will only benefit from high radiance sizes if you have "
+"perfectly sharp reflective surfaces in your project and are not using "
+"[ReflectionProbe]s or [GIProbe]s. For most projects, keeping [member "
+"radiance_size] to the default value is the best compromise between visuals "
+"and performance. Be careful when using high radiance size values as these "
+"can cause crashes on low-end GPUs."
+msgstr ""
+
+#: doc/classes/Sky.xml:22
+msgid "Radiance texture size is 32×32 pixels."
+msgstr ""
+
+#: doc/classes/Sky.xml:25
+msgid "Radiance texture size is 64×64 pixels."
+msgstr ""
+
+#: doc/classes/Sky.xml:28
+msgid "Radiance texture size is 128×128 pixels."
+msgstr ""
+
+#: doc/classes/Sky.xml:31
+msgid "Radiance texture size is 256×256 pixels."
+msgstr ""
+
+#: doc/classes/Sky.xml:34
+msgid "Radiance texture size is 512×512 pixels."
+msgstr ""
+
+#: doc/classes/Sky.xml:37
+msgid ""
+"Radiance texture size is 1024×1024 pixels.\n"
+"[b]Note:[/b] [constant RADIANCE_SIZE_1024] is not exposed in the inspector "
+"as it is known to cause GPU hangs on certain systems."
+msgstr ""
+
+#: doc/classes/Sky.xml:41
+msgid ""
+"Radiance texture size is 2048×2048 pixels.\n"
+"[b]Note:[/b] [constant RADIANCE_SIZE_2048] is not exposed in the inspector "
+"as it is known to cause GPU hangs on certain systems."
+msgstr ""
+
+#: doc/classes/Sky.xml:45
+msgid "Represents the size of the [enum RadianceSize] enum."
+msgstr ""
+
+#: doc/classes/Slider.xml:4
+msgid "Base class for GUI sliders."
+msgstr ""
+
+#: doc/classes/Slider.xml:7
+msgid ""
+"Base class for GUI sliders.\n"
+"[b]Note:[/b] The [signal Range.changed] and [signal Range.value_changed] "
+"signals are part of the [Range] class which this class inherits from."
+msgstr ""
+
+#: doc/classes/Slider.xml:16
+msgid ""
+"If [code]true[/code], the slider can be interacted with. If [code]false[/"
+"code], the value can be changed only by code."
+msgstr ""
+
+#: doc/classes/Slider.xml:20
+msgid "If [code]true[/code], the value can be changed using the mouse wheel."
+msgstr ""
+
+#: doc/classes/Slider.xml:24
+msgid ""
+"Number of ticks displayed on the slider, including border ticks. Ticks are "
+"uniformly-distributed value markers."
+msgstr ""
+
+#: doc/classes/Slider.xml:27
+msgid ""
+"If [code]true[/code], the slider will display ticks for minimum and maximum "
+"values."
+msgstr ""
+
+#: doc/classes/SliderJoint.xml:4
+msgid "Slider between two PhysicsBodies in 3D."
+msgstr ""
+
+#: doc/classes/SliderJoint.xml:7
+msgid ""
+"Slides across the X axis of the pivot object. See also [Generic6DOFJoint]."
+msgstr ""
+
+#: doc/classes/SliderJoint.xml:28
+msgid ""
+"The amount of damping of the rotation when the limit is surpassed.\n"
+"A lower damping value allows a rotation initiated by body A to travel to "
+"body B slower."
+msgstr ""
+
+#: doc/classes/SliderJoint.xml:35
+msgid ""
+"The amount of restitution of the rotation when the limit is surpassed.\n"
+"Does not affect damping."
+msgstr ""
+
+#: doc/classes/SliderJoint.xml:39
+msgid ""
+"A factor applied to the all rotation once the limit is surpassed.\n"
+"Makes all rotation slower when between 0 and 1."
+msgstr ""
+
+#: doc/classes/SliderJoint.xml:52 doc/classes/SliderJoint.xml:147
+msgid "A factor applied to the all rotation in the limits."
+msgstr ""
+
+#: doc/classes/SliderJoint.xml:61 doc/classes/SliderJoint.xml:156
+msgid ""
+"A factor applied to the all rotation across axes orthogonal to the slider."
+msgstr ""
+
+#: doc/classes/SliderJoint.xml:64
+msgid ""
+"The amount of damping that happens once the limit defined by [member "
+"linear_limit/lower_distance] and [member linear_limit/upper_distance] is "
+"surpassed."
+msgstr ""
+
+#: doc/classes/SliderJoint.xml:70
+msgid ""
+"The amount of restitution once the limits are surpassed. The lower, the more "
+"velocity-energy gets lost."
+msgstr ""
+
+#: doc/classes/SoftBody.xml:4
+msgid "A soft mesh physics body."
+msgstr ""
+
+#: doc/classes/SoftBody.xml:7
+msgid ""
+"A deformable physics body. Used to create elastic or deformable objects such "
+"as cloth, rubber, or other flexible materials."
+msgstr ""
+
+#: doc/classes/SoftBody.xml:10
+msgid "https://docs.godotengine.org/en/3.4/tutorials/physics/soft_body.html"
+msgstr ""
+
+#: doc/classes/SoftBody.xml:44
+msgid "Returns local translation of a vertex in the surface array."
+msgstr ""
+
+#: doc/classes/SoftBody.xml:51
+msgid "Returns [code]true[/code] if vertex is set to pinned."
+msgstr ""
+
+#: doc/classes/SoftBody.xml:83
+msgid ""
+"Sets the pinned state of a surface vertex. When set to [code]true[/code], "
+"the optional [code]attachment_path[/code] can define a [Spatial] the pinned "
+"vertex will be attached to."
+msgstr ""
+
+#: doc/classes/SoftBody.xml:91
+msgid ""
+"The physics layers this SoftBody is in.\n"
+"Collidable objects can exist in any of 32 different layers. These layers "
+"work like a tagging system, and are not visual. A collidable can use these "
+"layers to select with which objects it can collide, using the collision_mask "
+"property.\n"
+"A contact is detected if object A is in any of the layers that object B "
+"scans, or object B is in any layer scanned by object A. See [url=https://"
+"docs.godotengine.org/en/3.4/tutorials/physics/physics_introduction."
+"html#collision-layers-and-masks]Collision layers and masks[/url] in the "
+"documentation for more information."
+msgstr ""
+
+#: doc/classes/SoftBody.xml:96
+msgid ""
+"The physics layers this SoftBody scans for collisions. See [url=https://docs."
+"godotengine.org/en/3.4/tutorials/physics/physics_introduction.html#collision-"
+"layers-and-masks]Collision layers and masks[/url] in the documentation for "
+"more information."
+msgstr ""
+
+#: doc/classes/SoftBody.xml:105
+msgid "[NodePath] to a [CollisionObject] this SoftBody should avoid clipping."
+msgstr ""
+
+#: doc/classes/SoftBody.xml:108
+msgid ""
+"If [code]true[/code], the [SoftBody] is simulated in physics. Can be set to "
+"[code]false[/code] to pause the physics simulation."
+msgstr ""
+
+#: doc/classes/SoftBody.xml:115
+msgid "If [code]true[/code], the [SoftBody] will respond to [RayCast]s."
+msgstr ""
+
+#: doc/classes/SoftBody.xml:118
+msgid ""
+"Increasing this value will improve the resulting simulation, but can affect "
+"performance. Use with care."
+msgstr ""
+
+#: doc/classes/SoftBody.xml:121
+msgid "The SoftBody's mass."
+msgstr ""
+
+#: doc/classes/Spatial.xml:4
+msgid "Most basic 3D game object, parent of all 3D-related nodes."
+msgstr ""
+
+#: doc/classes/Spatial.xml:7
+msgid ""
+"Most basic 3D game object, with a 3D [Transform] and visibility settings. "
+"All other 3D game objects inherit from Spatial. Use [Spatial] as a parent "
+"node to move, scale, rotate and show/hide children in a 3D project.\n"
+"Affine operations (rotate, scale, translate) happen in parent's local "
+"coordinate system, unless the [Spatial] object is set as top-level. Affine "
+"operations in this coordinate system correspond to direct affine operations "
+"on the [Spatial]'s transform. The word local below refers to this coordinate "
+"system. The coordinate system that is attached to the [Spatial] object "
+"itself is referred to as object-local coordinate system.\n"
+"[b]Note:[/b] Unless otherwise specified, all methods that have angle "
+"parameters must have angles specified as [i]radians[/i]. To convert degrees "
+"to radians, use [method @GDScript.deg2rad]."
+msgstr ""
+
+#: doc/classes/Spatial.xml:12
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/3d/introduction_to_3d.html"
+msgstr ""
+
+#: doc/classes/Spatial.xml:13 doc/classes/Vector3.xml:16
+msgid "https://github.com/godotengine/godot-demo-projects/tree/master/3d"
+msgstr ""
+
+#: doc/classes/Spatial.xml:25
+msgid ""
+"Returns the parent [Spatial], or an empty [Object] if no parent exists or "
+"parent is not of type [Spatial]."
+msgstr ""
+
+#: doc/classes/Spatial.xml:31
+msgid ""
+"Returns the current [World] resource this [Spatial] node is registered to."
+msgstr ""
+
+#: doc/classes/Spatial.xml:39
+msgid ""
+"Rotates the global (world) transformation around axis, a unit [Vector3], by "
+"specified angle in radians. The rotation axis is in global coordinate system."
+msgstr ""
+
+#: doc/classes/Spatial.xml:46
+msgid ""
+"Scales the global (world) transformation by the given [Vector3] scale "
+"factors."
+msgstr ""
+
+#: doc/classes/Spatial.xml:53
+msgid ""
+"Moves the global (world) transformation by [Vector3] offset. The offset is "
+"in global coordinate system."
+msgstr ""
+
+#: doc/classes/Spatial.xml:59
+msgid ""
+"Disables rendering of this node. Changes [member visible] to [code]false[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Spatial.xml:65
+msgid ""
+"Returns whether node notifies about its local transformation changes. "
+"[Spatial] will not propagate this by default."
+msgstr ""
+
+#: doc/classes/Spatial.xml:71
+msgid ""
+"Returns whether this node uses a scale of [code](1, 1, 1)[/code] or its "
+"local transformation scale."
+msgstr ""
+
+#: doc/classes/Spatial.xml:77
+msgid ""
+"Returns whether this node is set as Toplevel, that is whether it ignores its "
+"parent nodes transformations."
+msgstr ""
+
+#: doc/classes/Spatial.xml:83
+msgid ""
+"Returns whether the node notifies about its global and local transformation "
+"changes. [Spatial] will not propagate this by default."
+msgstr ""
+
+#: doc/classes/Spatial.xml:97
+msgid ""
+"Rotates itself so that the local -Z axis points towards the [code]target[/"
+"code] position.\n"
+"The transform will first be rotated around the given [code]up[/code] vector, "
+"and then fully aligned to the target by a further rotation around an axis "
+"perpendicular to both the [code]target[/code] and [code]up[/code] vectors.\n"
+"Operations take place in global space."
+msgstr ""
+
+#: doc/classes/Spatial.xml:108
+msgid ""
+"Moves the node to the specified [code]position[/code], and then rotates "
+"itself to point toward the [code]target[/code] as per [method look_at]. "
+"Operations take place in global space."
+msgstr ""
+
+#: doc/classes/Spatial.xml:114
+msgid ""
+"Resets this node's transformations (like scale, skew and taper) preserving "
+"its rotation and translation by performing Gram-Schmidt orthonormalization "
+"on this node's [Transform]."
+msgstr ""
+
+#: doc/classes/Spatial.xml:122
+msgid ""
+"Rotates the local transformation around axis, a unit [Vector3], by specified "
+"angle in radians."
+msgstr ""
+
+#: doc/classes/Spatial.xml:130
+msgid ""
+"Rotates the local transformation around axis, a unit [Vector3], by specified "
+"angle in radians. The rotation axis is in object-local coordinate system."
+msgstr ""
+
+#: doc/classes/Spatial.xml:137
+msgid "Rotates the local transformation around the X axis by angle in radians."
+msgstr ""
+
+#: doc/classes/Spatial.xml:144
+msgid "Rotates the local transformation around the Y axis by angle in radians."
+msgstr ""
+
+#: doc/classes/Spatial.xml:151
+msgid "Rotates the local transformation around the Z axis by angle in radians."
+msgstr ""
+
+#: doc/classes/Spatial.xml:158
+msgid ""
+"Scales the local transformation by given 3D scale factors in object-local "
+"coordinate system."
+msgstr ""
+
+#: doc/classes/Spatial.xml:165
+msgid ""
+"Makes the node ignore its parents transformations. Node transformations are "
+"only in global space."
+msgstr ""
+
+#: doc/classes/Spatial.xml:172
+msgid ""
+"Sets whether the node uses a scale of [code](1, 1, 1)[/code] or its local "
+"transformation scale. Changes to the local transformation scale are "
+"preserved."
+msgstr ""
+
+#: doc/classes/Spatial.xml:178
+msgid ""
+"Reset all transformations for this node (sets its [Transform] to the "
+"identity matrix)."
+msgstr ""
+
+#: doc/classes/Spatial.xml:185
+msgid ""
+"Sets whether the node ignores notification that its transformation (global "
+"or local) changed."
+msgstr ""
+
+#: doc/classes/Spatial.xml:192
+msgid ""
+"Sets whether the node notifies about its local transformation changes. "
+"[Spatial] will not propagate this by default."
+msgstr ""
+
+#: doc/classes/Spatial.xml:199
+msgid ""
+"Sets whether the node notifies about its global and local transformation "
+"changes. [Spatial] will not propagate this by default, unless it is in the "
+"editor context and it has a valid gizmo."
+msgstr ""
+
+#: doc/classes/Spatial.xml:205
+msgid ""
+"Enables rendering of this node. Changes [member visible] to [code]true[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Spatial.xml:212
+msgid ""
+"Transforms [code]local_point[/code] from this node's local space to world "
+"space."
+msgstr ""
+
+#: doc/classes/Spatial.xml:219
+msgid ""
+"Transforms [code]global_point[/code] from world space to this node's local "
+"space."
+msgstr ""
+
+#: doc/classes/Spatial.xml:226
+msgid ""
+"Changes the node's position by the given offset [Vector3].\n"
+"Note that the translation [code]offset[/code] is affected by the node's "
+"scale, so if scaled by e.g. [code](10, 1, 1)[/code], a translation by an "
+"offset of [code](2, 0, 0)[/code] would actually add 20 ([code]2 * 10[/code]) "
+"to the X coordinate."
+msgstr ""
+
+#: doc/classes/Spatial.xml:234
+msgid ""
+"Changes the node's position by the given offset [Vector3] in local space."
+msgstr ""
+
+#: doc/classes/Spatial.xml:240
+msgid "Updates the [SpatialGizmo] of this node."
+msgstr ""
+
+#: doc/classes/Spatial.xml:246
+msgid ""
+"The [SpatialGizmo] for this node. Used for example in [EditorSpatialGizmo] "
+"as custom visualization and editing handles in Editor."
+msgstr ""
+
+#: doc/classes/Spatial.xml:249
+msgid "World space (global) [Transform] of this node."
+msgstr ""
+
+#: doc/classes/Spatial.xml:252
+msgid ""
+"Rotation part of the local transformation in radians, specified in terms of "
+"YXZ-Euler angles in the format (X angle, Y angle, Z angle).\n"
+"[b]Note:[/b] In the mathematical sense, rotation is a matrix and not a "
+"vector. The three Euler angles, which are the three independent parameters "
+"of the Euler-angle parametrization of the rotation matrix, are stored in a "
+"[Vector3] data structure not because the rotation is a vector, but only "
+"because [Vector3] exists as a convenient data-structure to store 3 floating-"
+"point numbers. Therefore, applying affine operations on the rotation \"vector"
+"\" is not meaningful."
+msgstr ""
+
+#: doc/classes/Spatial.xml:256
+msgid ""
+"Rotation part of the local transformation in degrees, specified in terms of "
+"YXZ-Euler angles in the format (X angle, Y angle, Z angle)."
+msgstr ""
+
+#: doc/classes/Spatial.xml:259
+msgid "Scale part of the local transformation."
+msgstr ""
+
+#: doc/classes/Spatial.xml:262
+msgid "Local space [Transform] of this node, with respect to the parent node."
+msgstr ""
+
+#: doc/classes/Spatial.xml:265
+msgid "Local translation of this node."
+msgstr ""
+
+#: doc/classes/Spatial.xml:268
+msgid ""
+"If [code]true[/code], this node is drawn. The node is only visible if all of "
+"its antecedents are visible as well (in other words, [method "
+"is_visible_in_tree] must return [code]true[/code])."
+msgstr ""
+
+#: doc/classes/Spatial.xml:274
+msgid ""
+"Emitted by portal system gameplay monitor when a node enters the gameplay "
+"area."
+msgstr ""
+
+#: doc/classes/Spatial.xml:279
+msgid ""
+"Emitted by portal system gameplay monitor when a node exits the gameplay "
+"area."
+msgstr ""
+
+#: doc/classes/Spatial.xml:284
+msgid "Emitted when node visibility changes."
+msgstr ""
+
+#: doc/classes/Spatial.xml:290
+msgid ""
+"Spatial nodes receives this notification when their global transform "
+"changes. This means that either the current or a parent node changed its "
+"transform.\n"
+"In order for [constant NOTIFICATION_TRANSFORM_CHANGED] to work, users first "
+"need to ask for it, with [method set_notify_transform]. The notification is "
+"also sent if the node is in the editor context and it has a valid gizmo."
+msgstr ""
+
+#: doc/classes/Spatial.xml:294
+msgid ""
+"Spatial nodes receives this notification when they are registered to new "
+"[World] resource."
+msgstr ""
+
+#: doc/classes/Spatial.xml:297
+msgid ""
+"Spatial nodes receives this notification when they are unregistered from "
+"current [World] resource."
+msgstr ""
+
+#: doc/classes/Spatial.xml:300
+msgid "Spatial nodes receives this notification when their visibility changes."
+msgstr ""
+
+#: doc/classes/Spatial.xml:303
+msgid ""
+"Spatial nodes receives this notification if the portal system gameplay "
+"monitor detects they have entered the gameplay area."
+msgstr ""
+
+#: doc/classes/Spatial.xml:306
+msgid ""
+"Spatial nodes receives this notification if the portal system gameplay "
+"monitor detects they have exited the gameplay area."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:4
+msgid "Default 3D rendering material."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:7
+msgid ""
+"This provides a default material with a wide variety of rendering features "
+"and properties without the need to write shader code. See the tutorial below "
+"for details."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:10
+msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/spatial_material.html"
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:17
+msgid "Returns [code]true[/code], if the specified [enum Feature] is enabled."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:24
+msgid ""
+"Returns [code]true[/code], if the specified flag is enabled. See [enum "
+"Flags] enumerator for options."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:31
+msgid ""
+"Returns the [Texture] associated with the specified [enum TextureParam]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:39
+msgid ""
+"If [code]true[/code], enables the specified [enum Feature]. Many features "
+"that are available in [SpatialMaterial]s need to be enabled before use. This "
+"way the cost for using the feature is only incurred when specified. Features "
+"can also be enabled by setting the corresponding member to [code]true[/code]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:47
+msgid ""
+"If [code]true[/code], enables the specified flag. Flags are optional "
+"behaviour that can be turned on and off. Only one flag can be enabled at a "
+"time with this function, the flag enumerators cannot be bit-masked together "
+"to enable or disable multiple flags at once. Flags can also be enabled by "
+"setting the corresponding member to [code]true[/code]. See [enum Flags] "
+"enumerator for options."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:55
+msgid ""
+"Sets the [Texture] to be used by the specified [enum TextureParam]. This "
+"function is called when setting members ending in [code]*_texture[/code]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:61
+msgid "The material's base color."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:64
+msgid ""
+"Texture to multiply by [member albedo_color]. Used for basic texturing of "
+"objects."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:67
+msgid "The strength of the anisotropy effect."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:70
+msgid ""
+"If [code]true[/code], anisotropy is enabled. Changes the shape of the "
+"specular blob and aligns it to tangent space. Mesh tangents are needed for "
+"this to work. If the mesh does not contain tangents the anisotropy effect "
+"will appear broken."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:73
+msgid "Texture that offsets the tangent map for anisotropy calculations."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:76
+msgid ""
+"If [code]true[/code], ambient occlusion is enabled. Ambient occlusion "
+"darkens areas based on the [member ao_texture]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:79
+msgid ""
+"Amount that ambient occlusion affects lighting from lights. If [code]0[/"
+"code], ambient occlusion only affects ambient light. If [code]1[/code], "
+"ambient occlusion affects lights just as much as it affects ambient light. "
+"This can be used to impact the strength of the ambient occlusion effect, but "
+"typically looks unrealistic."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:82
+msgid ""
+"If [code]true[/code], use [code]UV2[/code] coordinates to look up from the "
+"[member ao_texture]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:85
+msgid ""
+"Texture that defines the amount of ambient occlusion for a given point on "
+"the object."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:88 doc/classes/SpatialMaterial.xml:325
+msgid ""
+"Specifies the channel of the [member ao_texture] in which the ambient "
+"occlusion information is stored. This is useful when you store the "
+"information for multiple effects in a single texture. For example if you "
+"stored metallic in the red channel, roughness in the blue, and ambient "
+"occlusion in the green you could reduce the number of textures you use."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:91
+msgid ""
+"Sets the strength of the clearcoat effect. Setting to [code]0[/code] looks "
+"the same as disabling the clearcoat effect."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:94
+msgid ""
+"If [code]true[/code], clearcoat rendering is enabled. Adds a secondary "
+"transparent pass to the lighting calculation resulting in an added specular "
+"blob. This makes materials appear as if they have a clear layer on them that "
+"can be either glossy or rough.\n"
+"[b]Note:[/b] Clearcoat rendering is not visible if the material has [member "
+"flags_unshaded] set to [code]true[/code]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:98
+msgid ""
+"Sets the roughness of the clearcoat pass. A higher value results in a "
+"smoother clearcoat while a lower value results in a rougher clearcoat."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:101
+msgid ""
+"Texture that defines the strength of the clearcoat effect and the glossiness "
+"of the clearcoat. Strength is specified in the red channel while glossiness "
+"is specified in the green channel."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:104
+msgid ""
+"If [code]true[/code], the shader will read depth texture at multiple points "
+"along the view ray to determine occlusion and parrallax. This can be very "
+"performance demanding, but results in more realistic looking depth mapping."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:107
+msgid ""
+"If [code]true[/code], depth mapping is enabled (also called \"parallax "
+"mapping\" or \"height mapping\"). See also [member normal_enabled].\n"
+"[b]Note:[/b] Depth mapping is not supported if triplanar mapping is used on "
+"the same material. The value of [member depth_enabled] will be ignored if "
+"[member uv1_triplanar] is enabled."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:111
+msgid ""
+"If [code]true[/code], direction of the binormal is flipped before using in "
+"the depth effect. This may be necessary if you have encoded your binormals "
+"in a way that is conflicting with the depth effect."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:114
+msgid ""
+"If [code]true[/code], direction of the tangent is flipped before using in "
+"the depth effect. This may be necessary if you have encoded your tangents in "
+"a way that is conflicting with the depth effect."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:117
+msgid ""
+"Number of layers to use when using [member depth_deep_parallax] and the view "
+"direction is perpendicular to the surface of the object. A higher number "
+"will be more performance demanding while a lower number may not look as "
+"crisp."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:120
+msgid ""
+"Number of layers to use when using [member depth_deep_parallax] and the view "
+"direction is parallel to the surface of the object. A higher number will be "
+"more performance demanding while a lower number may not look as crisp."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:123
+msgid ""
+"Scales the depth offset effect. A higher number will create a larger depth."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:126
+msgid ""
+"Texture used to determine depth at a given pixel. Depth is always stored in "
+"the red channel."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:129
+msgid "Texture that specifies the color of the detail overlay."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:132
+msgid ""
+"Specifies how the [member detail_albedo] should blend with the current "
+"[code]ALBEDO[/code]. See [enum BlendMode] for options."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:135
+msgid ""
+"If [code]true[/code], enables the detail overlay. Detail is a second texture "
+"that gets mixed over the surface of the object based on [member "
+"detail_mask]. This can be used to add variation to objects, or to blend "
+"between two different albedo/normal textures."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:138
+msgid ""
+"Texture used to specify how the detail textures get blended with the base "
+"textures."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:141
+msgid ""
+"Texture that specifies the per-pixel normal of the detail overlay.\n"
+"[b]Note:[/b] Godot expects the normal map to use X+, Y-, and Z+ coordinates. "
+"See [url=http://wiki.polycount.com/wiki/"
+"Normal_Map_Technical_Details#Common_Swizzle_Coordinates]this page[/url] for "
+"a comparison of normal map coordinates expected by popular engines."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:145
+msgid ""
+"Specifies whether to use [code]UV[/code] or [code]UV2[/code] for the detail "
+"layer. See [enum DetailUV] for options."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:148
+msgid ""
+"Distance at which the object appears fully opaque.\n"
+"[b]Note:[/b] If [code]distance_fade_max_distance[/code] is less than "
+"[code]distance_fade_min_distance[/code], the behavior will be reversed. The "
+"object will start to fade away at [code]distance_fade_max_distance[/code] "
+"and will fully disappear once it reaches [code]distance_fade_min_distance[/"
+"code]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:152
+msgid ""
+"Distance at which the object starts to become visible. If the object is less "
+"than this distance away, it will be invisible.\n"
+"[b]Note:[/b] If [code]distance_fade_min_distance[/code] is greater than "
+"[code]distance_fade_max_distance[/code], the behavior will be reversed. The "
+"object will start to fade away at [code]distance_fade_max_distance[/code] "
+"and will fully disappear once it reaches [code]distance_fade_min_distance[/"
+"code]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:156
+msgid ""
+"Specifies which type of fade to use. Can be any of the [enum "
+"DistanceFadeMode]s."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:159
+msgid "The emitted light's color. See [member emission_enabled]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:162
+msgid ""
+"If [code]true[/code], the body emits light. Emitting light makes the object "
+"appear brighter. The object can also cast light on other objects if a "
+"[GIProbe] or [BakedLightmap] is used and this object is used in baked "
+"lighting."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:165
+msgid "The emitted light's strength. See [member emission_enabled]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:168
+msgid "Use [code]UV2[/code] to read from the [member emission_texture]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:171
+msgid ""
+"Sets how [member emission] interacts with [member emission_texture]. Can "
+"either add or multiply. See [enum EmissionOperator] for options."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:174
+msgid "Texture that specifies how much surface emits light at a given point."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:177
+msgid ""
+"Forces a conversion of the [member albedo_texture] from sRGB space to linear "
+"space."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:180
+msgid "If [code]true[/code], the object receives no ambient light."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:183
+msgid ""
+"If [code]true[/code], the object receives no shadow that would otherwise be "
+"cast onto it."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:186
+msgid ""
+"If [code]true[/code], the shader will compute extra operations to make sure "
+"the normal stays correct when using a non-uniform scale. Only enable if "
+"using non-uniform scaling."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:189
+msgid ""
+"If [code]true[/code], the object is rendered at the same size regardless of "
+"distance."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:192
+msgid ""
+"If [code]true[/code], depth testing is disabled and the object will be drawn "
+"in render order."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:195
+msgid ""
+"If [code]true[/code], transparency is enabled on the body. See also [member "
+"params_blend_mode]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:198
+msgid "If [code]true[/code], the object is unaffected by lighting."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:201
+msgid ""
+"If [code]true[/code], render point size can be changed.\n"
+"[b]Note:[/b] This is only effective for objects whose geometry is point-"
+"based rather than triangle-based. See also [member params_point_size]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:205
+msgid ""
+"If [code]true[/code], enables the \"shadow to opacity\" render mode where "
+"lighting modifies the alpha so shadowed areas are opaque and non-shadowed "
+"areas are transparent. Useful for overlaying shadows onto a camera feed in "
+"AR."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:208
+msgid ""
+"If [code]true[/code], lighting is calculated per vertex rather than per "
+"pixel. This may increase performance on low-end devices."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:211
+msgid ""
+"If [code]true[/code], triplanar mapping is calculated in world space rather "
+"than object local space. See also [member uv1_triplanar]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:214
+msgid ""
+"A high value makes the material appear more like a metal. Non-metals use "
+"their albedo as the diffuse color and add diffuse to the specular "
+"reflection. With non-metals, the reflection appears on top of the albedo "
+"color. Metals use their albedo as a multiplier to the specular reflection "
+"and set the diffuse color to black resulting in a tinted reflection. "
+"Materials work better when fully metal or fully non-metal, values between "
+"[code]0[/code] and [code]1[/code] should only be used for blending between "
+"metal and non-metal sections. To alter the amount of reflection use [member "
+"roughness]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:217
+msgid ""
+"Sets the size of the specular lobe. The specular lobe is the bright spot "
+"that is reflected from light sources.\n"
+"[b]Note:[/b] Unlike [member metallic], this is not energy-conserving, so it "
+"should be left at [code]0.5[/code] in most cases. See also [member "
+"roughness]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:221
+msgid ""
+"Texture used to specify metallic for an object. This is multiplied by "
+"[member metallic]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:224
+msgid ""
+"Specifies the channel of the [member metallic_texture] in which the metallic "
+"information is stored. This is useful when you store the information for "
+"multiple effects in a single texture. For example if you stored metallic in "
+"the red channel, roughness in the blue, and ambient occlusion in the green "
+"you could reduce the number of textures you use."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:227
+msgid "If [code]true[/code], normal mapping is enabled."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:230
+msgid "The strength of the normal map's effect."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:233
+msgid ""
+"Texture used to specify the normal at a given pixel. The "
+"[code]normal_texture[/code] only uses the red and green channels; the blue "
+"and alpha channels are ignored. The normal read from [code]normal_texture[/"
+"code] is oriented around the surface normal provided by the [Mesh].\n"
+"[b]Note:[/b] The mesh must have both normals and tangents defined in its "
+"vertex data. Otherwise, the normal map won't render correctly and will only "
+"appear to darken the whole surface. If creating geometry with [SurfaceTool], "
+"you can use [method SurfaceTool.generate_normals] and [method SurfaceTool."
+"generate_tangents] to automatically generate normals and tangents "
+"respectively.\n"
+"[b]Note:[/b] Godot expects the normal map to use X+, Y-, and Z+ coordinates. "
+"See [url=http://wiki.polycount.com/wiki/"
+"Normal_Map_Technical_Details#Common_Swizzle_Coordinates]this page[/url] for "
+"a comparison of normal map coordinates expected by popular engines."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:238
+msgid "Threshold at which the alpha scissor will discard values."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:241
+msgid ""
+"If [code]true[/code], the shader will keep the scale set for the mesh. "
+"Otherwise the scale is lost when billboarding. Only applies when [member "
+"params_billboard_mode] is [constant BILLBOARD_ENABLED]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:244
+msgid ""
+"Controls how the object faces the camera. See [enum BillboardMode].\n"
+"[b]Note:[/b] Billboard mode is not suitable for VR because the left-right "
+"vector of the camera is not horizontal when the screen is attached to your "
+"head instead of on the table. See [url=https://github.com/godotengine/godot/"
+"issues/41567]GitHub issue #41567[/url] for details."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:248
+msgid ""
+"The material's blend mode.\n"
+"[b]Note:[/b] Values other than [code]Mix[/code] force the object into the "
+"transparent pipeline. See [enum BlendMode]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:252
+msgid ""
+"Which side of the object is not drawn when backfaces are rendered. See [enum "
+"CullMode]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:255
+msgid ""
+"Determines when depth rendering takes place. See [enum DepthDrawMode]. See "
+"also [member flags_transparent]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:258
+msgid ""
+"The algorithm used for diffuse light scattering. See [enum DiffuseMode]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:261
+msgid ""
+"If [code]true[/code], enables the vertex grow setting. See [member "
+"params_grow_amount]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:264
+msgid "Grows object vertices in the direction of their normals."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:267
+msgid "Currently unimplemented in Godot."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:270
+msgid "The point size in pixels. See [member flags_use_point_size]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:273
+msgid "The method for rendering the specular blob. See [enum SpecularMode]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:276
+msgid ""
+"If [code]true[/code], the shader will discard all pixels that have an alpha "
+"value less than [member params_alpha_scissor_threshold]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:279
+msgid ""
+"The number of horizontal frames in the particle sprite sheet. Only enabled "
+"when using [constant BILLBOARD_PARTICLES]. See [member "
+"params_billboard_mode]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:282
+msgid ""
+"If [code]true[/code], particle animations are looped. Only enabled when "
+"using [constant BILLBOARD_PARTICLES]. See [member params_billboard_mode]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:285
+msgid ""
+"The number of vertical frames in the particle sprite sheet. Only enabled "
+"when using [constant BILLBOARD_PARTICLES]. See [member "
+"params_billboard_mode]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:288
+msgid ""
+"Distance over which the fade effect takes place. The larger the distance the "
+"longer it takes for an object to fade."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:291
+msgid ""
+"If [code]true[/code], the proximity fade effect is enabled. The proximity "
+"fade effect fades out each pixel based on its distance to another object."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:294
+msgid ""
+"If [code]true[/code], the refraction effect is enabled. Refraction distorts "
+"transparency based on light from behind the object. When using the GLES3 "
+"backend, the material's roughness value will affect the blurriness of the "
+"refraction. Higher roughness values will make the refraction look blurrier."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:297
+msgid ""
+"The strength of the refraction effect. Higher values result in a more "
+"distorted appearance for the refraction."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:300
+msgid ""
+"Texture that controls the strength of the refraction per-pixel. Multiplied "
+"by [member refraction_scale]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:303
+msgid ""
+"Specifies the channel of the [member refraction_texture] in which the "
+"refraction information is stored. This is useful when you store the "
+"information for multiple effects in a single texture. For example if you "
+"stored metallic in the red channel, roughness in the blue, and ambient "
+"occlusion in the green you could reduce the number of textures you use."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:306
+msgid "Sets the strength of the rim lighting effect."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:309
+msgid ""
+"If [code]true[/code], rim effect is enabled. Rim lighting increases the "
+"brightness at glancing angles on an object.\n"
+"[b]Note:[/b] Rim lighting is not visible if the material has [member "
+"flags_unshaded] set to [code]true[/code]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:313
+msgid ""
+"Texture used to set the strength of the rim lighting effect per-pixel. "
+"Multiplied by [member rim]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:316
+msgid ""
+"The amount of to blend light and albedo color when rendering rim effect. If "
+"[code]0[/code] the light color is used, while [code]1[/code] means albedo "
+"color is used. An intermediate value generally works best."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:319
+msgid ""
+"Surface reflection. A value of [code]0[/code] represents a perfect mirror "
+"while a value of [code]1[/code] completely blurs the reflection. See also "
+"[member metallic]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:322
+msgid ""
+"Texture used to control the roughness per-pixel. Multiplied by [member "
+"roughness]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:328
+msgid ""
+"If [code]true[/code], subsurface scattering is enabled. Emulates light that "
+"penetrates an object's surface, is scattered, and then emerges."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:331
+msgid "The strength of the subsurface scattering effect."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:334
+msgid ""
+"Texture used to control the subsurface scattering strength. Stored in the "
+"red texture channel. Multiplied by [member subsurf_scatter_strength]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:337
+msgid ""
+"The color used by the transmission effect. Represents the light passing "
+"through an object."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:340
+msgid "If [code]true[/code], the transmission effect is enabled."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:343
+msgid ""
+"Texture used to control the transmission effect per-pixel. Added to [member "
+"transmission]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:346
+msgid ""
+"How much to offset the [code]UV[/code] coordinates. This amount will be "
+"added to [code]UV[/code] in the vertex function. This can be used to offset "
+"a texture."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:349
+msgid ""
+"How much to scale the [code]UV[/code] coordinates. This is multiplied by "
+"[code]UV[/code] in the vertex function."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:352
+msgid ""
+"If [code]true[/code], instead of using [code]UV[/code] textures will use a "
+"triplanar texture lookup to determine how to apply textures. Triplanar uses "
+"the orientation of the object's surface to blend between texture "
+"coordinates. It reads from the source texture 3 times, once for each axis "
+"and then blends between the results based on how closely the pixel aligns "
+"with each axis. This is often used for natural features to get a realistic "
+"blend of materials. Because triplanar texturing requires many more texture "
+"reads per-pixel it is much slower than normal UV texturing. Additionally, "
+"because it is blending the texture between the three axes, it is unsuitable "
+"when you are trying to achieve crisp texturing."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:355 doc/classes/SpatialMaterial.xml:367
+msgid ""
+"A lower number blends the texture more softly while a higher number blends "
+"the texture more sharply."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:358
+msgid ""
+"How much to offset the [code]UV2[/code] coordinates. This amount will be "
+"added to [code]UV2[/code] in the vertex function. This can be used to offset "
+"a texture."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:361
+msgid ""
+"How much to scale the [code]UV2[/code] coordinates. This is multiplied by "
+"[code]UV2[/code] in the vertex function."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:364
+msgid ""
+"If [code]true[/code], instead of using [code]UV2[/code] textures will use a "
+"triplanar texture lookup to determine how to apply textures. Triplanar uses "
+"the orientation of the object's surface to blend between texture "
+"coordinates. It reads from the source texture 3 times, once for each axis "
+"and then blends between the results based on how closely the pixel aligns "
+"with each axis. This is often used for natural features to get a realistic "
+"blend of materials. Because triplanar texturing requires many more texture "
+"reads per-pixel it is much slower than normal UV texturing. Additionally, "
+"because it is blending the texture between the three axes, it is unsuitable "
+"when you are trying to achieve crisp texturing."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:370
+msgid ""
+"If [code]true[/code], the model's vertex colors are processed as sRGB mode."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:373
+msgid "If [code]true[/code], the vertex color is used as albedo color."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:378
+msgid "Texture specifying per-pixel color."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:381
+msgid "Texture specifying per-pixel metallic value."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:384
+msgid "Texture specifying per-pixel roughness value."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:387
+msgid "Texture specifying per-pixel emission color."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:390
+msgid "Texture specifying per-pixel normal vector."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:393
+msgid "Texture specifying per-pixel rim value."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:396
+msgid "Texture specifying per-pixel clearcoat value."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:399
+msgid ""
+"Texture specifying per-pixel flowmap direction for use with [member "
+"anisotropy]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:402
+msgid "Texture specifying per-pixel ambient occlusion value."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:405
+msgid "Texture specifying per-pixel depth."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:408
+msgid "Texture specifying per-pixel subsurface scattering."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:411
+msgid "Texture specifying per-pixel transmission color."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:414
+msgid "Texture specifying per-pixel refraction strength."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:417
+msgid "Texture specifying per-pixel detail mask blending value."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:420
+msgid "Texture specifying per-pixel detail color."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:423
+msgid "Texture specifying per-pixel detail normal."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:426
+msgid "Represents the size of the [enum TextureParam] enum."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:429
+msgid "Use [code]UV[/code] with the detail texture."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:432
+msgid "Use [code]UV2[/code] with the detail texture."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:435
+msgid "Constant for setting [member flags_transparent]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:438
+msgid "Constant for setting [member emission_enabled]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:441
+msgid "Constant for setting [member normal_enabled]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:444
+msgid "Constant for setting [member rim_enabled]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:447
+msgid "Constant for setting [member clearcoat_enabled]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:450
+msgid "Constant for setting [member anisotropy_enabled]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:453
+msgid "Constant for setting [member ao_enabled]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:456
+msgid "Constant for setting [member depth_enabled]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:459
+msgid "Constant for setting [member subsurf_scatter_enabled]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:462
+msgid "Constant for setting [member transmission_enabled]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:465
+msgid "Constant for setting [member refraction_enabled]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:468
+msgid "Constant for setting [member detail_enabled]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:474
+msgid ""
+"Default blend mode. The color of the object is blended over the background "
+"based on the object's alpha value."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:477
+msgid "The color of the object is added to the background."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:480
+msgid "The color of the object is subtracted from the background."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:483
+msgid "The color of the object is multiplied by the background."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:486
+msgid "Default depth draw mode. Depth is drawn only for opaque objects."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:489
+msgid "Depth draw is calculated for both opaque and transparent objects."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:492
+msgid "No depth draw."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:495
+msgid ""
+"For transparent objects, an opaque pass is made first with the opaque parts, "
+"then transparency is drawn."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:498
+msgid "Default cull mode. The back of the object is culled when not visible."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:501
+msgid "The front of the object is culled when not visible."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:504
+msgid "No culling is performed."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:507
+msgid ""
+"No lighting is used on the object. Color comes directly from [code]ALBEDO[/"
+"code]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:510
+msgid ""
+"Lighting is calculated per-vertex rather than per-pixel. This can be used to "
+"increase the speed of the shader at the cost of quality."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:513
+msgid ""
+"Disables the depth test, so this object is drawn on top of all others. "
+"However, objects drawn after it in the draw order may cover it."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:516
+msgid "Set [code]ALBEDO[/code] to the per-vertex color specified in the mesh."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:519
+msgid ""
+"Vertex color is in sRGB space and needs to be converted to linear. Only "
+"applies in the GLES3 renderer."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:522
+msgid ""
+"Uses point size to alter the size of primitive points. Also changes the "
+"albedo texture lookup to use [code]POINT_COORD[/code] instead of [code]UV[/"
+"code]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:525
+msgid ""
+"Object is scaled by depth so that it always appears the same size on screen."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:528
+msgid ""
+"Shader will keep the scale set for the mesh. Otherwise the scale is lost "
+"when billboarding. Only applies when [member params_billboard_mode] is "
+"[constant BILLBOARD_ENABLED]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:531
+msgid ""
+"Use triplanar texture lookup for all texture lookups that would normally use "
+"[code]UV[/code]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:534
+msgid ""
+"Use triplanar texture lookup for all texture lookups that would normally use "
+"[code]UV2[/code]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:537
+msgid ""
+"Use [code]UV2[/code] coordinates to look up from the [member ao_texture]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:540
+msgid ""
+"Use [code]UV2[/code] coordinates to look up from the [member "
+"emission_texture]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:543
+msgid "Use alpha scissor. Set by [member params_use_alpha_scissor]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:546
+msgid ""
+"Use world coordinates in the triplanar texture lookup instead of local "
+"coordinates."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:549
+msgid "Forces the shader to convert albedo from sRGB space to linear space."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:552
+msgid "Disables receiving shadows from other objects."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:555
+msgid "Disables receiving ambient light."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:558
+msgid "Ensures that normals appear correct, even with non-uniform scaling."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:561
+msgid "Enables the shadow to opacity feature."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:567
+msgid "Default diffuse scattering algorithm."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:570
+msgid "Diffuse scattering ignores roughness."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:573
+msgid "Extends Lambert to cover more than 90 degrees when roughness increases."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:576
+msgid "Attempts to use roughness to emulate microsurfacing."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:579
+msgid "Uses a hard cut for lighting, with smoothing affected by roughness."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:582
+msgid "Default specular blob."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:585 doc/classes/SpatialMaterial.xml:588
+msgid "Older specular algorithm, included for compatibility."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:591
+msgid "Toon blob which changes size based on roughness."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:594
+msgid "No specular blob."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:597
+msgid "Billboard mode is disabled."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:600
+msgid "The object's Z axis will always face the camera."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:603
+msgid "The object's X axis will always face the camera."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:606
+msgid ""
+"Used for particle systems when assigned to [Particles] and [CPUParticles] "
+"nodes. Enables [code]particles_anim_*[/code] properties.\n"
+"The [member ParticlesMaterial.anim_speed] or [member CPUParticles."
+"anim_speed] should also be set to a positive value for the animation to play."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:610
+msgid "Used to read from the red channel of a texture."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:613
+msgid "Used to read from the green channel of a texture."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:616
+msgid "Used to read from the blue channel of a texture."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:619
+msgid "Used to read from the alpha channel of a texture."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:625
+msgid "Adds the emission color to the color from the emission texture."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:628
+msgid "Multiplies the emission color by the color from the emission texture."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:631
+msgid "Do not use distance fade."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:634
+msgid ""
+"Smoothly fades the object out based on each pixel's distance from the camera "
+"using the alpha channel."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:637
+msgid ""
+"Smoothly fades the object out based on each pixel's distance from the camera "
+"using a dither approach. Dithering discards pixels based on a set pattern to "
+"smoothly fade without enabling transparency. On certain hardware this can be "
+"faster than [constant DISTANCE_FADE_PIXEL_ALPHA]."
+msgstr ""
+
+#: doc/classes/SpatialMaterial.xml:640
+msgid ""
+"Smoothly fades the object out based on the object's distance from the camera "
+"using a dither approach. Dithering discards pixels based on a set pattern to "
+"smoothly fade without enabling transparency. On certain hardware this can be "
+"faster than [constant DISTANCE_FADE_PIXEL_ALPHA]."
+msgstr ""
+
+#: doc/classes/SphereMesh.xml:4 doc/classes/SphereMesh.xml:7
+msgid "Class representing a spherical [PrimitiveMesh]."
+msgstr ""
+
+#: doc/classes/SphereMesh.xml:15
+msgid "Full height of the sphere."
+msgstr ""
+
+#: doc/classes/SphereMesh.xml:18
+msgid ""
+"If [code]true[/code], a hemisphere is created rather than a full sphere.\n"
+"[b]Note:[/b] To get a regular hemisphere, the height and radius of the "
+"sphere must be equal."
+msgstr ""
+
+#: doc/classes/SphereMesh.xml:22
+msgid "Number of radial segments on the sphere."
+msgstr ""
+
+#: doc/classes/SphereMesh.xml:25
+msgid "Radius of sphere."
+msgstr ""
+
+#: doc/classes/SphereMesh.xml:28
+msgid "Number of segments along the height of the sphere."
+msgstr ""
+
+#: doc/classes/SphereShape.xml:4
+msgid "Sphere shape for 3D collisions."
+msgstr ""
+
+#: doc/classes/SphereShape.xml:7
+msgid ""
+"Sphere shape for 3D collisions, which can be set into a [PhysicsBody] or "
+"[Area]. This shape is useful for modeling sphere-like 3D objects."
+msgstr ""
+
+#: doc/classes/SphereShape.xml:16
+msgid "The sphere's radius. The shape's diameter is double the radius."
+msgstr ""
+
+#: doc/classes/SpinBox.xml:4
+msgid "Numerical input text field."
+msgstr ""
+
+#: doc/classes/SpinBox.xml:7
+msgid ""
+"SpinBox is a numerical input text field. It allows entering integers and "
+"floats.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"var spin_box = SpinBox.new()\n"
+"add_child(spin_box)\n"
+"var line_edit = spin_box.get_line_edit()\n"
+"line_edit.context_menu_enabled = false\n"
+"spin_box.align = LineEdit.ALIGN_RIGHT\n"
+"[/codeblock]\n"
+"The above code will create a [SpinBox], disable context menu on it and set "
+"the text alignment to right.\n"
+"See [Range] class for more options over the [SpinBox].\n"
+"[b]Note:[/b] [SpinBox] relies on an underlying [LineEdit] node. To theme a "
+"[SpinBox]'s background, add theme items for [LineEdit] and customize them."
+msgstr ""
+
+#: doc/classes/SpinBox.xml:26
+msgid "Applies the current value of this [SpinBox]."
+msgstr ""
+
+#: doc/classes/SpinBox.xml:32
+msgid ""
+"Returns the [LineEdit] instance from this [SpinBox]. You can use it to "
+"access properties and methods of [LineEdit].\n"
+"[b]Warning:[/b] This is a required internal node, removing and freeing it "
+"may cause a crash. If you wish to hide it or any of its children, use their "
+"[member CanvasItem.visible] property."
+msgstr ""
+
+#: doc/classes/SpinBox.xml:39
+msgid "Sets the text alignment of the [SpinBox]."
+msgstr ""
+
+#: doc/classes/SpinBox.xml:42
+msgid ""
+"If [code]true[/code], the [SpinBox] will be editable. Otherwise, it will be "
+"read only."
+msgstr ""
+
+#: doc/classes/SpinBox.xml:45
+msgid ""
+"Adds the specified [code]prefix[/code] string before the numerical value of "
+"the [SpinBox]."
+msgstr ""
+
+#: doc/classes/SpinBox.xml:48
+msgid ""
+"Adds the specified [code]suffix[/code] string after the numerical value of "
+"the [SpinBox]."
+msgstr ""
+
+#: doc/classes/SpinBox.xml:55
+msgid "Sets a custom [Texture] for up and down arrows of the [SpinBox]."
+msgstr ""
+
+#: doc/classes/SplitContainer.xml:4
+msgid "Container for splitting and adjusting."
+msgstr ""
+
+#: doc/classes/SplitContainer.xml:7
+msgid ""
+"Container for splitting two [Control]s vertically or horizontally, with a "
+"grabber that allows adjusting the split offset or ratio."
+msgstr ""
+
+#: doc/classes/SplitContainer.xml:15
+msgid ""
+"Clamps the [member split_offset] value to not go outside the currently "
+"possible minimal and maximum values."
+msgstr ""
+
+#: doc/classes/SplitContainer.xml:21
+msgid ""
+"If [code]true[/code], the area of the first [Control] will be collapsed and "
+"the dragger will be disabled."
+msgstr ""
+
+#: doc/classes/SplitContainer.xml:24
+msgid ""
+"Determines the dragger's visibility. See [enum DraggerVisibility] for "
+"details."
+msgstr ""
+
+#: doc/classes/SplitContainer.xml:27
+msgid ""
+"The initial offset of the splitting between the two [Control]s, with "
+"[code]0[/code] being at the end of the first [Control]."
+msgstr ""
+
+#: doc/classes/SplitContainer.xml:34
+msgid "Emitted when the dragger is dragged by user."
+msgstr ""
+
+#: doc/classes/SplitContainer.xml:40
+msgid "The split dragger is visible when the cursor hovers it."
+msgstr ""
+
+#: doc/classes/SplitContainer.xml:43
+msgid "The split dragger is never visible."
+msgstr ""
+
+#: doc/classes/SplitContainer.xml:46
+msgid "The split dragger is never visible and its space collapsed."
+msgstr ""
+
+#: doc/classes/SpotLight.xml:4
+msgid "A spotlight, such as a reflector spotlight or a lantern."
+msgstr ""
+
+#: doc/classes/SpotLight.xml:7
+msgid ""
+"A Spotlight is a type of [Light] node that emits lights in a specific "
+"direction, in the shape of a cone. The light is attenuated through the "
+"distance. This attenuation can be configured by changing the energy, radius "
+"and attenuation parameters of [Light].\n"
+"[b]Note:[/b] By default, only 32 SpotLights may affect a single mesh "
+"[i]resource[/i] at once. Consider splitting your level into several meshes "
+"to decrease the likelihood that more than 32 lights will affect the same "
+"mesh resource. Splitting the level mesh will also improve frustum culling "
+"effectiveness, leading to greater performance. If you need to use more "
+"lights per mesh, you can increase [member ProjectSettings.rendering/limits/"
+"rendering/max_lights_per_object] at the cost of shader compilation times."
+msgstr ""
+
+#: doc/classes/SpotLight.xml:18
+msgid "The spotlight's angle in degrees."
+msgstr ""
+
+#: doc/classes/SpotLight.xml:21
+msgid "The spotlight's angular attenuation curve."
+msgstr ""
+
+#: doc/classes/SpotLight.xml:24
+msgid "The spotlight's light energy attenuation curve."
+msgstr ""
+
+#: doc/classes/SpotLight.xml:27
+msgid ""
+"The maximal range that can be reached by the spotlight. Note that the "
+"effectively lit area may appear to be smaller depending on the [member "
+"spot_attenuation] in use. No matter the [member spot_attenuation] in use, "
+"the light will never reach anything outside this range."
+msgstr ""
+
+#: doc/classes/SpringArm.xml:4
+msgid "A helper node, mostly used in 3rd person cameras."
+msgstr ""
+
+#: doc/classes/SpringArm.xml:7
+msgid ""
+"The SpringArm node is a node that casts a ray (or collision shape) along its "
+"z axis and moves all its direct children to the collision point, minus a "
+"margin.\n"
+"The most common use case for this is to make a 3rd person camera that reacts "
+"to collisions in the environment.\n"
+"The SpringArm will either cast a ray, or if a shape is given, it will cast "
+"the shape in the direction of its z axis.\n"
+"If you use the SpringArm as a camera controller for your player, you might "
+"need to exclude the player's collider from the SpringArm's collision check."
+msgstr ""
+
+#: doc/classes/SpringArm.xml:19
+msgid ""
+"Adds the [PhysicsBody] object with the given [RID] to the list of "
+"[PhysicsBody] objects excluded from the collision check."
+msgstr ""
+
+#: doc/classes/SpringArm.xml:25
+msgid ""
+"Clears the list of [PhysicsBody] objects excluded from the collision check."
+msgstr ""
+
+#: doc/classes/SpringArm.xml:31
+msgid "Returns the spring arm's current length."
+msgstr ""
+
+#: doc/classes/SpringArm.xml:38
+msgid ""
+"Removes the given [RID] from the list of [PhysicsBody] objects excluded from "
+"the collision check."
+msgstr ""
+
+#: doc/classes/SpringArm.xml:44
+msgid ""
+"The layers against which the collision check shall be done. See [url=https://"
+"docs.godotengine.org/en/3.4/tutorials/physics/physics_introduction."
+"html#collision-layers-and-masks]Collision layers and masks[/url] in the "
+"documentation for more information."
+msgstr ""
+
+#: doc/classes/SpringArm.xml:47
+msgid ""
+"When the collision check is made, a candidate length for the SpringArm is "
+"given.\n"
+"The margin is then subtracted to this length and the translation is applied "
+"to the child objects of the SpringArm.\n"
+"This margin is useful for when the SpringArm has a [Camera] as a child node: "
+"without the margin, the [Camera] would be placed on the exact point of "
+"collision, while with the margin the [Camera] would be placed close to the "
+"point of collision."
+msgstr ""
+
+#: doc/classes/SpringArm.xml:52
+msgid ""
+"The [Shape] to use for the SpringArm.\n"
+"When the shape is set, the SpringArm will cast the [Shape] on its z axis "
+"instead of performing a ray cast."
+msgstr ""
+
+#: doc/classes/SpringArm.xml:56
+msgid ""
+"The maximum extent of the SpringArm. This is used as a length for both the "
+"ray and the shape cast used internally to calculate the desired position of "
+"the SpringArm's child nodes.\n"
+"To know more about how to perform a shape cast or a ray cast, please consult "
+"the [PhysicsDirectSpaceState] documentation."
+msgstr ""
+
+#: doc/classes/Sprite.xml:4
+msgid "General-purpose sprite node."
+msgstr ""
+
+#: doc/classes/Sprite.xml:7
+msgid ""
+"A node that displays a 2D texture. The texture displayed can be a region "
+"from a larger atlas texture, or a frame from a sprite sheet animation."
+msgstr ""
+
+#: doc/classes/Sprite.xml:16
+msgid ""
+"Returns a [Rect2] representing the Sprite's boundary in local coordinates. "
+"Can be used to detect if the Sprite was clicked. Example:\n"
+"[codeblock]\n"
+"func _input(event):\n"
+" if event is InputEventMouseButton and event.pressed and event."
+"button_index == BUTTON_LEFT:\n"
+" if get_rect().has_point(to_local(event.position)):\n"
+" print(\"A click!\")\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Sprite.xml:29
+msgid ""
+"Returns [code]true[/code], if the pixel at the given position is opaque and "
+"[code]false[/code] in other case.\n"
+"[b]Note:[/b] It also returns [code]false[/code], if the sprite's texture is "
+"[code]null[/code] or if the given position is invalid."
+msgstr ""
+
+#: doc/classes/Sprite.xml:36
+msgid "If [code]true[/code], texture is centered."
+msgstr ""
+
+#: doc/classes/Sprite.xml:45 doc/classes/Sprite3D.xml:15
+msgid ""
+"Current frame to display from sprite sheet. [member hframes] or [member "
+"vframes] must be greater than 1."
+msgstr ""
+
+#: doc/classes/Sprite.xml:48 doc/classes/Sprite3D.xml:18
+msgid ""
+"Coordinates of the frame to display from sprite sheet. This is as an alias "
+"for the [member frame] property. [member hframes] or [member vframes] must "
+"be greater than 1."
+msgstr ""
+
+#: doc/classes/Sprite.xml:51 doc/classes/Sprite3D.xml:21
+msgid "The number of columns in the sprite sheet."
+msgstr ""
+
+#: doc/classes/Sprite.xml:54
+msgid ""
+"The normal map gives depth to the Sprite.\n"
+"[b]Note:[/b] Godot expects the normal map to use X+, Y-, and Z+ coordinates. "
+"See [url=http://wiki.polycount.com/wiki/"
+"Normal_Map_Technical_Details#Common_Swizzle_Coordinates]this page[/url] for "
+"a comparison of normal map coordinates expected by popular engines."
+msgstr ""
+
+#: doc/classes/Sprite.xml:61
+msgid ""
+"If [code]true[/code], texture is cut from a larger atlas texture. See "
+"[member region_rect]."
+msgstr ""
+
+#: doc/classes/Sprite.xml:64
+msgid "If [code]true[/code], the outermost pixels get blurred out."
+msgstr ""
+
+#: doc/classes/Sprite.xml:67 doc/classes/Sprite3D.xml:27
+msgid ""
+"The region of the atlas texture to display. [member region_enabled] must be "
+"[code]true[/code]."
+msgstr ""
+
+#: doc/classes/Sprite.xml:70
+msgid "[Texture] object to draw."
+msgstr ""
+
+#: doc/classes/Sprite.xml:73 doc/classes/Sprite3D.xml:33
+msgid "The number of rows in the sprite sheet."
+msgstr ""
+
+#: doc/classes/Sprite.xml:79 doc/classes/Sprite3D.xml:39
+msgid "Emitted when the [member frame] changes."
+msgstr ""
+
+#: doc/classes/Sprite.xml:84
+msgid "Emitted when the [member texture] changes."
+msgstr ""
+
+#: doc/classes/Sprite3D.xml:4
+msgid "2D sprite node in a 3D world."
+msgstr ""
+
+#: doc/classes/Sprite3D.xml:7
+msgid ""
+"A node that displays a 2D texture in a 3D environment. The texture displayed "
+"can be a region from a larger atlas texture, or a frame from a sprite sheet "
+"animation."
+msgstr ""
+
+#: doc/classes/Sprite3D.xml:24
+msgid ""
+"If [code]true[/code], texture will be cut from a larger atlas texture. See "
+"[member region_rect]."
+msgstr ""
+
+#: doc/classes/Sprite3D.xml:30
+msgid ""
+"[Texture] object to draw. If [member GeometryInstance.material_override] is "
+"used, this will be overridden."
+msgstr ""
+
+#: doc/classes/SpriteBase3D.xml:4
+msgid "2D sprite node in 3D environment."
+msgstr ""
+
+#: doc/classes/SpriteBase3D.xml:7
+msgid "A node that displays 2D texture information in a 3D environment."
+msgstr ""
+
+#: doc/classes/SpriteBase3D.xml:27
+msgid "Returns the rectangle representing this sprite."
+msgstr ""
+
+#: doc/classes/SpriteBase3D.xml:35
+msgid "If [code]true[/code], the specified flag will be enabled."
+msgstr ""
+
+#: doc/classes/SpriteBase3D.xml:43
+msgid "The direction in which the front of the texture faces."
+msgstr ""
+
+#: doc/classes/SpriteBase3D.xml:51
+msgid ""
+"If [code]true[/code], texture can be seen from the back as well, if "
+"[code]false[/code], it is invisible when looking at it from behind."
+msgstr ""
+
+#: doc/classes/SpriteBase3D.xml:60
+msgid ""
+"A color value that gets multiplied on, could be used for mood-coloring or to "
+"simulate the color of light."
+msgstr ""
+
+#: doc/classes/SpriteBase3D.xml:66
+msgid ""
+"The objects' visibility on a scale from [code]0[/code] fully invisible to "
+"[code]1[/code] fully visible."
+msgstr ""
+
+#: doc/classes/SpriteBase3D.xml:69
+msgid "The size of one pixel's width on the sprite to scale it in 3D."
+msgstr ""
+
+#: doc/classes/SpriteBase3D.xml:72
+msgid ""
+"If [code]true[/code], the [Light] in the [Environment] has effects on the "
+"sprite."
+msgstr ""
+
+#: doc/classes/SpriteBase3D.xml:75
+msgid ""
+"If [code]true[/code], the texture's transparency and the opacity are used to "
+"make those parts of the sprite invisible."
+msgstr ""
+
+#: doc/classes/SpriteBase3D.xml:80
+msgid ""
+"If set, the texture's transparency and the opacity are used to make those "
+"parts of the sprite invisible."
+msgstr ""
+
+#: doc/classes/SpriteBase3D.xml:83
+msgid "If set, lights in the environment affect the sprite."
+msgstr ""
+
+#: doc/classes/SpriteBase3D.xml:86
+msgid ""
+"If set, texture can be seen from the back as well, if not, it is invisible "
+"when looking at it from behind."
+msgstr ""
+
+#: doc/classes/SpriteBase3D.xml:89
+msgid "Represents the size of the [enum DrawFlags] enum."
+msgstr ""
+
+#: doc/classes/SpriteFrames.xml:4
+msgid "Sprite frame library for AnimatedSprite."
+msgstr ""
+
+#: doc/classes/SpriteFrames.xml:7
+msgid ""
+"Sprite frame library for [AnimatedSprite]. Contains frames and animation "
+"data for playback.\n"
+"[b]Note:[/b] You can associate a set of normal maps by creating additional "
+"[SpriteFrames] resources with a [code]_normal[/code] suffix. For example, "
+"having 2 [SpriteFrames] resources [code]run[/code] and [code]run_normal[/"
+"code] will make it so the [code]run[/code] animation uses the normal map."
+msgstr ""
+
+#: doc/classes/SpriteFrames.xml:17
+msgid "Adds a new animation to the library."
+msgstr ""
+
+#: doc/classes/SpriteFrames.xml:26
+msgid "Adds a frame to the given animation."
+msgstr ""
+
+#: doc/classes/SpriteFrames.xml:33
+msgid "Removes all frames from the given animation."
+msgstr ""
+
+#: doc/classes/SpriteFrames.xml:39
+msgid "Removes all animations. A \"default\" animation will be created."
+msgstr ""
+
+#: doc/classes/SpriteFrames.xml:46
+msgid ""
+"Returns [code]true[/code] if the given animation is configured to loop when "
+"it finishes playing. Otherwise, returns [code]false[/code]."
+msgstr ""
+
+#: doc/classes/SpriteFrames.xml:52
+msgid ""
+"Returns an array containing the names associated to each animation. Values "
+"are placed in alphabetical order."
+msgstr ""
+
+#: doc/classes/SpriteFrames.xml:59 doc/classes/SpriteFrames.xml:120
+msgid "The animation's speed in frames per second."
+msgstr ""
+
+#: doc/classes/SpriteFrames.xml:67
+msgid "Returns the animation's selected frame."
+msgstr ""
+
+#: doc/classes/SpriteFrames.xml:74
+msgid "Returns the number of frames in the animation."
+msgstr ""
+
+#: doc/classes/SpriteFrames.xml:81
+msgid "If [code]true[/code], the named animation exists."
+msgstr ""
+
+#: doc/classes/SpriteFrames.xml:88
+msgid "Removes the given animation."
+msgstr ""
+
+#: doc/classes/SpriteFrames.xml:96
+msgid "Removes the animation's selected frame."
+msgstr ""
+
+#: doc/classes/SpriteFrames.xml:104
+msgid "Changes the animation's name to [code]newname[/code]."
+msgstr ""
+
+#: doc/classes/SpriteFrames.xml:112
+msgid "If [code]true[/code], the animation will loop."
+msgstr ""
+
+#: doc/classes/SpriteFrames.xml:129
+msgid "Sets the texture of the given frame."
+msgstr ""
+
+#: doc/classes/SpriteFrames.xml:135
+msgid "Compatibility property, always equals to an empty array."
+msgstr ""
+
+#: doc/classes/StaticBody.xml:4
+msgid "Static body for 3D physics."
+msgstr ""
+
+#: doc/classes/StaticBody.xml:7
+msgid ""
+"Static body for 3D physics. A static body is a simple body that is not "
+"intended to move. In contrast to [RigidBody], they don't consume any CPU "
+"resources as long as they don't move.\n"
+"Additionally, a constant linear or angular velocity can be set for the "
+"static body, so even if it doesn't move, it affects other bodies as if it "
+"was moving (this is useful for simulating conveyor belts or conveyor wheels)."
+msgstr ""
+
+#: doc/classes/StaticBody.xml:23
+msgid ""
+"The body's constant angular velocity. This does not rotate the body, but "
+"affects other bodies that touch it, as if it was in a state of rotation."
+msgstr ""
+
+#: doc/classes/StaticBody.xml:26
+msgid ""
+"The body's constant linear velocity. This does not move the body, but "
+"affects other bodies that touch it, as if it was in a state of movement."
+msgstr ""
+
+#: doc/classes/StaticBody.xml:29
+msgid ""
+"The body's friction, from 0 (frictionless) to 1 (full friction).\n"
+"Deprecated, use [member PhysicsMaterial.friction] instead via [member "
+"physics_material_override]."
+msgstr ""
+
+#: doc/classes/StaticBody2D.xml:4
+msgid "Static body for 2D physics."
+msgstr ""
+
+#: doc/classes/StaticBody2D.xml:7
+msgid ""
+"Static body for 2D physics. A StaticBody2D is a body that is not intended to "
+"move. It is ideal for implementing objects in the environment, such as walls "
+"or platforms.\n"
+"Additionally, a constant linear or angular velocity can be set for the "
+"static body, which will affect colliding bodies as if it were moving (for "
+"example, a conveyor belt)."
+msgstr ""
+
+#: doc/classes/StaticBody2D.xml:20
+msgid ""
+"The body's constant angular velocity. This does not rotate the body, but "
+"affects colliding bodies, as if it were rotating."
+msgstr ""
+
+#: doc/classes/StaticBody2D.xml:23
+msgid ""
+"The body's constant linear velocity. This does not move the body, but "
+"affects colliding bodies, as if it were moving."
+msgstr ""
+
+#: doc/classes/StaticBody2D.xml:26
+msgid ""
+"The body's friction. Values range from [code]0[/code] (no friction) to "
+"[code]1[/code] (full friction).\n"
+"Deprecated, use [member PhysicsMaterial.friction] instead via [member "
+"physics_material_override]."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:4
+msgid "Abstraction and base class for stream-based protocols."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:7
+msgid ""
+"StreamPeer is an abstraction and base class for stream-based protocols (such "
+"as TCP). It provides an API for sending and receiving data through streams "
+"as raw data or strings."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:15
+msgid "Gets a signed 16-bit value from the stream."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:21
+msgid "Gets a signed 32-bit value from the stream."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:27
+msgid "Gets a signed 64-bit value from the stream."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:33
+msgid "Gets a signed byte from the stream."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:39
+msgid "Returns the amount of bytes this [StreamPeer] has available."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:46
+msgid ""
+"Returns a chunk data with the received bytes. The amount of bytes to be "
+"received can be requested in the [code]bytes[/code] argument. If not enough "
+"bytes are available, the function will block until the desired amount is "
+"received. This function returns two values, an [enum @GlobalScope.Error] "
+"code and a data array."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:52
+msgid "Gets a double-precision float from the stream."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:58
+msgid "Gets a single-precision float from the stream."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:65
+msgid ""
+"Returns a chunk data with the received bytes. The amount of bytes to be "
+"received can be requested in the \"bytes\" argument. If not enough bytes are "
+"available, the function will return how many were actually received. This "
+"function returns two values, an [enum @GlobalScope.Error] code, and a data "
+"array."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:72
+msgid ""
+"Gets a string with byte-length [code]bytes[/code] from the stream. If "
+"[code]bytes[/code] is negative (default) the length will be read from the "
+"stream using the reverse process of [method put_string]."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:78
+msgid "Gets an unsigned 16-bit value from the stream."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:84
+msgid "Gets an unsigned 32-bit value from the stream."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:90
+msgid "Gets an unsigned 64-bit value from the stream."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:96
+msgid "Gets an unsigned byte from the stream."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:103
+msgid ""
+"Gets an UTF-8 string with byte-length [code]bytes[/code] from the stream "
+"(this decodes the string sent as UTF-8). If [code]bytes[/code] is negative "
+"(default) the length will be read from the stream using the reverse process "
+"of [method put_utf8_string]."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:110
+msgid ""
+"Gets a Variant from the stream. If [code]allow_objects[/code] is [code]true[/"
+"code], decoding objects is allowed.\n"
+"[b]Warning:[/b] Deserialized objects can contain code which gets executed. "
+"Do not use this option if the serialized object comes from untrusted sources "
+"to avoid potential security threats such as remote code execution."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:118
+msgid "Puts a signed 16-bit value into the stream."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:125
+msgid "Puts a signed 32-bit value into the stream."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:132
+msgid "Puts a signed 64-bit value into the stream."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:139
+msgid "Puts a signed byte into the stream."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:146
+msgid ""
+"Sends a chunk of data through the connection, blocking if necessary until "
+"the data is done sending. This function returns an [enum @GlobalScope.Error] "
+"code."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:153
+msgid "Puts a double-precision float into the stream."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:160
+msgid "Puts a single-precision float into the stream."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:167
+msgid ""
+"Sends a chunk of data through the connection. If all the data could not be "
+"sent at once, only part of it will. This function returns two values, an "
+"[enum @GlobalScope.Error] code and an integer, describing how much data was "
+"actually sent."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:174
+msgid ""
+"Puts a zero-terminated ASCII string into the stream prepended by a 32-bit "
+"unsigned integer representing its size.\n"
+"[b]Note:[/b] To put an ASCII string without prepending its size, you can use "
+"[method put_data]:\n"
+"[codeblock]\n"
+"put_data(\"Hello world\".to_ascii())\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:185
+msgid "Puts an unsigned 16-bit value into the stream."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:192
+msgid "Puts an unsigned 32-bit value into the stream."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:199
+msgid "Puts an unsigned 64-bit value into the stream."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:206
+msgid "Puts an unsigned byte into the stream."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:213
+msgid ""
+"Puts a zero-terminated UTF-8 string into the stream prepended by a 32 bits "
+"unsigned integer representing its size.\n"
+"[b]Note:[/b] To put an UTF-8 string without prepending its size, you can use "
+"[method put_data]:\n"
+"[codeblock]\n"
+"put_data(\"Hello world\".to_utf8())\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:225
+msgid ""
+"Puts a Variant into the stream. If [code]full_objects[/code] is [code]true[/"
+"code] encoding objects is allowed (and can potentially include code)."
+msgstr ""
+
+#: doc/classes/StreamPeer.xml:231
+msgid ""
+"If [code]true[/code], this [StreamPeer] will using big-endian format for "
+"encoding and decoding."
+msgstr ""
+
+#: doc/classes/StreamPeerSSL.xml:4
+msgid "SSL stream peer."
+msgstr ""
+
+#: doc/classes/StreamPeerSSL.xml:7
+msgid ""
+"SSL stream peer. This object can be used to connect to an SSL server or "
+"accept a single SSL client connection."
+msgstr ""
+
+#: doc/classes/StreamPeerSSL.xml:20
+msgid ""
+"Accepts a peer connection as a server using the given [code]private_key[/"
+"code] and providing the given [code]certificate[/code] to the client. You "
+"can pass the optional [code]chain[/code] parameter to provide additional CA "
+"chain information along with the certificate."
+msgstr ""
+
+#: doc/classes/StreamPeerSSL.xml:30
+msgid ""
+"Connects to a peer using an underlying [StreamPeer] [code]stream[/code]. If "
+"[code]validate_certs[/code] is [code]true[/code], [StreamPeerSSL] will "
+"validate that the certificate presented by the peer matches the "
+"[code]for_hostname[/code].\n"
+"[b]Note:[/b] Specifying a custom [code]valid_certificate[/code] is not "
+"supported in HTML5 exports due to browsers restrictions."
+msgstr ""
+
+#: doc/classes/StreamPeerSSL.xml:37 doc/classes/StreamPeerTCP.xml:23
+msgid "Disconnects from host."
+msgstr ""
+
+#: doc/classes/StreamPeerSSL.xml:49
+msgid ""
+"Poll the connection to check for incoming bytes. Call this right before "
+"[method StreamPeer.get_available_bytes] for it to work properly."
+msgstr ""
+
+#: doc/classes/StreamPeerSSL.xml:59
+msgid "A status representing a [StreamPeerSSL] that is disconnected."
+msgstr ""
+
+#: doc/classes/StreamPeerSSL.xml:62
+msgid "A status representing a [StreamPeerSSL] during handshaking."
+msgstr ""
+
+#: doc/classes/StreamPeerSSL.xml:65
+msgid "A status representing a [StreamPeerSSL] that is connected to a host."
+msgstr ""
+
+#: doc/classes/StreamPeerSSL.xml:68
+msgid "A status representing a [StreamPeerSSL] in error state."
+msgstr ""
+
+#: doc/classes/StreamPeerSSL.xml:71
+msgid ""
+"An error status that shows a mismatch in the SSL certificate domain "
+"presented by the host and the domain requested for validation."
+msgstr ""
+
+#: doc/classes/StreamPeerTCP.xml:4
+msgid "TCP stream peer."
+msgstr ""
+
+#: doc/classes/StreamPeerTCP.xml:7
+msgid ""
+"TCP stream peer. This object can be used to connect to TCP servers, or also "
+"is returned by a TCP server."
+msgstr ""
+
+#: doc/classes/StreamPeerTCP.xml:17
+msgid ""
+"Connects to the specified [code]host:port[/code] pair. A hostname will be "
+"resolved if valid. Returns [constant OK] on success or [constant FAILED] on "
+"failure."
+msgstr ""
+
+#: doc/classes/StreamPeerTCP.xml:29
+msgid "Returns the IP of this peer."
+msgstr ""
+
+#: doc/classes/StreamPeerTCP.xml:35
+msgid "Returns the port of this peer."
+msgstr ""
+
+#: doc/classes/StreamPeerTCP.xml:41
+msgid "Returns the status of the connection, see [enum Status]."
+msgstr ""
+
+#: doc/classes/StreamPeerTCP.xml:47
+msgid ""
+"Returns [code]true[/code] if this peer is currently connected or is "
+"connecting to a host, [code]false[/code] otherwise."
+msgstr ""
+
+#: doc/classes/StreamPeerTCP.xml:54
+msgid ""
+"If [code]enabled[/code] is [code]true[/code], packets will be sent "
+"immediately. If [code]enabled[/code] is [code]false[/code] (the default), "
+"packet transfers will be delayed and combined using [url=https://en."
+"wikipedia.org/wiki/Nagle%27s_algorithm]Nagle's algorithm[/url].\n"
+"[b]Note:[/b] It's recommended to leave this disabled for applications that "
+"send large packets or need to transfer a lot of data, as enabling this can "
+"decrease the total available bandwidth."
+msgstr ""
+
+#: doc/classes/StreamPeerTCP.xml:61
+msgid ""
+"The initial status of the [StreamPeerTCP]. This is also the status after "
+"disconnecting."
+msgstr ""
+
+#: doc/classes/StreamPeerTCP.xml:64
+msgid "A status representing a [StreamPeerTCP] that is connecting to a host."
+msgstr ""
+
+#: doc/classes/StreamPeerTCP.xml:67
+msgid "A status representing a [StreamPeerTCP] that is connected to a host."
+msgstr ""
+
+#: doc/classes/StreamPeerTCP.xml:70
+msgid "A status representing a [StreamPeerTCP] in error state."
+msgstr ""
+
+#: doc/classes/StreamTexture.xml:4
+msgid "A [code].stex[/code] texture."
+msgstr ""
+
+#: doc/classes/StreamTexture.xml:7
+msgid "A texture that is loaded from a [code].stex[/code] file."
+msgstr ""
+
+#: doc/classes/StreamTexture.xml:16
+msgid "Loads the texture from the given path."
+msgstr ""
+
+#: doc/classes/StreamTexture.xml:23
+msgid "The StreamTexture's file path to a [code].stex[/code] file."
+msgstr ""
+
+#: doc/classes/String.xml:4
+msgid "Built-in string class."
+msgstr ""
+
+#: doc/classes/String.xml:7
+msgid ""
+"This is the built-in string class (and the one used by GDScript). It "
+"supports Unicode and provides all necessary means for string handling. "
+"Strings are reference-counted and use a copy-on-write approach, so passing "
+"them around is cheap in resources."
+msgstr ""
+
+#: doc/classes/String.xml:10
+msgid ""
+"https://docs.godotengine.org/en/3.4/getting_started/scripting/gdscript/"
+"gdscript_format_string.html"
+msgstr ""
+
+#: doc/classes/String.xml:17
+msgid "Constructs a new String from the given [bool]."
+msgstr ""
+
+#: doc/classes/String.xml:24
+msgid "Constructs a new String from the given [int]."
+msgstr ""
+
+#: doc/classes/String.xml:31
+msgid "Constructs a new String from the given [float]."
+msgstr ""
+
+#: doc/classes/String.xml:38
+msgid "Constructs a new String from the given [Vector2]."
+msgstr ""
+
+#: doc/classes/String.xml:45
+msgid "Constructs a new String from the given [Rect2]."
+msgstr ""
+
+#: doc/classes/String.xml:52
+msgid "Constructs a new String from the given [Vector3]."
+msgstr ""
+
+#: doc/classes/String.xml:59
+msgid "Constructs a new String from the given [Transform2D]."
+msgstr ""
+
+#: doc/classes/String.xml:66
+msgid "Constructs a new String from the given [Plane]."
+msgstr ""
+
+#: doc/classes/String.xml:73
+msgid "Constructs a new String from the given [Quat]."
+msgstr ""
+
+#: doc/classes/String.xml:80
+msgid "Constructs a new String from the given [AABB]."
+msgstr ""
+
+#: doc/classes/String.xml:87
+msgid "Constructs a new String from the given [Basis]."
+msgstr ""
+
+#: doc/classes/String.xml:94
+msgid "Constructs a new String from the given [Transform]."
+msgstr ""
+
+#: doc/classes/String.xml:101
+msgid "Constructs a new String from the given [Color]."
+msgstr ""
+
+#: doc/classes/String.xml:108
+msgid "Constructs a new String from the given [NodePath]."
+msgstr ""
+
+#: doc/classes/String.xml:115
+msgid "Constructs a new String from the given [RID]."
+msgstr ""
+
+#: doc/classes/String.xml:122
+msgid "Constructs a new String from the given [Dictionary]."
+msgstr ""
+
+#: doc/classes/String.xml:129
+msgid "Constructs a new String from the given [Array]."
+msgstr ""
+
+#: doc/classes/String.xml:136
+msgid "Constructs a new String from the given [PoolByteArray]."
+msgstr ""
+
+#: doc/classes/String.xml:143
+msgid "Constructs a new String from the given [PoolIntArray]."
+msgstr ""
+
+#: doc/classes/String.xml:150
+msgid "Constructs a new String from the given [PoolRealArray]."
+msgstr ""
+
+#: doc/classes/String.xml:157
+msgid "Constructs a new String from the given [PoolStringArray]."
+msgstr ""
+
+#: doc/classes/String.xml:164
+msgid "Constructs a new String from the given [PoolVector2Array]."
+msgstr ""
+
+#: doc/classes/String.xml:171
+msgid "Constructs a new String from the given [PoolVector3Array]."
+msgstr ""
+
+#: doc/classes/String.xml:178
+msgid "Constructs a new String from the given [PoolColorArray]."
+msgstr ""
+
+#: doc/classes/String.xml:185
+msgid "Returns [code]true[/code] if the string begins with the given string."
+msgstr ""
+
+#: doc/classes/String.xml:191
+msgid "Returns the bigrams (pairs of consecutive letters) of this string."
+msgstr ""
+
+#: doc/classes/String.xml:197
+msgid ""
+"Returns a copy of the string with special characters escaped using the C "
+"language standard."
+msgstr ""
+
+#: doc/classes/String.xml:203
+msgid ""
+"Returns a copy of the string with escaped characters replaced by their "
+"meanings. Supported escape sequences are [code]\\'[/code], [code]\\\"[/"
+"code], [code]\\?[/code], [code]\\\\[/code], [code]\\a[/code], [code]\\b[/"
+"code], [code]\\f[/code], [code]\\n[/code], [code]\\r[/code], [code]\\t[/"
+"code], [code]\\v[/code].\n"
+"[b]Note:[/b] Unlike the GDScript parser, this method doesn't support the "
+"[code]\\uXXXX[/code] escape sequence."
+msgstr ""
+
+#: doc/classes/String.xml:210
+msgid ""
+"Changes the case of some letters. Replaces underscores with spaces, adds "
+"spaces before in-word uppercase characters, converts all letters to "
+"lowercase, then capitalizes the first letter and every letter following a "
+"space character. For [code]capitalize camelCase mixed_with_underscores[/"
+"code], it will return [code]Capitalize Camel Case Mixed With Underscores[/"
+"code]."
+msgstr ""
+
+#: doc/classes/String.xml:217
+msgid ""
+"Performs a case-sensitive comparison to another string. Returns [code]-1[/"
+"code] if less than, [code]1[/code] if greater than, or [code]0[/code] if "
+"equal. \"less than\" or \"greater than\" are determined by the [url=https://"
+"en.wikipedia.org/wiki/List_of_Unicode_characters]Unicode code points[/url] "
+"of each string, which roughly matches the alphabetical order.\n"
+"[b]Behavior with different string lengths:[/b] Returns [code]1[/code] if the "
+"\"base\" string is longer than the [code]to[/code] string or [code]-1[/code] "
+"if the \"base\" string is shorter than the [code]to[/code] string. Keep in "
+"mind this length is determined by the number of Unicode codepoints, [i]not[/"
+"i] the actual visible characters.\n"
+"[b]Behavior with empty strings:[/b] Returns [code]-1[/code] if the \"base\" "
+"string is empty, [code]1[/code] if the [code]to[/code] string is empty or "
+"[code]0[/code] if both strings are empty.\n"
+"To get a boolean result from a string comparison, use the [code]==[/code] "
+"operator instead. See also [method nocasecmp_to]."
+msgstr ""
+
+#: doc/classes/String.xml:229
+msgid ""
+"Returns the number of occurrences of substring [code]what[/code] between "
+"[code]from[/code] and [code]to[/code] positions. If [code]from[/code] and "
+"[code]to[/code] equals 0 the whole string will be used. If only [code]to[/"
+"code] equals 0 the remained substring will be used."
+msgstr ""
+
+#: doc/classes/String.xml:238
+msgid ""
+"Returns the number of occurrences of substring [code]what[/code] (ignoring "
+"case) between [code]from[/code] and [code]to[/code] positions. If "
+"[code]from[/code] and [code]to[/code] equals 0 the whole string will be "
+"used. If only [code]to[/code] equals 0 the remained substring will be used."
+msgstr ""
+
+#: doc/classes/String.xml:244
+msgid ""
+"Returns a copy of the string with indentation (leading tabs and spaces) "
+"removed."
+msgstr ""
+
+#: doc/classes/String.xml:250
+msgid ""
+"Returns [code]true[/code] if the length of the string equals [code]0[/code]."
+msgstr ""
+
+#: doc/classes/String.xml:257
+msgid "Returns [code]true[/code] if the string ends with the given string."
+msgstr ""
+
+#: doc/classes/String.xml:264
+msgid ""
+"Erases [code]chars[/code] characters from the string starting from "
+"[code]position[/code]."
+msgstr ""
+
+#: doc/classes/String.xml:272
+msgid ""
+"Finds the first occurrence of a substring. Returns the starting position of "
+"the substring or [code]-1[/code] if not found. Optionally, the initial "
+"search index can be passed.\n"
+"[b]Note:[/b] If you just want to know whether a string contains a substring, "
+"use the [code]in[/code] operator as follows:\n"
+"[codeblock]\n"
+"# Will evaluate to `false`.\n"
+"if \"i\" in \"team\":\n"
+" pass\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/String.xml:285
+msgid ""
+"Finds the last occurrence of a substring. Returns the starting position of "
+"the substring or [code]-1[/code] if not found."
+msgstr ""
+
+#: doc/classes/String.xml:293
+msgid ""
+"Finds the first occurrence of a substring, ignoring case. Returns the "
+"starting position of the substring or [code]-1[/code] if not found. "
+"Optionally, the initial search index can be passed."
+msgstr ""
+
+#: doc/classes/String.xml:301
+msgid ""
+"Formats the string by replacing all occurrences of [code]placeholder[/code] "
+"with [code]values[/code]."
+msgstr ""
+
+#: doc/classes/String.xml:307
+msgid "If the string is a valid file path, returns the base directory name."
+msgstr ""
+
+#: doc/classes/String.xml:313
+msgid ""
+"If the string is a valid file path, returns the full file path without the "
+"extension."
+msgstr ""
+
+#: doc/classes/String.xml:319
+msgid ""
+"Returns the extension without the leading period character ([code].[/code]) "
+"if the string is a valid file name or path. If the string does not contain "
+"an extension, returns an empty string instead.\n"
+"[codeblock]\n"
+"print(\"/path/to/file.txt\".get_extension()) # \"txt\"\n"
+"print(\"file.txt\".get_extension()) # \"txt\"\n"
+"print(\"file.sample.txt\".get_extension()) # \"txt\"\n"
+"print(\".txt\".get_extension()) # \"txt\"\n"
+"print(\"file.txt.\".get_extension()) # \"\" (empty string)\n"
+"print(\"file.txt..\".get_extension()) # \"\" (empty string)\n"
+"print(\"txt\".get_extension()) # \"\" (empty string)\n"
+"print(\"\".get_extension()) # \"\" (empty string)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/String.xml:335
+msgid "If the string is a valid file path, returns the filename."
+msgstr ""
+
+#: doc/classes/String.xml:341
+msgid "Hashes the string and returns a 32-bit integer."
+msgstr ""
+
+#: doc/classes/String.xml:347
+msgid ""
+"Converts a string containing a hexadecimal number into an integer. "
+"Hexadecimal strings are expected to be prefixed with \"[code]0x[/code]\" "
+"otherwise [code]0[/code] is returned.\n"
+"[codeblock]\n"
+"print(\"0xff\".hex_to_int()) # Print \"255\"\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/String.xml:356
+msgid ""
+"Escapes (encodes) a string to URL friendly format. Also referred to as 'URL "
+"encode'.\n"
+"[codeblock]\n"
+"print(\"https://example.org/?escaped=\" + \"Godot Engine:'docs'\"."
+"http_escape())\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/String.xml:365
+msgid ""
+"Unescapes (decodes) a string in URL encoded format. Also referred to as 'URL "
+"decode'.\n"
+"[codeblock]\n"
+"print(\"https://example.org/?escaped=\" + \"Godot%20Engine%3A%27docs%27\"."
+"http_unescape())\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/String.xml:375
+msgid ""
+"Converts [code]size[/code] represented as number of bytes to human-readable "
+"format using internationalized set of data size units, namely: B, KiB, MiB, "
+"GiB, TiB, PiB, EiB. Note that the next smallest unit is picked automatically "
+"to hold at most 1024 units.\n"
+"[codeblock]\n"
+"var bytes = 133790307\n"
+"var size = String.humanize_size(bytes)\n"
+"print(size) # prints \"127.5 MiB\"\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/String.xml:388
+msgid ""
+"Returns a copy of the string with the substring [code]what[/code] inserted "
+"at the given position."
+msgstr ""
+
+#: doc/classes/String.xml:394
+msgid ""
+"If the string is a path to a file or directory, returns [code]true[/code] if "
+"the path is absolute."
+msgstr ""
+
+#: doc/classes/String.xml:400
+msgid ""
+"If the string is a path to a file or directory, returns [code]true[/code] if "
+"the path is relative."
+msgstr ""
+
+#: doc/classes/String.xml:407
+msgid ""
+"Returns [code]true[/code] if this string is a subsequence of the given "
+"string."
+msgstr ""
+
+#: doc/classes/String.xml:414
+msgid ""
+"Returns [code]true[/code] if this string is a subsequence of the given "
+"string, without considering case."
+msgstr ""
+
+#: doc/classes/String.xml:420
+msgid ""
+"Returns [code]true[/code] if this string is free from characters that aren't "
+"allowed in file names, those being:\n"
+"[code]: / \\ ? * \" | % < >[/code]"
+msgstr ""
+
+#: doc/classes/String.xml:427
+msgid "Returns [code]true[/code] if this string contains a valid float."
+msgstr ""
+
+#: doc/classes/String.xml:434
+msgid ""
+"Returns [code]true[/code] if this string contains a valid hexadecimal "
+"number. If [code]with_prefix[/code] is [code]true[/code], then a validity of "
+"the hexadecimal number is determined by [code]0x[/code] prefix, for "
+"instance: [code]0xDEADC0DE[/code]."
+msgstr ""
+
+#: doc/classes/String.xml:440
+msgid ""
+"Returns [code]true[/code] if this string contains a valid color in "
+"hexadecimal HTML notation. Other HTML notations such as named colors or "
+"[code]hsl()[/code] colors aren't considered valid by this method and will "
+"return [code]false[/code]."
+msgstr ""
+
+#: doc/classes/String.xml:446
+msgid ""
+"Returns [code]true[/code] if this string is a valid identifier. A valid "
+"identifier may contain only letters, digits and underscores ([code]_[/code]) "
+"and the first character may not be a digit."
+msgstr ""
+
+#: doc/classes/String.xml:452
+msgid "Returns [code]true[/code] if this string contains a valid integer."
+msgstr ""
+
+#: doc/classes/String.xml:458
+msgid ""
+"Returns [code]true[/code] if this string contains only a well-formatted IPv4 "
+"or IPv6 address. This method considers [url=https://en.wikipedia.org/wiki/"
+"Reserved_IP_addresses]reserved IP addresses[/url] such as [code]0.0.0.0[/"
+"code] as valid."
+msgstr ""
+
+#: doc/classes/String.xml:464
+msgid ""
+"Returns a copy of the string with special characters escaped using the JSON "
+"standard."
+msgstr ""
+
+#: doc/classes/String.xml:471
+msgid "Returns a number of characters from the left of the string."
+msgstr ""
+
+#: doc/classes/String.xml:477
+msgid "Returns the string's amount of characters."
+msgstr ""
+
+#: doc/classes/String.xml:484
+msgid ""
+"Returns a copy of the string with characters removed from the left. The "
+"[code]chars[/code] argument is a string specifying the set of characters to "
+"be removed.\n"
+"[b]Note:[/b] The [code]chars[/code] is not a prefix. See [method "
+"trim_prefix] method that will remove a single prefix string rather than a "
+"set of characters."
+msgstr ""
+
+#: doc/classes/String.xml:492
+msgid ""
+"Does a simple case-sensitive expression match, where [code]\"*\"[/code] "
+"matches zero or more arbitrary characters and [code]\"?\"[/code] matches any "
+"single character except a period ([code]\".\"[/code])."
+msgstr ""
+
+#: doc/classes/String.xml:499
+msgid ""
+"Does a simple case-insensitive expression match, where [code]\"*\"[/code] "
+"matches zero or more arbitrary characters and [code]\"?\"[/code] matches any "
+"single character except a period ([code]\".\"[/code])."
+msgstr ""
+
+#: doc/classes/String.xml:505
+msgid "Returns the MD5 hash of the string as an array of bytes."
+msgstr ""
+
+#: doc/classes/String.xml:511
+msgid "Returns the MD5 hash of the string as a string."
+msgstr ""
+
+#: doc/classes/String.xml:518
+msgid ""
+"Performs a case-insensitive [i]natural order[/i] comparison to another "
+"string. Returns [code]-1[/code] if less than, [code]1[/code] if greater "
+"than, or [code]0[/code] if equal. \"less than\" or \"greater than\" are "
+"determined by the [url=https://en.wikipedia.org/wiki/"
+"List_of_Unicode_characters]Unicode code points[/url] of each string, which "
+"roughly matches the alphabetical order. Internally, lowercase characters "
+"will be converted to uppercase during the comparison.\n"
+"When used for sorting, natural order comparison will order suites of numbers "
+"as expected by most people. If you sort the numbers from 1 to 10 using "
+"natural order, you will get [code][1, 2, 3, ...][/code] instead of [code][1, "
+"10, 2, 3, ...][/code].\n"
+"[b]Behavior with different string lengths:[/b] Returns [code]1[/code] if the "
+"\"base\" string is longer than the [code]to[/code] string or [code]-1[/code] "
+"if the \"base\" string is shorter than the [code]to[/code] string. Keep in "
+"mind this length is determined by the number of Unicode codepoints, [i]not[/"
+"i] the actual visible characters.\n"
+"[b]Behavior with empty strings:[/b] Returns [code]-1[/code] if the \"base\" "
+"string is empty, [code]1[/code] if the [code]to[/code] string is empty or "
+"[code]0[/code] if both strings are empty.\n"
+"To get a boolean result from a string comparison, use the [code]==[/code] "
+"operator instead. See also [method nocasecmp_to] and [method casecmp_to]."
+msgstr ""
+
+#: doc/classes/String.xml:529
+msgid ""
+"Performs a case-insensitive comparison to another string. Returns [code]-1[/"
+"code] if less than, [code]1[/code] if greater than, or [code]0[/code] if "
+"equal. \"less than\" or \"greater than\" are determined by the [url=https://"
+"en.wikipedia.org/wiki/List_of_Unicode_characters]Unicode code points[/url] "
+"of each string, which roughly matches the alphabetical order. Internally, "
+"lowercase characters will be converted to uppercase during the comparison.\n"
+"[b]Behavior with different string lengths:[/b] Returns [code]1[/code] if the "
+"\"base\" string is longer than the [code]to[/code] string or [code]-1[/code] "
+"if the \"base\" string is shorter than the [code]to[/code] string. Keep in "
+"mind this length is determined by the number of Unicode codepoints, [i]not[/"
+"i] the actual visible characters.\n"
+"[b]Behavior with empty strings:[/b] Returns [code]-1[/code] if the \"base\" "
+"string is empty, [code]1[/code] if the [code]to[/code] string is empty or "
+"[code]0[/code] if both strings are empty.\n"
+"To get a boolean result from a string comparison, use the [code]==[/code] "
+"operator instead. See also [method casecmp_to]."
+msgstr ""
+
+#: doc/classes/String.xml:539
+msgid "Returns the character code at position [code]at[/code]."
+msgstr ""
+
+#: doc/classes/String.xml:546
+msgid ""
+"Formats a number to have an exact number of [code]digits[/code] after the "
+"decimal point."
+msgstr ""
+
+#: doc/classes/String.xml:553
+msgid ""
+"Formats a number to have an exact number of [code]digits[/code] before the "
+"decimal point."
+msgstr ""
+
+#: doc/classes/String.xml:559
+msgid "Decode a percent-encoded string. See [method percent_encode]."
+msgstr ""
+
+#: doc/classes/String.xml:565
+msgid ""
+"Percent-encodes a string. Encodes parameters in a URL when sending a HTTP "
+"GET request (and bodies of form-urlencoded POST requests)."
+msgstr ""
+
+#: doc/classes/String.xml:572
+msgid ""
+"If the string is a path, this concatenates [code]file[/code] at the end of "
+"the string as a subpath. E.g. [code]\"this/is\".plus_file(\"path\") == "
+"\"this/is/path\"[/code]."
+msgstr ""
+
+#: doc/classes/String.xml:579
+msgid ""
+"Returns original string repeated a number of times. The number of "
+"repetitions is given by the argument."
+msgstr ""
+
+#: doc/classes/String.xml:587
+msgid ""
+"Replaces occurrences of a case-sensitive substring with the given one inside "
+"the string."
+msgstr ""
+
+#: doc/classes/String.xml:595
+msgid ""
+"Replaces occurrences of a case-insensitive substring with the given one "
+"inside the string."
+msgstr ""
+
+#: doc/classes/String.xml:603
+msgid ""
+"Performs a case-sensitive search for a substring, but starts from the end of "
+"the string instead of the beginning."
+msgstr ""
+
+#: doc/classes/String.xml:611
+msgid ""
+"Performs a case-insensitive search for a substring, but starts from the end "
+"of the string instead of the beginning."
+msgstr ""
+
+#: doc/classes/String.xml:618
+msgid "Returns the right side of the string from a given position."
+msgstr ""
+
+#: doc/classes/String.xml:627
+msgid ""
+"Splits the string by a [code]delimiter[/code] string and returns an array of "
+"the substrings, starting from right.\n"
+"The splits in the returned array are sorted in the same order as the "
+"original string, from left to right.\n"
+"If [code]maxsplit[/code] is specified, it defines the number of splits to do "
+"from the right up to [code]maxsplit[/code]. The default value of 0 means "
+"that all items are split, thus giving the same result as [method split].\n"
+"Example:\n"
+"[codeblock]\n"
+"var some_string = \"One,Two,Three,Four\"\n"
+"var some_array = some_string.rsplit(\",\", true, 1)\n"
+"print(some_array.size()) # Prints 2\n"
+"print(some_array[0]) # Prints \"Four\"\n"
+"print(some_array[1]) # Prints \"Three,Two,One\"\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/String.xml:644
+msgid ""
+"Returns a copy of the string with characters removed from the right. The "
+"[code]chars[/code] argument is a string specifying the set of characters to "
+"be removed.\n"
+"[b]Note:[/b] The [code]chars[/code] is not a suffix. See [method "
+"trim_suffix] method that will remove a single suffix string rather than a "
+"set of characters."
+msgstr ""
+
+#: doc/classes/String.xml:651
+msgid "Returns the SHA-1 hash of the string as an array of bytes."
+msgstr ""
+
+#: doc/classes/String.xml:657
+msgid "Returns the SHA-1 hash of the string as a string."
+msgstr ""
+
+#: doc/classes/String.xml:663
+msgid "Returns the SHA-256 hash of the string as an array of bytes."
+msgstr ""
+
+#: doc/classes/String.xml:669
+msgid "Returns the SHA-256 hash of the string as a string."
+msgstr ""
+
+#: doc/classes/String.xml:676
+msgid ""
+"Returns the similarity index of the text compared to this string. 1 means "
+"totally similar and 0 means totally dissimilar."
+msgstr ""
+
+#: doc/classes/String.xml:682
+msgid "Returns a simplified canonical path."
+msgstr ""
+
+#: doc/classes/String.xml:691
+msgid ""
+"Splits the string by a [code]delimiter[/code] string and returns an array of "
+"the substrings. The [code]delimiter[/code] can be of any length.\n"
+"If [code]maxsplit[/code] is specified, it defines the number of splits to do "
+"from the left up to [code]maxsplit[/code]. The default value of [code]0[/"
+"code] means that all items are split.\n"
+"Example:\n"
+"[codeblock]\n"
+"var some_string = \"One,Two,Three,Four\"\n"
+"var some_array = some_string.split(\",\", true, 1)\n"
+"print(some_array.size()) # Prints 2\n"
+"print(some_array[0]) # Prints \"One\"\n"
+"print(some_array[1]) # Prints \"Two,Three,Four\"\n"
+"[/codeblock]\n"
+"If you need to split strings with more complex rules, use the [RegEx] class "
+"instead."
+msgstr ""
+
+#: doc/classes/String.xml:709
+msgid ""
+"Splits the string in floats by using a delimiter string and returns an array "
+"of the substrings.\n"
+"For example, [code]\"1,2.5,3\"[/code] will return [code][1,2.5,3][/code] if "
+"split by [code]\",\"[/code]."
+msgstr ""
+
+#: doc/classes/String.xml:718
+msgid ""
+"Returns a copy of the string stripped of any non-printable character "
+"(including tabulations, spaces and line breaks) at the beginning and the "
+"end. The optional arguments are used to toggle stripping on the left and "
+"right edges respectively."
+msgstr ""
+
+#: doc/classes/String.xml:724
+msgid ""
+"Returns a copy of the string stripped of any escape character. These include "
+"all non-printable control characters of the first page of the ASCII table (< "
+"32), such as tabulation ([code]\\t[/code] in C) and newline ([code]\\n[/"
+"code] and [code]\\r[/code]) characters, but not spaces."
+msgstr ""
+
+#: doc/classes/String.xml:732
+msgid ""
+"Returns part of the string from the position [code]from[/code] with length "
+"[code]len[/code]. Argument [code]len[/code] is optional and using [code]-1[/"
+"code] will return remaining characters from given position."
+msgstr ""
+
+#: doc/classes/String.xml:738
+msgid ""
+"Converts the String (which is a character array) to [PoolByteArray] (which "
+"is an array of bytes). The conversion is faster compared to [method "
+"to_utf8], as this method assumes that all the characters in the String are "
+"ASCII characters."
+msgstr ""
+
+#: doc/classes/String.xml:744
+msgid ""
+"Converts a string containing a decimal number into a [code]float[/code]."
+msgstr ""
+
+#: doc/classes/String.xml:750
+msgid ""
+"Converts a string containing an integer number into an [code]int[/code]."
+msgstr ""
+
+#: doc/classes/String.xml:756
+msgid "Returns the string converted to lowercase."
+msgstr ""
+
+#: doc/classes/String.xml:762
+msgid "Returns the string converted to uppercase."
+msgstr ""
+
+#: doc/classes/String.xml:768
+msgid ""
+"Converts the String (which is an array of characters) to [PoolByteArray] "
+"(which is an array of bytes). The conversion is a bit slower than [method "
+"to_ascii], but supports all UTF-8 characters. Therefore, you should prefer "
+"this function over [method to_ascii]."
+msgstr ""
+
+#: doc/classes/String.xml:774
+msgid ""
+"Converts the String (which is an array of characters) to [PoolByteArray] "
+"(which is an array of bytes)."
+msgstr ""
+
+#: doc/classes/String.xml:781
+msgid ""
+"Removes a given string from the start if it starts with it or leaves the "
+"string unchanged."
+msgstr ""
+
+#: doc/classes/String.xml:788
+msgid ""
+"Removes a given string from the end if it ends with it or leaves the string "
+"unchanged."
+msgstr ""
+
+#: doc/classes/String.xml:794
+msgid ""
+"Removes any characters from the string that are prohibited in [Node] names "
+"([code].[/code] [code]:[/code] [code]@[/code] [code]/[/code] [code]\"[/"
+"code])."
+msgstr ""
+
+#: doc/classes/String.xml:800
+msgid ""
+"Returns a copy of the string with special characters escaped using the XML "
+"standard."
+msgstr ""
+
+#: doc/classes/String.xml:806
+msgid ""
+"Returns a copy of the string with escaped characters replaced by their "
+"meanings according to the XML standard."
+msgstr ""
+
+#: doc/classes/StyleBox.xml:4
+msgid "Base class for drawing stylized boxes for the UI."
+msgstr ""
+
+#: doc/classes/StyleBox.xml:7
+msgid ""
+"StyleBox is [Resource] that provides an abstract base class for drawing "
+"stylized boxes for the UI. StyleBoxes are used for drawing the styles of "
+"buttons, line edit backgrounds, tree backgrounds, etc. and also for testing "
+"a transparency mask for pointer signals. If mask test fails on a StyleBox "
+"assigned as mask to a control, clicks and motion signals will go through it "
+"to the one below.\n"
+"[b]Note:[/b] For children of [Control] that have [i]Theme Properties[/i], "
+"the [code]focus[/code] [StyleBox] is displayed over the [code]normal[/code], "
+"[code]hover[/code] or [code]pressed[/code] [StyleBox]. This makes the "
+"[code]focus[/code] [StyleBox] more reusable across different nodes."
+msgstr ""
+
+#: doc/classes/StyleBox.xml:18
+msgid ""
+"Draws this stylebox using a [CanvasItem] with given [RID].\n"
+"You can get a [RID] value using [method Object.get_instance_id] on a "
+"[CanvasItem]-derived node."
+msgstr ""
+
+#: doc/classes/StyleBox.xml:25
+msgid "Returns the size of this [StyleBox] without the margins."
+msgstr ""
+
+#: doc/classes/StyleBox.xml:31
+msgid ""
+"Returns the [CanvasItem] that handles its [constant CanvasItem."
+"NOTIFICATION_DRAW] or [method CanvasItem._draw] callback at this moment."
+msgstr ""
+
+#: doc/classes/StyleBox.xml:38
+msgid "Returns the default value of the specified [enum Margin]."
+msgstr ""
+
+#: doc/classes/StyleBox.xml:45
+msgid ""
+"Returns the content margin offset for the specified [enum Margin].\n"
+"Positive values reduce size inwards, unlike [Control]'s margin values."
+msgstr ""
+
+#: doc/classes/StyleBox.xml:52
+msgid "Returns the minimum size that this stylebox can be shrunk to."
+msgstr ""
+
+#: doc/classes/StyleBox.xml:58
+msgid ""
+"Returns the \"offset\" of a stylebox. This helper function returns a value "
+"equivalent to [code]Vector2(style.get_margin(MARGIN_LEFT), style."
+"get_margin(MARGIN_TOP))[/code]."
+msgstr ""
+
+#: doc/classes/StyleBox.xml:66
+msgid ""
+"Sets the default value of the specified [enum Margin] to given [code]offset[/"
+"code] in pixels."
+msgstr ""
+
+#: doc/classes/StyleBox.xml:74
+msgid "Test a position in a rectangle, return whether it passes the mask test."
+msgstr ""
+
+#: doc/classes/StyleBox.xml:80
+msgid ""
+"The bottom margin for the contents of this style box. Increasing this value "
+"reduces the space available to the contents from the bottom.\n"
+"If this value is negative, it is ignored and a child-specific margin is used "
+"instead. For example for [StyleBoxFlat] the border thickness (if any) is "
+"used instead.\n"
+"It is up to the code using this style box to decide what these contents are: "
+"for example, a [Button] respects this content margin for the textual "
+"contents of the button.\n"
+"[method get_margin] should be used to fetch this value as consumer instead "
+"of reading these properties directly. This is because it correctly respects "
+"negative values and the fallback mentioned above."
+msgstr ""
+
+#: doc/classes/StyleBox.xml:86
+msgid ""
+"The left margin for the contents of this style box.Increasing this value "
+"reduces the space available to the contents from the left.\n"
+"Refer to [member content_margin_bottom] for extra considerations."
+msgstr ""
+
+#: doc/classes/StyleBox.xml:90
+msgid ""
+"The right margin for the contents of this style box. Increasing this value "
+"reduces the space available to the contents from the right.\n"
+"Refer to [member content_margin_bottom] for extra considerations."
+msgstr ""
+
+#: doc/classes/StyleBox.xml:94
+msgid ""
+"The top margin for the contents of this style box. Increasing this value "
+"reduces the space available to the contents from the top.\n"
+"Refer to [member content_margin_bottom] for extra considerations."
+msgstr ""
+
+#: doc/classes/StyleBoxEmpty.xml:4
+msgid "Empty stylebox (does not display anything)."
+msgstr ""
+
+#: doc/classes/StyleBoxEmpty.xml:7
+msgid "Empty stylebox (really does not display anything)."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:4
+msgid ""
+"Customizable [StyleBox] with a given set of parameters (no texture required)."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:7
+msgid ""
+"This [StyleBox] can be used to achieve all kinds of looks without the need "
+"of a texture. The following properties are customizable:\n"
+"- Color\n"
+"- Border width (individual width for each border)\n"
+"- Rounded corners (individual radius for each corner)\n"
+"- Shadow (with blur and offset)\n"
+"Setting corner radius to high values is allowed. As soon as corners overlap, "
+"the stylebox will switch to a relative system. Example:\n"
+"[codeblock]\n"
+"height = 30\n"
+"corner_radius_top_left = 50\n"
+"corner_radius_bottom_left = 100\n"
+"[/codeblock]\n"
+"The relative system now would take the 1:2 ratio of the two left corners to "
+"calculate the actual corner width. Both corners added will [b]never[/b] be "
+"more than the height. Result:\n"
+"[codeblock]\n"
+"corner_radius_top_left: 10\n"
+"corner_radius_bottom_left: 20\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:31
+msgid ""
+"Returns the given [code]margin[/code]'s border width. See [enum Margin] for "
+"possible values."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:37
+msgid "Returns the smallest border width out of all four borders."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:44
+msgid ""
+"Returns the given [code]corner[/code]'s radius. See [enum Corner] for "
+"possible values."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:51 doc/classes/StyleBoxTexture.xml:16
+msgid ""
+"Returns the size of the given [code]margin[/code]'s expand margin. See [enum "
+"Margin] for possible values."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:59
+msgid ""
+"Sets the border width to [code]width[/code] pixels for the given "
+"[code]margin[/code]. See [enum Margin] for possible values."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:66
+msgid "Sets the border width to [code]width[/code] pixels for all margins."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:74
+msgid ""
+"Sets the corner radius to [code]radius[/code] pixels for the given "
+"[code]corner[/code]. See [enum Corner] for possible values."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:81
+msgid "Sets the corner radius to [code]radius[/code] pixels for all corners."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:91
+msgid ""
+"Sets the corner radius for each corner to [code]radius_top_left[/code], "
+"[code]radius_top_right[/code], [code]radius_bottom_right[/code], and "
+"[code]radius_bottom_left[/code] pixels."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:99 doc/classes/StyleBoxTexture.xml:48
+msgid ""
+"Sets the expand margin to [code]size[/code] pixels for the given "
+"[code]margin[/code]. See [enum Margin] for possible values."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:106 doc/classes/StyleBoxTexture.xml:30
+msgid "Sets the expand margin to [code]size[/code] pixels for all margins."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:116 doc/classes/StyleBoxTexture.xml:40
+msgid ""
+"Sets the expand margin for each margin to [code]size_left[/code], "
+"[code]size_top[/code], [code]size_right[/code], and [code]size_bottom[/code] "
+"pixels."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:122
+msgid ""
+"Antialiasing draws a small ring around the edges, which fades to "
+"transparency. As a result, edges look much smoother. This is only noticeable "
+"when using rounded corners.\n"
+"[b]Note:[/b] When using beveled corners with 45-degree angles ([member "
+"corner_detail] = 1), it is recommended to set [member anti_aliasing] to "
+"[code]false[/code] to ensure crisp visuals and avoid possible visual "
+"glitches."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:126
+msgid ""
+"This changes the size of the faded ring. Higher values can be used to "
+"achieve a \"blurry\" effect."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:129
+msgid "The background color of the stylebox."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:132
+msgid "If [code]true[/code], the border will fade into the background color."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:135
+msgid "Sets the color of the border."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:138
+msgid "Border width for the bottom border."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:141
+msgid "Border width for the left border."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:144
+msgid "Border width for the right border."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:147
+msgid "Border width for the top border."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:150
+msgid ""
+"This sets the number of vertices used for each corner. Higher values result "
+"in rounder corners but take more processing power to compute. When choosing "
+"a value, you should take the corner radius ([method set_corner_radius_all]) "
+"into account.\n"
+"For corner radii less than 10, [code]4[/code] or [code]5[/code] should be "
+"enough. For corner radii less than 30, values between [code]8[/code] and "
+"[code]12[/code] should be enough.\n"
+"A corner detail of [code]1[/code] will result in chamfered corners instead "
+"of rounded corners, which is useful for some artistic effects."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:155
+msgid ""
+"The bottom-left corner's radius. If [code]0[/code], the corner is not "
+"rounded."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:158
+msgid ""
+"The bottom-right corner's radius. If [code]0[/code], the corner is not "
+"rounded."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:161
+msgid ""
+"The top-left corner's radius. If [code]0[/code], the corner is not rounded."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:164
+msgid ""
+"The top-right corner's radius. If [code]0[/code], the corner is not rounded."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:167
+msgid "Toggles drawing of the inner part of the stylebox."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:170
+msgid ""
+"Expands the stylebox outside of the control rect on the bottom edge. Useful "
+"in combination with [member border_width_bottom] to draw a border outside "
+"the control rect."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:173
+msgid ""
+"Expands the stylebox outside of the control rect on the left edge. Useful in "
+"combination with [member border_width_left] to draw a border outside the "
+"control rect."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:176
+msgid ""
+"Expands the stylebox outside of the control rect on the right edge. Useful "
+"in combination with [member border_width_right] to draw a border outside the "
+"control rect."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:179
+msgid ""
+"Expands the stylebox outside of the control rect on the top edge. Useful in "
+"combination with [member border_width_top] to draw a border outside the "
+"control rect."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:182
+msgid ""
+"The color of the shadow. This has no effect if [member shadow_size] is lower "
+"than 1."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:185
+msgid ""
+"The shadow offset in pixels. Adjusts the position of the shadow relatively "
+"to the stylebox."
+msgstr ""
+
+#: doc/classes/StyleBoxFlat.xml:188
+msgid "The shadow size in pixels."
+msgstr ""
+
+#: doc/classes/StyleBoxLine.xml:4
+msgid "[StyleBox] that displays a single line."
+msgstr ""
+
+#: doc/classes/StyleBoxLine.xml:7
+msgid ""
+"[StyleBox] that displays a single line of a given color and thickness. It "
+"can be used to draw things like separators."
+msgstr ""
+
+#: doc/classes/StyleBoxLine.xml:15
+msgid "The line's color."
+msgstr ""
+
+#: doc/classes/StyleBoxLine.xml:18
+msgid ""
+"The number of pixels the line will extend before the [StyleBoxLine]'s "
+"bounds. If set to a negative value, the line will begin inside the "
+"[StyleBoxLine]'s bounds."
+msgstr ""
+
+#: doc/classes/StyleBoxLine.xml:21
+msgid ""
+"The number of pixels the line will extend past the [StyleBoxLine]'s bounds. "
+"If set to a negative value, the line will end inside the [StyleBoxLine]'s "
+"bounds."
+msgstr ""
+
+#: doc/classes/StyleBoxLine.xml:24
+msgid "The line's thickness in pixels."
+msgstr ""
+
+#: doc/classes/StyleBoxLine.xml:27
+msgid ""
+"If [code]true[/code], the line will be vertical. If [code]false[/code], the "
+"line will be horizontal."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:4
+msgid "Texture-based nine-patch [StyleBox]."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:7
+msgid ""
+"Texture-based nine-patch [StyleBox], in a way similar to [NinePatchRect]. "
+"This stylebox performs a 3×3 scaling of a texture, where only the center "
+"cell is fully stretched. This makes it possible to design bordered styles "
+"regardless of the stylebox's size."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:23
+msgid ""
+"Returns the size of the given [code]margin[/code]. See [enum Margin] for "
+"possible values."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:56
+msgid ""
+"Sets the margin to [code]size[/code] pixels for the given [code]margin[/"
+"code]. See [enum Margin] for possible values."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:62
+msgid ""
+"Controls how the stylebox's texture will be stretched or tiled horizontally. "
+"See [enum AxisStretchMode] for possible values."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:65
+msgid ""
+"Controls how the stylebox's texture will be stretched or tiled vertically. "
+"See [enum AxisStretchMode] for possible values."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:68
+msgid ""
+"If [code]true[/code], the nine-patch texture's center tile will be drawn."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:71
+msgid ""
+"Expands the bottom margin of this style box when drawing, causing it to be "
+"drawn larger than requested."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:74
+msgid ""
+"Expands the left margin of this style box when drawing, causing it to be "
+"drawn larger than requested."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:77
+msgid ""
+"Expands the right margin of this style box when drawing, causing it to be "
+"drawn larger than requested."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:80
+msgid ""
+"Expands the top margin of this style box when drawing, causing it to be "
+"drawn larger than requested."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:83
+msgid ""
+"Increases the bottom margin of the 3×3 texture box.\n"
+"A higher value means more of the source texture is considered to be part of "
+"the bottom border of the 3×3 box.\n"
+"This is also the value used as fallback for [member StyleBox."
+"content_margin_bottom] if it is negative."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:88
+msgid ""
+"Increases the left margin of the 3×3 texture box.\n"
+"A higher value means more of the source texture is considered to be part of "
+"the left border of the 3×3 box.\n"
+"This is also the value used as fallback for [member StyleBox."
+"content_margin_left] if it is negative."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:93
+msgid ""
+"Increases the right margin of the 3×3 texture box.\n"
+"A higher value means more of the source texture is considered to be part of "
+"the right border of the 3×3 box.\n"
+"This is also the value used as fallback for [member StyleBox."
+"content_margin_right] if it is negative."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:98
+msgid ""
+"Increases the top margin of the 3×3 texture box.\n"
+"A higher value means more of the source texture is considered to be part of "
+"the top border of the 3×3 box.\n"
+"This is also the value used as fallback for [member StyleBox."
+"content_margin_top] if it is negative."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:103
+msgid "Modulates the color of the texture when this style box is drawn."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:106
+msgid ""
+"The normal map to use when drawing this style box.\n"
+"[b]Note:[/b] Godot expects the normal map to use X+, Y-, and Z+ coordinates. "
+"See [url=http://wiki.polycount.com/wiki/"
+"Normal_Map_Technical_Details#Common_Swizzle_Coordinates]this page[/url] for "
+"a comparison of normal map coordinates expected by popular engines."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:110
+msgid ""
+"Species a sub-region of the texture to use.\n"
+"This is equivalent to first wrapping the texture in an [AtlasTexture] with "
+"the same region."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:114
+msgid "The texture to use when drawing this style box."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:120
+msgid "Emitted when the stylebox's texture is changed."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:126
+msgid ""
+"Stretch the stylebox's texture. This results in visible distortion unless "
+"the texture size matches the stylebox's size perfectly."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:129
+msgid ""
+"Repeats the stylebox's texture to match the stylebox's size according to the "
+"nine-patch system."
+msgstr ""
+
+#: doc/classes/StyleBoxTexture.xml:132
+msgid ""
+"Repeats the stylebox's texture to match the stylebox's size according to the "
+"nine-patch system. Unlike [constant AXIS_STRETCH_MODE_TILE], the texture may "
+"be slightly stretched to make the nine-patch texture tile seamlessly."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:4
+msgid "Helper tool to create geometry."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:7
+msgid ""
+"The [SurfaceTool] is used to construct a [Mesh] by specifying vertex "
+"attributes individually. It can be used to construct a [Mesh] from a script. "
+"All properties except indices need to be added before calling [method "
+"add_vertex]. For example, to add vertex colors and UVs:\n"
+"[codeblock]\n"
+"var st = SurfaceTool.new()\n"
+"st.begin(Mesh.PRIMITIVE_TRIANGLES)\n"
+"st.add_color(Color(1, 0, 0))\n"
+"st.add_uv(Vector2(0, 0))\n"
+"st.add_vertex(Vector3(0, 0, 0))\n"
+"[/codeblock]\n"
+"The above [SurfaceTool] now contains one vertex of a triangle which has a UV "
+"coordinate and a specified [Color]. If another vertex were added without "
+"calling [method add_uv] or [method add_color], then the last values would be "
+"used.\n"
+"Vertex attributes must be passed [b]before[/b] calling [method add_vertex]. "
+"Failure to do so will result in an error when committing the vertex "
+"information to a mesh.\n"
+"Additionally, the attributes used before the first vertex is added determine "
+"the format of the mesh. For example, if you only add UVs to the first "
+"vertex, you cannot add color to any of the subsequent vertices.\n"
+"See also [ArrayMesh], [ImmediateGeometry] and [MeshDataTool] for procedural "
+"geometry generation.\n"
+"[b]Note:[/b] Godot uses clockwise [url=https://learnopengl.com/Advanced-"
+"OpenGL/Face-culling]winding order[/url] for front faces of triangle "
+"primitive modes."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:29
+msgid ""
+"Specifies an array of bones to use for the [i]next[/i] vertex. [code]bones[/"
+"code] must contain 4 integers."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:36
+msgid ""
+"Specifies a [Color] to use for the [i]next[/i] vertex. If every vertex needs "
+"to have this information set and you fail to submit it for the first vertex, "
+"this information may not be used at all.\n"
+"[b]Note:[/b] The material must have [member SpatialMaterial."
+"vertex_color_use_as_albedo] enabled for the vertex color to be visible."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:44
+msgid ""
+"Adds an index to index array if you are using indexed vertices. Does not "
+"need to be called before adding vertices."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:51
+msgid ""
+"Specifies a normal to use for the [i]next[/i] vertex. If every vertex needs "
+"to have this information set and you fail to submit it for the first vertex, "
+"this information may not be used at all."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:58
+msgid ""
+"Specifies whether the current vertex (if using only vertex arrays) or "
+"current index (if also using index arrays) should use smooth normals for "
+"normal calculation."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:65
+msgid ""
+"Specifies a tangent to use for the [i]next[/i] vertex. If every vertex needs "
+"to have this information set and you fail to submit it for the first vertex, "
+"this information may not be used at all."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:77
+msgid ""
+"Inserts a triangle fan made of array data into [Mesh] being constructed.\n"
+"Requires the primitive type be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:85
+msgid ""
+"Specifies a set of UV coordinates to use for the [i]next[/i] vertex. If "
+"every vertex needs to have this information set and you fail to submit it "
+"for the first vertex, this information may not be used at all."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:92
+msgid ""
+"Specifies an optional second set of UV coordinates to use for the [i]next[/"
+"i] vertex. If every vertex needs to have this information set and you fail "
+"to submit it for the first vertex, this information may not be used at all."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:99
+msgid ""
+"Specifies the position of current vertex. Should be called after specifying "
+"other vertex properties (e.g. Color, UV)."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:106
+msgid ""
+"Specifies weight values to use for the [i]next[/i] vertex. [code]weights[/"
+"code] must contain 4 values. If every vertex needs to have this information "
+"set and you fail to submit it for the first vertex, this information may not "
+"be used at all."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:115
+msgid ""
+"Append vertices from a given [Mesh] surface onto the current vertex array "
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:123
+msgid ""
+"Called before adding any vertices. Takes the primitive type as an argument "
+"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:129
+msgid "Clear all information passed into the surface tool so far."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:137
+msgid ""
+"Returns a constructed [ArrayMesh] from current information passed in. If an "
+"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
+"to the existing [ArrayMesh].\n"
+"Default flag is [constant Mesh.ARRAY_COMPRESS_DEFAULT] if compression is "
+"enabled. If compression is disabled the default flag is [constant Mesh."
+"ARRAY_FLAG_USE_OCTAHEDRAL_COMPRESSION]. See [code]ARRAY_COMPRESS_*[/code] "
+"constants in [enum Mesh.ArrayFormat] for other flags."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:144
+msgid ""
+"Commits the data to the same format used by [method ArrayMesh."
+"add_surface_from_arrays]. This way you can further process the mesh data "
+"using the [ArrayMesh] API."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:152
+msgid "Creates a vertex array from an existing [Mesh]."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:161
+msgid ""
+"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
+"This can be used to extract a specific pose from a blend shape."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:167
+msgid "Removes the index array by expanding the vertex array."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:174
+msgid ""
+"Generates normals from vertices so you do not have to do it manually. If "
+"[code]flip[/code] is [code]true[/code], the resulting normals will be "
+"inverted. [method generate_normals] should be called [i]after[/i] generating "
+"geometry and [i]before[/i] committing the mesh using [method commit] or "
+"[method commit_to_arrays]. For correct display of normal-mapped surfaces, "
+"you will also have to generate tangents using [method generate_tangents].\n"
+"[b]Note:[/b] [method generate_normals] only works if the primitive type to "
+"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:181
+msgid ""
+"Generates a tangent vector for each vertex. Requires that each vertex have "
+"UVs and normals set already (see [method generate_normals])."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:187
+msgid ""
+"Shrinks the vertex array by creating an index array. This can improve "
+"performance by avoiding vertex reuse."
+msgstr ""
+
+#: doc/classes/SurfaceTool.xml:194
+msgid "Sets [Material] to be used by the [Mesh] you are constructing."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:4
+msgid "Tabbed container."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:7
+msgid ""
+"Sets the active tab's [code]visible[/code] property to the value [code]true[/"
+"code]. Sets all other children's to [code]false[/code].\n"
+"Ignores non-[Control] children."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:16
+msgid "Returns the child [Control] node located at the active tab index."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:22
+msgid ""
+"Returns the [Popup] node instance if one has been set already with [method "
+"set_popup].\n"
+"[b]Warning:[/b] This is a required internal node, removing and freeing it "
+"may cause a crash. If you wish to hide it or any of its children, use their "
+"[member CanvasItem.visible] property."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:29 doc/classes/Tabs.xml:36
+msgid "Returns the previously active tab index."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:36
+msgid "Returns the [Control] node from the tab at index [code]tab_idx[/code]."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:42 doc/classes/Tabs.xml:48
+msgid "Returns the number of tabs."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:49 doc/classes/Tabs.xml:55
+msgid ""
+"Returns [code]true[/code] if the tab at index [code]tab_idx[/code] is "
+"disabled."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:56
+msgid ""
+"Returns [code]true[/code] if the tab at index [code]tab_idx[/code] is hidden."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:63 doc/classes/Tabs.xml:62
+msgid ""
+"Returns the [Texture] for the tab at index [code]tab_idx[/code] or "
+"[code]null[/code] if the tab has no [Texture]."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:70
+msgid ""
+"Returns the index of the tab at local coordinates [code]point[/code]. "
+"Returns [code]-1[/code] if the point is outside the control boundaries or if "
+"there's no tab at the queried position."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:77
+msgid ""
+"Returns the title of the tab at index [code]tab_idx[/code]. Tab titles "
+"default to the name of the indexed child node, but this can be overridden "
+"with [method set_tab_title]."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:83
+msgid "Returns the [TabContainer] rearrange group id."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:90
+msgid ""
+"If set on a [Popup] node instance, a popup menu icon appears in the top-"
+"right corner of the [TabContainer]. Clicking it will expand the [Popup] node."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:98 doc/classes/Tabs.xml:118
+msgid ""
+"If [code]disabled[/code] is [code]true[/code], disables the tab at index "
+"[code]tab_idx[/code], making it non-interactable."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:106
+msgid ""
+"If [code]hidden[/code] is [code]true[/code], hides the tab at index "
+"[code]tab_idx[/code], making it disappear from the tab area."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:114
+msgid "Sets an icon for the tab at index [code]tab_idx[/code]."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:122
+msgid ""
+"Sets a title for the tab at index [code]tab_idx[/code]. Tab titles default "
+"to the name of the indexed child node."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:129
+msgid ""
+"Defines rearrange group id, choose for each [TabContainer] the same value to "
+"enable tab drag between [TabContainer]. Enable drag with [member "
+"drag_to_rearrange_enabled]."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:135
+msgid ""
+"If [code]true[/code], all tabs are drawn in front of the panel. If "
+"[code]false[/code], inactive tabs are drawn behind the panel."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:138
+msgid ""
+"The current tab index. When set, this index's [Control] node's "
+"[code]visible[/code] property is set to [code]true[/code] and all others are "
+"set to [code]false[/code]."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:141 doc/classes/Tabs.xml:150
+msgid "If [code]true[/code], tabs can be rearranged with mouse drag."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:144
+msgid ""
+"The alignment of all tabs in the tab container. See the [enum TabAlign] "
+"constants for details."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:147
+msgid ""
+"If [code]true[/code], tabs are visible. If [code]false[/code], tabs' content "
+"and titles are hidden."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:150
+msgid ""
+"If [code]true[/code], children [Control] nodes that are hidden have their "
+"minimum size take into account in the total, instead of only the currently "
+"visible one."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:156
+msgid ""
+"Emitted when the [TabContainer]'s [Popup] button is clicked. See [method "
+"set_popup] for details."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:162 doc/classes/Tabs.xml:178
+msgid "Emitted when switching to another tab."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:168
+msgid "Emitted when a tab is selected, even if it is the current tab."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:174 doc/classes/Tabs.xml:202
+msgid "Align the tabs to the left."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:177 doc/classes/Tabs.xml:205
+msgid "Align the tabs to the center."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:180 doc/classes/Tabs.xml:208
+msgid "Align the tabs to the right."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:185 doc/classes/Tabs.xml:237
+msgid ""
+"Icon for the left arrow button that appears when there are too many tabs to "
+"fit in the container width. When the button is disabled (i.e. the first tab "
+"is visible), it appears semi-transparent."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:188 doc/classes/Tabs.xml:240
+msgid ""
+"Icon for the left arrow button that appears when there are too many tabs to "
+"fit in the container width. Used when the button is being hovered with the "
+"cursor."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:191 doc/classes/Tabs.xml:243
+msgid "The font used to draw tab names."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:194 doc/classes/Tabs.xml:246
+msgid "Font color of inactive tabs."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:197 doc/classes/Tabs.xml:249
+msgid "Font color of disabled tabs."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:200 doc/classes/Tabs.xml:252
+msgid "Font color of the currently selected tab."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:203
+msgid "Horizontal separation between tabs."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:206 doc/classes/Tabs.xml:258
+msgid ""
+"Icon for the right arrow button that appears when there are too many tabs to "
+"fit in the container width. When the button is disabled (i.e. the last tab "
+"is visible) it appears semi-transparent."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:209 doc/classes/Tabs.xml:261
+msgid ""
+"Icon for the right arrow button that appears when there are too many tabs to "
+"fit in the container width. Used when the button is being hovered with the "
+"cursor."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:216
+msgid "The icon for the menu button (see [method set_popup])."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:219
+msgid ""
+"The icon for the menu button (see [method set_popup]) when it's being "
+"hovered with the cursor."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:222
+msgid "The style for the background fill."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:225
+msgid "The space at the left and right edges of the tab bar."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:228
+msgid "The style of inactive tabs."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:231
+msgid "The style of disabled tabs."
+msgstr ""
+
+#: doc/classes/TabContainer.xml:234 doc/classes/Tabs.xml:274
+msgid "The style of the currently selected tab."
+msgstr ""
+
+#: doc/classes/Tabs.xml:4
+msgid "Tabs control."
+msgstr ""
+
+#: doc/classes/Tabs.xml:7
+msgid ""
+"Simple tabs control, similar to [TabContainer] but is only in charge of "
+"drawing tabs, not interacting with children."
+msgstr ""
+
+#: doc/classes/Tabs.xml:17
+msgid "Adds a new tab."
+msgstr ""
+
+#: doc/classes/Tabs.xml:24
+msgid "Moves the scroll view to make the tab visible."
+msgstr ""
+
+#: doc/classes/Tabs.xml:30
+msgid ""
+"Returns [code]true[/code] if the offset buttons (the ones that appear when "
+"there's not enough space for all tabs) are visible."
+msgstr ""
+
+#: doc/classes/Tabs.xml:42
+msgid "Returns [code]true[/code] if select with right mouse button is enabled."
+msgstr ""
+
+#: doc/classes/Tabs.xml:68
+msgid "Returns the number of hidden tabs offsetted to the left."
+msgstr ""
+
+#: doc/classes/Tabs.xml:75
+msgid "Returns tab [Rect2] with local position and size."
+msgstr ""
+
+#: doc/classes/Tabs.xml:82
+msgid "Returns the title of the tab at index [code]tab_idx[/code]."
+msgstr ""
+
+#: doc/classes/Tabs.xml:88
+msgid "Returns the [Tabs]' rearrange group ID."
+msgstr ""
+
+#: doc/classes/Tabs.xml:96
+msgid "Moves a tab from [code]from[/code] to [code]to[/code]."
+msgstr ""
+
+#: doc/classes/Tabs.xml:103
+msgid "Removes the tab at index [code]tab_idx[/code]."
+msgstr ""
+
+#: doc/classes/Tabs.xml:110
+msgid ""
+"If [code]true[/code], enables selecting a tab with the right mouse button."
+msgstr ""
+
+#: doc/classes/Tabs.xml:126
+msgid "Sets an [code]icon[/code] for the tab at index [code]tab_idx[/code]."
+msgstr ""
+
+#: doc/classes/Tabs.xml:134
+msgid "Sets a [code]title[/code] for the tab at index [code]tab_idx[/code]."
+msgstr ""
+
+#: doc/classes/Tabs.xml:141
+msgid ""
+"Defines the rearrange group ID. Choose for each [Tabs] the same value to "
+"dragging tabs between [Tabs]. Enable drag with [member "
+"drag_to_rearrange_enabled]."
+msgstr ""
+
+#: doc/classes/Tabs.xml:147
+msgid "Select tab at index [code]tab_idx[/code]."
+msgstr ""
+
+#: doc/classes/Tabs.xml:153
+msgid ""
+"if [code]true[/code], the mouse's scroll wheel can be used to navigate the "
+"scroll view."
+msgstr ""
+
+#: doc/classes/Tabs.xml:156
+msgid "The alignment of all tabs. See [enum TabAlign] for details."
+msgstr ""
+
+#: doc/classes/Tabs.xml:159
+msgid ""
+"Sets when the close button will appear on the tabs. See [enum "
+"CloseButtonDisplayPolicy] for details."
+msgstr ""
+
+#: doc/classes/Tabs.xml:166
+msgid ""
+"Emitted when the active tab is rearranged via mouse drag. See [member "
+"drag_to_rearrange_enabled]."
+msgstr ""
+
+#: doc/classes/Tabs.xml:172
+msgid "Emitted when a tab is right-clicked."
+msgstr ""
+
+#: doc/classes/Tabs.xml:184
+msgid "Emitted when a tab is clicked, even if it is the current tab."
+msgstr ""
+
+#: doc/classes/Tabs.xml:190
+msgid "Emitted when a tab is closed."
+msgstr ""
+
+#: doc/classes/Tabs.xml:196
+msgid "Emitted when a tab is hovered by the mouse."
+msgstr ""
+
+#: doc/classes/Tabs.xml:211
+msgid "Represents the size of the [enum TabAlign] enum."
+msgstr ""
+
+#: doc/classes/Tabs.xml:214
+msgid "Never show the close buttons."
+msgstr ""
+
+#: doc/classes/Tabs.xml:217
+msgid "Only show the close button on the currently active tab."
+msgstr ""
+
+#: doc/classes/Tabs.xml:220
+msgid "Show the close button on all tabs."
+msgstr ""
+
+#: doc/classes/Tabs.xml:223
+msgid "Represents the size of the [enum CloseButtonDisplayPolicy] enum."
+msgstr ""
+
+#: doc/classes/Tabs.xml:228
+msgid "Background of the close button when it's being hovered with the cursor."
+msgstr ""
+
+#: doc/classes/Tabs.xml:231
+msgid "Background of the close button when it's being pressed."
+msgstr ""
+
+#: doc/classes/Tabs.xml:234
+msgid "The icon for the close button (see [member tab_close_display_policy])."
+msgstr ""
+
+#: doc/classes/Tabs.xml:255
+msgid "The horizontal separation between the tabs."
+msgstr ""
+
+#: doc/classes/Tabs.xml:268
+msgid "The style of an inactive tab."
+msgstr ""
+
+#: doc/classes/Tabs.xml:271
+msgid "The style of a disabled tab"
+msgstr ""
+
+#: doc/classes/TCP_Server.xml:4
+msgid "A TCP server."
+msgstr ""
+
+#: doc/classes/TCP_Server.xml:7
+msgid ""
+"A TCP server. Listens to connections on a port and returns a [StreamPeerTCP] "
+"when it gets an incoming connection."
+msgstr ""
+
+#: doc/classes/TCP_Server.xml:15
+msgid "Returns [code]true[/code] if a connection is available for taking."
+msgstr ""
+
+#: doc/classes/TCP_Server.xml:21
+msgid ""
+"Returns [code]true[/code] if the server is currently listening for "
+"connections."
+msgstr ""
+
+#: doc/classes/TCP_Server.xml:29
+msgid ""
+"Listen on the [code]port[/code] binding to [code]bind_address[/code].\n"
+"If [code]bind_address[/code] is set as [code]\"*\"[/code] (default), the "
+"server will listen on all available addresses (both IPv4 and IPv6).\n"
+"If [code]bind_address[/code] is set as [code]\"0.0.0.0\"[/code] (for IPv4) "
+"or [code]\"::\"[/code] (for IPv6), the server will listen on all available "
+"addresses matching that IP type.\n"
+"If [code]bind_address[/code] is set to any valid address (e.g. "
+"[code]\"192.168.1.101\"[/code], [code]\"::1\"[/code], etc), the server will "
+"only listen on the interface with that addresses (or fail if no interface "
+"with the given address exists)."
+msgstr ""
+
+#: doc/classes/TCP_Server.xml:38
+msgid "Stops listening."
+msgstr ""
+
+#: doc/classes/TCP_Server.xml:44
+msgid ""
+"If a connection is available, returns a StreamPeerTCP with the connection."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:4
+msgid "Multiline text editing control."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:7
+msgid ""
+"TextEdit is meant for editing large, multiline text. It also has facilities "
+"for editing code, such as syntax highlighting support and multiple levels of "
+"undo/redo.\n"
+"[b]Note:[/b] When holding down [code]Alt[/code], the vertical scroll wheel "
+"will scroll 5 times as fast as it would normally do. This also works in the "
+"Godot script editor."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:20
+msgid "Adds color region (given the delimiters) and its colors."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:28
+msgid "Adds a [code]keyword[/code] and its [Color]."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:35
+msgid ""
+"Returns if the given line is foldable, that is, it has indented lines right "
+"below it."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:41
+msgid ""
+"Centers the viewport on the line the editing cursor is at. This also resets "
+"the [member scroll_horizontal] value to [code]0[/code]."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:47
+msgid ""
+"Clears all custom syntax coloring information previously added with [method "
+"add_color_region] or [method add_keyword_color]."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:53
+msgid "Clears the undo history."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:59
+msgid "Copy's the current text selection."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:65
+msgid "Returns the column the editing cursor is at."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:71
+msgid "Returns the line the editing cursor is at."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:79
+msgid ""
+"Moves the cursor at the specified [code]column[/code] index.\n"
+"If [code]adjust_viewport[/code] is set to [code]true[/code], the viewport "
+"will center at the cursor position after the move occurs."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:90
+msgid ""
+"Moves the cursor at the specified [code]line[/code] index.\n"
+"If [code]adjust_viewport[/code] is set to [code]true[/code], the viewport "
+"will center at the cursor position after the move occurs.\n"
+"If [code]can_be_hidden[/code] is set to [code]true[/code], the specified "
+"[code]line[/code] can be hidden using [method set_line_as_hidden]."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:98
+msgid "Cut's the current selection."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:104
+msgid "Deselects the current selection."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:110
+msgid "Folds all lines that are possible to be folded (see [method can_fold])."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:117
+msgid "Folds the given line, if possible (see [method can_fold])."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:123
+msgid "Returns an array containing the line number of each breakpoint."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:130
+msgid "Returns the [Color] of the specified [code]keyword[/code]."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:137
+msgid "Returns the text of a specific line."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:143
+msgid "Returns the amount of total lines in the text."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:149
+msgid ""
+"Returns the [PopupMenu] of this [TextEdit]. By default, this menu is "
+"displayed when right-clicking on the [TextEdit].\n"
+"[b]Warning:[/b] This is a required internal node, removing and freeing it "
+"may cause a crash. If you wish to hide it or any of its children, use their "
+"[member CanvasItem.visible] property."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:156
+msgid "Returns the selection begin column."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:162
+msgid "Returns the selection begin line."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:168
+msgid "Returns the text inside the selection."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:174
+msgid "Returns the selection end column."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:180
+msgid "Returns the selection end line."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:186
+msgid ""
+"Returns a [String] text with the word under the caret (text cursor) location."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:193
+msgid ""
+"Returns whether the specified [code]keyword[/code] has a color set to it or "
+"not."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:199 doc/classes/UndoRedo.xml:121
+msgid "Returns [code]true[/code] if a \"redo\" action is available."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:205 doc/classes/UndoRedo.xml:127
+msgid "Returns [code]true[/code] if an \"undo\" action is available."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:212
+msgid "Insert the specified text at the cursor position."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:219
+msgid "Returns whether the line at the specified index is folded or not."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:226
+msgid "Returns whether the line at the specified index is hidden or not."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:233
+msgid ""
+"Returns [code]true[/code] when the specified [code]line[/code] is bookmarked."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:240
+msgid ""
+"Returns [code]true[/code] when the specified [code]line[/code] has a "
+"breakpoint."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:247
+msgid ""
+"Returns [code]true[/code] when the specified [code]line[/code] is marked as "
+"safe."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:253
+msgid "Returns [code]true[/code] if the selection is active."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:260
+msgid ""
+"Triggers a right-click menu action by the specified index. See [enum "
+"MenuItems] for a list of available indexes."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:266
+msgid "Paste the current selection."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:272
+msgid "Perform redo operation."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:278
+msgid ""
+"Removes all the breakpoints. This will not fire the [signal "
+"breakpoint_toggled] signal."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:288
+msgid ""
+"Perform a search inside the text. Search flags can be specified in the [enum "
+"SearchFlags] enum.\n"
+"Returns an empty [code]PoolIntArray[/code] if no result was found. "
+"Otherwise, the result line and column can be accessed at indices specified "
+"in the [enum SearchResult] enum, e.g:\n"
+"[codeblock]\n"
+"var result = search(key, flags, line, column)\n"
+"if result.size() > 0:\n"
+" # Result found.\n"
+" var res_line = result[TextEdit.SEARCH_RESULT_LINE]\n"
+" var res_column = result[TextEdit.SEARCH_RESULT_COLUMN]\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/TextEdit.xml:306
+msgid ""
+"Perform selection, from line/column to line/column.\n"
+"If [member selecting_enabled] is [code]false[/code], no selection will occur."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:313
+msgid ""
+"Select all the text.\n"
+"If [member selecting_enabled] is [code]false[/code], no selection will occur."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:322
+msgid "Sets the text for a specific line."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:330
+msgid ""
+"Bookmarks the [code]line[/code] if [code]bookmark[/code] is true. Deletes "
+"the bookmark if [code]bookmark[/code] is false.\n"
+"Bookmarks are shown in the [member breakpoint_gutter]."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:339
+msgid ""
+"Adds or removes the breakpoint in [code]line[/code]. Breakpoints are shown "
+"in the [member breakpoint_gutter]."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:347
+msgid "If [code]true[/code], hides the line of the specified index."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:355
+msgid ""
+"If [code]true[/code], marks the [code]line[/code] as safe.\n"
+"This will show the line number with the color provided in the "
+"[code]safe_line_number_color[/code] theme property."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:363
+msgid "Toggle the folding of the code block at the given line."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:369
+msgid "Perform undo operation."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:376
+msgid "Unfolds the given line, if folded."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:382
+msgid ""
+"Unhide all lines that were previously set to hidden by [method "
+"set_line_as_hidden]."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:388
+msgid "If [code]true[/code], the breakpoint gutter is visible."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:397
+msgid ""
+"If [code]true[/code], the caret displays as a rectangle.\n"
+"If [code]false[/code], the caret displays as a bar."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:401
+msgid ""
+"If [code]true[/code], a right-click moves the cursor at the mouse position "
+"before displaying the context menu.\n"
+"If [code]false[/code], the context menu disregards mouse location."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:405
+msgid "If [code]true[/code], a right-click displays the context menu."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:408
+msgid ""
+"If [code]true[/code], the \"space\" character will have a visible "
+"representation."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:411
+msgid ""
+"If [code]true[/code], the \"tab\" character will have a visible "
+"representation."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:415
+msgid ""
+"If [code]true[/code], the fold gutter is visible. This enables folding "
+"groups of indented lines."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:418
+msgid ""
+"If [code]true[/code], all lines that have been set to hidden by [method "
+"set_line_as_hidden], will not be visible."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:421
+msgid ""
+"If [code]true[/code], all occurrences of the selected text will be "
+"highlighted."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:424
+msgid "If [code]true[/code], the line containing the cursor is highlighted."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:427
+msgid ""
+"If [code]true[/code], a minimap is shown, providing an outline of your "
+"source code."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:430
+msgid "The width, in pixels, of the minimap."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:434
+msgid ""
+"If [code]true[/code], custom [code]font_color_selected[/code] will be used "
+"for selected text."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:437
+msgid ""
+"If [code]true[/code], read-only mode is enabled. Existing text cannot be "
+"modified and new text cannot be added."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:440
+msgid ""
+"If there is a horizontal scrollbar, this determines the current horizontal "
+"scroll value in pixels."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:443
+msgid ""
+"If there is a vertical scrollbar, this determines the current vertical "
+"scroll value in line numbers, starting at 0 for the top line."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:446
+msgid ""
+"If [code]true[/code], text can be selected.\n"
+"If [code]false[/code], text can not be selected by the user or by the "
+"[method select] or [method select_all] methods."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:450
+msgid ""
+"If [code]true[/code], shortcut keys for context menu items are enabled, even "
+"if the context menu is disabled."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:453
+msgid ""
+"If [code]true[/code], line numbers are displayed to the left of the text."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:456
+msgid ""
+"If [code]true[/code], sets the [code]step[/code] of the scrollbars to "
+"[code]0.25[/code] which results in smoother scrolling."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:459
+msgid ""
+"If [code]true[/code], any custom color properties that have been set for "
+"this [TextEdit] will be visible."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:462
+msgid "String value of the [TextEdit]."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:465
+msgid "Vertical scroll sensitivity."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:471
+msgid ""
+"If [code]true[/code], enables text wrapping when it goes beyond the edge of "
+"what is visible."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:478
+msgid "Emitted when a breakpoint is placed via the breakpoint gutter."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:483
+msgid "Emitted when the cursor changes."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:490
+msgid "Emitted when the info icon is clicked."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:512
+msgid "Match case when searching."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:515
+msgid "Match whole words when searching."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:518
+msgid "Search from end to beginning."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:521
+msgid "Used to access the result column from [method search]."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:524
+msgid "Used to access the result line from [method search]."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:533
+msgid ""
+"Pastes the clipboard text over the selected text (or at the cursor's "
+"position)."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:536
+msgid "Erases the whole [TextEdit] text."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:539
+msgid "Selects the whole [TextEdit] text."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:545
+msgid "Redoes the previous action."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:553
+msgid ""
+"Sets the background [Color] of this [TextEdit]. [member syntax_highlighting] "
+"has to be enabled."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:556
+msgid ""
+"Sets the [Color] of the bookmark marker. [member syntax_highlighting] has to "
+"be enabled."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:561 doc/classes/TextEdit.xml:588
+msgid ""
+"Sets the [Color] of the breakpoints. [member breakpoint_gutter] has to be "
+"enabled."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:599
+msgid "Sets the default [Font]."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:602
+msgid "Sets the font [Color]."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:607
+msgid ""
+"Sets the [Color] of the selected text. [member override_selected_font_color] "
+"has to be enabled."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:612
+msgid ""
+"Sets the [Color] of the line numbers. [member show_line_numbers] has to be "
+"enabled."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:615
+msgid "Sets the spacing between the lines."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:618
+msgid "Sets the [Color] of marked text."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:623
+msgid "Sets the [StyleBox] of this [TextEdit]."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:628
+msgid ""
+"Sets the [StyleBox] of this [TextEdit] when [member readonly] is enabled."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:633
+msgid "Sets the highlight [Color] of text selections."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:640
+msgid "Sets a custom [Texture] for tab text characters."
+msgstr ""
+
+#: doc/classes/TextEdit.xml:643
+msgid ""
+"Sets the highlight [Color] of multiple occurrences. [member "
+"highlight_all_occurrences] has to be enabled."
+msgstr ""
+
+#: doc/classes/Texture.xml:4
+msgid "Texture for 2D and 3D."
+msgstr ""
+
+#: doc/classes/Texture.xml:7
+msgid ""
+"A texture works by registering an image in the video hardware, which then "
+"can be used in 3D models or 2D [Sprite] or GUI [Control].\n"
+"Textures are often created by loading them from a file. See [method "
+"@GDScript.load].\n"
+"[Texture] is a base for other resources. It cannot be used directly.\n"
+"[b]Note:[/b] The maximum texture size is 16384×16384 pixels due to graphics "
+"hardware limitations. Larger textures may fail to import."
+msgstr ""
+
+#: doc/classes/Texture.xml:23
+msgid ""
+"Draws the texture using a [CanvasItem] with the [VisualServer] API at the "
+"specified [code]position[/code]. Equivalent to [method VisualServer."
+"canvas_item_add_texture_rect] with a rect at [code]position[/code] and the "
+"size of this [Texture]."
+msgstr ""
+
+#: doc/classes/Texture.xml:35
+msgid ""
+"Draws the texture using a [CanvasItem] with the [VisualServer] API. "
+"Equivalent to [method VisualServer.canvas_item_add_texture_rect]."
+msgstr ""
+
+#: doc/classes/Texture.xml:48
+msgid ""
+"Draws a part of the texture using a [CanvasItem] with the [VisualServer] "
+"API. Equivalent to [method VisualServer.canvas_item_add_texture_rect_region]."
+msgstr ""
+
+#: doc/classes/Texture.xml:54
+msgid ""
+"Returns an [Image] that is a copy of data from this [Texture]. [Image]s can "
+"be accessed and manipulated directly."
+msgstr ""
+
+#: doc/classes/Texture.xml:60
+msgid "Returns the texture height."
+msgstr ""
+
+#: doc/classes/Texture.xml:66
+msgid "Returns the texture size."
+msgstr ""
+
+#: doc/classes/Texture.xml:72
+msgid "Returns the texture width."
+msgstr ""
+
+#: doc/classes/Texture.xml:78
+msgid "Returns [code]true[/code] if this [Texture] has an alpha channel."
+msgstr ""
+
+#: doc/classes/Texture.xml:84
+msgid ""
+"The texture's [enum Flags]. [enum Flags] are used to set various properties "
+"of the [Texture]."
+msgstr ""
+
+#: doc/classes/Texture.xml:89
+msgid ""
+"Default flags. [constant FLAG_MIPMAPS], [constant FLAG_REPEAT] and [constant "
+"FLAG_FILTER] are enabled."
+msgstr ""
+
+#: doc/classes/Texture.xml:92 doc/classes/VisualServer.xml:3206
+msgid ""
+"Generates mipmaps, which are smaller versions of the same texture to use "
+"when zoomed out, keeping the aspect ratio."
+msgstr ""
+
+#: doc/classes/Texture.xml:95
+msgid ""
+"Repeats the texture (instead of clamp to edge).\n"
+"[b]Note:[/b] Ignored when using an [AtlasTexture] as these don't support "
+"repetition."
+msgstr ""
+
+#: doc/classes/Texture.xml:99 doc/classes/VisualServer.xml:3212
+msgid "Uses a magnifying filter, to enable smooth zooming in of the texture."
+msgstr ""
+
+#: doc/classes/Texture.xml:102 doc/classes/TextureLayered.xml:88
+#: doc/classes/VisualServer.xml:3215
+msgid ""
+"Uses anisotropic mipmap filtering. Generates smaller versions of the same "
+"texture with different aspect ratios.\n"
+"This results in better-looking textures when viewed from oblique angles."
+msgstr ""
+
+#: doc/classes/Texture.xml:106 doc/classes/VisualServer.xml:3219
+msgid "Converts the texture to the sRGB color space."
+msgstr ""
+
+#: doc/classes/Texture.xml:109
+msgid ""
+"Repeats the texture with alternate sections mirrored.\n"
+"[b]Note:[/b] Ignored when using an [AtlasTexture] as these don't support "
+"repetition."
+msgstr ""
+
+#: doc/classes/Texture.xml:113 doc/classes/VisualServer.xml:3225
+msgid "Texture is a video surface."
+msgstr ""
+
+#: doc/classes/Texture3D.xml:4
+msgid "Texture with 3 dimensions."
+msgstr ""
+
+#: doc/classes/Texture3D.xml:7
+msgid ""
+"Texture3D is a 3-dimensional texture that has a width, height, and depth."
+msgstr ""
+
+#: doc/classes/Texture3D.xml:20
+msgid ""
+"Creates the Texture3D with specified [code]width[/code], [code]height[/"
+"code], and [code]depth[/code]. See [enum Image.Format] for [code]format[/"
+"code] options. See [enum TextureLayered.Flags] enumerator for [code]flags[/"
+"code] options."
+msgstr ""
+
+#: doc/classes/TextureArray.xml:4
+msgid "Array of textures stored in a single primitive."
+msgstr ""
+
+#: doc/classes/TextureArray.xml:7
+msgid ""
+"[TextureArray]s store an array of [Image]s in a single [Texture] primitive. "
+"Each layer of the texture array has its own mipmap chain. This makes it is a "
+"good alternative to texture atlases.\n"
+"[TextureArray]s must be displayed using shaders. After importing your file "
+"as a [TextureArray] and setting the appropriate Horizontal and Vertical "
+"Slices, display it by setting it as a uniform to a shader, for example:\n"
+"[codeblock]\n"
+"shader_type canvas_item;\n"
+"\n"
+"uniform sampler2DArray tex;\n"
+"uniform int index;\n"
+"\n"
+"void fragment() {\n"
+" COLOR = texture(tex, vec3(UV.x, UV.y, float(index)));\n"
+"}\n"
+"[/codeblock]\n"
+"Set the integer uniform \"index\" to show a particular part of the texture "
+"as defined by the Horizontal and Vertical Slices in the importer."
+msgstr ""
+
+#: doc/classes/TextureArray.xml:32
+msgid ""
+"Creates the TextureArray with specified [code]width[/code], [code]height[/"
+"code], and [code]depth[/code]. See [enum Image.Format] for [code]format[/"
+"code] options. See [enum TextureLayered.Flags] enumerator for [code]flags[/"
+"code] options."
+msgstr ""
+
+#: doc/classes/TextureButton.xml:4
+msgid ""
+"Texture-based button. Supports Pressed, Hover, Disabled and Focused states."
+msgstr ""
+
+#: doc/classes/TextureButton.xml:7
+msgid ""
+"[TextureButton] has the same functionality as [Button], except it uses "
+"sprites instead of Godot's [Theme] resource. It is faster to create, but it "
+"doesn't support localization like more complex [Control]s.\n"
+"The \"normal\" state must contain a texture ([member texture_normal]); other "
+"textures are optional.\n"
+"See also [BaseButton] which contains common properties and methods "
+"associated with this node."
+msgstr ""
+
+#: doc/classes/TextureButton.xml:18
+msgid ""
+"If [code]true[/code], the texture stretches to the edges of the node's "
+"bounding rectangle using the [member stretch_mode]. If [code]false[/code], "
+"the texture will not scale with the node."
+msgstr ""
+
+#: doc/classes/TextureButton.xml:27
+msgid ""
+"Controls the texture's behavior when you resize the node's bounding "
+"rectangle, [b]only if[/b] [member expand] is [code]true[/code]. Set it to "
+"one of the [enum StretchMode] constants. See the constants to learn more."
+msgstr ""
+
+#: doc/classes/TextureButton.xml:30
+msgid ""
+"Pure black and white [BitMap] image to use for click detection. On the mask, "
+"white pixels represent the button's clickable area. Use it to create buttons "
+"with curved shapes."
+msgstr ""
+
+#: doc/classes/TextureButton.xml:33
+msgid ""
+"Texture to display when the node is disabled. See [member BaseButton."
+"disabled]."
+msgstr ""
+
+#: doc/classes/TextureButton.xml:36
+msgid "Texture to display when the node has mouse or keyboard focus."
+msgstr ""
+
+#: doc/classes/TextureButton.xml:39
+msgid "Texture to display when the mouse hovers the node."
+msgstr ""
+
+#: doc/classes/TextureButton.xml:42
+msgid ""
+"Texture to display by default, when the node is [b]not[/b] in the disabled, "
+"focused, hover or pressed state."
+msgstr ""
+
+#: doc/classes/TextureButton.xml:45
+msgid ""
+"Texture to display on mouse down over the node, if the node has keyboard "
+"focus and the player presses the Enter key or if the player presses the "
+"[member BaseButton.shortcut] key."
+msgstr ""
+
+#: doc/classes/TextureButton.xml:50 doc/classes/TextureRect.xml:38
+msgid "Scale to fit the node's bounding rectangle."
+msgstr ""
+
+#: doc/classes/TextureButton.xml:53 doc/classes/TextureRect.xml:41
+msgid "Tile inside the node's bounding rectangle."
+msgstr ""
+
+#: doc/classes/TextureButton.xml:56 doc/classes/TextureRect.xml:44
+msgid ""
+"The texture keeps its original size and stays in the bounding rectangle's "
+"top-left corner."
+msgstr ""
+
+#: doc/classes/TextureButton.xml:59 doc/classes/TextureRect.xml:47
+msgid ""
+"The texture keeps its original size and stays centered in the node's "
+"bounding rectangle."
+msgstr ""
+
+#: doc/classes/TextureButton.xml:62 doc/classes/TextureRect.xml:50
+msgid ""
+"Scale the texture to fit the node's bounding rectangle, but maintain the "
+"texture's aspect ratio."
+msgstr ""
+
+#: doc/classes/TextureButton.xml:65
+msgid ""
+"Scale the texture to fit the node's bounding rectangle, center it, and "
+"maintain its aspect ratio."
+msgstr ""
+
+#: doc/classes/TextureButton.xml:68 doc/classes/TextureRect.xml:56
+msgid ""
+"Scale the texture so that the shorter side fits the bounding rectangle. The "
+"other side clips to the node's limits."
+msgstr ""
+
+#: doc/classes/TextureLayered.xml:4
+msgid "Base class for 3D texture types."
+msgstr ""
+
+#: doc/classes/TextureLayered.xml:7
+msgid ""
+"Base class for [Texture3D] and [TextureArray]. Cannot be used directly, but "
+"contains all the functions necessary for accessing and using [Texture3D] and "
+"[TextureArray]. Data is set on a per-layer basis. For [Texture3D]s, the "
+"layer specifies the depth or Z-index, they can be treated as a bunch of 2D "
+"slices. Similarly, for [TextureArray]s, the layer specifies the array layer."
+msgstr ""
+
+#: doc/classes/TextureLayered.xml:15
+msgid ""
+"Returns the depth of the texture. Depth is the 3rd dimension (typically Z-"
+"axis)."
+msgstr ""
+
+#: doc/classes/TextureLayered.xml:21
+msgid ""
+"Returns the current format being used by this texture. See [enum Image."
+"Format] for details."
+msgstr ""
+
+#: doc/classes/TextureLayered.xml:27
+msgid ""
+"Returns the height of the texture. Height is typically represented by the Y-"
+"axis."
+msgstr ""
+
+#: doc/classes/TextureLayered.xml:34
+msgid ""
+"Returns an [Image] resource with the data from specified [code]layer[/code]."
+msgstr ""
+
+#: doc/classes/TextureLayered.xml:40
+msgid ""
+"Returns the width of the texture. Width is typically represented by the X-"
+"axis."
+msgstr ""
+
+#: doc/classes/TextureLayered.xml:51
+msgid ""
+"Partially sets the data for a specified [code]layer[/code] by overwriting "
+"using the data of the specified [code]image[/code]. [code]x_offset[/code] "
+"and [code]y_offset[/code] determine where the [Image] is \"stamped\" over "
+"the texture. The [code]image[/code] must fit within the texture."
+msgstr ""
+
+#: doc/classes/TextureLayered.xml:59
+msgid ""
+"Sets the data for the specified layer. Data takes the form of a 2-"
+"dimensional [Image] resource."
+msgstr ""
+
+#: doc/classes/TextureLayered.xml:65
+msgid "Returns a dictionary with all the data used by this texture."
+msgstr ""
+
+#: doc/classes/TextureLayered.xml:68
+msgid "Specifies which [enum Flags] apply to this texture."
+msgstr ""
+
+#: doc/classes/TextureLayered.xml:73
+msgid ""
+"Default flags for [TextureArray]. [constant FLAG_MIPMAPS], [constant "
+"FLAG_REPEAT] and [constant FLAG_FILTER] are enabled."
+msgstr ""
+
+#: doc/classes/TextureLayered.xml:76
+msgid "Default flags for [Texture3D]. [constant FLAG_FILTER] is enabled."
+msgstr ""
+
+#: doc/classes/TextureLayered.xml:79
+msgid "Texture will generate mipmaps on creation."
+msgstr ""
+
+#: doc/classes/TextureLayered.xml:82
+msgid "Texture will repeat when UV used is outside the 0-1 range."
+msgstr ""
+
+#: doc/classes/TextureLayered.xml:85
+msgid ""
+"Use filtering when reading from texture. Filtering smooths out pixels. "
+"Turning filtering off is slightly faster and more appropriate when you need "
+"access to individual pixels."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:4
+msgid ""
+"Texture-based progress bar. Useful for loading screens and life or stamina "
+"bars."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:7
+msgid ""
+"TextureProgress works like [ProgressBar], but uses up to 3 textures instead "
+"of Godot's [Theme] resource. It can be used to create horizontal, vertical "
+"and radial progress bars."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:28
+msgid "The fill direction. See [enum FillMode] for possible values."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:32
+msgid ""
+"If [code]true[/code], Godot treats the bar's textures like in "
+"[NinePatchRect]. Use the [code]stretch_margin_*[/code] properties like "
+"[member stretch_margin_bottom] to set up the nine patch's 3×3 grid. When "
+"using a radial [member fill_mode], this setting will enable stretching."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:35
+msgid ""
+"Offsets [member texture_progress] if [member fill_mode] is [constant "
+"FILL_CLOCKWISE] or [constant FILL_COUNTER_CLOCKWISE]."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:38
+msgid ""
+"Upper limit for the fill of [member texture_progress] if [member fill_mode] "
+"is [constant FILL_CLOCKWISE] or [constant FILL_COUNTER_CLOCKWISE]. When the "
+"node's [code]value[/code] is equal to its [code]max_value[/code], the "
+"texture fills up to this angle.\n"
+"See [member Range.value], [member Range.max_value]."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:42
+msgid ""
+"Starting angle for the fill of [member texture_progress] if [member "
+"fill_mode] is [constant FILL_CLOCKWISE] or [constant "
+"FILL_COUNTER_CLOCKWISE]. When the node's [code]value[/code] is equal to its "
+"[code]min_value[/code], the texture doesn't show up at all. When the "
+"[code]value[/code] increases, the texture fills and tends towards [member "
+"radial_fill_degrees]."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:45
+msgid ""
+"The height of the 9-patch's bottom row. A margin of 16 means the 9-slice's "
+"bottom corners and side will have a height of 16 pixels. You can set all 4 "
+"margin values individually to create panels with non-uniform borders."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:48
+msgid "The width of the 9-patch's left column."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:51
+msgid "The width of the 9-patch's right column."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:54
+msgid "The height of the 9-patch's top row."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:57
+msgid ""
+"[Texture] that draws over the progress bar. Use it to add highlights or an "
+"upper-frame that hides part of [member texture_progress]."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:60
+msgid ""
+"[Texture] that clips based on the node's [code]value[/code] and [member "
+"fill_mode]. As [code]value[/code] increased, the texture fills up. It shows "
+"entirely when [code]value[/code] reaches [code]max_value[/code]. It doesn't "
+"show at all if [code]value[/code] is equal to [code]min_value[/code].\n"
+"The [code]value[/code] property comes from [Range]. See [member Range."
+"value], [member Range.min_value], [member Range.max_value]."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:64
+msgid ""
+"The offset of [member texture_progress]. Useful for [member texture_over] "
+"and [member texture_under] with fancy borders, to avoid transparent margins "
+"in your progress texture."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:67
+msgid "[Texture] that draws under the progress bar. The bar's background."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:70
+msgid ""
+"Multiplies the color of the bar's [code]texture_over[/code] texture. The "
+"effect is similar to [member CanvasItem.modulate], except it only affects "
+"this specific texture instead of the entire node."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:73
+msgid ""
+"Multiplies the color of the bar's [code]texture_progress[/code] texture."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:76
+msgid "Multiplies the color of the bar's [code]texture_under[/code] texture."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:81
+msgid "The [member texture_progress] fills from left to right."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:84
+msgid "The [member texture_progress] fills from right to left."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:87
+msgid "The [member texture_progress] fills from top to bottom."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:90
+msgid "The [member texture_progress] fills from bottom to top."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:93
+msgid ""
+"Turns the node into a radial bar. The [member texture_progress] fills "
+"clockwise. See [member radial_center_offset], [member radial_initial_angle] "
+"and [member radial_fill_degrees] to control the way the bar fills up."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:96
+msgid ""
+"Turns the node into a radial bar. The [member texture_progress] fills "
+"counterclockwise. See [member radial_center_offset], [member "
+"radial_initial_angle] and [member radial_fill_degrees] to control the way "
+"the bar fills up."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:99
+msgid ""
+"The [member texture_progress] fills from the center, expanding both towards "
+"the left and the right."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:102
+msgid ""
+"The [member texture_progress] fills from the center, expanding both towards "
+"the top and the bottom."
+msgstr ""
+
+#: doc/classes/TextureProgress.xml:105
+msgid ""
+"Turns the node into a radial bar. The [member texture_progress] fills "
+"radially from the center, expanding both clockwise and counterclockwise. See "
+"[member radial_center_offset], [member radial_initial_angle] and [member "
+"radial_fill_degrees] to control the way the bar fills up."
+msgstr ""
+
+#: doc/classes/TextureRect.xml:4
+msgid "Control for drawing textures."
+msgstr ""
+
+#: doc/classes/TextureRect.xml:7
+msgid ""
+"Used to draw icons and sprites in a user interface. The texture's placement "
+"can be controlled with the [member stretch_mode] property. It can scale, "
+"tile, or stay centered inside its bounding rectangle.\n"
+"[b]Note:[/b] You should enable [member flip_v] when using a TextureRect to "
+"display a [ViewportTexture]. Alternatively, you can enable [member Viewport."
+"render_target_v_flip] on the Viewport. Otherwise, the image will appear "
+"upside down."
+msgstr ""
+
+#: doc/classes/TextureRect.xml:17
+msgid "If [code]true[/code], the texture scales to fit its bounding rectangle."
+msgstr ""
+
+#: doc/classes/TextureRect.xml:27
+msgid ""
+"Controls the texture's behavior when resizing the node's bounding rectangle. "
+"See [enum StretchMode]."
+msgstr ""
+
+#: doc/classes/TextureRect.xml:30
+msgid "The node's [Texture] resource."
+msgstr ""
+
+#: doc/classes/TextureRect.xml:35
+msgid ""
+"Scale to fit the node's bounding rectangle, only if [code]expand[/code] is "
+"[code]true[/code]. Default [code]stretch_mode[/code], for backwards "
+"compatibility. Until you set [code]expand[/code] to [code]true[/code], the "
+"texture will behave like [constant STRETCH_KEEP]."
+msgstr ""
+
+#: doc/classes/TextureRect.xml:53
+msgid ""
+"Scale the texture to fit the node's bounding rectangle, center it and "
+"maintain its aspect ratio."
+msgstr ""
+
+#: doc/classes/Theme.xml:4
+msgid "Theme for controls."
+msgstr ""
+
+#: doc/classes/Theme.xml:7
+msgid ""
+"A theme for skinning controls. Controls can be skinned individually, but for "
+"complex applications, it's more practical to just create a global theme that "
+"defines everything. This theme can be applied to any [Control]; the Control "
+"and its children will automatically use it.\n"
+"Theme resources can alternatively be loaded by writing them in a [code]."
+"theme[/code] file, see the documentation for more information."
+msgstr ""
+
+#: doc/classes/Theme.xml:11
+msgid "https://docs.godotengine.org/en/3.4/tutorials/gui/gui_skinning.html"
+msgstr ""
+
+#: doc/classes/Theme.xml:17
+msgid "Clears all values on the theme."
+msgstr ""
+
+#: doc/classes/Theme.xml:25
+msgid ""
+"Clears the [Color] at [code]name[/code] if the theme has [code]node_type[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Theme.xml:33
+msgid ""
+"Clears the constant at [code]name[/code] if the theme has [code]node_type[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Theme.xml:41
+msgid ""
+"Clears the [Font] at [code]name[/code] if the theme has [code]node_type[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Theme.xml:49
+msgid ""
+"Clears the icon at [code]name[/code] if the theme has [code]node_type[/code]."
+msgstr ""
+
+#: doc/classes/Theme.xml:57
+msgid ""
+"Clears [StyleBox] at [code]name[/code] if the theme has [code]node_type[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Theme.xml:66
+msgid ""
+"Clears the theme item of [code]data_type[/code] at [code]name[/code] if the "
+"theme has [code]node_type[/code]."
+msgstr ""
+
+#: doc/classes/Theme.xml:72
+msgid "Sets the theme's values to a copy of the default theme values."
+msgstr ""
+
+#: doc/classes/Theme.xml:79
+msgid "Sets the theme's values to a copy of a given theme."
+msgstr ""
+
+#: doc/classes/Theme.xml:87
+msgid ""
+"Returns the [Color] at [code]name[/code] if the theme has [code]node_type[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Theme.xml:94
+msgid ""
+"Returns all the [Color]s as a [PoolStringArray] filled with each [Color]'s "
+"name, for use in [method get_color], if the theme has [code]node_type[/code]."
+msgstr ""
+
+#: doc/classes/Theme.xml:100
+msgid ""
+"Returns all the [Color] types as a [PoolStringArray] filled with unique type "
+"names, for use in [method get_color] and/or [method get_color_list]."
+msgstr ""
+
+#: doc/classes/Theme.xml:108
+msgid ""
+"Returns the constant at [code]name[/code] if the theme has [code]node_type[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Theme.xml:115
+msgid ""
+"Returns all the constants as a [PoolStringArray] filled with each constant's "
+"name, for use in [method get_constant], if the theme has [code]node_type[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Theme.xml:121
+msgid ""
+"Returns all the constant types as a [PoolStringArray] filled with unique "
+"type names, for use in [method get_constant] and/or [method "
+"get_constant_list]."
+msgstr ""
+
+#: doc/classes/Theme.xml:129
+msgid ""
+"Returns the [Font] at [code]name[/code] if the theme has [code]node_type[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Theme.xml:136
+msgid ""
+"Returns all the [Font]s as a [PoolStringArray] filled with each [Font]'s "
+"name, for use in [method get_font], if the theme has [code]node_type[/code]."
+msgstr ""
+
+#: doc/classes/Theme.xml:142
+msgid ""
+"Returns all the [Font] types as a [PoolStringArray] filled with unique type "
+"names, for use in [method get_font] and/or [method get_font_list]."
+msgstr ""
+
+#: doc/classes/Theme.xml:150
+msgid ""
+"Returns the icon [Texture] at [code]name[/code] if the theme has "
+"[code]node_type[/code]."
+msgstr ""
+
+#: doc/classes/Theme.xml:157
+msgid ""
+"Returns all the icons as a [PoolStringArray] filled with each [Texture]'s "
+"name, for use in [method get_icon], if the theme has [code]node_type[/code]."
+msgstr ""
+
+#: doc/classes/Theme.xml:163
+msgid ""
+"Returns all the icon types as a [PoolStringArray] filled with unique type "
+"names, for use in [method get_icon] and/or [method get_icon_list]."
+msgstr ""
+
+#: doc/classes/Theme.xml:171
+msgid ""
+"Returns the [StyleBox] at [code]name[/code] if the theme has "
+"[code]node_type[/code].\n"
+"Valid [code]name[/code]s may be found using [method get_stylebox_list]. "
+"Valid [code]node_type[/code]s may be found using [method get_stylebox_types]."
+msgstr ""
+
+#: doc/classes/Theme.xml:179
+msgid ""
+"Returns all the [StyleBox]s as a [PoolStringArray] filled with each "
+"[StyleBox]'s name, for use in [method get_stylebox], if the theme has "
+"[code]node_type[/code].\n"
+"Valid [code]node_type[/code]s may be found using [method get_stylebox_types]."
+msgstr ""
+
+#: doc/classes/Theme.xml:186
+msgid ""
+"Returns all the [StyleBox] types as a [PoolStringArray] filled with unique "
+"type names, for use in [method get_stylebox] and/or [method "
+"get_stylebox_list]."
+msgstr ""
+
+#: doc/classes/Theme.xml:195
+msgid ""
+"Returns the theme item of [code]data_type[/code] at [code]name[/code] if the "
+"theme has [code]node_type[/code].\n"
+"Valid [code]name[/code]s may be found using [method get_theme_item_list] or "
+"a data type specific method. Valid [code]node_type[/code]s may be found "
+"using [method get_theme_item_types] or a data type specific method."
+msgstr ""
+
+#: doc/classes/Theme.xml:204
+msgid ""
+"Returns all the theme items of [code]data_type[/code] as a [PoolStringArray] "
+"filled with each theme items's name, for use in [method get_theme_item] or a "
+"data type specific method, if the theme has [code]node_type[/code].\n"
+"Valid [code]node_type[/code]s may be found using [method "
+"get_theme_item_types] or a data type specific method."
+msgstr ""
+
+#: doc/classes/Theme.xml:212
+msgid ""
+"Returns all the theme items of [code]data_type[/code] types as a "
+"[PoolStringArray] filled with unique type names, for use in [method "
+"get_theme_item], [method get_theme_item_list] or data type specific methods."
+msgstr ""
+
+#: doc/classes/Theme.xml:219
+msgid ""
+"Returns all the theme types as a [PoolStringArray] filled with unique type "
+"names, for use in other [code]get_*[/code] functions of this theme.\n"
+"[b]Note:[/b] [code]node_type[/code] has no effect and will be removed in "
+"future version."
+msgstr ""
+
+#: doc/classes/Theme.xml:228
+msgid ""
+"Returns [code]true[/code] if [Color] with [code]name[/code] is in "
+"[code]node_type[/code].\n"
+"Returns [code]false[/code] if the theme does not have [code]node_type[/code]."
+msgstr ""
+
+#: doc/classes/Theme.xml:237
+msgid ""
+"Returns [code]true[/code] if constant with [code]name[/code] is in "
+"[code]node_type[/code].\n"
+"Returns [code]false[/code] if the theme does not have [code]node_type[/code]."
+msgstr ""
+
+#: doc/classes/Theme.xml:244
+msgid ""
+"Returns [code]true[/code] if this theme has a valid [member default_font] "
+"value."
+msgstr ""
+
+#: doc/classes/Theme.xml:252
+msgid ""
+"Returns [code]true[/code] if [Font] with [code]name[/code] is in "
+"[code]node_type[/code].\n"
+"Returns [code]false[/code] if the theme does not have [code]node_type[/code]."
+msgstr ""
+
+#: doc/classes/Theme.xml:261
+msgid ""
+"Returns [code]true[/code] if icon [Texture] with [code]name[/code] is in "
+"[code]node_type[/code].\n"
+"Returns [code]false[/code] if the theme does not have [code]node_type[/code]."
+msgstr ""
+
+#: doc/classes/Theme.xml:270
+msgid ""
+"Returns [code]true[/code] if [StyleBox] with [code]name[/code] is in "
+"[code]node_type[/code].\n"
+"Returns [code]false[/code] if the theme does not have [code]node_type[/code]."
+msgstr ""
+
+#: doc/classes/Theme.xml:280
+msgid ""
+"Returns [code]true[/code] if a theme item of [code]data_type[/code] with "
+"[code]name[/code] is in [code]node_type[/code].\n"
+"Returns [code]false[/code] if the theme does not have [code]node_type[/code]."
+msgstr ""
+
+#: doc/classes/Theme.xml:288
+msgid ""
+"Adds missing and overrides existing definitions with values from the "
+"[code]other[/code] [Theme].\n"
+"[b]Note:[/b] This modifies the current theme. If you want to merge two "
+"themes together without modifying either one, create a new empty theme and "
+"merge the other two into it one after another."
+msgstr ""
+
+#: doc/classes/Theme.xml:298
+msgid ""
+"Renames the [Color] at [code]old_name[/code] to [code]name[/code] if the "
+"theme has [code]node_type[/code]. If [code]name[/code] is already taken, "
+"this method fails."
+msgstr ""
+
+#: doc/classes/Theme.xml:307
+msgid ""
+"Renames the constant at [code]old_name[/code] to [code]name[/code] if the "
+"theme has [code]node_type[/code]. If [code]name[/code] is already taken, "
+"this method fails."
+msgstr ""
+
+#: doc/classes/Theme.xml:316
+msgid ""
+"Renames the [Font] at [code]old_name[/code] to [code]name[/code] if the "
+"theme has [code]node_type[/code]. If [code]name[/code] is already taken, "
+"this method fails."
+msgstr ""
+
+#: doc/classes/Theme.xml:325
+msgid ""
+"Renames the icon at [code]old_name[/code] to [code]name[/code] if the theme "
+"has [code]node_type[/code]. If [code]name[/code] is already taken, this "
+"method fails."
+msgstr ""
+
+#: doc/classes/Theme.xml:334
+msgid ""
+"Renames [StyleBox] at [code]old_name[/code] to [code]name[/code] if the "
+"theme has [code]node_type[/code]. If [code]name[/code] is already taken, "
+"this method fails."
+msgstr ""
+
+#: doc/classes/Theme.xml:344
+msgid ""
+"Renames the theme item of [code]data_type[/code] at [code]old_name[/code] to "
+"[code]name[/code] if the theme has [code]node_type[/code]. If [code]name[/"
+"code] is already taken, this method fails."
+msgstr ""
+
+#: doc/classes/Theme.xml:353
+msgid ""
+"Sets the theme's [Color] to [code]color[/code] at [code]name[/code] in "
+"[code]node_type[/code].\n"
+"Creates [code]node_type[/code] if the theme does not have it."
+msgstr ""
+
+#: doc/classes/Theme.xml:363
+msgid ""
+"Sets the theme's constant to [code]constant[/code] at [code]name[/code] in "
+"[code]node_type[/code].\n"
+"Creates [code]node_type[/code] if the theme does not have it."
+msgstr ""
+
+#: doc/classes/Theme.xml:373
+msgid ""
+"Sets the theme's [Font] to [code]font[/code] at [code]name[/code] in "
+"[code]node_type[/code].\n"
+"Creates [code]node_type[/code] if the theme does not have it."
+msgstr ""
+
+#: doc/classes/Theme.xml:383
+msgid ""
+"Sets the theme's icon [Texture] to [code]texture[/code] at [code]name[/code] "
+"in [code]node_type[/code].\n"
+"Creates [code]node_type[/code] if the theme does not have it."
+msgstr ""
+
+#: doc/classes/Theme.xml:393
+msgid ""
+"Sets theme's [StyleBox] to [code]stylebox[/code] at [code]name[/code] in "
+"[code]node_type[/code].\n"
+"Creates [code]node_type[/code] if the theme does not have it."
+msgstr ""
+
+#: doc/classes/Theme.xml:404
+msgid ""
+"Sets the theme item of [code]data_type[/code] to [code]value[/code] at "
+"[code]name[/code] in [code]node_type[/code].\n"
+"Does nothing if the [code]value[/code] type does not match [code]data_type[/"
+"code].\n"
+"Creates [code]node_type[/code] if the theme does not have it."
+msgstr ""
+
+#: doc/classes/Theme.xml:412
+msgid ""
+"The default font of this [Theme] resource. Used as a fallback value for font "
+"items defined in this theme, but having invalid values. If this value is "
+"also invalid, the global default value is used.\n"
+"Use [method has_default_font] to check if this value is valid."
+msgstr ""
+
+#: doc/classes/Theme.xml:418
+msgid "Theme's [Color] item type."
+msgstr ""
+
+#: doc/classes/Theme.xml:421
+msgid "Theme's constant item type."
+msgstr ""
+
+#: doc/classes/Theme.xml:424
+msgid "Theme's [Font] item type."
+msgstr ""
+
+#: doc/classes/Theme.xml:427
+msgid "Theme's icon [Texture] item type."
+msgstr ""
+
+#: doc/classes/Theme.xml:430
+msgid "Theme's [StyleBox] item type."
+msgstr ""
+
+#: doc/classes/Theme.xml:433
+msgid "Maximum value for the DataType enum."
+msgstr ""
+
+#: doc/classes/Thread.xml:4
+msgid "A unit of execution in a process."
+msgstr ""
+
+#: doc/classes/Thread.xml:7
+msgid ""
+"A unit of execution in a process. Can run methods on [Object]s "
+"simultaneously. The use of synchronization via [Mutex] or [Semaphore] is "
+"advised if working with shared objects.\n"
+"[b]Note:[/b] Breakpoints won't break on code if it's running in a thread. "
+"This is a current limitation of the GDScript debugger."
+msgstr ""
+
+#: doc/classes/Thread.xml:12
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/threads/thread_safe_apis.html"
+msgstr ""
+
+#: doc/classes/Thread.xml:19
+msgid ""
+"Returns the current [Thread]'s ID, uniquely identifying it among all "
+"threads. If the [Thread] is not running this returns an empty string."
+msgstr ""
+
+#: doc/classes/Thread.xml:25
+msgid ""
+"Returns [code]true[/code] if this [Thread] has been started. Once started, "
+"this will return [code]true[/code] until it is joined using [method "
+"wait_to_finish]. For checking if a [Thread] is still executing its task, use "
+"[method is_alive]."
+msgstr ""
+
+#: doc/classes/Thread.xml:31
+msgid ""
+"Returns [code]true[/code] if this [Thread] is currently running. This is "
+"useful for determining if [method wait_to_finish] can be called without "
+"blocking the calling thread.\n"
+"To check if a [Thread] is joinable, use [method is_active]."
+msgstr ""
+
+#: doc/classes/Thread.xml:42
+msgid ""
+"Starts a new [Thread] that runs [code]method[/code] on object "
+"[code]instance[/code] with [code]userdata[/code] passed as an argument. Even "
+"if no userdata is passed, [code]method[/code] must accept one argument and "
+"it will be null. The [code]priority[/code] of the [Thread] can be changed by "
+"passing a value from the [enum Priority] enum.\n"
+"Returns [constant OK] on success, or [constant ERR_CANT_CREATE] on failure."
+msgstr ""
+
+#: doc/classes/Thread.xml:49
+msgid ""
+"Joins the [Thread] and waits for it to finish. Returns the output of the "
+"method passed to [method start].\n"
+"Should either be used when you want to retrieve the value returned from the "
+"method called by the [Thread] or before freeing the instance that contains "
+"the [Thread].\n"
+"To determine if this can be called without blocking the calling thread, "
+"check if [method is_alive] is [code]false[/code].\n"
+"[b]Note:[/b] After the [Thread] finishes joining it will be disposed. If you "
+"want to use it again you will have to create a new instance of it."
+msgstr ""
+
+#: doc/classes/Thread.xml:58
+msgid "A thread running with lower priority than normally."
+msgstr ""
+
+#: doc/classes/Thread.xml:61
+msgid "A thread with a standard priority."
+msgstr ""
+
+#: doc/classes/Thread.xml:64
+msgid "A thread running with higher priority than normally."
+msgstr ""
+
+#: doc/classes/TileMap.xml:4
+msgid "Node for 2D tile-based maps."
+msgstr ""
+
+#: doc/classes/TileMap.xml:7
+msgid ""
+"Node for 2D tile-based maps. Tilemaps use a [TileSet] which contain a list "
+"of tiles (textures plus optional collision, navigation, and/or occluder "
+"shapes) which are used to create grid-based maps.\n"
+"When doing physics queries against the tilemap, the cell coordinates are "
+"encoded as [code]metadata[/code] for each detected collision shape returned "
+"by methods such as [method Physics2DDirectSpaceState.intersect_shape], "
+"[method Physics2DDirectBodyState.get_contact_collider_shape_metadata], etc."
+msgstr ""
+
+#: doc/classes/TileMap.xml:11 doc/classes/TileSet.xml:11
+msgid "https://docs.godotengine.org/en/3.4/tutorials/2d/using_tilemaps.html"
+msgstr ""
+
+#: doc/classes/TileMap.xml:14 doc/classes/TileSet.xml:14
+msgid "https://godotengine.org/asset-library/asset/111"
+msgstr ""
+
+#: doc/classes/TileMap.xml:23
+msgid "Clears all cells."
+msgstr ""
+
+#: doc/classes/TileMap.xml:29
+msgid "Clears cells that do not exist in the tileset."
+msgstr ""
+
+#: doc/classes/TileMap.xml:37
+msgid ""
+"Returns the tile index of the given cell. If no tile exists in the cell, "
+"returns [constant INVALID_CELL]."
+msgstr ""
+
+#: doc/classes/TileMap.xml:45
+msgid ""
+"Returns the coordinate (subtile column and row) of the autotile variation in "
+"the tileset. Returns a zero vector if the cell doesn't have autotiling."
+msgstr ""
+
+#: doc/classes/TileMap.xml:52
+msgid ""
+"Returns the tile index of the cell given by a Vector2. If no tile exists in "
+"the cell, returns [constant INVALID_CELL]."
+msgstr ""
+
+#: doc/classes/TileMap.xml:59
+msgid "Returns [code]true[/code] if the given collision layer bit is set."
+msgstr ""
+
+#: doc/classes/TileMap.xml:66
+msgid "Returns [code]true[/code] if the given collision mask bit is set."
+msgstr ""
+
+#: doc/classes/TileMap.xml:72
+msgid ""
+"Returns a [Vector2] array with the positions of all cells containing a tile "
+"from the tileset (i.e. a tile index different from [code]-1[/code])."
+msgstr ""
+
+#: doc/classes/TileMap.xml:79
+msgid ""
+"Returns an array of all cells with the given tile index specified in "
+"[code]id[/code]."
+msgstr ""
+
+#: doc/classes/TileMap.xml:85
+msgid "Returns a rectangle enclosing the used (non-empty) tiles of the map."
+msgstr ""
+
+#: doc/classes/TileMap.xml:93
+msgid ""
+"Returns [code]true[/code] if the given cell is transposed, i.e. the X and Y "
+"axes are swapped."
+msgstr ""
+
+#: doc/classes/TileMap.xml:101
+msgid "Returns [code]true[/code] if the given cell is flipped in the X axis."
+msgstr ""
+
+#: doc/classes/TileMap.xml:109
+msgid "Returns [code]true[/code] if the given cell is flipped in the Y axis."
+msgstr ""
+
+#: doc/classes/TileMap.xml:117
+msgid ""
+"Returns the local position of the top left corner of the cell corresponding "
+"to the given tilemap (grid-based) coordinates.\n"
+"To get the global position, use [method Node2D.to_global]:\n"
+"[codeblock]\n"
+"var local_position = my_tilemap.map_to_world(map_position)\n"
+"var global_position = my_tilemap.to_global(local_position)\n"
+"[/codeblock]\n"
+"Optionally, the tilemap's half offset can be ignored."
+msgstr ""
+
+#: doc/classes/TileMap.xml:136
+msgid ""
+"Sets the tile index for the cell given by a Vector2.\n"
+"An index of [code]-1[/code] clears the cell.\n"
+"Optionally, the tile can also be flipped, transposed, or given autotile "
+"coordinates. The autotile coordinate refers to the column and row of the "
+"subtile.\n"
+"[b]Note:[/b] Data such as navigation polygons and collision shapes are not "
+"immediately updated for performance reasons.\n"
+"If you need these to be immediately updated, you can call [method "
+"update_dirty_quadrants].\n"
+"Overriding this method also overrides it internally, allowing custom logic "
+"to be implemented when tiles are placed/removed:\n"
+"[codeblock]\n"
+"func set_cell(x, y, tile, flip_x=false, flip_y=false, transpose=false, "
+"autotile_coord=Vector2()):\n"
+" # Write your custom logic here.\n"
+" # To call the default method:\n"
+" .set_cell(x, y, tile, flip_x, flip_y, transpose, autotile_coord)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/TileMap.xml:158
+msgid ""
+"Sets the tile index for the given cell.\n"
+"An index of [code]-1[/code] clears the cell.\n"
+"Optionally, the tile can also be flipped or transposed.\n"
+"[b]Note:[/b] Data such as navigation polygons and collision shapes are not "
+"immediately updated for performance reasons.\n"
+"If you need these to be immediately updated, you can call [method "
+"update_dirty_quadrants]."
+msgstr ""
+
+#: doc/classes/TileMap.xml:170
+msgid "Sets the given collision layer bit."
+msgstr ""
+
+#: doc/classes/TileMap.xml:178
+msgid "Sets the given collision mask bit."
+msgstr ""
+
+#: doc/classes/TileMap.xml:185
+msgid ""
+"Applies autotiling rules to the cell (and its adjacent cells) referenced by "
+"its grid-based X and Y coordinates."
+msgstr ""
+
+#: doc/classes/TileMap.xml:193
+msgid ""
+"Applies autotiling rules to the cells in the given region (specified by grid-"
+"based X and Y coordinates).\n"
+"Calling with invalid (or missing) parameters applies autotiling rules for "
+"the entire tilemap."
+msgstr ""
+
+#: doc/classes/TileMap.xml:200
+msgid ""
+"Updates the tile map's quadrants, allowing things such as navigation and "
+"collision shapes to be immediately used if modified."
+msgstr ""
+
+#: doc/classes/TileMap.xml:207
+msgid ""
+"Returns the tilemap (grid-based) coordinates corresponding to the given "
+"local position.\n"
+"To use this with a global position, first determine the local position with "
+"[method Node2D.to_local]:\n"
+"[codeblock]\n"
+"var local_position = my_tilemap.to_local(global_position)\n"
+"var map_position = my_tilemap.world_to_map(local_position)\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/TileMap.xml:218
+msgid "If [code]true[/code], the cell's UVs will be clipped."
+msgstr ""
+
+#: doc/classes/TileMap.xml:221
+msgid "The custom [Transform2D] to be applied to the TileMap's cells."
+msgstr ""
+
+#: doc/classes/TileMap.xml:224
+msgid ""
+"Amount to offset alternating tiles. See [enum HalfOffset] for possible "
+"values."
+msgstr ""
+
+#: doc/classes/TileMap.xml:227
+msgid ""
+"The TileMap's quadrant size. Optimizes drawing by batching, using chunks of "
+"this size."
+msgstr ""
+
+#: doc/classes/TileMap.xml:230
+msgid "The TileMap's cell size."
+msgstr ""
+
+#: doc/classes/TileMap.xml:233
+msgid "Position for tile origin. See [enum TileOrigin] for possible values."
+msgstr ""
+
+#: doc/classes/TileMap.xml:236
+msgid ""
+"If [code]true[/code], the TileMap's direct children will be drawn in order "
+"of their Y coordinate."
+msgstr ""
+
+#: doc/classes/TileMap.xml:239
+msgid ""
+"If [code]true[/code], the textures will be centered in the middle of each "
+"tile. This is useful for certain isometric or top-down modes when textures "
+"are made larger or smaller than the tiles (e.g. to avoid flickering on tile "
+"edges). The offset is still applied, but from the center of the tile. If "
+"used, [member compatibility_mode] is ignored.\n"
+"If [code]false[/code], the texture position start in the top-left corner "
+"unless [member compatibility_mode] is enabled."
+msgstr ""
+
+#: doc/classes/TileMap.xml:243
+msgid ""
+"Bounce value for static body collisions (see [code]collision_use_kinematic[/"
+"code])."
+msgstr ""
+
+#: doc/classes/TileMap.xml:246
+msgid ""
+"Friction value for static body collisions (see "
+"[code]collision_use_kinematic[/code])."
+msgstr ""
+
+#: doc/classes/TileMap.xml:249
+msgid ""
+"The collision layer(s) for all colliders in the TileMap. See [url=https://"
+"docs.godotengine.org/en/3.4/tutorials/physics/physics_introduction."
+"html#collision-layers-and-masks]Collision layers and masks[/url] in the "
+"documentation for more information."
+msgstr ""
+
+#: doc/classes/TileMap.xml:252
+msgid ""
+"The collision mask(s) for all colliders in the TileMap. See [url=https://"
+"docs.godotengine.org/en/3.4/tutorials/physics/physics_introduction."
+"html#collision-layers-and-masks]Collision layers and masks[/url] in the "
+"documentation for more information."
+msgstr ""
+
+#: doc/classes/TileMap.xml:255
+msgid ""
+"If [code]true[/code], TileMap collisions will be handled as a kinematic "
+"body. If [code]false[/code], collisions will be handled as static body."
+msgstr ""
+
+#: doc/classes/TileMap.xml:258
+msgid ""
+"If [code]true[/code], this tilemap's collision shape will be added to the "
+"collision shape of the parent. The parent has to be a [CollisionObject2D]."
+msgstr ""
+
+#: doc/classes/TileMap.xml:261
+msgid ""
+"If [code]true[/code], the compatibility with the tilemaps made in Godot 3.1 "
+"or earlier is maintained (textures move when the tile origin changes and "
+"rotate if the texture size is not homogeneous). This mode presents problems "
+"when doing [code]flip_h[/code], [code]flip_v[/code] and [code]transpose[/"
+"code] tile operations on non-homogeneous isometric tiles (e.g. 2:1), in "
+"which the texture could not coincide with the collision, thus it is not "
+"recommended for isometric or non-square tiles.\n"
+"If [code]false[/code], the textures do not move when doing [code]flip_h[/"
+"code], [code]flip_v[/code] operations if no offset is used, nor when "
+"changing the tile origin.\n"
+"The compatibility mode doesn't work with the [member centered_textures] "
+"option, because displacing textures with the [member cell_tile_origin] "
+"option or in irregular tiles is not relevant when centering those textures."
+msgstr ""
+
+#: doc/classes/TileMap.xml:266
+msgid "The TileMap orientation mode. See [enum Mode] for possible values."
+msgstr ""
+
+#: doc/classes/TileMap.xml:269
+msgid ""
+"The light mask assigned to all light occluders in the TileMap. The TileSet's "
+"light occluders will cast shadows only from Light2D(s) that have the same "
+"light mask(s)."
+msgstr ""
+
+#: doc/classes/TileMap.xml:272
+msgid ""
+"If [code]true[/code], collision shapes are visible in the editor. Doesn't "
+"affect collision shapes visibility at runtime. To show collision shapes at "
+"runtime, enable [b]Visible Collision Shapes[/b] in the [b]Debug[/b] menu "
+"instead."
+msgstr ""
+
+#: doc/classes/TileMap.xml:275
+msgid "The assigned [TileSet]."
+msgstr ""
+
+#: doc/classes/TileMap.xml:281
+msgid "Emitted when a tilemap setting has changed."
+msgstr ""
+
+#: doc/classes/TileMap.xml:287
+msgid "Returned when a cell doesn't exist."
+msgstr ""
+
+#: doc/classes/TileMap.xml:290
+msgid "Orthogonal orientation mode."
+msgstr ""
+
+#: doc/classes/TileMap.xml:293
+msgid "Isometric orientation mode."
+msgstr ""
+
+#: doc/classes/TileMap.xml:296
+msgid "Custom orientation mode."
+msgstr ""
+
+#: doc/classes/TileMap.xml:299
+msgid "Half offset on the X coordinate."
+msgstr ""
+
+#: doc/classes/TileMap.xml:302
+msgid "Half offset on the Y coordinate."
+msgstr ""
+
+#: doc/classes/TileMap.xml:305
+msgid "Half offset disabled."
+msgstr ""
+
+#: doc/classes/TileMap.xml:308
+msgid "Half offset on the X coordinate (negative)."
+msgstr ""
+
+#: doc/classes/TileMap.xml:311
+msgid "Half offset on the Y coordinate (negative)."
+msgstr ""
+
+#: doc/classes/TileMap.xml:314
+msgid "Tile origin at its top-left corner."
+msgstr ""
+
+#: doc/classes/TileMap.xml:317
+msgid "Tile origin at its center."
+msgstr ""
+
+#: doc/classes/TileMap.xml:320
+msgid "Tile origin at its bottom-left corner."
+msgstr ""
+
+#: doc/classes/TileSet.xml:4
+msgid "Tile library for tilemaps."
+msgstr ""
+
+#: doc/classes/TileSet.xml:7
+msgid ""
+"A TileSet is a library of tiles for a [TileMap]. It contains a list of "
+"tiles, each consisting of a sprite and optional collision shapes.\n"
+"Tiles are referenced by a unique integer ID."
+msgstr ""
+
+#: doc/classes/TileSet.xml:42
+msgid ""
+"Determines when the auto-tiler should consider two different auto-tile IDs "
+"to be bound together.\n"
+"[b]Note:[/b] [code]neighbor_id[/code] will be [code]-1[/code] ([constant "
+"TileMap.INVALID_CELL]) when checking a tile against an empty neighbor tile."
+msgstr ""
+
+#: doc/classes/TileSet.xml:50
+msgid "Clears all bitmask information of the autotile."
+msgstr ""
+
+#: doc/classes/TileSet.xml:58
+msgid ""
+"Returns the bitmask of the subtile from an autotile given its coordinates.\n"
+"The value is the sum of the values in [enum AutotileBindings] present in the "
+"subtile (e.g. a value of 5 means the bitmask has bindings in both the top "
+"left and top right)."
+msgstr ""
+
+#: doc/classes/TileSet.xml:66
+msgid "Returns the [enum BitmaskMode] of the autotile."
+msgstr ""
+
+#: doc/classes/TileSet.xml:73
+msgid ""
+"Returns the subtile that's being used as an icon in an atlas/autotile given "
+"its coordinates.\n"
+"The subtile defined as the icon will be used as a fallback when the atlas/"
+"autotile's bitmask information is incomplete. It will also be used to "
+"represent it in the TileSet editor."
+msgstr ""
+
+#: doc/classes/TileSet.xml:82
+msgid ""
+"Returns the light occluder of the subtile from an atlas/autotile given its "
+"coordinates."
+msgstr ""
+
+#: doc/classes/TileSet.xml:90
+msgid ""
+"Returns the navigation polygon of the subtile from an atlas/autotile given "
+"its coordinates."
+msgstr ""
+
+#: doc/classes/TileSet.xml:97
+msgid "Returns the size of the subtiles in an atlas/autotile."
+msgstr ""
+
+#: doc/classes/TileSet.xml:104
+msgid "Returns the spacing between subtiles of the atlas/autotile."
+msgstr ""
+
+#: doc/classes/TileSet.xml:112
+msgid ""
+"Returns the priority of the subtile from an autotile given its coordinates.\n"
+"When more than one subtile has the same bitmask value, one of them will be "
+"picked randomly for drawing. Its priority will define how often it will be "
+"picked."
+msgstr ""
+
+#: doc/classes/TileSet.xml:121
+msgid ""
+"Returns the drawing index of the subtile from an atlas/autotile given its "
+"coordinates."
+msgstr ""
+
+#: doc/classes/TileSet.xml:130
+msgid ""
+"Sets the bitmask of the subtile from an autotile given its coordinates.\n"
+"The value is the sum of the values in [enum AutotileBindings] present in the "
+"subtile (e.g. a value of 5 means the bitmask has bindings in both the top "
+"left and top right)."
+msgstr ""
+
+#: doc/classes/TileSet.xml:139
+msgid "Sets the [enum BitmaskMode] of the autotile."
+msgstr ""
+
+#: doc/classes/TileSet.xml:147
+msgid ""
+"Sets the subtile that will be used as an icon in an atlas/autotile given its "
+"coordinates.\n"
+"The subtile defined as the icon will be used as a fallback when the atlas/"
+"autotile's bitmask information is incomplete. It will also be used to "
+"represent it in the TileSet editor."
+msgstr ""
+
+#: doc/classes/TileSet.xml:157
+msgid ""
+"Sets the light occluder of the subtile from an atlas/autotile given its "
+"coordinates."
+msgstr ""
+
+#: doc/classes/TileSet.xml:166
+msgid ""
+"Sets the navigation polygon of the subtile from an atlas/autotile given its "
+"coordinates."
+msgstr ""
+
+#: doc/classes/TileSet.xml:174
+msgid "Sets the size of the subtiles in an atlas/autotile."
+msgstr ""
+
+#: doc/classes/TileSet.xml:182
+msgid "Sets the spacing between subtiles of the atlas/autotile."
+msgstr ""
+
+#: doc/classes/TileSet.xml:191
+msgid ""
+"Sets the priority of the subtile from an autotile given its coordinates.\n"
+"When more than one subtile has the same bitmask value, one of them will be "
+"picked randomly for drawing. Its priority will define how often it will be "
+"picked."
+msgstr ""
+
+#: doc/classes/TileSet.xml:201
+msgid ""
+"Sets the drawing index of the subtile from an atlas/autotile given its "
+"coordinates."
+msgstr ""
+
+#: doc/classes/TileSet.xml:207
+msgid "Clears all tiles."
+msgstr ""
+
+#: doc/classes/TileSet.xml:214
+msgid "Creates a new tile with the given ID."
+msgstr ""
+
+#: doc/classes/TileSet.xml:221
+msgid "Returns the first tile matching the given name."
+msgstr ""
+
+#: doc/classes/TileSet.xml:227
+msgid ""
+"Returns the ID following the last currently used ID, useful when creating a "
+"new tile."
+msgstr ""
+
+#: doc/classes/TileSet.xml:233
+msgid "Returns an array of all currently used tile IDs."
+msgstr ""
+
+#: doc/classes/TileSet.xml:240
+msgid "Removes the given tile ID."
+msgstr ""
+
+#: doc/classes/TileSet.xml:251
+msgid "Adds a shape to the tile."
+msgstr ""
+
+#: doc/classes/TileSet.xml:258
+msgid "Returns the tile's light occluder."
+msgstr ""
+
+#: doc/classes/TileSet.xml:265
+msgid "Returns the tile's material."
+msgstr ""
+
+#: doc/classes/TileSet.xml:272
+msgid "Returns the tile's modulation color."
+msgstr ""
+
+#: doc/classes/TileSet.xml:279
+msgid "Returns the tile's name."
+msgstr ""
+
+#: doc/classes/TileSet.xml:286
+msgid "Returns the navigation polygon of the tile."
+msgstr ""
+
+#: doc/classes/TileSet.xml:293
+msgid "Returns the offset of the tile's navigation polygon."
+msgstr ""
+
+#: doc/classes/TileSet.xml:300
+msgid "Returns the tile's normal map texture."
+msgstr ""
+
+#: doc/classes/TileSet.xml:307
+msgid "Returns the offset of the tile's light occluder."
+msgstr ""
+
+#: doc/classes/TileSet.xml:314
+msgid "Returns the tile sub-region in the texture."
+msgstr ""
+
+#: doc/classes/TileSet.xml:322
+msgid "Returns a tile's given shape."
+msgstr ""
+
+#: doc/classes/TileSet.xml:329
+msgid "Returns the number of shapes assigned to a tile."
+msgstr ""
+
+#: doc/classes/TileSet.xml:337
+msgid "Returns the offset of a tile's shape."
+msgstr ""
+
+#: doc/classes/TileSet.xml:345
+msgid "Returns the one-way collision value of a tile's shape."
+msgstr ""
+
+#: doc/classes/TileSet.xml:360
+msgid "Returns the [Transform2D] of a tile's shape."
+msgstr ""
+
+#: doc/classes/TileSet.xml:367
+msgid ""
+"Returns an array of dictionaries describing the tile's shapes.\n"
+"[b]Dictionary structure in the array returned by this method:[/b]\n"
+"[codeblock]\n"
+"{\n"
+" \"autotile_coord\": Vector2,\n"
+" \"one_way\": bool,\n"
+" \"one_way_margin\": int,\n"
+" \"shape\": CollisionShape2D,\n"
+" \"shape_transform\": Transform2D,\n"
+"}\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/TileSet.xml:384
+msgid "Returns the tile's texture."
+msgstr ""
+
+#: doc/classes/TileSet.xml:391
+msgid "Returns the texture offset of the tile."
+msgstr ""
+
+#: doc/classes/TileSet.xml:398
+msgid "Returns the tile's [enum TileMode]."
+msgstr ""
+
+#: doc/classes/TileSet.xml:405
+msgid "Returns the tile's Z index (drawing layer)."
+msgstr ""
+
+#: doc/classes/TileSet.xml:413
+msgid "Sets a light occluder for the tile."
+msgstr ""
+
+#: doc/classes/TileSet.xml:421
+msgid "Sets the tile's material."
+msgstr ""
+
+#: doc/classes/TileSet.xml:429
+msgid "Sets the tile's modulation color."
+msgstr ""
+
+#: doc/classes/TileSet.xml:437
+msgid "Sets the tile's name."
+msgstr ""
+
+#: doc/classes/TileSet.xml:445
+msgid "Sets the tile's navigation polygon."
+msgstr ""
+
+#: doc/classes/TileSet.xml:453
+msgid "Sets an offset for the tile's navigation polygon."
+msgstr ""
+
+#: doc/classes/TileSet.xml:461
+msgid ""
+"Sets the tile's normal map texture.\n"
+"[b]Note:[/b] Godot expects the normal map to use X+, Y-, and Z+ coordinates. "
+"See [url=http://wiki.polycount.com/wiki/"
+"Normal_Map_Technical_Details#Common_Swizzle_Coordinates]this page[/url] for "
+"a comparison of normal map coordinates expected by popular engines."
+msgstr ""
+
+#: doc/classes/TileSet.xml:470
+msgid "Sets an offset for the tile's light occluder."
+msgstr ""
+
+#: doc/classes/TileSet.xml:478
+msgid ""
+"Sets the tile's sub-region in the texture. This is common in texture atlases."
+msgstr ""
+
+#: doc/classes/TileSet.xml:487
+msgid "Sets a shape for the tile, enabling collision."
+msgstr ""
+
+#: doc/classes/TileSet.xml:496
+msgid "Sets the offset of a tile's shape."
+msgstr ""
+
+#: doc/classes/TileSet.xml:505
+msgid "Enables one-way collision on a tile's shape."
+msgstr ""
+
+#: doc/classes/TileSet.xml:522
+msgid "Sets a [Transform2D] on a tile's shape."
+msgstr ""
+
+#: doc/classes/TileSet.xml:530
+msgid "Sets an array of shapes for the tile, enabling collision."
+msgstr ""
+
+#: doc/classes/TileSet.xml:538
+msgid "Sets the tile's texture."
+msgstr ""
+
+#: doc/classes/TileSet.xml:546
+msgid "Sets the tile's texture offset."
+msgstr ""
+
+#: doc/classes/TileSet.xml:554
+msgid "Sets the tile's [enum TileMode]."
+msgstr ""
+
+#: doc/classes/TileSet.xml:562
+msgid "Sets the tile's drawing index."
+msgstr ""
+
+#: doc/classes/Timer.xml:4
+msgid "A countdown timer."
+msgstr ""
+
+#: doc/classes/Timer.xml:7
+msgid ""
+"Counts down a specified interval and emits a signal on reaching 0. Can be "
+"set to repeat or \"one-shot\" mode.\n"
+"[b]Note:[/b] To create a one-shot timer without instantiating a node, use "
+"[method SceneTree.create_timer]."
+msgstr ""
+
+#: doc/classes/Timer.xml:17
+msgid "Returns [code]true[/code] if the timer is stopped."
+msgstr ""
+
+#: doc/classes/Timer.xml:24
+msgid ""
+"Starts the timer. Sets [code]wait_time[/code] to [code]time_sec[/code] if "
+"[code]time_sec > 0[/code]. This also resets the remaining time to "
+"[code]wait_time[/code].\n"
+"[b]Note:[/b] This method will not resume a paused timer. See [member paused]."
+msgstr ""
+
+#: doc/classes/Timer.xml:31
+msgid "Stops the timer."
+msgstr ""
+
+#: doc/classes/Timer.xml:37
+msgid ""
+"If [code]true[/code], the timer will automatically start when entering the "
+"scene tree.\n"
+"[b]Note:[/b] This property is automatically set to [code]false[/code] after "
+"the timer enters the scene tree and starts."
+msgstr ""
+
+#: doc/classes/Timer.xml:41
+msgid ""
+"If [code]true[/code], the timer will stop when reaching 0. If [code]false[/"
+"code], it will restart."
+msgstr ""
+
+#: doc/classes/Timer.xml:44
+msgid ""
+"If [code]true[/code], the timer is paused and will not process until it is "
+"unpaused again, even if [method start] is called."
+msgstr ""
+
+#: doc/classes/Timer.xml:47
+msgid "Processing mode. See [enum TimerProcessMode]."
+msgstr ""
+
+#: doc/classes/Timer.xml:50
+msgid ""
+"The timer's remaining time in seconds. Returns 0 if the timer is inactive.\n"
+"[b]Note:[/b] You cannot set this value. To change the timer's remaining "
+"time, use [method start]."
+msgstr ""
+
+#: doc/classes/Timer.xml:54
+msgid ""
+"The wait time in seconds.\n"
+"[b]Note:[/b] Timers can only emit once per rendered frame at most (or once "
+"per physics frame if [member process_mode] is [constant "
+"TIMER_PROCESS_PHYSICS]). This means very low wait times (lower than 0.05 "
+"seconds) will behave in significantly different ways depending on the "
+"rendered framerate. For very low wait times, it is recommended to use a "
+"process loop in a script instead of using a Timer node."
+msgstr ""
+
+#: doc/classes/Timer.xml:67
+msgid ""
+"Update the timer during the physics step at each frame (fixed framerate "
+"processing)."
+msgstr ""
+
+#: doc/classes/Timer.xml:70
+msgid "Update the timer during the idle time at each frame."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:4
+msgid "Flat button helper class."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:7
+msgid ""
+"This is a helper class to generate a flat [Button] (see [member Button."
+"flat]), creating a [ToolButton] is equivalent to:\n"
+"[codeblock]\n"
+"var btn = Button.new()\n"
+"btn.flat = true\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/ToolButton.xml:24
+msgid "[StyleBox] used when the [ToolButton] is disabled."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:27
+msgid ""
+"[StyleBox] used when the [ToolButton] is focused. It is displayed over the "
+"current [StyleBox], so using [StyleBoxEmpty] will just disable the focus "
+"visual effect."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:30
+msgid "[Font] of the [ToolButton]'s text."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:33
+msgid "Default text [Color] of the [ToolButton]."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:36
+msgid "Text [Color] used when the [ToolButton] is disabled."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:39
+msgid ""
+"Text [Color] used when the [ToolButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:42
+msgid "Text [Color] used when the [ToolButton] is being hovered."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:45
+msgid "Text [Color] used when the [ToolButton] is being pressed."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:48
+msgid "[StyleBox] used when the [ToolButton] is being hovered."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:51
+msgid "The horizontal space between [ToolButton]'s icon and text."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:54
+msgid "Default [StyleBox] for the [ToolButton]."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:57
+msgid "[StyleBox] used when the [ToolButton] is being pressed."
+msgstr ""
+
+#: doc/classes/TouchScreenButton.xml:4
+msgid "Button for touch screen devices for gameplay use."
+msgstr ""
+
+#: doc/classes/TouchScreenButton.xml:7
+msgid ""
+"TouchScreenButton allows you to create on-screen buttons for touch devices. "
+"It's intended for gameplay use, such as a unit you have to touch to move. "
+"Unlike [Button], TouchScreenButton supports multitouch out of the box. "
+"Several TouchScreenButtons can be pressed at the same time with touch "
+"input.\n"
+"This node inherits from [Node2D]. Unlike with [Control] nodes, you cannot "
+"set anchors on it. If you want to create menus or user interfaces, you may "
+"want to use [Button] nodes instead. To make button nodes react to touch "
+"events, you can enable the Emulate Mouse option in the Project Settings.\n"
+"You can configure TouchScreenButton to be visible only on touch devices, "
+"helping you develop your game both for desktop and mobile devices."
+msgstr ""
+
+#: doc/classes/TouchScreenButton.xml:17
+msgid "Returns [code]true[/code] if this button is currently pressed."
+msgstr ""
+
+#: doc/classes/TouchScreenButton.xml:23
+msgid "The button's action. Actions can be handled with [InputEventAction]."
+msgstr ""
+
+#: doc/classes/TouchScreenButton.xml:26
+msgid "The button's bitmask."
+msgstr ""
+
+#: doc/classes/TouchScreenButton.xml:29
+msgid "The button's texture for the normal state."
+msgstr ""
+
+#: doc/classes/TouchScreenButton.xml:32
+msgid ""
+"If [code]true[/code], the [signal pressed] and [signal released] signals are "
+"emitted whenever a pressed finger goes in and out of the button, even if the "
+"pressure started outside the active area of the button.\n"
+"[b]Note:[/b] This is a \"pass-by\" (not \"bypass\") press mode."
+msgstr ""
+
+#: doc/classes/TouchScreenButton.xml:36
+msgid "The button's texture for the pressed state."
+msgstr ""
+
+#: doc/classes/TouchScreenButton.xml:39
+msgid "The button's shape."
+msgstr ""
+
+#: doc/classes/TouchScreenButton.xml:42
+msgid ""
+"If [code]true[/code], the button's shape is centered in the provided "
+"texture. If no texture is used, this property has no effect."
+msgstr ""
+
+#: doc/classes/TouchScreenButton.xml:45
+msgid "If [code]true[/code], the button's shape is visible."
+msgstr ""
+
+#: doc/classes/TouchScreenButton.xml:48
+msgid ""
+"The button's visibility mode. See [enum VisibilityMode] for possible values."
+msgstr ""
+
+#: doc/classes/TouchScreenButton.xml:54
+msgid "Emitted when the button is pressed (down)."
+msgstr ""
+
+#: doc/classes/TouchScreenButton.xml:59
+msgid "Emitted when the button is released (up)."
+msgstr ""
+
+#: doc/classes/TouchScreenButton.xml:65
+msgid "Always visible."
+msgstr ""
+
+#: doc/classes/TouchScreenButton.xml:68
+msgid "Visible on touch screens only."
+msgstr ""
+
+#: doc/classes/Transform.xml:4
+msgid "3D transformation (3×4 matrix)."
+msgstr ""
+
+#: doc/classes/Transform.xml:7
+msgid ""
+"3×4 matrix (3 rows, 4 columns) used for 3D linear transformations. It can "
+"represent transformations such as translation, rotation, or scaling. It "
+"consists of a [member basis] (first 3 columns) and a [Vector3] for the "
+"[member origin] (last column).\n"
+"For more information, read the \"Matrices and transforms\" documentation "
+"article."
+msgstr ""
+
+#: doc/classes/Transform.xml:26
+msgid ""
+"Constructs a Transform from four [Vector3] values (matrix columns). Each "
+"axis corresponds to local basis vectors (some of which may be scaled)."
+msgstr ""
+
+#: doc/classes/Transform.xml:34
+msgid "Constructs a Transform from a [Basis] and [Vector3]."
+msgstr ""
+
+#: doc/classes/Transform.xml:41
+msgid "Constructs a Transform from a [Transform2D]."
+msgstr ""
+
+#: doc/classes/Transform.xml:48
+msgid ""
+"Constructs a Transform from a [Quat]. The origin will be [code]Vector3(0, 0, "
+"0)[/code]."
+msgstr ""
+
+#: doc/classes/Transform.xml:55
+msgid ""
+"Constructs the Transform from a [Basis]. The origin will be Vector3(0, 0, 0)."
+msgstr ""
+
+#: doc/classes/Transform.xml:61 doc/classes/Transform2D.xml:44
+msgid ""
+"Returns the inverse of the transform, under the assumption that the "
+"transformation is composed of rotation, scaling and translation."
+msgstr ""
+
+#: doc/classes/Transform.xml:69
+msgid ""
+"Interpolates the transform to other Transform by weight amount (on the range "
+"of 0.0 to 1.0)."
+msgstr ""
+
+#: doc/classes/Transform.xml:75
+msgid ""
+"Returns the inverse of the transform, under the assumption that the "
+"transformation is composed of rotation and translation (no scaling, use "
+"affine_inverse for transforms with scaling)."
+msgstr ""
+
+#: doc/classes/Transform.xml:82 doc/classes/Transform2D.xml:99
+msgid ""
+"Returns [code]true[/code] if this transform and [code]transform[/code] are "
+"approximately equal, by calling [code]is_equal_approx[/code] on each "
+"component."
+msgstr ""
+
+#: doc/classes/Transform.xml:90
+msgid ""
+"Returns a copy of the transform rotated such that its -Z axis points towards "
+"the [code]target[/code] position.\n"
+"The transform will first be rotated around the given [code]up[/code] vector, "
+"and then fully aligned to the target by a further rotation around an axis "
+"perpendicular to both the [code]target[/code] and [code]up[/code] vectors.\n"
+"Operations take place in global space."
+msgstr ""
+
+#: doc/classes/Transform.xml:98
+msgid ""
+"Returns the transform with the basis orthogonal (90 degrees), and normalized "
+"axis vectors."
+msgstr ""
+
+#: doc/classes/Transform.xml:106
+msgid ""
+"Rotates the transform around the given axis by the given angle (in radians), "
+"using matrix multiplication. The axis must be a normalized vector."
+msgstr ""
+
+#: doc/classes/Transform.xml:113
+msgid ""
+"Scales basis and origin of the transform by the given scale factor, using "
+"matrix multiplication."
+msgstr ""
+
+#: doc/classes/Transform.xml:120 doc/classes/Transform2D.xml:126
+msgid ""
+"Translates the transform by the given offset, relative to the transform's "
+"basis vectors.\n"
+"Unlike [method rotated] and [method scaled], this does not use matrix "
+"multiplication."
+msgstr ""
+
+#: doc/classes/Transform.xml:128
+msgid ""
+"Transforms the given [Vector3], [Plane], [AABB], or [PoolVector3Array] by "
+"this transform."
+msgstr ""
+
+#: doc/classes/Transform.xml:135
+msgid ""
+"Inverse-transforms the given [Vector3], [Plane], [AABB], or "
+"[PoolVector3Array] by this transform."
+msgstr ""
+
+#: doc/classes/Transform.xml:141
+msgid ""
+"The basis is a matrix containing 3 [Vector3] as its columns: X axis, Y axis, "
+"and Z axis. These vectors can be interpreted as the basis vectors of local "
+"coordinate system traveling with the object."
+msgstr ""
+
+#: doc/classes/Transform.xml:144
+msgid ""
+"The translation offset of the transform (column 3, the fourth column). "
+"Equivalent to array index [code]3[/code]."
+msgstr ""
+
+#: doc/classes/Transform.xml:149
+msgid ""
+"[Transform] with no translation, rotation or scaling applied. When applied "
+"to other data structures, [constant IDENTITY] performs no transformation."
+msgstr ""
+
+#: doc/classes/Transform.xml:152
+msgid "[Transform] with mirroring applied perpendicular to the YZ plane."
+msgstr ""
+
+#: doc/classes/Transform.xml:155
+msgid "[Transform] with mirroring applied perpendicular to the XZ plane."
+msgstr ""
+
+#: doc/classes/Transform.xml:158
+msgid "[Transform] with mirroring applied perpendicular to the XY plane."
+msgstr ""
+
+#: doc/classes/Transform2D.xml:4
+msgid "2D transformation (2×3 matrix)."
+msgstr ""
+
+#: doc/classes/Transform2D.xml:7
+msgid ""
+"2×3 matrix (2 rows, 3 columns) used for 2D linear transformations. It can "
+"represent transformations such as translation, rotation, or scaling. It "
+"consists of three [Vector2] values: [member x], [member y], and the [member "
+"origin].\n"
+"For more information, read the \"Matrices and transforms\" documentation "
+"article."
+msgstr ""
+
+#: doc/classes/Transform2D.xml:21
+msgid "Constructs the transform from a 3D [Transform]."
+msgstr ""
+
+#: doc/classes/Transform2D.xml:30
+msgid ""
+"Constructs the transform from 3 [Vector2] values representing [member x], "
+"[member y], and the [member origin] (the three column vectors)."
+msgstr ""
+
+#: doc/classes/Transform2D.xml:38
+msgid "Constructs the transform from a given angle (in radians) and position."
+msgstr ""
+
+#: doc/classes/Transform2D.xml:51
+msgid ""
+"Returns a vector transformed (multiplied) by the basis matrix.\n"
+"This method does not account for translation (the origin vector)."
+msgstr ""
+
+#: doc/classes/Transform2D.xml:59
+msgid ""
+"Returns a vector transformed (multiplied) by the inverse basis matrix.\n"
+"This method does not account for translation (the origin vector)."
+msgstr ""
+
+#: doc/classes/Transform2D.xml:66
+msgid "Returns the transform's origin (translation)."
+msgstr ""
+
+#: doc/classes/Transform2D.xml:72
+msgid "Returns the transform's rotation (in radians)."
+msgstr ""
+
+#: doc/classes/Transform2D.xml:78
+msgid "Returns the scale."
+msgstr ""
+
+#: doc/classes/Transform2D.xml:86
+msgid ""
+"Returns a transform interpolated between this transform and another by a "
+"given [code]weight[/code] (on the range of 0.0 to 1.0)."
+msgstr ""
+
+#: doc/classes/Transform2D.xml:92
+msgid ""
+"Returns the inverse of the transform, under the assumption that the "
+"transformation is composed of rotation and translation (no scaling, use "
+"[method affine_inverse] for transforms with scaling)."
+msgstr ""
+
+#: doc/classes/Transform2D.xml:105
+msgid ""
+"Returns the transform with the basis orthogonal (90 degrees), and normalized "
+"axis vectors (scale of 1 or -1)."
+msgstr ""
+
+#: doc/classes/Transform2D.xml:112
+msgid ""
+"Rotates the transform by the given angle (in radians), using matrix "
+"multiplication."
+msgstr ""
+
+#: doc/classes/Transform2D.xml:119
+msgid ""
+"Scales the transform by the given scale factor, using matrix multiplication."
+msgstr ""
+
+#: doc/classes/Transform2D.xml:134
+msgid ""
+"Transforms the given [Vector2], [Rect2], or [PoolVector2Array] by this "
+"transform."
+msgstr ""
+
+#: doc/classes/Transform2D.xml:141
+msgid ""
+"Inverse-transforms the given [Vector2], [Rect2], or [PoolVector2Array] by "
+"this transform."
+msgstr ""
+
+#: doc/classes/Transform2D.xml:147
+msgid ""
+"The origin vector (column 2, the third column). Equivalent to array index "
+"[code]2[/code]. The origin vector represents translation."
+msgstr ""
+
+#: doc/classes/Transform2D.xml:158
+msgid ""
+"The identity [Transform2D] with no translation, rotation or scaling applied. "
+"When applied to other data structures, [constant IDENTITY] performs no "
+"transformation."
+msgstr ""
+
+#: doc/classes/Transform2D.xml:161
+msgid "The [Transform2D] that will flip something along the X axis."
+msgstr ""
+
+#: doc/classes/Transform2D.xml:164
+msgid "The [Transform2D] that will flip something along the Y axis."
+msgstr ""
+
+#: doc/classes/Translation.xml:4
+msgid "Language Translation."
+msgstr ""
+
+#: doc/classes/Translation.xml:7
+msgid ""
+"Translations are resources that can be loaded and unloaded on demand. They "
+"map a string to another string."
+msgstr ""
+
+#: doc/classes/Translation.xml:10 doc/classes/TranslationServer.xml:10
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/i18n/internationalizing_games."
+"html"
+msgstr ""
+
+#: doc/classes/Translation.xml:11 doc/classes/TranslationServer.xml:11
+msgid "https://docs.godotengine.org/en/3.4/tutorials/i18n/locales.html"
+msgstr ""
+
+#: doc/classes/Translation.xml:18
+msgid "Virtual method to override [method get_message]."
+msgstr ""
+
+#: doc/classes/Translation.xml:26
+msgid "Adds a message if nonexistent, followed by its translation."
+msgstr ""
+
+#: doc/classes/Translation.xml:33
+msgid "Erases a message."
+msgstr ""
+
+#: doc/classes/Translation.xml:40
+msgid "Returns a message's translation."
+msgstr ""
+
+#: doc/classes/Translation.xml:46
+msgid "Returns the number of existing messages."
+msgstr ""
+
+#: doc/classes/Translation.xml:52
+msgid "Returns all the messages (keys)."
+msgstr ""
+
+#: doc/classes/Translation.xml:58
+msgid "The locale of the translation."
+msgstr ""
+
+#: doc/classes/TranslationServer.xml:4
+msgid "Server that manages all translations."
+msgstr ""
+
+#: doc/classes/TranslationServer.xml:7
+msgid ""
+"Server that manages all translations. Translations can be set to it and "
+"removed from it."
+msgstr ""
+
+#: doc/classes/TranslationServer.xml:18
+msgid "Adds a [Translation] resource."
+msgstr ""
+
+#: doc/classes/TranslationServer.xml:24
+msgid "Clears the server from all translations."
+msgstr ""
+
+#: doc/classes/TranslationServer.xml:30
+msgid "Returns an array of all loaded locales of the project."
+msgstr ""
+
+#: doc/classes/TranslationServer.xml:36
+msgid ""
+"Returns the current locale of the project.\n"
+"See also [method OS.get_locale] and [method OS.get_locale_language] to query "
+"the locale of the user system."
+msgstr ""
+
+#: doc/classes/TranslationServer.xml:44
+msgid ""
+"Returns a locale's language and its variant (e.g. [code]\"en_US\"[/code] "
+"would return [code]\"English (United States)\"[/code])."
+msgstr ""
+
+#: doc/classes/TranslationServer.xml:51
+msgid "Removes the given translation from the server."
+msgstr ""
+
+#: doc/classes/TranslationServer.xml:58
+msgid ""
+"Sets the locale of the project. The [code]locale[/code] string will be "
+"standardized to match known locales (e.g. [code]en-US[/code] would be "
+"matched to [code]en_US[/code]).\n"
+"If translations have been loaded beforehand for the new locale, they will be "
+"applied."
+msgstr ""
+
+#: doc/classes/TranslationServer.xml:66
+msgid "Returns the current locale's translation for the given message (key)."
+msgstr ""
+
+#: doc/classes/Tree.xml:4
+msgid "Control to show a tree of items."
+msgstr ""
+
+#: doc/classes/Tree.xml:7
+msgid ""
+"This shows a tree of items that can be selected, expanded and collapsed. The "
+"tree can have multiple columns with custom controls like text editing, "
+"buttons and popups. It can be useful for structured displays and "
+"interactions.\n"
+"Trees are built via code, using [TreeItem] objects to create the structure. "
+"They have a single root but multiple roots can be simulated if a dummy "
+"hidden root is added.\n"
+"[codeblock]\n"
+"func _ready():\n"
+" var tree = Tree.new()\n"
+" var root = tree.create_item()\n"
+" tree.set_hide_root(true)\n"
+" var child1 = tree.create_item(root)\n"
+" var child2 = tree.create_item(root)\n"
+" var subchild1 = tree.create_item(child1)\n"
+" subchild1.set_text(0, \"Subchild1\")\n"
+"[/codeblock]\n"
+"To iterate over all the [TreeItem] objects in a [Tree] object, use [method "
+"TreeItem.get_next] and [method TreeItem.get_children] after getting the root "
+"through [method get_root]. You can use [method Object.free] on a [TreeItem] "
+"to remove it from the [Tree]."
+msgstr ""
+
+#: doc/classes/Tree.xml:27
+msgid "Returns [code]true[/code] if the column titles are being shown."
+msgstr ""
+
+#: doc/classes/Tree.xml:33
+msgid "Clears the tree. This removes all items."
+msgstr ""
+
+#: doc/classes/Tree.xml:41
+msgid ""
+"Creates an item in the tree and adds it as a child of [code]parent[/code].\n"
+"If [code]parent[/code] is [code]null[/code], the root item will be the "
+"parent, or the new item will be the root itself if the tree is empty.\n"
+"The new item will be the [code]idx[/code]th child of parent, or it will be "
+"the last child if there are not enough siblings."
+msgstr ""
+
+#: doc/classes/Tree.xml:49
+msgid ""
+"Edits the selected tree item as if it was clicked. The item must be set "
+"editable with [method TreeItem.set_editable]. Returns [code]true[/code] if "
+"the item could be edited. Fails if no item is selected."
+msgstr ""
+
+#: doc/classes/Tree.xml:55
+msgid ""
+"Makes the currently focused cell visible.\n"
+"This will scroll the tree if necessary. In [constant SELECT_ROW] mode, this "
+"will not do horizontal scrolling, as all the cells in the selected row is "
+"focused logically.\n"
+"[b]Note:[/b] Despite the name of this method, the focus cursor itself is "
+"only visible in [constant SELECT_MULTI] mode."
+msgstr ""
+
+#: doc/classes/Tree.xml:64
+msgid ""
+"Returns the column index at [code]position[/code], or -1 if no item is there."
+msgstr ""
+
+#: doc/classes/Tree.xml:71
+msgid "Returns the column's title."
+msgstr ""
+
+#: doc/classes/Tree.xml:78
+msgid "Returns the column's width in pixels."
+msgstr ""
+
+#: doc/classes/Tree.xml:84
+msgid ""
+"Returns the rectangle for custom popups. Helper to create custom cell "
+"controls that display a popup. See [method TreeItem.set_cell_mode]."
+msgstr ""
+
+#: doc/classes/Tree.xml:91
+msgid ""
+"Returns the drop section at [code]position[/code], or -100 if no item is "
+"there.\n"
+"Values -1, 0, or 1 will be returned for the \"above item\", \"on item\", and "
+"\"below item\" drop sections, respectively. See [enum DropModeFlags] for a "
+"description of each drop section.\n"
+"To get the item which the returned drop section is relative to, use [method "
+"get_item_at_position]."
+msgstr ""
+
+#: doc/classes/Tree.xml:99
+msgid ""
+"Returns the currently edited item. Can be used with [signal item_edited] to "
+"get the item that was modified.\n"
+"[codeblock]\n"
+"func _ready():\n"
+" $Tree.item_edited.connect(on_Tree_item_edited)\n"
+"\n"
+"func on_Tree_item_edited():\n"
+" print($Tree.get_edited()) # This item just got edited (e.g. checked).\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Tree.xml:112
+msgid "Returns the column for the currently edited item."
+msgstr ""
+
+#: doc/classes/Tree.xml:120
+msgid ""
+"Returns the rectangle area for the specified item. If [code]column[/code] is "
+"specified, only get the position and size of that column, otherwise get the "
+"rectangle containing all columns."
+msgstr ""
+
+#: doc/classes/Tree.xml:127
+msgid ""
+"Returns the tree item at the specified position (relative to the tree origin "
+"position)."
+msgstr ""
+
+#: doc/classes/Tree.xml:134
+msgid ""
+"Returns the next selected item after the given one, or [code]null[/code] if "
+"the end is reached.\n"
+"If [code]from[/code] is [code]null[/code], this returns the first selected "
+"item."
+msgstr ""
+
+#: doc/classes/Tree.xml:141
+msgid "Returns the last pressed button's index."
+msgstr ""
+
+#: doc/classes/Tree.xml:147
+msgid ""
+"Returns the tree's root item, or [code]null[/code] if the tree is empty."
+msgstr ""
+
+#: doc/classes/Tree.xml:153
+msgid "Returns the current scrolling position."
+msgstr ""
+
+#: doc/classes/Tree.xml:159
+msgid ""
+"Returns the currently focused item, or [code]null[/code] if no item is "
+"focused.\n"
+"In [constant SELECT_ROW] and [constant SELECT_SINGLE] modes, the focused "
+"item is same as the selected item. In [constant SELECT_MULTI] mode, the "
+"focused item is the item under the focus cursor, not necessarily selected.\n"
+"To get the currently selected item(s), use [method get_next_selected]."
+msgstr ""
+
+#: doc/classes/Tree.xml:167
+msgid ""
+"Returns the currently focused column, or -1 if no column is focused.\n"
+"In [constant SELECT_SINGLE] mode, the focused column is the selected column. "
+"In [constant SELECT_ROW] mode, the focused column is always 0 if any item is "
+"selected. In [constant SELECT_MULTI] mode, the focused column is the column "
+"under the focus cursor, and there are not necessarily any column selected.\n"
+"To tell whether a column of an item is selected, use [method TreeItem."
+"is_selected]."
+msgstr ""
+
+#: doc/classes/Tree.xml:176
+msgid "Causes the [Tree] to jump to the specified item."
+msgstr ""
+
+#: doc/classes/Tree.xml:184
+msgid ""
+"If [code]true[/code], the column will have the \"Expand\" flag of [Control]. "
+"Columns that have the \"Expand\" flag will use their \"min_width\" in a "
+"similar fashion to [member Control.size_flags_stretch_ratio]."
+msgstr ""
+
+#: doc/classes/Tree.xml:192
+msgid ""
+"Sets the minimum width of a column. Columns that have the \"Expand\" flag "
+"will use their \"min_width\" in a similar fashion to [member Control."
+"size_flags_stretch_ratio]."
+msgstr ""
+
+#: doc/classes/Tree.xml:200
+msgid "Sets the title of a column."
+msgstr ""
+
+#: doc/classes/Tree.xml:207
+msgid "If [code]true[/code], column titles are visible."
+msgstr ""
+
+#: doc/classes/Tree.xml:213
+msgid ""
+"If [code]true[/code], the currently selected cell may be selected again."
+msgstr ""
+
+#: doc/classes/Tree.xml:216
+msgid "If [code]true[/code], a right mouse button click can select items."
+msgstr ""
+
+#: doc/classes/Tree.xml:219
+msgid "The number of columns."
+msgstr ""
+
+#: doc/classes/Tree.xml:222
+msgid ""
+"The drop mode as an OR combination of flags. See [enum DropModeFlags] "
+"constants. Once dropping is done, reverts to [constant DROP_MODE_DISABLED]. "
+"Setting this during [method Control.can_drop_data] is recommended.\n"
+"This controls the drop sections, i.e. the decision and drawing of possible "
+"drop locations based on the mouse position."
+msgstr ""
+
+#: doc/classes/Tree.xml:227
+msgid "If [code]true[/code], the folding arrow is hidden."
+msgstr ""
+
+#: doc/classes/Tree.xml:230
+msgid "If [code]true[/code], the tree's root is hidden."
+msgstr ""
+
+#: doc/classes/Tree.xml:234
+msgid ""
+"Allows single or multiple selection. See the [enum SelectMode] constants."
+msgstr ""
+
+#: doc/classes/Tree.xml:243
+msgid ""
+"Emitted when a button on the tree was pressed (see [method TreeItem."
+"add_button])."
+msgstr ""
+
+#: doc/classes/Tree.xml:248
+msgid "Emitted when a cell is selected."
+msgstr ""
+
+#: doc/classes/Tree.xml:254
+msgid "Emitted when a column's title is pressed."
+msgstr ""
+
+#: doc/classes/Tree.xml:260
+msgid ""
+"Emitted when a cell with the [constant TreeItem.CELL_MODE_CUSTOM] is clicked "
+"to be edited."
+msgstr ""
+
+#: doc/classes/Tree.xml:266
+msgid ""
+"Emitted when the right mouse button is pressed in the empty space of the "
+"tree."
+msgstr ""
+
+#: doc/classes/Tree.xml:272
+msgid ""
+"Emitted when the right mouse button is pressed if right mouse button "
+"selection is active and the tree is empty."
+msgstr ""
+
+#: doc/classes/Tree.xml:277
+msgid "Emitted when an item's label is double-clicked."
+msgstr ""
+
+#: doc/classes/Tree.xml:283
+msgid "Emitted when an item is collapsed by a click on the folding arrow."
+msgstr ""
+
+#: doc/classes/Tree.xml:288
+msgid ""
+"Emitted when a custom button is pressed (i.e. in a [constant TreeItem."
+"CELL_MODE_CUSTOM] mode cell)."
+msgstr ""
+
+#: doc/classes/Tree.xml:293
+msgid "Emitted when an item's icon is double-clicked."
+msgstr ""
+
+#: doc/classes/Tree.xml:298
+msgid "Emitted when an item is edited."
+msgstr ""
+
+#: doc/classes/Tree.xml:303
+msgid "Emitted when an item is edited using the right mouse button."
+msgstr ""
+
+#: doc/classes/Tree.xml:309
+msgid "Emitted when an item is selected with the right mouse button."
+msgstr ""
+
+#: doc/classes/Tree.xml:314
+msgid "Emitted when an item is selected."
+msgstr ""
+
+#: doc/classes/Tree.xml:322
+msgid ""
+"Emitted instead of [code]item_selected[/code] if [code]select_mode[/code] is "
+"[constant SELECT_MULTI]."
+msgstr ""
+
+#: doc/classes/Tree.xml:327
+msgid "Emitted when a left mouse button click does not select any item."
+msgstr ""
+
+#: doc/classes/Tree.xml:333
+msgid ""
+"Allows selection of a single cell at a time. From the perspective of items, "
+"only a single item is allowed to be selected. And there is only one column "
+"selected in the selected item.\n"
+"The focus cursor is always hidden in this mode, but it is positioned at the "
+"current selection, making the currently selected item the currently focused "
+"item."
+msgstr ""
+
+#: doc/classes/Tree.xml:337
+msgid ""
+"Allows selection of a single row at a time. From the perspective of items, "
+"only a single items is allowed to be selected. And all the columns are "
+"selected in the selected item.\n"
+"The focus cursor is always hidden in this mode, but it is positioned at the "
+"first column of the current selection, making the currently selected item "
+"the currently focused item."
+msgstr ""
+
+#: doc/classes/Tree.xml:341
+msgid ""
+"Allows selection of multiple cells at the same time. From the perspective of "
+"items, multiple items are allowed to be selected. And there can be multiple "
+"columns selected in each selected item.\n"
+"The focus cursor is visible in this mode, the item or column under the "
+"cursor is not necessarily selected."
+msgstr ""
+
+#: doc/classes/Tree.xml:345
+msgid ""
+"Disables all drop sections, but still allows to detect the \"on item\" drop "
+"section by [method get_drop_section_at_position].\n"
+"[b]Note:[/b] This is the default flag, it has no effect when combined with "
+"other flags."
+msgstr ""
+
+#: doc/classes/Tree.xml:349
+msgid ""
+"Enables the \"on item\" drop section. This drop section covers the entire "
+"item.\n"
+"When combined with [constant DROP_MODE_INBETWEEN], this drop section halves "
+"the height and stays centered vertically."
+msgstr ""
+
+#: doc/classes/Tree.xml:353
+msgid ""
+"Enables \"above item\" and \"below item\" drop sections. The \"above item\" "
+"drop section covers the top half of the item, and the \"below item\" drop "
+"section covers the bottom half.\n"
+"When combined with [constant DROP_MODE_ON_ITEM], these drop sections halves "
+"the height and stays on top / bottom accordingly."
+msgstr ""
+
+#: doc/classes/Tree.xml:359
+msgid "The arrow icon used when a foldable item is not collapsed."
+msgstr ""
+
+#: doc/classes/Tree.xml:362
+msgid "The arrow icon used when a foldable item is collapsed."
+msgstr ""
+
+#: doc/classes/Tree.xml:365
+msgid ""
+"Default [StyleBox] for the [Tree], i.e. used when the control is not being "
+"focused."
+msgstr ""
+
+#: doc/classes/Tree.xml:368
+msgid "[StyleBox] used when the [Tree] is being focused."
+msgstr ""
+
+#: doc/classes/Tree.xml:371
+msgid "The horizontal space between each button in a cell."
+msgstr ""
+
+#: doc/classes/Tree.xml:374
+msgid "[StyleBox] used when a button in the tree is pressed."
+msgstr ""
+
+#: doc/classes/Tree.xml:377
+msgid ""
+"The check icon to display when the [constant TreeItem.CELL_MODE_CHECK] mode "
+"cell is checked."
+msgstr ""
+
+#: doc/classes/Tree.xml:380
+msgid "[StyleBox] used for the cursor, when the [Tree] is being focused."
+msgstr ""
+
+#: doc/classes/Tree.xml:383
+msgid "[StyleBox] used for the cursor, when the [Tree] is not being focused."
+msgstr ""
+
+#: doc/classes/Tree.xml:386
+msgid ""
+"Default [StyleBox] for a [constant TreeItem.CELL_MODE_CUSTOM] mode cell."
+msgstr ""
+
+#: doc/classes/Tree.xml:389
+msgid ""
+"Text [Color] for a [constant TreeItem.CELL_MODE_CUSTOM] mode cell when it's "
+"hovered."
+msgstr ""
+
+#: doc/classes/Tree.xml:392
+msgid ""
+"[StyleBox] for a [constant TreeItem.CELL_MODE_CUSTOM] mode cell when it's "
+"hovered."
+msgstr ""
+
+#: doc/classes/Tree.xml:395
+msgid ""
+"[StyleBox] for a [constant TreeItem.CELL_MODE_CUSTOM] mode cell when it's "
+"pressed."
+msgstr ""
+
+#: doc/classes/Tree.xml:398
+msgid ""
+"Draws the guidelines if not zero, this acts as a boolean. The guideline is a "
+"horizontal line drawn at the bottom of each item."
+msgstr ""
+
+#: doc/classes/Tree.xml:401
+msgid ""
+"Draws the relationship lines if not zero, this acts as a boolean. "
+"Relationship lines are drawn at the start of child items to show hierarchy."
+msgstr ""
+
+#: doc/classes/Tree.xml:404
+msgid ""
+"[Color] used to draw possible drop locations. See [enum DropModeFlags] "
+"constants for further description of drop locations."
+msgstr ""
+
+#: doc/classes/Tree.xml:416
+msgid "[Color] of the guideline."
+msgstr ""
+
+#: doc/classes/Tree.xml:419
+msgid ""
+"The horizontal space between item cells. This is also used as the margin at "
+"the start of an item when folding is disabled."
+msgstr ""
+
+#: doc/classes/Tree.xml:422
+msgid ""
+"The horizontal margin at the start of an item. This is used when folding is "
+"enabled for the item."
+msgstr ""
+
+#: doc/classes/Tree.xml:425
+msgid "[Color] of the relationship lines."
+msgstr ""
+
+#: doc/classes/Tree.xml:428
+msgid ""
+"The maximum distance between the mouse cursor and the control's border to "
+"trigger border scrolling when dragging."
+msgstr ""
+
+#: doc/classes/Tree.xml:431
+msgid "The speed of border scrolling."
+msgstr ""
+
+#: doc/classes/Tree.xml:434
+msgid ""
+"The arrow icon to display for the [constant TreeItem.CELL_MODE_RANGE] mode "
+"cell."
+msgstr ""
+
+#: doc/classes/Tree.xml:437
+msgid ""
+"[StyleBox] for the selected items, used when the [Tree] is not being focused."
+msgstr ""
+
+#: doc/classes/Tree.xml:440
+msgid ""
+"[StyleBox] for the selected items, used when the [Tree] is being focused."
+msgstr ""
+
+#: doc/classes/Tree.xml:443
+msgid "Default text [Color] of the title button."
+msgstr ""
+
+#: doc/classes/Tree.xml:446
+msgid "[Font] of the title button's text."
+msgstr ""
+
+#: doc/classes/Tree.xml:449
+msgid "[StyleBox] used when the title button is being hovered."
+msgstr ""
+
+#: doc/classes/Tree.xml:452
+msgid "Default [StyleBox] for the title button."
+msgstr ""
+
+#: doc/classes/Tree.xml:455
+msgid "[StyleBox] used when the title button is being pressed."
+msgstr ""
+
+#: doc/classes/Tree.xml:458
+msgid ""
+"The check icon to display when the [constant TreeItem.CELL_MODE_CHECK] mode "
+"cell is unchecked."
+msgstr ""
+
+#: doc/classes/Tree.xml:461
+msgid ""
+"The updown arrow icon to display for the [constant TreeItem.CELL_MODE_RANGE] "
+"mode cell."
+msgstr ""
+
+#: doc/classes/Tree.xml:464
+msgid ""
+"The vertical padding inside each item, i.e. the distance between the item's "
+"content and top/bottom border."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:4
+msgid "Control for a single item inside a [Tree]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:7
+msgid ""
+"Control for a single item inside a [Tree]. May have child [TreeItem]s and be "
+"styled as well as contain buttons.\n"
+"You can remove a [TreeItem] by using [method Object.free]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:21
+msgid ""
+"Adds a button with [Texture] [code]button[/code] at column [code]column[/"
+"code]. The [code]button_idx[/code] index is used to identify the button when "
+"calling other methods. If not specified, the next available index is used, "
+"which may be retrieved by calling [method get_button_count] immediately "
+"after this method. Optionally, the button can be [code]disabled[/code] and "
+"have a [code]tooltip[/code]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:28
+msgid ""
+"Calls the [code]method[/code] on the actual TreeItem and its children "
+"recursively. Pass parameters as a comma separated list."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:35
+msgid "Resets the background color for the given column to default."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:42
+msgid "Resets the color for the given column to default."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:49
+msgid "Deselects the given column."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:57
+msgid ""
+"Removes the button at index [code]button_idx[/code] in column [code]column[/"
+"code]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:65
+msgid ""
+"Returns the [Texture] of the button at index [code]button_idx[/code] in "
+"column [code]column[/code]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:72
+msgid ""
+"Returns the number of buttons in column [code]column[/code]. May be used to "
+"get the most recently added button's index, if no index was specified."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:80
+msgid ""
+"Returns the tooltip string for the button at index [code]button_idx[/code] "
+"in column [code]column[/code]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:87
+msgid "Returns the column's cell mode."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:93
+msgid ""
+"Returns the TreeItem's first child item or a null object if there is none."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:100
+msgid "Returns the custom background color of column [code]column[/code]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:107
+msgid "Returns the custom color of column [code]column[/code]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:114
+msgid "Returns [code]true[/code] if [code]expand_right[/code] is set."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:121
+msgid "Returns the given column's icon [Texture]. Error if no icon is set."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:128
+msgid "Returns the column's icon's maximum width."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:135
+msgid "Returns the [Color] modulating the column's icon."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:142
+msgid "Returns the icon [Texture] region as [Rect2]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:149
+msgid ""
+"Returns the metadata value that was set for the given column using [method "
+"set_metadata]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:155
+msgid ""
+"Returns the next TreeItem in the tree or a null object if there is none."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:162
+msgid ""
+"Returns the next visible TreeItem in the tree or a null object if there is "
+"none.\n"
+"If [code]wrap[/code] is enabled, the method will wrap around to the first "
+"visible element in the tree when called on the last visible element, "
+"otherwise it returns [code]null[/code]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:169
+msgid "Returns the parent TreeItem or a null object if there is none."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:175
+msgid ""
+"Returns the previous TreeItem in the tree or a null object if there is none."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:182
+msgid ""
+"Returns the previous visible TreeItem in the tree or a null object if there "
+"is none.\n"
+"If [code]wrap[/code] is enabled, the method will wrap around to the last "
+"visible element in the tree when called on the first visible element, "
+"otherwise it returns [code]null[/code]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:190
+msgid "Returns the value of a [constant CELL_MODE_RANGE] column."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:197
+msgid ""
+"Returns a dictionary containing the range parameters for a given column. The "
+"keys are \"min\", \"max\", \"step\", and \"expr\"."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:204
+msgid "Gets the suffix string shown after the column value."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:211
+msgid "Returns the given column's text."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:218
+msgid "Returns the given column's text alignment."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:225
+msgid "Returns the given column's tooltip."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:233
+msgid ""
+"Returns [code]true[/code] if the button at index [code]button_idx[/code] for "
+"the given column is disabled."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:240
+msgid "Returns [code]true[/code] if the given column is checked."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:253
+msgid "Returns [code]true[/code] if column [code]column[/code] is editable."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:260
+msgid "Returns [code]true[/code] if column [code]column[/code] is selectable."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:267
+msgid "Returns [code]true[/code] if column [code]column[/code] is selected."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:273
+msgid "Moves this TreeItem to the bottom in the [Tree] hierarchy."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:279
+msgid "Moves this TreeItem to the top in the [Tree] hierarchy."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:286
+msgid ""
+"Removes the given child [TreeItem] and all its children from the [Tree]. "
+"Note that it doesn't free the item from memory, so it can be reused later. "
+"To completely remove a [TreeItem] use [method Object.free]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:293
+msgid "Selects the column [code]column[/code]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:302
+msgid ""
+"Sets the given column's button [Texture] at index [code]button_idx[/code] to "
+"[code]button[/code]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:311
+msgid ""
+"If [code]true[/code], disables the button at index [code]button_idx[/code] "
+"in column [code]column[/code]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:319
+msgid ""
+"Sets the given column's cell mode to [code]mode[/code]. See [enum "
+"TreeCellMode] constants."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:327
+msgid "If [code]true[/code], the column [code]column[/code] is checked."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:343
+msgid ""
+"Sets the given column's custom background color and whether to just use it "
+"as an outline."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:351
+msgid "Sets the given column's custom color."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:360
+msgid ""
+"Sets the given column's custom draw callback to [code]callback[/code] method "
+"on [code]object[/code].\n"
+"The [code]callback[/code] should accept two arguments: the [TreeItem] that "
+"is drawn and its position and size as a [Rect2]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:369
+msgid "If [code]true[/code], column [code]column[/code] is editable."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:377
+msgid ""
+"If [code]true[/code], column [code]column[/code] is expanded to the right."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:385
+msgid "Sets the given column's icon [Texture]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:393
+msgid "Sets the given column's icon's maximum width."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:401
+msgid "Modulates the given column's icon with [code]modulate[/code]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:409
+msgid "Sets the given column's icon's texture region."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:417
+msgid ""
+"Sets the metadata value for the given column, which can be retrieved later "
+"using [method get_metadata]. This can be used, for example, to store a "
+"reference to the original data."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:425
+msgid "Sets the value of a [constant CELL_MODE_RANGE] column."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:436
+msgid ""
+"Sets the range of accepted values for a column. The column must be in the "
+"[constant CELL_MODE_RANGE] mode.\n"
+"If [code]expr[/code] is [code]true[/code], the edit mode slider will use an "
+"exponential scale as with [member Range.exp_edit]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:445
+msgid "If [code]true[/code], the given column is selectable."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:453
+msgid ""
+"Sets a string to be shown after a column's value (for example, a unit "
+"abbreviation)."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:461
+msgid "Sets the given column's text value."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:469
+msgid ""
+"Sets the given column's text alignment. See [enum TextAlign] for possible "
+"values."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:477
+msgid "Sets the given column's tooltip text."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:483
+msgid "If [code]true[/code], the TreeItem is collapsed."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:486
+msgid "The custom minimum height."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:489
+msgid "If [code]true[/code], folding is disabled for this TreeItem."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:494
+msgid "Cell contains a string."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:497
+msgid "Cell contains a checkbox."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:500
+msgid "Cell contains a range."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:503
+msgid "Cell contains an icon."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:508
+msgid "Align text to the left. See [code]set_text_align()[/code]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:511
+msgid "Center text. See [code]set_text_align()[/code]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml:514
+msgid "Align text to the right. See [code]set_text_align()[/code]."
+msgstr ""
+
+#: doc/classes/TriangleMesh.xml:4
+msgid "Internal mesh type."
+msgstr ""
+
+#: doc/classes/TriangleMesh.xml:7
+msgid "Mesh type used internally for collision calculations."
+msgstr ""
+
+#: doc/classes/Tween.xml:4
+msgid "Smoothly animates a node's properties over time."
+msgstr ""
+
+#: doc/classes/Tween.xml:7
+msgid ""
+"Tweens are useful for animations requiring a numerical property to be "
+"interpolated over a range of values. The name [i]tween[/i] comes from [i]in-"
+"betweening[/i], an animation technique where you specify [i]keyframes[/i] "
+"and the computer interpolates the frames that appear between them.\n"
+"[Tween] is more suited than [AnimationPlayer] for animations where you don't "
+"know the final values in advance. For example, interpolating a dynamically-"
+"chosen camera zoom value is best done with a [Tween] node; it would be "
+"difficult to do the same thing with an [AnimationPlayer] node.\n"
+"Here is a brief usage example that makes a 2D node move smoothly between two "
+"positions:\n"
+"[codeblock]\n"
+"var tween = get_node(\"Tween\")\n"
+"tween.interpolate_property($Node2D, \"position\",\n"
+" Vector2(0, 0), Vector2(100, 100), 1,\n"
+" Tween.TRANS_LINEAR, Tween.EASE_IN_OUT)\n"
+"tween.start()\n"
+"[/codeblock]\n"
+"Many methods require a property name, such as [code]\"position\"[/code] "
+"above. You can find the correct property name by hovering over the property "
+"in the Inspector. You can also provide the components of a property directly "
+"by using [code]\"property:component\"[/code] (e.g. [code]position:x[/code]), "
+"where it would only apply to that particular component.\n"
+"Many of the methods accept [code]trans_type[/code] and [code]ease_type[/"
+"code]. The first accepts an [enum TransitionType] constant, and refers to "
+"the way the timing of the animation is handled (see [url=https://easings."
+"net/]easings.net[/url] for some examples). The second accepts an [enum "
+"EaseType] constant, and controls where the [code]trans_type[/code] is "
+"applied to the interpolation (in the beginning, the end, or both). If you "
+"don't know which transition and easing to pick, you can try different [enum "
+"TransitionType] constants with [constant EASE_IN_OUT], and use the one that "
+"looks best.\n"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/master/img/"
+"tween_cheatsheet.png]Tween easing and transition types cheatsheet[/url]"
+msgstr ""
+
+#: doc/classes/Tween.xml:36
+msgid ""
+"Follows [code]method[/code] of [code]object[/code] and applies the returned "
+"value on [code]target_method[/code] of [code]target[/code], beginning from "
+"[code]initial_val[/code] for [code]duration[/code] seconds, [code]delay[/"
+"code] later. Methods are called with consecutive values.\n"
+"Use [enum TransitionType] for [code]trans_type[/code] and [enum EaseType] "
+"for [code]ease_type[/code] parameters. These values control the timing and "
+"direction of the interpolation. See the class description for more "
+"information."
+msgstr ""
+
+#: doc/classes/Tween.xml:52
+msgid ""
+"Follows [code]property[/code] of [code]object[/code] and applies it on "
+"[code]target_property[/code] of [code]target[/code], beginning from "
+"[code]initial_val[/code] for [code]duration[/code] seconds, [code]delay[/"
+"code] seconds later.\n"
+"Use [enum TransitionType] for [code]trans_type[/code] and [enum EaseType] "
+"for [code]ease_type[/code] parameters. These values control the timing and "
+"direction of the interpolation. See the class description for more "
+"information."
+msgstr ""
+
+#: doc/classes/Tween.xml:59
+msgid ""
+"Returns the total time needed for all tweens to end. If you have two tweens, "
+"one lasting 10 seconds and the other 20 seconds, it would return 20 seconds, "
+"as by that time all tweens would have finished."
+msgstr ""
+
+#: doc/classes/Tween.xml:73
+msgid ""
+"Calls [code]callback[/code] of [code]object[/code] after [code]duration[/"
+"code]. [code]arg1[/code]-[code]arg5[/code] are arguments to be passed to the "
+"callback."
+msgstr ""
+
+#: doc/classes/Tween.xml:87
+msgid ""
+"Calls [code]callback[/code] of [code]object[/code] after [code]duration[/"
+"code] on the main thread (similar to [method Object.call_deferred]). "
+"[code]arg1[/code]-[code]arg5[/code] are arguments to be passed to the "
+"callback."
+msgstr ""
+
+#: doc/classes/Tween.xml:101
+msgid ""
+"Animates [code]method[/code] of [code]object[/code] from [code]initial_val[/"
+"code] to [code]final_val[/code] for [code]duration[/code] seconds, "
+"[code]delay[/code] seconds later. Methods are called with consecutive "
+"values.\n"
+"Use [enum TransitionType] for [code]trans_type[/code] and [enum EaseType] "
+"for [code]ease_type[/code] parameters. These values control the timing and "
+"direction of the interpolation. See the class description for more "
+"information."
+msgstr ""
+
+#: doc/classes/Tween.xml:116
+msgid ""
+"Animates [code]property[/code] of [code]object[/code] from "
+"[code]initial_val[/code] to [code]final_val[/code] for [code]duration[/code] "
+"seconds, [code]delay[/code] seconds later. Setting the initial value to "
+"[code]null[/code] uses the current value of the property.\n"
+"Use [enum TransitionType] for [code]trans_type[/code] and [enum EaseType] "
+"for [code]ease_type[/code] parameters. These values control the timing and "
+"direction of the interpolation. See the class description for more "
+"information."
+msgstr ""
+
+#: doc/classes/Tween.xml:123
+msgid ""
+"Returns [code]true[/code] if any tweens are currently running.\n"
+"[b]Note:[/b] This method doesn't consider tweens that have ended."
+msgstr ""
+
+#: doc/classes/Tween.xml:132
+msgid ""
+"Stops animation and removes a tween, given its object and property/method "
+"pair. By default, all tweens are removed, unless [code]key[/code] is "
+"specified."
+msgstr ""
+
+#: doc/classes/Tween.xml:138
+msgid "Stops animation and removes all tweens."
+msgstr ""
+
+#: doc/classes/Tween.xml:146
+msgid ""
+"Resets a tween to its initial value (the one given, not the one before the "
+"tween), given its object and property/method pair. By default, all tweens "
+"are removed, unless [code]key[/code] is specified."
+msgstr ""
+
+#: doc/classes/Tween.xml:152
+msgid ""
+"Resets all tweens to their initial values (the ones given, not those before "
+"the tween)."
+msgstr ""
+
+#: doc/classes/Tween.xml:160
+msgid ""
+"Continues animating a stopped tween, given its object and property/method "
+"pair. By default, all tweens are resumed, unless [code]key[/code] is "
+"specified."
+msgstr ""
+
+#: doc/classes/Tween.xml:166
+msgid "Continues animating all stopped tweens."
+msgstr ""
+
+#: doc/classes/Tween.xml:173
+msgid "Sets the interpolation to the given [code]time[/code] in seconds."
+msgstr ""
+
+#: doc/classes/Tween.xml:180
+msgid ""
+"Activates/deactivates the tween. See also [method stop_all] and [method "
+"resume_all]."
+msgstr ""
+
+#: doc/classes/Tween.xml:186
+msgid "Starts the tween. You can define animations both before and after this."
+msgstr ""
+
+#: doc/classes/Tween.xml:194
+msgid ""
+"Stops a tween, given its object and property/method pair. By default, all "
+"tweens are stopped, unless [code]key[/code] is specified."
+msgstr ""
+
+#: doc/classes/Tween.xml:200
+msgid "Stops animating all tweens."
+msgstr ""
+
+#: doc/classes/Tween.xml:215
+msgid ""
+"Animates [code]method[/code] of [code]object[/code] from the value returned "
+"by [code]initial_method[/code] to [code]final_val[/code] for [code]duration[/"
+"code] seconds, [code]delay[/code] seconds later. Methods are animated by "
+"calling them with consecutive values.\n"
+"Use [enum TransitionType] for [code]trans_type[/code] and [enum EaseType] "
+"for [code]ease_type[/code] parameters. These values control the timing and "
+"direction of the interpolation. See the class description for more "
+"information."
+msgstr ""
+
+#: doc/classes/Tween.xml:231
+msgid ""
+"Animates [code]property[/code] of [code]object[/code] from the current value "
+"of the [code]initial_val[/code] property of [code]initial[/code] to "
+"[code]final_val[/code] for [code]duration[/code] seconds, [code]delay[/code] "
+"seconds later.\n"
+"Use [enum TransitionType] for [code]trans_type[/code] and [enum EaseType] "
+"for [code]ease_type[/code] parameters. These values control the timing and "
+"direction of the interpolation. See the class description for more "
+"information."
+msgstr ""
+
+#: doc/classes/Tween.xml:238
+msgid "Returns the current time of the tween."
+msgstr ""
+
+#: doc/classes/Tween.xml:244
+msgid "The tween's animation process thread. See [enum TweenProcessMode]."
+msgstr ""
+
+#: doc/classes/Tween.xml:247
+msgid ""
+"The tween's speed multiplier. For example, set it to [code]1.0[/code] for "
+"normal speed, [code]2.0[/code] for two times normal speed, or [code]0.5[/"
+"code] for half of the normal speed. A value of [code]0[/code] pauses the "
+"animation, but see also [method set_active] or [method stop_all] for this."
+msgstr ""
+
+#: doc/classes/Tween.xml:250
+msgid "If [code]true[/code], the tween loops."
+msgstr ""
+
+#: doc/classes/Tween.xml:256
+msgid "Emitted when all processes in a tween end."
+msgstr ""
+
+#: doc/classes/Tween.xml:263
+msgid "Emitted when a tween ends."
+msgstr ""
+
+#: doc/classes/Tween.xml:270
+msgid "Emitted when a tween starts."
+msgstr ""
+
+#: doc/classes/Tween.xml:279
+msgid "Emitted at each step of the animation."
+msgstr ""
+
+#: doc/classes/Tween.xml:285
+msgid "The tween updates with the [code]_physics_process[/code] callback."
+msgstr ""
+
+#: doc/classes/Tween.xml:288
+msgid "The tween updates with the [code]_process[/code] callback."
+msgstr ""
+
+#: doc/classes/Tween.xml:291
+msgid "The animation is interpolated linearly."
+msgstr ""
+
+#: doc/classes/Tween.xml:294
+msgid "The animation is interpolated using a sine function."
+msgstr ""
+
+#: doc/classes/Tween.xml:297
+msgid ""
+"The animation is interpolated with a quintic (to the power of 5) function."
+msgstr ""
+
+#: doc/classes/Tween.xml:300
+msgid ""
+"The animation is interpolated with a quartic (to the power of 4) function."
+msgstr ""
+
+#: doc/classes/Tween.xml:303
+msgid ""
+"The animation is interpolated with a quadratic (to the power of 2) function."
+msgstr ""
+
+#: doc/classes/Tween.xml:306
+msgid ""
+"The animation is interpolated with an exponential (to the power of x) "
+"function."
+msgstr ""
+
+#: doc/classes/Tween.xml:309
+msgid ""
+"The animation is interpolated with elasticity, wiggling around the edges."
+msgstr ""
+
+#: doc/classes/Tween.xml:312
+msgid ""
+"The animation is interpolated with a cubic (to the power of 3) function."
+msgstr ""
+
+#: doc/classes/Tween.xml:315
+msgid "The animation is interpolated with a function using square roots."
+msgstr ""
+
+#: doc/classes/Tween.xml:318
+msgid "The animation is interpolated by bouncing at the end."
+msgstr ""
+
+#: doc/classes/Tween.xml:321
+msgid "The animation is interpolated backing out at ends."
+msgstr ""
+
+#: doc/classes/Tween.xml:324
+msgid "The interpolation starts slowly and speeds up towards the end."
+msgstr ""
+
+#: doc/classes/Tween.xml:327
+msgid "The interpolation starts quickly and slows down towards the end."
+msgstr ""
+
+#: doc/classes/Tween.xml:330
+msgid ""
+"A combination of [constant EASE_IN] and [constant EASE_OUT]. The "
+"interpolation is slowest at both ends."
+msgstr ""
+
+#: doc/classes/Tween.xml:333
+msgid ""
+"A combination of [constant EASE_IN] and [constant EASE_OUT]. The "
+"interpolation is fastest at both ends."
+msgstr ""
+
+#: doc/classes/UDPServer.xml:4
+msgid "Helper class to implement a UDP server."
+msgstr ""
+
+#: doc/classes/UDPServer.xml:7
+msgid ""
+"A simple server that opens a UDP socket and returns connected "
+"[PacketPeerUDP] upon receiving new packets. See also [method PacketPeerUDP."
+"connect_to_host].\n"
+"After starting the server ([method listen]), you will need to [method poll] "
+"it at regular intervals (e.g. inside [method Node._process]) for it to "
+"process new packets, delivering them to the appropriate [PacketPeerUDP], and "
+"taking new connections.\n"
+"Below a small example of how it can be used:\n"
+"[codeblock]\n"
+"# server.gd\n"
+"extends Node\n"
+"\n"
+"var server := UDPServer.new()\n"
+"var peers = []\n"
+"\n"
+"func _ready():\n"
+" server.listen(4242)\n"
+"\n"
+"func _process(delta):\n"
+" server.poll() # Important!\n"
+" if server.is_connection_available():\n"
+" var peer : PacketPeerUDP = server.take_connection()\n"
+" var pkt = peer.get_packet()\n"
+" print(\"Accepted peer: %s:%s\" % [peer.get_packet_ip(), peer."
+"get_packet_port()])\n"
+" print(\"Received data: %s\" % [pkt.get_string_from_utf8()])\n"
+" # Reply so it knows we received the message.\n"
+" peer.put_packet(pkt)\n"
+" # Keep a reference so we can keep contacting the remote peer.\n"
+" peers.append(peer)\n"
+"\n"
+" for i in range(0, peers.size()):\n"
+" pass # Do something with the connected peers.\n"
+"\n"
+"[/codeblock]\n"
+"[codeblock]\n"
+"# client.gd\n"
+"extends Node\n"
+"\n"
+"var udp := PacketPeerUDP.new()\n"
+"var connected = false\n"
+"\n"
+"func _ready():\n"
+" udp.connect_to_host(\"127.0.0.1\", 4242)\n"
+"\n"
+"func _process(delta):\n"
+" if !connected:\n"
+" # Try to contact server\n"
+" udp.put_packet(\"The answer is... 42!\".to_utf8())\n"
+" if udp.get_available_packet_count() > 0:\n"
+" print(\"Connected: %s\" % udp.get_packet().get_string_from_utf8())\n"
+" connected = true\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/UDPServer.xml:61
+msgid ""
+"Returns [code]true[/code] if a packet with a new address/port combination "
+"was received on the socket."
+msgstr ""
+
+#: doc/classes/UDPServer.xml:67
+msgid ""
+"Returns [code]true[/code] if the socket is open and listening on a port."
+msgstr ""
+
+#: doc/classes/UDPServer.xml:75
+msgid ""
+"Starts the server by opening a UDP socket listening on the given port. You "
+"can optionally specify a [code]bind_address[/code] to only listen for "
+"packets sent to that address. See also [method PacketPeerUDP.listen]."
+msgstr ""
+
+#: doc/classes/UDPServer.xml:81
+msgid ""
+"Call this method at regular intervals (e.g. inside [method Node._process]) "
+"to process new packets. And packet from known address/port pair will be "
+"delivered to the appropriate [PacketPeerUDP], any packet received from an "
+"unknown address/port pair will be added as a pending connection (see [method "
+"is_connection_available], [method take_connection]). The maximum number of "
+"pending connection is defined via [member max_pending_connections]."
+msgstr ""
+
+#: doc/classes/UDPServer.xml:87
+msgid ""
+"Stops the server, closing the UDP socket if open. Will close all connected "
+"[PacketPeerUDP] accepted via [method take_connection] (remote peers will not "
+"be notified)."
+msgstr ""
+
+#: doc/classes/UDPServer.xml:93
+msgid ""
+"Returns the first pending connection (connected to the appropriate address/"
+"port). Will return [code]null[/code] if no new connection is available. See "
+"also [method is_connection_available], [method PacketPeerUDP."
+"connect_to_host]."
+msgstr ""
+
+#: doc/classes/UDPServer.xml:99
+msgid ""
+"Define the maximum number of pending connections, during [method poll], any "
+"new pending connection exceeding that value will be automatically dropped. "
+"Setting this value to [code]0[/code] effectively prevents any new pending "
+"connection to be accepted (e.g. when all your players have connected)."
+msgstr ""
+
+#: doc/classes/UndoRedo.xml:4
+msgid "Helper to manage undo/redo operations in the editor or custom tools."
+msgstr ""
+
+#: doc/classes/UndoRedo.xml:7
+msgid ""
+"Helper to manage undo/redo operations in the editor or custom tools. It "
+"works by registering methods and property changes inside \"actions\".\n"
+"Common behavior is to create an action, then add do/undo calls to functions "
+"or property changes, then committing the action.\n"
+"Here's an example on how to add an action to the Godot editor's own "
+"[UndoRedo], from a plugin:\n"
+"[codeblock]\n"
+"var undo_redo = get_undo_redo() # Method of EditorPlugin.\n"
+"\n"
+"func do_something():\n"
+" pass # Put your code here.\n"
+"\n"
+"func undo_something():\n"
+" pass # Put here the code that reverts what's done by "
+"\"do_something()\".\n"
+"\n"
+"func _on_MyButton_pressed():\n"
+" var node = get_node(\"MyNode2D\")\n"
+" undo_redo.create_action(\"Move the node\")\n"
+" undo_redo.add_do_method(self, \"do_something\")\n"
+" undo_redo.add_undo_method(self, \"undo_something\")\n"
+" undo_redo.add_do_property(node, \"position\", Vector2(100,100))\n"
+" undo_redo.add_undo_property(node, \"position\", node.position)\n"
+" undo_redo.commit_action()\n"
+"[/codeblock]\n"
+"[method create_action], [method add_do_method], [method add_undo_method], "
+"[method add_do_property], [method add_undo_property], and [method "
+"commit_action] should be called one after the other, like in the example. "
+"Not doing so could lead to crashes.\n"
+"If you don't need to register a method, you can leave [method add_do_method] "
+"and [method add_undo_method] out; the same goes for properties. You can also "
+"register more than one method/property."
+msgstr ""
+
+#: doc/classes/UndoRedo.xml:39
+msgid "Register a method that will be called when the action is committed."
+msgstr ""
+
+#: doc/classes/UndoRedo.xml:48
+msgid "Register a property value change for \"do\"."
+msgstr ""
+
+#: doc/classes/UndoRedo.xml:55
+msgid ""
+"Register a reference for \"do\" that will be erased if the \"do\" history is "
+"lost. This is useful mostly for new nodes created for the \"do\" call. Do "
+"not use for resources."
+msgstr ""
+
+#: doc/classes/UndoRedo.xml:63
+msgid "Register a method that will be called when the action is undone."
+msgstr ""
+
+#: doc/classes/UndoRedo.xml:72
+msgid "Register a property value change for \"undo\"."
+msgstr ""
+
+#: doc/classes/UndoRedo.xml:79
+msgid ""
+"Register a reference for \"undo\" that will be erased if the \"undo\" "
+"history is lost. This is useful mostly for nodes removed with the \"do\" "
+"call (not the \"undo\" call!)."
+msgstr ""
+
+#: doc/classes/UndoRedo.xml:86
+msgid ""
+"Clear the undo/redo history and associated references.\n"
+"Passing [code]false[/code] to [code]increase_version[/code] will prevent the "
+"version number to be increased from this."
+msgstr ""
+
+#: doc/classes/UndoRedo.xml:93
+msgid ""
+"Commit the action. All \"do\" methods/properties are called/set when this "
+"function is called."
+msgstr ""
+
+#: doc/classes/UndoRedo.xml:101
+msgid ""
+"Create a new action. After this is called, do all your calls to [method "
+"add_do_method], [method add_undo_method], [method add_do_property], and "
+"[method add_undo_property], then commit the action with [method "
+"commit_action].\n"
+"The way actions are merged is dictated by the [code]merge_mode[/code] "
+"argument. See [enum MergeMode] for details."
+msgstr ""
+
+#: doc/classes/UndoRedo.xml:108
+msgid "Gets the name of the current action."
+msgstr ""
+
+#: doc/classes/UndoRedo.xml:114
+msgid ""
+"Gets the version. Every time a new action is committed, the [UndoRedo]'s "
+"version number is increased automatically.\n"
+"This is useful mostly to check if something changed from a saved version."
+msgstr ""
+
+#: doc/classes/UndoRedo.xml:133
+msgid ""
+"Returns [code]true[/code] if the [UndoRedo] is currently committing the "
+"action, i.e. running its \"do\" method or property change (see [method "
+"commit_action])."
+msgstr ""
+
+#: doc/classes/UndoRedo.xml:139
+msgid "Redo the last action."
+msgstr ""
+
+#: doc/classes/UndoRedo.xml:145
+msgid "Undo the last action."
+msgstr ""
+
+#: doc/classes/UndoRedo.xml:152
+msgid "Called when [method undo] or [method redo] was called."
+msgstr ""
+
+#: doc/classes/UndoRedo.xml:158
+msgid "Makes \"do\"/\"undo\" operations stay in separate actions."
+msgstr ""
+
+#: doc/classes/UndoRedo.xml:161
+msgid ""
+"Makes so that the action's \"do\" operation is from the first action created "
+"and the \"undo\" operation is from the last subsequent action with the same "
+"name."
+msgstr ""
+
+#: doc/classes/UndoRedo.xml:164
+msgid "Makes subsequent actions with the same name be merged into one."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:4
+msgid "UPNP network functions."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:7
+msgid ""
+"Provides UPNP functionality to discover [UPNPDevice]s on the local network "
+"and execute commands on them, like managing port mappings (port forwarding) "
+"and querying the local and remote network IP address. Note that methods on "
+"this class are synchronous and block the calling thread.\n"
+"To forward a specific port:\n"
+"[codeblock]\n"
+"const PORT = 7777\n"
+"var upnp = UPNP.new()\n"
+"upnp.discover(2000, 2, \"InternetGatewayDevice\")\n"
+"upnp.add_port_mapping(port)\n"
+"[/codeblock]\n"
+"To close a specific port (e.g. after you have finished using it):\n"
+"[codeblock]\n"
+"upnp.delete_port_mapping(port)\n"
+"[/codeblock]\n"
+"[b]Note:[/b] UPnP discovery blocks the current thread. To perform discovery "
+"without blocking the main thread, use [Thread]s like this:\n"
+"[codeblock]\n"
+"# Emitted when UPnP port mapping setup is completed (regardless of success "
+"or failure).\n"
+"signal upnp_completed(error)\n"
+"\n"
+"# Replace this with your own server port number between 1025 and 65535.\n"
+"const SERVER_PORT = 3928\n"
+"var thread = null\n"
+"\n"
+"func _upnp_setup(server_port):\n"
+" # UPNP queries take some time.\n"
+" var upnp = UPNP.new()\n"
+" var err = upnp.discover()\n"
+"\n"
+" if err != OK:\n"
+" push_error(str(err))\n"
+" emit_signal(\"upnp_completed\", err)\n"
+" return\n"
+"\n"
+" if upnp.get_gateway() and upnp.get_gateway().is_valid_gateway():\n"
+" upnp.add_port_mapping(server_port, server_port, ProjectSettings."
+"get_setting(\"application/config/name\"), \"UDP\")\n"
+" upnp.add_port_mapping(server_port, server_port, ProjectSettings."
+"get_setting(\"application/config/name\"), \"TCP\")\n"
+" emit_signal(\"upnp_completed\", OK)\n"
+"\n"
+"func _ready():\n"
+" thread = Thread.new()\n"
+" thread.start(self, \"_upnp_setup\", SERVER_PORT)\n"
+"\n"
+"func _exit_tree():\n"
+" # Wait for thread finish here to handle game exit while the thread is "
+"running.\n"
+" thread.wait_to_finish()\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:59
+msgid "Adds the given [UPNPDevice] to the list of discovered devices."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:70
+msgid ""
+"Adds a mapping to forward the external [code]port[/code] (between 1 and "
+"65535) on the default gateway (see [method get_gateway]) to the "
+"[code]internal_port[/code] on the local machine for the given protocol "
+"[code]proto[/code] (either [code]TCP[/code] or [code]UDP[/code], with UDP "
+"being the default). If a port mapping for the given port and protocol "
+"combination already exists on that gateway device, this method tries to "
+"overwrite it. If that is not desired, you can retrieve the gateway manually "
+"with [method get_gateway] and call [method add_port_mapping] on it, if any.\n"
+"If [code]internal_port[/code] is [code]0[/code] (the default), the same port "
+"number is used for both the external and the internal port (the [code]port[/"
+"code] value).\n"
+"The description ([code]desc[/code]) is shown in some router UIs and can be "
+"used to point out which application added the mapping. The mapping's lease "
+"duration can be limited by specifying a [code]duration[/code] (in seconds). "
+"However, some routers are incompatible with one or both of these, so use "
+"with caution and add fallback logic in case of errors to retry without them "
+"if in doubt.\n"
+"See [enum UPNPResult] for possible return values."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:79
+msgid "Clears the list of discovered devices."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:87
+msgid ""
+"Deletes the port mapping for the given port and protocol combination on the "
+"default gateway (see [method get_gateway]) if one exists. [code]port[/code] "
+"must be a valid port between 1 and 65535, [code]proto[/code] can be either "
+"[code]TCP[/code] or [code]UDP[/code]. See [enum UPNPResult] for possible "
+"return values."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:96
+msgid ""
+"Discovers local [UPNPDevice]s. Clears the list of previously discovered "
+"devices.\n"
+"Filters for IGD (InternetGatewayDevice) type devices by default, as those "
+"manage port forwarding. [code]timeout[/code] is the time to wait for "
+"responses in milliseconds. [code]ttl[/code] is the time-to-live; only touch "
+"this if you know what you're doing.\n"
+"See [enum UPNPResult] for possible return values."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:105
+msgid "Returns the [UPNPDevice] at the given [code]index[/code]."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:111
+msgid "Returns the number of discovered [UPNPDevice]s."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:117
+msgid ""
+"Returns the default gateway. That is the first discovered [UPNPDevice] that "
+"is also a valid IGD (InternetGatewayDevice)."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:123
+msgid ""
+"Returns the external [IP] address of the default gateway (see [method "
+"get_gateway]) as string. Returns an empty string on error."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:130
+msgid ""
+"Removes the device at [code]index[/code] from the list of discovered devices."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:138
+msgid ""
+"Sets the device at [code]index[/code] from the list of discovered devices to "
+"[code]device[/code]."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:144
+msgid "If [code]true[/code], IPv6 is used for [UPNPDevice] discovery."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:147
+msgid ""
+"If [code]0[/code], the local port to use for discovery is chosen "
+"automatically by the system. If [code]1[/code], discovery will be done from "
+"the source port 1900 (same as destination port). Otherwise, the value will "
+"be used as the port."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:150
+msgid ""
+"Multicast interface to use for discovery. Uses the default multicast "
+"interface if empty."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:155
+msgid "UPNP command or discovery was successful."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:158
+msgid ""
+"Not authorized to use the command on the [UPNPDevice]. May be returned when "
+"the user disabled UPNP on their router."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:161
+msgid ""
+"No port mapping was found for the given port, protocol combination on the "
+"given [UPNPDevice]."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:164
+msgid "Inconsistent parameters."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:167
+msgid ""
+"No such entry in array. May be returned if a given port, protocol "
+"combination is not found on an [UPNPDevice]."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:170
+msgid "The action failed."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:173
+msgid ""
+"The [UPNPDevice] does not allow wildcard values for the source IP address."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:176
+msgid "The [UPNPDevice] does not allow wildcard values for the external port."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:179
+msgid "The [UPNPDevice] does not allow wildcard values for the internal port."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:182
+msgid "The remote host value must be a wildcard."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:185
+msgid "The external port value must be a wildcard."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:188
+msgid ""
+"No port maps are available. May also be returned if port mapping "
+"functionality is not available."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:191
+msgid ""
+"Conflict with other mechanism. May be returned instead of [constant "
+"UPNP_RESULT_CONFLICT_WITH_OTHER_MAPPING] if a port mapping conflicts with an "
+"existing one."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:194
+msgid "Conflict with an existing port mapping."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:197
+msgid "External and internal port values must be the same."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:200
+msgid ""
+"Only permanent leases are supported. Do not use the [code]duration[/code] "
+"parameter when adding port mappings."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:203
+msgid "Invalid gateway."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:206
+msgid "Invalid port."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:209
+msgid "Invalid protocol."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:212
+msgid "Invalid duration."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:215
+msgid "Invalid arguments."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:218
+msgid "Invalid response."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:221
+msgid "Invalid parameter."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:224
+#: modules/upnp/doc_classes/UPNPDevice.xml:69
+msgid "HTTP error."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:227
+msgid "Socket error."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:230
+msgid "Error allocating memory."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:233
+msgid ""
+"No gateway available. You may need to call [method discover] first, or "
+"discovery didn't detect any valid IGDs (InternetGatewayDevices)."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:236
+msgid ""
+"No devices available. You may need to call [method discover] first, or "
+"discovery didn't detect any valid [UPNPDevice]s."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNP.xml:239
+#: modules/upnp/doc_classes/UPNPDevice.xml:93
+msgid "Unknown error."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNPDevice.xml:4
+msgid "UPNP device."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNPDevice.xml:7
+msgid ""
+"UPNP device. See [UPNP] for UPNP discovery and utility functions. Provides "
+"low-level access to UPNP control commands. Allows to manage port mappings "
+"(port forwarding) and to query network information of the device (like local "
+"and external IP address and status). Note that methods on this class are "
+"synchronous and block the calling thread."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNPDevice.xml:20
+msgid ""
+"Adds a port mapping to forward the given external port on this [UPNPDevice] "
+"for the given protocol to the local machine. See [method UPNP."
+"add_port_mapping]."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNPDevice.xml:28
+msgid ""
+"Deletes the port mapping identified by the given port and protocol "
+"combination on this device. See [method UPNP.delete_port_mapping]."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNPDevice.xml:34
+msgid ""
+"Returns [code]true[/code] if this is a valid IGD (InternetGatewayDevice) "
+"which potentially supports port forwarding."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNPDevice.xml:40
+msgid ""
+"Returns the external IP address of this [UPNPDevice] or an empty string."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNPDevice.xml:46
+msgid "URL to the device description."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNPDevice.xml:49
+msgid "IDG control URL."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNPDevice.xml:52
+msgid ""
+"Address of the local machine in the network connecting it to this "
+"[UPNPDevice]."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNPDevice.xml:55
+msgid "IGD service type."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNPDevice.xml:58
+msgid "IGD status. See [enum IGDStatus]."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNPDevice.xml:61
+msgid "Service type."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNPDevice.xml:66
+msgid "OK."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNPDevice.xml:72
+msgid "Empty HTTP response."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNPDevice.xml:75
+msgid "Returned response contained no URLs."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNPDevice.xml:78
+msgid "Not a valid IGD."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNPDevice.xml:81
+msgid "Disconnected."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNPDevice.xml:84
+msgid "Unknown device."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNPDevice.xml:87
+msgid "Invalid control."
+msgstr ""
+
+#: modules/upnp/doc_classes/UPNPDevice.xml:90
+msgid "Memory allocation error."
+msgstr ""
+
+#: doc/classes/Variant.xml:4
+msgid "The most important data type in Godot."
+msgstr ""
+
+#: doc/classes/Variant.xml:7
+msgid ""
+"In computer programming, a Variant class is a class that is designed to "
+"store a variety of other types. Dynamic programming languages like PHP, Lua, "
+"JavaScript and GDScript like to use them to store variables' data on the "
+"backend. With these Variants, properties are able to change value types "
+"freely.\n"
+"[codeblock]\n"
+"var foo = 2 # foo is dynamically an integer\n"
+"foo = \"Now foo is a string!\"\n"
+"foo = Reference.new() # foo is an Object\n"
+"var bar: int = 2 # bar is a statically typed integer.\n"
+"# bar = \"Uh oh! I can't make static variables become a different type!\"\n"
+"[/codeblock]\n"
+"Godot tracks all scripting API variables within Variants. Without even "
+"realizing it, you use Variants all the time. When a particular language "
+"enforces its own rules for keeping data typed, then that language is "
+"applying its own custom logic over the base Variant scripting API.\n"
+"- GDScript automatically wrap values in them. It keeps all data in plain "
+"Variants by default and then optionally enforces custom static typing rules "
+"on variable types.\n"
+"- VisualScript tracks properties inside Variants as well, but it also uses "
+"static typing. The GUI interface enforces that properties have a particular "
+"type that doesn't change over time.\n"
+"- C# is statically typed, but uses the Mono [code]object[/code] type in "
+"place of Godot's Variant class when it needs to represent a dynamic value. "
+"[code]object[/code] is the Mono runtime's equivalent of the same concept.\n"
+"- The statically-typed language NativeScript C++ does not define a built-in "
+"Variant-like class. Godot's GDNative bindings provide their own godot::"
+"Variant class for users; Any point at which the C++ code starts interacting "
+"with the Godot runtime is a place where you might have to start wrapping "
+"data inside Variant objects.\n"
+"The global [method @GDScript.typeof] function returns the enumerated value "
+"of the Variant type stored in the current variable (see [enum Variant."
+"Type]).\n"
+"[codeblock]\n"
+"var foo = 2\n"
+"match typeof(foo):\n"
+" TYPE_NIL:\n"
+" print(\"foo is null\")\n"
+" TYPE_INTEGER:\n"
+" print(\"foo is an integer\")\n"
+" TYPE_OBJECT:\n"
+" # Note that Objects are their own special category.\n"
+" # To get the name of the underlying Object type, you need the "
+"`get_class()` method.\n"
+" print(\"foo is a(n) %s\" % foo.get_class()) # inject the class name "
+"into a formatted string.\n"
+" # Note also that there is not yet any way to get a script's "
+"`class_name` string easily.\n"
+" # To fetch that value, you need to dig deeply into a hidden "
+"ProjectSettings setting: an Array of Dictionaries called "
+"\"_global_script_classes\".\n"
+" # Open your project.godot file to see it up close.\n"
+"[/codeblock]\n"
+"A Variant takes up only 20 bytes and can store almost any engine datatype "
+"inside of it. Variants are rarely used to hold information for long periods "
+"of time. Instead, they are used mainly for communication, editing, "
+"serialization and moving data around.\n"
+"Godot has specifically invested in making its Variant class as flexible as "
+"possible; so much so that it is used for a multitude of operations to "
+"facilitate communication between all of Godot's systems.\n"
+"A Variant:\n"
+"- Can store almost any datatype.\n"
+"- Can perform operations between many variants. GDScript uses Variant as its "
+"atomic/native datatype.\n"
+"- Can be hashed, so it can be compared quickly to other variants.\n"
+"- Can be used to convert safely between datatypes.\n"
+"- Can be used to abstract calling methods and their arguments. Godot exports "
+"all its functions through variants.\n"
+"- Can be used to defer calls or move data between threads.\n"
+"- Can be serialized as binary and stored to disk, or transferred via "
+"network.\n"
+"- Can be serialized to text and use it for printing values and editable "
+"settings.\n"
+"- Can work as an exported property, so the editor can edit it universally.\n"
+"- Can be used for dictionaries, arrays, parsers, etc.\n"
+"[b]Containers (Array and Dictionary):[/b] Both are implemented using "
+"variants. A [Dictionary] can match any datatype used as key to any other "
+"datatype. An [Array] just holds an array of Variants. Of course, a Variant "
+"can also hold a [Dictionary] and an [Array] inside, making it even more "
+"flexible.\n"
+"Modifications to a container will modify all references to it. A [Mutex] "
+"should be created to lock it if multi-threaded access is desired."
+msgstr ""
+
+#: doc/classes/Variant.xml:53
+msgid "https://docs.godotengine.org/en/3.4/development/cpp/variant_class.html"
+msgstr ""
+
+#: doc/classes/VBoxContainer.xml:4
+msgid "Vertical box container."
+msgstr ""
+
+#: doc/classes/VBoxContainer.xml:7
+msgid "Vertical box container. See [BoxContainer]."
+msgstr ""
+
+#: doc/classes/VBoxContainer.xml:18
+msgid "The vertical space between the [VBoxContainer]'s elements."
+msgstr ""
+
+#: doc/classes/Vector2.xml:4
+msgid "Vector used for 2D math."
+msgstr ""
+
+#: doc/classes/Vector2.xml:7
+msgid ""
+"2-element structure that can be used to represent positions in 2D space or "
+"any other pair of numeric values.\n"
+"[b]Note:[/b] In a boolean context, a Vector2 will evaluate to [code]false[/"
+"code] if it's equal to [code]Vector2(0, 0)[/code]. Otherwise, a Vector2 will "
+"always evaluate to [code]true[/code]."
+msgstr ""
+
+#: doc/classes/Vector2.xml:14 doc/classes/Vector3.xml:14
+msgid ""
+"https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab"
+msgstr ""
+
+#: doc/classes/Vector2.xml:24
+msgid ""
+"Constructs a new Vector2 from the given [code]x[/code] and [code]y[/code]."
+msgstr ""
+
+#: doc/classes/Vector2.xml:30 doc/classes/Vector3.xml:31
+msgid ""
+"Returns a new vector with all components in absolute values (i.e. positive)."
+msgstr ""
+
+#: doc/classes/Vector2.xml:36
+msgid ""
+"Returns this vector's angle with respect to the positive X axis, or [code]"
+"(1, 0)[/code] vector, in radians.\n"
+"For example, [code]Vector2.RIGHT.angle()[/code] will return zero, "
+"[code]Vector2.DOWN.angle()[/code] will return [code]PI / 2[/code] (a quarter "
+"turn, or 90 degrees), and [code]Vector2(1, -1).angle()[/code] will return "
+"[code]-PI / 4[/code] (a negative eighth turn, or -45 degrees).\n"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/master/img/"
+"vector2_angle.png]Illustration of the returned angle.[/url]\n"
+"Equivalent to the result of [method @GDScript.atan2] when called with the "
+"vector's [member y] and [member x] as parameters: [code]atan2(y, x)[/code]."
+msgstr ""
+
+#: doc/classes/Vector2.xml:46
+msgid ""
+"Returns the angle to the given vector, in radians.\n"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/master/img/"
+"vector2_angle_to.png]Illustration of the returned angle.[/url]"
+msgstr ""
+
+#: doc/classes/Vector2.xml:54
+msgid ""
+"Returns the angle between the line connecting the two points and the X axis, "
+"in radians.\n"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/master/img/"
+"vector2_angle_to_point.png]Illustration of the returned angle.[/url]"
+msgstr ""
+
+#: doc/classes/Vector2.xml:61
+msgid ""
+"Returns the aspect ratio of this vector, the ratio of [member x] to [member "
+"y]."
+msgstr ""
+
+#: doc/classes/Vector2.xml:68 doc/classes/Vector3.xml:45
+msgid ""
+"Returns the vector \"bounced off\" from a plane defined by the given normal."
+msgstr ""
+
+#: doc/classes/Vector2.xml:74
+msgid ""
+"Returns the vector with all components rounded up (towards positive "
+"infinity)."
+msgstr ""
+
+#: doc/classes/Vector2.xml:81
+msgid ""
+"Returns the vector with a maximum length by limiting its length to "
+"[code]length[/code]."
+msgstr ""
+
+#: doc/classes/Vector2.xml:88
+msgid "Returns the cross product of this vector and [code]with[/code]."
+msgstr ""
+
+#: doc/classes/Vector2.xml:98
+msgid ""
+"Cubically interpolates between this vector and [code]b[/code] using "
+"[code]pre_a[/code] and [code]post_b[/code] as handles, and returns the "
+"result at position [code]weight[/code]. [code]weight[/code] is on the range "
+"of 0.0 to 1.0, representing the amount of interpolation."
+msgstr ""
+
+#: doc/classes/Vector2.xml:105 doc/classes/Vector3.xml:75
+msgid ""
+"Returns the normalized vector pointing from this vector to [code]b[/code]. "
+"This is equivalent to using [code](b - a).normalized()[/code]."
+msgstr ""
+
+#: doc/classes/Vector2.xml:112 doc/classes/Vector3.xml:82
+msgid ""
+"Returns the squared distance between this vector and [code]b[/code].\n"
+"This method runs faster than [method distance_to], so prefer it if you need "
+"to compare vectors or need the squared distance for some formula."
+msgstr ""
+
+#: doc/classes/Vector2.xml:120
+msgid "Returns the distance between this vector and [code]to[/code]."
+msgstr ""
+
+#: doc/classes/Vector2.xml:127
+msgid ""
+"Returns the dot product of this vector and [code]with[/code]. This can be "
+"used to compare the angle between two vectors. For example, this can be used "
+"to determine whether an enemy is facing the player.\n"
+"The dot product will be [code]0[/code] for a straight angle (90 degrees), "
+"greater than 0 for angles narrower than 90 degrees and lower than 0 for "
+"angles wider than 90 degrees.\n"
+"When using unit (normalized) vectors, the result will always be between "
+"[code]-1.0[/code] (180 degree angle) when the vectors are facing opposite "
+"directions, and [code]1.0[/code] (0 degree angle) when the vectors are "
+"aligned.\n"
+"[b]Note:[/b] [code]a.dot(b)[/code] is equivalent to [code]b.dot(a)[/code]."
+msgstr ""
+
+#: doc/classes/Vector2.xml:136
+msgid ""
+"Returns the vector with all components rounded down (towards negative "
+"infinity)."
+msgstr ""
+
+#: doc/classes/Vector2.xml:143 doc/classes/Vector3.xml:119
+msgid ""
+"Returns [code]true[/code] if this vector and [code]v[/code] are "
+"approximately equal, by running [method @GDScript.is_equal_approx] on each "
+"component."
+msgstr ""
+
+#: doc/classes/Vector2.xml:149 doc/classes/Vector3.xml:125
+msgid ""
+"Returns [code]true[/code] if the vector is normalized, [code]false[/code] "
+"otherwise."
+msgstr ""
+
+#: doc/classes/Vector2.xml:155 doc/classes/Vector3.xml:131
+msgid "Returns the length (magnitude) of this vector."
+msgstr ""
+
+#: doc/classes/Vector2.xml:161 doc/classes/Vector3.xml:137
+msgid ""
+"Returns the squared length (squared magnitude) of this vector.\n"
+"This method runs faster than [method length], so prefer it if you need to "
+"compare vectors or need the squared distance for some formula."
+msgstr ""
+
+#: doc/classes/Vector2.xml:170
+msgid ""
+"Returns the result of the linear interpolation between this vector and "
+"[code]to[/code] by amount [code]weight[/code]. [code]weight[/code] is on the "
+"range of 0.0 to 1.0, representing the amount of interpolation."
+msgstr ""
+
+#: doc/classes/Vector2.xml:178
+msgid ""
+"Moves the vector toward [code]to[/code] by the fixed [code]delta[/code] "
+"amount."
+msgstr ""
+
+#: doc/classes/Vector2.xml:184 doc/classes/Vector3.xml:172
+msgid ""
+"Returns the vector scaled to unit length. Equivalent to [code]v / v.length()"
+"[/code]."
+msgstr ""
+
+#: doc/classes/Vector2.xml:191 doc/classes/Vector3.xml:186
+msgid ""
+"Returns a vector composed of the [method @GDScript.fposmod] of this vector's "
+"components and [code]mod[/code]."
+msgstr ""
+
+#: doc/classes/Vector2.xml:198 doc/classes/Vector3.xml:193
+msgid ""
+"Returns a vector composed of the [method @GDScript.fposmod] of this vector's "
+"components and [code]modv[/code]'s components."
+msgstr ""
+
+#: doc/classes/Vector2.xml:205
+msgid "Returns the vector projected onto the vector [code]b[/code]."
+msgstr ""
+
+#: doc/classes/Vector2.xml:212
+msgid "Returns the vector reflected from a plane defined by the given normal."
+msgstr ""
+
+#: doc/classes/Vector2.xml:219
+msgid ""
+"Returns the vector rotated by [code]phi[/code] radians. See also [method "
+"@GDScript.deg2rad]."
+msgstr ""
+
+#: doc/classes/Vector2.xml:225
+msgid ""
+"Returns the vector with all components rounded to the nearest integer, with "
+"halfway cases rounded away from zero."
+msgstr ""
+
+#: doc/classes/Vector2.xml:231
+msgid ""
+"Returns the vector with each component set to one or negative one, depending "
+"on the signs of the components. If a component is zero, it returns positive "
+"one."
+msgstr ""
+
+#: doc/classes/Vector2.xml:239 doc/classes/Vector3.xml:243
+msgid ""
+"Returns the result of spherical linear interpolation between this vector and "
+"[code]to[/code], by amount [code]weight[/code]. [code]weight[/code] is on "
+"the range of 0.0 to 1.0, representing the amount of interpolation.\n"
+"[b]Note:[/b] Both vectors must be normalized."
+msgstr ""
+
+#: doc/classes/Vector2.xml:247 doc/classes/Vector3.xml:251
+msgid "Returns this vector slid along a plane defined by the given normal."
+msgstr ""
+
+#: doc/classes/Vector2.xml:254 doc/classes/Vector3.xml:258
+msgid ""
+"Returns this vector with each component snapped to the nearest multiple of "
+"[code]step[/code]. This can also be used to round to an arbitrary number of "
+"decimals."
+msgstr ""
+
+#: doc/classes/Vector2.xml:260
+msgid ""
+"Returns a perpendicular vector rotated 90 degrees counter-clockwise compared "
+"to the original, with the same length."
+msgstr ""
+
+#: doc/classes/Vector2.xml:266 doc/classes/Vector3.xml:271
+msgid ""
+"The vector's X component. Also accessible by using the index position [code]"
+"[0][/code]."
+msgstr ""
+
+#: doc/classes/Vector2.xml:269 doc/classes/Vector3.xml:274
+msgid ""
+"The vector's Y component. Also accessible by using the index position [code]"
+"[1][/code]."
+msgstr ""
+
+#: doc/classes/Vector2.xml:274
+msgid "Enumerated value for the X axis."
+msgstr ""
+
+#: doc/classes/Vector2.xml:277
+msgid "Enumerated value for the Y axis."
+msgstr ""
+
+#: doc/classes/Vector2.xml:280 doc/classes/Vector3.xml:291
+msgid "Zero vector, a vector with all components set to [code]0[/code]."
+msgstr ""
+
+#: doc/classes/Vector2.xml:283 doc/classes/Vector3.xml:294
+msgid "One vector, a vector with all components set to [code]1[/code]."
+msgstr ""
+
+#: doc/classes/Vector2.xml:286 doc/classes/Vector3.xml:297
+msgid ""
+"Infinity vector, a vector with all components set to [constant @GDScript."
+"INF]."
+msgstr ""
+
+#: doc/classes/Vector2.xml:289
+msgid "Left unit vector. Represents the direction of left."
+msgstr ""
+
+#: doc/classes/Vector2.xml:292
+msgid "Right unit vector. Represents the direction of right."
+msgstr ""
+
+#: doc/classes/Vector2.xml:295
+msgid "Up unit vector. Y is down in 2D, so this vector points -Y."
+msgstr ""
+
+#: doc/classes/Vector2.xml:298
+msgid "Down unit vector. Y is down in 2D, so this vector points +Y."
+msgstr ""
+
+#: doc/classes/Vector3.xml:4
+msgid "Vector used for 3D math."
+msgstr ""
+
+#: doc/classes/Vector3.xml:7
+msgid ""
+"3-element structure that can be used to represent positions in 3D space or "
+"any other pair of numeric values.\n"
+"[b]Note:[/b] In a boolean context, a Vector3 will evaluate to [code]false[/"
+"code] if it's equal to [code]Vector3(0, 0, 0)[/code]. Otherwise, a Vector3 "
+"will always evaluate to [code]true[/code]."
+msgstr ""
+
+#: doc/classes/Vector3.xml:25
+msgid "Returns a Vector3 with the given components."
+msgstr ""
+
+#: doc/classes/Vector3.xml:38
+msgid "Returns the unsigned minimum angle to the given vector, in radians."
+msgstr ""
+
+#: doc/classes/Vector3.xml:51
+msgid ""
+"Returns a new vector with all components rounded up (towards positive "
+"infinity)."
+msgstr ""
+
+#: doc/classes/Vector3.xml:58
+msgid "Returns the cross product of this vector and [code]b[/code]."
+msgstr ""
+
+#: doc/classes/Vector3.xml:68
+msgid ""
+"Performs a cubic interpolation between vectors [code]pre_a[/code], [code]a[/"
+"code], [code]b[/code], [code]post_b[/code] ([code]a[/code] is current), by "
+"the given amount [code]weight[/code]. [code]weight[/code] is on the range of "
+"0.0 to 1.0, representing the amount of interpolation."
+msgstr ""
+
+#: doc/classes/Vector3.xml:90
+msgid "Returns the distance between this vector and [code]b[/code]."
+msgstr ""
+
+#: doc/classes/Vector3.xml:97
+msgid ""
+"Returns the dot product of this vector and [code]b[/code]. This can be used "
+"to compare the angle between two vectors. For example, this can be used to "
+"determine whether an enemy is facing the player.\n"
+"The dot product will be [code]0[/code] for a straight angle (90 degrees), "
+"greater than 0 for angles narrower than 90 degrees and lower than 0 for "
+"angles wider than 90 degrees.\n"
+"When using unit (normalized) vectors, the result will always be between "
+"[code]-1.0[/code] (180 degree angle) when the vectors are facing opposite "
+"directions, and [code]1.0[/code] (0 degree angle) when the vectors are "
+"aligned.\n"
+"[b]Note:[/b] [code]a.dot(b)[/code] is equivalent to [code]b.dot(a)[/code]."
+msgstr ""
+
+#: doc/classes/Vector3.xml:106
+msgid ""
+"Returns a new vector with all components rounded down (towards negative "
+"infinity)."
+msgstr ""
+
+#: doc/classes/Vector3.xml:112
+msgid ""
+"Returns the inverse of the vector. This is the same as [code]Vector3( 1.0 / "
+"v.x, 1.0 / v.y, 1.0 / v.z )[/code]."
+msgstr ""
+
+#: doc/classes/Vector3.xml:146
+msgid ""
+"Returns the result of the linear interpolation between this vector and "
+"[code]to[/code] by amount [code]t[/code]. [code]weight[/code] is on the "
+"range of 0.0 to 1.0, representing the amount of interpolation."
+msgstr ""
+
+#: doc/classes/Vector3.xml:152
+msgid ""
+"Returns the axis of the vector's largest value. See [code]AXIS_*[/code] "
+"constants. If all components are equal, this method returns [constant "
+"AXIS_X]."
+msgstr ""
+
+#: doc/classes/Vector3.xml:158
+msgid ""
+"Returns the axis of the vector's smallest value. See [code]AXIS_*[/code] "
+"constants. If all components are equal, this method returns [constant "
+"AXIS_Z]."
+msgstr ""
+
+#: doc/classes/Vector3.xml:166
+msgid ""
+"Moves this vector toward [code]to[/code] by the fixed [code]delta[/code] "
+"amount."
+msgstr ""
+
+#: doc/classes/Vector3.xml:179
+msgid "Returns the outer product with [code]b[/code]."
+msgstr ""
+
+#: doc/classes/Vector3.xml:200
+msgid "Returns this vector projected onto another vector [code]b[/code]."
+msgstr ""
+
+#: doc/classes/Vector3.xml:207
+msgid "Returns this vector reflected from a plane defined by the given normal."
+msgstr ""
+
+#: doc/classes/Vector3.xml:215
+msgid ""
+"Rotates this vector around a given axis by [code]phi[/code] radians. The "
+"axis must be a normalized vector."
+msgstr ""
+
+#: doc/classes/Vector3.xml:221
+msgid ""
+"Returns this vector with all components rounded to the nearest integer, with "
+"halfway cases rounded away from zero."
+msgstr ""
+
+#: doc/classes/Vector3.xml:227
+msgid ""
+"Returns a vector with each component set to one or negative one, depending "
+"on the signs of this vector's components. If a component is zero, it returns "
+"positive one."
+msgstr ""
+
+#: doc/classes/Vector3.xml:235
+msgid ""
+"Returns the signed angle to the given vector, in radians. The sign of the "
+"angle is positive in a counter-clockwise direction and negative in a "
+"clockwise direction when viewed from the side specified by the [code]axis[/"
+"code]."
+msgstr ""
+
+#: doc/classes/Vector3.xml:264
+msgid ""
+"Returns a diagonal matrix with the vector as main diagonal.\n"
+"This is equivalent to a Basis with no rotation or shearing and this vector's "
+"components set as the scale."
+msgstr ""
+
+#: doc/classes/Vector3.xml:277
+msgid ""
+"The vector's Z component. Also accessible by using the index position [code]"
+"[2][/code]."
+msgstr ""
+
+#: doc/classes/Vector3.xml:282
+msgid ""
+"Enumerated value for the X axis. Returned by [method max_axis] and [method "
+"min_axis]."
+msgstr ""
+
+#: doc/classes/Vector3.xml:285
+msgid ""
+"Enumerated value for the Y axis. Returned by [method max_axis] and [method "
+"min_axis]."
+msgstr ""
+
+#: doc/classes/Vector3.xml:288
+msgid ""
+"Enumerated value for the Z axis. Returned by [method max_axis] and [method "
+"min_axis]."
+msgstr ""
+
+#: doc/classes/Vector3.xml:300
+msgid ""
+"Left unit vector. Represents the local direction of left, and the global "
+"direction of west."
+msgstr ""
+
+#: doc/classes/Vector3.xml:303
+msgid ""
+"Right unit vector. Represents the local direction of right, and the global "
+"direction of east."
+msgstr ""
+
+#: doc/classes/Vector3.xml:306
+msgid "Up unit vector."
+msgstr ""
+
+#: doc/classes/Vector3.xml:309
+msgid "Down unit vector."
+msgstr ""
+
+#: doc/classes/Vector3.xml:312
+msgid ""
+"Forward unit vector. Represents the local direction of forward, and the "
+"global direction of north."
+msgstr ""
+
+#: doc/classes/Vector3.xml:315
+msgid ""
+"Back unit vector. Represents the local direction of back, and the global "
+"direction of south."
+msgstr ""
+
+#: doc/classes/VehicleBody.xml:4
+msgid "Physics body that simulates the behavior of a car."
+msgstr ""
+
+#: doc/classes/VehicleBody.xml:7
+msgid ""
+"This node implements all the physics logic needed to simulate a car. It is "
+"based on the raycast vehicle system commonly found in physics engines. You "
+"will need to add a [CollisionShape] for the main body of your vehicle and "
+"add [VehicleWheel] nodes for the wheels. You should also add a "
+"[MeshInstance] to this node for the 3D model of your car but this model "
+"should not include meshes for the wheels. You should control the vehicle by "
+"using the [member brake], [member engine_force], and [member steering] "
+"properties and not change the position or orientation of this node "
+"directly.\n"
+"[b]Note:[/b] The origin point of your VehicleBody will determine the center "
+"of gravity of your vehicle so it is better to keep this low and move the "
+"[CollisionShape] and [MeshInstance] upwards.\n"
+"[b]Note:[/b] This class has known issues and isn't designed to provide "
+"realistic 3D vehicle physics. If you want advanced vehicle physics, you will "
+"probably have to write your own physics integration using another "
+"[PhysicsBody] class."
+msgstr ""
+
+#: doc/classes/VehicleBody.xml:18
+msgid ""
+"Slows down the vehicle by applying a braking force. The vehicle is only "
+"slowed down if the wheels are in contact with a surface. The force you need "
+"to apply to adequately slow down your vehicle depends on the [member "
+"RigidBody.mass] of the vehicle. For a vehicle with a mass set to 1000, try a "
+"value in the 25 - 30 range for hard braking."
+msgstr ""
+
+#: doc/classes/VehicleBody.xml:21
+msgid ""
+"Accelerates the vehicle by applying an engine force. The vehicle is only "
+"speed up if the wheels that have [member VehicleWheel.use_as_traction] set "
+"to [code]true[/code] and are in contact with a surface. The [member "
+"RigidBody.mass] of the vehicle has an effect on the acceleration of the "
+"vehicle. For a vehicle with a mass set to 1000, try a value in the 25 - 50 "
+"range for acceleration.\n"
+"[b]Note:[/b] The simulation does not take the effect of gears into account, "
+"you will need to add logic for this if you wish to simulate gears.\n"
+"A negative value will result in the vehicle reversing."
+msgstr ""
+
+#: doc/classes/VehicleBody.xml:27
+msgid ""
+"The steering angle for the vehicle. Setting this to a non-zero value will "
+"result in the vehicle turning when it's moving. Wheels that have [member "
+"VehicleWheel.use_as_steering] set to [code]true[/code] will automatically be "
+"rotated."
+msgstr ""
+
+#: doc/classes/VehicleWheel.xml:4
+msgid "Physics object that simulates the behavior of a wheel."
+msgstr ""
+
+#: doc/classes/VehicleWheel.xml:7
+msgid ""
+"This node needs to be used as a child node of [VehicleBody] and simulates "
+"the behavior of one of its wheels. This node also acts as a collider to "
+"detect if the wheel is touching a surface.\n"
+"[b]Note:[/b] This class has known issues and isn't designed to provide "
+"realistic 3D vehicle physics. If you want advanced vehicle physics, you will "
+"probably have to write your own physics integration using another "
+"[PhysicsBody] class."
+msgstr ""
+
+#: doc/classes/VehicleWheel.xml:17
+msgid "Returns the rotational speed of the wheel in revolutions per minute."
+msgstr ""
+
+#: doc/classes/VehicleWheel.xml:23
+msgid ""
+"Returns a value between 0.0 and 1.0 that indicates whether this wheel is "
+"skidding. 0.0 is skidding (the wheel has lost grip, e.g. icy terrain), 1.0 "
+"means not skidding (the wheel has full grip, e.g. dry asphalt road)."
+msgstr ""
+
+#: doc/classes/VehicleWheel.xml:29
+msgid "Returns [code]true[/code] if this wheel is in contact with a surface."
+msgstr ""
+
+#: doc/classes/VehicleWheel.xml:35
+msgid ""
+"Slows down the wheel by applying a braking force. The wheel is only slowed "
+"down if it is in contact with a surface. The force you need to apply to "
+"adequately slow down your vehicle depends on the [member RigidBody.mass] of "
+"the vehicle. For a vehicle with a mass set to 1000, try a value in the 25 - "
+"30 range for hard braking."
+msgstr ""
+
+#: doc/classes/VehicleWheel.xml:38
+msgid ""
+"The damping applied to the spring when the spring is being compressed. This "
+"value should be between 0.0 (no damping) and 1.0. A value of 0.0 means the "
+"car will keep bouncing as the spring keeps its energy. A good value for this "
+"is around 0.3 for a normal car, 0.5 for a race car."
+msgstr ""
+
+#: doc/classes/VehicleWheel.xml:41
+msgid ""
+"The damping applied to the spring when relaxing. This value should be "
+"between 0.0 (no damping) and 1.0. This value should always be slightly "
+"higher than the [member damping_compression] property. For a [member "
+"damping_compression] value of 0.3, try a relaxation value of 0.5."
+msgstr ""
+
+#: doc/classes/VehicleWheel.xml:44
+msgid ""
+"Accelerates the wheel by applying an engine force. The wheel is only speed "
+"up if it is in contact with a surface. The [member RigidBody.mass] of the "
+"vehicle has an effect on the acceleration of the vehicle. For a vehicle with "
+"a mass set to 1000, try a value in the 25 - 50 range for acceleration.\n"
+"[b]Note:[/b] The simulation does not take the effect of gears into account, "
+"you will need to add logic for this if you wish to simulate gears.\n"
+"A negative value will result in the wheel reversing."
+msgstr ""
+
+#: doc/classes/VehicleWheel.xml:49
+msgid ""
+"The steering angle for the wheel. Setting this to a non-zero value will "
+"result in the vehicle turning when it's moving."
+msgstr ""
+
+#: doc/classes/VehicleWheel.xml:52
+msgid ""
+"The maximum force the spring can resist. This value should be higher than a "
+"quarter of the [member RigidBody.mass] of the [VehicleBody] or the spring "
+"will not carry the weight of the vehicle. Good results are often obtained by "
+"a value that is about 3× to 4× this number."
+msgstr ""
+
+#: doc/classes/VehicleWheel.xml:55
+msgid ""
+"This value defines the stiffness of the suspension. Use a value lower than "
+"50 for an off-road car, a value between 50 and 100 for a race car and try "
+"something around 200 for something like a Formula 1 car."
+msgstr ""
+
+#: doc/classes/VehicleWheel.xml:58
+msgid ""
+"This is the distance the suspension can travel. As Godot units are "
+"equivalent to meters, keep this setting relatively low. Try a value between "
+"0.1 and 0.3 depending on the type of car."
+msgstr ""
+
+#: doc/classes/VehicleWheel.xml:61
+msgid ""
+"If [code]true[/code], this wheel will be turned when the car steers. This "
+"value is used in conjunction with [member VehicleBody.steering] and ignored "
+"if you are using the per-wheel [member steering] value instead."
+msgstr ""
+
+#: doc/classes/VehicleWheel.xml:64
+msgid ""
+"If [code]true[/code], this wheel transfers engine force to the ground to "
+"propel the vehicle forward. This value is used in conjunction with [member "
+"VehicleBody.engine_force] and ignored if you are using the per-wheel [member "
+"engine_force] value instead."
+msgstr ""
+
+#: doc/classes/VehicleWheel.xml:67
+msgid ""
+"This determines how much grip this wheel has. It is combined with the "
+"friction setting of the surface the wheel is in contact with. 0.0 means no "
+"grip, 1.0 is normal grip. For a drift car setup, try setting the grip of the "
+"rear wheels slightly lower than the front wheels, or use a lower value to "
+"simulate tire wear.\n"
+"It's best to set this to 1.0 when starting out."
+msgstr ""
+
+#: doc/classes/VehicleWheel.xml:71
+msgid "The radius of the wheel in meters."
+msgstr ""
+
+#: doc/classes/VehicleWheel.xml:74
+msgid ""
+"This is the distance in meters the wheel is lowered from its origin point. "
+"Don't set this to 0.0 and move the wheel into position, instead move the "
+"origin point of your wheel (the gizmo in Godot) to the position the wheel "
+"will take when bottoming out, then use the rest length to move the wheel "
+"down to the position it should be in when the car is in rest."
+msgstr ""
+
+#: doc/classes/VehicleWheel.xml:77
+msgid ""
+"This value affects the roll of your vehicle. If set to 1.0 for all wheels, "
+"your vehicle will be prone to rolling over, while a value of 0.0 will resist "
+"body roll."
+msgstr ""
+
+#: doc/classes/VideoPlayer.xml:4
+msgid "Control for playing video streams."
+msgstr ""
+
+#: doc/classes/VideoPlayer.xml:7
+msgid ""
+"Control node for playing video streams using [VideoStream] resources.\n"
+"Supported video formats are [url=https://www.webmproject.org/]WebM[/url] "
+"([code].webm[/code], [VideoStreamWebm]), [url=https://www.theora.org/]Ogg "
+"Theora[/url] ([code].ogv[/code], [VideoStreamTheora]), and any format "
+"exposed via a GDNative plugin using [VideoStreamGDNative].\n"
+"[b]Note:[/b] Due to a bug, VideoPlayer does not support localization "
+"remapping yet.\n"
+"[b]Warning:[/b] On HTML5, video playback [i]will[/i] perform poorly due to "
+"missing architecture-specific assembly optimizations, especially for VP8/VP9."
+msgstr ""
+
+#: doc/classes/VideoPlayer.xml:18
+msgid ""
+"Returns the video stream's name, or [code]\"<No Stream>\"[/code] if no video "
+"stream is assigned."
+msgstr ""
+
+#: doc/classes/VideoPlayer.xml:24
+msgid "Returns the current frame as a [Texture]."
+msgstr ""
+
+#: doc/classes/VideoPlayer.xml:30
+msgid ""
+"Returns [code]true[/code] if the video is playing.\n"
+"[b]Note:[/b] The video is still considered playing if paused during playback."
+msgstr ""
+
+#: doc/classes/VideoPlayer.xml:37
+msgid ""
+"Starts the video playback from the beginning. If the video is paused, this "
+"will not unpause the video."
+msgstr ""
+
+#: doc/classes/VideoPlayer.xml:43
+msgid ""
+"Stops the video playback and sets the stream position to 0.\n"
+"[b]Note:[/b] Although the stream position will be set to 0, the first frame "
+"of the video stream won't become the current frame."
+msgstr ""
+
+#: doc/classes/VideoPlayer.xml:50
+msgid "The embedded audio track to play."
+msgstr ""
+
+#: doc/classes/VideoPlayer.xml:53
+msgid "If [code]true[/code], playback starts when the scene loads."
+msgstr ""
+
+#: doc/classes/VideoPlayer.xml:56
+msgid "Amount of time in milliseconds to store in buffer while playing."
+msgstr ""
+
+#: doc/classes/VideoPlayer.xml:59
+msgid "Audio bus to use for sound playback."
+msgstr ""
+
+#: doc/classes/VideoPlayer.xml:62
+msgid ""
+"If [code]true[/code], the video scales to the control size. Otherwise, the "
+"control minimum size will be automatically adjusted to match the video "
+"stream's dimensions."
+msgstr ""
+
+#: doc/classes/VideoPlayer.xml:65
+msgid "If [code]true[/code], the video is paused."
+msgstr ""
+
+#: doc/classes/VideoPlayer.xml:68
+msgid "The assigned video stream. See description for supported formats."
+msgstr ""
+
+#: doc/classes/VideoPlayer.xml:71
+msgid ""
+"The current position of the stream, in seconds.\n"
+"[b]Note:[/b] Changing this value won't have any effect as seeking is not "
+"implemented yet, except in video formats implemented by a GDNative add-on."
+msgstr ""
+
+#: doc/classes/VideoPlayer.xml:75
+msgid "Audio volume as a linear value."
+msgstr ""
+
+#: doc/classes/VideoPlayer.xml:78
+msgid "Audio volume in dB."
+msgstr ""
+
+#: doc/classes/VideoPlayer.xml:84
+msgid "Emitted when playback is finished."
+msgstr ""
+
+#: doc/classes/VideoStream.xml:4
+msgid "Base resource for video streams."
+msgstr ""
+
+#: doc/classes/VideoStream.xml:7
+msgid ""
+"Base resource type for all video streams. Classes that derive from "
+"[VideoStream] can all be used as resource types to play back videos in "
+"[VideoPlayer]."
+msgstr ""
+
+#: modules/gdnative/doc_classes/VideoStreamGDNative.xml:4
+msgid "[VideoStream] resource for for video formats implemented via GDNative."
+msgstr ""
+
+#: modules/gdnative/doc_classes/VideoStreamGDNative.xml:7
+msgid ""
+"[VideoStream] resource for for video formats implemented via GDNative.\n"
+"It can be used via [url=https://github.com/KidRigger/godot-"
+"videodecoder]godot-videodecoder[/url] which uses the [url=https://ffmpeg."
+"org]FFmpeg[/url] library."
+msgstr ""
+
+#: modules/gdnative/doc_classes/VideoStreamGDNative.xml:16
+msgid "Returns the video file handled by this [VideoStreamGDNative]."
+msgstr ""
+
+#: modules/gdnative/doc_classes/VideoStreamGDNative.xml:23
+msgid ""
+"Sets the video file that this [VideoStreamGDNative] resource handles. The "
+"supported extensions depend on the GDNative plugins used to expose video "
+"formats."
+msgstr ""
+
+#: modules/theora/doc_classes/VideoStreamTheora.xml:4
+msgid "[VideoStream] resource for Ogg Theora videos."
+msgstr ""
+
+#: modules/theora/doc_classes/VideoStreamTheora.xml:7
+msgid ""
+"[VideoStream] resource handling the [url=https://www.theora.org/]Ogg Theora[/"
+"url] video format with [code].ogv[/code] extension. The Theora codec is less "
+"efficient than [VideoStreamWebm]'s VP8 and VP9, but it requires less CPU "
+"resources to decode. The Theora codec is decoded on the CPU.\n"
+"[b]Note:[/b] While Ogg Theora videos can also have an [code].ogg[/code] "
+"extension, you will have to rename the extension to [code].ogv[/code] to use "
+"those videos within Godot."
+msgstr ""
+
+#: modules/theora/doc_classes/VideoStreamTheora.xml:16
+msgid "Returns the Ogg Theora video file handled by this [VideoStreamTheora]."
+msgstr ""
+
+#: modules/theora/doc_classes/VideoStreamTheora.xml:23
+msgid ""
+"Sets the Ogg Theora video file that this [VideoStreamTheora] resource "
+"handles. The [code]file[/code] name should have the [code].ogv[/code] "
+"extension."
+msgstr ""
+
+#: modules/webm/doc_classes/VideoStreamWebm.xml:4
+msgid "[VideoStream] resource for WebM videos."
+msgstr ""
+
+#: modules/webm/doc_classes/VideoStreamWebm.xml:7
+msgid ""
+"[VideoStream] resource handling the [url=https://www.webmproject.org/]WebM[/"
+"url] video format with [code].webm[/code] extension. Both the VP8 and VP9 "
+"codecs are supported. The VP8 and VP9 codecs are more efficient than "
+"[VideoStreamTheora], but they require more CPU resources to decode "
+"(especially VP9). Both the VP8 and VP9 codecs are decoded on the CPU.\n"
+"[b]Note:[/b] Alpha channel (also known as transparency) is not supported. "
+"The video will always appear to have a black background, even if it "
+"originally contains an alpha channel.\n"
+"[b]Note:[/b] There are known bugs and performance issues with WebM video "
+"playback in Godot. If you run into problems, try using the Ogg Theora format "
+"instead: [VideoStreamTheora]"
+msgstr ""
+
+#: modules/webm/doc_classes/VideoStreamWebm.xml:17
+msgid "Returns the WebM video file handled by this [VideoStreamWebm]."
+msgstr ""
+
+#: modules/webm/doc_classes/VideoStreamWebm.xml:24
+msgid ""
+"Sets the WebM video file that this [VideoStreamWebm] resource handles. The "
+"[code]file[/code] name should have the [code].webm[/code] extension."
+msgstr ""
+
+#: doc/classes/Viewport.xml:4
+msgid "Creates a sub-view into the screen."
+msgstr ""
+
+#: doc/classes/Viewport.xml:7
+msgid ""
+"A Viewport creates a different view into the screen, or a sub-view inside "
+"another viewport. Children 2D Nodes will display on it, and children Camera "
+"3D nodes will render on it too.\n"
+"Optionally, a viewport can have its own 2D or 3D world, so they don't share "
+"what they draw with other viewports.\n"
+"If a viewport is a child of a [ViewportContainer], it will automatically "
+"take up its size, otherwise it must be set manually.\n"
+"Viewports can also choose to be audio listeners, so they generate positional "
+"audio depending on a 2D or 3D camera child of it.\n"
+"Also, viewports can be assigned to different screens in case the devices "
+"have multiple screens.\n"
+"Finally, viewports can also behave as render targets, in which case they "
+"will not be visible unless the associated texture is used to draw."
+msgstr ""
+
+#: doc/classes/Viewport.xml:16
+msgid "https://docs.godotengine.org/en/3.4/tutorials/viewports/index.html"
+msgstr ""
+
+#: doc/classes/Viewport.xml:18 doc/classes/ViewportTexture.xml:12
+msgid "https://godotengine.org/asset-library/asset/128"
+msgstr ""
+
+#: doc/classes/Viewport.xml:20
+msgid "https://godotengine.org/asset-library/asset/130"
+msgstr ""
+
+#: doc/classes/Viewport.xml:21
+msgid "https://godotengine.org/asset-library/asset/541"
+msgstr ""
+
+#: doc/classes/Viewport.xml:22 doc/classes/ViewportTexture.xml:14
+msgid "https://godotengine.org/asset-library/asset/586"
+msgstr ""
+
+#: doc/classes/Viewport.xml:28
+msgid ""
+"Returns the 3D world of the viewport, or if none the world of the parent "
+"viewport."
+msgstr ""
+
+#: doc/classes/Viewport.xml:34
+msgid "Returns the 2D world of the viewport."
+msgstr ""
+
+#: doc/classes/Viewport.xml:40
+msgid "Returns the active 3D camera."
+msgstr ""
+
+#: doc/classes/Viewport.xml:46
+msgid "Returns the total transform of the viewport."
+msgstr ""
+
+#: doc/classes/Viewport.xml:52
+msgid "Returns the topmost modal in the stack."
+msgstr ""
+
+#: doc/classes/Viewport.xml:58
+msgid "Returns the mouse position relative to the viewport."
+msgstr ""
+
+#: doc/classes/Viewport.xml:65
+msgid "Returns information about the viewport from the rendering pipeline."
+msgstr ""
+
+#: doc/classes/Viewport.xml:72
+msgid "Returns the [enum ShadowAtlasQuadrantSubdiv] of the specified quadrant."
+msgstr ""
+
+#: doc/classes/Viewport.xml:78
+msgid "Returns the size override set with [method set_size_override]."
+msgstr ""
+
+#: doc/classes/Viewport.xml:84
+msgid ""
+"Returns the viewport's texture.\n"
+"[b]Note:[/b] Due to the way OpenGL works, the resulting [ViewportTexture] is "
+"flipped vertically. You can use [method Image.flip_y] on the result of "
+"[method Texture.get_data] to flip it back, for example:\n"
+"[codeblock]\n"
+"var img = get_viewport().get_texture().get_data()\n"
+"img.flip_y()\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/Viewport.xml:95
+msgid "Returns the viewport's RID from the [VisualServer]."
+msgstr ""
+
+#: doc/classes/Viewport.xml:101
+msgid "Returns the visible rectangle in global screen coordinates."
+msgstr ""
+
+#: doc/classes/Viewport.xml:107
+msgid ""
+"Returns the drag data from the GUI, that was previously returned by [method "
+"Control.get_drag_data]."
+msgstr ""
+
+#: doc/classes/Viewport.xml:113
+msgid "Returns [code]true[/code] if there are visible modals on-screen."
+msgstr ""
+
+#: doc/classes/Viewport.xml:119
+msgid ""
+"Returns [code]true[/code] if the viewport is currently performing a drag "
+"operation."
+msgstr ""
+
+#: doc/classes/Viewport.xml:136
+msgid ""
+"Returns [code]true[/code] if the size override is enabled. See [method "
+"set_size_override]."
+msgstr ""
+
+#: doc/classes/Viewport.xml:143
+msgid ""
+"Attaches this [Viewport] to the root [Viewport] with the specified "
+"rectangle. This bypasses the need for another node to display this "
+"[Viewport] but makes you responsible for updating the position of this "
+"[Viewport] manually."
+msgstr ""
+
+#: doc/classes/Viewport.xml:149
+msgid "Stops the input from propagating further down the [SceneTree]."
+msgstr ""
+
+#: doc/classes/Viewport.xml:157
+msgid ""
+"Sets the number of subdivisions to use in the specified quadrant. A higher "
+"number of subdivisions allows you to have more shadows in the scene at once, "
+"but reduces the quality of the shadows. A good practice is to have quadrants "
+"with a varying number of subdivisions and to have as few subdivisions as "
+"possible."
+msgstr ""
+
+#: doc/classes/Viewport.xml:166
+msgid ""
+"Sets the size override of the viewport. If the [code]enable[/code] parameter "
+"is [code]true[/code] the override is used, otherwise it uses the default "
+"size. If the size parameter is [code](-1, -1)[/code], it won't update the "
+"size."
+msgstr ""
+
+#: doc/classes/Viewport.xml:178
+msgid "Forces update of the 2D and 3D worlds."
+msgstr ""
+
+#: doc/classes/Viewport.xml:185
+msgid "Warps the mouse to a position relative to the viewport."
+msgstr ""
+
+#: doc/classes/Viewport.xml:191
+msgid "If [code]true[/code], the viewport will be used in AR/VR process."
+msgstr ""
+
+#: doc/classes/Viewport.xml:194
+msgid "If [code]true[/code], the viewport will process 2D audio streams."
+msgstr ""
+
+#: doc/classes/Viewport.xml:197
+msgid "If [code]true[/code], the viewport will process 3D audio streams."
+msgstr ""
+
+#: doc/classes/Viewport.xml:200
+msgid ""
+"The canvas transform of the viewport, useful for changing the on-screen "
+"positions of all child [CanvasItem]s. This is relative to the global canvas "
+"transform of the viewport."
+msgstr ""
+
+#: doc/classes/Viewport.xml:203
+msgid ""
+"If [code]true[/code], uses a fast post-processing filter to make banding "
+"significantly less visible. In some cases, debanding may introduce a "
+"slightly noticeable dithering pattern. It's recommended to enable debanding "
+"only when actually needed since the dithering pattern will make lossless-"
+"compressed screenshots larger.\n"
+"[b]Note:[/b] Only available on the GLES3 backend. [member hdr] must also be "
+"[code]true[/code] for debanding to be effective."
+msgstr ""
+
+#: doc/classes/Viewport.xml:207
+msgid "The overlay mode for test rendered geometry in debug purposes."
+msgstr ""
+
+#: doc/classes/Viewport.xml:210
+msgid ""
+"If [code]true[/code], the viewport will disable 3D rendering. For actual "
+"disabling use [code]usage[/code]."
+msgstr ""
+
+#: doc/classes/Viewport.xml:213
+msgid ""
+"Enables fast approximate antialiasing. FXAA is a popular screen-space "
+"antialiasing method, which is fast but will make the image look blurry, "
+"especially at lower resolutions. It can still work relatively well at large "
+"resolutions such as 1440p and 4K. Some of the lost sharpness can be "
+"recovered by enabling contrast-adaptive sharpening (see [member "
+"sharpen_intensity])."
+msgstr ""
+
+#: doc/classes/Viewport.xml:216
+msgid ""
+"The global canvas transform of the viewport. The canvas transform is "
+"relative to this."
+msgstr ""
+
+#: doc/classes/Viewport.xml:219
+msgid "If [code]true[/code], the viewport will not receive input events."
+msgstr ""
+
+#: doc/classes/Viewport.xml:222
+msgid ""
+"If [code]true[/code], the GUI controls on the viewport will lay pixel "
+"perfectly."
+msgstr ""
+
+#: doc/classes/Viewport.xml:227
+msgid ""
+"If [code]true[/code], the viewport rendering will receive benefits from High "
+"Dynamic Range algorithm. High Dynamic Range allows the viewport to receive "
+"values that are outside the 0-1 range. In Godot HDR uses 16 bits, meaning it "
+"does not store the full range of a floating point number.\n"
+"[b]Note:[/b] Requires [member usage] to be set to [constant USAGE_3D] or "
+"[constant USAGE_3D_NO_EFFECTS], since HDR is not supported for 2D."
+msgstr ""
+
+#: doc/classes/Viewport.xml:231
+msgid ""
+"If [code]true[/code], the result after 3D rendering will not have a linear "
+"to sRGB color conversion applied. This is important when the viewport is "
+"used as a render target where the result is used as a texture on a 3D object "
+"rendered in another viewport. It is also important if the viewport is used "
+"to create data that is not color based (noise, heightmaps, pickmaps, etc.). "
+"Do not enable this when the viewport is used as a texture on a 2D object or "
+"if the viewport is your final output. For the GLES2 driver this will convert "
+"the sRGB output to linear, this should only be used for VR plugins that "
+"require input in linear color space!"
+msgstr ""
+
+#: doc/classes/Viewport.xml:234
+msgid ""
+"The multisample anti-aliasing mode. A higher number results in smoother "
+"edges at the cost of significantly worse performance. A value of 4 is best "
+"unless targeting very high-end systems."
+msgstr ""
+
+#: doc/classes/Viewport.xml:237
+msgid ""
+"If [code]true[/code], the viewport will use [World] defined in [code]world[/"
+"code] property."
+msgstr ""
+
+#: doc/classes/Viewport.xml:240
+msgid ""
+"If [code]true[/code], the objects rendered by viewport become subjects of "
+"mouse picking process."
+msgstr ""
+
+#: doc/classes/Viewport.xml:243
+msgid ""
+"If [code]true[/code], renders the Viewport directly to the screen instead of "
+"to the root viewport. Only available in GLES2. This is a low-level "
+"optimization and should not be used in most cases. If used, reading from the "
+"Viewport or from [code]SCREEN_TEXTURE[/code] becomes unavailable. For more "
+"information see [method VisualServer.viewport_set_render_direct_to_screen]."
+msgstr ""
+
+#: doc/classes/Viewport.xml:246
+msgid ""
+"The clear mode when viewport used as a render target.\n"
+"[b]Note:[/b] This property is intended for 2D usage."
+msgstr ""
+
+#: doc/classes/Viewport.xml:250
+msgid "The update mode when viewport used as a render target."
+msgstr ""
+
+#: doc/classes/Viewport.xml:253
+msgid ""
+"If [code]true[/code], the result of rendering will be flipped vertically."
+msgstr ""
+
+#: doc/classes/Viewport.xml:256
+msgid "The subdivision amount of the first quadrant on the shadow atlas."
+msgstr ""
+
+#: doc/classes/Viewport.xml:259
+msgid "The subdivision amount of the second quadrant on the shadow atlas."
+msgstr ""
+
+#: doc/classes/Viewport.xml:262
+msgid "The subdivision amount of the third quadrant on the shadow atlas."
+msgstr ""
+
+#: doc/classes/Viewport.xml:265
+msgid "The subdivision amount of the fourth quadrant on the shadow atlas."
+msgstr ""
+
+#: doc/classes/Viewport.xml:268
+msgid ""
+"The shadow atlas' resolution (used for omni and spot lights). The value will "
+"be rounded up to the nearest power of 2.\n"
+"[b]Note:[/b] If this is set to 0, shadows won't be visible. Since user-"
+"created viewports default to a value of 0, this value must be set above 0 "
+"manually."
+msgstr ""
+
+#: doc/classes/Viewport.xml:272
+msgid ""
+"If set to a value greater than [code]0.0[/code], contrast-adaptive "
+"sharpening will be applied to the 3D viewport. This has a low performance "
+"cost and can be used to recover some of the sharpness lost from using FXAA. "
+"Values around [code]0.5[/code] generally give the best results. See also "
+"[member fxaa]."
+msgstr ""
+
+#: doc/classes/Viewport.xml:275
+msgid ""
+"The width and height of viewport. Must be set to a value greater than or "
+"equal to 2 pixels on both dimensions. Otherwise, nothing will be displayed."
+msgstr ""
+
+#: doc/classes/Viewport.xml:278
+msgid "If [code]true[/code], the size override affects stretch as well."
+msgstr ""
+
+#: doc/classes/Viewport.xml:281
+msgid ""
+"If [code]true[/code], the viewport should render its background as "
+"transparent."
+msgstr ""
+
+#: doc/classes/Viewport.xml:284
+msgid "The rendering mode of viewport."
+msgstr ""
+
+#: doc/classes/Viewport.xml:287
+msgid "The custom [World] which can be used as 3D environment source."
+msgstr ""
+
+#: doc/classes/Viewport.xml:290
+msgid "The custom [World2D] which can be used as 2D environment source."
+msgstr ""
+
+#: doc/classes/Viewport.xml:297
+msgid "Emitted when a Control node grabs keyboard focus."
+msgstr ""
+
+#: doc/classes/Viewport.xml:302
+msgid ""
+"Emitted when the size of the viewport is changed, whether by [method "
+"set_size_override], resize of window, or some other means."
+msgstr ""
+
+#: doc/classes/Viewport.xml:308
+msgid "Do not update the render target."
+msgstr ""
+
+#: doc/classes/Viewport.xml:311
+msgid ""
+"Update the render target once, then switch to [constant UPDATE_DISABLED]."
+msgstr ""
+
+#: doc/classes/Viewport.xml:314
+msgid ""
+"Update the render target only when it is visible. This is the default value."
+msgstr ""
+
+#: doc/classes/Viewport.xml:317
+msgid "Always update the render target."
+msgstr ""
+
+#: doc/classes/Viewport.xml:320
+msgid "This quadrant will not be used."
+msgstr ""
+
+#: doc/classes/Viewport.xml:323
+msgid "This quadrant will only be used by one shadow map."
+msgstr ""
+
+#: doc/classes/Viewport.xml:326
+msgid "This quadrant will be split in 4 and used by up to 4 shadow maps."
+msgstr ""
+
+#: doc/classes/Viewport.xml:329
+msgid "This quadrant will be split 16 ways and used by up to 16 shadow maps."
+msgstr ""
+
+#: doc/classes/Viewport.xml:332
+msgid "This quadrant will be split 64 ways and used by up to 64 shadow maps."
+msgstr ""
+
+#: doc/classes/Viewport.xml:335
+msgid ""
+"This quadrant will be split 256 ways and used by up to 256 shadow maps. "
+"Unless the [member shadow_atlas_size] is very high, the shadows in this "
+"quadrant will be very low resolution."
+msgstr ""
+
+#: doc/classes/Viewport.xml:338
+msgid ""
+"This quadrant will be split 1024 ways and used by up to 1024 shadow maps. "
+"Unless the [member shadow_atlas_size] is very high, the shadows in this "
+"quadrant will be very low resolution."
+msgstr ""
+
+#: doc/classes/Viewport.xml:341
+msgid "Represents the size of the [enum ShadowAtlasQuadrantSubdiv] enum."
+msgstr ""
+
+#: doc/classes/Viewport.xml:344
+msgid "Amount of objects in frame."
+msgstr ""
+
+#: doc/classes/Viewport.xml:347
+msgid "Amount of vertices in frame."
+msgstr ""
+
+#: doc/classes/Viewport.xml:350
+msgid "Amount of material changes in frame."
+msgstr ""
+
+#: doc/classes/Viewport.xml:353
+msgid "Amount of shader changes in frame."
+msgstr ""
+
+#: doc/classes/Viewport.xml:356
+msgid "Amount of surface changes in frame."
+msgstr ""
+
+#: doc/classes/Viewport.xml:359 doc/classes/Viewport.xml:365
+msgid "Amount of draw calls in frame."
+msgstr ""
+
+#: doc/classes/Viewport.xml:362
+msgid "Amount of items or joined items in frame."
+msgstr ""
+
+#: doc/classes/Viewport.xml:368
+msgid "Represents the size of the [enum RenderInfo] enum."
+msgstr ""
+
+#: doc/classes/Viewport.xml:371
+msgid "Objects are displayed normally."
+msgstr ""
+
+#: doc/classes/Viewport.xml:374
+msgid "Objects are displayed without light information."
+msgstr ""
+
+#: doc/classes/Viewport.xml:377
+msgid ""
+"Objected are displayed semi-transparent with additive blending so you can "
+"see where they intersect."
+msgstr ""
+
+#: doc/classes/Viewport.xml:380
+msgid "Objects are displayed in wireframe style."
+msgstr ""
+
+#: doc/classes/Viewport.xml:383
+msgid "Multisample anti-aliasing mode disabled. This is the default value."
+msgstr ""
+
+#: doc/classes/Viewport.xml:386
+msgid "Use 2x Multisample Antialiasing."
+msgstr ""
+
+#: doc/classes/Viewport.xml:389
+msgid "Use 4x Multisample Antialiasing."
+msgstr ""
+
+#: doc/classes/Viewport.xml:392
+msgid ""
+"Use 8x Multisample Antialiasing. Likely unsupported on low-end and older "
+"hardware."
+msgstr ""
+
+#: doc/classes/Viewport.xml:395
+msgid ""
+"Use 16x Multisample Antialiasing. Likely unsupported on medium and low-end "
+"hardware."
+msgstr ""
+
+#: doc/classes/Viewport.xml:398
+msgid ""
+"Allocates all buffers needed for drawing 2D scenes. This takes less VRAM "
+"than the 3D usage modes. Note that 3D rendering effects such as glow and HDR "
+"are not available when using this mode."
+msgstr ""
+
+#: doc/classes/Viewport.xml:401
+msgid ""
+"Allocates buffers needed for 2D scenes without allocating a buffer for "
+"screen copy. Accordingly, you cannot read from the screen. Of the [enum "
+"Usage] types, this requires the least VRAM. Note that 3D rendering effects "
+"such as glow and HDR are not available when using this mode."
+msgstr ""
+
+#: doc/classes/Viewport.xml:404
+msgid ""
+"Allocates full buffers for drawing 3D scenes and all 3D effects including "
+"buffers needed for 2D scenes and effects."
+msgstr ""
+
+#: doc/classes/Viewport.xml:407
+msgid ""
+"Allocates buffers needed for drawing 3D scenes. But does not allocate "
+"buffers needed for reading from the screen and post-processing effects. "
+"Saves some VRAM."
+msgstr ""
+
+#: doc/classes/Viewport.xml:410
+msgid "Always clear the render target before drawing."
+msgstr ""
+
+#: doc/classes/Viewport.xml:413
+msgid "Never clear the render target."
+msgstr ""
+
+#: doc/classes/Viewport.xml:416
+msgid ""
+"Clear the render target next frame, then switch to [constant "
+"CLEAR_MODE_NEVER]."
+msgstr ""
+
+#: doc/classes/ViewportContainer.xml:4
+msgid "Control for holding [Viewport]s."
+msgstr ""
+
+#: doc/classes/ViewportContainer.xml:7
+msgid ""
+"A [Container] node that holds a [Viewport], automatically setting its size.\n"
+"[b]Note:[/b] Changing a ViewportContainer's [member Control.rect_scale] will "
+"cause its contents to appear distorted. To change its visual size without "
+"causing distortion, adjust the node's margins instead (if it's not already "
+"in a container)."
+msgstr ""
+
+#: doc/classes/ViewportContainer.xml:16
+msgid ""
+"If [code]true[/code], the viewport will be scaled to the control's size."
+msgstr ""
+
+#: doc/classes/ViewportContainer.xml:19
+msgid ""
+"Divides the viewport's effective resolution by this value while preserving "
+"its scale. This can be used to speed up rendering.\n"
+"For example, a 1280×720 viewport with [member stretch_shrink] set to "
+"[code]2[/code] will be rendered at 640×360 while occupying the same size in "
+"the container.\n"
+"[b]Note:[/b] [member stretch] must be [code]true[/code] for this property to "
+"work."
+msgstr ""
+
+#: doc/classes/ViewportTexture.xml:4
+msgid "Texture which displays the content of a [Viewport]."
+msgstr ""
+
+#: doc/classes/ViewportTexture.xml:7
+msgid ""
+"Displays the content of a [Viewport] node as a dynamic [Texture]. This can "
+"be used to mix controls, 2D, and 3D elements in the same scene.\n"
+"To create a ViewportTexture in code, use the [method Viewport.get_texture] "
+"method on the target viewport."
+msgstr ""
+
+#: doc/classes/ViewportTexture.xml:22
+msgid ""
+"The path to the [Viewport] node to display. This is relative to the scene "
+"root, not to the node which uses the texture."
+msgstr ""
+
+#: doc/classes/VisibilityEnabler.xml:4 doc/classes/VisibilityEnabler2D.xml:4
+msgid "Enables certain nodes only when approximately visible."
+msgstr ""
+
+#: doc/classes/VisibilityEnabler.xml:7
+msgid ""
+"The VisibilityEnabler will disable [RigidBody] and [AnimationPlayer] nodes "
+"when they are not visible. It will only affect other nodes within the same "
+"scene as the VisibilityEnabler itself.\n"
+"If you just want to receive notifications, use [VisibilityNotifier] "
+"instead.\n"
+"[b]Note:[/b] VisibilityEnabler uses an approximate heuristic for performance "
+"reasons. It doesn't take walls and other occlusion into account. The "
+"heuristic is an implementation detail and may change in future versions. If "
+"you need precise visibility checking, use another method such as adding an "
+"[Area] node as a child of a [Camera] node and/or [method Vector3.dot].\n"
+"[b]Note:[/b] VisibilityEnabler will not affect nodes added after scene "
+"initialization."
+msgstr ""
+
+#: doc/classes/VisibilityEnabler.xml:19 doc/classes/VisibilityEnabler2D.xml:19
+msgid ""
+"Returns whether the enabler identified by given [enum Enabler] constant is "
+"active."
+msgstr ""
+
+#: doc/classes/VisibilityEnabler.xml:27 doc/classes/VisibilityEnabler2D.xml:27
+msgid ""
+"Sets active state of the enabler identified by given [enum Enabler] constant."
+msgstr ""
+
+#: doc/classes/VisibilityEnabler.xml:33
+msgid "If [code]true[/code], [RigidBody] nodes will be paused."
+msgstr ""
+
+#: doc/classes/VisibilityEnabler.xml:36 doc/classes/VisibilityEnabler2D.xml:39
+msgid "If [code]true[/code], [AnimationPlayer] nodes will be paused."
+msgstr ""
+
+#: doc/classes/VisibilityEnabler.xml:41 doc/classes/VisibilityEnabler2D.xml:53
+msgid "This enabler will pause [AnimationPlayer] nodes."
+msgstr ""
+
+#: doc/classes/VisibilityEnabler.xml:44
+msgid "This enabler will freeze [RigidBody] nodes."
+msgstr ""
+
+#: doc/classes/VisibilityEnabler.xml:47 doc/classes/VisibilityEnabler2D.xml:71
+msgid "Represents the size of the [enum Enabler] enum."
+msgstr ""
+
+#: doc/classes/VisibilityEnabler2D.xml:7
+msgid ""
+"The VisibilityEnabler2D will disable [RigidBody2D], [AnimationPlayer], and "
+"other nodes when they are not visible. It will only affect nodes with the "
+"same root node as the VisibilityEnabler2D, and the root node itself.\n"
+"If you just want to receive notifications, use [VisibilityNotifier2D] "
+"instead.\n"
+"[b]Note:[/b] For performance reasons, VisibilityEnabler2D uses an "
+"approximate heuristic with precision determined by [member ProjectSettings."
+"world/2d/cell_size]. If you need precise visibility checking, use another "
+"method such as adding an [Area2D] node as a child of a [Camera2D] node.\n"
+"[b]Note:[/b] VisibilityEnabler2D will not affect nodes added after scene "
+"initialization."
+msgstr ""
+
+#: doc/classes/VisibilityEnabler2D.xml:33
+msgid "If [code]true[/code], [RigidBody2D] nodes will be paused."
+msgstr ""
+
+#: doc/classes/VisibilityEnabler2D.xml:36
+msgid "If [code]true[/code], [AnimatedSprite] nodes will be paused."
+msgstr ""
+
+#: doc/classes/VisibilityEnabler2D.xml:42
+msgid "If [code]true[/code], [Particles2D] nodes will be paused."
+msgstr ""
+
+#: doc/classes/VisibilityEnabler2D.xml:45
+msgid ""
+"If [code]true[/code], the parent's [method Node._physics_process] will be "
+"stopped."
+msgstr ""
+
+#: doc/classes/VisibilityEnabler2D.xml:48
+msgid ""
+"If [code]true[/code], the parent's [method Node._process] will be stopped."
+msgstr ""
+
+#: doc/classes/VisibilityEnabler2D.xml:56
+msgid "This enabler will freeze [RigidBody2D] nodes."
+msgstr ""
+
+#: doc/classes/VisibilityEnabler2D.xml:59
+msgid "This enabler will stop [Particles2D] nodes."
+msgstr ""
+
+#: doc/classes/VisibilityEnabler2D.xml:62
+msgid "This enabler will stop the parent's _process function."
+msgstr ""
+
+#: doc/classes/VisibilityEnabler2D.xml:65
+msgid "This enabler will stop the parent's _physics_process function."
+msgstr ""
+
+#: doc/classes/VisibilityEnabler2D.xml:68
+msgid "This enabler will stop [AnimatedSprite] nodes animations."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier.xml:4 doc/classes/VisibilityNotifier2D.xml:4
+msgid "Detects approximately when the node is visible on screen."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier.xml:7
+msgid ""
+"The VisibilityNotifier detects when it is visible on the screen. It also "
+"notifies when its bounding rectangle enters or exits the screen or a "
+"[Camera]'s view.\n"
+"If you want nodes to be disabled automatically when they exit the screen, "
+"use [VisibilityEnabler] instead.\n"
+"[b]Note:[/b] VisibilityNotifier uses an approximate heuristic for "
+"performance reasons. It doesn't take walls and other occlusion into account. "
+"The heuristic is an implementation detail and may change in future versions. "
+"If you need precise visibility checking, use another method such as adding "
+"an [Area] node as a child of a [Camera] node and/or [method Vector3.dot]."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier.xml:17
+msgid ""
+"If [code]true[/code], the bounding box is on the screen.\n"
+"[b]Note:[/b] It takes one frame for the node's visibility to be assessed "
+"once added to the scene tree, so this method will return [code]false[/code] "
+"right after it is instantiated, even if it will be on screen in the draw "
+"pass."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier.xml:24
+msgid "The VisibilityNotifier's bounding box."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier.xml:31
+msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier.xml:37
+msgid "Emitted when the VisibilityNotifier exits a [Camera]'s view."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier.xml:42
+msgid "Emitted when the VisibilityNotifier enters the screen."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier.xml:47
+msgid "Emitted when the VisibilityNotifier exits the screen."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier2D.xml:7
+msgid ""
+"The VisibilityNotifier2D detects when it is visible on the screen. It also "
+"notifies when its bounding rectangle enters or exits the screen or a "
+"viewport.\n"
+"If you want nodes to be disabled automatically when they exit the screen, "
+"use [VisibilityEnabler2D] instead.\n"
+"[b]Note:[/b] For performance reasons, VisibilityNotifier2D uses an "
+"approximate heuristic with precision determined by [member ProjectSettings."
+"world/2d/cell_size]. If you need precise visibility checking, use another "
+"method such as adding an [Area2D] node as a child of a [Camera2D] node."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier2D.xml:18
+msgid ""
+"If [code]true[/code], the bounding rectangle is on the screen.\n"
+"[b]Note:[/b] It takes one frame for the node's visibility to be assessed "
+"once added to the scene tree, so this method will return [code]false[/code] "
+"right after it is instantiated, even if it will be on screen in the draw "
+"pass."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier2D.xml:25
+msgid "The VisibilityNotifier2D's bounding rectangle."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier2D.xml:31
+msgid "Emitted when the VisibilityNotifier2D enters the screen."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier2D.xml:36
+msgid "Emitted when the VisibilityNotifier2D exits the screen."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier2D.xml:42
+msgid "Emitted when the VisibilityNotifier2D enters a [Viewport]'s view."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier2D.xml:48
+msgid "Emitted when the VisibilityNotifier2D exits a [Viewport]'s view."
+msgstr ""
+
+#: doc/classes/VisualInstance.xml:4
+msgid "Parent of all visual 3D nodes."
+msgstr ""
+
+#: doc/classes/VisualInstance.xml:7
+msgid ""
+"The [VisualInstance] is used to connect a resource to a visual "
+"representation. All visual 3D nodes inherit from the [VisualInstance]. In "
+"general, you should not access the [VisualInstance] properties directly as "
+"they are accessed and managed by the nodes that inherit from "
+"[VisualInstance]. [VisualInstance] is the node representation of the "
+"[VisualServer] instance."
+msgstr ""
+
+#: doc/classes/VisualInstance.xml:15
+msgid ""
+"Returns the [AABB] (also known as the bounding box) for this "
+"[VisualInstance]. See also [method get_transformed_aabb]."
+msgstr ""
+
+#: doc/classes/VisualInstance.xml:21
+msgid ""
+"Returns the RID of the resource associated with this [VisualInstance]. For "
+"example, if the Node is a [MeshInstance], this will return the RID of the "
+"associated [Mesh]."
+msgstr ""
+
+#: doc/classes/VisualInstance.xml:27
+msgid ""
+"Returns the RID of this instance. This RID is the same as the RID returned "
+"by [method VisualServer.instance_create]. This RID is needed if you want to "
+"call [VisualServer] functions directly on this [VisualInstance]."
+msgstr ""
+
+#: doc/classes/VisualInstance.xml:34
+msgid ""
+"Returns [code]true[/code] when the specified layer is enabled in [member "
+"layers] and [code]false[/code] otherwise."
+msgstr ""
+
+#: doc/classes/VisualInstance.xml:40
+msgid ""
+"Returns the transformed [AABB] (also known as the bounding box) for this "
+"[VisualInstance].\n"
+"Transformed in this case means the [AABB] plus the position, rotation, and "
+"scale of the [Spatial]'s [Transform]. See also [method get_aabb]."
+msgstr ""
+
+#: doc/classes/VisualInstance.xml:48
+msgid ""
+"Sets the resource that is instantiated by this [VisualInstance], which "
+"changes how the engine handles the [VisualInstance] under the hood. "
+"Equivalent to [method VisualServer.instance_set_base]."
+msgstr ""
+
+#: doc/classes/VisualInstance.xml:56
+msgid "Enables a particular layer in [member layers]."
+msgstr ""
+
+#: doc/classes/VisualInstance.xml:62
+msgid ""
+"The render layer(s) this [VisualInstance] is drawn on.\n"
+"This object will only be visible for [Camera]s whose cull mask includes the "
+"render object this [VisualInstance] is set to."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:4
+msgid "A script implemented in the Visual Script programming environment."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:7
+msgid ""
+"A script implemented in the Visual Script programming environment. The "
+"script extends the functionality of all objects that instance it.\n"
+"[method Object.set_script] extends an existing object, if that object's "
+"class matches one of the script's base classes.\n"
+"You are most likely to use this class via the Visual Script editor or when "
+"writing plugins for it."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:12
+msgid ""
+"https://docs.godotengine.org/en/3.4/getting_started/scripting/visual_script/"
+"index.html"
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:19
+msgid "Add a custom signal with the specified name to the VisualScript."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:26
+msgid "Add a function with the specified name to the VisualScript."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:36
+msgid "Add a node to a function of the VisualScript."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:45
+msgid ""
+"Add a variable to the VisualScript, optionally giving it a default value or "
+"marking it as exported."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:55
+msgid ""
+"Add an argument to a custom signal added with [method add_custom_signal]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:62
+msgid "Get the count of a custom signal's arguments."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:70
+msgid "Get the name of a custom signal's argument."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:78
+msgid "Get the type of a custom signal's argument."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:86
+msgid "Remove a specific custom signal's argument."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:95
+msgid "Rename a custom signal's argument."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:104
+msgid "Change the type of a custom signal's argument."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:113
+msgid "Swap two of the arguments of a custom signal."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:124
+msgid ""
+"Connect two data ports. The value of [code]from_node[/code]'s "
+"[code]from_port[/code] would be fed into [code]to_node[/code]'s "
+"[code]to_port[/code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:135
+msgid ""
+"Disconnect two data ports previously connected with [method data_connect]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:142
+msgid "Returns the id of a function's entry point node."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:149
+msgid "Returns the position of the center of the screen for a given function."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:157
+msgid "Returns a node given its id and its function."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:165
+msgid "Returns a node's position in pixels."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:172
+msgid "Returns the default (initial) value of a variable."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:179
+msgid "Returns whether a variable is exported."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:186
+msgid ""
+"Returns the information for a given variable as a dictionary. The "
+"information includes its name, type, hint and usage."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:193
+msgid "Returns whether a signal exists with the specified name."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:204
+msgid "Returns whether the specified data ports are connected."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:211
+msgid "Returns whether a function exists with the specified name."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:219
+msgid "Returns whether a node exists with the given id."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:229
+msgid "Returns whether the specified sequence ports are connected."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:236
+msgid "Returns whether a variable exists with the specified name."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:243
+msgid "Remove a custom signal with the given name."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:250
+msgid "Remove a specific function and its nodes from the script."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:258
+msgid "Remove a specific node."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:265
+msgid "Remove a variable with the given name."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:273
+msgid "Change the name of a custom signal."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:281
+msgid "Change the name of a function."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:289
+msgid "Change the name of a variable."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:299
+msgid ""
+"Connect two sequence ports. The execution will flow from of [code]from_node[/"
+"code]'s [code]from_output[/code] into [code]to_node[/code].\n"
+"Unlike [method data_connect], there isn't a [code]to_port[/code], since the "
+"target node can have only one sequence port."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:310
+msgid ""
+"Disconnect two sequence ports previously connected with [method "
+"sequence_connect]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:318
+msgid "Position the center of the screen for a function."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:325
+msgid "Set the base type of the script."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:334
+msgid "Position a node on the screen."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:342
+msgid "Change the default (initial) value of a variable."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:350
+msgid "Change whether a variable is exported."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:358
+msgid ""
+"Set a variable's info, using the same format as [method get_variable_info]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScript.xml:367
+msgid "Emitted when the ports of a node are changed."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBasicTypeConstant.xml:4
+msgid "A Visual Script node representing a constant from the base types."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBasicTypeConstant.xml:7
+msgid ""
+"A Visual Script node representing a constant from base types, such as "
+"[constant Vector3.AXIS_X]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBasicTypeConstant.xml:15
+msgid "The type to get the constant from."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBasicTypeConstant.xml:18
+msgid "The name of the constant to return."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:4
+msgid "A Visual Script node used to call built-in functions."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:7
+msgid ""
+"A built-in function used inside a [VisualScript]. It is usually a math "
+"function or an utility function.\n"
+"See also [@GDScript], for the same functions in the GDScript language."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:16
+msgid "The function to be executed."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:21
+msgid "Return the sine of the input."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:24
+msgid "Return the cosine of the input."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:27
+msgid "Return the tangent of the input."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:30
+msgid "Return the hyperbolic sine of the input."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:33
+msgid "Return the hyperbolic cosine of the input."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:36
+msgid "Return the hyperbolic tangent of the input."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:39
+msgid "Return the arc sine of the input."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:42
+msgid "Return the arc cosine of the input."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:45
+msgid "Return the arc tangent of the input."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:48
+msgid ""
+"Return the arc tangent of the input, using the signs of both parameters to "
+"determine the exact angle."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:51
+msgid "Return the square root of the input."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:54
+msgid ""
+"Return the remainder of one input divided by the other, using floating-point "
+"numbers."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:57
+msgid ""
+"Return the positive remainder of one input divided by the other, using "
+"floating-point numbers."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:60
+msgid "Return the input rounded down."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:63
+msgid "Return the input rounded up."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:66
+msgid "Return the input rounded to the nearest integer."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:69
+msgid "Return the absolute value of the input."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:72
+msgid ""
+"Return the sign of the input, turning it into 1, -1, or 0. Useful to "
+"determine if the input is positive or negative."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:75
+msgid "Return the input raised to a given power."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:78
+msgid ""
+"Return the natural logarithm of the input. Note that this is not the typical "
+"base-10 logarithm function calculators use."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:81
+msgid ""
+"Return the mathematical constant [b]e[/b] raised to the specified power of "
+"the input. [b]e[/b] has an approximate value of 2.71828."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:84
+msgid ""
+"Return whether the input is NaN (Not a Number) or not. NaN is usually "
+"produced by dividing 0 by 0, though other ways exist."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:87
+msgid ""
+"Return whether the input is an infinite floating-point number or not. "
+"Infinity is usually produced by dividing a number by 0, though other ways "
+"exist."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:90
+msgid ""
+"Easing function, based on exponent. 0 is constant, 1 is linear, 0 to 1 is "
+"ease-in, 1+ is ease out. Negative values are in-out/out in."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:93
+msgid ""
+"Return the number of digit places after the decimal that the first non-zero "
+"digit occurs."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:96
+msgid "Return the input snapped to a given step."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:99
+msgid ""
+"Return a number linearly interpolated between the first two inputs, based on "
+"the third input. Uses the formula [code]a + (a - b) * t[/code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:106
+msgid "Moves the number toward a value, based on the third input."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:109
+msgid ""
+"Return the result of [code]value[/code] decreased by [code]step[/code] * "
+"[code]amount[/code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:112
+msgid ""
+"Randomize the seed (or the internal state) of the random number generator. "
+"Current implementation reseeds using a number based on time."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:115
+msgid ""
+"Return a random 32 bits integer value. To obtain a random value between 0 to "
+"N (where N is smaller than 2^32 - 1), you can use it with the remainder "
+"function."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:118
+msgid ""
+"Return a random floating-point value between 0 and 1. To obtain a random "
+"value between 0 to N, you can use it with multiplication."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:121
+msgid "Return a random floating-point value between the two inputs."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:124
+msgid "Set the seed for the random number generator."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:127
+msgid "Return a random value from the given seed, along with the new seed."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:130
+msgid "Convert the input from degrees to radians."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:133
+msgid "Convert the input from radians to degrees."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:136
+msgid "Convert the input from linear volume to decibel volume."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:139
+msgid "Convert the input from decibel volume to linear volume."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:152
+msgid "Return the greater of the two numbers, also known as their maximum."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:155
+msgid "Return the lesser of the two numbers, also known as their minimum."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:158
+msgid ""
+"Return the input clamped inside the given range, ensuring the result is "
+"never outside it. Equivalent to [code]min(max(input, range_low), range_high)"
+"[/code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:161
+msgid "Return the nearest power of 2 to the input."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:164
+msgid "Create a [WeakRef] from the input."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:167
+msgid "Create a [FuncRef] from the input."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:170
+msgid "Convert between types."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:173
+msgid ""
+"Return the type of the input as an integer. Check [enum Variant.Type] for "
+"the integers that might be returned."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:176
+msgid "Checks if a type is registered in the [ClassDB]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:179
+msgid "Return a character with the given ascii value."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:182
+msgid "Convert the input to a string."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:185
+msgid "Print the given string to the output window."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:188
+msgid "Print the given string to the standard error output."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:191
+msgid ""
+"Print the given string to the standard output, without adding a newline."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:194
+msgid "Serialize a [Variant] to a string."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:197
+msgid ""
+"Deserialize a [Variant] from a string serialized using [constant VAR_TO_STR]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:200
+msgid "Serialize a [Variant] to a [PoolByteArray]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:203
+msgid ""
+"Deserialize a [Variant] from a [PoolByteArray] serialized using [constant "
+"VAR_TO_BYTES]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:206
+msgid ""
+"Return the [Color] with the given name and alpha ranging from 0 to 1.\n"
+"[b]Note:[/b] Names are defined in [code]color_names.inc[/code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:210
+msgid ""
+"Return a number smoothly interpolated between the first two inputs, based on "
+"the third input. Similar to [constant MATH_LERP], but interpolates faster at "
+"the beginning and slower at the end. Using Hermite interpolation formula:\n"
+"[codeblock]\n"
+"var t = clamp((weight - from) / (to - from), 0.0, 1.0)\n"
+"return t * t * (3.0 - 2.0 * t)\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml:223
+msgid "Represents the size of the [enum BuiltinFunc] enum."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptClassConstant.xml:4
+msgid "Gets a constant from a given class."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptClassConstant.xml:7
+msgid ""
+"This node returns a constant from a given class, such as [constant "
+"TYPE_INT]. See the given class' documentation for available constants.\n"
+"[b]Input Ports:[/b]\n"
+"none\n"
+"[b]Output Ports:[/b]\n"
+"- Data (variant): [code]value[/code]"
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptClassConstant.xml:19
+msgid "The constant's parent class."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptClassConstant.xml:22
+msgid ""
+"The constant to return. See the given class for its available constants."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptComment.xml:4
+msgid "A Visual Script node used to annotate the script."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptComment.xml:7
+msgid ""
+"A Visual Script node used to display annotations in the script, so that code "
+"may be documented.\n"
+"Comment nodes can be resized so they encompass a group of nodes."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptComment.xml:16
+msgid "The text inside the comment node."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptComment.xml:19
+msgid "The comment node's size (in pixels)."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptComment.xml:22
+msgid "The comment node's title."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptComposeArray.xml:4
+msgid "A Visual Script Node used to create array from a list of items."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptComposeArray.xml:7
+msgid ""
+"A Visual Script Node used to compose array from the list of elements "
+"provided with custom in-graph UI hard coded in the VisualScript Editor."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCondition.xml:4
+msgid "A Visual Script node which branches the flow."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCondition.xml:7
+msgid ""
+"A Visual Script node that checks a [bool] input port. If [code]true[/code], "
+"it will exit via the \"true\" sequence port. If [code]false[/code], it will "
+"exit via the \"false\" sequence port. After exiting either, it exits via the "
+"\"done\" port. Sequence ports may be left disconnected.\n"
+"[b]Input Ports:[/b]\n"
+"- Sequence: [code]if (cond) is[/code]\n"
+"- Data (boolean): [code]cond[/code]\n"
+"[b]Output Ports:[/b]\n"
+"- Sequence: [code]true[/code]\n"
+"- Sequence: [code]false[/code]\n"
+"- Sequence: [code]done[/code]"
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptConstant.xml:4
+msgid "Gets a contant's value."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptConstant.xml:7
+msgid ""
+"This node returns a constant's value.\n"
+"[b]Input Ports:[/b]\n"
+"none\n"
+"[b]Output Ports:[/b]\n"
+"- Data (variant): [code]get[/code]"
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptConstant.xml:19
+msgid "The constant's type."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptConstant.xml:22
+msgid "The constant's value."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptConstructor.xml:4
+msgid "A Visual Script node which calls a base type constructor."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptConstructor.xml:7
+msgid ""
+"A Visual Script node which calls a base type constructor. It can be used for "
+"type conversion as well."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:4
+msgid "A scripted Visual Script node."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:7
+msgid "A custom Visual Script node which can be scripted in powerful ways."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:15
+msgid "Return the node's title."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:21
+msgid "Return the node's category."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:27
+msgid "Return the count of input value ports."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:34
+msgid ""
+"Return the specified input port's hint. See the [enum @GlobalScope."
+"PropertyHint] hints."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:41
+msgid "Return the specified input port's hint string."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:48
+msgid "Return the specified input port's name."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:55
+msgid ""
+"Return the specified input port's type. See the [enum Variant.Type] values."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:61
+msgid "Return the amount of output [b]sequence[/b] ports."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:68
+msgid "Return the specified [b]sequence[/b] output's name."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:74
+msgid "Return the amount of output value ports."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:81
+msgid ""
+"Return the specified output port's hint. See the [enum @GlobalScope."
+"PropertyHint] hints."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:88
+msgid "Return the specified output port's hint string."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:95
+msgid "Return the specified output port's name."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:102
+msgid ""
+"Return the specified output port's type. See the [enum Variant.Type] values."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:108
+msgid ""
+"Return the custom node's text, which is shown right next to the input "
+"[b]sequence[/b] port (if there is none, on the place that is usually taken "
+"by it)."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:114
+msgid ""
+"Return the size of the custom node's working memory. See [method _step] for "
+"more details."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:120
+msgid "Return whether the custom node has an input [b]sequence[/b] port."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:130
+msgid ""
+"Execute the custom node's logic, returning the index of the output sequence "
+"port to use or a [String] when there is an error.\n"
+"The [code]inputs[/code] array contains the values of the input ports.\n"
+"[code]outputs[/code] is an array whose indices should be set to the "
+"respective outputs.\n"
+"The [code]start_mode[/code] is usually [constant START_MODE_BEGIN_SEQUENCE], "
+"unless you have used the [code]STEP_*[/code] constants.\n"
+"[code]working_mem[/code] is an array which can be used to persist "
+"information between runs of the custom node. The size needs to be predefined "
+"using [method _get_working_memory_size].\n"
+"When returning, you can mask the returned value with one of the "
+"[code]STEP_*[/code] constants."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:141
+msgid "The start mode used the first time when [method _step] is called."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:144
+msgid ""
+"The start mode used when [method _step] is called after coming back from a "
+"[constant STEP_PUSH_STACK_BIT]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:147
+msgid ""
+"The start mode used when [method _step] is called after resuming from "
+"[constant STEP_YIELD_BIT]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:150
+msgid ""
+"Hint used by [method _step] to tell that control should return to it when "
+"there is no other node left to execute.\n"
+"This is used by [VisualScriptCondition] to redirect the sequence to the "
+"\"Done\" port after the [code]true[/code]/[code]false[/code] branch has "
+"finished execution."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:154
+msgid ""
+"Hint used by [method _step] to tell that control should return back, either "
+"hitting a previous [constant STEP_PUSH_STACK_BIT] or exiting the function."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:159
+msgid ""
+"Hint used by [method _step] to tell that control should stop and exit the "
+"function."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:162
+msgid ""
+"Hint used by [method _step] to tell that the function should be yielded.\n"
+"Using this requires you to have at least one working memory slot, which is "
+"used for the [VisualScriptFunctionState]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptDeconstruct.xml:4
+#: modules/visual_script/doc_classes/VisualScriptDeconstruct.xml:7
+msgid ""
+"A Visual Script node which deconstructs a base type instance into its parts."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptDeconstruct.xml:15
+msgid "The type to deconstruct."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptEditor.xml:16
+msgid ""
+"Add a custom Visual Script node to the editor. It'll be placed under "
+"\"Custom Nodes\" with the [code]category[/code] as the parameter."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptEditor.xml:24
+msgid ""
+"Remove a custom Visual Script node from the editor. Custom nodes already "
+"placed on scripts won't be removed."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptEditor.xml:31
+msgid "Emitted when a custom Visual Script node is added or removed."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptEmitSignal.xml:4
+msgid "Emits a specified signal."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptEmitSignal.xml:7
+msgid ""
+"Emits a specified signal when it is executed.\n"
+"[b]Input Ports:[/b]\n"
+"- Sequence: [code]emit[/code]\n"
+"[b]Output Ports:[/b]\n"
+"- Sequence"
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptEmitSignal.xml:19
+msgid "The signal to emit."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptEngineSingleton.xml:4
+#: modules/visual_script/doc_classes/VisualScriptEngineSingleton.xml:7
+msgid "A Visual Script node returning a singleton from [@GlobalScope]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptEngineSingleton.xml:15
+msgid "The singleton's name."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptExpression.xml:4
+msgid "A Visual Script node that can execute a custom expression."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptExpression.xml:7
+msgid ""
+"A Visual Script node that can execute a custom expression. Values can be "
+"provided for the input and the expression result can be retrieved from the "
+"output."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunction.xml:4
+msgid "A Visual Script node representing a function."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunction.xml:7
+msgid ""
+"[VisualScriptFunction] represents a function header. It is the starting "
+"point for the function body and can be used to tweak the function's "
+"properties (e.g. RPC mode)."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:4
+msgid "A Visual Script node for calling a function."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:7
+msgid ""
+"[VisualScriptFunctionCall] is created when you add or drag and drop a "
+"function onto the Visual Script graph. It allows to tweak parameters of the "
+"call, e.g. what object the function is called on."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:15
+msgid ""
+"The script to be used when [member call_mode] is set to [constant "
+"CALL_MODE_INSTANCE]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:18
+#: modules/visual_script/doc_classes/VisualScriptYieldSignal.xml:15
+msgid ""
+"The base type to be used when [member call_mode] is set to [constant "
+"CALL_MODE_INSTANCE]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:21
+msgid ""
+"The type to be used when [member call_mode] is set to [constant "
+"CALL_MODE_BASIC_TYPE]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:24
+msgid ""
+"[code]call_mode[/code] determines the target object on which the method will "
+"be called. See [enum CallMode] for options."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:27
+msgid "The name of the function to be called."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:30
+#: modules/visual_script/doc_classes/VisualScriptYieldSignal.xml:21
+msgid ""
+"The node path to use when [member call_mode] is set to [constant "
+"CALL_MODE_NODE_PATH]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:33
+msgid ""
+"The mode for RPC calls. See [method Node.rpc] for more details and [enum "
+"RPCCallMode] for available options."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:36
+msgid ""
+"The singleton to call the method on. Used when [member call_mode] is set to "
+"[constant CALL_MODE_SINGLETON]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:39
+msgid ""
+"Number of default arguments that will be used when calling the function. "
+"Can't be higher than the number of available default arguments in the "
+"method's declaration."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:42
+msgid ""
+"If [code]false[/code], call errors (e.g. wrong number of arguments) will be "
+"ignored."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:47
+msgid "The method will be called on this [Object]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:50
+msgid "The method will be called on the given [Node] in the scene tree."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:53
+msgid ""
+"The method will be called on an instanced node with the given type and "
+"script."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:56
+msgid "The method will be called on a GDScript basic type (e.g. [Vector2])."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:59
+msgid "The method will be called on a singleton."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:62
+msgid "The method will be called locally."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:65
+msgid "The method will be called remotely."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:68
+msgid "The method will be called remotely using an unreliable protocol."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:71
+msgid "The method will be called remotely for the given peer."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml:74
+msgid ""
+"The method will be called remotely for the given peer, using an unreliable "
+"protocol."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionState.xml:4
+msgid "A Visual Script node representing a function state."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionState.xml:7
+msgid ""
+"[VisualScriptFunctionState] is returned from [VisualScriptYield] and can be "
+"used to resume a paused function call."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionState.xml:18
+msgid ""
+"Connects this [VisualScriptFunctionState] to a signal in the given object to "
+"automatically resume when it's emitted."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionState.xml:24
+msgid "Returns whether the function state is valid."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptFunctionState.xml:31
+msgid "Resumes the function to run from the point it was yielded."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptGlobalConstant.xml:4
+#: modules/visual_script/doc_classes/VisualScriptGlobalConstant.xml:7
+msgid "A Visual Script node returning a constant from [@GlobalScope]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptGlobalConstant.xml:15
+msgid "The constant to be used."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptIndexGet.xml:4
+msgid "A Visual Script node for getting a value from an array or a dictionary."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptIndexGet.xml:7
+msgid ""
+"[VisualScriptIndexGet] will return the value stored in an array or a "
+"dictionary under the given index."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptIndexSet.xml:4
+msgid "A Visual Script node for setting a value in an array or a dictionary."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptIndexSet.xml:7
+msgid ""
+"[VisualScriptIndexSet] will set the value stored in an array or a dictionary "
+"under the given index to the provided new value."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptInputAction.xml:4
+msgid "A Visual Script node returning a state of an action."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptInputAction.xml:7
+msgid ""
+"[VisualScriptInputAction] can be used to check if an action is pressed or "
+"released."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptInputAction.xml:15
+msgid "Name of the action."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptInputAction.xml:18
+msgid "State of the action to check. See [enum Mode] for options."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptInputAction.xml:23
+msgid "[code]True[/code] if action is pressed."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptInputAction.xml:26
+msgid "[code]True[/code] if action is released (i.e. not pressed)."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptInputAction.xml:29
+msgid "[code]True[/code] on the frame the action was pressed."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptInputAction.xml:32
+msgid "[code]True[/code] on the frame the action was released."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptIterator.xml:4
+msgid "Steps through items in a given input."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptIterator.xml:7
+msgid ""
+"This node steps through each item in a given input. Input can be any "
+"sequence data type, such as an [Array] or [String]. When each item has been "
+"processed, execution passed out the [code]exit[/code] Sequence port.\n"
+"[b]Input Ports:[/b]\n"
+"- Sequence: [code]for (elem) in (input)[/code]\n"
+"- Data (variant): [code]input[/code]\n"
+"[b]Output Ports:[/b]\n"
+"- Sequence: [code]each[/code]\n"
+"- Sequence: [code]exit[/code]\n"
+"- Data (variant): [code]elem[/code]"
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptLists.xml:4
+msgid "A Visual Script virtual class for in-graph editable nodes."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptLists.xml:7
+msgid ""
+"A Visual Script virtual class that defines the shape and the default "
+"behavior of the nodes that have to be in-graph editable nodes."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptLists.xml:18
+msgid "Adds an input port to the Visual Script node."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptLists.xml:27
+msgid "Adds an output port to the Visual Script node."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptLists.xml:34
+msgid "Removes an input port from the Visual Script node."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptLists.xml:41
+msgid "Removes an output port from the Visual Script node."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptLists.xml:49
+msgid "Sets the name of an input port."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptLists.xml:57
+msgid "Sets the type of an input port."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptLists.xml:65
+msgid "Sets the name of an output port."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptLists.xml:73
+msgid "Sets the type of an output port."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptLocalVar.xml:4
+msgid "Gets a local variable's value."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptLocalVar.xml:7
+msgid ""
+"Returns a local variable's value. \"Var Name\" must be supplied, with an "
+"optional type.\n"
+"[b]Input Ports:[/b]\n"
+"none\n"
+"[b]Output Ports:[/b]\n"
+"- Data (variant): [code]get[/code]"
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptLocalVar.xml:19
+#: modules/visual_script/doc_classes/VisualScriptLocalVarSet.xml:21
+msgid "The local variable's type."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptLocalVar.xml:22
+#: modules/visual_script/doc_classes/VisualScriptLocalVarSet.xml:24
+msgid "The local variable's name."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptLocalVarSet.xml:4
+msgid "Changes a local variable's value."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptLocalVarSet.xml:7
+msgid ""
+"Changes a local variable's value to the given input. The new value is also "
+"provided on an output Data port.\n"
+"[b]Input Ports:[/b]\n"
+"- Sequence\n"
+"- Data (variant): [code]set[/code]\n"
+"[b]Output Ports:[/b]\n"
+"- Sequence\n"
+"- Data (variant): [code]get[/code]"
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptMathConstant.xml:4
+msgid "Commonly used mathematical constants."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptMathConstant.xml:7
+msgid ""
+"Provides common math constants, such as Pi, on an output Data port.\n"
+"[b]Input Ports:[/b]\n"
+"none\n"
+"[b]Output Ports:[/b]\n"
+"- Data (variant): [code]get[/code]"
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptMathConstant.xml:19
+msgid "The math constant."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptMathConstant.xml:24
+msgid "Unity: [code]1[/code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptMathConstant.xml:27
+msgid "Pi: [code]3.141593[/code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptMathConstant.xml:30
+msgid "Pi divided by two: [code]1.570796[/code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptMathConstant.xml:33
+msgid "Tau: [code]6.283185[/code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptMathConstant.xml:36
+msgid ""
+"Mathematical constant [code]e[/code], the natural log base: [code]2.718282[/"
+"code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptMathConstant.xml:39
+msgid "Square root of two: [code]1.414214[/code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptMathConstant.xml:42
+msgid "Infinity: [code]inf[/code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptMathConstant.xml:45
+msgid "Not a number: [code]nan[/code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptMathConstant.xml:48
+msgid "Represents the size of the [enum MathConstant] enum."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptNode.xml:4
+msgid "A node which is part of a [VisualScript]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptNode.xml:7
+msgid ""
+"A node which is part of a [VisualScript]. Not to be confused with [Node], "
+"which is a part of a [SceneTree]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptNode.xml:16
+msgid ""
+"Returns the default value of a given port. The default value is used when "
+"nothing is connected to the port."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptNode.xml:22
+msgid "Returns the [VisualScript] instance the node is bound to."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptNode.xml:28
+msgid ""
+"Notify that the node's ports have changed. Usually used in conjunction with "
+"[VisualScriptCustomNode] ."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptNode.xml:36
+msgid "Change the default value of a given port."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptNode.xml:43
+msgid "Emitted when the available input/output ports are changed."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptOperator.xml:4
+msgid "A Visual Script node that performs an operation on two values."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptOperator.xml:7
+msgid ""
+"[b]Input Ports:[/b]\n"
+"- Data (variant): [code]A[/code]\n"
+"- Data (variant): [code]B[/code]\n"
+"[b]Output Ports:[/b]\n"
+"- Data (variant): [code]result[/code]"
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptOperator.xml:19
+msgid ""
+"The operation to be performed. See [enum Variant.Operator] for available "
+"options."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptOperator.xml:22
+msgid ""
+"The type of the values for this operation. See [enum Variant.Type] for "
+"available options."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPreload.xml:4
+msgid "Creates a new [Resource] or loads one from the filesystem."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPreload.xml:7
+msgid ""
+"Creates a new [Resource] or loads one from the filesystem.\n"
+"[b]Input Ports:[/b]\n"
+"none\n"
+"[b]Output Ports:[/b]\n"
+"- Data (object): [code]res[/code]"
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPreload.xml:19
+msgid "The [Resource] to load."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertyGet.xml:4
+msgid "A Visual Script node returning a value of a property from an [Object]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertyGet.xml:7
+msgid ""
+"[VisualScriptPropertyGet] can return a value of any property from the "
+"current object or other objects."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertyGet.xml:15
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:18
+msgid ""
+"The script to be used when [member set_mode] is set to [constant "
+"CALL_MODE_INSTANCE]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertyGet.xml:18
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:21
+msgid ""
+"The base type to be used when [member set_mode] is set to [constant "
+"CALL_MODE_INSTANCE]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertyGet.xml:21
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:24
+msgid ""
+"The type to be used when [member set_mode] is set to [constant "
+"CALL_MODE_BASIC_TYPE]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertyGet.xml:24
+msgid ""
+"The indexed name of the property to retrieve. See [method Object."
+"get_indexed] for details."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertyGet.xml:27
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:30
+msgid ""
+"The node path to use when [member set_mode] is set to [constant "
+"CALL_MODE_NODE_PATH]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertyGet.xml:30
+msgid ""
+"The name of the property to retrieve. Changing this will clear [member "
+"index]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertyGet.xml:33
+msgid ""
+"[code]set_mode[/code] determines the target object from which the property "
+"will be retrieved. See [enum CallMode] for options."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertyGet.xml:38
+msgid "The property will be retrieved from this [Object]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertyGet.xml:41
+msgid "The property will be retrieved from the given [Node] in the scene tree."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertyGet.xml:44
+msgid ""
+"The property will be retrieved from an instanced node with the given type "
+"and script."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertyGet.xml:47
+msgid ""
+"The property will be retrieved from a GDScript basic type (e.g. [Vector2])."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:4
+msgid "A Visual Script node that sets a property of an [Object]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:7
+msgid ""
+"[VisualScriptPropertySet] can set the value of any property from the current "
+"object or other objects."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:15
+msgid ""
+"The additional operation to perform when assigning. See [enum AssignOp] for "
+"options."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:27
+msgid ""
+"The indexed name of the property to set. See [method Object.set_indexed] for "
+"details."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:33
+msgid ""
+"The name of the property to set. Changing this will clear [member index]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:36
+msgid ""
+"[code]set_mode[/code] determines the target object on which the property "
+"will be set. See [enum CallMode] for options."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:41
+msgid "The property will be set on this [Object]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:44
+msgid "The property will be set on the given [Node] in the scene tree."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:47
+msgid ""
+"The property will be set on an instanced node with the given type and script."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:50
+msgid "The property will be set on a GDScript basic type (e.g. [Vector2])."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:53
+msgid "The property will be assigned regularly."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:56
+msgid ""
+"The value will be added to the property. Equivalent of doing [code]+=[/code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:59
+msgid ""
+"The value will be subtracted from the property. Equivalent of doing [code]-"
+"=[/code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:62
+msgid ""
+"The property will be multiplied by the value. Equivalent of doing [code]*=[/"
+"code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:65
+msgid ""
+"The property will be divided by the value. Equivalent of doing [code]/=[/"
+"code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:68
+msgid ""
+"A modulo operation will be performed on the property and the value. "
+"Equivalent of doing [code]%=[/code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:71
+msgid ""
+"The property will be binarly shifted to the left by the given value. "
+"Equivalent of doing [code]<<[/code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:74
+msgid ""
+"The property will be binarly shifted to the right by the given value. "
+"Equivalent of doing [code]>>[/code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:77
+msgid ""
+"A binary [code]AND[/code] operation will be performed on the property. "
+"Equivalent of doing [code]&=[/code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:80
+msgid ""
+"A binary [code]OR[/code] operation will be performed on the property. "
+"Equivalent of doing [code]|=[/code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptPropertySet.xml:83
+msgid ""
+"A binary [code]XOR[/code] operation will be performed on the property. "
+"Equivalent of doing [code]^=[/code]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptReturn.xml:4
+msgid "Exits a function and returns an optional value."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptReturn.xml:7
+msgid ""
+"Ends the execution of a function and returns control to the calling "
+"function. Optionally, it can return a [Variant] value.\n"
+"[b]Input Ports:[/b]\n"
+"- Sequence\n"
+"- Data (variant): [code]result[/code] (optional)\n"
+"[b]Output Ports:[/b]\n"
+"none"
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptReturn.xml:20
+msgid "If [code]true[/code], the [code]return[/code] input port is available."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptReturn.xml:23
+msgid "The return value's data type."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptSceneNode.xml:4
+msgid "Node reference."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptSceneNode.xml:7
+msgid ""
+"A direct reference to a node.\n"
+"[b]Input Ports:[/b]\n"
+"none\n"
+"[b]Output Ports:[/b]\n"
+"- Data: [code]node[/code] (obj)"
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptSceneNode.xml:19
+msgid "The node's path in the scene tree."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptSceneTree.xml:4
+#: modules/visual_script/doc_classes/VisualScriptSceneTree.xml:7
+msgid "A Visual Script node for accessing [SceneTree] methods."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptSelect.xml:4
+msgid "Chooses between two input values."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptSelect.xml:7
+msgid ""
+"Chooses between two input values based on a Boolean condition.\n"
+"[b]Input Ports:[/b]\n"
+"- Data (boolean): [code]cond[/code]\n"
+"- Data (variant): [code]a[/code]\n"
+"- Data (variant): [code]b[/code]\n"
+"[b]Output Ports:[/b]\n"
+"- Data (variant): [code]out[/code]"
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptSelect.xml:21
+msgid "The input variables' type."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptSelf.xml:4
+msgid "Outputs a reference to the current instance."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptSelf.xml:7
+msgid ""
+"Provides a reference to the node running the visual script.\n"
+"[b]Input Ports:[/b]\n"
+"none\n"
+"[b]Output Ports:[/b]\n"
+"- Data (object): [code]instance[/code]"
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptSequence.xml:4
+msgid "Executes a series of Sequence ports."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptSequence.xml:7
+msgid ""
+"Steps through a series of one or more output Sequence ports. The "
+"[code]current[/code] data port outputs the currently executing item.\n"
+"[b]Input Ports:[/b]\n"
+"- Sequence: [code]in order[/code]\n"
+"[b]Output Ports:[/b]\n"
+"- Sequence: [code]1[/code]\n"
+"- Sequence: [code]2 - n[/code] (optional)\n"
+"- Data (int): [code]current[/code]"
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptSequence.xml:21
+msgid "The number of steps in the sequence."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptSubCall.xml:4
+msgid "Calls a method called [code]_subcall[/code] in this object."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptSubCall.xml:7
+msgid ""
+"[VisualScriptSubCall] will call method named [code]_subcall[/code] in the "
+"current script. It will fail if the method doesn't exist or the provided "
+"arguments are wrong."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptSubCall.xml:16
+msgid "Called by this node."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptSwitch.xml:4
+msgid "Branches program flow based on a given input's value."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptSwitch.xml:7
+msgid ""
+"Branches the flow based on an input's value. Use [b]Case Count[/b] in the "
+"Inspector to set the number of branches and each comparison's optional "
+"type.\n"
+"[b]Input Ports:[/b]\n"
+"- Sequence: [code]'input' is[/code]\n"
+"- Data (variant): [code]=[/code]\n"
+"- Data (variant): [code]=[/code] (optional)\n"
+"- Data (variant): [code]input[/code]\n"
+"[b]Output Ports:[/b]\n"
+"- Sequence\n"
+"- Sequence (optional)\n"
+"- Sequence: [code]done[/code]"
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptTypeCast.xml:4
+msgid "A Visual Script node that casts the given value to another type."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptTypeCast.xml:7
+msgid ""
+"[VisualScriptTypeCast] will perform a type conversion to an [Object]-derived "
+"type."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptTypeCast.xml:15
+msgid ""
+"The target script class to be converted to. If none, only the [member "
+"base_type] will be used."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptTypeCast.xml:18
+msgid "The target type to be converted to."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptVariableGet.xml:4
+msgid "Gets a variable's value."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptVariableGet.xml:7
+msgid ""
+"Returns a variable's value. \"Var Name\" must be supplied, with an optional "
+"type.\n"
+"[b]Input Ports:[/b]\n"
+"none\n"
+"[b]Output Ports:[/b]\n"
+"- Data (variant): [code]value[/code]"
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptVariableGet.xml:19
+#: modules/visual_script/doc_classes/VisualScriptVariableSet.xml:20
+msgid "The variable's name."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptVariableSet.xml:4
+msgid "Changes a variable's value."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptVariableSet.xml:7
+msgid ""
+"Changes a variable's value to the given input.\n"
+"[b]Input Ports:[/b]\n"
+"- Sequence\n"
+"- Data (variant): [code]set[/code]\n"
+"[b]Output Ports:[/b]\n"
+"- Sequence"
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptWhile.xml:4
+msgid "Conditional loop."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptWhile.xml:7
+msgid ""
+"Loops while a condition is [code]true[/code]. Execution continues out the "
+"[code]exit[/code] Sequence port when the loop terminates.\n"
+"[b]Input Ports:[/b]\n"
+"- Sequence: [code]while(cond)[/code]\n"
+"- Data (bool): [code]cond[/code]\n"
+"[b]Output Ports:[/b]\n"
+"- Sequence: [code]repeat[/code]\n"
+"- Sequence: [code]exit[/code]"
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptYield.xml:4
+msgid "A Visual Script node used to pause a function execution."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptYield.xml:7
+msgid ""
+"[VisualScriptYield] will pause the function call and return "
+"[VisualScriptFunctionState], which can be used to resume the function."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptYield.xml:15
+msgid ""
+"The mode to use for yielding. See [enum YieldMode] for available options."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptYield.xml:18
+msgid "The time to wait when [member mode] is set to [constant YIELD_WAIT]."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptYield.xml:23
+msgid "Yields during an idle frame."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptYield.xml:26
+msgid "Yields during a physics frame."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptYield.xml:29
+msgid "Yields a function and waits the given time."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptYieldSignal.xml:4
+msgid "A Visual Script node yielding for a signal."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptYieldSignal.xml:7
+msgid ""
+"[VisualScriptYieldSignal] will pause the function execution until the "
+"provided signal is emitted."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptYieldSignal.xml:18
+msgid ""
+"[code]call_mode[/code] determines the target object to wait for the signal "
+"emission. See [enum CallMode] for options."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptYieldSignal.xml:24
+msgid "The signal name to be waited for."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptYieldSignal.xml:29
+msgid "A signal from this [Object] will be used."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptYieldSignal.xml:32
+msgid "A signal from the given [Node] in the scene tree will be used."
+msgstr ""
+
+#: modules/visual_script/doc_classes/VisualScriptYieldSignal.xml:35
+msgid "A signal from an instanced node with the given type will be used."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:4
+msgid "Server for anything visible."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:7
+msgid ""
+"Server for anything visible. The visual server is the API backend for "
+"everything visible. The whole scene system mounts on it to display.\n"
+"The visual server is completely opaque, the internals are entirely "
+"implementation specific and cannot be accessed.\n"
+"The visual server can be used to bypass the scene system entirely.\n"
+"Resources are created using the [code]*_create[/code] functions.\n"
+"All objects are drawn to a viewport. You can use the [Viewport] attached to "
+"the [SceneTree] or you can create one yourself with [method "
+"viewport_create]. When using a custom scenario or canvas, the scenario or "
+"canvas needs to be attached to the viewport using [method "
+"viewport_set_scenario] or [method viewport_attach_canvas].\n"
+"In 3D, all visual objects must be associated with a scenario. The scenario "
+"is a visual representation of the world. If accessing the visual server from "
+"a running game, the scenario can be accessed from the scene tree from any "
+"[Spatial] node with [method Spatial.get_world]. Otherwise, a scenario can be "
+"created with [method scenario_create].\n"
+"Similarly, in 2D, a canvas is needed to draw all canvas items.\n"
+"In 3D, all visible objects are comprised of a resource and an instance. A "
+"resource can be a mesh, a particle system, a light, or any other 3D object. "
+"In order to be visible resources must be attached to an instance using "
+"[method instance_set_base]. The instance must also be attached to the "
+"scenario using [method instance_set_scenario] in order to be visible.\n"
+"In 2D, all visible objects are some form of canvas item. In order to be "
+"visible, a canvas item needs to be the child of a canvas attached to a "
+"viewport, or it needs to be the child of another canvas item that is "
+"eventually attached to the canvas."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:18
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/optimization/using_servers.html"
+msgstr ""
+
+#: doc/classes/VisualServer.xml:28
+msgid "Sets images to be rendered in the window margin."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:38
+msgid ""
+"Sets margin size, where black bars (or images, if [method "
+"black_bars_set_images] was used) are rendered."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:44
+msgid ""
+"Creates a camera and adds it to the VisualServer. It can be accessed with "
+"the RID that is returned. This RID will be used in all [code]camera_*[/code] "
+"VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:53
+msgid ""
+"Sets the cull mask associated with this camera. The cull mask describes "
+"which 3D layers are rendered by this camera. Equivalent to [member Camera."
+"cull_mask]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:61
+msgid ""
+"Sets the environment used by this camera. Equivalent to [member Camera."
+"environment]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:72
+msgid ""
+"Sets camera to use frustum projection. This mode allows adjusting the "
+"[code]offset[/code] argument to create \"tilted frustum\" effects."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:82
+msgid ""
+"Sets camera to use orthogonal projection, also known as orthographic "
+"projection. Objects remain the same size on the screen no matter how far "
+"away they are."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:92
+msgid ""
+"Sets camera to use perspective projection. Objects on the screen becomes "
+"smaller when they are far away."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:100
+msgid "Sets [Transform] of camera."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:108
+msgid ""
+"If [code]true[/code], preserves the horizontal aspect ratio which is "
+"equivalent to [constant Camera.KEEP_WIDTH]. If [code]false[/code], preserves "
+"the vertical aspect ratio which is equivalent to [constant Camera."
+"KEEP_HEIGHT]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:114
+msgid ""
+"Creates a canvas and returns the assigned [RID]. It can be accessed with the "
+"RID that is returned. This RID will be used in all [code]canvas_*[/code] "
+"VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:125
+msgid "Adds a circle command to the [CanvasItem]'s draw commands."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:133
+msgid ""
+"If ignore is [code]true[/code], the VisualServer does not perform clipping."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:145
+msgid "Adds a line command to the [CanvasItem]'s draw commands."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:157
+msgid "Adds a mesh command to the [CanvasItem]'s draw commands."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:167
+msgid ""
+"Adds a [MultiMesh] to the [CanvasItem]'s draw commands. Only affects its "
+"aabb at the moment."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:184
+msgid ""
+"Adds a nine patch image to the [CanvasItem]'s draw commands.\n"
+"See [NinePatchRect] for more explanation."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:195
+msgid "Adds a particle system to the [CanvasItem]'s draw commands."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:208
+msgid "Adds a polygon to the [CanvasItem]'s draw commands."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:219
+msgid ""
+"Adds a polyline, which is a line from multiple points with a width, to the "
+"[CanvasItem]'s draw commands."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:232
+msgid "Adds a primitive to the [CanvasItem]'s draw commands."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:241
+msgid "Adds a rectangle to the [CanvasItem]'s draw commands."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:249
+msgid ""
+"Adds a [Transform2D] command to the [CanvasItem]'s draw commands.\n"
+"This sets the extra_matrix uniform when executed. This affects the later "
+"commands of the canvas item."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:263
+msgid "Adds a textured rect to the [CanvasItem]'s draw commands."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:277
+msgid ""
+"Adds a texture rect with region setting to the [CanvasItem]'s draw commands."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:295
+msgid "Adds a triangle array to the [CanvasItem]'s draw commands."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:302
+msgid "Clears the [CanvasItem] and removes all commands in it."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:308
+msgid ""
+"Creates a new [CanvasItem] and returns its [RID]. It can be accessed with "
+"the RID that is returned. This RID will be used in all [code]canvas_item_*[/"
+"code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:317
+msgid "Sets clipping for the [CanvasItem]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:326
+msgid "Sets the [CanvasItem] to copy a rect to the backbuffer."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:335
+msgid "Defines a custom drawing rectangle for the [CanvasItem]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:343
+msgid ""
+"Enables the use of distance fields for GUI elements that are rendering "
+"distance field based fonts."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:351
+msgid "Sets [CanvasItem] to be drawn behind its parent."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:359
+msgid "Sets the index for the [CanvasItem]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:367 doc/classes/VisualServer.xml:493
+#: doc/classes/VisualServer.xml:549
+msgid ""
+"The light mask. See [LightOccluder2D] for more information on light masks."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:375
+msgid "Sets a new material to the [CanvasItem]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:383
+msgid "Sets the color that modulates the [CanvasItem] and its children."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:391
+msgid ""
+"Sets the parent for the [CanvasItem]. The parent can be another canvas item, "
+"or it can be the root canvas that is attached to the viewport."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:399
+msgid "Sets the color that modulates the [CanvasItem] without children."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:407
+msgid "Sets if [CanvasItem]'s children should be sorted by y-position."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:415
+msgid "Sets the [CanvasItem]'s [Transform2D]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:423
+msgid "Sets if the [CanvasItem] uses its parent's material."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:431
+msgid "Sets if the canvas item (including its children) is visible."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:439
+msgid ""
+"If this is enabled, the Z index of the parent will be added to the "
+"children's Z index."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:447
+msgid ""
+"Sets the [CanvasItem]'s Z index, i.e. its draw order (lower indexes are "
+"drawn first)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:455
+msgid ""
+"Attaches the canvas light to the canvas. Removes it from its previous canvas."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:461
+msgid ""
+"Creates a canvas light and adds it to the VisualServer. It can be accessed "
+"with the RID that is returned. This RID will be used in all "
+"[code]canvas_light_*[/code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:470
+msgid ""
+"Attaches a light occluder to the canvas. Removes it from its previous canvas."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:476
+msgid ""
+"Creates a light occluder and adds it to the VisualServer. It can be accessed "
+"with the RID that is returned. This RID will be used in all "
+"[code]canvas_light_ocluder_*[/code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:485
+msgid "Enables or disables light occluder."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:501
+msgid "Sets a light occluder's polygon."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:509
+msgid "Sets a light occluder's [Transform2D]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:517
+msgid "Sets the color for a light."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:525
+msgid "Enables or disables a canvas light."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:533
+msgid "Sets a canvas light's energy."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:541
+msgid "Sets a canvas light's height."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:557
+msgid ""
+"The binary mask used to determine which layers this canvas light's shadows "
+"affects. See [LightOccluder2D] for more information on light masks."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:566
+msgid "The layer range that gets rendered with this light."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:574
+msgid "The mode of the light, see [enum CanvasLightMode] constants."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:582
+msgid ""
+"Sets the texture's scale factor of the light. Equivalent to [member Light2D."
+"texture_scale]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:590
+msgid ""
+"Sets the width of the shadow buffer, size gets scaled to the next power of "
+"two for this."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:598
+msgid "Sets the color of the canvas light's shadow."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:606
+msgid "Enables or disables the canvas light's shadow."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:614
+msgid ""
+"Sets the canvas light's shadow's filter, see [enum CanvasLightShadowFilter] "
+"constants."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:622
+msgid "Sets the length of the shadow's gradient."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:630
+msgid "Smoothens the shadow. The lower, the smoother."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:638
+msgid ""
+"Sets texture to be used by light. Equivalent to [member Light2D.texture]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:646
+msgid ""
+"Sets the offset of the light's texture. Equivalent to [member Light2D."
+"offset]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:654
+msgid "Sets the canvas light's [Transform2D]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:663
+msgid ""
+"Sets the Z range of objects that will be affected by this light. Equivalent "
+"to [member Light2D.range_z_min] and [member Light2D.range_z_max]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:669
+msgid ""
+"Creates a new light occluder polygon and adds it to the VisualServer. It can "
+"be accessed with the RID that is returned. This RID will be used in all "
+"[code]canvas_occluder_polygon_*[/code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:678
+msgid ""
+"Sets an occluder polygons cull mode. See [enum "
+"CanvasOccluderPolygonCullMode] constants."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:687
+msgid "Sets the shape of the occluder polygon."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:695
+msgid "Sets the shape of the occluder polygon as lines."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:704
+msgid ""
+"A copy of the canvas item will be drawn with a local offset of the mirroring "
+"[Vector2]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:712
+msgid "Modulates all colors in the given canvas."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:718
+msgid ""
+"Creates a directional light and adds it to the VisualServer. It can be "
+"accessed with the RID that is returned. This RID can be used in most "
+"[code]light_*[/code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method.\n"
+"To place in a scene, attach this directional light to an instance using "
+"[method instance_set_base] using the returned RID."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:728
+msgid ""
+"Draws a frame. [i]This method is deprecated[/i], please use [method "
+"force_draw] instead."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:734
+msgid ""
+"Creates an environment and adds it to the VisualServer. It can be accessed "
+"with the RID that is returned. This RID will be used in all "
+"[code]environment_*[/code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:747
+msgid ""
+"Sets the values to be used with the \"Adjustment\" post-process effect. See "
+"[Environment] for more details."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:757
+msgid "Sets the ambient light parameters. See [Environment] for more details."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:765
+msgid ""
+"Sets the [i]BGMode[/i] of the environment. Equivalent to [member Environment."
+"background_mode]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:773
+msgid ""
+"Color displayed for clear areas of the scene (if using Custom color or Color"
+"+Sky background modes)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:781
+msgid "Sets the intensity of the background color."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:789
+msgid "Sets the maximum layer to use if using Canvas background mode."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:801
+msgid ""
+"Sets the values to be used with the \"DoF Far Blur\" post-process effect. "
+"See [Environment] for more details."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:813
+msgid ""
+"Sets the values to be used with the \"DoF Near Blur\" post-process effect. "
+"See [Environment] for more details."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:824
+msgid ""
+"Sets the variables to be used with the scene fog. See [Environment] for more "
+"details."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:837
+msgid ""
+"Sets the variables to be used with the fog depth effect. See [Environment] "
+"for more details."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:848
+msgid ""
+"Sets the variables to be used with the fog height effect. See [Environment] "
+"for more details."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:866
+msgid ""
+"Sets the variables to be used with the \"glow\" post-process effect. See "
+"[Environment] for more details."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:874
+msgid ""
+"Sets the [Sky] to be used as the environment's background when using "
+"[i]BGMode[/i] sky. Equivalent to [member Environment.background_sky]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:882
+msgid ""
+"Sets a custom field of view for the background [Sky]. Equivalent to [member "
+"Environment.background_sky_custom_fov]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:890
+msgid ""
+"Sets the rotation of the background [Sky] expressed as a [Basis]. Equivalent "
+"to [member Environment.background_sky_orientation]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:909
+msgid ""
+"Sets the variables to be used with the \"Screen Space Ambient Occlusion "
+"(SSAO)\" post-process effect. See [Environment] for more details."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:922
+msgid ""
+"Sets the variables to be used with the \"screen space reflections\" post-"
+"process effect. See [Environment] for more details."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:937
+msgid ""
+"Sets the variables to be used with the \"tonemap\" post-process effect. See "
+"[Environment] for more details."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:943
+msgid "Removes buffers and clears testcubes."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:951
+msgid ""
+"Forces a frame to be drawn when the function is called. Drawing a frame "
+"updates all [Viewport]s that are set to update. Use with extreme caution."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:957
+msgid "Synchronizes threads."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:964
+msgid "Tries to free an object in the VisualServer."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:971
+msgid "Returns a certain information, see [enum RenderInfo] for options."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:977
+msgid "Returns the id of the test cube. Creates one if none exists."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:983
+msgid "Returns the id of the test texture. Creates one if none exists."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:989
+msgid ""
+"Returns the name of the video adapter (e.g. \"GeForce GTX 1080/PCIe/"
+"SSE2\").\n"
+"[b]Note:[/b] When running a headless or server binary, this function returns "
+"an empty string."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:996
+msgid ""
+"Returns the vendor of the video adapter (e.g. \"NVIDIA Corporation\").\n"
+"[b]Note:[/b] When running a headless or server binary, this function returns "
+"an empty string."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1003
+msgid "Returns the id of a white texture. Creates one if none exists."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1009
+msgid ""
+"Creates a GI probe and adds it to the VisualServer. It can be accessed with "
+"the RID that is returned. This RID will be used in all [code]gi_probe_*[/"
+"code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method.\n"
+"To place in a scene, attach this GI probe to an instance using [method "
+"instance_set_base] using the returned RID."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1018
+msgid ""
+"Returns the bias value for the GI probe. Bias is used to avoid self "
+"occlusion. Equivalent to [member GIProbeData.bias]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1025
+msgid ""
+"Returns the axis-aligned bounding box that covers the full extent of the GI "
+"probe."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1032
+msgid "Returns the cell size set by [method gi_probe_set_cell_size]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1039
+msgid "Returns the data used by the GI probe."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1046
+msgid ""
+"Returns the dynamic range set for this GI probe. Equivalent to [member "
+"GIProbe.dynamic_range]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1053
+msgid ""
+"Returns the energy multiplier for this GI probe. Equivalent to [member "
+"GIProbe.energy]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1060
+msgid ""
+"Returns the normal bias for this GI probe. Equivalent to [member GIProbe."
+"normal_bias]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1067
+msgid ""
+"Returns the propagation value for this GI probe. Equivalent to [member "
+"GIProbe.propagation]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1074
+msgid "Returns the Transform set by [method gi_probe_set_to_cell_xform]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1081
+msgid ""
+"Returns [code]true[/code] if the GI probe data associated with this GI probe "
+"is compressed. Equivalent to [member GIProbe.compress]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1088
+msgid ""
+"Returns [code]true[/code] if the GI probe is set to interior, meaning it "
+"does not account for sky light. Equivalent to [member GIProbe.interior]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1096
+msgid ""
+"Sets the bias value to avoid self-occlusion. Equivalent to [member GIProbe."
+"bias]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1104
+msgid ""
+"Sets the axis-aligned bounding box that covers the extent of the GI probe."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1112
+msgid "Sets the size of individual cells within the GI probe."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1120
+msgid ""
+"Sets the compression setting for the GI probe data. Compressed data will "
+"take up less space but may look worse. Equivalent to [member GIProbe."
+"compress]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1128
+msgid ""
+"Sets the data to be used in the GI probe for lighting calculations. Normally "
+"this is created and called internally within the [GIProbe] node. You should "
+"not try to set this yourself."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1136
+msgid ""
+"Sets the dynamic range of the GI probe. Dynamic range sets the limit for how "
+"bright lights can be. A smaller range captures greater detail but limits how "
+"bright lights can be. Equivalent to [member GIProbe.dynamic_range]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1144
+msgid ""
+"Sets the energy multiplier for this GI probe. A higher energy makes the "
+"indirect light from the GI probe brighter. Equivalent to [member GIProbe."
+"energy]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1152
+msgid ""
+"Sets the interior value of this GI probe. A GI probe set to interior does "
+"not include the sky when calculating lighting. Equivalent to [member GIProbe."
+"interior]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1160
+msgid ""
+"Sets the normal bias for this GI probe. Normal bias behaves similar to the "
+"other form of bias and may help reduce self-occlusion. Equivalent to [member "
+"GIProbe.normal_bias]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1168
+msgid ""
+"Sets the propagation of light within this GI probe. Equivalent to [member "
+"GIProbe.propagation]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1176
+msgid "Sets the to cell [Transform] for this GI probe."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1182
+msgid ""
+"Returns [code]true[/code] if changes have been made to the VisualServer's "
+"data. [method draw] is usually called if this happens."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1189
+msgid "Not yet implemented. Always returns [code]false[/code]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1196
+msgid ""
+"Returns [code]true[/code] if the OS supports a certain feature. Features "
+"might be [code]s3tc[/code], [code]etc[/code], [code]etc2[/code], "
+"[code]pvrtc[/code] and [code]skinning_fallback[/code].\n"
+"When rendering with GLES2, returns [code]true[/code] with "
+"[code]skinning_fallback[/code] in case the hardware doesn't support the "
+"default GPU skinning process."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1206
+msgid ""
+"Sets up [ImmediateGeometry] internals to prepare for drawing. Equivalent to "
+"[method ImmediateGeometry.begin]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1213
+msgid ""
+"Clears everything that was set up between [method immediate_begin] and "
+"[method immediate_end]. Equivalent to [method ImmediateGeometry.clear]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1221
+msgid ""
+"Sets the color to be used with next vertex. Equivalent to [method "
+"ImmediateGeometry.set_color]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1227
+msgid ""
+"Creates an immediate geometry and adds it to the VisualServer. It can be "
+"accessed with the RID that is returned. This RID will be used in all "
+"[code]immediate_*[/code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method.\n"
+"To place in a scene, attach this immediate geometry to an instance using "
+"[method instance_set_base] using the returned RID."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1236
+msgid ""
+"Ends drawing the [ImmediateGeometry] and displays it. Equivalent to [method "
+"ImmediateGeometry.end]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1243
+msgid "Returns the material assigned to the [ImmediateGeometry]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1251
+msgid ""
+"Sets the normal to be used with next vertex. Equivalent to [method "
+"ImmediateGeometry.set_normal]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1259
+msgid "Sets the material to be used to draw the [ImmediateGeometry]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1267
+msgid ""
+"Sets the tangent to be used with next vertex. Equivalent to [method "
+"ImmediateGeometry.set_tangent]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1275
+msgid ""
+"Sets the UV to be used with next vertex. Equivalent to [method "
+"ImmediateGeometry.set_uv]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1283
+msgid ""
+"Sets the UV2 to be used with next vertex. Equivalent to [method "
+"ImmediateGeometry.set_uv2]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1291
+msgid ""
+"Adds the next vertex using the information provided in advance. Equivalent "
+"to [method ImmediateGeometry.add_vertex]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1299
+msgid ""
+"Adds the next vertex using the information provided in advance. This is a "
+"helper class that calls [method immediate_vertex] under the hood. Equivalent "
+"to [method ImmediateGeometry.add_vertex]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1305
+msgid ""
+"Initializes the visual server. This function is called internally by "
+"platform-dependent code during engine initialization. If called from a "
+"running game, it will not do anything."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1313
+msgid ""
+"Attaches a unique Object ID to instance. Object ID must be attached to "
+"instance for proper culling with [method instances_cull_aabb], [method "
+"instances_cull_convex], and [method instances_cull_ray]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1321
+msgid ""
+"Attaches a skeleton to an instance. Removes the previous skeleton from the "
+"instance."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1327
+msgid ""
+"Creates a visual instance and adds it to the VisualServer. It can be "
+"accessed with the RID that is returned. This RID will be used in all "
+"[code]instance_*[/code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method.\n"
+"An instance is a way of placing a 3D object in the scenario. Objects like "
+"particles, meshes, and reflection probes need to be associated with an "
+"instance to be visible in the scenario using [method instance_set_base]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1337
+msgid ""
+"Creates a visual instance, adds it to the VisualServer, and sets both base "
+"and scenario. It can be accessed with the RID that is returned. This RID "
+"will be used in all [code]instance_*[/code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1346 doc/classes/VisualServer.xml:1365
+#: doc/classes/VisualServer.xml:1592 doc/classes/VisualServer.xml:2673
+msgid "Not implemented in Godot 3.x."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1354
+msgid ""
+"Sets the shadow casting setting to one of [enum ShadowCastingSetting]. "
+"Equivalent to [member GeometryInstance.cast_shadow]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1374
+msgid ""
+"Sets the flag for a given [enum InstanceFlags]. See [enum InstanceFlags] for "
+"more details."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1382
+msgid ""
+"Sets a material that will override the material for all surfaces on the mesh "
+"associated with this instance. Equivalent to [member GeometryInstance."
+"material_override]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1390
+msgid ""
+"Sets the base of the instance. A base can be any of the 3D objects that are "
+"created in the VisualServer that can be displayed. For example, any of the "
+"light types, mesh, multimesh, immediate geometry, particle system, "
+"reflection probe, lightmap capture, and the GI probe are all types that can "
+"be set as the base of an instance in order to be displayed in the scenario."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1399
+msgid "Sets the weight for a given blend shape associated with this instance."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1407
+msgid ""
+"Sets a custom AABB to use when culling objects from the view frustum. "
+"Equivalent to [method GeometryInstance.set_custom_aabb]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1415
+msgid "Function not implemented in Godot 3.x."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1423
+msgid ""
+"Sets a margin to increase the size of the AABB when culling objects from the "
+"view frustum. This allows you to avoid culling objects that fall outside the "
+"view frustum. Equivalent to [member GeometryInstance.extra_cull_margin]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1431
+msgid ""
+"Sets the render layers that this instance will be drawn to. Equivalent to "
+"[member VisualInstance.layers]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1439
+msgid ""
+"Sets the scenario that the instance is in. The scenario is the 3D world that "
+"the objects will be displayed in."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1448
+msgid ""
+"Sets the material of a specific surface. Equivalent to [method MeshInstance."
+"set_surface_material]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1456
+msgid ""
+"Sets the world space transform of the instance. Equivalent to [member "
+"Spatial.transform]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1467
+msgid "Sets the lightmap to use with this instance."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1475
+msgid ""
+"Sets whether an instance is drawn or not. Equivalent to [member Spatial."
+"visible]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1483
+msgid ""
+"Returns an array of object IDs intersecting with the provided AABB. Only "
+"visual 3D nodes are considered, such as [MeshInstance] or "
+"[DirectionalLight]. Use [method @GDScript.instance_from_id] to obtain the "
+"actual nodes. A scenario RID must be provided, which is available in the "
+"[World] you want to query. This forces an update for all resources queued to "
+"update.\n"
+"[b]Warning:[/b] This function is primarily intended for editor usage. For in-"
+"game use cases, prefer physics collision."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1492
+msgid ""
+"Returns an array of object IDs intersecting with the provided convex shape. "
+"Only visual 3D nodes are considered, such as [MeshInstance] or "
+"[DirectionalLight]. Use [method @GDScript.instance_from_id] to obtain the "
+"actual nodes. A scenario RID must be provided, which is available in the "
+"[World] you want to query. This forces an update for all resources queued to "
+"update.\n"
+"[b]Warning:[/b] This function is primarily intended for editor usage. For in-"
+"game use cases, prefer physics collision."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1502
+msgid ""
+"Returns an array of object IDs intersecting with the provided 3D ray. Only "
+"visual 3D nodes are considered, such as [MeshInstance] or "
+"[DirectionalLight]. Use [method @GDScript.instance_from_id] to obtain the "
+"actual nodes. A scenario RID must be provided, which is available in the "
+"[World] you want to query. This forces an update for all resources queued to "
+"update.\n"
+"[b]Warning:[/b] This function is primarily intended for editor usage. For in-"
+"game use cases, prefer physics collision."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1511
+msgid ""
+"If [code]true[/code], this directional light will blend between shadow map "
+"splits resulting in a smoother transition between them. Equivalent to "
+"[member DirectionalLight.directional_shadow_blend_splits]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1519
+msgid ""
+"Sets the shadow depth range mode for this directional light. Equivalent to "
+"[member DirectionalLight.directional_shadow_depth_range]. See [enum "
+"LightDirectionalShadowDepthRangeMode] for options."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1527
+msgid ""
+"Sets the shadow mode for this directional light. Equivalent to [member "
+"DirectionalLight.directional_shadow_mode]. See [enum "
+"LightDirectionalShadowMode] for options."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1535
+msgid ""
+"Sets whether to use vertical or horizontal detail for this omni light. This "
+"can be used to alleviate artifacts in the shadow map. Equivalent to [member "
+"OmniLight.omni_shadow_detail]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1543
+msgid ""
+"Sets whether to use a dual paraboloid or a cubemap for the shadow map. Dual "
+"paraboloid is faster but may suffer from artifacts. Equivalent to [member "
+"OmniLight.omni_shadow_mode]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1551
+msgid ""
+"Sets the bake mode for this light, see [enum LightBakeMode] for options. The "
+"bake mode affects how the light will be baked in [BakedLightmap]s and "
+"[GIProbe]s."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1559
+msgid "Sets the color of the light. Equivalent to [member Light.light_color]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1567
+msgid ""
+"Sets the cull mask for this Light. Lights only affect objects in the "
+"selected layers. Equivalent to [member Light.light_cull_mask]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1575
+msgid ""
+"If [code]true[/code], light will subtract light instead of adding light. "
+"Equivalent to [member Light.light_negative]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1584
+msgid ""
+"Sets the specified light parameter. See [enum LightParam] for options. "
+"Equivalent to [method Light.set_param]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1600
+msgid ""
+"If [code]true[/code], reverses the backface culling of the mesh. This can be "
+"useful when you have a flat mesh that has a light behind it. If you need to "
+"cast a shadow on both sides of the mesh, set the mesh to use double sided "
+"shadows with [method instance_geometry_set_cast_shadows_setting]. Equivalent "
+"to [member Light.shadow_reverse_cull_face]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1608
+msgid ""
+"If [code]true[/code], light will cast shadows. Equivalent to [member Light."
+"shadow_enabled]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1616
+msgid ""
+"Sets the color of the shadow cast by the light. Equivalent to [member Light."
+"shadow_color]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1624
+msgid ""
+"Sets whether GI probes capture light information from this light. "
+"[i]Deprecated method.[/i] Use [method light_set_bake_mode] instead. This "
+"method is only kept for compatibility reasons and calls [method "
+"light_set_bake_mode] internally, setting the bake mode to [constant "
+"LIGHT_BAKE_DISABLED] or [constant LIGHT_BAKE_INDIRECT] depending on the "
+"given parameter."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1630
+msgid ""
+"Creates a lightmap capture and adds it to the VisualServer. It can be "
+"accessed with the RID that is returned. This RID will be used in all "
+"[code]lightmap_capture_*[/code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method.\n"
+"To place in a scene, attach this lightmap capture to an instance using "
+"[method instance_set_base] using the returned RID."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1639
+msgid "Returns the size of the lightmap capture area."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1646
+msgid "Returns the energy multiplier used by the lightmap capture."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1653
+msgid "Returns the octree used by the lightmap capture."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1660
+msgid ""
+"Returns the cell subdivision amount used by this lightmap capture's octree."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1667
+msgid "Returns the cell transform for this lightmap capture's octree."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1674
+msgid "Returns [code]true[/code] if capture is in \"interior\" mode."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1682
+msgid ""
+"Sets the size of the area covered by the lightmap capture. Equivalent to "
+"[member BakedLightmapData.bounds]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1690
+msgid ""
+"Sets the energy multiplier for this lightmap capture. Equivalent to [member "
+"BakedLightmapData.energy]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1698
+msgid ""
+"Sets the \"interior\" mode for this lightmap capture. Equivalent to [member "
+"BakedLightmapData.interior]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1706
+msgid ""
+"Sets the octree to be used by this lightmap capture. This function is "
+"normally used by the [BakedLightmap] node. Equivalent to [member "
+"BakedLightmapData.octree]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1714
+msgid ""
+"Sets the subdivision level of this lightmap capture's octree. Equivalent to "
+"[member BakedLightmapData.cell_subdiv]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1722
+msgid ""
+"Sets the octree cell transform for this lightmap capture's octree. "
+"Equivalent to [member BakedLightmapData.cell_space_transform]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1731
+msgid ""
+"Returns a mesh of a sphere with the given amount of horizontal and vertical "
+"subdivisions."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1737
+msgid ""
+"Creates an empty material and adds it to the VisualServer. It can be "
+"accessed with the RID that is returned. This RID will be used in all "
+"[code]material_*[/code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1746
+msgid "Returns the value of a certain material's parameter."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1754
+msgid ""
+"Returns the default value for the param if available. Otherwise returns an "
+"empty [Variant]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1761
+msgid ""
+"Returns the shader of a certain material's shader. Returns an empty RID if "
+"the material doesn't have a shader."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1769
+msgid "Sets a material's line width."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1777
+msgid "Sets an object's next material."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1786
+msgid "Sets a material's parameter."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1794
+msgid "Sets a material's render priority."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1802
+msgid "Sets a shader material's shader."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1813
+msgid ""
+"Adds a surface generated from the Arrays to a mesh. See [enum PrimitiveType] "
+"constants for types."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1820
+msgid "Removes all surfaces from a mesh."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1826
+msgid ""
+"Creates a new mesh and adds it to the VisualServer. It can be accessed with "
+"the RID that is returned. This RID will be used in all [code]mesh_*[/code] "
+"VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method.\n"
+"To place in a scene, attach this mesh to an instance using [method "
+"instance_set_base] using the returned RID."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1835
+msgid "Returns a mesh's blend shape count."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1842
+msgid "Returns a mesh's blend shape mode."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1849
+msgid "Returns a mesh's custom aabb."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1856
+msgid "Returns a mesh's number of surfaces."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1864
+msgid "Removes a mesh's surface."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1872
+msgid "Sets a mesh's blend shape count."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1880
+msgid "Sets a mesh's blend shape mode."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1888
+msgid "Sets a mesh's custom aabb."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1896
+msgid "Returns a mesh's surface's aabb."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1904
+msgid "Returns a mesh's surface's vertex buffer."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1912
+msgid "Returns a mesh's surface's amount of indices."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1920
+msgid "Returns a mesh's surface's amount of vertices."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1928
+msgid "Returns a mesh's surface's buffer arrays."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1936
+msgid "Returns a mesh's surface's arrays for blend shapes."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1944
+msgid "Returns the format of a mesh's surface."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1954
+msgid "Function is unused in Godot 3.x."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1971
+msgid "Returns a mesh's surface's index buffer."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1979
+msgid "Returns a mesh's surface's material."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1987
+msgid "Returns the primitive type of a mesh's surface."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:1995
+msgid "Returns the aabb of a mesh's surface's skeleton."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2004
+msgid "Sets a mesh's surface's material."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2014
+msgid ""
+"Updates a specific region of a vertex buffer for the specified surface. "
+"Warning: this function alters the vertex buffer directly with no safety "
+"mechanisms, you can easily corrupt your mesh."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2025
+msgid ""
+"Allocates space for the multimesh data. Format parameters determine how the "
+"data will be stored by OpenGL. See [enum MultimeshTransformFormat], [enum "
+"MultimeshColorFormat], and [enum MultimeshCustomDataFormat] for usage. "
+"Equivalent to [member MultiMesh.instance_count]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2031
+msgid ""
+"Creates a new multimesh on the VisualServer and returns an [RID] handle. "
+"This RID will be used in all [code]multimesh_*[/code] VisualServer "
+"functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method.\n"
+"To place in a scene, attach this multimesh to an instance using [method "
+"instance_set_base] using the returned RID."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2040
+msgid ""
+"Calculates and returns the axis-aligned bounding box that encloses all "
+"instances within the multimesh."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2047
+msgid "Returns the number of instances allocated for this multimesh."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2054
+msgid ""
+"Returns the RID of the mesh that will be used in drawing this multimesh."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2061
+msgid "Returns the number of visible instances for this multimesh."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2069
+msgid "Returns the color by which the specified instance will be modulated."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2077
+msgid "Returns the custom data associated with the specified instance."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2085
+msgid "Returns the [Transform] of the specified instance."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2093
+msgid ""
+"Returns the [Transform2D] of the specified instance. For use when the "
+"multimesh is set to use 2D transforms."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2102
+msgid ""
+"Sets the color by which this instance will be modulated. Equivalent to "
+"[method MultiMesh.set_instance_color]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2111
+msgid ""
+"Sets the custom data for this instance. Custom data is passed as a [Color], "
+"but is interpreted as a [code]vec4[/code] in the shader. Equivalent to "
+"[method MultiMesh.set_instance_custom_data]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2120
+msgid ""
+"Sets the [Transform] for this instance. Equivalent to [method MultiMesh."
+"set_instance_transform]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2129
+msgid ""
+"Sets the [Transform2D] for this instance. For use when multimesh is used in "
+"2D. Equivalent to [method MultiMesh.set_instance_transform_2d]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2137
+msgid ""
+"Sets all data related to the instances in one go. This is especially useful "
+"when loading the data from disk or preparing the data from GDNative.\n"
+"\n"
+"All data is packed in one large float array. An array may look like this: "
+"Transform for instance 1, color data for instance 1, custom data for "
+"instance 1, transform for instance 2, color data for instance 2, etc.\n"
+"\n"
+"[Transform] is stored as 12 floats, [Transform2D] is stored as 8 floats, "
+"[code]COLOR_8BIT[/code] / [code]CUSTOM_DATA_8BIT[/code] is stored as 1 float "
+"(4 bytes as is) and [code]COLOR_FLOAT[/code] / [code]CUSTOM_DATA_FLOAT[/"
+"code] is stored as 4 floats."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2149
+msgid ""
+"Sets the mesh to be drawn by the multimesh. Equivalent to [member MultiMesh."
+"mesh]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2157
+msgid ""
+"Sets the number of instances visible at a given time. If -1, all instances "
+"that have been allocated are drawn. Equivalent to [member MultiMesh."
+"visible_instance_count]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2163
+msgid ""
+"Creates a new omni light and adds it to the VisualServer. It can be accessed "
+"with the RID that is returned. This RID can be used in most [code]light_*[/"
+"code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method.\n"
+"To place in a scene, attach this omni light to an instance using [method "
+"instance_set_base] using the returned RID."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2171
+msgid ""
+"Creates a particle system and adds it to the VisualServer. It can be "
+"accessed with the RID that is returned. This RID will be used in all "
+"[code]particles_*[/code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method.\n"
+"To place in a scene, attach these particles to an instance using [method "
+"instance_set_base] using the returned RID."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2180
+msgid ""
+"Calculates and returns the axis-aligned bounding box that contains all the "
+"particles. Equivalent to [method Particles.capture_aabb]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2187
+msgid "Returns [code]true[/code] if particles are currently set to emitting."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2194
+msgid ""
+"Returns [code]true[/code] if particles are not emitting and particles are "
+"set to inactive."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2201
+msgid ""
+"Add particle system to list of particle systems that need to be updated. "
+"Update will take place on the next frame, or on the next call to [method "
+"instances_cull_aabb], [method instances_cull_convex], or [method "
+"instances_cull_ray]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2208
+msgid ""
+"Reset the particles on the next update. Equivalent to [method Particles."
+"restart]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2216
+msgid ""
+"Sets the number of particles to be drawn and allocates the memory for them. "
+"Equivalent to [member Particles.amount]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2224
+msgid ""
+"Sets a custom axis-aligned bounding box for the particle system. Equivalent "
+"to [member Particles.visibility_aabb]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2232
+msgid ""
+"Sets the draw order of the particles to one of the named enums from [enum "
+"ParticlesDrawOrder]. See [enum ParticlesDrawOrder] for options. Equivalent "
+"to [member Particles.draw_order]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2241
+msgid ""
+"Sets the mesh to be used for the specified draw pass. Equivalent to [member "
+"Particles.draw_pass_1], [member Particles.draw_pass_2], [member Particles."
+"draw_pass_3], and [member Particles.draw_pass_4]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2249
+msgid ""
+"Sets the number of draw passes to use. Equivalent to [member Particles."
+"draw_passes]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2257
+msgid ""
+"Sets the [Transform] that will be used by the particles when they first emit."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2265
+msgid ""
+"If [code]true[/code], particles will emit over time. Setting to false does "
+"not reset the particles, but only stops their emission. Equivalent to "
+"[member Particles.emitting]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2273
+msgid ""
+"Sets the explosiveness ratio. Equivalent to [member Particles.explosiveness]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2281
+msgid ""
+"Sets the frame rate that the particle system rendering will be fixed to. "
+"Equivalent to [member Particles.fixed_fps]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2289
+msgid ""
+"If [code]true[/code], uses fractional delta which smooths the movement of "
+"the particles. Equivalent to [member Particles.fract_delta]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2297
+msgid ""
+"Sets the lifetime of each particle in the system. Equivalent to [member "
+"Particles.lifetime]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2305
+msgid ""
+"If [code]true[/code], particles will emit once and then stop. Equivalent to "
+"[member Particles.one_shot]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2313
+msgid ""
+"Sets the preprocess time for the particles' animation. This lets you delay "
+"starting an animation until after the particles have begun emitting. "
+"Equivalent to [member Particles.preprocess]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2321
+msgid ""
+"Sets the material for processing the particles.\n"
+"[b]Note:[/b] This is not the material used to draw the materials. Equivalent "
+"to [member Particles.process_material]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2330
+msgid ""
+"Sets the emission randomness ratio. This randomizes the emission of "
+"particles within their phase. Equivalent to [member Particles.randomness]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2338
+msgid ""
+"Sets the speed scale of the particle system. Equivalent to [member Particles."
+"speed_scale]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2346
+msgid ""
+"If [code]true[/code], particles use local coordinates. If [code]false[/code] "
+"they use global coordinates. Equivalent to [member Particles.local_coords]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2352
+msgid ""
+"Creates a reflection probe and adds it to the VisualServer. It can be "
+"accessed with the RID that is returned. This RID will be used in all "
+"[code]reflection_probe_*[/code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method.\n"
+"To place in a scene, attach this reflection probe to an instance using "
+"[method instance_set_base] using the returned RID."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2362
+msgid ""
+"If [code]true[/code], reflections will ignore sky contribution. Equivalent "
+"to [member ReflectionProbe.interior_enable]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2370
+msgid ""
+"Sets the render cull mask for this reflection probe. Only instances with a "
+"matching cull mask will be rendered by this probe. Equivalent to [member "
+"ReflectionProbe.cull_mask]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2378
+msgid ""
+"If [code]true[/code], uses box projection. This can make reflections look "
+"more correct in certain situations. Equivalent to [member ReflectionProbe."
+"box_projection]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2386
+msgid ""
+"If [code]true[/code], computes shadows in the reflection probe. This makes "
+"the reflection much slower to compute. Equivalent to [member ReflectionProbe."
+"enable_shadows]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2394
+msgid ""
+"Sets the size of the area that the reflection probe will capture. Equivalent "
+"to [member ReflectionProbe.extents]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2402
+msgid ""
+"Sets the intensity of the reflection probe. Intensity modulates the strength "
+"of the reflection. Equivalent to [member ReflectionProbe.intensity]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2410
+msgid ""
+"Sets the ambient light color for this reflection probe when set to interior "
+"mode. Equivalent to [member ReflectionProbe.interior_ambient_color]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2418
+msgid ""
+"Sets the energy multiplier for this reflection probes ambient light "
+"contribution when set to interior mode. Equivalent to [member "
+"ReflectionProbe.interior_ambient_energy]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2426
+msgid ""
+"Sets the contribution value for how much the reflection affects the ambient "
+"light for this reflection probe when set to interior mode. Useful so that "
+"ambient light matches the color of the room. Equivalent to [member "
+"ReflectionProbe.interior_ambient_contrib]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2434
+msgid ""
+"Sets the max distance away from the probe an object can be before it is "
+"culled. Equivalent to [member ReflectionProbe.max_distance]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2442
+msgid ""
+"Sets the origin offset to be used when this reflection probe is in box "
+"project mode. Equivalent to [member ReflectionProbe.origin_offset]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2450
+msgid ""
+"Sets how often the reflection probe updates. Can either be once or every "
+"frame. See [enum ReflectionProbeUpdateMode] for options."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2459
+msgid ""
+"Schedules a callback to the corresponding named [code]method[/code] on "
+"[code]where[/code] after a frame has been drawn.\n"
+"The callback method must use only 1 argument which will be called with "
+"[code]userdata[/code]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2466
+msgid ""
+"Creates a scenario and adds it to the VisualServer. It can be accessed with "
+"the RID that is returned. This RID will be used in all [code]scenario_*[/"
+"code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method.\n"
+"The scenario is the 3D world that all the visual instances exist in."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2476
+msgid ""
+"Sets the [enum ScenarioDebugMode] for this scenario. See [enum "
+"ScenarioDebugMode] for options."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2484
+msgid "Sets the environment that will be used with this scenario."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2492
+msgid ""
+"Sets the fallback environment to be used by this scenario. The fallback "
+"environment is used if no environment is set. Internally, this is used by "
+"the editor to provide a default environment."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2501
+msgid ""
+"Sets the size of the reflection atlas shared by all reflection probes in "
+"this scenario."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2511
+msgid ""
+"Sets a boot image. The color defines the background color. If [code]scale[/"
+"code] is [code]true[/code], the image will be scaled to fit the screen size. "
+"If [code]use_filter[/code] is [code]true[/code], the image will be scaled "
+"with linear interpolation. If [code]use_filter[/code] is [code]false[/code], "
+"the image will be scaled with nearest-neighbor interpolation."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2518
+msgid ""
+"If [code]true[/code], the engine will generate wireframes for use with the "
+"wireframe debug mode."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2525
+msgid ""
+"Sets the default clear color which is used when a specific clear color has "
+"not been selected."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2532
+msgid ""
+"Sets the scale to apply to the passage of time for the shaders' [code]TIME[/"
+"code] builtin.\n"
+"The default value is [code]1.0[/code], which means [code]TIME[/code] will "
+"count the real time as it goes by, without narrowing or stretching it."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2540
+msgid "Enables or disables occlusion culling."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2546
+msgid ""
+"Creates an empty shader and adds it to the VisualServer. It can be accessed "
+"with the RID that is returned. This RID will be used in all [code]shader_*[/"
+"code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2554
+msgid "Returns a shader's code."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2562
+msgid "Returns a default texture from a shader searched by name."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2569
+msgid "Returns the parameters of a shader."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2577
+msgid "Sets a shader's code."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2586
+msgid "Sets a shader's default texture. Overwrites the texture given by name."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2595
+msgid "Allocates the GPU buffers for this skeleton."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2603
+msgid "Returns the [Transform] set for a specific bone of this skeleton."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2611
+msgid "Returns the [Transform2D] set for a specific bone of this skeleton."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2620
+msgid "Sets the [Transform] for a specific bone of this skeleton."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2629
+msgid "Sets the [Transform2D] for a specific bone of this skeleton."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2635
+msgid ""
+"Creates a skeleton and adds it to the VisualServer. It can be accessed with "
+"the RID that is returned. This RID will be used in all [code]skeleton_*[/"
+"code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2643
+msgid "Returns the number of bones allocated for this skeleton."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2649
+msgid ""
+"Creates an empty sky and adds it to the VisualServer. It can be accessed "
+"with the RID that is returned. This RID will be used in all [code]sky_*[/"
+"code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2659
+msgid "Sets a sky's texture."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2665
+msgid ""
+"Creates a spot light and adds it to the VisualServer. It can be accessed "
+"with the RID that is returned. This RID can be used in most [code]light_*[/"
+"code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method.\n"
+"To place in a scene, attach this spot light to an instance using [method "
+"instance_set_base] using the returned RID."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2686
+msgid "Allocates the GPU memory for the texture."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2694
+msgid "Binds the texture to a texture slot."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2700
+msgid ""
+"Creates an empty texture and adds it to the VisualServer. It can be accessed "
+"with the RID that is returned. This RID will be used in all [code]texture_*[/"
+"code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2709
+msgid ""
+"Creates a texture, allocates the space for an image, and fills in the image."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2715
+msgid "Returns a list of all the textures and their information."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2723
+msgid ""
+"Returns a copy of a texture's image unless it's a CubeMap, in which case it "
+"returns the [RID] of the image at one of the cubes sides."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2730
+msgid "Returns the depth of the texture."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2737
+msgid "Returns the flags of a texture."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2744
+msgid "Returns the format of the texture's image."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2751
+msgid "Returns the texture's height."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2758
+msgid "Returns the texture's path."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2765
+msgid "Returns the opengl id of the texture's image."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2772
+msgid "Returns the type of the texture, can be any of the [enum TextureType]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2779
+msgid "Returns the texture's width."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2788
+msgid ""
+"Sets the texture's image data. If it's a CubeMap, it sets the image data at "
+"a cube side."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2804
+msgid ""
+"Sets a part of the data for a texture. Warning: this function calls the "
+"underlying graphics API directly and may corrupt your texture if used "
+"improperly."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2812
+msgid "Sets the texture's flags. See [enum TextureFlags] for options."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2820
+msgid "Sets the texture's path."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2827
+msgid ""
+"If [code]true[/code], sets internal processes to shrink all image data to "
+"half the size."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2844
+msgid ""
+"If [code]true[/code], the image will be stored in the texture's images array "
+"if overwritten."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2852
+msgid "Sets a viewport's camera."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2860
+msgid "Sets a viewport's canvas."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2869
+msgid ""
+"Copies viewport to a region of the screen specified by [code]rect[/code]. If "
+"[member Viewport.render_direct_to_screen] is [code]true[/code], then "
+"viewport does not use a framebuffer and the contents of the viewport are "
+"rendered directly to screen. However, note that the root viewport is drawn "
+"last, therefore it will draw over the screen. Accordingly, you must set the "
+"root viewport to an area that does not cover the area that you have attached "
+"this viewport to.\n"
+"For example, you can set the root viewport to not render at all with the "
+"following code:\n"
+"[codeblock]\n"
+"func _ready():\n"
+" get_viewport().set_attach_to_screen_rect(Rect2())\n"
+" $Viewport.set_attach_to_screen_rect(Rect2(0, 0, 600, 600))\n"
+"[/codeblock]\n"
+"Using this can result in significant optimization, especially on lower-end "
+"devices. However, it comes at the cost of having to manage your viewports "
+"manually. For a further optimization see, [method "
+"viewport_set_render_direct_to_screen]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2882
+msgid ""
+"Creates an empty viewport and adds it to the VisualServer. It can be "
+"accessed with the RID that is returned. This RID will be used in all "
+"[code]viewport_*[/code] VisualServer functions.\n"
+"Once finished with your RID, you will want to free the RID using the "
+"VisualServer's [method free_rid] static method."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2890
+msgid "Detaches the viewport from the screen."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2898
+msgid ""
+"Returns a viewport's render information. For options, see the [enum "
+"ViewportRenderInfo] constants."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2905
+msgid "Returns the viewport's last rendered frame."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2913
+msgid "Detaches a viewport from a canvas and vice versa."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2921
+msgid "If [code]true[/code], sets the viewport active, else sets it inactive."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2931
+msgid ""
+"Sets the stacking order for a viewport's canvas.\n"
+"[code]layer[/code] is the actual canvas layer, while [code]sublayer[/code] "
+"specifies the stacking order of the canvas among those in the same layer."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2941
+msgid "Sets the transformation of a viewport's canvas."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2949
+msgid ""
+"Sets the clear mode of a viewport. See [enum ViewportClearMode] for options."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2957
+msgid ""
+"Sets the debug draw mode of a viewport. See [enum ViewportDebugDraw] for "
+"options."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2965
+msgid "If [code]true[/code], a viewport's 3D rendering is disabled."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2973
+msgid ""
+"If [code]true[/code], rendering of a viewport's environment is disabled."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2981
+msgid "Sets the viewport's global transformation matrix."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2989
+msgid "If [code]true[/code], the viewport renders to hdr."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:2997
+msgid "If [code]true[/code], the viewport's canvas is not rendered."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3005
+msgid "Currently unimplemented in Godot 3.x."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3013
+msgid "Sets the anti-aliasing mode. See [enum ViewportMSAA] for options."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3021
+msgid "Sets the viewport's parent to another viewport."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3029
+msgid ""
+"If [code]true[/code], render the contents of the viewport directly to "
+"screen. This allows a low-level optimization where you can skip drawing a "
+"viewport to the root viewport. While this optimization can result in a "
+"significant increase in speed (especially on older devices), it comes at a "
+"cost of usability. When this is enabled, you cannot read from the viewport "
+"or from the [code]SCREEN_TEXTURE[/code]. You also lose the benefit of "
+"certain window settings, such as the various stretch modes. Another "
+"consequence to be aware of is that in 2D the rendering happens in window "
+"coordinates, so if you have a viewport that is double the size of the "
+"window, and you set this, then only the portion that fits within the window "
+"will be drawn, no automatic scaling is possible, even if your game scene is "
+"significantly larger than the window size."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3037
+msgid ""
+"Sets a viewport's scenario.\n"
+"The scenario contains information about the [enum ScenarioDebugMode], "
+"environment information, reflection atlas etc."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3047
+msgid "Sets the shadow atlas quadrant's subdivision."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3055
+msgid ""
+"Sets the size of the shadow atlas's images (used for omni and spot lights). "
+"The value will be rounded up to the nearest power of 2."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3063
+msgid ""
+"Sets the sharpening [code]intensity[/code] for the [code]viewport[/code]. If "
+"set to a value greater than [code]0.0[/code], contrast-adaptive sharpening "
+"will be applied to the 3D viewport. This has a low performance cost and can "
+"be used to recover some of the sharpness lost from using FXAA. Values around "
+"[code]0.5[/code] generally give the best results. See also [method "
+"viewport_set_use_fxaa]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3072
+msgid "Sets the viewport's width and height."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3080
+msgid ""
+"If [code]true[/code], the viewport renders its background as transparent."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3088
+msgid ""
+"Sets when the viewport should be updated. See [enum ViewportUpdateMode] "
+"constants for options."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3096
+msgid ""
+"Sets the viewport's 2D/3D mode. See [enum ViewportUsage] constants for "
+"options."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3104
+msgid ""
+"If [code]true[/code], the viewport uses augmented or virtual reality "
+"technologies. See [ARVRInterface]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3112
+msgid ""
+"If [code]true[/code], uses a fast post-processing filter to make banding "
+"significantly less visible. In some cases, debanding may introduce a "
+"slightly noticeable dithering pattern. It's recommended to enable debanding "
+"only when actually needed since the dithering pattern will make lossless-"
+"compressed screenshots larger.\n"
+"[b]Note:[/b] Only available on the GLES3 backend. [member Viewport.hdr] must "
+"also be [code]true[/code] for debanding to be effective."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3121
+msgid ""
+"Enables fast approximate antialiasing for this viewport. FXAA is a popular "
+"screen-space antialiasing method, which is fast but will make the image look "
+"blurry, especially at lower resolutions. It can still work relatively well "
+"at large resolutions such as 1440p and 4K. Some of the lost sharpness can be "
+"recovered by enabling contrast-adaptive sharpening (see [method "
+"viewport_set_sharpen_intensity])."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3129
+msgid "If [code]true[/code], the viewport's rendering is flipped vertically."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3135
+msgid ""
+"If [code]false[/code], disables rendering completely, but the engine logic "
+"is still being processed. You can call [method force_draw] to draw a frame "
+"even with rendering disabled."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3141
+msgid ""
+"Emitted at the end of the frame, after the VisualServer has finished "
+"updating all the Viewports."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3146
+msgid ""
+"Emitted at the beginning of the frame, before the VisualServer updates all "
+"the Viewports."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3152
+msgid "Marks an error that shows that the index array is empty."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3155
+msgid "Number of weights/bones per vertex."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3158
+msgid "The minimum Z-layer for canvas items."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3161
+msgid "The maximum Z-layer for canvas items."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3164
+msgid ""
+"Max number of glow levels that can be used with glow post-process effect."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3167
+msgid "Unused enum in Godot 3.x."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3170
+msgid "The minimum renderpriority of all materials."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3173
+msgid "The maximum renderpriority of all materials."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3176
+msgid "Marks the left side of a cubemap."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3179
+msgid "Marks the right side of a cubemap."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3182
+msgid "Marks the bottom side of a cubemap."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3185
+msgid "Marks the top side of a cubemap."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3188
+msgid "Marks the front side of a cubemap."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3191
+msgid "Marks the back side of a cubemap."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3194
+msgid "Normal texture with 2 dimensions, width and height."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3197
+msgid ""
+"Texture made up of six faces, can be looked up with a [code]vec3[/code] in "
+"shader."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3200
+msgid "An array of 2-dimensional textures."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3203
+msgid "A 3-dimensional texture with width, height, and depth."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3209
+msgid "Repeats the texture (instead of clamp to edge)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3222
+msgid "Repeats the texture with alternate sections mirrored."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3228
+msgid ""
+"Default flags. [constant TEXTURE_FLAG_MIPMAPS], [constant "
+"TEXTURE_FLAG_REPEAT] and [constant TEXTURE_FLAG_FILTER] are enabled."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3231
+msgid "Shader is a 3D shader."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3234
+msgid "Shader is a 2D shader."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3237
+msgid "Shader is a particle shader."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3240
+msgid "Represents the size of the [enum ShaderMode] enum."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3243
+msgid "Array is a vertex array."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3246
+msgid "Array is a normal array."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3249
+msgid "Array is a tangent array."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3252
+msgid "Array is a color array."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3255
+msgid "Array is an UV coordinates array."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3258
+msgid "Array is an UV coordinates array for the second UV coordinates."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3261
+msgid "Array contains bone information."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3264
+msgid "Array is weight information."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3267
+msgid "Array is index array."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3273
+msgid "Flag used to mark a vertex array."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3276
+msgid "Flag used to mark a normal array."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3279
+msgid "Flag used to mark a tangent array."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3282
+msgid "Flag used to mark a color array."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3285
+msgid "Flag used to mark an UV coordinates array."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3288
+msgid ""
+"Flag used to mark an UV coordinates array for the second UV coordinates."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3291
+msgid "Flag used to mark a bone information array."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3294
+msgid "Flag used to mark a weights array."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3297
+msgid "Flag used to mark an index array."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3336
+msgid ""
+"Used to set flags [constant ARRAY_COMPRESS_NORMAL], [constant "
+"ARRAY_COMPRESS_TANGENT], [constant ARRAY_COMPRESS_COLOR], [constant "
+"ARRAY_COMPRESS_TEX_UV], [constant ARRAY_COMPRESS_TEX_UV2], [constant "
+"ARRAY_COMPRESS_WEIGHTS], and [constant "
+"ARRAY_FLAG_USE_OCTAHEDRAL_COMPRESSION] quickly."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3339
+msgid "Primitive to draw consists of points."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3342
+msgid "Primitive to draw consists of lines."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3345
+msgid "Primitive to draw consists of a line strip from start to end."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3348
+msgid ""
+"Primitive to draw consists of a line loop (a line strip with a line between "
+"the last and the first vertex)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3351
+msgid "Primitive to draw consists of triangles."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3354
+msgid ""
+"Primitive to draw consists of a triangle strip (the last 3 vertices are "
+"always combined to make a triangle)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3357
+msgid ""
+"Primitive to draw consists of a triangle strip (the last 2 vertices are "
+"always combined with the first to make a triangle)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3360
+msgid "Represents the size of the [enum PrimitiveType] enum."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3369
+msgid "Is a directional (sun) light."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3372
+msgid "Is an omni light."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3375
+msgid "Is a spot light."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3378
+msgid "The light's energy."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3381
+msgid "Secondary multiplier used with indirect light (light bounces)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3384
+msgid ""
+"The light's size, currently only used for soft shadows in baked lightmaps."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3387
+msgid "The light's influence on specularity."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3390
+msgid "The light's range."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3393
+msgid "The light's attenuation."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3396
+msgid "The spotlight's angle."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3399
+msgid "The spotlight's attenuation."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3402
+msgid "Scales the shadow color."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3405
+msgid "Max distance that shadows will be rendered."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3408
+msgid "Proportion of shadow atlas occupied by the first split."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3411
+msgid "Proportion of shadow atlas occupied by the second split."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3414
+msgid ""
+"Proportion of shadow atlas occupied by the third split. The fourth split "
+"occupies the rest."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3417
+msgid ""
+"Normal bias used to offset shadow lookup by object normal. Can be used to "
+"fix self-shadowing artifacts."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3420
+msgid "Bias the shadow lookup to fix self-shadowing artifacts."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3423
+msgid ""
+"Increases bias on further splits to fix self-shadowing that only occurs far "
+"away from the camera."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3426
+msgid "Represents the size of the [enum LightParam] enum."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3435
+msgid "Use a dual paraboloid shadow map for omni lights."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3438
+msgid ""
+"Use a cubemap shadow map for omni lights. Slower but better quality than "
+"dual paraboloid."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3441
+msgid "Use more detail vertically when computing shadow map."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3444
+msgid "Use more detail horizontally when computing shadow map."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3447
+msgid "Use orthogonal shadow projection for directional light."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3450
+msgid "Use 2 splits for shadow projection when using directional light."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3453
+msgid "Use 4 splits for shadow projection when using directional light."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3456
+msgid ""
+"Keeps shadows stable as camera moves but has lower effective resolution."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3459
+msgid ""
+"Optimize use of shadow maps, increasing the effective resolution. But may "
+"result in shadows moving or flickering slightly."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3462
+msgid "Do not update the viewport."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3465
+msgid "Update the viewport once then set to disabled."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3468
+msgid "Update the viewport whenever it is visible."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3471
+msgid "Always update the viewport."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3474
+msgid "The viewport is always cleared before drawing."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3477
+msgid "The viewport is never cleared before drawing."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3480
+msgid ""
+"The viewport is cleared once, then the clear mode is set to [constant "
+"VIEWPORT_CLEAR_NEVER]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3483
+msgid "Multisample antialiasing is disabled."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3486
+msgid "Multisample antialiasing is set to 2×."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3489
+msgid "Multisample antialiasing is set to 4×."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3492
+msgid "Multisample antialiasing is set to 8×."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3495
+msgid "Multisample antialiasing is set to 16×."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3498
+msgid ""
+"Multisample antialiasing is set to 2× on external texture. Special mode for "
+"GLES2 Android VR (Oculus Quest and Go)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3501
+msgid ""
+"Multisample antialiasing is set to 4× on external texture. Special mode for "
+"GLES2 Android VR (Oculus Quest and Go)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3504
+msgid "The Viewport does not render 3D but samples."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3507
+msgid "The Viewport does not render 3D and does not sample."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3510
+msgid "The Viewport renders 3D with effects."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3513
+msgid "The Viewport renders 3D but without effects."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3516
+msgid "Number of objects drawn in a single frame."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3519
+msgid "Number of vertices drawn in a single frame."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3522
+msgid "Number of material changes during this frame."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3525
+msgid "Number of shader changes during this frame."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3528
+msgid "Number of surface changes during this frame."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3531
+msgid "Number of draw calls during this frame."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3534
+msgid "Number of 2d items drawn this frame."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3537
+msgid "Number of 2d draw calls during this frame."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3540
+msgid "Represents the size of the [enum ViewportRenderInfo] enum."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3543
+msgid "Debug draw is disabled. Default setting."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3546
+msgid "Debug draw sets objects to unshaded."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3549
+msgid "Overwrites clear color to [code](0,0,0,0)[/code]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3552
+msgid "Debug draw draws objects in wireframe."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3555
+msgid "Do not use a debug mode."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3558
+msgid "Draw all objects as wireframe models."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3561
+msgid ""
+"Draw all objects in a way that displays how much overdraw is occurring. "
+"Overdraw occurs when a section of pixels is drawn and shaded and then "
+"another object covers it up. To optimize a scene, you should reduce overdraw."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3564
+msgid ""
+"Draw all objects without shading. Equivalent to setting all objects shaders "
+"to [code]unshaded[/code]."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3567
+msgid "The instance does not have a type."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3570
+msgid "The instance is a mesh."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3573
+msgid "The instance is a multimesh."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3576
+msgid "The instance is an immediate geometry."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3579
+msgid "The instance is a particle emitter."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3582
+msgid "The instance is a light."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3585
+msgid "The instance is a reflection probe."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3588
+msgid "The instance is a GI probe."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3591
+msgid "The instance is a lightmap capture."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3594
+msgid "Represents the size of the [enum InstanceType] enum."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3597
+msgid ""
+"A combination of the flags of geometry instances (mesh, multimesh, immediate "
+"and particles)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3600
+msgid "Allows the instance to be used in baked lighting."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3603
+msgid "When set, manually requests to draw geometry on next frame."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3606
+msgid "Represents the size of the [enum InstanceFlags] enum."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3609
+msgid "Disable shadows from this instance."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3612
+msgid "Cast shadows from this instance."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3615
+msgid ""
+"Disable backface culling when rendering the shadow of the object. This is "
+"slightly slower but may result in more correct shadows."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3618
+msgid ""
+"Only render the shadows from the object. The object itself will not be drawn."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3621
+msgid "The nine patch gets stretched where needed."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3624
+msgid "The nine patch gets filled with tiles where needed."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3627
+msgid ""
+"The nine patch gets filled with tiles where needed and stretches them a bit "
+"if needed."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3630
+msgid "Adds light color additive to the canvas."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3633
+msgid "Adds light color subtractive to the canvas."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3636
+msgid "The light adds color depending on transparency."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3639
+msgid "The light adds color depending on mask."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3642
+msgid "Do not apply a filter to canvas light shadows."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3645
+msgid "Use PCF3 filtering to filter canvas light shadows."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3648
+msgid "Use PCF5 filtering to filter canvas light shadows."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3651
+msgid "Use PCF7 filtering to filter canvas light shadows."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3654
+msgid "Use PCF9 filtering to filter canvas light shadows."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3657
+msgid "Use PCF13 filtering to filter canvas light shadows."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3660
+msgid "Culling of the canvas occluder is disabled."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3663
+msgid "Culling of the canvas occluder is clockwise."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3666
+msgid "Culling of the canvas occluder is counterclockwise."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3669
+msgid "The amount of objects in the frame."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3672
+msgid "The amount of vertices in the frame."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3675
+msgid "The amount of modified materials in the frame."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3678
+msgid "The amount of shader rebinds in the frame."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3681
+msgid "The amount of surface changes in the frame."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3684
+msgid "The amount of draw calls in frame."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3687
+msgid "The amount of 2d items in the frame."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3690
+msgid "The amount of 2d draw calls in frame."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3705
+msgid "Hardware supports shaders. This enum is currently unused in Godot 3.x."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3708
+msgid ""
+"Hardware supports multithreading. This enum is currently unused in Godot 3.x."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3711
+msgid "Use [Transform2D] to store MultiMesh transform."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3714
+msgid "Use [Transform] to store MultiMesh transform."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3717
+msgid "MultiMesh does not use per-instance color."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3720
+msgid ""
+"MultiMesh color uses 8 bits per component. This packs the color into a "
+"single float."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3723
+msgid "MultiMesh color uses a float per channel."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3726
+msgid "MultiMesh does not use custom data."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3729
+msgid ""
+"MultiMesh custom data uses 8 bits per component. This packs the 4-component "
+"custom data into a single float."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3732
+msgid "MultiMesh custom data uses a float per component."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3735
+msgid "Reflection probe will update reflections once and then stop."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3738
+msgid ""
+"Reflection probe will update each frame. This mode is necessary to capture "
+"moving objects."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3741
+msgid "Draw particles in the order that they appear in the particles array."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3744
+msgid "Sort particles based on their lifetime."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3747
+msgid "Sort particles based on their distance to the camera."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3750
+msgid "Use the clear color as background."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3753
+msgid "Use a specified color as the background."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3756
+msgid "Use a sky resource for the background."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3759
+msgid ""
+"Use a custom color for background, but use a sky for shading and reflections."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3762
+msgid ""
+"Use a specified canvas layer as the background. This can be useful for "
+"instantiating a 2D scene in a 3D world."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3765
+msgid ""
+"Do not clear the background, use whatever was rendered last frame as the "
+"background."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3768
+msgid "Represents the size of the [enum EnvironmentBG] enum."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3771
+msgid "Use lowest blur quality. Fastest, but may look bad."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3774
+msgid "Use medium blur quality."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3777
+msgid "Used highest blur quality. Looks the best, but is the slowest."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3780
+msgid "Add the effect of the glow on top of the scene."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3783
+msgid ""
+"Blends the glow effect with the screen. Does not get as bright as additive."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3786
+msgid "Produces a subtle color disturbance around objects."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3789
+msgid "Shows the glow effect by itself without the underlying scene."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3792
+msgid "Output color as they came in."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3795
+msgid "Use the Reinhard tonemapper."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3798
+msgid "Use the filmic tonemapper."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3801
+msgid "Use the ACES tonemapper."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3804
+msgid "Use the ACES Fitted tonemapper."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3807
+msgid "Lowest quality of screen space ambient occlusion."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3810
+msgid "Medium quality screen space ambient occlusion."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3813
+msgid "Highest quality screen space ambient occlusion."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3816
+msgid "Disables the blur set for SSAO. Will make SSAO look noisier."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3819
+msgid "Perform a 1x1 blur on the SSAO output."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3822
+msgid "Performs a 2x2 blur on the SSAO output."
+msgstr ""
+
+#: doc/classes/VisualServer.xml:3825
+msgid "Performs a 3x3 blur on the SSAO output. Use this for smoothest SSAO."
+msgstr ""
+
+#: doc/classes/VisualShader.xml:4
+msgid "A custom shader program with a visual editor."
+msgstr ""
+
+#: doc/classes/VisualShader.xml:7
+msgid ""
+"This class allows you to define a custom shader program that can be used for "
+"various materials to render objects.\n"
+"The visual shader editor creates the shader."
+msgstr ""
+
+#: doc/classes/VisualShader.xml:20
+msgid "Adds the specified node to the shader."
+msgstr ""
+
+#: doc/classes/VisualShader.xml:31
+msgid ""
+"Returns [code]true[/code] if the specified nodes and ports can be connected "
+"together."
+msgstr ""
+
+#: doc/classes/VisualShader.xml:42 doc/classes/VisualShader.xml:64
+msgid "Connects the specified nodes and ports."
+msgstr ""
+
+#: doc/classes/VisualShader.xml:53
+msgid ""
+"Connects the specified nodes and ports, even if they can't be connected. "
+"Such connection is invalid and will not function properly."
+msgstr ""
+
+#: doc/classes/VisualShader.xml:72
+msgid ""
+"Returns the shader node instance with specified [code]type[/code] and "
+"[code]id[/code]."
+msgstr ""
+
+#: doc/classes/VisualShader.xml:79
+msgid "Returns the list of connected nodes with the specified type."
+msgstr ""
+
+#: doc/classes/VisualShader.xml:86
+msgid "Returns the list of all nodes in the shader with the specified type."
+msgstr ""
+
+#: doc/classes/VisualShader.xml:94
+msgid "Returns the position of the specified node within the shader graph."
+msgstr ""
+
+#: doc/classes/VisualShader.xml:111
+msgid ""
+"Returns [code]true[/code] if the specified node and port connection exist."
+msgstr ""
+
+#: doc/classes/VisualShader.xml:119
+msgid "Removes the specified node from the shader."
+msgstr ""
+
+#: doc/classes/VisualShader.xml:126
+msgid "Sets the mode of this shader."
+msgstr ""
+
+#: doc/classes/VisualShader.xml:135
+msgid "Sets the position of the specified node."
+msgstr ""
+
+#: doc/classes/VisualShader.xml:141
+msgid "The offset vector of the whole graph."
+msgstr ""
+
+#: doc/classes/VisualShader.xml:146
+msgid "A vertex shader, operating on vertices."
+msgstr ""
+
+#: doc/classes/VisualShader.xml:149
+msgid "A fragment shader, operating on fragments (pixels)."
+msgstr ""
+
+#: doc/classes/VisualShader.xml:152
+msgid "A shader for light calculations."
+msgstr ""
+
+#: doc/classes/VisualShader.xml:155
+msgid "Represents the size of the [enum Type] enum."
+msgstr ""
+
+#: doc/classes/VisualShaderNode.xml:4
+msgid "Base class for nodes in a visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNode.xml:7
+msgid ""
+"Visual shader graphs consist of various nodes. Each node in the graph is a "
+"separate object and they are represented as a rectangular boxes with title "
+"and a set of properties. Each node has also connection ports that allow to "
+"connect it to another nodes and control the flow of the shader."
+msgstr ""
+
+#: doc/classes/VisualShaderNode.xml:10
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/shading/visual_shaders.html"
+msgstr ""
+
+#: doc/classes/VisualShaderNode.xml:16
+msgid ""
+"Returns an [Array] containing default values for all of the input ports of "
+"the node in the form [code][index0, value0, index1, value1, ...][/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNode.xml:23
+msgid "Returns the default value of the input [code]port[/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNode.xml:30
+msgid ""
+"Sets the default input ports values using an [Array] of the form [code]"
+"[index0, value0, index1, value1, ...][/code]. For example: [code][0, "
+"Vector3(0, 0, 0), 1, Vector3(0, 0, 0)][/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNode.xml:38
+msgid "Sets the default value for the selected input [code]port[/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNode.xml:44
+msgid ""
+"Sets the output port index which will be showed for preview. If set to "
+"[code]-1[/code] no port will be open for preview."
+msgstr ""
+
+#: doc/classes/VisualShaderNode.xml:50
+msgid ""
+"Emitted when the node requests an editor refresh. Currently called only in "
+"setter of [member VisualShaderNodeTexture.source], "
+"[VisualShaderNodeTexture], and [VisualShaderNodeCubeMap] (and their "
+"derivatives)."
+msgstr ""
+
+#: doc/classes/VisualShaderNode.xml:56
+msgid ""
+"Floating-point scalar. Translated to [code]float[/code] type in shader code."
+msgstr ""
+
+#: doc/classes/VisualShaderNode.xml:59
+msgid ""
+"3D vector of floating-point values. Translated to [code]vec3[/code] type in "
+"shader code."
+msgstr ""
+
+#: doc/classes/VisualShaderNode.xml:62
+msgid "Boolean type. Translated to [code]bool[/code] type in shader code."
+msgstr ""
+
+#: doc/classes/VisualShaderNode.xml:65
+msgid "Transform type. Translated to [code]mat4[/code] type in shader code."
+msgstr ""
+
+#: doc/classes/VisualShaderNode.xml:68
+msgid ""
+"Sampler type. Translated to reference of sampler uniform in shader code. Can "
+"only be used for input ports in non-uniform nodes."
+msgstr ""
+
+#: doc/classes/VisualShaderNode.xml:71
+msgid "Represents the size of the [enum PortType] enum."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeBooleanConstant.xml:4
+msgid "A boolean constant to be used within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeBooleanConstant.xml:7
+msgid ""
+"Has only one output port and no inputs.\n"
+"Translated to [code]bool[/code] in the shader language."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeBooleanConstant.xml:16
+msgid "A boolean constant which represents a state of this node."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeBooleanUniform.xml:4
+msgid "A boolean uniform to be used within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeBooleanUniform.xml:7
+msgid "Translated to [code]uniform bool[/code] in the shader language."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorConstant.xml:4
+msgid "A [Color] constant to be used within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorConstant.xml:7
+msgid ""
+"Has two output ports representing RGB and alpha channels of [Color].\n"
+"Translated to [code]vec3 rgb[/code] and [code]float alpha[/code] in the "
+"shader language."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorConstant.xml:16
+msgid "A [Color] constant which represents a state of this node."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorFunc.xml:4
+msgid "A [Color] function to be used within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorFunc.xml:7
+msgid ""
+"Accept a [Color] to the input port and transform it according to [member "
+"function]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorFunc.xml:15
+msgid ""
+"A function to be applied to the input color. See [enum Function] for options."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorFunc.xml:20
+msgid ""
+"Converts the color to grayscale using the following formula:\n"
+"[codeblock]\n"
+"vec3 c = input;\n"
+"float max1 = max(c.r, c.g);\n"
+"float max2 = max(max1, c.b);\n"
+"float max3 = max(max1, max2);\n"
+"return vec3(max3, max3, max3);\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorFunc.xml:30
+msgid ""
+"Applies sepia tone effect using the following formula:\n"
+"[codeblock]\n"
+"vec3 c = input;\n"
+"float r = (c.r * 0.393) + (c.g * 0.769) + (c.b * 0.189);\n"
+"float g = (c.r * 0.349) + (c.g * 0.686) + (c.b * 0.168);\n"
+"float b = (c.r * 0.272) + (c.g * 0.534) + (c.b * 0.131);\n"
+"return vec3(r, g, b);\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorOp.xml:4
+msgid "A [Color] operator to be used within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorOp.xml:7
+msgid "Applies [member operator] to two color inputs."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorOp.xml:15
+msgid ""
+"An operator to be applied to the inputs. See [enum Operator] for options."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorOp.xml:20
+msgid ""
+"Produce a screen effect with the following formula:\n"
+"[codeblock]\n"
+"result = vec3(1.0) - (vec3(1.0) - a) * (vec3(1.0) - b);\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorOp.xml:26
+msgid ""
+"Produce a difference effect with the following formula:\n"
+"[codeblock]\n"
+"result = abs(a - b);\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorOp.xml:32
+msgid ""
+"Produce a darken effect with the following formula:\n"
+"[codeblock]\n"
+"result = min(a, b);\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorOp.xml:38
+msgid ""
+"Produce a lighten effect with the following formula:\n"
+"[codeblock]\n"
+"result = max(a, b);\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorOp.xml:44
+msgid ""
+"Produce an overlay effect with the following formula:\n"
+"[codeblock]\n"
+"for (int i = 0; i < 3; i++) {\n"
+" float base = a[i];\n"
+" float blend = b[i];\n"
+" if (base < 0.5) {\n"
+" result[i] = 2.0 * base * blend;\n"
+" } else {\n"
+" result[i] = 1.0 - 2.0 * (1.0 - blend) * (1.0 - base);\n"
+" }\n"
+"}\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorOp.xml:58
+msgid ""
+"Produce a dodge effect with the following formula:\n"
+"[codeblock]\n"
+"result = a / (vec3(1.0) - b);\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorOp.xml:64
+msgid ""
+"Produce a burn effect with the following formula:\n"
+"[codeblock]\n"
+"result = vec3(1.0) - (vec3(1.0) - a) / b;\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorOp.xml:70
+msgid ""
+"Produce a soft light effect with the following formula:\n"
+"[codeblock]\n"
+"for (int i = 0; i < 3; i++) {\n"
+" float base = a[i];\n"
+" float blend = b[i];\n"
+" if (base < 0.5) {\n"
+" result[i] = base * (blend + 0.5);\n"
+" } else {\n"
+" result[i] = 1.0 - (1.0 - base) * (1.0 - (blend - 0.5));\n"
+" }\n"
+"}\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorOp.xml:84
+msgid ""
+"Produce a hard light effect with the following formula:\n"
+"[codeblock]\n"
+"for (int i = 0; i < 3; i++) {\n"
+" float base = a[i];\n"
+" float blend = b[i];\n"
+" if (base < 0.5) {\n"
+" result[i] = base * (2.0 * blend);\n"
+" } else {\n"
+" result[i] = 1.0 - (1.0 - base) * (1.0 - 2.0 * (blend - 0.5));\n"
+" }\n"
+"}\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorUniform.xml:4
+msgid "A [Color] uniform to be used within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeColorUniform.xml:7
+msgid "Translated to [code]uniform vec4[/code] in the shader language."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCompare.xml:4
+msgid "A comparison function for common types within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCompare.xml:7
+msgid ""
+"Compares [code]a[/code] and [code]b[/code] of [member type] by [member "
+"function]. Returns a boolean scalar. Translates to [code]if[/code] "
+"instruction in shader code."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCompare.xml:15
+msgid ""
+"Extra condition which is applied if [member type] is set to [constant "
+"CTYPE_VECTOR]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCompare.xml:18
+msgid "A comparison function. See [enum Function] for options."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCompare.xml:21
+msgid ""
+"The type to be used in the comparison. See [enum ComparisonType] for options."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCompare.xml:26
+msgid "A floating-point scalar."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCompare.xml:29
+msgid "A 3D vector type."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCompare.xml:32
+msgid "A boolean type."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCompare.xml:35
+msgid "A transform ([code]mat4[/code]) type."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCompare.xml:38
+msgid "Comparison for equality ([code]a == b[/code])."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCompare.xml:41
+msgid "Comparison for inequality ([code]a != b[/code])."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCompare.xml:44
+msgid ""
+"Comparison for greater than ([code]a > b[/code]). Cannot be used if [member "
+"type] set to [constant CTYPE_BOOLEAN] or [constant CTYPE_TRANSFORM]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCompare.xml:47
+msgid ""
+"Comparison for greater than or equal ([code]a >= b[/code]). Cannot be used "
+"if [member type] set to [constant CTYPE_BOOLEAN] or [constant "
+"CTYPE_TRANSFORM]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCompare.xml:50
+msgid ""
+"Comparison for less than ([code]a < b[/code]). Cannot be used if [member "
+"type] set to [constant CTYPE_BOOLEAN] or [constant CTYPE_TRANSFORM]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCompare.xml:53
+msgid ""
+"Comparison for less than or equal ([code]a < b[/code]). Cannot be used if "
+"[member type] set to [constant CTYPE_BOOLEAN] or [constant CTYPE_TRANSFORM]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCompare.xml:56
+msgid ""
+"The result will be true if all of component in vector satisfy the comparison "
+"condition."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCompare.xml:59
+msgid ""
+"The result will be true if any of component in vector satisfy the comparison "
+"condition."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCubeMap.xml:4
+msgid "A [CubeMap] sampling node to be used within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCubeMap.xml:7
+msgid ""
+"Translated to [code]texture(cubemap, vec3)[/code] in the shader language. "
+"Returns a color vector and alpha channel as scalar."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCubeMap.xml:15
+msgid ""
+"The [CubeMap] texture to sample when using [constant SOURCE_TEXTURE] as "
+"[member source]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCubeMap.xml:18
+msgid ""
+"Defines which source should be used for the sampling. See [enum Source] for "
+"options."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCubeMap.xml:21
+#: doc/classes/VisualShaderNodeTextureUniform.xml:18
+msgid ""
+"Defines the type of data provided by the source texture. See [enum "
+"TextureType] for options."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCubeMap.xml:26
+msgid ""
+"Use the [CubeMap] set via [member cube_map]. If this is set to [member "
+"source], the [code]samplerCube[/code] port is ignored."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCubeMap.xml:29
+msgid ""
+"Use the [CubeMap] sampler reference passed via the [code]samplerCube[/code] "
+"port. If this is set to [member source], the [member cube_map] texture is "
+"ignored."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCubeMap.xml:32
+#: doc/classes/VisualShaderNodeTexture.xml:44
+#: doc/classes/VisualShaderNodeTextureUniform.xml:23
+msgid "No hints are added to the uniform declaration."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCubeMap.xml:35
+#: doc/classes/VisualShaderNodeTexture.xml:47
+#: doc/classes/VisualShaderNodeTextureUniform.xml:26
+msgid ""
+"Adds [code]hint_albedo[/code] as hint to the uniform declaration for proper "
+"sRGB to linear conversion."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCubeMap.xml:38
+#: doc/classes/VisualShaderNodeTexture.xml:50
+#: doc/classes/VisualShaderNodeTextureUniform.xml:29
+msgid ""
+"Adds [code]hint_normal[/code] as hint to the uniform declaration, which "
+"internally converts the texture for proper usage as normal map."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCubeMapUniform.xml:4
+msgid "A [CubeMap] uniform node to be used within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCubeMapUniform.xml:7
+msgid ""
+"Translated to [code]uniform samplerCube[/code] in the shader language. The "
+"output value can be used as port for [VisualShaderNodeCubeMap]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCustom.xml:4
+msgid ""
+"Virtual class to define custom [VisualShaderNode]s for use in the Visual "
+"Shader Editor."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCustom.xml:7
+msgid ""
+"By inheriting this class you can create a custom [VisualShader] script addon "
+"which will be automatically added to the Visual Shader Editor. The "
+"[VisualShaderNode]'s behavior is defined by overriding the provided virtual "
+"methods.\n"
+"In order for the node to be registered as an editor addon, you must use the "
+"[code]tool[/code] keyword and provide a [code]class_name[/code] for your "
+"custom script. For example:\n"
+"[codeblock]\n"
+"tool\n"
+"extends VisualShaderNodeCustom\n"
+"class_name VisualShaderNodeNoise\n"
+"[/codeblock]"
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCustom.xml:16
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/plugins/editor/"
+"visual_shader_plugins.html"
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCustom.xml:22
+msgid ""
+"Override this method to define the category of the associated custom node in "
+"the Visual Shader Editor's members dialog. The path may look like "
+"[code]\"MyGame/MyFunctions/Noise\"[/code].\n"
+"Defining this method is [b]optional[/b]. If not overridden, the node will be "
+"filed under the \"Custom\" category."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCustom.xml:33
+msgid ""
+"Override this method to define the actual shader code of the associated "
+"custom node. The shader code should be returned as a string, which can have "
+"multiple lines (the [code]\"\"\"[/code] multiline string construct can be "
+"used for convenience).\n"
+"The [code]input_vars[/code] and [code]output_vars[/code] arrays contain the "
+"string names of the various input and output variables, as defined by "
+"[code]_get_input_*[/code] and [code]_get_output_*[/code] virtual methods in "
+"this class.\n"
+"The output ports can be assigned values in the shader code. For example, "
+"[code]return output_vars[0] + \" = \" + input_vars[0] + \";\"[/code].\n"
+"You can customize the generated code based on the shader [code]mode[/code] "
+"(see [enum Shader.Mode]) and/or [code]type[/code] (see [enum VisualShader."
+"Type]).\n"
+"Defining this method is [b]required[/b]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCustom.xml:43
+msgid ""
+"Override this method to define the description of the associated custom node "
+"in the Visual Shader Editor's members dialog.\n"
+"Defining this method is [b]optional[/b]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCustom.xml:51
+msgid ""
+"Override this method to add shader code on top of the global shader, to "
+"define your own standard library of reusable methods, varyings, constants, "
+"uniforms, etc. The shader code should be returned as a string, which can "
+"have multiple lines (the [code]\"\"\"[/code] multiline string construct can "
+"be used for convenience).\n"
+"Be careful with this functionality as it can cause name conflicts with other "
+"custom nodes, so be sure to give the defined entities unique names.\n"
+"You can customize the generated code based on the shader [code]mode[/code] "
+"(see [enum Shader.Mode]).\n"
+"Defining this method is [b]optional[/b]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCustom.xml:60
+msgid ""
+"Override this method to define the amount of input ports of the associated "
+"custom node.\n"
+"Defining this method is [b]required[/b]. If not overridden, the node has no "
+"input ports."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCustom.xml:68
+msgid ""
+"Override this method to define the names of input ports of the associated "
+"custom node. The names are used both for the input slots in the editor and "
+"as identifiers in the shader code, and are passed in the [code]input_vars[/"
+"code] array in [method _get_code].\n"
+"Defining this method is [b]optional[/b], but recommended. If not overridden, "
+"input ports are named as [code]\"in\" + str(port)[/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCustom.xml:76
+msgid ""
+"Override this method to define the returned type of each input port of the "
+"associated custom node (see [enum VisualShaderNode.PortType] for possible "
+"types).\n"
+"Defining this method is [b]optional[/b], but recommended. If not overridden, "
+"input ports will return the [constant VisualShaderNode.PORT_TYPE_SCALAR] "
+"type."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCustom.xml:83
+msgid ""
+"Override this method to define the name of the associated custom node in the "
+"Visual Shader Editor's members dialog and graph.\n"
+"Defining this method is [b]optional[/b], but recommended. If not overridden, "
+"the node will be named as \"Unnamed\"."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCustom.xml:90
+msgid ""
+"Override this method to define the amount of output ports of the associated "
+"custom node.\n"
+"Defining this method is [b]required[/b]. If not overridden, the node has no "
+"output ports."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCustom.xml:98
+msgid ""
+"Override this method to define the names of output ports of the associated "
+"custom node. The names are used both for the output slots in the editor and "
+"as identifiers in the shader code, and are passed in the [code]output_vars[/"
+"code] array in [method _get_code].\n"
+"Defining this method is [b]optional[/b], but recommended. If not overridden, "
+"output ports are named as [code]\"out\" + str(port)[/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCustom.xml:106
+msgid ""
+"Override this method to define the returned type of each output port of the "
+"associated custom node (see [enum VisualShaderNode.PortType] for possible "
+"types).\n"
+"Defining this method is [b]optional[/b], but recommended. If not overridden, "
+"output ports will return the [constant VisualShaderNode.PORT_TYPE_SCALAR] "
+"type."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCustom.xml:113
+msgid ""
+"Override this method to define the return icon of the associated custom node "
+"in the Visual Shader Editor's members dialog.\n"
+"Defining this method is [b]optional[/b]. If not overridden, no return icon "
+"is shown."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeCustom.xml:120
+msgid ""
+"Override this method to define the subcategory of the associated custom node "
+"in the Visual Shader Editor's members dialog.\n"
+"Defining this method is [b]optional[/b]. If not overridden, the node will be "
+"filed under the root of the main category (see [method _get_category])."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeDeterminant.xml:4
+msgid ""
+"Calculates the determinant of a [Transform] within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeDeterminant.xml:7
+msgid "Translates to [code]determinant(x)[/code] in the shader language."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeDotProduct.xml:4
+msgid "Calculates a dot product of two vectors within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeDotProduct.xml:7
+msgid "Translates to [code]dot(a, b)[/code] in the shader language."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeExpression.xml:4
+msgid ""
+"A custom visual shader graph expression written in Godot Shading Language."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeExpression.xml:7
+msgid ""
+"Custom Godot Shading Language expression, with a custom amount of input and "
+"output ports.\n"
+"The provided code is directly injected into the graph's matching shader "
+"function ([code]vertex[/code], [code]fragment[/code], or [code]light[/"
+"code]), so it cannot be used to declare functions, varyings, uniforms, or "
+"global constants. See [VisualShaderNodeGlobalExpression] for such global "
+"definitions."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeExpression.xml:16
+msgid ""
+"An expression in Godot Shading Language, which will be injected at the start "
+"of the graph's matching shader function ([code]vertex[/code], "
+"[code]fragment[/code], or [code]light[/code]), and thus cannot be used to "
+"declare functions, varyings, uniforms, or global constants."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeFaceForward.xml:4
+msgid ""
+"Returns the vector that points in the same direction as a reference vector "
+"within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeFaceForward.xml:7
+msgid ""
+"Translates to [code]faceforward(N, I, Nref)[/code] in the shader language. "
+"The function has three vector parameters: [code]N[/code], the vector to "
+"orient, [code]I[/code], the incident vector, and [code]Nref[/code], the "
+"reference vector. If the dot product of [code]I[/code] and [code]Nref[/code] "
+"is smaller than zero the return value is [code]N[/code]. Otherwise, [code]-"
+"N[/code] is returned."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeFresnel.xml:4
+msgid "A Fresnel effect to be used within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeFresnel.xml:7
+msgid ""
+"Returns falloff based on the dot product of surface normal and view "
+"direction of camera (pass associated inputs to it)."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGlobalExpression.xml:4
+msgid ""
+"A custom global visual shader graph expression written in Godot Shading "
+"Language."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGlobalExpression.xml:7
+msgid ""
+"Custom Godot Shader Language expression, which is placed on top of the "
+"generated shader. You can place various function definitions inside to call "
+"later in [VisualShaderNodeExpression]s (which are injected in the main "
+"shader functions). You can also declare varyings, uniforms and global "
+"constants."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:4
+msgid ""
+"Base class for a family of nodes with variable amount of input and output "
+"ports within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:7
+msgid "Currently, has no direct usage, use the derived classes instead."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:18
+msgid ""
+"Adds an input port with the specified [code]type[/code] (see [enum "
+"VisualShaderNode.PortType]) and [code]name[/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:27
+msgid ""
+"Adds an output port with the specified [code]type[/code] (see [enum "
+"VisualShaderNode.PortType]) and [code]name[/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:33
+msgid "Removes all previously specified input ports."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:39
+msgid "Removes all previously specified output ports."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:45
+msgid ""
+"Returns a free input port ID which can be used in [method add_input_port]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:51
+msgid ""
+"Returns a free output port ID which can be used in [method add_output_port]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:57
+msgid ""
+"Returns the number of input ports in use. Alternative for [method "
+"get_free_input_port_id]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:63
+msgid ""
+"Returns a [String] description of the input ports as a colon-separated list "
+"using the format [code]id,type,name;[/code] (see [method add_input_port])."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:69
+msgid ""
+"Returns the number of output ports in use. Alternative for [method "
+"get_free_output_port_id]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:75
+msgid ""
+"Returns a [String] description of the output ports as a colon-separated list "
+"using the format [code]id,type,name;[/code] (see [method add_output_port])."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:82
+msgid "Returns [code]true[/code] if the specified input port exists."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:89
+msgid "Returns [code]true[/code] if the specified output port exists."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:96
+msgid ""
+"Returns [code]true[/code] if the specified port name does not override an "
+"existed port name and is valid within the shader."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:103
+msgid "Removes the specified input port."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:110
+msgid "Removes the specified output port."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:118
+msgid "Renames the specified input port."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:126
+msgid ""
+"Sets the specified input port's type (see [enum VisualShaderNode.PortType])."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:133
+msgid ""
+"Defines all input ports using a [String] formatted as a colon-separated "
+"list: [code]id,type,name;[/code] (see [method add_input_port])."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:141
+msgid "Renames the specified output port."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:149
+msgid ""
+"Sets the specified output port's type (see [enum VisualShaderNode.PortType])."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:156
+msgid ""
+"Defines all output ports using a [String] formatted as a colon-separated "
+"list: [code]id,type,name;[/code] (see [method add_output_port])."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeGroupBase.xml:162
+msgid "The size of the node in the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeInput.xml:6
+msgid ""
+"Gives access to input variables (built-ins) available for the shader. See "
+"the shading reference for the list of available built-ins for each shader "
+"type (check [code]Tutorials[/code] section for link)."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeInput.xml:9
+msgid ""
+"https://docs.godotengine.org/en/3.4/tutorials/shading/shading_reference/"
+"index.html"
+msgstr ""
+
+#: doc/classes/VisualShaderNodeInput.xml:20
+msgid ""
+"One of the several input constants in lower-case style like: \"vertex"
+"\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeIs.xml:4
+msgid ""
+"A boolean comparison operator to be used within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeIs.xml:7
+msgid ""
+"Returns the boolean result of the comparison between [code]INF[/code] or "
+"[code]NaN[/code] and a scalar parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeIs.xml:15
+msgid "The comparison function. See [enum Function] for options."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeIs.xml:20
+msgid "Comparison with [code]INF[/code] (Infinity)."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeIs.xml:23
+msgid ""
+"Comparison with [code]NaN[/code] (Not a Number; denotes invalid numeric "
+"results, e.g. division by zero)."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeOuterProduct.xml:4
+msgid ""
+"Calculates an outer product of two vectors within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeOuterProduct.xml:7
+msgid ""
+"[code]OuterProduct[/code] treats the first parameter [code]c[/code] as a "
+"column vector (matrix with one column) and the second parameter [code]r[/"
+"code] as a row vector (matrix with one row) and does a linear algebraic "
+"matrix multiply [code]c * r[/code], yielding a matrix whose number of rows "
+"is the number of components in [code]c[/code] and whose number of columns is "
+"the number of components in [code]r[/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeOutput.xml:4
+msgid "Represents the output shader parameters within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeOutput.xml:7
+msgid ""
+"This visual shader node is present in all shader graphs in form of \"Output"
+"\" block with multiple output value ports."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeScalarClamp.xml:4
+msgid "Clamps a scalar value within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeScalarClamp.xml:7
+msgid ""
+"Constrains a value to lie between [code]min[/code] and [code]max[/code] "
+"values."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeScalarDerivativeFunc.xml:4
+msgid "Calculates a scalar derivative within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeScalarDerivativeFunc.xml:7
+#: doc/classes/VisualShaderNodeVectorDerivativeFunc.xml:7
+msgid ""
+"This node is only available in [code]Fragment[/code] and [code]Light[/code] "
+"visual shaders."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeScalarDerivativeFunc.xml:15
+msgid "The derivative type. See [enum Function] for options."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeScalarDerivativeFunc.xml:20
+#: doc/classes/VisualShaderNodeVectorDerivativeFunc.xml:20
+msgid "Sum of absolute derivative in [code]x[/code] and [code]y[/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeScalarDerivativeFunc.xml:23
+#: doc/classes/VisualShaderNodeVectorDerivativeFunc.xml:23
+msgid "Derivative in [code]x[/code] using local differencing."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeScalarDerivativeFunc.xml:26
+#: doc/classes/VisualShaderNodeVectorDerivativeFunc.xml:26
+msgid "Derivative in [code]y[/code] using local differencing."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeScalarInterp.xml:4
+msgid ""
+"Linearly interpolates between two scalars within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeScalarInterp.xml:7
+msgid "Translates to [code]mix(a, b, weight)[/code] in the shader language."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeScalarSmoothStep.xml:4
+msgid "Calculates a scalar SmoothStep function within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeScalarSmoothStep.xml:7
+msgid ""
+"Translates to [code]smoothstep(edge0, edge1, x)[/code] in the shader "
+"language.\n"
+"Returns [code]0.0[/code] if [code]x[/code] is smaller than [code]edge0[/"
+"code] and [code]1.0[/code] if [code]x[/code] is larger than [code]edge1[/"
+"code]. Otherwise the return value is interpolated between [code]0.0[/code] "
+"and [code]1.0[/code] using Hermite polynomials."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeScalarSwitch.xml:4
+msgid "A boolean/scalar function for use within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeScalarSwitch.xml:7
+msgid ""
+"Returns an associated scalar if the provided boolean value is [code]true[/"
+"code] or [code]false[/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeSwitch.xml:4
+msgid "A boolean/vector function for use within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeSwitch.xml:7
+msgid ""
+"Returns an associated vector if the provided boolean value is [code]true[/"
+"code] or [code]false[/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTexture.xml:4
+msgid "Performs a texture lookup within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTexture.xml:7
+msgid ""
+"Performs a lookup operation on the provided texture, with support for "
+"multiple texture sources to choose from."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTexture.xml:15
+msgid "Determines the source for the lookup. See [enum Source] for options."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTexture.xml:18
+msgid "The source texture, if needed for the selected [member source]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTexture.xml:21
+msgid ""
+"Specifies the type of the texture if [member source] is set to [constant "
+"SOURCE_TEXTURE]. See [enum TextureType] for options."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTexture.xml:26
+msgid "Use the texture given as an argument for this function."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTexture.xml:29
+msgid "Use the current viewport's texture as the source."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTexture.xml:32
+msgid ""
+"Use the texture from this shader's texture built-in (e.g. a texture of a "
+"[Sprite])."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTexture.xml:35
+msgid "Use the texture from this shader's normal map built-in."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTexture.xml:38
+msgid "Use the depth texture available for this shader."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTexture.xml:41
+msgid "Use the texture provided in the input port for this function."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTextureUniform.xml:4
+msgid "Performs a uniform texture lookup within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTextureUniform.xml:7
+msgid ""
+"Performs a lookup operation on the texture provided as a uniform for the "
+"shader."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTextureUniform.xml:15
+msgid "Sets the default color if no texture is assigned to the uniform."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTextureUniform.xml:32
+msgid ""
+"Adds [code]hint_aniso[/code] as hint to the uniform declaration to use for a "
+"flowmap."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTextureUniform.xml:35
+msgid "Defaults to white color."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTextureUniform.xml:38
+msgid "Defaults to black color."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTextureUniformTriplanar.xml:4
+msgid ""
+"Performs a uniform texture lookup with triplanar within the visual shader "
+"graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTextureUniformTriplanar.xml:7
+msgid ""
+"Performs a lookup operation on the texture provided as a uniform for the "
+"shader, with support for triplanar mapping."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformCompose.xml:4
+msgid ""
+"Composes a [Transform] from four [Vector3]s within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformCompose.xml:7
+msgid ""
+"Creates a 4x4 transform matrix using four vectors of type [code]vec3[/code]. "
+"Each vector is one row in the matrix and the last column is a [code]vec4(0, "
+"0, 0, 1)[/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformConstant.xml:4
+msgid "A [Transform] constant for use within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformConstant.xml:7
+msgid "A constant [Transform], which can be used as an input node."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformConstant.xml:15
+msgid "A [Transform] constant which represents the state of this node."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformDecompose.xml:4
+msgid ""
+"Decomposes a [Transform] into four [Vector3]s within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformDecompose.xml:7
+msgid ""
+"Takes a 4x4 transform matrix and decomposes it into four [code]vec3[/code] "
+"values, one from each row of the matrix."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformFunc.xml:4
+msgid "Computes a [Transform] function within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformFunc.xml:7
+msgid "Computes an inverse or transpose function on the provided [Transform]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformFunc.xml:15
+msgid "The function to be computed. See [enum Function] for options."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformFunc.xml:20
+msgid "Perform the inverse operation on the [Transform] matrix."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformFunc.xml:23
+msgid "Perform the transpose operation on the [Transform] matrix."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformMult.xml:4
+msgid "Multiplies [Transform] by [Transform] within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformMult.xml:7
+msgid ""
+"A multiplication operation on two transforms (4x4 matrices), with support "
+"for different multiplication operators."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformMult.xml:15
+msgid ""
+"The multiplication type to be performed on the transforms. See [enum "
+"Operator] for options."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformMult.xml:20
+msgid "Multiplies transform [code]a[/code] by the transform [code]b[/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformMult.xml:23
+msgid "Multiplies transform [code]b[/code] by the transform [code]a[/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformMult.xml:26
+msgid ""
+"Performs a component-wise multiplication of transform [code]a[/code] by the "
+"transform [code]b[/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformMult.xml:29
+msgid ""
+"Performs a component-wise multiplication of transform [code]b[/code] by the "
+"transform [code]a[/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformUniform.xml:4
+msgid "A [Transform] uniform for use within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformUniform.xml:7
+msgid "Translated to [code]uniform mat4[/code] in the shader language."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformVecMult.xml:4
+msgid ""
+"Multiplies a [Transform] and a [Vector3] within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformVecMult.xml:7
+msgid ""
+"A multiplication operation on a transform (4x4 matrix) and a vector, with "
+"support for different multiplication operators."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformVecMult.xml:15
+msgid ""
+"The multiplication type to be performed. See [enum Operator] for options."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformVecMult.xml:20
+msgid "Multiplies transform [code]a[/code] by the vector [code]b[/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformVecMult.xml:23
+msgid "Multiplies vector [code]b[/code] by the transform [code]a[/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformVecMult.xml:26
+msgid ""
+"Multiplies transform [code]a[/code] by the vector [code]b[/code], skipping "
+"the last row and column of the transform."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeTransformVecMult.xml:29
+msgid ""
+"Multiplies vector [code]b[/code] by the transform [code]a[/code], skipping "
+"the last row and column of the transform."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeUniform.xml:4
+msgid "A base type for the uniforms within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeUniform.xml:7
+msgid ""
+"A uniform represents a variable in the shader which is set externally, i.e. "
+"from the [ShaderMaterial]. Uniforms are exposed as properties in the "
+"[ShaderMaterial] and can be assigned from the inspector or from a script."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeUniform.xml:15
+msgid ""
+"Name of the uniform, by which it can be accessed through the "
+"[ShaderMaterial] properties."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeUniformRef.xml:4
+msgid "A reference to an existing [VisualShaderNodeUniform]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeUniformRef.xml:7
+msgid ""
+"Creating a reference to a [VisualShaderNodeUniform] allows you to reuse this "
+"uniform in different shaders or shader stages easily."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeUniformRef.xml:15
+msgid "The name of the uniform which this reference points to."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVec3Constant.xml:4
+msgid "A [Vector3] constant to be used within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVec3Constant.xml:7
+msgid "A constant [Vector3], which can be used as an input node."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVec3Constant.xml:15
+msgid "A [Vector3] constant which represents the state of this node."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVec3Uniform.xml:4
+msgid "A [Vector3] uniform to be used within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVec3Uniform.xml:7
+msgid "Translated to [code]uniform vec3[/code] in the shader language."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorClamp.xml:4
+msgid "Clamps a vector value within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorClamp.xml:7
+msgid ""
+"Constrains a value to lie between [code]min[/code] and [code]max[/code] "
+"values. The operation is performed on each component of the vector "
+"individually."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorCompose.xml:4
+msgid "Composes a [Vector3] from three scalars within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorCompose.xml:7
+msgid ""
+"Creates a [code]vec3[/code] using three scalar values that can be provided "
+"from separate inputs."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorDecompose.xml:4
+msgid ""
+"Decomposes a [Vector3] into three scalars within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorDecompose.xml:7
+msgid ""
+"Takes a [code]vec3[/code] and decomposes it into three scalar values that "
+"can be used as separate inputs."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorDerivativeFunc.xml:4
+msgid "Calculates a vector derivative within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorDerivativeFunc.xml:15
+msgid "A derivative type. See [enum Function] for options."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorDistance.xml:4
+msgid ""
+"Returns the distance between two points. To be used within the visual shader "
+"graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorDistance.xml:7
+msgid ""
+"Calculates distance from point represented by vector [code]p0[/code] to "
+"vector [code]p1[/code].\n"
+"Translated to [code]distance(p0, p1)[/code] in the shader language."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:4
+msgid "A vector function to be used within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:7
+msgid "A visual shader node able to perform different functions using vectors."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:15
+msgid "The function to be performed. See [enum Function] for options."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:20
+msgid ""
+"Normalizes the vector so that it has a length of [code]1[/code] but points "
+"in the same direction."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:23
+msgid "Clamps the value between [code]0.0[/code] and [code]1.0[/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:26
+msgid "Returns the opposite value of the parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:29
+msgid "Returns [code]1/vector[/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:32
+msgid "Converts RGB vector to HSV equivalent."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:35
+msgid "Converts HSV vector to RGB equivalent."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:38
+msgid "Returns the absolute value of the parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:41
+msgid "Returns the arc-cosine of the parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:44
+msgid "Returns the inverse hyperbolic cosine of the parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:47
+msgid "Returns the arc-sine of the parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:50
+msgid "Returns the inverse hyperbolic sine of the parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:53
+msgid "Returns the arc-tangent of the parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:56
+msgid "Returns the inverse hyperbolic tangent of the parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:59
+msgid ""
+"Finds the nearest integer that is greater than or equal to the parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:62
+msgid "Returns the cosine of the parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:65
+msgid "Returns the hyperbolic cosine of the parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:68
+msgid "Converts a quantity in radians to degrees."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:71
+msgid "Base-e Exponential."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:74
+msgid "Base-2 Exponential."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:77
+msgid "Finds the nearest integer less than or equal to the parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:80
+msgid "Computes the fractional part of the argument."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:83
+msgid "Returns the inverse of the square root of the parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:86
+msgid "Natural logarithm."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:89
+msgid "Base-2 logarithm."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:92
+msgid "Converts a quantity in degrees to radians."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:95
+msgid "Finds the nearest integer to the parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:98
+msgid "Finds the nearest even integer to the parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:101
+msgid ""
+"Extracts the sign of the parameter, i.e. returns [code]-1[/code] if the "
+"parameter is negative, [code]1[/code] if it's positive and [code]0[/code] "
+"otherwise."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:104
+msgid "Returns the sine of the parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:107
+msgid "Returns the hyperbolic sine of the parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:110
+msgid "Returns the square root of the parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:113
+msgid "Returns the tangent of the parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:116
+msgid "Returns the hyperbolic tangent of the parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:119
+msgid ""
+"Returns a value equal to the nearest integer to the parameter whose absolute "
+"value is not larger than the absolute value of the parameter."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorFunc.xml:122
+msgid "Returns [code]1.0 - vector[/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorInterp.xml:4
+msgid ""
+"Linearly interpolates between two vectors within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorInterp.xml:7
+msgid ""
+"Translates to [code]mix(a, b, weight)[/code] in the shader language, where "
+"[code]weight[/code] is a [Vector3] with weights for each component."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorLen.xml:4
+msgid "Returns the length of a [Vector3] within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorLen.xml:7
+msgid "Translated to [code]length(p0)[/code] in the shader language."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorOp.xml:4
+msgid "A vector operator to be used within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorOp.xml:7
+msgid ""
+"A visual shader node for use of vector operators. Operates on vector "
+"[code]a[/code] and vector [code]b[/code]."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorOp.xml:15
+msgid "The operator to be used. See [enum Operator] for options."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorOp.xml:20
+msgid "Adds two vectors."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorOp.xml:23
+msgid "Subtracts a vector from a vector."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorOp.xml:26
+msgid "Multiplies two vectors."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorOp.xml:29
+msgid "Divides vector by vector."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorOp.xml:32
+msgid "Returns the remainder of the two vectors."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorOp.xml:35
+msgid ""
+"Returns the value of the first parameter raised to the power of the second, "
+"for each component of the vectors."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorOp.xml:38
+msgid "Returns the greater of two values, for each component of the vectors."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorOp.xml:41
+msgid "Returns the lesser of two values, for each component of the vectors."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorOp.xml:44
+msgid "Calculates the cross product of two vectors."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorOp.xml:47
+msgid "Returns the arc-tangent of the parameters."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorOp.xml:50
+msgid ""
+"Returns the vector that points in the direction of reflection. [code]a[/"
+"code] is incident vector and [code]b[/code] is the normal vector."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorOp.xml:53
+msgid ""
+"Vector step operator. Returns [code]0.0[/code] if [code]a[/code] is smaller "
+"than [code]b[/code] and [code]1.0[/code] otherwise."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorRefract.xml:4
+msgid ""
+"Returns the [Vector3] that points in the direction of refraction. For use "
+"within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorRefract.xml:7
+msgid ""
+"Translated to [code]refract(I, N, eta)[/code] in the shader language, where "
+"[code]I[/code] is the incident vector, [code]N[/code] is the normal vector "
+"and [code]eta[/code] is the ratio of the indices of the refraction."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorScalarMix.xml:4
+msgid ""
+"Linearly interpolates between two vectors using a scalar. For use within the "
+"visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorScalarMix.xml:7
+msgid ""
+"Translates to [code]mix(a, b, weight)[/code] in the shader language, where "
+"[code]a[/code] and [code]b[/code] are vectors and [code]weight[/code] is a "
+"scalar."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorScalarSmoothStep.xml:4
+msgid ""
+"Calculates a vector SmoothStep function using scalar within the visual "
+"shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorScalarSmoothStep.xml:7
+msgid ""
+"Translates to [code]smoothstep(edge0, edge1, x)[/code] in the shader "
+"language, where [code]x[/code] is a scalar.\n"
+"Returns [code]0.0[/code] if [code]x[/code] is smaller than [code]edge0[/"
+"code] and [code]1.0[/code] if [code]x[/code] is larger than [code]edge1[/"
+"code]. Otherwise the return value is interpolated between [code]0.0[/code] "
+"and [code]1.0[/code] using Hermite polynomials."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorScalarStep.xml:4
+msgid "Calculates a vector Step function within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorScalarStep.xml:7
+msgid ""
+"Translates to [code]step(edge, x)[/code] in the shader language.\n"
+"Returns [code]0.0[/code] if [code]x[/code] is smaller than [code]edge[/code] "
+"and [code]1.0[/code] otherwise."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorSmoothStep.xml:4
+msgid "Calculates a vector SmoothStep function within the visual shader graph."
+msgstr ""
+
+#: doc/classes/VisualShaderNodeVectorSmoothStep.xml:7
+msgid ""
+"Translates to [code]smoothstep(edge0, edge1, x)[/code] in the shader "
+"language, where [code]x[/code] is a vector.\n"
+"Returns [code]0.0[/code] if [code]x[/code] is smaller than [code]edge0[/"
+"code] and [code]1.0[/code] if [code]x[/code] is larger than [code]edge1[/"
+"code]. Otherwise the return value is interpolated between [code]0.0[/code] "
+"and [code]1.0[/code] using Hermite polynomials."
+msgstr ""
+
+#: doc/classes/VScrollBar.xml:4
+msgid "Vertical scroll bar."
+msgstr ""
+
+#: doc/classes/VScrollBar.xml:7
+msgid ""
+"Vertical version of [ScrollBar], which goes from top (min) to bottom (max)."
+msgstr ""
+
+#: doc/classes/VScrollBar.xml:21
+msgid ""
+"Icon used as a button to scroll the [ScrollBar] up. Supports custom step "
+"using the [member ScrollBar.custom_step] property."
+msgstr ""
+
+#: doc/classes/VScrollBar.xml:39
+msgid ""
+"Icon used as a button to scroll the [ScrollBar] down. Supports custom step "
+"using the [member ScrollBar.custom_step] property."
+msgstr ""
+
+#: doc/classes/VSeparator.xml:4
+msgid "Vertical version of [Separator]."
+msgstr ""
+
+#: doc/classes/VSeparator.xml:7
+msgid ""
+"Vertical version of [Separator]. Even though it looks vertical, it is used "
+"to separate objects horizontally."
+msgstr ""
+
+#: doc/classes/VSeparator.xml:17
+msgid ""
+"The width of the area covered by the separator. Effectively works like a "
+"minimum width."
+msgstr ""
+
+#: doc/classes/VSeparator.xml:20
+msgid ""
+"The style for the separator line. Works best with [StyleBoxLine] (remember "
+"to enable [member StyleBoxLine.vertical])."
+msgstr ""
+
+#: doc/classes/VSlider.xml:4
+msgid "Vertical slider."
+msgstr ""
+
+#: doc/classes/VSlider.xml:7
+msgid ""
+"Vertical slider. See [Slider]. This one goes from bottom (min) to top "
+"(max).\n"
+"[b]Note:[/b] The [signal Range.changed] and [signal Range.value_changed] "
+"signals are part of the [Range] class which this class inherits from."
+msgstr ""
+
+#: doc/classes/VSlider.xml:25
+msgid "The background of the area below the grabber."
+msgstr ""
+
+#: doc/classes/VSlider.xml:36
+msgid ""
+"The background for the whole slider. Determines the width of the "
+"[code]grabber_area[/code]."
+msgstr ""
+
+#: doc/classes/VSplitContainer.xml:4
+msgid "Vertical split container."
+msgstr ""
+
+#: doc/classes/VSplitContainer.xml:7
+msgid ""
+"Vertical split container. See [SplitContainer]. This goes from top to bottom."
+msgstr ""
+
+#: doc/classes/WeakRef.xml:4
+msgid ""
+"Holds an [Object], but does not contribute to the reference count if the "
+"object is a reference."
+msgstr ""
+
+#: doc/classes/WeakRef.xml:7
+msgid ""
+"A weakref can hold a [Reference], without contributing to the reference "
+"counter. A weakref can be created from an [Object] using [method @GDScript."
+"weakref]. If this object is not a reference, weakref still works, however, "
+"it does not have any effect on the object. Weakrefs are useful in cases "
+"where multiple classes have variables that refer to each other. Without "
+"weakrefs, using these classes could lead to memory leaks, since both "
+"references keep each other from being released. Making part of the variables "
+"a weakref can prevent this cyclic dependency, and allows the references to "
+"be released."
+msgstr ""
+
+#: doc/classes/WeakRef.xml:15
+msgid "Returns the [Object] this weakref is referring to."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCDataChannel.xml:13
+msgid "Closes this data channel, notifying the other peer."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCDataChannel.xml:19
+msgid ""
+"Returns the number of bytes currently queued to be sent over this channel."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCDataChannel.xml:25
+msgid ""
+"Returns the id assigned to this channel during creation (or auto-assigned "
+"during negotiation).\n"
+"If the channel is not negotiated out-of-band the id will only be available "
+"after the connection is established (will return [code]65535[/code] until "
+"then)."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCDataChannel.xml:32
+msgid "Returns the label assigned to this channel during creation."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCDataChannel.xml:38
+msgid ""
+"Returns the [code]maxPacketLifeTime[/code] value assigned to this channel "
+"during creation.\n"
+"Will be [code]65535[/code] if not specified."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCDataChannel.xml:45
+msgid ""
+"Returns the [code]maxRetransmits[/code] value assigned to this channel "
+"during creation.\n"
+"Will be [code]65535[/code] if not specified."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCDataChannel.xml:52
+msgid ""
+"Returns the sub-protocol assigned to this channel during creation. An empty "
+"string if not specified."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCDataChannel.xml:58
+msgid "Returns the current state of this channel, see [enum ChannelState]."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCDataChannel.xml:64
+msgid ""
+"Returns [code]true[/code] if this channel was created with out-of-band "
+"configuration."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCDataChannel.xml:70
+msgid ""
+"Returns [code]true[/code] if this channel was created with ordering enabled "
+"(default)."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCDataChannel.xml:76
+msgid "Reserved, but not used for now."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCDataChannel.xml:82
+msgid ""
+"Returns [code]true[/code] if the last received packet was transferred as "
+"text. See [member write_mode]."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCDataChannel.xml:88
+msgid ""
+"The transfer mode to use when sending outgoing packet. Either text or binary."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCDataChannel.xml:93
+msgid ""
+"Tells the channel to send data over this channel as text. An external peer "
+"(non-Godot) would receive this as a string."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCDataChannel.xml:96
+msgid ""
+"Tells the channel to send data over this channel as binary. An external peer "
+"(non-Godot) would receive this as array buffer or blob."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCDataChannel.xml:99
+msgid "The channel was created, but it's still trying to connect."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCDataChannel.xml:102
+msgid "The channel is currently open, and data can flow over it."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCDataChannel.xml:105
+msgid ""
+"The channel is being closed, no new messages will be accepted, but those "
+"already in queue will be flushed."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCDataChannel.xml:108
+msgid "The channel was closed, or connection failed."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCMultiplayer.xml:4
+msgid ""
+"A simple interface to create a peer-to-peer mesh network composed of "
+"[WebRTCPeerConnection] that is compatible with the [MultiplayerAPI]."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCMultiplayer.xml:7
+msgid ""
+"This class constructs a full mesh of [WebRTCPeerConnection] (one connection "
+"for each peer) that can be used as a [member MultiplayerAPI.network_peer].\n"
+"You can add each [WebRTCPeerConnection] via [method add_peer] or remove them "
+"via [method remove_peer]. Peers must be added in [constant "
+"WebRTCPeerConnection.STATE_NEW] state to allow it to create the appropriate "
+"channels. This class will not create offers nor set descriptions, it will "
+"only poll them, and notify connections and disconnections.\n"
+"[signal NetworkedMultiplayerPeer.connection_succeeded] and [signal "
+"NetworkedMultiplayerPeer.server_disconnected] will not be emitted unless "
+"[code]server_compatibility[/code] is [code]true[/code] in [method "
+"initialize]. Beside that data transfer works like in a "
+"[NetworkedMultiplayerPeer]."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCMultiplayer.xml:20
+msgid ""
+"Add a new peer to the mesh with the given [code]peer_id[/code]. The "
+"[WebRTCPeerConnection] must be in state [constant WebRTCPeerConnection."
+"STATE_NEW].\n"
+"Three channels will be created for reliable, unreliable, and ordered "
+"transport. The value of [code]unreliable_lifetime[/code] will be passed to "
+"the [code]maxPacketLifetime[/code] option when creating unreliable and "
+"ordered channels (see [method WebRTCPeerConnection.create_data_channel])."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCMultiplayer.xml:27
+msgid "Close all the add peer connections and channels, freeing all resources."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCMultiplayer.xml:34
+msgid ""
+"Return a dictionary representation of the peer with given [code]peer_id[/"
+"code] with three keys. [code]connection[/code] containing the "
+"[WebRTCPeerConnection] to this peer, [code]channels[/code] an array of three "
+"[WebRTCDataChannel], and [code]connected[/code] a boolean representing if "
+"the peer connection is currently connected (all three channels are open)."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCMultiplayer.xml:40
+msgid ""
+"Returns a dictionary which keys are the peer ids and values the peer "
+"representation as in [method get_peer]."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCMultiplayer.xml:47
+msgid ""
+"Returns [code]true[/code] if the given [code]peer_id[/code] is in the peers "
+"map (it might not be connected though)."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCMultiplayer.xml:55
+msgid ""
+"Initialize the multiplayer peer with the given [code]peer_id[/code] (must be "
+"between 1 and 2147483647).\n"
+"If [code]server_compatibilty[/code] is [code]false[/code] (default), the "
+"multiplayer peer will be immediately in state [constant "
+"NetworkedMultiplayerPeer.CONNECTION_CONNECTED] and [signal "
+"NetworkedMultiplayerPeer.connection_succeeded] will not be emitted.\n"
+"If [code]server_compatibilty[/code] is [code]true[/code] the peer will "
+"suppress all [signal NetworkedMultiplayerPeer.peer_connected] signals until "
+"a peer with id [constant NetworkedMultiplayerPeer.TARGET_PEER_SERVER] "
+"connects and then emit [signal NetworkedMultiplayerPeer."
+"connection_succeeded]. After that the signal [signal "
+"NetworkedMultiplayerPeer.peer_connected] will be emitted for every already "
+"connected peer, and any new peer that might connect. If the server peer "
+"disconnects after that, signal [signal NetworkedMultiplayerPeer."
+"server_disconnected] will be emitted and state will become [constant "
+"NetworkedMultiplayerPeer.CONNECTION_CONNECTED]."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCMultiplayer.xml:64
+msgid ""
+"Remove the peer with given [code]peer_id[/code] from the mesh. If the peer "
+"was connected, and [signal NetworkedMultiplayerPeer.peer_connected] was "
+"emitted for it, then [signal NetworkedMultiplayerPeer.peer_disconnected] "
+"will be emitted."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml:4
+msgid "Interface to a WebRTC peer connection."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml:7
+msgid ""
+"A WebRTC connection between the local computer and a remote peer. Provides "
+"an interface to connect, maintain and monitor the connection.\n"
+"Setting up a WebRTC connection between two peers from now on) may not seem a "
+"trivial task, but it can be broken down into 3 main steps:\n"
+"- The peer that wants to initiate the connection ([code]A[/code] from now "
+"on) creates an offer and send it to the other peer ([code]B[/code] from now "
+"on).\n"
+"- [code]B[/code] receives the offer, generate and answer, and sends it to "
+"[code]A[/code]).\n"
+"- [code]A[/code] and [code]B[/code] then generates and exchange ICE "
+"candidates with each other.\n"
+"After these steps, the connection should become connected. Keep on reading "
+"or look into the tutorial for more information."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml:23
+msgid ""
+"Add an ice candidate generated by a remote peer (and received over the "
+"signaling server). See [signal ice_candidate_created]."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml:29
+msgid ""
+"Close the peer connection and all data channels associated with it.\n"
+"[b]Note:[/b] You cannot reuse this object for a new connection unless you "
+"call [method initialize]."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml:39
+msgid ""
+"Returns a new [WebRTCDataChannel] (or [code]null[/code] on failure) with "
+"given [code]label[/code] and optionally configured via the [code]options[/"
+"code] dictionary. This method can only be called when the connection is in "
+"state [constant STATE_NEW].\n"
+"There are two ways to create a working data channel: either call [method "
+"create_data_channel] on only one of the peer and listen to [signal "
+"data_channel_received] on the other, or call [method create_data_channel] on "
+"both peers, with the same values, and the [code]negotiated[/code] option set "
+"to [code]true[/code].\n"
+"Valid [code]options[/code] are:\n"
+"[codeblock]\n"
+"{\n"
+" \"negotiated\": true, # When set to true (default off), means the "
+"channel is negotiated out of band. \"id\" must be set too. "
+"\"data_channel_received\" will not be called.\n"
+" \"id\": 1, # When \"negotiated\" is true this value must also be set to "
+"the same value on both peer.\n"
+"\n"
+" # Only one of maxRetransmits and maxPacketLifeTime can be specified, not "
+"both. They make the channel unreliable (but also better at real time).\n"
+" \"maxRetransmits\": 1, # Specify the maximum number of attempt the peer "
+"will make to retransmits packets if they are not acknowledged.\n"
+" \"maxPacketLifeTime\": 100, # Specify the maximum amount of time before "
+"giving up retransmitions of unacknowledged packets (in milliseconds).\n"
+" \"ordered\": true, # When in unreliable mode (i.e. either "
+"\"maxRetransmits\" or \"maxPacketLifetime\" is set), \"ordered\" (true by "
+"default) specify if packet ordering is to be enforced.\n"
+"\n"
+" \"protocol\": \"my-custom-protocol\", # A custom sub-protocol string for "
+"this channel.\n"
+"}\n"
+"[/codeblock]\n"
+"[b]Note:[/b] You must keep a reference to channels created this way, or it "
+"will be closed."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml:61
+msgid ""
+"Creates a new SDP offer to start a WebRTC connection with a remote peer. At "
+"least one [WebRTCDataChannel] must have been created before calling this "
+"method.\n"
+"If this functions returns [constant OK], [signal "
+"session_description_created] will be called when the session is ready to be "
+"sent."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml:68
+msgid "Returns the connection state. See [enum ConnectionState]."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml:76
+msgid ""
+"Re-initialize this peer connection, closing any previously active "
+"connection, and going back to state [constant STATE_NEW]. A dictionary of "
+"[code]options[/code] can be passed to configure the peer connection.\n"
+"Valid [code]options[/code] are:\n"
+"[codeblock]\n"
+"{\n"
+" \"iceServers\": [\n"
+" {\n"
+" \"urls\": [ \"stun:stun.example.com:3478\" ], # One or more STUN "
+"servers.\n"
+" },\n"
+" {\n"
+" \"urls\": [ \"turn:turn.example.com:3478\" ], # One or more TURN "
+"servers.\n"
+" \"username\": \"a_username\", # Optional username for the TURN "
+"server.\n"
+" \"credential\": \"a_password\", # Optional password for the TURN "
+"server.\n"
+" }\n"
+" ]\n"
+"}\n"
+"[/codeblock]"
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml:97
+msgid ""
+"Call this method frequently (e.g. in [method Node._process] or [method Node."
+"_physics_process]) to properly receive signals."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml:105
+msgid ""
+"Sets the SDP description of the local peer. This should be called in "
+"response to [signal session_description_created].\n"
+"After calling this function the peer will start emitting [signal "
+"ice_candidate_created] (unless an [enum Error] different from [constant OK] "
+"is returned)."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml:114
+msgid ""
+"Sets the SDP description of the remote peer. This should be called with the "
+"values generated by a remote peer and received over the signaling server.\n"
+"If [code]type[/code] is [code]offer[/code] the peer will emit [signal "
+"session_description_created] with the appropriate answer.\n"
+"If [code]type[/code] is [code]answer[/code] the peer will start emitting "
+"[signal ice_candidate_created]."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml:124
+msgid ""
+"Emitted when a new in-band channel is received, i.e. when the channel was "
+"created with [code]negotiated: false[/code] (default).\n"
+"The object will be an instance of [WebRTCDataChannel]. You must keep a "
+"reference of it or it will be closed automatically. See [method "
+"create_data_channel]."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml:133
+msgid ""
+"Emitted when a new ICE candidate has been created. The three parameters are "
+"meant to be passed to the remote peer over the signaling server."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml:140
+msgid ""
+"Emitted after a successful call to [method create_offer] or [method "
+"set_remote_description] (when it generates an answer). The parameters are "
+"meant to be passed to [method set_local_description] on this object, and "
+"sent to the remote peer over the signaling server."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml:146
+msgid ""
+"The connection is new, data channels and an offer can be created in this "
+"state."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml:149
+msgid ""
+"The peer is connecting, ICE is in progress, none of the transports has "
+"failed."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml:152
+msgid "The peer is connected, all ICE transports are connected."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml:155
+msgid "At least one ICE transport is disconnected."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml:158
+msgid "One or more of the ICE transports failed."
+msgstr ""
+
+#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml:161
+msgid ""
+"The peer connection is closed (after calling [method close] for example)."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketClient.xml:4
+msgid "A WebSocket client implementation."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketClient.xml:7
+msgid ""
+"This class implements a WebSocket client compatible with any RFC 6455-"
+"compliant WebSocket server.\n"
+"This client can be optionally used as a network peer for the "
+"[MultiplayerAPI].\n"
+"After starting the client ([method connect_to_url]), you will need to "
+"[method NetworkedMultiplayerPeer.poll] it at regular intervals (e.g. inside "
+"[method Node._process]).\n"
+"You will receive appropriate signals when connecting, disconnecting, or when "
+"new data is available."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketClient.xml:22
+msgid ""
+"Connects to the given URL requesting one of the given [code]protocols[/code] "
+"as sub-protocol. If the list empty (default), no sub-protocol will be "
+"requested.\n"
+"If [code]true[/code] is passed as [code]gd_mp_api[/code], the client will "
+"behave like a network peer for the [MultiplayerAPI], connections to non-"
+"Godot servers will not work, and [signal data_received] will not be "
+"emitted.\n"
+"If [code]false[/code] is passed instead (default), you must call "
+"[PacketPeer] functions ([code]put_packet[/code], [code]get_packet[/code], "
+"etc.) on the [WebSocketPeer] returned via [code]get_peer(1)[/code] and not "
+"on this object directly (e.g. [code]get_peer(1).put_packet(data)[/code]).\n"
+"You can optionally pass a list of [code]custom_headers[/code] to be added to "
+"the handshake HTTP request.\n"
+"[b]Note:[/b] To avoid mixed content warnings or errors in HTML5, you may "
+"have to use a [code]url[/code] that starts with [code]wss://[/code] (secure) "
+"instead of [code]ws://[/code]. When doing so, make sure to use the fully "
+"qualified domain name that matches the one defined in the server's SSL "
+"certificate. Do not connect directly via the IP address for [code]wss://[/"
+"code] connections, as it won't match with the SSL certificate.\n"
+"[b]Note:[/b] Specifying [code]custom_headers[/code] is not supported in "
+"HTML5 exports due to browsers restrictions."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketClient.xml:35
+msgid ""
+"Disconnects this client from the connected host. See [method WebSocketPeer."
+"close] for more information."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketClient.xml:41
+msgid "Return the IP address of the currently connected host."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketClient.xml:47
+msgid "Return the IP port of the currently connected host."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketClient.xml:53
+msgid ""
+"If specified, this [X509Certificate] will be the only one accepted when "
+"connecting to an SSL host. Any other certificate provided by the server will "
+"be regarded as invalid.\n"
+"[b]Note:[/b] Specifying a custom [code]trusted_ssl_certificate[/code] is not "
+"supported in HTML5 exports due to browsers restrictions."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketClient.xml:57
+msgid ""
+"If [code]true[/code], SSL certificate verification is enabled.\n"
+"[b]Note:[/b] You must specify the certificates to be used in the Project "
+"Settings for it to work when exported."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketClient.xml:65
+msgid ""
+"Emitted when the connection to the server is closed. [code]was_clean_close[/"
+"code] will be [code]true[/code] if the connection was shutdown cleanly."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketClient.xml:70
+msgid "Emitted when the connection to the server fails."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketClient.xml:76
+msgid ""
+"Emitted when a connection with the server is established, [code]protocol[/"
+"code] will contain the sub-protocol agreed with the server."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketClient.xml:81
+msgid ""
+"Emitted when a WebSocket message is received.\n"
+"[b]Note:[/b] This signal is [i]not[/i] emitted when used as high-level "
+"multiplayer peer."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketClient.xml:89
+msgid ""
+"Emitted when the server requests a clean close. You should keep polling "
+"until you get a [signal connection_closed] signal to achieve the clean "
+"close. See [method WebSocketPeer.close] for more details."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketMultiplayerPeer.xml:4
+msgid "Base class for WebSocket server and client."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketMultiplayerPeer.xml:7
+msgid ""
+"Base class for WebSocket server and client, allowing them to be used as "
+"network peer for the [MultiplayerAPI]."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketMultiplayerPeer.xml:16
+msgid ""
+"Returns the [WebSocketPeer] associated to the given [code]peer_id[/code]."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketMultiplayerPeer.xml:26
+msgid ""
+"Configures the buffer sizes for this WebSocket peer. Default values can be "
+"specified in the Project Settings under [code]network/limits[/code]. For "
+"server, values are meant per connected peer.\n"
+"The first two parameters define the size and queued packets limits of the "
+"input buffer, the last two of the output buffer.\n"
+"Buffer sizes are expressed in KiB, so [code]4 = 2^12 = 4096 bytes[/code]. "
+"All parameters will be rounded up to the nearest power of two.\n"
+"[b]Note:[/b] HTML5 exports only use the input buffer since the output one is "
+"managed by browsers."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketMultiplayerPeer.xml:41
+msgid ""
+"Emitted when a packet is received from a peer.\n"
+"[b]Note:[/b] This signal is only emitted when the client or server is "
+"configured to use Godot multiplayer API."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketPeer.xml:4
+msgid "A class representing a specific WebSocket connection."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketPeer.xml:7
+msgid ""
+"This class represents a specific WebSocket connection, allowing you to do "
+"lower level operations with it.\n"
+"You can choose to write to the socket in binary or text mode, and you can "
+"recognize the mode used for writing by the other peer."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketPeer.xml:18
+msgid ""
+"Closes this WebSocket connection. [code]code[/code] is the status code for "
+"the closure (see RFC 6455 section 7.4 for a list of valid status codes). "
+"[code]reason[/code] is the human readable reason for closing the connection "
+"(can be any UTF-8 string that's smaller than 123 bytes).\n"
+"[b]Note:[/b] To achieve a clean close, you will need to keep polling until "
+"either [signal WebSocketClient.connection_closed] or [signal WebSocketServer."
+"client_disconnected] is received.\n"
+"[b]Note:[/b] The HTML5 export might not support all status codes. Please "
+"refer to browser-specific documentation for more details."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketPeer.xml:26
+msgid ""
+"Returns the IP address of the connected peer.\n"
+"[b]Note:[/b] Not available in the HTML5 export."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketPeer.xml:33
+msgid ""
+"Returns the remote port of the connected peer.\n"
+"[b]Note:[/b] Not available in the HTML5 export."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketPeer.xml:40
+msgid ""
+"Returns the current amount of data in the outbound websocket buffer. [b]Note:"
+"[/b] HTML5 exports use WebSocket.bufferedAmount, while other platforms use "
+"an internal buffer."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketPeer.xml:46
+msgid "Gets the current selected write mode. See [enum WriteMode]."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketPeer.xml:52
+msgid "Returns [code]true[/code] if this peer is currently connected."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketPeer.xml:59
+msgid ""
+"Disable Nagle's algorithm on the underling TCP socket (default). See [method "
+"StreamPeerTCP.set_no_delay] for more information.\n"
+"[b]Note:[/b] Not available in the HTML5 export."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketPeer.xml:67
+msgid "Sets the socket to use the given [enum WriteMode]."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketPeer.xml:73
+msgid ""
+"Returns [code]true[/code] if the last received packet was sent as a text "
+"payload. See [enum WriteMode]."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketPeer.xml:79
+msgid ""
+"Specifies that WebSockets messages should be transferred as text payload "
+"(only valid UTF-8 is allowed)."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketPeer.xml:82
+msgid ""
+"Specifies that WebSockets messages should be transferred as binary payload "
+"(any byte combination is allowed)."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketServer.xml:4
+msgid "A WebSocket server implementation."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketServer.xml:7
+msgid ""
+"This class implements a WebSocket server that can also support the high-"
+"level multiplayer API.\n"
+"After starting the server ([method listen]), you will need to [method "
+"NetworkedMultiplayerPeer.poll] it at regular intervals (e.g. inside [method "
+"Node._process]). When clients connect, disconnect, or send data, you will "
+"receive the appropriate signal.\n"
+"[b]Note:[/b] Not available in HTML5 exports."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketServer.xml:20
+msgid ""
+"Disconnects the peer identified by [code]id[/code] from the server. See "
+"[method WebSocketPeer.close] for more information."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketServer.xml:41
+msgid "Returns [code]true[/code] if a peer with the given ID is connected."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketServer.xml:47
+msgid ""
+"Returns [code]true[/code] if the server is actively listening on a port."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketServer.xml:56
+msgid ""
+"Starts listening on the given port.\n"
+"You can specify the desired subprotocols via the \"protocols\" array. If the "
+"list empty (default), no sub-protocol will be requested.\n"
+"If [code]true[/code] is passed as [code]gd_mp_api[/code], the server will "
+"behave like a network peer for the [MultiplayerAPI], connections from non-"
+"Godot clients will not work, and [signal data_received] will not be "
+"emitted.\n"
+"If [code]false[/code] is passed instead (default), you must call "
+"[PacketPeer] functions ([code]put_packet[/code], [code]get_packet[/code], "
+"etc.), on the [WebSocketPeer] returned via [code]get_peer(id)[/code] to "
+"communicate with the peer with given [code]id[/code] (e.g. "
+"[code]get_peer(id).get_available_packet_count[/code])."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketServer.xml:65
+msgid "Stops the server and clear its state."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketServer.xml:71
+msgid ""
+"When not set to [code]*[/code] will restrict incoming connections to the "
+"specified IP address. Setting [code]bind_ip[/code] to [code]127.0.0.1[/code] "
+"will cause the server to listen only to the local host."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketServer.xml:74
+msgid ""
+"When using SSL (see [member private_key] and [member ssl_certificate]), you "
+"can set this to a valid [X509Certificate] to be provided as additional CA "
+"chain information during the SSL handshake."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketServer.xml:77
+msgid ""
+"The time in seconds before a pending client (i.e. a client that has not yet "
+"finished the HTTP handshake) is considered stale and forcefully disconnected."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketServer.xml:80
+msgid ""
+"When set to a valid [CryptoKey] (along with [member ssl_certificate]) will "
+"cause the server to require SSL instead of regular TCP (i.e. the [code]wss://"
+"[/code] protocol)."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketServer.xml:83
+msgid ""
+"When set to a valid [X509Certificate] (along with [member private_key]) will "
+"cause the server to require SSL instead of regular TCP (i.e. the [code]wss://"
+"[/code] protocol)."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketServer.xml:92
+msgid ""
+"Emitted when a client requests a clean close. You should keep polling until "
+"you get a [signal client_disconnected] signal with the same [code]id[/code] "
+"to achieve the clean close. See [method WebSocketPeer.close] for more "
+"details."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketServer.xml:99
+msgid ""
+"Emitted when a new client connects. \"protocol\" will be the sub-protocol "
+"agreed with the client."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketServer.xml:106
+msgid ""
+"Emitted when a client disconnects. [code]was_clean_close[/code] will be "
+"[code]true[/code] if the connection was shutdown cleanly."
+msgstr ""
+
+#: modules/websocket/doc_classes/WebSocketServer.xml:112
+msgid ""
+"Emitted when a new message is received.\n"
+"[b]Note:[/b] This signal is [i]not[/i] emitted when used as high-level "
+"multiplayer peer."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:4
+msgid "AR/VR interface using WebXR."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:7
+msgid ""
+"WebXR is an open standard that allows creating VR and AR applications that "
+"run in the web browser.\n"
+"As such, this interface is only available when running in an HTML5 export.\n"
+"WebXR supports a wide range of devices, from the very capable (like Valve "
+"Index, HTC Vive, Oculus Rift and Quest) down to the much less capable (like "
+"Google Cardboard, Oculus Go, GearVR, or plain smartphones).\n"
+"Since WebXR is based on Javascript, it makes extensive use of callbacks, "
+"which means that [WebXRInterface] is forced to use signals, where other AR/"
+"VR interfaces would instead use functions that return a result immediately. "
+"This makes [WebXRInterface] quite a bit more complicated to initialize than "
+"other AR/VR interfaces.\n"
+"Here's the minimum code required to start an immersive VR session:\n"
+"[codeblock]\n"
+"extends Spatial\n"
+"\n"
+"var webxr_interface\n"
+"var vr_supported = false\n"
+"\n"
+"func _ready():\n"
+" # We assume this node has a button as a child.\n"
+" # This button is for the user to consent to entering immersive VR mode.\n"
+" $Button.connect(\"pressed\", self, \"_on_Button_pressed\")\n"
+"\n"
+" webxr_interface = ARVRServer.find_interface(\"WebXR\")\n"
+" if webxr_interface:\n"
+" # WebXR uses a lot of asynchronous callbacks, so we connect to "
+"various\n"
+" # signals in order to receive them.\n"
+" webxr_interface.connect(\"session_supported\", self, "
+"\"_webxr_session_supported\")\n"
+" webxr_interface.connect(\"session_started\", self, "
+"\"_webxr_session_started\")\n"
+" webxr_interface.connect(\"session_ended\", self, "
+"\"_webxr_session_ended\")\n"
+" webxr_interface.connect(\"session_failed\", self, "
+"\"_webxr_session_failed\")\n"
+"\n"
+" # This returns immediately - our _webxr_session_supported() method\n"
+" # (which we connected to the \"session_supported\" signal above) "
+"will\n"
+" # be called sometime later to let us know if it's supported or not.\n"
+" webxr_interface.is_session_supported(\"immersive-vr\")\n"
+"\n"
+"func _webxr_session_supported(session_mode, supported):\n"
+" if session_mode == 'immersive-vr':\n"
+" vr_supported = supported\n"
+"\n"
+"func _on_Button_pressed():\n"
+" if not vr_supported:\n"
+" OS.alert(\"Your browser doesn't support VR\")\n"
+" return\n"
+"\n"
+" # We want an immersive VR session, as opposed to AR ('immersive-ar') or "
+"a\n"
+" # simple 3DoF viewer ('viewer').\n"
+" webxr_interface.session_mode = 'immersive-vr'\n"
+" # 'bounded-floor' is room scale, 'local-floor' is a standing or sitting\n"
+" # experience (it puts you 1.6m above the ground if you have 3DoF "
+"headset),\n"
+" # whereas as 'local' puts you down at the ARVROrigin.\n"
+" # This list means it'll first try to request 'bounded-floor', then\n"
+" # fallback on 'local-floor' and ultimately 'local', if nothing else is\n"
+" # supported.\n"
+" webxr_interface.requested_reference_space_types = 'bounded-floor, local-"
+"floor, local'\n"
+" # In order to use 'local-floor' or 'bounded-floor' we must also\n"
+" # mark the features as required or optional.\n"
+" webxr_interface.required_features = 'local-floor'\n"
+" webxr_interface.optional_features = 'bounded-floor'\n"
+"\n"
+" # This will return false if we're unable to even request the session,\n"
+" # however, it can still fail asynchronously later in the process, so we\n"
+" # only know if it's really succeeded or failed when our\n"
+" # _webxr_session_started() or _webxr_session_failed() methods are "
+"called.\n"
+" if not webxr_interface.initialize():\n"
+" OS.alert(\"Failed to initialize\")\n"
+" return\n"
+"\n"
+"func _webxr_session_started():\n"
+" $Button.visible = false\n"
+" # This tells Godot to start rendering to the headset.\n"
+" get_viewport().arvr = true\n"
+" # This will be the reference space type you ultimately got, out of the\n"
+" # types that you requested above. This is useful if you want the game "
+"to\n"
+" # work a little differently in 'bounded-floor' versus 'local-floor'.\n"
+" print (\"Reference space type: \" + webxr_interface."
+"reference_space_type)\n"
+"\n"
+"func _webxr_session_ended():\n"
+" $Button.visible = true\n"
+" # If the user exits immersive mode, then we tell Godot to render to the "
+"web\n"
+" # page again.\n"
+" get_viewport().arvr = false\n"
+"\n"
+"func _webxr_session_failed(message):\n"
+" OS.alert(\"Failed to initialize: \" + message)\n"
+"[/codeblock]\n"
+"There are several ways to handle \"controller\" input:\n"
+"- Using [ARVRController] nodes and their [signal ARVRController."
+"button_pressed] and [signal ARVRController.button_release] signals. This is "
+"how controllers are typically handled in AR/VR apps in Godot, however, this "
+"will only work with advanced VR controllers like the Oculus Touch or Index "
+"controllers, for example. The buttons codes are defined by [url=https://"
+"immersive-web.github.io/webxr-gamepads-module/#xr-standard-gamepad-"
+"mapping]Section 3.3 of the WebXR Gamepads Module[/url].\n"
+"- Using [method Node._unhandled_input] and [InputEventJoypadButton] or "
+"[InputEventJoypadMotion]. This works the same as normal joypads, except the "
+"[member InputEvent.device] starts at 100, so the left controller is 100 and "
+"the right controller is 101, and the button codes are also defined by "
+"[url=https://immersive-web.github.io/webxr-gamepads-module/#xr-standard-"
+"gamepad-mapping]Section 3.3 of the WebXR Gamepads Module[/url].\n"
+"- Using the [signal select], [signal squeeze] and related signals. This "
+"method will work for both advanced VR controllers, and non-traditional "
+"\"controllers\" like a tap on the screen, a spoken voice command or a button "
+"press on the device itself. The [code]controller_id[/code] passed to these "
+"signals is the same id as used in [member ARVRController.controller_id].\n"
+"You can use one or all of these methods to allow your game or app to support "
+"a wider or narrower set of devices and input methods, or to allow more "
+"advanced interations with more advanced devices."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:94
+msgid "https://www.snopekgames.com/blog/2020/how-make-vr-game-webxr-godot"
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:101
+msgid ""
+"Gets an [ARVRPositionalTracker] for the given [code]controller_id[/code].\n"
+"In the context of WebXR, a \"controller\" can be an advanced VR controller "
+"like the Oculus Touch or Index controllers, or even a tap on the screen, a "
+"spoken voice command or a button press on the device itself. When a non-"
+"traditional controller is used, interpret the position and orientation of "
+"the [ARVRPositionalTracker] as a ray pointing at the object the user wishes "
+"to interact with.\n"
+"Use this method to get information about the controller that triggered one "
+"of these signals:\n"
+"- [signal selectstart]\n"
+"- [signal select]\n"
+"- [signal selectend]\n"
+"- [signal squeezestart]\n"
+"- [signal squeeze]\n"
+"- [signal squeezestart]"
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:116
+msgid ""
+"Checks if the given [code]session_mode[/code] is supported by the user's "
+"browser.\n"
+"Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/"
+"API/XRSessionMode]WebXR's XRSessionMode[/url], including: [code]\"immersive-"
+"vr\"[/code], [code]\"immersive-ar\"[/code], and [code]\"inline\"[/code].\n"
+"This method returns nothing, instead it emits the [signal session_supported] "
+"signal with the result."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:124
+msgid ""
+"The vertices of a polygon which defines the boundaries of the user's play "
+"area.\n"
+"This will only be available if [member reference_space_type] is "
+"[code]\"bounded-floor\"[/code] and only on certain browsers and devices that "
+"support it.\n"
+"The [signal reference_space_reset] signal may indicate when this changes."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:129
+msgid ""
+"A comma-seperated list of optional features used by [method ARVRInterface."
+"initialize] when setting up the WebXR session.\n"
+"If a user's browser or device doesn't support one of the given features, "
+"initialization will continue, but you won't be able to use the requested "
+"feature.\n"
+"This doesn't have any effect on the interface when already initialized.\n"
+"Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/"
+"API/XRReferenceSpaceType]WebXR's XRReferenceSpaceType[/url]. If you want to "
+"use a particular reference space type, it must be listed in either [member "
+"required_features] or [member optional_features]."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:135
+msgid ""
+"The reference space type (from the list of requested types set in the "
+"[member requested_reference_space_types] property), that was ultimately used "
+"by [method ARVRInterface.initialize] when setting up the WebXR session.\n"
+"Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/"
+"API/XRReferenceSpaceType]WebXR's XRReferenceSpaceType[/url]. If you want to "
+"use a particular reference space type, it must be listed in either [member "
+"required_features] or [member optional_features]."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:139
+msgid ""
+"A comma-seperated list of reference space types used by [method "
+"ARVRInterface.initialize] when setting up the WebXR session.\n"
+"The reference space types are requested in order, and the first on supported "
+"by the users device or browser will be used. The [member "
+"reference_space_type] property contains the reference space type that was "
+"ultimately used.\n"
+"This doesn't have any effect on the interface when already initialized.\n"
+"Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/"
+"API/XRReferenceSpaceType]WebXR's XRReferenceSpaceType[/url]. If you want to "
+"use a particular reference space type, it must be listed in either [member "
+"required_features] or [member optional_features]."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:145
+msgid ""
+"A comma-seperated list of required features used by [method ARVRInterface."
+"initialize] when setting up the WebXR session.\n"
+"If a user's browser or device doesn't support one of the given features, "
+"initialization will fail and [signal session_failed] will be emitted.\n"
+"This doesn't have any effect on the interface when already initialized.\n"
+"Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/"
+"API/XRReferenceSpaceType]WebXR's XRReferenceSpaceType[/url]. If you want to "
+"use a particular reference space type, it must be listed in either [member "
+"required_features] or [member optional_features]."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:151
+msgid ""
+"The session mode used by [method ARVRInterface.initialize] when setting up "
+"the WebXR session.\n"
+"This doesn't have any effect on the interface when already initialized.\n"
+"Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/"
+"API/XRSessionMode]WebXR's XRSessionMode[/url], including: [code]\"immersive-"
+"vr\"[/code], [code]\"immersive-ar\"[/code], and [code]\"inline\"[/code]."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:156
+msgid ""
+"Indicates if the WebXR session's imagery is visible to the user.\n"
+"Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/"
+"API/XRVisibilityState]WebXR's XRVisibilityState[/url], including "
+"[code]\"hidden\"[/code], [code]\"visible\"[/code], and [code]\"visible-"
+"blurred\"[/code]."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:163
+msgid ""
+"Emitted to indicate that the reference space has been reset or "
+"reconfigured.\n"
+"When (or whether) this is emitted depends on the user's browser or device, "
+"but may include when the user has changed the dimensions of their play space "
+"(which you may be able to access via [member bounds_geometry]) or pressed/"
+"held a button to recenter their position.\n"
+"See [url=https://developer.mozilla.org/en-US/docs/Web/API/XRReferenceSpace/"
+"reset_event]WebXR's XRReferenceSpace reset event[/url] for more information."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:171
+msgid ""
+"Emitted after one of the \"controllers\" has finished its \"primary action"
+"\".\n"
+"Use [method get_controller] to get more information about the controller."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:178
+msgid ""
+"Emitted when one of the \"controllers\" has finished its \"primary action"
+"\".\n"
+"Use [method get_controller] to get more information about the controller."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:185
+msgid ""
+"Emitted when one of the \"controllers\" has started its \"primary action\".\n"
+"Use [method get_controller] to get more information about the controller."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:191
+msgid ""
+"Emitted when the user ends the WebXR session (which can be done using UI "
+"from the browser or device).\n"
+"At this point, you should do [code]get_viewport().arvr = false[/code] to "
+"instruct Godot to resume rendering to the screen."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:198
+msgid ""
+"Emitted by [method ARVRInterface.initialize] if the session fails to start.\n"
+"[code]message[/code] may optionally contain an error message from WebXR, or "
+"an empty string if no message is available."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:204
+msgid ""
+"Emitted by [method ARVRInterface.initialize] if the session is successfully "
+"started.\n"
+"At this point, it's safe to do [code]get_viewport().arvr = true[/code] to "
+"instruct Godot to start rendering to the AR/VR device."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:212
+msgid ""
+"Emitted by [method is_session_supported] to indicate if the given "
+"[code]session_mode[/code] is supported or not."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:218
+msgid ""
+"Emitted after one of the \"controllers\" has finished its \"primary squeeze "
+"action\".\n"
+"Use [method get_controller] to get more information about the controller."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:225
+msgid ""
+"Emitted when one of the \"controllers\" has finished its \"primary squeeze "
+"action\".\n"
+"Use [method get_controller] to get more information about the controller."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:232
+msgid ""
+"Emitted when one of the \"controllers\" has started its \"primary squeeze "
+"action\".\n"
+"Use [method get_controller] to get more information about the controller."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml:238
+msgid "Emitted when [member visibility_state] has changed."
+msgstr ""
+
+#: doc/classes/WindowDialog.xml:4
+msgid "Base class for window dialogs."
+msgstr ""
+
+#: doc/classes/WindowDialog.xml:7
+msgid ""
+"Windowdialog is the base class for all window-based dialogs. It's a by-"
+"default toplevel [Control] that draws a window decoration and allows motion "
+"and resizing."
+msgstr ""
+
+#: doc/classes/WindowDialog.xml:15
+msgid ""
+"Returns the close [TextureButton].\n"
+"[b]Warning:[/b] This is a required internal node, removing and freeing it "
+"may cause a crash. If you wish to hide it or any of its children, use their "
+"[member CanvasItem.visible] property."
+msgstr ""
+
+#: doc/classes/WindowDialog.xml:22
+msgid "If [code]true[/code], the user can resize the window."
+msgstr ""
+
+#: doc/classes/WindowDialog.xml:25
+msgid "The text displayed in the window's title bar."
+msgstr ""
+
+#: doc/classes/WindowDialog.xml:32
+msgid "The icon for the close button."
+msgstr ""
+
+#: doc/classes/WindowDialog.xml:35
+msgid "The horizontal offset of the close button."
+msgstr ""
+
+#: doc/classes/WindowDialog.xml:38
+msgid ""
+"The icon used for the close button when it's hovered with the mouse cursor."
+msgstr ""
+
+#: doc/classes/WindowDialog.xml:44
+msgid ""
+"The style for both the content background of the [WindowDialog] and the "
+"title bar. The title bar is created with a top border and an expand margin "
+"using the [code]panel[/code] stylebox."
+msgstr ""
+
+#: doc/classes/WindowDialog.xml:47
+msgid ""
+"The thickness of the border that can be dragged when scaling the window (if "
+"[member resizable] is enabled)."
+msgstr ""
+
+#: doc/classes/WindowDialog.xml:50
+msgid "The color of the title text."
+msgstr ""
+
+#: doc/classes/WindowDialog.xml:53
+msgid "The font used to draw the title."
+msgstr ""
+
+#: doc/classes/WindowDialog.xml:56
+msgid "The vertical offset of the title text."
+msgstr ""
+
+#: doc/classes/World.xml:4
+msgid "Class that has everything pertaining to a world."
+msgstr ""
+
+#: doc/classes/World.xml:7
+msgid ""
+"Class that has everything pertaining to a world. A physics space, a visual "
+"scenario and a sound space. Spatial nodes register their resources into the "
+"current world."
+msgstr ""
+
+#: doc/classes/World.xml:16
+msgid ""
+"Direct access to the world's physics 3D space state. Used for querying "
+"current and potential collisions."
+msgstr ""
+
+#: doc/classes/World.xml:19
+msgid "The World's [Environment]."
+msgstr ""
+
+#: doc/classes/World.xml:22
+msgid ""
+"The World's fallback_environment will be used if the World's [Environment] "
+"fails or is missing."
+msgstr ""
+
+#: doc/classes/World.xml:25
+msgid "The World's visual scenario."
+msgstr ""
+
+#: doc/classes/World.xml:28
+msgid "The World's physics space."
+msgstr ""
+
+#: doc/classes/World2D.xml:4
+msgid "Class that has everything pertaining to a 2D world."
+msgstr ""
+
+#: doc/classes/World2D.xml:7
+msgid ""
+"Class that has everything pertaining to a 2D world. A physics space, a "
+"visual scenario and a sound space. 2D nodes register their resources into "
+"the current 2D world."
+msgstr ""
+
+#: doc/classes/World2D.xml:16
+msgid ""
+"The [RID] of this world's canvas resource. Used by the [VisualServer] for 2D "
+"drawing."
+msgstr ""
+
+#: doc/classes/World2D.xml:19
+msgid ""
+"Direct access to the world's physics 2D space state. Used for querying "
+"current and potential collisions. When using multi-threaded physics, access "
+"is limited to [code]_physics_process(delta)[/code] in the main thread."
+msgstr ""
+
+#: doc/classes/World2D.xml:22
+msgid ""
+"The [RID] of this world's physics space resource. Used by the "
+"[Physics2DServer] for 2D physics, treating it as both a space and an area."
+msgstr ""
+
+#: doc/classes/WorldEnvironment.xml:4
+msgid ""
+"Default environment properties for the entire scene (post-processing "
+"effects, lighting and background settings)."
+msgstr ""
+
+#: doc/classes/WorldEnvironment.xml:7
+msgid ""
+"The [WorldEnvironment] node is used to configure the default [Environment] "
+"for the scene.\n"
+"The parameters defined in the [WorldEnvironment] can be overridden by an "
+"[Environment] node set on the current [Camera]. Additionally, only one "
+"[WorldEnvironment] may be instanced in a given scene at a time.\n"
+"The [WorldEnvironment] allows the user to specify default lighting "
+"parameters (e.g. ambient lighting), various post-processing effects (e.g. "
+"SSAO, DOF, Tonemapping), and how to draw the background (e.g. solid color, "
+"skybox). Usually, these are added in order to improve the realism/color "
+"balance of the scene."
+msgstr ""
+
+#: doc/classes/WorldEnvironment.xml:21
+msgid ""
+"The [Environment] resource used by this [WorldEnvironment], defining the "
+"default properties."
+msgstr ""
+
+#: doc/classes/X509Certificate.xml:4
+msgid "An X509 certificate (e.g. for SSL)."
+msgstr ""
+
+#: doc/classes/X509Certificate.xml:7
+msgid ""
+"The X509Certificate class represents an X509 certificate. Certificates can "
+"be loaded and saved like any other [Resource].\n"
+"They can be used as the server certificate in [method StreamPeerSSL."
+"accept_stream] (along with the proper [CryptoKey]), and to specify the only "
+"certificate that should be accepted when connecting to an SSL server via "
+"[method StreamPeerSSL.connect_to_stream].\n"
+"[b]Note:[/b] Not available in HTML5 exports."
+msgstr ""
+
+#: doc/classes/X509Certificate.xml:18
+msgid "Loads a certificate from [code]path[/code] (\"*.crt\" file)."
+msgstr ""
+
+#: doc/classes/X509Certificate.xml:25
+msgid ""
+"Saves a certificate to the given [code]path[/code] (should be a \"*.crt\" "
+"file)."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:4
+msgid ""
+"Low-level class for creating parsers for [url=https://en.wikipedia.org/wiki/"
+"XML]XML[/url] files."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:7
+msgid ""
+"This class can serve as base to make custom XML parsers. Since XML is a very "
+"flexible standard, this interface is low-level so it can be applied to any "
+"possible schema."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:15
+msgid "Gets the amount of attributes in the current element."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:22
+msgid ""
+"Gets the name of the attribute specified by the index in [code]idx[/code] "
+"argument."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:29
+msgid ""
+"Gets the value of the attribute specified by the index in [code]idx[/code] "
+"argument."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:35
+msgid "Gets the current line in the parsed file (currently not implemented)."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:42
+msgid ""
+"Gets the value of a certain attribute of the current element by name. This "
+"will raise an error if the element has no such attribute."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:49
+msgid ""
+"Gets the value of a certain attribute of the current element by name. This "
+"will return an empty [String] if the attribute is not found."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:55
+msgid ""
+"Gets the contents of a text node. This will raise an error in any other type "
+"of node."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:61
+msgid ""
+"Gets the name of the current element node. This will raise an error if the "
+"current node type is neither [constant NODE_ELEMENT] nor [constant "
+"NODE_ELEMENT_END]."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:67
+msgid ""
+"Gets the byte offset of the current node since the beginning of the file or "
+"buffer."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:73
+msgid ""
+"Gets the type of the current node. Compare with [enum NodeType] constants."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:80
+msgid "Check whether the current element has a certain attribute."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:86
+msgid ""
+"Check whether the current element is empty (this only works for completely "
+"empty tags, e.g. [code]<element \\>[/code])."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:93
+msgid "Opens an XML file for parsing. This returns an error code."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:100
+msgid "Opens an XML raw buffer for parsing. This returns an error code."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:106
+msgid "Reads the next node of the file. This returns an error code."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:113
+msgid ""
+"Moves the buffer cursor to a certain offset (since the beginning) and read "
+"the next node there. This returns an error code."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:119
+msgid ""
+"Skips the current section. If the node contains other elements, they will be "
+"ignored and the cursor will go to the closing of the current element."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:125
+msgid "There's no node (no file or buffer opened)."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:128
+msgid "Element (tag)."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:131
+msgid "End of element."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:134
+msgid "Text node."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:137
+msgid "Comment node."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:140
+msgid "CDATA content."
+msgstr ""
+
+#: doc/classes/XMLParser.xml:143
+msgid "Unknown node."
+msgstr ""
+
+#: doc/classes/YSort.xml:4
+msgid "Sort all child nodes based on their Y positions."
+msgstr ""
+
+#: doc/classes/YSort.xml:7
+msgid ""
+"Sort all child nodes based on their Y positions. The child node must inherit "
+"from [CanvasItem] for it to be sorted. Nodes that have a higher Y position "
+"will be drawn later, so they will appear on top of nodes that have a lower Y "
+"position.\n"
+"Nesting of YSort nodes is possible. Children YSort nodes will be sorted in "
+"the same space as the parent YSort, allowing to better organize a scene or "
+"divide it in multiple ones, yet keep the unique sorting."
+msgstr ""
+
+#: doc/classes/YSort.xml:16
+msgid ""
+"If [code]true[/code], child nodes are sorted, otherwise sorting is disabled."
+msgstr ""
+"Kung [code]true[/code], ang mga child nodes ay inaayos, kung hindi ang pag-"
+"so-sort ay hindi pinapagana."
diff --git a/doc/translations/tr.po b/doc/translations/tr.po
index 51f3ec242d..a7c62d6cf1 100644
--- a/doc/translations/tr.po
+++ b/doc/translations/tr.po
@@ -15,12 +15,14 @@
# Cem Eren Fukara <cefukara@hotmail.com>, 2021.
# The Recon <reconmovyie@gmail.com>, 2021.
# ali aydın <alimxaydin@gmail.com>, 2021.
+# yigithan <yigithanermet38@gmail.com>, 2021.
+# Yusuf Yavuzyigit <yusufyavuzyigit25@gmail.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2021-05-27 12:33+0000\n"
-"Last-Translator: ali aydın <alimxaydin@gmail.com>\n"
+"PO-Revision-Date: 2021-11-17 12:59+0000\n"
+"Last-Translator: Yusuf Yavuzyigit <yusufyavuzyigit25@gmail.com>\n"
"Language-Team: Turkish <https://hosted.weblate.org/projects/godot-engine/"
"godot-class-reference/tr/>\n"
"Language: tr\n"
@@ -28,45 +30,45 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.7-dev\n"
+"X-Generator: Weblate 4.9.1-dev\n"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Description"
msgstr "Açıklama"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Tutorials"
-msgstr "Öğretici Örnekler"
+msgstr "Öğreticiler"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Properties"
msgstr "Özellikler"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Methods"
-msgstr "Metotlar"
+msgstr "Metodlar"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Theme Properties"
msgstr "Tema Özellikleri"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Signals"
-msgstr "Sinyaller"
+msgstr "sinyaller"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Enumerations"
msgstr "Numaralandırmalar"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Constants"
msgstr "Sabitler"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Property Descriptions"
msgstr "Özellik Açıklamaları"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Method Descriptions"
msgstr "Yöntem Açıklamaları"
@@ -125,7 +127,6 @@ msgstr ""
"Desteklenen renk adları,[Color]'de tanımlanan sabitlerle aynıdır."
#: modules/gdscript/doc_classes/@GDScript.xml:45
-#, fuzzy
msgid ""
"Returns the absolute value of parameter [code]s[/code] (i.e. positive "
"value).\n"
@@ -135,12 +136,10 @@ msgid ""
msgstr ""
"[code]s[/code] parametresinin mutlak değerini (pozitif değerini) döndürür.\n"
"[codeblock]\n"
-"# a'nın döndüreceği değer 1'dir\n"
-"a = abs(-1)\n"
+"a = abs(-1) # a'nın döndüreceği değer 1'dir\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:55
-#, fuzzy
msgid ""
"Returns the arc cosine of [code]s[/code] in radians. Use to get the angle of "
"cosine [code]s[/code]. [code]s[/code] must be between [code]-1.0[/code] and "
@@ -152,14 +151,15 @@ msgid ""
"[/codeblock]"
msgstr ""
"[code]s[/code] değerinin radyan türünde cosinüsünü döndürür. [code]s[/code] "
-"cosinüs değerinin açısı elde etmek için kullanılır.\n"
+"cosinüs değerinin açısı elde etmek için kullanılır. [code]s[/code] "
+"[code]-1.0[/code] ile [code]1.0[/code] (dahil) arasında olmalıdır aksi halde "
+"[method acos], [constant NAN] dödürür.\n"
"[codeblock]\n"
-"# c 0.523599 ya da rad2deg(s) ile dönüştürülürse 30 olur\n"
+"# c rad2deg(s) ile dönüştürülürse 0.523599 ya da 30 derece olur\n"
"c = acos(0.866025)\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:66
-#, fuzzy
msgid ""
"Returns the arc sine of [code]s[/code] in radians. Use to get the angle of "
"sine [code]s[/code]. [code]s[/code] must be between [code]-1.0[/code] and "
@@ -171,9 +171,11 @@ msgid ""
"[/codeblock]"
msgstr ""
"[code]s[/code] değerinin radyan cinsinden arcsinüsünü döndürür. [code]s[/"
-"code] değerinin açısını bulmak için kullanılır.\n"
+"code] değerinin açısını bulmak için kullanılır. [code]s[/code] [code]-1.0[/"
+"code] ile [code]1.0[/code] (dahil) arasında olmalıdır aksi halde [method "
+"asin], [constant NAN] dödürür.\n"
"[codeblock]\n"
-"# s 0.523599 ya da rad2deg(s) ile dönüştürülürse dereceye 30\n"
+"# s rad2deg(s) ile dönüştürülürse 0.523599 ya da 30 derece olur\n"
"s = asin(0.5)\n"
"[/codeblock]"
@@ -300,12 +302,13 @@ msgid ""
"[/codeblock]\n"
"See also [method floor], [method round], [method stepify], and [int]."
msgstr ""
-"[code]s[/code] deperini yukarı yuvarlar (pozitif sonsuzluğa doğru), [code]s[/"
+"[code]s[/code] değerini yukarı yuvarlar (pozitif sonsuzluğa doğru), [code]s[/"
"code] değerinden büyük olan en küçük tam sayıyı döndürür.\n"
"[codeblock]\n"
-"i = ceil(1.45) # i 2 olur\n"
-"i = ceil(1.001) # i 2 olur\n"
-"[/codeblock]"
+"i = ceil(1.45) # i 2.0 olur\n"
+"i = ceil(1.001) # i 2.0 olur\n"
+"[/codeblock]\n"
+"Ayrıca bakınız [method floor], [method round], [method stepify] ve [int]."
#: modules/gdscript/doc_classes/@GDScript.xml:147
msgid ""
@@ -328,7 +331,6 @@ msgstr ""
"Bu [method ord]'un tersidir."
#: modules/gdscript/doc_classes/@GDScript.xml:162
-#, fuzzy
msgid ""
"Clamps [code]value[/code] and returns a value not less than [code]min[/code] "
"and not more than [code]max[/code].\n"
@@ -339,15 +341,11 @@ msgid ""
"[/codeblock]"
msgstr ""
"[code]değer[/code]'i bir aralığa sığdırır ve [code]min[/code]'den büyük ve "
-"[code]maks[/code]'den küçük değer döndürür.\n"
+"[code]maks[/code]'dan küçük bir değer döndürür.\n"
"[codeblock]\n"
-"speed = 1000\n"
-"# a 20 olur\n"
-"a = clamp(speed, 1, 20)\n"
-"\n"
-"speed = -10\n"
-"# a 1 olur\n"
-"a = clamp(speed, 1, 20)\n"
+"a = clamp(1000, 1, 20) # a 20'dir\n"
+"a = clamp(-10, 1, 20) # a 1'dir\n"
+"a = clamp(15, 1, 20) # a 15'dir\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:175
@@ -375,7 +373,6 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:190
-#, fuzzy
msgid ""
"Returns the cosine of angle [code]s[/code] in radians.\n"
"[codeblock]\n"
@@ -383,13 +380,13 @@ msgid ""
"a = cos(PI) # a is -1.0\n"
"[/codeblock]"
msgstr ""
-"Radyan cinsinden [code]s[/code] açısının sinüs değerini döndürür.\n"
+"[code]s[/code] açısının radyan cinsinden kosinüs değerini döndürür.\n"
"[codeblock]\n"
-"sin(0.523599) # sonuç: 0.5\n"
+"a = cos(TAU) # a 1.0'dır\n"
+"a = cos(PI) # a -1.0'dır\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:201
-#, fuzzy
msgid ""
"Returns the hyperbolic cosine of [code]s[/code] in radians.\n"
"[codeblock]\n"
@@ -398,8 +395,7 @@ msgid ""
msgstr ""
"[code]s[/code] değerinin hiperbolik kosinüsünü radyan cinsinden döndürür.\n"
"[codeblock]\n"
-"# 1.543081 yazdırır\n"
-"print(cosh(1))\n"
+"print(cosh(1)) # 1.543081 yazdırır\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:211
@@ -2094,9 +2090,8 @@ msgid "The [Engine] singleton."
msgstr "[Engine] tekil nesnesi."
#: doc/classes/@GlobalScope.xml:31
-#, fuzzy
msgid "The [Geometry] singleton."
-msgstr "[Geometry2D] tekil nesnesi."
+msgstr "[Geometry] tekil nesnesi."
#: doc/classes/@GlobalScope.xml:34
msgid "The [IP] singleton."
@@ -2159,7 +2154,7 @@ msgstr "[PhysicsServer2D] tekil nesnesi."
#: doc/classes/@GlobalScope.xml:72
msgid "The [ProjectSettings] singleton."
-msgstr ""
+msgstr "[ProjectSettings] tekil nesnesi."
#: doc/classes/@GlobalScope.xml:75
msgid "The [ResourceLoader] singleton."
@@ -4372,112 +4367,121 @@ msgid ""
msgstr ""
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr ""
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
msgstr ""
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
msgstr ""
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
msgstr ""
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr ""
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr ""
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr ""
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
msgstr ""
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr ""
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
msgstr ""
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
msgstr ""
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr ""
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
"positive.\n"
@@ -5556,7 +5560,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -6992,21 +6996,25 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
#: doc/classes/Area.xml:17
msgid ""
-"Returns a list of intersecting [Area]s. For performance reasons (collisions "
-"are all processed at the same time) this list is modified once during the "
-"physics step, not immediately after objects are moved. Consider using "
-"signals instead."
+"Returns a list of intersecting [Area]s. The overlapping area's [member "
+"CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:23
+#: doc/classes/Area.xml:24
msgid ""
-"Returns a list of intersecting [PhysicsBody]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody]s. The overlapping body's "
+"[member CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:30
+#: doc/classes/Area.xml:32
msgid ""
"If [code]true[/code], the given area overlaps the Area.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -7014,7 +7022,7 @@ msgid ""
"physics step. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:38
+#: doc/classes/Area.xml:40
msgid ""
"If [code]true[/code], the given physics body overlaps the Area.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -7025,7 +7033,7 @@ msgid ""
"their tiles with collision shapes as a virtual physics body)."
msgstr ""
-#: doc/classes/Area.xml:46
+#: doc/classes/Area.xml:48
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
"velocity lost per second.\n"
@@ -7033,41 +7041,41 @@ msgid ""
"details about damping."
msgstr ""
-#: doc/classes/Area.xml:50 doc/classes/Area2D.xml:52
+#: doc/classes/Area.xml:52 doc/classes/Area2D.xml:54
msgid "The name of the area's audio bus."
msgstr ""
-#: doc/classes/Area.xml:53 doc/classes/Area2D.xml:55
+#: doc/classes/Area.xml:55 doc/classes/Area2D.xml:57
msgid ""
"If [code]true[/code], the area's audio bus overrides the default audio bus."
msgstr ""
-#: doc/classes/Area.xml:56
+#: doc/classes/Area.xml:58
msgid ""
"The area's gravity intensity (in meters per second squared). This value "
"multiplies the gravity vector. This is useful to alter the force of gravity "
"without altering its direction."
msgstr ""
-#: doc/classes/Area.xml:59 doc/classes/Area2D.xml:61
+#: doc/classes/Area.xml:61 doc/classes/Area2D.xml:63
msgid ""
"The falloff factor for point gravity. The greater the value, the faster "
"gravity decreases with distance."
msgstr ""
-#: doc/classes/Area.xml:62 doc/classes/Area2D.xml:64
+#: doc/classes/Area.xml:64 doc/classes/Area2D.xml:66
msgid ""
"If [code]true[/code], gravity is calculated from a point (set via [member "
"gravity_vec]). See also [member space_override]."
msgstr ""
-#: doc/classes/Area.xml:65 doc/classes/Area2D.xml:67
+#: doc/classes/Area.xml:67 doc/classes/Area2D.xml:69
msgid ""
"The area's gravity vector (not normalized). If gravity is a point (see "
"[member gravity_point]), this will be the point of attraction."
msgstr ""
-#: doc/classes/Area.xml:68
+#: doc/classes/Area.xml:70
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
"velocity lost per second.\n"
@@ -7075,61 +7083,61 @@ msgid ""
"about damping."
msgstr ""
-#: doc/classes/Area.xml:72 doc/classes/Area2D.xml:74
+#: doc/classes/Area.xml:74 doc/classes/Area2D.xml:76
msgid "If [code]true[/code], other monitoring areas can detect this area."
msgstr ""
-#: doc/classes/Area.xml:75 doc/classes/Area2D.xml:77
+#: doc/classes/Area.xml:77 doc/classes/Area2D.xml:79
msgid ""
"If [code]true[/code], the area detects bodies or areas entering and exiting "
"it."
msgstr ""
-#: doc/classes/Area.xml:78 doc/classes/Area2D.xml:80
+#: doc/classes/Area.xml:80 doc/classes/Area2D.xml:82
msgid "The area's priority. Higher priority areas are processed first."
msgstr ""
-#: doc/classes/Area.xml:81
+#: doc/classes/Area.xml:83
msgid ""
"The degree to which this area applies reverb to its associated audio. Ranges "
"from [code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
msgstr ""
-#: doc/classes/Area.xml:84
+#: doc/classes/Area.xml:86
msgid "If [code]true[/code], the area applies reverb to its associated audio."
msgstr ""
-#: doc/classes/Area.xml:87
+#: doc/classes/Area.xml:89
msgid "The reverb bus name to use for this area's associated audio."
msgstr ""
-#: doc/classes/Area.xml:90
+#: doc/classes/Area.xml:92
msgid ""
"The degree to which this area's reverb is a uniform effect. Ranges from "
"[code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
msgstr ""
-#: doc/classes/Area.xml:93 doc/classes/Area2D.xml:83
+#: doc/classes/Area.xml:95 doc/classes/Area2D.xml:85
msgid ""
"Override mode for gravity and damping calculations within this area. See "
"[enum SpaceOverride] for possible values."
msgstr ""
-#: doc/classes/Area.xml:100
+#: doc/classes/Area.xml:102
msgid ""
"Emitted when another Area enters this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
-#: doc/classes/Area.xml:107
+#: doc/classes/Area.xml:109
msgid ""
"Emitted when another Area exits this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
-#: doc/classes/Area.xml:117 doc/classes/Area.xml:130
+#: doc/classes/Area.xml:119 doc/classes/Area.xml:132
msgid ""
"Emitted when one of another Area's [Shape]s enters one of this Area's "
"[Shape]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -7144,7 +7152,7 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:140
+#: doc/classes/Area.xml:142
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] enters this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -7153,7 +7161,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:147
+#: doc/classes/Area.xml:149
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] exits this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -7162,7 +7170,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:157 doc/classes/Area.xml:170
+#: doc/classes/Area.xml:159 doc/classes/Area.xml:172
msgid ""
"Emitted when one of a [PhysicsBody] or [GridMap]'s [Shape]s enters one of "
"this Area's [Shape]s. Requires [member monitoring] to be set to [code]true[/"
@@ -7179,29 +7187,29 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:180 doc/classes/Area2D.xml:170
+#: doc/classes/Area.xml:182 doc/classes/Area2D.xml:172
msgid "This area does not affect gravity/damping."
msgstr ""
-#: doc/classes/Area.xml:183 doc/classes/Area2D.xml:173
+#: doc/classes/Area.xml:185 doc/classes/Area2D.xml:175
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order)."
msgstr ""
-#: doc/classes/Area.xml:186 doc/classes/Area2D.xml:176
+#: doc/classes/Area.xml:188 doc/classes/Area2D.xml:178
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order), ignoring any lower priority areas."
msgstr ""
-#: doc/classes/Area.xml:189 doc/classes/Area2D.xml:179
+#: doc/classes/Area.xml:191 doc/classes/Area2D.xml:181
msgid ""
"This area replaces any gravity/damping, even the defaults, ignoring any "
"lower priority areas."
msgstr ""
-#: doc/classes/Area.xml:192 doc/classes/Area2D.xml:182
+#: doc/classes/Area.xml:194 doc/classes/Area2D.xml:184
msgid ""
"This area replaces any gravity/damping calculated so far (in [member "
"priority] order), but keeps calculating the rest of the areas."
@@ -7240,21 +7248,25 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
#: doc/classes/Area2D.xml:19
msgid ""
-"Returns a list of intersecting [Area2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [Area2D]s. The overlapping area's [member "
+"CollisionObject2D.collision_layer] must be part of this area's [member "
+"CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:25
+#: doc/classes/Area2D.xml:26
msgid ""
-"Returns a list of intersecting [PhysicsBody2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody2D]s. The overlapping body's "
+"[member CollisionObject2D.collision_layer] must be part of this area's "
+"[member CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:32
+#: doc/classes/Area2D.xml:34
msgid ""
"If [code]true[/code], the given area overlaps the Area2D.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -7262,7 +7274,7 @@ msgid ""
"the physics step. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:40
+#: doc/classes/Area2D.xml:42
msgid ""
"If [code]true[/code], the given physics body overlaps the Area2D.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -7273,7 +7285,7 @@ msgid ""
"register their tiles with collision shapes as a virtual physics body)."
msgstr ""
-#: doc/classes/Area2D.xml:48
+#: doc/classes/Area2D.xml:50
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
"velocity lost per second.\n"
@@ -7281,14 +7293,14 @@ msgid ""
"details about damping."
msgstr ""
-#: doc/classes/Area2D.xml:58
+#: doc/classes/Area2D.xml:60
msgid ""
"The area's gravity intensity (in pixels per second squared). This value "
"multiplies the gravity vector. This is useful to alter the force of gravity "
"without altering its direction."
msgstr ""
-#: doc/classes/Area2D.xml:70
+#: doc/classes/Area2D.xml:72
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
"velocity lost per second.\n"
@@ -7296,21 +7308,21 @@ msgid ""
"about damping."
msgstr ""
-#: doc/classes/Area2D.xml:90
+#: doc/classes/Area2D.xml:92
msgid ""
"Emitted when another Area2D enters this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-#: doc/classes/Area2D.xml:97
+#: doc/classes/Area2D.xml:99
msgid ""
"Emitted when another Area2D exits this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-#: doc/classes/Area2D.xml:107
+#: doc/classes/Area2D.xml:109
msgid ""
"Emitted when one of another Area2D's [Shape2D]s enters one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -7325,7 +7337,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:120
+#: doc/classes/Area2D.xml:122
msgid ""
"Emitted when one of another Area2D's [Shape2D]s exits one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -7340,7 +7352,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:130
+#: doc/classes/Area2D.xml:132
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] enters this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -7349,7 +7361,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:137
+#: doc/classes/Area2D.xml:139
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] exits this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -7358,7 +7370,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:147
+#: doc/classes/Area2D.xml:149
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s enters one "
"of this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -7377,7 +7389,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:160
+#: doc/classes/Area2D.xml:162
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s exits one of "
"this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -10948,42 +10960,47 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
-"no save path is provided it will try to match the path from the current "
+"no root node is provided, parent of this node will be used as root instead. "
+"If no save path is provided it will try to match the path from the current "
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -10997,62 +11014,62 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
msgid "The rotation of the baked custom sky."
msgstr ""
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -11060,35 +11077,35 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -11096,13 +11113,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -11114,66 +11131,78 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr ""
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
msgid "Baking was successful."
msgstr ""
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr ""
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
#, fuzzy
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr "Verilen bir değerin ark-tanjantını döndürür."
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr ""
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:133
+#: doc/classes/BakedLightmap.xml:132
+msgid ""
+"Returns if lightmapper can't be created. Unless you are using a custom "
+"lightmapper, please report this as bug."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:135
+msgid ""
+"There is no root node to start baking from. Either provide [code]from_node[/"
+"code] argument or attach this node to a parent that should be used as root."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:136
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:139
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:142
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -11629,8 +11658,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -12018,26 +12050,33 @@ msgid "Text [Color] used when the [Button] is disabled."
msgstr ""
#: doc/classes/Button.xml:77
-msgid "Text [Color] used when the [Button] is being hovered."
+msgid ""
+"Text [Color] used when the [Button] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/Button.xml:80
-msgid "Text [Color] used when the [Button] is being pressed."
+msgid "Text [Color] used when the [Button] is being hovered."
msgstr ""
#: doc/classes/Button.xml:83
-msgid "[StyleBox] used when the [Button] is being hovered."
+msgid "Text [Color] used when the [Button] is being pressed."
msgstr ""
#: doc/classes/Button.xml:86
-msgid "The horizontal space between [Button]'s icon and text."
+msgid "[StyleBox] used when the [Button] is being hovered."
msgstr ""
#: doc/classes/Button.xml:89
-msgid "Default [StyleBox] for the [Button]."
+msgid "The horizontal space between [Button]'s icon and text."
msgstr ""
#: doc/classes/Button.xml:92
+msgid "Default [StyleBox] for the [Button]."
+msgstr ""
+
+#: doc/classes/Button.xml:95
msgid "[StyleBox] used when the [Button] is being pressed."
msgstr ""
@@ -13512,80 +13551,96 @@ msgstr ""
msgid "The check icon to display when the [CheckBox] is checked."
msgstr ""
-#: doc/classes/CheckBox.xml:30
+#: doc/classes/CheckBox.xml:28
+msgid "The check icon to display when the [CheckBox] is checked and disabled."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:31
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is disabled."
msgstr ""
-#: doc/classes/CheckBox.xml:33
+#: doc/classes/CheckBox.xml:34
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is focused."
msgstr ""
-#: doc/classes/CheckBox.xml:36
+#: doc/classes/CheckBox.xml:37
msgid "The [Font] to use for the [CheckBox] text."
msgstr ""
-#: doc/classes/CheckBox.xml:39
+#: doc/classes/CheckBox.xml:40
msgid "The [CheckBox] text's font color."
msgstr ""
-#: doc/classes/CheckBox.xml:42
+#: doc/classes/CheckBox.xml:43
msgid "The [CheckBox] text's font color when it's disabled."
msgstr ""
-#: doc/classes/CheckBox.xml:45
+#: doc/classes/CheckBox.xml:46
+msgid ""
+"The [CheckBox] text's font color when it's focused. Only replaces the normal "
+"text color of the checkbox. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:49
msgid "The [CheckBox] text's font color when it's hovered."
msgstr ""
-#: doc/classes/CheckBox.xml:48
+#: doc/classes/CheckBox.xml:52
msgid "The [CheckBox] text's font color when it's hovered and pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:51
+#: doc/classes/CheckBox.xml:55
msgid "The [CheckBox] text's font color when it's pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:54
+#: doc/classes/CheckBox.xml:58
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered."
msgstr ""
-#: doc/classes/CheckBox.xml:57
+#: doc/classes/CheckBox.xml:61
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered and "
"pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:60
+#: doc/classes/CheckBox.xml:64
msgid "The separation between the check icon and the text (in pixels)."
msgstr ""
-#: doc/classes/CheckBox.xml:63 doc/classes/CheckButton.xml:58
+#: doc/classes/CheckBox.xml:67 doc/classes/CheckButton.xml:61
msgid "The [StyleBox] to display as a background."
msgstr ""
-#: doc/classes/CheckBox.xml:66
+#: doc/classes/CheckBox.xml:70
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:69
+#: doc/classes/CheckBox.xml:73
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is checked."
msgstr ""
-#: doc/classes/CheckBox.xml:74
+#: doc/classes/CheckBox.xml:78
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is unchecked."
msgstr ""
-#: doc/classes/CheckBox.xml:79
+#: doc/classes/CheckBox.xml:83
msgid "The check icon to display when the [CheckBox] is unchecked."
msgstr ""
+#: doc/classes/CheckBox.xml:86
+msgid ""
+"The check icon to display when the [CheckBox] is unchecked and disabled."
+msgstr ""
+
#: doc/classes/CheckButton.xml:4
msgid "Checkable button. See also [CheckBox]."
msgstr ""
@@ -13629,49 +13684,56 @@ msgid "The [CheckButton] text's font color when it's disabled."
msgstr ""
#: doc/classes/CheckButton.xml:40
-msgid "The [CheckButton] text's font color when it's hovered."
+msgid ""
+"The [CheckButton] text's font color when it's focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/CheckButton.xml:43
-msgid "The [CheckButton] text's font color when it's hovered and pressed."
+msgid "The [CheckButton] text's font color when it's hovered."
msgstr ""
#: doc/classes/CheckButton.xml:46
-msgid "The [CheckButton] text's font color when it's pressed."
+msgid "The [CheckButton] text's font color when it's hovered and pressed."
msgstr ""
#: doc/classes/CheckButton.xml:49
+msgid "The [CheckButton] text's font color when it's pressed."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:52
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered."
msgstr ""
-#: doc/classes/CheckButton.xml:52
+#: doc/classes/CheckButton.xml:55
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered "
"and pressed."
msgstr ""
-#: doc/classes/CheckButton.xml:55
+#: doc/classes/CheckButton.xml:58
msgid "The separation between the toggle icon and the text (in pixels)."
msgstr ""
-#: doc/classes/CheckButton.xml:61
+#: doc/classes/CheckButton.xml:64
msgid "The icon to display when the [CheckButton] is unchecked."
msgstr ""
-#: doc/classes/CheckButton.xml:64
+#: doc/classes/CheckButton.xml:67
msgid "The icon to display when the [CheckButton] is unchecked and disabled."
msgstr ""
-#: doc/classes/CheckButton.xml:67
+#: doc/classes/CheckButton.xml:70
msgid "The icon to display when the [CheckButton] is checked."
msgstr ""
-#: doc/classes/CheckButton.xml:70
+#: doc/classes/CheckButton.xml:73
msgid "The icon to display when the [CheckButton] is checked and disabled."
msgstr ""
-#: doc/classes/CheckButton.xml:73
+#: doc/classes/CheckButton.xml:76
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is pressed."
msgstr ""
@@ -15446,26 +15508,33 @@ msgid "Text [Color] used when the [ColorPickerButton] is disabled."
msgstr ""
#: doc/classes/ColorPickerButton.xml:80
-msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
+msgid ""
+"Text [Color] used when the [ColorPickerButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/ColorPickerButton.xml:83
-msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
+msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
msgstr ""
#: doc/classes/ColorPickerButton.xml:86
-msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
+msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
msgstr ""
#: doc/classes/ColorPickerButton.xml:89
-msgid "The horizontal space between [ColorPickerButton]'s icon and text."
+msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
msgstr ""
#: doc/classes/ColorPickerButton.xml:92
-msgid "Default [StyleBox] for the [ColorPickerButton]."
+msgid "The horizontal space between [ColorPickerButton]'s icon and text."
msgstr ""
#: doc/classes/ColorPickerButton.xml:95
+msgid "Default [StyleBox] for the [ColorPickerButton]."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:98
msgid "[StyleBox] used when the [ColorPickerButton] is being pressed."
msgstr ""
@@ -20699,7 +20768,8 @@ msgid ""
"get_resource_type]. They may optionally specify some import presets that "
"affect the import process. EditorImportPlugins are responsible for creating "
"the resources and saving them in the [code].import[/code] directory (see "
-"[member ProjectSettings.application/config/project_data_dir_name]).\n"
+"[member ProjectSettings.application/config/"
+"use_hidden_project_data_directory]).\n"
"Below is an example EditorImportPlugin that imports a [Mesh] from a file "
"with the extension \".special\" or \".spec\":\n"
"[codeblock]\n"
@@ -20826,7 +20896,7 @@ msgstr ""
msgid ""
"Gets the extension used to save this resource in the [code].import[/code] "
"directory (see [member ProjectSettings.application/config/"
-"project_data_dir_name])."
+"use_hidden_project_data_directory])."
msgstr ""
#: doc/classes/EditorImportPlugin.xml:130
@@ -21863,8 +21933,11 @@ msgstr ""
msgid "Emitted when the value of the edited resource was changed."
msgstr ""
-#: doc/classes/EditorResourcePicker.xml:89
-msgid "Emitted when the resource value was set and user clicked to edit it."
+#: doc/classes/EditorResourcePicker.xml:90
+msgid ""
+"Emitted when the resource value was set and user clicked to edit it. When "
+"[code]edit[/code] is [code]true[/code], the signal was caused by the context "
+"menu \"Edit\" option."
msgstr ""
#: doc/classes/EditorResourcePreview.xml:4
@@ -25618,21 +25691,32 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html"
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -25641,14 +25725,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -25658,82 +25746,82 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
#, fuzzy
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
msgstr ""
"Eğer [code]true[/code] ise düğümler sıraya sokulur, yoksa sıraya sokulmaz."
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
msgstr ""
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr ""
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -28485,16 +28573,18 @@ msgstr ""
#: doc/classes/Image.xml:436
msgid ""
"OpenGL texture format [code]RED[/code] with a single component and a "
-"bitdepth of 8."
+"bitdepth of 8.\n"
+"[b]Note:[/b] When using the GLES2 backend, this uses the alpha channel "
+"instead of the red channel for storage."
msgstr ""
-#: doc/classes/Image.xml:439
+#: doc/classes/Image.xml:440
msgid ""
"OpenGL texture format [code]RG[/code] with two components and a bitdepth of "
"8 for each."
msgstr ""
-#: doc/classes/Image.xml:442
+#: doc/classes/Image.xml:443
msgid ""
"OpenGL texture format [code]RGB[/code] with three components, each with a "
"bitdepth of 8.\n"
@@ -28502,7 +28592,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:446
+#: doc/classes/Image.xml:447
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 8.\n"
@@ -28510,73 +28600,73 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:450
+#: doc/classes/Image.xml:451
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 4."
msgstr ""
-#: doc/classes/Image.xml:453
+#: doc/classes/Image.xml:454
msgid ""
"OpenGL texture format [code]GL_RGB5_A1[/code] where 5 bits of depth for each "
"component of RGB and one bit for alpha."
msgstr ""
-#: doc/classes/Image.xml:456
+#: doc/classes/Image.xml:457
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 32-"
"bit floating-point value."
msgstr ""
-#: doc/classes/Image.xml:459
+#: doc/classes/Image.xml:460
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:462
+#: doc/classes/Image.xml:463
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:465
+#: doc/classes/Image.xml:466
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:468
+#: doc/classes/Image.xml:469
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 16-"
"bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:471
+#: doc/classes/Image.xml:472
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:474
+#: doc/classes/Image.xml:475
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:477
+#: doc/classes/Image.xml:478
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:480
+#: doc/classes/Image.xml:481
msgid ""
"A special OpenGL texture format where the three color components have 9 bits "
"of precision and all three share a single 5-bit exponent."
msgstr ""
-#: doc/classes/Image.xml:483
+#: doc/classes/Image.xml:484
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 1, and is the smallest variation "
@@ -28586,7 +28676,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:487
+#: doc/classes/Image.xml:488
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 2, and color data is interpreted "
@@ -28596,7 +28686,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:491
+#: doc/classes/Image.xml:492
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format also known as Block Compression 3 or BC3 that contains 64 "
@@ -28607,7 +28697,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:495
+#: doc/classes/Image.xml:496
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -28615,7 +28705,7 @@ msgid ""
"DXT5 uses for the alpha channel."
msgstr ""
-#: doc/classes/Image.xml:498
+#: doc/classes/Image.xml:499
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -28623,7 +28713,7 @@ msgid ""
"algorithm that DXT5 uses for the alpha channel."
msgstr ""
-#: doc/classes/Image.xml:501
+#: doc/classes/Image.xml:502
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned normalized "
@@ -28632,21 +28722,21 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:505
+#: doc/classes/Image.xml:506
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with signed floating-point "
"RGB components."
msgstr ""
-#: doc/classes/Image.xml:508
+#: doc/classes/Image.xml:509
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned floating-point "
"RGB components."
msgstr ""
-#: doc/classes/Image.xml:511
+#: doc/classes/Image.xml:512
msgid ""
"Texture format used on PowerVR-supported mobile platforms, uses 2-bit color "
"depth with no alpha. More information can be found [url=https://en.wikipedia."
@@ -28655,25 +28745,25 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:515
+#: doc/classes/Image.xml:516
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with an "
"alpha component."
msgstr ""
-#: doc/classes/Image.xml:518
+#: doc/classes/Image.xml:519
msgid ""
"Similar to [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with 4-"
"bit color depth and no alpha."
msgstr ""
-#: doc/classes/Image.xml:521
+#: doc/classes/Image.xml:522
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC4[/url], but with an "
"alpha component."
msgstr ""
-#: doc/classes/Image.xml:524
+#: doc/classes/Image.xml:525
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC1]Ericsson Texture Compression format 1[/"
@@ -28681,7 +28771,7 @@ msgid ""
"standard. This format cannot store an alpha channel."
msgstr ""
-#: doc/classes/Image.xml:527
+#: doc/classes/Image.xml:528
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28689,7 +28779,7 @@ msgid ""
"unsigned data."
msgstr ""
-#: doc/classes/Image.xml:530
+#: doc/classes/Image.xml:531
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28697,7 +28787,7 @@ msgid ""
"channel of signed data."
msgstr ""
-#: doc/classes/Image.xml:533
+#: doc/classes/Image.xml:534
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28705,7 +28795,7 @@ msgid ""
"of unsigned data."
msgstr ""
-#: doc/classes/Image.xml:536
+#: doc/classes/Image.xml:537
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28713,7 +28803,7 @@ msgid ""
"channels of signed data."
msgstr ""
-#: doc/classes/Image.xml:539
+#: doc/classes/Image.xml:540
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28723,7 +28813,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:543
+#: doc/classes/Image.xml:544
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28733,7 +28823,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:547
+#: doc/classes/Image.xml:548
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28744,31 +28834,31 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:551
+#: doc/classes/Image.xml:552
msgid "Represents the size of the [enum Format] enum."
msgstr ""
-#: doc/classes/Image.xml:554
+#: doc/classes/Image.xml:555
msgid ""
"Performs nearest-neighbor interpolation. If the image is resized, it will be "
"pixelated."
msgstr ""
-#: doc/classes/Image.xml:557
+#: doc/classes/Image.xml:558
msgid ""
"Performs bilinear interpolation. If the image is resized, it will be blurry. "
"This mode is faster than [constant INTERPOLATE_CUBIC], but it results in "
"lower quality."
msgstr ""
-#: doc/classes/Image.xml:560
+#: doc/classes/Image.xml:561
msgid ""
"Performs cubic interpolation. If the image is resized, it will be blurry. "
"This mode often gives better results compared to [constant "
"INTERPOLATE_BILINEAR], at the cost of being slower."
msgstr ""
-#: doc/classes/Image.xml:563
+#: doc/classes/Image.xml:564
msgid ""
"Performs bilinear separately on the two most-suited mipmap levels, then "
"linearly interpolates between them.\n"
@@ -28783,55 +28873,55 @@ msgid ""
"a new set will be generated for the resulting image."
msgstr ""
-#: doc/classes/Image.xml:570
+#: doc/classes/Image.xml:571
msgid ""
"Performs Lanczos interpolation. This is the slowest image resizing mode, but "
"it typically gives the best results, especially when downscalng images."
msgstr ""
-#: doc/classes/Image.xml:573
+#: doc/classes/Image.xml:574
msgid "Image does not have alpha."
msgstr ""
-#: doc/classes/Image.xml:576
+#: doc/classes/Image.xml:577
msgid "Image stores alpha in a single bit."
msgstr ""
-#: doc/classes/Image.xml:579
+#: doc/classes/Image.xml:580
msgid "Image uses alpha."
msgstr ""
-#: doc/classes/Image.xml:582
+#: doc/classes/Image.xml:583
msgid "Use S3TC compression."
msgstr ""
-#: doc/classes/Image.xml:585
+#: doc/classes/Image.xml:586
msgid "Use PVRTC2 compression."
msgstr ""
-#: doc/classes/Image.xml:588
+#: doc/classes/Image.xml:589
msgid "Use PVRTC4 compression."
msgstr ""
-#: doc/classes/Image.xml:591
+#: doc/classes/Image.xml:592
msgid "Use ETC compression."
msgstr ""
-#: doc/classes/Image.xml:594
+#: doc/classes/Image.xml:595
msgid "Use ETC2 compression."
msgstr ""
-#: doc/classes/Image.xml:597
+#: doc/classes/Image.xml:598
msgid ""
"Source texture (before compression) is a regular texture. Default for all "
"textures."
msgstr ""
-#: doc/classes/Image.xml:600
+#: doc/classes/Image.xml:601
msgid "Source texture (before compression) is in sRGB space."
msgstr ""
-#: doc/classes/Image.xml:603
+#: doc/classes/Image.xml:604
msgid ""
"Source texture (before compression) is a normal texture (e.g. it can be "
"compressed into two channels)."
@@ -29056,6 +29146,17 @@ msgstr ""
#: doc/classes/Input.xml:43
msgid ""
+"Sends all input events which are in the current buffer to the game loop. "
+"These events may have been buffered as a result of accumulated input "
+"([method set_use_accumulated_input]) or agile input flushing ([member "
+"ProjectSettings.input_devices/buffering/agile_event_flushing]).\n"
+"The engine will already do this itself at key execution points (at least "
+"once per frame). However, this can be useful in advanced cases where you "
+"want precise control over the timing of event handling."
+msgstr ""
+
+#: doc/classes/Input.xml:50
+msgid ""
"Returns the acceleration of the device's accelerometer sensor, if the device "
"has one. Otherwise, the method returns [constant Vector3.ZERO].\n"
"Note this method returns an empty [Vector3] when running from the editor "
@@ -29067,7 +29168,7 @@ msgid ""
"the Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:53
+#: doc/classes/Input.xml:60
msgid ""
"Returns a value between 0 and 1 representing the raw intensity of the given "
"action, ignoring the action's deadzone. In most cases, you should use "
@@ -29077,7 +29178,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:62
+#: doc/classes/Input.xml:69
msgid ""
"Returns a value between 0 and 1 representing the intensity of the given "
"action. In a joypad, for example, the further away the axis (analog sticks "
@@ -29089,7 +29190,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:71
+#: doc/classes/Input.xml:78
msgid ""
"Get axis input by specifying two actions, one negative and one positive.\n"
"This is a shorthand for writing [code]Input."
@@ -29097,17 +29198,17 @@ msgid ""
"get_action_strength(\"negative_action\")[/code]."
msgstr ""
-#: doc/classes/Input.xml:78
+#: doc/classes/Input.xml:85
msgid ""
"Returns an [Array] containing the device IDs of all currently connected "
"joypads."
msgstr ""
-#: doc/classes/Input.xml:84
+#: doc/classes/Input.xml:91
msgid "Returns the currently assigned cursor shape (see [enum CursorShape])."
msgstr ""
-#: doc/classes/Input.xml:90
+#: doc/classes/Input.xml:97
msgid ""
"Returns the gravity of the device's accelerometer sensor, if the device has "
"one. Otherwise, the method returns [constant Vector3.ZERO].\n"
@@ -29117,7 +29218,7 @@ msgid ""
"Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:97
+#: doc/classes/Input.xml:104
msgid ""
"Returns the rotation rate in rad/s around a device's X, Y, and Z axes of the "
"gyroscope sensor, if the device has one. Otherwise, the method returns "
@@ -29126,53 +29227,53 @@ msgid ""
"it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:106
+#: doc/classes/Input.xml:113
msgid ""
"Returns the current value of the joypad axis at given index (see [enum "
"JoystickList])."
msgstr ""
-#: doc/classes/Input.xml:113
+#: doc/classes/Input.xml:120
msgid "Returns the index of the provided axis name."
msgstr ""
-#: doc/classes/Input.xml:120
+#: doc/classes/Input.xml:127
msgid ""
"Receives a [enum JoystickList] axis and returns its equivalent name as a "
"string."
msgstr ""
-#: doc/classes/Input.xml:127
+#: doc/classes/Input.xml:134
msgid "Returns the index of the provided button name."
msgstr ""
-#: doc/classes/Input.xml:134
+#: doc/classes/Input.xml:141
msgid ""
"Receives a gamepad button from [enum JoystickList] and returns its "
"equivalent name as a string."
msgstr ""
-#: doc/classes/Input.xml:141
+#: doc/classes/Input.xml:148
msgid ""
"Returns a SDL2-compatible device GUID on platforms that use gamepad "
"remapping. Returns [code]\"Default Gamepad\"[/code] otherwise."
msgstr ""
-#: doc/classes/Input.xml:148
+#: doc/classes/Input.xml:155
msgid "Returns the name of the joypad at the specified device index."
msgstr ""
-#: doc/classes/Input.xml:155
+#: doc/classes/Input.xml:162
msgid "Returns the duration of the current vibration effect in seconds."
msgstr ""
-#: doc/classes/Input.xml:162
+#: doc/classes/Input.xml:169
msgid ""
"Returns the strength of the joypad vibration: x is the strength of the weak "
"motor, and y is the strength of the strong motor."
msgstr ""
-#: doc/classes/Input.xml:168
+#: doc/classes/Input.xml:175
msgid ""
"Returns the mouse speed for the last time the cursor was moved, and this "
"until the next frame where the mouse moves. This means that even if the "
@@ -29180,7 +29281,7 @@ msgid ""
"motion."
msgstr ""
-#: doc/classes/Input.xml:174
+#: doc/classes/Input.xml:181
msgid ""
"Returns the magnetic field strength in micro-Tesla for all axes of the "
"device's magnetometer sensor, if the device has one. Otherwise, the method "
@@ -29189,17 +29290,17 @@ msgid ""
"platforms, it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:181
+#: doc/classes/Input.xml:188
msgid ""
"Returns mouse buttons as a bitmask. If multiple mouse buttons are pressed at "
"the same time, the bits are added together."
msgstr ""
-#: doc/classes/Input.xml:187
+#: doc/classes/Input.xml:194
msgid "Returns the mouse mode. See the constants for more information."
msgstr ""
-#: doc/classes/Input.xml:198
+#: doc/classes/Input.xml:205
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -29212,7 +29313,7 @@ msgid ""
"want (on the range of 0 to 1)."
msgstr ""
-#: doc/classes/Input.xml:208
+#: doc/classes/Input.xml:215
msgid ""
"Returns [code]true[/code] when the user starts pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user pressed down "
@@ -29224,7 +29325,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:218
+#: doc/classes/Input.xml:225
msgid ""
"Returns [code]true[/code] when the user stops pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user released the "
@@ -29234,7 +29335,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:227
+#: doc/classes/Input.xml:234
msgid ""
"Returns [code]true[/code] if you are pressing the action event. Note that if "
"an action has multiple buttons assigned and more than one of them is "
@@ -29245,13 +29346,13 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:236
+#: doc/classes/Input.xml:243
msgid ""
"Returns [code]true[/code] if you are pressing the joypad button (see [enum "
"JoystickList])."
msgstr ""
-#: doc/classes/Input.xml:243
+#: doc/classes/Input.xml:250
msgid ""
"Returns [code]true[/code] if the system knows the specified device. This "
"means that it sets all button and axis indices exactly as defined in [enum "
@@ -29259,19 +29360,19 @@ msgid ""
"but you can still retrieve events from them."
msgstr ""
-#: doc/classes/Input.xml:250
+#: doc/classes/Input.xml:257
msgid ""
"Returns [code]true[/code] if you are pressing the key. You can pass a [enum "
"KeyList] constant."
msgstr ""
-#: doc/classes/Input.xml:257
+#: doc/classes/Input.xml:264
msgid ""
"Returns [code]true[/code] if you are pressing the mouse button specified "
"with [enum ButtonList]."
msgstr ""
-#: doc/classes/Input.xml:267
+#: doc/classes/Input.xml:274
msgid ""
"Notifies the [Input] singleton that a connection has changed, to update the "
"state for the [code]device[/code] index.\n"
@@ -29280,7 +29381,7 @@ msgid ""
"triggered internally."
msgstr ""
-#: doc/classes/Input.xml:275
+#: doc/classes/Input.xml:282
msgid ""
"Feeds an [InputEvent] to the game. Can be used to artificially trigger input "
"events from code. Also generates [method Node._input] calls.\n"
@@ -29293,12 +29394,21 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Input.xml:289
+#: doc/classes/Input.xml:296
msgid ""
"Removes all mappings from the internal database that match the given GUID."
msgstr ""
-#: doc/classes/Input.xml:298
+#: doc/classes/Input.xml:303
+msgid ""
+"Sets the acceleration value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:313
msgid ""
"Sets a custom mouse cursor image, which is only visible inside the game "
"window. The hotspot can also be specified. Passing [code]null[/code] to the "
@@ -29313,7 +29423,7 @@ msgid ""
"compression mode can't be used for custom cursors."
msgstr ""
-#: doc/classes/Input.xml:309
+#: doc/classes/Input.xml:324
msgid ""
"Sets the default cursor shape to be used in the viewport instead of "
"[constant CURSOR_ARROW].\n"
@@ -29323,11 +29433,38 @@ msgid ""
"cursor immediately."
msgstr ""
-#: doc/classes/Input.xml:318
+#: doc/classes/Input.xml:333
+msgid ""
+"Sets the gravity value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:341
+msgid ""
+"Sets the value of the rotation rate of the gyroscope sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:349
+msgid ""
+"Sets the value of the magnetic field of the magnetometer sensor. Can be used "
+"for debugging on devices without a hardware sensor, for example in an editor "
+"on a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:357
msgid "Sets the mouse mode. See the constants for more information."
msgstr ""
-#: doc/classes/Input.xml:325
+#: doc/classes/Input.xml:364
msgid ""
"Enables or disables the accumulation of similar input events sent by the "
"operating system. When input accumulation is enabled, all input events "
@@ -29341,7 +29478,7 @@ msgid ""
"results that closely follow the actual input."
msgstr ""
-#: doc/classes/Input.xml:336
+#: doc/classes/Input.xml:375
msgid ""
"Starts to vibrate the joypad. Joypads usually come with two rumble motors, a "
"strong and a weak one. [code]weak_magnitude[/code] is the strength of the "
@@ -29354,34 +29491,34 @@ msgid ""
"few seconds."
msgstr ""
-#: doc/classes/Input.xml:344
+#: doc/classes/Input.xml:383
msgid "Stops the vibration of the joypad."
msgstr ""
-#: doc/classes/Input.xml:351
+#: doc/classes/Input.xml:390
msgid ""
"Vibrate Android and iOS devices.\n"
"[b]Note:[/b] It needs [code]VIBRATE[/code] permission for Android at export "
"settings. iOS does not support duration."
msgstr ""
-#: doc/classes/Input.xml:359
+#: doc/classes/Input.xml:398
msgid "Sets the mouse position to the specified vector."
msgstr ""
-#: doc/classes/Input.xml:368
+#: doc/classes/Input.xml:407
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
-#: doc/classes/Input.xml:374
+#: doc/classes/Input.xml:413
msgid "Makes the mouse cursor visible if it is hidden."
msgstr ""
-#: doc/classes/Input.xml:377
+#: doc/classes/Input.xml:416
msgid "Makes the mouse cursor hidden if it is visible."
msgstr ""
-#: doc/classes/Input.xml:380
+#: doc/classes/Input.xml:419
msgid ""
"Captures the mouse. The mouse will be hidden and its position locked at the "
"center of the screen.\n"
@@ -29389,83 +29526,83 @@ msgid ""
"need to use [member InputEventMouseMotion.relative]."
msgstr ""
-#: doc/classes/Input.xml:384
+#: doc/classes/Input.xml:423
msgid "Makes the mouse cursor visible but confines it to the game window."
msgstr ""
-#: doc/classes/Input.xml:387
+#: doc/classes/Input.xml:426
msgid "Arrow cursor. Standard, default pointing cursor."
msgstr ""
-#: doc/classes/Input.xml:390
+#: doc/classes/Input.xml:429
msgid ""
"I-beam cursor. Usually used to show where the text cursor will appear when "
"the mouse is clicked."
msgstr ""
-#: doc/classes/Input.xml:393
+#: doc/classes/Input.xml:432
msgid ""
"Pointing hand cursor. Usually used to indicate the pointer is over a link or "
"other interactable item."
msgstr ""
-#: doc/classes/Input.xml:396
+#: doc/classes/Input.xml:435
msgid ""
"Cross cursor. Typically appears over regions in which a drawing operation "
"can be performed or for selections."
msgstr ""
-#: doc/classes/Input.xml:399
+#: doc/classes/Input.xml:438
msgid ""
"Wait cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application is still usable during the "
"operation."
msgstr ""
-#: doc/classes/Input.xml:402
+#: doc/classes/Input.xml:441
msgid ""
"Busy cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application isn't usable during the "
"operation (e.g. something is blocking its main thread)."
msgstr ""
-#: doc/classes/Input.xml:405
+#: doc/classes/Input.xml:444
msgid "Drag cursor. Usually displayed when dragging something."
msgstr ""
-#: doc/classes/Input.xml:408
+#: doc/classes/Input.xml:447
msgid ""
"Can drop cursor. Usually displayed when dragging something to indicate that "
"it can be dropped at the current position."
msgstr ""
-#: doc/classes/Input.xml:411
+#: doc/classes/Input.xml:450
msgid ""
"Forbidden cursor. Indicates that the current action is forbidden (for "
"example, when dragging something) or that the control at a position is "
"disabled."
msgstr ""
-#: doc/classes/Input.xml:414
+#: doc/classes/Input.xml:453
msgid ""
"Vertical resize mouse cursor. A double-headed vertical arrow. It tells the "
"user they can resize the window or the panel vertically."
msgstr ""
-#: doc/classes/Input.xml:417
+#: doc/classes/Input.xml:456
msgid ""
"Horizontal resize mouse cursor. A double-headed horizontal arrow. It tells "
"the user they can resize the window or the panel horizontally."
msgstr ""
-#: doc/classes/Input.xml:420
+#: doc/classes/Input.xml:459
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the bottom left to the top right. It tells the user they can resize the "
"window or the panel both horizontally and vertically."
msgstr ""
-#: doc/classes/Input.xml:423
+#: doc/classes/Input.xml:462
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the top left to the bottom right, the opposite of [constant "
@@ -29473,23 +29610,23 @@ msgid ""
"both horizontally and vertically."
msgstr ""
-#: doc/classes/Input.xml:426
+#: doc/classes/Input.xml:465
msgid "Move cursor. Indicates that something can be moved."
msgstr ""
-#: doc/classes/Input.xml:429
+#: doc/classes/Input.xml:468
msgid ""
"Vertical split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_VSIZE]."
msgstr ""
-#: doc/classes/Input.xml:432
+#: doc/classes/Input.xml:471
msgid ""
"Horizontal split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_HSIZE]."
msgstr ""
-#: doc/classes/Input.xml:435
+#: doc/classes/Input.xml:474
msgid "Help cursor. Usually a question mark."
msgstr ""
@@ -29905,7 +30042,9 @@ msgid "The drag position."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -31220,7 +31359,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -31285,22 +31425,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -31315,7 +31457,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -31323,19 +31465,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -31406,7 +31548,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -31464,7 +31607,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -32750,14 +32895,21 @@ msgid "Default text [Color] of the [LinkButton]."
msgstr ""
#: doc/classes/LinkButton.xml:46
-msgid "Text [Color] used when the [LinkButton] is being hovered."
+msgid ""
+"Text [Color] used when the [LinkButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/LinkButton.xml:49
-msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgid "Text [Color] used when the [LinkButton] is being hovered."
msgstr ""
#: doc/classes/LinkButton.xml:52
+msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:55
msgid "The vertical space between the baseline of text and the underline."
msgstr ""
@@ -33250,26 +33402,33 @@ msgid "Text [Color] used when the [MenuButton] is disabled."
msgstr ""
#: doc/classes/MenuButton.xml:64
-msgid "Text [Color] used when the [MenuButton] is being hovered."
+msgid ""
+"Text [Color] used when the [MenuButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/MenuButton.xml:67
-msgid "Text [Color] used when the [MenuButton] is being pressed."
+msgid "Text [Color] used when the [MenuButton] is being hovered."
msgstr ""
#: doc/classes/MenuButton.xml:70
-msgid "[StyleBox] used when the [MenuButton] is being hovered."
+msgid "Text [Color] used when the [MenuButton] is being pressed."
msgstr ""
#: doc/classes/MenuButton.xml:73
-msgid "The horizontal space between [MenuButton]'s icon and text."
+msgid "[StyleBox] used when the [MenuButton] is being hovered."
msgstr ""
#: doc/classes/MenuButton.xml:76
-msgid "Default [StyleBox] for the [MenuButton]."
+msgid "The horizontal space between [MenuButton]'s icon and text."
msgstr ""
#: doc/classes/MenuButton.xml:79
+msgid "Default [StyleBox] for the [MenuButton]."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:82
msgid "[StyleBox] used when the [MenuButton] is being pressed."
msgstr ""
@@ -35006,7 +35165,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -37890,26 +38049,33 @@ msgid "Text [Color] used when the [OptionButton] is disabled."
msgstr ""
#: doc/classes/OptionButton.xml:212
-msgid "Text [Color] used when the [OptionButton] is being hovered."
+msgid ""
+"Text [Color] used when the [OptionButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/OptionButton.xml:215
-msgid "Text [Color] used when the [OptionButton] is being pressed."
+msgid "Text [Color] used when the [OptionButton] is being hovered."
msgstr ""
#: doc/classes/OptionButton.xml:218
-msgid "[StyleBox] used when the [OptionButton] is being hovered."
+msgid "Text [Color] used when the [OptionButton] is being pressed."
msgstr ""
#: doc/classes/OptionButton.xml:221
-msgid "The horizontal space between [OptionButton]'s icon and text."
+msgid "[StyleBox] used when the [OptionButton] is being hovered."
msgstr ""
#: doc/classes/OptionButton.xml:224
-msgid "Default [StyleBox] for the [OptionButton]."
+msgid "The horizontal space between [OptionButton]'s icon and text."
msgstr ""
#: doc/classes/OptionButton.xml:227
+msgid "Default [StyleBox] for the [OptionButton]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:230
msgid "[StyleBox] used when the [OptionButton] is being pressed."
msgstr ""
@@ -38315,7 +38481,7 @@ msgstr ""
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -38345,14 +38511,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -38362,7 +38528,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -40871,17 +41037,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -40899,11 +41091,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -41098,7 +41290,9 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-msgid "Returns the [Physics2DDirectBodyState] of the body."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
@@ -41901,6 +42095,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -41918,7 +42130,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -42032,7 +42244,9 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-msgid "Returns the [PhysicsDirectBodyState] of the body."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/PhysicsServer.xml:370
@@ -43016,27 +43230,27 @@ msgstr ""
msgid "Removes an element from the array by index."
msgstr ""
-#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolColorArray.xml:66
-#: doc/classes/PoolIntArray.xml:67 doc/classes/PoolRealArray.xml:67
-#: doc/classes/PoolStringArray.xml:74 doc/classes/PoolVector2Array.xml:67
-#: doc/classes/PoolVector3Array.xml:66
+#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolIntArray.xml:67
+#: doc/classes/PoolRealArray.xml:67
msgid ""
"Sets the size of the array. If the array is grown, reserves elements at the "
"end of the array. If the array is shrunk, truncates the array to the new "
-"size."
+"size.\n"
+"[b]Note:[/b] Added elements are not automatically initialized to 0 and will "
+"contain garbage, i.e. indeterminate values."
msgstr ""
-#: doc/classes/PoolByteArray.xml:121
+#: doc/classes/PoolByteArray.xml:122
msgid "Changes the byte at the given index."
msgstr ""
-#: doc/classes/PoolByteArray.xml:127 doc/classes/PoolColorArray.xml:79
-#: doc/classes/PoolRealArray.xml:80 doc/classes/PoolStringArray.xml:87
+#: doc/classes/PoolByteArray.xml:128 doc/classes/PoolColorArray.xml:79
+#: doc/classes/PoolRealArray.xml:81 doc/classes/PoolStringArray.xml:87
#: doc/classes/PoolVector2Array.xml:80 doc/classes/PoolVector3Array.xml:79
msgid "Returns the size of the array."
msgstr ""
-#: doc/classes/PoolByteArray.xml:135
+#: doc/classes/PoolByteArray.xml:136
msgid ""
"Returns the slice of the [PoolByteArray] between indices (inclusive) as a "
"new [PoolByteArray]. Any negative index is considered to be from the end of "
@@ -43068,6 +43282,14 @@ msgstr ""
msgid "Appends a value to the array."
msgstr ""
+#: doc/classes/PoolColorArray.xml:66 doc/classes/PoolStringArray.xml:74
+#: doc/classes/PoolVector2Array.xml:67 doc/classes/PoolVector3Array.xml:66
+msgid ""
+"Sets the size of the array. If the array is grown, reserves elements at the "
+"end of the array. If the array is shrunk, truncates the array to the new "
+"size."
+msgstr ""
+
#: doc/classes/PoolColorArray.xml:73
msgid "Changes the [Color] at the given index."
msgstr ""
@@ -43104,11 +43326,11 @@ msgid ""
"valid, or at the end of the array ([code]idx == size()[/code])."
msgstr ""
-#: doc/classes/PoolIntArray.xml:74
+#: doc/classes/PoolIntArray.xml:75
msgid "Changes the int at the given index."
msgstr ""
-#: doc/classes/PoolIntArray.xml:80
+#: doc/classes/PoolIntArray.xml:81
msgid "Returns the array size."
msgstr ""
@@ -43140,7 +43362,7 @@ msgstr ""
msgid "Appends a [PoolRealArray] at the end of this array."
msgstr ""
-#: doc/classes/PoolRealArray.xml:74
+#: doc/classes/PoolRealArray.xml:75
msgid "Changes the float at the given index."
msgstr ""
@@ -44407,18 +44629,6 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:204
msgid ""
-"The project data directory is used for storing project-specific data "
-"(metadata, shader cache, etc.).\n"
-"[b]Note:[/b] Restart the application after changing this setting.\n"
-"[b]Note:[/b] Changing this value can help on platforms or with third-party "
-"tools where specific directory patterns are disallowed. Only modify this "
-"setting if you know that your environment requires it, as changing the "
-"default can impact compatibility with some external tools or plugins which "
-"expect the default [code].import[/code] folder."
-msgstr ""
-
-#: doc/classes/ProjectSettings.xml:209
-msgid ""
"Specifies a file to override project settings. For example: [code]user://"
"custom_settings.cfg[/code]. See \"Overriding\" in the [ProjectSettings] "
"class description at the top for more information.\n"
@@ -44426,7 +44636,7 @@ msgid ""
"code] will still be read to override the project settings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:213
+#: doc/classes/ProjectSettings.xml:208
msgid ""
"If [code]true[/code], the project will save user data to its own user "
"directory (see [member application/config/custom_user_dir_name]). This "
@@ -44436,13 +44646,28 @@ msgid ""
"user data directory)/Godot/app_userdata/(project name)[/code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:216
+#: doc/classes/ProjectSettings.xml:211
+msgid ""
+"If [code]true[/code], the project will use a hidden directory ([code]."
+"import[/code]) for storing project-specific data (metadata, shader cache, "
+"etc.).\n"
+"If [code]false[/code], a non-hidden directory ([code]import[/code]) will be "
+"used instead.\n"
+"[b]Note:[/b] Restart the application after changing this setting.\n"
+"[b]Note:[/b] Changing this value can help on platforms or with third-party "
+"tools where hidden directory patterns are disallowed. Only modify this "
+"setting if you know that your environment requires it, as changing the "
+"default can impact compatibility with some external tools or plugins which "
+"expect the default [code].import[/code] folder."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:217
msgid ""
"Icon set in [code].ico[/code] format used on Windows to set the game's icon. "
"This is done automatically on start by calling [method OS.set_native_icon]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:219
+#: doc/classes/ProjectSettings.xml:220
msgid ""
"Time samples for frame deltas are subject to random variation introduced by "
"the platform, even when frames are displayed at regular intervals thanks to "
@@ -44456,14 +44681,14 @@ msgid ""
"adequate to render frames at the refresh rate."
msgstr ""
-#: doc/classes/ProjectSettings.xml:224
+#: doc/classes/ProjectSettings.xml:225
msgid ""
"[b]Experimental.[/b] Shifts the measurement of delta time for each frame to "
"just after the drawing has taken place. This may lead to more consistent "
"deltas and a reduction in frame stutters."
msgstr ""
-#: doc/classes/ProjectSettings.xml:227
+#: doc/classes/ProjectSettings.xml:228
msgid ""
"If [code]true[/code], disables printing to standard error. If [code]true[/"
"code], this also hides error and warning messages printed by [method "
@@ -44472,7 +44697,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:231
+#: doc/classes/ProjectSettings.xml:232
msgid ""
"If [code]true[/code], disables printing to standard output. This is "
"equivalent to starting the editor or project with the [code]--quiet[/code] "
@@ -44480,7 +44705,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:235
+#: doc/classes/ProjectSettings.xml:236
msgid ""
"If [code]true[/code], flushes the standard output stream every time a line "
"is printed. This affects both terminal logging and file logging.\n"
@@ -44496,20 +44721,20 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:241
+#: doc/classes/ProjectSettings.xml:242
msgid ""
"Debug build override for [member application/run/flush_stdout_on_print], as "
"performance is less important during debugging.\n"
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:245
+#: doc/classes/ProjectSettings.xml:246
msgid ""
"Forces a delay between frames in the main loop (in milliseconds). This may "
"be useful if you plan to disable vertical synchronization."
msgstr ""
-#: doc/classes/ProjectSettings.xml:248
+#: doc/classes/ProjectSettings.xml:249
msgid ""
"If [code]true[/code], enables low-processor usage mode. This setting only "
"works on desktop platforms. The screen is not redrawn if nothing changes "
@@ -44517,75 +44742,81 @@ msgid ""
"useless (and can hurt performance) in most games."
msgstr ""
-#: doc/classes/ProjectSettings.xml:251
+#: doc/classes/ProjectSettings.xml:252
msgid ""
"Amount of sleeping between frames when the low-processor usage mode is "
"enabled (in microseconds). Higher values will result in lower CPU usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:254
+#: doc/classes/ProjectSettings.xml:255
msgid "Path to the main scene file that will be loaded when the project runs."
msgstr ""
-#: doc/classes/ProjectSettings.xml:257 doc/classes/ProjectSettings.xml:260
+#: doc/classes/ProjectSettings.xml:258 doc/classes/ProjectSettings.xml:261
msgid ""
"Audio buses will disable automatically when sound goes below a given dB "
"threshold for a given time. This saves CPU as effects assigned to that bus "
"will no longer do any processing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:263
+#: doc/classes/ProjectSettings.xml:264
msgid ""
"Default [AudioBusLayout] resource file to use in the project, unless "
"overridden by the scene."
msgstr ""
-#: doc/classes/ProjectSettings.xml:266
+#: doc/classes/ProjectSettings.xml:267
msgid ""
"Specifies the audio driver to use. This setting is platform-dependent as "
"each platform supports different audio drivers. If left empty, the default "
"audio driver will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:269
+#: doc/classes/ProjectSettings.xml:270
msgid ""
"If [code]true[/code], microphone input will be allowed. This requires "
"appropriate permissions to be set when exporting to Android or iOS."
msgstr ""
-#: doc/classes/ProjectSettings.xml:272
+#: doc/classes/ProjectSettings.xml:273
msgid ""
"The mixing rate used for audio (in Hz). In general, it's better to not touch "
"this and leave it to the host operating system."
msgstr ""
-#: doc/classes/ProjectSettings.xml:275
+#: doc/classes/ProjectSettings.xml:276
msgid ""
"Safer override for [member audio/mix_rate] in the Web platform. Here "
"[code]0[/code] means \"let the browser choose\" (since some browsers do not "
"like forcing the mix rate)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:278
+#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:281
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:284
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:287
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -44595,7 +44826,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:290
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -44605,27 +44836,27 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:293
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:296
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
-#: doc/classes/ProjectSettings.xml:299
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:302
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -44633,81 +44864,81 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:305
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:308
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:311
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:314
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:317
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr ""
-#: doc/classes/ProjectSettings.xml:320
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:323
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:326
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:329
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:332
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:335
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:338
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:341
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -44715,109 +44946,109 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:344
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:347
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:350
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:353
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:356
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:359
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:362
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:365
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:368
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:371
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:374
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:377
+#: doc/classes/ProjectSettings.xml:380
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:380
+#: doc/classes/ProjectSettings.xml:383
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:383
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:386
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:389
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:392
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:395
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:398
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -44828,91 +45059,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:403
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:406
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:409
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:412
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:415
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:418
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:421
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:424
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:427
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:430
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:433
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:436
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:439
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr ""
-#: doc/classes/ProjectSettings.xml:442
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:445
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:448
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:451
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -44921,13 +45152,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:455
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:458
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -44937,7 +45168,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:463
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -44945,19 +45176,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:468
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:472
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:476
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -44971,45 +45202,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:481
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:484
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:488
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:491
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:494
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:497
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:500
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -45018,7 +45249,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:503
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -45029,7 +45260,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:507
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -45045,14 +45276,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:515
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:518
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -45060,49 +45291,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:521
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:524
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:529
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:532
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:535
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:538
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:541
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:544
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:547
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -45111,7 +45342,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:551
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -45119,7 +45350,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:555
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -45127,7 +45358,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:559
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -45137,7 +45368,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:563
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -45146,7 +45377,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:567
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -45155,7 +45386,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:571
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -45165,7 +45396,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:575
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -45173,7 +45404,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:579
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -45183,7 +45414,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:583
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -45193,7 +45424,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:587
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -45201,7 +45432,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:591
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -45210,7 +45441,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:595
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -45218,7 +45449,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:599
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -45230,477 +45461,477 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:605
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:608
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:611
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:614
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:617
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:620
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:623
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:626
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:629
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:632
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:635
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:638
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:641
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:644
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:647
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:650
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:653
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:656
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:659
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:662
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:665
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:668
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:671
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:674
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:677
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:680
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:683
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:686
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:689
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:692
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:695
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:698
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:701
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:704
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:707
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:710
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:713
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:716
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:719
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:722
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:725
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:728
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:731
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:734
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:737
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:740
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:743
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:746
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:749
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:752
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:755
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:758
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:761
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:764
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:767
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:770
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:773
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:776
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:779
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:782
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:785
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:788
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:791
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:794
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:797
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:800
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:803
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:806
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:809
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:812
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:815
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:818
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:821
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:824
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:827
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:830
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:833
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:836
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:839
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:842
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:845
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:848
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:851
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:854
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:857
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:860
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:863
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:866
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:869
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:872
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:875
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:878
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:881
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr ""
-#: doc/classes/ProjectSettings.xml:884
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:887
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:890
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:893
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:896
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:899
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:902
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:905
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:908
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:911
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:914
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:917
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:920
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:923
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:926
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:929
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:932
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:935
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:938
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:941
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:946
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:949
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -45708,92 +45939,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:952
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:955
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:958
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:961
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:964
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:967
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:970
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:973
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:976
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:979
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:982
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:985
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:988
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:991
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:994
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:997
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1000
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1003
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -45803,33 +46034,33 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1007
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1010
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1013
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1017
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1021
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45842,7 +46073,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1025
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45854,7 +46085,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1033
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45866,7 +46097,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1041
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45879,7 +46110,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1045
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -45887,28 +46118,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1049
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1053
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1056
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1059
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -45918,25 +46149,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1063
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1066
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1069
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1072
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45949,7 +46180,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1076
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45961,7 +46192,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1084
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45973,7 +46204,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1092
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45986,13 +46217,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1096
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1099
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -46000,11 +46231,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1103
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1106
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -46018,7 +46249,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1112
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -46027,7 +46258,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1116
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -46043,7 +46274,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1121
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -46053,7 +46284,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1125
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -46063,7 +46294,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1129
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -46074,7 +46305,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1133
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -46084,7 +46315,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1137
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -46092,7 +46323,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1141
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -46103,7 +46334,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1145
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -46118,7 +46349,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1151
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -46127,13 +46358,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1156
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1159
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -46142,7 +46373,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1162
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -46152,7 +46383,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1165
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -46164,7 +46395,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1168
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -46174,24 +46405,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1171
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1174
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1177
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1180
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -46200,7 +46431,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1183
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -46208,7 +46439,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1186
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -46217,7 +46448,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1189
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -46227,7 +46458,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1193
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -46235,31 +46466,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1197
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1200
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1203
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1206
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1209
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -46267,7 +46498,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1212
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -46277,46 +46508,53 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1215
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1218
+#: doc/classes/ProjectSettings.xml:1221
+msgid ""
+"iOS specific override for [member rendering/gles2/compatibility/"
+"disable_half_float], due to poor support for half-float vertex compression "
+"on many devices."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1224
msgid ""
-"If [code]true[/code] and available on the target device, enables high "
-"floating point precision for all shader computations in GLES2.\n"
+"If [code]true[/code] and available on the target Android device, enables "
+"high floating point precision for all shader computations in GLES2.\n"
"[b]Warning:[/b] High floating point precision can be extremely slow on older "
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1225
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1228
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1231
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1234
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -46324,7 +46562,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1237
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -46334,7 +46572,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1240
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -46343,7 +46581,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1243
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -46352,20 +46590,20 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1246
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1249
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1252
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -46374,7 +46612,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1255
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -46382,7 +46620,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1258
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -46391,7 +46629,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -46401,20 +46639,20 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1267
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1274
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -46423,13 +46661,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -46439,46 +46677,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1293
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1296
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1299
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1302
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1305
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -46488,7 +46726,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -46500,7 +46738,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -46508,7 +46746,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1316
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -46516,7 +46754,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -46525,7 +46763,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1323
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -46539,7 +46777,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1328
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -46549,7 +46787,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1331
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -46558,7 +46796,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1334
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -46568,54 +46806,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1337
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1340
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1343
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1346
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1349
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1352
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1355
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1358
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -46626,61 +46864,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1365
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1368
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1371
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1374
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1377
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1380
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1383
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1386
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -46691,7 +46929,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -46700,26 +46938,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1393 doc/classes/ProjectSettings.xml:1396
#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1405
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1408
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1411
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -46730,20 +46968,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1418
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -46755,52 +46993,52 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1428
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1435
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1438
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1441
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1444
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1447
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1450
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1453
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -46808,7 +47046,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -46818,10 +47056,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -46830,10 +47068,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -46842,10 +47080,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -46854,10 +47092,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -46866,10 +47104,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -47540,40 +47778,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr ""
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -47581,14 +47833,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -49923,6 +50175,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -49940,7 +50208,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -49948,11 +50216,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -49962,19 +50230,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -55393,20 +55661,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -55417,28 +55690,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -55450,19 +55723,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
@@ -58249,26 +58522,33 @@ msgid "Text [Color] used when the [ToolButton] is disabled."
msgstr ""
#: doc/classes/ToolButton.xml:39
-msgid "Text [Color] used when the [ToolButton] is being hovered."
+msgid ""
+"Text [Color] used when the [ToolButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/ToolButton.xml:42
-msgid "Text [Color] used when the [ToolButton] is being pressed."
+msgid "Text [Color] used when the [ToolButton] is being hovered."
msgstr ""
#: doc/classes/ToolButton.xml:45
-msgid "[StyleBox] used when the [ToolButton] is being hovered."
+msgid "Text [Color] used when the [ToolButton] is being pressed."
msgstr ""
#: doc/classes/ToolButton.xml:48
-msgid "The horizontal space between [ToolButton]'s icon and text."
+msgid "[StyleBox] used when the [ToolButton] is being hovered."
msgstr ""
#: doc/classes/ToolButton.xml:51
-msgid "Default [StyleBox] for the [ToolButton]."
+msgid "The horizontal space between [ToolButton]'s icon and text."
msgstr ""
#: doc/classes/ToolButton.xml:54
+msgid "Default [StyleBox] for the [ToolButton]."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:57
msgid "[StyleBox] used when the [ToolButton] is being pressed."
msgstr ""
diff --git a/doc/translations/uk.po b/doc/translations/uk.po
index d499992201..03ed5ff6ef 100644
--- a/doc/translations/uk.po
+++ b/doc/translations/uk.po
@@ -8,12 +8,13 @@
# Pierre Stempin <pierre.stempin@gmail.com>, 2020.
# Wataru Onuki <bettawat@yahoo.co.jp>, 2020.
# IllusiveMan196 <hamsterrv@gmail.com>, 2021.
+# Valerii Bosiak <valerii540@protonmail.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2021-07-31 19:53+0000\n"
-"Last-Translator: IllusiveMan196 <hamsterrv@gmail.com>\n"
+"PO-Revision-Date: 2021-11-11 16:02+0000\n"
+"Last-Translator: Valerii Bosiak <valerii540@protonmail.com>\n"
"Language-Team: Ukrainian <https://hosted.weblate.org/projects/godot-engine/"
"godot-class-reference/uk/>\n"
"Language: uk\n"
@@ -22,45 +23,45 @@ msgstr ""
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Generator: Weblate 4.8-dev\n"
+"X-Generator: Weblate 4.9.1-dev\n"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Description"
msgstr "ОпиÑ"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Tutorials"
-msgstr "Туторіали"
+msgstr "Уроки"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Properties"
msgstr "ВлаÑтивоÑті"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Methods"
msgstr "Методи"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Theme Properties"
msgstr "ВлаÑтивоÑті теми"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Signals"
msgstr "Сигнали"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Enumerations"
msgstr "Переліки"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Constants"
msgstr "КонÑтанти"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Property Descriptions"
msgstr "ОпиÑи влаÑтивоÑтей"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Method Descriptions"
msgstr "ОпиÑи методів"
@@ -119,7 +120,6 @@ msgstr ""
"Підтримувані імена кольорів збігаютьÑÑ Ð· конÑтантами, визначеними у [Color]."
#: modules/gdscript/doc_classes/@GDScript.xml:45
-#, fuzzy
msgid ""
"Returns the absolute value of parameter [code]s[/code] (i.e. positive "
"value).\n"
@@ -130,8 +130,7 @@ msgstr ""
"Повертає абÑолютне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ñƒ [code]s[/code] (тобто Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð±ÐµÐ· "
"знака, працює Ð´Ð»Ñ Ñ†Ñ–Ð»Ð¸Ñ… чиÑел Ñ– чиÑел із рухомою крапкою).\n"
"[codeblock]\n"
-"# a дорівнює 1\n"
-"a = abs(-1)\n"
+"a = abs(-1) # a дорівнює 1\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:55
@@ -391,12 +390,18 @@ msgid ""
"r = deg2rad(180) # r is 3.141593\n"
"[/codeblock]"
msgstr ""
+"Перетворює кут виражений в градуÑах в радіани.\n"
+"[codeblock]\n"
+"r = deg2rad(180) # r це 3.141593\n"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:248
msgid ""
"Converts a dictionary (previously created with [method inst2dict]) back to "
"an instance. Useful for deserializing."
msgstr ""
+"Конвертує Ñловник (попередню Ñтворений з [method inst2dict]) зворотно в "
+"екземплÑÑ€. КориÑно Ð´Ð»Ñ Ð´ÐµÑеріалізації."
#: modules/gdscript/doc_classes/@GDScript.xml:256
msgid ""
@@ -3710,112 +3715,121 @@ msgid ""
msgstr ""
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr ""
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
msgstr ""
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
msgstr ""
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
msgstr ""
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr ""
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr ""
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr ""
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
msgstr ""
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr ""
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
msgstr ""
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
msgstr ""
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr ""
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
"positive.\n"
@@ -4894,7 +4908,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -6336,21 +6350,25 @@ msgstr "https://docs.godotengine.org/uk/latest/tutorials/vr/index.html"
#: doc/classes/Area.xml:17
msgid ""
-"Returns a list of intersecting [Area]s. For performance reasons (collisions "
-"are all processed at the same time) this list is modified once during the "
-"physics step, not immediately after objects are moved. Consider using "
-"signals instead."
+"Returns a list of intersecting [Area]s. The overlapping area's [member "
+"CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:23
+#: doc/classes/Area.xml:24
msgid ""
-"Returns a list of intersecting [PhysicsBody]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody]s. The overlapping body's "
+"[member CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:30
+#: doc/classes/Area.xml:32
msgid ""
"If [code]true[/code], the given area overlaps the Area.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6358,7 +6376,7 @@ msgid ""
"physics step. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:38
+#: doc/classes/Area.xml:40
msgid ""
"If [code]true[/code], the given physics body overlaps the Area.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6369,7 +6387,7 @@ msgid ""
"their tiles with collision shapes as a virtual physics body)."
msgstr ""
-#: doc/classes/Area.xml:46
+#: doc/classes/Area.xml:48
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
"velocity lost per second.\n"
@@ -6377,41 +6395,41 @@ msgid ""
"details about damping."
msgstr ""
-#: doc/classes/Area.xml:50 doc/classes/Area2D.xml:52
+#: doc/classes/Area.xml:52 doc/classes/Area2D.xml:54
msgid "The name of the area's audio bus."
msgstr ""
-#: doc/classes/Area.xml:53 doc/classes/Area2D.xml:55
+#: doc/classes/Area.xml:55 doc/classes/Area2D.xml:57
msgid ""
"If [code]true[/code], the area's audio bus overrides the default audio bus."
msgstr ""
-#: doc/classes/Area.xml:56
+#: doc/classes/Area.xml:58
msgid ""
"The area's gravity intensity (in meters per second squared). This value "
"multiplies the gravity vector. This is useful to alter the force of gravity "
"without altering its direction."
msgstr ""
-#: doc/classes/Area.xml:59 doc/classes/Area2D.xml:61
+#: doc/classes/Area.xml:61 doc/classes/Area2D.xml:63
msgid ""
"The falloff factor for point gravity. The greater the value, the faster "
"gravity decreases with distance."
msgstr ""
-#: doc/classes/Area.xml:62 doc/classes/Area2D.xml:64
+#: doc/classes/Area.xml:64 doc/classes/Area2D.xml:66
msgid ""
"If [code]true[/code], gravity is calculated from a point (set via [member "
"gravity_vec]). See also [member space_override]."
msgstr ""
-#: doc/classes/Area.xml:65 doc/classes/Area2D.xml:67
+#: doc/classes/Area.xml:67 doc/classes/Area2D.xml:69
msgid ""
"The area's gravity vector (not normalized). If gravity is a point (see "
"[member gravity_point]), this will be the point of attraction."
msgstr ""
-#: doc/classes/Area.xml:68
+#: doc/classes/Area.xml:70
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
"velocity lost per second.\n"
@@ -6419,61 +6437,61 @@ msgid ""
"about damping."
msgstr ""
-#: doc/classes/Area.xml:72 doc/classes/Area2D.xml:74
+#: doc/classes/Area.xml:74 doc/classes/Area2D.xml:76
msgid "If [code]true[/code], other monitoring areas can detect this area."
msgstr ""
-#: doc/classes/Area.xml:75 doc/classes/Area2D.xml:77
+#: doc/classes/Area.xml:77 doc/classes/Area2D.xml:79
msgid ""
"If [code]true[/code], the area detects bodies or areas entering and exiting "
"it."
msgstr ""
-#: doc/classes/Area.xml:78 doc/classes/Area2D.xml:80
+#: doc/classes/Area.xml:80 doc/classes/Area2D.xml:82
msgid "The area's priority. Higher priority areas are processed first."
msgstr ""
-#: doc/classes/Area.xml:81
+#: doc/classes/Area.xml:83
msgid ""
"The degree to which this area applies reverb to its associated audio. Ranges "
"from [code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
msgstr ""
-#: doc/classes/Area.xml:84
+#: doc/classes/Area.xml:86
msgid "If [code]true[/code], the area applies reverb to its associated audio."
msgstr ""
-#: doc/classes/Area.xml:87
+#: doc/classes/Area.xml:89
msgid "The reverb bus name to use for this area's associated audio."
msgstr ""
-#: doc/classes/Area.xml:90
+#: doc/classes/Area.xml:92
msgid ""
"The degree to which this area's reverb is a uniform effect. Ranges from "
"[code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
msgstr ""
-#: doc/classes/Area.xml:93 doc/classes/Area2D.xml:83
+#: doc/classes/Area.xml:95 doc/classes/Area2D.xml:85
msgid ""
"Override mode for gravity and damping calculations within this area. See "
"[enum SpaceOverride] for possible values."
msgstr ""
-#: doc/classes/Area.xml:100
+#: doc/classes/Area.xml:102
msgid ""
"Emitted when another Area enters this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
-#: doc/classes/Area.xml:107
+#: doc/classes/Area.xml:109
msgid ""
"Emitted when another Area exits this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
-#: doc/classes/Area.xml:117 doc/classes/Area.xml:130
+#: doc/classes/Area.xml:119 doc/classes/Area.xml:132
msgid ""
"Emitted when one of another Area's [Shape]s enters one of this Area's "
"[Shape]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6488,7 +6506,7 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:140
+#: doc/classes/Area.xml:142
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] enters this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -6497,7 +6515,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:147
+#: doc/classes/Area.xml:149
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] exits this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -6506,7 +6524,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:157 doc/classes/Area.xml:170
+#: doc/classes/Area.xml:159 doc/classes/Area.xml:172
msgid ""
"Emitted when one of a [PhysicsBody] or [GridMap]'s [Shape]s enters one of "
"this Area's [Shape]s. Requires [member monitoring] to be set to [code]true[/"
@@ -6523,29 +6541,29 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:180 doc/classes/Area2D.xml:170
+#: doc/classes/Area.xml:182 doc/classes/Area2D.xml:172
msgid "This area does not affect gravity/damping."
msgstr ""
-#: doc/classes/Area.xml:183 doc/classes/Area2D.xml:173
+#: doc/classes/Area.xml:185 doc/classes/Area2D.xml:175
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order)."
msgstr ""
-#: doc/classes/Area.xml:186 doc/classes/Area2D.xml:176
+#: doc/classes/Area.xml:188 doc/classes/Area2D.xml:178
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order), ignoring any lower priority areas."
msgstr ""
-#: doc/classes/Area.xml:189 doc/classes/Area2D.xml:179
+#: doc/classes/Area.xml:191 doc/classes/Area2D.xml:181
msgid ""
"This area replaces any gravity/damping, even the defaults, ignoring any "
"lower priority areas."
msgstr ""
-#: doc/classes/Area.xml:192 doc/classes/Area2D.xml:182
+#: doc/classes/Area.xml:194 doc/classes/Area2D.xml:184
msgid ""
"This area replaces any gravity/damping calculated so far (in [member "
"priority] order), but keeps calculating the rest of the areas."
@@ -6584,21 +6602,25 @@ msgstr "https://docs.godotengine.org/uk/latest/tutorials/vr/index.html"
#: doc/classes/Area2D.xml:19
msgid ""
-"Returns a list of intersecting [Area2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [Area2D]s. The overlapping area's [member "
+"CollisionObject2D.collision_layer] must be part of this area's [member "
+"CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:25
+#: doc/classes/Area2D.xml:26
msgid ""
-"Returns a list of intersecting [PhysicsBody2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody2D]s. The overlapping body's "
+"[member CollisionObject2D.collision_layer] must be part of this area's "
+"[member CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:32
+#: doc/classes/Area2D.xml:34
msgid ""
"If [code]true[/code], the given area overlaps the Area2D.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6606,7 +6628,7 @@ msgid ""
"the physics step. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:40
+#: doc/classes/Area2D.xml:42
msgid ""
"If [code]true[/code], the given physics body overlaps the Area2D.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6617,7 +6639,7 @@ msgid ""
"register their tiles with collision shapes as a virtual physics body)."
msgstr ""
-#: doc/classes/Area2D.xml:48
+#: doc/classes/Area2D.xml:50
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
"velocity lost per second.\n"
@@ -6625,14 +6647,14 @@ msgid ""
"details about damping."
msgstr ""
-#: doc/classes/Area2D.xml:58
+#: doc/classes/Area2D.xml:60
msgid ""
"The area's gravity intensity (in pixels per second squared). This value "
"multiplies the gravity vector. This is useful to alter the force of gravity "
"without altering its direction."
msgstr ""
-#: doc/classes/Area2D.xml:70
+#: doc/classes/Area2D.xml:72
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
"velocity lost per second.\n"
@@ -6640,21 +6662,21 @@ msgid ""
"about damping."
msgstr ""
-#: doc/classes/Area2D.xml:90
+#: doc/classes/Area2D.xml:92
msgid ""
"Emitted when another Area2D enters this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-#: doc/classes/Area2D.xml:97
+#: doc/classes/Area2D.xml:99
msgid ""
"Emitted when another Area2D exits this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-#: doc/classes/Area2D.xml:107
+#: doc/classes/Area2D.xml:109
msgid ""
"Emitted when one of another Area2D's [Shape2D]s enters one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6669,7 +6691,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:120
+#: doc/classes/Area2D.xml:122
msgid ""
"Emitted when one of another Area2D's [Shape2D]s exits one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6684,7 +6706,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:130
+#: doc/classes/Area2D.xml:132
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] enters this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -6693,7 +6715,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:137
+#: doc/classes/Area2D.xml:139
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] exits this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -6702,7 +6724,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:147
+#: doc/classes/Area2D.xml:149
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s enters one "
"of this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -6721,7 +6743,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:160
+#: doc/classes/Area2D.xml:162
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s exits one of "
"this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -10292,42 +10314,47 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
"https://docs.godotengine.org/uk/latest/tutorials/3d/using_gridmaps.html"
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
-"no save path is provided it will try to match the path from the current "
+"no root node is provided, parent of this node will be used as root instead. "
+"If no save path is provided it will try to match the path from the current "
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -10341,62 +10368,62 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
msgid "The rotation of the baked custom sky."
msgstr ""
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -10404,35 +10431,35 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -10440,13 +10467,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -10458,66 +10485,78 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr ""
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
msgid "Baking was successful."
msgstr ""
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr ""
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
#, fuzzy
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr "Повертає Ð°Ñ€ÐºÑ‚Ð°Ð½Ð³ÐµÐ½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ñ–Ð²."
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr ""
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:133
+#: doc/classes/BakedLightmap.xml:132
+msgid ""
+"Returns if lightmapper can't be created. Unless you are using a custom "
+"lightmapper, please report this as bug."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:135
+msgid ""
+"There is no root node to start baking from. Either provide [code]from_node[/"
+"code] argument or attach this node to a parent that should be used as root."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:136
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:139
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:142
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -10973,8 +11012,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -11362,26 +11404,33 @@ msgid "Text [Color] used when the [Button] is disabled."
msgstr ""
#: doc/classes/Button.xml:77
-msgid "Text [Color] used when the [Button] is being hovered."
+msgid ""
+"Text [Color] used when the [Button] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/Button.xml:80
-msgid "Text [Color] used when the [Button] is being pressed."
+msgid "Text [Color] used when the [Button] is being hovered."
msgstr ""
#: doc/classes/Button.xml:83
-msgid "[StyleBox] used when the [Button] is being hovered."
+msgid "Text [Color] used when the [Button] is being pressed."
msgstr ""
#: doc/classes/Button.xml:86
-msgid "The horizontal space between [Button]'s icon and text."
+msgid "[StyleBox] used when the [Button] is being hovered."
msgstr ""
#: doc/classes/Button.xml:89
-msgid "Default [StyleBox] for the [Button]."
+msgid "The horizontal space between [Button]'s icon and text."
msgstr ""
#: doc/classes/Button.xml:92
+msgid "Default [StyleBox] for the [Button]."
+msgstr ""
+
+#: doc/classes/Button.xml:95
msgid "[StyleBox] used when the [Button] is being pressed."
msgstr ""
@@ -12854,80 +12903,96 @@ msgstr ""
msgid "The check icon to display when the [CheckBox] is checked."
msgstr ""
-#: doc/classes/CheckBox.xml:30
+#: doc/classes/CheckBox.xml:28
+msgid "The check icon to display when the [CheckBox] is checked and disabled."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:31
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is disabled."
msgstr ""
-#: doc/classes/CheckBox.xml:33
+#: doc/classes/CheckBox.xml:34
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is focused."
msgstr ""
-#: doc/classes/CheckBox.xml:36
+#: doc/classes/CheckBox.xml:37
msgid "The [Font] to use for the [CheckBox] text."
msgstr ""
-#: doc/classes/CheckBox.xml:39
+#: doc/classes/CheckBox.xml:40
msgid "The [CheckBox] text's font color."
msgstr ""
-#: doc/classes/CheckBox.xml:42
+#: doc/classes/CheckBox.xml:43
msgid "The [CheckBox] text's font color when it's disabled."
msgstr ""
-#: doc/classes/CheckBox.xml:45
+#: doc/classes/CheckBox.xml:46
+msgid ""
+"The [CheckBox] text's font color when it's focused. Only replaces the normal "
+"text color of the checkbox. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:49
msgid "The [CheckBox] text's font color when it's hovered."
msgstr ""
-#: doc/classes/CheckBox.xml:48
+#: doc/classes/CheckBox.xml:52
msgid "The [CheckBox] text's font color when it's hovered and pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:51
+#: doc/classes/CheckBox.xml:55
msgid "The [CheckBox] text's font color when it's pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:54
+#: doc/classes/CheckBox.xml:58
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered."
msgstr ""
-#: doc/classes/CheckBox.xml:57
+#: doc/classes/CheckBox.xml:61
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered and "
"pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:60
+#: doc/classes/CheckBox.xml:64
msgid "The separation between the check icon and the text (in pixels)."
msgstr ""
-#: doc/classes/CheckBox.xml:63 doc/classes/CheckButton.xml:58
+#: doc/classes/CheckBox.xml:67 doc/classes/CheckButton.xml:61
msgid "The [StyleBox] to display as a background."
msgstr ""
-#: doc/classes/CheckBox.xml:66
+#: doc/classes/CheckBox.xml:70
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:69
+#: doc/classes/CheckBox.xml:73
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is checked."
msgstr ""
-#: doc/classes/CheckBox.xml:74
+#: doc/classes/CheckBox.xml:78
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is unchecked."
msgstr ""
-#: doc/classes/CheckBox.xml:79
+#: doc/classes/CheckBox.xml:83
msgid "The check icon to display when the [CheckBox] is unchecked."
msgstr ""
+#: doc/classes/CheckBox.xml:86
+msgid ""
+"The check icon to display when the [CheckBox] is unchecked and disabled."
+msgstr ""
+
#: doc/classes/CheckButton.xml:4
msgid "Checkable button. See also [CheckBox]."
msgstr ""
@@ -12971,49 +13036,56 @@ msgid "The [CheckButton] text's font color when it's disabled."
msgstr ""
#: doc/classes/CheckButton.xml:40
-msgid "The [CheckButton] text's font color when it's hovered."
+msgid ""
+"The [CheckButton] text's font color when it's focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/CheckButton.xml:43
-msgid "The [CheckButton] text's font color when it's hovered and pressed."
+msgid "The [CheckButton] text's font color when it's hovered."
msgstr ""
#: doc/classes/CheckButton.xml:46
-msgid "The [CheckButton] text's font color when it's pressed."
+msgid "The [CheckButton] text's font color when it's hovered and pressed."
msgstr ""
#: doc/classes/CheckButton.xml:49
+msgid "The [CheckButton] text's font color when it's pressed."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:52
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered."
msgstr ""
-#: doc/classes/CheckButton.xml:52
+#: doc/classes/CheckButton.xml:55
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered "
"and pressed."
msgstr ""
-#: doc/classes/CheckButton.xml:55
+#: doc/classes/CheckButton.xml:58
msgid "The separation between the toggle icon and the text (in pixels)."
msgstr ""
-#: doc/classes/CheckButton.xml:61
+#: doc/classes/CheckButton.xml:64
msgid "The icon to display when the [CheckButton] is unchecked."
msgstr ""
-#: doc/classes/CheckButton.xml:64
+#: doc/classes/CheckButton.xml:67
msgid "The icon to display when the [CheckButton] is unchecked and disabled."
msgstr ""
-#: doc/classes/CheckButton.xml:67
+#: doc/classes/CheckButton.xml:70
msgid "The icon to display when the [CheckButton] is checked."
msgstr ""
-#: doc/classes/CheckButton.xml:70
+#: doc/classes/CheckButton.xml:73
msgid "The icon to display when the [CheckButton] is checked and disabled."
msgstr ""
-#: doc/classes/CheckButton.xml:73
+#: doc/classes/CheckButton.xml:76
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is pressed."
msgstr ""
@@ -14789,26 +14861,33 @@ msgid "Text [Color] used when the [ColorPickerButton] is disabled."
msgstr ""
#: doc/classes/ColorPickerButton.xml:80
-msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
+msgid ""
+"Text [Color] used when the [ColorPickerButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/ColorPickerButton.xml:83
-msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
+msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
msgstr ""
#: doc/classes/ColorPickerButton.xml:86
-msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
+msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
msgstr ""
#: doc/classes/ColorPickerButton.xml:89
-msgid "The horizontal space between [ColorPickerButton]'s icon and text."
+msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
msgstr ""
#: doc/classes/ColorPickerButton.xml:92
-msgid "Default [StyleBox] for the [ColorPickerButton]."
+msgid "The horizontal space between [ColorPickerButton]'s icon and text."
msgstr ""
#: doc/classes/ColorPickerButton.xml:95
+msgid "Default [StyleBox] for the [ColorPickerButton]."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:98
msgid "[StyleBox] used when the [ColorPickerButton] is being pressed."
msgstr ""
@@ -20042,7 +20121,8 @@ msgid ""
"get_resource_type]. They may optionally specify some import presets that "
"affect the import process. EditorImportPlugins are responsible for creating "
"the resources and saving them in the [code].import[/code] directory (see "
-"[member ProjectSettings.application/config/project_data_dir_name]).\n"
+"[member ProjectSettings.application/config/"
+"use_hidden_project_data_directory]).\n"
"Below is an example EditorImportPlugin that imports a [Mesh] from a file "
"with the extension \".special\" or \".spec\":\n"
"[codeblock]\n"
@@ -20169,7 +20249,7 @@ msgstr ""
msgid ""
"Gets the extension used to save this resource in the [code].import[/code] "
"directory (see [member ProjectSettings.application/config/"
-"project_data_dir_name])."
+"use_hidden_project_data_directory])."
msgstr ""
#: doc/classes/EditorImportPlugin.xml:130
@@ -21204,8 +21284,11 @@ msgstr ""
msgid "Emitted when the value of the edited resource was changed."
msgstr ""
-#: doc/classes/EditorResourcePicker.xml:89
-msgid "Emitted when the resource value was set and user clicked to edit it."
+#: doc/classes/EditorResourcePicker.xml:90
+msgid ""
+"Emitted when the resource value was set and user clicked to edit it. When "
+"[code]edit[/code] is [code]true[/code], the signal was caused by the context "
+"menu \"Edit\" option."
msgstr ""
#: doc/classes/EditorResourcePreview.xml:4
@@ -24955,21 +25038,32 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr "https://docs.godotengine.org/uk/latest/tutorials/3d/gi_probes.html"
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -24978,14 +25072,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -24995,80 +25093,80 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
msgstr ""
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr ""
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -27824,16 +27922,18 @@ msgstr ""
#: doc/classes/Image.xml:436
msgid ""
"OpenGL texture format [code]RED[/code] with a single component and a "
-"bitdepth of 8."
+"bitdepth of 8.\n"
+"[b]Note:[/b] When using the GLES2 backend, this uses the alpha channel "
+"instead of the red channel for storage."
msgstr ""
-#: doc/classes/Image.xml:439
+#: doc/classes/Image.xml:440
msgid ""
"OpenGL texture format [code]RG[/code] with two components and a bitdepth of "
"8 for each."
msgstr ""
-#: doc/classes/Image.xml:442
+#: doc/classes/Image.xml:443
msgid ""
"OpenGL texture format [code]RGB[/code] with three components, each with a "
"bitdepth of 8.\n"
@@ -27841,7 +27941,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:446
+#: doc/classes/Image.xml:447
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 8.\n"
@@ -27849,73 +27949,73 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:450
+#: doc/classes/Image.xml:451
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 4."
msgstr ""
-#: doc/classes/Image.xml:453
+#: doc/classes/Image.xml:454
msgid ""
"OpenGL texture format [code]GL_RGB5_A1[/code] where 5 bits of depth for each "
"component of RGB and one bit for alpha."
msgstr ""
-#: doc/classes/Image.xml:456
+#: doc/classes/Image.xml:457
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 32-"
"bit floating-point value."
msgstr ""
-#: doc/classes/Image.xml:459
+#: doc/classes/Image.xml:460
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:462
+#: doc/classes/Image.xml:463
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:465
+#: doc/classes/Image.xml:466
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:468
+#: doc/classes/Image.xml:469
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 16-"
"bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:471
+#: doc/classes/Image.xml:472
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:474
+#: doc/classes/Image.xml:475
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:477
+#: doc/classes/Image.xml:478
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:480
+#: doc/classes/Image.xml:481
msgid ""
"A special OpenGL texture format where the three color components have 9 bits "
"of precision and all three share a single 5-bit exponent."
msgstr ""
-#: doc/classes/Image.xml:483
+#: doc/classes/Image.xml:484
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 1, and is the smallest variation "
@@ -27925,7 +28025,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:487
+#: doc/classes/Image.xml:488
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 2, and color data is interpreted "
@@ -27935,7 +28035,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:491
+#: doc/classes/Image.xml:492
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format also known as Block Compression 3 or BC3 that contains 64 "
@@ -27946,7 +28046,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:495
+#: doc/classes/Image.xml:496
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -27954,7 +28054,7 @@ msgid ""
"DXT5 uses for the alpha channel."
msgstr ""
-#: doc/classes/Image.xml:498
+#: doc/classes/Image.xml:499
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -27962,7 +28062,7 @@ msgid ""
"algorithm that DXT5 uses for the alpha channel."
msgstr ""
-#: doc/classes/Image.xml:501
+#: doc/classes/Image.xml:502
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned normalized "
@@ -27971,21 +28071,21 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:505
+#: doc/classes/Image.xml:506
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with signed floating-point "
"RGB components."
msgstr ""
-#: doc/classes/Image.xml:508
+#: doc/classes/Image.xml:509
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned floating-point "
"RGB components."
msgstr ""
-#: doc/classes/Image.xml:511
+#: doc/classes/Image.xml:512
msgid ""
"Texture format used on PowerVR-supported mobile platforms, uses 2-bit color "
"depth with no alpha. More information can be found [url=https://en.wikipedia."
@@ -27994,25 +28094,25 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:515
+#: doc/classes/Image.xml:516
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with an "
"alpha component."
msgstr ""
-#: doc/classes/Image.xml:518
+#: doc/classes/Image.xml:519
msgid ""
"Similar to [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with 4-"
"bit color depth and no alpha."
msgstr ""
-#: doc/classes/Image.xml:521
+#: doc/classes/Image.xml:522
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC4[/url], but with an "
"alpha component."
msgstr ""
-#: doc/classes/Image.xml:524
+#: doc/classes/Image.xml:525
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC1]Ericsson Texture Compression format 1[/"
@@ -28020,7 +28120,7 @@ msgid ""
"standard. This format cannot store an alpha channel."
msgstr ""
-#: doc/classes/Image.xml:527
+#: doc/classes/Image.xml:528
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28028,7 +28128,7 @@ msgid ""
"unsigned data."
msgstr ""
-#: doc/classes/Image.xml:530
+#: doc/classes/Image.xml:531
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28036,7 +28136,7 @@ msgid ""
"channel of signed data."
msgstr ""
-#: doc/classes/Image.xml:533
+#: doc/classes/Image.xml:534
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28044,7 +28144,7 @@ msgid ""
"of unsigned data."
msgstr ""
-#: doc/classes/Image.xml:536
+#: doc/classes/Image.xml:537
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28052,7 +28152,7 @@ msgid ""
"channels of signed data."
msgstr ""
-#: doc/classes/Image.xml:539
+#: doc/classes/Image.xml:540
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28062,7 +28162,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:543
+#: doc/classes/Image.xml:544
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28072,7 +28172,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:547
+#: doc/classes/Image.xml:548
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28083,31 +28183,31 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:551
+#: doc/classes/Image.xml:552
msgid "Represents the size of the [enum Format] enum."
msgstr ""
-#: doc/classes/Image.xml:554
+#: doc/classes/Image.xml:555
msgid ""
"Performs nearest-neighbor interpolation. If the image is resized, it will be "
"pixelated."
msgstr ""
-#: doc/classes/Image.xml:557
+#: doc/classes/Image.xml:558
msgid ""
"Performs bilinear interpolation. If the image is resized, it will be blurry. "
"This mode is faster than [constant INTERPOLATE_CUBIC], but it results in "
"lower quality."
msgstr ""
-#: doc/classes/Image.xml:560
+#: doc/classes/Image.xml:561
msgid ""
"Performs cubic interpolation. If the image is resized, it will be blurry. "
"This mode often gives better results compared to [constant "
"INTERPOLATE_BILINEAR], at the cost of being slower."
msgstr ""
-#: doc/classes/Image.xml:563
+#: doc/classes/Image.xml:564
msgid ""
"Performs bilinear separately on the two most-suited mipmap levels, then "
"linearly interpolates between them.\n"
@@ -28122,55 +28222,55 @@ msgid ""
"a new set will be generated for the resulting image."
msgstr ""
-#: doc/classes/Image.xml:570
+#: doc/classes/Image.xml:571
msgid ""
"Performs Lanczos interpolation. This is the slowest image resizing mode, but "
"it typically gives the best results, especially when downscalng images."
msgstr ""
-#: doc/classes/Image.xml:573
+#: doc/classes/Image.xml:574
msgid "Image does not have alpha."
msgstr ""
-#: doc/classes/Image.xml:576
+#: doc/classes/Image.xml:577
msgid "Image stores alpha in a single bit."
msgstr ""
-#: doc/classes/Image.xml:579
+#: doc/classes/Image.xml:580
msgid "Image uses alpha."
msgstr ""
-#: doc/classes/Image.xml:582
+#: doc/classes/Image.xml:583
msgid "Use S3TC compression."
msgstr ""
-#: doc/classes/Image.xml:585
+#: doc/classes/Image.xml:586
msgid "Use PVRTC2 compression."
msgstr ""
-#: doc/classes/Image.xml:588
+#: doc/classes/Image.xml:589
msgid "Use PVRTC4 compression."
msgstr ""
-#: doc/classes/Image.xml:591
+#: doc/classes/Image.xml:592
msgid "Use ETC compression."
msgstr ""
-#: doc/classes/Image.xml:594
+#: doc/classes/Image.xml:595
msgid "Use ETC2 compression."
msgstr ""
-#: doc/classes/Image.xml:597
+#: doc/classes/Image.xml:598
msgid ""
"Source texture (before compression) is a regular texture. Default for all "
"textures."
msgstr ""
-#: doc/classes/Image.xml:600
+#: doc/classes/Image.xml:601
msgid "Source texture (before compression) is in sRGB space."
msgstr ""
-#: doc/classes/Image.xml:603
+#: doc/classes/Image.xml:604
msgid ""
"Source texture (before compression) is a normal texture (e.g. it can be "
"compressed into two channels)."
@@ -28395,6 +28495,17 @@ msgstr ""
#: doc/classes/Input.xml:43
msgid ""
+"Sends all input events which are in the current buffer to the game loop. "
+"These events may have been buffered as a result of accumulated input "
+"([method set_use_accumulated_input]) or agile input flushing ([member "
+"ProjectSettings.input_devices/buffering/agile_event_flushing]).\n"
+"The engine will already do this itself at key execution points (at least "
+"once per frame). However, this can be useful in advanced cases where you "
+"want precise control over the timing of event handling."
+msgstr ""
+
+#: doc/classes/Input.xml:50
+msgid ""
"Returns the acceleration of the device's accelerometer sensor, if the device "
"has one. Otherwise, the method returns [constant Vector3.ZERO].\n"
"Note this method returns an empty [Vector3] when running from the editor "
@@ -28406,7 +28517,7 @@ msgid ""
"the Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:53
+#: doc/classes/Input.xml:60
msgid ""
"Returns a value between 0 and 1 representing the raw intensity of the given "
"action, ignoring the action's deadzone. In most cases, you should use "
@@ -28416,7 +28527,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:62
+#: doc/classes/Input.xml:69
msgid ""
"Returns a value between 0 and 1 representing the intensity of the given "
"action. In a joypad, for example, the further away the axis (analog sticks "
@@ -28428,7 +28539,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:71
+#: doc/classes/Input.xml:78
msgid ""
"Get axis input by specifying two actions, one negative and one positive.\n"
"This is a shorthand for writing [code]Input."
@@ -28436,17 +28547,17 @@ msgid ""
"get_action_strength(\"negative_action\")[/code]."
msgstr ""
-#: doc/classes/Input.xml:78
+#: doc/classes/Input.xml:85
msgid ""
"Returns an [Array] containing the device IDs of all currently connected "
"joypads."
msgstr ""
-#: doc/classes/Input.xml:84
+#: doc/classes/Input.xml:91
msgid "Returns the currently assigned cursor shape (see [enum CursorShape])."
msgstr ""
-#: doc/classes/Input.xml:90
+#: doc/classes/Input.xml:97
msgid ""
"Returns the gravity of the device's accelerometer sensor, if the device has "
"one. Otherwise, the method returns [constant Vector3.ZERO].\n"
@@ -28456,7 +28567,7 @@ msgid ""
"Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:97
+#: doc/classes/Input.xml:104
msgid ""
"Returns the rotation rate in rad/s around a device's X, Y, and Z axes of the "
"gyroscope sensor, if the device has one. Otherwise, the method returns "
@@ -28465,53 +28576,53 @@ msgid ""
"it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:106
+#: doc/classes/Input.xml:113
msgid ""
"Returns the current value of the joypad axis at given index (see [enum "
"JoystickList])."
msgstr ""
-#: doc/classes/Input.xml:113
+#: doc/classes/Input.xml:120
msgid "Returns the index of the provided axis name."
msgstr ""
-#: doc/classes/Input.xml:120
+#: doc/classes/Input.xml:127
msgid ""
"Receives a [enum JoystickList] axis and returns its equivalent name as a "
"string."
msgstr ""
-#: doc/classes/Input.xml:127
+#: doc/classes/Input.xml:134
msgid "Returns the index of the provided button name."
msgstr ""
-#: doc/classes/Input.xml:134
+#: doc/classes/Input.xml:141
msgid ""
"Receives a gamepad button from [enum JoystickList] and returns its "
"equivalent name as a string."
msgstr ""
-#: doc/classes/Input.xml:141
+#: doc/classes/Input.xml:148
msgid ""
"Returns a SDL2-compatible device GUID on platforms that use gamepad "
"remapping. Returns [code]\"Default Gamepad\"[/code] otherwise."
msgstr ""
-#: doc/classes/Input.xml:148
+#: doc/classes/Input.xml:155
msgid "Returns the name of the joypad at the specified device index."
msgstr ""
-#: doc/classes/Input.xml:155
+#: doc/classes/Input.xml:162
msgid "Returns the duration of the current vibration effect in seconds."
msgstr ""
-#: doc/classes/Input.xml:162
+#: doc/classes/Input.xml:169
msgid ""
"Returns the strength of the joypad vibration: x is the strength of the weak "
"motor, and y is the strength of the strong motor."
msgstr ""
-#: doc/classes/Input.xml:168
+#: doc/classes/Input.xml:175
msgid ""
"Returns the mouse speed for the last time the cursor was moved, and this "
"until the next frame where the mouse moves. This means that even if the "
@@ -28519,7 +28630,7 @@ msgid ""
"motion."
msgstr ""
-#: doc/classes/Input.xml:174
+#: doc/classes/Input.xml:181
msgid ""
"Returns the magnetic field strength in micro-Tesla for all axes of the "
"device's magnetometer sensor, if the device has one. Otherwise, the method "
@@ -28528,17 +28639,17 @@ msgid ""
"platforms, it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:181
+#: doc/classes/Input.xml:188
msgid ""
"Returns mouse buttons as a bitmask. If multiple mouse buttons are pressed at "
"the same time, the bits are added together."
msgstr ""
-#: doc/classes/Input.xml:187
+#: doc/classes/Input.xml:194
msgid "Returns the mouse mode. See the constants for more information."
msgstr ""
-#: doc/classes/Input.xml:198
+#: doc/classes/Input.xml:205
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -28551,7 +28662,7 @@ msgid ""
"want (on the range of 0 to 1)."
msgstr ""
-#: doc/classes/Input.xml:208
+#: doc/classes/Input.xml:215
msgid ""
"Returns [code]true[/code] when the user starts pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user pressed down "
@@ -28563,7 +28674,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:218
+#: doc/classes/Input.xml:225
msgid ""
"Returns [code]true[/code] when the user stops pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user released the "
@@ -28573,7 +28684,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:227
+#: doc/classes/Input.xml:234
msgid ""
"Returns [code]true[/code] if you are pressing the action event. Note that if "
"an action has multiple buttons assigned and more than one of them is "
@@ -28584,13 +28695,13 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:236
+#: doc/classes/Input.xml:243
msgid ""
"Returns [code]true[/code] if you are pressing the joypad button (see [enum "
"JoystickList])."
msgstr ""
-#: doc/classes/Input.xml:243
+#: doc/classes/Input.xml:250
msgid ""
"Returns [code]true[/code] if the system knows the specified device. This "
"means that it sets all button and axis indices exactly as defined in [enum "
@@ -28598,19 +28709,19 @@ msgid ""
"but you can still retrieve events from them."
msgstr ""
-#: doc/classes/Input.xml:250
+#: doc/classes/Input.xml:257
msgid ""
"Returns [code]true[/code] if you are pressing the key. You can pass a [enum "
"KeyList] constant."
msgstr ""
-#: doc/classes/Input.xml:257
+#: doc/classes/Input.xml:264
msgid ""
"Returns [code]true[/code] if you are pressing the mouse button specified "
"with [enum ButtonList]."
msgstr ""
-#: doc/classes/Input.xml:267
+#: doc/classes/Input.xml:274
msgid ""
"Notifies the [Input] singleton that a connection has changed, to update the "
"state for the [code]device[/code] index.\n"
@@ -28619,7 +28730,7 @@ msgid ""
"triggered internally."
msgstr ""
-#: doc/classes/Input.xml:275
+#: doc/classes/Input.xml:282
msgid ""
"Feeds an [InputEvent] to the game. Can be used to artificially trigger input "
"events from code. Also generates [method Node._input] calls.\n"
@@ -28632,12 +28743,21 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Input.xml:289
+#: doc/classes/Input.xml:296
msgid ""
"Removes all mappings from the internal database that match the given GUID."
msgstr ""
-#: doc/classes/Input.xml:298
+#: doc/classes/Input.xml:303
+msgid ""
+"Sets the acceleration value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:313
msgid ""
"Sets a custom mouse cursor image, which is only visible inside the game "
"window. The hotspot can also be specified. Passing [code]null[/code] to the "
@@ -28652,7 +28772,7 @@ msgid ""
"compression mode can't be used for custom cursors."
msgstr ""
-#: doc/classes/Input.xml:309
+#: doc/classes/Input.xml:324
msgid ""
"Sets the default cursor shape to be used in the viewport instead of "
"[constant CURSOR_ARROW].\n"
@@ -28662,11 +28782,38 @@ msgid ""
"cursor immediately."
msgstr ""
-#: doc/classes/Input.xml:318
+#: doc/classes/Input.xml:333
+msgid ""
+"Sets the gravity value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:341
+msgid ""
+"Sets the value of the rotation rate of the gyroscope sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:349
+msgid ""
+"Sets the value of the magnetic field of the magnetometer sensor. Can be used "
+"for debugging on devices without a hardware sensor, for example in an editor "
+"on a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:357
msgid "Sets the mouse mode. See the constants for more information."
msgstr ""
-#: doc/classes/Input.xml:325
+#: doc/classes/Input.xml:364
msgid ""
"Enables or disables the accumulation of similar input events sent by the "
"operating system. When input accumulation is enabled, all input events "
@@ -28680,7 +28827,7 @@ msgid ""
"results that closely follow the actual input."
msgstr ""
-#: doc/classes/Input.xml:336
+#: doc/classes/Input.xml:375
msgid ""
"Starts to vibrate the joypad. Joypads usually come with two rumble motors, a "
"strong and a weak one. [code]weak_magnitude[/code] is the strength of the "
@@ -28693,34 +28840,34 @@ msgid ""
"few seconds."
msgstr ""
-#: doc/classes/Input.xml:344
+#: doc/classes/Input.xml:383
msgid "Stops the vibration of the joypad."
msgstr ""
-#: doc/classes/Input.xml:351
+#: doc/classes/Input.xml:390
msgid ""
"Vibrate Android and iOS devices.\n"
"[b]Note:[/b] It needs [code]VIBRATE[/code] permission for Android at export "
"settings. iOS does not support duration."
msgstr ""
-#: doc/classes/Input.xml:359
+#: doc/classes/Input.xml:398
msgid "Sets the mouse position to the specified vector."
msgstr ""
-#: doc/classes/Input.xml:368
+#: doc/classes/Input.xml:407
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
-#: doc/classes/Input.xml:374
+#: doc/classes/Input.xml:413
msgid "Makes the mouse cursor visible if it is hidden."
msgstr ""
-#: doc/classes/Input.xml:377
+#: doc/classes/Input.xml:416
msgid "Makes the mouse cursor hidden if it is visible."
msgstr ""
-#: doc/classes/Input.xml:380
+#: doc/classes/Input.xml:419
msgid ""
"Captures the mouse. The mouse will be hidden and its position locked at the "
"center of the screen.\n"
@@ -28728,83 +28875,83 @@ msgid ""
"need to use [member InputEventMouseMotion.relative]."
msgstr ""
-#: doc/classes/Input.xml:384
+#: doc/classes/Input.xml:423
msgid "Makes the mouse cursor visible but confines it to the game window."
msgstr ""
-#: doc/classes/Input.xml:387
+#: doc/classes/Input.xml:426
msgid "Arrow cursor. Standard, default pointing cursor."
msgstr ""
-#: doc/classes/Input.xml:390
+#: doc/classes/Input.xml:429
msgid ""
"I-beam cursor. Usually used to show where the text cursor will appear when "
"the mouse is clicked."
msgstr ""
-#: doc/classes/Input.xml:393
+#: doc/classes/Input.xml:432
msgid ""
"Pointing hand cursor. Usually used to indicate the pointer is over a link or "
"other interactable item."
msgstr ""
-#: doc/classes/Input.xml:396
+#: doc/classes/Input.xml:435
msgid ""
"Cross cursor. Typically appears over regions in which a drawing operation "
"can be performed or for selections."
msgstr ""
-#: doc/classes/Input.xml:399
+#: doc/classes/Input.xml:438
msgid ""
"Wait cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application is still usable during the "
"operation."
msgstr ""
-#: doc/classes/Input.xml:402
+#: doc/classes/Input.xml:441
msgid ""
"Busy cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application isn't usable during the "
"operation (e.g. something is blocking its main thread)."
msgstr ""
-#: doc/classes/Input.xml:405
+#: doc/classes/Input.xml:444
msgid "Drag cursor. Usually displayed when dragging something."
msgstr ""
-#: doc/classes/Input.xml:408
+#: doc/classes/Input.xml:447
msgid ""
"Can drop cursor. Usually displayed when dragging something to indicate that "
"it can be dropped at the current position."
msgstr ""
-#: doc/classes/Input.xml:411
+#: doc/classes/Input.xml:450
msgid ""
"Forbidden cursor. Indicates that the current action is forbidden (for "
"example, when dragging something) or that the control at a position is "
"disabled."
msgstr ""
-#: doc/classes/Input.xml:414
+#: doc/classes/Input.xml:453
msgid ""
"Vertical resize mouse cursor. A double-headed vertical arrow. It tells the "
"user they can resize the window or the panel vertically."
msgstr ""
-#: doc/classes/Input.xml:417
+#: doc/classes/Input.xml:456
msgid ""
"Horizontal resize mouse cursor. A double-headed horizontal arrow. It tells "
"the user they can resize the window or the panel horizontally."
msgstr ""
-#: doc/classes/Input.xml:420
+#: doc/classes/Input.xml:459
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the bottom left to the top right. It tells the user they can resize the "
"window or the panel both horizontally and vertically."
msgstr ""
-#: doc/classes/Input.xml:423
+#: doc/classes/Input.xml:462
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the top left to the bottom right, the opposite of [constant "
@@ -28812,23 +28959,23 @@ msgid ""
"both horizontally and vertically."
msgstr ""
-#: doc/classes/Input.xml:426
+#: doc/classes/Input.xml:465
msgid "Move cursor. Indicates that something can be moved."
msgstr ""
-#: doc/classes/Input.xml:429
+#: doc/classes/Input.xml:468
msgid ""
"Vertical split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_VSIZE]."
msgstr ""
-#: doc/classes/Input.xml:432
+#: doc/classes/Input.xml:471
msgid ""
"Horizontal split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_HSIZE]."
msgstr ""
-#: doc/classes/Input.xml:435
+#: doc/classes/Input.xml:474
msgid "Help cursor. Usually a question mark."
msgstr ""
@@ -29244,7 +29391,9 @@ msgid "The drag position."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -30557,7 +30706,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30622,22 +30772,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -30652,7 +30804,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -30660,19 +30812,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -30743,7 +30895,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30801,7 +30954,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -32088,14 +32243,21 @@ msgid "Default text [Color] of the [LinkButton]."
msgstr ""
#: doc/classes/LinkButton.xml:46
-msgid "Text [Color] used when the [LinkButton] is being hovered."
+msgid ""
+"Text [Color] used when the [LinkButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/LinkButton.xml:49
-msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgid "Text [Color] used when the [LinkButton] is being hovered."
msgstr ""
#: doc/classes/LinkButton.xml:52
+msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:55
msgid "The vertical space between the baseline of text and the underline."
msgstr ""
@@ -32588,26 +32750,33 @@ msgid "Text [Color] used when the [MenuButton] is disabled."
msgstr ""
#: doc/classes/MenuButton.xml:64
-msgid "Text [Color] used when the [MenuButton] is being hovered."
+msgid ""
+"Text [Color] used when the [MenuButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/MenuButton.xml:67
-msgid "Text [Color] used when the [MenuButton] is being pressed."
+msgid "Text [Color] used when the [MenuButton] is being hovered."
msgstr ""
#: doc/classes/MenuButton.xml:70
-msgid "[StyleBox] used when the [MenuButton] is being hovered."
+msgid "Text [Color] used when the [MenuButton] is being pressed."
msgstr ""
#: doc/classes/MenuButton.xml:73
-msgid "The horizontal space between [MenuButton]'s icon and text."
+msgid "[StyleBox] used when the [MenuButton] is being hovered."
msgstr ""
#: doc/classes/MenuButton.xml:76
-msgid "Default [StyleBox] for the [MenuButton]."
+msgid "The horizontal space between [MenuButton]'s icon and text."
msgstr ""
#: doc/classes/MenuButton.xml:79
+msgid "Default [StyleBox] for the [MenuButton]."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:82
msgid "[StyleBox] used when the [MenuButton] is being pressed."
msgstr ""
@@ -34342,7 +34511,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -37226,26 +37395,33 @@ msgid "Text [Color] used when the [OptionButton] is disabled."
msgstr ""
#: doc/classes/OptionButton.xml:212
-msgid "Text [Color] used when the [OptionButton] is being hovered."
+msgid ""
+"Text [Color] used when the [OptionButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/OptionButton.xml:215
-msgid "Text [Color] used when the [OptionButton] is being pressed."
+msgid "Text [Color] used when the [OptionButton] is being hovered."
msgstr ""
#: doc/classes/OptionButton.xml:218
-msgid "[StyleBox] used when the [OptionButton] is being hovered."
+msgid "Text [Color] used when the [OptionButton] is being pressed."
msgstr ""
#: doc/classes/OptionButton.xml:221
-msgid "The horizontal space between [OptionButton]'s icon and text."
+msgid "[StyleBox] used when the [OptionButton] is being hovered."
msgstr ""
#: doc/classes/OptionButton.xml:224
-msgid "Default [StyleBox] for the [OptionButton]."
+msgid "The horizontal space between [OptionButton]'s icon and text."
msgstr ""
#: doc/classes/OptionButton.xml:227
+msgid "Default [StyleBox] for the [OptionButton]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:230
msgid "[StyleBox] used when the [OptionButton] is being pressed."
msgstr ""
@@ -37651,7 +37827,7 @@ msgstr ""
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -37681,14 +37857,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -37698,7 +37874,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -40201,17 +40377,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -40229,11 +40431,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -40428,7 +40630,9 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-msgid "Returns the [Physics2DDirectBodyState] of the body."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
@@ -41231,6 +41435,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -41248,7 +41470,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -41362,7 +41584,9 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-msgid "Returns the [PhysicsDirectBodyState] of the body."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/PhysicsServer.xml:370
@@ -42344,27 +42568,27 @@ msgstr ""
msgid "Removes an element from the array by index."
msgstr ""
-#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolColorArray.xml:66
-#: doc/classes/PoolIntArray.xml:67 doc/classes/PoolRealArray.xml:67
-#: doc/classes/PoolStringArray.xml:74 doc/classes/PoolVector2Array.xml:67
-#: doc/classes/PoolVector3Array.xml:66
+#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolIntArray.xml:67
+#: doc/classes/PoolRealArray.xml:67
msgid ""
"Sets the size of the array. If the array is grown, reserves elements at the "
"end of the array. If the array is shrunk, truncates the array to the new "
-"size."
+"size.\n"
+"[b]Note:[/b] Added elements are not automatically initialized to 0 and will "
+"contain garbage, i.e. indeterminate values."
msgstr ""
-#: doc/classes/PoolByteArray.xml:121
+#: doc/classes/PoolByteArray.xml:122
msgid "Changes the byte at the given index."
msgstr ""
-#: doc/classes/PoolByteArray.xml:127 doc/classes/PoolColorArray.xml:79
-#: doc/classes/PoolRealArray.xml:80 doc/classes/PoolStringArray.xml:87
+#: doc/classes/PoolByteArray.xml:128 doc/classes/PoolColorArray.xml:79
+#: doc/classes/PoolRealArray.xml:81 doc/classes/PoolStringArray.xml:87
#: doc/classes/PoolVector2Array.xml:80 doc/classes/PoolVector3Array.xml:79
msgid "Returns the size of the array."
msgstr ""
-#: doc/classes/PoolByteArray.xml:135
+#: doc/classes/PoolByteArray.xml:136
msgid ""
"Returns the slice of the [PoolByteArray] between indices (inclusive) as a "
"new [PoolByteArray]. Any negative index is considered to be from the end of "
@@ -42396,6 +42620,14 @@ msgstr ""
msgid "Appends a value to the array."
msgstr ""
+#: doc/classes/PoolColorArray.xml:66 doc/classes/PoolStringArray.xml:74
+#: doc/classes/PoolVector2Array.xml:67 doc/classes/PoolVector3Array.xml:66
+msgid ""
+"Sets the size of the array. If the array is grown, reserves elements at the "
+"end of the array. If the array is shrunk, truncates the array to the new "
+"size."
+msgstr ""
+
#: doc/classes/PoolColorArray.xml:73
msgid "Changes the [Color] at the given index."
msgstr ""
@@ -42432,11 +42664,11 @@ msgid ""
"valid, or at the end of the array ([code]idx == size()[/code])."
msgstr ""
-#: doc/classes/PoolIntArray.xml:74
+#: doc/classes/PoolIntArray.xml:75
msgid "Changes the int at the given index."
msgstr ""
-#: doc/classes/PoolIntArray.xml:80
+#: doc/classes/PoolIntArray.xml:81
msgid "Returns the array size."
msgstr ""
@@ -42468,7 +42700,7 @@ msgstr ""
msgid "Appends a [PoolRealArray] at the end of this array."
msgstr ""
-#: doc/classes/PoolRealArray.xml:74
+#: doc/classes/PoolRealArray.xml:75
msgid "Changes the float at the given index."
msgstr ""
@@ -43735,18 +43967,6 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:204
msgid ""
-"The project data directory is used for storing project-specific data "
-"(metadata, shader cache, etc.).\n"
-"[b]Note:[/b] Restart the application after changing this setting.\n"
-"[b]Note:[/b] Changing this value can help on platforms or with third-party "
-"tools where specific directory patterns are disallowed. Only modify this "
-"setting if you know that your environment requires it, as changing the "
-"default can impact compatibility with some external tools or plugins which "
-"expect the default [code].import[/code] folder."
-msgstr ""
-
-#: doc/classes/ProjectSettings.xml:209
-msgid ""
"Specifies a file to override project settings. For example: [code]user://"
"custom_settings.cfg[/code]. See \"Overriding\" in the [ProjectSettings] "
"class description at the top for more information.\n"
@@ -43754,7 +43974,7 @@ msgid ""
"code] will still be read to override the project settings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:213
+#: doc/classes/ProjectSettings.xml:208
msgid ""
"If [code]true[/code], the project will save user data to its own user "
"directory (see [member application/config/custom_user_dir_name]). This "
@@ -43764,13 +43984,28 @@ msgid ""
"user data directory)/Godot/app_userdata/(project name)[/code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:216
+#: doc/classes/ProjectSettings.xml:211
+msgid ""
+"If [code]true[/code], the project will use a hidden directory ([code]."
+"import[/code]) for storing project-specific data (metadata, shader cache, "
+"etc.).\n"
+"If [code]false[/code], a non-hidden directory ([code]import[/code]) will be "
+"used instead.\n"
+"[b]Note:[/b] Restart the application after changing this setting.\n"
+"[b]Note:[/b] Changing this value can help on platforms or with third-party "
+"tools where hidden directory patterns are disallowed. Only modify this "
+"setting if you know that your environment requires it, as changing the "
+"default can impact compatibility with some external tools or plugins which "
+"expect the default [code].import[/code] folder."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:217
msgid ""
"Icon set in [code].ico[/code] format used on Windows to set the game's icon. "
"This is done automatically on start by calling [method OS.set_native_icon]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:219
+#: doc/classes/ProjectSettings.xml:220
msgid ""
"Time samples for frame deltas are subject to random variation introduced by "
"the platform, even when frames are displayed at regular intervals thanks to "
@@ -43784,14 +44019,14 @@ msgid ""
"adequate to render frames at the refresh rate."
msgstr ""
-#: doc/classes/ProjectSettings.xml:224
+#: doc/classes/ProjectSettings.xml:225
msgid ""
"[b]Experimental.[/b] Shifts the measurement of delta time for each frame to "
"just after the drawing has taken place. This may lead to more consistent "
"deltas and a reduction in frame stutters."
msgstr ""
-#: doc/classes/ProjectSettings.xml:227
+#: doc/classes/ProjectSettings.xml:228
msgid ""
"If [code]true[/code], disables printing to standard error. If [code]true[/"
"code], this also hides error and warning messages printed by [method "
@@ -43800,7 +44035,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:231
+#: doc/classes/ProjectSettings.xml:232
msgid ""
"If [code]true[/code], disables printing to standard output. This is "
"equivalent to starting the editor or project with the [code]--quiet[/code] "
@@ -43808,7 +44043,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:235
+#: doc/classes/ProjectSettings.xml:236
msgid ""
"If [code]true[/code], flushes the standard output stream every time a line "
"is printed. This affects both terminal logging and file logging.\n"
@@ -43824,20 +44059,20 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:241
+#: doc/classes/ProjectSettings.xml:242
msgid ""
"Debug build override for [member application/run/flush_stdout_on_print], as "
"performance is less important during debugging.\n"
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:245
+#: doc/classes/ProjectSettings.xml:246
msgid ""
"Forces a delay between frames in the main loop (in milliseconds). This may "
"be useful if you plan to disable vertical synchronization."
msgstr ""
-#: doc/classes/ProjectSettings.xml:248
+#: doc/classes/ProjectSettings.xml:249
msgid ""
"If [code]true[/code], enables low-processor usage mode. This setting only "
"works on desktop platforms. The screen is not redrawn if nothing changes "
@@ -43845,75 +44080,81 @@ msgid ""
"useless (and can hurt performance) in most games."
msgstr ""
-#: doc/classes/ProjectSettings.xml:251
+#: doc/classes/ProjectSettings.xml:252
msgid ""
"Amount of sleeping between frames when the low-processor usage mode is "
"enabled (in microseconds). Higher values will result in lower CPU usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:254
+#: doc/classes/ProjectSettings.xml:255
msgid "Path to the main scene file that will be loaded when the project runs."
msgstr ""
-#: doc/classes/ProjectSettings.xml:257 doc/classes/ProjectSettings.xml:260
+#: doc/classes/ProjectSettings.xml:258 doc/classes/ProjectSettings.xml:261
msgid ""
"Audio buses will disable automatically when sound goes below a given dB "
"threshold for a given time. This saves CPU as effects assigned to that bus "
"will no longer do any processing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:263
+#: doc/classes/ProjectSettings.xml:264
msgid ""
"Default [AudioBusLayout] resource file to use in the project, unless "
"overridden by the scene."
msgstr ""
-#: doc/classes/ProjectSettings.xml:266
+#: doc/classes/ProjectSettings.xml:267
msgid ""
"Specifies the audio driver to use. This setting is platform-dependent as "
"each platform supports different audio drivers. If left empty, the default "
"audio driver will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:269
+#: doc/classes/ProjectSettings.xml:270
msgid ""
"If [code]true[/code], microphone input will be allowed. This requires "
"appropriate permissions to be set when exporting to Android or iOS."
msgstr ""
-#: doc/classes/ProjectSettings.xml:272
+#: doc/classes/ProjectSettings.xml:273
msgid ""
"The mixing rate used for audio (in Hz). In general, it's better to not touch "
"this and leave it to the host operating system."
msgstr ""
-#: doc/classes/ProjectSettings.xml:275
+#: doc/classes/ProjectSettings.xml:276
msgid ""
"Safer override for [member audio/mix_rate] in the Web platform. Here "
"[code]0[/code] means \"let the browser choose\" (since some browsers do not "
"like forcing the mix rate)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:278
+#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:281
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:284
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:287
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43923,7 +44164,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:290
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43933,27 +44174,27 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:293
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:296
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
-#: doc/classes/ProjectSettings.xml:299
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:302
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -43961,81 +44202,81 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:305
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:308
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:311
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:314
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:317
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr ""
-#: doc/classes/ProjectSettings.xml:320
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:323
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:326
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:329
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:332
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:335
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:338
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:341
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -44043,109 +44284,109 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:344
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:347
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:350
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:353
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:356
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:359
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:362
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:365
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:368
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:371
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:374
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:377
+#: doc/classes/ProjectSettings.xml:380
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:380
+#: doc/classes/ProjectSettings.xml:383
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:383
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:386
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:389
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:392
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:395
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:398
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -44156,91 +44397,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:403
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:406
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:409
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:412
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:415
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:418
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:421
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:424
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:427
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:430
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:433
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:436
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:439
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr ""
-#: doc/classes/ProjectSettings.xml:442
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:445
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:448
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:451
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -44249,13 +44490,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:455
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:458
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -44265,7 +44506,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:463
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -44273,19 +44514,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:468
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:472
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:476
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -44299,45 +44540,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:481
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:484
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:488
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:491
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:494
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:497
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:500
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -44346,7 +44587,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:503
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -44357,7 +44598,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:507
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -44373,14 +44614,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:515
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:518
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -44388,49 +44629,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:521
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:524
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:529
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:532
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:535
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:538
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:541
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:544
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:547
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -44439,7 +44680,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:551
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44447,7 +44688,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:555
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44455,7 +44696,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:559
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44465,7 +44706,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:563
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -44474,7 +44715,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:567
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -44483,7 +44724,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:571
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44493,7 +44734,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:575
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44501,7 +44742,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:579
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -44511,7 +44752,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:583
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -44521,7 +44762,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:587
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44529,7 +44770,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:591
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -44538,7 +44779,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:595
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44546,7 +44787,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:599
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -44558,477 +44799,477 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:605
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:608
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:611
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:614
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:617
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:620
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:623
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:626
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:629
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:632
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:635
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:638
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:641
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:644
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:647
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:650
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:653
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:656
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:659
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:662
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:665
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:668
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:671
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:674
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:677
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:680
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:683
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:686
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:689
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:692
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:695
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:698
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:701
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:704
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:707
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:710
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:713
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:716
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:719
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:722
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:725
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:728
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:731
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:734
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:737
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:740
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:743
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:746
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:749
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:752
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:755
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:758
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:761
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:764
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:767
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:770
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:773
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:776
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:779
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:782
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:785
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:788
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:791
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:794
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:797
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:800
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:803
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:806
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:809
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:812
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:815
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:818
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:821
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:824
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:827
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:830
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:833
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:836
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:839
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:842
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:845
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:848
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:851
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:854
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:857
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:860
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:863
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:866
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:869
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:872
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:875
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:878
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:881
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr ""
-#: doc/classes/ProjectSettings.xml:884
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:887
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:890
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:893
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:896
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:899
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:902
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:905
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:908
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:911
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:914
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:917
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:920
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:923
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:926
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:929
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:932
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:935
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:938
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:941
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:946
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:949
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -45036,92 +45277,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:952
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:955
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:958
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:961
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:964
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:967
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:970
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:973
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:976
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:979
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:982
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:985
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:988
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:991
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:994
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:997
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1000
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1003
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -45131,33 +45372,33 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1007
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1010
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1013
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1017
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1021
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45170,7 +45411,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1025
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45182,7 +45423,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1033
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45194,7 +45435,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1041
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45207,7 +45448,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1045
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -45215,28 +45456,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1049
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1053
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1056
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1059
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -45246,25 +45487,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1063
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1066
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1069
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1072
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45277,7 +45518,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1076
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45289,7 +45530,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1084
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45301,7 +45542,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1092
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45314,13 +45555,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1096
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1099
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -45328,11 +45569,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1103
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1106
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -45346,7 +45587,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1112
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -45355,7 +45596,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1116
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -45371,7 +45612,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1121
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -45381,7 +45622,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1125
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45391,7 +45632,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1129
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -45402,7 +45643,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1133
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45412,7 +45653,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1137
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -45420,7 +45661,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1141
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -45431,7 +45672,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1145
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -45446,7 +45687,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1151
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -45455,13 +45696,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1156
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1159
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -45470,7 +45711,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1162
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -45480,7 +45721,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1165
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -45492,7 +45733,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1168
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -45502,24 +45743,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1171
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1174
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1177
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1180
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -45528,7 +45769,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1183
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -45536,7 +45777,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1186
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -45545,7 +45786,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1189
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -45555,7 +45796,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1193
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -45563,31 +45804,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1197
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1200
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1203
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1206
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1209
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -45595,7 +45836,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1212
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -45605,46 +45846,53 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1215
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1218
+#: doc/classes/ProjectSettings.xml:1221
+msgid ""
+"iOS specific override for [member rendering/gles2/compatibility/"
+"disable_half_float], due to poor support for half-float vertex compression "
+"on many devices."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1224
msgid ""
-"If [code]true[/code] and available on the target device, enables high "
-"floating point precision for all shader computations in GLES2.\n"
+"If [code]true[/code] and available on the target Android device, enables "
+"high floating point precision for all shader computations in GLES2.\n"
"[b]Warning:[/b] High floating point precision can be extremely slow on older "
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1225
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1228
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1231
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1234
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -45652,7 +45900,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1237
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -45662,7 +45910,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1240
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -45671,7 +45919,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1243
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -45680,20 +45928,20 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1246
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1249
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1252
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -45702,7 +45950,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1255
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -45710,7 +45958,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1258
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -45719,7 +45967,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -45729,20 +45977,20 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1267
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1274
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -45751,13 +45999,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -45767,46 +46015,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1293
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1296
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1299
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1302
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1305
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -45816,7 +46064,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -45828,7 +46076,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -45836,7 +46084,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1316
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -45844,7 +46092,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -45853,7 +46101,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1323
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -45867,7 +46115,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1328
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -45877,7 +46125,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1331
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -45886,7 +46134,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1334
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -45896,54 +46144,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1337
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1340
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1343
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1346
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1349
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1352
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1355
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1358
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -45954,61 +46202,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1365
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1368
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1371
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1374
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1377
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1380
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1383
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1386
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -46019,7 +46267,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -46028,26 +46276,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1393 doc/classes/ProjectSettings.xml:1396
#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1405
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1408
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1411
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -46058,20 +46306,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1418
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -46083,52 +46331,52 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1428
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1435
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1438
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1441
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1444
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1447
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1450
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1453
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -46136,7 +46384,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -46146,10 +46394,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -46158,10 +46406,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -46170,10 +46418,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -46182,10 +46430,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -46194,10 +46442,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -46861,40 +47109,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr ""
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -46902,14 +47164,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -49244,6 +49506,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -49261,7 +49539,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -49269,11 +49547,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -49283,19 +49561,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -54712,20 +54990,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -54736,28 +55019,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -54769,19 +55052,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
@@ -57570,26 +57853,33 @@ msgid "Text [Color] used when the [ToolButton] is disabled."
msgstr ""
#: doc/classes/ToolButton.xml:39
-msgid "Text [Color] used when the [ToolButton] is being hovered."
+msgid ""
+"Text [Color] used when the [ToolButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/ToolButton.xml:42
-msgid "Text [Color] used when the [ToolButton] is being pressed."
+msgid "Text [Color] used when the [ToolButton] is being hovered."
msgstr ""
#: doc/classes/ToolButton.xml:45
-msgid "[StyleBox] used when the [ToolButton] is being hovered."
+msgid "Text [Color] used when the [ToolButton] is being pressed."
msgstr ""
#: doc/classes/ToolButton.xml:48
-msgid "The horizontal space between [ToolButton]'s icon and text."
+msgid "[StyleBox] used when the [ToolButton] is being hovered."
msgstr ""
#: doc/classes/ToolButton.xml:51
-msgid "Default [StyleBox] for the [ToolButton]."
+msgid "The horizontal space between [ToolButton]'s icon and text."
msgstr ""
#: doc/classes/ToolButton.xml:54
+msgid "Default [StyleBox] for the [ToolButton]."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:57
msgid "[StyleBox] used when the [ToolButton] is being pressed."
msgstr ""
diff --git a/doc/translations/vi.po b/doc/translations/vi.po
index f952cfdcc2..ab89a8ef09 100644
--- a/doc/translations/vi.po
+++ b/doc/translations/vi.po
@@ -7,12 +7,13 @@
# IoeCmcomc <hopdaigia2004@gmail.com>, 2021.
# Hung <hungthitkhia@gmail.com>, 2021.
# Giacat Buile <hatconan20024@gmail.com>, 2021.
+# Quinn Le <quinnsgn@gmail.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2021-09-14 16:36+0000\n"
-"Last-Translator: IoeCmcomc <hopdaigia2004@gmail.com>\n"
+"PO-Revision-Date: 2021-11-12 13:49+0000\n"
+"Last-Translator: Quinn Le <quinnsgn@gmail.com>\n"
"Language-Team: Vietnamese <https://hosted.weblate.org/projects/godot-engine/"
"godot-class-reference/vi/>\n"
"Language: vi\n"
@@ -20,45 +21,45 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 4.9-dev\n"
+"X-Generator: Weblate 4.9.1-dev\n"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Description"
msgstr "Ná»™i dung"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Tutorials"
msgstr "Hướng dẫn"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Properties"
msgstr "Thuộc tính"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Methods"
msgstr "Phương thức"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Theme Properties"
msgstr "Thuá»™c tính Chá»§ Ä‘á»"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Signals"
msgstr "Tín hiệu"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Enumerations"
msgstr "Liệt kê"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Constants"
msgstr "Hằng số"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Property Descriptions"
msgstr "Nội dung Thuộc tính"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Method Descriptions"
msgstr "Mô tả phương thức"
@@ -131,7 +132,6 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:55
-#, fuzzy
msgid ""
"Returns the arc cosine of [code]s[/code] in radians. Use to get the angle of "
"cosine [code]s[/code]. [code]s[/code] must be between [code]-1.0[/code] and "
@@ -143,14 +143,13 @@ msgid ""
"[/codeblock]"
msgstr ""
"Trả vỠcôsin nghịch đảo của [code]s[/code] theo radian. Dùng để lấy góc của "
-"cốin [code]s[/code].\n"
+"côsin [code]s[/code].\n"
"[codeblock]\n"
"# c là 0.523599 hoặc 30 độ nếu chuyển sang bằng hàm rad2deg(s)\n"
"c = acos(0.866025)\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:66
-#, fuzzy
msgid ""
"Returns the arc sine of [code]s[/code] in radians. Use to get the angle of "
"sine [code]s[/code]. [code]s[/code] must be between [code]-1.0[/code] and "
@@ -162,14 +161,14 @@ msgid ""
"[/codeblock]"
msgstr ""
"Trả vỠsin nghịch đảo [code]s[/code] theo radian. Dùng để lấy góc của sin "
-"[code]s[/code].\n"
+"[code]s[/code]. s phải từ -1.0 đến 1.0, nếu không thì hàm sẽ trả [constant "
+"NAN].\n"
"[codeblock]\n"
"# s là 0.523599 hoặc 30 độ nếu chuyển sang bằng rad2deg(s)\n"
"s = asin(0.5)\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:78
-#, fuzzy
msgid ""
"Asserts that the [code]condition[/code] is [code]true[/code]. If the "
"[code]condition[/code] is [code]false[/code], an error is generated. When "
@@ -205,11 +204,11 @@ msgstr ""
"được.\n"
"[codeblock]\n"
"# giả sử ta muốn toc_do luôn ở giữa 0 và 20\n"
-"toc_di = -10\n"
-"assert(toc_do < 20) # Äúng, chương trfinh sẽ tiếp tục\n"
+"toc_do = -10\n"
+"assert(toc_do < 20) # Äúng, chương trình sẽ tiếp tục\n"
"assert(toc_do >= 0) # Sai, chương trình sẽ dừng\n"
-"assert(toc_do >= 0 && toc_do < 20) # Bạn có thể kiểm tra 2 Ä‘iá»u kiện trong 1 "
-"lần\n"
+"assert(toc_do >= 0 and toc_do < 20) # Bạn có thể kiểm tra 2 Ä‘iá»u kiện trong "
+"1 lần\n"
"assert(toc_do < 20, \"toc_do = %f, nhưng giới hạn tốc độ là 20\" % toc_do) # "
"Hiện tin nhắn với chi tiết cụ thể\n"
"[/codeblock]"
@@ -276,7 +275,6 @@ msgstr ""
"thành hệ toạ độ cực (khoảng cách từ gốc và góc giữa điểm và gốc)."
#: modules/gdscript/doc_classes/@GDScript.xml:135
-#, fuzzy
msgid ""
"Rounds [code]s[/code] upward (towards positive infinity), returning the "
"smallest whole number that is not less than [code]s[/code].\n"
@@ -286,12 +284,14 @@ msgid ""
"[/codeblock]\n"
"See also [method floor], [method round], [method stepify], and [int]."
msgstr ""
-"Làm tròn [code]s[/code] lên (tiến tới dương vô cực), trả vỠsố nguyên không "
-"nhỠhơn [code]s[/code].\n"
+"Làm tròn [code]s[/code] lên (tiến tới dương vô cực), trả vỠsố dược làm tròn "
+"gần nhất nhưng không nhỠhơn [code]s[/code].\n"
"[codeblock]\n"
-"i = ceil(1.45) # i là 2\n"
-"i = ceil(1.001) # i là 2\n"
-"[/codeblock]"
+"a = ceil(1.45) # a là 2.0\n"
+"a = ceil(1.001) # a là 2.0\n"
+"[/codeblock]\n"
+"Ngoài ra còn có thể xem [method floor], [method round], [method stepify] và "
+"[int]."
#: modules/gdscript/doc_classes/@GDScript.xml:147
msgid ""
@@ -313,7 +313,6 @@ msgstr ""
"Äây là ngược lại cá»§a hàm [method ord]."
#: modules/gdscript/doc_classes/@GDScript.xml:162
-#, fuzzy
msgid ""
"Clamps [code]value[/code] and returns a value not less than [code]min[/code] "
"and not more than [code]max[/code].\n"
@@ -326,13 +325,9 @@ msgstr ""
"Cố định [code]gia_tri[/code] và trả vỠgiá trị không nhỠhơn [code]min[/"
"code] và không lớn hơn [code]max[/code].\n"
"[codeblock]\n"
-"toc_do = 1000\n"
-"# a là 20\n"
-"a = clamp(toc_do, 1, 20)\n"
-"\n"
-"toc_do = -10\n"
-"# a là 1\n"
-"a = clamp(toc_do, 1, 20)\n"
+"a = clamp(1000, 1, 20) #a bằng 20\n"
+"a = clamp(-10, 1, 20) #a bằng 1\n"
+"a = clamp(15, 1, 20) #a bằng 15\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:175
@@ -360,7 +355,6 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:190
-#, fuzzy
msgid ""
"Returns the cosine of angle [code]s[/code] in radians.\n"
"[codeblock]\n"
@@ -370,9 +364,8 @@ msgid ""
msgstr ""
"Trả vỠcôsin của góc [code]s[/code] theo radian.\n"
"[codeblock]\n"
-"# Xuất 1 rồi -1\n"
-"print(cos(PI * 2))\n"
-"print(cos(PI))\n"
+"a = cos(TAU) #a bằng 1.0\n"
+"a = cos(PI) #a bằng -1.0\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:201
@@ -398,7 +391,6 @@ msgid "Deprecated alias for [method step_decimals]."
msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml:227
-#, fuzzy
msgid ""
"[b]Note:[/b] [code]dectime[/code] has been deprecated and will be removed in "
"Godot 4.0, please use [method move_toward] instead.\n"
@@ -408,15 +400,15 @@ msgid ""
"a = dectime(60, 10, 0.1)) # a is 59.0\n"
"[/codeblock]"
msgstr ""
-"Trả vè kết quả hiệu của [code]gia_tri[/code] và [code]buoc[/code] * "
+"Ghi chú: [code]dectime[/code] sẽ không được dùng nữa và bị bỠtrong phiên "
+"bản Godot 4.0, thay vì đó hãy dùng [method move_toward].\n"
+"Trả vỠkết quả hiệu của [code]gia_tri[/code] và [code]buoc[/code] * "
"[code]luong[/code].\n"
"[codeblock]\n"
-"# a = 59\n"
-"a = dectime(60, 10, 0.1))\n"
+"a = dectime(60, 10, 0.1)) #a bằng 59.0\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:238
-#, fuzzy
msgid ""
"Converts an angle expressed in degrees to radians.\n"
"[codeblock]\n"
@@ -425,8 +417,7 @@ msgid ""
msgstr ""
"Chuyển một góc từ độ thành radian.\n"
"[codeblock]\n"
-"# r là 3.141593\n"
-"r = deg2rad(180)\n"
+"r = deg2rad(180) #r bằng 3.141593\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:248
@@ -458,6 +449,23 @@ msgid ""
"See also [method smoothstep]. If you need to perform more advanced "
"transitions, use [Tween] or [AnimationPlayer]."
msgstr ""
+"Trả vỠmột giá trị được làm dịu của [code]x[/code] theo một hàm thay đổi giá "
+"trị theo thá»i gian được xác định bằng [code]duong_cong[/code]. Hàm này dá»±a "
+"trên một số mũ. [code]duong_cong[/code] có thể là bất kỳ số thập phân, với "
+"các giá trị xác định dẫn tới một hành vi cụ thể:\n"
+"[codeblock]\n"
+"- Nhá» hÆ¡n -1.0 (độc quyá»n): Ease in-out\n"
+"- -1.0: Linear\n"
+"- Từ -1.0 đến 0.0 (độc quyá»n): Ease out-in\n"
+"- 0.0: Constant\n"
+"- Từ 0.0 đến 1.0 (độc quyá»n): Ease in\n"
+"- 1.0: Linear\n"
+"- Lá»›n hÆ¡n 1.0 (độc quyá»n): Ease out\n"
+"[/codeblock]\n"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/"
+"ease_cheatsheet.png]ease() bảng giá trị các đưá»ng cong[/url]\n"
+"Xem thêm [method smoothstep]. Nếu cần các cách chuyển nâng cao hơn thì dùng "
+"[Tween] hoặc [AnimationPlayer]."
#: modules/gdscript/doc_classes/@GDScript.xml:274
msgid ""
@@ -480,7 +488,6 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:286
-#, fuzzy
msgid ""
"Rounds [code]s[/code] downward (towards negative infinity), returning the "
"largest whole number that is not more than [code]s[/code].\n"
@@ -494,16 +501,16 @@ msgid ""
"[code]s[/code] is a non-negative number, you can use [code]int(s)[/code] "
"directly."
msgstr ""
-"Làm tròn [code]s[/code] xuống (tiến tới âm vô cực), trả vỠsố nguyên không "
-"lớn hơn [code]s[/code].\n"
+"Làm tròn [code]s[/code] xuống (tiến tới âm vô cực), trả vỠsố nguyên gần "
+"nhất nhưng không lớn hơn [code]s[/code].\n"
"[codeblock]\n"
-"# a là 2.0\n"
-"a = floor(2.99)\n"
-"# a là -3.0\n"
-"a = floor(-2.99)\n"
+"a = floor(2.45) #a bằng 2.0\n"
+"a = floor(2.99) #a bằng 2.0\n"
+"a = floor(-2.99) #a bằng -3.0\n"
"[/codeblock]\n"
-"[b]Lưu ý:[/b] Hàm này trả vỠsố thực. Nếu cần số nguyên, bạn có thể dùng hàm "
-"[code]int(s)[/code] trực tiếp."
+"Xem thêm [method ceil], [method round], [method stepify] và [int].\n"
+"[b]Lưu ý:[/b] Hàm này trả vỠsố thực. Nếu cần số nguyên và [code]s[/code] là "
+"một số không âm, bạn có thể dùng hàm [code]int(s)[/code] trực tiếp."
#: modules/gdscript/doc_classes/@GDScript.xml:301
#, fuzzy
@@ -4012,112 +4019,121 @@ msgid ""
msgstr ""
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr ""
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
msgstr ""
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
msgstr ""
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
msgstr ""
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr ""
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr ""
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr ""
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
msgstr ""
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr ""
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
msgstr ""
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
msgstr ""
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr ""
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
"positive.\n"
@@ -5204,7 +5220,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -6638,21 +6654,25 @@ msgstr ""
#: doc/classes/Area.xml:17
msgid ""
-"Returns a list of intersecting [Area]s. For performance reasons (collisions "
-"are all processed at the same time) this list is modified once during the "
-"physics step, not immediately after objects are moved. Consider using "
-"signals instead."
+"Returns a list of intersecting [Area]s. The overlapping area's [member "
+"CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:23
+#: doc/classes/Area.xml:24
msgid ""
-"Returns a list of intersecting [PhysicsBody]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody]s. The overlapping body's "
+"[member CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:30
+#: doc/classes/Area.xml:32
msgid ""
"If [code]true[/code], the given area overlaps the Area.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6660,7 +6680,7 @@ msgid ""
"physics step. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:38
+#: doc/classes/Area.xml:40
msgid ""
"If [code]true[/code], the given physics body overlaps the Area.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6671,7 +6691,7 @@ msgid ""
"their tiles with collision shapes as a virtual physics body)."
msgstr ""
-#: doc/classes/Area.xml:46
+#: doc/classes/Area.xml:48
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
"velocity lost per second.\n"
@@ -6679,41 +6699,41 @@ msgid ""
"details about damping."
msgstr ""
-#: doc/classes/Area.xml:50 doc/classes/Area2D.xml:52
+#: doc/classes/Area.xml:52 doc/classes/Area2D.xml:54
msgid "The name of the area's audio bus."
msgstr ""
-#: doc/classes/Area.xml:53 doc/classes/Area2D.xml:55
+#: doc/classes/Area.xml:55 doc/classes/Area2D.xml:57
msgid ""
"If [code]true[/code], the area's audio bus overrides the default audio bus."
msgstr ""
-#: doc/classes/Area.xml:56
+#: doc/classes/Area.xml:58
msgid ""
"The area's gravity intensity (in meters per second squared). This value "
"multiplies the gravity vector. This is useful to alter the force of gravity "
"without altering its direction."
msgstr ""
-#: doc/classes/Area.xml:59 doc/classes/Area2D.xml:61
+#: doc/classes/Area.xml:61 doc/classes/Area2D.xml:63
msgid ""
"The falloff factor for point gravity. The greater the value, the faster "
"gravity decreases with distance."
msgstr ""
-#: doc/classes/Area.xml:62 doc/classes/Area2D.xml:64
+#: doc/classes/Area.xml:64 doc/classes/Area2D.xml:66
msgid ""
"If [code]true[/code], gravity is calculated from a point (set via [member "
"gravity_vec]). See also [member space_override]."
msgstr ""
-#: doc/classes/Area.xml:65 doc/classes/Area2D.xml:67
+#: doc/classes/Area.xml:67 doc/classes/Area2D.xml:69
msgid ""
"The area's gravity vector (not normalized). If gravity is a point (see "
"[member gravity_point]), this will be the point of attraction."
msgstr ""
-#: doc/classes/Area.xml:68
+#: doc/classes/Area.xml:70
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
"velocity lost per second.\n"
@@ -6721,61 +6741,61 @@ msgid ""
"about damping."
msgstr ""
-#: doc/classes/Area.xml:72 doc/classes/Area2D.xml:74
+#: doc/classes/Area.xml:74 doc/classes/Area2D.xml:76
msgid "If [code]true[/code], other monitoring areas can detect this area."
msgstr ""
-#: doc/classes/Area.xml:75 doc/classes/Area2D.xml:77
+#: doc/classes/Area.xml:77 doc/classes/Area2D.xml:79
msgid ""
"If [code]true[/code], the area detects bodies or areas entering and exiting "
"it."
msgstr ""
-#: doc/classes/Area.xml:78 doc/classes/Area2D.xml:80
+#: doc/classes/Area.xml:80 doc/classes/Area2D.xml:82
msgid "The area's priority. Higher priority areas are processed first."
msgstr ""
-#: doc/classes/Area.xml:81
+#: doc/classes/Area.xml:83
msgid ""
"The degree to which this area applies reverb to its associated audio. Ranges "
"from [code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
msgstr ""
-#: doc/classes/Area.xml:84
+#: doc/classes/Area.xml:86
msgid "If [code]true[/code], the area applies reverb to its associated audio."
msgstr ""
-#: doc/classes/Area.xml:87
+#: doc/classes/Area.xml:89
msgid "The reverb bus name to use for this area's associated audio."
msgstr ""
-#: doc/classes/Area.xml:90
+#: doc/classes/Area.xml:92
msgid ""
"The degree to which this area's reverb is a uniform effect. Ranges from "
"[code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
msgstr ""
-#: doc/classes/Area.xml:93 doc/classes/Area2D.xml:83
+#: doc/classes/Area.xml:95 doc/classes/Area2D.xml:85
msgid ""
"Override mode for gravity and damping calculations within this area. See "
"[enum SpaceOverride] for possible values."
msgstr ""
-#: doc/classes/Area.xml:100
+#: doc/classes/Area.xml:102
msgid ""
"Emitted when another Area enters this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
-#: doc/classes/Area.xml:107
+#: doc/classes/Area.xml:109
msgid ""
"Emitted when another Area exits this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
-#: doc/classes/Area.xml:117 doc/classes/Area.xml:130
+#: doc/classes/Area.xml:119 doc/classes/Area.xml:132
msgid ""
"Emitted when one of another Area's [Shape]s enters one of this Area's "
"[Shape]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6790,7 +6810,7 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:140
+#: doc/classes/Area.xml:142
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] enters this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -6799,7 +6819,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:147
+#: doc/classes/Area.xml:149
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] exits this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -6808,7 +6828,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:157 doc/classes/Area.xml:170
+#: doc/classes/Area.xml:159 doc/classes/Area.xml:172
msgid ""
"Emitted when one of a [PhysicsBody] or [GridMap]'s [Shape]s enters one of "
"this Area's [Shape]s. Requires [member monitoring] to be set to [code]true[/"
@@ -6825,29 +6845,29 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:180 doc/classes/Area2D.xml:170
+#: doc/classes/Area.xml:182 doc/classes/Area2D.xml:172
msgid "This area does not affect gravity/damping."
msgstr ""
-#: doc/classes/Area.xml:183 doc/classes/Area2D.xml:173
+#: doc/classes/Area.xml:185 doc/classes/Area2D.xml:175
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order)."
msgstr ""
-#: doc/classes/Area.xml:186 doc/classes/Area2D.xml:176
+#: doc/classes/Area.xml:188 doc/classes/Area2D.xml:178
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order), ignoring any lower priority areas."
msgstr ""
-#: doc/classes/Area.xml:189 doc/classes/Area2D.xml:179
+#: doc/classes/Area.xml:191 doc/classes/Area2D.xml:181
msgid ""
"This area replaces any gravity/damping, even the defaults, ignoring any "
"lower priority areas."
msgstr ""
-#: doc/classes/Area.xml:192 doc/classes/Area2D.xml:182
+#: doc/classes/Area.xml:194 doc/classes/Area2D.xml:184
msgid ""
"This area replaces any gravity/damping calculated so far (in [member "
"priority] order), but keeps calculating the rest of the areas."
@@ -6882,21 +6902,25 @@ msgstr ""
#: doc/classes/Area2D.xml:19
msgid ""
-"Returns a list of intersecting [Area2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [Area2D]s. The overlapping area's [member "
+"CollisionObject2D.collision_layer] must be part of this area's [member "
+"CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:25
+#: doc/classes/Area2D.xml:26
msgid ""
-"Returns a list of intersecting [PhysicsBody2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody2D]s. The overlapping body's "
+"[member CollisionObject2D.collision_layer] must be part of this area's "
+"[member CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:32
+#: doc/classes/Area2D.xml:34
msgid ""
"If [code]true[/code], the given area overlaps the Area2D.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6904,7 +6928,7 @@ msgid ""
"the physics step. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:40
+#: doc/classes/Area2D.xml:42
msgid ""
"If [code]true[/code], the given physics body overlaps the Area2D.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6915,7 +6939,7 @@ msgid ""
"register their tiles with collision shapes as a virtual physics body)."
msgstr ""
-#: doc/classes/Area2D.xml:48
+#: doc/classes/Area2D.xml:50
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
"velocity lost per second.\n"
@@ -6923,14 +6947,14 @@ msgid ""
"details about damping."
msgstr ""
-#: doc/classes/Area2D.xml:58
+#: doc/classes/Area2D.xml:60
msgid ""
"The area's gravity intensity (in pixels per second squared). This value "
"multiplies the gravity vector. This is useful to alter the force of gravity "
"without altering its direction."
msgstr ""
-#: doc/classes/Area2D.xml:70
+#: doc/classes/Area2D.xml:72
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
"velocity lost per second.\n"
@@ -6938,21 +6962,21 @@ msgid ""
"about damping."
msgstr ""
-#: doc/classes/Area2D.xml:90
+#: doc/classes/Area2D.xml:92
msgid ""
"Emitted when another Area2D enters this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-#: doc/classes/Area2D.xml:97
+#: doc/classes/Area2D.xml:99
msgid ""
"Emitted when another Area2D exits this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-#: doc/classes/Area2D.xml:107
+#: doc/classes/Area2D.xml:109
msgid ""
"Emitted when one of another Area2D's [Shape2D]s enters one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6967,7 +6991,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:120
+#: doc/classes/Area2D.xml:122
msgid ""
"Emitted when one of another Area2D's [Shape2D]s exits one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6982,7 +7006,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:130
+#: doc/classes/Area2D.xml:132
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] enters this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -6991,7 +7015,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:137
+#: doc/classes/Area2D.xml:139
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] exits this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -7000,7 +7024,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:147
+#: doc/classes/Area2D.xml:149
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s enters one "
"of this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -7019,7 +7043,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:160
+#: doc/classes/Area2D.xml:162
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s exits one of "
"this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -10575,40 +10599,45 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
-"no save path is provided it will try to match the path from the current "
+"no root node is provided, parent of this node will be used as root instead. "
+"If no save path is provided it will try to match the path from the current "
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -10622,62 +10651,62 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
msgid "The rotation of the baked custom sky."
msgstr ""
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -10685,35 +10714,35 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -10721,13 +10750,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -10739,66 +10768,78 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr ""
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
msgid "Baking was successful."
msgstr ""
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr ""
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
#, fuzzy
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr "Trả vỠtan nghịch đảo của tham số."
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr ""
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:133
+#: doc/classes/BakedLightmap.xml:132
+msgid ""
+"Returns if lightmapper can't be created. Unless you are using a custom "
+"lightmapper, please report this as bug."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:135
+msgid ""
+"There is no root node to start baking from. Either provide [code]from_node[/"
+"code] argument or attach this node to a parent that should be used as root."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:136
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:139
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:142
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -11246,8 +11287,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -11632,26 +11676,33 @@ msgid "Text [Color] used when the [Button] is disabled."
msgstr ""
#: doc/classes/Button.xml:77
-msgid "Text [Color] used when the [Button] is being hovered."
+msgid ""
+"Text [Color] used when the [Button] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/Button.xml:80
-msgid "Text [Color] used when the [Button] is being pressed."
+msgid "Text [Color] used when the [Button] is being hovered."
msgstr ""
#: doc/classes/Button.xml:83
-msgid "[StyleBox] used when the [Button] is being hovered."
+msgid "Text [Color] used when the [Button] is being pressed."
msgstr ""
#: doc/classes/Button.xml:86
-msgid "The horizontal space between [Button]'s icon and text."
+msgid "[StyleBox] used when the [Button] is being hovered."
msgstr ""
#: doc/classes/Button.xml:89
-msgid "Default [StyleBox] for the [Button]."
+msgid "The horizontal space between [Button]'s icon and text."
msgstr ""
#: doc/classes/Button.xml:92
+msgid "Default [StyleBox] for the [Button]."
+msgstr ""
+
+#: doc/classes/Button.xml:95
msgid "[StyleBox] used when the [Button] is being pressed."
msgstr ""
@@ -13115,80 +13166,96 @@ msgstr ""
msgid "The check icon to display when the [CheckBox] is checked."
msgstr ""
-#: doc/classes/CheckBox.xml:30
+#: doc/classes/CheckBox.xml:28
+msgid "The check icon to display when the [CheckBox] is checked and disabled."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:31
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is disabled."
msgstr ""
-#: doc/classes/CheckBox.xml:33
+#: doc/classes/CheckBox.xml:34
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is focused."
msgstr ""
-#: doc/classes/CheckBox.xml:36
+#: doc/classes/CheckBox.xml:37
msgid "The [Font] to use for the [CheckBox] text."
msgstr ""
-#: doc/classes/CheckBox.xml:39
+#: doc/classes/CheckBox.xml:40
msgid "The [CheckBox] text's font color."
msgstr ""
-#: doc/classes/CheckBox.xml:42
+#: doc/classes/CheckBox.xml:43
msgid "The [CheckBox] text's font color when it's disabled."
msgstr ""
-#: doc/classes/CheckBox.xml:45
+#: doc/classes/CheckBox.xml:46
+msgid ""
+"The [CheckBox] text's font color when it's focused. Only replaces the normal "
+"text color of the checkbox. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:49
msgid "The [CheckBox] text's font color when it's hovered."
msgstr ""
-#: doc/classes/CheckBox.xml:48
+#: doc/classes/CheckBox.xml:52
msgid "The [CheckBox] text's font color when it's hovered and pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:51
+#: doc/classes/CheckBox.xml:55
msgid "The [CheckBox] text's font color when it's pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:54
+#: doc/classes/CheckBox.xml:58
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered."
msgstr ""
-#: doc/classes/CheckBox.xml:57
+#: doc/classes/CheckBox.xml:61
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered and "
"pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:60
+#: doc/classes/CheckBox.xml:64
msgid "The separation between the check icon and the text (in pixels)."
msgstr ""
-#: doc/classes/CheckBox.xml:63 doc/classes/CheckButton.xml:58
+#: doc/classes/CheckBox.xml:67 doc/classes/CheckButton.xml:61
msgid "The [StyleBox] to display as a background."
msgstr ""
-#: doc/classes/CheckBox.xml:66
+#: doc/classes/CheckBox.xml:70
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:69
+#: doc/classes/CheckBox.xml:73
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is checked."
msgstr ""
-#: doc/classes/CheckBox.xml:74
+#: doc/classes/CheckBox.xml:78
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is unchecked."
msgstr ""
-#: doc/classes/CheckBox.xml:79
+#: doc/classes/CheckBox.xml:83
msgid "The check icon to display when the [CheckBox] is unchecked."
msgstr ""
+#: doc/classes/CheckBox.xml:86
+msgid ""
+"The check icon to display when the [CheckBox] is unchecked and disabled."
+msgstr ""
+
#: doc/classes/CheckButton.xml:4
msgid "Checkable button. See also [CheckBox]."
msgstr ""
@@ -13232,49 +13299,56 @@ msgid "The [CheckButton] text's font color when it's disabled."
msgstr ""
#: doc/classes/CheckButton.xml:40
-msgid "The [CheckButton] text's font color when it's hovered."
+msgid ""
+"The [CheckButton] text's font color when it's focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/CheckButton.xml:43
-msgid "The [CheckButton] text's font color when it's hovered and pressed."
+msgid "The [CheckButton] text's font color when it's hovered."
msgstr ""
#: doc/classes/CheckButton.xml:46
-msgid "The [CheckButton] text's font color when it's pressed."
+msgid "The [CheckButton] text's font color when it's hovered and pressed."
msgstr ""
#: doc/classes/CheckButton.xml:49
+msgid "The [CheckButton] text's font color when it's pressed."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:52
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered."
msgstr ""
-#: doc/classes/CheckButton.xml:52
+#: doc/classes/CheckButton.xml:55
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered "
"and pressed."
msgstr ""
-#: doc/classes/CheckButton.xml:55
+#: doc/classes/CheckButton.xml:58
msgid "The separation between the toggle icon and the text (in pixels)."
msgstr ""
-#: doc/classes/CheckButton.xml:61
+#: doc/classes/CheckButton.xml:64
msgid "The icon to display when the [CheckButton] is unchecked."
msgstr ""
-#: doc/classes/CheckButton.xml:64
+#: doc/classes/CheckButton.xml:67
msgid "The icon to display when the [CheckButton] is unchecked and disabled."
msgstr ""
-#: doc/classes/CheckButton.xml:67
+#: doc/classes/CheckButton.xml:70
msgid "The icon to display when the [CheckButton] is checked."
msgstr ""
-#: doc/classes/CheckButton.xml:70
+#: doc/classes/CheckButton.xml:73
msgid "The icon to display when the [CheckButton] is checked and disabled."
msgstr ""
-#: doc/classes/CheckButton.xml:73
+#: doc/classes/CheckButton.xml:76
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is pressed."
msgstr ""
@@ -15043,26 +15117,33 @@ msgid "Text [Color] used when the [ColorPickerButton] is disabled."
msgstr ""
#: doc/classes/ColorPickerButton.xml:80
-msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
+msgid ""
+"Text [Color] used when the [ColorPickerButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/ColorPickerButton.xml:83
-msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
+msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
msgstr ""
#: doc/classes/ColorPickerButton.xml:86
-msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
+msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
msgstr ""
#: doc/classes/ColorPickerButton.xml:89
-msgid "The horizontal space between [ColorPickerButton]'s icon and text."
+msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
msgstr ""
#: doc/classes/ColorPickerButton.xml:92
-msgid "Default [StyleBox] for the [ColorPickerButton]."
+msgid "The horizontal space between [ColorPickerButton]'s icon and text."
msgstr ""
#: doc/classes/ColorPickerButton.xml:95
+msgid "Default [StyleBox] for the [ColorPickerButton]."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:98
msgid "[StyleBox] used when the [ColorPickerButton] is being pressed."
msgstr ""
@@ -20279,7 +20360,8 @@ msgid ""
"get_resource_type]. They may optionally specify some import presets that "
"affect the import process. EditorImportPlugins are responsible for creating "
"the resources and saving them in the [code].import[/code] directory (see "
-"[member ProjectSettings.application/config/project_data_dir_name]).\n"
+"[member ProjectSettings.application/config/"
+"use_hidden_project_data_directory]).\n"
"Below is an example EditorImportPlugin that imports a [Mesh] from a file "
"with the extension \".special\" or \".spec\":\n"
"[codeblock]\n"
@@ -20403,7 +20485,7 @@ msgstr ""
msgid ""
"Gets the extension used to save this resource in the [code].import[/code] "
"directory (see [member ProjectSettings.application/config/"
-"project_data_dir_name])."
+"use_hidden_project_data_directory])."
msgstr ""
#: doc/classes/EditorImportPlugin.xml:130
@@ -21434,8 +21516,11 @@ msgstr ""
msgid "Emitted when the value of the edited resource was changed."
msgstr ""
-#: doc/classes/EditorResourcePicker.xml:89
-msgid "Emitted when the resource value was set and user clicked to edit it."
+#: doc/classes/EditorResourcePicker.xml:90
+msgid ""
+"Emitted when the resource value was set and user clicked to edit it. When "
+"[code]edit[/code] is [code]true[/code], the signal was caused by the context "
+"menu \"Edit\" option."
msgstr ""
#: doc/classes/EditorResourcePreview.xml:4
@@ -25166,20 +25251,31 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr ""
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -25188,14 +25284,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -25205,80 +25305,80 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
msgstr ""
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr ""
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -28015,16 +28115,18 @@ msgstr ""
#: doc/classes/Image.xml:436
msgid ""
"OpenGL texture format [code]RED[/code] with a single component and a "
-"bitdepth of 8."
+"bitdepth of 8.\n"
+"[b]Note:[/b] When using the GLES2 backend, this uses the alpha channel "
+"instead of the red channel for storage."
msgstr ""
-#: doc/classes/Image.xml:439
+#: doc/classes/Image.xml:440
msgid ""
"OpenGL texture format [code]RG[/code] with two components and a bitdepth of "
"8 for each."
msgstr ""
-#: doc/classes/Image.xml:442
+#: doc/classes/Image.xml:443
msgid ""
"OpenGL texture format [code]RGB[/code] with three components, each with a "
"bitdepth of 8.\n"
@@ -28032,7 +28134,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:446
+#: doc/classes/Image.xml:447
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 8.\n"
@@ -28040,73 +28142,73 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:450
+#: doc/classes/Image.xml:451
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 4."
msgstr ""
-#: doc/classes/Image.xml:453
+#: doc/classes/Image.xml:454
msgid ""
"OpenGL texture format [code]GL_RGB5_A1[/code] where 5 bits of depth for each "
"component of RGB and one bit for alpha."
msgstr ""
-#: doc/classes/Image.xml:456
+#: doc/classes/Image.xml:457
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 32-"
"bit floating-point value."
msgstr ""
-#: doc/classes/Image.xml:459
+#: doc/classes/Image.xml:460
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:462
+#: doc/classes/Image.xml:463
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:465
+#: doc/classes/Image.xml:466
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:468
+#: doc/classes/Image.xml:469
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 16-"
"bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:471
+#: doc/classes/Image.xml:472
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:474
+#: doc/classes/Image.xml:475
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:477
+#: doc/classes/Image.xml:478
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:480
+#: doc/classes/Image.xml:481
msgid ""
"A special OpenGL texture format where the three color components have 9 bits "
"of precision and all three share a single 5-bit exponent."
msgstr ""
-#: doc/classes/Image.xml:483
+#: doc/classes/Image.xml:484
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 1, and is the smallest variation "
@@ -28116,7 +28218,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:487
+#: doc/classes/Image.xml:488
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 2, and color data is interpreted "
@@ -28126,7 +28228,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:491
+#: doc/classes/Image.xml:492
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format also known as Block Compression 3 or BC3 that contains 64 "
@@ -28137,7 +28239,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:495
+#: doc/classes/Image.xml:496
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -28145,7 +28247,7 @@ msgid ""
"DXT5 uses for the alpha channel."
msgstr ""
-#: doc/classes/Image.xml:498
+#: doc/classes/Image.xml:499
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -28153,7 +28255,7 @@ msgid ""
"algorithm that DXT5 uses for the alpha channel."
msgstr ""
-#: doc/classes/Image.xml:501
+#: doc/classes/Image.xml:502
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned normalized "
@@ -28162,21 +28264,21 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:505
+#: doc/classes/Image.xml:506
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with signed floating-point "
"RGB components."
msgstr ""
-#: doc/classes/Image.xml:508
+#: doc/classes/Image.xml:509
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned floating-point "
"RGB components."
msgstr ""
-#: doc/classes/Image.xml:511
+#: doc/classes/Image.xml:512
msgid ""
"Texture format used on PowerVR-supported mobile platforms, uses 2-bit color "
"depth with no alpha. More information can be found [url=https://en.wikipedia."
@@ -28185,25 +28287,25 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:515
+#: doc/classes/Image.xml:516
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with an "
"alpha component."
msgstr ""
-#: doc/classes/Image.xml:518
+#: doc/classes/Image.xml:519
msgid ""
"Similar to [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with 4-"
"bit color depth and no alpha."
msgstr ""
-#: doc/classes/Image.xml:521
+#: doc/classes/Image.xml:522
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC4[/url], but with an "
"alpha component."
msgstr ""
-#: doc/classes/Image.xml:524
+#: doc/classes/Image.xml:525
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC1]Ericsson Texture Compression format 1[/"
@@ -28211,7 +28313,7 @@ msgid ""
"standard. This format cannot store an alpha channel."
msgstr ""
-#: doc/classes/Image.xml:527
+#: doc/classes/Image.xml:528
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28219,7 +28321,7 @@ msgid ""
"unsigned data."
msgstr ""
-#: doc/classes/Image.xml:530
+#: doc/classes/Image.xml:531
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28227,7 +28329,7 @@ msgid ""
"channel of signed data."
msgstr ""
-#: doc/classes/Image.xml:533
+#: doc/classes/Image.xml:534
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28235,7 +28337,7 @@ msgid ""
"of unsigned data."
msgstr ""
-#: doc/classes/Image.xml:536
+#: doc/classes/Image.xml:537
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28243,7 +28345,7 @@ msgid ""
"channels of signed data."
msgstr ""
-#: doc/classes/Image.xml:539
+#: doc/classes/Image.xml:540
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28253,7 +28355,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:543
+#: doc/classes/Image.xml:544
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28263,7 +28365,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:547
+#: doc/classes/Image.xml:548
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28274,31 +28376,31 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:551
+#: doc/classes/Image.xml:552
msgid "Represents the size of the [enum Format] enum."
msgstr ""
-#: doc/classes/Image.xml:554
+#: doc/classes/Image.xml:555
msgid ""
"Performs nearest-neighbor interpolation. If the image is resized, it will be "
"pixelated."
msgstr ""
-#: doc/classes/Image.xml:557
+#: doc/classes/Image.xml:558
msgid ""
"Performs bilinear interpolation. If the image is resized, it will be blurry. "
"This mode is faster than [constant INTERPOLATE_CUBIC], but it results in "
"lower quality."
msgstr ""
-#: doc/classes/Image.xml:560
+#: doc/classes/Image.xml:561
msgid ""
"Performs cubic interpolation. If the image is resized, it will be blurry. "
"This mode often gives better results compared to [constant "
"INTERPOLATE_BILINEAR], at the cost of being slower."
msgstr ""
-#: doc/classes/Image.xml:563
+#: doc/classes/Image.xml:564
msgid ""
"Performs bilinear separately on the two most-suited mipmap levels, then "
"linearly interpolates between them.\n"
@@ -28313,55 +28415,55 @@ msgid ""
"a new set will be generated for the resulting image."
msgstr ""
-#: doc/classes/Image.xml:570
+#: doc/classes/Image.xml:571
msgid ""
"Performs Lanczos interpolation. This is the slowest image resizing mode, but "
"it typically gives the best results, especially when downscalng images."
msgstr ""
-#: doc/classes/Image.xml:573
+#: doc/classes/Image.xml:574
msgid "Image does not have alpha."
msgstr ""
-#: doc/classes/Image.xml:576
+#: doc/classes/Image.xml:577
msgid "Image stores alpha in a single bit."
msgstr ""
-#: doc/classes/Image.xml:579
+#: doc/classes/Image.xml:580
msgid "Image uses alpha."
msgstr ""
-#: doc/classes/Image.xml:582
+#: doc/classes/Image.xml:583
msgid "Use S3TC compression."
msgstr ""
-#: doc/classes/Image.xml:585
+#: doc/classes/Image.xml:586
msgid "Use PVRTC2 compression."
msgstr ""
-#: doc/classes/Image.xml:588
+#: doc/classes/Image.xml:589
msgid "Use PVRTC4 compression."
msgstr ""
-#: doc/classes/Image.xml:591
+#: doc/classes/Image.xml:592
msgid "Use ETC compression."
msgstr ""
-#: doc/classes/Image.xml:594
+#: doc/classes/Image.xml:595
msgid "Use ETC2 compression."
msgstr ""
-#: doc/classes/Image.xml:597
+#: doc/classes/Image.xml:598
msgid ""
"Source texture (before compression) is a regular texture. Default for all "
"textures."
msgstr ""
-#: doc/classes/Image.xml:600
+#: doc/classes/Image.xml:601
msgid "Source texture (before compression) is in sRGB space."
msgstr ""
-#: doc/classes/Image.xml:603
+#: doc/classes/Image.xml:604
msgid ""
"Source texture (before compression) is a normal texture (e.g. it can be "
"compressed into two channels)."
@@ -28585,6 +28687,17 @@ msgstr ""
#: doc/classes/Input.xml:43
msgid ""
+"Sends all input events which are in the current buffer to the game loop. "
+"These events may have been buffered as a result of accumulated input "
+"([method set_use_accumulated_input]) or agile input flushing ([member "
+"ProjectSettings.input_devices/buffering/agile_event_flushing]).\n"
+"The engine will already do this itself at key execution points (at least "
+"once per frame). However, this can be useful in advanced cases where you "
+"want precise control over the timing of event handling."
+msgstr ""
+
+#: doc/classes/Input.xml:50
+msgid ""
"Returns the acceleration of the device's accelerometer sensor, if the device "
"has one. Otherwise, the method returns [constant Vector3.ZERO].\n"
"Note this method returns an empty [Vector3] when running from the editor "
@@ -28596,7 +28709,7 @@ msgid ""
"the Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:53
+#: doc/classes/Input.xml:60
msgid ""
"Returns a value between 0 and 1 representing the raw intensity of the given "
"action, ignoring the action's deadzone. In most cases, you should use "
@@ -28606,7 +28719,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:62
+#: doc/classes/Input.xml:69
msgid ""
"Returns a value between 0 and 1 representing the intensity of the given "
"action. In a joypad, for example, the further away the axis (analog sticks "
@@ -28618,7 +28731,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:71
+#: doc/classes/Input.xml:78
msgid ""
"Get axis input by specifying two actions, one negative and one positive.\n"
"This is a shorthand for writing [code]Input."
@@ -28626,17 +28739,17 @@ msgid ""
"get_action_strength(\"negative_action\")[/code]."
msgstr ""
-#: doc/classes/Input.xml:78
+#: doc/classes/Input.xml:85
msgid ""
"Returns an [Array] containing the device IDs of all currently connected "
"joypads."
msgstr ""
-#: doc/classes/Input.xml:84
+#: doc/classes/Input.xml:91
msgid "Returns the currently assigned cursor shape (see [enum CursorShape])."
msgstr ""
-#: doc/classes/Input.xml:90
+#: doc/classes/Input.xml:97
msgid ""
"Returns the gravity of the device's accelerometer sensor, if the device has "
"one. Otherwise, the method returns [constant Vector3.ZERO].\n"
@@ -28646,7 +28759,7 @@ msgid ""
"Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:97
+#: doc/classes/Input.xml:104
msgid ""
"Returns the rotation rate in rad/s around a device's X, Y, and Z axes of the "
"gyroscope sensor, if the device has one. Otherwise, the method returns "
@@ -28655,53 +28768,53 @@ msgid ""
"it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:106
+#: doc/classes/Input.xml:113
msgid ""
"Returns the current value of the joypad axis at given index (see [enum "
"JoystickList])."
msgstr ""
-#: doc/classes/Input.xml:113
+#: doc/classes/Input.xml:120
msgid "Returns the index of the provided axis name."
msgstr ""
-#: doc/classes/Input.xml:120
+#: doc/classes/Input.xml:127
msgid ""
"Receives a [enum JoystickList] axis and returns its equivalent name as a "
"string."
msgstr ""
-#: doc/classes/Input.xml:127
+#: doc/classes/Input.xml:134
msgid "Returns the index of the provided button name."
msgstr ""
-#: doc/classes/Input.xml:134
+#: doc/classes/Input.xml:141
msgid ""
"Receives a gamepad button from [enum JoystickList] and returns its "
"equivalent name as a string."
msgstr ""
-#: doc/classes/Input.xml:141
+#: doc/classes/Input.xml:148
msgid ""
"Returns a SDL2-compatible device GUID on platforms that use gamepad "
"remapping. Returns [code]\"Default Gamepad\"[/code] otherwise."
msgstr ""
-#: doc/classes/Input.xml:148
+#: doc/classes/Input.xml:155
msgid "Returns the name of the joypad at the specified device index."
msgstr ""
-#: doc/classes/Input.xml:155
+#: doc/classes/Input.xml:162
msgid "Returns the duration of the current vibration effect in seconds."
msgstr ""
-#: doc/classes/Input.xml:162
+#: doc/classes/Input.xml:169
msgid ""
"Returns the strength of the joypad vibration: x is the strength of the weak "
"motor, and y is the strength of the strong motor."
msgstr ""
-#: doc/classes/Input.xml:168
+#: doc/classes/Input.xml:175
msgid ""
"Returns the mouse speed for the last time the cursor was moved, and this "
"until the next frame where the mouse moves. This means that even if the "
@@ -28709,7 +28822,7 @@ msgid ""
"motion."
msgstr ""
-#: doc/classes/Input.xml:174
+#: doc/classes/Input.xml:181
msgid ""
"Returns the magnetic field strength in micro-Tesla for all axes of the "
"device's magnetometer sensor, if the device has one. Otherwise, the method "
@@ -28718,17 +28831,17 @@ msgid ""
"platforms, it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:181
+#: doc/classes/Input.xml:188
msgid ""
"Returns mouse buttons as a bitmask. If multiple mouse buttons are pressed at "
"the same time, the bits are added together."
msgstr ""
-#: doc/classes/Input.xml:187
+#: doc/classes/Input.xml:194
msgid "Returns the mouse mode. See the constants for more information."
msgstr ""
-#: doc/classes/Input.xml:198
+#: doc/classes/Input.xml:205
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -28741,7 +28854,7 @@ msgid ""
"want (on the range of 0 to 1)."
msgstr ""
-#: doc/classes/Input.xml:208
+#: doc/classes/Input.xml:215
msgid ""
"Returns [code]true[/code] when the user starts pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user pressed down "
@@ -28753,7 +28866,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:218
+#: doc/classes/Input.xml:225
msgid ""
"Returns [code]true[/code] when the user stops pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user released the "
@@ -28763,7 +28876,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:227
+#: doc/classes/Input.xml:234
msgid ""
"Returns [code]true[/code] if you are pressing the action event. Note that if "
"an action has multiple buttons assigned and more than one of them is "
@@ -28774,13 +28887,13 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:236
+#: doc/classes/Input.xml:243
msgid ""
"Returns [code]true[/code] if you are pressing the joypad button (see [enum "
"JoystickList])."
msgstr ""
-#: doc/classes/Input.xml:243
+#: doc/classes/Input.xml:250
msgid ""
"Returns [code]true[/code] if the system knows the specified device. This "
"means that it sets all button and axis indices exactly as defined in [enum "
@@ -28788,19 +28901,19 @@ msgid ""
"but you can still retrieve events from them."
msgstr ""
-#: doc/classes/Input.xml:250
+#: doc/classes/Input.xml:257
msgid ""
"Returns [code]true[/code] if you are pressing the key. You can pass a [enum "
"KeyList] constant."
msgstr ""
-#: doc/classes/Input.xml:257
+#: doc/classes/Input.xml:264
msgid ""
"Returns [code]true[/code] if you are pressing the mouse button specified "
"with [enum ButtonList]."
msgstr ""
-#: doc/classes/Input.xml:267
+#: doc/classes/Input.xml:274
msgid ""
"Notifies the [Input] singleton that a connection has changed, to update the "
"state for the [code]device[/code] index.\n"
@@ -28809,7 +28922,7 @@ msgid ""
"triggered internally."
msgstr ""
-#: doc/classes/Input.xml:275
+#: doc/classes/Input.xml:282
msgid ""
"Feeds an [InputEvent] to the game. Can be used to artificially trigger input "
"events from code. Also generates [method Node._input] calls.\n"
@@ -28822,12 +28935,21 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Input.xml:289
+#: doc/classes/Input.xml:296
msgid ""
"Removes all mappings from the internal database that match the given GUID."
msgstr ""
-#: doc/classes/Input.xml:298
+#: doc/classes/Input.xml:303
+msgid ""
+"Sets the acceleration value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:313
msgid ""
"Sets a custom mouse cursor image, which is only visible inside the game "
"window. The hotspot can also be specified. Passing [code]null[/code] to the "
@@ -28842,7 +28964,7 @@ msgid ""
"compression mode can't be used for custom cursors."
msgstr ""
-#: doc/classes/Input.xml:309
+#: doc/classes/Input.xml:324
msgid ""
"Sets the default cursor shape to be used in the viewport instead of "
"[constant CURSOR_ARROW].\n"
@@ -28852,11 +28974,38 @@ msgid ""
"cursor immediately."
msgstr ""
-#: doc/classes/Input.xml:318
+#: doc/classes/Input.xml:333
+msgid ""
+"Sets the gravity value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:341
+msgid ""
+"Sets the value of the rotation rate of the gyroscope sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:349
+msgid ""
+"Sets the value of the magnetic field of the magnetometer sensor. Can be used "
+"for debugging on devices without a hardware sensor, for example in an editor "
+"on a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:357
msgid "Sets the mouse mode. See the constants for more information."
msgstr ""
-#: doc/classes/Input.xml:325
+#: doc/classes/Input.xml:364
msgid ""
"Enables or disables the accumulation of similar input events sent by the "
"operating system. When input accumulation is enabled, all input events "
@@ -28870,7 +29019,7 @@ msgid ""
"results that closely follow the actual input."
msgstr ""
-#: doc/classes/Input.xml:336
+#: doc/classes/Input.xml:375
msgid ""
"Starts to vibrate the joypad. Joypads usually come with two rumble motors, a "
"strong and a weak one. [code]weak_magnitude[/code] is the strength of the "
@@ -28883,34 +29032,34 @@ msgid ""
"few seconds."
msgstr ""
-#: doc/classes/Input.xml:344
+#: doc/classes/Input.xml:383
msgid "Stops the vibration of the joypad."
msgstr ""
-#: doc/classes/Input.xml:351
+#: doc/classes/Input.xml:390
msgid ""
"Vibrate Android and iOS devices.\n"
"[b]Note:[/b] It needs [code]VIBRATE[/code] permission for Android at export "
"settings. iOS does not support duration."
msgstr ""
-#: doc/classes/Input.xml:359
+#: doc/classes/Input.xml:398
msgid "Sets the mouse position to the specified vector."
msgstr ""
-#: doc/classes/Input.xml:368
+#: doc/classes/Input.xml:407
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
-#: doc/classes/Input.xml:374
+#: doc/classes/Input.xml:413
msgid "Makes the mouse cursor visible if it is hidden."
msgstr ""
-#: doc/classes/Input.xml:377
+#: doc/classes/Input.xml:416
msgid "Makes the mouse cursor hidden if it is visible."
msgstr ""
-#: doc/classes/Input.xml:380
+#: doc/classes/Input.xml:419
msgid ""
"Captures the mouse. The mouse will be hidden and its position locked at the "
"center of the screen.\n"
@@ -28918,83 +29067,83 @@ msgid ""
"need to use [member InputEventMouseMotion.relative]."
msgstr ""
-#: doc/classes/Input.xml:384
+#: doc/classes/Input.xml:423
msgid "Makes the mouse cursor visible but confines it to the game window."
msgstr ""
-#: doc/classes/Input.xml:387
+#: doc/classes/Input.xml:426
msgid "Arrow cursor. Standard, default pointing cursor."
msgstr ""
-#: doc/classes/Input.xml:390
+#: doc/classes/Input.xml:429
msgid ""
"I-beam cursor. Usually used to show where the text cursor will appear when "
"the mouse is clicked."
msgstr ""
-#: doc/classes/Input.xml:393
+#: doc/classes/Input.xml:432
msgid ""
"Pointing hand cursor. Usually used to indicate the pointer is over a link or "
"other interactable item."
msgstr ""
-#: doc/classes/Input.xml:396
+#: doc/classes/Input.xml:435
msgid ""
"Cross cursor. Typically appears over regions in which a drawing operation "
"can be performed or for selections."
msgstr ""
-#: doc/classes/Input.xml:399
+#: doc/classes/Input.xml:438
msgid ""
"Wait cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application is still usable during the "
"operation."
msgstr ""
-#: doc/classes/Input.xml:402
+#: doc/classes/Input.xml:441
msgid ""
"Busy cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application isn't usable during the "
"operation (e.g. something is blocking its main thread)."
msgstr ""
-#: doc/classes/Input.xml:405
+#: doc/classes/Input.xml:444
msgid "Drag cursor. Usually displayed when dragging something."
msgstr ""
-#: doc/classes/Input.xml:408
+#: doc/classes/Input.xml:447
msgid ""
"Can drop cursor. Usually displayed when dragging something to indicate that "
"it can be dropped at the current position."
msgstr ""
-#: doc/classes/Input.xml:411
+#: doc/classes/Input.xml:450
msgid ""
"Forbidden cursor. Indicates that the current action is forbidden (for "
"example, when dragging something) or that the control at a position is "
"disabled."
msgstr ""
-#: doc/classes/Input.xml:414
+#: doc/classes/Input.xml:453
msgid ""
"Vertical resize mouse cursor. A double-headed vertical arrow. It tells the "
"user they can resize the window or the panel vertically."
msgstr ""
-#: doc/classes/Input.xml:417
+#: doc/classes/Input.xml:456
msgid ""
"Horizontal resize mouse cursor. A double-headed horizontal arrow. It tells "
"the user they can resize the window or the panel horizontally."
msgstr ""
-#: doc/classes/Input.xml:420
+#: doc/classes/Input.xml:459
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the bottom left to the top right. It tells the user they can resize the "
"window or the panel both horizontally and vertically."
msgstr ""
-#: doc/classes/Input.xml:423
+#: doc/classes/Input.xml:462
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the top left to the bottom right, the opposite of [constant "
@@ -29002,23 +29151,23 @@ msgid ""
"both horizontally and vertically."
msgstr ""
-#: doc/classes/Input.xml:426
+#: doc/classes/Input.xml:465
msgid "Move cursor. Indicates that something can be moved."
msgstr ""
-#: doc/classes/Input.xml:429
+#: doc/classes/Input.xml:468
msgid ""
"Vertical split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_VSIZE]."
msgstr ""
-#: doc/classes/Input.xml:432
+#: doc/classes/Input.xml:471
msgid ""
"Horizontal split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_HSIZE]."
msgstr ""
-#: doc/classes/Input.xml:435
+#: doc/classes/Input.xml:474
msgid "Help cursor. Usually a question mark."
msgstr ""
@@ -29426,7 +29575,9 @@ msgid "The drag position."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -30727,7 +30878,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30792,22 +30944,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -30822,7 +30976,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -30830,19 +30984,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -30910,7 +31064,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30968,7 +31123,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -32251,14 +32408,21 @@ msgid "Default text [Color] of the [LinkButton]."
msgstr ""
#: doc/classes/LinkButton.xml:46
-msgid "Text [Color] used when the [LinkButton] is being hovered."
+msgid ""
+"Text [Color] used when the [LinkButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/LinkButton.xml:49
-msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgid "Text [Color] used when the [LinkButton] is being hovered."
msgstr ""
#: doc/classes/LinkButton.xml:52
+msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:55
msgid "The vertical space between the baseline of text and the underline."
msgstr ""
@@ -32751,26 +32915,33 @@ msgid "Text [Color] used when the [MenuButton] is disabled."
msgstr ""
#: doc/classes/MenuButton.xml:64
-msgid "Text [Color] used when the [MenuButton] is being hovered."
+msgid ""
+"Text [Color] used when the [MenuButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/MenuButton.xml:67
-msgid "Text [Color] used when the [MenuButton] is being pressed."
+msgid "Text [Color] used when the [MenuButton] is being hovered."
msgstr ""
#: doc/classes/MenuButton.xml:70
-msgid "[StyleBox] used when the [MenuButton] is being hovered."
+msgid "Text [Color] used when the [MenuButton] is being pressed."
msgstr ""
#: doc/classes/MenuButton.xml:73
-msgid "The horizontal space between [MenuButton]'s icon and text."
+msgid "[StyleBox] used when the [MenuButton] is being hovered."
msgstr ""
#: doc/classes/MenuButton.xml:76
-msgid "Default [StyleBox] for the [MenuButton]."
+msgid "The horizontal space between [MenuButton]'s icon and text."
msgstr ""
#: doc/classes/MenuButton.xml:79
+msgid "Default [StyleBox] for the [MenuButton]."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:82
msgid "[StyleBox] used when the [MenuButton] is being pressed."
msgstr ""
@@ -34492,7 +34663,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -37358,26 +37529,33 @@ msgid "Text [Color] used when the [OptionButton] is disabled."
msgstr ""
#: doc/classes/OptionButton.xml:212
-msgid "Text [Color] used when the [OptionButton] is being hovered."
+msgid ""
+"Text [Color] used when the [OptionButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/OptionButton.xml:215
-msgid "Text [Color] used when the [OptionButton] is being pressed."
+msgid "Text [Color] used when the [OptionButton] is being hovered."
msgstr ""
#: doc/classes/OptionButton.xml:218
-msgid "[StyleBox] used when the [OptionButton] is being hovered."
+msgid "Text [Color] used when the [OptionButton] is being pressed."
msgstr ""
#: doc/classes/OptionButton.xml:221
-msgid "The horizontal space between [OptionButton]'s icon and text."
+msgid "[StyleBox] used when the [OptionButton] is being hovered."
msgstr ""
#: doc/classes/OptionButton.xml:224
-msgid "Default [StyleBox] for the [OptionButton]."
+msgid "The horizontal space between [OptionButton]'s icon and text."
msgstr ""
#: doc/classes/OptionButton.xml:227
+msgid "Default [StyleBox] for the [OptionButton]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:230
msgid "[StyleBox] used when the [OptionButton] is being pressed."
msgstr ""
@@ -37783,7 +37961,7 @@ msgstr ""
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -37813,14 +37991,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -37830,7 +38008,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -40330,17 +40508,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -40358,11 +40562,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -40557,7 +40761,9 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-msgid "Returns the [Physics2DDirectBodyState] of the body."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
@@ -41360,6 +41566,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -41377,7 +41601,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -41491,7 +41715,9 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-msgid "Returns the [PhysicsDirectBodyState] of the body."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/PhysicsServer.xml:370
@@ -42477,27 +42703,27 @@ msgstr ""
msgid "Removes an element from the array by index."
msgstr ""
-#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolColorArray.xml:66
-#: doc/classes/PoolIntArray.xml:67 doc/classes/PoolRealArray.xml:67
-#: doc/classes/PoolStringArray.xml:74 doc/classes/PoolVector2Array.xml:67
-#: doc/classes/PoolVector3Array.xml:66
+#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolIntArray.xml:67
+#: doc/classes/PoolRealArray.xml:67
msgid ""
"Sets the size of the array. If the array is grown, reserves elements at the "
"end of the array. If the array is shrunk, truncates the array to the new "
-"size."
+"size.\n"
+"[b]Note:[/b] Added elements are not automatically initialized to 0 and will "
+"contain garbage, i.e. indeterminate values."
msgstr ""
-#: doc/classes/PoolByteArray.xml:121
+#: doc/classes/PoolByteArray.xml:122
msgid "Changes the byte at the given index."
msgstr ""
-#: doc/classes/PoolByteArray.xml:127 doc/classes/PoolColorArray.xml:79
-#: doc/classes/PoolRealArray.xml:80 doc/classes/PoolStringArray.xml:87
+#: doc/classes/PoolByteArray.xml:128 doc/classes/PoolColorArray.xml:79
+#: doc/classes/PoolRealArray.xml:81 doc/classes/PoolStringArray.xml:87
#: doc/classes/PoolVector2Array.xml:80 doc/classes/PoolVector3Array.xml:79
msgid "Returns the size of the array."
msgstr ""
-#: doc/classes/PoolByteArray.xml:135
+#: doc/classes/PoolByteArray.xml:136
msgid ""
"Returns the slice of the [PoolByteArray] between indices (inclusive) as a "
"new [PoolByteArray]. Any negative index is considered to be from the end of "
@@ -42529,6 +42755,14 @@ msgstr ""
msgid "Appends a value to the array."
msgstr ""
+#: doc/classes/PoolColorArray.xml:66 doc/classes/PoolStringArray.xml:74
+#: doc/classes/PoolVector2Array.xml:67 doc/classes/PoolVector3Array.xml:66
+msgid ""
+"Sets the size of the array. If the array is grown, reserves elements at the "
+"end of the array. If the array is shrunk, truncates the array to the new "
+"size."
+msgstr ""
+
#: doc/classes/PoolColorArray.xml:73
msgid "Changes the [Color] at the given index."
msgstr ""
@@ -42565,11 +42799,11 @@ msgid ""
"valid, or at the end of the array ([code]idx == size()[/code])."
msgstr ""
-#: doc/classes/PoolIntArray.xml:74
+#: doc/classes/PoolIntArray.xml:75
msgid "Changes the int at the given index."
msgstr ""
-#: doc/classes/PoolIntArray.xml:80
+#: doc/classes/PoolIntArray.xml:81
msgid "Returns the array size."
msgstr ""
@@ -42601,7 +42835,7 @@ msgstr ""
msgid "Appends a [PoolRealArray] at the end of this array."
msgstr ""
-#: doc/classes/PoolRealArray.xml:74
+#: doc/classes/PoolRealArray.xml:75
msgid "Changes the float at the given index."
msgstr ""
@@ -43868,18 +44102,6 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:204
msgid ""
-"The project data directory is used for storing project-specific data "
-"(metadata, shader cache, etc.).\n"
-"[b]Note:[/b] Restart the application after changing this setting.\n"
-"[b]Note:[/b] Changing this value can help on platforms or with third-party "
-"tools where specific directory patterns are disallowed. Only modify this "
-"setting if you know that your environment requires it, as changing the "
-"default can impact compatibility with some external tools or plugins which "
-"expect the default [code].import[/code] folder."
-msgstr ""
-
-#: doc/classes/ProjectSettings.xml:209
-msgid ""
"Specifies a file to override project settings. For example: [code]user://"
"custom_settings.cfg[/code]. See \"Overriding\" in the [ProjectSettings] "
"class description at the top for more information.\n"
@@ -43887,7 +44109,7 @@ msgid ""
"code] will still be read to override the project settings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:213
+#: doc/classes/ProjectSettings.xml:208
msgid ""
"If [code]true[/code], the project will save user data to its own user "
"directory (see [member application/config/custom_user_dir_name]). This "
@@ -43897,13 +44119,28 @@ msgid ""
"user data directory)/Godot/app_userdata/(project name)[/code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:216
+#: doc/classes/ProjectSettings.xml:211
+msgid ""
+"If [code]true[/code], the project will use a hidden directory ([code]."
+"import[/code]) for storing project-specific data (metadata, shader cache, "
+"etc.).\n"
+"If [code]false[/code], a non-hidden directory ([code]import[/code]) will be "
+"used instead.\n"
+"[b]Note:[/b] Restart the application after changing this setting.\n"
+"[b]Note:[/b] Changing this value can help on platforms or with third-party "
+"tools where hidden directory patterns are disallowed. Only modify this "
+"setting if you know that your environment requires it, as changing the "
+"default can impact compatibility with some external tools or plugins which "
+"expect the default [code].import[/code] folder."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:217
msgid ""
"Icon set in [code].ico[/code] format used on Windows to set the game's icon. "
"This is done automatically on start by calling [method OS.set_native_icon]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:219
+#: doc/classes/ProjectSettings.xml:220
msgid ""
"Time samples for frame deltas are subject to random variation introduced by "
"the platform, even when frames are displayed at regular intervals thanks to "
@@ -43917,14 +44154,14 @@ msgid ""
"adequate to render frames at the refresh rate."
msgstr ""
-#: doc/classes/ProjectSettings.xml:224
+#: doc/classes/ProjectSettings.xml:225
msgid ""
"[b]Experimental.[/b] Shifts the measurement of delta time for each frame to "
"just after the drawing has taken place. This may lead to more consistent "
"deltas and a reduction in frame stutters."
msgstr ""
-#: doc/classes/ProjectSettings.xml:227
+#: doc/classes/ProjectSettings.xml:228
msgid ""
"If [code]true[/code], disables printing to standard error. If [code]true[/"
"code], this also hides error and warning messages printed by [method "
@@ -43933,7 +44170,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:231
+#: doc/classes/ProjectSettings.xml:232
msgid ""
"If [code]true[/code], disables printing to standard output. This is "
"equivalent to starting the editor or project with the [code]--quiet[/code] "
@@ -43941,7 +44178,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:235
+#: doc/classes/ProjectSettings.xml:236
msgid ""
"If [code]true[/code], flushes the standard output stream every time a line "
"is printed. This affects both terminal logging and file logging.\n"
@@ -43957,20 +44194,20 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:241
+#: doc/classes/ProjectSettings.xml:242
msgid ""
"Debug build override for [member application/run/flush_stdout_on_print], as "
"performance is less important during debugging.\n"
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:245
+#: doc/classes/ProjectSettings.xml:246
msgid ""
"Forces a delay between frames in the main loop (in milliseconds). This may "
"be useful if you plan to disable vertical synchronization."
msgstr ""
-#: doc/classes/ProjectSettings.xml:248
+#: doc/classes/ProjectSettings.xml:249
msgid ""
"If [code]true[/code], enables low-processor usage mode. This setting only "
"works on desktop platforms. The screen is not redrawn if nothing changes "
@@ -43978,75 +44215,81 @@ msgid ""
"useless (and can hurt performance) in most games."
msgstr ""
-#: doc/classes/ProjectSettings.xml:251
+#: doc/classes/ProjectSettings.xml:252
msgid ""
"Amount of sleeping between frames when the low-processor usage mode is "
"enabled (in microseconds). Higher values will result in lower CPU usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:254
+#: doc/classes/ProjectSettings.xml:255
msgid "Path to the main scene file that will be loaded when the project runs."
msgstr ""
-#: doc/classes/ProjectSettings.xml:257 doc/classes/ProjectSettings.xml:260
+#: doc/classes/ProjectSettings.xml:258 doc/classes/ProjectSettings.xml:261
msgid ""
"Audio buses will disable automatically when sound goes below a given dB "
"threshold for a given time. This saves CPU as effects assigned to that bus "
"will no longer do any processing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:263
+#: doc/classes/ProjectSettings.xml:264
msgid ""
"Default [AudioBusLayout] resource file to use in the project, unless "
"overridden by the scene."
msgstr ""
-#: doc/classes/ProjectSettings.xml:266
+#: doc/classes/ProjectSettings.xml:267
msgid ""
"Specifies the audio driver to use. This setting is platform-dependent as "
"each platform supports different audio drivers. If left empty, the default "
"audio driver will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:269
+#: doc/classes/ProjectSettings.xml:270
msgid ""
"If [code]true[/code], microphone input will be allowed. This requires "
"appropriate permissions to be set when exporting to Android or iOS."
msgstr ""
-#: doc/classes/ProjectSettings.xml:272
+#: doc/classes/ProjectSettings.xml:273
msgid ""
"The mixing rate used for audio (in Hz). In general, it's better to not touch "
"this and leave it to the host operating system."
msgstr ""
-#: doc/classes/ProjectSettings.xml:275
+#: doc/classes/ProjectSettings.xml:276
msgid ""
"Safer override for [member audio/mix_rate] in the Web platform. Here "
"[code]0[/code] means \"let the browser choose\" (since some browsers do not "
"like forcing the mix rate)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:278
+#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:281
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:284
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:287
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -44056,7 +44299,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:290
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -44066,27 +44309,27 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:293
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:296
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
-#: doc/classes/ProjectSettings.xml:299
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:302
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -44094,81 +44337,81 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:305
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:308
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:311
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:314
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:317
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr ""
-#: doc/classes/ProjectSettings.xml:320
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:323
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:326
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:329
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:332
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:335
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:338
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:341
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -44176,111 +44419,111 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:344
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:347
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:350
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:353
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:356
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:359
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:362
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:365
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:368
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:371
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:374
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:377
+#: doc/classes/ProjectSettings.xml:380
#, fuzzy
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
msgstr "Nếu [code]true[/code], há»a tiết sẽ được căn ở trung tâm."
-#: doc/classes/ProjectSettings.xml:380
+#: doc/classes/ProjectSettings.xml:383
#, fuzzy
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
msgstr "Nếu [code]true[/code], há»a tiết sẽ được căn ở trung tâm."
-#: doc/classes/ProjectSettings.xml:383
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:386
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:389
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:392
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:395
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:398
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -44291,91 +44534,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:403
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:406
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:409
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:412
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:415
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:418
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:421
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:424
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:427
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:430
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:433
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:436
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:439
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr ""
-#: doc/classes/ProjectSettings.xml:442
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:445
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:448
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:451
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -44384,13 +44627,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:455
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:458
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -44400,7 +44643,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:463
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -44408,19 +44651,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:468
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:472
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:476
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -44434,45 +44677,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:481
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:484
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:488
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:491
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:494
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:497
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:500
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -44481,7 +44724,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:503
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -44492,7 +44735,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:507
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -44508,14 +44751,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:515
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:518
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -44523,49 +44766,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:521
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:524
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:529
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:532
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:535
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:538
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:541
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:544
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:547
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -44574,7 +44817,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:551
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44582,7 +44825,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:555
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44590,7 +44833,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:559
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44600,7 +44843,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:563
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -44609,7 +44852,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:567
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -44618,7 +44861,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:571
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44628,7 +44871,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:575
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44636,7 +44879,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:579
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -44646,7 +44889,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:583
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -44656,7 +44899,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:587
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44664,7 +44907,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:591
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -44673,7 +44916,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:595
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44681,7 +44924,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:599
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -44693,477 +44936,477 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:605
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:608
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:611
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:614
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:617
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:620
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:623
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:626
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:629
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:632
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:635
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:638
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:641
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:644
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:647
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:650
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:653
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:656
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:659
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:662
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:665
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:668
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:671
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:674
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:677
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:680
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:683
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:686
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:689
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:692
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:695
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:698
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:701
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:704
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:707
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:710
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:713
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:716
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:719
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:722
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:725
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:728
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:731
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:734
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:737
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:740
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:743
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:746
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:749
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:752
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:755
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:758
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:761
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:764
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:767
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:770
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:773
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:776
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:779
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:782
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:785
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:788
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:791
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:794
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:797
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:800
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:803
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:806
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:809
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:812
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:815
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:818
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:821
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:824
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:827
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:830
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:833
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:836
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:839
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:842
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:845
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:848
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:851
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:854
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:857
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:860
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:863
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:866
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:869
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:872
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:875
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:878
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:881
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr ""
-#: doc/classes/ProjectSettings.xml:884
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:887
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:890
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:893
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:896
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:899
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:902
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:905
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:908
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:911
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:914
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:917
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:920
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:923
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:926
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:929
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:932
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:935
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:938
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:941
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:946
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:949
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -45171,92 +45414,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:952
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:955
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:958
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:961
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:964
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:967
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:970
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:973
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:976
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:979
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:982
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:985
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:988
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:991
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:994
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:997
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1000
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1003
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -45266,33 +45509,33 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1007
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1010
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1013
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1017
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1021
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45305,7 +45548,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1025
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45317,7 +45560,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1033
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45329,7 +45572,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1041
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45342,7 +45585,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1045
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -45350,28 +45593,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1049
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1053
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1056
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1059
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -45381,25 +45624,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1063
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1066
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1069
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1072
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45412,7 +45655,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1076
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45424,7 +45667,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1084
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45436,7 +45679,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1092
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45449,13 +45692,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1096
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1099
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -45463,11 +45706,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1103
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1106
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -45481,7 +45724,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1112
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -45490,7 +45733,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1116
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -45506,7 +45749,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1121
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -45516,7 +45759,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1125
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45526,7 +45769,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1129
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -45537,7 +45780,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1133
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45547,7 +45790,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1137
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -45555,7 +45798,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1141
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -45566,7 +45809,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1145
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -45581,7 +45824,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1151
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -45590,13 +45833,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1156
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1159
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -45605,7 +45848,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1162
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -45615,7 +45858,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1165
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -45627,7 +45870,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1168
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -45637,24 +45880,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1171
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1174
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1177
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1180
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -45663,7 +45906,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1183
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -45671,7 +45914,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1186
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -45680,7 +45923,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1189
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -45690,7 +45933,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1193
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -45698,31 +45941,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1197
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1200
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1203
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1206
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1209
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -45730,7 +45973,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1212
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -45740,46 +45983,53 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1215
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1218
+#: doc/classes/ProjectSettings.xml:1221
+msgid ""
+"iOS specific override for [member rendering/gles2/compatibility/"
+"disable_half_float], due to poor support for half-float vertex compression "
+"on many devices."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1224
msgid ""
-"If [code]true[/code] and available on the target device, enables high "
-"floating point precision for all shader computations in GLES2.\n"
+"If [code]true[/code] and available on the target Android device, enables "
+"high floating point precision for all shader computations in GLES2.\n"
"[b]Warning:[/b] High floating point precision can be extremely slow on older "
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1225
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1228
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1231
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1234
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -45787,7 +46037,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1237
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -45797,7 +46047,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1240
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -45806,7 +46056,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1243
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -45815,20 +46065,20 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1246
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1249
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1252
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -45837,7 +46087,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1255
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -45845,7 +46095,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1258
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -45854,7 +46104,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -45864,20 +46114,20 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1267
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1274
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -45886,13 +46136,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -45902,46 +46152,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1293
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1296
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1299
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1302
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1305
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -45951,7 +46201,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -45963,7 +46213,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -45971,7 +46221,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1316
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -45979,7 +46229,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -45988,7 +46238,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1323
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -46002,7 +46252,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1328
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -46012,7 +46262,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1331
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -46021,7 +46271,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1334
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -46031,54 +46281,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1337
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1340
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1343
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1346
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1349
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1352
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1355
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1358
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -46089,61 +46339,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1365
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1368
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1371
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1374
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1377
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1380
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1383
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1386
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -46154,7 +46404,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -46163,26 +46413,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1393 doc/classes/ProjectSettings.xml:1396
#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1405
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1408
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1411
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -46193,20 +46443,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1418
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -46218,52 +46468,52 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1428
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1435
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1438
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1441
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1444
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1447
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1450
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1453
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -46271,7 +46521,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -46281,10 +46531,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -46293,10 +46543,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -46305,10 +46555,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -46317,10 +46567,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -46329,10 +46579,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -46996,40 +47246,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr ""
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -47037,14 +47301,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -49371,6 +49635,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -49388,7 +49668,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -49396,11 +49676,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -49410,19 +49690,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -54812,20 +55092,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -54836,28 +55121,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -54869,19 +55154,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
@@ -57662,26 +57947,33 @@ msgid "Text [Color] used when the [ToolButton] is disabled."
msgstr ""
#: doc/classes/ToolButton.xml:39
-msgid "Text [Color] used when the [ToolButton] is being hovered."
+msgid ""
+"Text [Color] used when the [ToolButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/ToolButton.xml:42
-msgid "Text [Color] used when the [ToolButton] is being pressed."
+msgid "Text [Color] used when the [ToolButton] is being hovered."
msgstr ""
#: doc/classes/ToolButton.xml:45
-msgid "[StyleBox] used when the [ToolButton] is being hovered."
+msgid "Text [Color] used when the [ToolButton] is being pressed."
msgstr ""
#: doc/classes/ToolButton.xml:48
-msgid "The horizontal space between [ToolButton]'s icon and text."
+msgid "[StyleBox] used when the [ToolButton] is being hovered."
msgstr ""
#: doc/classes/ToolButton.xml:51
-msgid "Default [StyleBox] for the [ToolButton]."
+msgid "The horizontal space between [ToolButton]'s icon and text."
msgstr ""
#: doc/classes/ToolButton.xml:54
+msgid "Default [StyleBox] for the [ToolButton]."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:57
msgid "[StyleBox] used when the [ToolButton] is being pressed."
msgstr ""
diff --git a/doc/translations/zh_CN.po b/doc/translations/zh_CN.po
index 987dbc88ad..8ecab23167 100644
--- a/doc/translations/zh_CN.po
+++ b/doc/translations/zh_CN.po
@@ -52,12 +52,17 @@
# 有趣æžäº† <2944595791@qq.com>, 2021.
# 刘亚西 <wayrboy123@gmail.com>, 2021.
# 诗鸷Temsys <shenshichao920@hotmail.com>, 2021.
+# Sam Sun <oppositenormal@outlook.com>, 2021.
+# sudo-behappy <3216539984@qq.com>, 2021.
+# Cc <2590090025@qq.com>, 2021.
+# è‹è½¼ <youwanyuyu@gmail.com>, 2021.
+# ErrorDreemurr <diandaokui@qq.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2021-10-16 13:25+0000\n"
-"Last-Translator: WangYi13 <wyi13@outlook.com>\n"
+"PO-Revision-Date: 2021-11-19 08:44+0000\n"
+"Last-Translator: Haoyu Qiu <timothyqiu32@gmail.com>\n"
"Language-Team: Chinese (Simplified) <https://hosted.weblate.org/projects/"
"godot-engine/godot-class-reference/zh_Hans/>\n"
"Language: zh_CN\n"
@@ -65,45 +70,45 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Weblate 4.9-dev\n"
+"X-Generator: Weblate 4.9.1-dev\n"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Description"
msgstr "æè¿°"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Tutorials"
msgstr "教程"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Properties"
msgstr "属性"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Methods"
msgstr "方法"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Theme Properties"
msgstr "主题属性"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Signals"
msgstr "ä¿¡å·"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Enumerations"
msgstr "枚举"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Constants"
msgstr "常é‡"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Property Descriptions"
msgstr "属性说明"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Method Descriptions"
msgstr "方法说明"
@@ -152,8 +157,8 @@ msgid ""
"[/codeblock]\n"
"Supported color names are the same as the constants defined in [Color]."
msgstr ""
-"æ ¹æ®æ ‡å‡†åç§° [code]name[/code] 返回一个颜色,[code]alpha[/code] 值的范围为0到"
-"1。\n"
+"æ ¹æ®æ ‡å‡†åç§° [code]name[/code] 和在0到1区间的值 [code]alpha[/code] 返回一个颜"
+"色。\n"
"[codeblock]\n"
"red = ColorN(\"red\", 1)\n"
"[/codeblock]\n"
@@ -242,7 +247,7 @@ msgstr ""
"push_error] 的加强版,用于å‘项目开å‘者或æ’件用户报错。\n"
"[b]注æ„:[/b] 出于对性能的考虑,[method assert] 中的代ç åªä¼šåœ¨è°ƒè¯•版本或者从"
"编辑器è¿è¡Œé¡¹ç›®æ—¶æ‰§è¡Œã€‚所以ä¸è¦åœ¨ [method assert] 调用中加入具有副作用的代ç ã€‚"
-"å¦åˆ™ï¼Œé¡¹ç›®åœ¨ä»¥å‘布模å¼å¯¼å‡ºåŽå°†æœ‰ä¸ä¸€è‡´çš„行为。\n"
+"å¦åˆ™ï¼Œé¡¹ç›®åœ¨ä»¥å‘行模å¼å¯¼å‡ºåŽå°†æœ‰ä¸ä¸€è‡´çš„行为。\n"
"如果给出了å¯é€‰çš„ [code]message[/code] 傿•°ï¼Œåœ¨é€šç”¨çš„“Assertion failedâ€æ¶ˆæ¯ä¹‹"
"外,还会显示该信æ¯ã€‚ä½ å¯ä»¥ä½¿ç”¨å®ƒæ¥æä¾›å…³äºŽæ–­è¨€å¤±è´¥åŽŸå› çš„å…¶ä»–è¯¦ç»†ä¿¡æ¯ã€‚\n"
"[codeblock]\n"
@@ -343,7 +348,7 @@ msgid ""
"[/codeblock]\n"
"This is the inverse of [method ord]."
msgstr ""
-"返回一个作为字符串的字符,该字符为给定Unicode代ç ç‚¹ï¼ˆä¸ŽASCIIç å…¼å®¹ï¼‰ã€‚\n"
+"返回一个作为字符串的字符,该字符为给定Unicodeç¼–ç ï¼ˆä¸ŽASCIIç å…¼å®¹ï¼‰ã€‚\n"
"[codeblock]\n"
"a = char(65) # a is \"A\"\n"
"a = char(65 + 32) # a is \"a\"\n"
@@ -361,7 +366,7 @@ msgid ""
"a = clamp(15, 1, 20) # a is 15\n"
"[/codeblock]"
msgstr ""
-"钳制 [code]value[/code],返回一个ä¸å°äºŽ [code]min[/code] 且ä¸å¤§äºŽ [code]max[/"
+"é™åˆ¶ [code]value[/code],返回一个ä¸å°äºŽ [code]min[/code] 且ä¸å¤§äºŽ [code]max[/"
"code]的值。\n"
"[codeblock]\n"
"a = clamp(1000, 1, 20) # a = 20\n"
@@ -486,18 +491,18 @@ msgstr ""
"\"值。这个缓和函数是基于指数。曲线[code]curve[/code]å¯ä»¥æ˜¯ä»»ä½•浮点数,具体数"
"值会导致以下行为。\n"
"[codeblock]\n"
-"- 低于-1.0(独å ï¼‰ã€‚缓进缓出\n"
+"- 低于-1.0(ä¸åŒ…括)。缓进缓出\n"
"- 1.0:线性\n"
-"- 在-1.0å’Œ0.0之间(独å ï¼‰ã€‚缓出-è¿›\n"
+"- 在-1.0å’Œ0.0之间(ä¸åŒ…括)。缓出-è¿›\n"
"- 0.0: æ’定\n"
"- 在0.0到1.0之间(ä¸åŒ…括)。缓进\n"
"- 1.0:线性\n"
"- 大于1.0(ä¸åŒ…括)。缓出\n"
"[/codeblock]\n"
"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/"
-"ease_cheatsheet.png]ease()曲线值作弊表[/url]\n"
-"也请看[方法smoothstep]ã€‚å¦‚æžœä½ éœ€è¦æ‰§è¡Œæ›´é«˜çº§çš„转场,请使用[Tween]或"
-"[AnimationPlayer]。(å¦‚æžœåœ°å€æ— æ³•访问用raw.sevencdn.com替æ¢raw."
+"ease_cheatsheet.png]ease()曲线值备忘图[/url]\n"
+"也请看[method smoothstep]ã€‚å¦‚æžœä½ éœ€è¦æ‰§è¡Œæ›´é«˜çº§çš„转场,请使用[Tween]或"
+"[AnimationPlayer]。(å¦‚æžœå¤‡å¿˜å›¾åœ°å€æ— æ³•访问用raw.sevencdn.com替æ¢raw."
"githubusercontent.comå¯åŠ é€Ÿè®¿é—®)。"
#: modules/gdscript/doc_classes/@GDScript.xml:274
@@ -539,7 +544,7 @@ msgstr ""
"a = floor(2.99) # a = 2.0\n"
"a = floor(-2.99) # a = -3.0\n"
"[/codeblock]\n"
-"å¦è§ [method ceil]ã€[method round]ã€[method stepify] å’Œ [int]。\n"
+"å‚阅 [method ceil]ã€[method round]ã€[method stepify] å’Œ [int]。\n"
"[b]注æ„:[/b] 该方法返回一个浮点数。如果你需è¦ä¸€ä¸ªæ•´æ•°ï¼Œè€Œ [code]s[/code] 是"
"一个éžè´Ÿæ•°ï¼Œä½ å¯ä»¥ç›´æŽ¥ä½¿ç”¨ [code]int(s)[/code]。"
@@ -736,11 +741,10 @@ msgstr ""
"考虑给定范围,返回归一化值。这与 [method lerp] 相å。\n"
"[codeblock]\n"
"var middle = lerp(20, 30, 0.75)\n"
-"# `middle` is now 27.5.\n"
-"# Now, we pretend to have forgotten the original ratio and want to get it "
-"back.\n"
+"# `middle` 现在是 27.5\n"
+"# 现在,我们å‡è£…忘记了原æ¥çš„æ¯”例,想把它找回æ¥ã€‚\n"
"var ratio = inverse_lerp(20, 30, 27.5)\n"
-"# `ratio` is now 0.75.\n"
+"# `ratio` 现在是 0.75.\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:430
@@ -754,9 +758,9 @@ msgid ""
msgstr ""
"如果 [code]a[/code] 和 [code]b[/code] 彼此近似相等,则返回 [code]true[/"
"code]。\n"
-"在此,近似等于是指 [code]a[/code] å’Œ [code]b[/code] 彼此之间在较å°çš„内部ε内,"
-"å®ƒéšæ•°å­—çš„å¤§å°æˆæ¯”例。\n"
-"具有相åŒç¬¦å·çš„æ— ç©·å¤§å€¼è¢«è§†ä¸ºç›¸ç­‰ã€‚"
+"这里,近似相等æ„味ç€[code]a[/code]å’Œ[code]b[/code]相互之间在一个å°çš„内部ε里,"
+"这个内部εéšç€æ•°å­—的大å°è€Œå˜åŒ–。 \n"
+"相åŒç¬¦å·çš„æ— ç©·å¤§å€¼è¢«è®¤ä¸ºæ˜¯ç›¸ç­‰çš„。"
#: modules/gdscript/doc_classes/@GDScript.xml:439
msgid ""
@@ -816,12 +820,12 @@ msgid ""
"lerp(Vector2(1, 5), Vector2(3, 2), 0.5) # Returns Vector2(2, 3.5)\n"
"[/codeblock]"
msgstr ""
-"用一个归一化的值在两个值之间进行线性æ’值。这与[method inverse_lerp]相å。\n"
-"如果[code]from[/code]å’Œ[code]to[/code]傿•°ç±»åž‹æ˜¯[int]或[float],返回值是"
-"[float]。\n"
-"如果两者都是相åŒçš„矢é‡ç±»åž‹ï¼ˆ[Vector2]ã€[Vector3]或[Color]),返回值将是相åŒçš„"
-"类型([code]lerp[/code]ç„¶åŽè°ƒç”¨è¯¥çŸ¢é‡ç±»åž‹çš„[code]linear_interpolate[/code]æ–¹"
-"法)。\n"
+"用一个归一化的值在两个值之间进行线性æ’值。这与 [method inverse_lerp]相å。\n"
+"如果[code] from [/code]å’Œ[code] to [/code]傿•°ç±»åž‹æ˜¯ [int] 或 [float],返回值"
+"都是[float]。\n"
+"如果两者都是相åŒçš„å‘é‡ç±»åž‹ï¼ˆ[Vector2]ã€[Vector3]或[Color]),返回值将是相åŒçš„"
+"类型([code]lerp[/code]ç„¶åŽè°ƒç”¨è¯¥å‘é‡ç±»åž‹çš„[code] linear_interpolate [/code]"
+"方法)。\n"
"[codeblock]\n"
"lerp(0, 4, 0.75) # 返回3.0\n"
"lerp(Vector2(1, 5), Vector2(3, 2), 0.5) # 返回 Vector2(2, 3.5)\n"
@@ -1577,7 +1581,7 @@ msgstr ""
"code]和[code]1[/code]之间。\n"
"è¿™æ¡S形曲线是立方Hermiteæ’值器,由[code]f(y)=3*y^2-2*y^3[/code]给出,其中"
"[code]y=(x-from)/(to-from)[/code]。\n"
-"[codeblock]。\n"
+"[codeblock]\n"
"smoothstep(0, 2, -5.0) # 返回 0.0\n"
"smoothstep(0, 2, 0.5) # 返回 0.15625\n"
"smoothstep(0, 2, 1.0) # 返回 0.5\n"
@@ -1586,7 +1590,7 @@ msgstr ""
"与曲线值为[code]-1.6521[/code]的[method ease]相比,[method smoothstep]返回最"
"平滑的曲线,导数没有çªç„¶å˜åŒ–ã€‚å¦‚æžœä½ éœ€è¦æ‰§è¡Œæ›´é«˜çº§çš„过渡,请使用[Tween]或"
"[AnimationPlayer]。\n"
-"[url=https://raw.sevencdn.com/godotengine/godot-docs/3.4/img/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/"
"smoothstep_ease_comparison.png]smoothstep()与 ease(x, -1.6521)返回值的比较[/"
"url]"
@@ -2245,9 +2249,8 @@ msgid "Vertical bottom alignment, usually for text-derived classes."
msgstr "垂直下对é½ï¼Œå¸¸ç”¨äºŽæ–‡æœ¬æ´¾ç”Ÿç±»ã€‚"
#: doc/classes/@GlobalScope.xml:140
-#, fuzzy
msgid "Scancodes with this bit applied are non-printable."
-msgstr "é”®ç åœ¨å¯ç”¨äº†è¯¥æ¯”特ä½åŽæ˜¯ä¸å¯æ‰“å°çš„。"
+msgstr "该比特ä½åº”用的键ç ä¸å¯æ‰“å°ã€‚"
#: doc/classes/@GlobalScope.xml:143
msgid "Escape key."
@@ -4069,7 +4072,7 @@ msgstr "将属性åºåˆ—化并ä¿å­˜åˆ°åœºæ™¯æ–‡ä»¶ä¸­ï¼ˆé»˜è®¤ï¼‰ã€‚"
#: doc/classes/@GlobalScope.xml:1436
msgid "The property is shown in the editor inspector (default)."
-msgstr "å°†å±žæ€§å±•ç¤ºåœ¨ç¼–è¾‘å™¨çš„å±žæ€§æ£€æŸ¥å™¨é¢æ¿ä¸­ï¼ˆé»˜è®¤ï¼‰ã€‚"
+msgstr "å°†å±žæ€§å±•ç¤ºåœ¨ç¼–è¾‘å™¨çš„æ£€æŸ¥å™¨é¢æ¿ä¸­ï¼ˆé»˜è®¤ï¼‰ã€‚"
#: doc/classes/@GlobalScope.xml:1439 doc/classes/@GlobalScope.xml:1442
msgid "Deprecated usage flag, unused."
@@ -4077,7 +4080,7 @@ msgstr "废弃使用的标志,未使用。"
#: doc/classes/@GlobalScope.xml:1445
msgid "The property can be checked in the editor inspector."
-msgstr "该属性å¯ä»¥åœ¨ç¼–辑器的属性检查器中被勾选。"
+msgstr "该属性å¯ä»¥åœ¨ç¼–辑器的检查器中被勾选。"
#: doc/classes/@GlobalScope.xml:1448
msgid "The property is checked in the editor inspector."
@@ -4388,19 +4391,21 @@ msgstr ""
#: doc/classes/Transform2D.xml:11 doc/classes/Vector2.xml:11
#: doc/classes/Vector3.xml:11
msgid "https://docs.godotengine.org/en/3.4/tutorials/math/index.html"
-msgstr "https://docs.godotengine.org/en/3.4/tutorials/math/index.html"
+msgstr "https://docs.godotengine.org/zh_CN/stable/tutorials/math/index.html"
#: doc/classes/AABB.xml:13 doc/classes/Rect2.xml:13 doc/classes/Vector2.xml:12
#: doc/classes/Vector3.xml:12
msgid "https://docs.godotengine.org/en/3.4/tutorials/math/vector_math.html"
-msgstr "https://docs.godotengine.org/en/3.4/tutorials/math/vector_math.html"
+msgstr ""
+"https://docs.godotengine.org/zh_CN/stable/tutorials/math/vector_math.html"
#: doc/classes/AABB.xml:14 doc/classes/Rect2.xml:14 doc/classes/Vector2.xml:13
#: doc/classes/Vector3.xml:13
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/math/vectors_advanced.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/math/vectors_advanced.html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/math/vectors_advanced."
+"html"
#: doc/classes/AABB.xml:22
msgid "Constructs an [AABB] from a position and size."
@@ -4418,86 +4423,95 @@ msgid ""
msgstr "该 [AABB] 完全包å«å¦ä¸€ä¸ªæ—¶ï¼Œè¿”回 [code]true[/code]。"
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
-msgstr "è¿”å›žè¢«æ‰©å±•è‡³åŒ…å«æŒ‡å®šç‚¹çš„该 [AABB]。"
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
+msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr "返回该 [AABB] 的体积。"
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr "获å–该 [AABB] çš„ 8 个端点的ä½ç½®ã€‚"
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr "返回该 [AABB] 归一化åŽçš„æœ€é•¿è½´ã€‚"
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
msgstr ""
"返回该 [AABB] æœ€é•¿è½´çš„ç´¢å¼•ï¼ˆæ ¹æ® [Vector3] çš„ [code]AXIS_*[/code] 常é‡ï¼‰ã€‚"
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr "返回该 [AABB] 最长轴的标é‡é•¿åº¦ã€‚"
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr "返回该 [AABB] 归一化åŽçš„æœ€çŸ­è½´ã€‚"
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
msgstr ""
"返回该 [AABB] æœ€çŸ­è½´çš„ç´¢å¼•ï¼ˆæ ¹æ® [Vector3] çš„ [code]AXIS_*[/code] 常é‡ï¼‰ã€‚"
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr "返回该 [AABB] 最短轴的标é‡é•¿åº¦ã€‚"
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
msgstr "返回指定方å‘上的支æŒç‚¹ã€‚常用于碰撞检测算法。"
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
msgstr "返回该 [AABB] çš„å‰¯æœ¬ï¼Œæ²¿ç€æ‰€æœ‰é¢çš„æ–¹å‘都增加了指定的大å°ã€‚"
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr "该 [AABB] ä¸ºå¹³é¢æˆ–者为空时,返回 [code]true[/code]。"
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr "该 [AABB] 为空时,返回 [code]true[/code]。"
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr "该 [AABB] åŒ…å«æŒ‡å®šç‚¹æ—¶ï¼Œè¿”回 [code]true[/code]。"
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
msgstr "返回两个 [AABB] 的交å åŒºåŸŸã€‚失败时返回空的 AABB(大å°ä¸º 0,0,0)。"
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr "该 [AABB] 与å¦ä¸€ä¸ªäº¤å æ—¶ï¼Œè¿”回 [code]true[/code]。"
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr "该 [AABB] åŒæ—¶ä½äºŽæŒ‡å®šå¹³é¢çš„两边时,返回 [code]true[/code]。"
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
@@ -4505,7 +4519,7 @@ msgstr ""
"该 [AABB] 与 [code]from[/code] å’Œ [code]to[/code] 所构æˆçš„çº¿æ®µæœ‰äº¤å æ—¶ï¼Œè¿”回 "
"[code]true[/code]。"
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
@@ -4514,23 +4528,23 @@ msgstr ""
"该 [AABB] 与 [code]aabb[/code] 近似相等时,返回 [code]true[/code]。通过将å„个"
"分é‡è°ƒç”¨ [method @GDScript.is_equal_approx] 确定。"
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr "è¿”å›žåŒæ—¶åŒ…å«è¯¥ [AABB] å’Œ [code]with[/code] 的更大的 [AABB]。"
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
msgstr ""
"终点角。通过 [code]position + size[/code] 计算而æ¥ã€‚设置该值会修改大å°ã€‚"
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr "起点角。通常比 [member end] å°ã€‚"
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
"positive.\n"
@@ -4586,6 +4600,9 @@ msgid ""
"may cause a crash. If you wish to hide it or any of its children, use their "
"[member CanvasItem.visible] property."
msgstr ""
+"返回嵌入文本的标签。\n"
+"[b]警告:[/b]这是个必è¦çš„内部节点,删除和释放它有å¯èƒ½é€ æˆå´©æºƒã€‚如果你希望éšè—"
+"它或它的任æ„一个å­èŠ‚ç‚¹ï¼Œè¯·ä½¿ç”¨å®ƒä»¬çš„ [member CanvasItem.visible] 属性。"
#: doc/classes/AcceptDialog.xml:41
msgid ""
@@ -4594,6 +4611,9 @@ msgid ""
"may cause a crash. If you wish to hide it or any of its children, use their "
"[member CanvasItem.visible] property."
msgstr ""
+"返回OK按钮\n"
+"[b]警告:[/b]这是个必è¦çš„内部节点,删除和释放它有å¯èƒ½é€ æˆå´©æºƒã€‚如果你希望éšè—"
+"它或它的任æ„一个å­èŠ‚ç‚¹ï¼Œè¯·ä½¿ç”¨å®ƒä»¬çš„ [member CanvasItem.visible] 属性。"
#: doc/classes/AcceptDialog.xml:49
msgid ""
@@ -4649,7 +4669,7 @@ msgstr "接å—å¯¹è¯æ¡†æ—¶ï¼Œå³æŒ‰ä¸‹OK按钮时å‘出。"
#: doc/classes/AcceptDialog.xml:82
msgid "Emitted when a custom button is pressed. See [method add_button]."
-msgstr "按下自定义按钮时å‘出。 å‚阅[方法add_button]。"
+msgstr "按下自定义按钮时å‘出。 å‚阅[method add_button]。"
#: doc/classes/AESContext.xml:4
msgid "Interface to low level AES encryption features."
@@ -4811,7 +4831,8 @@ msgstr ""
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/2d/2d_sprite_animation.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/2d/2d_sprite_animation.html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/2d/2d_sprite_animation."
+"html"
#: doc/classes/AnimatedSprite.xml:12 doc/classes/Area2D.xml:11
#: doc/classes/AudioStreamPlayer.xml:12 doc/classes/Button.xml:24
@@ -4924,7 +4945,6 @@ msgid "Proxy texture for simple frame-based animations."
msgstr "基于简å•帧动画的代ç†çº¹ç†ã€‚"
#: doc/classes/AnimatedTexture.xml:7
-#, fuzzy
msgid ""
"[AnimatedTexture] is a resource format for frame-based animations, where "
"multiple textures can be chained automatically with a predefined delay for "
@@ -4940,15 +4960,17 @@ msgid ""
"[b]Note:[/b] AnimatedTexture doesn't support using [AtlasTexture]s. Each "
"frame needs to be a separate [Texture]."
msgstr ""
-"[AnimatedTexture]æ˜¯ç”¨äºŽåŸºäºŽå¸§çš„åŠ¨ç”»çš„èµ„æºæ ¼å¼ï¼Œå…¶ä¸­å¯ä»¥è‡ªåŠ¨ä¸ºæ¯ä¸ªå¸§ä»¥é¢„定义的"
-"延迟链接多个纹ç†ã€‚与[AnimationPlayer]或[AnimatedSprite2D]ä¸åŒï¼Œå®ƒä¸æ˜¯[Node],"
-"但具有å¯ä»¥åœ¨å¯ä»¥ä½¿ç”¨[Texture2D]资æºçš„任何地方使用的优点,例如在[TileSet]"
+"[AnimatedTexture]是一ç§èµ„æºæ ¼å¼ï¼Œç”¨äºŽåŸºäºŽå¸§çš„动画,其中多个纹ç†è‡ªåŠ¨é“¾æŽ¥èµ·æ¥ï¼Œ"
+"æ¯å¸§æœ‰é¢„定义延迟。与[AnimationPlayer]或[AnimatedSprite]ä¸åŒï¼Œå®ƒä¸æ˜¯ä¸€ä¸ª"
+"[Node],其优点是å¯åœ¨ä»»ä½•å¯ä»¥ä½¿ç”¨[Texture]资æºçš„地方使用,例如在[TileSet]"
"中。\n"
-"动画的回放由[member fps]å±žæ€§ä»¥åŠæ¯å¸§çš„å¯é€‰å»¶è¿ŸæŽ§åˆ¶ï¼ˆè¯·å‚阅[method "
-"set_frame_delay])。动画循环播放,å³å®ƒå°†åœ¨æ’­æ”¾æœ€åŽä¸€å¸§åŽåœ¨ç¬¬0å¸§è‡ªåŠ¨é‡æ–°å¼€"
-"始。\n"
-"[AnimatedTexture]当å‰è¦æ±‚所有帧纹ç†å…·æœ‰ç›¸åŒçš„大å°ï¼Œå¦åˆ™è¾ƒå¤§çš„纹ç†å°†è¢«è£å‰ªä»¥åŒ¹"
-"é…æœ€å°çš„纹ç†ã€‚å¦å¤–ï¼Œå®ƒä¸æ”¯æŒ[AtlasTexture]。æ¯ä¸ªå¸§éœ€è¦æ˜¯å•独的图åƒã€‚"
+"动画的播放由[member fps]å±žæ€§ä»¥åŠæ¯ä¸€å¸§çš„å¯é€‰å»¶è¿ŸæŽ§åˆ¶ï¼Œå‚阅[method "
+"set_frame_delay]。动画是循环播放的,也就是说,在播放完最åŽä¸€å¸§åŽï¼Œå®ƒå°†è‡ªåŠ¨ä»Ž"
+"第0叧釿–°å¼€å§‹ã€‚\n"
+"[AnimatedTexture]ç›®å‰è¦æ±‚所有帧的纹ç†å…·æœ‰ç›¸åŒçš„尺寸,å¦åˆ™è¾ƒå¤§çš„纹ç†ä¼šè¢«è£å‰ªï¼Œ"
+"与最å°çš„纹ç†ç›¸åŒ¹é…。\n"
+"[b]注æ„:[/b] AnimatedTexture䏿”¯æŒä½¿ç”¨[AtlasTexture]。æ¯ä¸€å¸§éƒ½éœ€è¦æ˜¯ä¸€ä¸ªå•独"
+"的[Texture]。"
#: doc/classes/AnimatedTexture.xml:19
msgid "Returns the given frame's delay value."
@@ -4987,7 +5009,6 @@ msgstr ""
"[/codeblock]"
#: doc/classes/AnimatedTexture.xml:49
-#, fuzzy
msgid ""
"Assigns a [Texture] to the given frame. Frame IDs start at 0, so the first "
"frame has ID 0, and the last frame of the animation has ID [member frames] - "
@@ -4997,9 +5018,9 @@ msgid ""
"animation."
msgstr ""
"å°†[Texture2D]分é…给给定的帧。帧ID从0开始,因此第一帧的ID为0,动画的最åŽä¸€å¸§çš„"
-"ID为[member 帧]-1。\n"
+"ID为[member frames] -1。\n"
"您å¯ä»¥å®šä¹‰ä»»æ„æ•°é‡çš„纹ç†ï¼Œç›´åˆ°[constant MAX_FRAMES],但è¦è®°ä½ï¼Œåªæœ‰0到"
-"[member 帧]-1的帧会æˆä¸ºåŠ¨ç”»çš„ä¸€éƒ¨åˆ†ã€‚"
+"[member frames]-1的帧会æˆä¸ºåŠ¨ç”»çš„ä¸€éƒ¨åˆ†ã€‚"
#: doc/classes/AnimatedTexture.xml:56
msgid "Sets the currently visible frame of the texture."
@@ -5062,7 +5083,6 @@ msgid "Contains data used to animate everything in the engine."
msgstr "包å«ç”¨äºŽå¯¹å¼•擎中所有内容进行动画处ç†çš„æ•°æ®ã€‚"
#: doc/classes/Animation.xml:7
-#, fuzzy
msgid ""
"An Animation resource contains data used to animate everything in the "
"engine. Animations are divided into tracks, and each track must be linked to "
@@ -5083,26 +5103,26 @@ msgid ""
"tracks have different types, each with its own set of dedicated methods. "
"Check [enum TrackType] to see available types."
msgstr ""
-"动画资æºåŒ…å«ç”¨äºŽå¯¹å¼•擎中所有内容进行动画处ç†çš„æ•°æ®ã€‚动画分为轨é“,æ¯ä¸ªè½¨é“å¿…"
-"须链接到一个节点。通过将定时键(事件)添加到轨é“,å¯ä»¥éšæ—¶é—´æ›´æ”¹è¯¥èŠ‚ç‚¹çš„çŠ¶"
-"æ€ã€‚\n"
+"动画资æºåŒ…嫿•°æ®ï¼Œç”¨äºŽå¯¹å¼•擎中的一切对象进行动画化。动画被划分为轨é“,æ¯ä¸ªè½¨"
+"é“必须与一个节点相连。通过å‘è½¨é“æ·»åŠ æ—¶é—´é”®æˆ–äº‹ä»¶ï¼ŒèŠ‚ç‚¹çŠ¶æ€åˆ™å¯é€šè¿‡æ—¶é—´æ¥æ”¹"
+"å˜ã€‚\n"
"[codeblock]\n"
-"# This creates an animation that makes the node \"Enemy\" move to the right "
-"by\n"
-"# 100 pixels in 0.5 seconds.\n"
+"# 这将创建一个动画,使节点 \"Enemy\" å‘å³ç§»åЍ\n"
+"# 在0.5秒内移动100åƒç´ ã€‚\n"
"var animation = Animation.new()\n"
"var track_index = animation.add_track(Animation.TYPE_VALUE)\n"
"animation.track_set_path(track_index, \"Enemy:position:x\")\n"
"animation.track_insert_key(track_index, 0.0, 0)\n"
"animation.track_insert_key(track_index, 0.5, 100)\n"
"[/codeblock]\n"
-"åŠ¨ç”»åªæ˜¯æ•°æ®å®¹å™¨ï¼Œå¿…须将其添加到诸如[AnimationPlayer]之类的节点æ‰èƒ½æ’­æ”¾ã€‚动画"
-"è½¨é“æœ‰ä¸åŒçš„类型,æ¯ç§éƒ½æœ‰è‡ªå·±çš„专用方法集。选中 [enum TrackType]以查看å¯ç”¨çš„"
-"类型。"
+"åŠ¨ç”»åªæ˜¯æ•°æ®å®¹å™¨ï¼Œå¿…须添加到[AnimationPlayer]或[AnimationTreePlayer]等节点上"
+"æ‰èƒ½æ’­æ”¾ã€‚åŠ¨ç”»è½¨é“æœ‰ä¸åŒçš„类型,æ¯ä¸ªéƒ½æœ‰è‡ªå·±çš„一套专用方法。å‚阅[enum "
+"TrackType]查看å¯ç”¨ç±»åž‹ã€‚"
#: doc/classes/Animation.xml:20 doc/classes/AnimationPlayer.xml:12
msgid "https://docs.godotengine.org/en/3.4/tutorials/animation/index.html"
-msgstr "https://docs.godotengine.org/en/3.4/tutorials/animation/index.html"
+msgstr ""
+"https://docs.godotengine.org/zh_CN/stable/tutorials/animation/index.html"
#: doc/classes/Animation.xml:28
msgid "Adds a track to the Animation."
@@ -5140,9 +5160,9 @@ msgid ""
"End offset is the number of seconds cut off at the ending of the audio "
"stream."
msgstr ""
-"返回由[code] key_idx [/code]标识的键的结æŸåç§»é‡ã€‚ [code] track_idx [/code]å¿…"
-"须是音轨的索引。\n"
-"结æŸå移是音频æµç»“æŸæ—¶æˆªæ–­çš„秒数。"
+"返回由 [code]key_idx[/code] 标识的键的结æŸåç§»é‡ã€‚[code]track_idx[/code] å¿…é¡»"
+"是音频轨é“的索引。\n"
+"结æŸåç§»æ˜¯éŸ³é¢‘æµæœ«å°¾æˆªæ–­çš„秒数。"
#: doc/classes/Animation.xml:71
msgid ""
@@ -5151,17 +5171,17 @@ msgid ""
"Start offset is the number of seconds cut off at the beginning of the audio "
"stream."
msgstr ""
-"返回由[code] key_idx [/code]标识的键的起始åç§»é‡ã€‚ [code] track_idx [/code]å¿…"
-"须是音轨的索引。\n"
-"èµ·å§‹åç§»é‡æ˜¯éŸ³é¢‘æµå¼€å§‹å¤„截断的秒数。"
+"返回由 [code]key_idx[/code] 标识的键的起始åç§»é‡ã€‚[code]track_idx[/code] å¿…é¡»"
+"是音频轨é“的索引。\n"
+"èµ·å§‹åç§»é‡æ˜¯éŸ³é¢‘æµå¼€å¤´æˆªæ–­çš„秒数。"
#: doc/classes/Animation.xml:80
msgid ""
"Returns the audio stream of the key identified by [code]key_idx[/code]. The "
"[code]track_idx[/code] must be the index of an Audio Track."
msgstr ""
-"返回由[code] key_idx [/code]标识的键的音频æµã€‚ [code] track_idx [/code]必须是"
-"音轨的索引。"
+"返回由 [code]key_idx[/code] 标识的键的音频æµã€‚[code]track_idx[/code] 必须是音"
+"频轨é“的索引。"
#: doc/classes/Animation.xml:91
msgid ""
@@ -5171,10 +5191,10 @@ msgid ""
"[code]start_offset[/code] is the number of seconds cut off at the beginning "
"of the audio stream, while [code]end_offset[/code] is at the ending."
msgstr ""
-"在给定的[code]æ—¶é—´[/code](以秒为å•ä½ï¼‰ä¸­æ’入音轨音调。 [code] track_idx [/"
-"code]必须是音轨的索引。\n"
-"[code] stream [/code]æ˜¯è¦æ’­æ”¾çš„[AudioStream]资æºã€‚ [code] start_offset [/"
-"code]是在音频æµçš„开头截断的秒数,而[code] end_offset [/code]在结尾。"
+"在 [code]time[/code] 秒处æ’入音频轨é“关键帧。[code] track_idx [/code] 必须是"
+"音频轨é“的索引。\n"
+"[code]stream[/code] æ˜¯è¦æ’­æ”¾çš„ [AudioStream] 资æºã€‚[code]start_offset[/code] "
+"是在音频æµçš„开头截断的秒数,而 [code]end_offset[/code] 则是在结尾的截断。"
#: doc/classes/Animation.xml:101
msgid ""
@@ -5182,8 +5202,8 @@ msgid ""
"[code]offset[/code]. The [code]track_idx[/code] must be the index of an "
"Audio Track."
msgstr ""
-"将由 [code]key_idx[/code] 标识的键的结æŸå移设置为值 [code]offset[/code]. "
-"[code]track_idx[/code] 必须是音轨的索引."
+"将由 [code]key_idx[/code] 标识的关键帧的结æŸå移设置为值 [code]offset[/"
+"code]ã€‚å‚æ•° [code]track_idx[/code] 必须是音频轨é“的索引。"
#: doc/classes/Animation.xml:110
msgid ""
@@ -5191,8 +5211,8 @@ msgid ""
"[code]offset[/code]. The [code]track_idx[/code] must be the index of an "
"Audio Track."
msgstr ""
-"将由 [code]key_idx[/code] 确定的键的起始åç§»é‡è®¾ç½®ä¸º [code]offset[/code]. "
-"[code]track_idx[/code] 必须是音频轨é“的索引."
+"将由 [code]key_idx[/code] 确定的关键帧的起始åç§»é‡è®¾ç½®ä¸º [code]offset[/"
+"code]ã€‚å‚æ•° [code]track_idx[/code] 必须是音频轨é“的索引。"
#: doc/classes/Animation.xml:119
msgid ""
@@ -5263,8 +5283,8 @@ msgid ""
"[code]out_handle[/code]. The [code]track_idx[/code] must be the index of a "
"Bezier Track."
msgstr ""
-"将由 [code]key_idx[/code] 确定的键的输出柄设置为 [code]out_handle[/code] 。"
-"[code]track_idx[/code] 必须是 Bezier轨é“的索引。"
+"将由 [code]key_idx[/code] 确定的关键帧的输出柄设置为 [code]out_handle[/"
+"code] ã€‚å‚æ•° [code]track_idx[/code] 必须是è´å¡žå°”曲线轨é“的索引。"
#: doc/classes/Animation.xml:190
msgid ""
@@ -5344,7 +5364,8 @@ msgstr "返回钥匙所在的时间。"
msgid ""
"Returns the transition curve (easing) for a specific key (see the built-in "
"math function [method @GDScript.ease])."
-msgstr "返回特定键的过渡曲线(缓动)(å‚阅内置数学函数[方法@GDScript.ease])。"
+msgstr ""
+"返回特定键的过渡曲线(缓动)(å‚阅内置数学函数[method @GDScript.ease])。"
#: doc/classes/Animation.xml:303
msgid "Returns the value of a given key in a given track."
@@ -5354,7 +5375,8 @@ msgstr "返回给定轨é“中给定键的值。"
msgid ""
"Gets the path of a track. For more information on the path format, see "
"[method track_set_path]."
-msgstr "获å–轨迹的路径。有关路径格å¼çš„详细信æ¯ï¼Œè¯·å‚阅[方法 track_set_path]。"
+msgstr ""
+"获å–轨迹的路径。有关路径格å¼çš„详细信æ¯ï¼Œè¯·å‚阅[method track_set_path]。"
#: doc/classes/Animation.xml:317
msgid "Gets the type of a track."
@@ -5425,14 +5447,14 @@ msgstr "设置现有键的时间。"
msgid ""
"Sets the transition curve (easing) for a specific key (see the built-in math "
"function [method @GDScript.ease])."
-msgstr "设置特定键的过渡曲线(缓动)(å‚阅内置数学函数[方法@GDScript.ease])。"
+msgstr ""
+"设置特定键的过渡曲线(缓动)(å‚阅内置数学函数[method @GDScript.ease])。"
#: doc/classes/Animation.xml:438
msgid "Sets the value of an existing key."
msgstr "设置现有键的值。"
#: doc/classes/Animation.xml:446
-#, fuzzy
msgid ""
"Sets the path of a track. Paths must be valid scene-tree paths to a node and "
"must be specified starting from the parent node of the node that will "
@@ -5441,11 +5463,11 @@ msgid ""
"For example, [code]\"character/skeleton:ankle\"[/code] or [code]\"character/"
"mesh:transform/local\"[/code]."
msgstr ""
-"设置轨迹的路径。路径必须是通往节点的有效场景树路径,并且必须从é‡çŽ°åŠ¨ç”»çš„èŠ‚ç‚¹"
-"的父节点开始指定。控制属性或骨骼的轨迹必须在路径åŽé™„加其å称,并以[code]\":"
-"\"[/code]分隔。\n"
-"例如,[code]\"character/skeleton:ankle\"[/code]or[code]\"character/mesh:"
-"transform/local\"[/code]。"
+"设置轨é“的路径。路径必须是指å‘节点场景树的有效路径,必须从将è¦å®žçŽ°åŠ¨ç”»çš„èŠ‚ç‚¹"
+"的父节点开始指定。控件属性或骨骼的轨é“必须在路径åŽé¢åŠ ä¸Šå®ƒä»¬çš„å字,用"
+"[code]\":\"[/code]分隔。\n"
+"例如,[code]\"character/skeleton:ankle\"[/code] 或[code]\"character/mesh:"
+"transform/local\"[/code] 。"
#: doc/classes/Animation.xml:455
msgid ""
@@ -5501,13 +5523,13 @@ msgstr ""
"确的æ’值和循环。"
#: doc/classes/Animation.xml:516
-#, fuzzy
msgid ""
"A flag indicating that the animation must loop. This is used for correct "
"interpolation of animation cycles, and for hinting the player that it must "
"restart the animation."
msgstr ""
-"表示动画必须循环的标志。用于正确的动画循环æ’值,并æç¤ºçŽ©å®¶å¿…é¡»é‡æ–°å¼€å§‹åŠ¨ç”»ã€‚"
+"指示动画必须循环的标志。这用于动画循环正确æ’å€¼ï¼Œä»¥åŠæç¤ºæ’­æ”¾å™¨é¡»é‡æ–°å¯åŠ¨åŠ¨"
+"画。"
#: doc/classes/Animation.xml:519
msgid "The animation step value."
@@ -5542,7 +5564,7 @@ msgid ""
"value of a [Color])."
msgstr ""
"Bezier轨迹用于使用自定义曲线对数值进行æ’值。它们也å¯ä»¥ç”¨æ¥å¯¹å‘é‡å’Œé¢œè‰²çš„å­å±ž"
-"性进行动画处ç†ï¼ˆä¾‹å¦‚[颜色]çš„alpha值)。"
+"性进行动画处ç†ï¼ˆä¾‹å¦‚[Color]çš„alpha值)。"
#: doc/classes/Animation.xml:543
msgid ""
@@ -5550,12 +5572,12 @@ msgid ""
"[AudioStreamPlayer]. The stream can be trimmed and previewed in the "
"animation."
msgstr ""
-"éŸ³è½¨æ˜¯ç”¨æ¥æ’­æ”¾éŸ³é¢‘æµçš„任何一ç§ç±»åž‹çš„[AudioStreamPlayer]。该æµå¯ä»¥åœ¨åŠ¨ç”»ä¸­è¿›è¡Œ"
-"修剪和预览。"
+"音频轨é“å¯ä»¥ç”¨æ¥é€šè¿‡ä»»æ„类型的 [AudioStreamPlayer] 播放音频æµã€‚该æµå¯ä»¥åœ¨åŠ¨ç”»"
+"中进行修剪和预览。"
#: doc/classes/Animation.xml:546
msgid "Animation tracks play animations in other [AnimationPlayer] nodes."
-msgstr "动画曲目在其他 [动画播放器] 节点中播放动画。"
+msgstr "动画曲目在其他 [AnimationPlayer] 节点中播放动画。"
#: doc/classes/Animation.xml:549
msgid "No interpolation (nearest value)."
@@ -5625,7 +5647,8 @@ msgstr ""
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/animation/animation_tree.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/animation/animation_tree.html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/animation/animation_tree."
+"html"
#: doc/classes/AnimationNode.xml:18
msgid ""
@@ -5857,7 +5880,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -6389,9 +6412,8 @@ msgid "Renames the given node."
msgstr "é‡å‘½å给定的节点。"
#: doc/classes/AnimationNodeStateMachine.xml:152
-#, fuzzy
msgid "Replaces the node and keeps its transitions unchanged."
-msgstr "æ›´æ¢èŠ‚ç‚¹å¹¶ä¿æŒå…¶è¿‡æ¸¡ä¸å˜ã€‚"
+msgstr "替æ¢èŠ‚ç‚¹å¹¶ä¿æŒå…¶è¿‡æ¸¡ä¸å˜ã€‚"
#: doc/classes/AnimationNodeStateMachine.xml:159
msgid "Sets the given node as the graph end point."
@@ -6437,9 +6459,8 @@ msgid "Returns the currently playing animation state."
msgstr "è¿”å›žå½“å‰æ’­æ”¾çš„动画状æ€ã€‚"
#: doc/classes/AnimationNodeStateMachinePlayback.xml:32
-#, fuzzy
msgid "Returns the playback position within the current animation state."
-msgstr "è¿”å›žæŽ¥è§¦ç‚¹çš„å±€éƒ¨åæ ‡ç³»ä¸‹çš„ä½ç½®ã€‚"
+msgstr "返回当å‰åŠ¨ç”»çŠ¶æ€å†…的播放ä½ç½®ã€‚"
#: doc/classes/AnimationNodeStateMachinePlayback.xml:38
msgid ""
@@ -6465,7 +6486,6 @@ msgid ""
msgstr "按照最短路径从当å‰çжæ€è¿‡æ¸¡åˆ°å¦ä¸€ä¸ªçжæ€ã€‚"
#: doc/classes/AnimationNodeStateMachineTransition.xml:14
-#, fuzzy
msgid ""
"Turn on auto advance when this condition is set. The provided name will "
"become a boolean parameter on the [AnimationTree] that can be controlled "
@@ -6478,11 +6498,11 @@ msgid ""
"(linear_velocity.x == 0)\n"
"[/codeblock]"
msgstr ""
-"当设置此æ¡ä»¶æ—¶ï¼Œå¼€å¯è‡ªåЍå‰è¿›ã€‚æä¾›çš„åç§°å°†æˆä¸º[AnimationTree]上的一个布尔å‚"
-"数,å¯ä»¥ä»Žä»£ç ä¸­è¿›è¡ŒæŽ§åˆ¶ï¼ˆè§[url=https://docs.godotengine.org/zh_CN/latest/"
-"tutorials/animation/animation_tree.html#controlling-from-code][/url])。例"
-"如,如果[member AnimationTree.tree_root]是一个[AnimationNodeStateMachine],并"
-"且[member advance_condition]设置为[code]\"idle\"[/code]:\n"
+"设置此æ¡ä»¶ï¼Œå¼€å¯è‡ªåЍå‰è¿›ã€‚æä¾›çš„åç§°å°†æˆä¸º[AnimationTree]ä¸Šçš„ä¸€ä¸ªå¸ƒå°”å‚æ•°ï¼Œå¯"
+"ä»¥é€šè¿‡ä»£ç æŽ§åˆ¶ï¼Œå‚阅[url=https://docs.godotengine.org/zh_CN/stable/tutorials/"
+"animation/animation_tree.html#controlling-from-code][/url]。例如,如果"
+"[member AnimationTree.tree_root]是一个[AnimationNodeStateMachine],[member "
+"advance_condition]被设置为[code]\"idle\"[/code]。\n"
"[codeblock]\n"
"$animation_tree[\"parameters/conditions/idle\"] = is_on_floor and "
"(linear_velocity.x == 0)\n"
@@ -6577,6 +6597,21 @@ msgid ""
"animation_tree[\"parameters/Seek/seek_position\"] = 12.0\n"
"[/codeblock]"
msgstr ""
+"这个节点å¯ä»¥ä½¿å‘½ä»¤å‘生在动画图示的所有å­çº§ä¸Šã€‚使用这个节点类型å¯ä»¥ä»Ž"
+"[AnimationNodeBlendTree]内部的开头或æŸä¸ªæ’­æ”¾ä½ç½®å¼€å§‹æ’­æ”¾[Animation]。在设置时"
+"间和改å˜åŠ¨ç”»æ’­æ”¾åŽï¼Œé€šè¿‡è®¾ç½®å…¶[code]seek_position[/code]值为[code]-1.0[/"
+"code],使节点在下一个处ç†å¸§è‡ªåŠ¨è¿›å…¥ä¼‘çœ æ¨¡å¼ã€‚\n"
+"[codeblock]\n"
+"# 从头开始播放å­åŠ¨ç”»ã€‚\n"
+"animation_tree.set(\"parameters/Seek/seek_position\", 0.0)\n"
+"# å¦ä¸€ç§è¯­æ³•(结果与上述相åŒï¼‰ã€‚\n"
+"animation_tree[\"parameters/Seek/seek_position\"] = 0.0\n"
+"\n"
+"# 从12秒的时间戳开始播放å­åŠ¨ç”»ã€‚\n"
+"animation_tree.set(\"parameters/Seek/seek_position\", 12.0)\n"
+"# å¦ä¸€ç§è¯­æ³•(结果与上述相åŒï¼‰ã€‚\n"
+"animation_tree[\"parameters/Seek/seek_position\"] = 12.0\n"
+"[/codeblock]"
#: doc/classes/AnimationNodeTransition.xml:4
msgid "A generic animation transition node for [AnimationTree]."
@@ -6618,8 +6653,8 @@ msgid ""
"a [Tween] node, but it requires doing everything by code.\n"
"Updating the target properties of animations occurs at process time."
msgstr ""
-"动画播放器用于[动画]资æºçš„通用播放。它包å«ä¸€ä¸ªåŠ¨ç”»å­—å…¸ï¼ˆä»¥å称为å‚考)和自定"
-"义动画转æ¢ä¹‹é—´çš„æ··åˆæ—¶é—´ã€‚此外,动画å¯ä»¥åœ¨ä¸åŒçš„通é“中播放和混åˆã€‚\n"
+"动画播放器用于[Animation]资æºçš„通用播放。它包å«ä¸€ä¸ªåŠ¨ç”»å­—å…¸ï¼ˆä»¥å称为å‚考)和"
+"自定义动画转æ¢ä¹‹é—´çš„æ··åˆæ—¶é—´ã€‚此外,动画å¯ä»¥åœ¨ä¸åŒçš„通é“中播放和混åˆã€‚\n"
"AnimationPlayer]比[Tween]更适åˆç”¨äºŽäº‹å…ˆçŸ¥é“最终值的动画。例如,由于编辑器æä¾›"
"的动画工具,用[AnimationPlayer]节点更容易完æˆå±å¹•的淡入淡出。这个特殊的例å­ä¹Ÿ"
"å¯ä»¥ç”¨[Tween]节点æ¥å®žçŽ°ï¼Œä½†è¿™éœ€è¦é€šè¿‡ä»£ç æ¥å®Œæˆä¸€åˆ‡ã€‚\n"
@@ -6728,16 +6763,16 @@ msgid ""
"time this is called, they may be updated too early. To perform the update "
"immediately, call [code]advance(0)[/code]."
msgstr ""
-"用键[code]with key[/code]播放动画。å¯ä»¥è®¾ç½®è‡ªå®šä¹‰æ··åˆæ—¶é—´å’Œé€Ÿåº¦ã€‚如果[code] "
-"custom_speed [/code]为负,[code] from_end [/code]is[code]true[/code],则动画"
-"å°†å‘åŽæ’­æ”¾ï¼ˆç›¸å½“于调用[method play_backwards])。\n"
-"[AnimationPlayer]使用[member Assigned_animation]è·Ÿè¸ªå…¶å½“å‰æˆ–æœ€åŽæ’­æ”¾çš„动画。"
-"如果使用相åŒçš„动画[code] name [/code]或没有[code] name [/code]傿•°è°ƒç”¨æ­¤æ–¹"
-"法,则分é…çš„åŠ¨ç”»å°†åœ¨æš‚åœæ—¶ç»§ç»­æ’­æ”¾ï¼Œæˆ–è€…åœ¨åœæ­¢æ—¶é‡æ–°å¯åŠ¨ï¼ˆè¯·å‚阅[方法]åœæ­¢],"
-"åŒæ—¶æš‚åœå’Œåœæ­¢ã€‚如果动画已ç»åœ¨æ’­æ”¾ï¼Œå®ƒå°†ç»§ç»­æ’­æ”¾ã€‚\n"
-"[b]注æ„:[/b]下次处ç†[AnimationPlayer]æ—¶ï¼ŒåŠ¨ç”»å°†è¢«æ›´æ–°ã€‚å¦‚æžœåœ¨è°ƒç”¨çš„åŒæ—¶æ›´æ–°"
-"了其他å˜é‡ï¼Œåˆ™å®ƒä»¬å¯èƒ½æ›´æ–°å¾—太早。è¦ç«‹å³æ‰§è¡Œæ›´æ–°ï¼Œè¯·è°ƒç”¨[code] advance(0)[/"
-"code]。"
+"播放键å为 [code]name[/code] 的动画。å¯ä»¥è®¾ç½®è‡ªå®šä¹‰æ··åˆæ—¶é—´å’Œé€Ÿåº¦ã€‚如果"
+"[code] custom_speed [/code]为负,[code] from_end [/code] =[code]true[/code],"
+"则动画将å‘åŽæ’­æ”¾ï¼ˆç›¸å½“于调用 [method play_backwards])。\n"
+"[AnimationPlayer] 使用 [member Assigned_animation] è·Ÿè¸ªå…¶å½“å‰æˆ–æœ€åŽæ’­æ”¾çš„动"
+"画。如果使用相åŒçš„动画å [code]name[/code] 或没有 [code] name [/code] 傿•°è°ƒ"
+"用此方法,则分é…çš„åŠ¨ç”»å°†åœ¨æš‚åœæ—¶ç»§ç»­æ’­æ”¾ï¼Œæˆ–è€…åœ¨åœæ­¢æ—¶é‡æ–°å¯åŠ¨ï¼ˆè¯·å‚阅 "
+"[method stop]ï¼ŒåŒæ—¶æš‚åœå’Œåœæ­¢ã€‚如果动画已ç»åœ¨æ’­æ”¾ï¼Œå®ƒå°†ç»§ç»­æ’­æ”¾ã€‚\n"
+"[b]注æ„:[/b]ä¸‹æ¬¡å¤„ç† [AnimationPlayer] æ—¶ï¼ŒåŠ¨ç”»å°†è¢«æ›´æ–°ã€‚å¦‚æžœåœ¨è°ƒç”¨çš„åŒæ—¶æ›´"
+"新了其他å˜é‡ï¼Œåˆ™å®ƒä»¬å¯èƒ½æ›´æ–°å¾—太早。è¦ç«‹å³æ‰§è¡Œæ›´æ–°ï¼Œè¯·è°ƒç”¨ [code] advance(0)"
+"[/code]。"
#: doc/classes/AnimationPlayer.xml:129
msgid ""
@@ -6746,9 +6781,9 @@ msgid ""
"code] and [code]from_end = true[/code], so see its description for more "
"information."
msgstr ""
-"å呿’­æ”¾æŒ‰é”®[code]name[/code]的动画。\n"
-"这个方法是 [method play] 的简写,其中 [code]custom_speed = -1.0[/code] and "
-"[code]from_end = true[/code],所以更多信æ¯è¯·å‚阅其æè¿°ã€‚"
+"å呿’­æ”¾é”®å称为 [code]name[/code] 的动画。\n"
+"这个方法是 [method play] çš„ç®€å†™ï¼Œåªæ˜¯å…¶ä¸­å‚数设为 [code]custom_speed = -1.0[/"
+"code] å’Œ [code]from_end = true[/code],所以更多信æ¯è¯·å‚阅其æè¿°ã€‚"
#: doc/classes/AnimationPlayer.xml:137
msgid ""
@@ -6844,7 +6879,7 @@ msgstr "当剿’­æ”¾çš„动画的ä½ç½®ï¼ˆä»¥ç§’为å•ä½ï¼‰ã€‚"
#: doc/classes/AnimationPlayer.xml:200
msgid "The call mode to use for Call Method tracks."
-msgstr "ç”¨äºŽâ€œå‘¼å«æ–¹æ³•â€è½¨é“çš„å‘¼å«æ¨¡å¼ã€‚"
+msgstr "æ–¹æ³•è°ƒç”¨è½¨é“æ‰€ä½¿ç”¨çš„调用模å¼ã€‚"
#: doc/classes/AnimationPlayer.xml:203
msgid ""
@@ -6880,6 +6915,10 @@ msgid ""
"defined by the reset animation, if any, with the editor keeping the values "
"that the nodes had before saving."
msgstr ""
+"这由编辑器使用。如果设置为[code]true[/code],场景在ä¿å­˜æ—¶å°†åº”用é‡ç½®åŠ¨ç”»çš„æ•ˆæžœ"
+"(就åƒå®ƒå›žåˆ°0时间点),然åŽåœ¨ä¿å­˜åŽæ¢å¤åŽŸçŠ¶ã€‚\n"
+"æ¢å¥è¯è¯´ï¼Œä¿å­˜çš„åœºæ™¯æ–‡ä»¶å°†åŒ…å« \"默认状æ€\",是由é‡ç½®åŠ¨ç”»å®šä¹‰ï¼Œå¦‚æžœæœ‰ï¼Œç¼–è¾‘å™¨"
+"ä¿æŒèŠ‚ç‚¹åœ¨ä¿å­˜å‰çš„值。"
#: doc/classes/AnimationPlayer.xml:219
msgid "The node from which node path references will travel."
@@ -6944,7 +6983,6 @@ msgid ""
msgstr "用于[AnimationPlayer]中高级动画转æ¢çš„节点。"
#: doc/classes/AnimationTree.xml:7
-#, fuzzy
msgid ""
"A node to be used for advanced animation transitions in an "
"[AnimationPlayer].\n"
@@ -6955,25 +6993,27 @@ msgid ""
"[AnimationPlayer] node should be used solely for adding, deleting, and "
"editing animations."
msgstr ""
-"注æ„:当与[AnimationPlayer]链接时,对应的[AnimationPlayer]的一些属性和方法将"
-"无法按照预期的方å¼è¿è¡Œã€‚播放和转场应仅使用[AnimationTree]åŠå…¶ç»„æˆçš„"
-"[AnimationNode]æ¥å¤„ç†ã€‚AnimationPlayer]节点应仅用于添加ã€åˆ é™¤å’Œç¼–辑动画。"
+"用于[AnimationPlayer]中高级动画过渡的节点。\n"
+"[b]注æ„:[/b]当与一个[AnimationPlayer]链接时,相应的[AnimationPlayer]的一些属"
+"性和方法将ä¸ä¼šåƒé¢„æœŸçš„é‚£æ ·å‘æŒ¥ä½œç”¨ã€‚播放和过渡应该åªä½¿ç”¨[AnimationTree]和它的"
+"组æˆ[AnimationNode]æ¥å¤„ç†ã€‚[AnimationPlayer]节点应仅用于添加ã€åˆ é™¤å’Œç¼–辑动"
+"画。"
#: doc/classes/AnimationTree.xml:19
msgid "Manually advance the animations by the specified time (in seconds)."
msgstr "手动将动画å‰è¿›æŒ‡å®šçš„æ—¶é—´ï¼ˆå•ä½ä¸ºç§’)。"
#: doc/classes/AnimationTree.xml:25
-#, fuzzy
msgid ""
"Retrieve the motion of the [member root_motion_track] as a [Transform] that "
"can be used elsewhere. If [member root_motion_track] is not a path to a "
"track of type [constant Animation.TYPE_TRANSFORM], returns an identity "
"transformation. See also [member root_motion_track] and [RootMotionView]."
msgstr ""
-"èŽ·å– [member root_motion_track] çš„è¿åŠ¨ï¼Œç±»åž‹ä¸º [Transform],å¯åœ¨å…¶å®ƒåœ°æ–¹ä½¿"
-"用。如果 [member root_motion_track] 䏿˜¯ [constant Animation.TYPE_TRANSFORM] "
-"类型轨é“的路径,则返回æ’ç­‰å˜æ¢ã€‚"
+"检索[member root_motion_track]çš„è¿åŠ¨ï¼Œä½œä¸ºä¸€ä¸ªå¯ä»¥åœ¨å…¶ä»–地方使用的"
+"[Transform]。如果[member root_motion_track]䏿˜¯ä¸€ä¸ª[constant Animation."
+"TYPE_TRANSFORM]类型轨é“çš„è·¯å¾„ï¼Œè¿”å›žä¸€ä¸ªå˜æ¢ID。å‚阅[member root_motion_track]"
+"和[RootMotionView]。"
#: doc/classes/AnimationTree.xml:38
msgid "If [code]true[/code], the [AnimationTree] will be processing."
@@ -6991,7 +7031,6 @@ msgstr ""
"该 [AnimationTree] çš„å¤„ç†æ¨¡å¼ã€‚å¯ç”¨çš„æ¨¡å¼è§ [enum AnimationProcessMode]。"
#: doc/classes/AnimationTree.xml:47
-#, fuzzy
msgid ""
"The path to the Animation track used for root motion. Paths must be valid "
"scene-tree paths to a node, and must be specified starting from the parent "
@@ -7004,12 +7043,13 @@ msgid ""
"stay in place. See also [method get_root_motion_transform] and "
"[RootMotionView]."
msgstr ""
-"æ ¹è¿åŠ¨æ‰€ä½¿ç”¨çš„åŠ¨ç”»è½¨é“的路径。路径必须是有效的场景树节点路径,并且必须从想è¦"
-"å†çŽ°åŠ¨ç”»çš„èŠ‚ç‚¹çš„çˆ¶èŠ‚ç‚¹å¼€å§‹ã€‚å¦‚æžœè¦æŒ‡å®šæŽ§åˆ¶å±žæ€§æˆ–者骨骼的轨é“,å¯ä»¥å°†å¯¹åº”çš„å"
-"称写在路径åŽé¢ï¼Œä»¥ [code]\":\"[/code] 分隔。例如 [code]\"character/skeleton:"
-"ankle\"[/code] 和 [code]\"character/mesh:transform/local\"[/code]。\n"
-"å¦‚æžœè½¨é“æ˜¯ [constant Animation.TYPE_TRANSFORM] ç±»åž‹çš„ï¼Œå¯¹åº”çš„å˜æ¢å°†è¢«å–消,动"
-"画看上去就是在原地进行。"
+"用于根部è¿åŠ¨çš„åŠ¨ç”»è½¨é“的路径。路径必须是指å‘节点的场景树有效路径,必须从将实"
+"çŽ°åŠ¨ç”»çš„èŠ‚ç‚¹çš„çˆ¶èŠ‚ç‚¹å¼€å§‹æŒ‡å®šã€‚è¦æŒ‡å®šæŽ§ä»¶å±žæ€§æˆ–骨骼的轨é“,请在路径åŽé™„加其å"
+"称,用[code]\":\"[/code]隔开。例如,[code]\"character/skeleton:ankle\"[/code]"
+"或[code]\"character/mesh:transform/local\"[/code]。\n"
+"如果轨é“的类型是[constant Animation.TYPE_TRANSFORM]ï¼Œé‚£ä¹ˆå°†å–æ¶ˆè§†è§‰ä¸Šçš„å˜æ¢ï¼Œ"
+"其动画将看起æ¥ç•™åœ¨åŽŸåœ°ã€‚å‚阅[method get_root_motion_transform]å’Œ"
+"[RootMotionView]。"
#: doc/classes/AnimationTree.xml:51
msgid "The root animation node of this [AnimationTree]. See [AnimationNode]."
@@ -7049,50 +7089,52 @@ msgid ""
"depending on the graph.\n"
"See [AnimationTree] for a more full-featured replacement of this node."
msgstr ""
+"[i]已弃用。[/i] 节点图示工具,用于混åˆç»‘定在[AnimationPlayer]上的多个动画。对"
+"于给角色或其他基于骨架的é…件制作动画特别有用。它å¯ä»¥ç»“åˆå‡ ä¸ªåŠ¨ç”»æ¥å½¢æˆä¸€ä¸ªæ‰€"
+"需的姿势。\n"
+"它从[AnimationPlayer]节点获å–[Animation],并根æ®å›¾ç¤ºå°†å®ƒä»¬æ··åˆèµ·æ¥ã€‚\n"
+"å‚阅[AnimationTree]以获得该节点的更全é¢çš„功能替代。"
#: doc/classes/AnimationTreePlayer.xml:20
-#, fuzzy
msgid "Adds a [code]type[/code] node to the graph with name [code]id[/code]."
-msgstr "为索引 [code]tab_idx[/code] 处的选项å¡è®¾ç½® [code]title[/code]。"
+msgstr "添加[code]type[/code]节点到图示中,å称为[code]id[/code]。"
#: doc/classes/AnimationTreePlayer.xml:27
-#, fuzzy
msgid ""
"Shifts position in the animation timeline. [code]delta[/code] is the time in "
"seconds to shift. Events between the current frame and [code]delta[/code] "
"are handled."
msgstr ""
-"移动动画时间轴上的ä½ç½®å¹¶ç«‹å³æ›´æ–°åŠ¨ç”»ã€‚[code]delta[/code]是è¦ç§»åŠ¨çš„æ—¶é—´ï¼Œå•ä½"
-"是秒。处ç†å½“å‰å¸§å’Œ [code]delta[/code] 之间的事件。"
+"移动动画时间轴上的ä½ç½®ã€‚[code]delta[/code]是移动的时间,å•使˜¯ç§’。当å‰å¸§å’Œ"
+"[code]delta[/code]之间的事件被处ç†ã€‚"
#: doc/classes/AnimationTreePlayer.xml:34
-#, fuzzy
msgid ""
"Returns the [AnimationPlayer]'s [Animation] bound to the "
"[AnimationTreePlayer]'s animation node with name [code]id[/code]."
msgstr ""
-"如果[AnimationPlayer]存储了带有[code]name[/code]with key[Animation],返回"
-"[code]true[/code]。"
+"返回与[AnimationTreePlayer]的动画节点绑定的[Animation],å称为[code]id[/"
+"code]。"
#: doc/classes/AnimationTreePlayer.xml:41
-#, fuzzy
msgid ""
"Returns the name of the [member master_player]'s [Animation] bound to this "
"animation node."
-msgstr "返回此索引处的混åˆå½¢çŠ¶çš„å称。"
+msgstr "返回与此动画节点绑定的[member master_player]çš„[Animation]å称。"
#: doc/classes/AnimationTreePlayer.xml:48
-#, fuzzy
msgid ""
"Returns the absolute playback timestamp of the animation node with name "
"[code]id[/code]."
-msgstr "返回[code]idx[/code]处的节点å称。"
+msgstr "返回å称为[code]id[/code]的动画节点的ç»å¯¹æ’­æ”¾æ—¶é—´æˆ³ã€‚"
#: doc/classes/AnimationTreePlayer.xml:56
msgid ""
"Binds a new [Animation] from the [member master_player] to the "
"[AnimationTreePlayer]'s animation node with name [code]id[/code]."
msgstr ""
+"å°†å称为[code]id[/code]的新[Animation]从[member master_player]绑定到"
+"[AnimationTreePlayer]的动画节点。"
#: doc/classes/AnimationTreePlayer.xml:65
msgid ""
@@ -7100,25 +7142,26 @@ msgid ""
"[code]id[/code] turns off the track modifying the property at [code]path[/"
"code]. The modified node's children continue to animate."
msgstr ""
+"如果[code]enable[/code]为[code]true[/code],则ID为[code]id[/code]的动画节点将"
+"关闭修改[code]path[/code]属性的轨é“。修改åŽçš„节点的å­ä»£ç»§ç»­è¿›è¡ŒåŠ¨ç”»å¤„ç†ã€‚"
#: doc/classes/AnimationTreePlayer.xml:73
msgid ""
"Binds the [Animation] named [code]source[/code] from [member master_player] "
"to the animation node [code]id[/code]. Recalculates caches."
msgstr ""
+"å°†[member master_player]中å为[code]source[/code]çš„[Animation]绑定到动画节点"
+"[code]id[/code]ã€‚é‡æ–°è®¡ç®—缓存。"
#: doc/classes/AnimationTreePlayer.xml:82
-#, fuzzy
msgid ""
"Returns whether node [code]id[/code] and [code]dst_id[/code] are connected "
"at the specified slot."
-msgstr ""
-"返回索引[code]idx[/code]处项目的id。[code]id[/code]å¯ä»¥æ‰‹åŠ¨åˆ†é…,而索引ä¸èƒ½ã€‚"
+msgstr "返回节点[code]id[/code]å’Œ[code]dst_id[/code]是å¦åœ¨æŒ‡å®šçš„æ’æ§½ä¸Šè¿žæŽ¥ã€‚"
#: doc/classes/AnimationTreePlayer.xml:89
-#, fuzzy
msgid "Returns the blend amount of a Blend2 node given its name."
-msgstr "返回指定轨é“中的键数。"
+msgstr "返回给定åç§°çš„Blend2节点的混åˆé‡ã€‚"
#: doc/classes/AnimationTreePlayer.xml:97
msgid ""
@@ -7128,6 +7171,10 @@ msgid ""
"At 0, output is input A. Towards 1, the influence of A gets lessened, the "
"influence of B gets raised. At 1, output is input B."
msgstr ""
+"设置Blend2节点的混åˆé‡ï¼Œç»™å®šå…¶å称和值。\n"
+"一个Blend2节点混åˆä¸¤ä¸ªåŠ¨ç”»ï¼ˆAå’ŒB),混åˆé‡åœ¨0到1之间。\n"
+"在0的时候,输出是输入A。接近1的时候,A的影å“å˜å°ï¼ŒB的影å“å˜å¤§ã€‚在1时,输出是"
+"输入B。"
#: doc/classes/AnimationTreePlayer.xml:108
msgid ""
@@ -7135,11 +7182,12 @@ msgid ""
"[code]id[/code] turns off the track modifying the property at [code]path[/"
"code]. The modified node's children continue to animate."
msgstr ""
+"如果[code]enable[/code]是[code]true[/code],å称为[code]id[/code]çš„Blend2节点"
+"会关闭修改[code]path[/code]处属性的轨é“。被修改的节点的å­èŠ‚ç‚¹ç»§ç»­å¤„ç†åŠ¨ç”»ã€‚"
#: doc/classes/AnimationTreePlayer.xml:115
-#, fuzzy
msgid "Returns the blend amount of a Blend3 node given its name."
-msgstr "返回指定轨é“中的键数。"
+msgstr "返回给定åç§°çš„Blend3节点的混åˆé‡ã€‚"
#: doc/classes/AnimationTreePlayer.xml:123
msgid ""
@@ -7158,9 +7206,8 @@ msgstr ""
"为1时,输出为动画B+。"
#: doc/classes/AnimationTreePlayer.xml:132
-#, fuzzy
msgid "Returns the blend amount of a Blend4 node given its name."
-msgstr "返回指定轨é“中的键数。"
+msgstr "返回给定åç§°çš„Blend4节点的混åˆé‡ã€‚"
#: doc/classes/AnimationTreePlayer.xml:140
msgid ""
@@ -7168,35 +7215,36 @@ msgid ""
"A Blend4 Node blends two pairs of animations.\n"
"The two pairs are blended like Blend2 and then added together."
msgstr ""
+"设置Blend4节点的混åˆé‡ï¼Œç»™å®šå…¶å称和值。\n"
+"Blend4节点å¯ä»¥æ··åˆä¸¤å¯¹åŠ¨ç”»ã€‚\n"
+"这两对动画åƒBlend2一样被混åˆï¼Œç„¶åŽç›¸åŠ åœ¨ä¸€èµ·ã€‚"
#: doc/classes/AnimationTreePlayer.xml:151
-#, fuzzy
msgid ""
"Connects node [code]id[/code] to [code]dst_id[/code] at the specified input "
"slot."
-msgstr "断开连接到指定输入端的节点。"
+msgstr "将节点[code]id[/code]è¿žæŽ¥åˆ°æŒ‡å®šè¾“å…¥æ’æ§½çš„[code]dst_id[/code]。"
#: doc/classes/AnimationTreePlayer.xml:159
-#, fuzzy
msgid ""
"Disconnects nodes connected to [code]id[/code] at the specified input slot."
-msgstr "断开连接到指定输入端的节点。"
+msgstr "æ–­å¼€åœ¨æŒ‡å®šè¾“å…¥æ’æ§½è¿žæŽ¥åˆ°[code]id[/code]的节点。"
#: doc/classes/AnimationTreePlayer.xml:165
-#, fuzzy
msgid "Returns a [PoolStringArray] containing the name of all nodes."
-msgstr "返回一个 [Array],包å«å½“剿‰€æœ‰è¿žæŽ¥æ‰‹æŸ„的设备 ID。"
+msgstr "è¿”å›žåŒ…å«æ‰€æœ‰èŠ‚ç‚¹åç§°çš„[PoolStringArray]。"
#: doc/classes/AnimationTreePlayer.xml:172
-#, fuzzy
msgid "Returns the mix amount of a Mix node given its name."
-msgstr "返回指定轨é“中的键数。"
+msgstr "返回给定åç§°çš„Mix节点的混åˆé‡ã€‚"
#: doc/classes/AnimationTreePlayer.xml:180
msgid ""
"Sets the mix amount of a Mix node given its name and value.\n"
"A Mix node adds input b to input a by the amount given by ratio."
msgstr ""
+"设置混åˆèŠ‚ç‚¹çš„æ··åˆé‡ï¼Œç»™å®šå®ƒçš„å称和值。\n"
+"æ··åˆèŠ‚ç‚¹å°†è¾“å…¥b添加到输入a中,其é‡ç”±æ¯”率给出。"
#: doc/classes/AnimationTreePlayer.xml:188
msgid "Check if a node exists (by name)."
@@ -7206,90 +7254,78 @@ msgstr "按å称检查节点是å¦å­˜åœ¨ã€‚"
msgid ""
"Returns the input count for a given node. Different types of nodes have "
"different amount of inputs."
-msgstr ""
+msgstr "返回给定节点的输入计数。ä¸åŒç±»åž‹çš„节点有ä¸åŒçš„输入数é‡ã€‚"
#: doc/classes/AnimationTreePlayer.xml:203
-#, fuzzy
msgid "Returns the input source for a given node input."
-msgstr "返回给定步骤的输入断点。"
+msgstr "返回给定节点输入的输入æºã€‚"
#: doc/classes/AnimationTreePlayer.xml:210
-#, fuzzy
msgid "Returns position of a node in the graph given its name."
-msgstr "返回指定å称的动画节点。"
+msgstr "返回给定其å称节点在图示中的ä½ç½®ã€‚"
#: doc/classes/AnimationTreePlayer.xml:217
-#, fuzzy
msgid "Gets the node type, will return from [enum NodeType] enum."
-msgstr "获å–当å‰èŠ‚ç‚¹çš„ç±»åž‹ã€‚ä¸Ž[enum NodeType]叏釿¯”较。"
+msgstr "获å–节点类型,将从[enum NodeType]枚举中返回。"
#: doc/classes/AnimationTreePlayer.xml:225
-#, fuzzy
msgid "Renames a node in the graph."
-msgstr "从图中删除指定的节点。"
+msgstr "é‡å‘½å图示中的一个节点。"
#: doc/classes/AnimationTreePlayer.xml:233
-#, fuzzy
msgid "Sets the position of a node in the graph given its name and position."
-msgstr "将给定的节点设置为图形的端点。"
+msgstr "设置节点在图示中的ä½ç½®ï¼Œç»™å®šå…¶åç§°å’Œä½ç½®ã€‚"
#: doc/classes/AnimationTreePlayer.xml:240
-#, fuzzy
msgid "Returns the autostart delay of a OneShot node given its name."
-msgstr "返回给定轨é“中给定键的值。"
+msgstr "返回给定åç§°çš„OneShot节点的自动å¯åŠ¨å»¶è¿Ÿã€‚"
#: doc/classes/AnimationTreePlayer.xml:247
-#, fuzzy
msgid "Returns the autostart random delay of a OneShot node given its name."
-msgstr "返回指定å称的动画节点。"
+msgstr "返回给定åç§°çš„OneShot节点的自动å¯åŠ¨éšæœºå»¶è¿Ÿã€‚"
#: doc/classes/AnimationTreePlayer.xml:254
-#, fuzzy
msgid "Returns the fade in time of a OneShot node given its name."
-msgstr "返回指定å称的动画节点。"
+msgstr "返回给定åç§°çš„OneShot节点的淡入时间。"
#: doc/classes/AnimationTreePlayer.xml:261
-#, fuzzy
msgid "Returns the fade out time of a OneShot node given its name."
-msgstr "返回与给定å称相匹é…的第一个图å—。"
+msgstr "返回给定其åç§°çš„OneShot节点的淡出时间。"
#: doc/classes/AnimationTreePlayer.xml:268
-#, fuzzy
msgid "Returns whether a OneShot node will auto restart given its name."
-msgstr "返回指定å称的动画节点。"
+msgstr "返回OneShot节点是å¦ä¼šæ ¹æ®å…¶åç§°è‡ªåŠ¨é‡æ–°å¯åŠ¨ã€‚"
#: doc/classes/AnimationTreePlayer.xml:275
-#, fuzzy
msgid "Returns whether a OneShot node is active given its name."
-msgstr "返回指定å称的动画节点。"
+msgstr "返回指定åç§°çš„OneShot节点是å¦å¤„于活动状æ€ã€‚"
#: doc/classes/AnimationTreePlayer.xml:283
msgid ""
"Sets the autorestart property of a OneShot node given its name and value."
-msgstr ""
+msgstr "设置OneShot节点的自动å¯åŠ¨å±žæ€§ï¼Œç»™å®šå…¶å称和值。"
#: doc/classes/AnimationTreePlayer.xml:291
msgid ""
"Sets the autorestart delay of a OneShot node given its name and value in "
"seconds."
-msgstr ""
+msgstr "设置OneShot节点的自动å¯åŠ¨å»¶è¿Ÿï¼Œç»™å®šå…¶å称和值,å•ä½ç§’。"
#: doc/classes/AnimationTreePlayer.xml:299
msgid ""
"Sets the autorestart random delay of a OneShot node given its name and value "
"in seconds."
-msgstr ""
+msgstr "设置OneShot节点的自动é‡å¯éšæœºå»¶è¿Ÿï¼Œç»™å®šå…¶å称和数值,å•ä½ç§’。"
#: doc/classes/AnimationTreePlayer.xml:307
-#, fuzzy
msgid ""
"Sets the fade in time of a OneShot node given its name and value in seconds."
-msgstr "设置æ’值为指定的[code]time[/code],å•ä½ç§’。"
+msgstr "设置OneShot节点的淡入时间,给定其å称和数值,å•ä½ç§’。"
#: doc/classes/AnimationTreePlayer.xml:315
msgid ""
"Sets the fade out time of a OneShot node given its name and value in seconds."
-msgstr ""
+msgstr "设置OneShot节点的淡出时间,给定其å称和数值,å•ä½ç§’。"
#: doc/classes/AnimationTreePlayer.xml:324
msgid ""
@@ -7297,16 +7333,16 @@ msgid ""
"[code]id[/code] turns off the track modifying the property at [code]path[/"
"code]. The modified node's children continue to animate."
msgstr ""
+"如果[code]enable[/code]是[code]true[/code],ID为[code]id[/code]的OneShot节点"
+"会关闭修改[code]path[/code]处属性的轨é“。被修改的节点的å­èŠ‚ç‚¹ç»§ç»­è¿›è¡ŒåŠ¨ç”»ã€‚"
#: doc/classes/AnimationTreePlayer.xml:331
-#, fuzzy
msgid "Starts a OneShot node given its name."
-msgstr "开始播放指定的动画。"
+msgstr "å¯åŠ¨æŒ‡å®šåç§°çš„OneShot节点。"
#: doc/classes/AnimationTreePlayer.xml:338
-#, fuzzy
msgid "Stops the OneShot node with name [code]id[/code]."
-msgstr "返回[code]idx[/code]处的节点å称。"
+msgstr "åœæ­¢å称为[code]id[/code]çš„OneShot节点。"
#: doc/classes/AnimationTreePlayer.xml:344
msgid ""
@@ -7314,21 +7350,21 @@ msgid ""
"animation nodes. Needed when external sources modify the animation nodes' "
"state."
msgstr ""
+"æ‰‹åŠ¨é‡æ–°è®¡ç®—由动画节点生æˆçš„轨é“ä¿¡æ¯ç¼“存。当外部资æºä¿®æ”¹åŠ¨ç”»èŠ‚ç‚¹çš„çŠ¶æ€æ—¶éœ€è¦"
+"用到。"
#: doc/classes/AnimationTreePlayer.xml:351
-#, fuzzy
msgid "Removes the animation node with name [code]id[/code]."
-msgstr "移除按键[code]name[/code]的动画。"
+msgstr "移除å称为[code]id[/code]的动画节点。"
#: doc/classes/AnimationTreePlayer.xml:357
msgid "Resets this [AnimationTreePlayer]."
msgstr "é‡ç½®æ­¤ [AnimationTreePlayer]。"
#: doc/classes/AnimationTreePlayer.xml:364
-#, fuzzy
msgid ""
"Returns the time scale value of the TimeScale node with name [code]id[/code]."
-msgstr "返回具有给定 [code] name [/code] çš„æè´¨å±žæ€§çš„默认值。"
+msgstr "返回å称为[code]id[/code]çš„TimeScale节点的时间缩放值。"
#: doc/classes/AnimationTreePlayer.xml:372
msgid ""
@@ -7339,6 +7375,9 @@ msgid ""
"If applied after a blend or mix, affects all input animations to that blend "
"or mix."
msgstr ""
+"设置å称为[code]id[/code]çš„TimeScale节点的时间缩放为[code]scale[/code]。\n"
+"时间缩放节点用æ¥åŠ å¿«[Animation]的速度,如果缩放高于1ï¼Œå°±ä¼šå‡æ…¢å®ƒä»¬ã€‚\n"
+"如果在混åˆåŽåº”用,会影å“到该混åˆçš„æ‰€æœ‰è¾“入动画。"
#: doc/classes/AnimationTreePlayer.xml:382
msgid ""
@@ -7347,33 +7386,34 @@ msgid ""
"This functions as a seek in the [Animation] or the blend or mix of "
"[Animation]s input in it."
msgstr ""
+"设置å称为[code]id[/code]çš„TimeSeek节点的时间查寻值为[code]seconds[/code]。\n"
+"这在[Animation]或输入的[Animation]的混åˆä¸­èµ·åˆ°æŸ¥å¯»çš„作用。"
#: doc/classes/AnimationTreePlayer.xml:391
-#, fuzzy
msgid ""
"Deletes the input at [code]input_idx[/code] for the transition node with "
"name [code]id[/code]."
-msgstr "返回[code]prop_idx[/code]处的属性å称,用于[code]idx[/code]处的节点。"
+msgstr "删除å称为[code]id[/code]的过渡节点的[code]input_idx[/code]的输入。"
#: doc/classes/AnimationTreePlayer.xml:398
-#, fuzzy
msgid ""
"Returns the index of the currently evaluated input for the transition node "
"with name [code]id[/code]."
-msgstr "返回带有给定[code]id[/code]的项的索引。"
+msgstr "返回å称为[code]id[/code]的过渡节点的当å‰è¯„估输入的索引。"
#: doc/classes/AnimationTreePlayer.xml:405
msgid ""
"Returns the number of inputs for the transition node with name [code]id[/"
"code]. You can add inputs by right-clicking on the transition node."
msgstr ""
+"返回å称为[code]id[/code]的过渡节点的输入数。你å¯ä»¥é€šè¿‡å³é”®ç‚¹å‡»è¿‡æ¸¡èŠ‚ç‚¹æ¥å¢žåŠ "
+"输入。"
#: doc/classes/AnimationTreePlayer.xml:412
-#, fuzzy
msgid ""
"Returns the cross fade time for the transition node with name [code]id[/"
"code]."
-msgstr "返回[code]idx[/code]处的节点å称。"
+msgstr "返回å称为[code]id[/code]çš„è¿‡æ¸¡èŠ‚ç‚¹çš„äº¤å‰æ·¡åŒ–时间。"
#: doc/classes/AnimationTreePlayer.xml:420
msgid ""
@@ -7381,41 +7421,41 @@ msgid ""
"transition node with name [code]id[/code] is set to automatically advance to "
"the next input upon completion."
msgstr ""
+"如果过渡节点上å称为[code]id[/code]çš„[code]input_idx[/code]的输入被设置为在完"
+"æˆåŽè‡ªåЍå‰è¿›åˆ°ä¸‹ä¸€ä¸ªè¾“入,则返回[code]true[/code]。"
#: doc/classes/AnimationTreePlayer.xml:428
-#, fuzzy
msgid ""
"The transition node with name [code]id[/code] sets its current input at "
"[code]input_idx[/code]."
msgstr ""
-"å°†è½¨é“ [code]idx[/code] 的索引ä½ç½®æ”¹ä¸º [code]to_idx[/code] 中定义的ä½ç½®ã€‚"
+"å称为 [code]id[/code] 的过渡节点将其当å‰è¾“入设置为 [code]input_idx[/code]。"
#: doc/classes/AnimationTreePlayer.xml:437
msgid ""
"The transition node with name [code]id[/code] advances to its next input "
"automatically when the input at [code]input_idx[/code] completes."
msgstr ""
+"当[code]input_idx[/code]处的输入完æˆåŽï¼Œå称为[code]id[/code]的过渡节点自动进"
+"行到下一个输入。"
#: doc/classes/AnimationTreePlayer.xml:445
-#, fuzzy
msgid ""
"Resizes the number of inputs available for the transition node with name "
"[code]id[/code]."
-msgstr "返回与给定[code] id [/code]å…³è”的点的æƒé‡æ¯”例。"
+msgstr "调整å称为[code]id[/code]的过渡节点的å¯ç”¨è¾“入数。"
#: doc/classes/AnimationTreePlayer.xml:453
-#, fuzzy
msgid ""
"The transition node with name [code]id[/code] sets its cross fade time to "
"[code]time_sec[/code]."
msgstr ""
-"å°†è½¨é“ [code]idx[/code] 的索引ä½ç½®æ”¹ä¸º [code]to_idx[/code] 中定义的ä½ç½®ã€‚"
+"å称为[code]id[/code]çš„è¿‡æ¸¡èŠ‚ç‚¹å°†å…¶äº¤å‰æ·¡åŒ–时间设置为[code]time_sec[/code]。"
#: doc/classes/AnimationTreePlayer.xml:459
-#, fuzzy
msgid ""
"If [code]true[/code], the [AnimationTreePlayer] is able to play animations."
-msgstr "如果 [code]true[/code] 时,[AnimationTree] 将执行逻辑处ç†ã€‚"
+msgstr "如果[code]true[/code],[AnimationTreePlayer]就能够播放动画。"
#: doc/classes/AnimationTreePlayer.xml:462
msgid ""
@@ -7423,6 +7463,8 @@ msgid ""
"It accesses the bones, so it should point to the same node the "
"[AnimationPlayer] would point its Root Node at."
msgstr ""
+"相对访问其他节点的节点。\n"
+"它访问骨骼,应该指å‘[AnimationPlayer]将指å‘其根节点的åŒä¸€ä¸ªèŠ‚ç‚¹ã€‚"
#: doc/classes/AnimationTreePlayer.xml:466
msgid ""
@@ -7430,6 +7472,9 @@ msgid ""
"binds animations to animation nodes.\n"
"Once set, [Animation] nodes can be added to the [AnimationTreePlayer]."
msgstr ""
+"通过 [AnimationPlayer] 的路径,此 [AnimationTreePlayer] 将动画绑定到动画节"
+"点。\n"
+"设置åŽï¼Œ[Animation]节点å¯ä»¥æ·»åŠ åˆ°[AnimationPlayer]。"
#: doc/classes/AnimationTreePlayer.xml:470
msgid "The thread in which to update animations."
@@ -7495,38 +7540,46 @@ msgstr "https://godotengine.org/asset-library/asset/127"
#: doc/classes/Area.xml:17
msgid ""
-"Returns a list of intersecting [Area]s. For performance reasons (collisions "
-"are all processed at the same time) this list is modified once during the "
-"physics step, not immediately after objects are moved. Consider using "
-"signals instead."
+"Returns a list of intersecting [Area]s. The overlapping area's [member "
+"CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-"返回一个相交的区域[Area]çš„åˆ—è¡¨ã€‚ç”±äºŽæ€§èƒ½åŽŸå› ï¼ˆç¢°æ’žéƒ½æ˜¯åŒæ—¶å¤„ç†çš„),这个列表"
-"åœ¨ç‰©ç†æ­¥éª¤ä¸­è¢«ä¿®æ”¹ä¸€æ¬¡ï¼Œè€Œä¸æ˜¯åœ¨ç‰©ä½“被移动åŽç«‹å³ä¿®æ”¹ã€‚å¯ä»¥è€ƒè™‘ä½¿ç”¨ä¿¡å·æ¥ä»£"
-"替。"
+"返回相交的[Area]的列表。é‡å åŒºåŸŸçš„[member CollisionObject.collision_layer]å¿…"
+"须是这个区域[member CollisionObject.collision_mask]的一部分,这样æ‰èƒ½è¢«æ£€æµ‹"
+"到。\n"
+"å‡ºäºŽæ€§èƒ½çš„è€ƒè™‘ï¼Œå› ç¢°æ’žéƒ½æ˜¯åŒæ—¶å¤„ç†çš„ï¼Œè¿™ä¸ªåˆ—è¡¨åœ¨ç‰©ç†æ­¥éª¤ä¸­åªä¿®æ”¹ä¸€æ¬¡ï¼Œè€Œä¸æ˜¯"
+"在物体被移动åŽç«‹å³ä¿®æ”¹ã€‚è€ƒè™‘ä½¿ç”¨ä¿¡å·æ¥ä»£æ›¿ã€‚"
-#: doc/classes/Area.xml:23
+#: doc/classes/Area.xml:24
msgid ""
-"Returns a list of intersecting [PhysicsBody]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody]s. The overlapping body's "
+"[member CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-"返回一个相交的[PhysicsBody]的列表。由于性能的原因(碰撞都是在åŒä¸€æ—¶é—´å¤„ç†"
-"çš„ï¼‰ï¼Œè¿™ä¸ªåˆ—è¡¨åœ¨ç‰©ç†æ­¥éª¤ä¸­è¢«ä¿®æ”¹ä¸€æ¬¡ï¼Œè€Œä¸æ˜¯åœ¨ç‰©ä½“被移动åŽç«‹å³ä¿®æ”¹ã€‚å¯ä»¥è€ƒè™‘"
-"ä½¿ç”¨ä¿¡å·æ¥ä»£æ›¿ã€‚"
+"返回相交的[PhysicsBody]的列表。é‡å ç‰©ä½“çš„[member CollisionObject."
+"collision_layer]必须是这个区域[member CollisionObject.collision_mask]的一部"
+"分,这样æ‰èƒ½è¢«æ£€æµ‹åˆ°ã€‚\n"
+"å‡ºäºŽæ€§èƒ½çš„è€ƒè™‘ï¼Œå› ç¢°æ’žéƒ½æ˜¯åŒæ—¶å¤„ç†çš„ï¼Œè¿™ä¸ªåˆ—è¡¨åœ¨ç‰©ç†æ­¥éª¤ä¸­åªä¿®æ”¹ä¸€æ¬¡ï¼Œè€Œä¸æ˜¯"
+"在物体被移动åŽç«‹å³ä¿®æ”¹ã€‚è€ƒè™‘ä½¿ç”¨ä¿¡å·æ¥ä»£æ›¿ã€‚"
-#: doc/classes/Area.xml:30
+#: doc/classes/Area.xml:32
msgid ""
"If [code]true[/code], the given area overlaps the Area.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
"For performance, list of overlaps is updated once per frame and before the "
"physics step. Consider using signals instead."
msgstr ""
-"如果 [code]true[/code],则给定区域与该区域é‡å ã€‚\n"
-" [b]注æ„:[/b]在移动物体åŽï¼Œè¿™ä¸ªæµ‹è¯•çš„ç»“æžœä¸æ˜¯å³æ—¶çš„。为了性能,é‡å åˆ—表在æ¯"
-"ä¸€å¸§å’Œç‰©ç†æ­¥éª¤ä¹‹å‰æ›´æ–°ä¸€æ¬¡ã€‚å¯ä»¥è€ƒè™‘用信å·ä»£æ›¿ã€‚"
+"如果 [code]true[/code],则给定区域与该区域é‡å .\n"
+"[b]注æ„:[/b]在移动物体åŽï¼Œè¿™ä¸ªæµ‹è¯•çš„ç»“æžœä¸æ˜¯å³æ—¶çš„。为了性能,é‡å åˆ—表在æ¯ä¸€"
+"å¸§å’Œç‰©ç†æ­¥éª¤ä¹‹å‰æ›´æ–°ä¸€æ¬¡ã€‚å¯ä»¥è€ƒè™‘用信å·ä»£æ›¿ã€‚"
-#: doc/classes/Area.xml:38
+#: doc/classes/Area.xml:40
msgid ""
"If [code]true[/code], the given physics body overlaps the Area.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -7536,48 +7589,48 @@ msgid ""
"instance (while GridMaps are not physics body themselves, they register "
"their tiles with collision shapes as a virtual physics body)."
msgstr ""
-"如果为[code]true[/code],则给定的物ç†ä½“与该区域é‡å ã€‚\n"
+"如果为[code]true[/code],则给定的物ç†ä½“与该区域é‡å .\n"
"[b]注æ„:[/b]在移动物体åŽï¼Œè¿™ä¸ªæµ‹è¯•çš„ç»“æžœä¸æ˜¯å³æ—¶çš„。为了æé«˜æ€§èƒ½ï¼Œé‡å åˆ—表在"
"æ¯ä¸€å¸§å’Œç‰©ç†æ­¥éª¤ä¹‹å‰æ›´æ–°ä¸€æ¬¡ã€‚å¯ä»¥è€ƒè™‘ä½¿ç”¨ä¿¡å·æ¥ä»£æ›¿ã€‚\n"
"[code]body[/code]傿•°å¯ä»¥æ˜¯ä¸€ä¸ª[PhysicsBody]或一个[GridMap]实例(虽然GridMaps"
"æœ¬èº«ä¸æ˜¯ç‰©ç†ä½“,但它们用碰撞形状注册它们的瓦片(tiles)作为一个虚拟物ç†ä½“)。"
-#: doc/classes/Area.xml:46
+#: doc/classes/Area.xml:48
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
"velocity lost per second.\n"
"See [member ProjectSettings.physics/3d/default_angular_damp] for more "
"details about damping."
msgstr ""
-"ç‰©ä½“åœ¨æ­¤åŒºåŸŸåœæ­¢æ—‹è½¬çš„速度。代表æ¯ç§’æŸå¤±çš„角速度。\n"
+"ç‰©ä½“åœ¨æ­¤åŒºåŸŸåœæ­¢æ—‹è½¬çš„速度。代表æ¯ç§’æŸå¤±çš„角速度.\n"
"关于阻尼的更多细节,è§[member ProjectSettings.physics/3d/"
"default_angular_damp]。"
-#: doc/classes/Area.xml:50 doc/classes/Area2D.xml:52
+#: doc/classes/Area.xml:52 doc/classes/Area2D.xml:54
msgid "The name of the area's audio bus."
-msgstr "该区域音频总线的å称。"
+msgstr "该区域音频总线的åç§°."
-#: doc/classes/Area.xml:53 doc/classes/Area2D.xml:55
+#: doc/classes/Area.xml:55 doc/classes/Area2D.xml:57
msgid ""
"If [code]true[/code], the area's audio bus overrides the default audio bus."
msgstr "如果[code]true[/code],该区域的音频总线覆盖默认的音频总线。"
-#: doc/classes/Area.xml:56
+#: doc/classes/Area.xml:58
msgid ""
"The area's gravity intensity (in meters per second squared). This value "
"multiplies the gravity vector. This is useful to alter the force of gravity "
"without altering its direction."
msgstr ""
-"该区域内的é‡åŠ›å¼ºåº¦ï¼ˆå•ä½ï¼šç±³/秒平方)。这个值是é‡åŠ›å‘é‡çš„倿•°ã€‚è¿™å¯¹åªæ”¹å˜å¼•力"
-"大å°è€Œä¸æ”¹å˜å…¶æ–¹å‘很有用。"
+"该区域内的é‡åŠ›å¼ºåº¦ï¼ˆå•ä½ï¼šm/s^2)。这个值是é‡åŠ›å‘é‡çš„倿•°ã€‚这个é‡åœ¨æ”¹å˜å¼•力大"
+"å°è€Œä¸æ”¹å˜å…¶æ–¹å‘很有用。"
-#: doc/classes/Area.xml:59 doc/classes/Area2D.xml:61
+#: doc/classes/Area.xml:61 doc/classes/Area2D.xml:63
msgid ""
"The falloff factor for point gravity. The greater the value, the faster "
"gravity decreases with distance."
-msgstr "点状é‡åŠ›çš„è¡°å‡ç³»æ•°ã€‚该值越大,é‡åЛ值éšè·ç¦»ä¸‹é™çš„速度就越快。"
+msgstr "点é‡åŠ›çš„è¡°å‡ç³»æ•°ã€‚该值越大,é‡åЛ值éšè·ç¦»ä¸‹é™çš„速度就越快。"
-#: doc/classes/Area.xml:62 doc/classes/Area2D.xml:64
+#: doc/classes/Area.xml:64 doc/classes/Area2D.xml:66
msgid ""
"If [code]true[/code], gravity is calculated from a point (set via [member "
"gravity_vec]). See also [member space_override]."
@@ -7585,40 +7638,40 @@ msgstr ""
"如果 [code]true[/code],则从一个点计算é‡åŠ›ï¼ˆé€šè¿‡ [member gravity_vec] 设"
"置)。å‚阅 [member space_override]。"
-#: doc/classes/Area.xml:65 doc/classes/Area2D.xml:67
+#: doc/classes/Area.xml:67 doc/classes/Area2D.xml:69
msgid ""
"The area's gravity vector (not normalized). If gravity is a point (see "
"[member gravity_point]), this will be the point of attraction."
msgstr ""
-"区域的é‡åŠ›å‘é‡ï¼ˆæœªå½’一化)。如果é‡åŠ›æ˜¯ä¸€ä¸ªç‚¹ï¼ˆè¯·å‚阅[membergravity_point]),"
-"则这将是å¸å¼•力点。"
+"区域的未归一化的é‡åŠ›å‘é‡ã€‚如果é‡åŠ›ä½œç”¨åœ¨ä¸€ä¸ªç‚¹ä¸Šï¼Œåˆ™å®ƒå°†æ˜¯å¼•åŠ›ç‚¹ã€‚å‚阅"
+"[membergravity_point]。"
-#: doc/classes/Area.xml:68
+#: doc/classes/Area.xml:70
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
"velocity lost per second.\n"
"See [member ProjectSettings.physics/3d/default_linear_damp] for more details "
"about damping."
msgstr ""
-"ç‰©ä½“åœ¨æ­¤åŒºåŸŸåœæ­¢è¿åŠ¨çš„é€Ÿåº¦ã€‚ä»£è¡¨æ¯ç§’æŸå¤±çš„线速度。\n"
+"物体在此区域å‡é€Ÿçš„速率。代表æ¯ç§’æŸå¤±çš„线速度。\n"
"关于阻尼的更多细节,è§[member ProjectSettings.physics/3d/"
"default_linear_damp]。"
-#: doc/classes/Area.xml:72 doc/classes/Area2D.xml:74
+#: doc/classes/Area.xml:74 doc/classes/Area2D.xml:76
msgid "If [code]true[/code], other monitoring areas can detect this area."
msgstr "如果[code]true[/code],其他监测区域å¯ä»¥æ£€æµ‹åˆ°è¿™ä¸ªåŒºåŸŸã€‚"
-#: doc/classes/Area.xml:75 doc/classes/Area2D.xml:77
+#: doc/classes/Area.xml:77 doc/classes/Area2D.xml:79
msgid ""
"If [code]true[/code], the area detects bodies or areas entering and exiting "
"it."
msgstr "如果[code]true[/code],则该区域检测进入和退出该区域的机构或区域。"
-#: doc/classes/Area.xml:78 doc/classes/Area2D.xml:80
+#: doc/classes/Area.xml:80 doc/classes/Area2D.xml:82
msgid "The area's priority. Higher priority areas are processed first."
msgstr "该地区的优先级。优先级较高的地区优先处ç†ã€‚"
-#: doc/classes/Area.xml:81
+#: doc/classes/Area.xml:83
msgid ""
"The degree to which this area applies reverb to its associated audio. Ranges "
"from [code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
@@ -7626,15 +7679,15 @@ msgstr ""
"该区域对其相关音频应用混å“的程度。范围从[code]0[/code]到[code]1[/code],精度"
"为[code]0.1[/code]。"
-#: doc/classes/Area.xml:84
+#: doc/classes/Area.xml:86
msgid "If [code]true[/code], the area applies reverb to its associated audio."
-msgstr "如果[code]true[/code],则该区域将混å“应用于其相关音频。"
+msgstr "如果为[code]true[/code],则该区域将混å“应用于其相关音频。"
-#: doc/classes/Area.xml:87
+#: doc/classes/Area.xml:89
msgid "The reverb bus name to use for this area's associated audio."
-msgstr "这个区域的相关音频è¦ä½¿ç”¨çš„æ··å“总线å称。"
+msgstr "这个区域的相关音频è¦ä½¿ç”¨çš„æ··å“总线åç§°."
-#: doc/classes/Area.xml:90
+#: doc/classes/Area.xml:92
msgid ""
"The degree to which this area's reverb is a uniform effect. Ranges from "
"[code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
@@ -7642,23 +7695,23 @@ msgstr ""
"è¿™ä¸ªåŒºåŸŸçš„æ··å“æ•ˆæžœå‡åŒ€çš„程度。范围从[code]0[/code]到[code]1[/code],精度为"
"[code]0.1[/code]。"
-#: doc/classes/Area.xml:93 doc/classes/Area2D.xml:83
+#: doc/classes/Area.xml:95 doc/classes/Area2D.xml:85
msgid ""
"Override mode for gravity and damping calculations within this area. See "
"[enum SpaceOverride] for possible values."
msgstr "该区域内é‡åŠ›å’Œé˜»å°¼è®¡ç®—çš„è¦†ç›–æ¨¡å¼ã€‚å¯èƒ½çš„值è§[enum SpaceOverride]。"
-#: doc/classes/Area.xml:100
+#: doc/classes/Area.xml:102
msgid ""
"Emitted when another Area enters this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
-"当å¦ä¸€ä¸ªåŒºåŸŸè¿›å…¥è¿™ä¸ªåŒºåŸŸæ—¶å‘出的。需è¦å°†ç›‘控[member monitoring]设置为"
+"当å¦ä¸€ä¸ªArea进入这个Area时触å‘。需è¦å°†ç›‘控[member monitoring]设置为"
"[code]true[/code]。\n"
-"[code]area[/code]傿•°æ˜¯è¿›å…¥çš„其他区域。"
+"[code]area[/code]傿•°æ˜¯å¦å¤–一个Area。"
-#: doc/classes/Area.xml:107
+#: doc/classes/Area.xml:109
msgid ""
"Emitted when another Area exits this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
@@ -7666,10 +7719,9 @@ msgid ""
msgstr ""
"当å¦ä¸€ä¸ªåŒºåŸŸé€€å‡ºè¿™ä¸ªåŒºåŸŸæ—¶å‘å‡ºçš„ã€‚è¦æ±‚监控[member monitoring]被设置为"
"[code]true[/code]。\n"
-"[code]area[/code]傿•°æ˜¯è¿›å…¥çš„其他区域。"
+"[code]area[/code]傿•°æ˜¯å¦å¤–一个Area。"
-#: doc/classes/Area.xml:117 doc/classes/Area.xml:130
-#, fuzzy
+#: doc/classes/Area.xml:119 doc/classes/Area.xml:132
msgid ""
"Emitted when one of another Area's [Shape]s enters one of this Area's "
"[Shape]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -7683,17 +7735,19 @@ msgid ""
"the [PhysicsServer]. Get the [CollisionShape] node with [code]self."
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-"当å¦ä¸€ä¸ªåŒºåŸŸçš„一个形状[Shape]进入这个区域的一个形状[Shape]æ—¶å‘å‡ºçš„ã€‚è¦æ±‚监控"
-"[member monitoring]被设置为[code]true[/code]。\n"
-"[code] area_id[/code] 傿•°æ˜¯[PhysicsServer]使用的其他区域的[CollisionObject]"
-"的[RID]。\n"
-"[code]area[/code] 傿•°æ˜¯å…¶ä»–区域。\n"
-"[code]area_shape[/code] 傿•°æ˜¯è¢«[PhysicsServer]使用的其他区域的[Shape]的索"
-"引。\n"
-"[code]local_shape[/code]傿•°æ˜¯è¢«[PhysicsServer]使用的这个区域的[Shape]的索"
-"引。"
+"当å¦ä¸€ä¸ªåŒºåŸŸçš„一个[Shape]进入这个区域的一个[Shape]æ—¶å‘å‡ºçš„ã€‚è¦æ±‚[member "
+"monitoring] 被设置为[code]true[/code]。\n"
+"[code]area_rid[/code] [PhysicsServer]使用的其他区域的[CollisionObject]的"
+"[RID]。\n"
+"[code]area[/code] 其他区域。\n"
+"[code]area_shape_index[/code] [PhysicsServer]使用的其他区域的[Shape]的索引。"
+"用[code]area.shape_owner_get_owner(area_shape_index)[/code]获得"
+"[CollisionShape]节点。\n"
+"[code]local_shape_index[/code]是[PhysicsServer]使用的该区域的[Shape]的索引。"
+"用[code]self.shape_owner_get_owner(local_shape_index)[/code]获得"
+"[CollisionShape]节点。"
-#: doc/classes/Area.xml:140
+#: doc/classes/Area.xml:142
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] enters this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -7704,10 +7758,10 @@ msgstr ""
"当[PhysicsBody]或[GridMap]进入这个区域时å‘出的。需è¦å°†ç›‘控[member monitoring]"
"设置为[code]true[/code]。如果[MeshLibrary]有碰撞形状[Shape],就会检测到"
"[GridMap]。\n"
-"[code]body[/code]是å¦ä¸€ä¸ª[PhysicsBody]或[GridMap]的节点[Node],如果它存在于场"
-"景树中。"
+"[code]body[/code], 如果它存在于场景树中, 是å¦ä¸€ä¸ª[PhysicsBody]或[GridMap]节点"
+"[Node]。"
-#: doc/classes/Area.xml:147
+#: doc/classes/Area.xml:149
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] exits this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -7715,14 +7769,13 @@ msgid ""
"[code]body[/code] the [Node], if it exists in the tree, of the other "
"[PhysicsBody] or [GridMap]."
msgstr ""
-"当[PhysicsBody]或[GridMap]离开这个区域时å‘出的。需è¦å°†ç›‘控[member monitoring]"
+"当[PhysicsBody]或[GridMap]离开这个Areaæ—¶å‘出的。需è¦å°†ç›‘控[member monitoring]"
"设置为[code]true[/code]。如果[MeshLibrary]有碰撞形状[Shape],就会检测到"
"[GridMap]。\n"
-"[code]body[/code]是其他[PhysicsBody]或[GridMap]的[Node],如果它存在于场景树"
-"中。"
+"[code]body[/code], 如果它存在于场景树中, 是其他[PhysicsBody]或[GridMap]的"
+"[Node]。"
-#: doc/classes/Area.xml:157 doc/classes/Area.xml:170
-#, fuzzy
+#: doc/classes/Area.xml:159 doc/classes/Area.xml:172
msgid ""
"Emitted when one of a [PhysicsBody] or [GridMap]'s [Shape]s enters one of "
"this Area's [Shape]s. Requires [member monitoring] to be set to [code]true[/"
@@ -7738,29 +7791,31 @@ msgid ""
"the [PhysicsServer]. Get the [CollisionShape] node with [code]self."
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-"当[PhysicsBody]或[GridMap]的一个形状[Shape]进入这个区域的一个形状[Shape]æ—¶å‘"
-"出的。需è¦å°†ç›‘控[member monitoring]设置为[code]true[/code]。如果[MeshLibrary]"
-"有碰撞形状[Shape],就会检测到[GridMap]。\n"
-"[code]body_id[/code]傿•°æ˜¯[PhysicsServer]使用的[PhysicsBody]或[MeshLibrary]çš„"
-"[CollisionObject]的RID。\n"
-"[code]body[/code] 傿•°æ˜¯[PhysicsBody]或[GridMap]çš„[Node],如果它存在于树"
-"中。\n"
-"[code]body_shape[/code] 傿•°æ˜¯ç”±[PhysicsServer]使用的[PhysicsBody]或[GridMap]"
-"的[Shape]的索引。\n"
-"[code]local_shape[/code] 傿•°æ˜¯[PhysicsServer]使用的这个区域的[Shape]的索引。"
-
-#: doc/classes/Area.xml:180 doc/classes/Area2D.xml:170
+"当[PhysicsBody]或[GridMap]的一个[Shape]进入这个区域的一个[Shape]时触å‘。需è¦"
+"将[member monitoring]设置为[code]true[/code]。如果[MeshLibrary]有碰撞"
+"[Shape],就会检测到[GridMap]。\n"
+"[code]body_rid[/code] [PhysicsServer]使用的[PhysicsBody]或[MeshLibrary]的"
+"[CollisionObject]的[RID]。\n"
+"[code]body[/code] [PhysicsBody]或[GridMap]çš„[Node],如果它存在于树中的è¯ã€‚\n"
+"[code]body_shape_index[/code] [PhysicsServer]使用的[PhysicsBody]或[GridMap]的"
+"[Shape]的索引。用[code]body.shape_owner_get_owner(body_shape_index)[/code]获"
+"å–[CollisionShape]节点。\n"
+"[code]local_shape_index[/code]这个区域的[Shape]的索引,由[PhysicsServer]使"
+"用。用[code]self.shape_owner_get_owner(local_shape_index)[/code]获得"
+"[CollisionShape]节点。"
+
+#: doc/classes/Area.xml:182 doc/classes/Area2D.xml:172
msgid "This area does not affect gravity/damping."
msgstr "这个区域ä¸å½±å“é‡åŠ›/阻尼。"
-#: doc/classes/Area.xml:183 doc/classes/Area2D.xml:173
+#: doc/classes/Area.xml:185 doc/classes/Area2D.xml:175
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order)."
msgstr ""
"该区域将其é‡åŠ›/阻尼值加到迄今为止计算出的任何值上(按[member 优先级]排åºï¼‰ã€‚"
-#: doc/classes/Area.xml:186 doc/classes/Area2D.xml:176
+#: doc/classes/Area.xml:188 doc/classes/Area2D.xml:178
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order), ignoring any lower priority areas."
@@ -7768,13 +7823,13 @@ msgstr ""
"该区域将其é‡åŠ›/阻尼值添加到到目å‰ä¸ºæ­¢å·²è®¡ç®—的任何内容(按[member 优先级]顺"
"åºï¼‰ï¼Œè€Œå¿½ç•¥ä»»ä½•较低优先级的区域。"
-#: doc/classes/Area.xml:189 doc/classes/Area2D.xml:179
+#: doc/classes/Area.xml:191 doc/classes/Area2D.xml:181
msgid ""
"This area replaces any gravity/damping, even the defaults, ignoring any "
"lower priority areas."
msgstr "è¯¥åŒºåŸŸå°†æ›¿æ¢æ‰€æœ‰é‡åŠ›/阻尼,甚至是默认值,而忽略任何较低优先级的区域。"
-#: doc/classes/Area.xml:192 doc/classes/Area2D.xml:182
+#: doc/classes/Area.xml:194 doc/classes/Area2D.xml:184
msgid ""
"This area replaces any gravity/damping calculated so far (in [member "
"priority] order), but keeps calculating the rest of the areas."
@@ -7799,7 +7854,8 @@ msgstr ""
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/physics/using_area_2d.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/physics/using_area_2d.html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/physics/using_area_2d."
+"html"
#: doc/classes/Area2D.xml:12 doc/classes/CollisionShape2D.xml:12
#: doc/classes/RectangleShape2D.xml:10
@@ -7814,25 +7870,35 @@ msgstr "https://godotengine.org/asset-library/asset/120"
#: doc/classes/Area2D.xml:19
msgid ""
-"Returns a list of intersecting [Area2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [Area2D]s. The overlapping area's [member "
+"CollisionObject2D.collision_layer] must be part of this area's [member "
+"CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-"返回相交的 [Area2D] çš„åˆ—è¡¨ã€‚ç”±äºŽæ€§èƒ½åŽŸå› ï¼ˆç¢°æ’žéƒ½æ˜¯åŒæ—¶å¤„ç†çš„),该列表ä¸ä¼šåœ¨"
-"对象移动åŽç«‹å³æ›´æ–°ï¼Œåªä¼šåœ¨ç‰©ç†æ›´æ–°æ—¶è¿›è¡Œç»Ÿä¸€ä¿®æ”¹ã€‚å¯ä»¥è€ƒè™‘改用信å·ã€‚"
+"返回相交的[Area2D]的列表。é‡å åŒºåŸŸçš„[member CollisionObject2D."
+"collision_layer]必须是这个区域[member CollisionObject2D.collision_mask]的一部"
+"分,这样æ‰èƒ½è¢«æ£€æµ‹åˆ°ã€‚\n"
+"å‡ºäºŽæ€§èƒ½çš„è€ƒè™‘ï¼Œå› ç¢°æ’žéƒ½æ˜¯åŒæ—¶å¤„ç†çš„ï¼Œè¿™ä¸ªåˆ—è¡¨åœ¨ç‰©ç†æ­¥éª¤ä¸­åªä¿®æ”¹ä¸€æ¬¡ï¼Œè€Œä¸æ˜¯"
+"在物体被移动åŽç«‹å³ä¿®æ”¹ã€‚è€ƒè™‘ä½¿ç”¨ä¿¡å·æ¥ä»£æ›¿ã€‚"
-#: doc/classes/Area2D.xml:25
+#: doc/classes/Area2D.xml:26
msgid ""
-"Returns a list of intersecting [PhysicsBody2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody2D]s. The overlapping body's "
+"[member CollisionObject2D.collision_layer] must be part of this area's "
+"[member CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-"返回相交的 [PhysicsBody2D] çš„åˆ—è¡¨ã€‚ç”±äºŽæ€§èƒ½åŽŸå› ï¼ˆç¢°æ’žéƒ½æ˜¯åŒæ—¶å¤„ç†çš„),该列表"
-"ä¸ä¼šåœ¨å¯¹è±¡ç§»åЍåŽç«‹å³æ›´æ–°ï¼Œåªä¼šåœ¨ç‰©ç†æ›´æ–°æ—¶è¿›è¡Œç»Ÿä¸€ä¿®æ”¹ã€‚å¯ä»¥è€ƒè™‘改用信å·ã€‚"
+"返回相交的[PhysicsBody2D]的列表。é‡å ç‰©ä½“çš„[member CollisionObject2D."
+"collision_layer]必须是这个区域[member CollisionObject2D.collision_mask]的一部"
+"分,这样æ‰èƒ½è¢«æ£€æµ‹åˆ°ã€‚\n"
+"å‡ºäºŽæ€§èƒ½çš„è€ƒè™‘ï¼Œå› ç¢°æ’žéƒ½æ˜¯åŒæ—¶å¤„ç†çš„ï¼Œè¿™ä¸ªåˆ—è¡¨åœ¨ç‰©ç†æ­¥éª¤ä¸­åªä¿®æ”¹ä¸€æ¬¡ï¼Œè€Œä¸æ˜¯"
+"在物体被移动åŽç«‹å³ä¿®æ”¹ã€‚è€ƒè™‘ä½¿ç”¨ä¿¡å·æ¥ä»£æ›¿ã€‚"
-#: doc/classes/Area2D.xml:32
+#: doc/classes/Area2D.xml:34
msgid ""
"If [code]true[/code], the given area overlaps the Area2D.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -7843,7 +7909,7 @@ msgstr ""
"[b]注æ„:[/b]在移动物体åŽï¼Œè¿™ä¸ªæµ‹è¯•çš„ç»“æžœä¸æ˜¯å³æ—¶çš„。为了性能,é‡å åˆ—表在æ¯ä¸€"
"å¸§å’Œç‰©ç†æ­¥éª¤ä¹‹å‰æ›´æ–°ä¸€æ¬¡ã€‚å¯ä»¥è€ƒè™‘用信å·ä»£æ›¿ã€‚"
-#: doc/classes/Area2D.xml:40
+#: doc/classes/Area2D.xml:42
msgid ""
"If [code]true[/code], the given physics body overlaps the Area2D.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -7859,7 +7925,7 @@ msgstr ""
"[code]body[/code]傿•°å¯ä»¥æ˜¯ä¸€ä¸ª[PhysicsBody2D]或一个[TileMap]实例(虽然"
"TileMapsæœ¬èº«ä¸æ˜¯ç‰©ç†ä½“,但它们用碰撞形状注册它们的瓦片作为一个虚拟物ç†ä½“)。"
-#: doc/classes/Area2D.xml:48
+#: doc/classes/Area2D.xml:50
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
"velocity lost per second.\n"
@@ -7870,7 +7936,7 @@ msgstr ""
"关于阻尼的更多细节,è§[member ProjectSettings.physics/2D/"
"default_angular_damp]。"
-#: doc/classes/Area2D.xml:58
+#: doc/classes/Area2D.xml:60
msgid ""
"The area's gravity intensity (in pixels per second squared). This value "
"multiplies the gravity vector. This is useful to alter the force of gravity "
@@ -7879,7 +7945,7 @@ msgstr ""
"该区域的é‡åŠ›å¼ºåº¦ï¼ˆä»¥åƒç´ /秒的平方为å•ä½ï¼‰ã€‚这个值是é‡åŠ›å‘é‡çš„倿•°ã€‚这对改å˜å¼•"
"力大å°è€Œä¸æ”¹å˜å…¶æ–¹å‘很有用。"
-#: doc/classes/Area2D.xml:70
+#: doc/classes/Area2D.xml:72
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
"velocity lost per second.\n"
@@ -7890,7 +7956,7 @@ msgstr ""
"关于阻尼的更多细节,è§[member ProjectSettings.physics/2D/"
"default_linear_damp]。"
-#: doc/classes/Area2D.xml:90
+#: doc/classes/Area2D.xml:92
msgid ""
"Emitted when another Area2D enters this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
@@ -7900,7 +7966,7 @@ msgstr ""
"[code]true[/code]。\n"
"[code]area[/code]傿•°æ˜¯å…¶ä»–Area2D。"
-#: doc/classes/Area2D.xml:97
+#: doc/classes/Area2D.xml:99
msgid ""
"Emitted when another Area2D exits this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
@@ -7910,8 +7976,7 @@ msgstr ""
"[code]true[/code]。\n"
"[code]area[/code]傿•°æ˜¯å…¶ä»–Area2D。"
-#: doc/classes/Area2D.xml:107
-#, fuzzy
+#: doc/classes/Area2D.xml:109
msgid ""
"Emitted when one of another Area2D's [Shape2D]s enters one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -7925,18 +7990,19 @@ msgid ""
"used by the [Physics2DServer]. Get the [CollisionShape2D] node with "
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-"当å¦ä¸€ä¸ªArea2Dçš„[Shape2D]s进入这个Area2Dçš„[Shape2D]sæ—¶å‘å‡ºçš„ã€‚è¦æ±‚监控"
-"[member monitoring]被设置为[code]true[/code]。\n"
-"[code]area_id[/code] 傿•°æ˜¯ç”±[Physics2DServer]使用的其他Area2Dçš„"
+"当å¦ä¸€ä¸ªArea2Dçš„[Shape2D]进入此Area2Dçš„[Shape2D]时触å‘。需è¦å°† [member "
+"monitoring] 设置为[code]true[/code]。\n"
+"[code]area_rid[/code] 由[Physics2DServer]使用的其他Area2D的"
"[CollisionObject2D]的[RID]。\n"
-"[code]area[/code] 傿•°æ˜¯å…¶ä»–Area2D。\n"
-"[code]area_shape[/code] 傿•°æ˜¯[Physics2DServer]使用的其他Area2Dçš„[Shape2D]çš„"
-"索引。\n"
-"[code]local_shape[/code]傿•°æ˜¯ ç”±[Physics2DServer]使用的这个Area2Dçš„[Shape2D]"
-"的索引。"
+"[code]area[/code] 其他Area2D。\n"
+"[code]area_shape_index[/code][Physics2DServer]使用的其他Area2D的[Shape2D]的索"
+"引。用[code]area.shape_owner_get_owner(area_shape_index)[/code]获得"
+"[CollisionShape2D]节点。\n"
+"[code]local_shape_index[/code]此Area2D的[Shape2D]的索引,由[Physics2DServer]"
+"使用。用[code]self.shape_owner_get_owner(local_shape_index)[/code]获å–"
+"[CollisionShape2D]节点。"
-#: doc/classes/Area2D.xml:120
-#, fuzzy
+#: doc/classes/Area2D.xml:122
msgid ""
"Emitted when one of another Area2D's [Shape2D]s exits one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -7950,17 +8016,19 @@ msgid ""
"used by the [Physics2DServer]. Get the [CollisionShape2D] node with "
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-"当å¦ä¸€ä¸ªArea2Dçš„[Shape2D]s离开这个Area2Dçš„[Shape2D]s之一时å‘å‡ºã€‚è¦æ±‚监控"
-"[member monitoring]被设置为[code]true[/code]。\n"
-"[code]area_id[/code] 傿•°æ˜¯ç”±[Physics2DServer]使用的其他Area2Dçš„"
+"当å¦ä¸€ä¸ªArea2Dçš„[Shape2D]退出这个Area2Dçš„[Shape2D]之一时触å‘ã€‚è¦æ±‚[member "
+"monitoring] 被设置为[code]true[/code]。\n"
+"[code]area_rid[/code] 由[Physics2DServer]使用的其他Area2D的"
"[CollisionObject2D]的[RID]。\n"
-"[code]area[/code] 傿•°æ˜¯å…¶ä»–Area2D。\n"
-"[code]area_shape[/code] 傿•°æ˜¯[Physics2DServer]使用的其他Area2Dçš„[Shape2D]çš„"
-"索引。\n"
-"[code]local_shape[/code] 傿•°æ˜¯ç”±[Physics2DServer]使用的这个Area2Dçš„[Shape2D]"
-"的索引。"
+"[code]area[/code] 其他Area2D。\n"
+"[code]area_shape_index[/code][Physics2DServer]使用的其他Area2D的[Shape2D]的索"
+"引。用[code]area.shape_owner_get_owner(area_shape_index)[/code]获å–"
+"[CollisionShape2D]节点。\n"
+"[code]local_shape_index[/code]这个Area2D的[Shape2D]的索引,由"
+"[Physics2DServer]使用。用[code]self.shape_owner_get_owner(local_shape_index)"
+"[/code]获得[CollisionShape2D]节点。"
-#: doc/classes/Area2D.xml:130
+#: doc/classes/Area2D.xml:132
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] enters this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -7974,7 +8042,7 @@ msgstr ""
"[code]body[/code]傿•°æ˜¯å…¶ä»–[PhysicsBody2D]或[TileMap]çš„[Node],如果它存在于树"
"中。"
-#: doc/classes/Area2D.xml:137
+#: doc/classes/Area2D.xml:139
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] exits this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -7988,8 +8056,7 @@ msgstr ""
"[code]body[/code] 傿•°æ˜¯å…¶ä»– [PhysicsBody2D] 或 [TileMap] çš„ [Node],如果它存"
"在于树中。"
-#: doc/classes/Area2D.xml:147
-#, fuzzy
+#: doc/classes/Area2D.xml:149
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s enters one "
"of this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -8007,20 +8074,21 @@ msgid ""
"used by the [Physics2DServer]. Get the [CollisionShape2D] node with "
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-"当[PhysicsBody2D]或[TileMap]çš„[Shape2D]之一进入此Area2Dçš„[Shape2D]之一时å‘"
-"出。需è¦å°†ç›‘控[member monitoring]设置为[code]true[/code]。如果[TileSet]有碰撞"
-"形状[Shape2D]s,就会检测到[TileMap]s。\n"
-"[code]body_id[/code]傿•°æ˜¯ [Physics2DServer]使用的[PhysicsBody2D]或[TileSet]"
-"的[CollisionObject2D]的RID。\n"
-"[code]body[/code]傿•°æ˜¯ [PhysicsBody2D]或[TileMap]çš„[节点],如果它在树上存在"
-"çš„è¯ã€‚\n"
-"[code]body_shape[/code] 傿•°æ˜¯[Physics2DServer]使用的[PhysicsBody2D]或"
-"[TileMap]的[Shape2D]的索引。\n"
-"[code]local_shape[/code] 傿•°æ˜¯[Physics2DServer]使用的这个Area2Dçš„[Shape2D]çš„"
-"索引。"
+"当[PhysicsBody2D]或[TileMap]的[Shape2D]之一进入此Area2D的[Shape2D]之一时触"
+"å‘。需è¦å°†[member monitoring]设置为[code]true[/code]。如果[TileSet]有"
+"Collision[Shape2D],就会检测到[TileMap]。\n"
+"[code]body_rid[/code] [Physics2DServer]使用的[PhysicsBody2D]或[TileSet]的"
+"[CollisionObject2D]的[RID]。\n"
+"[code]body[/code] [PhysicsBody2D]或[TileMap]的[Node],如果它在树上存在的"
+"è¯ã€‚\n"
+"[code]body_shape_index[/code] [Physics2DServer]使用的[PhysicsBody2D]或"
+"[TileMap]的[Shape2D]的索引。用[code]body."
+"shape_owner_get_owner(body_shape_index)[/code]获得[CollisionShape2D]节点。\n"
+"[code]local_shape_index[/code]此Area2D的[Shape2D]的索引,由[Physics2DServer]"
+"使用。用[code]self.shape_owner_get_owner(local_shape_index)[/code]获得"
+"[CollisionShape2D]节点。"
-#: doc/classes/Area2D.xml:160
-#, fuzzy
+#: doc/classes/Area2D.xml:162
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s exits one of "
"this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -8038,17 +8106,19 @@ msgid ""
"used by the [Physics2DServer]. Get the [CollisionShape2D] node with "
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-"当[PhysicsBody2D]或[TileMap]的一个[Shape2D]离开这个Area2D的一个[Shape2D]æ—¶å‘"
-"出的。需è¦å°†ç›‘控[member monitoring]设置为[code]true[/code]。如果[TileSet]有碰"
-"撞形状[Shape2D]s,就会检测到[TileMap]s。\n"
-"[code]body_id[/code] 傿•°æ˜¯[Physics2DServer]使用的[PhysicsBody2D]或[TileSet]"
-"的[CollisionObject2D]的RID。\n"
-"[code]body[/code]傿•°æ˜¯[PhysicsBody2D]或[TileMap]çš„[Node],如果它存在于树中的"
+"当[PhysicsBody2D]或[TileMap]的一个[Shape2D]退出这个Area2D的一个[Shape2D]æ—¶å‘"
+"出的。需è¦å°†[member monitoring]设置为[code]true[/code]。如果[TileSet]有碰撞"
+"[Shape2D],就会检测到[TileMap]。\n"
+"[code]body_rid[/code] 是[Physics2DServer]使用的[PhysicsBody2D]或[TileSet]的"
+"[CollisionObject2D]的[RID]。\n"
+"[code]body[/code] [PhysicsBody2D]或[TileMap]的[Node],如果它在树上存在的"
"è¯ã€‚\n"
-"[code]body_shape[/code] 傿•°æ˜¯[Physics2DServer]使用的[PhysicsBody2D]或"
-"[TileMap]的[Shape2D]的索引。\n"
-"[code]local_shape[/code] 傿•°æ˜¯[Physics2DServer]使用的这个Area2Dçš„[Shape2D]çš„"
-"索引。"
+"[code]body_shape_index[/code] [Physics2DServer]使用的[PhysicsBody2D]或"
+"[TileMap]的[Shape2D]的索引。用[code]body."
+"shape_owner_get_owner(body_shape_index)[/code]获å–[CollisionShape2D]节点。\n"
+"[code]local_shape_index[/code]此Area2D的[Shape2D]的索引,由[Physics2DServer]"
+"使用。用[code]self.shape_owner_get_owner(local_shape_index)[/code]获å–"
+"[CollisionShape2D]节点。"
#: doc/classes/Array.xml:4
msgid "A generic array datatype."
@@ -8373,6 +8443,9 @@ msgid ""
"[b]Note:[/b] Arrays with equal contents can still produce different hashes. "
"Only the exact same arrays will produce the same hashed integer value."
msgstr ""
+"返回这个数组的整数哈希值\n"
+"[b]注æ„:[/b] 仅仅内容相åŒçš„æ•°ç»„会产生ä¸åŒçš„哈希值, å¿…é¡»è¦å®Œå…¨ä¸€è‡´çš„æ•°ç»„æ‰ä¼šäº§"
+"生相åŒçš„哈希值."
#: doc/classes/Array.xml:232
msgid ""
@@ -8383,6 +8456,11 @@ msgid ""
"element is close to the beginning of the array (index 0). This is because "
"all elements placed after the newly inserted element have to be reindexed."
msgstr ""
+"在给定的数组ä½ç½®æ’入一个新值. ä½ç½®å¿…é¡»åˆæ³•, 或者在数组末尾([code]pos == "
+"size()[/code]).\n"
+"[b]注æ„:[/b] 这个数组没有返回值.\n"
+"[b]注æ„:[/b] 在较大的数组中, 如果æ’入值的ä½ç½®åœ¨æ•°ç»„åå‰çš„ä½ç½®, 这个方法的è¿è¡Œ"
+"速度会比较慢, 因为在æ’入值åŽé¢æ‰€æœ‰çš„元素都è¦è¢«é‡æ–°ç´¢å¼•."
#: doc/classes/Array.xml:239 doc/classes/PoolByteArray.xml:96
#: doc/classes/PoolColorArray.xml:48 doc/classes/PoolIntArray.xml:49
@@ -8421,14 +8499,22 @@ msgid ""
"removed element. The larger the array and the lower the index of the removed "
"element, the slower [method pop_at] will be."
msgstr ""
+"移除并返回索引[code]position[/code]处的数组元素。如果是负数,[code]position[/"
+"code]被认为是相对于数组的末端。如果数组是空的或者被越界访问,则ä¿ç•™æ•°ç»„ä¸åŠ¨ï¼Œ"
+"并返回[code]null[/code]。当数组被越界访问时,会打å°å‡ºä¸€æ¡é”™è¯¯ä¿¡æ¯ï¼Œä½†å½“数组为"
+"空时,则ä¸ä¼šã€‚\n"
+"[b]注æ„:[/b] 在大的数组上,这个方法å¯èƒ½æ¯”[method pop_back]æ…¢ï¼Œå› ä¸ºå®ƒå°†é‡æ–°ç´¢"
+"引ä½äºŽè¢«ç§»é™¤å…ƒç´ ä¹‹åŽçš„æ•°ç»„元素。数组越大,被移除元素的索引越低,[method "
+"pop_at]的速度就越慢。"
#: doc/classes/Array.xml:265
-#, fuzzy
msgid ""
"Removes and returns the last element of the array. Returns [code]null[/code] "
"if the array is empty, without printing an error message. See also [method "
"pop_front]."
-msgstr "删除并返回数组中的末尾元素。数组为空时,返回 [code]null[/code]。"
+msgstr ""
+"删除并返回数组中的末尾元素。数组为空时,返回 [code]null[/code]。å¦è¯·å‚阅 "
+"[method pop_front]。"
#: doc/classes/Array.xml:271
msgid ""
@@ -8439,12 +8525,16 @@ msgid ""
"pop_back] as it will reindex all the array's elements every time it's "
"called. The larger the array, the slower [method pop_front] will be."
msgstr ""
+"移除并返回数组的第一个元素。如果数组是空的,将ä¸ä¼šè¾“出任何错误信æ¯å¹¶è¿”回"
+"[code]null[/code]。å¦è¯·å‚阅 [method pop_back]。\n"
+"[b]注æ„:[/b] 当数组元素很多时,由于 [method pop_front] æ¯æ¬¡è°ƒç”¨æ—¶éƒ½è¦é‡æ–°å¯»"
+"找数组所有元素的索引,所以会比 [method pop_back] 慢很多。数组 越大,[method "
+"pop_front] 越慢。"
#: doc/classes/Array.xml:278
-#, fuzzy
msgid ""
"Appends an element at the end of the array. See also [method push_front]."
-msgstr "呿•°ç»„末尾追加一个元素([method push_back] 的别å)。"
+msgstr "在数组的末端添加一个元素。å‚阅[method push_front]。"
#: doc/classes/Array.xml:284
msgid ""
@@ -8453,6 +8543,9 @@ msgid ""
"push_back] as it will reindex all the array's elements every time it's "
"called. The larger the array, the slower [method push_front] will be."
msgstr ""
+"在数组的开头添加一个元素。å‚阅[method push_back]。\n"
+"[b]注æ„:[/b] 在大数组中,这个方法比[method push_back]æ…¢å¾—å¤šï¼Œå› ä¸ºæ¯æ¬¡è°ƒç”¨å®ƒéƒ½"
+"ä¼šé‡æ–°ç´¢å¼•所有数组的元素。数组越大,[method push_front]的速度就越慢。"
#: doc/classes/Array.xml:291
msgid ""
@@ -8464,6 +8557,11 @@ msgid ""
"element is close to the beginning of the array (index 0). This is because "
"all elements placed after the removed element have to be reindexed."
msgstr ""
+"按索引从数组中移除一个元素。如果索引在数组中ä¸å­˜åœ¨ï¼Œåˆ™ä»€ä¹ˆä¹Ÿä¸ä¼šå‘生。è¦é€šè¿‡"
+"æœç´¢ä¸€ä¸ªå…ƒç´ çš„值æ¥ç§»é™¤å®ƒï¼Œè¯·ä½¿ç”¨[method erase]æ¥ä»£æ›¿ã€‚\n"
+"[b]注æ„:[/b] 这个方法是就地æ“作,ä¸è¿”回值。\n"
+"[b]注æ„:[/b] 在大数组中,如果被删除的元素é è¿‘数组的开头(索引0),这个方法会"
+"比较慢。这是因为所有放置在被移除元素之åŽçš„元素都è¦è¢«é‡æ–°ç´¢å¼•。"
#: doc/classes/Array.xml:299
msgid ""
@@ -8531,7 +8629,6 @@ msgstr ""
"[/codeblock]"
#: doc/classes/Array.xml:346
-#, fuzzy
msgid ""
"Sorts the array using a custom method. The arguments are an object that "
"holds the method and the name of such method. The custom method receives two "
@@ -8555,21 +8652,23 @@ msgid ""
"print(my_items) # Prints [[4, Tomato], [5, Potato], [9, Rice]].\n"
"[/codeblock]"
msgstr ""
-"使用自定义方法对数组进行排åºã€‚傿•°æ˜¯ä¸€ä¸ªæŒæœ‰æ–¹æ³•的对象和方法的å称。自定义方"
-"æ³•æŽ¥æ”¶ä¸¤ä¸ªå‚æ•°ï¼ˆæ•°ç»„中的一对元素),必须返回[code]true[/code]or[code]false[/"
-"code]。\n"
-"[b]注æ„:[/b]您ä¸èƒ½éšæœºåŒ–è¿”å›žå€¼ï¼Œå› ä¸ºå †æ ˆç®—æ³•å¸Œæœ›å¾—åˆ°ç¡®å®šçš„ç»“æžœã€‚è¿™æ ·åšä¼šå¯¼è‡´"
-"æ„外的行为。\n"
-"(codeblock)\n"
+"使用一个自定义的方法对数组进行排åºã€‚傿•°æ˜¯ä¸€ä¸ªæŒæœ‰è¯¥æ–¹æ³•的对象和该方法的å"
+"ç§°ã€‚è‡ªå®šä¹‰æ–¹æ³•æŽ¥æ”¶ä¸¤ä¸ªå‚æ•°ï¼ˆä¸€å¯¹æ¥è‡ªæ•°ç»„的元素),并且必须返回[code]true[/"
+"code]或者[code]false[/code]。\n"
+"对于两个元素[code]a[/code]和[code]b[/code],如果给定的方法返回[code]true[/"
+"code],元素[code]b[/code]将在数组中元素[code]a[/code]之åŽã€‚\n"
+"[b]注æ„:[/b] ä½ ä¸èƒ½éšæœºåŒ–è¿”å›žå€¼ï¼Œå› ä¸ºå †æŽ’åºç®—法期望一个确定的结果。而这样åšä¼š"
+"导致æ„外的行为。\n"
+"[codeblock]\n"
"class MyCustomSorter:\n"
-"static func sort_ascending(a, b):\n"
-"if a[0] < b[0]:\n"
-"return true\n"
-"return false\n"
+" static func sort_ascending(a, b):\n"
+" if a[0] < b[0]:\n"
+" return true\n"
+" return false\n"
"\n"
-"var my_items = [[5, \"Potato\"], [9, \"Rice\"], [4, \"Tomato\"]] 。\n"
+"var my_items = [[5, \"Potato\"], [9, \"Rice\"], [4, \"Tomato\"]]\n"
"my_items.sort_custom(MyCustomSorter, \"sort_ascending\")\n"
-"print(my_items) #Prints[[4, Tomato], [5, Potato], [9, Rice]]。\n"
+"print(my_items) # Prints [[4, Tomato], [5, Potato], [9, Rice]].\n"
"[/codeblock]"
#: doc/classes/ArrayMesh.xml:4
@@ -8578,7 +8677,6 @@ msgid ""
msgstr "[Mesh] 网格类型,æä¾›äº†ç”¨äºŽä»Žæ•°ç»„构造表é¢çš„工具。"
#: doc/classes/ArrayMesh.xml:7
-#, fuzzy
msgid ""
"The [ArrayMesh] is used to construct a [Mesh] by specifying the attributes "
"as arrays.\n"
@@ -8605,36 +8703,35 @@ msgid ""
"OpenGL/Face-culling]winding order[/url] for front faces of triangle "
"primitive modes."
msgstr ""
-"[ArrayMesh]ç”¨äºŽé€šè¿‡å°†å±žæ€§æŒ‡å®šä¸ºæ•°ç»„æ¥æž„造[Mesh](网格)。\n"
-"æœ€åŸºæœ¬çš„ä¾‹å­æ˜¯åˆ›å»ºä¸€ä¸ªå•一的三角形。\n"
+"[ArrayMesh]æ˜¯ç”¨æ¥æž„造一个[Mesh]的,其属性指定为数组。\n"
+"æœ€åŸºæœ¬çš„ä¾‹å­æ˜¯åˆ›å»ºå•个三角形:\n"
"[codeblock]\n"
-"var vertices = PackedVector3Array()\n"
+"var vertices = PoolVector3Array()\n"
"vertices.push_back(Vector3(0, 1, 0))\n"
"vertices.push_back(Vector3(1, 0, 0))\n"
"vertices.push_back(Vector3(0, 0, 1))\n"
-"# Initialize ArrayMesh。\n"
+"# Initialize the ArrayMesh.\n"
"var arr_mesh = ArrayMesh.new()\n"
"var arrays = []\n"
"arrays.resize(ArrayMesh.ARRAY_MAX)\n"
-"arrays[ArrayMesh.ARRAY_VERTEX] = vertices。\n"
-"# Create Mesh。\n"
+"arrays[ArrayMesh.ARRAY_VERTEX] = vertices\n"
+"# Create the Mesh.\n"
"arr_mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, arrays)\n"
-"var m = MeshInstance3D.new()\n"
+"var m = MeshInstance.new()\n"
"m.mesh = arr_mesh\n"
"[/codeblock]\n"
-"[MeshInstance3D]已准备好添加到[SceneTree]中显示。\n"
-"程åºåŒ–几何体的生æˆè¿˜å¯ä»¥å‚考[ImmediateGeometry3D]ã€[MeshDataTool]å’Œ"
-"[SurfaceTool]。\n"
-"[b]Note:[/b]Godot对三角形基元模å¼çš„å‰è„¸ä½¿ç”¨é¡ºæ—¶é’ˆ[url=https://learnopengl."
-"com/Advanced-OpenGL/Face-culling]winding order[/url]。"
+"这个[MeshInstance]å·²ç»å‡†å¤‡å°±ç»ªï¼Œä»¥æ·»åŠ åˆ°è¦æ˜¾ç¤ºçš„[SceneTree]中。\n"
+"å‚阅[ImmediateGeometry]ã€[MeshDataTool]å’Œ[SurfaceTool]çš„ç¨‹åºæ€§å‡ ä½•体生æˆã€‚\n"
+"[b]注æ„:[/b] Godot对三角形基本网格模å¼çš„æ­£é¢ä½¿ç”¨é¡ºæ—¶é’ˆ[url=https://"
+"learnopengl.com/Advanced-OpenGL/Face-culling]环绕顺åº[/url]。"
#: doc/classes/ArrayMesh.xml:29
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/content/procedural_geometry/"
"arraymesh.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/content/procedural_geometry/"
-"arraymesh.html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/content/"
+"procedural_geometry/arraymesh.html"
#: doc/classes/ArrayMesh.xml:36
msgid ""
@@ -8645,7 +8742,6 @@ msgstr ""
"加曲é¢ä¹‹å‰è°ƒç”¨ã€‚"
#: doc/classes/ArrayMesh.xml:46
-#, fuzzy
msgid ""
"Creates a new surface.\n"
"Surfaces are created to be rendered using a [code]primitive[/code], which "
@@ -8662,18 +8758,16 @@ msgid ""
"length as the vertex array or be empty, except for [constant ARRAY_INDEX] if "
"it is used."
msgstr ""
-"创建一个新曲é¢ã€‚\n"
-"创建表é¢ä»¥ä½¿ç”¨[code] primitive [/code]进行渲染,该基元å¯ä»¥æ˜¯[enum Mesh."
-"PrimitiveType]中定义的任何类型。 (请注æ„,使用索引时,建议仅使用点,线或三角"
-"形。)[method.Mesh.get_surface_count]å°†æˆä¸ºæ­¤æ–°æ›²é¢çš„[code] surf_idx [/"
+"创建一个新的é¢ã€‚\n"
+"åˆ›å»ºé¢æ˜¯ä¸ºäº†ä½¿ç”¨ [code]primitive[/code] 进行渲染,å¯ä»¥æ˜¯ [enum Mesh."
+"PrimitiveType] 中定义的任何类型。(注æ„,当使用索引时,建议åªä½¿ç”¨ç‚¹ã€çº¿æˆ–三角"
+"å½¢)。[method Mesh.get_surface_count] 值将æˆä¸ºè¿™ä¸ªæ–°é¢çš„ [code]surface_idx[/"
"code]。\n"
-"[code] arrays [/code]傿•°æ˜¯ä¸€ä¸ªæ•°ç»„数组。有关此数组中使用的值,请å‚阅[enum "
-"ArrayType]。例如,[code] arrays [0] [/code]是顶点的数组。始终需è¦ç¬¬ä¸€ä¸ªé¡¶ç‚¹å­"
-"数组;其他是å¯é€‰çš„。添加索引数组会使此函数进入“索引模å¼â€ï¼Œåœ¨è¯¥æ¨¡å¼ä¸‹ï¼Œé¡¶ç‚¹å’Œ"
-"其他数组æˆä¸ºæ•°æ®æºï¼Œè€Œç´¢å¼•数组定义了顶点顺åºã€‚æ‰€æœ‰å­æ•°ç»„的长度必须与顶点数组"
-"相åŒï¼Œæˆ–者为空,除éžä½¿ç”¨äº†[constant ARRAY_INDEX]。\n"
-"添加索引数组会使此函数进入“索引模å¼â€ï¼Œå…¶ä¸­é¡¶ç‚¹å’Œå…¶ä»–数组æˆä¸ºæ•°æ®æºï¼Œå¹¶ä¸”索引"
-"数组定义了顶点的顺åºã€‚"
+"[code]arrays[/code] 傿•°æ˜¯æ•°ç»„阵列。关于这个数组中使用的值,å‚阅 [enum "
+"ArrayType]。例如,[code]arrays[0][/code] 是顶点的数组。总是需è¦ç¬¬ä¸€ä¸ªé¡¶ç‚¹å­æ•°"
+"组,其他的å¯é€‰ã€‚添加一个索引数组使这个函数进入 \"索引模å¼\",顶点和其他数组作"
+"ä¸ºæ•°æ®æ¥æºï¼Œç´¢å¼•数组定义其顶点顺åºã€‚æ‰€æœ‰çš„å­æ•°ç»„必须与顶点数组具有相åŒçš„é•¿"
+"度,或者为空,如果使用了 [constant ARRAY_INDEX] 时除外。"
#: doc/classes/ArrayMesh.xml:54
msgid "Removes all blend shapes from this [ArrayMesh]."
@@ -8741,13 +8835,12 @@ msgid ""
msgstr "返回所请求曲é¢çš„基本类型(请å‚阅[method add_surface_from_arrays])。"
#: doc/classes/ArrayMesh.xml:143
-#, fuzzy
msgid ""
"Removes a surface at position [code]surf_idx[/code], shifting greater "
"surfaces one [code]surf_idx[/code] slot down."
msgstr ""
-"将索引 [code]effect_idx[/code] 的效果从索引 [code]bus_idx[/code] 的总线上删"
-"除。"
+"移除ä½ç½®[code]surf_idx[/code]的一个é¢ï¼Œå°†è¾ƒå¤§çš„é¢å‘下移动一个[code]surf_idx[/"
+"code]槽。"
#: doc/classes/ArrayMesh.xml:151
msgid "Sets a name for a given surface."
@@ -8785,23 +8878,21 @@ msgid "Amount of weights/bone indices per vertex (always 4)."
msgstr "æ¯ä¸ªé¡¶ç‚¹çš„æƒé‡/骨指数é‡ï¼ˆå§‹ç»ˆä¸º 4)。"
#: doc/classes/ArrayMesh.xml:181
-#, fuzzy
msgid "[PoolVector3Array], [PoolVector2Array], or [Array] of vertex positions."
-msgstr "顶点ä½ç½®çš„[PackedVector3Array]ã€[PackedVector2Array]或[Array]。"
+msgstr "[PoolVector3Array], [PoolVector2Array], 或[Array]的顶点ä½ç½®ã€‚"
#: doc/classes/ArrayMesh.xml:184
msgid "[PoolVector3Array] of vertex normals."
msgstr "[PoolVector3Array] 顶点法线。"
#: doc/classes/ArrayMesh.xml:187
-#, fuzzy
msgid ""
"[PoolRealArray] of vertex tangents. Each element in groups of 4 floats, "
"first 3 floats determine the tangent, and the last the binormal direction as "
"-1 or 1."
msgstr ""
-"顶点切线的[PackedFloat32Array]。æ¯ç»„元素由4个浮点组æˆï¼Œå‰3个浮点确定切线,最"
-"åŽä¸€ä¸ªåŒæ³•线方å‘为-1或1。"
+"顶点切线的[PoolRealArray]。æ¯ä¸ªå…ƒç´ ä»¥4个浮点数为一组,å‰3个浮点数决定切线,最"
+"åŽä¸€ä¸ªæ˜¯-1或1çš„åŒæ³•线方å‘。"
#: doc/classes/ArrayMesh.xml:190
msgid "[PoolColorArray] of vertex colors."
@@ -8812,26 +8903,20 @@ msgid "[PoolVector2Array] for UV coordinates."
msgstr "[PoolVector2Array] 用于UVåæ ‡ã€‚"
#: doc/classes/ArrayMesh.xml:196
-#, fuzzy
msgid "[PoolVector2Array] for second UV coordinates."
-msgstr "第二个UVåæ ‡çš„[PackedVector2Array]。"
+msgstr "[PoolVector2Array]用于第二UVåæ ‡ã€‚"
#: doc/classes/ArrayMesh.xml:199
-#, fuzzy
msgid ""
"[PoolRealArray] or [PoolIntArray] of bone indices. Each element in groups of "
"4 floats."
-msgstr ""
-"骨骼索引的[PackedFloat32Array]或[PackedInt32Array]。æ¯ä¸ªå…ƒç´ ä»¥4个浮点数为一"
-"组。"
+msgstr "[PoolRealArray]或[PoolIntArray]的骨骼索引。æ¯ä¸ªå…ƒç´ ä»¥4个浮点数为一组。"
#: doc/classes/ArrayMesh.xml:202
-#, fuzzy
msgid "[PoolRealArray] of bone weights. Each element in groups of 4 floats."
-msgstr "骨骼é‡é‡çš„[PackedFloat32Array]。æ¯ä¸ªå…ƒç´ ä»¥4个浮点数为一组。"
+msgstr "骨骼æƒé‡çš„[PoolRealArray]。æ¯ä¸ªå…ƒç´ ä»¥4个浮点数为一组。"
#: doc/classes/ArrayMesh.xml:205
-#, fuzzy
msgid ""
"[PoolIntArray] of integers used as indices referencing vertices, colors, "
"normals, tangents, and textures. All of those arrays must have the same "
@@ -8844,12 +8929,12 @@ msgid ""
"vertices of each triangle. For lines, the index array is in pairs indicating "
"the start and end of each line."
msgstr ""
-"æ•´æ•°[PackedInt32Array]用作引用顶点,颜色,法线,切线和纹ç†çš„索引。所有这些数"
-"ç»„å¿…é¡»å…·æœ‰ä¸Žé¡¶ç‚¹æ•°ç»„ç›¸åŒæ•°é‡çš„元素。索引ä¸èƒ½è¶…出顶点数组的大å°ã€‚当存在此索引"
-"数组时,它将函数置于“索引模å¼â€ï¼Œå…¶ä¸­ç´¢å¼•选择第* i *个顶点,法线,切线,颜色,"
-"UV等。这æ„å‘³ç€æ˜¯å¦è¦å…·æœ‰ä¸åŒçš„æ³•线或颜色沿ç€è¾¹ç¼˜ï¼Œæ‚¨å¿…é¡»å¤åˆ¶é¡¶ç‚¹ã€‚\n"
-"对于三角形,索引数组被解释为三元组,指的是æ¯ä¸ªä¸‰è§’形的顶点。对于行,索引数组"
-"是æˆå¯¹çš„,指示æ¯è¡Œçš„开始和结æŸã€‚"
+"[PoolIntArray]整数数组,用作引用顶点ã€é¢œè‰²ã€æ³•线ã€åˆ‡çº¿å’Œçº¹ç†çš„索引。所有这些"
+"数组必须具有与顶点数组相åŒçš„元素数é‡ã€‚任何索引都ä¸èƒ½è¶…过顶点数组的大å°ã€‚当这"
+"个索引数组出现时,它使函数进入 \"索引模å¼\",其中索引选择*i*çš„é¡¶ç‚¹ã€æ³•线ã€åˆ‡"
+"线ã€é¢œè‰²ã€UV等。这æ„味ç€å¦‚果你想沿ç€ä¸€æ¡è¾¹æœ‰ä¸åŒçš„æ³•线或颜色,需拷è´é¡¶ç‚¹ã€‚\n"
+"对于三角形,索引数组被解释为三元组,指的是æ¯ä¸ªä¸‰è§’形的顶点。对于线,索引数组"
+"是æˆå¯¹çš„ï¼Œè¡¨ç¤ºæ¯æ¡çº¿çš„起点和终点。"
#: doc/classes/ArrayMesh.xml:209 doc/classes/Mesh.xml:225
#: doc/classes/VisualServer.xml:3270
@@ -8897,7 +8982,6 @@ msgid "An anchor point in AR space."
msgstr "AR空间中的锚点。"
#: doc/classes/ARVRAnchor.xml:7
-#, fuzzy
msgid ""
"The [ARVRAnchor] point is a spatial node that maps a real world location "
"identified by the AR platform to a position within the game world. For "
@@ -8913,14 +8997,14 @@ msgid ""
"more about the real world out there especially if only part of the surface "
"is in view."
msgstr ""
-"[XRAnchor3D]点是空间节点,它将ARå¹³å°è¯†åˆ«çš„现实世界的ä½ç½®æ˜ å°„到游æˆä¸–界中的一"
-"个ä½ç½®ã€‚例如,åªè¦ARKitä¸­çš„å¹³é¢æ£€æµ‹å¼€å¯ï¼ŒARKit就会识别并更新平é¢çš„ä½ç½®ï¼Œå¦‚桌"
-"å­ã€åœ°æ¿ç­‰ï¼Œå¹¶ä¸ºå…¶åˆ›å»ºé”šç‚¹ã€‚\n"
-"这个节点通过其独特的ID被映射到其中一个锚点。当你收到一个新的锚点å¯ç”¨çš„ä¿¡å·"
-"时,你应该为该锚点在你的场景中添加这个节点。你å¯ä»¥é¢„先定义节点并设置ID;节点"
-"将简å•åœ°ä¿æŒåœ¨0,0,0上,直到一个平é¢è¢«è¯†åˆ«ã€‚\n"
-"请记ä½ï¼Œåªè¦å¯ç”¨äº†å¹³é¢æ£€æµ‹ï¼Œé”šçš„大å°ã€æ”¾ç½®å’Œæ–¹å‘就会éšç€æ£€æµ‹é€»è¾‘了解更多关于"
-"现实世界的信æ¯è€Œæ›´æ–°ï¼Œå°¤å…¶æ˜¯åœ¨åªæœ‰éƒ¨åˆ†è¡¨é¢å¯è§çš„æƒ…况下。"
+"[ARVRAnchor]点是空间节点,它将ARå¹³å°è¯†åˆ«çš„现实世界的ä½ç½®æ˜ å°„到游æˆä¸–界中相应"
+"ä½ç½®ã€‚例如,åªè¦ARKitä¸­çš„å¹³é¢æ£€æµ‹å¼€å¯ï¼ŒARKit就会识别并更新平é¢ï¼ˆæ¡Œå­ã€åœ°æ¿"
+"等)的ä½ç½®ï¼Œå¹¶ä¸ºå…¶åˆ›å»ºé”šç‚¹ã€‚\n"
+"此节点通过其特有ID映射到其中一个锚点。当你收到一个新锚点å¯ç”¨çš„ä¿¡å·æ—¶ï¼Œåœ¨ä½ çš„"
+"场景中,应该为该锚点添加这个节点。你å¯ä»¥é¢„先定义节点并设置ID;节点将简å•地ä¿"
+"æŒåœ¨0,0,0,直到一个平é¢è¢«è¯†åˆ«ã€‚\n"
+"请记ä½ï¼Œåªè¦å¯ç”¨äº†å¹³é¢æ£€æµ‹ï¼Œé”šçš„大å°ã€ä½ç½®å’Œæ–¹å‘就会éšç€æ£€æµ‹é€»è¾‘对外é¢çœŸå®žä¸–"
+"界的信æ¯è€Œæ›´æ–°ï¼Œç‰¹åˆ«æ˜¯åœ¨åªæœ‰éƒ¨åˆ†è¡¨é¢åœ¨è§†é‡Žä¸­çš„æƒ…况下。"
#: doc/classes/ARVRAnchor.xml:17
msgid "Returns the name given to this anchor."
@@ -8935,7 +9019,6 @@ msgstr ""
"点,则返回 [code]false[/code]。"
#: doc/classes/ARVRAnchor.xml:29
-#, fuzzy
msgid ""
"If provided by the [ARVRInterface], this returns a mesh object for the "
"anchor. For an anchor, this can be a shape related to the object being "
@@ -8943,9 +9026,9 @@ msgid ""
"can be used to create shadows/reflections on surfaces or for generating "
"collision shapes."
msgstr ""
-"如果由[XRInterface]æä¾›ï¼Œè¿™å°†è¿”回锚点的网格对象。对于锚点æ¥è¯´ï¼Œè¿™å¯ä»¥æ˜¯ä¸€ä¸ªä¸Ž"
-"被追踪物体有关的形状,也å¯ä»¥æ˜¯ä¸€ä¸ªæä¾›ä¸Žé”šç‚¹æœ‰å…³çš„æ‹“扑结构的网格,å¯ä»¥ç”¨æ¥åœ¨"
-"表é¢ä¸Šåˆ›å»ºé˜´å½±åŠå射,或者用于生æˆç¢°æ’žå½¢çŠ¶ã€‚"
+"如果由[ARVRInterface]æä¾›ï¼Œè¿™å°†è¿”回一个锚的网格对象。对于一个锚,这å¯ä»¥æ˜¯ä¸€ä¸ª"
+"与被追踪物体相关的形状,也å¯ä»¥æ˜¯ä¸€ä¸ªæä¾›ä¸Žé”šç›¸å…³çš„æ‹“扑的网格,å¯ä»¥ç”¨äºŽåœ¨è¡¨é¢"
+"上创建阴影/å射,或者用于生æˆç¢°æ’žå½¢çŠ¶ã€‚"
#: doc/classes/ARVRAnchor.xml:35
msgid ""
@@ -8991,7 +9074,6 @@ msgid ""
msgstr "应用了一些 AR/VR 规则的相机节点,例如ä½ç½®è·Ÿè¸ªã€‚"
#: doc/classes/ARVRCamera.xml:7
-#, fuzzy
msgid ""
"This is a helper spatial node for our camera; note that, if stereoscopic "
"rendering is applicable (VR-HMD), most of the camera properties are ignored, "
@@ -9004,24 +9086,23 @@ msgid ""
"tracking data of the HMD and the location of the ARVRCamera can lag a few "
"milliseconds behind what is used for rendering as a result."
msgstr ""
-"这是用于相机的辅助空间节点;注æ„,如果是应用于立体渲染(VR-HMD),大部分的相"
-"机属性会被忽略,因为HMDä¿¡æ¯ä¼šé‡å†™å®ƒä»¬ã€‚唯一å¯ä»¥ä¿è¯çš„属性是近平é¢å’Œè¿œå¹³é¢ã€‚\n"
-"这个节点的ä½ç½®å’Œæ–¹å‘ç”±XRæœåŠ¡å™¨è‡ªåŠ¨æ›´æ–°ï¼Œä»¥è¡¨ç¤ºHMDçš„ä½ç½®ï¼Œå¦‚果这ç§è·Ÿè¸ªæ˜¯å¯ç”¨"
-"的,则å¯åœ¨æ¸¸æˆé€»è¾‘使用。请注æ„,与XR控制器相å,渲染线程å¯ä»¥è®¿é—®HMD的最新跟踪"
-"æ•°æ®ï¼Œå› æ­¤XRCamera3Dçš„ä½ç½®å¯èƒ½æ¯”用于渲染的ä½ç½®æ»žåŽå‡ æ¯«ç§’。"
+"这是用于我们相机辅助的空间节点;请注æ„,如果适用立体渲染 (VR-HMD),大多数相机"
+"属性将被忽略,因为 HMD ä¿¡æ¯ä¼šè¦†ç›–它们。唯一å¯ä»¥ä¿¡ä»»çš„属性是近平é¢å’Œè¿œå¹³é¢ã€‚\n"
+"该节点的ä½ç½®å’Œæ–¹å‘ç”± ARVR æœåŠ¡è‡ªåŠ¨æ›´æ–°ï¼Œä»¥åæ˜  HMD çš„ä½ç½®ï¼ˆå¦‚果这类跟踪å¯ç”¨ï¼Œ"
+"å¹¶å¯è¢«æ¸¸æˆé€»è¾‘使用)。请注æ„,与 ARVR 控制器相比,渲染线程å¯ä»¥èŽ·å– HMD 的最新"
+"跟踪数æ®ï¼Œä»Žè€Œ ARVRCamera çš„ä½ç½®å¯èƒ½ä¼šæ»žåŽäºŽå¯¹äºŽæ¸²æŸ“çš„ä½ç½®å‡ æ¯«ç§’。"
#: doc/classes/ARVRCamera.xml:11 doc/classes/ARVRController.xml:12
#: doc/classes/ARVRInterface.xml:11 doc/classes/ARVROrigin.xml:13
#: doc/classes/ARVRPositionalTracker.xml:12 doc/classes/ARVRServer.xml:10
msgid "https://docs.godotengine.org/en/3.4/tutorials/vr/index.html"
-msgstr "https://docs.godotengine.org/en/3.4/tutorials/vr/index.html"
+msgstr "https://docs.godotengine.org/zh_CN/stable/tutorials/vr/index.html"
#: doc/classes/ARVRController.xml:4
msgid "A spatial node representing a spatially-tracked controller."
msgstr "表示空间跟踪控制器的空间节点。"
#: doc/classes/ARVRController.xml:7
-#, fuzzy
msgid ""
"This is a helper spatial node that is linked to the tracking of controllers. "
"It also offers several handy passthroughs to the state of buttons and such "
@@ -9036,14 +9117,14 @@ msgid ""
"[ARVRServer]. This makes this node ideal to add child nodes to visualize the "
"controller."
msgstr ""
-"è¿™æ˜¯ä¸€ä¸ªä¸ŽæŽ§åˆ¶å™¨çš„è·Ÿè¸ªæœ‰å…³çš„è¾…åŠ©ç©ºé—´èŠ‚ç‚¹ã€‚å®ƒè¿˜ä¸ºæŽ§åˆ¶å™¨ä¸Šçš„æŒ‰é’®ç­‰çŠ¶æ€æä¾›äº†å‡ "
-"个方便的通é“。\n"
-"控制器是通过他们的ID链接的。你å¯ä»¥åœ¨æŽ§åˆ¶å™¨å¯ç”¨ä¹‹å‰åˆ›å»ºæŽ§åˆ¶å™¨èŠ‚ç‚¹ã€‚å¦‚æžœä½ çš„æ¸¸"
-"æˆæ€»æ˜¯ä½¿ç”¨ä¸¤ä¸ªæŽ§åˆ¶å™¨ï¼Œå³æ¯åªæ‰‹ä¸€ä¸ªï¼Œä½ å¯ä»¥ç”¨ID1å’Œ2预先定义控制器;一旦控制器"
-"被识别,它们就会被激活。如果你计划使用é¢å¤–的控制器,则应该对信å·åšå‡ºå“应,并"
-"在你的场景中添加XRController3D节点。\n"
-"控制器节点的ä½ç½®ä¼šç”±[XRServer]自动更新。这使得该节点éžå¸¸é€‚åˆæ·»åŠ å­èŠ‚ç‚¹ä»¥å®žçŽ°"
-"å¯è§†åŒ–控制器。"
+"è¿™æ˜¯é“¾æŽ¥åˆ°æŽ§åˆ¶å™¨è·Ÿè¸ªçš„è¾…åŠ©ç©ºé—´èŠ‚ç‚¹ã€‚å®ƒè¿˜ä¸ºæŽ§åˆ¶å™¨ä¸Šçš„æŒ‰é’®ç­‰çŠ¶æ€æä¾›äº†å‡ ä¸ªä¾¿æ·"
+"的通é“。\n"
+"控制器通过它们的 ID 链接。你å¯ä»¥åœ¨æŽ§åˆ¶å™¨å¯ç”¨ä¹‹å‰åˆ›å»ºæŽ§åˆ¶å™¨èŠ‚ç‚¹ã€‚å¦‚æžœä½ çš„æ¸¸æˆ"
+"æ€»æ˜¯ä½¿ç”¨ä¸¤ä¸ªæŽ§åˆ¶å™¨ï¼Œå³æ¯åªæ‰‹ä¸€ä¸ªï¼Œä½ å¯ä»¥é¢„先定义 ID 为 1 å’Œ 2 的控制器;一旦"
+"确定了控制器,它们就会被激活。如果你希望使用é¢å¤–的控制器,应该对信å·åР以处"
+"ç†ï¼Œå¹¶å°† ARVRController 节点添加到您场景中。\n"
+"控制器节点的ä½ç½®ç”± [ARVRServer] 自动更新。这使得该节点éžå¸¸é€‚åˆæ·»åŠ å­èŠ‚ç‚¹ä»¥å®ž"
+"现å¯è§†åŒ–控制器。"
#: doc/classes/ARVRController.xml:18
msgid ""
@@ -9052,22 +9133,20 @@ msgid ""
msgstr "如果激活,如果由使用的AR/VR SDKæä¾›ï¼Œåˆ™è¿”回相关控制器的å称。"
#: doc/classes/ARVRController.xml:24
-#, fuzzy
msgid ""
"Returns the hand holding this controller, if known. See [enum "
"ARVRPositionalTracker.TrackerHand]."
msgstr ""
-"è¿”å›žæŒæœ‰æ­¤æŽ§åˆ¶å™¨çš„æ‰‹ï¼Œåœ¨çŸ¥é“的情况下。å‚阅[enum XRPositionalTracker."
+"è¿”å›žæŒæœ‰æ­¤æŽ§åˆ¶å™¨çš„æ‰‹ï¼Œå¦‚果知é“çš„è¯ã€‚å‚阅[enum ARVRPositionalTracker."
"TrackerHand]。"
#: doc/classes/ARVRController.xml:30
-#, fuzzy
msgid ""
"Returns [code]true[/code] if the bound controller is active. ARVR systems "
"attempt to track active controllers."
msgstr ""
-"如果绑定的控制器处于激活状æ€ï¼Œè¿”回[code]true[/code]。XR系统å°è¯•跟踪激活的控制"
-"器。"
+"如果绑定的控制器处于活动状æ€ï¼Œè¿”回[code]true[/code]。ARVR系统å°è¯•跟踪活动的控"
+"制器。"
#: doc/classes/ARVRController.xml:37
msgid ""
@@ -9076,7 +9155,6 @@ msgid ""
msgstr "为嵌入到控制器中的触å‘器ã€è§¦æ‘¸æ¿ç­‰è¿”回给定轴的值。"
#: doc/classes/ARVRController.xml:43
-#, fuzzy
msgid ""
"Returns the ID of the joystick object bound to this. Every controller "
"tracked by the [ARVRServer] that has buttons and axis will also be "
@@ -9085,31 +9163,28 @@ msgid ""
"the AR/VR controllers. This ID is purely offered as information so you can "
"link up the controller with its joystick entry."
msgstr ""
-"返回与此绑定的æ“纵æ†å¯¹è±¡çš„ID。[XRServer]追踪æ¯ä¸ªæŽ§åˆ¶å™¨ï¼Œå¦‚果有按钮和轴,会被"
-"注册为Godotçš„æ“纵æ†ã€‚è¿™æ„å‘³ç€æ‰€æœ‰æ­£å¸¸çš„æ“çºµæ†è¿½è¸ªå’Œè¾“入映射将对AR/VR控制器上"
-"的按钮和轴也起作用。这个ID是æä¾›çš„ä¿¡æ¯ï¼Œè¿™æ ·ä½ å°±å¯ä»¥æŠŠæŽ§åˆ¶å™¨å’Œå®ƒçš„æ“çºµæ†æ¡ç›®"
-"å…³è”èµ·æ¥ã€‚"
+"返回与此绑定的摇æ†å¯¹è±¡çš„ID。由[ARVRServer]跟踪的æ¯ä¸ªæŽ§åˆ¶å™¨ï¼Œå¦‚果有按钮和轴,"
+"也将被注册为Godot中的摇æ†ã€‚è¿™æ„å‘³ç€æ‰€æœ‰æ­£å¸¸çš„æ‘‡æ†è·Ÿè¸ªå’Œè¾“入映射将对AR/VR控制"
+"器上的按钮和轴起作用。这个IDçº¯ç²¹æ˜¯ä½œä¸ºä¿¡æ¯æä¾›çš„ï¼Œè¿™æ ·ä½ å°±å¯ä»¥æŠŠæŽ§åˆ¶å™¨å’Œå®ƒçš„"
+"æ‘‡æ†æ¡ç›®å…³è”èµ·æ¥ã€‚"
#: doc/classes/ARVRController.xml:49
-#, fuzzy
msgid ""
"If provided by the [ARVRInterface], this returns a mesh associated with the "
"controller. This can be used to visualize the controller."
msgstr ""
-"如果由[XRInterface]æä¾›ï¼Œå°†è¿”回一个与控制器相关的网格。å¯ç”¨äºŽå¯è§†åŒ–控制器。"
+"如果由 [ARVRInterface]æä¾›ï¼Œåˆ™è¿”回与控制器相关的网格。这å¯ç”¨äºŽå¯è§†åŒ–控制器。"
#: doc/classes/ARVRController.xml:56
-#, fuzzy
msgid ""
"Returns [code]true[/code] if the button at index [code]button[/code] is "
"pressed. See [enum JoystickList], in particular the [code]JOY_VR_*[/code] "
"constants."
msgstr ""
-"如果索引[code]button[/code]处的按钮被按下,则返回[code]true[/code]。å‚阅"
-"[enum JoyButtonList]。"
+"如果索引[code]button[/code]处的按钮被按下,返回[code]true[/code]。å‚阅[enum "
+"JoystickList],特别是[code]JOY_VR_*[/code]常数。"
#: doc/classes/ARVRController.xml:62
-#, fuzzy
msgid ""
"The controller's ID.\n"
"A controller ID of 0 is unbound and will always result in an inactive node. "
@@ -9121,15 +9196,15 @@ msgid ""
"When a controller is turned off, its slot is freed. This ensures controllers "
"will keep the same ID even when controllers with lower IDs are turned off."
msgstr ""
-"控制器的ID。\n"
-"控制器ID为0是ä¸ç»‘定,将始终有一个未激活的节点。控制器ID 1ä¿ç•™ç»™ç¬¬ä¸€ä¸ªè¯†åˆ«è‡ªèº«"
-"左手的控制器,ID 2ä¿ç•™ç»™ç¬¬ä¸€ä¸ªè¯†åˆ«è‡ªèº«å³æ‰‹çš„æŽ§åˆ¶å™¨ã€‚\n"
-"对于[XRServer]检测到的任何其他控制器,我们继续使用控制器ID 3。\n"
-"å½“ä¸€ä¸ªæŽ§åˆ¶å™¨è¢«å…³é—­æ—¶ï¼Œé‡Šæ”¾å®ƒçš„æ’æ§½ã€‚è¿™ç¡®ä¿æŽ§åˆ¶å™¨å°†ä¿æŒç›¸åŒçš„ID,å³ä½¿ID较低的"
-"控制器被关闭。"
+"控制器的 ID。\n"
+"控制器 ID 为 0 æ˜¯æœªç»‘å®šçš„ï¼Œå¹¶ä¸”å§‹ç»ˆä¼šå¯¼è‡´èŠ‚ç‚¹å¤„äºŽéžæ´»åŠ¨çŠ¶æ€ã€‚控制器 ID 1 ä¿ç•™"
+"给第一个将自己标识为左侧控制器的控制器,ID 2 ä¿ç•™ç»™ç¬¬ä¸€ä¸ªå°†å…¶æ ‡è¯†ä¸ºå³ä¾§æŽ§åˆ¶å™¨"
+"的控制器。\n"
+"对于 [ARVRServer] 检测到的任何其他控制器,继而使用控制器 ID 3。\n"
+"å½“æŽ§åˆ¶å™¨å…³é—­æ—¶ï¼Œå®ƒçš„æ’æ§½è¢«é‡Šæ”¾ã€‚è¿™å¯ç¡®ä¿å³ä½¿åœ¨å…³é—­ ID 较低的控制器时,其他控"
+"åˆ¶å™¨ä¹Ÿå°†ä¿æŒç›¸åŒçš„ ID。"
#: doc/classes/ARVRController.xml:68
-#, fuzzy
msgid ""
"The degree to which the controller vibrates. Ranges from [code]0.0[/code] to "
"[code]1.0[/code] with precision [code].01[/code]. If changed, updates "
@@ -9138,8 +9213,8 @@ msgid ""
"for a limited duration."
msgstr ""
"控制器振动的程度。范围从[code]0.0[/code]到[code]1.0[/code],精度[code].01[/"
-"code]。如果改å˜äº†ï¼Œä¼šç›¸åº”地更新[member XRPositionalTracker.rumble]。\n"
-"如果你想让控制器在有é™çš„æ—¶é—´å†…振动,这是一个有用的动画属性。"
+"code]。如果更改,会相应地更新[member ARVRPositionalTracker.rumble]。\n"
+"如果你想让控制器在é™å®šæ—¶é—´å†…振动,这是一个有用的属性,å¯ä»¥å°†å…¶åŠ¨ç”»åŒ–ã€‚"
#: doc/classes/ARVRController.xml:76
msgid "Emitted when a button on this controller is pressed."
@@ -9163,7 +9238,6 @@ msgid "Base class for an AR/VR interface implementation."
msgstr "AR/VR接å£å®žçŽ°çš„åŸºç±»ã€‚"
#: doc/classes/ARVRInterface.xml:7
-#, fuzzy
msgid ""
"This class needs to be implemented to make an AR or VR platform available to "
"Godot and these should be implemented as C++ modules or GDNative modules "
@@ -9174,11 +9248,11 @@ msgid ""
"give us a working setup. You can query the available interfaces through "
"[ARVRServer]."
msgstr ""
-"这个类需è¦å®žçŽ°ï¼Œä»¥ä½¿AR或VRå¹³å°åœ¨Godot中å¯ç”¨ï¼Œè¿™äº›å†…容应以C++æ¨¡å—æˆ–GDNative模"
-"å—实现,注æ„,对于GDNative应使用å­ç±»XRScriptInterfaceã€‚å…¶éƒ¨åˆ†æŽ¥å£æš´éœ²ç»™"
-"GDScript,因此你å¯ä»¥æ£€æµ‹ã€å¯ç”¨å’Œé…ç½®AR或VRå¹³å°ã€‚\n"
-"接å£çš„编写方å¼å°†æ˜¯ç®€å•地å¯ç”¨å®ƒä»¬ï¼Œå°±å¯ä»¥å¾—到环境安装。你å¯ä»¥é€šè¿‡[XRServer]查"
-"询å¯ç”¨çš„æŽ¥å£ã€‚"
+"需è¦å®žçŽ°è¿™ä¸ªç±»æ‰èƒ½ä½¿ AR 或 VR å¹³å°å¯ä¾› Godot 使用,并且应实现为 C++ æ¨¡å—æˆ– "
+"GDNative 模å—,注æ„,对于 GDNative,应使用å­ç±» ARVRScriptInterface。部分接å£"
+"å‘ GDScript 公开,因而,您å¯ä»¥æ£€æµ‹ã€å¯ç”¨å’Œé…ç½® AR 或 VR å¹³å°ã€‚\n"
+"接å£åº”以这样的方å¼ç¼–写,åªéœ€å¯ç”¨å®ƒä»¬å°±å¯ä»¥ä¸ºæˆ‘们æä¾›å·¥ä½œé…置。您å¯ä»¥é€šè¿‡"
+"[ARVRServer]查询å¯ç”¨æŽ¥å£ã€‚"
#: doc/classes/ARVRInterface.xml:17
msgid ""
@@ -9345,26 +9419,23 @@ msgid ""
msgstr "追踪功能失效,å³ç›¸æœºæœªæ’ç”µæˆ–è¢«é®æŒ¡ï¼Œç¯å¡”关闭,等等。"
#: modules/gdnative/doc_classes/ARVRInterfaceGDNative.xml:4
-#, fuzzy
msgid "GDNative wrapper for an ARVR interface."
-msgstr "XR接å£çš„GDNative包装器。"
+msgstr "ARVR接å£çš„GDNative包装器。"
#: modules/gdnative/doc_classes/ARVRInterfaceGDNative.xml:7
-#, fuzzy
msgid ""
"This is a wrapper class for GDNative implementations of the ARVR interface. "
"To use a GDNative ARVR interface, simply instantiate this object and set "
"your GDNative library containing the ARVR interface implementation."
msgstr ""
-"这是一个包装类,用于XR接å£çš„GDNative实现。è¦ä½¿ç”¨GDNative XR接å£ï¼Œåªéœ€å°†æ­¤å¯¹è±¡"
-"实例化,并设置你GDNative库中包å«XR接å£çš„实现。"
+"这是 ARVR 接å£çš„ GDNative 实现的包装类。è¦ä½¿ç”¨ GDNative ARVR 接å£ï¼Œåªéœ€å®žä¾‹åŒ–"
+"æ­¤å¯¹è±¡å¹¶è®¾ç½®åŒ…å« ARVR 接å£å®žçŽ°çš„ GDNative 库。"
#: doc/classes/ARVROrigin.xml:4
msgid "The origin point in AR/VR."
msgstr "AR/VR的原点。"
#: doc/classes/ARVROrigin.xml:7
-#, fuzzy
msgid ""
"This is a special node within the AR/VR system that maps the physical "
"location of the center of our tracking space to the virtual location within "
@@ -9379,33 +9450,30 @@ msgid ""
"be a child node of this car. Or, if you're implementing a teleport system to "
"move your character, you should change the position of this node."
msgstr ""
-"这是AR/VR系统中的特殊节点,它将我们追踪空间中心的物ç†ä½ç½®æ˜ å°„到游æˆä¸–界中的虚"
-"拟ä½ç½®ã€‚\n"
-"在你的场景中应该至少有一个这样的节点。所有的XRCamera3Dã€XRController3Då’Œ"
-"XRAnchor3D节点都应该是这个节点的直接å­èŠ‚ç‚¹ï¼Œè¿™æ ·ç©ºé—´è¿½è¸ªæ‰èƒ½æ­£å¸¸å·¥ä½œã€‚\n"
-"当你的角色需è¦åœ¨æ¸¸æˆä¸–界中移动时,你会更新这个节点的ä½ç½®ï¼Œè€Œæˆ‘们并没有在现实"
-"世界中移动。现实世界中的è¿åŠ¨æ€»æ˜¯ä¸Žè¿™ä¸ªåŽŸç‚¹æœ‰å…³ã€‚\n"
-"例如,如果你的角色正在驾驶一辆汽车,XROrigin3D节点应该是这辆汽车的一个å­èŠ‚"
-"点。或者,如果你正在实现一个传é€ç³»ç»Ÿæ¥ç§»åŠ¨ä½ çš„è§’è‰²ï¼Œä½ åº”è¯¥æ”¹å˜è¿™ä¸ªèŠ‚ç‚¹çš„ä½"
-"置。"
+"这是 AR/VR 系统中的一个特殊节点,它将我们跟踪空间中心的物ç†ä½ç½®æ˜ å°„到游æˆä¸–界"
+"中的虚拟ä½ç½®ã€‚\n"
+"你的场景中应该有且必须有这样节点。所有 ARVRCameraã€ARVRController å’Œ "
+"ARVRAnchor 节点都应该是该节点的直接å­èŠ‚ç‚¹ï¼Œä»¥ä¾¿ç©ºé—´è·Ÿè¸ªæ­£å¸¸è¿è¡Œã€‚\n"
+"当你的角色需è¦åœ¨æ¸¸æˆä¸–界中移动而我们ä¸åœ¨çŽ°å®žä¸–ç•Œä¸­ç§»åŠ¨æ—¶ï¼Œä¼šæ›´æ–°æ­¤èŠ‚ç‚¹çš„ä½"
+"置。现实世界中的è¿åŠ¨æ€»æ˜¯ä¸Žè¿™ä¸ªåŽŸç‚¹æœ‰å…³ã€‚\n"
+"例如,如果你的角色正在驾驶汽车,则 ARVROrigin 节点应该是这辆车的å­èŠ‚ç‚¹ã€‚æˆ–"
+"者,如果通过传é€ç³»ç»Ÿæ¥ç§»åŠ¨è§’è‰²ï¼Œåº”è¯¥æ›´æ”¹æ­¤èŠ‚ç‚¹çš„ä½ç½®ã€‚"
#: doc/classes/ARVROrigin.xml:19
-#, fuzzy
msgid ""
"Allows you to adjust the scale to your game's units. Most AR/VR platforms "
"assume a scale of 1 game world unit = 1 real world meter.\n"
"[b]Note:[/b] This method is a passthrough to the [ARVRServer] itself."
msgstr ""
-"å…许你根æ®ä½ çš„æ¸¸æˆçš„å•使¥è°ƒæ•´æ¯”例。大多数AR/VRå¹³å°çš„æ¯”例是,1个游æˆä¸–界的å•"
-"ä½=1个现实世界的米。\n"
-"[b]注æ„:[/b]è¿™ç§æ–¹æ³•是对[XRServer]本身的一ç§ç©¿é€ã€‚"
+"å…许你根æ®ä½ çš„æ¸¸æˆçš„å•使¥è°ƒæ•´æ¯”例。大多数AR/VRå¹³å°å‡å®š1个游æˆä¸–界的å•ä½=1个"
+"现实世界的米的比例。\n"
+"[b]注æ„:[/b]è¿™ç§æ–¹æ³•是通过[ARVRServer]本身的。"
#: doc/classes/ARVRPositionalTracker.xml:4
msgid "A tracked object."
msgstr "跟踪对象。"
#: doc/classes/ARVRPositionalTracker.xml:7
-#, fuzzy
msgid ""
"An instance of this object represents a device that is tracked, such as a "
"controller or anchor point. HMDs aren't represented here as they are handled "
@@ -9418,13 +9486,13 @@ msgid ""
"hood objects that make this all work. These are mostly exposed so that "
"GDNative-based interfaces can interact with them."
msgstr ""
-"此对象的一个实例代表一个被追踪的设备,如控制器或锚点。这里ä¸ä»£è¡¨HMD,因为它们"
-"是内部处ç†çš„。\n"
-"当打开控制器,并且AR/VRæŽ¥å£æ£€æµ‹åˆ°å®ƒä»¬æ—¶ï¼Œä¼šè‡ªåŠ¨æ·»åŠ è¿™ä¸ªå¯¹è±¡çš„å®žä¾‹åˆ°é€šè¿‡è¿™ä¸ª"
-"[XRServer]访问的激活的跟踪对象列表中。\n"
-"[XRController3D]å’Œ[XRAnchor3D]会消耗这ç§ç±»åž‹çš„对象,你应在项目中使用。ä½ç½®è·Ÿ"
-"è¸ªå™¨åªæ˜¯ä½¿è¿™ä¸€åˆ‡å·¥ä½œçš„幕åŽå¯¹è±¡ã€‚这些对象通常被公开出æ¥ï¼Œä»¥ä¾¿åŸºäºŽGDNative的接"
-"å£å¯ä»¥ä¸Žå®ƒä»¬è¿›è¡Œäº¤äº’。"
+"此对象的实例表示被跟踪的设备,例如控制器或锚点。由于 HMD 是在内部处ç†çš„,因此"
+"ä¸è¡¨ç¤º HMD。\n"
+"当控制器打开并且 AR/VR ç•Œé¢æ£€æµ‹åˆ°å®ƒä»¬æ—¶ï¼Œæ­¤å¯¹è±¡çš„实例会自动添加到å¯é€šè¿‡ "
+"[ARVRServer] 访问的活动的跟踪对象列表中。\n"
+"[ARVRController] å’Œ [ARVRAnchor] 都使用这ç§ç±»åž‹çš„对象,你应该在的项目中使用。"
+"ä½ç½®è·Ÿè¸ªå™¨åªæ˜¯ä½¿è¿™ä¸€åˆ‡æ­£å¸¸å·¥ä½œçš„底层对象。这些大部分都是公开的,以便基于 "
+"GDNative 的接å£å¯ä»¥ä¸Žå®ƒä»¬äº¤äº’。"
#: doc/classes/ARVRPositionalTracker.xml:18
msgid ""
@@ -9457,14 +9525,13 @@ msgid "Returns the world-space controller position."
msgstr "返回世界空间控制器的ä½ç½®ã€‚"
#: doc/classes/ARVRPositionalTracker.xml:54
-#, fuzzy
msgid ""
"Returns the internal tracker ID. This uniquely identifies the tracker per "
"tracker type and matches the ID you need to specify for nodes such as the "
"[ARVRController] and [ARVRAnchor] nodes."
msgstr ""
-"返回内部追踪器的ID。这是对æ¯ä¸ªè·Ÿè¸ªå™¨ç±»åž‹çš„唯一标识,与你需è¦ä¸º"
-"[XRController3D]å’Œ[XRAnchor3D]节点指定的ID相匹é…。"
+"返回内部跟踪器的ID。这是对æ¯ä¸ªè·Ÿè¸ªå™¨ç±»åž‹çš„唯一标识,与你需è¦ä¸º"
+"[ARVRController]å’Œ[ARVRAnchor]节点指定的ID相匹é…。"
#: doc/classes/ARVRPositionalTracker.xml:60
msgid "Returns [code]true[/code] if this device tracks orientation."
@@ -9520,7 +9587,7 @@ msgstr "注册一个[ARVRInterface]对象。"
msgid ""
"Registers a new [ARVRPositionalTracker] that tracks a spatial location in "
"real space."
-msgstr ""
+msgstr "注册一个新的[ARVRPositionalTracker],跟踪现实空间中的空间ä½ç½®ã€‚"
#: doc/classes/ARVRServer.xml:32
msgid ""
@@ -9560,7 +9627,7 @@ msgstr ""
#: doc/classes/ARVRServer.xml:44
msgid ""
"Clears our current primary interface if it is set to the provided interface."
-msgstr ""
+msgstr "如果设置为æä¾›çš„æŽ¥å£ï¼Œåˆ™æ¸…除我们当å‰çš„主接å£ã€‚"
#: doc/classes/ARVRServer.xml:51
msgid ""
@@ -9598,7 +9665,6 @@ msgid ""
msgstr "返回å¯ç”¨æŽ¥å£çš„列表,æ¯ä¸ªæŽ¥å£çš„IDå’Œå称。"
#: doc/classes/ARVRServer.xml:82
-#, fuzzy
msgid ""
"Returns the absolute timestamp (in μs) of the last [ARVRServer] commit of "
"the AR/VR eyes to [VisualServer]. The value comes from an internal call to "
@@ -9617,7 +9683,6 @@ msgstr ""
"get_last_commit_usec]和[method get_last_process_usec]之间的差异。"
#: doc/classes/ARVRServer.xml:94
-#, fuzzy
msgid ""
"Returns the absolute timestamp (in μs) of the last [ARVRServer] process "
"callback. The value comes from an internal call to [method OS."
@@ -9649,7 +9714,6 @@ msgid "Removes this positional tracker."
msgstr "移除此ä½ç½®è·Ÿè¸ªå™¨ã€‚"
#: doc/classes/ARVRServer.xml:133
-#, fuzzy
msgid "The primary [ARVRInterface] currently bound to the [ARVRServer]."
msgstr "当å‰ç»‘定到 [XRServer] çš„ä¸»è¦ [XRInterface]。"
@@ -9670,19 +9734,17 @@ msgid "Emitted when an interface is removed."
msgstr "当接å£è¢«åˆ é™¤æ—¶è§¦å‘。"
#: doc/classes/ARVRServer.xml:157
-#, fuzzy
msgid ""
"Emitted when a new tracker has been added. If you don't use a fixed number "
"of controllers or if you're using [ARVRAnchor]s for an AR solution, it is "
"important to react to this signal to add the appropriate [ARVRController] or "
"[ARVRAnchor] nodes related to this new tracker."
msgstr ""
-"添加新跟踪器时触å‘。如果你ä¸ä½¿ç”¨å›ºå®šæ•°é‡çš„æŽ§åˆ¶å™¨ï¼Œæˆ–者你使用[XRAnchor3D]çš„AR"
-"解决方案,那么对这个信å·åšå‡ºå应,添加与这个新追踪器相关的适当的"
-"[XRController3D]或[XRAnchor3D]节点将很é‡è¦ã€‚"
+"当新的追踪器被添加时触å‘。如果你ä¸ä½¿ç”¨å›ºå®šæ•°é‡çš„æŽ§åˆ¶å™¨ï¼Œæˆ–者你在AR解决方案中"
+"使用[ARVRAnchor],那么对这个信å·åšå‡ºå应,以添加与这个新追踪器相关的适当的"
+"[ARVRController]或[ARVRAnchor]节点,将会很é‡è¦ã€‚"
#: doc/classes/ARVRServer.xml:165
-#, fuzzy
msgid ""
"Emitted when a tracker is removed. You should remove any [ARVRController] or "
"[ARVRAnchor] points if applicable. This is not mandatory, the nodes simply "
@@ -9690,9 +9752,9 @@ msgid ""
"available (i.e. a new controller is switched on that takes the place of the "
"previous one)."
msgstr ""
-"当追踪器被移除时触å‘。如果适用,你应该删除任何[XRController3D]或[XRAnchor3D]"
-"ç‚¹ã€‚è¿™ä¸æ˜¯å¼ºåˆ¶æ€§çš„,这些节点将å˜å¾—éžæ¿€æ´»ï¼Œå½“一个新的追踪器å¯ç”¨æ—¶ï¼Œå³ä¸€ä¸ªæ–°çš„"
-"控制器被打开,å–代了之å‰çš„æŽ§åˆ¶å™¨ï¼Œè¿™äº›èŠ‚ç‚¹å°†è¢«é‡æ–°æ¿€æ´»ã€‚"
+"删除跟踪器时触å‘。如果适当,您应该删除所有 [ARVRController] 或 [ARVRAnchor] "
+"ç‚¹ã€‚è¿™ä¸æ˜¯å¼ºåˆ¶æ€§çš„ï¼ŒèŠ‚ç‚¹åªæ˜¯å˜ä¸ºä¸æ´»åŠ¨çŠ¶æ€ï¼Œå½“新的跟踪器å¯ç”¨æ—¶å°†å†æ¬¡æ¿€æ´»ï¼Œå³"
+"打开一个新的控制器æ¥ä»£æ›¿å‰ä¸€ä¸ªæŽ§åˆ¶å™¨ã€‚"
#: doc/classes/ARVRServer.xml:171
msgid "The tracker tracks the location of a controller."
@@ -9755,14 +9817,12 @@ msgstr ""
"动æ€çš„,而内容的大å°éœ€è¦ç›¸åº”调整而ä¸å¤±åŽ»æ¯”ä¾‹çš„é—®é¢˜ã€‚"
#: doc/classes/AspectRatioContainer.xml:15
-#, fuzzy
msgid "Specifies the horizontal relative position of child controls."
-msgstr "å­èŠ‚ç‚¹çš„æ°´å¹³åˆ†éš”é‡ã€‚"
+msgstr "æŒ‡å®šå­æŽ§ä»¶çš„æ°´å¹³ç›¸å¯¹ä½ç½®ã€‚"
#: doc/classes/AspectRatioContainer.xml:18
-#, fuzzy
msgid "Specifies the vertical relative position of child controls."
-msgstr "å­èŠ‚ç‚¹çš„åž‚ç›´åˆ†éš”é‡ã€‚"
+msgstr "æŒ‡å®šå­æŽ§ä»¶çš„åž‚ç›´ç›¸å¯¹ä½ç½®ã€‚"
#: doc/classes/AspectRatioContainer.xml:21
msgid ""
@@ -9773,9 +9833,8 @@ msgstr ""
"stretch_mode]。"
#: doc/classes/AspectRatioContainer.xml:24
-#, fuzzy
msgid "The stretch mode used to align child controls."
-msgstr "ç”¨äºŽâ€œå‘¼å«æ–¹æ³•â€è½¨é“çš„å‘¼å«æ¨¡å¼ã€‚"
+msgstr "用æ¥å¯¹é½å­æŽ§ä»¶çš„æ‹‰ä¼¸æ¨¡å¼ã€‚"
#: doc/classes/AspectRatioContainer.xml:29
msgid ""
@@ -9784,11 +9843,10 @@ msgid ""
msgstr "å­æŽ§ä»¶çš„é«˜åº¦ä¼šæ ¹æ®å®¹å™¨çš„宽度自动调整。"
#: doc/classes/AspectRatioContainer.xml:32
-#, fuzzy
msgid ""
"The width of child controls is automatically adjusted based on the height of "
"the container."
-msgstr "如果为 [code]true[/code],控件将自动调整高度以适åˆå…¶å†…容。"
+msgstr "å­æŽ§ä»¶çš„å®½åº¦ä¼šæ ¹æ®å®¹å™¨çš„高度自动调整。"
#: doc/classes/AspectRatioContainer.xml:35
msgid ""
@@ -9811,30 +9869,25 @@ msgstr ""
"用时,这仅å…许显示å—其自身边界矩形é™åˆ¶çš„容器区域。"
#: doc/classes/AspectRatioContainer.xml:42
-#, fuzzy
msgid ""
"Aligns child controls with the beginning (left or top) of the container."
-msgstr "å°†å­é¡¹ä¸Žå®¹å™¨çš„开端对é½ã€‚"
+msgstr "å°†å­æŽ§ä»¶ä¸Žå®¹å™¨çš„å¼€å¤´å¯¹é½ï¼Œå·¦ä¾§æˆ–顶部。"
#: doc/classes/AspectRatioContainer.xml:45
-#, fuzzy
msgid "Aligns child controls with the center of the container."
-msgstr "å°†å­é¡¹ä¸Žå®¹å™¨çš„中心对é½ã€‚"
+msgstr "ä½¿å­æŽ§ä»¶ä¸Žå®¹å™¨çš„ä¸­å¿ƒå¯¹é½ã€‚"
#: doc/classes/AspectRatioContainer.xml:48
-#, fuzzy
msgid "Aligns child controls with the end (right or bottom) of the container."
-msgstr "å°†å­é¡¹ä¸Žå®¹å™¨çš„æœ«ç«¯å¯¹é½ã€‚"
+msgstr "å°†å­æŽ§ä»¶ä¸Žå®¹å™¨çš„æœ«ç«¯å¯¹é½ï¼Œå³ä¾§æˆ–底部。"
#: doc/classes/AStar.xml:4
-#, fuzzy
msgid ""
"An implementation of A* to find the shortest paths among connected points in "
"space."
-msgstr "A *的一ç§å®žçŽ°ï¼Œç”¨äºŽåœ¨ç©ºé—´ä¸­çš„è¿žæŽ¥ç‚¹ä¹‹é—´æ‰¾åˆ°æœ€çŸ­è·¯å¾„ã€‚"
+msgstr "A* 的一ç§å®žçŽ°ï¼Œç”¨äºŽå¯»æ‰¾ç©ºé—´ä¸­è¿žæŽ¥ç‚¹ä¹‹é—´çš„æœ€çŸ­è·¯å¾„ã€‚"
#: doc/classes/AStar.xml:7
-#, fuzzy
msgid ""
"A* (A star) is a computer algorithm that is widely used in pathfinding and "
"graph traversal, the process of plotting short paths among vertices "
@@ -9877,16 +9930,16 @@ msgid ""
"[code]1.0[/code], then this equals the sum of Euclidean distances of all "
"segments in the path."
msgstr ""
-"A*(A star)是一个计算机算法,被广泛应用于寻路和图é历,å³åœ¨é¡¶ç‚¹ï¼ˆpoints)之"
-"间绘制短路径的过程,通过给定的一组边(segments)。由于它的性能和精度,得到了"
-"广泛的应用。Godotçš„A*算法实现默认使用三维空间中的点和欧æ°è·ç¦»ã€‚\n"
-"你必须使用[method add_point]手动添加点并使用[method connect_points]手动创建"
-"边。然åŽä½ å¯ä»¥ä½¿ç”¨[method are_points_connected]函数测试两个点之间是å¦å­˜åœ¨è·¯"
-"径,使用[method get_id_path]获å–包å«ç´¢å¼•的路径,或者使用[method "
-"get_point_path]æ¥èŽ·å–包å«çœŸå®žå标的路径。\n"
-"ä½¿ç”¨éžæ¬§å‡ é‡Œå¾·è·ç¦»ä¹Ÿæ˜¯å¯ä»¥çš„。为此,创建一个类继承[code]AStar[/code]å¹¶é‡å†™ "
-"[method _compute_cost] å’Œ [method _estimate_cost]方法。两者都需è¦è¾“入两个索引"
-"并返回一个长度,如下é¢çš„例孿‰€ç¤ºã€‚\n"
+"A*(A 星)是一ç§è®¡ç®—机算法,广泛用于寻路和图é历,是通过一组给定的边(线"
+"段),在顶点(点)之间绘制短路径的过程。A* 因其性能和准确性而被广泛使用。"
+"Godot çš„ A* 实现默认使用三维空间中的点和欧å¼è·ç¦»ã€‚\n"
+"您需è¦ä½¿ç”¨ [method add_point] 手动添加点,并使用 [method connect_points] 手动"
+"创建线段。然åŽï¼Œå¯ä»¥ä½¿ç”¨ [method are_points_connected] 函数测试两点之间是å¦å­˜"
+"在路径,通过 [method get_id_path] 获å–包å«ç´¢å¼•的路径,或使用 [method "
+"get_point_path] 获å–包å«å®žé™…åæ ‡çš„路径。\n"
+"也å¯ä»¥ä½¿ç”¨éžæ¬§å¼è·ç¦»ã€‚为此,创建一个扩展 [code]AStar[/code] 的类并é‡å†™æ–¹æ³• "
+"[method _compute_cost] å’Œ [method _estimate_cost]。这两个方法都接å—两个索引并"
+"返回一个长度,如以下示例所示:\n"
"[codeblock]\n"
"class MyAStar:\n"
" extends AStar\n"
@@ -9897,11 +9950,17 @@ msgstr ""
" func _estimate_cost(u, v):\n"
" return min(0, abs(u - v) - 1)\n"
"[/codeblock]\n"
-"[method _estimate_cost]应该返回è·ç¦»çš„一个下界,å³[code]_estimate_cost(u, v) "
-"<= _compute_cost(u, v)[/code]。这是对算法的一个æç¤ºï¼Œå› ä¸ºè‡ªå®šä¹‰çš„"
-"[code]_compute_cost[/code]å¯èƒ½è®¡ç®—é‡å¾ˆå¤§ã€‚å¦‚æžœä¸æ˜¯è¿™æ ·ï¼Œè¯·è®©[method "
-"_estimate_cost]返回与[method _compute_cost]相åŒçš„值,以便为算法æä¾›æœ€å‡†ç¡®çš„ä¿¡"
-"æ¯ã€‚"
+"[method _estimate_cost] 应返回è·ç¦»çš„下é™ï¼Œå³ [code]_estimate_cost(u, v) <= "
+"_compute_cost(u, v)[/code]。这å¯ä»¥ä½œä¸ºç®—法的æç¤ºï¼Œå› ä¸ºè‡ªå®šä¹‰ "
+"[code]_compute_cost[/code] å¯èƒ½è®¡ç®—é‡å¾ˆå¤§ã€‚å¦‚æžœä¸æ˜¯è¿™ç§æƒ…况,请使 [method "
+"_estimate_cost] 返回与 [method _compute_cost] 相åŒçš„值,以便为算法æä¾›æœ€å‡†ç¡®"
+"的信æ¯ã€‚\n"
+"如果使用默认的 [method _estimate_cost] 和 [method _compute_cost] 方法,或者如"
+"æžœæä¾›çš„ [method _estimate_cost] æ–¹æ³•è¿”å›žæˆæœ¬çš„下é™ï¼Œåˆ™ A* è¿”å›žçš„è·¯å¾„å°†æ˜¯æˆæœ¬"
+"最低的路径。这里,路径的代价等于路径中所有段的[method _compute_cost]结果之和"
+"乘以å„个段端点的[code]weight_scale[/code]æƒé‡ã€‚如果使用默认方法并且所有点的 "
+"[code]weight_scale[/code] 设置为 [code]1.0[/code],则这等于路径中所有段的欧å¼"
+"è·ç¦»ä¹‹å’Œã€‚"
#: doc/classes/AStar.xml:31
msgid ""
@@ -9921,7 +9980,6 @@ msgstr ""
"注æ„这个函数éšè—在默认的 [code]AStar[/code] 类中。"
#: doc/classes/AStar.xml:50
-#, fuzzy
msgid ""
"Adds a new point at the given position with the given identifier. The "
"[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must "
@@ -9939,15 +9997,17 @@ msgid ""
"If there already exists a point for the given [code]id[/code], its position "
"and weight scale are updated to the given values."
msgstr ""
-"在给定的ä½ç½®æ·»åŠ ä¸€ä¸ªæ–°çš„ç‚¹ã€‚ç®—æ³•ä¼˜å…ˆé€‰æ‹©[code]weight_scale[/code]较低的点æ¥å½¢"
-"æˆè·¯å¾„。[code]id[/code]必须是0或更大,[code]weight_scale[/code]必须是1或更"
-"大。\n"
+"在给定的ä½ç½®æ·»åŠ ä¸€ä¸ªæ–°çš„ç‚¹ï¼Œå¹¶ä½¿ç”¨ç»™å®šçš„æ ‡è¯†ç¬¦ã€‚[code]id[/code]必须是0或者更"
+"大,[code]weight_scale[/code]必须是1或者更大。\n"
+"åœ¨ç¡®å®šä»Žé‚»ç‚¹åˆ°æ­¤ç‚¹çš„ä¸€æ®µè·¯ç¨‹çš„æ€»æˆæœ¬æ—¶ï¼Œ[code]weight_scale[/code]è¦ä¹˜ä»¥"
+"[method _compute_cost]的结果。因此,在其他æ¡ä»¶ç›¸åŒçš„æƒ…况下,算法优先选择"
+"[code]weight_scale[/code]较低的点æ¥å½¢æˆè·¯å¾„。\n"
"[codeblock]\n"
"var astar = AStar.new()\n"
"astar.add_point(1, Vector3(1, 0, 0), 4) # Adds the point (1, 0, 0) with "
"weight_scale 4 and id 1\n"
"[/codeblock]\n"
-"如果给定的[code]id[/code]å·²ç»å­˜åœ¨ä¸€ä¸ªç‚¹ï¼Œé‚£ä¹ˆå®ƒçš„ä½ç½®å’Œæƒé‡åˆ»åº¦å°†æ›´æ–°åˆ°ç»™å®šçš„"
+"如果对于给定的[code]id[/code]å·²ç»å­˜åœ¨ä¸€ä¸ªç‚¹ï¼Œå®ƒçš„ä½ç½®å’Œæƒé‡å°†è¢«æ›´æ–°ä¸ºç»™å®šçš„"
"值。"
#: doc/classes/AStar.xml:65
@@ -10123,7 +10183,6 @@ msgid "Returns the number of points currently in the points pool."
msgstr "返回当å‰ç§¯åˆ†æ± ä¸­çš„积分数é‡ã€‚"
#: doc/classes/AStar.xml:187
-#, fuzzy
msgid ""
"Returns an array with the points that are in the path found by AStar between "
"the given points. The array is ordered from the starting point to the ending "
@@ -10131,8 +10190,10 @@ msgid ""
"[b]Note:[/b] This method is not thread-safe. If called from a [Thread], it "
"will return an empty [PoolVector3Array] and will print an error message."
msgstr ""
-"返回一个数组,该数组包å«äº†AStar在给定点之间找到的路径上的点。数组从路径的起始"
-"点到结æŸç‚¹æŽ’åºã€‚"
+"è¿”å›žä¸€ä¸ªæ•°ç»„ï¼Œå…¶ä¸­åŒ…å« AStar 在给定点之间找到的路径中的点。数组从路径的起点到"
+"终点进行排åºã€‚\n"
+"[b]注æ„:[/b] è¿™ä¸ªæ–¹æ³•ä¸æ˜¯çº¿ç¨‹å®‰å…¨çš„。如果从 [Thread] 调用,它将返回一个空的 "
+"[PoolVector3Array] 并打å°ä¸€æ¡é”™è¯¯æ¶ˆæ¯ã€‚"
#: doc/classes/AStar.xml:195 doc/classes/AStar2D.xml:179
msgid ""
@@ -10193,6 +10254,9 @@ msgid ""
"_compute_cost] when determining the overall cost of traveling across a "
"segment from a neighboring point to this point."
msgstr ""
+"为给定的[code]id[/code]的点设置[code]weight_scale[/code]。在确定从邻接点到这"
+"ä¸ªç‚¹çš„ä¸€æ®µè·¯ç¨‹çš„æ€»æˆæœ¬æ—¶ï¼Œ[code]weight_scale[/code]è¦ä¹˜ä»¥[method "
+"_compute_cost]的结果。"
#: doc/classes/AStar2D.xml:4
msgid "AStar class representation that uses 2D vectors as edges."
@@ -10222,7 +10286,6 @@ msgstr ""
"请注æ„,这个函数éšè—在默认的 [code]AStar2D[/code] 类中。"
#: doc/classes/AStar2D.xml:36
-#, fuzzy
msgid ""
"Adds a new point at the given position with the given identifier. The "
"[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must "
@@ -10240,16 +10303,17 @@ msgid ""
"If there already exists a point for the given [code]id[/code], its position "
"and weight scale are updated to the given values."
msgstr ""
-"在给定的ä½ç½®æ·»åŠ ä¸€ä¸ªæ–°çš„ç‚¹ã€‚ç®—æ³•ä¼˜å…ˆé€‰æ‹©[code]weight_scale[/code]较低的点æ¥å½¢"
-"æˆè·¯å¾„。[code]id[/code]必须是0或更大,[code]weight_scale[/code]必须是1或更"
-"大。\n"
+"在给定的ä½ç½®æ·»åŠ ä¸€ä¸ªæ–°çš„ç‚¹ï¼Œå¹¶ä½¿ç”¨ç»™å®šçš„æ ‡è¯†ç¬¦ã€‚[code]id[/code]必须是0或者更"
+"大,[code]weight_scale[/code]必须是1或者更大。\n"
+"åœ¨ç¡®å®šä»Žç›¸é‚»ç‚¹åˆ°æ­¤ç‚¹çš„ä¸€æ®µè·¯ç¨‹çš„æ€»æˆæœ¬æ—¶ï¼Œ[code]weight_scale[/code]è¦ä¹˜ä»¥"
+"[method _compute_cost]的结果。因此,在其他æ¡ä»¶ç›¸åŒçš„æƒ…况下,算法优先选择"
+"[code]weight_scale[/code]较低的点æ¥å½¢æˆè·¯å¾„。\n"
"[codeblock]\n"
"var astar = AStar2D.new()\n"
"astar.add_point(1, Vector2(1, 0), 4) # Adds the point (1, 0) with "
"weight_scale 4 and id 1\n"
"[/codeblock]\n"
-"如果给定的[code]id[/code]å·²ç»å­˜åœ¨ä¸€ä¸ªç‚¹ï¼Œé‚£ä¹ˆå®ƒçš„ä½ç½®å’Œæƒé‡åˆ»åº¦å°†æ›´æ–°åˆ°ç»™å®šçš„"
-"值。"
+"如果已ç»å­˜åœ¨ä¸€ä¸ªç»™å®š[code]id[/code]的点,它的ä½ç½®å’Œæƒé‡å°†è¢«æ›´æ–°ä¸ºç»™å®šå€¼ã€‚"
#: doc/classes/AStar2D.xml:50
msgid "Returns whether there is a connection/segment between the given points."
@@ -10382,7 +10446,6 @@ msgstr ""
"[/codeblock]"
#: doc/classes/AStar2D.xml:171
-#, fuzzy
msgid ""
"Returns an array with the points that are in the path found by AStar2D "
"between the given points. The array is ordered from the starting point to "
@@ -10390,8 +10453,10 @@ msgid ""
"[b]Note:[/b] This method is not thread-safe. If called from a [Thread], it "
"will return an empty [PoolVector2Array] and will print an error message."
msgstr ""
-"返回一个数组,该数组包å«äº†AStar2D在给定点之间找到的路径中的点。数组从路径的起"
-"始点到结æŸç‚¹æŽ’åºã€‚"
+"返回一个数组,该数组包å«äº†AStar2D在给定点之间找到的路径中的点。该数组从路径的"
+"起点到终点排åºã€‚\n"
+"[b]注æ„:[/b] è¿™ä¸ªæ–¹æ³•ä¸æ˜¯çº¿ç¨‹å®‰å…¨çš„。如果从一个[Thread]线程中调用,它将返回"
+"一个空的[PoolVector2Array],并打å°ä¸€ä¸ªé”™è¯¯ä¿¡æ¯ã€‚"
#: doc/classes/AtlasTexture.xml:4
msgid ""
@@ -10416,11 +10481,20 @@ msgid ""
"FLAG_REPEAT] and [constant Texture.FLAG_MIRRORED_REPEAT] flags are ignored "
"when using an AtlasTexture."
msgstr ""
+"[Texture]资æºï¼Œç”±[member region]定义,è£å‰ªå‡º[member atlas]纹ç†çš„一个部分。主"
+"è¦çš„用例是从纹ç†å›¾é›†ä¸­è£å‰ªå‡ºçº¹ç†ï¼Œä¸€ä¸ªå¤§çš„çº¹ç†æ–‡ä»¶ï¼ŒåŒ…å«äº†å¤šä¸ªè¾ƒå°çš„纹ç†ã€‚ç”± "
+"[member atlas]çš„[Texture]ã€å®šä¹‰ä½¿ç”¨ [member atlas]区域的[member region]和定义"
+"边界宽度的[member margin]组æˆã€‚\n"
+"[AtlasTexture]ä¸èƒ½åœ¨[AnimatedTexture]中使用,ä¸èƒ½åœ¨[TextureRect]等节点中平"
+"铺,如果在其他[AtlasTexture]资æºå†…部使用,将ä¸èƒ½æ­£å¸¸å·¥ä½œã€‚多个[AtlasTexture]"
+"资æºå¯ä»¥ç”¨æ¥è£å‰ªå›¾é›†ä¸­çš„多个纹ç†ã€‚ä¸Žä½¿ç”¨å¤šä¸ªå°æ–‡ä»¶ç›¸æ¯”,使用一个纹ç†å›¾é›†æœ‰åŠ©"
+"于优化视频内存消耗和渲染调用。\n"
+"[b]注æ„:[/b] AtlasTextures䏿”¯æŒé‡å¤ã€‚当使用AtlasTexture时,[constant "
+"Texture.FLAG_REPEAT]和[constant Texture.FLAG_MIRRORED_REPEAT]标志被忽略。"
#: doc/classes/AtlasTexture.xml:17
-#, fuzzy
msgid "The texture that contains the atlas. Can be any [Texture] subtype."
-msgstr "包å«å›¾é›†çš„纹ç†ã€‚å¯ä»¥æ˜¯ä»»ä½• [Texture2D]å­ç±»åž‹ã€‚"
+msgstr "包å«å›¾é›†çš„纹ç†ã€‚å¯ä»¥æ˜¯ä»»ä½•[Texture]å­ç±»åž‹ã€‚"
#: doc/classes/AtlasTexture.xml:20
msgid ""
@@ -10434,7 +10508,7 @@ msgid ""
"(\"w\" and \"h\" in the editor) resizes the texture so it fits within the "
"margin."
msgstr ""
-"区域周围的边è·ã€‚Rect2]çš„[member Rect2.size]傿•°ï¼ˆç¼–辑器中的 \"w \"å’Œ \"h\")"
+"区域周围的边è·ã€‚[Rect2]çš„[member Rect2.size]傿•°ï¼ˆç¼–辑器中的 \"w \"å’Œ \"h\")"
"调整纹ç†çš„大å°ï¼Œä½¿å…¶é€‚åˆäºŽè¾¹è·ã€‚"
#: doc/classes/AtlasTexture.xml:27
@@ -10514,7 +10588,7 @@ msgstr ""
#: doc/classes/AudioEffectCapture.xml:4
msgid "Captures audio from an audio bus in real-time."
-msgstr ""
+msgstr "ä»ŽéŸ³é¢‘æ€»çº¿ä¸Šå®žæ—¶æ•æ‰éŸ³é¢‘。"
#: doc/classes/AudioEffectCapture.xml:7
msgid ""
@@ -10525,20 +10599,22 @@ msgid ""
"data from a microphone, implement application defined effects, or to "
"transmit audio over the network."
msgstr ""
+"音频效果æ•获是一ç§éŸ³é¢‘效果,å¯å°†æ‰€é™„音频效果总线的所有音频帧å¤åˆ¶åˆ°å…¶å†…部环缓"
+"冲器中。\n"
+"应用程åºä»£ç åº”使用 [method get_buffer]从该环缓冲器中消耗这些音频帧,并根æ®éœ€"
+"è¦è¿›è¡Œå¤„ç†ï¼Œä¾‹å¦‚从麦克风æ•获数æ®ã€å®žçŽ°åº”ç”¨ç¨‹åºå®šä¹‰çš„æ•ˆæžœæˆ–通过网络传输音频。"
#: doc/classes/AudioEffectCapture.xml:17
-#, fuzzy
msgid ""
"Returns [code]true[/code] if at least [code]frames[/code] audio frames are "
"available to read in the internal ring buffer."
msgstr ""
-"如果给定[code]name[/code]的字体在这个[Control]节点中具有有效的覆盖,则返回"
-"[code]true[/code]。"
+"如果内部环缓冲器中至少有[code]frames[/code]音频帧å¯ä¾›è¯»å–,则返回[code]true[/"
+"code]。"
#: doc/classes/AudioEffectCapture.xml:23
-#, fuzzy
msgid "Clears the internal ring buffer."
-msgstr "清除库。"
+msgstr "清除内部环缓冲区。"
#: doc/classes/AudioEffectCapture.xml:30
msgid ""
@@ -10548,35 +10624,35 @@ msgid ""
"samples if available, or an empty [PoolVector2Array] if insufficient data "
"was available."
msgstr ""
+"从内部环缓冲区获å–下一个[code]frames[/code]音频样本。\n"
+"如果有的è¯ï¼Œè¿”回一个正好包å«[code]frames[/code]音频样本的[PoolVector2Array],"
+"如果没有足够的数æ®ï¼Œåˆ™è¿”回一个空[PoolVector2Array]。"
#: doc/classes/AudioEffectCapture.xml:37
-#, fuzzy
msgid "Returns the total size of the internal ring buffer in frames."
-msgstr "返回文件的大å°ï¼Œä»¥å­—节(bytes)å½¢å¼ã€‚"
+msgstr "返回内部环缓冲区的总大å°ï¼Œä»¥å¸§ä¸ºå•ä½ã€‚"
#: doc/classes/AudioEffectCapture.xml:43
-#, fuzzy
msgid ""
"Returns the number of audio frames discarded from the audio bus due to full "
"buffer."
-msgstr "返回这个目录的å­ç›®å½•的数é‡ã€‚"
+msgstr "返回由于缓冲区满而从音频总线上丢弃的音频帧的数é‡ã€‚"
#: doc/classes/AudioEffectCapture.xml:49
-#, fuzzy
msgid ""
"Returns the number of frames available to read using [method get_buffer]."
-msgstr "返回环形缓冲区中当å‰å¯ç”¨çš„æ•°æ®åŒ…数。"
+msgstr "返回å¯ä½¿ç”¨ [method get_buffer] 读å–的帧数。"
#: doc/classes/AudioEffectCapture.xml:55
-#, fuzzy
msgid "Returns the number of audio frames inserted from the audio bus."
-msgstr "返回动画中的帧数。"
+msgstr "返回从音频总线æ’入的音频帧的数é‡ã€‚"
#: doc/classes/AudioEffectCapture.xml:61
msgid ""
"Length of the internal ring buffer, in seconds. Setting the buffer length "
"will have no effect if already initialized."
msgstr ""
+"内部环缓冲区的长度,å•使˜¯ç§’。如果已ç»åˆå§‹åŒ–,设置缓冲区长度将没有效果。"
#: doc/classes/AudioEffectChorus.xml:4
msgid "Adds a chorus audio effect."
@@ -10783,16 +10859,14 @@ msgid ""
msgstr "[code]tap2[/code]的平移ä½ç½®ã€‚值的范围为-1(完全å‘左)至1(完全å‘å³ï¼‰ã€‚"
#: doc/classes/AudioEffectDistortion.xml:4
-#, fuzzy
msgid ""
"Adds a distortion audio effect to an Audio bus.\n"
"Modify the sound to make it distorted."
msgstr ""
-"为音频总线添加失真音频效果。\n"
+"在音频总线上添加一个失真的音频效果。\n"
"修改声音,使其失真。"
#: doc/classes/AudioEffectDistortion.xml:8
-#, fuzzy
msgid ""
"Different types are available: clip, tan, lo-fi (bit crushing), overdrive, "
"or waveshape.\n"
@@ -10800,17 +10874,18 @@ msgid ""
"make the sound \"crunchy\" or \"abrasive\". For games, it can simulate sound "
"coming from some saturated device or speaker very efficiently."
msgstr ""
-"修改声音并使其混淆。å¯ç”¨çš„类型有: clip, tan, lo-fi (bit crushing), "
-"overdrive, or waveshape。\n"
-"通过使波形扭曲,频率内容会å‘生å˜åŒ–,这通常会使声音“嘎å±â€æˆ–“磨砂â€ã€‚对于游æˆï¼Œ"
-"它å¯ä»¥éžå¸¸æœ‰æ•ˆåœ°æ¨¡æ‹Ÿæ¥è‡ªæŸäº›é¥±å’Œè®¾å¤‡æˆ–扬声器的声音。"
+"æä¾›ä¸åŒç±»åž‹çš„类型:clip, tan, lo-fi (bit crushing), overdrive, or "
+"waveshape.\n"
+"通过扭曲波形,频率内容会å‘生å˜åŒ–,这通常会使声音\"清脆\"或\"ç²—ç³™\"。对于游"
+"æˆï¼Œå®ƒå¯ä»¥éžå¸¸æœ‰æ•ˆåœ°æ¨¡æ‹Ÿæ¥è‡ªä¸€äº›é¥±å’Œè®¾å¤‡æˆ–扬声器的声音。"
#: doc/classes/AudioEffectDistortion.xml:12
#: doc/classes/AudioEffectFilter.xml:10
#: doc/classes/AudioEffectHighShelfFilter.xml:9
#: doc/classes/AudioEffectLowShelfFilter.xml:9 doc/classes/AudioServer.xml:10
msgid "https://docs.godotengine.org/en/3.4/tutorials/audio/audio_buses.html"
-msgstr "https://docs.godotengine.org/en/3.4/tutorials/audio/audio_buses.html"
+msgstr ""
+"https://docs.godotengine.org/zh_CN/stable/tutorials/audio/audio_buses.html"
#: doc/classes/AudioEffectDistortion.xml:18
msgid "Distortion power. Value can range from 0 to 1."
@@ -10934,7 +11009,7 @@ msgstr ""
"频段8:4000赫兹\n"
"频段9:8000赫兹\n"
"频段10:16000赫兹\n"
-"å¦è§[AudioEffectEQ]ã€[AudioEffectEQ6]ã€[AudioEffectEQ21]。"
+"å‚阅[AudioEffectEQ]ã€[AudioEffectEQ6]ã€[AudioEffectEQ21]。"
#: doc/classes/AudioEffectEQ21.xml:4
msgid ""
@@ -10993,7 +11068,7 @@ msgstr ""
"频段19:11000赫兹\n"
"频段20:16000赫兹\n"
"频段21:22000赫兹\n"
-"å¦è§[AudioEffectEQ]ã€[AudioEffectEQ6]ã€[AudioEffectEQ10]。"
+"å‚阅[AudioEffectEQ]ã€[AudioEffectEQ6]ã€[AudioEffectEQ10]。"
#: doc/classes/AudioEffectEQ6.xml:4
msgid ""
@@ -11041,9 +11116,8 @@ msgid "Gain amount of the frequencies after the filter."
msgstr "滤波åŽé¢‘率的增益é‡ã€‚"
#: doc/classes/AudioEffectFilter.xml:24
-#, fuzzy
msgid "Amount of boost in the frequency range near the cutoff frequency."
-msgstr "在截止频率附近泛音的æå‡é‡ã€‚"
+msgstr "在截断频率附近的频率范围内的æå‡é‡ã€‚"
#: doc/classes/AudioEffectHighPassFilter.xml:4
msgid "Adds a high-pass filter to the Audio Bus."
@@ -11057,10 +11131,8 @@ msgstr ""
"å‰Šå‡æ¯”[member AudioEffectFilter.cutoff_hz]更低的频率,å…许更高的频率通过。"
#: doc/classes/AudioEffectHighShelfFilter.xml:4
-#, fuzzy
msgid "Reduces all frequencies above the [member AudioEffectFilter.cutoff_hz]."
-msgstr ""
-"å‰Šå‡æ¯”[member AudioEffectFilter.cutoff_hz]更低的频率,å…许更高的频率通过。"
+msgstr "é™ä½Žæ‰€æœ‰é«˜äºŽ[member AudioEffectFilter.cutoff_hz]的频率。"
#: doc/classes/AudioEffectLimiter.xml:4
msgid "Adds a soft-clip limiter audio effect to an Audio bus."
@@ -11110,10 +11182,8 @@ msgstr ""
"å‰Šå‡æ¯”[member AudioEffectFilter.cutoff_hz]更低的频率,å…许更高的频率通过。"
#: doc/classes/AudioEffectLowShelfFilter.xml:4
-#, fuzzy
msgid "Reduces all frequencies below the [member AudioEffectFilter.cutoff_hz]."
-msgstr ""
-"å‰Šå‡æ¯”[member AudioEffectFilter.cutoff_hz]更低的频率,å…许更高的频率通过。"
+msgstr "é™ä½Ž[member AudioEffectFilter.cutoff_hz]以下的所有频率。"
#: doc/classes/AudioEffectNotchFilter.xml:4
msgid "Adds a notch filter to the Audio bus."
@@ -11208,6 +11278,9 @@ msgid ""
"this higher latency are especially noticeable on sounds that have sudden "
"amplitude changes."
msgstr ""
+"[url=https://en.wikipedia.org/wiki/Fast_Fourier_transform]快速傅里å¶å˜æ¢[/"
+"url]缓冲区的大å°ã€‚较高的数值å¯ä»¥ä½¿æ•ˆæžœéšæ—¶é—´å¹³æ»‘ï¼Œä½†æœ‰è¾ƒå¤§çš„å»¶è¿Ÿã€‚è¿™ç§è¾ƒé«˜çš„"
+"延迟对有çªç„¶å¹…度å˜åŒ–的声音的影å“特别明显。"
#: doc/classes/AudioEffectPitchShift.xml:19
msgid ""
@@ -11215,6 +11288,8 @@ msgid ""
"are more demanding on the CPU and may cause audio cracking if the CPU can't "
"keep up."
msgstr ""
+"è¦ä½¿ç”¨çš„è¿‡é‡‡æ ·ç³»æ•°ã€‚æ›´é«˜çš„å€¼ä¼šå¸¦æ¥æ›´å¥½çš„è´¨é‡ï¼Œä½†å¯¹CPUçš„è¦æ±‚更高,如果CPUè·Ÿä¸"
+"上,å¯èƒ½ä¼šå¯¼è‡´éŸ³é¢‘破裂。"
#: doc/classes/AudioEffectPitchShift.xml:22
msgid ""
@@ -11223,6 +11298,9 @@ msgid ""
"(infinitely low pitch, inaudible) to [code]16[/code] (16 times higher than "
"the initial pitch)."
msgstr ""
+"è¦ä½¿ç”¨çš„音阶。[code]1.0[/code]是默认的音高,播放的声音没有改å˜ã€‚[member "
+"pitch_scale]的范围从[code]0.0[/code](无é™ä½Žçš„音调,å¬ä¸è§ï¼‰åˆ°[code]16[/code]"
+"(比åˆå§‹éŸ³è°ƒé«˜16å€ï¼‰ã€‚"
#: doc/classes/AudioEffectPitchShift.xml:27
#: doc/classes/AudioEffectSpectrumAnalyzer.xml:28
@@ -11230,6 +11308,8 @@ msgid ""
"Use a buffer of 256 samples for the Fast Fourier transform. Lowest latency, "
"but least stable over time."
msgstr ""
+"使用 256 个样å“的缓冲器进行快速傅里å¶å˜æ¢ã€‚最低延迟,但éšç€æ—¶é—´çš„æŽ¨ç§»æœ€ä¸ç¨³"
+"定。"
#: doc/classes/AudioEffectPitchShift.xml:30
#: doc/classes/AudioEffectSpectrumAnalyzer.xml:31
@@ -11237,6 +11317,7 @@ msgid ""
"Use a buffer of 512 samples for the Fast Fourier transform. Low latency, but "
"less stable over time."
msgstr ""
+"使用 512 个样本的缓冲器进行快速傅里å¶å˜æ¢ã€‚低延迟,但éšç€æ—¶é—´çš„æŽ¨ç§»ä¸å¤ªç¨³å®šã€‚"
#: doc/classes/AudioEffectPitchShift.xml:33
#: doc/classes/AudioEffectSpectrumAnalyzer.xml:34
@@ -11244,6 +11325,8 @@ msgid ""
"Use a buffer of 1024 samples for the Fast Fourier transform. This is a "
"compromise between latency and stability over time."
msgstr ""
+"使用 1024 个样本的缓冲器进行快速傅里å¶å˜æ¢ã€‚éšç€æ—¶é—´çš„æŽ¨ç§»ï¼Œè¿™æ˜¯å»¶è¿Ÿå’Œç¨³å®šæ€§"
+"之间的折衷。"
#: doc/classes/AudioEffectPitchShift.xml:36
#: doc/classes/AudioEffectSpectrumAnalyzer.xml:37
@@ -11251,6 +11334,7 @@ msgid ""
"Use a buffer of 2048 samples for the Fast Fourier transform. High latency, "
"but stable over time."
msgstr ""
+"使用 2048 个样å“的缓冲器进行快速傅里å¶å˜æ¢ã€‚éšç€æ—¶é—´çš„æŽ¨ç§»ï¼Œå»¶è¿Ÿé«˜ä½†ç¨³å®šã€‚"
#: doc/classes/AudioEffectPitchShift.xml:39
#: doc/classes/AudioEffectSpectrumAnalyzer.xml:40
@@ -11258,6 +11342,8 @@ msgid ""
"Use a buffer of 4096 samples for the Fast Fourier transform. Highest "
"latency, but most stable over time."
msgstr ""
+"使用 4096 个样å“的缓冲器进行快速傅里å¶å˜æ¢ã€‚éšç€æ—¶é—´çš„æŽ¨ç§»ï¼Œå»¶è¿Ÿæœ€é«˜ä½†æœ€ç¨³"
+"定。"
#: doc/classes/AudioEffectPitchShift.xml:42
#: doc/classes/AudioEffectSpectrumAnalyzer.xml:43
@@ -11283,7 +11369,7 @@ msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/audio/"
"recording_with_microphone.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/audio/"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/audio/"
"recording_with_microphone.html"
#: doc/classes/AudioEffectRecord.xml:17
@@ -11374,7 +11460,7 @@ msgstr "输出修改åŽå£°éŸ³çš„百分比。在0时,åªè¾“出原始声音。å€
#: doc/classes/AudioEffectSpectrumAnalyzer.xml:4
msgid "Audio effect that can be used for real-time audio visualizations."
-msgstr ""
+msgstr "å¯ç”¨äºŽå®žæ—¶éŸ³é¢‘å¯è§†åŒ–的音频效果。"
#: doc/classes/AudioEffectSpectrumAnalyzer.xml:7
msgid ""
@@ -11382,6 +11468,8 @@ msgid ""
"time audio visualizations.\n"
"See also [AudioStreamGenerator] for procedurally generating sounds."
msgstr ""
+"è¿™ç§éŸ³é¢‘效果ä¸å½±å“声音输出,但å¯ä»¥ç”¨äºŽå®žæ—¶éŸ³é¢‘å¯è§†åŒ–。\n"
+"å‚阅[AudioStreamGenerator],以程åºåŒ–地生æˆå£°éŸ³ã€‚"
#: doc/classes/AudioEffectSpectrumAnalyzer.xml:11
msgid "Audio Spectrum Demo"
@@ -11398,6 +11486,8 @@ msgid ""
"The length of the buffer to keep (in seconds). Higher values keep data "
"around for longer, but require more memory."
msgstr ""
+"è¦ä¿ç•™çš„缓冲区长度(以秒为å•ä½ï¼‰ã€‚较高的值将数æ®ä¿å­˜çš„æ—¶é—´æ›´é•¿ï¼Œä½†éœ€è¦æ›´å¤šçš„"
+"内存。"
#: doc/classes/AudioEffectSpectrumAnalyzer.xml:21
msgid ""
@@ -11407,6 +11497,9 @@ msgid ""
"effects of this higher latency are especially noticeable with sudden "
"amplitude changes."
msgstr ""
+"[url=https://en.wikipedia.org/wiki/Fast_Fourier_transform]快速傅里å¶å˜æ¢[/"
+"url]缓冲区的大å°ã€‚较高的值å¯ä»¥ä½¿é¢‘谱分æžéšæ—¶é—´çš„æŽ¨ç§»è€Œå¹³æ»‘ï¼Œä½†æœ‰è¾ƒå¤§çš„å»¶è¿Ÿã€‚"
+"è¿™ç§è¾ƒé«˜å»¶è¿Ÿçš„å½±å“在çªç„¶çš„æŒ¯å¹…å˜åŒ–中特别明显。"
#: doc/classes/AudioEffectSpectrumAnalyzerInstance.xml:21
msgid "Use the average value as magnitude."
@@ -11687,7 +11780,8 @@ msgstr ""
#: doc/classes/AudioStreamPlayer2D.xml:12
#: doc/classes/AudioStreamPlayer3D.xml:13
msgid "https://docs.godotengine.org/en/3.4/tutorials/audio/audio_streams.html"
-msgstr "https://docs.godotengine.org/en/3.4/tutorials/audio/audio_streams.html"
+msgstr ""
+"https://docs.godotengine.org/zh_CN/stable/tutorials/audio/audio_streams.html"
#: doc/classes/AudioStream.xml:11 doc/classes/AudioStreamGenerator.xml:12
#: doc/classes/AudioStreamGeneratorPlayback.xml:10
@@ -11715,6 +11809,12 @@ msgid ""
"class from GDScript, consider using a lower [member mix_rate] such as 11,025 "
"Hz or 22,050 Hz."
msgstr ""
+"此音频æµä¸æ’­æ”¾å£°éŸ³ï¼Œéœ€è¦è„šæœ¬ä¸ºå…¶ç”ŸæˆéŸ³é¢‘æ•°æ®ã€‚å‚阅"
+"[AudioStreamGeneratorPlayback]。\n"
+"å¦è¯·å‚阅 [AudioEffectSpectrumAnalyzer] 用于执行实时音频频谱分æžã€‚\n"
+"[b]注æ„:[/b] 由于性能é™åˆ¶ï¼Œæœ€å¥½ä»Ž C# 或通过 GDNative 编译的语言中使用此类。"
+"如果你ä»ç„¶æƒ³ä»ŽGDScript中使用这个类,请考虑使用较低的 [member mix_rate],例如 "
+"11,025 Hz 或 22,050 Hz。"
#: doc/classes/AudioStreamGenerator.xml:19
msgid ""
@@ -11723,6 +11823,9 @@ msgid ""
"resulting in increased CPU usage and more risk for audio cracking if the CPU "
"can't keep up."
msgstr ""
+"è¦ç”Ÿæˆçš„缓冲区的长度,以秒为å•ä½ã€‚è¾ƒä½Žçš„å€¼ä¼šå¸¦æ¥æ›´å°‘的延迟,但需è¦è„šæœ¬æ›´å¿«åœ°"
+"生æˆéŸ³é¢‘æ•°æ®ï¼Œä»Žè€Œå¯¼è‡´ CPU 使用率增加,如果 CPU è·Ÿä¸ä¸Šï¼Œåˆ™éŸ³é¢‘破裂的风险更"
+"大。"
#: doc/classes/AudioStreamGenerator.xml:22
msgid ""
@@ -11739,6 +11842,14 @@ msgid ""
"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
+"使用的采样率(å•ä½ï¼šHz)。更高的值对CPUè¦æ±‚æ›´é«˜ï¼Œä½†ä¼šå¸¦æ¥æ›´å¥½çš„è´¨é‡ã€‚\n"
+"在游æˆä¸­ï¼Œå¸¸ç”¨çš„采样率有[code]11025[/code]ã€[code]16000[/code]ã€[code]22050[/"
+"code]ã€[code]32000[/code]ã€[code]44100[/code]å’Œ[code]48000[/code]。\n"
+"æ ¹æ®[url=https://en.wikipedia.org/wiki/Nyquist"
+"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon采样定ç†[/url],当超过40000"
+"赫兹时,人类的å¬è§‰æ²¡æœ‰è´¨é‡ä¸Šçš„差别(因为大多数人åªèƒ½å¬åˆ°~20000赫兹,往往更"
+"少)。如果你è¦ç”Ÿæˆè¾ƒä½ŽéŸ³è°ƒçš„声音,例如语音,则å¯ä»¥ä½¿ç”¨è¾ƒä½Žçš„采样率,例如 "
+"[code]32000[/code] 或 [code]22050[/code],而ä¸ä¼šé™ä½Žè´¨é‡ã€‚"
#: doc/classes/AudioStreamGeneratorPlayback.xml:4
msgid "Plays back audio generated using [AudioStreamGenerator]."
@@ -11748,22 +11859,20 @@ msgstr "播放使用[AudioStreamGenerator]生æˆçš„音频。"
msgid ""
"This class is meant to be used with [AudioStreamGenerator] to play back the "
"generated audio in real-time."
-msgstr ""
+msgstr "此类旨在与 [AudioStreamGenerator] 一起使用以实时播放生æˆçš„音频。"
#: doc/classes/AudioStreamGeneratorPlayback.xml:18
-#, fuzzy
msgid ""
"Returns [code]true[/code] if a buffer of the size [code]amount[/code] can be "
"pushed to the audio sample data buffer without overflowing it, [code]false[/"
"code] otherwise."
msgstr ""
-"如果[member cull_mask]中给定的[code]layer[/code]被å¯ç”¨ï¼Œè¿”回[code]true[/"
-"code],å¦åˆ™è¿”回[code]false[/code]。"
+"如果å¯ä»¥å°†å¤§å°ä¸º [code]amount[/code] 的缓冲区推é€åˆ°éŸ³é¢‘采样数æ®ç¼“冲区而ä¸ä½¿å…¶"
+"溢出,则返回 [code]true[/code],å¦åˆ™è¿”回 [code]false[/code]。"
#: doc/classes/AudioStreamGeneratorPlayback.xml:24
-#, fuzzy
msgid "Clears the audio sample data buffer."
-msgstr "包å«ä»¥å­—节为å•ä½çš„音频数æ®ã€‚"
+msgstr "清除音频样本数æ®ç¼“冲区。"
#: doc/classes/AudioStreamGeneratorPlayback.xml:30
msgid ""
@@ -11772,6 +11881,9 @@ msgid ""
"added again. Therefore, make sure your script can always generate and push "
"new audio frames fast enough to avoid audio cracking."
msgstr ""
+"è¿”å›žè¦æ’­æ”¾çš„音频数æ®å¸§æ•°ã€‚如果返回的数字达到 [code]0[/code]ï¼ŒéŸ³é¢‘å°†åœæ­¢æ’­æ”¾ï¼Œ"
+"ç›´åˆ°å†æ¬¡æ·»åŠ å¸§ã€‚å› æ­¤ï¼Œè¯·ç¡®ä¿ä½ çš„脚本始终能够以足够快的速度生æˆå’ŒæŽ¨é€æ–°çš„音频"
+"帧,以é¿å…音频破裂。"
#: doc/classes/AudioStreamGeneratorPlayback.xml:42
msgid ""
@@ -11779,6 +11891,9 @@ msgid ""
"efficient than [method push_frame] in C# and compiled languages via "
"GDNative, but [method push_buffer] may be [i]less[/i] efficient in GDScript."
msgstr ""
+"将多个音频数æ®å¸§æŽ¨é€åˆ°ç¼“冲区。这通常比 C# 中的 [method push_frame] 和通过 "
+"GDNative 编译的语言更有效,但 [method push_buffer] 在 GDScript 中的效率å¯èƒ½ "
+"[i]低[/i]。"
#: doc/classes/AudioStreamGeneratorPlayback.xml:49
msgid ""
@@ -11786,6 +11901,9 @@ msgid ""
"efficient than [method push_buffer] in C# and compiled languages via "
"GDNative, but [method push_frame] may be [i]more[/i] efficient in GDScript."
msgstr ""
+"å°†å•个音频数æ®å¸§æŽ¨é€åˆ°ç¼“冲区。在C#和通过GDNative编译的语言中,这通常比"
+"[method push_buffer]效率低,但在GDScript中[method push_frame]å¯èƒ½[i]更高效[/"
+"i]。"
#: modules/minimp3/doc_classes/AudioStreamMP3.xml:4
#: modules/minimp3/doc_classes/AudioStreamMP3.xml:7
@@ -11836,6 +11954,9 @@ msgid ""
"To play audio positionally, use [AudioStreamPlayer2D] or "
"[AudioStreamPlayer3D] instead of [AudioStreamPlayer]."
msgstr ""
+"以éžä½ç½®æ–¹å¼æ”¯æŒæ’­æ”¾éŸ³é¢‘æµã€‚\n"
+"è¦åœ¨ä½ç½®ä¸Šæ’­æ”¾éŸ³é¢‘,请使用[AudioStreamPlayer2D]或[AudioStreamPlayer3D]è€Œä¸æ˜¯"
+"[AudioStreamPlayer]。"
#: doc/classes/AudioStreamPlayer.xml:22
msgid "Returns the position in the [AudioStream] in seconds."
@@ -11923,9 +12044,8 @@ msgid ""
msgstr "音频将在第二通é“,也就是通常的中央播放。"
#: doc/classes/AudioStreamPlayer2D.xml:4
-#, fuzzy
msgid "Plays positional sound in 2D space."
-msgstr "在3D空间中播放3D声音。"
+msgstr "在 2D 空间中播放ä½ç½®å£°éŸ³ã€‚"
#: doc/classes/AudioStreamPlayer2D.xml:7
msgid ""
@@ -11936,6 +12056,11 @@ msgid ""
"[member volume_db] to a very low value like [code]-100[/code] (which isn't "
"audible to human hearing)."
msgstr ""
+"播放音频,éšç€ä¸Žå±å¹•中心的è·ç¦»è€Œå‡å¼±ã€‚\n"
+"å‚阅[AudioStreamPlayer]æ¥æ’­æ”¾éžä½ç½®æ€§çš„声音。\n"
+"[b]注æ„:[/b] éšè—一个[AudioStreamPlayer2D]节点并ä¸èƒ½ç¦ç”¨å…¶éŸ³é¢‘è¾“å‡ºã€‚è¦æš‚æ—¶ç¦"
+"用[AudioStreamPlayer2D]的音频输出,请将[member volume_db]设置为一个éžå¸¸ä½Žçš„"
+"值,如[code]-100[/code](人的å¬è§‰å¬ä¸åˆ°ï¼‰ã€‚"
#: doc/classes/AudioStreamPlayer2D.xml:18
#: doc/classes/AudioStreamPlayer3D.xml:19
@@ -11973,9 +12098,8 @@ msgid "Base volume without dampening."
msgstr "基础音é‡ï¼Œæ— è¡°å‡ã€‚"
#: doc/classes/AudioStreamPlayer3D.xml:4
-#, fuzzy
msgid "Plays positional sound in 3D space."
-msgstr "在3D空间中播放3D声音。"
+msgstr "在 3D 空间中播放ä½ç½®å£°éŸ³ã€‚"
#: doc/classes/AudioStreamPlayer3D.xml:7
msgid ""
@@ -11993,6 +12117,15 @@ msgid ""
"[member unit_db] to a very low value like [code]-100[/code] (which isn't "
"audible to human hearing)."
msgstr ""
+"æ’­æ”¾å…·æœ‰å®šå‘æ€§çš„声音效果,如果需è¦ï¼Œå¯éšç€è·ç¦»çš„增加而å‡å¼±ï¼Œäº§ç”Ÿç©ºé—´ä¸­å¯å¬åˆ°"
+"çš„ä½ç½®æ•ˆæžœã€‚为了更逼真,低通滤波器会自动应用于远处的声音。这å¯ä»¥é€šè¿‡è®¾ç½®"
+"[member attenuation_filter_cutoff_hz]为[code]20500[/code]æ¥ç¦ç”¨ã€‚\n"
+"默认情况下,音频是从相机的ä½ç½®å¬åˆ°çš„,这å¯ä»¥é€šè¿‡åœ¨åœºæ™¯ä¸­æ·»åŠ ä¸€ä¸ª[Listener]节"
+"点,并通过对其调用[method Listener.make_current]æ¥å¯ç”¨å®ƒï¼Œä»¥æ”¹å˜ã€‚\n"
+"å‚阅[AudioStreamPlayer]æ¥æ’­æ”¾éžä½ç½®çš„声音。\n"
+"[b]注æ„:[/b] éšè—一个[AudioStreamPlayer3D]节点并ä¸èƒ½ç¦ç”¨å…¶éŸ³é¢‘è¾“å‡ºã€‚è¦æš‚æ—¶ç¦"
+"用[AudioStreamPlayer3D]的音频输出,请将[member unit_db]设置为一个éžå¸¸ä½Žçš„值,"
+"如[code]-100[/code](人的å¬è§‰å¬ä¸åˆ°ï¼‰ã€‚"
#: doc/classes/AudioStreamPlayer3D.xml:25
msgid ""
@@ -12006,11 +12139,12 @@ msgid ""
"disable the dampening effect entirely, set this to [code]20500[/code] as "
"this frequency is above the human hearing limit."
msgstr ""
+"使用高于此频率的低通滤波器衰å‡éŸ³é¢‘,以 Hz 为å•ä½ã€‚è¦å®Œå…¨ç¦ç”¨é˜»å°¼æ•ˆæžœï¼Œè¯·å°†å…¶"
+"设置为 [code]20500[/code],因为该频率高于人类å¬åŠ›æžé™ã€‚"
#: doc/classes/AudioStreamPlayer3D.xml:57
-#, fuzzy
msgid "Amount how much the filter affects the loudness, in decibels."
-msgstr "滤波器对å“度的影å“程度,å•ä½ä¸ºdB。"
+msgstr "滤波器对å“度的影å“程度,以分è´ä¸ºå•ä½ã€‚"
#: doc/classes/AudioStreamPlayer3D.xml:60
msgid ""
@@ -12022,14 +12156,14 @@ msgstr ""
"用衰å‡ã€‚"
#: doc/classes/AudioStreamPlayer3D.xml:63
-#, fuzzy
msgid ""
"If [code]true[/code], audio plays when the AudioStreamPlayer3D node is added "
"to scene tree."
-msgstr "如果[code]true[/code],则在添加到场景树时播放音频。"
+msgstr ""
+"如果 [code]true[/code],则在将 AudioStreamPlayer3D 节点添加到场景树时播放音"
+"频。"
#: doc/classes/AudioStreamPlayer3D.xml:66
-#, fuzzy
msgid "The bus on which this audio is playing."
msgstr "播放此音频的总线。"
@@ -12041,6 +12175,10 @@ msgid ""
"doppler_tracking] property is set to a value other than [constant Camera."
"DOPPLER_TRACKING_DISABLED]."
msgstr ""
+"决定 [url=https://en.wikipedia.org/wiki/Doppler_effect] 多普勒效应 [/url] 应"
+"该在哪一步计算。\n"
+"[b]注æ„:[/b]仅当当å‰[Camera]çš„[member Camera.doppler_tracking]属性设置为"
+"[constant Camera.DOPPLER_TRACKING_DISABLED]以外的值时有效。"
#: doc/classes/AudioStreamPlayer3D.xml:73
msgid "The angle in which the audio reaches cameras undampened."
@@ -12053,18 +12191,16 @@ msgid ""
msgstr "如果[code]true[/code],则应根æ®å£°éŸ³çš„æ–¹å‘对音频进行衰å‡ã€‚"
#: doc/classes/AudioStreamPlayer3D.xml:79
-#, fuzzy
msgid ""
"Dampens audio if camera is outside of [member emission_angle_degrees] and "
"[member emission_angle_enabled] is set by this factor, in decibels."
msgstr ""
-"如果相机在[membermission_angle_degrees]ä¹‹å¤–ï¼Œå¹¶ä»¥æ­¤å‚æ•°è®¾ç½®"
-"[membermission_angle_enabled],则衰å‡éŸ³é¢‘,以dB为å•ä½ã€‚"
+"如果样机在[member emission_angle_degrees]之外,并且[member "
+"emission_angle_enabled]被设置为这个系数,则对音频进行å‡å¼±ï¼Œå•使˜¯åˆ†è´ã€‚"
#: doc/classes/AudioStreamPlayer3D.xml:82
-#, fuzzy
msgid "Sets the absolute maximum of the soundlevel, in decibels."
-msgstr "设置声级的ç»å¯¹æœ€å¤§å€¼ï¼Œå•ä½ä¸ºdB。"
+msgstr "设置声级的ç»å¯¹æœ€å¤§å€¼ï¼Œä»¥åˆ†è´ä¸ºå•ä½ã€‚"
#: doc/classes/AudioStreamPlayer3D.xml:85
msgid ""
@@ -12079,29 +12215,26 @@ msgid ""
msgstr "决定当音æºè¶…出 [member max_distance] 范围时,是å¦åº”该暂åœéŸ³é¢‘。"
#: doc/classes/AudioStreamPlayer3D.xml:97
-#, fuzzy
msgid "The [AudioStream] resource to be played."
-msgstr "è¦æ’­æ”¾çš„[AudioStream]对象。"
+msgstr "è¦æ’­æ”¾çš„[AudioStream]资æºã€‚"
#: doc/classes/AudioStreamPlayer3D.xml:100
-#, fuzzy
msgid ""
"If [code]true[/code], the playback is paused. You can resume it by setting "
"[member stream_paused] to [code]false[/code]."
msgstr ""
-"如果 [code]true[/code]ï¼Œåˆ™æš‚åœæ’­æ”¾ã€‚您å¯ä»¥é€šè¿‡å°† [code]stream_paused[/code] "
-"设置为 [code]false[/code] æ¥æ¢å¤æ’­æ”¾ã€‚"
+"如果[code]true[/code],则播放会暂åœã€‚ä½ å¯ä»¥é€šè¿‡è®¾ç½®[member stream_paused]为"
+"[code]false[/code]æ¥æ¢å¤å®ƒã€‚"
#: doc/classes/AudioStreamPlayer3D.xml:103
-#, fuzzy
msgid "The base sound level unaffected by dampening, in decibels."
-msgstr "未å—阻尼影å“的基本声级,å•ä½ä¸ºdB。"
+msgstr "ä¸å—阻尼影å“的基本声级,å•ä½ä¸ºåˆ†è´ã€‚"
#: doc/classes/AudioStreamPlayer3D.xml:106
msgid ""
"The factor for the attenuation effect. Higher values make the sound audible "
"over a larger distance."
-msgstr ""
+msgstr "è¡°å‡æ•ˆæžœçš„系数。更高的值使声音在更远的è·ç¦»å¯ä»¥å¬åˆ°ã€‚"
#: doc/classes/AudioStreamPlayer3D.xml:118
msgid "Linear dampening of loudness according to distance."
@@ -12123,6 +12256,9 @@ msgid ""
"greater than [code]0.0[/code] to achieve linear attenuation clamped to a "
"sphere of a defined size."
msgstr ""
+"ä¸ä¼šæ ¹æ®è·ç¦»è¡°å‡å“度。与 [AudioStreamPlayer] ä¸åŒï¼Œå£°éŸ³ä»ä¼šåœ¨ä½ç½®ä¸Šè¢«å¬åˆ°ã€‚ "
+"[constant ATTENUATION_DISABLED] å¯ä»¥ä¸Žå¤§äºŽ [code]0.0[/code] çš„ [member "
+"max_distance] 值结åˆä½¿ç”¨ï¼Œä»¥å®žçŽ°çº¿æ€§è¡°å‡ï¼Œé™åˆ¶åœ¨å®šä¹‰çš„çƒä½“大å°ã€‚"
#: doc/classes/AudioStreamPlayer3D.xml:130
msgid ""
@@ -12130,6 +12266,9 @@ msgid ""
"but keeps the sound playing at the correct position if the camera leaves and "
"enters the [AudioStreamPlayer3D]'s [member max_distance] radius."
msgstr ""
+"将此音频混åˆï¼Œå³ä½¿å®ƒè¶…出范围。这会增加 CPU 使用率,但如果相机离开并进入 "
+"[AudioStreamPlayer3D] çš„ [member max_distance] åŠå¾„ï¼Œåˆ™ä¿æŒå£°éŸ³åœ¨æ­£ç¡®çš„ä½ç½®æ’­"
+"放。"
#: doc/classes/AudioStreamPlayer3D.xml:133
msgid ""
@@ -12137,21 +12276,21 @@ msgid ""
"will cause the sound to restart if the camera leaves and enters the "
"[AudioStreamPlayer3D]'s [member max_distance] radius."
msgstr ""
+"è¶…å‡ºèŒƒå›´æ—¶æš‚åœæ­¤éŸ³é¢‘。这会é™ä½Ž CPU 使用率,但如果相机离开并进入 "
+"[AudioStreamPlayer3D] çš„ [member max_distance] åŠå¾„ï¼Œåˆ™ä¼šä½¿å£°éŸ³é‡æ–°å¼€å§‹ã€‚"
#: doc/classes/AudioStreamPlayer3D.xml:136
msgid "Disables doppler tracking."
msgstr "ç¦ç”¨å¤šæ™®å‹’跟踪。"
#: doc/classes/AudioStreamPlayer3D.xml:139
-#, fuzzy
msgid "Executes doppler tracking in idle step (every rendered frame)."
-msgstr "以空闲步骤执行多普勒跟踪。"
+msgstr "åœ¨ç©ºé—²çš„æ­¥éª¤ä¸­æ‰§è¡Œå¤šæ™®å‹’è·Ÿè¸ªï¼ˆæ¯æ¸²æŸ“一帧)。"
#: doc/classes/AudioStreamPlayer3D.xml:142
-#, fuzzy
msgid ""
"Executes doppler tracking in physics step (every simulated physics frame)."
-msgstr "在物ç†è¿ç®—步骤中执行doppler(多普勒)跟踪。"
+msgstr "åœ¨ç‰©ç†æ­¥éª¤ä¸­æ‰§è¡Œå¤šæ™®å‹’跟踪(æ¯ä¸ªæ¨¡æ‹Ÿçš„物ç†å¸§ï¼‰ã€‚"
#: doc/classes/AudioStreamRandomPitch.xml:4
msgid "Plays audio with random pitch shifting."
@@ -12174,7 +12313,6 @@ msgid "Stores audio data loaded from WAV files."
msgstr "存储从WAV文件加载的音频数æ®ã€‚"
#: doc/classes/AudioStreamSample.xml:7
-#, fuzzy
msgid ""
"AudioStreamSample stores sound samples loaded from WAV files. To play the "
"stored sound, use an [AudioStreamPlayer] (for non-positional audio) or "
@@ -12183,10 +12321,11 @@ msgid ""
"This class can also be used to store dynamically-generated PCM audio data. "
"See also [AudioStreamGenerator] for procedural audio generation."
msgstr ""
-"AudioStreamSample存储从WAVæ–‡ä»¶åŠ è½½çš„å£°éŸ³æ ·æœ¬ã€‚è¦æ’­æ”¾å­˜å‚¨çš„声音,请使用"
-"[AudioStreamPlayer](用于éžå®šä½éŸ³é¢‘)或[AudioStreamPlayer2D]/"
-"[AudioStreamPlayer3D](用于定ä½éŸ³é¢‘)。声音å¯ä»¥è¢«å¾ªçŽ¯æ’­æ”¾ã€‚\n"
-"这个类也å¯ä»¥ç”¨æ¥å­˜å‚¨åЍæ€ç”Ÿæˆçš„PCM音频数æ®ã€‚"
+"AudioStreamSample 存储从 WAV æ–‡ä»¶åŠ è½½çš„å£°éŸ³æ ·æœ¬ã€‚è¦æ’­æ”¾å­˜å‚¨çš„声音,请使用 "
+"[AudioStreamPlayer](用于éžå®šä½éŸ³é¢‘)或 [AudioStreamPlayer2D]/"
+"[AudioStreamPlayer3D](用于定ä½éŸ³é¢‘)。声音å¯ä»¥å¾ªçŽ¯æ’­æ”¾ã€‚\n"
+"此类还å¯ç”¨äºŽå­˜å‚¨åЍæ€ç”Ÿæˆçš„ PCM 音频数æ®ã€‚å¦è¯·å‚阅 [AudioStreamGenerator] 以了"
+"解程åºéŸ³é¢‘生æˆã€‚"
#: doc/classes/AudioStreamSample.xml:17
msgid ""
@@ -12253,6 +12392,14 @@ msgid ""
"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
+"æ··åˆè¿™ä¸ªéŸ³é¢‘çš„é‡‡æ ·çŽ‡ã€‚æ›´é«˜çš„æ•°å€¼éœ€è¦æ›´å¤šçš„å­˜å‚¨ç©ºé—´ï¼Œä½†ä¼šå¸¦æ¥æ›´å¥½çš„è´¨é‡ã€‚\n"
+"在游æˆä¸­ï¼Œå¸¸ç”¨çš„采样率有[code]11025[/code]ã€[code]16000[/code]ã€[code]22050[/"
+"code]ã€[code]32000[/code]ã€[code]44100[/code],以åŠ[code]48000[/code]。\n"
+"æ ¹æ®[url=https://en.wikipedia.org/wiki/Nyquist"
+"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon采样定ç†[/url],当超过40000"
+"赫兹时,对于人的å¬è§‰æ²¡æœ‰è´¨é‡ä¸Šçš„差别(因为大多数人åªèƒ½å¬åˆ°~20000赫兹,往往更"
+"少)。如果你使用低音调的声音,如语音,较低的采样率,如[code]32000[/code]或"
+"[code]22050[/code]å¯èƒ½æ˜¯å¯ç”¨çš„,没有质é‡ä¸Šçš„æŸå¤±ã€‚"
#: doc/classes/AudioStreamSample.xml:45
msgid "If [code]true[/code], audio is stereo."
@@ -12306,7 +12453,6 @@ msgstr ""
"texture(SCREEN_TEXTURE,...)[/code]函数在ç€è‰²å™¨è„šæœ¬ä¸­å¯¹å…¶è¿›è¡Œè®¿é—®ã€‚"
#: doc/classes/BackBufferCopy.xml:7
-#, fuzzy
msgid ""
"Node for back-buffering the currently-displayed screen. The region defined "
"in the BackBufferCopy node is buffered with the content of the screen it "
@@ -12319,13 +12465,13 @@ msgid ""
"derived nodes as [i]siblings[/i] to the BackBufferCopy node instead of "
"adding them as children."
msgstr ""
-"ç”¨äºŽå¯¹å½“å‰æ˜¾ç¤ºçš„å±å¹•进行å缓冲的节点。在BackBufferCopy节点中定义的区域将用它"
-"所覆盖的å±å¹•内容进行缓冲,或者根æ®è®¾ç½®çš„å¤åˆ¶æ¨¡å¼å¯¹æ•´ä¸ªå±å¹•进行缓冲。在你的ç€"
-"色器脚本中使用[code]texture(SCREEN_TEXTURE,...)[/code]函数æ¥è®¿é—®ç¼“冲区。\n"
-"[b]注æ„:[/b]由于该节点继承自 [Node2D] (而éž[Control]),因此锚点和边è·å°†ä¸ä¼š"
-"应用于[Control]派生的å­èŠ‚ç‚¹ã€‚è¿™åœ¨è°ƒæ•´çª—å£å¤§å°æ—¶å¯èƒ½ä¼šæœ‰é—®é¢˜ã€‚为了é¿å…è¿™ç§æƒ…"
-"况,请将 [Control] 派生节点作为 [i] siblings[/i] 添加到 BackBufferCopy 节点,"
-"è€Œä¸æ˜¯å°†å®ƒä»¬ä½œä¸ºå­èŠ‚ç‚¹æ·»åŠ ã€‚"
+"用于对当å‰å±å¹•显示进行åŽå°ç¼“冲的节点。 BackBufferCopy 节点中定义的区域与其覆"
+"ç›–å±å¹•çš„å†…å®¹ä¸€èµ·ç¼“å†²ï¼Œæˆ–è€…æ ¹æ®æ‹·è´æ¨¡å¼è®¾ç½®çš„æ•´ä¸ªå±å¹•进行缓冲。在ç€è‰²å™¨è„šæœ¬ä¸­"
+"使用 [code]texture(SCREEN_TEXTURE, ...)[/code] 函数æ¥è®¿é—®ç¼“冲区。\n"
+"[b]注æ„:[/b] 由于该节点继承自 [Node2D]ï¼Œè€Œéž [Control],锚点和边è·å°†ä¸ä¼šåº”用"
+"于从 [Control] 派生的å­èŠ‚ç‚¹ã€‚è¿™åœ¨è°ƒæ•´çª—å£å¤§å°æ—¶å¯èƒ½ä¼šå‡ºçŽ°é—®é¢˜ã€‚ä¸ºé¿å…è¿™ç§æƒ…"
+"况,请将 [Control] 派生节点作为 [i]åŒçº§[/i] 添加到 BackBufferCopy 节点,而ä¸"
+"是将它们添加为å­èŠ‚ç‚¹ã€‚"
#: doc/classes/BackBufferCopy.xml:16
msgid "Buffer mode. See [enum CopyMode] constants."
@@ -12359,45 +12505,62 @@ msgid "Prerendered indirect light map for a scene."
msgstr "场景的预渲染间接光照贴图。"
#: doc/classes/BakedLightmap.xml:7
+#, fuzzy
msgid ""
"Baked lightmaps are an alternative workflow for adding indirect (or baked) "
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
+"烘焙光照贴图是å‘场景添加间接(或烘焙)光照的替代工作æµç¨‹ã€‚与 [GIProbe] 方法ä¸"
+"åŒï¼Œçƒ˜ç„™å…‰ç…§è´´å›¾åœ¨ä½Žç«¯ PC 和移动设备上è¿è¡Œè‰¯å¥½ï¼Œå› ä¸ºå®ƒä»¬åœ¨è¿è¡Œæ—¶å‡ ä¹Žä¸æ¶ˆè€—资"
+"æºã€‚\n"
+"[b]注æ„:[/b] 由于光照贴图的工作原ç†ï¼Œå¤§å¤šæ•°å±žæ€§åªæœ‰åœ¨å…‰ç…§è´´å›¾å†æ¬¡çƒ˜ç„™åŽæ‰ä¼š"
+"看到效果。"
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
-msgstr "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
+msgstr ""
+"https://docs.godotengine.org/zh_CN/stable/tutorials/3d/baked_lightmaps.html"
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
-"no save path is provided it will try to match the path from the current "
+"no root node is provided, parent of this node will be used as root instead. "
+"If no save path is provided it will try to match the path from the current "
"[member light_data]."
msgstr ""
+"烘焙光照贴图,从给定的[code]from_node[/code]根节点扫æï¼Œå¹¶å°†äº§ç”Ÿçš„"
+"[BakedLightmapData]ä¿å­˜åœ¨[code]data_save_path[/code]中。如果没有æä¾›æ ¹èŠ‚ç‚¹ï¼Œ"
+"此节点的父节点将作为根节点。如果没有æä¾›ä¿å­˜è·¯å¾„,将å°è¯•匹é…当å‰[member "
+"light_data]的路径。"
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
+"å¯ç”¨åŽï¼Œå…‰ç…§è´´å›¾ä¼šå°†æ‰€æœ‰ç½‘格的纹ç†åˆå¹¶ä¸ºä¸€ä¸ªå¤§çš„分层纹ç†ã€‚ GLES2 䏿”¯æŒã€‚"
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
-msgstr ""
+msgstr "æ¯ä¸ªå…‰ç…§è´´å›¾å±‚的最大尺寸,仅在å¯ç”¨ [member atlas_generate] 时使用。"
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
-msgstr ""
+msgstr "在烘焙过程中使用光线投射åç½®æ¥é¿å…浮点数精度问题。"
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -12410,115 +12573,139 @@ msgid ""
"[b]Note:[/b] [member bounce_indirect_energy] only has an effect if [member "
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
+"æ¯æ¬¡å弹的能é‡ä¹˜æ•°ã€‚较高的值将使间接照明更亮。 [code]1.0[/code] 的值表示与物"
+"ç†ç›¸ä¸€è‡´çš„行为,但在使用少é‡å弹时,å¯ä»¥ä½¿ç”¨æ›´é«˜çš„值使间接照明传播更明显。这"
+"å¯ç”¨äºŽé€šè¿‡é™ä½Ž[member bounces]的数é‡ç„¶åŽå¢žåŠ  [member bounce_indirect_energy] "
+"æ¥åŠ å¿«çƒ˜ç„™æ—¶é—´ã€‚ä¸Ž [member BakedLightmapData.energy] ä¸åŒï¼Œæ­¤å±žæ€§ä¸ä¼šå½±å“ç¯å…‰"
+"节点ã€è‡ªå‘å…‰æè´¨å’ŒçŽ¯å¢ƒå‘出的直接光照。\n"
+"[b]注æ„:[/b] [member bounce_indirect_energy] 仅在[member bounces] 设置为大于"
+"或等于[code]1[/code]的值时有效。"
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
-msgstr ""
+msgstr "烘焙过程中考虑的光线å射次数。å‚阅 [member bounce_indirect_energy]。"
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
-msgstr ""
+msgstr "用于实时æ•获动æ€å¯¹è±¡ä¿¡æ¯çš„网格大å°ã€‚"
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
+"å¯ç”¨åŽï¼Œå°†è®¡ç®—包å«åœºæ™¯ç…§æ˜Žä¿¡æ¯çš„八剿 ‘ã€‚ç„¶åŽæ­¤å…«å‰æ ‘将用于照亮场景中的动æ€å¯¹"
+"象。"
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
-msgstr ""
+msgstr "å置值,用于å‡å°‘æ•èŽ·çš„å…«å‰æ ‘中的光传播é‡ã€‚"
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr "æ•获数æ®çš„烘焙质é‡ã€‚"
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
+"如果烘焙åŽçš„网格没有UV2的尺寸æç¤ºï¼Œè¿™ä¸ªå€¼å°†è¢«ç”¨æ¥ç²—略计算出åˆé€‚的光照贴图尺"
+"寸。"
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
+"[member environment_mode] 设置为 [constant ENVIRONMENT_MODE_CUSTOM_COLOR] 时"
+"的环境颜色。"
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
+"[member environment_mode] 设置为 [constant ENVIRONMENT_MODE_CUSTOM_COLOR] 或 "
+"[constant ENVIRONMENT_MODE_CUSTOM_SKY] æ—¶çš„èƒ½é‡æ¯”例系数。"
-#: doc/classes/BakedLightmap.xml:62
-#, fuzzy
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
-msgstr "当[member overlay]设置为[constant OVERLAY_POSITION]时使用的背景。"
+msgstr ""
+"当 [member environment_mode] 设置为 [constant ENVIRONMENT_MODE_CUSTOM_SKY] 时"
+"è¦ä½¿ç”¨çš„ [Sky] 资æºã€‚"
-#: doc/classes/BakedLightmap.xml:65
-#, fuzzy
+#: doc/classes/BakedLightmap.xml:66
msgid "The rotation of the baked custom sky."
-msgstr "编辑场景的根。"
+msgstr "烘焙自定义天空的旋转。"
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
"amount of light on all the lightmap texels. Can be used for artistic control "
"on shadow color."
msgstr ""
+"所有光照贴图纹ç†å…ƒç´ çš„æœ€å°çŽ¯å¢ƒå…‰ã€‚è¿™ä¸è€ƒè™‘åœºæ™¯å‡ ä½•ä½“çš„ä»»ä½•é®æŒ¡ï¼Œå®ƒåªæ˜¯ç¡®ä¿æ‰€"
+"有光照贴图纹ç†å…ƒç´ ä¸Šçš„光釿œ€å°ã€‚å¯ç”¨äºŽé˜´å½±é¢œè‰²çš„艺术控制。"
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr "决定烘焙时使用哪个环境。"
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
+"烘焙光照贴图的大å°ã€‚åªæœ‰è¯¥åŒºåŸŸå†…的网格æ‰ä¼šåŒ…å«åœ¨çƒ˜ç„™å…‰ç…§è´´å›¾ä¸­ï¼Œä¹Ÿç”¨ä½œåЍæ€å…‰"
+"ç…§æ•获区域的边界。"
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
-msgstr ""
+msgstr "已废弃,在以å‰çš„版本中,它决定了光照贴图的ä¿å­˜ä½ç½®ã€‚"
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr "计算出的光照数æ®ã€‚"
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
+"å†³å®šåœ¨ä¸æ­£ç¡®çš„光照烘烤中æ¯ä¸€ä¸ªçº¹ç†å…ƒç´ çš„采样é‡ã€‚å¯ä»¥åœ¨é¡¹ç›®è®¾ç½®ä¸­é…ç½®æ¯ä¸ªè´¨é‡"
+"级别的采样é‡ã€‚"
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
"disk usage if the scene contains only white lights or you don't mind losing "
"color information in indirect lighting."
msgstr ""
+"在光照贴图纹ç†ä¸­å­˜å‚¨å…¨è‰²å€¼ã€‚ç¦ç”¨æ—¶ï¼Œå…‰ç…§è´´å›¾çº¹ç†å°†å­˜å‚¨å•个亮度通é“。如果场景"
+"仅包å«ç™½å…‰æˆ–者您ä¸ä»‹æ„在间接照明中丢失颜色信æ¯ï¼Œåˆ™å¯ä»¥ç¦ç”¨ä»¥å‡å°‘ç£ç›˜ä½¿ç”¨é‡ã€‚"
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
+"å¯ç”¨åŽï¼Œå°†ä½¿ç”¨å…‰ç…§è´´å›¾é™å™ªå™¨æ¥å‡å°‘基于Monte Carlo的全局照明固有的噪声。"
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -12529,73 +12716,93 @@ msgid ""
"lightmap banding even when using the GLES2 backend or if [member "
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
+"如果 [code]true[/code],则以高动æ€èŒƒå›´æ ¼å¼ (EXR) 存储光照贴图纹ç†ã€‚如果 "
+"[code]false[/code],则将光照贴图纹ç†å­˜å‚¨åœ¨ä½ŽåЍæ€èŒƒå›´çš„ PNG 图åƒä¸­ã€‚è¿™å¯ä»¥è®¾ç½®"
+"为 [code]false[/code] 以å‡å°‘ç£ç›˜å ç”¨ï¼Œä½†è¶…过 1.0 的光照值将被é™åˆ¶ï¼Œä½ å¯èƒ½ä¼šçœ‹"
+"到因精度é™ä½Žè€Œå¯¼è‡´çš„æ¡çº¹ã€‚\n"
+"[b]注æ„:[/b] å°† [member use_hdr] 设置为 [code]true[/code] å³ä½¿ä½¿ç”¨ GLES2 åŽ"
+"端或 [member ProjectSettings.rendering/quality/depth/hdr] 为 [code]false,也"
+"会é™ä½Žå…‰ç…§è´´å›¾æ¡çº¹[/code]。"
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
-msgstr ""
+msgstr "æœ€ä½Žçƒ˜ç„™è´¨é‡æ¨¡å¼ã€‚计算速度最快。"
-#: doc/classes/BakedLightmap.xml:101
-#, fuzzy
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
-msgstr "默认的文本字体。"
+msgstr "é»˜è®¤çƒ˜ç„™è´¨é‡æ¨¡å¼ã€‚"
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
-msgstr ""
+msgstr "æ›´é«˜çš„çƒ˜ç„™è´¨é‡æ¨¡å¼ã€‚éœ€è¦æ›´é•¿çš„æ—¶é—´æ¥è®¡ç®—。"
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
-msgstr ""
+msgstr "æœ€é«˜çš„çƒ˜çƒ¤è´¨é‡æ¨¡å¼ã€‚éœ€è¦æœ€é•¿çš„æ—¶é—´æ¥è®¡ç®—。"
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
msgid "Baking was successful."
msgstr "烘焙æˆåŠŸã€‚"
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
+"如果没有找到åˆé€‚çš„ä¿å­˜è·¯å¾„,则返回。这å¯èƒ½å‘生在没有指定[member image_path]或"
+"者ä¿å­˜ä½ç½®æ— æ•ˆçš„æƒ…况下。"
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr "当剿œªä½¿ç”¨."
-#: doc/classes/BakedLightmap.xml:119
-#, fuzzy
+#: doc/classes/BakedLightmap.xml:120
msgid "Returns when the baker cannot save per-mesh textures to file."
-msgstr "返回分é…给图å—的形状数é‡ã€‚"
+msgstr "当烘焙器ä¸èƒ½å°†æ¯ä¸ªç½‘格的纹ç†ä¿å­˜åˆ°æ–‡ä»¶æ—¶è¿”回。"
-#: doc/classes/BakedLightmap.xml:122
-#, fuzzy
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
-msgstr "生æˆå¹³é¢çš„大å°ã€‚"
+msgstr "生æˆçš„光照贴图尺寸过大。"
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
-msgstr ""
+msgstr "有些网格包å«[code][0,1][/code]范围以外的UV2值。"
-#: doc/classes/BakedLightmap.xml:128
-#, fuzzy
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
-msgstr "è¿”å›žå–æ¶ˆæŒ‰é’®ã€‚"
+msgstr "å¦‚æžœç”¨æˆ·å–æ¶ˆäº†çƒ˜çƒ¤ï¼Œåˆ™è¿”回。"
+
+#: doc/classes/BakedLightmap.xml:132
+msgid ""
+"Returns if lightmapper can't be created. Unless you are using a custom "
+"lightmapper, please report this as bug."
+msgstr ""
+"如果ä¸èƒ½åˆ›å»ºå…‰ç…§è´´å›¾å™¨ï¼Œåˆ™è¿”回。除éžä½ ä½¿ç”¨çš„æ˜¯è‡ªå®šä¹‰çš„光照贴图器,å¦åˆ™è¯·å°†æ­¤"
+"报告为bug。"
+
+#: doc/classes/BakedLightmap.xml:135
+msgid ""
+"There is no root node to start baking from. Either provide [code]from_node[/"
+"code] argument or attach this node to a parent that should be used as root."
+msgstr ""
+"没有根节点å¯ä»¥å¼€å§‹çƒ˜ç„™ã€‚è¦ä¹ˆæä¾›[code]from_node[/code]傿•°ï¼Œè¦ä¹ˆå°†æ­¤èŠ‚ç‚¹é™„åŠ "
+"到一个被用作根节点的父节点。"
-#: doc/classes/BakedLightmap.xml:133
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr "烘焙过程中ä¸ä½¿ç”¨ä»»ä½•环境。"
-#: doc/classes/BakedLightmap.xml:136
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
-msgstr ""
+msgstr "烘焙环境会自动从当å‰åœºæ™¯ä¸­èŽ·å–。"
-#: doc/classes/BakedLightmap.xml:139
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
-msgstr ""
+msgstr "在烘焙过程中使用自定义天空作为环境。"
-#: doc/classes/BakedLightmap.xml:142
-#, fuzzy
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
-msgstr "自定义的[World2D],å¯ä»¥ä½œä¸º2D环境æºã€‚"
+msgstr "烘焙过程中使用自定义纯色作为环境。"
#: doc/classes/BakedLightmapData.xml:56
msgid ""
@@ -12605,11 +12812,15 @@ msgid ""
"lighting or emissive materials), adjust [member BakedLightmap."
"bounce_indirect_energy] and bake lightmaps again."
msgstr ""
+"çƒ˜ç„™å’ŒåŠ¨æ€æ•获对象的全局能é‡ä¹˜æ•°ã€‚è¿™å¯ä»¥åœ¨è¿è¡Œæ—¶æ›´æ”¹ï¼Œè€Œæ— éœ€å†æ¬¡çƒ˜ç„™å…‰ç…§è´´"
+"图。\n"
+"è¦ä»…调整间接照明的能é‡ï¼Œå³ä¸å½±å“直接照明或自å‘å…‰æè´¨ï¼Œè¯·è°ƒæ•´ [member "
+"BakedLightmap.bounce_indirect_energy] 并冿¬¡çƒ˜ç„™å…‰ç…§è´´å›¾ã€‚"
#: doc/classes/BakedLightmapData.xml:60
msgid ""
"Controls whether dynamic capture objects receive environment lighting or not."
-msgstr ""
+msgstr "æŽ§åˆ¶åŠ¨æ€æ•æ‰å¯¹è±¡æ˜¯å¦æŽ¥æ”¶çŽ¯å¢ƒå…‰ç…§ã€‚"
#: doc/classes/BaseButton.xml:4
msgid "Base class for different kinds of buttons."
@@ -12662,6 +12873,10 @@ msgid ""
"[b]Note:[/b] This method doesn't unpress other buttons in its button [member "
"group]."
msgstr ""
+"æ”¹å˜æŒ‰é’®çš„[member pressed]状æ€ï¼Œä¸è§¦å‘[signal toggled]ã€‚å½“ä½ åªæƒ³æ”¹å˜æŒ‰é’®çš„状"
+"æ€è€Œä¸å‘逿Œ‰ä¸‹äº‹ä»¶æ—¶ä½¿ç”¨ï¼ˆä¾‹å¦‚,在åˆå§‹åŒ–åœºæ™¯æ—¶ï¼‰ã€‚åªæœ‰å½“[member toggle_mode]"
+"是[code]true[/code]æ—¶æ‰æœ‰æ•ˆã€‚\n"
+"[b]注æ„:[/b] 这个方法ä¸ä¼šé‡Šæ”¾å…¶æŒ‰é’®[member group] 中的其他按钮。"
#: doc/classes/BaseButton.xml:48
msgid ""
@@ -12691,6 +12906,8 @@ msgid ""
"will be removed in Godot 4.0. This property no longer has any effect when "
"set. Please use [member Control.focus_mode] instead."
msgstr ""
+"[i]已弃用。[/i] 由于冗余,此属性已弃用,将在 Godot 4.0 中删除。此属性在设置åŽ"
+"ä¸ä¼šæœ‰ä»»ä½•å½±å“。请改用 [member Control.focus_mode]。"
#: doc/classes/BaseButton.xml:62
msgid "[ButtonGroup] associated to the button."
@@ -12705,7 +12922,7 @@ msgid ""
"value."
msgstr ""
"如果[code]true[/code]ï¼Œå½“æŒ‰ä¸‹æŒ‰é’®æ—¶å°†å…‰æ ‡ç§»åˆ°æŒ‰é’®å¤–æ—¶ï¼ŒæŒ‰é’®ä¼šä¿æŒæŒ‰ä¸‹çжæ€ã€‚\n"
-"[b]注æ„:[/b]该属性åªå½±å“按钮的视觉外观。无论该属性的值是多少,信å·éƒ½ä¼šåœ¨åŒä¸€"
+"[b]注æ„:[/b]该属性åªå½±å“按钮的视觉表现。无论该属性的值是多少,信å·éƒ½ä¼šåœ¨åŒä¸€"
"时刻å‘出。"
#: doc/classes/BaseButton.xml:69
@@ -12717,6 +12934,11 @@ msgid ""
"emitted. If you want to change the pressed state without emitting that "
"signal, use [method set_pressed_no_signal]."
msgstr ""
+"如果 [code]true[/code],按钮为按下状æ€ã€‚表示按钮被按下或切æ¢ï¼ˆå¦‚æžœ [member "
+"toggle_mode] 处于激活状æ€ï¼‰ã€‚仅当 [member toggle_mode] 为 [code]true[/code] "
+"æ—¶æ‰æœ‰æ•ˆã€‚\n"
+"[b]注:[/b]设置 [member pressed] 将导致 [signal toggled] 触å‘。如果你想在ä¸è§¦"
+"å‘该信å·çš„æƒ…况下更改按下状æ€ï¼Œè¯·ä½¿ç”¨ [method set_pressed_no_signal]。"
#: doc/classes/BaseButton.xml:73
msgid "[ShortCut] associated to the button."
@@ -12829,12 +13051,13 @@ msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/math/matrices_and_transforms."
"html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/math/matrices_and_transforms."
-"html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/math/"
+"matrices_and_transforms.html"
#: doc/classes/Basis.xml:15 doc/classes/Transform.xml:13
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/using_transforms.html"
-msgstr "https://docs.godotengine.org/en/3.4/tutorials/3d/using_transforms.html"
+msgstr ""
+"https://docs.godotengine.org/zh_CN/stable/tutorials/3d/using_transforms.html"
#: doc/classes/Basis.xml:16 doc/classes/Line2D.xml:11
#: doc/classes/Transform.xml:14 doc/classes/Transform2D.xml:13
@@ -12946,15 +13169,16 @@ msgid "Returns the inverse of the matrix."
msgstr "返回矩阵的逆值。"
#: doc/classes/Basis.xml:97
-#, fuzzy
msgid ""
"Returns [code]true[/code] if this basis and [code]b[/code] are approximately "
"equal, by calling [code]is_equal_approx[/code] on each component.\n"
"[b]Note:[/b] For complicated reasons, the epsilon argument is always "
"discarded. Don't use the epsilon argument, it does nothing."
msgstr ""
-"通过对æ¯ä¸ªåˆ†é‡è°ƒç”¨[code]is_equal_approx[/code],如果这个基础和[code]b[/code]"
-"近似相等,返回[code]true[/code]。"
+"如果这个 basis å’Œ[code]b[/code]近似相等,返回[code]true[/code],是通过对æ¯ä¸ª"
+"分é‡è°ƒç”¨[code]is_equal_approx[/code]。\n"
+"[b]注æ„:[/b] ç”±äºŽå¤æ‚的原因,epsilon傿•°æ€»æ˜¯è¢«ä¸¢å¼ƒï¼Œä¸è¦ä½¿ç”¨å®ƒï¼Œå®ƒæ²¡æœ‰ä»»ä½•作"
+"用。"
#: doc/classes/Basis.xml:104
msgid ""
@@ -13104,8 +13328,11 @@ msgstr "返回设置为[code]true[/code]çš„ä½å›¾å…ƒç´ çš„æ•°é‡ã€‚"
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -13243,7 +13470,7 @@ msgstr ""
#: doc/classes/Bone2D.xml:36
msgid ""
"Length of the bone's representation drawn in the editor's viewport in pixels."
-msgstr "在编辑器的视å£ä¸­ç»˜åˆ¶çš„骨骼的长度,å•ä½ä¸ºåƒç´ ã€‚"
+msgstr "在编辑器的视窗中绘制的骨骼的长度,å•ä½ä¸ºåƒç´ ã€‚"
#: doc/classes/Bone2D.xml:39
msgid ""
@@ -13257,14 +13484,13 @@ msgid "A node that will attach to a bone."
msgstr "一个会附ç€åœ¨éª¨éª¼ä¸Šçš„节点。"
#: doc/classes/BoneAttachment.xml:7
-#, fuzzy
msgid ""
"This node must be the child of a [Skeleton] node. You can then select a bone "
"for this node to attach to. The BoneAttachment node will copy the transform "
"of the selected bone."
msgstr ""
-"此节点必须是[Skeleton3D]节点的å­èŠ‚ç‚¹ã€‚ç„¶åŽï¼Œæ‚¨å¯ä»¥ä¸ºè¿™ä¸ªèŠ‚ç‚¹é€‰æ‹©ä¸€ä¸ªéª¨éª¼æ¥é™„"
-"ç€ã€‚BoneAttachment3D 节点将å¤åˆ¶æ‰€é€‰éª¨éª¼çš„å˜å½¢ã€‚"
+"此节点必须是 [Skeleton] 节点的å­èŠ‚ç‚¹ã€‚ç„¶åŽï¼Œä½ å¯ä»¥ä¸ºæ­¤èŠ‚ç‚¹é€‰æ‹©è¦é™„加的骨骼。 "
+"BoneAttachment èŠ‚ç‚¹å°†æ‹·è´æ‰€é€‰éª¨éª¼çš„å˜æ¢ã€‚"
#: doc/classes/BoneAttachment.xml:15
msgid "The name of the attached bone."
@@ -13275,7 +13501,6 @@ msgid "Boolean built-in type."
msgstr "布尔型内置型。"
#: doc/classes/bool.xml:7
-#, fuzzy
msgid ""
"Boolean is a built-in type. There are two boolean values: [code]true[/code] "
"and [code]false[/code]. You can think of it as a switch with on or off (1 or "
@@ -13324,12 +13549,12 @@ msgid ""
" can_shoot = true\n"
"[/codeblock]"
msgstr ""
-"布尔型是一个内置类型。有两个布尔值。[code]true[/code]和[code]false[/code]。你"
-"å¯ä»¥æŠŠå®ƒæƒ³è±¡æˆä¸€ä¸ªå¼€å…³ï¼Œæœ‰å¼€æˆ–关(1或0)的设置。布尔è¿ç®—在编程中用于æ¡ä»¶è¯­å¥"
-"中的逻辑,比如[code]if[/code]语å¥ã€‚\n"
-"布尔è¿ç®—å¯ä»¥ç›´æŽ¥ç”¨äºŽ[code]if[/code]语å¥ä¸­ã€‚下é¢çš„代ç åœ¨[code]if can_shoot:[/"
-"code]行中演示了这一点。你ä¸éœ€è¦ä½¿ç”¨[code]==true[/code],你åªéœ€è¦[code]if "
-"can_shoot:[/code]ã€‚åŒæ ·ï¼Œä½¿ç”¨ [code]if not can_shoot:[/code] è€Œä¸æ˜¯ [code]== "
+"布尔是内置类型。有两个布尔值。[code]true[/code]å’Œ[code]false[/code]。你å¯ä»¥æŠŠ"
+"å®ƒæƒ³è±¡æˆæœ‰å¼€æˆ–关状æ€çš„开关(1或0)。布尔在编程中用于æ¡ä»¶è¯­å¥çš„逻辑,如"
+"[code]if[/code]语å¥ã€‚\n"
+"布尔å¯ä»¥ç›´æŽ¥ç”¨äºŽ[code]if[/code]语å¥ä¸­ã€‚下é¢çš„代ç åœ¨[code]if can_shoot:[/code]"
+"行中演示了这一点。你ä¸éœ€è¦ä½¿ç”¨[code]==true[/code],你åªéœ€è¦[code]if "
+"can_shoot:[/code]ã€‚åŒæ ·åœ°ï¼Œä½¿ç”¨[code]if not can_shoot:[/code]è€Œä¸æ˜¯[code]== "
"false[/code]。\n"
"[codeblock]\n"
"var can_shoot = true\n"
@@ -13338,12 +13563,11 @@ msgstr ""
" if can_shoot:\n"
" pass # Perform shooting actions here.\n"
"[/codeblock]\n"
-"The following code will only create a bullet if both conditions are met: "
-"action \"shoot\" is pressed and if [code]can_shoot[/code] is [code]true[/"
-"code].\n"
-"[b]Note:[/b] [code]Input.is_action_pressed(\"shoot\")[/code] is also a "
-"boolean that is [code]true[/code] when \"shoot\" is pressed and [code]false[/"
-"code] when \"shoot\" isn't pressed.\n"
+"下é¢çš„代ç åªæœ‰åœ¨ä¸¤ä¸ªæ¡ä»¶éƒ½æ»¡è¶³çš„æƒ…况下æ‰ä¼šäº§ç”Ÿå­å¼¹ï¼šåŠ¨ä½œ \"shoot\" 被按下,并"
+"且如果[code]can_shoot[/code]是[code]true[/code]。\n"
+"[b]注æ„:[/b][code]Input.is_action_pressed(\"shoot\")[/code]也是一个布尔值,"
+"当 \"shoot\"被按下时为[code]true[/code],当 \"shoot\" 没有被按下时为"
+"[code]false[/code]。\n"
"[codeblock]\n"
"var can_shoot = true\n"
"\n"
@@ -13351,10 +13575,9 @@ msgstr ""
" if can_shoot and Input.is_action_pressed(\"shoot\"):\n"
" create_bullet()\n"
"[/codeblock]\n"
-"The following code will set [code]can_shoot[/code] to [code]false[/code] and "
-"start a timer. This will prevent player from shooting until the timer runs "
-"out. Next [code]can_shoot[/code] will be set to [code]true[/code] again "
-"allowing player to shoot once again.\n"
+"下é¢çš„代ç å°†æŠŠ[code]can_shoot[/code]设置为[code]false[/code]å¹¶å¯åŠ¨ä¸€ä¸ªå®šæ—¶"
+"器。这将阻止玩家射击,直到定时器用完。然åŽ[code]can_shoot[/code]设置为"
+"[code]true[/code]ï¼Œå†æ¬¡å…许玩家进行射击。\n"
"[codeblock]\n"
"var can_shoot = true\n"
"onready var cool_down = $CoolDownTimer\n"
@@ -13405,29 +13628,26 @@ msgid "Base class for box containers."
msgstr "ç›’å­å®¹å™¨çš„基类。"
#: doc/classes/BoxContainer.xml:7
-#, fuzzy
msgid ""
"Arranges child controls vertically or horizontally, and rearranges the "
"controls automatically when their minimum size changes."
-msgstr "垂直或水平排列å­[Control]节点,并在其最å°å°ºå¯¸æ›´æ”¹æ—¶è‡ªåЍ釿–°æŽ’列它们。"
+msgstr "åž‚ç›´æˆ–æ°´å¹³æŽ’åˆ—å­æŽ§ä»¶ï¼Œå¹¶åœ¨å…¶æœ€å°å°ºå¯¸æ›´æ”¹æ—¶è‡ªåЍ釿–°æŽ’列。"
#: doc/classes/BoxContainer.xml:16
-#, fuzzy
msgid ""
"Adds a control to the box as a spacer. If [code]true[/code], [code]begin[/"
"code] will insert the spacer control in front of other children."
msgstr ""
-"在方框中添加一个 [Control] 节点作为间隔。如果 [code]begin[/code] 是 "
-"[code]true[/code],它将在所有其他å­èŠ‚ç‚¹å‰æ’å…¥ [Control] 节点。"
+"将控件添加到盒å­ä½œä¸ºé—´éš”。如果 [code]true[/code], [code]begin[/code] 将在其他"
+"å­çº§ä¹‹å‰æ’入间隔控件。"
#: doc/classes/BoxContainer.xml:22
-#, fuzzy
msgid ""
"The alignment of the container's children (must be one of [constant "
"ALIGN_BEGIN], [constant ALIGN_CENTER] or [constant ALIGN_END])."
msgstr ""
-"容器å­ä»£çš„坹齿–¹å¼ï¼ˆå¿…须是[constant ALIGN_BEGIN]ã€[constant ALIGN_CENTER]或"
-"[constant ALIGN_END]中的一个)。"
+"容器å­é¡¹çš„坹齿–¹å¼ï¼Œå¿…须是 [constant ALIGN_BEGIN]ã€[constant ALIGN_CENTER] "
+"或 [constant ALIGN_END] 之一。"
#: doc/classes/BoxContainer.xml:28
msgid "Aligns children with the beginning of the container."
@@ -13446,9 +13666,8 @@ msgid "Box shape resource."
msgstr "盒形资æºã€‚"
#: doc/classes/BoxShape.xml:7
-#, fuzzy
msgid "3D box shape that can be a child of a [PhysicsBody] or [Area]."
-msgstr "3Dç›’å­å½¢çжå¯ä»¥æ˜¯[PhysicsBody3D]或[Area3D]çš„å­çº§ã€‚"
+msgstr "3D ç›’å­å½¢çŠ¶ï¼Œå¯ä»¥æ˜¯ [PhysicsBody] 或 [Area] çš„å­é¡¹ã€‚"
#: doc/classes/BoxShape.xml:10 doc/classes/CapsuleShape.xml:10
#: doc/classes/ConcavePolygonShape.xml:11 doc/classes/ConvexPolygonShape.xml:10
@@ -13476,7 +13695,6 @@ msgid "Standard themed Button."
msgstr "标准主题按钮。"
#: doc/classes/Button.xml:7
-#, fuzzy
msgid ""
"Button is the standard themed button. It can contain text and an icon, and "
"will display them according to the current [Theme].\n"
@@ -13501,8 +13719,8 @@ msgid ""
"given time. Use [TouchScreenButton] for buttons that trigger gameplay "
"movement or actions, as [TouchScreenButton] supports multitouch."
msgstr ""
-"按钮是标准主题按钮。它å¯ä»¥åŒ…嫿–‡æœ¬å’Œå›¾æ ‡ï¼Œå¹¶å°†æ ¹æ®å½“å‰çš„[主题]显示它们。\n"
-"[b]åˆ›å»ºæŒ‰é’®å¹¶åœ¨è¢«ä»£ç æŒ‰ä¸‹æ—¶åˆ†é…动作的示例:[/b]\n"
+"标准的主题按钮。它å¯ä»¥åŒ…嫿–‡å­—和图标,并根æ®å½“å‰çš„ [Theme]显示。\n"
+"[b]åˆ›å»ºæŒ‰é’®å¹¶åœ¨æŒ‰ä¸‹ä»£ç æ—¶é…置动作的示例:[/b]\n"
"[codeblock]\n"
"func _ready():\n"
" var button = Button.new()\n"
@@ -13513,8 +13731,12 @@ msgstr ""
"func _button_pressed():\n"
" print(\"Hello world!\")\n"
"[/codeblock]\n"
-"也å¯ä»¥åœ¨ç¼–辑器中创建按钮(如所有Control节点),但是æŸäº›æƒ…况下å¯èƒ½éœ€è¦é€šè¿‡ä»£ç "
-"创建它们。"
+"æŒ‰é’®åƒæ‰€æœ‰æŽ§ä»¶èŠ‚ç‚¹ä¸€æ ·ï¼Œä¹Ÿå¯ä»¥åœ¨ç¼–辑器中创建,但在æŸäº›æƒ…况下å¯èƒ½éœ€è¦ä»Žä»£ç ä¸­"
+"创建。\n"
+"å‚阅 [BaseButton],其中包括与此节点相关的通用属性和方法。\n"
+"[b]注æ„:[/b] 按钮ä¸å¤„ç†è§¦æ‘¸è¾“å…¥ï¼Œå› æ­¤ä¸æ”¯æŒå¤šç‚¹è§¦æŽ§ï¼Œå› ä¸ºæ¨¡æ‹Ÿé¼ æ ‡åœ¨ç»™å®šæ—¶é—´"
+"åªèƒ½æŒ‰ä¸‹ä¸€ä¸ªæŒ‰é’®ã€‚å°† [TouchScreenButton] ç”¨äºŽè§¦å‘æ¸¸æˆç§»åŠ¨æˆ–åŠ¨ä½œçš„æŒ‰é’®ï¼Œå› ä¸º "
+"[TouchScreenButton] 支æŒå¤šç‚¹è§¦æŽ§ã€‚"
#: doc/classes/Button.xml:25 doc/classes/Dictionary.xml:89
#: doc/classes/GridContainer.xml:12 doc/classes/OS.xml:10
@@ -13595,26 +13817,35 @@ msgid "Text [Color] used when the [Button] is disabled."
msgstr "ç¦ç”¨[Button]时使用的文本[Color]。"
#: doc/classes/Button.xml:77
+msgid ""
+"Text [Color] used when the [Button] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+"当[Button]获得焦点时使用的文本[Color]。åªå–代按钮的正常文本颜色。ç¦ç”¨ã€æ‚¬åœå’Œ"
+"按下状æ€ä¼˜å…ˆäºŽè¿™ä¸ªé¢œè‰²ã€‚"
+
+#: doc/classes/Button.xml:80
msgid "Text [Color] used when the [Button] is being hovered."
msgstr "悬åœ[Button]时使用的文本[Color]。"
-#: doc/classes/Button.xml:80
+#: doc/classes/Button.xml:83
msgid "Text [Color] used when the [Button] is being pressed."
msgstr "正在按下 [Button] 时使用的文本 [Color] 。"
-#: doc/classes/Button.xml:83
+#: doc/classes/Button.xml:86
msgid "[StyleBox] used when the [Button] is being hovered."
msgstr "悬åœ[Button]时使用的[StyleBox]。"
-#: doc/classes/Button.xml:86
+#: doc/classes/Button.xml:89
msgid "The horizontal space between [Button]'s icon and text."
msgstr "[Button]的图标和文本之间的水平间è·ã€‚"
-#: doc/classes/Button.xml:89
+#: doc/classes/Button.xml:92
msgid "Default [StyleBox] for the [Button]."
msgstr "[Button]的默认[StyleBox]。"
-#: doc/classes/Button.xml:92
+#: doc/classes/Button.xml:95
msgid "[StyleBox] used when the [Button] is being pressed."
msgstr "按下[Button]时使用的[StyleBox]。"
@@ -13628,7 +13859,7 @@ msgid ""
"Only one allows being pressed.\n"
"[member BaseButton.toggle_mode] should be [code]true[/code]."
msgstr ""
-"[按钮]ç»„ã€‚æ‰€æœ‰ç›´æŽ¥å’Œé—´æŽ¥çš„å­æŒ‰é’®éƒ½æˆä¸º radiosã€‚åªæœ‰ä¸€ä¸ªå…许被按下。\n"
+"[Button]ç»„ã€‚æ‰€æœ‰ç›´æŽ¥å’Œé—´æŽ¥çš„å­æŒ‰é’®éƒ½æˆä¸º radiosã€‚åªæœ‰ä¸€ä¸ªå…许被按下。\n"
"[member BaseButton.toggle_mode]应该是[code]true[/code]。"
#: doc/classes/ButtonGroup.xml:16
@@ -13644,16 +13875,14 @@ msgid "Returns the current pressed button."
msgstr "è¿”å›žå½“å‰æŒ‰ä¸‹çš„æŒ‰é’®ã€‚"
#: doc/classes/ButtonGroup.xml:33
-#, fuzzy
msgid "Emitted when one of the buttons of the group is pressed."
-msgstr "当该控制器上的一个按钮被按下时触å‘。"
+msgstr "当该组中的一个按钮被按下时触å‘。"
#: doc/classes/Camera.xml:4
msgid "Camera node, displays from a point of view."
msgstr "相机节点,从一个角度显示。"
#: doc/classes/Camera.xml:7
-#, fuzzy
msgid ""
"Camera is a special node that displays what is visible from its current "
"location. Cameras register themselves in the nearest [Viewport] node (when "
@@ -13663,10 +13892,10 @@ msgid ""
"capabilities to a [Viewport], and, without one, a scene registered in that "
"[Viewport] (or higher viewports) can't be displayed."
msgstr ""
-"[Camera3D]是一个特殊节点,显示从其当å‰ä½ç½®å¯è§çš„内容。相机将自己注册在最近的"
-"[Viewport]节点中(å‡åºåœºæ™¯æ ‘)。æ¯ä¸ªè§†å£åªèƒ½æ¿€æ´»ä¸€ä¸ªç›¸æœºã€‚如果场景树上没有å¯"
-"用的视区,则摄影机将在全局视å£ä¸­æ³¨å†Œã€‚æ¢å¥è¯è¯´ï¼Œç›¸æœºä»…å‘[视å£]æä¾›3D显示功"
-"能,而没有一个相机,则无法显示在[Viewport](或更高视å£ï¼‰ä¸­æ³¨å†Œçš„场景。"
+"相机是一个特殊节点,用于显示从其当å‰ä½ç½®å¯è§çš„内容。相机在最近的 [Viewport] "
+"节点中注册自己(当树上行)。æ¯ä¸ªè§†çª—åªèƒ½æ¿€æ´»ä¸€ä¸ªç›¸æœºã€‚如果在树上没有å¯ç”¨çš„视"
+"窗,相机将在全局视窗中注册。æ¢å¥è¯è¯´ï¼Œç›¸æœºåªæ˜¯ä¸º [Viewport] æä¾›3D显示能力,"
+"如果没有,则无法显示在该 [Viewport] 或更高视窗中注册的场景。"
#: doc/classes/Camera.xml:17
msgid ""
@@ -13678,9 +13907,8 @@ msgstr ""
"[code]true[/code],请求使下一个相机æˆä¸ºå½“å‰ç›¸æœºï¼ˆå¦‚果有)。"
#: doc/classes/Camera.xml:23
-#, fuzzy
msgid "Returns the camera's RID from the [VisualServer]."
-msgstr "从[RenderingServer]中返回相机的RID。"
+msgstr "从[VisualServer]返回相机的RID。"
#: doc/classes/Camera.xml:29
msgid ""
@@ -13689,6 +13917,9 @@ msgid ""
"to the position and orientation of the camera by subclassed cameras such as "
"[ClippedCamera], [InterpolatedCamera] and [ARVRCamera]."
msgstr ""
+"è¿”å›žç›¸æœºçš„å˜æ¢åŠ ä¸Šåž‚ç›´[member v_offset]和水平[member h_offset]çš„åç§»é‡ï¼›ä»¥åŠ"
+"ç”±å­ç±»ç›¸æœºå¦‚[ClippedCamera]ã€[InterpolatedCamera]å’Œ[ARVRCamera]对相机的ä½ç½®å’Œ"
+"æ–¹å‘åšå‡ºçš„任何其他调整。"
#: doc/classes/Camera.xml:36
msgid ""
@@ -13699,14 +13930,13 @@ msgstr ""
"code],å¦åˆ™è¿”回[code]false[/code]。"
#: doc/classes/Camera.xml:42
-#, fuzzy
msgid ""
"Returns the camera's frustum planes in world space units as an array of "
"[Plane]s in the following order: near, far, left, top, right, bottom. Not to "
"be confused with [member frustum_offset]."
msgstr ""
-"以世界空间为å•ä½ï¼Œä»¥[Plane]数组的形å¼è¿”回相机的平截头体平é¢ï¼Œé¡ºåºä¸ºï¼šè¿‘ã€è¿œã€"
-"å·¦ã€ä¸Šã€å³ã€ä¸‹ã€‚ä¸è¦ä¸Ž [member frustum_offset] 混淆。"
+"以世界空间å•ä½å°†ç›¸æœºçš„视锥平é¢ä½œä¸º [Plane] 数组按以下顺åºè¿”回:nearã€farã€"
+"leftã€topã€rightã€bottom。ä¸è¦ä¸Ž [member frustum_offset] 混淆。"
#: doc/classes/Camera.xml:49
msgid ""
@@ -13736,36 +13966,33 @@ msgstr ""
"å±å¹•宽度/高度等因素。"
#: doc/classes/Camera.xml:71
-#, fuzzy
msgid ""
"Returns the 3D point in world space that maps to the given 2D coordinate in "
"the [Viewport] rectangle on a plane that is the given [code]z_depth[/code] "
"distance into the scene away from the camera."
msgstr ""
-"返回世界空间中的 3D 点,该点在 [Viewport] 矩形中映射到给定 2D åæ ‡çš„å¹³é¢ä¸Šï¼Œ"
-"该平é¢çš„æ·±åº¦ä¸ºç»™å®š [code]z_depth[/code] çš„è·ç¦»åˆ°åœºæ™¯ä¸­ä¸Žç›¸æœºçš„è·ç¦»ã€‚"
+"返回世界空间中的 3D 点,该点映射到平é¢ä¸Š [Viewport] 矩形中的给定 2D åæ ‡ï¼Œè¯¥"
+"å¹³é¢è·ç¦»ç›¸æœºçš„场景为给定的 [code]z_depth[/code] è·ç¦»ã€‚"
#: doc/classes/Camera.xml:78
-#, fuzzy
msgid ""
"Returns a normal vector in world space, that is the result of projecting a "
"point on the [Viewport] rectangle by the camera projection. This is useful "
"for casting rays in the form of (origin, normal) for object intersection or "
"picking."
msgstr ""
-"返回世界空间中的法线å‘é‡ï¼Œå³é€šè¿‡ç›¸æœºæŠ•影在[Viewport]矩形上的一个点的结果。这"
-"对于以(原点,法线)çš„å½¢å¼æŠ•å°„å…‰çº¿ä»¥è¿›è¡Œç‰©ä½“äº¤æ±‡æˆ–é€‰å–很有用。"
+"返回世界空间中的法线å‘é‡ï¼Œå³ç›¸æœºæŠ•影在[Viewport]矩形上投影一个点的结果。这对"
+"äºŽä»¥åŽŸç‚¹ã€æ³•线,投射光线形å¼ç”¨äºŽå¯¹è±¡ç›¸äº¤æˆ–拾å–很有用。"
#: doc/classes/Camera.xml:85
-#, fuzzy
msgid ""
"Returns a 3D position in world space, that is the result of projecting a "
"point on the [Viewport] rectangle by the camera projection. This is useful "
"for casting rays in the form of (origin, normal) for object intersection or "
"picking."
msgstr ""
-"返回世界空间中的3Dä½ç½®ï¼Œå³é€šè¿‡ç›¸æœºæŠ•影在[Viewport]矩形上的一个点的结果。这对"
-"于以(åŽŸç‚¹ã€æ³•线)å½¢å¼æŠ•å°„å…‰çº¿ä»¥è¿›è¡Œç‰©ä½“äº¤æ±‡æˆ–é€‰å–很有用。"
+"返回世界空间中的 3D åæ ‡ï¼Œå³ç›¸æœºæŠ•影在 [Viewport] 矩形上投影一个点的结果。这"
+"å¯¹äºŽä»¥åŽŸç‚¹ã€æ³•线,投射光线形å¼ç”¨äºŽå¯¹è±¡ç›¸äº¤æˆ–拾å–很有用。"
#: doc/classes/Camera.xml:93
msgid ""
@@ -13773,16 +14000,15 @@ msgid ""
msgstr "å¯ç”¨æˆ–ç¦ç”¨[member cull_mask]中给定的[code]layer[/code]。"
#: doc/classes/Camera.xml:103
-#, fuzzy
msgid ""
"Sets the camera projection to frustum mode (see [constant "
"PROJECTION_FRUSTUM]), by specifying a [code]size[/code], an [code]offset[/"
"code], and the [code]z_near[/code] and [code]z_far[/code] clip planes in "
"world space units."
msgstr ""
-"通过指定 [code]size[/code]ã€[code]offset[/code]ï¼Œä»¥åŠ [code]z_near[/code] å’Œ "
-"[code]z_far[/code] 剪辑平é¢ï¼ˆä»¥ä¸–界空间为å•ä½ï¼‰ï¼Œå°†ç›¸æœºæŠ•影设置为 frustum 模"
-"å¼ï¼ˆè¯·å‚阅 [constant PROJECTION_FRUSTUM])。"
+"通过指定 [code]size[/code] 〠[code]offset[/code] 以åŠä»¥ä¸–界空间为å•ä½çš„ "
+"[code]z_near[/code] å’Œ [code]z_far[/code] è£å‰ªå¹³é¢ï¼Œå°†ç›¸æœºæŠ•影设置为视锥模"
+"å¼ï¼Œå‚阅 [constant PROJECTION_FRUSTUM]。"
#: doc/classes/Camera.xml:112
msgid ""
@@ -13824,6 +14050,17 @@ msgid ""
"unproject_position(global_transform.origin)\n"
"[/codeblock]"
msgstr ""
+"返回[Viewport]矩形中的2Dåæ ‡ï¼Œè¯¥å标映射到世界空间中给定的3D点。\n"
+"[b]注æ„:[/b]当使用它æ¥å®šä½3D视窗上的GUI元素时,如果3D点在相机åŽé¢ï¼Œè¯·ä½¿ç”¨"
+"[method is_position_behind]æ¥é˜²æ­¢å®ƒä»¬æ˜¾ç¤ºã€‚\n"
+"[codeblock]\n"
+"# 这个代ç å—是继承自Spatial的脚本的一部分。\n"
+"# `control`是对继承自Control的节点的引用。\n"
+"control.visible = not get_viewport().get_camera()."
+"is_position_behind(global_transform.origin)\n"
+"control.rect_position = get_viewport().get_camera()."
+"unproject_position(global_transform.origin)\n"
+"[/codeblock]"
#: doc/classes/Camera.xml:141
msgid ""
@@ -13848,6 +14085,13 @@ msgid ""
"Perspective menu in the top-left corner of the 3D viewport and toggle "
"[b]Enable Doppler[/b]."
msgstr ""
+"å¦‚æžœä¸æ˜¯[constant DOPPLER_TRACKING_DISABLED],此相机将模拟[url=https://en."
+"wikipedia.org/wiki/Doppler_effect]多普勒效果[/url]的对象在特定"
+"[code]_process[/code]方法中的å˜åŒ–。多普勒效果åªå¯¹[member AudioStreamPlayer3D."
+"doppler_tracking]设置为[constant AudioStreamPlayer3D."
+"DOPPLER_TRACKING_DISABLED]以外的值的[AudioStreamPlayer3D]节点进行模拟。\n"
+"[b]注æ„:[/b]è¦åœ¨ç¼–辑器中切æ¢å¤šæ™®å‹’效果预览,使用三维视窗左上角的é€è§†èœå•,并"
+"切æ¢ä¸º[b]å¯ç”¨å¤šæ™®å‹’[/b]。"
#: doc/classes/Camera.xml:151
msgid "The [Environment] to use for this camera."
@@ -13860,7 +14104,6 @@ msgid ""
msgstr "该相机相对于其本地Z轴的远è£è¾¹ç•Œçš„è·ç¦»ã€‚"
#: doc/classes/Camera.xml:157
-#, fuzzy
msgid ""
"The camera's field of view angle (in degrees). Only applicable in "
"perspective mode. Since [member keep_aspect] locks one axis, [code]fov[/"
@@ -13872,13 +14115,13 @@ msgid ""
"- ~102.45 degrees in a 16:9 viewport\n"
"- ~117.06 degrees in a 21:9 viewport"
msgstr ""
-"相机的视场角(度)。仅适用于é€è§†æ¨¡å¼ã€‚由于[member keep_aspect]é”定一个轴,"
-"[code]fov[/code]设置å¦ä¸€ä¸ªè½´çš„视场角。\n"
-"作为å‚考,默认的垂直视场角值([code]75.0[/code])相当于水平视场角。\n"
-"- 在4:3的视å£ä¸­ï¼Œçº¦91.31度\n"
-"- ~101.67度,在16:10的视å£ä¸­\n"
-"- ~107.51度,在16:9的视å£ä¸­\n"
-"- ~121.63度,在21:9的视å£ä¸­"
+"相机的视野角度,以度为å•ä½ã€‚仅适用于é€è§†æ¨¡å¼ã€‚由于 [member keep_aspect] é”定"
+"一个轴,因此 [code]fov[/code] 设置å¦ä¸€ä¸ªè½´çš„视角。\n"
+"作为å‚考,默认的垂直视野值 ([code]70.0[/code]) 等效于以下水平 FOV:\n"
+"- 在 4:3 视窗中约86.07 度\n"
+"- 在 16:10 视窗中约 96.50 度\n"
+"- 在 16:9 视窗中约102.45 度\n"
+"- 在 21:9 视窗中约117.06 度"
#: doc/classes/Camera.xml:165
msgid ""
@@ -14006,7 +14249,6 @@ msgid "Camera node for 2D scenes."
msgstr "二维场景的相机节点。"
#: doc/classes/Camera2D.xml:7
-#, fuzzy
msgid ""
"Camera node for 2D scenes. It forces the screen (current layer) to scroll "
"following this node. This makes it easier (and faster) to program scrollable "
@@ -14022,15 +14264,15 @@ msgid ""
"limits. You can use [method get_camera_screen_center] to get the real "
"position."
msgstr ""
-"二维场景的相机节点。它强制å±å¹•(当å‰å±‚)跟éšè¿™ä¸ªèŠ‚ç‚¹æ»šåŠ¨ã€‚è¿™ä½¿å¾—å¯¹å¯æ»šåŠ¨åœºæ™¯"
-"进行编程比手动改å˜åŸºäºŽ[CanvasItem]节点的ä½ç½®æ›´å®¹æ˜“(也更快)。\n"
-"这个节点的目的是作为一个简å•的帮手,让事情快速进行,å¯èƒ½ä¼šå‘ç”Ÿéœ€è¦æ›´å¤šçš„功能"
-"æ¥æ”¹å˜ç›¸æœºçš„工作方å¼ã€‚è¦åˆ¶ä½œè‡ªå·±çš„自定义相机节点,请继承[Node2D],并通过设置"
-"[Viewport]中的[member Viewport.canvas_transform]æ¥æ”¹å˜ç”»å¸ƒçš„å˜æ¢ï¼ˆæ‚¨å¯ä»¥é€šè¿‡"
-"[method Node.get_viewport]获得当å‰çš„[Viewport])。\n"
-"注æ„,[Camera2D]节点的[code]position[/code]å¹¶ä¸ä»£è¡¨å±å¹•的实际ä½ç½®ï¼Œå®ƒå¯èƒ½ä¼šå› "
-"为应用的平滑或é™åˆ¶è€Œæœ‰æ‰€ä¸åŒã€‚ä½ å¯ä»¥ä½¿ç”¨[method get_camera_screen_center]æ¥èŽ·"
-"å–真实ä½ç½®ã€‚"
+"用于2D场景的相机节点。它强制å±å¹•(当å‰å±‚)跟éšè¯¥èŠ‚ç‚¹æ»šåŠ¨ã€‚ä¸Žæ‰‹åŠ¨æ”¹å˜åŸºäºŽ "
+"[CanvasItem] èŠ‚ç‚¹çš„åæ ‡ç›¸æ¯”ï¼Œè¿™ä½¿å¾—å¯¹å¯æ»šåŠ¨åœºæ™¯è¿›è¡Œç¼–ç¨‹æ›´åŠ å®¹æ˜“å’Œå¿«æ·ã€‚\n"
+"这个节点旨在æˆä¸ºç®€å•的助手,让事情便æ·ï¼Œä½†å¯èƒ½éœ€è¦æ›´å¤šçš„åŠŸèƒ½æ¥æ”¹å˜ç›¸æœºçš„工作"
+"æ–¹å¼ã€‚è¦åˆ¶ä½œè‡ªå®šä¹‰ç›¸æœºèŠ‚ç‚¹ï¼Œåˆ™ä»Ž[Node2D]继承,并通过设置[Viewport]中的"
+"[member Viewport.canvas_transform]æ¥æ”¹å˜ç”»å¸ƒçš„å˜æ¢ï¼ˆä½ å¯ä»¥é€šè¿‡ä½¿ç”¨[method "
+"Node.get_viewport]获得当å‰çš„[Viewport])。\n"
+"请注æ„,[Camera2D]节点的[code]position[/code]å¹¶ä¸ä»£è¡¨å±å¹•çš„å®žé™…åæ ‡ï¼Œå®ƒå¯èƒ½ä¼š"
+"因为应用的平滑或é™åˆ¶è€Œæœ‰æ‰€ä¸åŒã€‚ä½ å¯ä»¥ä½¿ç”¨[method get_camera_screen_center]æ¥"
+"获å–å®žé™…åæ ‡ã€‚"
#: doc/classes/Camera2D.xml:13 doc/classes/TileMap.xml:13
#: doc/classes/TileSet.xml:13
@@ -14086,7 +14328,7 @@ msgstr ""
msgid ""
"Make this the current 2D camera for the scene (viewport and layer), in case "
"there are many cameras in the scene."
-msgstr "使之æˆä¸ºåœºæ™¯ï¼ˆè§†å£å’Œå›¾å±‚)的当å‰2D相机,以防场景中有很多相机。"
+msgstr "使之æˆä¸ºåœºæ™¯ï¼ˆè§†çª—和图层)的当å‰2D相机,以防场景中有很多相机。"
#: doc/classes/Camera2D.xml:70
msgid ""
@@ -14221,6 +14463,10 @@ msgid ""
"without smoothing, even with this setting enabled, invoke [method "
"reset_smoothing]."
msgstr ""
+"如果 [code]true[/code],相机在达到æžé™æ—¶å¹³æ»‘åœ°åœæ­¢ã€‚\n"
+"如果平滑被ç¦ç”¨ï¼Œè¿™å°†ä¸èµ·ä½œç”¨ã€‚\n"
+"[b]注æ„:[/b]è¦ç«‹å³å°†ç›¸æœºçš„ä½ç½®æ›´æ–°åˆ°é™åˆ¶èŒƒå›´å†…而ä¸è¿›è¡Œå¹³æ»‘,å³ä½¿å¯ç”¨äº†æ­¤è®¾"
+"置,也è¦è°ƒç”¨[method reset_smoothing]。"
#: doc/classes/Camera2D.xml:143
msgid ""
@@ -14282,7 +14528,7 @@ msgid ""
"example, use [code]Vector2(0.5, 0.5)[/code] for a 2× zoom-in, and "
"[code]Vector2(4, 4)[/code] for a 4× zoom-out."
msgstr ""
-"相机相对于视å£çš„缩放比例。大于[code] Vector2(1,1)[/code]的值会缩å°å†…容,而"
+"相机相对于视窗的缩放比例。大于[code] Vector2(1,1)[/code]的值会缩å°å†…容,而"
"较å°çš„值会起到放大镜的作用。例如,将[code] Vector2(0.5,0.5)[/code]放大2"
"å€ï¼Œç„¶åŽå°†[code] Vector2(4,4)[/code]用于4å€ç¼©å°ã€‚"
@@ -14313,7 +14559,6 @@ msgid ""
msgstr "通过相机æºï¼Œæ‚¨å¯ä»¥è®¿é—®è¿žæŽ¥åˆ°è®¾å¤‡çš„å•个物ç†ç›¸æœºã€‚"
#: doc/classes/CameraFeed.xml:7
-#, fuzzy
msgid ""
"A camera feed gives you access to a single physical camera attached to your "
"device. When enabled, Godot will start capturing frames from the camera "
@@ -14323,53 +14568,48 @@ msgid ""
"for you if you set the environment to show the camera image in the "
"background."
msgstr ""
-"通过相机æºï¼Œæ‚¨å¯ä»¥è®¿é—®è¿žæŽ¥åˆ°è®¾å¤‡çš„å•个物ç†ç›¸æœºã€‚å¯ç”¨åŽï¼ŒGodot 将开始从相机æ•"
-"获帧,然åŽå¯ä»¥ä½¿ç”¨ã€‚å¦è¯·å‚阅 [CameraServer]。\n"
+"通过相机æºï¼Œä½ å¯ä»¥è®¿é—®è¿žæŽ¥åˆ°è®¾å¤‡çš„å•个物ç†ç›¸æœºã€‚å¯ç”¨åŽï¼ŒGodot 将开始从相机æ•"
+"获帧,然åŽä½¿ç”¨ã€‚\n"
"[b]注æ„:[/b]很多相机会返回YCbCr图åƒï¼Œè¿™äº›å›¾åƒè¢«åˆ†æˆä¸¤ä¸ªçº¹ç†ï¼Œéœ€è¦åœ¨ç€è‰²å™¨ä¸­"
-"组åˆã€‚如果您将环境设置为在背景中显示相机图åƒï¼ŒGodot 会自动为您执行此æ“作。"
+"组åˆã€‚如果你将环境设置为在背景中显示相机图åƒï¼ŒGodot 会自动为将执行此æ“作。"
#: doc/classes/CameraFeed.xml:16
-#, fuzzy
msgid "Returns the unique ID for this feed."
-msgstr "返回该对等体的IP。"
+msgstr "返回该æºçš„唯一ID。"
#: doc/classes/CameraFeed.xml:22
msgid "Returns the camera's name."
msgstr "返回相机的å称。"
#: doc/classes/CameraFeed.xml:28
-#, fuzzy
msgid "Returns the position of camera on the device."
-msgstr "返回给定ID处的ä½ç½®è¿½è¸ªå™¨ã€‚"
+msgstr "返回设备上的相机ä½ç½®ã€‚"
#: doc/classes/CameraFeed.xml:34
-#, fuzzy
msgid "If [code]true[/code], the feed is active."
-msgstr "如果[code]true[/code],则暂åœè§†é¢‘。"
+msgstr "如果[code]true[/code]ï¼Œåˆ™æºæ˜¯æ¿€æ´»çš„。"
#: doc/classes/CameraFeed.xml:37
-#, fuzzy
msgid "The transform applied to the camera's image."
-msgstr "返回应用于该项导航网格的转æ¢ã€‚"
+msgstr "应用于相机图åƒçš„å˜æ¢ã€‚"
#: doc/classes/CameraFeed.xml:42
-#, fuzzy
msgid "No image set for the feed."
-msgstr "没有关于已编辑属性的æç¤ºã€‚"
+msgstr "没有为该æºè®¾ç½®å›¾åƒã€‚"
#: doc/classes/CameraFeed.xml:45
msgid "Feed supplies RGB images."
-msgstr "Feed æä¾› RGB 图åƒã€‚"
+msgstr "æºæä¾›RGB图åƒã€‚"
#: doc/classes/CameraFeed.xml:48
msgid "Feed supplies YCbCr images that need to be converted to RGB."
-msgstr ""
+msgstr "æºæä¾›çš„ YCbCr 图åƒéœ€è¦è½¬æ¢æˆ RGB 图åƒã€‚"
#: doc/classes/CameraFeed.xml:51
msgid ""
"Feed supplies separate Y and CbCr images that need to be combined and "
"converted to RGB."
-msgstr ""
+msgstr "æºæä¾›å•独的Yå’ŒCbCr图åƒï¼Œéœ€è¦åˆå¹¶å¹¶è½¬æ¢ä¸ºRGB。"
#: doc/classes/CameraFeed.xml:54
msgid "Unspecified position."
@@ -14377,42 +14617,37 @@ msgstr "æœªæŒ‡å®šåæ ‡ã€‚"
#: doc/classes/CameraFeed.xml:57
msgid "Camera is mounted at the front of the device."
-msgstr ""
+msgstr "相机安装在了设备å‰éƒ¨ã€‚"
#: doc/classes/CameraFeed.xml:60
msgid "Camera is mounted at the back of the device."
-msgstr ""
+msgstr "相机安装在了设备åŽéƒ¨ã€‚"
#: doc/classes/CameraServer.xml:4
msgid "Server keeping track of different cameras accessible in Godot."
msgstr "æœåŠ¡å™¨è·Ÿè¸ªGodot中å¯è®¿é—®çš„ä¸åŒæ‘„åƒå¤´ã€‚"
#: doc/classes/CameraServer.xml:7
-#, fuzzy
msgid ""
"The [CameraServer] keeps track of different cameras accessible in Godot. "
"These are external cameras such as webcams or the cameras on your phone.\n"
"It is notably used to provide AR modules with a video feed from the camera."
msgstr ""
-"[CameraServer]跟踪Godot中å¯è®¿é—®çš„ä¸åŒæ‘„åƒå¤´ã€‚这些是外部摄åƒå¤´ï¼Œå¦‚网络摄åƒå¤´æˆ–"
-"手机上的摄åƒå¤´ã€‚\n"
-"值得注æ„的是,它用于为ARæ¨¡å—æä¾›æ¥è‡ªæ‘„åƒå¤´çš„视频æºã€‚\n"
-"[b]注æ„:[/b]这个类目å‰åªåœ¨macOSå’ŒiOS上实现。在其他平å°ä¸Šï¼Œå°†æ— æ³•使用"
-"[CameraFeed]。"
+"[CameraServer]记录了Godot中å¯è®¿é—®çš„ä¸åŒæ‘„åƒæœºã€‚è¿™äº›æ˜¯å¤–éƒ¨æ‘„åƒæœºï¼Œå¦‚ç½‘ç»œæ‘„åƒæœº"
+"æˆ–æ‰‹æœºä¸Šçš„æ‘„åƒæœºã€‚\n"
+"它主è¦ç”¨äºŽä¸ºARæ¨¡å—æä¾›æ¥è‡ªæ‘„åƒæœºçš„视频资料。"
#: doc/classes/CameraServer.xml:17
-#, fuzzy
msgid "Adds a camera feed to the camera server."
-msgstr "将相机[code]feed[/code]添加到相机æœåŠ¡å™¨ã€‚"
+msgstr "å°†ç›¸æœºæºæ·»åŠ åˆ°ç›¸æœºæœåŠ¡ã€‚"
#: doc/classes/CameraServer.xml:23
msgid "Returns an array of [CameraFeed]s."
-msgstr "返回一个[CameraFeed]的数组。"
+msgstr "返回一个 [CameraFeed] 数组。"
#: doc/classes/CameraServer.xml:30
-#, fuzzy
msgid "Returns the [CameraFeed] with this id."
-msgstr "返回此信å·çš„å称。"
+msgstr "返回具有此ID的[CameraFeed]。"
#: doc/classes/CameraServer.xml:36
msgid "Returns the number of [CameraFeed]s registered."
@@ -14423,14 +14658,12 @@ msgid "Removes a [CameraFeed]."
msgstr "移除[CameraFeed]。"
#: doc/classes/CameraServer.xml:51
-#, fuzzy
msgid "Emitted when a [CameraFeed] is added (e.g. webcam is plugged in)."
-msgstr "当添加[CameraFeed]æ—¶å‘出(例如,æ’入了网络摄åƒå¤´ï¼‰ã€‚"
+msgstr "当添加[CameraFeed]时触å‘,例如,æ’入网络摄åƒå¤´ã€‚"
#: doc/classes/CameraServer.xml:57
-#, fuzzy
msgid "Emitted when a [CameraFeed] is removed (e.g. webcam is unplugged)."
-msgstr "当[CameraFeed]被移除时å‘出(例如,网络摄åƒå¤´è¢«æ‹”掉)。"
+msgstr "移除 [CameraFeed] 时触å‘,例如拔掉网络摄åƒå¤´ã€‚"
#: doc/classes/CameraServer.xml:63
msgid "The RGBA camera image."
@@ -14450,7 +14683,7 @@ msgstr "CbCr分é‡ç›¸æœºçš„图åƒã€‚"
#: doc/classes/CameraTexture.xml:4
msgid "Texture provided by a [CameraFeed]."
-msgstr "纹ç†ç”±[CameraFeed]æä¾›ã€‚"
+msgstr "ç”±[CameraFeed]æä¾›çš„纹ç†ã€‚"
#: doc/classes/CameraTexture.xml:7
msgid ""
@@ -14530,14 +14763,16 @@ msgstr ""
#: doc/classes/CanvasItem.xml:15 doc/classes/CanvasLayer.xml:10
#: doc/classes/InputEvent.xml:11 doc/classes/Viewport.xml:15
msgid "https://docs.godotengine.org/en/3.4/tutorials/2d/2d_transforms.html"
-msgstr "https://docs.godotengine.org/en/3.4/tutorials/2d/2d_transforms.html"
+msgstr ""
+"https://docs.godotengine.org/zh_CN/stable/tutorials/2d/2d_transforms.html"
#: doc/classes/CanvasItem.xml:16 doc/classes/Control.xml:18
#: doc/classes/Node2D.xml:10
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/2d/custom_drawing_in_2d.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/2d/custom_drawing_in_2d.html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/2d/custom_drawing_in_2d."
+"html"
#: doc/classes/CanvasItem.xml:23
msgid ""
@@ -14569,11 +14804,11 @@ msgid "Draws a colored polygon of any amount of points, convex or concave."
msgstr "ç»˜åˆ¶ä»»æ„æ•°é‡ç‚¹çš„彩色多边形,凸或凹。"
#: doc/classes/CanvasItem.xml:80
-#, fuzzy
msgid ""
"Draws a line from a 2D point to another, with a given color and width. It "
"can be optionally antialiased."
-msgstr "用给定的颜色和宽度,从一个2D点画一æ¡çº¿åˆ°å¦ä¸€ä¸ªç‚¹ã€‚"
+msgstr ""
+"绘制一æ¡ä»Ž 2D 点到å¦ä¸€ä¸ªç‚¹çš„线,具有给定的颜色和宽度。它å¯ä»¥é€‰æ‹©æŠ—锯齿。"
#: doc/classes/CanvasItem.xml:91
msgid ""
@@ -14588,9 +14823,11 @@ msgid ""
"[b]Note:[/b] [code]width[/code] and [code]antialiased[/code] are currently "
"not implemented and have no effect."
msgstr ""
+"使用uniform [code]color[/code] 绘制多æ¡å¹³è¡Œçº¿ã€‚\n"
+"[b]注:[/b] [code]width[/code] å’Œ [code]antialiased[/code] ç›®å‰æ²¡æœ‰å®žçŽ°ï¼Œæ²¡æœ‰"
+"效果。"
#: doc/classes/CanvasItem.xml:112
-#, fuzzy
msgid ""
"Draws multiple, parallel lines with a uniform [code]width[/code] and segment-"
"by-segment coloring. Colors assigned to line segments match by index between "
@@ -14598,8 +14835,10 @@ msgid ""
"[b]Note:[/b] [code]width[/code] and [code]antialiased[/code] are currently "
"not implemented and have no effect."
msgstr ""
-"以统一的[code]width[/code]å’Œé€æ®µç€è‰²çš„æ–¹å¼ç»˜åˆ¶å¤šæ¡å¹³è¡Œçº¿ã€‚分é…给线段的颜色与"
-"[code]points[/code]å’Œ[code]colors[/code]之间的索引相匹é…。"
+"以 uniform çš„ [code]width[/code] å’Œé€æ®µç€è‰²ç»˜åˆ¶å¤šæ¡å¹³è¡Œçº¿ã€‚分é…给线段的颜色"
+"按 [code]points[/code] å’Œ [code]colors[/code] 之间的索引匹é…。\n"
+"[b]注:[/b] [code]width[/code]å’Œ[code]antialiased[/code]ç›®å‰æ²¡æœ‰å®žçŽ°ï¼Œæ²¡æœ‰æ•ˆ"
+"果。"
#: doc/classes/CanvasItem.xml:122
msgid ""
@@ -14614,34 +14853,32 @@ msgid "Draws a polygon of any amount of points, convex or concave."
msgstr "ç»˜åˆ¶ä»»æ„æ•°é‡çš„点的多边形,凸或凹。"
#: doc/classes/CanvasItem.xml:144
-#, fuzzy
msgid ""
"Draws interconnected line segments with a uniform [code]color[/code] and "
"[code]width[/code] and optional antialiasing."
-msgstr "绘制具有统一[code]colors[/code]和[code]width[/code]的相互连接的线段。"
+msgstr ""
+"以uniform çš„[code]color[/code]å’Œ[code]width[/code]æ¥ç»˜åˆ¶ç›¸äº’连接的线段,å¯é€‰"
+"抗锯齿。"
#: doc/classes/CanvasItem.xml:154
-#, fuzzy
msgid ""
"Draws interconnected line segments with a uniform [code]width[/code], "
"segment-by-segment coloring, and optional antialiasing. Colors assigned to "
"line segments match by index between [code]points[/code] and [code]colors[/"
"code]."
msgstr ""
-"绘制具有统一[code]width[/code]å’Œé€æ®µç€è‰²çš„相互连接的线段。分é…给线段的颜色与"
-"[code]点[/code]å’Œ[code]colors[/code]之间的索引匹é…。"
+"以uniformçš„[code]width[/code]ç»˜åˆ¶ç›¸äº’è¿žæŽ¥çš„çº¿æ®µï¼Œé€æ®µç€è‰²ï¼Œå¯é€‰æŠ—锯齿。分é…ç»™"
+"线段的颜色通过[code]points[/code]å’Œ[code]colors[/code]之间的索引进行匹é…。"
#: doc/classes/CanvasItem.xml:166
-#, fuzzy
msgid ""
"Draws a custom primitive. 1 point for a point, 2 points for a line, 3 points "
"for a triangle and 4 points for a quad."
msgstr ""
-"绘制一个自定义基元。1点为一个点,2点为一æ¡çº¿ï¼Œ3点为一个三角形,4点为一个四边"
+"绘制自定义基本网格。1点为一个点,2点为一æ¡çº¿ï¼Œ3点为一个三角形,4点为一个四边"
"形。"
#: doc/classes/CanvasItem.xml:177
-#, fuzzy
msgid ""
"Draws a rectangle. If [code]filled[/code] is [code]true[/code], the "
"rectangle will be filled with the [code]color[/code] specified. If "
@@ -14652,11 +14889,12 @@ msgid ""
"[b]Note:[/b] [code]width[/code] and [code]antialiased[/code] are only "
"effective if [code]filled[/code] is [code]false[/code]."
msgstr ""
-"绘制一个矩形。如果[code]fill[/code]是[code]true[/code],则用指定的"
-"[code]color[/code]填充矩形。如果[code]fill[/code]是[code]false[/code],则以指"
-"定的[code]color[/code]å’Œ[code]width[/code]æ¥ç»˜åˆ¶çŸ©å½¢ã€‚\n"
-"[b]注æ„:[/b] [code]width[/code]åªæœ‰åœ¨[code]filled[/code]为[code]false[/code]"
-"æ—¶æ‰æœ‰æ•ˆã€‚"
+"绘制一个矩形。如果[code]filled[/code]是[code]true[/code],矩形将被填充为指定"
+"的[code]color[/code]。如果[code]filled[/code]是[code]false[/code],矩形将以"
+"[code]color[/code]å’Œ[code]width[/code]指定的笔画形å¼ç»˜åˆ¶ã€‚如果"
+"[code]antialiased[/code]是[code]true[/code]ï¼Œçº¿æ¡æŠ—é”¯é½¿ã€‚\n"
+"[b]注æ„:[/b][code]width[/code]å’Œ[code]antialiased[/code]åªæœ‰åœ¨[code]filled[/"
+"code]是[code]false[/code]æ—¶æ‰æœ‰æ•ˆã€‚"
#: doc/classes/CanvasItem.xml:187
msgid ""
@@ -14671,7 +14909,6 @@ msgid ""
msgstr "è®¾ç½®é€šè¿‡çŸ©é˜µç»˜åˆ¶æ—¶çš„è‡ªå®šä¹‰å˜æ¢ã€‚之åŽç»˜åˆ¶çš„任何东西都将被转æ¢ã€‚"
#: doc/classes/CanvasItem.xml:205
-#, fuzzy
msgid ""
"Draws [code]text[/code] using the specified [code]font[/code] at the "
"[code]position[/code] (bottom-left corner using the baseline of the font). "
@@ -14688,14 +14925,14 @@ msgid ""
"[/codeblock]\n"
"See also [method Font.draw]."
msgstr ""
-"在[code]position[/code](左上角)使用指定的[code]font[/code]绘制[code]text[/"
-"code]。文本的颜色将乘以 [code]modulate[/code]。如果 [code]clip_w[/code] 大于"
-"或等于0,如果文本超过指定的宽度,则会被剪切。\n"
-"[b]使用默认项目字体的示例:[/b]。\n"
+"使用指定的[code]font[/code]在[code]position[/code]绘制[code]text[/code](左下"
+"角作为字体的基线)。该文本的颜色将乘以[code]modulate[/code]。如果"
+"[code]clip_w[/code]大于或等于0,文本超过了指定的宽度,将被è£å‰ªã€‚\n"
+"[b]使用项目默认字体的例å­ï¼š[/b]\n"
"[codeblock]\n"
-"# If using this method in a script that redraws constantly, move the\n"
-"# `default_font` declaration to a member variable assigned in `_ready()`\n"
-"# so the Control is only created once.\n"
+"# å¦‚æžœåœ¨ä¸æ–­é‡ç»˜çš„脚本中使用此方法,\n"
+"# 则将`default_font`声明移动到在`_ready()`中赋值的æˆå‘˜å˜é‡ä¸­\n"
+"# 这样Controlåªåˆ›å»ºä¸€æ¬¡ã€‚\n"
"var default_font = Control.new().get_font(\"font\")\n"
"draw_string(default_font, Vector2(64, 64), \"Hello world\")\n"
"[/codeblock]\n"
@@ -14733,17 +14970,16 @@ msgid ""
"for performance reasons. Transforms are accumulated and then set. Use this "
"if you need an up-to-date transform when doing physics operations."
msgstr ""
-"å¼ºåˆ¶æ›´æ–°å˜æ¢ã€‚由于性能原因,物ç†å­¦ä¸­çš„å˜æ¢å˜åŒ–䏿˜¯å³æ—¶çš„ã€‚å˜æ¢æ˜¯ç´¯ç§¯åŽå†è®¾ç½®"
-"çš„ã€‚å¦‚æžœæ‚¨åœ¨è¿›è¡Œç‰©ç†æ“ä½œæ—¶éœ€è¦æœ€æ–°çš„å˜æ¢ï¼Œè¯·ä½¿ç”¨æ­¤åŠŸèƒ½ã€‚"
+"å¼ºåˆ¶æ›´æ–°å˜æ¢ã€‚由于性能原因,物ç†ä¸­çš„å˜æ¢æ”¹å˜ä¸æ˜¯å³æ—¶çš„ã€‚å˜æ¢æ˜¯åœ¨ç´¯ç§¯åŽå†è®¾"
+"ç½®ã€‚å¦‚æžœä½ åœ¨è¿›è¡Œç‰©ç†æ“ä½œæ—¶éœ€è¦æœ€æ–°çš„å˜æ¢ï¼Œè¯·ä½¿ç”¨æ­¤åŠŸèƒ½ã€‚"
#: doc/classes/CanvasItem.xml:269
msgid "Returns the [RID] of the [World2D] canvas where this item is in."
msgstr "返回此项目所在的[World2D]画布的[RID]。"
#: doc/classes/CanvasItem.xml:275
-#, fuzzy
msgid "Returns the canvas item RID used by [VisualServer] for this item."
-msgstr "返回[RenderingServer]为该项目使用的canvas项目RID。"
+msgstr "返回此[VisualServer]项使用的画布项RID。"
#: doc/classes/CanvasItem.xml:281
msgid "Returns the transform matrix of this item's canvas."
@@ -14772,7 +15008,7 @@ msgstr "è¿”å›žæ­¤é¡¹ç›®çš„å˜æ¢çŸ©é˜µã€‚"
#: doc/classes/CanvasItem.xml:317
msgid "Returns the viewport's boundaries as a [Rect2]."
-msgstr "以[Rect2]å½¢å¼è¿”回视å£çš„边界。"
+msgstr "以[Rect2]å½¢å¼è¿”回视窗的边界。"
#: doc/classes/CanvasItem.xml:323
msgid "Returns this item's transform in relation to the viewport."
@@ -14797,7 +15033,7 @@ msgid ""
"Returns [code]true[/code] if the node is set as top-level. See [method "
"set_as_toplevel]."
msgstr ""
-"如果节点设置为顶层,则返回[code] true [/code]。å‚阅[方法set_as_toplevel]。"
+"如果节点设置为顶层,则返回[code] true [/code]。å‚阅[method set_as_toplevel]。"
#: doc/classes/CanvasItem.xml:353
msgid ""
@@ -14933,6 +15169,8 @@ msgid ""
"or when an action is taking place that may have impacted these boundaries (e."
"g. changing [member Sprite.texture])."
msgstr ""
+"在物体[Rect2]边缘(ä½ç½®æˆ–大å°ï¼‰æ”¹å˜ï¼Œæˆ–有影å“到边缘的æ“作(比如修改[member "
+"Sprite.texture])时触å‘。"
#: doc/classes/CanvasItem.xml:455
msgid "Emitted when the visibility (hidden/visible) changes."
@@ -14968,6 +15206,8 @@ msgid ""
"applicable for render targets with a transparent background. No lighting "
"will be applied."
msgstr ""
+"å…³é—­æ··åˆæ¨¡å¼ã€‚颜色(包括 alpha)将会å˜åŽŸæ¥çš„æ ·å­ã€‚ä»…èƒ½åœ¨æ¸²æŸ“é€æ˜ŽèƒŒæ™¯çš„目标使"
+"用。ä¸ä¼šåº”用任何光照。"
#: doc/classes/CanvasItem.xml:479
msgid ""
@@ -15019,16 +15259,15 @@ msgid "The manner in which material reacts to lighting."
msgstr "æè´¨å¯¹ç…§æ˜Žçš„å应方å¼ã€‚"
#: doc/classes/CanvasItemMaterial.xml:21
-#, fuzzy
msgid ""
"The number of columns in the spritesheet assigned as [Texture] for a "
"[Particles2D] or [CPUParticles2D].\n"
"[b]Note:[/b] This property is only used and visible in the editor if [member "
"particles_animation] is [code]true[/code]."
msgstr ""
-"Spritesheet中为[GPUParticles2D]或[CPUParticles2D]分é…为[Texture2D]的列数。\n"
-"[b]注æ„:[/b]仅当[memberparticles_animation]为[code] true [/code]时,此属性æ‰"
-"在编辑器中使用和å¯è§ã€‚"
+"为 [Particles2D] 或 [CPUParticles2D] 分é…为 [Texture] ç²¾çµè¡¨ä¸­çš„列数。\n"
+"[b]注æ„:[/b]è¿™ä¸ªå±žæ€§åªæœ‰åœ¨ [member particles_animation] 为 [code]true[/code]"
+"æ—¶æ‰ä¼šè¢«ä½¿ç”¨ï¼Œå¹¶åœ¨ç¼–辑器中å¯è§ã€‚"
#: doc/classes/CanvasItemMaterial.xml:25
msgid ""
@@ -15041,19 +15280,17 @@ msgstr ""
"会在编辑器中使用并å¯è§ã€‚"
#: doc/classes/CanvasItemMaterial.xml:29
-#, fuzzy
msgid ""
"The number of rows in the spritesheet assigned as [Texture] for a "
"[Particles2D] or [CPUParticles2D].\n"
"[b]Note:[/b] This property is only used and visible in the editor if [member "
"particles_animation] is [code]true[/code]."
msgstr ""
-"Spritesheet中为[GPUParticles2D]或[CPUParticles2D]分é…为[Texture2D]的行数。\n"
+"spritesheet中为[GPUParticles2D]或[CPUParticles2D]分é…为[Texture2D]的行数。\n"
"[b]注æ„:[/b]仅当[member particle_animation]为[code] true [/code]时,此属性æ‰"
"在编辑器中使用和å¯è§ã€‚"
#: doc/classes/CanvasItemMaterial.xml:33
-#, fuzzy
msgid ""
"If [code]true[/code], enable spritesheet-based animation features when "
"assigned to [Particles2D] and [CPUParticles2D] nodes. The [member "
@@ -15062,8 +15299,8 @@ msgid ""
"This property (and other [code]particles_anim_*[/code] properties that "
"depend on it) has no effect on other types of nodes."
msgstr ""
-"如果[code]true[/code],当分é…ç»™[GPUParticles2D]å’Œ[CPUParticles2D]节点时,å¯ç”¨"
-"基于spritesheet的动画功能。[member ParticlesMaterial.anim_speed]或[member "
+"如果为[code]true[/code],当分é…ç»™[GPUParticles2D]å’Œ[CPUParticles2D]节点时,å¯"
+"用基于spritesheet的动画功能。[member ParticlesMaterial.anim_speed]或[member "
"CPUParticles2D.anim_speed]也应设置为正值,æ‰èƒ½æ’­æ”¾åŠ¨ç”»ã€‚\n"
"这个属性(以åŠå…¶ä»–ä¾èµ–于它的[code]particles_anim_*[/code]属性)对其他类型的节"
"点没有影å“。"
@@ -15102,7 +15339,8 @@ msgstr ""
#: doc/classes/CanvasLayer.xml:11
msgid "https://docs.godotengine.org/en/3.4/tutorials/2d/canvas_layers.html"
-msgstr "https://docs.godotengine.org/en/3.4/tutorials/2d/canvas_layers.html"
+msgstr ""
+"https://docs.godotengine.org/zh_CN/stable/tutorials/2d/canvas_layers.html"
#: doc/classes/CanvasLayer.xml:18
msgid "Returns the RID of the canvas used by this layer."
@@ -15114,13 +15352,13 @@ msgid ""
"code], uses the default viewport instead."
msgstr ""
"分é…ç»™[CanvasLayer]的自定义[Viewport]节点。如果[code]null[/code],则使用默认"
-"的视å£ã€‚"
+"的视窗。"
#: doc/classes/CanvasLayer.xml:27
msgid ""
"Sets the layer to follow the viewport in order to simulate a pseudo 3D "
"effect."
-msgstr "将图层设置为跟éšè§†å£ï¼Œä»¥æ¨¡æ‹Ÿä¼ª3D效果。"
+msgstr "将图层设置为跟éšè§†çª—,以模拟伪3D效果。"
#: doc/classes/CanvasLayer.xml:30
msgid ""
@@ -15179,6 +15417,8 @@ msgid ""
"[b]Note:[/b] The capsule's total height is equal to [member mid_height] + 2 "
"* [member radius]."
msgstr ""
+"胶囊体中间圆柱体(除了两个åŠçƒä½“的部分)的高度。\n"
+"[b]注æ„:[/b]圆柱体的总高度等于[member mid_height] + 2 * [member radius]。"
#: doc/classes/CapsuleMesh.xml:19
msgid "Number of radial segments on the capsule mesh."
@@ -15242,8 +15482,8 @@ msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/gui/bbcode_in_richtextlabel."
"html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/gui/bbcode_in_richtextlabel."
-"html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/gui/"
+"bbcode_in_richtextlabel.html"
#: doc/classes/CharFXTransform.xml:11 doc/classes/RichTextEffect.xml:17
msgid ""
@@ -15281,17 +15521,16 @@ msgid "The color the character will be drawn with."
msgstr "绘制角色所用的颜色。"
#: doc/classes/CharFXTransform.xml:31
-#, fuzzy
msgid ""
"The time elapsed since the [RichTextLabel] was added to the scene tree (in "
"seconds). Time stops when the [RichTextLabel] is paused (see [member Node."
"pause_mode]). Resets when the text in the [RichTextLabel] is changed.\n"
"[b]Note:[/b] Time still passes while the [RichTextLabel] is hidden."
msgstr ""
-"自从[RichTextLabel]添加到场景树以æ¥ç»è¿‡çš„æ—¶é—´ï¼ˆä»¥ç§’为å•ä½ï¼‰ã€‚除éžé¡¹ç›®"
-"[RichTextLabel]的[member Node.pause_mode]设置为[constant Node."
-"PAUSE_MODE_PROCESS],å¦åˆ™æš‚åœé¡¹ç›®æ—¶ï¼Œæ—¶é—´å°†åœæ­¢ã€‚\n"
-"[b]注æ„:[/b]当[RichTextLabel]被éšè—,时间ä»ç„¶æµé€ã€‚"
+"自[RichTextLabel]è¢«æ·»åŠ åˆ°åœºæ™¯æ ‘åŽæ‰€ç»è¿‡çš„æ—¶é—´ï¼Œå•ä½ç§’。时间在[RichTextLabel]"
+"æš‚åœæ—¶åœæ­¢ï¼Œå‚阅[member Node.pause_mode]。当[RichTextLabel]ä¸­çš„æ–‡æœ¬æ”¹å˜æ—¶ï¼Œä¼š"
+"釿–°è®¾ç½®ã€‚\n"
+"[b]注æ„:[/b] 当[RichTextLabel]被éšè—时,时间ä»ä¼šå¢žåŠ ã€‚"
#: doc/classes/CharFXTransform.xml:35
msgid ""
@@ -15310,7 +15549,7 @@ msgid ""
msgstr ""
"包å«åœ¨å¼€å¤´çš„BBCodeæ ‡è®°ä¸­ä¼ é€’çš„å‚æ•°ã€‚é»˜è®¤æƒ…å†µä¸‹ï¼Œå‚æ•°æ˜¯å­—符串。如果它们的内容"
"与[bool],[int]或[float]之类的类型匹é…,它们将被自动转æ¢ã€‚æ ¼å¼ä¸º[code] "
-"#rrggbb [/code]或[code] #rgb [/code]的颜色代ç å°†è½¬æ¢ä¸ºä¸é€æ˜Žçš„[颜色]。字符串"
+"#rrggbb [/code]或[code] #rgb [/code]的颜色代ç å°†è½¬æ¢ä¸ºä¸é€æ˜Žçš„[Color]。字符串"
"傿•°å³ä½¿ä½¿ç”¨å¼•å·ä¹Ÿä¸èƒ½åŒ…å«ç©ºæ ¼ã€‚如果存在,引å·ä¹Ÿå°†å‡ºçŽ°åœ¨æœ€ç»ˆå­—ç¬¦ä¸²ä¸­ã€‚\n"
"例如,开头的BBCode标签[code] [example foo = hello bar = true baz = 42 color ="
"#ffffff] [/code]将映射到以下[Dictionary]:\n"
@@ -15339,7 +15578,6 @@ msgid "Binary choice user interface widget. See also [CheckButton]."
msgstr "二元选择(有或无)用户界é¢å°éƒ¨ä»¶ã€‚å¦è¯·å‚阅[CheckButton]。"
#: doc/classes/CheckBox.xml:7
-#, fuzzy
msgid ""
"A checkbox allows the user to make a binary choice (choosing only one of two "
"possible options). It's similar to [CheckButton] in functionality, but it "
@@ -15350,10 +15588,11 @@ msgid ""
"See also [BaseButton] which contains common properties and methods "
"associated with this node."
msgstr ""
-"å¤é€‰æ¡†å…许用户进行二元选择(在两个å¯èƒ½çš„选项中åªé€‰æ‹©ä¸€ä¸ªï¼‰ã€‚它的功能与"
-"[CheckButton]类似,但它的外观ä¸åŒã€‚为了éµå¾ªæ—¢å®šçš„UX模å¼ï¼Œå»ºè®®åœ¨åˆ‡æ¢CheckBox对"
-"æŸä»¶äº‹æƒ…有[b]no[/b]ç«‹ç«¿è§å½±çš„æ•ˆæžœæ—¶ä½¿ç”¨å®ƒã€‚例如,当切æ¢å®ƒåªæœ‰åœ¨æŒ‰ä¸‹ç¡®è®¤æŒ‰é’®åŽ"
-"æ‰ä¼šåšæŸäº‹æ—¶ï¼Œå°±åº”该使用它。"
+"å¤é€‰æ¡†è®©ç”¨æˆ·åšå‡ºäºŒå…ƒé€‰æ‹©ï¼Œå³åœ¨ä¸¤ä¸ªå¯èƒ½çš„选项中åªé€‰æ‹©ä¸€ä¸ªã€‚它在功能上类似于"
+"[CheckButton],但外观ä¸åŒã€‚为了éµå¾ªç”¨æˆ·ä½“验,建议在切æ¢å®ƒå¯¹æŸäº›ä¸œè¥¿[b]没有[/"
+"b]ç›´æŽ¥å½±å“æ—¶ä½¿ç”¨CheckBox。例如,当切æ¢å®ƒåªä¼šåœ¨ç¡®è®¤æŒ‰é’®è¢«æŒ‰ä¸‹æ—¶åšä¸€äº›äº‹æƒ…时,"
+"使用它。\n"
+"å‚阅[BaseButton],它包å«äº†ä¸Žè¯¥èŠ‚ç‚¹ç›¸å…³çš„å¸¸è§„å±žæ€§å’Œæ–¹æ³•ã€‚"
#: doc/classes/CheckBox.xml:22
msgid "The vertical offset used when rendering the check icons (in pixels)."
@@ -15363,86 +15602,103 @@ msgstr "呈现å¤é€‰å›¾æ ‡æ—¶ä½¿ç”¨çš„垂直åç§»é‡ï¼ˆä»¥åƒç´ ä¸ºå•ä½ï¼‰ã€‚
msgid "The check icon to display when the [CheckBox] is checked."
msgstr "选中[CheckBox]时显示的å¤é€‰å›¾æ ‡ã€‚"
-#: doc/classes/CheckBox.xml:30
+#: doc/classes/CheckBox.xml:28
+msgid "The check icon to display when the [CheckBox] is checked and disabled."
+msgstr "当[CheckBox]被选中和ç¦ç”¨æ—¶è¦æ˜¾ç¤ºçš„勾选图标。"
+
+#: doc/classes/CheckBox.xml:31
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is disabled."
msgstr "当[CheckBox]被ç¦ç”¨æ—¶ï¼Œä½œä¸ºèƒŒæ™¯æ˜¾ç¤ºçš„[StyleBox]。"
-#: doc/classes/CheckBox.xml:33
+#: doc/classes/CheckBox.xml:34
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is focused."
msgstr "当[CheckBox]被èšç„¦æ—¶ï¼Œä½œä¸ºèƒŒæ™¯æ˜¾ç¤ºçš„[StyleBox]。"
-#: doc/classes/CheckBox.xml:36
+#: doc/classes/CheckBox.xml:37
msgid "The [Font] to use for the [CheckBox] text."
msgstr "用于[CheckBox]文本的[Font]。"
-#: doc/classes/CheckBox.xml:39
+#: doc/classes/CheckBox.xml:40
msgid "The [CheckBox] text's font color."
msgstr "[CheckBox]文本的字体颜色。"
-#: doc/classes/CheckBox.xml:42
+#: doc/classes/CheckBox.xml:43
msgid "The [CheckBox] text's font color when it's disabled."
msgstr "[CheckBox]文本被ç¦ç”¨æ—¶çš„字体颜色。"
-#: doc/classes/CheckBox.xml:45
+#: doc/classes/CheckBox.xml:46
+msgid ""
+"The [CheckBox] text's font color when it's focused. Only replaces the normal "
+"text color of the checkbox. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+"[CheckBox] 文本获得焦点时的字体颜色。åªå–代å¤é€‰æ¡†çš„æ­£å¸¸æ–‡æœ¬é¢œè‰²ã€‚ç¦ç”¨ã€æ‚¬åœå’Œ"
+"按下状æ€ä¼˜å…ˆäºŽè¿™ä¸ªé¢œè‰²ã€‚"
+
+#: doc/classes/CheckBox.xml:49
msgid "The [CheckBox] text's font color when it's hovered."
msgstr "[CheckBox]æ–‡æœ¬åœ¨æ‚¬åœæ—¶çš„字体颜色。"
-#: doc/classes/CheckBox.xml:48
+#: doc/classes/CheckBox.xml:52
msgid "The [CheckBox] text's font color when it's hovered and pressed."
msgstr "当[CheckBox]文本被悬åœå’ŒæŒ‰ä¸‹æ—¶çš„字体颜色。"
-#: doc/classes/CheckBox.xml:51
+#: doc/classes/CheckBox.xml:55
msgid "The [CheckBox] text's font color when it's pressed."
msgstr "文本被按下时的字体颜色。"
-#: doc/classes/CheckBox.xml:54
+#: doc/classes/CheckBox.xml:58
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered."
msgstr "当[CheckBox]è¢«æ‚¬åœæ—¶ä½œä¸ºèƒŒæ™¯æ˜¾ç¤ºçš„[StyleBox]。"
-#: doc/classes/CheckBox.xml:57
+#: doc/classes/CheckBox.xml:61
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered and "
"pressed."
msgstr "当[CheckBox]被悬åœå’ŒæŒ‰ä¸‹æ—¶ï¼Œä½œä¸ºèƒŒæ™¯æ˜¾ç¤ºçš„[StyleBox]。"
-#: doc/classes/CheckBox.xml:60
+#: doc/classes/CheckBox.xml:64
msgid "The separation between the check icon and the text (in pixels)."
msgstr "å¤é€‰å›¾æ ‡å’Œæ–‡æœ¬ä¹‹é—´çš„分隔(以åƒç´ ä¸ºå•ä½ï¼‰ã€‚"
-#: doc/classes/CheckBox.xml:63 doc/classes/CheckButton.xml:58
+#: doc/classes/CheckBox.xml:67 doc/classes/CheckButton.xml:61
msgid "The [StyleBox] to display as a background."
msgstr "[StyleBox]显示为背景。"
-#: doc/classes/CheckBox.xml:66
+#: doc/classes/CheckBox.xml:70
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is pressed."
msgstr "按下[CheckBox]时,[StyleBox]显示为背景。"
-#: doc/classes/CheckBox.xml:69
+#: doc/classes/CheckBox.xml:73
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is checked."
msgstr "如果将[CheckBox]é…置为å•选按钮,则选中[CheckBox]时显示的图标。"
-#: doc/classes/CheckBox.xml:74
+#: doc/classes/CheckBox.xml:78
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is unchecked."
msgstr "如果将[CheckBox]é…置为å•é€‰æŒ‰é’®ï¼Œåˆ™å–æ¶ˆé€‰ä¸­[CheckBox]时显示的图标。"
-#: doc/classes/CheckBox.xml:79
+#: doc/classes/CheckBox.xml:83
msgid "The check icon to display when the [CheckBox] is unchecked."
msgstr "未选中[CheckBox]时显示的å¤é€‰å›¾æ ‡ã€‚"
+#: doc/classes/CheckBox.xml:86
+msgid ""
+"The check icon to display when the [CheckBox] is unchecked and disabled."
+msgstr "当[CheckBox]未被选中并被ç¦ç”¨æ—¶è¦æ˜¾ç¤ºçš„勾选图标。"
+
#: doc/classes/CheckButton.xml:4
msgid "Checkable button. See also [CheckBox]."
msgstr "坿£€æŸ¥çš„æŒ‰é’®ã€‚å¦è¯·å‚阅[CheckBox]。"
#: doc/classes/CheckButton.xml:7
-#, fuzzy
msgid ""
"CheckButton is a toggle button displayed as a check field. It's similar to "
"[CheckBox] in functionality, but it has a different appearance. To follow "
@@ -15453,10 +15709,11 @@ msgid ""
"See also [BaseButton] which contains common properties and methods "
"associated with this node."
msgstr ""
-"CheckButtonæ˜¯æ˜¾ç¤ºä¸ºæ£€æŸ¥å­—æ®µçš„åˆ‡æ¢æŒ‰é’®ã€‚它在功能上类似于[CheckBox],但是外观ä¸"
-"åŒã€‚è¦éµå¾ªå·²å»ºç«‹çš„UX模å¼ï¼Œå»ºè®®åœ¨åˆ‡æ¢æ—¶å¯¹æŒ‰é’®ä½¿ç”¨[b]immediate[/b]效果时使用"
-"CheckButton。例如,如果切æ¢å®ƒå¯ç”¨/ç¦ç”¨è®¾ç½®è€Œæ— éœ€ç”¨æˆ·æŒ‰ä¸‹ç¡®è®¤æŒ‰é’®ï¼Œåˆ™åº”使用"
-"它。"
+"CheckButtonæ˜¯ä¸€ä¸ªåˆ‡æ¢æŒ‰é’®ï¼Œæ˜¾ç¤ºä¸ºä¸€ä¸ªå¯é€‰å­—段。它在功能上类似于[CheckBox],但"
+"外观ä¸åŒã€‚为了éµå¾ªç”¨æˆ·ä½“验,建议在切æ¢å®ƒå¯¹æŸäº›ä¸œè¥¿æœ‰[b]直接[/b]影哿—¶ä½¿ç”¨"
+"CheckButton。例如,如果切æ¢å®ƒå¯ä»¥å¯ç”¨æˆ–ç¦ç”¨è®¾ç½®è€Œä¸éœ€è¦ç”¨æˆ·æŒ‰ä¸‹ç¡®è®¤æŒ‰é’®æ—¶ï¼Œä½¿"
+"用它。\n"
+"å‚阅[BaseButton],它包å«äº†ä¸Žè¯¥èŠ‚ç‚¹ç›¸å…³çš„å¸¸è§„å±žæ€§å’Œæ–¹æ³•ã€‚"
#: doc/classes/CheckButton.xml:22
msgid "The vertical offset used when rendering the toggle icons (in pixels)."
@@ -15485,49 +15742,58 @@ msgid "The [CheckButton] text's font color when it's disabled."
msgstr "[CheckButton]文本在ç¦ç”¨æ—¶çš„字体颜色。"
#: doc/classes/CheckButton.xml:40
+msgid ""
+"The [CheckButton] text's font color when it's focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+"[CheckButton] æ–‡æœ¬èŽ·å¾—ç„¦ç‚¹æ—¶çš„å­—ä½“é¢œè‰²ã€‚ä»…æ›¿æ¢æŒ‰é’®çš„æ­£å¸¸æ–‡æœ¬é¢œè‰²ã€‚ç¦ç”¨ã€æ‚¬åœ"
+"和按下状æ€ä¼˜å…ˆäºŽæ­¤é¢œè‰²ã€‚"
+
+#: doc/classes/CheckButton.xml:43
msgid "The [CheckButton] text's font color when it's hovered."
msgstr "æ‚¬åœæ—¶[CheckButton]文本的字体颜色。"
-#: doc/classes/CheckButton.xml:43
+#: doc/classes/CheckButton.xml:46
msgid "The [CheckButton] text's font color when it's hovered and pressed."
msgstr "当[CheckButton]被悬åœå’ŒæŒ‰ä¸‹æ—¶ï¼Œå…¶æ–‡æœ¬çš„字体颜色。"
-#: doc/classes/CheckButton.xml:46
+#: doc/classes/CheckButton.xml:49
msgid "The [CheckButton] text's font color when it's pressed."
msgstr "按下[CheckButton]时文本的字体颜色。"
-#: doc/classes/CheckButton.xml:49
+#: doc/classes/CheckButton.xml:52
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered."
msgstr "当[CheckButton]è¢«æ‚¬åœæ—¶ä½œä¸ºèƒŒæ™¯æ˜¾ç¤ºçš„[StyleBox]。"
-#: doc/classes/CheckButton.xml:52
+#: doc/classes/CheckButton.xml:55
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered "
"and pressed."
msgstr "当[CheckButton]被悬åœå’ŒæŒ‰ä¸‹æ—¶ä½œä¸ºèƒŒæ™¯æ˜¾ç¤ºçš„[StyleBox]。"
-#: doc/classes/CheckButton.xml:55
+#: doc/classes/CheckButton.xml:58
msgid "The separation between the toggle icon and the text (in pixels)."
msgstr "切æ¢å›¾æ ‡å’Œæ–‡æœ¬ä¹‹é—´çš„分隔(以åƒç´ ä¸ºå•ä½ï¼‰ã€‚"
-#: doc/classes/CheckButton.xml:61
+#: doc/classes/CheckButton.xml:64
msgid "The icon to display when the [CheckButton] is unchecked."
msgstr "未选中[CheckButton]时显示的图标。"
-#: doc/classes/CheckButton.xml:64
+#: doc/classes/CheckButton.xml:67
msgid "The icon to display when the [CheckButton] is unchecked and disabled."
msgstr "未选中和ç¦ç”¨[CheckButton]时显示的图标。"
-#: doc/classes/CheckButton.xml:67
+#: doc/classes/CheckButton.xml:70
msgid "The icon to display when the [CheckButton] is checked."
msgstr "选中[CheckButton]时显示的图标。"
-#: doc/classes/CheckButton.xml:70
+#: doc/classes/CheckButton.xml:73
msgid "The icon to display when the [CheckButton] is checked and disabled."
msgstr "选中并ç¦ç”¨[CheckButton]时显示的图标。"
-#: doc/classes/CheckButton.xml:73
+#: doc/classes/CheckButton.xml:76
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is pressed."
msgstr "当[CheckButton]被按下时作为背景显示的[StyleBox]。"
@@ -15576,19 +15842,17 @@ msgid ""
msgstr "返回与该类关è”的类别,以用于文档和资产库。需è¦è°ƒè¯•模å¼ã€‚"
#: doc/classes/ClassDB.xml:39
-#, fuzzy
msgid ""
"Returns an array with all the keys in [code]enum[/code] of [code]class[/"
"code] or its ancestry."
msgstr ""
-"返回一个数组,其中带有 [code] class [/code] çš„æ‰€æœ‰æ•´æ•°å¸¸é‡æˆ–其祖先的å称。"
+"è¿”å›žä¸€ä¸ªæ•°ç»„ï¼Œå…¶ä¸­åŒ…å« [code]class[/code] 或其父级的 [code]enum[/code] 中的所"
+"有键。"
#: doc/classes/ClassDB.xml:47
-#, fuzzy
msgid ""
"Returns an array with all the enums of [code]class[/code] or its ancestry."
-msgstr ""
-"返回一个数组,其中带有 [code] class [/code] çš„æ‰€æœ‰æ•´æ•°å¸¸é‡æˆ–其祖先的å称。"
+msgstr "è¿”å›žä¸€ä¸ªæ•°ç»„ï¼Œå…¶ä¸­åŒ…å« [code]class[/code] 或其父级的所有枚举。"
#: doc/classes/ClassDB.xml:55
msgid ""
@@ -15599,13 +15863,10 @@ msgstr ""
"时,始终返回0。"
#: doc/classes/ClassDB.xml:64
-#, fuzzy
msgid ""
"Returns which enum the integer constant [code]name[/code] of [code]class[/"
"code] or its ancestry belongs to."
-msgstr ""
-"返回[code] class [/code]的整数常é‡[code] name [/code]或其父级的值。找ä¸åˆ°å¸¸é‡"
-"时,始终返回0。"
+msgstr "返回 [code]class[/code] æˆ–å…¶çˆ¶çº§æ‰€å±žçš„æžšä¸¾æ•´æ•°å¸¸é‡ [code]name[/code]。"
#: doc/classes/ClassDB.xml:72
msgid ""
@@ -15615,7 +15876,6 @@ msgstr ""
"返回一个数组,其中带有 [code] class [/code] çš„æ‰€æœ‰æ•´æ•°å¸¸é‡æˆ–其祖先的å称。"
#: doc/classes/ClassDB.xml:80
-#, fuzzy
msgid ""
"Returns an array with all the methods of [code]class[/code] or its ancestry "
"if [code]no_inheritance[/code] is [code]false[/code]. Every element of the "
@@ -15626,11 +15886,13 @@ msgid ""
"[b]Note:[/b] In exported release builds the debug info is not available, so "
"the returned dictionaries will contain only method names."
msgstr ""
-"如果[code] no_inheritance [/code]为[code] false [/code],则返回具有[code] "
-"class [/code]或其父级的所有方法的数组。数组的æ¯ä¸ªå…ƒç´ éƒ½æ˜¯å¸¦æœ‰ä»¥ä¸‹é”®çš„"
-"[Dictionary]:[code] args [/code],[code] default_args [/code],[code] flags "
-"[/code],[code] id [/code],[code]name[/code],[code]return: (class_name, "
-"hint, hint_string, name, type, usage)[/code]。"
+"如果[code]no_inheritance[/code]是[code]false[/code],返回一个包å«"
+"[code]class[/code]或其父级所有方法的数组。数组的æ¯ä¸ªå…ƒç´ éƒ½æ˜¯ä¸€ä¸ª"
+"[Dictionary],其键值如:[code]args[/code], [code]default_args[/code], "
+"[code]flags[/code], [code]id[/code], [code]name[/code], [code]return:"
+"(class_name, hint, hint_string, name, type, usage)[/code]。\n"
+"[b]注æ„:[/b]在导出的å‘布版本中,调试信æ¯ä¸å¯ç”¨ï¼Œæ‰€ä»¥è¿”回的字典将åªåŒ…嫿–¹æ³•å"
+"称。"
#: doc/classes/ClassDB.xml:89
msgid ""
@@ -15654,10 +15916,10 @@ msgid ""
"[code]name[/code], [code]return: (class_name, hint, hint_string, name, type, "
"usage)[/code]."
msgstr ""
-"返回[code]signal[/code][code]class[/code]或其父级的数æ®ã€‚返回值是带有以下键"
-"的 [Dictionary]: [code]args[/code], [code]default_args[/code], [code]flags[/"
-"code], [code]id[/code], [code]name[/code], [code]return:(class_name, hint, "
-"hint_string, name, type, usage)[/code]。"
+"返回 [code]class[/code] 或其父级的[code]ä¿¡å·[/code]æ•°æ®ã€‚返回 [Dictionary] å¹¶"
+"带有以下键: [code]args[/code], [code]default_args[/code], [code]flags[/"
+"code], [code]id[/code], [code]name[/code], [code]return:(class_name, hint, "
+"hint_string, name, type, usage)[/code]。"
#: doc/classes/ClassDB.xml:113
msgid ""
@@ -15670,12 +15932,10 @@ msgstr ""
"[[method class_get_signal]中所述。"
#: doc/classes/ClassDB.xml:122
-#, fuzzy
msgid ""
"Returns whether [code]class[/code] or its ancestry has an enum called "
"[code]name[/code] or not."
-msgstr ""
-"返回[code] class [/code]æˆ–å…¶çˆ¶çº§æ˜¯å¦æœ‰ä¸€ä¸ªç§°ä¸º[code] signal [/code]的信å·ã€‚"
+msgstr "返回[code]class[/code]æˆ–å…¶çˆ¶çº§æ˜¯å¦æœ‰ä¸€ä¸ªç§°ä¸º[code]name[/code]的信å·ã€‚"
#: doc/classes/ClassDB.xml:130
msgid ""
@@ -15689,8 +15949,8 @@ msgid ""
"Returns whether [code]class[/code] (or its ancestry if [code]no_inheritance[/"
"code] is [code]false[/code]) has a method called [code]method[/code] or not."
msgstr ""
-"返回[code] class [/code](如果[code] no_inheritance [/code]为[code] false [/"
-"code],则返回其父级)是å¦å…·æœ‰ç§°ä¸º[code]method[/code]的方法。"
+"返回 [code]class[/code] æ˜¯å¦æœ‰å为 [code]method[/code] 的方法。(如果[code] "
+"no_inheritance [/code]为[code] false [/code],则返回其父级)。"
#: doc/classes/ClassDB.xml:147
msgid ""
@@ -15734,18 +15994,16 @@ msgid ""
msgstr "返回[code]inherits[/code]æ˜¯å¦æ˜¯[code] class [/code]的祖先。"
#: doc/classes/ClippedCamera.xml:4
-#, fuzzy
msgid "A [Camera] that includes collision."
-msgstr "包å«ç¢°æ’žçš„[Camera3D]。"
+msgstr "包å«ç¢°æ’žçš„相机 [Camera]。"
#: doc/classes/ClippedCamera.xml:7
-#, fuzzy
msgid ""
"This node extends [Camera] to add collisions with [Area] and/or "
"[PhysicsBody] nodes. The camera cannot move through colliding objects."
msgstr ""
-"该节点扩展了[Camera3D]以添加与[Area3D]和/或[PhysicsBody3D]节点的碰撞。相机无"
-"法在碰撞的物体之间移动。"
+"此节点扩展 [Camera] 以添加与 [Area] å’Œ/或 [PhysicsBody] èŠ‚ç‚¹çš„ç¢°æ’žã€‚æ‘„åƒæœºæ— "
+"法穿过碰撞物体。"
#: doc/classes/ClippedCamera.xml:16
msgid ""
@@ -15781,7 +16039,7 @@ msgstr "删除与指定节点的冲çªå¼‚常。"
#: doc/classes/ClippedCamera.xml:57
msgid "Removes a collision exception with the specified [RID]."
-msgstr "删除具有指定[RID]的碰撞异常。"
+msgstr "删除指定[RID]的碰撞异常。"
#: doc/classes/ClippedCamera.xml:65
msgid ""
@@ -15792,14 +16050,12 @@ msgstr ""
"[b]注æ„:[/b]ä½ç´¢å¼•的范围是0-19。"
#: doc/classes/ClippedCamera.xml:72
-#, fuzzy
msgid "If [code]true[/code], the camera stops on contact with [Area]s."
-msgstr "如果[code]true[/code],相机与[Area3D]sæŽ¥è§¦æ—¶åœæ­¢ã€‚"
+msgstr "如果[code]true[/code],相机与[Area]sæŽ¥è§¦æ—¶åœæ­¢ã€‚"
#: doc/classes/ClippedCamera.xml:75
-#, fuzzy
msgid "If [code]true[/code], the camera stops on contact with [PhysicsBody]s."
-msgstr "如果[code]true[/code],相机在接触[PhysicsBody3D]æ—¶åœæ­¢ã€‚"
+msgstr "如果[code]true[/code],相机在接触[PhysicsBody]æ—¶åœæ­¢ã€‚"
#: doc/classes/ClippedCamera.xml:78
msgid ""
@@ -15809,6 +16065,10 @@ msgid ""
"masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
+"相机的碰撞é®ç½©ã€‚åªæœ‰åœ¨å¯¹è±¡æœ‰è‡³å°‘一个碰撞层和碰撞这招匹对时æ‰èƒ½è¢«æ£€æµ‹åˆ°ã€‚详细"
+"ä¿¡æ¯è¯·å‚阅文档[url=https://docs.godotengine.org/zh_CN/stable/tutorials/"
+"physics/physics_introduction.html#collision-layers-and-masks]Collision "
+"layers and masks[/url]。"
#: doc/classes/ClippedCamera.xml:81
msgid ""
@@ -15825,7 +16085,6 @@ msgid "Base node for collision objects."
msgstr "碰撞对象的基础节点。"
#: doc/classes/CollisionObject.xml:7
-#, fuzzy
msgid ""
"CollisionObject is the base class for physics objects. It can hold any "
"number of collision [Shape]s. Each shape must be assigned to a [i]shape "
@@ -15833,13 +16092,12 @@ msgid ""
"owners are not nodes and do not appear in the editor, but are accessible "
"through code using the [code]shape_owner_*[/code] methods."
msgstr ""
-"CollisionObject3D是物ç†å¯¹è±¡çš„基类。它å¯ä»¥å®¹çº³ä»»æ„æ•°é‡çš„碰撞[Shape3D]。æ¯ä¸ªå½¢"
-"状必须分é…ç»™[i]shape owner[/i]。 CollisionObject3Då¯ä»¥å…·æœ‰ä»»æ„æ•°é‡çš„形状所有"
-"è€…ã€‚å½¢çŠ¶æ‰€æœ‰è€…ä¸æ˜¯èŠ‚ç‚¹ï¼Œä¹Ÿä¸æ˜¾ç¤ºåœ¨ç¼–辑器中,但是å¯ä»¥ä½¿ç”¨[code] shape_owner _ "
-"* [/code]方法通过代ç è¿›è¡Œè®¿é—®ã€‚"
+"CollisionObject是物ç†å¯¹è±¡çš„基类。它å¯ä»¥å®¹çº³ä»»ä½•æ•°é‡çš„碰撞形状 [Shape]s。æ¯ä¸ª"
+"形状必须分é…给一个形状所有者 [i]shape owner[/i]。CollisionObjectå¯ä»¥æœ‰ä»»æ„æ•°"
+"é‡çš„å½¢çŠ¶æ‰€æœ‰è€…ã€‚å½¢çŠ¶æ‰€æœ‰è€…ä¸æ˜¯èŠ‚ç‚¹ï¼Œä¹Ÿä¸ä¼šå‡ºçŽ°åœ¨ç¼–è¾‘å™¨ä¸­ï¼Œä½†æ˜¯å¯ä»¥é€šè¿‡ä»£ç ä½¿"
+"用[code] shape_owner_* [/code]方法进行访问。"
#: doc/classes/CollisionObject.xml:20
-#, fuzzy
msgid ""
"Receives unhandled [InputEvent]s. [code]position[/code] is the location in "
"world space of the mouse pointer on the surface of the shape with index "
@@ -15847,10 +16105,9 @@ msgid ""
"surface at that point. Connect to the [signal input_event] signal to easily "
"pick up these events."
msgstr ""
-"æŽ¥å—æœªå¤„ç†çš„[InputEvent]。 [code] click_position [/code]是世界空间中的被å•击"
-"ä½ç½®ï¼Œ[code] click_normal [/code]是从[Shape3D]的被å•击表é¢å¼€å§‹çš„æ³•线å‘é‡ï¼Œä½"
-"于[code] shape_idx [/code]。连接到[code] input_event [/code]ä¿¡å·å³å¯è½»æ¾æŽ¥æ”¶"
-"这些事件。"
+"接收未处ç†çš„事件 [InputEvent]。 [code]position[/code] 是鼠标指针在具有索引 "
+"[code]shape_idx[/code] 的形状表é¢åœ¨ä¸–界空间中的ä½ç½®ï¼Œ[code]normal[/code] 是该"
+"点表é¢çš„æ³•å‘é‡ã€‚连接到 [signal input_event] ä¿¡å·ä»¥è½»æ¾èŽ·å–这些事件。"
#: doc/classes/CollisionObject.xml:27 doc/classes/CollisionObject2D.xml:25
msgid ""
@@ -15861,18 +16118,18 @@ msgstr ""
"引用。"
#: doc/classes/CollisionObject.xml:34 doc/classes/CollisionObject2D.xml:32
-#, fuzzy
msgid ""
"Returns whether or not the specified [code]bit[/code] of the [member "
"collision_layer] is set."
-msgstr "返回指定的[code] class [/code]是å¦å¯ç”¨ã€‚"
+msgstr ""
+"返回是å¦è®¾ç½®äº†ç¢°æ’žå±‚ [member collision_layer] 的指定ä½[code] bit[/code]。"
#: doc/classes/CollisionObject.xml:41 doc/classes/CollisionObject2D.xml:39
-#, fuzzy
msgid ""
"Returns whether or not the specified [code]bit[/code] of the [member "
"collision_mask] is set."
-msgstr "如果指定碰撞é®ç½©bitä½è¢«è®¾ç½®ï¼Œè¿”回[code]true[/code]。"
+msgstr ""
+"返回是å¦è®¾ç½®äº†ç¢°æ’žæŽ©ç  [member collision_mask] 的指定ä½[code] bit[/code]。"
#: doc/classes/CollisionObject.xml:47 doc/classes/CollisionObject2D.xml:45
msgid "Returns the object's [RID]."
@@ -15901,6 +16158,10 @@ msgid ""
"If [code]value[/code] is [code]false[/code], clears the specified [code]bit[/"
"code] in the the [member collision_layer]."
msgstr ""
+"如果[code]value[/code]为[code]true[/code],则设置[member collision_layer]中指"
+"定的[code]bit[/code]ä½ã€‚\n"
+"如果[code]value[/code]为[code]false[/code],清除[member collision_layer]中指"
+"定的 [code]bit[/code]ä½ã€‚"
#: doc/classes/CollisionObject.xml:84 doc/classes/CollisionObject2D.xml:96
msgid ""
@@ -15909,15 +16170,18 @@ msgid ""
"If [code]value[/code] is [code]false[/code], clears the specified [code]bit[/"
"code] in the the [member collision_mask]."
msgstr ""
+"如果[code]value[/code]为[code]true[/code],则设置[member collision_mask]中指"
+"定的[code]bit[/code]ä½ã€‚\n"
+"如果[code]value[/code]为[code]false[/code],清除[member collision_mask]中指定"
+"çš„ [code]bit[/code]ä½ã€‚"
#: doc/classes/CollisionObject.xml:92 doc/classes/CollisionObject2D.xml:104
msgid "Returns the [code]owner_id[/code] of the given shape."
msgstr "返回指定形状的[code]owner_id[/code]。"
#: doc/classes/CollisionObject.xml:100
-#, fuzzy
msgid "Adds a [Shape] to the shape owner."
-msgstr "给形状所有者添加一个[Shape2D]。"
+msgstr "å‘形状所有者添加形状 [Shape]。"
#: doc/classes/CollisionObject.xml:107 doc/classes/CollisionObject2D.xml:119
msgid "Removes all shapes from the shape owner."
@@ -15928,20 +16192,18 @@ msgid "Returns the parent object of the given shape owner."
msgstr "返回给定形状所有者的父对象。"
#: doc/classes/CollisionObject.xml:122
-#, fuzzy
msgid "Returns the [Shape] with the given id from the given shape owner."
-msgstr "从给定的形状所有者那里返回给定id的[Shape2D]。"
+msgstr "从给定的形状所有者返回具有给定 id 的形状 [Shape]。"
#: doc/classes/CollisionObject.xml:129 doc/classes/CollisionObject2D.xml:141
msgid "Returns the number of shapes the given shape owner contains."
msgstr "返回给定形状所有者包å«çš„形状数é‡ã€‚"
#: doc/classes/CollisionObject.xml:137
-#, fuzzy
msgid ""
"Returns the child index of the [Shape] with the given id from the given "
"shape owner."
-msgstr "从给定的形状所有者那里返回给定idçš„[Shape2D]çš„å­ç´¢å¼•。"
+msgstr "返回具有给定形状所有者的给定 id 的形状 [Shape] çš„å­ç´¢å¼•。"
#: doc/classes/CollisionObject.xml:144
msgid "Returns the shape owner's [Transform]."
@@ -15960,7 +16222,6 @@ msgid "Sets the [Transform] of the given shape owner."
msgstr "设置给定形状所有者的[Transform]。"
#: doc/classes/CollisionObject.xml:174
-#, fuzzy
msgid ""
"The physics layers this CollisionObject3D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
@@ -15970,12 +16231,14 @@ msgid ""
"physics_introduction.html#collision-layers-and-masks]Collision layers and "
"masks[/url] in the documentation for more information."
msgstr ""
-"区域的物ç†å±‚。å¯ç¢°æ’žçš„物体å¯ä»¥å­˜åœ¨äºŽ32个ä¸åŒå±‚中的任何一层。如果物体A在物体B"
-"扫æçš„任何一层中,或者物体B在物体A扫æçš„任何一层中,则检测到接触。也请å‚阅"
-"[member collision_mask]。"
+"CollisionObject3D 所在的物ç†å±‚。碰撞对象å¯ä»¥å­˜åœ¨äºŽ 32 个ä¸åŒå±‚中的一个或多"
+"个。å¦è§ [member collision_mask]。\n"
+"[b]注æ„:[/b]如果对象A在对象B扫æçš„任何层中,或者对象B在对象A扫æçš„任何层中,"
+"则检测到接触。有关更多信æ¯ï¼Œè¯·å‚阅文档中的 [url=https://docs.godotengine.org/"
+"zh_CN/latest/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks] 碰撞层和掩ç [/url]。"
#: doc/classes/CollisionObject.xml:178
-#, fuzzy
msgid ""
"The physics layers this CollisionObject3D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
@@ -15985,38 +16248,38 @@ msgid ""
"physics_introduction.html#collision-layers-and-masks]Collision layers and "
"masks[/url] in the documentation for more information."
msgstr ""
-"区域的物ç†å±‚。å¯ç¢°æ’žçš„物体å¯ä»¥å­˜åœ¨äºŽ32个ä¸åŒå±‚中的任何一层。如果物体A在物体B"
-"扫æçš„任何一层中,或者物体B在物体A扫æçš„任何一层中,则检测到接触。也请å‚阅"
-"[member collision_mask]。"
+"CollisionObject3D 扫æçš„物ç†å±‚。碰撞对象å¯ä»¥æ‰«æ 32 个ä¸åŒå±‚中的一个或多个。"
+"å¦è§ [member collision_layer]]。\n"
+"[b]注æ„:[/b]如果对象A在对象B扫æçš„任何层中,或者对象B在对象A扫æçš„任何层中,"
+"则检测到接触。有关更多信æ¯ï¼Œè¯·å‚阅文档中的 [url=https://docs.godotengine.org/"
+"zh_CN/latest/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks] 碰撞层和掩ç [/url]。"
#: doc/classes/CollisionObject.xml:182
-#, fuzzy
msgid ""
"If [code]true[/code], the [CollisionObject] will continue to receive input "
"events as the mouse is dragged across its shapes."
msgstr ""
-"如果[code] true [/code],则当鼠标在其形状上拖动时,[CollisionObject3D]将继续"
-"接收输入事件。"
+"如果[code] true[/code],[CollisionObject] 将在鼠标拖过其形状时继续接收输入事"
+"件。"
#: doc/classes/CollisionObject.xml:185
-#, fuzzy
msgid ""
"If [code]true[/code], the [CollisionObject]'s shapes will respond to "
"[RayCast]s."
-msgstr "如果[code]true[/code],[CollisionObject3D]的形状将å“应于[RayCast3D]。"
+msgstr ""
+"如果[code] true[/code],[CollisionObject] 的形状将对 [RayCast] åšå‡ºå应。"
#: doc/classes/CollisionObject.xml:196
-#, fuzzy
msgid ""
"Emitted when the object receives an unhandled [InputEvent]. [code]position[/"
"code] is the location in world space of the mouse pointer on the surface of "
"the shape with index [code]shape_idx[/code] and [code]normal[/code] is the "
"normal vector of the surface at that point."
msgstr ""
-"æŽ¥å—æœªå¤„ç†çš„[InputEvent]。 [code] click_position [/code]是世界空间中的被å•击"
-"ä½ç½®ï¼Œ[code] click_normal [/code]是从[Shape3D]的被å•击表é¢å¼€å§‹çš„æ³•线å‘é‡ï¼Œä½"
-"于[code] shape_idx [/code]。连接到[code] input_event [/code]ä¿¡å·å³å¯è½»æ¾æŽ¥æ”¶"
-"这些事件。"
+"当对象收到未处ç†çš„ [InputEvent] æ—¶å‘出。 [code]position[/code] 是鼠标指针在具"
+"有索引 [code]shape_idx[/code] 的形状表é¢åœ¨ä¸–界空间中的ä½ç½®ï¼Œ[code]normal[/"
+"code] 是该点表é¢çš„æ³•å‘é‡."
#: doc/classes/CollisionObject.xml:201
msgid "Emitted when the mouse pointer enters any of this object's shapes."
@@ -16111,7 +16374,6 @@ msgid "Sets the [Transform2D] of the given shape owner."
msgstr "设置给定形状所有者的[Transform2D]。"
#: doc/classes/CollisionObject2D.xml:202
-#, fuzzy
msgid ""
"The physics layers this CollisionObject2D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
@@ -16121,12 +16383,14 @@ msgid ""
"physics_introduction.html#collision-layers-and-masks]Collision layers and "
"masks[/url] in the documentation for more information."
msgstr ""
-"区域的物ç†å±‚。å¯ç¢°æ’žçš„物体å¯ä»¥å­˜åœ¨äºŽ32个ä¸åŒå±‚中的任何一层。如果物体A在物体B"
-"扫æçš„任何一层中,或者物体B在物体A扫æçš„任何一层中,则检测到接触。也请å‚阅"
-"[member collision_mask]。"
+"这个CollisionObject2D所在的物ç†å±‚。碰撞对象å¯ä»¥å­˜åœ¨äºŽ32个ä¸åŒå±‚中的一个或多"
+"个。也è§[member collision_mask]。\n"
+"[b]注æ„:[/b]如果对象A在对象B扫æçš„任何层中,或者对象B在对象A扫æçš„任何层中,"
+"则检测到接触。更多信æ¯è§æ–‡æ¡£[url=https://docs.godotengine.org/zh_CN/latest/"
+"tutorials/physics/physics_introduction.html#collision-layers-and-masks] 碰撞"
+"层和掩ç [/url]。"
#: doc/classes/CollisionObject2D.xml:206
-#, fuzzy
msgid ""
"The physics layers this CollisionObject2D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
@@ -16136,9 +16400,12 @@ msgid ""
"physics_introduction.html#collision-layers-and-masks]Collision layers and "
"masks[/url] in the documentation for more information."
msgstr ""
-"区域的物ç†å±‚。å¯ç¢°æ’žçš„物体å¯ä»¥å­˜åœ¨äºŽ32个ä¸åŒå±‚中的任何一层。如果物体A在物体B"
-"扫æçš„任何一层中,或者物体B在物体A扫æçš„任何一层中,则检测到接触。也请å‚阅"
-"[member collision_mask]。"
+"这个CollisionObject2D所扫æçš„物ç†å±‚。碰撞对象å¯ä»¥æ‰«æ32个ä¸åŒå±‚中的一个或多"
+"个。也è§[member collision_layer]。\n"
+"[b]注æ„:[/b] 如果对象A在对象B扫æçš„任何层中,或者对象B在对象A扫æçš„任何层"
+"中,就会检测到接触。更多信æ¯è§æ–‡æ¡£[url=https://docs.godotengine.org/zh_CN/"
+"latest/tutorials/physics/physics_introduction.html#collision-layers-and-"
+"masks] 碰撞层和掩ç [/url]。"
#: doc/classes/CollisionObject2D.xml:210
msgid ""
@@ -16157,9 +16424,9 @@ msgid ""
"[code]true[/code] and at least one [code]collision_layer[/code] bit to be "
"set. See [method _input_event] for details."
msgstr ""
-"在å‘生输入事件时å‘å‡ºã€‚è¦æ±‚[member input_pickable]为[code] true [/code],并且"
-"至少è¦è®¾ç½®ä¸€ä¸ª[code] collision_layer [/code]ä½ã€‚有关详细信æ¯ï¼Œè¯·å‚阅"
-"[method_input_event]。"
+"当输入事件å‘生时å‘å‡ºã€‚è¦æ±‚ [member input_pickable]为[code] true[/code],并至"
+"å°‘è¦è®¾ç½®ä¸€ä¸ª[code] collision_layer [/code]ä½ã€‚有关详细信æ¯ï¼Œè¯·å‚阅[method "
+"_input_event]。"
#: doc/classes/CollisionObject2D.xml:224
msgid ""
@@ -16184,7 +16451,6 @@ msgid "Editor-only class for defining a collision polygon in 3D space."
msgstr "ä»…é™ç¼–辑器的类,用于在3D空间中定义碰撞多边形。"
#: doc/classes/CollisionPolygon.xml:7
-#, fuzzy
msgid ""
"Allows editing a collision polygon's vertices on a selected plane. Can also "
"set a depth perpendicular to that plane. This class is only available in the "
@@ -16192,8 +16458,8 @@ msgid ""
"for gameplay. Properties modified during gameplay will have no effect."
msgstr ""
"å…许在选定平é¢ä¸Šç¼–辑碰撞多边形的顶点。也å¯ä»¥è®¾ç½®åž‚直于该平é¢çš„æ·±åº¦ã€‚此类仅在"
-"编辑器中å¯ç”¨ã€‚è¿è¡Œæ—¶å®ƒä¸ä¼šå‡ºçŽ°åœ¨åœºæ™¯æ ‘ä¸­ã€‚ä¸ºæ¸¸æˆåˆ›å»ºä¸€ä¸ª[Shape3D]。在游æˆè¿‡ç¨‹"
-"中修改的属性将无效。"
+"编辑器中å¯ç”¨ã€‚它ä¸ä¼šåœ¨è¿è¡Œæ—¶å‡ºçŽ°åœ¨åœºæ™¯æ ‘ä¸­ã€‚ä¸ºæ¸¸æˆåˆ›å»ºä¸€ä¸ªå½¢çж [Shape]。在游"
+"æˆè¿‡ç¨‹ä¸­ä¿®æ”¹çš„属性将ä¸èµ·ä½œç”¨ã€‚"
#: doc/classes/CollisionPolygon.xml:15
msgid ""
@@ -16209,7 +16475,7 @@ msgstr "如果[code]true[/code],将ä¸ä¼šäº§ç”Ÿç¢°æ’žã€‚"
msgid ""
"The collision margin for the generated [Shape]. See [member Shape.margin] "
"for more details."
-msgstr ""
+msgstr "生æˆçš„[Shape]的碰撞边。å‚阅[member Shape.margin]èŽ·å–æ›´å¤šç»†èŠ‚ã€‚"
#: doc/classes/CollisionPolygon.xml:24
msgid ""
@@ -16263,14 +16529,13 @@ msgstr ""
"多边形的对撞机æ¥è¯´æ•ˆæžœæ›´å¥½ã€‚"
#: doc/classes/CollisionPolygon2D.xml:27
-#, fuzzy
msgid ""
"The polygon's list of vertices. The final point will be connected to the "
"first. The returned value is a clone of the [PoolVector2Array], not a "
"reference."
msgstr ""
-"多边形的顶点列表。最终点将连接到第一个点。返回的值是[PackedVector2Array]的克"
-"éš†ï¼Œè€Œä¸æ˜¯å¼•用。"
+"多边形的顶点列表。最åŽä¸€ä¸ªç‚¹å°†ä¸Žç¬¬ä¸€ä¸ªç‚¹ç›¸è¿žã€‚返回值是 [PoolVector2Array] çš„"
+"å…‹éš†ï¼Œä¸æ˜¯å¼•用。"
#: doc/classes/CollisionPolygon2D.xml:32
msgid "Collisions will include the polygon and its contained area."
@@ -16285,7 +16550,6 @@ msgid "Node that represents collision shape data in 3D space."
msgstr "表示3D空间中的碰撞形状数æ®çš„节点。"
#: doc/classes/CollisionShape.xml:7
-#, fuzzy
msgid ""
"Editor facility for creating and editing collision shapes in 3D space. You "
"can use this node to represent all sorts of collision shapes, for example, "
@@ -16294,10 +16558,10 @@ msgid ""
"only helper to create shapes, use [method CollisionObject."
"shape_owner_get_shape] to get the actual shape."
msgstr ""
-"编辑器功能,用于在3D空间中创建和编辑碰撞形状。您å¯ä»¥ä½¿ç”¨æ­¤èŠ‚ç‚¹è¡¨ç¤ºå„ç§ç¢°æ’žå½¢"
-"状,例如,将其添加到[Area3D]中以æä¾›æ£€æµ‹å½¢çŠ¶ï¼Œæˆ–å°†å…¶æ·»åŠ åˆ°[PhysicsBody3D]中以"
-"创建实体。 [b]è¦ç‚¹[/b]:这是一个仅用于编辑器的创建形状的助手,请使用[method "
-"CollisionObject3D.shape_owner_get_shape]获å–实际形状。"
+"用于在 3D 空间中创建和编辑碰撞形状的编辑工具。您å¯ä»¥ä½¿ç”¨æ­¤èŠ‚ç‚¹è¡¨ç¤ºå„ç§ç¢°æ’žå½¢"
+"状,例如,将其添加到 [Area] 以使其具有检测形状,或将其添加到物ç†ä½“ "
+"[PhysicsBody] 以创建实体对象。[b]é‡è¦ [/b]:这是一个编辑器专用的创建形状的助"
+"手,使用 [method CollisionObject.shape_owner_get_shape] 获å–实际形状。"
#: doc/classes/CollisionShape.xml:10 doc/classes/CollisionShape2D.xml:10
#: doc/classes/Physics2DDirectBodyState.xml:10
@@ -16309,15 +16573,14 @@ msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/physics/physics_introduction."
"html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/physics/physics_introduction."
-"html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/physics/"
+"physics_introduction.html"
#: doc/classes/CollisionShape.xml:19
-#, fuzzy
msgid ""
"Sets the collision shape's shape to the addition of all its convexed "
"[MeshInstance] siblings geometry."
-msgstr "设置碰撞形状的形状为其所有凸出的[MeshInstance3D]兄弟å§å¦¹å‡ ä½•形状的和。"
+msgstr "将碰撞形状的形状设置为其所有凸出的 [MeshInstance] 兄弟几何体的相加。"
#: doc/classes/CollisionShape.xml:26
msgid ""
@@ -16358,11 +16621,12 @@ msgid "https://godotengine.org/asset-library/asset/113"
msgstr "https://godotengine.org/asset-library/asset/113"
#: doc/classes/CollisionShape2D.xml:19
-#, fuzzy
msgid ""
"A disabled collision shape has no effect in the world. This property should "
"be changed with [method Object.set_deferred]."
-msgstr "ç¦ç”¨çš„碰撞形状对世界没有任何影å“。"
+msgstr ""
+"ç¦ç”¨çš„碰撞形状在世界中没有影å“。这个属性应该用 [method Object.set_deferred] "
+"改å˜ã€‚"
#: doc/classes/CollisionShape2D.xml:22
msgid ""
@@ -16448,7 +16712,6 @@ msgstr ""
"[/codeblock]"
#: doc/classes/Color.xml:37
-#, fuzzy
msgid ""
"Constructs a color from a 32-bit integer in RGBA format (each byte "
"represents a color channel).\n"
@@ -16456,13 +16719,12 @@ msgid ""
"var c = Color(274) # Similar to Color(0.0, 0.0, 0.004, 0.07)\n"
"[/codeblock]"
msgstr ""
-"从一个32使•´æ•°ä¸­æž„造一个颜色(æ¯ä¸ªå­—节代表RGBAé…置文件的一个组æˆéƒ¨åˆ†ï¼‰ã€‚\n"
+"从 RGBA æ ¼å¼çš„ 32 使•´æ•°æž„造颜色,æ¯ä¸ªå­—节代表一个颜色通é“。\n"
"[codeblock]\n"
-"var c = Color(274) # Equivalent to RGBA(0, 0, 1, 18)\n"
+"var c = Color(274) # Similar to Color(0.0, 0.0, 0.004, 0.07)\n"
"[/codeblock]"
#: doc/classes/Color.xml:49
-#, fuzzy
msgid ""
"Constructs a color from RGB values, typically between 0 and 1. Alpha will be "
"1.\n"
@@ -16470,13 +16732,12 @@ msgid ""
"var color = Color(0.2, 1.0, 0.7) # Similar to Color8(51, 255, 178, 255)\n"
"[/codeblock]"
msgstr ""
-"使用0å’Œ1之间的值从RGBé…置文件中构建颜色。 阿尔法将始终为1。\n"
+"æ ¹æ® RGB 值构造颜色,通常介于 0 å’Œ 1 之间。Alpha 将为 1。\n"
"[codeblock]\n"
-"var c = Color(0.2, 1.0, 0.7) # Equivalent to RGBA(51, 255, 178, 255)\n"
+"var color = Color(0.2, 1.0, 0.7) # Similar to Color8(51, 255, 178, 255)\n"
"[/codeblock]"
#: doc/classes/Color.xml:62
-#, fuzzy
msgid ""
"Constructs a color from RGBA values, typically between 0 and 1.\n"
"[codeblock]\n"
@@ -16484,9 +16745,10 @@ msgid ""
"204)\n"
"[/codeblock]"
msgstr ""
-"使用0å’Œ1之间的值从RGBAé…置文件中构建颜色。\n"
+"æ ¹æ® RGBA 值构造颜色,通常介于 0 å’Œ 1 之间。\n"
"[codeblock]\n"
-"var c = Color(0.2, 1.0, 0.7, 0.8) # Equivalent to RGBA(51, 255, 178, 204)\n"
+"var color = Color(0.2, 1.0, 0.7, 0.8) # Similar to Color8(51, 255, 178, "
+"204)\n"
"[/codeblock]"
#: doc/classes/Color.xml:72
@@ -16556,7 +16818,6 @@ msgstr ""
"[/codeblock]"
#: doc/classes/Color.xml:117
-#, fuzzy
msgid ""
"Returns the color's grayscale representation.\n"
"The gray value is calculated as [code](r + g + b) / 3[/code].\n"
@@ -16565,14 +16826,14 @@ msgid ""
"var gray = c.gray() # A value of 0.466667\n"
"[/codeblock]"
msgstr ""
-"返回å色[code](1-r,1-g,1-b,a)[/code]。\n"
+"返回颜色的ç°åº¦è¡¨ç¤ºã€‚\n"
+"ç°åº¦å€¼è®¡ç®—为 [code](r + g + b) / 3[/code]。\n"
"[codeblock]\n"
-"var c = Color(0.3, 0.4, 0.9)\n"
-"var inverted_color = c.inverted() # A color of an RGBA(178, 153, 26, 255)\n"
+"var c = Color(0.2, 0.45, 0.82)\n"
+"var gray = c.gray() # A value of 0.466667\n"
"[/codeblock]"
#: doc/classes/Color.xml:128
-#, fuzzy
msgid ""
"Returns the inverted color [code](1 - r, 1 - g, 1 - b, a)[/code].\n"
"[codeblock]\n"
@@ -16582,8 +16843,8 @@ msgid ""
msgstr ""
"返回å色[code](1-r,1-g,1-b,a)[/code]。\n"
"[codeblock]\n"
-"var c = Color(0.3, 0.4, 0.9)\n"
-"var inverted_color = c.inverted() # A color of an RGBA(178, 153, 26, 255)\n"
+"var color = Color(0.3, 0.4, 0.9)\n"
+"var inverted_color = color.inverted() # Equivalent to Color(0.7, 0.6, 0.1)\n"
"[/codeblock]"
#: doc/classes/Color.xml:139
@@ -16592,7 +16853,7 @@ msgid ""
"approximately equal, by running [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-"通过在æ¯ä¸ªç»„件上è¿è¡Œ[方法@GDScript.is_equal_approx],如果这个颜色和"
+"通过在æ¯ä¸ªç»„件上è¿è¡Œ[method @GDScript.is_equal_approx],如果这个颜色和"
"[code]color[/code]近似相等,返回[code]true[/code]。"
#: doc/classes/Color.xml:146
@@ -16611,7 +16872,6 @@ msgstr ""
"[/codeblock]"
#: doc/classes/Color.xml:158
-#, fuzzy
msgid ""
"Returns the linear interpolation with another color. The interpolation "
"factor [code]weight[/code] is between 0 and 1.\n"
@@ -16622,15 +16882,15 @@ msgid ""
"0.0)\n"
"[/codeblock]"
msgstr ""
-"返回å¦ä¸€ç§é¢œè‰²çš„线性æ’值。æ’值因å­[code]t[/code]在0å’Œ1之间。\n"
+"返回å¦ä¸€ç§é¢œè‰²çš„线性æ’值。æ’值系数 [code]weight[/code] 介于 0 å’Œ 1 之间。\n"
"[codeblock]\n"
"var c1 = Color(1.0, 0.0, 0.0)\n"
"var c2 = Color(0.0, 1.0, 0.0)\n"
-"var li_c = c1.lerp(c2, 0.5) # A color of an RGBA(128, 128, 0, 255)\n"
+"var li_c = c1.linear_interpolate(c2, 0.5) # Equivalent to Color(0.5, 0.5, "
+"0.0)\n"
"[/codeblock]"
#: doc/classes/Color.xml:169
-#, fuzzy
msgid ""
"Returns the color converted to a 32-bit integer in ABGR format (each byte "
"represents a color channel). ABGR is the reversed version of the default "
@@ -16640,15 +16900,14 @@ msgid ""
"print(color.to_abgr32()) # Prints 4281565439\n"
"[/codeblock]"
msgstr ""
-"以 ABGR æ ¼å¼è¿”回颜色的 32 使•´æ•°ï¼ˆæ¯ä¸ªå­—节代表 ABGR é…置文件的一个组æˆéƒ¨"
-"分)。ABGR是默认格å¼çš„å转版本。\n"
+"返回转æ¢ä¸º ABGR æ ¼å¼çš„ 32 使•´æ•°çš„颜色,æ¯ä¸ªå­—节代表一个颜色通é“。 ABGR 是默"
+"认格å¼çš„转置版本。\n"
"[codeblock]\n"
-"var c = Color(1, 0.5, 0.2)\n"
-"print(c.to_abgr32()) # Prints 4281565439\n"
+"var color = Color(1, 0.5, 0.2)\n"
+"print(color.to_abgr32()) # Prints 4281565439\n"
"[/codeblock]"
#: doc/classes/Color.xml:179
-#, fuzzy
msgid ""
"Returns the color converted to a 64-bit integer in ABGR format (each word "
"represents a color channel). ABGR is the reversed version of the default "
@@ -16658,15 +16917,14 @@ msgid ""
"print(color.to_abgr64()) # Prints -225178692812801\n"
"[/codeblock]"
msgstr ""
-"以 ABGR æ ¼å¼è¿”回颜色的 64 使•´æ•°ï¼ˆæ¯ä¸ªå­—代表 ABGR é…置文件的一个组件)。ABGR"
-"是默认格å¼çš„å转版本。\n"
+"返回转æ¢ä¸º ABGR æ ¼å¼çš„ 64 使•´æ•°çš„颜色,æ¯ä¸ªå­—代表一个颜色通é“。 ABGR 是默认"
+"æ ¼å¼çš„转置版本。\n"
"[codeblock]\n"
-"var c = Color(1, 0.5, 0.2)\n"
-"print(c.to_abgr64()) # Prints -225178692812801\n"
+"var color = Color(1, 0.5, 0.2)\n"
+"print(color.to_abgr64()) # Prints -225178692812801\n"
"[/codeblock]"
#: doc/classes/Color.xml:189
-#, fuzzy
msgid ""
"Returns the color converted to a 32-bit integer in ARGB format (each byte "
"represents a color channel). ARGB is more compatible with DirectX.\n"
@@ -16675,15 +16933,14 @@ msgid ""
"print(color.to_argb32()) # Prints 4294934323\n"
"[/codeblock]"
msgstr ""
-"以ARGBæ ¼å¼è¿”回颜色的32使•´æ•°ï¼ˆæ¯ä¸ªå­—节代表ARGBé…置文件的一个组æˆéƒ¨åˆ†ï¼‰ã€‚ARGB"
-"与DirectX更兼容。\n"
+"返回转æ¢ä¸º ARGB æ ¼å¼çš„ 32 使•´æ•°çš„颜色,æ¯ä¸ªå­—节代表一个颜色通é“。 ARGB 与 "
+"DirectX 更加兼容。\n"
"[codeblock]\n"
-"var c = Color(1, 0.5, 0.2)\n"
-"print(c.to_argb32()) # Prints 4294934323\n"
+"var color = Color(1, 0.5, 0.2)\n"
+"print(color.to_argb32()) # Prints 4294934323\n"
"[/codeblock]"
#: doc/classes/Color.xml:199
-#, fuzzy
msgid ""
"Returns the color converted to a 64-bit integer in ARGB format (each word "
"represents a color channel). ARGB is more compatible with DirectX.\n"
@@ -16692,11 +16949,11 @@ msgid ""
"print(color.to_argb64()) # Prints -2147470541\n"
"[/codeblock]"
msgstr ""
-"以ARGBæ ¼å¼è¿”回颜色的64使•´æ•°ï¼ˆæ¯ä¸ªå­—代表ARGBé…置文件的一个组æˆéƒ¨åˆ†ï¼‰ã€‚ARGB与"
-"DirectX更兼容。\n"
+"返回转æ¢ä¸º ARGB æ ¼å¼çš„ 64 使•´æ•°çš„颜色,æ¯ä¸ªå­—代表一个颜色通é“。 ARGB 与 "
+"DirectX 更加兼容。\n"
"[codeblock]\n"
-"var c = Color(1, 0.5, 0.2)\n"
-"print(c.to_argb64()) # Prints -2147470541\n"
+"var color = Color(1, 0.5, 0.2)\n"
+"print(color.to_argb64()) # Prints -2147470541\n"
"[/codeblock]"
#: doc/classes/Color.xml:210
@@ -16721,7 +16978,6 @@ msgstr ""
"[/codeblock]"
#: doc/classes/Color.xml:222
-#, fuzzy
msgid ""
"Returns the color converted to a 32-bit integer in RGBA format (each byte "
"represents a color channel). RGBA is Godot's default format.\n"
@@ -16730,15 +16986,14 @@ msgid ""
"print(color.to_rgba32()) # Prints 4286526463\n"
"[/codeblock]"
msgstr ""
-"以RGBAæ ¼å¼è¿”回颜色的32使•´æ•°ï¼ˆæ¯ä¸ªå­—节代表RGBAé…置文件的一个组æˆéƒ¨åˆ†ï¼‰ã€‚RGBA"
-"是Godot的默认格å¼ã€‚\n"
+"返回转æ¢ä¸º RGBA æ ¼å¼çš„ 32 使•´æ•°çš„颜色,æ¯ä¸ªå­—节代表一个颜色通é“。 RGBA 是 "
+"Godot 的默认格å¼ã€‚\n"
"[codeblock]\n"
-"var c = Color(1, 0.5, 0.2)\n"
-"print(c.to_rgba32()) # Prints 4286526463\n"
+"var color = Color(1, 0.5, 0.2)\n"
+"print(color.to_rgba32()) # Prints 4286526463\n"
"[/codeblock]"
#: doc/classes/Color.xml:232
-#, fuzzy
msgid ""
"Returns the color converted to a 64-bit integer in RGBA format (each word "
"represents a color channel). RGBA is Godot's default format.\n"
@@ -16747,11 +17002,11 @@ msgid ""
"print(color.to_rgba64()) # Prints -140736629309441\n"
"[/codeblock]"
msgstr ""
-"以RGBAæ ¼å¼è¿”回颜色的64使•´æ•°ï¼ˆæ¯ä¸ªå­—代表RGBAé…置文件的一个组æˆéƒ¨åˆ†ï¼‰ã€‚RGBA是"
-"Godot的默认格å¼ã€‚\n"
+"返回转æ¢ä¸º RGBA æ ¼å¼çš„ 64 使•´æ•°çš„颜色,æ¯ä¸ªå­—代表一个颜色通é“。 RGBA 是 "
+"Godot 的默认格å¼ã€‚\n"
"[codeblock]\n"
-"var c = Color(1, 0.5, 0.2)\n"
-"print(c.to_rgba64()) # Prints -140736629309441\n"
+"var color = Color(1, 0.5, 0.2)\n"
+"print(color.to_rgba64()) # Prints -140736629309441\n"
"[/codeblock]"
#: doc/classes/Color.xml:242
@@ -17395,17 +17650,18 @@ msgid ""
"[ColorPickerButton] instead if you need a button that brings up a "
"[ColorPicker] in a pop-up."
msgstr ""
+"显示一个å–色器部件。å¯ä»¥ä»ŽRGB/RGBA彩色空间内选å–一个颜色。\n"
+"[b]注æ„:[/b]这个控件就是å–色器本身。如果你需è¦ä¸€ä¸ªèƒ½å¤Ÿå¼¹å‡ºä¸€ä¸ª[ColorPicker]"
+"窗å£çš„æŒ‰é’®ï¼Œä½ å¯ä»¥ä½¿ç”¨ä¸€ä¸ª[ColorPickerButton]æ¥ä»£æ›¿å®ƒã€‚"
#: doc/classes/ColorPicker.xml:18
-#, fuzzy
msgid ""
"Adds the given color to a list of color presets. The presets are displayed "
"in the color picker and the user will be able to select them.\n"
"[b]Note:[/b] The presets list is only for [i]this[/i] color picker."
msgstr ""
-"将指定的颜色添加到颜色预设列表中。预设的颜色会显示在颜色选择器中,用户å¯ä»¥é€‰"
-"择它们。\n"
-"[b]注æ„:[/b]预设列表仅适用于[i]this[/i]颜色选择器。"
+"将给定的颜色添加到颜色预设列表中。用户将能够选择颜色选择器中颜色预设。\n"
+"[b]注æ„:[/b]预设列表仅适用于[i]这个[/i]颜色选择器。"
#: doc/classes/ColorPicker.xml:26
msgid ""
@@ -17521,6 +17777,11 @@ msgid ""
"preview swatch to be visible. Make sure to set [member Control."
"rect_min_size] to a big enough value to give the button enough space."
msgstr ""
+"å°†[ColorPicker]å°è£…æˆå¯ä»¥é€šè¿‡æŒ‰ä¸€ä¸ªæŒ‰é’®æ¥è¿›è¡Œä½¿ç”¨ã€‚点击按钮å¯ä»¥åˆ‡æ¢å‡ºå¯è§çš„"
+"[ColorPicker]。\n"
+"å¦è¯·å‚阅[BaseButton]ã€‚å®ƒåŒ…æ‹¬äº†å’Œè¿™ä¸ªèŠ‚ç‚¹å…±åŒæ‹¥æœ‰çš„属性和方法。\n"
+"[b]注æ„:[/b]æŒ‰é’®é»˜è®¤çŠ¶æ€æ—¶å¯èƒ½éžå¸¸çª„,导致颜色预览样本ä¸å¯è§ã€‚ç¡®ä¿å°†[member "
+"Control.rect_min_size]设置的足够大从而给这个按钮足够的空间去显示。"
#: doc/classes/ColorPickerButton.xml:19
msgid ""
@@ -17529,9 +17790,11 @@ msgid ""
"may cause a crash. If you wish to hide it or any of its children, use their "
"[member CanvasItem.visible] property."
msgstr ""
+"返回此节点所切æ¢çš„ [ColorPicker]。\n"
+"[b]警告:[/b] 这是一个必需的内部节点,移除和释放它å¯èƒ½ä¼šå¯¼è‡´å´©æºƒã€‚如果你希望"
+"éšè—它或其所有å­é¡¹ï¼Œè¯·ä½¿ç”¨å…¶ [member CanvasItem.visible] 属性。"
#: doc/classes/ColorPickerButton.xml:26
-#, fuzzy
msgid ""
"Returns the control's [PopupPanel] which allows you to connect to popup "
"signals. This allows you to handle events when the ColorPicker is shown or "
@@ -17540,8 +17803,10 @@ msgid ""
"may cause a crash. If you wish to hide it or any of its children, use their "
"[member CanvasItem.visible] property."
msgstr ""
-"返回控件的[PopupPanel],å…许您连接到弹出信å·ã€‚这使您å¯ä»¥åœ¨æ˜¾ç¤ºæˆ–éšè—"
-"ColorPicker时处ç†äº‹ä»¶ã€‚"
+"返回控件的 [PopupPanel],它å…许你连接到弹出信å·ã€‚è¿™å…许你在显示或éšè— "
+"ColorPicker 时事件处ç†ã€‚\n"
+"[b]警告:[/b] 这是一个必需的内部节点,删除和释放它å¯èƒ½ä¼šå¯¼è‡´å´©æºƒã€‚如果你希望"
+"éšè—它或其任何å­é¡¹ï¼Œè¯·ä½¿ç”¨å…¶ [member CanvasItem.visible] 属性。"
#: doc/classes/ColorPickerButton.xml:36
msgid ""
@@ -17593,26 +17858,35 @@ msgid "Text [Color] used when the [ColorPickerButton] is disabled."
msgstr "ç¦ç”¨[ColorPickerButton]时使用的文本[Color]。"
#: doc/classes/ColorPickerButton.xml:80
+msgid ""
+"Text [Color] used when the [ColorPickerButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+"当[ColorPickerButton]获得焦点时使用的文本[Color]ã€‚åªæ›¿æ¢æŒ‰é’®çš„æ­£å¸¸æ–‡æœ¬é¢œè‰²ã€‚"
+"ç¦ç”¨ã€æ‚¬åœå’ŒæŒ‰ä¸‹çжæ€ä¼˜å…ˆäºŽè¿™ä¸ªé¢œè‰²ã€‚"
+
+#: doc/classes/ColorPickerButton.xml:83
msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
msgstr "悬åœ[ColorPickerButton]时使用的文本[Color]。"
-#: doc/classes/ColorPickerButton.xml:83
+#: doc/classes/ColorPickerButton.xml:86
msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
msgstr "按下[ColorPickerButton]时使用的文本[Color]。"
-#: doc/classes/ColorPickerButton.xml:86
+#: doc/classes/ColorPickerButton.xml:89
msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
msgstr "悬åœ[ColorPickerButton]时使用的[StyleBox]。"
-#: doc/classes/ColorPickerButton.xml:89
+#: doc/classes/ColorPickerButton.xml:92
msgid "The horizontal space between [ColorPickerButton]'s icon and text."
msgstr "[ColorPickerButton]的图标和文本之间的水平间è·ã€‚"
-#: doc/classes/ColorPickerButton.xml:92
+#: doc/classes/ColorPickerButton.xml:95
msgid "Default [StyleBox] for the [ColorPickerButton]."
msgstr "[ColorPickerButton]的默认[StyleBox]。"
-#: doc/classes/ColorPickerButton.xml:95
+#: doc/classes/ColorPickerButton.xml:98
msgid "[StyleBox] used when the [ColorPickerButton] is being pressed."
msgstr "按下[ColorPickerButton]时使用的[StyleBox]。"
@@ -17625,6 +17899,8 @@ msgid ""
"Displays a rectangle filled with a solid [member color]. If you need to "
"display the border alone, consider using [ReferenceRect] instead."
msgstr ""
+"显示一个用纯色 [member color] 填充的矩形。如果你需è¦å•独显示边框,请考虑使用 "
+"[ReferenceRect] 代替。"
#: doc/classes/ColorRect.xml:16
msgid ""
@@ -17643,7 +17919,6 @@ msgid "Concave polygon shape."
msgstr "凹é¢å¤šè¾¹å½¢å½¢çŠ¶ã€‚"
#: doc/classes/ConcavePolygonShape.xml:7
-#, fuzzy
msgid ""
"Concave polygon shape resource, which can be set into a [PhysicsBody] or "
"area. This shape is created by feeding a list of triangles.\n"
@@ -17651,11 +17926,11 @@ msgid ""
"work with static [PhysicsBody] nodes like [StaticBody] and will not work "
"with [KinematicBody] or [RigidBody] with a mode other than Static."
msgstr ""
-"凹é¢å¤šè¾¹å½¢èµ„æºï¼Œå¯ä»¥å°†å…¶è®¾ç½®ä¸º[PhysicsBody3D]或区域。通过输入一系列三角形æ¥åˆ›"
-"建此形状。\n"
-"注æ„:[ConcavePolygonShape3D]用于碰撞时,旨在与诸如[StaticBody3D]ä¹‹ç±»çš„é™æ€"
-"[PhysicsBody3D]节点一起使用,而ä¸é€‚ç”¨äºŽé™¤é™æ€ä»¥å¤–的其他模å¼çš„"
-"[KinematicBody3D]或[RigidBody3D]节点。"
+"凹多边形形状资æºï¼Œå¯è®¾ç½®ä¸º[PhysicsBody]或区域。这个形状是通过æä¾›ä¸€ä¸ªä¸‰è§’形列"
+"表æ¥åˆ›å»ºçš„。\n"
+"[b]注æ„:[/b] 用于碰撞时,[ConcavePolygonShape] æ—¨åœ¨ä¸Žé™æ€ [PhysicsBody] 节点"
+"一起使用,如 [StaticBody],并且ä¸é€‚用于具有éžé™æ€æ¨¡å¼çš„ [KinematicBody] 或 "
+"[RigidBody]。"
#: doc/classes/ConcavePolygonShape.xml:17
msgid "Returns the faces (an array of triangles)."
@@ -17695,12 +17970,10 @@ msgid ""
msgstr "组æˆ[ConcavePolygonShape2D]线段的点的数组。"
#: doc/classes/ConeTwistJoint.xml:4
-#, fuzzy
msgid "A twist joint between two 3D PhysicsBodies."
-msgstr "两个3D实体之间的扭曲关节。"
+msgstr "两个 3D PhysicsBodies 之间的扭转关节。"
#: doc/classes/ConeTwistJoint.xml:7
-#, fuzzy
msgid ""
"The joint can rotate the bodies across an axis defined by the local x-axes "
"of the [Joint].\n"
@@ -17709,9 +17982,10 @@ msgid ""
"axes of the Joint in the local space of the two Bodies. See also "
"[Generic6DOFJoint]."
msgstr ""
-"关节å¯ä»¥ä½¿å®žä½“沿由[Joint3D]的局部x轴定义的轴旋转。\n"
-"扭曲轴作为[Joint3D]çš„Xè½´å¯åŠ¨ã€‚\n"
-"身体摆动åŽï¼Œå°†æ‰­æ›²è½´è®¡ç®—为在两个身体的局部空间中的Joint3Dçš„x轴的中间。"
+"关节å¯ä»¥åœ¨ [Joint] 的局部 x 轴定义的轴上旋转物体。\n"
+"扭转轴是以[Joint]的X轴为起始。\n"
+"一旦物体摆动,扭转轴就会被计算为两个物体的局部空间中的关节的X轴的中间ä½ç½®ã€‚å‚"
+"阅[Generic6DOFJoint]。"
#: doc/classes/ConeTwistJoint.xml:30 doc/classes/ConeTwistJoint.xml:62
#: doc/classes/PhysicsServer.xml:1076
@@ -17737,7 +18011,6 @@ msgstr "å…³èŠ‚å¼€å§‹æ‰­æ›²çš„éš¾æ˜“ç¨‹åº¦ã€‚å¦‚æžœå¤ªä½Žï¼Œåˆ™éœ€è¦æ›´å¤šçš„力
#: doc/classes/ConeTwistJoint.xml:40 doc/classes/ConeTwistJoint.xml:52
#: doc/classes/PhysicsServer.xml:1066
-#, fuzzy
msgid ""
"Swing is rotation from side to side, around the axis perpendicular to the "
"twist axis.\n"
@@ -17746,10 +18019,10 @@ msgid ""
"Could be defined as looseness in the [ConeTwistJoint].\n"
"If below 0.05, this behavior is locked."
msgstr ""
-"摆动是围绕垂直于扭曲轴的轴从一侧到å¦ä¸€ä¾§æ—‹è½¬ã€‚\n"
-"摆动跨度定义了沿摆动轴ä¸ä¼šæ ¡æ­£å¤šå°‘旋转。\n"
-"å¯ä»¥åœ¨[ConeTwistJoint3D]中定义为æ¾åŠ¨ã€‚\n"
-"如果低于0.05,则此行为将被é”定。"
+"摆动是围绕垂直于扭转轴的轴线从一边到å¦ä¸€è¾¹çš„æ—‹è½¬ã€‚\n"
+"摆动跨度定义了,多少旋转ä¸ä¼šæ²¿ç€æ‘†åŠ¨è½´å¾—åˆ°çº æ­£ã€‚\n"
+"å¯ä»¥å®šä¹‰[ConeTwistJoint]çš„æ¾åŠ¨æ€§ã€‚\n"
+"如果低于0.05,此行为被é”定。"
#: doc/classes/ConeTwistJoint.xml:46 doc/classes/ConeTwistJoint.xml:58
#: doc/classes/PhysicsServer.xml:1072
@@ -17772,7 +18045,6 @@ msgid "Helper class to handle INI-style files."
msgstr "用于处ç†INIæ ·å¼æ–‡ä»¶çš„Helper类。"
#: doc/classes/ConfigFile.xml:7
-#, fuzzy
msgid ""
"This helper class can be used to store [Variant] values on the filesystem "
"using INI-style formatting. The stored values are identified by a section "
@@ -17838,41 +18110,67 @@ msgid ""
"standardized, Godot's ConfigFile formatting may differ from files written by "
"other programs."
msgstr ""
-"该帮助程åºç±»å¯ç”¨äºŽä½¿ç”¨INIæ ·å¼æ ¼å¼åœ¨æ–‡ä»¶ç³»ç»Ÿä¸Šå­˜å‚¨[Variant]值。存储的值由一个"
-"部分和一个键标识:\n"
+"这个辅助类å¯ä»¥ç”¨æ¥åœ¨æ–‡ä»¶ç³»ç»Ÿä¸­ä½¿ç”¨INIé£Žæ ¼æ¥æ ¼å¼åŒ–存储[Variant]值。存储的值由"
+"部分和对应键æ¥è¯†åˆ«ã€‚\n"
"[codeblock]\n"
"[section]\n"
"some_key=42\n"
-"string_example=\"Hello World3D!\"\n"
+"string_example=\"Hello World!\"\n"
"a_vector=Vector3( 1, 0, 2 )\n"
"[/codeblock]\n"
-"The stored data can be saved to or parsed from a file, though ConfigFile "
-"objects can also be used directly without accessing the filesystem.\n"
-"The following example shows how to parse an INI-style file from the system, "
-"read its contents and store new values in it:\n"
+"存储的数æ®å¯ä»¥è¢«ä¿å­˜åˆ°æ–‡ä»¶ä¸­ï¼Œæˆ–从文件中解æžå‡ºæ¥ï¼Œå°½ç®¡ConfigFile对象也å¯ä»¥ç›´"
+"接使用而ä¸éœ€è¦è®¿é—®æ–‡ä»¶ç³»ç»Ÿã€‚\n"
+"下é¢çš„例å­å±•示了如何创建一个简å•çš„[ConfigFile]并将其ä¿å­˜åœ¨ç£ç›˜ä¸Šã€‚\n"
"[codeblock]\n"
+"# 创建新的 ConfigFile 对象。\n"
"var config = ConfigFile.new()\n"
-"var err = config.load(\"user://settings.cfg\")\n"
-"if err == OK: # If not, something went wrong with the file loading\n"
-" # Look for the display/width pair, and default to 1024 if missing\n"
-" var screen_width = config.get_value(\"display\", \"width\", 1024)\n"
-" # Store a variable if and only if it hasn't been defined yet\n"
-" if not config.has_section_key(\"audio\", \"mute\"):\n"
-" config.set_value(\"audio\", \"mute\", false)\n"
-" # Save the changes by overwriting the previous file\n"
-" config.save(\"user://settings.cfg\")\n"
+"\n"
+"# 存储一些值。\n"
+"config.set_value(\"Player1\", \"player_name\", \"Steve\")\n"
+"config.set_value(\"Player1\", \"best_score\", 10)\n"
+"config.set_value(\"Player2\", \"player_name\", \"V3geta\")\n"
+"config.set_value(\"Player2\", \"best_score\", 9001)\n"
+"\n"
+"# 把它ä¿å­˜åˆ°ä¸€ä¸ªæ–‡ä»¶ä¸­ï¼ˆå¦‚果已ç»å­˜åœ¨åˆ™è¦†ç›–)。\n"
+"config.save(\"user://scores.cfg\")\n"
+"[/codeblock]\n"
+"è¿™ä¸ªä¾‹å­æ˜¾ç¤ºäº†å¦‚何加载上述文件。\n"
+"[codeblock]\n"
+"var score_data = {}\n"
+"var config = ConfigFile.new()\n"
+"\n"
+"# 从文件中加载数æ®ã€‚\n"
+"var err = config.load(\"user://scores.cfg\")\n"
+"\n"
+"# 如果文件没有加载,请忽略它。\n"
+"if err != OK:\n"
+" return\n"
+"\n"
+"# é历所有部分。\n"
+"for player in config.get_sections():\n"
+" # å–出æ¯ä¸ªéƒ¨åˆ†çš„æ•°æ®ã€‚\n"
+" var player_name = config.get_value(player, \"player_name\")\n"
+" var player_score = config.get_value(player, \"best_score\")\n"
+" score_data[player_name] = player_score\n"
"[/codeblock]\n"
-"请记ä½ï¼Œéƒ¨åˆ†å’Œå±žæ€§åç§°ä¸èƒ½åŒ…å«ç©ºæ ¼ã€‚在ä¿å­˜å’ŒåŠ è½½æ—¶ï¼Œç©ºæ ¼åŽçš„æ‰€æœ‰å†…容都将被忽"
+"任何改å˜ConfigFileçš„æ“作,如[method set_value]ã€[method clear]或[method "
+"erase_section]ï¼Œéƒ½åªæ”¹å˜å†…存中加载的内容。如果你想把å˜åŒ–写入文件,必须用"
+"[method save]ã€[method save_encrypted]或[method save_encrypted_pass]ä¿å­˜è¿™äº›"
+"å˜åŒ–。\n"
+"请记ä½ï¼Œéƒ¨åˆ†å’Œå±žæ€§åç§°ä¸èƒ½åŒ…å«ç©ºæ ¼ã€‚空格之åŽçš„内容在ä¿å­˜å’ŒåŠ è½½æ—¶éƒ½ä¼šè¢«å¿½"
"略。\n"
-"ConfigFiles还å¯ä»¥åŒ…å«ä»¥åˆ†å·ï¼ˆ[code]; [/code]ï¼‰å¼€å¤´çš„æ‰‹åŠ¨ç¼–å†™çš„æ³¨é‡Šè¡Œã€‚è§£æžæ–‡"
-"件时,这些行将被忽略。请注æ„,ä¿å­˜ConfigFile时,注释将丢失。这对于专用的æœåŠ¡"
-"器é…置文件ä»ç„¶å¾ˆæœ‰ç”¨ï¼Œè¿™äº›æ–‡ä»¶é€šå¸¸åœ¨æ²¡æœ‰æ˜Žç¡®çš„用户æ“作的情况下永远ä¸ä¼šè¢«è¦†"
-"盖。"
+"é…置文件还å¯ä»¥åŒ…å«ä»¥åˆ†å·å¼€å¤´çš„æ‰‹åŠ¨ç¼–å†™çš„æ³¨é‡Šè¡Œï¼ˆ[code];[/code])。这些行在解"
+"æžæ–‡ä»¶æ—¶å°†è¢«å¿½ç•¥ã€‚请注æ„,在ä¿å­˜ConfigFile时,注释将会丢失。注释对于专用的æœ"
+"务器é…置文件ä»ç„¶å¾ˆæœ‰ç”¨ï¼Œå› ä¸ºå¦‚果没有明确的用户æ“作,这些文件通常ä¸ä¼šè¢«è¦†"
+"盖。\n"
+"[b]注æ„:[/b] 给予é…置文件扩展åå¯¹å…¶æ ¼å¼æˆ–行为没有任何影å“ã€‚æ ¹æ®æƒ¯ä¾‹ï¼Œè¿™é‡Œä½¿"
+"用的是[code].cfg[/code]扩展å,但任何其他扩展å,如[code].ini[/code]也是有效"
+"的。由于[code].cfg[/code]å’Œ[code].ini[/code]éƒ½ä¸æ˜¯æ ‡å‡†åŒ–的,Godotçš„ConfigFile"
+"æ ¼å¼å¯èƒ½ä¸Žå…¶ä»–程åºç¼–写的文件有所ä¸åŒã€‚"
#: doc/classes/ConfigFile.xml:59
-#, fuzzy
msgid "Removes the entire contents of the config."
-msgstr "返回图å—的纹ç†åç§»é‡ã€‚"
+msgstr "删除é…置的全部内容。"
#: doc/classes/ConfigFile.xml:66
msgid ""
@@ -17951,15 +18249,14 @@ msgstr ""
"返回[enum Error]代ç å¸¸é‡ä¹‹ä¸€ï¼ˆæˆåŠŸæ—¶è¿”å›ž[code]OK[/code])。"
#: doc/classes/ConfigFile.xml:144
-#, fuzzy
msgid ""
"Parses the passed string as the contents of a config file. The string is "
"parsed and loaded in the ConfigFile object which the method was called on.\n"
"Returns one of the [enum Error] code constants ([code]OK[/code] on success)."
msgstr ""
-"将传入的字符串解æžä¸ºé…置文件的内容。该字符串被解æžå¹¶åŠ è½½åˆ°è°ƒç”¨è¯¥æ–¹æ³•çš„"
-"ConfigFile对象中。\n"
-"返回[enum Error]代ç å¸¸é‡ä¹‹ä¸€(æˆåŠŸæ—¶è¿”å›ž[code]OK[/code])。"
+"将传递的字符串解æžä¸ºé…置文件的内容。该字符串被解æžå¹¶åŠ è½½åˆ°è°ƒç”¨è¯¥æ–¹æ³•çš„ "
+"ConfigFile 对象中。\n"
+"返回 [enum Error] 常é‡ä¹‹ä¸€ï¼ŒæˆåŠŸæ—¶è¿”å›ž [code]OK[/code]。"
#: doc/classes/ConfigFile.xml:152
msgid ""
@@ -18032,6 +18329,9 @@ msgid ""
"may cause a crash. If you wish to hide it or any of its children, use their "
"[member CanvasItem.visible] property."
msgstr ""
+"è¿”å›žå–æ¶ˆæŒ‰é’®ã€‚\n"
+"[b]警告:[/b] 这是一个必需的内部节点,删除和释放它å¯èƒ½ä¼šå¯¼è‡´å´©æºƒã€‚如果你希望"
+"éšè—它或其任何å­é¡¹ï¼Œè¯·ä½¿ç”¨å…¶ [member CanvasItem.visible] 属性。"
#: doc/classes/Container.xml:4
msgid "Base node for containers."
@@ -18076,7 +18376,6 @@ msgstr ""
"å°ã€‚"
#: doc/classes/Control.xml:7
-#, fuzzy
msgid ""
"Base class for all UI-related nodes. [Control] features a bounding rectangle "
"that defines its extents, an anchor position relative to its parent control "
@@ -18111,36 +18410,42 @@ msgid ""
"[method get_icon], [method get_stylebox], and the [code]add_*_override[/"
"code] methods provided by this class."
msgstr ""
-"所有与UI相关的节点的基类。 [Control]具有定义其范围的边界矩形,相对于其父控件"
-"或当å‰è§†å£çš„锚点ä½ç½®ä»¥åŠè¡¨ç¤ºé”šç‚¹å移的边è·ã€‚当节点,它的任何父节点或å±å¹•尺寸"
-"更改时,边è·ä¼šè‡ªåŠ¨æ›´æ–°ã€‚\n"
-"有关Godotçš„UI系统,锚点,边è·å’Œå®¹å™¨çš„æ›´å¤šä¿¡æ¯ï¼Œè¯·å‚é˜…æ‰‹å†Œä¸­çš„ç›¸å…³æ•™ç¨‹ã€‚è¦æž„建"
-"çµæ´»çš„UIï¼Œæ‚¨éœ€è¦æ··åˆä½¿ç”¨ä»Ž[Control]å’Œ[Container]节点继承的UI元素。\n"
+"所有 UI 相关节点的基类。[Control] 具有定义其范围的边界矩形ã€ç›¸å¯¹äºŽå…¶çˆ¶æŽ§ä»¶æˆ–"
+"当å‰è§†çª—的锚点ä½ç½®ä»¥åŠè¡¨ç¤ºé”šç‚¹å移的边è·ã€‚ 当节点ã€å…¶ä»»ä½•父节点或å±å¹•尺寸å‘生"
+"å˜åŒ–时,边è·ä¼šè‡ªåŠ¨æ›´æ–°ã€‚\n"
+"更多关于 Godot çš„ UI 系统ã€é”šç‚¹ã€è¾¹è·å’Œå®¹å™¨çš„ä¿¡æ¯ï¼Œè¯·å‚阅手册中的相关教程。 "
+"è¦æž„å»ºçµæ´»çš„ UIï¼Œæ‚¨éœ€è¦æ··åˆä½¿ç”¨ä»Ž [Control] å’Œ [Container] 节点继承的 UI å…ƒ"
+"素。\n"
"[b]用户界é¢èŠ‚ç‚¹å’Œè¾“å…¥[/b]\n"
-"Godot首先通过调用[method Node._input]将输入事件å‘é€åˆ°åœºæ™¯çš„æ ¹èŠ‚ç‚¹ã€‚ [method "
-"Node._input]将事件从节点树å‘下转å‘到鼠标光标下方或键盘焦点上的节点。为此,它"
-"调用[code] MainLoop._input_event [/code]。\n"
-"[b] FIXME:[/b] DisplayServeræ‹†åˆ†å’Œè¾“å…¥é‡æž„åŽä¸å†æœ‰æ•ˆã€‚\n"
-"调用[method accept_event],因此没有其他节点接收该事件。接å—输入åŽï¼Œå°†å¯¹å…¶è¿›è¡Œ"
-"处ç†ï¼Œå› æ­¤[method Node._unhandled_input]å°†ä¸ä¼šå¯¹å…¶è¿›è¡Œå¤„ç†ã€‚\n"
-"键盘焦点中åªèƒ½æœ‰ä¸€ä¸ª[Control]节点。仅焦点所在的节点将接收键盘事件。è¦èŽ·å¾—ç„¦"
-"点,请调用[methodgrap_focus]。当å¦ä¸€ä¸ªèŠ‚ç‚¹æŠ“ä½[Control]节点或将其éšè—在焦点中"
-"时,该节点将失去焦点。\n"
-"将[member mouse_filter]设置为[constant MOUSE_FILTER_IGNORE],以通知[Control]"
-"节点忽略鼠标或触摸事件。如果将图标放在按钮顶部,则将需è¦å®ƒã€‚\n"
-"[Theme]资æºä¼šæ›´æ”¹æŽ§ä»¶çš„外观。如果更改[Control]节点上的[Theme],它将影å“其所有"
-"å­çº§ã€‚è¦è¦†ç›–æŸäº›ä¸»é¢˜çš„傿•°ï¼Œè¯·è°ƒç”¨[code] add_theme _ * _ override [/code]方法"
-"之一,例如[method add_theme_font_override]。您å¯ä»¥ä½¿ç”¨æ£€æŸ¥å™¨è¦†ç›–主题。"
+"Godot 首先通过调用 [method Node._input] 将输入事件å‘é€åˆ°åœºæ™¯çš„æ ¹èŠ‚ç‚¹ã€‚ "
+"[method Node._input] 将事件沿节点树å‘下转å‘到鼠标光标下或键盘焦点上的节点。 "
+"为此,它调用 [method MainLoop._input_event]。 调用 [method accept_event] 以便"
+"没有其他节点收到该事件。 一旦你接å—一个输入,它就会被处ç†ï¼Œæ‰€ä»¥ [method Node."
+"_unhandled_input] ä¸ä¼šå¤„ç†å®ƒã€‚\n"
+"åªæœ‰ä¸€ä¸ª [Control] 节点å¯ä»¥å¤„于键盘焦点。 åªæœ‰å¤„于焦点的节点æ‰ä¼šæŽ¥æ”¶é”®ç›˜äº‹"
+"件。 è¦èŽ·å¾—ç„¦ç‚¹ï¼Œè¯·è°ƒç”¨ [method grab_focus]。在å¦ä¸€ä¸ªèŠ‚ç‚¹èŽ·å¾—èšç„¦æ—¶ "
+"[Control] 节点会失去焦点,或者您éšè—焦点中的节点。\n"
+"将 [member mouse_filter] 设置为 [constant MOUSE_FILTER_IGNORE] 以告诉 "
+"[Control] 节点忽略鼠标或触摸事件。 如果您在按钮顶部放置一个图标,您将需è¦"
+"它。\n"
+"[Theme] èµ„æºæ›´æ”¹æŽ§ä»¶çš„外观。 如果您更改 [Control] 节点上的 [Theme],则会影å“"
+"其所有å­èŠ‚ç‚¹ã€‚ è¦è¦†ç›–æŸäº›ä¸»é¢˜çš„傿•°ï¼Œè¯·è°ƒç”¨ [code]add_*_override[/code] 方法"
+"之一,例如 [method add_font_override]。 您å¯ä»¥ä½¿ç”¨æ£€æŸ¥å™¨è¦†ç›–主题。\n"
+"[b]注æ„:[/b] 主题项目[i]䏿˜¯[/i] [Object] 的属性。这æ„味ç€ä½ æ— æ³•使用 "
+"[method Object.get] å’Œ [method Object.set] 访问它们的值。请æ¢ç”¨ [method "
+"get_color]ã€[method get_constant]ã€[method get_font]ã€[method get_icon]ã€"
+"[method get_stylebox],以åŠè¿™ä¸ªç±»æä¾›çš„ [code]add_*_override[/code] 方法。"
#: doc/classes/Control.xml:17
msgid "https://docs.godotengine.org/en/3.4/tutorials/gui/index.html"
-msgstr "https://docs.godotengine.org/en/3.4/tutorials/gui/index.html"
+msgstr "https://docs.godotengine.org/zh_CN/stable/tutorials/gui/index.html"
#: doc/classes/Control.xml:19
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/gui/control_node_gallery.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/gui/control_node_gallery.html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/gui/control_node_gallery."
+"html"
#: doc/classes/Control.xml:20
msgid "https://github.com/godotengine/godot-demo-projects/tree/master/gui"
@@ -18173,7 +18478,6 @@ msgstr ""
"如果未覆盖,则默认为[constant Vector2.ZERO]。"
#: doc/classes/Control.xml:41
-#, fuzzy
msgid ""
"Virtual method to be implemented by the user. Use this method to process and "
"accept inputs on UI elements. See [method accept_event].\n"
@@ -18195,27 +18499,27 @@ msgid ""
"[member rect_clip_content] or [method _clips_input] enabled.\n"
"[b]Note:[/b] Event position is relative to the control origin."
msgstr ""
-"用户è¦å®žçŽ°çš„è™šæ‹Ÿæ–¹æ³•ã€‚ä½¿ç”¨æ­¤æ–¹æ³•æ¥å¤„ç†å’ŒæŽ¥å—UI元素上的输入。å‚阅[方法"
+"由用户实现的虚方法。使用此方法处ç†å’ŒæŽ¥å— UI 元素上的输入。å‚阅[method "
"accept_event]。\n"
-"示例:å•击一个控件。\n"
+"例:å•击控件。\n"
"[codeblock]\n"
"func _gui_input(event):\n"
" if event is InputEventMouseButton:\n"
" if event.button_index == BUTTON_LEFT and event.pressed:\n"
" print(\"I've been clicked D:\")\n"
"[/codeblock]\n"
-"在以下情况下,该事件ä¸ä¼šè§¦å‘:\n"
-"*在控件外部å•击(请å‚阅[method has_point]);\n"
-"*控件的[member mouse_filter]设置为[constant MOUSE_FILTER_IGNORE];\n"
-"*控件被其顶部的å¦ä¸€ä¸ª[Control]阻塞,该控件没有将[member mouse_filter]设置为"
-"[constant MOUSE_FILTER_IGNORE]ï¼›\n"
-"*控件的父级已将[member mouse_filter]设置为[constant MOUSE_FILTER_STOP]或已接"
-"å—该事件;\n"
-"*它å‘生在父级矩形的外部,并且父级å¯ç”¨äº†[member rect_clip_content]或[method "
-"_clips_input]。"
+"如果出现以下情况,则ä¸ä¼šè§¦å‘该事件:\n"
+"* 在控件外点击(å‚阅[method has_point]);\n"
+"* 控件将 [member mouse_filter] 设置为 [constant MOUSE_FILTER_IGNORE];\n"
+"* 控件被其上的å¦ä¸€ä¸ª [Control] 阻挡,该控件没有将 [member mouse_filter] 设置"
+"为 [constant MOUSE_FILTER_IGNORE];\n"
+"* 控件的父级已将 [member mouse_filter] 设置为 [constant MOUSE_FILTER_STOP] 或"
+"已接å—该事件;\n"
+"* 它å‘生在父级的矩形之外,并且父级已å¯ç”¨ [member rect_clip_content] 或 "
+"[method _clips_input]。\n"
+"[b]注:[/b] äº‹ä»¶åæž—标相对于控件原点。"
#: doc/classes/Control.xml:62
-#, fuzzy
msgid ""
"Virtual method to be implemented by the user. Returns a [Control] node that "
"should be used as a tooltip instead of the default one. The [code]for_text[/"
@@ -18248,26 +18552,28 @@ msgid ""
" return tooltip\n"
"[/codeblock]"
msgstr ""
-"用户è¦å®žçŽ°çš„è™šæ‹Ÿæ–¹æ³•ã€‚è¿”å›žä¸€ä¸ª[Control]节点,该节点应用作工具æç¤ºï¼Œè€Œä¸æ˜¯é»˜è®¤"
-"æç¤ºã€‚使用[code] for_text [/code]傿•°æ¥ç¡®å®šå·¥å…·æç¤ºåº”包å«çš„æ–‡æœ¬ï¼ˆå¯èƒ½æ˜¯"
-"[member hint_tooltip]的内容)。\n"
-"返回的节点必须是[Control]类型或Control-derieved类型。它å¯ä»¥å…·æœ‰ä»»ä½•类型的å­èŠ‚"
-"点。当工具æç¤ºæ¶ˆå¤±æ—¶ï¼Œå®ƒä¼šè¢«é‡Šæ”¾ï¼Œå› æ­¤è¯·ç¡®ä¿æ‚¨å§‹ç»ˆæä¾›ä¸€ä¸ªæ–°å®žä¾‹ï¼Œè€Œä¸æ˜¯ä¾‹å¦‚"
-"场景中的节点。当返回[code] null [/code]或éžControl节点时,将使用默认的工具æ"
-"示。\n"
-"[b]注æ„:[/b]工具æç¤ºä¼šç¼©å°åˆ°æœ€å°å°ºå¯¸ã€‚如果è¦ç¡®ä¿å®ƒæ˜¯å®Œå…¨å¯è§çš„,则å¯èƒ½éœ€è¦å°†"
-"å…¶[member rect_min_size]设置为一些éžé›¶å€¼ã€‚\n"
-"自定义构造的节点的用法示例:\n"
+"由用户实现的虚方法。返回一个 [Control] 节点,该节点应用作工具æç¤ºè€Œä¸æ˜¯é»˜è®¤èŠ‚"
+"点。 [code]for_text[/code] åŒ…å« [member hint_tooltip] 属性的内容。\n"
+"返回的节点必须是 [Control] 或 Control-derived 类型。它å¯ä»¥æœ‰ä»»ä½•类型的å­èŠ‚"
+"点。当工具æç¤ºæ¶ˆå¤±æ—¶å®ƒä¼šè¢«é‡Šæ”¾ï¼Œå› æ­¤è¯·ç¡®ä¿ä½ å§‹ç»ˆæä¾›ä¸€ä¸ªæ–°å®žä¾‹ï¼ˆå¦‚果你想使用"
+"场景树中预先存在的节点,å¯ä»¥å¤åˆ¶å®ƒå¹¶ä¼ é€’å¤åˆ¶çš„实例)。当返回 [code]null[/"
+"code] æˆ–éžæŽ§ä»¶èŠ‚ç‚¹æ—¶ï¼Œå°†ä½¿ç”¨é»˜è®¤å·¥å…·æç¤ºã€‚\n"
+"返回的节点将作为å­èŠ‚ç‚¹æ·»åŠ åˆ° [PopupPanel]ï¼Œå› æ­¤ä½ åº”è¯¥åªæä¾›è¯¥é¢æ¿çš„内容。该 "
+"[PopupPanel] å¯ä»¥ä½¿ç”¨ [method Theme.set_stylebox] 为类型 [code]\"TooltipPanel"
+"\"[/code] 设置主题,å‚阅 [member hint_tooltip] 示例。\n"
+"[b]注æ„:[/b]工具æç¤ºç¼©å°åˆ°æœ€å°å°ºå¯¸ã€‚如果你想确ä¿å®ƒå®Œå…¨å¯è§ï¼Œéœ€å°†å…¶ [member "
+"rect_min_size] 设置为éžé›¶å€¼ã€‚\n"
+"自定义构建节点的使用示例:\n"
"[codeblock]\n"
"func _make_custom_tooltip(for_text):\n"
" var label = Label.new()\n"
" label.text = for_text\n"
" return label\n"
"[/codeblock]\n"
-"Example of usage with custom scene instance:\n"
+"自定义场景实例的使用示例:\n"
"[codeblock]\n"
"func _make_custom_tooltip(for_text):\n"
-" var tooltip = preload(\"SomeTooltipScene.tscn\").instance()\n"
+" var tooltip = preload(\"res://SomeTooltipScene.tscn\").instance()\n"
" tooltip.get_node(\"Label\").text = for_text\n"
" return tooltip\n"
"[/codeblock]"
@@ -18298,6 +18604,17 @@ msgid ""
"\"))\n"
"[/codeblock]"
msgstr ""
+"使用指定的 [code]name[/code] 为主题 [Color] åˆ›å»ºæœ¬åœ°è¦†ç›–é¡¹ã€‚èŽ·å–æŽ§ä»¶çš„ä¸»é¢˜é¡¹"
+"时,本地覆盖项始终优先。无法删除覆盖项,但å¯ä»¥ä½¿ç”¨ç›¸åº”的默认值覆盖它。\n"
+"å‚阅[method get_color]。\n"
+"[b]覆盖标签颜色并其åŽé‡ç½®çš„示例:[/b]\n"
+"[codeblock]\n"
+"# ç»™å®šå­æ ‡ç­¾èŠ‚ç‚¹\"MyLabel\",用自定义值覆盖其字体颜色。\n"
+"$MyLabel.add_color_override(\"font_color\", Color(1, 0.5, 0))\n"
+"# é‡ç½®å­æ ‡ç­¾çš„字体颜色。\n"
+"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", \"Label"
+"\"))\n"
+"[/codeblock]"
#: doc/classes/Control.xml:109
msgid ""
@@ -18307,6 +18624,9 @@ msgid ""
"the corresponding default value.\n"
"See also [method get_constant]."
msgstr ""
+"为指定 [code]name[/code] 的主题常é‡åˆ›å»ºæœ¬åœ°è¦†ç›–é¡¹ã€‚èŽ·å–æŽ§ä»¶çš„ä¸»é¢˜é¡¹æ—¶ï¼Œæœ¬åœ°è¦†"
+"盖项始终优先。无法删除覆盖项,但å¯ä»¥ä½¿ç”¨ç›¸åº”的默认值覆盖它。\n"
+"å‚阅[method get_constant]。"
#: doc/classes/Control.xml:118
msgid ""
@@ -18316,6 +18636,9 @@ msgid ""
"value.\n"
"See also [method get_font]."
msgstr ""
+"使用指定的 [code]name[/code] 为主题 [Font] åˆ›å»ºæœ¬åœ°è¦†ç›–é¡¹ã€‚èŽ·å–æŽ§ä»¶çš„ä¸»é¢˜é¡¹"
+"时,本地覆盖项始终优先。å¯ä»¥é€šè¿‡ä¸ºå…¶åˆ†é… [code]null[/code] 值æ¥åˆ é™¤è¦†ç›–。\n"
+"å‚阅[method get_font]。"
#: doc/classes/Control.xml:127
msgid ""
@@ -18325,6 +18648,9 @@ msgid ""
"value.\n"
"See also [method get_icon]."
msgstr ""
+"为指定 [code]name[/code] çš„ä¸»é¢˜å›¾æ ‡åˆ›å»ºæœ¬åœ°è¦†ç›–é¡¹ã€‚èŽ·å–æŽ§ä»¶çš„ä¸»é¢˜é¡¹æ—¶ï¼Œæœ¬åœ°è¦†"
+"盖项始终优先。å¯ä»¥é€šè¿‡ä¸ºå…¶åˆ†é… [code]null[/code] 值æ¥åˆ é™¤è¦†ç›–。\n"
+"å‚阅[method get_icon]。"
#: doc/classes/Control.xml:136
msgid ""
@@ -18333,6 +18659,8 @@ msgid ""
"the control. An override can be removed by assigning it a [code]null[/code] "
"value."
msgstr ""
+"为指定 [code]name[/code] 的主题ç€è‰²å™¨åˆ›å»ºæœ¬åœ°è¦†ç›–é¡¹ã€‚èŽ·å–æŽ§ä»¶çš„ä¸»é¢˜é¡¹æ—¶ï¼Œæœ¬åœ°"
+"覆盖项始终优先。å¯ä»¥é€šè¿‡ä¸ºå…¶åˆ†é… [code]null[/code] 值æ¥åˆ é™¤è¦†ç›–。"
#: doc/classes/Control.xml:144
msgid ""
@@ -18355,6 +18683,21 @@ msgid ""
"$MyButton.add_stylebox_override(\"normal\", null)\n"
"[/codeblock]"
msgstr ""
+"为主题 [StyleBox] 创建å为 [code]name[/code] çš„æœ¬åœ°è¦†ç›–é¡¹ã€‚èŽ·å–æŽ§ä»¶çš„ä¸»é¢˜é¡¹"
+"时,本地覆盖项始终优先。å¯ä»¥é€šè¿‡ä¸ºå…¶åˆ†é… [code]null[/code] 值æ¥åˆ é™¤è¦†ç›–。\n"
+"å‚阅 [method get_stylebox]。\n"
+"[b]通过å¤åˆ¶æ¥ä¿®æ”¹ StyleBox 中的属性的示例:[/b]\n"
+"[codeblock]\n"
+"# 下é¢çš„代ç ç‰‡æ®µå‡è®¾å­èŠ‚ç‚¹ MyButton 分é…了一个 StyleBoxFlat。\n"
+"# èµ„æºæ˜¯è·¨å®žä¾‹å…±äº«çš„,所以我们需è¦å¤åˆ¶å®ƒ\n"
+"# 以é¿å…修改所有其他按钮的外观。\n"
+"var new_stylebox_normal = $MyButton.get_stylebox(\"normal\").duplicate()\n"
+"new_stylebox_normal.border_width_top = 3\n"
+"new_stylebox_normal.border_color = Color(0, 1, 0.5)\n"
+"$MyButton.add_stylebox_override(\"normal\", new_stylebox_normal)\n"
+"# 删除样å¼ç›’覆盖。\n"
+"$MyButton.add_stylebox_override(\"normal\", null)\n"
+"[/codeblock]"
#: doc/classes/Control.xml:165
msgid ""
@@ -18410,13 +18753,12 @@ msgstr ""
#: doc/classes/Control.xml:193
msgid ""
"Finds the next (below in the tree) [Control] that can receive the focus."
-msgstr ""
+msgstr "找到下一个å¯ä»¥æŽ¥å—焦点的[Control],在树的下方。"
#: doc/classes/Control.xml:199
-#, fuzzy
msgid ""
"Finds the previous (above in the tree) [Control] that can receive the focus."
-msgstr "返回树中的å‰ä¸€ä¸ªTreeItem树项,如果没有,则返回一个空对象。"
+msgstr "找到å¯ä»¥æŽ¥æ”¶ç„¦ç‚¹çš„上一个[Control],在树的上方。"
#: doc/classes/Control.xml:207
msgid ""
@@ -18473,6 +18815,22 @@ msgid ""
" modulate = get_color(\"font_color\", \"Button\")\n"
"[/codeblock]"
msgstr ""
+"如果该 [Theme] 具有指定 [code]name[/code] 和 [code]theme_type[/code] 的颜色"
+"项,则从树中第一个匹é…çš„ [Theme] 返回 [Color]。如果çœç•¥ [code]theme_type[/"
+"code]ï¼Œåˆ™ä½¿ç”¨å½“å‰æŽ§ä»¶çš„ç±»å作为类型。如果类型是类åï¼Œåˆ™è¿˜ä¼šæŒ‰ç»§æ‰¿é¡ºåºæ£€æŸ¥å…¶çˆ¶"
+"类。\n"
+"å¯¹äºŽå½“å‰æŽ§ä»¶ï¼Œé¦–å…ˆè€ƒè™‘å…¶æœ¬åœ°è¦†ç›–é¡¹ï¼Œå‚阅 [method add_color_override]ï¼Œç„¶åŽæ˜¯"
+"其分é…çš„ [member theme]ã€‚åœ¨å½“å‰æŽ§ä»¶ä¹‹åŽï¼Œè€ƒè™‘æ¯ä¸ªçˆ¶æŽ§ä»¶åŠå…¶åˆ†é…çš„ [member "
+"theme];未分é…[member theme]的控件将被跳过。如果在树中找ä¸åˆ°åŒ¹é…çš„ [Theme],"
+"则使用自定义项目 [Theme]和默认的 [Theme],å‚阅 [member ProjectSettings.gui/"
+"theme/custom]。\n"
+"[codeblock]\n"
+"func _ready():\n"
+" # 获å–ä¸ºå½“å‰æŽ§ä»¶ç±»å®šä¹‰çš„å­—ä½“é¢œè‰²ï¼ˆå¦‚æžœå­˜åœ¨ï¼‰ã€‚\n"
+" modulate = get_color(\"font_color\")\n"
+" # 获å–为 Button 类定义的字体颜色。\n"
+" modulate = get_color(\"font_color\", \"Button\")\n"
+"[/codeblock]"
#: doc/classes/Control.xml:243
msgid ""
@@ -18487,6 +18845,9 @@ msgid ""
"[code]theme_type[/code].\n"
"See [method get_color] for details."
msgstr ""
+"如果该 [Theme] 具有指定 [code]name[/code] å’Œ [code]theme_type[/code] 的常é‡é¡¹"
+"目,则从树中的第一个匹é…çš„ [Theme] 返回常é‡ã€‚\n"
+"有关详细信æ¯ï¼Œå‚阅 [method get_color]。"
#: doc/classes/Control.xml:259
msgid ""
@@ -18551,6 +18912,9 @@ msgid ""
"code].\n"
"See [method get_color] for details."
msgstr ""
+"如果该 [Theme] 具有指定 [code]name[/code] 和 [code]theme_type[/code] 的字体项"
+"目,则从树中第一个匹é…çš„ [Theme] 返回 [Font]。\n"
+"有关详细信æ¯ï¼Œè¯·å‚阅 [method get_color]。"
#: doc/classes/Control.xml:307
msgid ""
@@ -18567,6 +18931,9 @@ msgid ""
"code].\n"
"See [method get_color] for details."
msgstr ""
+"如果该 [Theme] 具有指定 [code]name[/code] 和 [code]theme_type[/code] 的图标项"
+"目,则从树中第一个匹é…çš„ [Theme] 返回图标。\n"
+"有关详细信æ¯ï¼Œè¯·å‚阅 [method get_color]。"
#: doc/classes/Control.xml:323
msgid ""
@@ -18609,6 +18976,9 @@ msgid ""
"[code]theme_type[/code].\n"
"See [method get_color] for details."
msgstr ""
+"è¿”å›žæ ‘ä¸­é¦–ä¸ªç¬¦åˆæ¡ä»¶çš„ [Theme] çš„ [StyleBox],这个 [Theme] 具有å称为 "
+"[code]name[/code] 并且主题类型为 [code]theme_type[/code] 的样å¼ç›’。\n"
+"详情请å‚阅 [method get_color]。"
#: doc/classes/Control.xml:368
msgid ""
@@ -18616,6 +18986,9 @@ msgid ""
"[Theme] has a valid [member Theme.default_font] value.\n"
"See [method get_color] for details."
msgstr ""
+"如果 [Theme] 具有有效的 [member Theme.default_font] 值,则从树中第一个匹é…çš„ "
+"[Theme] 返回默认字体。\n"
+"有关详细信æ¯ï¼Œå‚阅 [method get_color]。"
#: doc/classes/Control.xml:376
msgid ""
@@ -18650,46 +19023,46 @@ msgid ""
msgstr "从å¦ä¸€ä¸ªæŽ§ä»¶ä¸­çªƒå–焦点,并æˆä¸ºç„¦ç‚¹æŽ§ä»¶ï¼ˆè¯·å‚阅[member focus_mode])。"
#: doc/classes/Control.xml:400
-#, fuzzy
msgid ""
"Returns [code]true[/code] if there is a matching [Theme] in the tree that "
"has a color item with the specified [code]name[/code] and [code]theme_type[/"
"code].\n"
"See [method get_color] for details."
msgstr ""
-"如果å¯ä»¥å®žä¾‹åŒ–指定[code]class[/code]中的对象,则返回[code] true [/code],å¦åˆ™"
-"返回[code] false [/code]。"
+"如果树中存在匹é…çš„ [Theme] 且具有指定 [code]name[/code] å’Œ [code]theme_type[/"
+"code] 的颜色项,则返回 [code]true[/code]。\n"
+"有关详细信æ¯ï¼Œå‚阅 [method get_color]。"
#: doc/classes/Control.xml:408
-#, fuzzy
msgid ""
"Returns [code]true[/code] if there is a local override for a theme [Color] "
"with the specified [code]name[/code] in this [Control] node.\n"
"See [method add_color_override]."
msgstr ""
-"如果给定[code]name[/code]的[Color]在这个[Control]节点中具有有效的覆盖,则返回"
-"[code]true[/code]。"
+"如果在此 [Control] 节点中具有指定 [code]name[/code] 的主题颜色 [Color] 的本地"
+"覆盖项,则返回 [code]true[/code]。\n"
+"å‚阅 [method add_color_override]。"
#: doc/classes/Control.xml:417
-#, fuzzy
msgid ""
"Returns [code]true[/code] if there is a matching [Theme] in the tree that "
"has a constant item with the specified [code]name[/code] and "
"[code]theme_type[/code].\n"
"See [method get_color] for details."
msgstr ""
-"如果å¯ä»¥å®žä¾‹åŒ–指定[code]class[/code]中的对象,则返回[code] true [/code],å¦åˆ™"
-"返回[code] false [/code]。"
+"如果树中存在匹é…çš„ [Theme] 且具有指定 [code]name[/code] å’Œ [code]theme_type[/"
+"code] 的常é‡é¡¹ç›®ï¼Œåˆ™è¿”回 [code]true[/code]。\n"
+"有关详细信æ¯ï¼Œå‚阅 [method get_color]。"
#: doc/classes/Control.xml:425
-#, fuzzy
msgid ""
"Returns [code]true[/code] if there is a local override for a theme constant "
"with the specified [code]name[/code] in this [Control] node.\n"
"See [method add_constant_override]."
msgstr ""
-"如果由åç§° [code]name[/code] 指定的设置存在,则返回 [code]true[/code],å¦åˆ™è¿”"
-"回 [code]false[/code]。"
+"如果此 [Control] 节点中具有指定 [code]name[/code] 的主题常é‡å­˜åœ¨æœ¬åœ°è¦†ç›–项,"
+"则返回 [code]true[/code]。\n"
+"å‚阅 [method add_constant_override]。"
#: doc/classes/Control.xml:432
msgid ""
@@ -18699,46 +19072,46 @@ msgstr ""
"如果这是当å‰çš„焦点控件,则返回[code] true [/code]。å‚阅[member focus_mode]。"
#: doc/classes/Control.xml:440
-#, fuzzy
msgid ""
"Returns [code]true[/code] if there is a matching [Theme] in the tree that "
"has a font item with the specified [code]name[/code] and [code]theme_type[/"
"code].\n"
"See [method get_color] for details."
msgstr ""
-"如果å¯ä»¥å®žä¾‹åŒ–指定[code]class[/code]中的对象,则返回[code] true [/code],å¦åˆ™"
-"返回[code] false [/code]。"
+"如果树中存在匹é…çš„ [Theme] 且具有指定 [code]name[/code] å’Œ [code]theme_type[/"
+"code] 的字体项目,则返回 [code]true[/code]。\n"
+"有关详细信æ¯ï¼Œå‚阅 [method get_color]。"
#: doc/classes/Control.xml:448
-#, fuzzy
msgid ""
"Returns [code]true[/code] if there is a local override for a theme [Font] "
"with the specified [code]name[/code] in this [Control] node.\n"
"See [method add_font_override]."
msgstr ""
-"如果由åç§° [code]name[/code] 指定的设置存在,则返回 [code]true[/code],å¦åˆ™è¿”"
-"回 [code]false[/code]。"
+"如果在此 [Control] 节点中具有指定 [code]name[/code] 的主题 [Font] 的本地覆盖"
+"项目,则返回 [code]true[/code]。\n"
+"å‚阅[method add_font_override]。"
#: doc/classes/Control.xml:457
-#, fuzzy
msgid ""
"Returns [code]true[/code] if there is a matching [Theme] in the tree that "
"has an icon item with the specified [code]name[/code] and [code]theme_type[/"
"code].\n"
"See [method get_color] for details."
msgstr ""
-"如果å¯ä»¥å®žä¾‹åŒ–指定[code]class[/code]中的对象,则返回[code] true [/code],å¦åˆ™"
-"返回[code] false [/code]。"
+"如果树中存在匹é…çš„ [Theme] 且具有指定 [code]name[/code] å’Œ [code]theme_type[/"
+"code] 的图标项目,则返回 [code]true[/code]。\n"
+"有关详细信æ¯ï¼Œå‚阅 [method get_color]。"
#: doc/classes/Control.xml:465
-#, fuzzy
msgid ""
"Returns [code]true[/code] if there is a local override for a theme icon with "
"the specified [code]name[/code] in this [Control] node.\n"
"See [method add_icon_override]."
msgstr ""
-"如果由åç§° [code]name[/code] 指定的设置存在,则返回 [code]true[/code],å¦åˆ™è¿”"
-"回 [code]false[/code]。"
+"如果此 [Control] 节点中具有指定 [code]name[/code] 的主题图标存在本地覆盖项,"
+"则返回 [code]true[/code]。\n"
+"å‚阅 [method add_icon_override]。"
#: doc/classes/Control.xml:473
msgid ""
@@ -18755,35 +19128,35 @@ msgstr ""
"has_point(point)[/code]。"
#: doc/classes/Control.xml:482
-#, fuzzy
msgid ""
"Returns [code]true[/code] if there is a local override for a theme shader "
"with the specified [code]name[/code] in this [Control] node.\n"
"See [method add_shader_override]."
msgstr ""
-"如果由åç§° [code]name[/code] 指定的设置存在,则返回 [code]true[/code],å¦åˆ™è¿”"
-"回 [code]false[/code]。"
+"如果此 [Control] 节点中具有指定 [code]name[/code] 的主题ç€è‰²å™¨å­˜åœ¨æœ¬åœ°è¦†ç›–"
+"项,则返回 [code]true[/code]。\n"
+"å‚阅[method add_shader_override]。"
#: doc/classes/Control.xml:491
-#, fuzzy
msgid ""
"Returns [code]true[/code] if there is a matching [Theme] in the tree that "
"has a stylebox item with the specified [code]name[/code] and "
"[code]theme_type[/code].\n"
"See [method get_color] for details."
msgstr ""
-"如果å¯ä»¥å®žä¾‹åŒ–指定[code]class[/code]中的对象,则返回[code] true [/code],å¦åˆ™"
-"返回[code] false [/code]。"
+"如果树中存在匹é…çš„ [Theme] 且具有指定 [code]name[/code] å’Œ [code]theme_type[/"
+"code] çš„æ ·å¼æ¡†é¡¹ç›®ï¼Œåˆ™è¿”回 [code]true[/code]。\n"
+"有关详细信æ¯ï¼Œå‚阅 [method get_color]。"
#: doc/classes/Control.xml:499
-#, fuzzy
msgid ""
"Returns [code]true[/code] if there is a local override for a theme "
"[StyleBox] with the specified [code]name[/code] in this [Control] node.\n"
"See [method add_stylebox_override]."
msgstr ""
-"如果具有给定[code]name[/code]的[StyleBox]在此[Control]节点中具有有效的覆盖,"
-"则返回[code] true [/code]。"
+"如果在此 [Control] 节点中具有指定 [code]name[/code] 的主题 [StyleBox] 的本地"
+"覆盖项,则返回 [code]true[/code]。\n"
+"å‚阅 [method add_stylebox_override]。"
#: doc/classes/Control.xml:506
msgid ""
@@ -18844,7 +19217,6 @@ msgstr ""
"set_margins_preset]。"
#: doc/classes/Control.xml:551
-#, fuzzy
msgid ""
"Sets the anchors to a [code]preset[/code] from [enum Control.LayoutPreset] "
"enum. This is the code equivalent to using the Layout menu in the 2D "
@@ -18852,9 +19224,9 @@ msgid ""
"If [code]keep_margins[/code] is [code]true[/code], control's position will "
"also be updated."
msgstr ""
-"将锚设置为 [code] preset [/code] 从 [enum Control.LayoutPreset] 列举。这相当"
-"于在 2D 编辑器中使用布局èœå•。\n"
-"如果 [code]keep_margins[/code] 是[code]true[/code],控制的ä½ç½®ä¹Ÿå°†æ›´æ–°ã€‚"
+"将锚点设置为 [enum Control.LayoutPreset] 枚举中的 [code]preset[/code]。这是等"
+"效于在 2D 编辑器中使用布局èœå•的编ç ã€‚\n"
+"如果 [code]keep_margins[/code] 是 [code]true[/code],控件的ä½ç½®ä¹Ÿä¼šæ›´æ–°ã€‚"
#: doc/classes/Control.xml:559
msgid ""
@@ -18918,7 +19290,6 @@ msgstr ""
"[/codeblock]"
#: doc/classes/Control.xml:594
-#, fuzzy
msgid ""
"Shows the given control at the mouse pointer. A good time to call this "
"method is in [method get_drag_data]. The control must not be in the scene "
@@ -18937,13 +19308,14 @@ msgid ""
" return color\n"
"[/codeblock]"
msgstr ""
-"在鼠标指针处显示给定的控件。调用此方法的好时机在[method get_drag_data]中。该"
-"控件一定ä¸èƒ½åœ¨åœºæ™¯æ ‘中。\n"
+"在鼠标指针处显示指定的控件。调用此方法好的时机,是在 [method get_drag_data] "
+"中。控件ä¸å¾—ä½äºŽåœºæ™¯æ ‘当中。你ä¸åº”该释放控件,也ä¸åº”该在拖动æŒç»­æ—¶é—´ç»“æŸä¿ç•™"
+"对控件的引用。拖拽结æŸåŽä¼šè‡ªåŠ¨åˆ é™¤ã€‚\n"
"[codeblock]\n"
"export (Color, RGBA) var color = Color(1, 0, 0, 1)\n"
"\n"
"func get_drag_data(position):\n"
-" # Use a control that is not in the tree\n"
+" # 使用ä¸åœ¨æ ‘中的控件\n"
" var cpb = ColorPickerButton.new()\n"
" cpb.color = color\n"
" cpb.rect_size = Vector2(50, 50)\n"
@@ -18989,7 +19361,6 @@ msgstr ""
"margin_right]和[member margin_top]的设置方法。"
#: doc/classes/Control.xml:646
-#, fuzzy
msgid ""
"Sets the margins to a [code]preset[/code] from [enum Control.LayoutPreset] "
"enum. This is the code equivalent to using the Layout menu in the 2D "
@@ -19001,12 +19372,12 @@ msgid ""
"Use parameter [code]margin[/code] to determine the gap between the [Control] "
"and the edges."
msgstr ""
-"å°†[enum Control.LayoutPreset]枚举的边è·è®¾ç½®ä¸º[code]preset[/code]。这等效于在"
-"2D编辑器中使用“布局â€èœå•的代ç ã€‚\n"
-"将傿•°[code] resize_mode [/code]与[enum Control.LayoutPresetMode]中的常é‡ä¸€èµ·"
-"使用,å¯ä»¥æ›´å¥½åœ°ç¡®å®š[Control]的结果大å°ã€‚如果将æ’定大å°ä¸Žæ›´æ”¹å¤§å°çš„预设一起使"
-"用,例如[code] PRESET_LEFT_WIDE [/code]。\n"
-"ä½¿ç”¨å‚æ•°[code] margin [/code]确定[Control]和边缘之间的间隙。"
+"从 [enum Control.LayoutPreset] 枚举将边è·è®¾ç½®ä¸º [code]preset[/code]。这是等效"
+"于在 2D 编辑器中使用布局èœå•的编ç ã€‚\n"
+"ä½¿ç”¨å‚æ•° [code]resize_mode[/code] å’Œ [enum Control.LayoutPresetMode] 中的常é‡"
+"æ¥æ›´å¥½åœ°ç¡®å®š [Control] 的最终大å°ã€‚如果与更改大å°çš„预设一起使用,则常规大å°å°†"
+"被忽略,例如[code]PRESET_LEFT_WIDE[/code]。\n"
+"ä½¿ç”¨å‚æ•° [code]margin[/code] 确定 [Control] 和边缘之间的间隙。"
#: doc/classes/Control.xml:656
msgid ""
@@ -19042,14 +19413,19 @@ msgid ""
"If [code]exclusive[/code] is [code]true[/code], other controls will not "
"receive input and clicking outside this control will not close it."
msgstr ""
+"æ¨¡æ€æ˜¾ç¤ºæŽ§ä»¶ã€‚控件必须是一个å­çª—å£ã€‚æ¨¡æ€æŽ§ä»¶æ•获输入信å·ï¼Œç›´åˆ°å…³é—­æˆ–访问它们"
+"ä¹‹å¤–çš„åŒºåŸŸã€‚å½“æ¨¡æ€æŽ§ä»¶å¤±åŽ»ç„¦ç‚¹æˆ–æŒ‰ä¸‹ ESC 键时,会自动éšè—ã€‚æ¨¡æ€æŽ§ä»¶å¹¿æ³›ç”¨äºŽå¼¹"
+"å‡ºå¯¹è¯æ¡†å’Œèœå•。\n"
+"如果 [code]exclusive[/code] 为 [code]true[/code],则其他控件将ä¸ä¼šæŽ¥æ”¶è¾“入,"
+"并且在此控件外å•击ä¸ä¼šå…³é—­å®ƒã€‚"
#: doc/classes/Control.xml:688
msgid ""
"Moves the mouse cursor to [code]to_position[/code], relative to [member "
"rect_position] of this [Control]."
msgstr ""
-"将鼠标光标移动到[code]to_position[/code],相对于这个[控件]的[member "
-"rect_position]。"
+"将鼠标光标移动到 [code]to_position[/code],相对于这个控件 [Control] 的 "
+"[member rect_position]。"
#: doc/classes/Control.xml:694
msgid ""
@@ -19082,14 +19458,13 @@ msgstr ""
"更改å³è¾¹è·çš„æ›´æ–°æ–¹å¼ã€‚为了方便起è§ï¼Œå¯ä»¥ä½¿ç”¨[enum Anchor]常é‡ä¹‹ä¸€ã€‚"
#: doc/classes/Control.xml:703
-#, fuzzy
msgid ""
"Anchors the top edge of the node to the origin, the center or the end of its "
"parent control. It changes how the top margin updates when the node moves or "
"changes size. You can use one of the [enum Anchor] constants for convenience."
msgstr ""
-"将节点的顶部边缘锚定到其父控件的原点,中心或末端。它更改了节点移动或更改大å°"
-"时上边è·çš„æ›´æ–°æ–¹å¼ã€‚为了方便起è§ï¼Œå¯ä»¥ä½¿ç”¨[enum Anchor]常é‡ä¹‹ä¸€ã€‚"
+"锚定节点的顶部边缘到原点ã€ä¸­å¿ƒæˆ–其父控件的末端。当节点移动或改å˜å¤§å°æ—¶ï¼Œå®ƒå¯"
+"以改å˜é¡¶è¾¹çš„æ›´æ–°æ–¹å¼ã€‚为了便æ·ï¼Œä½ å¯ä»¥ä½¿ç”¨[enum Anchor]常数之一。"
#: doc/classes/Control.xml:706
msgid ""
@@ -19126,7 +19501,6 @@ msgstr ""
"最接近的[Control]。"
#: doc/classes/Control.xml:715
-#, fuzzy
msgid ""
"Tells Godot which node it should give keyboard focus to if the user presses "
"the right arrow on the keyboard or right on a gamepad by default. You can "
@@ -19134,10 +19508,10 @@ msgid ""
"must be a [Control]. If this property is not set, Godot will give focus to "
"the closest [Control] to the bottom of this one."
msgstr ""
-"告诉Godot,默认情况下,如果用户按下键盘上的å‘å³ç®­å¤´æˆ–æ¸¸æˆæ‰‹æŸ„上的å‘å³ç®­å¤´ï¼Œåˆ™"
-"应将焦点对准哪个节点。您å¯ä»¥é€šè¿‡ç¼–辑[code] ui_right [/code]输入æ“ä½œæ¥æ›´æ”¹é”®ã€‚"
-"该节点必须是[Control]。如果未设置此属性,则Godot会将焦点放在该控件底部最接近"
-"的[Control]。"
+"告诉Godot,如果用户按键盘上的å³é”®æˆ–é»˜è®¤çš„æ¸¸æˆæ‰‹æŸ„上的å³é”®ï¼Œå®ƒåº”该把键盘焦点给"
+"哪个节点。你å¯ä»¥é€šè¿‡ç¼–辑[code]ui_right[/code]è¾“å…¥åŠ¨ä½œæ¥æ”¹å˜è¿™ä¸ªé”®ã€‚该节点必须"
+"是一个[Control]。如果没有设置这个属性,Godot将把焦点交给离这个节点底部最近的"
+"[Control]。"
#: doc/classes/Control.xml:718
msgid ""
@@ -19153,7 +19527,6 @@ msgstr ""
"接近的[Control]。"
#: doc/classes/Control.xml:721
-#, fuzzy
msgid ""
"Tells Godot which node it should give keyboard focus to if the user presses "
"Tab on a keyboard by default. You can change the key by editing the "
@@ -19161,12 +19534,11 @@ msgid ""
"If this property is not set, Godot will select a \"best guess\" based on "
"surrounding nodes in the scene tree."
msgstr ""
-"告诉Godot,如果用户默认情况下按键盘上的[kbd] Tab [/kbd],则应将焦点对准键盘上"
-"的哪个节点。您å¯ä»¥é€šè¿‡ç¼–辑[code] ui_focus_next [/code]输入æ“ä½œæ¥æ›´æ”¹é”®ã€‚\n"
-"如果未设置此属性,则Godot将基于场景树中的周围节点选择“best guessâ€ã€‚"
+"告诉Godot,如果用户默认按键盘上的Tab键,它应该把键盘焦点给哪个节点。你å¯ä»¥é€š"
+"过编辑[code]ui_focus_next[/code]è¾“å…¥åŠ¨ä½œæ¥æ”¹å˜è¿™ä¸ªé”®ã€‚\n"
+"如果这个属性没有设置,Godot会根æ®åœºæ™¯æ ‘中的周围节点选择一个 \"最佳猜测\"。"
#: doc/classes/Control.xml:725
-#, fuzzy
msgid ""
"Tells Godot which node it should give keyboard focus to if the user presses "
"Shift+Tab on a keyboard by default. You can change the key by editing the "
@@ -19174,9 +19546,9 @@ msgid ""
"If this property is not set, Godot will select a \"best guess\" based on "
"surrounding nodes in the scene tree."
msgstr ""
-"告诉Godot,如果用户默认情况下按键盘上的[kbd] Shift + Tab [/kbd],则应将焦点对"
-"准哪个节点。您å¯ä»¥é€šè¿‡ç¼–辑[code] ui_focus_prev [/code]输入æ“ä½œæ¥æ›´æ”¹é”®ã€‚\n"
-"如果未设置此属性,则Godot将基于场景树中的周围节点选择“best guessâ€ã€‚"
+"告诉Godot,如果用户按键盘上的Shift+Tab键,它应该把键盘焦点给哪个节点,这是默"
+"认。你å¯ä»¥é€šè¿‡ç¼–辑[code]ui_focus_prev[/code]è¾“å…¥åŠ¨ä½œæ¥æ”¹å˜è¿™ä¸ªé”®ã€‚\n"
+"如果没有设置这个属性,Godot会根æ®åœºæ™¯æ ‘中的周围节点选择一个 \"最佳猜测\"。"
#: doc/classes/Control.xml:729
msgid ""
@@ -19218,6 +19590,22 @@ msgid ""
"theme.set_color(\"font_color\", \"TooltipLabel\", Color(0, 1, 1))\n"
"[/codeblock]"
msgstr ""
+"改å˜å·¥å…·æç¤ºçš„æ–‡æœ¬ã€‚当用户的鼠标光标在这个控件上åœç•™ç‰‡åˆ»ï¼Œå·¥å…·æç¤ºå°±ä¼šå‡ºçŽ°ï¼Œ"
+"å‰ææ˜¯[member mouse_filter]属性éž[constant MOUSE_FILTER_IGNORE]。你å¯ä»¥ç”¨é¡¹ç›®"
+"设置中的[code]gui/timers/tooltip_delay_sec[/code]选项改å˜å·¥å…·æç¤ºå‡ºçŽ°çš„æ—¶"
+"间。\n"
+"工具æç¤ºçš„弹出将使用默认的实现,或者你å¯ä»¥é€šè¿‡è¦†ç›–[method "
+"_make_custom_tooltip]æä¾›ä¸€ä¸ªè‡ªå®šä¹‰çš„实现。默认的工具æç¤ºåŒ…括一个[PopupPanel]"
+"å’Œ[Label],其主题属性å¯ä»¥é€šè¿‡[code]\"TooltipPanel\"[/code]å’Œ"
+"[code]\"TooltipLabel\"[/code]方法分别进行自定义。如:\n"
+"[codeblock]\n"
+"var style_box = StyleBoxFlat.new()\n"
+"style_box.set_bg_color(Color(1, 1, 0))\n"
+"style_box.set_border_width_all(2)\n"
+"# 我们在这里å‡è®¾`theme`属性已ç»è¢«äº‹å…ˆåˆ†é…了一个自定义的Theme。\n"
+"theme.set_stylebox(\"panel\", \"TooltipPanel\", style_box)\n"
+"theme.set_color(\"font_color\", \"TooltipLabel\", Color(0, 1, 1))\n"
+"[/codeblock]"
#: doc/classes/Control.xml:747
msgid ""
@@ -19226,6 +19614,9 @@ msgid ""
"handling. The viewport first hides the modal and after marks the input as "
"handled."
msgstr ""
+"å¯ç”¨å½“ä½ å…³é—­æŽ§ä»¶æ¨¡æ€æ—¶ï¼Œè¾“入是å¦ä¼ æ’­ã€‚\n"
+"如果[code]false[/code]ï¼Œåœ¨è§†çª—è¾“å…¥äº‹ä»¶å¤„ç†æ—¶åœæ­¢äº‹ä»¶å¤„ç†ã€‚视窗首先éšè—模æ€ï¼Œ"
+"之åŽå°†è¾“入标记为已处ç†ã€‚"
#: doc/classes/Control.xml:751
msgid ""
@@ -19352,7 +19743,6 @@ msgstr ""
"çš„ä½ç½®ã€‚"
#: doc/classes/Control.xml:792
-#, fuzzy
msgid ""
"The node's scale, relative to its [member rect_size]. Change this property "
"to scale the node around its [member rect_pivot_offset]. The Control's "
@@ -19369,17 +19759,17 @@ msgid ""
"[code]yield(get_tree(), \"idle_frame\")[/code] then set its [member "
"rect_scale] property."
msgstr ""
-"节点相对于其[member rect_size]的比例。更改此属性以围绕其[member "
-"rect_pivot_offset]缩放节点。控件的[member hint_tooltip]ä¹Ÿä¼šæ ¹æ®æ­¤å€¼è¿›è¡Œç¼©"
-"放。\n"
-"[b]注æ„:[/b]此属性主è¦ç”¨äºŽåŠ¨ç”»ç›®çš„ã€‚ç¼©æ”¾æŽ§ä»¶æ—¶ï¼ŒæŽ§ä»¶å†…çš„æ–‡æœ¬å°†çœ‹èµ·æ¥åƒç´ åŒ–或"
-"模糊。è¦åœ¨æ‚¨çš„项目中支æŒå¤šç§åˆ†è¾¨çŽ‡ï¼Œè¯·ä½¿ç”¨[url = https://docs.godotengine."
-"org/zh_CN/latest/tutorials/viewports/multiple_resolutions."
-"html]documentation[/ url]ä¸­æ‰€è¿°çš„é€‚å½“è§†å£æ‹‰ä¼¸æ¨¡å¼åˆ†åˆ«ç¼©æ”¾æŽ§ä»¶ã€‚\n"
-"[b]注æ„:[/b]如果控制节点是[Container]节点的å­çº§ï¼Œåˆ™åœ¨åœºæ™¯è¢«å®žä¾‹åŒ–时,比例将"
-"é‡ç½®ä¸º[code] Vector2(1, 1)[/code]。è¦è®¾ç½®æŽ§ä»¶çš„缩放比例,请使用[code] yield "
-"(get_tree(), \"idle_frame\")[/code]等待一帧,然åŽè®¾ç½®å…¶[member rect_scale]属"
-"性。"
+"节点的缩放,相对于其[member rect_size]。改å˜è¿™ä¸ªå±žæ€§å¯ä»¥ä½¿èŠ‚ç‚¹å›´ç»•å®ƒçš„"
+"[member rect_pivot_offset]缩放。控件的[member hint_tooltip]也将根æ®è¿™ä¸ªå€¼è¿›è¡Œ"
+"缩放。\n"
+"[b]注æ„:[/b] 这个属性主è¦ç”¨äºŽåŠ¨ç”»ç”¨é€”ã€‚å½“æŽ§ä»¶è¢«ç¼©æ”¾æ—¶ï¼ŒæŽ§ä»¶å†…çš„æ–‡æœ¬å°†çœ‹èµ·æ¥"
+"是åƒç´ åŒ–或模糊的。è¦åœ¨ä½ çš„项目支æŒå¤šç§åˆ†è¾¨çŽ‡ï¼Œè¯·ä½¿ç”¨[url=https://docs."
+"godotengine.org/zh_CN/stable/tutorials/viewports/multiple_resolutions.html]æ–‡"
+"æ¡£[/url]中æè¿°çš„åˆé€‚的视窗拉伸模å¼ï¼Œè€Œä¸æ˜¯å•独缩放控件。\n"
+"[b]注æ„:[/b] 如果控件节点是[Container]节点的一个å­èŠ‚ç‚¹ï¼Œå½“åœºæ™¯å®žä¾‹åŒ–æ—¶ï¼Œç¼©æ”¾"
+"将被é‡ç½®ä¸º[code]Vector2(1, 1)[/code]。è¦åœ¨å®žä¾‹åŒ–时设置控件的缩放,使用"
+"[code]yield(get_tree(), \"idle_frame\")[/code]等待一帧,然åŽè®¾ç½®å…¶[member "
+"rect_scale]属性。"
#: doc/classes/Control.xml:797
msgid ""
@@ -19440,9 +19830,8 @@ msgid "Emitted when the node's minimum size changes."
msgstr "当节点的最å°å¤§å°æ›´æ”¹æ—¶å‘出。"
#: doc/classes/Control.xml:836
-#, fuzzy
msgid "Emitted when a modal [Control] is closed. See [method show_modal]."
-msgstr "按下自定义按钮时å‘出。 å‚阅[方法add_button]。"
+msgstr "å½“æ¨¡æ€æŽ§ä»¶[Control]被关闭时触å‘。å‚阅[method show_modal]。"
#: doc/classes/Control.xml:841
msgid ""
@@ -19453,6 +19842,11 @@ msgid ""
"at least until the mouse is moved to reach the parent's [code]Rect[/code] "
"area."
msgstr ""
+"当鼠标进入控件的[code]Rect[/code]区域时触å‘,åªè¦å…¶[member mouse_filter]å…许"
+"事件到达。\n"
+"[b]注æ„:[/b] 如果鼠标在进入父控件的[code]Rect[/code]区域之å‰è¿›å…¥å­[Control]"
+"节点,在鼠标移动到父控件的[code]Rect[/code]区域之å‰ï¼Œä¸ä¼šå‘出[signal "
+"mouse_entered]。"
#: doc/classes/Control.xml:847
msgid ""
@@ -19462,6 +19856,10 @@ msgid ""
"child [Control] node, even if the mouse cursor is still inside the parent's "
"[code]Rect[/code] area."
msgstr ""
+"当鼠标离开控件的[code]Rect[/code]区域时触å‘,åªè¦å…¶[member mouse_filter]å…许"
+"事件到达。\n"
+"[b]注æ„:[/b] 如果鼠标进入一个å­[Control]节点,å³ä½¿é¼ æ ‡å…‰æ ‡ä»ç„¶åœ¨çˆ¶"
+"[code]Rect[/code]区域内,[signal mouse_exited]也将触å‘。"
#: doc/classes/Control.xml:853
msgid "Emitted when the control changes size."
@@ -19477,20 +19875,20 @@ msgstr ""
#: doc/classes/Control.xml:864
msgid "The node cannot grab focus. Use with [member focus_mode]."
-msgstr "该节点无法获å–焦点。与[member focus_mode]一起使用。"
+msgstr "该节点无法获å–焦点。在 [member focus_mode] 中使用。"
#: doc/classes/Control.xml:867
msgid ""
"The node can only grab focus on mouse clicks. Use with [member focus_mode]."
-msgstr "该节点åªèƒ½æŠ“ä½é¼ æ ‡å•击的焦点。与[member focus_mode]一起使用。"
+msgstr "该节点åªèƒ½é€šè¿‡é¼ æ ‡ç‚¹å‡»èŽ·å–焦点。在 [member focus_mode] 中使用。"
#: doc/classes/Control.xml:870
msgid ""
"The node can grab focus on mouse click or using the arrows and the Tab keys "
"on the keyboard. Use with [member focus_mode]."
msgstr ""
-"该节点å¯ä»¥é›†ä¸­ç²¾åŠ›äºŽé¼ æ ‡å•击或使用键盘上的箭头和Tab键。与[member focus_mode]"
-"一起使用。"
+"该节点å¯ä»¥é€šè¿‡ä½¿ç”¨é¼ æ ‡ç‚¹å‡»æˆ–使用键盘上的箭头和 Tab 键获å–焦点。在 [member "
+"focus_mode] 中使用。"
#: doc/classes/Control.xml:873
msgid ""
@@ -19514,18 +19912,17 @@ msgid "Sent when the node loses focus."
msgstr "当节点失去焦点时å‘é€ã€‚"
#: doc/classes/Control.xml:888
-#, fuzzy
msgid ""
"Sent when the node's [member theme] changes, right before Godot redraws the "
"control. Happens when you call one of the [code]add_*_override[/code] "
"methods."
msgstr ""
-"当节点的[member theme]更改时å‘é€ï¼Œå°±åœ¨Godoté‡ç”»æŽ§ä»¶ä¹‹å‰ã€‚调用[code] "
-"add_theme _ * _ override [/code]方法之一时å‘生。"
+"当节点的 [member theme] æ”¹å˜æ—¶ï¼Œå°±åœ¨Godoté‡ç»˜æŽ§ä»¶ä¹‹å‰å‘é€ã€‚当你调用"
+"[code]add_*_override[/code]方法之一时å‘生。"
#: doc/classes/Control.xml:891
msgid "Sent when an open modal dialog closes. See [method show_modal]."
-msgstr ""
+msgstr "当一个打开的模æ€å¯¹è¯æ¡†å…³é—­æ—¶å‘é€ã€‚å‚阅[method show_modal]。"
#: doc/classes/Control.xml:894
msgid ""
@@ -19886,9 +20283,9 @@ msgid ""
"automatically marked as handled, and they will not propagate further to "
"other controls. This also results in blocking signals in other controls."
msgstr ""
-"如果å•击,控件将通过[method_gui_input]接收鼠标按钮输入事件。并且控件将接收"
-"[signal mouse_entered]å’Œ[signal mouse_exited]ä¿¡å·ã€‚这些事件将自动标记为已处"
-"ç†ï¼Œå¹¶ä¸”ä¸ä¼šè¿›ä¸€æ­¥ä¼ æ’­åˆ°å…¶ä»–控件。这也会导致其他控件中的信å·é˜»å¡žã€‚"
+"被点击时,控件将通过 [method _gui_input] 收到鼠标按钮输入事件。控件能够接收"
+"到 [signal mouse_entered] å’Œ [signal mouse_exited] ä¿¡å·ã€‚这些事件将自动被标记"
+"为已处ç†ï¼Œä¸ä¼šè¿›ä¸€æ­¥ä¼ æ’­åˆ°å…¶ä»–控件,因此相关的信å·ä¹Ÿä¸ä¼šåœ¨å…¶ä»–控件中触å‘。"
#: doc/classes/Control.xml:1029
msgid ""
@@ -19901,11 +20298,11 @@ msgid ""
"all, the event will still be handled automatically, so unhandled input will "
"not be fired."
msgstr ""
-"如果å•击,控件将通过[method_gui_input]接收鼠标按钮输入事件。并且控件将接收"
-"[signal mouse_entered]å’Œ[signal mouse_exited]ä¿¡å·ã€‚如果此控件未处ç†äº‹ä»¶ï¼Œåˆ™å°†"
-"è€ƒè™‘çˆ¶æŽ§ä»¶ï¼ˆå¦‚æžœæœ‰ï¼‰ï¼Œä¾æ­¤ç±»æŽ¨ï¼Œç›´åˆ°ä¸å†æœ‰å¯èƒ½å¤„ç†å®ƒçš„父控件为止。这也å…许信"
-"å·åœ¨å…¶ä»–控件中触å‘。å³ä½¿æ ¹æœ¬æ²¡æœ‰æŽ§ä»¶å¤„ç†è¿‡è¯¥äº‹ä»¶ï¼Œè¯¥äº‹ä»¶ä»å°†è‡ªåЍ处ç†ï¼Œå› æ­¤ä¸"
-"ä¼šè§¦å‘æœªå¤„ç†çš„输入。"
+"被点击时,控件将通过 [method _gui_input] 收到鼠标按钮输入事件。控件能够接收 "
+"[signal mouse_entered] å’Œ [signal mouse_exited] ä¿¡å·ã€‚如果此控件未处ç†äº‹ä»¶ï¼Œ"
+"则将考虑其父控件(如果有的è¯ï¼‰ï¼Œå¹¶ä¾æ­¤ç±»æŽ¨ï¼Œç›´åˆ°ä¸å†æœ‰å¯èƒ½å¤„ç†å®ƒçš„父控件为"
+"止。因此,相关的信å·å¯ä»¥åœ¨å…¶ä»–控件中触å‘。å³ä½¿æ ¹æœ¬æ²¡æœ‰æŽ§ä»¶å¤„ç†è¿‡è¯¥äº‹ä»¶ï¼Œè¯¥äº‹"
+"ä»¶ä»å°†è¢«è‡ªåЍ处ç†ï¼Œå› æ­¤ä¸ä¼šè§¦å‘未处ç†çš„输入。"
#: doc/classes/Control.xml:1032
msgid ""
@@ -19915,9 +20312,9 @@ msgid ""
"receiving these events or firing the signals. Ignored events will not be "
"handled automatically."
msgstr ""
-"控件将ä¸ä¼šé€šè¿‡[method_gui_input]接收鼠标按钮输入事件。该控件也ä¸ä¼šæŽ¥æ”¶"
-"[signal mouse_entered]或[signal mouse_exited]ä¿¡å·ã€‚è¿™ä¸ä¼šé˜»æ­¢å…¶ä»–控件接收这些"
-"事件或触å‘ä¿¡å·ã€‚忽略的事件将ä¸ä¼šè‡ªåЍ处ç†ã€‚"
+"该控件ä¸ä¼šé€šè¿‡ [method _gui_input] 收到鼠标按钮输入事件,也ä¸ä¼šæŽ¥æ”¶åˆ° "
+"[signal mouse_entered] å’Œ [signal mouse_exited] ä¿¡å·ã€‚è¿™ä¸ä¼šé˜»æ­¢å…¶ä»–控件接收"
+"这些事件或触å‘ä¿¡å·ã€‚被忽略的事件将ä¸ä¼šè¢«è‡ªåЍ处ç†ã€‚"
#: doc/classes/Control.xml:1035
msgid ""
@@ -19950,9 +20347,9 @@ msgid ""
"variables, like [member anchor_left]. To change all 4 anchors at once, use "
"[method set_anchors_preset]."
msgstr ""
-"å°†4个锚点的一侧之一对é½åˆ°èŠ‚ç‚¹çš„[code] Rect [/code]的左上角。与[code] anchor "
-"_ * [/code]æˆå‘˜å˜é‡ä¹‹ä¸€ä¸€èµ·ä½¿ç”¨ï¼Œä¾‹å¦‚[member anchor_left]。è¦ä¸€æ¬¡æ›´æ”¹æ‰€æœ‰4个"
-"锚点,请使用[method set_anchors_preset]。"
+"å°† 4 个锚点的æŸä¸€ä¾§å¸é™„到节点的 [code]Rect[/code] 的左上角。在 "
+"[code]anchor_*[/code] æˆå‘˜å˜é‡ä¸­ä½¿ç”¨ï¼Œä¾‹å¦‚ [member anchor_left]。è¦ä¸€æ¬¡æ›´æ”¹å…¨"
+"部 4 个锚点,请使用 [method set_anchors_preset]。"
#: doc/classes/Control.xml:1047
msgid ""
@@ -19961,19 +20358,18 @@ msgid ""
"member variables, like [member anchor_left]. To change all 4 anchors at "
"once, use [method set_anchors_preset]."
msgstr ""
-"å°†4ä¸ªé”šç‚¹çš„ä¸€ä¾§ä¹‹ä¸€æ•æ‰åˆ°å³ä¸‹è§’节点[code] Rect [/code]的末端。与[code] "
-"anchor _ * [/code]æˆå‘˜å˜é‡ä¹‹ä¸€ä¸€èµ·ä½¿ç”¨ï¼Œä¾‹å¦‚[member anchor_left]。è¦ä¸€æ¬¡æ›´æ”¹"
-"所有4个锚点,请使用[method set_anchors_preset]。"
+"å°† 4 个锚点的æŸä¸€ä¾§å¸é™„到节点的 [code]Rect[/code] çš„å³ä¸‹è§’。在 "
+"[code]anchor_*[/code] æˆå‘˜å˜é‡ä¸­ä½¿ç”¨ï¼Œä¾‹å¦‚ [member anchor_left]。è¦ä¸€æ¬¡æ›´æ”¹å…¨"
+"部 4 个锚点,请使用 [method set_anchors_preset]。"
#: doc/classes/ConvexPolygonShape.xml:4
msgid "Convex polygon shape for 3D physics."
msgstr "用于3D物ç†çš„凸多边形形状。"
#: doc/classes/ConvexPolygonShape.xml:7
-#, fuzzy
msgid ""
"Convex polygon shape resource, which can be added to a [PhysicsBody] or area."
-msgstr "凸多边形形状资æºï¼Œå¯ä»¥å°†å…¶æ·»åŠ åˆ°[PhysicsBody3D]或区域中。"
+msgstr "凸多边形形状资æºï¼Œå¯ä»¥æ·»åŠ åˆ°[PhysicsBody]或area区域。"
#: doc/classes/ConvexPolygonShape.xml:16
msgid "The list of 3D points forming the convex polygon shape."
@@ -20002,14 +20398,13 @@ msgstr ""
"以加快碰撞检测的速度。"
#: doc/classes/ConvexPolygonShape2D.xml:17
-#, fuzzy
msgid ""
"Based on the set of points provided, this creates and assigns the [member "
"points] property using the convex hull algorithm. Removing all unneeded "
"points. See [method Geometry.convex_hull_2d] for details."
msgstr ""
-"基于æä¾›çš„点集,这将使用凸包算法创建并分é…[member points]属性。删除所有ä¸éœ€è¦"
-"的点。有关详细信æ¯ï¼Œè¯·å‚阅[method Geometry2D.convex_hull]。"
+"基于所æä¾›ç‚¹çš„集åˆï¼Œä½¿ç”¨å‡¸åŒ…ç®—æ³•åˆ›å»ºå’Œåˆ†é… [member points]属性。删除所有ä¸éœ€"
+"è¦çš„点。å‚阅[method Geometry.convex_hull_2d]。"
#: doc/classes/ConvexPolygonShape2D.xml:23
msgid ""
@@ -20022,7 +20417,6 @@ msgid "CPU-based 3D particle emitter."
msgstr "基于CPUçš„3Dç²’å­å‘射器。"
#: doc/classes/CPUParticles.xml:7
-#, fuzzy
msgid ""
"CPU-based 3D particle node used to create a variety of particle systems and "
"effects.\n"
@@ -20032,16 +20426,15 @@ msgid ""
"and doesn't need to be configured by the user."
msgstr ""
"基于CPUçš„3Dç²’å­èŠ‚ç‚¹ï¼Œç”¨äºŽåˆ›å»ºå„ç§ç²’å­ç³»ç»Ÿå’Œæ•ˆæžœã€‚\n"
-"å¦è¯·å‚阅[GPUParticles3D],它æä¾›ä¸Žç¡¬ä»¶åŠ é€Ÿç›¸åŒçš„功能,但å¯èƒ½æ— æ³•在较旧的设备"
-"上è¿è¡Œã€‚"
+"å‚阅[Particles],它是以硬件加速æä¾›ç›¸åŒçš„功能,但å¯èƒ½æ— æ³•在旧设备上è¿è¡Œã€‚\n"
+"[b]注æ„:[/b] 与[Particles]ä¸åŒï¼Œå…¶å¯è§æ€§çŸ©å½¢æ˜¯å³æ—¶ç”Ÿæˆçš„,ä¸éœ€è¦ç”¨æˆ·é…置。"
#: doc/classes/CPUParticles.xml:18
-#, fuzzy
msgid ""
"Sets this node's properties to match a given [Particles] node with an "
"assigned [ParticlesMaterial]."
msgstr ""
-"设置此节点的属性,以使给定的[GPUParticles2D]节点与分é…çš„[ParticlesMaterial]匹"
+"设置此节点的属性,以将给定的 [Particles] 节点与指定的 [ParticlesMaterial] 匹"
"é…。"
#: doc/classes/CPUParticles.xml:25 doc/classes/CPUParticles2D.xml:26
@@ -20060,7 +20453,7 @@ msgstr "返回[enum Parameter]æŒ‡å®šçš„å‚æ•°çš„éšæœºæ€§ç³»æ•°ã€‚"
#: doc/classes/CPUParticles.xml:46 doc/classes/CPUParticles2D.xml:47
msgid ""
"Returns the enabled state of the given flag (see [enum Flags] for options)."
-msgstr "返回给定标志的å¯ç”¨çжæ€ï¼ˆæœ‰å…³é€‰é¡¹ï¼Œè¯·å‚阅[枚举标志])。"
+msgstr "返回给定标志的å¯ç”¨çжæ€ï¼ˆæœ‰å…³é€‰é¡¹ï¼Œè¯·å‚阅[enum Flags])。"
#: doc/classes/CPUParticles.xml:52 doc/classes/CPUParticles2D.xml:53
msgid "Restarts the particle emitter."
@@ -20081,7 +20474,7 @@ msgstr "设置[enum Parameter]æŒ‡å®šçš„å‚æ•°çš„éšæœºæ€§å› å­ã€‚"
#: doc/classes/CPUParticles.xml:84 doc/classes/CPUParticles2D.xml:85
msgid "Enables or disables the given flag (see [enum Flags] for options)."
-msgstr "å¯ç”¨æˆ–ç¦ç”¨ç»™å®šæ ‡å¿—(有关选项,请å‚阅[枚举标志])。"
+msgstr "å¯ç”¨æˆ–ç¦ç”¨ç»™å®šæ ‡å¿—(有关选项,请å‚阅[enum Flags])。"
#: doc/classes/CPUParticles.xml:90 doc/classes/CPUParticles2D.xml:91
#: doc/classes/Particles.xml:47 doc/classes/Particles2D.xml:33
@@ -20092,6 +20485,9 @@ msgid ""
"therefore removing all particles that were already emitted before changing "
"[member amount]."
msgstr ""
+"在一个å‘å°„å‘¨æœŸå†…æŽ’æ”¾çš„ç²’å­æ•°ï¼ˆå¯¹åº”于[member lifetime])。\n"
+"[b]注æ„:[/b]改å˜[member amount]å°†é‡ç½®ç²’å­å‘射,因此,在改å˜[member amount]之"
+"å‰å·²ç»æŽ’放的所有粒å­å°†è¢«ç§»é™¤ã€‚"
#: doc/classes/CPUParticles.xml:94 doc/classes/CPUParticles2D.xml:95
msgid "Initial rotation applied to each particle, in degrees."
@@ -20142,7 +20538,7 @@ msgstr "ç²’å­åŠ¨ç”»é€Ÿåº¦ã€‚"
#: doc/classes/CPUParticles.xml:124 doc/classes/CPUParticles2D.xml:125
msgid "Each particle's animation speed will vary along this [Curve]."
-msgstr "æ¯ä¸ªç²’å­çš„动画速度将沿此[曲线]å˜åŒ–。"
+msgstr "æ¯ä¸ªç²’å­çš„动画速度将沿此[Curve]å˜åŒ–。"
#: doc/classes/CPUParticles.xml:127 doc/classes/CPUParticles2D.xml:128
#: doc/classes/ParticlesMaterial.xml:112
@@ -20150,22 +20546,21 @@ msgid "Animation speed randomness ratio."
msgstr "åŠ¨ç”»é€Ÿåº¦éšæœºçŽ‡ã€‚"
#: doc/classes/CPUParticles.xml:130
-#, fuzzy
msgid ""
"Each particle's initial color. To have particle display color in a "
"[SpatialMaterial] make sure to set [member SpatialMaterial."
"vertex_color_use_as_albedo] to [code]true[/code]."
msgstr ""
-"æ¯ä¸ªç²’å­çš„åˆå§‹é¢œè‰²ã€‚如果[GPUParticles2D]çš„[code]texture[/code]被定义,它将乘"
-"以这个颜色。è¦è®©ç²’å­åœ¨[BaseMaterial3D]中显示颜色,请确ä¿è®¾ç½®[member "
-"BaseMaterial3D]。vertex_color_use_as_albedo] [code]true[/code]。"
+"æ¯ä¸ªç²’å­çš„åˆå§‹é¢œè‰²ã€‚为了让粒å­åœ¨[SpatialMaterial]中显示颜色,请确ä¿å°†[member "
+"SpatialMaterial.vertex_color_use_as_albedo]设置为[code]true[/code]。"
#: doc/classes/CPUParticles.xml:133 doc/classes/ParticlesMaterial.xml:118
-#, fuzzy
msgid ""
"Each particle's color will vary along this [GradientTexture] over its "
"lifetime (multiplied with [member color])."
-msgstr "æ¯ä¸ªç²’å­çš„颜色将沿ç€è¿™ä¸ª[GradientTexture]å˜åŒ–。"
+msgstr ""
+"æ¯ä¸ªç²’å­çš„颜色将在其生命周期内éšç€è¿™ä¸ª[GradientTexture]å˜åŒ–,å³ä¸Ž[member "
+"color]相乘。"
#: doc/classes/CPUParticles.xml:136 doc/classes/CPUParticles2D.xml:137
#: doc/classes/ParticlesMaterial.xml:121
@@ -20221,32 +20616,28 @@ msgstr ""
"EMISSION_SHAPE_DIRECTED_POINTS]时产生粒å­çš„åˆå§‹ä½ç½®ã€‚"
#: doc/classes/CPUParticles.xml:163
-#, fuzzy
msgid ""
"The axis for the ring shaped emitter when using [constant "
"EMISSION_SHAPE_RING]."
-msgstr "设置使用[constant EMISSION_SHAPE_DIRECTED_POINTS]æ—¶ç²’å­å‘射的方å‘。"
+msgstr "使用[constant EMISSION_SHAPE_RING]时,环形å‘射器的轴。"
#: doc/classes/CPUParticles.xml:166
-#, fuzzy
msgid ""
"The height for the ring shaped emitter when using [constant "
"EMISSION_SHAPE_RING]."
-msgstr "设置使用[constant EMISSION_SHAPE_DIRECTED_POINTS]æ—¶ç²’å­å‘射的方å‘。"
+msgstr "使用[constant EMISSION_SHAPE_RING]时,环形å‘射器的高度。"
#: doc/classes/CPUParticles.xml:169
-#, fuzzy
msgid ""
"The inner radius for the ring shaped emitter when using [constant "
"EMISSION_SHAPE_RING]."
-msgstr "设置使用[constant EMISSION_SHAPE_DIRECTED_POINTS]æ—¶ç²’å­å‘射的方å‘。"
+msgstr "使用[constant EMISSION_SHAPE_RING]时,环形å‘射器的内åŠå¾„。"
#: doc/classes/CPUParticles.xml:172
-#, fuzzy
msgid ""
"The radius for the ring shaped emitter when using [constant "
"EMISSION_SHAPE_RING]."
-msgstr "设置使用[constant EMISSION_SHAPE_DIRECTED_POINTS]æ—¶ç²’å­å‘射的方å‘。"
+msgstr "使用[constant EMISSION_SHAPE_RING]时,环形å‘射器的åŠå¾„。"
#: doc/classes/CPUParticles.xml:175 doc/classes/CPUParticles2D.xml:164
msgid ""
@@ -20347,9 +20738,8 @@ msgstr "åˆå§‹é€Ÿåº¦éšæœºçŽ‡ã€‚"
#: doc/classes/CPUParticles.xml:223 doc/classes/CPUParticles2D.xml:203
#: doc/classes/Particles.xml:81 doc/classes/Particles2D.xml:52
-#, fuzzy
msgid "The amount of time each particle will exist (in seconds)."
-msgstr "æ¯ä¸ªç²’å­å°†å­˜åœ¨çš„æ—¶é—´é‡ã€‚"
+msgstr "æ¯ä¸ªç²’å­å­˜åœ¨çš„æ—¶é—´ï¼Œä»¥ç§’为å•ä½ã€‚"
#: doc/classes/CPUParticles.xml:226 doc/classes/CPUParticles2D.xml:206
#: doc/classes/ParticlesMaterial.xml:196
@@ -20656,9 +21046,8 @@ msgstr ""
"调制。"
#: doc/classes/CPUParticles.xml:373 doc/classes/ParticlesMaterial.xml:325
-#, fuzzy
msgid "Particles will be emitted in a ring or cylinder."
-msgstr "ç²’å­å°†åœ¨çŸ©å½¢åŒºåŸŸå†…å‘射。"
+msgstr "ç²’å­å°†ä»¥çŽ¯å½¢æˆ–åœ†æŸ±çš„å½¢å¼å‘射出æ¥ã€‚"
#: doc/classes/CPUParticles.xml:376 doc/classes/CPUParticles2D.xml:353
#: doc/classes/ParticlesMaterial.xml:328
@@ -20670,7 +21059,6 @@ msgid "CPU-based 2D particle emitter."
msgstr "基于CPUçš„2Dç²’å­å‘射器。"
#: doc/classes/CPUParticles2D.xml:7
-#, fuzzy
msgid ""
"CPU-based 2D particle node used to create a variety of particle systems and "
"effects.\n"
@@ -20680,23 +21068,23 @@ msgid ""
"fly and doesn't need to be configured by the user."
msgstr ""
"基于CPUçš„2Dç²’å­èŠ‚ç‚¹ï¼Œç”¨äºŽåˆ›å»ºå„ç§ç²’å­ç³»ç»Ÿå’Œæ•ˆæžœã€‚\n"
-"å¦è¯·å‚阅[GPUParticles2D],它æä¾›ä¸Žç¡¬ä»¶åŠ é€Ÿç›¸åŒçš„功能,但å¯èƒ½æ— æ³•在较旧的设备"
-"上è¿è¡Œã€‚"
+"å‚阅[Particles2D],它通过硬件加速æä¾›ç›¸åŒçš„功能,但å¯èƒ½æ— æ³•在旧设备上è¿è¡Œã€‚\n"
+"[b]注æ„:[/b] 其与[Particles2D]ä¸åŒï¼Œå¯è§æ€§çŸ©å½¢æ˜¯å³æ—¶ç”Ÿæˆçš„,ä¸éœ€è¦ç”¨æˆ·é…置。"
#: doc/classes/CPUParticles2D.xml:12 doc/classes/Particles2D.xml:14
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/2d/particle_systems_2d.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/2d/particle_systems_2d.html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/2d/particle_systems_2d."
+"html"
#: doc/classes/CPUParticles2D.xml:19
-#, fuzzy
msgid ""
"Sets this node's properties to match a given [Particles2D] node with an "
"assigned [ParticlesMaterial]."
msgstr ""
-"设置此节点的属性,以使给定的[GPUParticles2D]节点与分é…çš„[ParticlesMaterial]匹"
-"é…。"
+"设置此节点的属性,以将给定的 [Particles2D] 节点与指定的 [ParticlesMaterial] "
+"匹é…。"
#: doc/classes/CPUParticles2D.xml:131
msgid ""
@@ -20705,11 +21093,10 @@ msgid ""
msgstr "æ¯ä¸ªç²’å­çš„åˆå§‹é¢œè‰²ã€‚如果定义了[member 纹ç†],它将乘以该颜色。"
#: doc/classes/CPUParticles2D.xml:134
-#, fuzzy
msgid ""
"Each particle's color will vary along this [Gradient] (multiplied with "
"[member color])."
-msgstr "æ¯ä¸ªç²’å­çš„颜色将沿ç€è¿™ä¸ª[GradientTexture]å˜åŒ–。"
+msgstr "æ¯ä¸ªç²’å­çš„颜色将éšç€è¿™ä¸ª[Gradient]å˜åŒ–,å³ä¸Ž[member color]相乘。"
#: doc/classes/CPUParticles2D.xml:161
msgid ""
@@ -20871,35 +21258,35 @@ msgid ""
"string-comparison-with-double-hmac-strategy]this blog post[/url] for more "
"information."
msgstr ""
+"比较两个[PoolByteArray]是å¦ç›¸ç­‰ï¼Œè€Œä¸æ³„露时间信æ¯ï¼Œä»¥é˜²æ­¢è®¡æ—¶æ”»å‡»ã€‚\n"
+"更多信æ¯å‚阅[url=https://paragonie.com/blog/2015/11/preventing-timing-"
+"attacks-on-string-comparison-with-double-hmac-strategy]è¿™ç¯‡åšæ–‡[/url]。"
#: doc/classes/Crypto.xml:56
-#, fuzzy
msgid ""
"Decrypt the given [code]ciphertext[/code] with the provided private "
"[code]key[/code].\n"
"[b]Note:[/b] The maximum size of accepted ciphertext is limited by the key "
"size."
msgstr ""
-"用æä¾›çš„ç§æœ‰[code]key[/code]解密给定的[code]ciphertext[/code]。\n"
-"[b]注[/b]ï¼šå¯æŽ¥å—的密文的最大大å°å—密钥大å°é™åˆ¶ã€‚"
+"用æä¾›çš„ç§äºº[code]key[/code]解密给定的[code]ciphertext[/code]。\n"
+"[b]注æ„:[/b]所接å—çš„å¯†ç æ–‡æœ¬çš„æœ€å¤§å°ºå¯¸å—到密钥大å°é™åˆ¶ã€‚"
#: doc/classes/Crypto.xml:65
-#, fuzzy
msgid ""
"Encrypt the given [code]plaintext[/code] with the provided public [code]key[/"
"code].\n"
"[b]Note:[/b] The maximum size of accepted plaintext is limited by the key "
"size."
msgstr ""
-"使用æä¾›çš„公共[code]key[/code]对给定的[code]plaintext[/code]进行加密。\n"
-"[b]注[/b]ï¼šå¯æŽ¥å—的明文的最大大å°å—密钥大å°é™åˆ¶ã€‚"
+"用æä¾›çš„公钥 [code]key[/code] 加密给定的[code]plaintext[/code]。\n"
+"[b]注æ„:[/b]接å—的明文的最大尺寸å—到密钥大å°çš„é™åˆ¶ã€‚"
#: doc/classes/Crypto.xml:73
-#, fuzzy
msgid ""
"Generates a [PoolByteArray] of cryptographically secure random bytes with "
"given [code]size[/code]."
-msgstr "生æˆå…·æœ‰ç»™å®š[code]size[/code]çš„åŠ å¯†å®‰å…¨éšæœºå­—节的[PackedByteArray]。"
+msgstr "生æˆå…·æœ‰ç»™å®š [code]size[/code] çš„åŠ å¯†å®‰å…¨éšæœºå­—节的 [PoolByteArray]。"
#: doc/classes/Crypto.xml:80
msgid ""
@@ -20953,6 +21340,11 @@ msgid ""
"Currently, only [constant HashingContext.HASH_SHA256] and [constant "
"HashingContext.HASH_SHA1] are supported."
msgstr ""
+"使用 [code]key[/code] ç”Ÿæˆ [code]msg[/code] çš„ [url=https://en.wikipedia.org/"
+"wiki/HMAC]HMAC[/url] 摘è¦ã€‚ [code]hash_type[/code] 傿•°æ˜¯ç”¨äºŽå†…部和外部哈希的"
+"哈希算法。\n"
+"ç›®å‰ä»…æ”¯æŒ [constant HashingContext.HASH_SHA256] å’Œ [constant HashingContext."
+"HASH_SHA1]。"
#: doc/classes/Crypto.xml:117
msgid ""
@@ -20997,17 +21389,16 @@ msgstr ""
"如果此CryptoKeyä»…å…·æœ‰å…¬å…±éƒ¨åˆ†ï¼Œè€Œæ²¡æœ‰ç§æœ‰éƒ¨åˆ†ï¼Œåˆ™è¿”回[code] true [/code]。"
#: doc/classes/CryptoKey.xml:25
-#, fuzzy
msgid ""
"Loads a key from [code]path[/code]. If [code]public_only[/code] is "
"[code]true[/code], only the public key will be loaded.\n"
"[b]Note:[/b] [code]path[/code] should be a \"*.pub\" file if "
"[code]public_only[/code] is [code]true[/code], a \"*.key\" file otherwise."
msgstr ""
-"从[code]path[/code]加载密钥。如果[code] public_only [/code]为[code] true [/"
-"code],则仅会加载公共密钥。\n"
-"[b]注释[/b]:如果[code] public_only [/code]为[code] true [/code],则[code] "
-"path [/code]应为“ * .pubâ€æ–‡ä»¶ï¼Œå¦åˆ™ä¸ºâ€œ * .keyâ€æ–‡ä»¶ã€‚"
+"从[code]path[/code]加载一个密钥。如果[code]public_only[/code]是[code]true[/"
+"code],将åªåŠ è½½å…¬é’¥ã€‚\n"
+"[b]注æ„:[/b] 如果[code]public_only[/code]是[code]true[/code],[code]path[/"
+"code]应该是一个 \"*.pub\" 文件,å¦åˆ™æ˜¯ \"*.key\" 文件。"
#: doc/classes/CryptoKey.xml:34
msgid ""
@@ -21018,17 +21409,16 @@ msgstr ""
"true [/code],则仅会加载公共密钥。"
#: doc/classes/CryptoKey.xml:42
-#, fuzzy
msgid ""
"Saves a key to the given [code]path[/code]. If [code]public_only[/code] is "
"[code]true[/code], only the public key will be saved.\n"
"[b]Note:[/b] [code]path[/code] should be a \"*.pub\" file if "
"[code]public_only[/code] is [code]true[/code], a \"*.key\" file otherwise."
msgstr ""
-"将密钥ä¿å­˜åˆ°ç»™å®šçš„[code]path[/code]。如果[code] public_only [/code]为[code] "
-"true [/code],则仅会ä¿å­˜å…¬é’¥ã€‚\n"
-"[b]注æ„[/b]:如果[code] public_only [/code]为[code] true [/code],则[code] "
-"path [/code]应为“ * .pubâ€æ–‡ä»¶ï¼Œå¦åˆ™ä¸ºâ€œ * .keyâ€æ–‡ä»¶ã€‚"
+"将密钥ä¿å­˜åˆ°ç»™å®šçš„ [code]path[/code]。如果 [code]public_only[/code] 为 "
+"[code]true[/code],则åªä¼šä¿å­˜å…¬é’¥ã€‚\n"
+"[b]注æ„:[/b]如果[code]public_only[/code]是[code]true[/code],则[code]path[/"
+"code]应该是一个\"*.pub\"文件,å¦åˆ™æ˜¯\"*.key\"文件。"
#: doc/classes/CryptoKey.xml:50
msgid ""
@@ -21067,7 +21457,6 @@ msgid "A CSG node that allows you to combine other CSG modifiers."
msgstr "一个CSG节点,å…许您组åˆå…¶ä»–CSG修改器。"
#: modules/csg/doc_classes/CSGCombiner.xml:7
-#, fuzzy
msgid ""
"For complex arrangements of shapes, it is sometimes needed to add structure "
"to your CSG nodes. The CSGCombiner node allows you to create this structure. "
@@ -21078,10 +21467,11 @@ msgid ""
"then do an operation that takes the two end results as its input to create "
"the final shape."
msgstr ""
-"å¯¹äºŽå¤æ‚的形状排列,有时需è¦å°†ç»“构添加到CSG节点。 CSGCombiner3D节点å…许您创建"
-"此结构。节点å°è£…å…¶å­èŠ‚ç‚¹çš„CSGæ“作结果。以此方å¼ï¼Œå¯ä»¥å¯¹ä½œä¸ºä¸€ä¸ªCSGCombiner3D"
-"节点的å­ä»£çš„一组形状进行æ“作,对作为第二CSGCombiner3D节点的å­ä»£çš„第二组形状进"
-"行一组å•独æ“作,然åŽè¿›è¡Œä»¥ä¸‹æ“作:将两个最终结果作为输入以创建最终形状。"
+"å¯¹äºŽå¤æ‚的形状排列,有时需è¦å‘CSG节点添加结构体。CSGCombiner节点å…许你创建这"
+"ç§ç»“构体。该节点å°è£…了其å­èŠ‚ç‚¹çš„CSGæ“ä½œçš„ç»“æžœã€‚é€šè¿‡è¿™ç§æ–¹å¼ï¼Œå¯ä»¥å¯¹ä½œä¸ºä¸€ä¸ª"
+"CSGCombiner节点的å­èŠ‚ç‚¹çš„ä¸€ç»„å½¢çŠ¶è¿›è¡Œæ“作,并对作为第二个CSGCombiner节点的å­"
+"节点的第二组形状进行å•独的æ“作,然åŽè¿›è¡Œæ“作,将两个最终结果作为其输入æ¥åˆ›å»º"
+"最终形状。"
#: modules/csg/doc_classes/CSGCylinder.xml:4
msgid "A CSG Cylinder shape."
@@ -21124,7 +21514,7 @@ msgid ""
"will have a flat shaded look."
msgstr ""
"如果[code] true [/code]ï¼Œåˆ™å°†åœ†æŸ±ä½“çš„æ³•çº¿è®¾ç½®ä¸ºå…·æœ‰å¹³æ»‘æ•ˆæžœï¼Œä½¿åœ†æŸ±ä½“çœ‹èµ·æ¥æ˜¯"
-"圆形的。如果[code]false[/code],则圆柱体将具有平å¦çš„阴影外观。"
+"圆形的。如果[code]false[/code],则圆柱体将具有平å¦çš„阴影表现。"
#: modules/csg/doc_classes/CSGMesh.xml:4
msgid "A CSG Mesh shape that uses a mesh resource."
@@ -21152,6 +21542,10 @@ msgid ""
"If a flat shader is required, ensure that all faces' vertex normals are "
"parallel."
msgstr ""
+"用æ¥ä½œä¸ºCSG形状的[Mesh]资æºã€‚\n"
+"[b]注æ„:[/b] 当使用[ArrayMesh]时,除éžéœ€è¦ä¸€ä¸ªå¹³é¢ç€è‰²å™¨ï¼Œå¦åˆ™è¦é¿å…使用顶点"
+"法线的网格。默认情况下,CSGMesh会忽略网格的顶点法线,并使用é¢çš„æ³•线计算平整的"
+"ç€è‰²å™¨ã€‚如果需è¦ä½¿ç”¨å¹³é¢ç€è‰²å™¨ï¼Œè¯·ç¡®ä¿æ‰€æœ‰é¢çš„顶点法线是平行的。"
#: modules/csg/doc_classes/CSGPolygon.xml:4
msgid "Extrudes a 2D polygon shape to create a 3D mesh."
@@ -21161,13 +21555,12 @@ msgstr "拉伸2D多边形形状以创建3D网格。"
msgid ""
"An array of 2D points is extruded to quickly and easily create a variety of "
"3D meshes."
-msgstr ""
+msgstr "挤出一组 2D 点以快速创建å„ç§ 3D 网格。"
#: modules/csg/doc_classes/CSGPolygon.xml:15
-#, fuzzy
msgid ""
"When [member mode] is [constant MODE_DEPTH], the depth of the extrusion."
-msgstr "[member mode]为[constant MODE_DEPTH]时的挤出深度。"
+msgstr "当[member mode]为[constant MODE_DEPTH]时,挤出的深度。"
#: modules/csg/doc_classes/CSGPolygon.xml:18
msgid ""
@@ -21176,10 +21569,13 @@ msgid ""
"V around the outline of the [member polygon]), the bottom-left quarter to "
"the front end face, and the bottom-right quarter to the back end face."
msgstr ""
+"用于生æˆçš„网格的æè´¨ã€‚UVå°†æè´¨çš„上åŠéƒ¨åˆ†æ˜ å°„到挤出的形状,å³U沿挤出物的长度,"
+"V围绕 [member polygon]的轮廓,左下角的四分之一映射到å‰ç«¯é¢ï¼Œå³ä¸‹è§’的四分之一"
+"映射到åŽç«¯é¢ã€‚"
#: modules/csg/doc_classes/CSGPolygon.xml:21
msgid "The [member mode] used to extrude the [member polygon]."
-msgstr ""
+msgstr "用于挤出 [member polygon] 的 [member mode] 。"
#: modules/csg/doc_classes/CSGPolygon.xml:24
msgid ""
@@ -21188,12 +21584,15 @@ msgid ""
"shape. If [code]false[/code] the top half of the material is repeated every "
"step of the extrusion."
msgstr ""
+"当 [member mode] 为[constant MODE_PATH]时,默认情况下, [member material]的上"
+"åŠéƒ¨åˆ†ä¼šæ²¿ç€æŒ¤å‡ºå½¢çŠ¶çš„æ•´ä¸ªé•¿åº¦è¢«æ‹‰ä¼¸ã€‚å¦‚æžœ[code]false[/code],挤出的æ¯ä¸€æ­¥éƒ½"
+"会é‡å¤æè´¨çš„上åŠéƒ¨åˆ†ã€‚"
#: modules/csg/doc_classes/CSGPolygon.xml:27
msgid ""
"When [member mode] is [constant MODE_PATH], the path interval or ratio of "
"path points to extrusions."
-msgstr ""
+msgstr "当[member mode] 为[constant MODE_PATH]时,路径间隔或路径点比例挤出。"
#: modules/csg/doc_classes/CSGPolygon.xml:30
msgid ""
@@ -21201,6 +21600,8 @@ msgid ""
"interval should be by distance ([constant PATH_INTERVAL_DISTANCE]) or "
"subdivision fractions ([constant PATH_INTERVAL_SUBDIVIDE])."
msgstr ""
+"当 [member mode] 为 [constant MODE_PATH] 时,这将确定间隔是按è·ç¦»ï¼ˆ[constant "
+"PATH_INTERVAL_DISTANCE])还是细分分数([constant PATH_INTERVAL_SUBDIVIDE])。"
#: modules/csg/doc_classes/CSGPolygon.xml:33
msgid ""
@@ -21208,6 +21609,8 @@ msgid ""
"the path are joined, by adding an extrusion between the last and first "
"points of the path."
msgstr ""
+"当 [member mode] 为 [constant MODE_PATH] 时,如果 [code]true[/code] 路径的两"
+"端会被连接起æ¥ï¼Œåœ¨è·¯å¾„的最åŽä¸€ä¸ªç‚¹å’Œç¬¬ä¸€ä¸ªç‚¹ä¹‹é—´æ·»åŠ æŒ¤å‡ºã€‚"
#: modules/csg/doc_classes/CSGPolygon.xml:36
msgid ""
@@ -21215,24 +21618,33 @@ msgid ""
"[Transform] of the [CSGPolygon] is used as the starting point for the "
"extrusions, not the [Transform] of the [member path_node]."
msgstr ""
+"当[member mode]为[constant MODE_PATH]时,如果[code]true[/code],则使用"
+"[CSGPolygon]çš„[Transform]ä½œä¸ºæŒ¤å‡ºçš„èµ·ç‚¹ï¼Œè€Œä¸æ˜¯[member path_node]çš„"
+"[Transform]。"
#: modules/csg/doc_classes/CSGPolygon.xml:39
msgid ""
"When [member mode] is [constant MODE_PATH], the location of the [Path] "
"object used to extrude the [member polygon]."
msgstr ""
+"[member mode] 为[constant MODE_PATH]时,用于挤出 [member polygon] 的 [Path] "
+"å¯¹è±¡çš„åæ ‡ã€‚"
#: modules/csg/doc_classes/CSGPolygon.xml:42
msgid ""
"When [member mode] is [constant MODE_PATH], the [enum PathRotation] method "
"used to rotate the [member polygon] as it is extruded."
msgstr ""
+"当 [member mode] 为 [constant MODE_PATH] 时,[enum PathRotation] 方法用于在挤"
+"出时旋转[member polygon]。"
#: modules/csg/doc_classes/CSGPolygon.xml:45
msgid ""
"When [member mode] is [constant MODE_PATH], extrusions that are less than "
"this angle, will be merged together to reduce polygon count."
msgstr ""
+"当 [member mode] 为 [constant MODE_PATH] 时,å°äºŽæ­¤è§’度的挤出将åˆå¹¶åœ¨ä¸€èµ·ä»¥å‡"
+"少多边形数é‡ã€‚"
#: modules/csg/doc_classes/CSGPolygon.xml:48
msgid ""
@@ -21240,45 +21652,43 @@ msgid ""
"path, in meters, the texture coordinates will tile. When set to 0, texture "
"coordinates will match geometry exactly with no tiling."
msgstr ""
+"当[member mode] 为[constant MODE_PATH] 时,这是纹ç†å标沿ç€è·¯å¾„çš„è·ç¦»ï¼Œä»¥ç±³ä¸º"
+"å•ä½ï¼Œå°†è¿›è¡Œå¹³é“ºã€‚当设置为0时,纹ç†å标将与几何图形完全匹é…,没有平铺。"
#: modules/csg/doc_classes/CSGPolygon.xml:51
-#, fuzzy
msgid "The point array that defines the 2D polygon that is extruded."
-msgstr "ç‚¹æ•°ç»„å®šä¹‰äº†æˆ‘ä»¬å°†è¦æ‹‰ä¼¸çš„形状。"
+msgstr "定义挤出的二维多边形的点数组。"
#: modules/csg/doc_classes/CSGPolygon.xml:54
-#, fuzzy
msgid "If [code]true[/code], applies smooth shading to the extrusions."
-msgstr "如果[code]true[/code],éšè—指定索引的行。"
+msgstr "如果[code]true[/code],则对挤出应用平滑ç€è‰²ã€‚"
#: modules/csg/doc_classes/CSGPolygon.xml:57
msgid ""
"When [member mode] is [constant MODE_SPIN], the total number of degrees the "
"[member polygon] is rotated when extruding."
msgstr ""
+"当[member mode]为[constant MODE_SPIN],[member polygon]在挤出时旋转的总度数。"
#: modules/csg/doc_classes/CSGPolygon.xml:60
-#, fuzzy
msgid ""
"When [member mode] is [constant MODE_SPIN], the number of extrusions made."
-msgstr "[member mode]为[constant MODE_SPIN]时的挤出次数。"
+msgstr "[member mode] 为 [constant MODE_SPIN] 时,挤出的次数。"
#: modules/csg/doc_classes/CSGPolygon.xml:65
msgid "The [member polygon] shape is extruded along the negative Z axis."
-msgstr ""
+msgstr "[member polygon] 形状沿负 Z 轴挤出。"
#: modules/csg/doc_classes/CSGPolygon.xml:68
-#, fuzzy
msgid ""
"The [member polygon] shape is extruded by rotating it around the Y axis."
-msgstr "通过绕轴旋转Shape3Då¯ä»¥å°†å…¶æ‹‰ä¼¸ã€‚"
+msgstr "[member polygon]形状通过围绕Yè½´æ—‹è½¬æ¥æŒ¤å‡ºã€‚"
#: modules/csg/doc_classes/CSGPolygon.xml:71
-#, fuzzy
msgid ""
"The [member polygon] shape is extruded along the [Path] specified in [member "
"path_node]."
-msgstr "Shape3D沿由[member path_node]中设置的[Shape3D]设置的路径拉伸。"
+msgstr "[member polygon] 形状沿 [member path_node] 中指定的 [Path] 挤出。"
#: modules/csg/doc_classes/CSGPolygon.xml:74
msgid ""
@@ -21286,6 +21696,8 @@ msgid ""
"[b]Note:[/b] Requires the path's Z coordinates to continually decrease to "
"ensure viable shapes."
msgstr ""
+"[member polygon] 多边形的形状ä¸ä¼šè¢«æ—‹è½¬ã€‚\n"
+"[b]注æ„:[/b]è¦æ±‚路径的Zåæ ‡ä¸æ–­å‡å°‘,以确ä¿å¯è¡Œçš„形状。"
#: modules/csg/doc_classes/CSGPolygon.xml:78
msgid ""
@@ -21294,13 +21706,14 @@ msgid ""
"[b]Note:[/b] Requires the path's Z coordinates to continually decrease to "
"ensure viable shapes."
msgstr ""
+"[member polygon] 多边形的形状沿路径旋转,但ä¸ç»•路径轴旋转。\n"
+"[b]注æ„:[/b] 需è¦è·¯å¾„çš„ Z åæ ‡ä¸æ–­å‡å°ä»¥ç¡®ä¿å¯è¡Œçš„形状。"
#: modules/csg/doc_classes/CSGPolygon.xml:82
-#, fuzzy
msgid ""
"The [member polygon] shape follows the path and its rotations around the "
"path axis."
-msgstr "绕X轴旋转时所能产生的最大力。"
+msgstr "[member polygon] 多边形的形状跟éšè·¯å¾„åŠå…¶å›´ç»•路径轴的旋转。"
#: modules/csg/doc_classes/CSGPolygon.xml:85
msgid ""
@@ -21308,12 +21721,16 @@ msgid ""
"will determine the distance, in meters, each interval of the path will "
"extrude."
msgstr ""
+"当 [member mode] 被设置为路径[constant MODE_PATH] 时,[member path_interval] "
+"将决定路径的æ¯ä¸ªé—´éš”将被挤出的è·ç¦»ï¼Œå•ä½ä¸ºç±³ã€‚"
#: modules/csg/doc_classes/CSGPolygon.xml:88
msgid ""
"When [member mode] is set to [constant MODE_PATH], [member path_interval] "
"will subdivide the polygons along the path."
msgstr ""
+"当 [member mode] 被设置为路径 [constant MODE_PATH]时,[member path_interval] "
+"将沿ç€è·¯å¾„细分多边形。"
#: modules/csg/doc_classes/CSGPrimitive.xml:4
msgid "Base class for CSG primitives."
@@ -21384,7 +21801,6 @@ msgstr ""
"å‡è¢«å¿½ç•¥ã€‚"
#: modules/csg/doc_classes/CSGShape.xml:60
-#, fuzzy
msgid ""
"The physics layers this area is in.\n"
"Collidable objects can exist in any of 32 different layers. These layers "
@@ -21398,11 +21814,13 @@ msgid ""
"documentation for more information."
msgstr ""
"这个区域所处的物ç†å±‚。\n"
-"å¯ç¢°æ’žçš„物体å¯ä»¥å­˜åœ¨äºŽ32个ä¸åŒçš„层中的任何一个。这些层的工作方å¼å°±åƒä¸€ä¸ªæ ‡ç­¾"
-"ç³»ç»Ÿï¼Œè€Œä¸æ˜¯å¯è§†åŒ–的。一个å¯ç¢°æ’žå¯¹è±¡å¯ä»¥ä½¿ç”¨è¿™äº›å±‚æ¥é€‰æ‹©å®ƒå¯ä»¥ä¸Žå“ªäº›å¯¹è±¡ç¢°"
-"撞,使用 collision_mask 属性。\n"
-"如果对象A在对象B扫æçš„任何一个图层中,或者对象B在对象A扫æçš„任何一个图层中,"
-"那么就会检测到一个接触。"
+"å¯ç¢°æ’žçš„物体å¯ä»¥å­˜åœ¨äºŽ32个ä¸åŒå±‚中的任何一个。这些层的工作就åƒä¸€ä¸ªæ ‡ç­¾ç³»ç»Ÿï¼Œ"
+"è€Œä¸æ˜¯å¯è§†åŒ–的。一个å¯ç¢°æ’žç‰©ä½“å¯ä»¥ä½¿ç”¨è¿™äº›å±‚æ¥é€‰æ‹©å®ƒå¯ä»¥ä¸Žå“ªäº›ç‰©ä½“碰撞,使用 "
+"collision_mask 属性。\n"
+"如果对象A在对象B所扫æçš„任何层中,或者对象B在对象A所扫æçš„任何层中,就会检测"
+"åˆ°æŽ¥è§¦ã€‚è¯¦è§æ–‡æ¡£ä¸­çš„[url=https://docs.godotengine.org/zh_CN/stable/tutorials/"
+"physics/physics_introduction.html#collision-layers-and-masks]碰撞层和掩ç [/"
+"url]。"
#: modules/csg/doc_classes/CSGShape.xml:65
msgid ""
@@ -21411,6 +21829,9 @@ msgid ""
"html#collision-layers-and-masks]Collision layers and masks[/url] in the "
"documentation for more information."
msgstr ""
+"æ­¤ CSG å½¢çŠ¶å°†è¦æ‰«æç¢°æ’žçš„物ç†å±‚。有关更多信æ¯ï¼Œè¯·å‚阅文档中的 [url=https://"
+"docs.godotengine.org/zh_CN/stable/tutorials/physics/physics_introduction."
+"html#collision-layers-and-masks]碰撞层和掩ç [/url]。"
#: modules/csg/doc_classes/CSGShape.xml:68
msgid ""
@@ -21484,7 +21905,7 @@ msgid ""
"have a flat shaded look."
msgstr ""
"如果[code] true [/code]ï¼Œåˆ™å°†åœ†æŸ±ä½“çš„æ³•çº¿è®¾ç½®ä¸ºå…·æœ‰å¹³æ»‘æ•ˆæžœï¼Œä½¿åœ†æŸ±ä½“çœ‹èµ·æ¥æ˜¯"
-"圆形的。如果[code]false[/code],则圆柱体将具有平å¦çš„阴影外观。"
+"圆形的。如果[code]false[/code],则圆柱体将具有平å¦çš„阴影表现。"
#: modules/csg/doc_classes/CSGTorus.xml:4
msgid "A CSG Torus shape."
@@ -21521,7 +21942,7 @@ msgid ""
"have a flat shaded look."
msgstr ""
"如果[code] true [/code]设置圆环的法线以æä¾›å¹³æ»‘æ•ˆæžœï¼Œåˆ™ä½¿åœ†çŽ¯çœ‹èµ·æ¥æ˜¯åœ†å½¢çš„。"
-"如果[code]false[/code],则圆环将具有平å¦çš„阴影外观。"
+"如果[code]false[/code],则圆环将具有平å¦çš„阴影表现。"
#: modules/mono/doc_classes/CSharpScript.xml:4
msgid ""
@@ -21544,8 +21965,8 @@ msgid ""
"https://docs.godotengine.org/en/3.4/getting_started/scripting/c_sharp/index."
"html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/getting_started/scripting/c_sharp/index."
-"html"
+"https://docs.godotengine.org/zh_CN/stable/getting_started/scripting/c_sharp/"
+"index.html"
#: modules/mono/doc_classes/CSharpScript.xml:18
#: modules/gdnative/doc_classes/PluginScript.xml:13
@@ -21562,47 +21983,47 @@ msgid ""
"to make an object look as if it's reflecting its surroundings. This usually "
"delivers much better performance than other reflection methods."
msgstr ""
+"通常用于伪造åå°„çš„ 6 é¢ 3D 纹ç†ã€‚它å¯ç”¨äºŽä½¿å¯¹è±¡çœ‹èµ·æ¥å¥½åƒåœ¨å射其周围环境。这"
+"通常比其他å射方法æä¾›æ›´å¥½çš„æ€§èƒ½ã€‚"
#: doc/classes/CubeMap.xml:15
msgid "Returns the [CubeMap]'s height."
msgstr "返回[CubeMap]的高度。"
#: doc/classes/CubeMap.xml:22
-#, fuzzy
msgid ""
"Returns an [Image] for a side of the [CubeMap] using one of the [enum Side] "
"constants."
-msgstr "使用[enum BodyMode]常é‡ä¹‹ä¸€è®¾ç½®body模å¼ã€‚"
+msgstr "使用 [enum Side] 边常数之一返回 [CubeMap] 的一个侧é¢å›¾åƒ [Image]。"
#: doc/classes/CubeMap.xml:28
msgid "Returns the [CubeMap]'s width."
msgstr "返回[CubeMap]的宽度。"
#: doc/classes/CubeMap.xml:36
-#, fuzzy
msgid ""
"Sets an [Image] for a side of the [CubeMap] using one of the [enum Side] "
"constants."
-msgstr "使用[enum BodyMode]常é‡ä¹‹ä¸€è®¾ç½®body模å¼ã€‚"
+msgstr ""
+"为 [CubeMap] çš„ä¸€ä¸ªè¾¹è®¾ç½®å›¾åƒ [Image],使用枚举边 [enum Side]常数之一。"
#: doc/classes/CubeMap.xml:42
-#, fuzzy
msgid ""
"The render flags for the [CubeMap]. See the [enum Flags] constants for "
"details."
-msgstr ""
-"选项å¡å®¹å™¨ä¸­æ‰€æœ‰é€‰é¡¹å¡çš„坹齿–¹å¼ã€‚有关详细信æ¯ï¼Œè¯·å‚阅 [enum TabAlign] 常é‡ã€‚"
+msgstr "[CubeMap] 的渲染标志。有关详细信æ¯ï¼Œè¯·å‚阅 [enum Flags] 常é‡ã€‚"
#: doc/classes/CubeMap.xml:45
msgid ""
"The lossy storage quality of the [CubeMap] if the storage mode is set to "
"[constant STORAGE_COMPRESS_LOSSY]."
msgstr ""
+"如果存储模å¼è®¾ç½®ä¸º [constant STORAGE_COMPRESS_LOSSY],则 [CubeMap] 为有æŸå­˜å‚¨"
+"è´¨é‡ã€‚"
#: doc/classes/CubeMap.xml:48
-#, fuzzy
msgid "The [CubeMap]'s storage mode. See [enum Storage] constants."
-msgstr "Camera2D的锚点。å‚阅[enum AnchorMode]常é‡ã€‚"
+msgstr "[CubeMap] 的存储模å¼ã€‚å‚阅 [enum AnchorMode] 常é‡ã€‚"
#: doc/classes/CubeMap.xml:53
msgid "Store the [CubeMap] without any compression."
@@ -21610,46 +22031,41 @@ msgstr "存储[CubeMap]而ä¸è¿›è¡Œä»»ä½•压缩。"
#: doc/classes/CubeMap.xml:56
msgid "Store the [CubeMap] with strong compression that reduces image quality."
-msgstr ""
+msgstr "以é™ä½Žå›¾åƒè´¨é‡çš„强压缩方å¼å­˜å‚¨ [CubeMap]。"
#: doc/classes/CubeMap.xml:59
msgid ""
"Store the [CubeMap] with moderate compression that doesn't reduce image "
"quality."
-msgstr ""
+msgstr "以ä¸é™ä½Žå›¾åƒè´¨é‡çš„适度压缩方å¼å­˜å‚¨ [CubeMap]。"
#: doc/classes/CubeMap.xml:62
-#, fuzzy
msgid "Identifier for the left face of the [CubeMap]."
-msgstr "å转网格的é¢ã€‚"
+msgstr "[CubeMap] å·¦é¢çš„æ ‡è¯†ç¬¦ã€‚"
#: doc/classes/CubeMap.xml:65
-#, fuzzy
msgid "Identifier for the right face of the [CubeMap]."
-msgstr "å转网格的é¢ã€‚"
+msgstr "[CubeMap] å³é¢çš„æ ‡è¯†ç¬¦ã€‚"
#: doc/classes/CubeMap.xml:68
msgid "Identifier for the bottom face of the [CubeMap]."
-msgstr ""
+msgstr "[CubeMap] 底é¢çš„æ ‡è¯†ç¬¦ã€‚"
#: doc/classes/CubeMap.xml:71
-#, fuzzy
msgid "Identifier for the top face of the [CubeMap]."
-msgstr "å转网格的é¢ã€‚"
+msgstr "[CubeMap] é¡¶é¢çš„æ ‡è¯†ç¬¦ã€‚"
#: doc/classes/CubeMap.xml:74
-#, fuzzy
msgid "Identifier for the front face of the [CubeMap]."
-msgstr "å转网格的é¢ã€‚"
+msgstr "[CubeMap] æ­£é¢çš„æ ‡è¯†ç¬¦ã€‚"
#: doc/classes/CubeMap.xml:77
-#, fuzzy
msgid "Identifier for the back face of the [CubeMap]."
-msgstr "å转网格的é¢ã€‚"
+msgstr "[CubeMap] 背é¢çš„æ ‡è¯†ç¬¦ã€‚"
#: doc/classes/CubeMap.xml:80
msgid "Generate mipmaps, to enable smooth zooming out of the texture."
-msgstr ""
+msgstr "ç”Ÿæˆ mipmap,以实现纹ç†çš„平滑缩放。"
#: doc/classes/CubeMap.xml:83
msgid "Repeat (instead of clamp to edge)."
@@ -21657,18 +22073,17 @@ msgstr "é‡å¤ï¼ˆè€Œä¸æ˜¯é™åˆ¶åˆ°è¾¹ç¼˜ï¼‰ã€‚"
#: doc/classes/CubeMap.xml:86
msgid "Turn on magnifying filter, to enable smooth zooming in of the texture."
-msgstr ""
+msgstr "打开放大滤镜,使纹ç†å¹³æ»‘放大。"
#: doc/classes/CubeMap.xml:89
msgid "Default flags. Generate mipmaps, repeat, and filter are enabled."
-msgstr ""
+msgstr "默认标志。å¯ç”¨ç”Ÿæˆ mipmapã€é‡å¤å’Œæ»¤é•œã€‚"
#: doc/classes/CubeMesh.xml:4
msgid "Generate an axis-aligned cuboid [PrimitiveMesh]."
msgstr "生æˆä¸Žè½´å¯¹é½çš„长方体[PrimitiveMesh]。"
#: doc/classes/CubeMesh.xml:7
-#, fuzzy
msgid ""
"Generate an axis-aligned cuboid [PrimitiveMesh].\n"
"The cube's UV layout is arranged in a 3×2 layout that allows texturing each "
@@ -21679,9 +22094,13 @@ msgid ""
"this, increase [member subdivide_depth], [member subdivide_height] and "
"[member subdivide_width] until you no longer notice UV jittering."
msgstr ""
-"生æˆä¸Žè½´å¯¹é½çš„长方体[PrimitiveMesh]。\n"
-"多维数æ®é›†çš„UV布局以3×2布局进行排列,从而å¯ä»¥åˆ†åˆ«çº¹ç†åŒ–æ¯ä¸ªé¢ã€‚è¦åœ¨æ‰€æœ‰é¢ä¸Šåº”"
-"用相åŒçš„纹ç†ï¼Œè¯·å°†æè´¨çš„UV属性更改为[code] Vector3(3,2,1)[/code]。"
+"生æˆä¸€ä¸ªè½´å¯¹é½çš„立方体[PrimitiveMesh]。\n"
+"这个立方体的UV布局是以3×2çš„æ–¹å¼æŽ’åˆ—çš„ï¼Œå¯ä»¥å¯¹æ¯ä¸ªé¢å•独进行纹ç†å¤„ç†ã€‚è¦åœ¨æ‰€æœ‰"
+"çš„é¢ä¸Šåº”用相åŒçš„纹ç†ï¼Œå°†æè´¨çš„UV属性改为 [code]Vector3(3, 2, 1)[/code]。\n"
+"[b]注æ„:[/b]å½“ä½¿ç”¨ä¸€ä¸ªå¤§çš„çº¹ç† [CubeMesh]时(例如作为地æ¿ï¼‰ï¼Œä½ å¯èƒ½ä¼šé‡åˆ°UV"
+"抖动的问题,这å–决于相机的角度。为了解决这个问题,增加细分深度 [member "
+"subdivide_depth]ã€[member subdivide_height] 细分高度和细分宽带 [member "
+"subdivide_width],直到你ä¸å†æ³¨æ„到UV抖动。"
#: doc/classes/CubeMesh.xml:17
msgid "Size of the cuboid mesh."
@@ -21701,7 +22120,7 @@ msgstr "沿Xè½´æ’入的é¢å¤–边缘环的数é‡ã€‚"
#: doc/classes/CullInstance.xml:4
msgid "Parent of all nodes that can be culled by the Portal system."
-msgstr ""
+msgstr "所有å¯ä»¥è¢«Portalå…¥å£ç³»ç»Ÿå‰”除的节点的父节点。"
#: doc/classes/CullInstance.xml:7
msgid ""
@@ -21724,6 +22143,18 @@ msgid ""
"Objects that are not [code]Static[/code] or [code]Dynamic[/code] can be "
"freely created and deleted during the lifetime of the game level."
msgstr ""
+"为å¯ä»¥è¢«[Portal]系统剔除的节点æä¾›é€šç”¨åŠŸèƒ½ã€‚\n"
+"[code]Static[/code]å’Œ[code]Dynamic[/code]对象是系统中最有效的管ç†å¯¹è±¡ï¼Œä½†æœ‰ä¸€"
+"些注æ„事项。当使用[RoomManager] [code]rooms_convert[/code]函数转æ¢[Room]时,"
+"它们最åˆåº”该存在,并且其寿命应该与游æˆçº§åˆ«ç›¸åŒï¼Œä¹Ÿå°±æ˜¯è¯´ï¼Œåœ¨ä½ è°ƒç”¨"
+"[RoomManager]çš„[code]rooms_clear[/code]之å‰ä¸€ç›´å­˜åœ¨ã€‚虽然你ä¸åº”该在游æˆè¿‡ç¨‹ä¸­"
+"创建或删除这些对象,但å¯ä»¥ç”¨æ ‡å‡†çš„[code]hide[/code]å’Œ[code]show[/code]命令管"
+"ç†å®ƒä»¬çš„å¯è§æ€§ã€‚\n"
+"å¦ä¸€æ–¹é¢ï¼Œ[code]Roaming[/code]对象需è¦é¢å¤–çš„å¤„ç†æ¥è·Ÿè¸ªå®ƒä»¬åœ¨å“ªä¸ª[Room]中。这"
+"使它们能够有效地被剔除,无论其ä½ç½®ã€‚\n"
+"[code]Global[/code]对象ä¸è¢«å…¥å£ç³»ç»Ÿå‰”除,åªä½¿ç”¨è§†å›¾è§†é”¥å‰”除。\n"
+"䏿˜¯[code]Static[/code]或[code]Dynamic[/code]的对象å¯ä»¥åœ¨æ¸¸æˆå…³å¡çš„生命周期内"
+"自由创建和删除。"
#: doc/classes/CullInstance.xml:19
msgid ""
@@ -21735,6 +22166,11 @@ msgid ""
"This can be used to control autoplacement of building exteriors in an outer "
"[RoomGroup]."
msgstr ""
+"当设置为[code]0[/code]时,[CullInstance]将被自动放置在具有最高优先级的[Room]"
+"中。\n"
+"当设置为[code]0[/code]以外的值时,系统将å°è¯•在具有[code]autoplace_priority[/"
+"code]çš„[Room]中自动放置,如果它存在的è¯ã€‚\n"
+"è¿™å¯ä»¥ç”¨æ¥æŽ§åˆ¶å»ºç­‘外é¢çš„在外部[RoomGroup]的自动放置。"
#: doc/classes/CullInstance.xml:24
msgid ""
@@ -21746,12 +22182,16 @@ msgid ""
"[code]PORTAL_MODE_STATIC[/code] or [code]PORTAL_MODE_DYNAMIC[/code], and for "
"[Portal]s."
msgstr ""
+"当没有为 [Room] æ˜Žç¡®æŒ‡å®šæ‰‹åŠ¨è¾¹ç•Œæ—¶ï¼Œå‡¸å½¢è¾¹ç•Œå°†æ ¹æ®æˆ¿é—´å†…对象的几何形状进行估"
+"算。此设置确定对象的几何形状是å¦åŒ…å«åœ¨æ­¤æˆ¿é—´è¾¹ç•Œä¼°ç®—之中。\n"
+"[b]注æ„:[/b]此设置仅在对象设置为[code]PORTAL_MODE_STATIC[/code]或"
+"[code]PORTAL_MODE_DYNAMIC[/code]时有相,并且适用于[Portal]。"
#: doc/classes/CullInstance.xml:28
msgid ""
"When using [Room]s and [Portal]s, this specifies how the [CullInstance] is "
"processed in the system."
-msgstr ""
+msgstr "当使用[Room]å’Œ[Portal]时,这规定了[CullInstance]åœ¨ç³»ç»Ÿä¸­çš„å¤„ç†æ–¹å¼ã€‚"
#: doc/classes/CullInstance.xml:33
msgid ""
@@ -21763,6 +22203,11 @@ msgid ""
"data has been invalidated. You will need to reconvert the rooms using the "
"[RoomManager] to activate the system again."
msgstr ""
+"用于[b]ä¸ä¼šç§»åЍ[/b]çš„[Room]内的实例--例如,墙å£ã€åœ°æ¿ã€‚\n"
+"[b]注æ„:[/b] 如果你在房间图形加载å³è½¬æ¢çš„æ—¶å€™ï¼Œè¯•图删除一个"
+"[code]PORTAL_MODE_STATIC[/code]实例,它将å¸è½½æˆ¿é—´å›¾å½¢å¹¶åœç”¨å…¥å£å‰”除。这是因为"
+"[b]房间图形[/b]的数æ®å·²ç»å¤±æ•ˆã€‚你将需è¦ä½¿ç”¨[RoomManager]釿–°è½¬æ¢æˆ¿é—´ä»¥å†æ¬¡æ¿€"
+"活系统。"
#: doc/classes/CullInstance.xml:37
msgid ""
@@ -21774,22 +22219,27 @@ msgid ""
"data has been invalidated. You will need to reconvert the rooms using the "
"[RoomManager] to activate the system again."
msgstr ""
+"用于房间内会移动但 [b] ä¸ä¼šæ”¹å˜æˆ¿é—´ [/b] 的实例 - 例如移动平å°ã€‚\n"
+"[b]注æ„:[/b] 如果在加载å³è½¬æ¢æˆ¿é—´å›¾å½¢æ—¶å°è¯•删除 [code]PORTAL_MODE_DYNAMIC[/"
+"code] 实例,它将å¸è½½æˆ¿é—´å›¾å½¢å¹¶åœç”¨å…¥å£å‰”除。这是因为[b]房间图形[/b]æ•°æ®å·²ç»å¤±"
+"效。将需è¦ä½¿ç”¨ [RoomManager] 釿–°è½¬æ¢æˆ¿é—´ä»¥å†æ¬¡æ¿€æ´»ç³»ç»Ÿã€‚"
#: doc/classes/CullInstance.xml:41
msgid "Use for instances that will move [b]between[/b] [Room]s - e.g. players."
-msgstr ""
+msgstr "用于在 [Room] [b]之间 [/b] 移动的实例 - 例如玩家。"
#: doc/classes/CullInstance.xml:44
msgid ""
"Use for instances that will be frustum culled only - e.g. first person "
"weapon, debug."
-msgstr ""
+msgstr "用于åªä¼šè¢«è§†é”¥å‰”除的实例 - 例如第一人称武器,调试。"
#: doc/classes/CullInstance.xml:47
msgid ""
"Use for instances that will not be shown at all - e.g. [b]manual room "
"bounds[/b] (specified by prefix [i]'Bound_'[/i])."
msgstr ""
+"用于根本ä¸ä¼šæ˜¾ç¤ºçš„实例 - 例如[b]手动房间边界[/b],由å‰ç¼€[i]'Bound_'[/i]指定。"
#: doc/classes/Curve.xml:4
msgid "A mathematic curve."
@@ -21992,9 +22442,8 @@ msgstr ""
"它应该是足够近似的。"
#: doc/classes/Curve2D.xml:39
-#, fuzzy
msgid "Returns the cache of points as a [PoolVector2Array]."
-msgstr "以[PackedVector2Array]的形å¼è¿”回点的缓存。"
+msgstr "以[PoolVector2Array]的形å¼è¿”回缓存的点。"
#: doc/classes/Curve2D.xml:46
msgid ""
@@ -22007,36 +22456,35 @@ msgstr ""
"[code]to_point[/code] å¿…é¡»åœ¨è¿™æ¡æ›²çº¿çš„局部空间中。"
#: doc/classes/Curve2D.xml:54 doc/classes/Curve3D.xml:67
-#, fuzzy
msgid ""
"Returns the closest baked point (in curve's local space) to [code]to_point[/"
"code].\n"
"[code]to_point[/code] must be in this curve's local space."
msgstr ""
-"返回è·ç¦» [code]to_point[/code] 最近的点 (在曲线的局部空间)。\n"
-"[code]to_point[/code] å¿…é¡»åœ¨è¿™æ¡æ›²çº¿çš„局部空间中。"
+"返回最接近 [code]to_point[/code] 并烘焙好的点(在曲线的局部空间)。\n"
+"[code]to_point[/code] 必须是在这个曲线的局部空间。"
#: doc/classes/Curve2D.xml:68
-#, fuzzy
msgid ""
"Returns the position of the control point leading to the vertex [code]idx[/"
"code]. The returned position is relative to the vertex [code]idx[/code]. If "
"the index is out of bounds, the function sends an error to the console, and "
"returns [code](0, 0)[/code]."
msgstr ""
-"返回指å‘顶点[code]idx[/code]的控制点的ä½ç½®ã€‚å¦‚æžœç´¢å¼•è¶…å‡ºè¾¹ç•Œï¼Œå‡½æ•°ä¼šå‘æŽ§åˆ¶å°"
-"å‘é€ä¸€ä¸ªé”™è¯¯ä¿¡æ¯ï¼Œå¹¶è¿”回[code](0,0)[/code]。"
+"返回指å‘顶点[code] idx [/code]的控制点ä½ç½®ã€‚返回的ä½ç½®æ˜¯ç›¸å¯¹äºŽé¡¶ç‚¹[code] idx "
+"[/code]çš„ã€‚å¦‚æžœç´¢å¼•è¶…å‡ºäº†èŒƒå›´ï¼Œå‡½æ•°ä¼šå‘æŽ§åˆ¶å°å‘é€ä¸€æ¡é”™è¯¯ï¼Œå¹¶è¿”回[code] (0, "
+"0)[/code]。"
#: doc/classes/Curve2D.xml:75
-#, fuzzy
msgid ""
"Returns the position of the control point leading out of the vertex "
"[code]idx[/code]. The returned position is relative to the vertex [code]idx[/"
"code]. If the index is out of bounds, the function sends an error to the "
"console, and returns [code](0, 0)[/code]."
msgstr ""
-"返回指å‘顶点[code]idx[/code]的控制点的ä½ç½®ã€‚å¦‚æžœç´¢å¼•è¶…å‡ºè¾¹ç•Œï¼Œå‡½æ•°ä¼šå‘æŽ§åˆ¶å°"
-"å‘é€ä¸€ä¸ªé”™è¯¯ä¿¡æ¯ï¼Œå¹¶è¿”回[code](0,0)[/code]。"
+"返回从顶点[code] idx [/code]引出的控制点ä½ç½®ã€‚返回的ä½ç½®æ˜¯ç›¸å¯¹äºŽé¡¶ç‚¹ [code] "
+"idx[/code]ã€‚å¦‚æžœç´¢å¼•è¶Šç•Œï¼Œå‡½æ•°ä¼šå‘æŽ§åˆ¶å°å‘é€é”™è¯¯ï¼Œå¹¶è¿”回 [code](0, 0)[/"
+"code]。"
#: doc/classes/Curve2D.xml:82
msgid ""
@@ -22091,7 +22539,7 @@ msgid ""
"code], and its fractional part as [code]t[/code]."
msgstr ""
"返回顶点 [code]fofs[/code] çš„ä½ç½®ã€‚它使用 [code]fofs[/code] 的整数部分作为 "
-"[code]idx[/code] 和分数部分作为 [code]t[/code] 调用 [方法æ’值]。"
+"[code]idx[/code] 和分数部分作为 [code]t[/code] 调用 [method interpolate]。"
#: doc/classes/Curve2D.xml:115 doc/classes/Curve3D.xml:145
msgid ""
@@ -22102,24 +22550,22 @@ msgstr ""
"错误信æ¯ã€‚"
#: doc/classes/Curve2D.xml:123 doc/classes/Curve3D.xml:153
-#, fuzzy
msgid ""
"Sets the position of the control point leading to the vertex [code]idx[/"
"code]. If the index is out of bounds, the function sends an error to the "
"console. The position is relative to the vertex."
msgstr ""
-"设置通往顶点 [code]idx[/code] 的控制点的ä½ç½®ã€‚å¦‚æžœç´¢å¼•è¶…å‡ºèŒƒå›´ï¼Œå‡½æ•°ä¼šå‘æŽ§åˆ¶"
-"å°å‘é€ä¸€ä¸ªé”™è¯¯ä¿¡æ¯ã€‚"
+"设置通往顶点 [code]idx[/code] 的控制点ä½ç½®ã€‚å¦‚æžœç´¢å¼•è¶…å‡ºèŒƒå›´ï¼Œå‡½æ•°ä¼šå‘æŽ§åˆ¶å°"
+"å‘é€é”™è¯¯ä¿¡æ¯ã€‚"
#: doc/classes/Curve2D.xml:131 doc/classes/Curve3D.xml:161
-#, fuzzy
msgid ""
"Sets the position of the control point leading out of the vertex [code]idx[/"
"code]. If the index is out of bounds, the function sends an error to the "
"console. The position is relative to the vertex."
msgstr ""
-"设置从顶点[code]idx[/code]引出的控制点的ä½ç½®ã€‚å¦‚æžœç´¢å¼•è¶…å‡ºèŒƒå›´ï¼Œå‡½æ•°ä¼šå‘æŽ§åˆ¶"
-"å°å‘é€ä¸€ä¸ªé”™è¯¯ä¿¡æ¯ã€‚"
+"设置从顶点[code]idx[/code]引出的控制点ä½ç½®ã€‚å¦‚æžœç´¢å¼•è¶…å‡ºèŒƒå›´ï¼Œè¯¥å‡½æ•°ä¼šå‘æŽ§åˆ¶"
+"å°å‘é€é”™è¯¯ã€‚ä½ç½®æ˜¯ç›¸å¯¹äºŽé¡¶ç‚¹çš„。"
#: doc/classes/Curve2D.xml:139 doc/classes/Curve3D.xml:169
msgid ""
@@ -22171,35 +22617,31 @@ msgid "Describes a Bézier curve in 3D space."
msgstr "æè¿°äºŒç»´ç©ºé—´çš„è´å…¹å°”曲线。"
#: doc/classes/Curve3D.xml:7
-#, fuzzy
msgid ""
"This class describes a Bézier curve in 3D space. It is mainly used to give a "
"shape to a [Path], but can be manually sampled for other purposes.\n"
"It keeps a cache of precalculated points along the curve, to speed up "
"further calculations."
msgstr ""
-"该类æè¿°äº†äºŒç»´ç©ºé—´ä¸­çš„è´å…¹å°”曲线。它主è¦ç”¨äºŽç»™[Path2D]一个形状,但也å¯ä»¥æ‰‹åЍ"
-"采样用于其他目的。\n"
-"它ä¿ç•™äº†æ²¿æ›²çº¿çš„预计算点的缓存,以加快进一步的计算。"
+"该类æè¿°äº†ä¸‰ç»´ç©ºé—´ä¸­çš„è´å¡žå°”曲线。它主è¦ç”¨äºŽç»™ [Path] æä¾›ä¸€ä¸ªå½¢çŠ¶ï¼Œä½†ä¹Ÿå¯ä»¥"
+"ä¸ºå…¶ä»–ç›®çš„æ‰‹åŠ¨å–æ ·ã€‚\n"
+"它沿曲线ä¿ç•™äº†ä¸€ä¸ªé¢„先计算好的点缓存,以加快进一步的计算。"
#: doc/classes/Curve3D.xml:39
-#, fuzzy
msgid "Returns the cache of points as a [PoolVector3Array]."
-msgstr "以[PackedVector2Array]的形å¼è¿”回点的缓存。"
+msgstr "以 [PoolVector3Array] 的形å¼è¿”回缓存的点。"
#: doc/classes/Curve3D.xml:45
-#, fuzzy
msgid "Returns the cache of tilts as a [PoolRealArray]."
-msgstr "以[PackedFloat32Array]的形å¼è¿”回倾斜的缓存。"
+msgstr "以 [PoolRealArray] 的形å¼è¿”回倾斜的缓存。"
#: doc/classes/Curve3D.xml:51
-#, fuzzy
msgid ""
"Returns the cache of up vectors as a [PoolVector3Array].\n"
"If [member up_vector_enabled] is [code]false[/code], the cache will be empty."
msgstr ""
-"返回作为[PackedVector3Array]çš„upå‘é‡ç¼“存。\n"
-"如果[member up_vector_enabled]为[code]false[/code],则缓存为空。"
+"以 [PoolVector3Array] 的形å¼è¿”回å‘上å‘é‡çš„缓存。\n"
+"如果 [member up_vector_enabled] 是 [code]false[/code],缓存将是空的。"
#: doc/classes/Curve3D.xml:59
msgid ""
@@ -22213,26 +22655,26 @@ msgstr ""
"[code]to_point[/code] å¿…é¡»åœ¨è¿™æ¡æ›²çº¿çš„局部空间中。"
#: doc/classes/Curve3D.xml:81
-#, fuzzy
msgid ""
"Returns the position of the control point leading to the vertex [code]idx[/"
"code]. The returned position is relative to the vertex [code]idx[/code]. If "
"the index is out of bounds, the function sends an error to the console, and "
"returns [code](0, 0, 0)[/code]."
msgstr ""
-"返回从顶点[code]idx[/code]引出的控制点的ä½ç½®ã€‚å¦‚æžœç´¢å¼•è¶…å‡ºè¾¹ç•Œï¼Œå‡½æ•°å‘æŽ§åˆ¶å°"
-"å‘é€ä¸€ä¸ªé”™è¯¯ä¿¡æ¯ï¼Œå¹¶è¿”回[code](0,0,0)[/code]。"
+"返回通往顶点 [code]idx[/code] 的控制点的ä½ç½®ã€‚返回的ä½ç½®æ˜¯ç›¸å¯¹äºŽé¡¶ç‚¹ "
+"[code]idx[/code]çš„ã€‚å¦‚æžœç´¢å¼•è¶…å‡ºäº†èŒƒå›´ï¼Œå‡½æ•°ä¼šå‘æŽ§åˆ¶å°å‘é€ä¸€ä¸ªé”™è¯¯ï¼Œå¹¶è¿”回 "
+"[code](0, 0, 0)[/code]。"
#: doc/classes/Curve3D.xml:88
-#, fuzzy
msgid ""
"Returns the position of the control point leading out of the vertex "
"[code]idx[/code]. The returned position is relative to the vertex [code]idx[/"
"code]. If the index is out of bounds, the function sends an error to the "
"console, and returns [code](0, 0, 0)[/code]."
msgstr ""
-"返回从顶点[code]idx[/code]引出的控制点的ä½ç½®ã€‚å¦‚æžœç´¢å¼•è¶…å‡ºè¾¹ç•Œï¼Œå‡½æ•°å‘æŽ§åˆ¶å°"
-"å‘é€ä¸€ä¸ªé”™è¯¯ä¿¡æ¯ï¼Œå¹¶è¿”回[code](0,0,0)[/code]。"
+"返回从顶点 [code]idx[/code] 伸出的控制点的ä½ç½®ã€‚返回的ä½ç½®æ˜¯ç›¸å¯¹äºŽé¡¶ç‚¹ "
+"[code]idx[/code] çš„ã€‚å¦‚æžœç´¢å¼•è¶…å‡ºäº†èŒƒå›´ï¼Œå‡½æ•°ä¼šå‘æŽ§åˆ¶å°å‘é€ä¸€ä¸ªé”™è¯¯ï¼Œå¹¶è¿”回 "
+"[code](0, 0, 0)[/code]。"
#: doc/classes/Curve3D.xml:95
msgid ""
@@ -22240,8 +22682,8 @@ msgid ""
"bounds, the function sends an error to the console, and returns [code](0, 0, "
"0)[/code]."
msgstr ""
-"返回顶点的ä½ç½®[code]idx[/code]ã€‚å¦‚æžœç´¢å¼•è¶…å‡ºè¾¹ç•Œï¼Œå‡½æ•°ä¼šå‘æŽ§åˆ¶å°å‘é€ä¸€ä¸ªé”™è¯¯"
-"ä¿¡æ¯ï¼Œå¹¶è¿”回[code](0,0,0)[/code]。"
+"返回顶点的ä½ç½® [code]idx[/code]ã€‚å¦‚æžœç´¢å¼•è¶…å‡ºè¾¹ç•Œï¼Œå‡½æ•°ä¼šå‘æŽ§åˆ¶å°å‘é€ä¸€ä¸ªé”™è¯¯"
+"ä¿¡æ¯ï¼Œå¹¶è¿”回 [code](0,0,0)[/code]。"
#: doc/classes/Curve3D.xml:102
msgid ""
@@ -22272,7 +22714,6 @@ msgstr ""
"[/code]。"
#: doc/classes/Curve3D.xml:119
-#, fuzzy
msgid ""
"Returns a point within the curve at position [code]offset[/code], where "
"[code]offset[/code] is measured as a distance in 3D units along the curve.\n"
@@ -22283,12 +22724,12 @@ msgid ""
"Cubic interpolation tends to follow the curves better, but linear is faster "
"(and often, precise enough)."
msgstr ""
-"返回曲线中ä½äºŽ [code]offset[/code] ä½ç½®çš„一个点,其中 [code]offset[/code] 是"
-"沿曲线的åƒç´ è·ç¦»ã€‚\n"
-"为此,它找到 [code]offset[/code] 所在的两个缓存点,然åŽå¯¹å…¶è¿›è¡Œæ’值。如果将 "
-"[code]cubic[/code] 设置为 [code]true[/code] 则为立方æ’值,如果设置为 [code] "
-"false[/code] 则为线性æ’值。\n"
-"立方内æ’å¾€å¾€èƒ½æ›´å¥½åœ°è·Ÿéšæ›²çº¿ï¼Œä½†çº¿æ€§å†…æ’速度更快(而且通常足够精确)。"
+"返回曲线中 [code]offset[/code] åç§»ä½ç½®çš„一个点,其中 [code]offset[/code] 以"
+"沿曲线的 3D å•ä½è·ç¦»æµ‹é‡ã€‚\n"
+"为了åšåˆ°è¿™ä¸€ç‚¹ï¼Œå®ƒæ‰¾åˆ° [code]offset[/code] 所在的两个缓存点,然åŽè¿›è¡Œå†…æ’值。"
+"如果 [code]cubic[/code] 被设置为[code]true[/code],这个æ’值是立方的,如果设置"
+"为 [code]false[/code],则是线性的。\n"
+"立体æ’值倾å‘于更好地éµå¾ªæ›²çº¿ï¼Œä½†çº¿æ€§æ’值更快(而且通常足够精确)。"
#: doc/classes/Curve3D.xml:129
msgid ""
@@ -22310,7 +22751,6 @@ msgstr ""
"code]。"
#: doc/classes/Curve3D.xml:177
-#, fuzzy
msgid ""
"Sets the tilt angle in radians for the point [code]idx[/code]. If the index "
"is out of bounds, the function sends an error to the console.\n"
@@ -22318,10 +22758,10 @@ msgid ""
"the path would have. In the case of a curve controlling a [PathFollow], this "
"tilt is an offset over the natural tilt the [PathFollow] calculates."
msgstr ""
-"设置 [code]idx[/code] 点的倾斜角,å•ä½ä¸ºå¼§åº¦ã€‚å¦‚æžœç´¢å¼•è¶…å‡ºèŒƒå›´ï¼Œå‡½æ•°ä¼šå‘æŽ§åˆ¶"
-"å°å‘é€ä¸€ä¸ªé”™è¯¯ä¿¡æ¯ã€‚\n"
-"å€¾æ–œåº¦æŽ§åˆ¶ç€æ²¿ç€è·¯å¾„上移动的物体的视线轴的旋转。如果是控制 [PathFollow3D] çš„"
-"曲线,这个倾斜度是 [PathFollow3D] 计算的自然倾斜度的å移。"
+"以弧度为å•ä½è®¾ç½®ç‚¹ [code]idx[/code] 的倾斜角度。如果索引超出范围,该函数会å‘"
+"控制å°å‘é€é”™è¯¯ã€‚\n"
+"å€¾æ–œæŽ§åˆ¶ç€æ²¿è·¯å¾„移动的对象沿观察轴的旋转。在控制 [PathFollow] 的曲线的情况"
+"下,此倾斜是对 [PathFollow] 计算的自然倾斜的å移。"
#: doc/classes/Curve3D.xml:195
msgid ""
@@ -22336,7 +22776,6 @@ msgstr ""
"的点越多,å ç”¨çš„å†…å­˜ä¹Ÿè¶Šå¤šï¼Œæ‰€ä»¥ä½¿ç”¨æ—¶è¦æ³¨æ„。"
#: doc/classes/Curve3D.xml:198
-#, fuzzy
msgid ""
"If [code]true[/code], the curve will bake up vectors used for orientation. "
"This is used when [member PathFollow.rotation_mode] is set to [constant "
@@ -22354,7 +22793,7 @@ msgstr "ä¸€ç§æ˜¾ç¤ºæ›²çº¿çš„纹ç†ã€‚"
msgid ""
"Renders a given [Curve] provided to it. Simplifies the task of drawing "
"curves and/or saving them as image files."
-msgstr "渲染æä¾›ç»™å®ƒçš„[曲线]。简化了绘制曲线和/或ä¿å­˜ä¸ºå›¾åƒæ–‡ä»¶çš„任务。"
+msgstr "渲染æä¾›ç»™å®ƒçš„[Curve]。简化了绘制曲线和/或ä¿å­˜ä¸ºå›¾åƒæ–‡ä»¶çš„任务。"
#: doc/classes/CurveTexture.xml:15
msgid "The [code]curve[/code] rendered onto the texture."
@@ -22369,20 +22808,21 @@ msgid "Class representing a cylindrical [PrimitiveMesh]."
msgstr "表示圆柱形[PrimitiveMesh]的类。"
#: doc/classes/CylinderMesh.xml:7
-#, fuzzy
msgid ""
"Class representing a cylindrical [PrimitiveMesh]. This class can be used to "
"create cones by setting either the [member top_radius] or [member "
"bottom_radius] properties to [code]0.0[/code]."
msgstr ""
-"表示圆柱形[PrimitiveMesh]的类。该类å¯ä»¥é€šè¿‡è®¾ç½®[member top_radius]或[member "
-"bottom_radius]属性为0.0æ¥åˆ›å»ºåœ†é”¥ä½“。"
+"表示圆柱形[PrimitiveMesh]的类。通过将[member top_radius]或[member "
+"bottom_radius]属性设置为[code]0.0[/code],这个类å¯ä»¥ç”¨æ¥åˆ›å»ºåœ†é”¥ä½“。"
#: doc/classes/CylinderMesh.xml:15
msgid ""
"Bottom radius of the cylinder. If set to [code]0.0[/code], the bottom faces "
"will not be generated, resulting in a conic shape."
msgstr ""
+"圆柱体的底部åŠå¾„。如果设置为[code]0.0[/code],而ä¸ä¼šç”Ÿæˆåº•é¢ï¼Œä»Žè€Œå½¢æˆåœ†é”¥"
+"体。"
#: doc/classes/CylinderMesh.xml:18
msgid "Full height of the cylinder."
@@ -22393,6 +22833,7 @@ msgid ""
"Number of radial segments on the cylinder. Higher values result in a more "
"detailed cylinder/cone at the cost of performance."
msgstr ""
+"åœ†æŸ±ä½“ä¸Šçš„å¾„å‘æ®µæ•°ã€‚æ›´é«˜çš„å€¼ä¼šç”Ÿæˆæ›´ç»†è‡´çš„圆柱体或圆锥体,但以性能为代价。"
#: doc/classes/CylinderMesh.xml:24
msgid ""
@@ -22404,12 +22845,18 @@ msgid ""
"altering the vertex data using a shader or procedural mesh tool, [member "
"rings] should be kept to its default value."
msgstr ""
+"沿圆柱体的高度的边缘环的数é‡ã€‚除éžä½¿ç”¨ç€è‰²å™¨æˆ–程åºç½‘æ ¼å·¥å…·æ¥æ›´æ”¹é¡¶ç‚¹æ•°æ®ï¼Œå¦"
+"则更改 [member rings] ä¸ä¼šå½±å“显示,[member rings] åº”ä¿æŒå…¶é»˜è®¤å€¼ã€‚较高的值会"
+"产生更多的细分,这å¯ç”¨äºŽä½¿ç”¨ç€è‰²å™¨æˆ–程åºç½‘格工具创建更平滑的显示效果,但以性"
+"能为代价。"
#: doc/classes/CylinderMesh.xml:27
msgid ""
"Top radius of the cylinder. If set to [code]0.0[/code], the top faces will "
"not be generated, resulting in a conic shape."
msgstr ""
+"圆柱体的顶部åŠå¾„。如果设置为 [code]0.0[/code],则ä¸ä¼šç”Ÿæˆé¡¶éƒ¨é¢ï¼Œå½¢æˆåœ†é”¥å½¢"
+"状。"
#: doc/classes/CylinderShape.xml:4 doc/classes/CylinderShape.xml:7
msgid "Cylinder shape for collisions."
@@ -22425,13 +22872,13 @@ msgstr "圆柱体的åŠå¾„。"
#: doc/classes/DampedSpringJoint2D.xml:4
msgid "Damped spring constraint for 2D physics."
-msgstr "二维物ç†å­¦çš„阻尼弹簧约æŸã€‚"
+msgstr "二维物ç†çš„阻尼弹簧约æŸã€‚"
#: doc/classes/DampedSpringJoint2D.xml:7
msgid ""
"Damped spring constraint for 2D physics. This resembles a spring joint that "
"always wants to go back to a given length."
-msgstr "二维物ç†å­¦çš„阻尼弹簧约æŸã€‚这类似于一个总是想回到给定长度的弹簧关节。"
+msgstr "二维物ç†çš„阻尼弹簧约æŸã€‚这类似于总是想回到给定长度的弹簧关节。"
#: doc/classes/DampedSpringJoint2D.xml:15
msgid ""
@@ -22448,7 +22895,7 @@ msgstr ""
msgid ""
"The spring joint's maximum length. The two attached bodies cannot stretch it "
"past this value."
-msgstr "弹簧接头的最大长度。两个连接体ä¸èƒ½è¶…过这个值。"
+msgstr "弹簧关节的最大长度。两个连接体ä¸èƒ½è¶…过这个值。"
#: doc/classes/DampedSpringJoint2D.xml:21
msgid ""
@@ -22472,7 +22919,6 @@ msgid "Dictionary type."
msgstr "字典类型。"
#: doc/classes/Dictionary.xml:7
-#, fuzzy
msgid ""
"Dictionary type. Associative container which contains values referenced by "
"unique keys. Dictionaries are composed of pairs of keys (which must be "
@@ -22579,58 +23025,64 @@ msgid ""
"another value after it was initialized."
msgstr ""
"字典类型。关è”容器,包å«ç”±å”¯ä¸€é”®å¼•用的值。字典由键(必须是唯一的)和值对组"
-"æˆã€‚当添加元素时,字典将ä¿ç•™æ’入顺åºï¼Œå³ä½¿åœ¨æ‰“å°å­—典时å¯èƒ½ä¸ä¼šå映出æ¥ã€‚在其"
-"ä»–ç¼–ç¨‹è¯­è¨€ä¸­ï¼Œè¿™ç§æ•°æ®ç»“æž„æœ‰æ—¶è¢«ç§°ä¸ºå“ˆå¸Œå›¾æˆ–å…³è”æ•°ç»„。\n"
-"您å¯ä»¥é€šè¿‡åœ¨å¤§æ‹¬å·[code]{}[/code]中放置一个以逗å·åˆ†éš”çš„[code]key: value[/"
-"code]对的列表æ¥å®šä¹‰ä¸€ä¸ªå­—典。\n"
-"䏿”¯æŒåœ¨è¿­ä»£å…ƒç´ [b]时擦除元素[/b],并且会导致未定义的行为。\n"
+"æˆã€‚\n"
+"当添加元素时,字典将ä¿ç•™æ’入顺åºï¼Œå³ä½¿åœ¨æ‰“å°å­—典时å¯èƒ½ä¸ä¼šå映出æ¥ã€‚\n"
+"åœ¨å…¶ä»–ç¼–ç¨‹è¯­è¨€ä¸­ï¼Œè¿™ç§æ•°æ®ç»“æž„æœ‰æ—¶è¢«ç§°ä¸ºå“ˆå¸Œå›¾æˆ–å…³è”æ•°ç»„。\n"
+"您å¯ä»¥é€šè¿‡åœ¨å¤§æ‹¬å·[code]{}[/code]中放置一个以逗å·åˆ†éš”çš„ [code]key: value[/"
+"code] 对的列表æ¥å®šä¹‰ä¸€ä¸ªå­—典。\n"
+"[b]䏿”¯æŒ[/b] åœ¨è¿­ä»£å…ƒç´ æ—¶æ“¦é™¤å…ƒç´ ï¼Œè¿™ä¼šå¯¼è‡´ä¸æ˜Žç¡®çš„行为。\n"
"[b]注æ„:[/b] 字典总是通过引用传递的。è¦èŽ·å¾—ä¸€ä¸ªå¯ä»¥ç‹¬ç«‹äºŽåŽŸå§‹å­—å…¸è¿›è¡Œä¿®æ”¹çš„å­—"
-"典副本,请使用[方法 duplicate]。\n"
+"典副本,请使用 [method duplicate]。\n"
"创建一个字典。\n"
"[codeblock]\n"
-"var my_dir = {} # Creates an empty dictionary.\n"
-"var points_dir = {\"White\": 50, \"Yellow\": 75, \"Orange\": 100}\n"
-"var another_dir = {\n"
-" key1: value1,\n"
-" key2: value2,\n"
-" key3: value3,\n"
+"var my_dict = {} # 创建一个空字典\n"
+"\n"
+"var dict_variable_key = \"Another key name\"\n"
+"var dict_variable_value = \"value2\"\n"
+"var another_dict = {\n"
+" \"Some key name\": \"value1\",\n"
+" dict_variable_key: dict_variable_value,\n"
+"}\n"
+"\n"
+"var points_dict = {\"White\": 50, \"Yellow\": 75, \"Orange\": 100}\n"
+"\n"
+"# 坿›¿ä»£çš„Lua-风格语法。\n"
+"# 键并ä¸éœ€è¦åР引å·ï¼Œä½†åªæœ‰å­—符常é‡å‚数能被用作键å。\n"
+"# 并且,键åå¿…é¡»ä»¥å­—æ¯æˆ–下划线开头。\n"
+"# 这里,some_keyæ˜¯ä¸€ä¸ªå­—ç¬¦ä¸²ï¼Œä¸æ˜¯å˜é‡ï¼\n"
+"another_dict = {\n"
+" some_key = 42,\n"
"}\n"
"[/codeblock]\n"
-"You can access a dictionary's values by referencing the appropriate key. In "
-"the above example, [code]points_dir[\"White\"][/code] will return [code]50[/"
-"code]. You can also write [code]points_dir.White[/code], which is "
-"equivalent. However, you'll have to use the bracket syntax if the key you're "
-"accessing the dictionary with isn't a fixed string (such as a number or "
-"variable).\n"
+"ä½ å¯ä»¥é€šè¿‡å¼•用åˆé€‚的键æ¥è®¿é—®ä¸€ä¸ªå­—典。在上方的示例中,"
+"[code]points_dir[\"White\"][/code] 会返回 [code]50[/code]。你也å¯ä»¥å†™æˆ "
+"[code]points_dir.White[/code],效果都是相åŒçš„。但是如果你需è¦è®¿é—®çš„键䏿˜¯ä¸€ä¸ª"
+"固定的字符串(比如数字或å˜é‡ï¼‰æ—¶ï¼Œä½ éœ€è¦ä½¿ç”¨æ–¹æ‹¬å·ã€‚\n"
"[codeblock]\n"
"export(String, \"White\", \"Yellow\", \"Orange\") var my_color\n"
"var points_dir = {\"White\": 50, \"Yellow\": 75, \"Orange\": 100}\n"
"\n"
"func _ready():\n"
-" # We can't use dot syntax here as `my_color` is a variable.\n"
+" # 这里我们ä¸èƒ½ä½¿ç”¨ç‚¹ï¼Œå› ä¸ºâ€˜my_color’是个å˜é‡ã€‚\n"
" var points = points_dir[my_color]\n"
"[/codeblock]\n"
-"In the above code, [code]points[/code] will be assigned the value that is "
-"paired with the appropriate color selected in [code]my_color[/code].\n"
-"Dictionaries can contain more complex data:\n"
+"在上方的代ç ä¸­ï¼Œ[code]points[/code] 会被赋值为 [code]my_color[/code]中选å–çš„"
+"颜色。\n"
+"å­—å…¸å¯ä»¥å®¹çº³æ›´åР夿‚的数æ®ï¼š\n"
"[codeblock]\n"
-"my_dir = {\"First Array\": [1, 2, 3, 4]} # Assigns an Array to a String "
-"key.\n"
+"my_dir = {\"First Array\": [1, 2, 3, 4]} # 将一个数组分é…给一个字符串键。\n"
"[/codeblock]\n"
-"To add a key to an existing dictionary, access it like an existing key and "
-"assign to it:\n"
+"如果想è¦ç»™å­—典添加一个键,å¯ä»¥åƒè®¿é—®å·²æœ‰çš„键一样:\n"
"[codeblock]\n"
"var points_dir = {\"White\": 50, \"Yellow\": 75, \"Orange\": 100}\n"
-"points_dir[\"Blue\"] = 150 # Add \"Blue\" as a key and assign 150 as its "
-"value.\n"
+"points_dir[\"Blue\"] = 150 # 添加键\"Blue\",并将其数值设定为150\n"
"[/codeblock]\n"
-"Finally, dictionaries can contain different types of keys and values in the "
-"same dictionary:\n"
+"最终,åŒä¸€ä¸ªå­—典内å¯ä»¥å®¹çº³ä¸åŒç±»åž‹çš„键和值:\n"
"[codeblock]\n"
-"# This is a valid dictionary.\n"
-"# To access the string \"Nested value\" below, use `my_dir.sub_dir.sub_key` "
-"or `my_dir[\"sub_dir\"][\"sub_key\"]`.\n"
-"# Indexing styles can be mixed and matched depending on your needs.\n"
+"# è¿™æ˜¯ä¸€ä¸ªåˆæ³•的字典。\n"
+"# 使用`my_dir.sub_dir.sub_key`或`my_dir[\"sub_dir\"][\"sub_key\"]`æ¥è®¿é—®ä¸‹æ–¹"
+"的字符串\"Nested value\"。\n"
+"# æ ¹æ®ä½ ä¸åŒçš„需求å¯ä»¥ä¿®æ”¹ç´¢å¼•æ ·å¼ã€‚\n"
"var my_dir = {\n"
" \"String Key\": 5,\n"
" 4: [1, 2, 3],\n"
@@ -22638,36 +23090,38 @@ msgstr ""
" \"sub_dir\": {\"sub_key\": \"Nested value\"},\n"
"}\n"
"[/codeblock]\n"
-"[b]Note:[/b] Unlike [Array]s, you can't compare dictionaries directly:\n"
+"[b]注æ„:[/b] 和数组ä¸åŒçš„æ˜¯ï¼Œä½ ä¸èƒ½ç›´æŽ¥è¿›è¡Œå­—典对比:\n"
"[codeblock]\n"
"array1 = [1, 2, 3]\n"
"array2 = [1, 2, 3]\n"
"\n"
"func compare_arrays():\n"
-" print(array1 == array2) # Will print true.\n"
+" print(array1 == array2) # 会输出true。\n"
"\n"
"dir1 = {\"a\": 1, \"b\": 2, \"c\": 3}\n"
"dir2 = {\"a\": 1, \"b\": 2, \"c\": 3}\n"
"\n"
"func compare_dictionaries():\n"
-" print(dir1 == dir2) # Will NOT print true.\n"
+" print(dir1 == dir2) # ä¸ä¼šè¾“出true。\n"
"[/codeblock]\n"
-"You need to first calculate the dictionary's hash with [method hash] before "
-"you can compare them:\n"
+"想è¦å¯¹æ¯”字典,首先需è¦ç”¨ [method hash] 计算字典哈希。\n"
"[codeblock]\n"
"dir1 = {\"a\": 1, \"b\": 2, \"c\": 3}\n"
"dir2 = {\"a\": 1, \"b\": 2, \"c\": 3}\n"
"\n"
"func compare_dictionaries():\n"
-" print(dir1.hash() == dir2.hash()) # Will print true.\n"
-"[/codeblock]"
+" print(dir1.hash() == dir2.hash()) # 会输出true。\n"
+"[/codeblock]\n"
+"[b]注æ„:[/b]当使用 [code]const[/code] æ¥å£°æ˜Žä¸€ä¸ªå­—典时,字典本身ä¾ç„¶å¯ä»¥é€šè¿‡"
+"定义键的数值æ¥è¿›è¡Œä¿®æ”¹ã€‚使用 [code]const[/code] åªèƒ½é˜²æ­¢åœ¨å®ƒåˆå§‹åŒ–完æˆåŽè¢«ç»™"
+"予å¦ä¸€ä¸ªæ•°å€¼ã€‚"
#: doc/classes/Dictionary.xml:87
msgid ""
"https://docs.godotengine.org/en/3.4/getting_started/scripting/gdscript/"
"gdscript_basics.html#dictionary"
msgstr ""
-"https://docs.godotengine.org/en/3.4/getting_started/scripting/gdscript/"
+"https://docs.godotengine.org/zh_CN/stable/getting_started/scripting/gdscript/"
"gdscript_basics.html#dictionary"
#: doc/classes/Dictionary.xml:94
@@ -22688,15 +23142,15 @@ msgid "Returns [code]true[/code] if the dictionary is empty."
msgstr "如果字典为空,返回[code]true[/code]。"
#: doc/classes/Dictionary.xml:114
-#, fuzzy
msgid ""
"Erase a dictionary key/value pair by key. Returns [code]true[/code] if the "
"given key was present in the dictionary, [code]false[/code] otherwise.\n"
"[b]Note:[/b] Don't erase elements while iterating over the dictionary. You "
"can iterate over the [method keys] array instead."
msgstr ""
-"按键擦除字典中的键/值对。如果给定的键存在于字典中,返回 [code]true[/code],å¦"
-"则返回 [code]false[/code]。éåŽ†å­—å…¸æ—¶ä¸æ“¦é™¤å…ƒç´ ã€‚"
+"便®key擦除字典的键值对。如果指定的 key 存在于字典中,返回 [code]true[/"
+"code] ,å¦åˆ™è¿”回 [code]false[/code] 。\n"
+"[b]注æ„:[/b] 在迭代字典时ä¸è¦æ“¦é™¤å…ƒç´ ã€‚å¯ä»¥è¿­ä»£ [method keys] 数组。"
#: doc/classes/Dictionary.xml:123
msgid ""
@@ -22704,8 +23158,8 @@ msgid ""
"key does not exist, the method returns the value of the optional default "
"argument, or [code]null[/code] if it is omitted."
msgstr ""
-"返回[å­—å…¸]中指定键的当å‰å€¼ã€‚如果键ä¸å­˜åœ¨ï¼Œåˆ™è¯¥æ–¹æ³•返回å¯é€‰é»˜è®¤å‚数的值;如果"
-"çœç•¥ï¼Œåˆ™è¿”回[code] null [/code]。"
+"返回[Dictionary]中指定键的当å‰å€¼ã€‚如果键ä¸å­˜åœ¨ï¼Œåˆ™è¯¥æ–¹æ³•返回å¯é€‰é»˜è®¤å‚æ•°çš„"
+"值;如果çœç•¥ï¼Œåˆ™è¿”回[code] null [/code]。"
#: doc/classes/Dictionary.xml:130
msgid ""
@@ -22732,11 +23186,10 @@ msgstr ""
"算符一样)也会评估为[code]true[/code]。"
#: doc/classes/Dictionary.xml:144
-#, fuzzy
msgid ""
"Returns [code]true[/code] if the dictionary has all the keys in the given "
"array."
-msgstr "如果字典中的所有键都在给定的数组中,返回[code]true[/code]。"
+msgstr "如果字典具有给定数组中的所有键,则返回 [code]true[/code] 。"
#: doc/classes/Dictionary.xml:150
msgid ""
@@ -22767,9 +23220,8 @@ msgid "Returns the list of keys in the [Dictionary]."
msgstr "返回[Dictionary]中的键列表。"
#: doc/classes/Dictionary.xml:169
-#, fuzzy
msgid "Returns the number of keys in the dictionary."
-msgstr "返回目录里文件的数é‡ã€‚"
+msgstr "返回字典中键的数é‡ã€‚"
#: doc/classes/Dictionary.xml:175
msgid "Returns the list of values in the [Dictionary]."
@@ -22777,10 +23229,9 @@ msgstr "返回[Dictionary]中的值列表。"
#: doc/classes/DirectionalLight.xml:4
msgid "Directional light from a distance, as from the Sun."
-msgstr "æ¥è‡ªè¿œå¤„的定å‘å…‰æºï¼Œå¦‚æ¥è‡ªå¤ªé˜³çš„光。"
+msgstr "æ¥è‡ªè¿œå¤„的平行光æºï¼Œå¦‚æ¥è‡ªå¤ªé˜³çš„光。"
#: doc/classes/DirectionalLight.xml:7
-#, fuzzy
msgid ""
"A directional light is a type of [Light] node that models an infinite number "
"of parallel rays covering the entire scene. It is used for lights with "
@@ -22788,22 +23239,25 @@ msgid ""
"or moonlight. The worldspace location of the DirectionalLight transform "
"(origin) is ignored. Only the basis is used to determine light direction."
msgstr ""
-"æ–¹å‘ç¯æ˜¯ä¸€ç§[Light3D]节点,它å¯ä»¥æ¨¡æ‹Ÿè¦†ç›–æ•´ä¸ªåœºæ™¯çš„æ— é™æ•°é‡çš„平行光线。它用于"
-"离场景较远的具有强烈强度的ç¯å…‰ï¼Œä»¥æ¨¡æ‹Ÿå¤ªé˜³å…‰æˆ–月光。DirectionalLight3Då˜æ¢"
-"(原点)的世界空间ä½ç½®è¢«å¿½ç•¥ã€‚åªæœ‰åŸºç¡€è¢«ç”¨æ¥ç¡®å®šå…‰çš„æ–¹å‘。"
+"平行光是[Light]节点的一ç§ç±»åž‹ï¼Œå®ƒå¯ä»¥æ¨¡æ‹Ÿå‡ºè¦†ç›–整个场景的无é™å¤šçš„平行光线。它"
+"用于离场景很远的具有强烈强度的ç¯å…‰ï¼Œä»¥æ¨¡æ‹Ÿå¤ªé˜³å…‰æˆ–月光。DirectionalLightå˜æ¢"
+"çš„ä¸–ç•Œç©ºé—´åæ ‡åŽŸç‚¹è¢«å¿½ç•¥ã€‚åªæœ‰åŸºç‚¹è¢«ç”¨æ¥ç¡®å®šå…‰çº¿æ–¹å‘。"
#: doc/classes/DirectionalLight.xml:10 doc/classes/Light.xml:10
#: doc/classes/OmniLight.xml:11 doc/classes/SpotLight.xml:11
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/3d/lights_and_shadows.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/3d/lights_and_shadows.html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/3d/lights_and_shadows."
+"html"
#: doc/classes/DirectionalLight.xml:16
msgid ""
"Amount of extra bias for shadow splits that are far away. If self-shadowing "
"occurs only on the splits far away, increasing this value can fix them."
msgstr ""
+"远处阴影分裂的é¢å¤–åç½®é‡ã€‚如果自身阴影åªäº§ç”Ÿè¿œå¤„的分裂,增加这个值å¯ä»¥ä¿®å¤å®ƒ"
+"们。"
#: doc/classes/DirectionalLight.xml:19
msgid ""
@@ -22830,7 +23284,7 @@ msgstr "ç¯å…‰çš„阴影渲染算法。å‚阅[enum ShadowMode]。"
msgid ""
"Can be used to fix special cases of self shadowing when objects are "
"perpendicular to the light."
-msgstr ""
+msgstr "当物体垂直于光线时,å¯ç”¨äºŽä¿®å¤è‡ªèº«é˜´å½±çš„特殊情况。"
#: doc/classes/DirectionalLight.xml:34
msgid ""
@@ -22910,7 +23364,6 @@ msgid "Type used to handle the filesystem."
msgstr "ç”¨äºŽå¤„ç†æ–‡ä»¶ç³»ç»Ÿçš„类型。"
#: doc/classes/Directory.xml:7
-#, fuzzy
msgid ""
"Directory type. It is used to manage directories and their content (not "
"restricted to the project folder).\n"
@@ -22939,11 +23392,14 @@ msgid ""
" print(\"An error occurred when trying to access the path.\")\n"
"[/codeblock]"
msgstr ""
-"目录类型。它用于管ç†ç›®å½•åŠå…¶å†…容(ä¸é™äºŽé¡¹ç›®æ–‡ä»¶å¤¹ï¼‰ã€‚\n"
-"当创建一个新的[目录]时,必须使用[方法open]æ˜¾å¼æ‰“å¼€å®ƒï¼Œç„¶åŽæ‰èƒ½ä½¿ç”¨å¤§å¤šæ•°æ–¹"
-"法。然而,[method file_exists]å’Œ[method dir_exists]å¯ä»¥åœ¨ä¸æ‰“开目录的情况下使"
-"用。如果是这样,它们使用的是相对于[code]res://[/code]的路径。\n"
-"䏋颿˜¯ä¸€ä¸ªå…³äºŽå¦‚何é历一个目录中的文件的例å­ã€‚\n"
+"目录类型。它用于管ç†ç›®å½•åŠå…¶å†…容,县ä¸é™äºŽé¡¹ç›®æ–‡ä»¶å¤¹ã€‚\n"
+"创建新的[Directory]目录时,其默认打开的目录为[code]res://[/code]。这在将æ¥å¯"
+"能会改å˜ï¼Œå› æ­¤å»ºè®®å§‹ç»ˆä½¿ç”¨ [method open] æ¥åˆå§‹åŒ–æ‚¨è¦æ“作的 [Directory],并进"
+"行显å¼çš„错误检查。\n"
+"[b]注æ„:[/b] 导入了很多资æºç±»åž‹ï¼Œä¾‹å¦‚çº¹ç†æˆ–声音文件,它们的æºèµ„产ä¸ä¼šåŒ…å«åœ¨"
+"导出的游æˆä¸­ï¼Œå› ä¸ºå¯¼å‡ºæ—¶åªä½¿ç”¨å¯¼å…¥çš„版本内容。使用 [ResourceLoader] 访问导入"
+"的资æºã€‚\n"
+"䏋颿˜¯ä¸€ä¸ªå…³äºŽå¦‚何é历目录文件的示例:\n"
"[codeblock]\n"
"func dir_contents(path):\n"
" var dir = Directory.new()\n"
@@ -22965,8 +23421,8 @@ msgid ""
"https://docs.godotengine.org/en/3.4/getting_started/step_by_step/filesystem."
"html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/getting_started/step_by_step/filesystem."
-"html"
+"https://docs.godotengine.org/zh_CN/stable/getting_started/step_by_step/"
+"filesystem.html"
#: doc/classes/Directory.xml:35
msgid ""
@@ -23003,22 +23459,18 @@ msgstr ""
"code]被认为是目录)。"
#: doc/classes/Directory.xml:58
-#, fuzzy
msgid ""
"Returns whether the target directory exists. The argument can be relative to "
"the current directory, or an absolute path."
msgstr ""
-"返回目标目录是å¦å­˜åœ¨ã€‚è¯¥å‚æ•°å¯ä»¥ç›¸å¯¹äºŽå½“å‰ç›®å½•,也å¯ä»¥æ˜¯ç»å¯¹è·¯å¾„。\n"
-"如果未打开[Directory],则该路径是相对于[code] res:// [/code]的。"
+"返回目标目录是å¦å­˜åœ¨ã€‚傿•°å¯ä»¥æ˜¯ç›¸å¯¹äºŽå½“å‰ç›®å½•的路径,也å¯ä»¥æ˜¯ç»å¯¹è·¯å¾„。"
#: doc/classes/Directory.xml:65
-#, fuzzy
msgid ""
"Returns whether the target file exists. The argument can be relative to the "
"current directory, or an absolute path."
msgstr ""
-"返回目标文件是å¦å­˜åœ¨ã€‚傿•°å¯ä»¥æ˜¯å½“å‰ç›®å½•的相对路径,也å¯ä»¥æ˜¯ç»å¯¹è·¯å¾„。\n"
-"如果 [Directory] 没有打开,则路径是相对于 [code]res://[/code] 。"
+"返回目标文件是å¦å­˜åœ¨ã€‚傿•°å¯ä»¥æ˜¯ç›¸å¯¹äºŽå½“å‰ç›®å½•的路径,也å¯ä»¥æ˜¯ç»å¯¹è·¯å¾„。"
#: doc/classes/Directory.xml:71
msgid ""
@@ -23037,14 +23489,13 @@ msgstr ""
"动器的å称。"
#: doc/classes/Directory.xml:84
-#, fuzzy
msgid ""
"On Windows, returns the name of the drive (partition) passed as an argument "
"(e.g. [code]C:[/code]). On other platforms, or if the requested drive does "
"not exist, the method returns an empty String."
msgstr ""
-"在Windowsä¸Šï¼Œè¿”å›žä½œä¸ºå‚æ•°ä¼ é€’的驱动器(分区)的å称(例如[code]C:[/code])。"
-"在其他平å°ä¸Šï¼Œæˆ–者如果请求的驱动器ä¸å­˜åœ¨ï¼Œè¯¥æ–¹æ³•返回一个空字符串。"
+"在Windowsä¸Šï¼Œè¿”å›žä½œä¸ºå‚æ•°ä¼ é€’的驱动器å³åˆ†åŒºçš„å称,例如,[code]C:[/code]。在"
+"å…¶ä»–å¹³å°ä¸Šï¼Œå¦‚果请求的驱动器ä¸å­˜åœ¨ï¼Œè¯¥æ–¹æ³•返回一个空的字符串。"
#: doc/classes/Directory.xml:90
msgid ""
@@ -23065,10 +23516,10 @@ msgid ""
"mandatory in such a case)."
msgstr ""
"返回当å‰ç›®å½•中的下一个元素(文件或目录)(包括[code].[/code]å’Œ[code].[/"
-"code],除éž[code]skip_navigational[/code]被赋予[方法list_dir_begin])。\n"
+"code],除éž[code]skip_navigational[/code]被赋予[method list_dir_begin])。\n"
"返回的是文件或目录的åç§°ï¼ˆè€Œä¸æ˜¯å®ƒçš„完整路径)。一旦æµè¢«å®Œå…¨å¤„ç†ï¼Œè¯¥æ–¹æ³•返回"
-"一个空的String,并自动关闭æµï¼ˆå³åœ¨è¿™ç§æƒ…况下,[方法list_dir_end]将䏿˜¯å¼ºåˆ¶æ€§"
-"的)。"
+"一个空的String,并自动关闭æµï¼ˆå³åœ¨è¿™ç§æƒ…况下,[method list_dir_end]将䏿˜¯å¼ºåˆ¶"
+"性的)。"
#: doc/classes/Directory.xml:103
msgid ""
@@ -23080,7 +23531,6 @@ msgstr ""
"该方法返回0或-1。"
#: doc/classes/Directory.xml:111
-#, fuzzy
msgid ""
"Initializes the stream used to list all files and directories using the "
"[method get_next] function, closing the currently opened stream if needed. "
@@ -23091,20 +23541,19 @@ msgid ""
"If [code]skip_hidden[/code] is [code]true[/code], hidden files are filtered "
"out."
msgstr ""
-"使用[method get_next]函数åˆå§‹åŒ–用于列出所有文件和目录的æµï¼Œå¹¶åœ¨éœ€è¦æ—¶å…³é—­å½“å‰"
-"打开的æµã€‚处ç†å®ŒæµåŽï¼Œé€šå¸¸åº”使用[method list_dir_end]将其关闭。\n"
-"如果[code] skip_navigational [/code]is[code]true[/code],那么[code].[/code]和"
-"[code] .. [/code]被过滤掉。\n"
-"如果[code] skip_hidden [/code]为[code]true[/code],则éšè—文件将被过滤掉。"
+"åˆå§‹åŒ–用于列出所有文件和目录的æµï¼Œä½¿ç”¨ [method get_next] 函数,如果需è¦ï¼Œå¯å…³"
+"闭当剿‰“开的æµã€‚一旦æµè¢«å¤„ç†å®Œæ¯•,通常应该用 [method list_dir_end] 关闭。\n"
+"如果 [code]skip_navigational[/code] 是 [code]true[/code],过滤 [code].[/"
+"code] 和 [code]..[/code]。\n"
+"如果 [code]skip_hidden[/code] 是 [code]true[/code],过滤éšè—文件。"
#: doc/classes/Directory.xml:119
-#, fuzzy
msgid ""
"Closes the current stream opened with [method list_dir_begin] (whether it "
"has been fully processed with [method get_next] does not matter)."
msgstr ""
-"关闭用[method list_dir_begin]æ‰“å¼€çš„å½“å‰æµ(是å¦å·²è¢«[method get_next]完全处ç†å¹¶"
-"ä¸é‡è¦)。"
+"关闭用[method list_dir_begin]æ‰“å¼€çš„å½“å‰æµï¼Œå¹¶ä¸å…³æ³¨æ˜¯å¦å·²ç»ç”¨[method "
+"get_next]完æˆå¤„ç†ã€‚"
#: doc/classes/Directory.xml:126
msgid ""
@@ -23156,7 +23605,6 @@ msgstr ""
"返回[enum Error]代ç å¸¸é‡ä¹‹ä¸€(æˆåŠŸæ—¶è¿”å›ž[code]OK[/code])。"
#: doc/classes/Directory.xml:159
-#, fuzzy
msgid ""
"Renames (move) the [code]from[/code] file or directory to the [code]to[/"
"code] destination. Both arguments should be paths to files or directories, "
@@ -23164,9 +23612,10 @@ msgid ""
"is not access-protected, it will be overwritten.\n"
"Returns one of the [enum Error] code constants ([code]OK[/code] on success)."
msgstr ""
-"å°†[code]from[/code]文件é‡å‘½å(移动)到[code]to[/code]ç›®çš„åœ°ã€‚ä¸¤ä¸ªå‚æ•°éƒ½åº”该"
-"是相对或ç»å¯¹æ–‡ä»¶çš„è·¯å¾„ã€‚å¦‚æžœç›®æ ‡æ–‡ä»¶å­˜åœ¨å¹¶ä¸”æ²¡æœ‰è®¿é—®ä¿æŠ¤ï¼Œå®ƒå°†è¢«è¦†ç›–ã€‚\n"
-"返回[enum Error]代ç å¸¸é‡ä¹‹ä¸€(æˆåŠŸæ—¶è¿”å›ž[code]OK[/code])。"
+"å°† [code]from[/code] 文件或目录é‡å‘½å且移动到 [code]to[/code] ç›®æ ‡ã€‚ä¸¤ä¸ªå‚æ•°"
+"都应该是文件或目录的相对路径或ç»å¯¹è·¯å¾„。如果目标文件或目录存在且ä¸å—访问ä¿"
+"护,它将被覆盖。\n"
+"返回 [enum Error] 代ç å¸¸é‡ä¹‹ä¸€ï¼ŒæˆåŠŸæ—¶è¿”å›ž [code]OK[/code]。"
#: doc/classes/DTLSServer.xml:4
msgid "Helper class to implement a DTLS server."
@@ -23309,7 +23758,6 @@ msgstr ""
"ä¾›è¯ä¹¦çš„åŒæ—¶æä¾›é¢å¤–çš„ CA è¯ä¹¦æ¯ã€‚"
#: doc/classes/DTLSServer.xml:77
-#, fuzzy
msgid ""
"Try to initiate the DTLS handshake with the given [code]udp_peer[/code] "
"which must be already connected (see [method PacketPeerUDP."
@@ -23318,9 +23766,9 @@ msgid ""
"[constant PacketPeerDTLS.STATUS_HANDSHAKING], as it is normal that 50% of "
"the new connections will be invalid due to cookie exchange."
msgstr ""
-"å°è¯•与给定的 [code]udp_peer[/code] å¯åЍ DTLS æ¡æ‰‹ï¼Œè¯¥ peer 必须已ç»è¿žæŽ¥ï¼ˆå‚"
-"阅 [method PacketPeerUDP.connect_to_host])。\n"
-"[b]注æ„[/b]。你必须检查返回的PacketPeerUDPçš„çŠ¶æ€æ˜¯å¦ä¸º[常é‡PacketPeerDTLS."
+"å°è¯•与给定的[code]udp_peer[/code]å¯åЍDTLSæ¡æ‰‹ï¼Œè¯¥peer必须已ç»è¿žæŽ¥ï¼Œå‚阅"
+"[method PacketPeerUDP.connect_to_host]。\n"
+"[b]注æ„:[/b] 你必须检查返回PacketPeerUDPçš„çŠ¶æ€æ˜¯å¦ä¸º[constant PacketPeerDTLS."
"STATUS_HANDSHAKING],因为正常情况下,50%的新连接会因为cookie交æ¢è€Œæ— æ•ˆã€‚"
#: doc/classes/DynamicFont.xml:4
@@ -23328,7 +23776,6 @@ msgid "DynamicFont renders vector font files at runtime."
msgstr "DynamicFont在è¿è¡Œæ—¶æ¸²æŸ“矢é‡å­—体文件。"
#: doc/classes/DynamicFont.xml:7
-#, fuzzy
msgid ""
"DynamicFont renders vector font files dynamically at runtime instead of "
"using a prerendered texture atlas like [BitmapFont]. This trades the faster "
@@ -23355,21 +23802,24 @@ msgid ""
"In FontForge, use [b]File > Generate Fonts[/b], click [b]Options[/b], choose "
"the desired features then generate the font."
msgstr ""
-"DynamicFont在è¿è¡Œæ—¶åЍæ€åœ°æ¸²æŸ“矢é‡å­—体文件,如TTF或OTFï¼Œè€Œä¸æ˜¯åƒ[BitmapFont]é‚£"
-"样使用预先渲染的纹ç†å›¾é›†ã€‚这是以[BitmapFont]æ›´å¿«çš„åŠ è½½æ—¶é—´æ¥æ¢å–在è¿è¡Œæ—¶æ”¹å˜"
-"字体傿•°çš„æ•ˆæžœå¦‚大å°å’Œé—´è·ã€‚[DynamicFontData]引用字体文件路径。DynamicFont还"
-"支æŒå®šä¹‰ä¸€ä¸ªæˆ–å¤šä¸ªå¤‡ç”¨å­—ä½“ï¼Œå½“æ˜¾ç¤ºä¸»å­—ä½“ä¸æ”¯æŒçš„字符时,将使用这些字体。\n"
-"DynamicFont使用[url=https://www.freetype.org/]FreeType[/url]库进行光栅化。\n"
+"DynamicFont在è¿è¡Œæ—¶åŠ¨æ€æ¸²æŸ“矢é‡å­—ä½“æ–‡ä»¶ï¼Œè€Œä¸æ˜¯åƒ[BitmapFont]那样使用预渲染的"
+"纹ç†å›¾é›†ã€‚使用[BitmapFont]加载时间更快,在è¿è¡Œæ—¶å¯æ”¹å˜å­—体傿•°ï¼Œå¦‚大å°å’Œé—´"
+"è·ã€‚[DynamicFontData]引用字体文件路径。DynamicFont还支æŒå®šä¹‰ä¸€ä¸ªæˆ–多个备用字"
+"ä½“ï¼Œè¿™äº›å­—ä½“å°†åœ¨ä¸»å­—ä½“ä¸æ”¯æŒæ˜¾ç¤ºçš„字符时使用。\n"
+"DynamicFont使用[url=https://www.freetype.org/]FreeType[/url]库进行光栅化处"
+"ç†ã€‚支æŒçš„æ ¼å¼æœ‰TrueType([code].ttf[/code])ã€OpenType([code].otf[/code])"
+"å’ŒWeb Open Font Format 1([code].woff[/code])。而[i]䏿”¯æŒ[/i]Web Open Font "
+"Format 2([code].woff2[/code])。\n"
"[codeblock]\n"
"var dynamic_font = DynamicFont.new()\n"
"dynamic_font.font_data = load(\"res://BarlowCondensed-Bold.ttf\")\n"
-"Dynamic_font.size = 64\n"
+"dynamic_font.size = 64\n"
"$\"Label\".set(\"custom_fonts/font\", dynamic_font)\n"
"[/codeblock]\n"
-"[b]注æ„:[/b] DynamicFont è¿˜ä¸æ”¯æŒä»Žå³åˆ°å·¦æŽ’版ã€è¿žå­—ã€æ–‡æœ¬å¡‘å½¢ã€å¯å˜å­—体和å¯"
-"选字体功能等功能。如果你想把å¯é€‰å­—体功能 \"烘焙\" 到TTF字体文件中,å¯ä»¥ä½¿ç”¨"
-"[url=https://fontforge.org/]FontForge[/url]æ¥å®žçŽ°ã€‚åœ¨FontForge中,使用[b]文件"
-">生æˆå­—体[/b],点击[b]选项[/b],选择所需的特å¾ï¼Œç„¶åŽç”Ÿæˆå­—体。"
+"[b]注æ„:[/b] DynamicFontè¿˜ä¸æ”¯æŒè¯¸å¦‚å­—è·ã€ä»Žå³åˆ°å·¦çš„æŽ’版ã€è¿žæŽ¥è¯ã€æ–‡æœ¬å˜å½¢ã€"
+"å¯å˜å­—体和å¯é€‰å­—体等功能。如果你想把å¯é€‰çš„字体功能 \"烘焙\" 进一个TTF字体文"
+"件,å¯ä½¿ç”¨[url=https://fontforge.org/]FontForge[/url]。在FontForge中,使用[b]"
+"文件>生æˆå­—体[/b],点击[b]选项[/b],选择需è¦çš„功能,然åŽç”Ÿæˆå­—体。"
#: doc/classes/DynamicFont.xml:25
msgid "Adds a fallback font."
@@ -23424,6 +23874,8 @@ msgid ""
"This can be a negative number to make the distance between characters "
"smaller."
msgstr ""
+"æ¯ä¸ªå­—符的é¢å¤–é—´è·ï¼Œå•ä½ä¸ºåƒç´ ã€‚\n"
+"è¿™å¯ä»¥æ˜¯è´Ÿæ•°ï¼Œä½¿å­—符之间的è·ç¦»æ›´å°ã€‚"
#: doc/classes/DynamicFont.xml:88
msgid ""
@@ -23431,6 +23883,8 @@ msgid ""
"extra_spacing_char]) in pixels.\n"
"This can be a negative number to make the distance between words smaller."
msgstr ""
+"空格字符的é¢å¤–é—´è·ï¼Œå•使˜¯åƒç´ ï¼Œé™¤äº†[member extra_spacing_char]。\n"
+"è¿™å¯ä»¥æ˜¯è´Ÿæ•°ï¼Œä½¿å­—符之间的è·ç¦»æ›´å°ã€‚"
#: doc/classes/DynamicFont.xml:92
msgid "Extra spacing at the top in pixels."
@@ -23469,6 +23923,9 @@ msgid ""
"control whose size changes over time, unless a pixel art aesthetic is "
"desired."
msgstr ""
+"如果[code]true[/code],将使用过滤功能。如果字体过度采样被ç¦ç”¨æˆ–无效,这将使字"
+"体在缩放时å˜å¾—模糊,而éžåƒç´ åŒ–ã€‚å½“åœ¨å°ºå¯¸éšæ—¶å˜åŒ–的控件中使用字体时,建议å¯ç”¨"
+"è¿™ä¸ªåŠŸèƒ½ï¼Œé™¤éžæ˜¯åƒç´ è®¾è®¡ã€‚"
#: doc/classes/DynamicFont.xml:111
msgid ""
@@ -23476,6 +23933,8 @@ msgid ""
"appearance when downscaling it if font oversampling is disabled or "
"ineffective."
msgstr ""
+"如果[code]true[/code],则使用mipmapping。如果字体过度采样被ç¦ç”¨æˆ–æ— æ•ˆï¼Œå¯æ”¹å–„"
+"å­—ä½“ç¼©å°æ—¶çš„表现。"
#: doc/classes/DynamicFont.xml:116
msgid "Spacing at the top."
@@ -23532,9 +23991,8 @@ msgid "Use the default font hinting mode (crisper but less smooth)."
msgstr "使用默认的字体æç¤ºæ¨¡å¼ï¼ˆæ›´æ¸…晰但ä¸å¤ªæµç•…)。"
#: doc/classes/EditorExportPlugin.xml:4
-#, fuzzy
msgid "A script that is executed when exporting the project."
-msgstr "导出项目时执行的脚本。"
+msgstr "在导出项目时执行的脚本。"
#: doc/classes/EditorExportPlugin.xml:7
msgid ""
@@ -23544,6 +24002,9 @@ msgid ""
"called at the beginning of the export process and then [method _export_file] "
"is called for each exported file."
msgstr ""
+"æ¯å½“用户导出项目时,会自动激活编辑器的导出æ’件。其最常用在确定哪些文件被包å«"
+"到导出的项目中。对于æ¯ä¸ªæ’件,在导出过程开始时调用[method _export_begin],然"
+"åŽè°ƒç”¨æ¯ä¸ªå¯¼å‡ºæ–‡ä»¶çš„[method _export_file]。"
#: doc/classes/EditorExportPlugin.xml:19
msgid ""
@@ -23554,6 +24015,10 @@ msgid ""
"exported project. [code]flags[/code] is only used when running a runnable "
"profile, e.g. when using native run on Android."
msgstr ""
+"由用户é‡å†™çš„虚方法。在导出开始时它被调用,并æä¾›å…³äºŽå¯¼å‡ºçš„æ‰€æœ‰ä¿¡æ¯ã€‚"
+"[code]features[/code] 是导出的特性列表,[code]is_debug[/code] 是[code]true[/"
+"code] 用于调试构建,[code]path[/code] 是导出项目的目标路径。[code]flags[/"
+"code]åªè¿è¡Œåœ¨å¯è¿è¡Œé…置时使用,例如在Android上使用本地è¿è¡Œã€‚"
#: doc/classes/EditorExportPlugin.xml:25
msgid ""
@@ -23571,6 +24036,10 @@ msgid ""
"Calling [method skip] inside this callback will make the file not included "
"in the export."
msgstr ""
+"由用户é‡å†™çš„虚拟方法。æ¯ä¸ªå¯¼å‡ºçš„æ–‡ä»¶è°ƒç”¨å®ƒï¼Œå¹¶æä¾›å¯ç”¨äºŽè¯†åˆ«æ–‡ä»¶çš„傿•°ã€‚"
+"[code]path[/code] 是文件的路径,[code]type[/code] 是文件所代表的 [Resource] "
+"类型(例如[PackedScene]),[code]features[/code] 是导出的特å¾åˆ—表。\n"
+"在这个回调中调用 [method skip] 将使该文件ä¸åŒ…括在导出中。"
#: doc/classes/EditorExportPlugin.xml:44
msgid ""
@@ -23579,19 +24048,22 @@ msgid ""
"the file. If [code]remap[/code] is [code]true[/code], file will not be "
"exported, but instead remapped to the given [code]path[/code]."
msgstr ""
+"添加一个è¦å¯¼å‡ºçš„自定义文件。[code]path[/code] 是å¯ç”¨äºŽåŠ è½½æ–‡ä»¶çš„è™šæ‹Ÿè·¯å¾„ï¼Œ"
+"[code]file [/code] 是文件的二进制数æ®ã€‚如果 [code]remap[/code] 是 [code] "
+"true [/code],则文件将ä¸ä¼šå¯¼å‡ºï¼Œè€Œæ˜¯é‡æ–°æ˜ å°„到给定的 [code]path [/code]。"
#: doc/classes/EditorExportPlugin.xml:51
-#, fuzzy
msgid ""
"Adds an iOS bundle file from the given [code]path[/code] to the exported "
"project."
-msgstr "将一个è¯ä¹¦ä¿å­˜åˆ°ç»™å®šçš„[code]path[/code],应是一个 \"*.crt \"文件。"
+msgstr "从给定的 [code]path[/code] 添加一个iOSæ†ç»‘文件到导出的项目。"
#: doc/classes/EditorExportPlugin.xml:58
msgid ""
"Adds a C++ code to the iOS export. The final code is created from the code "
"appended by each active export plugin."
msgstr ""
+"å°†C++ä»£ç æ·»åŠ åˆ°iOSå¯¼å‡ºä¸­ã€‚æœ€ç»ˆçš„ä»£ç æ˜¯ç”±æ¯ä¸ªæ¿€æ´»çš„导出æ’件附加的代ç åˆ›å»ºçš„。"
#: doc/classes/EditorExportPlugin.xml:65
msgid ""
@@ -23602,39 +24074,41 @@ msgid ""
"This method should not be used for System libraries as they are already "
"present on the device."
msgstr ""
+"在iOSçš„Xcode项目中链接阶段添加动æ€åº“(*.dylib, *.framework),并将其嵌入到生"
+"æˆçš„二进制文件中。\n"
+"[b]注æ„:[/b] å¯¹äºŽé™æ€åº“(*.a)的工作方å¼ä¸Ž[method add_ios_framework]相åŒã€‚\n"
+"这个方法ä¸åº”用于系统库,因为它们已ç»åœ¨è®¾å¤‡ä¸Šå­˜åœ¨ã€‚"
#: doc/classes/EditorExportPlugin.xml:74
msgid ""
"Adds a static library (*.a) or dynamic library (*.dylib, *.framework) to "
"Linking Phase in iOS's Xcode project."
msgstr ""
+"在iOSçš„Xcodeé¡¹ç›®ä¸­é“¾æŽ¥é˜¶æ®µæ·»åŠ é™æ€åº“(*.a)或动æ€åº“(*.dylib,*.framework)。"
#: doc/classes/EditorExportPlugin.xml:81
-#, fuzzy
msgid "Adds linker flags for the iOS export."
-msgstr "在标签堆中添加一个æ¢è¡Œæ ‡ç­¾ã€‚"
+msgstr "为 iOS 导出添加链接器标志。"
#: doc/classes/EditorExportPlugin.xml:88
msgid "Adds content for iOS Property List files."
msgstr "为iOS属性列表文件添加内容。"
#: doc/classes/EditorExportPlugin.xml:95
-#, fuzzy
msgid "Adds a static lib from the given [code]path[/code] to the iOS project."
-msgstr "将一个è¯ä¹¦ä¿å­˜åˆ°ç»™å®šçš„[code]path[/code],应是一个 \"*.crt \"文件。"
+msgstr "从给定的[code]path[/code]æ·»åŠ é™æ€åº“到iOS项目。"
#: doc/classes/EditorExportPlugin.xml:103
-#, fuzzy
msgid ""
"Adds a shared object with the given [code]tags[/code] and destination "
"[code]path[/code]."
-msgstr "添加具有指定[code]path[/code]和[code]weights[/code]的骨骼."
+msgstr "添加指定 [code]tags[/code] 和目标 [code]path[/code] 的共享对象。"
#: doc/classes/EditorExportPlugin.xml:109
msgid ""
"To be called inside [method _export_file]. Skips the current file, so it's "
"not included in the export."
-msgstr ""
+msgstr "在[method _export_file]ä¸­è°ƒç”¨ã€‚è·³è¿‡å½“å‰æ–‡ä»¶ï¼Œå› æ­¤å®ƒä¸åŒ…括在导出中。"
#: doc/classes/EditorFeatureProfile.xml:4
msgid ""
@@ -23837,6 +24311,9 @@ msgid ""
"may cause a crash. If you wish to hide it or any of its children, use their "
"[member CanvasItem.visible] property."
msgstr ""
+"返回用于显示文件系统的[code]VBoxContainer[/code]。\n"
+"[b]警告:[/b] 这是一个必需的内部节点,移除和释放它å¯èƒ½ä¼šå¯¼è‡´å´©æºƒã€‚如果你想éš"
+"è—它或它的任何å­èŠ‚ç‚¹ï¼Œè¯·ä½¿ç”¨ [member CanvasItem.visible] 属性。"
#: doc/classes/EditorFileDialog.xml:35
msgid ""
@@ -23881,7 +24358,7 @@ msgstr "[EditorFileDialog]å‘用户显示资æºçš„视图格å¼ã€‚"
#: doc/classes/EditorFileDialog.xml:60
msgid ""
"The purpose of the [EditorFileDialog], which defines the allowed behaviors."
-msgstr ""
+msgstr "[EditorFileDialog] 的用途,它定义了å…许的行为。"
#: doc/classes/EditorFileDialog.xml:64
msgid ""
@@ -23977,6 +24454,8 @@ msgid ""
"string such as [code]\"Resource\"[/code] or [code]\"GDScript\"[/code], "
"[i]not[/i] a file extension such as [code]\".gd\"[/code]."
msgstr ""
+"返回文件的资æºç±»åž‹ï¼Œç»™å®šå®Œæ•´è·¯å¾„。这将返回字符串,如[code]\"Resource\"[/code]"
+"或[code]\"GDScript\"[/code],[i]䏿˜¯[/i]文件扩展å,如[code]\".gd\"[/code]。"
#: doc/classes/EditorFileSystem.xml:23
msgid "Gets the root directory object."
@@ -24017,9 +24496,8 @@ msgid "Emitted if the filesystem changed."
msgstr "在文件系统更改的时候触å‘。"
#: doc/classes/EditorFileSystem.xml:80
-#, fuzzy
msgid "Emitted if a resource is reimported."
-msgstr "当资æºè¢«é‡æ–°å¯¼å…¥æ—¶ï¼Œè§¦å‘该信å·ã€‚"
+msgstr "釿–°å¯¼å…¥èµ„æºæ—¶è§¦å‘。"
#: doc/classes/EditorFileSystem.xml:86
msgid ""
@@ -24098,6 +24576,9 @@ msgid ""
"returns a string such as [code]\"Resource\"[/code] or [code]\"GDScript\"[/"
"code], [i]not[/i] a file extension such as [code]\".gd\"[/code]."
msgstr ""
+"返回索引[code]idx[/code]处文件的资æºç±»åž‹ã€‚这将返回字符串,如[code]\"Resource"
+"\"[/code]或[code]\"GDScript\"[/code],[i]䏿˜¯[/i]文件扩展å,如[code]\".gd"
+"\"[/code]。"
#: doc/classes/EditorFileSystemDirectory.xml:77
msgid "Returns the name of this directory."
@@ -24132,7 +24613,6 @@ msgstr ""
"æºç±»åž‹å¯¼å…¥ã€‚"
#: doc/classes/EditorImportPlugin.xml:7
-#, fuzzy
msgid ""
"EditorImportPlugins provide a way to extend the editor's resource import "
"functionality. Use them to import resources from custom files or to provide "
@@ -24143,7 +24623,8 @@ msgid ""
"get_resource_type]. They may optionally specify some import presets that "
"affect the import process. EditorImportPlugins are responsible for creating "
"the resources and saving them in the [code].import[/code] directory (see "
-"[member ProjectSettings.application/config/project_data_dir_name]).\n"
+"[member ProjectSettings.application/config/"
+"use_hidden_project_data_directory]).\n"
"Below is an example EditorImportPlugin that imports a [Mesh] from a file "
"with the extension \".special\" or \".spec\":\n"
"[codeblock]\n"
@@ -24187,15 +24668,16 @@ msgid ""
" return ResourceSaver.save(filename, mesh)\n"
"[/codeblock]"
msgstr ""
-"EditorImportPluginsæä¾›äº†ä¸€ç§æ‰©å±•编辑器资æºå¯¼å…¥åŠŸèƒ½çš„æ–¹æ³•ã€‚ä½¿ç”¨å®ƒä»¬ä»Žè‡ªå®šä¹‰æ–‡"
-"件中导入资æºï¼Œæˆ–æä¾›ç¼–辑器现有导入器的替代方案。用[method EditorPlugin."
+"EditorImportPluginsæä¾›äº†ä¸€ç§æ‰©å±•编辑器资æºå¯¼å…¥åŠŸèƒ½çš„æ–¹æ³•ã€‚ä½¿ç”¨å®ƒä»¬æ¥å¯¼å…¥è‡ªå®š"
+"义文件中的资æºï¼Œæˆ–æˆä¸ºç¼–辑器现有导入器的替代å“。用[method EditorPlugin."
"add_import_plugin]注册你的[EditorPlugin]。\n"
-"EditorImportPlugins通过与特定的文件扩展å和资æºç±»åž‹å…³è”æ¥å·¥ä½œã€‚å‚阅[method "
-"get_recognized_extensions]å’Œ[method get_resource_type]。它们å¯ä»¥é€‰æ‹©æ€§åœ°æŒ‡å®š"
-"一些影å“导入过程的导入预设。EditorImportPlugins负责创建资æºå¹¶å°†å…¶ä¿å­˜åœ¨"
-"[code].import[/code]目录下。\n"
-"䏋颿˜¯ä¸€ä¸ªä»Žæ‰©å±•å为\".special \"或\".spec \"的文件导入[Mesh]çš„"
-"EditorImportPlugin示例。\n"
+"EditorImportPlugins通过与特定的文件扩展å和资æºç±»åž‹ç›¸å…³è”æ¥å·¥ä½œã€‚å‚阅 "
+"[method get_recognized_extensions] å’Œ [method get_resource_type]。其å¯ä»¥é€‰æ‹©"
+"性地指定一些影å“导入过程的导入预置。EditorImportPlugins负责创建资æºå¹¶å°†å…¶ä¿å­˜"
+"在[code].import[/code]目录中,å‚阅[member ProjectSettings.application/config/"
+"use_hidden_project_data_directory]。\n"
+"䏋颿˜¯ä¸€ä¸ªEditorImportPlugin的例å­ï¼Œå®ƒä»Žæ‰©å±•å为 \".special\" 或 \".spec\" çš„"
+"文件中导入一个[Mesh]:\n"
"[codeblock]\n"
"tool\n"
"extends EditorImportPlugin\n"
@@ -24204,7 +24686,7 @@ msgstr ""
" return \"my.special.plugin\"\n"
"\n"
"func get_visible_name():\n"
-" return \"Special Mesh Importer\"\n"
+" return \"Special Mesh\"\n"
"\n"
"func get_recognized_extensions():\n"
" return [\"special\", \"spec\"]\n"
@@ -24234,8 +24716,7 @@ msgstr ""
"reader\n"
"\n"
" var filename = save_path + \".\" + get_save_extension()\n"
-" ResourceSaver.save(filename, mesh)\n"
-" return OK\n"
+" return ResourceSaver.save(filename, mesh)\n"
"[/codeblock]"
#: doc/classes/EditorImportPlugin.xml:51 doc/classes/ResourceImporter.xml:10
@@ -24243,8 +24724,8 @@ msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/plugins/editor/import_plugins."
"html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/plugins/editor/import_plugins."
-"html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/plugins/editor/"
+"import_plugins.html"
#: doc/classes/EditorImportPlugin.xml:58
msgid ""
@@ -24253,12 +24734,11 @@ msgid ""
"[code]default_value[/code], [code]property_hint[/code] (optional), "
"[code]hint_string[/code] (optional), [code]usage[/code] (optional)."
msgstr ""
-"获å–该索引下预设的选项和默认值。返回一个包å«ä»¥ä¸‹é”®åçš„Dictionaries数组。"
-"[code]name[/code], [code]default_value[/code], [code]property_hint[/code](å¯"
-"选), [code]hint_string[/code](å¯é€‰), [code]use[/code](å¯é€‰)。"
+"获å–该索引下预设的选项和默认值。返回一个字典数组,包å«ä»¥ä¸‹é”®å:[code]name[/"
+"code]ã€[code]default_value[/code]ã€[code]property_hint[/code](å¯é€‰ï¼‰ã€"
+"[code]hint_string[/code](å¯é€‰ï¼‰ã€[code]usage[/code](å¯é€‰ï¼‰ã€‚"
#: doc/classes/EditorImportPlugin.xml:64
-#, fuzzy
msgid ""
"Gets the order of this importer to be run when importing resources. "
"Importers with [i]lower[/i] import orders will be called first, and higher "
@@ -24267,8 +24747,10 @@ msgid ""
"code] unless overridden by a specific importer. See [enum ResourceImporter."
"ImportOrder] for some predefined values."
msgstr ""
-"获å–å¯¼å…¥èµ„æºæ—¶è¯¥å¯¼å…¥å™¨çš„è¿è¡Œé¡ºåºã€‚更高的值将在更晚被调用。使用该值å¯ç¡®ä¿å¯¼å…¥"
-"器在已导入ä¾èµ–关系åŽè¿è¡Œã€‚"
+"获å–è¯¥å¯¼å…¥å™¨åœ¨å¯¼å…¥èµ„æºæ—¶çš„è¿è¡Œé¡ºåºã€‚具有[i]较低[/i]导入顺åºçš„导入器将被首先调"
+"用,较高值的将被其åŽè°ƒç”¨ã€‚使用这个æ¥ç¡®ä¿å¯¼å…¥å™¨åœ¨ä¾èµ–项已ç»è¢«å¯¼å…¥åŽæ‰§è¡Œã€‚默认"
+"çš„å¯¼å…¥é¡ºåºæ˜¯ [code]0[/code],除éžè¢«æŒ‡å®šçš„导入器é‡å†™ã€‚å‚阅 [enum "
+"ResourceImporter.ImportOrder] 了解相关预定义的值。"
#: doc/classes/EditorImportPlugin.xml:70
msgid "Gets the unique name of the importer."
@@ -24343,18 +24825,21 @@ msgstr ""
"[code]\"Animation\"[/code]。"
#: doc/classes/EditorImportPlugin.xml:124
-#, fuzzy
msgid ""
"Gets the extension used to save this resource in the [code].import[/code] "
"directory (see [member ProjectSettings.application/config/"
-"project_data_dir_name])."
-msgstr "获å–用于将此资æºä¿å­˜åœ¨ [code].import[/code] 目录中的扩展å。"
+"use_hidden_project_data_directory])."
+msgstr ""
+"获å–用于在[code].import[/code]目录中ä¿å­˜æ­¤èµ„æºçš„æ‰©å±•å,å‚阅[member "
+"ProjectSettings.application/config/use_hidden_project_data_directory]。"
#: doc/classes/EditorImportPlugin.xml:130
msgid ""
"Gets the name to display in the import window. You should choose this name "
"as a continuation to \"Import as\", e.g. \"Import as Special Mesh\"."
msgstr ""
+"获å–在导入窗å£ä¸­æ˜¾ç¤ºçš„å称。你应该选择这个å字作为 \"Import as\" 的延续,例"
+"如 \"Import as Special Mesh\"。"
#: doc/classes/EditorImportPlugin.xml:141
msgid ""
@@ -24375,7 +24860,6 @@ msgid "A tab used to edit properties of the selected node."
msgstr "用于编辑所选节点的属性的选项å¡ã€‚"
#: doc/classes/EditorInspector.xml:7
-#, fuzzy
msgid ""
"The editor inspector is by default located on the right-hand side of the "
"editor. It's used to edit the properties of the selected node. For example, "
@@ -24385,8 +24869,8 @@ msgid ""
"[b]Note:[/b] This class shouldn't be instantiated directly. Instead, access "
"the singleton using [method EditorInterface.get_inspector]."
msgstr ""
-"编辑器检查器默认ä½äºŽç¼–辑器的å³ä¾§ã€‚它是用æ¥ç¼–辑所选节点的属性的。例如,你å¯ä»¥"
-"选择一个节点,如Sprite2D,然åŽé€šè¿‡æ£€æŸ¥å™¨å·¥å…·ç¼–è¾‘å®ƒçš„å˜æ¢ã€‚编辑器检查器是游æˆ"
+"编辑器检查器默认ä½äºŽç¼–辑器的å³ä¾§ã€‚用æ¥ç¼–辑所选节点的属性。例如,你å¯ä»¥é€‰æ‹©ä¸€"
+"个节点,如[Sprite],然åŽé€šè¿‡æ£€æŸ¥å™¨å·¥å…·ç¼–辑其transformå˜æ¢ã€‚编辑器检查器是游æˆ"
"å¼€å‘工作æµç¨‹ä¸­çš„一个é‡è¦å·¥å…·ã€‚\n"
"[b]注æ„:[/b] 这个类ä¸åº”该被直接实例化。而是,使用[method EditorInterface."
"get_inspector]访问å•例。"
@@ -24454,7 +24938,6 @@ msgid "Plugin for adding custom property editors on inspector."
msgstr "用于在检查器上添加自定义属性编辑器的æ’件。"
#: doc/classes/EditorInspectorPlugin.xml:7
-#, fuzzy
msgid ""
"These plugins allow adding custom property editors to [EditorInspector].\n"
"Plugins are registered via [method EditorPlugin.add_inspector_plugin].\n"
@@ -24468,42 +24951,42 @@ msgid ""
"Finally, [method parse_end] will be called.\n"
"On each of these calls, the \"add\" functions can be called."
msgstr ""
-"该æ’ä»¶å…许在[EditorInspector]中添加自定义属性编辑器。\n"
-"æ’件通过[Object EditorPlugin.add_inspector_plugin]方法注册。\n"
-"当编辑对象时,调用[Object can_handle]函数,如果支æŒå¯¹è±¡ç±»åž‹ï¼Œå¿…须返回"
+"该æ’ä»¶å…许å‘[EditorInspector]添加自定义属性编辑器。\n"
+"æ’件通过[method EditorPlugin.add_inspector_plugin]注册。\n"
+"当一个对象被编辑时,[method can_handle]函数被调用,如果支æŒå¯¹è±¡ç±»åž‹ï¼Œå¿…须返回"
"[code]true[/code]。\n"
-"如果支æŒï¼Œå°†è°ƒç”¨[Object parse_begin]函数,å…许在类的开头放置自定义控件。\n"
-"éšåŽï¼Œ[Object parse_category]å’Œ[Object parse_property]将被æ¯ä¸ªç±»åˆ«å’Œå±žæ€§è¢«è°ƒ"
-"用。它们也æä¾›äº†å‘检查器添加自定义控件的功能。\n"
-"最åŽï¼Œ[Object parse_end]将被调用。\n"
-"在æ¯ä¸ªè°ƒç”¨ä¸­ï¼Œéƒ½å¯ä»¥è°ƒç”¨â€œaddâ€å‡½æ•°ã€‚"
+"如果支æŒï¼Œå‡½æ•°[method parse_begin]将被调用,å…许在类的开头放置自定义控件。\n"
+"éšåŽï¼Œè°ƒç”¨æ¯ä¸ªç±»åž‹å’Œå±žæ€§[method parse_category]å’Œ[method parse_property]。其"
+"也æä¾›äº†å‘检查器添加自定义控件的能力。\n"
+"最åŽï¼Œè°ƒç”¨[method parse_end]。\n"
+"在这些调用中,æ¯ä¸€ä¸ªéƒ½å¯ä»¥è°ƒç”¨ \"add\"函数。"
#: doc/classes/EditorInspectorPlugin.xml:16
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/plugins/editor/"
"inspector_plugins.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/plugins/editor/"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/plugins/editor/"
"inspector_plugins.html"
#: doc/classes/EditorInspectorPlugin.xml:23
-#, fuzzy
msgid "Adds a custom control, which is not necessarily a property editor."
-msgstr "添加一个自定义控件,ä¸ä¸€å®šæ˜¯å±žæ€§ç¼–辑器。"
+msgstr "添加自定义控件,它ä¸ä¸€å®šæ˜¯å±žæ€§ç¼–辑器。"
#: doc/classes/EditorInspectorPlugin.xml:31
-#, fuzzy
msgid ""
"Adds a property editor for an individual property. The [code]editor[/code] "
"control must extend [EditorProperty]."
-msgstr "添加一个属性编辑器,这个必须继承[EditorProperty]。"
+msgstr ""
+"为å•独的属性添加属性编辑器。[code]editor[/code]控件必须扩展[EditorProperty]。"
#: doc/classes/EditorInspectorPlugin.xml:40
-#, fuzzy
msgid ""
"Adds an editor that allows modifying multiple properties. The [code]editor[/"
"code] control must extend [EditorProperty]."
-msgstr "添加一个å…许修改多个属性的编辑器,它必须继承[EditorProperty]。"
+msgstr ""
+"添加一个编辑器,å…许修改多个属性。[code]editor[/code]控件必须扩展"
+"[EditorProperty]。"
#: doc/classes/EditorInspectorPlugin.xml:47
msgid "Returns [code]true[/code] if this object can be handled by this plugin."
@@ -24550,7 +25033,7 @@ msgstr ""
"新)加载场景,渲染网格预览,检查和编辑资æºå’Œå¯¹è±¡ã€‚它å…许自定义窗å£ï¼Œä¿å­˜å’Œ"
"ï¼ˆé‡æ–°ï¼‰åŠ è½½åœºæ™¯ï¼Œæ¸²æŸ“ç½‘æ ¼é¢„è§ˆï¼Œæ£€æŸ¥å’Œç¼–è¾‘èµ„æºå’Œå¯¹è±¡ï¼Œå¹¶æä¾›å¯¹"
"[EditorSettings]ã€[EditorFileSystem]ã€[EditorResourcePreview]ã€"
-"[ScriptEditor]ã€ç¼–辑器视å£å’Œåœºæ™¯ä¿¡æ¯çš„访问。\n"
+"[ScriptEditor]ã€ç¼–辑器视窗和场景信æ¯çš„访问。\n"
"[b]注æ„:[/b]这个类ä¸åº”该直接实例化。相å,使用[method EditorPlugin."
"get_editor_interface]访问å•例。"
@@ -24558,14 +25041,13 @@ msgstr ""
msgid ""
"Edits the given [Node]. The node will be also selected if it's inside the "
"scene tree."
-msgstr ""
+msgstr "编辑给定的[Node]。如果该节点在场景树内,将被选中。"
#: doc/classes/EditorInterface.xml:24
msgid "Edits the given [Resource]."
msgstr "编辑给定的[Resource]。"
#: doc/classes/EditorInterface.xml:30
-#, fuzzy
msgid ""
"Returns the main container of Godot editor's window. For example, you can "
"use it to retrieve the size of the container and place your controls "
@@ -24573,8 +25055,9 @@ msgid ""
"[b]Warning:[/b] Removing and freeing this node will render the editor "
"useless and may cause a crash."
msgstr ""
-"返回Godot编辑器窗å£çš„主容器。例如,您å¯ä»¥ç”¨å®ƒæ¥èŽ·å–容器的大å°ï¼Œå¹¶æ®æ­¤æ”¾ç½®æ‚¨çš„"
-"控件。"
+"返回Godot编辑器窗å£çš„主容器。例如,你å¯ä»¥ç”¨å®ƒæ¥æ£€ç´¢å®¹å™¨çš„大å°å¹¶ç›¸åº”地放置你的"
+"控件。\n"
+"[b]警告:[/b] 删除和释放这个节点将使编辑器失效,并å¯èƒ½å¯¼è‡´å´©æºƒã€‚"
#: doc/classes/EditorInterface.xml:37
msgid "Returns the current path being viewed in the [FileSystemDock]."
@@ -24593,13 +25076,17 @@ msgid ""
"code] and [code]interface/editor/custom_display_scale[/code] editor "
"settings. Editor must be restarted for changes to be properly applied."
msgstr ""
+"返回编辑器用户UI的实际比例,[code]1.0[/code]比例为100%。这å¯ä»¥ç”¨æ¥è°ƒæ•´ç”±æ’ä»¶"
+"添加的用户UIçš„ä½ç½®å’Œå°ºå¯¸ã€‚\n"
+"[b]注æ„:[/b]这个值是通过[code]interface/editor/display_scale[/code]å’Œ"
+"[code]interface/editor/custom_display_scale[/code]编辑器设置项æ¥è®¾ç½®ã€‚编辑器"
+"å¿…é¡»é‡æ–°å¯åЍæ‰èƒ½æ­£ç¡®åº”用这些å˜åŒ–。"
#: doc/classes/EditorInterface.xml:56
msgid "Returns the editor's [EditorSettings] instance."
msgstr "返回编辑器的[EditorSettings]实例。"
#: doc/classes/EditorInterface.xml:62
-#, fuzzy
msgid ""
"Returns the main editor control. Use this as a parent for main screens.\n"
"[b]Note:[/b] This returns the main editor control containing the whole "
@@ -24607,8 +25094,10 @@ msgid ""
"[b]Warning:[/b] Removing and freeing this node will render a part of the "
"editor useless and may cause a crash."
msgstr ""
-"返回主编辑器控件。将其作为主å±å¹•的父å±å¹•。\n"
-"[b]注æ„:[/b] è¿™å°†è¿”å›žåŒ…å«æ•´ä¸ªç¼–è¾‘å™¨çš„ä¸»ç¼–è¾‘å™¨æŽ§ä»¶ï¼Œè€Œä¸æ˜¯å…·ä½“çš„2D或3D视窗。"
+"返回主编辑器控件。将其作为主å±å¹•的父控件。\n"
+"[b]注æ„:[/b] è¿™å°†è¿”å›žåŒ…å«æ•´ä¸ªç¼–è¾‘å™¨çš„ä¸»ç¼–è¾‘å™¨æŽ§ä»¶ï¼Œè€Œä¸æ˜¯å…·ä½“çš„ 2D或 3D视"
+"窗。\n"
+"[b]警告:[/b] 删除和释放这个节点将使编辑器的一部分失去作用,并å¯èƒ½å¯¼è‡´å´©æºƒã€‚"
#: doc/classes/EditorInterface.xml:70
msgid ""
@@ -24616,6 +25105,8 @@ msgid ""
"[b]Warning:[/b] Removing and freeing this node will render a part of the "
"editor useless and may cause a crash."
msgstr ""
+"è¿”å›žç¼–è¾‘å™¨çš„æ–‡ä»¶ç³»ç»Ÿé¢æ¿ [FileSystemDock] 实例。\n"
+"[b]警告:[/b] 移除和释放此节点将使编辑器的一部分失去作用,并å¯èƒ½å¯¼è‡´å´©æºƒã€‚"
#: doc/classes/EditorInterface.xml:77
msgid ""
@@ -24623,6 +25114,8 @@ msgid ""
"[b]Warning:[/b] Removing and freeing this node will render a part of the "
"editor useless and may cause a crash."
msgstr ""
+"返回编辑器的属性检查器 [EditorInspector]实例。\n"
+"[b]警告:[/b] 删除和释放这个节点将使编辑器的一部分失去作用,并å¯èƒ½å¯¼è‡´å´©æºƒã€‚"
#: doc/classes/EditorInterface.xml:84
msgid "Returns an [Array] with the file paths of the currently opened scenes."
@@ -24648,6 +25141,8 @@ msgid ""
"[b]Warning:[/b] Removing and freeing this node will render a part of the "
"editor useless and may cause a crash."
msgstr ""
+"返回编辑器的脚本编辑器 [ScriptEditor] 实例。\n"
+"[b]警告:[/b] 删除和释放这个节点将使编辑器的一部分失去作用,并å¯èƒ½å¯¼è‡´å´©æºƒã€‚"
#: doc/classes/EditorInterface.xml:115
msgid ""
@@ -24664,12 +25159,14 @@ msgid "Returns the editor's [EditorSelection] instance."
msgstr "返回编辑器的[EditorSelection]实例。"
#: doc/classes/EditorInterface.xml:130
-#, fuzzy
msgid ""
"Shows the given property on the given [code]object[/code] in the editor's "
"Inspector dock. If [code]inspector_only[/code] is [code]true[/code], plugins "
"will not attempt to edit [code]object[/code]."
-msgstr "åœ¨ç¼–è¾‘å™¨çš„æ£€æŸ¥èµ·é¢æ¿ä¸­æ˜¾ç¤ºç»™å®š[code]object[/code]的属性。"
+msgstr ""
+"在编辑器的属性检查器中显示给定对象 [code]object[/code] 的给定属性。如果 "
+"[code]inspector_only[/code] = [code]true[/code],æ’ä»¶å°†ä¸ä¼šå°è¯•编辑对象 "
+"[code]object[/code]。"
#: doc/classes/EditorInterface.xml:136
msgid ""
@@ -24688,10 +25185,9 @@ msgstr ""
"其目录å称一致。"
#: doc/classes/EditorInterface.xml:151
-#, fuzzy
msgid ""
"Returns mesh previews rendered at the given size as an [Array] of [Texture]s."
-msgstr "以[Texture2D]的数组[Array]å½¢å¼è¿”回以给定尺寸渲染的网格预览。"
+msgstr "返回 [Array] 数组包å«ç»™å®šå°ºå¯¸æ¸²æŸ“的网格预览图[Texture]。"
#: doc/classes/EditorInterface.xml:158
msgid "Opens the scene at the given path."
@@ -24777,7 +25273,7 @@ msgstr ""
#: doc/classes/EditorPlugin.xml:10
msgid "https://docs.godotengine.org/en/3.4/tutorials/plugins/editor/index.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/plugins/editor/index.html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/plugins/editor/index.html"
#: doc/classes/EditorPlugin.xml:18
msgid ""
@@ -24832,7 +25328,6 @@ msgstr ""
"用[method Node.queue_free]释放它。"
#: doc/classes/EditorPlugin.xml:56
-#, fuzzy
msgid ""
"Adds a custom type, which will appear in the list of nodes or resources. An "
"icon can be optionally passed.\n"
@@ -24845,12 +25340,12 @@ msgid ""
"During run-time, this will be a simple object with a script so this function "
"does not need to be called then."
msgstr ""
-"添加自定义类型,该类型将出现在节点或资æºåˆ—表中。å¯ä»¥é€‰æ‹©ä¼ é€’图标。\n"
-"选择给定的节点或资æºåŽï¼Œå°†å®žä¾‹åŒ–基本类型(例如“ Node3Dâ€ï¼Œâ€œ Controlâ€ï¼Œâ€œ "
-"Resourceâ€ï¼‰ï¼Œç„¶åŽå°†è„šæœ¬åŠ è½½å¹¶è®¾ç½®ä¸ºæ­¤å¯¹è±¡ã€‚\n"
-"您å¯ä»¥ä½¿ç”¨è™šæ‹Ÿæ–¹æ³•[method handles]通过检查脚本或使用[code] is [/code]关键字æ¥"
-"æ£€æŸ¥æ˜¯å¦æ­£åœ¨ç¼–辑您的自定义对象。\n"
-"在è¿è¡Œæ—¶ï¼Œè¿™å°†æ˜¯å¸¦æœ‰è„šæœ¬çš„ç®€å•对象,因此无需å†è°ƒç”¨æ­¤å‡½æ•°ã€‚"
+"添加一个自定义类型,它将出现在节点或资æºçš„列表中。å¯ä»¥é€‰æ‹©æŒ‡å®šä¸€ä¸ªå›¾æ ‡ã€‚\n"
+"当给定的节点或资æºè¢«é€‰ä¸­æ—¶ï¼ŒåŸºæœ¬ç±»åž‹å°†è¢«å®žä¾‹åŒ–ï¼ˆå³ \"Spatial\"ã€\"Control"
+"\"ã€\"Resource\"),然åŽè„šæœ¬å°†è¢«åŠ è½½å¹¶è®¾ç½®ä¸ºè¿™ä¸ªå¯¹è±¡ã€‚\n"
+"ä½ å¯ä»¥ä½¿ç”¨è™šæ‹Ÿæ–¹æ³• [method handles] 通过检查脚本或使用 [code]is[/code] 关键字"
+"æ¥æ£€æŸ¥æ˜¯å¦æ­£åœ¨ç¼–辑自定义对象。\n"
+"在è¿è¡Œæ—¶ï¼Œè¿™å°†æ˜¯ä¸€ä¸ªå¸¦æœ‰è„šæœ¬çš„ç®€å•对象,因此ä¸éœ€è¦è°ƒç”¨æ­¤å‡½æ•°ã€‚"
#: doc/classes/EditorPlugin.xml:66
msgid ""
@@ -24858,6 +25353,9 @@ msgid ""
"tasks when the project is being exported.\n"
"See [method add_inspector_plugin] for an example of how to register a plugin."
msgstr ""
+"注册一个新的编辑器导出æ’ä»¶ [EditorExportPlugin]。导出æ’件是用æ¥åœ¨é¡¹ç›®è¢«å¯¼å‡ºæ—¶"
+"执行任务的。\n"
+"å‚è§ [method add_inspector_plugin],了解如何注册一个æ’件的例å­ã€‚"
#: doc/classes/EditorPlugin.xml:74
msgid ""
@@ -24867,6 +25365,11 @@ msgid ""
"add_scene_import_plugin] instead.\n"
"See [method add_inspector_plugin] for an example of how to register a plugin."
msgstr ""
+"注册一个新的编辑器导入æ’ä»¶ [EditorImportPlugin]。导入æ’ä»¶ç”¨äºŽå¯¼å…¥è‡ªå®šä¹‰å’Œä¸æ”¯"
+"æŒçš„资产,作为一个自定义的 [Resource] 资æºç±»åž‹ã€‚\n"
+"[b]注æ„:[/b] 如果你想导入自定义的 3D 资产格å¼ï¼Œè¯·ä½¿ç”¨ [method "
+"add_scene_import_plugin] 代替。\n"
+"å‚è§ [method add_inspector_plugin] 以了解如何注册一个æ’件的例å­ã€‚"
#: doc/classes/EditorPlugin.xml:83
msgid ""
@@ -24888,12 +25391,30 @@ msgid ""
" remove_inspector_plugin(inspector_plugin)\n"
"[/codeblock]"
msgstr ""
+"注册一个新的编辑器属性检查器æ’ä»¶[EditorInspectorPlugin]。检查器æ’件用于扩展 "
+"[EditorInspector] 并为你的对象属性æä¾›è‡ªå®šä¹‰é…置工具。\n"
+"[b]注æ„:[/b] 当你的 [EditorPlugin] 被ç¦ç”¨æ—¶ï¼Œä¸€å®šè¦ä½¿ç”¨ [method "
+"remove_inspector_plugin] æ¥åˆ é™¤æ³¨å†Œçš„ [EditorInspectorPlugin],以防止泄æ¼å’Œå‡º"
+"现æ„外行为。\n"
+"[codeblock]\n"
+"const MyInspectorPlugin = preload(\"res://addons/your_addon/path/to/your/"
+"script.gd\")\n"
+"var inspector_plugin = MyInspectorPlugin.new()\n"
+"\n"
+"func _enter_tree():\n"
+" add_inspector_plugin( inspector_plugin)\n"
+"\n"
+"func _exit_tree():\n"
+" remove_inspector_plugin(inspector_plugin)\n"
+"[/codeblock]"
#: doc/classes/EditorPlugin.xml:101
msgid ""
"Registers a new [EditorSceneImporter]. Scene importers are used to import "
"custom 3D asset formats as scenes."
msgstr ""
+"注册一个新的场景导入器 [EditorSceneImporter]。场景导入器是用æ¥å¯¼å…¥è‡ªå®šä¹‰çš„三"
+"维资产格å¼ä½œä¸ºåœºæ™¯ã€‚"
#: doc/classes/EditorPlugin.xml:108
msgid ""
@@ -24901,6 +25422,9 @@ msgid ""
"custom gizmos to the 3D preview viewport for a [Spatial].\n"
"See [method add_inspector_plugin] for an example of how to register a plugin."
msgstr ""
+"注册一个新的空间辅助器æ’ä»¶ [EditorSpatialGizmoPlugin]。Gizmoæ’件用于为 "
+"[Spatial] 的 3D预览视窗添加自定义的 gizmos。\n"
+"å‚è§ [method add_inspector_plugin] 以了解如何注册一个æ’件的例å­ã€‚"
#: doc/classes/EditorPlugin.xml:119
msgid ""
@@ -24942,6 +25466,10 @@ msgid ""
"code], the project will not run. The run is aborted immediately, so this "
"also prevents all other plugins' [method build] methods from running."
msgstr ""
+"这个方法在编辑器å³å°†è¿è¡Œé¡¹ç›®æ—¶è¢«è°ƒç”¨ã€‚ç„¶åŽï¼Œè¯¥æ’ä»¶å¯ä»¥åœ¨é¡¹ç›®è¿è¡Œå‰æ‰§è¡Œæ‰€éœ€çš„"
+"æ“作。\n"
+"这个方法必须返回一个布尔值。如果这个方法返回 [code]false[/code],项目将ä¸ä¼šè¿"
+"行。è¿è¡Œè¢«ç«‹å³ä¸­æ­¢ï¼Œæ‰€ä»¥è¿™ä¹Ÿä¼šé˜»æ­¢æ‰€æœ‰å…¶ä»–æ’ä»¶çš„[method build] 方法è¿è¡Œã€‚"
#: doc/classes/EditorPlugin.xml:147
msgid ""
@@ -24990,6 +25518,21 @@ msgid ""
" return false\n"
"[/codeblock]"
msgstr ""
+"当2D编辑器的视窗被更新时,由引擎调用。使用 [code]overlay[/code] [Control] 进"
+"行绘制。你å¯ä»¥é€šè¿‡è°ƒç”¨ [method update_overlays] 手动更新视窗。\n"
+"[codeblock]\n"
+"func forward_canvas_draw_over_viewport(overlay):\n"
+" # 在光标ä½ç½®ç”»ä¸€ä¸ªåœ†ã€‚\n"
+" overlay.draw_circle(overlay.get_local_mouse_position(), 64, Color."
+"white)\n"
+"\n"
+"func forward_canvas_gui_input(event):\n"
+" if event is InputEventMouseMotion:\n"
+" # 当光标被移动时,é‡ç»˜è§†çª—。\n"
+" update_overlays()\n"
+" return true\n"
+" return false\n"
+"[/codeblock]"
#: doc/classes/EditorPlugin.xml:192
msgid ""
@@ -24999,6 +25542,10 @@ msgid ""
"You need to enable calling of this method by using [method "
"set_force_draw_over_forwarding_enabled]."
msgstr ""
+"这个方法和 [method forward_canvas_draw_over_viewport] ä¸€æ ·ï¼Œåªæ˜¯å®ƒåœ¨æ‰€æœ‰ä¸œè¥¿"
+"的上é¢ç»˜åˆ¶ã€‚当你需è¦ä¸€ä¸ªé¢å¤–çš„å±‚æ˜¾ç¤ºåœ¨å…¶ä»–ä¸œè¥¿ä¸Šé¢æ—¶ï¼Œè¿™ä¸ªæ–¹æ³•很有用。\n"
+"你需è¦é€šè¿‡ä½¿ç”¨ [method set_force_draw_over_forwarding_enabled] æ¥æ¿€æ´»è¿™ä¸ªæ–¹æ³•"
+"的调用。"
#: doc/classes/EditorPlugin.xml:200
msgid ""
@@ -25024,7 +25571,7 @@ msgid ""
" return forward\n"
"[/codeblock]"
msgstr ""
-"当当å‰ç¼–辑场景中有一个根节点时被调用,[method handles]实现,在2D视å£ä¸­å‘生按"
+"当当å‰ç¼–辑场景中有一个根节点时被调用,[method handles]实现,在2D视窗中å‘生按"
"键输入[InputEvent]。拦截按键输入[InputEvent],如果[code]return true[/code] "
"[EditorPlugin]消耗键值[code]event[/code],å¦åˆ™å°†é”®å€¼[code]event[/code]转å‘ç»™"
"å…¶ä»–Editor类。例å­:\n"
@@ -25063,6 +25610,21 @@ msgid ""
" return false\n"
"[/codeblock]"
msgstr ""
+"当3D编辑器的视窗被更新时,由引擎调用。使用 [code]overlay[/code] 控件 "
+"[Control] 进行绘制。你å¯ä»¥é€šè¿‡è°ƒç”¨ [method update_overlays] 更新覆盖手动更新"
+"视窗。\n"
+"[codeblock]\n"
+"func forward_spatial_draw_over_viewport(overlay):\n"
+" # 在光标ä½ç½®ç”»ä¸€ä¸ªåœ†ã€‚\n"
+" overlay.draw_circle(overlay.get_local_mouse_position(), 64)\n"
+"\n"
+"func forward_spatial_gui_input(camera, event):\n"
+" if event is InputEventMouseMotion:\n"
+" # 当光标被移动时,é‡ç»˜è§†çª—。\n"
+" update_overlays()\n"
+" return true\n"
+" return false\n"
+"[/codeblock]"
#: doc/classes/EditorPlugin.xml:241
msgid ""
@@ -25072,6 +25634,10 @@ msgid ""
"You need to enable calling of this method by using [method "
"set_force_draw_over_forwarding_enabled]."
msgstr ""
+"这个方法和 [method forward_spatial_draw_over_viewport] ä¸€æ ·ï¼Œåªæ˜¯å®ƒåœ¨æ‰€æœ‰ä¸œè¥¿"
+"的上é¢ç»˜åˆ¶ã€‚当你需è¦ä¸€ä¸ªé¢å¤–çš„å±‚æ˜¾ç¤ºåœ¨å…¶ä»–ä¸œè¥¿ä¸Šé¢æ—¶ï¼Œè¿™ä¸ªæ–¹æ³•很有用。\n"
+"你需è¦é€šè¿‡ä½¿ç”¨ [method set_force_draw_over_forwarding_enabled] æ¥æ¿€æ´»è¿™ä¸ªæ–¹æ³•"
+"的调用。"
#: doc/classes/EditorPlugin.xml:250
msgid ""
@@ -25097,8 +25663,8 @@ msgid ""
" return forward\n"
"[/codeblock]"
msgstr ""
-"在当å‰ç¼–辑的场景中存在根节点时调用,实现[æ–¹æ³•å¥æŸ„]并在3D视å£ä¸­å‘生按键输入"
-"[InputEvent]。拦截按键输入[InputEvent],如果[code]return true [/code],则"
+"在当å‰ç¼–辑的场景中存在根节点时调用,实现[method handles]并在3D视窗中å‘生按键"
+"输入[InputEvent]。拦截按键输入[InputEvent],如果[code]return true [/code],则"
"[EditorPlugin]会使用键值[code]event[/code],å¦åˆ™å°†é”®å€¼[code]event[/code]转å‘"
"到其他Editor类。例å­ï¼š\n"
"[codeblock]\n"
@@ -25135,7 +25701,6 @@ msgstr ""
"返回[EditorInterface]对象,该对象使您å¯ä»¥æŽ§åˆ¶Godot编辑器的窗å£åŠå…¶åŠŸèƒ½ã€‚"
#: doc/classes/EditorPlugin.xml:283
-#, fuzzy
msgid ""
"Override this method in your plugin to return a [Texture] in order to give "
"it an icon.\n"
@@ -25152,15 +25717,15 @@ msgid ""
"\"EditorIcons\")\n"
"[/codeblock]"
msgstr ""
-"在æ’件中é‡å†™æ­¤æ–¹æ³•以返回[Texture2D]以为其æä¾›å›¾æ ‡ã€‚\n"
-"对于主å±å¹•æ’件,它显示在å±å¹•顶部,在“ 2Dâ€ï¼Œâ€œ 3Dâ€ï¼Œâ€œè„šæœ¬â€å’Œâ€œ AssetLibâ€æŒ‰é’®çš„å³"
-"侧。\n"
-"ç†æƒ³æƒ…况下,æ’ä»¶å›¾æ ‡åº”ä¸ºç™½è‰²ï¼Œé€æ˜ŽèƒŒæ™¯ï¼Œå¤§å°ä¸º16x16åƒç´ ã€‚\n"
+"在你的æ’ä»¶ä¸­è¦†ç›–è¿™ä¸ªæ–¹æ³•ï¼Œè¿”å›žä¸€ä¸ªçº¹ç† [Texture],以便给它一个图标。\n"
+"对于主界é¢çš„æ’ä»¶ï¼Œå®ƒå‡ºçŽ°åœ¨å±å¹•的顶部,在 \"2D\"ã€\"3D\"ã€\"Script \"å’Œ "
+"\"AssetLib \"按钮的å³è¾¹ã€‚\n"
+"ç†æƒ³æƒ…况下,æ’ä»¶çš„å›¾æ ‡åº”è¯¥æ˜¯é€æ˜ŽèƒŒæ™¯çš„白色,尺寸为16x16åƒç´ ã€‚\n"
"[codeblock]\n"
"func get_plugin_icon():\n"
-" # You can use a custom icon:\n"
+" # ä½ å¯ä»¥ä½¿ç”¨ä¸€ä¸ªè‡ªå®šä¹‰çš„图标。\n"
" return preload(\"res://addons/my_plugin/my_plugin_icon.svg\")\n"
-" # Or use a built-in icon:\n"
+" # 或者使用一个内置的图标。\n"
" return get_editor_interface().get_base_control().get_icon(\"Node\", "
"\"EditorIcons\")\n"
"[/codeblock]"
@@ -25177,15 +25742,15 @@ msgstr ""
"侧。"
#: doc/classes/EditorPlugin.xml:305
-#, fuzzy
msgid ""
"Gets the Editor's dialogue used for making scripts.\n"
"[b]Note:[/b] Users can configure it before use.\n"
"[b]Warning:[/b] Removing and freeing this node will render a part of the "
"editor useless and may cause a crash."
msgstr ""
-"获å–ç”¨äºŽåˆ¶ä½œè„šæœ¬çš„ç¼–è¾‘å™¨å¯¹è¯æ¡†ã€‚\n"
-"[b]注æ„:[/b]用户å¯ä»¥åœ¨ä½¿ç”¨å‰å¯¹å…¶è¿›è¡Œé…置。"
+"获å–ç”¨äºŽåˆ›å»ºè„šæœ¬çš„ç¼–è¾‘å™¨å¯¹è¯æ¡†ã€‚\n"
+"[b]注æ„:[/b] 用户å¯ä»¥åœ¨ä½¿ç”¨å‰å¯¹å…¶è¿›è¡Œé…置。\n"
+"[b]警告:[/b] 移除和释放这个节点将使编辑器的一部分失去作用,并å¯èƒ½å¯¼è‡´å´©æºƒã€‚"
#: doc/classes/EditorPlugin.xml:313
msgid ""
@@ -25241,9 +25806,8 @@ msgid "Minimizes the bottom panel."
msgstr "最å°åŒ–åº•éƒ¨é¢æ¿ã€‚"
#: doc/classes/EditorPlugin.xml:352
-#, fuzzy
msgid "Makes a specific item in the bottom panel visible."
-msgstr "将特定资æºç±»åž‹ä¿å­˜åˆ°æ–‡ä»¶ã€‚"
+msgstr "ä½¿åº•éƒ¨é¢æ¿ä¸­çš„一个特定项目å¯è§ã€‚"
#: doc/classes/EditorPlugin.xml:359
msgid ""
@@ -25283,33 +25847,28 @@ msgstr "ä»Žæ‰©å±•é¢æ¿ä¸­åˆ é™¤æŽ§ä»¶ã€‚您必须手动[method Node.queue_free]
#: doc/classes/EditorPlugin.xml:402
msgid "Removes a custom type added by [method add_custom_type]."
-msgstr "删除由[method add_custom_type]添加的自定义类型。"
+msgstr "删除由 [method add_custom_type] 添加的自定义类型。"
#: doc/classes/EditorPlugin.xml:409
-#, fuzzy
msgid "Removes an export plugin registered by [method add_export_plugin]."
-msgstr "删除由[method add_custom_type]添加的自定义类型。"
+msgstr "删除由 [method add_export_plugin] 注册的导出æ’件。"
#: doc/classes/EditorPlugin.xml:416
-#, fuzzy
msgid "Removes an import plugin registered by [method add_import_plugin]."
-msgstr "删除由[method add_custom_type]添加的自定义类型。"
+msgstr "删除由 [method add_import_plugin] 注册的导入æ’件。"
#: doc/classes/EditorPlugin.xml:423
-#, fuzzy
msgid "Removes an inspector plugin registered by [method add_import_plugin]"
-msgstr "删除由[method add_custom_type]添加的自定义类型。"
+msgstr "删除由 [method add_import_plugin] 注册的检查器æ’ä»¶"
#: doc/classes/EditorPlugin.xml:430
-#, fuzzy
msgid ""
"Removes a scene importer registered by [method add_scene_import_plugin]."
-msgstr "删除由[method add_custom_type]添加的自定义类型。"
+msgstr "删除由 [method add_scene_import_plugin] 注册的场景导入器。"
#: doc/classes/EditorPlugin.xml:437
-#, fuzzy
msgid "Removes a gizmo plugin registered by [method add_spatial_gizmo_plugin]."
-msgstr "删除由[method add_custom_type]添加的自定义类型。"
+msgstr "删除由 [method add_spatial_gizmo_plugin] 注册的控制器æ’件。"
#: doc/classes/EditorPlugin.xml:444
msgid "Removes a menu [code]name[/code] from [b]Project > Tools[/b]."
@@ -25330,6 +25889,9 @@ msgid ""
"editor when their viewports are updated. You need to call this method only "
"once and it will work permanently for this plugin."
msgstr ""
+"å¯ç”¨2D编辑器的 [method forward_canvas_force_draw_over_viewport] å’Œ3D编辑器的 "
+"[method forward_spatial_force_draw_over_viewport] 在其视窗更新时的调用。你åª"
+"需è¦è°ƒç”¨è¿™ä¸ªæ–¹æ³•一次,它就会对这个æ’件永久起作用。"
#: doc/classes/EditorPlugin.xml:462
msgid ""
@@ -25357,6 +25919,11 @@ msgid ""
"forward_spatial_draw_over_viewport] and [method "
"forward_spatial_force_draw_over_viewport] to be called."
msgstr ""
+"更新 2D 和 3D 编辑器视窗的覆盖层。导致方法 [method "
+"forward_canvas_draw_over_viewport]ã€[method "
+"forward_canvas_force_draw_over_viewport]ã€[method "
+"forward_spatial_draw_over_viewport] 和 [method "
+"forward_spatial_force_draw_over_viewport] 被调用。"
#: doc/classes/EditorPlugin.xml:490
msgid ""
@@ -25432,13 +25999,15 @@ msgstr ""
#: doc/classes/EditorProperty.xml:44
msgid "Must be implemented to provide a custom tooltip to the property editor."
-msgstr ""
+msgstr "必须实现为属性编辑器æä¾›ä¸€ä¸ªè‡ªå®šä¹‰å·¥å…·æç¤ºã€‚"
#: doc/classes/EditorProperty.xml:51
msgid ""
"Puts the [code]editor[/code] control below the property label. The control "
"must be previously added using [method Node.add_child]."
msgstr ""
+"å°† [code]editor[/code] 编辑器控件放在属性标签的下é¢ã€‚该控件必须事先用 "
+"[method Node.add_child] 添加。"
#: doc/classes/EditorProperty.xml:57
msgid "When this virtual function is called, you must update your editor."
@@ -25456,14 +26025,13 @@ msgid ""
msgstr "åœ¨æ£€æŸ¥é¢æ¿ä½¿ç”¨ï¼Œå½“属性为å¯é€‰ä¸­æ—¶ï¼Œè®¾ç½®å±žæ€§ä¸º[code]true[/code]。"
#: doc/classes/EditorProperty.xml:69
-#, fuzzy
msgid ""
"Used by the inspector, set to [code]true[/code] when the property is drawn "
"with the editor theme's warning color. This is used for editable children's "
"properties."
msgstr ""
-"åœ¨æ£€æŸ¥é¢æ¿ä½¿ç”¨ï¼Œå½“属性必须用错误颜色绘制时,设置为[code]true[/code]。这用于å¯"
-"编辑的å­å±žæ€§ã€‚"
+"由检查器使用,当属性用编辑器主题的警告颜色ç€è‰²æ—¶ï¼Œè®¾ç½®ä¸º[code]true[/code]。这"
+"用于å¯ç¼–辑的å­èŠ‚ç‚¹çš„å±žæ€§ã€‚"
#: doc/classes/EditorProperty.xml:72
msgid ""
@@ -25523,7 +26091,7 @@ msgstr "选择时触å‘。内部使用。"
#: doc/classes/EditorResourcePicker.xml:4
msgid "Godot editor's control for selecting [Resource] type properties."
-msgstr ""
+msgstr "Godot 编辑器用于选择 [Resource] 类型属性的控件。"
#: doc/classes/EditorResourcePicker.xml:7
msgid ""
@@ -25534,6 +26102,11 @@ msgid ""
"[b]Note:[/b] This [Control] does not include any editor for the resource, as "
"editing is controlled by the Inspector dock itself or sub-Inspectors."
msgstr ""
+"æ­¤ [Control] 节点用于编辑器的属性检查器以å…许编辑 [Resource] 类型属性。它æä¾›"
+"了创建ã€åŠ è½½ã€ä¿å­˜å’Œè½¬æ¢èµ„æºçš„选项。å¯ä»¥ä¸Ž [EditorInspectorPlugin] 检查器æ’ä»¶"
+"ä¸€èµ·ä½¿ç”¨ä»¥é‡æ–°åˆ›å»ºç›¸åŒçš„行为。\n"
+"[b]注æ„:[/b]这个 [Control] ä¸åŒ…括资æºçš„任何编辑器,因为编辑是由属性检查器本"
+"èº«æˆ–å­æ£€æŸ¥å™¨æŽ§åˆ¶çš„。"
#: doc/classes/EditorResourcePicker.xml:32
msgid ""
@@ -25541,12 +26114,16 @@ msgid ""
"[member base_type]. If the [member base_type] is empty, an empty list is "
"returned."
msgstr ""
+"返回一个与 [member base_type] 对应的所有å…许的类型和å­ç±»åž‹çš„列表。如果 "
+"[member base_type] 是空,将返回一个空的列表。"
#: doc/classes/EditorResourcePicker.xml:46
msgid ""
"This virtual method can be implemented to handle context menu items not "
"handled by default. See [method set_create_options]."
msgstr ""
+"此虚拟方法å¯ä»¥å®žçް处ç†é»˜è®¤æœªå¤„ç†çš„上下文èœå•项目。å‚è§ [method "
+"set_create_options]。"
#: doc/classes/EditorResourcePicker.xml:53
msgid ""
@@ -25557,44 +26134,53 @@ msgid ""
"[b]Note:[/b] Implement [method handle_menu_selected] to handle these custom "
"items."
msgstr ""
+"在更新 [EditorResourcePicker] 的上下文èœå•时调用这个虚拟方法。实现这个方法å¯"
+"以用你自己的选项覆盖 \"新建... \"项目。[code]menu_node[/code] 是对 "
+"[PopupMenu] èœå•弹窗节点的引用。\n"
+"[b]注æ„:[/b] 实现 [method handle_menu_selected] æ¥å¤„ç†è¿™äº›è‡ªå®šä¹‰é¡¹ç›®ã€‚"
#: doc/classes/EditorResourcePicker.xml:61
msgid ""
"Sets the toggle mode state for the main button. Works only if [member "
"toggle_mode] is set to [code]true[/code]."
msgstr ""
+"è®¾ç½®ä¸»æŒ‰é’®çš„åˆ‡æ¢æ¨¡å¼çжæ€ã€‚åªæœ‰å½“ [member toggle_mode] 被设置为 [code]true[/"
+"code] æ—¶æ‰èµ·ä½œç”¨ã€‚"
#: doc/classes/EditorResourcePicker.xml:67
msgid ""
"The base type of allowed resource types. Can be a comma-separated list of "
"several options."
-msgstr ""
+msgstr "å…许资æºç±»åž‹çš„基本类型。å¯ä»¥æ˜¯å‡ ä¸ªé€‰é¡¹çš„逗å·åˆ†ç¦»åˆ—表。"
#: doc/classes/EditorResourcePicker.xml:70
-#, fuzzy
msgid "If [code]true[/code], the value can be selected and edited."
-msgstr "如果[code]true[/code],物体å¯ä»¥è¢«å…‰çº¿æŽ¢æµ‹åˆ°ã€‚"
+msgstr "如果 [code]true[/code],则å¯ä»¥é€‰æ‹©å’Œç¼–辑该值。"
#: doc/classes/EditorResourcePicker.xml:73
-#, fuzzy
msgid "The edited resource value."
-msgstr "è¦ä½¿ç”¨çš„[NavigationMesh]资æºã€‚"
+msgstr "已编辑的资æºå€¼ã€‚"
#: doc/classes/EditorResourcePicker.xml:76
msgid ""
"If [code]true[/code], the main button with the resource preview works in the "
"toggle mode. Use [method set_toggle_pressed] to manually set the state."
msgstr ""
+"如果 [code]true[/code],带有资æºé¢„è§ˆçš„ä¸»æŒ‰é’®åœ¨åˆ‡æ¢æ¨¡å¼ä¸‹å·¥ä½œã€‚使用 [method "
+"set_toggle_pressed] æ¥æ‰‹åŠ¨è®¾ç½®çŠ¶æ€ã€‚"
#: doc/classes/EditorResourcePicker.xml:83
-#, fuzzy
msgid "Emitted when the value of the edited resource was changed."
-msgstr "æ¯å½“资æºå‘生å˜åŒ–时就会å‘出。"
+msgstr "å½“æ­£åœ¨ç¼–è¾‘çš„èµ„æºæ”¹å˜å€¼æ—¶å‘出。"
-#: doc/classes/EditorResourcePicker.xml:89
-#, fuzzy
-msgid "Emitted when the resource value was set and user clicked to edit it."
-msgstr "åœ¨æ£€æŸ¥å™¨ä¸­é€‰æ‹©èµ„æºæ—¶è§¦å‘。"
+#: doc/classes/EditorResourcePicker.xml:90
+msgid ""
+"Emitted when the resource value was set and user clicked to edit it. When "
+"[code]edit[/code] is [code]true[/code], the signal was caused by the context "
+"menu \"Edit\" option."
+msgstr ""
+"当资æºå€¼è¢«è®¾ç½®ï¼Œå¹¶ä¸”用户点击它编辑时触å‘。当[code]edit[/code]为[code]true[/"
+"code]æ—¶ï¼Œè¯¥ä¿¡å·æ˜¯ç”±ä¸Šä¸‹æ–‡èœå•çš„ \"Edit\" 选项引起。"
#: doc/classes/EditorResourcePreview.xml:4
msgid "Helper to generate previews of resources or files."
@@ -25633,6 +26219,13 @@ msgid ""
"[code]receiver_func[/code] will still be called, but the preview will be "
"null."
msgstr ""
+"å°†æ­£åœ¨ç¼–è¾‘çš„èµ„æº [code]resource[/code] 排队进行预览。一旦预览准备好了,接收"
+"器 [code]receiver[/code] 的 [code]receiver_func[/code] 将被调用。"
+"[code]receiver_func[/code] 必须接å—ä»¥ä¸‹å››ä¸ªå‚æ•°ã€‚[String] path, [Texture] "
+"preview, [Texture] thumbnail_preview, [Variant] userdata。[code]userdata[/"
+"code] å¯ä»¥æ˜¯ä»»ä½•东西,并将在 [code]receiver_func[/code] 被调用时返回。\n"
+"[b]注æ„:[/b]如果无法创建预览,[code]receiver_func[/code] ä»å°†è¢«è°ƒç”¨ï¼Œä½†é¢„览"
+"将为空。"
#: doc/classes/EditorResourcePreview.xml:45
msgid ""
@@ -25646,6 +26239,14 @@ msgid ""
"[code]receiver_func[/code] will still be called, but the preview will be "
"null."
msgstr ""
+"å°†ä½äºŽè·¯å¾„ [code]path[/code] çš„èµ„æºæ–‡ä»¶æŽ’队以进行预览。预览准备好åŽï¼Œå°†è°ƒç”¨æŽ¥"
+"收器 [code]receiver[/code] 的 [code]receiver_func[/code] 。"
+"[code]receiver_func[/code] å¿…é¡»å¸¦æœ‰ä»¥ä¸‹å››ä¸ªå‚æ•°ï¼š[String] path, [Texture] "
+"preview, [Texture] thumbnail_preview, [Variant] userdataã€‚ç”¨æˆ·æ•°æ® "
+"[code]userdata[/code] å¯ä»¥æ˜¯ä»»æ„的,并将在调用 [code]receiver_func[/code] è¿”"
+"回。\n"
+"[b]注æ„:[/b] 如果无法创建预览,则ä»å°†è°ƒç”¨ [code]receiver_func[/code],但预览"
+"将无效。"
#: doc/classes/EditorResourcePreview.xml:53
msgid "Removes a custom preview generator."
@@ -25703,8 +26304,8 @@ msgid ""
"Care must be taken because this function is always called from a thread (not "
"the main thread)."
msgstr ""
-"直接从具有指定大å°çš„路径生æˆé¢„览。实现此æ“作是å¯é€‰çš„,因为默认代ç å°†åŠ è½½å¹¶è°ƒ"
-"用[method generate]。\n"
+"直接从指定大å°çš„路径生æˆé¢„览。实现此æ“作是å¯é€‰çš„,因为默认代ç å°†åŠ è½½å¹¶è°ƒç”¨"
+"[method generate]。\n"
"è¿”å›žç©ºçº¹ç†æ˜¯å¤±è´¥çš„好方法,并让å¦ä¸€ä¸ªç”Ÿæˆå™¨è´Ÿè´£ã€‚\n"
"注æ„!ï¼Œå› ä¸ºå§‹ç»ˆä»Žçº¿ç¨‹ï¼ˆè€Œä¸æ˜¯ä¸»çº¿ç¨‹ï¼‰è°ƒç”¨æ­¤å‡½æ•°ã€‚"
@@ -25734,7 +26335,6 @@ msgid "FBX 3D asset importer."
msgstr "FBX 3D资产导入器。"
#: modules/fbx/doc_classes/EditorSceneImporterFBX.xml:7
-#, fuzzy
msgid ""
"This is an FBX 3D asset importer with full support for most FBX features.\n"
"If exporting a FBX scene from Autodesk Maya, use these FBX export settings:\n"
@@ -25761,30 +26361,29 @@ msgid ""
"- Binary format in FBX 2017\n"
"[/codeblock]"
msgstr ""
-"这是一个基于[url=http://assimp.org/]Assimp[/url]çš„FBX 3D资æºå¯¼å…¥å™¨ã€‚å®ƒç›®å‰æœ‰"
-"许多已知的é™åˆ¶ï¼Œå¹¶ä¸”坹陿€ç½‘格效果最好。大多数动画网格无法正确导入。\n"
-"如果从 Autodesk Maya 导出 FBX 场景,请使用这些 FBX 导出设置。\n"
-"[codeblock]\n"
-"- Smoothing Groups\n"
-"- Smooth Mesh\n"
-"- Triangluate (for meshes with blend shapes)\n"
-"- Bake Animation\n"
-"- Resample All\n"
-"- Deformed Models\n"
-"- Skins\n"
-"- Blend Shapes\n"
-"- Curve Filters\n"
-"- Constant Key Reducer\n"
-"- Auto Tangents Only\n"
-"- *Do not check* Constraints (as it will break the file)\n"
-"- Can check Embed Media (embeds textures into the exported FBX file)\n"
-" - Note that when importing embedded media, the texture and mesh will be a "
-"single immutable file.\n"
-" - You will have to re-export then re-import the FBX if the texture has "
-"changed.\n"
-"- Units: Centimeters\n"
-"- Up Axis: Y\n"
-"- Binary format in FBX 2017\n"
+"这是一个FBX 3D资产导入器,完全支æŒå¤§å¤šæ•°FBX功能。\n"
+"如果从Autodesk Maya导出一个FBX场景,请使用这些FBX导出设置:\n"
+"[codeblock]\n"
+"- Smoothing Groups 平滑化组\n"
+"- Smooth Mesh 平滑网格\n"
+"- Triangluate 三角(用于具有混åˆå½¢çŠ¶çš„ç½‘æ ¼)\n"
+"- Bake Animation 烘焙动画\n"
+"- Resample All 全部é‡é‡‡æ ·\n"
+"- Deformed Models å˜å½¢çš„æ¨¡åž‹\n"
+"- Skins 蒙皮\n"
+"- Blend Shapes æ··åˆå½¢çж\n"
+"- Curve Filters 曲线过滤器\n"
+"- Constant Key Reducer æ’定键值å‡å°‘器\n"
+"- Auto Tangents Only 仅自动切线\n"
+"- *Do not check* Constraints (as it will break the file) *ä¸è¦å‹¾é€‰*约æŸï¼ˆå› ä¸º"
+"ä¼šç ´åæ–‡ä»¶ï¼‰ã€‚\n"
+"- Can check Embed Media (embeds textures into the exported FBX file) å¯ä»¥å‹¾é€‰"
+"嵌入媒介(将纹ç†åµŒå…¥åˆ°å¯¼å‡ºçš„FBX文件中)。\n"
+" - 注æ„,当导入嵌入媒介时,纹ç†å’Œç½‘格将是一个å•一的ä¸å¯æ›´æ”¹çš„æ–‡ä»¶ã€‚\n"
+" - 如果纹ç†å‘生了å˜åŒ–,你将ä¸å¾—ä¸é‡æ–°å¯¼å‡ºç„¶åŽé‡æ–°å¯¼å…¥FBX。\n"
+"- Units: Centimeters å•ä½ï¼šåˆ†ç±³\n"
+"- Up Axis: Y 上轴:Y\n"
+"-Binary format in FBX 2017 二进制格å¼ä¸º2017 FBX\n"
"[/codeblock]"
#: doc/classes/EditorScenePostImport.xml:4
@@ -25845,7 +26444,7 @@ msgid ""
"https://docs.godotengine.org/en/3.4/getting_started/workflow/assets/"
"importing_scenes.html#custom-script"
msgstr ""
-"https://docs.godotengine.org/en/3.4/getting_started/workflow/assets/"
+"https://docs.godotengine.org/zh_CN/stable/getting_started/workflow/assets/"
"importing_scenes.html#custom-script"
#: doc/classes/EditorScenePostImport.xml:35
@@ -25869,7 +26468,6 @@ msgid "Base script that can be used to add extension functions to the editor."
msgstr "å¯ç”¨äºŽä¸ºç¼–辑器添加扩展功能的基础脚本。"
#: doc/classes/EditorScript.xml:7
-#, fuzzy
msgid ""
"Scripts extending this class and implementing its [method _run] method can "
"be executed from the Script Editor's [b]File > Run[/b] menu option (or by "
@@ -25889,20 +26487,21 @@ msgid ""
"is visible in the console window started with the Editor (stdout) instead of "
"the usual Godot [b]Output[/b] dock."
msgstr ""
-"å¯ä»¥é€šè¿‡è„šæœ¬ç¼–è¾‘å™¨çš„[b] File> Run [/b]èœå•选项(或通过按[kbd] Ctrl + Shift + "
-"X [/kbd]ï¼‰æ¥æ‰§è¡Œæ‰©å±•此类并实现其[method _run]方法的脚本。这对于将自定义的编辑"
-"器内功能添加到Godotå¾ˆæœ‰ç”¨ã€‚å¯¹äºŽæ›´å¤æ‚的添加,请考虑改为使用[EditorPlugin]。\n"
-"[b]注æ„:[/b]扩展脚本需è¦å¯ç”¨[code]tool[/code]模å¼ã€‚\n"
+"扩展该类并实现其 [method _run] 方法的脚本å¯ä»¥åœ¨ç¼–辑器è¿è¡Œæ—¶é€šè¿‡è„šæœ¬ç¼–è¾‘å™¨çš„ "
+"[b]File > Run[/b] èœå•选项(或按 [code]Ctrl+Shift+X[/code]ï¼‰æ‰§è¡Œã€‚è¿™å¯¹äºŽå‘ "
+"Godotæ·»åŠ è‡ªå®šä¹‰çš„ç¼–è¾‘å†…åŠŸèƒ½å¾ˆæœ‰ç”¨ã€‚å¯¹äºŽæ›´å¤æ‚的添加,å¯ä»¥è€ƒè™‘使用 "
+"[EditorPlugin] 代替。\n"
+"[b]注æ„:[/b] 扩展脚本需è¦å¯ç”¨ [code]tool[/code] 工具模å¼ã€‚\n"
"[b]示例脚本:[/b]\n"
-"[codeblock]\n"
+"[codeeblock]\n"
"tool\n"
"extends EditorScript\n"
"\n"
"func _run():\n"
" print(\"Hello from the Godot Editor!\")\n"
"[/codeblock]\n"
-"[b]注æ„:[/b]该脚本在编辑器上下文中è¿è¡Œï¼Œè¿™æ„味ç€è¾“出在以编辑器(stdout)开始"
-"的控制å°çª—å£ä¸­å¯è§ï¼Œè€Œä¸æ˜¯é€šå¸¸çš„Godot [b] Output [/b]åœé æ ã€‚"
+"[b]注æ„:[/b] 脚本在编辑器上下文中è¿è¡Œï¼Œè¿™æ„味ç€è¾“出在与编辑器一起å¯åŠ¨çš„æŽ§åˆ¶"
+"å°çª—å£ï¼ˆstdoutï¼‰ï¼Œè€Œä¸æ˜¯é€šå¸¸çš„ Godot [b]输出[/b]颿¿ 。"
#: doc/classes/EditorScript.xml:25
msgid "This method is executed by the Editor when [b]File > Run[/b] is used."
@@ -25929,6 +26528,7 @@ msgid ""
"Godot editor's control for selecting the [code]script[/code] property of a "
"[Node]."
msgstr ""
+"Godot 编辑器的控件,用于选择节点 [Node] 的脚本 [code] script [/code] 属性。"
#: doc/classes/EditorScriptPicker.xml:7
msgid ""
@@ -25941,10 +26541,16 @@ msgid ""
"[b]Note:[/b] You must set the [member script_owner] for the custom context "
"menu items to work."
msgstr ""
+"与 [EditorResourcePicker] 类似,这个 [Control] èŠ‚ç‚¹åœ¨ç¼–è¾‘å™¨çš„æ£€æŸ¥å™¨é¢æ¿ä¸­ä½¿"
+"用,但åªç”¨äºŽç¼–辑 [Node] çš„ [code]script[/code] å±žæ€§ã€‚åˆ›å»ºåŒ…å«æ‰€æœ‰å¯èƒ½å­ç±»åž‹çš„"
+"新资æºçš„默认选项 被替æ¢ä¸ºæ‰“开“附加节点脚本â€å¯¹è¯æ¡†çš„专用按钮。å¯ä»¥ä¸Ž "
+"[EditorInspectorPlugin] ä¸€èµ·ä½¿ç”¨ä»¥é‡æ–°åˆ›å»ºç›¸åŒçš„行为。\n"
+"[b]注æ„:[/b] 你必须设置 [member script_owner] æ‰èƒ½è®©è‡ªå®šä¹‰çš„上下文èœå•项呿Œ¥"
+"作用。"
#: doc/classes/EditorScriptPicker.xml:16
msgid "The owner [Node] of the script property that holds the edited resource."
-msgstr ""
+msgstr "æŒæœ‰è¢«ç¼–辑资æºçš„脚本属性的所有者 [Node]。"
#: doc/classes/EditorSelection.xml:4
msgid "Manages the SceneTree selection in the editor."
@@ -25967,6 +26573,9 @@ msgid ""
"inspector. If you want to edit a node, use [method EditorInterface."
"edit_node]."
msgstr ""
+"将一个节点添加到选择中。\n"
+"[b]注æ„:[/b]新选择的节点ä¸ä¼šåœ¨æ£€æŸ¥å™¨ä¸­è‡ªåŠ¨è¢«ç¼–è¾‘ã€‚å¦‚æžœä½ æƒ³ç¼–è¾‘ä¸€ä¸ªèŠ‚ç‚¹ï¼Œè¯·ä½¿"
+"用 [method EditorInterface.edit_node]。"
#: doc/classes/EditorSelection.xml:24
msgid "Clear the selection."
@@ -26061,7 +26670,7 @@ msgid ""
"[/codeblock]"
msgstr ""
"å°†è‡ªå®šä¹‰å±žæ€§ä¿¡æ¯æ·»åŠ åˆ°å±žæ€§ã€‚è¯¥è¯å…¸å¿…须包å«ï¼š\n"
-"-[code]åç§°[/code]:[字符串](属性å称)\n"
+"-[code]åç§°[/code]:[String](属性å称)\n"
"-[code]类型[/code]:[int](请å‚阅[enum Variant.Type])\n"
"-(å¯é€‰ï¼‰[code]æç¤º[/code]:[int](请å‚阅[enum PropertyHint])和[code] "
"hint_string [/code]:[String]\n"
@@ -26213,19 +26822,17 @@ msgstr ""
"é…ç½®å˜åŒ–时更新逻辑。"
#: doc/classes/EditorSpatialGizmo.xml:4
-#, fuzzy
msgid "Custom gizmo for editing Spatial objects."
-msgstr "用于编辑Node3D对象的自定义å°å·¥å…·ã€‚"
+msgstr "用于编辑空间对象的自定义å°å·¥å…·ã€‚"
#: doc/classes/EditorSpatialGizmo.xml:7
-#, fuzzy
msgid ""
"Custom gizmo that is used for providing custom visualization and editing "
"(handles) for 3D Spatial objects. See [EditorSpatialGizmoPlugin] for more "
"information."
msgstr ""
-"自定义å°å·¥å…·ï¼Œç”¨äºŽä¸ºNode3D对象æä¾›è‡ªå®šä¹‰å¯è§†åŒ–å’Œç¼–è¾‘ï¼ˆå¥æŸ„)。更多信æ¯è¯·å‚阅"
-"[EditorNode3DGizmoPlugin]。"
+"自定义å°å·¥å…·ï¼Œç”¨äºŽä¸º 3D Spatial 对象æä¾›è‡ªå®šä¹‰å¯è§†åŒ–和编辑(手柄)。更多信æ¯"
+"请å‚阅 [EditorNode3DGizmoPlugin]。"
#: doc/classes/EditorSpatialGizmo.xml:16
msgid ""
@@ -26242,7 +26849,7 @@ msgid ""
"redraw]."
msgstr ""
"将碰撞三角形添加到å°å·¥å…·ä¸­ï¼Œä¾›æŒ‘选。也å¯ä»¥ä»Žæ™®é€šçš„[Mesh]生æˆ[TriangleMesh]。"
-"在[方法é‡ç»˜]时调用此函数。"
+"在[method redraw]时调用此函数。"
#: doc/classes/EditorSpatialGizmo.xml:33
msgid ""
@@ -26316,18 +26923,16 @@ msgstr ""
"撤销动作。"
#: doc/classes/EditorSpatialGizmo.xml:100
-#, fuzzy
msgid ""
"Returns the [EditorSpatialGizmoPlugin] that owns this gizmo. It's useful to "
"retrieve materials using [method EditorSpatialGizmoPlugin.get_material]."
msgstr ""
-"返回拥有此gezmo的[EditorNode3DGizmoPlugin]。使用[method "
-"EditorNode3DGizmoPlugin.get_material]检索æè´¨å¾ˆæœ‰ç”¨ã€‚"
+"返回拥有此å°å·¥å…·çš„ [EditorSpatialGizmoPlugin] 。使用 [method "
+"EditorSpatialGizmoPlugin.get_material] æ£€ç´¢ææ–™å¾ˆæœ‰ç”¨ã€‚"
#: doc/classes/EditorSpatialGizmo.xml:106
-#, fuzzy
msgid "Returns the Spatial node associated with this gizmo."
-msgstr "返回与此å°å·¥å…·ç›¸å…³è”çš„Node3D节点。"
+msgstr "返回与此å°å·¥å…·ç›¸å…³è”çš„ Spatial 节点。"
#: doc/classes/EditorSpatialGizmo.xml:113
msgid ""
@@ -26337,24 +26942,23 @@ msgstr ""
"如果鼠标悬åœç´¢å¼•为 [code]index[/code] çš„å¥æŸ„高亮,则返回[code]true[/code]。"
#: doc/classes/EditorSpatialGizmo.xml:119
-#, fuzzy
msgid ""
"This function is called when the [Spatial] this gizmo refers to changes (the "
"[method Spatial.update_gizmo] is called)."
msgstr ""
-"当[Node3D]这个工具所指的å˜åŒ–时([method Node3D.update_gizmo]函数被调用)。"
+"当这个工具所指 [Spatial] çš„å˜åŒ–时([method Node3D.update_gizmo] 函数被调"
+"用)。"
#: doc/classes/EditorSpatialGizmo.xml:128
-#, fuzzy
msgid ""
"This function is used when the user drags a gizmo handle (previously added "
"with [method add_handles]) in screen coordinates.\n"
"The [Camera] is also provided so screen coordinates can be converted to "
"raycasts."
msgstr ""
-"当用户在å±å¹•åæ ‡ä¸­æ‹–åŠ¨å·¥å…·å¥æŸ„(之å‰ç”¨[method add_handles]添加的)时,使用该"
-"函数。\n"
-"还æä¾›äº†[Camera3D],这样å±å¹•åæ ‡å°±å¯ä»¥è½¬æ¢ä¸ºå°„线广播。"
+"当用户在å±å¹•åæ ‡ä¸­æ‹–动一个 gizmo 工具手柄时(之å‰ç”¨ [method add_handles] 添加"
+"的),就会使用这个函数。\n"
+"还æä¾›äº†ç›¸æœº [Camera],以便将å±å¹•åæ ‡è½¬æ¢ä¸ºå°„线投影。"
#: doc/classes/EditorSpatialGizmo.xml:136
msgid ""
@@ -26365,36 +26969,34 @@ msgstr ""
"[code]false[/code],将显示它。"
#: doc/classes/EditorSpatialGizmo.xml:143
-#, fuzzy
msgid ""
"Sets the reference [Spatial] node for the gizmo. [code]node[/code] must "
"inherit from [Spatial]."
-msgstr "设置工具的å‚考[Node3D]节点。 [code] node [/code]必须继承自[Node3D]。"
+msgstr ""
+"设置工具的å‚考 [Spatial] 节点。 [code] node [/code]必须继承自 [Spatial]。"
#: doc/classes/EditorSpatialGizmoPlugin.xml:4
-#, fuzzy
msgid "Used by the editor to define Spatial gizmo types."
-msgstr "编辑器使用它æ¥å®šä¹‰Node3D 工具类型。"
+msgstr "由编辑部用于定义空间å°å·¥å…·çš„类型。"
#: doc/classes/EditorSpatialGizmoPlugin.xml:7
-#, fuzzy
msgid ""
"EditorSpatialGizmoPlugin allows you to define a new type of Gizmo. There are "
"two main ways to do so: extending [EditorSpatialGizmoPlugin] for the simpler "
"gizmos, or creating a new [EditorSpatialGizmo] type. See the tutorial in the "
"documentation for more info."
msgstr ""
-"EditorNode3DGizmoPluginå…è®¸æ‚¨å®šä¹‰ä¸€ç§æ–°çš„辅助工具类型。这样åšçš„ä¸»è¦æ–¹æ³•有两"
-"ç§ï¼šæ‰©å±•[EditorNode3DGizmoPlugin]以获得更简å•çš„Gizmos,或创建新的"
-"[EditorNode3DGizmo]类型。有关更多信æ¯ï¼Œè¯·å‚阅文档中的教程。"
+"EditorSpatialGizmoPlugin å…è®¸æ‚¨å®šä¹‰ä¸€ç§æ–°çš„辅助工具类型。这样åšçš„ä¸»è¦æ–¹æ³•有两"
+"ç§ï¼šæ‰©å±• [EditorSpatialGizmoPlugin] 以获得更简å•çš„Gizmos,或创建新的 "
+"[EditorSpatialGizmoPlugin] 类型。有关更多信æ¯ï¼Œè¯·å‚阅文档中的教程。"
#: doc/classes/EditorSpatialGizmoPlugin.xml:10
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/plugins/editor/spatial_gizmos."
"html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/plugins/editor/spatial_gizmos."
-"html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/plugins/editor/"
+"spatial_gizmos.html"
#: doc/classes/EditorSpatialGizmoPlugin.xml:18
msgid ""
@@ -26418,17 +27020,15 @@ msgid ""
msgstr "é‡å†™æ­¤æ–¹æ³•以æäº¤Gizmo奿Ÿ„。调用此æ’件的活动辅助工具。"
#: doc/classes/EditorSpatialGizmoPlugin.xml:41
-#, fuzzy
msgid ""
"Override this method to return a custom [EditorSpatialGizmo] for the spatial "
"nodes of your choice, return [code]null[/code] for the rest of nodes. See "
"also [method has_gizmo]."
msgstr ""
-"é‡å†™æ­¤æ–¹æ³•å¯ä¸ºæ‚¨é€‰æ‹©çš„空间节点返回自定义[EditorNode3DGizmo],为其余节点返回"
-"[code] null [/code]。å¦è¯·å‚阅[method has_gizmo]。"
+"é‡å†™æ­¤æ–¹æ³•å¯ä¸ºæ‚¨é€‰æ‹©çš„空间节点返回自定义 [EditorSpatialGizmo],为其余节点返"
+"回 [code]null[/code]。å¦è¯·å‚阅 [method has_gizmo]。"
#: doc/classes/EditorSpatialGizmoPlugin.xml:50
-#, fuzzy
msgid ""
"Creates a handle material with its variants (selected and/or editable) and "
"adds them to the internal material list. They can then be accessed with "
@@ -26436,33 +27036,33 @@ msgid ""
"Should not be overridden.\n"
"You can optionally provide a texture to use instead of the default icon."
msgstr ""
-"创建具有其å˜ä½“(选定和/或å¯ç¼–è¾‘ï¼‰çš„å¥æŸ„æè´¨ï¼Œå¹¶å°†å…¶æ·»åŠ åˆ°å†…éƒ¨æè´¨åˆ—表中。然åŽ"
-"å¯ä»¥ä½¿ç”¨[method get_material]访问它们,并在[method EditorNode3DGizmo."
-"add_handles]中使用它们。ä¸åº”该被覆盖。"
+"åˆ›å»ºä¸€ä¸ªæ‰‹æŸ„ææ–™åŠå…¶variants (选定的和/或å¯ç¼–è¾‘çš„ï¼‰ï¼Œå¹¶å°†å®ƒä»¬æ·»åŠ åˆ°å†…éƒ¨ææ–™"
+"列表。然åŽå¯ä»¥ç”¨ [method get_material] 访问它们,并在 [method "
+"EditorSpatialGizmo.add_handles] 中使用。ä¸åº”该被é‡å†™ã€‚\n"
+"ä½ å¯ä»¥é€‰æ‹©æ€§åœ°æä¾›ä¸€ä¸ªçº¹ç†æ¥ä»£æ›¿é»˜è®¤çš„图标。"
#: doc/classes/EditorSpatialGizmoPlugin.xml:61
-#, fuzzy
msgid ""
"Creates an icon material with its variants (selected and/or editable) and "
"adds them to the internal material list. They can then be accessed with "
"[method get_material] and used in [method EditorSpatialGizmo."
"add_unscaled_billboard]. Should not be overridden."
msgstr ""
-"创建一个图标æè´¨åŠå…¶å˜ä½“,注,选定的和/或å¯ç¼–辑的,并将它们添加到内部æè´¨åˆ—"
-"表。然åŽå¯ä»¥ç”¨[method get_material]访问它们,并在[method EditorNode3DGizmo."
-"add_unscaled_billboard]中使用。ä¸åº”该被é‡å†™ã€‚"
+"åˆ›å»ºä¸€ä¸ªå›¾æ ‡ææ–™åŠå…¶variants (选定的和/或å¯ç¼–è¾‘çš„ï¼‰ï¼Œå¹¶å°†å®ƒä»¬æ·»åŠ åˆ°å†…éƒ¨ææ–™"
+"列表。然åŽå¯ä»¥ç”¨ [method get_material] 访问它们,并在 [method "
+"EditorSpatialGizmo.add_unscaled_billboard] 中使用。ä¸åº”该被é‡å†™ã€‚"
#: doc/classes/EditorSpatialGizmoPlugin.xml:72
-#, fuzzy
msgid ""
"Creates an unshaded material with its variants (selected and/or editable) "
"and adds them to the internal material list. They can then be accessed with "
"[method get_material] and used in [method EditorSpatialGizmo.add_mesh] and "
"[method EditorSpatialGizmo.add_lines]. Should not be overridden."
msgstr ""
-"创建具有其å˜ä½“(选定和/或å¯ç¼–辑)的无阴影æè´¨ï¼Œå¹¶å°†å…¶æ·»åŠ åˆ°å†…éƒ¨æè´¨åˆ—表中。然"
-"åŽå¯ä»¥ä½¿ç”¨[method get_material]访问它们,并在[method EditorNode3DGizmo."
-"add_mesh]å’Œ[method EditorNode3DGizmo.add_lines]中使用它们。ä¸åº”该被覆盖。"
+"åˆ›å»ºä¸€ä¸ªæ²¡æœ‰é˜´å½±çš„ææ–™åŠå…¶variants (选定的和/或å¯ç¼–辑的),并将它们添加到内"
+"éƒ¨ææ–™åˆ—表。然åŽå¯ä»¥ç”¨ [method get_material] 访问它们,并在 [method "
+"EditorSpatialGizmo.add_mesh] 和 [method EditorSpatialGizmo.add_lines] 中使"
+"用。ä¸åº”该被é‡å†™ã€‚"
#: doc/classes/EditorSpatialGizmoPlugin.xml:80
msgid ""
@@ -26477,14 +27077,13 @@ msgid ""
msgstr "从Gizmo获å–奿Ÿ„的实际值。调用此æ’件的活动工具。"
#: doc/classes/EditorSpatialGizmoPlugin.xml:96
-#, fuzzy
msgid ""
"Gets material from the internal list of materials. If an "
"[EditorSpatialGizmo] is provided, it will try to get the corresponding "
"variant (selected and/or editable)."
msgstr ""
-"从内部物料清å•ä¸­èŽ·å–æè´¨ã€‚å¦‚æžœæä¾›äº†[EditorNode3DGizmo],它将å°è¯•获å–相应的å˜"
-"体(已选择/或å¯ç¼–辑)。"
+"ä»Žå†…éƒ¨ææ–™åˆ—è¡¨ä¸­èŽ·å–ææ–™ã€‚å¦‚æžœæä¾›äº†ä¸€ä¸ª [EditorSpatialGizmo] ,它将å°è¯•获å–"
+"相应的variant (选定的和/或å¯ç¼–辑的)。"
#: doc/classes/EditorSpatialGizmoPlugin.xml:102
msgid ""
@@ -26507,16 +27106,16 @@ msgstr ""
"[code] 0 [/code],这æ„味ç€è‡ªå®šä¹‰æŽ§ä»¶å°†è‡ªåŠ¨è¦†ç›–å†…ç½®æŽ§ä»¶ã€‚"
#: doc/classes/EditorSpatialGizmoPlugin.xml:116
-#, fuzzy
msgid ""
"Override this method to define which Spatial nodes have a gizmo from this "
"plugin. Whenever a [Spatial] node is added to a scene this method is called, "
"if it returns [code]true[/code] the node gets a generic [EditorSpatialGizmo] "
"assigned and is added to this plugin's list of active gizmos."
msgstr ""
-"é‡å†™æ­¤æ–¹æ³•,以定义该æ’件中哪些Node3D节点具有Gizmo。æ¯å½“å°†[Node3D]节点添加到场"
-"景时,都会调用此方法,如果它返回[code] true [/code],则该节点将获得分é…的通用"
-"[EditorNode3DGizmo]并将其添加到此æ’件的活动工具列表中。"
+"覆盖这个方法æ¥å®šä¹‰å“ªäº›ç©ºé—´èŠ‚ç‚¹æœ‰è¿™ä¸ªæ’ä»¶çš„ gizmo。æ¯å½“一个 [Spatial] 节点被添"
+"加到一个场景中时,这个方法就会被调用,如果它返回 [code]true[/code],该节点就"
+"会被分é…一个通用的 [EditorSpatialGizmo],并被添加到这个æ’件的激活 Gizmos列表"
+"中。"
#: doc/classes/EditorSpatialGizmoPlugin.xml:124
msgid ""
@@ -26525,11 +27124,10 @@ msgid ""
msgstr "获å–奿Ÿ„是å¦é«˜äº®æ˜¾ç¤ºã€‚调用此æ’件的活动工具。"
#: doc/classes/EditorSpatialGizmoPlugin.xml:130
-#, fuzzy
msgid ""
"Override this method to define whether a Spatial with this gizmo should be "
"selectable even when the gizmo is hidden."
-msgstr "é‡å†™æ­¤æ–¹æ³•以定义是å¦åº”选择具有此工具的Node3D(å³ä½¿å·¥å…·å·²éšè—)。"
+msgstr "覆盖此方法,以定义具有此工具的空间是å¦åº”该在工具被éšè—时也å¯ä»¥è¢«é€‰æ‹©ã€‚"
#: doc/classes/EditorSpatialGizmoPlugin.xml:137
msgid ""
@@ -26544,9 +27142,8 @@ msgid ""
msgstr "æ›´æ–°å¥æŸ„åŽæ›´æ–°å…¶å€¼ã€‚调用此æ’件的活动工具。"
#: doc/classes/EditorSpinSlider.xml:4
-#, fuzzy
msgid "Godot editor's control for editing numeric values."
-msgstr "Godot编辑器的脚本编辑器。"
+msgstr "Godot编辑器用于编辑数值的控件。"
#: doc/classes/EditorSpinSlider.xml:7
msgid ""
@@ -26554,6 +27151,8 @@ msgid ""
"of numeric values. Can be used with [EditorInspectorPlugin] to recreate the "
"same behavior."
msgstr ""
+"这个 [Control] èŠ‚ç‚¹åœ¨ç¼–è¾‘å™¨çš„æ£€æŸ¥å™¨é¢æ¿ä¸­ä½¿ç”¨ï¼Œå…许编辑数值。å¯ä»¥ä¸Ž "
+"[EditorInspectorPlugin] ä¸€èµ·ä½¿ç”¨ï¼Œä»¥é‡æ–°åˆ›å»ºç›¸åŒçš„行为。"
#: doc/classes/EditorVCSInterface.xml:4
msgid ""
@@ -26621,7 +27220,6 @@ msgstr ""
"- [code]\"offset\"[/code]存储自第一个上下文行内容以æ¥è¡Œå˜åŒ–çš„åç§»é‡ã€‚"
#: doc/classes/EditorVCSInterface.xml:36
-#, fuzzy
msgid ""
"Returns a [Dictionary] containing the path of the detected file change "
"mapped to an integer signifying what kind of change the corresponding file "
@@ -26634,14 +27232,14 @@ msgid ""
"- [code]3[/code]: Deleted\n"
"- [code]4[/code]: Typechanged"
msgstr ""
-"返回一个[Dictionary]ï¼Œå…¶ä¸­åŒ…å«æ£€æµ‹åˆ°çš„æ–‡ä»¶å˜åŒ–的路径,并将其映射为一个整数,"
-"表示相应文件ç»åŽ†äº†ä»€ä¹ˆæ ·çš„å˜åŒ–。\n"
-"以下整数值被用æ¥è¡¨ç¤ºæ£€æµ‹åˆ°çš„æ–‡ä»¶æ˜¯ã€‚\n"
-"- [code]0[/code]:新到VCS工作目录的文件\n"
-"- [code]1[/code]:修改åŽ\n"
-"- [code]2[/code]:釿–°å‘½å\n"
-"- [code]3[/code]:已删除\n"
-"- [code]4[/code]:类型已改å˜"
+"返回一个 [Dictionary]ï¼ŒåŒ…å«æ£€æµ‹åˆ°çš„æ›´æ”¹æ–‡ä»¶çš„路径,映射到一个整数,该整数表示"
+"相应文件更改的状æ€ã€‚\n"
+"以下整数值用于表示检测到的文件是:\n"
+"- [code]0[/code]:新的 VCS 工作目录\n"
+"- [code]1[/code]:修改\n"
+"- [code]2[/code]:é‡å‘½å\n"
+"- [code]3[/code]:删除\n"
+"- [code]4[/code]:类型改å˜"
#: doc/classes/EditorVCSInterface.xml:48
msgid "Returns the project name of the VCS working directory."
@@ -26727,7 +27325,7 @@ msgid ""
"The [Object] identifier stored in this [EncodedObjectAsID] instance. The "
"object instance can be retrieved with [method @GDScript.instance_from_id]."
msgstr ""
-"存储在这个[EncodedObjectAsID]实例中的[对象]标识符。对象实例å¯ä»¥ç”¨[method "
+"存储在这个[EncodedObjectAsID]实例中的[Object]标识符。对象实例å¯ä»¥ç”¨[method "
"@GDScript.instance_from_id]检索。"
#: doc/classes/Engine.xml:4
@@ -26769,7 +27367,6 @@ msgstr ""
"[code]copyright[/code], [code]license[/code]}"
#: doc/classes/Engine.xml:33
-#, fuzzy
msgid ""
"Returns a Dictionary of Arrays of donor names.\n"
"{[code]platinum_sponsors[/code], [code]gold_sponsors[/code], "
@@ -26777,21 +27374,22 @@ msgid ""
"[code]mini_sponsors[/code], [code]gold_donors[/code], [code]silver_donors[/"
"code], [code]bronze_donors[/code]}"
msgstr ""
-"返回æåŠ©è€…å称数组的字典。\n"
-"{[code] platinum_sponsors [/code],[code] gold_sponsors [/code],[code] "
-"mini_sponsors [/code],[code] gold_donors [/code],[code] silver_donors [/"
-"code],[code] bronze_donors [/code]}"
+"返回æèµ è€…å§“åæ•°ç»„的字典。\n"
+"{[code]platinum_sponsors[/code], [code]gold_sponsors[/code], "
+"[code]silver_sponsors[/code], [code]bronze_sponsors[/code], "
+"[code]mini_sponsors[/code], [code]gold_donors[/code], [code]silver_donors[/"
+"code], [code]bronze_donors[/code]}"
#: doc/classes/Engine.xml:40
-#, fuzzy
msgid ""
"Returns the total number of frames drawn. On headless platforms, or if the "
"render loop is disabled with [code]--disable-render-loop[/code] via command "
"line, [method get_frames_drawn] always returns [code]0[/code]. See [method "
"get_idle_frames]."
msgstr ""
-"返回绘制的总帧数。如果通过命令行使用[code]--disable-render-loop[/code]ç¦ç”¨æ¸²"
-"染循环,则返回[code]0[/code]。å‚阅[method get_idle_frames]。"
+"返回绘制的总帧数。在精简平å°ä¸Šï¼Œæˆ–者如果通过命令行使用 [code]--disable-"
+"render-loop[/code] ç¦ç”¨æ¸²æŸ“循环,[method get_frames_drawn] 总是返回 [code]0[/"
+"code]。å‚阅[method get_idle_frames]。"
#: doc/classes/Engine.xml:46
msgid "Returns the frames per second of the running game."
@@ -26812,6 +27410,16 @@ msgid ""
"here.\n"
"[/codeblock]"
msgstr ""
+"返回自引擎åˆå§‹åŒ–以æ¥çš„æ€»å¸§æ•°ï¼Œåœ¨æ¯ä¸ª[b]空闲帧[/b]都会进行,无论渲染循环是å¦è¢«"
+"å¯ç”¨ã€‚å‚阅[method get_frames_drawn]å’Œ[method get_physics_frames]。\n"
+"[method get_idle_frames]å¯ä»¥ç”¨æ¥å‡å°‘è¿è¡Œé«˜æ¶ˆè€—逻辑的次数,而ä¸éœ€è¦ä¾é "
+"[Timer]。\n"
+"[codeblock]\n"
+"func _process(_delta):\n"
+" if Engine.get_idle_frames() % 2 == 0:\n"
+" pass # Run expensive logic only once every 2 idle (render) frames "
+"here.\n"
+"[/codeblock]"
#: doc/classes/Engine.xml:64
msgid ""
@@ -26840,6 +27448,15 @@ msgid ""
" pass # Run expensive logic only once every 2 physics frames here.\n"
"[/codeblock]"
msgstr ""
+"返回自引擎åˆå§‹åŒ–以æ¥é€šè¿‡çš„æ€»å¸§æ•°ï¼Œè¯¥å¸§æ•°åœ¨æ¯ä¸ª[b]物ç†å¸§[/b]上进行。å‚阅"
+"[method get_idle_frames]。\n"
+"[method get_physics_frames]å¯ä»¥ç”¨æ¥å‡å°‘è¿è¡Œé«˜æ¶ˆè€—逻辑的次数,而ä¸éœ€è¦ä¾é "
+"[Timer]。\n"
+"[codeblock]\n"
+"func _physics_process(_delta):\n"
+" if Engine.get_physics_frames() % 2 == 0:\n"
+" pass # Run expensive logic only once every 2 physics frames here.\n"
+"[/codeblock]"
#: doc/classes/Engine.xml:94
msgid ""
@@ -26849,12 +27466,12 @@ msgid ""
msgstr "返回渲染框架时当å‰ç‰©ç†æ»´æ ‡è®°ä¸­çš„分数。这å¯ç”¨äºŽå®žçŽ°å›ºå®šçš„æ—¶é—´æ­¥æ’值。"
#: doc/classes/Engine.xml:101
-#, fuzzy
msgid ""
"Returns a global singleton with given [code]name[/code]. Often used for "
"plugins, e.g. [code]GodotPayment[/code] on Android."
msgstr ""
-"返回具有给定[code]name[/code]的全局å•例。通常用于æ’件,例如GodotPayments。"
+"返回具有给定[code]name[/code]的全局å•例。通常用于æ’件,例如Android上的"
+"[code]GodotPayment[/code]。"
#: doc/classes/Engine.xml:107
msgid ""
@@ -26947,6 +27564,22 @@ msgid ""
"the editor and when running the project from the editor, but it will "
"evaluate to [code]false[/code] when the code is run from an exported project."
msgstr ""
+"如果[code]true[/code]ï¼Œåˆ™è¡¨ç¤ºè¯¥è„šæœ¬ç›®å‰æ­£åœ¨ç¼–辑器内è¿è¡Œã€‚这对[code]tool[/"
+"code]脚本很有用,å¯ä»¥æœ‰æ¡ä»¶ç»˜åˆ¶ç¼–辑器助手,或者防止在编辑器中æ„外地è¿è¡Œä¼šå½±å“"
+"场景状æ€çš„ \"游æˆ\" 代ç ã€‚\n"
+"[codeblock]\n"
+"if Engine.editor_hint:\n"
+" draw_gizmos()\n"
+"else:\n"
+" simulate_physics()\n"
+"[/codeblock]\n"
+"更多信æ¯è¯·å‚阅文档中[url=https://docs.godotengine.org/zh_CN/stable/tutorials/"
+"misc/running_code_in_the_editor.html]在编辑器中è¿è¡Œä»£ç [/url]。\n"
+"[b]注æ„:[/b]è¦æ£€æµ‹è„šæœ¬æ˜¯å¦ä»Žç¼–辑器[i]构建[/i]中è¿è¡Œï¼ˆä¾‹å¦‚按[code]F5[/code]"
+"时),请使用带有[code]\"editor\"[/code]傿•°çš„[method OS.has_feature]代替。"
+"[code]OS.has_feature(\"editor\")[/code]当代ç åœ¨ç¼–辑器中è¿è¡Œå’Œä»Žç¼–辑器中è¿è¡Œé¡¹"
+"目时都会评估为[code]true[/code],但当代ç ä»Žå¯¼å‡ºçš„项目中è¿è¡Œæ—¶å®ƒä¼šè¯„估为"
+"[code]false[/code]。"
#: doc/classes/Engine.xml:153
msgid ""
@@ -26964,7 +27597,6 @@ msgstr ""
"å…¥æ›´çµæ•或解决隧é“问题,但请记ä½ï¼Œè¿™æ ·åšä¼šå¢žåŠ CPU的使用。"
#: doc/classes/Engine.xml:156
-#, fuzzy
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -26977,10 +27609,12 @@ msgid ""
"solution, the physics jitter fix should be disabled by setting [member "
"physics_jitter_fix] to [code]0[/code]."
msgstr ""
-"æŽ§åˆ¶ç‰©ç†æ—¶é’Ÿä¸Žå®žæ—¶åŒæ­¥çš„程度。为0æˆ–æ›´å°‘ï¼Œåˆ™æ˜¯åŒæ­¥çš„。这样的值建议用于网络游"
-"æˆï¼Œå› ä¸ºæ—¶é’ŸåŒæ­¥å¾ˆé‡è¦ã€‚较高的数值会导致游æˆä¸­çš„æ—¶é’Ÿå’ŒçœŸå®žæ—¶é’Ÿæœ‰è¾ƒå¤§çš„å差,"
-"但å…许平滑帧率抖动。默认值0.5对大多数人æ¥è¯´åº”该是没有问题的;高于2的值å¯èƒ½ä¼š"
-"导致游æˆå¯¹æŽ‰å¸§çš„å应有明显的延迟,ä¸å»ºè®®ä½¿ç”¨ã€‚"
+"æŽ§åˆ¶ç‰©ç†æ—¶é’Ÿä¸Žå®žæ—¶åŒæ­¥ç¨‹åº¦ã€‚如果是0æˆ–æ›´å°‘ï¼Œæ—¶é’Ÿæ˜¯åŒæ­¥çš„。这样的值建议用于网络"
+"游æˆï¼Œå› ä¸ºæ—¶é’Ÿçš„åŒæ­¥æ€§å¾ˆé‡è¦ã€‚较高的值会导致游æˆä¸­çš„æ—¶é’Ÿå’ŒçœŸå®žæ—¶é’Ÿä¹‹é—´çš„åå·®"
+"较大,但å¯ä»¥å¹³æ»‘帧速率的抖动。默认值0.5对大多数人æ¥è¯´åº”该是良好的;超过2的值"
+"å¯èƒ½å¯¼è‡´æ¸¸æˆå¯¹æŽ‰å¸§çš„ååº”æœ‰æ˜Žæ˜¾çš„å»¶è¿Ÿï¼Œå› æ­¤ä¸æŽ¨è使用。\n"
+"[b]注æ„:[/b]ä¸ºäº†èŽ·å¾—æœ€ä½³æ•ˆæžœï¼Œå½“ä½¿ç”¨è‡ªå®šä¹‰ç‰©ç†æ’值这ç§è§£å†³æ–¹æ¡ˆæ—¶ï¼Œåº”通过将"
+"[member physics_jitter_fix]设置为[code]0[/code]æ¥ç¦ç”¨ç‰©ç†æŠ–动修å¤ã€‚"
#: doc/classes/Engine.xml:160
msgid ""
@@ -26996,6 +27630,14 @@ msgid ""
"[b]Note:[/b] This property does not impact the editor's Errors tab when "
"running a project from the editor."
msgstr ""
+"如果[code]false[/code]ï¼Œåœæ­¢æ‰“å°é”™è¯¯å’Œè­¦å‘Šä¿¡æ¯åˆ°æŽ§åˆ¶å°å’Œç¼–辑器输出日志。这å¯"
+"以用æ¥åœ¨å•元测试套件è¿è¡ŒæœŸé—´éšè—错误和警告信æ¯ã€‚这个属性等åŒäºŽ[member "
+"ProjectSettings.application/run/disable_stderr]项目设置。\n"
+"[b]警告:[/b] 如果你在项目的任æ„ä½ç½®å°†å…¶è®¾ç½®ä¸º[code]false[/code],é‡è¦çš„错误信"
+"æ¯å¯èƒ½ä¼šè¢«éšè—,å³ä½¿å®ƒä»¬æ˜¯ç”±å…¶ä»–脚本触å‘。如果在[code]@tool[/code]脚本中把这"
+"个设置为[code]false[/code],这也会影å“到编辑器本身。在确ä¿é”™è¯¯ä¿¡æ¯è¢«å¯ç”¨ä¹‹"
+"å‰ï¼Œ[i]ä¸[/i]报告错误(默认情况下)。\n"
+"[b]注æ„:[/b]当从编辑器è¿è¡Œä¸€ä¸ªé¡¹ç›®æ—¶ï¼Œè¿™ä¸ªå±žæ€§ä¸å½±å“编辑器的错误选项å¡ã€‚"
#: doc/classes/Engine.xml:165
msgid ""
@@ -27021,7 +27663,6 @@ msgid ""
msgstr "用于定义多个渲染选项的环境节点(如[WorldEnvironment])的资æºã€‚"
#: doc/classes/Environment.xml:7
-#, fuzzy
msgid ""
"Resource for environment nodes (like [WorldEnvironment]) that define "
"multiple environment operations (such as background [Sky] or [Color], "
@@ -27037,27 +27678,32 @@ msgid ""
"framebuffer_allocation], or for specific Viewports via the [member Viewport."
"usage] property."
msgstr ""
-"环境节点(如[WorldEnvironment])的资æºï¼Œè¿™äº›èŠ‚ç‚¹å®šä¹‰äº†å¤šä¸ªçŽ¯å¢ƒæ“作(如背景"
-"[Sky]或[Color]ã€çŽ¯å¢ƒå…‰ã€é›¾ã€æ™¯æ·±...ï¼‰ã€‚è¿™äº›å‚æ•°ä¼šå½±å“场景的最终渲染。这些æ“作"
-"çš„é¡ºåºæ˜¯\n"
-"- 景深 模糊\n"
+"环境节点(如 [WorldEnvironment])的资æºï¼Œè¿™äº›èŠ‚ç‚¹å®šä¹‰äº†å¤šä¸ªçŽ¯å¢ƒæ“作(如背景 "
+"[Sky] 或 [Color]ã€çŽ¯å¢ƒå…‰ã€é›¾ã€æ™¯æ·±â€¦â€¦ï¼‰ã€‚è¿™äº›å‚æ•°ä¼šå½±å“场景的最终渲染。这些æ“"
+"ä½œçš„é¡ºåºæ˜¯ï¼š\n"
+"- 景深模糊\n"
"- 辉光\n"
-"- 色调地图(自动æ›å…‰\n"
-"- 调整数"
+"- 色调映射(自动æ›å…‰ï¼‰\n"
+"- 调整\n"
+"这些效果仅在 [Viewport] 的预期使用方法为“3Dâ€æˆ–者“3D Without Effectsâ€æ—¶ç”Ÿæ•ˆã€‚"
+"根视窗的预期使用方法å¯ä»¥é€šè¿‡ [member ProjectSettings.rendering/quality/"
+"intended_usage/framebuffer_allocation] 调整,其它视窗通过 [member Viewport."
+"usage] 调整。"
#: doc/classes/Environment.xml:15 doc/classes/WorldEnvironment.xml:12
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/3d/"
"environment_and_post_processing.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/3d/"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/3d/"
"environment_and_post_processing.html"
#: doc/classes/Environment.xml:16
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/3d/high_dynamic_range.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/3d/high_dynamic_range.html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/3d/high_dynamic_range."
+"html"
#: doc/classes/Environment.xml:17 doc/classes/Material.xml:10
#: doc/classes/Mesh.xml:10 doc/classes/MeshInstance.xml:10
@@ -27092,14 +27738,13 @@ msgstr ""
"æ‰æœ‰æ•ˆã€‚"
#: doc/classes/Environment.xml:43
-#, fuzzy
msgid ""
"Applies the provided [Texture] resource to affect the global color aspect of "
"the rendered scene. Effective only if [code]adjustment_enabled[/code] is "
"[code]true[/code]."
msgstr ""
-"应用所æä¾›çš„ [Texture2D] èµ„æºæ¥å½±å“æ¸²æŸ“åœºæ™¯çš„å…¨å±€é¢œè‰²ã€‚åªæœ‰å½“"
-"[code]adjusting_enabled[/code]是[code]true[/code]æ—¶æ‰æœ‰æ•ˆã€‚"
+"应用所æä¾›çš„[Texture]èµ„æºæ¥å½±å“æ¸²æŸ“åœºæ™¯çš„å…¨å±€é¢œè‰²è¡¨çŽ°ã€‚åªæœ‰åœ¨"
+"[code]adjustment_enabled[/code]为[code]true[/code]æ—¶æ‰æœ‰æ•ˆã€‚"
#: doc/classes/Environment.xml:46
msgid ""
@@ -27182,7 +27827,7 @@ msgstr "自动æ›å…‰æ•ˆæžœçš„速度。影å“相机执行自动æ›å…‰æ‰€éœ€çš„æ—¶
#: doc/classes/Environment.xml:79
msgid "The ID of the camera feed to show in the background."
-msgstr "在背景中显示的相机信å·çš„ID。"
+msgstr "在背景中显示的相机æºçš„ID。"
#: doc/classes/Environment.xml:82
msgid ""
@@ -27191,12 +27836,12 @@ msgid ""
msgstr "è¦æ˜¾ç¤ºçš„æœ€å¤§å›¾å±‚IDã€‚åªæœ‰åœ¨ä½¿ç”¨ [constant BG_CANVAS] èƒŒæ™¯æ¨¡å¼æ—¶æœ‰æ•ˆã€‚"
#: doc/classes/Environment.xml:85
-#, fuzzy
msgid ""
"The [Color] displayed for clear areas of the scene. Only effective when "
"using the [constant BG_COLOR] or [constant BG_COLOR_SKY] background modes)."
msgstr ""
-"场景中清晰区域显示的[Color]ã€‚åªæœ‰åœ¨ä½¿ç”¨ [constant BG_COLOR] èƒŒæ™¯æ¨¡å¼æ—¶æœ‰æ•ˆã€‚"
+"场景中清除区域显示的[Color]。仅在使用[constant BG_COLOR]或[constant "
+"BG_COLOR_SKY]èƒŒæ™¯æ¨¡å¼æ—¶æœ‰æ•ˆã€‚"
#: doc/classes/Environment.xml:88
msgid "The power of the light emitted by the background."
@@ -27207,34 +27852,28 @@ msgid "The background mode. See [enum BGMode] for possible values."
msgstr "背景模å¼ã€‚请å‚阅[enum BGMode]了解å¯èƒ½çš„值。"
#: doc/classes/Environment.xml:94
-#, fuzzy
msgid "The [Sky] resource defined as background."
-msgstr "使用天空资æºä½œä¸ºèƒŒæ™¯ã€‚"
+msgstr "[Sky] 天空资æºå®šä¹‰ä¸ºèƒŒæ™¯ã€‚"
#: doc/classes/Environment.xml:97
-#, fuzzy
msgid "The [Sky] resource's custom field of view."
-msgstr "用于此[Environment]çš„[天空]资æºã€‚"
+msgstr "[Sky] 天空资æºçš„自定义视野。"
#: doc/classes/Environment.xml:100
-#, fuzzy
msgid "The [Sky] resource's rotation expressed as a [Basis]."
-msgstr "[Mesh]资æºç”¨ä½œCSG形状。"
+msgstr "以[Basis]表示的[Sky]天空资æºçš„æ—‹è½¬ã€‚"
#: doc/classes/Environment.xml:103
-#, fuzzy
msgid "The [Sky] resource's rotation expressed as Euler angles in radians."
-msgstr "贴图的旋转(以弧度为å•ä½)."
+msgstr "[Sky] èµ„æºæ—‹è½¬çš„æ¬§æ‹‰è§’,以弧度å•ä½ã€‚"
#: doc/classes/Environment.xml:106
-#, fuzzy
msgid "The [Sky] resource's rotation expressed as Euler angles in degrees."
-msgstr "贴图的旋转(以度数为å•ä½)."
+msgstr "[Sky] å¤©ç©ºèµ„æºæ—‹è½¬çš„æ¬§æ‹‰è§’,å•ä½ä¸ºåº¦ã€‚"
#: doc/classes/Environment.xml:109
-#, fuzzy
msgid "The amount of far blur for the depth-of-field effect."
-msgstr "效果中的声音数é‡ã€‚"
+msgstr "用于景深效果的远处模糊数é‡ã€‚"
#: doc/classes/Environment.xml:112
msgid ""
@@ -27242,24 +27881,24 @@ msgid ""
msgstr "è¿œæ™¯æ¨¡ç³Šæ•ˆæžœå½±å“æ¸²æŸ“çš„è·ç¦»ã€‚"
#: doc/classes/Environment.xml:115
-#, fuzzy
msgid "If [code]true[/code], enables the depth-of-field far blur effect."
-msgstr "如果为[code]true[/code],å¯ç”¨æŒ‡å®šçš„flag。"
+msgstr "如果[code]true[/code],å¯ç”¨æ™¯æ·±è¿œæ™¯æ¨¡ç³Šæ•ˆæžœã€‚"
#: doc/classes/Environment.xml:118
msgid ""
"The depth-of-field far blur's quality. Higher values can mitigate the "
"visible banding effect seen at higher strengths, but are much slower."
msgstr ""
+"景深远处模糊的质é‡ã€‚较高的数值å¯ä»¥å‡è½»åœ¨è¾ƒé«˜å¼ºåº¦ä¸‹çœ‹åˆ°çš„å¯è§å¸¦çŠ¶æ•ˆåº”ï¼Œä½†é€Ÿåº¦"
+"è¦æ…¢å¾—多。"
#: doc/classes/Environment.xml:121
msgid "The length of the transition between the no-blur area and far blur."
msgstr "无模糊区域和远模糊区域之间的过渡长度。"
#: doc/classes/Environment.xml:124
-#, fuzzy
msgid "The amount of near blur for the depth-of-field effect."
-msgstr "效果中的声音数é‡ã€‚"
+msgstr "用于景深效果的近似模糊的数é‡ã€‚"
#: doc/classes/Environment.xml:127
msgid ""
@@ -27267,15 +27906,16 @@ msgid ""
msgstr "è¿‘ä¼¼æ¨¡ç³Šæ•ˆæžœå½±å“æ¸²æŸ“的地方与相机的è·ç¦»ã€‚"
#: doc/classes/Environment.xml:130
-#, fuzzy
msgid "If [code]true[/code], enables the depth-of-field near blur effect."
-msgstr "如果为[code]true[/code],å¯ç”¨æŒ‡å®šçš„flag。"
+msgstr "如果[code]true[/code],å¯ç”¨æ™¯æ·±è¿‘模糊效果。"
#: doc/classes/Environment.xml:133
msgid ""
"The depth-of-field near blur's quality. Higher values can mitigate the "
"visible banding effect seen at higher strengths, but are much slower."
msgstr ""
+"景深近模糊的质é‡ã€‚较高的数值å¯ä»¥å‡è½»åœ¨è¾ƒé«˜å¼ºåº¦ä¸‹çœ‹åˆ°çš„å¯è§å¸¦çŠ¶æ•ˆåº”ï¼Œä½†é€Ÿåº¦è¦"
+"慢得多。"
#: doc/classes/Environment.xml:136
msgid "The length of the transition between the near blur and no-blur area."
@@ -27305,13 +27945,12 @@ msgstr ""
"机)。"
#: doc/classes/Environment.xml:151
-#, fuzzy
msgid ""
"The fog's depth end distance from the camera. If this value is set to 0, it "
"will be equal to the current camera's [member Camera.far] value."
msgstr ""
-"雾的深度与相机的è·ç¦»ã€‚如果此值被设置为0,则等于当å‰ç›¸æœºçš„[member Camera3D."
-"far]值。"
+"é›¾çš„æ·±åº¦ç»ˆç‚¹ä¸Žæ‘„åƒæœºçš„è·ç¦»ã€‚如果此值被设置为0ï¼Œåˆ™ç­‰äºŽå½“å‰æ‘„åƒæœºçš„[member "
+"Camera.far]值。"
#: doc/classes/Environment.xml:154
msgid ""
@@ -27358,14 +27997,13 @@ msgstr ""
"示。å¦åˆ™ï¼Œå°†ä»Žä¸‹å¾€ä¸Šæ˜¾ç¤ºã€‚"
#: doc/classes/Environment.xml:169
-#, fuzzy
msgid ""
"The intensity of the depth fog color transition when looking towards the "
"sun. The sun's direction is determined automatically using the "
"DirectionalLight node in the scene."
msgstr ""
-"å‘太阳方å‘看去时,深度雾色过渡的强度。使用场景中的 DirectionalLight3D 节点自"
-"动确定太阳的方å‘。"
+"æœç€å¤ªé˜³çœ‹æ—¶ï¼Œæ·±åº¦é›¾é¢œè‰²è¿‡æ¸¡çš„å¼ºåº¦ã€‚å¤ªé˜³çš„æ–¹å‘æ˜¯é€šè¿‡åœºæ™¯ä¸­çš„平行光节点自动确"
+"定的。"
#: doc/classes/Environment.xml:172
msgid "The depth fog's [Color] when looking towards the sun."
@@ -27392,6 +28030,9 @@ msgid ""
"[b]Note:[/b] When using the GLES2 renderer, this is only available if the "
"GPU supports the [code]GL_EXT_gpu_shader4[/code] extension."
msgstr ""
+"以牺牲性能为代价,消除由更高级别采样产生的å—状效应。\n"
+"[b]注æ„:[/b] 使用 GLES2æ¸²æŸ“å™¨æ—¶ï¼Œåªæœ‰GPUæ”¯æŒ [code]GL_EXT_gpu_shader4[/"
+"code] 扩展时æ‰å¯ç”¨ã€‚"
#: doc/classes/Environment.xml:185
msgid "The glow blending mode."
@@ -27438,6 +28079,9 @@ msgid ""
"stable during movement. However, it is very expensive and makes the glow "
"post process take twice as long."
msgstr ""
+"åœ¨è¾‰å…‰çš„ä¸‹é‡‡æ ·è¿‡ç¨‹ä¸­èŽ·å–æ›´å¤šçš„æ ·æœ¬ã€‚è¿™å¯ä»¥ç¡®ä¿è¾‰å…‰æ•æ‰åˆ°å•个åƒç´ ï¼Œä½¿è¾‰å…‰åœ¨ç§»"
+"åŠ¨è¿‡ç¨‹ä¸­çœ‹èµ·æ¥æ›´å¹³æ»‘ã€æ›´ç¨³å®šã€‚然而,它éžå¸¸åƒæ€§èƒ½ï¼Œä½¿è¾‰å…‰çš„åŽæœŸå¤„ç†éœ€è¦ä¸¤å€çš„"
+"时间。"
#: doc/classes/Environment.xml:206
msgid ""
@@ -27519,11 +28163,10 @@ msgid ""
msgstr "å±å¹•空间å射的最大步数。数值越高,速度越慢。"
#: doc/classes/Environment.xml:248
-#, fuzzy
msgid ""
"If [code]true[/code], screen-space reflections will take the material "
"roughness into account."
-msgstr "如果[code]true[/code],查询将考虑[Area2D]。"
+msgstr "如果 [code]true[/code],å±å¹•空间å射将考虑æè´¨ç²—糙度。"
#: doc/classes/Environment.xml:251
msgid ""
@@ -27549,9 +28192,8 @@ msgid ""
msgstr "å±å¹•ç©ºé—´çŽ¯å¢ƒé®æŒ¡è´¨é‡ã€‚å¯èƒ½çš„值请å‚阅[enum SSAOBlur]。"
#: doc/classes/Environment.xml:260
-#, fuzzy
msgid "The screen-space ambient occlusion color."
-msgstr "å±å¹•ç©ºé—´çŽ¯å¢ƒé®æŒ¡è¾¹ç¼˜é”度。"
+msgstr "å±å¹•空间环境光é®è”½é¢œè‰²ã€‚"
#: doc/classes/Environment.xml:263
msgid "The screen-space ambient occlusion edge sharpness."
@@ -27579,11 +28221,10 @@ msgid ""
msgstr "主è¦çš„å±å¹•ç©ºé—´çŽ¯å¢ƒé®æŒ¡å¼ºåº¦ã€‚å‚阅[member ssao_radius]。"
#: doc/classes/Environment.xml:272
-#, fuzzy
msgid ""
"The secondary screen-space ambient occlusion intensity. See also [member "
"ssao_radius2]."
-msgstr "主è¦çš„å±å¹•ç©ºé—´çŽ¯å¢ƒé®æŒ¡å¼ºåº¦ã€‚å‚阅[member ssao_radius]。"
+msgstr "主è¦çš„å±å¹•ç©ºé—´çŽ¯å¢ƒå…‰é®æŒ¡å¼ºåº¦ã€‚å‚阅 [member ssao_radius]。"
#: doc/classes/Environment.xml:275
msgid ""
@@ -27601,6 +28242,8 @@ msgid ""
"The screen-space ambient occlusion quality. Higher qualities will make "
"better use of small objects for ambient occlusion, but are slower."
msgstr ""
+"å±å¹•空间的环境é®è”½è´¨é‡ã€‚更高的质é‡å°†æ›´å¥½åœ°åˆ©ç”¨å°ç‰©ä½“进行环境é®è”½ï¼Œä½†é€Ÿåº¦è¾ƒ"
+"慢。"
#: doc/classes/Environment.xml:281
msgid "The primary screen-space ambient occlusion radius."
@@ -27613,6 +28256,8 @@ msgid ""
"occlusion effect which can be used to improve the effect's appearance (at "
"the cost of performance)."
msgstr ""
+"次è¦å±å¹•空间环境é®è”½åŠå¾„。如果设置为高于[code]0[/code]的值,则å¯ç”¨æ¬¡è¦å±å¹•空"
+"间的环境é®è”½æ•ˆæžœï¼Œå¯ä»¥ç”¨æ¥æ”¹å–„效果表现,但以性能为代价。"
#: doc/classes/Environment.xml:287
msgid "The default exposure used for tonemapping."
@@ -27669,6 +28314,9 @@ msgid ""
"BG_SKY] and should be preferred in scenes where reflections can be visible, "
"but the sky itself never is (e.g. top-down camera)."
msgstr ""
+"ä½¿ç”¨è‡ªå®šä¹‰çš„é€æ˜Žé¢œè‰²æ¸…除背景,并å…许定义天空的阴影和åå°„ã€‚è¿™ç§æ¨¡å¼æ¯”"
+"[constant BG_SKY]ç¨å¿«ï¼Œåº”是在å¯ä»¥çœ‹åˆ°å射,但天空本身ä¸å¯è§çš„场景中的首选,例"
+"如,自上而下的相机。"
#: doc/classes/Environment.xml:313
msgid "Displays a [CanvasLayer] in the background."
@@ -27676,7 +28324,7 @@ msgstr "在背景中显示[CanvasLayer]。"
#: doc/classes/Environment.xml:316
msgid "Displays a camera feed in the background."
-msgstr "在背景中显示相机信å·ã€‚"
+msgstr "在背景中显示相机æºã€‚"
#: doc/classes/Environment.xml:319
msgid "Represents the size of the [enum BGMode] enum."
@@ -27727,11 +28375,12 @@ msgid "Filmic tonemapper operator."
msgstr "胶片色调映射器è¿ç®—符。"
#: doc/classes/Environment.xml:343
-#, fuzzy
msgid ""
"Academy Color Encoding System tonemapper operator. Performs an aproximation "
"of the ACES tonemapping curve."
-msgstr "ACES 映射è¿ç®—符。"
+msgstr ""
+"Academy Color Encoding System(学院色彩编ç ç³»ç»Ÿï¼‰è‰²è°ƒæ˜ å°„è¿ç®—器。对ACES色调映"
+"射曲线进行近似计算。"
#: doc/classes/Environment.xml:346
msgid ""
@@ -27742,6 +28391,10 @@ msgid ""
"will eventually become white if the light is bright enough to saturate the "
"camera sensor."
msgstr ""
+"高质é‡çš„Academy Color Encoding System学院色彩编ç ç³»ç»Ÿè‰²è°ƒæ˜ å°„è¿ç®—器,符åˆè¡Œä¸š"
+"æ ‡å‡†ã€‚æ‰§è¡Œæ›´ç²¾ç¡®çš„ç‰©ç†æ›²çº¿æ‹Ÿåˆï¼Œæ›´å¥½åœ°æ¨¡æ‹Ÿå…‰çº¿åœ¨çŽ°å®žä¸–ç•Œä¸­çš„å·¥ä½œæ–¹å¼ã€‚光线和"
+"å‘å…‰ææ–™çš„颜色会éšç€å‘光能é‡çš„å¢žåŠ è€Œå˜æµ…,如果光线足够亮,足以使相机传感器饱"
+"å’Œï¼Œæœ€ç»ˆä¼šå˜æˆç™½è‰²ã€‚"
#: doc/classes/Environment.xml:349
msgid "Low depth-of-field blur quality (fastest)."
@@ -27768,24 +28421,20 @@ msgid "2×2 blur for the screen-space ambient occlusion effect."
msgstr "2×2模糊的å±å¹•ç©ºé—´çŽ¯å¢ƒé®æŒ¡æ•ˆæžœã€‚"
#: doc/classes/Environment.xml:367
-#, fuzzy
msgid "3×3 blur for the screen-space ambient occlusion effect (slowest)."
-msgstr "å±å¹•ç©ºé—´çŽ¯å¢ƒé®æŒ¡æ•ˆæžœä¸æ¨¡ç³Šï¼ˆæœ€å¿«ï¼‰ã€‚"
+msgstr "3×3模糊的å±å¹•ç©ºé—´çŽ¯å¢ƒé®æŒ¡æ•ˆæžœï¼ˆæœ€æ…¢ï¼‰ã€‚"
#: doc/classes/Environment.xml:370
-#, fuzzy
msgid "Low quality for the screen-space ambient occlusion effect (fastest)."
-msgstr "å±å¹•ç©ºé—´çŽ¯å¢ƒé®æŒ¡æ•ˆæžœä¸æ¨¡ç³Šï¼ˆæœ€å¿«ï¼‰ã€‚"
+msgstr "低质é‡çš„å±å¹•ç©ºé—´çŽ¯å¢ƒé®æŒ¡æ•ˆæžœï¼ˆæœ€å¿«ï¼‰ã€‚"
#: doc/classes/Environment.xml:373
-#, fuzzy
msgid "Low quality for the screen-space ambient occlusion effect."
-msgstr "1×1模糊的å±å¹•ç©ºé—´çŽ¯å¢ƒé®æŒ¡æ•ˆæžœã€‚"
+msgstr "低质é‡çš„å±å¹•ç©ºé—´çŽ¯å¢ƒé®æŒ¡æ•ˆæžœã€‚"
#: doc/classes/Environment.xml:376
-#, fuzzy
msgid "Low quality for the screen-space ambient occlusion effect (slowest)."
-msgstr "å±å¹•ç©ºé—´çŽ¯å¢ƒé®æŒ¡æ•ˆæžœä¸æ¨¡ç³Šï¼ˆæœ€å¿«ï¼‰ã€‚"
+msgstr "低质é‡çš„å±å¹•ç©ºé—´çŽ¯å¢ƒé®æŒ¡æ•ˆæžœï¼ˆæœ€æ…¢ï¼‰ã€‚"
#: doc/classes/Expression.xml:4
msgid "A class that stores an expression you can execute."
@@ -27880,11 +28529,14 @@ msgid ""
"OES_EGL_image_external.txt]OES_EGL_image_external[/url].\n"
"[b]Note:[/b] This is only supported for Android platforms."
msgstr ""
+"å¯ç”¨å¯¹OpenGL ESå¤–éƒ¨çº¹ç†æ‰©å±•的支æŒï¼Œå¦‚[url=https://www.khronos.org/registry/"
+"OpenGL/extensions/OES/OES_EGL_image_external.txt]OES_EGL_image_external[/url]"
+"所定义。\n"
+"[b]注æ„:[/b] è¿™åªæ”¯æŒAndroidå¹³å°ã€‚"
#: doc/classes/ExternalTexture.xml:16
-#, fuzzy
msgid "Returns the external texture name."
-msgstr "返回图å—的纹ç†ã€‚"
+msgstr "返回外部纹ç†å称。"
#: doc/classes/ExternalTexture.xml:23
msgid "External texture size."
@@ -27895,7 +28547,6 @@ msgid "Type to handle file reading and writing operations."
msgstr "ç”¨äºŽå¤„ç†æ–‡ä»¶è¯»å†™æ“作的类型。"
#: doc/classes/File.xml:7
-#, fuzzy
msgid ""
"File type. This is used to permanently store data into the user device's "
"file system and to read from it. This can be used to store game save data or "
@@ -27929,8 +28580,8 @@ msgid ""
"process will be killed. You can work around this by calling [method flush] "
"at regular intervals."
msgstr ""
-"文件类型。这是用æ¥å°†æ•°æ®æ°¸ä¹…地存储到用户设备的文件系统中,并从中读å–。例如,"
-"è¿™å¯ä»¥ç”¨æ¥å­˜å‚¨æ¸¸æˆä¿å­˜æ•°æ®æˆ–玩家é…置文件。\n"
+"文件类型。这用æ¥å°†æ•°æ®æ°¸ä¹…存储到用户设备的文件系统中,并å¯ä»Žä¸­è¯»å–。例如,这"
+"å¯ä»¥ç”¨æ¥å­˜å‚¨æ¸¸æˆä¿å­˜æ•°æ®æˆ–玩家é…置文件。\n"
"䏋颿˜¯ä¸€ä¸ªå…³äºŽå¦‚何写入和读出文件的例å­ã€‚\n"
"[codeblock]\n"
"func save(content):\n"
@@ -27946,9 +28597,15 @@ msgstr ""
" file.close()\n"
" return content\n"
"[/codeblock]\n"
-"在上é¢çš„例å­ä¸­ï¼Œæ–‡ä»¶å°†è¢«ä¿å­˜åœ¨[url=https://docs.godotengine.org/zh_CN/latest/"
-"tutorials/io/data_paths.html]user://save_game.dat[/url]æ–‡ä»¶ä¸­æŒ‡å®šçš„ç”¨æˆ·æ•°æ®æ–‡"
-"件夹中。"
+"在上é¢çš„例å­ä¸­ï¼Œæ–‡ä»¶å°†è¢«ä¿å­˜åœ¨[url=https://docs.godotengine.org/zh_CN/stable/"
+"tutorials/io/data_paths.html]æ•°æ®è·¯å¾„[/url]æ–‡ä»¶ä¸­æŒ‡å®šçš„ç”¨æˆ·æ•°æ®æ–‡ä»¶å¤¹ä¸­ã€‚\n"
+"[b]注æ„:[/b] è¦åœ¨å¯¼å‡ºåŽè®¿é—®é¡¹ç›®èµ„æºï¼Œå»ºè®®ä½¿ç”¨[ResourceLoader]è€Œä¸æ˜¯"
+"[File]API,因为有些文件被转æ¢ä¸ºå¼•擎特定的格å¼ï¼Œå…¶åŽŸå§‹æºæ–‡ä»¶å¯èƒ½ä¸å­˜åœ¨äºŽå¯¼å‡ºçš„"
+"PCK包中。\n"
+"[b]注æ„:[/b]åªæœ‰åœ¨è¿›ç¨‹ \"正常\" 退出时,例如通过点击窗å£ç®¡ç†å™¨çš„关闭按钮或按"
+"[b]Alt + F4[/b],文件æ‰ä¼šè‡ªåŠ¨å…³é—­ã€‚å¦‚æžœä½ åœ¨é¡¹ç›®è¿è¡Œæ—¶æŒ‰[b]F8[/b]åœæ­¢é¡¹ç›®æ‰§"
+"行,文件将ä¸ä¼šè¢«å…³é—­ï¼Œå› ä¸ºæ¸¸æˆè¿›ç¨‹å°†è¢«æ€æ­»ã€‚ä½ å¯ä»¥é€šè¿‡å®šæœŸè°ƒç”¨[method flush]"
+"æ¥è§£å†³è¿™ä¸ªé—®é¢˜ã€‚"
#: doc/classes/File.xml:35
msgid ""
@@ -27956,6 +28613,8 @@ msgid ""
"operations. Use [method flush] to persist the data to disk without closing "
"the file."
msgstr ""
+"关闭当剿‰“开的文件,并阻止åŽç»­çš„读/写æ“作。使用[method flush]å°†æ•°æ®æŒä¹…化到ç£"
+"盘,而ä¸å…³é—­æ–‡ä»¶ã€‚"
#: doc/classes/File.xml:41
msgid ""
@@ -27969,9 +28628,15 @@ msgid ""
" # Read data\n"
"[/codeblock]"
msgstr ""
+"如果文件光标已ç»è¯»åˆ°äº†æ–‡ä»¶çš„æœ«ç«¯ï¼Œè¿”回[code]true[/code]。\n"
+"[b]注æ„:[/b][code]ef_reached() == false[/code] ä¸èƒ½ç”¨æ¥æ£€æŸ¥æ˜¯å¦æœ‰æ›´å¤šçš„æ•°æ®"
+"å¯ç”¨ã€‚è¦åœ¨æœ‰æ›´å¤šæ•°æ®å¯ç”¨æ—¶è¿›è¡Œå¾ªçŽ¯ï¼Œè¯·ä½¿ç”¨:\n"
+"[codeblock]\n"
+"while file.get_position() < file.get_len():\n"
+" # Read data\n"
+"[/codeblock]"
#: doc/classes/File.xml:53
-#, fuzzy
msgid ""
"Returns [code]true[/code] if the file exists in the given path.\n"
"[b]Note:[/b] Many resources types are imported (e.g. textures or sound "
@@ -27980,12 +28645,9 @@ msgid ""
"alternative approach that takes resource remapping into account."
msgstr ""
"如果文件存在于给定的路径中,返回[code]true[/code]。\n"
-"[b]注æ„:[/b]许多资æºç±»åž‹è¢«å¯¼å…¥ï¼ˆä¾‹å¦‚çº¹ç†æˆ–声音文件),它们的æºèµ„产将ä¸åŒ…括在"
-"导出的游æˆä¸­ï¼Œå› ä¸ºåªä½¿ç”¨å¯¼å…¥çš„版本(在[code]res://.import[/code]文件夹)。为"
-"äº†æ£€æŸ¥è¿™äº›èµ„æºæ˜¯å¦å­˜åœ¨ï¼ŒåŒæ—¶è€ƒè™‘åˆ°é‡æ–°æ˜ å°„到它们的导入ä½ç½®ï¼Œä½¿ç”¨[method "
-"ResourceLoader.exists]ã€‚é€šå¸¸ï¼Œå½“ä½ åœ¨ç¼–è¾‘å™¨ä¸­å¼€å‘æ—¶ï¼Œå¯¹å¯¼å…¥çš„资æºä½¿ç”¨"
-"[code]File.file_exists[/code]会起作用(æºèµ„产在[code]res://[/code]中存在,但"
-"在导出时失败)。"
+"[b]注æ„:[/b]许多资æºç±»åž‹å¯¼å…¥åŽï¼Œä¾‹å¦‚çº¹ç†æˆ–声音文件,其æºèµ„产ä¸ä¼šåŒ…å«åœ¨å¯¼å‡ºçš„"
+"游æˆä¸­ï¼Œå› ä¸ºåªä½¿ç”¨å¯¼å…¥çš„版本。有关考虑资æºé‡æ–°æ˜ å°„的替代方法,å‚阅[method "
+"ResourceLoader.existence]。"
#: doc/classes/File.xml:60
msgid ""
@@ -27997,6 +28659,11 @@ msgid ""
"[b]Note:[/b] Only call [method flush] when you actually need it. Otherwise, "
"it will decrease performance due to constant disk writes."
msgstr ""
+"将文件的缓冲区写入ç£ç›˜ã€‚关闭文件时会自动执行刷新。这æ„å‘³ç€æ‚¨ä¸éœ€è¦åœ¨ä½¿ç”¨ "
+"[method close] å…³é—­æ–‡ä»¶ä¹‹å‰æ‰‹åŠ¨è°ƒç”¨ [method flush]。尽管如此,å³ä½¿é¡¹ç›®å´©æºƒè€Œ"
+"䏿˜¯æ­£å¸¸å…³é—­ï¼Œè°ƒç”¨ [method flush] ä»å¯ç”¨äºŽç¡®ä¿æ•°æ®å®‰å…¨ã€‚\n"
+"[b]注æ„:[/b]åªæœ‰åœ¨ä½ çœŸæ­£éœ€è¦çš„æ—¶å€™æ‰è°ƒç”¨ [method flush]。å¦åˆ™ï¼Œå®ƒä¼šç”±äºŽä¸æ–­"
+"çš„ç£ç›˜å†™å…¥è€Œé™ä½Žæ€§èƒ½ã€‚"
#: doc/classes/File.xml:67
msgid ""
@@ -28039,9 +28706,8 @@ msgstr ""
"文本将被转为UTF-8ç¼–ç ã€‚"
#: doc/classes/File.xml:99
-#, fuzzy
msgid "Returns next [code]len[/code] bytes of the file as a [PoolByteArray]."
-msgstr "返回下一个文件的[code]len[/code]字节长度,类型为[PackedByteArray]。"
+msgstr "将文件的下一个 [code]len[/code] 长度字节作为 [PoolByteArray] 返回。"
#: doc/classes/File.xml:106
msgid ""
@@ -28065,6 +28731,20 @@ msgid ""
"[code]\"\"[/code] for each quotation mark that needs to be interpreted as "
"such instead of the end of a text value."
msgstr ""
+"以 CSV(逗å·åˆ†éš”值)格å¼è¿”回文件的下一个值。您å¯ä»¥ä¼ é€’ä¸åŒçš„分隔符 "
+"[code]delim[/code] 以使用默认 [code]\",\"[/code](逗å·ï¼‰ä»¥å¤–的其他分隔符。此"
+"分隔符必须为一个字符长,并且ä¸èƒ½æ˜¯åŒå¼•å·ã€‚\n"
+"文本被解释为 UTF-8 ç¼–ç ã€‚如果文本值包å«åˆ†éš”符,则必须用åŒå¼•å·æ‹¬èµ·æ¥ã€‚文本值中"
+"çš„åŒå¼•å·å¯ä»¥é€šè¿‡å°†å®ƒä»¬çš„å‡ºçŽ°æ¬¡æ•°åŠ å€æ¥è½¬ä¹‰ã€‚\n"
+"例如,以下 CSV 行是有效的,æ¯è¡Œå°†è¢«æ­£ç¡®è§£æžä¸ºä¸¤ä¸ªå­—符串:\n"
+"[codeblock]\n"
+"Alice,\"Hello, Bob!\"\n"
+"Bob,Alice! What a surprise!\n"
+"Alice,\"I thought you'd reply with \"\"Hello, world\"\".\"\n"
+"[/codeblock]\n"
+"请注æ„第二行如何çœç•¥å°é—­å¼•å·ï¼Œå› ä¸ºå®ƒä¸åŒ…å«åˆ†éš”符。然而它 [i]å¯ä»¥[/i] 很好地使"
+"用引å·ï¼Œå®ƒåªæ˜¯ä¸ºäº†æ¼”示目的而没有编写。第三行必须使用 [code]\"\"[/code] æ¥è¡¨ç¤º"
+"æ¯ä¸ªéœ€è¦è¢«è§£é‡Šä¸ºå¼•å·çš„引å·ï¼Œè€Œä¸æ˜¯æ–‡æœ¬å€¼çš„结æŸã€‚"
#: doc/classes/File.xml:120
msgid "Returns the next 64 bits from the file as a floating-point number."
@@ -28107,8 +28787,8 @@ msgid ""
"timestamp can be converted to datetime by using [method OS."
"get_datetime_from_unix_time]."
msgstr ""
-"返回unixæ ¼å¼çš„æ—¶é—´æˆ³[code]file[/code]为文件的最åŽä¿®æ”¹æ—¶é—´ï¼Œæˆ–者返回一个[字符"
-"串]\"ERROR IN [code]file[/code]\"。这个unix时间戳å¯ä»¥é€šè¿‡ä½¿ç”¨[method OS."
+"返回unixæ ¼å¼çš„æ—¶é—´æˆ³[code]file[/code]为文件的最åŽä¿®æ”¹æ—¶é—´ï¼Œæˆ–者返回一个"
+"[String]\"ERROR IN [code]file[/code]\"。这个unix时间戳å¯ä»¥é€šè¿‡ä½¿ç”¨[method OS."
"get_datetime_from_unix_time]转æ¢ä¸ºæ•°æ®æ—¶é—´ã€‚"
#: doc/classes/File.xml:165
@@ -28169,6 +28849,10 @@ msgid ""
"Godot, not third-party compression formats. See [url=https://github.com/"
"godotengine/godot/issues/28999]GitHub issue #28999[/url] for a workaround."
msgstr ""
+"æ‰“å¼€åŽ‹ç¼©æ–‡ä»¶è¿›è¡Œè¯»å–æˆ–写入。\n"
+"[b]注æ„:[/b] [method open_compressed] åªèƒ½è¯»å–Godotä¿å­˜çš„æ–‡ä»¶ï¼Œä¸èƒ½è¯»å–第三"
+"方压缩格å¼ã€‚有关解决方法,请å‚阅 [url=https://github.com/godotengine/godot/"
+"issues/28999] GitHub 问题 #28999[/url]。"
#: doc/classes/File.xml:238
msgid ""
@@ -28296,7 +28980,6 @@ msgid "Stores the given array of bytes in the file."
msgstr "在文件中存储给定的字节数组。"
#: doc/classes/File.xml:331
-#, fuzzy
msgid ""
"Store the given [PoolStringArray] in the file as a line formatted in the CSV "
"(Comma-Separated Values) format. You can pass a different delimiter "
@@ -28304,10 +28987,10 @@ msgid ""
"This delimiter must be one-character long.\n"
"Text will be encoded as UTF-8."
msgstr ""
-"将给定的[PackedStringArray]存储为以CSV(逗å·åˆ†éš”值)格å¼è®¾ç½®çš„行。您å¯ä»¥ä¼ é€’"
-"其他定界符[code] delim [/code]以使用默认的[code]“,†[/code](逗å·ï¼‰ä»¥å¤–的符"
-"å·ã€‚该定界符必须为一个字符长。\n"
-"文本将被转为UTF-8ç¼–ç ã€‚"
+"将给定的 [PoolStringArray] 作为CSV(逗å·åˆ†éš”值)格å¼çš„行存储在文件中。您å¯ä»¥"
+"传递ä¸åŒçš„分隔符 [code]delim[/code] 以使用默认 [code]\",\"[/code](逗å·ï¼‰ä»¥å¤–"
+"的其他分隔符。此分隔符的长度必须为一个字符。\n"
+"文本将被编ç ä¸º UTF-8。"
#: doc/classes/File.xml:339
msgid "Stores a floating-point number as 64 bits in the file."
@@ -28322,6 +29005,8 @@ msgid ""
"Appends [code]line[/code] to the file followed by a line return character "
"([code]\\n[/code]), encoding the text as UTF-8."
msgstr ""
+"å°† [code]line[/code] 附加到文件åŽè·Ÿä¸€ä¸ªè¡Œè¿”回字符 ([code]\\n[/code]),将文本"
+"ç¼–ç ä¸º UTF-8。"
#: doc/classes/File.xml:360
msgid ""
@@ -28340,7 +29025,7 @@ msgstr "将浮点数存储在文件中。"
msgid ""
"Appends [code]string[/code] to the file without a line return, encoding the "
"text as UTF-8."
-msgstr ""
+msgstr "å°† [code]string[/code] 附加到文件而ä¸è¿”回行,将文本编ç ä¸º UTF-8。"
#: doc/classes/File.xml:383
msgid ""
@@ -28355,6 +29040,13 @@ msgid ""
"_get_property_list]. See [enum PropertyUsageFlags] for the possible usage "
"flags."
msgstr ""
+"在文件中存储任何 Variant å˜é‡å€¼ã€‚如果 [code]full_objects[/code] 是 "
+"[code]true[/code],则å…许编ç å¯¹è±¡ï¼ˆå¹¶ä¸”å¯èƒ½åŒ…å«ä»£ç ï¼‰ã€‚\n"
+"[b]注æ„:[/b] å¹¶éžæ‰€æœ‰å±žæ€§éƒ½åŒ…æ‹¬åœ¨å†…ã€‚åªæœ‰ä½¿ç”¨ [constant "
+"PROPERTY_USAGE_STORAGE] 标志集é…置的属性æ‰ä¼šè¢«åºåˆ—化。您å¯ä»¥é€šè¿‡è¦†ç›–类中的 "
+"[method Object._get_property_list] 方法å‘属性添加新的使用标志。您还å¯ä»¥é€šè¿‡è°ƒ"
+"用 [method Object._get_property_list] æ¥æ£€æŸ¥å±žæ€§ä½¿ç”¨æ˜¯å¦‚何é…置的。有关å¯èƒ½çš„"
+"使用标志,请å‚阅 [enum PropertyUsageFlags]。"
#: doc/classes/File.xml:390
msgid ""
@@ -28369,35 +29061,41 @@ msgid ""
"the file. Therefore, you must set [member endian_swap] [i]after[/i] opening "
"the file, not before."
msgstr ""
+"如果 [code]true[/code],则使用 big-endian [url=https://en.wikipedia.org/wiki/"
+"Endianness]endianness[/url] è¯»å–æ–‡ä»¶ã€‚如果 [code]false[/code],则文件以 "
+"little-endian 字节åºè¯»å–。如果有疑问,请将其ä¿ç•™ä¸º [code]false[/code],因为大"
+"多数文件都是以å°ç«¯å­—节åºç¼–写的。\n"
+"[b]注æ„:[/b] [member endian_swap] åªæ˜¯æ–‡ä»¶æ ¼å¼ï¼Œä¸ŽCPU类型无关。 CPU 字节åºä¸"
+"会影å“写入文件的默认字节åºã€‚\n"
+"[b]注æ„:[/b]æ¯å½“您打开文件时,它总是é‡ç½®ä¸º [code]false[/code]。因此,必须在 "
+"[i]打开文件之åŽ[/i] 设置 [member endian_swap]ï¼Œè€Œä¸æ˜¯ä¹‹å‰ã€‚"
#: doc/classes/File.xml:397
-#, fuzzy
msgid ""
"Opens the file for read operations. The cursor is positioned at the "
"beginning of the file."
-msgstr "将文件的读/写光标改å˜åˆ°æŒ‡å®šçš„ä½ç½®ï¼ˆä»Žæ–‡ä»¶å¼€å§‹çš„字节数)。"
+msgstr "æ‰“å¼€æ–‡ä»¶è¿›è¡Œè¯»å–æ“作。光标ä½äºŽæ–‡ä»¶çš„开头。"
#: doc/classes/File.xml:400
-#, fuzzy
msgid ""
"Opens the file for write operations. The file is created if it does not "
"exist, and truncated if it does."
-msgstr "为写入,打开文件。如果文件ä¸å­˜åœ¨ï¼Œå°±åˆ›å»ºæ–‡ä»¶ï¼›å¦‚果文件存在,截断文件。"
+msgstr "打开文件进行写æ“作。如果文件ä¸å­˜åœ¨ï¼Œåˆ™åˆ›å»ºè¯¥æ–‡ä»¶ï¼Œå¦‚果存在则截断。"
#: doc/classes/File.xml:403
-#, fuzzy
msgid ""
"Opens the file for read and write operations. Does not truncate the file. "
"The cursor is positioned at the beginning of the file."
-msgstr "打开文件进行读写æ“ä½œã€‚ä¸æˆªæ–­æ–‡ä»¶ã€‚"
+msgstr "打开文件用于读写æ“ä½œã€‚ä¸æˆªæ–­æ–‡ä»¶ã€‚光标ä½äºŽæ–‡ä»¶çš„开头。"
#: doc/classes/File.xml:406
-#, fuzzy
msgid ""
"Opens the file for read and write operations. The file is created if it does "
"not exist, and truncated if it does. The cursor is positioned at the "
"beginning of the file."
-msgstr "å†™å…¥æˆ–è¯»å–æ‰“开文件。如果文件ä¸å­˜åœ¨ï¼Œåˆ™åˆ›å»ºæ–‡ä»¶ï¼›å¦‚果存在,就打开文件。"
+msgstr ""
+"打开文件进行读写æ“作。如果文件ä¸å­˜åœ¨ï¼Œåˆ™åˆ›å»ºè¯¥æ–‡ä»¶ï¼Œå¦‚果存在则截断。光标ä½äºŽ"
+"文件的开头。"
#: doc/classes/File.xml:409
msgid "Uses the [url=http://fastlz.org/]FastLZ[/url] compression method."
@@ -28424,7 +29122,6 @@ msgid "Dialog for selecting files or directories in the filesystem."
msgstr "ç”¨äºŽé€‰æ‹©æ–‡ä»¶ç³»ç»Ÿä¸­çš„æ–‡ä»¶æˆ–ç›®å½•çš„å¯¹è¯æ¡†ã€‚"
#: doc/classes/FileDialog.xml:7
-#, fuzzy
msgid ""
"FileDialog is a preset dialog used to choose files and directories in the "
"filesystem. It supports filter masks. The FileDialog automatically sets its "
@@ -28432,9 +29129,9 @@ msgid ""
"title, disable this by setting [member mode_overrides_title] to [code]false[/"
"code]."
msgstr ""
-"FileDialogæ˜¯ä¸€ä¸ªé¢„è®¾çš„å¯¹è¯æ¡†ï¼Œç”¨äºŽé€‰æ‹©æ–‡ä»¶ç³»ç»Ÿä¸­çš„æ–‡ä»¶å’Œç›®å½•。它支æŒè¿‡æ»¤æŽ©"
-"ç ã€‚FileDialog会根æ®[member file_mode]è‡ªåŠ¨è®¾ç½®å…¶çª—å£æ ‡é¢˜ã€‚如果你想使用一个自"
-"定义的标题,通过设置[member mode_overrides_title]为[code]false[/code]æ¥ç¦ç”¨ã€‚"
+"FileDialog æ˜¯ç”¨äºŽåœ¨æ–‡ä»¶ç³»ç»Ÿä¸­é€‰æ‹©æ–‡ä»¶å’Œç›®å½•çš„é¢„è®¾å¯¹è¯æ¡†ã€‚它支æŒè¿‡æ»¤å™¨æŽ©ç ã€‚æ–‡"
+"ä»¶å¯¹è¯æ¡†ä¼šæ ¹æ® [member mode] è‡ªåŠ¨è®¾ç½®å…¶çª—å£æ ‡é¢˜ã€‚如果您è¦ä½¿ç”¨è‡ªå®šä¹‰æ ‡é¢˜ï¼Œè¯·"
+"å°† [member mode_overrides_title] 设置为 [code] false[/code] æ¥ç¦ç”¨æ­¤æ ‡é¢˜ã€‚"
#: doc/classes/FileDialog.xml:16
msgid ""
@@ -28461,6 +29158,9 @@ msgid ""
"may cause a crash. If you wish to hide it or any of its children, use their "
"[member CanvasItem.visible] property."
msgstr ""
+"返回所选文件的 LineEdit。\n"
+"[b]警告:[/b] 这是一个必需的内部节点,删除和释放它å¯èƒ½ä¼šå¯¼è‡´å´©æºƒã€‚如果您希望"
+"éšè—它或其任何å­é¡¹ï¼Œè¯·ä½¿ç”¨å®ƒä»¬çš„ [member CanvasItem.visible] 属性。"
#: doc/classes/FileDialog.xml:41
msgid ""
@@ -28470,6 +29170,9 @@ msgid ""
"may cause a crash. If you wish to hide it or any of its children, use their "
"[member CanvasItem.visible] property."
msgstr ""
+"è¿”å›žå¯¹è¯æ¡†çš„垂直框容器,å¯ä»¥å‘其中添加自定义控件。\n"
+"[b]警告:[/b] 这是一个必需的内部节点,删除和释放它å¯èƒ½ä¼šå¯¼è‡´å´©æºƒã€‚如果您希望"
+"éšè—它或其任何å­é¡¹ï¼Œè¯·ä½¿ç”¨å®ƒä»¬çš„ [member CanvasItem.visible] 属性。"
#: doc/classes/FileDialog.xml:48
msgid "Invalidate and update the current dialog content list."
@@ -28483,6 +29186,10 @@ msgid ""
"[url=https://github.com/godotengine/godot-proposals/issues/1123]godot-"
"proposals#1123[/url]."
msgstr ""
+"æ–‡ä»¶ç³»ç»Ÿçš„è®¿é—®èŒƒå›´ã€‚è§æžšä¸¾ [code]Access[/code] 常数。\n"
+"[b]警告:[/b] ç›®å‰ï¼Œåœ¨æ²™ç›’环境下,如HTML5构建或沙盒的macOS应用程åºï¼Œ"
+"FileDialog ä¸èƒ½è®¿é—®ä¸»æœºæ–‡ä»¶ç³»ç»Ÿã€‚å‚è§ [url=https://github.com/godotengine/"
+"godot-proposals/issues/1123]godot-proposals#1123 [/url]。"
#: doc/classes/FileDialog.xml:58
msgid "The current working directory of the file dialog."
@@ -28497,33 +29204,30 @@ msgid "The currently selected file path of the file dialog."
msgstr "当å‰é€‰æ‹©çš„æ–‡ä»¶å¯¹è¯æ¡†çš„æ–‡ä»¶è·¯å¾„。"
#: doc/classes/FileDialog.xml:68
-#, fuzzy
msgid ""
"The available file type filters. For example, this shows only [code].png[/"
"code] and [code].gd[/code] files: [code]set_filters(PoolStringArray([\"*."
"png ; PNG Images\",\"*.gd ; GDScript Files\"]))[/code]."
msgstr ""
-"å¯ç”¨çš„æ–‡ä»¶ç±»åž‹è¿‡æ»¤å™¨ã€‚ä¾‹å¦‚ï¼Œè¿™åªæ˜¾ç¤º[code].png[/code]å’Œ[code].gd[/code]文件。"
-"[code]set_filters(PackedStringArray([\"*.png ; PNG Images\", \"*.gd ; "
-"GDScript Files\"])[/code]。"
+"å¯ç”¨çš„æ–‡ä»¶ç±»åž‹è¿‡æ»¤å™¨ã€‚例如,这仅显示 [code].png[/code] å’Œ [code].gd[/code] æ–‡"
+"件: [code]set_filters(PoolStringArray([\"*.png ; PNG Images\", \"*.gd ; "
+"GDScript Files\" ]))[/code]。"
#: doc/classes/FileDialog.xml:71
-#, fuzzy
msgid ""
"The dialog's open or save mode, which affects the selection behavior. See "
"enum [code]Mode[/code] constants."
-msgstr "å¯¹è¯æ¡†çš„æ‰“开或ä¿å­˜æ¨¡å¼ï¼Œå½±å“选择行为。å‚阅[enum FileMode]。"
+msgstr ""
+"å¯¹è¯æ¡†çš„æ‰“开或ä¿å­˜æ¨¡å¼ï¼Œè¿™ä¼šå½±å“选择行为。请å‚阅枚举 [code]Mode[/code] 常é‡ã€‚"
#: doc/classes/FileDialog.xml:74
-#, fuzzy
msgid ""
"If [code]true[/code], changing the [code]Mode[/code] property will set the "
"window title accordingly (e.g. setting mode to [constant MODE_OPEN_FILE] "
"will change the window title to \"Open a File\")."
msgstr ""
-"如果[code]true[/code],改å˜[code]Mode[/code]å±žæ€§å°†ç›¸åº”åœ°è®¾ç½®çª—å£æ ‡é¢˜ï¼ˆä¾‹å¦‚,"
-"将模å¼è®¾ç½®ä¸º[constant FILE_MODE_OPEN_FILE]将改å˜çª—壿 ‡é¢˜ä¸º \"打开一个文件"
-"\")。"
+"如果 [code]true[/code],更改 [code]Mode[/code] å±žæ€§å°†ç›¸åº”åœ°è®¾ç½®çª—å£æ ‡é¢˜ï¼ˆä¾‹"
+"如,将模å¼è®¾ç½®ä¸º [constant MODE_OPEN_FILE] ä¼šå°†çª—å£æ ‡é¢˜æ›´æ”¹ä¸ºâ€œæ‰“开文件â€ï¼‰ã€‚"
#: doc/classes/FileDialog.xml:77
msgid "If [code]true[/code], the dialog will show hidden files."
@@ -28569,7 +29273,7 @@ msgstr "å½“æ–‡ä»¶å­˜åœ¨æ—¶ï¼Œå¯¹è¯æ¡†ä¼šå‘出警告。"
msgid ""
"The dialog only allows accessing files under the [Resource] path "
"([code]res://[/code])."
-msgstr "è¯¥å¯¹è¯æ¡†åªå…许访问[资æº]路径下的文件([code]res://[/code])。"
+msgstr "è¯¥å¯¹è¯æ¡†åªå…许访问[Resource]路径下的文件([code]res://[/code])。"
#: doc/classes/FileDialog.xml:121
msgid ""
@@ -28636,6 +29340,16 @@ msgid ""
"the [method @GDScript.is_equal_approx] and [method @GDScript.is_zero_approx] "
"methods instead of [code]==[/code] to compare [float] values for equality."
msgstr ""
+"[float] 内置类型是一个64ä½åŒç²¾åº¦æµ®ç‚¹æ•°ï¼Œç›¸å½“于C++中的 [code]double[/code]。这"
+"个类型有14个å¯é çš„å°æ•°ä½ç²¾åº¦ã€‚[float] 类型å¯ä»¥å­˜å‚¨åœ¨[Variant] 中,它是引擎使"
+"用的通用类型。[float] 的最大值约为 [code]1.79769e308[/code],最å°å€¼çº¦ä¸º "
+"[code]-1.79769e308[/code]。\n"
+"引擎中的大多数方法和属性都使用32ä½å•精度浮点数æ¥ä»£æ›¿ï¼Œç›¸å½“于C++中的 "
+"[code]float[/code],它有6ä½å¯é çš„å°æ•°ä½ç²¾åº¦ã€‚对于 [Vector2] å’Œ [Vector3] 这样"
+"的数æ®ç»“构,Godot使用32使µ®ç‚¹æ•°ã€‚\n"
+"使用 [float] 类型所åšçš„æ•°å­¦è¿ç®—ä¸èƒ½ä¿è¯ç²¾ç¡®æˆ–确定,而且ç»å¸¸ä¼šäº§ç”Ÿå°çš„错误。你"
+"通常应该使用 [method @GDScript.is_equal_approx] 和 [method @GDScript."
+"is_zero_approx] æ–¹æ³•è€Œä¸æ˜¯ [code]==[/code] æ¥æ¯”较[ float] 值是å¦ç›¸ç­‰ã€‚"
#: doc/classes/float.xml:12
msgid "https://en.wikipedia.org/wiki/Double-precision_floating-point_format"
@@ -28698,6 +29412,18 @@ msgid ""
"emoji) are [i]not[/i] supported on Windows. They will display as unknown "
"characters instead. This will be resolved in Godot 4.0."
msgstr ""
+"字体包å«ä¸€ä¸ªä¸Ž Unicode 兼容的字符集,以åŠç”¨å¯å˜å®½åº¦(width)ã€ä¸Šå‡(ascent)ã€ä¸‹"
+"é™(descent) å’Œ 字符间è·(kerning)绘制的能力。关于从TTF文件(或其他字体格å¼ï¼‰åˆ›"
+"建字体,请å‚è§ç¼–辑器对字体的支æŒã€‚\n"
+"[b]注æ„:[/b] 如果一个 [DynamicFont] ä¸åŒ…å«å­—符串中使用的字符,如果该字符在 "
+"[DynamicFont] 中å¯ç”¨çš„è¯ï¼Œå°†ç”¨ä»£ç ç‚¹ [code]0xfffd[/code] 替æ¢è¯¥å­—符。如果这个"
+"替æ¢å­—符在动æ€å­—体中ä¸å¯ç”¨ï¼Œè¯¥å­—符将被éšè—,而ä¸åœ¨å­—符串中显示任何替æ¢å­—"
+"符。\n"
+"[b]注æ„:[/b]如果 [BitmapFont] ä¸åŒ…å«å­—符串中使用的字符,有关的字符将被éšè—,"
+"而ä¸åœ¨å­—符串中显示任何替æ¢å­—符。\n"
+"[b]注æ„:[/b] [code]0xffff[/code] 之åŽçš„ Unicode 字符(如大多数表情符å·ï¼‰åœ¨"
+"Windows上ä¸è¢« [i]支æŒ[/i]。它们将显示为未知字符。这个问题将在Godot 4.0中解"
+"决。"
#: doc/classes/Font.xml:24
msgid ""
@@ -28732,12 +29458,13 @@ msgid "Returns the font ascent (number of pixels above the baseline)."
msgstr "返回字体的上å‡å¹…度(超出基线的åƒç´ æ•°ï¼‰ã€‚"
#: doc/classes/Font.xml:51
-#, fuzzy
msgid ""
"Returns the size of a character, optionally taking kerning into account if "
"the next character is provided. Note that the height returned is the font "
"height (see [method get_height]) and has no relation to the glyph height."
-msgstr "返回一个字符的大å°ï¼Œå¦‚æžœæä¾›äº†ä¸‹ä¸€ä¸ªå­—符,则å¯é€‰æ‹©è€ƒè™‘字符的间è·ã€‚"
+msgstr ""
+"返回一个字符的大å°ï¼Œå¦‚æžœæä¾›äº†ä¸‹ä¸€ä¸ªå­—符,å¯ä»¥é€‰æ‹©å°†å­—è·è€ƒè™‘在内。注æ„,返回"
+"çš„é«˜åº¦æ˜¯å­—ä½“é«˜åº¦ï¼ˆè§ [method get_height]),与字形高度没有关系。"
#: doc/classes/Font.xml:57
msgid "Returns the font descent (number of pixels below the baseline)."
@@ -28753,6 +29480,8 @@ msgid ""
"that the height returned is the font height (see [method get_height]) and "
"has no relation to the string."
msgstr ""
+"返回一个字符串的大å°ï¼Œå¹¶è€ƒè™‘到字符间è·å’Œæå‰é‡ã€‚注æ„,返回的高度是字体高度"
+"ï¼ˆè§ [method get_height]),与字符串没有关系。"
#: doc/classes/Font.xml:78
msgid ""
@@ -28791,24 +29520,23 @@ msgstr ""
"和调用给定对象中的一个函数的引用。"
#: doc/classes/FuncRef.xml:16
-#, fuzzy
msgid ""
"Calls the referenced function previously set in [member function] or [method "
"@GDScript.funcref]."
msgstr ""
-"调用之å‰ç”±[method set_function]或[method @GDScript.funcref]设置的å‚考函数。"
+"调用以å‰è®¾ç½®åœ¨ [member function] 或 [method @GDScript. funcref] 中的引用函"
+"数。"
#: doc/classes/FuncRef.xml:23
-#, fuzzy
msgid ""
"Calls the referenced function previously set in [member function] or [method "
"@GDScript.funcref]. Contrarily to [method call_func], this method does not "
"support a variable number of arguments but expects all parameters to be "
"passed via a single [Array]."
msgstr ""
-"调用先å‰ç”±[method set_function]或[method @GDScript.funcref]设置的å‚考函数。与"
-"[method call_func]ä¸åŒï¼Œè¿™ä¸ªæ–¹æ³•䏿”¯æŒå¯å˜çš„傿•°æ•°é‡ï¼Œè€Œæ˜¯æ‰€æœ‰çš„傿•°éƒ½é€šè¿‡ä¸€"
-"个[Array]æ¥ä¼ é€’。"
+"调用先å‰åœ¨ [member function] 或 [method @GDScript.funcref] 中设置的引用函数。"
+"与 [method call_func] 相åï¼Œæ­¤æ–¹æ³•ä¸æ”¯æŒå¯å˜æ•°é‡çš„傿•°ï¼Œä½†å¸Œæœ›æ‰€æœ‰å‚数都通过"
+"å•ä¸ªæ•°ç»„å½¢å¼ [Array] 传递。"
#: doc/classes/FuncRef.xml:29
msgid "Returns whether the object still exists and has the function assigned."
@@ -28824,9 +29552,8 @@ msgstr ""
"[Vector2]或[Dictionary]这样的内置类型。"
#: doc/classes/FuncRef.xml:42
-#, fuzzy
msgid "The name of the referenced function."
-msgstr "获å–当å‰åŠ¨ä½œçš„å称。"
+msgstr "被引用函数的å称。"
#: modules/gdnative/doc_classes/GDNativeLibrary.xml:4
msgid ""
@@ -28834,32 +29561,31 @@ msgid ""
msgstr "一个包å«å‡½æ•°æˆ–脚本类的外部库,å¯ä»¥åœ¨Godot中使用。"
#: modules/gdnative/doc_classes/GDNativeLibrary.xml:7
-#, fuzzy
msgid ""
"A GDNative library can implement [NativeScript]s, global functions to call "
"with the [GDNative] class, or low-level engine extensions through interfaces "
"such as [ARVRInterfaceGDNative]. The library must be compiled for each "
"platform and architecture that the project will run on."
msgstr ""
-"GDNative库å¯ä»¥å®žçް[NativeScript],用[GDNative]类调用的全局函数,或通过"
-"[XRInterfaceGDNative]等接å£å®žçŽ°ä½Žçº§åˆ«çš„å¼•æ“Žæ‰©å±•ã€‚è¯¥åº“å¿…é¡»ä¸ºé¡¹ç›®å°†è¦è¿è¡Œçš„æ¯ä¸ª"
-"å¹³å°å’Œæž¶æž„进行编译。"
+"GDNative 库å¯ä»¥å®žçް [NativeScript]ã€ç”¨ [GDNative] 类调用的全局函数或通过 "
+"[ARVRInterfaceGDNative] 等接å£å®žçŽ°çš„ä½Žçº§å¼•æ“Žæ‰©å±•ã€‚è¯¥åº“å¿…é¡»ä¸ºé¡¹ç›®å°†è¦è¿è¡Œçš„æ¯"
+"个平å°å’Œæž¶æž„进行编译。"
#: modules/gdnative/doc_classes/GDNativeLibrary.xml:10
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/plugins/gdnative/gdnative-c-"
"example.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/plugins/gdnative/gdnative-c-"
-"example.html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/plugins/gdnative/"
+"gdnative-c-example.html"
#: modules/gdnative/doc_classes/GDNativeLibrary.xml:11
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/plugins/gdnative/gdnative-cpp-"
"example.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/plugins/gdnative/gdnative-cpp-"
-"example.html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/plugins/gdnative/"
+"gdnative-cpp-example.html"
#: modules/gdnative/doc_classes/GDNativeLibrary.xml:17
msgid ""
@@ -28945,17 +29671,17 @@ msgid ""
"set_script] extends an existing object, if that object's class matches one "
"of the script's base classes."
msgstr ""
-"用GDScript编程语言实现的脚本。该脚本扩展了实例化该对象的所有对象的功能。\n"
-"[method new]创建脚本的新实例。如果该对象的类与脚本的基类之一匹é…,则[method "
-"Object.set_script]会扩展该对象。"
+"用GDScript编程语言实现的脚本。该脚本扩展了实例化该对象åŽå…¶æ‰€æœ‰å¯¹è±¡çš„功能。\n"
+"[method new] 创建脚本的新实例。如果一个对象的类与脚本的基类之一匹é…,则 "
+"[method Object.set_script] 会扩展该对象。"
#: modules/gdscript/doc_classes/GDScript.xml:11
msgid ""
"https://docs.godotengine.org/en/3.4/getting_started/scripting/gdscript/index."
"html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/getting_started/scripting/gdscript/index."
-"html"
+"https://docs.godotengine.org/zh_CN/stable/getting_started/scripting/gdscript/"
+"index.html"
#: modules/gdscript/doc_classes/GDScript.xml:17
msgid "Returns byte code for the script source code."
@@ -28984,16 +29710,15 @@ msgid "State of a function call after yielding."
msgstr "一个函数在调用åŽå¤±æ•ˆçš„状æ€ã€‚"
#: modules/gdscript/doc_classes/GDScriptFunctionState.xml:7
-#, fuzzy
msgid ""
"Calling [method @GDScript.yield] within a function will cause that function "
"to yield and return its current state as an object of this type. The yielded "
"function call can then be resumed later by calling [method resume] on this "
"state object."
msgstr ""
-"修正。从4.0版的GDScripté‡å†™å¼€å§‹ï¼Œæ–‡æ¡£å·²ç»è¿‡æ—¶äº†ã€‚\n"
-"在一个函数中调用[code]yield[/code]会使该函数失效并将其当å‰çжæ€ä½œä¸ºè¯¥ç±»åž‹çš„对"
-"象返回。之åŽå¯ä»¥é€šè¿‡å¯¹è¿™ä¸ªçжæ€å¯¹è±¡è°ƒç”¨[method resume]æ¥æ¢å¤è¢«å¤±æ•ˆçš„函数调用。"
+"在函数中调用 [method @GDScript.yield] 将导致该函数作为此类型的对象让步并返回"
+"其当å‰çжæ€ã€‚ç„¶åŽå¯ä»¥é€šè¿‡åœ¨æ­¤çжæ€å¯¹è±¡ä¸Šè°ƒç”¨ [method resume] æ¥ä½¿è®©æ­¥çš„函数æ¢å¤"
+"调用。"
#: modules/gdscript/doc_classes/GDScriptFunctionState.xml:16
msgid ""
@@ -29012,7 +29737,6 @@ msgstr ""
"å¤ï¼Œä½ å¯ä»¥ä½¿ç”¨è¿™ä¸ªã€‚"
#: modules/gdscript/doc_classes/GDScriptFunctionState.xml:24
-#, fuzzy
msgid ""
"Resume execution of the yielded function call.\n"
"If handed an argument, return the argument from the [method @GDScript.yield] "
@@ -29021,10 +29745,10 @@ msgid ""
"This function returns what the resumed function call returns, possibly "
"another function state if yielded again."
msgstr ""
-"继续执行失效的函数调用。\n"
-"å¦‚æžœäº¤å‡ºä¸€ä¸ªå‚æ•°ï¼Œåˆ™è¿”回被交出的函数调用中的[code]yield[/code]è°ƒç”¨çš„å‚æ•°ã€‚ä½ "
-"å¯ä»¥ä¼ é€’例如一个[Array]æ¥ä¼ é€’å¤šä¸ªå‚æ•°ã€‚\n"
-"这个函数返回被æ¢å¤çš„å‡½æ•°è°ƒç”¨æ‰€è¿”å›žçš„ä¸œè¥¿ï¼Œå¦‚æžœå†æ¬¡å¤±æ•ˆï¼Œå¯èƒ½æ˜¯å¦ä¸€ä¸ªå‡½æ•°çж"
+"继续执行让步的函数调用。\n"
+"å¦‚æžœä¼ é€’äº†ä¸€ä¸ªå‚æ•°ï¼Œåˆ™ä»Žäº§ç”Ÿçš„函数调用中的 [method @GDScript.yield] 调用返回"
+"傿•°ã€‚ä½ å¯ä»¥é€šè¿‡ä¾‹å¦‚一个 [Array] æ¥å¤„ç†å¤šä¸ªå‚数。 \n"
+"此函数返回接续的函数调用åŽè¿”å›žçš„å†…å®¹ï¼Œå¦‚æžœå†æ¬¡æ¢å¤è°ƒç”¨ï¼Œå¯èƒ½æ˜¯å¦ä¸€ä¸ªå‡½æ•°çж"
"æ€ã€‚"
#: doc/classes/Generic6DOFJoint.xml:4
@@ -29459,19 +30183,17 @@ msgid "Represents the size of the [enum Flag] enum."
msgstr "表示[enum Flag]枚举的大å°ã€‚"
#: doc/classes/Geometry.xml:4
-#, fuzzy
msgid "Helper node to calculate generic geometry operations."
-msgstr "帮助节点用于计算二维空间中的通用几何æ“作。"
+msgstr "用于计算通用几何æ“作的辅助节点。"
#: doc/classes/Geometry.xml:7
-#, fuzzy
msgid ""
"Geometry provides users with a set of helper functions to create geometric "
"shapes, compute intersections between shapes, and process various other "
"geometric operations."
msgstr ""
-"Geometry2D为用户æä¾›äº†ä¸€ç»„辅助函数,用于创建几何图形,计算图形之间的交点,以"
-"åŠå¤„ç†å…¶ä»–å„ç§å‡ ä½•æ“作。"
+"Geometry 为用户æä¾›äº†ä¸€ç»„辅助函数,用于创建几何形状ã€è®¡ç®—形状之间的交点以åŠå¤„"
+"ç†å„ç§å…¶ä»–几何æ“作。"
#: doc/classes/Geometry.xml:16
msgid ""
@@ -29555,7 +30277,6 @@ msgstr ""
"个点相åŒã€‚"
#: doc/classes/Geometry.xml:77
-#, fuzzy
msgid ""
"Mutually excludes common area defined by intersection of [code]polygon_a[/"
"code] and [code]polygon_b[/code] (see [method intersect_polygons_2d]) and "
@@ -29566,12 +30287,12 @@ msgid ""
"(hole) produced which could be distinguished by calling [method "
"is_polygon_clockwise]."
msgstr ""
-"相互排除由[code]polygon_a[/code]å’Œ[code]polygon_b[/code](è§[method "
+"相互排除由 [code]polygon_a[/code] å’Œ [code]polygon_b[/code]ï¼ˆè§ [method "
"intersect_polygons])的交å‰ç‚¹å®šä¹‰çš„公共区域,并返回一个排除的多边形数组。这在"
-"多边形之间执行了[constant OPERATION_XOR]。æ¢å¥è¯è¯´ï¼Œè¿”回多边形之间除公共区域"
+"多边形之间执行了 [constant OPERATION_XOR]。æ¢å¥è¯è¯´ï¼Œè¿”回多边形之间除公共区域"
"外的所有区域。\n"
-"该æ“作å¯èƒ½ä¼šäº§ç”Ÿä¸€ä¸ªå¤–部多边形(边界)和内部多边形(孔),å¯ä»¥é€šè¿‡è°ƒç”¨"
-"[method is_polygon_clockwise]æ¥åŒºåˆ†ã€‚"
+"该æ“作å¯èƒ½ä¼šäº§ç”Ÿä¸€ä¸ªå¤–部多边形(边界)和内部多边形(孔),å¯ä»¥é€šè¿‡è°ƒç”¨ "
+"[method is_polygon_clockwise] æ¥åŒºåˆ†ã€‚"
#: doc/classes/Geometry.xml:87
msgid ""
@@ -29614,7 +30335,6 @@ msgstr ""
"以在线段外,å³åœ¨ä»Žçº¿æ®µå»¶ä¼¸å‡ºæ¥çš„æŸå¤„ã€‚"
#: doc/classes/Geometry.xml:124
-#, fuzzy
msgid ""
"Given the two 3D segments ([code]p1[/code], [code]p2[/code]) and ([code]q1[/"
"code], [code]q2[/code]), finds those two points on the two segments that are "
@@ -29622,13 +30342,12 @@ msgid ""
"on ([code]p1[/code], [code]p2[/code]) as well the accompanying point on "
"([code]q1[/code], [code]q2[/code])."
msgstr ""
-"给出两个3D线段([code]p1[/code], [code]p2[/code])和([code]q1[/code], "
-"[code]q2[/code]),找到这两个线段上最接近的两个点。返回一个"
-"[PackedVector2Array],其中包å«([code]p1[/code], [code]p2[/code])上的这个点以"
-"åŠ([code]q1[/code], [code]q2[/code])上的伴éšç‚¹ã€‚"
+"给定两个 3D 线段 ([code]p1[/code],[code]p2[/code]) 和 ([code]q1[/code],"
+"[code]q2[/code]),到这两个线段上最接近的两个点。返回一个 [PoolVector3Array],"
+"å…¶ä¸­åŒ…å« ([code]p1[/code],[code]p2[/code]) ä¸Šçš„è¿™ä¸ªç‚¹ä»¥åŠ ([code]q1[/code],"
+"[code]q2[/code]) 上的伴éšç‚¹."
#: doc/classes/Geometry.xml:134
-#, fuzzy
msgid ""
"Given the two 2D segments ([code]p1[/code], [code]q1[/code]) and ([code]p2[/"
"code], [code]q2[/code]), finds those two points on the two segments that are "
@@ -29636,10 +30355,10 @@ msgid ""
"on ([code]p1[/code], [code]q1[/code]) as well the accompanying point on "
"([code]p2[/code], [code]q2[/code])."
msgstr ""
-"给出两个2D线段([code]p1[/code], [code]p2[/code])和([code]q1[/code], "
-"[code]q2[/code]),找到这两个线段上最接近的两个点。返回一个"
-"[PackedVector2Array],其中包å«([code]p1[/code], [code]p2[/code])上的这个点以"
-"åŠ([code]q1[/code], [code]q2[/code])上的伴éšç‚¹ã€‚"
+"给定两个 2D 线段 ([code]p1[/code],[code]q1[/code]) 和 ([code]p2[/code],"
+"[code]q2[/code]),找到这两个线段上最接近的两个点。返回一个 "
+"[PoolVector2Array]ï¼Œå…¶ä¸­åŒ…å« ([code]p1[/code],[code]q1[/code]) 上的这个点以"
+"åŠ ([code]p2[/code], [code]q2[/code]) 上的伴éšç‚¹."
#: doc/classes/Geometry.xml:141
msgid "Used internally by the engine."
@@ -29723,7 +30442,6 @@ msgstr ""
"åŒ…å«æ•´ä¸ªå›¾é›†çš„æ•´ä½“大å°ï¼Œä½œä¸º[Vector2]。"
#: doc/classes/Geometry.xml:208
-#, fuzzy
msgid ""
"Merges (combines) [code]polygon_a[/code] and [code]polygon_b[/code] and "
"returns an array of merged polygons. This performs [constant "
@@ -29732,13 +30450,12 @@ msgid ""
"polygons (holes) produced which could be distinguished by calling [method "
"is_polygon_clockwise]."
msgstr ""
-"åˆå¹¶ï¼ˆç»“åˆï¼‰[code]polygon_a[/code]å’Œ[code]polygon_b[/code],并返回一个åˆå¹¶çš„"
-"多边形数组。在多边形之间执行[constant OPERATION_UNION]。\n"
-"该æ“作å¯èƒ½ä¼šäº§ç”Ÿä¸€ä¸ªå¤–部多边形(边界)和内部多边形(孔),å¯ä»¥é€šè¿‡è°ƒç”¨"
-"[method is_polygon_clockwise]æ¥åŒºåˆ†ã€‚"
+"åˆå¹¶ï¼ˆç»“åˆï¼‰[code]polygon_a[/code] å’Œ [code]polygon_b[/code],并返回一个åˆå¹¶"
+"的多边形数组。在多边形之间执行 [constant OPERATION_UNION]。\n"
+"该æ“作å¯èƒ½ä¼šäº§ç”Ÿä¸€ä¸ªå¤–部多边形(边界)和内部多边形(孔),å¯ä»¥é€šè¿‡è°ƒç”¨ "
+"[method is_polygon_clockwise] æ¥åŒºåˆ†ã€‚"
#: doc/classes/Geometry.xml:218
-#, fuzzy
msgid ""
"Inflates or deflates [code]polygon[/code] by [code]delta[/code] units "
"(pixels). If [code]delta[/code] is positive, makes the polygon grow outward. "
@@ -29763,23 +30480,24 @@ msgid ""
"150), Vector2(50, 150)]\n"
"[/codeblock]"
msgstr ""
-"å°†[code]多边形polygon[/code]膨胀或缩å°[code]delta[/code]å•ä½ï¼ˆåƒç´ ï¼‰ã€‚如果"
-"[code]delta[/code]为正数,使多边形å‘外增长。如果[code]delta[/code]为负数,使"
-"多边形å‘内收缩。返回一个多边形数组,因为充气/放气å¯èƒ½å¯¼è‡´å¤šä¸ªç¦»æ•£çš„多边形。如"
-"æžœ[code]delta[/code]为负数,并且其ç»å¯¹å€¼å¤§çº¦è¶…过了多边形的最å°è¾¹ç•ŒçŸ©å½¢å°ºå¯¸ï¼Œ"
-"则返回一个空数组。\n"
-"æ¯ä¸ªå¤šè¾¹å½¢çš„顶点将按照[code]join_type[/code]确定的方å¼è¿›è¡Œåœ†è§’处ç†ï¼Œè§[enum "
-"PolyJoinType]。\n"
-"该æ“作å¯èƒ½ä¼šäº§ç”Ÿä¸€ä¸ªå¤–部多边形(边界)和内部多边形(孔),å¯ä»¥é€šè¿‡è°ƒç”¨[方法"
-"is_polygon_clockwise]æ¥åŒºåˆ†ã€‚\n"
-"[b]注æ„:[/b]è¦å…·ä½“翻译多边形的顶点,请使用[method Transform2D.xform]方法。\n"
-"[codeblock]\n"
-"var polygon = PackedVector2Array([Vector2(0, 0), Vector2(100, 0), "
-"Vector2(100, 100), Vector2(0, 100)] )\n"
+"通过 [code]delta[/code] å•ä½ï¼ˆåƒç´ ï¼‰è†¨èƒ€æˆ–缩å°å¤šè¾¹å½¢ [code]polygon [/code]。"
+"如果 [code]delta[/code] 是正数,使多边形å‘外增长。如果 [code]delta[/code] 是"
+"负数,则使多边形å‘内收缩。返回一个多边形数组,因为膨胀或缩å°å¯èƒ½å¯¼è‡´å¤šä¸ªç¦»æ•£"
+"的多边形。如果 [code]delta[/code] 为负数,并且其ç»å¯¹å€¼å¤§çº¦è¶…过了多边形的最å°"
+"边界矩形尺寸,则返回一个空数组。\n"
+"æ¯ä¸ªå¤šè¾¹å½¢çš„顶点将按照 [code]join_type[/code] 确定的方å¼è¿›è¡Œåœ†è§’处ç†ï¼Œè§ "
+"[enum PolyJoinType]。\n"
+"该æ“作å¯èƒ½ä¼šäº§ç”Ÿä¸€ä¸ªå¤–部多边形(边界)和内部多边形(孔),å¯ä»¥é€šè¿‡è°ƒç”¨ "
+"[method is_polygon_clockwise]æ¥åŒºåˆ†ã€‚\n"
+"[b]注æ„:[/b]è¦å…·ä½“平移多边形的顶点,请使用 [method Transform2D.xform] æ–¹"
+"法。\n"
+"[codeblock]\n"
+"var polygon = PoolVector2Array([ Vector2(0, 0), Vector2(100, 0), "
+"Vector2(100, 100), Vector2(0, 100) ] )\n"
"var offset = Vector2(50, 50)\n"
"polygon = Transform2D(0, offset).xform(polygon)\n"
-"print(polygon) #打å°å‡º[Vector2(50, 50), Vector2(150, 50), Vector2(150, 150), "
-"Vector2(50, 150)] 。\n"
+"print(polygon) #打å°å‡º [Vector2(50, 50), Vector2(150, 50), Vector2(150, "
+"150), Vector2(50, 150)] 。\n"
"[/codeblock]"
#: doc/classes/Geometry.xml:237
@@ -29835,9 +30553,12 @@ msgid ""
"case if the line extending the segment would intersect the circle, but the "
"segment does not)."
msgstr ""
+"给出2D线段([code]segment_from[/code],[code]segment_to[/code]),返回线段上"
+"与圆心为 [code]circle_position[/code] ã€åŠå¾„为 [code]circle_radius[/code] 圆"
+"的相交ä½ç½®ï¼ˆä»¥0到1之间的数字)。如果线段没有与圆相交,则返回-1(如果延伸线段"
+"çš„çº¿æ®µä¸Žåœ†ç›¸äº¤ï¼Œä½†çº¿æ®µæ²¡æœ‰ç›¸äº¤ï¼Œä¹Ÿæ˜¯è¿™ç§æƒ…况)。"
#: doc/classes/Geometry.xml:280
-#, fuzzy
msgid ""
"Given a convex hull defined though the [Plane]s in the array [code]planes[/"
"code], tests if the segment ([code]from[/code], [code]to[/code]) intersects "
@@ -29845,13 +30566,12 @@ msgid ""
"containing the point the intersection and the hull's normal. If no "
"intersecion is found, an the returned array is empty."
msgstr ""
-"给定一个通过数组[code] planes [/code]中的[Plane]定义的凸包,测试线段"
-"([code]from[/code],[code]to[/code])是å¦ä¸Žè¯¥åŒ…相交。如果找到相交点,则返回"
-"一个[PackedVector3Array],其中包å«ç›¸äº¤ç‚¹å’Œèˆ¹ä½“的法线。如果找ä¸åˆ°ç›¸äº¤ï¼Œåˆ™è¿”回"
-"的数组为空。"
+"给定一个通过数组 [code]planes[/code] 中的 [Plane]s 定义的凸é¢ä½“,测试线段"
+"([code]from[/code],[code]to[/code])是å¦ä¸Žè¯¥é¢ä½“相交。如果找到相交点,返回"
+"一个[PoolVector3Array],包å«ç›¸äº¤ç‚¹å’Œå‡¸é¢ä½“的法线。如果没有找到相交点,返回的"
+"数组为空。"
#: doc/classes/Geometry.xml:290
-#, fuzzy
msgid ""
"Checks if the segment ([code]from[/code], [code]to[/code]) intersects the "
"cylinder with height [code]height[/code] that is centered at the origin and "
@@ -29859,10 +30579,10 @@ msgid ""
"If an intersection takes place, the returned array contains the point of "
"intersection and the cylinder's normal at the point of intersection."
msgstr ""
-"检查线段([code]from[/code],[code]to[/code])是å¦ä¸Žé«˜åº¦[code]height[/code]çš„"
-"圆柱体相交,圆柱体以原点为中心,åŠå¾„为[code]radius[/code]。如果没有,返回一个"
-"空的[PackedVector3Array]。如果å‘生了相交,返回的数组包å«ç›¸äº¤ç‚¹å’Œåœ†æŸ±ä½“在相交"
-"点的法线。"
+"检查线段([code]from[/code],[code]to[/code])是å¦ä¸Žé«˜åº¦ [code]height[/code] "
+"的圆柱体相交,圆柱体以原点为中心,åŠå¾„为 [code]radius[/code]。如果没有,返回"
+"一个空的 [PackedVector3Array]。如果å‘生了相交,返回的数组包å«ç›¸äº¤ç‚¹å’Œåœ†æŸ±ä½“在"
+"相交点的法线。"
#: doc/classes/Geometry.xml:300
msgid ""
@@ -29876,7 +30596,6 @@ msgstr ""
"交,返回一个空的[Variant]。"
#: doc/classes/Geometry.xml:310
-#, fuzzy
msgid ""
"Checks if the segment ([code]from[/code], [code]to[/code]) intersects the "
"sphere that is located at [code]sphere_position[/code] and has radius "
@@ -29884,10 +30603,10 @@ msgid ""
"yes, returns a [PoolVector3Array] containing the point of intersection and "
"the sphere's normal at the point of intersection."
msgstr ""
-"检查线段([code]from[/code],[code]to[/code])是å¦ä¸Žä½äºŽ"
-"[code]sphere_position[/code]ã€åŠå¾„为[code]sphere_radius[/code]çš„çƒä½“相交。如"
-"果没有,返回一个空的[PackedVector3Array]。如果是,返回一个包å«äº¤ç‚¹å’Œäº¤ç‚¹å¤„çƒ"
-"体法线的 [PackedVector3Array]。"
+"检查线段([code]from[/code],[code]to[/code])是å¦ä¸Žçƒå¿ƒä¸º "
+"[code]sphere_position[/code]ã€åŠå¾„为 [code]sphere_radius[/code] çš„çƒä½“相交。"
+"如果没有,返回一个空的 [PackedVector3Array]。如果相交,返回一个包å«äº¤ç‚¹å’Œäº¤ç‚¹"
+"处çƒä½“法线的 [PackedVector3Array]。"
#: doc/classes/Geometry.xml:321
msgid ""
@@ -29901,7 +30620,6 @@ msgstr ""
"生相交,则返回一个空的[Variant]。"
#: doc/classes/Geometry.xml:328
-#, fuzzy
msgid ""
"Triangulates the area specified by discrete set of [code]points[/code] such "
"that no point is inside the circumcircle of any resulting triangle. Returns "
@@ -29911,14 +30629,13 @@ msgid ""
"triangles). If the triangulation did not succeed, an empty [PoolIntArray] is "
"returned."
msgstr ""
-"对由离散的[code]points[/code]é›†åˆæŒ‡å®šçš„区域进行三角化,使得没有一个点ä½äºŽä»»ä½•"
-"结果的三角形的圆周内。返回一个[PackedInt32Array],其中æ¯ä¸ªä¸‰è§’形由"
-"[code]points[/code]的三个连续的点索引组æˆï¼ˆå³è¿”回的数组将有[code]n * 3[/code]"
-"个元素,其中[code]n[/code]是找到的三角形的数é‡ï¼‰ã€‚如果三角化没有æˆåŠŸï¼Œå°†è¿”å›ž"
-"一个空的[PackedInt32Array]。"
+"对由离散的 [code]point[/code] ç‚¹é›†åˆæŒ‡å®šçš„区域进行三角化,使得任何点都ä¸åœ¨ä»»"
+"何结果三角形的外接圆内。返回一个 [PoolIntArray],其中æ¯ä¸ªä¸‰è§’形由 "
+"[code]point[/code] 点的三个连续的点索引组æˆï¼ˆå³è¿”回的数组将有 [code]n * 3[/"
+"code] 元素,[code]n[/code] 是找到的三角形的数é‡ï¼‰ã€‚如果三角化没有æˆåŠŸï¼Œå°†è¿”å›ž"
+"一个空的 [PoolIntArray]。"
#: doc/classes/Geometry.xml:335
-#, fuzzy
msgid ""
"Triangulates the polygon specified by the points in [code]polygon[/code]. "
"Returns a [PoolIntArray] where each triangle consists of three consecutive "
@@ -29927,10 +30644,10 @@ msgid ""
"triangles). If the triangulation did not succeed, an empty [PoolIntArray] is "
"returned."
msgstr ""
-"对[code]多边形polygon[/code]中的点指定的多边形进行三角化。返回一个"
-"[PackedInt32Array],其中æ¯ä¸ªä¸‰è§’形由[code]polygon[/code]中三个连续的点索引组"
-"æˆï¼ˆå³è¿”回的数组将有[code]n * 3[/code]个元素,[code]n[/code]是找到的三角形的"
-"æ•°é‡ï¼‰ã€‚如果三角化没有æˆåŠŸï¼Œå°†è¿”å›žä¸€ä¸ªç©ºçš„[PackedInt32Array]。"
+"对多边形 [code]polygon[/code] 中的点指定的多边形进行三角化。返回一个 "
+"[PoolIntArray],其中æ¯ä¸ªä¸‰è§’形由 [code]polygon[/code] 中三个连续的点索引组æˆ"
+"(å³è¿”回的数组将有 [code]n * 3[/code] 个元素,[code]n[/code] 是找到的三角形的"
+"æ•°é‡ï¼‰ã€‚如果三角化没有æˆåŠŸï¼Œå°†è¿”å›žä¸€ä¸ªç©ºçš„ [PoolIntArray]。"
#: doc/classes/Geometry.xml:341
msgid ""
@@ -30052,12 +30769,14 @@ msgid ""
"lighting, but the resulting lightmap will not be saved. Useful for emissive "
"only materials or shadow casters."
msgstr ""
+"当ç¦ç”¨æ—¶ï¼Œè®¡ç®—间接光照时将考虑网格,但产生的光照贴图ä¸ä¼šè¢«ä¿å­˜ã€‚适用于仅有å‘"
+"å…‰æè´¨æˆ–阴影投射器。"
#: doc/classes/GeometryInstance.xml:46
msgid ""
"Scale factor for the generated baked lightmap. Useful for adding detail to "
"certain mesh instances."
-msgstr ""
+msgstr "生æˆçš„烘焙光照贴图的缩放系数。对增加æŸäº›ç½‘格实例的细节很有用。"
#: doc/classes/GeometryInstance.xml:49
msgid ""
@@ -30106,22 +30825,24 @@ msgid ""
"If [code]true[/code], this GeometryInstance will be used when baking lights "
"using a [GIProbe] or [BakedLightmap]."
msgstr ""
+"如果 [code]true[/code],则在使用 [GIProbe] 或 [BakedLightmap] 烘焙ç¯å…‰æ—¶å°†ä½¿"
+"用此 GeometryInstance。"
#: doc/classes/GeometryInstance.xml:74
msgid "The generated lightmap texture will have the original size."
-msgstr ""
+msgstr "生æˆçš„光照贴图纹ç†å°†å…·æœ‰åŽŸå§‹å¤§å°ã€‚"
#: doc/classes/GeometryInstance.xml:77
msgid "The generated lightmap texture will be twice as large, on each axis."
-msgstr ""
+msgstr "生æˆçš„光照贴图纹ç†å°†æ˜¯æ¯ä¸ªè½´ä¸Šçš„ 2 å€ã€‚"
#: doc/classes/GeometryInstance.xml:80
msgid "The generated lightmap texture will be 4 times as large, on each axis."
-msgstr ""
+msgstr "生æˆçš„光照贴图纹ç†å°†æ˜¯æ¯ä¸ªè½´ä¸Šçš„ 4 å€ã€‚"
#: doc/classes/GeometryInstance.xml:83
msgid "The generated lightmap texture will be 8 times as large, on each axis."
-msgstr ""
+msgstr "生æˆçš„光照贴图纹ç†å°†æ˜¯æ¯ä¸ªè½´ä¸Šçš„ 8 å€ã€‚"
#: doc/classes/GeometryInstance.xml:88
msgid "Will not cast any shadows."
@@ -30159,12 +30880,14 @@ msgid ""
"Will allow the GeometryInstance to be used when baking lights using a "
"[GIProbe] or [BakedLightmap]."
msgstr ""
+"å°†å…许在使用[GIProbe]或[BakedLightmap]进行ç¯å…‰çƒ˜ç„™æ—¶ä½¿ç”¨GeometryInstance几何"
+"实例。"
#: doc/classes/GeometryInstance.xml:106
msgid ""
"Unused in this class, exposed for consistency with [enum VisualServer."
"InstanceFlags]."
-msgstr ""
+msgstr "在此类中未使用,公开以与 [enum VisualServer.InstanceFlags] ä¿æŒä¸€è‡´ã€‚"
#: doc/classes/GIProbe.xml:4
msgid "Real-time global illumination (GI) probe."
@@ -30183,26 +30906,42 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-"[GIProbe]用于为场景æä¾›é«˜è´¨é‡çš„实时间接光。它们预先计算å‘å…‰å¯¹è±¡çš„æ•ˆæžœå’Œé™æ€å‡ "
-"ä½•å›¾å½¢çš„æ•ˆæžœï¼Œä»¥å®žæ—¶æ¨¡æ‹Ÿå¤æ‚光的行为。 [GIProbe]必须先烘烤æ‰èƒ½ä½¿ç”¨ï¼Œä½†æ˜¯ä¸€æ—¦"
-"烘烤,动æ€ç‰©ä½“就会从它们那里接收光。此外,ç¯å…‰å¯ä»¥æ˜¯å®Œå…¨åЍæ€çš„æˆ–烘烤的。\n"
-"在场景中使用[GIProbe]å¯èƒ½ä¼šå¾ˆæ˜‚è´µ(å ç”¨è¾ƒå¤šèµ„æº),å¯ä»¥ä½¿ç”¨[member "
-"ProjectSettings.rendering / quality / gi_probes / quality]é™ä½ŽæŽ¢é’ˆçš„è´¨é‡ï¼Œä»¥"
-"æ¢å–[ProjectSettings]中更好的性能。"
-
-#: doc/classes/GIProbe.xml:13
+"[GIProbe]是用æ¥ä¸ºåœºæ™¯æä¾›é«˜è´¨é‡çš„实时间接光照。它们预先计算å‘光物体的效果和é™"
+"æ€å‡ ä½•ä½“çš„æ•ˆæžœï¼Œä»¥å®žæ—¶æ¨¡æ‹Ÿå¤æ‚光线的行为。[GIProbe]在使用å‰éœ€è¦è¿›è¡Œçƒ˜ç„™ï¼Œè€Œ"
+"åŽï¼Œä¸€æ—¦çƒ˜ç„™ï¼ŒåЍæ€ç‰©ä½“就会从它们那里接收光线。此外,ç¯å…‰å¯ä»¥æ˜¯å®Œå…¨åЍæ€çš„,也"
+"å¯ä»¥æ˜¯çƒ˜ç„™çš„。\n"
+"在场景中使用[GIProbe]会很消耗资æºï¼Œå¯ä»¥åœ¨[ProjectSettings]中使用[member "
+"ProjectSettings.rendering/quality/voxel_cone_tracing/high_quality]æ¥è°ƒä½ŽæŽ¢å¤´"
+"的质é‡ï¼Œä»¥èŽ·å¾—æ›´å¥½çš„æ€§èƒ½ã€‚\n"
+"[b]注æ„:[/b]网格应该有足够厚的墙以é¿å…æ¼å…‰ï¼Œæ³¨ï¼Œé¿å…å•é¢å¢™ã€‚对于内部关å¡ï¼Œå°†"
+"你的关å¡å‡ ä½•体包围在一个足够大的盒å­é‡Œï¼Œå¹¶å°†çŽ¯è·¯è”æŽ¥èµ·æ¥ä»¥å…³é—­ç½‘格。\n"
+"[b]注æ„:[/b]由于渲染器的é™åˆ¶ï¼Œåœ¨[GIProbe]中使用å‘光的[ShaderMaterial]æ—¶ä¸èƒ½"
+"å‘å…‰ã€‚åªæœ‰å‘射型的[SpatialMaterial]å¯ä»¥åœ¨[GIProbe]中å‘射光线。"
+
+#: doc/classes/GIProbe.xml:15
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
-msgstr "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
+msgstr "https://docs.godotengine.org/zh_CN/stable/tutorials/3d/gi_probes.html"
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
#, fuzzy
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
@@ -30212,20 +30951,24 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
-msgstr ""
-"从所有标有[constant GeometryInstance3D.GI_MODE_BAKED]的[GeometryInstance3D]和"
-"标有[constant Light3D.BAKE_DYNAMIC]或[constant Light3D.BAKE_STATIC]的"
-"[Light3D]烘烤效果。如果[code]create_visual_debug[/code]是[code]true[/code],"
-"在烘烤光线之åŽï¼Œè¿™å°†ç”Ÿæˆä¸€ä¸ª[MultiMesh],其中有一个立方体代表æ¯ä¸ªå®žä½“å•元,æ¯"
-"个立方体的颜色与该å•元的å照率颜色一致。这å¯ä»¥ç”¨æ¥å¯è§†åŒ–[GIProbe]的数æ®å¹¶è°ƒè¯•"
-"任何å¯èƒ½å‘生的问题。"
-
-#: doc/classes/GIProbe.xml:28
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
+msgstr ""
+"烘焙所有标有 [member GeometryInstance.use_in_baked_light] 的 "
+"[GeometryInstance] 和标有 [constant Light.BAKE_INDIRECT] 或 [constant Light."
+"BAKE_ALL] 的 [Light] 的效果。如果[code]create_visual_debug[/code]是"
+"[code]true[/code],在烘焙光线åŽï¼Œè¿™å°†ç”Ÿæˆä¸€ä¸ª[MultiMesh],其中有一个立方体代"
+"表æ¯ä¸ªå®žä½“å•元,æ¯ä¸ªç«‹æ–¹ä½“的颜色与该å•元的å射颜色一致。这å¯ä»¥ç”¨æ¥å¯è§†åŒ–"
+"[GIProbe]的数æ®ï¼Œä»¥è°ƒè¯•任何å¯èƒ½å‘生的问题。"
+
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr "在å¯ç”¨ [code]create_visual_debug[/code] 的情况下调用 [method bake] 。"
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -30234,30 +30977,33 @@ msgid ""
"[b]Note:[/b] [code]bias[/code] should usually be above 1.0 as that is the "
"size of the voxels."
msgstr ""
+"从 [GIProbe] å移光贡献的查找。这å¯ç”¨äºŽé¿å…自阴影,但å¯èƒ½ä¼šåœ¨è¾ƒé«˜çš„值下引入æ¼"
+"光。这个和 [member normal_bias] 应该使用,以尽é‡å‡å°‘自阴影和æ¼å…‰ã€‚\n"
+"[b]注æ„:[/b] [code]bias[/code] 通常应该在 1.0 以上,因为这是体素的大å°ã€‚"
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
-msgstr ""
+msgstr "[i]已废弃[/i]由于已知的错误,这个属性已被废弃,å¯ç”¨åŽä¸å†æœ‰ä»»ä½•效果。"
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr "æŒæœ‰æ­¤[GIProbe]的数æ®çš„[GIProbeData]资æºã€‚"
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
-msgstr ""
+msgstr "[GIProbe] 能识别的最大亮度。亮度将在此范围内缩放。"
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
-msgstr ""
+msgstr "能é‡å€å¢žå™¨ã€‚使 [GIProbe] 的照明贡献更亮。"
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
@@ -30266,25 +31012,25 @@ msgstr ""
"[GIProbe]所覆盖区域的大å°ã€‚如果你让外延å˜å¤§ï¼Œè€Œæ²¡æœ‰ç”¨[member subdiv]增加细"
"分,æ¯ä¸ªå•元的大å°å°†å¢žåŠ ï¼Œå¹¶å¯¼è‡´ä½Žç»†èŠ‚ç…§æ˜Žã€‚"
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
msgstr "如果为[code]true[/code],在计算照明时忽略天空的贡献。"
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
"æ ¹æ®ç‰©ä½“的法线方å‘,对[GIProbe]的查找进行å移。å¯ä»¥ç”¨æ¥å‡å°‘一些自阴影的å‡è±¡ã€‚"
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr "光在探针内部传播的程度。一个较高的值å¯ä»¥ä½¿å…‰ä¼ æ’­å¾—更远。"
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
@@ -30293,7 +31039,7 @@ msgstr ""
"对 [GIProbe] 所æ“作的网格进行细分的次数。数字越大,细节就越精细,因而视觉质é‡"
"就越高,而数字越å°ï¼Œæ€§èƒ½å°±è¶Šå¥½ã€‚"
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
@@ -30301,23 +31047,24 @@ msgstr ""
"使用64分区,这是最低的质é‡è®¾ç½®ï¼Œä½†ä¹Ÿæ˜¯æœ€å¿«çš„。如果你能使用它,特别是在低端硬"
"件上使用它。"
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr "使用128个分区。这是默认的质é‡è®¾ç½®ã€‚"
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr "使用256个分区。"
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
+#, fuzzy
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
"使用512个分区。这是最高的质é‡è®¾ç½®ï¼Œä½†ä¹Ÿæ˜¯æœ€æ…¢çš„。在低端硬件上,这å¯èƒ½ä¼šå¯¼è‡´"
"GPUåœé¡¿ã€‚"
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr "代表 [enum Subdiv] 举的大å°ã€‚"
@@ -30325,7 +31072,7 @@ msgstr "代表 [enum Subdiv] 举的大å°ã€‚"
msgid ""
"The [Color] of the light. Defaults to white. A black color causes the light "
"to have no effect."
-msgstr ""
+msgstr "ç¯çš„[Color]。默认为白色。黑色会导致ç¯å…‰æ— æ•ˆã€‚"
#: modules/gltf/doc_classes/GLTFLight.xml:16
msgid ""
@@ -30336,6 +31083,9 @@ msgid ""
"brightness. When creating a Godot [SpotLight], the ratio between the inner "
"and outer cone angles is used to calculate the attenuation of the light."
msgstr ""
+"èšå…‰ç¯ä¸­åœ†é”¥ä½“的内角。必须å°äºŽæˆ–等于外锥角。\n"
+"在这个角度内,光线处于全亮状æ€ã€‚在内锥角和外锥角之间,有一个从全亮到零亮度的"
+"过渡。当创建Godot [SpotLight]时,内锥角和外锥角之间的比率被用æ¥è®¡ç®—光的衰å‡ã€‚"
#: modules/gltf/doc_classes/GLTFLight.xml:20
msgid ""
@@ -30344,6 +31094,8 @@ msgid ""
"directional lights. When creating a Godot light, this value is converted to "
"a unitless multiplier."
msgstr ""
+"光的强度。对于点光æºå’Œèšå…‰ç¯ï¼Œç”¨çƒ›å…‰candelasï¼ˆæµæ˜Ž/立体光)表示;对于定å‘ç¯ï¼Œ"
+"用勒克斯luxï¼ˆæµæ˜Ž/平方米)表示。在创建Godotç¯æ—¶ï¼Œè¿™ä¸ªå€¼è¢«è½¬æ¢ä¸ºæ— å•ä½çš„乘数。"
#: modules/gltf/doc_classes/GLTFLight.xml:23
msgid ""
@@ -30355,6 +31107,10 @@ msgid ""
"directions. When creating a Godot [SpotLight], the outer cone angle is used "
"as the angle of the spotlight."
msgstr ""
+"èšå…‰ç¯ä¸‹åœ†é”¥ä½“的外角。必须大于或等于内角。\n"
+"在这个角度,光线会下é™åˆ°é›¶äº®åº¦ã€‚在内锥角和外锥角之间,有一个从全亮到零亮度的"
+"过渡。如果这个角度是一个åŠåœ†ï¼Œé‚£ä¹ˆèšå…‰ç¯å°±ä¼šå‘所有方å‘å‘射。创建Godot "
+"[SpotLight]时,外锥角被用作èšå…‰ç¯çš„角度。"
#: modules/gltf/doc_classes/GLTFLight.xml:27
msgid ""
@@ -30362,6 +31118,8 @@ msgid ""
"with no range defined behave like physical lights (which have infinite "
"range). When creating a Godot light, the range is clamped to 4096."
msgstr ""
+"ç¯å…‰çš„范围,超过这个范围ç¯å…‰æ— æ•ˆã€‚没有定义范围的GLTFç¯å…‰çš„行为与无é™èŒƒå›´çš„物"
+"ç†ç¯å…‰ä¸€æ ·ã€‚当创建Godotç¯å…‰æ—¶ï¼ŒèŒƒå›´é™åˆ¶åœ¨4096。"
#: modules/gltf/doc_classes/GLTFLight.xml:30
msgid ""
@@ -30369,6 +31127,8 @@ msgid ""
"and \"directional\", which correspond to Godot's [OmniLight], [SpotLight], "
"and [DirectionalLight] respectively."
msgstr ""
+"ç¯å…‰çš„类型。Godot接å—的值是 \"point\"ã€\"spot\"å’Œ \"directional\",分别对应于"
+"Godotçš„[OmniLight]ã€[SpotLight]å’Œ[DirectionalLight]。"
#: modules/mono/doc_classes/GodotSharp.xml:4
msgid "Bridge between Godot and the Mono runtime (Mono-enabled builds only)."
@@ -30383,7 +31143,7 @@ msgid ""
msgstr ""
"该类是连接Godotå’ŒMonoè¿è¡Œæ—¶çš„æ¡¥æ¢ã€‚它暴露了一些低级别的æ“作,åªåœ¨æ”¯æŒMonoçš„"
"Godot构建中å¯ç”¨ã€‚\n"
-"å¦è§ [CSharpScript] 。"
+"å‚阅[CSharpScript] 。"
#: modules/mono/doc_classes/GodotSharp.xml:17
msgid "Attaches the current thread to the Mono runtime."
@@ -30489,9 +31249,8 @@ msgid "Returns the interpolated color specified by [code]offset[/code]."
msgstr "返回由åç§»[code]offset[/code]指定的æ’值颜色。"
#: doc/classes/Gradient.xml:51
-#, fuzzy
msgid "Removes the color at the index [code]point[/code]."
-msgstr "移除索引[code]offset[/code]å移处的颜色。"
+msgstr "移除索引[code]point[/code]处的颜色。"
#: doc/classes/Gradient.xml:59
msgid "Sets the color of the ramp color at index [code]point[/code]."
@@ -30502,14 +31261,12 @@ msgid "Sets the offset for the ramp color at index [code]point[/code]."
msgstr "为索引[code]point[/code]处的斜é¢é¢œè‰²è®¾ç½®å移。"
#: doc/classes/Gradient.xml:73
-#, fuzzy
msgid "Gradient's colors returned as a [PoolColorArray]."
-msgstr "æ¸å˜çš„颜色以[PackedColorArray]的形å¼è¿”回。"
+msgstr "æ¸å˜é¢œè‰²ä»¥ [PoolColorArray] 返回。"
#: doc/classes/Gradient.xml:76
-#, fuzzy
msgid "Gradient's offsets returned as a [PoolRealArray]."
-msgstr "æ¸å˜çš„åç§»é‡ä»¥[PackedFloat32Array]å½¢å¼è¿”回。"
+msgstr "æ¸å˜çš„åç§»é‡ä»¥ [PoolRealArray] 返回。"
#: doc/classes/GradientTexture.xml:4
msgid "Gradient-filled texture."
@@ -30523,9 +31280,9 @@ msgid ""
"gradient, but instead an interpolation of samples obtained from the gradient "
"at fixed steps (see [member width])."
msgstr ""
-"æ¸å˜æè´¨GradientTexture使用一个[Gradientæ•°æ®ã€‚梯度将使用从梯度获得的颜色从左"
-"到å³å¡«å……。这æ„味ç€çº¹ç†ä¸ä¸€å®šä»£è¡¨æ¢¯åº¦çš„精确拷è´ï¼Œè€Œæ˜¯ä»¥å›ºå®šçš„æ­¥é•¿ä»Žæ¢¯åº¦ä¸­èŽ·å¾—"
-"的样本æ’值(è§[member width])。"
+"GradientTexture使用[Gradient]æ¥å¡«å……çº¹ç†æ•°æ®ã€‚æ¸å˜å°†ä½¿ç”¨ä»Žä¸­èŽ·å¾—çš„é¢œè‰²ä»Žå·¦åˆ°å³"
+"填充。这æ„味ç€çº¹ç†ä¸ä¸€å®šä»£è¡¨æ¸å˜çš„精确副本,而是以固定的步长从æ¸å˜ä¸­èŽ·å¾—çš„æ ·"
+"本的æ’值,è§[member width]。"
#: doc/classes/GradientTexture.xml:15
msgid "The [Gradient] that will be used to fill the texture."
@@ -30615,7 +31372,6 @@ msgstr ""
"1\" }[/code]."
#: doc/classes/GraphEdit.xml:70
-#, fuzzy
msgid ""
"Gets the [HBoxContainer] that contains the zooming and grid snap controls in "
"the top left of the graph. You can use this method to reposition the toolbar "
@@ -30624,10 +31380,10 @@ msgid ""
"may cause a crash. If you wish to hide it or any of its children, use their "
"[member CanvasItem.visible] property."
msgstr ""
-"获å–包å«å›¾å½¢å·¦ä¸Šæ–¹çš„缩放和网格快照控制的[HBoxContainer]。\n"
-"警告。这个函数的预期用途是å…è®¸ä½ é‡æ–°å®šä½æˆ–添加你自己的自定义控件到容器中。这"
-"是一个内部控件,因此ä¸åº”该被释放。如果你想éšè—å®ƒæˆ–å®ƒçš„ä»»ä½•å­æŽ§ä»¶ï¼Œè¯·ä½¿ç”¨å®ƒä»¬"
-"的 [member CanvasItem.visible] 属性。"
+"获å–包å«å›¾å½¢å·¦ä¸Šè§’çš„ç¼©æ”¾å’Œç½‘æ ¼æ•æ‰æŽ§ä»¶çš„ [HBoxContainer]。你å¯ä»¥ä½¿ç”¨æ­¤æ–¹æ³•é‡"
+"新定ä½å·¥å…·æ æˆ–å‘其添加自定义控件。\n"
+"[b]警告:[/b] 这是一个必需的内部节点,删除和释放它å¯èƒ½ä¼šå¯¼è‡´å´©æºƒã€‚如果你希望"
+"éšè—它或其任何å­é¡¹ï¼Œè¯·ä½¿ç”¨å®ƒä»¬çš„ [member CanvasItem.visible] 属性。"
#: doc/classes/GraphEdit.xml:81
msgid ""
@@ -30678,20 +31434,18 @@ msgid "Sets the specified [code]node[/code] as the one selected."
msgstr "选中一个特定的节点[code]node[/code]."
#: doc/classes/GraphEdit.xml:136
-#, fuzzy
msgid "If [code]true[/code], the minimap is visible."
-msgstr "如果[code]true[/code],按钮的形状是å¯è§çš„。"
+msgstr "如果[code]true[/code],å°å›¾æ˜¯å¯è§çš„。"
#: doc/classes/GraphEdit.xml:139
-#, fuzzy
msgid "The opacity of the minimap rectangle."
-msgstr "选择的矩形的轮廓颜色。"
+msgstr "å°å›¾çŸ©å½¢çš„ä¸é€æ˜Žåº¦ã€‚"
#: doc/classes/GraphEdit.xml:142
msgid ""
"The size of the minimap rectangle. The map itself is based on the size of "
"the grid area and is scaled to fit this rectangle."
-msgstr ""
+msgstr "å°å›¾çŸ©å½¢çš„大å°ã€‚地图自身基于网格区域的大å°ï¼Œå¹¶è¢«ç¼©æ”¾ä»¥é€‚应这个矩形。"
#: doc/classes/GraphEdit.xml:146
msgid ""
@@ -30709,6 +31463,7 @@ msgid ""
"If [code]true[/code], makes a label with the current zoom level visible. The "
"zoom value is displayed in percents."
msgstr ""
+"如果[code]true[/code],则使当å‰ç¼©æ”¾çº§åˆ«çš„æ ‡ç­¾å¯è§ã€‚缩放值以百分比显示。"
#: doc/classes/GraphEdit.xml:155
msgid "The snapping distance in pixels."
@@ -30723,14 +31478,12 @@ msgid "The current zoom value."
msgstr "当å‰ç¼©æ”¾å€¼ã€‚"
#: doc/classes/GraphEdit.xml:164
-#, fuzzy
msgid "The upper zoom limit."
-msgstr "当å‰ç¼©æ”¾å€¼ã€‚"
+msgstr "缩放上é™ã€‚"
#: doc/classes/GraphEdit.xml:167
-#, fuzzy
msgid "The lower zoom limit."
-msgstr "触å‘的信å·ã€‚"
+msgstr "缩放下é™ã€‚"
#: doc/classes/GraphEdit.xml:170
msgid "The step of each zoom level."
@@ -30767,9 +31520,8 @@ msgid ""
msgstr "当用户将输出端å£è¿žæŽ¥åˆ°å›¾å½¢çš„ç©ºä½æ—¶å‘出。"
#: doc/classes/GraphEdit.xml:211
-#, fuzzy
msgid "Emitted when the user presses [code]Ctrl + C[/code]."
-msgstr "当用户按下[kbd]Ctrl + C[/kbd]æ—¶å‘出。"
+msgstr "当用户按[code]Ctrl + C[/code]时触å‘。"
#: doc/classes/GraphEdit.xml:216
msgid "Emitted when a GraphNode is attempted to be removed from the GraphEdit."
@@ -30795,9 +31547,8 @@ msgid "Emitted when a GraphNode is selected."
msgstr "当图形节点GraphNode被选择时å‘出。"
#: doc/classes/GraphEdit.xml:246
-#, fuzzy
msgid "Emitted when the user presses [code]Ctrl + V[/code]."
-msgstr "当用户按下[kbd]Ctrl + V[/kbd]æ—¶å‘出。"
+msgstr "当用户按下[code]Ctrl + V[/code]时触å‘。"
#: doc/classes/GraphEdit.xml:252
msgid ""
@@ -31213,14 +31964,12 @@ msgid "Vertical offset of the title text."
msgstr "标题文本的垂直åç§»é‡ã€‚"
#: doc/classes/GridContainer.xml:4
-#, fuzzy
msgid ""
"Grid container used to arrange Control-derived children in a grid like "
"layout."
-msgstr "网格容器(Grid container)用于在类似网格的布局中安排元素。"
+msgstr "网格容器,用于在类似网格的布局中排列Control派生的å­é¡¹ã€‚"
#: doc/classes/GridContainer.xml:7
-#, fuzzy
msgid ""
"GridContainer will arrange its Control-derived children in a grid like "
"structure, the grid columns are specified using the [member columns] "
@@ -31233,19 +31982,20 @@ msgid ""
"[b]Note:[/b] GridContainer only works with child nodes inheriting from "
"Control. It won't rearrange child nodes inheriting from Node2D."
msgstr ""
-"网格容器将其å­é¡¹æŽ’列在类似网格的结构中,网格列使用 [member columns] 属性指"
-"定,行数等于容器中的å­é¡¹æ•°é™¤ä»¥åˆ—数。例如,如果容器有 5 个å­é¡¹å’Œ 2 列,则容器"
-"中有 3 行。\n"
-"请注æ„,网格布局将为容器的æ¯ä¸ªå¤§å°ä¿ç•™åˆ—和行,并且空列将自动展开。"
+"GridContainer将把它的Control派生的å­çº§æŽ’布在一个类似网格的结构中,网格列是"
+"[member columns]属性指定,行的数é‡ç­‰äºŽå®¹å™¨ä¸­å­çº§çš„æ•°é‡é™¤ä»¥åˆ—的数é‡ã€‚例如,如"
+"果容器有5个å­çº§ï¼Œ2个列,容器中就会有3行。\n"
+"请注æ„,网格布局将ä¿ç•™æ¯ä¸ªå¤§å°çš„容器的列和行,并且空列将自动扩展。\n"
+"[b]注æ„:[/b] GridContaineråªå¯¹ç»§æ‰¿è‡ªControlçš„å­èŠ‚ç‚¹ç”Ÿæ•ˆã€‚å®ƒä¸ä¼šé‡æ–°æŽ’列继承"
+"自Node2Dçš„å­èŠ‚ç‚¹ã€‚"
#: doc/classes/GridContainer.xml:18
-#, fuzzy
msgid ""
"The number of columns in the [GridContainer]. If modified, [GridContainer] "
"reorders its Control-derived children to accommodate the new layout."
msgstr ""
-"在[GridContainer]中的列的数é‡ã€‚如果修改,[GridContainer]ä¼šé‡æ–°æŽ’列它的å­èŠ‚"
-"点,以适应新的布局。"
+"在[GridContainer]中的列的数é‡ã€‚如果修改,[GridContainer]ä¼šé‡æ–°æŽ’列其Controlæ´¾"
+"生的å­ä»£ï¼Œä»¥é€‚应新的布局。"
#: doc/classes/GridContainer.xml:26
msgid "The horizontal separation of children nodes."
@@ -31260,7 +32010,6 @@ msgid "Node for 3D tile-based maps."
msgstr "基于3D贴图格地图(3D tile-based maps)的节点。"
#: modules/gridmap/doc_classes/GridMap.xml:7
-#, fuzzy
msgid ""
"GridMap lets you place meshes on a grid interactively. It works both from "
"the editor and from scripts, which can help you create in-game level "
@@ -31277,18 +32026,22 @@ msgid ""
"light not affect the first layer, the whole GridMap won't be lit by the "
"light in question."
msgstr ""
-"GridMapå¯ä»¥è®©ä½ äº¤äº’å¼åœ°å°†ç½‘格放在一个网格上。它既å¯ä»¥ä»Žç¼–辑器中工作,也å¯ä»¥ä»Ž"
-"脚本中工作,这å¯ä»¥å¸®åŠ©ä½ åœ¨æ¸¸æˆä¸­åˆ›å»ºå…³å¡ç¼–辑器。\n"
-"GridMaps使用一个[MeshLibrary],其中包å«äº†ä¸€ä¸ªè´´å›¾æ ¼çš„列表。æ¯ä¸€ä¸ªç“¦ç‰‡éƒ½æ˜¯ä¸€ä¸ª"
-"带有æè´¨çš„网格,加上å¯é€‰çš„碰撞和导航形状。\n"
-"一个GridMap包å«ä¸€ä¸ªå•元格的集åˆã€‚æ¯ä¸ªç½‘æ ¼å•元指的是[MeshLibrary]中的一个贴图"
-"格。地图中的所有å•元都有相åŒçš„尺寸。\n"
-"在内部,一个GridMap被分割æˆä¸€ä¸ªç¨€ç–的八边形集åˆï¼Œä»¥ä¾¿æœ‰æ•ˆåœ°è¿›è¡Œæ¸²æŸ“和物ç†å¤„"
-"ç†ã€‚æ¯ä¸ªå…«è§’形都有相åŒçš„尺寸,å¯ä»¥åŒ…å«å¤šä¸ªå•元。"
+"GridMapå…许你以交互方å¼å°†meshes网格放置在网格上。它既å¯ä»¥åœ¨ç¼–辑器中进行,也å¯"
+"以从脚本中进行,这å¯ä»¥å¸®åŠ©ä½ åœ¨æ¸¸æˆä¸­åˆ›å»ºå…³å¡ç¼–辑器。\n"
+"GridMaps使用[MeshLibrary],其中包å«äº†ä¸€ä¸ªå›¾å—的列表。æ¯ä¸€ä¸ªå›¾å—都是一个带有æ"
+"质的网格,加上å¯é€‰çš„碰撞和导航形状。\n"
+"GridMap包å«ä¸€ä¸ªå•元格的集åˆã€‚æ¯ä¸ªç½‘æ ¼å•元指的是[MeshLibrary]中的一个图å—。地"
+"图中的所有å•元都有相åŒçš„尺寸。\n"
+"在内部,GridMap被分割æˆä¸€ä¸ªæ¾æ•£çš„八边形集åˆï¼Œä»¥ä¾¿æœ‰æ•ˆåœ°è¿›è¡Œæ¸²æŸ“和物ç†å¤„ç†ã€‚æ¯"
+"个八角形都有相åŒçš„尺寸,å¯ä»¥åŒ…å«å¤šä¸ªå•元。\n"
+"[b]注æ„:[/b] GridMap没有扩展[VisualInstance],因此ä¸èƒ½åŸºäºŽ[member "
+"VisualInstance.layer]进行éšè—æˆ–å‰”é™¤é®æŒ¡ã€‚如果你让ç¯å…‰ä¸å½±å“第一层,整个"
+"GridMapå°±ä¸ä¼šè¢«ç›¸å…³çš„ç¯å…‰ç…§äº®ã€‚"
#: modules/gridmap/doc_classes/GridMap.xml:14
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/using_gridmaps.html"
-msgstr "https://docs.godotengine.org/en/3.4/tutorials/3d/using_gridmaps.html"
+msgstr ""
+"https://docs.godotengine.org/zh_CN/stable/tutorials/3d/using_gridmaps.html"
#: modules/gridmap/doc_classes/GridMap.xml:22
msgid "Clear all cells."
@@ -31299,23 +32052,22 @@ msgid ""
"Returns an array of [ArrayMesh]es and [Transform] references of all bake "
"meshes that exist within the current GridMap."
msgstr ""
+"返回当å‰GridMap中存在的所有烘焙网格的[ArrayMesh]å’Œ[Transform]引用的数组。"
#: modules/gridmap/doc_classes/GridMap.xml:48
-#, fuzzy
msgid ""
"The [MeshLibrary] item index located at the grid-based X, Y and Z "
"coordinates. If the cell is empty, [constant INVALID_CELL_ITEM] will be "
"returned."
msgstr ""
-"ä½äºŽç»™å®šç½‘æ ¼åæ ‡çš„[MeshLibrary]项的索引。如果该å•元格是空的,将返回[constant "
-"INVALID_CELL_ITEM]。"
+"[MeshLibrary] 项目索引ä½äºŽåŸºäºŽç½‘格的 Xã€Y å’Œ Z åæ ‡å¤„。如果å•元格为空,则返"
+"回 [constant INVALID_CELL_ITEM]。"
#: modules/gridmap/doc_classes/GridMap.xml:57
-#, fuzzy
msgid ""
"The orientation of the cell at the grid-based X, Y and Z coordinates. -1 is "
"returned if the cell is empty."
-msgstr "ç»™å®šç½‘æ ¼åæ ‡å¤„çš„å•元格方å‘。如果å•元格为空,则返回 [code]-1[/code]。"
+msgstr "å•元格在基于网格的 Xã€Y å’Œ Z åæ ‡å¤„的方å‘。如果å•元格为空,则返回 -1。"
#: modules/gridmap/doc_classes/GridMap.xml:64
msgid "Returns an individual bit on the [member collision_layer]."
@@ -31345,7 +32097,6 @@ msgid ""
msgstr "返回一个网格å•元在GridMapæœ¬åœ°åæ ‡ç©ºé—´ä¸­çš„ä½ç½®ã€‚"
#: modules/gridmap/doc_classes/GridMap.xml:116
-#, fuzzy
msgid ""
"Sets the mesh index for the cell referenced by its grid-based X, Y and Z "
"coordinates.\n"
@@ -31354,9 +32105,9 @@ msgid ""
"Optionally, the item's orientation can be passed. For valid orientation "
"values, see [method Basis.get_orthogonal_index]."
msgstr ""
-"è®¾ç½®ä»¥ç½‘æ ¼åæ ‡ä¸ºå‚考的å•元格的网格索引。\n"
-"一个负的项目索引,例如[constant INVALID_CELL_ITEM]会清除该å•元。\n"
-"或者,å¯ä»¥ä¼ é€’项目的方å‘。关于有效的方å‘值,请å‚阅[method Basis."
+"设置由基于网格的 Xã€Y å’Œ Z åæ ‡å¼•用的å•元格的网格索引。\n"
+"负的项目索引将清除å•元格,例如 [constant INVALID_CELL_ITEM]。\n"
+"或者,å¯ä»¥ä¼ é€’项目的方å‘。相关有效的方å‘值,请å‚阅 [method Basis."
"get_orthogonal_index]。"
#: modules/gridmap/doc_classes/GridMap.xml:135
@@ -31428,6 +32179,9 @@ msgid ""
"layers-and-masks]Collision layers and masks[/url] in the documentation for "
"more information."
msgstr ""
+"æ­¤ GridMap 检测碰撞的物ç†å±‚。å‚阅 [url=https://docs.godotengine.org/zh_CN/"
+"stable/tutorials/physics/physics_introduction.html#collision-layers-and-"
+"masks]碰撞层和掩ç [/url ] æ–‡æ¡£ï¼Œä»Žä¸­èŽ·å–æ›´å¤šä¿¡æ¯ã€‚"
#: modules/gridmap/doc_classes/GridMap.xml:184
msgid "The assigned [MeshLibrary]."
@@ -31436,7 +32190,7 @@ msgstr "指定的[MeshLibrary]。"
#: modules/gridmap/doc_classes/GridMap.xml:187
msgid ""
"Controls whether this GridMap will be baked in a [BakedLightmap] or not."
-msgstr ""
+msgstr "控制此 GridMap 是å¦ä¼šåœ¨ [BakedLightmap] 中烘焙。"
#: modules/gridmap/doc_classes/GridMap.xml:194
msgid "Emitted when [member cell_size] changes."
@@ -31478,7 +32232,7 @@ msgstr "沟槽的长度。沟槽是从关键原点沿ç€å…³èŠ‚å±€éƒ¨Yè½´æœå‘ [
#: doc/classes/HashingContext.xml:4
msgid "Context to compute cryptographic hashes over multiple iterations."
-msgstr "在多次迭代中计算加密散列的上下文。"
+msgstr "在多次迭代中计算加密哈希的上下文。"
#: doc/classes/HashingContext.xml:7
msgid ""
@@ -31546,8 +32300,8 @@ msgid ""
"Starts a new hash computation of the given [code]type[/code] (e.g. [constant "
"HASH_SHA256] to start computation of a SHA-256)."
msgstr ""
-"开始对给定的 [code] type[/code] (例如 [æ’定HASH_SHA256] 进行新的哈希计算, "
-"以开始计算 SHA-256) 。"
+"开始对给定的 [code] type[/code] (例如 [constant HASH_SHA256] 进行新的哈希计"
+"算, 以开始计算 SHA-256) 。"
#: doc/classes/HashingContext.xml:52
msgid "Updates the computation with the given [code]chunk[/code] of data."
@@ -31578,15 +32332,13 @@ msgid "The horizontal space between the [HBoxContainer]'s elements."
msgstr "[HBoxContainer]的元素之间的水平空间。"
#: doc/classes/HeightMapShape.xml:4
-#, fuzzy
msgid "Height map shape for 3D physics."
-msgstr "三维物ç†çš„高度图形状(仅é™å­å¼¹ï¼‰ã€‚"
+msgstr "3D 物ç†çš„高度图形状。"
#: doc/classes/HeightMapShape.xml:7
-#, fuzzy
msgid ""
"Height map shape resource, which can be added to a [PhysicsBody] or [Area]."
-msgstr "高度图形状资æºï¼Œå®ƒå¯ä»¥è¢«æ·»åŠ åˆ°[PhysicsBody3D]或[Area3D]。"
+msgstr "高度图形状资æºï¼Œå¯ä»¥æ·»åŠ åˆ°[PhysicsBody]或[Area]中。"
#: doc/classes/HeightMapShape.xml:15
msgid ""
@@ -31608,18 +32360,17 @@ msgid ""
msgstr "高度图数æ®çš„宽度。更改此设置将调整 [member map_data] 的大å°ã€‚"
#: doc/classes/HingeJoint.xml:4
-#, fuzzy
msgid "A hinge between two 3D PhysicsBodies."
-msgstr "两个 3D 实体之间的铰链。"
+msgstr "两个 3D 物ç†ä½“之间的铰链。"
#: doc/classes/HingeJoint.xml:7
-#, fuzzy
msgid ""
"A HingeJoint normally uses the Z axis of body A as the hinge axis, another "
"axis can be specified when adding it manually though. See also "
"[Generic6DOFJoint]."
msgstr ""
-"HingeJoint3D 通常使用主体 A çš„ Z 轴作为铰链轴,但手动添加时å¯ä»¥æŒ‡å®šå…¶ä»–轴。"
+"铰链关节通常使用物体 A çš„ Z 轴作为铰链轴,但手动添加时å¯ä»¥æŒ‡å®šå¦ä¸€ä¸ªè½´ã€‚å‚阅 "
+"[Generic6DOFJoint]。"
#: doc/classes/HingeJoint.xml:16 doc/classes/SpriteBase3D.xml:21
msgid "Returns the value of the specified flag."
@@ -31697,7 +32448,7 @@ msgstr "两个物体å‘ä¸åŒæ–¹å‘移动时被拉回到一起的速度。"
#: doc/classes/HMACContext.xml:4
msgid "Used to create an HMAC for a message using a key."
-msgstr ""
+msgstr "用æ¥ä¸ºä¸€ä¸ªä½¿ç”¨å¯†é’¥çš„ä¿¡æ¯åˆ›å»ºHMAC。"
#: doc/classes/HMACContext.xml:7
msgid ""
@@ -31748,18 +32499,65 @@ msgid ""
"[/codeblock]\n"
"[b]Note:[/b] Not available in HTML5 exports."
msgstr ""
+"HMACContext类对于高级的HMAC用例éžå¸¸æœ‰ç”¨ï¼Œä¾‹å¦‚æµå¼æ¶ˆæ¯ï¼Œå› ä¸ºå®ƒæ”¯æŒåœ¨ä¸€æ®µæ—¶é—´å†…"
+"创建消æ¯ï¼Œè€Œä¸æ˜¯ä¸€æ¬¡æ€§æä¾›ã€‚\n"
+"[codeblock]\n"
+"extends Node\n"
+"var ctx = HMACContext.new()\n"
+"\n"
+"func _ready():\n"
+" var key = \"supersecret\".to_utf8()\n"
+" var err = ctx.start(HashingContext.HASH_SHA256, key)\n"
+" assert(err == OK)\n"
+" var msg1 = \"this is \".to_utf8()\n"
+" var msg2 = \"vewy vewy secret\".to_utf8()\n"
+" err = ctx.update(msg1)\n"
+" assert(err == OK)\n"
+" err = ctx.update(msg2)\n"
+" assert(err == OK)\n"
+" var hmac = ctx.finish()\n"
+" print(hmac.hex_encode())\n"
+"[/codeblock]\n"
+"而在C#中,我们å¯ä»¥ä½¿ç”¨ä¸‹é¢çš„æ–¹æ³•。\n"
+"[codeblock]\n"
+"using Godot;\n"
+"using System;\n"
+"using System.Diagnostics;\n"
+"\n"
+"public class CryptoNode : Node\n"
+"{\n"
+" private HMACContext ctx = new HMACContext();\n"
+" public override void _Ready()\n"
+" {\n"
+" PoolByteArray key = String(\"supersecret\").to_utf8();\n"
+" Error err = ctx.Start(HashingContext.HASH_SHA256, key);\n"
+" GD.Assert(err == OK);\n"
+" PoolByteArray msg1 = String(\"this is \").to_utf8();\n"
+" PoolByteArray msg2 = String(\"vewy vew secret\").to_utf8();\n"
+" err = ctx.Update(msg1);\n"
+" GD.Assert(err == OK);\n"
+" err = ctx.Update(msg2);\n"
+" GD.Assert(err == OK);\n"
+" PoolByteArray hmac = ctx.Finish();\n"
+" GD.Print(hmac.HexEncode());\n"
+" }\n"
+"}\n"
+"[/codeblock]\n"
+"[b]注æ„:[/b] 在HTML5导出中ä¸å¯ç”¨ã€‚"
#: doc/classes/HMACContext.xml:58
msgid ""
"Returns the resulting HMAC. If the HMAC failed, an empty [PoolByteArray] is "
"returned."
-msgstr ""
+msgstr "返回生æˆçš„HMAC。如果HMAC失败,将返回一个空的[PoolByteArray]。"
#: doc/classes/HMACContext.xml:66
msgid ""
"Initializes the HMACContext. This method cannot be called again on the same "
"HMACContext until [method finish] has been called."
msgstr ""
+"åˆå§‹åŒ–HMACContext。在[method finish]被调用之å‰ï¼Œä¸èƒ½åœ¨åŒä¸€ä¸ªHMACContextä¸Šå†æ¬¡"
+"调用此方法。"
#: doc/classes/HMACContext.xml:73
msgid ""
@@ -31767,6 +32565,8 @@ msgid ""
"[method finish] is called to append [code]data[/code] to the message, but "
"cannot be called until [method start] has been called."
msgstr ""
+"æ›´æ–°è¦è¿›è¡ŒHMAC的消æ¯ã€‚在调用[method finish]å°†[code]data[/code]追加到消æ¯ä¸­ä¹‹"
+"å‰ï¼Œå¯ä»¥å¤šæ¬¡è°ƒç”¨ï¼Œä½†åœ¨è°ƒç”¨[method start]之å‰ä¸èƒ½è°ƒç”¨ã€‚"
#: doc/classes/HScrollBar.xml:4
msgid "Horizontal scroll bar."
@@ -31790,9 +32590,8 @@ msgid "Displayed when the mouse cursor hovers over the decrement button."
msgstr "当鼠标指针悬åœåœ¨é€’凿Œ‰é’®ä¸Šæ—¶æ˜¾ç¤ºã€‚"
#: doc/classes/HScrollBar.xml:23 doc/classes/VScrollBar.xml:27
-#, fuzzy
msgid "Displayed when the decrement button is being pressed."
-msgstr "当标题按钮被按下时使用的[StyleBox]。"
+msgstr "åœ¨æŒ‰ä¸‹é€’å‡æŒ‰é’®æ—¶æ˜¾ç¤ºã€‚"
#: doc/classes/HScrollBar.xml:26 doc/classes/VScrollBar.xml:30
msgid ""
@@ -31821,9 +32620,8 @@ msgid "Displayed when the mouse cursor hovers over the increment button."
msgstr "当鼠标指针悬åœåœ¨å¢žé‡æŒ‰é’®ä¸Šæ—¶æ˜¾ç¤ºã€‚"
#: doc/classes/HScrollBar.xml:41 doc/classes/VScrollBar.xml:45
-#, fuzzy
msgid "Displayed when the increment button is being pressed."
-msgstr "当标题按钮被按下时使用的[StyleBox]。"
+msgstr "åœ¨æŒ‰ä¸‹å¢žé‡æŒ‰é’®æ—¶æ˜¾ç¤ºã€‚"
#: doc/classes/HScrollBar.xml:44 doc/classes/VScrollBar.xml:48
msgid "Used as background of this [ScrollBar]."
@@ -31865,6 +32663,9 @@ msgid ""
"[b]Note:[/b] The [signal Range.changed] and [signal Range.value_changed] "
"signals are part of the [Range] class which this class inherits from."
msgstr ""
+"水平滑å—。å‚阅[Slider]。这个从左到å³ï¼Œæœ€å°åˆ°æœ€å¤§ã€‚\n"
+"[b]注æ„:[/b] [signal Range.changed]å’Œ[signal Range.value_changed]ä¿¡å·æ˜¯"
+"[Range]类的一部分,该类继承自它。"
#: doc/classes/HSlider.xml:18 doc/classes/VSlider.xml:22
msgid "The texture for the grabber (the draggable element)."
@@ -31922,12 +32723,10 @@ msgid "The space between sides of the container."
msgstr "容器两侧之间的空间。"
#: doc/classes/HTTPClient.xml:4
-#, fuzzy
msgid "Low-level hyper-text transfer protocol client."
-msgstr "超文本传输å议客户端。"
+msgstr "低级别的超文本传输å议客户端。"
#: doc/classes/HTTPClient.xml:7
-#, fuzzy
msgid ""
"Hyper-text transfer protocol client (sometimes called \"User Agent\"). Used "
"to make HTTP requests to download web content, upload files and other data "
@@ -31961,30 +32760,35 @@ msgid ""
"are otherwise valid. If this is a concern, you may want to use automatically "
"managed certificates with a short validity period."
msgstr ""
-"超文本传输å议客户端(有时称为“用户代ç†â€ï¼‰ï¼Œå¯ç”¨äºŽå‘出 HTTP 请求以下载 web 内"
-"容ã€ä¸Šä¼ æ–‡ä»¶å’Œå…¶ä»–æ•°æ®æˆ–与å„ç§æœåŠ¡é€šä¿¡ï¼Œä»¥åŠå…¶ä»–用例。请å‚阅 [HTTPRequest] 以"
-"èŽ·å–æ›´é«˜çº§åˆ«çš„æ›¿ä»£æ–¹æ¡ˆã€‚\n"
-"[b]注æ„:[/b] 此客户端åªéœ€è¿žæŽ¥åˆ°ä¸»æœºä¸€æ¬¡ï¼ˆè¯·å‚阅 [method connect_to_host])å³"
-"å¯å‘é€å¤šä¸ªè¯·æ±‚。因此,采用 URL 的方法通常åªé‡‡ç”¨ä¸»æœºåŽé¢çš„éƒ¨åˆ†ï¼Œè€Œä¸æ˜¯å®Œæ•´çš„ "
-"URL,因为客户机已ç»è¿žæŽ¥åˆ°ä¸»æœºã€‚请å‚阅 [method request] 以获å–完整的示例并开始"
-"使用。\n"
-"[HTTPClient] 应该在多个请求之间é‡ç”¨ï¼Œæˆ–者连接到ä¸åŒçš„ä¸»æœºï¼Œè€Œä¸æ˜¯æ¯ä¸ªè¯·æ±‚创建"
-"ä¸€ä¸ªå®¢æˆ·ç«¯ã€‚æ”¯æŒ SSL ä»¥åŠ SSL æœåС噍è¯ä¹¦éªŒè¯ã€‚2xx 范围内的 HTTP 状æ€ç è¡¨ç¤ºæˆ"
-"功,3xx é‡å®šå‘(å³â€œé‡è¯•,但在这里â€ï¼‰ï¼Œ4xx 请求出错,5xx æœåŠ¡å™¨ç«¯å‡ºé”™ã€‚\n"
-"有关 HTTP 的更多信æ¯è¯·å‚阅 https://developer.mozilla.org/en-US/docs/Web/HTTP "
-"(或者通过阅读 RFC 2616 追根溯æºï¼šhttps://tools.ietf.org/html/rfc2616)。\n"
-"[b]注æ„:[/b] 当执行从导出到 HTML5 的项目å‘出的 HTTP 请求时,请记ä½ï¼Œè¿œç¨‹æœåŠ¡"
-"器å¯èƒ½ç”±äºŽ [url=https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS]CORS[/"
-"url] çš„å…³ç³»è€Œç¦æ­¢æ¥è‡ªç«™å¤–的请求。如果æœåŠ¡å™¨æ˜¯ä½ è‡ªå·±æ­å»ºçš„,å¯ä»¥é€šè¿‡æ·»åŠ  "
-"[code]Access-Control-Allow-Origin: *[/code] HTTP 报头æ¥å…许站外请求。"
+"超文本传输å议客户端,有时称为 \"用户代ç†\"。用于å‘出HTTP请求,以下载网络内"
+"容ã€ä¸Šä¼ æ–‡ä»¶å’Œå…¶ä»–æ•°æ®ï¼Œæˆ–与å„ç§æœåŠ¡è¿›è¡Œé€šä¿¡ï¼Œä»¥åŠå…¶ä»–情况。[b]å‚阅"
+"[HTTPRequest]节点,以获得更高一级的替代方案[/b] 。\n"
+"[b]注æ„:[/b]这个客户端åªéœ€è¦è¿žæŽ¥ä¸»æœºä¸€æ¬¡å°±å¯ä»¥å‘é€å¤šä¸ªè¯·æ±‚,å‚阅[method "
+"connect_to_host]。因此,获å–URL的方法通常åªèŽ·å–主机åŽé¢çš„éƒ¨åˆ†ï¼Œè€Œä¸æ˜¯å®Œæ•´çš„"
+"URL,因为客户端已ç»è¿žæŽ¥åˆ°äº†ä¸€ä¸ªä¸»æœºã€‚å‚阅method request]以获得完整的例å­ï¼Œå¹¶"
+"开始使用。\n"
+"[HTTPClient]应该在多个请求中é‡å¤ä½¿ç”¨ï¼Œæˆ–者连接到ä¸åŒçš„ä¸»æœºï¼Œè€Œä¸æ˜¯æ¯ä¸ªè¯·æ±‚创"
+"建一个客户端。它支æŒSSLå’ŒSSLæœåС噍è¯ä¹¦éªŒè¯ã€‚HTTP状æ€ä»£ç åœ¨2xx范围内表示æˆåŠŸï¼Œ"
+"3xx表示é‡å®šå‘ï¼Œå³ \"é‡è¯•,但在这里\",4xx表示请求出了问题,5xx表示æœåŠ¡å™¨ç«¯å‡º"
+"了问题。\n"
+"关于HTTP的更多信æ¯ï¼Œå‚阅https://developer.mozilla.org/en-US/docs/Web/HTTP,或"
+"者阅读RFC 2616,直接从æºå¤´ä¸Šäº†è§£ï¼šhttps://tools.ietf.org/html/rfc2616。\n"
+"[b]注æ„:[/b] 当从导出到HTML5的项目中执行HTTP请求时,请记ä½è¿œç¨‹æœåС噍å¯èƒ½ç”±äºŽ"
+"[url=https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS]CORS[/url]而ä¸å…"
+"许æ¥è‡ªå›½å¤–的请求。如果是你托管的æœåŠ¡å™¨ï¼Œåº”è¯¥ä¿®æ”¹å…¶åŽå°ï¼Œä¸ºå…¶æ·»åŠ  "
+"[code]Access-Control-Allow-Origin:*[/code] HTTP头。\n"
+"[b]注æ„:[/b] SSL/TLS支æŒç›®å‰ä»…é™äºŽTLS 1.0ã€TLS 1.1å’ŒTLS 1.2。试图连接到一个"
+"åªæœ‰TLS 1.3çš„æœåŠ¡å™¨å°†è¿”å›žä¸€ä¸ªé”™è¯¯ã€‚\n"
+"[b]警告:[/b] ç›®å‰ä¸æ”¯æŒSSL/TLSè¯ä¹¦æ’¤é”€å’Œè¯ä¹¦ç»‘定。撤销的è¯ä¹¦åªè¦åœ¨å…¶ä»–æ–¹é¢æ˜¯"
+"有效的,就å¯ä»¥æŽ¥å—。如果这是个问题,你å¯èƒ½æƒ³ä½¿ç”¨è‡ªåŠ¨ç®¡ç†çš„æœ‰æ•ˆæœŸçŸ­çš„è¯ä¹¦ã€‚"
#: doc/classes/HTTPClient.xml:16
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/networking/http_client_class."
"html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/networking/http_client_class."
-"html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/networking/"
+"http_client_class.html"
#: doc/classes/HTTPClient.xml:17 doc/classes/HTTPRequest.xml:71
#: doc/classes/StreamPeerSSL.xml:10
@@ -31992,8 +32796,8 @@ msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/networking/ssl_certificates."
"html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/networking/ssl_certificates."
-"html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/networking/"
+"ssl_certificates.html"
#: doc/classes/HTTPClient.xml:23
msgid "Closes the current connection, allowing reuse of this [HTTPClient]."
@@ -32120,7 +32924,6 @@ msgid "Reads one chunk from the response."
msgstr "从å“应中读å–䏀嗿•°æ®ã€‚"
#: doc/classes/HTTPClient.xml:126
-#, fuzzy
msgid ""
"Sends a request to the connected host.\n"
"The URL parameter is usually just the part after the host, so for "
@@ -32146,8 +32949,12 @@ msgid ""
"data as a query string in the URL. See [method String.http_escape] for an "
"example."
msgstr ""
-"å‘连接的æœåС噍å‘é€è¯·æ±‚。URL 傿•°ä»…为主机ååŽé¢çš„部分,å³è¯·æ±‚ [code]http://"
-"somehost.com/index.php[/code] 应该填写 [code]index.php[/code]。\n"
+"å‘连接的æœåС噍å‘é€è¯·æ±‚。\n"
+"URL 傿•°ä»…为主机ååŽé¢çš„部分,å³è¯·æ±‚ [code]http://somehost.com/index.php[/"
+"code] 应该填写 [code]index.php[/code]ã€‚å‘ HTTP ä»£ç†æœåС噍å‘é€è¯·æ±‚时应为ç»å¯¹ "
+"URL。进行 [constant HTTPClient.METHOD_OPTIONS] 请求时,还å…许使用 [code]*[/"
+"code]。进行 [constant HTTPClient.METHOD_CONNECT] 请求时,应为身份组件([code]"
+"主机:端å£[/code])。\n"
"Headers 傿•°æ˜¯ HTTP 请求的报头。HTTP 方法å¯ä»¥æŸ¥çœ‹ [enum Method]。\n"
"如果è¦åˆ›å»ºå‘æœåС噍å‘逿Ÿ¥è¯¢å­—符串的 POST 请求,应该这样åšï¼š\n"
"[codeblock]\n"
@@ -32157,10 +32964,13 @@ msgstr ""
"\"Content-Length: \" + str(query_string.length())]\n"
"var result = http_client.request(http_client.METHOD_POST, \"index.php\", "
"headers, query_string)\n"
-"[/codeblock]"
+"[/codeblock]\n"
+"[b]注æ„:[/b] [code]method[/code] 为 [constant HTTPClient.METHOD_GET] 时会忽"
+"ç•¥ [code]request_data[/code] 傿•°ã€‚这是因为 GET 方法ä¸èƒ½åŒ…å«è¯·æ±‚æ•°æ®ã€‚作为å˜"
+"通,å¯ä»¥æŠŠè¯·æ±‚æ•°æ®é€šè¿‡ URL 的请求字符串传递。例å­è§ [method String."
+"http_escape]。"
#: doc/classes/HTTPClient.xml:146
-#, fuzzy
msgid ""
"Sends a raw request to the connected host.\n"
"The URL parameter is usually just the part after the host, so for "
@@ -32173,11 +32983,14 @@ msgid ""
"Method].\n"
"Sends the body data raw, as a byte array and does not encode it in any way."
msgstr ""
-"å‘连接的æœåС噍å‘é€åŽŸå§‹è¯·æ±‚ã€‚URL 傿•°ä»…为主机ååŽé¢çš„部分,å³è¯·æ±‚ "
-"[code]http://somehost.com/index.php[/code] 应该填写 [code]index.php[/"
-"code]。\n"
-"Headers 傿•°æ˜¯ HTTP 请求的报头。HTTP 方法å¯ä»¥æŸ¥çœ‹ [enum Method]。\n"
-"å‘é€åŽŸå§‹çš„è¯·æ±‚ä½“æ•°æ®ï¼Œç±»åž‹ä¸ºå­—节数组,ä¸ä¼šå†åšä»»ä½•å½¢å¼çš„ç¼–ç ã€‚"
+"å‘连接的主机å‘é€åŽŸå§‹è¯·æ±‚ã€‚\n"
+"URL傿•°é€šå¸¸åªæ˜¯ä¸»æœºåŽé¢çš„部分,所以对于[code]http://somehost.com/index.php[/"
+"code],它是[code]/index.php[/code]。当å‘HTTPä»£ç†æœåС噍å‘é€è¯·æ±‚时,它应该是一"
+"个ç»å¯¹çš„URL。对于[constant HTTPClient.METHOD_OPTIONS]请求,å…许[code]*[/"
+"code]。对于[constant HTTPClient.METHOD_CONNECT]请求,应该是标准组件,"
+"[code]host:port[/code]。\n"
+"å¤´ä¿¡æ¯æ˜¯HTTP请求头信æ¯ã€‚关于å¯ç”¨çš„HTTP方法,å‚阅[enum Method]。\n"
+"以字节数组的形å¼å‘é€åŽŸå§‹æ­£æ–‡æ•°æ®ï¼Œä¸ä»¥ä»»ä½•æ–¹å¼è¿›è¡Œç¼–ç ã€‚"
#: doc/classes/HTTPClient.xml:155
msgid ""
@@ -32897,7 +33710,6 @@ msgid "A node with the ability to send HTTP(S) requests."
msgstr "具有å‘é€ HTTP(S) 请求能力的节点。"
#: doc/classes/HTTPRequest.xml:7
-#, fuzzy
msgid ""
"A node with the ability to send HTTP requests. Uses [HTTPClient] "
"internally.\n"
@@ -32971,82 +33783,82 @@ msgid ""
" texture_rect.texture = texture\n"
"[/codeblock]"
msgstr ""
-"具有å‘é€ HTTP 请求能力的节点,内部使用 [HTTPClient]。\n"
-"å¯ä»¥ç”¨æ¥å‘é€ HTTP 请求,å³é€šè¿‡ HTTP 下载上传文件和网页内容。\n"
-"[b]与 REST API 通信示例,输出所返回的字段:[/b]\n"
+"有能力å‘é€HTTP请求的节点。内部使用[HTTPClient]。\n"
+"å¯ä»¥ç”¨æ¥è¿›è¡ŒHTTP请求,å³é€šè¿‡HTTP下载或上传文件或网络内容。\n"
+"[b]警告:[/b]å‚阅[HTTPClient]çš„æ³¨é‡Šå’Œè­¦å‘Šï¼Œä»¥äº†è§£å…¶å±€é™æ€§ï¼Œç‰¹åˆ«æ˜¯å…³äºŽSSL的安"
+"全性。\n"
+"[b]连接REST API并打å°å…¶è¿”回字段之一的例å­ï¼š[/b]\n"
"[codeblock]\n"
"func _ready():\n"
-" # 创建 HTTP 请求节点并连接完æˆä¿¡å·ã€‚\n"
+" # Create an HTTP request node and connect its completion signal.\n"
" var http_request = HTTPRequest.new()\n"
" add_child(http_request)\n"
" http_request.connect(\"request_completed\", self, "
"\"_http_request_completed\")\n"
"\n"
-" # 执行 GET 请求。下é¢çš„ URL ç›®å‰ä¼šè¿”回 JSON。\n"
+" # Perform a GET request. The URL below returns JSON as of writing.\n"
" var error = http_request.request(\"https://httpbin.org/get\")\n"
" if error != OK:\n"
-" push_error(\"HTTP 请求出错。\")\n"
+" push_error(\"An error occurred in the HTTP request.\")\n"
"\n"
-" # 执行 POST 请求。下é¢çš„ URL ç›®å‰ä¼šè¿”回 JSON。\n"
-" # 注æ„:ä¸è¦ä½¿ç”¨åŒä¸€ä¸ª HTTPRequest èŠ‚ç‚¹åŒæ—¶è¿›è¡Œå¤šä¸ªè¯·æ±‚\n"
-" # 下é¢çš„代ç ä»…ä¾›å‚考。\n"
+" # Perform a POST request. The URL below returns JSON as of writing.\n"
+" # Note: Don't make simultaneous requests using a single HTTPRequest "
+"node.\n"
+" # The snippet below is provided for reference only.\n"
" var body = {\"name\": \"Godette\"}\n"
-" var error = http_request.request(\"https://httpbin.org/post\", [], true, "
+" error = http_request.request(\"https://httpbin.org/post\", [], true, "
"HTTPClient.METHOD_POST, body)\n"
" if error != OK:\n"
-" push_error(\"HTTP 请求出错。\")\n"
+" push_error(\"An error occurred in the HTTP request.\")\n"
"\n"
"\n"
-"# HTTP è¯·æ±‚å®Œæˆæ—¶ä¼šè¢«è°ƒç”¨ã€‚\n"
+"# Called when the HTTP request is completed.\n"
"func _http_request_completed(result, response_code, headers, body):\n"
" var response = parse_json(body.get_string_from_utf8())\n"
"\n"
-" # 会输出(被 httpbin.org 识别到的)HTTPRequest 节点所使用的用户代ç†å­—符"
-"串。\n"
+" # Will print the user agent string used by the HTTPRequest node (as "
+"recognized by httpbin.org).\n"
" print(response.headers[\"User-Agent\"])\n"
"[/codeblock]\n"
-"[b]使用 HTTPRequest 加载并显示图片示例:[/b]\n"
+"[b]使用HTTPRequest加载和显示图片的例å­ï¼š[/b]\n"
"[codeblock]\n"
"func _ready():\n"
-" # 创建 HTTP 请求节点并连接完æˆä¿¡å·ã€‚\n"
+" # Create an HTTP request node and connect its completion signal.\n"
" var http_request = HTTPRequest.new()\n"
" add_child(http_request)\n"
" http_request.connect(\"request_completed\", self, "
"\"_http_request_completed\")\n"
"\n"
-" # 执行 HTTP 请求。下é¢çš„ URL ç›®å‰ä¼šè¿”回 PNG 图片。\n"
+" # Perform the HTTP request. The URL below returns a PNG image as of "
+"writing.\n"
" var error = http_request.request(\"https://via.placeholder.com/512\")\n"
" if error != OK:\n"
-" push_error(\"HTTP 请求出错。\")\n"
+" push_error(\"An error occurred in the HTTP request.\")\n"
"\n"
"\n"
-"# HTTP è¯·æ±‚å®Œæˆæ—¶ä¼šè¢«è°ƒç”¨ã€‚\n"
+"# Called when the HTTP request is completed.\n"
"func _http_request_completed(result, response_code, headers, body):\n"
" var image = Image.new()\n"
" var error = image.load_png_from_buffer(body)\n"
" if error != OK:\n"
-" push_error(\"无法加载图片\")\n"
+" push_error(\"Couldn't load the image.\")\n"
"\n"
" var texture = ImageTexture.new()\n"
" texture.create_from_image(image)\n"
"\n"
-" # 在 TextureRect 节点中显示该图片。\n"
+" # Display the image in a TextureRect node.\n"
" var texture_rect = TextureRect.new()\n"
" add_child(texture_rect)\n"
" texture_rect.texture = texture\n"
-"[/codeblock]\n"
-"[b]注æ„:[/b] 当执行从导出到 HTML5 的项目å‘出的 HTTP 请求时,请记ä½ï¼Œè¿œç¨‹æœåŠ¡"
-"器å¯èƒ½ç”±äºŽ [url=https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS]CORS[/"
-"url] çš„å…³ç³»è€Œç¦æ­¢æ¥è‡ªç«™å¤–的请求。如果æœåŠ¡å™¨æ˜¯ä½ è‡ªå·±æ­å»ºçš„,å¯ä»¥é€šè¿‡æ·»åŠ  "
-"[code]Access-Control-Allow-Origin: *[/code] HTTP 报头æ¥å…许站外请求。"
+"[/codeblock]"
#: doc/classes/HTTPRequest.xml:70
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/networking/http_request_class."
"html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/networking/http_request_class."
-"html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/networking/"
+"http_request_class.html"
#: doc/classes/HTTPRequest.xml:77
msgid "Cancels the current request."
@@ -33074,7 +33886,6 @@ msgid ""
msgstr "返回内部 [HTTPClient] 的当å‰çжæ€ã€‚è§ [enum HTTPClient.Status]。"
#: doc/classes/HTTPRequest.xml:107
-#, fuzzy
msgid ""
"Creates request on the underlying [HTTPClient]. If there is no configuration "
"errors, it tries to connect using [method HTTPClient.connect_to_host] and "
@@ -33092,17 +33903,22 @@ msgid ""
"url] for more details). As a workaround, you can send data as a query string "
"in the URL. See [method String.http_escape] for an example."
msgstr ""
-"使用内部的 [HTTPClient] 创建请求。如果没有é…置错误,将使用 [method "
-"HTTPClient.connect_to_host] è¿žæŽ¥ï¼Œå¹¶å°†å‚æ•°ä¼ é€’ç»™ [method HTTPClient."
+"在底层的 [HTTPClient] 上创建请求。如果没有é…置错误,它会å°è¯•使用 [method "
+"HTTPClient.connect_to_host] è¿žæŽ¥å¹¶å°†å‚æ•°ä¼ é€’ç»™ [method HTTPClient."
"request]。\n"
-"æˆåŠŸåˆ›å»ºè¯·æ±‚æ—¶è¿”å›ž [constant OK]ï¼ˆå¹¶ä¸æ„å‘³ç€æœåС噍已å“应),ä¸åœ¨åœºæ™¯æ ‘中时返"
-"回 [constant ERR_UNCONFIGURED],ä»åœ¨å¤„ç†ä¸Šä¸€ä¸ªè¯·æ±‚时返回 [constant "
-"ERR_BUSY]ï¼Œç»™å‡ºçš„å­—ç¬¦ä¸²ä¸æ˜¯æœ‰æ•ˆçš„ URL æ ¼å¼æ—¶è¿”回 [constant "
-"ERR_INVALID_PARAMETER],未å¯ç”¨å¤šçº¿ç¨‹å¹¶ä¸” [HTTPClient] 无法连接到主机时返回 "
-"[constant ERR_CANT_CONNECT]。"
+"如果请求创建æˆåŠŸï¼Œåˆ™è¿”å›ž [constant OK]。 ï¼ˆå¹¶ä¸æ„å‘³ç€æœåС噍已å“应),"
+"[constant ERR_UNCONFIGURED] 如果ä¸åœ¨æ ‘中,[constant ERR_BUSY] 如果ä»åœ¨å¤„ç†å…ˆ"
+"å‰çš„请求,[constant ERR_INVALID_PARAMETER] å¦‚æžœç»™å®šçš„å­—ç¬¦ä¸²ä¸æ˜¯æœ‰æ•ˆçš„ URL æ ¼"
+"å¼ï¼Œæˆ– [constant ERR_CANT_CONNECT]如果ä¸ä½¿ç”¨çº¿ç¨‹å¹¶ä¸” [HTTPClient] 无法连接到"
+"主机。\n"
+"[b]注æ„:[/b]当[code]method[/code]为[constant HTTPClient.METHOD_GET]时,通过"
+"[code]request_data[/code]å‘é€çš„payloadå¯èƒ½ä¼šè¢«æœåŠ¡å™¨å¿½ç•¥ç”šè‡³å¯¼è‡´æœåŠ¡å™¨æ‹’ç»è¯·"
+"求,å‚阅 [url=https://datatracker.ietf.org/doc/html/"
+"rfc7231#section-4.3.1]RFC 7231 第 4.3.1 节[/url] 了解更多。作为一ç§è§£å†³æ–¹æ³•,"
+"ä½ å¯ä»¥å°†æ•°æ®ä½œä¸º URL 中的查询字符串å‘é€ã€‚å‚阅 [method String.http_escape] 示"
+"例。"
#: doc/classes/HTTPRequest.xml:120
-#, fuzzy
msgid ""
"Creates request on the underlying [HTTPClient] using a raw array of bytes "
"for the request body. If there is no configuration errors, it tries to "
@@ -33115,31 +33931,30 @@ msgid ""
"[constant ERR_CANT_CONNECT] if not using thread and the [HTTPClient] cannot "
"connect to host."
msgstr ""
-"使用内部的 [HTTPClient] 创建请求。如果没有é…置错误,将使用 [method "
-"HTTPClient.connect_to_host] è¿žæŽ¥ï¼Œå¹¶å°†å‚æ•°ä¼ é€’ç»™ [method HTTPClient."
-"request]。\n"
-"æˆåŠŸåˆ›å»ºè¯·æ±‚æ—¶è¿”å›ž [constant OK]ï¼ˆå¹¶ä¸æ„å‘³ç€æœåС噍已å“应),ä¸åœ¨åœºæ™¯æ ‘中时返"
-"回 [constant ERR_UNCONFIGURED],ä»åœ¨å¤„ç†ä¸Šä¸€ä¸ªè¯·æ±‚时返回 [constant "
-"ERR_BUSY]ï¼Œç»™å‡ºçš„å­—ç¬¦ä¸²ä¸æ˜¯æœ‰æ•ˆçš„ URL æ ¼å¼æ—¶è¿”回 [constant "
-"ERR_INVALID_PARAMETER],未å¯ç”¨å¤šçº¿ç¨‹å¹¶ä¸” [HTTPClient] 无法连接到主机时返回 "
-"[constant ERR_CANT_CONNECT]。"
+"在底层的[HTTPClient]上创建请求,使用一个原始字节数组作为请求主体。如果没有é…"
+"置错误,它会å°è¯•使用 [method HTTPClient.connect_to_host] è¿žæŽ¥å¹¶å°†å‚æ•°ä¼ é€’ç»™ "
+"[method HTTPClient.request]。\n"
+"如果请求创建æˆåŠŸï¼Œåˆ™è¿”å›ž [constant OK]。 ï¼ˆå¹¶ä¸æ„å‘³ç€æœåС噍已å“应),"
+"[constant ERR_UNCONFIGURED] 如果ä¸åœ¨æ ‘中,[constant ERR_BUSY] 如果ä»åœ¨å¤„ç†å…ˆ"
+"å‰çš„请求,[constant ERR_INVALID_PARAMETER] å¦‚æžœç»™å®šçš„å­—ç¬¦ä¸²ä¸æ˜¯æœ‰æ•ˆçš„ URL æ ¼"
+"å¼ï¼Œæˆ– [constant ERR_CANT_CONNECT]如果ä¸ä½¿ç”¨çº¿ç¨‹å¹¶ä¸” [HTTPClient] 无法连接到"
+"主机。"
#: doc/classes/HTTPRequest.xml:127
msgid "Maximum allowed size for response bodies."
msgstr "å…许的最大å“应体大å°ã€‚"
#: doc/classes/HTTPRequest.xml:130
-#, fuzzy
msgid ""
"The size of the buffer used and maximum bytes to read per iteration. See "
"[member HTTPClient.read_chunk_size].\n"
"Set this to a lower value (e.g. 4096 for 4 KiB) when downloading small files "
"to decrease memory usage at the cost of download speeds."
msgstr ""
-"æ¯æ¬¡è¿­ä»£æ—¶æ‰€ä½¿ç”¨çš„缓冲区大å°ï¼Œå³æ¯æ¬¡è¿­ä»£æ—¶æ‰€èƒ½è¯»å–çš„æœ€å¤§å­—èŠ‚æ•°ã€‚è§ [member "
-"HTTPClient.read_chunk_size]。\n"
-"下载大文件时将该值调大(例如下载 64 KiB 时设为 65536)å¯ä»¥ç”¨æ›´å¤§çš„内存消耗æ¢"
-"å–æ›´å¿«çš„下载速度。"
+"使用的缓冲区大å°å’Œæ¯æ¬¡è¿­ä»£è¯»å–的最大字节数。å‚阅 [member HTTPClient."
+"read_chunk_size]。\n"
+"ä¸‹è½½å°æ–‡ä»¶æ—¶å°†å…¶è®¾ç½®ä¸ºè¾ƒä½Žçš„值,以é™ä½Žå†…存使用é‡ï¼Œä½†ä¼šé™ä½Žä¸‹è½½é€Ÿåº¦ï¼Œä¾‹å¦‚ "
+"4096 表示 4 KiB。"
#: doc/classes/HTTPRequest.xml:134
msgid "The file to download into. Will output any received file into it."
@@ -33206,7 +34021,6 @@ msgid "Image datatype."
msgstr "å›¾åƒæ•°æ®ç±»åž‹ã€‚"
#: doc/classes/Image.xml:7
-#, fuzzy
msgid ""
"Native image datatype. Contains image data which can be converted to an "
"[ImageTexture] and provides commonly used [i]image processing[/i] methods. "
@@ -33218,9 +34032,12 @@ msgid ""
"[b]Note:[/b] The maximum image size is 16384×16384 pixels due to graphics "
"hardware limitations. Larger images may fail to import."
msgstr ""
-"åŽŸç”Ÿå›¾åƒæ•°æ®ç±»åž‹ã€‚包å«å¯è½¬æ¢ä¸º [Texture2D]å›¾åƒæ•°æ®ï¼Œä»¥åŠä¸Žä¹‹äº¤äº’çš„å¤šç§æ–¹æ³•。"
-"[Image] 的最大宽度和高度为 [constant MAX_WIDTH] 和 [constant MAX_HEIGHT] 。\n"
-"[b]注:[/b] 由于图形硬件的é™åˆ¶ï¼Œæœ€å¤§å›¾åƒå¤§å°ä¸º 16384×16384 åƒç´ ã€‚较大的图åƒå°†"
+"æœ¬åœ°å›¾åƒæ•°æ®ç±»åž‹ã€‚包å«å¯è½¬æ¢ä¸º [ImageTexture] çš„å›¾åƒæ•°æ®ï¼Œå¹¶æä¾›å¸¸ç”¨çš„ [i] 图"
+"åƒå¤„ç† [/i] 方法。 [Image] 的最大宽度和高度是 [constant MAX_WIDTH] å’Œ "
+"[constant MAX_HEIGHT]。\n"
+"[Image] ä¸èƒ½ç›´æŽ¥åˆ†é…给对象的 [code]texture[/code] 属性,例如 [Sprite],必须先"
+"手动转æ¢ä¸º [ImageTexture]。\n"
+"[b]注æ„:[/b]由于图形硬件é™åˆ¶ï¼Œæœ€å¤§å›¾åƒå°ºå¯¸ä¸º16384×16384åƒç´ ã€‚较大的图åƒå¯èƒ½"
"无法导入。"
#: doc/classes/Image.xml:12 doc/classes/ImageTexture.xml:31
@@ -33228,7 +34045,7 @@ msgid ""
"https://docs.godotengine.org/en/3.4/getting_started/workflow/assets/"
"importing_images.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/getting_started/workflow/assets/"
+"https://docs.godotengine.org/zh_CN/stable/getting_started/workflow/assets/"
"importing_images.html"
#: doc/classes/Image.xml:21
@@ -33360,7 +34177,7 @@ msgstr ""
msgid ""
"Stretches the image and enlarges it by a factor of 2. No interpolation is "
"done."
-msgstr ""
+msgstr "拉伸图åƒå¹¶å°†å…¶æ”¾å¤§2å€ï¼Œä¸è¿›è¡Œæ’值。"
#: doc/classes/Image.xml:140
msgid "Fills the image with a given [Color]."
@@ -33379,7 +34196,6 @@ msgid "Flips the image vertically."
msgstr "垂直翻转图åƒã€‚"
#: doc/classes/Image.xml:165
-#, fuzzy
msgid ""
"Generates mipmaps for the image. Mipmaps are precalculated lower-resolution "
"copies of the image that are automatically used if the image needs to be "
@@ -33391,14 +34207,16 @@ msgid ""
"result in noticeable stuttering during gameplay, even if [method "
"generate_mipmaps] is called from a [Thread]."
msgstr ""
-"为图åƒç”Ÿæˆmipmaps。Mipmaps是预先计算好的ã€åˆ†è¾¨çŽ‡è¾ƒä½Žçš„å›¾åƒå‰¯æœ¬ã€‚如果图åƒåœ¨æ¸²"
-"染时需è¦ç¼©å°ï¼Œå°±ä¼šè‡ªåŠ¨ä½¿ç”¨Mipmaps。这å¯ä»¥æé«˜å›¾åƒçš„è´¨é‡å’Œæ¸²æŸ“的性能。如果图åƒ"
-"被压缩,或者是自定义格å¼ï¼Œæˆ–者图åƒçš„宽度/高度为0,则返回一个错误。"
+"为图åƒç”Ÿæˆmipmaps。Mipmaps是预先计算好的图åƒçš„低分辨率副本,如果图åƒåœ¨æ¸²æŸ“æ—¶"
+"需è¦ç¼©å°ï¼Œå°±ä¼šè‡ªåŠ¨ä½¿ç”¨ã€‚å…¶æœ‰åŠ©äºŽæé«˜å›¾åƒè´¨é‡å’Œæ¸²æŸ“时的性能。如果图åƒè¢«åŽ‹ç¼©ï¼Œ"
+"或采用自定义格å¼ï¼Œæˆ–图åƒçš„宽度或高度为[code]0[/code],则此方法返回错误。\n"
+"[b]注æ„:[/b] Mipmapçš„ç”Ÿæˆæ˜¯åœ¨CPU上完æˆçš„,是å•线程的,并且[i]总是[/i]在主线"
+"程上完æˆã€‚è¿™æ„味ç€åœ¨æ¸¸æˆè¿‡ç¨‹ä¸­ç”Ÿæˆmipmaps会导致明显的å¡é¡¿ï¼Œå³ä½¿ä»Ž[Thread]调用"
+"[method generate_mipmaps]。"
#: doc/classes/Image.xml:172
-#, fuzzy
msgid "Returns a copy of the image's raw data."
-msgstr "返回图åƒçš„原始数æ®ã€‚"
+msgstr "返回图åƒåŽŸå§‹æ•°æ®çš„副本。"
#: doc/classes/Image.xml:178
msgid "Returns the image's format. See [enum Format] constants."
@@ -33417,26 +34235,26 @@ msgstr ""
"é‡ã€‚"
#: doc/classes/Image.xml:199
-#, fuzzy
msgid ""
"Returns the color of the pixel at [code](x, y)[/code] if the image is "
"locked. If the image is unlocked, it always returns a [Color] with the value "
"[code](0, 0, 0, 1.0)[/code]. This is the same as [method get_pixelv], but "
"two integer arguments instead of a Vector2 argument."
msgstr ""
-"返回 [code](x, y)[/code] 处åƒç´ çš„颜色。这与[method get_pixelv]相åŒï¼Œä½†æœ‰ä¸¤ä¸ª"
-"æ•´æ•°å‚æ•°ï¼Œè€Œä¸æ˜¯ä¸€ä¸ª[Vector2]傿•°ã€‚"
+"如果图åƒè¢«é”定,则返回 [code](x, y)[/code] 处åƒç´ çš„颜色。如果图åƒè¢«è§£é”,它总"
+"是返回 [code](0, 0, 0, 1.0)[/code] 值的 [Color]。这与 [method get_pixelv] 相"
+"åŒï¼Œä½†æœ‰ä¸¤ä¸ªæ•´æ•°å‚æ•°è€Œä¸æ˜¯ Vector2 傿•°ã€‚"
#: doc/classes/Image.xml:206
-#, fuzzy
msgid ""
"Returns the color of the pixel at [code]src[/code] if the image is locked. "
"If the image is unlocked, it always returns a [Color] with the value [code]"
"(0, 0, 0, 1.0)[/code]. This is the same as [method get_pixel], but with a "
"Vector2 argument instead of two integer arguments."
msgstr ""
-"返回[code](x,y)[/code]处åƒç´ çš„颜色。这与[method get_pixel]相åŒï¼Œä½†ç”¨ä¸€ä¸ª"
-"[Vector2]傿•°ä»£æ›¿äº†ä¸¤ä¸ªæ•´æ•°å‚数。"
+"如果图åƒè¢«é”定,返回[code]src[/code]处的åƒç´ çš„颜色。如果图åƒè¢«è§£é”,它总是返"
+"回[code](0, 0, 0, 1.0)[/code]值的[Color]。这与[method get_pixel]相åŒï¼Œåªæ˜¯ç”¨"
+"一个Vector2傿•°ä»£æ›¿äº†ä¸¤ä¸ªæ•´æ•°å‚数。"
#: doc/classes/Image.xml:213
msgid ""
@@ -33481,7 +34299,6 @@ msgstr ""
"åƒç´ çš„逿˜Žåº¦ï¼ˆalpha )高于0,则返回[code]false[/code]。"
#: doc/classes/Image.xml:262
-#, fuzzy
msgid ""
"Loads an image from file [code]path[/code]. See [url=https://docs."
"godotengine.org/en/3.4/getting_started/workflow/assets/importing_images."
@@ -33492,9 +34309,13 @@ msgid ""
"the [code]user://[/code] directory, and may not work in exported projects.\n"
"See also [ImageTexture] description for usage examples."
msgstr ""
-"从文件路径[code]path[/code]加载图åƒã€‚有关支æŒçš„å›¾åƒæ ¼å¼å’Œé™åˆ¶çš„列表,请å‚阅"
-"[url=https://docs.godotengine.org/zh_CN/latest/getting_started/workflow/"
-"assets/importing_images.html#supported-image-formats]支æŒçš„å›¾åƒæ ¼å¼[/url]。"
+"从文件[code]path[/code]加载图åƒã€‚å‚阅[url=https://docs.godotengine.org/zh_CN/"
+"stable/getting_started/workflow/assets/importing_images.html#supported-image-"
+"formats]支æŒçš„å›¾åƒæ ¼å¼[/url],了解支æŒçš„å›¾åƒæ ¼å¼å’Œé™åˆ¶ã€‚\n"
+"[b]警告:[/b] 这个方法åªèƒ½åœ¨ç¼–辑器中使用,或者在è¿è¡Œæ—¶éœ€è¦åŠ è½½å¤–éƒ¨å›¾åƒçš„æƒ…况"
+"下使用,比如ä½äºŽ[code]user://[/code]目录下的图åƒï¼Œåœ¨å¯¼å‡ºçš„项目中å¯èƒ½æ— æ³•å·¥"
+"作。\n"
+"有关使用实例,å‚阅[ImageTexture]æè¿°ã€‚"
#: doc/classes/Image.xml:271
msgid ""
@@ -33502,6 +34323,9 @@ msgid ""
"[b]Note:[/b] Godot's BMP module doesn't support 16-bit per pixel images. "
"Only 1-bit, 4-bit, 8-bit, 24-bit, and 32-bit per pixel images are supported."
msgstr ""
+"从BMP文件的二进制内容中加载图åƒã€‚\n"
+"[b]注æ„:[/b] Godotçš„BMP模å—䏿”¯æŒ16ä½åƒç´ çš„图åƒã€‚åªæ”¯æŒ1ä½ã€4ä½ã€8ä½ã€24ä½å’Œ"
+"32ä½åƒç´ çš„图åƒã€‚"
#: doc/classes/Image.xml:279
msgid "Loads an image from the binary contents of a JPEG file."
@@ -33524,6 +34348,8 @@ msgid ""
"Locks the data for reading and writing access. Sends an error to the console "
"if the image is not locked when reading or writing a pixel."
msgstr ""
+"é”定数æ®çš„读写访问。如果在读或写åƒç´ æ—¶ï¼Œå›¾åƒæ²¡æœ‰è¢«é”å®šï¼Œåˆ™å‘æŽ§åˆ¶å°å‘é€ä¸€ä¸ªé”™"
+"误。"
#: doc/classes/Image.xml:312
msgid ""
@@ -33543,25 +34369,24 @@ msgstr ""
"code]。"
#: doc/classes/Image.xml:327
-#, fuzzy
msgid ""
"Resizes the image to the given [code]width[/code] and [code]height[/code]. "
"New pixels are calculated using the [code]interpolation[/code] mode defined "
"via [enum Interpolation] constants."
msgstr ""
-"将图åƒè°ƒæ•´åˆ°ç»™å®šçš„[code]宽度[/code]å’Œ[code]高度[/code]。新的åƒç´ æ˜¯ç”¨"
-"[code]interpolation[/code](æ’值)计算的。è§[code]interpolation[/code]常é‡ã€‚"
+"调整图åƒå¤§å°åˆ°ç»™å®šçš„[code]width[/code]å’Œ[code]height[/code]。新åƒç´ é€šè¿‡[enum "
+"Interpolation]常数定义的[code]interpolation[/code]æ’值模å¼è®¡ç®—。"
#: doc/classes/Image.xml:335
-#, fuzzy
msgid ""
"Resizes the image to the nearest power of 2 for the width and height. If "
"[code]square[/code] is [code]true[/code] then set width and height to be the "
"same. New pixels are calculated using the [code]interpolation[/code] mode "
"defined via [enum Interpolation] constants."
msgstr ""
-"将图åƒçš„宽度和高度调整为最接近的 2 次幂。如果 [code]square[/code] 为 "
-"[code]true[/code],则将宽度和高度设置为相åŒã€‚"
+"将图åƒçš„宽度和高度调整到最接近的2次方。如果[code]square[/code]是[code]true[/"
+"code],那么设置宽度和高度为相åŒã€‚æ–°åƒç´ é€šè¿‡[enum Interpolation]常数定义的"
+"[code]interpolation[/code]æ’值模å¼è®¡ç®—。"
#: doc/classes/Image.xml:341
msgid ""
@@ -33569,7 +34394,6 @@ msgid ""
msgstr "将标准 RGBEï¼ˆçº¢ç»¿è“æŒ‡æ•°ï¼‰å›¾åƒè½¬æ¢ä¸º sRGB 图åƒã€‚"
#: doc/classes/Image.xml:349
-#, fuzzy
msgid ""
"Saves the image as an EXR file to [code]path[/code]. If [code]grayscale[/"
"code] is [code]true[/code] and the image has only one channel, it will be "
@@ -33581,16 +34405,17 @@ msgid ""
"called from an exported project."
msgstr ""
"将图åƒä½œä¸ºEXR文件ä¿å­˜åˆ°[code]path[/code]。如果[code]grayscale[/code]是"
-"[code]true[/code],并且图åƒåªæœ‰ä¸€ä¸ªé€šé“,它将被明确ä¿å­˜ä¸ºå•è‰²è€Œä¸æ˜¯ä¸€ä¸ªçº¢è‰²é€š"
-"é“。如果Godot在编译时没有å¯ç”¨TinyEXR模å—,这个函数将返回[constant "
-"ERR_UNAVAILABLE]。"
+"[code]true[/code]并且图åƒåªæœ‰ä¸€ä¸ªé€šé“,它将被明确地ä¿å­˜ä¸ºå•è‰²è€Œä¸æ˜¯çº¢è‰²é€šé“。"
+"如果Godot在编译时没有TinyEXR模å—,这个函数将返回[constant "
+"ERR_UNAVAILABLE]。\n"
+"[b]注æ„:[/b] TinyEXR模å—在éžç¼–辑器构建中被ç¦ç”¨ï¼Œè¿™æ„味ç€[method save_exr]从"
+"导出的项目中调用时将返回[constant ERR_UNAVAILABLE]。"
#: doc/classes/Image.xml:357
msgid "Saves the image as a PNG file to [code]path[/code]."
msgstr "将图åƒä½œä¸º PNG 文件ä¿å­˜åˆ° [code]path[/code]。"
#: doc/classes/Image.xml:371
-#, fuzzy
msgid ""
"Sets the [Color] of the pixel at [code](x, y)[/code] if the image is locked. "
"Example:\n"
@@ -33603,15 +34428,17 @@ msgid ""
"img.set_pixel(x, y, color) # Does not have an effect\n"
"[/codeblock]"
msgstr ""
-"设置[code](x, y)[/code]处的åƒç´ çš„[Color]。示例:\n"
+"如果图åƒè¢«é”定,设置[code](x, y)[/code]处åƒç´ çš„[Color]。例å­:\n"
"[codeblock]\n"
"var img = Image.new()\n"
"img.create(img_width, img_height, false, Image.FORMAT_RGBA8)\n"
-"img.set_pixel(x, y, color)\n"
+"img.lock()\n"
+"img.set_pixel(x, y, color) # Works\n"
+"img.unlock()\n"
+"img.set_pixel(x, y, color) # Does not have an effect\n"
"[/codeblock]"
#: doc/classes/Image.xml:387
-#, fuzzy
msgid ""
"Sets the [Color] of the pixel at [code](dst.x, dst.y)[/code] if the image is "
"locked. Note that the [code]dst[/code] values must be integers. Example:\n"
@@ -33624,12 +34451,15 @@ msgid ""
"img.set_pixelv(Vector2(x, y), color) # Does not have an effect\n"
"[/codeblock]"
msgstr ""
-"设置[code](dst.x, dst.y)[/code]处åƒç´ çš„[Color]。注æ„,[code]dst[/code]的值必"
-"须是整数。例å­ã€‚\n"
+"如果图åƒè¢«é”定,设置[code](dst.x, dst.y)[/code]处的åƒç´ çš„[Color]。注æ„,"
+"[code]dst[/code]值必须是整数。例:\n"
"[codeblock]\n"
"var img = Image.new()\n"
"img.create(img_width, img_height, false, Image.FORMAT_RGBA8)\n"
-"img.set_pixelv(Vector2(x, y), color)\n"
+"img.lock()\n"
+"img.set_pixelv(Vector2(x, y), color) # Works\n"
+"img.unlock()\n"
+"img.set_pixelv(Vector2(x, y), color) # Does not have an effect\n"
"[/codeblock]"
#: doc/classes/Image.xml:401
@@ -33645,7 +34475,6 @@ msgid "Unlocks the data and prevents changes."
msgstr "è§£é”æ•°æ®å¹¶é˜²æ­¢æ›´æ”¹ã€‚"
#: doc/classes/Image.xml:419
-#, fuzzy
msgid ""
"Holds all the image's color data in a given format. See [enum Format] "
"constants."
@@ -33672,16 +34501,20 @@ msgstr "OpenGL çº¹ç†æ ¼å¼ï¼Œå…·æœ‰ä¸¤ä¸ªå€¼ï¼Œäº®åº¦å’Œ alpha,æ¯ä¸ªå€¼ä»¥ 8
#: doc/classes/Image.xml:436
msgid ""
"OpenGL texture format [code]RED[/code] with a single component and a "
-"bitdepth of 8."
-msgstr "OpenGLçº¹ç†æ ¼å¼[code]RED[/code],具有å•一分é‡ï¼Œä½æ·±ä¸º8。"
+"bitdepth of 8.\n"
+"[b]Note:[/b] When using the GLES2 backend, this uses the alpha channel "
+"instead of the red channel for storage."
+msgstr ""
+"OpenGL çº¹ç†æ ¼å¼ [code]RED[/code],具有å•个分é‡å’Œ 8 使·±åº¦ã€‚\n"
+"[b]注æ„:[/b] 当使用 GLES2 åŽç«¯æ—¶ï¼Œå®ƒä½¿ç”¨ alpha 通é“è€Œä¸æ˜¯çº¢è‰²é€šé“进行存储。"
-#: doc/classes/Image.xml:439
+#: doc/classes/Image.xml:440
msgid ""
"OpenGL texture format [code]RG[/code] with two components and a bitdepth of "
"8 for each."
msgstr "OpenGL çº¹ç†æ ¼å¼ [code]RG[/code],具有两个部分,æ¯ä¸ªéƒ¨åˆ†çš„使·±åº¦ä¸º 8。"
-#: doc/classes/Image.xml:442
+#: doc/classes/Image.xml:443
msgid ""
"OpenGL texture format [code]RGB[/code] with three components, each with a "
"bitdepth of 8.\n"
@@ -33691,7 +34524,7 @@ msgstr ""
"OpenGL çº¹ç†æ ¼å¼ [code]RGB[/code] 具有三个部分,æ¯ä¸ªåˆ†é‡éƒ¨åˆ†çš„使·±åº¦ä¸º 8。\n"
"[b]注æ„:[/b]创建 [ImageTexture] 时,会执行sRGB到线性色彩空间的转æ¢ã€‚"
-#: doc/classes/Image.xml:446
+#: doc/classes/Image.xml:447
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 8.\n"
@@ -33701,27 +34534,28 @@ msgstr ""
"OpenGL çº¹ç†æ ¼å¼ [code]RGBA[/code] 有四个部分,æ¯ä¸ªåˆ†é‡éƒ¨åˆ†çš„使·±åº¦ä¸º 8。\n"
"[b]注æ„:[/b]创建 [ImageTexture] 时,会执行sRGB到线性色彩空间的转æ¢ã€‚"
-#: doc/classes/Image.xml:450
+#: doc/classes/Image.xml:451
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 4."
msgstr ""
"OpenGL çº¹ç†æ ¼å¼ [code]RGBA[/code] 有四个部分,æ¯ä¸ªåˆ†é‡éƒ¨åˆ†çš„使·±åº¦ä¸º 4。"
-#: doc/classes/Image.xml:453
-#, fuzzy
+#: doc/classes/Image.xml:454
msgid ""
"OpenGL texture format [code]GL_RGB5_A1[/code] where 5 bits of depth for each "
"component of RGB and one bit for alpha."
-msgstr "OpenGL çº¹ç†æ ¼å¼ [code]RG[/code],具有两个部分,æ¯ä¸ªéƒ¨åˆ†çš„使·±åº¦ä¸º 8。"
+msgstr ""
+"OpenGLçº¹ç†æ ¼å¼[code]GL_RGB5_A1[/code],其中RGBæ¯ä¸ªåˆ†é‡çš„æ·±åº¦ä¸º5ä½ï¼Œalpha为1"
+"ä½ã€‚"
-#: doc/classes/Image.xml:456
+#: doc/classes/Image.xml:457
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 32-"
"bit floating-point value."
msgstr "OpenGL çº¹ç†æ ¼å¼ [code]GL_R32F[/code],其中有一个分é‡ï¼Œæ˜¯32 使µ®ç‚¹å€¼ã€‚"
-#: doc/classes/Image.xml:459
+#: doc/classes/Image.xml:460
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 32-bit floating-point values."
@@ -33729,7 +34563,7 @@ msgstr ""
"OpenGL çº¹ç†æ ¼å¼ [code]GL_RG32F[/code] 这里有两个部分,æ¯ä¸ªéƒ¨åˆ†æ˜¯ä¸€ä¸ª 32 使µ®"
"点值。"
-#: doc/classes/Image.xml:462
+#: doc/classes/Image.xml:463
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 32-bit floating-point values."
@@ -33737,7 +34571,7 @@ msgstr ""
"OpenGLçº¹ç†æ ¼å¼[code]GL_RGB32F[/code],其中有三个部分,æ¯ä¸ªéƒ¨åˆ†éƒ½æ˜¯32使µ®ç‚¹"
"值。"
-#: doc/classes/Image.xml:465
+#: doc/classes/Image.xml:466
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 32-bit floating-point values."
@@ -33745,7 +34579,7 @@ msgstr ""
"OpenGLçº¹ç†æ ¼å¼[code]GL_RGBA32F[/code],其中有四个部分,æ¯ä¸ªéƒ¨åˆ†éƒ½æ˜¯32使µ®ç‚¹"
"值。"
-#: doc/classes/Image.xml:468
+#: doc/classes/Image.xml:469
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 16-"
"bit \"half-precision\" floating-point value."
@@ -33753,7 +34587,7 @@ msgstr ""
"OpenGLçº¹ç†æ ¼å¼[code]GL_R32F[/code],其中有一个分é‡ï¼Œå³16ä½ \"åŠç²¾åº¦ \"浮点"
"值。"
-#: doc/classes/Image.xml:471
+#: doc/classes/Image.xml:472
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 16-bit \"half-precision\" floating-point value."
@@ -33761,7 +34595,7 @@ msgstr ""
"OpenGLçº¹ç†æ ¼å¼[code]GL_RG32F[/code],其中有两个部分,æ¯ä¸ªéƒ¨åˆ†éƒ½æ˜¯16ä½ \"åŠç²¾"
"度 \"浮点值。"
-#: doc/classes/Image.xml:474
+#: doc/classes/Image.xml:475
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 16-bit \"half-precision\" floating-point value."
@@ -33769,7 +34603,7 @@ msgstr ""
"OpenGLçº¹ç†æ ¼å¼[code]GL_RGB32F[/code],其中有三个部分,æ¯ä¸ªéƒ¨åˆ†éƒ½æ˜¯16ä½ \"åŠç²¾"
"度 \"浮点值。"
-#: doc/classes/Image.xml:477
+#: doc/classes/Image.xml:478
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 16-bit \"half-precision\" floating-point value."
@@ -33777,7 +34611,7 @@ msgstr ""
"OpenGLçº¹ç†æ ¼å¼[code]GL_RGBA32F[/code],其中有四个部分,æ¯ä¸ªéƒ½æ˜¯16ä½\"åŠç²¾åº¦ "
"\"浮点值。"
-#: doc/classes/Image.xml:480
+#: doc/classes/Image.xml:481
msgid ""
"A special OpenGL texture format where the three color components have 9 bits "
"of precision and all three share a single 5-bit exponent."
@@ -33785,7 +34619,7 @@ msgstr ""
"一ç§ç‰¹æ®Šçš„OpenGLçº¹ç†æ ¼å¼ï¼Œå…¶ä¸­ä¸‰ä¸ªé¢œè‰²æˆåˆ†çš„精度为9ä½ï¼Œæ‰€æœ‰ä¸‰ä¸ªæˆåˆ†å…±äº«ä¸€ä¸ª5"
"比特ä½çš„æŒ‡æ•°ã€‚"
-#: doc/classes/Image.xml:483
+#: doc/classes/Image.xml:484
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 1, and is the smallest variation "
@@ -33798,7 +34632,7 @@ msgstr ""
"使用å—压缩1,并且是S3TC的最å°å˜åŒ–,ä»…æä¾›1ä½çš„alphaå’Œé¢œè‰²æ•°æ® é¢„ä¹˜ä»¥alpha.\n"
"[b]注æ„:[/b]创建ImageTextureæ—¶,将执行sRGB到线性色彩空间的转æ¢."
-#: doc/classes/Image.xml:487
+#: doc/classes/Image.xml:488
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 2, and color data is interpreted "
@@ -33812,7 +34646,7 @@ msgstr ""
"ä¸é€æ˜ŽåŒºåŸŸä¹‹é—´çš„æ¸…æ™°çš„alpha过渡.\n"
"[b]注æ„:[/b]创建ImageTextureæ—¶,将执行sRGB到线性色彩空间的转æ¢."
-#: doc/classes/Image.xml:491
+#: doc/classes/Image.xml:492
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format also known as Block Compression 3 or BC3 that contains 64 "
@@ -33828,7 +34662,7 @@ msgstr ""
"产生更好的结果.\n"
"[b]注æ„:[/b]创建ImageTextureæ—¶,将执行sRGB到线性色彩空间的转æ¢."
-#: doc/classes/Image.xml:495
+#: doc/classes/Image.xml:496
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -33839,7 +34673,7 @@ msgstr ""
"红绿贴图压缩[/url]的贴图格å¼,使用与DXT5用于alpha通é“相åŒçš„压缩算法对红色通é“"
"æ•°æ®è¿›è¡Œå½’一化."
-#: doc/classes/Image.xml:498
+#: doc/classes/Image.xml:499
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -33849,7 +34683,7 @@ msgstr ""
"使用 [url=https://www.khronos.org/opengl/wiki/Red_Green_Texture_Compression]"
"红绿贴图压缩[/url]的贴图格å¼,使用与DXT5用于alpha的压缩算法相åŒçš„红绿数æ®é€šé“."
-#: doc/classes/Image.xml:501
+#: doc/classes/Image.xml:502
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned normalized "
@@ -33861,7 +34695,7 @@ msgstr ""
"缩[/url] 和无符å·å½’一化RGBA分é‡çš„贴图格å¼.\n"
"[b]注æ„:[/b]创建[ImageTexture]æ—¶,将执行sRGB到线性色彩空间的转æ¢."
-#: doc/classes/Image.xml:505
+#: doc/classes/Image.xml:506
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with signed floating-point "
@@ -33870,7 +34704,7 @@ msgstr ""
"使用 [url=https://www.khronos.org/opengl/wiki/BPTC_Texture_Compression]BPTC[/"
"url] åŽ‹ç¼©å’Œæœ‰ç¬¦å·æµ®ç‚¹RGB分é‡çš„贴图格å¼."
-#: doc/classes/Image.xml:508
+#: doc/classes/Image.xml:509
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned floating-point "
@@ -33879,7 +34713,7 @@ msgstr ""
"使用[url=https://www.khronos.org/opengl/wiki/BPTC_Texture_Compression]BPTC[/"
"url] åŽ‹ç¼©å’Œæ— ç¬¦å·æµ®ç‚¹RGB分é‡çš„贴图格å¼."
-#: doc/classes/Image.xml:511
+#: doc/classes/Image.xml:512
msgid ""
"Texture format used on PowerVR-supported mobile platforms, uses 2-bit color "
"depth with no alpha. More information can be found [url=https://en.wikipedia."
@@ -33891,14 +34725,14 @@ msgstr ""
"在 [url=https://en.wikipedia.org/wiki/PVRTC]这里[/url]找到.\n"
"[b]注æ„:[/b]在创建ImageTextureæ—¶,会进行sRGB到线性色彩空间的转æ¢."
-#: doc/classes/Image.xml:515
+#: doc/classes/Image.xml:516
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with an "
"alpha component."
msgstr ""
"与 [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url]相åŒ,但带有alpha组件."
-#: doc/classes/Image.xml:518
+#: doc/classes/Image.xml:519
msgid ""
"Similar to [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with 4-"
"bit color depth and no alpha."
@@ -33906,14 +34740,14 @@ msgstr ""
"与 [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url]相似,但具有4ä½è‰²æ·±ä¸”"
"没有Alpha通é“."
-#: doc/classes/Image.xml:521
+#: doc/classes/Image.xml:522
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC4[/url], but with an "
"alpha component."
msgstr ""
"与 [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC4[/url]相åŒ,但带有alpha组件."
-#: doc/classes/Image.xml:524
+#: doc/classes/Image.xml:525
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC1]Ericsson Texture Compression format 1[/"
@@ -33924,7 +34758,7 @@ msgstr ""
"纹ç†åŽ‹ç¼©æ ¼å¼1[/url],åˆç§° \"ETC1\",是OpenGL ES图形标准的一部分.è¿™ç§æ ¼å¼ä¸èƒ½å­˜"
"储alpha通é“."
-#: doc/classes/Image.xml:527
+#: doc/classes/Image.xml:528
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -33935,7 +34769,7 @@ msgstr ""
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson纹ç†åŽ‹ç¼©æ ¼å¼2[/url] "
"([code]R11_EACvariant[/code]),它æä¾›ä¸€ä¸ªæ— ç¬¦å·æ•°æ®é€šé“."
-#: doc/classes/Image.xml:530
+#: doc/classes/Image.xml:531
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -33946,7 +34780,7 @@ msgstr ""
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson纹ç†åŽ‹ç¼©æ ¼å¼2[/url]"
"([code]SIGNED_R11_EACvariant[/code]),它æä¾›ä¸€ä¸ªé€šé“çš„æœ‰ç¬¦å·æ•°æ®."
-#: doc/classes/Image.xml:533
+#: doc/classes/Image.xml:534
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -33957,7 +34791,7 @@ msgstr ""
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson纹ç†åŽ‹ç¼©æ ¼å¼"
"2([code]RG11_EAC[/code] variant),它æä¾›ä¸€ä¸ªæ— ç¬¦å·æ•°æ®é€šé“."
-#: doc/classes/Image.xml:536
+#: doc/classes/Image.xml:537
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -33968,7 +34802,7 @@ msgstr ""
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson纹ç†åŽ‹ç¼©æ ¼å¼2[/url]"
"([code]SIGNED_RG11_EAC [/code] å˜ä½“),它æä¾›ä¸¤ä¸ªé€šé“çš„æœ‰ç¬¦å·æ•°æ®ã€‚"
-#: doc/classes/Image.xml:539
+#: doc/classes/Image.xml:540
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -33982,7 +34816,7 @@ msgstr ""
"([code]RGB8[/code] å˜ä½“),它是ETC1çš„åŽç»­ç‰ˆæœ¬,å¯åŽ‹ç¼©RGB888æ•°æ®.\n"
"[b]注æ„:[/b]创建[ImageTexture]æ—¶,会进行sRGB到线性色彩空间的转æ¢."
-#: doc/classes/Image.xml:543
+#: doc/classes/Image.xml:544
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -33996,7 +34830,7 @@ msgstr ""
"([code]RGBA8[/code] å˜ä½“),它å¯ä»¥åŽ‹ç¼©RGBA8888æ•°æ®,完全支æŒalpha.\n"
"[b]注æ„:[/b]在创建[ImageTexture]æ—¶,会进行sRGB到线性色彩空间的转æ¢."
-#: doc/classes/Image.xml:547
+#: doc/classes/Image.xml:548
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -34012,17 +34846,17 @@ msgstr ""
"明或完全ä¸é€æ˜Ž.\n"
"[b]注æ„:[/b] 创建[ImageTexture]æ—¶,会进行sRGB到线性色彩空间的转æ¢."
-#: doc/classes/Image.xml:551
+#: doc/classes/Image.xml:552
msgid "Represents the size of the [enum Format] enum."
msgstr "表示[Format]枚举的大å°."
-#: doc/classes/Image.xml:554
+#: doc/classes/Image.xml:555
msgid ""
"Performs nearest-neighbor interpolation. If the image is resized, it will be "
"pixelated."
msgstr "执行最近邻æ’值.如果调整图åƒå¤§å°,它将被åƒç´ åŒ–."
-#: doc/classes/Image.xml:557
+#: doc/classes/Image.xml:558
msgid ""
"Performs bilinear interpolation. If the image is resized, it will be blurry. "
"This mode is faster than [constant INTERPOLATE_CUBIC], but it results in "
@@ -34031,7 +34865,7 @@ msgstr ""
"执行åŒçº¿æ€§æ’值.如果调整图åƒå¤§å°,则图åƒå°†æ¨¡ç³Š.æ­¤æ¨¡å¼æ¯”[INTERPOLATE_CUBIC]æ›´å¿«,"
"但质é‡è¾ƒä½Ž."
-#: doc/classes/Image.xml:560
+#: doc/classes/Image.xml:561
msgid ""
"Performs cubic interpolation. If the image is resized, it will be blurry. "
"This mode often gives better results compared to [constant "
@@ -34040,8 +34874,7 @@ msgstr ""
"执行三次æ’值.如果调整图åƒå¤§å°,则图åƒå°†æ¨¡ç³Š.与[INTERPOLATE_BILINEAR]相比,此模"
"å¼é€šå¸¸ä¼šäº§ç”Ÿæ›´å¥½çš„结果,但代价是速度较慢."
-#: doc/classes/Image.xml:563
-#, fuzzy
+#: doc/classes/Image.xml:564
msgid ""
"Performs bilinear separately on the two most-suited mipmap levels, then "
"linearly interpolates between them.\n"
@@ -34055,15 +34888,16 @@ msgid ""
"On the other hand, if the image already has mipmaps, they will be used, and "
"a new set will be generated for the resulting image."
msgstr ""
-"在两个最åˆé€‚çš„mipmap层上分别执行åŒçº¿æ€§,ç„¶åŽåœ¨å®ƒä»¬ä¹‹é—´è¿›è¡Œçº¿æ€§æ’值.\n"
-"它比[INTERPOLATE_BILINEAR]æ…¢,ä½†èƒ½äº§ç”Ÿè´¨é‡æ›´é«˜çš„æ•ˆæžœ,并且å‡å°‘很多混å .\n"
-"å¦‚æžœå›¾åƒæ²¡æœ‰mipmaps,它们将被生æˆå¹¶åœ¨å†…部使用,但ä¸ä¼šå¯¹ç”Ÿæˆçš„图åƒç”Ÿæˆmipmaps.\n"
-"[b]注æ„: [/b]如果您打算对原始图åƒè¿›è¡Œå¤šä»½ç¼©æ”¾,最好æå‰å¯¹å…¶è°ƒç”¨ "
-"generate_mipmaps(),以é¿å…在åå¤ç”Ÿæˆå®ƒä»¬æ—¶æµªè´¹å¤„ç†èƒ½åŠ›.\n"
-"å¦ä¸€æ–¹é¢,如果图åƒå·²ç»æœ‰äº†mipmaps,就会使用它们,并为生æˆçš„图åƒç”Ÿæˆä¸€ç»„æ–°çš„"
-"mipmaps."
+"在两个最适åˆçš„mipmap级别上分别执行åŒçº¿æ€§ï¼Œç„¶åŽåœ¨å®ƒä»¬ä¹‹é—´è¿›è¡Œçº¿æ€§æ’值。\n"
+"它比[constant INTERPOLATE_BILINEAR]慢,但能产生更高质é‡çš„æ•ˆæžœï¼Œå‡å°‘锯齿伪"
+"影。\n"
+"å¦‚æžœå›¾åƒæ²¡æœ‰mipmaps,它们将被生æˆå¹¶åœ¨å†…部使用,但ä¸ä¼šåœ¨ç”Ÿæˆçš„图åƒä¹‹ä¸Šç”Ÿæˆ"
+"mipmaps。\n"
+"[b]注æ„:[/b] 如果你打算缩放原始图åƒçš„多个副本,最好事先对其调用[method "
+"generate_mipmaps],以é¿å…在生æˆå®ƒä»¬æ—¶å夿µªè´¹å¤„ç†èƒ½åŠ›ã€‚\n"
+"å¦ä¸€æ–¹é¢ï¼Œå¦‚果图åƒå·²ç»æœ‰äº†mipmaps,其将被使用,并为生æˆçš„图åƒç”Ÿæˆæ–°çš„一组。"
-#: doc/classes/Image.xml:570
+#: doc/classes/Image.xml:571
msgid ""
"Performs Lanczos interpolation. This is the slowest image resizing mode, but "
"it typically gives the best results, especially when downscalng images."
@@ -34071,58 +34905,57 @@ msgstr ""
"执行Lanczosæ’值.这是最慢的图åƒè°ƒæ•´å¤§å°æ¨¡å¼,但通常å¯ä»¥æä¾›æœ€ä½³æ•ˆæžœ,尤其是在缩"
"å°å›¾åƒæ—¶."
-#: doc/classes/Image.xml:573
+#: doc/classes/Image.xml:574
msgid "Image does not have alpha."
msgstr "图片没有Alpha通é“."
-#: doc/classes/Image.xml:576
+#: doc/classes/Image.xml:577
msgid "Image stores alpha in a single bit."
msgstr "图åƒå°†Alpha存储在å•个bit中."
-#: doc/classes/Image.xml:579
+#: doc/classes/Image.xml:580
msgid "Image uses alpha."
msgstr "图åƒä½¿ç”¨é˜¿å°”法。"
-#: doc/classes/Image.xml:582
+#: doc/classes/Image.xml:583
msgid "Use S3TC compression."
msgstr "使用S3TC压缩。"
-#: doc/classes/Image.xml:585
+#: doc/classes/Image.xml:586
msgid "Use PVRTC2 compression."
msgstr "使用PVRTC2压缩。"
-#: doc/classes/Image.xml:588
+#: doc/classes/Image.xml:589
msgid "Use PVRTC4 compression."
msgstr "使用PVRTC4压缩。"
-#: doc/classes/Image.xml:591
+#: doc/classes/Image.xml:592
msgid "Use ETC compression."
msgstr "使用ETC压缩。"
-#: doc/classes/Image.xml:594
+#: doc/classes/Image.xml:595
msgid "Use ETC2 compression."
msgstr "使用 ETC2 压缩。"
-#: doc/classes/Image.xml:597
+#: doc/classes/Image.xml:598
msgid ""
"Source texture (before compression) is a regular texture. Default for all "
"textures."
msgstr "原始纹ç†ï¼ˆåœ¨åŽ‹ç¼©å‰ï¼‰æ˜¯å¸¸è§„纹ç†ã€‚所有纹ç†çš„默认值。"
-#: doc/classes/Image.xml:600
+#: doc/classes/Image.xml:601
msgid "Source texture (before compression) is in sRGB space."
msgstr "原始纹ç†ï¼ˆåœ¨åŽ‹ç¼©å‰ï¼‰ä½¿ç”¨ sRGB 空间。"
-#: doc/classes/Image.xml:603
+#: doc/classes/Image.xml:604
msgid ""
"Source texture (before compression) is a normal texture (e.g. it can be "
"compressed into two channels)."
msgstr "原始纹ç†ï¼ˆåœ¨åŽ‹ç¼©å‰ï¼‰æ˜¯æ³•线纹ç†ï¼ˆä¾‹å¦‚,å¯ä»¥åŽ‹ç¼©ä¸ºä¸¤ä¸ªé€šé“)。"
#: doc/classes/ImageTexture.xml:4
-#, fuzzy
msgid "A [Texture] based on an [Image]."
-msgstr "基于 [Image] 的 [Texture2D]。"
+msgstr "基于 [Image]图片的 [Texture2D]纹ç†ã€‚"
#: doc/classes/ImageTexture.xml:7
msgid ""
@@ -34165,6 +34998,36 @@ msgid ""
"[b]Note:[/b] The maximum texture size is 16384×16384 pixels due to graphics "
"hardware limitations."
msgstr ""
+"基于图片的纹ç†ï¼Œè¦æ˜¾ç¤ºä¸€ä¸ªå›¾ç‰‡ï¼Œå¿…须使用 [method create_from_image] 方法æ¥åˆ›"
+"建一个 [ImageTexture] å›¾ç‰‡çº¹ç†æ•°æ®:\n"
+"[codeblock]\n"
+"var texture = ImageTexture.new()\n"
+"var image = Image.new()\n"
+"image.load(\"res://icon.png\")\n"
+"texture.create_from_image(image)\n"
+"$Sprite.texture = texture\n"
+"[/codeblock]\n"
+"é€šè¿‡è¿™ç§æ–¹å¼ï¼Œå¯ä»¥åœ¨è¿è¡Œæ—¶é€šè¿‡ä»Žç¼–è¾‘å™¨å†…éƒ¨å’Œå¤–éƒ¨åŠ è½½å›¾åƒæ¥åˆ›å»ºçº¹ç†ã€‚\n"
+"[b]警告:[/b] 最好用 [method @GDScript.load] 加载导入的纹ç†ï¼Œè€Œä¸æ˜¯ä½¿ç”¨ "
+"[method Image.load] 从文件系统中动æ€åŠ è½½å®ƒä»¬ï¼Œå› ä¸ºå®ƒå¯èƒ½æ— æ³•在导出的项目中工"
+"作:\n"
+"[codeblock]\n"
+"var texture = load(\"res://icon.png\")\n"
+"$Sprite.texture = texture\n"
+"[/codeblock]\n"
+"这是因为图åƒå¿…须首先作为 [StreamTexture] 导入æ‰èƒ½ä½¿ç”¨ [method @GDScript."
+"load] 加载。如果您ä»ç„¶æƒ³åƒä»»ä½•å…¶ä»– [Resource] ä¸€æ ·åŠ è½½å›¾åƒæ–‡ä»¶ï¼Œè¯·å°†å…¶ä½œä¸º "
+"[Image] 资æºå¯¼å…¥ï¼Œç„¶åŽä½¿ç”¨ [method @GDScript.load] 方法正常加载它。\n"
+"但请注æ„,ä»ç„¶å¯ä»¥ä½¿ç”¨ [method Texture.get_data] 方法从导入的纹ç†ä¸­æ£€ç´¢å›¾åƒæ•°"
+"æ®ï¼Œè¯¥æ–¹æ³•返回数æ®çš„副本:\n"
+"[codeblock]\n"
+"var texture = load(\"res://icon.png\")\n"
+"var image : Image = texture.get_data()\n"
+"[/codeblock]\n"
+"[ImageTexture] 䏿˜¯ç›´æŽ¥åœ¨ç¼–辑器界é¢ä¸­æ“作的,主è¦ç”¨äºŽé€šè¿‡ä»£ç åœ¨å±å¹•ä¸ŠåŠ¨æ€æ¸²æŸ“"
+"图åƒã€‚如果您需è¦åœ¨ç¼–辑器中按程åºç”Ÿæˆå›¾åƒï¼Œè¯·è€ƒè™‘将图åƒä¿å­˜å’Œå¯¼å…¥ä¸ºè‡ªå®šä¹‰çº¹ç†"
+"资æºï¼Œä»¥å®žçŽ°æ–°çš„ [EditorImportPlugin]。\n"
+"[b]注æ„:[/b]由于图形硬件é™åˆ¶ï¼Œæœ€å¤§çº¹ç†å°ºå¯¸ä¸º16384×16384åƒç´ ã€‚"
#: doc/classes/ImageTexture.xml:41
msgid ""
@@ -34173,6 +35036,9 @@ msgid ""
"[code]format[/code] is a value from [enum Image.Format], [code]flags[/code] "
"is any combination of [enum Texture.Flags]."
msgstr ""
+"创建具有[code]width[/code]和[code]height[/code]的新[ImageTexture]。\n"
+"[code]format[/code]是[enum Image.Format]中的一个值,[code]flags[/code]是"
+"[enum Texture.Flags]的任æ„组åˆã€‚"
#: doc/classes/ImageTexture.xml:50
msgid ""
@@ -34180,11 +35046,13 @@ msgid ""
"with [code]flags[/code] from [enum Texture.Flags]. An sRGB to linear color "
"space conversion can take place, according to [enum Image.Format]."
msgstr ""
+"通过使用 [enum Texture.Flags] 中的 [code]flags[/code] 分é…和设置æ¥è‡ª [Image] "
+"çš„æ•°æ®æ¥åˆå§‹åŒ–纹ç†ã€‚æ ¹æ® [enum Image.Format],å¯ä»¥è¿›è¡Œ sRGB 到线性颜色空间的"
+"转æ¢ã€‚"
#: doc/classes/ImageTexture.xml:56
-#, fuzzy
msgid "Returns the format of the texture, one of [enum Image.Format]."
-msgstr "返回 [ImageTexture] 的格å¼ï¼Œæ˜¯ [enum Image.Format] 中的一个。"
+msgstr "返回纹ç†çš„æ ¼å¼ï¼Œ[enum Image.Format] 之一。"
#: doc/classes/ImageTexture.xml:63
msgid ""
@@ -34192,6 +35060,9 @@ msgid ""
"[b]Note:[/b] This method is deprecated and will be removed in Godot 4.0, use "
"[method Image.load] and [method create_from_image] instead."
msgstr ""
+"从文件路径加载图åƒ,并从中创建一个纹ç†å›¾ç‰‡ã€‚\n"
+"[b]注释:[/b]:该方法已被废弃,并将在Godot 4.0中被删除,请建议使用Image.load()和"
+"create_from_image()代替。"
#: doc/classes/ImageTexture.xml:71
msgid ""
@@ -34205,41 +35076,45 @@ msgid ""
"texture frequently, which is faster than allocating additional memory for a "
"new texture each time."
msgstr ""
+"用新的 [Image] 替æ¢çº¹ç†çš„æ•°æ®ã€‚\n"
+"[b]注æ„:[/b]纹ç†å¿…须先用[method create_from_image]方法åˆå§‹åŒ–ï¼Œç„¶åŽæ‰èƒ½æ›´æ–°ã€‚"
+"新的图åƒå°ºå¯¸ã€æ ¼å¼å’Œ mipmap é…置应与现有纹ç†çš„图åƒé…置相匹é…,å¦åˆ™å¿…须使用 "
+"[method create_from_image] æ–¹æ³•é‡æ–°åˆ›å»ºã€‚\n"
+"如果需è¦é¢‘ç¹æ›´æ–°çº¹ç†ï¼Œè¯·åœ¨ [method create_from_image] ä¸Šä½¿ç”¨æ­¤æ–¹æ³•ï¼Œè¿™æ¯”æ¯æ¬¡"
+"为新纹ç†åˆ†é…é¢å¤–内存è¦å¿«ã€‚"
#: doc/classes/ImageTexture.xml:80 doc/classes/VisualServer.xml:2837
-#, fuzzy
msgid "Resizes the texture to the specified dimensions."
-msgstr "å°† [ImageTexture] 调整为指定的大å°ã€‚"
+msgstr "将纹ç†çš„大å°è°ƒæ•´ä¸ºæŒ‡å®šçš„尺寸。"
#: doc/classes/ImageTexture.xml:87
msgid "The storage quality for [constant STORAGE_COMPRESS_LOSSY]."
msgstr "[constant STORAGE_COMPRESS_LOSSY]的存储质é‡ã€‚"
#: doc/classes/ImageTexture.xml:90
-#, fuzzy
msgid "The storage type (raw, lossy, or compressed)."
-msgstr "按钮被按下的状æ€ã€‚"
+msgstr "存储类型,å³åŽŸå§‹ã€æœ‰æŸã€æˆ–压缩。"
#: doc/classes/ImageTexture.xml:95
msgid "[Image] data is stored raw and unaltered."
-msgstr ""
+msgstr "[Image] 图åƒçš„原始储存数æ®ã€‚"
#: doc/classes/ImageTexture.xml:98
msgid ""
"[Image] data is compressed with a lossy algorithm. You can set the storage "
"quality with [member lossy_quality]."
msgstr ""
+"[Image]æ•°æ®æ˜¯ç”¨æœ‰æŸç®—法压缩的。 ä½ å¯ä»¥ç”¨[member lossy_quality]设置存储质é‡ã€‚"
#: doc/classes/ImageTexture.xml:101
msgid "[Image] data is compressed with a lossless algorithm."
-msgstr ""
+msgstr "[Image]æ•°æ®æ˜¯ç”¨æ— æŸç®—法压缩的。"
#: doc/classes/ImmediateGeometry.xml:4
msgid "Draws simple geometry from code."
msgstr "通过代ç ç»˜åˆ¶ç®€å•的几何形状。"
#: doc/classes/ImmediateGeometry.xml:7
-#, fuzzy
msgid ""
"Draws simple geometry from code. Uses a drawing mode similar to OpenGL 1.x.\n"
"See also [ArrayMesh], [MeshDataTool] and [SurfaceTool] for procedural "
@@ -34255,14 +35130,16 @@ msgid ""
"data, try increasing its buffer size limit under [member ProjectSettings."
"rendering/limits/buffers/immediate_buffer_size_kb]."
msgstr ""
-"通过代ç ç»˜åˆ¶ç®€å•的几何形状。使用类似于OpenGL 1.x.的绘制方å¼ã€‚\n"
-"关于几何形状的程åºåŒ–构建,å‚阅 [ArrayMesh],[MeshDataTool] ä»¥åŠ "
-"[SurfaceTool]。\n"
-"[b]注æ„:[/b] ImmediateGeometry3D 最适用于æ¯å¸§å˜åŒ–的少é‡ç½‘格数æ®ã€‚如果处ç†å¤§"
-"é‡ç½‘格数æ®å°†ä¼šå˜æ…¢ã€‚如果网格数æ®ä¸éœ€è¦ç»å¸¸å˜åŒ–,使用[ArrayMesh],"
-"[MeshDataTool] 或者 [SurfaceTool] 代替。\n"
-"[b]注æ„:[/b] 对于三角形基本模å¼çš„æ­£é¢ï¼ŒGodot使用顺时针[url=https://"
-"learnopengl.com/Advanced-OpenGL/Face-culling]缠绕顺åº[/url]。"
+"从代ç ä¸­ç»˜åˆ¶ç®€å•的几何图形。使用类似于OpenGL 1.x的绘制模å¼ã€‚\n"
+"请å‚阅[ArrayMesh]ã€[MeshDataTool]å’Œ[SurfaceTool]ï¼Œäº†è§£ç¨‹åºæ€§å‡ ä½•体的生æˆã€‚\n"
+"[b]注æ„:[/b] ImmediateGeometry3D最适åˆå¤„ç†æ¯ä¸€å¸§å˜åŒ–的少é‡ç½‘格数æ®ã€‚当处ç†å¤§"
+"é‡çš„ç½‘æ ¼æ•°æ®æ—¶ï¼Œå®ƒå°†ä¼šå¾ˆæ…¢ã€‚如果网格数æ®ä¸ç»å¸¸å˜åŒ–,请使用[ArrayMesh]ã€"
+"[MeshDataTool]或[SurfaceTool]代替。\n"
+"[b]注æ„:[/b] Godot对三角形基本å•元模å¼çš„æ­£é¢ä½¿ç”¨é¡ºæ—¶é’ˆ[url=https://"
+"learnopengl.com/Advanced-OpenGL/Face-culling]缠绕顺åº[/url]。\n"
+"[b]注æ„:[/b] 在处ç†å¤§é‡ç½‘æ ¼æ•°æ®æ—¶ï¼Œå¦‚果出现æ¼ç‚¹ï¼Œå¯ä»¥å°è¯•在[member "
+"ProjectSettings.rendering/limits/buffers/immediate_buffer_size_kb]增加其缓冲"
+"区大å°é™åˆ¶ã€‚"
#: doc/classes/ImmediateGeometry.xml:23
msgid ""
@@ -34330,7 +35207,7 @@ msgstr ""
#: doc/classes/Input.xml:10
msgid "https://docs.godotengine.org/en/3.4/tutorials/inputs/index.html"
-msgstr "https://docs.godotengine.org/en/3.4/tutorials/inputs/index.html"
+msgstr "https://docs.godotengine.org/zh_CN/stable/tutorials/inputs/index.html"
#: doc/classes/Input.xml:20
msgid ""
@@ -34360,6 +35237,23 @@ msgstr "在映射数æ®åº“中添加新的映射æ¡ç›®ï¼ˆSDL2 æ ¼å¼ï¼‰ã€‚å¯é€‰æ
#: doc/classes/Input.xml:43
msgid ""
+"Sends all input events which are in the current buffer to the game loop. "
+"These events may have been buffered as a result of accumulated input "
+"([method set_use_accumulated_input]) or agile input flushing ([member "
+"ProjectSettings.input_devices/buffering/agile_event_flushing]).\n"
+"The engine will already do this itself at key execution points (at least "
+"once per frame). However, this can be useful in advanced cases where you "
+"want precise control over the timing of event handling."
+msgstr ""
+"将当å‰ç¼“冲区内的所有输入事件å‘é€ç»™æ¸¸æˆå¾ªçŽ¯ã€‚è¿™äº›äº‹ä»¶å¯èƒ½æ˜¯ç”±äºŽç´¯ç§¯è¾“å…¥"
+"([method set_use_accumulated_input]ï¼‰æˆ–æ•æ·è¾“入刷新([member "
+"ProjectSettings.input_devices/buffering/agile_event_flushing])而被缓冲的结"
+"果。\n"
+"引擎已ç»ä¼šåœ¨å…³é”®çš„æ‰§è¡Œç‚¹æ‰§è¡Œæ­¤æ“作,至少æ¯å¸§ä¸€æ¬¡ã€‚然而,在你想è¦ç²¾ç¡®æŽ§åˆ¶äº‹ä»¶"
+"å¤„ç†æ—¶é—´çš„高级情况下,这å¯èƒ½æ˜¯æœ‰ç”¨çš„。"
+
+#: doc/classes/Input.xml:50
+msgid ""
"Returns the acceleration of the device's accelerometer sensor, if the device "
"has one. Otherwise, the method returns [constant Vector3.ZERO].\n"
"Note this method returns an empty [Vector3] when running from the editor "
@@ -34370,8 +35264,15 @@ msgid ""
"measurement for each axis is m/s² while on iOS and UWP it's a multiple of "
"the Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
+"如果设备有加速度传感器,则返回设备的加速度。å¦åˆ™ï¼Œè¯¥æ–¹æ³•返回[constant "
+"Vector3.ZERO]。\n"
+"请注æ„,å³ä½¿ä½ çš„设备有一个加速度计,当从编辑器è¿è¡Œæ—¶ï¼Œè¯¥æ–¹æ³•也会返回一个空的"
+"[Vector3]。你必须将项目导出到一个支æŒçš„è®¾å¤‡ä¸Šï¼Œä»¥ä¾¿ä»ŽåŠ é€Ÿåº¦è®¡ä¸Šè¯»å–æ•°å€¼ã€‚\n"
+"[b]注æ„:[/b] 这个方法åªåœ¨iOSã€Androidå’ŒUWP上工作。在其他平å°ä¸Šï¼Œå®ƒæ€»æ˜¯è¿”回"
+"[constant Vector3.ZERO]。在Android上,æ¯ä¸ªè½´çš„æµ‹é‡å•使˜¯m/s²,而在iOSå’ŒUWP"
+"上,它是地çƒé‡åŠ›åŠ é€Ÿåº¦çš„å€æ•°[code]g[/code](~9.81 m/s²)。"
-#: doc/classes/Input.xml:53
+#: doc/classes/Input.xml:60
msgid ""
"Returns a value between 0 and 1 representing the raw intensity of the given "
"action, ignoring the action's deadzone. In most cases, you should use "
@@ -34380,9 +35281,13 @@ msgid ""
"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
"for [InputEventJoypadMotion] events."
msgstr ""
+"返回介于0和1之间的值,代表给定动作的原始强度,忽略动作的死区。在大多数情况"
+"下,你应该使用[method get_action_strength]æ¥ä»£æ›¿ã€‚\n"
+"如果[code]exact[/code]是[code]false[/code],它将忽略[InputEventKey]和"
+"[InputEventMouseButton]事件的输入修饰符,以åŠ[InputEventJoypadMotion]事件的方"
+"å‘。"
-#: doc/classes/Input.xml:62
-#, fuzzy
+#: doc/classes/Input.xml:69
msgid ""
"Returns a value between 0 and 1 representing the intensity of the given "
"action. In a joypad, for example, the further away the axis (analog sticks "
@@ -34393,29 +35298,35 @@ msgid ""
"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
"for [InputEventJoypadMotion] events."
msgstr ""
-"返回一个介于0å’Œ1ä¹‹é—´çš„å€¼ï¼Œä»£è¡¨ç»™å®šåŠ¨ä½œçš„å¼ºåº¦ã€‚ä»¥æ¸¸æˆæ‰‹æŸ„为例,推动轴(模拟摇"
-"æ†æˆ–L2ã€R2触å‘器)离盲区(dead zone)越远,数值就越接近1。如果动作被映射到一个"
-"没有轴作为控件的键盘,返回数值将是0或1。"
+"返回介于0å’Œ1之间的值,代表给定动作的强度。例如,在一个æ“纵æ¿ä¸Šï¼Œè½´ï¼ˆæ¨¡æ‹Ÿæ†æˆ–"
+"L2ã€R2触å‘器)离死区越远,数值就越接近1。如果动作被映射到一个没有轴作为键盘的"
+"控件上,返回的数值将是0或1。\n"
+"如果[code]exact[/code]是[code]false[/code],它将忽略[InputEventKey]和"
+"[InputEventMouseButton]事件的输入修饰符,以åŠ[InputEventJoypadMotion]事件的方"
+"å‘。"
-#: doc/classes/Input.xml:71
+#: doc/classes/Input.xml:78
msgid ""
"Get axis input by specifying two actions, one negative and one positive.\n"
"This is a shorthand for writing [code]Input."
"get_action_strength(\"positive_action\") - Input."
"get_action_strength(\"negative_action\")[/code]."
msgstr ""
+"通过指定两个动作æ¥èŽ·å–轴的输入,一个是负的,一个是正的。\n"
+"这是写[code]Input.get_action_strength(\"positive_action\")-Input."
+"get_action_strength(\"negative_action\")[/code]的简写。"
-#: doc/classes/Input.xml:78
+#: doc/classes/Input.xml:85
msgid ""
"Returns an [Array] containing the device IDs of all currently connected "
"joypads."
msgstr "返回一个 [Array],包å«å½“剿‰€æœ‰è¿žæŽ¥æ‰‹æŸ„的设备 ID。"
-#: doc/classes/Input.xml:84
+#: doc/classes/Input.xml:91
msgid "Returns the currently assigned cursor shape (see [enum CursorShape])."
msgstr "è¿”å›žå½“å‰æŒ‡å®šçš„光标形状(å‚阅 [enum CursorShape])。"
-#: doc/classes/Input.xml:90
+#: doc/classes/Input.xml:97
msgid ""
"Returns the gravity of the device's accelerometer sensor, if the device has "
"one. Otherwise, the method returns [constant Vector3.ZERO].\n"
@@ -34424,8 +35335,13 @@ msgid ""
"measurement for each axis is m/s² while on iOS it's a multiple of the "
"Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
+"如果设备有加速度传感器,则返回设备的é‡åŠ›ã€‚å¦åˆ™ï¼Œè¯¥æ–¹æ³•返回[constant Vector3."
+"ZERO]。\n"
+"[b]注æ„:[/b] 这个方法åªåœ¨Androidå’ŒiOS上工作。在其他平å°ä¸Šï¼Œå®ƒæ€»æ˜¯è¿”回"
+"[constant Vector3.ZERO]。在Android上,æ¯ä¸ªè½´çš„æµ‹é‡å•使˜¯m/s²,而在iOS上,它是"
+"地çƒé‡åŠ›åŠ é€Ÿåº¦çš„å€æ•°[code]g[/code](~9.81 m/s²)。"
-#: doc/classes/Input.xml:97
+#: doc/classes/Input.xml:104
msgid ""
"Returns the rotation rate in rad/s around a device's X, Y, and Z axes of the "
"gyroscope sensor, if the device has one. Otherwise, the method returns "
@@ -34433,38 +35349,39 @@ msgid ""
"[b]Note:[/b] This method only works on Android and iOS. On other platforms, "
"it always returns [constant Vector3.ZERO]."
msgstr ""
+"如果设备有陀螺仪传感器,则返回围绕设备Xã€Yã€Z轴的旋转速率,å•ä½ä¸ºrad/s。å¦"
+"则,该方法返回[constant Vector3.ZERO]。\n"
+"[b]注æ„:[/b] 这个方法åªåœ¨Androidå’ŒiOS上工作。在其他平å°ä¸Šï¼Œæ€»æ˜¯è¿”回"
+"[constant Vector3.ZERO]。"
-#: doc/classes/Input.xml:106
-#, fuzzy
+#: doc/classes/Input.xml:113
msgid ""
"Returns the current value of the joypad axis at given index (see [enum "
"JoystickList])."
-msgstr "返回给定索引处的手柄(joypad)轴的当å‰å€¼ï¼ˆå‚阅 [enum JoyAxisList])。"
+msgstr "è¿”å›žç»™å®šç´¢å¼•çš„æ¸¸æˆæ‰‹æŸ„轴的当å‰å€¼ï¼Œå‚阅[enum JoystickList]。"
-#: doc/classes/Input.xml:113
+#: doc/classes/Input.xml:120
msgid "Returns the index of the provided axis name."
msgstr "返回æä¾›çš„è½´å称的索引。"
-#: doc/classes/Input.xml:120
+#: doc/classes/Input.xml:127
msgid ""
"Receives a [enum JoystickList] axis and returns its equivalent name as a "
"string."
msgstr "接收一个[enum JoyAxisList]轴,并以字符串形å¼è¿”回其对应的å称。"
-#: doc/classes/Input.xml:127
+#: doc/classes/Input.xml:134
msgid "Returns the index of the provided button name."
msgstr "返回所æä¾›çš„æŒ‰é’®å称的索引。"
-#: doc/classes/Input.xml:134
-#, fuzzy
+#: doc/classes/Input.xml:141
msgid ""
"Receives a gamepad button from [enum JoystickList] and returns its "
"equivalent name as a string."
msgstr ""
-"从[enum JoyButtonList]ä¸­æŽ¥æ”¶ä¸€ä¸ªæ¸¸æˆæ‰‹æŸ„(gamepad)按钮,并以字符串形å¼è¿”回其对"
-"应的å称。"
+"从[enum JoystickList]ä¸­æŽ¥æ”¶æ¸¸æˆæ‰‹æŸ„按钮,并将其对应的å称作为一个字符串返回。"
-#: doc/classes/Input.xml:141
+#: doc/classes/Input.xml:148
msgid ""
"Returns a SDL2-compatible device GUID on platforms that use gamepad "
"remapping. Returns [code]\"Default Gamepad\"[/code] otherwise."
@@ -34472,21 +35389,21 @@ msgstr ""
"åœ¨ä½¿ç”¨æ¸¸æˆæ‰‹æŸ„釿˜ å°„的平å°ä¸Šè¿”回一个SDL2兼容的设备GUID。å¦åˆ™è¿”回"
"[code]\"Default Gamepad\"[/code]é»˜è®¤æ¸¸æˆæ‰‹æŸ„。"
-#: doc/classes/Input.xml:148
+#: doc/classes/Input.xml:155
msgid "Returns the name of the joypad at the specified device index."
msgstr "返回指定设备索引处的手柄å称。"
-#: doc/classes/Input.xml:155
+#: doc/classes/Input.xml:162
msgid "Returns the duration of the current vibration effect in seconds."
msgstr "以秒为å•ä½è¿”å›žå½“å‰æŒ¯åŠ¨æ•ˆæžœçš„æŒç»­æ—¶é—´ã€‚"
-#: doc/classes/Input.xml:162
+#: doc/classes/Input.xml:169
msgid ""
"Returns the strength of the joypad vibration: x is the strength of the weak "
"motor, and y is the strength of the strong motor."
msgstr "返回手柄振动的强度:x 是弱马达的强度,y 是强马达的强度。"
-#: doc/classes/Input.xml:168
+#: doc/classes/Input.xml:175
msgid ""
"Returns the mouse speed for the last time the cursor was moved, and this "
"until the next frame where the mouse moves. This means that even if the "
@@ -34496,7 +35413,7 @@ msgstr ""
"返回光标最åŽä¸€æ¬¡è¢«ç§»åŠ¨æ—¶çš„é¼ æ ‡é€Ÿåº¦ï¼Œå¹¶ä¸”è¿™ä¸ªé€Ÿåº¦ä¿æŒä¸å˜ï¼Œç›´åˆ°é¼ æ ‡å‘生了移动"
"的下一帧。这æ„味ç€ï¼Œå³ä½¿é¼ æ ‡æ²¡æœ‰ç§»åŠ¨ï¼Œè¿™ä¸ªå‡½æ•°ä»ç„¶ä¼šè¿”回最åŽä¸€æ¬¡è¿åŠ¨çš„å€¼ã€‚"
-#: doc/classes/Input.xml:174
+#: doc/classes/Input.xml:181
msgid ""
"Returns the magnetic field strength in micro-Tesla for all axes of the "
"device's magnetometer sensor, if the device has one. Otherwise, the method "
@@ -34504,8 +35421,12 @@ msgid ""
"[b]Note:[/b] This method only works on Android, iOS and UWP. On other "
"platforms, it always returns [constant Vector3.ZERO]."
msgstr ""
+"如果设备有ç£åŠ›ä¼ æ„Ÿå™¨ï¼Œåˆ™è¿”å›žè®¾å¤‡æ‰€æœ‰è½´çš„ç£åœºå¼ºåº¦ï¼Œå¾®ç‰¹æ–¯æ‹‰ã€‚å¦åˆ™ï¼Œè¯¥æ–¹æ³•返回"
+"[constant Vector3.ZERO]。\n"
+"[b]注æ„:[/b] 这个方法åªåœ¨Androidã€iOSå’ŒUWP上有效。在其他平å°ä¸Šï¼Œæ€»æ˜¯è¿”回"
+"[constant Vector3.ZERO]。"
-#: doc/classes/Input.xml:181
+#: doc/classes/Input.xml:188
msgid ""
"Returns mouse buttons as a bitmask. If multiple mouse buttons are pressed at "
"the same time, the bits are added together."
@@ -34513,11 +35434,11 @@ msgstr ""
"将鼠标按键作为一个比特掩ç è¿”å›žã€‚å¦‚æžœå¤šä¸ªé¼ æ ‡æŒ‰é’®åŒæ—¶è¢«æŒ‰ä¸‹ï¼Œè¿™äº›ä½ä¼šè¢«åŠ åœ¨ä¸€"
"起。"
-#: doc/classes/Input.xml:187
+#: doc/classes/Input.xml:194
msgid "Returns the mouse mode. See the constants for more information."
msgstr "返回鼠标模å¼ã€‚有关更多信æ¯ï¼Œè¯·å‚阅常é‡ã€‚"
-#: doc/classes/Input.xml:198
+#: doc/classes/Input.xml:205
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -34529,9 +35450,13 @@ msgid ""
"action deadzones. However, you can override the deadzone to be whatever you "
"want (on the range of 0 to 1)."
msgstr ""
+"通过指定正负Xå’ŒY轴的四个动作æ¥èŽ·å–å‘é‡çŸ¢é‡ã€‚\n"
+"这个方法在获å–å‘é‡è¾“入时很有用,比如从æ“纵æ†ã€æ–¹å‘盘ã€ç®­å¤´æˆ–WASD。å‘é‡çš„长度"
+"被é™åˆ¶ä¸º1,并且有一个圆形的死区,这对于使用å‘é‡è¾“入进行è¿åŠ¨å¾ˆæœ‰ç”¨ã€‚\n"
+"默认情况下,死区根æ®åŠ¨ä½œæ­»åŒºçš„å¹³å‡å€¼è‡ªåŠ¨è®¡ç®—ã€‚ç„¶è€Œï¼Œä½ å¯ä»¥è¦†ç›–死区,获得你想"
+"è¦çš„,注,在0到1的范围内。"
-#: doc/classes/Input.xml:208
-#, fuzzy
+#: doc/classes/Input.xml:215
msgid ""
"Returns [code]true[/code] when the user starts pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user pressed down "
@@ -34542,13 +35467,15 @@ msgid ""
"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
"for [InputEventJoypadMotion] events."
msgstr ""
-"当用户开始按下动作事件时,返回[code]true[/code],è¿™æ„味ç€ä»…当用户按下按钮的帧"
-"上æ‰è¿”回[code]true[/code].\n"
-"这对于在按下æŸä¸ªåŠ¨ä½œæ—¶åªéœ€è¦è¿è¡Œä¸€æ¬¡ï¼Œè€Œä¸æ˜¯åœ¨æŒ‰ä¸‹æ—¶çš„æ¯ä¸€å¸§ä¸­è¿è¡Œçš„代ç å¾ˆæœ‰"
-"用。"
+"当用户开始按下动作事件时,返回[code]true[/code]ï¼Œä¹Ÿå°±æ˜¯è¯´ï¼Œåªæœ‰åœ¨ç”¨æˆ·æŒ‰ä¸‹æŒ‰é’®"
+"çš„é‚£ä¸€å¸§æ‰æ˜¯[code]true[/code]。\n"
+"这对那些åªéœ€è¦åœ¨åŠ¨ä½œè¢«æŒ‰ä¸‹æ—¶è¿è¡Œä¸€æ¬¡çš„代ç ä¸­å¾ˆæœ‰ç”¨ï¼Œè€Œä¸æ˜¯åœ¨æŒ‰ä¸‹æ—¶æ¯ä¸€å¸§éƒ½è¦"
+"è¿è¡Œã€‚\n"
+"如果[code]exact[/code]是[code]false[/code],它将忽略[InputEventKey]和"
+"[InputEventMouseButton]事件的输入修饰符,以åŠ[InputEventJoypadMotion]事件的方"
+"å‘。"
-#: doc/classes/Input.xml:218
-#, fuzzy
+#: doc/classes/Input.xml:225
msgid ""
"Returns [code]true[/code] when the user stops pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user released the "
@@ -34557,13 +35484,13 @@ msgid ""
"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
"for [InputEventJoypadMotion] events."
msgstr ""
-"当用户开始按下动作事件时,返回[code]true[/code],è¿™æ„味ç€ä»…当用户按下按钮的帧"
-"上æ‰è¿”回[code]true[/code].\n"
-"这对于在按下æŸä¸ªåŠ¨ä½œæ—¶åªéœ€è¦è¿è¡Œä¸€æ¬¡ï¼Œè€Œä¸æ˜¯åœ¨æŒ‰ä¸‹æ—¶çš„æ¯ä¸€å¸§ä¸­è¿è¡Œçš„代ç å¾ˆæœ‰"
-"用。"
+"å½“ç”¨æˆ·åœæ­¢æŒ‰ä¸‹åŠ¨ä½œäº‹ä»¶æ—¶ï¼Œè¿”å›ž[code]true[/code]ï¼Œä¹Ÿå°±æ˜¯è¯´ï¼Œåªæœ‰åœ¨ç”¨æˆ·é‡Šæ”¾æŒ‰é’®"
+"çš„é‚£ä¸€å¸§æ‰æ˜¯[code]true[/code]。\n"
+"如果[code]exact[/code]是[code]false[/code],它将忽略[InputEventKey]和"
+"[InputEventMouseButton]事件的输入修饰符,以åŠ[InputEventJoypadMotion]事件的方"
+"å‘。"
-#: doc/classes/Input.xml:227
-#, fuzzy
+#: doc/classes/Input.xml:234
msgid ""
"Returns [code]true[/code] if you are pressing the action event. Note that if "
"an action has multiple buttons assigned and more than one of them is "
@@ -34573,45 +35500,45 @@ msgid ""
"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
"for [InputEventJoypadMotion] events."
msgstr ""
-"如果您按下动作事件,则返回[code]true[/code]。请注æ„,如果为一个动作分é…了多个按"
-"钮,并且按下了多个按钮,那么å³ä½¿ä»ç„¶æŒ‰ä¸‹åˆ†é…给该动作的æŸä¸ªå…¶ä»–按钮,释放一个按"
-"钮也将释放该动作。"
+"如果你正在按下动作事件,返回[code]true[/code]。请注æ„,如果一个动作有多个分é…"
+"çš„æŒ‰é’®ï¼Œå¹¶ä¸”ä¸æ­¢ä¸€ä¸ªè¢«æŒ‰ä¸‹ï¼Œé‡Šæ”¾ä¸€ä¸ªæŒ‰é’®å°†é‡Šæ”¾è¿™ä¸ªåŠ¨ä½œï¼Œå³ä½¿å…¶ä»–分é…给这个动"
+"作的按钮ä»ç„¶è¢«æŒ‰ä¸‹ã€‚\n"
+"如果[code]exact[/code]是[code]false[/code],它将忽略[InputEventKey]和"
+"[InputEventMouseButton]事件的输入修饰符,以åŠ[InputEventJoypadMotion]事件的方"
+"å‘。"
-#: doc/classes/Input.xml:236
-#, fuzzy
+#: doc/classes/Input.xml:243
msgid ""
"Returns [code]true[/code] if you are pressing the joypad button (see [enum "
"JoystickList])."
-msgstr "如果按下æ“çºµæ†æŒ‰é’®ï¼Œåˆ™è¿”回[code]true[/code](请å‚阅[JoystickList])。"
+msgstr ""
+"如果你正在按下手柄按钮,则返回[code]true[/code],å‚阅[enum JoystickList]。"
-#: doc/classes/Input.xml:243
-#, fuzzy
+#: doc/classes/Input.xml:250
msgid ""
"Returns [code]true[/code] if the system knows the specified device. This "
"means that it sets all button and axis indices exactly as defined in [enum "
"JoystickList]. Unknown joypads are not expected to match these constants, "
"but you can still retrieve events from them."
msgstr ""
-"å¦‚æžœç³»ç»ŸçŸ¥é“æŒ‡å®šçš„设备,则返回[code]true[/code]。这æ„味ç€å®ƒå°†å®Œå…¨æŒ‰ç…§"
-"JoystickListä¸­çš„å®šä¹‰è®¾ç½®æ‰€æœ‰æŒ‰é’®å’Œè½´ç´¢å¼•ã€‚æœªçŸ¥çš„æ¸¸æˆæ‰‹æŸ„ä¸å¸Œæœ›ä¸Žè¿™äº›å¸¸é‡åŒ¹"
-"é…,但是您ä»ç„¶å¯ä»¥ä»Žä¸­æ£€ç´¢äº‹ä»¶ã€‚"
+"å¦‚æžœç³»ç»ŸçŸ¥é“æŒ‡å®šçš„设备,则返回[code]true[/code]。这æ„味ç€å®ƒå°†å®Œå…¨æŒ‰ç…§[enum "
+"JoystickList]中的定义设置所有按钮和轴的索引。未知的æ“纵æ†å¯èƒ½ä¸ä¼šä¸Žè¿™äº›å¸¸æ•°ç›¸"
+"匹é…,但你ä»ç„¶å¯ä»¥ä»Žä¸­æ£€ç´¢äº‹ä»¶ã€‚"
-#: doc/classes/Input.xml:250
-#, fuzzy
+#: doc/classes/Input.xml:257
msgid ""
"Returns [code]true[/code] if you are pressing the key. You can pass a [enum "
"KeyList] constant."
msgstr ""
-"如果你按当å‰é”®ç›˜å¸ƒå±€ä¸­çš„键,则返回 [code]true[/code]。您å¯ä»¥ä¼ å…¥ [enum "
-"KeyList] 常é‡å‚数。"
+"如果你正在按压该键,则返回[code]true[/code]。你å¯ä»¥ä¼ é€’[enum KeyList]常é‡ã€‚"
-#: doc/classes/Input.xml:257
+#: doc/classes/Input.xml:264
msgid ""
"Returns [code]true[/code] if you are pressing the mouse button specified "
"with [enum ButtonList]."
msgstr "如果您按下由[ButtonList]指定的鼠标按键,则返回[code]true[/code]。"
-#: doc/classes/Input.xml:267
+#: doc/classes/Input.xml:274
msgid ""
"Notifies the [Input] singleton that a connection has changed, to update the "
"state for the [code]device[/code] index.\n"
@@ -34623,7 +35550,7 @@ msgstr ""
"这是内部使用的,ä¸å¿…从用户脚本中调用。有关内部触å‘的信å·,请å‚阅"
"[joy_connection_changed]。"
-#: doc/classes/Input.xml:275
+#: doc/classes/Input.xml:282
msgid ""
"Feeds an [InputEvent] to the game. Can be used to artificially trigger input "
"events from code. Also generates [method Node._input] calls.\n"
@@ -34635,8 +35562,8 @@ msgid ""
"Input.parse_input_event(a)\n"
"[/codeblock]"
msgstr ""
-"呿¸¸æˆæä¾›[InputEvent]。å¯ç”¨äºŽä»Žä»£ç ä¸­äººå·¥è§¦å‘输入事件。也会产生[Node."
-"_input()]调用。\n"
+"呿¸¸æˆæä¾› [InputEvent]。å¯ç”¨äºŽä»Žä»£ç äººä¸ºè§¦å‘输入事件。也会产生 [method Node."
+"_input()] 调用。\n"
"例:\n"
"[codeblock]\n"
"var a = InputEventAction.new()\n"
@@ -34645,12 +35572,24 @@ msgstr ""
"Input.parse_input_event(a)\n"
"[/codeblock]"
-#: doc/classes/Input.xml:289
+#: doc/classes/Input.xml:296
msgid ""
"Removes all mappings from the internal database that match the given GUID."
msgstr "从内部数æ®åº“中删除与给定GUID匹é…的所有映射."
-#: doc/classes/Input.xml:298
+#: doc/classes/Input.xml:303
+msgid ""
+"Sets the acceleration value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+"设置加速度传感器的加速度值。å¯ä»¥ç”¨äºŽåœ¨æ²¡æœ‰ç¡¬ä»¶ä¼ æ„Ÿå™¨çš„设备上进行调试,例如在"
+"PC上的编辑器中。\n"
+"[b]注æ„:[/b] 这个值在Androidå’ŒiOS上å¯ç«‹å³è¢«ç¡¬ä»¶ä¼ æ„Ÿå™¨çš„值所覆盖。"
+
+#: doc/classes/Input.xml:313
msgid ""
"Sets a custom mouse cursor image, which is only visible inside the game "
"window. The hotspot can also be specified. Passing [code]null[/code] to the "
@@ -34674,7 +35613,7 @@ msgstr ""
"[b]注æ„:[/b]仅支æŒä»¥[b]æ— æŸ[/b],[b]有æŸ[/b]或[b]未压缩[/b]压缩模å¼å¯¼å…¥çš„图"
"åƒã€‚[b]Video RAM[/b]压缩模å¼ä¸èƒ½ç”¨äºŽè‡ªå®šä¹‰å…‰æ ‡ã€‚"
-#: doc/classes/Input.xml:309
+#: doc/classes/Input.xml:324
msgid ""
"Sets the default cursor shape to be used in the viewport instead of "
"[constant CURSOR_ARROW].\n"
@@ -34688,11 +35627,47 @@ msgstr ""
"mouse_default_cursor_shape]。\n"
"[b]注æ„:[/b]这个方法生æˆä¸€ä¸ª[InputEventMouseMotion]ä»¥ç«‹å³æ›´æ–°æ¸¸æ ‡ã€‚"
-#: doc/classes/Input.xml:318
+#: doc/classes/Input.xml:333
+msgid ""
+"Sets the gravity value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+"设置加速度传感器的é‡åŠ›å€¼ã€‚å¯ç”¨äºŽåœ¨æ²¡æœ‰ç¡¬ä»¶ä¼ æ„Ÿå™¨çš„设备上进行调试,例如在PC上"
+"的编辑器中。\n"
+"[b]注æ„:[/b] 这个值在Androidå’ŒiOS上å¯ç«‹å³è¢«ç¡¬ä»¶ä¼ æ„Ÿå™¨çš„值覆盖。"
+
+#: doc/classes/Input.xml:341
+msgid ""
+"Sets the value of the rotation rate of the gyroscope sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+"设置陀螺仪传感器的旋转速率值。å¯ç”¨äºŽåœ¨æ²¡æœ‰ç¡¬ä»¶ä¼ æ„Ÿå™¨çš„设备上进行调试,例如在"
+"PC上的编辑器中。\n"
+"[b]注æ„:[/b] 在Androidå’ŒiOS上,这个值å¯ç«‹å³è¢«ç¡¬ä»¶ä¼ æ„Ÿå™¨çš„值所覆盖。"
+
+#: doc/classes/Input.xml:349
+msgid ""
+"Sets the value of the magnetic field of the magnetometer sensor. Can be used "
+"for debugging on devices without a hardware sensor, for example in an editor "
+"on a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+"设置ç£åŠ›ä¼ æ„Ÿå™¨çš„ç£åœºå€¼ã€‚å¯ç”¨äºŽåœ¨æ²¡æœ‰ç¡¬ä»¶ä¼ æ„Ÿå™¨çš„设备上进行调试,例如在PC上的"
+"编辑器中。\n"
+"[b]注æ„:[/b] 在Androidå’ŒiOS上,这个值å¯ç«‹å³è¢«ç¡¬ä»¶ä¼ æ„Ÿå™¨çš„值所覆盖。"
+
+#: doc/classes/Input.xml:357
msgid "Sets the mouse mode. See the constants for more information."
msgstr "设置鼠标模å¼ã€‚有关更多信æ¯ï¼Œè¯·å‚阅常é‡ã€‚"
-#: doc/classes/Input.xml:325
+#: doc/classes/Input.xml:364
msgid ""
"Enables or disables the accumulation of similar input events sent by the "
"operating system. When input accumulation is enabled, all input events "
@@ -34712,7 +35687,7 @@ msgstr ""
"æ›´ç²¾ç¡®åŠæ›´çµæ•的输入。在需è¦è‡ªç”±ç»˜åˆ¶çº¿æ¡çš„åº”ç”¨ä¸­ï¼Œä¸€èˆ¬åº”ç”¨åœ¨ç”¨æˆ·ç»˜åˆ¶çº¿æ¡æ—¶ç¦"
"用输入累加,以获得紧跟实际输入的结果。"
-#: doc/classes/Input.xml:336
+#: doc/classes/Input.xml:375
msgid ""
"Starts to vibrate the joypad. Joypads usually come with two rumble motors, a "
"strong and a weak one. [code]weak_magnitude[/code] is the strength of the "
@@ -34732,71 +35707,74 @@ msgstr ""
"[b]注æ„:[/b] å¹¶éžæ‰€æœ‰ç¡¬ä»¶éƒ½å…¼å®¹é•¿æ•ˆæžœæŒç»­æ—¶é—´ï¼›å¦‚果必须播放超过几秒钟的效"
"æžœï¼Œå»ºè®®é‡æ–°å¯åŠ¨æ•ˆæžœã€‚"
-#: doc/classes/Input.xml:344
+#: doc/classes/Input.xml:383
msgid "Stops the vibration of the joypad."
msgstr "åœæ­¢æ¸¸æˆæ‰‹æŸ„的振动。"
-#: doc/classes/Input.xml:351
-#, fuzzy
+#: doc/classes/Input.xml:390
msgid ""
"Vibrate Android and iOS devices.\n"
"[b]Note:[/b] It needs [code]VIBRATE[/code] permission for Android at export "
"settings. iOS does not support duration."
msgstr ""
-"振动Android和iOS设备。\n"
-"[b]注æ„:[/b]在导出设置时,它需è¦Androidçš„VIBRATEæƒé™ï¼ŒiOS䏿”¯æŒæŒç»­æ—¶é—´ã€‚"
+"振动 Android 和 iOS 设备。\n"
+"[b]注æ„:[/b]在导出设置时,它需è¦[code]VIBRATE[/code]安å“çš„æƒé™ã€‚ iOS䏿”¯æŒæŒ"
+"续时间。"
-#: doc/classes/Input.xml:359
+#: doc/classes/Input.xml:398
msgid "Sets the mouse position to the specified vector."
msgstr "å°†é¼ æ ‡åæ ‡è®¾ç½®ä¸ºæŒ‡å®šçš„å‘é‡ã€‚"
-#: doc/classes/Input.xml:368
+#: doc/classes/Input.xml:407
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr "è¿žæŽ¥æˆ–æ–­å¼€æ¸¸æˆæ‰‹æŸ„设备时触å‘。"
-#: doc/classes/Input.xml:374
+#: doc/classes/Input.xml:413
msgid "Makes the mouse cursor visible if it is hidden."
msgstr "如果鼠标光标处于éšè—状æ€ï¼Œåˆ™ä½¿å…¶å¯è§ã€‚"
-#: doc/classes/Input.xml:377
+#: doc/classes/Input.xml:416
msgid "Makes the mouse cursor hidden if it is visible."
msgstr "如果鼠标光标是å¯è§çš„,则使其éšè—。"
-#: doc/classes/Input.xml:380
+#: doc/classes/Input.xml:419
msgid ""
"Captures the mouse. The mouse will be hidden and its position locked at the "
"center of the screen.\n"
"[b]Note:[/b] If you want to process the mouse's movement in this mode, you "
"need to use [member InputEventMouseMotion.relative]."
msgstr ""
+"æ•获鼠标。鼠标将被éšè—,其ä½ç½®è¢«é”定在å±å¹•的中心。\n"
+"[b]注æ„:[/b] å¦‚æžœä½ æƒ³åœ¨è¿™ç§æ¨¡å¼ä¸‹å¤„ç†é¼ æ ‡çš„移动,需è¦ä½¿ç”¨[member "
+"InputEventMouseMotion.relative]。"
-#: doc/classes/Input.xml:384
+#: doc/classes/Input.xml:423
msgid "Makes the mouse cursor visible but confines it to the game window."
msgstr "使鼠标光标å¯è§ï¼Œå¹¶å°†å…¶é™åˆ¶åœ¨æ¸¸æˆçª—å£ä¸­ã€‚"
-#: doc/classes/Input.xml:387
+#: doc/classes/Input.xml:426
msgid "Arrow cursor. Standard, default pointing cursor."
msgstr "箭头光标。标准,默认指å‘光标。"
-#: doc/classes/Input.xml:390
+#: doc/classes/Input.xml:429
msgid ""
"I-beam cursor. Usually used to show where the text cursor will appear when "
"the mouse is clicked."
msgstr "Iå½¢(I-beam)å…‰æ ‡ã€‚é€šå¸¸ç”¨åœ¨ç‚¹å‡»æ–‡æœ¬æ¡†åŽæ˜¾ç¤ºçš„ä½ç½®ä¸Šã€‚"
-#: doc/classes/Input.xml:393
+#: doc/classes/Input.xml:432
msgid ""
"Pointing hand cursor. Usually used to indicate the pointer is over a link or "
"other interactable item."
msgstr "æŒ‡å‘æ‰‹å½¢å…‰æ ‡ã€‚通常用在指示链接或其他å¯äº¤äº’项上。"
-#: doc/classes/Input.xml:396
+#: doc/classes/Input.xml:435
msgid ""
"Cross cursor. Typically appears over regions in which a drawing operation "
"can be performed or for selections."
msgstr "å字光标。通常出现在å¯ä»¥æ‰§è¡Œç»˜åˆ¶æ“作或进行选择的区域上方。"
-#: doc/classes/Input.xml:399
+#: doc/classes/Input.xml:438
msgid ""
"Wait cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application is still usable during the "
@@ -34805,7 +35783,7 @@ msgstr ""
"ç­‰å¾…åž‹å…‰æ ‡ã€‚è¡¨ç¤ºåº”ç”¨ç¨‹åºæ­£å¿™äºŽæ‰§è¡Œä¸€é¡¹æ“作。这ç§å…‰æ ‡å½¢çŠ¶è¡¨ç¤ºåº”ç”¨ç¨‹åºåœ¨æ“作过"
"程中ä»ç„¶å¯ä»¥ä½¿ç”¨ã€‚"
-#: doc/classes/Input.xml:402
+#: doc/classes/Input.xml:441
msgid ""
"Busy cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application isn't usable during the "
@@ -34814,17 +35792,17 @@ msgstr ""
"å¿™ç¢Œçš„å…‰æ ‡ã€‚è¡¨ç¤ºåº”ç”¨ç¨‹åºæ­£å¿™äºŽæ‰§è¡Œæ“作。此光标形状表示应用程åºåœ¨æ“作过程中ä¸"
"å¯ç”¨ï¼ˆä¾‹å¦‚,æŸäº›ä¸œè¥¿é˜»å¡žäº†å…¶ä¸»çº¿ç¨‹ï¼‰ã€‚"
-#: doc/classes/Input.xml:405
+#: doc/classes/Input.xml:444
msgid "Drag cursor. Usually displayed when dragging something."
msgstr "拖动光标。通常在拖动东西时显示。"
-#: doc/classes/Input.xml:408
+#: doc/classes/Input.xml:447
msgid ""
"Can drop cursor. Usually displayed when dragging something to indicate that "
"it can be dropped at the current position."
msgstr "å¯ä»¥æ”¾ä¸‹çš„光标。通常在拖动东西时显示,表示å¯ä»¥åœ¨å½“å‰ä½ç½®æ”¾ä¸‹ã€‚"
-#: doc/classes/Input.xml:411
+#: doc/classes/Input.xml:450
msgid ""
"Forbidden cursor. Indicates that the current action is forbidden (for "
"example, when dragging something) or that the control at a position is "
@@ -34833,7 +35811,7 @@ msgstr ""
"ç¦æ­¢çš„å…‰æ ‡ã€‚è¡¨ç¤ºå½“å‰æ“ä½œæ˜¯è¢«ç¦æ­¢çš„(例如,拖动东西时)或æŸä¸ªä½ç½®çš„æŽ§ä»¶è¢«ç¦"
"用。"
-#: doc/classes/Input.xml:414
+#: doc/classes/Input.xml:453
msgid ""
"Vertical resize mouse cursor. A double-headed vertical arrow. It tells the "
"user they can resize the window or the panel vertically."
@@ -34841,7 +35819,7 @@ msgstr ""
"垂直调整大å°çš„光标。一个åŒå¤´çš„垂直箭头。它告诉用户他们å¯ä»¥åž‚ç›´åœ°è°ƒæ•´çª—å£æˆ–é¢"
"æ¿çš„大å°ã€‚"
-#: doc/classes/Input.xml:417
+#: doc/classes/Input.xml:456
msgid ""
"Horizontal resize mouse cursor. A double-headed horizontal arrow. It tells "
"the user they can resize the window or the panel horizontally."
@@ -34849,7 +35827,7 @@ msgstr ""
"水平调整尺寸的光标。一个åŒå¤´çš„æ°´å¹³ç®­å¤´ã€‚它告诉用户他们å¯ä»¥æ°´å¹³è°ƒæ•´çª—壿ˆ–颿¿"
"的大å°ã€‚"
-#: doc/classes/Input.xml:420
+#: doc/classes/Input.xml:459
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the bottom left to the top right. It tells the user they can resize the "
@@ -34858,7 +35836,7 @@ msgstr ""
"窗å£è°ƒæ•´å¤§å°çš„光标。该光标是一个åŒå¤´ç®­å¤´ï¼Œä»Žå·¦ä¸‹æ–¹åˆ°å³ä¸Šæ–¹ã€‚它告诉用户他们å¯"
"以在水平和垂直方å‘ä¸Šè°ƒæ•´çª—å£æˆ–颿¿çš„大å°ã€‚"
-#: doc/classes/Input.xml:423
+#: doc/classes/Input.xml:462
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the top left to the bottom right, the opposite of [constant "
@@ -34869,23 +35847,23 @@ msgstr ""
"CURSOR_BDIAGSIZE]相å。它告诉用户他们å¯ä»¥åœ¨æ°´å¹³å’Œåž‚ç›´æ–¹å‘ä¸Šè°ƒæ•´çª—å£æˆ–颿¿çš„大"
"å°ã€‚"
-#: doc/classes/Input.xml:426
+#: doc/classes/Input.xml:465
msgid "Move cursor. Indicates that something can be moved."
msgstr "移动光标。表示那些东西å¯ä»¥ç§»åŠ¨ã€‚"
-#: doc/classes/Input.xml:429
+#: doc/classes/Input.xml:468
msgid ""
"Vertical split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_VSIZE]."
msgstr "垂直拆分鼠标光标。在Windows上,它与[CURSOR_VSIZE]相åŒã€‚"
-#: doc/classes/Input.xml:432
+#: doc/classes/Input.xml:471
msgid ""
"Horizontal split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_HSIZE]."
msgstr "水平分割的鼠标光标。在Windows上,它与[constant CURSOR_HSIZE]相åŒã€‚"
-#: doc/classes/Input.xml:435
+#: doc/classes/Input.xml:474
msgid "Help cursor. Usually a question mark."
msgstr "帮助光标。通常是一个问å·ã€‚"
@@ -34903,7 +35881,8 @@ msgstr "å„ç§è¾“入事件的基类。å‚阅[method Node._input]。"
#: doc/classes/InputEventScreenTouch.xml:11
#: doc/classes/InputEventWithModifiers.xml:10
msgid "https://docs.godotengine.org/en/3.4/tutorials/inputs/inputevent.html"
-msgstr "https://docs.godotengine.org/en/3.4/tutorials/inputs/inputevent.html"
+msgstr ""
+"https://docs.godotengine.org/zh_CN/stable/tutorials/inputs/inputevent.html"
#: doc/classes/InputEvent.xml:20
msgid ""
@@ -34923,7 +35902,6 @@ msgid "Returns a [String] representation of the event."
msgstr "返回事件的一个[String]字符串表示。"
#: doc/classes/InputEvent.xml:35
-#, fuzzy
msgid ""
"Returns a value between 0.0 and 1.0 depending on the given actions' state. "
"Useful for getting the value of events of type [InputEventJoypadMotion].\n"
@@ -34931,8 +35909,11 @@ msgid ""
"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
"direction for [InputEventJoypadMotion] events."
msgstr ""
-"æ ¹æ®ç»™å®šçš„动作状æ€ï¼Œè¿”回0.0到1.0之间的值。对于获å–[InputEventJoypadMotion]ç±»"
-"型的事件的值很有用。"
+"æ ¹æ®ç»™å®šçš„动作的状æ€ï¼Œè¿”回0.0到1.0之间的值。对于获å–[InputEventJoypadMotion]"
+"类型的事件值时,很有用。\n"
+"如果[code]exact_match[/code]是[code]false[/code],它将忽略[InputEventKey]和"
+"[InputEventMouseButton]事件的输入修饰符,以åŠ[InputEventJoypadMotion]事件的方"
+"å‘。"
#: doc/classes/InputEvent.xml:44
msgid ""
@@ -34942,9 +35923,12 @@ msgid ""
"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
"direction for [InputEventJoypadMotion] events."
msgstr ""
+"如果这个输入事件与任何类型的预定义动作匹é…,则返回[code]true[/code]。\n"
+"如果[code]exact_match[/code]是[code]false[/code],它将忽略[InputEventKey]和"
+"[InputEventMouseButton]事件的输入修饰符,以åŠ[InputEventJoypadMotion]事件的方"
+"å‘。"
#: doc/classes/InputEvent.xml:54
-#, fuzzy
msgid ""
"Returns [code]true[/code] if the given action is being pressed (and is not "
"an echo event for [InputEventKey] events, unless [code]allow_echo[/code] is "
@@ -34954,12 +35938,14 @@ msgid ""
"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
"direction for [InputEventJoypadMotion] events."
msgstr ""
-"如果给定的动作被按下,返回[code]true[/code](对于[InputEventKey]äº‹ä»¶ä¸æ˜¯ä¸€ä¸ª"
-"回显事件,除éžå…许回显[code]allow_echo[/code]为[code]true[/code])。与"
-"[InputEventMouseMotion]或[InputEventScreenDrag]类型的事件无关。"
+"如果给定的动作被按下,则返回[code]true[/code]ï¼Œå¹¶ä¸”ä¸æ˜¯ [InputEventKey] 事件"
+"çš„å›žæ˜¾äº‹ä»¶ï¼Œé™¤éž [code]allow_echo[/code] 是 [code]true[/code]。与"
+"[InputEventMouseMotion]或[InputEventScreenDrag]类型的事件无关。\n"
+"如果[code]exact_match[/code]是[code]false[/code],它将忽略[InputEventKey]和"
+"[InputEventMouseButton]事件的输入修饰符,以åŠ[InputEventJoypadMotion]事件的方"
+"å‘。"
#: doc/classes/InputEvent.xml:63
-#, fuzzy
msgid ""
"Returns [code]true[/code] if the given action is released (i.e. not "
"pressed). Not relevant for events of type [InputEventMouseMotion] or "
@@ -34968,9 +35954,11 @@ msgid ""
"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
"direction for [InputEventJoypadMotion] events."
msgstr ""
-"如果给定的动作被按下,返回[code]true[/code](对于[InputEventKey]äº‹ä»¶ä¸æ˜¯ä¸€ä¸ª"
-"回显事件,除éžå…许回显[code]allow_echo[/code]为[code]true[/code])。与"
-"[InputEventMouseMotion]或[InputEventScreenDrag]类型的事件无关。"
+"å¦‚æžœç»™å®šçš„åŠ¨ä½œè¢«é‡Šæ”¾ï¼Œå³æœªè¢«æŒ‰ä¸‹ï¼Œåˆ™è¿”回[code]true[/code]。与"
+"[InputEventMouseMotion]或[InputEventScreenDrag]类型的事件无关。\n"
+"如果[code]exact_match[/code]是[code]false[/code],它将忽略[InputEventKey]和"
+"[InputEventMouseButton]事件的输入修饰符,以åŠ[InputEventJoypadMotion]事件的方"
+"å‘。"
#: doc/classes/InputEvent.xml:70
msgid ""
@@ -35006,6 +35994,13 @@ msgid ""
"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
"direction for [InputEventJoypadMotion] events."
msgstr ""
+"如果指定的 [code]event[/code] 与此事件匹é…,则返回 [code]true[/code]。仅对动"
+"作事件有效,å³é”® ([InputEventKey])ã€æŒ‰é’® ([InputEventMouseButton] 或 "
+"[InputEventJoypadButton])ã€è½´ [InputEventJoypadMotion] 或动作 "
+"([InputEventAction]) 事件。\n"
+"如果 [code]exact_match[/code] 是 [code]false[/code],它会忽略 "
+"[InputEventKey] å’Œ [InputEventMouseButton] äº‹ä»¶çš„è¾“å…¥ä¿®é¥°ç¬¦ï¼Œä»¥åŠ "
+"[InputEventJoypadMotion] 事件的方å‘。"
#: doc/classes/InputEvent.xml:99
msgid ""
@@ -35048,7 +36043,8 @@ msgstr ""
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/inputs/inputevent.html#actions"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/inputs/inputevent.html#actions"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/inputs/inputevent."
+"html#actions"
#: doc/classes/InputEventAction.xml:18
msgid "The action's name. Actions are accessed via this [String]."
@@ -35063,15 +36059,14 @@ msgstr ""
"被释放。"
#: doc/classes/InputEventAction.xml:24
-#, fuzzy
msgid ""
"The action's strength between 0 and 1. This value is considered as equal to "
"0 if pressed is [code]false[/code]. The event strength allows faking analog "
"joypad motion events, by specifying how strongly the joypad axis is bent or "
"pressed."
msgstr ""
-"该动作的强度在0和1之间。如果按下的是[code]false[/code],则该值被视为等于0。事"
-"件强度å…许通过精确控制手柄轴弯曲或按下的强度æ¥ä¼ªé€ æ¨¡æ‹Ÿæ‰‹æŸ„è¿åŠ¨äº‹ä»¶ã€‚"
+"动作的强度介于 0 和 1 之间。如果按下的是 [code]false[/code],则该值被视为等"
+"于 0。事件强度å…许通过指定手柄轴弯曲或按压的强度æ¥ä»¿é€ æ¨¡æ‹Ÿæ‰‹æŸ„è¿åŠ¨äº‹ä»¶ã€‚"
#: doc/classes/InputEventGesture.xml:4
msgid "Base class for touch control gestures."
@@ -35099,9 +36094,8 @@ msgstr ""
"[InputEventJoypadMotion]。"
#: doc/classes/InputEventJoypadButton.xml:16
-#, fuzzy
msgid "Button identifier. One of the [enum JoystickList] button constants."
-msgstr "按钮标识符。枚举[enum JoyButtonList] 按钮常é‡ä¹‹ä¸€ã€‚"
+msgstr "按钮标识符。 [enum JoystickList] 按钮常é‡ä¹‹ä¸€ã€‚"
#: doc/classes/InputEventJoypadButton.xml:19
msgid ""
@@ -35134,9 +36128,8 @@ msgid ""
msgstr "存储关于æ“纵æ†è¿åŠ¨çš„ä¿¡æ¯ã€‚一个[InputEventJoypadMotion]一次代表一个轴。"
#: doc/classes/InputEventJoypadMotion.xml:16
-#, fuzzy
msgid "Axis identifier. Use one of the [enum JoystickList] axis constants."
-msgstr "轴的标识符。使用[enum JoyAxisList]轴常数中的一个。"
+msgstr "轴标识符。使用 [enum JoystickList] 轴常é‡ä¹‹ä¸€ã€‚"
#: doc/classes/InputEventJoypadMotion.xml:19
msgid ""
@@ -35158,7 +36151,6 @@ msgid ""
msgstr "å­˜å‚¨é”®ç›˜ä¸Šçš„æŒ‰é”®ã€‚æ”¯æŒæŒ‰é”®ã€æŒ‰é”®é‡Šæ”¾å’Œ[member echo]回显事件。"
#: doc/classes/InputEventKey.xml:16
-#, fuzzy
msgid ""
"Returns the physical scancode combined with modifier keys such as "
"[code]Shift[/code] or [code]Alt[/code]. See also [InputEventWithModifiers].\n"
@@ -35167,14 +36159,13 @@ msgid ""
"get_physical_scancode_with_modifiers())[/code] where [code]event[/code] is "
"the [InputEventKey]."
msgstr ""
-"返回与修饰键(如[kbd]Shift[/kbd]或[kbd]Alt[/kbd])相结åˆçš„物ç†é”®ç ã€‚也请å‚阅"
+"返回与修改键组åˆçš„物ç†é”®ç ï¼Œä¾‹å¦‚ [code]Shift[/code] 或 [code]Alt[/code]。å‚阅"
"[InputEventWithModifiers]。\n"
-"è¦èŽ·å¾—å¸¦æœ‰ä¿®é¥°ç¬¦çš„[InputEventKey]的人类å¯è¯»è¡¨ç¤ºï¼Œä½¿ç”¨[code]OS."
-"get_keycode_string(event.get_physical_keycode_with_modifiers())[/code],其中"
-"[code]event[/code] 是[InputEventKey]。"
+"è¦èŽ·å¾—å¸¦æœ‰ä¿®é¥°ç¬¦çš„ [InputEventKey] 的人类å¯è¯»è¡¨ç¤ºï¼Œè¯·ä½¿ç”¨ [code]OS."
+"get_scancode_string(event.get_physical_scancode_with_modifiers())[/code] å…¶"
+"中 [code]event[/code] 是 [InputEventKey]。"
#: doc/classes/InputEventKey.xml:23
-#, fuzzy
msgid ""
"Returns the scancode combined with modifier keys such as [code]Shift[/code] "
"or [code]Alt[/code]. See also [InputEventWithModifiers].\n"
@@ -35183,10 +36174,10 @@ msgid ""
"get_scancode_with_modifiers())[/code] where [code]event[/code] is the "
"[InputEventKey]."
msgstr ""
-"返回与修饰键相结åˆçš„é”®ç ï¼Œå¦‚[kbd]Shift[/kbd]或[kbd]Alt[/kbd]。å¦è¯·å‚阅带修饰"
-"符的输入[InputEventWithModifiers]。\n"
-"è¦èŽ·å¾—å¸¦æœ‰ä¿®é¥°ç¬¦çš„äººç±»å¯è¯»çš„ [InputEventKey] 表示,请使用 [code]OS."
-"get_keycode_string(event.get_keycode_with_modifiers())[/code] 其中 "
+"返回与 [code]Shift[/code] 或 [code]Alt[/code] 等修饰键组åˆçš„é”®ç ã€‚å‚阅"
+"[InputEventWithModifiers]。\n"
+"è¦èŽ·å¾—å¸¦æœ‰ä¿®é¥°ç¬¦çš„ [InputEventKey] 的人类å¯è¯»è¡¨ç¤ºï¼Œè¯·ä½¿ç”¨ [code]OS."
+"get_scancode_string(event.get_scancode_with_modifiers())[/code] 其中 "
"[code]event[/code] 是 [InputEventKey]。"
#: doc/classes/InputEventKey.xml:30
@@ -35198,7 +36189,6 @@ msgstr ""
"键。"
#: doc/classes/InputEventKey.xml:33
-#, fuzzy
msgid ""
"Key physical scancode, which corresponds to one of the [enum KeyList] "
"constants. Represent the physical location of a key on the 101/102-key US "
@@ -35207,10 +36197,11 @@ msgid ""
"get_scancode_string(event.physical_scancode)[/code] where [code]event[/code] "
"is the [InputEventKey]."
msgstr ""
-"键的物ç†é”®ç ï¼Œå¯¹åº”于[enum KeyList]常é‡ä¸­çš„一个。代表101/102键美国QWERTY键盘上"
-"一个键的物ç†ä½ç½®ã€‚\n"
-"è¦èŽ·å¾—[InputEventKey]的人类å¯è¯»çš„表示,使用[code]OS.get_keycode_string(event."
-"keycode)[/code],其中[code]event[/code]是[InputEventKey]。"
+"键的物ç†ç¼–ç ï¼Œå¯¹åº”于 [enum KeyList] 常é‡ä¹‹ä¸€ã€‚表示 101/102 键美国 QWERTY 键盘"
+"上按键的物ç†ä½ç½®ã€‚\n"
+"è¦èŽ·å¾— [InputEventKey] 的人类å¯è¯»è¡¨ç¤ºï¼Œè¯·ä½¿ç”¨ [code]OS."
+"get_scancode_string(event.physical_scancode)[/code] 其中 [code]event[/code] "
+"是 [InputEventKey]。"
#: doc/classes/InputEventKey.xml:37
msgid ""
@@ -35221,7 +36212,6 @@ msgstr ""
"被释放。"
#: doc/classes/InputEventKey.xml:40
-#, fuzzy
msgid ""
"The key scancode, which corresponds to one of the [enum KeyList] constants. "
"Represent key in the current keyboard layout.\n"
@@ -35229,20 +36219,19 @@ msgid ""
"get_scancode_string(event.scancode)[/code] where [code]event[/code] is the "
"[InputEventKey]."
msgstr ""
-"键的键ç ï¼Œå¯¹åº”于[enum KeyList]常é‡ä¸­çš„一个。代表当å‰é”®ç›˜å¸ƒå±€ä¸­çš„键。\n"
-"è¦èŽ·å¾—[InputEventKey]的人类å¯è¯»çš„表示,使用[code]OS.get_keycode_string(event."
-"keycode)[/code],其中[code]event[/code]是[InputEventKey]。"
+"é”®ç ï¼Œå¯¹åº”于 [enum KeyList] 常é‡ä¹‹ä¸€ã€‚表示当å‰é”®ç›˜å¸ƒå±€ä¸­çš„键。\n"
+"è¦èŽ·å¾— [InputEventKey] 的人类å¯è¯»è¡¨ç¤ºï¼Œè¯·ä½¿ç”¨ [code]OS."
+"get_scancode_string(event.scancode)[/code] 其中 [code]event[/code] 是 "
+"[InputEventKey]。"
#: doc/classes/InputEventKey.xml:44
-#, fuzzy
msgid ""
"The key Unicode identifier (when relevant). Unicode identifiers for the "
"composite characters and complex scripts may not be available unless IME "
"input mode is active. See [method OS.set_ime_active] for more information."
msgstr ""
-"键的 Unicode 标识符(相关时)。除éžIME输入模å¼å¤„于激活状æ€ï¼Œå¦åˆ™å¯èƒ½æ— æ³•为å¤"
-"åˆå­—ç¬¦å’Œå¤æ‚脚本æä¾› Unicode 标识符。有关更多信æ¯ï¼Œè¯·å‚阅 [方法Window."
-"set_ime_active] 。"
+"Unicodeé”®æ ‡è¯†ç¬¦ï¼ˆå¦‚æžœç›¸å…³ï¼‰ã€‚é™¤éž IME 输入模å¼å¤„于激活状æ€ï¼Œå¦åˆ™å¤åˆå­—符和å¤"
+"æ‚脚本的 Unicode 标识符å¯èƒ½æ— æ³•使用。更多信æ¯å‚阅[method OS.set_ime_active]。"
#: doc/classes/InputEventMouse.xml:4
msgid "Base input event type for mouse events."
@@ -35289,7 +36278,7 @@ msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/inputs/"
"mouse_and_input_coordinates.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/inputs/"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/inputs/"
"mouse_and_input_coordinates.html"
#: doc/classes/InputEventMouseButton.xml:16
@@ -35397,7 +36386,10 @@ msgid "The drag position."
msgstr "拖拽的ä½ç½®ã€‚"
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+#, fuzzy
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr "相对于其起始ä½ç½®çš„æ‹–动ä½ç½®ã€‚"
#: doc/classes/InputEventScreenDrag.xml:25
@@ -35488,7 +36480,8 @@ msgstr ""
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/inputs/inputevent.html#inputmap"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/inputs/inputevent.html#inputmap"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/inputs/inputevent."
+"html#inputmap"
#: doc/classes/InputMap.xml:18
msgid ""
@@ -36013,6 +37006,9 @@ msgid ""
"may cause a crash. If you wish to hide it or any of its children, use their "
"[member CanvasItem.visible] property."
msgstr ""
+"返回与列表相关的[Object]ID。\n"
+"[b]警告:[/b] 这是一个必è¦çš„内部节点,移除和释放它å¯èƒ½ä¼šå¯¼è‡´å´©æºƒã€‚如果你想éš"
+"è—它或它的任æ„å­èŠ‚ç‚¹ï¼Œè¯·ä½¿ç”¨å…¶çš„ [member CanvasItem.visible] 属性。"
#: doc/classes/ItemList.xml:131
msgid "Returns [code]true[/code] if one or more items are selected."
@@ -36203,9 +37199,9 @@ msgid ""
"[constant ICON_MODE_TOP]. To make the text wrap, [member fixed_column_width] "
"should be greater than zero."
msgstr ""
-"æ¯ä¸ªé¡¹ç›®ä¸­å…许的最大文本行数。å³ä½¿æ²¡æœ‰è¶³å¤Ÿçš„æ–‡æœ¬è¡Œæ•°æ¥æ˜¾ç¤ºï¼Œä¹Ÿä¼šä¿ç•™ç©ºé—´ã€‚\n"
-"[b]注æ„:[/b] è¿™ä¸ªå±žæ€§åªæœ‰åœ¨[member icon_mode]是[constant ICON_MODE_TOP]æ—¶æ‰"
-"会生效。è¦ä½¿æ–‡æœ¬åŒ…装(wrap)æ¢è¡Œï¼Œ[member fixed_column_width]应大于零。"
+"æ¯ä¸ªå­é¡¹ä¸­å…许的最大文本行数。å³ä½¿æ²¡æœ‰è¶³å¤Ÿçš„æ–‡æœ¬è¡Œæ•°æ¥æ˜¾ç¤ºï¼Œä¹Ÿä¼šä¿ç•™ç©ºé—´ã€‚\n"
+"[b]注æ„:[/b] è¿™ä¸ªå±žæ€§åªæœ‰åœ¨ [member icon_mode] 是 [constant ICON_MODE_TOP] "
+"æ—¶æ‰ä¼šç”Ÿæ•ˆã€‚è¦ä½¿æ–‡æœ¬è‡ªåЍæ¢è¡Œï¼Œ[member fixed_column_width]应大于零。"
#: doc/classes/ItemList.xml:346
msgid ""
@@ -36370,7 +37366,7 @@ msgstr ""
"è¿™å…许与嵌入页é¢äº¤äº’或调用第三方 JavaScript API。\n"
"[b]注æ„:[/b] å¯ä»¥åœ¨æž„建时ç¦ç”¨æ­¤å•例以æé«˜å®‰å…¨æ€§ã€‚默认情况下,å¯ç”¨ "
"JavaScript å•例。官方导出模æ¿ä¹Ÿå¯ç”¨äº† JavaScript å•例。有关详细信æ¯ï¼Œè¯·å‚阅文"
-"档中的 [url=https://docs.godotengine.org/en/3.4/development/compiling/"
+"档中的 [url=https://docs.godotengine.org/zh_CN/stable/development/compiling/"
"compiling_for_web.html]为 Webå¹³å°ç¼–译[/url]。"
#: doc/classes/JavaScript.xml:11
@@ -36378,7 +37374,7 @@ msgid ""
"https://docs.godotengine.org/en/3.4/getting_started/workflow/export/"
"exporting_for_web.html#calling-javascript-from-script"
msgstr ""
-"https://docs.godotengine.org/en/3.4/getting_started/workflow/export/"
+"https://docs.godotengine.org/zh_CN/stable/getting_started/workflow/export/"
"exporting_for_web.html#calling-javascript-from-script"
#: doc/classes/JavaScript.xml:19
@@ -36387,6 +37383,8 @@ msgid ""
"JavaScript. The reference must be kept until the callback happens, or it "
"won't be called at all. See [JavaScriptObject] for usage."
msgstr ""
+"创建脚本函数的引用,å¯ä»¥è¢«JavaScriptç”¨ä½œå›žè°ƒã€‚è¿™ä¸ªå¼•ç”¨å¿…é¡»ä¿æŒåˆ°å›žè°ƒå‘生为"
+"止,å¦åˆ™å®ƒå°±ä¸ä¼šè¢«è°ƒç”¨ã€‚使用方法å‚阅[JavaScriptObject]。"
#: doc/classes/JavaScript.xml:26
msgid ""
@@ -36394,6 +37392,8 @@ msgid ""
"[code]object[/code] must a valid property of the JavaScript [code]window[/"
"code]. See [JavaScriptObject] for usage."
msgstr ""
+"使用[code]new[/code]构造函数创建新的JavaScript对象。[code]object[/code]必须是"
+"JavaScript[code]window[/code]的有效属性。使用方法å‚阅[JavaScriptObject]。"
#: doc/classes/JavaScript.xml:35
msgid ""
@@ -36408,6 +37408,14 @@ msgid ""
"[b]Note:[/b] Browsers might ask the user for permission or block the "
"download if multiple download requests are made in a quick succession."
msgstr ""
+"æç¤ºç”¨æˆ·ä¸‹è½½ä¸€ä¸ªåŒ…嫿Œ‡å®š[code]buffer[/code]缓冲区的文件。该文件将具有给定的"
+"[code]name[/code]和[code]mime[/code]类型。\n"
+"[b]注æ„:[/b] æµè§ˆå™¨å¯èƒ½ä¼šæ ¹æ®æ–‡ä»¶[code]name[/code]的扩展å,覆盖所æä¾›çš„"
+"[url=https://en.wikipedia.org/wiki/Media_type]MIME类型[/url]。\n"
+"[b]注æ„:[/b] 如果[method download_buffer]䏿˜¯ç”±ç”¨æˆ·äº¤äº’调用,如点击按钮,æµ"
+"览器å¯èƒ½ä¼šé˜»æ­¢ä¸‹è½½ã€‚\n"
+"[b]注æ„:[/b] 如果快速连续æå‡ºå¤šä¸ªä¸‹è½½è¯·æ±‚,æµè§ˆå™¨å¯èƒ½ä¼šè¦æ±‚ç”¨æˆ·åŒæ„或阻止下"
+"载。"
#: doc/classes/JavaScript.xml:46
msgid ""
@@ -36432,11 +37440,13 @@ msgid ""
"which will contain the JavaScript [code]arguments[/code]. See "
"[JavaScriptObject] for usage."
msgstr ""
+"返回å¯ä»¥è¢«è„šæœ¬ä½¿ç”¨çš„JavaScript对象的接å£ã€‚这个[code]interface[/code]必须是"
+"JavaScript[code]window[/code]的一个有效属性。回调必须接å—一个[Array]傿•°ï¼Œå®ƒ"
+"将包å«JavaScript [code]arguments[/code]。å‚阅[JavaScriptObject]的用法。"
#: doc/classes/JavaScriptObject.xml:4
-#, fuzzy
msgid "A wrapper class for native JavaScript objects."
-msgstr "所有[i]scene[/i]对象的基类。"
+msgstr "本地JavaScript对象的å°è£…类。"
#: doc/classes/JavaScriptObject.xml:7
msgid ""
@@ -36476,13 +37486,47 @@ msgid ""
"[/codeblock]\n"
"[b]Note:[/b] Only available in the HTML5 platform."
msgstr ""
+"JavaScriptObject用于与通过[method JavaScript.get_interface]ã€[method "
+"JavaScript.create_object]或[method JavaScript.create_callback]检索或创建的"
+"JavaScript对象交互。\n"
+"例:\n"
+"[codeblock]\n"
+"extends Node\n"
+"\n"
+"var _my_js_callback = JavaScript.create_callback(self, \"myCallback\") # "
+"This reference must be kept\n"
+"var console = JavaScript.get_interface(\"console\")\n"
+"\n"
+"func _init():\n"
+" var buf = JavaScript.create_object(\"ArrayBuffer\", 10) # new "
+"ArrayBuffer(10)\n"
+" print(buf) # prints [JavaScriptObject:OBJECT_ID]\n"
+" var uint8arr = JavaScript.create_object(\"Uint8Array\", buf) # new "
+"Uint8Array(buf)\n"
+" uint8arr[1] = 255\n"
+" prints(uint8arr[1], uint8arr.byteLength) # prints 255 10\n"
+" console.log(uint8arr) # prints in browser console \"Uint8Array(10) [ 0, "
+"255, 0, 0, 0, 0, 0, 0, 0, 0 ]\"\n"
+"\n"
+" # Equivalent of JavaScript: Array.from(uint8arr).forEach(myCallback)\n"
+" JavaScript.get_interface(\"Array\").from(uint8arr)."
+"forEach(_my_js_callback)\n"
+"\n"
+"func myCallback(args):\n"
+" # Will be called with the parameters passed to the \"forEach\" callback\n"
+" # [0, 0, [JavaScriptObject:1173]]\n"
+" # [255, 1, [JavaScriptObject:1173]]\n"
+" # ...\n"
+" # [0, 9, [JavaScriptObject:1180]]\n"
+" print(args)\n"
+"[/codeblock]\n"
+"[b]注æ„:[/b] åªåœ¨HTML5å¹³å°ä¸Šå¯ç”¨ã€‚"
#: doc/classes/JNISingleton.xml:4
-#, fuzzy
msgid ""
"Singleton that connects the engine with Android plugins to interface with "
"native Android code."
-msgstr "在 HTML5 导出中将引擎与æµè§ˆå™¨çš„ JavaScript 上下文连接的å•例。"
+msgstr "将引擎与 Android æ’件连接起æ¥ä»¥ä¸ŽåŽŸç”Ÿ Android 代ç äº¤äº’çš„å•例。"
#: doc/classes/JNISingleton.xml:7
msgid ""
@@ -36493,14 +37537,19 @@ msgid ""
"Java_Native_Interface]Java Native Interface - Wikipedia[/url] for more "
"information."
msgstr ""
+"JNISingleton 仅在 Android 导出中实现。它用于从用 Java 或 Kotlin 编写的 "
+"Android æ’件调用方法和连接信å·ã€‚方法和信å·å¯ä»¥è¢«è°ƒç”¨å¹¶è¿žæŽ¥åˆ° JNISingleton,就"
+"好åƒå®ƒæ˜¯ä¸€ä¸ªèŠ‚ç‚¹ä¸€æ ·ã€‚æœ‰å…³æ›´å¤šä¿¡æ¯ï¼Œè¯·å‚阅 [url=https://en.wikipedia.org/"
+"wiki/Java_Native_Interface]Java Native Interface - Wikipedia[/url] Java 本机"
+"接å£ç»´åŸºç™¾ç§‘。"
#: doc/classes/JNISingleton.xml:10
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/plugins/android/android_plugin."
"html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/plugins/android/android_plugin."
-"html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/plugins/android/"
+"android_plugin.html"
#: doc/classes/Joint.xml:4
msgid "Base class for all 3D joints."
@@ -36626,6 +37675,34 @@ msgid ""
"}\n"
"[/codeblock]"
msgstr ""
+"å°† [Variant] var 转æ¢ä¸º JSON 文本并返回结果。用于åºåˆ—化数æ®ä»¥é€šè¿‡ç½‘络存储或å‘"
+"é€ã€‚\n"
+"[b]注:[/b] JSON 规范没有定义 integer 或 float 类型,而åªå®šä¹‰äº† [i]number[/"
+"i] 类型。因此,将 Variant 转æ¢ä¸º JSON 文本会将所有数值转æ¢ä¸º [float] 类型。\n"
+"使用 [code]indent[/code] 傿•°æ¥ç¾Žè§‚地打å°è¾“出。\n"
+"[b]示例输出:[/b]\n"
+"[codeblock]\n"
+"## JSON.print(my_dictionary)\n"
+"{\"name\":\"my_dictionary\",\"version\":\"1.0.0\",\"entities\":[{\"name\":"
+"\"entity_0\",\"value\":\"value_0\"},{\"name\":\"entity_1\",\"value\":"
+"\"value_1\"}]}\n"
+"\n"
+"## JSON.print(my_dictionary, \"\\t\")\n"
+"{\n"
+" \"name\": \"my_dictionary\",\n"
+" \"version\": \"1.0.0\",\n"
+" \"entities\": [\n"
+" {\n"
+" \"name\": \"entity_0\",\n"
+" \"value\": \"value_0\"\n"
+" },\n"
+" {\n"
+" \"name\": \"entity_1\",\n"
+" \"value\": \"value_1\"\n"
+" }\n"
+" ]\n"
+"}\n"
+"[/codeblock]"
#: doc/classes/JSONParseResult.xml:4
msgid "Data class wrapper for decoded JSON."
@@ -36701,7 +37778,7 @@ msgstr ""
#: doc/classes/JSONRPC.xml:4
msgid "A helper to handle dictionaries which look like JSONRPC documents."
-msgstr ""
+msgstr "用于处ç†çœ‹èµ·æ¥åƒJSONRPC文档的字典的助手。"
#: doc/classes/JSONRPC.xml:7
msgid ""
@@ -36712,6 +37789,10 @@ msgid ""
"standard on top of [Dictionary]; you will have to convert between a "
"[Dictionary] and [JSON] with other functions."
msgstr ""
+"[url=https://www.jsonrpc.org/]JSON-RPC[/url]是一个标准,它将一个方法调用包装"
+"在一个[JSON]对象中。该对象有一个特定的结构,并标识出哪个方法被调用,该函数的"
+"傿•°ï¼Œå¹¶æºå¸¦ä¸€ä¸ªIDæ¥è·Ÿè¸ªå“应。这个类在[Dictionary]之上实现了该标准;你必须用"
+"其他函数在[Dictionary]å’Œ[JSON]之间进行转æ¢ã€‚"
#: doc/classes/JSONRPC.xml:17
msgid ""
@@ -36721,6 +37802,9 @@ msgid ""
"- [code]params[/code]: An array or dictionary of parameters being passed to "
"the method."
msgstr ""
+"返回JSON-RPC通知形å¼çš„字典。通知是一次性的信æ¯ï¼Œä¸éœ€è¦æœ‰å“应。\n"
+"- [code]method[/code]:被调用的方法的å称。\n"
+"- [code]params[/code]:ä¼ é€’ç»™è¯¥æ–¹æ³•çš„å‚æ•°çš„æ•°ç»„或字典。"
#: doc/classes/JSONRPC.xml:28
msgid ""
@@ -36733,6 +37817,11 @@ msgid ""
"- [code]id[/code]: Uniquely identifies this request. The server is expected "
"to send a response with the same ID."
msgstr ""
+"以JSON-RPC请求的形å¼è¿”回字典。请求被å‘é€åˆ°æœåŠ¡å™¨ï¼Œå¹¶æœŸæœ›å¾—åˆ°å“应。ID 字段用于"
+"æœåŠ¡å™¨æŒ‡å®šå®ƒæ­£åœ¨å“应的确切请求。\n"
+"- [code]method[/code]:被调用的方法的å称。\n"
+"- [code]params[/code]:ä¼ é€’ç»™è¯¥æ–¹æ³•çš„å‚æ•°çš„æ•°ç»„或字典。\n"
+"- [code]id[/code]:唯一标识此请求。æœåŠ¡å™¨åº”å‘é€å…·æœ‰ç›¸åŒ ID çš„å“应。"
#: doc/classes/JSONRPC.xml:39
msgid ""
@@ -36742,6 +37831,10 @@ msgid ""
"- [code]result[/code]: The return value of the function which was called.\n"
"- [code]id[/code]: The ID of the request this response is targeted to."
msgstr ""
+"当æœåŠ¡å™¨æŽ¥æ”¶å¹¶å¤„ç†è¯·æ±‚时,它应该å‘é€å“åº”ã€‚å¦‚æžœä½ ä¸æƒ³è¦å›žå¤ï¼Œé‚£ä¹ˆä½ éœ€è¦å‘é€é€š"
+"知。\n"
+"- [code]result[/code]:被调用函数的返回值。\n"
+"- [code]id[/code]:此å“应针对的请求的 ID。"
#: doc/classes/JSONRPC.xml:50
msgid ""
@@ -36751,6 +37844,11 @@ msgid ""
"- [code]message[/code]: A custom message about this error.\n"
"- [code]id[/code]: The request this error is a response to."
msgstr ""
+"创建å“应,指示先å‰çš„回å¤ä»¥æŸç§æ–¹å¼å¤±è´¥ã€‚\n"
+"- [code]code[/code]:这是哪ç§é”™è¯¯å¯¹åº”的错误代ç ã€‚å‚阅 [enum ErrorCode] 常"
+"é‡ã€‚\n"
+"- [code]message[/code]:关于此错误的自定义消æ¯ã€‚\n"
+"- [code]id[/code]:这个错误是对请求的å“应。"
#: doc/classes/JSONRPC.xml:61
msgid ""
@@ -36763,19 +37861,24 @@ msgid ""
"[code]action[/code]: The action to be run, as a Dictionary in the form of a "
"JSON-RPC request or notification."
msgstr ""
+"给定采用 JSON-RPC 请求形å¼çš„字典:解压请求并è¿è¡Œå®ƒã€‚通过查看å为 \"method\" "
+"的字段并在 JSONRPC 对象中查找等效命å的函数æ¥è§£æžæ–¹æ³•。如果找到,则调用该方"
+"法。\n"
+"è¦æ·»åŠ æ–°çš„å—æ”¯æŒæ–¹æ³•,请扩展 JSONRPC 类并在你的å­ç±»ä¸Šè°ƒç”¨ [method "
+"process_action]。\n"
+"[code]action[/code]:è¦è¿è¡Œçš„动作,作为 JSON-RPC 请求或通知形å¼çš„字典。"
#: doc/classes/JSONRPC.xml:86
msgid ""
"A method call was requested but no function of that name existed in the "
"JSONRPC subclass."
-msgstr ""
+msgstr "请求了方法调用,但 JSONRPC å­ç±»ä¸­ä¸å­˜åœ¨è¯¥å称的函数。"
#: doc/classes/KinematicBody.xml:4
msgid "Kinematic body 3D node."
msgstr "3Dè¿åŠ¨ä½“èŠ‚ç‚¹ã€‚"
#: doc/classes/KinematicBody.xml:7
-#, fuzzy
msgid ""
"Kinematic bodies are special types of bodies that are meant to be user-"
"controlled. They are not affected by physics at all; to other types of "
@@ -36792,45 +37895,42 @@ msgid ""
"while performing collision tests. This makes them really useful to implement "
"characters that collide against a world, but don't require advanced physics."
msgstr ""
-"è¿åŠ¨å­¦å®žä½“æ˜¯æ—¨åœ¨ç”±ç”¨æˆ·æŽ§åˆ¶çš„ç‰¹æ®Šç±»åž‹çš„å®žä½“ã€‚å®ƒä»¬å®Œå…¨ä¸å—物ç†å½±å“;对于其他类"
-"åž‹çš„ç‰©ä½“ï¼Œä¾‹å¦‚è§’è‰²æˆ–åˆšä½“ï¼Œè¿™äº›ä¸Žé™æ€ç‰©ä½“相åŒã€‚但是,它们有两个主è¦ç”¨é€”:\n"
+"è¿åŠ¨ä½“æ˜¯ç‰¹æ®Šç±»åž‹çš„ç‰©ä½“ï¼ŒæŒ‡åœ¨è®©ç”¨æˆ·æŽ§åˆ¶ã€‚å®ƒä»¬å®Œå…¨ä¸å—物ç†å½±å“;对于其他类型的"
+"ç‰©ä½“ï¼Œå¦‚è§’è‰²æˆ–åˆšä½“ï¼Œå®ƒä»¬ä¸Žé™æ€ä½“是一样的。然而,它们有两个主è¦ç”¨é€”。\n"
"[b]模拟è¿åŠ¨ï¼š[/b]当这些物体被手动移动时,无论是从代ç è¿˜æ˜¯ä»Ž[AnimationPlayer]"
-"([member AnimationPlayer.playback_process_mode]设置为“物ç†â€ï¼‰ï¼Œç‰©ç†å°†è‡ªåŠ¨è®¡"
-"ç®—ä¼°è®¡å®ƒä»¬çš„çº¿æ€§å’Œè§’é€Ÿåº¦ã€‚è¿™ä½¿å¾—å®ƒä»¬å¯¹äºŽç§»åŠ¨å¹³å°æˆ–å…¶ä»– AnimationPlayer 控制的"
-"å¯¹è±¡ï¼ˆå¦‚é—¨ã€æ‰“开的桥等)éžå¸¸æœ‰ç”¨ã€‚\n"
-"[b]è¿åŠ¨å­¦ç‰¹å¾ï¼š[/b] KinematicBody2D 在执行碰撞测试时也有一个用于移动物体的 "
-"API([method move_and_collide] 和 [method move_and_slide] 方法)。这使得它们"
-"对于实现与世界å‘生碰撞但ä¸éœ€è¦é«˜çº§ç‰©ç†çš„角色éžå¸¸æœ‰ç”¨ã€‚"
+"(将[member AnimationPlayer.playback_process_mode]设置为 \"physics\"),物ç†"
+"å°†è‡ªåŠ¨ä¼°ç®—å…¶çº¿æ€§å’Œè§’é€Ÿåº¦ã€‚è¿™ä½¿å¾—å®ƒä»¬å¯¹äºŽç§»åŠ¨å¹³å°æˆ–å…¶ä»–AnimationPlayer控制的物"
+"体éžå¸¸æœ‰ç”¨ï¼Œæ¯”如一扇门ã€ä¸€åº§èƒ½æ‰“开的桥等。\n"
+"[b]è¿åŠ¨åž‹è§’è‰²ï¼š[/b] KinematicBody也有一个API用于移动物体([method "
+"move_and_collide]å’Œ[method move_and_slide]æ–¹æ³•ï¼‰ï¼ŒåŒæ—¶æ‰§è¡Œç¢°æ’žæµ‹è¯•。这使得它"
+"们在实现对世界进行碰撞,但ä¸éœ€è¦é«˜çº§ç‰©ç†çš„角色时éžå¸¸æœ‰ç”¨ã€‚"
#: doc/classes/KinematicBody.xml:12 doc/classes/KinematicBody2D.xml:12
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/physics/kinematic_character_2d."
"html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/physics/kinematic_character_2d."
-"html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/physics/"
+"kinematic_character_2d.html"
#: doc/classes/KinematicBody.xml:23
-#, fuzzy
msgid ""
"Returns [code]true[/code] if the specified [code]axis[/code] is locked. See "
"also [member move_lock_x], [member move_lock_y] and [member move_lock_z]."
msgstr ""
-"如果指定的[code]axis[/code]被é”定,则返回[code]true[/code]。å‚阅[member "
-"axis_lock_motion_x],[member axis_lock_motion_y]和[member "
-"axis_lock_motion_z]。"
+"如果指定的 [code]axis[/code] 被é”定,则返回 [code]true[/code]。å‚阅[member "
+"move_lock_x]ã€[member move_lock_y]å’Œ[member move_lock_z]。"
#: doc/classes/KinematicBody.xml:30
-#, fuzzy
msgid ""
"Returns the floor's collision angle at the last collision point according to "
"[code]up_direction[/code], which is [code]Vector3.UP[/code] by default. This "
"value is always positive and only valid after calling [method "
"move_and_slide] and when [method is_on_floor] returns [code]true[/code]."
msgstr ""
-"返回最åŽä¸€ä¸ªç¢°æ’žç‚¹åœ°æ¿çš„线速度。仅在调用 [method move_and_slide] 或 [method "
-"move_and_slide_with_snap] 且 [method is_on_floor] 返回 [code]true[/code] åŽæœ‰"
-"效。"
+"æ ¹æ®[code]up_direction[/code]返回最åŽä¸€ä¸ªç¢°æ’žç‚¹çš„地æ¿ç¢°æ’žè§’度,默认为"
+"[code]Vector3.UP[/code]。此值始终为正值,并且仅在调用 [method "
+"move_and_slide] åŽä¸”当 [method is_on_floor] 返回 [code]true[/code] 时有效。"
#: doc/classes/KinematicBody.xml:36 doc/classes/KinematicBody2D.xml:28
msgid ""
@@ -36855,15 +37955,14 @@ msgstr ""
"效。"
#: doc/classes/KinematicBody.xml:48
-#, fuzzy
msgid ""
"Returns a [KinematicCollision], which contains information about the latest "
"collision that occurred during the last call to [method move_and_slide]."
msgstr ""
-"返回在最åŽä¸€æ¬¡è°ƒç”¨[method move_and_slide]时实体å‘ç”Ÿç¢°æ’žå’Œæ”¹å˜æ–¹å‘的次数。"
+"返回 [KinematicCollision]ï¼Œå…¶ä¸­åŒ…å«æœ‰å…³ä¸Šæ¬¡è°ƒç”¨ [method move_and_slide] 期间"
+"å‘生的最新碰撞的信æ¯ã€‚"
#: doc/classes/KinematicBody.xml:55
-#, fuzzy
msgid ""
"Returns a [KinematicCollision], which contains information about a collision "
"that occurred during the last call to [method move_and_slide] or [method "
@@ -36871,68 +37970,66 @@ msgid ""
"single call to [method move_and_slide], you must specify the index of the "
"collision in the range 0 to ([method get_slide_count] - 1)."
msgstr ""
-"返回[KinematicCollision3D],它包å«åœ¨æœ€åŽä¸€ä¸ª[method move_and_slide]调用期间å‘"
-"生的碰撞的相关信æ¯ã€‚由于在[method move_and_slide]çš„å•个调用中,物体å¯èƒ½ä¼šå‘生"
-"多次碰撞,因此必须在0到([method get_slide_count] - 1)的范围内指定碰撞的索引。"
+"返回 [KinematicCollision]ï¼Œå…¶ä¸­åŒ…å«æœ‰å…³ä¸Šæ¬¡è°ƒç”¨ [method move_and_slide] 或 "
+"[method move_and_slide_with_snap] 期间å‘生的碰撞的信æ¯ã€‚由于物体å¯ä»¥åœ¨ä¸€æ¬¡è°ƒ"
+"用 [method move_and_slide] æ—¶å‘生多次碰撞,因此你必须在 0 到 ([method "
+"get_slide_count] - 1) 范围内指定碰撞的索引。"
#: doc/classes/KinematicBody.xml:61 doc/classes/KinematicBody2D.xml:59
-#, fuzzy
msgid ""
"Returns the number of times the body collided and changed direction during "
"the last call to [method move_and_slide] or [method "
"move_and_slide_with_snap]."
msgstr ""
-"返回在最åŽä¸€æ¬¡è°ƒç”¨[method move_and_slide]时实体å‘ç”Ÿç¢°æ’žå’Œæ”¹å˜æ–¹å‘的次数。"
+"返回上次调用 [method move_and_slide] 或 [method move_and_slide_with_snap] 期"
+"间物体å‘ç”Ÿç¢°æ’žå’Œæ”¹å˜æ–¹å‘的次数。"
#: doc/classes/KinematicBody.xml:67 doc/classes/KinematicBody2D.xml:65
-#, fuzzy
msgid ""
"Returns [code]true[/code] if the body collided with the ceiling on the last "
"call of [method move_and_slide] or [method move_and_slide_with_snap]. "
"Otherwise, returns [code]false[/code]."
msgstr ""
-"返回最åŽä¸€ä¸ªç¢°æ’žç‚¹çš„地æ¿çš„è¡¨é¢æ³•çº¿ã€‚åªæœ‰åœ¨è°ƒç”¨[method move_and_slide]或"
-"[method move_and_slide_with_snap]åŽï¼Œä»¥åŠ[method is_on_floor]返回[code]true[/"
-"code]æ—¶æ‰æœ‰æ•ˆã€‚"
+"如果在最åŽä¸€æ¬¡è°ƒç”¨ [method move_and_slide] 或 [method "
+"move_and_slide_with_snap] 时物体与天花æ¿å‘生碰撞,则返回 [code]true[/code]。"
+"å¦åˆ™ï¼Œè¿”回 [code]false[/code]。"
#: doc/classes/KinematicBody.xml:73 doc/classes/KinematicBody2D.xml:71
-#, fuzzy
msgid ""
"Returns [code]true[/code] if the body collided with the floor on the last "
"call of [method move_and_slide] or [method move_and_slide_with_snap]. "
"Otherwise, returns [code]false[/code]."
msgstr ""
-"返回最åŽä¸€ä¸ªç¢°æ’žç‚¹åœ°æ¿çš„线速度。仅在调用 [method move_and_slide] 或 [method "
-"move_and_slide_with_snap] 且 [method is_on_floor] 返回 [code]true[/code] åŽæœ‰"
-"效。"
+"如果在最åŽä¸€æ¬¡è°ƒç”¨ [method move_and_slide] 或 [method "
+"move_and_slide_with_snap] 时物体与地æ¿å‘生碰撞,则返回 [code]true[/code]。å¦"
+"则,返回 [code]false[/code]。"
#: doc/classes/KinematicBody.xml:79 doc/classes/KinematicBody2D.xml:77
-#, fuzzy
msgid ""
"Returns [code]true[/code] if the body collided with a wall on the last call "
"of [method move_and_slide] or [method move_and_slide_with_snap]. Otherwise, "
"returns [code]false[/code]."
msgstr ""
-"返回最åŽä¸€ä¸ªç¢°æ’žç‚¹çš„地æ¿çš„è¡¨é¢æ³•çº¿ã€‚åªæœ‰åœ¨è°ƒç”¨[method move_and_slide]或"
-"[method move_and_slide_with_snap]åŽï¼Œä»¥åŠ[method is_on_floor]返回[code]true[/"
-"code]æ—¶æ‰æœ‰æ•ˆã€‚"
+"如果在最åŽä¸€æ¬¡è°ƒç”¨ [method move_and_slide] 或 [method "
+"move_and_slide_with_snap] 时物体与墙å£å‘生碰撞,则返回 [code]true[/code]。å¦"
+"则,返回 [code]false[/code]。"
#: doc/classes/KinematicBody.xml:89
#, fuzzy
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
-"沿ç€å‘é‡[code]rel_vec[/code]ç§»åŠ¨ç‰©ä½“ã€‚å¦‚æžœç‰©ä½“ç¢°æ’žï¼Œå®ƒå°†åœæ­¢ã€‚返回"
-"[KinematicCollision2D]ï¼Œå…¶ä¸­åŒ…å«æœ‰å…³ç¢°æ’žçš„ä¿¡æ¯ã€‚\n"
-"如果[code]test_only[/code]为[code]true[/code],则物体ä¸ä¼šç§»åŠ¨ï¼Œä½†ä¼šæä¾›å¯èƒ½çš„"
-"碰撞信æ¯ã€‚"
+"沿å‘é‡ [code]rel_vec[/code] ç§»åŠ¨ç‰©ä½“ã€‚å¦‚æžœç¢°æ’žï¼Œç‰©ä½“ä¼šåœæ­¢ã€‚返回 "
+"[KinematicCollision]ï¼Œå…¶ä¸­åŒ…å«æœ‰å…³ç¢°æ’žçš„ä¿¡æ¯ã€‚\n"
+"如果 [code]test_only[/code] 是 [code]true[/code],则物体ä¸ä¼šç§»åŠ¨ï¼Œä½†ä¼šç»™å‡ºå¯"
+"能å‘生的碰撞信æ¯ã€‚"
#: doc/classes/KinematicBody.xml:102
-#, fuzzy
msgid ""
"Moves the body along a vector. If the body collides with another, it will "
"slide along the other body rather than stop immediately. If the other body "
@@ -36969,28 +38066,30 @@ msgid ""
"automatically added to the body motion. If a collision occurs due to the "
"platform's motion, it will always be first in the slide collisions."
msgstr ""
-"沿ç€å‘é‡ç§»åŠ¨ç‰©ä½“ã€‚å¦‚æžœè¯¥ä½“ä¸Žå¦ä¸€ä¸ªç‰©ä½“相撞,它将沿ç€å¦ä¸€ä¸ªç‰©ä½“æ»‘åŠ¨ï¼Œè€Œä¸æ˜¯ç«‹"
-"å³åœæ­¢ã€‚如果å¦ä¸€ä¸ªç‰©ä½“是[KinematicBody3D]或[RigidBody3D],它也会被å¦ä¸€ä¸ªç‰©ä½“"
-"çš„è¿åŠ¨æ‰€å½±å“。你å¯ä»¥ç”¨å®ƒæ¥åˆ¶ä½œç§»åŠ¨æˆ–æ—‹è½¬çš„å¹³å°ï¼Œæˆ–者让节点推动其他节点。\n"
+"沿ç€å‘é‡ç§»åŠ¨ç‰©ä½“ã€‚å¦‚æžœè¿™ä¸ªç‰©ä½“ä¸Žå¦ä¸€ä¸ªç‰©ä½“相撞,它将沿ç€å¦ä¸€ä¸ªç‰©ä½“滑动,而ä¸"
+"是立å³åœæ­¢ã€‚如果å¦ä¸€ä¸ªç‰©ä½“是[KinematicBody]或[RigidBody],它也会被å¦ä¸€ä¸ªç‰©ä½“"
+"çš„è¿åŠ¨æ‰€å½±å“。你å¯ä»¥ç”¨å®ƒæ¥åˆ¶ä½œç§»åŠ¨å’Œæ—‹è½¬çš„å¹³å°ï¼Œæˆ–者让节点推动其他节点。\n"
"这个方法应该在[method Node._physics_process]中使用,或者在被[method Node."
"_physics_process]è°ƒç”¨çš„æ–¹æ³•ä¸­ä½¿ç”¨ï¼Œå› ä¸ºå®ƒåœ¨è®¡ç®—æ—¶ï¼Œè‡ªåŠ¨ä½¿ç”¨ç‰©ç†æ­¥éª¤çš„"
-"[code]delta[/code]值。å¦åˆ™ï¼Œæ¨¡æ‹Ÿçš„è¿è¡Œé€Ÿåº¦å°†ä¸æ­£ç¡®ã€‚\n"
-"[code]linear_velocity[/code] 是速度å‘é‡ï¼Œé€šå¸¸æ˜¯ç±³/秒。与[method "
-"move_and_collide]ä¸åŒçš„æ˜¯ï¼Œä½ [i]ä¸åº”该[/i]将其乘以[code]delta[/code]--物ç†å¼•"
+"[code]delta[/code]值。å¦åˆ™ï¼Œæ¨¡æ‹Ÿå°†ä»¥ä¸æ­£ç¡®çš„速度è¿è¡Œã€‚\n"
+"[code]linear_velocity[/code]是速度å‘é‡ï¼Œé€šå¸¸æ˜¯ç±³/秒。与[method "
+"move_and_collide]ä¸åŒçš„æ˜¯ï¼Œä½ [i]ä¸åº”该[/i]把它乘以[code]delta[/code]--物ç†å¼•"
"擎会处ç†åº”用速度。\n"
"[code]up_direction[/code] 是å‘上的方å‘,用æ¥ç¡®å®šä»€ä¹ˆæ˜¯å¢™ï¼Œä»€ä¹ˆæ˜¯åœ°æ¿æˆ–天花"
-"æ¿ã€‚如果设置为默认值[code]Vector3(0, 0, 0)[/code],所有都被认为是墙。\n"
+"æ¿ã€‚如果设置为默认值[code]Vector3(0, 0, 0)[/code],一切都被认为是墙。\n"
"如果[code]stop_on_slope[/code]是[code]true[/code],当你在"
-"[code]lineal_velocity[/code]中包å«é‡åŠ›ï¼Œå¹¶ä¸”ç‰©ä½“é™æ­¢æ—¶ï¼Œç‰©ä½“å°†ä¸ä¼šåœ¨æ–œå¡ä¸Šæ»‘"
+"[code]linear_velocity[/code]中包å«é‡åŠ›å¹¶ä¸”ç‰©ä½“é™æ­¢æ—¶ï¼Œç‰©ä½“å°†ä¸ä¼šåœ¨æ–œå¡ä¸Šæ»‘"
"动。\n"
-"如果物体å‘ç”Ÿç¢°æ’žï¼Œå®ƒå°†åœ¨åœæ­¢å‰ï¼Œæœ€å¤šæ”¹å˜[code]max_slides[/code]次方å‘。\n"
-"[code]floor_max_angle[/code]是一个最大的角度(弧度),在这个角度里,一个斜å¡"
+"如果物体å‘ç”Ÿç¢°æ’žï¼Œå®ƒæœ€å¤šä¼šæ”¹å˜æ–¹å‘[code]max_slides[/code]次æ‰ä¼šåœæ­¢ã€‚\n"
+"[code]floor_max_angle[/code]是一个最大的角度(弧度),在这个角度下,一个斜å¡"
"ä»ç„¶è¢«è®¤ä¸ºæ˜¯åœ°æ¿æˆ–天花æ¿ï¼Œè€Œä¸æ˜¯å¢™å£ã€‚默认值等于45度。\n"
"如果[code]infinite_inertia[/code]是[code]true[/code],物体将能够推动"
-"[RigidBody3D]节点,但它也ä¸ä¼šæ£€æµ‹åˆ°æ‰€æœ‰ä¸Žå®ƒä»¬çš„碰撞。如果[code]false[/code],"
-"它将åƒ[RigidBody3D]节点与[StaticBody3D]一样互动。\n"
-"返回[code]linear_velocity[/code]å‘é‡ï¼Œå¦‚æžœå‘生了滑动碰撞,则旋转和/或缩放。è¦"
-"获得å‘生碰撞的详细信æ¯ï¼Œè¯·ä½¿ç”¨[method get_slide_collision]。"
+"[RigidBody]节点,但它也ä¸ä¼šæ£€æµ‹åˆ°ä»»ä½•与它们的碰撞。如果[code]false[/code],它"
+"将与[RigidBody]节点åƒ[StaticBody]一样交互。\n"
+"返回[code]linear_velocity[/code]å‘é‡ï¼Œå¦‚æžœå‘生滑动碰撞,则旋转和/或缩放。è¦èŽ·"
+"å¾—å‘生碰撞的详细信æ¯ï¼Œè¯·ä½¿ç”¨[method get_slide_collision]。\n"
+"å½“ç‰©ä½“æŽ¥è§¦åˆ°ä¸€ä¸ªç§»åŠ¨çš„å¹³å°æ—¶ï¼Œå¹³å°çš„速度会自动加入到物体的è¿åŠ¨ä¸­ã€‚å¦‚æžœç”±äºŽå¹³"
+"å°çš„è¿åŠ¨è€Œå‘生碰撞,它将始终是滑动碰撞中的第一个。"
#: doc/classes/KinematicBody.xml:124
msgid ""
@@ -37007,40 +38106,41 @@ msgstr ""
"code]或者使用[method move_and_slide]æ¥å®žçŽ°ã€‚"
#: doc/classes/KinematicBody.xml:133
-#, fuzzy
msgid ""
"Locks or unlocks the specified [code]axis[/code] depending on the value of "
"[code]lock[/code]. See also [member move_lock_x], [member move_lock_y] and "
"[member move_lock_z]."
msgstr ""
"æ ¹æ®[code]lock[/code]的值,é”å®šæˆ–è§£é”æŒ‡å®šçš„[code]axis[/code]。å‚阅[member "
-"axis_lock_motion_x], [member axis_lock_motion_y] 和 [member "
-"axis_lock_motion_z]。"
+"move_lock_x]ã€[member move_lock_y]å’Œ[member move_lock_z]。"
#: doc/classes/KinematicBody.xml:142
+#, fuzzy
msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
"在ä¸ç§»åŠ¨ç‰©ä½“çš„æƒ…å†µä¸‹æ£€æŸ¥ç¢°æ’žæƒ…å†µã€‚å®žé™…ä¸Šæ˜¯å°†èŠ‚ç‚¹çš„ä½ç½®ã€æ¯”例和旋转设置为给定"
"çš„[Transform],然åŽå°è¯•沿ç€çŸ¢é‡[code]rel_vec[/code]移动物体。如果会å‘生碰撞,"
"返回[code]true[/code]。"
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr "é”定物体的Xè½´è¿åŠ¨ã€‚"
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr "é”定物体的Yè½´è¿åŠ¨ã€‚"
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr "é”定物体的Zè½´è¿åŠ¨ã€‚"
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -37054,8 +38154,15 @@ msgid ""
"scale to avoid visible jittering, or for stability with a stack of kinematic "
"bodies."
msgstr ""
+"在è¿åŠ¨å‡½æ•°ä¸­ç”¨äºŽç¢°æ’žæ¢å¤çš„é¢å¤–è¾¹è·ï¼Œå‚阅[method move_and_collide], [method "
+"move_and_slide], [method move_and_slide_with_snap]。\n"
+"如果物体离å¦ä¸€ä¸ªç‰©ä½“至少这么近,它就会认为它们正在å‘生碰撞,并在执行实际è¿åЍ"
+"之å‰è¢«æŽ¨å¼€ã€‚\n"
+"一个较高的值æ„味ç€å®ƒåœ¨æ£€æµ‹ç¢°æ’žæ—¶æ›´åŠ çµæ´»ï¼Œè¿™æœ‰åŠ©äºŽæŒç»­æ£€æµ‹å¢™å£å’Œåœ°æ¿ã€‚\n"
+"一个较低的值迫使碰撞算法使用更精确的检测,所以它å¯ä»¥ç”¨äºŽç‰¹åˆ«éœ€è¦ç²¾ç¡®æ€§çš„æƒ…"
+"况,例如在éžå¸¸ä½Žçš„æ¯”例下é¿å…å¯è§çš„æŠ–动,或者用于è¿åЍ体堆å çš„稳定性。"
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -37066,30 +38173,29 @@ msgstr ""
"为è¿åŠ¨è®¾ç½®åŠ¨ç”»æ—¶ï¼Œä¾‹å¦‚åœ¨ç§»åŠ¨å¹³å°ä¸Šï¼Œè¿™ä¸ªåŠŸèƒ½å¾ˆæœ‰ç”¨ã€‚è¯·[b]ä¸è¦[/b]与 [method "
"move_and_slide] 或 [method move_and_collide] 函数一起使用。"
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
-msgstr ""
+msgstr "é”定物体的Xè½´è¿åŠ¨ã€‚å·²è¢«åºŸå¼ƒçš„[member axis_lock_motion_x]的别å。"
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
-msgstr ""
+msgstr "é”定物体的Yè½´è¿åŠ¨ã€‚å·²è¢«åºŸå¼ƒçš„[member axis_lock_motion_y]的别å。"
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
-msgstr ""
+msgstr "é”定物体的Zè½´è¿åŠ¨ã€‚å·²è¢«åºŸå¼ƒçš„[member axis_lock_motion_z]的别å。"
#: doc/classes/KinematicBody2D.xml:4
msgid "Kinematic body 2D node."
msgstr "2Dè¿åŠ¨ä½“èŠ‚ç‚¹ã€‚"
#: doc/classes/KinematicBody2D.xml:7
-#, fuzzy
msgid ""
"Kinematic bodies are special types of bodies that are meant to be user-"
"controlled. They are not affected by physics at all; to other types of "
@@ -37106,47 +38212,45 @@ msgid ""
"while performing collision tests. This makes them really useful to implement "
"characters that collide against a world, but don't require advanced physics."
msgstr ""
-"è¿åŠ¨å­¦å®žä½“æ˜¯æ—¨åœ¨ç”±ç”¨æˆ·æŽ§åˆ¶çš„ç‰¹æ®Šç±»åž‹çš„å®žä½“ã€‚å®ƒä»¬å®Œå…¨ä¸å—物ç†å½±å“;对于其他类"
-"åž‹çš„ç‰©ä½“ï¼Œä¾‹å¦‚è§’è‰²æˆ–åˆšä½“ï¼Œè¿™äº›ä¸Žé™æ€ç‰©ä½“相åŒã€‚但是,它们有两个主è¦ç”¨é€”:\n"
-"[b]模拟è¿åŠ¨ï¼š[/b]当这些物体被手动移动时,无论是从代ç è¿˜æ˜¯ä»Ž[AnimationPlayer]"
-"([member AnimationPlayer.playback_process_mode]设置为“物ç†â€ï¼‰ï¼Œç‰©ç†å°†è‡ªåŠ¨è®¡"
-"ç®—ä¼°è®¡å®ƒä»¬çš„çº¿æ€§å’Œè§’é€Ÿåº¦ã€‚è¿™ä½¿å¾—å®ƒä»¬å¯¹äºŽç§»åŠ¨å¹³å°æˆ–å…¶ä»– AnimationPlayer 控制的"
-"å¯¹è±¡ï¼ˆå¦‚é—¨ã€æ‰“开的桥等)éžå¸¸æœ‰ç”¨ã€‚\n"
-"[b]è¿åŠ¨å­¦ç‰¹å¾ï¼š[/b] KinematicBody2D 在执行碰撞测试时也有一个用于移动物体的 "
-"API([method move_and_collide] 和 [method move_and_slide] 方法)。这使得它们"
-"对于实现与世界å‘生碰撞但ä¸éœ€è¦é«˜çº§ç‰©ç†çš„角色éžå¸¸æœ‰ç”¨ã€‚"
+"è¿åŠ¨ä½“æ˜¯ç‰¹æ®Šç±»åž‹çš„ç‰©ä½“ï¼Œæ—¨åœ¨è®©ç”¨æˆ·æŽ§åˆ¶ã€‚å®ƒä»¬å®Œå…¨ä¸å—物ç†å½±å“;对于其他类型的"
+"ç‰©ä½“ï¼Œå¦‚è§’è‰²æˆ–åˆšä½“ï¼Œå®ƒä»¬ä¸Žé™æ€ä½“一样。然而,它们有两个主è¦ç”¨é€”:\n"
+"[b]模拟è¿åŠ¨ï¼š[/b]当这些物体被手动移动时,无论是从代ç è¿˜æ˜¯ä»Ž"
+"[AnimationPlayer],将[member AnimationPlayer.playback_process_mode]设置为 "
+"\"physics\",物ç†å°†è‡ªåŠ¨è®¡ç®—å…¶çº¿æ€§å’Œè§’é€Ÿåº¦çš„ä¼°å€¼ã€‚è¿™ä½¿å¾—å®ƒä»¬å¯¹äºŽç§»åŠ¨å¹³å°æˆ–å…¶ä»–"
+"AnimationPlayer控制的物体éžå¸¸æœ‰ç”¨ï¼Œæ¯”如一扇门ã€ä¸€åº§èƒ½æ‰“开的桥等。\n"
+"[b]è¿åŠ¨åž‹è§’è‰²ï¼š[/b] KinematicBody2D也有一个API用于移动物体([method "
+"move_and_collide]å’Œ[method move_and_slide]æ–¹æ³•ï¼‰ï¼ŒåŒæ—¶è¿›è¡Œç¢°æ’žæµ‹è¯•。这使得它"
+"们在实现对世界进行碰撞,但ä¸éœ€è¦é«˜çº§ç‰©ç†çš„角色时éžå¸¸æœ‰ç”¨ã€‚"
#: doc/classes/KinematicBody2D.xml:13
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/physics/"
"using_kinematic_body_2d.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/physics/"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/physics/"
"using_kinematic_body_2d.html"
#: doc/classes/KinematicBody2D.xml:22
-#, fuzzy
msgid ""
"Returns the floor's collision angle at the last collision point according to "
"[code]up_direction[/code], which is [code]Vector2.UP[/code] by default. This "
"value is always positive and only valid after calling [method "
"move_and_slide] and when [method is_on_floor] returns [code]true[/code]."
msgstr ""
-"返回最åŽä¸€ä¸ªç¢°æ’žç‚¹åœ°æ¿çš„线速度。仅在调用 [method move_and_slide] 或 [method "
-"move_and_slide_with_snap] 且 [method is_on_floor] 返回 [code]true[/code] åŽæœ‰"
-"效。"
+"æ ¹æ®[code]up_direction[/code]返回最åŽä¸€ä¸ªç¢°æ’žç‚¹çš„地æ¿ç¢°æ’žè§’度,默认为"
+"[code]Vector2.UP[/code]。此值始终为正值,并且仅在调用 [method "
+"move_and_slide] åŽä¸”当 [method is_on_floor] 返回 [code]true[/code] 时有效。"
#: doc/classes/KinematicBody2D.xml:40
-#, fuzzy
msgid ""
"Returns a [KinematicCollision2D], which contains information about the "
"latest collision that occurred during the last call to [method "
"move_and_slide]."
msgstr ""
-"返回在最åŽä¸€æ¬¡è°ƒç”¨[method move_and_slide]时实体å‘ç”Ÿç¢°æ’žå’Œæ”¹å˜æ–¹å‘的次数。"
+"返回[KinematicCollision2D],它包å«åœ¨æœ€åŽä¸€æ¬¡è°ƒç”¨[method move_and_slide]æ—¶å‘生"
+"的最新碰撞信æ¯ã€‚"
#: doc/classes/KinematicBody2D.xml:47
-#, fuzzy
msgid ""
"Returns a [KinematicCollision2D], which contains information about a "
"collision that occurred during the last call to [method move_and_slide] or "
@@ -37160,22 +38264,24 @@ msgid ""
" print(\"Collided with: \", collision.collider.name)\n"
"[/codeblock]"
msgstr ""
-"返回一个[KinematicCollision2D],它包å«äº†åœ¨æœ€åŽä¸€æ¬¡[method move_and_slide]调用"
-"æ—¶å‘生的碰撞的信æ¯ã€‚由于在一次对[method move_and_slide]的调用中,身体å¯ä»¥å‘生"
-"多次碰撞,所以你必须在0到([method get_slide_count] - 1)的范围内指定碰撞的索"
-"引。\n"
-"[b]使用实例:[/b]\n"
+"返回 [KinematicCollision2D]ï¼Œå…¶ä¸­åŒ…å«æœ‰å…³ä¸Šæ¬¡è°ƒç”¨ [method move_and_slide] 或 "
+"[method move_and_slide_with_snap] 期间å‘生的碰撞的信æ¯ã€‚由于物体å¯ä»¥åœ¨ä¸€æ¬¡è°ƒ"
+"用 [method move_and_slide] æ—¶å‘生多次碰撞,因此你必须在 0 到 ([method "
+"get_slide_count] - 1) 范围内指定碰撞的索引。\n"
+"[b]用法示例:[/b]\n"
"[codeblock]\n"
"for i in get_slide_count():\n"
" var collision = get_slide_collision(i)\n"
-" print(\"Collided with: \" , collision.collider.name)\n"
+" print(\"Collided with: \", collision.collider.name)\n"
"[/codeblock]"
#: doc/classes/KinematicBody2D.xml:87
+#, fuzzy
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -37185,7 +38291,6 @@ msgstr ""
"碰撞信æ¯ã€‚"
#: doc/classes/KinematicBody2D.xml:100
-#, fuzzy
msgid ""
"Moves the body along a vector. If the body collides with another, it will "
"slide along the other body rather than stop immediately. If the other body "
@@ -37222,29 +38327,32 @@ msgid ""
"automatically added to the body motion. If a collision occurs due to the "
"platform's motion, it will always be first in the slide collisions."
msgstr ""
-"沿å‘é‡ç§»åŠ¨ç‰©ä½“ã€‚å¦‚æžœç‰©ä½“ä¸Žå¦ä¸€ä¸ªç‰©ä½“碰撞,它会沿ç€å¦ä¸€ä¸ªç‰©ä½“æ»‘åŠ¨è€Œä¸æ˜¯ç«‹å³åœ"
-"止。如果å¦ä¸€ä¸ªç‰©ä½“是[KinematicBody2D]或[RigidBody2D],它也会å—到å¦ä¸€ä¸ªç‰©ä½“çš„"
-"è¿åŠ¨çš„å½±å“。你å¯ä»¥ä½¿ç”¨å®ƒæ¥åˆ¶ä½œç§»åŠ¨æˆ–æ—‹è½¬å¹³å°ï¼Œæˆ–者让节点推动其他节点。\n"
-"此方法应在 [method Node._physics_process](或者在被[method Node."
-"_physics_process]è°ƒç”¨çš„æ–¹æ³•ï¼‰ä¸­ä½¿ç”¨å› ä¸ºå®ƒåœ¨è®¡ç®—ä¸­è‡ªåŠ¨ä½¿ç”¨ç‰©ç†æ­¥éª¤çš„"
-"[code]delta[/code]值。å¦åˆ™ï¼Œæ¨¡æ‹Ÿå°†ä»¥é”™è¯¯çš„速度è¿è¡Œã€‚\n"
-"[code]linear_velocity[/code]是线速度å‘é‡ï¼Œå•使˜¯åƒç´ æ¯ç§’。与[method "
-"move_and_collide]ä¸åŒçš„æ˜¯ï¼Œä½ [i]ä¸åº”该[/i]将它乘以[code]delta[/code]——物ç†å¼•"
+"沿ç€å‘é‡ç§»åŠ¨ç‰©ä½“ã€‚å¦‚æžœè¿™ä¸ªç‰©ä½“ä¸Žå¦ä¸€ä¸ªç‰©ä½“相撞,它将沿ç€å¦ä¸€ä¸ªç‰©ä½“滑动,而ä¸"
+"是立å³åœæ­¢ã€‚如果å¦ä¸€ä¸ªç‰©ä½“是[KinematicBody2D]或[RigidBody2D],它也会被å¦ä¸€ä¸ª"
+"物体的è¿åŠ¨æ‰€å½±å“。你å¯ä»¥ç”¨å®ƒæ¥åˆ¶ä½œç§»åŠ¨å’Œæ—‹è½¬çš„å¹³å°ï¼Œæˆ–者让节点推动其他节"
+"点。\n"
+"这个方法应该在[method Node._physics_process]中使用,或者在被[method Node."
+"_physics_process]è°ƒç”¨çš„æ–¹æ³•ä¸­ä½¿ç”¨ï¼Œå› ä¸ºå®ƒåœ¨è®¡ç®—æ—¶è‡ªåŠ¨ä½¿ç”¨ç‰©ç†æ­¥éª¤çš„"
+"[code]delta[/code]值。å¦åˆ™ï¼Œæ¨¡æ‹Ÿå°†ä»¥ä¸æ­£ç¡®çš„速度è¿è¡Œã€‚\n"
+"[code]linear_velocity[/code]是速度å‘é‡ï¼Œå•使˜¯åƒç´ æ¯ç§’。与[method "
+"move_and_collide]ä¸åŒçš„æ˜¯ï¼Œä½ [i]ä¸åº”该[/i]将它乘以[code]delta[/code]--物ç†å¼•"
"擎会处ç†åº”用速度。\n"
-"[code]up_direction[/code]是å‘上的方å‘,用æ¥åˆ¤æ–­ä»€ä¹ˆæ˜¯å¢™ï¼Œä»€ä¹ˆæ˜¯åœ°æ¿æˆ–天花æ¿ã€‚"
-"如果设置为默认值 [code]Vector2(0, 0)[/code],则一切都被视为墙。这对于俯视视角"
-"(topdown )的游æˆå¾ˆæœ‰ç”¨ã€‚\n"
-"如果 [code]stop_on_slope[/code] 是 [code]true[/code],当你在"
-"[code]linear_velocity[/code]中包å«é‡åŠ›å¹¶ä¸”ç‰©ä½“é™æ­¢æ—¶ï¼Œç‰©ä½“å°†ä¸ä¼šåœ¨æ–œå¡ä¸Šæ»‘"
+"[code]up_direction[/code] 是å‘上的方å‘,用æ¥ç¡®å®šä»€ä¹ˆæ˜¯å¢™ï¼Œä»€ä¹ˆæ˜¯åœ°æ¿æˆ–天花"
+"æ¿ã€‚如果设置为默认值[code]Vector2(0, 0)[/code],一切都被认为是墙。这对于自上"
+"而下的游æˆå¾ˆæœ‰ç”¨ã€‚\n"
+"如果[code]stop_on_slope[/code]是[code]true[/code],当你在"
+"[code]linear_velocity[/code]中包å«é‡åŠ›å¹¶ä¸”ç‰©ä½“é™æ­¢æ—¶ï¼Œç‰©ä½“å°±ä¸ä¼šåœ¨æ–œå¡ä¸Šæ»‘"
"动。\n"
-"如果物体å‘ç”Ÿç¢°æ’žï¼Œå®ƒå°†åœ¨åœæ­¢ä¹‹å‰æœ€å¤šæ”¹å˜æ–¹å‘ [code]max_slides[/code] 次。\n"
-"[code]floor_max_angle[/code] 是最大角度(以弧度为å•ä½ï¼‰ï¼Œåœ¨è¿™ä¸ªè§’度下,一个斜"
-"å¡ä»ç„¶è¢«è®¤ä¸ºæ˜¯åœ°æ¿ï¼ˆæˆ–天花æ¿ï¼‰ï¼Œè€Œä¸æ˜¯å¢™å£ã€‚默认值等于45度。\n"
-"如果 [code]infinite_inertia[/code] 无穷惯性是 [code]true[/code],物体将能够推"
-"动 [RigidBody2D] 节点,但它也ä¸ä¼šæ£€æµ‹åˆ°ä¸Žå®ƒä»¬çš„任何碰撞。如果 [code]false[/"
-"code],它将与 [RigidBody2D] 节点交互,就åƒä¸Ž [StaticBody2D] 一样。\n"
-"返回 [code]linear_velocity[/code] å‘é‡ï¼Œå¦‚æžœå‘生滑动碰撞,则旋转和/或缩放。è¦"
-"èŽ·å–æœ‰å…³å‘生的冲çªçš„详细信æ¯ï¼Œè¯·ä½¿ç”¨ [method get_slide_collision]。"
+"如果物体å‘ç”Ÿç¢°æ’žï¼Œå®ƒæœ€å¤šä¼šæ”¹å˜æ–¹å‘[code]max_slides[/code]次æ‰ä¼šåœæ­¢ã€‚\n"
+"[code]floor_max_angle[/code]是一个最大的角度(弧度),在这个角度下,一个斜å¡"
+"ä»ç„¶è¢«è®¤ä¸ºæ˜¯åœ°æ¿æˆ–天花æ¿ï¼Œè€Œä¸æ˜¯å¢™ã€‚默认值等于45度。\n"
+"如果[code]infinite_inertia[/code]是[code]true[/code],物体将能够推动"
+"[RigidBody2D]节点,但它也ä¸ä¼šæ£€æµ‹åˆ°ä»»ä½•与它们的碰撞。如果[code]false[/code],"
+"它将与[RigidBody2D]节点åƒ[StaticBody2D]一样交互。\n"
+"返回[code]linear_velocity[/code]å‘é‡ï¼Œå¦‚æžœå‘生滑动碰撞,则旋转和/或缩放。è¦èŽ·"
+"å¾—å‘生碰撞的详细信æ¯ï¼Œè¯·ä½¿ç”¨[method get_slide_collision]。\n"
+"å½“ç‰©ä½“æŽ¥è§¦åˆ°ä¸€ä¸ªç§»åŠ¨çš„å¹³å°æ—¶ï¼Œå¹³å°çš„速度会自动加入到物体的è¿åŠ¨ä¸­ã€‚å¦‚æžœç”±äºŽå¹³"
+"å°çš„è¿åŠ¨è€Œå‘生碰撞,它将始终是滑动碰撞中的第一个。"
#: doc/classes/KinematicBody2D.xml:122
msgid ""
@@ -37261,23 +38369,24 @@ msgstr ""
"或使用 [method move_and_slide]æ¥åšåˆ°è¿™ä¸€ç‚¹ã€‚"
#: doc/classes/KinematicBody2D.xml:132
+#, fuzzy
msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
"在ä¸ç§»åŠ¨ç‰©ä½“çš„æƒ…å†µä¸‹æ£€æŸ¥ç¢°æ’žã€‚å°†èŠ‚ç‚¹çš„åæ ‡ï¼Œæ¯”例和旋转虚拟地设置为给定"
"[Transform2D]çš„åæ ‡ï¼Œæ¯”例和旋转,然åŽå°è¯•沿ç€å‘é‡[code]rel_vec[/code]移动物"
"体。如果å‘生碰撞,则返回[code]true[/code]。"
#: doc/classes/KinematicCollision.xml:4
-#, fuzzy
msgid "Collision data for [KinematicBody] collisions."
-msgstr "[KinematicBody2D] 动æ€ç‰©ä½“2D碰撞器碰撞的数æ®ã€‚"
+msgstr "[KinematicBody] 碰撞的碰撞数æ®ã€‚"
#: doc/classes/KinematicCollision.xml:7
-#, fuzzy
msgid ""
"Contains collision data for [KinematicBody] collisions. When a "
"[KinematicBody] is moved using [method KinematicBody.move_and_collide], it "
@@ -37287,17 +38396,19 @@ msgid ""
"colliding object, the remaining motion, and the collision position. This "
"information can be used to calculate a collision response."
msgstr ""
-"包å«[KinematicBody2D]碰撞的碰撞数æ®ã€‚当使用 [method KinematicBody2D."
-"move_and_collide] 移动[KinematicBody2D]时,如果检测到与å¦ä¸€ä¸ªç‰©ä½“的碰撞,它将"
-"åœæ­¢ã€‚如果检测到碰撞,则返回KinematicCollision2D对象。\n"
-"è¯¥å¯¹è±¡åŒ…å«æœ‰å…³ç¢°æ’žçš„ä¿¡æ¯ï¼ŒåŒ…括碰撞对象,剩余è¿åŠ¨å’Œç¢°æ’žåæ ‡ã€‚该信æ¯å¯ç”¨äºŽè®¡ç®—"
-"碰撞å“应。"
+"包å«[KinematicBody]碰撞的碰撞数æ®ã€‚当[KinematicBody]使用[method "
+"KinematicBody.move_and_collide]移动时,如果它检测到与å¦ä¸€ä¸ªç‰©ä½“的碰撞就会åœ"
+"止。如果检测到碰撞,将返回一个KinematicCollision对象。\n"
+"这个对象包å«å…³äºŽç¢°æ’žçš„ä¿¡æ¯ï¼ŒåŒ…括碰撞的物体ã€å‰©ä½™çš„è¿åŠ¨å’Œç¢°æ’žçš„ä½ç½®ã€‚这些信æ¯"
+"å¯ä»¥ç”¨æ¥è®¡ç®—碰撞å“应。"
#: doc/classes/KinematicCollision.xml:17
msgid ""
"The collision angle according to [code]up_direction[/code], which is "
"[code]Vector3.UP[/code] by default. This value is always positive."
msgstr ""
+"æ ¹æ®[code]up_direction[/code]的碰撞角度,默认为[code]Vector3.UP[/code]。这个"
+"值总是为正。"
#: doc/classes/KinematicCollision.xml:23
#: doc/classes/KinematicCollision2D.xml:23
@@ -37316,9 +38427,8 @@ msgid "The colliding body's metadata. See [Object]."
msgstr "碰撞体的元数æ®ã€‚å‚阅[Object]。"
#: doc/classes/KinematicCollision.xml:32
-#, fuzzy
msgid "The colliding body's [RID] used by the [PhysicsServer]."
-msgstr "碰撞体的形状。"
+msgstr "[PhysicsServer] 使用的碰撞体的 [RID]。"
#: doc/classes/KinematicCollision.xml:35
#: doc/classes/KinematicCollision2D.xml:35
@@ -37326,9 +38436,8 @@ msgid "The colliding body's shape."
msgstr "碰撞体的形状。"
#: doc/classes/KinematicCollision.xml:38
-#, fuzzy
msgid "The colliding shape's index. See [CollisionObject]."
-msgstr "碰撞形状的索引。å‚阅[CollisionObject2D]。"
+msgstr "碰撞形状的索引。å‚阅[CollisionObject]。"
#: doc/classes/KinematicCollision.xml:41
#: doc/classes/KinematicCollision2D.xml:41
@@ -37385,10 +38494,12 @@ msgid ""
"The collision angle according to [code]up_direction[/code], which is "
"[code]Vector2.UP[/code] by default. This value is always positive."
msgstr ""
+"æ ¹æ®[code]up_direction[/code]的碰撞角度,默认为[code]Vector2.UP[/code]。这个"
+"值总是为正。"
#: doc/classes/KinematicCollision2D.xml:32
msgid "The colliding body's [RID] used by the [Physics2DServer]."
-msgstr ""
+msgstr "[Physics2DServer] 使用的碰撞体的 [RID]。"
#: doc/classes/KinematicCollision2D.xml:38
msgid "The colliding shape's index. See [CollisionObject2D]."
@@ -37403,7 +38514,6 @@ msgstr ""
"[RichTextLabel]。"
#: doc/classes/Label.xml:7
-#, fuzzy
msgid ""
"Label displays plain text on the screen. It gives you control over the "
"horizontal and vertical alignment and can wrap the text inside the node's "
@@ -37418,13 +38528,15 @@ msgid ""
"emoji) are [i]not[/i] supported on Windows. They will display as unknown "
"characters instead. This will be resolved in Godot 4.0."
msgstr ""
-"Label标签在å±å¹•上显示纯文本。你å¯ä»¥æŽ§åˆ¶æ°´å¹³å’Œåž‚ç›´çš„å¯¹é½æ–¹å¼ï¼Œå¹¶å¯ä»¥å°†æ–‡æœ¬åŒ…裹"
-"åœ¨èŠ‚ç‚¹çš„è¾¹ç•ŒçŸ©å½¢å†…ã€‚å®ƒä¸æ”¯æŒç²—ä½“ã€æ–œä½“或其他格å¼åŒ–,对于这点,请使用"
-"[RichTextLabel]代替。\n"
-"[b]注æ„:[/b] 与大多数其他[Control]相å,Labelçš„[member Control.mouse_filter]"
-"默认为[constant Control.MOUSE_FILTER_IGNORE],å³ï¼Œå®ƒå¯¹é¼ æ ‡è¾“入事件没有å应。"
-"è¿™æ„å‘³ç€æ ‡ç­¾ä¸ä¼šæ˜¾ç¤ºä»»ä½•é…置的[member Control.hint_tooltip],除éžä½ æ”¹å˜å…¶é¼ æ ‡"
-"过滤器。"
+"标签在å±å¹•上显示纯文本。å¯ä»¥æŽ§åˆ¶æ°´å¹³å’Œåž‚ç›´çš„å¯¹é½æ–¹å¼ï¼Œå¹¶ä¸”å¯ä»¥å°†æ–‡æœ¬åŒ…裹在节"
+"ç‚¹çš„è¾¹ç•ŒçŸ©å½¢å†…ã€‚å®ƒä¸æ”¯æŒç²—ä½“ã€æ–œä½“或其他格å¼ã€‚若使用,请改用 "
+"[RichTextLabel]。\n"
+"[b]注æ„:[/b] 与大多数其他 [Control] ä¸åŒï¼ŒLabel çš„ [member Control."
+"mouse_filter] 默认为 [constant Control.MOUSE_FILTER_IGNORE],å³å®ƒä¸å“应鼠标输"
+"入事件。这æ„å‘³ç€æ ‡ç­¾ä¸ä¼šæ˜¾ç¤ºä»»ä½•å·²é…置的 [member Control.hint_tooltip],除éž"
+"更改其鼠标过滤器。\n"
+"[b]注æ„:[/b] [code]0xffff[/code] 之åŽçš„ Unicode 字符在 Windows 上 [i]䏿”¯æŒ "
+"[/i],例如大多数表情符å·ï¼Œå®ƒä»¬å°†æ˜¾ç¤ºä¸ºæœªçŸ¥å­—符。这将在 Godot 4.0 中解决。"
#: doc/classes/Label.xml:18
msgid "Returns the amount of lines of text the Label has."
@@ -37464,13 +38576,11 @@ msgstr ""
"它将自动改å˜å…¶é«˜åº¦ä»¥æ˜¾ç¤ºæ‰€æœ‰çš„æ–‡æœ¬ã€‚"
#: doc/classes/Label.xml:48
-#, fuzzy
msgid ""
"If [code]true[/code], the Label only shows the text that fits inside its "
"bounding rectangle and will clip text horizontally."
msgstr ""
-"如果[code]true[/code]ï¼Œæ ‡ç­¾åªæ˜¾ç¤ºé€‚åˆå…¶è¾¹ç•ŒçŸ©å½¢çš„æ–‡æœ¬ã€‚它还å…许您自由地缩å°èŠ‚"
-"点。"
+"如果 [code]true[/code],则标签仅显示适åˆå…¶è¾¹ç•ŒçŸ©å½¢çš„æ–‡æœ¬ï¼Œå¹¶å°†æ°´å¹³å‰ªåˆ‡æ–‡æœ¬ã€‚"
#: doc/classes/Label.xml:51
msgid ""
@@ -37581,22 +38691,21 @@ msgid "The vertical offset of the text's shadow."
msgstr "文本阴影的垂直å移。"
#: doc/classes/LargeTexture.xml:4
-#, fuzzy
msgid ""
"[i]Deprecated.[/i] A [Texture] capable of storing many smaller textures with "
"offsets."
-msgstr "[Texture2D] 能够存储许多带有åç§»é‡çš„较å°çº¹ç†ã€‚"
+msgstr "[i]已弃用。[/i] 一ç§èƒ½å¤Ÿå­˜å‚¨è®¸å¤šå¸¦æœ‰åç§»é‡çš„较å°çº¹ç†çš„ [Texture]。"
#: doc/classes/LargeTexture.xml:7
-#, fuzzy
msgid ""
"[i]Deprecated (will be removed in Godot 4.0).[/i] A [Texture] capable of "
"storing many smaller textures with offsets.\n"
"You can dynamically add pieces ([Texture]s) to this [LargeTexture] using "
"different offsets."
msgstr ""
-"[Texture2D]能够存储许多带有åç§»é‡çš„å°çº¹ç†ã€‚\n"
-"ä½ å¯ä»¥ä½¿ç”¨ä¸åŒçš„åç§»é‡åЍæ€åœ°å°†ç¢Žç‰‡[Texture2D]添加到这个[LargeTexture]中。"
+"[i] 已弃用(将在 Godot 4.0 中移除)。 [/i] 一ç§èƒ½å¤Ÿå­˜å‚¨è®¸å¤šå…·æœ‰åç§»é‡çš„较å°çº¹"
+"ç†çš„ [Texture]。\n"
+"ä½ å¯ä»¥ä½¿ç”¨ä¸åŒçš„åç§»é‡å‘æ­¤ [LargeTexture] åŠ¨æ€æ·»åŠ [Texture]片段。"
#: doc/classes/LargeTexture.xml:18
msgid ""
@@ -37619,9 +38728,8 @@ msgid "Returns the offset of the piece with the index [code]idx[/code]."
msgstr "返回索引为[code]idx[/code]的片段的åç§»é‡ã€‚"
#: doc/classes/LargeTexture.xml:44
-#, fuzzy
msgid "Returns the [Texture] of the piece with the index [code]idx[/code]."
-msgstr "返回索引为[code]idx[/code]的片段的[Texture2D]。"
+msgstr "返回索引为 [code]idx[/code] 的片段的 [Texture]。"
#: doc/classes/LargeTexture.xml:52
msgid ""
@@ -37630,12 +38738,11 @@ msgid ""
msgstr "将索引为[code]idx[/code]的片段的åç§»é‡è®¾ç½®ä¸º[code]ofs[/code]。"
#: doc/classes/LargeTexture.xml:60
-#, fuzzy
msgid ""
"Sets the [Texture] of the piece with index [code]idx[/code] to "
"[code]texture[/code]."
msgstr ""
-"将索引为[code]idx[/code]的片段的[Texture2D]设置为[code]texture[/code]。"
+"将索引为 [code]idx[/code] 的片段的 [Texture] 设置为 [code]texture[/code]。"
#: doc/classes/LargeTexture.xml:67
msgid "Sets the size of this [LargeTexture]."
@@ -37646,25 +38753,22 @@ msgid "Provides a base class for different kinds of light nodes."
msgstr "为ä¸åŒç±»åž‹çš„光节点æä¾›åŸºç±»ã€‚"
#: doc/classes/Light.xml:7
-#, fuzzy
msgid ""
"Light is the [i]abstract[/i] base class for light nodes. As it can't be "
"instanced, it shouldn't be used directly. Other types of light nodes inherit "
"from it. Light contains the common variables and parameters used for "
"lighting."
msgstr ""
-"Light3D是光节点的[i]abstract[/i]抽象基类。因为它ä¸èƒ½è¢«å®žä¾‹åŒ–,所以ä¸åº”该被直"
-"接使用。其他类型的ç¯å…‰èŠ‚ç‚¹éƒ½æ˜¯ç»§æ‰¿è‡ªå®ƒã€‚Light3D包å«ç”¨äºŽç…§æ˜Žçš„常è§å˜é‡å’Œå‚数。"
+"Light是ç¯å…‰èŠ‚ç‚¹çš„[i]抽象[/i]基类。它ä¸èƒ½è¢«å®žä¾‹åŒ–,所以它ä¸åº”该被直接使用。其"
+"他类型的ç¯å…‰èŠ‚ç‚¹éƒ½æ˜¯ç»§æ‰¿è‡ªå®ƒã€‚ç¯å…‰åŒ…å«ç”¨äºŽç…§æ˜Žçš„常用å˜é‡å’Œå‚数。"
#: doc/classes/Light.xml:18
-#, fuzzy
msgid "Returns the value of the specified [enum Light.Param] parameter."
-msgstr "返回指定的[enum Light3D.Param]傿•°çš„值。"
+msgstr "返回指定的[enum Light.Param]傿•°çš„值。"
#: doc/classes/Light.xml:26
-#, fuzzy
msgid "Sets the value of the specified [enum Light.Param] parameter."
-msgstr "设置指定的[enum Light3D.Param]傿•°çš„值。"
+msgstr "设置指定的[enum Light.Param]傿•°çš„值。"
#: doc/classes/Light.xml:32
msgid ""
@@ -37689,21 +38793,21 @@ msgid "The light will affect objects in the selected layers."
msgstr "ç¯å…‰å°†å½±å“所选图层中的对象。"
#: doc/classes/Light.xml:44
-#, fuzzy
msgid ""
"The light's strength multiplier (this is not a physical unit). For "
"[OmniLight] and [SpotLight], changing this value will only change the light "
"color's intensity, not the light's radius."
msgstr ""
-"å…‰çš„å¼ºåº¦ä¹˜æ•°ï¼ˆè¿™ä¸æ˜¯ä¸€ä¸ªç‰©ç†å•ä½ï¼‰ã€‚对于[OmniLight3D]å’Œ[SpotLight3D]æ¥è¯´ï¼Œæ”¹"
-"å˜è¿™ä¸ªå€¼åªä¼šæ”¹å˜ç¯å…‰é¢œè‰²çš„强度,ä¸ä¼šæ”¹å˜ç¯å…‰çš„åŠå¾„。"
+"å…‰çš„å¼ºåº¦ä¹˜æ•°ï¼Œæ³¨ï¼Œè¿™ä¸æ˜¯ç‰©ç†å•ä½ã€‚对于 [OmniLight] å’Œ [SpotLight],更改此值åª"
+"会更改ç¯å…‰é¢œè‰²çš„强度,而ä¸ä¼šæ›´æ”¹ç¯å…‰çš„åŠå¾„。"
#: doc/classes/Light.xml:47
-#, fuzzy
msgid ""
"Secondary multiplier used with indirect light (light bounces). This works on "
"both [BakedLightmap] and [GIProbe]."
-msgstr "与间接光(光å弹)一起使用的二级å€å¢žå™¨ã€‚与[GIProbe]一起使用。"
+msgstr ""
+"与间接光(光å射)一起使用的辅助å€å¢žå™¨ã€‚这适用于 [BakedLightmap] å’Œ "
+"[GIProbe]。"
#: doc/classes/Light.xml:50
msgid ""
@@ -37713,16 +38817,15 @@ msgstr ""
"如果为 [code]true[/code]ï¼Œåˆ™å…‰çº¿çš„æ•ˆæžœä¼šé€†è½¬ï¼Œä½¿åŒºåŸŸå˜æš—并投射明亮的阴影。"
#: doc/classes/Light.xml:53
-#, fuzzy
msgid ""
"The size of the light in Godot units. Only considered in baked lightmaps and "
"only if [member light_bake_mode] is set to [constant BAKE_ALL]. Increasing "
"this value will make the shadows appear blurrier. This can be used to "
"simulate area lights to an extent."
msgstr ""
-"ç¯å…‰çš„大å°ï¼Œåœ¨Godot中的å•ä½ã€‚åªé€‚用于[OmniLight3D]så’Œ[SpotLight3D]s。增加这个"
-"值会使ç¯å…‰æ·¡å‡ºçš„é€Ÿåº¦å˜æ…¢ï¼Œé˜´å½±çœ‹èµ·æ¥æ›´æ¨¡ç³Šã€‚这在一定程度上å¯ä»¥ç”¨æ¥æ¨¡æ‹ŸåŒºåŸŸ"
-"光。"
+"ç¯å…‰çš„大å°ï¼Œä»¥Godotçš„å•ä½ã€‚åªåœ¨çƒ˜çƒ¤çš„光照贴图中考虑,并且åªåœ¨[member "
+"light_bake_mode]被设置为[constant BAKE_ALL]æ—¶è€ƒè™‘ã€‚å¢žåŠ è¿™ä¸ªå€¼ä¼šä½¿é˜´å½±çœ‹èµ·æ¥æ›´"
+"模糊。这å¯ä»¥åœ¨ä¸€å®šç¨‹åº¦ä¸Šç”¨äºŽæ¨¡æ‹ŸåŒºåŸŸç¯å…‰ã€‚"
#: doc/classes/Light.xml:56
msgid ""
@@ -37740,7 +38843,7 @@ msgid ""
"shadowing (\"shadow acne\"), while too large a value causes shadows to "
"separate from casters (\"peter-panning\"). Adjust as needed."
msgstr ""
-"用于调整阴影外观。值太å°ä¼šå¯¼è‡´è‡ªé˜´å½±ï¼ˆâ€œé˜´å½±æš—ç–®â€ï¼‰ï¼Œè€Œå€¼å¤ªå¤§ä¼šå¯¼è‡´é˜´å½±ä¸Žä¹‹åˆ†"
+"用于调整阴影表现。值太å°ä¼šå¯¼è‡´è‡ªé˜´å½±ï¼ˆâ€œé˜´å½±æš—ç–®â€ï¼‰ï¼Œè€Œå€¼å¤ªå¤§ä¼šå¯¼è‡´é˜´å½±ä¸Žä¹‹åˆ†"
"离(“彼得平移â€ï¼‰ã€‚æ ¹æ®éœ€è¦è¿›è¡Œè°ƒæ•´ã€‚"
#: doc/classes/Light.xml:62
@@ -37748,25 +38851,24 @@ msgid "The color of shadows cast by this light."
msgstr "光线投射的阴影的颜色。"
#: doc/classes/Light.xml:65
-#, fuzzy
msgid "Attempts to reduce [member shadow_bias] gap."
-msgstr "用于访问 [member shadow_bias] 的常é‡ã€‚"
+msgstr "å°è¯•å‡å°‘ [member shadow_bias] å·®è·ã€‚"
#: doc/classes/Light.xml:68
msgid "If [code]true[/code], the light will cast shadows."
msgstr "如果为[code]true[/code],光线会投下阴影。"
#: doc/classes/Light.xml:71
-#, fuzzy
msgid ""
"If [code]true[/code], reverses the backface culling of the mesh. This can be "
"useful when you have a flat mesh that has a light behind it. If you need to "
"cast a shadow on both sides of the mesh, set the mesh to use double-sided "
"shadows with [constant GeometryInstance.SHADOW_CASTING_SETTING_DOUBLE_SIDED]."
msgstr ""
-"如果为[code]true[/code],则åè½¬ç½‘æ ¼çš„èƒŒé¢æ¶ˆéšã€‚当您有一个åŽé¢æœ‰ç¯å…‰çš„å¹³é¢ç½‘æ ¼"
-"时,这å¯èƒ½å¾ˆæœ‰ç”¨ã€‚如果需è¦åœ¨ç½‘格的两侧投射阴影,请将网格设置为使用åŒé¢é˜´å½±ï¼Œ"
-"并使用[constant GeometryInstance3D.SHADOW_CASTING_SETTING_DOUBLE_SIDED]。"
+"如果 [code]true[/code],则å转网格的背é¢å‰”除。当你有一个åŽé¢æœ‰ç¯çš„å¹³é¢ç½‘æ ¼"
+"时,这会很有用。如果需è¦åœ¨ç½‘格的两侧投射阴影,请使用 [constant "
+"GeometryInstance.SHADOW_CASTING_SETTING_DOUBLE_SIDED] 将网格设置为使用åŒé¢é˜´"
+"影。"
#: doc/classes/Light.xml:76
msgid "Constant for accessing [member light_energy]."
@@ -37785,82 +38887,73 @@ msgid "Constant for accessing [member light_specular]."
msgstr "访问[member light_specular]的常数。"
#: doc/classes/Light.xml:88
-#, fuzzy
msgid ""
"Constant for accessing [member OmniLight.omni_range] or [member SpotLight."
"spot_range]."
msgstr ""
-"用于访问[member OmniLight3D.omni_range]或[member SpotLight3D.spot_range]的常"
-"数。"
+"用于访问 [member OmniLight.omni_range] 或 [member SpotLight.spot_range] 的常"
+"é‡ã€‚"
#: doc/classes/Light.xml:91
-#, fuzzy
msgid ""
"Constant for accessing [member OmniLight.omni_attenuation] or [member "
"SpotLight.spot_attenuation]."
msgstr ""
-"访问[member OmniLight3D.omni_attenuation]或[member SpotLight3D."
-"spot_attenuation]的常数。"
+"用于访问 [member OmniLight.omni_attenuation] 或 [member SpotLight."
+"spot_attenuation] 的常é‡ã€‚"
#: doc/classes/Light.xml:94
-#, fuzzy
msgid "Constant for accessing [member SpotLight.spot_angle]."
-msgstr "访问[member SpotLight3D.spot_angle]的常数。"
+msgstr "用于访问 [member SpotLight.spot_angle] 的常é‡ã€‚"
#: doc/classes/Light.xml:97
-#, fuzzy
msgid "Constant for accessing [member SpotLight.spot_angle_attenuation]."
-msgstr "访问[member SpotLight3D.spot_angle_Densation]的常数。"
+msgstr "用于访问 [member SpotLight.spot_angle_attenuation] 的常é‡ã€‚"
#: doc/classes/Light.xml:100
-#, fuzzy
msgid "Constant for accessing [member shadow_contact]."
-msgstr "用于访问 [member shadow_bias] 的常é‡ã€‚"
+msgstr "用于访问 [member shadow_contact] 的常é‡ã€‚"
#: doc/classes/Light.xml:103
-#, fuzzy
msgid ""
"Constant for accessing [member DirectionalLight."
"directional_shadow_max_distance]."
msgstr ""
-"访问[member DirectionalLight3D.directional_shadow_max_distance]的常数。"
+"用于访问 [member DirectionalLight.directional_shadow_max_distance] 的常é‡ã€‚"
#: doc/classes/Light.xml:106
-#, fuzzy
msgid ""
"Constant for accessing [member DirectionalLight.directional_shadow_split_1]."
-msgstr "访问[member DirectionalLight3D.directional_shadow_split_1]的常数。"
+msgstr "用于访问 [member DirectionalLight.directional_shadow_split_1] 的常é‡ã€‚"
#: doc/classes/Light.xml:109
-#, fuzzy
msgid ""
"Constant for accessing [member DirectionalLight.directional_shadow_split_2]."
-msgstr "访问[member DirectionalLight3D.directional_shadow_split_2]的常数。"
+msgstr "用于访问 [member DirectionalLight.directional_shadow_split_2] 的常é‡ã€‚"
#: doc/classes/Light.xml:112
-#, fuzzy
msgid ""
"Constant for accessing [member DirectionalLight.directional_shadow_split_3]."
-msgstr "访问[member DirectionalLight3D.directional_shadow_split_3]的常数。"
+msgstr "用于访问 [member DirectionalLight.directional_shadow_split_3] 的常é‡ã€‚"
#: doc/classes/Light.xml:115
-#, fuzzy
msgid ""
"Constant for accessing [member DirectionalLight."
"directional_shadow_normal_bias]."
msgstr ""
-"访问[member DirectionalLight3D.directional_shadow_max_distance]的常数。"
+"用于访问 [member DirectionalLight.directional_shadow_normal_bias] 的常é‡ã€‚"
#: doc/classes/Light.xml:118
msgid "Constant for accessing [member shadow_bias]."
msgstr "用于访问 [member shadow_bias] 的常é‡ã€‚"
#: doc/classes/Light.xml:121
-#, fuzzy
msgid ""
"Constant for accessing [member DirectionalLight."
"directional_shadow_bias_split_scale]."
-msgstr "访问[member DirectionalLight3D.directional_shadow_split_1]的常数。"
+msgstr ""
+"用于访问 [member DirectionalLight.directional_shadow_bias_split_scale] 的常"
+"é‡ã€‚"
#: doc/classes/Light.xml:127
msgid ""
@@ -37872,7 +38965,7 @@ msgstr ""
#: doc/classes/Light.xml:131
msgid "Only indirect lighting will be baked (default)."
-msgstr ""
+msgstr "åªä¼šçƒ˜ç„™é—´æŽ¥ç…§æ˜Žï¼ˆé»˜è®¤ï¼‰ã€‚"
#: doc/classes/Light.xml:134
msgid ""
@@ -37880,6 +38973,8 @@ msgid ""
"[b]Note:[/b] You should hide the light if you don't want it to appear twice "
"(dynamic and baked)."
msgstr ""
+"直接光和间接光都将被烘焙。\n"
+"[b]注æ„:[/b] å¦‚æžœä¸æƒ³è®©ç¯å…‰å‡ºçŽ°ä¸¤æ¬¡ï¼ˆåŠ¨æ€å’Œçƒ˜ç„™ï¼‰ï¼Œåˆ™åº”éšè—ç¯å…‰ã€‚"
#: doc/classes/Light2D.xml:4
msgid "Casts light in a 2D environment."
@@ -37900,7 +38995,8 @@ msgstr ""
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/2d/2d_lights_and_shadows.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/2d/2d_lights_and_shadows.html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/2d/2d_lights_and_shadows."
+"html"
#: doc/classes/Light2D.xml:17
msgid "The Light2D's [Color]."
@@ -37988,9 +39084,8 @@ msgstr ""
"物æ‰ä¼šæŠ•射阴影。"
#: doc/classes/Light2D.xml:74
-#, fuzzy
msgid "[Texture] used for the Light2D's appearance."
-msgstr "[Texture2D] 用于 Light2D 的外观。"
+msgstr "用于Light2D外观的[Texture]。"
#: doc/classes/Light2D.xml:77
msgid "The [code]texture[/code]'s scale factor."
@@ -38028,11 +39123,10 @@ msgid "No filter applies to the shadow map. See [member shadow_filter]."
msgstr "没有过滤器适用于阴影贴图。å‚阅[member shadow_filter]。"
#: doc/classes/Light2D.xml:97
-#, fuzzy
msgid ""
"Percentage closer filtering (3 samples) applies to the shadow map. See "
"[member shadow_filter]."
-msgstr "百分比接近过滤(13个样本)适用于阴影贴图。å‚阅[member shadow_filter]。"
+msgstr "百分比接近过滤(3个样本)适用于阴影贴图。å‚阅[member shadow_filter]。"
#: doc/classes/Light2D.xml:100
msgid ""
@@ -38041,18 +39135,16 @@ msgid ""
msgstr "百分比接近过滤(5个样本)适用于阴影贴图。å‚阅[member shadow_filter]。"
#: doc/classes/Light2D.xml:103
-#, fuzzy
msgid ""
"Percentage closer filtering (7 samples) applies to the shadow map. See "
"[member shadow_filter]."
-msgstr "百分比接近过滤(5个样本)适用于阴影贴图。å‚阅[member shadow_filter]。"
+msgstr "百分比接近过滤(7个样本)适用于阴影贴图。å‚阅[member shadow_filter]。"
#: doc/classes/Light2D.xml:106
-#, fuzzy
msgid ""
"Percentage closer filtering (9 samples) applies to the shadow map. See "
"[member shadow_filter]."
-msgstr "百分比接近过滤(5个样本)适用于阴影贴图。å‚阅[member shadow_filter]。"
+msgstr "百分比接近过滤(9个样本)适用于阴影贴图。å‚阅[member shadow_filter]。"
#: doc/classes/Light2D.xml:109
msgid ""
@@ -38098,6 +39190,11 @@ msgid ""
"[member ProjectSettings.rendering/limits/buffers/"
"canvas_polygon_index_buffer_size_kb]."
msgstr ""
+"在二维空间中通过几个点的线。\n"
+"[b]注æ„:[/b]默认情况下,Godot一次最多åªèƒ½ç»˜åˆ¶4,096个多边形点。è¦å¢žåŠ è¿™ä¸ªé™"
+"制,请打开项目设置,增加[member ProjectSettings.rendering/limits/buffers/"
+"canvas_polygon_buffer_size_kb]和[member ProjectSettings.rendering/limits/"
+"buffers/canvas_polygon_index_buffer_size_kb]。"
#: doc/classes/Line2D.xml:20
msgid ""
@@ -38139,11 +39236,12 @@ msgid ""
msgstr "用æä¾›çš„[code]position[/code]ä½ç½®è¦†ç›–索引[code]i[/code]处点的ä½ç½®ã€‚"
#: doc/classes/Line2D.xml:61
-#, fuzzy
msgid ""
"If [code]true[/code], the line's border will be anti-aliased.\n"
"[b]Note:[/b] Line2D is not accelerated by batching when being anti-aliased."
-msgstr "如果为[code]true[/code],该直线的边界将应用å锯齿化。"
+msgstr ""
+"如果[code]true[/code],线æ¡çš„边界将抗锯齿。\n"
+"[b]注æ„:[/b] Line2D在抗锯齿时ä¸ä¼šè¢«æ‰¹é‡åŠ é€Ÿã€‚"
#: doc/classes/Line2D.xml:65
msgid ""
@@ -38172,17 +39270,16 @@ msgid "The style for the points between the start and the end."
msgstr "起点和终点之间点的样å¼ã€‚"
#: doc/classes/Line2D.xml:80
-#, fuzzy
msgid ""
"The points that form the lines. The line is drawn between every point set in "
"this array. Points are interpreted as local vectors."
-msgstr "æž„æˆçº¿æ¡çš„点。这æ¡çº¿æ˜¯åœ¨è¿™ä¸ªæ•°ç»„中æ¯ä¸ªç‚¹ä¹‹é—´ç»˜åˆ¶çš„。"
+msgstr "æž„æˆçº¿æ¡çš„点。在此数组中设置的æ¯ä¸ªç‚¹ä¹‹é—´ç»˜åˆ¶çº¿ã€‚点被解释为局部å‘é‡ã€‚"
#: doc/classes/Line2D.xml:83
msgid ""
"The smoothness of the rounded joints and caps. This is only used if a cap or "
"joint is set as round."
-msgstr "圆形接头和盖的平滑度。仅当盖或接头设置为圆形时æ‰ä½¿ç”¨æ­¤é€‰é¡¹ã€‚"
+msgstr "圆形接头和盖å­çš„å¹³æ»‘åº¦ã€‚ä»…å½“ç›–å­æˆ–接头设置为圆形时æ‰ä½¿ç”¨æ­¤é€‰é¡¹ã€‚"
#: doc/classes/Line2D.xml:86
msgid ""
@@ -38225,7 +39322,7 @@ msgstr ""
#: doc/classes/Line2D.xml:106
msgid "The line's joints will be bevelled/chamfered."
-msgstr "线的接头将进行斜切/倒角。"
+msgstr "线的接头将斜切/倒角。"
#: doc/classes/Line2D.xml:109
msgid "The line's joints will be rounded."
@@ -38265,7 +39362,6 @@ msgid "Control that provides single-line string editing."
msgstr "该控件æä¾›å•行字符串编辑。"
#: doc/classes/LineEdit.xml:7
-#, fuzzy
msgid ""
"LineEdit provides a single-line string editor, used for text fields.\n"
"It features many built-in shortcuts which will always be available "
@@ -38294,30 +39390,27 @@ msgid ""
"- Command + Right arrow: Like the End key, move the cursor to the end of the "
"line"
msgstr ""
-"LineEditæä¾›äº†å•行字符串编辑,用于文本字段。\n"
-"它具有许多内置的快æ·é”®ï¼Œè¿™äº›å¿«æ·é”®æ€»æ˜¯å¯ç”¨ï¼Œæ³¨ï¼Œ[kbd]Ctrl[/kbd]在这里映射到"
-"MacOS上的[kbd]Cmd[/kbd]:\n"
-"- [kbd]Ctrl + C[/kbd]:å¤åˆ¶\n"
-"- [kbd]Ctrl + X[/kbd]:剪切\n"
-"- [kbd]Ctrl + V[/kbd]或[kbd]Ctrl + Y[/kbd]:粘贴/\"拉动\"\n"
-"- [kbd]Ctrl + Z[/kbd]:撤销\n"
-"- [kbd]Ctrl + Shift + Z[/kbd]:é‡åš\n"
-"- [kbd]Ctrl + U[/kbd]:删除从光标ä½ç½®åˆ°è¡Œé¦–的文本\n"
-"- [kbd]Ctrl + K[/kbd]:删除从光标ä½ç½®åˆ°è¡Œå°¾çš„æ–‡æœ¬\n"
-"- [kbd]Ctrl + A[/kbd]:选择所有文本\n"
-"- [kbd]Up Arrow[/kbd]/[kbd]down Arrow[/kbd]:å‘上/å‘下箭头将光标移到行首/行"
-"å°¾\n"
-"在macOS上,有一些é¢å¤–的键盘快æ·é”®å¯ç”¨:\n"
-"- [kbd]Ctrl + F[/kbd]:与[kbd]å³ç®­å¤´[/kbd]相åŒï¼Œå°†å…‰æ ‡å‘å³ç§»åŠ¨ä¸€ä¸ªå­—ç¬¦\n"
-"- [kbd]Ctrl + B[/kbd]:与[kbd]左箭头[/kbd]相åŒï¼Œå‘左移动光标一个字符\n"
-"- [kbd]Ctrl + P[/kbd]:与[kbd]å‘上箭头[/kbd]相åŒï¼Œå°†å…‰æ ‡ç§»åˆ°å‰ä¸€è¡Œ\n"
-"- [kbd]Ctrl + N[/kbd]:与[kbd]å‘下箭头[/kbd]相åŒï¼Œå°†å…‰æ ‡ç§»åˆ°ä¸‹ä¸€è¡Œ\n"
-"- [kbd]Ctrl + D[/kbd]:与[kbd]Delete[/kbd]相åŒï¼Œåˆ é™¤å…‰æ ‡å³ä¾§çš„字符\n"
-"- [kbd]Ctrl+H[/kbd]:与[kbd]Backspace[/kbd]相åŒï¼Œåˆ é™¤å…‰æ ‡å·¦ä¾§çš„字符\n"
-"- [kbd]Ctrl+A[/kbd]:与[kbd]Home[/kbd]相åŒï¼Œå°†å…‰æ ‡ç§»åˆ°è¡Œé¦–\n"
-"- [kbd]Ctrl+E[/kbd]:与[kbd]End[/kbd]相åŒï¼Œå°†å…‰æ ‡ç§»åˆ°è¡Œå°¾\n"
-"- [kbd]Cmd + Left Arrow[/kbd]:与[kbd]Home[/kbd]相åŒï¼Œå°†å…‰æ ‡ç§»åˆ°è¯¥è¡Œçš„开头\n"
-"- [kbd]Cmd + right Arrow[/kbd]:与[kbd]End[/kbd]相åŒï¼Œå°†å…‰æ ‡ç§»åˆ°è¡Œå°¾"
+"LineEdit æä¾›äº†å•行字符串编辑器,用于文本字段。\n"
+"它具有许多始终å¯ç”¨çš„å†…ç½®å¿«æ·æ–¹å¼ï¼ˆåœ¨è¿™é‡Œ [code]Ctrl[/code] 映射到 macOS 上的 "
+"[code]Command[/code]):\n"
+"- Ctrl + C:å¤åˆ¶\n"
+"- Ctrl + X:剪切\n"
+"- Ctrl + V 或 Ctrl + Y:粘贴/\"拖拽\"\n"
+"- Ctrl + Z:撤消\n"
+"- Ctrl + Shift + Z:é‡åš\n"
+"- Ctrl + U:删除从光标ä½ç½®åˆ°è¡Œé¦–的文本\n"
+"- Ctrl + K:删除从光标ä½ç½®åˆ°è¡Œå°¾çš„æ–‡æœ¬\n"
+"- Ctrl + A:选择所有文本\n"
+"- Up/Down 箭头: :将光标移动到行的开头/结尾\n"
+"在 macOS 上,有一些é¢å¤–的键盘快æ·é”®å¯ç”¨ï¼š\n"
+"- Ctrl + F:åƒå³ç®­å¤´é”®ä¸€æ ·ï¼Œå°†å…‰æ ‡å‘å³ç§»åŠ¨ä¸€ä¸ªå­—ç¬¦\n"
+"- Ctrl + B:åƒå·¦ç®­å¤´é”®ä¸€æ ·ï¼Œå°†å…‰æ ‡å‘左移动一个字符\n"
+"- Ctrl + P:åƒå‘上箭头键一样,将光标移动到上一行\n"
+"- Ctrl + N:åƒå‘下箭头键一样,将光标移动到下一行\n"
+"- Ctrl + D:åƒDelete键一样,删除光标å³ä¾§çš„字符\n"
+"- Ctrl + H:åƒé€€æ ¼é”®ä¸€æ ·ï¼Œåˆ é™¤å…‰æ ‡å·¦ä¾§çš„字符\n"
+"- Command + å·¦ç®­å¤´ï¼šåƒ Home 键一样,将光标移动到行首\n"
+"- Command + å³ç®­å¤´ï¼šåƒ End 键一样,将光标移动到行尾"
#: doc/classes/LineEdit.xml:35
msgid ""
@@ -38332,11 +39425,10 @@ msgid "Erases the [LineEdit]'s [member text]."
msgstr "擦除 [LineEdit] 的 [member text]文本 。"
#: doc/classes/LineEdit.xml:47
-#, fuzzy
msgid ""
"Deletes one character at the cursor's current position (equivalent to "
"pressing the [code]Delete[/code] key)."
-msgstr "删除光标当å‰ä½ç½®çš„一个字符(相当于按[kbd]Delete[/kbd]输出键)。"
+msgstr "在光标的当å‰ä½ç½®åˆ é™¤ä¸€ä¸ªå­—符(相当于按[code]Delete[/code]键)。"
#: doc/classes/LineEdit.xml:55
msgid ""
@@ -38359,12 +39451,16 @@ msgid ""
"may cause a crash. If you wish to hide it or any of its children, use their "
"[member CanvasItem.visible] property."
msgstr ""
+"返回这个[LineEdit]çš„[PopupMenu]。默认情况下,这个èœå•在å³é”®ç‚¹å‡»[LineEdit]时显"
+"示。\n"
+"[b]警告:[/b] 这是一个必è¦çš„内部节点,移除和释放它å¯èƒ½ä¼šå¯¼è‡´å´©æºƒã€‚如果你想éš"
+"è—它或它的任何å­èŠ‚ç‚¹ï¼Œè¯·ä½¿ç”¨å…¶çš„ [member CanvasItem.visible] 属性。"
#: doc/classes/LineEdit.xml:74
msgid ""
"Returns the scroll offset due to [member caret_position], as a number of "
"characters."
-msgstr ""
+msgstr "返回由[member caret_position]引起的滚动å移,作为数字字符串。"
#: doc/classes/LineEdit.xml:81
msgid "Executes a given action as defined in the [enum MenuItems] enum."
@@ -38461,6 +39557,21 @@ msgid ""
"# `text_change_rejected` is emitted with \"bye\" as parameter.\n"
"[/codeblock]"
msgstr ""
+"在[LineEdit]内å¯è¾“入的最大字符é‡ã€‚如果[code]0[/code],则没有é™åˆ¶ã€‚\n"
+"当定义了é™åˆ¶æ—¶ï¼Œè¶…过[member max_length]的字符会被截断。这在设置最大长度时现有"
+"çš„ [member text] 内容,或在[LineEdit]中æ’入的新文本,包括粘贴时å‘生。如果任何"
+"输入的文本被截断,[signal text_change_rejected]ä¿¡å·å°†ä»¥è¢«æˆªæ–­çš„å­ä¸²ä¸ºå‚æ•°å‘é€"
+"出æ¥ã€‚\n"
+"[b]例如:[/b]\n"
+"[codeblock]\n"
+"text = \"Hello world\"\n"
+"max_length = 5\n"
+"# `text` becomes \"Hello\".\n"
+"max_length = 10\n"
+"text += \" goodbye\"\n"
+"# `text` becomes \"Hello good\".\n"
+"# `text_change_rejected` is emitted with \"bye\" as parameter.\n"
+"[/codeblock]"
#: doc/classes/LineEdit.xml:147
msgid ""
@@ -38531,6 +39642,8 @@ msgid ""
"appended text is truncated to fit [member max_length], and the part that "
"couldn't fit is passed as the [code]rejected_substring[/code] argument."
msgstr ""
+"当附加的文本超过了[member max_length]时触å‘。附加的文本被截断以适应[member "
+"max_length],ä¸èƒ½é€‚应的部分被作为[code]rejected_substring[/code]傿•°ä¼ é€’。"
#: doc/classes/LineEdit.xml:185 doc/classes/TextEdit.xml:506
msgid "Emitted when the text changes."
@@ -38683,13 +39796,14 @@ msgid "Simple button used to represent a link to some resource."
msgstr "简å•的按钮,用于表示对æŸäº›èµ„æºçš„链接。"
#: doc/classes/LinkButton.xml:7
-#, fuzzy
msgid ""
"This kind of button is primarily used when the interaction with the button "
"causes a context change (like linking to a web page).\n"
"See also [BaseButton] which contains common properties and methods "
"associated with this node."
-msgstr "è¿™ç§æŒ‰é’®ä¸»è¦ç”¨äºŽæŒ‰é’®çš„交互导致上下文更改(如链接到网页)时使用。"
+msgstr ""
+"è¿™ç§æŒ‰é’®ä¸»è¦ç”¨äºŽä¸ŽæŒ‰é’®çš„交互引起上下文å˜åŒ–时,如链接到网页。\n"
+"å‚阅[BaseButton],它包å«äº†è¯¥èŠ‚ç‚¹ç›¸å…³çš„å¸¸ç”¨å±žæ€§å’Œæ–¹æ³•ã€‚"
#: doc/classes/LinkButton.xml:21
msgid ""
@@ -38728,14 +39842,23 @@ msgid "Default text [Color] of the [LinkButton]."
msgstr "[LinkButton]默认的字体颜色[Color]。"
#: doc/classes/LinkButton.xml:46
+msgid ""
+"Text [Color] used when the [LinkButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+"当[LinkButton]获得焦点时使用的文本[Color]ã€‚åªæ›¿æ¢æŒ‰é’®çš„æ­£å¸¸æ–‡æœ¬é¢œè‰²ã€‚ç¦ç”¨ã€æ‚¬"
+"åœå’ŒæŒ‰ä¸‹çжæ€ä¼˜å…ˆäºŽè¿™ä¸ªé¢œè‰²ã€‚"
+
+#: doc/classes/LinkButton.xml:49
msgid "Text [Color] used when the [LinkButton] is being hovered."
msgstr "当[LinkButton]è¢«æ‚¬åœæ—¶ä½¿ç”¨çš„æ–‡æœ¬é¢œè‰²[Color]。"
-#: doc/classes/LinkButton.xml:49
+#: doc/classes/LinkButton.xml:52
msgid "Text [Color] used when the [LinkButton] is being pressed."
msgstr "当[LinkButton]被按下时使用的文本颜色[Color]。"
-#: doc/classes/LinkButton.xml:52
+#: doc/classes/LinkButton.xml:55
msgid "The vertical space between the baseline of text and the underline."
msgstr "文本基线和下划线之间的垂直空间。"
@@ -38744,15 +39867,13 @@ msgid "Overrides the location sounds are heard from."
msgstr "覆盖å¬åˆ°å£°éŸ³çš„ä½ç½®ã€‚"
#: doc/classes/Listener.xml:7
-#, fuzzy
msgid ""
"Once added to the scene tree and enabled using [method make_current], this "
"node will override the location sounds are heard from. This can be used to "
"listen from a location different from the [Camera]."
msgstr ""
-"一旦添加到场景树并å¯ç”¨[make_current]方法,该节点将覆盖å¬åˆ°å£°éŸ³çš„ä½ç½®ã€‚è¿™å¯ç”¨"
-"于从ä¸åŒäºŽ[Camera3D]çš„ä½ç½®æ”¶å¬ã€‚\n"
-"[b]注æ„:[/b]此节点还没有2D对等项。"
+"一旦被添加到场景树并使用[method make_current]å¯ç”¨ï¼Œè¿™ä¸ªèŠ‚ç‚¹å°†è¦†ç›–å¬åˆ°å£°éŸ³çš„ä½"
+"置。这å¯ä»¥ç”¨æ¥ä»Ž[Camera]ä¸åŒçš„ä½ç½®è†å¬ã€‚"
#: doc/classes/Listener.xml:15
msgid "Disables the listener to use the current camera's listener instead."
@@ -38763,24 +39884,22 @@ msgid "Returns the listener's global orthonormalized [Transform]."
msgstr "返回监å¬å™¨çš„全局正则化[Transform]。"
#: doc/classes/Listener.xml:27
-#, fuzzy
msgid ""
"Returns [code]true[/code] if the listener was made current using [method "
"make_current], [code]false[/code] otherwise.\n"
"[b]Note:[/b] There may be more than one Listener marked as \"current\" in "
"the scene tree, but only the one that was made current last will be used."
msgstr ""
-"如果使用[make_current]方法使监å¬å™¨æˆä¸ºå½“å‰çжæ€ï¼Œè¿”回[code]true[/code],å¦åˆ™è¿”"
-"回[code]false[/code]。\n"
-"[b]注æ„:[/b] 在场景树中å¯èƒ½æœ‰ä¸æ­¢ä¸€ä¸ªListener3D被标记为 \"当å‰\"ï¼Œä½†åªæœ‰æœ€åŽ"
-"è¢«å˜æˆå½“å‰çš„那个æ‰ä¼šè¢«ä½¿ç”¨ã€‚"
+"如果使用[make_current]方法,使监å¬å™¨æˆä¸ºå½“å‰çжæ€ï¼Œåˆ™è¿”回[code]true[/code],å¦"
+"则返回[code]false[/code]。\n"
+"[b]注æ„:[/b] 在场景树中å¯èƒ½æœ‰ä¸€ä¸ªä»¥ä¸Šçš„监å¬å™¨è¢«æ ‡è®°ä¸º \"当å‰\"ï¼Œä½†åªæœ‰æœ€åŽå˜"
+"æˆå½“å‰çš„那个æ‰ä¼šè¢«ä½¿ç”¨ã€‚"
#: doc/classes/Listener.xml:34
msgid "Enables the listener. This will override the current camera's listener."
msgstr "å¯ç”¨ç›‘å¬å™¨ã€‚这将覆盖当å‰ç›¸æœºçš„监å¬å™¨ã€‚"
#: doc/classes/Listener2D.xml:7
-#, fuzzy
msgid ""
"Once added to the scene tree and enabled using [method make_current], this "
"node will override the location sounds are heard from. Only one [Listener2D] "
@@ -38790,20 +39909,21 @@ msgid ""
"screen will be used as a hearing point for the audio. [Listener2D] needs to "
"be inside [SceneTree] to function."
msgstr ""
-"一旦添加到场景树并å¯ç”¨[make_current]方法,该节点将覆盖å¬åˆ°å£°éŸ³çš„ä½ç½®ã€‚è¿™å¯ç”¨"
-"于从ä¸åŒäºŽ[Camera3D]çš„ä½ç½®æ”¶å¬ã€‚\n"
-"[b]注æ„:[/b]此节点还没有2D对等项。"
+"一旦被添加到场景树,并使用[method make_current]å¯ç”¨ï¼Œè¿™ä¸ªèŠ‚ç‚¹å°†è¦†ç›–å¬åˆ°å£°éŸ³çš„"
+"ä½ç½®ã€‚åªæœ‰ä¸€ä¸ª[Listener2D]å¯ä»¥æ˜¯å½“å‰çš„。使用[method make_current]å°†ç¦ç”¨ä»¥å‰çš„"
+"[Listener2D]。\n"
+"如果在当å‰çš„[Viewport]中没有激活的[Listener2D],å±å¹•中心将被用作音频的è†å¬"
+"点。[Listener2D]需è¦åœ¨[SceneTree]内æ‰èƒ½å‘挥作用。"
#: doc/classes/Listener2D.xml:16
msgid ""
"Disables the [Listener2D]. If it's not set as current, this method will have "
"no effect."
-msgstr ""
+msgstr "ç¦ç”¨[Listener2D]。如果未将其设置为当å‰ï¼Œæ­¤æ–¹æ³•将无效。"
#: doc/classes/Listener2D.xml:22
-#, fuzzy
msgid "Returns [code]true[/code] if this [Listener2D] is currently active."
-msgstr "如果该对等体当å‰å·²è¿žæŽ¥ï¼Œåˆ™è¿”回[code]true[/code]。"
+msgstr "如果此[Listener2D]当å‰å¤„于激活状æ€ï¼Œåˆ™è¿”回[code]true[/code]。"
#: doc/classes/Listener2D.xml:28
msgid ""
@@ -38813,13 +39933,15 @@ msgid ""
"This method will have no effect if the [Listener2D] is not added to "
"[SceneTree]."
msgstr ""
+"使[Listener2D]处于激活状æ€ï¼Œå°†å…¶è®¾ç½®ä¸ºå£°éŸ³çš„è†å¬ç‚¹ã€‚å¦‚æžœå·²ç»æœ‰å¦ä¸€ä¸ªæ¿€æ´»çš„"
+"[Listener2D],它将被ç¦ç”¨ã€‚\n"
+"如果[Listener2D]未添加到[SceneTree]中,此方法将无效。"
#: doc/classes/MainLoop.xml:4
msgid "Abstract base class for the game's main loop."
msgstr "游æˆä¸»å¾ªçŽ¯çš„æŠ½è±¡åŸºç±»ã€‚"
#: doc/classes/MainLoop.xml:7
-#, fuzzy
msgid ""
"[MainLoop] is the abstract base class for a Godot project's game loop. It is "
"inherited by [SceneTree], which is the default game loop implementation used "
@@ -38865,14 +39987,13 @@ msgid ""
"[/codeblock]"
msgstr ""
"[MainLoop]是Godot项目中游æˆå¾ªçŽ¯çš„æŠ½è±¡åŸºç±»ã€‚å®ƒè¢«[SceneTree]继承,åŽè€…是Godot项"
-"目中使用的默认游æˆå¾ªçŽ¯å®žçŽ°ï¼Œä¸è¿‡ä¹Ÿå¯ä»¥ç¼–写和使用自己的[MainLoop]å­ç±»æ¥ä»£æ›¿åœº"
-"景树中的实现。\n"
+"目中使用的游æˆå¾ªçŽ¯çš„é»˜è®¤å®žçŽ°ï¼Œä¸è¿‡ä¹Ÿå¯ä»¥ç¼–写和使用自己的[MainLoop]å­ç±»ï¼Œè€Œä¸"
+"是场景树。\n"
"在应用程åºå¯åŠ¨æ—¶ï¼Œå¿…é¡»å‘æ“作系统æä¾›ä¸€ä¸ª[MainLoop]实现;å¦åˆ™ï¼Œåº”用程åºå°†é€€"
-"出。这将自动å‘生,并且会自动创建一个[SceneTree],除éžä»Žå‘½ä»¤è¡Œæä¾›ä¸€ä¸ªä¸»è¦çš„"
-"[Script](例如用[code]godot -s my_loop.gd[/code]),并且它是一个[MainLoop]实"
+"出。除éžä»Žå‘½ä»¤è¡Œæä¾›ä¸€ä¸ªä¸»[Script](例如:[code]godot -s my_loop.gd[/"
+"code]),这将自动å‘生(并且创建一个[SceneTree]),并应该是一个[MainLoop]实"
"现。\n"
-"䏋颿˜¯ä¸€ä¸ªå®žçŽ°ç®€å•[MainLoop]的脚本例å­ã€‚\n"
-"[b]FIXME:[/b] 在DisplayServeræ‹†åˆ†å’Œè¾“å…¥é‡æž„åŽä¸å†æœ‰æ•ˆã€‚\n"
+"䏋颿˜¯å®žçŽ°ç®€å•[MainLoop]的脚本例å­:\n"
"[codeblock]\n"
"extends MainLoop\n"
"\n"
@@ -38892,9 +40013,9 @@ msgstr ""
"func _input_event(event):\n"
" # Record keys.\n"
" if event is InputEventKey and event.pressed and !event.echo:\n"
-" keys_typed.append(OS.get_keycode_string(event.keycode))\n"
+" keys_typed.append(OS.get_scancode_string(event.scancode))\n"
" # Quit on Escape press.\n"
-" if event.keycode == KEY_ESCAPE:\n"
+" if event.scancode == KEY_ESCAPE:\n"
" quit = true\n"
" # Quit on any mouse click.\n"
" if event is InputEventMouseButton:\n"
@@ -38907,14 +40028,13 @@ msgstr ""
"[/codeblock]"
#: doc/classes/MainLoop.xml:51
-#, fuzzy
msgid ""
"Called when files are dragged from the OS file manager and dropped in the "
"game window. The arguments are a list of file paths and the identifier of "
"the screen where the drag originated."
msgstr ""
-"当文件从æ“作系统的文件管ç†å™¨ä¸­è¢«æ‹–到游æˆçª—å£ä¸­æ—¶å‘å‡ºã€‚å‚æ•°æ˜¯ä¸€ä¸ªæ–‡ä»¶è·¯å¾„列表"
-"和拖动文件的å±å¹•标识符。"
+"当文件从æ“作系统的文件管ç†å™¨ä¸­è¢«æ‹–到游æˆçª—å£ä¸­æ—¶è¢«è°ƒç”¨ã€‚傿•°æ˜¯ä¸€ä¸ªæ–‡ä»¶è·¯å¾„列"
+"表和拖动å±å¹•的标识符。"
#: doc/classes/MainLoop.xml:57
msgid "Called before the program exits."
@@ -38924,7 +40044,7 @@ msgstr "在程åºé€€å‡ºå‰è°ƒç”¨ã€‚"
msgid ""
"Called when the user performs an action in the system global menu (e.g. the "
"Mac OS menu bar)."
-msgstr ""
+msgstr "当用户在系统全局èœå•(如Mac OSçš„èœå•æ ï¼‰ä¸­æ‰§è¡ŒåŠ¨ä½œæ—¶è¢«è°ƒç”¨ã€‚"
#: doc/classes/MainLoop.xml:72
msgid ""
@@ -38945,16 +40065,17 @@ msgstr "在åˆå§‹åŒ–时调用一次。"
#: doc/classes/MainLoop.xml:86
msgid "Called whenever an [InputEvent] is received by the main loop."
-msgstr ""
+msgstr "æ¯å½“主循环接收到[InputEvent]时,就会调用。"
#: doc/classes/MainLoop.xml:93
msgid ""
"Deprecated callback, does not do anything. Use [method _input_event] to "
"parse text input. Will be removed in Godot 4.0."
msgstr ""
+"废弃的回调,ä¸åšä»»ä½•事情。使用[method _input_event]æ¥è§£æžæ–‡æœ¬è¾“入。在Godot "
+"4.0中会被删除。"
#: doc/classes/MainLoop.xml:100
-#, fuzzy
msgid ""
"Called each physics frame with the time since the last physics frame as "
"argument ([code]delta[/code], in seconds). Equivalent to [method Node."
@@ -38963,10 +40084,10 @@ msgid ""
"ends the main loop, while [code]false[/code] lets it proceed to the next "
"frame."
msgstr ""
-"在æ¯ä¸ªç‰©ç†å¸§ä¸­è°ƒç”¨ï¼Œå‚数为自上一个物ç†å¸§ä»¥æ¥çš„æ—¶é—´ï¼ˆå•ä½ï¼šç§’)。相当于"
-"[method Node._physics_process]。\n"
-"如果实施,该方法必须返回一个布尔值。[code]true[/code] 结æŸä¸»å¾ªçŽ¯ï¼Œè€Œ"
-"[code]false[/code] 让它进入下一帧。"
+"在æ¯ä¸ªç‰©ç†å¸§ä¸­è°ƒç”¨ï¼Œå¹¶å°†è‡ªä¸Šä¸€ä¸ªç‰©ç†å¸§ä»¥æ¥çš„æ—¶é—´ä½œä¸ºå‚数,[code]delta[/"
+"code],å•ä½ä¸ºç§’。相当于[method Node._physics_process]。\n"
+"如果实现,该方法必须返回一个布尔值。[code]true[/code]结æŸä¸»å¾ªçŽ¯ï¼Œè€Œ"
+"[code]false[/code]让它进入下一帧。"
#: doc/classes/MainLoop.xml:107
msgid ""
@@ -38987,18 +40108,16 @@ msgid ""
msgstr "ä¸åº”手动调用,而应覆盖[method _initialize]。在Godot 4.0中会被删除。"
#: doc/classes/MainLoop.xml:127
-#, fuzzy
msgid ""
"Should not be called manually, override [method _input_event] instead. Will "
"be removed in Godot 4.0."
-msgstr "ä¸åº”手动调用,而应覆盖[method _idle]。在Godot 4.0中会被删除。"
+msgstr "ä¸åº”手动调用,而应é‡å†™[method _input_event]。在Godot 4.0中会被删除。"
#: doc/classes/MainLoop.xml:134
-#, fuzzy
msgid ""
"Should not be called manually, override [method _input_text] instead. Will "
"be removed in Godot 4.0."
-msgstr "ä¸åº”手动调用,而应覆盖[method _idle]。在Godot 4.0中会被删除。"
+msgstr "ä¸åº”手动调用,而应é‡å†™[method _input_text]。在Godot 4.0中会被删除。"
#: doc/classes/MainLoop.xml:141
msgid ""
@@ -39027,32 +40146,29 @@ msgstr ""
"在桌é¢å’Œç½‘络平å°ä¸Šå®žçŽ°ã€‚"
#: doc/classes/MainLoop.xml:164 doc/classes/Node.xml:799
-#, fuzzy
msgid ""
"Notification received from the OS when the game window is focused.\n"
"Implemented on all platforms."
msgstr ""
-"当鼠标进入游æˆçª—壿—¶ä»Žæ“作系统收到的通知。\n"
-"在桌é¢å’Œç½‘络平å°ä¸Šå®žçŽ°ã€‚"
+"当游æˆçª—å£èŽ·å¾—ç„¦ç‚¹æ—¶ï¼Œä»Žæ“作系统收到的通知。\n"
+"在所有平å°ä¸Šå®žçŽ°ã€‚"
#: doc/classes/MainLoop.xml:168 doc/classes/Node.xml:803
-#, fuzzy
msgid ""
"Notification received from the OS when the game window is unfocused.\n"
"Implemented on all platforms."
msgstr ""
-"当鼠标进入游æˆçª—壿—¶ä»Žæ“作系统收到的通知。\n"
-"在桌é¢å’Œç½‘络平å°ä¸Šå®žçŽ°ã€‚"
+"当游æˆçª—壿œªèŽ·å¾—ç„¦ç‚¹æ—¶ï¼Œä»Žæ“作系统收到的通知。\n"
+"在所有平å°ä¸Šå®žçŽ°ã€‚"
#: doc/classes/MainLoop.xml:172 doc/classes/Node.xml:807
-#, fuzzy
msgid ""
"Notification received from the OS when a quit request is sent (e.g. closing "
"the window with a \"Close\" button or Alt+F4).\n"
"Implemented on desktop platforms."
msgstr ""
-"当å‘é€å…³é—­è¯·æ±‚时从æ“作系统收到的通知(例如用 \"关闭 \"按钮或[kbd]Alt + F4[/"
-"kbd]关闭窗å£ï¼‰ã€‚\n"
+"å‘出退出请求时,从æ“作系统收到的通知(例如用 \"关闭\" 按钮或Alt+F4关闭窗"
+"å£ï¼‰ã€‚\n"
"在桌é¢å¹³å°ä¸Šå®žçŽ°ã€‚"
#: doc/classes/MainLoop.xml:176 doc/classes/Node.xml:811
@@ -39066,15 +40182,14 @@ msgstr ""
"安å“å¹³å°ç‰¹ä¾›ã€‚"
#: doc/classes/MainLoop.xml:180 doc/classes/Node.xml:815
-#, fuzzy
msgid ""
"Notification received from the OS when an unfocus request is sent (e.g. "
"another OS window wants to take the focus).\n"
"No supported platforms currently send this notification."
msgstr ""
-"当å‘é€å…³é—­è¯·æ±‚时从æ“作系统收到的通知(例如用 \"关闭 \"按钮或[kbd]Alt + F4[/"
-"kbd]关闭窗å£ï¼‰ã€‚\n"
-"在桌é¢å¹³å°ä¸Šå®žçŽ°ã€‚"
+"当喿¶ˆç„¦ç‚¹çš„请求被å‘逿—¶ï¼Œä»Žæ“作系统收到的通知(例如,å¦ä¸€ä¸ªæ“ä½œç³»ç»Ÿçª—å£æƒ³è¦"
+"得到焦点)。\n"
+"ç›®å‰æ²¡æœ‰æ”¯æŒçš„å¹³å°å‘é€è¿™ä¸ªé€šçŸ¥ã€‚"
#: doc/classes/MainLoop.xml:184 doc/classes/Node.xml:819
msgid ""
@@ -39125,21 +40240,19 @@ msgstr ""
"特定于macOSå¹³å°ã€‚"
#: doc/classes/MainLoop.xml:203 doc/classes/Node.xml:838
-#, fuzzy
msgid ""
"Notification received from the OS when the app is resumed.\n"
"Specific to the Android platform."
msgstr ""
-"应用æ¢å¤æ—¶ä»Žæ“作系统收到的通知。\n"
+"æ¢å¤åº”用时从æ“作系统收到的通知。\n"
"特定于安å“å¹³å°ã€‚"
#: doc/classes/MainLoop.xml:207 doc/classes/Node.xml:842
-#, fuzzy
msgid ""
"Notification received from the OS when the app is paused.\n"
"Specific to the Android platform."
msgstr ""
-"åº”ç”¨ç¨‹åºæš‚åœæ—¶ä»Žæ“作系统收到的通知。\n"
+"æš‚åœåº”用时从æ“作系统收到的通知。\n"
"特定于安å“å¹³å°ã€‚"
#: doc/classes/MarginContainer.xml:4
@@ -39147,7 +40260,6 @@ msgid "Simple margin container."
msgstr "简å•è¾¹è·å®¹å™¨ã€‚"
#: doc/classes/MarginContainer.xml:7
-#, fuzzy
msgid ""
"Adds a top, left, bottom, and right margin to all [Control] nodes that are "
"direct children of the container. To control the [MarginContainer]'s margin, "
@@ -39165,16 +40277,17 @@ msgid ""
"[/codeblock]"
msgstr ""
"为所有作为容器的直接å­èŠ‚ç‚¹çš„[Control]节点添加顶部ã€å·¦ä¾§ã€åº•部和å³ä¾§çš„è¾¹è·ã€‚è¦"
-"控制[MarginContainer]的边è·ï¼Œè¯·ä½¿ç”¨ä¸‹é¢åˆ—出的[code]margin_*[/code]主题属"
+"控制[MarginContainer]的边è·ï¼Œè¯·ä½¿ç”¨ä¸‹é¢åˆ—出的[code]margin_*[/code] 主题属"
"性。\n"
"[b]注æ„:[/b]è¦å°å¿ƒï¼Œ[Control]çš„margin值与常é‡margin值ä¸åŒã€‚如果你想通过代ç "
-"改å˜[MarginContainer]的自定义边è·å€¼ï¼Œä½ åº”该使用下é¢çš„例å­ã€‚\n"
-"[codeeblock]\n"
+"改å˜[MarginContainer]的自定义边è·å€¼ï¼Œåº”该使用下é¢çš„例å­:\n"
+"[codeblock]\n"
+"# 这个代ç ç¤ºä¾‹å‡å®šå½“å‰è„šæœ¬æ‰©å±•è‡ªMarginContainer。\n"
"var margin_value = 100\n"
-"set(\"custom_constants/margin_top\", margin_value)\n"
-"set(\"custom_constants/margin_left\", margin_value)\n"
-"set(\"custom_constants/margin_bottom\", margin_value)\n"
-"set(\"custom_constants/margin_right\", margin_value)\n"
+"add_constant_override(\"margin_top\", margin_value)\n"
+"add_constant_override(\"margin_left\", margin_value)\n"
+"add_constant_override(\"margin_bottom\", margin_value)\n"
+"add_constant_override(\"margin_right\", margin_value)\n"
"[/codeblock]"
#: doc/classes/MarginContainer.xml:26
@@ -39214,12 +40327,11 @@ msgid "Provides data transformation and encoding utility functions."
msgstr "æä¾›æ•°æ®è½¬æ¢å’Œç¼–ç çš„实用功能。"
#: doc/classes/Marshalls.xml:16
-#, fuzzy
msgid ""
"Returns a decoded [PoolByteArray] corresponding to the Base64-encoded string "
"[code]base64_str[/code]."
msgstr ""
-"返回对应于Base64ç¼–ç çš„字符串[code]base64_str[/code]的解ç [PackedByteArray]。"
+"返回对应于Base64ç¼–ç å­—符串[code]base64_str[/code]的解ç çš„[PoolByteArray]。"
#: doc/classes/Marshalls.xml:23
msgid ""
@@ -39243,9 +40355,8 @@ msgstr ""
"ä¿¡ä»»çš„æ¥æºï¼Œè¯·ä¸è¦ä½¿ç”¨è¿™ä¸ªé€‰é¡¹ï¼Œä»¥é¿å…潜在的安全å¨èƒï¼Œå¦‚è¿œç¨‹ä»£ç æ‰§è¡Œã€‚"
#: doc/classes/Marshalls.xml:39
-#, fuzzy
msgid "Returns a Base64-encoded string of a given [PoolByteArray]."
-msgstr "返回给定[PackedByteArray]çš„Base64ç¼–ç çš„字符串。"
+msgstr "返回给定[PoolByteArray]çš„Base64ç¼–ç çš„字符串。"
#: doc/classes/Marshalls.xml:46
msgid ""
@@ -39267,19 +40378,17 @@ msgid "Abstract base [Resource] for coloring and shading geometry."
msgstr "用于为几何体上色(Coloring)å’Œç€è‰²(Shading)çš„[Resource]抽象å­ç±»ã€‚"
#: doc/classes/Material.xml:7
-#, fuzzy
msgid ""
"Material is a base [Resource] used for coloring and shading geometry. All "
"materials inherit from it and almost all [VisualInstance] derived nodes "
"carry a Material. A few flags and parameters are shared between all material "
"types and are configured here."
msgstr ""
-"æè´¨æ˜¯ä¸€ä¸ªåŸºç¡€[Resource],用于给几何体上色(Coloring)å’Œç€è‰²(Shading)。所有的æ"
-"质都继承自它,几乎所有的[VisualInstance3D]派生节点都带有一个æè´¨ã€‚有几个标志"
-"å’Œå‚æ•°åœ¨æ‰€æœ‰æè´¨ç±»åž‹ä¹‹é—´æ˜¯å…±äº«çš„,并在这里é…置。"
+"æè´¨æ˜¯åŸºæœ¬[Resource],用于几何体ç€è‰²å™¨å’Œä¸Šè‰²ã€‚所有的æè´¨éƒ½ç»§æ‰¿è‡ªå®ƒï¼Œå‡ ä¹Žæ‰€æœ‰"
+"çš„[VisualInstance]派生节点都带有æè´¨ã€‚æœ‰å‡ ä¸ªæ ‡å¿—å’Œå‚æ•°åœ¨æ‰€æœ‰æè´¨ç±»åž‹ä¹‹é—´æ˜¯å…±"
+"享的,并在这里进行é…置。"
#: doc/classes/Material.xml:17
-#, fuzzy
msgid ""
"Sets the [Material] to be used for the next pass. This renders the object "
"again using a different material.\n"
@@ -39287,11 +40396,10 @@ msgid ""
"with type \"Spatial\"."
msgstr ""
"设置下一次使用的[Material]。这将使用ä¸åŒçš„æè´¨å†æ¬¡æ¸²æŸ“对象。\n"
-"[b]注æ„:[/b]åªé€‚用于[StandardMaterial3D]å’Œ[ShaderMaterial]çš„ \"Spatial \"ç±»"
+"[b]注æ„:[/b] è¿™åªé€‚用于[SpatialMaterial]å’Œ[ShaderMaterial]çš„ \"Spatial\"ç±»"
"型。"
#: doc/classes/Material.xml:21
-#, fuzzy
msgid ""
"Sets the render priority for transparent objects in 3D scenes. Higher "
"priority objects will be sorted in front of lower priority objects.\n"
@@ -39300,10 +40408,10 @@ msgid ""
"This is because opaque objects are not sorted, while transparent objects are "
"sorted from back to front (subject to priority)."
msgstr ""
-"设置3Dåœºæ™¯ä¸­é€æ˜Žç‰©ä½“的渲染优先级。高优先级的物体将被排åºåœ¨ä½Žä¼˜å…ˆçº§çš„物体å‰"
+"设置3Dåœºæ™¯ä¸­é€æ˜Žç‰©ä½“的渲染优先级。优先级高的物体将被排åºåœ¨ä¼˜å…ˆçº§ä½Žçš„物体å‰"
"é¢ã€‚\n"
-"[b]注æ„:[/b]è¿™åªé€‚ç”¨äºŽé€æ˜Žç‰©ä½“的排åºã€‚è¿™ä¸ä¼šå½±å“逿˜Žç‰©ä½“相对于ä¸é€æ˜Žç‰©ä½“的排"
-"åºæ–¹å¼ã€‚这是因为ä¸é€æ˜Žç‰©ä½“ä¸è¢«æŽ’åºï¼Œè€Œé€æ˜Žç‰©ä½“是从åŽå¾€å‰æŽ’åºçš„(å–决于优先"
+"[b]注æ„:[/b] è¿™åªé€‚ç”¨äºŽé€æ˜Žç‰©ä½“的排åºã€‚è¿™ä¸ä¼šå½±å“逿˜Žç‰©ä½“相对于ä¸é€æ˜Žç‰©ä½“çš„"
+"æŽ’åºæ–¹å¼ã€‚这是因为ä¸é€æ˜Žå¯¹è±¡ä¸è¢«æŽ’åºï¼Œè€Œé€æ˜Žå¯¹è±¡åˆ™ä»ŽåŽå¾€å‰æŽ’åºï¼ˆå–决于优先"
"级)。"
#: doc/classes/Material.xml:27
@@ -39319,7 +40427,6 @@ msgid "Special button that brings up a [PopupMenu] when clicked."
msgstr "特殊按钮,点击åŽä¼šå¼¹å‡ºä¸€ä¸ª[PopupMenu]。"
#: doc/classes/MenuButton.xml:7
-#, fuzzy
msgid ""
"Special button that brings up a [PopupMenu] when clicked.\n"
"New items can be created inside this [PopupMenu] using [code]get_popup()."
@@ -39330,11 +40437,12 @@ msgid ""
"See also [BaseButton] which contains common properties and methods "
"associated with this node."
msgstr ""
-"特殊按钮,点击åŽä¼šå‡ºçŽ°ä¸€ä¸ª[PopupMenu]。\n"
-"使用[code]get_popup().add_item(\"My Item Name\")[/code]å¯ä»¥åœ¨è¿™ä¸ª[PopupMenu]"
-"中创建新项。你也å¯ä»¥ç›´æŽ¥ä»Žç¼–辑器中创建它们。è¦åšåˆ°è¿™ä¸€ç‚¹ï¼Œé€‰æ‹©[MenuButton]节"
-"点,然åŽåœ¨2D编辑器顶部的工具æ ä¸­ï¼Œç‚¹å‡»[b]Items[/b],然åŽåœ¨å¼¹å‡ºçš„窗å£ä¸­ç‚¹å‡»"
-"[b]Add[/b]。你将能够赋予æ¯ä¸ªé¡¹æ–°çš„属性。"
+"特殊按钮,点击åŽä¼šå¼¹å‡ºä¸€ä¸ª[PopupMenu]。\n"
+"å¯ä»¥ä½¿ç”¨[code]get_popup().add_item(\"My Item Name\")[/code]在这个[PopupMenu]"
+"中创建新项目。你也å¯ä»¥ç›´æŽ¥ä»Žç¼–辑器中创建它们。è¦åšåˆ°è¿™ç‚¹ï¼Œé€‰æ‹©[MenuButton]节"
+"点,然åŽåœ¨2D编辑器顶部的工具æ ä¸­ï¼Œç‚¹å‡»[b]Items[/b],然åŽç‚¹å‡»å¼¹å‡ºçª—å£ä¸­çš„"
+"[b]Add[/b]。你将能够赋予æ¯ä¸ªé¡¹ç›®æ–°çš„属性。\n"
+"å‚阅[BaseButton],它包å«äº†ä¸Žè¯¥èŠ‚ç‚¹ç›¸å…³çš„å¸¸ç”¨å±žæ€§å’Œæ–¹æ³•ã€‚"
#: doc/classes/MenuButton.xml:17 doc/classes/OptionButton.xml:86
msgid ""
@@ -39343,6 +40451,9 @@ msgid ""
"may cause a crash. If you wish to hide it or any of its children, use their "
"[member CanvasItem.visible] property."
msgstr ""
+"返回这个按钮中包å«çš„[PopupMenu]。\n"
+"[b]警告:[/b] 这是一个必需的内部节点,移除和释放它å¯èƒ½ä¼šå¯¼è‡´å´©æºƒã€‚如果你想éš"
+"è—它或它的任何å­èŠ‚ç‚¹ï¼Œè¯·ä½¿ç”¨å…¶çš„[member CanvasItem.visible]属性。"
#: doc/classes/MenuButton.xml:25
msgid ""
@@ -39360,9 +40471,8 @@ msgstr ""
"code]çš„å¦ä¸€ä¸ª[MenuButton]上方时,它将关闭当å‰çš„[MenuButton]并打开å¦ä¸€ä¸ªã€‚"
#: doc/classes/MenuButton.xml:41
-#, fuzzy
msgid "Emitted when [PopupMenu] of this MenuButton is about to show."
-msgstr "当这个MenuButtonçš„[PopupMenu]å³å°†æ˜¾ç¤ºæ—¶å‘出。"
+msgstr "当此MenuButtonçš„[PopupMenu]å³å°†æ˜¾ç¤ºæ—¶è§¦å‘。"
#: doc/classes/MenuButton.xml:49
msgid "[StyleBox] used when the [MenuButton] is disabled."
@@ -39390,26 +40500,35 @@ msgid "Text [Color] used when the [MenuButton] is disabled."
msgstr "[MenuButton]被ç¦ç”¨æ—¶çš„字体[Color]颜色。"
#: doc/classes/MenuButton.xml:64
+msgid ""
+"Text [Color] used when the [MenuButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+"当[MenuButton]获得焦点时使用的文本[Color]ã€‚åªæ›¿æ¢æŒ‰é’®çš„æ­£å¸¸æ–‡æœ¬é¢œè‰²ã€‚ç¦ç”¨ã€æ‚¬"
+"åœå’ŒæŒ‰ä¸‹çжæ€ä¼˜å…ˆäºŽè¿™ä¸ªé¢œè‰²ã€‚"
+
+#: doc/classes/MenuButton.xml:67
msgid "Text [Color] used when the [MenuButton] is being hovered."
msgstr "当鼠标在[MenuButton]上徘徊时使用的字体[Color]颜色。"
-#: doc/classes/MenuButton.xml:67
+#: doc/classes/MenuButton.xml:70
msgid "Text [Color] used when the [MenuButton] is being pressed."
msgstr "当[MenuButton]被按下时使用的字体[Color]颜色。"
-#: doc/classes/MenuButton.xml:70
+#: doc/classes/MenuButton.xml:73
msgid "[StyleBox] used when the [MenuButton] is being hovered."
msgstr "当鼠标在[MenuButton]上徘徊时使用的[StyleBox]æ ·å¼ç›’。"
-#: doc/classes/MenuButton.xml:73
+#: doc/classes/MenuButton.xml:76
msgid "The horizontal space between [MenuButton]'s icon and text."
msgstr "[MenuButton]的文字和图标之间的水平间隙。"
-#: doc/classes/MenuButton.xml:76
+#: doc/classes/MenuButton.xml:79
msgid "Default [StyleBox] for the [MenuButton]."
msgstr "[MenuButton]的默认[StyleBox]æ ·å¼ç›’。"
-#: doc/classes/MenuButton.xml:79
+#: doc/classes/MenuButton.xml:82
msgid "[StyleBox] used when the [MenuButton] is being pressed."
msgstr "[MenuButton]被按下时的[StyleBox]æ ·å¼ç›’。"
@@ -39438,6 +40557,12 @@ msgid ""
"If [code]simplify[/code] is [code]true[/code], the geometry can be further "
"simplified to reduce the amount of vertices. Disabled by default."
msgstr ""
+"从网格中计算出 [ConvexPolygonShape] 。\n"
+"如果 [code]clean[/code] 是 [code]true[/code] (默认),é‡å¤çš„和内部的顶点会被"
+"自动移除。你å¯ä»¥æŠŠå®ƒè®¾ä¸º [code]false[/code] æ¥ä½¿è¿™ä¸ªè¿‡ç¨‹æ›´å¿«ï¼Œå¦‚æžœä¸éœ€è¦çš„"
+"è¯ã€‚\n"
+"如果[code]simplify[/code]是[code]true[/code],å¯ä»¥è¿›ä¸€æ­¥ç®€åŒ–几何体以å‡å°‘顶点"
+"的数é‡ã€‚默认情况下是ç¦ç”¨çš„。"
#: doc/classes/Mesh.xml:30
msgid ""
@@ -39450,25 +40575,23 @@ msgstr ""
"[b]Note:[/b] 这个方法实际上ååºè¿”回顶点(例如输入顺时针,返回逆时针)。"
#: doc/classes/Mesh.xml:37
-#, fuzzy
msgid "Calculate a [ConcavePolygonShape] from the mesh."
-msgstr "从该网格中计算出一个[ConcavePolygonShape3D]凹多边形。"
+msgstr "从网格中计算出[ConcavePolygonShape]。"
#: doc/classes/Mesh.xml:43
msgid "Generate a [TriangleMesh] from the mesh."
msgstr "从网格生æˆ[TriangleMesh]。"
#: doc/classes/Mesh.xml:49
-#, fuzzy
msgid ""
"Returns the smallest [AABB] enclosing this mesh in local space. Not affected "
"by [code]custom_aabb[/code]. See also [method VisualInstance."
"get_transformed_aabb].\n"
"[b]Note:[/b] This is only implemented for [ArrayMesh] and [PrimitiveMesh]."
msgstr ""
-"返回能够包å«è¯¥ç½‘格的最å°[AABB]碰撞盒。它ä¸å—[code]custom_aabb[/code]属性影"
-"å“。\n"
-"[b]Note:[/b] 这个方法åªä¸º[ArrayMesh]å’Œ[PrimitiveMesh]实现。"
+"返回局部空间中包围这个网格的最å°çš„[AABB]。ä¸å—[code]custom_aabb[/code]的影"
+"å“。å‚阅 [method VisualInstance.get_transformed_aabb]。\n"
+"[b]注æ„:[/b]è¿™åªå¯¹[ArrayMesh]å’Œ[PrimitiveMesh]实现。"
#: doc/classes/Mesh.xml:56
msgid ""
@@ -39509,6 +40632,8 @@ msgid ""
"Sets a hint to be used for lightmap resolution in [BakedLightmap]. Overrides "
"[member BakedLightmap.default_texels_per_unit]."
msgstr ""
+"设置æç¤ºï¼Œç”¨äºŽ[BakedLightmap]中的光照贴图分辨率。é‡å†™[member BakedLightmap."
+"default_texels_per_unit]。"
#: doc/classes/Mesh.xml:102
msgid "Render array as points (one vertex equals one point)."
@@ -39523,9 +40648,8 @@ msgid "Render array as line strip."
msgstr "将顶点组渲染为线æ¡ã€‚"
#: doc/classes/Mesh.xml:111
-#, fuzzy
msgid "Render array as line loop (like line strip, but closed)."
-msgstr "将顶点组渲染为线æ¡ã€‚"
+msgstr "将数组渲染æˆçº¿çŠ¶çŽ¯ï¼ˆåƒçº¿æ¡ï¼Œä½†æ˜¯å°é—­çš„)。"
#: doc/classes/Mesh.xml:114
msgid "Render array as triangles (every three vertices a triangle is created)."
@@ -39536,9 +40660,8 @@ msgid "Render array as triangle strips."
msgstr "将顶点组渲染为三角形线框。"
#: doc/classes/Mesh.xml:120
-#, fuzzy
msgid "Render array as triangle fans."
-msgstr "将顶点组渲染为三角形线框。"
+msgstr "将数组渲染æˆä¸‰è§’形扇形。"
#: doc/classes/Mesh.xml:123 doc/classes/VisualServer.xml:3363
msgid "Blend shapes are normalized."
@@ -39591,12 +40714,11 @@ msgstr "网格组使用索引。"
msgid ""
"Used internally to calculate other [code]ARRAY_COMPRESS_*[/code] enum "
"values. Do not use."
-msgstr ""
+msgstr "内部用于计算其他[code]ARRAY_COMPRESS_*[/code]枚举值。ä¸è¦ä½¿ç”¨ã€‚"
#: doc/classes/Mesh.xml:159 doc/classes/VisualServer.xml:3300
-#, fuzzy
msgid "Flag used to mark a compressed (half float) vertex array."
-msgstr "曾ç»ç”¨äºŽæ ‡è®°åŽ‹ç¼©ï¼ˆåŠç²¾åº¦æµ®ç‚¹ï¼‰åˆ‡å‘数组的Flag。"
+msgstr "用于标记压缩(åŠç²¾åº¦æµ®ç‚¹ï¼‰é¡¶ç‚¹æ•°ç»„的标志。"
#: doc/classes/Mesh.xml:162 doc/classes/VisualServer.xml:3303
msgid "Flag used to mark a compressed (half float) normal array."
@@ -39621,14 +40743,12 @@ msgid ""
msgstr "曾用于标记第二套UVåæ ‡çš„压缩(åŠç²¾åº¦æµ®ç‚¹ï¼‰UVåæ ‡æ•°ç»„çš„Flag。"
#: doc/classes/Mesh.xml:177 doc/classes/VisualServer.xml:3318
-#, fuzzy
msgid "Flag used to mark a compressed bone array."
-msgstr "曾用于标记压缩索引数组的Flag。"
+msgstr "用于标记压缩骨骼数组的标志。"
#: doc/classes/Mesh.xml:180 doc/classes/VisualServer.xml:3321
-#, fuzzy
msgid "Flag used to mark a compressed (half float) weight array."
-msgstr "曾ç»ç”¨äºŽæ ‡è®°åŽ‹ç¼©ï¼ˆåŠç²¾åº¦æµ®ç‚¹ï¼‰åˆ‡å‘数组的Flag。"
+msgstr "用于标记压缩(åŠç²¾åº¦æµ®ç‚¹ï¼‰æƒé‡æ•°ç»„的标志。"
#: doc/classes/Mesh.xml:183 doc/classes/VisualServer.xml:3324
msgid "Flag used to mark a compressed index array."
@@ -39639,18 +40759,16 @@ msgid "Flag used to mark that the array contains 2D vertices."
msgstr "曾用于标记包å«2D顶点的数组的Flag。"
#: doc/classes/Mesh.xml:189 doc/classes/VisualServer.xml:3330
-#, fuzzy
msgid "Flag used to mark that the array uses 16-bit bones instead of 8-bit."
-msgstr "曾用于标记包å«2D顶点的数组的Flag。"
+msgstr "用于标记数组使用16ä½éª¨éª¼è€Œä¸æ˜¯8ä½çš„æ ‡å¿—。"
#: doc/classes/Mesh.xml:192 doc/classes/VisualServer.xml:3333
msgid ""
"Flag used to mark that the array uses an octahedral representation of normal "
"and tangent vectors rather than cartesian."
-msgstr ""
+msgstr "标志用于标记数组使用法线和切线å‘é‡çš„å…«é¢è¡¨ç¤ºæ³•ï¼Œè€Œä¸æ˜¯ç¬›å¡å°”å¼ã€‚"
#: doc/classes/Mesh.xml:195
-#, fuzzy
msgid ""
"Used to set flags [constant ARRAY_COMPRESS_VERTEX], [constant "
"ARRAY_COMPRESS_NORMAL], [constant ARRAY_COMPRESS_TANGENT], [constant "
@@ -39658,9 +40776,11 @@ msgid ""
"ARRAY_COMPRESS_TEX_UV2], [constant ARRAY_COMPRESS_WEIGHTS], and [constant "
"ARRAY_FLAG_USE_OCTAHEDRAL_COMPRESSION] quickly."
msgstr ""
-"曾用于快速设置 flags [constant ARRAY_COMPRESS_NORMAL], [constant "
-"ARRAY_COMPRESS_TANGENT], [constant ARRAY_COMPRESS_COLOR], [constant "
-"ARRAY_COMPRESS_TEX_UV] 和 [constant ARRAY_COMPRESS_TEX_UV2] 。"
+"用于快速设置标志[constant ARRAY_COMPRESS_VERTEX], [constant "
+"ARRAY_COMPRESS_NORMAL], [constant ARRAY_COMPRESS_TANGENT], [constant "
+"ARRAY_COMPRESS_COLOR], [constant ARRAY_COMPRESS_TEX_UV], [constant "
+"ARRAY_COMPRESS_TEX_UV2] , [constant ARRAY_COMPRESS_WEIGHTS], 和[constant "
+"ARRAY_FLAG_USE_OCTAHEDRAL_COMPRESSION] 。"
#: doc/classes/Mesh.xml:198
msgid "Array of vertices."
@@ -39703,7 +40823,6 @@ msgid "Helper tool to access and edit [Mesh] data."
msgstr "用于帮助编辑和使用 [Mesh] 网格数æ®çš„工具。"
#: doc/classes/MeshDataTool.xml:7
-#, fuzzy
msgid ""
"MeshDataTool provides access to individual vertices in a [Mesh]. It allows "
"users to read and edit vertex data of meshes. It also creates an array of "
@@ -39737,25 +40856,33 @@ msgid ""
"OpenGL/Face-culling]winding order[/url] for front faces of triangle "
"primitive modes."
msgstr ""
-"网格数æ®å·¥å…·(MeshDataTool) æä¾›äº†å¯¹[Mesh]中å•个顶点的访问。它å…许用户读å–和编"
-"辑网格的顶点数æ®ã€‚它还创建了一个é¢å’Œè¾¹çš„æ•°ç»„。\n"
-"è¦ä½¿ç”¨MeshDataTool,使用[method create_from_surface] æ¥åŠ è½½ä¸€ä¸ªMesh。当你结æŸ"
-"对数æ®çš„编辑åŽï¼Œä½¿ç”¨[method commit to surface] å°†æ•°æ®æäº¤åˆ°ä¸€ä¸ªç½‘æ ¼ä¸­ã€‚\n"
-"䏋颿˜¯ä¸€ä¸ªç”¨ä¾‹ï¼š\n"
+"MeshDataToolæä¾›å¯¹[Mesh]中å•个顶点的访问。它å…许用户读å–和编辑网格的顶点数"
+"æ®ã€‚还å¯ä»¥åˆ›å»ºé¢å’Œè¾¹çš„æ•°ç»„。\n"
+"è¦ä½¿ç”¨MeshDataTool,请使用[method create_from_surface]加载网格。当完æˆç¼–辑数"
+"æ®åŽï¼Œç”¨[method commit_to_surface]å°†æ•°æ®æäº¤ç»™Mesh。\n"
+"䏋颿˜¯å¦‚何使用MeshDataTool的例å­ã€‚\n"
"[codeblock]\n"
+"var mesh = ArrayMesh.new()\n"
+"mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, CubeMesh.new()."
+"get_mesh_arrays())\n"
"var mdt = MeshDataTool.new()\n"
"mdt.create_from_surface(mesh, 0)\n"
"for i in range(mdt.get_vertex_count()):\n"
" var vertex = mdt.get_vertex(i)\n"
-" ...\n"
+" # 在这个例å­ä¸­ï¼Œæˆ‘们将Mesh扩展了一个å•元,这样就会产生分离的é¢ï¼Œå› ä¸ºå®ƒæ˜¯"
+"å¹³é¢é˜´å½±ã€‚\n"
+" vertex += mdt.get_vertex_normal(i)\n"
+" # ä¿å­˜ä½ çš„æ”¹åŠ¨ã€‚\n"
" mdt.set_vertex(i, vertex)\n"
"mesh.surface_remove(0)\n"
"mdt.commit_to_surface(mesh)\n"
+"var mi = MeshInstance.new()\n"
+"mi.mesh = mesh\n"
+"add_child(mi)\n"
"[/codeblock]\n"
-"è‹¥è¦è¿›è¡Œç¨‹åºå‡ ä½•生æˆï¼Œå‚阅[ArrayMesh],[ImmediateGeometry3D]å’Œ"
-"[SurfaceTool]。\n"
-"[b]Note: [/b] Godot使用顺时针 [url=https://learnopengl.com/Advanced-OpenGL/"
-"Face-culling]winding order[/url]顺åºä¸ºä¸‰è§’形的默认å‰é¢ã€‚"
+"å‚阅[ArrayMesh]ã€[ImmediateGeometry]å’Œ[SurfaceTool]çš„ç¨‹åºæ€§å‡ ä½•体生æˆã€‚\n"
+"[b]注æ„:[/b] Godot对三角形原始模å¼çš„å‰ç«¯é¢ä½¿ç”¨é¡ºæ—¶é’ˆ[url=https://"
+"learnopengl.com/Advanced-OpenGL/Face-culling]缠绕顺åº[/url]。"
#: doc/classes/MeshDataTool.xml:36
msgid "Clears all data currently in MeshDataTool."
@@ -39942,7 +41069,6 @@ msgid "Node that instances meshes into a scenario."
msgstr "网格实例与场景相结åˆçš„节点。"
#: doc/classes/MeshInstance.xml:7
-#, fuzzy
msgid ""
"MeshInstance is a node that takes a [Mesh] resource and adds it to the "
"current scenario by creating an instance of it. This is the class most often "
@@ -39951,10 +41077,10 @@ msgid ""
"[Mesh] has to be instanced more than thousands of times at close proximity, "
"consider using a [MultiMesh] in a [MultiMeshInstance] instead."
msgstr ""
-"MeshInstance3D是一个节点,它获å–一个[Mesh]资æºï¼Œå¹¶é€šè¿‡åˆ›å»ºå®ƒçš„实例将其添加到"
-"当å‰åœºæ™¯ä¸­ã€‚这是最常用的渲染3D几何的类,å¯ä»¥ç”¨æ¥åœ¨è®¸å¤šåœ°æ–¹å®žä¾‹ä¸€ä¸ª[Mesh]。这"
-"å…许é‡ç”¨å‡ ä½•图形,å¯ä»¥èŠ‚çœèµ„æºã€‚当一个[Mesh]需è¦è¢«å®žä¾‹åŒ–ä¸Šåƒæ¬¡ä»¥ä¸Šæ—¶ï¼Œå¯ä»¥è€ƒ"
-"虑在[MultiMeshInstance3d]中使用[MultiMesh]。"
+"MeshInstance是一个节点,它获å–[Mesh]资æºå¹¶åˆ›å»ºä¸€ä¸ªå®žä¾‹ï¼Œå°†å…¶æ·»åŠ åˆ°å½“å‰åœºæ™¯"
+"ä¸­ã€‚è¿™æ˜¯æœ€å¸¸è¢«ç”¨æ¥æ¸²æŸ“3D几何体的类,这å¯ä»¥åœ¨å¾ˆå¤šåœ°æ–¹ä½¿ç”¨[Mesh]实例,它å…许é‡"
+"å¤ä½¿ç”¨å‡ ä½•体并节çœèµ„æºã€‚当[Mesh]å¿…é¡»åœ¨å¾ˆè¿‘çš„åœ°æ–¹è¢«å®žä¾‹åŒ–è¶…è¿‡æ•°åƒæ¬¡æ—¶ï¼Œå¯ä»¥è€ƒ"
+"虑在[MultiMeshInstance]中使用[MultiMesh]æ¥ä»£æ›¿ã€‚"
#: doc/classes/MeshInstance.xml:21
msgid ""
@@ -39967,38 +41093,41 @@ msgid ""
"If [code]simplify[/code] is [code]true[/code], the geometry can be further "
"simplified to reduce the amount of vertices. Disabled by default."
msgstr ""
+"这个助手创建[StaticBody]å­èŠ‚ç‚¹ï¼Œè¯¥èŠ‚ç‚¹å…·æœ‰ä»Žç½‘æ ¼å‡ ä½•å½¢çŠ¶è®¡ç®—çš„"
+"[ConvexPolygonShape]碰撞形状。其主è¦ç”¨äºŽæµ‹è¯•。\n"
+"如果[code]clean[/code]是[code]true[/code](默认),é‡å¤çš„顶点和内部顶点会被自"
+"动移除。å¯ä»¥æŠŠå®ƒè®¾ç½®ä¸º[code]false[/code],以便在ä¸éœ€è¦çš„æƒ…况下使这个过程更"
+"快。\n"
+"如果[code]simplify[/code]是[code]true[/code],å¯ä»¥è¿›ä¸€æ­¥ç®€åŒ–几何体以å‡å°‘顶点"
+"的数é‡ã€‚默认情况下是ç¦ç”¨çš„。"
#: doc/classes/MeshInstance.xml:29
-#, fuzzy
msgid ""
"This helper creates a [MeshInstance] child node with gizmos at every vertex "
"calculated from the mesh geometry. It's mainly used for testing."
msgstr ""
-"这个帮助类创建了一个[MeshInstance3D]å­èŠ‚ç‚¹ï¼Œåœ¨æ¯ä¸ªé¡¶ç‚¹ä¸Šéƒ½æœ‰ä»Žç½‘格几何计算出"
-"æ¥çš„辅助线框。它主è¦ç”¨äºŽæµ‹è¯•。"
+"这个辅助工具创建[MeshInstance]å­èŠ‚ç‚¹ï¼Œåœ¨æ¯ä¸ªé¡¶ç‚¹éƒ½æœ‰æ ¹æ®ç½‘格几何形状计算的辅"
+"助线框。其主è¦ç”¨äºŽæµ‹è¯•。"
#: doc/classes/MeshInstance.xml:35
-#, fuzzy
msgid ""
"This helper creates a [StaticBody] child node with multiple "
"[ConvexPolygonShape] collision shapes calculated from the mesh geometry via "
"convex decomposition. It's mainly used for testing."
msgstr ""
-"这个帮助类创建一个[StaticBody3D]å­èŠ‚ç‚¹ï¼Œè¯¥èŠ‚ç‚¹ä½¿ç”¨ä¸€ä¸ªä»Žç½‘æ ¼å‡ ä½•è®¡ç®—çš„"
-"[ConvexPolygonShape3D]碰撞形状。它主è¦ç”¨äºŽæµ‹è¯•。"
+"这个助手创建[StaticBody]å­èŠ‚ç‚¹ï¼Œè¯¥èŠ‚ç‚¹å…·æœ‰å¤šä¸ª[ConvexPolygonShape]碰撞形状,"
+"这些碰撞形状是通过凸é¢åˆ†è§£ä»Žç½‘格几何形状计算出æ¥çš„。其主è¦ç”¨äºŽæµ‹è¯•。"
#: doc/classes/MeshInstance.xml:41
-#, fuzzy
msgid ""
"This helper creates a [StaticBody] child node with a [ConcavePolygonShape] "
"collision shape calculated from the mesh geometry. It's mainly used for "
"testing."
msgstr ""
-"这个助手创建一个[StaticBody3D]å­èŠ‚ç‚¹ï¼Œä½¿ç”¨ä¸€ä¸ªä»Žç½‘æ ¼å‡ ä½•è®¡ç®—çš„"
-"[ConcavePolygonShape3D]碰撞形状。它主è¦ç”¨äºŽæµ‹è¯•。"
+"这个助手创建[StaticBody]å­èŠ‚ç‚¹ï¼Œå…¶ç¢°æ’žå½¢çŠ¶æ˜¯ç”±ç½‘æ ¼çš„å‡ ä½•å½¢çŠ¶è®¡ç®—å‡ºæ¥çš„"
+"[ConcavePolygonShape],其主è¦ç”¨äºŽæµ‹è¯•。"
#: doc/classes/MeshInstance.xml:48
-#, fuzzy
msgid ""
"Returns the [Material] that will be used by the [Mesh] when drawing. This "
"can return the [member GeometryInstance.material_override], the surface "
@@ -40006,33 +41135,30 @@ msgid ""
"[Material] defined in the [Mesh]. For example, if [member GeometryInstance."
"material_override] is used, all surfaces will return the override material."
msgstr ""
-"返回将在绘制时被[Mesh]使用的[Material]。这å¯ä»¥è¿”回[member GeometryInstance3D."
-"material_override],é¢ä¼šè¦†ç›–在[MeshInstance3D]中定义的[Material],或者在"
-"[Mesh]中定义的表é¢[Material]。例如,如果使用[member GeometryInstance3D."
-"Material_override]时,所有表é¢å°†è¿”回覆盖åŽçš„æè´¨ã€‚"
+"返回[Mesh]绘制时使用的[Material]。这å¯ä»¥è¿”回[member GeometryInstance."
+"material_override],这个[MeshInstance]中定义的表é¢è¦†ç›–[Material],或者[Mesh]"
+"中定义的表é¢[Material]。例如,如果使用[member GeometryInstance."
+"material_override],所有的表é¢éƒ½ä¼šè¿”回覆盖的æè´¨ã€‚"
#: doc/classes/MeshInstance.xml:55
-#, fuzzy
msgid "Returns the [Material] for a surface of the [Mesh] resource."
-msgstr "返回[Mesh]èµ„æºæŒ‡å®šè¡¨é¢çš„覆盖åŽçš„[Material]。"
+msgstr "返回[Mesh]资æºè¡¨é¢çš„[Material]。"
#: doc/classes/MeshInstance.xml:61
msgid "Returns the number of surface materials."
msgstr "è¿”å›žè¡¨é¢æè´¨çš„æ•°é‡ã€‚"
#: doc/classes/MeshInstance.xml:69
-#, fuzzy
msgid "Sets the [Material] for a surface of the [Mesh] resource."
-msgstr "返回[Mesh]èµ„æºæŒ‡å®šè¡¨é¢çš„覆盖åŽçš„[Material]。"
+msgstr "为[Mesh]资æºçš„表é¢è®¾ç½®[Material]。"
#: doc/classes/MeshInstance.xml:75
msgid "The [Mesh] resource for the instance."
msgstr "该实例的[Mesh]资æºã€‚"
#: doc/classes/MeshInstance.xml:78
-#, fuzzy
msgid "[NodePath] to the [Skeleton] associated with the instance."
-msgstr "通å‘与该实例关è”çš„[Skeleton3D]çš„[NodePath]。"
+msgstr "与实例相关è”[NodePath]çš„[Skeleton]。"
#: doc/classes/MeshInstance.xml:81
msgid "Sets the skin to be used by this instance."
@@ -40047,25 +41173,28 @@ msgid ""
"software_skinning_fallback] for details about how software skinning is "
"enabled."
msgstr ""
+"如果[code]true[/code],当使用软件蒙皮时,法线会被转æ¢ã€‚当ä¸éœ€è¦æ³•线时,设置为"
+"[code]false[/code]以获得更好的性能。\n"
+"关于如何å¯ç”¨è½¯ä»¶è’™çš®çš„细节,å‚阅[member ProjectSettings.rendering/quality/"
+"skinning/software_skinning_fallback]。"
#: doc/classes/MeshInstance2D.xml:4
msgid "Node used for displaying a [Mesh] in 2D."
msgstr "用于在2D中显示[Mesh]的节点。"
#: doc/classes/MeshInstance2D.xml:7
-#, fuzzy
msgid ""
"Node used for displaying a [Mesh] in 2D. Can be constructed from an existing "
"[Sprite] via a tool in the editor toolbar. Select \"Sprite\" then \"Convert "
"to Mesh2D\", select settings in popup and press \"Create Mesh2D\"."
msgstr ""
-"用于在2D中显示[Mesh]的节点。å¯ä»¥é€šè¿‡ç¼–辑器工具æ ä¸­çš„工具从现有的[Sprite2D]æž„"
-"建。选择“Sprite2Dâ€ï¼Œç„¶åŽâ€œConvert to Mesh2Dâ€ï¼Œåœ¨å¼¹å‡ºçª—å£ä¸­é€‰æ‹©è®¾ç½®ï¼Œç„¶åŽ"
-"按“Create Mesh2Dâ€ã€‚"
+"用于在2D中显示[Mesh]的节点。å¯ä»¥é€šè¿‡ç¼–辑器工具æ ä¸Šçš„工具从现有的[Sprite]æž„"
+"建。选择 \"Sprite\",然åŽé€‰æ‹© \"转æ¢ä¸ºMesh2D\",在弹出的窗å£ä¸­é€‰æ‹©è®¾ç½®å¹¶æŒ‰ä¸‹ "
+"\"创建Mesh2D\"。"
#: doc/classes/MeshInstance2D.xml:10
msgid "https://docs.godotengine.org/en/3.4/tutorials/2d/2d_meshes.html"
-msgstr "https://docs.godotengine.org/en/3.4/tutorials/2d/2d_meshes.html"
+msgstr "https://docs.godotengine.org/zh_CN/stable/tutorials/2d/2d_meshes.html"
#: doc/classes/MeshInstance2D.xml:16
msgid "The [Mesh] that will be drawn by the [MeshInstance2D]."
@@ -40085,13 +41214,12 @@ msgstr ""
"一页[/url],以获得æµè¡Œå¼•擎期望的标准法å‘图忠‡çš„æ¯”较。"
#: doc/classes/MeshInstance2D.xml:23 doc/classes/MultiMeshInstance2D.xml:23
-#, fuzzy
msgid ""
"The [Texture] that will be used if using the default [CanvasItemMaterial]. "
"Can be accessed as [code]TEXTURE[/code] in CanvasItem shader."
msgstr ""
-"如果使用默认的[CanvasItemMaterial], 本[Texture2D]将被使用。å¯ä»¥åœ¨CanvasItem"
-"ç€è‰²å™¨ä¸­è®¿é—®[code]TEXTURE[/code]。"
+"如果使用默认的[CanvasItemMaterial],就会使用[Texture]。å¯ä»¥åœ¨CanvasItemç€è‰²å™¨"
+"中作为[code]TEXTURE[/code]访问。"
#: doc/classes/MeshInstance2D.xml:29 doc/classes/MultiMeshInstance2D.xml:29
msgid "Emitted when the [member texture] is changed."
@@ -40135,9 +41263,8 @@ msgid "Returns the item's mesh."
msgstr "返回该 item 的网格模型。"
#: doc/classes/MeshLibrary.xml:52
-#, fuzzy
msgid "Returns the transform applied to the item's mesh."
-msgstr "返回应用于该项导航网格的转æ¢ã€‚"
+msgstr "è¿”å›žåº”ç”¨åˆ°é¡¹ç›®ç½‘æ ¼çš„å˜æ¢ã€‚"
#: doc/classes/MeshLibrary.xml:59
msgid "Returns the item's name."
@@ -40152,7 +41279,6 @@ msgid "Returns the transform applied to the item's navigation mesh."
msgstr "返回应用于该项导航网格的转æ¢ã€‚"
#: doc/classes/MeshLibrary.xml:80
-#, fuzzy
msgid ""
"When running in the editor, returns a generated item preview (a 3D rendering "
"in isometric perspective). When used in a running project, returns the "
@@ -40160,18 +41286,17 @@ msgid ""
"set_item_preview]. Returns an empty [Texture] if no preview was manually set "
"in a running project."
msgstr ""
-"在编辑器中è¿è¡Œæ—¶ï¼Œè¿”回生æˆçš„项目预览(ç­‰è·é€è§†çš„3D渲染)。当在一个正在è¿è¡Œçš„项"
-"目中使用时,返回手动定义的项目预览,å¯ä»¥ä½¿ç”¨[method set_item_preview]进行设"
-"置。如果在è¿è¡Œçš„项目中没有手动设置预览,则返回一个空的[Texture2D]。"
+"当在编辑器中è¿è¡Œæ—¶ï¼Œè¿”回生æˆçš„项目预览(等è·é€è§†çš„3D渲染)。当在è¿è¡Œçš„项目中"
+"使用时,返回手动定义的项目预览,å¯ä»¥ä½¿ç”¨[method set_item_preview]æ¥è®¾ç½®ã€‚如果"
+"在è¿è¡Œçš„项目中没有手动设置预览,返回空的[Texture]。"
#: doc/classes/MeshLibrary.xml:87
-#, fuzzy
msgid ""
"Returns an item's collision shapes.\n"
"The array consists of each [Shape] followed by its [Transform]."
msgstr ""
"返回项目的碰撞形状。\n"
-"数组由[Shape3D]和它的[Transform]组æˆã€‚"
+"这个数组由æ¯ä¸ª[Shape]和它的[Transform]组æˆã€‚"
#: doc/classes/MeshLibrary.xml:94
msgid "Gets an unused ID for a new item."
@@ -40186,9 +41311,8 @@ msgid "Sets the item's mesh."
msgstr "设置该项的网格。"
#: doc/classes/MeshLibrary.xml:117
-#, fuzzy
msgid "Sets the transform to apply to the item's mesh."
-msgstr "设置转æ¢åº”用于该项的导航网格。"
+msgstr "设置è¦åº”ç”¨åˆ°é¡¹ç›®ç½‘æ ¼çš„å˜æ¢ã€‚"
#: doc/classes/MeshLibrary.xml:125
msgid ""
@@ -40212,16 +41336,15 @@ msgid "Sets a texture to use as the item's preview icon in the editor."
msgstr "在编辑器中设置è¦ç”¨ä½œè¯¥é¡¹é¢„览图标的纹ç†ã€‚"
#: doc/classes/MeshLibrary.xml:158
-#, fuzzy
msgid ""
"Sets an item's collision shapes.\n"
"The array should consist of [Shape] objects, each followed by a [Transform] "
"that will be applied to it. For shapes that should not have a transform, use "
"[constant Transform.IDENTITY]."
msgstr ""
-"设置该项的碰撞形状。\n"
-"数组应该由[Shape3D]对象组æˆï¼Œæ¯ä¸ªå¯¹è±¡åŽé¢éƒ½æœ‰ä¸€ä¸ª[Transform],它将被应用到该"
-"Shape3D。对于ä¸åº”è¯¥æœ‰å˜æ¢çš„形状,使用 [constant Transform.IDENTITY]。"
+"设置项目的碰撞形状。\n"
+"数组应由[Shape]对象组æˆï¼Œæ¯ä¸ªå¯¹è±¡ä¹‹åŽéƒ½æœ‰åº”用于它的[Transform]。对于ä¸åº”有å˜"
+"æ¢çš„形状,使用[constant Transform.IDENTITY]。"
#: doc/classes/MeshTexture.xml:4
msgid "Simple texture that uses a mesh to draw itself."
@@ -40252,7 +41375,6 @@ msgid "Generic mobile VR implementation."
msgstr "通用移动VR实现。"
#: modules/mobile_vr/doc_classes/MobileVRInterface.xml:7
-#, fuzzy
msgid ""
"This is a generic mobile VR implementation where you need to provide details "
"about the phone and HMD used. It does not rely on any existing framework. "
@@ -40268,16 +41390,16 @@ msgid ""
" get_viewport().arvr = true\n"
"[/codeblock]"
msgstr ""
-"这是一个通用的移动VRå®žçŽ°ï¼Œä½ éœ€è¦æä¾›å…³äºŽæ‰‹æœºå’Œä½¿ç”¨çš„HMD的详细信æ¯ã€‚它ä¸ä¾èµ–于"
-"任何现有的框架。这是我们拥有的最基础的接å£ã€‚为了达到最佳效果,你需è¦ä¸€éƒ¨å¸¦æœ‰"
-"陀螺仪和加速计的手机。\n"
-"注æ„,å³ä½¿æ²¡æœ‰ä½ç½®è·Ÿè¸ªï¼Œæ‘„åƒå¤´ä¹Ÿä¼šå‡è®¾è€³æœºåœ¨1.85米的高度。你å¯ä»¥é€šè¿‡è®¾ç½®"
-"[member eye_height]æ¥æ”¹å˜å®ƒã€‚\n"
-"åˆå§‹åŒ–该接å£çš„æ–¹æ³•如下:\n"
+"这是通用的移动VRå®žçŽ°ï¼Œä½ éœ€è¦æä¾›å…³äºŽæ‰€ä½¿ç”¨çš„æ‰‹æœºå’ŒHMD的细节。它ä¸ä¾èµ–于任何现"
+"有的框架。这是我们拥有的最基本的接å£ã€‚为了达到最好的效果,你需è¦ä¸€ä¸ªæœ‰é™€èžºä»ª"
+"和加速器的手机。\n"
+"请注æ„,å³ä½¿æ²¡æœ‰ä½ç½®è·Ÿè¸ªï¼Œç›¸æœºä¹Ÿä¼šå‡å®šè€³æœºå¤„于1.85米的高度。你å¯ä»¥é€šè¿‡è®¾ç½®"
+"[member eye_height]æ¥æ”¹å˜è¿™ä¸€ç‚¹ã€‚\n"
+"ä½ å¯ä»¥æŒ‰ä»¥ä¸‹æ–¹å¼åˆå§‹åŒ–这个接å£:\n"
"[codeblock]\n"
-"var interface = XRServer.find_interface(\"Native mobile\")\n"
+"var interface = ARVRServer.find_interface(\"Native mobile\")\n"
"if interface and interface.initialize():\n"
-" get_viewport().xr = true\n"
+" get_viewport().arvr = true\n"
"[/codeblock]"
#: modules/mobile_vr/doc_classes/MobileVRInterface.xml:22
@@ -40291,11 +41413,10 @@ msgid "The width of the display in centimeters."
msgstr "显示器的宽度,以厘米为å•ä½ã€‚"
#: modules/mobile_vr/doc_classes/MobileVRInterface.xml:28
-#, fuzzy
msgid ""
"The height at which the camera is placed in relation to the ground (i.e. "
"[ARVROrigin] node)."
-msgstr "ç›¸æœºç›¸å¯¹äºŽåœ°é¢æ”¾ç½®çš„高度(å³[XROrigin3D]节点)。"
+msgstr "æ‘„åƒæœºç›¸å¯¹äºŽåœ°é¢æ‰€å¤„的高度,å³[ARVROrigin]节点。"
#: modules/mobile_vr/doc_classes/MobileVRInterface.xml:31
msgid ""
@@ -40328,7 +41449,6 @@ msgid "Provides high-performance mesh instancing."
msgstr "æä¾›é«˜æ€§èƒ½çš„网格实例化。"
#: doc/classes/MultiMesh.xml:7
-#, fuzzy
msgid ""
"MultiMesh provides low-level mesh instancing. Drawing thousands of "
"[MeshInstance] nodes can be slow, since each object is submitted to the GPU "
@@ -40341,20 +41461,20 @@ msgid ""
"Since instances may have any behavior, the AABB used for visibility must be "
"provided by the user."
msgstr ""
-"MultiMeshæä¾›äº†ä½Žçº§åˆ«çš„网格实例化功能。绘制æˆåƒä¸Šä¸‡çš„[MeshInstance3D]节点å¯èƒ½"
-"会很慢,因为æ¯ä¸ªå¯¹è±¡éƒ½è¦æäº¤ç»™GPUç„¶åŽå•独绘制。\n"
+"MultiMeshæä¾›äº†ä½Žçº§åˆ«çš„网格实例化功能。绘制数以åƒè®¡çš„[MeshInstance]节点å¯èƒ½ä¼š"
+"很慢,因为æ¯ä¸ªå¯¹è±¡éƒ½è¦æäº¤ç»™GPUç„¶åŽå•独绘制。\n"
"MultiMeshè¦å¿«å¾—多,因为它å¯ä»¥é€šè¿‡ä¸€æ¬¡ç»˜åˆ¶è°ƒç”¨æ¥ç»˜åˆ¶æˆåƒä¸Šä¸‡çš„实例,从而å‡å°‘"
"API的开销。\n"
-"缺点是,如果实例之间的è·ç¦»å¤ªè¿œï¼Œæ€§èƒ½å¯èƒ½ä¼šé™ä½Žï¼Œå› ä¸ºæ¯ä¸€ä¸ªå®žä¾‹éƒ½ä¼šè¢«æ¸²æŸ“(它"
-"们在空间上被索引为一整个对象)。\n"
-"由于实例å¯ä»¥æœ‰ä»»ä½•行为,用于å¯è§æ€§çš„AABB必须由用户æä¾›ã€‚"
+"缺点是,如果实例之间的è·ç¦»å¤ªè¿œï¼Œæ€§èƒ½å¯èƒ½ä¼šé™ä½Žï¼Œå› ä¸ºæ¯ä¸€ä¸ªå®žä¾‹æ€»æ˜¯ä¼šè¢«æ¸²æŸ“"
+"(它们在空间上被索引为整个对象)。\n"
+"由于实例å¯èƒ½å…·æœ‰ä»»ä½•行为,用于å¯è§æ€§çš„AABB必须由用户æä¾›ã€‚"
#: doc/classes/MultiMesh.xml:13 doc/classes/MultiMeshInstance.xml:11
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/3d/vertex_animation/"
"animating_thousands_of_fish.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/3d/vertex_animation/"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/3d/vertex_animation/"
"animating_thousands_of_fish.html"
#: doc/classes/MultiMesh.xml:14 doc/classes/MultiMeshInstance.xml:13
@@ -40362,14 +41482,16 @@ msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/optimization/using_multimesh."
"html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/optimization/using_multimesh."
-"html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/optimization/"
+"using_multimesh.html"
#: doc/classes/MultiMesh.xml:20
msgid ""
"Returns the visibility axis-aligned bounding box in local space. See also "
"[method VisualInstance.get_transformed_aabb]."
msgstr ""
+"返回局部空间中å¯è§æ€§è½´å¯¹é½çš„边界框。å‚阅[method VisualInstance."
+"get_transformed_aabb]。"
#: doc/classes/MultiMesh.xml:27
msgid "Gets a specific instance's color."
@@ -40399,9 +41521,15 @@ msgid ""
"(4 bytes as is) and [code]COLOR_FLOAT[/code] / [code]CUSTOM_DATA_FLOAT[/"
"code] is stored as 4 floats."
msgstr ""
+"一次性设置所有与实例相关的数æ®ã€‚这在从ç£ç›˜åŠ è½½æ•°æ®æˆ–从GDNativeå‡†å¤‡æ•°æ®æ—¶ç‰¹åˆ«"
+"有用。\n"
+"所有的数æ®éƒ½è¢«æ‰“包在一个大的浮点数数组中。数组å¯èƒ½çœ‹èµ·æ¥åƒè¿™æ ·ã€‚实例1çš„å˜æ¢ï¼Œ"
+"实例1的颜色数æ®ï¼Œå®žä¾‹1的自定义数æ®ï¼Œå®žä¾‹2çš„å˜æ¢ï¼Œå®žä¾‹2的颜色数æ®ï¼Œç­‰ç­‰ã€‚\n"
+"[Transform]存储为12浮点数,[Transform2D]存储为8浮点数,[code]COLOR_8BIT[/"
+"code] / [code]CUSTOM_DATA_8BIT[/code]存储为1浮点数(原为4字节),"
+"[code]COLOR_FLOAT[/code] / [code]CUSTOM_DATA_FLOAT[/code] 存储为4浮点数。"
#: doc/classes/MultiMesh.xml:65
-#, fuzzy
msgid ""
"Sets the color of a specific instance by [i]multiplying[/i] the mesh's "
"existing vertex colors.\n"
@@ -40409,21 +41537,19 @@ msgid ""
"[code]null[/code] on the [MultiMesh] and [member SpatialMaterial."
"vertex_color_use_as_albedo] is [code]true[/code] on the material."
msgstr ""
-"设置一个特定实例的颜色。\n"
-"为了使颜色生效,确ä¿[MultiMesh]上的[member use_colors]是[code]true[/code],æ"
-"质上的[member BaseMaterial3D.vertex_color_use_as_albedo] 是[code]true[/"
-"code]。"
+"通过[i]乘以[/i]网格的现有顶点颜色æ¥è®¾ç½®ç‰¹å®šå®žä¾‹çš„颜色。\n"
+"为了使颜色生效,请确ä¿[MultiMesh]上的[member color_format]䏿˜¯[code]null[/"
+"code],并且[member SpatialMaterial.vertex_color_use_as_albedo]上的æè´¨æ˜¯"
+"[code]true[/code]。"
#: doc/classes/MultiMesh.xml:74
-#, fuzzy
msgid ""
"Sets custom data for a specific instance. Although [Color] is used, it is "
"just a container for 4 floating point numbers. The format of the number can "
"change depending on the [enum CustomDataFormat] used."
msgstr ""
-"为一个特定的实例设置自定义数æ®ã€‚虽然使用了[Color]ï¼Œä½†å®ƒåªæ˜¯ä¸€ä¸ªå®¹çº³4个浮点数"
-"的容器。\n"
-"为了使用自定义数æ®ï¼Œç¡®ä¿[member use_custom_data]是[code]true[/code]。"
+"为特定的实例设置自定义数æ®ã€‚虽然使用了[Color]ï¼Œä½†å®ƒåªæ˜¯ä¸€ä¸ªå®¹çº³4个浮点数的容"
+"器。数字的格å¼å¯ä»¥æ ¹æ®ä½¿ç”¨çš„[enum CustomDataFormat]æ¥æ”¹å˜ã€‚"
#: doc/classes/MultiMesh.xml:82
msgid "Sets the [Transform] for a specific instance."
@@ -40435,7 +41561,7 @@ msgstr "为特定实例设置 [Transform2D]。"
#: doc/classes/MultiMesh.xml:96
msgid "Format of colors in color array that gets passed to shader."
-msgstr ""
+msgstr "传递给ç€è‰²å™¨çš„颜色数组中的颜色格å¼ã€‚"
#: doc/classes/MultiMesh.xml:99
msgid "Format of custom data in custom data array that gets passed to shader."
@@ -40521,46 +41647,42 @@ msgid "Node that instances a [MultiMesh]."
msgstr "实例化 [MultiMesh] 的节点。"
#: doc/classes/MultiMeshInstance.xml:7
-#, fuzzy
msgid ""
"[MultiMeshInstance] is a specialized node to instance [GeometryInstance]s "
"based on a [MultiMesh] resource.\n"
"This is useful to optimize the rendering of a high amount of instances of a "
"given mesh (for example trees in a forest or grass strands)."
msgstr ""
-"[MultiMeshInstance3D] 是基于 [MultiMesh] 资æºå®žä¾‹åŒ– [GeometryInstance3D] 的专"
-"用节点。\n"
-"这对于优化给定网格的大é‡å®žä¾‹ï¼ˆä¾‹å¦‚森林中的树木或è‰ä¸›ï¼‰çš„æ¸²æŸ“很有用。"
+"[MultiMeshInstance]是特有的节点,用于基于[MultiMesh]资æºçš„[GeometryInstance]"
+"的实例。\n"
+"这对于优化给定网格的大é‡å®žä¾‹çš„æ¸²æŸ“是éžå¸¸æœ‰ç”¨çš„(例如,森林中的树木或è‰ä¸›ï¼‰ã€‚"
#: doc/classes/MultiMeshInstance.xml:12
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/3d/using_multi_mesh_instance."
"html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/3d/using_multi_mesh_instance."
-"html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/3d/"
+"using_multi_mesh_instance.html"
#: doc/classes/MultiMeshInstance.xml:19
-#, fuzzy
msgid ""
"The [MultiMesh] resource that will be used and shared among all instances of "
"the [MultiMeshInstance]."
-msgstr ""
-"将在 [MultiMeshInstance3D] 的所有实例之间使用和共享的 [MultiMesh] 资æºã€‚"
+msgstr "在[MultiMeshInstance]的所有实例中使用和共享的[MultiMesh]资æºã€‚"
#: doc/classes/MultiMeshInstance2D.xml:4
msgid "Node that instances a [MultiMesh] in 2D."
msgstr "在 2D 中实例化 [MultiMesh] 的节点。"
#: doc/classes/MultiMeshInstance2D.xml:7
-#, fuzzy
msgid ""
"[MultiMeshInstance2D] is a specialized node to instance a [MultiMesh] "
"resource in 2D.\n"
"Usage is the same as [MultiMeshInstance]."
msgstr ""
-"[MultiMeshInstance2D] 是一个专门用于在 2D 中实例化 [MultiMesh] 资æºçš„节点。\n"
-"用法与[MultiMeshInstance3D]相åŒã€‚"
+"[MultiMeshInstance2D]是特有的节点,用于实例化2Dçš„[MultiMesh]资æºã€‚\n"
+"使用方法与[MultiMeshInstance]相åŒã€‚"
#: doc/classes/MultiMeshInstance2D.xml:16
msgid "The [MultiMesh] that will be drawn by the [MultiMeshInstance2D]."
@@ -40571,7 +41693,6 @@ msgid "High-level multiplayer API."
msgstr "高级多人游æˆAPI。"
#: doc/classes/MultiplayerAPI.xml:7
-#, fuzzy
msgid ""
"This class implements most of the logic behind the high-level multiplayer "
"API. See also [NetworkedMultiplayerPeer].\n"
@@ -40584,11 +41705,13 @@ msgid ""
"detail and isn't meant to be used by non-Godot servers. It may change "
"without notice."
msgstr ""
-"这个类实现了高层多人游æˆAPI背åŽçš„大部分逻辑。\n"
-"默认情况下,[SceneTree]有一个对该类的引用,用于在整个场景中æä¾›å¤šäººæ¸¸æˆåŠŸèƒ½"
-"(å³RPC/RSET)。\n"
-"通过设置[member Node.custom_multiplayer]属性,å¯ä»¥è¦†ç›–特定节点使用的多人游æˆ"
-"API实例,有效地å…许在åŒä¸€åœºæ™¯ä¸­åŒæ—¶è¿è¡Œå®¢æˆ·ç«¯å’ŒæœåŠ¡å™¨ã€‚"
+"该类实现了高阶多人游æˆAPI背åŽçš„大部分逻辑。å‚阅[NetworkedMultiplayerPeer]。\n"
+"默认情况下,[SceneTree]有对该类的引用,用于在整个场景中æä¾›å¤šäººæ¸¸æˆåŠŸèƒ½ï¼ˆå³"
+"RPC/RSET)。\n"
+"通过设置[member Node.custom_multiplayer]属性,å¯ä»¥é‡å†™ç‰¹å®šèŠ‚ç‚¹ä½¿ç”¨çš„å¤šäººæ¸¸æˆ"
+"API实例,从而有效地å…许在åŒä¸€åœºæ™¯ä¸­åŒæ—¶è¿è¡Œå®¢æˆ·ç«¯å’ŒæœåŠ¡å™¨ã€‚\n"
+"[b]注æ„:[/b] 高阶的多人游æˆAPIåè®®å®žçŽ°ç»†èŠ‚ï¼Œå¹¶ä¸æ„味ç€å¯ä»¥è¢«éžGodotæœåŠ¡å™¨ä½¿"
+"用。它å¯èƒ½ä¼šæ”¹å˜ï¼Œä¸åšå¦è¡Œé€šçŸ¥ã€‚"
#: doc/classes/MultiplayerAPI.xml:18
msgid ""
@@ -40656,7 +41779,6 @@ msgstr ""
"å³å‘所有对等体广播。"
#: doc/classes/MultiplayerAPI.xml:71
-#, fuzzy
msgid ""
"If [code]true[/code] (or if the [member network_peer] has [member PacketPeer."
"allow_object_decoding] set to [code]true[/code]), the MultiplayerAPI will "
@@ -40665,8 +41787,9 @@ msgid ""
"Do not use this option if the serialized object comes from untrusted sources "
"to avoid potential security threats such as remote code execution."
msgstr ""
-"如果[code]true[/code],多人游æˆAPIå°†å…许在RPC/RSETs期间对对象进行编ç å’Œè§£"
-"ç ã€‚\n"
+"如果[code]true[/code],或者如果[member network_peer]的[member PacketPeer."
+"allow_object_decoding]设置为[code]true[/code],多人游æˆAPIå°†å…许在RPC/RSETs期"
+"间的对象进行编ç å’Œè§£ç ã€‚\n"
"[b]警告:[/b] ååºåˆ—化的对象å¯èƒ½åŒ…å«ä¼šè¢«æ‰§è¡Œçš„代ç ã€‚如果åºåˆ—化的对象æ¥è‡ªä¸å—"
"ä¿¡ä»»çš„æ¥æºï¼Œè¯·ä¸è¦ä½¿ç”¨è¿™ä¸ªé€‰é¡¹ï¼Œä»¥é¿å…潜在的安全å¨èƒï¼Œå¦‚è¿œç¨‹ä»£ç æ‰§è¡Œã€‚"
@@ -40695,7 +41818,6 @@ msgstr ""
"连接。"
#: doc/classes/MultiplayerAPI.xml:81
-#, fuzzy
msgid ""
"The root node to use for RPCs. Instead of an absolute path, a relative path "
"will be used to find the node upon which the RPC should be executed.\n"
@@ -40703,10 +41825,9 @@ msgid ""
"managed by different MultiplayerAPI, allowing for example to run both client "
"and server in the same scene."
msgstr ""
-"设置用于 RPC çš„åŸºæœ¬æ ¹èŠ‚ç‚¹ã€‚å°†ä½¿ç”¨ç›¸å¯¹è·¯å¾„è€Œä¸æ˜¯ç»å¯¹è·¯å¾„æ¥æŸ¥æ‰¾åº”在其上执行 "
-"RPC 的节点。\n"
-"这有效地å…许场景树的ä¸åŒåˆ†æ”¯ç”±ä¸åŒçš„ MultiplayerAPI 管ç†ï¼Œä¾‹å¦‚å…许在åŒä¸€åœºæ™¯"
-"中è¿è¡Œå®¢æˆ·ç«¯å’ŒæœåŠ¡å™¨ã€‚"
+"用于RPC的根节点。ä¸ä½¿ç”¨ç»å¯¹è·¯å¾„,而是使用相对路径æ¥å¯»æ‰¾åº”该执行RPC的节点。\n"
+"这有效地å…许场景树的ä¸åŒåˆ†æ”¯ç”±ä¸åŒçš„MultiplayerAPI管ç†ï¼Œä¾‹å¦‚å…许在åŒä¸€ä¸ªåœºæ™¯"
+"ä¸­åŒæ—¶è¿è¡Œå®¢æˆ·ç«¯å’ŒæœåŠ¡å™¨ã€‚"
#: doc/classes/MultiplayerAPI.xml:88
msgid ""
@@ -40808,13 +41929,12 @@ msgstr ""
"å—æ¥è‡ªèŠ‚ç‚¹çš„ç½‘ç»œä¸»ç«™çš„è°ƒç”¨æˆ–å±žæ€§æ›´æ”¹ï¼Œè§[method Node.set_network_master]。"
#: doc/classes/MultiplayerAPI.xml:135
-#, fuzzy
msgid ""
"[i]Deprecated.[/i] Use [constant RPC_MODE_PUPPET] instead. Analogous to the "
"[code]slave[/code] keyword."
msgstr ""
-"行为类似于 [constant RPC_MODE_PUPPET],但也会使调用或属性在本地改å˜ã€‚类似于 "
-"[code]puppetsync[/code] 关键字。"
+"[i]已废弃。[/i] 使用[constant RPC_MODE_PUPPET]代替。类似于[code]slave[/code]"
+"关键字。"
#: doc/classes/MultiplayerAPI.xml:138
msgid ""
@@ -40825,13 +41945,12 @@ msgstr ""
"[code]remoteesync[/code]关键字。"
#: doc/classes/MultiplayerAPI.xml:141
-#, fuzzy
msgid ""
"[i]Deprecated.[/i] Use [constant RPC_MODE_REMOTESYNC] instead. Analogous to "
"the [code]sync[/code] keyword."
msgstr ""
-"行为类似于[constant RPC_MODE_REMOTE],但也会使调用或属性在本地改å˜ã€‚类似于"
-"[code]remoteesync[/code]关键字。"
+"[i]已废弃。[/i] 使用[constant RPC_MODE_REMOTESYNC]代替。类似于[code]sync[/"
+"code]关键字。"
#: doc/classes/MultiplayerAPI.xml:144
msgid ""
@@ -40870,8 +41989,8 @@ msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/threads/using_multiple_threads."
"html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/threads/using_multiple_threads."
-"html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/threads/"
+"using_multiple_threads.html"
#: doc/classes/Mutex.xml:16
msgid ""
@@ -40883,14 +42002,15 @@ msgstr ""
"[b]注æ„:[/b] å¦‚æžœçº¿ç¨‹å·²ç»æ‹¥æœ‰äº’æ–¥é”的所有æƒï¼Œè¯¥å‡½æ•°å°†æ— é˜»å¡žåœ°è¿”回。"
#: doc/classes/Mutex.xml:23
-#, fuzzy
msgid ""
"Tries locking this [Mutex], but does not block. Returns [constant OK] on "
"success, [constant ERR_BUSY] otherwise.\n"
"[b]Note:[/b] This function returns [constant OK] if the thread already has "
"ownership of the mutex."
msgstr ""
-"试图é”定这个[Mutex],但并ä¸é˜»å¡žã€‚æˆåŠŸæ—¶è¿”å›ž[常é‡OK],å¦åˆ™è¿”回[常é‡ERR_BUSY]。"
+"试图é”定此[Mutex],但并ä¸é˜»å¡žã€‚æˆåŠŸæ—¶è¿”å›ž[constant OK],å¦åˆ™è¿”回[constant "
+"ERR_BUSY]。\n"
+"[b]注æ„:[/b] å¦‚æžœçº¿ç¨‹å·²ç»æ‹¥æœ‰äº†è¯¥Mutex的所有æƒï¼Œè¯¥å‡½æ•°è¿”回[constant OK]。"
#: doc/classes/Mutex.xml:30
msgid ""
@@ -40936,7 +42056,6 @@ msgstr ""
"字符串。"
#: modules/gdnative/doc_classes/NativeScript.xml:40
-#, fuzzy
msgid ""
"Constructs a new object of the base type with a script of this type already "
"attached.\n"
@@ -40944,8 +42063,8 @@ msgid ""
"passed to the native constructor function. This will change with in a future "
"API extension."
msgstr ""
-"构建一个基本类型的新对象,并附加一个该类型的脚本。\n"
-"[i]注æ„[/i]ã€‚ä¼ é€’ç»™è¿™ä¸ªå‡½æ•°çš„ä»»ä½•å‚æ•°éƒ½å°†è¢«å¿½ç•¥ï¼Œä¸ä¼šä¼ é€’给本地构造函数。这将"
+"构建基础类型的新对象,并附加此类型的脚本。\n"
+"[b]注æ„:[/b] ä¼ é€’ç»™è¿™ä¸ªå‡½æ•°çš„ä»»ä½•å‚æ•°å°†è¢«å¿½ç•¥ï¼Œä¸ä¼šä¼ é€’给局部构造函数。这将"
"在未æ¥çš„API扩展中改å˜ã€‚"
#: doc/classes/Navigation.xml:4
@@ -40953,7 +42072,6 @@ msgid "Mesh-based navigation and pathfinding node."
msgstr "基于网格的导航和寻路节点。"
#: doc/classes/Navigation.xml:7
-#, fuzzy
msgid ""
"Provides navigation and pathfinding within a collection of "
"[NavigationMesh]es. By default, these will be automatically collected from "
@@ -40965,19 +42083,21 @@ msgid ""
"not always return optimal paths as expected. These issues will be fixed in "
"Godot 4.0."
msgstr ""
-"在[NavigationMesh]的集åˆä¸­æä¾›å¯¼èˆªå’Œå¯»è·¯ã€‚这将会从å­èŠ‚ç‚¹[NavigationRegion3D]"
-"中被自动收集。除了基本的寻路,这个类还帮助导航代ç†ä¸Žå¯¼èˆªä¸Šçš„网格对é½ã€‚"
+"在[NavigationMesh]的集åˆä¸­æä¾›å¯¼èˆªå’Œå¯»è·¯åŠŸèƒ½ã€‚é»˜è®¤æƒ…å†µä¸‹ï¼Œè¿™äº›å°†è‡ªåŠ¨ä»Žå­"
+"[NavigationMeshInstance]节点中收集,也å¯ä»¥é€šè¿‡[method navmesh_add]峿—¶æ·»åŠ ã€‚"
+"除了基本的寻路之外,这个类还能帮助导航代ç†ä¸Žå…¶æ‰€å¯¼èˆªçš„网格对é½ã€‚\n"
+"[b]注æ„:[/b] ç›®å‰çš„å¯¼èˆªç³»ç»Ÿæœ‰è®¸å¤šå·²çŸ¥çš„é—®é¢˜ï¼Œå¹¶ä¸æ€»æ˜¯èƒ½åƒé¢„期的那样返回最佳"
+"路径。这些问题将在Godot 4.0中得到解决。"
#: doc/classes/Navigation.xml:11 doc/classes/NavigationMesh.xml:10
msgid "https://godotengine.org/asset-library/asset/124"
msgstr "https://godotengine.org/asset-library/asset/124"
#: doc/classes/Navigation.xml:18 doc/classes/Navigation2D.xml:18
-#, fuzzy
msgid ""
"Returns the navigation point closest to the point given. Points are in local "
"coordinate space."
-msgstr "è¿”å›žæŒ‡å®šåæ ‡çš„图集或自动图å—中,å­å›¾å—的导航多边形。"
+msgstr "返回最接近给定点的导航点。点ä½äºŽå±€éƒ¨å标空间。"
#: doc/classes/Navigation.xml:25
msgid ""
@@ -41011,7 +42131,6 @@ msgstr ""
"导航网格之间的交点。如果找到多个交点,则返回最接近线段起点的交点。"
#: doc/classes/Navigation.xml:50
-#, fuzzy
msgid ""
"Returns the path between two given points. Points are in local coordinate "
"space. If [code]optimize[/code] is [code]true[/code] (the default), the "
@@ -41020,9 +42139,11 @@ msgid ""
"[b]Note:[/b] This method has known issues and will often return non-optimal "
"paths. These issues will be fixed in Godot 4.0."
msgstr ""
-"è¿”å›žä¸¤ä¸ªç»™å®šç‚¹ä¹‹é—´çš„è·¯å¾„ã€‚ç‚¹åœ¨å±€éƒ¨åæ ‡ç©ºé—´ä¸­ã€‚如果[code]optimize[/code] 为 "
-"[code]true[/code](默认值),则在路径计算中考虑与æ¯ä¸ª[NavigationMesh]相关è”的代"
-"ç†å±žæ€§(åŠå¾„ã€é«˜åº¦ç­‰),å¦åˆ™å®ƒä»¬å°†è¢«å¿½ç•¥ã€‚"
+"è¿”å›žä¸¤ä¸ªç»™å®šç‚¹ä¹‹é—´çš„è·¯å¾„ã€‚ç‚¹æ˜¯åœ¨å±€éƒ¨åæ ‡ç©ºé—´ä¸­ã€‚如果[code]optimize[/code]是"
+"[code]true[/code](默认),与æ¯ä¸ª[NavigationMesh]相关的代ç†å±žæ€§ï¼ˆåŠå¾„ã€é«˜åº¦"
+"等)在路径计算中被考虑,å¦åˆ™å…¶è¢«å¿½ç•¥ã€‚\n"
+"[b]注æ„:[/b] 这个方法有已知的问题,ç»å¸¸ä¼šè¿”å›žéžæœ€ä½³çš„路径。这些问题将在"
+"Godot 4.0中得到修正。"
#: doc/classes/Navigation.xml:60
msgid ""
@@ -41036,14 +42157,12 @@ msgstr ""
"的 [code]owner[/code] 用作 [method get_closest_point_owner] 的返回值。"
#: doc/classes/Navigation.xml:67
-#, fuzzy
msgid "Removes the [NavigationMesh] with the given ID."
-msgstr "返回指定å称的动画节点。"
+msgstr "移除具有指定ID的[NavigationMesh]。"
#: doc/classes/Navigation.xml:75
-#, fuzzy
msgid "Sets the transform applied to the [NavigationMesh] with the given ID."
-msgstr "返回应用于该项导航网格的转æ¢ã€‚"
+msgstr "设置应用于具有指定IDçš„[NavigationMesh]çš„å˜æ¢ã€‚"
#: doc/classes/Navigation.xml:81
msgid ""
@@ -41058,7 +42177,6 @@ msgid "2D navigation and pathfinding node."
msgstr "2D导航和寻路节点。"
#: doc/classes/Navigation2D.xml:7
-#, fuzzy
msgid ""
"Navigation2D provides navigation and pathfinding within a 2D area, specified "
"as a collection of [NavigationPolygon] resources. By default, these are "
@@ -41068,8 +42186,11 @@ msgid ""
"not always return optimal paths as expected. These issues will be fixed in "
"Godot 4.0."
msgstr ""
-"Navigation2D在一个2D区域内æä¾›å¯¼èˆªå’Œå¯»è·¯ï¼ŒæŒ‡å®šä¸º[NavigationPolygon]资æºçš„集"
-"åˆã€‚这些资æºè¢«è‡ªåŠ¨ä»Žå­[NavigationRegion2D]节点中收集。"
+"Navigation2D在2D区域内æä¾›å¯¼èˆªå’Œå¯»è·¯ï¼ŒæŒ‡å®šä¸º[NavigationPolygon]资æºçš„集åˆã€‚默"
+"认情况下,这些资æºè‡ªåŠ¨ä»Žå­[NavigationPolygonInstance]节点中收集,但其也å¯ä»¥é€š"
+"过[method navpoly_add]峿—¶æ·»åŠ ã€‚\n"
+"[b]注æ„:[/b] 当å‰çš„å¯¼èˆªç³»ç»Ÿæœ‰è®¸å¤šå·²çŸ¥çš„é—®é¢˜ï¼Œå¹¶ä¸æ€»æ˜¯èƒ½åƒé¢„期的那样返回最佳"
+"的路径。这些问题将在Godot 4.0中得到解决。"
#: doc/classes/Navigation2D.xml:11 doc/classes/NavigationPolygon.xml:27
msgid "https://godotengine.org/asset-library/asset/117"
@@ -41088,7 +42209,6 @@ msgstr ""
"给定的所有者(如果çœç•¥ [code]owner[/code] 傿•°ï¼Œåˆ™è¿”回 [code]null[/code])。"
#: doc/classes/Navigation2D.xml:34
-#, fuzzy
msgid ""
"Returns the path between two given points. Points are in local coordinate "
"space. If [code]optimize[/code] is [code]true[/code] (the default), the path "
@@ -41096,8 +42216,10 @@ msgid ""
"[b]Note:[/b] This method has known issues and will often return non-optimal "
"paths. These issues will be fixed in Godot 4.0."
msgstr ""
-"è¿”å›žä¸¤ä¸ªç»™å®šç‚¹ä¹‹é—´çš„è·¯å¾„ã€‚ç‚¹åœ¨å±€éƒ¨åæ ‡ç©ºé—´ä¸­ã€‚如果[code]optimize[/code]为"
-"[code]true[/code](默认),则路径将通过åˆå¹¶è·¯å¾„段æ¥å¹³æ»‘。"
+"è¿”å›žä¸¤ä¸ªç»™å®šç‚¹ä¹‹é—´çš„è·¯å¾„ã€‚ç‚¹æ˜¯åœ¨å±€éƒ¨åæ ‡ç©ºé—´ä¸­ã€‚如果[code]optimize[/code]为"
+"[code]true[/code](默认值),路径将尽å¯èƒ½åœ°åˆå¹¶è·¯å¾„段,从而平滑。\n"
+"[b]注æ„:[/b] 这个方法有已知的问题,ç»å¸¸ä¼šè¿”å›žéžæœ€ä½³çš„路径。这些问题将在"
+"Godot 4.0中得到解决。"
#: doc/classes/Navigation2D.xml:44
msgid ""
@@ -41111,15 +42233,13 @@ msgstr ""
"的 [code]owner[/code] 用作 [method get_closest_point_owner] 的返回值。"
#: doc/classes/Navigation2D.xml:51
-#, fuzzy
msgid "Removes the [NavigationPolygon] with the given ID."
-msgstr "返回图å—的导航多边形。"
+msgstr "移除具有指定ID的[NavigationPolygon]。"
#: doc/classes/Navigation2D.xml:59
-#, fuzzy
msgid ""
"Sets the transform applied to the [NavigationPolygon] with the given ID."
-msgstr "返回应用于该项导航网格的转æ¢ã€‚"
+msgstr "设置应用于具有指定IDçš„[NavigationPolygon]çš„å˜æ¢ã€‚"
#: doc/classes/NavigationMesh.xml:4
msgid "A mesh to approximate the walkable areas and obstacles."
@@ -41141,10 +42261,9 @@ msgid ""
msgstr "使用调用[method get_vertices]得到的顶点的索引添加一个多边形。"
#: doc/classes/NavigationMesh.xml:23
-#, fuzzy
msgid ""
"Clears the array of polygons, but it doesn't clear the array of vertices."
-msgstr "æ¸…é™¤å¤šè¾¹å½¢æ•°ç»„ï¼Œä½†ä¸æ¸…除轮廓和顶点数组。"
+msgstr "æ¸…é™¤å¤šè¾¹å½¢æ•°ç»„ï¼Œä½†ä¸æ¸…除顶点数组。"
#: doc/classes/NavigationMesh.xml:30
msgid ""
@@ -41153,30 +42272,26 @@ msgid ""
msgstr "é€šè¿‡æ ¹æ® [Mesh] 设置顶点和索引æ¥åˆå§‹åŒ–导航网格。"
#: doc/classes/NavigationMesh.xml:37
-#, fuzzy
msgid ""
"Returns whether the specified [code]bit[/code] of the [member geometry/"
"collision_mask] is set."
-msgstr "如果指定碰撞é®ç½©bitä½è¢«è®¾ç½®ï¼Œè¿”回[code]true[/code]。"
+msgstr "返回[member geometry/collision_mask]的指定[code]bit[/code]是å¦è¢«è®¾ç½®ã€‚"
#: doc/classes/NavigationMesh.xml:44 doc/classes/NavigationPolygon.xml:81
-#, fuzzy
msgid ""
"Returns a [PoolIntArray] containing the indices of the vertices of a created "
"polygon."
-msgstr "返回一个[PackedInt32Array],其中包å«ä¸€ä¸ªåˆ›å»ºå¤šè¾¹å½¢çš„顶点的索引。"
+msgstr "返回包å«åˆ›å»ºçš„多边形顶点索引的[PoolIntArray]。"
#: doc/classes/NavigationMesh.xml:50
-#, fuzzy
msgid "Returns the number of polygons in the navigation mesh."
-msgstr "返回动画中的帧数。"
+msgstr "返回导航网格中的多边形数é‡ã€‚"
#: doc/classes/NavigationMesh.xml:56
-#, fuzzy
msgid ""
"Returns a [PoolVector3Array] containing all the vertices being used to "
"create the polygons."
-msgstr "返回一个[PackedVector2Array]ï¼ŒåŒ…å«æ‰€æœ‰ç”¨äºŽåˆ›å»ºå¤šè¾¹å½¢çš„顶点。"
+msgstr "返回包å«ç”¨äºŽåˆ›å»ºå¤šè¾¹å½¢çš„æ‰€æœ‰é¡¶ç‚¹çš„[PoolVector3Array]。"
#: doc/classes/NavigationMesh.xml:64
msgid ""
@@ -41216,9 +42331,8 @@ msgstr ""
"[b]注æ„:[/b]烘焙时,该值将å‘下èˆå…¥åˆ°æœ€æŽ¥è¿‘çš„[member cell/height]çš„å€æ•°ã€‚"
#: doc/classes/NavigationMesh.xml:86
-#, fuzzy
msgid "The maximum slope that is considered walkable, in degrees."
-msgstr "一个 Agent 能移动的最大速度。"
+msgstr "认为å¯è¡Œèµ°çš„æœ€å¤§å¡åº¦ï¼Œå•使˜¯åº¦ã€‚"
#: doc/classes/NavigationMesh.xml:89
msgid ""
@@ -41231,9 +42345,8 @@ msgstr ""
"[b]注æ„:[/b]烘焙时,这个值会å‘ä¸Šå–æ•´åˆ°æœ€æŽ¥è¿‘çš„[member cell/size]çš„å€æ•°ã€‚"
#: doc/classes/NavigationMesh.xml:93
-#, fuzzy
msgid "The Y axis cell size to use for fields."
-msgstr "ç”¨äºŽâ€œå‘¼å«æ–¹æ³•â€è½¨é“çš„å‘¼å«æ¨¡å¼ã€‚"
+msgstr "用于字段Yè½´å•元的尺寸。"
#: doc/classes/NavigationMesh.xml:96
msgid "The XZ plane cell size to use for fields."
@@ -41248,13 +42361,13 @@ msgstr "生æˆç»†åˆ†ç½‘格时使用的采样è·ç¦»ï¼Œä»¥å•元为å•ä½ã€‚"
msgid ""
"The maximum distance the detail mesh surface should deviate from "
"heightfield, in cell unit."
-msgstr ""
+msgstr "细节网格表é¢åº”å离高度场的最大è·ç¦»ï¼Œä»¥å•元格为å•ä½ã€‚"
#: doc/classes/NavigationMesh.xml:105
msgid ""
"The maximum distance a simplfied contour's border edges should deviate the "
"original raw contour."
-msgstr ""
+msgstr "简化轮廓的边界边缘应å离原始原始轮廓的最大è·ç¦»ã€‚"
#: doc/classes/NavigationMesh.xml:108
msgid ""
@@ -41262,23 +42375,28 @@ msgid ""
"[b]Note:[/b] While baking, this value will be rounded up to the nearest "
"multiple of [member cell/size]."
msgstr ""
+"沿网格边界的轮廓的最大å…许长度。\n"
+"[b]注æ„:[/b]烘焙时,这个值会å‘ä¸Šå–æ•´åˆ°æœ€æŽ¥è¿‘çš„[member cell/size]çš„å€æ•°ã€‚"
#: doc/classes/NavigationMesh.xml:112
msgid ""
"If [code]true[/code], marks walkable spans as not walkable if the clearance "
"above the span is less than [member agent/height]."
msgstr ""
+"如果 [code]true[/code],如果跨度上方的间隙å°äºŽ [member agent/height],则将å¯"
+"行走范围标记为ä¸å¯è¡Œèµ°ã€‚"
#: doc/classes/NavigationMesh.xml:115
-#, fuzzy
msgid "If [code]true[/code], marks spans that are ledges as non-walkable."
-msgstr "如果[code]true[/code],则å¯ç”¨ä¼ é€’弿Œ‰åŽ‹ã€‚"
+msgstr "如果[code]true[/code],标记边缘间的跨度为ä¸å¯è¡Œèµ°ã€‚"
#: doc/classes/NavigationMesh.xml:118
msgid ""
"If [code]true[/code], marks non-walkable spans as walkable if their maximum "
"is within [member agent/max_climb] of a walkable neighbor."
msgstr ""
+"如果 [code]true[/code],如果它们的最大值在å¯è¡Œèµ°é‚»åŸŸçš„ [member agent/"
+"max_climb] 内,则将ä¸å¯è¡Œèµ°èŒƒå›´æ ‡è®°ä¸ºå¯è¡Œèµ°ã€‚"
#: doc/classes/NavigationMesh.xml:121
msgid ""
@@ -41286,20 +42404,21 @@ msgid ""
"Only used when [member geometry/parsed_geometry_type] is [constant "
"PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]."
msgstr ""
+"用于扫æé™æ€ç¢°æ’žçš„物ç†å±‚。\n"
+"仅在[member geometry/parsed_geometry_type]是[constant "
+"PARSED_GEOMETRY_STATIC_COLLIDERS]或[constant PARSED_GEOMETRY_BOTH]æ—¶æ‰ä½¿ç”¨ã€‚"
#: doc/classes/NavigationMesh.xml:125
-#, fuzzy
msgid ""
"Determines which type of nodes will be parsed as geometry. See [enum "
"ParsedGeometryType] for possible values."
-msgstr "设置关节类型。有关å¯èƒ½çš„值,请å‚阅[enum JointType]。"
+msgstr "决定哪ç§ç±»åž‹çš„节点å¯è§£æžä¸ºå‡ ä½•图形。å‚阅[enum ParsedGeometryType]。"
#: doc/classes/NavigationMesh.xml:128
-#, fuzzy
msgid ""
"The source of the geometry used when baking. See [enum SourceGeometryMode] "
"for possible values."
-msgstr "背景模å¼ã€‚请å‚阅[enum BGMode]了解å¯èƒ½çš„值。"
+msgstr "烘焙时使用的几何体的æºã€‚å‚阅[enum SourceGeometryMode]。"
#: doc/classes/NavigationMesh.xml:131
msgid ""
@@ -41308,12 +42427,16 @@ msgid ""
"SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant "
"SOURCE_GEOMETRY_GROUPS_EXPLICIT]."
msgstr ""
+"è¦æ‰«æçš„几何体组的å称。\n"
+"åªæœ‰å½“[member geometry/source_geometry_mode]是[constant "
+"SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN]或[constant "
+"SOURCE_GEOMETRY_GROUPS_EXPLICIT]æ—¶æ‰ä½¿ç”¨ã€‚"
#: doc/classes/NavigationMesh.xml:135
msgid ""
"The maximum number of vertices allowed for polygons generated during the "
"contour to polygon conversion process."
-msgstr ""
+msgstr "在轮廓到多边形转æ¢è¿‡ç¨‹ä¸­ç”Ÿæˆçš„多边形å…许的最大顶点数。"
#: doc/classes/NavigationMesh.xml:138
msgid ""
@@ -41322,6 +42445,9 @@ msgid ""
"[b]Note:[/b] This value will be squared to calculate the number of cells. "
"For example, a value of 20 will set the number of cells to 400."
msgstr ""
+"如果å¯èƒ½çš„è¯ï¼Œä»»ä½•å°äºŽè¿™ä¸ªå°ºå¯¸çš„区域将与较大的区域åˆå¹¶ã€‚\n"
+"[b]注æ„:[/b]这个值将被平方æ¥è®¡ç®—å•元格的数é‡ã€‚例如,一个20的值将把å•元格的数"
+"é‡è®¾ä¸º400。"
#: doc/classes/NavigationMesh.xml:142
msgid ""
@@ -41330,47 +42456,53 @@ msgid ""
"cells allowed to form isolated island areas. For example, a value of 8 will "
"set the number of cells to 64."
msgstr ""
+"一个区域被创建的最å°å°ºå¯¸ã€‚\n"
+"[b]注æ„:[/b]该值将被平方,以计算出å…许形æˆå­¤å²›åŒºåŸŸçš„æœ€å°å•元数。例如,8的值"
+"将把å•元格的数é‡è®¾ä¸º64。"
#: doc/classes/NavigationMesh.xml:146
-#, fuzzy
msgid ""
"Partitioning algorithm for creating the navigation mesh polys. See [enum "
"SamplePartitionType] for possible values."
-msgstr "图å—åŽŸç‚¹çš„åæ ‡ã€‚有关å¯èƒ½çš„值,å‚阅[enum TileOrigin]。"
+msgstr "创建导航网格polyså•元的分割算法。å‚阅[enum SamplePartitionType]。"
#: doc/classes/NavigationMesh.xml:151
msgid ""
"Watershed partitioning. Generally the best choice if you precompute the "
"navigation mesh, use this if you have large open areas."
msgstr ""
+"分水岭分区。如果您预先计算导航网格,通常是最佳选择,如果您有大的开放区域,请"
+"使用它。"
#: doc/classes/NavigationMesh.xml:154
msgid ""
"Monotone partitioning. Use this if you want fast navigation mesh generation."
-msgstr ""
+msgstr "å•调分区。如果您想è¦å¿«é€Ÿç”Ÿæˆå¯¼èˆªç½‘格,请使用此选项。"
#: doc/classes/NavigationMesh.xml:157
msgid ""
"Layer partitioning. Good choice to use for tiled navigation mesh with medium "
"and small sized tiles."
-msgstr ""
+msgstr "层分区。用于具有中å°åž‹ç“·ç –的平铺导航网格的ä¸é”™é€‰æ‹©ã€‚"
#: doc/classes/NavigationMesh.xml:160
-#, fuzzy
msgid "Represents the size of the [enum SamplePartitionType] enum."
-msgstr "表示[enum PortType]枚举的大å°ã€‚"
+msgstr "表示[enum SamplePartitionType]枚举的大å°ã€‚"
#: doc/classes/NavigationMesh.xml:163
msgid ""
"Parses mesh instances as geometry. This includes [MeshInstance], [CSGShape], "
"and [GridMap] nodes."
msgstr ""
+"将网格实例解æžä¸ºå‡ ä½•体。这包括 [MeshInstance]ã€[CSGShape] å’Œ [GridMap] 节点。"
#: doc/classes/NavigationMesh.xml:166
msgid ""
"Parses [StaticBody] colliders as geometry. The collider should be in any of "
"the layers specified by [member geometry/collision_mask]."
msgstr ""
+"å°† [StaticBody] 碰撞器解æžä¸ºå‡ ä½•体。碰撞器应ä½äºŽ [member geometry/"
+"collision_mask] 指定的任何层中。"
#: doc/classes/NavigationMesh.xml:169
msgid ""
@@ -41381,52 +42513,53 @@ msgstr ""
"PARSED_GEOMETRY_STATIC_COLLIDERS]."
#: doc/classes/NavigationMesh.xml:172
-#, fuzzy
msgid "Represents the size of the [enum ParsedGeometryType] enum."
-msgstr "表示[enum PortType]枚举的大å°ã€‚"
+msgstr "表示[enum ParsedGeometryType]枚举的大å°ã€‚"
#: doc/classes/NavigationMesh.xml:175
msgid ""
"Scans the child nodes of [NavigationMeshInstance] recursively for geometry."
-msgstr ""
+msgstr "递归扫æ [NavigationMeshInstance] çš„å­èŠ‚ç‚¹ä»¥èŽ·å–几何体。"
#: doc/classes/NavigationMesh.xml:178
msgid ""
"Scans nodes in a group and their child nodes recursively for geometry. The "
"group is specified by [member geometry/source_group_name]."
msgstr ""
+"ä»¥é€’å½’æ–¹å¼æ‰«æç»„中的节点åŠå…¶å­èŠ‚ç‚¹ä»¥èŽ·å–几何图形。该组由 [member geometry/"
+"source_group_name] 指定。"
#: doc/classes/NavigationMesh.xml:181
msgid ""
"Uses nodes in a group for geometry. The group is specified by [member "
"geometry/source_group_name]."
msgstr ""
+"使用一个组中的节点进行几何è¿ç®—。该组由[member geometry/source_group_name]指"
+"定。"
#: doc/classes/NavigationMesh.xml:184
-#, fuzzy
msgid "Represents the size of the [enum SourceGeometryMode] enum."
-msgstr "代表[enum ShaderMode]枚举的大å°ã€‚"
+msgstr "表示[enum SourceGeometryMode]枚举的大å°ã€‚"
#: doc/classes/NavigationMeshInstance.xml:4
-#, fuzzy
msgid "Node that instances navigation meshes into a scenario."
-msgstr "网格实例与场景相结åˆçš„节点。"
+msgstr "将导航网格实例化为场景的节点。"
#: doc/classes/NavigationMeshInstance.xml:7
msgid ""
"NavigationMeshInstance is a node that takes a [NavigationMesh] resource and "
"adds it to the current scenario by creating an instance of it."
msgstr ""
+"NavigationMeshInstanceå¯ä»¥æŽ¥æ”¶ä¸€ä¸ª[NavigationMesh]资æºï¼Œå¹¶é€šè¿‡åˆ›å»ºå®ƒçš„一个实"
+"例将其添加到当å‰åœºæ™¯ä¸­ã€‚"
#: doc/classes/NavigationMeshInstance.xml:15
-#, fuzzy
msgid "If [code]true[/code], the navigation mesh will be used by [Navigation]."
-msgstr "如果 [code]true[/code] 时,[AnimationTree] 将执行逻辑处ç†ã€‚"
+msgstr "如果[code]true[/code],导航网格将由[Navigation]使用。"
#: doc/classes/NavigationMeshInstance.xml:18
-#, fuzzy
msgid "The [NavigationMesh] resource for the instance."
-msgstr "该实例的[Mesh]资æºã€‚"
+msgstr "实例的[NavigationMesh]资æºã€‚"
#: doc/classes/NavigationPolygon.xml:4
msgid ""
@@ -41454,55 +42587,52 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
msgstr ""
-"åˆ›å»ºå¤šè¾¹å½¢æœ‰ä¸¤ç§æ–¹æ³•。è¦ä¹ˆä½¿ç”¨[method add_outline]方法,è¦ä¹ˆä½¿ç”¨[method "
-"add_polygon]方法。\n"
-"使用[method add_outline]:\n"
+"æœ‰ä¸¤ç§æ–¹æ³•æ¥åˆ›å»ºå¤šè¾¹å½¢ã€‚[method add_outline]或[method add_polygon]方法。\n"
+"使用[method add_outline]方法:\n"
"[codeblock]\n"
"var polygon = NavigationPolygon.new()\n"
-"var outline = PackedVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
+"var outline = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.add_outline(outline)\n"
"polygon.make_polygons_from_outlines()\n"
-"$NavigationRegion2D.navpoly = polygon\n"
+"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]\n"
-"使用[method add_polygon] 和顶点数组的索引:\n"
+"使用[method add_polygon]和顶点数组的索引:\n"
"[codeblock]\n"
"var polygon = NavigationPolygon.new()\n"
-"var vertices = PackedVector2Array([Vector2(0, 0), Vector2(0, 50), "
-"Vector2(50, 50), Vector2(50, 0)])\n"
+"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
+"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PackedInt32Array(0, 3, 1)\n"
+"var indices = PoolIntArray(0, 3, 1)\n"
"polygon.add_polygon(indices)\n"
-"$NavigationRegion2D.navpoly = polygon\n"
+"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
#: doc/classes/NavigationPolygon.xml:34
-#, fuzzy
msgid ""
"Appends a [PoolVector2Array] that contains the vertices of an outline to the "
"internal array that contains all the outlines. You have to call [method "
"make_polygons_from_outlines] in order for this array to be converted to "
"polygons that the engine will use."
msgstr ""
-"将包å«è½®å»“顶点的[PackedVector2Array]è¿½åŠ åˆ°åŒ…å«æ‰€æœ‰è½®å»“的内部数组。你必须调用"
-"[method make_polygons_from_outline]æ‰èƒ½å°†è¿™ä¸ªæ•°ç»„转æ¢ä¸ºå¼•擎将使用的多边形。"
+"将包å«è½®å»“顶点的[PoolVector2Array]æ·»åŠ åˆ°åŒ…å«æ‰€æœ‰è½®å»“的内部数组中。你必须调用"
+"[method make_polygons_from_outlines],将数组转æ¢ä¸ºå¼•擎å¯ä½¿ç”¨çš„多边形。"
#: doc/classes/NavigationPolygon.xml:42
-#, fuzzy
msgid ""
"Adds a [PoolVector2Array] that contains the vertices of an outline to the "
"internal array that contains all the outlines at a fixed position. You have "
"to call [method make_polygons_from_outlines] in order for this array to be "
"converted to polygons that the engine will use."
msgstr ""
-"将包å«è½®å»“顶点的[PackedVector2Array]添加到包å«å›ºå®šä½ç½®çš„æ‰€æœ‰è½®å»“的内部数组"
-"中。你必须调用[method make_polygons_from_outline]æ‰èƒ½å°†è¿™ä¸ªæ•°ç»„转æ¢ä¸ºå¼•擎将使"
-"用的多边形。"
+"将包å«è½®å»“顶点的[PoolVector2Array]æ·»åŠ åˆ°å†…éƒ¨æ•°ç»„ä¸­ï¼Œè¯¥æ•°ç»„åŒ…å«æ‰€æœ‰å›ºå®šä½ç½®çš„"
+"轮廓。你必须调用[method make_polygons_from_outlines],将数组转æ¢ä¸ºå¼•擎å¯ä½¿ç”¨"
+"的多边形。"
#: doc/classes/NavigationPolygon.xml:55
msgid ""
@@ -41517,11 +42647,10 @@ msgid ""
msgstr "æ¸…é™¤å¤šè¾¹å½¢æ•°ç»„ï¼Œä½†ä¸æ¸…除轮廓和顶点数组。"
#: doc/classes/NavigationPolygon.xml:68
-#, fuzzy
msgid ""
"Returns a [PoolVector2Array] containing the vertices of an outline that was "
"created in the editor or by script."
-msgstr "返回一个[PackedVector2Array],包å«åœ¨ç¼–辑器或脚本中创建的轮廓的顶点。"
+msgstr "返回[PoolVector2Array],包å«åœ¨ç¼–辑器中或通过脚本创建的轮廓的顶点。"
#: doc/classes/NavigationPolygon.xml:74
msgid ""
@@ -41533,11 +42662,10 @@ msgid "Returns the count of all polygons."
msgstr "返回多边形的数é‡ã€‚"
#: doc/classes/NavigationPolygon.xml:93
-#, fuzzy
msgid ""
"Returns a [PoolVector2Array] containing all the vertices being used to "
"create the polygons."
-msgstr "返回一个[PackedVector2Array]ï¼ŒåŒ…å«æ‰€æœ‰ç”¨äºŽåˆ›å»ºå¤šè¾¹å½¢çš„顶点。"
+msgstr "返回包å«ç”¨äºŽåˆ›å»ºå¤šè¾¹å½¢çš„æ‰€æœ‰é¡¶ç‚¹çš„[PoolVector2Array]。"
#: doc/classes/NavigationPolygon.xml:99
msgid "Creates polygons from the outlines added in the editor or by script."
@@ -41578,6 +42706,13 @@ msgid ""
"the server port in UDP. You can use the [UPNP] class to try to forward the "
"server port automatically when starting the server."
msgstr ""
+"一个 PacketPeer 实现,应该在åˆå§‹åŒ–为客户端或æœåС噍åŽä¼ é€’ç»™ [member SceneTree."
+"network_peer]。然åŽå¯ä»¥é€šè¿‡è¿žæŽ¥åˆ° [SceneTree] ä¿¡å·æ¥å¤„ç†äº‹ä»¶ã€‚\n"
+"ENet 的目的是在 UDPï¼ˆç”¨æˆ·æ•°æ®æŠ¥å议)之上æä¾›ä¸€ä¸ªç›¸å¯¹ç®€å•而å¥å…¨çš„网络通信"
+"层。\n"
+"[b]注æ„:[/b] ENet åªä½¿ç”¨UDP,ä¸ä½¿ç”¨TCPã€‚è½¬å‘æœåŠ¡å™¨ç«¯å£ä½¿æ‚¨çš„æœåŠ¡å™¨å¯ä»¥åœ¨å…¬ç½‘"
+"上访问时,åªéœ€è¦å°†æœåŠ¡å™¨ç«¯å£è½¬å‘为UDPå³å¯ã€‚您å¯ä»¥ä½¿ç”¨ [UPNP] ç±»å°è¯•在å¯åЍæœåŠ¡"
+"å™¨æ—¶è‡ªåŠ¨è½¬å‘æœåŠ¡å™¨ç«¯å£ã€‚"
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:12
#: doc/classes/NetworkedMultiplayerPeer.xml:11
@@ -41585,7 +42720,7 @@ msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/networking/"
"high_level_multiplayer.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/networking/"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/networking/"
"high_level_multiplayer.html"
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:13
@@ -41656,7 +42791,7 @@ msgid ""
msgstr ""
"创建æœåŠ¡å™¨ï¼Œé€šè¿‡[code]port[/code]监å¬è¿žæŽ¥ã€‚该端å£éœ€è¦æ˜¯ä¸€ä¸ªå¯ç”¨çš„ã€æœªä½¿ç”¨çš„端"
"å£ï¼Œåœ¨0到65535之间。注æ„,低于1024çš„ç«¯å£æ˜¯ç‰¹æƒç«¯å£ï¼Œæ ¹æ®å¹³å°çš„ä¸åŒå¯èƒ½éœ€è¦æ"
-"高æƒé™ã€‚è¦æ”¹å˜æœåŠ¡å™¨ç›‘å¬çš„æŽ¥å£ï¼Œè¯·ä½¿ç”¨[方法set_bind_ip]。默认IP是通é…符"
+"高æƒé™ã€‚è¦æ”¹å˜æœåŠ¡å™¨ç›‘å¬çš„æŽ¥å£ï¼Œè¯·ä½¿ç”¨[method set_bind_ip]。默认IP是通é…符"
"[code]\"*\"[/code]ï¼Œå®ƒç›‘å¬æ‰€æœ‰å¯ç”¨çš„æŽ¥å£ã€‚[code]max_clients[/code]是å…è®¸åŒæ—¶"
"进行的最大客户数,å¯ä»¥ä½¿ç”¨ä»»ä½•数字,最高å¯è¾¾4095,尽管å¯å®žçŽ°çš„åŒæ—¶è¿›è¡Œçš„客户"
"æ•°å¯èƒ½è¦ä½Žå¾—多,并且å–å†³äºŽåº”ç”¨ã€‚å…³äºŽå¸¦å®½å‚æ•°çš„其他细节,è§[method "
@@ -41736,6 +42871,13 @@ msgid ""
"other hand, defines a fixed timeout for which any packet must be "
"acknowledged or the peer will be dropped."
msgstr ""
+"è®¾ç½®å¯¹ç­‰æ–¹çš„è¶…æ—¶å‚æ•°ã€‚è¶…æ—¶å‚æ•°æŽ§åˆ¶å¯¹ç­‰æ–¹å› æ— æ³•确认å¯é æµé‡è€Œè¶…时的方å¼å’Œæ—¶"
+"间。超时值以毫秒表示。\n"
+"[code]timeout_limit[/code] 是一个系数,乘以基于平å‡å¾€è¿”时间的值,将确定å¯é æ•°"
+"æ®åŒ…的超时é™åˆ¶ã€‚当达到该é™åˆ¶æ—¶ï¼Œè¶…时将加å€ï¼Œå¦‚果该é™åˆ¶å·²è¾¾åˆ° "
+"[code]timeout_min[/code],则对等方将断开连接。å¦ä¸€æ–¹é¢ï¼Œ[code]timeout_max[/"
+"code] 傿•°å®šä¹‰äº†ä¸€ä¸ªå›ºå®šçš„超时时间,对于该超时时间必须确认任何数æ®åŒ…,å¦åˆ™å¯¹"
+"等方将被丢弃。"
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:113
msgid ""
@@ -41776,6 +42918,15 @@ msgid ""
"COMPRESS_NONE]. Nonetheless, mixing engine versions between clients and "
"server is not recommended and not officially supported."
msgstr ""
+"用于网络数æ®åŒ…的压缩方法。这些在压缩速度与带宽之间有ä¸åŒçš„æƒè¡¡ï¼Œå¦‚æžœæ‚¨å®Œå…¨ä½¿"
+"用压缩,您å¯èƒ½éœ€è¦æµ‹è¯•å“ªä¸€ç§æœ€é€‚åˆæ‚¨çš„用例。\n"
+"[b]注:[/b]大多数游æˆçš„网络设计都涉åŠé¢‘ç¹å‘é€è®¸å¤šå°æ•°æ®åŒ…(æ¯ä¸ªå°äºŽ4 KB)。如"
+"果有疑问,建议ä¿ç•™é»˜è®¤åŽ‹ç¼©ç®—æ³•ï¼Œå› ä¸ºå®ƒå¯¹è¿™äº›å°æ•°æ®åŒ…效果最好。\n"
+"[b]注æ„:[/b] [member compression_mode] 必须在æœåС噍åŠå…¶æ‰€æœ‰å®¢æˆ·ç«¯ä¸Šè®¾ç½®ä¸ºç›¸"
+"åŒçš„值。如果客户端上设置的 [member compression_mode] 与æœåŠ¡å™¨ä¸Šè®¾ç½®çš„ä¸åŒï¼Œåˆ™"
+"客户端将无法连接。在 Godot 3.4 之å‰ï¼Œé»˜è®¤çš„ [member compression_mode] 是 "
+"[constant COMPRESS_NONE]。尽管如此,ä¸å»ºè®®åœ¨å®¢æˆ·ç«¯å’ŒæœåŠ¡å™¨ä¹‹é—´æ··åˆå¼•擎版本,"
+"也ä¸å—官方支æŒã€‚"
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:124
msgid ""
@@ -41784,6 +42935,9 @@ msgid ""
"When set to an empty string, the [code]address[/code] parameter passed to "
"[method create_client] is used instead."
msgstr ""
+"用于 DTLS 验è¯çš„主机å,与æœåС噍æä¾›çš„è¯ä¹¦ä¸­çš„“CNâ€å€¼è¿›è¡Œæ¯”较。\n"
+"当设置为空字符串时,将使用传递给 [method create_client] 的 [code]address[/"
+"code] 傿•°ã€‚"
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:128
msgid ""
@@ -41819,7 +42973,6 @@ msgstr ""
"channel_count]。"
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:139
-#, fuzzy
msgid ""
"When enabled, the client or server created by this peer, will use "
"[PacketPeerDTLS] instead of raw UDP sockets for communicating with the "
@@ -41831,26 +42984,29 @@ msgid ""
"dtls_verify] option, and configure the certificate accordingly via [method "
"set_dtls_certificate]."
msgstr ""
-"当å¯ç”¨æ—¶ï¼Œç”±è¿™ä¸ªå¯¹ç­‰ä½“创建的客户端或æœåŠ¡å™¨å°†ä½¿ç”¨[PacketPeerDTLS]è€Œä¸æ˜¯åŽŸå§‹çš„"
-"UDP套接字æ¥ä¸Žè¿œç¨‹å¯¹ç­‰ä½“通信。这将使通信使用DTLS加密,但代价是更高的资æºä½¿ç”¨å’Œ"
-"潜在的更大的包大å°ã€‚\n"
-"注æ„:在创建DTLSæœåŠ¡å™¨æ—¶ï¼Œè¯·ç¡®ä¿é€šè¿‡[method set_dtls_key]å’Œ[method "
-"set_dtls_certificate]设置密钥/è¯ä¹¦å¯¹ã€‚对于DTLS客户端,请查看[member "
-"dtls_verify]选项,并通过[method set_dtls_certificate]é…置相应的è¯ä¹¦ã€‚"
+"å¯ç”¨åŽï¼Œç”±è¯¥å¯¹ç­‰ä½“创建的客户端或æœåŠ¡å™¨å°†ä½¿ç”¨[PacketPeerDTLS]ï¼Œè€Œä¸æ˜¯åŽŸå§‹UDP套"
+"接字与远程对等体进行通信。通信使用DTLS加密,代价是更高的资æºå ç”¨å’Œå¯èƒ½æ›´å¤§çš„"
+"æ•°æ®åŒ…。\n"
+"[b]注æ„:[/b] 当创建DTLSæœåŠ¡å™¨æ—¶ï¼Œç¡®ä¿ç”¨[method set_dtls_key]å’Œ[method "
+"set_dtls_certificate]设置密钥/è¯ä¹¦å¯¹ã€‚对于DTLS客户端,查看[member "
+"dtls_verify]选项,用[method set_dtls_certificate]é…置相应的è¯ä¹¦ã€‚"
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:145
-#, fuzzy
msgid ""
"No compression. This uses the most bandwidth, but has the upside of "
"requiring the fewest CPU resources. This option may also be used to make "
"network debugging using tools like Wireshark easier."
-msgstr "ä¸åŽ‹ç¼©ã€‚è¿™å°†ä½¿ç”¨æœ€å¤šçš„å¸¦å®½ï¼Œä½†æœ‰ä¸€ä¸ªå¥½å¤„ï¼Œé‚£å°±æ˜¯éœ€è¦æœ€å°‘çš„CPU资æºã€‚"
+msgstr ""
+"无压缩。这使用最多的带宽,但具有å ç”¨æœ€å°‘ CPU 资æºçš„好处。这个选项å¯ä»¥ç”¨äºŽ"
+"Wireshark等工具使用,更容易进行网络调试。"
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:148
msgid ""
"ENet's built-in range encoding. Works well on small packets, but is not the "
"most efficient algorithm on packets larger than 4 KB."
msgstr ""
+"ENet 的内置范围编ç ã€‚é€‚ç”¨äºŽå°æ•°æ®åŒ…,但对于大于 4 KB 的数æ®åŒ…䏿˜¯æœ€æœ‰æ•ˆçš„ç®—"
+"法。"
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:151
msgid ""
@@ -41862,7 +43018,6 @@ msgstr ""
"比,该选项使用的CPUèµ„æºæ›´å°‘,但使用的带宽更多。"
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:154
-#, fuzzy
msgid ""
"[url=https://www.zlib.net/]Zlib[/url] compression. This option uses less "
"bandwidth compared to [constant COMPRESS_FASTLZ], at the expense of using "
@@ -41870,8 +43025,9 @@ msgid ""
"packets smaller than 4 KB. Therefore, it's recommended to use other "
"compression algorithms in most cases."
msgstr ""
-"[url = https://www.zlib.net/] Zlib压缩[/ url]。与[constant COMPRESS_FASTLZ]相"
-"比,这个选项以使用更多CPU资æºä¸ºä»£ä»·ï¼Œæ¢å–更少的带宽å ç”¨ã€‚"
+"[url=https://www.zlib.net/]Zlib[/url]压缩。与 [constant COMPRESS_FASTLZ] 相"
+"比,这个选项使用较少的带宽,但代价是使用更多的 CPU 资æºã€‚请注æ„,这ç§ç®—法对å°"
+"于4KB的数æ®åŒ…䏿˜¯å¾ˆæœ‰æ•ˆã€‚因此,建议在大多数情况下使用其他压缩算法。"
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:157
msgid "[url=https://facebook.github.io/zstd/]Zstandard[/url] compression."
@@ -41889,6 +43045,10 @@ msgid ""
"detail and isn't meant to be used by non-Godot servers. It may change "
"without notice."
msgstr ""
+"管ç†ä¸Žç½‘络对等体的连接。为连接到æœåŠ¡å™¨çš„æ¯ä¸ªå®¢æˆ·ç«¯åˆ†é…唯一的ID。å¦è¯·å‚è§"
+"[MultiplayerAPI]。\n"
+"[b]注æ„:[/b] 高级别的多人游æˆAPIåè®®æ˜¯ä¸€ä¸ªå®žçŽ°ç»†èŠ‚ï¼Œå¹¶ä¸æ„味ç€å¯ä»¥è¢«éžGodot"
+"æœåŠ¡å™¨ä½¿ç”¨ã€‚å®ƒå¯èƒ½ä¼šæ”¹å˜ï¼Œæ•ä¸å¦è¡Œé€šçŸ¥ã€‚"
#: doc/classes/NetworkedMultiplayerPeer.xml:12
msgid "https://godotengine.org/asset-library/asset/537"
@@ -42051,22 +43211,18 @@ msgstr ""
"素。"
#: doc/classes/NinePatchRect.xml:30
-#, fuzzy
msgid ""
"The stretch mode to use for horizontal stretching/tiling. See [enum "
"NinePatchRect.AxisStretchMode] for possible values."
msgstr ""
-"æŽ§åˆ¶å¦‚ä½•æ°´å¹³æ‹‰ä¼¸æˆ–å¹³é“ºæ ·å¼æ¡†çš„纹ç†ã€‚有关å¯èƒ½çš„值,请å‚阅 [enum "
-"AxisStretchMode]。"
+"水平拉伸/平铺时使用的拉伸模å¼ã€‚å‚阅[enum NinePatchRect.AxisStretchMode]。"
#: doc/classes/NinePatchRect.xml:33
-#, fuzzy
msgid ""
"The stretch mode to use for vertical stretching/tiling. See [enum "
"NinePatchRect.AxisStretchMode] for possible values."
msgstr ""
-"æŽ§åˆ¶å¦‚ä½•æ°´å¹³æ‹‰ä¼¸æˆ–å¹³é“ºæ ·å¼æ¡†çš„纹ç†ã€‚有关å¯èƒ½çš„值,请å‚阅 [enum "
-"AxisStretchMode]。"
+"用于垂直拉伸/平铺的拉伸模å¼ã€‚å‚阅[enum NinePatchRect.AxisStretchMode]。"
#: doc/classes/NinePatchRect.xml:36
msgid ""
@@ -42084,34 +43240,31 @@ msgstr ""
"å•独设置所有4个边è·å€¼æ¥åˆ›å»ºå…·æœ‰éžç»Ÿä¸€è¾¹æ¡†çš„颿¿ã€‚"
#: doc/classes/NinePatchRect.xml:43
-#, fuzzy
msgid ""
"The width of the 9-slice's left column. A margin of 16 means the 9-slice's "
"left corners and side will have a width of 16 pixels. You can set all 4 "
"margin values individually to create panels with non-uniform borders."
msgstr ""
-"9-slice的底层行的高度。边è·ä¸º16æ„味ç€9片的底角和侧é¢å°†æœ‰16åƒç´ çš„高度。你å¯ä»¥"
-"å•独设置所有4个边è·å€¼æ¥åˆ›å»ºå…·æœ‰éžç»Ÿä¸€è¾¹æ¡†çš„颿¿ã€‚"
+"9-切片的左列宽度。边è·ä¸º16æ„味ç€9切片的左角和侧é¢å°†æœ‰16åƒç´ çš„宽度。你å¯ä»¥å•独"
+"设置所有4个边è·å€¼ï¼Œæ¥åˆ›å»ºæœ‰éžç»Ÿä¸€è¾¹æ¡†çš„颿¿ã€‚"
#: doc/classes/NinePatchRect.xml:46
-#, fuzzy
msgid ""
"The width of the 9-slice's right column. A margin of 16 means the 9-slice's "
"right corners and side will have a width of 16 pixels. You can set all 4 "
"margin values individually to create panels with non-uniform borders."
msgstr ""
-"9-slice的底层行的高度。边è·ä¸º16æ„味ç€9片的底角和侧é¢å°†æœ‰16åƒç´ çš„高度。你å¯ä»¥"
-"å•独设置所有4个边è·å€¼æ¥åˆ›å»ºå…·æœ‰éžç»Ÿä¸€è¾¹æ¡†çš„颿¿ã€‚"
+"9-切片的å³åˆ—宽度。边è·ä¸º16æ„味ç€9切片的å³è§’和侧é¢å°†æœ‰16åƒç´ çš„宽度。你å¯ä»¥å•独"
+"设置所有4个边è·å€¼ï¼Œä»¥åˆ›å»ºæœ‰éžç»Ÿä¸€è¾¹æ¡†çš„颿¿ã€‚"
#: doc/classes/NinePatchRect.xml:49
-#, fuzzy
msgid ""
"The height of the 9-slice's top row. A margin of 16 means the 9-slice's top "
"corners and side will have a height of 16 pixels. You can set all 4 margin "
"values individually to create panels with non-uniform borders."
msgstr ""
-"9-slice的底层行的高度。边è·ä¸º16æ„味ç€9片的底角和侧é¢å°†æœ‰16åƒç´ çš„高度。你å¯ä»¥"
-"å•独设置所有4个边è·å€¼æ¥åˆ›å»ºå…·æœ‰éžç»Ÿä¸€è¾¹æ¡†çš„颿¿ã€‚"
+"9切片的顶行的高度。边è·ä¸º16æ„味ç€9切片的顶角和侧é¢å°†æœ‰16åƒç´ çš„高度。你å¯ä»¥å•"
+"独设置所有4个边è·å€¼ï¼Œæ¥åˆ›å»ºæœ‰éžç»Ÿä¸€è¾¹æ¡†çš„颿¿ã€‚"
#: doc/classes/NinePatchRect.xml:52
msgid ""
@@ -42133,11 +43286,10 @@ msgid "Emitted when the node's texture changes."
msgstr "当节点的纹ç†å‘生å˜åŒ–时触å‘。"
#: doc/classes/NinePatchRect.xml:67
-#, fuzzy
msgid ""
"Stretches the center texture across the NinePatchRect. This may cause the "
"texture to be distorted."
-msgstr "沿直线拉伸纹ç†ã€‚导入ç¦ç”¨[b]é‡å¤[/b]的纹ç†ä»¥èŽ·å¾—æœ€ä½³æ•ˆæžœã€‚"
+msgstr "å°†ä¸­é—´çº¹ç†æ‹‰ä¼¸åˆ°9切片矩形。这å¯èƒ½ä¼šå¯¼è‡´çº¹ç†å¤±çœŸã€‚"
#: doc/classes/NinePatchRect.xml:70
msgid ""
@@ -42147,6 +43299,10 @@ msgid ""
"[b]Note:[/b] Only supported when using the GLES3 renderer. When using the "
"GLES2 renderer, this will behave like [constant AXIS_STRETCH_MODE_STRETCH]."
msgstr ""
+"在 NinePatchRect 上é‡å¤ä¸­å¿ƒçº¹ç†ã€‚è¿™ä¸ä¼šå¯¼è‡´ä»»ä½•å¯è§çš„失真。纹ç†å¿…须是无ç¼çš„,"
+"这样æ‰èƒ½åœ¨è¾¹ç¼˜ä¹‹é—´ä¸æ˜¾ç¤ºä¼ªå½±çš„æƒ…况下工作。\n"
+"[b]注:[/b] 仅在使用 GLES3 渲染器时支æŒã€‚使用 GLES2 渲染器时,这将类似于 "
+"[constant AXIS_STRETCH_MODE_STRETCH]。"
#: doc/classes/NinePatchRect.xml:74
msgid ""
@@ -42158,6 +43314,11 @@ msgid ""
"[b]Note:[/b] Only supported when using the GLES3 renderer. When using the "
"GLES2 renderer, this will behave like [constant AXIS_STRETCH_MODE_STRETCH]."
msgstr ""
+"在 NinePatchRect 上é‡å¤ä¸­å¿ƒçº¹ç†ï¼Œä½†ä¹Ÿä¼šæ‹‰ä¼¸çº¹ç†ä»¥ç¡®ä¿æ¯ä¸ªå›¾å—都完整å¯è§ã€‚è¿™å¯"
+"èƒ½ä¼šå¯¼è‡´çº¹ç†æ‰­æ›²ï¼Œä½†å°äºŽ [constant AXIS_STRETCH_MODE_STRETCH]。纹ç†å¿…须是无ç¼"
+"的,这样æ‰èƒ½åœ¨è¾¹ç¼˜ä¹‹é—´ä¸æ˜¾ç¤ºä¼ªå½±çš„æƒ…况下工作。\n"
+"[b]注:[/b] 仅在使用 GLES3 渲染器时支æŒã€‚使用 GLES2 渲染器时,这将类似于 "
+"[constant AXIS_STRETCH_MODE_STRETCH]。"
#: doc/classes/Node.xml:4
msgid "Base class for all [i]scene[/i] objects."
@@ -42223,53 +43384,54 @@ msgid ""
"(make sure node names are the same on all peers). Also, take a look at the "
"high-level networking tutorial and corresponding demos."
msgstr ""
-"节点是Godot的构建模å—。它们å¯ä»¥è¢«æŒ‡å®šä¸ºå¦ä¸€ä¸ªèŠ‚ç‚¹çš„å­èŠ‚ç‚¹ï¼Œä»Žè€Œå½¢æˆæ ‘状排列。"
-"一个给定的节点å¯ä»¥åŒ…å«ä»»æ„æ•°é‡çš„节点作为å­èŠ‚ç‚¹ï¼Œè¦æ±‚所有的兄弟å§å¦¹ï¼Œå³è¯¥èŠ‚ç‚¹"
-"的直接å­èŠ‚ç‚¹ï¼Œåº”è¯¥æœ‰å”¯ä¸€çš„å字。\n"
-"一个节点树被称为[i]场景[/i]。场景å¯ä»¥è¢«ä¿å­˜åˆ°ç£ç›˜ä¸Šï¼Œç„¶åŽè¢«å®žä¾‹åŒ–到其他场景"
-"中。这使得Godoté¡¹ç›®çš„æž¶æž„å’Œæ•°æ®æ¨¡åž‹å…·æœ‰éžå¸¸é«˜çš„çµæ´»æ€§ã€‚\n"
-"[b]Scene tree:[/b] [SceneTree]åŒ…å«æ´»åŠ¨çš„èŠ‚ç‚¹æ ‘ã€‚å½“ä¸€ä¸ªèŠ‚ç‚¹è¢«æ·»åŠ åˆ°åœºæ™¯æ ‘ä¸­"
-"时,它将收到[constant NOTIFICATION_ENTER_TREE]通知,并触å‘å…¶[method "
-"_enter_tree]回调。å­èŠ‚ç‚¹æ€»æ˜¯åœ¨å…¶çˆ¶èŠ‚ç‚¹[i]之åŽ[/i]被添加,å³çˆ¶èŠ‚ç‚¹çš„[method "
-"_enter_tree]回调将在其å­èŠ‚ç‚¹çš„ä¹‹å‰è¢«è§¦å‘。\n"
-"一旦所有的节点被添加到场景树中,它们就会收到[constant NOTIFICATION_READY]通"
-"知,其å„自的[method _ready]回调被触å‘。对于节点组,[method _ready]回调是按相"
-"å的顺åºè°ƒç”¨çš„,从å­èŠ‚ç‚¹å¼€å§‹ï¼Œå‘上移动到父节点。\n"
-"è¿™æ„味ç€ï¼Œå½“把一个节点添加到场景树中时,将使用下é¢çš„顺åºè¿›è¡Œå›žè°ƒã€‚父节点的"
-"[method _enter_tree],å­èŠ‚ç‚¹çš„[method _enter_tree],å­èŠ‚ç‚¹çš„[method _ready],"
-"æœ€åŽæ˜¯çˆ¶èŠ‚ç‚¹çš„[method _ready],å³å¯¹æ•´ä¸ªåœºæ™¯æ ‘进行递归。\n"
-"[b]Processing:[/b] 节点å¯ä»¥é‡å†™ \"处ç†\" 状æ€ï¼Œä»¥ä¾¿å®ƒä»¬åœ¨æ¯ä¸€å¸§ä¸Šæ”¶åˆ°å›žè°ƒï¼Œè¦"
-"求它们进行处ç†ï¼Œå³åšä¸€äº›äº‹æƒ…。普通处ç†å°½å¯èƒ½å¿«åœ°å‘生,回调[method _process],"
-"用[method set_process]切æ¢ï¼Œå–å†³äºŽå¸§é€ŸçŽ‡ï¼Œæ‰€ä»¥å¤„ç†æ—¶é—´[i]delta[/i](å•ä½ï¼š"
-"ç§’ï¼‰ä½œä¸ºå‚æ•°ä¼ é€’。物ç†å¤„ç†æ¯ç§’å‘生固定次数(默认为60),回调[method "
-"_physics_process],用[method set_physics_process]切æ¢ï¼Œå¯¹ç‰©ç†å¼•擎相关的代ç å¾ˆ"
-"有用。\n"
-"节点也å¯ä»¥å¤„ç†è¾“å…¥äº‹ä»¶ã€‚å½“å‡ºçŽ°æ—¶ï¼Œç¨‹åºæ”¶åˆ°çš„æ¯ä¸ªè¾“å…¥è€Œè°ƒç”¨[method _input]函"
-"数。在许多情况下,这å¯èƒ½æ˜¯å¤šä½™çš„,除éžç”¨äºŽç®€å•的项目,而[method "
-"_unhandled_input]函数å¯èƒ½æ˜¯é¦–选;当输入事件没有被其他节点(通常是GUI[Control]"
-"èŠ‚ç‚¹ï¼‰å¤„ç†æ—¶ï¼Œå®ƒè¢«è°ƒç”¨ï¼Œç¡®ä¿èŠ‚ç‚¹åªæŽ¥æ”¶ä¸ºå®ƒå‡†å¤‡çš„äº‹ä»¶ã€‚\n"
-"为了跟踪场景的层次结构,特别在将场景实例化到其他场景时,å¯ä»¥ç”¨[member owner]"
-"属性为节点设置一个 \"所有者\"。这å¯ä»¥è·Ÿè¸ªè°å®žä¾‹åŒ–了什么。这在编写编辑器和工具"
-"æ—¶éžå¸¸æœ‰ç”¨ã€‚\n"
-"当一个节点被[method Object.free]或[method queue_free]释放时,它也将释放它的所"
-"有å­èŠ‚ç‚¹ã€‚\n"
-"[b]Groups:[/b] 节点å¯ä»¥è¢«æ·»åŠ åˆ°å¾ˆå¤šçš„ç»„ä¸­ï¼Œä»¥æ–¹ä¾¿ç®¡ç†ï¼Œä½ å¯ä»¥åˆ›å»ºæ¯”如\"敌人"
-"\" 或 \"坿”¶é›†ç‰©\" 这样的组,这å–决于你的游æˆã€‚å‚阅[method add_to_group], "
-"[method is_in_group] å’Œ [method remove_from_group]。然åŽä½ å¯ä»¥æ£€ç´¢è¿™äº›ç»„中的"
-"所有节点,对它们进行迭代,甚至通过[SceneTree]中的方法调用组内方法。\n"
-"[b]Networking with nodes:[/b] 在连接到æœåŠ¡å™¨ï¼ˆæˆ–åˆ¶ä½œæœåŠ¡å™¨ï¼Œå‚阅"
-"[NetworkedMultiplayerENet])之åŽï¼Œå¯ä»¥ä½¿ç”¨å†…置的RPC(远程过程调用)系统在网络"
-"上进行通信。通过调用[method rpc]的方法å,它将在本地和所有连接的对等体中被调"
-"用(对等体=客户端和接å—连接的æœåŠ¡å™¨ï¼‰ã€‚ä¸ºäº†è¯†åˆ«å“ªä¸ªèŠ‚ç‚¹æ”¶åˆ°RPC调用,Godot将使"
-"用它的[NodePath]ï¼ˆç¡®ä¿æ‰€æœ‰å¯¹ç­‰ä½“上的节点å称相åŒï¼‰ã€‚å¦å¤–,请å‚阅高级网络教程"
-"和相应的演示。"
+"节点是 Godot 的构建模å—。它们å¯ä»¥è¢«æŒ‡å®šä¸ºå¦ä¸€ä¸ªèŠ‚ç‚¹çš„å­èŠ‚ç‚¹ï¼Œä»Žè€Œå½¢æˆæ ‘状排"
+"列。一个给定的节点å¯ä»¥åŒ…å«ä»»æ„æ•°é‡çš„节点作为å­èŠ‚ç‚¹ï¼Œè¦æ±‚所有的兄弟节点(å³è¯¥"
+"节点的直接å­èŠ‚ç‚¹ï¼‰çš„å字唯一。\n"
+"节点树被称为[i]场景[/i]。场景å¯ä»¥è¢«ä¿å­˜åˆ°ç£ç›˜ä¸Šï¼Œç„¶åŽè¢«å®žä¾‹åŒ–到其他场景中。这"
+"使得 Godot é¡¹ç›®çš„æž¶æž„å’Œæ•°æ®æ¨¡åž‹å…·æœ‰éžå¸¸é«˜çš„çµæ´»æ€§ã€‚\n"
+"[b]场景树:[/b] [SceneTree] åŒ…å«æ´»åŠ¨çš„èŠ‚ç‚¹æ ‘ã€‚å½“ä¸€ä¸ªèŠ‚ç‚¹è¢«æ·»åŠ åˆ°åœºæ™¯æ ‘ä¸­æ—¶ï¼Œ"
+"它将收到 [constant NOTIFICATION_ENTER_TREE] 通知,并触å‘å…¶ [method "
+"_enter_tree] 回调。å­èŠ‚ç‚¹æ€»æ˜¯åœ¨å…¶çˆ¶èŠ‚ç‚¹[i]之åŽ[/i]被添加,å³çˆ¶èŠ‚ç‚¹çš„ [method "
+"_enter_tree] 回调将在其å­èŠ‚ç‚¹çš„ä¹‹å‰è¢«è§¦å‘。\n"
+"一旦所有的节点被添加到场景树中,它们就会收到 [constant NOTIFICATION_READY] 通"
+"知,其å„自的 [method _ready] 回调被触å‘。对于一组节点,[method _ready] 回调是"
+"按相å的顺åºè°ƒç”¨çš„,从å­èŠ‚ç‚¹å¼€å§‹ï¼Œå‘上移动到父节点。\n"
+"è¿™æ„味ç€ï¼Œå½“把一个节点添加到场景树中时,将使用下é¢çš„顺åºè¿›è¡Œå›žè°ƒï¼šçˆ¶èŠ‚ç‚¹çš„ "
+"[method _enter_tree]ã€å­èŠ‚ç‚¹çš„ [method _enter_tree]ã€å­èŠ‚ç‚¹çš„ [method "
+"_ready]ï¼Œæœ€åŽæ˜¯çˆ¶èŠ‚ç‚¹çš„ [method _ready](对整个场景树进行递归)。\n"
+"[b]处ç†ï¼š[/b] 节点å¯ä»¥è¦†ç›–“处ç†â€çжæ€ï¼Œä»¥ä¾¿å®ƒä»¬åœ¨æ¯ä¸€å¸§ä¸Šéƒ½æ”¶åˆ°å›žè°ƒï¼Œè¦æ±‚它们"
+"进行处ç†ï¼ˆåšä¸€äº›äº‹æƒ…)。普通处ç†ï¼ˆå›žè°ƒ [method _process],å¯ä»¥ä½¿ç”¨ [method "
+"set_process] 开关)会尽å¯èƒ½å¿«åœ°å‘生,并且å–å†³äºŽå¸§çŽ‡ï¼Œæ‰€ä»¥å¤„ç†æ—¶é—´ [i]delta[/"
+"i](å•ä½ä¸ºç§’ï¼‰ä¼šä½œä¸ºå‚æ•°ä¼ å…¥ã€‚物ç†å¤„ç†ï¼ˆå›žè°ƒ [method _physics_process],å¯ä»¥"
+"使用 [method set_physics_process] 开关)æ¯ç§’å‘生固定次数(默认为 60),对物ç†"
+"引擎相关的代ç å¾ˆæœ‰ç”¨ã€‚\n"
+"节点也å¯ä»¥å¤„ç†è¾“入事件。存在 [method _input] å‡½æ•°æ—¶ï¼Œç¨‹åºæ¯æ”¶åˆ°ä¸€æ¬¡è¾“入都会去"
+"è°ƒç”¨å®ƒã€‚åœ¨è®¸å¤šæƒ…å†µä¸‹ï¼Œè¿™ä¹ˆåšæ˜¯å¤§æå°ç”¨äº†ï¼ˆé™¤éžæ˜¯ç”¨äºŽç®€å•的项目),用 [method "
+"_unhandled_input] 函数å¯èƒ½æ›´åˆé€‚;当输入事件没有被其他节点(通常是 GUI "
+"[Control] èŠ‚ç‚¹ï¼‰å¤„ç†æ—¶ï¼Œæ‰ä¼šè°ƒç”¨è¿™ä¸ªå‡½æ•°ï¼Œå¯ä»¥ç¡®ä¿èŠ‚ç‚¹åªæŽ¥æ”¶åˆ°å®ƒè¯¥æ”¶åˆ°çš„äº‹"
+"件。\n"
+"为了记录场景的层次结构(尤其是在将场景实例化到其他场景时)å¯ä»¥ç”¨ [member "
+"owner] 属性为节点设置一个“所有者â€ã€‚它记录的是è°å®žä¾‹åŒ–了什么。这在编写编辑器和"
+"工具时éžå¸¸æœ‰ç”¨ã€‚\n"
+"最åŽï¼Œå½“一个节点被 [method Object.free] 或 [method queue_free] 释放时,它也将"
+"释放它的所有å­èŠ‚ç‚¹ã€‚\n"
+"[b]分组:[/b] 节点å¯ä»¥è¢«æ·»åŠ åˆ°å¾ˆå¤šçš„ç»„ä¸­ï¼Œä»¥æ–¹ä¾¿ç®¡ç†ï¼Œä½ å¯ä»¥æ ¹æ®è‡ªå·±æ¸¸æˆçš„需"
+"è¦æ¥åˆ›å»ºç±»ä¼¼â€œæ•Œäººâ€æˆ–“收集å“â€è¿™æ ·çš„组。å‚阅 [method add_to_group]ã€[method "
+"is_in_group] å’Œ [method remove_from_group]。加入组åŽï¼Œä½ å¯ä»¥æ£€ç´¢è¿™äº›ç»„中的所"
+"有节点,对它们进行迭代,甚至通过 [SceneTree] 中的方法调用组内方法。\n"
+"[b]节点的网络编程:[/b] 在连接到æœåŠ¡å™¨ï¼ˆæˆ–åˆ¶ä½œæœåŠ¡å™¨ï¼Œå‚阅 "
+"[NetworkedMultiplayerENet])之åŽï¼Œå¯ä»¥ä½¿ç”¨å†…置的 RPC(远程过程调用)系统在网"
+"络上进行通信。在调用 [method rpc] 时传入方法å,将在本地和所有已连接的对等体"
+"中调用对应的方法(对等体=客户端和接å—连接的æœåŠ¡å™¨ï¼‰ã€‚ä¸ºäº†è¯†åˆ«å“ªä¸ªèŠ‚ç‚¹æ”¶åˆ° "
+"RPC 调用,Godot 将使用它的 [NodePath]ï¼ˆè¯·ç¡®ä¿æ‰€æœ‰å¯¹ç­‰ä½“上的节点å称相åŒï¼‰ã€‚å¦"
+"外,请å‚阅高级网络教程和相应的演示。"
#: doc/classes/Node.xml:20
msgid ""
"https://docs.godotengine.org/en/3.4/getting_started/step_by_step/"
"scenes_and_nodes.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/getting_started/step_by_step/"
+"https://docs.godotengine.org/zh_CN/stable/getting_started/step_by_step/"
"scenes_and_nodes.html"
#: doc/classes/Node.xml:21
@@ -42323,7 +43485,6 @@ msgstr ""
"å½“éœ€è¦æ›´æ–°è¿™ä¸ªèŠ‚ç‚¹çš„è­¦å‘Šæ—¶ï¼Œè°ƒç”¨[method update_configuration_warning]。"
#: doc/classes/Node.xml:50
-#, fuzzy
msgid ""
"Called when there is an input event. The input event propagates up through "
"the node tree until a node consumes it.\n"
@@ -42338,18 +43499,17 @@ msgid ""
"[b]Note:[/b] This method is only called if the node is present in the scene "
"tree (i.e. if it's not orphan)."
msgstr ""
-"当有一个输入事件时被调用。输入事件通过节点树å‘上传播,直到一个节点处ç†å®ƒã€‚\n"
-"åªæœ‰å½“输入处ç†è¢«å¯ç”¨æ—¶æ‰ä¼šè¢«è°ƒç”¨ï¼Œå¦‚果这个方法被覆盖,它就会自动完æˆï¼Œå¹¶ä¸”å¯"
-"以用[method set_process_input]æ¥åˆ‡æ¢ã€‚\n"
-"è¦æ¶ˆè€—输入事件并阻止它进一步传播到其他节点,å¯ä»¥è°ƒç”¨[method Viewport."
+"当有输入事件时被调用。输入事件通过节点树å‘上传播,直到一个节点消耗它。\n"
+"åªæœ‰å½“输入处ç†è¢«å¯ç”¨æ—¶æ‰ä¼šè¢«è°ƒç”¨ï¼Œå¦‚果这个方法被é‡å†™ï¼Œå®ƒå°±ä¼šè‡ªåŠ¨å®Œæˆï¼Œå¯ä»¥ç”¨"
+"[method set_process_input]æ¥åˆ‡æ¢ã€‚\n"
+"è¦æ¶ˆè€—输入事件并阻止它进一步传播到其他节点,å¯ä»¥è°ƒç”¨[method SceneTree."
"set_input_as_handled]。\n"
"对于游æˆè¾“入,[method _unhandled_input]å’Œ[method _unhandled_key_input]通常更"
"适åˆï¼Œå› ä¸ºå®ƒä»¬å…许GUI首先拦截事件。\n"
"[b]注æ„:[/b] è¿™ä¸ªæ–¹æ³•åªæœ‰åœ¨èŠ‚ç‚¹å­˜åœ¨äºŽåœºæ™¯æ ‘ä¸­æ—¶æ‰ä¼šè¢«è°ƒç”¨ï¼ˆä¹Ÿå°±æ˜¯è¯´ï¼Œå¦‚果它"
-"䏿˜¯å­¤å„¿ï¼‰ã€‚"
+"éž\"孤儿\")。"
#: doc/classes/Node.xml:61
-#, fuzzy
msgid ""
"Called during the physics processing step of the main loop. Physics "
"processing means that the frame rate is synced to the physics, i.e. the "
@@ -42363,17 +43523,16 @@ msgid ""
"[b]Note:[/b] This method is only called if the node is present in the scene "
"tree (i.e. if it's not orphan)."
msgstr ""
-"在主循环的物ç†å¤„ç†æ­¥éª¤ä¸­è¢«è°ƒç”¨ã€‚物ç†å¤„ç†æ„味ç€å¸§çŽ‡ä¸Žç‰©ç†åŒæ­¥ï¼Œä¹Ÿå°±æ˜¯è¯´ï¼Œ"
-"[code]delta[/code]å˜é‡åº”该是æ’定的。\n"
-"åªæœ‰åœ¨ç‰©ç†å¤„ç†è¢«å¯ç”¨çš„æƒ…况下æ‰ä¼šè¢«è°ƒç”¨ï¼Œå¦‚果这个方法被é‡å†™ï¼Œå®ƒå°±ä¼šè‡ªåŠ¨å®Œæˆï¼Œ"
-"并且å¯ä»¥é€šè¿‡[method set_physics_process]æ¥åˆ‡æ¢ã€‚\n"
-"对应于[方法Object._notification]中的[constant NOTIFICATION_PHYSICS_PROCESS]通"
-"知。\n"
+"在主循环的物ç†å¤„ç†æ­¥éª¤ä¸­è¢«è°ƒç”¨ã€‚物ç†å¤„ç†æ„味ç€å¸§çŽ‡ä¸Žç‰©ç†åŒæ­¥ï¼Œå³[code]delta[/"
+"code]å˜é‡åº”该是常é‡ã€‚[code]delta[/code]çš„å•使˜¯ç§’。\n"
+"åªæœ‰å½“物ç†å¤„ç†è¢«å¯ç”¨æ—¶æ‰ä¼šè¢«è°ƒç”¨ï¼Œå¦‚果这个方法被é‡å†™ï¼Œå°±ä¼šè‡ªåŠ¨å®Œæˆï¼Œå¯ä»¥ç”¨"
+"[method set_physics_process]æ¥åˆ‡æ¢ã€‚\n"
+"对应于[method Object._notification]中的[constant "
+"NOTIFICATION_PHYSICS_PROCESS]通知。\n"
"[b]注æ„:[/b] è¿™ä¸ªæ–¹æ³•åªæœ‰åœ¨èŠ‚ç‚¹å­˜åœ¨äºŽåœºæ™¯æ ‘ä¸­æ—¶æ‰ä¼šè¢«è°ƒç”¨ï¼ˆä¹Ÿå°±æ˜¯è¯´ï¼Œå¦‚果它"
-"䏿˜¯å­¤å„¿ï¼‰ã€‚"
+"䏿˜¯\"孤儿\")。"
#: doc/classes/Node.xml:71
-#, fuzzy
msgid ""
"Called during the processing step of the main loop. Processing happens at "
"every frame and as fast as possible, so the [code]delta[/code] time since "
@@ -42386,13 +43545,13 @@ msgid ""
"tree (i.e. if it's not orphan)."
msgstr ""
"åœ¨ä¸»å¾ªçŽ¯çš„å¤„ç†æ­¥éª¤ä¸­è¢«è°ƒç”¨ã€‚处ç†å‘生在æ¯ä¸€å¸§ï¼Œå¹¶ä¸”å°½å¯èƒ½å¿«ï¼Œæ‰€ä»¥ä»Žä¸Šä¸€å¸§å¼€å§‹"
-"çš„[code]delta[/code]æ—¶é—´ä¸æ˜¯æ’定的。\n"
-"åªæœ‰åœ¨å¤„ç†è¿‡ç¨‹è¢«å¯ç”¨çš„æƒ…况下æ‰ä¼šè¢«è°ƒç”¨ï¼Œå¦‚果这个方法被覆盖,就会自动完æˆï¼Œå¯"
-"以用[method set_process]æ¥åˆ‡æ¢ã€‚\n"
-"对应于 [method Object._notification] 中的 [constant NOTIFICATION_PROCESS] 通"
+"çš„[code]delta[/code]æ—¶é—´ä¸æ˜¯æ’定的。[code]delta[/code]çš„å•使˜¯ç§’。\n"
+"åªæœ‰åœ¨å¯ç”¨å¤„ç†çš„æƒ…况下æ‰ä¼šè¢«è°ƒç”¨ï¼Œå¦‚果这个方法被é‡å†™ï¼Œä¼šè‡ªåŠ¨è¿›è¡Œå¤„ç†ï¼Œå¯ä»¥ç”¨"
+"[method set_process]æ¥åˆ‡æ¢ã€‚\n"
+"对应于[method Object._notification]中的[constant NOTIFICATION_PROCESS]通"
"知。\n"
-"[b]注æ„:[/b] åªæœ‰å½“节点存在于场景树中时æ‰ä¼šè°ƒç”¨è¿™ä¸ªæ–¹æ³•(å³å¦‚æžœå®ƒä¸æ˜¯å­¤"
-"儿)。"
+"[b]注æ„:[/b] è¿™ä¸ªæ–¹æ³•åªæœ‰åœ¨èŠ‚ç‚¹å­˜åœ¨äºŽåœºæ™¯æ ‘ä¸­æ—¶æ‰ä¼šè¢«è°ƒç”¨ï¼ˆä¹Ÿå°±æ˜¯è¯´ï¼Œå¦‚果它"
+"䏿˜¯\"孤儿\")。"
#: doc/classes/Node.xml:80
msgid ""
@@ -42415,14 +43574,13 @@ msgstr ""
"åœ¨ä¹‹åŽæ”¶åˆ°å°±ç»ªé€šçŸ¥ã€‚\n"
"对应于[method Object._notification]中的[constant NOTIFICATION_READY]通知。也"
"请å‚阅å˜é‡çš„[code]onready[/code]关键字。\n"
-"通常用于åˆå§‹åŒ–。对于更早的åˆå§‹åŒ–,å¯ä»¥ä½¿ç”¨[方法Object._init]。也请å‚阅[方法"
-"_enter_tree]。\n"
+"通常用于åˆå§‹åŒ–。对于更早的åˆå§‹åŒ–,å¯ä»¥ä½¿ç”¨[method Object._init]。也请å‚阅"
+"[method _enter_tree]。\n"
"[b]注æ„:[/b] [method _ready] 对于æ¯ä¸ªèŠ‚ç‚¹åªèƒ½è°ƒç”¨ä¸€æ¬¡ã€‚在从场景树中删除一个"
"èŠ‚ç‚¹å¹¶å†æ¬¡æ·»åŠ åŽï¼Œ[code]_ready[/code]å°†ä¸ä¼šè¢«ç¬¬äºŒæ¬¡è°ƒç”¨ã€‚è¿™å¯ä»¥é€šè¿‡è¯·æ±‚冿¬¡è°ƒ"
-"用[方法 request_ready]æ¥ç»•过,它å¯ä»¥åœ¨å†æ¬¡æ·»åŠ èŠ‚ç‚¹ä¹‹å‰çš„任何地方调用。"
+"用[method request_ready]æ¥ç»•过,它å¯ä»¥åœ¨å†æ¬¡æ·»åŠ èŠ‚ç‚¹ä¹‹å‰çš„任何地方调用。"
#: doc/classes/Node.xml:90
-#, fuzzy
msgid ""
"Called when an [InputEvent] hasn't been consumed by [method _input] or any "
"GUI. The input event propagates up through the node tree until a node "
@@ -42438,19 +43596,18 @@ msgid ""
"[b]Note:[/b] This method is only called if the node is present in the scene "
"tree (i.e. if it's not orphan)."
msgstr ""
-"当[InputEvent]还没有被[method _input]或任何GUIå¤„ç†æ—¶è°ƒç”¨ã€‚输入事件通过节点树"
-"å‘上传播,直到一个节点处ç†å®ƒã€‚\n"
-"åªæœ‰åœ¨å¯ç”¨äº†æœªå¤„ç†çš„è¾“å…¥å¤„ç†æ—¶æ‰ä¼šè¢«è°ƒç”¨ï¼Œå¦‚果这个方法被é‡è½½ï¼Œå®ƒå°±ä¼šè‡ªåŠ¨å®Œ"
+"当[InputEvent]还未被[method _input]或任何GUI消耗时调用。输入事件通过节点树å‘"
+"上传播,直到一个节点消耗它。\n"
+"åªæœ‰åœ¨å¯ç”¨äº†æœªå¤„ç†çš„è¾“å…¥å¤„ç†æ—¶æ‰ä¼šè¢«è°ƒç”¨ï¼Œå¦‚果这个方法被é‡å†™ï¼Œå®ƒå°±ä¼šè‡ªåŠ¨å®Œ"
"æˆï¼Œå¹¶ä¸”å¯ä»¥ç”¨[method set_process_unhandled_input]æ¥åˆ‡æ¢ã€‚\n"
-"è¦æ¶ˆè€—输入事件并阻止它进一步传播到其他节点,å¯ä»¥è°ƒç”¨[method Viewport."
+"è¦æ¶ˆè€—输入事件并阻止它进一步传播到其他节点,å¯ä»¥è°ƒç”¨[method SceneTree."
"set_input_as_handled]。\n"
"对于游æˆè¾“入,这和[method _unhandled_key_input]通常比[method _input]更适åˆï¼Œ"
"因为它们å…许GUI首先拦截事件。\n"
-"[b]注æ„:[/b]è¿™ä¸ªæ–¹æ³•åªæœ‰åœ¨èŠ‚ç‚¹å­˜åœ¨äºŽåœºæ™¯æ ‘ä¸­æ—¶æ‰ä¼šè¢«è°ƒç”¨ï¼ˆä¹Ÿå°±æ˜¯è¯´ï¼Œå¦‚果它ä¸"
-"是孤儿)。"
+"[b]注æ„:[/b] è¿™ä¸ªæ–¹æ³•åªæœ‰åœ¨èŠ‚ç‚¹å­˜åœ¨äºŽåœºæ™¯æ ‘ä¸­æ—¶æ‰ä¼šè¢«è°ƒç”¨ï¼ˆä¹Ÿå°±æ˜¯è¯´ï¼Œå¦‚果它"
+"䏿˜¯\"孤儿\")。"
#: doc/classes/Node.xml:101
-#, fuzzy
msgid ""
"Called when an [InputEventKey] hasn't been consumed by [method _input] or "
"any GUI. The input event propagates up through the node tree until a node "
@@ -42466,19 +43623,18 @@ msgid ""
"[b]Note:[/b] This method is only called if the node is present in the scene "
"tree (i.e. if it's not orphan)."
msgstr ""
-"当[InputEventKey]没有被[method _input]或任何GUIå¤„ç†æ—¶è¢«è°ƒç”¨ã€‚输入事件通过节点"
-"æ ‘å‘上传播,直到一个节点处ç†å®ƒã€‚\n"
-"åªæœ‰åœ¨å¯ç”¨äº†æœªå¤„ç†çš„é”®è¾“å…¥å¤„ç†æ—¶æ‰ä¼šè¢«è°ƒç”¨ï¼Œå¦‚果这个方法被覆盖,它就会自动完"
+"当[InputEventKey]没有被[method _input]或任何GUI消耗时被调用。输入事件通过节点"
+"æ ‘å‘上传播,直到一个节点消耗它。\n"
+"åªæœ‰åœ¨å¯ç”¨äº†æœªå¤„ç†çš„é”®è¾“å…¥å¤„ç†æ—¶æ‰ä¼šè¢«è°ƒç”¨ï¼Œå¦‚果这个方法被é‡å†™ï¼Œå®ƒå°±ä¼šè‡ªåŠ¨å®Œ"
"æˆï¼Œå¹¶ä¸”å¯ä»¥ç”¨[method set_process_unhandled_key_input]æ¥åˆ‡æ¢ã€‚\n"
-"è¦æ¶ˆè€—输入事件并阻止它进一步传播到其他节点,å¯ä»¥è°ƒç”¨[method Viewport."
+"è¦æ¶ˆè€—输入事件并阻止它进一步传播到其他节点,å¯ä»¥è°ƒç”¨[method SceneTree."
"set_input_as_handled]。\n"
"对于游æˆè¾“入,这和[method _unhandled_input]通常比[method _input]更适åˆï¼Œå› ä¸º"
"它们å…许GUI首先拦截事件。\n"
"[b]注æ„:[/b] è¿™ä¸ªæ–¹æ³•åªæœ‰åœ¨èŠ‚ç‚¹å­˜åœ¨äºŽåœºæ™¯æ ‘ä¸­æ—¶æ‰ä¼šè¢«è°ƒç”¨ï¼ˆä¹Ÿå°±æ˜¯è¯´ï¼Œå¦‚果它"
-"䏿˜¯å­¤å„¿ï¼‰ã€‚"
+"䏿˜¯\"孤儿\")。"
#: doc/classes/Node.xml:113
-#, fuzzy
msgid ""
"Adds a child node. Nodes can have any number of children, but every child "
"must have a unique name. Child nodes are automatically deleted when the "
@@ -42504,30 +43660,26 @@ msgid ""
"owner], the newly added [Node] will not be visible in the scene tree, though "
"it will be visible in the 2D/3D view."
msgstr ""
-"添加一个å­èŠ‚ç‚¹ã€‚èŠ‚ç‚¹å¯ä»¥æœ‰ä»»ä½•æ•°é‡çš„å­èŠ‚ç‚¹ï¼Œä½†æ˜¯æ¯ä¸ªå­èŠ‚ç‚¹å¿…é¡»æœ‰ä¸€ä¸ªå”¯ä¸€çš„å"
-"字。当父节点被删除时,å­èŠ‚ç‚¹ä¼šè¢«è‡ªåŠ¨åˆ é™¤ï¼Œæ‰€ä»¥æ•´ä¸ªåœºæ™¯å¯ä»¥é€šè¿‡åˆ é™¤å…¶æœ€ä¸Šé¢çš„"
-"节点而被删除。\n"
+"添加å­èŠ‚ç‚¹ã€‚èŠ‚ç‚¹å¯ä»¥æœ‰ä»»æ„æ•°é‡çš„å­èŠ‚ç‚¹ï¼Œä½†æ˜¯æ¯ä¸ªå­èŠ‚ç‚¹å¿…é¡»æœ‰å”¯ä¸€çš„å字。当父"
+"节点被删除时,å­èŠ‚ç‚¹ä¼šè¢«è‡ªåŠ¨åˆ é™¤ï¼Œæ‰€ä»¥æ•´ä¸ªåœºæ™¯å¯ä»¥é€šè¿‡åˆ é™¤å…¶æœ€ä¸Šé¢çš„节点而被"
+"删除。\n"
"如果[code]legible_unique_name[/code]是[code]true[/code],å­èŠ‚ç‚¹å°†æœ‰ä¸€ä¸ªåŸºäºŽè¢«"
-"实例化的节点的åç§°è€Œä¸æ˜¯å…¶ç±»åž‹çš„人类å¯è¯»å称。\n"
-"[b]注æ„:[/b] 如果å­èŠ‚ç‚¹å·²ç»æœ‰ä¸€ä¸ªçˆ¶èŠ‚ç‚¹ï¼Œè¿™ä¸ªå‡½æ•°å°†å¤±è´¥ã€‚é¦–å…ˆä½¿ç”¨[method "
-"remove_child]将节点从其当å‰çš„父节点中移除。比如说:\n"
+"实例化的节点的åç§°ï¼Œè€Œä¸æ˜¯å…¶ç±»åž‹å¯è¯»çš„å称。\n"
+"[b]注æ„:[/b] 如果å­èŠ‚ç‚¹å·²ç»æœ‰çˆ¶èŠ‚ç‚¹ï¼Œè¯¥å‡½æ•°å°†å¤±è´¥ã€‚é¦–å…ˆä½¿ç”¨[method "
+"remove_child]将节点从其当å‰çš„父节点中移除。如:\n"
"[codeblock]\n"
"if child_node.get_parent():\n"
" child_node.get_parent().remove_child(child_node)\n"
"add_child(child_node)\n"
"[/codeblock]\n"
-"如果你需è¦å°†å­èŠ‚ç‚¹æ·»åŠ åˆ°å­èŠ‚ç‚¹åˆ—è¡¨ä¸­æŸä¸ªç‰¹å®šèŠ‚ç‚¹çš„ä¸‹é¢ï¼Œè¯·ä½¿ç”¨[method "
-"add_sibling]è€Œä¸æ˜¯è¿™ä¸ªæ–¹æ³•。\n"
-"[b]注æ„:[/b] 如果你希望一个å­èŠ‚ç‚¹è¢«æŒä¹…化到[PackedScene]中,除了调用[method "
-"add_child]外,你必须设置[member owner]。这通常适用于[url=https://godot."
-"readthedocs.io/zh_CN/latest/tutorials/misc/running_code_in_the_editor.html]å·¥"
-"具脚本[/url]和[url=https://godot.readthedocs.io/zh_CN/latest/tutorials/"
-"plugins/editor/index.html]编辑器æ’ä»¶[/url]。如果调用[method add_child]而ä¸è®¾"
-"ç½®[member owner],新添加的[Node]在场景树中是ä¸å¯è§çš„,尽管它在2D/3D视图中是å¯"
-"è§çš„。"
+"[b]注æ„:[/b] 如果你想让一个å­èŠ‚ç‚¹è¢«æŒä¹…化到[PackedScene]中,除了调用[method "
+"add_child]外,还必须设置[member owner]。这通常与[url=https://godot."
+"readthedocs.io/en/3.2/tutorials/misc/running_code_in_the_editor.html]工具脚本"
+"[/url]和[url=https://godot.readthedocs.io/en/latest/tutorials/plugins/editor/"
+"index.html]编辑器æ’ä»¶[/url]有关。如果调用[method add_child]而ä¸è®¾ç½®[member "
+"owner],新添加的[Node]在场景树中是ä¸å¯è§çš„,尽管它在2D/3D视图中å¯è§ã€‚"
#: doc/classes/Node.xml:130
-#, fuzzy
msgid ""
"Adds [code]child_node[/code] as a child. The child is placed below the given "
"[code]node[/code] in the list of children.\n"
@@ -42535,15 +43687,12 @@ msgid ""
"will have a human-readable name based on the name of the node being "
"instanced instead of its type."
msgstr ""
-"在当å‰çš„节点父节点上添加一个[code]兄弟å§å¦¹[/code]节点,与该节点处于åŒä¸€çº§åˆ«ï¼Œ"
-"就在其下方。\n"
+"添加[code]child_node[/code]作为å­èŠ‚ç‚¹ã€‚è¯¥å­èŠ‚ç‚¹åœ¨å­èŠ‚ç‚¹åˆ—è¡¨ä¸­è¢«ç½®äºŽç»™å®šçš„"
+"[code]node[/code]之下。\n"
"如果[code]legible_unique_name[/code]是[code]true[/code],å­èŠ‚ç‚¹å°†æœ‰ä¸€ä¸ªåŸºäºŽè¢«"
-"实例化的节点åç§°è€Œä¸æ˜¯å…¶ç±»åž‹çš„人类å¯è¯»å称。\n"
-"如果你ä¸éœ€è¦å­èŠ‚ç‚¹è¢«æ·»åŠ åˆ°å­èŠ‚ç‚¹åˆ—è¡¨ä¸­çš„ç‰¹å®šèŠ‚ç‚¹ä¸‹é¢ï¼Œè¯·ä½¿ç”¨[method "
-"add_child]代替这个方法。"
+"实例化的节点åç§°ï¼Œè€Œä¸æ˜¯å…¶ç±»åž‹å¯è¯»çš„å称。"
#: doc/classes/Node.xml:139
-#, fuzzy
msgid ""
"Adds the node to a group. Groups are helpers to name and organize a subset "
"of nodes, for example \"enemies\" or \"collectables\". A node can be in any "
@@ -42556,12 +43705,14 @@ msgid ""
"guaranteed. The order of node groups should not be relied upon as it can "
"vary across project runs."
msgstr ""
-"将节点添加到一个组中。组是命å和组织节点å­é›†çš„辅助工具,例如 \"敌人 \"或 \"å¯"
-"收集物\"。一个节点å¯ä»¥åœ¨ä»»ä½•æ•°é‡çš„组中。节点å¯ä»¥åœ¨ä»»ä½•时候被分é…到一个组中,"
-"但是在它们进入场景树(è§[method is_inside_tree])之å‰ä¸ä¼šè¢«æ·»åŠ ã€‚å‚阅æè¿°ä¸­çš„"
-"注释,以åŠ[SceneTree]中的组方法。\n"
+"将节点添加到一个组中。组是命å和组织节点å­é›†çš„辅助工具,例如 \"敌人\" 或 \"å¯"
+"收集物\"等。一个节点å¯ä»¥åœ¨ä»»ä½•æ•°é‡çš„组中。节点å¯ä»¥åœ¨ä»»ä½•时候被分é…到一个组"
+"中,但是在它们进入场景树之å‰ä¸ä¼šè¢«æ·»åŠ ï¼Œå‚阅[method is_inside_tree]。å‚阅æè¿°"
+"中的注释,以åŠ[SceneTree]中的分组方法。\n"
"当把节点打包到[PackedScene]å¹¶ä¿å­˜åˆ°æ–‡ä»¶æ—¶ï¼Œä¼šä½¿ç”¨[code]persistent[/code]选"
-"é¡¹ã€‚éžæŒä¹…化的组ä¸ä¼šè¢«å­˜å‚¨ã€‚"
+"é¡¹ã€‚éžæŒä¹…化的组ä¸ä¼šè¢«å­˜å‚¨ã€‚\n"
+"[b]注æ„:[/b]由于性能原因,节点组的顺åº[i]ä¸[/i]能ä¿è¯ã€‚因些节点组的顺åºä¸åº”"
+"该被ä¾èµ–,因为它å¯èƒ½åœ¨ä¸åŒçš„项目è¿è¡Œä¸­å˜åŒ–。"
#: doc/classes/Node.xml:147
msgid ""
@@ -42590,7 +43741,6 @@ msgstr ""
"本。"
#: doc/classes/Node.xml:165
-#, fuzzy
msgid ""
"Finds a descendant of this node whose name matches [code]mask[/code] as in "
"[method String.match] (i.e. case-sensitive, but [code]\"*\"[/code] matches "
@@ -42606,15 +43756,17 @@ msgid ""
"consider using [method get_node] instead. To avoid using [method find_node] "
"too often, consider caching the node reference into a variable."
msgstr ""
-"找到这个节点的å­èŠ‚ç‚¹ï¼Œå…¶å称与[method String.match]中的[code]mask[/code]相匹"
-"é…(å³åŒºåˆ†å¤§å°å†™ï¼Œä½†[code]\"*\"[/code]匹é…零或多个字符,[code]\"?\"[/code]匹"
-"é…除[code]\".\"[/code]以外的任何å•个字符)。\n"
-"[b]注æ„:[/b]它ä¸ä¸Žå…¨è·¯å¾„匹é…,åªä¸Žå•个节点å称匹é…。\n"
+"查找该节点的å­çº§ï¼Œå…¶å称与[method String.match]中的[code]mask[/code]相匹é…,"
+"区分大å°å†™ï¼Œä»¥[code]\"*\"[/code]匹é…零或多个字符,[code]\"?\"[/code]匹é…除"
+"[code]\".\"[/code]以外的任何å•字符。\n"
+"[b]注æ„:[/b]å®ƒä¸æ˜¯å…¨è·¯å¾„匹é…,åªä¸Žå•个节点å称匹é…。\n"
"如果[code]owner[/code]是[code]true[/code]ï¼Œè¿™ä¸ªæ–¹æ³•åªæ‰¾åˆ°æ‰€æœ‰è€…是这个节点的节"
-"点。这对通过脚本实例化的场景特别é‡è¦ï¼Œå› ä¸ºè¿™äº›åœºæ™¯æ²¡æœ‰æ‰€æœ‰è€…。"
+"点。这对通过脚本实例化的场景特别é‡è¦ï¼Œå› ä¸ºè¿™äº›åœºæ™¯æ²¡æœ‰æ‰€æœ‰è€…。\n"
+"[b]注æ„:[/b]由于这个方法会é历节点的所有å­çº§ï¼Œå®ƒæ˜¯èŽ·å¾—å¦ä¸€ä¸ªèŠ‚ç‚¹çš„å¼•ç”¨çš„æœ€æ…¢"
+"的方法。åªè¦æœ‰å¯èƒ½ï¼Œè¯·è€ƒè™‘使用[method get_node]代替。为了é¿å…过于频ç¹åœ°ä½¿ç”¨"
+"[method find_node],å¯ä»¥è€ƒè™‘将节点引用缓存到一个å˜é‡ä¸­ã€‚"
#: doc/classes/Node.xml:175
-#, fuzzy
msgid ""
"Finds the first parent of the current node whose name matches [code]mask[/"
"code] as in [method String.match] (i.e. case-sensitive, but [code]\"*\"[/"
@@ -42627,12 +43779,13 @@ msgid ""
"[method get_node] instead. To avoid using [method find_parent] too often, "
"consider caching the node reference into a variable."
msgstr ""
-"找到这个节点的å­èŠ‚ç‚¹ï¼Œå…¶å称与[method String.match]中的[code]mask[/code]相匹"
-"é…(å³åŒºåˆ†å¤§å°å†™ï¼Œä½†[code]\"*\"[/code]匹é…零或多个字符,[code]\"?\"[/code]匹"
-"é…除[code]\".\"[/code]以外的任何å•个字符)。\n"
-"[b]注æ„:[/b]它ä¸ä¸Žå…¨è·¯å¾„匹é…,åªä¸Žå•个节点å称匹é…。\n"
-"如果[code]owner[/code]是[code]true[/code]ï¼Œè¿™ä¸ªæ–¹æ³•åªæ‰¾åˆ°æ‰€æœ‰è€…是这个节点的节"
-"点。这对通过脚本实例化的场景特别é‡è¦ï¼Œå› ä¸ºè¿™äº›åœºæ™¯æ²¡æœ‰æ‰€æœ‰è€…。"
+"查找当å‰èŠ‚ç‚¹çš„ç¬¬ä¸€ä¸ªçˆ¶èŠ‚ç‚¹ï¼Œå…¶å称与[method String.match]中的[code]mask[/"
+"code]相匹é…,区分大å°å†™ï¼Œå…¶[code]\"*\"[/code]匹é…零或多个字符,[code]\"?\"[/"
+"code]匹é…任何å•个字符,除了[code]\".\"[/code]。\n"
+"[b]注æ„:[/b]å®ƒä¸æ˜¯å…¨è·¯å¾„匹é…,åªä¸Žå•个节点å称匹é…。\n"
+"[b]注æ„:[/b]由于这个方法在场景树中å‘ä¸Šè¡Œèµ°ï¼Œåœ¨å¤§åž‹çš„ã€æ·±åº¦åµŒå¥—的场景树中å¯èƒ½"
+"会很慢。åªè¦æœ‰å¯èƒ½ï¼Œè¯·è€ƒè™‘使用[method get_node]代替。为了é¿å…过于频ç¹åœ°ä½¿ç”¨"
+"[method find_parent],考虑将节点引用缓存到一个å˜é‡ä¸­ã€‚"
#: doc/classes/Node.xml:184
msgid ""
@@ -42640,8 +43793,8 @@ msgid ""
"method is often used for iterating all children of a node.\n"
"To access a child node via its name, use [method get_node]."
msgstr ""
-"按索引返回一个å­èŠ‚ç‚¹ï¼ˆè§[方法get_child_count])。这个方法ç»å¸¸è¢«ç”¨äºŽé历一个节"
-"点的所有å­èŠ‚ç‚¹ã€‚\n"
+"按索引返回一个å­èŠ‚ç‚¹ï¼ˆè§[method get_child_count])。这个方法ç»å¸¸è¢«ç”¨äºŽé历一"
+"个节点的所有å­èŠ‚ç‚¹ã€‚\n"
"è¦é€šè¿‡ä¸€ä¸ªå­èŠ‚ç‚¹çš„å字访问它,请使用[method get_node]。"
#: doc/classes/Node.xml:191
@@ -42659,11 +43812,14 @@ msgid ""
"guaranteed. The order of node groups should not be relied upon as it can "
"vary across project runs."
msgstr ""
+"返回一个数组,列出节点所属的组。\n"
+"[b]注:[/b]å‡ºäºŽæ€§èƒ½åŽŸå› ï¼ŒèŠ‚ç‚¹ç»„çš„é¡ºåºæ˜¯[i]ä¸[/i]确定的。ä¸åº”ä¾èµ–节点组的顺"
+"åºï¼Œå› ä¸ºå®ƒå¯èƒ½å› é¡¹ç›®è¿è¡Œè€Œå¼‚。"
#: doc/classes/Node.xml:210
msgid ""
"Returns the node's index, i.e. its position among the siblings of its parent."
-msgstr ""
+msgstr "返回节点的索引,å³å®ƒåœ¨å…¶çˆ¶èŠ‚ç‚¹çš„å…„å¼ŸèŠ‚ç‚¹ä¸­çš„ä½ç½®ã€‚"
#: doc/classes/Node.xml:216
msgid ""
@@ -42794,16 +43950,15 @@ msgstr ""
"场景中,å¦åˆ™å‡½æ•°å°†å¤±è´¥ã€‚"
#: doc/classes/Node.xml:288
-#, fuzzy
msgid ""
"Returns the time elapsed (in seconds) since the last physics-bound frame "
"(see [method _physics_process]). This is always a constant value in physics "
"processing unless the frames per second is changed via [member Engine."
"iterations_per_second]."
msgstr ""
-"返回从最åŽä¸€ä¸ªç‰©ç†ç»‘定帧开始ç»è¿‡çš„æ—¶é—´(å‚阅[method _physics_process])。这在物"
-"ç†å¤„ç†ä¸­æ€»æ˜¯ä¸€ä¸ªå¸¸é‡ï¼Œé™¤éžæ¯ç§’帧数通过[member Engine.iterations_per_second]被"
-"改å˜ã€‚"
+"返回自上次物ç†ç»‘å®šå¸§ä»¥æ¥æ‰€ç»è¿‡çš„æ—¶é—´ï¼ˆå•ä½ä¸ºç§’),å‚阅 [method "
+"_physics_process]。在物ç†å¤„ç†ä¸­ï¼Œè¿™å§‹ç»ˆæ˜¯ä¸€ä¸ªå¸¸æ•°ï¼Œé™¤éžé€šè¿‡ [member Engine."
+"iterations_per_second] æ”¹å˜æ¯ç§’的帧数。"
#: doc/classes/Node.xml:294
msgid ""
@@ -42849,7 +44004,7 @@ msgid ""
msgstr ""
"如果[NodePath]指å‘一个有效的节点,并且它的å­å称指å‘一个有效的资æºï¼Œä¾‹å¦‚"
"[code]Area2D/CollisionShape2D:shape[/code],则返回[code]true[/code]。具有éž"
-"[资æº]类型的属性(例如节点或基本数学类型)ä¸è¢«è®¤ä¸ºæ˜¯èµ„æºã€‚"
+"[Resource]类型的属性(例如节点或基本数学类型)ä¸è¢«è®¤ä¸ºæ˜¯èµ„æºã€‚"
#: doc/classes/Node.xml:339
msgid ""
@@ -42930,16 +44085,16 @@ msgid ""
"Returns [code]true[/code] if the node is processing unhandled input (see "
"[method set_process_unhandled_input])."
msgstr ""
-"å¦‚æžœèŠ‚ç‚¹æ­£åœ¨å¤„ç†æœªè¢«å¤„ç†çš„输入(å‚阅[方法set_process_unhandled_input]),则返回"
-"[code]true[/code]。"
+"å¦‚æžœèŠ‚ç‚¹æ­£åœ¨å¤„ç†æœªè¢«å¤„ç†çš„输入(å‚阅[method set_process_unhandled_input]),则"
+"返回[code]true[/code]。"
#: doc/classes/Node.xml:413
msgid ""
"Returns [code]true[/code] if the node is processing unhandled key input (see "
"[method set_process_unhandled_key_input])."
msgstr ""
-"å¦‚æžœèŠ‚ç‚¹æ­£åœ¨å¤„ç†æœªè¢«å¤„ç†çš„键输入(å‚阅[方法set_process_unhandled_key_input]),"
-"则返回[code]true[/code]。"
+"å¦‚æžœèŠ‚ç‚¹æ­£åœ¨å¤„ç†æœªè¢«å¤„ç†çš„键输入(å‚阅[method "
+"set_process_unhandled_key_input]),则返回[code]true[/code]。"
#: doc/classes/Node.xml:421
msgid ""
@@ -42985,7 +44140,6 @@ msgstr ""
"[/codeblock]"
#: doc/classes/Node.xml:448
-#, fuzzy
msgid ""
"Similar to [method print_tree], this prints the tree to stdout. This version "
"displays a more graphical representation similar to what is displayed in the "
@@ -43000,15 +44154,15 @@ msgid ""
" â”–â•´Camera2D\n"
"[/codeblock]"
msgstr ""
-"类似于[method print_tree],它将树打å°åˆ°æ ‡å‡†è¾“出。这个版本显示了一个更图形化的"
-"表示,类似于在场景检查器中显示的。它对检查较大的树很有用。\n"
-"[b]示例输出:[/b]\n"
+"类似于[method print_tree],它将树打å°åˆ°æ ‡å‡†è¾“出。这个版本显示更多的图形,类似"
+"于在场景检查器中显示的内容。它对于检查较大的树很有用。\n"
+"[b]输出示例:[/b]\n"
"[codeblock]\n"
" â”–â•´TheGame\n"
" â” â•´Menu\n"
" ┃ ┠╴Label\n"
" ┃ ┖╴Camera2D\n"
-" â”–-SplashScreen\n"
+" â”–â•´SplashScreen\n"
" â”–â•´Camera2D\n"
"[/codeblock]"
@@ -43035,7 +44189,6 @@ msgstr ""
"å­èŠ‚ç‚¹ã€‚"
#: doc/classes/Node.xml:479
-#, fuzzy
msgid ""
"Queues a node for deletion at the end of the current frame. When deleted, "
"all of its child nodes will be deleted as well. This method ensures it's "
@@ -43049,11 +44202,13 @@ msgid ""
"or access its properties."
msgstr ""
"在当å‰å¸§ç»“æŸæ—¶æŽ’队删除一个节点。当删除时,其所有的å­èŠ‚ç‚¹ä¹Ÿå°†è¢«åˆ é™¤ã€‚è¿™ä¸ªæ–¹æ³•"
-"ç¡®ä¿åˆ é™¤èŠ‚ç‚¹æ˜¯å®‰å…¨çš„ï¼Œä¸Ž[method Object.free]相å。使用 [method Object."
-"is_queued_for_deletion] æ¥æ£€æŸ¥ä¸€ä¸ªèŠ‚ç‚¹æ˜¯å¦ä¼šåœ¨å¸§ç»“æŸæ—¶è¢«åˆ é™¤ã€‚"
+"ç¡®ä¿åˆ é™¤èŠ‚ç‚¹æ˜¯å®‰å…¨çš„ï¼Œä¸Ž[method Object.free]相å。使用[method Object."
+"is_queued_for_deletion]æ¥æ£€æŸ¥ä¸€ä¸ªèŠ‚ç‚¹æ˜¯å¦ä¼šåœ¨å¸§æœ«è¢«åˆ é™¤ã€‚\n"
+"[b]é‡è¦ï¼š[/b] 如果你有å˜é‡æŒ‡å‘节点,一旦节点被释放,它将[i]ä¸ä¼š[/i] 被分é…到"
+"[code]null[/code]。相å,它将指å‘一个[i]å…ˆå‰è¢«é‡Šæ”¾çš„实例[/i],你应该在å°è¯•è°ƒ"
+"用其方法或访问其属性之å‰ç”¨[method @GDScript.is_instance_valid]æ¥éªŒè¯å®ƒã€‚"
#: doc/classes/Node.xml:486
-#, fuzzy
msgid ""
"Moves this node to the bottom of parent node's children hierarchy. This is "
"often useful in GUIs ([Control] nodes), because their order of drawing "
@@ -43063,9 +44218,9 @@ msgid ""
"siblings."
msgstr ""
"将此节点移到父节点的å­èŠ‚ç‚¹å±‚æ¬¡çš„åº•éƒ¨ã€‚è¿™åœ¨GUI([Control]节点)中通常很有用,"
-"因为它们的绘制顺åºå–决于它们在树中的顺åºï¼Œä¹Ÿå°±æ˜¯è¯´ï¼Œå®ƒä»¬åœ¨èŠ‚ç‚¹åˆ—è¡¨ä¸­è¶Šé å‰ï¼Œ"
-"它们就被绘制得越高。使用[code]raise[/code]åŽï¼Œä¸€ä¸ªæŽ§ä»¶å°†è¢«ç»˜åˆ¶åœ¨å®ƒçš„兄弟å§å¦¹"
-"之上。"
+"因为它们的绘制顺åºå–决于它们在树中的顺åºã€‚最上é¢çš„节点首先被绘制出æ¥ï¼Œç„¶åŽåœ¨"
+"层次结构中最上é¢çš„节点下é¢çš„æ‰€æœ‰åŒçº§è¢«ä¾æ¬¡ç»˜åˆ¶åœ¨å®ƒçš„上é¢ã€‚使用[code]raise[/"
+"code]åŽï¼Œä¸€ä¸ªæŽ§ä»¶å°†è¢«ç»˜åˆ¶åœ¨å…¶åŒçº§çš„上é¢ã€‚"
#: doc/classes/Node.xml:492
msgid ""
@@ -43083,6 +44238,9 @@ msgid ""
"(or its descendants) to be [code]null[/code], if that [member owner] is no "
"longer a parent or ancestor."
msgstr ""
+"删除一个å­èŠ‚ç‚¹ã€‚è¯¥èŠ‚ç‚¹ä¸ä¼šè¢«åˆ é™¤ï¼Œå¿…须手动删除。\n"
+"[b]注:[/b]如果该[member owner]ä¸å†æ˜¯çˆ¶èŠ‚ç‚¹æˆ–ç¥–å…ˆï¼Œåˆ™è¯¥å‡½æ•°å¯ä»¥å°†è¢«ç§»é™¤èŠ‚ç‚¹"
+"(或其åŽä»£ï¼‰çš„[member owner]设置为[code]null[/code]。"
#: doc/classes/Node.xml:507
msgid ""
@@ -43260,14 +44418,13 @@ msgid ""
"if [method _physics_process] is overridden. Any calls to this before [method "
"_ready] will be ignored."
msgstr ""
-"å¯ç”¨æˆ–ç¦ç”¨ç‰©ç†å­¦ï¼ˆå³å›ºå®šå¸§çŽ‡ï¼‰å¤„ç†ã€‚å½“ä¸€ä¸ªèŠ‚ç‚¹è¢«å¤„ç†æ—¶ï¼Œå®ƒå°†ä»¥ä¸€ä¸ªå›ºå®šçš„(通"
-"常是60FPS,è§[member Engine.iterations_per_second]æ¥æ›´æ”¹å…¶å€¼ï¼‰æ—¶é—´é—´é𔿔¶åˆ°ä¸€"
-"个[常é‡NOTIFICATION_PHYSICS_PROCESS](如果存在,[method _physics_process]回调"
-"将被调用)。如果[method _physics_process]被é‡å†™ï¼Œåˆ™è‡ªåЍå¯ç”¨ã€‚在[method "
-"_ready]之å‰å¯¹å®ƒçš„任何调用都将被忽略。"
+"å¯ç”¨æˆ–ç¦ç”¨ç‰©ç†å¤„ç†ï¼ˆå³å›ºå®šå¸§çŽ‡ï¼‰ã€‚å½“ä¸€ä¸ªèŠ‚ç‚¹è¢«å¤„ç†æ—¶ï¼Œå®ƒå°†ä»¥ä¸€ä¸ªå›ºå®šçš„(通常"
+"是60FPS,å‚阅[member Engine.iterations_per_second]æ¥æ›´æ”¹è¯¥å€¼ï¼‰æ—¶é—´é—´é𔿔¶åˆ°ä¸€"
+"个[constant NOTIFICATION_PHYSICS_PROCESS](如果存在,[method "
+"_physics_process]回调将被调用)。如果[method _physics_process]被é‡å†™ï¼Œåˆ™è‡ªåЍ"
+"å¯ç”¨ã€‚在[method _ready]之å‰å¯¹å®ƒçš„任何调用都将被忽略。"
#: doc/classes/Node.xml:631
-#, fuzzy
msgid ""
"Enables or disables internal physics for this node. Internal physics "
"processing happens in isolation from the normal [method _physics_process] "
@@ -43280,11 +44437,13 @@ msgid ""
"behavior. Script access to this internal logic is provided for specific "
"advanced uses, but is unsafe and not supported."
msgstr ""
-"å¯ç”¨æˆ–ç¦ç”¨ç‰©ç†å¸§ï¼ˆå³å›ºå®šå¸§çŽ‡ï¼‰å¤„ç†ã€‚å½“ä¸€ä¸ªèŠ‚ç‚¹è¢«å¤„ç†æ—¶ï¼Œå®ƒå°†ä»¥ä¸€ä¸ªå›ºå®šçš„(通"
-"常是60FPS,è§[member Engine.iterations_per_second]æ¥æ”¹å˜å®ƒçš„值)时间间隔收到"
-"一个[constant NOTIFICATION_PHYSICS_PROCESS](如果存在,[method "
-"_physics_process]回调将被调用)。如果[method _physics_process]被é‡å†™ï¼Œåˆ™è‡ªåЍ"
-"å¯ç”¨ã€‚在[method _ready]之å‰å¯¹å®ƒçš„任何调用都将被忽略。"
+"å¯ç”¨æˆ–ç¦ç”¨è¯¥èŠ‚ç‚¹çš„å†…éƒ¨ç‰©ç†ã€‚内部物ç†å¤„ç†ä¸Žæ­£å¸¸çš„[method _physics_process]调用"
+"隔离进行,并且由æŸäº›èŠ‚ç‚¹å†…éƒ¨ä½¿ç”¨ï¼Œä»¥ç¡®ä¿æ­£å¸¸å·¥ä½œï¼Œå³ä½¿èŠ‚ç‚¹æš‚åœæˆ–物ç†å¤„ç†å› è„š"
+"本而ç¦ç”¨ï¼ˆ[method set_physics_process])。仅适用于用于æ“纵内置节点行为的高级"
+"用途。\n"
+"[b]警告:[/b] 内置节点ä¾é å†…éƒ¨å¤„ç†æ¥å®žçŽ°è‡ªå·±çš„é€»è¾‘ï¼Œæ‰€ä»¥ä»Žä½ çš„ä»£ç ä¸­æ”¹å˜è¿™ä¸ªå€¼"
+"å¯èƒ½ä¼šå¯¼è‡´æ„外的行为。为特定的高级用途æä¾›äº†å¯¹æ­¤å†…部逻辑的脚本访问,但ä¸å®‰å…¨"
+"䏔䏿”¯æŒã€‚"
#: doc/classes/Node.xml:639
msgid ""
@@ -43309,7 +44468,6 @@ msgstr ""
"写,则自动å¯ç”¨ã€‚任何在[method _ready]之å‰å¯¹å®ƒçš„调用都将被忽略。"
#: doc/classes/Node.xml:653
-#, fuzzy
msgid ""
"Enables or disabled internal processing for this node. Internal processing "
"happens in isolation from the normal [method _process] calls and is used by "
@@ -43321,10 +44479,12 @@ msgid ""
"behavior. Script access to this internal logic is provided for specific "
"advanced uses, but is unsafe and not supported."
msgstr ""
-"å¯ç”¨æˆ–ç¦ç”¨è¯¥èŠ‚ç‚¹çš„å†…éƒ¨å¤„ç†ã€‚内部处ç†å‘生在与正常的[method _process]调用隔离的"
-"情况下,并被一些节点内部使用,以ä¿è¯æ­£å¸¸è¿è¡Œã€‚å³ä½¿èŠ‚ç‚¹è¢«æš‚åœæˆ–process函数被脚"
-"本ç¦ç”¨ï¼ˆ[method set_process]),其内部处ç†ä»ä¼šè¿›è¡Œã€‚åªå¯¹é«˜çº§ç”¨é€”有用,å¯ä»¥æ“"
-"纵内置节点的行为。"
+"å¯ç”¨æˆ–ç¦ç”¨æ­¤èŠ‚ç‚¹çš„å†…éƒ¨å¤„ç†ã€‚内部处ç†ä¸Žæ­£å¸¸çš„ [method _process] 调用隔离进行,"
+"并且由æŸäº›èŠ‚ç‚¹å†…éƒ¨ä½¿ç”¨ï¼Œä»¥ç¡®ä¿æ­£å¸¸å·¥ä½œï¼Œå³ä½¿èŠ‚ç‚¹å·²æš‚åœæˆ–处ç†å› è„šæœ¬è€Œç¦ç”¨"
+"([method set_process])。仅适用于æ“纵内置节点行为的高级用途。\n"
+"[b]警告:[/b] 内置节点ä¾èµ–äºŽå†…éƒ¨å¤„ç†æ¥å®žçŽ°è‡ªå·±çš„é€»è¾‘ï¼Œå› æ­¤æ›´æ”¹ä»£ç ä¸­çš„这个值"
+"å¯èƒ½ä¼šå¯¼è‡´æ„外行为。为特定的高级用途æä¾›äº†å¯¹æ­¤å†…部逻辑的脚本访问,但ä¸å®‰å…¨ä¸”"
+"䏿”¯æŒã€‚"
#: doc/classes/Node.xml:661
msgid ""
@@ -43334,8 +44494,8 @@ msgid ""
"is overridden. Any calls to this before [method _ready] will be ignored."
msgstr ""
"å¯ç”¨æœªå¤„ç†çš„输入处ç†ã€‚这对GUI控件æ¥è¯´æ˜¯ä¸éœ€è¦çš„! å®ƒä½¿èŠ‚ç‚¹èƒ½å¤ŸæŽ¥æ”¶æ‰€æœ‰ä»¥å‰æ²¡æœ‰"
-"处ç†çš„输入(通常是由[控制]处ç†çš„)。如果[method _unhandled_input]被é‡è½½ï¼Œåˆ™è‡ª"
-"动å¯ç”¨ã€‚在[method _ready]之å‰å¯¹å®ƒçš„任何调用都将被忽略。"
+"处ç†çš„输入(通常是由[Control]处ç†çš„)。如果[method _unhandled_input]被é‡è½½ï¼Œ"
+"则自动å¯ç”¨ã€‚在[method _ready]之å‰å¯¹å®ƒçš„任何调用都将被忽略。"
#: doc/classes/Node.xml:668
msgid ""
@@ -43375,6 +44535,9 @@ msgid ""
"[code]res://levels/1.tscn[/code]). Otherwise, [member filename] is set to an "
"empty string."
msgstr ""
+"如果场景是从文件实例化的,则其最顶层节点包å«åœ¨ [member filename] 中加载它的ç»"
+"对文件路径(例如 [code]res://levels/1.tscn[/code])。å¦åˆ™ï¼Œ[member filename] "
+"设置为空字符串。"
#: doc/classes/Node.xml:694
msgid ""
@@ -43385,7 +44548,6 @@ msgstr ""
"默认的SceneTree(如果在树内)。"
#: doc/classes/Node.xml:697
-#, fuzzy
msgid ""
"The name of the node. This name is unique among the siblings (other child "
"nodes from the same parent). When set to an existing name, the node will be "
@@ -43394,8 +44556,11 @@ msgid ""
"character, which is reserved for unique names when using [method add_child]. "
"When setting the name manually, any [code]@[/code] will be removed."
msgstr ""
-"节点的å称。这个å字在兄弟å§å¦¹ä¸­æ˜¯å”¯ä¸€çš„(æ¥è‡ªåŒä¸€ä¸ªçˆ¶èŠ‚ç‚¹çš„å…¶ä»–å­èŠ‚ç‚¹ï¼‰ã€‚å½“"
-"设置为现有å称时,节点将被自动é‡å‘½å。"
+"节点的å称。此å称在兄弟节点(æ¥è‡ªåŒä¸€çˆ¶èŠ‚ç‚¹çš„å…¶ä»–å­èŠ‚ç‚¹ï¼‰ä¸­æ˜¯å”¯ä¸€çš„ã€‚å½“è®¾ç½®"
+"为现有å称时,节点将自动é‡å‘½å。\n"
+"[b]注æ„:[/b] 自动生æˆçš„åç§°å¯èƒ½åŒ…å« [code]@[/code] 字符,在使用 [method "
+"add_child] æ—¶ä¿ç•™è¯¥å­—符用于唯一å称。手动设置å称时,将删除任何 [code]@[/"
+"code]。"
#: doc/classes/Node.xml:701
msgid ""
@@ -43478,14 +44643,14 @@ msgid ""
"Notification received every frame when the physics process flag is set (see "
"[method set_physics_process])."
msgstr ""
-"当 physics process flag 被设置时,æ¯ä¸€å¸§éƒ½ä¼šæ”¶åˆ°è¯¥é€šçŸ¥ï¼ˆè§[方法"
+"当 physics process flag 被设置时,æ¯ä¸€å¸§éƒ½ä¼šæ”¶åˆ°è¯¥é€šçŸ¥ï¼ˆè§[method "
"set_physics_process])。"
#: doc/classes/Node.xml:760
msgid ""
"Notification received every frame when the process flag is set (see [method "
"set_process])."
-msgstr "当 process flag 被设置时,æ¯ä¸€å¸§éƒ½æ”¶åˆ°é€šçŸ¥ï¼ˆè§[方法set_process])。"
+msgstr "当 process flag 被设置时,æ¯ä¸€å¸§éƒ½æ”¶åˆ°é€šçŸ¥ï¼ˆè§[method set_process])。"
#: doc/classes/Node.xml:763
msgid ""
@@ -43522,7 +44687,7 @@ msgid ""
"Notification received every frame when the internal process flag is set (see "
"[method set_process_internal])."
msgstr ""
-"当 internal process flag 被设置时,æ¯ä¸€å¸§éƒ½æ”¶åˆ°é€šçŸ¥ï¼ˆè§[方法"
+"当 internal process flag 被设置时,æ¯ä¸€å¸§éƒ½æ”¶åˆ°é€šçŸ¥ï¼ˆè§[method "
"set_process_internal])。"
#: doc/classes/Node.xml:785
@@ -43530,7 +44695,7 @@ msgid ""
"Notification received every frame when the internal physics process flag is "
"set (see [method set_physics_process_internal])."
msgstr ""
-"当 internal physics process flag 被设置时,æ¯ä¸€å¸§éƒ½ä¼šæ”¶åˆ°é€šçŸ¥ï¼ˆè§[方法"
+"当 internal physics process flag 被设置时,æ¯ä¸€å¸§éƒ½ä¼šæ”¶åˆ°é€šçŸ¥ï¼ˆè§[method "
"set_physics_process_internal])。"
#: doc/classes/Node.xml:788
@@ -43539,6 +44704,8 @@ msgid ""
"NOTIFICATION_READY] is received. Unlike the latter, it's sent every time the "
"node enters tree, instead of only once."
msgstr ""
+"在节点准备好时收到通知,就在收到[constant NOTIFICATION_READY]之å‰ã€‚与åŽè€…ä¸"
+"åŒï¼Œå®ƒæ¯æ¬¡èŠ‚ç‚¹è¿›å…¥æ ‘æ—¶éƒ½ä¼šå‘é€ï¼Œè€Œä¸æ˜¯åªå‘é€ä¸€æ¬¡ã€‚"
#: doc/classes/Node.xml:846
msgid ""
@@ -43575,7 +44742,7 @@ msgid ""
"instance changes too."
msgstr ""
"使用实例化进行å¤åˆ¶ã€‚\n"
-"å®žä¾‹ä¸ŽåŽŸä»¶ä¿æŒè”系,因此当原件å‘生å˜åŒ–时,实例也会å‘生å˜åŒ–。"
+"å®žä¾‹ä¸ŽåŽŸä»¶ä¿æŒé“¾æŽ¥ï¼Œå› æ­¤å½“原件å‘生å˜åŒ–时,实例也会å‘生å˜åŒ–。"
#: doc/classes/Node2D.xml:4
msgid ""
@@ -43609,6 +44776,9 @@ msgid ""
"[url=https://raw.githubusercontent.com/godotengine/godot-docs/master/img/"
"node2d_get_angle_to.png]Illustration of the returned angle.[/url]"
msgstr ""
+"以弧度为å•ä½è¿”回节点和 [code] point [/code] 之间的角度。\n"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/master/img/"
+"node2d_get_angle_to.png]返回的角度说明[/url]"
#: doc/classes/Node2D.xml:33
msgid "Returns the [Transform2D] relative to this node's parent."
@@ -43726,20 +44896,21 @@ msgstr ""
"点的Z索引是2,它的父节点的有效Z索引是3,那么这个节点的有效Z索引将是2+3=5。"
#: doc/classes/Node2D.xml:130
-#, fuzzy
msgid ""
"Z index. Controls the order in which the nodes render. A node with a higher "
"Z index will display in front of others. Must be between [constant "
"VisualServer.CANVAS_ITEM_Z_MIN] and [constant VisualServer."
"CANVAS_ITEM_Z_MAX] (inclusive)."
-msgstr "Z索引。控制节点的渲染顺åºã€‚具有较高Z指数的节点将显示在其他节点的å‰é¢ã€‚"
+msgstr ""
+"Z 索引。控制节点呈现的顺åºã€‚具有较高 Z 索引的节点将显示在其他节点之å‰ã€‚必须介"
+"于 [constant VisualServer.CANVAS_ITEM_Z_MIN] 和 [constant VisualServer."
+"CANVAS_ITEM_Z_MAX] 之间(å«ï¼‰ã€‚"
#: doc/classes/NodePath.xml:4
msgid "Pre-parsed scene tree path."
msgstr "预先解æžçš„场景树路径。"
#: doc/classes/NodePath.xml:7
-#, fuzzy
msgid ""
"A pre-parsed relative or absolute path in a scene tree, for use with [method "
"Node.get_node] and similar functions. It can reference a node, a resource "
@@ -43773,29 +44944,32 @@ msgid ""
"when moving, renaming or deleting a node in the scene tree, but they are "
"never updated at runtime."
msgstr ""
-"场景树中预先解æžçš„相对或ç»å¯¹è·¯å¾„,用于[method Node.get_node]和类似函数。它å¯"
-"以引用一个节点,一个节点中的资æºï¼Œæˆ–者一个节点或资æºçš„属性。例如,"
-"[code]\"Path2D/PathFollow2D/Sprite2D:texture:size\"[/code]将引用å为"
-"[code]\"Sprite2D\"[/code]的节点上的[code]texture[/code]资æºçš„[code]size[/"
-"code]属性,该节点是路径中其他指定节点的å­èŠ‚ç‚¹ã€‚\n"
-"你通常åªéœ€å°†ä¸€ä¸ªå­—符串传递给[method Node.get_node],它就会被自动转æ¢ï¼Œä½†ä½ å¶"
-"尔也会想用[NodePath]或字é¢è¯­æ³•[code]@\"path\"[/code]æå‰è§£æžä¸€ä¸ªè·¯å¾„。导出"
-"[NodePath]å˜é‡ä¼šåœ¨ç¼–è¾‘å™¨çš„å±žæ€§é¢æ¿ä¸­ç»™ä½ ä¸€ä¸ªèŠ‚ç‚¹é€‰æ‹©éƒ¨ä»¶ï¼Œè¿™é€šå¸¸å¾ˆæœ‰ç”¨ã€‚\n"
-"一个[NodePath]是由一个斜线分隔的节点å称列表(åƒä¸€ä¸ªæ–‡ä»¶ç³»ç»Ÿè·¯å¾„)和一个å¯é€‰"
-"的冒å·åˆ†éš”çš„ \"å­åç§° \"列表组æˆçš„,它å¯ä»¥æ˜¯èµ„æºæˆ–属性。\n"
-"NodePaths的一些例å­åŒ…括如下。\n"
-"[codeblock]\n"
-"# No leading slash means it is relative to the current node.\n"
-"@\"A\" # Immediate child A\n"
-"@\"A/B\" # A's child B\n"
-"@\".\" # The current node.\n"
-"@\"..\" # The parent node.\n"
-"@\"../C\" # A sibling node C.\n"
-"# A leading slash means it is absolute from the SceneTree.\n"
-"@\"/root\" # Equivalent to get_tree().get_root().\n"
-"@\"/root/Main\" # If your main scene's root node were named \"Main\".\n"
-"@\"/root/MyAutoload\" # If you have an autoloaded node or scene.\n"
-"[/codeblock]"
+"场景树中预先解æžçš„相对或ç»å¯¹è·¯å¾„,用于 [method Node.get_node] 和类似函数。它"
+"å¯ä»¥å¼•用节点ã€èŠ‚ç‚¹å†…çš„èµ„æºæˆ–节点或资æºçš„属性。例如,[code]\"Path2D/"
+"PathFollow2D/Sprite:texture:size\"[/code] 将引用å为 [code]\"Sprite\"[/code] "
+"节点上的纹ç†èµ„æº [code]texture[/code] 的尺寸 [code]size[/code] 属性,该节点是"
+"路径中其他命å节点的一个å­èŠ‚ç‚¹ã€‚\n"
+"您通常åªéœ€å°†ä¸€ä¸ªå­—符串传递给 [method Node.get_node] 并且它会自动转æ¢ï¼Œä½†æ‚¨å¯"
+"能å¶å°”希望使用 [NodePath] 或文字语法 [code]@\"path\"[/code] æå‰è§£æžè·¯å¾„。导"
+"出 [NodePath] å˜é‡å°†åœ¨ç¼–è¾‘å™¨çš„å±žæ€§é¢æ¿ä¸­ä¸ºæ‚¨æä¾›ä¸€ä¸ªèŠ‚ç‚¹é€‰æ‹©å°éƒ¨ä»¶ï¼Œè¿™é€šå¸¸å¾ˆ"
+"有用。\n"
+"[NodePath] 由斜线分隔的节点å称列表(如文件系统路径)和å¯é€‰çš„冒å·åˆ†éš”的“å­å"
+"ç§°â€åˆ—表组æˆï¼Œè¿™äº›â€œå­åç§°â€å¯ä»¥æ˜¯èµ„æºæˆ–属性。\n"
+"NodePath 的一些示例包括:\n"
+"[codeblock]\n"
+"# 没有å‰å¯¼æ–œæ è¡¨ç¤ºå®ƒæ˜¯ç›¸å¯¹äºŽå½“å‰èŠ‚ç‚¹çš„ã€‚\n"
+"@\"A\" # 直接获得å­èŠ‚ç‚¹ A\n"
+"@\"A/B\" # A çš„å­èŠ‚ç‚¹ B\n"
+"@\".\" # 当å‰èŠ‚ç‚¹ã€‚\n"
+"@\"..\" # 父节点。\n"
+"@\"../C\" # 兄弟节点 C.\n"
+"# å‰å¯¼æ–œæ è¡¨ç¤ºå®ƒæ˜¯æ¥è‡ªåœºæ™¯æ ‘çš„ç»å¯¹è·¯å¾„。\n"
+"@\"/root\" # 等价于 get_tree().get_root()。\n"
+"@\"/root/Main\" # 如果你的主场景的根节点被命å为“Mainâ€ã€‚\n"
+"@\"/root/MyAutoload\" # 如果你有一个自动加载的节点或场景。\n"
+"[/codeblock]\n"
+"[b]注æ„:[/b] 在编辑器中,[NodePath] 属性在场景树中移动ã€é‡å‘½å或删除节点时会"
+"自动更新,但它们ä¸ä¼šåœ¨è¿è¡Œæ—¶æ›´æ–°ã€‚"
#: doc/classes/NodePath.xml:26 doc/classes/PackedScene.xml:41
#: doc/classes/Panel.xml:10 doc/classes/PanelContainer.xml:10
@@ -43804,7 +44978,6 @@ msgid "https://godotengine.org/asset-library/asset/520"
msgstr "https://godotengine.org/asset-library/asset/520"
#: doc/classes/NodePath.xml:33
-#, fuzzy
msgid ""
"Creates a NodePath from a string, e.g. [code]\"Path2D/PathFollow2D/Sprite:"
"texture:size\"[/code]. A path is absolute if it starts with a slash. "
@@ -43831,26 +45004,25 @@ msgid ""
"\"/root/Level/Path2D\"\n"
"[/codeblock]"
msgstr ""
-"从字符串创建一个NodePath,例如[code]\"Path2D/PathFollow2D/Sprite2D:texture:"
-"size\"[/code]。以斜æ å¼€å¤´çš„路径是ç»å¯¹è·¯å¾„。ç»å¯¹è·¯å¾„仅在全局场景树中有效,在å•"
-"个场景中无效。在相对路径中,[code]\".\"[/code]å’Œ[code]\"..\"[/code]表示当å‰èŠ‚"
-"点åŠå…¶çˆ¶èŠ‚ç‚¹ã€‚\n"
-"å¯é€‰åœ°åŒ…å«åœ¨ç›®æ ‡èŠ‚ç‚¹è·¯å¾„ä¹‹åŽçš„“å­åç§°â€å¯ä»¥æŒ‡å‘èµ„æºæˆ–属性,也å¯ä»¥åµŒå¥—。\n"
-"有效的NodePaths示例(å‡è®¾è¿™äº›èŠ‚ç‚¹å­˜åœ¨å¹¶ä¸”æœ‰å¼•ç”¨çš„èµ„æºæˆ–属性):\n"
-"[codeblock]\n"
-"# Points to the Sprite2D node\n"
-"\"Path2D/PathFollow2D/Sprite2D\"\n"
-"# Points to the Sprite2D node and its \"texture\" resource.\n"
-"# get_node() would retrieve \"Sprite2D\", while get_node_and_resource()\n"
-"# would retrieve both the Sprite2D node and the \"texture\" resource.\n"
-"\"Path2D/PathFollow2D/Sprite2D:texture\"\n"
-"# Points to the Sprite2D node and its \"position\" property.\n"
-"\"Path2D/PathFollow2D/Sprite2D:position\"\n"
-"# Points to the Sprite2D node and the \"x\" component of its \"position\" "
-"property.\n"
-"\"Path2D/PathFollow2D/Sprite2D:position:x\"\n"
-"# Absolute path (from \"root\")\n"
-"\"/root/Level/Path2D\"\n"
+"从字符串创建一个 NodePath,例如 [code]\"Path2D/PathFollow2D/Sprite:texture:"
+"size\"[/code]。如果路径以斜æ å¼€å¤´ï¼Œåˆ™è¯¥è·¯å¾„是ç»å¯¹è·¯å¾„。ç»å¯¹è·¯å¾„仅在全局场景树"
+"中有效,在å•个场景中无效。在相对路径中,[code]\".\"[/code] å’Œ [code]\"..\"[/"
+"code] 表示当å‰èŠ‚ç‚¹åŠå…¶çˆ¶èŠ‚ç‚¹ã€‚\n"
+"目标节点路径åŽåŠ ä¸Šå¯é€‰çš„“å­åç§°â€å¯ä»¥æŒ‡å‘èµ„æºæˆ–属性,也å¯ä»¥åµŒå¥—。\n"
+"有效 NodePath 的示例(å‡è®¾è¿™äº›èŠ‚ç‚¹å­˜åœ¨å¹¶å…·æœ‰å¼•ç”¨çš„èµ„æºæˆ–属性):\n"
+"[codeblock]\n"
+"# 指å‘ç²¾çµèŠ‚ç‚¹\n"
+"“Path2D/PathFollow2D/Spriteâ€\n"
+"# æŒ‡å‘ Sprite 节点åŠå…¶â€œçº¹ç†â€èµ„æºã€‚\n"
+"# get_node() 将检索“Spriteâ€ï¼Œè€Œ get_node_and_resource()\n"
+"# å°†åŒæ—¶æ£€ç´¢ Sprite 节点和“纹ç†â€èµ„æºã€‚\n"
+"“Path2D/PathFollow2D/Sprite:textureâ€\n"
+"# æŒ‡å‘ Sprite 节点åŠå…¶â€œä½ç½®â€å±žæ€§ã€‚\n"
+"\"Path2D/PathFollow2D/Sprite:position\"\n"
+"# æŒ‡å‘ Sprite 节点åŠå…¶â€œpositionâ€å±žæ€§çš„“xâ€ç»„件。\n"
+"\"Path2D/PathFollow2D/Sprite:position:x\"\n"
+"# ç»å¯¹è·¯å¾„(æ¥è‡ªâ€œrootâ€ï¼‰\n"
+"“/root/Level/Path2Dâ€\n"
"[/codeblock]"
#: doc/classes/NodePath.xml:55
@@ -43881,7 +45053,6 @@ msgstr ""
"[/codeblock]"
#: doc/classes/NodePath.xml:68
-#, fuzzy
msgid ""
"Returns all subnames concatenated with a colon character ([code]:[/code]) as "
"separator, i.e. the right side of the first colon in a node path.\n"
@@ -43890,15 +45061,14 @@ msgid ""
"print(nodepath.get_concatenated_subnames()) # texture:load_path\n"
"[/codeblock]"
msgstr ""
-"返回所有用冒å·([code]:[/code])作为分隔符连接的å­å称,å³èŠ‚ç‚¹è·¯å¾„ä¸­ç¬¬ä¸€ä¸ªå†’å·"
-"çš„å³ä¾§ã€‚\n"
+"返回以冒å·å­—符 ([code]:[/code]) 作为分隔符连接的所有å­å称,å³èŠ‚ç‚¹è·¯å¾„ä¸­ç¬¬ä¸€"
+"个冒å·çš„å³ä¾§ã€‚\n"
"[codeblock]\n"
-"var nodepath = NodePath(\"Path2D/PathFollow2D/Sprite2D:texture:load_path\")\n"
-"print(nodepath.get_concatenated_subnames()) # texture:load_path\n"
+"var nodepath = NodePath(\"Path2D/PathFollow2D/Sprite:texture:load_path\")\n"
+"print(nodepath.get_concatenated_subnames()) #texture:load_path\n"
"[/codeblock]"
#: doc/classes/NodePath.xml:79
-#, fuzzy
msgid ""
"Gets the node name indicated by [code]idx[/code] (0 to [method "
"get_name_count]).\n"
@@ -43909,27 +45079,25 @@ msgid ""
"print(node_path.get_name(2)) # Sprite\n"
"[/codeblock]"
msgstr ""
-"获å–ç”±[code]idx[/code]表示的节点å称(0到[method get_name_count])。\n"
+"获å–ç”± [code]idx[/code](0 到 [method get_name_count])指示的节点å称。\n"
"[codeblock]\n"
-"var node_path = NodePath(\"Path2D/PathFollow2D/Sprite2D\")\n"
+"var node_path = NodePath(\"Path2D/PathFollow2D/Sprite\")\n"
"print(node_path.get_name(0)) # Path2D\n"
-"print(node_path.get_name(1)) # PathFollow2D\n"
-"print(node_path.get_name(2)) # Sprite\n"
+"print(node_path.get_name(1)) #PathFollow2D\n"
+"print(node_path.get_name(2)) #Sprite\n"
"[/codeblock]"
#: doc/classes/NodePath.xml:91
-#, fuzzy
msgid ""
"Gets the number of node names which make up the path. Subnames (see [method "
"get_subname_count]) are not included.\n"
"For example, [code]\"Path2D/PathFollow2D/Sprite\"[/code] has 3 names."
msgstr ""
-"èŽ·å–æž„æˆè·¯å¾„的节点å称的数é‡ã€‚å­å称(è§[方法get_subname_count])ä¸åŒ…括在"
-"内。\n"
-"例如,[code]\"Path2D/PathFollow2D/Sprite2D\"[/code]包å«ä¸‰ä¸ªå称。"
+"获å–组æˆè·¯å¾„的节点å称的数é‡ã€‚ä¸åŒ…括å­å称(请å‚阅 [method "
+"get_subname_count])。\n"
+"例如,[code]\"Path2D/PathFollow2D/Sprite\"[/code] 有 3 个å称。"
#: doc/classes/NodePath.xml:99
-#, fuzzy
msgid ""
"Gets the resource or property name indicated by [code]idx[/code] (0 to "
"[method get_subname_count]).\n"
@@ -43939,17 +45107,15 @@ msgid ""
"print(node_path.get_subname(1)) # load_path\n"
"[/codeblock]"
msgstr ""
-"获å–ç”±[code]idx[/code](0到[method get_subname_count]ï¼‰æŒ‡ç¤ºçš„èµ„æºæˆ–属性å"
+"获å–ç”± [code]idx[/code](0 到 [method get_subname_count]ï¼‰æŒ‡ç¤ºçš„èµ„æºæˆ–属性å"
"称。\n"
"[codeblock]\n"
-"var node_path = NodePath(\"Path2D/PathFollow2D/Sprite2D:texture:load_path"
-"\")\n"
+"var node_path = NodePath(\"Path2D/PathFollow2D/Sprite:texture:load_path\")\n"
"print(node_path.get_subname(0)) # texture\n"
"print(node_path.get_subname(1)) # load_path\n"
"[/codeblock]"
#: doc/classes/NodePath.xml:110
-#, fuzzy
msgid ""
"Gets the number of resource or property names (\"subnames\") in the path. "
"Each subname is listed after a colon character ([code]:[/code]) in the node "
@@ -43957,10 +45123,10 @@ msgid ""
"For example, [code]\"Path2D/PathFollow2D/Sprite:texture:load_path\"[/code] "
"has 2 subnames."
msgstr ""
-"获å–è·¯å¾„ä¸­çš„èµ„æºæˆ–属性å称(\"å­åç§°\")的数é‡ã€‚æ¯ä¸ªå­å称都列在节点路径中的"
-"冒å·å­—符([code]:[/code])之åŽã€‚\n"
-"例如,[code]\"Path2D/PathFollow2D/Sprite2D:texture:load_path\"[/code]包å«ä¸¤ä¸ª"
-"å­å称。"
+"获å–è·¯å¾„ä¸­èµ„æºæˆ–属性å称(“å­åç§°â€ï¼‰çš„æ•°é‡ã€‚æ¯ä¸ªå­å称都列在节点路径中的冒å·"
+"字符 ([code]:[/code]) 之åŽã€‚\n"
+"例如,[code]\"Path2D/PathFollow2D/Sprite:texture:load_path\"[/code] 有 2 个å­"
+"å称。"
#: doc/classes/NodePath.xml:117
msgid ""
@@ -43984,7 +45150,6 @@ msgid "[OpenSimplexNoise] filled texture."
msgstr "[OpenSimplexNoise]填充纹ç†ã€‚"
#: modules/opensimplex/doc_classes/NoiseTexture.xml:7
-#, fuzzy
msgid ""
"Uses an [OpenSimplexNoise] to fill the texture data. You can specify the "
"texture size but keep in mind that larger textures will take longer to "
@@ -44000,12 +45165,12 @@ msgid ""
"var image = texture.get_data()\n"
"[/codeblock]"
msgstr ""
-"使用一个[OpenSimplexNoise]æ¥å¡«å……çº¹ç†æ•°æ®ã€‚ä½ å¯ä»¥æŒ‡å®šçº¹ç†çš„大å°ï¼Œä½†è¯·è®°ä½ï¼Œæ›´"
-"大的纹ç†å°†éœ€è¦æ›´é•¿çš„æ—¶é—´æ¥ç”Ÿæˆï¼Œè€Œä¸”æ— ç¼å™ªå£°åªé€‚用于方形大å°çš„纹ç†ã€‚\n"
-"NoiseTexture也å¯ä»¥ç”Ÿæˆæ³•线图纹ç†ã€‚\n"
-"该类在内部使用[Thread]æ¥ç”Ÿæˆçº¹ç†æ•°æ®ï¼Œæ‰€ä»¥å¦‚果生æˆè¿‡ç¨‹å°šæœªå®Œæˆï¼Œ[method "
-"Texture2D.get_data]å¯èƒ½ä¼šè¿”回[code]null[/code]ã€‚åœ¨è¿™ç§æƒ…况下,你需è¦åœ¨è®¿é—®æ•°"
-"æ®ä¹‹å‰ç­‰å¾…纹ç†çš„生æˆã€‚\n"
+"使用 [OpenSimplexNoise] å¡«å……çº¹ç†æ•°æ®ã€‚您å¯ä»¥æŒ‡å®šçº¹ç†å¤§å°ï¼Œä½†è¯·è®°ä½ï¼Œè¾ƒå¤§çš„纹"
+"ç†å°†éœ€è¦æ›´é•¿çš„æ—¶é—´æ¥ç”Ÿæˆï¼Œå¹¶ä¸”æ— ç¼å™ªå£°ä»…适用于方形大å°çš„纹ç†ã€‚\n"
+"NoiseTexture 还å¯ä»¥ç”Ÿæˆæ³•线贴图纹ç†ã€‚\n"
+"该类内部使用线程 [Thread]s æ¥ç”Ÿæˆçº¹ç†æ•°æ®ï¼Œå› æ­¤å¦‚果生æˆè¿‡ç¨‹å°šæœªå®Œæˆï¼Œ[method "
+"Texture.get_data]å¯èƒ½ä¼šè¿”回空 [code]null[/code]ã€‚åœ¨è¿™ç§æƒ…况下,您需è¦åœ¨è®¿é—®æ•°"
+"æ®ä¹‹å‰ç­‰å¾…纹ç†ç”Ÿæˆï¼š\n"
"[codeblock]\n"
"var texture = preload(\"res://noise.tres\")\n"
"yield(texture, \"changed\")\n"
@@ -44042,6 +45207,8 @@ msgid ""
"of the generated noise. This value is ignored if [member seamless] is "
"enabled."
msgstr ""
+"用于指定生æˆå™ªå£°å·¦ä¸Šè§’çš„å™ªå£°ç©ºé—´åæ ‡çš„åç§»é‡ã€‚如果å¯ç”¨äº† [member seamless],"
+"则忽略此值。"
#: modules/opensimplex/doc_classes/NoiseTexture.xml:38
msgid ""
@@ -44051,18 +45218,19 @@ msgid ""
"noise. This is due to the way noise uses higher dimensions for generating "
"seamless noise."
msgstr ""
+"çº¹ç†æ˜¯å¦å¯ä»¥å¹³é“ºè€Œæ²¡æœ‰å¯è§çš„æŽ¥ç¼ã€‚ç”Ÿæˆæ— ç¼çº¹ç†éœ€è¦æ›´é•¿çš„æ—¶é—´ã€‚\n"
+"[b]注:[/b] ä¸Žéžæ— ç¼å™ªå£°ç›¸æ¯”,无ç¼å™ªå£°å…·æœ‰è¾ƒä½Žçš„对比度。这是由于噪声使用更高"
+"维度æ¥ç”Ÿæˆæ— ç¼å™ªå£°çš„æ–¹å¼ã€‚"
#: modules/opensimplex/doc_classes/NoiseTexture.xml:42
msgid "Width of the generated texture."
msgstr "生æˆçš„纹ç†çš„宽度。"
#: doc/classes/Object.xml:4
-#, fuzzy
msgid "Base class for all non-built-in types."
msgstr "所有éžå†…置类型的基类。"
#: doc/classes/Object.xml:7
-#, fuzzy
msgid ""
"Every class which is not a built-in type inherits from this class.\n"
"You can construct Objects from scripting languages, using [code]Object.new()"
@@ -44099,30 +45267,33 @@ msgid ""
"code]. This bug only applies to Object itself, not any of its descendents "
"like [Reference]."
msgstr ""
-"æ¯ä¸€ä¸ªä¸æ˜¯å†…置类型的类都会继承自这个类。\n"
-"ä½ å¯ä»¥ä»Žè„šæœ¬è¯­è¨€ä¸­æž„é€ å¯¹è±¡ï¼Œä½¿ç”¨GDScript中的[code]Object.new()[/code],C#中,"
-"使用[code]new Object[/code],或者VisualScript中的 \"Construct Object \"节"
-"点。\n"
-"对象ä¸ç®¡ç†å†…存。如果一个类继承于Object,你将ä¸å¾—䏿‰‹åŠ¨åˆ é™¤å®ƒçš„å®žä¾‹ã€‚ä¸ºæ­¤ï¼Œå¯"
-"以在你的脚本中调用[method free]方法,或者从C++中删除该实例。\n"
-"一些扩展Object的类会增加内存管ç†ã€‚这就是 [Reference] 的情况,它对引用进行计"
-"数,并在ä¸å†è¢«å¼•用时自动删除自己。[Node],å¦ä¸€ä¸ªåŸºæœ¬ç±»åž‹ï¼Œå½“从内存中释放时,"
-"会删除它的所有å­èŠ‚ç‚¹ã€‚\n"
-"对象导出属性,这主è¦å¯¹å­˜å‚¨å’Œç¼–辑有用,但在编程中其实并ä¸é‚£ä¹ˆæœ‰ç”¨ã€‚属性在"
-"[method _get_property_list]中导出,在[method _get]å’Œ[method _set]中处ç†ã€‚ç„¶"
-"而,脚本语言和C++有更简å•的方法æ¥å¯¼å‡ºå®ƒä»¬ã€‚\n"
-"在GDScript中å¯ä»¥ä½¿ç”¨[code]in[/code]直接测试属性æˆå‘˜ã€‚\n"
+"æ¯ä¸ªä¸æ˜¯å†…置类型的类都继承自这个类。\n"
+"您å¯ä»¥ä»Žè„šæœ¬è¯­è¨€æž„é€ å¯¹è±¡ï¼Œä½¿ç”¨ GDScript 中的 [code]Object.new()[/code]ã€C# 中"
+"çš„ [code]new Object[/code] 或 VisualScript 中的“构造对象â€èŠ‚ç‚¹ã€‚\n"
+"对象ä¸ç®¡ç†å†…存。如果类继承自 Object,则必须手动删除它的实例。为此,请从您的脚"
+"本中调用 [method free] 方法或从 C++ 中删除该实例。\n"
+"一些继承 Object 的类添加了内存管ç†ã€‚ [Reference] å°±æ˜¯è¿™ç§æƒ…况,它对引用进行计"
+"数,并在ä¸å†è¢«å¼•用时自动删除自己。 [Node] 是å¦ä¸€ç§åŸºæœ¬ç±»åž‹ï¼Œåœ¨ä»Žå†…存中释放时"
+"删除其所有å­èŠ‚ç‚¹ã€‚\n"
+"对象导出属性,这些属性主è¦ç”¨äºŽå­˜å‚¨å’Œç¼–è¾‘ï¼Œä½†åœ¨ç¼–ç¨‹ä¸­å¹¶ä¸æ˜¯é‚£ä¹ˆæœ‰ç”¨ã€‚属性在 "
+"[method _get_property_list] 中导出并在 [method _get] 和 [method _set] 中处"
+"ç†ã€‚然而,脚本语言和 C++ 有更简å•的方法æ¥å¯¼å‡ºå®ƒä»¬ã€‚\n"
+"在GDScript中å¯ä»¥ä½¿ç”¨ [code]in[/code] 直接测试属性æˆå‘˜ã€‚\n"
"[codeblock]\n"
"var n = Node2D.new()\n"
-"print(\"position\" in n) # Prints \"True\".\n"
-"print(\"other_property\" in n) # Prints \"False\".\n"
+"print(\"position\" in n) # æ‰“å° \"True\"。\n"
+"print(\"other_property\" in n) # æ‰“å° \"False\"。\n"
"[/codeblock]\n"
-"åªè¦é”®å­˜åœ¨ï¼Œ[code]in[/code]æ“作符就会评估为[code]true[/code],å³ä½¿å€¼ä¸º"
+"åªè¦é”®å­˜åœ¨ï¼Œ[code]in[/code] è¿ç®—符将评估为 [code]true[/code],å³ä½¿å€¼ä¸º "
"[code]null[/code]。\n"
-"对象也会收到通知。通知是一ç§ç®€å•çš„æ–¹å¼æ¥é€šçŸ¥å¯¹è±¡å…³äºŽä¸åŒçš„事件,所以它们å¯ä»¥"
-"一起被处ç†ã€‚å‚阅[method _notification]。\n"
-"[b]注æ„:[/b] 与对[引用]的引用ä¸åŒï¼Œå¯¹å­˜å‚¨åœ¨å˜é‡ä¸­çš„对象的引用å¯ä»¥åœ¨æ²¡æœ‰è­¦å‘Š"
-"的情况下å˜å¾—无效。因此,建议对数æ®ç±»ä½¿ç”¨[引用]è€Œä¸æ˜¯[对象]。"
+"对象也会收到通知。通知是一ç§å°†ä¸åŒäº‹ä»¶é€šçŸ¥ç»™å¯¹è±¡çš„ç®€å•æ–¹æ³•,因此它们å¯ä»¥ä¸€èµ·"
+"处ç†ã€‚è§ [method _notification]。\n"
+"[b]注æ„:[/b] 与对 [Reference] 的引用ä¸åŒï¼Œå¯¹å­˜å‚¨åœ¨å˜é‡ä¸­çš„对象的引用å¯èƒ½ä¼šåœ¨"
+"没有警告的情况下å˜å¾—无效。因此,建议对数æ®ç±»ä½¿ç”¨ [Reference] è€Œä¸æ˜¯ "
+"[Object]。\n"
+"[b]注æ„:[/b]由于一个错误,你ä¸èƒ½ä½¿ç”¨ [code]Object.new()[/code] 创建一个“普"
+"通â€å¯¹è±¡ã€‚请使用 [code]ClassDB.instance(\"Object\")[/code]。这个错误åªé€‚用于"
+"Objectæœ¬èº«ï¼Œè€Œä¸æ˜¯å®ƒçš„任何å­ç±»ï¼Œå¦‚[Reference]。"
#: doc/classes/Object.xml:24 doc/classes/Reference.xml:13
#: doc/classes/Resource.xml:12
@@ -44130,15 +45301,15 @@ msgid ""
"https://docs.godotengine.org/en/3.4/getting_started/workflow/best_practices/"
"node_alternatives.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/getting_started/workflow/best_practices/"
-"node_alternatives.html"
+"https://docs.godotengine.org/zh_CN/stable/getting_started/workflow/"
+"best_practices/node_alternatives.html"
#: doc/classes/Object.xml:25
msgid ""
"https://docs.godotengine.org/en/3.4/getting_started/scripting/gdscript/"
"gdscript_exports.html#advanced-exports"
msgstr ""
-"https://docs.godotengine.org/en/3.4/getting_started/scripting/gdscript/"
+"https://docs.godotengine.org/zh_CN/stable/getting_started/scripting/gdscript/"
"gdscript_exports.html#advanced-exports"
#: doc/classes/Object.xml:32
@@ -44287,7 +45458,6 @@ msgstr ""
"set_message_translation]和[method tr]。"
#: doc/classes/Object.xml:128
-#, fuzzy
msgid ""
"Connects a [code]signal[/code] to a [code]method[/code] on a [code]target[/"
"code] object. Pass optional [code]binds[/code] to the call as an [Array] of "
@@ -44320,37 +45490,36 @@ msgid ""
"level, weapon_type, damage])\n"
"[/codeblock]"
msgstr ""
-"[b]FIXME:[/b] 语法éšç€[Callable]的增加而改å˜ï¼Œè¿™åº”该被更新。\n"
-"将一个[code]signal[/code]连接到一个[code]target[/code]对象的[code]method[/"
-"code]。将å¯é€‰çš„[code]binds[/code]作为一个[Array]çš„å‚æ•°ä¼ é€’ç»™è°ƒç”¨ã€‚è¿™äº›å‚æ•°å°†"
-"在调用[method emit_signal]æ—¶ä½¿ç”¨çš„ä»»ä½•å‚æ•°ä¹‹åŽè¢«ä¼ é€’到方法中。使用"
-"[code]flags[/code]æ¥è®¾ç½®å»¶è¿Ÿæˆ–一次性连接。å‚阅[enum ConnectFlags]常é‡ã€‚\n"
-"一个[code]signal[/code]åªèƒ½è¢«è¿žæŽ¥åˆ°ä¸€ä¸ª[code]method[/code]上一次。如果已ç»è¿ž"
-"接了,它将抛出一个错误,除éžè¯¥ä¿¡å·æ˜¯ç”¨[constant CONNECT_REFERENCE_COUNTED]连"
-"接的。为了é¿å…è¿™ç§æƒ…况,首先,使用[method is_connected]æ¥æ£€æŸ¥çŽ°æœ‰çš„è¿žæŽ¥ã€‚\n"
-"如果[code]target[/code]在游æˆçš„生命周期中被破å,连接就会丢失。\n"
-"䏋颿˜¯ç¤ºä¾‹ï¼š\n"
+"å°†ä¿¡å· [code]signal[/code] 连接到目标 [code]target[/code] 对象上的方法 "
+"[code]method[/code]。将å¯é€‰çš„绑定 [code]binds[/code] 作为一个 [Array] çš„å‚æ•°"
+"ä¼ é€’ç»™è°ƒç”¨ã€‚è¿™äº›å‚æ•°å°†åœ¨è°ƒç”¨ [method emit_signal] ä¸­ä½¿ç”¨çš„ä»»ä½•å‚æ•°ä¹‹åŽä¼ é€’ç»™"
+"方法。使用 [code]flags[/code] 设置延迟或一次性连接。请å‚阅 [enum "
+"ConnectFlags] 常é‡ã€‚\n"
+"ä¸€ä¸ªä¿¡å· [code]signal[/code] 与åŒä¸€æ–¹æ³• [code]method[/code] åªèƒ½è¿žæŽ¥ä¸€æ¬¡ã€‚除"
+"éžä¹‹å‰åœ¨è¿žæŽ¥ä¿¡å·æ—¶ä½¿ç”¨äº† [constant CONNECT_REFERENCE_COUNTED],å¦åˆ™åœ¨è¿›è¡Œé‡å¤"
+"连接时会抛出错误。为é¿å…è¿™ç§æƒ…况,首先使用 [method is_connected] 检查是å¦å·²æœ‰"
+"连接。\n"
+"如果 [code]target[/code] 在游æˆç”Ÿå‘½å‘¨æœŸä¸­è¢«é”€æ¯ï¼Œè¿žæŽ¥å°†ä¸¢å¤±ã€‚\n"
+"例å­ï¼š\n"
"[codeblock]\n"
-"connect(\"pressed\", self, \"_on_Button_pressed\") # BaseButton signal\n"
-"connect(\"text_entered\", self, \"_on_LineEdit_text_entered\") # LineEdit "
-"signal\n"
-"connect(\"hit\", self, \"_on_Player_hit\", [ weapon_type, damage ]) # User-"
-"defined signal\n"
+"connect(\"pressed\", self, \"_on_Button_pressed\") # BaseButton ä¿¡å·\n"
+"connect(\"text_entered\", self, \"_on_LineEdit_text_entered\") # LineEdit ä¿¡"
+"å·\n"
+"connect(\"hit\", self, \"_on_Player_hit\", [ Weapon_type, damage ]) # 用户自"
+"定义信å·\n"
"[/codeblock]\n"
-"An example of the relationship between [code]binds[/code] passed to [method "
-"connect] and parameters used when calling [method emit_signal]:\n"
-"[codeblock]\n"
-"connect(\"hit\", self, \"_on_Player_hit\", [ weapon_type, damage ]) # "
-"weapon_type and damage are passed last\n"
-"emit_signal(\"hit\", \"Dark lord\", 5) # \"Dark lord\" and 5 are passed "
-"first\n"
-"func _on_Player_hit(hit_by, level, weapon_type, damage):\n"
-" print(\"Hit by %s (lvl %d) with weapon %s for %d damage\" % [hit_by, "
+"传递给 [method connect] 的 [code]binds[/code] 与调用 [method emit_signal] 时"
+"ä½¿ç”¨çš„å‚æ•°çš„关系示例:\n"
+"[codeblock]\n"
+"connect(\"hit\", self, \"_on_Player_hit\", [ Weapon_type, damage ]) # 武器类"
+"型和伤害最åŽä¼ é€’\n"
+"emit_signal(\"hit\", \"Dark lord\", 5) # 先传递 \"Dark lord\" 和 5\n"
+"func _on_Player_hit(hit_by, level, Weapon_type, damage):\n"
+" print(\"被 %s(等级 %d)使用武器 %s å‡»ä¸­ï¼Œé€ æˆ %d 点伤害\" % [hit_by, "
"level, weapon_type, damage])\n"
"[/codeblock]"
#: doc/classes/Object.xml:152
-#, fuzzy
msgid ""
"Disconnects a [code]signal[/code] from a [code]method[/code] on the given "
"[code]target[/code].\n"
@@ -44358,10 +45527,10 @@ msgid ""
"throw an error. Use [method is_connected] to ensure that the connection "
"exists."
msgstr ""
-"[b]FIXME:[/b] 添加了[Callable]åŽï¼Œè¯­æ³•å‘生了å˜åŒ–,应该进行更新。\n"
-"从给定的[code]target[/code]上的[code]method[/code]断开[code]signal[/code]。\n"
-"如果试图断开ä¸å­˜åœ¨çš„连接,该方法将抛出错误。使用[method is_connected]ç¡®ä¿è¿žæŽ¥"
-"存在。"
+"å°† [code] ä¿¡å· [/code] 与给定 [code] 目标 [/code] 上的 [code] 方法 [/code] æ–­"
+"开。\n"
+"如果您å°è¯•æ–­å¼€ä¸å­˜åœ¨çš„连接,该方法将引å‘错误。使用 [method is_connected] ç¡®ä¿"
+"连接存在。"
#: doc/classes/Object.xml:160
msgid ""
@@ -44393,6 +45562,12 @@ msgid ""
"validate it with [method @GDScript.is_instance_valid] before attempting to "
"call its methods or access its properties."
msgstr ""
+"ç«‹å³ä»Žå†…存中删除对象。对于 [Node],您å¯èƒ½å¸Œæœ›ä½¿ç”¨ [method Node.queue_free] å°†"
+"节点排队以在当å‰å¸§çš„æœ«å°¾å®‰å…¨åˆ é™¤ã€‚\n"
+"[b]é‡è¦æç¤ºï¼š[/b] 如果你有一个指å‘一个对象的å˜é‡ï¼Œä¸€æ—¦å¯¹è±¡è¢«é‡Šæ”¾ï¼Œå®ƒå°† [i]ä¸"
+"会[/i] 分é…为 [code]null[/code]。相å,它会指å‘一个 [i] å…ˆå‰é‡Šæ”¾çš„实例 [/i],"
+"您应该在å°è¯•调用其方法或访问其属性之å‰ä½¿ç”¨ [method @GDScript."
+"is_instance_valid] 对其进行验è¯ã€‚"
#: doc/classes/Object.xml:178
msgid ""
@@ -44416,6 +45591,9 @@ msgid ""
"declarations into account. If the object has a [code]class_name[/code] "
"defined, the base class name will be returned instead."
msgstr ""
+"返回对象的类型为一个[String]。å‚è§[method is_class]。\n"
+"[b]注æ„:[/b] [method get_class] ä¸è€ƒè™‘[code]class_name[/code]的声明。如果对"
+"象有一个[code]class_name[/code]的定义,基类å称将被返回。"
#: doc/classes/Object.xml:192
msgid ""
@@ -44459,9 +45637,8 @@ msgid "Returns the object's metadata entry for the given [code]name[/code]."
msgstr "返回给定[code]name[/code]çš„å¯¹è±¡çš„å…ƒæ•°æ®æ¡ç›®ã€‚"
#: doc/classes/Object.xml:223
-#, fuzzy
msgid "Returns the object's metadata as a [PoolStringArray]."
-msgstr "将对象的元数æ®ä½œä¸ºä¸€ä¸ª[PackedStringArray]返回。"
+msgstr "将对象的元数æ®ä½œä¸º [PoolStringArray] 返回。"
#: doc/classes/Object.xml:229
msgid "Returns the object's methods and their signatures as an [Array]."
@@ -44534,16 +45711,19 @@ msgid ""
"declarations into account. If the object has a [code]class_name[/code] "
"defined, [method is_class] will return [code]false[/code] for that name."
msgstr ""
+"如果对象从给定的 [code] class [/code] 中继承,则返回 [code] true [/code]。å¦"
+"请å‚阅 [method get_class]。\n"
+"[b]注:[/b] [method is_class] 没有考虑 [code] class_name [/code] 声明。如果对"
+"象有 [code]class_name [/code] 定义,[method is_class] 将为该å称返回 [code] "
+"false[/code] 。"
#: doc/classes/Object.xml:306
-#, fuzzy
msgid ""
"Returns [code]true[/code] if a connection exists for a given [code]signal[/"
"code], [code]target[/code], and [code]method[/code]."
msgstr ""
-"[b]FIXME:[/b] 语法éšç€[Callable]的增加而改å˜ï¼Œè¿™åº”该被更新。\n"
-"如果给定的[code]signal[/code]ã€[code]target[/code]å’Œ[code]method[/code]存在一"
-"个连接,返回[code]true[/code]。"
+"如果给定 [code] ä¿¡å· [/code]ã€[code] 目标 [/code] å’Œ [code] 方法 [/code] 存在"
+"连接,则返回 [code]true[/code]。"
#: doc/classes/Object.xml:312
msgid ""
@@ -44579,10 +45759,9 @@ msgstr ""
"任何作用。"
#: doc/classes/Object.xml:334
-#, fuzzy
msgid ""
"Removes a given entry from the object's metadata. See also [method set_meta]."
-msgstr "从对象的元数æ®ä¸­åˆ é™¤ä¸€ä¸ªç»™å®šçš„æ¡ç›®ã€‚"
+msgstr "从对象的元数æ®ä¸­åˆ é™¤ç»™å®šæ¡ç›®ã€‚å¦è§ [method set_meta]。"
#: doc/classes/Object.xml:342
msgid ""
@@ -44654,6 +45833,11 @@ msgid ""
"code]. This means you can also use [code]set_meta(\"name\", null)[/code] to "
"remove metadata for [code]\"name\"[/code]."
msgstr ""
+"æ·»åŠ ã€æ›´æ”¹æˆ–删除对象元数æ®ä¸­çš„给定æ¡ç›®ã€‚元数æ®è¢«åºåˆ—化并且å¯ä»¥é‡‡ç”¨ä»»ä½• "
+"[Variant] 值。\n"
+"è¦ä»Žå¯¹è±¡çš„元数æ®ä¸­åˆ é™¤ç»™å®šæ¡ç›®ï¼Œè¯·ä½¿ç”¨ [method remove_meta]。如果元数æ®çš„值设"
+"置为 [code]null[/code],也会删除元数æ®ã€‚è¿™æ„å‘³ç€æ‚¨è¿˜å¯ä»¥ä½¿ç”¨ "
+"[code]set_meta(\"name\", null)[/code] 删除 [code]\"name\"[/code] 的元数æ®ã€‚"
#: doc/classes/Object.xml:395
msgid ""
@@ -44687,8 +45871,8 @@ msgid ""
"set_message_translation]."
msgstr ""
"使用在“项目设置â€ä¸­é…置的翻译目录翻译消æ¯ã€‚\n"
-"åªæœ‰åœ¨å¯ç”¨æ¶ˆæ¯ç¿»è¯‘(默认情况下)æ—¶æ‰æœ‰æ•ˆï¼Œå¦åˆ™è¿”回ä¸å˜çš„[code]消æ¯[/code]。"
-"set_message_translation[方法]。"
+"仅在å¯ç”¨æ¶ˆæ¯ç¿»è¯‘时(默认如此)有效,å¦åˆ™è¿”回未修改的 [code]message[/code]。å‚"
+"阅 [method set_message_translation]。"
#: doc/classes/Object.xml:418
msgid "Emitted whenever the object's script is changed."
@@ -44729,7 +45913,7 @@ msgstr ""
#: doc/classes/Occluder.xml:4
msgid "Allows [OccluderShape]s to be used for occlusion culling."
-msgstr ""
+msgstr "å…许使用[OccluderShape]æ¥è¿›è¡Œé®æŒ¡å‰”除。"
#: doc/classes/Occluder.xml:7
msgid ""
@@ -44754,6 +45938,19 @@ msgid ""
"placed in rooms (based on their origin), and can block portals (and thus "
"entire rooms) as well as objects from rendering."
msgstr ""
+"放置在场景中的 [Occluder] 鮿Œ¡å™¨å°†è‡ªåŠ¨å‰”é™¤è¢«é®æŒ¡å™¨éšè—的对象。这å¯ä»¥é€šè¿‡å‡å°‘"
+"ç»˜åˆ¶çš„å¯¹è±¡æ•°é‡æ¥æé«˜æ€§èƒ½ã€‚\n"
+"[Occluder] 是完全动æ€çš„,您å¯ä»¥éšæ„移动它们。例如,这æ„å‘³ç€æ‚¨å¯ä»¥åœ¨ç§»åŠ¨çš„å®‡å®™"
+"é£žèˆ¹ä¸Šæ”¾ç½®é®æŒ¡ç‰©ï¼Œå¹¶è®©å®ƒåœ¨é£žè¿‡æ—¶é®æŒ¡ç‰©ä½“。\n"
+"您å¯ä»¥åœ¨ä¸€ä¸ªåœºæ™¯ä¸­æ”¾ç½®å¤§é‡ [Occluder]ã€‚ç”±äºŽå‰”é™¤æ•°ç™¾ä¸ªé®æŒ¡ç‰©ä¼šé€‚å¾—å…¶å,系统将"
+"æ ¹æ®å±å¹•ç©ºé—´æŒ‡æ ‡è‡ªåŠ¨é€‰æ‹©è¿™äº›é®æŒ¡ç‰©åœ¨ä»»ä½•ç»™å®šå¸§æœŸé—´ä¸»åŠ¨ä½¿ç”¨ã€‚è¾ƒå¤§çš„é®æŒ¡ç‰©ä»¥åŠ"
+"é è¿‘ç›¸æœºçš„é®æŒ¡ç‰©å—到é’ç。请注æ„,就å±å¹•空间而言,é è¿‘相机的å°é®æŒ¡ç‰©å¯èƒ½æ¯”远"
+"å¤„çš„å¤§é®æŒ¡ç‰©æ›´å¥½ã€‚\n"
+"鮿Œ¡å›¾å…ƒçš„类型由您添加到 [Occluder] çš„ [OccluderShape] 决定。æŸäº› "
+"[OccluderShape] å¯èƒ½å…许在å•个节点中有多个图元,以æé«˜æ•ˆçŽ‡ã€‚\n"
+"尽管 [Occluder] 在一般用途中工作,但与门户系统结åˆä½¿ç”¨æ—¶ï¼Œå®ƒä»¬ä¹Ÿä¼šå˜å¾—更加强"
+"å¤§ã€‚é®æŒ¡ç‰©æ”¾ç½®åœ¨æˆ¿é—´ä¸­ï¼ˆåŸºäºŽå®ƒä»¬çš„原点),并且å¯ä»¥é˜»æŒ¡é—¨æˆ·ï¼ˆä»¥åŠæ•´ä¸ªæˆ¿é—´ï¼‰ä»¥"
+"åŠæ¸²æŸ“对象。"
#: doc/classes/OccluderPolygon2D.xml:4
msgid "Defines a 2D polygon for LightOccluder2D."
@@ -44805,15 +46002,15 @@ msgstr "按逆时针方å‘进行剔除。å‚阅[member cull_mode]。"
#: doc/classes/OccluderShape.xml:4
msgid ""
"Base class for shapes used for occlusion culling by the [Occluder] node."
-msgstr ""
+msgstr "用于[Occluder]èŠ‚ç‚¹è¿›è¡Œé®æŒ¡å‰”除的形状的基类。"
#: doc/classes/OccluderShape.xml:7
msgid "[Occluder]s can use any primitive shape derived from [OccluderShape]."
-msgstr ""
+msgstr "[Occluder] å¯ä»¥ä½¿ç”¨ä»Ž [OccluderShape] 派生的任何原始形状。"
#: doc/classes/OccluderShapeSphere.xml:4
msgid "Spherical occlusion primitive for use with the [Occluder] node."
-msgstr ""
+msgstr "与 [Occluder] 节点一起使用的çƒå½¢é®æŒ¡åŸºæœ¬å•元。"
#: doc/classes/OccluderShapeSphere.xml:7
msgid ""
@@ -44824,16 +46021,18 @@ msgid ""
"sphere positions can be set by dragging the handle in the Editor viewport. "
"The radius can be set with the smaller handle."
msgstr ""
+"[OccluderShape] 是 [Occluder] 节点使用的资æºï¼Œå…è®¸å‡ ä½•é®æŒ¡å‰”除。\n"
+"è¿™ç§å½¢çжå¯ä»¥åŒ…括多个çƒä½“。这些å¯ä»¥åœ¨ç¼–辑器检查器中或通过调用 "
+"[code]set_spheres[/code] æ¥åˆ›å»ºå’Œåˆ é™¤ã€‚å¯ä»¥é€šè¿‡åœ¨ç¼–辑器视å£ä¸­æ‹–动手柄æ¥è®¾ç½®çƒ"
+"体ä½ç½®ã€‚å¯ä»¥ä½¿ç”¨è¾ƒå°çš„æ‰‹æŸ„设置åŠå¾„。"
#: doc/classes/OccluderShapeSphere.xml:18
-#, fuzzy
msgid "Sets an individual sphere's position."
-msgstr "在[member collision_mask]上设置独立åƒç´ ã€‚"
+msgstr "设置å•个çƒä½“çš„ä½ç½®ã€‚"
#: doc/classes/OccluderShapeSphere.xml:26
-#, fuzzy
msgid "Sets an individual sphere's radius."
-msgstr "返回图层蒙版上的å•个ä½ã€‚"
+msgstr "设置å•个çƒä½“çš„åŠå¾„。"
#: doc/classes/OccluderShapeSphere.xml:32
msgid ""
@@ -44841,6 +46040,8 @@ msgid ""
"each sphere is stored in the [code]normal[/code], and the radius is stored "
"in the [code]d[/code] value of the plane."
msgstr ""
+"çƒä½“æ•°æ®å¯ä»¥ä½œä¸º [Plane] 数组访问。æ¯ä¸ªçƒä½“çš„ä½ç½®å­˜å‚¨åœ¨[code]normal[/code]"
+"中,åŠå¾„存储在平é¢çš„[code]d[/code]值中。"
#: doc/classes/OmniLight.xml:4
msgid "Omnidirectional light, such as a light bulb or a candle."
@@ -44859,6 +46060,13 @@ msgid ""
"lights per mesh, you can increase [member ProjectSettings.rendering/limits/"
"rendering/max_lights_per_object] at the cost of shader compilation times."
msgstr ""
+"å…¨å‘光是一ç§å‘所有方å‘å‘光的[Light]。光会因è·ç¦»è€Œè¡°å‡ï¼Œå¹¶ä¸”å¯ä»¥é€šè¿‡æ›´æ”¹å…¶èƒ½"
+"é‡ã€åŠå¾„和衰å‡å‚æ•°æ¥é…置这ç§è¡°å‡ã€‚\n"
+"[b]注æ„:[/b] é»˜è®¤æƒ…å†µä¸‹ï¼Œåªæœ‰ 32 个 OmniLight å¯ä»¥åŒæ—¶å½±å“å•个网格 [i] "
+"resource [/i](资æº)ã€‚è€ƒè™‘å°†å…³å¡æ‹†åˆ†ä¸ºå¤šä¸ªç½‘格,以é™ä½Žè¶…过 32 个ç¯å…‰å½±å“åŒä¸€ç½‘"
+"格资æºçš„å¯èƒ½æ€§ã€‚拆分水平网格也将æé«˜è§†é”¥ä½“剔除效果,从而æé«˜æ€§èƒ½ã€‚如果您需è¦"
+"为æ¯ä¸ªç½‘格使用更多ç¯å…‰ï¼Œæ‚¨å¯ä»¥ä»¥ç€è‰²å™¨ç¼–译时间为代价增加 [member "
+"ProjectSettings.rendering/limits/rendering/max_lights_per_object]。"
#: doc/classes/OmniLight.xml:17
msgid ""
@@ -44902,11 +46110,11 @@ msgstr ""
#: doc/classes/OmniLight.xml:37
msgid "Use more detail vertically when computing the shadow."
-msgstr ""
+msgstr "在计算阴影时,垂直方å‘上使用更多的细节。"
#: doc/classes/OmniLight.xml:40
msgid "Use more detail horizontally when computing the shadow."
-msgstr ""
+msgstr "在计算阴影时,在水平方å‘上使用更多的细节。"
#: modules/opensimplex/doc_classes/OpenSimplexNoise.xml:4
msgid "Noise generator based on Open Simplex."
@@ -44959,6 +46167,9 @@ msgid ""
"value is used as the coordinates of the top-left corner of the generated "
"noise."
msgstr ""
+"æ ¹æ®å½“å‰çš„å™ªå£°å‚æ•°ï¼Œç”Ÿæˆä¸€ä¸ª[constant Image.FORMAT_L8]æ ¼å¼çš„噪声图åƒï¼Œéœ€è¦æŒ‡"
+"定其[code]width[/code] 和 [code]height[/code]。如果指定了[code]noise_offset[/"
+"code],那么å移值将作为生æˆçš„å™ªå£°å·¦ä¸Šè§’çš„åæ ‡ã€‚"
#: modules/opensimplex/doc_classes/OpenSimplexNoise.xml:40
msgid ""
@@ -44985,7 +46196,6 @@ msgid "Returns the 4D noise value [code][-1,1][/code] at the given position."
msgstr "返回指定ä½ç½®çš„4D噪声值[code][-1,1][/code]。"
#: modules/opensimplex/doc_classes/OpenSimplexNoise.xml:89
-#, fuzzy
msgid ""
"Generate a tileable noise image in [constant Image.FORMAT_L8] format, based "
"on the current noise parameters. Generated seamless images are always square "
@@ -44994,8 +46204,10 @@ msgid ""
"noise. This is due to the way noise uses higher dimensions for generating "
"seamless noise."
msgstr ""
-"æ ¹æ®å½“å‰çš„å™ªå£°å‚æ•°ï¼Œç”Ÿæˆä¸€ä¸ªå¯å¹³é“ºçš„噪声图åƒã€‚生æˆçš„æ— ç¼å›¾åƒæ€»æ˜¯æ–¹å½¢çš„"
-"([code]size[/code] × [code]size[/code])。"
+"æ ¹æ®å½“å‰çš„å™ªå£°å‚æ•°ï¼Œä»¥ [constant Image.FORMAT_L8] æ ¼å¼ç”Ÿæˆå¯å¹³é“ºå™ªå£°å›¾åƒã€‚生"
+"æˆçš„æ— ç¼å›¾åƒå§‹ç»ˆæ˜¯æ–¹å½¢çš„([code]size[/code]× [code] size [/code])。\n"
+"[b]注æ„:[/b] ä¸Žéžæ— ç¼å™ªå£°ç›¸æ¯”,无ç¼å™ªå£°çš„对比度较低。。这是由于噪声使用更高"
+"维度æ¥ç”Ÿæˆæ— ç¼å™ªå£°çš„æ–¹å¼ã€‚"
#: modules/opensimplex/doc_classes/OpenSimplexNoise.xml:96
msgid "Difference in period between [member octaves]."
@@ -45039,7 +46251,6 @@ msgid "Button control that provides selectable options when pressed."
msgstr "按下时æä¾›å¯é€‰é€‰é¡¹çš„æŒ‰é’®æŽ§ä»¶ã€‚"
#: doc/classes/OptionButton.xml:7
-#, fuzzy
msgid ""
"OptionButton is a type button that provides a selectable list of items when "
"pressed. The item selected becomes the \"current\" item and is displayed as "
@@ -45047,8 +46258,9 @@ msgid ""
"See also [BaseButton] which contains common properties and methods "
"associated with this node."
msgstr ""
-"OptionButton是一个类型按钮,当按下时æä¾›å¯é€‰æ‹©çš„项目列表。选中的项目将æˆä¸ºâ€œå½“"
-"å‰â€é¡¹ç›®ï¼Œå¹¶æ˜¾ç¤ºä¸ºæŒ‰é’®æ–‡æœ¬ã€‚"
+"OptionButton 是一ç§ç±»åž‹æŒ‰é’®ï¼Œå¯åœ¨æŒ‰ä¸‹æ—¶æä¾›å¯é€‰æ‹©çš„项目列表。所选项目æˆä¸ºâ€œå½“"
+"å‰â€é¡¹ç›®å¹¶æ˜¾ç¤ºä¸ºæŒ‰é’®æ–‡æœ¬ã€‚\n"
+"å¦è¯·å‚阅 [BaseButton],其中包å«ä¸Žæ­¤èŠ‚ç‚¹å…³è”的通用属性和方法。"
#: doc/classes/OptionButton.xml:19
msgid ""
@@ -45174,14 +46386,13 @@ msgid ""
msgstr "当å‰é€‰å®šé¡¹çš„索引,如果没有选定项,则为[code]-1[/code]。"
#: doc/classes/OptionButton.xml:177
-#, fuzzy
msgid ""
"Emitted when the user navigates to an item using the [code]ui_up[/code] or "
"[code]ui_down[/code] actions. The index of the item selected is passed as "
"argument."
msgstr ""
-"当用户使用[code]ui_up[/code]或[code]ui_down[/code]æ“作导航到一个项目时触å‘。"
-"æ‰€é€‰é¡¹ç›®çš„ç´¢å¼•ä½œä¸ºå‚æ•°ä¼ é€’。"
+"当用户使用 [code]ui_up[/code] 或 [code]ui_down[/code] æ“作导航到一个项目时å‘"
+"å‡ºã€‚æ‰€é€‰é¡¹ç›®çš„ç´¢å¼•ä½œä¸ºå‚æ•°ä¼ é€’。"
#: doc/classes/OptionButton.xml:183
msgid ""
@@ -45224,26 +46435,35 @@ msgid "Text [Color] used when the [OptionButton] is disabled."
msgstr "当[OptionButton]被ç¦ç”¨æ—¶ä½¿ç”¨çš„æ–‡æœ¬[Color]。"
#: doc/classes/OptionButton.xml:212
+msgid ""
+"Text [Color] used when the [OptionButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+"当[OptionButton]获得焦点时使用的文本[Color]ã€‚åªæ›¿æ¢æŒ‰é’®çš„æ­£å¸¸æ–‡æœ¬é¢œè‰²ã€‚ç¦ç”¨ã€"
+"悬åœå’ŒæŒ‰ä¸‹çжæ€ä¼˜å…ˆäºŽè¿™ä¸ªé¢œè‰²ã€‚"
+
+#: doc/classes/OptionButton.xml:215
msgid "Text [Color] used when the [OptionButton] is being hovered."
msgstr "当鼠标悬åœ[OptionButton]时使用的文本[Color]。"
-#: doc/classes/OptionButton.xml:215
+#: doc/classes/OptionButton.xml:218
msgid "Text [Color] used when the [OptionButton] is being pressed."
msgstr "当[OptionButton]被按下时使用的文本[Color]。"
-#: doc/classes/OptionButton.xml:218
+#: doc/classes/OptionButton.xml:221
msgid "[StyleBox] used when the [OptionButton] is being hovered."
msgstr "当[OptionButton]è¢«é¼ æ ‡æ‚¬åœæ—¶ä½¿ç”¨çš„[StyleBox]。"
-#: doc/classes/OptionButton.xml:221
+#: doc/classes/OptionButton.xml:224
msgid "The horizontal space between [OptionButton]'s icon and text."
msgstr "[OptionButton]图标与文本之间的水平间è·ã€‚"
-#: doc/classes/OptionButton.xml:224
+#: doc/classes/OptionButton.xml:227
msgid "Default [StyleBox] for the [OptionButton]."
msgstr "[OptionButton]的默认[StyleBox]。"
-#: doc/classes/OptionButton.xml:227
+#: doc/classes/OptionButton.xml:230
msgid "[StyleBox] used when the [OptionButton] is being pressed."
msgstr "当按下[OptionButton]时使用的[StyleBox]。"
@@ -45266,11 +46486,11 @@ msgid ""
"Displays a modal dialog box using the host OS' facilities. Execution is "
"blocked until the dialog is closed."
msgstr ""
+"使用主机æ“作系统显示一个模å¼åŒ–çš„å¯¹è¯æ¡†ã€‚æ‰§è¡Œå°†è¢«é˜»å¡žï¼Œç›´åˆ°è¯¥å¯¹è¯æ¡†è¢«å…³é—­ã€‚"
#: doc/classes/OS.xml:24
-#, fuzzy
msgid "Returns [code]true[/code] if the host OS allows drawing."
-msgstr "如果字体有边框,返回[code]true[/code]。"
+msgstr "如果主机æ“作系统å…许绘制,则返回 [code]true[/code]。"
#: doc/classes/OS.xml:30
msgid ""
@@ -45279,9 +46499,8 @@ msgid ""
msgstr "如果当å‰ä¸»æœºå¹³å°ä½¿ç”¨å¤šä¸ªçº¿ç¨‹ï¼Œåˆ™è¿”回[code]true[/code]。"
#: doc/classes/OS.xml:36
-#, fuzzy
msgid "Centers the window on the screen if in windowed mode."
-msgstr "设置指定节点的ä½ç½®ã€‚"
+msgstr "å¦‚æžœå¤„äºŽçª—å£æ¨¡å¼ï¼Œåˆ™ä½¿çª—å£åœ¨å±å¹•上居中。"
#: doc/classes/OS.xml:42
msgid ""
@@ -45310,6 +46529,18 @@ msgid ""
"the project if it is currently running (since the project is an independent "
"child process)."
msgstr ""
+"将当å‰çº¿ç¨‹çš„æ‰§è¡Œå»¶è¿Ÿ [code]msec[/code] 毫秒。 [code]msec[/code] 必须大于或等"
+"于 [code]0[/code]。å¦åˆ™ï¼Œ [method delay_msec] 将䏿‰§è¡Œä»»ä½•æ“作并打å°é”™è¯¯æ¶ˆ"
+"æ¯ã€‚\n"
+"[b]注:[/b] [method delay_msec]是一ç§[i]阻塞[/i]å»¶è¿Ÿä»£ç æ‰§è¡Œçš„æ–¹å¼ã€‚è¦ä»¥éžé˜»"
+"塞方å¼å»¶è¿Ÿä»£ç æ‰§è¡Œï¼Œè¯·å‚阅 [method SceneTree.create_timer]。使用 [method "
+"SceneTree.create_timer] 生æˆå°†å»¶è¿Ÿä½äºŽ [code]yield[/code] 下方的代ç çš„æ‰§è¡Œï¼Œ"
+"而ä¸ä¼šå½±å“项目的其余部分(或编辑器,例如 [EditorPlugin] å’Œ "
+"[EditorScript])。\n"
+"[b]注æ„:[/b]当在主线程上调用[method delay_msec]æ—¶ï¼Œå®ƒä¼šå†»ç»“é¡¹ç›®å¹¶é˜»æ­¢å®ƒé‡æ–°"
+"绘制和注册输入,直到延迟结æŸã€‚当使用 [method delay_msec] 作为 [EditorPlugin] "
+"或 [EditorScript] 的一部分时,它会冻结编辑器但ä¸ä¼šå†»ç»“当剿­£åœ¨è¿è¡Œçš„项目(因"
+"为项目是一个独立的å­è¿›ç¨‹ï¼‰ã€‚"
#: doc/classes/OS.xml:59
msgid ""
@@ -45330,6 +46561,18 @@ msgid ""
"the project if it is currently running (since the project is an independent "
"child process)."
msgstr ""
+"将当å‰çº¿ç¨‹çš„æ‰§è¡Œå»¶è¿Ÿ [code]usec[/code] 微秒。 [code]usec[/code] 必须大于或等"
+"于 [code]0[/code]。å¦åˆ™ï¼Œ [method delay_usec] 将什么也ä¸åšï¼Œå¹¶ä¼šæ‰“å°é”™è¯¯æ¶ˆ"
+"æ¯ã€‚\n"
+"[b]注:[/b] [method delay_usec]是一ç§[i]阻塞[/i]å»¶è¿Ÿä»£ç æ‰§è¡Œçš„æ–¹å¼ã€‚è¦ä»¥éžé˜»"
+"塞方å¼å»¶è¿Ÿä»£ç æ‰§è¡Œï¼Œè¯·å‚阅 [method SceneTree.create_timer]。使用 [method "
+"SceneTree.create_timer] 生æˆå°†å»¶è¿Ÿä½äºŽ [code]yield[/code] 下方的代ç çš„æ‰§è¡Œï¼Œ"
+"而ä¸ä¼šå½±å“项目的其余部分(或编辑器,例如 [EditorPlugin] å’Œ "
+"[EditorScript])。\n"
+"[b]注æ„:[/b]当在主线程上调用[method delay_usec]时,它会冻结项目并阻止它é‡ç»˜"
+"和注册输入,直到延迟结æŸã€‚当使用 [method delay_usec] 作为 [EditorPlugin] 或 "
+"[EditorScript] 的一部分时,它会冻结编辑器但ä¸ä¼šå†»ç»“当剿­£åœ¨è¿è¡Œçš„项目(因为项"
+"目是一个独立的å­è¿›ç¨‹ï¼‰ã€‚"
#: doc/classes/OS.xml:68
msgid ""
@@ -45425,19 +46668,16 @@ msgstr ""
"[b]注:[/b]此方法仅在Android, iOS, Linux, macOS和Windows上实现。"
#: doc/classes/OS.xml:115
-#, fuzzy
msgid "Returns the scancode of the given string (e.g. \"Escape\")."
-msgstr "返回给定字符串的键ç (例如:“Escapeâ€)。"
+msgstr "返回给定字符串的扫æç ï¼ˆä¾‹å¦‚“Escapeâ€ï¼‰ã€‚"
#: doc/classes/OS.xml:121
-#, fuzzy
msgid "Returns the total number of available audio drivers."
-msgstr "返回[Mesh]中顶点的总数。"
+msgstr "返回å¯ç”¨éŸ³é¢‘驱动程åºçš„æ€»æ•°ã€‚"
#: doc/classes/OS.xml:128
-#, fuzzy
msgid "Returns the audio driver name for the given index."
-msgstr "返回给定索引处的顶点。"
+msgstr "返回给定索引的音频驱动程åºå称。"
#: doc/classes/OS.xml:134
msgid ""
@@ -45451,9 +46691,15 @@ msgid ""
"Not to be confused with [method get_user_data_dir], which returns the "
"[i]project-specific[/i] user data path."
msgstr ""
+"æ ¹æ®æ“作系统的标准返回[i]全局[/i]缓存数æ®ç›®å½•。在桌é¢å¹³å°ä¸Šï¼Œå¯ä»¥é€šè¿‡åœ¨å¯åЍ项"
+"目之å‰è®¾ç½® [code]XDG_CACHE_HOME[/code] 环境å˜é‡æ¥è¦†ç›–此路径。有关更多信æ¯ï¼Œè¯·"
+"å‚阅文档中的 [url=https://docs.godotengine.org/zh_CN/latest/tutorials/io/"
+"data_paths.html]Godot 项目中的文件路径[/url]。å¦è¯·å‚阅 [method "
+"get_config_dir] 和 [method get_data_dir]。\n"
+"ä¸è¦ä¸Ž [method get_user_data_dir] 混淆,åŽè€…返回 [i] 项目特定的 [/i] 用户数æ®"
+"路径。"
#: doc/classes/OS.xml:141
-#, fuzzy
msgid ""
"Returns the command-line arguments passed to the engine.\n"
"Command-line arguments can be written in any form, including both [code]--"
@@ -45475,14 +46721,14 @@ msgid ""
"[/codeblock]"
msgstr ""
"è¿”å›žä¼ é€’ç»™å¼•æ“Žçš„å‘½ä»¤è¡Œå‚æ•°ã€‚\n"
-"å‘½ä»¤è¡Œå‚æ•°å¯ä»¥ä»¥ä»»ä½•å½¢å¼ç¼–写,包括[code]--key value[/code]å’Œ[code]--"
-"key=value[/code]å½¢å¼ï¼Œä»¥ä¾¿æ­£ç¡®è§£æžå®ƒä»¬ï¼Œåªè¦è‡ªå®šä¹‰å‘½ä»¤è¡Œå‚æ•°ä¸ä¸Žå¼•æ“Žå‚æ•°å†²"
-"çªã€‚\n"
-"您还å¯ä»¥ä½¿ç”¨[method get_environment]方法åˆå¹¶çŽ¯å¢ƒå˜é‡ã€‚\n"
-"您å¯ä»¥åœ¨é¡¹ç›®è®¾ç½®ä¸­è®¾ç½®[code]editor/main_run_args[/code],以定义在è¿è¡Œé¡¹ç›®æ—¶ç”±"
-"ç¼–è¾‘å™¨ä¼ é€’çš„å‘½ä»¤è¡Œå‚æ•°ã€‚\n"
-"䏋颿˜¯ä¸€ä¸ªå…³äºŽå¦‚何使用[code]--key=value[/code]å½¢å¼å°†å‘½ä»¤è¡Œå‚æ•°è§£æžä¸ºå­—典的最"
-"å°ç¤ºä¾‹:\n"
+"å‘½ä»¤è¡Œå‚æ•°å¯ä»¥ä»¥ä»»ä½•å½¢å¼å†™å…¥ï¼ŒåŒ…括[code]--key value[/code]å’Œ[code]--"
+"key=value[/code]两ç§å½¢å¼ï¼Œå‡å¯ä»¥æ­£ç¡®è§£æžï¼Œåªè¦è‡ªå®šä¹‰çš„å‘½ä»¤è¡Œå‚æ•°ä¸ä¸Žå¼•æ“Žå‚æ•°"
+"冲çªã€‚\n"
+"你也å¯ä»¥ä½¿ç”¨[method get_environment]方法包å«çŽ¯å¢ƒå˜é‡ã€‚\n"
+"ä½ å¯ä»¥è®¾ç½®[member ProjectSettings.editor/main_run_args]æ¥å®šä¹‰å‘½ä»¤è¡Œå‚数,以便"
+"在è¿è¡Œé¡¹ç›®æ—¶ç”±ç¼–辑器传递。\n"
+"䏋颿˜¯ä¸€ä¸ªå°çš„例å­ï¼Œè¯´æ˜Žå¦‚ä½•ä½¿ç”¨å‚æ•°çš„[code]--key=value[/code]å½¢å¼å°†å‘½ä»¤è¡Œå‚"
+"æ•°è§£æžæˆä¸€ä¸ªå­—典。\n"
"[codeblock]\n"
"var arguments = {}\n"
"for argument in OS.get_cmdline_args():\n"
@@ -45503,6 +46749,12 @@ msgid ""
"Not to be confused with [method get_user_data_dir], which returns the "
"[i]project-specific[/i] user data path."
msgstr ""
+"æ ¹æ®æ“作系统的标准,返回[i]全局[/i]用户é…置目录。在桌é¢å¹³å°ä¸Šï¼Œè¿™ä¸ªè·¯å¾„å¯ä»¥åœ¨"
+"å¯åŠ¨é¡¹ç›®å‰é€šè¿‡è®¾ç½®[code]XDG_CONFIG_HOME[/code]环境å˜é‡æ¥è¦†ç›–。更多信æ¯è¯·å‚è§"
+"文档中[url=https://docs.godotengine.org/zh_CN/latest/tutorials/io/data_paths."
+"html]Godot项目中的文件路径[/url]。也请å‚è§ [method get_cache_dir] å’Œ [method "
+"get_data_dir]。\n"
+"ä¸è¦ä¸Ž[method get_user_data_dir]混淆,åŽè€…返回[i]项目专用[/i]用户数æ®è·¯å¾„。"
#: doc/classes/OS.xml:165
msgid ""
@@ -45517,11 +46769,10 @@ msgstr ""
"[b]注æ„:[/b]该方法仅在Linux, macOSå’ŒWindows上实现。"
#: doc/classes/OS.xml:173
-#, fuzzy
msgid ""
"Returns the currently used video driver, using one of the values from [enum "
"VideoDriver]."
-msgstr "返回当å‰ç¼–辑的项目。这仅适用于自定义å•元格模å¼ã€‚"
+msgstr "返回当å‰ä½¿ç”¨çš„视频驱动程åºï¼Œä½¿ç”¨[enum VideoDriver]中的一个值。"
#: doc/classes/OS.xml:179
msgid ""
@@ -45535,6 +46786,12 @@ msgid ""
"Not to be confused with [method get_user_data_dir], which returns the "
"[i]project-specific[/i] user data path."
msgstr ""
+"æ ¹æ®æ“作系统的标准,返回[i]全局[/i]用户数æ®ç›®å½•。在桌é¢å¹³å°ä¸Šï¼Œè¿™ä¸ªè·¯å¾„å¯ä»¥åœ¨"
+"å¯åŠ¨é¡¹ç›®å‰é€šè¿‡è®¾ç½®[code]XDG_DATA_HOME[/code]环境å˜é‡æ¥è¦†ç›–。更多信æ¯è¯·å‚è§æ–‡"
+"档中[url=https://docs.godotengine.org/zh_CN/latest/tutorials/io/data_paths."
+"html]Godot项目中的文件路径[/url]。也请å‚è§ [method get_cache_dir] å’Œ [method "
+"get_config_dir]。\n"
+"ä¸è¦ä¸Ž[method get_user_data_dir]混淆,åŽè€…返回[i]项目专用[/i]用户数æ®è·¯å¾„。"
#: doc/classes/OS.xml:187
msgid ""
@@ -45569,9 +46826,8 @@ msgstr ""
"因为它ä¸èƒ½ä»Žepoch确定。"
#: doc/classes/OS.xml:208
-#, fuzzy
msgid "Returns the total amount of dynamic memory used (only works in debug)."
-msgstr "è¿”å›žä½¿ç”¨çš„é™æ€å†…存的最大数é‡(仅在调试中有效)。"
+msgstr "返回使用的动æ€å†…存总é‡ï¼ˆä»…适用于调试)。"
#: doc/classes/OS.xml:215
msgid ""
@@ -45580,20 +46836,22 @@ msgid ""
"[b]Note:[/b] Double-check the casing of [code]variable[/code]. Environment "
"variable names are case-sensitive on all platforms except Windows."
msgstr ""
+"返回环境å˜é‡çš„值。如果环境å˜é‡ä¸å­˜åœ¨ï¼Œåˆ™è¿”回一个空字符串。\n"
+"[b]注æ„:[/b] 仔细检查 [code]variable[/code] 的大å°å†™ã€‚环境å˜é‡å称在除 "
+"Windows 之外的所有平å°ä¸Šéƒ½åŒºåˆ†å¤§å°å†™ã€‚"
#: doc/classes/OS.xml:222
msgid "Returns the path to the current engine executable."
msgstr "返回当å‰å¼•æ“Žå¯æ‰§è¡Œæ–‡ä»¶çš„路径。"
#: doc/classes/OS.xml:228
-#, fuzzy
msgid ""
"With this function, you can get the list of dangerous permissions that have "
"been granted to the Android application.\n"
"[b]Note:[/b] This method is implemented on Android."
msgstr ""
-"通过这个函数,您å¯ä»¥èŽ·å¾—å·²æŽˆäºˆAndroid应用程åºçš„å±é™©æƒé™åˆ—表。\n"
-"[b]注æ„:[/b]此方法仅在Android上实现。"
+"通过这个函数,你å¯ä»¥èŽ·å¾—å·²ç»æŽˆäºˆAndroid应用程åºçš„å±é™©æƒé™åˆ—表。\n"
+"[b]注æ„:[/b] 这个方法在Android上实现。"
#: doc/classes/OS.xml:235
msgid ""
@@ -45603,6 +46861,10 @@ msgid ""
"notify it of changes to the IME cursor position.\n"
"[b]Note:[/b] This method is implemented on macOS."
msgstr ""
+"返回相对于组åˆå­—符串中的字符的 IME 光标ä½ç½®ï¼ˆå­—符串的当å‰ç¼–辑部分)。\n"
+"[constant MainLoop.NOTIFICATION_OS_IME_UPDATE] 被å‘é€åˆ°åº”用程åºä»¥é€šçŸ¥å®ƒ IME "
+"光标ä½ç½®çš„å˜åŒ–。\n"
+"[b]注:[/b]此方法在macOS上实现。"
#: doc/classes/OS.xml:243
msgid ""
@@ -45611,9 +46873,12 @@ msgid ""
"notify it of changes to the IME composition string.\n"
"[b]Note:[/b] This method is implemented on macOS."
msgstr ""
+"返回 IME 中间组åˆå­—符串。\n"
+"[constant MainLoop.NOTIFICATION_OS_IME_UPDATE] 被å‘é€åˆ°åº”用程åºä»¥é€šçŸ¥å®ƒå¯¹ "
+"IME 组åˆå­—符串的更改。\n"
+"[b]注:[/b]此方法在macOS上实现。"
#: doc/classes/OS.xml:251
-#, fuzzy
msgid ""
"Returns the current latin keyboard variant as a String.\n"
"Possible return values are: [code]\"QWERTY\"[/code], [code]\"AZERTY\"[/"
@@ -45622,9 +46887,12 @@ msgid ""
"[b]Note:[/b] This method is implemented on Linux, macOS and Windows. Returns "
"[code]\"QWERTY\"[/code] on unsupported platforms."
msgstr ""
-"返回主机æ“作系统的å称。å¯èƒ½çš„值有: [code]\"Android\"[/code], [code]\"iOS"
-"\"[/code], [code]\"HTML5\"[/code], [code]\"OSX\"[/code], [code]\"Server\"[/"
-"code], [code]\"Windows\"[/code], [code]\"UWP\"[/code], [code]\"X11\"[/code]."
+"将当剿‹‰ä¸é”®ç›˜å˜ä½“作为字符串返回。\n"
+"å¯èƒ½çš„返回值是: [code] \"QWERTY\"[/code], [code] \"AZERTY\"[/code], "
+"[code]\"QZERTY\"[/code],[code]\"DVORAK\"[/code],[code]\"NEO\"[/code],"
+"[code]\"COLEMAK\"[/code]或[code]\"错误ERROR\"[/code]。\n"
+"[b]注æ„:[/b] 此方法在 Linuxã€macOS å’Œ Windows 上实现。在ä¸å—支æŒçš„å¹³å°ä¸Šè¿”"
+"回 [code] \"QWERTY\"[/code] 。"
#: doc/classes/OS.xml:259
msgid ""
@@ -45643,6 +46911,19 @@ msgid ""
"[code]extra[/code] - optional, semicolon separated list of additional key "
"words. Currency, calendar, sort order and numbering system information."
msgstr ""
+"将主机æ“作系统区域设置为 [code]language_Script_COUNTRY_VARIANT@extra[/code] "
+"å½¢å¼çš„å­—ç¬¦ä¸²ã€‚å¦‚æžœæ‚¨åªæƒ³è¦è¯­è¨€ä»£ç è€Œä¸æ˜¯æ“作系统中完全指定的语言环境,您å¯ä»¥"
+"使用 [method get_locale_language]。\n"
+"[code]language[/code] - 2 个或 3 个字æ¯çš„ [url=https://en.wikipedia.org/wiki/"
+"List_of_ISO_639-1_codes]语言代ç [/url],å°å†™ã€‚\n"
+"[code]Script[/code] - å¯é€‰ï¼Œ4 ä¸ªå­—æ¯ [url=https://en.wikipedia.org/wiki/"
+"ISO_15924] è„šæœ¬ä»£ç  [/url],形å¼ä¸ºæ ‡é¢˜çš„大å°å†™å½¢å¼ã€‚\n"
+"[code]COUNTRY[/code] - å¯é€‰ï¼Œ2 个或 3 ä¸ªå­—æ¯ [url=https://en.wikipedia.org/"
+"wiki/ISO_3166-1]国家代ç [/url],大写。\n"
+"[code]VARIANT[/code] - å¯é€‰ï¼Œè¯­è¨€å˜ä½“,地区和排åºé¡ºåºã€‚ Variant å¯ä»¥æœ‰ä»»æ„æ•°"
+"é‡çš„带下划线的关键字。\n"
+"[code]extra[/code] - å¯é€‰ï¼Œåˆ†å·åˆ†éš”的附加关键字列表。货å¸ã€æ—¥åŽ†ã€æŽ’åºé¡ºåºå’Œç¼–"
+"å·ç³»ç»Ÿä¿¡æ¯ã€‚"
#: doc/classes/OS.xml:270
msgid ""
@@ -45655,6 +46936,13 @@ msgid ""
"about country code or variants. For example, for a French Canadian user with "
"[code]fr_CA[/code] locale, this would return [code]fr[/code]."
msgstr ""
+"将主机æ“作系统区域设置的 2 或 3 ä¸ªå­—æ¯ [url=https://en.wikipedia.org/wiki/"
+"List_of_ISO_639-1_codes]语言代ç [/url] 作为字符串返回,该字符串应在所有平å°ä¸Š"
+"ä¿æŒä¸€è‡´ã€‚这相当于æå– [method get_locale] 字符串的 [code]language[/code] 部"
+"分。\n"
+"当您ä¸éœ€è¦æœ‰å…³å›½å®¶/åœ°åŒºä»£ç æˆ–å˜ä½“çš„é™„åŠ ä¿¡æ¯æ—¶ï¼Œè¿™å¯ç”¨äºŽå°†å®Œå…¨æŒ‡å®šçš„区域设置字"
+"符串缩å°ä¸ºâ€œé€šç”¨â€è¯­è¨€ä»£ç ã€‚例如,对于使用 [code]fr_CA[/code] 语言环境的加拿大"
+"法语用户,这将返回 [code]fr[/code]。"
#: doc/classes/OS.xml:277
msgid ""
@@ -45678,44 +46966,42 @@ msgstr ""
"code], [code]\"Windows\"[/code], [code]\"UWP\"[/code], [code]\"X11\"[/code]."
#: doc/classes/OS.xml:291
-#, fuzzy
msgid ""
"Returns internal structure pointers for use in GDNative plugins.\n"
"[b]Note:[/b] This method is implemented on Linux and Windows (other OSs will "
"soon be supported)."
msgstr ""
-"返回键盘布局的数é‡ã€‚\n"
-"[b]注æ„:[/b]本方法在Linuxã€macOSå’ŒWindows上实现。"
+"返回内部结构指针,以便在GDNativeæ’件中使用。\n"
+"[b]注æ„:[/b]此方法在Linuxå’ŒWindows上实现(其他æ“作系统将很快被支æŒï¼‰ã€‚"
#: doc/classes/OS.xml:298
-#, fuzzy
msgid ""
"Returns the amount of battery left in the device as a percentage. Returns "
"[code]-1[/code] if power state is unknown.\n"
"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
msgstr ""
-"返回ä½äºŽ[code]index[/code]ä½ç½®çš„键盘布局的本地å称。\n"
-"[b]注æ„:[/b] 本方法å¯åœ¨Linuxã€macOSå’ŒWindows上实现。"
+"以百分比形å¼è¿”回设备中剩余的电池电é‡ã€‚如果电æºçŠ¶æ€æœªçŸ¥ï¼Œåˆ™è¿”回 [code]-1[/"
+"code]。\n"
+"[b]注æ„:[/b]该方法在Linuxã€macOSå’ŒWindows上实现。"
#: doc/classes/OS.xml:305
-#, fuzzy
msgid ""
"Returns an estimate of the time left in seconds before the device runs out "
"of battery. Returns [code]-1[/code] if power state is unknown.\n"
"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
msgstr ""
-"返回ä½äºŽ[code]index[/code]ä½ç½®çš„键盘布局的本地å称。\n"
-"[b]注æ„:[/b] 本方法å¯åœ¨Linuxã€macOSå’ŒWindows上实现。"
+"返回设备耗尽电池å‰å‡ ç§’钟内剩余时间的估计值。如果电æºçŠ¶æ€æœªçŸ¥ï¼Œåˆ™è¿”回 "
+"[code]-1 [/code]。\n"
+"[b]注æ„:[/b] 此方法在 Linuxã€macOS å’Œ Windows 上实现。"
#: doc/classes/OS.xml:312
-#, fuzzy
msgid ""
"Returns the current state of the device regarding battery and power. See "
"[enum PowerState] constants.\n"
"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
msgstr ""
-"返回ä½äºŽ[code]index[/code]ä½ç½®çš„键盘布局的本地å称。\n"
-"[b]注æ„:[/b] 本方法å¯åœ¨Linuxã€macOSå’ŒWindows上实现。"
+"返回设备关于电池和电æºçš„当å‰çжæ€ã€‚请å‚阅 [enum PowerState] 常é‡ã€‚\n"
+"[b]注æ„:[/b]该方法在Linuxã€macOSå’ŒWindows上实现。"
#: doc/classes/OS.xml:319
msgid ""
@@ -45723,40 +47009,38 @@ msgid ""
"[b]Note:[/b] This method is implemented on Android, iOS, Linux, macOS and "
"Windows."
msgstr ""
-"返回项目的进程ID。\n"
-"[b]注:[/b]此方法仅在Android, iOS, Linux, macOS和Windows上实现。"
+"返回项目的进程 ID。\n"
+"[b]注æ„:[/b]此方法在Androidã€iOSã€Linuxã€macOSå’ŒWindows上实现。"
#: doc/classes/OS.xml:326
msgid "Returns the number of threads available on the host machine."
-msgstr "返回主机上å¯ç”¨çš„线程数。"
+msgstr "返回宿主机上å¯ç”¨çš„线程数。"
#: doc/classes/OS.xml:332
-#, fuzzy
msgid "Returns the window size including decorations like window borders."
-msgstr "返回函数入å£ç‚¹èŠ‚ç‚¹çš„ID。"
+msgstr "返回窗å£å¤§å°ï¼ŒåŒ…括窗å£è¾¹æ¡†ç­‰è£…饰。"
#: doc/classes/OS.xml:339
-#, fuzzy
msgid ""
"Returns the given scancode as a string (e.g. Return values: [code]\"Escape"
"\"[/code], [code]\"Shift+Escape\"[/code]).\n"
"See also [member InputEventKey.scancode] and [method InputEventKey."
"get_scancode_with_modifiers]."
msgstr ""
-"以字符串的形å¼è¿”回给定的键ç (例如:返回值:[code]\"Escape\"[/code], "
-"[code]\"Shift+Escape\"[/code])。\n"
-"å‚阅[member InputEventKey]。[method InputEventKey."
-"get_keycode_with_modifiers]。"
+"将给定的扫æç ä½œä¸ºå­—符串返回(例如返回值:[code]\"Escape\"[/code],"
+"[code]\"Shift+Escape\"[/code])。\n"
+"å¦è¯·å‚阅 [member InputEventKey.scancode] å’Œ [method InputEventKey."
+"get_scancode_with_modifiers] 。"
#: doc/classes/OS.xml:346
-#, fuzzy
msgid "Returns the number of displays attached to the host machine."
-msgstr "返回主机上å¯ç”¨çš„线程数。"
+msgstr "返回连接到宿主机的显示器数é‡ã€‚"
#: doc/classes/OS.xml:353
+#, fuzzy
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -45773,6 +47057,20 @@ msgid ""
"[b]Note:[/b] This method is implemented on Android, Linux, macOS and "
"Windows. Returns [code]72[/code] on unsupported platforms."
msgstr ""
+"返回指定å±å¹•æ¯è‹±å¯¸å¯†åº¦çš„点数。如果 [code]screen[/code] 为 [/code]-1[/code]"
+"(默认值),将使用当å‰å±å¹•。\n"
+"[b]注æ„:[/b] 在macOS上,如果使用分数显示缩放模å¼ï¼Œåˆ™è¿”回值ä¸å‡†ç¡®ã€‚\n"
+"[b]注:[/b]在Android设备上,实际å±å¹•密度分为六ç§å¹¿ä¹‰å¯†åº¦ï¼š\n"
+"[codeblock]\n"
+" ldpi - 120 dpi\n"
+" mdpi - 160 dpi\n"
+" hdpi - 240 dpi\n"
+" xhdpi - 320 dpi\n"
+" xxhdpi - 480 dpi\n"
+"xxxhdpi - 640 dpi\n"
+"[/codeblock]\n"
+"[b]注:[/b]此方法在Androidã€Linuxã€macOSå’ŒWindows上实现。在ä¸å—支æŒçš„å¹³å°ä¸Šè¿”"
+"回 [code]72[/code]。"
#: doc/classes/OS.xml:370
msgid ""
@@ -45788,33 +47086,40 @@ msgstr ""
"[b]注æ„:[/b]此方法仅在macOS上实现。"
#: doc/classes/OS.xml:379
+#, fuzzy
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
+"按索引返回指定å±å¹•çš„ä½ç½®ã€‚如果 [code]screen[/code] 为 [/code]-1[/code](默认"
+"值),将使用当å‰å±å¹•。"
#: doc/classes/OS.xml:386
#, fuzzy
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
"[b]Note:[/b] This method is implemented on macOS."
msgstr ""
-"按索引返回指定å±å¹•的缩放。\n"
-"[b]注:[/b] 在macOS上,hiDPI(Retina)å±å¹•的返回值为[code]2.0[/code],其他情况"
-"为[code]1.0[/code]。\n"
-"[b]注:[/b] 此方法在macOS上实现。"
+"按索引返回指定å±å¹•的缩放系数。如果[code]screen[/code]是[/code]-1[/code](默认"
+"值),将使用当å‰å±å¹•。\n"
+"[b]注æ„:[/b]在macOS上,对于高DPI(Retina)å±å¹•,返回值是[code]2.0[/code],对"
+"于所有其他情况,返回值是[code]1.0[/code]。\n"
+"[b]注æ„:[/b] 此方法在macOS上实现。"
#: doc/classes/OS.xml:395
+#, fuzzy
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
+"以指定å±å¹•çš„åƒç´ è¿”回尺寸。如果 [code]screen[/code] 是[/code]-1[/code](默认"
+"值),则将使用当å‰å±å¹•。"
#: doc/classes/OS.xml:401
msgid ""
@@ -45831,7 +47136,6 @@ msgid "Returns the amount of static memory being used by the program in bytes."
msgstr "è¿”å›žç¨‹åºæ‰€ä½¿ç”¨çš„陿€å†…å­˜é‡ï¼Œä»¥å­—节为å•ä½ã€‚"
#: doc/classes/OS.xml:421
-#, fuzzy
msgid ""
"Returns the actual path to commonly used folders across different platforms. "
"Available locations are specified in [enum SystemDir].\n"
@@ -45841,18 +47145,18 @@ msgid ""
"differentiate between app specific and shared directories. Shared "
"directories have additional restrictions on Android."
msgstr ""
-"返回跨ä¸åŒå¹³å°çš„常用文件夹的实际路径。å¯ç”¨ä½ç½®åœ¨[enum SystemDir]中指定。\n"
-"[b]注:[/b]该方法仅在Androidã€Linuxã€macOSå’ŒWindowså¹³å°ä¸Šå®žçŽ°ã€‚"
+"返回ä¸åŒå¹³å°ä¸Šå¸¸ç”¨æ–‡ä»¶å¤¹çš„实际路径。å¯ç”¨çš„ä½ç½®åœ¨[enum SystemDir]中指定。\n"
+"[b]注æ„:[/b] 这个方法在Androidã€Linuxã€macOSå’ŒWindows上实现。\n"
+"[b]注æ„:[/b] 共享存储在Android上实现,并å…许区分应用程åºç‰¹å®šç›®å½•和共享目录。"
+"共享目录在Android上有é¢å¤–çš„é™åˆ¶ã€‚"
#: doc/classes/OS.xml:429
-#, fuzzy
msgid "Returns the epoch time of the operating system in milliseconds."
-msgstr "返回音频æµçš„长度,å•ä½ä¸ºç§’。"
+msgstr "以毫秒为å•ä½è¿”回æ“作系统的纪元时间。"
#: doc/classes/OS.xml:435
-#, fuzzy
msgid "Returns the epoch time of the operating system in seconds."
-msgstr "返回音频æµçš„长度,å•ä½ä¸ºç§’。"
+msgstr "以秒为å•ä½è¿”回æ“作系统的纪元时间。"
#: doc/classes/OS.xml:441
msgid ""
@@ -45878,6 +47182,8 @@ msgid ""
"[b]Note:[/b] Thread IDs are not deterministic and may be reused across "
"application restarts."
msgstr ""
+"返回当å‰çº¿ç¨‹çš„ ID。这å¯ç”¨äºŽæ—¥å¿—,以简化多线程应用程åºçš„调试。\n"
+"[b]注:[/b] 线程 ID 䏿˜¯ç¡®å®šçš„,也许会在应用程åºé‡æ–°å¯åŠ¨æ—¶è¢«é‡å¤ä½¿ç”¨ã€‚"
#: doc/classes/OS.xml:463
msgid ""
@@ -45910,6 +47216,13 @@ msgid ""
"[b]Note:[/b] Returns an empty string on HTML5 and UWP, as this method isn't "
"implemented on those platforms yet."
msgstr ""
+"返回设备所特有的字符串。\n"
+"[b]注æ„:[/b] å¦‚æžœç”¨æˆ·é‡æ–°å®‰è£…/å‡çº§å…¶æ“作系统或更改其硬件,此字符串å¯èƒ½ä¼šåœ¨ä¸"
+"通知的情况下更改。这æ„味ç€å®ƒé€šå¸¸ä¸åº”用于加密æŒç»­æ•°æ®ï¼Œå› ä¸ºåœ¨æ„外的 ID 更改å˜"
+"得无法访问之å‰ä¿å­˜çš„æ•°æ®ã€‚返回的字符串也å¯èƒ½ä½¿ç”¨å¤–部程åºä¼ªé€ ï¼Œå› æ­¤å‡ºäºŽå®‰å…¨ç›®"
+"的,ä¸è¦ä¾èµ– [method get_unique_id] 返回的字符串。\n"
+"[b]注æ„:[/b] 返回 HTML5 å’Œ UWP 上的空字符串,因为此方法尚未在这些平å°ä¸Šå®ž"
+"施。"
#: doc/classes/OS.xml:496
msgid ""
@@ -45921,9 +47234,13 @@ msgid ""
"calculation instead, since they are guaranteed to be monotonic (i.e. never "
"decrease)."
msgstr ""
+"以秒为å•ä½è¿”回当å‰çš„ UNIX 纪元时间戳。\n"
+"[b]é‡è¦ï¼š[/b] 这是用户å¯ä»¥æ‰‹åŠ¨è®¾ç½®çš„ç³»ç»Ÿæ—¶é’Ÿã€‚ [b]永远ä¸è¦ä½¿ç”¨[/b]è¿™ç§æ–¹æ³•è¿›"
+"行精确的时间计算,因为它的结果也会å—到æ“作系统的自动调整。 [b] 始终使用 [/b] "
+"[method get_ticks_usec] 或 [method get_ticks_msec] 进行精确时间计算,因为它们"
+"ä¿è¯æ˜¯å•è°ƒçš„ï¼ˆå³æ°¸ä¸å‡å°‘)。"
#: doc/classes/OS.xml:504
-#, fuzzy
msgid ""
"Gets an epoch time value from a dictionary of time values.\n"
"[code]datetime[/code] must be populated with the following keys: [code]year[/"
@@ -45936,15 +47253,16 @@ msgid ""
"into this function. Daylight Savings Time ([code]dst[/code]), if present, is "
"ignored."
msgstr ""
-"从一个时间值的字典中获å–一个纪元时间值。\n"
-"[code]datetime[/code]将被以下键æ¥å¡«å……: [code]year[/code], [code]month[/"
-"code], [code]day[/code], [code]hour[/code], [code]minute[/code], "
-"[code]second[/code]。\n"
-"ä½ å¯ä»¥å°†[method get_datetime_from_unix_time]的输出直接传递给这个函数。如果存"
-"在å¤ä»¤æ—¶ï¼ˆ[code]dst[/code]),则会被忽略。"
+"从时间值字典中获å–纪元时间值。\n"
+"[code]datetime[/code] 必须填充以下键:[code]year[/code]ã€[code]month[/code]ã€"
+"[code]day[/code]ã€[code]hour[/code]ã€[code]minute[/code]ã€[code]second[/"
+"code]。\n"
+"如果字典为空,则返回 [code]0[/code]。如果æŸäº›é”®è¢«çœç•¥ï¼Œå®ƒä»¬é»˜è®¤ä¸º UNIX 纪元时"
+"间戳 0(1970-01-01 在 00:00:00 UTC)的等效值。\n"
+"ä½ å¯ä»¥å°† [method get_datetime_from_unix_time] 的输出直接传递给此函数。å¤ä»¤æ—¶ "
+"([code]dst[/code])(如果存在)将被忽略。"
#: doc/classes/OS.xml:513
-#, fuzzy
msgid ""
"Returns the absolute directory path where user data is written ([code]user://"
"[/code]).\n"
@@ -45964,22 +47282,23 @@ msgid ""
"i] (non-project-specific) user data directory."
msgstr ""
"返回用户数æ®è¢«å†™å…¥çš„ç»å¯¹ç›®å½•路径([code]user://[/code])。\n"
-"在Linux上,该路径是 [code]~/.local/share/godot/app_userdata/[project_name][/"
-"code],如果[code]use_custom_user_dir[/code]被设置,则是[code]~/.local/share/"
+"在Linux上,这是[code]~/.local/share/godot/app_userdata/[project_name][/"
+"code],如果设置了[code]use_custom_user_dir[/code],则是[code]~/.local/share/"
"[custom_name][/code]。\n"
-"在macOS上,该路径是 [code]~/Library/Application Support/Godot/app_userdata/"
-"[project_name][/code],如果[code]use_custom_user_dir[/code]被设置,则是"
-"[code]~/Library/Application Support/[custom_name][/code]。\n"
-"在Windows上,该路径是[code]%APPDATA%\\Godot\\app_userdata\\[project_name][/"
-"code],如果[code]use_custom_user_dir[/code]被设置,则是[code]%APPDATA%"
-"\\[custom_name][/code]。[code]%APPDATA%[/code]扩展为 [code]%USERPROFILE%"
+"在macOS上,这是[code]~/Library/Application Support/Godot/app_userdata/"
+"[project_name][/code],或者[code]~/Library/Application Support/[custom_name]"
+"[/code],如果[code]use_custom_user_dir[/code]被设置。\n"
+"在Windows中,如果设置了[code]use_custom_user_dir[/code],则为[code]%APPDATA%"
+"\\Godot\\app_userdata\\[project_name][/code],或者[code]%APPDATA%"
+"\\[custom_name][/code]。[code]%APPDATA%[/code]扩展到[code]%USERPROFILE%"
"\\AppData\\Roaming[/code]。\n"
-"如果项目å称是空的,[code]user://[/code]会退回到[code]res://[/code]。"
+"如果项目å称是空的,[code]user://[/code]会退回到[code]res://[/code]。\n"
+"ä¸è¦ä¸Ž[method get_data_dir]混淆,åŽè€…返回[i]全局[/i]用户数æ®ç›®å½•(éžé¡¹ç›®ä¸“"
+"用)。"
#: doc/classes/OS.xml:524
-#, fuzzy
msgid "Returns the number of video drivers supported on the current platform."
-msgstr "返回å‘å·¦å移的éšè—选项å¡çš„æ•°é‡ã€‚"
+msgstr "返回当å‰å¹³å°ä¸Šæ”¯æŒçš„视频驱动器的数é‡ã€‚"
#: doc/classes/OS.xml:531
msgid ""
@@ -45987,6 +47306,9 @@ msgid ""
"index. This index is a value from [enum VideoDriver], and you can use "
"[method get_current_video_driver] to get the current backend's index."
msgstr ""
+"返回与给定 [code]driver[/code] 索引匹é…的视频驱动程åºçš„å称。此索引是æ¥è‡ª "
+"[enum VideoDriver] 的值,您å¯ä»¥ä½¿ç”¨ [method get_current_video_driver] 获å–当"
+"å‰åŽç«¯çš„索引。"
#: doc/classes/OS.xml:537
msgid ""
@@ -45999,7 +47321,7 @@ msgstr ""
msgid ""
"Returns unobscured area of the window where interactive controls should be "
"rendered."
-msgstr ""
+msgstr "è¿”å›žåº”å‘ˆçŽ°äº¤äº’å¼æŽ§ä»¶çš„çª—å£çš„æœªé®æŒ¡åŒºåŸŸã€‚"
#: doc/classes/OS.xml:553
msgid ""
@@ -46007,32 +47329,35 @@ msgid ""
"item to the macOS dock icon menu.\n"
"[b]Note:[/b] This method is implemented on macOS."
msgstr ""
+"将带有文本“标签â€çš„æ–°é¡¹ç›®æ·»åŠ åˆ°å…¨å±€èœå•。使用“_dockâ€èœå•将项目添加到 macOS åœ"
+"é æ å›¾æ ‡èœå•。\n"
+"[b]注:[/b]此方法在macOS上实现。"
#: doc/classes/OS.xml:561
-#, fuzzy
msgid ""
"Add a separator between items. Separators also occupy an index.\n"
"[b]Note:[/b] This method is implemented on macOS."
-msgstr "添加项之间的分隔符。分隔符也å ç”¨ç´¢å¼•。"
+msgstr ""
+"在项目之间添加一个分隔符。分隔符也å ç”¨ä¸€ä¸ªç´¢å¼•。\n"
+"[b]注æ„:[/b] 这个方法在macOS上实现。"
#: doc/classes/OS.xml:569
-#, fuzzy
msgid ""
"Clear the global menu, in effect removing all items.\n"
"[b]Note:[/b] This method is implemented on macOS."
msgstr ""
-"返回å¯ç”¨çš„写字æ¿ï¼ˆè¯‘注:或触摸æ¿ã€æ•°ä½æ¿ï¼Œåœ¨æ­¤å¤„尚未明确)驱动程åºçš„æ€»æ•°ã€‚\n"
-"[b]注æ„:[/b]该方法是在Windows上实现的。"
+"清除全局èœå•,实际上是删除所有项目。\n"
+"[b]注æ„:[/b]这个方法在macOS上实现。"
#: doc/classes/OS.xml:578
-#, fuzzy
msgid ""
"Removes the item at index \"idx\" from the global menu. Note that the "
"indexes of items after the removed item are going to be shifted by one.\n"
"[b]Note:[/b] This method is implemented on macOS."
msgstr ""
-"从èœå•中移除索引[code]idx[/code]项。\n"
-"[b]注:[/b]被移除项åŽçš„项的索引将被移ä½1。"
+"将索引为 \"idx\" 的项目从全局èœå•中移除。注æ„,在被删除的项目之åŽçš„项目的索引"
+"将被移动1ä½ã€‚\n"
+"[b]注æ„:[/b] 这个方法在macOS上实现。"
#: doc/classes/OS.xml:586
msgid ""
@@ -46041,9 +47366,11 @@ msgid ""
"[b]Note:[/b] Double-check the casing of [code]variable[/code]. Environment "
"variable names are case-sensitive on all platforms except Windows."
msgstr ""
+"如果å称为 [code]variable[/code] 的环境å˜é‡å­˜åœ¨ï¼Œåˆ™è¿”回 [code]true[/code]。\n"
+"[b]注æ„:[/b] 仔细检查 [code]variable[/code] 的大å°å†™ã€‚环境å˜é‡å称在除 "
+"Windows 之外的所有平å°ä¸Šéƒ½åŒºåˆ†å¤§å°å†™ã€‚"
#: doc/classes/OS.xml:594
-#, fuzzy
msgid ""
"Returns [code]true[/code] if the feature for the given feature tag is "
"supported in the currently running instance, depending on the platform, "
@@ -46053,25 +47380,24 @@ msgid ""
"html]Feature Tags[/url] documentation for more details.\n"
"[b]Note:[/b] Tag names are case-sensitive."
msgstr ""
-"å¦‚æžœç»™å®šçš„ç‰¹å¾æ ‡ç­¾çš„特å¾åœ¨å½“å‰è¿è¡Œçš„实例中被支æŒï¼Œåˆ™è¿”回[code]true[/code],具"
-"体å–决于平å°å’Œæž„建等。å¯ä»¥ç”¨æ¥æ£€æŸ¥ä½ å½“剿˜¯å¦åœ¨è¿è¡Œè°ƒè¯•构建,是å¦åœ¨æŸä¸ªå¹³å°æˆ–"
-"架构上,等等。更多细节请å‚考[url=https://docs.godotengine.org/zh_CN/latest/"
-"getting_started/workflow/export/feature_tags.html]功能标签[/url]文档。\n"
-"[b]注æ„:[/b] 标签å称是区分大å°å†™çš„。"
+"å¦‚æžœç»™å®šçš„ç‰¹å¾æ ‡ç­¾çš„特å¾åœ¨å½“å‰è¿è¡Œçš„实例中得到支æŒï¼Œåˆ™è¿”回[code]true[/code],"
+"具体å–决于平å°å’Œæž„建等。å¯ä»¥ç”¨æ¥æ£€æŸ¥ä½ å½“剿˜¯å¦åœ¨è¿è¡Œä¸€ä¸ªè°ƒè¯•构建,是å¦åœ¨æŸä¸ª"
+"平尿ˆ–架构上,等等。更多细节请å‚考[url=https://docs.godotengine.org/zh_CN/"
+"stable/getting_started/workflow/export/feature_tags.html]功能标签[/url]文"
+"档。\n"
+"[b]注æ„:[/b] 标签å称区分大å°å†™ã€‚"
#: doc/classes/OS.xml:601
-#, fuzzy
msgid ""
"Returns [code]true[/code] if the device has a touchscreen or emulates one."
-msgstr "如果该设备跟踪方å‘,则返回[code]true[/code]。"
+msgstr "å¦‚æžœè®¾å¤‡æœ‰è§¦æ‘¸å±æˆ–模拟有触摸å±ï¼Œåˆ™è¿”回[code]true[/code]。"
#: doc/classes/OS.xml:607
-#, fuzzy
msgid ""
"Returns [code]true[/code] if the platform has a virtual keyboard, "
"[code]false[/code] otherwise."
msgstr ""
-"如果脚本域被加载,返回 [code]true[/code] ,å¦åˆ™è¿”回 [code]false[/code] 。"
+"å¦‚æžœå¹³å°æœ‰è™šæ‹Ÿé”®ç›˜ï¼Œè¿”回[code]true[/code],å¦åˆ™è¿”回[code]false[/code]。"
#: doc/classes/OS.xml:613
msgid "Hides the virtual keyboard if it is shown, does nothing otherwise."
@@ -46095,18 +47421,18 @@ msgstr ""
"[code]OS.has_feature(\"standalone\")[/code]代替。"
#: doc/classes/OS.xml:627
-#, fuzzy
msgid ""
"Returns [code]true[/code] if the [b]OK[/b] button should appear on the left "
"and [b]Cancel[/b] on the right."
-msgstr "如果该动作有给定的[InputEvent]与之相关,则返回[code]true[/code]。"
+msgstr ""
+"如果[b]OK[/b]按钮应该显示在左边,[b]Cancel[/b]显示在å³è¾¹ï¼Œåˆ™è¿”回[code]true[/"
+"code]。"
#: doc/classes/OS.xml:634
-#, fuzzy
msgid ""
"Returns [code]true[/code] if the input scancode corresponds to a Unicode "
"character."
-msgstr "如果输入的键ç å¯¹åº”于一个Unicode字符,则返回[code]true[/code]。"
+msgstr "如果输入的键ç ä¸ŽUnicode字符对应,则返回[code]true[/code]。"
#: doc/classes/OS.xml:640
msgid ""
@@ -46125,20 +47451,19 @@ msgstr ""
"冿¬¡å¯åŠ¨æ¸¸æˆåŽï¼Œå…¶çŠ¶æ€æ˜¯ç›¸åŒçš„。与HTML5平尿œ‰å…³ï¼Œåœ¨é‚£é‡Œè¿™ç§æŒä¹…性å¯èƒ½ä¸å¯ç”¨ã€‚"
#: doc/classes/OS.xml:652
-#, fuzzy
msgid ""
"Returns [code]true[/code] if the window should always be on top of other "
"windows."
-msgstr "如果节点在场景dock中折å (collapsed),则返回[code]true[/code]。"
+msgstr "如果该窗å£åº”总是在其他窗å£ä¹‹ä¸Šï¼Œåˆ™è¿”回[code]true[/code]。"
#: doc/classes/OS.xml:658
-#, fuzzy
msgid ""
"Returns [code]true[/code] if the window is currently focused.\n"
"[b]Note:[/b] Only implemented on desktop platforms. On other platforms, it "
"will always return [code]true[/code]."
msgstr ""
-"如果addon准备好å“应函数调用,返回[code]true[/code],å¦åˆ™è¿”回[code]false[/"
+"如果窗å£å½“å‰èŽ·å¾—ç„¦ç‚¹ï¼Œåˆ™è¿”å›ž[code]true[/code]。\n"
+"[b]注æ„:[/b] åªåœ¨æ¡Œé¢å¹³å°ä¸Šå®žçŽ°ã€‚åœ¨å…¶ä»–å¹³å°ä¸Šï¼Œå®ƒå°†æ€»æ˜¯è¿”回[code]true[/"
"code]。"
#: doc/classes/OS.xml:665
@@ -46198,31 +47523,28 @@ msgstr ""
"[b]注æ„:[/b] 这个方法在Androidã€iOSã€Linuxã€macOSå’ŒWindows上实现。"
#: doc/classes/OS.xml:712
-#, fuzzy
msgid ""
"Moves the window to the front.\n"
"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
msgstr ""
-"返回键盘布局的数é‡ã€‚\n"
-"[b]注æ„:[/b]本方法在Linuxã€macOSå’ŒWindows上实现。"
+"将窗å£ç§»åˆ°å‰é¢ã€‚\n"
+"[b]注æ„:[/b] 这个方法在Linuxã€macOSå’ŒWindows上实现。"
#: doc/classes/OS.xml:719
-#, fuzzy
msgid ""
"Returns [code]true[/code] if native video is playing.\n"
"[b]Note:[/b] This method is only implemented on iOS."
msgstr ""
-"如果视频正在播放,返回[code]true[/code] 。\n"
-"[b]注æ„:[/b] 如果在播放过程中暂åœï¼Œè§†é¢‘ä»è¢«è®¤ä¸ºåœ¨æ’­æ”¾ã€‚"
+"如果本地视频正在播放,返回[code]true[/code]。\n"
+"[b]注æ„:[/b] 这个方法åªåœ¨iOS上实现。"
#: doc/classes/OS.xml:726
-#, fuzzy
msgid ""
"Pauses native video playback.\n"
"[b]Note:[/b] This method is only implemented on iOS."
msgstr ""
-"设置活动键盘布局。\n"
-"[b]注:[/b]此方法å¯åœ¨Linuxã€macOSå’ŒWindows上实现。"
+"æš‚åœæœ¬åœ°è§†é¢‘播放。\n"
+"[b]注æ„:[/b] 这个方法åªåœ¨iOS上实现。"
#: doc/classes/OS.xml:737
msgid ""
@@ -46230,24 +47552,24 @@ msgid ""
"audio and subtitle tracks.\n"
"[b]Note:[/b] This method is only implemented on iOS."
msgstr ""
+"以给定的音é‡ã€éŸ³é¢‘å’Œå­—å¹•è½¨é“æ’­æ”¾æ¥è‡ªæŒ‡å®šè·¯å¾„的本地视频。\n"
+"[b]注æ„:[/b] 这个方法åªåœ¨iOS上实现。"
#: doc/classes/OS.xml:744
-#, fuzzy
msgid ""
"Stops native video playback.\n"
"[b]Note:[/b] This method is implemented on iOS."
msgstr ""
-"设置活动键盘布局。\n"
-"[b]注:[/b]此方法å¯åœ¨Linuxã€macOSå’ŒWindows上实现。"
+"åœæ­¢æœ¬åœ°è§†é¢‘播放。\n"
+"[b]注æ„:[/b] 这个方法在iOS上实现。"
#: doc/classes/OS.xml:751
-#, fuzzy
msgid ""
"Resumes native video playback.\n"
"[b]Note:[/b] This method is implemented on iOS."
msgstr ""
-"设置活动键盘布局。\n"
-"[b]注:[/b]此方法å¯åœ¨Linuxã€macOSå’ŒWindows上实现。"
+"æ¢å¤æœ¬åœ°è§†é¢‘播放。\n"
+"[b]注æ„:[/b] 这个方法在iOS上实现。"
#: doc/classes/OS.xml:758
msgid ""
@@ -46278,14 +47600,13 @@ msgid "Shows all resources currently used by the game."
msgstr "显示游æˆå½“å‰ä½¿ç”¨çš„æ‰€æœ‰èµ„æºã€‚"
#: doc/classes/OS.xml:792
-#, fuzzy
msgid ""
"Request the user attention to the window. It'll flash the taskbar button on "
"Windows or bounce the dock icon on OSX.\n"
"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
msgstr ""
-"返回ä½äºŽ[code]index[/code]ä½ç½®çš„键盘布局的本地å称。\n"
-"[b]注æ„:[/b] 本方法å¯åœ¨Linuxã€macOSå’ŒWindows上实现。"
+"è¦æ±‚用户注æ„该窗å£ã€‚它会在Windows上闪çƒä»»åŠ¡æ æŒ‰é’®ï¼Œæˆ–在OSX上弹出Dock图标。\n"
+"[b]注æ„:[/b] 这个方法在Linuxã€macOSå’ŒWindows上实现。"
#: doc/classes/OS.xml:800
msgid ""
@@ -46296,16 +47617,15 @@ msgstr ""
"[code]RECORD_AUDIO[/code]çš„æƒé™ã€‚"
#: doc/classes/OS.xml:806
-#, fuzzy
msgid ""
"With this function, you can request dangerous permissions since normal "
"permissions are automatically granted at install time in Android "
"applications.\n"
"[b]Note:[/b] This method is implemented on Android."
msgstr ""
-"有了这个功能,你å¯ä»¥ç”³è¯·å±é™©çš„æƒé™ï¼Œå› ä¸ºæ­£å¸¸çš„æƒé™åœ¨Android应用程åºçš„安装时就"
-"会自动授予。\n"
-"[b]注æ„:[/b] 这个方法在Android上实现。"
+"通过这个功能,你å¯ä»¥ç”³è¯·å±é™©çš„æƒé™ï¼Œå› ä¸ºåœ¨Android应用程åºä¸­ï¼Œæ­£å¸¸çš„æƒé™ä¼šåœ¨å®‰"
+"装时自动授予。\n"
+"[b]注æ„:[/b] 此方法在Android上实现。"
#: doc/classes/OS.xml:815
msgid ""
@@ -46317,6 +47637,11 @@ msgid ""
"[b]Note:[/b] Double-check the casing of [code]variable[/code]. Environment "
"variable names are case-sensitive on all platforms except Windows."
msgstr ""
+"将环境å˜é‡[code]variable[/code]的值设置为[code]value[/code]。在è¿è¡Œ[method "
+"set_environment]åŽï¼ŒçŽ¯å¢ƒå˜é‡å°†è¢«è®¾ç½®ä¸ºGodot进程和任何用[method execute]执行的"
+"进程。环境å˜é‡å°†[i]ä¸[/i]æŒç»­å­˜åœ¨äºŽGodot进程终止åŽè¿è¡Œçš„进程中。\n"
+"[b]注æ„:[/b] 仔细检查[code]variable[/code]的大å°å†™ã€‚除Windows外,环境å˜é‡å"
+"称在所有平å°ä¸Šéƒ½æ˜¯åŒºåˆ†å¤§å°å†™çš„。"
#: doc/classes/OS.xml:823
msgid ""
@@ -46325,6 +47650,10 @@ msgid ""
"dialog. Image is scaled as needed.\n"
"[b]Note:[/b] This method is implemented on HTML5, Linux, macOS and Windows."
msgstr ""
+"使用图åƒ[Image]资æºè®¾ç½®æ¸¸æˆçš„图标。\n"
+"åŒæ ·çš„图åƒç”¨äºŽçª—壿 ‡é¢˜ã€ä»»åŠ¡æ /dock和窗å£é€‰æ‹©å¯¹è¯æ¡†ã€‚图åƒä¼šæ ¹æ®éœ€è¦è¿›è¡Œç¼©"
+"放。\n"
+"[b]注æ„:[/b] 这个方法在HTML5ã€Linuxã€macOSå’ŒWindows上实现。"
#: doc/classes/OS.xml:832
msgid ""
@@ -46336,15 +47665,21 @@ msgid ""
"Completed composition string is committed when input is finished.\n"
"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
msgstr ""
+"设置是å¦åº”å¯ç”¨ IME 输入法模å¼ã€‚\n"
+"如果激活,IME输入法编辑器在应用程åºä¹‹å‰å¤„ç†å…³é”®äº‹ä»¶å¹¶åˆ›å»ºç»„åˆå­—符串和建议列"
+"表。\n"
+"应用程åºå¯ä»¥é€šè¿‡ä½¿ç”¨ [method get_ime_selection] å’Œ [method get_ime_text] 函数"
+"æ¥æ£€ç´¢ç»„åˆçжæ€ã€‚\n"
+"è¾“å…¥å®Œæˆæ—¶æäº¤å®Œæˆçš„组åˆå­—符串。\n"
+"[b]注:[/b]该方法在Linuxã€macOSå’ŒWindows上实现。"
#: doc/classes/OS.xml:843
-#, fuzzy
msgid ""
"Sets position of IME suggestion list popup (in window coordinates).\n"
"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
msgstr ""
-"关闭系统MIDI驱动程åºã€‚\n"
-"[b]注æ„:[/b]该方法åªåœ¨Linux, macOSå’ŒWindows上实现。"
+"设置 IME 建议列表弹出窗å£çš„ä½ç½®ï¼ˆåœ¨çª—å£å标中)。\n"
+"[b]注æ„:[/b] 此方法在 Linuxã€macOS å’Œ Windows 上实现。"
#: doc/classes/OS.xml:851
msgid ""
@@ -46354,6 +47689,10 @@ msgid ""
"window selection dialog.\n"
"[b]Note:[/b] This method is implemented on macOS and Windows."
msgstr ""
+"使用多尺寸平å°ç‰¹å®šå›¾æ ‡æ–‡ä»¶ï¼ˆ[code]*.ico[/code] 在 Windows 上设置游æˆå›¾æ ‡ï¼Œåœ¨ "
+"macOS 上设置 [code]*.icns [/code] ) 。\n"
+"适当的大å°å­å›¾æ ‡ç”¨äºŽçª—壿 ‡é¢˜ã€ä»»åŠ¡æ /åœé é¢æ¿å’Œçª—å£é€‰æ‹©å¯¹è¯æ¡†ã€‚\n"
+"[b]注æ„:[/b] 此方法在 macOS å’Œ Windows 上实现。"
#: doc/classes/OS.xml:860
msgid "Sets the name of the current thread."
@@ -46364,13 +47703,12 @@ msgid "Enables backup saves if [code]enabled[/code] is [code]true[/code]."
msgstr "如果[code]enabled[/code]为[code]true[/code],则å¯ç”¨å¤‡ä»½ä¿å­˜ã€‚"
#: doc/classes/OS.xml:874
-#, fuzzy
msgid ""
"Sets whether the window should always be on top.\n"
"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
msgstr ""
-"设置活动键盘布局。\n"
-"[b]注:[/b]此方法å¯åœ¨Linuxã€macOSå’ŒWindows上实现。"
+"è®¾ç½®çª—å£æ˜¯å¦åº”始终ä½äºŽé¡¶éƒ¨ã€‚\n"
+"[b]注:[/b] 该方法在 Linuxã€macOS å’Œ Windows 上实现。"
#: doc/classes/OS.xml:882
msgid ""
@@ -46392,6 +47730,21 @@ msgid ""
"region is not drawn, while on Linux and macOS it is.\n"
"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
msgstr ""
+"设置窗å£çš„一个接å—鼠标事件的多边形区域。该区域外的鼠标事件将被传递出去。\n"
+"传递一个空数组将ç¦ç”¨ç©¿é€æ”¯æŒï¼ˆæ‰€æœ‰é¼ æ ‡äº‹ä»¶å°†è¢«çª—壿‹¦æˆªï¼Œè¿™æ˜¯é»˜è®¤è¡Œä¸ºï¼‰ã€‚\n"
+"[codeblock]\n"
+"# 设置区域,使用Path2D节点。\n"
+"OS.set_window_mouse_passthrough($Path2D.curve.get_baked_points() )\n"
+"\n"
+"# 设置区域,使用Polygon2D节点。\n"
+"OS.set_window_mouse_passthrough($Polygon2D.polygon)\n"
+"\n"
+"# é‡ç½®åŒºåŸŸä¸ºé»˜è®¤å€¼ã€‚\n"
+"OS.set_window_mouse_passthrough([] )\n"
+"[/codeblock]\n"
+"[b]注æ„:[/b]在Windows上,ä½äºŽåŒºåŸŸå¤–的窗å£éƒ¨åˆ†ä¸ä¼šè¢«ç»˜åˆ¶ï¼Œè€Œåœ¨Linuxå’ŒmacOS上则"
+"会。\n"
+"[b]注æ„:[/b] 这个方法在Linuxã€macOSå’ŒWindows上实现。"
#: doc/classes/OS.xml:902
msgid ""
@@ -46400,6 +47753,10 @@ msgid ""
"as that will negatively affect performance on some window managers.\n"
"[b]Note:[/b] This method is implemented on HTML5, Linux, macOS and Windows."
msgstr ""
+"å°†çª—å£æ ‡é¢˜è®¾ç½®ä¸ºæŒ‡å®šçš„字符串。\n"
+"[b]注æ„:[/b] 这个应该å¶å°”使用。ä¸è¦æ¯å¸§éƒ½è®¾ç½®è¿™ä¸ªï¼Œå› ä¸ºè¿™ä¼šå¯¹æŸäº›çª—å£ç®¡ç†å™¨"
+"的性能产生负é¢å½±å“。\n"
+"[b]注:[/b] 该方法在 HTML5ã€Linuxã€macOS å’Œ Windows 上实现。"
#: doc/classes/OS.xml:911
msgid ""
@@ -46434,7 +47791,6 @@ msgstr ""
"现。"
#: doc/classes/OS.xml:924
-#, fuzzy
msgid ""
"Shows the virtual keyboard if the platform has one.\n"
"The [code]existing_text[/code] parameter is useful for implementing your own "
@@ -46445,27 +47801,21 @@ msgid ""
"be able to enter multiple lines of text, as in [TextEdit].\n"
"[b]Note:[/b] This method is implemented on Android, iOS and UWP."
msgstr ""
-"显示虚拟键盘,如果当å‰å¹³å°æœ‰ä¸€ä¸ªã€‚\n"
-"[code]existing_text[/code]傿•°å¯ç”¨äºŽå®žçŽ°æ‚¨è‡ªå·±çš„ [LineEdit] 或 [TextEdit],因"
-"为它告诉虚拟键盘已输入文本的内容(虚拟键盘将其用于自动更正和预测)。\n"
-"[code]position[/code]傿•°æ˜¯ç¼–辑文本的å±å¹•中[Rect2]。\n"
-"[code]multiline[/code]傿•°éœ€è¦è®¾ç½®ä¸º[code]true[/code]æ‰èƒ½è¾“入多行文本,在"
-"[TextEdit]中。\n"
-"[code]max_length[/code]é™åˆ¶å¦‚æžœä¸ç­‰äºŽ [code]-1[/code] ,å¯ä»¥è¾“入的最大字符"
-"数。\n"
-"[code]cursor_start[/code]å¯ä»¥é€‰æ‹©æ€§åœ°å®šä¹‰å½“剿–‡æœ¬å…‰æ ‡ä½ç½®ï¼Œå¦‚æžœ"
-"[code]cursor_end[/code]未设置。\n"
-"[code]cursor_start[/code]å’Œ[code]cursor_end[/code]å¯ä»¥é€‰æ‹©åœ°å®šä¹‰å½“剿–‡æœ¬é€‰"
-"择。\n"
-"[b]注æ„:[/b]此方法在安å“系统ã€iOS å’Œ UWP 上实施。"
+"å¦‚æžœå¹³å°æœ‰è™šæ‹Ÿé”®ç›˜ï¼Œåˆ™æ˜¾ç¤ºè™šæ‹Ÿé”®ç›˜ã€‚\n"
+"[code]existing_text[/code] 傿•°å¯¹äºŽå®žçŽ°æ‚¨è‡ªå·±çš„ [LineEdit] 或 [TextEdit] 很有"
+"用,因为它告诉虚拟键盘已ç»è¾“入了哪些文本(虚拟键盘使用它进行自动更正和预"
+"测)。\n"
+"[code]multiline[/code]傿•°éœ€è¦è®¾ç½®ä¸º[code]true[/code]æ‰èƒ½è¾“入多行文本,如"
+"[TextEdit]。\n"
+"[b]注:[/b]此方法在Androidã€iOSå’ŒUWP上实现。"
#: doc/classes/OS.xml:933
msgid "The clipboard from the host OS. Might be unavailable on some platforms."
-msgstr ""
+msgstr "主机æ“作系统的剪贴æ¿åœ¨æŸäº›å¹³å°ä¸Šå¯èƒ½ä¸å¯ç”¨ã€‚"
#: doc/classes/OS.xml:936
msgid "The current screen index (starting from 0)."
-msgstr ""
+msgstr "当å‰å±å¹•索引(从 0 开始)。"
#: doc/classes/OS.xml:939
msgid ""
@@ -46473,6 +47823,8 @@ msgid ""
"each frame, and attempts to compensate for random variation. This will only "
"operate on systems where V-Sync is active."
msgstr ""
+"如果 [code]true[/code],引擎会过滤æ¯å¸§ä¹‹é—´æµ‹é‡çš„æ—¶é—´å¢žé‡ï¼Œå¹¶å°è¯•è¡¥å¿éšæœºå˜"
+"化。这åªä¼šåœ¨åž‚ç›´åŒæ­¥å¤„于活动状æ€çš„系统上è¿è¡Œã€‚"
#: doc/classes/OS.xml:942
msgid ""
@@ -46490,11 +47842,11 @@ msgstr ""
"数,这个值将被忽略。"
#: doc/classes/OS.xml:946
-#, fuzzy
msgid ""
"If [code]true[/code], the engine tries to keep the screen on while the game "
"is running. Useful on mobile."
-msgstr "如果 [code]true[/code],引擎将生æˆç”¨äºŽçº¿æ¡†è°ƒè¯•模å¼çš„线框。"
+msgstr ""
+"如果 [code]true[/code],引擎会å°è¯•在游æˆè¿è¡Œæ—¶ä¿æŒå±å¹•å¼€å¯ã€‚在手机上有用。"
#: doc/classes/OS.xml:949
msgid ""
@@ -46518,6 +47870,8 @@ msgid ""
"decorations). Does not affect fullscreen mode. Set to [code](0, 0)[/code] to "
"reset to the system default value."
msgstr ""
+"窗å£çš„æœ€å¤§å¤§å°ï¼ˆä¸åŒ…括窗å£ç®¡ç†å™¨è£…饰)。ä¸å½±å“免屿¨¡å¼ã€‚设置为 [code](0, 0)[/"
+"code] å¯é‡ç½®ä¸ºç³»ç»Ÿé»˜è®¤å€¼ã€‚"
#: doc/classes/OS.xml:958
msgid ""
@@ -46528,23 +47882,24 @@ msgid ""
"[code]Vector2(64, 64)[/code]. This prevents issues that can arise when the "
"window is resized to a near-zero size."
msgstr ""
+"窗å£çš„æœ€å°å°ºå¯¸ï¼ˆä»¥åƒç´ ä¸ºå•ä½ï¼‰ï¼ˆä¸è®¡ç®—窗å£ç®¡ç†å™¨è£…饰)。ä¸å½±å“免屿¨¡å¼ã€‚设置"
+"为 [code](0, 0)[/code] å¯é‡ç½®ä¸ºç³»ç»Ÿé»˜è®¤å€¼ã€‚\n"
+"[b]注:[/b] 默认情况下,项目窗å£çš„æœ€å°å°ºå¯¸ä¸º [code]Vector2(64, 64)[/code]。这"
+"å¯ä»¥é˜²æ­¢åœ¨å°†çª—å£å¤§å°è°ƒæ•´ä¸ºæŽ¥è¿‘é›¶æ—¶å¯èƒ½å‡ºçŽ°çš„é—®é¢˜ã€‚"
#: doc/classes/OS.xml:962
-#, fuzzy
msgid "The current screen orientation."
-msgstr "当å‰åœºæ™¯ã€‚"
+msgstr "当å‰å±å¹•æ–¹å‘。"
#: doc/classes/OS.xml:965
msgid "The current tablet driver in use."
msgstr "当剿­£åœ¨ä½¿ç”¨çš„书写æ¿ï¼ˆè¯‘æ³¨ï¼šæˆ–æ•°ä½æ¿ã€è§¦æ‘¸æ¿ï¼Œå°šæœªå®šè®ºï¼‰é©±åŠ¨ç¨‹åºã€‚"
#: doc/classes/OS.xml:968
-#, fuzzy
msgid "If [code]true[/code], vertical synchronization (Vsync) is enabled."
-msgstr "如果[code]true[/code],则å¯ç”¨æ³•线映射。"
+msgstr "如果 [code]true[/code],则å¯ç”¨åž‚ç›´åŒæ­¥ (Vsync)。"
#: doc/classes/OS.xml:971
-#, fuzzy
msgid ""
"If [code]true[/code] and [code]vsync_enabled[/code] is true, the operating "
"system's window compositor will be used for vsync when the compositor is "
@@ -46554,11 +47909,11 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it.\n"
"[b]Note:[/b] This property is only implemented on Windows."
msgstr ""
-"如果[code]Use Vsync[/code]å·²å¯ç”¨ï¼Œä¸”[code]true[/code]ï¼Œåˆ™åœ¨çª—å£æ¨¡å¼ä¸‹å¯ç”¨æŽ’å­—"
-"器时,å¯é€šè¿‡æ“ä½œç³»ç»Ÿçš„çª—å£æŽ’å­—å™¨å®žçŽ°åž‚ç›´åŒæ­¥ã€‚这将防止在æŸäº›æƒ…况下å¡é¡¿ã€‚"
-"(Windows)。\n"
-"[b]注:[/b]这个选项是实验性的,旨在缓解一些用户的å¡é¡¿ä½“验。然而,有些用户在使"
-"ç”¨å®ƒæ—¶ä½“éªŒåˆ°åž‚ç›´åŒæ­¥å¸§çއå‡åŠ(例如从60 FPSé™è‡³30 FPS)。"
+"如果 [code]true[/code] å’Œ [code]vsync_enabled[/code] 为真,当æ“作系统的窗å£åˆ"
+"æˆå™¨è¢«å¯ç”¨å¹¶ä¸”游æˆå¤„äºŽçª—å£æ¨¡å¼æ—¶ï¼Œå°†ä½¿ç”¨è¯¥åˆæˆå™¨è¿›è¡Œvsync。\n"
+"[b]注æ„:[/b] 此选项是实验性的,旨在缓解æŸäº›ç”¨æˆ·é‡åˆ°çš„å¡é¡¿ã€‚但是,一些用户在"
+"使用时é‡åˆ°äº† Vsync 帧率å‡åŠï¼Œä¾‹å¦‚从 60 FPS 到 30 FPS。\n"
+"[b]注æ„:[/b] 此属性仅在 Windows 上实现。"
#: doc/classes/OS.xml:976
msgid ""
@@ -46566,21 +47921,21 @@ msgid ""
"[b]Note:[/b] Setting [code]window_borderless[/code] to [code]false[/code] "
"disables per-pixel transparency."
msgstr ""
+"如果 [code]true[/code],则移除窗框。\n"
+"[b]注æ„:[/b] å°† [code]window_borderless[/code] 设置为 [code]false[/code] å°†"
+"ç¦ç”¨é€åƒç´ é€æ˜Žåº¦ã€‚"
#: doc/classes/OS.xml:980
-#, fuzzy
msgid "If [code]true[/code], the window is fullscreen."
-msgstr "如果[code]true[/code],则暂åœè§†é¢‘。"
+msgstr "如果[code]true[/code],窗å£ä¸ºå…¨å±ã€‚"
#: doc/classes/OS.xml:983
-#, fuzzy
msgid "If [code]true[/code], the window is maximized."
-msgstr "如果[code]true[/code],则暂åœè§†é¢‘。"
+msgstr "如果[code]true[/code],窗å£è¢«æœ€å¤§åŒ–。"
#: doc/classes/OS.xml:986
-#, fuzzy
msgid "If [code]true[/code], the window is minimized."
-msgstr "如果[code]true[/code],则暂åœè§†é¢‘。"
+msgstr "如果[code]true[/code],窗å£è¢«æœ€å°åŒ–。"
#: doc/classes/OS.xml:989
msgid ""
@@ -46595,21 +47950,28 @@ msgid ""
"ProjectSettings.display/window/per_pixel_transparency/enabled] to set it at "
"startup instead."
msgstr ""
+"如果[code]true[/code],则窗å£èƒŒæ™¯æ˜¯é€æ˜Žçš„ï¼Œçª—å£æ¡†æž¶è¢«ç§»é™¤ã€‚\n"
+"使用 [code]get_tree().get_root().set_transparent_background(true)[/code] ç¦ç”¨"
+"主视å£èƒŒæ™¯æ¸²æŸ“。\n"
+"[b]注æ„:[/b]如果ç¦ç”¨[member ProjectSettings.display/window/"
+"per_pixel_transparency/allowed]设置,则该属性无效。\n"
+"[b]注æ„:[/b] 此属性在 HTML5ã€Linuxã€macOSã€Windows å’Œ Android 上实现。对于 "
+"Android,它ä¸èƒ½åœ¨è¿è¡Œæ—¶æ›´æ”¹ã€‚使用 [member ProjectSettings.display/window/"
+"per_pixel_transparency/enabled] 在å¯åŠ¨æ—¶è¿›è¡Œè®¾ç½®ã€‚"
#: doc/classes/OS.xml:995
msgid ""
"The window position relative to the screen, the origin is the top left "
"corner, +Y axis goes to the bottom and +X axis goes to the right."
-msgstr ""
+msgstr "窗å£ç›¸å¯¹äºŽå±å¹•çš„ä½ç½®ï¼ŒåŽŸç‚¹ä¸ºå·¦ä¸Šè§’ï¼Œ+Y è½´å‘下,+X è½´å‘å³ã€‚"
#: doc/classes/OS.xml:998
-#, fuzzy
msgid "If [code]true[/code], the window is resizable by the user."
-msgstr "如果[code]true[/code],则暂åœè§†é¢‘。"
+msgstr "如果 [code]true[/code],用户å¯ä»¥è°ƒæ•´çª—å£å¤§å°ã€‚"
#: doc/classes/OS.xml:1001
msgid "The size of the window (without counting window manager decorations)."
-msgstr ""
+msgstr "窗å£çš„大å°ï¼ˆä¸åŒ…括窗å£ç®¡ç†å™¨è£…饰)。"
#: doc/classes/OS.xml:1006
msgid ""
@@ -46620,13 +47982,12 @@ msgstr ""
"2.1,在网络上使用WebGL 1.0。"
#: doc/classes/OS.xml:1009
-#, fuzzy
msgid ""
"The GLES3 rendering backend. It uses OpenGL ES 3.0 on mobile devices, OpenGL "
"3.3 on desktop platforms and WebGL 2.0 on the web."
msgstr ""
-"GLES2的渲染åŽç«¯ã€‚它在移动设备上使用OpenGL ES 2.0,在桌é¢å¹³å°ä¸Šä½¿ç”¨OpenGL "
-"2.1,在网络上使用WebGL 1.0。"
+"GLES3 渲染åŽç«¯ã€‚它在移动设备上使用 OpenGL ES 3.0,在桌é¢å¹³å°ä¸Šä½¿ç”¨ OpenGL "
+"3.3,在网络上使用 WebGL 2.0。"
#: doc/classes/OS.xml:1012
msgid "Sunday."
@@ -46712,12 +48073,18 @@ msgid ""
"implemented)\n"
"- Android: [code]JNIEnv*[/code] of the application (not yet implemented)"
msgstr ""
+"应用程åºå¥æŸ„:\n"
+"- Windows: [code]HINSTANCE[/code] 的应用程åº\n"
+"- MacOS: [code]NSApplication*[/code] 的应用程åºï¼ˆå°šæœªå®žçŽ°ï¼‰\n"
+"- Android: [code]JNIEnv*[/code] çš„åº”ç”¨ç¨‹åº ï¼ˆå°šæœªå®žçŽ°ï¼‰"
#: doc/classes/OS.xml:1075
msgid ""
"Display handle:\n"
"- Linux: [code]X11::Display*[/code] for the display"
msgstr ""
+"æ˜¾ç¤ºå¥æŸ„:\n"
+"- Linux:[code]X11::Display*[/code] 用于显示"
#: doc/classes/OS.xml:1079
msgid ""
@@ -46728,6 +48095,11 @@ msgid ""
"- Android: [code]jObject[/code] the main android activity (not yet "
"implemented)"
msgstr ""
+"çª—æˆ·å¥æŸ„:\n"
+"- Windows:主窗å£çš„ [code]HWND[/code]。\n"
+"- Linux:主窗å£çš„ [code]X11::Window*[/code]。\n"
+"- MacOS:主窗å£çš„ [code]NSWindow*[/code](尚未实现)\n"
+"- Android:[code]jObject[/code]主è¦çš„安哿´»åЍactivity (尚未实现)"
#: doc/classes/OS.xml:1086
msgid ""
@@ -46735,6 +48107,9 @@ msgid ""
"- Windows: [code]HDC[/code] of the main window drawing context\n"
"- MacOS: [code]NSView*[/code] of the main windows view (not yet implemented)"
msgstr ""
+"窗å£è§†å›¾ï¼š\n"
+"- Windows:主窗å£ç»˜å›¾çŽ¯å¢ƒçš„ [code]HDC[/code]\n"
+"- MacOS:主窗å£è§†å›¾çš„ [code]NSView*[/code](尚未实现)"
#: doc/classes/OS.xml:1091
msgid ""
@@ -46743,6 +48118,10 @@ msgid ""
"- Linux: [code]X11::GLXContext[/code]\n"
"- MacOS: [code]NSOpenGLContext*[/code] (not yet implemented)"
msgstr ""
+"OpenGL上下文:\n"
+"- Windows:[code]HGLRC[/code]\n"
+"- Linux:[code]X11::GLXContext[/code]\n"
+"- MacOS:[code]NSOpenGLContext*[/code] (尚未实现)"
#: doc/classes/OS.xml:1097
msgid "Landscape screen orientation."
@@ -46753,26 +48132,24 @@ msgid "Portrait screen orientation."
msgstr "纵å‘å±å¹•æ–¹å‘。"
#: doc/classes/OS.xml:1103
-#, fuzzy
msgid "Reverse landscape screen orientation."
-msgstr "å转最åŽä¸€ä¸ªæ’¤é”€åŠ¨ä½œã€‚"
+msgstr "å转横å‘å±å¹•æ–¹å‘。"
#: doc/classes/OS.xml:1106
-#, fuzzy
msgid "Reverse portrait screen orientation."
-msgstr "å转最åŽä¸€ä¸ªæ’¤é”€åŠ¨ä½œã€‚"
+msgstr "å转纵å‘å±å¹•æ–¹å‘。"
#: doc/classes/OS.xml:1109
msgid "Uses landscape or reverse landscape based on the hardware sensor."
-msgstr ""
+msgstr "æ ¹æ®ç¡¬ä»¶ä¼ æ„Ÿå™¨ä½¿ç”¨æ¨ªå‘或å呿¨ªå‘。"
#: doc/classes/OS.xml:1112
msgid "Uses portrait or reverse portrait based on the hardware sensor."
-msgstr ""
+msgstr "æ ¹æ®ç¡¬ä»¶ä¼ æ„Ÿå™¨ä½¿ç”¨çºµå‘或åå‘纵å‘。"
#: doc/classes/OS.xml:1115
msgid "Uses most suitable orientation based on the hardware sensor."
-msgstr ""
+msgstr "æ ¹æ®ç¡¬ä»¶ä¼ æ„Ÿå™¨ä½¿ç”¨æœ€åˆé€‚的方å‘。"
#: doc/classes/OS.xml:1118
msgid "Desktop directory path."
@@ -46835,7 +48212,6 @@ msgid "An abstraction of a serialized scene."
msgstr "一个åºåˆ—化场景的抽象。"
#: doc/classes/PackedScene.xml:7
-#, fuzzy
msgid ""
"A simplified interface to a scene file. Provides access to operations and "
"checks that can be performed on the scene resource itself.\n"
@@ -46882,43 +48258,43 @@ msgid ""
msgstr ""
"场景文件的一个简化接å£ã€‚æä¾›å¯¹å¯ä»¥åœ¨åœºæ™¯èµ„æºæœ¬èº«ä¸Šæ‰§è¡Œçš„æ“ä½œå’Œæ£€æŸ¥çš„è®¿é—®ã€‚\n"
"å¯ä»¥ç”¨æ¥å°†ä¸€ä¸ªèŠ‚ç‚¹ä¿å­˜åˆ°ä¸€ä¸ªæ–‡ä»¶ä¸­ã€‚当ä¿å­˜æ—¶ï¼Œè¯¥èŠ‚ç‚¹ä»¥åŠå®ƒæ‰€æ‹¥æœ‰çš„æ‰€æœ‰èŠ‚ç‚¹éƒ½"
-"会被ä¿å­˜ï¼ˆå‚阅[Node]中的属性[code]owner[/code])。\n"
+"会被ä¿å­˜ï¼ˆå‚阅 [Node] 中的属性 [code]owner[/code])。\n"
"[b]注æ„:[/b] 节点ä¸éœ€è¦æ‹¥æœ‰è‡ªå·±ã€‚\n"
"[b]一个加载已ä¿å­˜åœºæ™¯çš„示例:[/b]\n"
"[codeblock]\n"
-"# Use `load()` instead of `preload()` if the path isn't known at compile-"
-"time.\n"
+"# 如果在编译时ä¸çŸ¥é“路径,就使用 `load()`è€Œä¸æ˜¯ `preload()` 。\n"
"var scene = preload(\"res://scene.tscn\").instance()\n"
-"# Add the node as a child of the node the script is attached to.\n"
+"#将该节点作为脚本所ä¾é™„的节点的一个å­èŠ‚ç‚¹ã€‚\n"
"add_child(scene)\n"
"[/codeblock]\n"
-"[b]ä¿å­˜ä¸€ä¸ªå…·æœ‰ä¸åŒæ‰€æœ‰è€…的节点的例å­ï¼š[/b] 下é¢çš„例å­åˆ›å»ºäº†3个对象。"
-"[code]Node2D[/code] ([code]node[/code]), [code]RigidBody2D[/code] "
+"[b]ä¿å­˜ä¸€ä¸ªå…·æœ‰ä¸åŒæ‰€æœ‰è€…节点的例å­ï¼š[/b] 下é¢çš„例å­åˆ›å»ºäº†3个对象:"
+"[code]Node2D[/code] ([code]node[/code]), [code]RigidBody2D[/code] "
"([code]rigid[/code]) 和 [code]CollisionObject2D[/code] ([code]collision[/"
-"code]) 。[code]collision[/code]是[code]rigid[/code]的一个å­èŠ‚ç‚¹ï¼Œrigid 是"
-"[code]node[/code]的一个å­èŠ‚ç‚¹ã€‚åªæœ‰[code]rigid[/code]被[code]node[/code]æ‹¥"
-"有,因此[code]pack[/code]å°†åªä¿å­˜è¿™ä¸¤ä¸ªèŠ‚ç‚¹ï¼Œä¸ä¿å­˜[code]collision[/code]。\n"
+"code]) 。[code]collision[/code] 是 [code]rigid[/code]的一个å­èŠ‚ç‚¹ï¼Œrigid 是 "
+"[code]node[/code]的一个å­èŠ‚ç‚¹ã€‚åªæœ‰ [code]rigid[/code] 被 [code]node[/code]æ‹¥"
+"有,因此 [code]pack[/code]å°†åªä¿å­˜è¿™ä¸¤ä¸ªèŠ‚ç‚¹ï¼Œä¸ä¿å­˜ [code]collision[/"
+"code]。\n"
"[codeblock]\n"
-"# Create the objects.\n"
+"# 创建对象。\n"
"var node = Node2D.new()\n"
"var rigid = RigidBody2D.new()\n"
"var collision = CollisionShape2D.new()\n"
"\n"
-"# Create the object hierarchy.\n"
+"# 创建对象的层次结构。\n"
"rigid.add_child(collision)\n"
"node.add_child(rigid)\n"
"\n"
-"# Change owner of `rigid`, but not of `collision`.\n"
+"# 改å˜`rigid`çš„æ‰€æœ‰è€…ï¼Œä½†ä¸æ”¹å˜`collision`的所有者。\n"
"rigid.owner = node\n"
"\n"
"var scene = PackedScene.new()\n"
-"# Only `node` and `rigid` are now packed.\n"
+"# çŽ°åœ¨åªæœ‰`node`å’Œ`rigid`被打包。\n"
"var result = scene.pack(node)\n"
"if result == OK:\n"
-" var error = ResourceSaver.save(\"res://path/name.scn\", scene) # Or "
+" var error = ResourceSaver.save(\"res://path/name.scn\", scene) # 或者 "
"\"user://...\"\n"
" if error != OK:\n"
-" push_error(\"An error occurred while saving the scene to disk.\")\n"
+" push_error(\"ä¿å­˜åœºæ™¯åˆ°ç£ç›˜æ—¶å‘生错误。\")\n"
"[/codeblock]"
#: doc/classes/PackedScene.xml:47
@@ -47013,7 +48389,6 @@ msgstr ""
"è¿”å›žæœ€åŽæŽ¥æ”¶çš„æ•°æ®åŒ…的错误状æ€ï¼ˆé€šè¿‡[method get_packet]å’Œ[method get_var])。"
#: doc/classes/PacketPeer.xml:34
-#, fuzzy
msgid ""
"Gets a Variant. If [code]allow_objects[/code] (or [member "
"allow_object_decoding]) is [code]true[/code], decoding objects is allowed.\n"
@@ -47021,8 +48396,8 @@ msgid ""
"Do not use this option if the serialized object comes from untrusted sources "
"to avoid potential security threats such as remote code execution."
msgstr ""
-"获å–一个å˜é‡ã€‚如果[code]allow_objects[/code]为[code]true[/code],则å…许对对象"
-"进行解ç ã€‚\n"
+"获å–一个å˜é‡ã€‚如果[code]allow_objects[/code] 或 [member "
+"allow_object_decoding]为[code]true[/code],则å…许对对象进行解ç ã€‚\n"
"[b] 警告:[/b]ååºåˆ—化对象å¯èƒ½åŒ…嫿‰§è¡Œçš„代ç ã€‚如果åºåˆ—化对象æ¥è‡ªä¸å—信任的"
"æºï¼Œè¯·ä¸è¦ä½¿ç”¨æ­¤é€‰é¡¹ï¼Œä»¥é¿å…潜在的安全å¨èƒï¼Œå¦‚è¿œç¨‹ä»£ç æ‰§è¡Œã€‚"
@@ -47031,17 +48406,16 @@ msgid "Sends a raw packet."
msgstr "å‘é€ä¸€ä¸ªåŽŸå§‹æ•°æ®åŒ…。"
#: doc/classes/PacketPeer.xml:50
-#, fuzzy
msgid ""
"Sends a [Variant] as a packet. If [code]full_objects[/code] (or [member "
"allow_object_decoding]) is [code]true[/code], encoding objects is allowed "
"(and can potentially include code)."
msgstr ""
-"å°†[Variant]作为数æ®åŒ…å‘é€ã€‚如果[code]full_objects[/code]为[code]true[/code],"
-"则å…许对对象进行编ç ï¼ˆå¹¶ä¸”å¯èƒ½åŒ…å«ä»£ç ï¼‰ã€‚"
+"å°†[Variant]作为数æ®åŒ…å‘é€ã€‚如果[code]full_objects[/code] 或 [member "
+"allow_object_decoding]为[code]true[/code],则å…许对对象进行编ç ï¼ˆå¹¶ä¸”å¯èƒ½åŒ…å«"
+"代ç ï¼‰ã€‚"
#: doc/classes/PacketPeer.xml:56
-#, fuzzy
msgid ""
"[i]Deprecated.[/i] Use [code]get_var[/code] and [code]put_var[/code] "
"parameters instead.\n"
@@ -47051,6 +48425,8 @@ msgid ""
"Do not use this option if the serialized object comes from untrusted sources "
"to avoid potential security threats such as remote code execution."
msgstr ""
+"[i]已废弃。[/i] 你应该使用 [code]get_var[/code] å’Œ [code]put_var[/code] 傿•°"
+"æ¥ä»£æ›¿å®ƒã€‚\n"
"如果[code]true[/code],多人游æˆAPIå°†å…许在RPC/RSETs期间对对象进行编ç å’Œè§£"
"ç ã€‚\n"
"[b]警告:[/b] ååºåˆ—化的对象å¯èƒ½åŒ…å«ä¼šè¢«æ‰§è¡Œçš„代ç ã€‚如果åºåˆ—化的对象æ¥è‡ªä¸å—"
@@ -47084,6 +48460,11 @@ msgid ""
"are otherwise valid. If this is a concern, you may want to use automatically "
"managed certificates with a short validity period."
msgstr ""
+"这个类表示DTLS对等连接。它å¯ä»¥ç”¨æ¥è¿žæŽ¥åˆ°DTLSæœåŠ¡å™¨ï¼Œç”±[method DTLSServer."
+"take_connection]返回。\n"
+"[b]警告:[/b]当å‰ä¸æ”¯æŒSSL/TLSè¯ä¹¦æ’¤é”€å’Œè¯ä¹¦å›ºå®šã€‚åªè¦æ’¤é”€çš„è¯ä¹¦åœ¨å…¶ä»–情况下是"
+"有效的,都将被接å—。如果这是一个问题,您å¯èƒ½å¸Œæœ›ä½¿ç”¨å…·æœ‰çŸ­æœ‰æ•ˆæœŸçš„自动管ç†è¯"
+"书。"
#: doc/classes/PacketPeerDTLS.xml:20
msgid ""
@@ -47174,7 +48555,6 @@ msgid "Closes the UDP socket the [PacketPeerUDP] is currently listening on."
msgstr "关闭[PacketPeerUDP]当剿­£åœ¨ä¾¦å¬çš„UDP套接字。"
#: doc/classes/PacketPeerUDP.xml:23
-#, fuzzy
msgid ""
"Calling this method connects this UDP peer to the given [code]host[/code]/"
"[code]port[/code] pair. UDP is in reality connectionless, so this option "
@@ -47189,13 +48569,13 @@ msgid ""
"technique like SSL or DTLS if you feel like your application is transferring "
"sensitive information."
msgstr ""
-"调用此方法将此UDP对等连接到给定的[code]host[/code]/[code]port[/code]对。UDP实"
-"际上是无连接的,因此此选项仅æ„å‘³ç€æ¥è‡ªä¸åŒåœ°å€çš„传入数æ®åŒ…将自动丢弃,并且传"
-"出数æ®åŒ…始终å‘é€åˆ°è¿žæŽ¥çš„地å€ï¼ˆä¸å…许将æ¥è°ƒç”¨[method set_dest_address])。此方"
-"法ä¸å‘远程对等方å‘é€ä»»ä½•æ•°æ®ï¼Œä¸ºæ­¤ï¼Œè¯·åƒå¾€å¸¸ä¸€æ ·ä½¿ç”¨[method PacketPeer."
-"put_var]或[method PacketPeer.put_packet]。å¦è¯·å‚阅[UDPServer]。\n"
-"注æ„:连接到远程对等体无助于防止IPæ¬ºéª—ç­‰æ¶æ„æ”»å‡»ã€‚å¦‚æžœæ‚¨è§‰å¾—åº”ç”¨ç¨‹åºæ­£åœ¨ä¼ è¾“"
-"æ•æ„Ÿä¿¡æ¯ï¼Œè¯·è€ƒè™‘使用SSL或DTLS等加密技术。"
+"调用此方法将UDP对等体连接到给定的[code]host[/code]/[code]port[/code]对。UDP实"
+"é™…ä¸Šæ˜¯æ— è¿žæŽ¥çš„ï¼Œæ‰€ä»¥è¿™ä¸ªé€‰é¡¹åªæ„å‘³ç€æ¥è‡ªä¸åŒåœ°å€çš„入包被自动丢弃,而出包总是"
+"被å‘é€åˆ°è¿žæŽ¥çš„地å€(ä¸å…许将æ¥è°ƒç”¨[method set_dest_address])。该方法ä¸å‘远程对"
+"等体å‘é€ä»»ä½•æ•°æ®ï¼Œè¦å‘逿•°æ®ï¼Œè¯·ä½¿ç”¨[method PacketPeer.put_var]或[method "
+"PacketPeer.put_pakcet]。å‚è§[UDPServer]。\n"
+"[b]注æ„:[/b]连接到远程对等体并ä¸èƒ½é˜²æ­¢IPæ¬ºéª—ç­‰æ¶æ„攻击。如果您觉得您的应用程"
+"åºæ­£åœ¨ä¼ è¾“æ•æ„Ÿä¿¡æ¯ï¼Œå¯ä»¥è€ƒè™‘使用SSL或DTLS等加密技术。"
#: doc/classes/PacketPeerUDP.xml:30
msgid ""
@@ -47226,7 +48606,6 @@ msgid "Returns whether this [PacketPeerUDP] is listening."
msgstr "返回这个[PacketPeerUDP]æ˜¯å¦æ­£åœ¨ç›‘å¬ã€‚"
#: doc/classes/PacketPeerUDP.xml:56
-#, fuzzy
msgid ""
"Joins the multicast group specified by [code]multicast_address[/code] using "
"the interface identified by [code]interface_name[/code].\n"
@@ -47235,11 +48614,12 @@ msgid ""
"[b]Note:[/b] Some Android devices might require the "
"[code]CHANGE_WIFI_MULTICAST_STATE[/code] permission for multicast to work."
msgstr ""
-"使用[code]接å£åç§°[/code]标识的接å£åŠ å…¥[code]多播地å€[/code]指定的多播组。\n"
+"使用[code]interface_name[/code]标识的接å£åŠ å…¥[code]multicast_address[/code]指"
+"定的多播组。\n"
"您å¯ä»¥ä½¿ç”¨å¤šä¸ªæŽ¥å£åŠ å…¥åŒä¸€ä¸ªå¤šæ’­ç»„。使用[method IP.get_local_interfaces]了解"
"哪些接å£å¯ç”¨ã€‚\n"
-"注æ„:一些安å“设备å¯èƒ½éœ€è¦[code]CHANGE _ WIFI _ MULTICAST _ STATE[/code]æƒé™æ‰"
-"能进行多播。"
+"[b]注æ„:[/b]一些安å“设备å¯èƒ½éœ€è¦[code]CHANGE _ WIFI _ MULTICAST _ STATE[/"
+"code]æƒé™æ‰èƒ½è¿›è¡Œå¤šæ’­ã€‚"
#: doc/classes/PacketPeerUDP.xml:66
msgid ""
@@ -47274,7 +48654,6 @@ msgstr ""
"地å€çš„æŽ¥å£ï¼ˆå¦‚æžœä¸å­˜åœ¨å…·æœ‰è¯¥åœ°å€çš„æŽ¥å£ï¼Œåˆ™å¤±è´¥ï¼‰ã€‚"
#: doc/classes/PacketPeerUDP.xml:85
-#, fuzzy
msgid ""
"Enable or disable sending of broadcast packets (e.g. "
"[code]set_dest_address(\"255.255.255.255\", 4343)[/code]. This option is "
@@ -47286,11 +48665,10 @@ msgstr ""
"å¯ç”¨æˆ–ç¦ç”¨å¹¿æ’­æ•°æ®åŒ…çš„å‘é€ï¼ˆä¾‹å¦‚:"
"[code]set_dest_address(\"255.255.255.255\", 4343)[/code]。这个选项在默认情况"
"下是ç¦ç”¨çš„。\n"
-"注æ„:一些安å“设备å¯èƒ½éœ€è¦[code]CHANGE_WIFI_MULTICAST_STATE[/code]æƒé™å’Œè¿™ä¸ª"
-"选项被å¯ç”¨æ¥æŽ¥æ”¶å¹¿æ’­åŒ…。"
+"[b]注æ„:[/b]一些安å“设备å¯èƒ½éœ€è¦[code]CHANGE_WIFI_MULTICAST_STATE[/code]æƒé™"
+"和本选项被å¯ç”¨æ¥æŽ¥æ”¶å¹¿æ’­åŒ…。"
#: doc/classes/PacketPeerUDP.xml:94
-#, fuzzy
msgid ""
"Sets the destination address and port for sending packets and variables. A "
"hostname will be resolved using DNS if needed.\n"
@@ -47298,8 +48676,8 @@ msgid ""
"packets to a broadcast address (e.g. [code]255.255.255.255[/code])."
msgstr ""
"设置å‘逿•°æ®åŒ…å’Œå˜é‡çš„目标地å€å’Œç«¯å£ã€‚如果需è¦ï¼Œå°†ä½¿ç”¨DNSè§£æžä¸€ä¸ªä¸»æœºå。\n"
-"注æ„:在å‘广播地å€ï¼ˆä¾‹å¦‚:[code]255.255.255.255[/code])å‘逿•°æ®åŒ…之å‰ï¼Œå¿…é¡»"
-"å¯ç”¨[method set_broadcast_enabled]。"
+"[b]注æ„:[/b]在å‘广播地å€ï¼ˆä¾‹å¦‚:[code]255.255.255.255[/code])å‘逿•°æ®åŒ…之"
+"å‰ï¼Œå¿…é¡»å¯ç”¨[method set_broadcast_enabled]。"
#: doc/classes/PacketPeerUDP.xml:101
msgid ""
@@ -47319,6 +48697,20 @@ msgid ""
" return\n"
"[/codeblock]"
msgstr ""
+"等待数æ®åŒ…到达侦å¬ç«¯å£ã€‚å‚è§[method listen]。\n"
+"[b] 注æ„:[/b][method wait]一旦被调用就ä¸èƒ½è¢«ä¸­æ–­ã€‚è¿™å¯ä»¥é€šè¿‡å…许å¦ä¸€æ–¹å‘é€ä¸€"
+"个特定的“death pillâ€åŒ…æ¥è§£å†³ï¼Œå¦‚下所示:\n"
+"[codeblock]\n"
+"# Server\n"
+"socket.set_dest_address(\"127.0.0.1\", 789)\n"
+"socket.put_packet(\"Time to stop\".to_ascii())\n"
+"\n"
+"# Client\n"
+"while socket.wait() == OK:\n"
+" var data = socket.get_packet().get_string_from_ascii()\n"
+" if data == \"Time to stop\":\n"
+" return\n"
+"[/codeblock]"
#: doc/classes/Panel.xml:4
msgid "Provides an opaque background for [Control] children."
@@ -47343,7 +48735,7 @@ msgstr "https://godotengine.org/asset-library/asset/523"
#: doc/classes/Panel.xml:20
msgid "The style of this [Panel]."
-msgstr "这个[Panel]的样å¼ã€‚"
+msgstr "这个 [Panel] 的样å¼ã€‚"
#: doc/classes/PanelContainer.xml:4
msgid "Panel container type."
@@ -47354,19 +48746,17 @@ msgid ""
"Panel container type. This container fits controls inside of the delimited "
"area of a stylebox. It's useful for giving controls an outline."
msgstr ""
-"颿¿å®¹å™¨ç±»åž‹ã€‚æ­¤å®¹å™¨é€‚åˆæ ·å¼æ¡†åˆ†éš”区域内的控件。它对于给控件一个æè¾¹å¾ˆæœ‰ç”¨ã€‚"
+"颿¿å®¹å™¨ç±»åž‹ã€‚此容器会将控件放入样å¼ç›’所框定的区域内,方便为控件æä¾›è½®å»“。"
#: doc/classes/PanelContainer.xml:18
msgid "The style of [PanelContainer]'s background."
-msgstr "[PanelContainer]的背景样å¼ã€‚"
+msgstr "[PanelContainer] 的背景样å¼ã€‚"
#: doc/classes/PanoramaSky.xml:4
-#, fuzzy
msgid "A type of [Sky] used to draw a background texture."
-msgstr "使用[Material]å’Œ[Sky]æ¥ç»˜åˆ¶èƒŒæ™¯çº¹ç†ã€‚"
+msgstr "一ç§ç”¨æ¥ç»˜åˆ¶èƒŒæ™¯è´´å›¾çš„ [Sky]。"
#: doc/classes/PanoramaSky.xml:7
-#, fuzzy
msgid ""
"A resource referenced in an [Environment] that is used to draw a background. "
"The Panorama sky functions similar to skyboxes in other engines, except it "
@@ -47378,17 +48768,17 @@ msgid ""
"cubemap_to_panorama.html]this tool[/url] to convert a cube map to an "
"equirectangular sky map."
msgstr ""
-"在[Sky]中引用的资æºï¼Œç”¨äºŽç»˜åˆ¶èƒŒæ™¯ã€‚全景天空æè´¨çš„功能类似于其他引擎中的天空"
-"ç›’ï¼Œé™¤äº†å®ƒä½¿ç”¨ç­‰è¾¹çŸ©å½¢å¤©ç©ºåœ°å›¾è€Œä¸æ˜¯ç«‹æ–¹ä½“地图。\n"
-"强烈建议使用HDR全景图,以获得准确ã€é«˜è´¨é‡çš„å射。为此,Godot支æŒRadiance HDR "
-"([code]. HDR [/code])å’ŒOpenEXR ([code].exr[/code])å›¾åƒæ ¼å¼ã€‚\n"
+"在 [Environment] 中引用的用于绘制背景的资æºã€‚全景天空的功能类似于其他引擎的天"
+"空盒,区别在于它使用的是等è·åœ†æŸ±æŠ•å½±çš„å¤©ç©ºè´´å›¾è€Œä¸æ˜¯ç«‹æ–¹ä½“贴图。\n"
+"强烈建议使用 HDR 全景图,以获得准确ã€é«˜è´¨é‡çš„å射。为此,Godot æ”¯æŒ Radiance "
+"HDR([code].hdr[/code])和 OpenEXR([code].exr[/code]ï¼‰å›¾åƒæ ¼å¼ã€‚\n"
"您å¯ä»¥ä½¿ç”¨[url=https://danilw.github.io/GLSL-howto/cubemap_to_panorama_js/"
-"cubemap_to_panorama.html]这个工具[/url]将立方体地图转æ¢ä¸ºç­‰è§’的天空地图。"
+"cubemap_to_panorama.html]这个工具[/url]将立方体贴图转æ¢ä¸ºç­‰è·åœ†æŸ±æŠ•影的天空贴"
+"图。"
#: doc/classes/PanoramaSky.xml:17
-#, fuzzy
msgid "[Texture] to be applied to the PanoramaSky."
-msgstr "[Texture2D]将被应用到[PanoramaSkyMaterial]。"
+msgstr "将被应用到 PanoramaSky 的 [Texture]。"
#: doc/classes/ParallaxBackground.xml:4
msgid "A node used to create a parallax scrolling background."
@@ -47402,25 +48792,25 @@ msgid ""
"2D game. If not used with a [Camera2D], you must manually calculate the "
"[member scroll_offset]."
msgstr ""
-"一个ParallaxBackground使用一个或多个[ParallaxLayer]å­èŠ‚ç‚¹æ¥åˆ›å»ºè§†å·®æ•ˆæžœã€‚æ¯ä¸ª"
-"[ParallaxLayer]å¯ä»¥ä½¿ç”¨æˆå‘˜ParallaxLayer.motion_offset以ä¸åŒçš„速度移动。这在"
-"2D游æˆä¸­åˆ›é€ äº†ä¸€ç§æ·±åº¦é”™è§‰ã€‚如果没有与[Camera2D]一起使用,你必须手动计算"
-"[member scroll_offset]。"
+"ParallaxBackground 使用一个或多个 [ParallaxLayer] å­èŠ‚ç‚¹æ¥åˆ›å»ºè§†å·®æ•ˆæžœã€‚æ¯ä¸ª "
+"[ParallaxLayer] å¯ä»¥ä½¿ç”¨ [member ParallaxLayer.motion_offset] 以ä¸åŒçš„速度移"
+"动。这在 2D 游æˆä¸­å¯ä»¥åˆ›é€ ä¸€ç§æ·±åº¦é”™è§‰ã€‚如果没有与 [Camera2D] 一起使用,你必"
+"须手动计算 [member scroll_offset]。"
#: doc/classes/ParallaxBackground.xml:16
msgid "The base position offset for all [ParallaxLayer] children."
-msgstr "所有[ParallaxLayer]å­å…ƒç´ çš„基本ä½ç½®å移。"
+msgstr "所有 [ParallaxLayer] å­å…ƒç´ çš„基本ä½ç½®å移。"
#: doc/classes/ParallaxBackground.xml:19
msgid "The base motion scale for all [ParallaxLayer] children."
-msgstr "所有[ParallaxLayer]å­å…ƒç´ çš„基本移动比例。"
+msgstr "所有 [ParallaxLayer] å­å…ƒç´ çš„基本移动比例。"
#: doc/classes/ParallaxBackground.xml:22
msgid ""
"If [code]true[/code], elements in [ParallaxLayer] child aren't affected by "
"the zoom level of the camera."
msgstr ""
-"如果[code]为true[/code], [ParallaxLayer]å­å…ƒç´ å°†ä¸å—相机缩放级别的影å“。"
+"为 [code]true[/code] 时,[ParallaxLayer] å­å…ƒç´ å°†ä¸å—相机缩放级别的影å“。"
#: doc/classes/ParallaxBackground.xml:25
msgid ""
@@ -47451,7 +48841,7 @@ msgstr ""
#: doc/classes/ParallaxLayer.xml:4
msgid "A parallax scrolling layer to be used with [ParallaxBackground]."
-msgstr "使用[ParallaxBackground]的视差滚动层。"
+msgstr "使用 [ParallaxBackground] 的视差滚动层。"
#: doc/classes/ParallaxLayer.xml:7
msgid ""
@@ -47462,21 +48852,19 @@ msgid ""
"[b]Note:[/b] Any changes to this node's position and scale made after it "
"enters the scene will be ignored."
msgstr ""
-"一个ParallaxLayer必须是一个[ParallaxBackground]节点的å­èŠ‚ç‚¹ã€‚æ¯ä¸ª"
-"ParallaxLayer都å¯ä»¥è®¾ç½®ä¸ºç›¸å¯¹äºŽç›¸æœºç§»åŠ¨æˆ– [member ParallaxBackground."
-"scroll_offset] 值。\n"
+"ParallaxLayer 必须是 [ParallaxBackground] 节点的å­èŠ‚ç‚¹ã€‚æ¯ä¸ª ParallaxLayer 都"
+"å¯ä»¥è®¾ç½®ä¸ºç›¸å¯¹äºŽç›¸æœºç§»åŠ¨æˆ– [member ParallaxBackground.scroll_offset] 值。\n"
"该节点的å­èŠ‚ç‚¹å°†å—其滚动åç§»é‡çš„å½±å“。\n"
-"[b]注æ„:[/b]当该节点进入场景åŽï¼Œå¯¹å…¶ä½ç½®å’Œæ¯”例的任何改å˜éƒ½å°†è¢«å¿½ç•¥ã€‚"
+"[b]注æ„:[/b] 当该节点进入场景åŽï¼Œå¯¹å…¶ä½ç½®å’Œæ¯”例的任何改å˜éƒ½å°†è¢«å¿½ç•¥ã€‚"
#: doc/classes/ParallaxLayer.xml:17
-#, fuzzy
msgid ""
"The ParallaxLayer's [Texture] mirroring. Useful for creating an infinite "
"scrolling background. If an axis is set to [code]0[/code], the [Texture] "
"will not be mirrored."
msgstr ""
-"视差图层的Texture2D镜åƒã€‚ç”¨äºŽåˆ›å»ºæ— é™æ»šåŠ¨çš„èƒŒæ™¯ã€‚å¦‚æžœä¸€ä¸ªè½´è¢«è®¾ç½®ä¸º[code]0[/"
-"code], [Texture2D]å°†ä¸ä¼šè¢«é•œåƒã€‚"
+"视差图层的[Texture]镜åƒã€‚ç”¨äºŽåˆ›å»ºæ— é™æ»šåŠ¨çš„èƒŒæ™¯ã€‚å¦‚æžœä¸€ä¸ªè½´è¢«è®¾ç½®ä¸º[code]0[/"
+"code], [Texture]å°†ä¸ä¼šè¢«é•œåƒã€‚"
#: doc/classes/ParallaxLayer.xml:20
msgid ""
@@ -47493,9 +48881,8 @@ msgid ""
msgstr "å¤åˆ¶è§†å·®å›¾å±‚çš„è¿åŠ¨ã€‚å¦‚æžœä¸€ä¸ªè½´è¢«è®¾ç½®ä¸º[code]0[/code],它将ä¸ä¼šæ»šåŠ¨ã€‚"
#: doc/classes/Particles.xml:4
-#, fuzzy
msgid "GPU-based 3D particle emitter."
-msgstr "基于CPUçš„3Dç²’å­å‘射器。"
+msgstr "基于GPUçš„3Dç²’å­å‘射器。"
#: doc/classes/Particles.xml:7
msgid ""
@@ -47516,13 +48903,24 @@ msgid ""
"AABB[/b]. Otherwise, particles may suddenly disappear depending on the "
"camera position and angle."
msgstr ""
+"用于创建å„ç§ç²’å­ç³»ç»Ÿå’Œæ•ˆæžœçš„3Dç²’å­èŠ‚ç‚¹ã€‚[Particles]实现了是å‘射器以给定的速率"
+"产生一定数é‡çš„ç²’å­ã€‚\n"
+"使用[code]process_material[/code]属性添加[ParticlesMaterial]æ¥é…置粒å­å¤–è§‚å’Œ"
+"行为。或者,您å¯ä»¥æ·»åŠ ä¸€ä¸ªå°†åº”ç”¨äºŽæ‰€æœ‰ç²’å­çš„[ShaderMaterial]。\n"
+"[b]注æ„:[/b][Particles]仅在使用GLES3渲染器时有效。如果使用GLES2渲染器,请改用"
+"[CPUParticles]。您å¯ä»¥é€šè¿‡é€‰æ‹©èŠ‚ç‚¹ï¼Œå•击三维编辑器视窗顶部的[b]Particles[/b]"
+"èœå•,然åŽé€‰æ‹©[b]转æ¢ä¸º CPUParticles[/b],将[Particles]转æ¢ä¸º"
+"[CPUParticles]。\n"
+"[b]注æ„:[/b]在处ç†ç²’å­èŠ‚ç‚¹åŽï¼Œè®°å¾—é€šè¿‡é€‰æ‹©å®ƒæ¥æ›´æ–°å…¶[member "
+"visibility_aabb],å•击3D编辑器视窗顶部的[b]Particles[/b]èœå•,然åŽé€‰æ‹©[b]生æˆ"
+"å¯è§ AABB[/b]。å¦åˆ™ï¼Œç²’å­å¯èƒ½ä¼šç”±äºŽç›¸æœºä½ç½®å’Œè§’度的改å˜çªç„¶æ¶ˆå¤±ã€‚"
#: doc/classes/Particles.xml:13
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/3d/vertex_animation/"
"controlling_thousands_of_fish.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/3d/vertex_animation/"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/3d/vertex_animation/"
"controlling_thousands_of_fish.html"
#: doc/classes/Particles.xml:20
@@ -47612,15 +49010,19 @@ msgid ""
"shadows, you may want to enlarge this AABB to ensure the shadow is updated "
"when particles are off-screen."
msgstr ""
+"[AABB] 确定节点的区域,该区域需è¦åœ¨å±å¹•上å¯è§æ‰èƒ½ä½¿ç²’å­ç³»ç»Ÿå¤„于活动状æ€ã€‚\n"
+"如果在节点进入/退出å±å¹•æ—¶ç²’å­çªç„¶å‡ºçް/消失,则增大框。 [AABB] å¯ä»¥é€šè¿‡ä»£ç æˆ–"
+"使用 [b]Particles → Generate AABB[/b] 编辑器工具生æˆã€‚\n"
+"[b]注æ„:[/b] 如果使用中的 [ParticlesMaterial] é…置为投射阴影,您å¯èƒ½éœ€è¦æ”¾å¤§"
+"æ­¤ AABB 以确ä¿åœ¨ç²’å­ç¦»å±æ—¶æ›´æ–°é˜´å½±ã€‚"
#: doc/classes/Particles.xml:118
msgid "Maximum number of draw passes supported."
msgstr "支æŒçš„æœ€å¤§æŠ½å–次数。"
#: doc/classes/Particles2D.xml:4
-#, fuzzy
msgid "GPU-based 2D particle emitter."
-msgstr "基于CPUçš„2Dç²’å­å‘射器。"
+msgstr "基于GPUçš„2Dç²’å­å‘射器。"
#: doc/classes/Particles2D.xml:7
msgid ""
@@ -47643,6 +49045,19 @@ msgid ""
"[b]Note:[/b] Unlike [CPUParticles2D], [Particles2D] currently ignore the "
"texture region defined in [AtlasTexture]s."
msgstr ""
+"用于创建å„ç§ç²’å­ç³»ç»Ÿå’Œæ•ˆæžœçš„ 2D ç²’å­èŠ‚ç‚¹ã€‚ [Particles2D] 具有一个å‘射器,å¯ä»¥"
+"以给定的速率生æˆä¸€å®šæ•°é‡çš„ç²’å­ã€‚\n"
+"使用 [code]process_material[/code] 属性添加 [ParticlesMaterial] 以é…置粒å­å¤–"
+"观和行为。或者,您å¯ä»¥æ·»åŠ å°†åº”ç”¨äºŽæ‰€æœ‰ç²’å­çš„ [ShaderMaterial]。\n"
+"[b]注æ„:[/b] [Particles2D] 仅在使用 GLES3 渲染器时有效。如果使用 GLES2 渲染"
+"器,请改用 [CPUParticles2D]。您å¯ä»¥é€šè¿‡é€‰æ‹©èŠ‚ç‚¹å°† [Particles2D] 转æ¢ä¸º "
+"[CPUParticles2D],å•击 2D 编辑器视å£é¡¶éƒ¨çš„ [b]Particles[/b] èœå•,然åŽé€‰æ‹© "
+"[b]Convert to CPUParticles2D[/b]。\n"
+"[b]注æ„:[/b]在粒å­èŠ‚ç‚¹ä¸Šå·¥ä½œåŽï¼Œè®°å¾—é€šè¿‡é€‰æ‹©å®ƒæ¥æ›´æ–°å®ƒçš„[member "
+"visibility_rect],å•击2D编辑器视å£é¡¶éƒ¨çš„[b]ç²’å­[/b]èœå•,然åŽé€‰æ‹©[b]生æˆå¯è§"
+"矩形 [/b]。å¦åˆ™ï¼Œæ ¹æ®ç›¸æœºä½ç½®å’Œè§’度,粒å­å¯èƒ½ä¼šçªç„¶æ¶ˆå¤±ã€‚\n"
+"[b]注:[/b]与[CPUParticles2D]ä¸åŒï¼Œ[Particles2D]ç›®å‰å¿½ç•¥[AtlasTexture]s中定义"
+"的纹ç†åŒºåŸŸã€‚"
#: doc/classes/Particles2D.xml:21
msgid "Returns a rectangle containing the positions of all existing particles."
@@ -47660,14 +49075,15 @@ msgid ""
"exits the screen. The [Rect2] can be grown via code or with the [b]Particles "
"→ Generate Visibility Rect[/b] editor tool."
msgstr ""
+"[Rect2] 确定节点的区域,该区域需è¦åœ¨å±å¹•上å¯è§æ‰èƒ½ä½¿ç²’å­ç³»ç»Ÿå¤„于活动状æ€ã€‚\n"
+"如果当节点进入/退出å±å¹•æ—¶ç²’å­çªç„¶å‡ºçް/消失,则增长矩形。 [Rect2] å¯ä»¥é€šè¿‡ä»£ç "
+"或使用 [b]Particles → Generate Visibility Rect[/b] 编辑器工具生æˆã€‚"
#: doc/classes/ParticlesMaterial.xml:4
-#, fuzzy
msgid "Particle properties for [Particles] and [Particles2D] nodes."
-msgstr "[GPUParticles3D]å’Œ[GPUParticles2D]节点的粒å­å±žæ€§ã€‚"
+msgstr "[Particles] å’Œ [Particles2D] 节点的粒å­å±žæ€§ã€‚"
#: doc/classes/ParticlesMaterial.xml:7
-#, fuzzy
msgid ""
"ParticlesMaterial defines particle properties and behavior. It is used in "
"the [code]process_material[/code] of [Particles] and [Particles2D] emitter "
@@ -47682,14 +49098,14 @@ msgid ""
"ratio of [code]0.4[/code] would scale the original property between "
"[code]0.4-1.0[/code] of its original value."
msgstr ""
-"ParticlesMaterial定义了粒å­çš„属性和行为。它在[GPUParticles3D]å’Œ"
-"[GPUParticles2D]å‘射器节点的[code]process_material[/code]中使用。\n"
-"当å‘å°„æ—¶ï¼Œè¿™äº›ææ–™çš„一些属性被应用到æ¯ä¸ªç²’å­ä¸Šï¼Œè€Œå…¶ä»–çš„å¯ä»¥æœ‰ä¸€ä¸ª"
-"[CurveTexture]应用到在粒å­çš„生命周期中å˜åŒ–的值。\n"
-"å½“éšæœºæ¯”çŽ‡åº”ç”¨äºŽä¸€ä¸ªå±žæ€§æ—¶ï¼Œå®ƒè¢«ç”¨äºŽæŒ‰éšæœºæ•°é‡ç¼©æ”¾è¯¥å±žæ€§ã€‚éšæœºæ¯”率用于在"
-"[code]1.0[/code]和一个å°äºŽ1çš„éšæœºæ•°ä¹‹é—´æ’å…¥ï¼Œç»“æžœä¹˜ä»¥è¯¥å±žæ€§å¾—åˆ°éšæœºå±žæ€§ã€‚例"
-"如,[code]0.4[/code]çš„éšæœºæ¯”率将使原始属性在其原始值的[code]0.4-1.0[/code]之"
-"间缩放。"
+"ParticlesMaterial定义了粒å­çš„属性和行为。它å¯ç”¨äºŽ[Particles]å’Œ[Particles2D]å‘"
+"射器节点的[code]process_material[/code]中。\n"
+"这个æè´¨çš„一些属性在å‘射时被应用到æ¯ä¸ªç²’å­ä¸Šï¼Œè€Œå…¶ä»–属性å¯ä»¥åº”用"
+"[CurveTexture]æ¥åœ¨ç²’å­çš„ç”Ÿå‘½å‘¨æœŸä¸­æ”¹å˜æ•°å€¼ã€‚\n"
+"å½“éšæœºæ€§æ¯”率被应用到一个属性时,用æ¥ä»¥ä¸€ä¸ªéšæœºé‡æ¥æ‰©å±•è¯¥å±žæ€§ã€‚éšæœºçŽ‡ç”¨æ¥åœ¨"
+"[code]1.0[/code]和一个å°äºŽ1çš„éšæœºæ•°ä¹‹é—´æ’å€¼ï¼Œç»“æžœä¹˜ä»¥å±žæ€§ï¼Œå¾—åˆ°éšæœºçš„属性。例"
+"如,一个[code]0.4[/code]çš„éšæœºæ¯”率将在[code]0.4-1.0[/code]之间缩放原始属性的"
+"原值。"
#: doc/classes/ParticlesMaterial.xml:18
msgid "Returns [code]true[/code] if the specified flag is enabled."
@@ -47700,9 +49116,8 @@ msgid "Returns the randomness ratio associated with the specified parameter."
msgstr "è¿”å›žä¸ŽæŒ‡å®šå‚æ•°å…³è”çš„éšæœºæ¯”率。"
#: doc/classes/ParticlesMaterial.xml:39
-#, fuzzy
msgid "Returns the [Texture] used by the specified parameter."
-msgstr "è¿”å›žæŒ‡å®šå‚æ•°ä½¿ç”¨çš„[Texture2D]。"
+msgstr "è¿”å›žæŒ‡å®šå‚æ•°ä½¿ç”¨çš„ [Texture]。"
#: doc/classes/ParticlesMaterial.xml:47
msgid ""
@@ -47719,29 +49134,26 @@ msgid "Sets the randomness ratio for the specified [enum Parameter]."
msgstr "为指定的[enum Parameter]è®¾ç½®éšæœºæ¯”率。"
#: doc/classes/ParticlesMaterial.xml:71
-#, fuzzy
msgid "Sets the [Texture] for the specified [enum Parameter]."
-msgstr "为指定的[enum Parameter]设置[Texture2D]。"
+msgstr "为指定的 [enum Parameter] 设置 [Texture]。"
#: doc/classes/ParticlesMaterial.xml:77
-#, fuzzy
msgid ""
"Initial rotation applied to each particle, in degrees.\n"
"Only applied when [member flag_disable_z] or [member flag_rotate_y] are "
"[code]true[/code] or the [SpatialMaterial] being used to draw the particle "
"is using [constant SpatialMaterial.BILLBOARD_PARTICLES]."
msgstr ""
-"åˆå§‹æ—‹è½¬ä½œç”¨äºŽæ¯ä¸ªç²’å­ï¼Œä»¥åº¦æ•°è¡¨ç¤ºã€‚\n"
-"仅当[member flag_disable_z]或[member flag_rotate_y]为[code]true[/code]或"
-"[BaseMaterial3D]ç”¨äºŽç»˜åˆ¶ç²’å­æ—¶ä½¿ç”¨[constant BaseMaterial3D. "
-"billboard_particles]。"
+"应用于æ¯ä¸ªç²’å­çš„åˆå§‹æ—‹è½¬ï¼Œä»¥åº¦ä¸ºå•ä½ã€‚\n"
+"仅在 [member flag_disable_z] 或 [member flag_rotate_y] 为 [code]true[/code] "
+"或用于绘制粒å­çš„ [SpatialMaterial] 使用 [constant SpatialMaterial."
+"BILLBOARD_PARTICLES] 时应用。"
#: doc/classes/ParticlesMaterial.xml:81
msgid "Each particle's rotation will be animated along this [CurveTexture]."
msgstr "æ¯ä¸ªç²’å­çš„æ—‹è½¬å°†æ²¿ç€è¿™ä¸ª[CurveTexture]动画。"
#: doc/classes/ParticlesMaterial.xml:87
-#, fuzzy
msgid ""
"Initial angular velocity applied to each particle. Sets the speed of "
"rotation of the particle.\n"
@@ -47749,10 +49161,10 @@ msgid ""
"[code]true[/code] or the [SpatialMaterial] being used to draw the particle "
"is using [constant SpatialMaterial.BILLBOARD_PARTICLES]."
msgstr ""
-"æ¯ä¸ªç²’å­çš„åˆå§‹è§’速度。设置粒å­çš„æ—‹è½¬é€Ÿåº¦ã€‚\n"
-"仅当[member flag_disable_z]或[member flag_rotate_y]为[code]true[/code]或"
-"[BaseMaterial3D]ç”¨äºŽç»˜åˆ¶ç²’å­æ—¶ä½¿ç”¨[constant BaseMaterial3D. "
-"billboard_particles]。"
+"应用于æ¯ä¸ªç²’å­çš„åˆå§‹è§’速度。设置粒å­çš„æ—‹è½¬é€Ÿåº¦ã€‚\n"
+"仅在 [member flag_disable_z] 或 [member flag_rotate_y] 为 [code]true[/code] "
+"或用于绘制粒å­çš„ [SpatialMaterial] 使用 [constant SpatialMaterial."
+"BILLBOARD_PARTICLES] 时应用。"
#: doc/classes/ParticlesMaterial.xml:91
msgid "Each particle's angular velocity will vary along this [CurveTexture]."
@@ -47767,16 +49179,15 @@ msgid "Each particle's animation speed will vary along this [CurveTexture]."
msgstr "æ¯ä¸ªç²’å­çš„动画速度将沿ç€è¿™ä¸ª[CurveTexture]å˜åŒ–。"
#: doc/classes/ParticlesMaterial.xml:115
-#, fuzzy
msgid ""
"Each particle's initial color. If the [Particles2D]'s [code]texture[/code] "
"is defined, it will be multiplied by this color. To have particle display "
"color in a [SpatialMaterial] make sure to set [member SpatialMaterial."
"vertex_color_use_as_albedo] to [code]true[/code]."
msgstr ""
-"æ¯ä¸ªç²’å­çš„åˆå§‹é¢œè‰²ã€‚如果[GPUParticles2D]çš„[code]texture[/code]被定义,它将乘"
-"以这个颜色。è¦è®©ç²’å­åœ¨[BaseMaterial3D]中显示颜色,请确ä¿è®¾ç½®[member "
-"BaseMaterial3D]。vertex_color_use_as_albedo] [code]true[/code]。"
+"æ¯ä¸ªç²’å­çš„åˆå§‹é¢œè‰²ã€‚如果定义了 [Particles2D] çš„ [code]texture[/code],它将乘"
+"以该颜色。è¦åœ¨ [SpatialMaterial] ä¸­ä½¿ç”¨ç²’å­æ˜¾ç¤ºé¢œè‰²ï¼Œè¯·ç¡®ä¿å°† [member "
+"SpatialMaterial.vertex_color_use_as_albedo] 设置为 [code]true[/code]。"
#: doc/classes/ParticlesMaterial.xml:124
msgid "Damping will vary along this [CurveTexture]."
@@ -47832,37 +49243,25 @@ msgstr ""
"的“粒å­â€å·¥å…·ä¸‹çš„“从网格/节点中创建å‘射点â€è‡ªåŠ¨åˆ›å»ºç½‘æ ¼æˆ–èŠ‚ç‚¹ã€‚"
#: doc/classes/ParticlesMaterial.xml:148
-#, fuzzy
msgid ""
"The axis of the ring when using the emitter [constant EMISSION_SHAPE_RING]."
-msgstr ""
-"如果[enum EmissionShape]设置为[constant EMISSION_SHAPE_SPHERE],则çƒä½“çš„åŠ"
-"径。"
+msgstr "使用å‘射器时的环轴 [constant EMISSION_SHAPE_RING]。"
#: doc/classes/ParticlesMaterial.xml:151
-#, fuzzy
msgid ""
"The height of the ring when using the emitter [constant EMISSION_SHAPE_RING]."
-msgstr ""
-"如果[enum EmissionShape]设置为[constant EMISSION_SHAPE_SPHERE],则çƒä½“çš„åŠ"
-"径。"
+msgstr "使用å‘射器时环的高度 [constant EMISSION_SHAPE_RING]。"
#: doc/classes/ParticlesMaterial.xml:154
-#, fuzzy
msgid ""
"The inner radius of the ring when using the emitter [constant "
"EMISSION_SHAPE_RING]."
-msgstr ""
-"如果[enum EmissionShape]设置为[constant EMISSION_SHAPE_SPHERE],则çƒä½“çš„åŠ"
-"径。"
+msgstr "使用å‘射器时环的内åŠå¾„ [constant EMISSION_SHAPE_RING]。"
#: doc/classes/ParticlesMaterial.xml:157
-#, fuzzy
msgid ""
"The radius of the ring when using the emitter [constant EMISSION_SHAPE_RING]."
-msgstr ""
-"如果[membermission_shape]设置为[constant EMISSION_SHAPE_SPHERE],则çƒä½“çš„åŠ"
-"径。"
+msgstr "使用å‘射器时的圆环åŠå¾„ [constant EMISSION_SHAPE_RING]。"
#: doc/classes/ParticlesMaterial.xml:160
msgid ""
@@ -47879,9 +49278,8 @@ msgstr ""
"åŠå¾„。"
#: doc/classes/ParticlesMaterial.xml:175
-#, fuzzy
msgid "Amount of [member spread] along the Y axis."
-msgstr "沿Yè½´æ’入的é¢å¤–边缘环的数é‡ã€‚"
+msgstr "沿 Y è½´çš„ [member spread] é‡ã€‚"
#: doc/classes/ParticlesMaterial.xml:184
msgid "Each particle's hue will vary along this [CurveTexture]."
@@ -48064,12 +49462,10 @@ msgstr ""
"emission_color_texture]调节。"
#: doc/classes/Path.xml:4
-#, fuzzy
msgid "Contains a [Curve3D] path for [PathFollow] nodes to follow."
-msgstr "包å«ä¸€ä¸ª[Curve3D]路径,供[PathFollow3D]节点éµå¾ªã€‚"
+msgstr "包å«è¦éµå¾ªçš„ [PathFollow] 节点的 [Curve3D] 路径。"
#: doc/classes/Path.xml:7
-#, fuzzy
msgid ""
"Can have [PathFollow] child nodes moving along the [Curve3D]. See "
"[PathFollow] for more information on the usage.\n"
@@ -48077,10 +49473,10 @@ msgid ""
"[PathFollow]). As such, the curve should usually start with a zero vector "
"[code](0, 0, 0)[/code]."
msgstr ""
-"å¯ä»¥è®©[PathFollow3D]å­èŠ‚ç‚¹æ²¿ç€[Curve3D]移动。请å‚阅[PathFollow3D]以获得更多关"
-"于使用的信æ¯ã€‚\n"
-"注æ„,该路径被认为是相对于移动的节点([PathFollow3D]çš„å­èŠ‚ç‚¹)的。因此,曲线通"
-"常以零å‘é‡[code](0,0,0)[/code]开始。"
+"å¯ä»¥è®© [PathFollow] å­èŠ‚ç‚¹æ²¿ [Curve3D] 移动。有关用法的更多信æ¯ï¼Œå‚阅 "
+"[PathFollow]。\n"
+"请注æ„,路径被视为相对于移动节点([PathFollow] çš„å­èŠ‚ç‚¹ï¼‰ã€‚å› æ­¤ï¼Œæ›²çº¿é€šå¸¸åº”ä»¥"
+"é›¶å‘é‡ [code](0, 0, 0)[/code] 开始。"
#: doc/classes/Path.xml:16
msgid "A [Curve3D] describing the path."
@@ -48112,12 +49508,10 @@ msgid "A [Curve2D] describing the path."
msgstr "A [Curve2D]æè¿°è·¯å¾„。"
#: doc/classes/PathFollow.xml:4
-#, fuzzy
msgid "Point sampler for a [Path]."
-msgstr "对[Path2D]çš„ç‚¹å–æ ·çš„å–æ ·å™¨ã€‚"
+msgstr "[Path] 的点采样器。"
#: doc/classes/PathFollow.xml:7
-#, fuzzy
msgid ""
"This node takes its parent [Path], and returns the coordinates of a point "
"within it, given a distance from the first vertex.\n"
@@ -48126,13 +49520,12 @@ msgid ""
"descendant nodes will then move accordingly when setting an offset in this "
"node."
msgstr ""
-"这个节点接å—它的父节点[Path2D]ï¼Œå¹¶è¿”å›žå…¶ä¸­ä¸€ä¸ªç‚¹çš„åæ ‡(给定到第一个顶点的è·"
-"离)。\n"
-"在ä¸ç¼–ç ç§»åŠ¨æ¨¡å¼çš„æƒ…况下,它å¯ä»¥ä½¿å…¶ä»–节点éµå¾ªä¸€æ¡è·¯å¾„。因此,节点必须是这个"
-"节点的å­èŠ‚ç‚¹ã€‚å½“åœ¨è¯¥èŠ‚ç‚¹ä¸­è®¾ç½®åç§»é‡æ—¶ï¼ŒåŽä»£èŠ‚ç‚¹å°†ç›¸åº”åœ°ç§»åŠ¨ã€‚"
+"这个节点接å—它的父节点 [Path]ï¼Œå¹¶è¿”å›žå…¶ä¸­ä¸€ä¸ªç‚¹çš„åæ ‡ï¼Œç»™å®šä¸Žç¬¬ä¸€ä¸ªé¡¶ç‚¹çš„è·"
+"离。\n"
+"这对于使其他节点éµå¾ªè·¯å¾„éžå¸¸æœ‰ç”¨ï¼Œè€Œæ— éœ€å¯¹è¿åŠ¨æ¨¡å¼è¿›è¡Œç¼–ç ã€‚为此,节点必须是"
+"该节点的å­èŠ‚ç‚¹ã€‚åœ¨æ­¤èŠ‚ç‚¹ä¸­è®¾ç½®åç§»é‡æ—¶ï¼Œå­ä»£èŠ‚ç‚¹å°†ç›¸åº”åœ°ç§»åŠ¨ã€‚"
#: doc/classes/PathFollow.xml:16
-#, fuzzy
msgid ""
"If [code]true[/code], the position between two cached points is interpolated "
"cubically, and linearly otherwise.\n"
@@ -48145,13 +49538,12 @@ msgid ""
"points and increase memory consumption, or make a cubic interpolation "
"between two points at the cost of (slightly) slower calculations."
msgstr ""
-"如果[code]true[/code],则两个缓存点之间的ä½ç½®å°†è¿›è¡Œä¸‰æ¬¡æ’值,å¦åˆ™å°†çº¿æ€§æ’"
-"值。\n"
-"沿ç€[Path3D]çš„[Curve3D]çš„ç‚¹åœ¨ä½¿ç”¨å‰æ˜¯é¢„先计算的,为了更快的计算。然åŽåœ¨ä¸¤ä¸ªç›¸"
-"邻的缓存点之间计算请求åç§»é‡çš„点。这å¯èƒ½ä¼šå‡ºçŽ°ä¸€ä¸ªé—®é¢˜ï¼Œå¦‚æžœæ›²çº¿åšæ€¥è½¬å¼¯ï¼Œå› "
-"为缓存点å¯èƒ½ä¸è·Ÿéšæ›²çº¿è¶³å¤Ÿè¿‘ã€‚\n"
-"æœ‰ä¸¤ç§æ–¹æ³•å¯ä»¥è§£å†³è¿™ä¸ªé—®é¢˜:è¦ä¹ˆå¢žåŠ ç¼“å­˜ç‚¹çš„æ•°é‡ï¼Œå¢žåŠ å†…å­˜æ¶ˆè€—ï¼Œè¦ä¹ˆåœ¨ä¸¤ä¸ªç‚¹ä¹‹"
-"间进行三次æ’值,但代价是(ç¨å¾®)é™ä½Žè®¡ç®—速度。"
+"如果[code]true[/code],两个缓存的点之间的ä½ç½®æ˜¯ç«‹æ–¹æ’值,å¦åˆ™æ˜¯çº¿æ€§æ’值。\n"
+"沿ç€[Path]çš„[Curve3D]的点在使用å‰è¢«é¢„计算,以加快计算。而åŽï¼Œåœ¨ç¡®å®šåç§»é‡ä¸Šçš„"
+"点会在两个相邻的缓存点之间进行æ’值计算。如果曲线有急转弯,这å¯èƒ½ä¼šäº§ç”Ÿä¸€ä¸ªé—®"
+"题,因为缓存的点å¯èƒ½ä¸ä¼šè¶³å¤Ÿç´§è·Ÿæ›²çº¿ã€‚\n"
+"这个问题有两个答案:è¦ä¹ˆå¢žåŠ ç¼“å­˜ç‚¹çš„æ•°é‡ï¼Œä»£ä»·æ˜¯å¢žåŠ å†…å­˜æ¶ˆè€—ï¼›è¦ä¹ˆåœ¨ä¸¤ä¸ªç‚¹ä¹‹"
+"间进行立方æ’å€¼ï¼Œä»£ä»·æ˜¯è®¡ç®—é€Ÿåº¦ç¨æ…¢ã€‚"
#: doc/classes/PathFollow.xml:21 doc/classes/PathFollow2D.xml:21
msgid "The node's offset along the curve."
@@ -48195,34 +49587,29 @@ msgid "The node's offset perpendicular to the curve."
msgstr "节点垂直于曲线的åç§»é‡ã€‚"
#: doc/classes/PathFollow.xml:41
-#, fuzzy
msgid "Forbids the PathFollow to rotate."
-msgstr "ç¦æ­¢PathFollow3D旋转。"
+msgstr "ç¦æ­¢ PathFollow 旋转。"
#: doc/classes/PathFollow.xml:44
-#, fuzzy
msgid "Allows the PathFollow to rotate in the Y axis only."
-msgstr "åªå…许PathFollow3D在Y轴上旋转。"
+msgstr "ä»…å…许 PathFollow 沿 Y 轴旋转。"
#: doc/classes/PathFollow.xml:47
-#, fuzzy
msgid "Allows the PathFollow to rotate in both the X, and Y axes."
-msgstr "å…许PathFollow3D在Xè½´å’ŒY轴上旋转。"
+msgstr "å…许 PathFollow 在 X å’Œ Y 轴上旋转。"
#: doc/classes/PathFollow.xml:50
-#, fuzzy
msgid "Allows the PathFollow to rotate in any axis."
-msgstr "å…许PathFollow3D在任何轴上旋转。"
+msgstr "å…许 PathFollow 在任æ„轴上旋转。"
#: doc/classes/PathFollow.xml:53
-#, fuzzy
msgid ""
"Uses the up vector information in a [Curve3D] to enforce orientation. This "
"rotation mode requires the [Path]'s [member Curve3D.up_vector_enabled] "
"property to be set to [code]true[/code]."
msgstr ""
-"使用[Curve3D]中的上å‘é‡ä¿¡æ¯æ¥åŠ å¼ºæ–¹å‘。这个旋转模å¼éœ€è¦[Path3D]çš„[member "
-"Curve3D。Up_vector_enabled属性设置为[code]true[/code]。"
+"使用 [Curve3D] 中的å‘上å‘é‡ä¿¡æ¯æ¥å¼ºåˆ¶å®šå‘。此旋转模å¼éœ€è¦å°† [Path] çš„ "
+"[member Curve3D.up_vector_enabled] 属性设置为 [code]true[/code]。"
#: doc/classes/PathFollow2D.xml:4
msgid "Point sampler for a [Path2D]."
@@ -48351,7 +49738,6 @@ msgid "Exposes performance-related data."
msgstr "公开与性能相关的数æ®ã€‚"
#: doc/classes/Performance.xml:7
-#, fuzzy
msgid ""
"This class provides access to a number of different monitors related to "
"performance, such as memory usage, draw calls, and FPS. These are the same "
@@ -48363,16 +49749,13 @@ msgid ""
"[b]Note:[/b] Many of these monitors are not updated in real-time, so there "
"may be a short delay between changes."
msgstr ""
-"这个类æä¾›äº†å¯¹ä¸€äº›ä¸Žæ€§èƒ½æœ‰å…³çš„ä¸åŒç›‘控的访问,比如内存使用é‡ã€ç»˜å›¾è°ƒç”¨å’ŒFPS。"
-"这些与编辑器的[b]Debugger[/b]颿¿ä¸­çš„[b]Monitor[/b]标签所显示的数值相åŒã€‚通过"
-"使用这个类的[method get_monitor]方法,你å¯ä»¥ä»Žä½ çš„代ç ä¸­è®¿é—®è¿™äº›æ•°æ®ã€‚\n"
-"ä½ å¯ä»¥ä½¿ç”¨[method add_custom_monitor]方法添加自定义监视器。自定义监视器å¯ä»¥åœ¨"
-"编辑器的[b]调试器[/b]颿¿çš„[b]监视器[/b]选项å¡ä¸­ä¸Žå†…置监视器一起使用。\n"
-"[b]注æ„:[/b] 其中一些监视器åªåœ¨è°ƒè¯•模å¼ä¸‹å¯ç”¨ï¼Œåœ¨å‘布版本中使用时将总是返回"
-"0。\n"
-"[b]注æ„:[/b] è¿™äº›ç›‘æŽ§å™¨ä¸­çš„è®¸å¤šéƒ½ä¸æ˜¯å®žæ—¶æ›´æ–°çš„,所以在å˜åŒ–之间å¯èƒ½ä¼šæœ‰çŸ­æš‚"
-"的延迟。\n"
-"[b]注æ„:[/b] è‡ªå®šä¹‰ç›‘è§†å™¨ä¸æ”¯æŒè´Ÿå€¼ã€‚负值被钳制为0。"
+"这个类æä¾›äº†å¯¹ä¸€äº›ä¸Žæ€§èƒ½æœ‰å…³çš„ä¸åŒç›‘控的访问,比如内存使用é‡ã€ç»˜åˆ¶è°ƒç”¨å’ŒFPS。"
+"这些与编辑器的[b]Monitor[/b]标签中的[b]Debugger[/b]颿¿æ‰€æ˜¾ç¤ºçš„æ•°å€¼ç›¸åŒã€‚通过"
+"使用这个类的[method get_monitor]方法,å¯ä»¥ä»Žä½ çš„代ç ä¸­è®¿é—®è¿™äº›æ•°æ®ã€‚\n"
+"[b]注æ„:[/b] 这些监视器中有几个åªåœ¨è°ƒè¯•模å¼ä¸‹å¯ç”¨ï¼Œå½“在å‘布版构建中使用时,将"
+"总是返回0。\n"
+"[b]注æ„:[/b] è¿™äº›ç›‘æŽ§å™¨ä¸­çš„è®¸å¤šä¸æ˜¯å®žæ—¶æ›´æ–°çš„,所以在å˜åŒ–之间å¯èƒ½ä¼šæœ‰çŸ­æš‚的延"
+"迟。"
#: doc/classes/Performance.xml:18
msgid ""
@@ -48407,19 +49790,17 @@ msgid ""
msgstr "当å‰ä½¿ç”¨çš„陿€å†…存,以字节为å•ä½ã€‚在å‘布版本中ä¸å¯ç”¨ã€‚"
#: doc/classes/Performance.xml:39
-#, fuzzy
msgid ""
"Dynamic memory currently used, in bytes. Not available in release builds."
-msgstr "当å‰ä½¿ç”¨çš„陿€å†…存,以字节为å•ä½ã€‚在å‘布版本中ä¸å¯ç”¨ã€‚"
+msgstr "当å‰ä½¿ç”¨çš„动æ€å†…存,以字节为å•ä½ã€‚在å‘布版本中ä¸å¯ç”¨ã€‚"
#: doc/classes/Performance.xml:42
msgid "Available static memory. Not available in release builds."
msgstr "å¯ç”¨çš„陿€å†…存。在å‘布版本中ä¸å¯ç”¨ã€‚"
#: doc/classes/Performance.xml:45
-#, fuzzy
msgid "Available dynamic memory. Not available in release builds."
-msgstr "å¯ç”¨çš„陿€å†…存。在å‘布版本中ä¸å¯ç”¨ã€‚"
+msgstr "å¯ç”¨çš„动æ€å†…存。在å‘布版本中ä¸å¯ç”¨ã€‚"
#: doc/classes/Performance.xml:48
msgid ""
@@ -48474,14 +49855,12 @@ msgid "Draw calls per frame. 3D only."
msgstr "æ¯ä¸€å¸§çš„绘图调用。仅é™3D。"
#: doc/classes/Performance.xml:81
-#, fuzzy
msgid "Items or joined items drawn per frame."
-msgstr "æ¯å¸§ç»˜åˆ¶3D对象的数é‡ã€‚"
+msgstr "æ¯å¸§ç»˜åˆ¶çš„项目或连接的项目。"
#: doc/classes/Performance.xml:84
-#, fuzzy
msgid "Draw calls per frame."
-msgstr "æ¯ä¸€å¸§çš„绘图调用。仅é™3D。"
+msgstr "æ¯å¸§ç»˜åˆ¶è°ƒç”¨ã€‚"
#: doc/classes/Performance.xml:87 doc/classes/VisualServer.xml:3696
msgid ""
@@ -48497,10 +49876,9 @@ msgid "The amount of vertex memory used."
msgstr "使用的顶点内存数é‡ã€‚"
#: doc/classes/Performance.xml:96 doc/classes/VisualServer.xml:3693
-#, fuzzy
msgid ""
"Unimplemented in the GLES2 and GLES3 rendering backends, always returns 0."
-msgstr "未在GLES2呈现åŽç«¯å®žçŽ°ï¼Œæ€»æ˜¯è¿”å›ž0。"
+msgstr "在 GLES2 å’Œ GLES3 渲染åŽç«¯ä¸­æœªå®žçŽ°ï¼Œå§‹ç»ˆè¿”å›ž 0。"
#: doc/classes/Performance.xml:99
msgid "Number of active [RigidBody2D] nodes in the game."
@@ -48515,9 +49893,8 @@ msgid "Number of islands in the 2D physics engine."
msgstr "2D物ç†å¼•擎中的岛屿数é‡ã€‚"
#: doc/classes/Performance.xml:108
-#, fuzzy
msgid "Number of active [RigidBody] and [VehicleBody] nodes in the game."
-msgstr "游æˆä¸­æ´»è·ƒçš„[RigidBody3D]å’Œ[VehicleBody3D]节点数é‡ã€‚"
+msgstr "游æˆä¸­æ´»åŠ¨çš„ [RigidBody] å’Œ [VehicleBody] 节点的数é‡ã€‚"
#: doc/classes/Performance.xml:111
msgid "Number of collision pairs in the 3D physics engine."
@@ -48552,21 +49929,19 @@ msgid ""
msgstr "从给定的[Translation]资æºç”Ÿæˆå¹¶è®¾ç½®ä¼˜åŒ–的翻译。"
#: doc/classes/Physics2DDirectBodyState.xml:4
-#, fuzzy
msgid "Direct access object to a physics body in the [Physics2DServer]."
-msgstr "在[PhysicsServer2D]中直接访问物ç†ä½“。"
+msgstr "直接访问 [Physics2DServer] 中物ç†ç‰©ä½“对象。"
#: doc/classes/Physics2DDirectBodyState.xml:7
-#, fuzzy
msgid ""
"Provides direct access to a physics body in the [Physics2DServer], allowing "
"safe changes to physics properties. This object is passed via the direct "
"state callback of rigid/character bodies, and is intended for changing the "
"direct state of that body. See [method RigidBody2D._integrate_forces]."
msgstr ""
-"æä¾›å¯¹[PhysicsServer2D]中的物ç†ä½“的直接访问,å…许安全地改å˜ç‰©ç†å±žæ€§ã€‚这个对象"
-"是通过刚性/字符体的直接状æ€å›žè°ƒä¼ é€’的,目的是为了改å˜è¯¥ä½“的直接状æ€ã€‚å‚阅"
-"[method RigidBody2D._integrate_forces]。"
+"æä¾›å¯¹ [Physics2DServer] 中物ç†ç‰©ä½“的直接访问,å…许安全更改物ç†å±žæ€§ã€‚该对象通"
+"过刚体/角色物体的直接状æ€å›žè°ƒä¼ é€’,从而直接改å˜è¯¥ç‰©ä½“的状æ€ã€‚å‚è§ [method "
+"RigidBody2D._integrate_forces]。"
#: doc/classes/Physics2DDirectBodyState.xml:11
#: doc/classes/Physics2DDirectSpaceState.xml:11
@@ -48575,7 +49950,8 @@ msgstr ""
#: doc/classes/RayCast2D.xml:14 doc/classes/World.xml:10
#: doc/classes/World2D.xml:10
msgid "https://docs.godotengine.org/en/3.4/tutorials/physics/ray-casting.html"
-msgstr "https://docs.godotengine.org/en/3.4/tutorials/physics/ray-casting.html"
+msgstr ""
+"https://docs.godotengine.org/zh_CN/stable/tutorials/physics/ray-casting.html"
#: doc/classes/Physics2DDirectBodyState.xml:18 doc/classes/RigidBody2D.xml:30
msgid "Adds a constant directional force without affecting rotation."
@@ -48641,14 +50017,13 @@ msgid "Returns the collider's shape index."
msgstr "返回碰撞体的形状索引。"
#: doc/classes/Physics2DDirectBodyState.xml:97
-#, fuzzy
msgid ""
"Returns the collided shape's metadata. This metadata is different from "
"[method Object.get_meta], and is set with [method Physics2DServer."
"shape_set_data]."
msgstr ""
-"返回碰撞形状的元数æ®ã€‚这个元数æ®ä¸Ž[method Object.get_meta]ä¸åŒï¼Œå®ƒæ˜¯ç”¨"
-"[method PhysicsServer2D.shape_set_data]设置的。"
+"返回碰撞形状的元数æ®ã€‚这个元数æ®ä¸åŒäºŽ[method Object.get_meta],是用[method "
+"Physics2DServer.shape_set_data]设置的。"
#: doc/classes/Physics2DDirectBodyState.xml:104
#: doc/classes/PhysicsDirectBodyState.xml:99
@@ -48661,9 +50036,9 @@ msgid ""
"[b]Note:[/b] By default, this returns 0 unless bodies are configured to "
"monitor contacts. See [member RigidBody2D.contact_monitor]."
msgstr ""
-"返回此实体与其他实体的è”系数。\n"
-"[b] 注æ„:[/b]默认情况下,除éžä¸»ä½“被设为监视è”系人,å¦åˆ™è¿”回0。请å‚阅 "
-"[member RigidBody2D.contact_monitor]。"
+"返回此物体与其他物体的接触次数。\n"
+"[b] 注æ„:[/b]默认情况下,除éžç‰©ä½“被设为监视接触者,å¦åˆ™è¿”回0。å‚阅 [member "
+"RigidBody2D.contact_monitor]。"
#: doc/classes/Physics2DDirectBodyState.xml:118
#: doc/classes/PhysicsDirectBodyState.xml:120
@@ -48690,7 +50065,7 @@ msgstr "返回空间的当å‰çжæ€ï¼Œè¿™å¯¹æŸ¥è¯¢å¾ˆæœ‰ç”¨ã€‚"
msgid ""
"Returns the body's velocity at the given relative position, including both "
"translation and rotation."
-msgstr ""
+msgstr "返回给定相对ä½ç½®çš„物体速度,包括平移和旋转。"
#: doc/classes/Physics2DDirectBodyState.xml:151
#: doc/classes/PhysicsDirectBodyState.xml:153
@@ -48749,21 +50124,19 @@ msgstr "ç‰©ä½“åœæ­¢è¿åŠ¨çš„é€ŸçŽ‡ï¼Œå¦‚æžœæ²¡æœ‰ä»»ä½•å…¶ä»–åŠ›ä½¿å®ƒè¿åŠ¨ã€‚
#: doc/classes/Physics2DDirectBodyState.xml:184
#: doc/classes/PhysicsDirectBodyState.xml:190
msgid "The body's transformation matrix."
-msgstr "èº«ä½“çš„å˜æ¢çŸ©é˜µã€‚"
+msgstr "ç‰©ä½“çš„å˜æ¢çŸ©é˜µã€‚"
#: doc/classes/Physics2DDirectSpaceState.xml:4
-#, fuzzy
msgid "Direct access object to a space in the [Physics2DServer]."
-msgstr "直接访问[PhysicsServer2D]中的一个空间。"
+msgstr "直接访问[Physics2DServer]中的空间的对象。"
#: doc/classes/Physics2DDirectSpaceState.xml:7
-#, fuzzy
msgid ""
"Direct access object to a space in the [Physics2DServer]. It's used mainly "
"to do queries against objects and areas residing in a given space."
msgstr ""
-"直接访问[PhysicsServer2D]中的一个空间。它主è¦ç”¨äºŽå¯¹ç»™å®šç©ºé—´ä¸­çš„对象和区域进行"
-"查询。"
+"直接访问[Physics2DServer]中的空间的对象。它主è¦ç”¨äºŽå¯¹ä½äºŽç»™å®šç©ºé—´ä¸­çš„对象和区"
+"域进行查询。"
#: doc/classes/Physics2DDirectSpaceState.xml:18
msgid ""
@@ -48779,9 +50152,15 @@ msgid ""
"inside of, will be ignored. Use [method collide_shape] to determine the "
"[Shape2D]s that the shape is already colliding with."
msgstr ""
+"检查 [Shape2D] å¯ä»¥ç§»åŠ¨å¤šè¿œè€Œä¸ä¼šå‘ç”Ÿç¢°æ’žã€‚æŸ¥è¯¢çš„æ‰€æœ‰å‚æ•°ï¼ŒåŒ…括形状和è¿åŠ¨ï¼Œéƒ½"
+"是通过 [Physics2DShapeQueryParameters] 对象æä¾›çš„。\n"
+"返回一个包å«è¿åŠ¨çš„å®‰å…¨å’Œä¸å®‰å…¨æ¯”例(0 到 1 之间)的数组。安全比例是在没有碰撞"
+"的情况下å¯ä»¥è¿›è¡Œçš„è¿åŠ¨çš„æœ€å¤§æ¯”ä¾‹ã€‚ä¸å®‰å…¨æ¯”例是碰撞必须移动的è·ç¦»çš„æœ€å°éƒ¨åˆ†ã€‚"
+"如果没有检测到碰撞,将返回 [code][1.0, 1.0][/code] 的结果。\n"
+"[b]注æ„:[/b] 任何已ç»ç¢°æ’žçš„[Shape2D](比如内部的)会被忽略。使用 [method "
+"collide_shape] 确定形状已ç»ç¢°æ’žçš„ [Shape2D]。"
#: doc/classes/Physics2DDirectSpaceState.xml:28
-#, fuzzy
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space. The resulting "
@@ -48789,12 +50168,11 @@ msgid ""
"with [method intersect_shape], the number of returned results can be limited "
"to save processing time."
msgstr ""
-"通过[PhysicsShapeQueryParameters2D]对象对空间检查形状的交集。生æˆçš„æ•°ç»„包å«ä¸€"
-"个与å¦ä¸€ä¸ªå½¢çŠ¶ç›¸äº¤çš„ç‚¹åˆ—è¡¨ã€‚ä¸Ž[method intersect_shape]一样,å¯ä»¥é™åˆ¶è¿”回结果"
-"的数é‡ï¼Œä»¥èŠ‚çœå¤„ç†æ—¶é—´ã€‚"
+"通过[Physics2DShapeQueryParameters]对象给出的形状与空间的检查交点。结果数组包"
+"å«ä¸€ä¸ªå½¢çŠ¶ä¸Žå¦ä¸€ä¸ªå½¢çŠ¶ç›¸äº¤çš„ç‚¹çš„åˆ—è¡¨ã€‚åƒ[method intersect_shape]一样,å¯ä»¥é™"
+"制返回结果的数é‡ä»¥èŠ‚çœå¤„ç†æ—¶é—´ã€‚"
#: doc/classes/Physics2DDirectSpaceState.xml:35
-#, fuzzy
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space. If it collides "
@@ -48814,20 +50192,20 @@ msgid ""
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape."
msgstr ""
-"检查通过[PhysicsShapeQueryParameters2D]对象给出的形状与空间的交点。如果它与一"
-"个以上的形状å‘生碰撞,则选择最近的一个。如果该形状没有与任何东西相交,那么将"
+"通过[Physics2DShapeQueryParameters]对象给出的形状与空间的检查交点。如果它与一"
+"个以上的形状å‘生碰撞,则选择最近的一个。如果该形状没有与任何对象相交,那么将"
"返回一个空字典。\n"
-"[b]注æ„:[/b] 这个方法ä¸è€ƒè™‘对象的[code]motion[/code]属性。返回的对象是一个包"
-"å«ä»¥ä¸‹å­—段的字典。\n"
-"[code]collider_id[/code]。碰撞对象的ID。\n"
-"[code]linear_velocity[/code]。碰撞对象的速度[Vector2]。如果对象是一个"
+"[b]注æ„:[/b] 这个方法ä¸è€ƒè™‘对象的[code]motion[/code]属性。返回的对象是包å«ä»¥"
+"下字段的字典。\n"
+"[code]collider_id[/code]:碰撞对象的ID。\n"
+"[code]linear_velocity[/code]:碰撞物体的速度[Vector2]。如果对象是一个"
"[Area2D],结果是[code](0, 0)[/code]。\n"
-"[code]metadata[/code]。相交的形状的元数æ®ã€‚这个元数æ®ä¸Ž[method Object."
-"get_meta]ä¸åŒï¼Œå®ƒæ˜¯ç”¨[method PhysicsServer2D.shape_set_data]设置的。\n"
-"[code]normal[/code]ã€‚ç‰©ä½“åœ¨äº¤ç‚¹å¤„çš„è¡¨é¢æ³•线。\n"
-"[code]point[/code]。相交点。\n"
-"[code]rid[/code]: 相交物体的[RID]。\n"
-"[code]shape[/code]: 碰撞形状的形状索引。"
+"[code]metadata[/code]:相交形状的元数æ®ã€‚这个元数æ®ä¸Ž[method Object.get_meta]"
+"ä¸åŒï¼Œå®ƒæ˜¯ç”¨[method Physics2DServer.shape_set_data]设置的。\n"
+"[code]normal[/code]:ç‰©ä½“åœ¨äº¤ç‚¹å¤„çš„è¡¨é¢æ³•线。\n"
+"[code]point[/code]:相交点。\n"
+"[code]rid[/code]:相交物体的[RID]。\n"
+"[code]shape[/code]:碰撞形状的形状索引。"
#: doc/classes/Physics2DDirectSpaceState.xml:55
#, fuzzy
@@ -48842,28 +50220,70 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-"检查一个点是å¦åœ¨ä»»ä½•形状内。点所处的形状将以一个数组的形å¼è¿”å›žï¼Œè¯¥æ•°ç»„åŒ…å«æœ‰"
-"以下字段的字典。\n"
-"[code]collider[/code]。碰撞的对象。\n"
-"[code]collider_id[/code]。碰撞对象的ID。\n"
-"[code]metadata[/code]。相交形状的元数æ®ã€‚这个元数æ®ä¸Ž[method Object.get_meta]"
-"ä¸åŒï¼Œå¯ä»¥ç”¨[method PhysicsServer2D.shape_set_data]æ¥è®¾ç½®ã€‚\n"
-"[code]rid[/code]。相交物体的[RID]。\n"
-"[code]shape[/code]。碰撞形状的形状索引。\n"
+"检查一个点是å¦åœ¨ä»»æ„实体形状内。点所处的形状会以数组的形å¼è¿”å›žï¼Œè¯¥æ•°ç»„åŒ…å«æœ‰"
+"以下字段的字典:\n"
+"[code]collider[/code]:碰撞的对象。\n"
+"[code]collider_id[/code]:碰撞对象的ID。\n"
+"[code]metadata[/code]:相交形状的元数æ®ã€‚这个元数æ®ä¸Ž[method Object.get_meta]"
+"ä¸åŒï¼Œæ˜¯ç”¨[method Physics2DServer.shape_set_data]设置的。\n"
+"[code]rid[/code]:相交物体的[RID]。\n"
+"[code]shape[/code]:碰撞形状的形状索引。\n"
"此外,该方法å¯ä»¥æŽ¥å—一个[code]exclude[/code]数组,该数组中的对象或[RID]将被排"
-"除在碰撞之外,一个[code]collision_mask[/code]使ީç ä»£è¡¨è¦æ£€æŸ¥çš„物ç†å±‚,或者布"
-"尔值æ¥ç¡®å®šå°„线是å¦åº”该分别与[PhysicsBody2D]或[Area2D]碰撞。"
+"除在碰撞之外,[code]collision_mask[/code]使ީç è¡¨ç¤ºè¦æ£€æŸ¥çš„物ç†å±‚,或者布尔值"
+"æ¥ç¡®å®šå°„线是å¦åº”该分别与[PhysicsBody]或[Area]å‘生碰撞。\n"
+"[b]注æ„:[/b] [ConcavePolygonShape2D]å’Œ[CollisionPolygon2D]在[code]Segments[/"
+"code]构建模å¼ä¸­ä¸æ˜¯å®žä½“形状。因此,它们将ä¸ä¼šè¢«æ£€æµ‹åˆ°ã€‚"
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+#, fuzzy
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+"检查一个点是å¦åœ¨ä»»æ„实体形状内。点所处的形状会以数组的形å¼è¿”å›žï¼Œè¯¥æ•°ç»„åŒ…å«æœ‰"
+"以下字段的字典:\n"
+"[code]collider[/code]:碰撞的对象。\n"
+"[code]collider_id[/code]:碰撞对象的ID。\n"
+"[code]metadata[/code]:相交形状的元数æ®ã€‚这个元数æ®ä¸Ž[method Object.get_meta]"
+"ä¸åŒï¼Œæ˜¯ç”¨[method Physics2DServer.shape_set_data]设置的。\n"
+"[code]rid[/code]:相交物体的[RID]。\n"
+"[code]shape[/code]:碰撞形状的形状索引。\n"
+"此外,该方法å¯ä»¥æŽ¥å—一个[code]exclude[/code]数组,该数组中的对象或[RID]将被排"
+"除在碰撞之外,[code]collision_mask[/code]使ީç è¡¨ç¤ºè¦æ£€æŸ¥çš„物ç†å±‚,或者布尔值"
+"æ¥ç¡®å®šå°„线是å¦åº”该分别与[PhysicsBody]或[Area]å‘生碰撞。\n"
+"[b]注æ„:[/b] [ConcavePolygonShape2D]å’Œ[CollisionPolygon2D]在[code]Segments[/"
+"code]构建模å¼ä¸­ä¸æ˜¯å®žä½“形状。因此,它们将ä¸ä¼šè¢«æ£€æµ‹åˆ°ã€‚"
+
+#: doc/classes/Physics2DDirectSpaceState.xml:96
#, fuzzy
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
@@ -48882,25 +50302,24 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-"在一个给定的空间中与一æ¡å°„线相交。返回的对象是一个具有下列字段的字典。\n"
-"[code]collider[/code]。碰撞的对象。\n"
-"[code]collider_id[/code]。碰撞对象的ID。\n"
-"[code]metadata[/code]。相交形状的元数æ®ã€‚这个元数æ®ä¸Ž[method Object.get_meta]"
-"ä¸åŒï¼Œå¯ä»¥ç”¨[method PhysicsServer2D.shape_set_data]æ¥è®¾ç½®ã€‚\n"
-"[code]normal[/code]ã€‚ç‰©ä½“åœ¨äº¤ç‚¹å¤„çš„è¡¨é¢æ³•线。\n"
-"[code]position[/code]: 交å‰ç‚¹ã€‚\n"
-"[code]rid[/code]: 相交对象的[RID]。\n"
-"[code]shape[/code]: 碰撞形状的形状索引。\n"
-"如果射线没有与任何物体相交,那么将返回一个空的字典。\n"
-"此外,该方法å¯ä»¥æŽ¥å—一个[code]exclude[/code]数组,该数组中的对象或[RID]将被排"
-"除在碰撞之外,一个[code]collision_mask[/code]使ީç ä»£è¡¨è¦æ£€æŸ¥çš„物ç†å±‚,或者布"
-"尔值æ¥ç¡®å®šå°„线是å¦åº”该分别与[PhysicsBody2D]或[Area2D]å‘生碰撞。"
+"在给定的空间中与一æ¡å°„线相交。返回的对象是具有下列字段的字典:\n"
+"[code]collider[/code]:碰撞的对象。\n"
+"[code]collider_id[/code]:碰撞对象的ID。\n"
+"[code]metadata[/code]:相交形状的元数æ®ã€‚这个元数æ®ä¸Ž[method Object.get_meta]"
+"ä¸åŒï¼Œå¯ä»¥ç”¨[method Physics2DServer.shape_set_data]æ¥è®¾ç½®ã€‚\n"
+"[code]normal[/code]:ç‰©ä½“åœ¨äº¤ç‚¹å¤„çš„è¡¨é¢æ³•线。\n"
+"[code]position[/code]:相交点。\n"
+"[code]rid[/code]:相交物体的[RID]。\n"
+"[code]形状[/code]:碰撞形状的形状索引。\n"
+"如果射线没有与任何物体相交,那么将返回空的字典。\n"
+"此外,该方法å¯ä»¥æŽ¥å—一个[code]exclude[/code]对象或[RID]数组,该数组将被排除在"
+"碰撞之外,[code]collision_mask[/code]使ީç è¡¨ç¤ºè¦æ£€æŸ¥çš„物ç†å±‚,或者布尔值æ¥ç¡®"
+"定射线是å¦åº”该分别与[PhysicsBody]或[Area]å‘生碰撞。"
-#: doc/classes/Physics2DDirectSpaceState.xml:103
-#, fuzzy
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -48917,29 +50336,28 @@ msgid ""
"The number of intersections can be limited with the [code]max_results[/code] "
"parameter, to reduce the processing time."
msgstr ""
-"检查通过[PhysicsShapeQueryParameters2D]对象给出的形状与空间的交点。\n"
-"[b]注æ„:[/b] 这个方法ä¸è€ƒè™‘对象的[code]motion[/code]属性。相交的形状会以一个"
-"数组的形å¼è¿”å›žï¼Œè¯¥æ•°ç»„åŒ…å«æœ‰ä»¥ä¸‹å­—段的字典。\n"
-"[code]collider[/code]。碰撞的对象。\n"
-"[code]collider_id[/code]。碰撞对象的ID。\n"
-"[code]metadata[/code]。相交形状的元数æ®ã€‚这个元数æ®ä¸Ž[method Object.get_meta]"
-"ä¸åŒï¼Œå¯ä»¥ç”¨[method PhysicsServer2D.shape_set_data]æ¥è®¾ç½®ã€‚\n"
-"[code]rid[/code]。相交物体的[RID]。\n"
-"[code]shape[/code]。碰撞形状的形状索引。\n"
+"通过[Physics2DShapeQueryParameters]对象给出的形状与空间的检查交点。\n"
+"[b]注æ„:[/b] 这个方法ä¸è€ƒè™‘对象的[code]motion[/code]属性。相交的形状会以数组"
+"的形å¼è¿”å›žï¼Œè¯¥æ•°ç»„åŒ…å«æœ‰ä»¥ä¸‹å­—段的字典:\n"
+"[code]collider[/code]:碰撞的对象。\n"
+"[code]collider_id[/code]:碰撞对象的ID。\n"
+"[code]metadata[/code]:相交形状的元数æ®ã€‚这个元数æ®ä¸Ž[method Object.get_meta]"
+"ä¸åŒï¼Œæ˜¯ç”¨[method Physics2DServer.shape_set_data]设置的。\n"
+"[code]rid[/code]:相交物体的[RID]。\n"
+"[code]shape[/code]:碰撞形状的形状索引。\n"
"å¯ä»¥ç”¨[code]max_results[/code]傿•°é™åˆ¶ç›¸äº¤çš„æ•°é‡ï¼Œä»¥å‡å°‘å¤„ç†æ—¶é—´ã€‚"
#: doc/classes/Physics2DServer.xml:4
msgid "Server interface for low-level 2D physics access."
-msgstr "用于底层2D物ç†å­¦è®¿é—®çš„æœåŠ¡å™¨æŽ¥å£ã€‚"
+msgstr "用于底层2D物ç†è®¿é—®æœåŠ¡çš„æŽ¥å£ã€‚"
#: doc/classes/Physics2DServer.xml:7
-#, fuzzy
msgid ""
"Physics2DServer is the server responsible for all 2D physics. It can create "
"many kinds of physics objects, but does not insert them on the node tree."
msgstr ""
-"PhysicsServer2D是负责所有2D物ç†çš„æœåŠ¡å™¨ã€‚å®ƒå¯ä»¥åˆ›å»ºå¤šç§ç‰©ç†å¯¹è±¡ï¼Œä½†ä¸ä¼šå°†å®ƒä»¬"
-"æ’入节点树。"
+"Physics2DServer 是负责所有 2D 物ç†çš„æœåŠ¡ã€‚å®ƒå¯ä»¥åˆ›å»ºå¤šç§ç‰©ç†å¯¹è±¡ï¼Œä½†ä¸ä¼šå°†å®ƒ"
+"们æ’入到节点树中。"
#: doc/classes/Physics2DServer.xml:19 doc/classes/PhysicsServer.xml:19
msgid ""
@@ -48968,6 +50386,8 @@ msgid ""
"to a space using [method area_set_space] to use the created [Area2D] in the "
"physics world."
msgstr ""
+"创建一个 [Area2D]。用这个方法创建了一个[Area2D]åŽï¼Œä½¿ç”¨[method "
+"area_set_space]将其分é…给一个空间,以便在物ç†ä¸–界中使用创建的[Area2D]。"
#: doc/classes/Physics2DServer.xml:60 doc/classes/Physics2DServer.xml:372
#: doc/classes/PhysicsServer.xml:47 doc/classes/PhysicsServer.xml:362
@@ -49088,15 +50508,15 @@ msgid ""
"two are forces, the impulse clears itself after being applied."
msgstr ""
"在施加的力和扭矩上添加一个有作用点的力。与[method body_apply_impulse]一样,力"
-"和物体原点的åç§»é‡éƒ½åœ¨å…¨å±€å标中。力与脉冲的ä¸åŒä¹‹å¤„在于,虽然两者都是力,但"
-"脉冲在被施加åŽä¼šè‡ªåŠ¨æ¸…é™¤ã€‚"
+"和物体原点的åç§»é‡éƒ½åœ¨å…¨å±€å标中。力与冲é‡çš„ä¸åŒä¹‹å¤„在于,虽然两者都是力,但"
+"冲é‡åœ¨è¢«æ–½åŠ åŽä¼šè‡ªåŠ¨æ¸…é™¤ã€‚"
#: doc/classes/Physics2DServer.xml:259 doc/classes/PhysicsServer.xml:259
msgid ""
"Adds a shape to the body, along with a transform matrix. Shapes are usually "
"referenced by their index, so you should track which shape has a given index."
msgstr ""
-"添加一个形状到身体,以åŠä¸€ä¸ªå˜æ¢çŸ©é˜µã€‚形状通常通过它们的索引æ¥å¼•用,因此您应"
+"添加一个形状到物体,以åŠä¸€ä¸ªå˜æ¢çŸ©é˜µã€‚形状通常通过它们的索引æ¥å¼•用,因此您应"
"该跟踪哪个形状具有给定的索引。"
#: doc/classes/Physics2DServer.xml:282
@@ -49128,15 +50548,16 @@ msgid "Returns the continuous collision detection mode."
msgstr "返回连续碰撞检测模å¼ã€‚"
#: doc/classes/Physics2DServer.xml:351
-#, fuzzy
-msgid "Returns the [Physics2DDirectBodyState] of the body."
-msgstr "返回body的[PhysicsDirectBodyState2D]。"
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
+msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
msgid ""
"Returns the maximum contacts that can be reported. See [method "
"body_set_max_contacts_reported]."
-msgstr "è¿”å›žå¯æŠ¥å‘Šçš„æœ€å¤§è”系数。å‚阅[method body_set_max_contacts_reported]。"
+msgstr "è¿”å›žå¯æŠ¥å‘Šçš„æœ€å¤§æŽ¥è§¦æ•°ã€‚å‚阅[method body_set_max_contacts_reported]。"
#: doc/classes/Physics2DServer.xml:365 doc/classes/PhysicsServer.xml:355
msgid "Returns the body mode."
@@ -49224,8 +50645,8 @@ msgid ""
"Sets the function used to calculate physics for an object, if that object "
"allows it (see [method body_set_omit_force_integration])."
msgstr ""
-"设置用于计算物体物ç†å­¦çš„函数,如果该物体å…许的è¯ï¼ˆè§[method "
-"body_set_omit_force_integration])。"
+"设置用于物体物ç†è¿ç®—的函数,如果该物体å…许的è¯ï¼Œå‚阅[method "
+"body_set_omit_force_integration]。"
#: doc/classes/Physics2DServer.xml:500 doc/classes/PhysicsServer.xml:519
msgid ""
@@ -49294,19 +50715,19 @@ msgid ""
"Note that the method doesn't take effect immediately. The state will change "
"on the next physics frame."
msgstr ""
+"使用 [enum BodyState] 常é‡ä¹‹ä¸€è®¾ç½®ç‰©ä½“状æ€ã€‚\n"
+"请注æ„,该方法ä¸ä¼šç«‹å³ç”Ÿæ•ˆã€‚状æ€å°†åœ¨ä¸‹ä¸€ä¸ªç‰©ç†å¸§å‘生å˜åŒ–。"
#: doc/classes/Physics2DServer.xml:603
-#, fuzzy
msgid ""
"Returns [code]true[/code] if a collision would result from moving in the "
"given direction from a given point in space. Margin increases the size of "
"the shapes involved in the collision detection. [Physics2DTestMotionResult] "
"can be passed to return additional information in."
msgstr ""
-"如果从空间中的给定点å‘给定方å‘移动会导致碰撞,则返回[code]true[/code]。Margin"
-"增加å‚与碰撞检测的形状的大å°ã€‚å¯ä»¥é€šè¿‡[PhysicsTestMotionResult2D]æ¥è¿”回é¢å¤–çš„"
-"ä¿¡æ¯ã€‚设置体中形状的元数æ®ã€‚这个元数æ®ä¸Ž[方法Object.set_meta]ä¸åŒï¼Œå¯ä»¥åœ¨å½¢çж"
-"查询中检索到。"
+"如果从空间中的给定点沿给定方å‘移动会导致碰撞,则返回 [code]true[/code]。边è·"
+"增加了碰撞检测中涉åŠçš„形状的大å°ã€‚ 通过返回[Physics2DTestMotionResult] å¯ä»¥é™„"
+"加信æ¯ã€‚"
#: doc/classes/Physics2DServer.xml:633
msgid ""
@@ -49316,27 +50737,23 @@ msgstr ""
"在两个体之间创建一个阻尼弹簧关节。如果没有指定,第二个体将被å‡å®šä¸ºå…³èŠ‚æœ¬èº«ã€‚"
#: doc/classes/Physics2DServer.xml:641
-#, fuzzy
msgid "Returns the value of a damped spring joint parameter."
-msgstr "è¿”å›žå…³èŠ‚å‚æ•°çš„值。"
+msgstr "è¿”å›žé˜»å°¼å¼¹ç°§å…³èŠ‚å‚æ•°å€¼ã€‚"
#: doc/classes/Physics2DServer.xml:650
-#, fuzzy
msgid ""
"Sets a damped spring joint parameter. See [enum DampedStringParam] for a "
"list of available parameters."
-msgstr ""
-"è®¾ç½®ä¸€ä¸ªé˜»å°¼å¼¹ç°§å…³èŠ‚å‚æ•°ã€‚å‚阅[enum DampedSpringParam]获å–å¯ç”¨å‚数列表。"
+msgstr "è®¾ç½®é˜»å°¼å¼¹ç°§å…³èŠ‚å‚æ•°ã€‚å‚阅[enum DampedStringParam]获å–å¯ç”¨å‚数的列表。"
#: doc/classes/Physics2DServer.xml:657
-#, fuzzy
msgid ""
"Destroys any of the objects created by Physics2DServer. If the [RID] passed "
"is not one of the objects that can be created by Physics2DServer, an error "
"will be sent to the console."
msgstr ""
-"销æ¯ä»»ä½•ç”±PhysicsServer2D创建的对象。如果传入的[RID]䏿˜¯PhysicsServer2Då¯ä»¥åˆ›"
-"å»ºçš„å¯¹è±¡ä¹‹ä¸€ï¼Œåˆ™ä¼šå‘æŽ§åˆ¶å°å‘é€ä¸€ä¸ªé”™è¯¯ã€‚"
+"销æ¯ç”± Physics2DServer 创建的任何对象。如果传递的 [RID] 䏿˜¯ Physics2DServer "
+"å¯ä»¥åˆ›å»ºçš„å¯¹è±¡ä¹‹ä¸€ï¼Œåˆ™ä¼šå‘æŽ§åˆ¶å°å‘é€é”™è¯¯ã€‚"
#: doc/classes/Physics2DServer.xml:664
msgid ""
@@ -49385,6 +50802,8 @@ msgid ""
"CPU power, which can decrease performance. The default value is [code]8[/"
"code]."
msgstr ""
+"设置计算碰撞体速度的迭代次数。迭代次数越多,碰撞就越准确。但是,更大é‡çš„迭代"
+"éœ€è¦æ›´å¤šçš„ CPU 能力,这会é™ä½Žæ€§èƒ½ã€‚默认值为 [code]8[/code]。"
#: doc/classes/Physics2DServer.xml:749 doc/classes/PhysicsServer.xml:859
msgid "Returns the shape data."
@@ -49413,13 +50832,11 @@ msgstr ""
"一个主体。"
#: doc/classes/Physics2DServer.xml:777
-#, fuzzy
msgid ""
"Returns the state of a space, a [Physics2DDirectSpaceState]. This object can "
"be used to make collision/intersection queries."
msgstr ""
-"返回一个空间的状æ€ï¼Œä¸€ä¸ª[PhysicsDirectSpaceState2D]。这个对象å¯ä»¥ç”¨æ¥è¿›è¡Œç¢°"
-"撞/交集查询。"
+"返回空间的状æ€ï¼Œ[Physics2DDirectSpaceState]。此对象å¯ç”¨äºŽè¿›è¡Œç¢°æ’ž/相交查询。"
#: doc/classes/Physics2DServer.xml:785 doc/classes/PhysicsServer.xml:912
msgid "Returns the value of a space parameter."
@@ -49621,8 +51038,8 @@ msgid ""
"far. This way, many overlapping areas can combine their physics to make "
"interesting effects."
msgstr ""
-"这个区域把它的é‡åŠ›/阻尼加到迄今为止已ç»è®¡ç®—过的任何东西上。这样一æ¥ï¼Œè®¸å¤šé‡å "
-"的区域å¯ä»¥ç»“åˆå®ƒä»¬çš„物ç†å­¦æ¥åšå‡ºæœ‰è¶£çš„æ•ˆæžœã€‚"
+"此区域把它的é‡åŠ›/阻尼加到目å‰å·²ç»è®¡ç®—过的对象上。这样一æ¥ï¼Œè®¸å¤šé‡å çš„区域å¯ä»¥"
+"结åˆå®ƒä»¬çš„物ç†è¿ç®—æ¥äº§ç”Ÿæœ‰è¶£çš„æ•ˆæžœã€‚"
#: doc/classes/Physics2DServer.xml:892 doc/classes/PhysicsServer.xml:1206
msgid ""
@@ -49664,7 +51081,7 @@ msgid ""
"Constant for rigid bodies in character mode. In this mode, a body can not "
"rotate, and only its linear velocity is affected by physics."
msgstr ""
-"角色模å¼ä¸‹çš„åˆšä½“çš„å¸¸æ•°ã€‚åœ¨è¿™ç§æ¨¡å¼ä¸‹ï¼Œç‰©ä½“ä¸èƒ½æ—‹è½¬ï¼Œåªæœ‰å®ƒçš„线速度å—物ç†å­¦å½±"
+"角色模å¼ä¸‹åˆšä½“çš„å¸¸æ•°ã€‚åœ¨è¿™ç§æ¨¡å¼ä¸‹ï¼Œç‰©ä½“ä¸èƒ½æ—‹è½¬ï¼Œåªæœ‰å®ƒçš„线速度å—物ç†è¿ç®—å½±"
"å“。"
#: doc/classes/Physics2DServer.xml:913 doc/classes/PhysicsServer.xml:1227
@@ -49717,7 +51134,7 @@ msgstr "常数,用于使物体沉ç¡/唤醒,或得到它是å¦åœ¨æ²‰ç¡ã€‚"
#: doc/classes/Physics2DServer.xml:949 doc/classes/PhysicsServer.xml:1260
msgid "Constant to set/get whether the body can sleep."
-msgstr "常数,用于设置/获å–身体是å¦å¯ä»¥æ²‰ç¡ã€‚"
+msgstr "常é‡ï¼Œç”¨äºŽè®¾ç½®/获å–物体是å¦å¯ä»¥ä¼‘眠。"
#: doc/classes/Physics2DServer.xml:952
msgid "Constant to create pin joints."
@@ -49802,21 +51219,15 @@ msgid "Parameters to be sent to a 2D shape physics query."
msgstr "è¦å‘é€åˆ°2Då½¢çŠ¶ç‰©ç†æŸ¥è¯¢çš„傿•°ã€‚"
#: doc/classes/Physics2DShapeQueryParameters.xml:7
-#, fuzzy
msgid ""
"This class contains the shape and other parameters for 2D intersection/"
"collision queries."
-msgstr ""
-"这个类包å«äºŒç»´äº¤é›†/ç¢°æ’žæŸ¥è¯¢çš„å½¢çŠ¶å’Œå…¶ä»–å‚æ•°ã€‚å‚阅"
-"[PhysicsShapeQueryResult2D]。"
+msgstr "此类包å«ç”¨äºŽ 2D 相交/ç¢°æ’žæŸ¥è¯¢çš„å½¢çŠ¶å’Œå…¶ä»–å‚æ•°ã€‚"
#: doc/classes/Physics2DShapeQueryParameters.xml:16
-#, fuzzy
msgid ""
"Sets the [Shape2D] that will be used for collision/intersection queries."
-msgstr ""
-"返回一个空间的状æ€ï¼Œä¸€ä¸ª[PhysicsDirectSpaceState2D]。这个对象å¯ä»¥ç”¨æ¥è¿›è¡Œç¢°"
-"撞/交集查询。"
+msgstr "设置用于碰撞/相交查询的 [Shape2D]。"
#: doc/classes/Physics2DShapeQueryParameters.xml:22
msgid "If [code]true[/code], the query will take [Area2D]s into account."
@@ -49835,6 +51246,9 @@ msgid ""
"physics_introduction.html#collision-layers-and-masks]Collision layers and "
"masks[/url] in the documentation for more information."
msgstr ""
+"查询将考虑的物ç†å±‚ï¼ˆä½œä¸ºä½æŽ©ç ï¼‰ã€‚有关更多信æ¯ï¼Œè¯·å‚阅文档中的 [url=https://"
+"docs.godotengine.org/zh_CN/stable/tutorials/physics/physics_introduction."
+"html#collision-layers-and-masks]碰撞层和掩ç [/url]。"
#: doc/classes/Physics2DShapeQueryParameters.xml:31
#: doc/classes/PhysicsShapeQueryParameters.xml:31
@@ -49854,7 +51268,7 @@ msgstr "正在查询的形状的è¿åŠ¨ã€‚"
#: doc/classes/Physics2DShapeQueryParameters.xml:40
#: doc/classes/PhysicsShapeQueryParameters.xml:37
msgid "The queried shape's [RID]. See also [method set_shape]."
-msgstr ""
+msgstr "查询形状的 [RID]。å¦è§[method set_shape]。"
#: doc/classes/Physics2DShapeQueryParameters.xml:43
#: doc/classes/PhysicsShapeQueryParameters.xml:40
@@ -49866,11 +51280,10 @@ msgid "Base class for all objects affected by physics in 3D space."
msgstr "在3D空间中å—物ç†å½±å“的所有对象的基类。"
#: doc/classes/PhysicsBody.xml:7
-#, fuzzy
msgid ""
"PhysicsBody is an abstract base class for implementing a physics body. All "
"*Body types inherit from it."
-msgstr "PhysicsBody3D是一个实现物ç†ä½“的抽象基类。所有*Body类型都继承自它。"
+msgstr "PhysicsBody 是用于实现物ç†ä½“的抽象基类。所有 *Body 类型都继承自它。"
#: doc/classes/PhysicsBody.xml:17 doc/classes/PhysicsBody2D.xml:17
#: doc/classes/SoftBody.xml:17
@@ -49902,31 +51315,25 @@ msgstr ""
"PhysicsBody2D是一个用于实现物ç†å®žä½“的抽象基类。所有*Body2D类型都继承自它。"
#: doc/classes/PhysicsBody2D.xml:37
-#, fuzzy
msgid ""
"Both collision_layer and collision_mask. Returns collision_layer when "
"accessed. Updates collision_layer and collision_mask when modified."
-msgstr ""
-"[member collision_layer]和[member collision_mask]。当访问时返回[member "
-"collision_layer]ã€‚ä¿®æ”¹åŽæ›´æ–°[member collision_layer]å’Œ[member "
-"collision_mask]。"
+msgstr "碰撞层和碰撞掩ç ã€‚访问时返回碰撞层。修改时更新碰撞层和碰撞掩ç ã€‚"
#: doc/classes/PhysicsDirectBodyState.xml:4
-#, fuzzy
msgid "Direct access object to a physics body in the [PhysicsServer]."
-msgstr "在[PhysicsServer2D]中直接访问物ç†ä½“。"
+msgstr "直接访问[PhysicsServer]中的物ç†ä½“的对象。"
#: doc/classes/PhysicsDirectBodyState.xml:7
-#, fuzzy
msgid ""
"Provides direct access to a physics body in the [PhysicsServer], allowing "
"safe changes to physics properties. This object is passed via the direct "
"state callback of rigid/character bodies, and is intended for changing the "
"direct state of that body. See [method RigidBody._integrate_forces]."
msgstr ""
-"æä¾›å¯¹[PhysicsServer2D]中的物ç†ä½“的直接访问,å…许安全地改å˜ç‰©ç†å±žæ€§ã€‚这个对象"
-"是通过刚性/字符体的直接状æ€å›žè°ƒä¼ é€’的,目的是为了改å˜è¯¥ä½“的直接状æ€ã€‚å‚阅"
-"[method RigidBody2D._integrate_forces]。"
+"æä¾›å¯¹ [PhysicsServer] 中物ç†å®žä½“的直接访问,å…许安全更改物ç†å±žæ€§ã€‚该对象通过"
+"刚体/角色物体的直接状æ€å›žè°ƒä¼ é€’,直接改å˜è¯¥ç‰©ä½“的状æ€ã€‚å‚阅 [method "
+"RigidBody._integrate_forces]。"
#: doc/classes/PhysicsDirectBodyState.xml:18
msgid ""
@@ -49956,9 +51363,9 @@ msgid ""
"position uses the rotation of the global coordinate system, but is centered "
"at the object's origin."
msgstr ""
-"对物体施加一个有作用点的冲é‡ã€‚冲釿˜¯æ—¶é—´æ— å…³çš„! 在æ¯ä¸€å¸§ä¸­æ–½åŠ ä¸€ä¸ªè„‰å†²å°†äº§ç”Ÿ"
-"一个与帧速率相关的力。出于这个原因,它应该åªåœ¨æ¨¡æ‹Ÿä¸€æ¬¡æ€§å†²å‡»æ—¶ä½¿ç”¨ã€‚该ä½ç½®ä½¿"
-"ç”¨å…¨å±€åæ ‡ç³»çš„æ—‹è½¬ï¼Œä½†ä»¥ç‰©ä½“的原点为中心。"
+"对物体施加一个有作用点的冲é‡ã€‚冲釿˜¯æ—¶é—´æ— å…³çš„! 在æ¯ä¸€å¸§ä¸­æ–½åР冲é‡å°†äº§ç”Ÿä¸€ä¸ª"
+"与帧速率相关的力。出于这个原因,它应该åªåœ¨æ¨¡æ‹Ÿä¸€æ¬¡æ€§å†²å‡»æ—¶ä½¿ç”¨ã€‚该ä½ç½®ä½¿ç”¨å…¨"
+"局忠‡ç³»çš„æ—‹è½¬ï¼Œä½†ä»¥ç‰©ä½“的原点为中心。"
#: doc/classes/PhysicsDirectBodyState.xml:57
msgid ""
@@ -49974,33 +51381,30 @@ msgid "Returns the collider object."
msgstr "返回碰撞对象。"
#: doc/classes/PhysicsDirectBodyState.xml:105
-#, fuzzy
msgid ""
"Returns the number of contacts this body has with other bodies.\n"
"[b]Note:[/b] By default, this returns 0 unless bodies are configured to "
"monitor contacts. See [member RigidBody.contact_monitor]."
msgstr ""
-"返回此实体与其他实体的è”系数。\n"
-"[b] 注æ„:[/b]默认情况下,除éžä¸»ä½“被设为监视è”系人,å¦åˆ™è¿”回0。请å‚阅 "
-"[member RigidBody2D.contact_monitor]。"
+"返回此物体与其他物体的接触次数。\n"
+"[b] 注æ„:[/b]默认情况下,除éžç‰©ä½“被设为监视接触者,å¦åˆ™è¿”回0。å‚阅 [member "
+"RigidBody2D.contact_monitor]。"
#: doc/classes/PhysicsDirectBodyState.xml:113
msgid "Impulse created by the contact. Only implemented for Bullet physics."
msgstr "由接触产生的冲é‡ã€‚仅适用于å­å¼¹ç‰©ç†ã€‚"
#: doc/classes/PhysicsDirectSpaceState.xml:4
-#, fuzzy
msgid "Direct access object to a space in the [PhysicsServer]."
-msgstr "直接访问[PhysicsServer2D]中的一个空间。"
+msgstr "直接访问[PhysicsServer]中空间的对象。"
#: doc/classes/PhysicsDirectSpaceState.xml:7
-#, fuzzy
msgid ""
"Direct access object to a space in the [PhysicsServer]. It's used mainly to "
"do queries against objects and areas residing in a given space."
msgstr ""
-"直接访问[PhysicsServer2D]中的一个空间。它主è¦ç”¨äºŽå¯¹ç»™å®šç©ºé—´ä¸­çš„对象和区域进行"
-"查询。"
+"直接访问[PhysicsServer]中空间的对象。它主è¦ç”¨äºŽå¯¹é©»ç•™åœ¨ç‰¹å®šç©ºé—´çš„对象和区域进"
+"行查询。"
#: doc/classes/PhysicsDirectSpaceState.xml:19
msgid ""
@@ -50016,9 +51420,15 @@ msgid ""
"inside of, will be ignored. Use [method collide_shape] to determine the "
"[Shape]s that the shape is already colliding with."
msgstr ""
+"检查 [Shape] å¯ä»¥ç§»åŠ¨å¤šè¿œè€Œä¸ä¼šå‘ç”Ÿç¢°æ’žã€‚æŸ¥è¯¢çš„æ‰€æœ‰å‚æ•°ï¼ŒåŒ…括形状,都是通过 "
+"[PhysicsShapeQueryParameters] 对象æä¾›çš„。\n"
+"返回一个包å«è¿åŠ¨çš„å®‰å…¨å’Œä¸å®‰å…¨æ¯”例(0 到 1 之间)的数组。安全比例是在没有碰撞"
+"的情况下å¯ä»¥è¿›è¡Œçš„è¿åŠ¨çš„æœ€å¤§æ¯”ä¾‹ã€‚ä¸å®‰å…¨æ¯”例是碰撞必须移动的è·ç¦»çš„æœ€å°éƒ¨åˆ†ã€‚"
+"如果未检测到碰撞,将返回 [code][1.0, 1.0][/code] 的结果。\n"
+"[b]注æ„:[/b] 任何已ç»ç¢°æ’žçš„[Shape2D](比如内部的)会被忽略。使用 [method "
+"collide_shape] 确定形状已ç»ç¢°æ’žçš„ [Shape]。"
#: doc/classes/PhysicsDirectSpaceState.xml:29
-#, fuzzy
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The resulting array "
@@ -50026,12 +51436,11 @@ msgid ""
"[method intersect_shape], the number of returned results can be limited to "
"save processing time."
msgstr ""
-"通过[PhysicsShapeQueryParameters2D]对象对空间检查形状的交集。生æˆçš„æ•°ç»„包å«ä¸€"
-"个与å¦ä¸€ä¸ªå½¢çŠ¶ç›¸äº¤çš„ç‚¹åˆ—è¡¨ã€‚ä¸Ž[method intersect_shape]一样,å¯ä»¥é™åˆ¶è¿”回结果"
-"的数é‡ï¼Œä»¥èŠ‚çœå¤„ç†æ—¶é—´ã€‚"
+"通过[PhysicsShapeQueryParameters]对象给出的形状与空间检查交点。结果数组包å«ä¸€"
+"个形状与å¦ä¸€ä¸ªå½¢çŠ¶ç›¸äº¤çš„ç‚¹çš„åˆ—è¡¨ã€‚ä¸Ž[method intersect_shape]一样,å¯ä»¥é™åˆ¶è¿”"
+"回结果的数é‡ï¼Œä»¥èŠ‚çœå¤„ç†æ—¶é—´ã€‚"
#: doc/classes/PhysicsDirectSpaceState.xml:36
-#, fuzzy
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. If it collides with "
@@ -50047,20 +51456,49 @@ msgid ""
"If the shape did not intersect anything, then an empty dictionary is "
"returned instead."
msgstr ""
-"检查形状的交å‰ç‚¹ï¼Œé€šè¿‡[PhysicsShapeQueryParameters3D]对象,针对空间。如果它与"
-"多个形状碰撞,则选择最近的一个。返回的对象是一个包å«ä»¥ä¸‹å­—段的字典:\n"
+"检查通过[PhysicsShapeQueryParameters]对象给出的形状与空间的交点。如果它与一个"
+"以上的形状å‘生碰撞,则选择最近的。返回的对象是包å«ä»¥ä¸‹å­—段的字典:\n"
"[code]collider_id[/code]:碰撞对象的ID。\n"
-"[code]linear_velocity[/code]:碰撞对象的速度[Vector3]。如果对象是一个"
-"[Area3D],结果是[code](0,0,0)[/code]。\n"
+"[code]linear_velocity[/code]:碰撞对象的速度[Vector3]。如果对象是一个[Area],"
+"结果是[code](0, 0, 0)[/code]。\n"
"[code]normal[/code]:ç‰©ä½“åœ¨äº¤ç‚¹å¤„çš„è¡¨é¢æ³•线。\n"
-"[code]point[/code]:交点。\n"
-"[code]rid[/code]:相交对象的[rid]。\n"
-"[code]shape[/code]:碰撞形状的形状指数。\n"
-"如果形状没有与任何东西相交,则返回一个空字典。"
+"[code]点[/code]:相交点。\n"
+"[code]rid[/code]:相交物体的[RID]。\n"
+"[code]shape[/code]:碰撞形状的形状索引。\n"
+"如果该形状没有与任何物体相交,那么将返回空的字典。"
#: doc/classes/PhysicsDirectSpaceState.xml:55
#, fuzzy
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+"在给定的空间中与一æ¡å°„线相交。返回的对象是具有下列字段的字典:\n"
+"[code]collider[/code]:碰撞的对象。\n"
+"[code]collider_id[/code]:碰撞对象的ID。\n"
+"[code]normal[/code]:ç‰©ä½“åœ¨ç›¸äº¤ç‚¹çš„è¡¨é¢æ³•线。\n"
+"[code]position[/code]:交å‰ç‚¹ã€‚\n"
+"[code]rid[/code]:相交物体的[RID]。\n"
+"[code]形状[/code]:碰撞形状的形状索引。\n"
+"如果射线没有与任何物体相交,那么将返回空的字典。\n"
+"此外,该方法å¯ä»¥æŽ¥å—一个[code]exclude[/code]对象或[RID]数组,该数组将被排除在"
+"碰撞之外,[code]collision_mask[/code]使ީç è¡¨ç¤ºè¦æ£€æŸ¥çš„物ç†å±‚,或者布尔值æ¥ç¡®"
+"定射线是å¦åº”该分别与[PhysicsBody]或[Area]å‘生碰撞。"
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -50077,20 +51515,19 @@ msgid ""
"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
"respectively."
msgstr ""
-"在一个给定的空间中与一æ¡å°„线相交。返回的对象是一个具有下列字段的字典。\n"
-"[code]collider[/code]。碰撞的对象。\n"
-"[code]collider_id[/code]。碰撞对象的ID。\n"
-"[code]normal[/code]: å¯¹è±¡åœ¨äº¤æ±‡ç‚¹çš„è¡¨é¢æ³•线。\n"
-"[code]position[/code](ä½ç½®ï¼‰ã€‚交å‰ç‚¹ã€‚\n"
-"[code]rid[/code]: 相交对象的[RID]。\n"
-"[code]shape[/code]: 碰撞形状的形状索引。\n"
-"如果射线没有与任何物体相交,那么将返回一个空的字典。\n"
-"此外,该方法å¯ä»¥æŽ¥å—一个[code]exclude[/code]数组,该数组中的对象或[RID]将被排"
-"除在碰撞之外,一个[code]collision_mask[/code]使ީç ä»£è¡¨è¦æ£€æŸ¥çš„物ç†å±‚,或者布"
-"尔值æ¥ç¡®å®šå°„线是å¦åº”该分别与[PhysicsBody3D]或[Area3D]å‘生碰撞。"
+"在给定的空间中与一æ¡å°„线相交。返回的对象是具有下列字段的字典:\n"
+"[code]collider[/code]:碰撞的对象。\n"
+"[code]collider_id[/code]:碰撞对象的ID。\n"
+"[code]normal[/code]:ç‰©ä½“åœ¨ç›¸äº¤ç‚¹çš„è¡¨é¢æ³•线。\n"
+"[code]position[/code]:交å‰ç‚¹ã€‚\n"
+"[code]rid[/code]:相交物体的[RID]。\n"
+"[code]形状[/code]:碰撞形状的形状索引。\n"
+"如果射线没有与任何物体相交,那么将返回空的字典。\n"
+"此外,该方法å¯ä»¥æŽ¥å—一个[code]exclude[/code]对象或[RID]数组,该数组将被排除在"
+"碰撞之外,[code]collision_mask[/code]使ީç è¡¨ç¤ºè¦æ£€æŸ¥çš„物ç†å±‚,或者布尔值æ¥ç¡®"
+"定射线是å¦åº”该分别与[PhysicsBody]或[Area]å‘生碰撞。"
-#: doc/classes/PhysicsDirectSpaceState.xml:71
-#, fuzzy
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -50103,23 +51540,22 @@ msgid ""
"The number of intersections can be limited with the [code]max_results[/code] "
"parameter, to reduce the processing time."
msgstr ""
-"检查形状的交å‰ç‚¹ï¼Œé€šè¿‡[PhysicsShapeQueryParameters3D]对象,针对空间。相交形状"
-"在一个包å«ä»¥ä¸‹å­—段的字典数组中返回:\n"
-"[code]collider[/code]:碰撞对象。\n"
+"通过[PhysicsShapeQueryParameters]对象给出的形状与空间检查交点。相交的形状会以"
+"数组的形å¼è¿”å›žï¼Œè¯¥æ•°ç»„åŒ…å«æœ‰ä»¥ä¸‹å­—段的字典:\n"
+"[code]collider[/code]:碰撞的对象。\n"
"[code]collider_id[/code]:碰撞对象的ID。\n"
-"[code]rid[/code]:相交对象的[rid]。\n"
-"[code]shape[/code]:碰撞形状的形状指数。\n"
-"å¯ä»¥ä½¿ç”¨[code]max_results[/code]傿•°é™åˆ¶äº¤é›†çš„æ•°é‡ï¼Œä»¥å‡å°‘å¤„ç†æ—¶é—´ã€‚"
+"[code]rid[/code]:相交物体的[RID]。\n"
+"[code]shape[/code]:碰撞形状的形状索引。\n"
+"å¯ä»¥ç”¨[code]max_results[/code]傿•°é™åˆ¶ç›¸äº¤çš„æ•°é‡ï¼Œä»¥å‡å°‘å¤„ç†æ—¶é—´ã€‚"
#: doc/classes/PhysicsMaterial.xml:4
msgid "A material for physics properties."
-msgstr "具有物ç†å­¦å±žæ€§çš„æè´¨ã€‚"
+msgstr "具有物ç†å±žæ€§çš„æè´¨ã€‚"
#: doc/classes/PhysicsMaterial.xml:7
-#, fuzzy
msgid ""
"Provides a means of modifying the collision properties of a [PhysicsBody]."
-msgstr "æä¾›ä¸€ç§æ–¹æ³•æ¥ä¿®æ”¹[PhysicsBody3D]的碰撞属性。"
+msgstr "æä¾›äº†ä¸€ç§ä¿®æ”¹[PhysicsBody]的碰撞属性的方法。"
#: doc/classes/PhysicsMaterial.xml:15
msgid ""
@@ -50158,13 +51594,12 @@ msgid "Server interface for low-level physics access."
msgstr "用于低级物ç†è®¿é—®çš„æœåŠ¡å™¨æŽ¥å£ã€‚"
#: doc/classes/PhysicsServer.xml:7
-#, fuzzy
msgid ""
"PhysicsServer is the server responsible for all 3D physics. It can create "
"many kinds of physics objects, but does not insert them on the node tree."
msgstr ""
-"PhysicsServer3D是负责所有3D物ç†çš„æœåŠ¡å™¨ã€‚å®ƒå¯ä»¥åˆ›å»ºå¤šç§ç‰©ç†å¯¹è±¡ï¼Œä½†ä¸èƒ½å°†å®ƒä»¬"
-"æ’入节点树。"
+"PhysicsServer是负责所有3D物ç†çš„æœåŠ¡ã€‚å®ƒå¯ä»¥åˆ›å»ºè®¸å¤šç§ç±»çš„物ç†å¯¹è±¡ï¼Œä½†ä¸ä¼šåœ¨èŠ‚"
+"点树上æ’入这些对象。"
#: doc/classes/PhysicsServer.xml:40
msgid "Creates an [Area]."
@@ -50201,7 +51636,7 @@ msgstr ""
msgid ""
"Gives the body a push at a [code]position[/code] in the direction of the "
"[code]impulse[/code]."
-msgstr "在[code]position[/code]impulse[code]è„‰å†²æ–¹å‘æŽ¨åŠ¨ç‰©ä½“[/code]。"
+msgstr "在[code]position[/code]impulse[code]冲釿–¹å‘推动物体[/code]。"
#: doc/classes/PhysicsServer.xml:290
msgid "Gives the body a push to rotate it."
@@ -50213,8 +51648,8 @@ msgid ""
"BodyMode] constants, for the type of body created. Additionally, the body "
"can be created in sleeping state to save processing time."
msgstr ""
-"创建一个物ç†å®žä½“ã€‚å¯¹äºŽåˆ›å»ºçš„å®žä½“ç±»åž‹ï¼Œç¬¬ä¸€ä¸ªå‚æ•°å¯ä»¥æ˜¯[enum BodyMode]常é‡ä¸­çš„"
-"任何值。此外,身体å¯ä»¥åœ¨ç¡çœ çжæ€ä¸‹åˆ›å»ºï¼Œä»¥èŠ‚çœå¤„ç†æ—¶é—´ã€‚"
+"创建物ç†ä½“ã€‚å¯¹äºŽåˆ›å»ºçš„ç‰©ä½“ç±»åž‹ï¼Œç¬¬ä¸€ä¸ªå‚æ•°å¯ä»¥æ˜¯[enum BodyMode]常é‡ä¸­çš„任何"
+"值。此外,物体å¯ä»¥åœ¨ä¼‘眠状æ€ä¸‹åˆ›å»ºï¼Œä»¥èŠ‚çœå¤„ç†æ—¶é—´ã€‚"
#: doc/classes/PhysicsServer.xml:327
msgid ""
@@ -50226,8 +51661,10 @@ msgstr ""
#: doc/classes/PhysicsServer.xml:335
#, fuzzy
-msgid "Returns the [PhysicsDirectBodyState] of the body."
-msgstr "返回body的[PhysicsDirectBodyState2D]。"
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
+msgstr "返回指定属性的åˆå§‹å€¼ã€‚如果属性ä¸å­˜åœ¨ï¼Œåˆ™è¿”回[code]null[/code]。"
#: doc/classes/PhysicsServer.xml:370
msgid ""
@@ -50281,16 +51718,13 @@ msgid "Sets a body state (see [enum BodyState] constants)."
msgstr "设置主体状æ€ï¼ˆè¯·å‚阅[enum BodyState]常é‡ï¼‰ã€‚"
#: doc/classes/PhysicsServer.xml:608
-#, fuzzy
msgid ""
"Returns [code]true[/code] if a collision would result from moving in the "
"given direction from a given point in space. [PhysicsTestMotionResult] can "
"be passed to return additional information in."
msgstr ""
-"如果从空间中的给定点å‘给定方å‘移动会导致碰撞,则返回[code]true[/code]。Margin"
-"增加å‚与碰撞检测的形状的大å°ã€‚å¯ä»¥é€šè¿‡[PhysicsTestMotionResult2D]æ¥è¿”回é¢å¤–çš„"
-"ä¿¡æ¯ã€‚设置体中形状的元数æ®ã€‚这个元数æ®ä¸Ž[方法Object.set_meta]ä¸åŒï¼Œå¯ä»¥åœ¨å½¢çж"
-"查询中检索到。"
+"如果从空间的给定点å‘给定方å‘移动会导致碰撞,则返回[code]true[/code]。å¯ä»¥é€šè¿‡"
+"[PhysicsTestMotionResult]æ¥è¿”回é¢å¤–的信æ¯ã€‚"
#: doc/classes/PhysicsServer.xml:616
msgid ""
@@ -50303,14 +51737,13 @@ msgid ""
msgstr "è®¾ç½®åœ†é”¥ä½“æ‰­æ›²å…³èŠ‚å‚æ•°ï¼ˆè¯·å‚阅[enum ConeTwistJointParam]常é‡ï¼‰ã€‚"
#: doc/classes/PhysicsServer.xml:632
-#, fuzzy
msgid ""
"Destroys any of the objects created by PhysicsServer. If the [RID] passed is "
"not one of the objects that can be created by PhysicsServer, an error will "
"be sent to the console."
msgstr ""
-"销æ¯ä»»ä½•ç”±PhysicsServer2D创建的对象。如果传入的[RID]䏿˜¯PhysicsServer2Då¯ä»¥åˆ›"
-"å»ºçš„å¯¹è±¡ä¹‹ä¸€ï¼Œåˆ™ä¼šå‘æŽ§åˆ¶å°å‘é€ä¸€ä¸ªé”™è¯¯ã€‚"
+"销æ¯ç”± PhysicsServer 创建的任何对象。如果传递的 [RID] 䏿˜¯ PhysicsServer å¯ä»¥"
+"åˆ›å»ºçš„å¯¹è±¡ä¹‹ä¸€ï¼Œåˆ™ä¼šå‘æŽ§åˆ¶å°å‘é€é”™è¯¯ã€‚"
#: doc/classes/PhysicsServer.xml:641
msgid ""
@@ -50376,19 +51809,16 @@ msgid "Creates a [SliderJoint]."
msgstr "创建一个 [SliderJoint]关节。"
#: doc/classes/PhysicsServer.xml:768
-#, fuzzy
msgid "Gets the priority value of the Joint."
-msgstr "获å–Joint3D的优先级值。"
+msgstr "获å–关节的优先级值。"
#: doc/classes/PhysicsServer.xml:775
-#, fuzzy
msgid "Returns the type of the Joint."
-msgstr "返回Joint3D的类型。"
+msgstr "返回关节的类型。"
#: doc/classes/PhysicsServer.xml:783
-#, fuzzy
msgid "Sets the priority value of the Joint."
-msgstr "设置Joint3D的优先级值。"
+msgstr "设置关节的优先级值。"
#: doc/classes/PhysicsServer.xml:790
msgid ""
@@ -50430,6 +51860,10 @@ msgid ""
"[b]Note:[/b] Only has an effect when using the GodotPhysics engine, not the "
"default Bullet physics engine."
msgstr ""
+"设置计算碰撞体速度的迭代次数。迭代次数越多,碰撞就越准确。但是,更大é‡çš„迭代"
+"éœ€è¦æ›´å¤šçš„ CPU 能力,这会é™ä½Žæ€§èƒ½ã€‚默认值为 [code]8[/code]。\n"
+"[b]注æ„:[/b] 仅在使用 GodotPhysics å¼•æ“Žæ—¶æœ‰æ•ˆï¼Œè€Œä¸æ˜¯é»˜è®¤çš„ Bullet 物ç†å¼•"
+"擎。"
#: doc/classes/PhysicsServer.xml:852
msgid ""
@@ -50449,13 +51883,11 @@ msgid "Gets a slider_joint parameter (see [enum SliderJointParam] constants)."
msgstr "获å–slider_joint傿•°ï¼ˆè¯·å‚阅[enum SliderJointParam]常é‡ï¼‰ã€‚"
#: doc/classes/PhysicsServer.xml:904
-#, fuzzy
msgid ""
"Returns the state of a space, a [PhysicsDirectSpaceState]. This object can "
"be used to make collision/intersection queries."
msgstr ""
-"返回一个空间的状æ€ï¼Œä¸€ä¸ª[PhysicsDirectSpaceState2D]。这个对象å¯ä»¥ç”¨æ¥è¿›è¡Œç¢°"
-"撞/交集查询。"
+"返回空间的状æ€ï¼Œ[PhysicsDirectSpaceState]。此对象å¯ç”¨äºŽè¿›è¡Œç¢°æ’ž/相交查询。"
#: doc/classes/PhysicsServer.xml:936
msgid ""
@@ -50464,29 +51896,24 @@ msgid ""
msgstr "è®¾ç½®ç©ºé—´å‚æ•°çš„值。å¯ç”¨å‚数列表ä½äºŽ[enum SpaceParameter]常é‡ä¸Šã€‚"
#: doc/classes/PhysicsServer.xml:942
-#, fuzzy
msgid "The [Joint] is a [PinJoint]."
-msgstr "[Joint3D]是一个[PinJoint3D]。"
+msgstr "该[Joint] 是 [PinJoint]。"
#: doc/classes/PhysicsServer.xml:945
-#, fuzzy
msgid "The [Joint] is a [HingeJoint]."
-msgstr "[Joint3D]是一个[HingeJoint3D]。"
+msgstr "该 [Joint] 是 [HingeJoint]。"
#: doc/classes/PhysicsServer.xml:948
-#, fuzzy
msgid "The [Joint] is a [SliderJoint]."
-msgstr "[Joint3D]是一个[SliderJoint3D]。"
+msgstr "该 [Joint] 是 [SliderJoint]。"
#: doc/classes/PhysicsServer.xml:951
-#, fuzzy
msgid "The [Joint] is a [ConeTwistJoint]."
-msgstr "[Joint3D]是一个[conetwitstjoint 3d]。"
+msgstr "该 [Joint] 是 [ConeTwistJoint]。"
#: doc/classes/PhysicsServer.xml:954
-#, fuzzy
msgid "The [Joint] is a [Generic6DOFJoint]."
-msgstr "[Joint3D]是一个[Generic6DOFJoint3D]。"
+msgstr "该 [Joint] 是 [Generic6DOFJoint]。"
#: doc/classes/PhysicsServer.xml:957
msgid ""
@@ -50507,11 +51934,10 @@ msgstr ""
"越高越强。"
#: doc/classes/PhysicsServer.xml:965
-#, fuzzy
msgid ""
"If above 0, this value is the maximum value for an impulse that this Joint "
"puts on its ends."
-msgstr "如果大于0,则该值是该Joint3D在其末端施加的冲é‡çš„æœ€å¤§å€¼ã€‚"
+msgstr "如果大于0,这个值就是这个关节对其两端施加的冲é‡çš„æœ€å¤§å€¼ã€‚"
#: doc/classes/PhysicsServer.xml:971
msgid "The maximum rotation across the Hinge."
@@ -50655,11 +52081,10 @@ msgid "Represents the size of the [enum SliderJointParam] enum."
msgstr "表示[enum SliderJointParam]枚举的大å°ã€‚"
#: doc/classes/PhysicsServer.xml:1080
-#, fuzzy
msgid ""
"The ease with which the Joint twists, if it's too low, it takes more force "
"to twist the joint."
-msgstr "å…³èŠ‚ä¸‰ç»´æ‰­æ›²çš„éš¾æ˜“ç¨‹åº¦ï¼Œå¦‚æžœå¤ªä½Žï¼Œæ‰­æ›²å…³èŠ‚éœ€è¦æ›´å¤šçš„力。"
+msgstr "å…³èŠ‚æ‰­æ›²çš„éš¾æ˜“ç¨‹åº¦ï¼Œå¦‚æžœå®ƒå¤ªä½Žï¼Œåˆ™éœ€è¦æ›´å¤šçš„åŠ›é‡æ¥æ‰­æ›²å…³èŠ‚ã€‚"
#: doc/classes/PhysicsServer.xml:1092
msgid ""
@@ -50715,89 +52140,74 @@ msgid ""
msgstr "如果[code]set[/code],则此轴上有一个以特定速度为目标的线性电机。"
#: doc/classes/PhysicsServer.xml:1146
-#, fuzzy
msgid "The [Shape] is a [PlaneShape]."
-msgstr "[Shape3D]是一个[RayShape3D]。"
+msgstr "该[Shape] 是 [PlaneShape]。"
#: doc/classes/PhysicsServer.xml:1149
-#, fuzzy
msgid "The [Shape] is a [RayShape]."
-msgstr "[Shape3D]是一个[RayShape3D]。"
+msgstr "该 [Shape] 是 [RayShape]。"
#: doc/classes/PhysicsServer.xml:1152
-#, fuzzy
msgid "The [Shape] is a [SphereShape]."
-msgstr "[Shape3D]是一个[SphereShape3D]。"
+msgstr "该 [Shape] 是一个 [SphereShape]。"
#: doc/classes/PhysicsServer.xml:1155
-#, fuzzy
msgid "The [Shape] is a [BoxShape]."
-msgstr "[Shape3D]是一个[BoxShape3D]。"
+msgstr "该 [Shape] 是一个 [BoxShape]。"
#: doc/classes/PhysicsServer.xml:1158
-#, fuzzy
msgid "The [Shape] is a [CapsuleShape]."
-msgstr "[Shape3D]是一个[CapsuleShape3D]。"
+msgstr "该 [Shape] 是 [CapsuleShape]。"
#: doc/classes/PhysicsServer.xml:1161
-#, fuzzy
msgid "The [Shape] is a [CylinderShape]."
-msgstr "[Shape3D]是[CylinderShape3D]。"
+msgstr "该 [Shape] 是 [CylinderShape]。"
#: doc/classes/PhysicsServer.xml:1164
-#, fuzzy
msgid "The [Shape] is a [ConvexPolygonShape]."
-msgstr "[Shape3D]是[ConvexPolygonShape3D]。"
+msgstr "该 [Shape] 是 [ConvexPolygonShape]。"
#: doc/classes/PhysicsServer.xml:1167
-#, fuzzy
msgid "The [Shape] is a [ConcavePolygonShape]."
-msgstr "[Shape3D]是[ConcavePolygonShape3D]。"
+msgstr "该 [Shape] 是 [ConcavePolygonShape]。"
#: doc/classes/PhysicsServer.xml:1170
-#, fuzzy
msgid "The [Shape] is a [HeightMapShape]."
-msgstr "[Shape3D]是一个[highmapshape3d]。"
+msgstr "该 [Shape] 是 [HeightMapShape]。"
#: doc/classes/PhysicsShapeQueryParameters.xml:4
msgid "Parameters to be sent to a 3D shape physics query."
msgstr "è¦å‘é€åˆ°ä¸‰ç»´å½¢çŠ¶ç‰©ç†æŸ¥è¯¢çš„傿•°ã€‚"
#: doc/classes/PhysicsShapeQueryParameters.xml:7
-#, fuzzy
msgid ""
"This class contains the shape and other parameters for 3D intersection/"
"collision queries."
-msgstr ""
-"此类包å«ä¸‰ç»´ç›¸äº¤/ç¢°æ’žæŸ¥è¯¢çš„å½¢çŠ¶å’Œå…¶ä»–å‚æ•°ã€‚å¦è¯·å‚阅"
-"[PhysicsShapeQueryResult3d]。"
+msgstr "此类包å«ç”¨äºŽ 3D 相交/ç¢°æ’žæŸ¥è¯¢çš„å½¢çŠ¶å’Œå…¶ä»–å‚æ•°ã€‚"
#: doc/classes/PhysicsShapeQueryParameters.xml:16
-#, fuzzy
msgid "Sets the [Shape] that will be used for collision/intersection queries."
-msgstr "将用于填充纹ç†çš„[Gradient]。"
+msgstr "设置将用于碰撞/相交查询的 [Shape]。"
#: doc/classes/PhysicsShapeQueryParameters.xml:22
-#, fuzzy
msgid "If [code]true[/code], the query will take [Area]s into account."
-msgstr "如果[code]true[/code],查询将考虑[Area2D]。"
+msgstr "如果[code]true[/code],查询将考虑[Area]。"
#: doc/classes/PhysicsShapeQueryParameters.xml:25
-#, fuzzy
msgid "If [code]true[/code], the query will take [PhysicsBody]s into account."
-msgstr "如果[code]true[/code],查询将考虑[PhysicsBody2D]。"
+msgstr "如果 [code]true[/code],则查询将考虑 [PhysicsBody]。"
#: doc/classes/PinJoint.xml:4
-#, fuzzy
msgid "Pin joint for 3D PhysicsBodies."
-msgstr "三维形状的图钉关节。"
+msgstr "用于 3D 物ç†ä½“的钉关节。"
#: doc/classes/PinJoint.xml:7
-#, fuzzy
msgid ""
"Pin joint for 3D rigid bodies. It pins 2 bodies (rigid or static) together. "
"See also [Generic6DOFJoint]."
-msgstr "三维刚体的图钉关节。将两个刚体(æˆ–é™æ€)钉在一起。"
+msgstr ""
+"3Dåˆšä½“çš„é’‰å…³èŠ‚ã€‚å®ƒå°†ä¸¤ä¸ªç‰©ä½“ï¼ˆåˆšä½“æˆ–é™æ€ä½“)钉在一起。å‚阅"
+"[Generic6DOFJoint]。"
#: doc/classes/PinJoint.xml:30 doc/classes/PinJoint.xml:41
msgid ""
@@ -50812,22 +52222,19 @@ msgid ""
msgstr "è¢«é’‰åœ¨ä¸€èµ·çš„ç‰©ä½“ä¹‹é—´ä¿æŒå…±é€Ÿçš„力。越高,力越大。"
#: doc/classes/PinJoint.xml:36 doc/classes/PinJoint.xml:47
-#, fuzzy
msgid ""
"If above 0, this value is the maximum value for an impulse that this Joint "
"produces."
-msgstr "如果大于0,这个值就是这个 Joint3D 产生的冲é‡çš„æœ€å¤§å€¼ã€‚"
+msgstr "如果大于0,这个值就是此关节产生的冲é‡çš„æœ€å¤§å€¼ã€‚"
#: doc/classes/PinJoint2D.xml:4
-#, fuzzy
msgid "Pin Joint for 2D shapes."
-msgstr "2D形状的图钉关节。"
+msgstr "用于 2D 形状的钉关节。"
#: doc/classes/PinJoint2D.xml:7
-#, fuzzy
msgid ""
"Pin Joint for 2D rigid bodies. It pins two bodies (rigid or static) together."
-msgstr "用于二维刚体的图钉关节。它将两个物体(åˆšæ€§çš„æˆ–é™æ€çš„)钉在一起。"
+msgstr "用于 2D åˆšä½“çš„é’‰å…³èŠ‚ã€‚å®ƒå°†ä¸¤ä¸ªç‰©ä½“é’‰åœ¨ä¸€èµ·ï¼Œåˆšä½“æˆ–é™æ€ä½“。"
#: doc/classes/PinJoint2D.xml:15
msgid ""
@@ -50883,6 +52290,8 @@ msgid ""
"Returns the center of the plane.\n"
"This method is deprecated, please use [method center] instead."
msgstr ""
+"返回平é¢çš„中心。\n"
+"此方法已被废弃,请使用[method center]代替。"
#: doc/classes/Plane.xml:65
msgid ""
@@ -50995,7 +52404,6 @@ msgid "Class representing a planar [PrimitiveMesh]."
msgstr "表示平é¢çš„类。"
#: doc/classes/PlaneMesh.xml:7
-#, fuzzy
msgid ""
"Class representing a planar [PrimitiveMesh]. This flat mesh does not have a "
"thickness. By default, this mesh is aligned on the X and Z axes; this "
@@ -51006,12 +52414,16 @@ msgid ""
"this, increase [member subdivide_depth] and [member subdivide_width] until "
"you no longer notice UV jittering."
msgstr ""
-"表示平é¢çš„类。这个平é¢ç½‘格没有厚度。默认情况下,这个网格在Xè½´å’ŒZ轴上对é½;è¿™ç§"
-"默认的旋转ä¸é€‚åˆç”¨äºŽå‘Šç¤ºç‰Œæè´¨ã€‚对于告示牌æè´¨ï¼Œä½¿ç”¨[QuadMesh]代替。"
+"è¡¨ç¤ºå¹³é¢ [PrimitiveMesh] 的类。这个平é¢ç½‘格没有厚度。默认情况下,此网格在 X "
+"è½´å’Œ Z 轴上对é½ï¼›æ­¤é»˜è®¤æ—‹è½¬ä¸é€‚åˆä¸Žå¹¿å‘Šç‰Œæè´¨ä¸€èµ·ä½¿ç”¨ã€‚对于广告牌æè´¨ï¼Œè¯·æ”¹"
+"用 [QuadMesh]。\n"
+"[b]注æ„:[/b] å½“ä½¿ç”¨å¤§çº¹ç† [PlaneMesh](例如作为地æ¿ï¼‰æ—¶ï¼Œä½ å¯èƒ½ä¼šå¶ç„¶å‘现 "
+"UV 抖动问题,具体å–决于相机角度。è¦è§£å†³æ­¤é—®é¢˜ï¼Œè¯·å¢žåŠ  [member "
+"subdivide_depth] å’Œ [member subdivide_width],直到你ä¸å†æ³¨æ„到 UV 抖动。"
#: doc/classes/PlaneMesh.xml:16
msgid "Offset from the origin of the generated plane. Useful for particles."
-msgstr ""
+msgstr "从生æˆå¹³é¢çš„原点åç§»ã€‚å¯¹ç²’å­æœ‰ç”¨ã€‚"
#: doc/classes/PlaneMesh.xml:19
msgid "Size of the generated plane."
@@ -51030,28 +52442,25 @@ msgid "Infinite plane shape for 3D collisions."
msgstr "æ— é™çš„å¹³é¢å½¢çŠ¶ï¼Œç”¨äºŽä¸‰ç»´ç¢°æ’žã€‚"
#: doc/classes/PlaneShape.xml:7
-#, fuzzy
msgid ""
"An infinite plane shape for 3D collisions. Note that the [Plane]'s normal "
"matters; anything \"below\" the plane will collide with it. If the "
"[PlaneShape] is used in a [PhysicsBody], it will cause colliding objects "
"placed \"below\" it to teleport \"above\" the plane."
msgstr ""
-"用于三维碰撞的无é™çš„å¹³é¢å½¢çŠ¶ã€‚è¯·æ³¨æ„,[Plane]的法线很é‡è¦ï¼›ä»»ä½• \"低于\" 该平"
-"é¢çš„物体都会与之å‘生碰撞。如果[WorldMarginShape3D]被用于[PhysicsBody3D],它将"
-"导致放置在它 \"下é¢\" 的碰撞物体被传é€åˆ°å¹³é¢ \"上é¢\" 。"
+"用于3D碰撞的无é™çš„å¹³é¢å½¢çŠ¶ã€‚è¯·æ³¨æ„,[Plane]的法线很é‡è¦ï¼›ä»»ä½• \"低于\" 该平é¢"
+"的物体都会与它å‘生碰撞。如果[PlaneShape]被用于[PhysicsBody],它将导致放置在"
+"它 \"下é¢\" 的碰撞物体被传é€åˆ° \"上é¢\" 的平é¢ã€‚"
#: doc/classes/PlaneShape.xml:15
-#, fuzzy
msgid "The [Plane] used by the [PlaneShape] for collision."
-msgstr "[WorldMarginShape3D]用于碰撞的[Plane]å¹³é¢ã€‚"
+msgstr "[PlaneShape] 用于碰撞的 [Plane]。"
#: doc/classes/PointMesh.xml:4
msgid "Mesh with a single Point primitive."
msgstr "å•点原始网格。"
#: doc/classes/PointMesh.xml:7
-#, fuzzy
msgid ""
"The PointMesh is made from a single point. Instead of relying on triangles, "
"points are rendered as a single rectangle on the screen with a constant "
@@ -51065,20 +52474,21 @@ msgid ""
"When using PointMeshes, properties that normally alter vertices will be "
"ignored, including billboard mode, grow, and cull face."
msgstr ""
-"点网格是由一个点构æˆçš„ã€‚ç‚¹ä¸æ˜¯ä¾èµ–于三角形,而是在å±å¹•上以固定大å°å‘ˆçŽ°ä¸ºå•个"
-"矩形。它们的目的是与粒å­ç³»ç»Ÿä¸€èµ·ä½¿ç”¨ï¼Œä½†ä¹Ÿå¯ä»¥ä½œä¸ºä¸€ç§å»‰ä»·çš„æ–¹æ³•æ¥æ¸²æŸ“固定大"
-"å°çš„告示牌精çµ(例如点云)。\n"
-"pointmesh,必须与具有点大å°çš„æè´¨ä¸€èµ·ä½¿ç”¨ã€‚点大å°å¯ä»¥é€šè¿‡[code]POINT_SIZE[/"
-"code]在ç€è‰²å™¨ä¸­è®¿é—®ï¼Œæˆ–者通过设置[member BaseMaterial3D]在[BaseMaterial3D]中"
-"访问。和å˜é‡[member BaseMaterial3D.point_size]。\n"
-"当使用pointmesh时,通常改å˜é¡¶ç‚¹çš„属性将被忽略,包括广告牌模å¼ã€å¢žé•¿å’Œå‰”除é¢ã€‚"
+"PointMesh是由å•个的点构æˆã€‚与其ä¾èµ–三角形与点在å±å¹•上渲染形æˆå…·æœ‰æ’定尺寸的å•"
+"独矩形。其旨在与粒å­ç³»ç»Ÿä¸€èµ·ä½¿ç”¨ï¼Œä½†ä¹Ÿå¯ä»¥ä½œä¸ºä¸€ç§æ¶ˆè€—å°çš„æ–¹å¼æ¥æ¸²æŸ“æ’定尺寸"
+"的广告牌精çµï¼Œä¾‹å¦‚,在点云中。\n"
+"PointMeshes,必须与具有点大å°çš„æè´¨ä¸€èµ·ä½¿ç”¨ã€‚点大å°å¯ä»¥é€šè¿‡[code]POINT_SIZE[/"
+"code]在ç€è‰²å™¨ä¸­è®¿é—®ï¼Œæˆ–者通过设置[member SpatialMaterial."
+"flags_use_point_size]å’Œå˜é‡[member SpatialMaterial.params_point_size]在"
+"[SpatialMaterial]中访问。\n"
+"当使用PointMeshes时,通常改å˜é¡¶ç‚¹çš„属性将被忽略,包括广告牌模å¼ã€å¢žé•¿å’Œå‰”除"
+"é¢ã€‚"
#: doc/classes/Polygon2D.xml:4
msgid "A 2D polygon."
msgstr "一个2D多边形。"
#: doc/classes/Polygon2D.xml:7
-#, fuzzy
msgid ""
"A Polygon2D is defined by a set of points. Each point is connected to the "
"next, with the final point being connected to the first, resulting in a "
@@ -51090,14 +52500,18 @@ msgid ""
"[member ProjectSettings.rendering/limits/buffers/"
"canvas_polygon_index_buffer_size_kb]."
msgstr ""
-"一个Polygon2D是由一组点定义的.æ¯ä¸ªç‚¹ä¸Žä¸‹ä¸€ä¸ªç‚¹ç›¸è¿ž,最åŽä¸€ä¸ªç‚¹ä¸Žç¬¬ä¸€ä¸ªç‚¹ç›¸è¿ž,"
-"从而形æˆä¸€ä¸ªå°é—­çš„多边形.Polygon2Då¯ä»¥ç”¨é¢œè‰²(纯色或æ¸å˜)å¡«å……,也å¯ä»¥ç”¨ç»™å®šçš„è´´"
-"图填充."
+"Polygon2D 由一组点定义。æ¯ä¸ªç‚¹éƒ½è¿žæŽ¥åˆ°ä¸‹ä¸€ä¸ªç‚¹ï¼Œæœ€åŽä¸€ä¸ªç‚¹è¿žæŽ¥åˆ°ç¬¬ä¸€ä¸ªç‚¹ï¼Œä»Ž"
+"而形æˆå°é—­çš„多边形。 Polygon2Dså¯ä»¥å¡«å……颜色(纯色或æ¸å˜è‰²ï¼‰æˆ–填充给定的纹"
+"ç†ã€‚\n"
+"[b]注:[/b] 默认情况下,Godot 一次最多åªèƒ½ç»˜åˆ¶ 4096 个多边形点。è¦å¢žåŠ æ­¤é™"
+"制,请打开项目设置并增加 [member ProjectSettings.rendering/limits/buffers/"
+"canvas_polygon_buffer_size_kb] 和 [member ProjectSettings.rendering/limits/"
+"buffers/canvas_polygon_index_buffer_size_kb]。"
#: doc/classes/Polygon2D.xml:18
msgid ""
"Adds a bone with the specified [code]path[/code] and [code]weights[/code]."
-msgstr "添加具有指定[code]path[/code]和[code]weights[/code]的骨骼."
+msgstr "添加指定[code]path[/code]和[code]weights[/code]的骨骼."
#: doc/classes/Polygon2D.xml:24
msgid "Removes all bones from this [Polygon2D]."
@@ -51161,15 +52575,14 @@ msgid "The offset applied to each vertex."
msgstr "应用于æ¯ä¸ªé¡¶ç‚¹çš„ä½ç½®åç§»é‡."
#: doc/classes/Polygon2D.xml:92
-#, fuzzy
msgid ""
"The polygon's list of vertices. The final point will be connected to the "
"first.\n"
"[b]Note:[/b] This returns a copy of the [PoolVector2Array] rather than a "
"reference."
msgstr ""
-"多边形顶点的列表.最åŽä¸€ä¸ªç‚¹å°†è¿žæŽ¥åˆ°ç¬¬ä¸€ä¸ªç‚¹.\n"
-"[b]注æ„:[/b]这将返回[PoolVector2Array]的拷è´,è€Œä¸æ˜¯å¼•用."
+"多边形的顶点列表。最åŽä¸€ç‚¹å°†è¿žæŽ¥åˆ°ç¬¬ä¸€ä¸ªã€‚\n"
+"[b]注æ„:[/b] 这将返回 [PoolVector2Array] çš„å‰¯æœ¬è€Œä¸æ˜¯å¼•用。"
#: doc/classes/Polygon2D.xml:100
msgid ""
@@ -51220,53 +52633,45 @@ msgstr ""
"如果数é‡å°‘,则未定义的顶点将使用[code]color[/code]."
#: doc/classes/PoolByteArray.xml:4
-#, fuzzy
msgid "A pooled [Array] of bytes."
-msgstr "一个打包的字节[Array]。"
+msgstr "[Array] 字节集åˆã€‚"
#: doc/classes/PoolByteArray.xml:7
-#, fuzzy
msgid ""
"An [Array] specifically designed to hold bytes. Optimized for memory usage, "
"does not fragment the memory.\n"
"[b]Note:[/b] This type is passed by value and not by reference."
msgstr ""
-"一个专门用æ¥ä¿å­˜å­—节的[Array]。它紧密地包裹数æ®ï¼Œæ‰€ä»¥å½“数组尺寸较大时,该格å¼"
-"将节çœä¸€ç¬”内存。\n"
-"[b]注æ„:[/b] è¿™ç§ç±»åž‹æ˜¯é€šè¿‡å€¼ä¼ é€’çš„ï¼Œè€Œä¸æ˜¯é€šè¿‡å¼•用。"
+"一个 [Array] 专门设计用于ä¿å­˜å­—节。针对内存使用进行了优化,ä¸ä¼šé€ æˆå†…存碎"
+"片。\n"
+"[b]注æ„:[/b] è¿™ç§ç±»åž‹æ˜¯æŒ‰å€¼ä¼ é€’è€Œä¸æ˜¯æŒ‰å¼•用传递。"
#: doc/classes/PoolByteArray.xml:17
-#, fuzzy
msgid ""
"Constructs a new [PoolByteArray]. Optionally, you can pass in a generic "
"[Array] that will be converted."
-msgstr ""
-"构建一个新的[PackedByteArray]。你å¯ä»¥é€‰æ‹©ä¼ å…¥ä¸€ä¸ªé€šç”¨çš„[Array],它将被转æ¢ã€‚"
+msgstr "构建新的[PoolByteArray]。你å¯ä»¥é€‰æ‹©ä¼ å…¥ä¸€ä¸ªé€šç”¨çš„[Array],它将被转æ¢ã€‚"
#: doc/classes/PoolByteArray.xml:29
-#, fuzzy
msgid "Appends a [PoolByteArray] at the end of this array."
-msgstr "在这个数组的末端添加一个[PackedByteArray]。"
+msgstr "åœ¨è¿™ä¸ªæ•°ç»„çš„æœ€åŽæ·»åŠ [PoolByteArray]。"
#: doc/classes/PoolByteArray.xml:36
-#, fuzzy
msgid ""
"Returns a new [PoolByteArray] with the data compressed. Set the compression "
"mode using one of [enum File.CompressionMode]'s constants."
msgstr ""
-"返回一个新的带有压缩数æ®çš„[PackedByteArray]。使用[enum File.CompressionMode]"
-"ä¸­çš„ä¸€ä¸ªå¸¸é‡æ¥è®¾ç½®åŽ‹ç¼©æ¨¡å¼ã€‚"
+"返回新的[PoolByteArray],其中的数æ®è¢«åŽ‹ç¼©ã€‚ä½¿ç”¨[enum File.CompressionMode]中"
+"的一个常数æ¥è®¾ç½®åŽ‹ç¼©æ¨¡å¼ã€‚"
#: doc/classes/PoolByteArray.xml:44
-#, fuzzy
msgid ""
"Returns a new [PoolByteArray] with the data decompressed. Set "
"[code]buffer_size[/code] to the size of the uncompressed data. Set the "
"compression mode using one of [enum File.CompressionMode]'s constants."
msgstr ""
-"返回一个新的[PackedByteArray],并对数æ®è¿›è¡Œè§£åŽ‹ã€‚ä½¿ç”¨[code]buffer_size[/code]"
-"æ¥è®¾ç½®æœªåŽ‹ç¼©æ•°æ®çš„大å°ã€‚使用[enum File.CompressionMode]ä¸­çš„ä¸€ä¸ªå¸¸é‡æ¥è®¾ç½®åŽ‹ç¼©"
-"模å¼ã€‚"
+"返回新的 [PoolByteArray] 解压数æ®ã€‚ [code]buffer_size[/code] 设置未压缩数æ®çš„"
+"大å°ã€‚使用 [enum File.CompressionMode] 常é‡ä¹‹ä¸€è®¾ç½®åŽ‹ç¼©æ¨¡å¼ã€‚"
#: doc/classes/PoolByteArray.xml:52
msgid ""
@@ -51285,6 +52690,16 @@ msgid ""
"will allow for unbounded output. If any positive value is passed, and the "
"decompression exceeds that ammount in bytes, then an error will be returned."
msgstr ""
+"返回数æ®è§£åŽ‹åŽçš„æ–° [PoolByteArray] 。使用 [enum File.CompressionMode] 的常数"
+"之一设置压缩模å¼ã€‚[b]æ­¤æ–¹æ³•ä»…æŽ¥å— gzip å’Œdeflate压缩模å¼ã€‚[/b]\n"
+"此方法å¯èƒ½æ¯” [code] decompress [/code] 慢,因为它å¯èƒ½éœ€è¦åœ¨è§£åŽ‹æ—¶å¤šæ¬¡é‡æ–°åˆ†é…"
+"其输出缓冲器,因为 [code] decompress [/code] 从一开始就知é“它的输出缓冲器大"
+"å°ã€‚\n"
+"\n"
+"GZIP 的最大压缩比为 1032:1,这æ„味ç€å°åž‹åŽ‹ç¼©æœ‰æ•ˆè½½è·æžæœ‰å¯èƒ½å‡åŽ‹åˆ°æ½œåœ¨çš„éžå¸¸"
+"å¤§è¾“å‡ºã€‚ä¸ºäº†é˜²æ­¢è¿™ç§æƒ…况,您å¯ä»¥æä¾›æœ€å¤§å°ºå¯¸ï¼Œå…许此函数通过 "
+"[code]max_output_size [/code] 以字节进行分é…。通过 -1 å°†å…许无é™åˆ¶è¾“出。如果"
+"通过任何正值,并且解压超过给定的字节值,则将返回错误。"
#: doc/classes/PoolByteArray.xml:67
msgid ""
@@ -51311,7 +52726,6 @@ msgstr ""
"数。"
#: doc/classes/PoolByteArray.xml:79
-#, fuzzy
msgid ""
"Returns a hexadecimal representation of this array as a [String].\n"
"[codeblock]\n"
@@ -51321,7 +52735,7 @@ msgid ""
msgstr ""
"返回该数组的å六进制,表示为一个[String]。\n"
"[codeblock]\n"
-"var array = PackedByteArray([11, 46, 255])\n"
+"var array = PoolByteArray([11, 46, 255])\n"
"print(array.hex_encode()) # Prints: 0b2eff\n"
"[/codeblock]"
@@ -51346,82 +52760,85 @@ msgstr "在数组的末尾追加一个元素。"
msgid "Removes an element from the array by index."
msgstr "从数组中删除ä½äºŽç´¢å¼•的元素。"
-#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolColorArray.xml:66
-#: doc/classes/PoolIntArray.xml:67 doc/classes/PoolRealArray.xml:67
-#: doc/classes/PoolStringArray.xml:74 doc/classes/PoolVector2Array.xml:67
-#: doc/classes/PoolVector3Array.xml:66
+#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolIntArray.xml:67
+#: doc/classes/PoolRealArray.xml:67
msgid ""
"Sets the size of the array. If the array is grown, reserves elements at the "
"end of the array. If the array is shrunk, truncates the array to the new "
-"size."
+"size.\n"
+"[b]Note:[/b] Added elements are not automatically initialized to 0 and will "
+"contain garbage, i.e. indeterminate values."
msgstr ""
-"设置数组的大å°ã€‚如果数组被增大,则ä¿ç•™æ•°ç»„末端的元素。如果数组被缩å°ï¼Œåˆ™å°†æ•°"
-"组截断到新的大å°ã€‚"
+"设置数组的大å°ã€‚如果数组增长,则ä¿ç•™æ•°ç»„末尾的元素。如果数组缩å°ï¼Œåˆ™å°†æ•°ç»„截"
+"断为新大å°ã€‚\n"
+"[b]注æ„:[/b] 添加的元素ä¸ä¼šè‡ªåЍåˆå§‹åŒ–为 0,并且会包å«åžƒåœ¾ï¼Œå³ä¸ç¡®å®šå€¼ã€‚"
-#: doc/classes/PoolByteArray.xml:121
+#: doc/classes/PoolByteArray.xml:122
msgid "Changes the byte at the given index."
msgstr "改å˜ç»™å®šç´¢å¼•处的字节。"
-#: doc/classes/PoolByteArray.xml:127 doc/classes/PoolColorArray.xml:79
-#: doc/classes/PoolRealArray.xml:80 doc/classes/PoolStringArray.xml:87
+#: doc/classes/PoolByteArray.xml:128 doc/classes/PoolColorArray.xml:79
+#: doc/classes/PoolRealArray.xml:81 doc/classes/PoolStringArray.xml:87
#: doc/classes/PoolVector2Array.xml:80 doc/classes/PoolVector3Array.xml:79
msgid "Returns the size of the array."
msgstr "返回数组的大å°ã€‚"
-#: doc/classes/PoolByteArray.xml:135
-#, fuzzy
+#: doc/classes/PoolByteArray.xml:136
msgid ""
"Returns the slice of the [PoolByteArray] between indices (inclusive) as a "
"new [PoolByteArray]. Any negative index is considered to be from the end of "
"the array."
msgstr ""
-"返回索引(包括其本身)之间的[PackedByteArray]的片断为一个新的"
-"[PackedByteArray]。任何负的索引都被认为是从数组的末端开始的。"
+"返回索引(包括)之间的[PoolByteArray]的片断为一个新的[PoolByteArray]。任何负"
+"的索引都被认为是从数组的末端开始的。"
#: doc/classes/PoolColorArray.xml:4
-#, fuzzy
msgid "A pooled [Array] of [Color]."
-msgstr "一个包装好的[Color]的[Array]。"
+msgstr "[Color]çš„[Array]的集åˆã€‚"
#: doc/classes/PoolColorArray.xml:7
-#, fuzzy
msgid ""
"An [Array] specifically designed to hold [Color]. Optimized for memory "
"usage, does not fragment the memory.\n"
"[b]Note:[/b] This type is passed by value and not by reference."
msgstr ""
-"一个专门为容纳[Color]而设计的[Array]。紧密地包装数æ®ï¼Œå½“数组尺寸较大时,这将"
-"节çœå†…存。\n"
-"[b]注æ„:[/b] è¿™ç§ç±»åž‹æ˜¯é€šè¿‡å€¼ä¼ é€’çš„ï¼Œè€Œä¸æ˜¯é€šè¿‡å¼•用。"
+"专门用于ä¿å­˜[Color]çš„[Array]。对内存的使用进行了优化,ä¸ä¼šä½¿å†…存碎片化。\n"
+"[b]注æ„:[/b] è¿™ç§ç±»åž‹æ˜¯é€šè¿‡å€¼ä¼ é€’çš„ï¼Œè€Œä¸æ˜¯å¼•用。"
#: doc/classes/PoolColorArray.xml:17
-#, fuzzy
msgid ""
"Constructs a new [PoolColorArray]. Optionally, you can pass in a generic "
"[Array] that will be converted."
msgstr ""
-"构造一个新的[PackedColorArray]。你å¯ä»¥é€‰æ‹©ä¼ å…¥ä¸€ä¸ªé€šç”¨çš„[Array],它将被转æ¢ã€‚"
+"构建新的[PoolColorArray]。你å¯ä»¥é€‰æ‹©ä¼ å…¥ä¸€ä¸ªé€šç”¨çš„[Array],它将被转æ¢ã€‚"
#: doc/classes/PoolColorArray.xml:29
-#, fuzzy
msgid "Appends a [PoolColorArray] at the end of this array."
-msgstr "将一个[PackedColorArray]追加到该数组的尾部。"
+msgstr "åœ¨è¿™ä¸ªæ•°ç»„çš„æœ€åŽæ·»åŠ ä¸€ä¸ª[PoolColorArray]。"
#: doc/classes/PoolColorArray.xml:54 doc/classes/PoolIntArray.xml:55
msgid "Appends a value to the array."
msgstr "将一个值添加到数组中。"
+#: doc/classes/PoolColorArray.xml:66 doc/classes/PoolStringArray.xml:74
+#: doc/classes/PoolVector2Array.xml:67 doc/classes/PoolVector3Array.xml:66
+msgid ""
+"Sets the size of the array. If the array is grown, reserves elements at the "
+"end of the array. If the array is shrunk, truncates the array to the new "
+"size."
+msgstr ""
+"设置数组的大å°ã€‚如果数组被增大,则ä¿ç•™æ•°ç»„末端的元素。如果数组被缩å°ï¼Œåˆ™å°†æ•°"
+"组截断到新的大å°ã€‚"
+
#: doc/classes/PoolColorArray.xml:73
msgid "Changes the [Color] at the given index."
msgstr "更改给定索引处的[Color]。"
#: doc/classes/PoolIntArray.xml:4
-#, fuzzy
msgid "A pooled [Array] of integers ([int])."
-msgstr "一个32使•´æ•°çš„压缩[Array]。"
+msgstr "æ•´æ•°[int]çš„[Array]的集åˆã€‚"
#: doc/classes/PoolIntArray.xml:7
-#, fuzzy
msgid ""
"An [Array] specifically designed to hold integer values ([int]). Optimized "
"for memory usage, does not fragment the memory.\n"
@@ -51432,50 +52849,42 @@ msgid ""
"around. In comparison, [int] uses signed 64-bit integers which can hold much "
"larger values."
msgstr ""
-"一个专门用于ä¿å­˜32使•´æ•°å€¼çš„[阵列]。紧密地包装数æ®ï¼Œæ‰€ä»¥å®ƒä¸ºå¤§çš„æ•°ç»„尺寸节çœ"
-"了内存。\n"
-"[b]注æ„:[/b] è¿™ç§ç±»åž‹æ˜¯é€šè¿‡å€¼ä¼ é€’çš„ï¼Œè€Œä¸æ˜¯é€šè¿‡å¼•用。\n"
-"[b]注æ„:[/b] 该类型存储有符å·çš„32使•´æ•°ï¼Œè¿™æ„味ç€å®ƒå¯ä»¥åœ¨[code][-2^31, 2^31 "
-"- 1][/code]之间å–值,å³[code][-2147483648, 2147483647][/code]。超过这些界é™å°±"
-"会被包起æ¥ã€‚相比之下,[int]使用有符å·çš„64使•´æ•°ï¼Œå¯ä»¥å®¹çº³å¤§å¾—多的值。如果你需"
-"è¦ä¸¥æ ¼æ‰“包64使•´æ•°ï¼Œè¯·å‚阅[PackedInt64Array]。"
+"一个专门用于ä¿å­˜æ•´æ•°å€¼çš„[Array]([int])。对内存的使用进行了优化,ä¸ä¼šä½¿å†…å­˜"
+"碎片化。\n"
+"[b]注æ„:[/b] è¿™ç§ç±»åž‹æ˜¯é€šè¿‡å€¼ä¼ é€’çš„ï¼Œè€Œä¸æ˜¯å¼•用。\n"
+"[b]注æ„:[/b] 这个类型仅é™äºŽæœ‰ç¬¦å·çš„32使•´æ•°ï¼Œè¿™æ„味ç€å®ƒåªèƒ½åœ¨[code][-2^31, "
+"2^31 - 1][/code]的区间å–值,å³[code][-2147483648, 2147483647][/code]。超过这"
+"些界é™å°±ä¼šè¢«åŒ…èµ·æ¥ã€‚相比之下,[int]使用有符å·çš„64使•´æ•°ï¼Œå¯ä»¥å®¹çº³å¤§å¾—多的值。"
#: doc/classes/PoolIntArray.xml:18
-#, fuzzy
msgid ""
"Constructs a new [PoolIntArray]. Optionally, you can pass in a generic "
"[Array] that will be converted."
-msgstr ""
-"构建一个新的[PackedInt32Array]。你å¯ä»¥é€‰æ‹©ä¼ å…¥ä¸€ä¸ªé€šç”¨çš„[Array],它将被转"
-"æ¢ã€‚。"
+msgstr "构建新的[PoolIntArray]。你å¯ä»¥é€‰æ‹©ä¼ å…¥ä¸€ä¸ªé€šç”¨çš„[Array],它将被转æ¢ã€‚"
#: doc/classes/PoolIntArray.xml:30
-#, fuzzy
msgid "Appends a [PoolIntArray] at the end of this array."
-msgstr "在数组的末尾追加一个[PackedInt32Array]。"
+msgstr "åœ¨è¿™ä¸ªæ•°ç»„çš„æœ€åŽæ·»åŠ [PoolIntArray]。"
#: doc/classes/PoolIntArray.xml:44
-#, fuzzy
msgid ""
"Inserts a new int at a given position in the array. The position must be "
"valid, or at the end of the array ([code]idx == size()[/code])."
msgstr ""
-"在数组的给定ä½ç½®æ’入一个新的整数。ä½ç½®å¿…须是有效的,或者ä½äºŽæ•°ç»„的末尾"
-"([code]idx == size()[/code])。"
+"在数组中的指定ä½ç½®æ’入一个新的int。这个ä½ç½®å¿…须是有效的,或者在数组的末端"
+"([code]idx == size()[/code])。"
-#: doc/classes/PoolIntArray.xml:74
-#, fuzzy
+#: doc/classes/PoolIntArray.xml:75
msgid "Changes the int at the given index."
-msgstr "改å˜ç»™å®šç´¢å¼•处的整数。"
+msgstr "更改给定索引处的 int。"
-#: doc/classes/PoolIntArray.xml:80
+#: doc/classes/PoolIntArray.xml:81
msgid "Returns the array size."
msgstr "返回数组大å°ã€‚"
#: doc/classes/PoolRealArray.xml:4
-#, fuzzy
msgid "A pooled [Array] of reals ([float])."
-msgstr "一个包装好的[Color]的[Array]。"
+msgstr "实数 [float] çš„[Array]集åˆã€‚"
#: doc/classes/PoolRealArray.xml:7
msgid ""
@@ -51490,59 +52899,60 @@ msgid ""
"store [float]s will use roughly 6 times more memory compared to a "
"[PoolRealArray]."
msgstr ""
+"专门设计用于ä¿å­˜æµ®ç‚¹å€¼çš„ [Array] 。针对内存使用进行了优化,ä¸ä¼šé€ æˆå†…存碎"
+"片。\n"
+"[b]注æ„:[/b] è¿™ç§ç±»åž‹æ˜¯æŒ‰å€¼ä¼ é€’è€Œä¸æ˜¯æŒ‰å¼•用传递。\n"
+"[b]注æ„:[/b] 与 64 ä½åŽŸå§‹ [float] ä¸åŒï¼Œå­˜å‚¨åœ¨ [PoolRealArray] 中的数字是 "
+"32 使µ®ç‚¹æ•°ã€‚è¿™æ„味ç€ä¸ŽåŽŸå§‹ [float] 相比,存储在 [PoolRealArray] 中的值具有较"
+"低的精度。如果您需è¦åœ¨æ•°ç»„中存储 64 使µ®ç‚¹æ•°ï¼Œè¯·ä½¿ç”¨å…·æœ‰ [float] 元素的通用 "
+"[Array],因为这些元素ä»ä¸º 64 ä½ã€‚但是,与 [PoolRealArray] 相比,使用通用 "
+"[Array] 存储 [float] 将使用大约 6 å€çš„内存。"
#: doc/classes/PoolRealArray.xml:18
-#, fuzzy
msgid ""
"Constructs a new [PoolRealArray]. Optionally, you can pass in a generic "
"[Array] that will be converted."
-msgstr ""
-"构造一个新的[PackedColorArray]。你å¯ä»¥é€‰æ‹©ä¼ å…¥ä¸€ä¸ªé€šç”¨çš„[Array],它将被转æ¢ã€‚"
+msgstr "构建新的[PoolRealArray]。你å¯ä»¥é€‰æ‹©ä¼ å…¥ä¸€ä¸ªé€šç”¨çš„[Array],它将被转æ¢ã€‚"
#: doc/classes/PoolRealArray.xml:30
-#, fuzzy
msgid "Appends a [PoolRealArray] at the end of this array."
-msgstr "将一个[PackedColorArray]追加到该数组的尾部。"
+msgstr "åœ¨è¿™ä¸ªæ•°ç»„çš„æœ€åŽæ·»åŠ [PoolRealArray]。"
-#: doc/classes/PoolRealArray.xml:74
+#: doc/classes/PoolRealArray.xml:75
msgid "Changes the float at the given index."
msgstr "更改给定索引处的浮点数。"
#: doc/classes/PoolStringArray.xml:4
-#, fuzzy
msgid "A pooled [Array] of [String]."
-msgstr "一个由压缩的[String]组æˆçš„[Array]。"
+msgstr "[String] çš„ [Array] 集åˆã€‚"
#: doc/classes/PoolStringArray.xml:7
-#, fuzzy
msgid ""
"An [Array] specifically designed to hold [String]s. Optimized for memory "
"usage, does not fragment the memory.\n"
"[b]Note:[/b] This type is passed by value and not by reference."
msgstr ""
-"一个专门设计用æ¥ä¿å­˜å­—符串的[Array]。通过紧密地包装数æ®ï¼Œå½“数组尺寸较大时,这"
-"将节çœä¸€å®šå†…存。\n"
-"[b]注æ„:[/b]è¯¥ç±»åž‹æ˜¯é€šè¿‡å€¼è€Œä¸æ˜¯å¼•用传递的。"
+"[Array] 专门设计用于ä¿å­˜ [String]。针对内存使用进行了优化,ä¸ä¼šé€ æˆå†…存碎"
+"片。\n"
+"[b]注æ„:[/b] è¿™ç§ç±»åž‹æ˜¯æŒ‰å€¼ä¼ é€’ï¼Œè€Œä¸æ˜¯å¼•用传递。"
#: doc/classes/PoolStringArray.xml:18
-#, fuzzy
msgid ""
"Constructs a new [PoolStringArray]. Optionally, you can pass in a generic "
"[Array] that will be converted."
msgstr ""
-"构造一个新的[PackedStringArray]。或者,您å¯ä»¥ä¼ å…¥å°†è¢«è½¬æ¢çš„通用[Array]。"
+"构建新的[PoolStringArray]。你å¯ä»¥é€‰æ‹©ä¼ å…¥ä¸€ä¸ªé€šç”¨çš„[Array],它将被转æ¢ã€‚"
#: doc/classes/PoolStringArray.xml:30
-#, fuzzy
msgid "Appends a [PoolStringArray] at the end of this array."
-msgstr "在此数组末尾追加[PackedStringArray]。"
+msgstr "åœ¨è¿™ä¸ªæ•°ç»„çš„æœ€åŽæ·»åŠ [PoolStringArray]。"
#: doc/classes/PoolStringArray.xml:56
-#, fuzzy
msgid ""
"Returns a [String] with each element of the array joined with the given "
"[code]delimiter[/code]."
-msgstr "返回与给定[code] id [/code]å…³è”的点的æƒé‡æ¯”例。"
+msgstr ""
+"返回一个[String],数组的æ¯ä¸ªå…ƒç´ éƒ½ç”¨ç»™å®šçš„[code]delimiter[/code]分隔符连接。"
#: doc/classes/PoolStringArray.xml:62
msgid "Appends a string element at end of the array."
@@ -51553,20 +52963,17 @@ msgid "Changes the [String] at the given index."
msgstr "更改给定索引处的[String]。"
#: doc/classes/PoolVector2Array.xml:4
-#, fuzzy
msgid "A pooled [Array] of [Vector2]."
-msgstr "[Vector2]的压缩[Array]。"
+msgstr "[Vector2] çš„ [Array] 集åˆã€‚"
#: doc/classes/PoolVector2Array.xml:7
-#, fuzzy
msgid ""
"An [Array] specifically designed to hold [Vector2]. Optimized for memory "
"usage, does not fragment the memory.\n"
"[b]Note:[/b] This type is passed by value and not by reference."
msgstr ""
-"专门设计用æ¥å®¹çº³Vector2çš„[Array]。通过紧密地包装数æ®ï¼Œå½“数组尺寸较大时,这将"
-"节çœä¸€å®šå†…存。\n"
-"[b] 注æ„:[/b]æ­¤ç±»åž‹æ˜¯é€šè¿‡å€¼ä¼ é€’çš„ï¼Œè€Œä¸æ˜¯é€šè¿‡å¼•用传递的。"
+"专门用æ¥ä¿å­˜[Vector2]çš„[Array]。对内存的使用进行了优化,ä¸ä¼šä½¿å†…存碎片化。\n"
+"[b]注æ„:[/b] è¿™ç§ç±»åž‹æ˜¯é€šè¿‡å€¼ä¼ é€’çš„ï¼Œè€Œä¸æ˜¯å¼•用。"
#: doc/classes/PoolVector2Array.xml:11 doc/classes/TileMap.xml:15
#: doc/classes/TileSet.xml:15
@@ -51574,17 +52981,15 @@ msgid "https://godotengine.org/asset-library/asset/519"
msgstr "https://godotengine.org/asset-library/asset/519"
#: doc/classes/PoolVector2Array.xml:18
-#, fuzzy
msgid ""
"Constructs a new [PoolVector2Array]. Optionally, you can pass in a generic "
"[Array] that will be converted."
msgstr ""
-"构造一个新的[PackedVector2Array]。或者,您å¯ä»¥ä¼ å…¥å°†è¢«è½¬æ¢çš„通用[Array]。"
+"构建新的[PoolVector2Array]。你å¯ä»¥é€‰æ‹©ä¼ å…¥ä¸€ä¸ªé€šç”¨çš„[Array],它将被转æ¢ã€‚"
#: doc/classes/PoolVector2Array.xml:30
-#, fuzzy
msgid "Appends a [PoolVector2Array] at the end of this array."
-msgstr "在此数组末尾追加一个[PackedVector2Array]。"
+msgstr "åœ¨è¿™ä¸ªæ•°ç»„çš„æœ€åŽæ·»åŠ [PoolVector2Array]。"
#: doc/classes/PoolVector2Array.xml:55
msgid "Inserts a [Vector2] at the end."
@@ -51595,33 +53000,29 @@ msgid "Changes the [Vector2] at the given index."
msgstr "在给定索引处更改[Vector2]。"
#: doc/classes/PoolVector3Array.xml:4
-#, fuzzy
msgid "A pooled [Array] of [Vector3]."
-msgstr "[Vector3]的压缩[Array]。"
+msgstr "[Vector3] çš„ [Array] 集åˆã€‚"
#: doc/classes/PoolVector3Array.xml:7
-#, fuzzy
msgid ""
"An [Array] specifically designed to hold [Vector3]. Optimized for memory "
"usage, does not fragment the memory.\n"
"[b]Note:[/b] This type is passed by value and not by reference."
msgstr ""
-"专门设计用æ¥å®¹çº³Vector3çš„[Array]。通过紧密地包装数æ®ï¼Œå½“数组尺寸较大时,这将"
-"节çœä¸€å®šå†…存。\n"
-"[b] 注æ„:[/b]æ­¤ç±»åž‹æ˜¯é€šè¿‡å€¼ä¼ é€’çš„ï¼Œè€Œä¸æ˜¯é€šè¿‡å¼•用传递的。"
+"专门设计æ¥å®¹çº³[Vector3]çš„[Array]。对内存的使用进行了优化,ä¸ä¼šä½¿å†…存碎片"
+"化。\n"
+"[b]注æ„:[/b] è¿™ç§ç±»åž‹æ˜¯é€šè¿‡å€¼ä¼ é€’çš„ï¼Œè€Œä¸æ˜¯å¼•用。"
#: doc/classes/PoolVector3Array.xml:17
-#, fuzzy
msgid ""
"Constructs a new [PoolVector3Array]. Optionally, you can pass in a generic "
"[Array] that will be converted."
msgstr ""
-"构造一个新的[PackedVector3Array]。或者,您å¯ä»¥ä¼ å…¥å°†è¢«è½¬æ¢çš„通用[Array]。"
+"构建新的[PoolVector3Array]。你å¯ä»¥é€‰æ‹©ä¼ å…¥ä¸€ä¸ªé€šç”¨çš„[Array],它将被转æ¢ã€‚"
#: doc/classes/PoolVector3Array.xml:29
-#, fuzzy
msgid "Appends a [PoolVector3Array] at the end of this array."
-msgstr "在此数组末尾追加一个[PackedVector3Array]。"
+msgstr "åœ¨è¿™ä¸ªæ•°ç»„çš„æœ€åŽæ·»åŠ [PoolVector3Array]。"
#: doc/classes/PoolVector3Array.xml:54
msgid "Inserts a [Vector3] at the end."
@@ -51636,18 +53037,18 @@ msgid "Base container control for popups and dialogs."
msgstr "用于弹出窗å£å’Œå¯¹è¯æ¡†çš„基本容器控件。"
#: doc/classes/Popup.xml:7
-#, fuzzy
msgid ""
"Popup is a base [Control] used to show dialogs and popups. It's a subwindow "
"and modal by default (see [Control]) and has helpers for custom popup "
"behavior. All popup methods ensure correct placement within the viewport."
msgstr ""
-"å¼¹å‡ºæ¡†æ˜¯ä¸€ä¸ªç”¨äºŽæ˜¾ç¤ºå¯¹è¯æ¡†å’Œå…¶ä»–弹出框的基类[Control].默认,它是一个å­çª—å£å’Œæ¨¡"
-"æ€(å‚阅[Control]),并且有自定义弹出动作的帮助程åº."
+"Popup 是基本的 [Control]ï¼Œç”¨äºŽæ˜¾ç¤ºå¯¹è¯æ¡†å’Œå¼¹å‡ºçª—å£ã€‚默认情况下,它是一个å­çª—"
+"å£å’Œæ¨¡æ€ï¼Œå‚阅 [Control],并具有自定义弹出行为的辅助程åºã€‚所有弹出方法都确ä¿"
+"在视窗中正确放置。"
#: doc/classes/Popup.xml:16
msgid "Popup (show the control in modal form)."
-msgstr ""
+msgstr "弹出窗å£ï¼ˆä»¥æ¨¡æ€å½¢å¼æ˜¾ç¤ºæŽ§ä»¶ï¼‰ã€‚"
#: doc/classes/Popup.xml:23
msgid ""
@@ -51655,6 +53056,8 @@ msgid ""
"to its current canvas transform, at the current size, or at a size "
"determined by [code]size[/code]."
msgstr ""
+"æ ¹æ®ç›¸å¯¹äºŽå½“å‰ç”»å¸ƒè½¬æ¢ã€å½“å‰å¤§å°æˆ–ç”± [code]size[/code] 确定的大å°ï¼Œåœ¨å±å¹•中央"
+"弹出窗å£ï¼ˆä»¥æ¨¡æ€å½¢å¼æ˜¾ç¤ºæŽ§åˆ¶ï¼‰ã€‚"
#: doc/classes/Popup.xml:31
msgid ""
@@ -51663,6 +53066,9 @@ msgid ""
"then ensuring the popup is no larger than the viewport size multiplied by "
"[code]fallback_ratio[/code]."
msgstr ""
+"相对于当å‰ç”»å¸ƒå˜æ¢åœ¨å±å¹•中央弹出(以模æ€å½¢å¼æ˜¾ç¤ºæŽ§ä»¶ï¼‰ï¼Œå°†å¤§å°é™åˆ¶ä¸º"
+"[code]size[/code],并确ä¿å¼¹å‡ºçª—å£ä¸å¤§äºŽè§†å£å¤§å°ä¹˜ä»¥[code] fallback_ratio[/"
+"code]。"
#: doc/classes/Popup.xml:38
msgid ""
@@ -51670,16 +53076,20 @@ msgid ""
"to the current canvas transform, ensuring the size is never smaller than "
"[code]minsize[/code]."
msgstr ""
+"相对于当å‰ç”»å¸ƒå˜æ¢åœ¨å±å¹•中央弹出(以模æ€å½¢å¼æ˜¾ç¤ºæŽ§ä»¶ï¼‰ï¼Œç¡®ä¿å°ºå¯¸æ°¸è¿œä¸ä¼šå°äºŽ "
+"[code]minsize[/code]。"
#: doc/classes/Popup.xml:45
msgid ""
"Popup (show the control in modal form) in the center of the screen relative "
"to the current canvas transform, scaled at a ratio of size of the screen."
msgstr ""
+"相对于当å‰ç”»å¸ƒå˜æ¢åœ¨å±å¹•中央弹出(以模æ€å½¢å¼æ˜¾ç¤ºæŽ§ä»¶ï¼‰ï¼ŒæŒ‰å±å¹•大å°çš„æ¯”例缩"
+"放。"
#: doc/classes/Popup.xml:51
msgid "Shrink popup to keep to the minimum size of content."
-msgstr ""
+msgstr "缩å°å¼¹å‡ºçª—å£ä»¥ä¿æŒå†…容的最å°å¤§å°ã€‚"
#: doc/classes/Popup.xml:57
msgid ""
@@ -51691,6 +53101,12 @@ msgid ""
"ConfirmationDialog.get_cancel] and hide the buttons in question by setting "
"their [member CanvasItem.visible] property to [code]false[/code]."
msgstr ""
+"如果[code]true[/code],当点击事件å‘生在它之外,或者当它收到[code]ui_cancel[/"
+"code]动作事件时,弹出窗å£ä¸ä¼šè¢«éšè—。\n"
+"[b]注æ„:[/b] å¯ç”¨æ­¤å±žæ€§ä¸ä¼šå½±å“ä»Žæ­¤ç±»ç»§æ‰¿çš„å¯¹è¯æ¡†ä¸­å…³é—­æˆ–å–æ¶ˆæŒ‰é’®çš„行为。作"
+"为解决方法,您å¯ä»¥ä½¿ç”¨ [method WindowDialog.get_close_button] 或 [method "
+"ConfirmationDialog.get_cancel] 并通过将其 [member CanvasItem.visible] 属性设"
+"置为 [code]false[/code] æ¥éšè—有问题的按钮。"
#: doc/classes/Popup.xml:65
msgid ""
@@ -51698,35 +53114,33 @@ msgid ""
"to clear the list of options then create a new one according to the current "
"context."
msgstr ""
+"当弹出窗å£å³å°†æ˜¾ç¤ºæ—¶å‘出。这通常在 [PopupMenu] ä¸­ç”¨äºŽæ¸…é™¤é€‰é¡¹åˆ—è¡¨ï¼Œç„¶åŽæ ¹æ®å½“"
+"å‰ä¸Šä¸‹æ–‡åˆ›å»ºä¸€ä¸ªæ–°é€‰é¡¹ã€‚"
#: doc/classes/Popup.xml:70
msgid "Emitted when a popup is hidden."
msgstr "当弹出窗å£è¢«éšè—æ—¶å‘出."
#: doc/classes/Popup.xml:76
-#, fuzzy
msgid "Notification sent right after the popup is shown."
-msgstr "节点被实例化时收到的通知。"
+msgstr "åœ¨å¼¹å‡ºçª—å£æ˜¾ç¤ºåŽç«‹å³å‘é€é€šçŸ¥ã€‚"
#: doc/classes/Popup.xml:79
-#, fuzzy
msgid "Notification sent right after the popup is hidden."
-msgstr "节点被实例化时收到的通知。"
+msgstr "在弹出窗å£è¢«éšè—åŽç«‹å³å‘é€é€šçŸ¥ã€‚"
#: doc/classes/PopupDialog.xml:4
-#, fuzzy
msgid "Base class for popup dialogs."
-msgstr "分离器的基类。"
+msgstr "å¼¹å‡ºå¯¹è¯æ¡†çš„基类。"
#: doc/classes/PopupDialog.xml:7
msgid ""
"PopupDialog is a base class for popup dialogs, along with [WindowDialog]."
-msgstr ""
+msgstr "PopupDialog æ˜¯å¼¹å‡ºå¯¹è¯æ¡†çš„基类,与 [WindowDialog] 一起。"
#: doc/classes/PopupDialog.xml:17
-#, fuzzy
msgid "Sets a custom [StyleBox] for the panel of the [PopupDialog]."
-msgstr "为 [SpinBox] 的上下箭头设置自定义 [Texture2D]。"
+msgstr "为[PopupDialog]çš„é¢æ¿è®¾ç½®è‡ªå®šä¹‰çš„[StyleBox]。"
#: doc/classes/PopupMenu.xml:4
msgid "PopupMenu displays a list of options."
@@ -51886,7 +53300,7 @@ msgstr ""
"code]定义。\n"
"å¯ä»¥é€‰æ‹©æä¾›[code]id[/code],以åŠåŠ é€Ÿå™¨([code]accel[/code])。如果没有æä¾›"
"[code]id[/code],将从索引中创建一个。如果没有æä¾›[code]accel[/code],则默认的"
-"[code]0[/code]将被分é…给它。有关加速器的更多信æ¯ï¼Œè¯·å‚阅[方法"
+"[code]0[/code]将被分é…给它。有关加速器的更多信æ¯ï¼Œè¯·å‚阅[method "
"get_item_accelerator]。"
#: doc/classes/PopupMenu.xml:129
@@ -52028,11 +53442,10 @@ msgid ""
msgstr "返回与指定索引 [code]idx[/code]å…³è”的工具æç¤ºã€‚"
#: doc/classes/PopupMenu.xml:258
-#, fuzzy
msgid ""
"Returns [code]true[/code] if the popup will be hidden when the window loses "
"focus or not."
-msgstr "返回[code]true[/code],如果窗å£å¤±åŽ»ç„¦ç‚¹æ—¶ï¼Œå¼¹å‡ºçª—å£ä¼šè¢«éšè—。"
+msgstr "如果窗å£å¤±åŽ»ç„¦ç‚¹æ—¶æ˜¯å¦éšè—弹出窗å£ï¼Œåˆ™è¿”回 [code]true[/code]。"
#: doc/classes/PopupMenu.xml:265
msgid ""
@@ -52327,7 +53740,7 @@ msgstr "未选中的å•选按钮项目的 [Texture] 图标。"
#: doc/classes/PopupMenu.xml:545
msgid "[StyleBox] used for the separators. See [method add_separator]."
-msgstr "用于分隔符的[StyleBox]。请å‚阅[方法add_separator]。"
+msgstr "用于分隔符的[StyleBox]。请å‚阅[method add_separator]。"
#: doc/classes/PopupMenu.xml:548
msgid "[Texture] icon for the submenu arrow."
@@ -52378,16 +53791,25 @@ msgid ""
"There is no need to place an opposite portal in an adjacent room, links are "
"made two-way automatically."
msgstr ""
+"[Portal] 是一ç§ç‰¹æ®Šç±»åž‹çš„ [MeshInstance],å…许门户剔除系统从一个空间“看到â€åˆ°"
+"å¦ä¸€ä¸ªç©ºé—´ã€‚它们通常对应于水平几何中的门窗。åªå…许 [Camera] é€è¿‡ä¼ é€é—¨çœ‹åˆ°ï¼Œ"
+"è¿™å…许系统剔除空间中无法é€è¿‡ä¼ é€é—¨çœ‹åˆ°çš„æ‰€æœ‰ç‰©ä½“。这是[b]鮿Œ¡å‰”除[/b]的一ç§å½¢"
+"å¼ï¼Œå¯ä»¥å¤§å¤§æé«˜æ€§èƒ½ã€‚\n"
+"Portalçš„å½¢å¼æœ‰ä¸€äº›é™åˆ¶ï¼š\n"
+"它们必须是å•é¢å‡¸å¤šè¾¹å½¢ï¼Œå¹¶ä¸”é€šå¸¸æ‚¨ä¼šå°†å®ƒä»¬çš„æ­£é¢ [b] å‘外 [/b] 从它们所在的 "
+"[Room] 定å‘。顶点应该ä½äºŽä¸€ä¸ªå¹³é¢ä¸Šï¼ˆå°½ç®¡å®ƒä»¬çš„ä½ç½®ä¸å¿…完美)。\n"
+"无需在相邻空间放置对é¢çš„ä¼ é€é—¨ï¼Œå®ƒä»¬ä¼šè‡ªåŠ¨å»ºç«‹åŒå‘链接。"
#: doc/classes/Portal.xml:20 doc/classes/Room.xml:21
msgid "Sets individual points. Primarily for use by the editor."
-msgstr ""
+msgstr "设置å•个点。主è¦ä¾›ç¼–辑器使用。"
#: doc/classes/Portal.xml:26
msgid ""
"This is a shortcut for setting the linked [Room] in the name of the [Portal] "
"(the name is used during conversion)."
msgstr ""
+"这是在[Portal]çš„å称中设置链接[Room]çš„å¿«æ·æ–¹å¼ï¼ˆå称在转æ¢è¿‡ç¨‹ä¸­ä½¿ç”¨ï¼‰ã€‚"
#: doc/classes/Portal.xml:29
msgid ""
@@ -52397,12 +53819,17 @@ msgid ""
"[Portal] node's [member Spatial.global_transform].\n"
"[b]Note:[/b] These raw points are sanitized for winding order internally."
msgstr ""
+"定义 [Portal] 多边形形状的点(应该是凸é¢ï¼‰ã€‚\n"
+"这些是在 2D 中定义的,[code]0,0[/code] 是 [Portal] 节点的 [member Spatial."
+"global_transform] 的原点。\n"
+"[b]注æ„:[/b] 这些原始点会被整ç†ä»¥ä¾¿åœ¨å†…部缠绕顺åºã€‚"
#: doc/classes/Portal.xml:34
msgid ""
"Visibility through [Portal]s can be turned on and off at runtime - this is "
"useful for having closable doors."
msgstr ""
+"å¯ä»¥åœ¨è¿è¡Œæ—¶æ‰“开和关闭通过 [Portal] çš„å¯è§æ€§ - 这对于具有å¯å…³é—­çš„门很有用。"
#: doc/classes/Portal.xml:37
msgid ""
@@ -52411,12 +53838,17 @@ msgid ""
"to be assigned to neighbouring rooms, you can assign an extra margin through "
"the [Portal] to allow objects to breach without sprawling."
msgstr ""
+"有些物体éžå¸¸å¤§ï¼Œä»¥è‡³äºŽå®ƒä»¬å¯èƒ½ä¼šå‡ºçŽ°åœ¨ä¸æ­¢ä¸€ä¸ª [Room]中(“蔓延â€ï¼‰ã€‚由于我们通"
+"常ä¸å¸Œæœ›å°†*åªæ˜¯*çªç ´è¾¹ç¼˜çš„对象分é…给相邻的房间,因此您å¯ä»¥é€šè¿‡ [Portal] 分é…"
+"é¢å¤–的边è·ï¼Œä»¥å…许对象在ä¸è”“延的情况下çªç ´ã€‚"
#: doc/classes/Portal.xml:40
msgid ""
"Portals default to being two way - see through in both directions, however "
"you can make them one way, visible from the source room only."
msgstr ""
+"Portal默认为åŒå‘ - 在两个方å‘都å¯ä»¥çœ‹åˆ°ï¼Œä½†æ˜¯æ‚¨å¯ä»¥å°†å®ƒä»¬è®¾ä¸ºä¸€ç§ä»Žæºæˆ¿é—´å¯è§"
+"的方å¼ã€‚"
#: doc/classes/Portal.xml:43
msgid ""
@@ -52425,6 +53857,10 @@ msgid ""
"If you want to override this default, set this value to [code]false[/code], "
"and the local [member portal_margin] will take effect."
msgstr ""
+"在大多数情况下,您会希望在Portal中使用默认的 [Portal] è¾¹è·ï¼ˆè¿™æ˜¯åœ¨ "
+"[RoomManager] 中设置的)。\n"
+"如果è¦è¦†ç›–这个默认值,把这个值设置为[code]false[/code],本地的[member "
+"portal_margin]就会生效。"
#: doc/classes/Position2D.xml:4
msgid "Generic 2D position hint for editing."
@@ -52489,16 +53925,15 @@ msgstr ""
"[/codeblock]"
#: doc/classes/PrimitiveMesh.xml:29
-#, fuzzy
msgid ""
"If set, the order of the vertices in each triangle are reversed resulting in "
"the backside of the mesh being drawn.\n"
"This gives the same result as using [constant SpatialMaterial.CULL_BACK] in "
"[member SpatialMaterial.params_cull_mode]."
msgstr ""
-"如果设置,æ¯ä¸ªä¸‰è§’形中顶点的顺åºé¢ å€’,导致网格的背é¢è¢«ç»˜åˆ¶ã€‚\n"
-"这给出了与使用[constant BaseMaterial3D相åŒçš„结果。在[member BaseMaterial3D."
-"cull_mode]中的CULL_BACK]。"
+"如果设置,则æ¯ä¸ªä¸‰è§’形中顶点的顺åºä¼šé¢ å€’,从而绘制网格的背é¢ã€‚\n"
+"这与在 [member SpatialMaterial.params_cull_mode] 中使用 [constant "
+"SpatialMaterial.CULL_BACK] 的结果相åŒã€‚"
#: doc/classes/PrimitiveMesh.xml:33
msgid "The current [Material] of the primitive mesh."
@@ -52531,13 +53966,11 @@ msgid "Number of added edge loops along the X axis."
msgstr "沿X轴添加的边循环数。"
#: doc/classes/ProceduralSky.xml:4
-#, fuzzy
msgid ""
"Type of [Sky] that is generated procedurally based on user input parameters."
-msgstr "与[Sky]一起使用的[Material]æ ¹æ®ç”¨æˆ·è¾“入傿•°ç”ŸæˆèƒŒæ™¯ã€‚"
+msgstr "æ ¹æ®ç”¨æˆ·è¾“å…¥çš„å‚æ•°æŒ‰ç¨‹åºç”Ÿæˆçš„[Sky]类型。"
#: doc/classes/ProceduralSky.xml:7
-#, fuzzy
msgid ""
"ProceduralSky provides a way to create an effective background quickly by "
"defining procedural parameters for the sun, the sky and the ground. The sky "
@@ -52554,20 +53987,18 @@ msgid ""
"relatively frequently, as it is updated on a background thread when multi-"
"threading is available."
msgstr ""
-"ProceduralSkyMaterial通过定义太阳ã€å¤©ç©ºå’Œåœ°é¢çš„程åºå‚数,æä¾›äº†ä¸€ç§å¿«é€Ÿåˆ›å»ºæœ‰"
-"效背景的方法。天空和地é¢éžå¸¸ç›¸ä¼¼ï¼Œå®ƒä»¬ç”±åœ°å¹³çº¿ä¸Šçš„一ç§é¢œè‰²ã€å¦ä¸€ç§é¢œè‰²ä»¥åŠæœ€"
-"åŽæ’入这两ç§é¢œè‰²ä¹‹é—´çš„缓和曲线æ¥å®šä¹‰ã€‚类似地,太阳由天空中的ä½ç½®ã€é¢œè‰²å’Œç¼“å’Œ"
-"æ›²çº¿æ¥æè¿°ã€‚ç„¶è€Œï¼Œå¤ªé˜³è¿˜å®šä¹‰äº†æœ€å°å’Œæœ€å¤§è§’度,这两个值定义了缓和曲线从太阳开"
-"始和结æŸçš„è·ç¦»ï¼Œä»Žè€Œæœ€ç»ˆå®šä¹‰äº†å¤ªé˜³åœ¨å¤©ç©ºä¸­çš„大å°ã€‚\n"
-"[ProceduralSkyMaterial]使用轻é‡çº§ç€è‰²å™¨ç»˜åˆ¶å¤©ç©ºï¼Œå› æ­¤é€‚åˆå®žæ—¶æ›´æ–°ã€‚当你ä¸éœ€è¦"
-"一个ä¸çŽ°å®žçš„å¿«é€Ÿå¤©ç©ºæ—¶ï¼Œè¿™æ˜¯ä¸€ä¸ªå¾ˆå¥½çš„é€‰æ‹©ã€‚\n"
-"[ProceduralSkyMaterial]最多支æŒ4个太阳。æ¯ä¸ªå¤ªé˜³éƒ½ä»Žåœºæ™¯ä¸­ç›¸åº”çš„"
-"[DirectionalLight3D]获å–其颜色ã€èƒ½é‡å’Œæ–¹å‘。"
+"ProceduralSkyæä¾›äº†ä¸€ç§æ–¹æ³•,通过定义太阳ã€å¤©ç©ºå’Œåœ°é¢çš„ç¨‹åºæ€§å‚数,以快速创建"
+"一个有效的背景。天空和地é¢éžå¸¸ç›¸ä¼¼ï¼Œå®ƒä»¬æ˜¯ç”±åœ°å¹³çº¿ä¸Šçš„两ç§é¢œè‰²ä»¥åŠåœ¨è¿™ä¸¤ç§é¢œ"
+"色之间æ’值æ¸å˜æ›²çº¿æ¥å®šä¹‰ã€‚åŒæ ·ï¼Œå¤ªé˜³ä¹Ÿæ˜¯ç”±å¤©ç©ºä¸­çš„ä½ç½®ã€é¢œè‰²å’Œå¹³ç¼“æ›²çº¿æ¥æ"
+"è¿°ã€‚åŒæ—¶ï¼Œå¤ªé˜³ä¹Ÿå®šä¹‰äº†æœ€å°å’Œæœ€å¤§çš„角度,这两个值定义了太阳从开始和结æŸçš„è·ç¦»"
+"的平缓曲线,进而,最终定义了天空中太阳的大å°ã€‚\n"
+"åœ¨å‚æ•°æ”¹å˜åŽï¼Œç¨‹åºæ€§å¤©ç©ºä¼šåœ¨CPU上更新。它被存储在一个纹ç†ä¸­ï¼Œç„¶åŽåœ¨åœºæ™¯ä¸­ä½œä¸º"
+"背景显示。这使得它相对æ¥è¯´ï¼Œä¸é€‚åˆåœ¨æ¸¸æˆè¿›è¡Œè¿‡ç¨‹ä¸­å®žæ—¶æ›´æ–°ã€‚但,如果纹ç†å°ºå¯¸"
+"足够å°ï¼Œå®ƒä»ç„¶å¯ä»¥ç›¸å¯¹é¢‘ç¹åœ°æ›´æ–°ï¼Œå› ä¸ºå½“多线程å¯ç”¨æ—¶ï¼Œå®ƒæ˜¯åœ¨åŽå°çº¿ç¨‹ä¸Šã€‚"
#: doc/classes/ProceduralSky.xml:16
-#, fuzzy
msgid "Color of the ground at the bottom."
-msgstr "标题文字的颜色。"
+msgstr "底部地é¢çš„颜色。"
#: doc/classes/ProceduralSky.xml:19
msgid ""
@@ -52606,40 +54037,38 @@ msgid "Distance from center of sun where it fades out completely."
msgstr "è·ç¦»å¤ªé˜³ä¸­å¿ƒçš„è·ç¦»ï¼Œåœ¨é‚£é‡Œå®ƒå®Œå…¨æ¶ˆå¤±ã€‚"
#: doc/classes/ProceduralSky.xml:43
-#, fuzzy
msgid "Distance from sun where it goes from solid to starting to fade."
-msgstr "è·ç¦»å¤ªé˜³ä¸­å¿ƒçš„è·ç¦»ï¼Œåœ¨é‚£é‡Œå®ƒå®Œå…¨æ¶ˆå¤±ã€‚"
+msgstr "太阳从å‡å›ºåˆ°å¼€å§‹è¤ªè‰²çš„è·ç¦»ã€‚"
#: doc/classes/ProceduralSky.xml:46
msgid "The sun's color."
msgstr "太阳的颜色。"
#: doc/classes/ProceduralSky.xml:49
-#, fuzzy
msgid ""
"How quickly the sun fades away between [member sun_angle_min] and [member "
"sun_angle_max]."
-msgstr "太阳在太阳圆盘边缘和 [member sun_angle_max]之间消失的速度有多快。"
+msgstr ""
+"在 [member sun_angle_min] å’Œ [member sun_angle_max] 之间,太阳消é€çš„速度。"
#: doc/classes/ProceduralSky.xml:52
-#, fuzzy
msgid "Amount of energy contribution from the sun."
-msgstr "æ¥è‡ªå¤©ç©ºçš„能é‡è´¡çŒ®é‡ã€‚"
+msgstr "æ¥è‡ªå¤ªé˜³çš„能é‡è´¡çŒ®é‡ã€‚"
#: doc/classes/ProceduralSky.xml:55
msgid "The sun's height using polar coordinates."
msgstr "用æžå标计算太阳的高度。"
#: doc/classes/ProceduralSky.xml:58
-#, fuzzy
msgid "The direction of the sun using polar coordinates."
-msgstr "ç¢°æ’žç‚¹ï¼Œä»¥å…¨å±€åæ ‡è¡¨ç¤ºã€‚"
+msgstr "用æžå标表示太阳的方å‘。"
#: doc/classes/ProceduralSky.xml:61
msgid ""
"Size of [Texture] that the ProceduralSky will generate. The size is set "
"using [enum TextureSize]."
msgstr ""
+"ProceduralSky将生æˆçš„[Texture]的大å°ã€‚è¯¥å¤§å°æ˜¯ç”¨[enum TextureSize]æ¥è®¾ç½®çš„。"
#: doc/classes/ProceduralSky.xml:66
msgid "Sky texture will be 256x128."
@@ -52705,7 +54134,6 @@ msgid "Contains global variables accessible from everywhere."
msgstr "包å«å¯ä»Žä»»ä½•地方访问的全局å˜é‡ã€‚"
#: doc/classes/ProjectSettings.xml:7
-#, fuzzy
msgid ""
"Contains global variables accessible from everywhere. Use [method "
"get_setting], [method set_setting] or [method has_setting] to access them. "
@@ -52729,16 +54157,22 @@ msgid ""
"[i]also[/i] override the setting with the desired feature tags if you want "
"them to override base project settings on all platforms and configurations."
msgstr ""
-"包å«å¯ä»Žä»»ä½•地方访问的全局å˜é‡ã€‚使用[method get_setting],[method "
+"包å«å¯ä»¥ä»Žä»»ä½•地方访问的全局å˜é‡ã€‚使用[method get_setting]ã€[method "
"set_setting]或[method has_setting]æ¥è®¿é—®å®ƒä»¬ã€‚存储在[code]project.godot[/"
-"code]中的å˜é‡ä¹Ÿè¢«åŠ è½½åˆ°ProjectSettings中,这使得这个对象对于读å–自定义游æˆé…"
-"置选项éžå¸¸æœ‰ç”¨ã€‚\n"
-"命å项目设置属性时,请使用包å«ç±»åˆ«çš„设置的完整路径。例如,项目åç§°çš„ "
-"[code]\"application/config/name\"[/code]。类别和属性åç§°å¯ä»¥åœ¨â€œé¡¹ç›®è®¾ç½®â€å¯¹è¯"
-"框中查看。\n"
-"[b]覆盖:[/b]通过在项目的根目录中创建å为[code]override.cfg[/code]的文件,å¯ä»¥"
-"覆盖任何项目设置。这也å¯ä»¥åœ¨å¯¼å‡ºçš„项目中使用,方法是将该文件与项目二进制文件"
-"放在åŒä¸€ä¸ªç›®å½•中。"
+"code]中的å˜é‡ä¹Ÿè¢«åŠ è½½åˆ°ProjectSettings中,使得这个对象对于读å–自定义游æˆé…ç½®"
+"选项时éžå¸¸æœ‰ç”¨ã€‚\n"
+"当命å一个项目设置属性时,使用设置的完整路径,包括类别。例如,"
+"[code]\"application/config/name\"[/code]为项目å称。类别和属性åç§°å¯ä»¥åœ¨é¡¹ç›®"
+"è®¾ç½®å¯¹è¯æ¡†ä¸­æŸ¥çœ‹ã€‚\n"
+"[b]特性标签:[/b] å¯ä»¥ä½¿ç”¨[url=https://docs.godotengine.org/zh_CN/latest/"
+"tutorials/export/feature_tags.html]特性标签[/url]为特定的平å°å’Œé…置(调试ã€å‘"
+"布...)覆盖项目设置。\n"
+"[b]覆盖:[/b] 任何项目设置都å¯ä»¥é€šè¿‡åœ¨é¡¹ç›®çš„æ ¹ç›®å½•下创建一个å为 "
+"[code]override.cfg[/code] 的文件æ¥è¦†ç›–。这也å¯ä»¥åœ¨å¯¼å‡ºçš„项目中使用,把这个文"
+"件放在与项目二进制文件相åŒçš„目录下。覆盖ä»ä¼šè€ƒè™‘基本项目设置[url=https://"
+"docs.godotengine.org/zh_CN/latest/tutorials/export/feature_tags.html]功能标签"
+"[/url]。因此,如果你想让它们在所有平å°å’Œé…置上覆盖基本项目设置,请确ä¿[i]也[/"
+"i]用所需的特性标签覆盖该设置。"
#: doc/classes/ProjectSettings.xml:22
msgid ""
@@ -52832,13 +54266,33 @@ msgid ""
" path = OS.get_executable_path().get_base_dir().plus_file(\"hello.txt\")\n"
"[/codeblock]"
msgstr ""
+"返回与本地化 [code]path[/code](以 [code]res://[/code] 或 [code]user://[/"
+"code] 开头)相对应的ç»å¯¹åŽŸç”Ÿ OS 路径。返回的路径将因æ“作系统和用户首选项而"
+"异。请å‚阅 [url=https://docs.godotengine.org/zh_CN/stable/tutorials/io/"
+"data_paths.html]Godot 项目中的文件路径[/url] 以查看这些路径转æ¢ä¸ºä»€ä¹ˆã€‚å¦è§"
+"[method localize_path]。\n"
+"[b]注æ„:[/b] [method globalize_path] with [code]res://[/code] 在导出的项目中"
+"ä¸èµ·ä½œç”¨ã€‚相å,当从导出的项目è¿è¡Œæ—¶ï¼Œå°†å¯æ‰§è¡Œæ–‡ä»¶çš„基目录添加到路径中:\n"
+"[codeblock]\n"
+"var path = \"\"\n"
+"if OS.has_feature(\"editor\"):\n"
+" # 从编辑器二进制文件è¿è¡Œã€‚\n"
+" # `path` 将包å«ä½äºŽé¡¹ç›®æ ¹ç›®å½•中的 `hello.txt` çš„ç»å¯¹è·¯å¾„。\n"
+" path = ProjectSettings.globalize_path(\"res://hello.txt\")\n"
+"else:\n"
+" # 从导出的项目è¿è¡Œã€‚\n"
+" # `path` 将包å«å¯æ‰§è¡Œæ–‡ä»¶æ—边的 `hello.txt` çš„ç»å¯¹è·¯å¾„。\n"
+" # 这与使用 `ProjectSettings.globalize_path()` å’Œ `res://` 路径*ä¸*相"
+"åŒï¼Œ\n"
+" # 但在目的上足够接近。\n"
+" path = OS.get_executable_path().get_base_dir().plus_file(\"hello.txt\")\n"
+"[/codeblock]"
#: doc/classes/ProjectSettings.xml:91
msgid "Returns [code]true[/code] if a configuration value is present."
msgstr "如果存在é…置值,则返回[code]true[/code]。"
#: doc/classes/ProjectSettings.xml:100
-#, fuzzy
msgid ""
"Loads the contents of the .pck or .zip file specified by [code]pack[/code] "
"into the resource filesystem ([code]res://[/code]). Returns [code]true[/"
@@ -52851,11 +54305,13 @@ msgid ""
"specify the offset in bytes to the start of the resource pack. This is only "
"supported for .pck files."
msgstr ""
-"将由[code]pack[/code]指定的*.pck或*.zipæ–‡ä»¶çš„å†…å®¹åŠ è½½åˆ°èµ„æºæ–‡ä»¶ç³»ç»Ÿ"
-"([code]res://[/code])。æˆåŠŸæ—¶è¿”å›ž[code]true[/code]。\n"
-"[b]注æ„:[/b] 如果[code]pack[/code]ä¸­çš„æ–‡ä»¶ä¸Žèµ„æºæ–‡ä»¶ç³»ç»Ÿä¸­å·²ç»å­˜åœ¨çš„æ–‡ä»¶æœ‰ç›¸"
-"åŒçš„路径,任何试图加载该文件的å°è¯•将使用[code]pack[/code]中的文件,除éž"
-"[code]replace_files[/code]被设置为[code]false[/code]。"
+"å°†[code]pack[/code]指定的.pck或.zipæ–‡ä»¶çš„å†…å®¹åŠ è½½åˆ°èµ„æºæ–‡ä»¶ç³»ç»Ÿï¼ˆ[code]res://"
+"[/code])。æˆåŠŸæ—¶è¿”å›ž[code]true[/code]。\n"
+"[b]注æ„:[/b] 如果[code]pack[/code]中的文件与已ç»åœ¨èµ„æºæ–‡ä»¶ç³»ç»Ÿä¸­çš„æ–‡ä»¶è·¯å¾„相"
+"åŒï¼Œå°è¯•加载该文件时,将使用[code]pack[/code]中的文件,除éž"
+"[code]replace_files[/code] 被设置为[code]false[/code]。\n"
+"[b]注æ„:[/b] å¯é€‰çš„[code]offset[/code]傿•°ï¼Œå¯ä»¥ç”¨æ¥æŒ‡å®šèµ„æºåŒ…开始的字节åç§»"
+"é‡ã€‚è¿™åªæ”¯æŒ.pck文件。"
#: doc/classes/ProjectSettings.xml:109
msgid ""
@@ -52863,6 +54319,8 @@ msgid ""
"to the absolute, native OS [code]path[/code]. See also [method "
"globalize_path]."
msgstr ""
+"返回对应于ç»å¯¹åŽŸç”Ÿ OS [code]path[/code] 的本地化路径(以 [code]res://[/code] "
+"开头)。å¦è§[method globalize_path]。"
#: doc/classes/ProjectSettings.xml:116
msgid ""
@@ -52885,9 +54343,12 @@ msgid ""
"want to change project settings in exported projects, use [method "
"save_custom] to save [code]override.cfg[/code] file."
msgstr ""
+"å°†é…ç½®ä¿å­˜åˆ° [code]project.godot[/code] 文件中。\n"
+"[b]注æ„:[/b]此方法是为编辑器æ’件使用的,因为修改åŽçš„[ProjectSettings]无法在"
+"è¿è¡Œçš„应用程åºä¸­åŠ è½½å›žæ¥ã€‚å¦‚æžœè¦æ›´æ”¹å¯¼å‡ºé¡¹ç›®ä¸­çš„项目设置,请使用 [method "
+"save_custom] ä¿å­˜ [code]override.cfg[/code] 文件。"
#: doc/classes/ProjectSettings.xml:137
-#, fuzzy
msgid ""
"Saves the configuration to a custom file. The file extension must be [code]."
"godot[/code] (to save in text-based [ConfigFile] format) or [code].binary[/"
@@ -52895,8 +54356,10 @@ msgid ""
"code] file, which is also text, but can be used in exported projects unlike "
"other formats."
msgstr ""
-"å°†é…ç½®ä¿å­˜åˆ°è‡ªå®šä¹‰æ–‡ä»¶ä¸­ã€‚文件扩展å必须是[code].godot[/code](以基于文本的"
-"[ConfigFile]æ ¼å¼ä¿å­˜)或[code].binary[/code](以二进制格å¼ä¿å­˜)。"
+"å°†é…ç½®ä¿å­˜åˆ°è‡ªå®šä¹‰æ–‡ä»¶ã€‚文件扩展å必须是[code].godot[/code](以基于文本的"
+"[ConfigFile]æ ¼å¼ä¿å­˜ï¼‰æˆ–[code].binary[/code](以二进制格å¼ä¿å­˜ï¼‰ã€‚你也å¯ä»¥ä¿"
+"存为[code]override.cfg[/code]文件,它也是文本,但与其他格å¼ä¸åŒï¼Œå¯ä»¥åœ¨å¯¼å‡ºçš„"
+"项目中使用。"
#: doc/classes/ProjectSettings.xml:145
msgid ""
@@ -52936,6 +54399,13 @@ msgid ""
"export preset under [code]Plugins[/code] section. The singleton to access in "
"code was also renamed to [code]GodotPayment[/code]."
msgstr ""
+"逗å·åˆ†éš”的自定义 Android 模å—列表(必须已在 Android 导出模æ¿ä¸­æž„建)使用其 "
+"Java 包路径,例如[code]\"org/godotengine/godot/MyCustomSingleton,com/example/"
+"foo/FrenchFriesFactory\"[/code]。\n"
+"[b]注æ„:[/b] 自 Godot 3.2.2 起,[code]org/godotengine/godot/GodotPaymentV3[/"
+"code] 模å—被弃用,å–而代之的是 [code]GodotPayment[/code] æ’件,该æ’件应在 "
+"Android 中å¯ç”¨åœ¨ [code]Plugins[/code] 部分下导出预设。在代ç ä¸­è®¿é—®çš„å•例也被"
+"é‡å‘½å为 [code]GodotPayment[/code]。"
#: doc/classes/ProjectSettings.xml:175
msgid "Background color for the boot splash."
@@ -52995,13 +54465,12 @@ msgid ""
msgstr "用于项目的图标,在项目加载时设置。导出时也将尽å¯èƒ½ä½¿ç”¨æ­¤å›¾æ ‡ã€‚"
#: doc/classes/ProjectSettings.xml:197
-#, fuzzy
msgid ""
"Icon set in [code].icns[/code] format used on macOS to set the game's icon. "
"This is done automatically on start by calling [method OS.set_native_icon]."
msgstr ""
-"设置[code].icns[/code]æ ¼å¼å›¾æ ‡ï¼Œç”¨äºŽåœ¨macOS上设置游æˆå›¾æ ‡ã€‚这是在å¯åŠ¨æ—¶é€šè¿‡è°ƒ"
-"用[method DisplayServer.set_native_icon]自动完æˆçš„。"
+"在macOS上使用的[code].icns[/code]æ ¼å¼çš„图标集,用于设置游æˆçš„图标。这在å¯åŠ¨æ—¶"
+"通过调用[method OS.set_native_icon]自动完æˆã€‚"
#: doc/classes/ProjectSettings.xml:200
msgid ""
@@ -53017,33 +54486,28 @@ msgid ""
"tutorials/io/data_paths.html]Data paths[/url] in the documentation for more "
"information."
msgstr ""
+"项目å称。它由项目ç»ç†å’Œå‡ºå£å•†ä½¿ç”¨ã€‚å¯ä»¥é€šè¿‡ç¿»è¯‘本地化文件中的值æ¥ç¿»è¯‘项目å"
+"ç§°ã€‚çª—å£æ ‡é¢˜å°†è®¾ç½®ä¸ºåœ¨å¯åŠ¨æ—¶è‡ªåŠ¨åŒ¹é…项目å称。\n"
+"[b]注æ„:[/b] 如果 [member application/config/use_custom_user_dir] 为 "
+"[code]false[/code]ï¼Œæ›´æ”¹æ­¤å€¼ä¹Ÿä¼šæ›´æ”¹ç”¨æˆ·æ•°æ®æ–‡ä»¶å¤¹çš„路径。é‡å‘½å项目åŽï¼Œæ‚¨å°†"
+"无法å†è®¿é—® [code]user://[/code] 中的现有数æ®ï¼Œé™¤éžæ‚¨é‡å‘½åæ—§æ–‡ä»¶å¤¹ä»¥åŒ¹é…æ–°é¡¹"
+"ç›®å称。有关更多信æ¯ï¼Œè¯·å‚阅文档中的 [url=https://docs.godotengine.org/zh_CN/"
+"stable/tutorials/io/data_paths.html]æ•°æ®è·¯å¾„[/url]。"
#: doc/classes/ProjectSettings.xml:204
msgid ""
-"The project data directory is used for storing project-specific data "
-"(metadata, shader cache, etc.).\n"
-"[b]Note:[/b] Restart the application after changing this setting.\n"
-"[b]Note:[/b] Changing this value can help on platforms or with third-party "
-"tools where specific directory patterns are disallowed. Only modify this "
-"setting if you know that your environment requires it, as changing the "
-"default can impact compatibility with some external tools or plugins which "
-"expect the default [code].import[/code] folder."
-msgstr ""
-
-#: doc/classes/ProjectSettings.xml:209
-#, fuzzy
-msgid ""
"Specifies a file to override project settings. For example: [code]user://"
"custom_settings.cfg[/code]. See \"Overriding\" in the [ProjectSettings] "
"class description at the top for more information.\n"
"[b]Note:[/b] Regardless of this setting's value, [code]res://override.cfg[/"
"code] will still be read to override the project settings."
msgstr ""
-"æŒ‡å®šè¦æ›¿ä»£é¡¹ç›®è®¾ç½®çš„æ–‡ä»¶ã€‚例如:[code]user://custom_settings.cfg[/code]。\n"
-"[b] 注æ„:[/b]无论此设置的值是多少,[code]res://override.cfg[/code]ä»å°†è¢«è¯»å–"
-"以覆盖项目设置(请å‚阅顶部的此类说明)。"
+"指定一个文件æ¥è¦†ç›–项目设置。比如说。[code]user://custom_settings.cfg[/code]。"
+"å‚è§[ProjectSettings]顶部类æè¿°ä¸­çš„ \"Overriding\" ä»¥èŽ·å–æ›´å¤šä¿¡æ¯ã€‚\n"
+"[b]注æ„:[/b]ä¸ç®¡è¿™ä¸ªè®¾ç½®çš„值如何,[code]res://override.cfg[/code]ä»ç„¶ä¼šè¢«è¯»"
+"å–æ¥è¦†ç›–项目设置。"
-#: doc/classes/ProjectSettings.xml:213
+#: doc/classes/ProjectSettings.xml:208
msgid ""
"If [code]true[/code], the project will save user data to its own user "
"directory (see [member application/config/custom_user_dir_name]). This "
@@ -53058,16 +54522,37 @@ msgstr ""
"[code]false[/code],项目将把用户数æ®ä¿å­˜åˆ°[code] (OS user data directory)/"
"Godot/app_userdata/(project name)[/code]。"
-#: doc/classes/ProjectSettings.xml:216
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:211
+msgid ""
+"If [code]true[/code], the project will use a hidden directory ([code]."
+"import[/code]) for storing project-specific data (metadata, shader cache, "
+"etc.).\n"
+"If [code]false[/code], a non-hidden directory ([code]import[/code]) will be "
+"used instead.\n"
+"[b]Note:[/b] Restart the application after changing this setting.\n"
+"[b]Note:[/b] Changing this value can help on platforms or with third-party "
+"tools where hidden directory patterns are disallowed. Only modify this "
+"setting if you know that your environment requires it, as changing the "
+"default can impact compatibility with some external tools or plugins which "
+"expect the default [code].import[/code] folder."
+msgstr ""
+"如果 [code]true[/code],项目将使用一个éšè—目录([code].import[/code])æ¥å­˜å‚¨"
+"项目特定的数æ®ï¼ˆå…ƒæ•°æ®ã€ç€è‰²å™¨ç¼“存等)。\n"
+"如果 [code]false[/code],将使用éžéšè—目录 ([code]import[/code])。\n"
+"[b]注æ„:[/b]更改此设置åŽé‡æ–°å¯åŠ¨åº”ç”¨ç¨‹åºã€‚\n"
+"[b]注æ„:[/b] 更改此值有助于在平å°ä¸Šæˆ–使用ä¸å…许éšè—目录模å¼çš„第三方工具。仅"
+"å½“æ‚¨çŸ¥é“æ‚¨çš„çŽ¯å¢ƒéœ€è¦æ—¶æ‰ä¿®æ”¹æ­¤è®¾ç½®ï¼Œå› ä¸ºæ›´æ”¹é»˜è®¤è®¾ç½®ä¼šå½±å“与æŸäº›éœ€è¦é»˜è®¤ "
+"[code].import[/code] 文件夹的外部工具或æ’件的兼容性。"
+
+#: doc/classes/ProjectSettings.xml:217
msgid ""
"Icon set in [code].ico[/code] format used on Windows to set the game's icon. "
"This is done automatically on start by calling [method OS.set_native_icon]."
msgstr ""
-"设置[code].ico[/code]æ ¼å¼å›¾æ ‡ï¼Œåœ¨Windows上用于设置游æˆå›¾æ ‡ã€‚这是在å¯åŠ¨æ—¶é€šè¿‡"
-"调用[method DisplayServer.set_native_icon]自动完æˆçš„。"
+"以[code].ico[/code]æ ¼å¼è®¾ç½®çš„图标,在Windows上用于设置游æˆçš„图标。这在å¯åŠ¨æ—¶"
+"通过调用[method OS.set_native_icon]自动完æˆã€‚"
-#: doc/classes/ProjectSettings.xml:219
+#: doc/classes/ProjectSettings.xml:220
msgid ""
"Time samples for frame deltas are subject to random variation introduced by "
"the platform, even when frames are displayed at regular intervals thanks to "
@@ -53080,15 +54565,24 @@ msgid ""
"initially activated. It will only be active on machines where performance is "
"adequate to render frames at the refresh rate."
msgstr ""
+"帧增é‡çš„æ—¶é—´æ ·æœ¬ä¼šå—到平å°å¼•å…¥çš„éšæœºå˜åŒ–的影å“,å³ä½¿ç”±äºŽ V-Sync 以固定间隔显"
+"示帧也是如此。这会导致抖动。通过过滤输入增é‡ä»¥æ ¡æ­£åˆ·æ–°çŽ‡çš„å¾®å°æ³¢åŠ¨ï¼Œå¢žé‡å¹³æ»‘"
+"通常å¯ä»¥æä¾›æ›´å¥½çš„结果。\n"
+"[b]注æ„:[/b] Delta 平滑仅在 [member display/window/vsync/use_vsync] 开坿—¶å°"
+"试,因为它在没有 V-Sync 的情况下无法正常工作。\n"
+"åœ¨æœ€åˆæ¿€æ´»å¹³æ»‘之å‰ï¼Œä»¥ç¨³å®šçš„帧速率å¯èƒ½éœ€è¦å‡ ç§’钟的时间。它åªä¼šåœ¨æ€§èƒ½è¶³ä»¥ä»¥åˆ·"
+"新率渲染帧的机器上激活。"
-#: doc/classes/ProjectSettings.xml:224
+#: doc/classes/ProjectSettings.xml:225
msgid ""
"[b]Experimental.[/b] Shifts the measurement of delta time for each frame to "
"just after the drawing has taken place. This may lead to more consistent "
"deltas and a reduction in frame stutters."
msgstr ""
+"[b]实验性的。[/b] å°†æ¯ä¸€å¸§çš„delta时间的测é‡è½¬ç§»åˆ°ç»˜å›¾å‘生之åŽã€‚è¿™å¯èƒ½ä¼šå¯¼è‡´æ›´"
+"一致的延迟和å‡å°‘帧的åœé¡¿ã€‚"
-#: doc/classes/ProjectSettings.xml:227
+#: doc/classes/ProjectSettings.xml:228
msgid ""
"If [code]true[/code], disables printing to standard error. If [code]true[/"
"code], this also hides error and warning messages printed by [method "
@@ -53096,16 +54590,24 @@ msgid ""
"application/run/disable_stdout].\n"
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
+"如果 [code]true[/code],则ç¦ç”¨æ‰“å°åˆ°æ ‡å‡†é”™è¯¯ã€‚如果 [code]true[/code],这也会"
+"éšè—ç”± [method @GDScript.push_error] å’Œ [method @GDScript.push_warning] 打å°"
+"的错误和警告消æ¯ã€‚å¦è§[member application/run/disable_stdout]。\n"
+"对此设置的更改åªä¼šåœ¨é‡æ–°å¯åŠ¨åº”ç”¨ç¨‹åºæ—¶åº”用。"
-#: doc/classes/ProjectSettings.xml:231
+#: doc/classes/ProjectSettings.xml:232
msgid ""
"If [code]true[/code], disables printing to standard output. This is "
"equivalent to starting the editor or project with the [code]--quiet[/code] "
"command line argument. See also [member application/run/disable_stderr].\n"
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
+"如果 [code]true[/code],则ç¦ç”¨æ‰“å°åˆ°æ ‡å‡†è¾“出。这相当于使用 [code]--quiet[/"
+"code] å‘½ä»¤è¡Œå‚æ•°å¯åŠ¨ç¼–è¾‘å™¨æˆ–é¡¹ç›®ã€‚å¦è§[member application/run/"
+"disable_stderr]。\n"
+"对此设置的更改åªä¼šåœ¨é‡æ–°å¯åŠ¨åº”ç”¨ç¨‹åºæ—¶åº”用。"
-#: doc/classes/ProjectSettings.xml:235
+#: doc/classes/ProjectSettings.xml:236
msgid ""
"If [code]true[/code], flushes the standard output stream every time a line "
"is printed. This affects both terminal logging and file logging.\n"
@@ -53120,15 +54622,27 @@ msgid ""
"([code]stderr[/code]) is always flushed when a line is printed to it.\n"
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
+"如果 [code]true[/code]ï¼Œåˆ™æ¯æ¬¡æ‰“å°ä¸€è¡Œæ—¶åˆ·æ–°æ ‡å‡†è¾“出æµã€‚这会影å“终端日志记录"
+"和文件日志记录。\n"
+"è¿è¡Œé¡¹ç›®æ—¶ï¼Œå¦‚果希望由 systemd/journalctl ç­‰æœåŠ¡ç®¡ç†å™¨æ”¶é›†æ—¥å¿—,则必须å¯ç”¨æ­¤"
+"设置。默认情况下,在å‘布版本中ç¦ç”¨æ­¤è®¾ç½®ï¼Œå› ä¸ºå¦‚果快速连续打å°å¤§é‡è¡Œï¼Œåˆ™åœ¨æ¯"
+"个打å°è¡Œä¸Šåˆ·æ–°éƒ½ä¼šå¯¹æ€§èƒ½äº§ç”Ÿè´Ÿé¢å½±å“。此外,如果å¯ç”¨æ­¤è®¾ç½®ï¼Œå¦‚果应用程åºå´©æºƒ"
+"或以其他方å¼è¢«ç”¨æˆ·æ€æ­»ï¼ˆä¸ä¼šâ€œæ­£å¸¸â€å…³é—­ï¼‰ï¼Œåˆ™ä»ä¼šæˆåŠŸå†™å…¥æ—¥å¿—æ–‡ä»¶ã€‚\n"
+"[b]注æ„:[/b] æ— è®ºæ­¤è®¾ç½®å¦‚ä½•ï¼Œæ ‡å‡†é”™è¯¯æµ ([code]stderr[/code]) 在打å°ä¸€è¡Œæ—¶æ€»"
+"是被刷新。\n"
+"对此设置的更改åªä¼šåœ¨é‡æ–°å¯åŠ¨åº”ç”¨ç¨‹åºæ—¶åº”用。"
-#: doc/classes/ProjectSettings.xml:241
+#: doc/classes/ProjectSettings.xml:242
msgid ""
"Debug build override for [member application/run/flush_stdout_on_print], as "
"performance is less important during debugging.\n"
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
+"调试构建覆盖[member application/run/flush_stdout_on_print],因为在调试过程中"
+"性能ä¸é‚£ä¹ˆé‡è¦ã€‚\n"
+"ä»…åœ¨é‡æ–°å¯åŠ¨åº”ç”¨ç¨‹åºæ—¶æ‰ä¼šåº”用此设置的更改。"
-#: doc/classes/ProjectSettings.xml:245
+#: doc/classes/ProjectSettings.xml:246
msgid ""
"Forces a delay between frames in the main loop (in milliseconds). This may "
"be useful if you plan to disable vertical synchronization."
@@ -53136,7 +54650,7 @@ msgstr ""
"强制主循环中帧之间的延迟(以毫秒为å•ä½ï¼‰ã€‚如果您计划ç¦ç”¨åž‚ç›´åŒæ­¥ï¼Œè¿™å¯èƒ½å¾ˆæœ‰"
"用。"
-#: doc/classes/ProjectSettings.xml:248
+#: doc/classes/ProjectSettings.xml:249
msgid ""
"If [code]true[/code], enables low-processor usage mode. This setting only "
"works on desktop platforms. The screen is not redrawn if nothing changes "
@@ -53147,17 +54661,17 @@ msgstr ""
"觉上没有任何å˜åŒ–,å±å¹•ä¸ä¼šè¢«é‡ç»˜ã€‚这是为了编写应用程åºå’Œç¼–辑器,但在大多数游"
"æˆä¸­è¿™æ˜¯éžå¸¸æ— ç”¨çš„(å¹¶å¯èƒ½æŸå®³æ€§èƒ½)。"
-#: doc/classes/ProjectSettings.xml:251
+#: doc/classes/ProjectSettings.xml:252
msgid ""
"Amount of sleeping between frames when the low-processor usage mode is "
"enabled (in microseconds). Higher values will result in lower CPU usage."
msgstr "å¯ç”¨ä½Žå¤„ç†å™¨ä½¿ç”¨æ¨¡å¼æ—¶å¸§é—´çš„ç¡çœ é‡(以微秒计)。值越高,CPUå ç”¨çŽ‡è¶Šä½Žã€‚"
-#: doc/classes/ProjectSettings.xml:254
+#: doc/classes/ProjectSettings.xml:255
msgid "Path to the main scene file that will be loaded when the project runs."
msgstr "项目è¿è¡Œæ—¶å°†åŠ è½½çš„ä¸»åœºæ™¯æ–‡ä»¶çš„è·¯å¾„ã€‚"
-#: doc/classes/ProjectSettings.xml:257 doc/classes/ProjectSettings.xml:260
+#: doc/classes/ProjectSettings.xml:258 doc/classes/ProjectSettings.xml:261
msgid ""
"Audio buses will disable automatically when sound goes below a given dB "
"threshold for a given time. This saves CPU as effects assigned to that bus "
@@ -53166,13 +54680,13 @@ msgstr ""
"当声音在给定的时间内低于给定的dB阈值时,音频总线将自动关闭。这å¯ä»¥èŠ‚çœCPU,因"
"为分é…给该总线的效果将ä¸å†åšä»»ä½•处ç†ã€‚"
-#: doc/classes/ProjectSettings.xml:263
+#: doc/classes/ProjectSettings.xml:264
msgid ""
"Default [AudioBusLayout] resource file to use in the project, unless "
"overridden by the scene."
msgstr "项目中使用的默认[AudioBusLayout]èµ„æºæ–‡ä»¶ï¼Œé™¤éžè¢«åœºæ™¯è¦†ç›–。"
-#: doc/classes/ProjectSettings.xml:266
+#: doc/classes/ProjectSettings.xml:267
msgid ""
"Specifies the audio driver to use. This setting is platform-dependent as "
"each platform supports different audio drivers. If left empty, the default "
@@ -53181,7 +54695,7 @@ msgstr ""
"指定è¦ä½¿ç”¨çš„音频驱动程åºã€‚此设置å–决于平å°ï¼Œå› ä¸ºæ¯ä¸ªå¹³å°æ”¯æŒä¸åŒçš„音频驱动程"
"åºã€‚如果留空,将使用默认音频驱动程åºã€‚"
-#: doc/classes/ProjectSettings.xml:269
+#: doc/classes/ProjectSettings.xml:270
msgid ""
"If [code]true[/code], microphone input will be allowed. This requires "
"appropriate permissions to be set when exporting to Android or iOS."
@@ -53189,7 +54703,7 @@ msgstr ""
"如果[code]true[/code],将å…许麦克风输入。这需è¦åœ¨å¯¼å‡ºåˆ°Android或iOS时设置适当"
"çš„æƒé™ã€‚"
-#: doc/classes/ProjectSettings.xml:272
+#: doc/classes/ProjectSettings.xml:273
msgid ""
"The mixing rate used for audio (in Hz). In general, it's better to not touch "
"this and leave it to the host operating system."
@@ -53197,7 +54711,7 @@ msgstr ""
"用于音频的混åˆçŽ‡ï¼ˆå•ä½ï¼šHz)。一般æ¥è¯´ï¼Œæœ€å¥½ä¸è¦ç¢°è¿™ä¸ªï¼ŒæŠŠå®ƒç•™ç»™ä¸»æœºæ“作系"
"统。"
-#: doc/classes/ProjectSettings.xml:275
+#: doc/classes/ProjectSettings.xml:276
msgid ""
"Safer override for [member audio/mix_rate] in the Web platform. Here "
"[code]0[/code] means \"let the browser choose\" (since some browsers do not "
@@ -53206,16 +54720,20 @@ msgstr ""
"更安全地覆盖 Web å¹³å°ä¸­çš„ [member audio/mix_rate]。这里 [code]0 [/code] çš„æ„"
"æ€æ˜¯\"让æµè§ˆå™¨é€‰æ‹©\"(因为有些æµè§ˆå™¨ä¸å–œæ¬¢å¼ºåˆ¶æ··åˆé€ŸçŽ‡ï¼‰ã€‚"
-#: doc/classes/ProjectSettings.xml:278
+#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-"音频的输出延迟(毫秒)。较低的值将导致较低的音频延迟,但代价是CPU使用率增加。较"
-"低的值å¯èƒ½ä¼šå¯¼è‡´è¾ƒæ…¢ç¡¬ä»¶ä¸Šçš„声音破裂。"
-#: doc/classes/ProjectSettings.xml:281
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
@@ -53223,14 +54741,14 @@ msgstr ""
"在网络平å°ä¸­æ›´å®‰å…¨åœ°è¦†ç›– [member audio/output_latency],以é¿å…音频问题,尤其"
"是在移动设备上。"
-#: doc/classes/ProjectSettings.xml:284
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
"播放视频时设置为硬编ç éŸ³é¢‘延迟。除éžä½ çŸ¥é“自己在åšä»€ä¹ˆï¼Œå¦åˆ™æœ€å¥½ä¸è¦åŠ¨å®ƒã€‚"
-#: doc/classes/ProjectSettings.xml:287
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -53243,7 +54761,7 @@ msgstr ""
"ä»¶å˜å°ã€‚解压缩速度大多ä¸å—压缩级别的影å“。[code]-1[/code]使用默认的gzip压缩级"
"别,该级别与[code]6[/code]相åŒï¼Œä½†ç”±äºŽåº•层zlib更新,未æ¥å¯èƒ½ä¼šå‘生å˜åŒ–。"
-#: doc/classes/ProjectSettings.xml:290
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -53256,7 +54774,7 @@ msgstr ""
"ä»¶å˜å°ã€‚解压缩速度大多ä¸å—压缩级别的影å“。[code]-1[/code]使用默认的gzip压缩级"
"别,该级别与[code]6[/code]相åŒï¼Œä½†ç”±äºŽåº•层zlib更新,未æ¥å¯èƒ½ä¼šå‘生å˜åŒ–。"
-#: doc/classes/ProjectSettings.xml:293
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -53265,7 +54783,7 @@ msgstr ""
"Zstandard的默认压缩级别。影å“压缩的场景和资æºã€‚较高的级别会以压缩速度为代价导"
"致文件å˜å°ã€‚解压缩速度大多ä¸å—压缩级别的影å“。"
-#: doc/classes/ProjectSettings.xml:296
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
@@ -53273,7 +54791,7 @@ msgstr ""
"在Zstandard中å¯ç”¨ [url=https://github.com/facebook/zstd/releases/tag/"
"v1.3.2]long-distance matching[/url] 。"
-#: doc/classes/ProjectSettings.xml:299
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
@@ -53282,7 +54800,7 @@ msgstr ""
"使用与Zstandard的长è·ç¦»åŒ¹é…进行压缩时,å…许的最大大å°é™åˆ¶(2的幂)。更高的值å¯"
"ä»¥äº§ç”Ÿæ›´å¥½çš„åŽ‹ç¼©ï¼Œä½†æ˜¯åœ¨åŽ‹ç¼©å’Œè§£åŽ‹ç¼©æ—¶éœ€è¦æ›´å¤šçš„内存。"
-#: doc/classes/ProjectSettings.xml:302
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -53293,19 +54811,19 @@ msgstr ""
"ä¸ªè®¾ç½®æ˜¯ä¸ºäº†åœ¨ç§»æ¤æ—§é¡¹ç›®(戈多2)时使用,因为使用æˆå‘˜å˜é‡æ˜¯ä»Žæˆˆå¤š3开始的首选风"
"格。"
-#: doc/classes/ProjectSettings.xml:305
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr "如果[code]true[/code],则当常é‡ç”¨ä½œå‡½æ•°æ—¶ä¼šå‘出警告。"
-#: doc/classes/ProjectSettings.xml:308
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
"如果[code]true[/code],当使用已废弃的关键字如[code]slave[/code]时,å¯ç”¨è­¦å‘Šã€‚"
-#: doc/classes/ProjectSettings.xml:311
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
@@ -53314,7 +54832,7 @@ msgstr ""
"如果[code]true[/code],则å¯ç”¨ç‰¹å®šçš„GDScript警告(请å‚阅[code]debug/gdscript/"
"warnings/*[/code]设置)。如果[code]为false[/code],则ç¦ç”¨æ‰€æœ‰GDScript警告。"
-#: doc/classes/ProjectSettings.xml:314
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
@@ -53322,13 +54840,13 @@ msgstr ""
"如果[code]true[/code],则[code]res://addons[/code]文件夹中的脚本ä¸ä¼šç”Ÿæˆè­¦"
"告。"
-#: doc/classes/ProjectSettings.xml:317
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr "如果为[code]true[/code],当函数被声明为与常é‡åŒå时,å¯ç”¨è­¦å‘Šã€‚"
-#: doc/classes/ProjectSettings.xml:320
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
@@ -53337,7 +54855,7 @@ msgstr ""
"如果为[code]true[/code], 当一个函数与一个å˜é‡åŒå声明时,å¯ç”¨è­¦å‘Šã€‚在未æ¥çš„版"
"本中,当GDScript支æŒç¬¬ä¸€ç±»å‡½æ•°æ—¶ï¼Œè¿™å°†å˜æˆä¸€ä¸ªé”™è¯¯ã€‚"
-#: doc/classes/ProjectSettings.xml:323
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
@@ -53345,20 +54863,20 @@ msgstr ""
"如果[code]为true[/code],则当分é…ç»™å˜é‡çš„函数å¯èƒ½äº§ç”Ÿå¹¶è¿”回函数状æ€è€Œä¸æ˜¯å€¼"
"时,å¯ç”¨è­¦å‘Šã€‚"
-#: doc/classes/ProjectSettings.xml:326
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr "如果[code]true[/code],则在使用函数时å¯ç”¨è­¦å‘Šï¼Œå°±åƒå®ƒæ˜¯å±žæ€§ä¸€æ ·ã€‚"
-#: doc/classes/ProjectSettings.xml:329
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
"如果[code]true[/code],则当三元è¿ç®—符å¯èƒ½å‘出类型ä¸å…¼å®¹çš„值时,将å¯ç”¨è­¦å‘Šã€‚"
-#: doc/classes/ProjectSettings.xml:332
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
@@ -53366,7 +54884,7 @@ msgstr ""
"如果[code]为true[/code],则在用一个整数除以å¦ä¸€ä¸ªæ•´æ•°æ—¶å¯ç”¨è­¦å‘Š(å°æ•°éƒ¨åˆ†å°†è¢«"
"丢弃)。"
-#: doc/classes/ProjectSettings.xml:335
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
@@ -53375,13 +54893,13 @@ msgstr ""
"如果[code]为true[/code]ï¼Œåˆ™åœ¨å°†æµ®ç‚¹å€¼ä¼ é€’ç»™éœ€è¦æ•´æ•°çš„函数时å¯ç”¨è­¦å‘Š(它将被转"
"æ¢å¹¶å¤±åŽ»ç²¾åº¦)。"
-#: doc/classes/ProjectSettings.xml:338
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr "如果[code]true[/code],则在将属性当作函数使用时å¯ç”¨è­¦å‘Šã€‚"
-#: doc/classes/ProjectSettings.xml:341
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -53392,7 +54910,7 @@ msgstr ""
"傿•°)调用函数时å¯ç”¨è­¦å‘Šã€‚这样的返回值有时使用[enum Error] 枚举æ¥è¡¨ç¤ºå¯èƒ½çš„é”™"
"误。"
-#: doc/classes/ProjectSettings.xml:344
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
@@ -53401,7 +54919,7 @@ msgstr ""
"如果[code]true[/code],则在定义局部或å­ç±»æˆå‘˜å˜é‡æ—¶å¯ç”¨è­¦å‘Šï¼Œè¯¥å±€éƒ¨æˆ–å­ç±»æˆå‘˜"
"å˜é‡å°†åœ¨ä¸Šå±‚阴影å˜é‡(如æˆå‘˜å˜é‡)。"
-#: doc/classes/ProjectSettings.xml:347
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
@@ -53410,7 +54928,7 @@ msgstr ""
"如果[code]true[/code]ï¼Œåˆ™åœ¨è°ƒç”¨å¯¹å‘¨å›´ä»£ç æ²¡æœ‰å½±å“çš„è¡¨è¾¾å¼æ—¶å¯ç”¨è­¦å‘Šï¼Œä¾‹å¦‚å°†"
"[code]2 + 2[/code]写æˆè¯­å¥ã€‚"
-#: doc/classes/ProjectSettings.xml:350
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
@@ -53419,18 +54937,18 @@ msgstr ""
"如果[code]true[/code]ï¼Œåˆ™åœ¨è°ƒç”¨å¯¹å‘¨å›´ä»£ç æ²¡æœ‰å½±å“çš„ä¸‰å…ƒè¡¨è¾¾å¼æ—¶å¯ç”¨è­¦å‘Šï¼Œä¾‹å¦‚"
"å°†[code]42(如果激活else 0[/code])写入语å¥ã€‚"
-#: doc/classes/ProjectSettings.xml:353
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr "如果[code]true[/code],所有警告将被报告为错误。"
-#: doc/classes/ProjectSettings.xml:356
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr "如果[code]true[/code]ï¼Œåˆ™åœ¨ä½¿ç”¨ä»¥å‰æ²¡æœ‰èµ‹å€¼çš„å˜é‡æ—¶å¯ç”¨è­¦å‘Šã€‚"
-#: doc/classes/ProjectSettings.xml:359
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
@@ -53439,7 +54957,7 @@ msgstr ""
"如果[code]true[/code],则在使用赋值æ“作符[code]+=[/code](如果å˜é‡ä¹‹å‰æ²¡æœ‰èµ‹"
"值)为å˜é‡èµ‹å€¼æ—¶å¯ç”¨è­¦å‘Šã€‚"
-#: doc/classes/ProjectSettings.xml:362
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
@@ -53447,7 +54965,7 @@ msgstr ""
"如果[code]true[/code],则在检测到ä¸å¯è¾¾çš„ä»£ç æ—¶å¯ç”¨è­¦å‘Š(例如在始终执行的"
"[code]return[/code]语å¥ä¹‹åŽ)。"
-#: doc/classes/ProjectSettings.xml:365
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
@@ -53455,52 +54973,52 @@ msgstr ""
"如果[code]true[/code],则在使用类型å¯èƒ½ä¸ŽæœŸæœ›çš„å‡½æ•°å‚æ•°ä¸å…¼å®¹çš„è¡¨è¾¾å¼æ—¶å¯ç”¨è­¦"
"告。"
-#: doc/classes/ProjectSettings.xml:368
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr "如果[code]true[/code],则在执行ä¸å®‰å…¨çš„å¼ºåˆ¶è½¬æ¢æ—¶å¯ç”¨è­¦å‘Šã€‚"
-#: doc/classes/ProjectSettings.xml:371
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
"如果[code]true[/code],则在调用类中ä¸èƒ½ä¿è¯åœ¨ç¼–译时存在的方法时å¯ç”¨è­¦å‘Šã€‚"
-#: doc/classes/ProjectSettings.xml:374
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
"如果[code]true[/code],则在访问类中ä¸èƒ½ä¿è¯åœ¨ç¼–译时存在的属性时å¯ç”¨è­¦å‘Šã€‚"
-#: doc/classes/ProjectSettings.xml:377
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:380
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
-msgstr "如果[code]true[/code]ï¼Œåˆ™åœ¨ä¿¡å·æœªä½¿ç”¨æ—¶å¯ç”¨è­¦å‘Šã€‚"
+msgstr "如果[code]true[/code]ï¼Œå½“ä¸€ä¸ªå‡½æ•°å‚æ•°æœªä½¿ç”¨æ—¶ï¼Œå¯ç”¨è­¦å‘Šã€‚"
-#: doc/classes/ProjectSettings.xml:380
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:383
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
-msgstr "如果[code]true[/code],则在局部å˜é‡æœªä½¿ç”¨æ—¶å¯ç”¨è­¦å‘Šã€‚"
+msgstr "如果[code]true[/code],当一个æˆå‘˜å˜é‡æœªä½¿ç”¨æ—¶ï¼Œå¯ç”¨è­¦å‘Šã€‚"
-#: doc/classes/ProjectSettings.xml:383
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr "如果[code]true[/code]ï¼Œåˆ™åœ¨ä¿¡å·æœªä½¿ç”¨æ—¶å¯ç”¨è­¦å‘Šã€‚"
-#: doc/classes/ProjectSettings.xml:386
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr "如果[code]true[/code],则在局部å˜é‡æœªä½¿ç”¨æ—¶å¯ç”¨è­¦å‘Šã€‚"
-#: doc/classes/ProjectSettings.xml:389
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
+"如果 [code]true[/code],则在声明与函数åŒåçš„å˜é‡æ—¶å¯ç”¨è­¦å‘Šã€‚当 GDScript 支æŒ"
+"一æµå‡½æ•°æ—¶ï¼Œè¿™å°†åœ¨æœªæ¥ç‰ˆæœ¬ä¸­å˜æˆé”™è¯¯ã€‚"
-#: doc/classes/ProjectSettings.xml:392
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
@@ -53508,12 +55026,11 @@ msgstr ""
"如果[code]true[/code],则在将返回[code]void[/code]的函数的结果赋值给å˜é‡æ—¶å¯"
"用警告。"
-#: doc/classes/ProjectSettings.xml:395
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr "å½“å¼•æ“Žå´©æºƒæ—¶ï¼Œåœ¨å›žæº¯ä¹‹å‰æ˜¾ç¤ºçš„æ¶ˆæ¯ã€‚"
-#: doc/classes/ProjectSettings.xml:398
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -53523,25 +55040,25 @@ msgid ""
"VSync, e.g. to perform non-real-time rendering of static frames, or test the "
"project under lag conditions."
msgstr ""
-"æ¯ç§’å…è®¸çš„æœ€å¤§å¸§æ•°ã€‚å¦‚æžœæ¸¸æˆæ˜¯å¡é¡¿çš„,æ¯ç§’的实际帧数å¯èƒ½ä»ç„¶ä½ŽäºŽè¿™ä¸ªå€¼ã€‚\n"
-"如果[member display/window/vsync/use_vsync]被å¯ç”¨ï¼Œå®ƒå°†ä¼˜å…ˆä¸”强制帧数ä¸èƒ½è¶…过"
-"监视器的刷新率。\n"
-"因此,这个设置主è¦ç”¨äºŽå°†æœ€å¤§FPSé™ä½Žåˆ°åž‚ç›´åŒæ­¥ä»¥ä¸‹ï¼Œä¾‹å¦‚æ‰§è¡Œé™æ€å¸§çš„éžå®žæ—¶æ¸²"
-"染,或在延迟æ¡ä»¶ä¸‹æµ‹è¯•项目。"
+"å…许的æ¯ç§’最大帧数。如果游æˆå»¶è¿Ÿï¼Œå®žé™…çš„æ¯ç§’帧数å¯èƒ½ä½ŽäºŽè¿™ä¸ªå€¼ã€‚\n"
+"如果å¯ç”¨[member display/window/vsync/use_vsync],这将优先考虑,强制的FPS值ä¸"
+"能超过显示器的刷新率。\n"
+"å› æ­¤ï¼Œè¿™ä¸ªè®¾ç½®ä¸»è¦æ˜¯é™ä½Žä½ŽäºŽVSync的最大FPSï¼Œä¾‹å¦‚ï¼Œå¯¹é™æ€å¸§è¿›è¡Œéžå®žæ—¶æ¸²æŸ“,或"
+"者在延迟æ¡ä»¶ä¸‹æµ‹è¯•项目。"
-#: doc/classes/ProjectSettings.xml:403
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr "调试GDScriptæ—¶å…许的最大调用堆栈。"
-#: doc/classes/ProjectSettings.xml:406
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr "åˆ†æžæ—¶æ¯ä¸ªå¸§å…许的最大函数数é‡ã€‚"
-#: doc/classes/ProjectSettings.xml:409
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr "æ¯ç§’钟打å°å¸§åˆ°æ ‡å‡†è¾“出。"
-#: doc/classes/ProjectSettings.xml:412
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
@@ -53550,70 +55067,70 @@ msgstr ""
"è¿è¡Œæ—¶æ‰“å°æ›´å¤šä¿¡æ¯åˆ°æ ‡å‡†è¾“出。它显示诸如内存泄æ¼ã€å“ªäº›åœºæ™¯å’Œèµ„æºæ­£åœ¨åŠ è½½ç­‰ä¿¡"
"æ¯ã€‚"
-#: doc/classes/ProjectSettings.xml:415
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr "最大的å¯è§†è„šæœ¬è°ƒç”¨å †æ ˆï¼Œä»¥é¿å…æ— é™é€’归。"
-#: doc/classes/ProjectSettings.xml:418
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr "碰撞形状之间接触点的颜色,在调试èœå•中å¯ç”¨â€œå¯è§ç¢°æ’žå½¢çŠ¶â€æ—¶å¯è§ã€‚"
-#: doc/classes/ProjectSettings.xml:421
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
-msgstr "碰撞形状的颜色,当在调试èœå•中å¯ç”¨â€œå¯è§ç¢°æ’žå½¢çŠ¶â€æ—¶å¯è§ã€‚"
+msgstr ""
+"设置当调试èœå•中的å¯ç”¨ \"å¯è§çš„碰撞形状\" 时,2Dç‰©ç†æ˜¯å¦ä¼šåœ¨æ¸¸æˆä¸­æ˜¾ç¤ºç¢°æ’žè½®"
+"廓。"
-#: doc/classes/ProjectSettings.xml:424
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr "当在调试èœå•中å¯ç”¨â€œå¯è§ç¢°æ’žå½¢çŠ¶â€æ—¶ï¼Œç¢°æ’žå½¢çŠ¶ä¹‹é—´æ˜¾ç¤ºçš„æœ€å¤§æŽ¥è§¦ç‚¹æ•°ã€‚"
-#: doc/classes/ProjectSettings.xml:427
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr "碰撞形状的颜色,当在调试èœå•中å¯ç”¨â€œå¯è§ç¢°æ’žå½¢çŠ¶â€æ—¶å¯è§ã€‚"
-#: doc/classes/ProjectSettings.xml:430
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr "被ç¦ç”¨çš„导航几何图形的颜色,在调试èœå•中å¯ç”¨â€œå¯è§å¯¼èˆªâ€æ—¶å¯è§ã€‚"
-#: doc/classes/ProjectSettings.xml:433
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr "导航几何图形的颜色,在调试èœå•中å¯ç”¨â€œå¯è§å¯¼èˆªâ€æ—¶å¯è§ã€‚"
-#: doc/classes/ProjectSettings.xml:436
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr "鼠标光标的自定义图åƒ(最大256×256)。"
-#: doc/classes/ProjectSettings.xml:439
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr "自定义鼠标光标图åƒçš„热点。"
-#: doc/classes/ProjectSettings.xml:442
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr "工具æç¤ºç›¸å¯¹äºŽé¼ æ ‡å…‰æ ‡çƒ­ç‚¹çš„ä½ç½®åç§»é‡ã€‚"
-#: doc/classes/ProjectSettings.xml:445
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-"如果[code]true[/code],å…许在Windowså’ŒmacOS上显示HiDPI。这个设置对桌é¢Linux没"
-"有影å“,因为dpi感知回退在那里ä¸å—支æŒã€‚"
+"如果[code]true[/code],å…许在Windowsã€macOSå’ŒHTML5å¹³å°ä¸Šæ˜¾ç¤ºHiDPI。这个设置对"
+"桌é¢Linux没有影å“ï¼Œå› ä¸ºå®ƒä¸æ”¯æŒDPI感知回退。"
-#: doc/classes/ProjectSettings.xml:448
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
@@ -53621,7 +55138,7 @@ msgstr ""
"如果[code]true[/code]ï¼Œåˆ™ä¿æŒå±å¹•打开(å³ä½¿åœ¨ä¸æ´»åŠ¨çš„æƒ…å†µä¸‹),因此å±å¹•ä¿æŠ¤ç¨‹åº"
"ä¸ä¼šæŽ¥ç®¡ã€‚适用于桌é¢å’Œç§»åЍ平å°ã€‚"
-#: doc/classes/ProjectSettings.xml:451
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -53629,8 +55146,12 @@ msgid ""
"you have to set [member display/window/size/width] and [member display/"
"window/size/height] accordingly."
msgstr ""
+"在移动设备上使用的默认å±å¹•æ–¹å‘。\n"
+"[b]注æ„:[/b]è®¾ç½®ä¸ºçºµå‘æ—¶ï¼Œæ­¤é¡¹ç›®è®¾ç½®ä¸ä¼šè‡ªåŠ¨ç¿»è½¬é¡¹ç›®åˆ†è¾¨çŽ‡çš„å®½åº¦å’Œé«˜åº¦ã€‚ç›¸"
+"å,您必须相应地设置 [member display/window/size/width] å’Œ [member display/"
+"window/size/height]。"
-#: doc/classes/ProjectSettings.xml:455
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
@@ -53638,7 +55159,7 @@ msgstr ""
"如果[code]true[/code],主指示器将自动éšè—。这åªä¼šå½±å“没有物ç†home键的iOS设"
"备。"
-#: doc/classes/ProjectSettings.xml:458
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -53647,28 +55168,41 @@ msgid ""
"[b]Note:[/b] This feature is implemented on HTML5, Linux, macOS, Windows, "
"and Android."
msgstr ""
+"如果 [code]true[/code],则å…许窗å£èƒŒæ™¯çš„é€åƒç´ é€æ˜Žåº¦ã€‚è¿™ä¼šå½±å“æ€§èƒ½ï¼Œå› æ­¤é™¤éž"
+"需è¦ï¼Œå¦åˆ™å°†å…¶ä¿ç•™ä¸º [code]false[/code]。\n"
+"有关更多详细信æ¯ï¼Œè¯·å‚阅 [member OS."
+"window_per_pixel_transparency_enabled]。\n"
+"[b]注æ„:[/b] 此功能在 HTML5ã€Linuxã€macOSã€Windows å’Œ Android 上实现。"
-#: doc/classes/ProjectSettings.xml:463
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
"[b]Note:[/b] This feature is implemented on HTML5, Linux, macOS, Windows, "
"and Android."
msgstr ""
+"å¯åŠ¨æ—¶å°†çª—å£èƒŒæ™¯è®¾ç½®ä¸ºé€æ˜Žã€‚\n"
+"有关更多详细信æ¯ï¼Œè¯·å‚阅 [member OS."
+"window_per_pixel_transparency_enabled]。\n"
+"[b]注æ„:[/b] 此功能在 HTML5ã€Linuxã€macOSã€Windows å’Œ Android 上实现。"
-#: doc/classes/ProjectSettings.xml:468
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
+"强制主窗å£å§‹ç»ˆåœ¨é¡¶éƒ¨ã€‚\n"
+"[b]注æ„:[/b] 此设置在 iOSã€Android å’Œ HTML5 上被忽略。"
-#: doc/classes/ProjectSettings.xml:472
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
+"å¼ºåˆ¶ä¸»çª—å£æ— è¾¹æ¡†ã€‚\n"
+"[b]注æ„:[/b] 此设置在 iOSã€Android å’Œ HTML5 上被忽略。"
-#: doc/classes/ProjectSettings.xml:476
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -53681,36 +55215,44 @@ msgid ""
"fullscreen mode.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
+"项目å¯åŠ¨æ—¶å°†ä¸»çª—å£è®¾ç½®ä¸ºå…¨å±ã€‚请注æ„ï¼Œè¿™ä¸æ˜¯ [i] 独立 çš„[/i] 免屿˜¾ç¤ºã€‚在 "
+"Windows å’Œ Linux 上,无边框窗å£ç”¨äºŽæ¨¡æ‹Ÿå…¨å±ã€‚在 macOS 上,会创建一个新的桌é¢"
+"用于显示正在è¿è¡Œçš„项目。\n"
+"无论平å°å¦‚何,å¯ç”¨å…¨å±éƒ½ä¼šæ›´æ”¹çª—å£å¤§å°ä»¥åŒ¹é…显示器的大å°ã€‚å› æ­¤ï¼Œè¯·ç¡®ä¿æ‚¨çš„项"
+"目在å¯ç”¨å…¨å±æ¨¡å¼æ—¶æ”¯æŒ [url=https://docs.godotengine.org/zh_CN/stable/"
+"tutorials/rendering/multiple_resolutions.html]多ç§åˆ†è¾¨çއ[/url]。\n"
+"[b]注æ„:[/b] 在 iOSã€Android å’Œ HTML5 上忽略此设置。"
-#: doc/classes/ProjectSettings.xml:481
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-"设置游æˆçš„主视å£é«˜åº¦ã€‚在桌é¢å¹³å°ä¸Šï¼Œè¿™æ˜¯é»˜è®¤çš„窗å£å¤§å°ã€‚当å¯ç”¨æ‹‰ä¼¸æ¨¡å¼è®¾ç½®"
+"设置游æˆçš„主视窗高度。在桌é¢å¹³å°ä¸Šï¼Œè¿™æ˜¯é»˜è®¤çš„窗å£å¤§å°ã€‚当å¯ç”¨æ‹‰ä¼¸æ¨¡å¼è®¾ç½®"
"æ—¶ï¼Œä¹Ÿä½¿ç”¨æ­¤å‚æ•°ä½œä¸ºå‚考。"
-#: doc/classes/ProjectSettings.xml:484
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
-msgstr "默认情况下å…许窗å£å¯è°ƒæ•´å¤§å°ã€‚"
+msgstr ""
+"å…许窗å£é»˜è®¤å¯è°ƒæ•´å¤§å°ã€‚\n"
+"[b]注æ„:[/b] 这个设置在iOSå’ŒAndroid上将忽略。"
-#: doc/classes/ProjectSettings.xml:488
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr "如果大于0,则在è¿è¡Œæ¸¸æˆæ—¶è¦†ç›–窗å£é«˜åº¦ã€‚用于测试拉伸模å¼ã€‚"
-#: doc/classes/ProjectSettings.xml:491
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr "如果大于0,则在è¿è¡Œæ¸¸æˆæ—¶è¦†ç›–窗å£å®½åº¦ã€‚用于测试拉伸模å¼ã€‚"
-#: doc/classes/ProjectSettings.xml:494
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
@@ -53719,13 +55261,13 @@ msgstr ""
"设置游æˆçš„主视窗宽度。在桌é¢å¹³å°ä¸Šï¼Œè¿™æ˜¯é»˜è®¤çš„窗å£å¤§å°ã€‚当å¯ç”¨æ‹‰ä¼¸æ¨¡å¼è®¾ç½®"
"æ—¶ï¼Œä¹Ÿä½¿ç”¨æ­¤å‚æ•°ä½œä¸ºå‚考。"
-#: doc/classes/ProjectSettings.xml:497
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr "指定è¦ä½¿ç”¨çš„å¹³æ¿é©±åŠ¨ç¨‹åºã€‚如果为空,将使用默认驱动程åºã€‚"
-#: doc/classes/ProjectSettings.xml:500
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -53737,7 +55279,7 @@ msgstr ""
"较高的输入延迟和较低的帧率为代价。如果[code]false[/code]ï¼Œåž‚ç›´åŒæ­¥å°†è¢«ç¦ç”¨ï¼Œ"
"然而,许多平å°ä»å°†æ‰§è¡Œå®ƒ(如手机平å°å’ŒHTML5)。"
-#: doc/classes/ProjectSettings.xml:503
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -53753,7 +55295,7 @@ msgstr ""
"[b]注:[/b]这个选项是实验性的,旨在缓解一些用户的å¡é¡¿ä½“验。然而,有些用户在使"
"ç”¨å®ƒæ—¶ä½“éªŒåˆ°åž‚ç›´åŒæ­¥å¸§çއå‡åŠ(例如从60 FPSé™è‡³30 FPS)。"
-#: doc/classes/ProjectSettings.xml:507
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -53768,18 +55310,26 @@ msgid ""
"prime-run %command%\n"
"[/codeblock]"
msgstr ""
+"è¿è¡Œé¡¹ç›®æ—¶é™„加到 Godot è‡ªå·±çš„å‘½ä»¤è¡Œçš„å‘½ä»¤è¡Œå‚æ•°ã€‚è¿™ä¸ä¼šå½±å“编辑器本身。\n"
+"å¯ä»¥ä½¿ç”¨ [code]%command%[/code] å ä½ç¬¦ä½¿å¦ä¸€ä¸ªå¯æ‰§è¡Œæ–‡ä»¶è¿è¡Œ Godot。å ä½ç¬¦å°†"
+"替æ¢ä¸º Godot 自己的命令行。程åºç‰¹å®šçš„傿•°åº”该放在 [i] å ä½ç¬¦ä¹‹å‰ [/i],而 "
+"Godot ç‰¹å®šå‚æ•°åº”该放在 [i] å ä½ç¬¦ä¹‹åŽ [/i]。\n"
+"例如,这å¯ç”¨äºŽå¼ºåˆ¶é¡¹ç›®åœ¨ Linux 上的 NVIDIA Optimus 系统中的专用 GPU 上è¿"
+"行:\n"
+"[codeblock]\n"
+"prime-run %command%\n"
+"[/codeblock]"
-#: doc/classes/ProjectSettings.xml:515
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-"æœç´¢ç‰¹å®šäºŽé¡¹ç›®çš„脚本模æ¿è·¯å¾„。脚本模æ¿å°†åœ¨ç‰¹å®šäºŽç¼–辑器的路径和特定于项目的路"
-"径中进行æœç´¢ã€‚"
+"对于项目特定的脚本模æ¿çš„æœç´¢è·¯å¾„ã€‚ Godot 将在编辑器的特定路径和此项目的路径中"
+"æœç´¢ã€‚"
-#: doc/classes/ProjectSettings.xml:518
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -53790,7 +55340,7 @@ msgstr ""
"[code]tscn[/code],如果你也想解æžä½ çš„场景文件,特别是如果你使用的是在场景文件"
"中åºåˆ—化的内置脚本。"
-#: doc/classes/ProjectSettings.xml:521
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
@@ -53798,16 +55348,15 @@ msgstr ""
"[member ScrollContainer.scroll_deadzone],它将用于所有[ScrollContainer]s,除"
"éžé‡å†™ã€‚"
-#: doc/classes/ProjectSettings.xml:524
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-"如果[code]为true[/code],则切æ¢Windowså’ŒUWPå¯¹è¯æ¡†ä¸­çš„Cancelå’ŒOK按钮,以éµå¾ªç•Œ"
-"é¢çº¦å®šã€‚"
+"如果[code]true[/code],在Windowså’ŒUWPçš„å¯¹è¯æ¡†ä¸­äº¤æ¢ç¡®å®šå’Œå–消按钮,以éµå¾ªç•Œé¢"
+"惯例。"
-#: doc/classes/ProjectSettings.xml:529
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
@@ -53815,31 +55364,31 @@ msgstr ""
"用于项目的自定义[Theme]èµ„æºæ–‡ä»¶çš„路径([code]theme[/code]或通用[code]tres[/"
"code]/[code]res[/code]扩展å)。"
-#: doc/classes/ProjectSettings.xml:532
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr "自定义[Font]资æºçš„路径,用于项目的所有GUI元素的默认字体。"
-#: doc/classes/ProjectSettings.xml:535
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr "如果[code]true[/code],确ä¿ä½¿ç”¨çš„主题将在HiDPI下工作。"
-#: doc/classes/ProjectSettings.xml:538
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr "在[Tree], [ItemList]ç­‰æŽ§ä»¶ä¸­ä¸ºå¢žé‡æœç´¢è®¾ç½®è®¡æ—¶å™¨(以毫秒为å•ä½)。"
-#: doc/classes/ProjectSettings.xml:541
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr "检测[TextEdit]空闲的计时器(å•ä½ä¸ºç§’)。"
-#: doc/classes/ProjectSettings.xml:544
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr "工具æç¤ºçš„默认延迟(以秒为å•ä½)。"
-#: doc/classes/ProjectSettings.xml:547
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -53851,7 +55400,7 @@ msgstr ""
"[b]注æ„:[/b]默认的[code]ui_*[/code]动作ä¸èƒ½è¢«åˆ é™¤ï¼Œå› ä¸ºå®ƒä»¬æ˜¯å‡ ä¸ª[Control]çš„"
"内部逻辑所必需的。但是,å¯ä»¥ä¿®æ”¹åˆ†é…给该æ“作的事件。"
-#: doc/classes/ProjectSettings.xml:551
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -53862,7 +55411,7 @@ msgstr ""
"[b]注æ„:[/b]默认的[code]ui_*[/code]动作ä¸èƒ½è¢«åˆ é™¤ï¼Œå› ä¸ºå®ƒä»¬æ˜¯å‡ ä¸ª[Control]çš„"
"内部逻辑所必需的。但是,å¯ä»¥ä¿®æ”¹åˆ†é…给该æ“作的事件。"
-#: doc/classes/ProjectSettings.xml:555
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -53873,7 +55422,7 @@ msgstr ""
"[b]注æ„:[/b]默认的[code]ui_*[/code]动作ä¸èƒ½è¢«åˆ é™¤ï¼Œå› ä¸ºå®ƒä»¬æ˜¯å‡ ä¸ª[Control]çš„"
"内部逻辑所必需的。但是,å¯ä»¥ä¿®æ”¹åˆ†é…给该æ“作的事件。"
-#: doc/classes/ProjectSettings.xml:559
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -53887,7 +55436,7 @@ msgstr ""
"[b]注æ„:[/b]默认的[code]ui_*[/code]动作ä¸èƒ½è¢«åˆ é™¤ï¼Œå› ä¸ºå®ƒä»¬æ˜¯å‡ ä¸ª[Control]çš„"
"内部逻辑所必需的。但是,å¯ä»¥ä¿®æ”¹åˆ†é…给该æ“作的事件。"
-#: doc/classes/ProjectSettings.xml:563
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -53900,7 +55449,7 @@ msgstr ""
"[b]注æ„:[/b]默认的[code]ui_*[/code]动作ä¸èƒ½è¢«åˆ é™¤ï¼Œå› ä¸ºå®ƒä»¬æ˜¯å‡ ä¸ª[Control]çš„"
"内部逻辑所必需的。但是,å¯ä»¥ä¿®æ”¹åˆ†é…给该æ“作的事件。"
-#: doc/classes/ProjectSettings.xml:567
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -53913,7 +55462,7 @@ msgstr ""
"[b]注æ„:[/b]默认的[code]ui_*[/code]动作ä¸èƒ½è¢«åˆ é™¤ï¼Œå› ä¸ºå®ƒä»¬æ˜¯å‡ ä¸ª[Control]çš„"
"内部逻辑所必需的。但是,å¯ä»¥ä¿®æ”¹åˆ†é…给该æ“作的事件。"
-#: doc/classes/ProjectSettings.xml:571
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -53927,7 +55476,7 @@ msgstr ""
"[b]注æ„:[/b] 默认的[code]ui_*[/code]动作ä¸èƒ½è¢«åˆ é™¤ï¼Œå› ä¸ºå®ƒä»¬å¯¹äºŽå‡ ä¸ª"
"[Control]的内部逻辑是必è¦çš„。然而,分é…给动作的事件å¯ä»¥è¢«ä¿®æ”¹ã€‚"
-#: doc/classes/ProjectSettings.xml:575
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -53938,7 +55487,7 @@ msgstr ""
"[b]注æ„:[/b]默认的[code]ui_*[/code]动作ä¸èƒ½è¢«åˆ é™¤ï¼Œå› ä¸ºå®ƒä»¬æ˜¯å‡ ä¸ª[Control]çš„"
"内部逻辑所必需的。但是,å¯ä»¥ä¿®æ”¹åˆ†é…给该æ“作的事件。"
-#: doc/classes/ProjectSettings.xml:579
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -53952,7 +55501,7 @@ msgstr ""
"[b]注æ„:[/b]默认的[code]ui_*[/code]动作ä¸èƒ½è¢«åˆ é™¤ï¼Œå› ä¸ºå®ƒä»¬æ˜¯å‡ ä¸ª[Control]çš„"
"内部逻辑所必需的。但是,å¯ä»¥ä¿®æ”¹åˆ†é…给该æ“作的事件。"
-#: doc/classes/ProjectSettings.xml:583
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -53966,7 +55515,7 @@ msgstr ""
"[b]注æ„:[/b]默认的[code]ui_*[/code]动作ä¸èƒ½è¢«åˆ é™¤ï¼Œå› ä¸ºå®ƒä»¬æ˜¯å‡ ä¸ª[Control]çš„"
"内部逻辑所必需的。但是,å¯ä»¥ä¿®æ”¹åˆ†é…给该æ“作的事件。"
-#: doc/classes/ProjectSettings.xml:587
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -53977,7 +55526,7 @@ msgstr ""
"[b]注æ„:[/b]默认的[code]ui_*[/code]动作ä¸èƒ½è¢«åˆ é™¤ï¼Œå› ä¸ºå®ƒä»¬æ˜¯å‡ ä¸ª[Control]çš„"
"内部逻辑所必需的。但是,å¯ä»¥ä¿®æ”¹åˆ†é…给该æ“作的事件。"
-#: doc/classes/ProjectSettings.xml:591
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -53989,7 +55538,7 @@ msgstr ""
"[b]注æ„:[/b]默认的[code]ui_*[/code]动作ä¸èƒ½è¢«åˆ é™¤ï¼Œå› ä¸ºå®ƒä»¬æ˜¯å‡ ä¸ª[Control]çš„"
"内部逻辑所必需的。但是,å¯ä»¥ä¿®æ”¹åˆ†é…给该æ“作的事件。"
-#: doc/classes/ProjectSettings.xml:595
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -54000,7 +55549,7 @@ msgstr ""
"[b]注æ„:[/b]默认的[code]ui_*[/code]动作ä¸èƒ½è¢«åˆ é™¤ï¼Œå› ä¸ºå®ƒä»¬æ˜¯å‡ ä¸ª[Control]çš„"
"内部逻辑所必需的。但是,å¯ä»¥ä¿®æ”¹åˆ†é…给该æ“作的事件。"
-#: doc/classes/ProjectSettings.xml:599
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -54011,465 +55560,446 @@ msgid ""
"because they can't run at the target frame rate.\n"
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
+"如果 [code]true[/code],按键/触摸/æ“纵æ†äº‹ä»¶å°†åœ¨æ¯ä¸ªç©ºé—²å¸§å’Œç‰©ç†å¸§ä¹‹å‰åˆ·"
+"新。\n"
+"如果 [code]false[/code],此类事件将在引擎迭代之间æ¯ä¸ªç©ºé—²å¸§ä»…刷新一次。\n"
+"å¯ç”¨æ­¤åŠŸèƒ½å¯ä»¥å¤§å¤§æé«˜å¯¹è¾“入的å“åº”èƒ½åŠ›ï¼Œç‰¹åˆ«æ˜¯åœ¨éœ€è¦æ¯ä¸ªå¯è§ï¼ˆç©ºé—²ï¼‰å¸§è¿è¡Œå¤š"
+"个物ç†å¸§çš„设备中,因为它们无法以目标帧速率è¿è¡Œã€‚\n"
+"[b]注:[/b] ç›®å‰ä»…在 Android 中实现。"
-#: doc/classes/ProjectSettings.xml:605
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr "如果[code]true[/code]ï¼Œåˆ™åœ¨ç‚¹å‡»æˆ–æ»‘åŠ¨è§¦æ‘¸å±æ—¶å‘é€é¼ æ ‡è¾“入事件。"
-#: doc/classes/ProjectSettings.xml:608
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr "如果[code]true[/code],则在点击或拖动鼠标时å‘é€è§¦æ‘¸è¾“入事件。"
-#: doc/classes/ProjectSettings.xml:611
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr "工具æç¤ºçš„默认延迟(以秒为å•ä½)。"
-#: doc/classes/ProjectSettings.xml:614
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr "2D物ç†å±‚1çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:617
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr "2D物ç†å±‚10çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:620
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr "2D物ç†å±‚11çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:623
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr "2D物ç†å±‚12çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:626
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr "2D物ç†å±‚13çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:629
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr "2D物ç†å±‚14çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:632
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr "2D物ç†å±‚15çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:635
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr "2D物ç†å±‚16çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:638
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr "2D物ç†å±‚17çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:641
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr "2D物ç†å±‚18çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:644
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr "2D物ç†å±‚19çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:647
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr "2D物ç†å±‚2çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:650
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr "2D物ç†å±‚20çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:653
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
-msgstr "2D物ç†å±‚2çš„å¯é€‰å称。"
+msgstr "2D 物ç†å±‚ 21 çš„å¯é€‰åç§° ."
-#: doc/classes/ProjectSettings.xml:656
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
-msgstr "2D物ç†å±‚2çš„å¯é€‰å称。"
+msgstr "2D物ç†å±‚22 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:659
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
-msgstr "2D物ç†å±‚2çš„å¯é€‰å称。"
+msgstr "2D物ç†å±‚23çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:662
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
-msgstr "2D物ç†å±‚2çš„å¯é€‰å称。"
+msgstr "2D物ç†å±‚24çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:665
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
-msgstr "2D物ç†å±‚2çš„å¯é€‰å称。"
+msgstr "2D物ç†å±‚25çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:668
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
-msgstr "2D物ç†å±‚2çš„å¯é€‰å称。"
+msgstr "2D物ç†å±‚26çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:671
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
-msgstr "2D物ç†å±‚2çš„å¯é€‰å称。"
+msgstr "2D物ç†å±‚27çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:674
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
-msgstr "2D物ç†å±‚2çš„å¯é€‰å称。"
+msgstr "2D物ç†å±‚28çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:677
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
-msgstr "2D物ç†å±‚2çš„å¯é€‰å称。"
+msgstr "2D物ç†å±‚29çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:680
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr "2D物ç†å±‚3çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:683
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
-msgstr "2D物ç†å±‚3çš„å¯é€‰å称。"
+msgstr "2D物ç†å±‚30çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:686
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
-msgstr "2D物ç†å±‚3çš„å¯é€‰å称。"
+msgstr "2D物ç†å±‚31çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:689
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
-msgstr "2D物ç†å±‚3çš„å¯é€‰å称。"
+msgstr "2D物ç†å±‚32çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:692
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr "2D物ç†å±‚4çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:695
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr "2D物ç†å±‚5çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:698
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr "2D物ç†å±‚6çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:701
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr "2D物ç†å±‚7çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:704
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr "2D物ç†å±‚8çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:707
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr "2D物ç†å±‚9çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:710
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr "2D物ç†å±‚1çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:713
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr "2D渲染层10çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:716
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr "2D渲染层11çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:719
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr "2D渲染层12çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:722
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr "2D渲染层13çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:725
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr "2D渲染层14çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:728
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr "2D渲染层15çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:731
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr "2D渲染层16çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:734
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr "2D渲染层17çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:737
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr "2D渲染层18çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:740
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr "2D渲染层19çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:743
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr "2D 渲染层 2 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:746
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr "2D 渲染层 20 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:749
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr "2D 渲染层 3 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:752
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr "2D 渲染层 4 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:755
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr "2D 渲染层 5 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:758
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr "2D 渲染层 6 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:761
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr "2D 渲染层 7 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:764
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr "2D 渲染层 8 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:767
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr "2D 渲染层 9 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:770
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr "3D物ç†å±‚1 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:773
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr "3D物ç†å±‚10 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:776
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr "3D物ç†å±‚11 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:779
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr "3D物ç†å±‚12 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:782
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr "3D物ç†å±‚13 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:785
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr "3D物ç†å±‚14 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:788
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr "3D物ç†å±‚15 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:791
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr "3D物ç†å±‚16 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:794
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr "3D物ç†å±‚17 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:797
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr "3D物ç†å±‚18 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:800
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr "3D物ç†å±‚19 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:803
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr "3D物ç†å±‚2 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:806
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr "3D物ç†å±‚20 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:809
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
-msgstr "3D物ç†å±‚2 çš„å¯é€‰å称。"
+msgstr "3D物ç†å±‚ 21 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:812
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
-msgstr "3D物ç†å±‚2 çš„å¯é€‰å称。"
+msgstr "3D物ç†å±‚22 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:815
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
-msgstr "3D物ç†å±‚2 çš„å¯é€‰å称。"
+msgstr "3D物ç†å±‚23 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:818
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
-msgstr "3D物ç†å±‚2 çš„å¯é€‰å称。"
+msgstr "3D物ç†å±‚24 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:821
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
-msgstr "3D物ç†å±‚2 çš„å¯é€‰å称。"
+msgstr "3D物ç†å±‚ 25 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:824
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
-msgstr "3D物ç†å±‚2 çš„å¯é€‰å称。"
+msgstr "3D物ç†å±‚26 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:827
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
-msgstr "3D物ç†å±‚2 çš„å¯é€‰å称。"
+msgstr "3D物ç†å±‚27 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:830
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
-msgstr "3D物ç†å±‚2 çš„å¯é€‰å称。"
+msgstr "3D物ç†å±‚28 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:833
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
-msgstr "3D物ç†å±‚2 çš„å¯é€‰å称。"
+msgstr "3D物ç†å±‚29 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:836
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr "3D物ç†å±‚3 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:839
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
-msgstr "3D物ç†å±‚3 çš„å¯é€‰å称。"
+msgstr "3D物ç†å±‚30 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:842
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
-msgstr "3D物ç†å±‚3 çš„å¯é€‰å称。"
+msgstr "3D物ç†å±‚31 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:845
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
-msgstr "3D物ç†å±‚3 çš„å¯é€‰å称。"
+msgstr "3D物ç†å±‚32 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:848
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr "3D物ç†å±‚4 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:851
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr "3D物ç†å±‚5 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:854
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr "3D物ç†å±‚6 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:857
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr "3D物ç†å±‚7 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:860
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr "3D物ç†å±‚8 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:863
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr "3D物ç†å±‚9 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:866
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr "3D渲染层1 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:869
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr "3D渲染层10 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:872
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr "3D渲染层11 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:875
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr "3D渲染层12 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:878
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr "3D渲染层13 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:881
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr "3D渲染层14 çš„å¯é€‰åç§°"
-#: doc/classes/ProjectSettings.xml:884
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr "3D渲染层15 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:887
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr "3D渲染层16 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:890
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr "3D渲染层17 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:893
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr "3D渲染层18 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:896
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr "3D渲染层19 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:899
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr "3D渲染层2 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:902
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr "3D渲染层20 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:905
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr "3D渲染层3 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:908
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr "3D渲染层4 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:911
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr "3D渲染层5 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:914
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr "3D渲染层6 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:917
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr "3D渲染层7 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:920
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr "3D渲染层8 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:923
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr "3D渲染层9 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:926
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
@@ -54477,33 +56007,35 @@ msgstr ""
"如果给定语言的翻译ä¸å¯ç”¨ï¼Œåˆ™ä½¿ç”¨é»˜è®¤åœ°åŸŸã€‚如果留空,将使用 [code]en[/code],"
"å³è‹±æ–‡ã€‚"
-#: doc/classes/ProjectSettings.xml:929
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr "如果ä¸ä¸ºç©ºï¼Œé‚£ä¹ˆå½“从编辑器中è¿è¡Œé¡¹ç›®æ—¶ï¼Œå°†ä½¿ç”¨è¯¥è¯­è¨€ã€‚"
-#: doc/classes/ProjectSettings.xml:932
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr "如果[code]true[/code],将所有输出记录到文件中。"
-#: doc/classes/ProjectSettings.xml:935
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
+"[member logging/file_logging/enable_file_logging] 的桌é¢è¦†ç›–,因为在 移动 / "
+"Web å¹³å°ä¸Šä¸å®¹æ˜“访问日志文件。"
-#: doc/classes/ProjectSettings.xml:938
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
-msgstr "项目中的日志的路径。建议使用[code]user://[/code]作为路径。"
+msgstr "项目中日志的路径。建议使用 [code]user://[/code] 路径。"
-#: doc/classes/ProjectSettings.xml:941
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
-msgstr "指定å…许的日志文件的最大数é‡(用于旋转)。"
+msgstr "指定å…许的最大日志文件数é‡ï¼ˆç”¨äºŽè½®æ¢ï¼‰ã€‚"
-#: doc/classes/ProjectSettings.xml:946
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
@@ -54511,7 +56043,7 @@ msgstr ""
"Godot使用一个消æ¯é˜Ÿåˆ—æ¥å»¶è¿Ÿä¸€äº›å‡½æ•°è°ƒç”¨ã€‚如果你的空间用完了(你会看到一个错"
"误),你å¯ä»¥åœ¨è¿™é‡Œå¢žåР大å°ã€‚"
-#: doc/classes/ProjectSettings.xml:949
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -54522,7 +56054,7 @@ msgstr ""
"以é¿å…åœ¨çº¿ç¨‹ä¸Šåœæ­¢è¯·æ±‚它们的æœåŠ¡å™¨ã€‚å¦‚æžœåœ¨çº¿ç¨‹ä¸­åŠ è½½èµ„æºæ—¶æœåС噍ç»å¸¸å¡é¡¿ï¼Œè¯·"
"增加此数字。"
-#: doc/classes/ProjectSettings.xml:952
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
@@ -54531,90 +56063,84 @@ msgstr ""
"å…许调试器输出的最大字符é‡ã€‚超过这个值,内容就会被放弃。这有助于é¿å…调试器的"
"è¿žæŽ¥åœæ»žã€‚"
-#: doc/classes/ProjectSettings.xml:955
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-"å…许调试器å‘é€çš„æœ€å¤§é”™è¯¯æ•°ã€‚超过这个值,内容就会被抛弃。这有助于é¿å…调试器的"
-"è¿žæŽ¥åœæ»žã€‚"
+"å…许作为调试器输出å‘é€çš„æœ€å¤§é”™è¯¯æ•°ã€‚超过此值,内容将被删除。这有助于é¿å…调试"
+"å™¨çš„è¿žæŽ¥åœæ»žã€‚"
-#: doc/classes/ProjectSettings.xml:958
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-"å…许调试器输出的最大字符é‡ã€‚超过这个值,内容就会被放弃。这有助于é¿å…调试器的"
-"è¿žæŽ¥åœæ»žã€‚"
+"å…许作为调试器输出å‘é€çš„æœ€å¤§æ¶ˆæ¯é‡ã€‚超过此值,内容将被删除。这有助于é¿å…调试"
+"å™¨çš„è¿žæŽ¥åœæ»žã€‚"
-#: doc/classes/ProjectSettings.xml:961
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-"å…许从调试器å‘é€çš„æœ€å¤§è­¦å‘Šæ•°ã€‚超过这个值,内容就会被抛弃。这有助于é¿å…调试器"
-"çš„è¿žæŽ¥åœæ»žã€‚"
+"å…许作为调试器输出å‘é€çš„æœ€å¤§è­¦å‘Šæ•°ã€‚超过此值,内容将被删除。这有助于é¿å…调试"
+"å™¨çš„è¿žæŽ¥åœæ»žã€‚"
-#: doc/classes/ProjectSettings.xml:964
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-"用于ååºåˆ—化Godotæ•°æ®çš„æ•°æ®åŒ…对等æµçš„默认大å°ã€‚超过这个大å°ï¼Œæ•°æ®ä¼šè¢«ä¸¢å¼ƒã€‚"
+"用于ååºåˆ—化 Godot æ•°æ®çš„æ•°æ®åŒ…å¯¹ç­‰æµ (stream) 的默认大å°ï¼ˆä»¥å­—节为å•ä½ï¼ŒæŒ‡å®š"
+"为 2 的幂)。默认值 [code]16[/code] 等于 65,536 字节。超过此大å°ï¼Œæ•°æ®å°†è¢«ä¸¢"
+"弃。"
-#: doc/classes/ProjectSettings.xml:967
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr "使用TCP的连接å°è¯•的超时(以秒为å•ä½ï¼‰ã€‚"
-#: doc/classes/ProjectSettings.xml:970
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr "[WebRTCDataChannel]输入缓冲区的最大尺寸(å•ä½ï¼šåƒå­—节)。"
-#: doc/classes/ProjectSettings.xml:973
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
-msgstr "[WebRTCDataChannel]输入缓冲区的最大尺寸(å•ä½ï¼šåƒå­—节)。"
+msgstr "[WebSocketClient] 输入缓冲区的最大尺寸,以 kiB 为å•ä½ã€‚"
-#: doc/classes/ProjectSettings.xml:976
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
-msgstr ""
+msgstr "[WebSocketClient] 的最大并å‘输入数æ®åŒ…数。"
-#: doc/classes/ProjectSettings.xml:979
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
-msgstr "[WebRTCDataChannel]输入缓冲区的最大尺寸(å•ä½ï¼šåƒå­—节)。"
+msgstr "[WebSocketClient]输出缓冲区的最大尺寸,以kiB为å•ä½ã€‚"
-#: doc/classes/ProjectSettings.xml:982
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
-msgstr ""
+msgstr "[WebSocketClient]的最大并å‘输出数æ®åŒ…æ•°é‡ã€‚"
-#: doc/classes/ProjectSettings.xml:985
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
-msgstr "[WebRTCDataChannel]输入缓冲区的最大尺寸(å•ä½ï¼šåƒå­—节)。"
+msgstr "[WebSocketServer]输入缓冲区的最大尺寸,以kiB为å•ä½ã€‚"
-#: doc/classes/ProjectSettings.xml:988
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
-msgstr ""
+msgstr "[WebSocketServer] 的最大并å‘输入数æ®åŒ…æ•°é‡ã€‚"
-#: doc/classes/ProjectSettings.xml:991
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
-msgstr "[WebRTCDataChannel]输入缓冲区的最大尺寸(å•ä½ï¼šåƒå­—节)。"
+msgstr "[WebSocketServer] 输出缓冲区的最大尺寸,以 kiB 为å•ä½ã€‚"
-#: doc/classes/ProjectSettings.xml:994
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
-msgstr ""
+msgstr "[WebSocketServer] 的最大并å‘输出数æ®åŒ…æ•°é‡ã€‚"
-#: doc/classes/ProjectSettings.xml:997
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
@@ -54622,11 +56148,11 @@ msgstr ""
"对远程文件系统的预读å–é‡ã€‚更高的值å¯ä»¥å‡å°‘延迟的影å“,但代价是更高的带宽消"
"耗。"
-#: doc/classes/ProjectSettings.xml:1000
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr "远程文件系统使用的页é¢å¤§å°ï¼ˆå­—节)。"
-#: doc/classes/ProjectSettings.xml:1003
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -54640,35 +56166,39 @@ msgstr ""
"certificates.crt]Mozillaè¯ä¹¦åŒ…[/url]。如果留空,将使用默认的è¯ä¹¦åŒ…。\n"
"如果有疑问,让这个设置为空。"
-#: doc/classes/ProjectSettings.xml:1007
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
"当自动创建节点å称时,在这个项目中设置大å°å†™çš„ç±»åž‹ã€‚è¿™ä¸»è¦æ˜¯ç¼–辑器设置。"
-#: doc/classes/ProjectSettings.xml:1010
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr "用什么æ¥åˆ†éš”节点å称和编å·ã€‚è¿™ä¸»è¦æ˜¯ä¸€ä¸ªç¼–辑器的设置。"
-#: doc/classes/ProjectSettings.xml:1013
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
-msgstr "用于broad-phase 2D 哈希网格算法的哈希表的大å°ã€‚"
+msgstr ""
+"用于宽相 2D 哈希网格算法的哈希表的大å°ã€‚\n"
+"[b]注æ„:[/b] 如果å¯ç”¨äº† [member ProjectSettings.physics/2d/use_bvh],则ä¸ä½¿"
+"用。"
-#: doc/classes/ProjectSettings.xml:1017
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
+"用于宽相2D哈希网格算法的å•元尺寸,åƒç´ å•ä½ã€‚\n"
+"[b]注æ„:[/b] 如果å¯ç”¨[member ProjectSettings.physics/2D/use_bvh],则ä¸ä½¿ç”¨ã€‚"
-#: doc/classes/ProjectSettings.xml:1021
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -54680,9 +56210,15 @@ msgid ""
"common/physics_fps], [code]60[/code] by default) will bring the object to a "
"stop in one iteration."
msgstr ""
+"2D 中的默认角阻尼。\n"
+"[b]注æ„:[/b] 良好的值在 [code]0[/code] 到 [code]1[/code] 的范围内。在值为 "
+"[code]0[/code] 时,对象将继续以相åŒçš„速度移动。大于 [code]1[/code] 的值将旨在"
+"ä¸åˆ°ä¸€ç§’的时间内将速度é™ä½Žåˆ° [code]0[/code],例如[code]2[/code] 的值将旨在在"
+"åŠç§’内将速度é™ä½Žåˆ° [code]0[/code]。等于或大于物ç†å¸§é€ŸçŽ‡çš„å€¼å°†ä½¿å¯¹è±¡åœ¨ä¸€æ¬¡è¿­ä»£"
+"ä¸­åœæ­¢ï¼Œ[member ProjectSettings.physics/common/physics_fps]默认情况下为 "
+"[code]60[/code]。"
-#: doc/classes/ProjectSettings.xml:1025
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -54693,17 +56229,16 @@ msgid ""
"Physics2DServer.AREA_PARAM_GRAVITY, 98)\n"
"[/codeblock]"
msgstr ""
-"2D中默认的é‡åŠ›å¼ºåº¦ã€‚\n"
-"[b]注æ„:[/b]这个属性åªåœ¨é¡¹ç›®å¯åŠ¨æ—¶è¢«è¯»å–。若è¦åœ¨è¿è¡Œæ—¶æ”¹å˜é»˜è®¤çš„é‡åŠ›ï¼Œè¯·ä½¿ç”¨"
-"以下代ç ç¤ºä¾‹ã€‚\n"
+"2D中默认的é‡åŠ›å¼ºåº¦ï¼Œå•ä½ï¼šæ¯ç§’平方åƒç´ ã€‚\n"
+"[b]注æ„:[/b]这个属性åªåœ¨é¡¹ç›®å¯åŠ¨æ—¶è¢«è¯»å–。è¦åœ¨è¿è¡Œæ—¶æ”¹å˜é»˜è®¤çš„é‡åŠ›ï¼Œè¯·ä½¿ç”¨ä»¥"
+"下代ç ç¤ºä¾‹ï¼š\n"
"[codeblock]\n"
"# 设置默认的é‡åŠ›å¼ºåº¦ä¸º98。\n"
-"PhysicsServer2D.area_set_param(get_viewport().find_world_2d().get_space(), "
-"PhysicsServer2D.area_PARAM_GRAVITY, 98)\n"
+"Physics2DServer.area_set_param(get_viewport().find_world_2d().get_space(), "
+"Physics2DServer.AREA_PARAM_GRAVITY, 98)\n"
"[/codeblock]"
-#: doc/classes/ProjectSettings.xml:1033
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -54714,16 +56249,16 @@ msgid ""
"Physics2DServer.AREA_PARAM_GRAVITY_VECTOR, Vector2(0, 1))\n"
"[/codeblock]"
msgstr ""
-"2D中默认的é‡åŠ›æ–¹å‘。\n"
-"[b]注æ„:[/b]这个属性åªåœ¨é¡¹ç›®å¯åŠ¨æ—¶è¢«è¯»å–。若è¦åœ¨è¿è¡Œæ—¶æ”¹å˜é»˜è®¤çš„é‡åŠ›å‘é‡ï¼Œè¯·"
-"使用下é¢çš„代ç ç¤ºä¾‹ã€‚\n"
+"2D 中的默认é‡åŠ›æ–¹å‘。\n"
+"[b]注:[/b] 该属性仅在项目å¯åŠ¨æ—¶è¯»å–。è¦åœ¨è¿è¡Œæ—¶æ›´æ”¹é»˜è®¤é‡åŠ›å‘é‡ï¼Œè¯·ä½¿ç”¨ä»¥ä¸‹"
+"代ç ç¤ºä¾‹ï¼š\n"
"[codeblock]\n"
-"# 设置默认的é‡åŠ›æ–¹å‘为`Vector2(0, 1)`。\n"
-"PhysicsServer2D.area_set_param(get_viewport().find_world_2d().get_space(), "
-"PhysicsServer2D.area_PARAM_GRAVITY_VECTOR, Vector2(0, 1))\n"
+"# 设置默认é‡åŠ›æ–¹å‘为`Vector2(0, 1)`。\n"
+"Physics2DServer.area_set_param(get_viewport().find_world_2d().get_space(), "
+"Physics2DServer.AREA_PARAM_GRAVITY_VECTOR, Vector2(0, 1))\n"
"[/codeblock]"
-#: doc/classes/ProjectSettings.xml:1041
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -54735,50 +56270,54 @@ msgid ""
"common/physics_fps], [code]60[/code] by default) will bring the object to a "
"stop in one iteration."
msgstr ""
+"2D 中的默认线性阻尼。\n"
+"[b]注:[/b]良好的值在[code]0[/code]到[code]1[/code]的范围内。在值为 [code]0[/"
+"code] 时,对象将继续以相åŒçš„速度移动。大于 [code]1[/code] 的值将旨在ä¸åˆ°ä¸€ç§’"
+"的时间内将速度é™ä½Žåˆ° [code]0[/code],例如[code]2[/code] 的值将旨在åŠç§’内将速"
+"度é™ä½Žåˆ° [code]0[/code]。等于或大于物ç†å¸§é€ŸçŽ‡çš„å€¼å°†ä½¿å¯¹è±¡åœ¨ä¸€æ¬¡è¿­ä»£ä¸­åœæ­¢ï¼Œ"
+"[member ProjectSettings.physics/common/physics_fps],默认情况下为 [code]60[/"
+"code]。"
-#: doc/classes/ProjectSettings.xml:1045
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-"在broad-phase 2D哈希网格算法中,定义相对于å•元而言的构æˆå¤§åž‹ç‰©ä½“的表é¢å°ºå¯¸çš„"
-"阈值。"
+"定义构æˆå¤§å¯¹è±¡çš„表é¢å°ºå¯¸çš„阈值,与宽相 2D 散列网格算法中的å•元有关。\n"
+"[b]注æ„:[/b]如果å¯ç”¨äº†[member ProjectSettings.physics/2d/use_bvh],则ä¸ä½¿"
+"用。"
-#: doc/classes/ProjectSettings.xml:1049
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-"设置用于2D物ç†çš„物ç†å¼•擎。\n"
-"\"DEFAULT \"å’Œ \"GodotPhysics2D \"是一样的,因为目å‰è¿˜æ²¡æœ‰ä½¿ç”¨å…¶ä»–çš„2D物ç†å¼•"
-"擎。"
+"设置用于 2D 物ç†çš„物ç†å¼•擎。\n"
+"\"DEFAULT\" å’Œ \"GodotPhysics\" æ˜¯ä¸€æ ·çš„ï¼Œå› ä¸ºç›®å‰æ²¡æœ‰å®žçް坿›¿ä»£çš„ 2D ç‰©ç†æœ"
+"务。"
-#: doc/classes/ProjectSettings.xml:1053
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-"角速度阈值。在此阈值以下,2D物ç†ä½“å°†è¢«è§†ä¸ºä¸æ´»åŠ¨ã€‚å‚阅[constant "
-"physicsServer2D.SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]。"
+"阈值角速度,在该阈值下 2D 物ç†ä½“å°†è¢«è§†ä¸ºéžæ´»åŠ¨ã€‚å‚阅 [constant "
+"Physics2DServer.SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]。"
-#: doc/classes/ProjectSettings.xml:1056
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-"线性速度的阈值。在此阈值下二维物ç†ä½“è¢«è®¤ä¸ºæ˜¯ä¸æ´»åŠ¨çš„ã€‚å‚阅[constant "
+"线性速度的阈值。在此阈值下2D物ç†ä½“è¢«è®¤ä¸ºæ˜¯éžæ´»åŠ¨çš„ã€‚å‚阅[constant "
"PhysicsServer2D.SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]。"
-#: doc/classes/ProjectSettings.xml:1059
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -54792,30 +56331,31 @@ msgstr ""
"[b]警告:[/b] 从Godot 3.2开始,关于物ç†è¿ç®—使用多线程的å馈ä¸ä¸€ã€‚请务必评估它"
"是å¦ç¡®å®žç»™ä½ å¸¦æ¥äº†é¢å¤–的性能,并且在使用它时没有过时。"
-#: doc/classes/ProjectSettings.xml:1063
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-"2D物ç†ç‰©ä½“䏿´»åŠ¨çš„æ—¶é—´ï¼ˆä»¥ç§’ä¸ºå•ä½ï¼‰ã€‚在此之å‰ï¼Œ2D物ç†ä½“将进入ç¡çœ çжæ€ã€‚å‚阅"
+"2D物ç†ç‰©ä½“éžæ´»åŠ¨çš„æ—¶é—´ï¼Œä»¥ç§’ä¸ºå•ä½ã€‚在此之å‰ï¼Œ2D物ç†ç‰©ä½“将进入休眠状æ€ã€‚å‚阅"
"[constant PhysicsServer2D.SPACE_PARAM_BODY_TIME_TO_SLEEP]。"
-#: doc/classes/ProjectSettings.xml:1066
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
+"å¯ç”¨è¾¹ç•Œä½“ç§¯å±‚æ¬¡ç»“æž„è€Œä¸æ˜¯æ•£åˆ—网格,用于 2D 物ç†ç©ºé—´åˆ†åŒºã€‚è¿™å¯èƒ½ä¼šæä¾›æ›´å¥½çš„"
+"性能。"
-#: doc/classes/ProjectSettings.xml:1069
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-"设置三维物ç†ä¸–ç•Œçš„åˆ›å»ºæ˜¯å¦æ”¯æŒ[SoftBody3D]物ç†è¿ç®—(åªé€‚用于Bullet物ç†å¼•擎)。"
+"设置是å¦åœ¨æ”¯æŒ [SoftBody] 物ç†çš„æƒ…况下创建 3D 物ç†ä¸–界。仅适用于 Bullet 物ç†"
+"引擎。"
-#: doc/classes/ProjectSettings.xml:1072
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -54827,9 +56367,15 @@ msgid ""
"common/physics_fps], [code]60[/code] by default) will bring the object to a "
"stop in one iteration."
msgstr ""
+"3D 中的默认角阻尼。\n"
+"[b]注æ„:[/b] 良好的值在 [code]0[/code] 到 [code]1[/code] 的范围内。在值为 "
+"[code]0[/code] 时,对象将继续以相åŒçš„速度移动。大于 [code]1[/code] 的值将旨在"
+"ä¸åˆ°ä¸€ç§’的时间内将速度é™ä½Žåˆ° [code]0[/code],例如[code]2[/code] 的值将旨在åŠ"
+"秒内将速度é™ä½Žåˆ° [code]0[/code]。等于或大于物ç†å¸§é€ŸçŽ‡çš„å€¼å°†ä½¿å¯¹è±¡åœ¨ä¸€æ¬¡è¿­ä»£ä¸­"
+"åœæ­¢ï¼Œ[member ProjectSettings.physics/common/physics_fps]默认情况下为 "
+"[code]60[/code]。"
-#: doc/classes/ProjectSettings.xml:1076
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -54840,17 +56386,16 @@ msgid ""
"PhysicsServer.AREA_PARAM_GRAVITY, 9.8)\n"
"[/codeblock]"
msgstr ""
-"3D中默认的é‡åŠ›å¼ºåº¦ã€‚\n"
-"[b]注æ„:[/b]这个属性åªåœ¨é¡¹ç›®å¯åŠ¨æ—¶è¢«è¯»å–。若è¦åœ¨è¿è¡Œæ—¶æ”¹å˜é»˜è®¤çš„é‡åŠ›ï¼Œè¯·ä½¿ç”¨"
-"以下代ç ç¤ºä¾‹ã€‚\n"
+"3D 中的默认é‡åŠ›å¼ºåº¦ï¼Œå•ä½ï¼šç±³/秒平方。\n"
+"[b]注:[/b] 该属性仅在项目å¯åŠ¨æ—¶è¯»å–。è¦åœ¨è¿è¡Œæ—¶æ›´æ”¹é»˜è®¤é‡åŠ›ï¼Œè¯·ä½¿ç”¨ä»¥ä¸‹ä»£ç "
+"示例:\n"
"[codeblock]\n"
-"# 设置默认的é‡åŠ›å¼ºåº¦ä¸º9.8。\n"
-"PhysicsServer3D.area_set_param(get_viewport().find_world().get_space(), "
-"PhysicsServer3D.AREA_PARAM_GRAVITY, 9.8)\n"
+"# 设置默认é‡åŠ›å¼ºåº¦ä¸º9.8。\n"
+"PhysicsServer.area_set_param(get_viewport().find_world().get_space(), "
+"PhysicsServer.AREA_PARAM_GRAVITY, 9.8)\n"
"[/codeblock]"
-#: doc/classes/ProjectSettings.xml:1084
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -54861,16 +56406,16 @@ msgid ""
"PhysicsServer.AREA_PARAM_GRAVITY_VECTOR, Vector3(0, -1, 0))\n"
"[/codeblock]"
msgstr ""
-"3D中默认的é‡åŠ›æ–¹å‘。\n"
-"[b]注æ„:[/b]这个属性åªåœ¨é¡¹ç›®å¯åŠ¨æ—¶è¢«è¯»å–。若è¦åœ¨è¿è¡Œæ—¶æ”¹å˜é»˜è®¤çš„é‡åŠ›å‘é‡ï¼Œè¯·"
-"使用下é¢çš„代ç ç¤ºä¾‹ã€‚\n"
+"3D 中的默认é‡åŠ›æ–¹å‘。\n"
+"[b]注:[/b] 该属性仅在项目å¯åŠ¨æ—¶è¯»å–。è¦åœ¨è¿è¡Œæ—¶æ›´æ”¹é»˜è®¤é‡åŠ›å‘é‡ï¼Œè¯·ä½¿ç”¨ä»¥ä¸‹"
+"代ç ç¤ºä¾‹ï¼š\n"
"[codeblock]\n"
-"# 设置默认的é‡åŠ›æ–¹å‘为`Vector3(0, -1, 0)`。\n"
-"PhysicsServer3D.area_set_param(get_viewport().find_world().get_space(), "
-"PhysicsServer3D.AREA_PARAM_GRAVITY_VECTOR, Vector3(0, -1, 0))\n"
+"# 设置默认é‡åŠ›æ–¹å‘为`Vector3(0, -1, 0)`。\n"
+"PhysicsServer.area_set_param(get_viewport().find_world().get_space(), "
+"PhysicsServer.AREA_PARAM_GRAVITY_VECTOR, Vector3(0, -1, 0))\n"
"[/codeblock]"
-#: doc/classes/ProjectSettings.xml:1092
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -54882,30 +56427,38 @@ msgid ""
"common/physics_fps], [code]60[/code] by default) will bring the object to a "
"stop in one iteration."
msgstr ""
+"3D 中的默认线性阻尼。\n"
+"[b]注:[/b]好的值在[code]0[/code]到[code]1[/code]的范围内。在值为 [code]0[/"
+"code] 时,对象将继续以相åŒçš„速度移动。大于 [code]1[/code] 的值将旨在ä¸åˆ°ä¸€ç§’"
+"的时间内将速度é™ä½Žåˆ° [code]0[/code],例如[code]2[/code] 的值将旨在åŠç§’内将速"
+"度é™ä½Žåˆ° [code]0[/code]。等于或大于物ç†å¸§é€ŸçŽ‡çš„å€¼å°†ä½¿å¯¹è±¡åœ¨ä¸€æ¬¡è¿­ä»£ä¸­åœæ­¢ï¼Œ"
+"[member ProjectSettings.physics/common/physics_fps]默认情况下为 [code]60[/"
+"code]。"
-#: doc/classes/ProjectSettings.xml:1096
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
+"å…è®¸ä½¿ç”¨è¾¹ç•Œä½“ç§¯å±‚æ¬¡ç»“æž„è€Œä¸æ˜¯å…«å‰æ ‘进行 3D 物ç†ç©ºé—´åˆ†åŒºã€‚è¿™å¯èƒ½ä¼šæä¾›æ›´å¥½çš„"
+"性能。"
-#: doc/classes/ProjectSettings.xml:1099
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
"physics engine. The \"GodotPhysics\" engine is still supported as an "
"alternative."
msgstr ""
-"设置3D物ç†å­¦çš„物ç†å¼•擎。\n"
-"ç›®å‰ \"DEFAULT \"是[url=https://bulletphysics.org]Bullet[/url]物ç†å¼•擎。ä»ç„¶"
-"æ”¯æŒ \"GodotPhysics3D \"引擎作为替代。"
+"设置用于 3D 物ç†çš„物ç†å¼•擎。\n"
+"\"DEFAULT\"ç›®å‰æ˜¯ [url=https://bulletphysics.org]Bullet[/url] 物ç†å¼•擎。ä»ç„¶"
+"支æŒ\"GodotPhysics\"引擎作为替代。"
-#: doc/classes/ProjectSettings.xml:1103
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr "在根视图上å¯ç”¨ [member Viewport.physics_object_picking]。"
-#: doc/classes/ProjectSettings.xml:1106
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -54918,8 +56471,15 @@ msgid ""
"picking input events during pause (so nodes won't get them) and flushing "
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
+"如果å¯ç”¨ï¼Œ2D å’Œ 3D 物ç†pickåœ¨æš‚åœæ—¶ä¼šè¿™æ ·è¡¨çŽ°ï¼š\n"
+"- æš‚åœå¼€å§‹æ—¶ï¼Œæ‚¬åœæˆ–æ•获的æ¯ä¸ªç¢°æ’žå¯¹è±¡ï¼ˆä»…é™ 3D)都会从该状æ€ä¸­é‡Šæ”¾å‡ºæ¥ï¼ŒèŽ·å¾—"
+"相关的鼠标退出回调,除éžå…¶æš‚åœæ¨¡å¼ä½¿å…¶å…于暂åœã€‚\n"
+"- åœ¨æš‚åœæœŸé—´ï¼Œpickåªè€ƒè™‘ä¸å—æš‚åœçš„碰撞对象,å‘é€è¾“入事件和输入/退出回调到他们"
+"预期。\n"
+"如果ç¦ç”¨ï¼Œåˆ™ä½¿ç”¨è¿‡åŽ»çš„è¡Œä¸ºï¼ŒåŒ…æ‹¬åœ¨æš‚åœæœŸé—´æŽ’队等待pick输入事件(因此节点ä¸ä¼š"
+"获å–它们),并在æ¢å¤æ—¶æ ¹æ®2D/3D世界的状æ€åˆ·æ–°è¯¥é˜Ÿåˆ—。"
-#: doc/classes/ProjectSettings.xml:1112
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -54932,8 +56492,7 @@ msgstr ""
"[b]注æ„:[/b] 这个属性åªåœ¨é¡¹ç›®å¯åŠ¨æ—¶è¢«è¯»å–。è¦åœ¨è¿è¡Œæ—¶æ”¹å˜ç‰©ç†FPS,请设置"
"[member Engine.iterations_per_second]æ¥ä»£æ›¿ã€‚"
-#: doc/classes/ProjectSettings.xml:1116
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -54948,12 +56507,17 @@ msgid ""
"[b]Note:[/b] This property is only read when the project starts. To change "
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-"æŽ§åˆ¶ç‰©ç†æ—¶é’Ÿä¸Žå®žæ—¶åŒæ­¥çš„程度。为0æˆ–æ›´å°‘ï¼Œåˆ™æ˜¯åŒæ­¥çš„。这样的值建议用于网络游"
-"æˆï¼Œå› ä¸ºæ—¶é’ŸåŒæ­¥å¾ˆé‡è¦ã€‚较高的数值会导致游æˆä¸­çš„æ—¶é’Ÿå’ŒçœŸå®žæ—¶é’Ÿæœ‰è¾ƒå¤§çš„å差,"
-"但å…许平滑帧率抖动。默认值0.5对大多数人æ¥è¯´åº”该是没有问题的;高于2的值å¯èƒ½ä¼š"
-"导致游æˆå¯¹æŽ‰å¸§çš„å应有明显的延迟,ä¸å»ºè®®ä½¿ç”¨ã€‚"
+"æŽ§åˆ¶ç‰©ç†æ—¶é’Ÿå®žæ—¶åŒæ­¥çš„程度。如果是0æˆ–æ›´å°‘ï¼Œæ—¶é’Ÿæ˜¯åŒæ­¥çš„。这样的值建议用于网络"
+"游æˆï¼Œå› ä¸ºæ—¶é’Ÿçš„åŒæ­¥æ€§å¾ˆé‡è¦ã€‚较高的值会导致游æˆä¸­çš„æ—¶é’Ÿå’ŒçœŸå®žæ—¶é’Ÿçš„å差较"
+"大,但å¯ä»¥å¹³æ»‘帧速率的抖动。默认值0.5对大多数人æ¥è¯´åº”是ä¸é”™çš„;超过2的值å¯èƒ½"
+"会导致游æˆå¯¹æŽ‰å¸§çš„å应有明显的延迟,因此ä¸å»ºè®®ä½¿ç”¨ã€‚\n"
+"[b]注æ„:[/b]ä¸ºäº†èŽ·å¾—æœ€ä½³æ•ˆæžœï¼Œå½“ä½¿ç”¨è‡ªå®šä¹‰ç‰©ç†æ’值解决方案时,应该通过将"
+"[member physics/common/physics_jitter_fix]设置为[code]0[/code]æ¥ç¦ç”¨ç‰©ç†æŠ–动"
+"ä¿®å¤ã€‚\n"
+"[b]注æ„:[/b] 这个属性åªåœ¨é¡¹ç›®å¯åŠ¨æ—¶è¢«è¯»å–。è¦åœ¨è¿è¡Œæ—¶æ”¹å˜ç‰©ç†FPS,请设置"
+"[member Engine.physics_jitter_fix]。"
-#: doc/classes/ProjectSettings.xml:1121
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -54962,8 +56526,12 @@ msgid ""
"exports. A non-default setting that works better on your machine may "
"adversely affect performance for end users."
msgstr ""
+"[b]实验性的。[/b]åœ¨ä¸Šä¼ æ‰¹å¤„ç†æ•°æ®ä¹‹å‰ä½¿ç”¨NULLæ•°æ®è°ƒç”¨[code]glBufferData[/"
+"code]。这å¯èƒ½ä¸æ˜¯å¿…需的,但å¯ä»¥ç”¨äºŽå®‰å…¨ã€‚\n"
+"[b]注æ„:[/b] å°å¿ƒä½¿ç”¨ã€‚建议您将其ä¿ç•™ä¸ºå¯¼å‡ºçš„默认值。在您的计算机上效果更好"
+"çš„éžé»˜è®¤è®¾ç½®å¯èƒ½ä¼šå¯¹æœ€ç»ˆç”¨æˆ·çš„æ€§èƒ½äº§ç”Ÿä¸åˆ©å½±å“。"
-#: doc/classes/ProjectSettings.xml:1125
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -54972,8 +56540,12 @@ msgid ""
"exports. A non-default setting that works better on your machine may "
"adversely affect performance for end users."
msgstr ""
+"[b]实验性的。[/b] 如果设置为 on,则使用 [code]GL_STREAM_DRAW[/code] 标志进行"
+"批处ç†ç¼“冲区上传。如果关闭,则使用 [code]GL_DYNAMIC_DRAW[/code] 标志。\n"
+"[b]注æ„:[/b] å°å¿ƒä½¿ç”¨ã€‚建议您将其ä¿ç•™ä¸ºå¯¼å‡ºçš„默认值。在您的计算机上效果更好"
+"çš„éžé»˜è®¤è®¾ç½®å¯èƒ½ä¼šå¯¹æœ€ç»ˆç”¨æˆ·çš„æ€§èƒ½äº§ç”Ÿä¸åˆ©å½±å“。"
-#: doc/classes/ProjectSettings.xml:1129
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -54983,8 +56555,13 @@ msgid ""
"exports. A non-default setting that works better on your machine may "
"adversely affect performance for end users."
msgstr ""
+"[b]实验性的。[/b]如果设置为,则适用缓冲孤立 - [code]glBufferData [/code] 在上"
+"ä¼ æ–°æ•°æ®ä¹‹å‰ä½¿ç”¨ NULL æ•°æ®å’Œå®Œæ•´ç¼“冲器大å°è¿›è¡Œè°ƒç”¨ã€‚这对于é¿å…æŸäº›ç¡¬ä»¶å‡ºçްåœ"
+"滞éžå¸¸é‡è¦ã€‚\n"
+"[b]注æ„:[/b] å°å¿ƒä½¿ç”¨ã€‚建议您将此作为导出的默认值。在机器上效果更好的éžé»˜è®¤"
+"设置å¯èƒ½ä¼šå¯¹æœ€ç»ˆç”¨æˆ·çš„æ€§èƒ½äº§ç”Ÿä¸åˆ©å½±å“。"
-#: doc/classes/ProjectSettings.xml:1133
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -54993,17 +56570,22 @@ msgid ""
"exports. A non-default setting that works better on your machine may "
"adversely affect performance for end users."
msgstr ""
+"[b] 实验性的。[/b] 如果设置为开å¯ï¼Œåˆ™ä½¿ç”¨ [code]GL_STREAM_DRAW[/code] 标志进"
+"行旧缓冲区上传。如果关闭,则使用 [code]GL_DYNAMIC_DRAW[/code] 标志。\n"
+"[b]注æ„:[/b] å°å¿ƒä½¿ç”¨ã€‚建议您将其ä¿ç•™ä¸ºå¯¼å‡ºçš„默认值。在您的计算机上效果更好"
+"çš„éžé»˜è®¤è®¾ç½®å¯èƒ½ä¼šå¯¹æœ€ç»ˆç”¨æˆ·çš„æ€§èƒ½äº§ç”Ÿä¸åˆ©å½±å“。"
-#: doc/classes/ProjectSettings.xml:1137
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
"Not available in GLES3 when [member rendering/batching/options/use_batching] "
"is off."
msgstr ""
+"在固定模å¼å’Œç¼©æ”¾æ¨¡å¼ä¹‹é—´è¿›è¡Œé€‰æ‹©ï¼Œå‰è€…ä¿ç•™äº†ä¸Žå›¾ç¨¿(artwork)相匹é…的角缩放。\n"
+"当[member rendering/batching/options/use_batching]关闭时,在GLES3中ä¸å¯ç”¨ã€‚"
-#: doc/classes/ProjectSettings.xml:1141
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -55013,14 +56595,13 @@ msgid ""
"NVIDIA GPUs at the cost of performance. This option affects GLES2 and GLES3 "
"rendering, but only on desktop platforms."
msgstr ""
-"一些NVIDIA GPU驱动有一个bug,对[code]draw_rect[/code]方法产生闪çƒé—®é¢˜ï¼Œç‰¹åˆ«æ˜¯"
-"在[TileMap]中使用时。详情请å‚考[url=https://github.com/godotengine/godot/"
+"一些NVIDIA GPU驱动有bug,对[code]draw_rect[/code]方法产生闪çƒé—®é¢˜ï¼Œç‰¹åˆ«æ˜¯åœ¨"
+"[TileMap]中使用时。详情å‚阅[url=https://github.com/godotengine/godot/"
"issues/9913]GitHub issue 9913[/url]。\n"
-"如果为[code]true[/code],该选项将为此类NVIDIA GPUå¯ç”¨ä¸€ä¸ª \"安全 \"的代ç è·¯"
-"径,但会牺牲性能。这个选项åªå½±å“GLES2渲染åŽç«¯ï¼Œè€Œä¸”åªå½±å“桌é¢å¹³å°ã€‚在使用"
-"VulkanåŽç«¯æ—¶ï¼Œå®ƒæ˜¯ä¸å¿…è¦çš„。"
+"如果[code]为true[/code],该选项将为此类NVIDIA GPUå¯ç”¨ \"安全\" 的代ç è·¯å¾„,但"
+"会牺牲性能。这个选项会影å“GLES2å’ŒGLES3的渲染,但åªåœ¨æ¡Œé¢å¹³å°ä¸Šã€‚"
-#: doc/classes/ProjectSettings.xml:1145
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -55034,8 +56615,16 @@ msgid ""
"with hardware skinning, [code]VERTEX[/code] is the position [i]before[/i] "
"skinning."
msgstr ""
+"如果 [code]true[/code],则在 CPU è€Œéž GPU 上执行 2D 蒙皮。这æä¾›äº†ä¸Žå„ç§ç¡¬ä»¶"
+"的更大兼容性,并且在æŸäº›æƒ…况下也å¯èƒ½æ›´å¿«ã€‚\n"
+"当å‰ä»…在 [member rendering/batching/options/use_batching] å¤„äºŽæ´»åŠ¨çŠ¶æ€æ—¶å¯"
+"用。\n"
+"[b]注æ„:[/b] 䏿”¯æŒæŠ—锯齿软件蒙皮多边形,将在没有抗锯齿的情况下渲染。\n"
+"[b]注æ„:[/b] 使用内置 [code]VERTEX[/code] 的自定义ç€è‰²å™¨åœ¨åº”用蒙皮 [i]之åŽ[/"
+"i]以 [code]VERTEX[/code] ä½ç½®è¿è¡Œ ,而使用硬件蒙皮,[code] VERTEX[/code] 是被"
+"应用蒙皮 [i]ä¹‹å‰ [/i] çš„ä½ç½®ã€‚"
-#: doc/classes/ProjectSettings.xml:1151
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -55043,14 +56632,19 @@ msgid ""
"Consider using the project setting [member rendering/batching/precision/"
"uv_contract] to prevent artifacts."
msgstr ""
+"如果 [code]true[/code],则在 2D 渲染中强制将顶点对é½åˆ°åƒç´ ã€‚å¯èƒ½æœ‰åŠ©äºŽæŸäº›åƒ"
+"素艺术风格。\n"
+"è¿™ç§æ•æ‰æ˜¯åœ¨é¡¶ç‚¹ç€è‰²å™¨ä¸­çš„ GPU 上执行的。\n"
+"考虑使用项目设置[member rendering/batching/precision/uv_contract] æ¥é˜²æ­¢å‡ºçް"
+"伪影。"
-#: doc/classes/ProjectSettings.xml:1156
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
-msgstr ""
+msgstr "å½“æ‰¹å¤„ç†æ‰“开时,这会定期打å°å¸§è¯Šæ–­æ—¥å¿—。请注æ„,这会é™ä½Žæ€§èƒ½ã€‚"
-#: doc/classes/ProjectSettings.xml:1159
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -55058,8 +56652,11 @@ msgid ""
"on each frame. This makes it easy to identify visual differences. "
"Performance will be degraded."
msgstr ""
+"[b] 实验性的。[/b] 用于针对旧渲染器的回归测试。如果打开并设置 "
+"[code]use_batching[/code],渲染器将在æ¯ä¸€å¸§ä¸Šäº¤æ›¿ä½¿ç”¨æ—§æ¸²æŸ“å™¨å’Œæ‰¹å¤„ç†æ¸²æŸ“器。"
+"这使得识别视觉差异å˜å¾—容易。性能会下é™ã€‚"
-#: doc/classes/ProjectSettings.xml:1162
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -55068,8 +56665,11 @@ msgid ""
"off. With large values the cost of overlap tests may lead to diminishing "
"returns."
msgstr ""
+"ç¯æœ‰å¯èƒ½é˜»æ­¢è¿žæŽ¥é¡¹ç›®ï¼Œå¹¶ç ´å批处ç†çš„许多性能优势。此设置å¯ç”¨äº†ä¸€äº›å¤æ‚的逻"
+"辑,如果它们的照明相似,并且é‡å æµ‹è¯•通过,则å…许加入项目。这å¯ä»¥æ˜¾ç€æé«˜æŸäº›"
+"游æˆçš„æ€§èƒ½ã€‚设置为 0 以关闭。对于较大的值,é‡å æµ‹è¯•çš„æˆæœ¬å¯èƒ½ä¼šå¯¼è‡´æ”¶ç›Šé€’å‡ã€‚"
-#: doc/classes/ProjectSettings.xml:1165
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -55080,8 +56680,12 @@ msgid ""
"to give the threshold. This can reduce fill rate requirements in scenes with "
"a lot of lighting."
msgstr ""
+"设置必须由剪切æ“作ä¿å­˜ä»¥æ¿€æ´»å…‰å‰ªåˆ‡çš„æ€»å±å¹•区域的比例(以åƒç´ ä¸ºå•ä½ï¼‰ã€‚è¿™å¯ä»¥"
+"防止部分物体被渲染到光照区域之外。较低的值会让剪切更强。值为 1 ä¸å‰ªåˆ‡ä»»ä½•项,"
+"值为 0 剪切æ¯ä¸ªé¡¹ã€‚使用该值的4的幂,以强调较低的范围,并乘以以åƒç´ ä¸ºå•ä½çš„æ€»"
+"å±å¹•é¢ç§¯ä»¥ç»™å‡ºé˜ˆå€¼ã€‚è¿™å¯ä»¥é™ä½Žå…·æœ‰å¤§é‡ç…§æ˜Žçš„åœºæ™¯ä¸­çš„å¡«å……çŽ‡è¦æ±‚。"
-#: doc/classes/ProjectSettings.xml:1168
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -55090,25 +56694,31 @@ msgid ""
"turn this off unless you can guarantee your target hardware will work with "
"this method."
msgstr ""
+"å¯ç”¨æ­¤è®¾ç½®ä½¿ç”¨ä¼ ç»Ÿæ–¹æ³•绘制仅包å«ä¸€ä¸ªçŸ©å½¢çš„æ‰¹æ¬¡ã€‚传统方法更快(大约快两å€ï¼‰ï¼Œ"
+"但å¯èƒ½ä¼šå¯¼è‡´æŸäº›ç³»ç»Ÿå‡ºçŽ°é—ªçƒã€‚ä¸ºäº†ç›´æŽ¥ä¸Žéžæ‰¹å¤„ç†æ¸²æŸ“器比较性能,您å¯ä»¥å°†å…¶è®¾"
+"置为 trueï¼Œä½†å»ºè®®å°†å…¶å…³é—­ï¼Œé™¤éžæ‚¨å¯ä»¥ä¿è¯æ‚¨çš„目标硬件å¯ä»¥ä½¿ç”¨æ­¤æ–¹æ³•。"
-#: doc/classes/ProjectSettings.xml:1171
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
+"打开和关闭 2D 批处ç†ã€‚批处ç†é€šè¿‡å‡å°‘图形 API ç»˜åˆ¶è°ƒç”¨çš„æ•°é‡æ¥æé«˜æ€§èƒ½ã€‚"
-#: doc/classes/ProjectSettings.xml:1174
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
-msgstr ""
+msgstr "在编辑器中打开 2D 批处ç†ã€‚"
-#: doc/classes/ProjectSettings.xml:1177
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
+"为批处ç†é¡¶ç‚¹ä¿ç•™çš„缓冲区大å°ã€‚æ›´å¤§çš„å°ºå¯¸æ”¯æŒæ›´å¤§çš„æ‰¹æ¬¡ï¼Œä½†æ‰€ç”¨å†…存的收益递"
+"å‡ã€‚这应该åªä¼šå¯¹æ€§èƒ½äº§ç”Ÿå¾ˆå°çš„å½±å“。"
-#: doc/classes/ProjectSettings.xml:1180
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -55116,16 +56726,22 @@ msgid ""
"code] above which vertices will be translated to colored format. A value of "
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
+"在顶点格å¼ä¸­åŒ…å«é¢œè‰²æ˜¯æœ‰ä»£ä»·çš„,但是,ä¸åŒ…å«é¢œè‰²ä¼šé˜»æ­¢è·¨é¢œè‰²æ›´æ”¹è¿›è¡Œæ‰¹å¤„ç†ã€‚"
+"此阈值会确定 [code] 顶点颜色更改次数 / 顶点总数 [/code] 的比率,高于该值的顶"
+"点将被转æ¢ä¸ºå½©è‰²æ ¼å¼ã€‚值 0 将始终使用彩色顶点,1 永远ä¸ä¼šä½¿ç”¨å½©è‰²é¡¶ç‚¹ã€‚"
-#: doc/classes/ProjectSettings.xml:1183
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
"however for each item lookahead, so there is a trade off, with diminishing "
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
+"在æŸäº›æƒ…况下,批处ç†ç¨‹åºå¯ä»¥é‡æ–°æŽ’åºé¡¹ç›®ä»¥ä¾¿æ›´å¥½åœ°åŠ å…¥å®ƒä»¬ã€‚è¿™å¯èƒ½ä¼šæœ‰æ›´å¥½çš„"
+"性能。然而,æ¯ä¸ªé¡¹çš„预先查看(lookahead)都需è¦é‡å æµ‹è¯•,但收益递å‡ï¼Œå› æ­¤éœ€è¦æƒ"
+"衡。如果您没有得到任何好处,将此设置为 0 将关闭它。"
-#: doc/classes/ProjectSettings.xml:1186
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -55133,8 +56749,11 @@ msgid ""
"this has diminishing returns and has a runtime cost so a small value is "
"recommended."
msgstr ""
+"设置命令数以预先查看(lookahead)ï¼Œä»¥ç¡®å®šæ˜¯å¦æ‰¹é‡æ¸²æŸ“项目。值为 1 å¯ä»¥åŠ å…¥ç”±å•"
+"个命令组æˆçš„项目,0 关闭连接。ç†è®ºä¸Šï¼Œè¾ƒé«˜çš„值更有å¯èƒ½åŠ å…¥ï¼Œä½†è¿™ä¼šé™ä½Žå›žæŠ¥ï¼Œ"
+"并且具有è¿è¡Œæˆæœ¬ï¼Œå› æ­¤å»ºè®®ä½¿ç”¨å°‘é‡å€¼ã€‚"
-#: doc/classes/ProjectSettings.xml:1189
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -55143,53 +56762,60 @@ msgid ""
"coordinates used. Note that this can result in a slight squashing of border "
"texels."
msgstr ""
+"在æŸäº›å¹³å°ï¼ˆå°¤å…¶æ˜¯ç§»åЍ平å°ï¼‰ä¸Šï¼Œç€è‰²å™¨ä¸­çš„精度问题å¯èƒ½ä¼šå¯¼è‡´è¯»å– 1 texel 超出"
+"边界,尤其是在缩放 rect 的情况下。这尤其会导致瓷砖地图中瓷砖周围的边界伪"
+"影。\n"
+"此调整通过对使用的 UV åæ ‡è¿›è¡Œå°å¹…收缩æ¥å¯¹æ­¤è¿›è¡Œæ ¡æ­£ã€‚请注æ„,这å¯èƒ½ä¼šå¯¼è‡´è¾¹"
+"界纹ç†çš„轻微挤压。"
-#: doc/classes/ProjectSettings.xml:1193
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
"both ranged from 0.0 to 1.0.\n"
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
+"UV收缩é‡ã€‚这个数字除以1000000,是总纹ç†å°ºå¯¸çš„一个比例,宽度和高度都在0.0到1.0"
+"之间。\n"
+"除éžä¸ºäº†çº æ­£ç‰¹å®šç¡¬ä»¶ä¸Šçš„问题,å¦åˆ™è¯·ä½¿ç”¨é»˜è®¤å€¼ã€‚"
-#: doc/classes/ProjectSettings.xml:1197
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
-msgstr ""
+msgstr "使用 [constant BakedLightmap.BAKE_QUALITY_HIGH] 时采集的光样本é‡ã€‚"
-#: doc/classes/ProjectSettings.xml:1200
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
-msgstr ""
+msgstr "使用 [constant BakedLightmap.BAKE_QUALITY_LOW] 时采集的光样本é‡ã€‚"
-#: doc/classes/ProjectSettings.xml:1203
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
-msgstr ""
+msgstr "使用 [constant BakedLightmap.BAKE_QUALITY_MEDIUM] 时采集的光样本é‡ã€‚"
-#: doc/classes/ProjectSettings.xml:1206
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
-msgstr ""
+msgstr "使用 [constant BakedLightmap.BAKE_QUALITY_ULTRA] 时采集的光样本é‡ã€‚"
-#: doc/classes/ProjectSettings.xml:1209
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
"Environment.background_color] in particular. To change this default color "
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-"é»˜è®¤èƒŒæ™¯é€æ˜Žé¢œè‰²ã€‚使用[Environment]å¯è¦†ç›–æ¯ä¸ª[Viewport]。具体请å‚阅[member "
-"Environment.background_mode]å’Œ[member Environment.background_color]。è¦ä»¥ä»£ç "
-"æ–¹å¼æ›´æ”¹æ­¤é»˜è®¤é¢œè‰²ï¼Œè¯·ä½¿ç”¨use [method RenderingServer."
-"set_default_clear_color]。"
+"é»˜è®¤èƒŒæ™¯é€æ˜Žé¢œè‰²ã€‚使用 [Environment] å¯è¦†ç›–æ¯ä¸ª[Viewport]。具体请å‚阅 "
+"[member Environment.background_mode] 和 [member Environment."
+"background_color]。è¦ä»¥ä»£ç æ–¹å¼æ›´æ”¹æ­¤é»˜è®¤é¢œè‰²ï¼Œè¯·ä½¿ç”¨ [method "
+"RenderingServer.set_default_clear_color]。"
-#: doc/classes/ProjectSettings.xml:1212
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -55202,54 +56828,73 @@ msgstr ""
"境,都会在场景加载时加载默认环境。如果ä¸ä¾èµ–默认环境,最好删除"
"[code]default_env.tres[/code],或者在这里指定ä¸åŒçš„默认环境。"
-#: doc/classes/ProjectSettings.xml:1215
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
+"使用åŠç²¾åº¦æµ®ç‚¹é¡¶ç‚¹åŽ‹ç¼©å¯èƒ½ä¼šåœ¨æŸäº›å¹³å°ä¸Šäº§ç”Ÿæ¸²æŸ“错误(尤其是iOS)。这些在粒å­"
+"中尤为明显。ç¦ç”¨åŠç²¾åº¦æµ®ç‚¹å¯èƒ½ä¼šè§£å†³è¿™äº›é—®é¢˜ã€‚"
-#: doc/classes/ProjectSettings.xml:1218
+#: doc/classes/ProjectSettings.xml:1221
msgid ""
-"If [code]true[/code] and available on the target device, enables high "
-"floating point precision for all shader computations in GLES2.\n"
+"iOS specific override for [member rendering/gles2/compatibility/"
+"disable_half_float], due to poor support for half-float vertex compression "
+"on many devices."
+msgstr ""
+"对[member rendering/gles2/compatibility/disable_half_float]çš„iOS特定é‡å†™ï¼Œå› "
+"为在许多设备上对åŠç²¾åº¦æµ®ç‚¹é¡¶ç‚¹åŽ‹ç¼©çš„æ”¯æŒä¸ä½³ã€‚"
+
+#: doc/classes/ProjectSettings.xml:1224
+msgid ""
+"If [code]true[/code] and available on the target Android device, enables "
+"high floating point precision for all shader computations in GLES2.\n"
"[b]Warning:[/b] High floating point precision can be extremely slow on older "
"devices and is often not available at all. Use with caution."
msgstr ""
+"如果 [code]true[/code] 并且在目标 Android 设备上å¯ç”¨ï¼Œåˆ™ä¸º GLES2 中的所有ç€è‰²"
+"器计算å¯ç”¨é«˜æµ®ç‚¹ç²¾åº¦ã€‚\n"
+"[b]警告:[/b] 高浮点精度在旧设备上å¯èƒ½éžå¸¸æ…¢ï¼Œè€Œä¸”通常根本ä¸å¯ç”¨ã€‚谨慎使用。"
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
-msgstr ""
+msgstr "æ··åˆå½¢çŠ¶çš„æœ€å¤§ç¼“å†²åŒºå¤§å°ã€‚任何比这更大的混åˆå½¢çŠ¶éƒ½ä¸èµ·ä½œç”¨ã€‚"
-#: doc/classes/ProjectSettings.xml:1225
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
-msgstr ""
+msgstr "绘制多边形的最大缓冲区大å°ã€‚任何大于此的多边形都ä¸èµ·ä½œç”¨ã€‚"
-#: doc/classes/ProjectSettings.xml:1228
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
-msgstr ""
+msgstr "绘制多边形的最大索引缓冲区大å°ã€‚任何大于此的多边形都ä¸èµ·ä½œç”¨ã€‚"
-#: doc/classes/ProjectSettings.xml:1231
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
+"用于绘制直接对象(ImmediateGeometry 节点)的最大缓冲区大å°ã€‚使用超过此大å°çš„"
+"节点将无法工作。"
-#: doc/classes/ProjectSettings.xml:1234
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
"(especially mobile) only support 102. Setting this low will slightly reduce "
"memory usage and may decrease shader compile times."
msgstr ""
+"æ¯ä¸ªå¯¹è±¡å¯æ¸²æŸ“的最大ç¯å…‰æ•°ã€‚这进一步å—到硬件支æŒçš„é™åˆ¶ã€‚å¤§å¤šæ•°è®¾å¤‡ä»…æ”¯æŒ 409 "
+"个ç¯å…‰ï¼Œè€Œè®¸å¤šè®¾å¤‡ï¼ˆå°¤å…¶æ˜¯ç§»åŠ¨è®¾å¤‡ï¼‰ä»…æ”¯æŒ 102 ç¯ã€‚将此设置为低会略微å‡å°‘内存"
+"使用并å¯èƒ½å‡å°‘ç€è‰²å™¨ç¼–译时间。"
-#: doc/classes/ProjectSettings.xml:1237
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -55258,8 +56903,12 @@ msgid ""
"web. For most uses, the default value is suitable, but consider lowering as "
"much as possible on web export."
msgstr ""
+"䏀叧䏭坿¸²æŸ“元素的最大数é‡ã€‚如果æ¯å¸§å¯è§æ›´å¤šå…ƒç´ ï¼Œåˆ™ä¸ä¼šç»˜åˆ¶å®ƒä»¬ã€‚请记ä½ï¼Œå…ƒ"
+"素是指网格表é¢è€Œä¸æ˜¯ç½‘格本身。将此值设置得较低会略微å‡å°‘内存使用é‡å¹¶å¯èƒ½å‡å°‘"
+"ç€è‰²å™¨ç¼–译时间,尤其是在 Web 上。对于大多数用途,默认值是åˆé€‚的,但考虑在 "
+"Web 导出时尽å¯èƒ½é™ä½Žã€‚"
-#: doc/classes/ProjectSettings.xml:1240
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -55267,8 +56916,11 @@ msgid ""
"uses, the default value is suitable, but consider lowering as much as "
"possible on web export."
msgstr ""
+"䏀叧䏭坿¸²æŸ“的最大ç¯å…‰æ•°ã€‚如果使用的ç¯å…‰æ•°è¶…过此数é‡ï¼Œåˆ™å®ƒä»¬å°†è¢«å¿½ç•¥ã€‚将此值"
+"设置得较低会略微å‡å°‘内存使用é‡å¹¶å¯èƒ½å‡å°‘ç€è‰²å™¨ç¼–译时间,尤其是在 Web 上。对于"
+"大多数用途,默认值是åˆé€‚的,但考虑在 Web 导出时尽å¯èƒ½é™ä½Žã€‚"
-#: doc/classes/ProjectSettings.xml:1243
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -55276,25 +56928,28 @@ msgid ""
"particularly on web. For most uses, the default value is suitable, but "
"consider lowering as much as possible on web export."
msgstr ""
+"䏀叧䏭坿¸²æŸ“的最大å射探针数。如果使用的å射探针数超过此数é‡ï¼Œåˆ™å®ƒä»¬å°†è¢«å¿½"
+"略。将此值设置得较低会略微å‡å°‘内存使用é‡å¹¶å¯èƒ½å‡å°‘ç€è‰²å™¨ç¼–译时间,尤其是在 "
+"Web 上。对于大多数用途,默认值是åˆé€‚的,但考虑在 Web 导出时尽å¯èƒ½é™ä½Žã€‚"
-#: doc/classes/ProjectSettings.xml:1246
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
+"ç€è‰²å™¨æœ‰ä¸€ä¸ªä¸æ–­å¢žåŠ çš„æ—¶é—´å˜é‡ã€‚在æŸäº›æ—¶å€™ï¼Œå®ƒéœ€è¦å›žæ»šåˆ°é›¶ä»¥é¿å…ç€è‰²å™¨åŠ¨ç”»çš„"
+"精度错误。此设置用于设定时间(以秒为å•ä½ï¼‰ã€‚"
-#: doc/classes/ProjectSettings.xml:1249
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-"如果[code]true[/code],纹ç†å¯¼å…¥å™¨å°†ä½¿ç”¨S3纹ç†åŽ‹ç¼©ç®—æ³•å¯¼å…¥VRAM压缩的纹ç†ã€‚è¿™ç§"
-"算法åªåœ¨æ¡Œé¢å¹³å°å’Œæ¸¸æˆæœºä¸Šæ”¯æŒã€‚"
+"如果[code]true[/code],纹ç†å¯¼å…¥å™¨å°†ä½¿ç”¨PNGæ ¼å¼å¯¼å…¥æ— æŸçº¹ç†ã€‚å¦åˆ™ï¼Œå°†é»˜è®¤ä½¿ç”¨"
+"WebP。"
-#: doc/classes/ProjectSettings.xml:1252
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -55302,19 +56957,21 @@ msgid ""
"Note that compression levels above 6 are very slow and offer very little "
"savings."
msgstr ""
-"Zlib的默认压缩级别。影å“压缩的场景和资æºã€‚较高的级别会以压缩速度为代价导致文"
-"ä»¶å˜å°ã€‚解压缩速度大多ä¸å—压缩级别的影å“。[code]-1[/code]使用默认的gzip压缩级"
-"别,该级别与[code]6[/code]相åŒï¼Œä½†ç”±äºŽåº•层zlib更新,未æ¥å¯èƒ½ä¼šå‘生å˜åŒ–。"
+"æ— æŸWebP的默认压缩级别。更高的级别会产生更å°çš„æ–‡ä»¶ï¼Œä½†ä¼šç‰ºç‰²åŽ‹ç¼©é€Ÿåº¦ã€‚è§£åŽ‹é€Ÿ"
+"度大多ä¸å—压缩级别的影å“。支æŒçš„值是0到9。请注æ„,高于6的压缩级别是éžå¸¸æ…¢çš„,"
+"而且节çœçš„å ç”¨éžå¸¸å°‘。"
-#: doc/classes/ProjectSettings.xml:1255
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
"attributes data. Recommended to be enabled if targeting mobile devices. "
"Requires manual reimport of meshes after toggling."
msgstr ""
+"导入时,网格顶点数æ®å°†åœ¨å•个顶点缓冲区内分æˆä¸¤ä¸ªæµï¼Œä¸€ä¸ªç”¨äºŽä½ç½®æ•°æ®ï¼Œå¦ä¸€ä¸ª"
+"用于交错属性数æ®ã€‚如果用于移动设备,建议å¯ç”¨ã€‚切æ¢åŽéœ€è¦æ‰‹åЍ釿–°å¯¼å…¥ç½‘格。"
-#: doc/classes/ProjectSettings.xml:1258
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -55322,8 +56979,11 @@ msgid ""
"choose from these the most relevant based on a screen space metric, in order "
"to give the best overall performance."
msgstr ""
+"确定将在任何时候使用的çƒä½“鮿Œ¡å™¨çš„æœ€å¤§æ•°é‡ã€‚\n"
+"尽管一个场景中å¯ä»¥æœ‰è®¸å¤šé®æŒ¡ç‰©ï¼Œä½†ç³»ç»Ÿä¼šæ ¹æ®å±å¹•空间度é‡ä»Žè¿™äº›é®æŒ¡ç‰©ä¸­é€‰æ‹©æœ€"
+"相关的æ¯ä¸€å¸§ï¼Œä»¥æä¾›æœ€ä½³çš„æ•´ä½“性能。"
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -55332,24 +56992,30 @@ msgid ""
"It will flip named portal meshes (i.e. [code]-portal[/code]) on the initial "
"convertion to [Portal] nodes."
msgstr ""
+"默认的惯例是,portal的法线从æºç©ºé—´å‘外。\n"
+"å¦‚æžœä½ åœ¨å»ºé€ å…³å¡æ—¶ä¸å°å¿ƒå°†portalæœå‘了错误的方å‘,这个设置å¯ä»¥è§£å†³è¿™ä¸ªé—®"
+"题。\n"
+"它将在åˆå§‹è½¬æ¢ä¸º[Portal]节点时翻转命åçš„portal网格(å³[code]-portal[/"
+"code])。"
-#: doc/classes/ProjectSettings.xml:1267
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
+"æ˜¾ç¤ºè½¬æ¢æ—¥å¿—。\n"
+"[b]注æ„:[/b] 这将在导出时自动ç¦ç”¨ã€‚"
-#: doc/classes/ProjectSettings.xml:1271
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-"如果[code]true[/code],图å—地图的碰撞将被当作è¿åЍ体处ç†ã€‚如果[code]false[/"
-"code]ï¼Œç¢°æ’žå°†è¢«å½“ä½œé™æ€ä½“æ¥å¤„ç†ã€‚"
+"如果 [code]true[/code],游æˆå›žè°ƒå°†ä½œä¸º [code] ä¿¡å· [/code] å‘é€ã€‚如果"
+"[code]false[/code],它们将作为[code]通知[/code]å‘é€ã€‚"
-#: doc/classes/ProjectSettings.xml:1274
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -55357,14 +57023,19 @@ msgid ""
"efficient, but can be switched off in case you wish to use empty [Spatial]s "
"for markers or some other purpose."
msgstr ""
+"如果å¯ç”¨ï¼Œåœ¨åˆå¹¶ç½‘格时,系统还将å°è¯•删除ä¸å†æœ‰ä»»ä½•å­é¡¹çš„ [Spatial] 节点。\n"
+"å‡å°‘场景树中 [Node] 的数é‡å¯ä»¥æé«˜é历效率,但如果您希望将空的 [Spatial] 用于"
+"标记或其他目的,则å¯ä»¥å°†å…¶å…³é—­ã€‚"
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
+"在 PVS ç”ŸæˆæœŸé—´æ˜¾ç¤ºæ—¥å¿—。\n"
+"[b]注æ„:[/b] 这将在导出时自动ç¦ç”¨ã€‚"
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -55373,31 +57044,37 @@ msgid ""
"when it is set to [code]false[/code], i.e. there are problems with the "
"default method."
msgstr ""
+"ä½¿ç”¨ç”Ÿæˆ PVS(潜在å¯è§é›†ï¼‰æ•°æ®çš„简化方法。当多个portal连接相邻空间时,结果å¯"
+"能ä¸å‡†ç¡®ã€‚\n"
+"[b]注æ„:[/b]ä¸€èˆ¬åªæœ‰åœ¨è®¾ç½®ä¸º[code]false[/code]æ—¶é‡åˆ°bug,å³é»˜è®¤æ–¹æ³•有问题"
+"时,æ‰åº”该使用该选项。"
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
+"如果 [code]true[/code],则分é…具有高动æ€èŒƒå›´ï¼ˆHDR)的主帧缓冲区。高动æ€èŒƒå›´å…"
+"许使用大于 1 的 [Color] 值。\n"
+"[b]注æ„:[/b] 仅在 GLES3 åŽç«¯å¯ç”¨ã€‚"
-#: doc/classes/ProjectSettings.xml:1290
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-"由于性能或驱动支æŒé—®é¢˜ï¼Œåœ¨ç§»åŠ¨è®¾å¤‡ä¸Šå°†å¯¹ [member rendering/quality/"
-"shadow_atlas/size]ä»¥ä½Žé…æ•°å€¼è¦†ç›–。"
+"由于性能问题或驱动支æŒï¼Œç§»åŠ¨è®¾å¤‡ä¸Šçš„ [member rendering/quality/depth/hdr] çš„"
+"低端覆盖。"
-#: doc/classes/ProjectSettings.xml:1293
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
"对一些GPU供应商(通常是移动设备)ç¦ç”¨æ·±åº¦é¢„处ç†ï¼Œå› ä¸ºä»–们的架构已ç»åšäº†è¿™ä¸ªã€‚"
-#: doc/classes/ProjectSettings.xml:1296
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
@@ -55406,7 +57083,7 @@ msgstr ""
"如果 [code]true[/code],则在渲染æè´¨ä¹‹å‰æ‰§è¡Œå…ˆå‰çš„æ·±åº¦ä¼ é€’ã€‚å½“ä½¿ç”¨å¤æ‚çš„ææ–™"
"和照明时,这会æé«˜é«˜é€æ”¯åœºæ™¯çš„æ€§èƒ½ã€‚"
-#: doc/classes/ProjectSettings.xml:1299
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
@@ -55415,7 +57092,7 @@ msgstr ""
"æ–¹å‘æ€§é˜´å½±çš„大å°ï¼Œä»¥åƒç´ ä¸ºå•ä½ã€‚更高的值会导致更清晰的阴影,但会以性能为代"
"价。该值将被四èˆäº”入到最接近的2次方。"
-#: doc/classes/ProjectSettings.xml:1302
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
@@ -55423,8 +57100,7 @@ msgstr ""
"由于性能和驱动支æŒçš„问题,在移动设备上会对[member rendering/quality/"
"directional_shadow/size] ä»¥ä½Žé…æ•°å€¼è¦†ç›–。"
-#: doc/classes/ProjectSettings.xml:1305
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -55433,14 +57109,13 @@ msgid ""
"support GLES3 and falls back to GLES2. In such cases, this property is not "
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-"è¦ä½¿ç”¨çš„视频驱动(\"GLES2 \"或 \"Vulkan\")。\n"
-"[b]注æ„:[/b] 使用中的åŽç«¯å¯ä»¥åœ¨è¿è¡Œæ—¶é€šè¿‡[code]--rendering-driver[/code]命令"
-"è¡Œå‚æ•°æ¥è¦†ç›–。\n"
-"[b]修订说明:[/b] 在DisplayServer分离åŽä¸å†æœ‰æ•ˆã€‚\n"
-"åœ¨è¿™ç§æƒ…况下,这个属性ä¸ä¼šè¢«æ›´æ–°ï¼Œæ‰€ä»¥ä½¿ç”¨[code]OS.get_current_video_driver[/"
-"code]æ¥åœ¨è¿è¡Œæ—¶æŸ¥è¯¢å®ƒã€‚"
+"è¦ä½¿ç”¨çš„视频驱动(\"GLES2\"或 \"GLES3\")。\n"
+"[b]注æ„:[/b]使用中的åŽç«¯å¯ä»¥åœ¨è¿è¡Œæ—¶é€šè¿‡[code]--video-driver[/code]命令行å‚"
+"æ•°è€Œè¦†ç›–ï¼Œå¦‚æžœç›®æ ‡ç³»ç»Ÿä¸æ”¯æŒGLES3,è¦é€€å›žåˆ°GLES2,则å¯ä»¥é€šè¿‡[member "
+"rendering/quality/driver/fallback_to_gles2]é€‰é¡¹ã€‚åœ¨è¿™ç§æƒ…况下,这个属性ä¸ä¼šè¢«"
+"更新,所以在è¿è¡Œæ—¶ä½¿ç”¨[method OS.get_current_video_driver]æ¥æŸ¥è¯¢ã€‚"
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -55451,28 +57126,35 @@ msgid ""
"VRAM-compressed textures will be exported on Android and iOS, increasing the "
"data pack's size."
msgstr ""
+"如果 [code]true[/code]ï¼Œä¸”ä¸æ”¯æŒ GLES3 驱动程åºï¼Œåˆ™å…许回退到 GLES2 驱动程"
+"åºã€‚\n"
+"[b]注æ„:[/b] 两个显å¡é©±åЍ䏿˜¯äº’相替代的,所以为 GLES3 设计的游æˆåœ¨å›žé€€åˆ° "
+"GLES2 æ—¶å¯èƒ½æ— æ³•正常è¿è¡Œã€‚特别是,GLES3 åŽç«¯çš„æŸäº›åŠŸèƒ½åœ¨ GLES2 中ä¸å¯ç”¨ã€‚å¯ç”¨"
+"此设置还æ„å‘³ç€ ETC å’Œ ETC2 VRAM 压缩纹ç†å°†åœ¨ Android å’Œ iOS 上导出,从而增加"
+"æ•°æ®åŒ…的大å°ã€‚"
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
"angles, at the cost of performance. Only power-of-two values are valid (2, "
"4, 8, 16)."
msgstr ""
+"用于å¯ç”¨å„å‘异性的纹ç†çš„æœ€å¤§å„å‘异性过滤器级别。从倾斜角度查看时,较高的值将"
+"导致更清晰的纹ç†ï¼Œä½†ä¼šç‰ºç‰²æ€§èƒ½ã€‚åªæœ‰äºŒçš„æŒ‡æ•°å€çš„值(如2ã€4ã€8ã€16)是有效。"
-#: doc/classes/ProjectSettings.xml:1316
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
"but can be significantly slower on some hardware.\n"
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-"设置è¦ä½¿ç”¨çš„MSAA样本数(2çš„n次幂)。MSAA用于å‡å°‘多边形边缘的锯齿。较高的MSAA"
-"值å¯ä»¥ä½¿è¾¹ç¼˜æ›´å¹³æ»‘,但在æŸäº›ç¡¬ä»¶ä¸Šä¼šæ˜Žæ˜¾å˜æ…¢ã€‚\n"
+"设置è¦ä½¿ç”¨çš„MSAA样本数。MSAA用æ¥å‡å°‘多边形边缘的混å ã€‚较高的MSAA值å¯ä»¥ä½¿è¾¹ç¼˜"
+"更平滑,但在æŸäº›ç¡¬ä»¶ä¸Šä¼šæ˜Žæ˜¾å˜æ…¢ã€‚\n"
"[b]注æ„:[/b] MSAA在使用GLES2åŽç«¯çš„HTML5导出中ä¸å¯ç”¨ã€‚"
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -55480,8 +57162,11 @@ msgid ""
"Values around [code]0.5[/code] generally give the best results. See also "
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
+"如果设置为大于 [code]0.0[/code] 的值,对比度自适应é”化将应用于 3D 视å£ã€‚这具"
+"æœ‰è¾ƒä½Žçš„æ€§èƒ½æˆæœ¬ï¼Œå¯ç”¨äºŽæ¢å¤ä½¿ç”¨ FXAA æ—¶æŸå¤±çš„一些é”度。 [code]0.5[/code] 附"
+"近的值通常会给出最好的结果。å¦è§[member rendering/quality/filters/use_fxaa]。"
-#: doc/classes/ProjectSettings.xml:1323
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -55494,9 +57179,15 @@ msgid ""
"mobile platforms. Due to this, it is recommended to leave this option "
"disabled when targeting mobile platforms."
msgstr ""
+"如果 [code]true[/code],则使用快速åŽå¤„ç†è¿‡æ»¤å™¨ä½¿æ¡å¸¦æ˜Žæ˜¾ä¸é‚£ä¹ˆæ˜Žæ˜¾ã€‚在æŸäº›æƒ…"
+"况下,去带å¯èƒ½ä¼šå¼•å…¥ç¨å¾®æ˜Žæ˜¾çš„æŠ–动模å¼ã€‚å»ºè®®ä»…åœ¨å®žé™…éœ€è¦æ—¶å¯ç”¨ debanding,因"
+"为抖动模å¼ä¼šä½¿æ— æŸåŽ‹ç¼©çš„å±å¹•截图更大。\n"
+"[b]注æ„:[/b] 仅在 GLES3 åŽç«¯å¯ç”¨ã€‚ [member rendering/quality/depth/hdr] 也必"
+"须为 [code]true[/code] æ‰èƒ½ä½¿åŽ»è‰²å¸¦æœ‰æ•ˆã€‚\n"
+"[b]注æ„:[/b] 已知在移动平å°ä¸Šçš„åŽ»è‰²å¸¦å­˜åœ¨ç ´åæ¸²æŸ“的问题。因此,建议在用于移"
+"åŠ¨å¹³å°æ—¶ç¦ç”¨æ­¤é€‰é¡¹ã€‚"
-#: doc/classes/ProjectSettings.xml:1328
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -55505,11 +57196,12 @@ msgid ""
"recovered by enabling contrast-adaptive sharpening (see [member rendering/"
"quality/filters/sharpen_intensity])."
msgstr ""
-"使用快速的近似抗锯齿。FXAAæ˜¯ä¸€ç§æµè¡Œçš„å±å¹•空间抗锯齿方法,它的速度很快,但会"
-"使图åƒçœ‹èµ·æ¥å¾ˆæ¨¡ç³Šï¼Œç‰¹åˆ«æ˜¯åœ¨è¾ƒä½Žçš„分辨率。在1440på’Œ4K等大分辨率下,ä»ç„¶å¯ä»¥ç›¸"
-"对良好地工作。"
+"在根视窗中å¯ç”¨FXAA。FXAAæ˜¯ä¸€ç§æµè¡Œçš„å±å¹•空间抗锯齿方法,它速度快,但会使图åƒ"
+"看起æ¥å¾ˆæ¨¡ç³Šï¼Œç‰¹åˆ«æ˜¯åœ¨ä½Žåˆ†è¾¨çŽ‡ä¸‹ã€‚åœ¨1440på’Œ4K这样的大分辨率下,å¯ä»¥å·¥ä½œå¾—比较"
+"好。一些æŸå¤±çš„é”度å¯ä»¥é€šè¿‡å¯ç”¨å¯¹æ¯”度适应性é”åŒ–æ¥æ¢å¤ï¼Œå‚阅[member rendering/"
+"quality/filters/sharpen_intensity]。"
-#: doc/classes/ProjectSettings.xml:1331
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -55522,7 +57214,7 @@ msgstr ""
"å¯èƒ½ä¼šæé«˜ç§»åŠ¨è®¾å¤‡çš„æ€§èƒ½ã€‚å¦‚æžœ [code]false[/code],则使用线性 mipmap 过滤(也"
"称为“三线性过滤â€ï¼‰ã€‚"
-#: doc/classes/ProjectSettings.xml:1334
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -55536,7 +57228,7 @@ msgstr ""
"[code]SCREEN_TEXTURE[/code]å’Œ[code]DEPTH_TEXTURE[/code]å°†ä¸èƒ½åœ¨ç€è‰²å™¨ä¸­ä½¿ç”¨ï¼Œ"
"而åŽå¤„ç†æ•ˆæžœå°†ä¸èƒ½åœ¨[Environment]中使用。"
-#: doc/classes/ProjectSettings.xml:1337
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
@@ -55545,53 +57237,58 @@ msgstr ""
"由于性能或驱动支æŒé—®é¢˜ï¼Œåœ¨ç§»åŠ¨è®¾å¤‡ä¸Šå¯¹[member rendering/quality/"
"intended_usage/framebuffer_allocation]ä»¥ä½Žé…æ•°å€¼è¦†ç›–。"
-#: doc/classes/ProjectSettings.xml:1340
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
+"在烘焙光照贴图中å¯ç”¨åŒä¸‰æ¬¡é‡‡æ ·ã€‚这会导致更平滑的照明,但会å ç”¨æ›´å¤šå¸¦å®½ã€‚在 "
+"GLES2 ä¸Šï¼Œåªæœ‰åœ¨é‡æ–°å¯åŠ¨åº”ç”¨ç¨‹åºæ—¶æ‰ä¼šåº”用对此设置的更改。"
-#: doc/classes/ProjectSettings.xml:1343
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-"由于性能问题或驱动支æŒï¼Œåœ¨ç§»åŠ¨è®¾å¤‡ä¸Šå°†å¯¹[member rendering/quality/shading/"
-"force_vertex_shading]ä»¥ä½Žé…æ•°å€¼è¦†ç›–。"
+"在移动设备上对[member rendering/quality/lightmapping/use_bicubic_sampling]进"
+"行低端覆盖,以å‡å°‘带宽使用。"
-#: doc/classes/ProjectSettings.xml:1346
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
+"å射探针使用的图集的大å°ã€‚较大的尺寸å¯ä»¥å¸¦æ¥æ›´é«˜çš„视觉质é‡ï¼Œè€Œè¾ƒå°çš„尺寸会更"
+"å¿«å¹¶å ç”¨æ›´å°‘的内存。"
-#: doc/classes/ProjectSettings.xml:1349
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
+"用于å射图集的细分数。较高的数字会é™ä½Žæ¯ä¸ªå›¾é›†çš„è´¨é‡ï¼Œä½†å…许您使用更多细分。"
-#: doc/classes/ProjectSettings.xml:1352
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
+"如果 [code]true[/code]ï¼Œåˆ™ä½¿ç”¨å¤§é‡æ ·æœ¬æ¥åˆ›å»ºå射探针和全景背景(天空)的模糊"
+"å˜ä½“。这些模糊的å˜ä½“å¯ä»¥è¢«ç²—ç³™çš„ææ–™ä½¿ç”¨ã€‚"
-#: doc/classes/ProjectSettings.xml:1355
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-"ç”±äºŽæ€§èƒ½é—®é¢˜æˆ–é©±åŠ¨ç¨‹åºæ”¯æŒï¼Œç§»åŠ¨è®¾å¤‡ä¸Šå°†å¯¹ [member rendering/quality/"
-"reflections/ggx_samples] 以低性能数值覆盖。"
+"由于性能问题或驱动器支æŒï¼Œåœ¨ç§»åŠ¨è®¾å¤‡ä¸Šå¯¹[member rendering/quality/"
+"reflections/high_quality_ggx]进行低端覆盖。"
-#: doc/classes/ProjectSettings.xml:1358
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -55601,19 +57298,22 @@ msgid ""
"[b]Note:[/b] Low and mid range hardware do not support complex irradiance "
"maps well and may crash if this is set too high."
msgstr ""
+"é™åˆ¶è¾ç…§åº¦è´´å›¾çš„大å°ï¼Œé€šå¸¸ç”± [member Sky.radiance_size] 确定。与[member "
+"rendering/quality/reflections/high_quality_ggx] 类似,更大的尺寸会产生更高质"
+"é‡çš„è¾ç…§åº¦è´´å›¾ã€‚使用高频 HDRI 贴图时使用较高的值,å¦åˆ™è¯·å°½å¯èƒ½é™ä½Žè¯¥å€¼ã€‚\n"
+"[b]注æ„:[/b] 中低档硬件ä¸èƒ½å¾ˆå¥½åœ°æ”¯æŒå¤æ‚çš„è¾ç…§åº¦è´´å›¾ï¼Œå¦‚果设置太高å¯èƒ½ä¼šå´©"
+"溃。"
-#: doc/classes/ProjectSettings.xml:1362
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-"如果 [code]true[/code],则对åå°„æŽ¢é’ˆå’Œå…¨æ™¯èƒŒæ™¯ï¼ˆå¤©ç©ºï¼‰ä½¿ç”¨çº¹ç†æ•°ç»„è€Œä¸æ˜¯ "
-"mipmap。这å‡å°‘了åå°„ä¸Šçš„æŠ–åŠ¨å™ªå£°å’Œæ”¾å¤§ä¼ªå½±ï¼Œä½†è®¡ç®—é€Ÿåº¦è¦æ…¢å¾—多,并且使用 "
-"[member rendering/quality/reflections/roughness_layers]æ—¶è¦èŠ±è´¹æ›´å¤šçš„å†…å­˜ã€‚"
+"如果[code]true[/code],对åå°„æŽ¢é’ˆå’Œå…¨æ™¯èƒŒæ™¯ï¼ˆå¤©ç©ºï¼‰ä½¿ç”¨çº¹ç†æ•°ç»„è€Œä¸æ˜¯"
+"mipmaps。这å¯ä»¥å‡å°‘åå°„çš„æŠ–åŠ¨å™ªå£°ï¼Œä½†è¦æ¶ˆè€—更多的性能和内存。"
-#: doc/classes/ProjectSettings.xml:1365
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
@@ -55622,7 +57322,7 @@ msgstr ""
"由于性能问题或驱动支æŒï¼Œåœ¨ç§»åŠ¨è®¾å¤‡ä¸Šå°†å¯¹[member rendering/quality/"
"reflections/texture_array_reflections]以低性能数值覆盖。"
-#: doc/classes/ProjectSettings.xml:1368
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
@@ -55630,7 +57330,7 @@ msgstr ""
"如果 [code]true[/code],则使用速度更快但质é‡è¾ƒä½Žçš„ Blinn æ¨¡åž‹è€Œä¸æ˜¯ GGX 模型"
"æ¥ç”Ÿæˆæ¨¡ç³Šå射。"
-#: doc/classes/ProjectSettings.xml:1371
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
@@ -55639,7 +57339,7 @@ msgstr ""
"由于性能或驱动支æŒé—®é¢˜ï¼Œåœ¨ç§»åŠ¨è®¾å¤‡ä¸Šå°†å¯¹[member rendering/quality/shading/"
"force_blinn_over_ggx]以低值覆盖。"
-#: doc/classes/ProjectSettings.xml:1374
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
@@ -55647,7 +57347,7 @@ msgstr ""
"如果 [code]true[/code],则使用速度更快但质é‡è¾ƒä½Žçš„ Lambert æè´¨ç…§æ˜Žæ¨¡åž‹è€Œä¸"
"是 Burley。"
-#: doc/classes/ProjectSettings.xml:1377
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
@@ -55656,7 +57356,7 @@ msgstr ""
"由于性能问题或驱动支æŒï¼Œåœ¨ç§»åŠ¨è®¾å¤‡ä¸Šå°†å¯¹[member rendering/quality/shading/"
"force_lambert_over_burley]ä»¥ä½Žé…æ•°å€¼è¦†ç›–。"
-#: doc/classes/ProjectSettings.xml:1380
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
@@ -55665,7 +57365,7 @@ msgstr ""
"如果 [code]true[/code],则为所有渲染强制顶点ç€è‰²ã€‚è¿™å¯ä»¥å¤§å¤§æé«˜æ€§èƒ½ï¼Œä½†ä¹Ÿä¼š"
"æžå¤§åœ°é™ä½Žè´¨é‡ã€‚å¯ç”¨äºŽä¼˜åŒ–低端移动设备的性能。"
-#: doc/classes/ProjectSettings.xml:1383
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
@@ -55674,7 +57374,7 @@ msgstr ""
"由于性能问题或驱动支æŒï¼Œåœ¨ç§»åŠ¨è®¾å¤‡ä¸Šå°†å¯¹[member rendering/quality/shading/"
"force_vertex_shading]ä»¥ä½Žé…æ•°å€¼è¦†ç›–。"
-#: doc/classes/ProjectSettings.xml:1386
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -55684,8 +57384,12 @@ msgid ""
"energy or attenuation values.\n"
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
+"如果 [code]true[/code],则为 [OmniLight] å’Œ [SpotLight] å¯ç”¨æ–°çš„物ç†å…‰è¡°å‡ã€‚"
+"这会以éžå¸¸å°çš„æ€§èƒ½æˆæœ¬èŽ·å¾—æ›´é€¼çœŸçš„ç…§æ˜Žå¤–è§‚ã€‚å¯ç”¨ç‰©ç†å…‰è¡°å‡åŽï¼Œç”±äºŽæ–°çš„è¡°å‡å…¬"
+"å¼ï¼Œç¯å…‰ä¼šæ˜¾å¾—更暗。这å¯ä»¥é€šè¿‡è°ƒæ•´ç¯å…‰çš„èƒ½é‡æˆ–è¡°å‡å€¼æ¥è¡¥å¿ã€‚\n"
+"对此设置的更改åªä¼šåœ¨é‡æ–°å¯åŠ¨åº”ç”¨ç¨‹åºæ—¶åº”用。"
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -55693,21 +57397,25 @@ msgid ""
"Setting higher than a quarter of the [member rendering/quality/shadow_atlas/"
"size] will not result in a perceptible increase in visual quality."
msgstr ""
+"立方体贴图的大å°ï¼Œåœ¨å°†é˜´å½±å¤åˆ¶åˆ°é˜´å½±å›¾é›†ä¸­ä¹‹å‰å°†å…¶æ¸²æŸ“到其中。当与更高的 "
+"[member rendering/quality/shadow_atlas/size] 一起使用时,更高的数字会导致更高"
+"分辨率的阴影。设置高于 [member rendering/quality/shadow_atlas/size] 的四分之"
+"一ä¸ä¼šå¯¼è‡´è§†è§‰è´¨é‡çš„æ˜Žæ˜¾æé«˜ã€‚"
-#: doc/classes/ProjectSettings.xml:1393 doc/classes/ProjectSettings.xml:1396
#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr "阴影贴图的细分象é™å¤§å°ã€‚请å‚阅阴影映射文档。"
-#: doc/classes/ProjectSettings.xml:1405
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr "阴影图集的尺寸(用于OmniLightså’ŒSpotLightsï¼‰ã€‚è§æ–‡æ¡£ã€‚"
-#: doc/classes/ProjectSettings.xml:1408
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
@@ -55715,7 +57423,7 @@ msgstr ""
"由于性能或驱动支æŒé—®é¢˜ï¼Œåœ¨ç§»åŠ¨è®¾å¤‡ä¸Šå°†å¯¹ [member rendering/quality/"
"shadow_atlas/size]ä»¥ä½Žé…æ•°å€¼è¦†ç›–。"
-#: doc/classes/ProjectSettings.xml:1411
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -55725,24 +57433,30 @@ msgid ""
"uses 16 samples to emulate linear filtering in the shader. This results in a "
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
+"阴影过滤模å¼ã€‚较高的质é‡è®¾ç½®ä¼šäº§ç”Ÿæ›´å¹³æ»‘çš„é˜´å½±ï¼Œåœ¨ç§»åŠ¨æ—¶é—ªçƒæ›´å°‘。\"ç¦ç”¨ \"是"
+"最快的选项,但也有最低的质é‡ã€‚\"PCF5 \"更平滑,但也更慢。\"PCF13 \"是最平滑的"
+"选项,但也是最慢的。\n"
+"[b]注æ„:[/b] 当使用GLES2åŽç«¯æ—¶ï¼Œ\"PCF13 \"选项实际上使用16ä¸ªæ ·æœ¬æ¥æ¨¡æ‹Ÿç€è‰²å™¨"
+"中的线性滤波。这导致了与GLES3åŽç«¯äº§ç”Ÿçš„阴影外观相似。"
-#: doc/classes/ProjectSettings.xml:1415
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-"由于性能或驱动支æŒé—®é¢˜ï¼Œåœ¨ç§»åŠ¨è®¾å¤‡ä¸Šå°†å¯¹ [member rendering/quality/"
-"shadow_atlas/size]ä»¥ä½Žé…æ•°å€¼è¦†ç›–。"
+"由于性能问题或驱动器支æŒï¼Œåœ¨ç§»åŠ¨è®¾å¤‡ä¸Šå¯¹ [member rendering/quality/shadows/"
+"filter_mode] 进行低端覆盖。"
-#: doc/classes/ProjectSettings.xml:1418
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
+"强制 [MeshInstance] 始终在 CPU 上执行蒙皮(适用于 GLES2 和 GLES3)。\n"
+"å¦è§[member rendering/quality/skinning/software_skinning_fallback]。"
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -55753,48 +57467,57 @@ msgid ""
"shaders will behave in a different way, because the bone transform will be "
"already applied to the modelview matrix."
msgstr ""
+"å½“ç¡¬ä»¶ä¸æ”¯æŒ GLES2 的默认 GPU 蒙皮过程时,å…许 [MeshInstance] 在 CPU 上执行蒙"
+"皮。\n"
+"如果 [code]false[/code]ï¼Œåˆ™åœ¨è¿™ç§æƒ…况下使用 GPU 上的替代蒙皮过程(在大多数情"
+"况下较慢)。\n"
+"å¦è§[member rendering/quality/skinning/force_software_skinning]。\n"
+"[b]注æ„:[/b] 当触å‘软件蒙皮回退时,自定义顶点ç€è‰²å™¨å°†ä»¥ä¸åŒçš„æ–¹å¼è¿è¡Œï¼Œå› ä¸º"
+"éª¨éª¼å˜æ¢å·²ç»åº”用于模型视图矩阵。"
-#: doc/classes/ProjectSettings.xml:1428
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
+"æ¸²æŸ“å…«å‰æ ‘(octree)的平衡å¯ä»¥æ”¹å˜ä¸ºæœ‰åˆ©äºŽæ›´å°çš„ ([code]0[/code]) 或更大的 "
+"([code]1[/code]) 分支。\n"
+"在æŸäº›é¡¹ç›®ä¸­ï¼Œè¾ƒå¤§çš„分支å¯ä»¥æ˜¾ç€æé«˜æ€§èƒ½ã€‚"
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
+"å¯ç”¨è¾¹ç•Œä½“ç§¯å±‚æ¬¡ç»“æž„è€Œä¸æ˜¯å…«å‰æ ‘æ¥æ¸²æŸ“空间分区。这å¯èƒ½ä¼šå¸¦æ¥æ›´å¥½çš„æ€§èƒ½ã€‚"
-#: doc/classes/ProjectSettings.xml:1435
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
-msgstr ""
+msgstr "æé«˜æ¬¡è¡¨é¢æ•£å°„的质é‡ï¼Œä½†æˆæœ¬æ˜¾ç€å¢žåŠ ã€‚"
-#: doc/classes/ProjectSettings.xml:1438
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
-msgstr "地下散射效应的强度。"
+msgstr "æ¬¡è¡¨é¢æ•£å°„的质é‡è®¾ç½®ï¼ˆé‡‡æ ·ï¼‰ã€‚"
-#: doc/classes/ProjectSettings.xml:1441
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
-msgstr "地下散射效应的强度。"
+msgstr "ç”¨äºŽæ¬¡è¡¨é¢æ•£å°„样本的最大åŠå¾„。"
-#: doc/classes/ProjectSettings.xml:1444
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
-msgstr ""
+msgstr "åŠ æƒæ¬¡è¡¨é¢æ•£å°„样本。有助于é¿å…从å±å¹•çš„ä¸ç›¸å…³éƒ¨åˆ†è¯»å–样本。"
-#: doc/classes/ProjectSettings.xml:1447
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
-msgstr ""
+msgstr "使用高质é‡çš„体素锥体追踪。这会产生更好看的å射,但 GPU 消耗è¦é«˜å¾—多。"
-#: doc/classes/ProjectSettings.xml:1450
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
@@ -55803,16 +57526,18 @@ msgstr ""
"渲染的线程模型。在线程上进行渲染å¯ä»¥æžå¤§åœ°æé«˜æ€§èƒ½ï¼Œä½†åŒæ­¥åˆ°ä¸»çº¿ç¨‹ä¸Šä¼šå¯¼è‡´æ›´"
"多的抖动。"
-#: doc/classes/ProjectSettings.xml:1453
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
"Try enabling this option if you see any visual anomalies in 3D (such as "
"incorrect object visibility)."
msgstr ""
+"如果 [code]true[/code],则将在渲染和 Godot 物ç†ä¸­ä½¿ç”¨çº¿ç¨‹å®‰å…¨ç‰ˆæœ¬çš„ BVH(边界"
+"体积层次结构)。\n"
+"如果您在 3D ä¸­çœ‹åˆ°ä»»ä½•è§†è§‰å¼‚å¸¸ï¼Œä¾‹å¦‚ä¸æ­£ç¡®çš„å¯è§æ€§å¯¹è±¡ï¼Œè¯·å°è¯•å¯ç”¨æ­¤é€‰é¡¹ã€‚"
-#: doc/classes/ProjectSettings.xml:1457
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -55822,13 +57547,16 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-"如果[code]true[/code],纹ç†å¯¼å…¥å™¨å°†ä½¿ç”¨BPTC算法导入VRAM压缩的纹ç†ã€‚è¿™ç§çº¹ç†åŽ‹"
-"缩算法åªåœ¨æ¡Œé¢å¹³å°ä¸Šæ”¯æŒï¼Œè€Œä¸”åªåœ¨ä½¿ç”¨Vulkan渲染器时支æŒã€‚"
+"如果 [code]true[/code],纹ç†å¯¼å…¥å™¨å°†ä½¿ç”¨ BPTC 算法导入 VRAM 压缩的纹ç†ã€‚此纹"
+"ç†åŽ‹ç¼©ç®—æ³•ä»…åœ¨æ¡Œé¢å¹³å°å¾—到支æŒï¼Œå¹¶ä¸”仅在使用 GLES3 渲染器时æ‰å—支æŒã€‚\n"
+"[b]注æ„:[/b]更改此设置ä¸ä¼š[i]ä¸[/i]å½±å“之å‰å·²ç»å¯¼å…¥çš„纹ç†ã€‚è¦å°†æ­¤è®¾ç½®åº”用于"
+"已导入的纹ç†ï¼Œè¯·é€€å‡ºç¼–辑器,删除ä½äºŽé¡¹ç›®æ–‡ä»¶å¤¹å†…çš„ [code].import/[/code] 文件"
+"夹,然åŽé‡æ–°å¯åŠ¨ç¼–è¾‘å™¨ï¼ˆå‚阅 [member application/config/"
+"use_hidden_project_data_directory])。"
-#: doc/classes/ProjectSettings.xml:1461
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -55837,13 +57565,16 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-"如果[code]true[/code],纹ç†å¯¼å…¥å™¨å°†ä½¿ç”¨BPTC算法导入VRAM压缩的纹ç†ã€‚è¿™ç§çº¹ç†åŽ‹"
-"缩算法åªåœ¨æ¡Œé¢å¹³å°ä¸Šæ”¯æŒï¼Œè€Œä¸”åªåœ¨ä½¿ç”¨Vulkan渲染器时支æŒã€‚"
+"如果 [code]true[/code],纹ç†å¯¼å…¥å™¨å°†ä½¿ç”¨Ericsson纹ç†åŽ‹ç¼©ç®—æ³•å¯¼å…¥ VRAM 压缩的"
+"纹ç†ã€‚æ­¤ç®—æ³•ä¸æ”¯æŒçº¹ç†ä¸­çš„ alpha 通é“。\n"
+"[b]注æ„:[/b]更改此设置ä¸ä¼š[i]ä¸[/i]å½±å“之å‰å·²ç»å¯¼å…¥çš„纹ç†ã€‚è¦å°†æ­¤è®¾ç½®åº”用于"
+"已导入的纹ç†ï¼Œè¯·é€€å‡ºç¼–辑器,删除ä½äºŽé¡¹ç›®ä¸­çš„ [code].import/[/code] 文件夹,然"
+"åŽé‡æ–°å¯åŠ¨ç¼–è¾‘å™¨ï¼Œå‚阅 [member application/config/"
+"use_hidden_project_data_directory]。"
-#: doc/classes/ProjectSettings.xml:1465
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -55852,13 +57583,16 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-"如果[code]true[/code],纹ç†å¯¼å…¥å™¨å°†ä½¿ç”¨BPTC算法导入VRAM压缩的纹ç†ã€‚è¿™ç§çº¹ç†åŽ‹"
-"缩算法åªåœ¨æ¡Œé¢å¹³å°ä¸Šæ”¯æŒï¼Œè€Œä¸”åªåœ¨ä½¿ç”¨Vulkan渲染器时支æŒã€‚"
+"如果 [code]true[/code],纹ç†å¯¼å…¥å™¨å°†ä½¿ç”¨ Ericsson Texture Compression 2 算法"
+"导入 VRAM 压缩的纹ç†ã€‚仅在使用 GLES3 æ¸²æŸ“å™¨æ—¶ï¼Œæ‰æ”¯æŒæ­¤çº¹ç†åŽ‹ç¼©ç®—æ³•ã€‚\n"
+"[b]注æ„:[/b]更改此设置[i]ä¸[/i]会影å“之å‰å·²ç»å¯¼å…¥çš„纹ç†ã€‚è¦å°†æ­¤è®¾ç½®åº”用于已"
+"导入的纹ç†ï¼Œè¯·é€€å‡ºç¼–辑器,删除ä½äºŽé¡¹ç›®ä¸­çš„ [code].import/[/code] 文件夹,然åŽ"
+"釿–°å¯åŠ¨ç¼–è¾‘å™¨ï¼Œå‚阅 [member application/config/"
+"use_hidden_project_data_directory]。"
-#: doc/classes/ProjectSettings.xml:1469
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -55867,13 +57601,16 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-"如果[code]true[/code],纹ç†å¯¼å…¥å™¨å°†ä½¿ç”¨BPTC算法导入VRAM压缩的纹ç†ã€‚è¿™ç§çº¹ç†åŽ‹"
-"缩算法åªåœ¨æ¡Œé¢å¹³å°ä¸Šæ”¯æŒï¼Œè€Œä¸”åªåœ¨ä½¿ç”¨Vulkan渲染器时支æŒã€‚"
+"如果 [code]true[/code],纹ç†å¯¼å…¥å™¨å°†ä½¿ç”¨ PowerVR 纹ç†åŽ‹ç¼©ç®—æ³•å¯¼å…¥ VRAM 压缩的"
+"纹ç†ã€‚此纹ç†åŽ‹ç¼©ç®—æ³•ä»…åœ¨ iOS ä¸Šå—æ”¯æŒã€‚\n"
+"[b]注æ„:[/b]更改此设置[i]ä¸ä¼š[/i]å½±å“之å‰å·²ç»å¯¼å…¥çš„纹ç†ã€‚è¦å°†æ­¤è®¾ç½®åº”用于已"
+"导入的纹ç†ï¼Œè¯·é€€å‡ºç¼–辑器,删除ä½äºŽé¡¹ç›®ä¸­çš„ [code].import/[/code] 文件夹,然åŽ"
+"釿–°å¯åŠ¨ç¼–è¾‘å™¨ï¼Œå‚阅 [member application/config/"
+"use_hidden_project_data_directory]。"
-#: doc/classes/ProjectSettings.xml:1473
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -55882,17 +57619,21 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-"如果[code]true[/code],纹ç†å¯¼å…¥å™¨å°†ä½¿ç”¨BPTC算法导入VRAM压缩的纹ç†ã€‚è¿™ç§çº¹ç†åŽ‹"
-"缩算法åªåœ¨æ¡Œé¢å¹³å°ä¸Šæ”¯æŒï¼Œè€Œä¸”åªåœ¨ä½¿ç”¨Vulkan渲染器时支æŒã€‚"
+"如果 [code]true[/code],纹ç†å¯¼å…¥å™¨å°†ä½¿ç”¨ S3 纹ç†åŽ‹ç¼©ç®—æ³•å¯¼å…¥ VRAM 压缩的纹"
+"ç†ã€‚此算法仅在桌é¢å¹³å°å’ŒæŽ§åˆ¶å°ä¸­å—支æŒã€‚\n"
+"[b]注æ„:[/b]更改此设置[i]ä¸ä¼š[/i]å½±å“之å‰å·²ç»å¯¼å…¥çš„纹ç†ã€‚è¦å°†æ­¤è®¾ç½®åº”用于已"
+"导入的纹ç†ï¼Œè¯·é€€å‡ºç¼–辑器,删除ä½äºŽé¡¹ç›®ä¸­çš„ [code].import/[/code] 文件夹,然åŽ"
+"釿–°å¯åŠ¨ç¼–è¾‘å™¨ï¼Œå‚阅 [member application/config/"
+"use_hidden_project_data_directory]。"
-#: doc/classes/ProjectSettings.xml:1477
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
-msgstr "用于[VisibilityNotifier2D]的二维哈希网格的å•元格大å°ã€‚"
+msgstr ""
+"用于 [VisibilityNotifier2D] 使用的 2D 哈希网格的å•元格大å°ï¼Œä»¥åƒç´ ä¸ºå•ä½ã€‚"
#: doc/classes/ProximityGroup.xml:4 doc/classes/ProximityGroup.xml:7
msgid "General-purpose proximity detection node."
@@ -55919,9 +57660,8 @@ msgid "https://godotengine.org/asset-library/asset/129"
msgstr "https://godotengine.org/asset-library/asset/129"
#: doc/classes/QuadMesh.xml:17
-#, fuzzy
msgid "Offset of the generated Quad. Useful for particles."
-msgstr "生æˆçš„纹ç†çš„高度。"
+msgstr "生æˆçš„ Quad çš„åç§»é‡ã€‚å¯¹ç²’å­æœ‰ç”¨ã€‚"
#: doc/classes/QuadMesh.xml:20
msgid "Size on the X and Y axes."
@@ -55953,7 +57693,7 @@ msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/3d/using_transforms."
"html#interpolating-with-quaternions"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/3d/using_transforms."
+"https://docs.godotengine.org/zh_CN/stable/tutorials/3d/using_transforms."
"html#interpolating-with-quaternions"
#: doc/classes/Quat.xml:20
@@ -55989,16 +57729,19 @@ msgid ""
"error, so methods such as [method @GDScript.is_zero_approx] will not work "
"reliably."
msgstr ""
+"返回此四元数与 [code]to[/code] 之间的角度。这是从一个到å¦ä¸€ä¸ªæ—‹è½¬æ‰€éœ€çš„角度大"
+"å°ã€‚\n"
+"[b]注æ„:[/b]该方法的浮点错误率异常高,因此[method@GDScript.is_zero_approx]ç­‰"
+"方法结果ä¸å¯é ã€‚"
#: doc/classes/Quat.xml:63
-#, fuzzy
msgid ""
"Performs a cubic spherical interpolation between quaternions [code]pre_a[/"
"code], this vector, [code]b[/code], and [code]post_b[/code], by the given "
"amount [code]weight[/code]."
msgstr ""
-"在四元数[code]preA[/code]ã€æ­¤å‘é‡ã€[code]b[/code]å’Œ[code]postB[/code]之间,通"
-"过给定的é‡[code]t[/code],执行一个三维çƒé¢æ’值。"
+"在四元数 [code]pre_a[/code]ã€è¯¥å‘é‡ [code]b[/code] å’Œ [code]post_b[/code] 之"
+"间执行三次çƒé¢æ’值,按给定的 [code]weight[/code]。"
#: doc/classes/Quat.xml:70
msgid "Returns the dot product of two quaternions."
@@ -56019,14 +57762,13 @@ msgid "Returns the inverse of the quaternion."
msgstr "返回四元数的å–逆。(译注:å³xyz的值分别å–å)."
#: doc/classes/Quat.xml:89
-#, fuzzy
msgid ""
"Returns [code]true[/code] if this quaternion and [code]quat[/code] are "
"approximately equal, by running [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-"通过对æ¯ä¸ªç»„ä»¶è¿è¡Œ[method @GDScript.is_equal_approx],如果这个四元组和"
-"[code]quat[/code]大致相等,则返回[code]true[/code]。"
+"通过在æ¯ä¸ªåˆ†é‡ä¸Šè¿›è¡Œ [method @GDScript.is_equal_approx],如果此四元数和 "
+"[code]quat[/code] 近似相等,则返回 [code]true[/code]。"
#: doc/classes/Quat.xml:95
msgid "Returns whether the quaternion is normalized or not."
@@ -56128,7 +57870,6 @@ msgid "A class for generating pseudo-random numbers."
msgstr "一个用于生æˆä¼ªéšæœºæ•°çš„ç±»ã€‚"
#: doc/classes/RandomNumberGenerator.xml:7
-#, fuzzy
msgid ""
"RandomNumberGenerator is a class for generating pseudo-random numbers. It "
"currently uses [url=http://www.pcg-random.org/]PCG32[/url].\n"
@@ -56148,25 +57889,28 @@ msgid ""
"The [code]0[/code] value documented here is a placeholder, and not the "
"actual default seed."
msgstr ""
-"RandomNumberGenerator是一个用于生æˆä¼ªéšæœºæ•°çš„ç±»ã€‚å®ƒç›®å‰ä½¿ç”¨[url=http://www."
+"RandomNumberGenerator 是一个用于生æˆä¼ªéšæœºæ•°çš„ç±»ã€‚å®ƒç›®å‰ä½¿ç”¨ [url=http://www."
"pcg-random.org/]PCG32[/url]。\n"
-"[b]注æ„:[/b] 底层算法是一个实现细节。因此,它ä¸åº”该被用æ¥åœ¨ä¸åŒçš„Godot版本中"
-"产生å¯é‡å¤çš„éšæœºæµã€‚\n"
-"基于一个与时间有关的ç§å­ï¼Œç”Ÿæˆä¸€ä¸ªéšæœºçš„æµ®ç‚¹æ•°ï¼ˆåœ¨ä¸€ä¸ªç»™å®šçš„èŒƒå›´å†…ï¼‰ã€‚\n"
+"[b]注:[/b]底层算法是实现细节。因此,跨 Godot 版本的å¯é‡å¤éšæœºæµä¸åº”该ä¾èµ–于"
+"此。\n"
+"è¦æ ¹æ®æ—¶é—´ç›¸å…³ç§å­ç”Ÿæˆéšæœºæµ®ç‚¹æ•°ï¼Œåœ¨ç»™å®šèŒƒå›´å†…ï¼š\n"
"[codeblock]\n"
"var rng = RandomNumberGenerator.new()\n"
"func _ready():\n"
" rng.randomize()\n"
" var my_random_number = rng.randf_range(-10.0, 10.0)\n"
-"[/codeblock]"
+"[/codeblock]\n"
+"[b]注:[/b] [member seed] å’Œ [member state] å±žæ€§çš„é»˜è®¤å€¼æ˜¯ä¼ªéšæœºçš„,在调用"
+"[method randomize] 时会å‘生å˜åŒ–。此处记录的 [code]0[/code] 值是一个å ä½ç¬¦ï¼Œè€Œ"
+"䏿˜¯å®žé™…的默认ç§å­ã€‚"
#: doc/classes/RandomNumberGenerator.xml:19
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/math/random_number_generation."
"html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/math/random_number_generation."
-"html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/math/"
+"random_number_generation.html"
#: doc/classes/RandomNumberGenerator.xml:25
msgid ""
@@ -56190,8 +57934,8 @@ msgid ""
"also called Gaussian distribution."
msgstr ""
"产生一个[url=https://en.wikipedia.org/wiki/Normal_distribution]æ­£æ€åˆ†å¸ƒ[/url]"
-"çš„ä¼ªéšæœºæ•°ï¼Œä½¿ç”¨Box-Mullerå˜æ¢ï¼Œå…·æœ‰æŒ‡å®šçš„[code]å¹³å‡å€¼[/code]和标准[code]åå·®"
-"[/code]。这也被称为高斯分布。"
+"çš„ä¼ªéšæœºæ•°ï¼Œä½¿ç”¨Box-Mullerå˜æ¢ï¼Œå…·æœ‰æŒ‡å®šçš„[code]mean[/code]和标准"
+"[code]deviation[/code]。这也被称为高斯分布。"
#: doc/classes/RandomNumberGenerator.xml:47
msgid ""
@@ -56232,6 +57976,19 @@ msgid ""
"state], and not the initial seed value, which is going to be fixed in Godot "
"4.0."
msgstr ""
+"æ ¹æ®ç»™å®šçš„ç§å­å€¼åˆå§‹åŒ–éšæœºæ•°ç”Ÿæˆå™¨çжæ€ã€‚给定的ç§å­å°†æä¾›å¯é‡å¤çš„ä¼ªéšæœºæ•°åº"
+"列。\n"
+"[b]注:[/b] RNG 没有雪崩效应,å¯ä»¥è¾“å‡ºç›¸ä¼¼çš„éšæœºæµç»™å®šç›¸ä¼¼çš„ç§å­ã€‚如果ç§å­æ¥"
+"è‡ªå¤–éƒ¨ï¼Œè¯·è€ƒè™‘ä½¿ç”¨å“ˆå¸Œå‡½æ•°æ¥æé«˜ç§å­è´¨é‡ã€‚\n"
+"[b]注:[/b]设置这个属性会产生改å˜å†…部[member state]的副作用,所以一定è¦åœ¨ä¿®æ”¹"
+"[member state][i]之å‰[/i]åˆå§‹åŒ–ç§å­ï¼š\n"
+"[codeblock]\n"
+"var rng = RandomNumberGenerator.new()\n"
+"rng.seed = hash(\"Godot\")\n"
+"rng.state = 100 # Restore to some previously saved state.\n"
+"[/codeblock]\n"
+"[b]警告:[/b]该属性的getter返回之å‰çš„[member state]ï¼Œè€Œä¸æ˜¯åˆå§‹ç§å­å€¼ï¼Œè¿™å°†åœ¨"
+"Godot 4.0中修å¤ã€‚"
#: doc/classes/RandomNumberGenerator.xml:78
msgid ""
@@ -56251,6 +58008,18 @@ msgid ""
"initialize the random number generator with arbitrary input, use [member "
"seed] instead."
msgstr ""
+"éšæœºæ•°ç”Ÿæˆå™¨çš„当å‰çжæ€ã€‚ä¿å­˜å¹¶æ¢å¤æ­¤å±žæ€§ï¼Œä»¥å°†ç”Ÿæˆå™¨æ¢å¤åˆ°ä¹‹å‰çš„状æ€ï¼š\n"
+"[codeblock]\n"
+"var rng = RandomNumberGenerator.new()\n"
+"print(rng.randf())\n"
+"var saved_state = rng.state # Store current state.\n"
+"print(rng.randf()) # Advance internal state.\n"
+"rng.state = saved_state # Restore the state.\n"
+"print(rng.randf()) # Prints the same value as in previous.\n"
+"[/codeblock]\n"
+"[b]注æ„:[/b] ä¸è¦å°†çжæ€è®¾ç½®ä¸ºä»»æ„å€¼ï¼Œå› ä¸ºéšæœºæ•°ç”Ÿæˆå™¨è¦æ±‚状æ€å…·æœ‰æŸäº›ç‰¹æ€§æ‰"
+"能正常è¿è¡Œã€‚它应该åªè®¾ç½®ä¸ºæ¥è‡ªçжæ€å±žæ€§æœ¬èº«çš„值。è¦ä½¿ç”¨ä»»æ„输入åˆå§‹åŒ–éšæœºæ•°ç”Ÿ"
+"æˆå™¨ï¼Œè¯·æ”¹ç”¨ [member seed]。"
#: doc/classes/Range.xml:4
msgid "Abstract base class for range-based controls."
@@ -56362,7 +58131,6 @@ msgid "Query the closest object intersecting a ray."
msgstr "查询与射线相交的最近物体。"
#: doc/classes/RayCast.xml:7
-#, fuzzy
msgid ""
"A RayCast represents a line from its origin to its destination position, "
"[code]cast_to[/code]. It is used to query the 3D space in order to find the "
@@ -56379,15 +58147,15 @@ msgid ""
"queries are required between physics frames (or during the same frame), use "
"[method force_raycast_update] after adjusting the raycast."
msgstr ""
-"RayCast表示一æ¡ä»ŽåŽŸç‚¹åˆ°ç›®æ ‡ä½ç½®[code]cast_to[/code]çš„ç›´çº¿ã€‚å®ƒè¢«ç”¨æ¥æŸ¥è¯¢3D空"
-"间,以便沿ç€å°„线的路径找到最近的物体。\n"
-"RayCast3Då¯ä»¥å¿½ç•¥ä¸€äº›ç‰©ä½“,通过[code]add_exception[/code]将它们添加到异常列表"
-"中,通过设置碰撞层进行适当的过滤,或者通过类型掩ç è¿‡æ»¤ç‰©ä½“类型。\n"
-"RayCast3Då¯ä»¥è¢«é…置为报告[Area3D]([member collide_with_areas])和"
-"[PhysicsBody2D]([member collide_with_bodies])之间或彼此间的碰撞。\n"
-"åªæœ‰è¢«æ¿€æ´»çš„Raycastæ‰èƒ½å¤ŸæŸ¥è¯¢ç©ºé—´å¹¶æŠ¥å‘Šç¢°æ’žæƒ…况。\n"
-"RayCast2D在æ¯ä¸€ä¸ªç‰©ç†å¸§ä¸­è®¡ç®—交集(è§[Node]),结果被缓存起æ¥ï¼Œä»¥ä¾¿ä»¥åŽå¯ä»¥ç”¨"
-"到下一帧。如果在物ç†å¸§ä¹‹é—´éœ€è¦å¤šæ¬¡æŸ¥è¯¢ï¼ˆæˆ–在åŒä¸€å¸§ä¸­ï¼‰ï¼Œè¯·åœ¨è°ƒæ•´å°„线广播åŽä½¿"
+"RayCast 表示从起点到终点ä½ç½®çš„线,[code]cast_to[/code]。它用于检测 3D 空间,"
+"以便找到沿光线路径最近的对象。\n"
+"RayCast å¯ä»¥å¿½ç•¥æŸäº›å¯¹è±¡ï¼Œæ–¹æ³•是通过 [code]add_exception[/code] 将它们添加到"
+"例外列表中,或者通过使用碰撞层和掩ç è®¾ç½®ï¼Œè¿›è¡Œé€‚当的过滤。\n"
+"RayCast å¯ä»¥é…置为报告与 [Area]([member collide_with_areas]) å’Œ/或 "
+"[PhysicsBody]([member collide_with_bodies]) 的碰撞。\n"
+"åªæœ‰å¯ç”¨çš„光线投射æ‰èƒ½æ£€æµ‹ç©ºé—´å¹¶æŠ¥å‘Šç¢°æ’žã€‚\n"
+"RayCast 计算æ¯ä¸ªç‰©ç†å¸§çš„交集(å‚阅 [Node]),并将结果缓存起æ¥ï¼Œä»¥ä¾¿ç¨åŽä½¿ç”¨ï¼Œ"
+"直到下一帧。如果物ç†å¸§ä¹‹é—´ï¼ˆæˆ–åŒä¸€å¸§æœŸé—´ï¼‰éœ€è¦å¤šæ¬¡æ£€æµ‹ï¼Œè¯·åœ¨è°ƒæ•´å…‰çº¿æŠ•å°„åŽä½¿"
"用[method force_raycast_update]。"
#: doc/classes/RayCast.xml:22 doc/classes/RayCast2D.xml:21
@@ -56407,7 +58175,6 @@ msgid "Removes all collision exceptions for this ray."
msgstr "删除此射线的所有碰撞异常。"
#: doc/classes/RayCast.xml:41
-#, fuzzy
msgid ""
"Updates the collision information for the ray.\n"
"Use this method to update the collision information immediately instead of "
@@ -56415,10 +58182,10 @@ msgid ""
"ray or its parent has changed state.\n"
"[b]Note:[/b] [code]enabled[/code] is not required for this to work."
msgstr ""
-"更新光线的碰撞信æ¯ã€‚\n"
-"使用这个方法å¯ä»¥ç«‹å³æ›´æ–°ç¢°æ’žä¿¡æ¯ï¼Œè€Œä¸æ˜¯ç­‰å¾…下一次[code]_physics_process[/"
-"code]è°ƒç”¨ï¼Œä¾‹å¦‚å½“å°„çº¿æˆ–å®ƒçš„çˆ¶è¿›ç¨‹çŠ¶æ€æ”¹å˜æ—¶ã€‚\n"
-"[b]注æ„:[/b] å¹¶ä¸éœ€è¦[member enabled]为[code]true[/code]æ‰èƒ½å·¥ä½œã€‚"
+"更新射线的碰撞信æ¯ã€‚\n"
+"ä½¿ç”¨æ­¤æ–¹æ³•ç«‹å³æ›´æ–°ç¢°æ’žä¿¡æ¯ï¼Œè€Œä¸æ˜¯ç­‰å¾…下一个 [code]_physics_process[/code] è°ƒ"
+"用,例如,如果光线或其父级已更改状æ€ã€‚\n"
+"[b]注æ„:[/b] [code]enabled[/code]ä¸éœ€è¦æ­¤åŠŸèƒ½ã€‚"
#: doc/classes/RayCast.xml:49 doc/classes/RayCast2D.xml:47
msgid ""
@@ -56491,14 +58258,12 @@ msgid ""
msgstr "光线相对于光线投射的 [code]position[/code]的目标点,。"
#: doc/classes/RayCast.xml:114
-#, fuzzy
msgid "If [code]true[/code], collision with [Area]s will be reported."
-msgstr "如果[code]true[/code],将报告与[Area2D]的碰撞。"
+msgstr "如果 [code]true[/code],将å馈与 [Area] 的碰撞。"
#: doc/classes/RayCast.xml:117
-#, fuzzy
msgid "If [code]true[/code], collision with [PhysicsBody]s will be reported."
-msgstr "如果[code]true[/code],会报告与[PhysicsBody2D]的碰撞。"
+msgstr "如果 [code]true[/code],将å馈与 [PhysicsBody] 的碰撞。"
#: doc/classes/RayCast.xml:120 doc/classes/RayCast2D.xml:116
msgid ""
@@ -56508,6 +58273,10 @@ msgid ""
"masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
+"光线的碰撞é®ç½©ã€‚åªæœ‰åœ¨é®ç½©ä¸­å¯ç”¨è‡³å°‘一个碰撞层中物体,æ‰ä¼šè¢«æ£€æµ‹åˆ°ã€‚有关更多"
+"ä¿¡æ¯ï¼Œè¯·å‚阅文档中的 [url=https://docs.godotengine.org/zh_CN/stable/"
+"tutorials/physics/physics_introduction.html#collision-layers-and-masks]碰撞层"
+"和掩ç [/url]。"
#: doc/classes/RayCast.xml:123
msgid ""
@@ -56518,6 +58287,11 @@ msgid ""
"If set to [code]Color(0.0, 0.0, 0.0)[/code] (by default), the color set in "
"[member ProjectSettings.debug/shapes/collision/shape_color] is used."
msgstr ""
+"如果在 [b]Debug[/b] èœå•中å¯ç”¨äº†å¯è§ç¢°æ’žå½¢çж [b]Visible Collision Shapes[/"
+"b],则å¯ç”¨äºŽåœ¨ç¼–辑器中和è¿è¡Œæ—¶ç»˜åˆ¶å½¢çŠ¶çš„è‡ªå®šä¹‰é¢œè‰²ã€‚å¦‚æžœ [RayCast] 与æŸç‰©ä½“å‘"
+"生碰撞,此颜色将在è¿è¡Œæ—¶çªå‡ºæ˜¾ç¤ºã€‚\n"
+"如果设置为 [code]Color(0.0, 0.0, 0.0)[/code](默认),则使用 [member "
+"ProjectSettings.debug/shapes/collision/shape_color] 中设置的颜色。"
#: doc/classes/RayCast.xml:127
msgid ""
@@ -56526,17 +58300,19 @@ msgid ""
"Collision Shapes[/b] to be enabled in the [b]Debug[/b] menu for the debug "
"shape to be visible at run-time."
msgstr ""
+"如果设置为 [code]1[/code],则将一æ¡çº¿ç”¨ä½œè°ƒè¯•形状。å¦åˆ™ï¼Œå°†ç»˜åˆ¶ä¸€ä¸ªæˆªæ–­çš„金字"
+"å¡”æ¥è¡¨ç¤º [RayCast]。需è¦åœ¨ [b]调试[/b] èœå•中å¯ç”¨å¯è§ç¢°æ’žå½¢çж [b]Visible "
+"Collision Shapes[/b],以便调试形状在è¿è¡Œæ—¶å¯è§ã€‚"
#: doc/classes/RayCast.xml:130 doc/classes/RayCast2D.xml:119
msgid "If [code]true[/code], collisions will be reported."
msgstr "如果 [code]true[/code],将报告碰撞。"
#: doc/classes/RayCast.xml:133
-#, fuzzy
msgid ""
"If [code]true[/code], collisions will be ignored for this RayCast's "
"immediate parent."
-msgstr "如果 [code]true[/code],则此 RayCast3D 的直接父级的碰撞将被忽略。"
+msgstr "如果 [code]true[/code],则此 RayCast 的直接父级的碰撞将被忽略。"
#: doc/classes/RayCast2D.xml:7
msgid ""
@@ -56568,7 +58344,6 @@ msgstr ""
"用[method force_raycast_update]。"
#: doc/classes/RayCast2D.xml:40
-#, fuzzy
msgid ""
"Updates the collision information for the ray. Use this method to update the "
"collision information immediately instead of waiting for the next "
@@ -56576,9 +58351,9 @@ msgid ""
"changed state.\n"
"[b]Note:[/b] [code]enabled[/code] is not required for this to work."
msgstr ""
-"更新光线的碰撞信æ¯ã€‚使用这个方法å¯ä»¥ç«‹å³æ›´æ–°ç¢°æ’žä¿¡æ¯ï¼Œè€Œä¸æ˜¯ç­‰å¾…下一次"
-"[code]_physics_process[/code]è°ƒç”¨ï¼Œä¾‹å¦‚å½“å°„çº¿æˆ–å®ƒçš„çˆ¶è¿›ç¨‹çŠ¶æ€æ”¹å˜æ—¶ã€‚\n"
-"[b]注æ„:[/b] å¹¶ä¸éœ€è¦[member enabled]为[code]true[/code]æ‰èƒ½å·¥ä½œã€‚"
+"更新射线的碰撞信æ¯ã€‚ä½¿ç”¨æ­¤æ–¹æ³•ç«‹å³æ›´æ–°ç¢°æ’žä¿¡æ¯ï¼Œè€Œä¸æ˜¯ç­‰å¾…下一次 "
+"[code]_physics_process[/code] 调用,例如,如果光线或其父级已更改状æ€ã€‚\n"
+"[b]注æ„:[/b] [code]enabled[/code]ä¸éœ€è¦æ­¤åŠŸèƒ½ã€‚"
#: doc/classes/RayCast2D.xml:101
msgid ""
@@ -56605,15 +58380,15 @@ msgid "Ray shape for 3D collisions."
msgstr "用于 3D 碰撞的射线形状。"
#: doc/classes/RayShape.xml:7
-#, fuzzy
msgid ""
"Ray shape for 3D collisions, which can be set into a [PhysicsBody] or "
"[Area]. A ray is not really a collision body; instead, it tries to separate "
"itself from whatever is touching its far endpoint. It's often useful for "
"characters."
msgstr ""
-"3D 碰撞的射线形状,å¯ä»¥è®¾ç½®ä¸º [PhysicsBody3D] 或 [Area3D]ã€‚å°„çº¿å¹¶ä¸æ˜¯çœŸæ­£çš„碰"
-"撞体;相å,它试图将自己与接触其远端的任何东西分开。它通常对角色很有用。"
+"用于3D碰撞的射线形状,它å¯ä»¥è¢«è®¾ç½®æˆä¸€ä¸ª[PhysicsBody]或[Area]。一æ¡å°„çº¿å¹¶ä¸æ˜¯"
+"真正的碰撞体;然而,它试图将自己与其远端点接触的东西分开。这通常对角色很有"
+"用。"
#: doc/classes/RayShape.xml:15 doc/classes/RayShape2D.xml:15
msgid "The ray's length."
@@ -56637,20 +58412,19 @@ msgstr ""
"任何东西分开。它通常对角色很有用。"
#: doc/classes/Rect2.xml:4
-#, fuzzy
msgid "2D axis-aligned bounding box."
-msgstr "轴对é½åŒ…围盒。"
+msgstr "2D 轴对é½è¾¹ç•Œæ¡†ã€‚"
#: doc/classes/Rect2.xml:7
-#, fuzzy
msgid ""
"[Rect2] consists of a position, a size, and several utility functions. It is "
"typically used for fast overlap tests.\n"
"It uses floating-point coordinates.\n"
"The 3D counterpart to [Rect2] is [AABB]."
msgstr ""
-"[Rect2] 由一个ä½ç½®ã€ä¸€ä¸ªå¤§å°å’Œå‡ ä¸ªå®žç”¨åŠŸèƒ½ç»„æˆã€‚它通常用于快速é‡å æµ‹è¯•。\n"
-"å®ƒä½¿ç”¨æµ®ç‚¹åæ ‡ã€‚"
+"[Rect2] ç”±ä¸€ä¸ªåæ ‡ã€ä¸€ä¸ªå¤§å°å’Œå‡ ä¸ªå®žç”¨å‡½æ•°ç»„æˆã€‚它通常用于快速é‡å æµ‹è¯•。\n"
+"å®ƒä½¿ç”¨æµ®ç‚¹åæ ‡ã€‚\n"
+"[Rect2] 在 3D 中对应 [AABB]。"
#: doc/classes/Rect2.xml:22
msgid "Constructs a [Rect2] by position and size."
@@ -56679,40 +58453,54 @@ msgid ""
msgstr "如果此 [Rect2] 完全包å«å¦ä¸€ä¸ªï¼Œåˆ™è¿”回 [code]true[/code]。"
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
-msgstr "返回包å«ç»™å®šç‚¹çš„æ­¤ [Rect2] 的扩展。"
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
+msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr "返回 [Rect2] é¢ç§¯ã€‚"
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr "返回 [Rect2] çš„å‰¯æœ¬ï¼Œè¯¥å‰¯æœ¬å‘æ‰€æœ‰è¾¹å¢žé•¿äº†ç»™å®šæ•°é‡çš„å•ä½ã€‚"
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr "返回 [Rect2] 的副本,该副本分别å‘å„边增长了给定数é‡çš„å•ä½ã€‚"
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr "返回[Rect2]å‘[enum Margin]æ–¹å‘增长给定数é‡å•ä½çš„副本。"
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr "如果[Rect2]为flat或空,则返回[code]true[/code]。"
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
-msgstr "如果 [Rect2] 包å«ç‚¹ï¼Œåˆ™è¿”回 [code]true[/code]。"
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
+msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -56724,7 +58512,7 @@ msgstr ""
"如果 [code]include_borders[/code] 是 [code]true[/code],如果它们的边界接触,"
"å³ä½¿æ²¡æœ‰äº¤å‰ï¼Œå®ƒä»¬ä¹Ÿä¼šè¢«è§†ä¸ºé‡å ã€‚"
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
@@ -56733,7 +58521,7 @@ msgstr ""
"通过在æ¯ä¸ªç»„件上调用 [code]is_equal_approx[/code],如果此 [Rect2] å’Œ "
"[code]rect[/code] 大致相等,则返回 [code]true[/code]。"
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr "返回一个更大的 [Rect2],其中包å«è¿™ä¸ª [Rect2] å’Œ [code]b[/code]。"
@@ -56758,7 +58546,6 @@ msgid "Base class for reference-counted objects."
msgstr "引用计数对象的基类。"
#: doc/classes/Reference.xml:7
-#, fuzzy
msgid ""
"Base class for any object that keeps a reference count. [Resource] and many "
"other helper objects inherit this class.\n"
@@ -56774,11 +58561,13 @@ msgid ""
"free references that are no longer in use. This means that unused references "
"will linger on for a while before being removed."
msgstr ""
-"ä»»ä½•ä¿æŒå¼•用计数的对象的基类。[Resource]和许多其他辅助对象都继承了这个类。\n"
-"与[Object]ä¸åŒçš„æ˜¯ï¼Œå¼•用ä¿ç•™äº†ä¸€ä¸ªå†…部引用计数器,因此当且仅当它们ä¸å†è¢«ä½¿ç”¨"
-"时就会被自动释放。因此,引用ä¸éœ€è¦é€šè¿‡[method Object.free]手动释放。\n"
-"在ç»å¤§å¤šæ•°çš„使用情况下,实例化和使用[Reference]派生的类型就是你需è¦åšçš„全部事"
-"情。这个类中æä¾›çš„æ–¹æ³•åªé€‚用于高级用户,如果误用的è¯ä¼šå¯¼è‡´é—®é¢˜ã€‚"
+"ä»»ä½•ä¿æŒå¼•用计数对象的基类。 [Resource] 和许多其他辅助对象继承了这个类。\n"
+"与其他 [Object] 类型ä¸åŒï¼ŒReferences ä¿ç•™ä¸€ä¸ªå†…部引用计数器,以便在ä¸ä½¿ç”¨ä¸”ä»…"
+"在那时自动释放。因此,ä¸éœ€è¦ä½¿ç”¨ [method Object.free] 手动释放引用。\n"
+"在ç»å¤§å¤šæ•°ç”¨ä¾‹ä¸­ï¼Œæ‚¨åªéœ€è¦å®žä¾‹åŒ–和使用 [Reference] 派生类型。此类中æä¾›çš„æ–¹æ³•"
+"仅适用于高级用户,如果误用å¯èƒ½ä¼šå¯¼è‡´é—®é¢˜ã€‚\n"
+"[b]注æ„:[/b]在C#中,引用ä¸å†ä½¿ç”¨åŽä¸ä¼šç«‹å³é‡Šæ”¾ã€‚相å,垃圾收集将定期è¿è¡Œå¹¶é‡Š"
+"放ä¸å†ä½¿ç”¨çš„引用。这æ„å‘³ç€æœªä½¿ç”¨çš„引用会在被删除之å‰åœç•™ä¸€æ®µæ—¶é—´ã€‚"
#: doc/classes/Reference.xml:19
msgid ""
@@ -56814,15 +58603,14 @@ msgid "Reference frame for GUI."
msgstr "GUI的引用框架。"
#: doc/classes/ReferenceRect.xml:7
-#, fuzzy
msgid ""
"A rectangle box that displays only a [member border_color] border color "
"around its rectangle. [ReferenceRect] has no fill [Color]. If you need to "
"display a rectangle filled with a solid color, consider using [ColorRect] "
"instead."
msgstr ""
-"一个矩形框,åªåœ¨å…¶çŸ©å½¢å‘¨å›´æ˜¾ç¤ºä¸€ä¸ª[member border_color]边框颜色。"
-"[ReferenceRect]没有填充[Color]。"
+"矩形框,仅在其矩形周围显示 [member border_color] 边框颜色。 [ReferenceRect] "
+"没有填充 [Color]ã€‚å¦‚æžœä½ éœ€è¦æ˜¾ç¤ºå¡«å……纯色的矩形,请考虑使用 [ColorRect] 。"
#: doc/classes/ReferenceRect.xml:15
msgid "Sets the border [Color] of the [ReferenceRect]."
@@ -56832,7 +58620,7 @@ msgstr "设置 [ReferenceRect] 的边框 [Color]。"
msgid ""
"Sets the border width of the [ReferenceRect]. The border grows both inwards "
"and outwards with respect to the rectangle box."
-msgstr ""
+msgstr "设置 [ReferenceRect] 的边框宽度。边界相对于矩形框å‘内和å‘外生长。"
#: doc/classes/ReferenceRect.xml:21
msgid ""
@@ -56847,7 +58635,6 @@ msgid "Captures its surroundings to create reflections."
msgstr "æ•æ‰å…¶å‘¨å›´çš„环境,以创造å射。"
#: doc/classes/ReflectionProbe.xml:7
-#, fuzzy
msgid ""
"Capture its surroundings as a dual paraboloid image, and stores versions of "
"it with increasing levels of blur to simulate different material "
@@ -56866,17 +58653,22 @@ msgid ""
"the same time for a single mesh. If possible, split up large meshes that "
"span over multiple reflection probes into smaller ones."
msgstr ""
-"将其周围环境æ•获为立方体图,并存储其版本,使其模糊程度增加,以模拟ä¸åŒçš„ææ–™"
-"粗糙度。\n"
-"[ReflectionProbe] 用于以性能为代价创建高质é‡çš„å射。它å¯ä»¥ä¸Ž [GIProbe] å’Œå±å¹•"
-"空间å射相结åˆï¼Œå®žçŽ°é«˜è´¨é‡çš„å射。[ReflectionProbe]渲染其[member cull_mask]中"
-"的所有对象,因此更新它们å¯èƒ½ç›¸å½“昂贵。最好用é‡è¦çš„陿€å¯¹è±¡æ›´æ–°å®ƒä»¬ä¸€æ¬¡ï¼Œç„¶åŽ"
-"放下它们。"
+"å°†å…¶å‘¨å›´çŽ¯å¢ƒæ•æ‰ä¸ºåŒæŠ›ç‰©é¢å›¾åƒï¼Œå¹¶ä»¥è¶Šæ¥è¶Šé«˜çš„æ¨¡ç³Šåº¦å­˜å‚¨å…¶ç‰ˆæœ¬ï¼Œä»¥æ¨¡æ‹Ÿä¸åŒçš„"
+"æè´¨ç²—糙度。\n"
+"[ReflectionProbe]用于以性能为代价创建高质é‡çš„å射。它å¯ä»¥ä¸Ž[GIProbe]å’Œå±å¹•空"
+"é—´å射相结åˆï¼Œå®žçŽ°é«˜è´¨é‡çš„å射。[ReflectionProbe]渲染其[member cull_mask]内的"
+"所有对象,所以更新它们å¯èƒ½ç›¸å½“消耗资æºã€‚最好是用é‡è¦çš„陿€å¯¹è±¡æ›´æ–°ä¸€æ¬¡ï¼Œç„¶åŽ"
+"å°±ä¸åŽ»ç®¡äº†ã€‚\n"
+"[b]注æ„:[/b] 默认情况下,Godotåªä¼šæ¸²æŸ“16个åå°„æŽ¢é’ˆã€‚å¦‚æžœéœ€è¦æ›´å¤šï¼Œå¯ä»¥å¢žåР图"
+"集的细分数é‡ã€‚这个设置å¯ä»¥åœ¨[member ProjectSettings.rendering/quality/"
+"reflections/atlas_subdiv]找到。\n"
+"[b]注æ„:[/b] 对于一个网格,GLES2åŽç«¯åªèƒ½åŒæ—¶æ˜¾ç¤ºä¸¤ä¸ªå射探针。如果å¯èƒ½çš„è¯ï¼Œ"
+"把跨越多个å射探针的大网格分割æˆå°ç½‘格。"
#: doc/classes/ReflectionProbe.xml:13
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/reflection_probes.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/3d/reflection_probes.html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/3d/reflection_probes.html"
#: doc/classes/ReflectionProbe.xml:19
msgid ""
@@ -56888,7 +58680,6 @@ msgstr ""
"得在矩形房间中的åå°„çœ‹èµ·æ¥æ›´æ­£ç¡®ã€‚"
#: doc/classes/ReflectionProbe.xml:22
-#, fuzzy
msgid ""
"Sets the cull mask which determines what objects are drawn by this probe. "
"Every [VisualInstance] with a layer included in this cull mask will be "
@@ -56896,9 +58687,9 @@ msgid ""
"likely to take up a lot of space in the reflection in order to save on "
"rendering cost."
msgstr ""
-"设置剔除蒙版,它决定了探测所绘制的对象。æ¯ä¸ªåŒ…å«åœ¨è¿™ä¸ªå‰”除蒙版中的图层"
-"[VisualInstance3D]éƒ½å°†è¢«æŽ¢é’ˆæ¸²æŸ“ã€‚ä¸ºäº†èŠ‚çœæ¸²æŸ“æˆæœ¬ï¼Œæœ€å¥½åªåŒ…å«å¤§çš„物体,因为"
-"它们很å¯èƒ½ä¼šå ç”¨å¤§é‡çš„å射空间。"
+"设置剔除é®ç½©ï¼Œç¡®å®šæ­¤æŽ¢é’ˆç»˜åˆ¶çš„对象。这个剔除蒙版中包å«ä¸€ä¸ªå±‚çš„æ¯ä¸ª "
+"[VisualInstance] 都将由探测器渲染。最好åªåŒ…å«å¯èƒ½åœ¨å射中å ç”¨å¤§é‡ç©ºé—´çš„大物"
+"ä½“ï¼Œä»¥èŠ‚çœæ¸²æŸ“æˆæœ¬ã€‚"
#: doc/classes/ReflectionProbe.xml:25
msgid ""
@@ -56928,7 +58719,7 @@ msgstr "定义å射强度。"
msgid ""
"Sets the ambient light color to be used when this probe is set to [member "
"interior_enable]."
-msgstr ""
+msgstr "设置环境光的颜色,当此探针被设置为[member interior_enable]时使用。"
#: doc/classes/ReflectionProbe.xml:37
msgid ""
@@ -56936,22 +58727,24 @@ msgid ""
"light for this reflection probe when set to [member interior_enable]. Useful "
"so that ambient light matches the color of the room."
msgstr ""
+"当设置为 [member internal_enable] 时,设置å射对该å射探测器的环境光的影å“程"
+"度的贡献值。环境光与房间的颜色相匹é…中很有用。"
#: doc/classes/ReflectionProbe.xml:40
msgid ""
"Sets the energy multiplier for this reflection probe's ambient light "
"contribution when set to [member interior_enable]."
msgstr ""
+"当设置为[member interior_enable]时,为该å射探针的环境光贡献设置能é‡ä¹˜æ•°ã€‚"
#: doc/classes/ReflectionProbe.xml:43
-#, fuzzy
msgid ""
"If [code]true[/code], reflections will ignore sky contribution. Ambient "
"lighting is then controlled by the [code]interior_ambient_*[/code] "
"properties."
msgstr ""
-"如果 [code]true[/code],å射将忽略天空因素。等效于 [member ReflectionProbe."
-"interior]。"
+"如果[code]true[/code],å射将忽略天空的贡献。然åŽçŽ¯å¢ƒç…§æ˜Žç”±"
+"[code]internal_ambient_*[/code]属性控制。"
#: doc/classes/ReflectionProbe.xml:46
msgid ""
@@ -56974,9 +58767,8 @@ msgstr ""
"ALWAYS](一直)。"
#: doc/classes/ReflectionProbe.xml:57
-#, fuzzy
msgid "Update the probe once on the next frame."
-msgstr "更新一次视窗,然åŽè®¾ç½®ä¸ºç¦ç”¨ã€‚"
+msgstr "在下一帧更新一次探针。"
#: doc/classes/ReflectionProbe.xml:60
msgid ""
@@ -56992,7 +58784,6 @@ msgid "Class for searching text for patterns using regular expressions."
msgstr "ä½¿ç”¨æ­£åˆ™è¡¨è¾¾å¼æœç´¢æ–‡æœ¬çš„类。"
#: modules/regex/doc_classes/RegEx.xml:7
-#, fuzzy
msgid ""
"A regular expression (or regex) is a compact language that can be used to "
"recognise strings that follow a specific pattern, such as URLs, email "
@@ -57059,11 +58850,11 @@ msgid ""
"[b]Tip:[/b] You can use [url=https://regexr.com/]Regexr[/url] to test "
"regular expressions online."
msgstr ""
-"正则表达å¼ï¼ˆæˆ–ç§°regex)是一ç§ç´§å‡‘的语言,å¯ç”¨äºŽè¯†åˆ«ç¬¦åˆç‰¹å®šè¡¨è¾¾å¼çš„字符串,如"
+"正则表达å¼ï¼ˆæˆ–ç§°regex)是一ç§ç´§å‡‘的语言,å¯ç”¨äºŽè¯†åˆ«éµå¾ªç‰¹å®šæ¨¡å¼çš„字符串,如"
"URLã€ç”µå­é‚®ä»¶åœ°å€ã€å®Œæ•´å¥å­ç­‰ã€‚例如,一个[code]ab[0-9][/code]的正则表达å¼å¯ä»¥"
"找到[code]ab[/code]åŽé¢è·Ÿç€[code]0[/code]到[code]9[/code]的任何数字的字符串。"
"è¦æƒ³æ›´æ·±å…¥åœ°äº†è§£ï¼Œä½ å¯ä»¥å¾ˆå®¹æ˜“地在互è”网上找到å„ç§æ•™ç¨‹å’Œè¯¦ç»†è§£é‡Šã€‚\n"
-"首先,在使用RegEx对象之å‰ï¼Œéœ€è¦ç”¨[method compile]对其进行æœç´¢æ¨¡å¼çš„编译。\n"
+"首先,在使用RegEx对象之å‰ï¼Œéœ€è¦ç”¨[method compile] 对其进行æœç´¢æ¨¡å¼çš„编译。\n"
"[codeblock]\n"
"var regex = RegEx.new()\n"
"regex.compile(\"\\\\w-(\\\\d+)\")\n"
@@ -57071,7 +58862,7 @@ msgstr ""
"在为表达å¼è½¬ä¹‰ä¹‹å‰ï¼Œå¿…须先为GDScript转义æœç´¢æ¨¡å¼ã€‚例如,[code]compile(\"\\\\d"
"+\")[/code]会被RegEx读æˆ[code]\\d+[/code]ã€‚åŒæ ·ï¼Œ[code]compile(\"\\\"(?:\\\\"
"\\\\.|[^\\\"])*\\\")[/code]会被读作[code]\"(?:\\.|[^\"])*\"[/code]。\n"
-"使用[method search],你å¯ä»¥åœ¨ç»™å®šçš„æ–‡æœ¬ä¸­æ‰¾åˆ°è¡¨è¾¾å¼ã€‚如果找到一个表达å¼ï¼Œå°†è¿”"
+"使用 [method search] ,你å¯ä»¥åœ¨ç»™å®šçš„æ–‡æœ¬ä¸­åŒ¹é…模å¼ã€‚如果匹é…到一个模å¼ï¼Œå°†è¿”"
"回[RegExMatch],你å¯ä»¥ä½¿ç”¨[method RegExMatch.get_string]å’Œ[method RegExMatch."
"get_start]等方法检索结果的细节。\n"
"[codeblock]\n"
@@ -57079,10 +58870,10 @@ msgstr ""
"regex.compile(\"\\\\w-(\\\\d+)\")\n"
"var result = regex.search(\"abc n-0123\")\n"
"if result:\n"
-" print(result.get_string()) # 这会输出n-0123\n"
+" print(result.get_string()) # Would print n-0123\n"
"[/codeblock]\n"
"æ•获组的结果[code]()[/code]å¯ä»¥é€šè¿‡å‘[RegExMatch]中的å„ç§æ–¹æ³•ä¼ é€’ç»„å·æ¥æ£€ç´¢ã€‚"
-"组0是默认的,并且将总是指整个表达å¼ã€‚在上é¢çš„例å­ä¸­ï¼Œè°ƒç”¨[code]result."
+"默认是组0,并且将总是指整个模å¼ã€‚在上é¢çš„例å­ä¸­ï¼Œè°ƒç”¨[code]result."
"get_string(1)[/code]会得到[code]0123[/code]。\n"
"这个版本的RegEx也支æŒå‘½åçš„æ•获组,åç§°å¯ä»¥ç”¨æ¥æ£€ç´¢ç»“果。如果两个或更多的组有"
"相åŒçš„å称,那么这个åç§°å°†åªæŒ‡ç¬¬ä¸€ä¸ªæœ‰åŒ¹é…的组。\n"
@@ -57091,26 +58882,26 @@ msgstr ""
"regex.compile(\"d(?<digit>[0-9]+)|x(?<digit>[0-9a-f]+)\")\n"
"var result = regex.search(\"the number is x2f\")\n"
"if result:\n"
-" print(result.get_string(\"digit\")) # 这会输出 2f\n"
+" print(result.get_string(\"digit\")) # Would print 2f\n"
"[/codeblock]\n"
-"如果你需è¦å¤„ç†å¤šä¸ªç»“果,[method search_all]ä¼šç”Ÿæˆæ‰€æœ‰ä¸é‡å çš„结果的列表。为了"
-"方便起è§ï¼Œè¿™å¯ä»¥å’Œä¸€ä¸ª[code]for[/code]循环结åˆèµ·æ¥ã€‚\n"
+"如果你需è¦å¤„ç†å¤šä¸ªç»“果,[method search_all]会生æˆä¸€ä¸ªæ‰€æœ‰ä¸é‡å çš„结果列表。为"
+"了方便起è§ï¼Œè¿™å¯ä»¥å’Œä¸€ä¸ª[code]for[/code]循环结åˆèµ·æ¥ã€‚\n"
"[codeblock]\n"
"for result in regex.search_all(\"d01, d03, d0c, x3f and x42\"):\n"
" print(result.get_string(\"digit\"))\n"
-"# 这会输出 01 03 0 3f 42\n"
+"# Would print 01 03 0 3f 42\n"
"[/codeblock]\n"
"[b]使用RegEx分割字符串的例å­ï¼š[/b]\n"
"[codeblock]\n"
"var regex = RegEx.new()\n"
"regex.compile(\"\\\\S+\") # Negated whitespace character class.\n"
"var results = []\n"
-"for match in regex.search_all(\"One Two \\n\\tThree\"):\n"
-" results.push_back(match.get_string())\n"
-"# `results`æ•°ç»„çŽ°åœ¨åŒ…å« \"One\", \"Two\", \"Three\".\n"
+"for result in regex.search_all(\"One Two \\n\\tThree\"):\n"
+" results.push_back(result.get_string())\n"
+"# The `results` array now contains \"One\", \"Two\", \"Three\".\n"
"[/codeblock]\n"
"[b]注æ„:[/b] Godotçš„regex实现是基于[url=https://www.pcre.org/]PCRE2[/url] "
-"库。你å¯ä»¥æŸ¥çœ‹å®Œæ•´çš„表达å¼å‚考[url=https://www.pcre.org/current/doc/html/"
+"库。你å¯ä»¥æŸ¥çœ‹å®Œæ•´çš„æ¨¡å¼å‚考[url=https://www.pcre.org/current/doc/html/"
"pcre2pattern.html]这里[/url]。\n"
"[b]æç¤ºï¼š[/b] ä½ å¯ä»¥ä½¿ç”¨[url=https://regexr.com/]Regexr[/url]æ¥åœ¨çº¿æµ‹è¯•正则表"
"è¾¾å¼ã€‚"
@@ -57381,8 +59172,8 @@ msgid ""
"https://docs.godotengine.org/en/3.4/getting_started/step_by_step/resources."
"html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/getting_started/step_by_step/resources."
-"html"
+"https://docs.godotengine.org/zh_CN/stable/getting_started/step_by_step/"
+"resources.html"
#: doc/classes/Resource.xml:18
msgid ""
@@ -57468,7 +59259,7 @@ msgstr ""
"这个方法会被调用。它的行为å¯ä»¥é€šè¿‡è¦†ç›–脚本中的[method _setup_local_to_scene]"
"进行定制。\n"
"对于大多数资æºï¼Œè¯¥æ–¹æ³•䏿‰§è¡Œä»»ä½•基本逻辑。[ViewportTexture]执行自定义逻辑以正"
-"确设置本地视å£ä¸­çš„代ç†çº¹ç†å’Œæ ‡å¿—。"
+"确设置本地视窗中的代ç†çº¹ç†å’Œæ ‡å¿—。"
#: doc/classes/Resource.xml:66
msgid ""
@@ -58068,23 +59859,40 @@ msgid ""
"emoji) are [i]not[/i] supported on Windows. They will display as unknown "
"characters instead. This will be resolved in Godot 4.0."
msgstr ""
+"富文本å¯ä»¥åŒ…å«è‡ªå®šä¹‰æ–‡æœ¬ã€å­—体ã€å›¾åƒå’Œä¸€äº›åŸºæœ¬æ ¼å¼ã€‚标签将这些作为内部标签堆"
+"栈进行管ç†ã€‚它还å¯ä»¥é€‚应给定的宽度/高度。\n"
+"[b]注æ„:[/b] 为 [member bbcode_text] 设置内容会清除标签堆栈并从属性的内容中"
+"é‡å»ºå®ƒã€‚对 [member bbcode_text] 所åšçš„ä»»ä½•ç¼–è¾‘éƒ½å°†åˆ é™¤ä»Žå…¶ä»–æ‰‹åŠ¨æ¥æºï¼ˆä¾‹å¦‚ "
+"[method append_bbcode] å’Œ [code]push_*[/code] / [method pop] 方法)所åšçš„å…ˆå‰"
+"编辑。\n"
+"[b]注æ„:[/b] RichTextLabel 䏿”¯æŒçº ç¼ çš„ BBCode 标签。例如,ä¸è¦ä½¿ç”¨ [code]"
+"[b]bold[i]bold italic[/b]italic[/i][/code],而是使用 [code][b]bold[i]bold "
+"italic[/i][/ b][i]italic[/i][/code]。\n"
+"[b]注æ„:[/b] [code]push_*/pop[/code] 函数ä¸ä¼šå½±å“BBCode。\n"
+"[b]注æ„:[/b] 与 [Label] ä¸åŒï¼ŒRichTextLabel 没有 [i] 属性 [/i] 将文本水平对"
+"é½åˆ°ä¸­å¿ƒã€‚相å,å¯ç”¨ [member bbcode_enabled] 并将文本括在 [code][center][/"
+"code] 标签中,如下所示:[code][center]Example[/center][/code]。目å‰ä¹Ÿæ²¡æœ‰åž‚ç›´"
+"坹齿–‡æœ¬çš„内置方法,但这å¯ä»¥é€šè¿‡ä¾èµ–锚点/容器和 [member fit_content_height] "
+"å±žæ€§æ¥æ¨¡æ‹Ÿã€‚\n"
+"[b]注æ„:[/b] [code]0xffff[/code] 之åŽçš„ Unicode 字符(例如大多数表情符å·ï¼‰"
+"在 Windows 上 [i] 䏿”¯æŒ [/i]。它们将显示为未知字符。这将在 Godot 4.0 中解"
+"决。"
#: doc/classes/RichTextLabel.xml:16
msgid "https://godotengine.org/asset-library/asset/132"
msgstr "https://godotengine.org/asset-library/asset/132"
#: doc/classes/RichTextLabel.xml:26
-#, fuzzy
msgid ""
"Adds an image's opening and closing tags to the tag stack, optionally "
"providing a [code]width[/code] and [code]height[/code] to resize the image.\n"
"If [code]width[/code] or [code]height[/code] is set to 0, the image size "
"will be adjusted in order to keep the original aspect ratio."
msgstr ""
-"将图åƒçš„开头和结尾标签添加到标签堆中,å¯é€‰æ‹©æä¾›[code]width[/code]å’Œ"
-"[code]height[/code]æ¥è°ƒæ•´å›¾åƒçš„大å°ï¼Œå¹¶æä¾›[code]color[/code]æ¥ä¿®æ”¹å›¾åƒã€‚\n"
-"如果[code]width[/code]或[code]height[/code]被设置为0,图åƒçš„大å°å°†è¢«è°ƒæ•´ï¼Œä»¥"
-"ä¿æŒåŽŸå§‹é•¿å®½æ¯”ã€‚"
+"将图åƒçš„开头和结尾标签添加到标签堆中,å¯ä»¥é€‰æ‹©æä¾›[code]width[/code]å’Œ"
+"[code]height[/code]æ¥è°ƒæ•´å›¾åƒçš„大å°ã€‚\n"
+"如果[code]width[/code]或[code]height[/code]被设置为0,图åƒçš„大å°è¢«è°ƒæ•´ä¸ºä¿æŒ"
+"原始长宽比。"
#: doc/classes/RichTextLabel.xml:34
msgid "Adds raw non-BBCode-parsed text to the tag stack."
@@ -58101,6 +59909,12 @@ msgid ""
"a future method call, append the [member bbcode_text] instead of using "
"[method append_bbcode]."
msgstr ""
+"è§£æž [code]bbcode[/code] å¹¶æ ¹æ®éœ€è¦å°†æ ‡ç­¾æ·»åŠ åˆ°æ ‡ç­¾å †æ ˆä¸­ã€‚è¿”å›žè§£æžç»“果,æˆåŠŸ"
+"则返回[constant OK]。\n"
+"[b]注æ„:[/b] 使用此方法,您无法关闭在之å‰çš„ [method append_bbcode] 调用中打"
+"å¼€çš„æ ‡ç­¾ã€‚è¿™æ ·åšæ˜¯ä¸ºäº†æé«˜æ€§èƒ½ï¼Œç‰¹åˆ«æ˜¯åœ¨æ›´æ–°å¤§åž‹ RichTextLabels æ—¶ï¼Œå› ä¸ºæ¯æ¬¡"
+"é‡å»ºæ•´ä¸ª BBCode 会更慢。如果您ç»å¯¹éœ€è¦åœ¨å°†æ¥çš„æ–¹æ³•调用中关闭标签,请附加 "
+"[member bbcode_text] è€Œä¸æ˜¯ä½¿ç”¨ [method append_bbcode]。"
#: doc/classes/RichTextLabel.xml:48
msgid "Clears the tag stack and sets [member bbcode_text] to an empty string."
@@ -58129,6 +59943,9 @@ msgid ""
"may cause a crash. If you wish to hide it or any of its children, use their "
"[member CanvasItem.visible] property."
msgstr ""
+"返回垂直滚动æ¡ã€‚\n"
+"[b]警告:[/b] 这是一个必需的内部节点,删除和释放它å¯èƒ½ä¼šå¯¼è‡´å´©æºƒã€‚如果您希望"
+"éšè—它或其任何å­é¡¹ï¼Œè¯·ä½¿ç”¨å®ƒä»¬çš„ [member CanvasItem.visible] 属性。"
#: doc/classes/RichTextLabel.xml:79
msgid "Returns the number of visible lines."
@@ -58298,9 +60115,11 @@ msgid ""
"add_text] will reset this to [code]false[/code]. Use instead [method "
"append_bbcode] to preserve BBCode formatting."
msgstr ""
+"如果 [code]true[/code],标签使用 BBCode æ ¼å¼ã€‚\n"
+"[b]注æ„:[/b] å°è¯•使用 [method add_text] 更改 [RichTextLabel] 的文本会将其é‡"
+"置为 [code]false[/code]。改用 [method append_bbcode] æ¥ä¿ç•™ BBCode æ ¼å¼ã€‚"
#: doc/classes/RichTextLabel.xml:245
-#, fuzzy
msgid ""
"The label's text in BBCode format. Is not representative of manual "
"modifications to the internal tag stack. Erases changes made by other "
@@ -58311,11 +60130,12 @@ msgid ""
"append_bbcode] for adding text instead, unless you absolutely need to close "
"a tag that was opened in an earlier method call."
msgstr ""
-"标签的文本为BBCodeæ ¼å¼ã€‚ä¸ä»£è¡¨å¯¹å†…部标签栈的手动修改。在编辑时,会删除其他方"
-"法所åšçš„修改。\n"
-"[b]注æ„:[/b] ä¸å»ºè®®ä½¿ç”¨[code]+=[/code]æ“作符和[code]bbcode_text[/code](例如"
-"[code]bbcode_text += \"some string\"[/code]),因为它å–代了整个文本,会导致速"
-"度é™ä½Žã€‚使用[method append_bbcode]æ¥ä»£æ›¿æ·»åŠ æ–‡æœ¬ã€‚"
+"BBCode æ ¼å¼çš„æ ‡ç­¾æ–‡æœ¬ã€‚ä¸ä»£è¡¨å¯¹å†…部标签栈的手动修改。编辑时擦除通过其他方法所"
+"åšçš„æ›´æ”¹ã€‚\n"
+"[b]注æ„:[/b] ä¸å»ºè®®å°† [code]+=[/code] è¿ç®—符与 [code]bbcode_text[/code] 一起"
+"使用(例如 [code]bbcode_text += \"some string\"[/code]ï¼‰ï¼Œå› ä¸ºå®ƒä¼šæ›¿æ¢æ•´ä¸ªæ–‡"
+"本并å¯èƒ½å¯¼è‡´é€Ÿåº¦å˜æ…¢ã€‚使用 [method append_bbcode] 代替添加文本,除éžä½ å¿…须关"
+"é—­åœ¨å…ˆå‰æ–¹æ³•调用中打开的标签。"
#: doc/classes/RichTextLabel.xml:249
msgid ""
@@ -58399,17 +60219,15 @@ msgstr ""
"[member bbcode_text]。"
#: doc/classes/RichTextLabel.xml:284
-#, fuzzy
msgid ""
"The restricted number of characters to display in the label. If [code]-1[/"
"code], all characters will be displayed.\n"
"[b]Note:[/b] Setting this property updates [member percent_visible] based on "
"current [method get_total_character_count]."
msgstr ""
-"è¦æ˜¾ç¤ºçš„字符范围,数值为0.0å’Œ1.0之间的[float]。当分é…一个超出范围的值时,它和"
-"分é…1.0是一样的。\n"
-"[b]注æ„:[/b] 设置这个属性会根æ®å½“å‰çš„[method get_total_character_count]æ›´æ–°"
-"[member visible_characters]。"
+"在标签中显示的字符数é™åˆ¶ã€‚如果[code]-1[/code],将显示所有字符。\n"
+"[b]注æ„:[/b] 设置此属性会根æ®å½“å‰çš„[method get_total_character_count]æ›´æ–°"
+"[member percent_visible]。"
#: doc/classes/RichTextLabel.xml:292
msgid ""
@@ -58538,15 +60356,14 @@ msgid "Handle for a [Resource]'s unique ID."
msgstr "[Resource] 的唯一 ID çš„å¥æŸ„。"
#: doc/classes/RID.xml:7
-#, fuzzy
msgid ""
"The RID type is used to access the unique integer ID of a resource. They are "
"opaque, which means they do not grant access to the associated resource by "
"themselves. They are used by and with the low-level Server classes such as "
"[VisualServer]."
msgstr ""
-"该RID类型用于访问资æºçš„唯一整数ID。它们是ä¸é€æ˜Žçš„,这æ„味ç€å®ƒä»¬æœ¬èº«å¹¶ä¸æŽˆäºˆå¯¹"
-"相关资æºçš„访问。它们被低级别的æœåŠ¡å™¨ç±»ä½¿ç”¨ï¼Œå¦‚[RenderingServer]。"
+"RID类型用于访问资æºçš„唯一整数ID。它们ä¸é€æ˜Žï¼Œè¿™æ„味ç€å…¶æœ¬èº«å¹¶ä¸æŽˆäºˆå¯¹ç›¸å…³èµ„æº"
+"的访问。它们被低级别的æœåŠ¡ç±»ä½¿ç”¨ï¼Œå¦‚[VisualServer]。"
#: doc/classes/RID.xml:16
msgid ""
@@ -58699,7 +60516,7 @@ msgid ""
"details about damping."
msgstr ""
"阻尼刚体的旋转力。\n"
-"关于阻尼的更多细节,请å‚è§[member ProjectSettings.physics/3d/"
+"关于阻尼的更多细节,请å‚阅[member ProjectSettings.physics/3d/"
"default_angular_damp]。"
#: doc/classes/RigidBody.xml:115
@@ -58761,8 +60578,8 @@ msgid ""
"If [code]true[/code], the RigidBody will emit signals when it collides with "
"another RigidBody. See also [member contacts_reported]."
msgstr ""
-"如果[code]true[/code],当RigidBody与å¦ä¸€ä¸ªRigidBody碰撞时会å‘出信å·ã€‚å¦è§æŽ¥è§¦"
-"报告[member contacts_reported]。"
+"如果[code]true[/code],当RigidBody与å¦ä¸€ä¸ªRigidBody碰撞时会å‘出信å·ã€‚å‚阅"
+"[member contacts_reported]。"
#: doc/classes/RigidBody.xml:147
msgid ""
@@ -58800,7 +60617,7 @@ msgid ""
"function, if defined."
msgstr ""
"如果 [code]true[/code],则该物体的内力积分将被ç¦ç”¨ï¼ˆå¦‚é‡åŠ›æˆ–ç©ºæ°”æ‘©æ“¦ï¼‰ã€‚é™¤äº†"
-"碰撞å“åº”ä¹‹å¤–ï¼Œèº«ä½“å°†ä»…æ ¹æ® [method _integrate_forces] 函数确定的方å¼ç§»åŠ¨ï¼ˆå¦‚"
+"碰撞å“åº”ä¹‹å¤–ï¼Œç‰©ä½“å°†ä»…æ ¹æ® [method _integrate_forces] 函数确定的方å¼ç§»åŠ¨ï¼ˆå¦‚"
"果已定义)。"
#: doc/classes/RigidBody.xml:158
@@ -58844,9 +60661,9 @@ msgid ""
"different granularity. Use [method _integrate_forces] as your process loop "
"for precise control of the body state."
msgstr ""
-"物体的线速度。å¯ä»¥å¶å°”使用,但是[b]ä¸è¦æ¯ä¸€å¸§éƒ½è®¾ç½®å®ƒ[/b],因为物ç†å­¦å¯èƒ½åœ¨å¦"
-"一个线程中è¿è¡Œï¼Œå¹¶ä¸”以ä¸åŒé—´éš”çš„è¿è¡Œã€‚使用[method _integrate_forces]作为你的"
-"进程循环,以精确控制身体状æ€ã€‚"
+"物体的线速度。å¯ä»¥å¶å°”使用,但是[b]ä¸è¦æ¯ä¸€å¸§éƒ½è®¾ç½®å®ƒ[/b],因为物ç†å¯èƒ½åœ¨å¦ä¸€"
+"个线程中è¿è¡Œï¼Œå¹¶ä¸”以ä¸åŒçš„间隔。使用[method _integrate_forces]作为你的进程循"
+"环,以精确控制物体状æ€ã€‚"
#: doc/classes/RigidBody.xml:172 doc/classes/RigidBody2D.xml:149
msgid "The body's mass."
@@ -58885,7 +60702,6 @@ msgstr ""
"置。"
#: doc/classes/RigidBody.xml:192
-#, fuzzy
msgid ""
"Emitted when a collision with another [PhysicsBody] or [GridMap] occurs. "
"Requires [member contact_monitor] to be set to [code]true[/code] and [member "
@@ -58894,15 +60710,14 @@ msgid ""
"[code]body[/code] the [Node], if it exists in the tree, of the other "
"[PhysicsBody] or [GridMap]."
msgstr ""
-"当一个物体与这个物体接触时å‘出。需è¦å°† [member contact_monitor] 设置为 "
-"[code]true[/code] 并将 [member contacts_reported] 设置为足够高以检测所有碰"
-"撞。\n"
-"此信å·ä¸ä»…接收与此碰撞的物体,还接收其 [RID] ([code]body_id[/code])ã€ç¢°æ’žç‰©ä½“"
-"的形状索引 ([code]body_shape[/code]) 和形状索引从这个身体 "
-"([code]local_shape[/code]) å¦ä¸€ä¸ªèº«ä½“碰撞。"
+"当与å¦ä¸€ä¸ª[PhysicsBody]或[GridMap]å‘生碰撞时触å‘。需è¦å°†[member "
+"contact_monitor]设置为[code]true[/code],并且将[member contacts_reported]设置"
+"得足够高以检测所有的碰撞。如果[MeshLibrary]有碰撞[Shape],[GridMap]就会被检测"
+"到。\n"
+"[code]body[/code]的[Node],如果它存在于树中,则是其他[PhysicsBody]或[GridMap]"
+"的节点。"
#: doc/classes/RigidBody.xml:199
-#, fuzzy
msgid ""
"Emitted when the collision with another [PhysicsBody] or [GridMap] ends. "
"Requires [member contact_monitor] to be set to [code]true[/code] and [member "
@@ -58911,15 +60726,14 @@ msgid ""
"[code]body[/code] the [Node], if it exists in the tree, of the other "
"[PhysicsBody] or [GridMap]."
msgstr ""
-"当一个物体与这个物体接触时å‘出。需è¦å°† [member contact_monitor] 设置为 "
-"[code]true[/code] 并将 [member contacts_reported] 设置为足够高以检测所有碰"
-"撞。\n"
-"此信å·ä¸ä»…接收与此碰撞的物体,还接收其 [RID] ([code]body_id[/code])ã€ç¢°æ’žç‰©ä½“"
-"的形状索引 ([code]body_shape[/code]) 和形状索引从这个身体 "
-"([code]local_shape[/code]) å¦ä¸€ä¸ªèº«ä½“碰撞。"
+"当与å¦ä¸€ä¸ª[PhysicsBody]或[GridMap]çš„ç¢°æ’žç»“æŸæ—¶è§¦å‘。需è¦å°†[member "
+"contact_monitor]设置为[code]true[/code],并且将[member contacts_reported]设置"
+"得足够高以检测到所有的碰撞。如果[MeshLibrary]有碰撞[Shape],[GridMap]就会被检"
+"测到。\n"
+"[code]body[/code]的[Node],如果它存在于树中,则是其他[PhysicsBody]或[GridMap]"
+"的节点。"
#: doc/classes/RigidBody.xml:209
-#, fuzzy
msgid ""
"Emitted when one of this RigidBody's [Shape]s collides with another "
"[PhysicsBody] or [GridMap]'s [Shape]s. Requires [member contact_monitor] to "
@@ -58942,18 +60756,23 @@ msgid ""
"[ConcavePolygonShape] with Bullet physics if you need shape indices."
msgstr ""
"当[PhysicsBody]或[GridMap]的一个形状[Shape]进入这个区域的一个形状[Shape]æ—¶å‘"
-"出的。需è¦å°†ç›‘控[member monitoring]设置为[code]true[/code]。如果[MeshLibrary]"
-"有碰撞形状[Shape],就会检测到[GridMap]。\n"
-"[code]body_id[/code]傿•°æ˜¯[PhysicsServer]使用的[PhysicsBody]或[MeshLibrary]çš„"
-"[CollisionObject]的RID。\n"
-"[code]body[/code] 傿•°æ˜¯[PhysicsBody]或[GridMap]çš„[Node],如果它存在于树"
-"中。\n"
-"[code]body_shape[/code] 傿•°æ˜¯ç”±[PhysicsServer]使用的[PhysicsBody]或[GridMap]"
-"的[Shape]的索引。\n"
-"[code]local_shape[/code] 傿•°æ˜¯[PhysicsServer]使用的这个区域的[Shape]的索引。"
+"出的。需è¦å°†ç›‘控[member monitoring]设置为[code]true[/code],且[member "
+"contacts_reported]设置的足够高以检测所有碰撞。如果[MeshLibrary]有碰撞形状"
+"[Shape],就会检测到[GridMap]。\n"
+"[code]body_id[/code]由[PhysicsServer]使用的其他[PhysicsBody]或[MeshLibrary]的"
+"[CollisionObject]的[RID]。\n"
+"[code]body[/code] 其他[PhysicsBody]或[GridMap]的[Node](如果它存在于树中)。\n"
+"[code]body_shape_index[/code] 由[PhysicsServer]使用的其他[PhysicsBody]或"
+"[GridMap]的[Shape]的索引。用 [code]body."
+"shape_owner_get_owner(body_shape_index)[/code]èŽ·å– [CollisionShape] 节点。\n"
+"[code]local_shape[/code] 由[PhysicsServer]使用的这个刚体(RigidBody)的[Shape]"
+"的索引。用[code]self.shape_owner_get_owner(local_shape_index)[/code]获å–"
+"[CollisionShape]节点。\n"
+"[b]注æ„:[/b]当使用[ConcavePolygonShape]时,对于å­å¼¹çš„物ç†è¿ç®—无法识别形状索"
+"引。如果你需è¦å½¢çŠ¶æŒ‡æ•°ï¼Œåœ¨ä½¿ç”¨[ConcavePolygonShape]和对于å­å¼¹çš„物ç†è¿ç®—时,ä¸"
+"è¦ä½¿ç”¨å¤šä¸ª[CollisionShape]。"
#: doc/classes/RigidBody.xml:223
-#, fuzzy
msgid ""
"Emitted when the collision between one of this RigidBody's [Shape]s and "
"another [PhysicsBody] or [GridMap]'s [Shape]s ends. Requires [member "
@@ -58976,16 +60795,25 @@ msgid ""
"[ConcavePolygonShape]. Don't use multiple [CollisionShape]s when using a "
"[ConcavePolygonShape] with Bullet physics if you need shape indices."
msgstr ""
-"当[PhysicsBody]或[GridMap]的一个形状[Shape]进入这个区域的一个形状[Shape]æ—¶å‘"
-"出的。需è¦å°†ç›‘控[member monitoring]设置为[code]true[/code]。如果[MeshLibrary]"
-"有碰撞形状[Shape],就会检测到[GridMap]。\n"
-"[code]body_id[/code]傿•°æ˜¯[PhysicsServer]使用的[PhysicsBody]或[MeshLibrary]çš„"
-"[CollisionObject]的RID。\n"
-"[code]body[/code] 傿•°æ˜¯[PhysicsBody]或[GridMap]çš„[Node],如果它存在于树"
+"当此 RigidBody çš„ [Shape] 之一与å¦ä¸€ä¸ª [PhysicsBody] 或 [GridMap] çš„ [Shape] "
+"ä¹‹é—´çš„ç¢°æ’žç»“æŸæ—¶å‘出。需è¦å°† [member contact_monitor] 设置为 [code]true[/"
+"code] 并将 [member contacts_reported] 设置为足够高以检测所有碰撞。如果 "
+"[MeshLibrary] 有碰撞 [Shape],就会检测到 [GridMap]。\n"
+"[code]body_rid[/code] [PhysicsServer] 使用的其他 [PhysicsBody] 或 "
+"[MeshLibrary] 的 [CollisionObject] 的 [RID]。如果网格具有 [Shape],则检测到 "
+"[GridMap]。\n"
+"[code]body[/code] 其他 [PhysicsBody] 或 [GridMap] 的 [Node],如果它存在于树"
"中。\n"
-"[code]body_shape[/code] 傿•°æ˜¯ç”±[PhysicsServer]使用的[PhysicsBody]或[GridMap]"
-"的[Shape]的索引。\n"
-"[code]local_shape[/code] 傿•°æ˜¯[PhysicsServer]使用的这个区域的[Shape]的索引。"
+"[code]body_shape_index[/code] [PhysicsServer] 使用的其他 [PhysicsBody] 或 "
+"[GridMap] 的 [Shape] 的索引。使用 [code]body."
+"shape_owner_get_owner(body_shape_index)[/code] æ¥èŽ·å– [CollisionShape] 节"
+"点。\n"
+"[code]local_shape_index[/code] [PhysicsServer] 使用的这个 RigidBody 的 "
+"[Shape] 的索引。使用 [code]self.shape_owner_get_owner(local_shape_index)[/"
+"code] èŽ·å– [CollisionShape] 节点。\n"
+"[b]注æ„:[/b]使用[ConcavePolygonShape]时,对于å­å¼¹çš„物ç†è¿ç®—无法识别形状索"
+"引。如果需è¦å½¢çŠ¶ç´¢å¼•ï¼Œè¯·ä¸è¦åœ¨ä½¿ç”¨å¸¦æœ‰å¯¹äºŽå­å¼¹çš„物ç†è¿ç®—çš„ "
+"[ConcavePolygonShape] 时使用多个 [CollisionShape]。"
#: doc/classes/RigidBody.xml:233 doc/classes/RigidBody2D.xml:208
msgid ""
@@ -59030,7 +60858,6 @@ msgid "A body that is controlled by the 2D physics engine."
msgstr "ç”±2D物ç†å¼•擎控制的实体。"
#: doc/classes/RigidBody2D.xml:7
-#, fuzzy
msgid ""
"This node implements simulated 2D physics. You do not control a RigidBody2D "
"directly. Instead, you apply forces to it (gravity, impulses, etc.) and the "
@@ -59052,17 +60879,18 @@ msgid ""
"The center of mass is always located at the node's origin without taking "
"into account the [CollisionShape2D] centroid offsets."
msgstr ""
-"这个节点实现了模拟的2D物ç†è¿ç®—。你ä¸èƒ½ç›´æŽ¥æŽ§åˆ¶ä¸€ä¸ªRigidBody2D。相å,你对它施"
-"加力(é‡åŠ›ã€å†²åŠ›ç­‰ï¼‰ï¼Œç‰©ç†æ¨¡æ‹Ÿä¼šæ ¹æ®å®ƒçš„è´¨é‡ã€æ‘©æ“¦åŠ›å’Œå…¶ä»–ç‰©ç†å±žæ€§æ¥è®¡ç®—出结"
-"果的è¿åŠ¨ã€‚\n"
-"一个RigidBody2D有4ç§è¡Œä¸º[member mode]。刚性ã€é™æ€ã€è§’色和è¿åŠ¨ã€‚\n"
-"[b]注æ„:[/b]ä½ ä¸åº”该æ¯ä¸€å¸§ç”šè‡³ç»å¸¸æ”¹å˜RigidBody2Dçš„[code]ä½ç½®[/code]或[code]"
-"线性速度[/code]。如果你需è¦ç›´æŽ¥å½±å“身体的状æ€ï¼Œè¯·ä½¿ç”¨[method "
-"_integrate_forces],它å…许你直接访问物ç†å­¦çжæ€ã€‚\n"
-"也请记ä½ï¼Œç‰©ç†ä½“管ç†è‡ªå·±çš„å˜æ¢ï¼Œå®ƒè¦†ç›–äº†ä½ è®¾ç½®çš„å˜æ¢ã€‚所以任何直接或间接的å˜"
-"æ¢ï¼ˆåŒ…括节点或其父体的缩放)将åªåœ¨ç¼–辑器中å¯è§ï¼Œå¹¶åœ¨è¿è¡Œæ—¶ç«‹å³é‡ç½®ã€‚\n"
-"如果你需è¦è¦†ç›–默认的物ç†è¡Œä¸ºæˆ–者在è¿è¡Œæ—¶æ·»åŠ ä¸€ä¸ªå˜æ¢ï¼Œä½ å¯ä»¥å†™ä¸€ä¸ªè‡ªå®šä¹‰çš„åˆ"
-"力。å‚阅[member custom_integrator]。"
+"该节点实现了模拟的2D物ç†ã€‚ä½ ä¸èƒ½ç›´æŽ¥æŽ§åˆ¶ä¸€ä¸ªRigidBody2D。而是,你对它施加力"
+"(é‡åŠ›ã€å†²åŠ›ç­‰ï¼‰ï¼Œç‰©ç†æ¨¡æ‹Ÿä¼šæ ¹æ®å®ƒçš„è´¨é‡ã€æ‘©æ“¦åŠ›å’Œå…¶ä»–ç‰©ç†å±žæ€§æ¥è®¡ç®—出è¿åŠ¨ç»“"
+"果。\n"
+"RigidBody2D有4ç§è¡Œä¸º[member mode]。刚性ã€é™æ€ã€è§’色和è¿åŠ¨ã€‚\n"
+"[b]注æ„:[/b] ä½ ä¸åº”该æ¯ä¸€å¸§æˆ–ç»å¸¸æ”¹å˜RigidBody2Dçš„[code]position[/code]或"
+"[code]linear_velocity[/code]。如果需è¦ç›´æŽ¥å½±å“物体的状æ€ï¼Œè¯·ä½¿ç”¨[method "
+"_integrate_forces],它å…许你直接访问物ç†çжæ€ã€‚\n"
+"è¦è®°ä½ï¼Œç‰©ç†ç‰©ä½“在自己管ç†å˜æ¢ï¼Œå®ƒä¼šè¦†ç›–ä½ çš„å˜æ¢è®¾ç½®ã€‚所以任何直接或间接的å˜"
+"æ¢ï¼ˆåŒ…括节点或其父级的缩放)将åªåœ¨ç¼–辑器中å¯è§ï¼Œå¹¶åœ¨è¿è¡Œæ—¶ç«‹å³é‡ç½®ã€‚\n"
+"如果你需è¦é‡è½½é»˜è®¤çš„物ç†è¡Œä¸ºæˆ–者在è¿è¡Œæ—¶æ·»åŠ å˜æ¢ï¼Œä½ å¯ä»¥å†™ä¸€ä¸ªè‡ªå®šä¹‰çš„åˆåŠ›ã€‚"
+"å‚阅[member custom_integrator]。\n"
+"è´¨é‡ä¸­å¿ƒæ€»æ˜¯ä½äºŽèŠ‚ç‚¹çš„åŽŸç‚¹ï¼Œè€Œä¸è€ƒè™‘[CollisionShape2D]中心点的å移。"
#: doc/classes/RigidBody2D.xml:15
msgid "https://godotengine.org/asset-library/asset/119"
@@ -59108,7 +60936,6 @@ msgstr ""
"行为很有用。"
#: doc/classes/RigidBody2D.xml:91
-#, fuzzy
msgid ""
"Returns [code]true[/code] if a collision would result from moving in the "
"given vector. [code]margin[/code] increases the size of the shapes involved "
@@ -59122,7 +60949,6 @@ msgstr ""
"è¯ï¼‰ã€‚"
#: doc/classes/RigidBody2D.xml:97
-#, fuzzy
msgid ""
"Damps the body's [member angular_velocity]. If [code]-1[/code], the body "
"will use the [b]Default Angular Damp[/b] defined in [b]Project > Project "
@@ -59130,9 +60956,11 @@ msgid ""
"See [member ProjectSettings.physics/2d/default_angular_damp] for more "
"details about damping."
msgstr ""
-"对物体的 [member angular_velocity]进行阻尼è¿ç®—。如果 [code]-1[/code],主体将"
+"对物体的 [member angular_velocity]进行阻尼è¿ç®—。如果 [code]-1[/code],物体将"
"使用 [b]Project(项目) > Project Settings(项目设置) > Physics(物ç†)> 2d[/b] 中"
-"定义的 [b]Default Angular Damp(默认角度阻尼)[/b]。"
+"定义的 [b]Default Angular Damp(默认角度阻尼)[/b]。\n"
+"有关阻尼的更多详细信æ¯ï¼Œè¯·å‚阅 [member ProjectSettings.physics/2d/"
+"default_angular_damp]。"
#: doc/classes/RigidBody2D.xml:104
msgid "The body's total applied force."
@@ -59150,17 +60978,21 @@ msgid ""
"[member mode] is [constant MODE_CHARACTER]. It can still be put to sleep "
"manually by setting its [member sleeping] property to [code]true[/code]."
msgstr ""
+"如果[code]true[/code],身体å¯ä»¥åœ¨æ²¡æœ‰è¿åŠ¨çš„æƒ…å†µä¸‹è¿›å…¥ç¡çœ æ¨¡å¼ã€‚è§[member "
+"sleeping]。\n"
+"[b]注æ„:[/b] RigidBody2D çš„[member mode] 为[constant MODE_CHARACTER] æ—¶ä¸ä¼š"
+"自动进入休眠模å¼ã€‚ä»ç„¶å¯ä»¥é€šè¿‡å°†å…¶ [member sleep] 属性设置为 [code]true[/"
+"code] æ¥æ‰‹åŠ¨ä½¿å…¶ä¼‘çœ ã€‚"
#: doc/classes/RigidBody2D.xml:118
msgid ""
"If [code]true[/code], the body will emit signals when it collides with "
"another RigidBody2D. See also [member contacts_reported]."
msgstr ""
-"如果[code]true[/code],则物体在与å¦ä¸€ä¸ªRigidBody2D碰撞时会å‘出信å·ã€‚å¦è§"
+"如果[code]true[/code],则物体在与å¦ä¸€ä¸ªRigidBody2D碰撞时会å‘出信å·ã€‚å‚阅"
"[member contacts_reported]。"
#: doc/classes/RigidBody2D.xml:121
-#, fuzzy
msgid ""
"The maximum number of contacts that will be recorded. Requires [member "
"contact_monitor] to be set to [code]true[/code].\n"
@@ -59170,8 +61002,8 @@ msgid ""
msgstr ""
"将被记录的最大接触次数。需è¦å°† [member contact_monitor] 设置为 [code]true[/"
"code]。\n"
-"[b]注:[/b]接触次数与碰撞次数ä¸åŒã€‚平行边之间的碰撞将导致两个接触(æ¯ç«¯ä¸€"
-"个),平行é¢ä¹‹é—´çš„碰撞将导致四个接触(æ¯ä¸ªè§’一个)。"
+"[b]注:[/b]接触次数与碰撞次数ä¸åŒã€‚平行边之间的碰撞将æ„味ç€ä¸¤ä¸ªæŽ¥è§¦ï¼ˆæ¯ç«¯ä¸€"
+"个),平行é¢ä¹‹é—´çš„碰撞将æ„味ç€å››ä¸ªæŽ¥è§¦ï¼ˆæ¯ä¸ªè§’一个)。"
#: doc/classes/RigidBody2D.xml:125
msgid ""
@@ -59197,14 +61029,15 @@ msgstr ""
"[method _integrate_forces] 函数确定的方å¼ç§»åŠ¨ã€‚"
#: doc/classes/RigidBody2D.xml:132
-#, fuzzy
msgid ""
"The body's friction. Values range from [code]0[/code] (frictionless) to "
"[code]1[/code] (maximum friction).\n"
"Deprecated, use [member PhysicsMaterial.friction] instead via [member "
"physics_material_override]."
msgstr ""
-"物体的摩擦。å–值范围从[code]0[/code](无摩擦)到[code]1[/code](最大摩擦)。"
+"物体的摩擦。å–值范围从[code]0[/code](无摩擦)到[code]1[/code](最大摩擦)。\n"
+"已弃用,通过 [member Physics_material_override] 使用 [member PhysicsMaterial."
+"friction]。"
#: doc/classes/RigidBody2D.xml:136
msgid ""
@@ -59224,12 +61057,11 @@ msgid ""
"this function allows you to set a custom value. Set 0 inertia to return to "
"automatically computing it."
msgstr ""
-"物体的惯性矩。这就åƒè´¨é‡ï¼Œä½†å¯¹äºŽæ—‹è½¬æ¥è¯´ï¼šå®ƒå†³å®šäº†æ—‹è½¬èº«ä½“需è¦å¤šå¤§çš„力矩。惯"
-"性矩通常是由质é‡å’Œå½¢çŠ¶è‡ªåŠ¨è®¡ç®—å‡ºæ¥çš„,但是这个函数å…许你设置一个自定义值。设"
-"ç½®0惯性会切æ¢å›žè‡ªåŠ¨è®¡ç®—ã€‚"
+"物体的惯性力矩。这就åƒè´¨é‡ï¼Œä½†å¯¹äºŽæ—‹è½¬æ¥è¯´ï¼šå®ƒå†³å®šäº†æ—‹è½¬ç‰©ä½“需è¦å¤šå¤§çš„力矩。"
+"惯性力矩通常是由质é‡å’Œå½¢çŠ¶è‡ªåŠ¨è®¡ç®—å‡ºæ¥çš„,但是这个函数å…许你设置一个自定义"
+"值。设置0惯性会切æ¢å›žè‡ªåŠ¨è®¡ç®—ã€‚"
#: doc/classes/RigidBody2D.xml:142
-#, fuzzy
msgid ""
"Damps the body's [member linear_velocity]. If [code]-1[/code], the body will "
"use the [b]Default Linear Damp[/b] in [b]Project > Project Settings > "
@@ -59239,7 +61071,9 @@ msgid ""
msgstr ""
"对物体的[member linear_velocity]进行阻尼è¿ç®—。如果[code]-1[/code],物体将使用"
"[b]Project(项目) > Project Settings(项目设置) > Physics(物ç†)> 2d[/b]中的"
-"[b]Default Linear Damp(默认线性阻尼)[/b]。"
+"[b]Default Linear Damp(默认线性阻尼)[/b]。\n"
+"有关阻尼的更多详细信æ¯ï¼Œè¯·å‚阅 [member ProjectSettings.physics/2d/"
+"default_linear_damp]。"
#: doc/classes/RigidBody2D.xml:152
msgid "The body's mode. See [enum Mode] for possible values."
@@ -59254,7 +61088,6 @@ msgstr ""
"Physics(物ç†)> 2d[/b] 中的 [b] Default Gravity(默认é‡åŠ›) [/b] 值。"
#: doc/classes/RigidBody2D.xml:169
-#, fuzzy
msgid ""
"Emitted when a collision with another [PhysicsBody2D] or [TileMap] occurs. "
"Requires [member contact_monitor] to be set to [code]true[/code] and [member "
@@ -59263,15 +61096,13 @@ msgid ""
"[code]body[/code] the [Node], if it exists in the tree, of the other "
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-"当一个物体与这个物体接触时å‘出。需è¦å°† [member contact_monitor] 设置为 "
-"[code]true[/code] 并将 [member contacts_reported] 设置为足够高以检测所有碰"
-"撞。\n"
-"此信å·ä¸ä»…接收与此碰撞的物体,还接收其 [RID] ([code]body_id[/code])ã€ç¢°æ’žç‰©ä½“"
-"的形状索引 ([code]body_shape[/code]) 和形状索引从这个身体 "
-"([code]local_shape[/code]) å¦ä¸€ä¸ªèº«ä½“碰撞。"
+"当与å¦ä¸€ä¸ª[PhysicsBody2D]或[TileMap]å‘生碰撞时触å‘。需è¦å°†[member "
+"contact_monitor]设置为[code]true[/code],并且将[member contacts_reported]设置"
+"得足够高以检测所有的碰撞。如果[TileSet]有碰撞[Shape2D],就会检测到[TileMap]"
+"的。\n"
+"[code]body[/code]是其他[PhysicsBody2D]或[TileMap]的[Node],如果它存在于树中。"
#: doc/classes/RigidBody2D.xml:176
-#, fuzzy
msgid ""
"Emitted when the collision with another [PhysicsBody2D] or [TileMap] ends. "
"Requires [member contact_monitor] to be set to [code]true[/code] and [member "
@@ -59280,15 +61111,13 @@ msgid ""
"[code]body[/code] the [Node], if it exists in the tree, of the other "
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-"当一个物体与这个物体接触时å‘出。需è¦å°† [member contact_monitor] 设置为 "
-"[code]true[/code] 并将 [member contacts_reported] 设置为足够高以检测所有碰"
-"撞。\n"
-"此信å·ä¸ä»…接收与此碰撞的物体,还接收其 [RID] ([code]body_id[/code])ã€ç¢°æ’žç‰©ä½“"
-"的形状索引 ([code]body_shape[/code]) 和形状索引从这个身体 "
-"([code]local_shape[/code]) å¦ä¸€ä¸ªèº«ä½“碰撞。"
+"当与å¦ä¸€ä¸ª[PhysicsBody2D]或[TileMap]çš„ç¢°æ’žç»“æŸæ—¶å‘出的。需è¦å°† [member "
+"contact_monitor] 设置为 [code]true[/code] 并将 [member contacts_reported] 设"
+"置为足够高以检测所有碰撞。如果[TileSet]有碰撞[Shape2D],就会检测到"
+"[TileMap]。\n"
+"[code]body[/code] 其他[PhysicsBody2D]或[TileMap]的[Node](如果它存在于树中)。"
#: doc/classes/RigidBody2D.xml:186
-#, fuzzy
msgid ""
"Emitted when one of this RigidBody2D's [Shape2D]s collides with another "
"[PhysicsBody2D] or [TileMap]'s [Shape2D]s. Requires [member contact_monitor] "
@@ -59307,20 +61136,22 @@ msgid ""
"RigidBody2D used by the [Physics2DServer]. Get the [CollisionShape2D] node "
"with [code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-"当[PhysicsBody2D]或[TileMap]的一个[Shape2D]离开这个Area2D的一个[Shape2D]æ—¶å‘"
-"出的。需è¦å°†ç›‘控[member monitoring]设置为[code]true[/code]。如果[TileSet]有碰"
-"撞形状[Shape2D]s,就会检测到[TileMap]s。\n"
-"[code]body_id[/code] 傿•°æ˜¯[Physics2DServer]使用的[PhysicsBody2D]或[TileSet]"
-"的[CollisionObject2D]的RID。\n"
-"[code]body[/code]傿•°æ˜¯[PhysicsBody2D]或[TileMap]çš„[Node],如果它存在于树中的"
-"è¯ã€‚\n"
-"[code]body_shape[/code] 傿•°æ˜¯[Physics2DServer]使用的[PhysicsBody2D]或"
-"[TileMap]的[Shape2D]的索引。\n"
-"[code]local_shape[/code] 傿•°æ˜¯[Physics2DServer]使用的这个Area2Dçš„[Shape2D]çš„"
-"索引。"
+"当这个RigidBody2Dçš„[Shape2D]与å¦ä¸€ä¸ª[PhysicsBody2D]或[TileMap]çš„[Shape2D]碰撞"
+"æ—¶å‘å‡ºã€‚è¦æ±‚ [member contact_monitor] 设置为 [code]true[/code] 并且 [member "
+"contacts_reported] 设置得足够高,以检测所有碰撞。如果 [TileMap] 具有碰撞 "
+"[Shape2D],就会检测到 [TileSet]。\n"
+"[code]body_rid[/code] 由 [Physics2DServer] 使用的其他 [PhysicsBody2D] 或 "
+"[TileSet] 的 [CollisionObject2D] 的 [RID]。\n"
+"[code]body[/code]其他[PhysicsBody2D]或[TileMap]的[Node](如果它存在于树上)。\n"
+"[code]body_shape_index [/code] 其他 [PhysicsBody2D] 或 [TileMap] 使用 "
+"[Physics2DServer] 的 [Shape2D] 索引。获得带有 [code]body."
+"shape_owner_get_owner (body_shape_index)[/code] 的 [CollisionShape2D] 节"
+"点。\n"
+"[code]local_shape_index [/code] [Physics2DServer] 使用的此 RigidBody2D 的 "
+"[Shape2D] 索引。获得带有 [code]self.shape_owner_get_owner "
+"(local_shape_index)[/code] 的 [CollisionShape2D] 节点。"
#: doc/classes/RigidBody2D.xml:199
-#, fuzzy
msgid ""
"Emitted when the collision between one of this RigidBody2D's [Shape2D]s and "
"another [PhysicsBody2D] or [TileMap]'s [Shape2D]s ends. Requires [member "
@@ -59339,17 +61170,20 @@ msgid ""
"RigidBody2D used by the [Physics2DServer]. Get the [CollisionShape2D] node "
"with [code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-"当[PhysicsBody2D]或[TileMap]çš„[Shape2D]之一进入此Area2Dçš„[Shape2D]之一时å‘"
-"出。需è¦å°†ç›‘控[member monitoring]设置为[code]true[/code]。如果[TileSet]有碰撞"
-"形状[Shape2D]s,就会检测到[TileMap]s。\n"
-"[code]body_id[/code]傿•°æ˜¯ [Physics2DServer]使用的[PhysicsBody2D]或[TileSet]"
-"的[CollisionObject2D]的RID。\n"
-"[code]body[/code]傿•°æ˜¯ [PhysicsBody2D]或[TileMap]çš„[节点],如果它在树上存在"
-"çš„è¯ã€‚\n"
-"[code]body_shape[/code] 傿•°æ˜¯[Physics2DServer]使用的[PhysicsBody2D]或"
-"[TileMap]的[Shape2D]的索引。\n"
-"[code]local_shape[/code] 傿•°æ˜¯[Physics2DServer]使用的这个Area2Dçš„[Shape2D]çš„"
-"索引。"
+"当这个RigidBody2D的一个[Shape2D]å’Œå¦ä¸€ä¸ª[PhysicsBody2D]或[TileMap]çš„[Shape2D]"
+"ä¹‹é—´çš„ç¢°æ’žç»“æŸæ—¶è§¦å‘ã€‚è¦æ±‚[member contact_monitor]设置为[code]true[/code],"
+"[member contacts_reported]设置得足够高以检测所有的碰撞。如果[TileSet]有碰撞"
+"[Shape2D],就会检测到[TileMap]的。\n"
+"[code]body_rid[/code] [Physics2DServer]使用的其他[PhysicsBody2D]或[TileSet]的"
+"[CollisionObject2D]的 [RID]。\n"
+"[code]body[/code] å¦ä¸€ä¸ª[PhysicsBody2D]或[TileMap]çš„[Node],如果它存在于树"
+"中。\n"
+"[code]body_shape_index[/code] 由[Physics2DServer]使用的其他[PhysicsBody2D]或"
+"[TileMap]的[Shape2D]的索引。用[code]body."
+"shape_owner_get_owner(body_shape_index)[/code]获得[CollisionShape2D]节点。\n"
+"[code]local_shape_index[/code]这个RigidBody2D的[Shape2D]的索引,由"
+"[Physics2DServer]使用。用[code]self.shape_owner_get_owner(local_shape_index)"
+"[/code]获å–[CollisionShape2D]节点。"
#: doc/classes/RigidBody2D.xml:215
msgid ""
@@ -59381,7 +61215,7 @@ msgid ""
"Continuous collision detection disabled. This is the fastest way to detect "
"body collisions, but can miss small, fast-moving objects."
msgstr ""
-"ç¦ç”¨è¿žç»­ç¢°æ’žæ£€æµ‹ã€‚这是检测身体碰撞的最快方法,但å¯èƒ½ä¼šé”™è¿‡å°åž‹ã€å¿«é€Ÿç§»åŠ¨çš„ç‰©"
+"ç¦ç”¨è¿žç»­ç¢°æ’žæ£€æµ‹ã€‚这是检测物体碰撞的最快方法,但å¯èƒ½ä¼šé”™è¿‡å°åž‹ã€å¿«é€Ÿç§»åŠ¨çš„ç‰©"
"体。"
#: doc/classes/RigidBody2D.xml:230
@@ -59399,7 +61233,7 @@ msgstr ""
#: doc/classes/Room.xml:4
msgid "Room node, used to group objects together locally for [Portal] culling."
-msgstr ""
+msgstr "Room 节点,用于在本地将对象组åˆåœ¨ä¸€èµ·ä»¥è¿›è¡Œ [Portal] 剔除。"
#: doc/classes/Room.xml:7
msgid ""
@@ -59423,6 +61257,19 @@ msgid ""
"placed over non-occluded openings between rooms. These will often be placed "
"over doors and windows."
msgstr ""
+"[Portal] 剔除系统需è¦ä½¿ç”¨åœ¨ç§°ä¸º [Room] 的区域中按ä½ç½®åˆ†ç»„åœ¨ä¸€èµ·çš„å¯¹è±¡æ¥æž„建关"
+"å¡ã€‚在许多情况下,这些将对应于建筑物中的实际空间,但ä¸ä¸€å®šï¼ˆå³¡è°·åŒºåŸŸå¯èƒ½è¢«è§†"
+"为空间)。\n"
+"如果[VisualInstance] çš„[code]portal_mode[/code] 设置为[code]STATIC[/code](ä¸"
+"移动) 或 [code]DYNAMIC[/code](仅在空间内移动),那么任何作为[Room]çš„å­ä»£æˆ–å­™"
+"代的[VisualInstance]将被分é…到该空间。\n"
+"在内部,空间边界必须形æˆä¸€ä¸ª [b] 凸多边形 [/b],默认情况下,这由您放置在空间"
+"内的对象的几何形状自动确定。\n"
+"您也å¯ä»¥ç²¾ç¡®æŒ‡å®š [b] 手动绑定 [/b]。如果放置一个å称以[code]Bound_[/code]为å‰"
+"缀的[MeshInstance],它将关闭几何体的边界生æˆï¼Œè€Œæ˜¯åœ¨è½¬æ¢é˜¶æ®µä½¿ç”¨è¿™ä¸ª"
+"MeshInstance的顶点直接计算凸多边形(è§[RoomManager])。\n"
+"为了从一个空间看到相邻的空间,[Portal]必须放置在空间之间的éžé®æŒ¡å¼€å£ä¸Šã€‚这些"
+"通常会放置在门窗上。"
#: doc/classes/Room.xml:27
msgid ""
@@ -59435,6 +61282,11 @@ msgid ""
"room hull, and save the resulting points, allowing you to edit them to "
"further refine the bound."
msgstr ""
+"如果设置了 [code]points[/code],则会从这些点构建 [Room] 边界凸多边形。如果未"
+"设置点,则空间边界将æ¥è‡ªæ‰‹åŠ¨è¾¹ç•Œï¼ˆ[MeshInstance] åç§°å‰ç¼€ä¸º [code]Bound_[/"
+"code]),或æ¥è‡ªç©ºé—´å†…的几何体。\n"
+"请注æ„,您å¯ä»¥ä½¿ç”¨ [code]Generate Points[/code] 编辑器按钮开始。这将使用几何"
+"体或手动绑定æ¥ç”Ÿæˆç©ºé—´å¤–壳,并ä¿å­˜ç»“果点,å…许您编辑它们以进一步细化边界。"
#: doc/classes/Room.xml:31
msgid ""
@@ -59442,16 +61294,20 @@ msgid ""
"(bounds) are simplified, by removing similar planes. A value of 0 gives no "
"simplification, 1 gives maximum simplification."
msgstr ""
+"[code]simplify[/code] å€¼é€šè¿‡ç§»é™¤ç›¸ä¼¼çš„å¹³é¢æ¥ç¡®å®šç©ºé—´å¤–壳(边界)的简化程度。"
+"值 0 表示ä¸ç®€åŒ–,1 表示最大程度的简化。"
#: doc/classes/Room.xml:34
msgid ""
"The room hull simplification can either use the default value set in the "
"[RoomManager], or override this and use the per room setting."
msgstr ""
+"空间外壳简化å¯ä»¥ä½¿ç”¨ [RoomManager] 中设置的默认值,也å¯ä»¥è¦†ç›–它并使用æ¯ä¸ªç©ºé—´"
+"的设置。"
#: doc/classes/RoomGroup.xml:4
msgid "Groups [Room]s together to allow common functionality."
-msgstr ""
+msgstr "å°† [Room] 组åˆåœ¨ä¸€èµ·ä»¥å®žçŽ°é€šç”¨åŠŸèƒ½ã€‚"
#: doc/classes/RoomGroup.xml:7
msgid ""
@@ -59468,6 +61324,14 @@ msgid ""
"[code]notification[/code]s as they enter and exit the [b]gameplay area[/b] "
"(see [RoomManager] for details)."
msgstr ""
+"尽管å¯ä»¥å•独指定 [Room] 行为,但有时为一组空间编写功能会更快更方便。\n"
+"[RoomGroup] 应作为 [b] 空间列表 [/b](您的 [Room] 的父 [Node])的å­é¡¹è€Œè®¾ç½®ï¼Œ"
+"而 [Room] 应作为 [RoomGroup] çš„å­é¡¹ä¾æ¬¡è®¾ç½®ä»¥ä¾¿å°†å®ƒä»¬åˆ†é…ç»™ RoomGroup。\n"
+"例如,[RoomGroup] å¯ç”¨äºŽæŒ‡å®š [b]outside[/b] çš„ [Room],并在玩家进入/退出该区"
+"域时打开或关闭定å‘å…‰ã€å¤©ç©ºæˆ–雨效果。\n"
+"当 [code]gameplay_monitor[/code] 开坿—¶ï¼Œ[RoomGroup] 收到 [b]游æˆå›žè°ƒ[/b],在"
+"他们进入和退出时[b]游æˆåŒº[/b]时,作为 [code] ä¿¡å· [/code] 或 [code] 通知 [/"
+"code] (详è§[RoomManager])。"
#: doc/classes/RoomGroup.xml:18
msgid ""
@@ -59480,10 +61344,15 @@ msgid ""
"when the camera is within the house, the house is used as the source room, "
"but outside the house, the terrain room would be used instead."
msgstr ""
+"此优先级将应用于组内的 [Room]。 [Room] 优先级å…许使用 [b] 内部空间 [/b]ã€ç©º"
+"é—´ [i] 内 [/i] å¦ä¸€ä¸ªç©ºé—´æˆ–多个空间。\n"
+"当 [Camera] ä½äºŽå¤šä¸ªç©ºé—´ï¼ˆå¸¸è§„和内部)内时,优先级较高的空间将优先处ç†ã€‚å› "
+"此,例如,在地形“空间â€å†…的房屋,您å¯ä»¥ä½¿æˆ¿å±‹å…·æœ‰æ›´é«˜çš„优先级,以便当相机在房"
+"屋内时,房屋用作æºç©ºé—´ï¼Œä½†åœ¨æˆ¿å±‹å¤–,将改为使用地形空间。"
#: doc/classes/RoomManager.xml:4
msgid "The RoomManager node is used to control the portal culling system."
-msgstr ""
+msgstr "RoomManager 节点用于控制portal剔除系统。"
#: doc/classes/RoomManager.xml:7
msgid ""
@@ -59494,6 +61363,10 @@ msgid ""
"is controlled by the [RoomManager] node, and the [RoomManager] also contains "
"settings that are common throughout the portal system."
msgstr ""
+"为了使用portal鮿Œ¡å‰”除系统,您必须使用 [Room] å’Œ [Portal] æ¥æž„建您的关å¡ã€‚在"
+"这些å¯ä»¥åœ¨è¿è¡Œæ—¶ä½¿ç”¨ä¹‹å‰ï¼Œå®ƒä»¬å¿…é¡»ç»è¿‡ä¸€ä¸ªç®€çŸ­çš„转æ¢è¿‡ç¨‹æ¥æž„建 [code] room "
+"graph [/code],这是portal剔除所需的è¿è¡Œæ—¶æ•°æ®ã€‚ [code]portal graph[/code]ç”±"
+"[RoomManager]节点控制,[RoomManager]è¿˜åŒ…å«æ•´ä¸ªportal系统通用的设置。"
#: doc/classes/RoomManager.xml:15
msgid ""
@@ -59501,6 +61374,8 @@ msgid ""
"before unloading a level, when transitioning from level to level, or "
"returning to a main menu."
msgstr ""
+"该方法会从[b]portal graph[/b]æ¸…é™¤æ‰€æœ‰è½¬æ¢æ•°æ®ã€‚在å¸è½½å…³å¡ã€ä»Žå…³å¡è½¬æ¢åˆ°å…³å¡æˆ–"
+"返回主èœå•时使用此选项。"
#: doc/classes/RoomManager.xml:21
msgid ""
@@ -59561,6 +61436,45 @@ msgid ""
"tree, to avoid confusion. See [CullInstance] for a full description of "
"portal modes."
msgstr ""
+"这是整个portal剔除系统中最é‡è¦çš„功能。没有它,系统就无法è¿è¡Œã€‚\n"
+"首先,它é历作为 [code] room list [/code] 的节点(以åŠå…¶ä¸­çš„ [RoomGroup])å­"
+"节点的æ¯ä¸ª [Room],并将其转æ¢å¹¶æ·»åŠ åˆ° [code] room graph [/code]。\n"
+"这适用于éµå¾ªç‰¹æ®Šå‘½å约定的 [Room] 节点和 [Spatial] 节点。它们应该以å‰ç¼€ "
+"[i]'Room_'[/i] å¼€å¤´ï¼Œç„¶åŽæ˜¯æ‚¨å¸Œæœ›ä¸ºç©ºé—´å‘½åçš„å称,例如[i]'Room_lounge'[/i]。"
+"这将自动为您将此类 [Room] 转æ¢ä¸º [Room] 节点。如果您想构建整个空间系统,这很"
+"有用,例如Blender,并在您处ç†å…³å¡æ—¶å¤šæ¬¡é‡æ–°å¯¼å…¥ã€‚\n"
+"转æ¢å°†å°è¯•将作为 [Room] çš„å­ä»£å’Œå­™ä»£çš„ [VisualInstance] 分é…给空间。这些应该"
+"被赋予åˆé€‚çš„ [code] portal mode [/code](å‚è§ [CullInstance] 文档)。默认的 "
+"[code] portal mode [/code] 是 [code]STATIC[/code] - è¿è¡Œå…³å¡æ—¶ä¸ä¼šç§»åŠ¨çš„å¯¹"
+"象,通常是大多数对象。\n"
+"转æ¢é€šå¸¸ä¼šä½¿ç”¨è¿™äº› [VisualInstance](和 [Portal])的几何形状æ¥è®¡ç®—空间的凸多"
+"边形边界。这些边界将显示在带有线框的编辑器中。或者,您å¯ä»¥ä¸ºä»»ä½•空间指定手动"
+"自定义边界,请å‚阅 [Room] 文档。\n"
+"æ ¹æ®å®šä¹‰ï¼Œç©ºé—´å†…çš„ [Camera] å¯ä»¥çœ‹åˆ°ç©ºé—´å†…的所有其他东西(这是使用凸多边形的"
+"一个优势)。但是,为了从一个空间看到相邻的空间,您必须放置 [Portal],它代表摄"
+"åƒæœºå¯ä»¥çœ‹åˆ°çš„å¼€å£ï¼Œå¦‚窗户和门。\n"
+"[Portal] å®žé™…ä¸Šåªæ˜¯ä¸“门的 [MeshInstance]。实际上,您通常会首先通过创建 "
+"[MeshInstance],尤其是 [code]plane[/code] 网格实例æ¥åˆ›å»ºportal。您å¯ä»¥åœ¨ç¼–辑"
+"器中移动平é¢ä»¥è¦†ç›–窗户或门å£ï¼Œæ­£é¢æœç©ºé—´å¤–。为了让转æ¢è¿‡ç¨‹çŸ¥é“您希望此网格æˆ"
+"为portalï¼Œæˆ‘ä»¬å†æ¬¡ä½¿ç”¨ç‰¹æ®Šçš„命å约定。è¦è½¬æ¢ä¸º [Portal] çš„ [MeshInstance] 应"
+"以å‰ç¼€ [i]'Portal_'[/i] 开头。\n"
+"您现在有一个选择 - 您å¯ä»¥å°†åç§°ä¿ç•™ä¸º [i]'Portal_'[/i],并å…许系统自动检测最"
+"近的 [Room] 进行链接。在大多数情况下,这将正常工作。\n"
+"å¦ä¸€ç§æ–¹æ³•是手动指定è¦é“¾æŽ¥åˆ°çš„ [Room],在portalåç§°åŽé™„加一个åŽç¼€ï¼Œè¯¥åŽç¼€åº”该"
+"是您è¦é“¾æŽ¥åˆ°çš„空间的å称。例如,[i]'Portal_lounge'[/i] å°†å°è¯•链接到å为 "
+"[i]'Room_lounge'[/i] 的空间。\n"
+"这里有一个特殊情况——Godot ä¸å…许两个节点共享相åŒçš„å称。如果您想手动将多个"
+"portal通å‘åŒä¸€ä¸ªç©ºé—´æ€Žä¹ˆåŠžï¼Ÿå½“ç„¶ï¼Œå®ƒä»¬éƒ½éœ€è¦è¢«è°ƒç”¨ï¼Œä¾‹å¦‚[i]'Portal_lounge'[/"
+"i]?\n"
+"解决方案是通é…符。在空间å称之åŽï¼Œå¦‚果您使用字符 [i]'*'[/i],则该字符åŠå…¶åŽçš„"
+"任何内容都将被忽略。因此,您å¯ä»¥ä½¿ç”¨ä¾‹å¦‚ [i]'Portal_lounge*0'[/i]ã€"
+"[i]'Portal_lounge*1'[/i] 等。\n"
+"请注æ„,已ç»è½¬æ¢ä¸º [Portal] èŠ‚ç‚¹ï¼ˆè€Œä¸æ˜¯ [MeshInstance])的 [Portal] ä»ç„¶éœ€è¦"
+"éµå¾ªç›¸åŒçš„命å约定,因为它们在转æ¢è¿‡ç¨‹ä¸­æ¯æ¬¡éƒ½ä¼šé‡æ–°é“¾æŽ¥ã€‚\n"
+"建议您仅将对象放置在希望留在这些空间内的空间中 - å³ [code]portal mode[/code]"
+"是 [code]STATIC[/code] 或 [code]DYNAMIC[/code](ä¸ç©¿è¶Š Portal)。 "
+"[code]GLOBAL[/code] å’Œ [code]ROAMING[/code] 对象最好放置在场景树的å¦ä¸€éƒ¨åˆ†ï¼Œ"
+"以é¿å…混淆。有关portal模å¼çš„完整说明,请å‚阅 [CullInstance]。"
#: doc/classes/RoomManager.xml:39
msgid ""
@@ -59572,6 +61486,12 @@ msgid ""
"Switching to [code]active[/code] will have no effect when the [code]room "
"graph[/code] is unloaded (the rooms have not yet been converted)."
msgstr ""
+"打开和关闭portal剔除系统。\n"
+"éœ€è¦æ³¨æ„的是,当portalå‰”é™¤å¤„äºŽæ´»åŠ¨çŠ¶æ€æ—¶ï¼Œå®ƒè´Ÿè´£ [b]所有[/b] 3d 剔除。æŸäº›ç¼–"
+"辑器功能å¯èƒ½æ›´éš¾ä½¿ç”¨ï¼Œå› æ­¤åˆ‡æ¢æ´»åŠ¨æ ‡å¿—æ—¨åœ¨ç¡®ä¿æ‚¨çš„ [Room] / [Portal] 布局在编"
+"辑器中工作。\n"
+"当[code]room graph[/code]被å¸è½½ï¼ˆç©ºé—´å°šæœªè½¬æ¢ï¼‰æ—¶ï¼Œåˆ‡æ¢åˆ°[code]active[/code]"
+"å°†ä¸èµ·ä½œç”¨ã€‚"
#: doc/classes/RoomManager.xml:44
msgid ""
@@ -59580,6 +61500,9 @@ msgid ""
"room.\n"
"Toggling this setting turns this debug view on and off."
msgstr ""
+"大型物体å¯ä»¥â€œè”“å»¶â€è¶…过一个以上的空间。该设置对于å¯è§†åŒ–那些蔓延在当å‰ç©ºé—´å¤–çš„"
+"对象会很有用。\n"
+"åˆ‡æ¢æ­¤è®¾ç½®å¯æ‰“开和关闭此调试视图。"
#: doc/classes/RoomManager.xml:48
msgid ""
@@ -59590,6 +61513,10 @@ msgid ""
"In most cases you can set this here for all portals. It is possible to "
"override the margin for each portal."
msgstr ""
+"通常我们ä¸å¸Œæœ›åªæœ‰[b]刚好[/b]跨越边界进入相邻[Room]的物体蔓延到那个空间。为防"
+"æ­¢è¿™ç§æƒ…况å‘生,æ¯ä¸ª [Portal] 都有一个é¢å¤–çš„è¾¹è·æˆ–容差区,物体å¯ä»¥åœ¨å…¶ä¸­è¿›å…¥"
+"而ä¸ä¼šè”“延到相邻的空间。\n"
+"在大多数情况下,您å¯ä»¥åœ¨æ­¤å¤„为所有portal设置此项。å¯ä»¥è¦†ç›–æ¯ä¸ªportal的边è·ã€‚"
#: doc/classes/RoomManager.xml:52
msgid ""
@@ -59604,6 +61531,14 @@ msgid ""
"[code]NOTIFICATION_EXIT_GAMEPLAY[/code]\n"
"Signals: [code]\"gameplay_entered\"[/code], [code]\"gameplay_exited\"[/code]"
msgstr ""
+"使用部分或完整 PVS 时,游æˆç›‘视器å…许您在漫游对象或空间进入或退出 [b] 游æˆåŒº"
+"域 [/b] 时接收回调。游æˆåŒºåŸŸè¢«å®šä¹‰ä¸ºä¸»è¦æˆ–æ¬¡è¦ PVS。\n"
+"例如,这些回调å…许您å‡å°‘对远离玩家的对象的处ç†ï¼Œæˆ–者打开和关闭 AI。\n"
+"您å¯ä»¥é€‰æ‹©é€šè¿‡ [code]_notification[/code] å‡½æ•°æŽ¥æ”¶å›žè°ƒä½œä¸ºé€šçŸ¥ï¼Œæˆ–ä½œä¸ºä¿¡å·æŽ¥"
+"收。\n"
+"[code]NOTIFICATION_ENTER_GAMEPLAY[/code]\n"
+"[code]NOTIFICATION_EXIT_GAMEPLAY[/code]\n"
+"ä¿¡å·ï¼š[code]\"gameplay_entered\"[/code], [code]\"gameplay_exited\"[/code]"
#: doc/classes/RoomManager.xml:60
msgid ""
@@ -59615,6 +61550,11 @@ msgid ""
"will only operate on exported or running projects, in order to prevent "
"accidental alteration to the scene and loss of data."
msgstr ""
+"如果å¯ç”¨ï¼Œç³»ç»Ÿå°†åœ¨è½¬æ¢æœŸé—´å°è¯•åˆå¹¶ [Room] å†…çš„ç›¸ä¼¼ç½‘æ ¼ï¼ˆç‰¹åˆ«æ˜¯åœ¨ææ–™æ–¹é¢ï¼‰ã€‚"
+"è¿™å¯ä»¥æ˜¾ç€å‡å°‘æ¸²æŸ“æœŸé—´æ‰€éœ€çš„ç»˜åˆ¶è°ƒç”¨å’ŒçŠ¶æ€æ›´æ”¹çš„æ•°é‡ï¼Œå°½ç®¡ä»£ä»·æ˜¯é™ä½Žäº†å‰”除粒"
+"度。\n"
+"[b]注æ„:[/b]æ­¤æ“作在转æ¢è¿‡ç¨‹ä¸­çš„è¿è¡Œæ—¶è¿è¡Œï¼Œå¹¶ä¸”åªä¼šåœ¨å¯¼å‡ºæˆ–è¿è¡Œçš„项目上è¿"
+"行,以防止æ„外更改场景和丢失数æ®ã€‚"
#: doc/classes/RoomManager.xml:64
msgid ""
@@ -59624,6 +61564,9 @@ msgid ""
"level. Here you can alter the threshold at which the editor warning appears. "
"There are no other side effects."
msgstr ""
+"转æ¢ç©ºé—´æ—¶ï¼Œå¦‚果检测到空间之间有é‡å ï¼Œç¼–辑器会警告您。é‡å ä¼šå¹²æ‰°ç¡®å®šæ‘„åƒæœºå’Œ"
+"ç‰©ä½“æ‰€åœ¨çš„ç©ºé—´ã€‚æ ¹æ®æ‚¨çš„levelï¼Œå°‘é‡æ˜¯å¯ä»¥æŽ¥å—的。您å¯ä»¥åœ¨æ­¤å¤„更改出现编辑器警"
+"告的阈值。没有其他副作用。"
#: doc/classes/RoomManager.xml:67
msgid ""
@@ -59633,6 +61576,9 @@ msgid ""
"recursion depth.\n"
"[b]Note:[/b] This value is unused when using [code]Full[/code] PVS mode."
msgstr ""
+"portal渲染是递归的 - æ¯æ¬¡é€šè¿‡è¾ƒæ—©çš„portal看到一个portalæ—¶ï¼Œéƒ½ä¼šäº§ç”Ÿä¸€äº›æˆæœ¬ã€‚"
+"出于这个原因,并为了防止无é™å¾ªçŽ¯çš„å¯èƒ½æ€§ï¼Œæ­¤è®¾ç½®å¯¹é€’归深度æä¾›äº†ç¡¬æ€§é™åˆ¶ã€‚\n"
+"[b]注:[/b] 使用[code]Full[/code] PVS æ¨¡å¼æ—¶ä¸ä½¿ç”¨è¯¥å€¼ã€‚"
#: doc/classes/RoomManager.xml:71
msgid ""
@@ -59641,6 +61587,9 @@ msgid ""
"to override this behaviour and force it to use a particular camera to get a "
"better idea of what the occlusion culling is doing."
msgstr ""
+"Portal 剔除通常使用当å‰çš„ [Camera] / 多个[Camera] 进行æ“作,但是为了在编辑器"
+"中进行调试,您å¯ä»¥ä½¿ç”¨æ­¤è®¾ç½®æ¥è¦†ç›–此行为并强制它使用特定的相机以更好地了解é®"
+"挡的内容剔除正在åšã€‚"
#: doc/classes/RoomManager.xml:75
msgid ""
@@ -59652,9 +61601,29 @@ msgid ""
"rooms will be frustum culled, and rendered if they are within the view "
"frustum."
msgstr ""
+"å¯é€‰åœ°ï¼Œåœ¨è½¬æ¢æœŸé—´ï¼Œå¯ä»¥è®¡ç®—从æ¯ä¸ªç©ºé—´å¯èƒ½å¯è§çš„空间的潜在å¯è§é›† (PVS)。这å¯"
+"用于帮助动æ€é—¨æˆ·å‰”除,或完全替代门户剔除。\n"
+"在 [code]Full[/code] PVS 模å¼ä¸‹ï¼Œæ½œåœ¨å¯è§ç©ºé—´å†…的所有对象都将被剔除,如果它们"
+"在视锥体内,则进行渲染。"
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -59671,20 +61640,33 @@ msgid ""
"override this value if desired.\n"
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
+"在转æ¢è¿‡ç¨‹ä¸­ï¼Œ[Room] å†…å¯¹è±¡çš„å‡ ä½•å½¢çŠ¶ï¼Œæˆ–è‡ªå®šä¹‰æŒ‡å®šçš„æ‰‹åŠ¨ç»‘å®šï¼Œç”¨äºŽç”Ÿæˆ [b] "
+"凸多边形绑定 [/b]。\n"
+"这个凸多边形在å¯è§æ€§ç³»ç»Ÿä¸­æ˜¯ [b] 必需的 [/b],并且用于许多目的。最é‡è¦çš„æ˜¯ï¼Œ"
+"它用于决定[Camera](或物体)是å¦åœ¨[Room]内。凸多边形生æˆç®—法很好,但有时它会"
+"创建太多(或太少)的平é¢ï¼Œæ— æ³•很好地表示空间体积。\n"
+"[code]room_simplify[/code] 值å¯ç”¨äºŽå¯¹è¯¥è¿‡ç¨‹è¿›è¡Œç²¾ç»†æŽ§åˆ¶ã€‚它决定了如何相似平é¢"
+"æ‰èƒ½å°†å®ƒä»¬è§†ä¸ºç›¸åŒï¼ˆå¹¶åˆ é™¤é‡å¤é¡¹ï¼‰ã€‚该值å¯ä»¥è®¾ç½®åœ¨ 0(无简化)和 1(最大简"
+"化)之间。\n"
+"此处设置的值是所有空间的默认值,但如果需è¦ï¼Œä¸ªåˆ«ç©ºé—´å¯ä»¥è¦†ç›–此值。\n"
+"空间凸包在编辑器中显示为线框。"
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
"we refer to as the [code]roomlist[/code] (the roomlist is not a special node "
"type, it is normally just a [Spatial])."
msgstr ""
+"è¦ä½¿ [Room] 转æ¢è¿‡ç¨‹æˆåŠŸï¼Œæ‚¨å¿…é¡»å°† [RoomManager] æŒ‡å‘ [Room] å’Œ [RoomGroup] "
+"的父 [Node],我们将其称为 [code]roomlist[/code](roomlist 䏿˜¯ä¸€ä¸ªç‰¹æ®Šçš„节点"
+"ç±»åž‹ï¼Œå®ƒé€šå¸¸åªæ˜¯ä¸€ä¸ª [Room])。"
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
-msgstr ""
+msgstr "当在编辑器中使用portal工具时,显示[Portal]的边界。"
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -59693,28 +61675,33 @@ msgid ""
"Sometimes using the larger gameplay area of the secondary PVS may be "
"preferable."
msgstr ""
+"å½“å¯¹è±¡è¿›å…¥å’Œé€€å‡ºæ¸¸æˆæ—¶æŽ¥æ”¶æ¸¸æˆå›žè°ƒæ—¶ï¼Œ[b]游æˆåŒºåŸŸ[/b]å¯ä»¥ç”±[Room]的主è¦"
+"PVS(潜在å¯è§é›†ï¼‰æˆ–次è¦PVS(主è¦PVSåŠå…¶ç›¸é‚»çš„PVS)定义[Room])。\n"
+"æœ‰æ—¶ä½¿ç”¨æ¬¡è¦ PVS 的较大游æˆåŒºåŸŸå¯èƒ½æ›´å¯å–。"
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
+"在è¿è¡Œæ—¶ä»…使用 [Portal] æ¥ç¡®å®šå¯è§æ€§ã€‚ [Room]的转æ¢ä¸ä¼šäº§ç”ŸPVS,无法使用游æˆ"
+"通知。"
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
-msgstr ""
+msgstr "使用 PVS å’Œ [Portal] çš„ç»„åˆæ¥ç¡®å®šå¯è§æ€§ï¼ˆè¿™é€šå¸¸æ˜¯æœ€å¿«å’Œæœ€å‡†ç¡®çš„)。"
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
-msgstr ""
+msgstr "仅使用 [Room] çš„ PVS(潜在å¯è§é›†ï¼‰æ¥ç¡®å®šå¯è§æ€§ã€‚"
#: doc/classes/RootMotionView.xml:4
msgid "Editor-only helper for setting up root motion in [AnimationTree]."
-msgstr ""
+msgstr "在[AnimationTree]中设置根è¿åŠ¨çš„ä»…ç¼–è¾‘å™¨å¯ç”¨çš„辅助工具。"
#: doc/classes/RootMotionView.xml:7
msgid ""
@@ -59731,23 +61718,30 @@ msgid ""
"[code]extends RootMotionView[/code]. Additionally, it must not be a "
"[code]@tool[/code] script."
msgstr ""
+"[i]Root motion[/i] 指的是一ç§åŠ¨ç”»æŠ€æœ¯ï¼Œå…¶ä¸­ä½¿ç”¨ç½‘æ ¼çš„éª¨æž¶ä¸ºè§’è‰²æä¾›åŠ¨åŠ›ã€‚åœ¨å¤„"
+"ç† 3D åŠ¨ç”»æ—¶ï¼Œä¸€ç§æµè¡Œçš„æŠ€æœ¯æ˜¯åŠ¨ç”»å¸ˆä½¿ç”¨æ ¹éª¨æž¶éª¨éª¼æ¥ä¸ºéª¨æž¶çš„其余部分æä¾›è¿"
+"动。这å…许以步骤实际匹é…下方地æ¿çš„æ–¹å¼ä¸ºè§’色设置动画。它还å…许在过场动画期间"
+"与对象进行精确交互。å¦è§[AnimationTree]。\n"
+"[b]注æ„:[/b] [RootMotionView] 仅在编辑器中å¯è§ã€‚在è¿è¡Œçš„项目中会自动éšè—,在"
+"è¿è¡Œçš„项目中也会转æ¢ä¸ºæ™®é€šçš„[Node]。这æ„味ç€é™„加到 [RootMotionView] 节点的脚"
+"本 [i] å¿…é¡» [/i] 具有 [code] 继承节点 [/code] è€Œä¸æ˜¯ [code] 继承 "
+"RootMotionView[/code]。此外,它ä¸èƒ½æ˜¯ [code]@tool[/code] 脚本。"
#: doc/classes/RootMotionView.xml:11
msgid ""
"https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree."
"html#root-motion"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree."
+"https://docs.godotengine.org/zh_CN/latest/tutorials/animation/animation_tree."
"html#root-motion"
#: doc/classes/RootMotionView.xml:17
msgid "Path to an [AnimationTree] node to use as a basis for root motion."
-msgstr ""
+msgstr "用作根è¿åŠ¨åŸºç¡€çš„ [AnimationTree] 节点的路径。"
#: doc/classes/RootMotionView.xml:20
-#, fuzzy
msgid "The grid's cell size in 3D units."
-msgstr "图å—地图的å•元大å°ã€‚"
+msgstr "以 3D å•ä½è¡¨ç¤ºçš„网格å•元大å°ã€‚"
#: doc/classes/RootMotionView.xml:23
msgid "The grid's color."
@@ -59758,16 +61752,17 @@ msgid ""
"The grid's radius in 3D units. The grid's opacity will fade gradually as the "
"distance from the origin increases until this [member radius] is reached."
msgstr ""
+"以 3D å•ä½è¡¨ç¤ºçš„网格åŠå¾„。éšç€ä¸ŽåŽŸç‚¹çš„è·ç¦»å¢žåŠ ï¼Œç½‘æ ¼çš„ä¸é€æ˜Žåº¦å°†é€æ¸æ¶ˆå¤±ï¼Œç›´"
+"到达到此åŠå¾„ [member radius]。"
#: doc/classes/RootMotionView.xml:29
-#, fuzzy
msgid ""
"If [code]true[/code], the grid's points will all be on the same Y coordinate "
"([i]local[/i] Y = 0). If [code]false[/code], the points' original Y "
"coordinate is preserved."
msgstr ""
-"如果[code] true [/code],则粒å­å°†ä½¿ç”¨çˆ¶èŠ‚ç‚¹çš„åæ ‡ç©ºé—´ã€‚如果[code]false[/"
-"code]ï¼Œåˆ™ä½¿ç”¨å…¨å±€åæ ‡ã€‚"
+"如果 [code]true[/code],则网格的点都将ä½äºŽç›¸åŒçš„ Y åæ ‡ä¸Šï¼ˆ[i]local[/i] Y = "
+"0)。如果 [code]false[/code],则ä¿ç•™ç‚¹çš„原始 Y åæ ‡ã€‚"
#: doc/classes/SceneState.xml:4
msgid "A script interface to a scene file's data."
@@ -59958,7 +61953,6 @@ msgid "Manages the game loop via a hierarchy of nodes."
msgstr "é€šè¿‡èŠ‚ç‚¹å±‚æ¬¡ç»“æž„ç®¡ç†æ¸¸æˆå¾ªçŽ¯ã€‚"
#: doc/classes/SceneTree.xml:7
-#, fuzzy
msgid ""
"As one of the most important classes, the [SceneTree] manages the hierarchy "
"of nodes in a scene as well as scenes themselves. Nodes can be added, "
@@ -59972,28 +61966,28 @@ msgid ""
"thus in charge of the game loop."
msgstr ""
"作为最é‡è¦çš„类之一,[SceneTree]管ç†ç€åœºæ™¯ä¸­èŠ‚ç‚¹çš„å±‚æ¬¡ç»“æž„ä»¥åŠåœºæ™¯æœ¬èº«ã€‚节点å¯"
-"ä»¥è¢«æ·»åŠ ã€æ£€ç´¢å’Œåˆ é™¤ã€‚整个场景树(以åŠå½“å‰åœºæ™¯ï¼‰å¯ä»¥è¢«æš‚åœã€‚场景å¯ä»¥è¢«åŠ è½½ã€"
-"切æ¢å’Œé‡æ–°åŠ è½½ã€‚\n"
-"你也å¯ä»¥ä½¿ç”¨[SceneTree]将你的节点组织æˆç»„:æ¯ä¸ªèŠ‚ç‚¹éƒ½å¯ä»¥è¢«åˆ†é…到你想è¦åˆ›å»ºçš„"
-"组,例如一个 \"敌人 \"组。然åŽä½ å¯ä»¥è¿­ä»£è¿™äº›ç»„,甚至å¯ä»¥ä¸€æ¬¡è°ƒç”¨æ–¹æ³•并设置所"
+"ä»¥è¢«æ·»åŠ ã€æ£€ç´¢å’Œåˆ é™¤ã€‚整个场景树å¯ä»¥è¢«æš‚åœï¼ŒåŒ…括当å‰åœºæ™¯ã€‚场景å¯ä»¥è¢«åŠ è½½ã€åˆ‡"
+"æ¢å’Œé‡æ–°åŠ è½½ã€‚\n"
+"你也å¯ä»¥ä½¿ç”¨[SceneTree]将你的节点组织æˆç»„,æ¯ä¸ªèŠ‚ç‚¹éƒ½å¯ä»¥è¢«åˆ†é…到你想è¦åˆ›å»ºçš„"
+"组,例如一个 \"敌人\" 组。然åŽä½ å¯ä»¥è¿­ä»£è¿™äº›ç»„,甚至å¯ä»¥ä¸€æ¬¡è°ƒç”¨æ–¹æ³•并设置所"
"有组æˆå‘˜çš„属性。\n"
-"[SceneTree]是场景使用的默认[MainLoop]实现,因此负责游æˆçš„循环。"
+"[SceneTree]由场景使用的默认[MainLoop]实现,因此负责游æˆçš„循环。"
#: doc/classes/SceneTree.xml:12
msgid ""
"https://docs.godotengine.org/en/3.4/getting_started/step_by_step/scene_tree."
"html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/getting_started/step_by_step/scene_tree."
-"html"
+"https://docs.godotengine.org/zh_CN/stable/getting_started/step_by_step/"
+"scene_tree.html"
#: doc/classes/SceneTree.xml:13
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/viewports/multiple_resolutions."
"html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/viewports/multiple_resolutions."
-"html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/viewports/"
+"multiple_resolutions.html"
#: doc/classes/SceneTree.xml:21
msgid ""
@@ -60010,6 +62004,16 @@ msgid ""
"immediately, use [method call_group_flags] with the [constant "
"GROUP_CALL_REALTIME] flag."
msgstr ""
+"对给定组的æ¯ä¸ªæˆå‘˜è°ƒç”¨ [code]method[/code]。您å¯ä»¥é€šè¿‡åœ¨æ–¹æ³•è°ƒç”¨ç»“æŸæ—¶æŒ‡å®šå‚"
+"æ•°æ¥å°†å‚数传递给 [code]method[/code]。此方法等效于使用 [constant "
+"GROUP_CALL_DEFAULT] 标志调用 [method call_group_flags]。\n"
+"[b]注:[/b] [code]method[/code]最多åªèƒ½æœ‰5ä¸ªå‚æ•°ï¼ˆæ€»å…±7ä¸ªå‚æ•°ä¼ é€’给这个方"
+"法)。\n"
+"[b]注æ„:[/b] 由于设计é™åˆ¶ï¼Œå¦‚æžœå‚æ•°ä¹‹ä¸€ä¸º [code]null[/code],[method "
+"call_group] å°†é™é»˜å¤±è´¥ã€‚\n"
+"[b]注æ„:[/b] [method call_group] 将始终调用具有一帧延迟的方法,其方å¼ç±»ä¼¼äºŽ "
+"[method Object.call_deferred]。è¦ç«‹å³è°ƒç”¨æ–¹æ³•,请将 [method "
+"call_group_flags] 与 [constant GROUP_CALL_REALTIME] 标志一起使用。"
#: doc/classes/SceneTree.xml:33
msgid ""
@@ -60026,9 +62030,20 @@ msgid ""
"GROUP_CALL_REVERSE, \"bases\", \"destroy\")\n"
"[/codeblock]"
msgstr ""
+"对给定组的æ¯ä¸ªæˆå‘˜è°ƒç”¨ [code]method[/code],éµä»Žç»™å®šçš„ [enum "
+"GroupCallFlags]。您å¯ä»¥é€šè¿‡åœ¨æ–¹æ³•è°ƒç”¨ç»“æŸæ—¶æŒ‡å®šå‚æ•°æ¥å°†å‚数传递给 "
+"[code]method[/code]。\n"
+"[b]注:[/b] [code]method[/code]最多åªèƒ½æœ‰5ä¸ªå‚æ•°ï¼ˆæ€»å…±8ä¸ªå‚æ•°ä¼ é€’给这个方"
+"法)。\n"
+"[b]注æ„:[/b] 由于设计é™åˆ¶ï¼Œå¦‚æžœå‚æ•°ä¹‹ä¸€ä¸º [code]null[/code],[method "
+"call_group_flags] å°†é™é»˜å¤±è´¥ã€‚\n"
+"[codeblock]\n"
+"# ç«‹å³ä»¥ç›¸å的顺åºè°ƒç”¨è¯¥æ–¹æ³•。\n"
+"get_tree().call_group_flags(SceneTree.GROUP_CALL_REALTIME | SceneTree."
+"GROUP_CALL_REVERSE, \"bases\", \"destroy\")\n"
+"[/codeblock]"
#: doc/classes/SceneTree.xml:46
-#, fuzzy
msgid ""
"Changes the running scene to the one at the given [code]path[/code], after "
"loading it into a [PackedScene] and creating a new instance.\n"
@@ -60039,13 +62054,14 @@ msgid ""
"node is added on the next idle frame. You won't be able to access it "
"immediately after the [method change_scene] call."
msgstr ""
-"将正在è¿è¡Œçš„场景改å˜ä¸ºç»™å®šçš„[code]path[/code]上的场景,在将其加载到一个"
+"将正在è¿è¡Œçš„场景改å˜ä¸ºæŒ‡å®šçš„[code]path[/code]中的场景,在将其加载到"
"[PackedScene]中并创建一个新的实例。\n"
"æˆåŠŸæ—¶è¿”å›ž[constant OK],如果[code]path[/code]ä¸èƒ½è¢«åŠ è½½åˆ°ä¸€ä¸ª[PackedScene]"
-"中,则返回[constant ERR_CANT_CREATE],如果该场景ä¸èƒ½è¢«å®žä¾‹åŒ–。"
+"中,,该场景ä¸èƒ½è¢«å®žä¾‹åŒ–,则返回[constant ERR_CANT_CREATE]。\n"
+"[b]注æ„:[/b]åœºæ™¯æ”¹å˜æœ‰å»¶è¿Ÿï¼Œå³æ–°çš„场景节点是在下一个空闲帧中添加。在[method "
+"change_scene]调用之åŽï¼Œä½ ä¸èƒ½ç«‹å³è®¿é—®å®ƒã€‚"
#: doc/classes/SceneTree.xml:55
-#, fuzzy
msgid ""
"Changes the running scene to a new instance of the given [PackedScene].\n"
"Returns [constant OK] on success or [constant ERR_CANT_CREATE] if the scene "
@@ -60054,12 +62070,13 @@ msgid ""
"node is added on the next idle frame. You won't be able to access it "
"immediately after the [method change_scene_to] call."
msgstr ""
-"将正在è¿è¡Œçš„场景改å˜ä¸ºä¸€ä¸ªç»™å®šçš„[PackedScene]的新实例。\n"
+"将正在è¿è¡Œçš„场景改å˜ä¸ºç»™å®šçš„[PackedScene]的新实例。\n"
"æˆåŠŸæ—¶è¿”å›ž[constant OK],如果场景ä¸èƒ½è¢«å®žä¾‹åŒ–,则返回[constant "
-"ERR_CANT_CREATE]。"
+"ERR_CANT_CREATE]。\n"
+"[b]注æ„:[/b] åœºæ™¯çš„æ”¹å˜æ˜¯å»¶è¿Ÿçš„,新的场景节点是在下一个空闲帧中添加。在调用"
+"[method change_scene_to]之åŽï¼Œä½ ä¸èƒ½ç«‹å³è®¿é—®å®ƒã€‚"
#: doc/classes/SceneTree.xml:65
-#, fuzzy
msgid ""
"Returns a [SceneTreeTimer] which will [signal SceneTreeTimer.timeout] after "
"the given time in seconds elapsed in this [SceneTree]. If "
@@ -60077,13 +62094,14 @@ msgstr ""
"返回一个[SceneTreeTimer],在这个[SceneTree]中ç»è¿‡ç»™å®šçš„æ—¶é—´ï¼ˆç§’)åŽï¼Œè¯¥"
"[SceneTreeTimer.timeout]å°†å‘出信å·ã€‚如果[code]pause_mode_process[/code]被设置"
"为[code]false[/code],暂åœ[SceneTree]也将暂åœè¯¥å®šæ—¶å™¨ã€‚\n"
-"常用于创建一个一次性的延迟定时器,如下é¢çš„例å­ã€‚\n"
+"常用于创建一次性的延迟定时器,如下é¢çš„例å­:\n"
"[codeblock]\n"
"func some_function():\n"
" print(\"start\")\n"
" yield(get_tree().create_timer(1.0), \"timeout\")\n"
" print(\"end\")\n"
-"[/codeblock]"
+"[/codeblock]\n"
+"计时器将在其时间结æŸåŽè¢«è‡ªåŠ¨é‡Šæ”¾ã€‚"
#: doc/classes/SceneTree.xml:79
msgid ""
@@ -60119,13 +62137,12 @@ msgid "Returns [code]true[/code] if the given group exists."
msgstr "如果给定的组存在,返回[code]true[/code]。"
#: doc/classes/SceneTree.xml:129
-#, fuzzy
msgid ""
"Returns [code]true[/code] if the most recent [InputEvent] was marked as "
"handled with [method set_input_as_handled]."
msgstr ""
-"å¦‚æžœèŠ‚ç‚¹æ­£åœ¨å¤„ç†æœªè¢«å¤„ç†çš„输入(å‚阅[方法set_process_unhandled_input]),则返回"
-"[code]true[/code]。"
+"å¦‚æžœèŠ‚ç‚¹æ­£åœ¨å¤„ç†æœªè¢«å¤„ç†çš„输入(å‚阅[method set_process_unhandled_input]),则"
+"返回[code]true[/code]。"
#: doc/classes/SceneTree.xml:135
msgid ""
@@ -60154,7 +62171,6 @@ msgid ""
msgstr "将给定的对象排队准备删除,å³åœ¨å½“å‰å¸§ä¹‹åŽè°ƒç”¨ [method Object.free] 。"
#: doc/classes/SceneTree.xml:166
-#, fuzzy
msgid ""
"Quits the application at the end of the current iteration. A process "
"[code]exit_code[/code] can optionally be passed as an argument. If this "
@@ -60164,9 +62180,11 @@ msgid ""
"iOS Human Interface Guidelines, the user is expected to close apps via the "
"Home button."
msgstr ""
-"退出应用程åºã€‚进程 [code]exit_code[/code] å¯ä»¥é€‰æ‹©ä½œä¸ºå‚æ•°ä¼ é€’ã€‚å¦‚æžœæ­¤å‚æ•°ä¸º "
-"[code]0[/code] 或更大,它将覆盖在退出应用程åºä¹‹å‰å®šä¹‰çš„ [member OS."
-"exit_code]。"
+"在当å‰è¿­ä»£ç»“æŸæ—¶é€€å‡ºåº”用程åºã€‚进程的[code]exit_code[/code]å¯ä»¥é€‰æ‹©æ€§åœ°ä½œä¸ºå‚"
+"æ•°ä¼ é€’ã€‚å¦‚æžœè¿™ä¸ªå‚æ•°æ˜¯[code]0[/code]或更大,它将覆盖在退出应用程åºä¹‹å‰å®šä¹‰çš„"
+"[member OS.exit_code]。\n"
+"[b]注æ„:[/b] 在iOS上,这个方法ä¸èµ·ä½œç”¨ã€‚å‚考iOSç•Œé¢æŒ‡å—建议,用户应该通过主"
+"页按钮æ¥å…³é—­åº”用程åºã€‚"
#: doc/classes/SceneTree.xml:173
msgid ""
@@ -60208,28 +62226,28 @@ msgstr ""
"code],尊é‡ç»™å®šçš„ [enum GroupCallFlags]。"
#: doc/classes/SceneTree.xml:207
-#, fuzzy
msgid "Marks the most recent [InputEvent] as handled."
-msgstr "å°†å¿«æ·æ–¹å¼çš„ [InputEvent] 作为 [String] 返回。"
+msgstr "将最新的[InputEvent]标记为已处ç†ã€‚"
#: doc/classes/SceneTree.xml:214
-#, fuzzy
msgid ""
"If [code]true[/code], the application quits automatically on going back (e."
"g. on Android). Enabled by default.\n"
"To handle 'Go Back' button when this option is disabled, use [constant "
"MainLoop.NOTIFICATION_WM_GO_BACK_REQUEST]."
msgstr ""
-"如果 [code]true[/code],应用程åºä¼šåœ¨è¿”回时自动退出(例如在 Android 上)。默认"
-"å¯ç”¨ã€‚\n"
-"è¦åœ¨ç¦ç”¨æ­¤é€‰é¡¹æ—¶å¤„ç†â€œè¿”å›žâ€æŒ‰é’®ï¼Œè¯·ä½¿ç”¨ [constant DisplayServer."
-"WINDOW_EVENT_GO_BACK_REQUEST]。"
+"如果[code]true[/code],应用程åºåœ¨è¿”回时自动退出,例如在Android上。默认情况是"
+"å¯ç”¨çš„。\n"
+"è¦åœ¨è¿™ä¸ªé€‰é¡¹è¢«ç¦ç”¨æ—¶å¤„ç†'Go Back'按钮,请使用 [constant MainLoop."
+"NOTIFICATION_WM_GO_BACK_REQUEST] 。"
#: doc/classes/SceneTree.xml:225
msgid ""
"Configures screen stretching to the given [enum StretchMode], [enum "
"StretchAspect], minimum size and [code]scale[/code]."
msgstr ""
+"å°†å±å¹•拉伸é…置为给定的 [enum StretchMode]ã€[enum StretchAspect]ã€æœ€å°å°ºå¯¸å’Œ "
+"[code]scale[/code]。"
#: doc/classes/SceneTree.xml:231
msgid "The current scene."
@@ -60291,7 +62309,6 @@ msgstr ""
"过连接到 [SceneTree] çš„ä¿¡å·æ¥å®Œæˆçš„。"
#: doc/classes/SceneTree.xml:253
-#, fuzzy
msgid ""
"If [code]true[/code], the [SceneTree] is paused. Doing so will have the "
"following behavior:\n"
@@ -60300,10 +62317,10 @@ msgid ""
"- [method Node._process], [method Node._physics_process] and [method Node."
"_input] will not be called anymore in nodes."
msgstr ""
-"如果 [code]true[/code]ï¼Œåˆ™æš‚åœ [SceneTree]。这样åšå°†æœ‰ä»¥ä¸‹è¡Œä¸ºï¼š\n"
-"- 2D å’Œ 3D 物ç†å°†åœæ­¢ã€‚\n"
-"- [method Node._process]ã€[method Node._physics_process] å’Œ[method Node."
-"_input] å°†ä¸å†åœ¨èŠ‚ç‚¹ä¸­è°ƒç”¨ã€‚"
+"如果[code]true[/code],[SceneTree]会暂åœã€‚这样åšä¼šæœ‰ä»¥ä¸‹è¡Œä¸º:\n"
+"- 2Då’Œ3D物ç†å°†åœæ­¢ã€‚这包括信å·å’Œç¢°æ’žæ£€æµ‹ã€‚\n"
+"- 节点ä¸å†è°ƒç”¨[method Node._process]ã€[method Node._physics_process]å’Œ"
+"[method Node._input]。"
#: doc/classes/SceneTree.xml:258
msgid ""
@@ -60314,14 +62331,12 @@ msgstr ""
"连接。"
#: doc/classes/SceneTree.xml:261
-#, fuzzy
msgid "The [SceneTree]'s root [Viewport]."
-msgstr "[SceneTree] 的根 [Window]。"
+msgstr "[SceneTree] 的根 [Viewport]。"
#: doc/classes/SceneTree.xml:264
-#, fuzzy
msgid "If [code]true[/code], font oversampling is used."
-msgstr "如果[code]true[/code],则å¯ç”¨æ³•线映射。"
+msgstr "如果 [code]true[/code],则使用字体超采样。"
#: doc/classes/SceneTree.xml:270
msgid ""
@@ -60349,9 +62364,8 @@ msgstr ""
"和拖动文件的å±å¹•标识符。"
#: doc/classes/SceneTree.xml:289
-#, fuzzy
msgid "Emitted whenever global menu item is clicked."
-msgstr "当项目被选中时触å‘。"
+msgstr "æ¯å½“å•击全局èœå•项时触å‘。"
#: doc/classes/SceneTree.xml:294
msgid ""
@@ -60409,7 +62423,7 @@ msgstr ""
msgid ""
"Emitted when the screen resolution (fullscreen) or window size (windowed) "
"changes."
-msgstr ""
+msgstr "当å±å¹•分辨率(全å±ï¼‰æˆ–窗å£å¤§å°ï¼ˆçª—å£åŒ–ï¼‰æ”¹å˜æ—¶å‘出。"
#: doc/classes/SceneTree.xml:345
msgid ""
@@ -60453,37 +62467,37 @@ msgstr "以更高的分辨率渲染拉伸(æ’值)。"
msgid ""
"Keep the specified display resolution. No interpolation. Content may appear "
"pixelated."
-msgstr ""
+msgstr "ä¿æŒæŒ‡å®šçš„æ˜¾ç¤ºåˆ†è¾¨çŽ‡ã€‚æ²¡æœ‰æ’值。内容å¯èƒ½ä¼šå‡ºçްåƒç´ åŒ–。"
#: doc/classes/SceneTree.xml:377
msgid ""
"Fill the window with the content stretched to cover excessive space. Content "
"may appear stretched."
-msgstr ""
+msgstr "用拉伸的内容填充窗å£ä»¥è¦†ç›–过多的空间。内容å¯èƒ½ä¼šè¢«æ‹‰ä¼¸ã€‚"
#: doc/classes/SceneTree.xml:380
msgid ""
"Retain the same aspect ratio by padding with black bars on either axis. This "
"prevents distortion."
-msgstr ""
+msgstr "在任æ„轴上用黑æ¡å¡«å……æ¥ä¿æŒç›¸åŒçš„长宽比。这å¯ä»¥é˜²æ­¢å¤±çœŸã€‚"
#: doc/classes/SceneTree.xml:383
msgid ""
"Expand vertically. Left/right black bars may appear if the window is too "
"wide."
-msgstr ""
+msgstr "垂直展开。如果窗å£å¤ªå®½ï¼Œå¯èƒ½ä¼šå‡ºçް左/å³é»‘æ¡ã€‚"
#: doc/classes/SceneTree.xml:386
msgid ""
"Expand horizontally. Top/bottom black bars may appear if the window is too "
"tall."
-msgstr ""
+msgstr "水平展开。如果窗å£å¤ªé«˜ï¼Œå¯èƒ½ä¼šå‡ºçŽ°é¡¶éƒ¨/底部黑æ¡ã€‚"
#: doc/classes/SceneTree.xml:389
msgid ""
"Expand in both directions, retaining the same aspect ratio. This prevents "
"distortion while avoiding black bars."
-msgstr ""
+msgstr "在两个方å‘ä¸Šæ‰©å±•ï¼Œä¿æŒç›¸åŒçš„纵横比。这å¯ä»¥é˜²æ­¢å¤±çœŸï¼ŒåŒæ—¶é¿å…黑æ¡ã€‚"
#: doc/classes/SceneTreeTimer.xml:4
msgid "One-shot timer."
@@ -60542,8 +62556,8 @@ msgid ""
"https://docs.godotengine.org/en/3.4/getting_started/step_by_step/scripting."
"html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/getting_started/step_by_step/scripting."
-"html"
+"https://docs.godotengine.org/zh_CN/stable/getting_started/step_by_step/"
+"scripting.html"
#: doc/classes/Script.xml:17
msgid "Returns [code]true[/code] if the script can be instanced."
@@ -60618,7 +62632,6 @@ msgid "The Editor's popup dialog for creating new [Script] files."
msgstr "用于创建新 [Script] æ–‡ä»¶çš„ç¼–è¾‘å™¨å¼¹å‡ºå¯¹è¯æ¡†ã€‚"
#: doc/classes/ScriptCreateDialog.xml:7
-#, fuzzy
msgid ""
"The [ScriptCreateDialog] creates script files according to a given template "
"for a given scripting language. The standard use is to configure its fields "
@@ -60631,14 +62644,14 @@ msgid ""
" dialog.popup_centered()\n"
"[/codeblock]"
msgstr ""
-"[ScriptCreateDialog] æ ¹æ®ç»™å®šè„šæœ¬è¯­è¨€çš„ç»™å®šæ¨¡æ¿åˆ›å»ºè„šæœ¬æ–‡ä»¶ã€‚æ ‡å‡†ç”¨æ³•æ˜¯åœ¨è°ƒ"
-"用 [method Window.popup] 方法之一之å‰é…置其字段。\n"
+"[ScriptCreateDialog] æ ¹æ®æŒ‡å®šè„šæœ¬è¯­è¨€çš„ç‰¹å®šæ¨¡æ¿åˆ›å»ºè„šæœ¬æ–‡ä»¶ã€‚æ ‡å‡†ç”¨æ³•æ˜¯åœ¨ç±»ä¼¼"
+"调用 [method Popup.popup] 方法之å‰é…置其字段。\n"
"[codeblock]\n"
"func _ready():\n"
-" dialog.config(\"Node\", \"res://new_node.gd\") # 用于引擎内类型\n"
+" dialog.config(\"Node\", \"res://new_node.gd\") # For in-engine types\n"
" dialog.config(\"\\\"res://base_node.gd\\\"\", \"res://derived_node.gd\") "
-"# 用于脚本类型\n"
-" dialog.popup_center()\n"
+"# For script types\n"
+" dialog.popup_centered()\n"
"[/codeblock]"
#: doc/classes/ScriptCreateDialog.xml:25
@@ -60681,6 +62694,8 @@ msgid ""
"code]. The file extension can be omitted from [code]base_path[/code]. It "
"will be added based on the selected scripting language."
msgstr ""
+"æ‰“å¼€åˆ›å»ºè„šæœ¬çš„å¯¹è¯æ¡†ã€‚脚本将扩展[code]base_name[/code]。文件扩展åå¯ä»¥ä»Ž"
+"[code]base_path[/code]中çœç•¥ã€‚å®ƒå°†æ ¹æ®æ‰€é€‰æ‹©çš„脚本语言添加。"
#: doc/classes/ScriptEditor.xml:67
msgid ""
@@ -60723,7 +62738,6 @@ msgid "A helper node for displaying scrollable elements such as lists."
msgstr "ç”¨äºŽæ˜¾ç¤ºå¯æ»šåŠ¨å…ƒç´ ï¼ˆä¾‹å¦‚åˆ—è¡¨ï¼‰çš„è¾…åŠ©èŠ‚ç‚¹ã€‚"
#: doc/classes/ScrollContainer.xml:7
-#, fuzzy
msgid ""
"A ScrollContainer node meant to contain a [Control] child. ScrollContainers "
"will automatically create a scrollbar child ([HScrollBar], [VScrollBar], or "
@@ -60737,21 +62751,21 @@ msgid ""
"they will upscale to the ScrollContainer's size if it's larger (scroll is "
"invisible for the chosen dimension)."
msgstr ""
-"ScrollContainer 节点用于容纳一个 [Control] å­èŠ‚ç‚¹ã€‚\n"
-"ScrollContainers å°†åœ¨éœ€è¦æ—¶è‡ªåŠ¨åˆ›å»ºä¸€ä¸ªæ»šåŠ¨æ¡å­é¡¹ï¼ˆ[HScrollBar]ã€"
-"[VScrollBar] ),并且åªä¼šåœ¨ ScrollContainer 区域内绘制控件。滚动æ¡å°†è‡ªåŠ¨ç»˜åˆ¶"
-"在å³ä¾§ï¼ˆåž‚直)或底部(水平),并å…许拖动以在 ScrollContainer 内移动å¯è§†æŽ§ä»¶"
-"(åŠå…¶å­é¡¹ï¼‰ã€‚滚动æ¡è¿˜å°†æ ¹æ®æŽ§ä»¶ç›¸å¯¹äºŽ ScrollContainer çš„ [member Control."
-"rect_min_size] 自动调整抓å–器的大å°ã€‚\n"
-"与 [Panel] 控件é…åˆä½¿ç”¨æ•ˆæžœå¾ˆå¥½ã€‚您å¯ä»¥åœ¨å­é¡¹çš„大尿 ‡å¿—上设置 [code]EXPAND[/"
-"code],因此如果 ScrollContainer çš„å¤§å°æ›´å¤§ï¼ˆæ»šåŠ¨å¯¹äºŽæ‰€é€‰ç»´åº¦ä¸å¯è§ï¼‰ï¼Œå®ƒä»¬å°†"
-"放大到 ScrollContainer 的大å°ã€‚"
+"æ»šåŠ¨å®¹å™¨èŠ‚ç‚¹ï¼Œç”¨äºŽåŒ…å« [Control] å­èŠ‚ç‚¹ã€‚ æ»šåŠ¨å®¹å™¨å°†åœ¨éœ€è¦æ—¶è‡ªåŠ¨åˆ›å»ºæ»šåŠ¨æ¡å­"
+"项([HScrollBar]ã€[VScrollBar] 或两者),且仅在滚动容器区域内绘制控件。滚动æ¡"
+"将自动绘制在å³ä¾§æˆ–底部,å³åž‚直或水平,并å…许拖动以在滚动容器内移动å¯è§†æŽ§ä»¶åŠ"
+"å…¶å­é¡¹ã€‚滚动æ¡è¿˜å°†æ ¹æ®æŽ§ä»¶ç›¸å¯¹äºŽæ»šåŠ¨å®¹å™¨çš„ [member Control.rect_min_size] 自"
+"动调整抓å–器的大å°ã€‚与 [Panel] 控件é…åˆä½¿ç”¨æ•ˆæžœå¾ˆå¥½ã€‚您å¯ä»¥å°†å­é¡¹çš„大尿 ‡å¿—设"
+"置为 [code]EXPAND[/code]ï¼Œå½“æ»šåŠ¨å®¹å™¨çš„å¤§å°æ›´å¤§ï¼ˆæ»šåŠ¨å¯¹äºŽæ‰€é€‰ç»´åº¦ä¸å¯è§ï¼‰ï¼Œå®ƒ"
+"们将放大到滚动容器的大å°ã€‚"
#: doc/classes/ScrollContainer.xml:16
msgid ""
"Ensures the given [code]control[/code] is visible (must be a direct or "
"indirect child of the ScrollContainer). Used by [member follow_focus]."
msgstr ""
+"ç¡®ä¿ç»™å®šçš„ [code]control[/code] 是å¯è§çš„,必须是滚动容器的直接或间接å­çº§ã€‚ç”± "
+"[member follow_focus] 使用。"
#: doc/classes/ScrollContainer.xml:22
msgid ""
@@ -60761,6 +62775,10 @@ msgid ""
"[member scroll_horizontal_enabled]. If you want to only hide it instead, use "
"its [member CanvasItem.visible] property."
msgstr ""
+"返回此[ScrollContainer]的水平滚动æ¡[HScrollBar]。\n"
+"[b]警告:[/b] 这是一个必须的内部节点,移除和释放它å¯èƒ½ä¼šå¯¼è‡´å´©æºƒã€‚如果你想ç¦"
+"用水平滚动æ¡ï¼Œè¯·ä½¿ç”¨[member scroll_horizontal_enabled]ã€‚å¦‚æžœä½ åªæƒ³éšè—它,则"
+"使用其[member CanvasItem.visible]属性。"
#: doc/classes/ScrollContainer.xml:29
msgid ""
@@ -60770,6 +62788,10 @@ msgid ""
"[member scroll_vertical_enabled]. If you want to only hide it instead, use "
"its [member CanvasItem.visible] property."
msgstr ""
+"返回此[ScrollContainer]的垂直滚动æ¡[VScrollBar]。\n"
+"[b]警告:[/b] 这是一个必需的内部节点,移除和释放它å¯èƒ½ä¼šå¯¼è‡´å´©æºƒã€‚如果你想ç¦"
+"用垂直滚动æ¡ï¼Œè¯·ä½¿ç”¨[member scroll_vertical_enabled]ã€‚å¦‚æžœä½ åªæƒ³éšè—它,则使"
+"用其[member CanvasItem.visible]属性。"
#: doc/classes/ScrollContainer.xml:36
msgid ""
@@ -60840,20 +62862,20 @@ msgstr ""
"进制版本,请å‚阅 [Mutex]。"
#: doc/classes/Semaphore.xml:16
-#, fuzzy
msgid ""
"Lowers the [Semaphore], allowing one more thread in. Returns [constant OK] "
"on success, [constant ERR_BUSY] otherwise."
msgstr ""
-"试图é”定这个[Mutex],但并ä¸é˜»å¡žã€‚æˆåŠŸæ—¶è¿”å›ž[常é‡OK],å¦åˆ™è¿”回[常é‡ERR_BUSY]。"
+"试图é”定这个[Mutex],但并ä¸é˜»å¡žã€‚æˆåŠŸæ—¶è¿”å›ž[constant OK],å¦åˆ™è¿”回[constant "
+"ERR_BUSY]。"
#: doc/classes/Semaphore.xml:22
-#, fuzzy
msgid ""
"Tries to wait for the [Semaphore], if its value is zero, blocks until non-"
"zero. Returns [constant OK] on success, [constant ERR_BUSY] otherwise."
msgstr ""
-"试图é”定这个[Mutex],但并ä¸é˜»å¡žã€‚æˆåŠŸæ—¶è¿”å›ž[常é‡OK],å¦åˆ™è¿”回[常é‡ERR_BUSY]。"
+"试图é”定这个[Mutex],但并ä¸é˜»å¡žã€‚æˆåŠŸæ—¶è¿”å›ž[constant OK],å¦åˆ™è¿”回[constant "
+"ERR_BUSY]。"
#: doc/classes/Separator.xml:4
msgid "Base class for separators."
@@ -60885,15 +62907,15 @@ msgstr ""
#: doc/classes/Shader.xml:10 doc/classes/ShaderMaterial.xml:11
msgid "https://docs.godotengine.org/en/3.4/tutorials/shading/index.html"
-msgstr "https://docs.godotengine.org/en/3.4/tutorials/shading/index.html"
+msgstr "https://docs.godotengine.org/zh_CN/stable/tutorials/shading/index.html"
#: doc/classes/Shader.xml:11
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/shading/your_first_shader/"
"what_are_shaders.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/shading/your_first_shader/"
-"what_are_shaders.html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/shading/"
+"your_first_shader/what_are_shaders.html"
#: doc/classes/Shader.xml:18
msgid ""
@@ -60947,6 +62969,9 @@ msgid ""
"[b]Note:[/b] Custom defines are not validated by the Godot shader parser, so "
"care should be taken when using them."
msgstr ""
+"返回该ç€è‰²å™¨çš„自定义。自定义å¯ä»¥åœ¨Godot中用于添加ç€è‰²å™¨é€»è¾‘所需的GLSLé¢„å¤„ç†æŒ‡"
+"令(例如:扩展)。\n"
+"[b]注æ„:[/b] 自定义没有ç»è¿‡Godotç€è‰²å™¨è§£æžå™¨çš„验è¯ï¼Œæ‰€ä»¥ä½¿ç”¨æ—¶è¦æ³¨æ„。"
#: doc/classes/Shader.xml:57
msgid "Mode used to draw all 3D objects."
@@ -60967,7 +62992,6 @@ msgid "A material that uses a custom [Shader] program."
msgstr "使用自定义 [Shader] 程åºçš„æè´¨ã€‚"
#: doc/classes/ShaderMaterial.xml:7
-#, fuzzy
msgid ""
"A material that uses a custom [Shader] program to render either items to "
"screen or process particles. You can create multiple materials for the same "
@@ -60977,8 +63001,10 @@ msgid ""
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-"使用自定义[Shader]ç¨‹åºæ¥æ¸²æŸ“å±å¹•ä¸Šçš„ç‰©å“æˆ–ç²’å­çš„æè´¨ã€‚ä½ å¯ä»¥ä¸ºåŒä¸€ä¸ªç€è‰²å™¨åˆ›"
-"建多个æè´¨ï¼Œä½†è¦ä¸ºç€è‰²å™¨ä¸­å®šä¹‰çš„uniformé…ç½®ä¸åŒçš„值。"
+"使用自定义 [Shader] ç¨‹åºæ¸²æŸ“项目以筛选或处ç†ç²’å­çš„æè´¨ã€‚您å¯ä»¥ä¸ºåŒä¸€ä¸ªç€è‰²å™¨"
+"åˆ›å»ºå¤šç§æè´¨ï¼Œä½†å¯ä»¥ä¸ºç€è‰²å™¨ä¸­å®šä¹‰çš„uniformsé…ç½®ä¸åŒçš„值。\n"
+"[b]注æ„:[/b] 由于渲染器é™åˆ¶ï¼Œåœ¨ [GIProbe] 中使用时,自å‘å…‰ [ShaderMaterial] "
+"无法å‘å…‰ã€‚åªæœ‰è‡ªå‘光的 [SpatialMaterial] å¯ä»¥åœ¨ [GIProbe] 中å‘光。"
#: doc/classes/ShaderMaterial.xml:18
msgid ""
@@ -61016,18 +63042,16 @@ msgid "Base class for all 3D shape resources."
msgstr "所有 3D 形状资æºçš„基类。"
#: doc/classes/Shape.xml:7
-#, fuzzy
msgid ""
"Base class for all 3D shape resources. Nodes that inherit from this can be "
"used as shapes for a [PhysicsBody] or [Area] objects."
msgstr ""
-"所有 3D 形状资æºçš„基类。继承自此的节点å¯ç”¨ä½œ [PhysicsBody3D] 或 [Area3D] 对象"
-"的形状。"
+"所有3D形状资æºçš„基类。继承于此的节点å¯ä»¥ä½œä¸º[PhysicsBody]或[Area]对象的形状。"
#: doc/classes/Shape.xml:16
msgid ""
"Returns the [ArrayMesh] used to draw the debug collision for this [Shape]."
-msgstr ""
+msgstr "返回用于绘制此[Shape]的调试碰撞的[ArrayMesh]。"
#: doc/classes/Shape.xml:22
msgid ""
@@ -61038,6 +63062,10 @@ msgid ""
"better for performance, at the cost of accuracy around edges as it makes "
"them less sharp."
msgstr ""
+"形状的碰撞边è·ã€‚åªåœ¨Bullet物ç†è¿ç®—中使用。\n"
+"碰撞边è·å…许通过在形状周围添加é¢å¤–的外壳æ¥ä½¿ç¢°æ’žæ£€æµ‹æ›´æœ‰æ•ˆã€‚当物体é‡å çš„部分"
+"è¶…è¿‡å…¶è¾¹è·æ—¶ï¼Œç¢°æ’žç®—æ³•çš„æˆæœ¬ä¼šæ›´é«˜ï¼Œæ‰€ä»¥è¾¹è·çš„æ•°å€¼è¶Šé«˜å¯¹æ€§èƒ½è¶Šå¥½ï¼Œä½†ä»£ä»·æ˜¯è¾¹"
+"缘的精度会é™ä½Žã€‚"
#: doc/classes/Shape2D.xml:4
msgid "Base class for all 2D shapes."
@@ -61110,14 +63138,13 @@ msgstr ""
"试的è¿åЍ ([code]shape_motion[/code])。"
#: doc/classes/Shape2D.xml:62
-#, fuzzy
msgid ""
"Draws a solid shape onto a [CanvasItem] with the [VisualServer] API filled "
"with the specified [code]color[/code]. The exact drawing method is specific "
"for each shape and cannot be configured."
msgstr ""
-"使用填充了指定 [code] color [/code] 的 [RenderingServer] API 在 [CanvasItem] "
-"上绘制实体形状。确切的绘制方法是针对æ¯ä¸ªå½¢çŠ¶çš„ï¼Œæ— æ³•é…置。"
+"用[VisualServer]API在[CanvasItem]上绘制实体形状,并填充指定的[code]color[/"
+"code]。确切的绘制方法是æ¯ä¸ªå½¢çŠ¶ç‰¹æœ‰çš„ï¼Œæ— æ³•é…置。"
#: doc/classes/Shape2D.xml:68
msgid "The shape's custom solver bias."
@@ -61166,7 +63193,6 @@ msgid "Skeleton for characters and animated objects."
msgstr "角色和动画对象的骨架。"
#: doc/classes/Skeleton.xml:7
-#, fuzzy
msgid ""
"Skeleton provides a hierarchical interface for managing bones, including "
"pose, rest and animation (see [Animation]). It can also use ragdoll "
@@ -61177,11 +63203,12 @@ msgid ""
"with respect to skeleton, so it not the actual global/world transform of the "
"bone."
msgstr ""
-"Skeleton3D æä¾›äº†ç”¨äºŽç®¡ç†éª¨éª¼çš„分层界é¢ï¼ŒåŒ…括姿势ã€ä¼‘æ¯å’ŒåŠ¨ç”»ï¼ˆå‚阅 "
-"[Animation])。它还å¯ä»¥ä½¿ç”¨å¸ƒå¨ƒå¨ƒç‰©ç†(ragdoll physics)。\n"
-"éª¨éª¼ç›¸å¯¹äºŽéª¨æž¶çš„æ•´ä½“å˜æ¢ç”±ä»¥ä¸‹å±‚次顺åºç¡®å®šï¼šé™æ­¢å§¿åŠ¿ã€è‡ªå®šä¹‰å§¿åŠ¿å’Œå§¿åŠ¿ã€‚\n"
-"请注æ„,下é¢çš„â€œå…¨å±€å§¿åŠ¿â€æ˜¯æŒ‡éª¨éª¼ç›¸å¯¹äºŽéª¨éª¼çš„æ•´ä½“å˜æ¢ï¼Œå› æ­¤å®ƒä¸æ˜¯éª¨éª¼çš„实际全"
-"å±€/ä¸–ç•Œå˜æ¢ã€‚"
+"骨架为管ç†éª¨éª¼æä¾›äº†åˆ†å±‚的界é¢ï¼ŒåŒ…括姿势ã€ä¼‘止和动画(å‚阅[Animation])。它还"
+"å¯ä»¥ä½¿ç”¨å¸ƒå¨ƒå¨ƒç‰©ç†ã€‚\n"
+"éª¨éª¼ç›¸å¯¹äºŽéª¨æž¶çš„æ•´ä½“å˜æ¢æ˜¯ç”±ä»¥ä¸‹å±‚次顺åºå†³å®šçš„:休止姿势ã€è‡ªå®šä¹‰å§¿åŠ¿å’Œå§¿"
+"势。\n"
+"注æ„,下é¢çš„ \"global pose\"å…¨å±€å§¿åŠ¿æ˜¯æŒ‡éª¨éª¼ç›¸å¯¹äºŽéª¨æž¶çš„æ•´ä½“å˜æ¢ï¼Œæ‰€ä»¥å®ƒä¸æ˜¯"
+"éª¨éª¼çš„å®žé™…å…¨å±€æˆ–ä¸–ç•Œå˜æ¢ã€‚"
#: doc/classes/Skeleton.xml:20
msgid ""
@@ -61224,14 +63251,13 @@ msgstr ""
"\"全局 \"å˜æ¢ã€‚"
#: doc/classes/Skeleton.xml:73
-#, fuzzy
msgid ""
"Returns the overall transform of the specified bone, with respect to the "
"skeleton, but without any global pose overrides. Being relative to the "
"skeleton frame, this is not the actual \"global\" transform of the bone."
msgstr ""
-"è¿”å›žç›¸å¯¹äºŽéª¨æž¶çš„æŒ‡å®šéª¨éª¼çš„æ•´ä½“å˜æ¢ã€‚ç”±äºŽæ˜¯ç›¸å¯¹äºŽéª¨æž¶çš„ï¼Œè¿™ä¸æ˜¯è¯¥éª¨éª¼çš„实际 "
-"\"全局 \"å˜æ¢ã€‚"
+"è¿”å›žæŒ‡å®šéª¨éª¼çš„æ•´ä½“å˜æ¢ï¼Œç›¸å¯¹äºŽéª¨æž¶ï¼Œä½†æ²¡æœ‰ä»»ä½•全局姿势覆盖。相对于骨架帧,这"
+"䏿˜¯éª¨éª¼çš„实际 \"global\" å˜æ¢ã€‚"
#: doc/classes/Skeleton.xml:80
msgid "Returns the name of the bone at index [code]index[/code]."
@@ -61271,9 +63297,8 @@ msgstr ""
"[b]注æ„:[/b] [code]parent_idx[/code] å¿…é¡»å°äºŽ [code]bone_idx[/code]。"
#: doc/classes/Skeleton.xml:196
-#, fuzzy
msgid "Sets the pose transform for bone [code]bone_idx[/code]."
-msgstr "为骨骼[code]bone_idx[/code]设置休æ¯å˜æ¢ã€‚"
+msgstr "设置骨骼 [code]bone_idx[/code] çš„å§¿åŠ¿å˜æ¢ã€‚"
#: doc/classes/Skeleton.xml:204
msgid "Sets the rest transform for bone [code]bone_idx[/code]."
@@ -61296,7 +63321,8 @@ msgstr ""
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/animation/2d_skeletons.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/animation/2d_skeletons.html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/animation/2d_skeletons."
+"html"
#: doc/classes/Skeleton2D.xml:17
msgid ""
@@ -61324,6 +63350,8 @@ msgid ""
"SkeletonIK is used to place the end bone of a [Skeleton] bone chain at a "
"certain point in 3D by rotating all bones in the chain accordingly."
msgstr ""
+"SkeletonIK用于将[Skeleton]骨链的末端骨骼置于3D中的æŸä¸€ç‚¹ï¼Œå¹¶ç›¸åº”地旋转骨链中"
+"的所有骨骼。"
#: doc/classes/SkeletonIK.xml:7
msgid ""
@@ -61358,6 +63386,32 @@ msgid ""
"skeleton_ik_node.set_interpolation(0.0)\n"
"[/codeblock]"
msgstr ""
+"SkeletonIK用于将[Skeleton]骨链的末端骨骼放置在3DæŸä¸€ç‚¹ä¸Šï¼Œå¹¶ç›¸åº”地旋转骨链中"
+"的所有骨骼。游æˆä¸­IK的典型场景是将角色的脚放在地é¢ä¸Šï¼Œæˆ–者将角色的手放在当å‰"
+"æŒæœ‰çš„物体上。SkeletonIK在内部使用FabrikInverseKinematicæ¥è§£å†³éª¨éª¼é“¾ï¼Œå¹¶å°†ç»“"
+"果应用于[Skeleton] [code]bones_global_pose_override[/code]属性中所有å—å½±å“çš„"
+"骨骼链。如果完全应用,这将覆盖任何æ¥è‡ª[Animation]çš„éª¨éª¼å˜æ¢æˆ–用户设置的骨骼自"
+"定义姿势。应用é‡å¯ä»¥ç”¨[code]interpolation[/code]å±žæ€§æ¥æŽ§åˆ¶ã€‚\n"
+"[codeblock]\n"
+"# 在æ¯ä¸€ä¸ªæ–°çš„帧上自动应用IKæ•ˆæžœï¼ˆä¸æ˜¯å½“å‰çš„)。\n"
+"skeleton_ik_node.start()\n"
+"\n"
+"# åªåœ¨å½“å‰å¸§ä¸Šåº”用IK效果\n"
+"skeleton_ik_node.start(true)\n"
+"\n"
+"# åœæ­¢IK效果并é‡ç½®éª¨éª¼ä¸Šçš„bones_global_pose_override\n"
+"skeleton_ik_node.stop()\n"
+"\n"
+"# 应用完整的IK效果\n"
+"skeleton_ik_node.set_interpolation(1.0)\n"
+"\n"
+"# 应用一åŠçš„IK效果\n"
+"skeleton_ik_node.set_interpolation(0.5)\n"
+"\n"
+"# 应用零IK效果(数值为0.01或低于0.01也会移除骨骼上的"
+"bones_global_pose_override)。\n"
+"skeleton_ik_node.set_interpolation(0.0)\n"
+"[/codeblock]"
#: doc/classes/SkeletonIK.xml:35
msgid ""
@@ -61365,6 +63419,8 @@ msgid ""
"the [SceneTree]. Returns null if the parent node was not a [Skeleton] Node "
"when SkeletonIK entered the [SceneTree]."
msgstr ""
+"返回SkeletonIK进入[SceneTree]时存在的父[Skeleton]节点。如果父节点在SkeletonIK"
+"进入[SceneTree]æ—¶ä¸æ˜¯[Skeleton]节点,则返回null。"
#: doc/classes/SkeletonIK.xml:41
msgid ""
@@ -61373,6 +63429,10 @@ msgid ""
"stopped or [method start] was used with the [code]one_time[/code] parameter "
"set to [code]true[/code]."
msgstr ""
+"如果 SkeletonIK 将 IK 效果应用到 [Skeleton] 骨骼的连续帧上,则返回 "
+"[code]true[/code]。如果 SkeletonIK åœæ­¢æˆ–使用 [method start] 且 "
+"[code]one_time[/code] 傿•°è®¾ç½®ä¸º [code]true[/code],则返回 [code]false[/"
+"code]。"
#: doc/classes/SkeletonIK.xml:48
msgid ""
@@ -61381,6 +63441,8 @@ msgid ""
"[code]true[/code], this will take effect immediately but also reset on the "
"next frame."
msgstr ""
+"开始将 IK 效果应用到æ¯ä¸€å¸§çš„ [Skeleton] 骨骼,但åªä¼šåœ¨ä¸‹ä¸€å¸§å¼€å§‹ç”Ÿæ•ˆã€‚如果 "
+"[code]one_time[/code] 为 [code]true[/code],这将立å³ç”Ÿæ•ˆï¼Œä½†ä¼šåœ¨ä¸‹ä¸€å¸§é‡ç½®ã€‚"
#: doc/classes/SkeletonIK.xml:54
msgid ""
@@ -61388,6 +63450,8 @@ msgid ""
"calls [method Skeleton.clear_bones_global_pose_override] to remove existing "
"overrides on all bones."
msgstr ""
+"åœæ­¢å°† IK 效果应用到æ¯å¸§çš„ [Skeleton] 骨骼,并调用 [method Skeleton."
+"clear_bones_global_pose_override] 以移除所有骨骼上的现有覆盖。"
#: doc/classes/SkeletonIK.xml:60
msgid ""
@@ -61397,6 +63461,10 @@ msgid ""
"disable the SkeletonIK. A value at or below [code]0.01[/code] also calls "
"[method Skeleton.clear_bones_global_pose_override]."
msgstr ""
+"IK 效果应用于当å‰éª¨æž¶éª¨éª¼é“¾çš„æ’å€¼ã€‚ [code]1.0[/code] 的值将完全覆盖所有骨架骨"
+"éª¼å˜æ¢ï¼Œè€Œ [code]0.0[/code] 的值将在视觉上ç¦ç”¨ SkeletonIK。等于或低于 "
+"[code]0.01[/code] 的值也调用 [method Skeleton."
+"clear_bones_global_pose_override]。"
#: doc/classes/SkeletonIK.xml:63
msgid ""
@@ -61406,28 +63474,35 @@ msgid ""
"bones. The middle chain bone position will be linearly interpolated with the "
"magnet position."
msgstr ""
+"IK 链的次è¦ç›®æ ‡ä½ç½®ï¼ˆé¦–先是 [member target] 属性或 [member target_node])。使"
+"用ç£é“ä½ç½®ï¼ˆæžç‚¹ç›®æ ‡ï¼‰æ¥æŽ§åˆ¶ IK 链的弯曲。仅当骨骼链具有 2 ä¸ªä»¥ä¸Šçš„éª¨éª¼æ—¶æ‰æœ‰"
+"效。中间链骨ä½ç½®å°†ä¸Žç£é“ä½ç½®è¿›è¡Œçº¿æ€§æ’值。"
#: doc/classes/SkeletonIK.xml:66
msgid ""
"Number of iteration loops used by the IK solver to produce more accurate "
"(and elegant) bone chain results."
-msgstr ""
+msgstr "IK解算器使用的迭代循环的数é‡ï¼Œä»¥äº§ç”Ÿæ›´å‡†ç¡®ï¼ˆå’Œä¼˜é›…)的骨链效果。"
#: doc/classes/SkeletonIK.xml:69
msgid ""
"The minimum distance between bone and goal target. If the distance is below "
"this value, the IK solver stops further iterations."
msgstr ""
+"骨骼与目标对象之间的最å°è·ç¦»ã€‚如果è·ç¦»ä½ŽäºŽè¿™ä¸ªå€¼ï¼ŒIKè§£ç®—å™¨å°†åœæ­¢è¿›ä¸€æ­¥çš„è¿­"
+"代。"
#: doc/classes/SkeletonIK.xml:72
msgid ""
"If [code]true[/code] overwrites the rotation of the tip bone with the "
"rotation of the [member target] (or [member target_node] if defined)."
msgstr ""
+"如果[code]true[/code],则用 [member target] (或者如果定义了[member "
+"target_node]])的旋转覆盖尖端骨骼的旋转。"
#: doc/classes/SkeletonIK.xml:75
msgid "The name of the current root bone, the first bone in the IK chain."
-msgstr ""
+msgstr "当剿 ¹éª¨çš„å称,å³IK链中的第一个骨。"
#: doc/classes/SkeletonIK.xml:78
msgid ""
@@ -61436,18 +63511,25 @@ msgid ""
"[member target_node] path is available the nodes transform is used instead "
"and this property is ignored."
msgstr ""
+"放置尖端骨骼的 IK 链的第一个目标,如果 [member override_tip_basis] 是 "
+"[code]true[/code],尖端骨骼的旋转方å¼ã€‚如果 [member target_node] 路径å¯ç”¨ï¼Œåˆ™"
+"ä½¿ç”¨èŠ‚ç‚¹å˜æ¢ï¼Œå¹¶å¿½ç•¥æ­¤å±žæ€§ã€‚"
#: doc/classes/SkeletonIK.xml:81
msgid ""
"Target node [NodePath] for the IK chain. If available, the node's current "
"[Transform] is used instead of the [member target] property."
msgstr ""
+"IK链的目标节点[NodePath]。如果有的è¯ï¼Œå°†ä½¿ç”¨èŠ‚ç‚¹å½“å‰çš„[Transform]ï¼Œè€Œä¸æ˜¯"
+"[member target]属性。"
#: doc/classes/SkeletonIK.xml:84
msgid ""
"The name of the current tip bone, the last bone in the IK chain placed at "
"the [member target] transform (or [member target_node] if defined)."
msgstr ""
+"当å‰å°–端骨骼的å称,IK 链中放置在 [member target] å˜æ¢å¤„的最åŽä¸€ä¸ªéª¨éª¼ï¼ˆæˆ–者"
+"已定义 [member target_node])。"
#: doc/classes/SkeletonIK.xml:87
msgid ""
@@ -61455,13 +63537,14 @@ msgid ""
"magnet target (pole target) when calculating the bone chain. Use the magnet "
"position (pole target) to control the bending of the IK chain."
msgstr ""
+"如果[code]true[/code],指示IK求解器在解算器链时考虑次è¦ç£é“目标(æžç‚¹ç›®æ ‡ï¼‰ã€‚"
+"使用ç£é“ä½ç½®ï¼ˆç£æžç›®æ ‡ï¼‰æ¥æŽ§åˆ¶IK链的弯曲。"
#: doc/classes/Sky.xml:4 doc/classes/Sky.xml:7
msgid "The base class for [PanoramaSky] and [ProceduralSky]."
-msgstr ""
+msgstr "[PanoramaSky] 和 [ProceduralSky] 的基类。"
#: doc/classes/Sky.xml:15
-#, fuzzy
msgid ""
"The [Sky]'s radiance map size. The higher the radiance map size, the more "
"detailed the lighting from the [Sky] will be.\n"
@@ -61473,10 +63556,12 @@ msgid ""
"and performance. Be careful when using high radiance size values as these "
"can cause crashes on low-end GPUs."
msgstr ""
-"[Sky]çš„è¾ç…§åº¦è´´å›¾å¤§å°ã€‚è¾ç…§åº¦è´´å›¾å°ºå¯¸è¶Šå¤§ï¼Œ[Sky]的照明就越细致。\n"
-"有关值,请å‚阅 [enum RadianceSize] 常é‡ã€‚\n"
-"[b]注æ„:[/b] æŸäº›ç¡¬ä»¶åœ¨æ›´é«˜çš„è¾ç…§åº¦å°ºå¯¸ä¸‹ä¼šå‡ºçŽ°é—®é¢˜ï¼Œå°¤å…¶æ˜¯ [constant "
-"RADIANCE_SIZE_512] åŠä»¥ä¸Šã€‚仅在高端硬件上使用如此高的值。"
+"[Sky]çš„è¾å°„贴图大å°ã€‚è¾å°„贴图尺寸越大,[Sky]的照明就越详细。\n"
+"有关值,å‚阅 [enum RadianceSize] 常é‡ã€‚\n"
+"[b]注æ„:[/b] 如果您的项目中有éžå¸¸æ¸…æ™°çš„å射表é¢ï¼Œå¹¶ä¸”ä¸ä½¿ç”¨ "
+"[ReflectionProbe] 或 [GIProbe],您æ‰ä¼šå—益于高è¾å°„尺寸。对于大多数项目,将 "
+"[member radiance_size] ä¿æŒä¸ºé»˜è®¤å€¼æ˜¯è§†è§‰æ•ˆæžœå’Œæ€§èƒ½ä¹‹é—´çš„æœ€ä½³æŠ˜è¡·ã€‚使用高è¾å°„"
+"大å°å€¼æ—¶è¦å°å¿ƒï¼Œå› ä¸ºè¿™å¯èƒ½ä¼šå¯¼è‡´ä½Žç«¯ GPU 崩溃。"
#: doc/classes/Sky.xml:22
msgid "Radiance texture size is 32×32 pixels."
@@ -61504,6 +63589,9 @@ msgid ""
"[b]Note:[/b] [constant RADIANCE_SIZE_1024] is not exposed in the inspector "
"as it is known to cause GPU hangs on certain systems."
msgstr ""
+"è¾å°„纹ç†å°ºå¯¸ä¸º1024×1024åƒç´ ã€‚\n"
+"[b]注æ„:[/b] [constant RADIANCE_SIZE_1024]在检查器中没有公开,因为它在æŸäº›ç³»"
+"统上会导致GPU挂起。"
#: doc/classes/Sky.xml:41
msgid ""
@@ -61511,6 +63599,9 @@ msgid ""
"[b]Note:[/b] [constant RADIANCE_SIZE_2048] is not exposed in the inspector "
"as it is known to cause GPU hangs on certain systems."
msgstr ""
+"è¾å°„纹ç†å°ºå¯¸ä¸º2048×2048åƒç´ ã€‚\n"
+"[b]注æ„:[/b] [constant RADIANCE_SIZE_2048]没有在检查器中公开,因为它在æŸäº›ç³»"
+"统上会导致GPU挂起。"
#: doc/classes/Sky.xml:45
msgid "Represents the size of the [enum RadianceSize] enum."
@@ -61526,6 +63617,9 @@ msgid ""
"[b]Note:[/b] The [signal Range.changed] and [signal Range.value_changed] "
"signals are part of the [Range] class which this class inherits from."
msgstr ""
+"GUI滑å—的基类。\n"
+"[b]注æ„:[/b] [signal Range.changed]å’Œ[signal Range.value_changed]ä¿¡å·æ˜¯è¯¥ç±»"
+"继承的[Range]类的一部分。"
#: doc/classes/Slider.xml:16
msgid ""
@@ -61552,15 +63646,13 @@ msgid ""
msgstr "如果 [code]true[/code],滑å—将显示最å°å€¼å’Œæœ€å¤§å€¼çš„刻度。"
#: doc/classes/SliderJoint.xml:4
-#, fuzzy
msgid "Slider between two PhysicsBodies in 3D."
-msgstr "3D ä¸­ä¸¤ä¸ªç‰©ä½“ä¹‹é—´çš„æ´»å¡žå¼æ»‘å—。"
+msgstr "在3D中两个物ç†ä½“之间的滑å—。"
#: doc/classes/SliderJoint.xml:7
-#, fuzzy
msgid ""
"Slides across the X axis of the pivot object. See also [Generic6DOFJoint]."
-msgstr "在中心对象的 X 轴上滑动。"
+msgstr "在枢轴对象的X轴上滑动。å‚阅[Generic6DOFJoint]。"
#: doc/classes/SliderJoint.xml:28
msgid ""
@@ -61624,7 +63716,8 @@ msgstr ""
#: doc/classes/SoftBody.xml:10
msgid "https://docs.godotengine.org/en/3.4/tutorials/physics/soft_body.html"
-msgstr "https://docs.godotengine.org/en/3.4/tutorials/physics/soft_body.html"
+msgstr ""
+"https://docs.godotengine.org/zh_CN/stable/tutorials/physics/soft_body.html"
#: doc/classes/SoftBody.xml:44
msgid "Returns local translation of a vertex in the surface array."
@@ -61662,7 +63755,7 @@ msgstr ""
"并䏿˜¯å¯è§†åŒ–的。一个å¯ç¢°æ’žç‰©ä½“å¯ä»¥ä½¿ç”¨è¿™äº›å±‚æ¥é€‰æ‹©å®ƒå¯ä»¥ä¸Žå“ªäº›ç‰©ä½“碰撞,使用"
"collision_mask属性。\n"
"如果对象A在对象B所扫æçš„任何层中,或者对象B在对象A所扫æçš„任何层中,就会检测"
-"到接触。更多信æ¯è¯·å‚è§æ–‡æ¡£ä¸­çš„[url=https://docs.godotengine.org/en/3.4/"
+"到接触。更多信æ¯è¯·å‚阅文档中的[url=https://docs.godotengine.org/zh_CN/stable/"
"tutorials/physics/physics_introduction.html#collision-layers-and-masks]碰撞层"
"和掩ç [/url]。"
@@ -61673,25 +63766,25 @@ msgid ""
"layers-and-masks]Collision layers and masks[/url] in the documentation for "
"more information."
msgstr ""
+"此软体扫æç¢°æ’žçš„物ç†å±‚。更多信æ¯è¯·å‚阅文档中的[url=https://docs.godotengine."
+"org/zh_CN/stable/tutorials/physics/physics_introduction.html#collision-"
+"layers-and-masks]碰撞层和掩ç [/url]。"
#: doc/classes/SoftBody.xml:105
-#, fuzzy
msgid "[NodePath] to a [CollisionObject] this SoftBody should avoid clipping."
-msgstr "[NodePath] 到 [CollisionObject3D] æ­¤ SoftBody3D 应é¿å…剪è£ã€‚"
+msgstr "[NodePath]到[CollisionObject],这个软体应该é¿å…剪è£ã€‚"
#: doc/classes/SoftBody.xml:108
-#, fuzzy
msgid ""
"If [code]true[/code], the [SoftBody] is simulated in physics. Can be set to "
"[code]false[/code] to pause the physics simulation."
msgstr ""
-"如果[code]true[/code],触摸的状æ€ä¸ºæŒ‰ä¸‹ã€‚如果[code]false[/code],触摸的状æ€è¢«"
-"释放。"
+"如果[code]true[/code],[SoftBody]ä¼šç‰©ç†æ¨¡æ‹Ÿã€‚å¯ä»¥è®¾ç½®ä¸º[code]false[/code]æ¥æš‚"
+"åœç‰©ç†æ¨¡æ‹Ÿã€‚"
#: doc/classes/SoftBody.xml:115
-#, fuzzy
msgid "If [code]true[/code], the [SoftBody] will respond to [RayCast]s."
-msgstr "如果 [code]true[/code],则 [SoftBody3D] å°†å“应 [RayCast3D]。"
+msgstr "如果[code]true[/code],则 [SoftBody] å°†å“应 [RayCast]。"
#: doc/classes/SoftBody.xml:118
msgid ""
@@ -61708,7 +63801,6 @@ msgid "Most basic 3D game object, parent of all 3D-related nodes."
msgstr "最基本的3D游æˆå¯¹è±¡ï¼Œæ‰€æœ‰ä¸Ž3D节点相关的父节点。"
#: doc/classes/Spatial.xml:7
-#, fuzzy
msgid ""
"Most basic 3D game object, with a 3D [Transform] and visibility settings. "
"All other 3D game objects inherit from Spatial. Use [Spatial] as a parent "
@@ -61724,20 +63816,21 @@ msgid ""
"to radians, use [method @GDScript.deg2rad]."
msgstr ""
"最基本的3D游æˆå¯¹è±¡ï¼Œå…·æœ‰3D[Transform]å’Œå¯è§æ€§è®¾ç½®ã€‚所有其他的3D游æˆå¯¹è±¡éƒ½ç»§æ‰¿"
-"自Node3D。使用[Node3D]作为父节点,在3D项目中移动ã€ç¼©æ”¾ã€æ—‹è½¬å’Œæ˜¾ç¤º/éšè—å­èŠ‚"
+"自空间。使用[Spatial]作为父节点,在3D项目中移动ã€ç¼©æ”¾ã€æ—‹è½¬å’Œæ˜¾ç¤º/éšè—å­èŠ‚"
"点。\n"
-"除éž[Node3D]对象被设置为顶层,å¦åˆ™å¹³å·®æ“作(旋转ã€ç¼©æ”¾ã€å¹³ç§»ï¼‰ä¼šåœ¨çˆ¶èŠ‚ç‚¹çš„æœ¬"
-"åœ°åæ ‡ç³»ä¸­è¿›è¡Œã€‚åœ¨è¿™ä¸ªåæ ‡ç³»ä¸­çš„仿射æ“作对应于对[Node3D]çš„å˜æ¢çš„直接仿射æ“"
-"作。下é¢çš„æœ¬åœ°ä¸€è¯æŒ‡çš„æ˜¯è¿™ä¸ªå标系。附加到[Node3D]å¯¹è±¡æœ¬èº«çš„åæ ‡ç³»è¢«ç§°ä¸ºå¯¹è±¡-"
-"æœ¬åœ°åæ ‡ç³»ã€‚\n"
+"除éž[Spatial]对象被设置为顶层,å¦åˆ™ä»¿å°„æ“作(旋转ã€ç¼©æ”¾ã€å¹³ç§»ï¼‰ä¼šåœ¨çˆ¶èŠ‚ç‚¹çš„æœ¬"
+"åœ°åæ ‡ç³»ä¸­è¿›è¡Œã€‚åœ¨è¿™ä¸ªåæ ‡ç³»ä¸­çš„仿射æ“作对应于对[Spatial]å˜æ¢çš„直接仿射è¿ç®—。"
+"下é¢çš„æœ¬åœ°ä¸€è¯æŒ‡çš„æ˜¯å±€éƒ¨å标系。附加到[Spatial]å¯¹è±¡æœ¬èº«çš„åæ ‡ç³»è¢«ç§°ä¸ºå¯¹è±¡-本"
+"åœ°åæ ‡ç³»ã€‚\n"
"[b]注æ„:[/b]除éžå¦æœ‰è§„å®šï¼Œæ‰€æœ‰æœ‰è§’åº¦å‚æ•°çš„æ–¹æ³•必须将角度指定为[i]弧度[/i]。"
-"è¦å°†åº¦æ•°è½¬æ¢ä¸ºå¼§åº¦ï¼Œè¯·ä½¿ç”¨[method @GDScript.deg2rad]。"
+"使用[method @GDScript.deg2rad]将度数转æ¢ä¸ºå¼§åº¦ã€‚"
#: doc/classes/Spatial.xml:12
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/3d/introduction_to_3d.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/3d/introduction_to_3d.html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/3d/introduction_to_3d."
+"html"
#: doc/classes/Spatial.xml:13 doc/classes/Vector3.xml:16
msgid "https://github.com/godotengine/godot-demo-projects/tree/master/3d"
@@ -61783,11 +63876,11 @@ msgid ""
msgstr "ç¦ç”¨è¯¥èŠ‚ç‚¹çš„æ¸²æŸ“ã€‚å®ƒå°†[member visible]改为[code]false[/code]。"
#: doc/classes/Spatial.xml:65
-#, fuzzy
msgid ""
"Returns whether node notifies about its local transformation changes. "
"[Spatial] will not propagate this by default."
-msgstr "返回节点是å¦é€šçŸ¥å…¶å±€éƒ¨å˜æ¢çš„å˜åŒ–。[Node3D]默认情况下ä¸ä¼šå¯¹å…¶è¿›è¡Œé€šçŸ¥ã€‚"
+msgstr ""
+"返回节点是å¦é€šçŸ¥å…¶å±€éƒ¨å˜æ¢çš„å˜åŒ–。[Spatial]默认情况下ä¸ä¼šå¯¹æ­¤è¿›è¡Œä¼ æ’­ã€‚"
#: doc/classes/Spatial.xml:71
msgid ""
@@ -61802,12 +63895,12 @@ msgid ""
msgstr "返回该节点是å¦è¢«è®¾ç½®ä¸ºToplevel,也就是是å¦å¿½ç•¥å…¶çˆ¶èŠ‚ç‚¹çš„å˜æ¢ã€‚"
#: doc/classes/Spatial.xml:83
-#, fuzzy
msgid ""
"Returns whether the node notifies about its global and local transformation "
"changes. [Spatial] will not propagate this by default."
msgstr ""
-"返回节点是å¦é€šçŸ¥å…¶å…¨å±€å’Œå±€éƒ¨çš„å˜æ¢å˜åŒ–。[Node3D]默认情况下ä¸ä¼šä¼ æ’­è¿™ä¸ªã€‚"
+"返回节点是å¦é€šçŸ¥å…¶å…¨å±€å’Œå±€éƒ¨çš„å˜æ¢å˜åŒ–。默认情况下,[Spatial]ä¸ä¼šå¯¹æ­¤è¿›è¡Œä¼ "
+"播。"
#: doc/classes/Spatial.xml:97
msgid ""
@@ -61901,20 +63994,20 @@ msgid ""
msgstr "设置节点是å¦å¿½ç•¥å…¶è½¬æ¢ï¼ˆå…¨å±€æˆ–局部)改å˜çš„通知。"
#: doc/classes/Spatial.xml:192
-#, fuzzy
msgid ""
"Sets whether the node notifies about its local transformation changes. "
"[Spatial] will not propagate this by default."
-msgstr "设置节点是å¦é€šçŸ¥å…¶æœ¬åœ°è½¬æ¢æ›´æ”¹ã€‚[ Node3D ]默认情况下ä¸ä¼šä¼ æ’­æ­¤æ›´æ”¹ã€‚"
+msgstr ""
+"设置节点是å¦é€šçŸ¥å®ƒçš„å±€éƒ¨å˜æ¢å˜åŒ–。默认情况下,[Spatial]ä¸ä¼šä¼ æ’­è¿™ä¸€ç‚¹ã€‚"
#: doc/classes/Spatial.xml:199
-#, fuzzy
msgid ""
"Sets whether the node notifies about its global and local transformation "
"changes. [Spatial] will not propagate this by default, unless it is in the "
"editor context and it has a valid gizmo."
msgstr ""
-"设置节点是å¦é€šçŸ¥å…¶å…¨å±€å’Œæœ¬åœ°è½¬æ¢æ›´æ”¹ã€‚[ Node3D ]默认情况下ä¸ä¼šä¼ æ’­æ­¤æ›´æ”¹ã€‚"
+"设置节点是å¦é€šçŸ¥å…¶å…¨å±€å’Œå±€éƒ¨å˜æ¢çš„å˜åŒ–。[Spatial]默认情况下ä¸ä¼šä¼ æ’­ï¼Œé™¤éžæ˜¯åœ¨"
+"编辑器上下文中,并且它有一个有效的gizmo。"
#: doc/classes/Spatial.xml:205
msgid ""
@@ -61953,23 +64046,20 @@ msgid ""
msgstr "通过给定的åç§»é‡[Vector3]改å˜èŠ‚ç‚¹åœ¨å±€éƒ¨ç©ºé—´ä¸­çš„ä½ç½®ã€‚"
#: doc/classes/Spatial.xml:240
-#, fuzzy
msgid "Updates the [SpatialGizmo] of this node."
-msgstr "更新该节点的[Node3DGizmo]。"
+msgstr "更新该节点的[SpatialGizmo]。"
#: doc/classes/Spatial.xml:246
-#, fuzzy
msgid ""
"The [SpatialGizmo] for this node. Used for example in [EditorSpatialGizmo] "
"as custom visualization and editing handles in Editor."
msgstr ""
-"这个节点的[Node3DGizmo]。例如在[EditorNode3DGizmo]中作为自定义å¯è§†åŒ–和编辑å¥"
-"柄使用。"
+"此节点的 [SpatialGizmo]。例如在 [EditorSpatialGizmo] 中用作编辑器中的自定义å¯"
+"视化和编辑手柄。"
#: doc/classes/Spatial.xml:249
-#, fuzzy
msgid "World space (global) [Transform] of this node."
-msgstr "这个节点的World3D空间(全局)[Transform]。"
+msgstr "此节点的世界空间(全局)[Transform]。"
#: doc/classes/Spatial.xml:252
msgid ""
@@ -62021,20 +64111,19 @@ msgstr ""
msgid ""
"Emitted by portal system gameplay monitor when a node enters the gameplay "
"area."
-msgstr ""
+msgstr "当节点进入游æˆåŒºåŸŸæ—¶ç”±å…¥å£ç³»ç»Ÿæ¸¸æˆç›‘视器触å‘。"
#: doc/classes/Spatial.xml:279
msgid ""
"Emitted by portal system gameplay monitor when a node exits the gameplay "
"area."
-msgstr ""
+msgstr "当节点退出游æˆåŒºåŸŸæ—¶ï¼Œç”±ç•Œé¢ç³»ç»Ÿçš„æ¸¸æˆç›‘视器触å‘。"
#: doc/classes/Spatial.xml:284
msgid "Emitted when node visibility changes."
msgstr "当节点å¯è§æ€§æ›´æ”¹æ—¶è§¦å‘。"
#: doc/classes/Spatial.xml:290
-#, fuzzy
msgid ""
"Spatial nodes receives this notification when their global transform "
"changes. This means that either the current or a parent node changed its "
@@ -62043,41 +64132,39 @@ msgid ""
"need to ask for it, with [method set_notify_transform]. The notification is "
"also sent if the node is in the editor context and it has a valid gizmo."
msgstr ""
-"当Node3DèŠ‚ç‚¹çš„å…¨å±€å˜æ¢å‘生å˜åŒ–时,会收到这个通知。这æ„味ç€å½“å‰èŠ‚ç‚¹æˆ–çˆ¶èŠ‚ç‚¹æ”¹"
-"å˜äº†å®ƒçš„å˜æ¢ã€‚\n"
-"为了使[constant NOTIFICATION_TRANSFORM_CHANGED]呿Œ¥ä½œç”¨ï¼Œç”¨æˆ·é¦–先需è¦é€šè¿‡"
-"[method set_notify_transform]æ¥è¦æ±‚它。"
+"å½“ç©ºé—´èŠ‚ç‚¹çš„å…¨å±€å˜æ¢å‘生å˜åŒ–时,空间节点会收到这个通知。这æ„味ç€å½“å‰èŠ‚ç‚¹æˆ–çˆ¶"
+"节点改å˜äº†å®ƒçš„å˜æ¢ã€‚\n"
+"为了使[constant NOTIFICATION_TRANSFORM_CHANGED]生效,用户首先需è¦ç”¨[method "
+"set_notify_transform]å‘é€è¯·æ±‚。如果节点是在编辑器的上下文中,并且它有一个有效"
+"çš„gizmo,那么该通知也会被å‘é€ã€‚"
#: doc/classes/Spatial.xml:294
-#, fuzzy
msgid ""
"Spatial nodes receives this notification when they are registered to new "
"[World] resource."
-msgstr "当Node3D节点被注册到新的[World3D]èµ„æºæ—¶ï¼Œå®ƒä»¬ä¼šæ”¶åˆ°è¿™ä¸ªé€šçŸ¥ã€‚"
+msgstr "空间节点在注册到新的 [World] èµ„æºæ—¶ä¼šæ”¶åˆ°æ­¤é€šçŸ¥ã€‚"
#: doc/classes/Spatial.xml:297
-#, fuzzy
msgid ""
"Spatial nodes receives this notification when they are unregistered from "
"current [World] resource."
-msgstr "当Node3D节点从当å‰[World3D]资æºä¸­å–消注册时,它们会收到这个通知。"
+msgstr "当空间节点从当å‰çš„ [World] 资æºä¸­å–消注册时,它们会收到此通知。"
#: doc/classes/Spatial.xml:300
-#, fuzzy
msgid "Spatial nodes receives this notification when their visibility changes."
-msgstr "当Node3D节点的å¯è§æ€§å‘生å˜åŒ–时,会收到这个通知。"
+msgstr "空间节点在其å¯è§æ€§å‘生å˜åŒ–时会收到此通知。"
#: doc/classes/Spatial.xml:303
msgid ""
"Spatial nodes receives this notification if the portal system gameplay "
"monitor detects they have entered the gameplay area."
-msgstr ""
+msgstr "如果门户系统游æˆç›‘视器检测到它们已进入游æˆåŒºåŸŸï¼Œç©ºé—´èŠ‚ç‚¹ä¼šæ”¶åˆ°æ­¤é€šçŸ¥ã€‚"
#: doc/classes/Spatial.xml:306
msgid ""
"Spatial nodes receives this notification if the portal system gameplay "
"monitor detects they have exited the gameplay area."
-msgstr ""
+msgstr "如果门户系统游æˆç›‘视器检测到它们已退出游æˆåŒºåŸŸï¼Œç©ºé—´èŠ‚ç‚¹ä¼šæ”¶åˆ°æ­¤é€šçŸ¥ã€‚"
#: doc/classes/SpatialMaterial.xml:4
msgid "Default 3D rendering material."
@@ -62094,7 +64181,8 @@ msgstr ""
#: doc/classes/SpatialMaterial.xml:10
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/spatial_material.html"
-msgstr "https://docs.godotengine.org/en/3.4/tutorials/3d/spatial_material.html"
+msgstr ""
+"https://docs.godotengine.org/zh_CN/stable/tutorials/3d/spatial_material.html"
#: doc/classes/SpatialMaterial.xml:17
msgid "Returns [code]true[/code], if the specified [enum Feature] is enabled."
@@ -62114,19 +64202,17 @@ msgid ""
msgstr "返回与指定的 [enum TextureParam] å…³è”çš„ [Texture]。"
#: doc/classes/SpatialMaterial.xml:39
-#, fuzzy
msgid ""
"If [code]true[/code], enables the specified [enum Feature]. Many features "
"that are available in [SpatialMaterial]s need to be enabled before use. This "
"way the cost for using the feature is only incurred when specified. Features "
"can also be enabled by setting the corresponding member to [code]true[/code]."
msgstr ""
-"如果为 [code]true[/code],å¯ç”¨æŒ‡å®šçš„ [enum Feature]。很多在 [BaseMaterial3D] "
-"中å¯ä»¥ä½¿ç”¨çš„特性都需è¦åœ¨ä½¿ç”¨å‰å¯ç”¨ã€‚è¿™æ ·è¯¥ç‰¹æ€§çš„æˆæœ¬åªæœ‰åœ¨æŒ‡å®šæ—¶æ‰ä¼šäº§ç”Ÿã€‚也"
-"å¯ä»¥é€šè¿‡å°†ç›¸åº”çš„æˆå‘˜è®¾ç½®ä¸º [code]true[/code] æ¥å¯ç”¨ç‰¹å¾ã€‚"
+"如果 [code]true[/code],则å¯ç”¨æŒ‡å®šçš„ [enum Feature]。 [SpatialMaterial]s 中å¯"
+"用的许多功能需è¦åœ¨ä½¿ç”¨å‰å¯ç”¨ã€‚è¿™æ ·ï¼Œåªæœ‰åœ¨æŒ‡å®šæ—¶æ‰ä¼šäº§ç”Ÿä½¿ç”¨è¯¥åŠŸèƒ½çš„æˆæœ¬ã€‚也"
+"å¯ä»¥é€šè¿‡å°†ç›¸åº”çš„æˆå‘˜è®¾ç½®ä¸º [code]true[/code] æ¥å¯ç”¨åŠŸèƒ½ã€‚"
#: doc/classes/SpatialMaterial.xml:47
-#, fuzzy
msgid ""
"If [code]true[/code], enables the specified flag. Flags are optional "
"behaviour that can be turned on and off. Only one flag can be enabled at a "
@@ -62135,16 +64221,18 @@ msgid ""
"setting the corresponding member to [code]true[/code]. See [enum Flags] "
"enumerator for options."
msgstr ""
-"如果 [code]true[/code],å¯ç”¨æŒ‡å®šçš„æ ‡å¿—。标志是å¯é€‰çš„行为,å¯ä»¥æ‰“开和关闭。使"
+"如果 [code]true[/code],则å¯ç”¨æŒ‡å®šçš„æ ‡å¿—。标志是å¯ä»¥æ‰“开和关闭的å¯é€‰è¡Œä¸ºã€‚使"
"用该函数一次åªèƒ½å¯ç”¨ä¸€ä¸ªæ ‡å¿—,ä¸èƒ½å°†æ ‡å¿—æžšä¸¾å™¨è¿›è¡Œä½æŽ©ç ï¼Œä»¥ä¸€æ¬¡å¯ç”¨æˆ–ç¦ç”¨å¤š"
-"个标志。也å¯ä»¥é€šè¿‡å°†ç›¸åº”çš„æˆå‘˜è®¾ç½®ä¸º[code]true[/code]æ¥å¯ç”¨æ ‡å¿—。选项å‚阅 "
-"[enum Flags] 枚举器。"
+"个标志。也å¯ä»¥é€šè¿‡å°†ç›¸åº”æˆå‘˜è®¾ç½®ä¸º [code]true[/code] æ¥å¯ç”¨æ ‡å¿—。有关选项,请"
+"å‚阅 [enum Flags] 枚举器。"
#: doc/classes/SpatialMaterial.xml:55
msgid ""
"Sets the [Texture] to be used by the specified [enum TextureParam]. This "
"function is called when setting members ending in [code]*_texture[/code]."
msgstr ""
+"设置指定的 [enum TextureParam] 所使用的 [Texture]。该函数在设置以 "
+"[code]*_texture[/code] 结尾的æˆå‘˜æ—¶è°ƒç”¨ã€‚"
#: doc/classes/SpatialMaterial.xml:61
msgid "The material's base color."
@@ -62228,7 +64316,6 @@ msgid ""
msgstr "设置清漆效果的强度。设置为 [code]0[/code] 与ç¦ç”¨æ¸…漆效果相åŒã€‚"
#: doc/classes/SpatialMaterial.xml:94
-#, fuzzy
msgid ""
"If [code]true[/code], clearcoat rendering is enabled. Adds a secondary "
"transparent pass to the lighting calculation resulting in an added specular "
@@ -62237,9 +64324,11 @@ msgid ""
"[b]Note:[/b] Clearcoat rendering is not visible if the material has [member "
"flags_unshaded] set to [code]true[/code]."
msgstr ""
-"如果[code]true[/code],则å¯ç”¨é€æ˜Žæ¶‚å±‚æ¸²æŸ“ã€‚åœ¨å…‰ç…§è®¡ç®—ä¸­æ·»åŠ ä¸€ä¸ªäºŒçº§é€æ˜Žé€šé“,"
-"从而产生一个é¢å¤–çš„é•œé¢æ–‘点。这使得æè´¨çœ‹èµ·æ¥å¥½åƒæœ‰ä¸€ä¸ªé€æ˜Žå±‚,å¯ä»¥æ˜¯å…‰æ»‘或粗"
-"糙的。"
+"如果 [code]true[/code],则å¯ç”¨æ¸…æ¼†æ¸²æŸ“ã€‚åœ¨ç…§æ˜Žè®¡ç®—ä¸­æ·»åŠ äºŒçº§é€æ˜Žé€šè·¯ï¼Œä»Žè€Œå¯¼"
+"致添加镜é¢åå°„æ–‘ç‚¹ã€‚è¿™ä½¿å¾—ææ–™çœ‹èµ·æ¥å¥½åƒæœ‰ä¸€å±‚逿˜Žå±‚,å¯ä»¥æ˜¯æœ‰å…‰æ³½çš„也å¯ä»¥æ˜¯"
+"粗糙的。\n"
+"[b]注æ„:[/b]如果æè´¨å°† [member flags_unshaded] 设置为 [code]true[/code],则"
+"逿˜Žæ¶‚层渲染ä¸å¯è§ã€‚"
#: doc/classes/SpatialMaterial.xml:98
msgid ""
@@ -62264,6 +64353,8 @@ msgid ""
"along the view ray to determine occlusion and parrallax. This can be very "
"performance demanding, but results in more realistic looking depth mapping."
msgstr ""
+"如果 [code]true[/code],ç€è‰²å™¨å°†åœ¨æ²¿è§†å›¾å°„çº¿çš„å¤šä¸ªç‚¹ä¸Šè¯»å–æ·±åº¦çº¹ç†ä»¥ç¡®å®šé®æŒ¡"
+"和视差。这å¯èƒ½å¯¹æ€§èƒ½è¦æ±‚很高,但会产生更逼真的深度映射。"
#: doc/classes/SpatialMaterial.xml:107
msgid ""
@@ -62273,6 +64364,10 @@ msgid ""
"the same material. The value of [member depth_enabled] will be ignored if "
"[member uv1_triplanar] is enabled."
msgstr ""
+"如果 [code]true[/code],则å¯ç”¨æ·±åº¦æ˜ å°„ï¼ˆä¹Ÿç§°ä¸ºâ€œè§†å·®æ˜ å°„â€æˆ–“高度映射â€ï¼‰ã€‚å¦è§ "
+"[member normal_enabled]。\n"
+"[b]注æ„:[/b]如果在åŒä¸€æè´¨ä¸Šä½¿ç”¨ä¸‰å¹³é¢è´´å›¾ï¼Œåˆ™ä¸æ”¯æŒæ·±åº¦è´´å›¾ã€‚如果å¯ç”¨ "
+"[member uv1_triplanar],则 [member depth_enabled] 的值将被忽略。"
#: doc/classes/SpatialMaterial.xml:111
msgid ""
@@ -62280,6 +64375,8 @@ msgid ""
"the depth effect. This may be necessary if you have encoded your binormals "
"in a way that is conflicting with the depth effect."
msgstr ""
+"如果 [code]true[/code],则在深度效果中使用之å‰ä¼šç¿»è½¬å‰¯æ³•线的方å‘。如果你对你"
+"çš„å‰¯æ³•çº¿çš„ç¼–ç æ–¹å¼ä¸Žæ·±åº¦æ•ˆæžœæœ‰å†²çªï¼Œè¿™å¯èƒ½æ˜¯å¿…è¦çš„。"
#: doc/classes/SpatialMaterial.xml:114
msgid ""
@@ -62287,6 +64384,8 @@ msgid ""
"the depth effect. This may be necessary if you have encoded your tangents in "
"a way that is conflicting with the depth effect."
msgstr ""
+"如果 [code]true[/code],切线方å‘在深度效果中使用å‰ä¼šç¿»è½¬ã€‚如果你对切线的编ç "
+"æ–¹å¼ä¸Žæ·±åº¦æ•ˆæžœæœ‰å†²çªï¼Œè¿™å¯èƒ½æ˜¯å¿…è¦çš„。"
#: doc/classes/SpatialMaterial.xml:117
msgid ""
@@ -62295,6 +64394,8 @@ msgid ""
"will be more performance demanding while a lower number may not look as "
"crisp."
msgstr ""
+"使用 [member depth_deep_parallax] 且视图方å‘åž‚ç›´äºŽå¯¹è±¡è¡¨é¢æ—¶ä½¿ç”¨çš„层数。较高"
+"çš„æ•°å­—å¯¹æ€§èƒ½çš„è¦æ±‚更高,而较低的数字å¯èƒ½çœ‹èµ·æ¥ä¸é‚£ä¹ˆæ¸…晰。"
#: doc/classes/SpatialMaterial.xml:120
msgid ""
@@ -62302,17 +64403,19 @@ msgid ""
"direction is parallel to the surface of the object. A higher number will be "
"more performance demanding while a lower number may not look as crisp."
msgstr ""
+"使用 [member depth_deep_parallax] 且视图方å‘å¹³è¡ŒäºŽå¯¹è±¡è¡¨é¢æ—¶ä½¿ç”¨çš„层数。较高"
+"çš„æ•°å­—å¯¹æ€§èƒ½çš„è¦æ±‚更高,而较低的数字å¯èƒ½çœ‹èµ·æ¥ä¸é‚£ä¹ˆæ¸…晰。"
#: doc/classes/SpatialMaterial.xml:123
msgid ""
"Scales the depth offset effect. A higher number will create a larger depth."
-msgstr ""
+msgstr "缩放深度å移效果。更高的数字将创建更大的深度。"
#: doc/classes/SpatialMaterial.xml:126
msgid ""
"Texture used to determine depth at a given pixel. Depth is always stored in "
"the red channel."
-msgstr ""
+msgstr "用æ¥ç¡®å®šæŸä¸ªåƒç´ æ·±åº¦çš„纹ç†ã€‚深度总是存储在红色通é“中。"
#: doc/classes/SpatialMaterial.xml:129
msgid "Texture that specifies the color of the detail overlay."
@@ -62374,6 +64477,11 @@ msgid ""
"and will fully disappear once it reaches [code]distance_fade_min_distance[/"
"code]."
msgstr ""
+"物体看起æ¥å®Œå…¨ä¸é€æ˜Žçš„è·ç¦»ã€‚\n"
+"[b]注æ„:[/b]如果 [code]distance_fade_max_distance[/code] å°äºŽ "
+"[code]distance_fade_min_distance[/code],则行为相å。物体将在 "
+"[code]distance_fade_max_distance[/code] 处开始逿¸æ¶ˆå¤±ï¼Œå¹¶åœ¨åˆ°è¾¾ "
+"[code]distance_fade_min_distance[/code] 时完全消失。"
#: doc/classes/SpatialMaterial.xml:152
msgid ""
@@ -62385,6 +64493,11 @@ msgid ""
"and will fully disappear once it reaches [code]distance_fade_min_distance[/"
"code]."
msgstr ""
+"物体开始å˜å¾—å¯è§çš„è·ç¦»ã€‚如果物体的è·ç¦»å°äºŽè¿™ä¸ªè·ç¦»ï¼Œå®ƒå°†æ˜¯ä¸å¯è§çš„。\n"
+"[b]注æ„:[/b]如果 [code]distance_fade_min_distance[/code] 大于 "
+"[code]distance_fade_max_distance[/code],则行为将相å。物体将在 "
+"[code]distance_fade_max_distance[/code] 处开始逿¸æ¶ˆå¤±ï¼Œå¹¶åœ¨åˆ°è¾¾ "
+"[code]distance_fade_min_distance[/code] 时完全消失。"
#: doc/classes/SpatialMaterial.xml:156
msgid ""
@@ -62397,15 +64510,15 @@ msgid "The emitted light's color. See [member emission_enabled]."
msgstr "å‘出的光的颜色。å‚阅[member emission_enabled]。"
#: doc/classes/SpatialMaterial.xml:162
-#, fuzzy
msgid ""
"If [code]true[/code], the body emits light. Emitting light makes the object "
"appear brighter. The object can also cast light on other objects if a "
"[GIProbe] or [BakedLightmap] is used and this object is used in baked "
"lighting."
msgstr ""
-"如果[code]true[/code],则物体会å‘出光。å‘光会使物体显得更亮。如果使用了"
-"[GIProbe],并且该物体在烘焙照明中使用,那么该物体也å¯ä»¥å‘其他物体投光。"
+"如果 [code]true[/code],物体会å‘光。å‘å…‰ä½¿ç‰©ä½“çœ‹èµ·æ¥æ›´äº®ã€‚如果使用 [GIProbe] "
+"或 [BakedLightmap] 并且此对象用于烘焙照明,则该对象还å¯ä»¥å°†å…‰æŠ•射到其他对象"
+"上。"
#: doc/classes/SpatialMaterial.xml:165
msgid "The emitted light's strength. See [member emission_enabled]."
@@ -62449,6 +64562,8 @@ msgid ""
"the normal stays correct when using a non-uniform scale. Only enable if "
"using non-uniform scaling."
msgstr ""
+"如果 [code]true[/code],ç€è‰²å™¨å°†è®¡ç®—é¢å¤–çš„æ“作,以确ä¿åœ¨ä½¿ç”¨éžå‡åŒ€æ¯”例时法线"
+"ä¿æŒæ­£ç¡®ã€‚仅在使用éžå‡åŒ€ç¼©æ”¾æ—¶å¯ç”¨ã€‚"
#: doc/classes/SpatialMaterial.xml:189
msgid ""
@@ -62463,26 +64578,23 @@ msgid ""
msgstr "如果[code]true[/code],深度测试被ç¦ç”¨ï¼Œå¯¹è±¡å°†æŒ‰æ¸²æŸ“顺åºç»˜åˆ¶ã€‚"
#: doc/classes/SpatialMaterial.xml:195
-#, fuzzy
msgid ""
"If [code]true[/code], transparency is enabled on the body. See also [member "
"params_blend_mode]."
-msgstr "如果[code]true[/code],则å¯ç”¨ä¸»ä½“çš„é€æ˜Žåº¦ã€‚å¦è§[member blend_mode]。"
+msgstr "如果[code]true[/code],则å¯ç”¨ç‰©ä½“çš„é€æ˜Žåº¦ã€‚å‚阅[member blend_mode]。"
#: doc/classes/SpatialMaterial.xml:198
-#, fuzzy
msgid "If [code]true[/code], the object is unaffected by lighting."
-msgstr "如果[code]true[/code]ï¼Œåˆ™å¯¹è±¡ä¸æŽ¥æ”¶çŽ¯å¢ƒå…‰ã€‚"
+msgstr "如果 [code]true[/code],则物体ä¸å—光照影å“。"
#: doc/classes/SpatialMaterial.xml:201
-#, fuzzy
msgid ""
"If [code]true[/code], render point size can be changed.\n"
"[b]Note:[/b] This is only effective for objects whose geometry is point-"
"based rather than triangle-based. See also [member params_point_size]."
msgstr ""
"如果[code]true[/code],å¯ä»¥æ”¹å˜æ¸²æŸ“点的大å°ã€‚\n"
-"[b]注æ„:[/b]è¿™åªå¯¹å‡ ä½•ä½“æ˜¯åŸºäºŽç‚¹è€Œä¸æ˜¯åŸºäºŽä¸‰è§’形的对象有效。å¦è§[member "
+"[b]注æ„:[/b]è¿™åªå¯¹å‡ ä½•ä½“æ˜¯åŸºäºŽç‚¹è€Œä¸æ˜¯åŸºäºŽä¸‰è§’形的对象有效。å‚阅[member "
"point_size]。"
#: doc/classes/SpatialMaterial.xml:205
@@ -62501,15 +64613,16 @@ msgid ""
"If [code]true[/code], lighting is calculated per vertex rather than per "
"pixel. This may increase performance on low-end devices."
msgstr ""
+"如果 [code]true[/code]ï¼Œåˆ™æŒ‰é¡¶ç‚¹è€Œä¸æ˜¯æŒ‰åƒç´ è®¡ç®—光照。这å¯èƒ½ä¼šæé«˜ä½Žç«¯è®¾å¤‡çš„"
+"性能。"
#: doc/classes/SpatialMaterial.xml:211
-#, fuzzy
msgid ""
"If [code]true[/code], triplanar mapping is calculated in world space rather "
"than object local space. See also [member uv1_triplanar]."
msgstr ""
-"如果 [code]true[/code],[code]UV[/code]的三平é¢è´´å›¾æ˜¯åœ¨ä¸–ç•Œç©ºé—´è€Œä¸æ˜¯å¯¹è±¡å±€éƒ¨"
-"空间计算的。å¦è¯·å‚阅 [member uv1_triplanar]。"
+"如果 [code]true[/code]ï¼Œåˆ™åœ¨ä¸–ç•Œç©ºé—´è€Œä¸æ˜¯ç‰©ä½“å±€éƒ¨ç©ºé—´ä¸­è®¡ç®—ä¸‰å¹³é¢æ˜ å°„。å¦è§ "
+"[member uv1_triplanar]。"
#: doc/classes/SpatialMaterial.xml:214
msgid ""
@@ -62530,7 +64643,6 @@ msgstr ""
"æ··åˆã€‚è¦æ”¹å˜åå°„é‡ï¼Œè¯·ä½¿ç”¨[member roughness]。"
#: doc/classes/SpatialMaterial.xml:217
-#, fuzzy
msgid ""
"Sets the size of the specular lobe. The specular lobe is the bright spot "
"that is reflected from light sources.\n"
@@ -62540,7 +64652,7 @@ msgid ""
msgstr ""
"设置镜é¢å…‰å¶çš„大å°ã€‚镜é¢å¶æ˜¯å…‰æºå射的亮点。\n"
"[b]注æ„:[/b]与[member metallic]ä¸åŒï¼Œè¿™ä¸æ˜¯èƒ½é‡å®ˆæ’,所以在大多数情况下,应该"
-"将其ä¿ç•™åœ¨[code]0.5[/code]。å¦è§[member roughness]。"
+"将其ä¿ç•™åœ¨[code]0.5[/code]。å‚阅[member roughness]。"
#: doc/classes/SpatialMaterial.xml:221
msgid ""
@@ -62569,7 +64681,6 @@ msgid "The strength of the normal map's effect."
msgstr "法线贴图的效果强度。"
#: doc/classes/SpatialMaterial.xml:233
-#, fuzzy
msgid ""
"Texture used to specify the normal at a given pixel. The "
"[code]normal_texture[/code] only uses the red and green channels; the blue "
@@ -62586,27 +64697,30 @@ msgid ""
"Normal_Map_Technical_Details#Common_Swizzle_Coordinates]this page[/url] for "
"a comparison of normal map coordinates expected by popular engines."
msgstr ""
-"纹ç†ç”¨äºŽæŒ‡å®šç»™å®šåƒç´ çš„æ³•线。[code]normal_texture[/code] åªä½¿ç”¨çº¢è‰²å’Œç»¿è‰²é€š"
-"é“。从[code]normal_texture[/code]读å–的法线是围绕[Mesh]æä¾›çš„è¡¨é¢æ³•线的。\n"
-"[b]注æ„:[/b] Godot希望法线图使用X+ã€Y-å’ŒZ+åæ ‡ã€‚å‚阅[url=http://wiki."
-"polycount.com/wiki/"
-"Normal_Map_Technical_Details#Common_Swizzle_Coordinates]this page[/url],以了"
-"è§£æµè¡Œå¼•æ“Žæ‰€æœŸæœ›çš„æ³•çº¿å›¾åæ ‡çš„æ¯”较。"
+"ç”¨æ¥æŒ‡å®šåƒç´ ç‚¹çš„æ³•线的纹ç†ã€‚[code]normal_texture[/code]åªä½¿ç”¨çº¢è‰²å’Œç»¿è‰²é€šé“,"
+"忽略è“色和alpha通é“。从 [code]normal_texture[/code] 读å–的法线围绕 [Mesh] æ"
+"ä¾›çš„è¡¨é¢æ³•线定å‘。\n"
+"[b]注æ„:[/b] Mesh必须在其顶点数æ®ä¸­åŒæ—¶å®šä¹‰æ³•线和切线。å¦åˆ™ï¼Œæ³•线贴图将无法"
+"正确渲染,会出现整个表é¢å˜æš—的情况。如果用[SurfaceTool]创建几何体,å¯ä»¥ä½¿ç”¨"
+"[method SurfaceTool.generate_normals]和[method SurfaceTool.generate_tangents]"
+"æ¥åˆ†åˆ«è‡ªåŠ¨ç”Ÿæˆæ³•线和切线。\n"
+"[b]注æ„:[/b] Godot希望法线贴图使用X+ã€Y-å’ŒZ+åæ ‡ã€‚请å‚阅[url=http://wiki."
+"polycount.com/wiki/Normal_Map_Technical_Details#Common_Swizzle_Coordinates]该"
+"页[/url],了解æµè¡Œå¼•æ“Žæ‰€æœŸæœ›çš„æ³•çº¿è´´å›¾åæ ‡çš„æ¯”较。"
#: doc/classes/SpatialMaterial.xml:238
msgid "Threshold at which the alpha scissor will discard values."
msgstr "alpha scissor 会丢弃数值的阈值。"
#: doc/classes/SpatialMaterial.xml:241
-#, fuzzy
msgid ""
"If [code]true[/code], the shader will keep the scale set for the mesh. "
"Otherwise the scale is lost when billboarding. Only applies when [member "
"params_billboard_mode] is [constant BILLBOARD_ENABLED]."
msgstr ""
-"如果 [code]true[/code],ç€è‰²å™¨å°†ä¿æŒä¸ºç½‘格设置的比例。å¦åˆ™ï¼Œåœ¨åšå¹¿å‘Šç‰Œæ—¶ï¼Œæ¯”"
-"ä¾‹å°ºä¼šä¸¢å¤±ã€‚åªæœ‰å½“ [member billboard_mode] 为 [constant BILLBOARD_ENABLED] æ—¶"
-"æ‰é€‚用。"
+"如果 [code]true[/code],ç€è‰²å™¨å°†ä¿æŒä¸ºç½‘格缩放设置。å¦åˆ™ï¼Œå½“åšå¹¿å‘Šç‰Œæ—¶ï¼Œç¼©æ”¾"
+"会丢失。仅在 [member params_billboard_mode] 为 [constant BILLBOARD_ENABLED] "
+"时适用。"
#: doc/classes/SpatialMaterial.xml:244
msgid ""
@@ -62616,6 +64730,10 @@ msgid ""
"head instead of on the table. See [url=https://github.com/godotengine/godot/"
"issues/41567]GitHub issue #41567[/url] for details."
msgstr ""
+"控制对象如何é¢å‘æ‘„åƒæœºã€‚å‚阅[enum BillboardMode]。\n"
+"[b]注æ„:[/b] 广告牌模å¼ä¸é€‚åˆVR,因为当å±å¹•è´´åœ¨ä½ çš„å¤´éƒ¨è€Œä¸æ˜¯åœ¨æ¡Œå­ä¸Šæ—¶ï¼Œæ‘„"
+"åƒæœºçš„å·¦å³å‘é‡ä¸æ˜¯æ°´å¹³çš„。å‚阅[url=https://github.com/godotengine/godot/"
+"issues/41567]GitHub issue #41567[/url]。"
#: doc/classes/SpatialMaterial.xml:248
msgid ""
@@ -62634,39 +64752,36 @@ msgid ""
msgstr "æ¸²æŸ“èƒŒé¢æ—¶ï¼Œä¸ç»˜åˆ¶å¯¹è±¡çš„哪一é¢ã€‚å‚阅 [enum CullMode]。"
#: doc/classes/SpatialMaterial.xml:255
-#, fuzzy
msgid ""
"Determines when depth rendering takes place. See [enum DepthDrawMode]. See "
"also [member flags_transparent]."
msgstr ""
-"确定何时进行深度渲染。å‚阅 [enum DepthDrawMode]。也请å‚阅 [member "
-"transparency]。"
+"确定深度渲染å‘生的时间。请å‚é˜…æ·±åº¦ç»˜åˆ¶æ¨¡å¼ [enum DepthDrawMode] 。å¦è§"
+"[member flags_transparent]。"
#: doc/classes/SpatialMaterial.xml:258
msgid ""
"The algorithm used for diffuse light scattering. See [enum DiffuseMode]."
-msgstr "用于漫射光散射的算法。å‚阅[enum DiffuseMode]。"
+msgstr "用于漫å射光散射的算法。å‚è§ [enum DiffuseMode]。"
#: doc/classes/SpatialMaterial.xml:261
-#, fuzzy
msgid ""
"If [code]true[/code], enables the vertex grow setting. See [member "
"params_grow_amount]."
-msgstr "如果[code]true[/code],å¯ç”¨é¡¶ç‚¹ç”Ÿé•¿è®¾ç½®ã€‚å‚阅[member grow_amount]。"
+msgstr ""
+"如果[code]true[/code],å¯ç”¨é¡¶ç‚¹ç”Ÿé•¿è®¾ç½®ã€‚å‚è§[member params_grow_amount]。"
#: doc/classes/SpatialMaterial.xml:264
msgid "Grows object vertices in the direction of their normals."
msgstr "æ²¿ç€æ³•线的方å‘生长对象顶点。"
#: doc/classes/SpatialMaterial.xml:267
-#, fuzzy
msgid "Currently unimplemented in Godot."
-msgstr "ç›®å‰åœ¨ Godot 3.x 中未实现。"
+msgstr "ç›®å‰åœ¨ Godot 中未实现。"
#: doc/classes/SpatialMaterial.xml:270
-#, fuzzy
msgid "The point size in pixels. See [member flags_use_point_size]."
-msgstr "点的大å°ï¼Œå•ä½ä¸ºåƒç´ ã€‚å‚阅[member use_point_size]。"
+msgstr "点的大å°ï¼Œä»¥åƒç´ ä¸ºå•ä½ã€‚å‚è§[member flags_use_point_size]。"
#: doc/classes/SpatialMaterial.xml:273
msgid "The method for rendering the specular blob. See [enum SpecularMode]."
@@ -62677,35 +64792,34 @@ msgid ""
"If [code]true[/code], the shader will discard all pixels that have an alpha "
"value less than [member params_alpha_scissor_threshold]."
msgstr ""
+"如果[code]true[/code],ç€è‰²å™¨å°†ä¸¢å¼ƒæ‰€æœ‰alpha值å°äºŽ[member "
+"params_alpha_scissor_threshold]çš„åƒç´ ã€‚"
#: doc/classes/SpatialMaterial.xml:279
-#, fuzzy
msgid ""
"The number of horizontal frames in the particle sprite sheet. Only enabled "
"when using [constant BILLBOARD_PARTICLES]. See [member "
"params_billboard_mode]."
msgstr ""
-"ç²’å­ç²¾çµè¡¨çš„æ°´å¹³å¸§æ•°ã€‚仅当使用[constant BILLBOARD_PARTICLES]æ—¶å¯ç”¨ã€‚å‚阅"
-"[member billboard_mode]。"
+"ç²’å­ç²¾çµè¡¨ä¸­çš„æ°´å¹³å¸§æ•°ã€‚仅在使用 [constant BILLBOARD_PARTICLES] æ—¶å¯ç”¨ã€‚å‚阅"
+"[member params_billboard_mode]。"
#: doc/classes/SpatialMaterial.xml:282
-#, fuzzy
msgid ""
"If [code]true[/code], particle animations are looped. Only enabled when "
"using [constant BILLBOARD_PARTICLES]. See [member params_billboard_mode]."
msgstr ""
-"如果[code]true[/code],则循环播放粒å­åŠ¨ç”»ã€‚ä»…å½“ä½¿ç”¨[constant "
-"BILLBOARD_PARTICLES]æ—¶å¯ç”¨ã€‚å‚阅[member billboard_mode]。"
+"如果 [code]true[/code],循环粒å­åŠ¨ç”»ã€‚ä»…åœ¨ä½¿ç”¨ [constant "
+"BILLBOARD_PARTICLES] æ—¶å¯ç”¨ã€‚å‚阅[member params_billboard_mode]。"
#: doc/classes/SpatialMaterial.xml:285
-#, fuzzy
msgid ""
"The number of vertical frames in the particle sprite sheet. Only enabled "
"when using [constant BILLBOARD_PARTICLES]. See [member "
"params_billboard_mode]."
msgstr ""
-"ç²’å­ç²¾çµè¡¨çš„垂直帧数。仅当使用[constant BILLBOARD_PARTICLES]æ—¶å¯ç”¨ã€‚å‚阅"
-"[member billboard_mode]。"
+"ç²’å­ç²¾çµè¡¨ä¸­çš„垂直帧数。仅在使用 [constant BILLBOARD_PARTICLES] æ—¶å¯ç”¨ã€‚å‚阅"
+"[member params_billboard_mode]。"
#: doc/classes/SpatialMaterial.xml:288
msgid ""
@@ -62728,12 +64842,15 @@ msgid ""
"backend, the material's roughness value will affect the blurriness of the "
"refraction. Higher roughness values will make the refraction look blurrier."
msgstr ""
+"如果[code]true[/code],则å¯ç”¨æŠ˜å°„æ•ˆæžœã€‚æŠ˜å°„æ˜¯æ ¹æ®æ¥è‡ªç‰©ä½“åŽé¢çš„å…‰çº¿æ¥æ‰­æ›²é€æ˜Ž"
+"度的。当使用GLES3åŽç«¯æ—¶ï¼Œæè´¨çš„ç²—ç³™åº¦å€¼ä¼šå½±å“æŠ˜å°„çš„æ¨¡ç³Šåº¦ã€‚è¾ƒé«˜çš„ç²—ç³™åº¦å€¼ä¼šä½¿"
+"æŠ˜å°„çœ‹èµ·æ¥æ›´æ¨¡ç³Šã€‚"
#: doc/classes/SpatialMaterial.xml:297
msgid ""
"The strength of the refraction effect. Higher values result in a more "
"distorted appearance for the refraction."
-msgstr ""
+msgstr "折射效果的强度。较高的值会使折射的表现更加扭曲。"
#: doc/classes/SpatialMaterial.xml:300
msgid ""
@@ -62742,7 +64859,6 @@ msgid ""
msgstr "控制æ¯ä¸ªåƒç´ æŠ˜å°„强度的纹ç†ã€‚乘以[member refraction_scale]。"
#: doc/classes/SpatialMaterial.xml:303
-#, fuzzy
msgid ""
"Specifies the channel of the [member refraction_texture] in which the "
"refraction information is stored. This is useful when you store the "
@@ -62750,23 +64866,25 @@ msgid ""
"stored metallic in the red channel, roughness in the blue, and ambient "
"occlusion in the green you could reduce the number of textures you use."
msgstr ""
-"指定存储金属信æ¯çš„ [member metallic_texture] 的通é“。当您在一个纹ç†ä¸­å­˜å‚¨å¤šä¸ª"
-"æ•ˆæžœçš„ä¿¡æ¯æ—¶ï¼Œè¿™å¾ˆæœ‰ç”¨ã€‚例如,如果您将金属效果存储在红色通é“中,将粗糙度存储"
-"在è“色通é“ä¸­ï¼Œå°†çŽ¯å¢ƒé®æŒ¡å­˜å‚¨åœ¨ç»¿è‰²é€šé“中,就å¯ä»¥å‡å°‘æ‚¨ä½¿ç”¨çš„çº¹ç†æ•°é‡ã€‚"
+"指定存储折射信æ¯çš„[member refraction_texture]的通é“。当你在纹ç†ä¸­å­˜å‚¨å¤šç§æ•ˆæžœ"
+"çš„ä¿¡æ¯æ—¶ï¼Œè¿™å¾ˆæœ‰ç”¨ã€‚例如,如果你在红色通é“中存储金属效果,在è“色通é“中存储粗"
+"糙度,在绿色通é“ä¸­å­˜å‚¨çŽ¯å¢ƒé®æŒ¡ï¼Œå°±å¯ä»¥å‡å°‘使用纹ç†çš„æ•°é‡ã€‚"
#: doc/classes/SpatialMaterial.xml:306
msgid "Sets the strength of the rim lighting effect."
msgstr "设置边缘照明效果的强度。"
#: doc/classes/SpatialMaterial.xml:309
-#, fuzzy
msgid ""
"If [code]true[/code], rim effect is enabled. Rim lighting increases the "
"brightness at glancing angles on an object.\n"
"[b]Note:[/b] Rim lighting is not visible if the material has [member "
"flags_unshaded] set to [code]true[/code]."
msgstr ""
-"如果[code]true[/code],则å¯ç”¨è¾¹ç¼˜æ•ˆæžœã€‚边框照明会增加物体上的斜角亮度。"
+"如果 [code]true[/code],则å¯ç”¨è¾¹ç¼˜æ•ˆæžœã€‚边缘照明增加了物体上掠过角度的亮"
+"度。\n"
+"[b]注æ„:[/b] 如果æè´¨å°† [member flags_unshaded] 设置为 [code]true[/code],则"
+"边缘光照ä¸å¯è§ã€‚"
#: doc/classes/SpatialMaterial.xml:313
msgid ""
@@ -62819,23 +64937,20 @@ msgstr ""
"subsurf_scatter_strength]。"
#: doc/classes/SpatialMaterial.xml:337
-#, fuzzy
msgid ""
"The color used by the transmission effect. Represents the light passing "
"through an object."
-msgstr "背光效果使用的颜色。表示穿过物体的光线。"
+msgstr "传输效果使用的颜色。表示穿过物体的光。"
#: doc/classes/SpatialMaterial.xml:340
-#, fuzzy
msgid "If [code]true[/code], the transmission effect is enabled."
-msgstr "如果为[code]true[/code],则å¯ç”¨glow效果。"
+msgstr "如果 [code]true[/code],则å¯ç”¨ä¼ è¾“效果。"
#: doc/classes/SpatialMaterial.xml:343
-#, fuzzy
msgid ""
"Texture used to control the transmission effect per-pixel. Added to [member "
"transmission]."
-msgstr "用于控制æ¯ä¸ªåƒç´ çš„背光效果的纹ç†ã€‚添加到 [member backlight]。"
+msgstr "纹ç†ç”¨äºŽæŽ§åˆ¶æ¯ä¸ªåƒç´ çš„传输效果。添加到[member transmission]。"
#: doc/classes/SpatialMaterial.xml:346
msgid ""
@@ -62963,18 +65078,16 @@ msgid "Texture specifying per-pixel ambient occlusion value."
msgstr "指定æ¯ä¸ªåƒç´ çŽ¯å¢ƒé®æŒ¡å€¼çš„纹ç†ã€‚"
#: doc/classes/SpatialMaterial.xml:405
-#, fuzzy
msgid "Texture specifying per-pixel depth."
-msgstr "指定æ¯ä¸ªåƒç´ é«˜åº¦çš„纹ç†ã€‚"
+msgstr "指定æ¯ä¸ªåƒç´ æ·±åº¦çš„纹ç†ã€‚"
#: doc/classes/SpatialMaterial.xml:408
msgid "Texture specifying per-pixel subsurface scattering."
msgstr "指定æ¯ä¸ªåƒç´ çš„äºšè¡¨é¢æ•£å°„的纹ç†ã€‚"
#: doc/classes/SpatialMaterial.xml:411
-#, fuzzy
msgid "Texture specifying per-pixel transmission color."
-msgstr "指定æ¯ä¸ªåƒç´ å‘射颜色的纹ç†ã€‚"
+msgstr "指定æ¯ä¸ªåƒç´ ä¼ è¾“颜色的纹ç†ã€‚"
#: doc/classes/SpatialMaterial.xml:414
msgid "Texture specifying per-pixel refraction strength."
@@ -63005,9 +65118,8 @@ msgid "Use [code]UV2[/code] with the detail texture."
msgstr "使用[code]UV2[/code]与细节纹ç†ã€‚"
#: doc/classes/SpatialMaterial.xml:435
-#, fuzzy
msgid "Constant for setting [member flags_transparent]."
-msgstr "用于设置[member ao_enabled]的常é‡ã€‚"
+msgstr "用于设置 [member flags_transparent] 的常é‡ã€‚"
#: doc/classes/SpatialMaterial.xml:438
msgid "Constant for setting [member emission_enabled]."
@@ -63034,18 +65146,16 @@ msgid "Constant for setting [member ao_enabled]."
msgstr "用于设置[member ao_enabled]的常é‡ã€‚"
#: doc/classes/SpatialMaterial.xml:456
-#, fuzzy
msgid "Constant for setting [member depth_enabled]."
-msgstr "常é‡ï¼Œç”¨äºŽè®¾ç½®[member detail_enabled]。"
+msgstr "用于设置 [member depth_enabled] 的常é‡ã€‚"
#: doc/classes/SpatialMaterial.xml:459
msgid "Constant for setting [member subsurf_scatter_enabled]."
msgstr "用于设置[member subsurf_scatter_enabled]的常é‡ã€‚"
#: doc/classes/SpatialMaterial.xml:462
-#, fuzzy
msgid "Constant for setting [member transmission_enabled]."
-msgstr "常é‡ï¼Œç”¨äºŽè®¾ç½®[member emission_enabled]。"
+msgstr "用于设置 [member transmission_enabled] 的常é‡ã€‚"
#: doc/classes/SpatialMaterial.xml:465
msgid "Constant for setting [member refraction_enabled]."
@@ -63089,7 +65199,7 @@ msgstr "没有深度的绘制。"
msgid ""
"For transparent objects, an opaque pass is made first with the opaque parts, "
"then transparency is drawn."
-msgstr ""
+msgstr "å¯¹äºŽé€æ˜Žå¯¹è±¡ï¼Œé¦–先对ä¸é€æ˜Žéƒ¨åˆ†è¿›è¡Œä¸é€æ˜Žä¼ é€’,然åŽç»˜åˆ¶é€æ˜Žåº¦ã€‚"
#: doc/classes/SpatialMaterial.xml:498
msgid "Default cull mode. The back of the object is culled when not visible."
@@ -63107,13 +65217,15 @@ msgstr "ä¸è¿›è¡Œå‰”除。"
msgid ""
"No lighting is used on the object. Color comes directly from [code]ALBEDO[/"
"code]."
-msgstr ""
+msgstr "物体上ä¸ä½¿ç”¨ç…§æ˜Žã€‚颜色直接æ¥è‡ª [code]ALBEDO[/code]。"
#: doc/classes/SpatialMaterial.xml:510
msgid ""
"Lighting is calculated per-vertex rather than per-pixel. This can be used to "
"increase the speed of the shader at the cost of quality."
msgstr ""
+"å…‰ç…§æ˜¯æŒ‰é¡¶ç‚¹è®¡ç®—çš„ï¼Œè€Œä¸æ˜¯æŒ‰åƒç´ è®¡ç®—。这å¯ç”¨äºŽä»¥ç‰ºç‰²è´¨é‡ä¸ºä»£ä»·æé«˜ç€è‰²å™¨çš„速"
+"度。"
#: doc/classes/SpatialMaterial.xml:513
msgid ""
@@ -63128,11 +65240,10 @@ msgid "Set [code]ALBEDO[/code] to the per-vertex color specified in the mesh."
msgstr "å°† [code]ALBEDO[/code] 设置为网格中指定的æ¯é¡¶ç‚¹é¢œè‰²ã€‚"
#: doc/classes/SpatialMaterial.xml:519
-#, fuzzy
msgid ""
"Vertex color is in sRGB space and needs to be converted to linear. Only "
"applies in the GLES3 renderer."
-msgstr "顶点颜色在sRGB空间,需è¦è½¬æ¢ä¸ºçº¿æ€§é¢œè‰²ã€‚仅适用于Vulkan渲染器。"
+msgstr "顶点颜色在sRGB空间,需è¦è½¬æˆçº¿æ€§ã€‚仅适用于 GLES3 渲染器。"
#: doc/classes/SpatialMaterial.xml:522
msgid ""
@@ -63149,14 +65260,13 @@ msgid ""
msgstr "按深度缩放对象,使其在å±å¹•上显示的大å°å§‹ç»ˆç›¸åŒã€‚"
#: doc/classes/SpatialMaterial.xml:528
-#, fuzzy
msgid ""
"Shader will keep the scale set for the mesh. Otherwise the scale is lost "
"when billboarding. Only applies when [member params_billboard_mode] is "
"[constant BILLBOARD_ENABLED]."
msgstr ""
-"Shaderä¼šä¿æŒç½‘格的比例设置。å¦åˆ™ï¼Œåœ¨åšå¹¿å‘Šç‰Œæ—¶ï¼Œæ¯”ä¾‹å°ºä¼šä¸¢å¤±ã€‚åªæœ‰å½“[member "
-"billboard_mode]为[constant BILLBOARD_ENABLED]时,æ‰é€‚用。"
+"ç€è‰²å™¨å°†ä¿æŒä¸ºç½‘格的缩放设置。å¦åˆ™ï¼Œå½“åšå¹¿å‘Šç‰Œæ—¶ï¼Œç¼©æ”¾ä¼šä¸¢å¤±ã€‚仅在 [member "
+"params_billboard_mode] 为 [constant BILLBOARD_ENABLED] 时适用。"
#: doc/classes/SpatialMaterial.xml:531
msgid ""
@@ -63183,13 +65293,13 @@ msgstr "使用[code]UV2[/code]åæ ‡ï¼Œä»Ž[member emission_texture]中查找。"
#: doc/classes/SpatialMaterial.xml:543
msgid "Use alpha scissor. Set by [member params_use_alpha_scissor]."
-msgstr ""
+msgstr "使用alpha剪刀。由 [member params_use_alpha_scissor] 设置。"
#: doc/classes/SpatialMaterial.xml:546
msgid ""
"Use world coordinates in the triplanar texture lookup instead of local "
"coordinates."
-msgstr ""
+msgstr "在三平é¢çº¹ç†æŸ¥æ‰¾ä¸­ä½¿ç”¨ä¸–ç•Œåæ ‡è€Œä¸æ˜¯å±€éƒ¨å标。"
#: doc/classes/SpatialMaterial.xml:549
msgid "Forces the shader to convert albedo from sRGB space to linear space."
@@ -63205,7 +65315,7 @@ msgstr "ç¦ç”¨æŽ¥æ”¶çŽ¯å¢ƒå…‰ã€‚"
#: doc/classes/SpatialMaterial.xml:558
msgid "Ensures that normals appear correct, even with non-uniform scaling."
-msgstr ""
+msgstr "ç¡®ä¿æ³•线显示正确,å³ä½¿ç¼©æ”¾æ¯”例ä¸å‡åŒ€ã€‚"
#: doc/classes/SpatialMaterial.xml:561
msgid "Enables the shadow to opacity feature."
@@ -63260,17 +65370,16 @@ msgid "The object's X axis will always face the camera."
msgstr "对象的X轴将始终é¢å‘相机。"
#: doc/classes/SpatialMaterial.xml:606
-#, fuzzy
msgid ""
"Used for particle systems when assigned to [Particles] and [CPUParticles] "
"nodes. Enables [code]particles_anim_*[/code] properties.\n"
"The [member ParticlesMaterial.anim_speed] or [member CPUParticles."
"anim_speed] should also be set to a positive value for the animation to play."
msgstr ""
-"分é…ç»™ [GPUParticles3D] å’Œ [CPUParticles3D] 节点时,用于粒å­ç³»ç»Ÿã€‚å¯ç”¨"
+"当分é…ç»™[Particles]å’Œ[CPUParticles]节点时用于粒å­ç³»ç»Ÿã€‚å¯ç”¨"
"[code]particles_anim_*[/code]属性。\n"
-"[member ParticlesMaterial.anim_speed]或[member CPUParticles3D.anim_speed]也应"
-"设置为正值æ‰èƒ½æ’­æ”¾åŠ¨ç”»ã€‚"
+"为了播放动画,[member ParticlesMaterial.anim_speed]或[member CPUParticles."
+"anim_speed]也应该被设置为正值。"
#: doc/classes/SpatialMaterial.xml:610
msgid "Used to read from the red channel of a texture."
@@ -63362,13 +65471,12 @@ msgid "Sphere shape for 3D collisions."
msgstr "用于 3D 碰撞的çƒå½¢ã€‚"
#: doc/classes/SphereShape.xml:7
-#, fuzzy
msgid ""
"Sphere shape for 3D collisions, which can be set into a [PhysicsBody] or "
"[Area]. This shape is useful for modeling sphere-like 3D objects."
msgstr ""
-"用于3D碰撞的çƒä½“形状,å¯ä»¥è®¾ç½®æˆ[PhysicsBody3D]或[Area3D]。这ç§å½¢çŠ¶å¯¹äºŽå»ºæ¨¡ç±»"
-"ä¼¼çƒä½“的三维物体很有用。"
+"3D 碰撞的çƒä½“形状,å¯ä»¥è®¾ç½®ä¸º [PhysicsBody] 或 [Area]。此形状对于模拟çƒçж 3D "
+"对象很有用。"
#: doc/classes/SphereShape.xml:16
msgid "The sphere's radius. The shape's diameter is double the radius."
@@ -63379,7 +65487,6 @@ msgid "Numerical input text field."
msgstr "数值输入文本字段。"
#: doc/classes/SpinBox.xml:7
-#, fuzzy
msgid ""
"SpinBox is a numerical input text field. It allows entering integers and "
"floats.\n"
@@ -63398,7 +65505,7 @@ msgid ""
"[SpinBox]'s background, add theme items for [LineEdit] and customize them."
msgstr ""
"SpinBox是一个数字输入文本字段。它å…许输入整数和浮点数。\n"
-"[b]例如:[/b]\n"
+"[b]例å­ï¼š[/b]\n"
"[codeblock]\n"
"var spin_box = SpinBox.new()\n"
"add_child(spin_box)\n"
@@ -63408,7 +65515,9 @@ msgstr ""
"[/codeblock]\n"
"上é¢çš„代ç å°†åˆ›å»ºä¸€ä¸ª[SpinBox],ç¦ç”¨å…¶ä¸Šçš„上下文èœå•ï¼Œå¹¶å°†æ–‡æœ¬å¯¹é½æ–¹å¼è®¾ç½®ä¸ºå³"
"对é½ã€‚\n"
-"关于[SpinBox]的更多选项,请å‚阅[Range]类。"
+"å‚阅[Range]类,以获得更多关于[SpinBox]的选项。\n"
+"[b]注æ„:[/b] [SpinBox] ä¾èµ–于底层的[LineEdit]节点。è¦ä¸º[SpinBox]的背景设置主"
+"题,请为[LineEdit]添加主题项,并对其进行定制。"
#: doc/classes/SpinBox.xml:26
msgid "Applies the current value of this [SpinBox]."
@@ -63422,6 +65531,10 @@ msgid ""
"may cause a crash. If you wish to hide it or any of its children, use their "
"[member CanvasItem.visible] property."
msgstr ""
+"返回这个[SpinBox]中的[LineEdit]实例。你å¯ä»¥ç”¨å®ƒæ¥è®¿é—®[LineEdit]的属性和方"
+"法。\n"
+"[b]警告:[/b] 这是一个必è¦çš„内部节点,移除和释放它å¯èƒ½ä¼šå¯¼è‡´å´©æºƒã€‚如果你想éš"
+"è—它或它的任何å­èŠ‚ç‚¹ï¼Œè¯·ä½¿ç”¨å…¶ [member CanvasItem.visible] 属性。"
#: doc/classes/SpinBox.xml:39
msgid "Sets the text alignment of the [SpinBox]."
@@ -63447,9 +65560,8 @@ msgid ""
msgstr "在 [SpinBox] çš„æ•°å€¼åŽæ·»åŠ æŒ‡å®šçš„ [code] suffix [/code] 字符串。"
#: doc/classes/SpinBox.xml:55
-#, fuzzy
msgid "Sets a custom [Texture] for up and down arrows of the [SpinBox]."
-msgstr "为 [SpinBox] 的上下箭头设置自定义 [Texture2D]。"
+msgstr "为 [SpinBox] 的上下箭头设置自定义 [Texture]。"
#: doc/classes/SplitContainer.xml:4
msgid "Container for splitting and adjusting."
@@ -63523,6 +65635,13 @@ msgid ""
"lights per mesh, you can increase [member ProjectSettings.rendering/limits/"
"rendering/max_lights_per_object] at the cost of shader compilation times."
msgstr ""
+"èšå…‰ç¯æ˜¯ä¸€ç§ [Light] 节点,它在特定方å‘上以圆锥体的形状å‘光。光线在远处衰å‡ã€‚"
+"è¿™ç§è¡°å‡å¯ä»¥é€šè¿‡æ”¹å˜[Light]的能é‡ã€åŠå¾„和衰å‡å‚æ•°æ¥é…置。\n"
+"[b]注æ„:[/b] é»˜è®¤æƒ…å†µä¸‹ï¼Œåªæœ‰ 32 个 èšå…‰ç¯å¯ä»¥åŒæ—¶å½±å“å•个网格 [i] èµ„æº [/"
+"i]ã€‚è€ƒè™‘å°†å…³å¡æ‹†åˆ†ä¸ºå¤šä¸ªç½‘格,以é™ä½Žè¶…过 32 个ç¯å…‰å½±å“åŒä¸€ç½‘格资æºçš„å¯èƒ½æ€§ã€‚"
+"æ‹†åˆ†æ°´å¹³ç½‘æ ¼ä¹Ÿå¯æé«˜è§†é”¥å‰”é™¤æ•ˆæžœï¼Œä»Žè€Œæé«˜æ€§èƒ½ã€‚如果您需è¦ä¸ºæ¯ä¸ªç½‘格使用更多"
+"ç¯å…‰ï¼Œæ‚¨å¯ä»¥å¢žåŠ  [member ProjectSettings.rendering/limits/rendering/"
+"max_lights_per_object],以ç€è‰²å™¨ç¼–译时间为代价。"
#: doc/classes/SpotLight.xml:18
msgid "The spotlight's angle in degrees."
@@ -63552,7 +65671,6 @@ msgid "A helper node, mostly used in 3rd person cameras."
msgstr "辅助节点,主è¦ç”¨äºŽç¬¬ä¸‰äººç§°ç›¸æœºã€‚"
#: doc/classes/SpringArm.xml:7
-#, fuzzy
msgid ""
"The SpringArm node is a node that casts a ray (or collision shape) along its "
"z axis and moves all its direct children to the collision point, minus a "
@@ -63564,39 +65682,35 @@ msgid ""
"If you use the SpringArm as a camera controller for your player, you might "
"need to exclude the player's collider from the SpringArm's collision check."
msgstr ""
-"SpringArm3D 节点会沿其 z 轴投射一æ¡å°„线(或碰撞形状)并将其所有直接å­èŠ‚ç‚¹ç§»åŠ¨"
-"到碰撞点,å‡åŽ»ä¸€ä¸ªè¾¹è·ã€‚\n"
-"最常è§çš„用例是制作一个对环境中的碰撞åšå‡ºå应的第三人称相机。\n"
-"SpringArm3D 将投射一æ¡å°„线,或者如果给定了一个形状,它将沿其 z è½´çš„æ–¹å‘æŠ•å°„è¯¥"
-"形状。\n"
-"如果您使用 SpringArm3D 作为播放器的相机控制器,您å¯èƒ½éœ€è¦ä»Ž SpringArm3D 的碰"
-"撞检查中排除播放器的碰撞器。"
+"SpringArm节点是沿其Z轴投射射线(或碰撞形状)的节点,并将其所有的直接å­èŠ‚ç‚¹ç§»"
+"动到碰撞点,å‡åŽ»è¾¹è·ã€‚\n"
+"最常è§çš„使用情况是制作第三人称相机,对环境中的碰撞åšå‡ºå应。\n"
+"SpringArm将投射一æ¡å°„线,或者给出形状,它将在其Z轴的方å‘上投射该形状。\n"
+"如果你使用SpringArm作为玩家的相机控制器,你å¯èƒ½éœ€è¦å°†çŽ©å®¶çš„ç¢°æ’žå™¨æŽ’é™¤åœ¨"
+"SpringArm的碰撞检查之外。"
#: doc/classes/SpringArm.xml:19
-#, fuzzy
msgid ""
"Adds the [PhysicsBody] object with the given [RID] to the list of "
"[PhysicsBody] objects excluded from the collision check."
msgstr ""
-"将具有给定[RID]的[PhysicsBody3D]对象添加到排除在碰撞检查之外的[PhysicsBody3D]"
-"对象列表中。"
+"将具有指定 [RID] 的 [PhysicsBody] 对象添加到排除在碰撞检查之外的 "
+"[PhysicsBody] 对象列表中。"
#: doc/classes/SpringArm.xml:25
-#, fuzzy
msgid ""
"Clears the list of [PhysicsBody] objects excluded from the collision check."
-msgstr "清除从碰撞检查中排除的 [PhysicsBody3D] 对象列表。"
+msgstr "清除从碰撞检查中排除的 [PhysicsBody] 对象列表。"
#: doc/classes/SpringArm.xml:31
msgid "Returns the spring arm's current length."
msgstr "返回弹簧臂的当å‰é•¿åº¦ã€‚"
#: doc/classes/SpringArm.xml:38
-#, fuzzy
msgid ""
"Removes the given [RID] from the list of [PhysicsBody] objects excluded from "
"the collision check."
-msgstr "从碰撞检查排除的 [PhysicsBody3D] 对象列表中删除给定的 [RID]。"
+msgstr "从碰撞检查排除的 [PhysicsBody] 对象列表中删除指定的 [RID]。"
#: doc/classes/SpringArm.xml:44
msgid ""
@@ -63605,9 +65719,11 @@ msgid ""
"html#collision-layers-and-masks]Collision layers and masks[/url] in the "
"documentation for more information."
msgstr ""
+"碰撞检测的目标层。更多信æ¯è¯·å‚阅文档中的[url=https://docs.godotengine.org/"
+"zh_CN/stable/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]碰撞层与é®ç½©[/url]。"
#: doc/classes/SpringArm.xml:47
-#, fuzzy
msgid ""
"When the collision check is made, a candidate length for the SpringArm is "
"given.\n"
@@ -63618,24 +65734,21 @@ msgid ""
"collision, while with the margin the [Camera] would be placed close to the "
"point of collision."
msgstr ""
-"进行碰撞检查时,会给出 SpringArm3D 的候选长度。\n"
-"ç„¶åŽå°†è¾¹è·å‡åŽ»æ­¤é•¿åº¦ï¼Œå¹¶å°†å¹³ç§»åº”ç”¨äºŽ SpringArm3D çš„å­å¯¹è±¡ã€‚\n"
-"当 SpringArm3D å°† [Camera3D] 作为å­èŠ‚ç‚¹æ—¶ï¼Œæ­¤è¾¹è·å¾ˆæœ‰ç”¨ï¼šæ²¡æœ‰è¾¹è·ï¼Œ"
-"[Camera3D] å°†æ”¾ç½®åœ¨ç¢°æ’žçš„ç¡®åˆ‡ç‚¹ä¸Šï¼Œè€Œæœ‰è¾¹è·æ—¶ï¼Œ[Camera3D] 将放置在é è¿‘碰撞"
-"点。"
+"进行碰撞检查时,会给出 SpringArm 的候选长度。\n"
+"ç„¶åŽå°†è¾¹è·å‡åŽ»æ­¤é•¿åº¦ï¼Œå¹¶å°†å¹³ç§»åº”ç”¨äºŽ SpringArm çš„å­å¯¹è±¡ã€‚\n"
+"当 SpringArm å°† [Camera] 作为å­èŠ‚ç‚¹æ—¶ï¼Œæ­¤è¾¹è·å¾ˆæœ‰ç”¨ï¼šæ²¡æœ‰è¾¹è·ï¼Œ[Camera] 将放"
+"ç½®åœ¨ç¢°æ’žçš„ç¡®åˆ‡ç‚¹ä¸Šï¼Œè€Œæœ‰è¾¹è·æ—¶ï¼Œ[Camera] 将放置在é è¿‘碰撞点。"
#: doc/classes/SpringArm.xml:52
-#, fuzzy
msgid ""
"The [Shape] to use for the SpringArm.\n"
"When the shape is set, the SpringArm will cast the [Shape] on its z axis "
"instead of performing a ray cast."
msgstr ""
-"用于SpringArm3D的[Shape3D]。\n"
-"当形状被设置时,SpringArm3D将在其Z轴上投射[Shape3D]ï¼Œè€Œä¸æ˜¯æ‰§è¡Œå°„线投射。"
+"用于 SpringArm 的[Shape]。\n"
+"当形状被设置时,SpringArm 将在其 Z 轴上投射 [Shape]ï¼Œè€Œä¸æ˜¯æ‰§è¡Œå°„线投射。"
#: doc/classes/SpringArm.xml:56
-#, fuzzy
msgid ""
"The maximum extent of the SpringArm. This is used as a length for both the "
"ray and the shape cast used internally to calculate the desired position of "
@@ -63643,10 +65756,10 @@ msgid ""
"To know more about how to perform a shape cast or a ray cast, please consult "
"the [PhysicsDirectSpaceState] documentation."
msgstr ""
-"SpringArm3D 的最大范围。这用作内部使用的射线和形状投射的长度,以计算 "
-"SpringArm3D å­èŠ‚ç‚¹çš„æ‰€éœ€ä½ç½®ã€‚\n"
+"SpringArm 的最大范围。这用作内部使用的射线和形状投射的长度,以计算 SpringArm "
+"å­èŠ‚ç‚¹çš„æ‰€éœ€ä½ç½®ã€‚\n"
"è¦äº†è§£æœ‰å…³å¦‚何执行形状投射或光线投射的更多信æ¯ï¼Œè¯·å‚阅 "
-"[PhysicsDirectSpaceState3D] 文档。"
+"[PhysicsDirectSpaceState] 文档。"
#: doc/classes/Sprite.xml:4
msgid "General-purpose sprite node."
@@ -63661,7 +65774,6 @@ msgstr ""
"表动画的帧。"
#: doc/classes/Sprite.xml:16
-#, fuzzy
msgid ""
"Returns a [Rect2] representing the Sprite's boundary in local coordinates. "
"Can be used to detect if the Sprite was clicked. Example:\n"
@@ -63673,8 +65785,8 @@ msgid ""
" print(\"A click!\")\n"
"[/codeblock]"
msgstr ""
-"返回一个 [Rect2]ï¼Œåœ¨å±€éƒ¨åæ ‡ä¸­è¡¨ç¤º Sprite2D 的边界。å¯ç”¨äºŽæ£€æµ‹ Sprite2D 是å¦"
-"被点击。例å­ï¼š\n"
+"返回 [Rect2] è¡¨ç¤ºå±€éƒ¨åæ ‡ä¸­ Sprite 的边界。å¯ç”¨äºŽæ£€æµ‹ Sprite 是å¦è¢«ç‚¹å‡»ã€‚例"
+"å­ï¼š\n"
"[codeblock]\n"
"func _input(event):\n"
" if event is InputEventMouseButton and event.pressed and event."
@@ -63700,29 +65812,26 @@ msgid "If [code]true[/code], texture is centered."
msgstr "如果 [code]true[/code],纹ç†å±…中。"
#: doc/classes/Sprite.xml:45 doc/classes/Sprite3D.xml:15
-#, fuzzy
msgid ""
"Current frame to display from sprite sheet. [member hframes] or [member "
"vframes] must be greater than 1."
msgstr ""
-"从精çµè¡¨æ˜¾ç¤ºçš„当å‰å¸§ã€‚ [member vframes] 或 [member hframes] 必须大于 1。"
+"当剿˜¾ç¤ºçš„ç²¾çµè¡¨ä¸­çš„帧。[member vframes] 或 [member hframes] 必须大于 1。"
#: doc/classes/Sprite.xml:48 doc/classes/Sprite3D.xml:18
-#, fuzzy
msgid ""
"Coordinates of the frame to display from sprite sheet. This is as an alias "
"for the [member frame] property. [member hframes] or [member vframes] must "
"be greater than 1."
msgstr ""
-"从精çµè¡¨æ˜¾ç¤ºçš„叧忠‡ã€‚这是 [member frame] 属性的别å。 [member vframes] 或 "
-"[member hframes] 必须大于 1。"
+"显示的帧在精çµè¡¨ä¸­çš„åæ ‡ã€‚这是 [member frame] 属性的别å。[member vframes] "
+"或 [member hframes] 必须大于 1。"
#: doc/classes/Sprite.xml:51 doc/classes/Sprite3D.xml:21
msgid "The number of columns in the sprite sheet."
msgstr "ç²¾çµè¡¨ä¸­çš„列数。"
#: doc/classes/Sprite.xml:54
-#, fuzzy
msgid ""
"The normal map gives depth to the Sprite.\n"
"[b]Note:[/b] Godot expects the normal map to use X+, Y-, and Z+ coordinates. "
@@ -63730,10 +65839,11 @@ msgid ""
"Normal_Map_Technical_Details#Common_Swizzle_Coordinates]this page[/url] for "
"a comparison of normal map coordinates expected by popular engines."
msgstr ""
-"为 Sprite2D æä¾›æ·±åº¦çš„æ³•线贴图。\n"
-"[b]注:[/b] Godot 期望法线贴图使用 X+ã€Y- å’Œ Z+ åæ ‡ã€‚å‚阅[url=http://wiki."
-"polycount.com/wiki/Normal_Map_Technical_Details#Common_Swizzle_Coordinates]è¿™"
-"个页é¢[/url] 比较æµè¡Œå¼•æ“Žæ‰€æœŸæœ›çš„æ³•çº¿åœ°å›¾åæ ‡ã€‚"
+"为 Sprite æä¾›æ·±åº¦çš„æ³•线贴图。\n"
+"[b]注æ„:[/b] Godot 期望法线贴图使用 X+ã€Y- å’Œ Z+ åæ ‡ç³»ã€‚å‚阅[url=http://"
+"wiki.polycount.com/wiki/"
+"Normal_Map_Technical_Details#Common_Swizzle_Coordinates]这个页é¢[/url]比较æµ"
+"è¡Œå¼•æ“Žæ‰€æœŸæœ›çš„æ³•çº¿è´´å›¾åæ ‡ç³»ã€‚"
#: doc/classes/Sprite.xml:61
msgid ""
@@ -63755,9 +65865,8 @@ msgstr ""
"è¦æ˜¾ç¤ºçš„图集纹ç†åŒºåŸŸã€‚ [member region_enabled] 必须是 [code]true[/code]。"
#: doc/classes/Sprite.xml:70
-#, fuzzy
msgid "[Texture] object to draw."
-msgstr "[Texture2D] è¦ç»˜åˆ¶çš„对象。"
+msgstr "[Texture] è¦ç»˜åˆ¶çš„对象。"
#: doc/classes/Sprite.xml:73 doc/classes/Sprite3D.xml:33
msgid "The number of rows in the sprite sheet."
@@ -63776,14 +65885,13 @@ msgid "2D sprite node in a 3D world."
msgstr "3D 世界中的 2D ç²¾çµèŠ‚ç‚¹ã€‚"
#: doc/classes/Sprite3D.xml:7
-#, fuzzy
msgid ""
"A node that displays a 2D texture in a 3D environment. The texture displayed "
"can be a region from a larger atlas texture, or a frame from a sprite sheet "
"animation."
msgstr ""
-"显示 2D 纹ç†çš„节点。显示的纹ç†å¯ä»¥æ˜¯æ¥è‡ªè¾ƒå¤§å›¾é›†çº¹ç†çš„区域,也å¯ä»¥æ˜¯æ¥è‡ªç²¾çµ"
-"表动画的帧。"
+"在 3D 环境中显示 2D 纹ç†çš„节点。显示的纹ç†å¯ä»¥æ˜¯æ¥è‡ªè¾ƒå¤§å›¾é›†çº¹ç†çš„区域,也å¯"
+"以是æ¥è‡ªç²¾çµè¡¨åŠ¨ç”»çš„å¸§ã€‚"
#: doc/classes/Sprite3D.xml:24
msgid ""
@@ -63798,6 +65906,8 @@ msgid ""
"[Texture] object to draw. If [member GeometryInstance.material_override] is "
"used, this will be overridden."
msgstr ""
+"è¦ç»˜åˆ¶çš„ [Texture] 对象。如果 [member GeometryInstance.material_override] 被"
+"使用,这将被覆盖。"
#: doc/classes/SpriteBase3D.xml:4
msgid "2D sprite node in 3D environment."
@@ -63834,22 +65944,20 @@ msgid ""
msgstr "乘以颜色值,用于色调调制和模拟光的颜色。"
#: doc/classes/SpriteBase3D.xml:66
-#, fuzzy
msgid ""
"The objects' visibility on a scale from [code]0[/code] fully invisible to "
"[code]1[/code] fully visible."
-msgstr "物体的能è§åº¦ï¼Œä»Ž[code]0[/code]完全ä¸å¯è§åˆ°[code]1[/code]完全å¯è§ã€‚"
+msgstr "物体的å¯è§åº¦ä»Ž [code]0 [/code] 完全ä¸å¯è§åˆ° [code]1 [/code] 完全å¯è§ã€‚"
#: doc/classes/SpriteBase3D.xml:69
msgid "The size of one pixel's width on the sprite to scale it in 3D."
msgstr "ç²¾çµä¸Šä¸€ä¸ªåƒç´ å®½åº¦çš„大å°ï¼Œä»¥ 3D 缩放。"
#: doc/classes/SpriteBase3D.xml:72
-#, fuzzy
msgid ""
"If [code]true[/code], the [Light] in the [Environment] has effects on the "
"sprite."
-msgstr "如果[code]true[/code],则[Environment]中的[Light3D]å¯¹ç²¾çµæœ‰å½±å“。"
+msgstr "如果 [code]true[/code],则 [Environment] 中的 [Light] å¯¹ç²¾çµæœ‰å½±å“。"
#: doc/classes/SpriteBase3D.xml:75
msgid ""
@@ -63879,9 +65987,8 @@ msgid "Represents the size of the [enum DrawFlags] enum."
msgstr "代表[enum DrawFlags]枚举的大å°ã€‚"
#: doc/classes/SpriteFrames.xml:4
-#, fuzzy
msgid "Sprite frame library for AnimatedSprite."
-msgstr "AnimatedSprite2D 的精çµå¸§åº“。"
+msgstr "AnimatedSprite 的 Sprite 帧数库。"
#: doc/classes/SpriteFrames.xml:7
msgid ""
@@ -63892,6 +65999,11 @@ msgid ""
"having 2 [SpriteFrames] resources [code]run[/code] and [code]run_normal[/"
"code] will make it so the [code]run[/code] animation uses the normal map."
msgstr ""
+"[AnimatedSprite] 的精çµå¸§åº“。包å«å¯ç”¨äºŽæ’­æ”¾çš„帧和动画数æ®ã€‚\n"
+"[b]注æ„:[/b] ä½ å¯ä»¥é€šè¿‡åˆ›å»ºå¸¦æœ‰ [code]_normal[/code] åŽç¼€çš„ [SpriteFrames] "
+"æ¥å…³è”ä¸€ç»„æ³•çº¿è´´å›¾ã€‚ä¾‹å¦‚ï¼ŒåŒæ—¶å­˜åœ¨ä¸¤ä¸ªåˆ†åˆ«å«åš [code]run[/code] å’Œ "
+"[code]run_normal[/code] çš„ [SpriteFrames] 资æºï¼Œé‚£ä¹ˆ [code]run[/code] 中的动"
+"画就会使用法线贴图。"
#: doc/classes/SpriteFrames.xml:17
msgid "Adds a new animation to the library."
@@ -63910,13 +66022,12 @@ msgid "Removes all animations. A \"default\" animation will be created."
msgstr "删除所有动画。将创建一个“默认â€åŠ¨ç”»ã€‚"
#: doc/classes/SpriteFrames.xml:46
-#, fuzzy
msgid ""
"Returns [code]true[/code] if the given animation is configured to loop when "
"it finishes playing. Otherwise, returns [code]false[/code]."
msgstr ""
-"如果addon准备好å“应函数调用,返回[code]true[/code],å¦åˆ™è¿”回[code]false[/"
-"code]。"
+"当指定的动画被é…ç½®ä¸ºç»“æŸæ’­æ”¾åŽå¾ªçŽ¯æ—¶ï¼Œè¿”å›ž [code]true[/code],å¦åˆ™è¿”回 "
+"[code]false[/code]。"
#: doc/classes/SpriteFrames.xml:52
msgid ""
@@ -63969,7 +66080,6 @@ msgid "Static body for 3D physics."
msgstr "用于 3D 物ç†çš„陿€ç‰©ä½“。"
#: doc/classes/StaticBody.xml:7
-#, fuzzy
msgid ""
"Static body for 3D physics. A static body is a simple body that is not "
"intended to move. In contrast to [RigidBody], they don't consume any CPU "
@@ -63978,7 +66088,7 @@ msgid ""
"static body, so even if it doesn't move, it affects other bodies as if it "
"was moving (this is useful for simulating conveyor belts or conveyor wheels)."
msgstr ""
-"用于 3D 物ç†çš„陿€ç‰©ä½“ã€‚é™æ€ç‰©ä½“是ä¸ç§»åŠ¨çš„ç®€å•物体。与 [RigidBody3D] 相比,它"
+"用于 3D 物ç†çš„陿€ç‰©ä½“ã€‚é™æ€ç‰©ä½“是ä¸åº”移动的简å•物体。与 [RigidBody] 相比,它"
"们åªè¦ä¸åЍ就ä¸ä¼šæ¶ˆè€—任何 CPU 资æºã€‚\n"
"此外,å¯ä»¥ä¸ºé™æ€ç‰©ä½“设置æ’定的线速度或角速度,因此å³ä½¿å®ƒä¸ç§»åŠ¨ï¼Œä¹Ÿä¼šåƒç§»åЍ䏀"
"æ ·å½±å“其他物体(这对于模拟传é€å¸¦æˆ–ä¼ é€è½®å¾ˆæœ‰ç”¨ï¼‰ã€‚"
@@ -64005,6 +66115,9 @@ msgid ""
"Deprecated, use [member PhysicsMaterial.friction] instead via [member "
"physics_material_override]."
msgstr ""
+"物体的摩擦,从 0(无摩擦)到 1(最大摩擦)。\n"
+"已废弃,请通过 [member physics_material_override] 使用 [member "
+"PhysicsMaterial.friction]。"
#: doc/classes/StaticBody2D.xml:4
msgid "Static body for 2D physics."
@@ -64039,28 +66152,29 @@ msgstr ""
"物体的æ’定线速度。这ä¸ä¼šç§»åŠ¨ç‰©ä½“ï¼Œä½†ä¼šå½±å“碰撞的物体,就åƒå®ƒåœ¨ç§»åŠ¨ä¸€æ ·ã€‚"
#: doc/classes/StaticBody2D.xml:26
-#, fuzzy
msgid ""
"The body's friction. Values range from [code]0[/code] (no friction) to "
"[code]1[/code] (full friction).\n"
"Deprecated, use [member PhysicsMaterial.friction] instead via [member "
"physics_material_override]."
msgstr ""
-"物体的摩擦。å–值范围从[code]0[/code](无摩擦)到[code]1[/code](最大摩擦)。"
+"物体的摩擦。å–值范围从 [code]0[/code](无摩擦)到 [code]1[/code](最大摩"
+"擦)。\n"
+"已废弃,请通过 [member physics_material_override] 使用 [member "
+"PhysicsMaterial.friction]。"
#: doc/classes/StreamPeer.xml:4
msgid "Abstraction and base class for stream-based protocols."
msgstr "基于æµçš„å议的抽象和基类。"
#: doc/classes/StreamPeer.xml:7
-#, fuzzy
msgid ""
"StreamPeer is an abstraction and base class for stream-based protocols (such "
"as TCP). It provides an API for sending and receiving data through streams "
"as raw data or strings."
msgstr ""
-"StreamPeer是基于æµå议(如TCP或UNIX套接字)的一个抽象和基类。它æä¾›äº†ä¸€ä¸ª"
-"API,用于通过æµå‘é€å’ŒæŽ¥æ”¶åŽŸå§‹æ•°æ®æˆ–字符串的数æ®ã€‚"
+"StreamPeer 是对æµå¼å议(如 TCP)的抽象和基类。它æä¾›äº†ç”¨äºŽé€šè¿‡æµå‘é€å’ŒæŽ¥æ”¶åŽŸ"
+"å§‹æ•°æ®æˆ–字符串的数æ®çš„ API。"
#: doc/classes/StreamPeer.xml:15
msgid "Gets a signed 16-bit value from the stream."
@@ -64207,7 +66321,6 @@ msgstr ""
"值,一个 [enum @GlobalScope.Error] 错误ç ä»¥åŠä¸€ä¸ªæ•´æ•°ï¼Œè¡¨ç¤ºå®žé™…å‘é€çš„æ•°æ®é‡ã€‚"
#: doc/classes/StreamPeer.xml:174
-#, fuzzy
msgid ""
"Puts a zero-terminated ASCII string into the stream prepended by a 32-bit "
"unsigned integer representing its size.\n"
@@ -64219,7 +66332,8 @@ msgid ""
msgstr ""
"呿µä¸­æ”¾å…¥ä¸€ä¸ªä»¥é›¶ç»“尾的 ASCII 字符串,å‰ç¼€ä¸€ä¸ªè¡¨ç¤ºå…¶é•¿åº¦çš„ 32 使— ç¬¦å·æ•´"
"数。\n"
-"注æ„:如果想å‘é€ä¸åŒ…å«é•¿åº¦å‰ç¼€çš„ ASCII 字符串,å¯ä»¥ä½¿ç”¨ [method put_data]:\n"
+"[b]注æ„:[/b] 如果想å‘é€ä¸åŒ…å«é•¿åº¦å‰ç¼€çš„ ASCII 字符串,å¯ä»¥ä½¿ç”¨ [method "
+"put_data]:\n"
"[codeblock]\n"
"put_data(\"Hello world\".to_ascii())\n"
"[/codeblock]"
@@ -64241,7 +66355,6 @@ msgid "Puts an unsigned byte into the stream."
msgstr "呿µä¸­æ”¾å…¥ä¸€ä¸ªæ— ç¬¦å·å­—节。"
#: doc/classes/StreamPeer.xml:213
-#, fuzzy
msgid ""
"Puts a zero-terminated UTF-8 string into the stream prepended by a 32 bits "
"unsigned integer representing its size.\n"
@@ -64253,7 +66366,8 @@ msgid ""
msgstr ""
"呿µä¸­æ”¾å…¥ä¸€ä¸ªä»¥é›¶ç»“尾的 UTF-8 字符串,å‰ç¼€ä¸€ä¸ªè¡¨ç¤ºå…¶é•¿åº¦çš„ 32 使— ç¬¦å·æ•´"
"数。\n"
-"注æ„:如果想å‘é€ä¸åŒ…å«é•¿åº¦å‰ç¼€çš„ UTF-8 字符串,å¯ä»¥ä½¿ç”¨ [method put_data]:\n"
+"[b]注æ„:[/b] 如果想å‘é€ä¸åŒ…å«é•¿åº¦å‰ç¼€çš„ UTF-8 字符串,å¯ä»¥ä½¿ç”¨ [method "
+"put_data]:\n"
"[codeblock]\n"
"put_data(\"Hello world\".to_utf8())\n"
"[/codeblock]"
@@ -64374,13 +66488,12 @@ msgid "Returns the status of the connection, see [enum Status]."
msgstr "返回连接的状æ€ï¼Œè§[enum Status]。"
#: doc/classes/StreamPeerTCP.xml:47
-#, fuzzy
msgid ""
"Returns [code]true[/code] if this peer is currently connected or is "
"connecting to a host, [code]false[/code] otherwise."
msgstr ""
-"如果这个对等体当å‰è¿žæŽ¥åˆ°ä¸€ä¸ªä¸»æœºï¼Œè¿”回[code]true[/code],å¦åˆ™è¿”回"
-"[code]false[/code]。"
+"当本对等体当å‰å·²è¿žæŽ¥åˆ°ä¸»æœºæˆ–者正在连接主机,则返回 [code]true[/code],å¦åˆ™è¿”"
+"回 [code]false[/code]。"
#: doc/classes/StreamPeerTCP.xml:54
msgid ""
@@ -64392,6 +66505,12 @@ msgid ""
"send large packets or need to transfer a lot of data, as enabling this can "
"decrease the total available bandwidth."
msgstr ""
+"如果 [code]enabled[/code] 为 [code]true[/code] 时,数æ®åŒ…会立å³å‘é€ã€‚如果 "
+"[code]enabled[/code] 为 [code]false[/code] 时(默认如此),数æ®åŒ…会延迟å‘é€ï¼Œ"
+"使用 [url=https://zh.wikipedia.org/wiki/%E7%B4%8D%E6%A0%BC%E7%AE%97%E6%B3%95]"
+"纳格算法[/url]åˆå¹¶ã€‚\n"
+"[b]注æ„:[/b] 如果你的应用所传输的数æ®åŒ…很大,或者需è¦ä¼ è¾“大釿•°æ®ï¼Œå»ºè®®å°†æœ¬"
+"å±žæ€§ä¿æŒç¦ç”¨ï¼Œå› ä¸ºå¯ç”¨åŽå¯èƒ½é™ä½Žæ€»ä½“å¯ç”¨å¸¦å®½ã€‚"
#: doc/classes/StreamPeerTCP.xml:61
msgid ""
@@ -64447,7 +66566,7 @@ msgid ""
"https://docs.godotengine.org/en/3.4/getting_started/scripting/gdscript/"
"gdscript_format_string.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/getting_started/scripting/gdscript/"
+"https://docs.godotengine.org/zh_CN/stable/getting_started/scripting/gdscript/"
"gdscript_format_string.html"
#: doc/classes/String.xml:17
@@ -64519,39 +66638,32 @@ msgid "Constructs a new String from the given [Array]."
msgstr "从给定的 [Array] 构造一个新字符串。"
#: doc/classes/String.xml:136
-#, fuzzy
msgid "Constructs a new String from the given [PoolByteArray]."
-msgstr "从给定的 [PackedByteArray] 构造一个新字符串。"
+msgstr "从给定的[PoolByteArray]构造一个新的字符串。"
#: doc/classes/String.xml:143
-#, fuzzy
msgid "Constructs a new String from the given [PoolIntArray]."
-msgstr "从给定的 [Array] 构造一个新字符串。"
+msgstr "从给定的[PoolIntArray]构造一个新的字符串。"
#: doc/classes/String.xml:150
-#, fuzzy
msgid "Constructs a new String from the given [PoolRealArray]."
-msgstr "从给定的 [Array] 构造一个新字符串。"
+msgstr "从给定的[PoolRealArray]构造一个新的字符串。"
#: doc/classes/String.xml:157
-#, fuzzy
msgid "Constructs a new String from the given [PoolStringArray]."
-msgstr "从给定的 [PackedStringArray] 构造一个新字符串。"
+msgstr "从给定的[PoolStringArray]构造一个新的字符串。"
#: doc/classes/String.xml:164
-#, fuzzy
msgid "Constructs a new String from the given [PoolVector2Array]."
-msgstr "从给定的 [PackedVector2Array] 构造一个新字符串。"
+msgstr "从给定的[PoolVector2Array]构造一个新的字符串。"
#: doc/classes/String.xml:171
-#, fuzzy
msgid "Constructs a new String from the given [PoolVector3Array]."
-msgstr "从给定的 [PackedVector3Array] 构造一个新字符串。"
+msgstr "从给定的[PoolVector3Array]构造一个新的字符串。"
#: doc/classes/String.xml:178
-#, fuzzy
msgid "Constructs a new String from the given [PoolColorArray]."
-msgstr "从给定的 [PackedColorArray] 构造一个新字符串。"
+msgstr "从给定的[PoolColorArray]构建一个新的字符串。"
#: doc/classes/String.xml:185
msgid "Returns [code]true[/code] if the string begins with the given string."
@@ -64615,6 +66727,18 @@ msgid ""
"To get a boolean result from a string comparison, use the [code]==[/code] "
"operator instead. See also [method nocasecmp_to]."
msgstr ""
+"与å¦ä¸€ä¸ªå­—符串进行比较,区分大å°å†™ã€‚å°äºŽæ—¶è¿”回 [code]-1[/code]ã€å¤§äºŽæ—¶è¿”回 "
+"[code]1[/code]ã€ç­‰äºŽæ—¶è¿”回 [code]0[/code]。“å°äºŽâ€å’Œâ€œå¤§äºŽâ€æ¯”较的是字符串中的 "
+"[url=https://zh.wikipedia.org/wiki/Unicode%E5%AD%97%E7%AC"
+"%A6%E5%88%97%E8%A1%A8]Unicode ç ä½[/url],大致与字æ¯è¡¨é¡ºåºä¸€è‡´ã€‚\n"
+"[b]字符串长度ä¸åŒæ—¶çš„行为:[/b] “基准â€å­—符串比 [code]to[/code] 字符串长时返"
+"回 [code]-1[/code],“基准â€å­—符串比 [code]to[/code] 字符串短时返回 [code]-1[/"
+"code]ã€‚è¯·æ³¨æ„æ­¤å¤„的长度为 Unicode ç ä½çš„长度,[i]䏿˜¯[/i]实际的å¯è§å­—符。\n"
+"[b]存在空字符串的行为:[/b] “基准â€å­—符串为空时返回 [code]-1[/code],字符串 "
+"[code]to[/code] 为空时返回 [code]1[/code],两者都为空时返回 [code]0[/"
+"code]。\n"
+"如果想在比较字符串时获得布尔型的返回值,请使用 [code]==[/code] è¿ç®—符。å‚阅 "
+"[method nocasecmp_to]。"
#: doc/classes/String.xml:229
msgid ""
@@ -64661,7 +66785,6 @@ msgstr ""
"从该字符串的 [code]position[/code] ä½ç½®å¼€å§‹ï¼Œæ“¦é™¤ [code]chars[/code] 个字符。"
#: doc/classes/String.xml:272
-#, fuzzy
msgid ""
"Finds the first occurrence of a substring. Returns the starting position of "
"the substring or [code]-1[/code] if not found. Optionally, the initial "
@@ -64674,12 +66797,12 @@ msgid ""
" pass\n"
"[/codeblock]"
msgstr ""
-"返回此实例中指定字符串的 [b]first[/b] 出现的索引(区分大å°å†™),或 [code]-1[/"
-"code]。å¯ä»¥æŒ‡å®šèµ·å§‹æœç´¢ç´¢å¼•,一直到字符串的结尾。\n"
-"[b]注:[/b] å¦‚æžœåªæƒ³çŸ¥é“字符串是å¦åŒ…å«å­å­—符串,请使用 [code]in[/code] è¿ç®—"
+"查找首次出现的å­å­—符串。返回该å­å­—符串的起始ä½ç½®ï¼Œæœªæ‰¾åˆ°æ—¶åˆ™è¿”回 [code]-1[/"
+"code]。还å¯ä»¥ä¼ å…¥æŸ¥æ‰¾çš„èµ·å§‹ä½ç½®ã€‚\n"
+"[b]注æ„:[/b] å¦‚æžœåªæƒ³çŸ¥é“字符串是å¦åŒ…å«å­å­—符串,请使用 [code]in[/code] è¿ç®—"
"符,如下所示:\n"
"[codeblock]\n"
-"# 将判断为 `false`.\n"
+"# 判断结果将为 `false`。\n"
"if \"i\" in \"team\":\n"
" pass\n"
"[/codeblock]"
@@ -64689,16 +66812,17 @@ msgid ""
"Finds the last occurrence of a substring. Returns the starting position of "
"the substring or [code]-1[/code] if not found."
msgstr ""
+"查找最åŽä¸€æ¬¡å‡ºçŽ°çš„å­å­—符串。如果未找到,则返回å­å­—符串的起始ä½ç½®æˆ– [code]-1[/"
+"code]。"
#: doc/classes/String.xml:293
-#, fuzzy
msgid ""
"Finds the first occurrence of a substring, ignoring case. Returns the "
"starting position of the substring or [code]-1[/code] if not found. "
"Optionally, the initial search index can be passed."
msgstr ""
-"在数组中查找指定的值,返回对应的索引,未找到时返回 [code]-1[/code]。还å¯ä»¥ä¼ "
-"å…¥æœç´¢èµ·å§‹ä½ç½®çš„索引。"
+"查找å­å­—符串的第一次出现,忽略大å°å†™ã€‚如果未找到,则返回å­å­—符串的起始ä½ç½®æˆ– "
+"[code]-1[/code]。或者,å¯ä»¥ä¼ é€’åˆå§‹æœç´¢ç´¢å¼•。"
#: doc/classes/String.xml:301
msgid ""
@@ -64733,6 +66857,18 @@ msgid ""
"print(\"\".get_extension()) # \"\" (empty string)\n"
"[/codeblock]"
msgstr ""
+"å¦‚æžœå­—ç¬¦ä¸²æ˜¯ä¸€ä¸ªæœ‰æ•ˆçš„æ–‡ä»¶åæˆ–路径,返回ä¸å¸¦å¥ç‚¹çš„æ‰©å±•å([code]. [/code])。"
+"如果字符串ä¸åŒ…嫿‰©å±•å,则返回一个空字符串。\n"
+"[codeblock]\n"
+"print(\"/path/to/file.txt\".get_extension()) # \"txt\"\n"
+"print(\"file.txt\".get_extension()) # \"txt\"\n"
+"print(\"file.sample.txt\".get_extension()) # \"txt\"\n"
+"print(\".txt\".get_extension()) # \"txt\"\n"
+"print(\"file.txt.\".get_extension()) # \"\" (空字符串)\n"
+"print(\"file.txt..\".get_extension()) # \"\" (空字符串)\n"
+"print(\"txt\".get_extension()) # \"\" (空字符串)\n"
+"print(\"\".get_extension()) # \"\" (空字符串)\n"
+"[/codeblock]"
#: doc/classes/String.xml:335
msgid "If the string is a valid file path, returns the filename."
@@ -64897,6 +67033,9 @@ msgid ""
"Reserved_IP_addresses]reserved IP addresses[/url] such as [code]0.0.0.0[/"
"code] as valid."
msgstr ""
+"å¦‚æžœæ­¤å­—ç¬¦ä¸²ä»…åŒ…å«æ ¼å¼æ­£ç¡®çš„ IPv4 或 IPv6 地å€ï¼Œåˆ™è¿”回 [code]true[/code]。该"
+"方法认为[url=https://en.wikipedia.org/wiki/Reserved_IP_addresses]ä¿ç•™IP地å€[/"
+"url]如[code]0.0.0.0[/code]是有效的。"
#: doc/classes/String.xml:464
msgid ""
@@ -64921,6 +67060,10 @@ msgid ""
"trim_prefix] method that will remove a single prefix string rather than a "
"set of characters."
msgstr ""
+"返回该字符串从左侧删除若干字符åŽçš„å‰¯æœ¬ã€‚å‚æ•° [code]chars[/code] ä¸ºåŒ…å«æ‰€éœ€åˆ "
+"除字符的字符串。\n"
+"[b]注æ„:[/b] [code]chars[/code] 䏿˜¯å‰ç¼€ã€‚å¦‚æžœä¸æƒ³åˆ é™¤ä¸€ç»„字符,而是想删除å•"
+"一的å‰ç¼€å­—符串,请å‚阅 [method trim_prefix]。"
#: doc/classes/String.xml:492
msgid ""
@@ -64972,6 +67115,22 @@ msgid ""
"To get a boolean result from a string comparison, use the [code]==[/code] "
"operator instead. See also [method nocasecmp_to] and [method casecmp_to]."
msgstr ""
+"与å¦ä¸€ä¸ªå­—符串进行[i]自然顺åº[/i]比较,ä¸åŒºåˆ†å¤§å°å†™ã€‚å°äºŽæ—¶è¿”回 [code]-1[/"
+"code]ã€å¤§äºŽæ—¶è¿”回 [code]1[/code]ã€ç­‰äºŽæ—¶è¿”回 [code]0[/code]。“å°äºŽâ€å’Œâ€œå¤§äºŽâ€æ¯”"
+"较的是字符串中的 [url=https://zh.wikipedia.org/wiki/Unicode%E5%AD%97%E7%AC"
+"%A6%E5%88%97%E8%A1%A8]Unicode ç ä½[/url],大致与字æ¯è¡¨é¡ºåºä¸€è‡´ã€‚内部实现时,"
+"会将å°å†™å­—符转æ¢ä¸ºå¤§å†™åŽè¿›è¡Œæ¯”较。\n"
+"使用自然顺åºè¿›è¡ŒæŽ’åºæ—¶ï¼Œå¯¹è¿žç»­æ•°å­—的排åºç¬¦åˆå¤§å¤šæ•°äººçš„预期。使用自然顺åºå¯¹ 1 "
+"到 10 进行排åºåŽï¼Œä¼šå¾—到 [code][1, 2, 3, ...][/code] è€Œä¸æ˜¯ [code][1, 10, 2, "
+"3, ...][/code]。\n"
+"[b]字符串长度ä¸åŒæ—¶çš„行为:[/b] “基准â€å­—符串比 [code]to[/code] 字符串长时返"
+"回 [code]-1[/code],“基准â€å­—符串比 [code]to[/code] 字符串短时返回 [code]-1[/"
+"code]ã€‚è¯·æ³¨æ„æ­¤å¤„的长度为 Unicode ç ä½çš„长度,[i]䏿˜¯[/i]实际的å¯è§å­—符。\n"
+"[b]存在空字符串的行为:[/b] “基准â€å­—符串为空时返回 [code]-1[/code],字符串 "
+"[code]to[/code] 为空时返回 [code]1[/code],两者都为空时返回 [code]0[/"
+"code]。\n"
+"如果想在比较字符串时获得布尔型的返回值,请使用 [code]==[/code] è¿ç®—符。å‚阅 "
+"[method casecmp_to]。"
#: doc/classes/String.xml:529
msgid ""
@@ -64992,6 +67151,19 @@ msgid ""
"To get a boolean result from a string comparison, use the [code]==[/code] "
"operator instead. See also [method casecmp_to]."
msgstr ""
+"与å¦ä¸€ä¸ªå­—符串进行比较,ä¸åŒºåˆ†å¤§å°å†™ã€‚å°äºŽæ—¶è¿”回 [code]-1[/code]ã€å¤§äºŽæ—¶è¿”回 "
+"[code]1[/code]ã€ç­‰äºŽæ—¶è¿”回 [code]0[/code]。“å°äºŽâ€å’Œâ€œå¤§äºŽâ€æ¯”较的是字符串中的 "
+"[url=https://zh.wikipedia.org/wiki/Unicode%E5%AD%97%E7%AC"
+"%A6%E5%88%97%E8%A1%A8]Unicode ç ä½[/url],大致与字æ¯è¡¨é¡ºåºä¸€è‡´ã€‚内部实现时,"
+"会将å°å†™å­—符转æ¢ä¸ºå¤§å†™åŽè¿›è¡Œæ¯”较。\n"
+"[b]字符串长度ä¸åŒæ—¶çš„行为:[/b] “基准â€å­—符串比 [code]to[/code] 字符串长时返"
+"回 [code]-1[/code],“基准â€å­—符串比 [code]to[/code] 字符串短时返回 [code]-1[/"
+"code]ã€‚è¯·æ³¨æ„æ­¤å¤„的长度为 Unicode ç ä½çš„长度,[i]䏿˜¯[/i]实际的å¯è§å­—符。\n"
+"[b]存在空字符串的行为:[/b] “基准â€å­—符串为空时返回 [code]-1[/code],字符串 "
+"[code]to[/code] 为空时返回 [code]1[/code],两者都为空时返回 [code]0[/"
+"code]。\n"
+"如果想在比较字符串时获得布尔型的返回值,请使用 [code]==[/code] è¿ç®—符。å‚阅 "
+"[method casecmp_to]。"
#: doc/classes/String.xml:539
msgid "Returns the character code at position [code]at[/code]."
@@ -65040,25 +67212,26 @@ msgstr "返回é‡å¤å¤šæ¬¡çš„原始字符串。é‡å¤æ¬¡æ•°ç”±å‚数给出。"
msgid ""
"Replaces occurrences of a case-sensitive substring with the given one inside "
"the string."
-msgstr "将出现的å­å­—符串替æ¢ä¸ºå­—符串中给定的å­å­—符串(区分大å°å†™)。"
+msgstr "将出现的å­å­—符串替æ¢ä¸ºå­—符串中给定的å­å­—符串,区分大å°å†™ã€‚"
#: doc/classes/String.xml:595
msgid ""
"Replaces occurrences of a case-insensitive substring with the given one "
"inside the string."
-msgstr "将出现的å­å­—符串替æ¢ä¸ºå­—符串中给定的å­å­—符串(ä¸åŒºåˆ†å¤§å°å†™)。"
+msgstr "将出现的å­å­—符串替æ¢ä¸ºå­—符串中给定的å­å­—符串,ä¸åŒºåˆ†å¤§å°å†™ã€‚"
#: doc/classes/String.xml:603
msgid ""
"Performs a case-sensitive search for a substring, but starts from the end of "
"the string instead of the beginning."
-msgstr ""
+msgstr "执行å­å­—符串æœç´¢ï¼ŒåŒºåˆ†å¤§å°å†™ã€‚ä¸è¿‡æ˜¯ä»Žå­—符串末尾开始æœç´¢ï¼Œè€Œä¸æ˜¯å¼€å¤´ã€‚"
#: doc/classes/String.xml:611
msgid ""
"Performs a case-insensitive search for a substring, but starts from the end "
"of the string instead of the beginning."
msgstr ""
+"执行å­å­—符串æœç´¢ï¼Œä¸åŒºåˆ†å¤§å°å†™ã€‚ä¸è¿‡æ˜¯ä»Žå­—符串末尾开始æœç´¢ï¼Œè€Œä¸æ˜¯å¼€å¤´ã€‚"
#: doc/classes/String.xml:618
msgid "Returns the right side of the string from a given position."
@@ -65105,6 +67278,10 @@ msgid ""
"trim_suffix] method that will remove a single suffix string rather than a "
"set of characters."
msgstr ""
+"返回该字符串从å³ä¾§åˆ é™¤è‹¥å¹²å­—符åŽçš„å‰¯æœ¬ã€‚å‚æ•° [code]chars[/code] ä¸ºåŒ…å«æ‰€éœ€åˆ "
+"除字符的字符串。\n"
+"[b]注æ„:[/b] [code]chars[/code] 䏿˜¯åŽç¼€ã€‚å¦‚æžœä¸æƒ³åˆ é™¤ä¸€ç»„字符,而是想删除å•"
+"一的å‰ç¼€å­—符串,请å‚阅 [method trim_suffix]。"
#: doc/classes/String.xml:651
msgid "Returns the SHA-1 hash of the string as an array of bytes."
@@ -65206,16 +67383,14 @@ msgstr ""
"[code]len[/code] 是å¯é€‰çš„,使用 [code]-1[/code] 将返回给定ä½ç½®çš„剩余字符。"
#: doc/classes/String.xml:738
-#, fuzzy
msgid ""
"Converts the String (which is a character array) to [PoolByteArray] (which "
"is an array of bytes). The conversion is faster compared to [method "
"to_utf8], as this method assumes that all the characters in the String are "
"ASCII characters."
msgstr ""
-"å°† String(它是一个字符数组)转æ¢ä¸º [PackedByteArray](它是一个字节数组)。"
-"与 [method to_utf8] 相比,转æ¢é€Ÿåº¦æ›´å¿«ï¼Œå› ä¸ºæ­¤æ–¹æ³•å‡å®š String 中的所有字符都"
-"是 ASCII 字符。"
+"å°† String(字符数组)转æ¢ä¸º [PoolByteArray](字节数组)。与 [method to_utf8] "
+"相比,转æ¢é€Ÿåº¦æ›´å¿«ï¼Œå› ä¸ºæ­¤æ–¹æ³•å‡å®š String 中的所有字符都是 ASCII 字符。"
#: doc/classes/String.xml:744
msgid ""
@@ -65236,14 +67411,13 @@ msgid "Returns the string converted to uppercase."
msgstr "返回转æ¢ä¸ºå¤§å†™çš„字符串。"
#: doc/classes/String.xml:768
-#, fuzzy
msgid ""
"Converts the String (which is an array of characters) to [PoolByteArray] "
"(which is an array of bytes). The conversion is a bit slower than [method "
"to_ascii], but supports all UTF-8 characters. Therefore, you should prefer "
"this function over [method to_ascii]."
msgstr ""
-"将字符串(字符数组)转æ¢ä¸º [PackedByteArray]ï¼ˆå­—èŠ‚æ•°ç»„ï¼‰ã€‚è½¬æ¢æ¯” [method "
+"将字符串(字符数组)转æ¢ä¸º [PoolByteArray]ï¼ˆå­—èŠ‚æ•°ç»„ï¼‰ã€‚è½¬æ¢æ¯” [method "
"to_ascii] æ…¢ä¸€ç‚¹ï¼Œä½†æ”¯æŒæ‰€æœ‰ UTF-8 å­—ç¬¦ã€‚å› æ­¤ï¼Œæ‚¨åº”è¯¥æ›´å–œæ¬¢è¿™ä¸ªå‡½æ•°è€Œä¸æ˜¯ "
"[method to_ascii]。"
@@ -65251,7 +67425,7 @@ msgstr ""
msgid ""
"Converts the String (which is an array of characters) to [PoolByteArray] "
"(which is an array of bytes)."
-msgstr ""
+msgstr "将字符串(字符的数组)转æ¢ä¸º [PoolByteArray](字节的数组)。"
#: doc/classes/String.xml:781
msgid ""
@@ -65266,14 +67440,13 @@ msgid ""
msgstr "å¦‚æžœä»¥ä¸€ä¸ªç»™å®šçš„å­—ç¬¦ä¸²ä¸ºç»“å°¾ï¼Œåˆ™ä»Žè¯¥å­—ç¬¦ä¸²ä¸­åˆ é™¤ï¼Œæˆ–è€…ä¸æ”¹å˜è¯¥å­—符串。"
#: doc/classes/String.xml:794
-#, fuzzy
msgid ""
"Removes any characters from the string that are prohibited in [Node] names "
"([code].[/code] [code]:[/code] [code]@[/code] [code]/[/code] [code]\"[/"
"code])."
msgstr ""
-"è¿”å›žå½“å‰æ—¥æœŸä½œä¸ºé”®çš„å­—å…¸:[code]year[/code], [code]month[/code], [code]day[/"
-"code], [code]weekday[/code], [code]dst[/code](å¤ä»¤æ—¶)。"
+"从字符串中删除所有ä¸å…许在 [Node] å称中出现的字符([code].[/code] [code]:[/"
+"code] [code]@[/code] [code]/[/code] [code]\"[/code])。"
#: doc/classes/String.xml:800
msgid ""
@@ -65292,7 +67465,6 @@ msgid "Base class for drawing stylized boxes for the UI."
msgstr "用于为 UI 绘制风格化框的基类。"
#: doc/classes/StyleBox.xml:7
-#, fuzzy
msgid ""
"StyleBox is [Resource] that provides an abstract base class for drawing "
"stylized boxes for the UI. StyleBoxes are used for drawing the styles of "
@@ -65305,10 +67477,14 @@ msgid ""
"[code]hover[/code] or [code]pressed[/code] [StyleBox]. This makes the "
"[code]focus[/code] [StyleBox] more reusable across different nodes."
msgstr ""
-"StyleBox 是 [Resource],它æä¾›äº†ä¸€ä¸ªæŠ½è±¡åŸºç±»ï¼Œç”¨äºŽä¸º UI 绘制风格化的框。 "
-"StyleBox 用于绘制按钮样å¼ã€çº¿æ¡ç¼–è¾‘èƒŒæ™¯ã€æ ‘背景等,也用于测试指针信å·çš„逿˜ŽæŽ©"
-"ç ã€‚如果在指定为控件的掩ç çš„ StyleBox ä¸Šçš„æŽ©ç æµ‹è¯•失败,点击和è¿åŠ¨ä¿¡å·å°†é€šè¿‡"
-"它传递到下é¢çš„一个。"
+"æ ·å¼ç›’ StyleBox æ˜¯ä¸€ç§ [Resource],它æä¾›äº†ä¸€ä¸ªæŠ½è±¡åŸºç±»ï¼Œç”¨äºŽä¸º UI 绘制风格化"
+"的框。 StyleBox 被用于绘制按钮的样å¼ã€è¡Œç¼–è¾‘æ¡†çš„èƒŒæ™¯ã€æ ‘的背景等,也被用作测"
+"试指针信å·çš„逿˜ŽæŽ©ç ã€‚å°† StyleBox æŒ‡å®šä¸ºæŽ§ä»¶çš„æŽ©ç æ—¶ï¼Œå¦‚æžœåœ¨æŽ©ç æµ‹è¯•失败,点"
+"击和è¿åŠ¨ä¿¡å·å°†é€è¿‡å®ƒä¼ é€’至下层控件。\n"
+"[b]注æ„:[/b] 对于有 [i]主题属性[/i] çš„ [Control] 控件,å为 [code]focus[/"
+"code] çš„ [StyleBox] 会显示在å为 [code]normal[/code]ã€[code]hover[/code]ã€"
+"[code]pressed[/code] 的 [StyleBox]之上。这样的行为有助于 [code]focus[/code] "
+"[StyleBox] 在ä¸åŒèŠ‚ç‚¹ä¸Šå¤ç”¨ã€‚"
#: doc/classes/StyleBox.xml:18
msgid ""
@@ -65346,7 +67522,7 @@ msgstr ""
#: doc/classes/StyleBox.xml:52
msgid "Returns the minimum size that this stylebox can be shrunk to."
-msgstr "返回此StyleBoxå¯ä»¥ç¼©å°åˆ°çš„æœ€å°å°ºå¯¸ã€‚"
+msgstr "返回此样å¼ç›’å¯ä»¥ç¼©å°åˆ°çš„æœ€å°å°ºå¯¸ã€‚"
#: doc/classes/StyleBox.xml:58
msgid ""
@@ -65354,7 +67530,7 @@ msgid ""
"equivalent to [code]Vector2(style.get_margin(MARGIN_LEFT), style."
"get_margin(MARGIN_TOP))[/code]."
msgstr ""
-"è¿”å›žæ ·å¼æ¡†çš„“åç§»é‡â€ã€‚这个辅助函数返回一个等价于 [code]Vector2(style."
+"返回样å¼ç›’的“åç§»é‡â€ã€‚这个辅助函数返回一个等价于 [code]Vector2(style."
"get_margin(MARGIN_LEFT), style.get_margin(MARGIN_TOP))[/code] 的值。"
#: doc/classes/StyleBox.xml:66
@@ -65362,8 +67538,8 @@ msgid ""
"Sets the default value of the specified [enum Margin] to given [code]offset[/"
"code] in pixels."
msgstr ""
-"将指定的 [enum Margin] 的默认值设置为给定的 [code]offset[/code](以åƒç´ ä¸ºå•"
-"ä½ï¼‰ã€‚"
+"将指定 [enum Margin] è¾¹è·çš„默认值设置为给定的 [code]offset[/code],å•ä½ä¸ºåƒ"
+"素。"
#: doc/classes/StyleBox.xml:74
msgid "Test a position in a rectangle, return whether it passes the mask test."
@@ -65383,13 +67559,13 @@ msgid ""
"of reading these properties directly. This is because it correctly respects "
"negative values and the fallback mentioned above."
msgstr ""
-"æ­¤æ ·å¼æ¡†å†…容的底部边è·ã€‚增加此值会å‡å°‘底部内容的å¯ç”¨ç©ºé—´ã€‚\n"
-"如果此值为负,则将其忽略并改为使用特定于å­èŠ‚ç‚¹çš„è¾¹è·ã€‚例如,对于 "
-"[StyleBoxFlat],使用边框厚度(如果有)。\n"
-"ç”±ä½¿ç”¨æ­¤æ ·å¼æ¡†çš„代ç å†³å®šè¿™äº›å†…容是什么:例如,[Button] éµä»ŽæŒ‰é’®æ–‡æœ¬å†…容的此内"
-"容边è·ã€‚\n"
-"[method get_margin] 应该用于作为使用者获å–è¿™ä¸ªå€¼ï¼Œè€Œä¸æ˜¯ç›´æŽ¥è¯»å–这些属性。这"
-"是因为它正确地éµä»Žäº†è´Ÿå€¼å’Œä¸Šè¿°å›žé€€ã€‚"
+"此样å¼ç›’内容的底边è·ã€‚增加此值会从底部å‡å°‘内容的å¯ç”¨ç©ºé—´ã€‚\n"
+"如果此值为负,则将其忽略并改为使用特定于该å­ç±»åž‹çš„è¾¹è·ã€‚例如,对于 "
+"[StyleBoxFlat],(如果有厚度的è¯ï¼‰å°†ä½¿ç”¨è¾¹æ¡†åŽšåº¦ã€‚\n"
+"å†…å®¹æ˜¯ä»€ä¹ˆç”±ä½¿ç”¨æ­¤æ ·å¼æ¡†çš„代ç å†³å®šï¼šä¾‹å¦‚ [Button] 会为其文本内容设置此内容边"
+"è·ã€‚\n"
+"使用者应该通过 [method get_margin] 获å–è¾¹è·ï¼Œè€Œä¸æ˜¯ç›´æŽ¥è¯»å–å•独方å‘上的属性。"
+"这是因为这个函数会正确处ç†è´Ÿå€¼å’Œä¸Šè¿°å¤‡ç”¨é€»è¾‘。"
#: doc/classes/StyleBox.xml:86
msgid ""
@@ -65397,8 +67573,8 @@ msgid ""
"reduces the space available to the contents from the left.\n"
"Refer to [member content_margin_bottom] for extra considerations."
msgstr ""
-"æ­¤stylebox内容的左边è·ã€‚增加此值会å‡å°‘左侧内容的å¯ç”¨ç©ºé—´ã€‚\n"
-"有关é¢å¤–注æ„事项,请å‚阅 [member content_margin_bottom]。"
+"此样å¼ç›’内容的左边è·ã€‚增加此值会从左侧å‡å°‘内容的å¯ç”¨ç©ºé—´ã€‚\n"
+"é¢å¤–的注æ„事项请å‚阅 [member content_margin_bottom]。"
#: doc/classes/StyleBox.xml:90
msgid ""
@@ -65406,8 +67582,8 @@ msgid ""
"reduces the space available to the contents from the right.\n"
"Refer to [member content_margin_bottom] for extra considerations."
msgstr ""
-"æ­¤stylebox内容的å³è¾¹è·ã€‚增加此值会å‡å°‘å³ä¾§å†…容的å¯ç”¨ç©ºé—´ã€‚\n"
-"有关é¢å¤–注æ„事项,请å‚阅 [member content_margin_bottom]。"
+"此样å¼ç›’内容的å³è¾¹è·ã€‚增加此值会从å³ä¾§å‡å°‘内容的å¯ç”¨ç©ºé—´ã€‚\n"
+"é¢å¤–的注æ„事项请å‚阅 [member content_margin_bottom]。"
#: doc/classes/StyleBox.xml:94
msgid ""
@@ -65415,24 +67591,23 @@ msgid ""
"reduces the space available to the contents from the top.\n"
"Refer to [member content_margin_bottom] for extra considerations."
msgstr ""
-"è¿™ä¸ªæ ·å¼æ¡†çš„内容的上边è·ã€‚增加这个值å¯ä»¥å‡å°‘内容从顶部的å¯ç”¨ç©ºé—´ã€‚\n"
-"请å‚考[member content_margin_bottom]以获得é¢å¤–的考虑。"
+"此样å¼ç›’内容的顶边è·ã€‚增加此值会从顶部å‡å°‘内容的å¯ç”¨ç©ºé—´ã€‚\n"
+"é¢å¤–的注æ„事项请å‚阅 [member content_margin_bottom]。"
#: doc/classes/StyleBoxEmpty.xml:4
msgid "Empty stylebox (does not display anything)."
-msgstr "空的StyleBoxï¼ˆä¸æ˜¾ç¤ºä»»ä½•东西)。"
+msgstr "空的样å¼ç›’ï¼ˆä¸æ˜¾ç¤ºä»»ä½•东西)。"
#: doc/classes/StyleBoxEmpty.xml:7
msgid "Empty stylebox (really does not display anything)."
-msgstr "空的StyleBoxï¼ˆçœŸçš„ä¸æ˜¾ç¤ºä»»ä½•东西)。"
+msgstr "空的样å¼ç›’ï¼ˆçœŸçš„ä¸æ˜¾ç¤ºä»»ä½•东西)。"
#: doc/classes/StyleBoxFlat.xml:4
msgid ""
"Customizable [StyleBox] with a given set of parameters (no texture required)."
-msgstr "å¯è‡ªå®šä¹‰ [StyleBox] ä¸Žç»™å®šå‚æ•°é›† (无需纹ç†ï¼‰ 。"
+msgstr "å¯é€šè¿‡ä¸€ç³»åˆ—傿•°è‡ªå®šä¹‰çš„ [StyleBox](无需纹ç†ï¼‰ 。"
#: doc/classes/StyleBoxFlat.xml:7
-#, fuzzy
msgid ""
"This [StyleBox] can be used to achieve all kinds of looks without the need "
"of a texture. The following properties are customizable:\n"
@@ -65455,19 +67630,19 @@ msgid ""
"corner_radius_bottom_left: 20\n"
"[/codeblock]"
msgstr ""
-"这个 [StyleBox] å¯ä»¥ç”¨æ¥å®žçްå„ç§å¤–观,无需纹ç†ã€‚这些属性是å¯å®šåˆ¶çš„:\n"
+"这个 [StyleBox] å¯ä»¥ç”¨æ¥å®žçްå„ç§å¤–观,无需纹ç†ã€‚以下属性是å¯å®šåˆ¶çš„:\n"
"- 颜色\n"
"- 边框宽度(æ¯ä¸ªè¾¹æ¡†çš„å•独宽度)\n"
"- 圆角(æ¯ä¸ªè§’çš„å•独åŠå¾„)\n"
"- 阴影(带有模糊和å移)\n"
-"å…许将æ‹è§’åŠå¾„设置为高值。一旦角é‡å ï¼Œæ ·å¼æ¡†å°†åˆ‡æ¢åˆ°ç›¸å…³ç³»ç»Ÿã€‚例å­ï¼š\n"
+"å…许将圆角åŠå¾„设置为很高的值。两角é‡å æ—¶ï¼Œæ ·å¼ç›’将切æ¢åˆ°ç›¸å¯¹ç³»ç»Ÿã€‚例å­ï¼š\n"
"[codeblock]\n"
"height = 30\n"
"corner_radius_top_left = 50\n"
"corner_radius_bottom_left = 100\n"
"[/codeblock]\n"
-"相关系统现在将采用两个左角的 1:2 比率æ¥è®¡ç®—实际角宽度。添加的两个角将 [b] æ°¸"
-"远 [/b] ä¸ä¼šè¶…过高度。结果:\n"
+"相对系统现在将采用两个左角的 1:2 比率æ¥è®¡ç®—实际角宽度。添加的两个角[b]永远[/"
+"b]ä¸ä¼šè¶…过高度。结果:\n"
"[codeblock]\n"
"corner_radius_top_left: 10\n"
"corner_radius_bottom_left: 20\n"
@@ -65555,7 +67730,6 @@ msgstr ""
"[code]size_right[/code] å’Œ [code]size_bottom[/code] åƒç´ ã€‚"
#: doc/classes/StyleBoxFlat.xml:122
-#, fuzzy
msgid ""
"Antialiasing draws a small ring around the edges, which fades to "
"transparency. As a result, edges look much smoother. This is only noticeable "
@@ -65565,8 +67739,11 @@ msgid ""
"[code]false[/code] to ensure crisp visuals and avoid possible visual "
"glitches."
msgstr ""
-"抗锯齿在边缘周围绘制一个å°çŽ¯ï¼Œå®ƒé€æ¸å˜é€æ˜Žã€‚最åŽè¾¹ç¼˜çœ‹èµ·æ¥ä¼šæ›´åŠ å¹³æ»‘ã€‚è¿™ä»…åœ¨"
-"ä½¿ç”¨åœ†è§’æ—¶æ‰æ˜Žæ˜¾ã€‚"
+"抗锯齿会在边缘周围绘制一个æ¸å˜åˆ°é€æ˜Žçš„å°çŽ¯ã€‚å› æ­¤è¾¹ç¼˜çœ‹èµ·æ¥ä¼šæ›´åŠ å¹³æ»‘ã€‚è¿™ä»…åœ¨"
+"ä½¿ç”¨åœ†è§’æ—¶æ‰æ˜Žæ˜¾ã€‚\n"
+"[b]注æ„:[/b] 使用 45 度倒角([member corner_detail] = 1)时,建议将 [member "
+"anti_aliasing] 设为 [code]false[/code],这样å¯ä»¥ä¿è¯ç”»é¢é”利ã€é¿å…一些显示问"
+"题。"
#: doc/classes/StyleBoxFlat.xml:126
msgid ""
@@ -65603,7 +67780,6 @@ msgid "Border width for the top border."
msgstr "顶部边框的宽度。"
#: doc/classes/StyleBoxFlat.xml:150
-#, fuzzy
msgid ""
"This sets the number of vertices used for each corner. Higher values result "
"in rounder corners but take more processing power to compute. When choosing "
@@ -65615,12 +67791,11 @@ msgid ""
"A corner detail of [code]1[/code] will result in chamfered corners instead "
"of rounded corners, which is useful for some artistic effects."
msgstr ""
-"这将设置用于æ¯ä¸ªè§’的顶点数é‡ã€‚æ›´é«˜çš„å€¼ä¼šå½¢æˆæ›´åœ†çš„è§’ï¼Œä½†éœ€è¦æ›´å¤šçš„处ç†èƒ½åŠ›æ¥"
-"计算。选择值时,应考虑角åŠå¾„([method set_corner_radius_all])。\n"
-"对于å°äºŽ 10 的角åŠå¾„,[code]4[/code] 或 [code]5[/code] 应该就足够了。对于å°"
-"于 30 的角åŠå¾„,[code]8[/code] å’Œ [code]12[/code] 之间的值应该足够了。\n"
-"[code]1[/code]çš„corner detail ä¼šå¯¼è‡´å€’è§’è€Œä¸æ˜¯åœ†è§’,这对于æŸäº›è‰ºæœ¯æ•ˆæžœå¾ˆæœ‰"
-"用。"
+"设置用于æ¯ä¸ªè§’çš„é¡¶ç‚¹æ•°ã€‚æ›´é«˜çš„å€¼ç”Ÿæˆæ›´åœ†çš„è§’ï¼Œä½†éœ€è¦æ›´å¤šçš„处ç†è®¡ç®—。选择值"
+"时,应考虑角åŠå¾„([method set_corner_radius_all])。\n"
+"对于å°äºŽ 10 的角åŠå¾„,[code]4[/code] 或 [code]5[/code] 应该就足够。对于å°äºŽ "
+"30 的角åŠå¾„,[code]8[/code] å’Œ [code]12[/code] 之间的值应该足够。\n"
+"[code]1[/code]çš„è§’ç»†èŠ‚ä¼šå¯¼è‡´å€’è§’è€Œä¸æ˜¯åœ†è§’,这对于æŸäº›è‰ºæœ¯æ•ˆæžœå¾ˆæœ‰ç”¨ã€‚"
#: doc/classes/StyleBoxFlat.xml:155
msgid ""
@@ -65869,7 +68044,7 @@ msgstr ""
#: doc/classes/StyleBoxTexture.xml:103
msgid "Modulates the color of the texture when this style box is drawn."
-msgstr "ç»˜åˆ¶æ­¤æ ·å¼æ¡†æ—¶è°ƒåˆ¶çº¹ç†çš„颜色。"
+msgstr "绘制此样å¼ç›’时用于调制纹ç†çš„颜色。"
#: doc/classes/StyleBoxTexture.xml:106
msgid ""
@@ -65879,10 +68054,11 @@ msgid ""
"Normal_Map_Technical_Details#Common_Swizzle_Coordinates]this page[/url] for "
"a comparison of normal map coordinates expected by popular engines."
msgstr ""
-"绘制此StyleBox时使用的法线贴图。\n"
-"[b]注:[/b] Godot 期望法线贴图使用 X+ã€Y- å’Œ Z+ åæ ‡ã€‚å‚阅[url=http://wiki."
-"polycount.com/wiki/Normal_Map_Technical_Details#Common_Swizzle_Coordinates]è¿™"
-"个页é¢[/url] 比较æµè¡Œå¼•æ“Žæ‰€æœŸæœ›çš„æ³•çº¿åœ°å›¾åæ ‡ã€‚"
+"绘制此样å¼ç›’时使用的法线贴图。\n"
+"[b]注æ„:[/b] Godot 期望法线贴图使用 X+ã€Y- å’Œ Z+ åæ ‡ç³»ã€‚å‚阅[url=http://"
+"wiki.polycount.com/wiki/"
+"Normal_Map_Technical_Details#Common_Swizzle_Coordinates]这个页é¢[/url]比较æµ"
+"è¡Œå¼•æ“Žæ‰€æœŸæœ›çš„æ³•çº¿è´´å›¾åæ ‡ç³»ã€‚"
#: doc/classes/StyleBoxTexture.xml:110
msgid ""
@@ -65895,24 +68071,24 @@ msgstr ""
#: doc/classes/StyleBoxTexture.xml:114
msgid "The texture to use when drawing this style box."
-msgstr "绘制此Styleæ—¶è¦ä½¿ç”¨çš„纹ç†ã€‚"
+msgstr "绘制此样å¼ç›’时所使用的纹ç†ã€‚"
#: doc/classes/StyleBoxTexture.xml:120
msgid "Emitted when the stylebox's texture is changed."
-msgstr "当stylebox的纹ç†è¢«æ”¹å˜æ—¶å‘出。"
+msgstr "当样å¼ç›’的纹ç†è¢«æ”¹å˜æ—¶å‘出。"
#: doc/classes/StyleBoxTexture.xml:126
msgid ""
"Stretch the stylebox's texture. This results in visible distortion unless "
"the texture size matches the stylebox's size perfectly."
msgstr ""
-"æ‹‰ä¼¸æ ·å¼æ¡†çš„纹ç†ã€‚这会导致å¯è§çš„失真,除éžçº¹ç†å¤§å°ä¸Žæ ·å¼æ¡†çš„大å°å®Œç¾ŽåŒ¹é…。"
+"拉伸样å¼ç›’的纹ç†ã€‚这会导致å¯è§çš„失真,除éžçº¹ç†å¤§å°ä¸Žæ ·å¼ç›’的大å°å®Œç¾ŽåŒ¹é…。"
#: doc/classes/StyleBoxTexture.xml:129
msgid ""
"Repeats the stylebox's texture to match the stylebox's size according to the "
"nine-patch system."
-msgstr "æ ¹æ®ä¹å®«æ ¼ï¼Œé‡å¤æ ·å¼æ¡†çš„纹ç†ï¼Œä»¥åŒ¹é…æ ·å¼æ¡†çš„大å°ã€‚"
+msgstr "æ ¹æ®ä¹å®«æ ¼ç³»ç»Ÿï¼Œé‡å¤æ ·å¼ç›’的纹ç†ï¼Œä»¥åŒ¹é…æ ·å¼ç›’的大å°ã€‚"
#: doc/classes/StyleBoxTexture.xml:132
msgid ""
@@ -65920,15 +68096,14 @@ msgid ""
"nine-patch system. Unlike [constant AXIS_STRETCH_MODE_TILE], the texture may "
"be slightly stretched to make the nine-patch texture tile seamlessly."
msgstr ""
-"æ ¹æ®ä¹å®«æ ¼é‡å¤æ ·å¼æ¡†çš„纹ç†ä»¥åŒ¹é…æ ·å¼æ¡†çš„大å°ã€‚与 [constant "
-"AXIS_STRETCH_MODE_TILE] ä¸åŒï¼Œçº¹ç†å¯èƒ½ä¼šç¨å¾®æ‹‰ä¼¸ä»¥ä½¿ä¹å®«æ ¼çº¹ç†å¹³é“ºæ— ç¼ã€‚"
+"æ ¹æ®ä¹å®«æ ¼ç³»ç»Ÿï¼Œé‡å¤æ ·å¼ç›’的纹ç†ï¼Œä»¥åŒ¹é…æ ·å¼ç›’的大å°ã€‚与 [constant "
+"AXIS_STRETCH_MODE_TILE] ä¸åŒï¼Œå¯èƒ½ä¼šç¨å¾®æ‹‰ä¼¸çº¹ç†ä»¥ä½¿ä¹å®«æ ¼çº¹ç†å¹³é“ºæ— ç¼ã€‚"
#: doc/classes/SurfaceTool.xml:4
msgid "Helper tool to create geometry."
msgstr "创建几何图形的辅助工具。"
#: doc/classes/SurfaceTool.xml:7
-#, fuzzy
msgid ""
"The [SurfaceTool] is used to construct a [Mesh] by specifying vertex "
"attributes individually. It can be used to construct a [Mesh] from a script. "
@@ -65957,9 +68132,9 @@ msgid ""
"OpenGL/Face-culling]winding order[/url] for front faces of triangle "
"primitive modes."
msgstr ""
-"[SurfaceTool] 用于通过å•ç‹¬æŒ‡å®šé¡¶ç‚¹å±žæ€§æ¥æž„建 [Mesh]。它å¯ç”¨äºŽä»Žè„šæœ¬æž„å»º "
-"[Mesh]。在调用 [method add_vertex] 之å‰ï¼Œéœ€è¦æ·»åŠ é™¤ç´¢å¼•ä»¥å¤–çš„æ‰€æœ‰å±žæ€§ã€‚ä¾‹å¦‚ï¼Œ"
-"è¦æ·»åŠ é¡¶ç‚¹é¢œè‰²å’Œ UV:\n"
+"[SurfaceTool] 用于通过å•ç‹¬æŒ‡å®šé¡¶ç‚¹å±žæ€§æ¥æž„造[Mesh]。å¯ä»¥ç”¨æ¥ä»Žè„šæœ¬ä¸­æž„é€ "
+"[Mesh]。在调用[method add_vertex]之å‰ï¼Œéœ€è¦æ·»åŠ é™¤ç´¢å¼•ä¹‹å¤–çš„æ‰€æœ‰å±žæ€§ã€‚ä¾‹å¦‚ï¼Œæ·»"
+"加顶点颜色和UV。\n"
"[codeblock]\n"
"var st = SurfaceTool.new()\n"
"st.begin(Mesh.PRIMITIVE_TRIANGLES)\n"
@@ -65967,25 +68142,25 @@ msgstr ""
"st.add_uv(Vector2(0, 0))\n"
"st.add_vertex(Vector3(0, 0, 0))\n"
"[/codeblock]\n"
-"上é¢çš„ [SurfaceTool] 现在包å«ä¸€ä¸ªä¸‰è§’形的顶点,它具有 UV åæ ‡å’ŒæŒ‡å®šçš„ "
-"[Color]。如果在没有调用 [method add_uv] 或 [method add_color] 的情况下添加了"
-"å¦ä¸€ä¸ªé¡¶ç‚¹ï¼Œåˆ™å°†ä½¿ç”¨æœ€åŽä¸€ä¸ªå€¼ã€‚\n"
-"顶点属性必须在调用[method add_vertex][b]之å‰[/b]传递[b]。如果ä¸è¿™æ ·åšï¼Œå°†åœ¨å°†"
-"é¡¶ç‚¹ä¿¡æ¯æäº¤åˆ°ç½‘æ ¼æ—¶ä¼šå¯¼è‡´é”™è¯¯ã€‚\n"
-"此外,在添加第一个顶点之å‰ä½¿ç”¨çš„属性决定了网格的格å¼ã€‚例如,如果仅å‘第一个顶"
-"点添加 UV,则无法å‘任何åŽç»­é¡¶ç‚¹æ·»åŠ é¢œè‰²ã€‚\n"
-"å¦è¯·å‚阅 [ArrayMesh]ã€[ImmediateGeometry3D] å’Œ [MeshDataTool] 以了解程åºå‡ ä½•"
-"生æˆã€‚\n"
-"[b]注æ„:[/b]Godot使用顺时针[url=https://learnopengl.com/Advanced-OpenGL/"
-"Face-culling]缠绕顺åº[/url]用于三角形基元模å¼çš„æ­£é¢ã€‚"
+"上é¢çš„[SurfaceTool]现在包å«äº†ä¸€ä¸ªä¸‰è§’形的顶点,它有UVåæ ‡å’ŒæŒ‡å®šçš„[Color]。如"
+"果在没有调用[method add_uv]或[method add_color]的情况下添加å¦ä¸€ä¸ªé¡¶ç‚¹ï¼Œé‚£ä¹ˆå°±"
+"会使用最åŽçš„值。\n"
+"顶点属性必须在调用[method add_vertex][b]之å‰[/b]传递。如果ä¸è¿™æ ·åšï¼Œåœ¨æäº¤é¡¶"
+"点信æ¯åˆ°ç½‘格时将会导致错误。\n"
+"此外,在添加第一个顶点之å‰ä½¿ç”¨çš„属性决定了网格的格å¼ã€‚例如,如果你åªä¸ºç¬¬ä¸€ä¸ª"
+"顶点添加 UV,你就ä¸èƒ½ä¸ºä»»ä½•åŽç»­çš„顶点添加颜色。\n"
+"å‚阅[ArrayMesh]ã€[ImmediateGeometry]å’Œ[MeshDataTool]ä»¥äº†è§£ç¨‹åºæ€§å‡ ä½•体的生"
+"æˆã€‚\n"
+"[b]注æ„:[/b] Godot对三角形基本模å¼çš„æ­£é¢ä½¿ç”¨é¡ºæ—¶é’ˆ[url=https://learnopengl."
+"com/Advanced-OpenGL/Face-culling]缠绕顺åº[/url]。"
#: doc/classes/SurfaceTool.xml:29
-#, fuzzy
msgid ""
"Specifies an array of bones to use for the [i]next[/i] vertex. [code]bones[/"
"code] must contain 4 integers."
msgstr ""
-"为下一个è¦ä½¿ç”¨çš„顶点添加一组骨骼。 [code]bones[/code] å¿…é¡»åŒ…å« 4 个整数。"
+"指定[i]下一个[/i]顶点所使用的骨骼数组。 [code]bones[/code] å¿…é¡»åŒ…å« 4 个整"
+"数。"
#: doc/classes/SurfaceTool.xml:36
msgid ""
@@ -65995,6 +68170,10 @@ msgid ""
"[b]Note:[/b] The material must have [member SpatialMaterial."
"vertex_color_use_as_albedo] enabled for the vertex color to be visible."
msgstr ""
+"指定[i]下一个[/i]顶点所使用的 [Color]。如果æ¯ä¸ªé¡¶ç‚¹éƒ½éœ€è¦è®¾ç½®æ­¤ä¿¡æ¯ï¼Œè€Œæ‚¨æœªèƒ½"
+"为第一个顶点æäº¤æ­¤ä¿¡æ¯ï¼Œæ­¤ä¿¡æ¯å¯èƒ½æ ¹æœ¬å°±ä¸ä¼šè¢«ä½¿ç”¨ã€‚\n"
+"[b]注æ„:[/b]æè´¨å¿…é¡»å¯ç”¨[member SpatialMaterial.vertex_color_use_as_albedo]"
+"æ‰èƒ½ä½¿é¡¶ç‚¹é¢œè‰²å¯è§ã€‚"
#: doc/classes/SurfaceTool.xml:44
msgid ""
@@ -66008,6 +68187,8 @@ msgid ""
"to have this information set and you fail to submit it for the first vertex, "
"this information may not be used at all."
msgstr ""
+"指定[i]下一个[/i]顶点所使用的法线。如果æ¯ä¸ªé¡¶ç‚¹éƒ½éœ€è¦è®¾ç½®æ­¤ä¿¡æ¯ï¼Œè€Œä½ æ²¡æœ‰ä¸ºç¬¬"
+"一个顶点æäº¤ï¼Œåˆ™å¯èƒ½æ ¹æœ¬æ— æ³•使用此信æ¯ã€‚"
#: doc/classes/SurfaceTool.xml:58
msgid ""
@@ -66024,6 +68205,8 @@ msgid ""
"to have this information set and you fail to submit it for the first vertex, "
"this information may not be used at all."
msgstr ""
+"指定[i]下一个[/i]顶点所使用的切线。如果æ¯ä¸ªé¡¶ç‚¹éƒ½éœ€è¦è®¾ç½®æ­¤ä¿¡æ¯ï¼Œè€Œä½ æ²¡æœ‰ä¸ºç¬¬"
+"一个顶点æäº¤ï¼Œåˆ™å¯èƒ½æ ¹æœ¬æ— æ³•使用此信æ¯ã€‚"
#: doc/classes/SurfaceTool.xml:77
msgid ""
@@ -66039,6 +68222,8 @@ msgid ""
"every vertex needs to have this information set and you fail to submit it "
"for the first vertex, this information may not be used at all."
msgstr ""
+"指定[i]下一个[/i]顶点所使用的 UV åæ ‡ã€‚如果æ¯ä¸ªé¡¶ç‚¹éƒ½éœ€è¦è®¾ç½®æ­¤ä¿¡æ¯ï¼Œè€Œæ‚¨æœªèƒ½"
+"为第一个顶点æäº¤æ­¤ä¿¡æ¯ï¼Œæ­¤ä¿¡æ¯å¯èƒ½æ ¹æœ¬å°±ä¸ä¼šè¢«ä½¿ç”¨ã€‚"
#: doc/classes/SurfaceTool.xml:92
msgid ""
@@ -66046,6 +68231,8 @@ msgid ""
"i] vertex. If every vertex needs to have this information set and you fail "
"to submit it for the first vertex, this information may not be used at all."
msgstr ""
+"指定å¯é€‰çš„第二组UVåæ ‡ï¼Œç”¨äºŽ[i]next[/i]顶点。如果æ¯ä¸ªé¡¶ç‚¹éƒ½éœ€è¦è®¾ç½®è¿™ä¸ªä¿¡æ¯ï¼Œ"
+"而你没有为第一个顶点æäº¤è¿™ä¸ªä¿¡æ¯ï¼Œæ­¤ä¿¡æ¯å¯èƒ½æ ¹æœ¬å°±ä¸ä¼šè¢«ä½¿ç”¨ã€‚"
#: doc/classes/SurfaceTool.xml:99
msgid ""
@@ -66060,14 +68247,22 @@ msgid ""
"set and you fail to submit it for the first vertex, this information may not "
"be used at all."
msgstr ""
+"指定[i]下一个[/i]顶点所使用的æƒé‡å€¼ã€‚ [code]weights[/code] å¿…é¡»åŒ…å« 4 个值。"
+"如果æ¯ä¸ªé¡¶ç‚¹éƒ½éœ€è¦è®¾ç½®æ­¤ä¿¡æ¯ï¼Œè€Œæ‚¨æœªèƒ½ä¸ºç¬¬ä¸€ä¸ªé¡¶ç‚¹æäº¤æ­¤ä¿¡æ¯ï¼Œæ­¤ä¿¡æ¯å¯èƒ½æ ¹æœ¬"
+"å°±ä¸ä¼šè¢«ä½¿ç”¨ã€‚"
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
-msgstr "将给定 [Mesh] 表é¢çš„顶点附加到具有指定 [Transform] 的当å‰é¡¶ç‚¹æ•°ç»„。"
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
+msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
@@ -66075,12 +68270,11 @@ msgstr ""
"在添加任何顶点之å‰è¢«è°ƒç”¨ã€‚æŽ¥æ”¶åŽŸå§‹ç±»åž‹ä½œä¸ºå‚æ•°ï¼ˆä¾‹å¦‚:原始三角形[constant "
"Mesh.PRIMITIVE_TRIANGLES])。"
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr "清除到目å‰ä¸ºæ­¢ä¼ å…¥è¡¨é¢å·¥å…·(surface tool)的所有信æ¯ã€‚"
-#: doc/classes/SurfaceTool.xml:136
-#, fuzzy
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -66091,11 +68285,13 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
"从传入的当å‰ä¿¡æ¯è¿”回构造的 [ArrayMesh]。如果现有的 [ArrayMesh] ä½œä¸ºå‚æ•°ä¼ å…¥ï¼Œ"
-"则会å‘现有的 [ArrayMesh] 添加é¢å¤–的表é¢ã€‚\n"
-"默认标志是 [constant Mesh.ARRAY_COMPRESS_DEFAULT]。有关其他标志,请å‚阅 "
-"[enum Mesh.ArrayFormat] 中的 [code]ARRAY_COMPRESS_*[/code] 常é‡ã€‚"
+"则会å‘现有的 [ArrayMesh] 添加é¢å¤–çš„é¢ã€‚\n"
+"如果å¯ç”¨åŽ‹ç¼©ï¼Œåˆ™é»˜è®¤æ ‡å¿—ä¸º [constant Mesh.ARRAY_COMPRESS_DEFAULT]。如果ç¦ç”¨åŽ‹"
+"缩,则默认标志为 [constant Mesh.ARRAY_FLAG_USE_OCTAHEDRAL_COMPRESSION]。有关"
+"其他标志,å‚阅 [enum Mesh.ArrayFormat] 中的 [code]ARRAY_COMPRESS_*[/code] 常"
+"é‡ã€‚"
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
@@ -66104,11 +68300,11 @@ msgstr ""
"å°†æ•°æ®æäº¤ç»™[method ArrayMesh.add_surface_from_arrays]ä½¿ç”¨çš„ç›¸åŒæ ¼å¼ã€‚这样你"
"å°±å¯ä»¥ä½¿ç”¨[ArrayMesh]çš„API接å£è¿›ä¸€æ­¥å¤„ç†ç½‘格数æ®ã€‚"
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr "从现有的网格 [Mesh] 创建一个顶点数组。"
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
@@ -66116,11 +68312,11 @@ msgstr ""
"从现有 [Mesh] 的指定混åˆå½¢çŠ¶åˆ›å»ºä¸€ä¸ªé¡¶ç‚¹æ•°ç»„ã€‚è¿™å¯ç”¨äºŽä»Žæ··åˆå½¢çж䏭æå–特定姿"
"势。"
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr "通过扩展顶点数组移除索引数组。"
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -66131,38 +68327,45 @@ msgid ""
"[b]Note:[/b] [method generate_normals] only works if the primitive type to "
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
+"ä»Žé¡¶ç‚¹ç”Ÿæˆæ³•线,因此您ä¸å¿…手动执行。如果 [code]flip[/code] 为 [code]true[/"
+"code],则生æˆçš„æ³•线将被å转。 [method generate_normals] 应在生æˆå‡ ä½•体[i]之åŽ"
+"[/i] 调用,在[i]之å‰[/i]使用 [method commit] 或 [method commit_to_arrays] æ"
+"交网格。为了正确显示法线贴图表é¢ï¼Œæ‚¨è¿˜å¿…须使用 [method generate_tangents] 生"
+"æˆåˆ‡çº¿ã€‚\n"
+"[b]注æ„:[/b] [method generate_normals] 仅当基本类型设置为 [constant Mesh."
+"PRIMITIVE_TRIANGLES] æ—¶æ‰æœ‰æ•ˆã€‚"
-#: doc/classes/SurfaceTool.xml:180
-#, fuzzy
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
-msgstr "为æ¯ä¸ªé¡¶ç‚¹ç”Ÿæˆä¸€ä¸ªåˆ‡å‘é‡ã€‚è¦æ±‚æ¯ä¸ªé¡¶ç‚¹éƒ½å·²ç»è®¾ç½®äº† UV 和法线。"
+msgstr ""
+"为æ¯ä¸ªé¡¶ç‚¹ç”Ÿæˆåˆ‡å‘é‡ã€‚è¦æ±‚æ¯ä¸ªé¡¶ç‚¹å·²ç»è®¾ç½®äº† UV 和法线,å‚阅 [method "
+"generate_normals]。"
-#: doc/classes/SurfaceTool.xml:186
-#, fuzzy
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
-msgstr "通过创建索引阵列(é¿å…é‡å¤ä½¿ç”¨é¡¶ç‚¹ï¼‰æ”¶ç¼©é¡¶ç‚¹é˜µåˆ—。"
+msgstr "通过创建索引数组æ¥ç¼©å°é¡¶ç‚¹æ•°ç»„。这å¯ä»¥é¿å…顶点é‡å¤è€Œæé«˜æ€§èƒ½ã€‚"
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr "设置è¦ç”±æ‚¨æ­£åœ¨æž„建的 [Mesh] 使用的 [Material]。"
#: doc/classes/TabContainer.xml:4
msgid "Tabbed container."
-msgstr "标签容器。"
+msgstr "选项å¡å®¹å™¨ã€‚"
#: doc/classes/TabContainer.xml:7
-#, fuzzy
msgid ""
"Sets the active tab's [code]visible[/code] property to the value [code]true[/"
"code]. Sets all other children's to [code]false[/code].\n"
"Ignores non-[Control] children."
msgstr ""
-"当剿 ‡ç­¾ç´¢å¼•。设置åŽï¼Œæ­¤ç´¢å¼•çš„ [Control] 节点的 [code]visible[/code] 属性设置"
-"为 [code]true[/code],其他所有设置为 [code]false[/code]。"
+"将活动选项å¡çš„ [code]visible[/code] 属性设为 [code]true[/code],其它所有å­èŠ‚"
+"点则设为 [code]false[/code]。\n"
+"ä¼šå¿½ç•¥éž [Control] å­èŠ‚ç‚¹ã€‚"
#: doc/classes/TabContainer.xml:16
msgid "Returns the child [Control] node located at the active tab index."
@@ -66176,10 +68379,13 @@ msgid ""
"may cause a crash. If you wish to hide it or any of its children, use their "
"[member CanvasItem.visible] property."
msgstr ""
+"如果已通过 [method set_popup] 设置 [Popup] 节点实例,则返回该实例。\n"
+"[b]警告:[/b] 该节点为必è¦çš„内部节点,将其移除或释放å¯èƒ½é€ æˆå´©æºƒã€‚如果你希望"
+"将其或其å­èŠ‚ç‚¹éšè—,请使用对应节点的 [member CanvasItem.visible] 属性。"
#: doc/classes/TabContainer.xml:29 doc/classes/Tabs.xml:36
msgid "Returns the previously active tab index."
-msgstr "返回以å‰å·²æ¿€æ´»çš„选项å¡ç´¢å¼•。"
+msgstr "返回上一个活动选项å¡çš„索引。"
#: doc/classes/TabContainer.xml:36
msgid "Returns the [Control] node from the tab at index [code]tab_idx[/code]."
@@ -66197,20 +68403,18 @@ msgstr ""
"如果索引 [code]tab_idx[/code] 处的选项å¡è¢«ç¦ç”¨ï¼Œåˆ™è¿”回 [code]true[/code]。"
#: doc/classes/TabContainer.xml:56
-#, fuzzy
msgid ""
"Returns [code]true[/code] if the tab at index [code]tab_idx[/code] is hidden."
msgstr ""
-"如果索引 [code]tab_idx[/code] 处的选项å¡è¢«ç¦ç”¨ï¼Œåˆ™è¿”回 [code]true[/code]。"
+"如果索引 [code]tab_idx[/code] 处的选项å¡è¢«éšè—,则返回 [code]true[/code]。"
#: doc/classes/TabContainer.xml:63 doc/classes/Tabs.xml:62
-#, fuzzy
msgid ""
"Returns the [Texture] for the tab at index [code]tab_idx[/code] or "
"[code]null[/code] if the tab has no [Texture]."
msgstr ""
-"å¦‚æžœé€‰é¡¹å¡æ²¡æœ‰ [Texture2D],则返回索引 [code]tab_idx[/code] 或 [code]null[/"
-"code] 处的选项å¡çš„ [Texture2D]。"
+"返回索引 [code]tab_idx[/code] 处选项å¡çš„ [Texture]ï¼Œå¦‚æžœè¯¥é€‰é¡¹å¡æ²¡æœ‰ "
+"[Texture] çš„è¯åˆ™è¿”回 [code]null[/code]。"
#: doc/classes/TabContainer.xml:70
msgid ""
@@ -66218,6 +68422,8 @@ msgid ""
"Returns [code]-1[/code] if the point is outside the control boundaries or if "
"there's no tab at the queried position."
msgstr ""
+"返回ä½äºŽæœ¬åœ°å标点 [code]point[/code] 处的选项å¡çš„索引。如果该点ä½äºŽæŽ§ä»¶èŒƒå›´"
+"外或者请求ä½ç½®æ²¡æœ‰é€‰é¡¹å¡ï¼Œåˆ™è¿”回 [code]-1[/code]。"
#: doc/classes/TabContainer.xml:77
msgid ""
@@ -66241,52 +68447,49 @@ msgstr ""
"图标。å•击它会展开 [Popup] 节点。"
#: doc/classes/TabContainer.xml:98 doc/classes/Tabs.xml:118
-#, fuzzy
msgid ""
"If [code]disabled[/code] is [code]true[/code], disables the tab at index "
"[code]tab_idx[/code], making it non-interactable."
msgstr ""
-"如果索引 [code]tab_idx[/code] 处的选项å¡è¢«ç¦ç”¨ï¼Œåˆ™è¿”回 [code]true[/code]。"
+"如果 [code]disabled[/code] 是 [code]true[/code],则ç¦ç”¨ç´¢å¼• [code]tab_idx[/"
+"code] 处的选项å¡ï¼Œä½¿å…¶ä¸å¯äº¤äº’。"
#: doc/classes/TabContainer.xml:106
-#, fuzzy
msgid ""
"If [code]hidden[/code] is [code]true[/code], hides the tab at index "
"[code]tab_idx[/code], making it disappear from the tab area."
msgstr ""
-"如果索引 [code]tab_idx[/code] 处的选项å¡è¢«ç¦ç”¨ï¼Œåˆ™è¿”回 [code]true[/code]。"
+"如果 [code]hidden[/code] 为 [code]true[/code],éšè—ä½äºŽç´¢å¼• [code]tab_idx[/"
+"code] 的选项å¡ï¼Œè®©å®ƒä»Žé€‰é¡¹å¡åŒºåŸŸæ¶ˆå¤±ã€‚"
#: doc/classes/TabContainer.xml:114
msgid "Sets an icon for the tab at index [code]tab_idx[/code]."
msgstr "为索引 [code]tab_idx[/code] 处的选项å¡è®¾ç½®å›¾æ ‡ã€‚"
#: doc/classes/TabContainer.xml:122
-#, fuzzy
msgid ""
"Sets a title for the tab at index [code]tab_idx[/code]. Tab titles default "
"to the name of the indexed child node."
msgstr ""
-"为索引 [code]tab_idx[/code] 处的选项å¡è®¾ç½®æ ‡é¢˜ã€‚标签标题默认为索引å­èŠ‚ç‚¹çš„å"
-"称,但这å¯ä»¥ç”¨ [method set_tab_title] 覆盖。"
+"为索引 [code]tab_idx[/code] 处的选项å¡è®¾ç½®æ ‡é¢˜ã€‚选项塿 ‡é¢˜é»˜è®¤ä¸ºç´¢å¼•å­èŠ‚ç‚¹çš„"
+"å称。"
#: doc/classes/TabContainer.xml:129
-#, fuzzy
msgid ""
"Defines rearrange group id, choose for each [TabContainer] the same value to "
"enable tab drag between [TabContainer]. Enable drag with [member "
"drag_to_rearrange_enabled]."
msgstr ""
-"å®šä¹‰é‡æ–°æŽ’列组id,为æ¯ä¸ª[TabContainer]选择相åŒçš„值以å¯ç”¨[TabContainer]之间的"
-"标签拖动。使用 [code]set_drag_to_rearrange_enabled(true)[/code] å¯ç”¨æ‹–动。"
+"å®šä¹‰é‡æŽ’ç»„çš„ç¼–å·ã€‚为ä¸åŒ [TabContainer] 设置相åŒçš„值,å¯ä»¥å…许选项å¡åœ¨è¿™äº› "
+"[TabContainer] 之间拖放。通过 [member drag_to_rearrange_enabled] å¯ç”¨æ‹–放。"
#: doc/classes/TabContainer.xml:135
-#, fuzzy
msgid ""
"If [code]true[/code], all tabs are drawn in front of the panel. If "
"[code]false[/code], inactive tabs are drawn behind the panel."
msgstr ""
-"如果 [code]true[/code],选项å¡å¯è§ã€‚如果 [code]false[/code],选项å¡çš„内容和标"
-"题被éšè—。"
+"如果为 [code]true[/code],所有选项å¡éƒ½ä¼šè¢«ç»˜åˆ¶åœ¨é¢æ¿ä¹‹å‰ã€‚如果为 "
+"[code]false[/code],未激活的选项å¡ä¼šè¢«ç»˜åˆ¶åœ¨é¢æ¿ä¹‹åŽã€‚"
#: doc/classes/TabContainer.xml:138
msgid ""
@@ -66694,7 +68897,7 @@ msgid ""
"Centers the viewport on the line the editing cursor is at. This also resets "
"the [member scroll_horizontal] value to [code]0[/code]."
msgstr ""
-"将视å£ç½®äºŽç¼–辑光标所在的线上。这也会将 [member scroll_horizontal] 值é‡ç½®ä¸º "
+"将视窗置于编辑光标所在的线上。这也会将 [member scroll_horizontal] 值é‡ç½®ä¸º "
"[code]0[/code]。"
#: doc/classes/TextEdit.xml:47
@@ -66728,7 +68931,7 @@ msgid ""
"will center at the cursor position after the move occurs."
msgstr ""
"将光标移动到指定的 [code] column [/code] 索引处。\n"
-"如果 [code]adjust_viewport[/code] 设置为 [code]true[/code],则移动å‘生åŽè§†å£"
+"如果 [code]adjust_viewport[/code] 设置为 [code]true[/code],则移动å‘生åŽè§†çª—"
"将以光标ä½ç½®ä¸ºä¸­å¿ƒã€‚"
#: doc/classes/TextEdit.xml:90
@@ -66740,7 +68943,7 @@ msgid ""
"[code]line[/code] can be hidden using [method set_line_as_hidden]."
msgstr ""
"在指定的 [code] line [/code] 索引处移动光标。\n"
-"如果 [code]adjust_viewport[/code] 设置为 [code]true[/code],则移动å‘生åŽè§†å£"
+"如果 [code]adjust_viewport[/code] 设置为 [code]true[/code],则移动å‘生åŽè§†çª—"
"将以光标ä½ç½®ä¸ºä¸­å¿ƒã€‚\n"
"如果 [code]can_be_hidden[/code] 设置为 [code]true[/code],则å¯ä»¥ä½¿ç”¨ [method "
"set_line_as_hidden] éšè—指定的 [code] line [/code]。"
@@ -66785,6 +68988,10 @@ msgid ""
"may cause a crash. If you wish to hide it or any of its children, use their "
"[member CanvasItem.visible] property."
msgstr ""
+"返回此[TextEdit]çš„[PopupMenu]。默认情况下,这个èœå•在å³é”®ç‚¹å‡»[TextEdit]的时候"
+"显示。\n"
+"[b]警告:[/b] 这是一个必è¦çš„内部节点,删除和释放它å¯èƒ½ä¼šå¯¼è‡´å´©æºƒã€‚如果你想éš"
+"è—它或它的任何å­èŠ‚ç‚¹ï¼Œè¯·ä½¿ç”¨å…¶çš„ [member CanvasItem.visible] 属性。"
#: doc/classes/TextEdit.xml:156
msgid "Returns the selection begin column."
@@ -67268,7 +69475,7 @@ msgid ""
msgstr ""
"纹ç†çš„作用是在视频硬件中注册一个图åƒï¼Œç„¶åŽå¯ä»¥åœ¨3D模型或2D[Sprite]或"
"GUI[Control]中使用。\n"
-"纹ç†é€šå¸¸æ˜¯é€šè¿‡ä»Žæ–‡ä»¶ä¸­åŠ è½½æ¥åˆ›å»ºçš„。å‚è§[方法 @GDScript.load]。\n"
+"纹ç†é€šå¸¸æ˜¯é€šè¿‡ä»Žæ–‡ä»¶ä¸­åŠ è½½æ¥åˆ›å»ºçš„。å‚阅[method @GDScript.load]。\n"
"[Texture]是其他资æºçš„基础。它ä¸èƒ½è¢«ç›´æŽ¥ä½¿ç”¨ã€‚\n"
"[b]注æ„:[/b] 由于图形硬件的é™åˆ¶ï¼Œæœ€å¤§çš„纹ç†å°ºå¯¸æ˜¯16384×16384åƒç´ ã€‚较大的纹ç†"
"å¯èƒ½æ— æ³•导入。"
@@ -67350,10 +69557,12 @@ msgid ""
"[b]Note:[/b] Ignored when using an [AtlasTexture] as these don't support "
"repetition."
msgstr ""
+"é‡å¤çº¹ç†ï¼ˆè€Œä¸æ˜¯é™åˆ¶åˆ°è¾¹ï¼‰ã€‚\n"
+"[b]注æ„:[/b] 使用[AtlasTexture]æ—¶å¿½ç•¥ï¼Œå› ä¸ºå®ƒä»¬ä¸æ”¯æŒé‡å¤ã€‚"
#: doc/classes/Texture.xml:99 doc/classes/VisualServer.xml:3212
msgid "Uses a magnifying filter, to enable smooth zooming in of the texture."
-msgstr ""
+msgstr "使用放大过滤器,以实现纹ç†çš„平滑放大。"
#: doc/classes/Texture.xml:102 doc/classes/TextureLayered.xml:88
#: doc/classes/VisualServer.xml:3215
@@ -67362,11 +69571,12 @@ msgid ""
"texture with different aspect ratios.\n"
"This results in better-looking textures when viewed from oblique angles."
msgstr ""
+"使用å„å‘异性的mipmap过滤。生æˆå…·æœ‰ä¸åŒé•¿å®½æ¯”çš„åŒä¸€çº¹ç†çš„较å°ç‰ˆæœ¬ã€‚\n"
+"当从斜角观看时,这会产生更好看的纹ç†ã€‚"
#: doc/classes/Texture.xml:106 doc/classes/VisualServer.xml:3219
-#, fuzzy
msgid "Converts the texture to the sRGB color space."
-msgstr "将原始数æ®ä»Ž sRGB 色彩空间转æ¢ä¸ºçº¿æ€§æ¯”例。"
+msgstr "将纹ç†è½¬æ¢ä¸º sRGB 颜色空间。"
#: doc/classes/Texture.xml:109
msgid ""
@@ -67374,21 +69584,21 @@ msgid ""
"[b]Note:[/b] Ignored when using an [AtlasTexture] as these don't support "
"repetition."
msgstr ""
+"é‡å¤çº¹ç†çš„交替部分,并对其进行镜åƒã€‚\n"
+"[b]注æ„:[/b] 在使用[AtlasTexture]æ—¶è¢«å¿½ç•¥ï¼Œå› ä¸ºå®ƒä»¬ä¸æ”¯æŒé‡å¤ã€‚"
#: doc/classes/Texture.xml:113 doc/classes/VisualServer.xml:3225
-#, fuzzy
msgid "Texture is a video surface."
-msgstr "设置给定曲é¢çš„å称。"
+msgstr "çº¹ç†æ˜¯è§†é¢‘表é¢ã€‚"
#: doc/classes/Texture3D.xml:4
-#, fuzzy
msgid "Texture with 3 dimensions."
-msgstr "返回ä½å›¾çš„尺寸。"
+msgstr "具有 3 个维度的纹ç†ã€‚"
#: doc/classes/Texture3D.xml:7
msgid ""
"Texture3D is a 3-dimensional texture that has a width, height, and depth."
-msgstr ""
+msgstr "Texture3D 是具有宽度ã€é«˜åº¦å’Œæ·±åº¦çš„ 3 维纹ç†ã€‚"
#: doc/classes/Texture3D.xml:20
msgid ""
@@ -67397,11 +69607,13 @@ msgid ""
"code] options. See [enum TextureLayered.Flags] enumerator for [code]flags[/"
"code] options."
msgstr ""
+"以指定的[code]width[/code]ã€[code]height[/code]å’Œ[code]depth[/code]创建"
+"Texture3D。å‚阅[enum Image.Format]çš„[code]format[/code]选项。å‚阅[enum "
+"TextureLayered.Flags]枚举器的[code]flags[/code]选项。"
#: doc/classes/TextureArray.xml:4
-#, fuzzy
msgid "Array of textures stored in a single primitive."
-msgstr "在å•个帧中绘制的顶点数。"
+msgstr "存储在å•ä¸ªåŸºå…ƒä¸­çš„çº¹ç†æ•°ç»„。"
#: doc/classes/TextureArray.xml:7
msgid ""
@@ -67424,6 +69636,22 @@ msgid ""
"Set the integer uniform \"index\" to show a particular part of the texture "
"as defined by the Horizontal and Vertical Slices in the importer."
msgstr ""
+"[TextureArray]在å•个[Texture]基本å•元中存储一个[Image]æ•°ç»„ã€‚çº¹ç†æ•°ç»„çš„æ¯ä¸€å±‚"
+"都有自己的mipmap链。这使得它æˆä¸ºçº¹ç†å›¾é›†å¾ˆå¥½çš„æ›¿ä»£å“。\n"
+"[TextureArray]必须使用ç€è‰²å™¨æ¥æ˜¾ç¤ºã€‚在把你的文件导入为[TextureArray]并设置适"
+"当的水平和垂直切片åŽï¼Œé€šè¿‡æŠŠå®ƒè®¾ç½®ä¸ºç€è‰²å™¨uniformæ¥æ˜¾ç¤ºå®ƒï¼Œä¾‹å¦‚。\n"
+"[codeblock]\n"
+"shader_type canvas_item;\n"
+"\n"
+"uniform sampler2DArray tex;\n"
+"uniform int index;\n"
+"\n"
+"void fragment() {\n"
+" COLOR = texture(tex, vec3(UV.x, UV.y, float(index)));\n"
+"}\n"
+"[/codeblock]\n"
+"设置整数uniform \"index\",以显示由importer中的Horizontal和Vertical Slices定"
+"义的纹ç†çš„特定部分。"
#: doc/classes/TextureArray.xml:32
msgid ""
@@ -67432,6 +69660,9 @@ msgid ""
"code] options. See [enum TextureLayered.Flags] enumerator for [code]flags[/"
"code] options."
msgstr ""
+"以指定的[code]width[/code]ã€[code]height[/code]å’Œ[code]depth[/code]创建"
+"TextureArray。å‚阅[enum Image.Format]çš„[code]format[/code]选项。å‚阅[enum "
+"TextureLayered.Flags]枚举器的[code]flags[/code]选项。"
#: doc/classes/TextureButton.xml:4
msgid ""
@@ -67452,7 +69683,7 @@ msgstr ""
"[Theme]主题资æºã€‚它的创建速度更快,但它ä¸åƒæ›´å¤æ‚çš„[Control]é‚£æ ·æ”¯æŒæœ¬åœŸåŒ–"
"(localization)。\n"
"\"正常\"状æ€å¿…须包å«ä¸€ä¸ªçº¹ç†ï¼ˆ[member texture_normal]ï¼‰ï¼›å…¶ä»–çº¹ç†æ˜¯å¯é€‰çš„。\n"
-"也请å‚è§[BaseButton],它包å«äº†ä¸Žè¯¥èŠ‚ç‚¹ç›¸å…³çš„é€šç”¨å±žæ€§å’Œæ–¹æ³•ã€‚"
+"也请å‚阅[BaseButton],它包å«äº†ä¸Žè¯¥èŠ‚ç‚¹ç›¸å…³çš„é€šç”¨å±žæ€§å’Œæ–¹æ³•ã€‚"
#: doc/classes/TextureButton.xml:18
msgid ""
@@ -67554,7 +69785,6 @@ msgid "Base class for 3D texture types."
msgstr "3D纹ç†ç±»åž‹çš„基类。"
#: doc/classes/TextureLayered.xml:7
-#, fuzzy
msgid ""
"Base class for [Texture3D] and [TextureArray]. Cannot be used directly, but "
"contains all the functions necessary for accessing and using [Texture3D] and "
@@ -67562,16 +69792,16 @@ msgid ""
"layer specifies the depth or Z-index, they can be treated as a bunch of 2D "
"slices. Similarly, for [TextureArray]s, the layer specifies the array layer."
msgstr ""
-"[Texture2DArray]ã€[Cubemap]å’Œ[CubemapArray]的基类。ä¸èƒ½ç›´æŽ¥ä½¿ç”¨ï¼Œä½†åŒ…å«äº†æ‰€æœ‰"
-"访问派生资æºç±»åž‹çš„å¿…è¦åŠŸèƒ½ã€‚æ•°æ®æŒ‰å±‚设置。对于多层[Texture2DArray]指定数组"
-"层。"
+"是[Texture3D]å’Œ[TextureArray]的基类。ä¸èƒ½ç›´æŽ¥ä½¿ç”¨ï¼Œä½†åŒ…å«è®¿é—®å’Œä½¿ç”¨"
+"[Texture3D]å’Œ[TextureArray]的所有必è¦åŠŸèƒ½ã€‚æ•°æ®æ˜¯ä»¥æ¯å±‚为å•ä½è®¾ç½®çš„。对于"
+"[Texture3D],层指定了深度或Z-index,它们å¯ä»¥è¢«è§†ä¸ºä¸€å †äºŒç»´åˆ‡ç‰‡ã€‚åŒæ ·åœ°ï¼Œå¯¹äºŽ"
+"[TextureArray],层指定了数组层。"
#: doc/classes/TextureLayered.xml:15
-#, fuzzy
msgid ""
"Returns the depth of the texture. Depth is the 3rd dimension (typically Z-"
"axis)."
-msgstr "返回纹ç†çš„宽度。宽度通常由X轴表示。"
+msgstr "返回纹ç†çš„æ·±åº¦ã€‚深度是第三个维度(通常是 Z 轴)。"
#: doc/classes/TextureLayered.xml:21
msgid ""
@@ -67603,13 +69833,15 @@ msgid ""
"and [code]y_offset[/code] determine where the [Image] is \"stamped\" over "
"the texture. The [code]image[/code] must fit within the texture."
msgstr ""
+"通过使用指定的[code]image[/code]的数æ®è¦†ç›–æ¥éƒ¨åˆ†è®¾ç½®æŒ‡å®šçš„[code]layer[/code]"
+"的数æ®ã€‚ [code]x_offset[/code] å’Œ [code]y_offset[/code] 确定 [Image] 在纹ç†ä¸Š"
+"\"stamped\" 标记的ä½ç½®ã€‚ [code]image[/code] 必须适åˆçº¹ç†ã€‚"
#: doc/classes/TextureLayered.xml:59
-#, fuzzy
msgid ""
"Sets the data for the specified layer. Data takes the form of a 2-"
"dimensional [Image] resource."
-msgstr "返回[Mesh]èµ„æºæŒ‡å®šè¡¨é¢çš„覆盖åŽçš„[Material]。"
+msgstr "设置指定图层的数æ®ã€‚æ•°æ®çš„形弿˜¯äºŒç»´çš„[Image]资æºã€‚"
#: doc/classes/TextureLayered.xml:65
msgid "Returns a dictionary with all the data used by this texture."
@@ -67920,7 +70152,8 @@ msgstr ""
#: doc/classes/Theme.xml:11
msgid "https://docs.godotengine.org/en/3.4/tutorials/gui/gui_skinning.html"
-msgstr "https://docs.godotengine.org/en/3.4/tutorials/gui/gui_skinning.html"
+msgstr ""
+"https://docs.godotengine.org/zh_CN/stable/tutorials/gui/gui_skinning.html"
#: doc/classes/Theme.xml:17
msgid "Clears all values on the theme."
@@ -68403,7 +70636,8 @@ msgstr ""
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/threads/thread_safe_apis.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/threads/thread_safe_apis.html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/threads/thread_safe_apis."
+"html"
#: doc/classes/Thread.xml:19
msgid ""
@@ -68420,6 +70654,9 @@ msgid ""
"wait_to_finish]. For checking if a [Thread] is still executing its task, use "
"[method is_alive]."
msgstr ""
+"如果此 [Thread] å·²å¯åŠ¨ï¼Œåˆ™è¿”å›ž [code]true[/code]。一旦开始,这将返回 "
+"[code]true[/code] ,直到它使用 [method wait_to_finish] åŠ å…¥ã€‚è¦æ£€æŸ¥ [Thread] "
+"是å¦ä»åœ¨æ‰§è¡Œå…¶ä»»åŠ¡ï¼Œè¯·ä½¿ç”¨ [method is_alive]。"
#: doc/classes/Thread.xml:31
msgid ""
@@ -68428,6 +70665,9 @@ msgid ""
"blocking the calling thread.\n"
"To check if a [Thread] is joinable, use [method is_active]."
msgstr ""
+"当本 [Thread] 线程正在等待时,返回 [code]true[/code]。在需è¦ç¡®å®šè°ƒç”¨ [method "
+"wait_to_finish] 是å¦ä¼šé˜»å¡žè°ƒç”¨çº¿ç¨‹æ—¶éžå¸¸æœ‰ç”¨ã€‚\n"
+"è¦æ£€æŸ¥ [Thread] 线程是å¦å¯åˆå¹¶ï¼Œè¯·ä½¿ç”¨ [method is_active]。"
#: doc/classes/Thread.xml:42
msgid ""
@@ -68445,7 +70685,6 @@ msgstr ""
"æˆåŠŸæ—¶è¿”å›ž[constant OK],失败时返回[constant ERR_CANT_CREATE] 。"
#: doc/classes/Thread.xml:49
-#, fuzzy
msgid ""
"Joins the [Thread] and waits for it to finish. Returns the output of the "
"method passed to [method start].\n"
@@ -68457,11 +70696,13 @@ msgid ""
"[b]Note:[/b] After the [Thread] finishes joining it will be disposed. If you "
"want to use it again you will have to create a new instance of it."
msgstr ""
-"加入 [Thread] 并等待它完æˆã€‚返回方法调用返回的内容。\n"
-"åº”è¯¥åœ¨æ‚¨æƒ³è¦æ£€ç´¢ä»Ž [Thread] è°ƒç”¨çš„æ–¹æ³•è¿”å›žçš„å€¼æ—¶ä½¿ç”¨ï¼Œæˆ–è€…åœ¨é‡Šæ”¾åŒ…å« "
-"[Thread] 的实例之å‰ä½¿ç”¨ã€‚\n"
-"[b]注:[/b][Thread]连接完æˆåŽå°†è¢«é”€æ¯ã€‚如果è¦å†æ¬¡ä½¿ç”¨å®ƒï¼Œåˆ™å¿…须创建它的新实"
-"例。"
+"åˆå¹¶ [Thread] 并等待它完æˆã€‚返回传递给 [method start] 的方法的输出。\n"
+"åº”åœ¨ä¸¤ç§æƒ…况下使用:想è¦èŽ·å– [Thread] è°ƒç”¨çš„æ–¹æ³•æ‰€è¿”å›žçš„å€¼ï¼Œæˆ–è€…åœ¨é‡Šæ”¾åŒ…å« "
+"[Thread] 的实例之å‰ã€‚\n"
+"如果想确定调用本方法是å¦ä¼šé˜»å¡žè°ƒç”¨çº¿ç¨‹ï¼Œè¯·æ£€æŸ¥ [method is_alive] 是å¦ä¸º "
+"[code]false[/code]。\n"
+"[b]注æ„:[/b] [Thread] 在完æˆåˆå¹¶åŽå°†è¢«é”€æ¯ã€‚如果è¦å†æ¬¡ä½¿ç”¨å®ƒï¼Œåˆ™å¿…须创建它的"
+"新实例。"
#: doc/classes/Thread.xml:58
msgid "A thread running with lower priority than normally."
@@ -68497,7 +70738,8 @@ msgstr ""
#: doc/classes/TileMap.xml:11 doc/classes/TileSet.xml:11
msgid "https://docs.godotengine.org/en/3.4/tutorials/2d/using_tilemaps.html"
-msgstr "https://docs.godotengine.org/en/3.4/tutorials/2d/using_tilemaps.html"
+msgstr ""
+"https://docs.godotengine.org/zh_CN/stable/tutorials/2d/using_tilemaps.html"
#: doc/classes/TileMap.xml:14 doc/classes/TileSet.xml:14
msgid "https://godotengine.org/asset-library/asset/111"
@@ -68765,8 +71007,8 @@ msgid ""
"documentation for more information."
msgstr ""
"图å—地图中所有碰撞器的碰撞层。更多信æ¯è¯·å‚阅文档中的[url=https://docs."
-"godotengine.org/en/3.4/tutorials/physics/physics_introduction.html#collision-"
-"layers-and-masks]碰撞层和掩ç [/url]。"
+"godotengine.org/zh_CN/stable/tutorials/physics/physics_introduction."
+"html#collision-layers-and-masks]碰撞层和掩ç [/url]。"
#: doc/classes/TileMap.xml:252
msgid ""
@@ -68776,8 +71018,8 @@ msgid ""
"documentation for more information."
msgstr ""
"图å—地图中所有碰撞器的碰撞掩ç ã€‚更多信æ¯è¯·å‚阅文档中的[url=https://docs."
-"godotengine.org/en/3.4/tutorials/physics/physics_introduction.html#collision-"
-"layers-and-masks]碰撞层和掩ç [/url]。"
+"godotengine.org/zh_CN/stable/tutorials/physics/physics_introduction."
+"html#collision-layers-and-masks]碰撞层和掩ç [/url]。"
#: doc/classes/TileMap.xml:255
msgid ""
@@ -69354,6 +71596,12 @@ msgid ""
"rendered framerate. For very low wait times, it is recommended to use a "
"process loop in a script instead of using a Timer node."
msgstr ""
+"等待的秒数。\n"
+"[b]注æ„:[/b] 计时器在一个渲染帧中最多åªèƒ½è§¦å‘一次(如果 [member "
+"process_mode] 为 [constant TIMER_PROCESS_PHYSICS],则是在一个物ç†å¸§ä¸­æœ€å¤šä¸€"
+"次)。也就是说,éžå¸¸ä½Žçš„等待时间(å°äºŽ 0.05 ç§’ï¼‰ä¼šæ ¹æ®æ¸²æŸ“帧率的ä¸åŒè€Œäº§ç”Ÿä¸"
+"åŒçš„行为。如果等待时间éžå¸¸å°ï¼Œå»ºè®®åœ¨è„šæœ¬ä¸­ä½¿ç”¨ process 循环,ä¸è¦ç”¨ Timer 节"
+"点。"
#: doc/classes/Timer.xml:67
msgid ""
@@ -69411,26 +71659,35 @@ msgid "Text [Color] used when the [ToolButton] is disabled."
msgstr "ç¦ç”¨ [ToolButton] 时使用的文本 [Color]颜色。"
#: doc/classes/ToolButton.xml:39
+msgid ""
+"Text [Color] used when the [ToolButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+"èšç„¦ [ToolButton] 时所使用的文本 [Color] é¢œè‰²ã€‚ä»…æ›¿æ¢æ­£å¸¸æ–‡å­—颜色。ç¦ç”¨ã€æ‚¬"
+"åœã€ä»¥åŠæŒ‰ä¸‹çжæ€çš„优先级比该颜色高。"
+
+#: doc/classes/ToolButton.xml:42
msgid "Text [Color] used when the [ToolButton] is being hovered."
msgstr "[ToolButton] æ‚¬åœæ—¶ä½¿ç”¨çš„æ–‡æœ¬ [Color]颜色。"
-#: doc/classes/ToolButton.xml:42
+#: doc/classes/ToolButton.xml:45
msgid "Text [Color] used when the [ToolButton] is being pressed."
msgstr "按下 [ToolButton] 时使用的文本 [Color]颜色。"
-#: doc/classes/ToolButton.xml:45
+#: doc/classes/ToolButton.xml:48
msgid "[StyleBox] used when the [ToolButton] is being hovered."
msgstr "当[ToolButton]è¢«æ‚¬åœæ—¶ä½¿ç”¨çš„[StyleBox]。"
-#: doc/classes/ToolButton.xml:48
+#: doc/classes/ToolButton.xml:51
msgid "The horizontal space between [ToolButton]'s icon and text."
msgstr "[ToolButton] 的图标和文本之间的水平间è·ã€‚"
-#: doc/classes/ToolButton.xml:51
+#: doc/classes/ToolButton.xml:54
msgid "Default [StyleBox] for the [ToolButton]."
msgstr "[ToolButton] 的默认 [StyleBox]。"
-#: doc/classes/ToolButton.xml:54
+#: doc/classes/ToolButton.xml:57
msgid "[StyleBox] used when the [ToolButton] is being pressed."
msgstr "当[ToolButton]被按下时使用的[StyleBox]。"
@@ -69842,12 +72099,12 @@ msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/i18n/internationalizing_games."
"html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/i18n/internationalizing_games."
-"html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/i18n/"
+"internationalizing_games.html"
#: doc/classes/Translation.xml:11 doc/classes/TranslationServer.xml:11
msgid "https://docs.godotengine.org/en/3.4/tutorials/i18n/locales.html"
-msgstr "https://docs.godotengine.org/en/3.4/tutorials/i18n/locales.html"
+msgstr "https://docs.godotengine.org/zh_CN/stable/tutorials/i18n/locales.html"
#: doc/classes/Translation.xml:18
msgid "Virtual method to override [method get_message]."
@@ -72338,7 +74595,7 @@ msgstr ""
"一个å˜ä½“。\n"
"- å¯ä»¥å­˜å‚¨å‡ ä¹Žä»»ä½•æ•°æ®ç±»åž‹ã€‚\n"
"- å¯ä»¥åœ¨è®¸å¤šå˜ä½“之间执行æ“作。GDScript使用å˜ä½“作为其原å­åŠåŽŸç”Ÿæ•°æ®ç±»åž‹ã€‚\n"
-"- å¯ä»¥è¢«æ•£åˆ—,所以å¯ä»¥å¿«é€Ÿä¸Žå…¶ä»–å˜ä½“进行比较。\n"
+"- å¯ä»¥è¢«å“ˆå¸Œï¼Œæ‰€ä»¥å¯ä»¥å¿«é€Ÿä¸Žå…¶ä»–å˜ä½“进行比较。\n"
"- å¯ä»¥ç”¨äºŽæ•°æ®ç±»åž‹ä¹‹é—´çš„安全转æ¢ã€‚\n"
"- å¯ä»¥ç”¨æ¥æŠ½è±¡è°ƒç”¨æ–¹æ³•å’Œå®ƒä»¬çš„å‚æ•°ã€‚Godot通过å˜ä½“导出所有函数。\n"
"- å¯ä»¥ç”¨æ¥æŽ¨è¿Ÿè°ƒç”¨æˆ–在线程之间移动数æ®ã€‚\n"
@@ -72354,7 +74611,8 @@ msgstr ""
#: doc/classes/Variant.xml:53
msgid "https://docs.godotengine.org/en/3.4/development/cpp/variant_class.html"
-msgstr "https://docs.godotengine.org/en/3.4/development/cpp/variant_class.html"
+msgstr ""
+"https://docs.godotengine.org/zh_CN/stable/development/cpp/variant_class.html"
#: doc/classes/VBoxContainer.xml:4
msgid "Vertical box container."
@@ -73450,7 +75708,8 @@ msgstr ""
#: doc/classes/Viewport.xml:16
msgid "https://docs.godotengine.org/en/3.4/tutorials/viewports/index.html"
-msgstr "https://docs.godotengine.org/en/3.4/tutorials/viewports/index.html"
+msgstr ""
+"https://docs.godotengine.org/zh_CN/stable/tutorials/viewports/index.html"
#: doc/classes/Viewport.xml:18 doc/classes/ViewportTexture.xml:12
msgid "https://godotengine.org/asset-library/asset/128"
@@ -74437,16 +76696,16 @@ msgid ""
"https://docs.godotengine.org/en/3.4/getting_started/scripting/visual_script/"
"index.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/getting_started/scripting/visual_script/"
-"index.html"
+"https://docs.godotengine.org/zh_CN/stable/getting_started/scripting/"
+"visual_script/index.html"
#: modules/visual_script/doc_classes/VisualScript.xml:19
msgid "Add a custom signal with the specified name to the VisualScript."
-msgstr "在å¯è§†åŒ–脚本中添加一个具有指定å称的自定义信å·ã€‚"
+msgstr "在å¯è§†åŒ–脚本中添加指定å称的自定义信å·ã€‚"
#: modules/visual_script/doc_classes/VisualScript.xml:26
msgid "Add a function with the specified name to the VisualScript."
-msgstr "在å¯è§†åŒ–脚本中添加一个具有指定å称的函数。"
+msgstr "在å¯è§†åŒ–脚本中添加指定å称的函数。"
#: modules/visual_script/doc_classes/VisualScript.xml:36
msgid "Add a node to a function of the VisualScript."
@@ -76449,7 +78708,8 @@ msgstr ""
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/optimization/using_servers.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/optimization/using_servers.html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/optimization/"
+"using_servers.html"
#: doc/classes/VisualServer.xml:28
msgid "Sets images to be rendered in the window margin."
@@ -77070,7 +79330,7 @@ msgid ""
"an empty string."
msgstr ""
"返回视频适é…器的å称(例如:\"GeForce GTX 1080/PCIe/SSE2\")。\n"
-"[b]注æ„:[/b]当è¿è¡Œä¸€ä¸ªæ— å¤´æˆ–æœåС噍坿‰§è¡Œæ–‡ä»¶æ—¶ï¼Œè¿™ä¸ªå‡½æ•°è¿”回一个空字符串。"
+"[b]注æ„:[/b]当è¿è¡Œä¸€ä¸ªç²¾ç®€æˆ–æœåС噍坿‰§è¡Œæ–‡ä»¶æ—¶ï¼Œè¿™ä¸ªå‡½æ•°è¿”回一个空字符串。"
#: doc/classes/VisualServer.xml:996
msgid ""
@@ -77079,7 +79339,7 @@ msgid ""
"an empty string."
msgstr ""
"返回视频适é…器的供应商(例如,\"NVIDIA Corporation\")。\n"
-"[b]注æ„:[/b] 当è¿è¡Œæ— å¤´æˆ–æœåС噍坿‰§è¡Œæ–‡ä»¶æ—¶ï¼Œè¯¥å‡½æ•°è¿”回一个空字符串。"
+"[b]注æ„:[/b] 当è¿è¡Œç²¾ç®€æˆ–æœåС噍坿‰§è¡Œæ–‡ä»¶æ—¶ï¼Œè¯¥å‡½æ•°è¿”回一个空字符串。"
#: doc/classes/VisualServer.xml:1003
msgid "Returns the id of a white texture. Creates one if none exists."
@@ -77586,7 +79846,7 @@ msgid ""
"splits resulting in a smoother transition between them. Equivalent to "
"[member DirectionalLight.directional_shadow_blend_splits]."
msgstr ""
-"如果[code]true[/code],这个定å‘光会在阴影贴图分割之间混åˆï¼Œä»¥ä½¿å®ƒä»¬ä¹‹é—´çš„过渡"
+"如果[code]true[/code],这个平行光会在阴影贴图分割之间混åˆï¼Œä»¥ä½¿å®ƒä»¬ä¹‹é—´çš„过渡"
"更加平滑。相当于[member DirectionalLight.directional_shadow_blend_splits]。"
#: doc/classes/VisualServer.xml:1519
@@ -77595,7 +79855,7 @@ msgid ""
"[member DirectionalLight.directional_shadow_depth_range]. See [enum "
"LightDirectionalShadowDepthRangeMode] for options."
msgstr ""
-"设置这个定å‘å…‰æºçš„阴影深度范围模å¼ã€‚相当于[member DirectionalLight."
+"设置这个平行光æºçš„阴影深度范围模å¼ã€‚相当于[member DirectionalLight."
"directional_shadow_depth_range]。å‚阅[enum "
"LightDirectionalShadowDepthRangeMode]的选项。"
@@ -77605,7 +79865,7 @@ msgid ""
"DirectionalLight.directional_shadow_mode]. See [enum "
"LightDirectionalShadowMode] for options."
msgstr ""
-"设置此定å‘å…‰æºçš„阴影模å¼ã€‚相当于[member DirectionalLight3D."
+"设置此平行光æºçš„阴影模å¼ã€‚相当于[member DirectionalLight3D."
"directional_shadow_mode]。å‚阅[enum LightDirectionalShadowMode]的选项。"
#: doc/classes/VisualServer.xml:1535
@@ -78744,7 +81004,7 @@ msgstr ""
"将视窗å¤åˆ¶åˆ°å±å¹•上由[code]rect[/code]指定的区域。如果[member Viewport."
"render_direct_to_screen]是[code]true[/code],那么视窗就ä¸ä¼šä½¿ç”¨å¸§ç¼“冲器,视窗"
"的内容会直接渲染到å±å¹•上。然而,请注æ„,根视窗是最åŽç»˜åˆ¶çš„,因此它将在å±å¹•上"
-"绘制。因此,你必须将根视å£è®¾ç½®ä¸ºä¸€ä¸ªä¸è¦†ç›–你所附加的这个视å£çš„区域。\n"
+"绘制。因此,你必须将根视窗设置为一个ä¸è¦†ç›–你所附加的这个视窗的区域。\n"
"例如,你å¯ä»¥ç”¨ä»¥ä¸‹ä»£ç å°†æ ¹è§†çª—è®¾ç½®ä¸ºå®Œå…¨ä¸æ¸²æŸ“。\n"
"[codeblock]\n"
"func _ready():\n"
@@ -78752,7 +81012,7 @@ msgstr ""
" $Viewport.set_attach_to_screen_rect(Rect2(0, 0, 600, 600))\n"
"[/codeblock]\n"
"使用这个方法å¯ä»¥å¸¦æ¥æ˜Žæ˜¾çš„优化,特别是在低端设备上。然而,它的代价是必须手动"
-"管ç†ä½ çš„视å£ã€‚对于进一步的优化,请看,[method "
+"管ç†ä½ çš„视窗。对于进一步的优化,请看,[method "
"viewport_set_render_direct_to_screen]。"
#: doc/classes/VisualServer.xml:2882
@@ -78763,7 +81023,7 @@ msgid ""
"Once finished with your RID, you will want to free the RID using the "
"VisualServer's [method free_rid] static method."
msgstr ""
-"创建一个空视å£å¹¶å°†å…¶æ·»åŠ åˆ°VisualServer中。å¯ä»¥ç”¨è¿”回的RIDæ¥è®¿é—®å®ƒã€‚这个RIDå°†"
+"创建一个空视窗并将其添加到VisualServer中。å¯ä»¥ç”¨è¿”回的RIDæ¥è®¿é—®å®ƒã€‚这个RIDå°†"
"用于所有[code]viewport_*[/code] 的VisualServer函数。\n"
"一旦你用完了RID,你è¦ä½¿ç”¨VisualServerçš„[method free_rid]陿€æ–¹æ³•释放RID。"
@@ -78783,7 +81043,7 @@ msgstr "è¿”å›žè§†çª—çš„æœ€åŽæ¸²æŸ“帧。"
#: doc/classes/VisualServer.xml:2913
msgid "Detaches a viewport from a canvas and vice versa."
-msgstr "从画布分离视å£ï¼Œå之亦然。"
+msgstr "从画布分离视窗,å之亦然。"
#: doc/classes/VisualServer.xml:2921
msgid "If [code]true[/code], sets the viewport active, else sets it inactive."
@@ -78864,11 +81124,11 @@ msgid ""
"significantly larger than the window size."
msgstr ""
"如果[code]true[/code],直接将视窗的内容渲染到å±å¹•上。这å…许一个低级别的优化,"
-"ä½ å¯ä»¥è·³è¿‡ç»˜åˆ¶è§†å£åˆ°æ ¹è§†å£ã€‚虽然这ç§ä¼˜åŒ–å¯ä»¥æ˜¾è‘—æé«˜é€Ÿåº¦ï¼ˆç‰¹åˆ«æ˜¯åœ¨æ—§è®¾å¤‡"
-"上),但它是以牺牲å¯ç”¨æ€§ä¸ºä»£ä»·çš„。当å¯ç”¨è¿™ä¸ªåŠŸèƒ½æ—¶ï¼Œä½ ä¸èƒ½ä»Žè§†å£æˆ–"
+"ä½ å¯ä»¥è·³è¿‡ç»˜åˆ¶è§†çª—到根视窗。虽然这ç§ä¼˜åŒ–å¯ä»¥æ˜¾è‘—æé«˜é€Ÿåº¦ï¼ˆç‰¹åˆ«æ˜¯åœ¨æ—§è®¾å¤‡"
+"上),但它是以牺牲å¯ç”¨æ€§ä¸ºä»£ä»·çš„。当å¯ç”¨è¿™ä¸ªåŠŸèƒ½æ—¶ï¼Œä½ ä¸èƒ½ä»Žè§†çª—或"
"[code]SCREEN_TEXTURE[/code]中读å–。你也会失去æŸäº›çª—å£è®¾ç½®çš„好处,比如å„ç§æ‹‰ä¼¸"
"模å¼ã€‚å¦ä¸€ä¸ªéœ€è¦æ³¨æ„çš„åŽæžœæ˜¯ï¼Œåœ¨2D中,渲染是以窗å£å标进行的,所以如果你有一"
-"个两å€äºŽçª—å£å¤§å°çš„视å£ï¼Œå¹¶ä¸”ä½ è®¾ç½®äº†è¿™ä¸ªï¼Œé‚£ä¹ˆåªæœ‰é€‚åˆçª—å£çš„部分æ‰ä¼šè¢«ç»˜åˆ¶ï¼Œ"
+"个两å€äºŽçª—å£å¤§å°çš„è§†çª—ï¼Œå¹¶ä¸”ä½ è®¾ç½®äº†è¿™ä¸ªï¼Œé‚£ä¹ˆåªæœ‰é€‚åˆçª—å£çš„部分æ‰ä¼šè¢«ç»˜åˆ¶ï¼Œ"
"没有自动缩放的å¯èƒ½ï¼Œå³ä½¿ä½ çš„æ¸¸æˆåœºæ™¯æ˜Žæ˜¾å¤§äºŽçª—å£å¤§å°ã€‚"
#: doc/classes/VisualServer.xml:3037
@@ -78901,8 +81161,8 @@ msgid ""
"[code]0.5[/code] generally give the best results. See also [method "
"viewport_set_use_fxaa]."
msgstr ""
-"为视å£[code]viewport[/code]设定é”化强度[code]intensity[/code]。如果设置为大于"
-"[code]0.0[/code]的值,对比度适应性é”化将被应用到3D视å£ä¸­ã€‚这具有较低的性能æˆ"
+"为视窗[code]viewport[/code]设定é”化强度[code]intensity[/code]。如果设置为大于"
+"[code]0.0[/code]的值,对比度适应性é”化将被应用到3D视窗中。这具有较低的性能æˆ"
"本,å¯ä»¥ç”¨æ¥æ¢å¤ä½¿ç”¨FXAAæ—¶æŸå¤±çš„一些é”度。一般æ¥è¯´ï¼Œ[code]0.5[/code]å·¦å³çš„值"
"å¯ä»¥å¾—到最好的效果。å‚阅[method viewport_set_use_fxaa]。"
@@ -79327,15 +81587,15 @@ msgstr "在计算阴影贴图时,在水平方å‘上使用更多的细节。"
#: doc/classes/VisualServer.xml:3447
msgid "Use orthogonal shadow projection for directional light."
-msgstr "对定å‘光使用正交阴影投影。"
+msgstr "对平行光使用正交阴影投影。"
#: doc/classes/VisualServer.xml:3450
msgid "Use 2 splits for shadow projection when using directional light."
-msgstr "使用定å‘光时,使用 2 个分割进行阴影投影。"
+msgstr "使用平行光时,使用 2 个分割进行阴影投影。"
#: doc/classes/VisualServer.xml:3453
msgid "Use 4 splits for shadow projection when using directional light."
-msgstr "使用定å‘光时,使用 4 个分割进行阴影投影。"
+msgstr "使用平行光时,使用 4 个分割进行阴影投影。"
#: doc/classes/VisualServer.xml:3456
msgid ""
@@ -79970,7 +82230,8 @@ msgstr ""
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/shading/visual_shaders.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/shading/visual_shaders.html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/shading/visual_shaders."
+"html"
#: doc/classes/VisualShaderNode.xml:16
msgid ""
@@ -80542,7 +82803,7 @@ msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/plugins/editor/"
"visual_shader_plugins.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/plugins/editor/"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/plugins/editor/"
"visual_shader_plugins.html"
#: doc/classes/VisualShaderNodeCustom.xml:22
@@ -80972,8 +83233,8 @@ msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/shading/shading_reference/"
"index.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/shading/shading_reference/"
-"index.html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/shading/"
+"shading_reference/index.html"
#: doc/classes/VisualShaderNodeInput.xml:20
msgid ""
@@ -82633,14 +84894,13 @@ msgid "A class representing a specific WebSocket connection."
msgstr "表示特定WebSocket连接的类。"
#: modules/websocket/doc_classes/WebSocketPeer.xml:7
-#, fuzzy
msgid ""
"This class represents a specific WebSocket connection, allowing you to do "
"lower level operations with it.\n"
"You can choose to write to the socket in binary or text mode, and you can "
"recognize the mode used for writing by the other peer."
msgstr ""
-"该类表示特定的WebSocket连接,你å¯ä»¥ç”¨å®ƒåšä½Žçº§åˆ«çš„æ“ä½œã€‚\n"
+"该类表示特定的 WebSocket 连接,你å¯ä»¥ç”¨å®ƒæ‰§è¡Œåº•层æ“作。\n"
"å¯ä»¥é€‰æ‹©ä»¥äºŒè¿›åˆ¶æˆ–文本模å¼å†™å…¥å¥—接字,也å¯ä»¥è¯†åˆ«å¦ä¸€ä¸ªå¯¹ç­‰ä½“用于写入的模å¼ã€‚"
#: modules/websocket/doc_classes/WebSocketPeer.xml:18
@@ -83431,6 +85691,9 @@ msgid ""
"may cause a crash. If you wish to hide it or any of its children, use their "
"[member CanvasItem.visible] property."
msgstr ""
+"返回关闭的 [TextureButton]。\n"
+"[b]警告:[/b] 这是一个必需的内部节点,删除和释放它å¯èƒ½ä¼šå¯¼è‡´å´©æºƒã€‚如果您希望"
+"éšè—它或其任何å­é¡¹ï¼Œè¯·ä½¿ç”¨å®ƒä»¬çš„ [member CanvasItem.visible] 属性。"
#: doc/classes/WindowDialog.xml:22
msgid "If [code]true[/code], the user can resize the window."
@@ -83786,6 +86049,57 @@ msgid ""
"If [code]true[/code], child nodes are sorted, otherwise sorting is disabled."
msgstr "如果为[code]true[/code],则对å­èŠ‚ç‚¹è¿›è¡ŒæŽ’åºï¼Œå¦åˆ™ç¦ç”¨æŽ’åºã€‚"
+#~ msgid "Returns this [AABB] expanded to include a given point."
+#~ msgstr "è¿”å›žè¢«æ‰©å±•è‡³åŒ…å«æŒ‡å®šç‚¹çš„该 [AABB]。"
+
+#~ msgid ""
+#~ "Applies morphological dilation to the bitmap. The first argument is the "
+#~ "dilation amount, Rect2 is the area where the dilation will be applied."
+#~ msgstr "在ä½å›¾ä¸Šåº”ç”¨å½¢æ€æ‰©å±•ã€‚ç¬¬ä¸€ä¸ªå‚æ•°æ˜¯æ‰©å±•é‡ï¼ŒRect2是è¦åº”用扩展的区域。"
+
+#~ msgid "Returns the [Physics2DDirectBodyState] of the body."
+#~ msgstr "返回物体的[Physics2DDirectBodyState]。"
+
+#~ msgid "Returns the [PhysicsDirectBodyState] of the body."
+#~ msgstr "返回物体的[PhysicsDirectBodyState]。"
+
+#~ msgid ""
+#~ "Output latency in milliseconds for audio. Lower values will result in "
+#~ "lower audio latency at the cost of increased CPU usage. Low values may "
+#~ "result in audible cracking on slower hardware."
+#~ msgstr ""
+#~ "音频的输出延迟(毫秒)。较低的值将导致较低的音频延迟,但代价是CPU使用率增"
+#~ "加。较低的值å¯èƒ½ä¼šå¯¼è‡´è¾ƒæ…¢ç¡¬ä»¶ä¸Šçš„声音破裂。"
+
+#~ msgid "Returns this [Rect2] expanded to include a given point."
+#~ msgstr "返回包å«ç»™å®šç‚¹çš„æ­¤ [Rect2] 的扩展。"
+
+#~ msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#~ msgstr "如果 [Rect2] 包å«ç‚¹ï¼Œåˆ™è¿”回 [code]true[/code]。"
+
+#~ msgid ""
+#~ "Append vertices from a given [Mesh] surface onto the current vertex array "
+#~ "with specified [Transform]."
+#~ msgstr "将给定 [Mesh] 表é¢çš„顶点附加到具有指定 [Transform] 的当å‰é¡¶ç‚¹æ•°ç»„。"
+
+#~ msgid ""
+#~ "Returns a list of intersecting [Area]s. For performance reasons "
+#~ "(collisions are all processed at the same time) this list is modified "
+#~ "once during the physics step, not immediately after objects are moved. "
+#~ "Consider using signals instead."
+#~ msgstr ""
+#~ "返回一个相交的区域[Area]çš„åˆ—è¡¨ã€‚ç”±äºŽæ€§èƒ½åŽŸå› ï¼ˆç¢°æ’žéƒ½æ˜¯åŒæ—¶å¤„ç†çš„),这个列"
+#~ "è¡¨åœ¨ç‰©ç†æ­¥éª¤ä¸­è¢«ä¿®æ”¹ä¸€æ¬¡ï¼Œè€Œä¸æ˜¯åœ¨ç‰©ä½“被移动åŽç«‹å³ä¿®æ”¹ã€‚å¯ä»¥è€ƒè™‘ä½¿ç”¨ä¿¡å·æ¥"
+#~ "代替。"
+
+#~ msgid "Emitted when the resource value was set and user clicked to edit it."
+#~ msgstr "在设置资æºå€¼å¹¶ä¸”用户å•击以对其进行编辑时å‘出。"
+
+#~ msgid ""
+#~ "OpenGL texture format [code]RED[/code] with a single component and a "
+#~ "bitdepth of 8."
+#~ msgstr "OpenGLçº¹ç†æ ¼å¼[code]RED[/code],具有å•一分é‡ï¼Œä½æ·±ä¸º8。"
+
#~ msgid "Returns the label used for built-in text."
#~ msgstr "返回用于内置文本的标签。"
diff --git a/doc/translations/zh_TW.po b/doc/translations/zh_TW.po
index 456c9be89c..34ebd06914 100644
--- a/doc/translations/zh_TW.po
+++ b/doc/translations/zh_TW.po
@@ -25,43 +25,43 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 4.9-dev\n"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Description"
msgstr "說明"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Tutorials"
msgstr "教學"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Properties"
msgstr "屬性"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Methods"
msgstr "方法"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Theme Properties"
msgstr "主題屬性"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Signals"
msgstr "訊號"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Enumerations"
msgstr "列舉類型"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Constants"
msgstr "常數"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Property Descriptions"
msgstr "屬性說明"
-#: doc/tools/makerst.py
+#: doc/tools/make_rst.py
msgid "Method Descriptions"
msgstr "方法說明"
@@ -3696,112 +3696,121 @@ msgid ""
msgstr ""
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr ""
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
msgstr ""
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
msgstr ""
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
msgstr ""
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr ""
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr ""
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr ""
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
msgstr ""
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr ""
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
msgstr ""
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
msgstr ""
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr ""
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
"positive.\n"
@@ -4880,7 +4889,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -6319,21 +6328,25 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
#: doc/classes/Area.xml:17
msgid ""
-"Returns a list of intersecting [Area]s. For performance reasons (collisions "
-"are all processed at the same time) this list is modified once during the "
-"physics step, not immediately after objects are moved. Consider using "
-"signals instead."
+"Returns a list of intersecting [Area]s. The overlapping area's [member "
+"CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:23
+#: doc/classes/Area.xml:24
msgid ""
-"Returns a list of intersecting [PhysicsBody]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody]s. The overlapping body's "
+"[member CollisionObject.collision_layer] must be part of this area's [member "
+"CollisionObject.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:30
+#: doc/classes/Area.xml:32
msgid ""
"If [code]true[/code], the given area overlaps the Area.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6341,7 +6354,7 @@ msgid ""
"physics step. Consider using signals instead."
msgstr ""
-#: doc/classes/Area.xml:38
+#: doc/classes/Area.xml:40
msgid ""
"If [code]true[/code], the given physics body overlaps the Area.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6352,7 +6365,7 @@ msgid ""
"their tiles with collision shapes as a virtual physics body)."
msgstr ""
-#: doc/classes/Area.xml:46
+#: doc/classes/Area.xml:48
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
"velocity lost per second.\n"
@@ -6360,41 +6373,41 @@ msgid ""
"details about damping."
msgstr ""
-#: doc/classes/Area.xml:50 doc/classes/Area2D.xml:52
+#: doc/classes/Area.xml:52 doc/classes/Area2D.xml:54
msgid "The name of the area's audio bus."
msgstr ""
-#: doc/classes/Area.xml:53 doc/classes/Area2D.xml:55
+#: doc/classes/Area.xml:55 doc/classes/Area2D.xml:57
msgid ""
"If [code]true[/code], the area's audio bus overrides the default audio bus."
msgstr ""
-#: doc/classes/Area.xml:56
+#: doc/classes/Area.xml:58
msgid ""
"The area's gravity intensity (in meters per second squared). This value "
"multiplies the gravity vector. This is useful to alter the force of gravity "
"without altering its direction."
msgstr ""
-#: doc/classes/Area.xml:59 doc/classes/Area2D.xml:61
+#: doc/classes/Area.xml:61 doc/classes/Area2D.xml:63
msgid ""
"The falloff factor for point gravity. The greater the value, the faster "
"gravity decreases with distance."
msgstr ""
-#: doc/classes/Area.xml:62 doc/classes/Area2D.xml:64
+#: doc/classes/Area.xml:64 doc/classes/Area2D.xml:66
msgid ""
"If [code]true[/code], gravity is calculated from a point (set via [member "
"gravity_vec]). See also [member space_override]."
msgstr ""
-#: doc/classes/Area.xml:65 doc/classes/Area2D.xml:67
+#: doc/classes/Area.xml:67 doc/classes/Area2D.xml:69
msgid ""
"The area's gravity vector (not normalized). If gravity is a point (see "
"[member gravity_point]), this will be the point of attraction."
msgstr ""
-#: doc/classes/Area.xml:68
+#: doc/classes/Area.xml:70
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
"velocity lost per second.\n"
@@ -6402,61 +6415,61 @@ msgid ""
"about damping."
msgstr ""
-#: doc/classes/Area.xml:72 doc/classes/Area2D.xml:74
+#: doc/classes/Area.xml:74 doc/classes/Area2D.xml:76
msgid "If [code]true[/code], other monitoring areas can detect this area."
msgstr ""
-#: doc/classes/Area.xml:75 doc/classes/Area2D.xml:77
+#: doc/classes/Area.xml:77 doc/classes/Area2D.xml:79
msgid ""
"If [code]true[/code], the area detects bodies or areas entering and exiting "
"it."
msgstr ""
-#: doc/classes/Area.xml:78 doc/classes/Area2D.xml:80
+#: doc/classes/Area.xml:80 doc/classes/Area2D.xml:82
msgid "The area's priority. Higher priority areas are processed first."
msgstr ""
-#: doc/classes/Area.xml:81
+#: doc/classes/Area.xml:83
msgid ""
"The degree to which this area applies reverb to its associated audio. Ranges "
"from [code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
msgstr ""
-#: doc/classes/Area.xml:84
+#: doc/classes/Area.xml:86
msgid "If [code]true[/code], the area applies reverb to its associated audio."
msgstr ""
-#: doc/classes/Area.xml:87
+#: doc/classes/Area.xml:89
msgid "The reverb bus name to use for this area's associated audio."
msgstr ""
-#: doc/classes/Area.xml:90
+#: doc/classes/Area.xml:92
msgid ""
"The degree to which this area's reverb is a uniform effect. Ranges from "
"[code]0[/code] to [code]1[/code] with [code]0.1[/code] precision."
msgstr ""
-#: doc/classes/Area.xml:93 doc/classes/Area2D.xml:83
+#: doc/classes/Area.xml:95 doc/classes/Area2D.xml:85
msgid ""
"Override mode for gravity and damping calculations within this area. See "
"[enum SpaceOverride] for possible values."
msgstr ""
-#: doc/classes/Area.xml:100
+#: doc/classes/Area.xml:102
msgid ""
"Emitted when another Area enters this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
-#: doc/classes/Area.xml:107
+#: doc/classes/Area.xml:109
msgid ""
"Emitted when another Area exits this Area. Requires [member monitoring] to "
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
-#: doc/classes/Area.xml:117 doc/classes/Area.xml:130
+#: doc/classes/Area.xml:119 doc/classes/Area.xml:132
msgid ""
"Emitted when one of another Area's [Shape]s enters one of this Area's "
"[Shape]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6471,7 +6484,7 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:140
+#: doc/classes/Area.xml:142
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] enters this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -6480,7 +6493,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:147
+#: doc/classes/Area.xml:149
msgid ""
"Emitted when a [PhysicsBody] or [GridMap] exits this Area. Requires [member "
"monitoring] to be set to [code]true[/code]. [GridMap]s are detected if the "
@@ -6489,7 +6502,7 @@ msgid ""
"[PhysicsBody] or [GridMap]."
msgstr ""
-#: doc/classes/Area.xml:157 doc/classes/Area.xml:170
+#: doc/classes/Area.xml:159 doc/classes/Area.xml:172
msgid ""
"Emitted when one of a [PhysicsBody] or [GridMap]'s [Shape]s enters one of "
"this Area's [Shape]s. Requires [member monitoring] to be set to [code]true[/"
@@ -6506,29 +6519,29 @@ msgid ""
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area.xml:180 doc/classes/Area2D.xml:170
+#: doc/classes/Area.xml:182 doc/classes/Area2D.xml:172
msgid "This area does not affect gravity/damping."
msgstr ""
-#: doc/classes/Area.xml:183 doc/classes/Area2D.xml:173
+#: doc/classes/Area.xml:185 doc/classes/Area2D.xml:175
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order)."
msgstr ""
-#: doc/classes/Area.xml:186 doc/classes/Area2D.xml:176
+#: doc/classes/Area.xml:188 doc/classes/Area2D.xml:178
msgid ""
"This area adds its gravity/damping values to whatever has been calculated so "
"far (in [member priority] order), ignoring any lower priority areas."
msgstr ""
-#: doc/classes/Area.xml:189 doc/classes/Area2D.xml:179
+#: doc/classes/Area.xml:191 doc/classes/Area2D.xml:181
msgid ""
"This area replaces any gravity/damping, even the defaults, ignoring any "
"lower priority areas."
msgstr ""
-#: doc/classes/Area.xml:192 doc/classes/Area2D.xml:182
+#: doc/classes/Area.xml:194 doc/classes/Area2D.xml:184
msgid ""
"This area replaces any gravity/damping calculated so far (in [member "
"priority] order), but keeps calculating the rest of the areas."
@@ -6567,21 +6580,25 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
#: doc/classes/Area2D.xml:19
msgid ""
-"Returns a list of intersecting [Area2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [Area2D]s. The overlapping area's [member "
+"CollisionObject2D.collision_layer] must be part of this area's [member "
+"CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:25
+#: doc/classes/Area2D.xml:26
msgid ""
-"Returns a list of intersecting [PhysicsBody2D]s. For performance reasons "
-"(collisions are all processed at the same time) this list is modified once "
-"during the physics step, not immediately after objects are moved. Consider "
-"using signals instead."
+"Returns a list of intersecting [PhysicsBody2D]s. The overlapping body's "
+"[member CollisionObject2D.collision_layer] must be part of this area's "
+"[member CollisionObject2D.collision_mask] in order to be detected.\n"
+"For performance reasons (collisions are all processed at the same time) this "
+"list is modified once during the physics step, not immediately after objects "
+"are moved. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:32
+#: doc/classes/Area2D.xml:34
msgid ""
"If [code]true[/code], the given area overlaps the Area2D.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6589,7 +6606,7 @@ msgid ""
"the physics step. Consider using signals instead."
msgstr ""
-#: doc/classes/Area2D.xml:40
+#: doc/classes/Area2D.xml:42
msgid ""
"If [code]true[/code], the given physics body overlaps the Area2D.\n"
"[b]Note:[/b] The result of this test is not immediate after moving objects. "
@@ -6600,7 +6617,7 @@ msgid ""
"register their tiles with collision shapes as a virtual physics body)."
msgstr ""
-#: doc/classes/Area2D.xml:48
+#: doc/classes/Area2D.xml:50
msgid ""
"The rate at which objects stop spinning in this area. Represents the angular "
"velocity lost per second.\n"
@@ -6608,14 +6625,14 @@ msgid ""
"details about damping."
msgstr ""
-#: doc/classes/Area2D.xml:58
+#: doc/classes/Area2D.xml:60
msgid ""
"The area's gravity intensity (in pixels per second squared). This value "
"multiplies the gravity vector. This is useful to alter the force of gravity "
"without altering its direction."
msgstr ""
-#: doc/classes/Area2D.xml:70
+#: doc/classes/Area2D.xml:72
msgid ""
"The rate at which objects stop moving in this area. Represents the linear "
"velocity lost per second.\n"
@@ -6623,21 +6640,21 @@ msgid ""
"about damping."
msgstr ""
-#: doc/classes/Area2D.xml:90
+#: doc/classes/Area2D.xml:92
msgid ""
"Emitted when another Area2D enters this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-#: doc/classes/Area2D.xml:97
+#: doc/classes/Area2D.xml:99
msgid ""
"Emitted when another Area2D exits this Area2D. Requires [member monitoring] "
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-#: doc/classes/Area2D.xml:107
+#: doc/classes/Area2D.xml:109
msgid ""
"Emitted when one of another Area2D's [Shape2D]s enters one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6652,7 +6669,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:120
+#: doc/classes/Area2D.xml:122
msgid ""
"Emitted when one of another Area2D's [Shape2D]s exits one of this Area2D's "
"[Shape2D]s. Requires [member monitoring] to be set to [code]true[/code].\n"
@@ -6667,7 +6684,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:130
+#: doc/classes/Area2D.xml:132
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] enters this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -6676,7 +6693,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:137
+#: doc/classes/Area2D.xml:139
msgid ""
"Emitted when a [PhysicsBody2D] or [TileMap] exits this Area2D. Requires "
"[member monitoring] to be set to [code]true[/code]. [TileMap]s are detected "
@@ -6685,7 +6702,7 @@ msgid ""
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-#: doc/classes/Area2D.xml:147
+#: doc/classes/Area2D.xml:149
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s enters one "
"of this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -6704,7 +6721,7 @@ msgid ""
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-#: doc/classes/Area2D.xml:160
+#: doc/classes/Area2D.xml:162
msgid ""
"Emitted when one of a [PhysicsBody2D] or [TileMap]'s [Shape2D]s exits one of "
"this Area2D's [Shape2D]s. Requires [member monitoring] to be set to "
@@ -10275,42 +10292,47 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
-"no save path is provided it will try to match the path from the current "
+"no root node is provided, parent of this node will be used as root instead. "
+"If no save path is provided it will try to match the path from the current "
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -10324,62 +10346,62 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
msgid "The rotation of the baked custom sky."
msgstr ""
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -10387,35 +10409,35 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -10423,13 +10445,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -10441,66 +10463,78 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr ""
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
msgid "Baking was successful."
msgstr ""
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr ""
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
#, fuzzy
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr "å›žå‚³åƒæ•¸çš„åæ­£åˆ‡å€¼ã€‚"
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr ""
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:133
+#: doc/classes/BakedLightmap.xml:132
+msgid ""
+"Returns if lightmapper can't be created. Unless you are using a custom "
+"lightmapper, please report this as bug."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:135
+msgid ""
+"There is no root node to start baking from. Either provide [code]from_node[/"
+"code] argument or attach this node to a parent that should be used as root."
+msgstr ""
+
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:136
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:139
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:142
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -10956,8 +10990,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -11345,26 +11382,33 @@ msgid "Text [Color] used when the [Button] is disabled."
msgstr ""
#: doc/classes/Button.xml:77
-msgid "Text [Color] used when the [Button] is being hovered."
+msgid ""
+"Text [Color] used when the [Button] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/Button.xml:80
-msgid "Text [Color] used when the [Button] is being pressed."
+msgid "Text [Color] used when the [Button] is being hovered."
msgstr ""
#: doc/classes/Button.xml:83
-msgid "[StyleBox] used when the [Button] is being hovered."
+msgid "Text [Color] used when the [Button] is being pressed."
msgstr ""
#: doc/classes/Button.xml:86
-msgid "The horizontal space between [Button]'s icon and text."
+msgid "[StyleBox] used when the [Button] is being hovered."
msgstr ""
#: doc/classes/Button.xml:89
-msgid "Default [StyleBox] for the [Button]."
+msgid "The horizontal space between [Button]'s icon and text."
msgstr ""
#: doc/classes/Button.xml:92
+msgid "Default [StyleBox] for the [Button]."
+msgstr ""
+
+#: doc/classes/Button.xml:95
msgid "[StyleBox] used when the [Button] is being pressed."
msgstr ""
@@ -12837,80 +12881,96 @@ msgstr ""
msgid "The check icon to display when the [CheckBox] is checked."
msgstr ""
-#: doc/classes/CheckBox.xml:30
+#: doc/classes/CheckBox.xml:28
+msgid "The check icon to display when the [CheckBox] is checked and disabled."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:31
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is disabled."
msgstr ""
-#: doc/classes/CheckBox.xml:33
+#: doc/classes/CheckBox.xml:34
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is focused."
msgstr ""
-#: doc/classes/CheckBox.xml:36
+#: doc/classes/CheckBox.xml:37
msgid "The [Font] to use for the [CheckBox] text."
msgstr ""
-#: doc/classes/CheckBox.xml:39
+#: doc/classes/CheckBox.xml:40
msgid "The [CheckBox] text's font color."
msgstr ""
-#: doc/classes/CheckBox.xml:42
+#: doc/classes/CheckBox.xml:43
msgid "The [CheckBox] text's font color when it's disabled."
msgstr ""
-#: doc/classes/CheckBox.xml:45
+#: doc/classes/CheckBox.xml:46
+msgid ""
+"The [CheckBox] text's font color when it's focused. Only replaces the normal "
+"text color of the checkbox. Disabled, hovered, and pressed states take "
+"precedence over this color."
+msgstr ""
+
+#: doc/classes/CheckBox.xml:49
msgid "The [CheckBox] text's font color when it's hovered."
msgstr ""
-#: doc/classes/CheckBox.xml:48
+#: doc/classes/CheckBox.xml:52
msgid "The [CheckBox] text's font color when it's hovered and pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:51
+#: doc/classes/CheckBox.xml:55
msgid "The [CheckBox] text's font color when it's pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:54
+#: doc/classes/CheckBox.xml:58
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered."
msgstr ""
-#: doc/classes/CheckBox.xml:57
+#: doc/classes/CheckBox.xml:61
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered and "
"pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:60
+#: doc/classes/CheckBox.xml:64
msgid "The separation between the check icon and the text (in pixels)."
msgstr ""
-#: doc/classes/CheckBox.xml:63 doc/classes/CheckButton.xml:58
+#: doc/classes/CheckBox.xml:67 doc/classes/CheckButton.xml:61
msgid "The [StyleBox] to display as a background."
msgstr ""
-#: doc/classes/CheckBox.xml:66
+#: doc/classes/CheckBox.xml:70
msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is pressed."
msgstr ""
-#: doc/classes/CheckBox.xml:69
+#: doc/classes/CheckBox.xml:73
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is checked."
msgstr ""
-#: doc/classes/CheckBox.xml:74
+#: doc/classes/CheckBox.xml:78
msgid ""
"If the [CheckBox] is configured as a radio button, the icon to display when "
"the [CheckBox] is unchecked."
msgstr ""
-#: doc/classes/CheckBox.xml:79
+#: doc/classes/CheckBox.xml:83
msgid "The check icon to display when the [CheckBox] is unchecked."
msgstr ""
+#: doc/classes/CheckBox.xml:86
+msgid ""
+"The check icon to display when the [CheckBox] is unchecked and disabled."
+msgstr ""
+
#: doc/classes/CheckButton.xml:4
msgid "Checkable button. See also [CheckBox]."
msgstr ""
@@ -12954,49 +13014,56 @@ msgid "The [CheckButton] text's font color when it's disabled."
msgstr ""
#: doc/classes/CheckButton.xml:40
-msgid "The [CheckButton] text's font color when it's hovered."
+msgid ""
+"The [CheckButton] text's font color when it's focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/CheckButton.xml:43
-msgid "The [CheckButton] text's font color when it's hovered and pressed."
+msgid "The [CheckButton] text's font color when it's hovered."
msgstr ""
#: doc/classes/CheckButton.xml:46
-msgid "The [CheckButton] text's font color when it's pressed."
+msgid "The [CheckButton] text's font color when it's hovered and pressed."
msgstr ""
#: doc/classes/CheckButton.xml:49
+msgid "The [CheckButton] text's font color when it's pressed."
+msgstr ""
+
+#: doc/classes/CheckButton.xml:52
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered."
msgstr ""
-#: doc/classes/CheckButton.xml:52
+#: doc/classes/CheckButton.xml:55
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is hovered "
"and pressed."
msgstr ""
-#: doc/classes/CheckButton.xml:55
+#: doc/classes/CheckButton.xml:58
msgid "The separation between the toggle icon and the text (in pixels)."
msgstr ""
-#: doc/classes/CheckButton.xml:61
+#: doc/classes/CheckButton.xml:64
msgid "The icon to display when the [CheckButton] is unchecked."
msgstr ""
-#: doc/classes/CheckButton.xml:64
+#: doc/classes/CheckButton.xml:67
msgid "The icon to display when the [CheckButton] is unchecked and disabled."
msgstr ""
-#: doc/classes/CheckButton.xml:67
+#: doc/classes/CheckButton.xml:70
msgid "The icon to display when the [CheckButton] is checked."
msgstr ""
-#: doc/classes/CheckButton.xml:70
+#: doc/classes/CheckButton.xml:73
msgid "The icon to display when the [CheckButton] is checked and disabled."
msgstr ""
-#: doc/classes/CheckButton.xml:73
+#: doc/classes/CheckButton.xml:76
msgid ""
"The [StyleBox] to display as a background when the [CheckButton] is pressed."
msgstr ""
@@ -14772,26 +14839,33 @@ msgid "Text [Color] used when the [ColorPickerButton] is disabled."
msgstr ""
#: doc/classes/ColorPickerButton.xml:80
-msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
+msgid ""
+"Text [Color] used when the [ColorPickerButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/ColorPickerButton.xml:83
-msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
+msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
msgstr ""
#: doc/classes/ColorPickerButton.xml:86
-msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
+msgid "Text [Color] used when the [ColorPickerButton] is being pressed."
msgstr ""
#: doc/classes/ColorPickerButton.xml:89
-msgid "The horizontal space between [ColorPickerButton]'s icon and text."
+msgid "[StyleBox] used when the [ColorPickerButton] is being hovered."
msgstr ""
#: doc/classes/ColorPickerButton.xml:92
-msgid "Default [StyleBox] for the [ColorPickerButton]."
+msgid "The horizontal space between [ColorPickerButton]'s icon and text."
msgstr ""
#: doc/classes/ColorPickerButton.xml:95
+msgid "Default [StyleBox] for the [ColorPickerButton]."
+msgstr ""
+
+#: doc/classes/ColorPickerButton.xml:98
msgid "[StyleBox] used when the [ColorPickerButton] is being pressed."
msgstr ""
@@ -20025,7 +20099,8 @@ msgid ""
"get_resource_type]. They may optionally specify some import presets that "
"affect the import process. EditorImportPlugins are responsible for creating "
"the resources and saving them in the [code].import[/code] directory (see "
-"[member ProjectSettings.application/config/project_data_dir_name]).\n"
+"[member ProjectSettings.application/config/"
+"use_hidden_project_data_directory]).\n"
"Below is an example EditorImportPlugin that imports a [Mesh] from a file "
"with the extension \".special\" or \".spec\":\n"
"[codeblock]\n"
@@ -20152,7 +20227,7 @@ msgstr ""
msgid ""
"Gets the extension used to save this resource in the [code].import[/code] "
"directory (see [member ProjectSettings.application/config/"
-"project_data_dir_name])."
+"use_hidden_project_data_directory])."
msgstr ""
#: doc/classes/EditorImportPlugin.xml:130
@@ -21187,8 +21262,11 @@ msgstr ""
msgid "Emitted when the value of the edited resource was changed."
msgstr ""
-#: doc/classes/EditorResourcePicker.xml:89
-msgid "Emitted when the resource value was set and user clicked to edit it."
+#: doc/classes/EditorResourcePicker.xml:90
+msgid ""
+"Emitted when the resource value was set and user clicked to edit it. When "
+"[code]edit[/code] is [code]true[/code], the signal was caused by the context "
+"menu \"Edit\" option."
msgstr ""
#: doc/classes/EditorResourcePreview.xml:4
@@ -24938,21 +25016,32 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html"
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -24961,14 +25050,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -24978,80 +25071,80 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
msgstr ""
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr ""
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -27807,16 +27900,18 @@ msgstr ""
#: doc/classes/Image.xml:436
msgid ""
"OpenGL texture format [code]RED[/code] with a single component and a "
-"bitdepth of 8."
+"bitdepth of 8.\n"
+"[b]Note:[/b] When using the GLES2 backend, this uses the alpha channel "
+"instead of the red channel for storage."
msgstr ""
-#: doc/classes/Image.xml:439
+#: doc/classes/Image.xml:440
msgid ""
"OpenGL texture format [code]RG[/code] with two components and a bitdepth of "
"8 for each."
msgstr ""
-#: doc/classes/Image.xml:442
+#: doc/classes/Image.xml:443
msgid ""
"OpenGL texture format [code]RGB[/code] with three components, each with a "
"bitdepth of 8.\n"
@@ -27824,7 +27919,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:446
+#: doc/classes/Image.xml:447
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 8.\n"
@@ -27832,73 +27927,73 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:450
+#: doc/classes/Image.xml:451
msgid ""
"OpenGL texture format [code]RGBA[/code] with four components, each with a "
"bitdepth of 4."
msgstr ""
-#: doc/classes/Image.xml:453
+#: doc/classes/Image.xml:454
msgid ""
"OpenGL texture format [code]GL_RGB5_A1[/code] where 5 bits of depth for each "
"component of RGB and one bit for alpha."
msgstr ""
-#: doc/classes/Image.xml:456
+#: doc/classes/Image.xml:457
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 32-"
"bit floating-point value."
msgstr ""
-#: doc/classes/Image.xml:459
+#: doc/classes/Image.xml:460
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:462
+#: doc/classes/Image.xml:463
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:465
+#: doc/classes/Image.xml:466
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 32-bit floating-point values."
msgstr ""
-#: doc/classes/Image.xml:468
+#: doc/classes/Image.xml:469
msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 16-"
"bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:471
+#: doc/classes/Image.xml:472
msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:474
+#: doc/classes/Image.xml:475
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:477
+#: doc/classes/Image.xml:478
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-#: doc/classes/Image.xml:480
+#: doc/classes/Image.xml:481
msgid ""
"A special OpenGL texture format where the three color components have 9 bits "
"of precision and all three share a single 5-bit exponent."
msgstr ""
-#: doc/classes/Image.xml:483
+#: doc/classes/Image.xml:484
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 1, and is the smallest variation "
@@ -27908,7 +28003,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:487
+#: doc/classes/Image.xml:488
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format that uses Block Compression 2, and color data is interpreted "
@@ -27918,7 +28013,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:491
+#: doc/classes/Image.xml:492
msgid ""
"The [url=https://en.wikipedia.org/wiki/S3_Texture_Compression]S3TC[/url] "
"texture format also known as Block Compression 3 or BC3 that contains 64 "
@@ -27929,7 +28024,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:495
+#: doc/classes/Image.xml:496
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -27937,7 +28032,7 @@ msgid ""
"DXT5 uses for the alpha channel."
msgstr ""
-#: doc/classes/Image.xml:498
+#: doc/classes/Image.xml:499
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"Red_Green_Texture_Compression]Red Green Texture Compression[/url], "
@@ -27945,7 +28040,7 @@ msgid ""
"algorithm that DXT5 uses for the alpha channel."
msgstr ""
-#: doc/classes/Image.xml:501
+#: doc/classes/Image.xml:502
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned normalized "
@@ -27954,21 +28049,21 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:505
+#: doc/classes/Image.xml:506
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with signed floating-point "
"RGB components."
msgstr ""
-#: doc/classes/Image.xml:508
+#: doc/classes/Image.xml:509
msgid ""
"Texture format that uses [url=https://www.khronos.org/opengl/wiki/"
"BPTC_Texture_Compression]BPTC[/url] compression with unsigned floating-point "
"RGB components."
msgstr ""
-#: doc/classes/Image.xml:511
+#: doc/classes/Image.xml:512
msgid ""
"Texture format used on PowerVR-supported mobile platforms, uses 2-bit color "
"depth with no alpha. More information can be found [url=https://en.wikipedia."
@@ -27977,25 +28072,25 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:515
+#: doc/classes/Image.xml:516
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with an "
"alpha component."
msgstr ""
-#: doc/classes/Image.xml:518
+#: doc/classes/Image.xml:519
msgid ""
"Similar to [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with 4-"
"bit color depth and no alpha."
msgstr ""
-#: doc/classes/Image.xml:521
+#: doc/classes/Image.xml:522
msgid ""
"Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC4[/url], but with an "
"alpha component."
msgstr ""
-#: doc/classes/Image.xml:524
+#: doc/classes/Image.xml:525
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC1]Ericsson Texture Compression format 1[/"
@@ -28003,7 +28098,7 @@ msgid ""
"standard. This format cannot store an alpha channel."
msgstr ""
-#: doc/classes/Image.xml:527
+#: doc/classes/Image.xml:528
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28011,7 +28106,7 @@ msgid ""
"unsigned data."
msgstr ""
-#: doc/classes/Image.xml:530
+#: doc/classes/Image.xml:531
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28019,7 +28114,7 @@ msgid ""
"channel of signed data."
msgstr ""
-#: doc/classes/Image.xml:533
+#: doc/classes/Image.xml:534
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28027,7 +28122,7 @@ msgid ""
"of unsigned data."
msgstr ""
-#: doc/classes/Image.xml:536
+#: doc/classes/Image.xml:537
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28035,7 +28130,7 @@ msgid ""
"channels of signed data."
msgstr ""
-#: doc/classes/Image.xml:539
+#: doc/classes/Image.xml:540
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28045,7 +28140,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:543
+#: doc/classes/Image.xml:544
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28055,7 +28150,7 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:547
+#: doc/classes/Image.xml:548
msgid ""
"[url=https://en.wikipedia.org/wiki/"
"Ericsson_Texture_Compression#ETC2_and_EAC]Ericsson Texture Compression "
@@ -28066,31 +28161,31 @@ msgid ""
"conversion is performed."
msgstr ""
-#: doc/classes/Image.xml:551
+#: doc/classes/Image.xml:552
msgid "Represents the size of the [enum Format] enum."
msgstr ""
-#: doc/classes/Image.xml:554
+#: doc/classes/Image.xml:555
msgid ""
"Performs nearest-neighbor interpolation. If the image is resized, it will be "
"pixelated."
msgstr ""
-#: doc/classes/Image.xml:557
+#: doc/classes/Image.xml:558
msgid ""
"Performs bilinear interpolation. If the image is resized, it will be blurry. "
"This mode is faster than [constant INTERPOLATE_CUBIC], but it results in "
"lower quality."
msgstr ""
-#: doc/classes/Image.xml:560
+#: doc/classes/Image.xml:561
msgid ""
"Performs cubic interpolation. If the image is resized, it will be blurry. "
"This mode often gives better results compared to [constant "
"INTERPOLATE_BILINEAR], at the cost of being slower."
msgstr ""
-#: doc/classes/Image.xml:563
+#: doc/classes/Image.xml:564
msgid ""
"Performs bilinear separately on the two most-suited mipmap levels, then "
"linearly interpolates between them.\n"
@@ -28105,55 +28200,55 @@ msgid ""
"a new set will be generated for the resulting image."
msgstr ""
-#: doc/classes/Image.xml:570
+#: doc/classes/Image.xml:571
msgid ""
"Performs Lanczos interpolation. This is the slowest image resizing mode, but "
"it typically gives the best results, especially when downscalng images."
msgstr ""
-#: doc/classes/Image.xml:573
+#: doc/classes/Image.xml:574
msgid "Image does not have alpha."
msgstr ""
-#: doc/classes/Image.xml:576
+#: doc/classes/Image.xml:577
msgid "Image stores alpha in a single bit."
msgstr ""
-#: doc/classes/Image.xml:579
+#: doc/classes/Image.xml:580
msgid "Image uses alpha."
msgstr ""
-#: doc/classes/Image.xml:582
+#: doc/classes/Image.xml:583
msgid "Use S3TC compression."
msgstr ""
-#: doc/classes/Image.xml:585
+#: doc/classes/Image.xml:586
msgid "Use PVRTC2 compression."
msgstr ""
-#: doc/classes/Image.xml:588
+#: doc/classes/Image.xml:589
msgid "Use PVRTC4 compression."
msgstr ""
-#: doc/classes/Image.xml:591
+#: doc/classes/Image.xml:592
msgid "Use ETC compression."
msgstr ""
-#: doc/classes/Image.xml:594
+#: doc/classes/Image.xml:595
msgid "Use ETC2 compression."
msgstr ""
-#: doc/classes/Image.xml:597
+#: doc/classes/Image.xml:598
msgid ""
"Source texture (before compression) is a regular texture. Default for all "
"textures."
msgstr ""
-#: doc/classes/Image.xml:600
+#: doc/classes/Image.xml:601
msgid "Source texture (before compression) is in sRGB space."
msgstr ""
-#: doc/classes/Image.xml:603
+#: doc/classes/Image.xml:604
msgid ""
"Source texture (before compression) is a normal texture (e.g. it can be "
"compressed into two channels)."
@@ -28378,6 +28473,17 @@ msgstr ""
#: doc/classes/Input.xml:43
msgid ""
+"Sends all input events which are in the current buffer to the game loop. "
+"These events may have been buffered as a result of accumulated input "
+"([method set_use_accumulated_input]) or agile input flushing ([member "
+"ProjectSettings.input_devices/buffering/agile_event_flushing]).\n"
+"The engine will already do this itself at key execution points (at least "
+"once per frame). However, this can be useful in advanced cases where you "
+"want precise control over the timing of event handling."
+msgstr ""
+
+#: doc/classes/Input.xml:50
+msgid ""
"Returns the acceleration of the device's accelerometer sensor, if the device "
"has one. Otherwise, the method returns [constant Vector3.ZERO].\n"
"Note this method returns an empty [Vector3] when running from the editor "
@@ -28389,7 +28495,7 @@ msgid ""
"the Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:53
+#: doc/classes/Input.xml:60
msgid ""
"Returns a value between 0 and 1 representing the raw intensity of the given "
"action, ignoring the action's deadzone. In most cases, you should use "
@@ -28399,7 +28505,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:62
+#: doc/classes/Input.xml:69
msgid ""
"Returns a value between 0 and 1 representing the intensity of the given "
"action. In a joypad, for example, the further away the axis (analog sticks "
@@ -28411,7 +28517,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:71
+#: doc/classes/Input.xml:78
msgid ""
"Get axis input by specifying two actions, one negative and one positive.\n"
"This is a shorthand for writing [code]Input."
@@ -28419,17 +28525,17 @@ msgid ""
"get_action_strength(\"negative_action\")[/code]."
msgstr ""
-#: doc/classes/Input.xml:78
+#: doc/classes/Input.xml:85
msgid ""
"Returns an [Array] containing the device IDs of all currently connected "
"joypads."
msgstr ""
-#: doc/classes/Input.xml:84
+#: doc/classes/Input.xml:91
msgid "Returns the currently assigned cursor shape (see [enum CursorShape])."
msgstr ""
-#: doc/classes/Input.xml:90
+#: doc/classes/Input.xml:97
msgid ""
"Returns the gravity of the device's accelerometer sensor, if the device has "
"one. Otherwise, the method returns [constant Vector3.ZERO].\n"
@@ -28439,7 +28545,7 @@ msgid ""
"Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
-#: doc/classes/Input.xml:97
+#: doc/classes/Input.xml:104
msgid ""
"Returns the rotation rate in rad/s around a device's X, Y, and Z axes of the "
"gyroscope sensor, if the device has one. Otherwise, the method returns "
@@ -28448,53 +28554,53 @@ msgid ""
"it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:106
+#: doc/classes/Input.xml:113
msgid ""
"Returns the current value of the joypad axis at given index (see [enum "
"JoystickList])."
msgstr ""
-#: doc/classes/Input.xml:113
+#: doc/classes/Input.xml:120
msgid "Returns the index of the provided axis name."
msgstr ""
-#: doc/classes/Input.xml:120
+#: doc/classes/Input.xml:127
msgid ""
"Receives a [enum JoystickList] axis and returns its equivalent name as a "
"string."
msgstr ""
-#: doc/classes/Input.xml:127
+#: doc/classes/Input.xml:134
msgid "Returns the index of the provided button name."
msgstr ""
-#: doc/classes/Input.xml:134
+#: doc/classes/Input.xml:141
msgid ""
"Receives a gamepad button from [enum JoystickList] and returns its "
"equivalent name as a string."
msgstr ""
-#: doc/classes/Input.xml:141
+#: doc/classes/Input.xml:148
msgid ""
"Returns a SDL2-compatible device GUID on platforms that use gamepad "
"remapping. Returns [code]\"Default Gamepad\"[/code] otherwise."
msgstr ""
-#: doc/classes/Input.xml:148
+#: doc/classes/Input.xml:155
msgid "Returns the name of the joypad at the specified device index."
msgstr ""
-#: doc/classes/Input.xml:155
+#: doc/classes/Input.xml:162
msgid "Returns the duration of the current vibration effect in seconds."
msgstr ""
-#: doc/classes/Input.xml:162
+#: doc/classes/Input.xml:169
msgid ""
"Returns the strength of the joypad vibration: x is the strength of the weak "
"motor, and y is the strength of the strong motor."
msgstr ""
-#: doc/classes/Input.xml:168
+#: doc/classes/Input.xml:175
msgid ""
"Returns the mouse speed for the last time the cursor was moved, and this "
"until the next frame where the mouse moves. This means that even if the "
@@ -28502,7 +28608,7 @@ msgid ""
"motion."
msgstr ""
-#: doc/classes/Input.xml:174
+#: doc/classes/Input.xml:181
msgid ""
"Returns the magnetic field strength in micro-Tesla for all axes of the "
"device's magnetometer sensor, if the device has one. Otherwise, the method "
@@ -28511,17 +28617,17 @@ msgid ""
"platforms, it always returns [constant Vector3.ZERO]."
msgstr ""
-#: doc/classes/Input.xml:181
+#: doc/classes/Input.xml:188
msgid ""
"Returns mouse buttons as a bitmask. If multiple mouse buttons are pressed at "
"the same time, the bits are added together."
msgstr ""
-#: doc/classes/Input.xml:187
+#: doc/classes/Input.xml:194
msgid "Returns the mouse mode. See the constants for more information."
msgstr ""
-#: doc/classes/Input.xml:198
+#: doc/classes/Input.xml:205
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -28534,7 +28640,7 @@ msgid ""
"want (on the range of 0 to 1)."
msgstr ""
-#: doc/classes/Input.xml:208
+#: doc/classes/Input.xml:215
msgid ""
"Returns [code]true[/code] when the user starts pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user pressed down "
@@ -28546,7 +28652,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:218
+#: doc/classes/Input.xml:225
msgid ""
"Returns [code]true[/code] when the user stops pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user released the "
@@ -28556,7 +28662,7 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:227
+#: doc/classes/Input.xml:234
msgid ""
"Returns [code]true[/code] if you are pressing the action event. Note that if "
"an action has multiple buttons assigned and more than one of them is "
@@ -28567,13 +28673,13 @@ msgid ""
"for [InputEventJoypadMotion] events."
msgstr ""
-#: doc/classes/Input.xml:236
+#: doc/classes/Input.xml:243
msgid ""
"Returns [code]true[/code] if you are pressing the joypad button (see [enum "
"JoystickList])."
msgstr ""
-#: doc/classes/Input.xml:243
+#: doc/classes/Input.xml:250
msgid ""
"Returns [code]true[/code] if the system knows the specified device. This "
"means that it sets all button and axis indices exactly as defined in [enum "
@@ -28581,19 +28687,19 @@ msgid ""
"but you can still retrieve events from them."
msgstr ""
-#: doc/classes/Input.xml:250
+#: doc/classes/Input.xml:257
msgid ""
"Returns [code]true[/code] if you are pressing the key. You can pass a [enum "
"KeyList] constant."
msgstr ""
-#: doc/classes/Input.xml:257
+#: doc/classes/Input.xml:264
msgid ""
"Returns [code]true[/code] if you are pressing the mouse button specified "
"with [enum ButtonList]."
msgstr ""
-#: doc/classes/Input.xml:267
+#: doc/classes/Input.xml:274
msgid ""
"Notifies the [Input] singleton that a connection has changed, to update the "
"state for the [code]device[/code] index.\n"
@@ -28602,7 +28708,7 @@ msgid ""
"triggered internally."
msgstr ""
-#: doc/classes/Input.xml:275
+#: doc/classes/Input.xml:282
msgid ""
"Feeds an [InputEvent] to the game. Can be used to artificially trigger input "
"events from code. Also generates [method Node._input] calls.\n"
@@ -28615,12 +28721,21 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Input.xml:289
+#: doc/classes/Input.xml:296
msgid ""
"Removes all mappings from the internal database that match the given GUID."
msgstr ""
-#: doc/classes/Input.xml:298
+#: doc/classes/Input.xml:303
+msgid ""
+"Sets the acceleration value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:313
msgid ""
"Sets a custom mouse cursor image, which is only visible inside the game "
"window. The hotspot can also be specified. Passing [code]null[/code] to the "
@@ -28635,7 +28750,7 @@ msgid ""
"compression mode can't be used for custom cursors."
msgstr ""
-#: doc/classes/Input.xml:309
+#: doc/classes/Input.xml:324
msgid ""
"Sets the default cursor shape to be used in the viewport instead of "
"[constant CURSOR_ARROW].\n"
@@ -28645,11 +28760,38 @@ msgid ""
"cursor immediately."
msgstr ""
-#: doc/classes/Input.xml:318
+#: doc/classes/Input.xml:333
+msgid ""
+"Sets the gravity value of the accelerometer sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:341
+msgid ""
+"Sets the value of the rotation rate of the gyroscope sensor. Can be used for "
+"debugging on devices without a hardware sensor, for example in an editor on "
+"a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:349
+msgid ""
+"Sets the value of the magnetic field of the magnetometer sensor. Can be used "
+"for debugging on devices without a hardware sensor, for example in an editor "
+"on a PC.\n"
+"[b]Note:[/b] This value can be immediately overwritten by the hardware "
+"sensor value on Android and iOS."
+msgstr ""
+
+#: doc/classes/Input.xml:357
msgid "Sets the mouse mode. See the constants for more information."
msgstr ""
-#: doc/classes/Input.xml:325
+#: doc/classes/Input.xml:364
msgid ""
"Enables or disables the accumulation of similar input events sent by the "
"operating system. When input accumulation is enabled, all input events "
@@ -28663,7 +28805,7 @@ msgid ""
"results that closely follow the actual input."
msgstr ""
-#: doc/classes/Input.xml:336
+#: doc/classes/Input.xml:375
msgid ""
"Starts to vibrate the joypad. Joypads usually come with two rumble motors, a "
"strong and a weak one. [code]weak_magnitude[/code] is the strength of the "
@@ -28676,34 +28818,34 @@ msgid ""
"few seconds."
msgstr ""
-#: doc/classes/Input.xml:344
+#: doc/classes/Input.xml:383
msgid "Stops the vibration of the joypad."
msgstr ""
-#: doc/classes/Input.xml:351
+#: doc/classes/Input.xml:390
msgid ""
"Vibrate Android and iOS devices.\n"
"[b]Note:[/b] It needs [code]VIBRATE[/code] permission for Android at export "
"settings. iOS does not support duration."
msgstr ""
-#: doc/classes/Input.xml:359
+#: doc/classes/Input.xml:398
msgid "Sets the mouse position to the specified vector."
msgstr ""
-#: doc/classes/Input.xml:368
+#: doc/classes/Input.xml:407
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
-#: doc/classes/Input.xml:374
+#: doc/classes/Input.xml:413
msgid "Makes the mouse cursor visible if it is hidden."
msgstr ""
-#: doc/classes/Input.xml:377
+#: doc/classes/Input.xml:416
msgid "Makes the mouse cursor hidden if it is visible."
msgstr ""
-#: doc/classes/Input.xml:380
+#: doc/classes/Input.xml:419
msgid ""
"Captures the mouse. The mouse will be hidden and its position locked at the "
"center of the screen.\n"
@@ -28711,83 +28853,83 @@ msgid ""
"need to use [member InputEventMouseMotion.relative]."
msgstr ""
-#: doc/classes/Input.xml:384
+#: doc/classes/Input.xml:423
msgid "Makes the mouse cursor visible but confines it to the game window."
msgstr ""
-#: doc/classes/Input.xml:387
+#: doc/classes/Input.xml:426
msgid "Arrow cursor. Standard, default pointing cursor."
msgstr ""
-#: doc/classes/Input.xml:390
+#: doc/classes/Input.xml:429
msgid ""
"I-beam cursor. Usually used to show where the text cursor will appear when "
"the mouse is clicked."
msgstr ""
-#: doc/classes/Input.xml:393
+#: doc/classes/Input.xml:432
msgid ""
"Pointing hand cursor. Usually used to indicate the pointer is over a link or "
"other interactable item."
msgstr ""
-#: doc/classes/Input.xml:396
+#: doc/classes/Input.xml:435
msgid ""
"Cross cursor. Typically appears over regions in which a drawing operation "
"can be performed or for selections."
msgstr ""
-#: doc/classes/Input.xml:399
+#: doc/classes/Input.xml:438
msgid ""
"Wait cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application is still usable during the "
"operation."
msgstr ""
-#: doc/classes/Input.xml:402
+#: doc/classes/Input.xml:441
msgid ""
"Busy cursor. Indicates that the application is busy performing an operation. "
"This cursor shape denotes that the application isn't usable during the "
"operation (e.g. something is blocking its main thread)."
msgstr ""
-#: doc/classes/Input.xml:405
+#: doc/classes/Input.xml:444
msgid "Drag cursor. Usually displayed when dragging something."
msgstr ""
-#: doc/classes/Input.xml:408
+#: doc/classes/Input.xml:447
msgid ""
"Can drop cursor. Usually displayed when dragging something to indicate that "
"it can be dropped at the current position."
msgstr ""
-#: doc/classes/Input.xml:411
+#: doc/classes/Input.xml:450
msgid ""
"Forbidden cursor. Indicates that the current action is forbidden (for "
"example, when dragging something) or that the control at a position is "
"disabled."
msgstr ""
-#: doc/classes/Input.xml:414
+#: doc/classes/Input.xml:453
msgid ""
"Vertical resize mouse cursor. A double-headed vertical arrow. It tells the "
"user they can resize the window or the panel vertically."
msgstr ""
-#: doc/classes/Input.xml:417
+#: doc/classes/Input.xml:456
msgid ""
"Horizontal resize mouse cursor. A double-headed horizontal arrow. It tells "
"the user they can resize the window or the panel horizontally."
msgstr ""
-#: doc/classes/Input.xml:420
+#: doc/classes/Input.xml:459
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the bottom left to the top right. It tells the user they can resize the "
"window or the panel both horizontally and vertically."
msgstr ""
-#: doc/classes/Input.xml:423
+#: doc/classes/Input.xml:462
msgid ""
"Window resize mouse cursor. The cursor is a double-headed arrow that goes "
"from the top left to the bottom right, the opposite of [constant "
@@ -28795,23 +28937,23 @@ msgid ""
"both horizontally and vertically."
msgstr ""
-#: doc/classes/Input.xml:426
+#: doc/classes/Input.xml:465
msgid "Move cursor. Indicates that something can be moved."
msgstr ""
-#: doc/classes/Input.xml:429
+#: doc/classes/Input.xml:468
msgid ""
"Vertical split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_VSIZE]."
msgstr ""
-#: doc/classes/Input.xml:432
+#: doc/classes/Input.xml:471
msgid ""
"Horizontal split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_HSIZE]."
msgstr ""
-#: doc/classes/Input.xml:435
+#: doc/classes/Input.xml:474
msgid "Help cursor. Usually a question mark."
msgstr ""
@@ -29227,7 +29369,9 @@ msgid "The drag position."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -30540,7 +30684,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30605,22 +30750,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -30635,7 +30782,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -30643,19 +30790,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -30726,7 +30873,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30784,7 +30932,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -32071,14 +32221,21 @@ msgid "Default text [Color] of the [LinkButton]."
msgstr ""
#: doc/classes/LinkButton.xml:46
-msgid "Text [Color] used when the [LinkButton] is being hovered."
+msgid ""
+"Text [Color] used when the [LinkButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/LinkButton.xml:49
-msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgid "Text [Color] used when the [LinkButton] is being hovered."
msgstr ""
#: doc/classes/LinkButton.xml:52
+msgid "Text [Color] used when the [LinkButton] is being pressed."
+msgstr ""
+
+#: doc/classes/LinkButton.xml:55
msgid "The vertical space between the baseline of text and the underline."
msgstr ""
@@ -32571,26 +32728,33 @@ msgid "Text [Color] used when the [MenuButton] is disabled."
msgstr ""
#: doc/classes/MenuButton.xml:64
-msgid "Text [Color] used when the [MenuButton] is being hovered."
+msgid ""
+"Text [Color] used when the [MenuButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/MenuButton.xml:67
-msgid "Text [Color] used when the [MenuButton] is being pressed."
+msgid "Text [Color] used when the [MenuButton] is being hovered."
msgstr ""
#: doc/classes/MenuButton.xml:70
-msgid "[StyleBox] used when the [MenuButton] is being hovered."
+msgid "Text [Color] used when the [MenuButton] is being pressed."
msgstr ""
#: doc/classes/MenuButton.xml:73
-msgid "The horizontal space between [MenuButton]'s icon and text."
+msgid "[StyleBox] used when the [MenuButton] is being hovered."
msgstr ""
#: doc/classes/MenuButton.xml:76
-msgid "Default [StyleBox] for the [MenuButton]."
+msgid "The horizontal space between [MenuButton]'s icon and text."
msgstr ""
#: doc/classes/MenuButton.xml:79
+msgid "Default [StyleBox] for the [MenuButton]."
+msgstr ""
+
+#: doc/classes/MenuButton.xml:82
msgid "[StyleBox] used when the [MenuButton] is being pressed."
msgstr ""
@@ -34324,7 +34488,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -37208,26 +37372,33 @@ msgid "Text [Color] used when the [OptionButton] is disabled."
msgstr ""
#: doc/classes/OptionButton.xml:212
-msgid "Text [Color] used when the [OptionButton] is being hovered."
+msgid ""
+"Text [Color] used when the [OptionButton] is focused. Only replaces the "
+"normal text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/OptionButton.xml:215
-msgid "Text [Color] used when the [OptionButton] is being pressed."
+msgid "Text [Color] used when the [OptionButton] is being hovered."
msgstr ""
#: doc/classes/OptionButton.xml:218
-msgid "[StyleBox] used when the [OptionButton] is being hovered."
+msgid "Text [Color] used when the [OptionButton] is being pressed."
msgstr ""
#: doc/classes/OptionButton.xml:221
-msgid "The horizontal space between [OptionButton]'s icon and text."
+msgid "[StyleBox] used when the [OptionButton] is being hovered."
msgstr ""
#: doc/classes/OptionButton.xml:224
-msgid "Default [StyleBox] for the [OptionButton]."
+msgid "The horizontal space between [OptionButton]'s icon and text."
msgstr ""
#: doc/classes/OptionButton.xml:227
+msgid "Default [StyleBox] for the [OptionButton]."
+msgstr ""
+
+#: doc/classes/OptionButton.xml:230
msgid "[StyleBox] used when the [OptionButton] is being pressed."
msgstr ""
@@ -37633,7 +37804,7 @@ msgstr ""
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -37663,14 +37834,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -37680,7 +37851,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -40181,17 +40352,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -40209,11 +40406,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -40408,7 +40605,9 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-msgid "Returns the [Physics2DDirectBodyState] of the body."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
@@ -41211,6 +41410,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -41228,7 +41445,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -41342,7 +41559,9 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-msgid "Returns the [PhysicsDirectBodyState] of the body."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/PhysicsServer.xml:370
@@ -42324,27 +42543,27 @@ msgstr ""
msgid "Removes an element from the array by index."
msgstr ""
-#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolColorArray.xml:66
-#: doc/classes/PoolIntArray.xml:67 doc/classes/PoolRealArray.xml:67
-#: doc/classes/PoolStringArray.xml:74 doc/classes/PoolVector2Array.xml:67
-#: doc/classes/PoolVector3Array.xml:66
+#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolIntArray.xml:67
+#: doc/classes/PoolRealArray.xml:67
msgid ""
"Sets the size of the array. If the array is grown, reserves elements at the "
"end of the array. If the array is shrunk, truncates the array to the new "
-"size."
+"size.\n"
+"[b]Note:[/b] Added elements are not automatically initialized to 0 and will "
+"contain garbage, i.e. indeterminate values."
msgstr ""
-#: doc/classes/PoolByteArray.xml:121
+#: doc/classes/PoolByteArray.xml:122
msgid "Changes the byte at the given index."
msgstr ""
-#: doc/classes/PoolByteArray.xml:127 doc/classes/PoolColorArray.xml:79
-#: doc/classes/PoolRealArray.xml:80 doc/classes/PoolStringArray.xml:87
+#: doc/classes/PoolByteArray.xml:128 doc/classes/PoolColorArray.xml:79
+#: doc/classes/PoolRealArray.xml:81 doc/classes/PoolStringArray.xml:87
#: doc/classes/PoolVector2Array.xml:80 doc/classes/PoolVector3Array.xml:79
msgid "Returns the size of the array."
msgstr ""
-#: doc/classes/PoolByteArray.xml:135
+#: doc/classes/PoolByteArray.xml:136
msgid ""
"Returns the slice of the [PoolByteArray] between indices (inclusive) as a "
"new [PoolByteArray]. Any negative index is considered to be from the end of "
@@ -42376,6 +42595,14 @@ msgstr ""
msgid "Appends a value to the array."
msgstr ""
+#: doc/classes/PoolColorArray.xml:66 doc/classes/PoolStringArray.xml:74
+#: doc/classes/PoolVector2Array.xml:67 doc/classes/PoolVector3Array.xml:66
+msgid ""
+"Sets the size of the array. If the array is grown, reserves elements at the "
+"end of the array. If the array is shrunk, truncates the array to the new "
+"size."
+msgstr ""
+
#: doc/classes/PoolColorArray.xml:73
msgid "Changes the [Color] at the given index."
msgstr ""
@@ -42412,11 +42639,11 @@ msgid ""
"valid, or at the end of the array ([code]idx == size()[/code])."
msgstr ""
-#: doc/classes/PoolIntArray.xml:74
+#: doc/classes/PoolIntArray.xml:75
msgid "Changes the int at the given index."
msgstr ""
-#: doc/classes/PoolIntArray.xml:80
+#: doc/classes/PoolIntArray.xml:81
msgid "Returns the array size."
msgstr ""
@@ -42448,7 +42675,7 @@ msgstr ""
msgid "Appends a [PoolRealArray] at the end of this array."
msgstr ""
-#: doc/classes/PoolRealArray.xml:74
+#: doc/classes/PoolRealArray.xml:75
msgid "Changes the float at the given index."
msgstr ""
@@ -43715,18 +43942,6 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:204
msgid ""
-"The project data directory is used for storing project-specific data "
-"(metadata, shader cache, etc.).\n"
-"[b]Note:[/b] Restart the application after changing this setting.\n"
-"[b]Note:[/b] Changing this value can help on platforms or with third-party "
-"tools where specific directory patterns are disallowed. Only modify this "
-"setting if you know that your environment requires it, as changing the "
-"default can impact compatibility with some external tools or plugins which "
-"expect the default [code].import[/code] folder."
-msgstr ""
-
-#: doc/classes/ProjectSettings.xml:209
-msgid ""
"Specifies a file to override project settings. For example: [code]user://"
"custom_settings.cfg[/code]. See \"Overriding\" in the [ProjectSettings] "
"class description at the top for more information.\n"
@@ -43734,7 +43949,7 @@ msgid ""
"code] will still be read to override the project settings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:213
+#: doc/classes/ProjectSettings.xml:208
msgid ""
"If [code]true[/code], the project will save user data to its own user "
"directory (see [member application/config/custom_user_dir_name]). This "
@@ -43744,13 +43959,28 @@ msgid ""
"user data directory)/Godot/app_userdata/(project name)[/code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:216
+#: doc/classes/ProjectSettings.xml:211
+msgid ""
+"If [code]true[/code], the project will use a hidden directory ([code]."
+"import[/code]) for storing project-specific data (metadata, shader cache, "
+"etc.).\n"
+"If [code]false[/code], a non-hidden directory ([code]import[/code]) will be "
+"used instead.\n"
+"[b]Note:[/b] Restart the application after changing this setting.\n"
+"[b]Note:[/b] Changing this value can help on platforms or with third-party "
+"tools where hidden directory patterns are disallowed. Only modify this "
+"setting if you know that your environment requires it, as changing the "
+"default can impact compatibility with some external tools or plugins which "
+"expect the default [code].import[/code] folder."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:217
msgid ""
"Icon set in [code].ico[/code] format used on Windows to set the game's icon. "
"This is done automatically on start by calling [method OS.set_native_icon]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:219
+#: doc/classes/ProjectSettings.xml:220
msgid ""
"Time samples for frame deltas are subject to random variation introduced by "
"the platform, even when frames are displayed at regular intervals thanks to "
@@ -43764,14 +43994,14 @@ msgid ""
"adequate to render frames at the refresh rate."
msgstr ""
-#: doc/classes/ProjectSettings.xml:224
+#: doc/classes/ProjectSettings.xml:225
msgid ""
"[b]Experimental.[/b] Shifts the measurement of delta time for each frame to "
"just after the drawing has taken place. This may lead to more consistent "
"deltas and a reduction in frame stutters."
msgstr ""
-#: doc/classes/ProjectSettings.xml:227
+#: doc/classes/ProjectSettings.xml:228
msgid ""
"If [code]true[/code], disables printing to standard error. If [code]true[/"
"code], this also hides error and warning messages printed by [method "
@@ -43780,7 +44010,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:231
+#: doc/classes/ProjectSettings.xml:232
msgid ""
"If [code]true[/code], disables printing to standard output. This is "
"equivalent to starting the editor or project with the [code]--quiet[/code] "
@@ -43788,7 +44018,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:235
+#: doc/classes/ProjectSettings.xml:236
msgid ""
"If [code]true[/code], flushes the standard output stream every time a line "
"is printed. This affects both terminal logging and file logging.\n"
@@ -43804,20 +44034,20 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:241
+#: doc/classes/ProjectSettings.xml:242
msgid ""
"Debug build override for [member application/run/flush_stdout_on_print], as "
"performance is less important during debugging.\n"
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:245
+#: doc/classes/ProjectSettings.xml:246
msgid ""
"Forces a delay between frames in the main loop (in milliseconds). This may "
"be useful if you plan to disable vertical synchronization."
msgstr ""
-#: doc/classes/ProjectSettings.xml:248
+#: doc/classes/ProjectSettings.xml:249
msgid ""
"If [code]true[/code], enables low-processor usage mode. This setting only "
"works on desktop platforms. The screen is not redrawn if nothing changes "
@@ -43825,75 +44055,81 @@ msgid ""
"useless (and can hurt performance) in most games."
msgstr ""
-#: doc/classes/ProjectSettings.xml:251
+#: doc/classes/ProjectSettings.xml:252
msgid ""
"Amount of sleeping between frames when the low-processor usage mode is "
"enabled (in microseconds). Higher values will result in lower CPU usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:254
+#: doc/classes/ProjectSettings.xml:255
msgid "Path to the main scene file that will be loaded when the project runs."
msgstr ""
-#: doc/classes/ProjectSettings.xml:257 doc/classes/ProjectSettings.xml:260
+#: doc/classes/ProjectSettings.xml:258 doc/classes/ProjectSettings.xml:261
msgid ""
"Audio buses will disable automatically when sound goes below a given dB "
"threshold for a given time. This saves CPU as effects assigned to that bus "
"will no longer do any processing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:263
+#: doc/classes/ProjectSettings.xml:264
msgid ""
"Default [AudioBusLayout] resource file to use in the project, unless "
"overridden by the scene."
msgstr ""
-#: doc/classes/ProjectSettings.xml:266
+#: doc/classes/ProjectSettings.xml:267
msgid ""
"Specifies the audio driver to use. This setting is platform-dependent as "
"each platform supports different audio drivers. If left empty, the default "
"audio driver will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:269
+#: doc/classes/ProjectSettings.xml:270
msgid ""
"If [code]true[/code], microphone input will be allowed. This requires "
"appropriate permissions to be set when exporting to Android or iOS."
msgstr ""
-#: doc/classes/ProjectSettings.xml:272
+#: doc/classes/ProjectSettings.xml:273
msgid ""
"The mixing rate used for audio (in Hz). In general, it's better to not touch "
"this and leave it to the host operating system."
msgstr ""
-#: doc/classes/ProjectSettings.xml:275
+#: doc/classes/ProjectSettings.xml:276
msgid ""
"Safer override for [member audio/mix_rate] in the Web platform. Here "
"[code]0[/code] means \"let the browser choose\" (since some browsers do not "
"like forcing the mix rate)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:278
+#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:281
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:284
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:287
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43903,7 +44139,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:290
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43913,27 +44149,27 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:293
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:296
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
-#: doc/classes/ProjectSettings.xml:299
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:302
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -43941,81 +44177,81 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:305
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:308
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:311
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:314
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:317
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr ""
-#: doc/classes/ProjectSettings.xml:320
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:323
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:326
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:329
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:332
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:335
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:338
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:341
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -44023,109 +44259,109 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:344
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:347
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:350
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:353
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:356
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:359
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:362
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:365
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:368
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:371
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:374
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:377
+#: doc/classes/ProjectSettings.xml:380
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:380
+#: doc/classes/ProjectSettings.xml:383
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:383
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:386
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:389
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:392
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:395
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:398
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -44136,91 +44372,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:403
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:406
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:409
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:412
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:415
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:418
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:421
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:424
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:427
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:430
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:433
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:436
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:439
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr ""
-#: doc/classes/ProjectSettings.xml:442
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:445
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:448
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:451
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -44229,13 +44465,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:455
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:458
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -44245,7 +44481,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:463
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -44253,19 +44489,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:468
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:472
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:476
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -44279,45 +44515,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:481
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:484
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:488
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:491
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:494
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:497
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:500
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -44326,7 +44562,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:503
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -44337,7 +44573,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:507
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -44353,14 +44589,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:515
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:518
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -44368,49 +44604,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:521
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:524
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:529
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:532
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:535
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:538
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:541
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:544
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:547
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -44419,7 +44655,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:551
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44427,7 +44663,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:555
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44435,7 +44671,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:559
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44445,7 +44681,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:563
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -44454,7 +44690,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:567
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -44463,7 +44699,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:571
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44473,7 +44709,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:575
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44481,7 +44717,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:579
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -44491,7 +44727,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:583
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -44501,7 +44737,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:587
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44509,7 +44745,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:591
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -44518,7 +44754,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:595
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44526,7 +44762,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:599
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -44538,477 +44774,477 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:605
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:608
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:611
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:614
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:617
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:620
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:623
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:626
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:629
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:632
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:635
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:638
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:641
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:644
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:647
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:650
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:653
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:656
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:659
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:662
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:665
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:668
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:671
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:674
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:677
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:680
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:683
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:686
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:689
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:692
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:695
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:698
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:701
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:704
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:707
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:710
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:713
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:716
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:719
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:722
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:725
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:728
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:731
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:734
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:737
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:740
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:743
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:746
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:749
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:752
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:755
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:758
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:761
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:764
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:767
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:770
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:773
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:776
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:779
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:782
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:785
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:788
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:791
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:794
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:797
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:800
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:803
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:806
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:809
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:812
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:815
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:818
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:821
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:824
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:827
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:830
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:833
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:836
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:839
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:842
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:845
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:848
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:851
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:854
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:857
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:860
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:863
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:866
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:869
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:872
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:875
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:878
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:881
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr ""
-#: doc/classes/ProjectSettings.xml:884
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:887
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:890
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:893
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:896
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:899
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:902
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:905
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:908
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:911
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:914
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:917
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:920
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:923
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:926
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:929
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:932
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:935
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:938
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:941
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:946
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:949
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -45016,92 +45252,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:952
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:955
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:958
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:961
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:964
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:967
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:970
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:973
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:976
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:979
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:982
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:985
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:988
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:991
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:994
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:997
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1000
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1003
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -45111,33 +45347,33 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1007
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1010
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1013
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1017
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1021
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45150,7 +45386,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1025
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45162,7 +45398,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1033
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45174,7 +45410,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1041
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45187,7 +45423,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1045
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -45195,28 +45431,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1049
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1053
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1056
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1059
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -45226,25 +45462,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1063
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1066
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1069
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1072
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45257,7 +45493,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1076
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45269,7 +45505,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1084
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45281,7 +45517,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1092
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45294,13 +45530,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1096
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1099
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -45308,11 +45544,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1103
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1106
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -45326,7 +45562,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1112
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -45335,7 +45571,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1116
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -45351,7 +45587,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1121
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -45361,7 +45597,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1125
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45371,7 +45607,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1129
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -45382,7 +45618,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1133
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45392,7 +45628,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1137
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -45400,7 +45636,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1141
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -45411,7 +45647,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1145
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -45426,7 +45662,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1151
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -45435,13 +45671,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1156
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1159
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -45450,7 +45686,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1162
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -45460,7 +45696,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1165
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -45472,7 +45708,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1168
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -45482,24 +45718,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1171
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1174
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1177
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1180
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -45508,7 +45744,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1183
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -45516,7 +45752,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1186
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -45525,7 +45761,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1189
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -45535,7 +45771,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1193
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -45543,31 +45779,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1197
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1200
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1203
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1206
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1209
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -45575,7 +45811,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1212
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -45585,46 +45821,53 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1215
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1218
+#: doc/classes/ProjectSettings.xml:1221
+msgid ""
+"iOS specific override for [member rendering/gles2/compatibility/"
+"disable_half_float], due to poor support for half-float vertex compression "
+"on many devices."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml:1224
msgid ""
-"If [code]true[/code] and available on the target device, enables high "
-"floating point precision for all shader computations in GLES2.\n"
+"If [code]true[/code] and available on the target Android device, enables "
+"high floating point precision for all shader computations in GLES2.\n"
"[b]Warning:[/b] High floating point precision can be extremely slow on older "
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1225
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1228
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1231
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1234
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -45632,7 +45875,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1237
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -45642,7 +45885,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1240
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -45651,7 +45894,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1243
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -45660,20 +45903,20 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1246
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1249
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1252
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -45682,7 +45925,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1255
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -45690,7 +45933,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1258
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -45699,7 +45942,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -45709,20 +45952,20 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1267
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1274
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -45731,13 +45974,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -45747,46 +45990,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1293
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1296
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1299
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1302
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1305
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -45796,7 +46039,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -45808,7 +46051,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -45816,7 +46059,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1316
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -45824,7 +46067,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -45833,7 +46076,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1323
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -45847,7 +46090,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1328
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -45857,7 +46100,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1331
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -45866,7 +46109,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1334
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -45876,54 +46119,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1337
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1340
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1343
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1346
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1349
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1352
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1355
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1358
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -45934,61 +46177,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1365
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1368
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1371
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1374
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1377
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1380
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1383
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1386
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -45999,7 +46242,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -46008,26 +46251,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1393 doc/classes/ProjectSettings.xml:1396
#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1405
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1408
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1411
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -46038,20 +46281,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1418
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -46063,52 +46306,52 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1428
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1435
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1438
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1441
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1444
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1447
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1450
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1453
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -46116,7 +46359,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -46126,10 +46369,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -46138,10 +46381,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -46150,10 +46393,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -46162,10 +46405,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -46174,10 +46417,10 @@ msgid ""
"already imported before. To make this setting apply to textures that were "
"already imported, exit the editor, remove the [code].import/[/code] folder "
"located inside the project folder then restart the editor (see [member "
-"application/config/project_data_dir_name])."
+"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -46841,40 +47084,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr ""
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -46882,14 +47139,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -49224,6 +49481,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -49241,7 +49514,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -49249,11 +49522,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -49263,19 +49536,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -54692,20 +54965,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -54716,28 +54994,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -54749,19 +55027,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
@@ -57550,26 +57828,33 @@ msgid "Text [Color] used when the [ToolButton] is disabled."
msgstr ""
#: doc/classes/ToolButton.xml:39
-msgid "Text [Color] used when the [ToolButton] is being hovered."
+msgid ""
+"Text [Color] used when the [ToolButton] is focused. Only replaces the normal "
+"text color of the button. Disabled, hovered, and pressed states take "
+"precedence over this color."
msgstr ""
#: doc/classes/ToolButton.xml:42
-msgid "Text [Color] used when the [ToolButton] is being pressed."
+msgid "Text [Color] used when the [ToolButton] is being hovered."
msgstr ""
#: doc/classes/ToolButton.xml:45
-msgid "[StyleBox] used when the [ToolButton] is being hovered."
+msgid "Text [Color] used when the [ToolButton] is being pressed."
msgstr ""
#: doc/classes/ToolButton.xml:48
-msgid "The horizontal space between [ToolButton]'s icon and text."
+msgid "[StyleBox] used when the [ToolButton] is being hovered."
msgstr ""
#: doc/classes/ToolButton.xml:51
-msgid "Default [StyleBox] for the [ToolButton]."
+msgid "The horizontal space between [ToolButton]'s icon and text."
msgstr ""
#: doc/classes/ToolButton.xml:54
+msgid "Default [StyleBox] for the [ToolButton]."
+msgstr ""
+
+#: doc/classes/ToolButton.xml:57
msgid "[StyleBox] used when the [ToolButton] is being pressed."
msgstr ""
diff --git a/drivers/SCsub b/drivers/SCsub
index 714d4110de..dd81fc645c 100644
--- a/drivers/SCsub
+++ b/drivers/SCsub
@@ -25,10 +25,9 @@ SConscript("winmidi/SCsub")
# Graphics drivers
if env["vulkan"]:
SConscript("vulkan/SCsub")
- SConscript("gles3/SCsub")
+if env["opengl3"]:
SConscript("gl_context/SCsub")
-else:
- SConscript("dummy/SCsub")
+ SConscript("gles3/SCsub")
# Core dependencies
SConscript("png/SCsub")
diff --git a/drivers/gles3/rasterizer_gles3.cpp b/drivers/gles3/rasterizer_gles3.cpp
index 10093d42a3..92c9dfb9ae 100644
--- a/drivers/gles3/rasterizer_gles3.cpp
+++ b/drivers/gles3/rasterizer_gles3.cpp
@@ -68,7 +68,7 @@
#endif
#endif
-#ifndef IPHONE_ENABLED
+#if !defined(IPHONE_ENABLED) && !defined(JAVASCRIPT_ENABLED)
// We include EGL below to get debug callback on GLES2 platforms,
// but EGL is not available on iOS.
#define CAN_DEBUG
diff --git a/drivers/gles3/rasterizer_scene_gles3.cpp b/drivers/gles3/rasterizer_scene_gles3.cpp
index e66bde90fe..c7753e2c5c 100644
--- a/drivers/gles3/rasterizer_scene_gles3.cpp
+++ b/drivers/gles3/rasterizer_scene_gles3.cpp
@@ -421,7 +421,7 @@ RID RasterizerSceneGLES3::render_buffers_create() {
return RID();
}
-void RasterizerSceneGLES3::render_buffers_configure(RID p_render_buffers, RID p_render_target, int p_width, int p_height, RS::ViewportMSAA p_msaa, RS::ViewportScreenSpaceAA p_screen_space_aa, bool p_use_debanding, uint32_t p_view_count) {
+void RasterizerSceneGLES3::render_buffers_configure(RID p_render_buffers, RID p_render_target, int p_internal_width, int p_internal_height, int p_width, int p_height, float p_fsr_sharpness, float p_fsr_mipmap_bias, RS::ViewportMSAA p_msaa, RS::ViewportScreenSpaceAA p_screen_space_aa, bool p_use_debanding, uint32_t p_view_count) {
}
void RasterizerSceneGLES3::gi_set_use_half_resolution(bool p_enable) {
diff --git a/drivers/gles3/rasterizer_scene_gles3.h b/drivers/gles3/rasterizer_scene_gles3.h
index e8d257087f..14ab0eaa4a 100644
--- a/drivers/gles3/rasterizer_scene_gles3.h
+++ b/drivers/gles3/rasterizer_scene_gles3.h
@@ -203,7 +203,7 @@ public:
void set_debug_draw_mode(RS::ViewportDebugDraw p_debug_draw) override;
RID render_buffers_create() override;
- void render_buffers_configure(RID p_render_buffers, RID p_render_target, int p_width, int p_height, RS::ViewportMSAA p_msaa, RS::ViewportScreenSpaceAA p_screen_space_aa, bool p_use_debanding, uint32_t p_view_count) override;
+ void render_buffers_configure(RID p_render_buffers, RID p_render_target, int p_internal_width, int p_internal_height, int p_width, int p_height, float p_fsr_sharpness, float p_fsr_mipmap_bias, RS::ViewportMSAA p_msaa, RS::ViewportScreenSpaceAA p_screen_space_aa, bool p_use_debanding, uint32_t p_view_count) override;
void gi_set_use_half_resolution(bool p_enable) override;
void screen_space_roughness_limiter_set_active(bool p_enable, float p_amount, float p_curve) override;
diff --git a/drivers/gles3/rasterizer_storage_gles3.cpp b/drivers/gles3/rasterizer_storage_gles3.cpp
index 1feb2c224e..4759a2b0d0 100644
--- a/drivers/gles3/rasterizer_storage_gles3.cpp
+++ b/drivers/gles3/rasterizer_storage_gles3.cpp
@@ -625,6 +625,8 @@ void RasterizerStorageGLES3::texture_replace(RID p_texture, RID p_by_texture) {
for (int n = 0; n < tex_from->images.size(); n++) {
texture_set_data(p_texture, tex_from->images[n], n);
}
+
+ free(p_by_texture);
}
bool RasterizerStorageGLES3::_is_main_thread() {
@@ -1869,31 +1871,38 @@ void RasterizerStorageGLES3::shader_get_param_list(RID p_shader, List<PropertyIn
}
}
-void RasterizerStorageGLES3::shader_set_default_texture_param(RID p_shader, const StringName &p_name, RID p_texture) {
+void RasterizerStorageGLES3::shader_set_default_texture_param(RID p_shader, const StringName &p_name, RID p_texture, int p_index) {
Shader *shader = shader_owner.get_or_null(p_shader);
ERR_FAIL_COND(!shader);
ERR_FAIL_COND(p_texture.is_valid() && !texture_owner.owns(p_texture));
- if (p_texture.is_valid()) {
- shader->default_textures[p_name] = p_texture;
+ if (!p_texture.is_valid()) {
+ if (shader->default_textures.has(p_name) && shader->default_textures[p_name].has(p_index)) {
+ shader->default_textures[p_name].erase(p_index);
+
+ if (shader->default_textures[p_name].is_empty()) {
+ shader->default_textures.erase(p_name);
+ }
+ }
} else {
- shader->default_textures.erase(p_name);
+ if (!shader->default_textures.has(p_name)) {
+ shader->default_textures[p_name] = Map<int, RID>();
+ }
+ shader->default_textures[p_name][p_index] = p_texture;
}
_shader_make_dirty(shader);
}
-RID RasterizerStorageGLES3::shader_get_default_texture_param(RID p_shader, const StringName &p_name) const {
+RID RasterizerStorageGLES3::shader_get_default_texture_param(RID p_shader, const StringName &p_name, int p_index) const {
const Shader *shader = shader_owner.get_or_null(p_shader);
ERR_FAIL_COND_V(!shader, RID());
- const Map<StringName, RID>::Element *E = shader->default_textures.find(p_name);
-
- if (!E) {
- return RID();
+ if (shader->default_textures.has(p_name) && shader->default_textures[p_name].has(p_index)) {
+ return shader->default_textures[p_name][p_index];
}
- return E->get();
+ return RID();
}
void RasterizerStorageGLES3::shader_add_custom_define(RID p_shader, const String &p_define) {
@@ -2193,10 +2202,11 @@ void RasterizerStorageGLES3::_update_material(Material *p_material) {
}
if (!texture.is_valid()) {
- Map<StringName, RID>::Element *W = p_material->shader->default_textures.find(E->key());
+ Map<StringName, Map<int, RID>>::Element *W = p_material->shader->default_textures.find(E->key());
- if (W) {
- texture = W->get();
+ // TODO: make texture uniform array properly works with GLES3
+ if (W && W->get().has(0)) {
+ texture = W->get()[0];
}
}
diff --git a/drivers/gles3/rasterizer_storage_gles3.h b/drivers/gles3/rasterizer_storage_gles3.h
index eb5614f70f..3f9f208964 100644
--- a/drivers/gles3/rasterizer_storage_gles3.h
+++ b/drivers/gles3/rasterizer_storage_gles3.h
@@ -580,7 +580,7 @@ public:
SelfList<Shader> dirty_list;
- Map<StringName, RID> default_textures;
+ Map<StringName, Map<int, RID>> default_textures;
Vector<ShaderLanguage::ShaderNode::Uniform::Hint> texture_hints;
@@ -706,8 +706,8 @@ public:
String shader_get_code(RID p_shader) const override;
void shader_get_param_list(RID p_shader, List<PropertyInfo> *p_param_list) const override;
- void shader_set_default_texture_param(RID p_shader, const StringName &p_name, RID p_texture) override;
- RID shader_get_default_texture_param(RID p_shader, const StringName &p_name) const override;
+ void shader_set_default_texture_param(RID p_shader, const StringName &p_name, RID p_texture, int p_index) override;
+ RID shader_get_default_texture_param(RID p_shader, const StringName &p_name, int p_index) const override;
RS::ShaderNativeSourceCode shader_get_native_source_code(RID p_shader) const override { return RS::ShaderNativeSourceCode(); };
diff --git a/drivers/gles3/shader_compiler_gles3.cpp b/drivers/gles3/shader_compiler_gles3.cpp
index fa607472d3..f9443e11db 100644
--- a/drivers/gles3/shader_compiler_gles3.cpp
+++ b/drivers/gles3/shader_compiler_gles3.cpp
@@ -65,6 +65,13 @@ static String _prestr(SL::DataPrecision p_pres) {
return "";
}
+static String _constr(bool p_is_const) {
+ if (p_is_const) {
+ return "const ";
+ }
+ return "";
+}
+
static String _qualstr(SL::ArgumentQualifier p_qual) {
switch (p_qual) {
case SL::ARGUMENT_QUALIFIER_IN:
@@ -246,9 +253,10 @@ void ShaderCompilerGLES3::_dump_function_deps(SL::ShaderNode *p_node, const Stri
header += "(";
for (int i = 0; i < fnode->arguments.size(); i++) {
- if (i > 0)
+ if (i > 0) {
header += ", ";
-
+ }
+ header += _constr(fnode->arguments[i].is_const);
header += _qualstr(fnode->arguments[i].qualifier);
header += _prestr(fnode->arguments[i].precision);
header += _typestr(fnode->arguments[i].type);
@@ -365,7 +373,7 @@ String ShaderCompilerGLES3::_dump_node_code(SL::Node *p_node, int p_level, Gener
for (int i = 0; i < snode->vconstants.size(); i++) {
String gcode;
- gcode += "const ";
+ gcode += _constr(true);
gcode += _prestr(snode->vconstants[i].precision);
gcode += _typestr(snode->vconstants[i].type);
gcode += " " + _mkid(String(snode->vconstants[i].name));
@@ -446,9 +454,7 @@ String ShaderCompilerGLES3::_dump_node_code(SL::Node *p_node, int p_level, Gener
SL::VariableDeclarationNode *var_dec_node = (SL::VariableDeclarationNode *)p_node;
StringBuffer<> declaration;
- if (var_dec_node->is_const) {
- declaration += "const ";
- }
+ declaration += _constr(var_dec_node->is_const);
declaration += _prestr(var_dec_node->precision);
declaration += _typestr(var_dec_node->datatype);
diff --git a/drivers/pulseaudio/audio_driver_pulseaudio.cpp b/drivers/pulseaudio/audio_driver_pulseaudio.cpp
index 2488439738..06058f2d39 100644
--- a/drivers/pulseaudio/audio_driver_pulseaudio.cpp
+++ b/drivers/pulseaudio/audio_driver_pulseaudio.cpp
@@ -34,6 +34,7 @@
#include "core/config/project_settings.h"
#include "core/os/os.h"
+#include "core/version.h"
#ifdef ALSAMIDI_ENABLED
#include "drivers/alsa/asound-so_wrap.h"
@@ -191,7 +192,7 @@ Error AudioDriverPulseAudio::init_device() {
Error err = detect_channels();
if (err != OK) {
// This most likely means there are no sinks.
- ERR_PRINT("PulseAudio: init device failed to detect number of channels");
+ ERR_PRINT("PulseAudio: init device failed to detect number of output channels");
return err;
}
@@ -211,7 +212,7 @@ Error AudioDriverPulseAudio::init_device() {
break;
default:
- WARN_PRINT("PulseAudio: Unsupported number of channels: " + itos(pa_map.channels));
+ WARN_PRINT("PulseAudio: Unsupported number of output channels: " + itos(pa_map.channels));
pa_channel_map_init_stereo(&pa_map);
channels = 2;
break;
@@ -221,8 +222,8 @@ Error AudioDriverPulseAudio::init_device() {
buffer_frames = closest_power_of_2(latency * mix_rate / 1000);
pa_buffer_size = buffer_frames * pa_map.channels;
- print_verbose("PulseAudio: detected " + itos(pa_map.channels) + " channels");
- print_verbose("PulseAudio: audio buffer frames: " + itos(buffer_frames) + " calculated latency: " + itos(buffer_frames * 1000 / mix_rate) + "ms");
+ print_verbose("PulseAudio: detected " + itos(pa_map.channels) + " output channels");
+ print_verbose("PulseAudio: audio buffer frames: " + itos(buffer_frames) + " calculated output latency: " + itos(buffer_frames * 1000 / mix_rate) + "ms");
pa_sample_spec spec;
spec.format = PA_SAMPLE_S16LE;
@@ -293,7 +294,17 @@ Error AudioDriverPulseAudio::init() {
pa_ml = pa_mainloop_new();
ERR_FAIL_COND_V(pa_ml == nullptr, ERR_CANT_OPEN);
- pa_ctx = pa_context_new(pa_mainloop_get_api(pa_ml), "Godot");
+ String context_name;
+ if (Engine::get_singleton()->is_editor_hint()) {
+ context_name = VERSION_NAME " Editor";
+ } else {
+ context_name = GLOBAL_GET("application/config/name");
+ if (context_name.is_empty()) {
+ context_name = VERSION_NAME " Project";
+ }
+ }
+
+ pa_ctx = pa_context_new(pa_mainloop_get_api(pa_ml), context_name.utf8().ptr());
ERR_FAIL_COND_V(pa_ctx == nullptr, ERR_CANT_OPEN);
pa_ready = 0;
@@ -382,15 +393,15 @@ void AudioDriverPulseAudio::thread_func(void *p_udata) {
ad->start_counting_ticks();
if (!ad->active) {
- for (unsigned int i = 0; i < ad->pa_buffer_size; i++) {
- ad->samples_out.write[i] = 0;
- }
+ ad->samples_out.fill(0);
} else {
ad->audio_server_process(ad->buffer_frames, ad->samples_in.ptrw());
+ int16_t *out_ptr = ad->samples_out.ptrw();
+
if (ad->channels == ad->pa_map.channels) {
for (unsigned int i = 0; i < ad->pa_buffer_size; i++) {
- ad->samples_out.write[i] = ad->samples_in[i] >> 16;
+ out_ptr[i] = ad->samples_in[i] >> 16;
}
} else {
// Uneven amount of channels
@@ -399,11 +410,11 @@ void AudioDriverPulseAudio::thread_func(void *p_udata) {
for (unsigned int i = 0; i < ad->buffer_frames; i++) {
for (int j = 0; j < ad->pa_map.channels - 1; j++) {
- ad->samples_out.write[out_idx++] = ad->samples_in[in_idx++] >> 16;
+ out_ptr[out_idx++] = ad->samples_in[in_idx++] >> 16;
}
uint32_t l = ad->samples_in[in_idx++] >> 16;
uint32_t r = ad->samples_in[in_idx++] >> 16;
- ad->samples_out.write[out_idx++] = (l + r) / 2;
+ out_ptr[out_idx++] = (l + r) / 2;
}
}
}
@@ -689,6 +700,8 @@ Error AudioDriverPulseAudio::capture_init_device() {
break;
}
+ print_verbose("PulseAudio: detected " + itos(pa_rec_map.channels) + " input channels");
+
pa_sample_spec spec;
spec.format = PA_SAMPLE_S16LE;
diff --git a/drivers/unix/os_unix.cpp b/drivers/unix/os_unix.cpp
index 1bc88a86f7..1ebc8cca5e 100644
--- a/drivers/unix/os_unix.cpp
+++ b/drivers/unix/os_unix.cpp
@@ -473,7 +473,7 @@ String OS_Unix::get_user_data_dir() const {
}
}
- return ProjectSettings::get_singleton()->get_resource_path();
+ return get_data_path().plus_file(get_godot_dir_name()).plus_file("app_userdata").plus_file("[unnamed project]");
}
String OS_Unix::get_executable_path() const {
diff --git a/drivers/vulkan/rendering_device_vulkan.cpp b/drivers/vulkan/rendering_device_vulkan.cpp
index 4cae051302..952ee50074 100644
--- a/drivers/vulkan/rendering_device_vulkan.cpp
+++ b/drivers/vulkan/rendering_device_vulkan.cpp
@@ -8822,6 +8822,7 @@ void RenderingDeviceVulkan::initialize(VulkanContext *p_context, bool p_local_de
// get info about further features
VulkanContext::MultiviewCapabilities multiview_capabilies = p_context->get_multiview_capabilities();
device_capabilities.supports_multiview = multiview_capabilies.is_supported && multiview_capabilies.max_view_count > 1;
+ device_capabilities.supports_fsr_half_float = p_context->get_shader_capabilities().shader_float16_is_supported && p_context->get_storage_buffer_capabilities().storage_buffer_16_bit_access_is_supported;
}
context = p_context;
diff --git a/drivers/vulkan/vulkan_context.cpp b/drivers/vulkan/vulkan_context.cpp
index c178a68236..5912f481ec 100644
--- a/drivers/vulkan/vulkan_context.cpp
+++ b/drivers/vulkan/vulkan_context.cpp
@@ -535,6 +535,24 @@ Error VulkanContext::_check_capabilities() {
multiview_capabilities.is_supported = multiview_features.multiview;
multiview_capabilities.geometry_shader_is_supported = multiview_features.multiviewGeometryShader;
multiview_capabilities.tessellation_shader_is_supported = multiview_features.multiviewTessellationShader;
+
+ VkPhysicalDeviceShaderFloat16Int8FeaturesKHR shader_features;
+ shader_features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES_KHR;
+ shader_features.pNext = NULL;
+
+ device_features.pNext = &shader_features;
+
+ device_features_func(gpu, &device_features);
+ shader_capabilities.shader_float16_is_supported = shader_features.shaderFloat16;
+
+ VkPhysicalDevice16BitStorageFeaturesKHR storage_feature;
+ storage_feature.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES_KHR;
+ storage_feature.pNext = NULL;
+
+ device_features.pNext = &storage_feature;
+
+ device_features_func(gpu, &device_features);
+ storage_buffer_capabilities.storage_buffer_16_bit_access_is_supported = storage_feature.storageBuffer16BitAccess;
}
// check extended properties
diff --git a/drivers/vulkan/vulkan_context.h b/drivers/vulkan/vulkan_context.h
index ae7c697be8..ab2f6a3eb5 100644
--- a/drivers/vulkan/vulkan_context.h
+++ b/drivers/vulkan/vulkan_context.h
@@ -66,6 +66,14 @@ public:
uint32_t max_instance_count;
};
+ struct ShaderCapabilities {
+ bool shader_float16_is_supported;
+ };
+
+ struct StorageBufferCapabilities {
+ bool storage_buffer_16_bit_access_is_supported;
+ };
+
private:
enum {
MAX_EXTENSIONS = 128,
@@ -88,6 +96,8 @@ private:
uint32_t vulkan_patch = 0;
SubgroupCapabilities subgroup_capabilities;
MultiviewCapabilities multiview_capabilities;
+ ShaderCapabilities shader_capabilities;
+ StorageBufferCapabilities storage_buffer_capabilities;
String device_vendor;
String device_name;
@@ -239,6 +249,8 @@ public:
uint32_t get_vulkan_minor() const { return vulkan_minor; };
SubgroupCapabilities get_subgroup_capabilities() const { return subgroup_capabilities; };
MultiviewCapabilities get_multiview_capabilities() const { return multiview_capabilities; };
+ ShaderCapabilities get_shader_capabilities() const { return shader_capabilities; };
+ StorageBufferCapabilities get_storage_buffer_capabilities() const { return storage_buffer_capabilities; };
VkDevice get_device();
VkPhysicalDevice get_physical_device();
diff --git a/drivers/wasapi/audio_driver_wasapi.cpp b/drivers/wasapi/audio_driver_wasapi.cpp
index 3b2f078120..403feb149e 100644
--- a/drivers/wasapi/audio_driver_wasapi.cpp
+++ b/drivers/wasapi/audio_driver_wasapi.cpp
@@ -121,6 +121,12 @@ const IID IID_IAudioCaptureClient = __uuidof(IAudioCaptureClient);
static bool default_render_device_changed = false;
static bool default_capture_device_changed = false;
+// Silence warning due to a COM API weirdness (GH-35194).
+#if defined(__GNUC__) && !defined(__clang__)
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wnon-virtual-dtor"
+#endif
+
class CMMNotificationClient : public IMMNotificationClient {
LONG _cRef = 1;
IMMDeviceEnumerator *_pEnumerator = nullptr;
@@ -162,7 +168,7 @@ public:
HRESULT STDMETHODCALLTYPE OnDeviceAdded(LPCWSTR pwstrDeviceId) {
return S_OK;
- };
+ }
HRESULT STDMETHODCALLTYPE OnDeviceRemoved(LPCWSTR pwstrDeviceId) {
return S_OK;
@@ -189,6 +195,10 @@ public:
}
};
+#if defined(__GNUC__) && !defined(__clang__)
+#pragma GCC diagnostic pop
+#endif
+
static CMMNotificationClient notif_client;
Error AudioDriverWASAPI::audio_device_init(AudioDeviceWASAPI *p_device, bool p_capture, bool reinit) {
@@ -373,18 +383,21 @@ Error AudioDriverWASAPI::audio_device_init(AudioDeviceWASAPI *p_device, bool p_c
hr = p_device->audio_client->Initialize(AUDCLNT_SHAREMODE_SHARED, streamflags, p_capture ? REFTIMES_PER_SEC : 0, 0, pwfex, nullptr);
ERR_FAIL_COND_V_MSG(hr != S_OK, ERR_CANT_OPEN, "WASAPI: Initialize failed with error 0x" + String::num_uint64(hr, 16) + ".");
UINT32 max_frames;
- HRESULT hr = p_device->audio_client->GetBufferSize(&max_frames);
+ hr = p_device->audio_client->GetBufferSize(&max_frames);
ERR_FAIL_COND_V(hr != S_OK, ERR_CANT_OPEN);
// Due to WASAPI Shared Mode we have no control of the buffer size
- buffer_frames = max_frames;
-
- int64_t latency = 0;
- audio_output.audio_client->GetStreamLatency(&latency);
- // WASAPI REFERENCE_TIME units are 100 nanoseconds per unit
- // https://docs.microsoft.com/en-us/windows/win32/directshow/reference-time
- // Convert REFTIME to seconds as godot uses for latency
- real_latency = (float)latency / (float)REFTIMES_PER_SEC;
+ if (!p_capture) {
+ buffer_frames = max_frames;
+
+ int64_t latency = 0;
+ audio_output.audio_client->GetStreamLatency(&latency);
+ // WASAPI REFERENCE_TIME units are 100 nanoseconds per unit
+ // https://docs.microsoft.com/en-us/windows/win32/directshow/reference-time
+ // Convert REFTIME to seconds as godot uses for latency
+ real_latency = (float)latency / (float)REFTIMES_PER_SEC;
+ }
+
} else {
IAudioClient3 *device_audio_client_3 = (IAudioClient3 *)p_device->audio_client;
diff --git a/editor/SCsub b/editor/SCsub
index 6b18eeae93..87153f3b2b 100644
--- a/editor/SCsub
+++ b/editor/SCsub
@@ -76,7 +76,7 @@ if env["tools"]:
# Editor translations
to_include = (
- "ar,bg,bn,ca,cs,de,el,eo,es_AR,es,fi,fr,gl,he,hu,id,it,ja,ko,ms,nb,nl,pl,pt_BR,pt,ro,ru,sk,sv,th,tr,uk,vi,zh_CN,zh_TW"
+ "ar,bg,bn,ca,cs,de,el,eo,es_AR,es,fi,fr,gl,he,hu,id,it,ja,ko,lv,ms,nb,nl,pl,pt_BR,pt,ro,ru,sk,sv,th,tr,uk,vi,zh_CN,zh_TW"
).split(",")
tlist = [env.Dir("#editor/translations").abspath + "/" + f + ".po" for f in to_include]
env.Depends("#editor/editor_translations.gen.h", tlist)
@@ -87,7 +87,7 @@ if env["tools"]:
)
# Documentation translations
- to_include = "es,fr,ja,zh_CN".split(",")
+ to_include = "de,es,fr,ja,zh_CN".split(",")
tlist = [env.Dir("#doc/translations").abspath + "/" + f + ".po" for f in to_include]
env.Depends("#editor/doc_translations.gen.h", tlist)
env.CommandNoCache(
diff --git a/editor/action_map_editor.cpp b/editor/action_map_editor.cpp
index 519dd654ef..dc0c62fbc9 100644
--- a/editor/action_map_editor.cpp
+++ b/editor/action_map_editor.cpp
@@ -36,8 +36,8 @@
/////////////////////////////////////////
-// Maps to 2*axis if value is neg, or + 1 if value is pos.
-static const char *_joy_axis_descriptions[JOY_AXIS_MAX * 2] = {
+// Maps to 2*axis if value is neg, or 2*axis+1 if value is pos.
+static const char *_joy_axis_descriptions[(size_t)JoyAxis::MAX * 2] = {
TTRC("Left Stick Left, Joystick 0 Left"),
TTRC("Left Stick Right, Joystick 0 Right"),
TTRC("Left Stick Up, Joystick 0 Up"),
@@ -67,11 +67,11 @@ String InputEventConfigurationDialog::get_event_text(const Ref<InputEvent> &p_ev
Ref<InputEventJoypadMotion> jpmotion = p_event;
if (jpmotion.is_valid()) {
String desc = TTR("Unknown Joypad Axis");
- if (jpmotion->get_axis() < JOY_AXIS_MAX) {
- desc = RTR(_joy_axis_descriptions[2 * jpmotion->get_axis() + (jpmotion->get_axis_value() < 0 ? 0 : 1)]);
+ if (jpmotion->get_axis() < JoyAxis::MAX) {
+ desc = RTR(_joy_axis_descriptions[2 * (size_t)jpmotion->get_axis() + (jpmotion->get_axis_value() < 0 ? 0 : 1)]);
}
- return vformat("Joypad Axis %s %s (%s)", itos(jpmotion->get_axis()), jpmotion->get_axis_value() < 0 ? "-" : "+", desc);
+ return vformat("Joypad Axis %s %s (%s)", itos((int64_t)jpmotion->get_axis()), jpmotion->get_axis_value() < 0 ? "-" : "+", desc);
} else {
return p_event->as_text();
}
@@ -108,7 +108,7 @@ void InputEventConfigurationDialog::_set_event(const Ref<InputEvent> &p_event) {
if (k.is_valid()) {
show_phys_key = true;
- physical_key_checkbox->set_pressed(k->get_physical_keycode() != 0 && k->get_keycode() == 0);
+ physical_key_checkbox->set_pressed(k->get_physical_keycode() != Key::NONE && k->get_keycode() == Key::NONE);
} else if (joyb.is_valid() || joym.is_valid() || mb.is_valid()) {
show_device = true;
@@ -260,7 +260,7 @@ void InputEventConfigurationDialog::_listen_window_input(const Ref<InputEvent> &
return;
} else {
// Always make the value 1 or -1 for display consistency
- joym->set_axis_value(SGN(axis_value));
+ joym->set_axis_value(SIGN(axis_value));
}
}
@@ -268,9 +268,9 @@ void InputEventConfigurationDialog::_listen_window_input(const Ref<InputEvent> &
k->set_pressed(false); // to avoid serialisation of 'pressed' property - doesn't matter for actions anyway.
// Maintain physical keycode option state
if (physical_key_checkbox->is_pressed()) {
- k->set_keycode(KEY_NONE);
+ k->set_keycode(Key::NONE);
} else {
- k->set_physical_keycode(KEY_NONE);
+ k->set_physical_keycode(Key::NONE);
}
}
@@ -325,7 +325,7 @@ void InputEventConfigurationDialog::_update_input_list() {
mouse_root->set_collapsed(collapse);
mouse_root->set_meta("__type", INPUT_MOUSE_BUTTON);
- MouseButton mouse_buttons[9] = { MOUSE_BUTTON_LEFT, MOUSE_BUTTON_RIGHT, MOUSE_BUTTON_MIDDLE, MOUSE_BUTTON_WHEEL_UP, MOUSE_BUTTON_WHEEL_DOWN, MOUSE_BUTTON_WHEEL_LEFT, MOUSE_BUTTON_WHEEL_RIGHT, MOUSE_BUTTON_XBUTTON1, MOUSE_BUTTON_XBUTTON2 };
+ MouseButton mouse_buttons[9] = { MouseButton::LEFT, MouseButton::RIGHT, MouseButton::MIDDLE, MouseButton::WHEEL_UP, MouseButton::WHEEL_DOWN, MouseButton::WHEEL_LEFT, MouseButton::WHEEL_RIGHT, MouseButton::MB_XBUTTON1, MouseButton::MB_XBUTTON2 };
for (int i = 0; i < 9; i++) {
Ref<InputEventMouseButton> mb;
mb.instantiate();
@@ -349,7 +349,7 @@ void InputEventConfigurationDialog::_update_input_list() {
joyb_root->set_collapsed(collapse);
joyb_root->set_meta("__type", INPUT_JOY_BUTTON);
- for (int i = 0; i < JOY_BUTTON_MAX; i++) {
+ for (int i = 0; i < (int)JoyButton::MAX; i++) {
Ref<InputEventJoypadButton> joyb;
joyb.instantiate();
joyb->set_button_index((JoyButton)i);
@@ -372,7 +372,7 @@ void InputEventConfigurationDialog::_update_input_list() {
joya_root->set_collapsed(collapse);
joya_root->set_meta("__type", INPUT_JOY_MOTION);
- for (int i = 0; i < JOY_AXIS_MAX * 2; i++) {
+ for (int i = 0; i < (int)JoyAxis::MAX * 2; i++) {
int axis = i / 2;
int direction = (i & 1) ? 1 : -1;
Ref<InputEventJoypadMotion> joym;
@@ -453,10 +453,10 @@ void InputEventConfigurationDialog::_physical_keycode_toggled(bool p_checked) {
if (p_checked) {
k->set_physical_keycode(k->get_keycode());
- k->set_keycode(KEY_NONE);
+ k->set_keycode(Key::NONE);
} else {
k->set_keycode((Key)k->get_physical_keycode());
- k->set_physical_keycode(KEY_NONE);
+ k->set_physical_keycode(Key::NONE);
}
_set_event(k);
@@ -480,9 +480,9 @@ void InputEventConfigurationDialog::_input_list_item_selected() {
if (physical_key_checkbox->is_pressed()) {
k->set_physical_keycode(keycode);
- k->set_keycode(KEY_NONE);
+ k->set_keycode(Key::NONE);
} else {
- k->set_physical_keycode(KEY_NONE);
+ k->set_physical_keycode(Key::NONE);
k->set_keycode(keycode);
}
@@ -847,7 +847,7 @@ void ActionMapEditor::_tree_button_pressed(Object *p_item, int p_column, int p_i
int event_index = item->get_meta("__index");
Array events = action["events"];
- events.remove(event_index);
+ events.remove_at(event_index);
action["events"] = events;
emit_signal(SNAME("action_edited"), action_name, action);
diff --git a/editor/animation_bezier_editor.cpp b/editor/animation_bezier_editor.cpp
index 02b4a12b92..f7f88ad0d5 100644
--- a/editor/animation_bezier_editor.cpp
+++ b/editor/animation_bezier_editor.cpp
@@ -187,7 +187,7 @@ void AnimationBezierTrackEdit::_draw_line_clipped(const Vector2 &p_from, const V
Vector2 from = p_from;
Vector2 to = p_to;
- if (from.x == to.x) {
+ if (from.x == to.x && from.y == to.y) {
return;
}
if (to.x < from.x) {
@@ -222,11 +222,6 @@ void AnimationBezierTrackEdit::_notification(int p_what) {
bezier_icon = get_theme_icon(SNAME("KeyBezierPoint"), SNAME("EditorIcons"));
bezier_handle_icon = get_theme_icon(SNAME("KeyBezierHandle"), SNAME("EditorIcons"));
selected_icon = get_theme_icon(SNAME("KeyBezierSelected"), SNAME("EditorIcons"));
- if (handle_mode_option->get_item_count() == 0) {
- handle_mode_option->add_icon_item(get_theme_icon(SNAME("BezierHandlesFree"), SNAME("EditorIcons")), TTR("Free"), HANDLE_MODE_FREE);
- handle_mode_option->add_icon_item(get_theme_icon(SNAME("BezierHandlesBalanced"), SNAME("EditorIcons")), TTR("Balanced"), HANDLE_MODE_BALANCED);
- handle_mode_option->add_icon_item(get_theme_icon(SNAME("BezierHandlesMirror"), SNAME("EditorIcons")), TTR("Mirror"), HANDLE_MODE_MIRROR);
- }
}
if (p_what == NOTIFICATION_RESIZED) {
int right_limit = get_size().width - timeline->get_buttons_width();
@@ -420,9 +415,9 @@ void AnimationBezierTrackEdit::_notification(int p_what) {
//draw editor handles
{
- float scale = timeline->get_zoom_scale();
edit_points.clear();
+ float scale = timeline->get_zoom_scale();
for (int i = 0; i < animation->track_get_key_count(track); i++) {
float offset = animation->track_get_key_time(track, i);
float value = animation->bezier_track_get_key_value(track, i);
@@ -438,7 +433,7 @@ void AnimationBezierTrackEdit::_notification(int p_what) {
if (moving_handle != 0 && moving_handle_key == i) {
in_vec = moving_handle_left;
}
- Vector2 pos_in = Vector2(((offset + in_vec.x) - timeline->get_value()) * scale + limit, _bezier_h_to_pixel(value + in_vec.y));
+ Vector2 pos_in(((offset + in_vec.x) - timeline->get_value()) * scale + limit, _bezier_h_to_pixel(value + in_vec.y));
Vector2 out_vec = animation->bezier_track_get_key_out_handle(track, i);
@@ -446,7 +441,7 @@ void AnimationBezierTrackEdit::_notification(int p_what) {
out_vec = moving_handle_right;
}
- Vector2 pos_out = Vector2(((offset + out_vec.x) - timeline->get_value()) * scale + limit, _bezier_h_to_pixel(value + out_vec.y));
+ Vector2 pos_out(((offset + out_vec.x) - timeline->get_value()) * scale + limit, _bezier_h_to_pixel(value + out_vec.y));
_draw_line_clipped(pos, pos_in, accent, limit, right_limit);
_draw_line_clipped(pos, pos_out, accent, limit, right_limit);
@@ -581,11 +576,21 @@ void AnimationBezierTrackEdit::_clear_selection() {
update();
}
+void AnimationBezierTrackEdit::_change_selected_keys_handle_mode(Animation::HandleMode p_mode) {
+ undo_redo->create_action(TTR("Update Selected Key Handles"));
+ double ratio = timeline->get_zoom_scale() * v_zoom;
+ for (Set<int>::Element *E = selection.back(); E; E = E->prev()) {
+ const int key_index = E->get();
+ undo_redo->add_undo_method(animation.ptr(), "bezier_track_set_key_handle_mode", track, key_index, animation->bezier_track_get_key_handle_mode(track, key_index), ratio);
+ undo_redo->add_do_method(animation.ptr(), "bezier_track_set_key_handle_mode", track, key_index, p_mode, ratio);
+ }
+ undo_redo->commit_action();
+}
+
void AnimationBezierTrackEdit::_clear_selection_for_anim(const Ref<Animation> &p_anim) {
if (!(animation == p_anim)) {
return;
}
- //selection.clear();
_clear_selection();
}
@@ -618,7 +623,7 @@ void AnimationBezierTrackEdit::gui_input(const Ref<InputEvent> &p_event) {
}
Ref<InputEventMouseButton> mb = p_event;
- if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == MOUSE_BUTTON_WHEEL_DOWN) {
+ if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == MouseButton::WHEEL_DOWN) {
const float v_zoom_orig = v_zoom;
if (mb->is_command_pressed()) {
timeline->get_zoom()->set_value(timeline->get_zoom()->get_value() / 1.05);
@@ -631,7 +636,7 @@ void AnimationBezierTrackEdit::gui_input(const Ref<InputEvent> &p_event) {
update();
}
- if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == MOUSE_BUTTON_WHEEL_UP) {
+ if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == MouseButton::WHEEL_UP) {
const float v_zoom_orig = v_zoom;
if (mb->is_command_pressed()) {
timeline->get_zoom()->set_value(timeline->get_zoom()->get_value() * 1.05);
@@ -644,7 +649,7 @@ void AnimationBezierTrackEdit::gui_input(const Ref<InputEvent> &p_event) {
update();
}
- if (mb.is_valid() && mb->get_button_index() == MOUSE_BUTTON_MIDDLE) {
+ if (mb.is_valid() && mb->get_button_index() == MouseButton::MIDDLE) {
if (mb->is_pressed()) {
int x = mb->get_position().x - timeline->get_name_limit();
panning_timeline_from = x / timeline->get_zoom_scale();
@@ -655,7 +660,7 @@ void AnimationBezierTrackEdit::gui_input(const Ref<InputEvent> &p_event) {
}
}
- if (mb.is_valid() && mb->get_button_index() == MOUSE_BUTTON_RIGHT && mb->is_pressed()) {
+ if (mb.is_valid() && mb->get_button_index() == MouseButton::RIGHT && mb->is_pressed()) {
menu_insert_key = mb->get_position();
if (menu_insert_key.x >= timeline->get_name_limit() && menu_insert_key.x <= get_size().width - timeline->get_buttons_width()) {
Vector2 popup_pos = get_global_transform().xform(mb->get_position());
@@ -667,6 +672,9 @@ void AnimationBezierTrackEdit::gui_input(const Ref<InputEvent> &p_event) {
menu->add_icon_item(get_theme_icon(SNAME("Duplicate"), SNAME("EditorIcons")), TTR("Duplicate Selected Key(s)"), MENU_KEY_DUPLICATE);
menu->add_separator();
menu->add_icon_item(get_theme_icon(SNAME("Remove"), SNAME("EditorIcons")), TTR("Delete Selected Key(s)"), MENU_KEY_DELETE);
+ menu->add_separator();
+ menu->add_icon_item(get_theme_icon(SNAME("BezierHandlesFree"), SNAME("EditorIcons")), TTR("Make Handles Free"), MENU_KEY_SET_HANDLE_FREE);
+ menu->add_icon_item(get_theme_icon(SNAME("BezierHandlesBalanced"), SNAME("EditorIcons")), TTR("Make Handles Balanced"), MENU_KEY_SET_HANDLE_BALANCED);
}
menu->set_as_minsize();
@@ -675,11 +683,7 @@ void AnimationBezierTrackEdit::gui_input(const Ref<InputEvent> &p_event) {
}
}
- if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == MOUSE_BUTTON_LEFT) {
- if (close_icon_rect.has_point(mb->get_position())) {
- emit_signal(SNAME("close_request"));
- return;
- }
+ if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == MouseButton::LEFT) {
for (const KeyValue<int, Rect2> &E : subtracks) {
if (E.value.has_point(mb->get_position())) {
set_animation_and_track(animation, E.key);
@@ -746,7 +750,7 @@ void AnimationBezierTrackEdit::gui_input(const Ref<InputEvent> &p_event) {
//insert new point
if (mb->is_command_pressed() && mb->get_position().x >= timeline->get_name_limit() && mb->get_position().x < get_size().width - timeline->get_buttons_width()) {
Array new_point;
- new_point.resize(5);
+ new_point.resize(6);
float h = (get_size().height / 2 - mb->get_position().y) * v_zoom + v_scroll;
@@ -755,6 +759,7 @@ void AnimationBezierTrackEdit::gui_input(const Ref<InputEvent> &p_event) {
new_point[2] = 0;
new_point[3] = 0.25;
new_point[4] = 0;
+ new_point[5] = 0;
float time = ((mb->get_position().x - timeline->get_name_limit()) / timeline->get_zoom_scale()) + timeline->get_value();
while (animation->track_find_key(track, time, true) != -1) {
@@ -792,7 +797,7 @@ void AnimationBezierTrackEdit::gui_input(const Ref<InputEvent> &p_event) {
}
}
- if (box_selecting_attempt && mb.is_valid() && !mb->is_pressed() && mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (box_selecting_attempt && mb.is_valid() && !mb->is_pressed() && mb->get_button_index() == MouseButton::LEFT) {
if (box_selecting) {
//do actual select
if (!box_selecting_add) {
@@ -822,7 +827,7 @@ void AnimationBezierTrackEdit::gui_input(const Ref<InputEvent> &p_event) {
update();
}
- if (moving_handle != 0 && mb.is_valid() && !mb->is_pressed() && mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (moving_handle != 0 && mb.is_valid() && !mb->is_pressed() && mb->get_button_index() == MouseButton::LEFT) {
undo_redo->create_action(TTR("Move Bezier Points"));
undo_redo->add_do_method(animation.ptr(), "bezier_track_set_key_in_handle", track, moving_handle_key, moving_handle_left);
undo_redo->add_do_method(animation.ptr(), "bezier_track_set_key_out_handle", track, moving_handle_key, moving_handle_right);
@@ -834,7 +839,7 @@ void AnimationBezierTrackEdit::gui_input(const Ref<InputEvent> &p_event) {
update();
}
- if (moving_selection_attempt && mb.is_valid() && !mb->is_pressed() && mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (moving_selection_attempt && mb.is_valid() && !mb->is_pressed() && mb->get_button_index() == MouseButton::LEFT) {
if (moving_selection) {
//combit it
@@ -929,7 +934,7 @@ void AnimationBezierTrackEdit::gui_input(const Ref<InputEvent> &p_event) {
}
Ref<InputEventMouseMotion> mm = p_event;
- if (mm.is_valid() && mm->get_button_mask() & MOUSE_BUTTON_MASK_MIDDLE) {
+ if (mm.is_valid() && (mm->get_button_mask() & MouseButton::MASK_MIDDLE) != MouseButton::NONE) {
v_scroll += mm->get_relative().y * v_zoom;
if (v_scroll > 100000) {
v_scroll = 100000;
@@ -986,33 +991,49 @@ void AnimationBezierTrackEdit::gui_input(const Ref<InputEvent> &p_event) {
if (moving_handle == -1) {
moving_handle_left = moving_handle_value;
- if (moving_handle_left.x > 0) {
- moving_handle_left.x = 0;
- }
- if (handle_mode_option->get_selected() == HANDLE_MODE_BALANCED) {
- Vector2 scale = Vector2(timeline->get_zoom_scale(), v_zoom);
- moving_handle_right = (-(moving_handle_left * scale).normalized() * (moving_handle_right * scale).length()) / scale;
+ if (animation->bezier_track_get_key_handle_mode(track, moving_handle_key) == Animation::HANDLE_MODE_BALANCED) {
+ double ratio = timeline->get_zoom_scale() * v_zoom;
+ Transform2D xform;
+ xform.set_scale(Vector2(1.0, 1.0 / ratio));
- } else if (handle_mode_option->get_selected() == HANDLE_MODE_MIRROR) {
- moving_handle_right = -moving_handle_left;
- }
- }
+ Vector2 vec_out = xform.xform(moving_handle_right);
+ Vector2 vec_in = xform.xform(moving_handle_left);
- if (moving_handle == 1) {
- moving_handle_right = moving_handle_value;
- if (moving_handle_right.x < 0) {
- moving_handle_right.x = 0;
+ moving_handle_right = xform.affine_inverse().xform(-vec_in.normalized() * vec_out.length());
}
+ } else if (moving_handle == 1) {
+ moving_handle_right = moving_handle_value;
+
+ if (animation->bezier_track_get_key_handle_mode(track, moving_handle_key) == Animation::HANDLE_MODE_BALANCED) {
+ double ratio = timeline->get_zoom_scale() * v_zoom;
+ Transform2D xform;
+ xform.set_scale(Vector2(1.0, 1.0 / ratio));
- if (handle_mode_option->get_selected() == HANDLE_MODE_BALANCED) {
- Vector2 scale = Vector2(timeline->get_zoom_scale(), v_zoom);
- moving_handle_left = (-(moving_handle_right * scale).normalized() * (moving_handle_left * scale).length()) / scale;
- } else if (handle_mode_option->get_selected() == HANDLE_MODE_MIRROR) {
- moving_handle_left = -moving_handle_right;
+ Vector2 vec_in = xform.xform(moving_handle_left);
+ Vector2 vec_out = xform.xform(moving_handle_right);
+
+ moving_handle_left = xform.affine_inverse().xform(-vec_out.normalized() * vec_in.length());
}
}
+ update();
+ }
+
+ bool is_finishing_key_handle_drag = moving_handle != 0 && mb.is_valid() && !mb->is_pressed() && mb->get_button_index() == MouseButton::LEFT;
+ if (is_finishing_key_handle_drag) {
+ undo_redo->create_action(TTR("Move Bezier Points"));
+ if (moving_handle == -1) {
+ double ratio = timeline->get_zoom_scale() * v_zoom;
+ undo_redo->add_do_method(animation.ptr(), "bezier_track_set_key_in_handle", track, moving_handle_key, moving_handle_left, ratio);
+ undo_redo->add_undo_method(animation.ptr(), "bezier_track_set_key_in_handle", track, moving_handle_key, animation->bezier_track_get_key_in_handle(track, moving_handle_key), ratio);
+ } else if (moving_handle == 1) {
+ double ratio = timeline->get_zoom_scale() * v_zoom;
+ undo_redo->add_do_method(animation.ptr(), "bezier_track_set_key_out_handle", track, moving_handle_key, moving_handle_right, ratio);
+ undo_redo->add_undo_method(animation.ptr(), "bezier_track_set_key_out_handle", track, moving_handle_key, animation->bezier_track_get_key_out_handle(track, moving_handle_key), ratio);
+ }
+ undo_redo->commit_action();
+ moving_handle = 0;
update();
}
}
@@ -1021,7 +1042,7 @@ void AnimationBezierTrackEdit::_menu_selected(int p_index) {
switch (p_index) {
case MENU_KEY_INSERT: {
Array new_point;
- new_point.resize(5);
+ new_point.resize(6);
float h = (get_size().height / 2 - menu_insert_key.y) * v_zoom + v_scroll;
@@ -1030,6 +1051,7 @@ void AnimationBezierTrackEdit::_menu_selected(int p_index) {
new_point[2] = 0;
new_point[3] = 0.25;
new_point[4] = 0;
+ new_point[5] = Animation::HANDLE_MODE_BALANCED;
float time = ((menu_insert_key.x - timeline->get_name_limit()) / timeline->get_zoom_scale()) + timeline->get_value();
while (animation->track_find_key(track, time, true) != -1) {
@@ -1048,6 +1070,12 @@ void AnimationBezierTrackEdit::_menu_selected(int p_index) {
case MENU_KEY_DELETE: {
delete_selection();
} break;
+ case MENU_KEY_SET_HANDLE_FREE: {
+ _change_selected_keys_handle_mode(Animation::HANDLE_MODE_FREE);
+ } break;
+ case MENU_KEY_SET_HANDLE_BALANCED: {
+ _change_selected_keys_handle_mode(Animation::HANDLE_MODE_BALANCED);
+ } break;
}
}
@@ -1118,6 +1146,7 @@ void AnimationBezierTrackEdit::delete_selection() {
undo_redo->add_do_method(this, "_clear_selection_for_anim", animation);
undo_redo->add_undo_method(this, "_clear_selection_for_anim", animation);
undo_redo->commit_action();
+
//selection.clear();
}
}
@@ -1150,8 +1179,6 @@ AnimationBezierTrackEdit::AnimationBezierTrackEdit() {
set_focus_mode(FOCUS_CLICK);
set_clip_contents(true);
- handle_mode = HANDLE_MODE_FREE;
- handle_mode_option = memnew(OptionButton);
close_button = memnew(Button);
close_button->connect("pressed", Callable(this, SNAME("emit_signal")), varray(SNAME("close_request")));
@@ -1160,7 +1187,6 @@ AnimationBezierTrackEdit::AnimationBezierTrackEdit() {
right_column = memnew(VBoxContainer);
right_column->add_child(close_button);
right_column->add_spacer();
- right_column->add_child(handle_mode_option);
add_child(right_column);
menu = memnew(PopupMenu);
diff --git a/editor/animation_bezier_editor.h b/editor/animation_bezier_editor.h
index 578c6f9337..4b46777cfe 100644
--- a/editor/animation_bezier_editor.h
+++ b/editor/animation_bezier_editor.h
@@ -36,21 +36,14 @@
class AnimationBezierTrackEdit : public Control {
GDCLASS(AnimationBezierTrackEdit, Control);
- enum HandleMode {
- HANDLE_MODE_FREE,
- HANDLE_MODE_BALANCED,
- HANDLE_MODE_MIRROR
- };
-
enum {
MENU_KEY_INSERT,
MENU_KEY_DUPLICATE,
- MENU_KEY_DELETE
+ MENU_KEY_DELETE,
+ MENU_KEY_SET_HANDLE_FREE,
+ MENU_KEY_SET_HANDLE_BALANCED,
};
- HandleMode handle_mode;
- OptionButton *handle_mode_option;
-
VBoxContainer *right_column;
Button *close_button;
@@ -69,8 +62,6 @@ class AnimationBezierTrackEdit : public Control {
Ref<Texture2D> bezier_handle_icon;
Ref<Texture2D> selected_icon;
- Rect2 close_icon_rect;
-
Map<int, Rect2> subtracks;
float v_scroll = 0;
@@ -104,10 +95,12 @@ class AnimationBezierTrackEdit : public Control {
int moving_handle_key = 0;
Vector2 moving_handle_left;
Vector2 moving_handle_right;
+ int moving_handle_mode; // value from Animation::HandleMode
void _clear_selection();
void _clear_selection_for_anim(const Ref<Animation> &p_anim);
void _select_at_anim(const Ref<Animation> &p_anim, int p_track, float p_pos);
+ void _change_selected_keys_handle_mode(Animation::HandleMode p_mode);
Vector2 menu_insert_key;
diff --git a/editor/animation_track_editor.cpp b/editor/animation_track_editor.cpp
index a85a4450a6..6fce55f8e3 100644
--- a/editor/animation_track_editor.cpp
+++ b/editor/animation_track_editor.cpp
@@ -334,6 +334,22 @@ public:
setting = false;
return true;
}
+
+ if (name == "handle_mode") {
+ const Variant &value = p_value;
+
+ setting = true;
+ undo_redo->create_action(TTR("Anim Change Keyframe Value"), UndoRedo::MERGE_ENDS);
+ int prev = animation->bezier_track_get_key_handle_mode(track, key);
+ undo_redo->add_do_method(animation.ptr(), "bezier_track_set_key_handle_mode", track, key, value);
+ undo_redo->add_undo_method(animation.ptr(), "bezier_track_set_key_handle_mode", track, key, prev);
+ undo_redo->add_do_method(this, "_update_obj", animation);
+ undo_redo->add_undo_method(this, "_update_obj", animation);
+ undo_redo->commit_action();
+
+ setting = false;
+ return true;
+ }
} break;
case Animation::TYPE_AUDIO: {
if (name == "stream") {
@@ -498,6 +514,11 @@ public:
return true;
}
+ if (name == "handle_mode") {
+ r_ret = animation->bezier_track_get_key_handle_mode(track, key);
+ return true;
+ }
+
} break;
case Animation::TYPE_AUDIO: {
if (name == "stream") {
@@ -610,6 +631,7 @@ public:
p_list->push_back(PropertyInfo(Variant::FLOAT, "value"));
p_list->push_back(PropertyInfo(Variant::VECTOR2, "in_handle"));
p_list->push_back(PropertyInfo(Variant::VECTOR2, "out_handle"));
+ p_list->push_back(PropertyInfo(Variant::INT, "handle_mode", PROPERTY_HINT_ENUM, "Free,Balanced"));
} break;
case Animation::TYPE_AUDIO: {
@@ -949,6 +971,17 @@ public:
undo_redo->add_do_method(animation.ptr(), "bezier_track_set_key_out_handle", track, key, value);
undo_redo->add_undo_method(animation.ptr(), "bezier_track_set_key_out_handle", track, key, prev);
update_obj = true;
+ } else if (name == "handle_mode") {
+ const Variant &value = p_value;
+
+ if (!setting) {
+ setting = true;
+ undo_redo->create_action(TTR("Anim Multi Change Keyframe Value"), UndoRedo::MERGE_ENDS);
+ }
+ int prev = animation->bezier_track_get_key_handle_mode(track, key);
+ undo_redo->add_do_method(animation.ptr(), "bezier_track_set_key_handle_mode", track, key, value);
+ undo_redo->add_undo_method(animation.ptr(), "bezier_track_set_key_handle_mode", track, key, prev);
+ update_obj = true;
}
} break;
case Animation::TYPE_AUDIO: {
@@ -1120,6 +1153,11 @@ public:
return true;
}
+ if (name == "handle_mode") {
+ r_ret = animation->bezier_track_get_key_handle_mode(track, key);
+ return true;
+ }
+
} break;
case Animation::TYPE_AUDIO: {
if (name == "stream") {
@@ -1273,6 +1311,7 @@ public:
p_list->push_back(PropertyInfo(Variant::FLOAT, "value"));
p_list->push_back(PropertyInfo(Variant::VECTOR2, "in_handle"));
p_list->push_back(PropertyInfo(Variant::VECTOR2, "out_handle"));
+ p_list->push_back(PropertyInfo(Variant::INT, "handle_mode", PROPERTY_HINT_ENUM, "Free,Balanced"));
} break;
case Animation::TYPE_AUDIO: {
p_list->push_back(PropertyInfo(Variant::OBJECT, "stream", PROPERTY_HINT_RESOURCE_TYPE, "AudioStream"));
@@ -1377,8 +1416,20 @@ void AnimationTimelineEdit::_anim_length_changed(double p_new_len) {
void AnimationTimelineEdit::_anim_loop_pressed() {
undo_redo->create_action(TTR("Change Animation Loop"));
- undo_redo->add_do_method(animation.ptr(), "set_loop", loop->is_pressed());
- undo_redo->add_undo_method(animation.ptr(), "set_loop", animation->has_loop());
+ switch (animation->get_loop_mode()) {
+ case Animation::LoopMode::LOOP_NONE: {
+ undo_redo->add_do_method(animation.ptr(), "set_loop_mode", Animation::LoopMode::LOOP_LINEAR);
+ } break;
+ case Animation::LoopMode::LOOP_LINEAR: {
+ undo_redo->add_do_method(animation.ptr(), "set_loop_mode", Animation::LoopMode::LOOP_PINGPONG);
+ } break;
+ case Animation::LoopMode::LOOP_PINGPONG: {
+ undo_redo->add_do_method(animation.ptr(), "set_loop_mode", Animation::LoopMode::LOOP_NONE);
+ } break;
+ default:
+ break;
+ }
+ undo_redo->add_undo_method(animation.ptr(), "set_loop_mode", animation->get_loop_mode());
undo_redo->commit_action();
}
@@ -1664,7 +1715,24 @@ void AnimationTimelineEdit::update_values() {
length->set_tooltip(TTR("Animation length (seconds)"));
time_icon->set_tooltip(TTR("Animation length (seconds)"));
}
- loop->set_pressed(animation->has_loop());
+
+ switch (animation->get_loop_mode()) {
+ case Animation::LoopMode::LOOP_NONE: {
+ loop->set_icon(get_theme_icon("Loop", "EditorIcons"));
+ loop->set_pressed(false);
+ } break;
+ case Animation::LoopMode::LOOP_LINEAR: {
+ loop->set_icon(get_theme_icon("Loop", "EditorIcons"));
+ loop->set_pressed(true);
+ } break;
+ case Animation::LoopMode::LOOP_PINGPONG: {
+ loop->set_icon(get_theme_icon("PingPongLoop", "EditorIcons"));
+ loop->set_pressed(true);
+ } break;
+ default:
+ break;
+ }
+
editing = false;
}
@@ -1693,48 +1761,48 @@ void AnimationTimelineEdit::gui_input(const Ref<InputEvent> &p_event) {
const Ref<InputEventMouseButton> mb = p_event;
- if (mb.is_valid() && mb->is_pressed() && mb->is_command_pressed() && mb->get_button_index() == MOUSE_BUTTON_WHEEL_UP) {
+ if (mb.is_valid() && mb->is_pressed() && mb->is_command_pressed() && mb->get_button_index() == MouseButton::WHEEL_UP) {
get_zoom()->set_value(get_zoom()->get_value() * 1.05);
accept_event();
}
- if (mb.is_valid() && mb->is_pressed() && mb->is_command_pressed() && mb->get_button_index() == MOUSE_BUTTON_WHEEL_DOWN) {
+ if (mb.is_valid() && mb->is_pressed() && mb->is_command_pressed() && mb->get_button_index() == MouseButton::WHEEL_DOWN) {
get_zoom()->set_value(get_zoom()->get_value() / 1.05);
accept_event();
}
- if (mb.is_valid() && mb->is_pressed() && mb->is_alt_pressed() && mb->get_button_index() == MOUSE_BUTTON_WHEEL_UP) {
+ if (mb.is_valid() && mb->is_pressed() && mb->is_alt_pressed() && mb->get_button_index() == MouseButton::WHEEL_UP) {
if (track_edit) {
track_edit->get_editor()->goto_prev_step(true);
}
accept_event();
}
- if (mb.is_valid() && mb->is_pressed() && mb->is_alt_pressed() && mb->get_button_index() == MOUSE_BUTTON_WHEEL_DOWN) {
+ if (mb.is_valid() && mb->is_pressed() && mb->is_alt_pressed() && mb->get_button_index() == MouseButton::WHEEL_DOWN) {
if (track_edit) {
track_edit->get_editor()->goto_next_step(true);
}
accept_event();
}
- if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == MOUSE_BUTTON_LEFT && hsize_rect.has_point(mb->get_position())) {
+ if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == MouseButton::LEFT && hsize_rect.has_point(mb->get_position())) {
dragging_hsize = true;
dragging_hsize_from = mb->get_position().x;
dragging_hsize_at = name_limit;
}
- if (mb.is_valid() && !mb->is_pressed() && mb->get_button_index() == MOUSE_BUTTON_LEFT && dragging_hsize) {
+ if (mb.is_valid() && !mb->is_pressed() && mb->get_button_index() == MouseButton::LEFT && dragging_hsize) {
dragging_hsize = false;
}
if (mb.is_valid() && mb->get_position().x > get_name_limit() && mb->get_position().x < (get_size().width - get_buttons_width())) {
- if (!panning_timeline && mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (!panning_timeline && mb->get_button_index() == MouseButton::LEFT) {
int x = mb->get_position().x - get_name_limit();
float ofs = x / get_zoom_scale() + get_value();
- emit_signal(SNAME("timeline_changed"), ofs, false, Input::get_singleton()->is_key_pressed(KEY_ALT));
+ emit_signal(SNAME("timeline_changed"), ofs, false, Input::get_singleton()->is_key_pressed(Key::ALT));
dragging_timeline = true;
}
- if (!dragging_timeline && mb->get_button_index() == MOUSE_BUTTON_MIDDLE) {
+ if (!dragging_timeline && mb->get_button_index() == MouseButton::MIDDLE) {
int x = mb->get_position().x - get_name_limit();
panning_timeline_from = x / get_zoom_scale();
panning_timeline = true;
@@ -1742,11 +1810,11 @@ void AnimationTimelineEdit::gui_input(const Ref<InputEvent> &p_event) {
}
}
- if (dragging_timeline && mb.is_valid() && mb->get_button_index() == MOUSE_BUTTON_LEFT && !mb->is_pressed()) {
+ if (dragging_timeline && mb.is_valid() && mb->get_button_index() == MouseButton::LEFT && !mb->is_pressed()) {
dragging_timeline = false;
}
- if (panning_timeline && mb.is_valid() && mb->get_button_index() == MOUSE_BUTTON_MIDDLE && !mb->is_pressed()) {
+ if (panning_timeline && mb.is_valid() && mb->get_button_index() == MouseButton::MIDDLE && !mb->is_pressed()) {
panning_timeline = false;
}
@@ -1770,7 +1838,7 @@ void AnimationTimelineEdit::gui_input(const Ref<InputEvent> &p_event) {
if (dragging_timeline) {
int x = mm->get_position().x - get_name_limit();
float ofs = x / get_zoom_scale() + get_value();
- emit_signal(SNAME("timeline_changed"), ofs, false, Input::get_singleton()->is_key_pressed(KEY_ALT));
+ emit_signal(SNAME("timeline_changed"), ofs, false, Input::get_singleton()->is_key_pressed(Key::ALT));
}
if (panning_timeline) {
int x = mm->get_position().x - get_name_limit();
@@ -2110,25 +2178,25 @@ void AnimationTrackEdit::_notification(int p_what) {
Ref<Texture2D> icon = wrap_icon[loop_wrap ? 1 : 0];
- loop_mode_rect.position.x = ofs;
- loop_mode_rect.position.y = int(get_size().height - icon->get_height()) / 2;
- loop_mode_rect.size = icon->get_size();
+ loop_wrap_rect.position.x = ofs;
+ loop_wrap_rect.position.y = int(get_size().height - icon->get_height()) / 2;
+ loop_wrap_rect.size = icon->get_size();
if (!animation->track_is_compressed(track) && (animation->track_get_type(track) == Animation::TYPE_VALUE || animation->track_get_type(track) == Animation::TYPE_BLEND_SHAPE || animation->track_get_type(track) == Animation::TYPE_POSITION_3D || animation->track_get_type(track) == Animation::TYPE_SCALE_3D || animation->track_get_type(track) == Animation::TYPE_ROTATION_3D)) {
- draw_texture(icon, loop_mode_rect.position);
+ draw_texture(icon, loop_wrap_rect.position);
}
- loop_mode_rect.position.y = 0;
- loop_mode_rect.size.y = get_size().height;
+ loop_wrap_rect.position.y = 0;
+ loop_wrap_rect.size.y = get_size().height;
ofs += icon->get_width() + hsep;
- loop_mode_rect.size.x += hsep;
+ loop_wrap_rect.size.x += hsep;
if (!animation->track_is_compressed(track) && (animation->track_get_type(track) == Animation::TYPE_VALUE || animation->track_get_type(track) == Animation::TYPE_BLEND_SHAPE || animation->track_get_type(track) == Animation::TYPE_POSITION_3D || animation->track_get_type(track) == Animation::TYPE_SCALE_3D || animation->track_get_type(track) == Animation::TYPE_ROTATION_3D)) {
draw_texture(down_icon, Vector2(ofs, int(get_size().height - down_icon->get_height()) / 2));
- loop_mode_rect.size.x += down_icon->get_width();
+ loop_wrap_rect.size.x += down_icon->get_width();
} else {
- loop_mode_rect = Rect2();
+ loop_wrap_rect = Rect2();
}
ofs += down_icon->get_width();
@@ -2228,6 +2296,11 @@ void AnimationTrackEdit::draw_key(int p_index, float p_pixels_sec, int p_x, bool
Ref<Texture2D> icon_to_draw = p_selected ? selected_icon : type_icon;
+ if (animation->track_get_type(track) == Animation::TYPE_VALUE && !Math::is_equal_approx(animation->track_get_key_transition(track, p_index), real_t(1.0))) {
+ // Use a different icon for keys with non-linear easing.
+ icon_to_draw = get_theme_icon(p_selected ? SNAME("KeyEasedSelected") : SNAME("KeyValueEased"), SNAME("EditorIcons"));
+ }
+
// Override type icon for invalid value keys, unless selected.
if (!p_selected && animation->track_get_type(track) == Animation::TYPE_VALUE) {
const Variant &v = animation->track_get_key_value(track, p_index);
@@ -2478,7 +2551,7 @@ String AnimationTrackEdit::get_tooltip(const Point2 &p_pos) const {
return TTR("Interpolation Mode");
}
- if (loop_mode_rect.has_point(p_pos)) {
+ if (loop_wrap_rect.has_point(p_pos)) {
return TTR("Loop Wrap Mode (Interpolate end with beginning on loop)");
}
@@ -2573,6 +2646,17 @@ String AnimationTrackEdit::get_tooltip(const Point2 &p_pos) const {
text += "In-Handle: " + ih + "\n";
Vector2 oh = animation->bezier_track_get_key_out_handle(track, key_idx);
text += "Out-Handle: " + oh + "\n";
+ int hm = animation->bezier_track_get_key_handle_mode(track, key_idx);
+ text += "Handle mode: ";
+ switch (hm) {
+ case Animation::HANDLE_MODE_FREE: {
+ text += "Free";
+ } break;
+ case Animation::HANDLE_MODE_BALANCED: {
+ text += "Balanced";
+ } break;
+ }
+ text += "\n";
} break;
case Animation::TYPE_AUDIO: {
String stream_name = "null";
@@ -2626,7 +2710,7 @@ void AnimationTrackEdit::gui_input(const Ref<InputEvent> &p_event) {
}
Ref<InputEventMouseButton> mb = p_event;
- if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == MouseButton::LEFT) {
Point2 pos = mb->get_position();
if (check_rect.has_point(pos)) {
@@ -2681,7 +2765,7 @@ void AnimationTrackEdit::gui_input(const Ref<InputEvent> &p_event) {
accept_event();
}
- if (loop_mode_rect.has_point(pos)) {
+ if (loop_wrap_rect.has_point(pos)) {
if (!menu) {
menu = memnew(PopupMenu);
add_child(menu);
@@ -2692,7 +2776,7 @@ void AnimationTrackEdit::gui_input(const Ref<InputEvent> &p_event) {
menu->add_icon_item(get_theme_icon(SNAME("InterpWrapLoop"), SNAME("EditorIcons")), TTR("Wrap Loop Interp"), MENU_LOOP_WRAP);
menu->set_as_minsize();
- Vector2 popup_pos = get_screen_position() + loop_mode_rect.position + Vector2(0, loop_mode_rect.size.height);
+ Vector2 popup_pos = get_screen_position() + loop_wrap_rect.position + Vector2(0, loop_wrap_rect.size.height);
menu->set_position(popup_pos);
menu->popup();
accept_event();
@@ -2772,7 +2856,7 @@ void AnimationTrackEdit::gui_input(const Ref<InputEvent> &p_event) {
}
}
- if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == MOUSE_BUTTON_RIGHT) {
+ if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == MouseButton::RIGHT) {
Point2 pos = mb->get_position();
if (pos.x >= timeline->get_name_limit() && pos.x <= get_size().width - timeline->get_buttons_width()) {
// Can do something with menu too! show insert key.
@@ -2802,7 +2886,7 @@ void AnimationTrackEdit::gui_input(const Ref<InputEvent> &p_event) {
}
}
- if (mb.is_valid() && !mb->is_pressed() && mb->get_button_index() == MOUSE_BUTTON_LEFT && clicking_on_name) {
+ if (mb.is_valid() && !mb->is_pressed() && mb->get_button_index() == MouseButton::LEFT && clicking_on_name) {
if (!path) {
path_popup = memnew(Popup);
path_popup->set_wrap_controls(true);
@@ -2824,7 +2908,7 @@ void AnimationTrackEdit::gui_input(const Ref<InputEvent> &p_event) {
}
if (mb.is_valid() && moving_selection_attempt) {
- if (!mb->is_pressed() && mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (!mb->is_pressed() && mb->get_button_index() == MouseButton::LEFT) {
moving_selection_attempt = false;
if (moving_selection) {
emit_signal(SNAME("move_selection_commit"));
@@ -2835,7 +2919,7 @@ void AnimationTrackEdit::gui_input(const Ref<InputEvent> &p_event) {
select_single_attempt = -1;
}
- if (moving_selection && mb->is_pressed() && mb->get_button_index() == MOUSE_BUTTON_RIGHT) {
+ if (moving_selection && mb->is_pressed() && mb->get_button_index() == MouseButton::RIGHT) {
moving_selection_attempt = false;
moving_selection = false;
emit_signal(SNAME("move_selection_cancel"));
@@ -2843,7 +2927,7 @@ void AnimationTrackEdit::gui_input(const Ref<InputEvent> &p_event) {
}
Ref<InputEventMouseMotion> mm = p_event;
- if (mm.is_valid() && mm->get_button_mask() & MOUSE_BUTTON_MASK_LEFT && moving_selection_attempt) {
+ if (mm.is_valid() && (mm->get_button_mask() & MouseButton::MASK_LEFT) != MouseButton::NONE && moving_selection_attempt) {
if (!moving_selection) {
moving_selection = true;
emit_signal(SNAME("move_selection_begin"));
@@ -4137,7 +4221,7 @@ bool AnimationTrackEditor::is_selection_active() const {
}
bool AnimationTrackEditor::is_snap_enabled() const {
- return snap->is_pressed() ^ Input::get_singleton()->is_key_pressed(KEY_CTRL);
+ return snap->is_pressed() ^ Input::get_singleton()->is_key_pressed(Key::CTRL);
}
void AnimationTrackEditor::_update_tracks() {
@@ -4762,12 +4846,13 @@ void AnimationTrackEditor::_insert_key_from_track(float p_ofs, int p_track) {
Variant value;
_find_hint_for_track(p_track, bp, &value);
Array arr;
- arr.resize(5);
+ arr.resize(6);
arr[0] = value;
arr[1] = -0.25;
arr[2] = 0;
arr[3] = 0.25;
arr[4] = 0;
+ arr[5] = 0;
undo_redo->create_action(TTR("Add Track Key"));
undo_redo->add_do_method(animation.ptr(), "track_insert_key", p_track, p_ofs, arr);
@@ -5118,27 +5203,27 @@ void AnimationTrackEditor::_box_selection_draw() {
void AnimationTrackEditor::_scroll_input(const Ref<InputEvent> &p_event) {
Ref<InputEventMouseButton> mb = p_event;
- if (mb.is_valid() && mb->is_pressed() && mb->is_command_pressed() && mb->get_button_index() == MOUSE_BUTTON_WHEEL_UP) {
+ if (mb.is_valid() && mb->is_pressed() && mb->is_command_pressed() && mb->get_button_index() == MouseButton::WHEEL_UP) {
timeline->get_zoom()->set_value(timeline->get_zoom()->get_value() * 1.05);
scroll->accept_event();
}
- if (mb.is_valid() && mb->is_pressed() && mb->is_command_pressed() && mb->get_button_index() == MOUSE_BUTTON_WHEEL_DOWN) {
+ if (mb.is_valid() && mb->is_pressed() && mb->is_command_pressed() && mb->get_button_index() == MouseButton::WHEEL_DOWN) {
timeline->get_zoom()->set_value(timeline->get_zoom()->get_value() / 1.05);
scroll->accept_event();
}
- if (mb.is_valid() && mb->is_pressed() && mb->is_alt_pressed() && mb->get_button_index() == MOUSE_BUTTON_WHEEL_UP) {
+ if (mb.is_valid() && mb->is_pressed() && mb->is_alt_pressed() && mb->get_button_index() == MouseButton::WHEEL_UP) {
goto_prev_step(true);
scroll->accept_event();
}
- if (mb.is_valid() && mb->is_pressed() && mb->is_alt_pressed() && mb->get_button_index() == MOUSE_BUTTON_WHEEL_DOWN) {
+ if (mb.is_valid() && mb->is_pressed() && mb->is_alt_pressed() && mb->get_button_index() == MouseButton::WHEEL_DOWN) {
goto_next_step(true);
scroll->accept_event();
}
- if (mb.is_valid() && mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (mb.is_valid() && mb->get_button_index() == MouseButton::LEFT) {
if (mb->is_pressed()) {
box_selecting = true;
box_selecting_from = scroll->get_global_transform().xform(mb->get_position());
@@ -5166,12 +5251,12 @@ void AnimationTrackEditor::_scroll_input(const Ref<InputEvent> &p_event) {
Ref<InputEventMouseMotion> mm = p_event;
- if (mm.is_valid() && mm->get_button_mask() & MOUSE_BUTTON_MASK_MIDDLE) {
+ if (mm.is_valid() && (mm->get_button_mask() & MouseButton::MASK_MIDDLE) != MouseButton::NONE) {
timeline->set_value(timeline->get_value() - mm->get_relative().x / timeline->get_zoom_scale());
}
if (mm.is_valid() && box_selecting) {
- if (!(mm->get_button_mask() & MOUSE_BUTTON_MASK_LEFT)) {
+ if ((mm->get_button_mask() & MouseButton::MASK_LEFT) == MouseButton::NONE) {
// No longer.
box_selection->hide();
box_selecting = false;
@@ -5320,7 +5405,7 @@ void AnimationTrackEditor::goto_prev_step(bool p_from_mouse_event) {
if (step == 0) {
step = 1;
}
- if (p_from_mouse_event && Input::get_singleton()->is_key_pressed(KEY_SHIFT)) {
+ if (p_from_mouse_event && Input::get_singleton()->is_key_pressed(Key::SHIFT)) {
// Use more precise snapping when holding Shift.
// This is used when scrobbling the timeline using Alt + Mouse wheel.
step *= 0.25;
@@ -5343,7 +5428,7 @@ void AnimationTrackEditor::goto_next_step(bool p_from_mouse_event) {
if (step == 0) {
step = 1;
}
- if (p_from_mouse_event && Input::get_singleton()->is_key_pressed(KEY_SHIFT)) {
+ if (p_from_mouse_event && Input::get_singleton()->is_key_pressed(Key::SHIFT)) {
// Use more precise snapping when holding Shift.
// This is used when scrobbling the timeline using Alt + Mouse wheel.
// Do not use precise snapping when using the menu action or keyboard shortcut,
@@ -5779,7 +5864,7 @@ float AnimationTrackEditor::snap_time(float p_value, bool p_relative) {
snap_increment = step->get_value();
}
- if (Input::get_singleton()->is_key_pressed(KEY_SHIFT)) {
+ if (Input::get_singleton()->is_key_pressed(Key::SHIFT)) {
// Use more precise snapping when holding Shift.
snap_increment *= 0.25;
}
@@ -5893,10 +5978,10 @@ void AnimationTrackEditor::_pick_track_filter_input(const Ref<InputEvent> &p_ie)
if (k.is_valid()) {
switch (k->get_keycode()) {
- case KEY_UP:
- case KEY_DOWN:
- case KEY_PAGEUP:
- case KEY_PAGEDOWN: {
+ case Key::UP:
+ case Key::DOWN:
+ case Key::PAGEUP:
+ case Key::PAGEDOWN: {
pick_track->get_scene_tree()->get_scene_tree()->gui_input(k);
pick_track->get_filter_line_edit()->accept_event();
} break;
@@ -6057,14 +6142,14 @@ AnimationTrackEditor::AnimationTrackEditor() {
edit->get_popup()->add_item(TTR("Scale Selection"), EDIT_SCALE_SELECTION);
edit->get_popup()->add_item(TTR("Scale From Cursor"), EDIT_SCALE_FROM_CURSOR);
edit->get_popup()->add_separator();
- edit->get_popup()->add_shortcut(ED_SHORTCUT("animation_editor/duplicate_selection", TTR("Duplicate Selection"), KEY_MASK_CMD | KEY_D), EDIT_DUPLICATE_SELECTION);
- edit->get_popup()->add_shortcut(ED_SHORTCUT("animation_editor/duplicate_selection_transposed", TTR("Duplicate Transposed"), KEY_MASK_SHIFT | KEY_MASK_CMD | KEY_D), EDIT_DUPLICATE_TRANSPOSED);
+ edit->get_popup()->add_shortcut(ED_SHORTCUT("animation_editor/duplicate_selection", TTR("Duplicate Selection"), KeyModifierMask::CMD | Key::D), EDIT_DUPLICATE_SELECTION);
+ edit->get_popup()->add_shortcut(ED_SHORTCUT("animation_editor/duplicate_selection_transposed", TTR("Duplicate Transposed"), KeyModifierMask::SHIFT | KeyModifierMask::CMD | Key::D), EDIT_DUPLICATE_TRANSPOSED);
edit->get_popup()->add_separator();
- edit->get_popup()->add_shortcut(ED_SHORTCUT("animation_editor/delete_selection", TTR("Delete Selection"), KEY_DELETE), EDIT_DELETE_SELECTION);
+ edit->get_popup()->add_shortcut(ED_SHORTCUT("animation_editor/delete_selection", TTR("Delete Selection"), Key::KEY_DELETE), EDIT_DELETE_SELECTION);
edit->get_popup()->add_separator();
- edit->get_popup()->add_shortcut(ED_SHORTCUT("animation_editor/goto_next_step", TTR("Go to Next Step"), KEY_MASK_CMD | KEY_RIGHT), EDIT_GOTO_NEXT_STEP);
- edit->get_popup()->add_shortcut(ED_SHORTCUT("animation_editor/goto_prev_step", TTR("Go to Previous Step"), KEY_MASK_CMD | KEY_LEFT), EDIT_GOTO_PREV_STEP);
+ edit->get_popup()->add_shortcut(ED_SHORTCUT("animation_editor/goto_next_step", TTR("Go to Next Step"), KeyModifierMask::CMD | Key::RIGHT), EDIT_GOTO_NEXT_STEP);
+ edit->get_popup()->add_shortcut(ED_SHORTCUT("animation_editor/goto_prev_step", TTR("Go to Previous Step"), KeyModifierMask::CMD | Key::LEFT), EDIT_GOTO_PREV_STEP);
edit->get_popup()->add_separator();
edit->get_popup()->add_shortcut(ED_SHORTCUT("animation_editor/apply_reset", TTR("Apply Reset")), EDIT_APPLY_RESET);
edit->get_popup()->add_separator();
diff --git a/editor/animation_track_editor.h b/editor/animation_track_editor.h
index 05cf91de1d..2bdc1d4107 100644
--- a/editor/animation_track_editor.h
+++ b/editor/animation_track_editor.h
@@ -159,7 +159,7 @@ class AnimationTrackEdit : public Control {
Rect2 update_mode_rect;
Rect2 interp_mode_rect;
- Rect2 loop_mode_rect;
+ Rect2 loop_wrap_rect;
Rect2 remove_rect;
Rect2 bezier_edit_rect;
@@ -466,6 +466,7 @@ class AnimationTrackEditor : public VBoxContainer {
Animation::TrackType track_type = Animation::TrackType::TYPE_ANIMATION;
Animation::InterpolationType interp_type = Animation::InterpolationType::INTERPOLATION_CUBIC;
Animation::UpdateMode update_mode = Animation::UpdateMode::UPDATE_CAPTURE;
+ Animation::LoopMode loop_mode = Animation::LoopMode::LOOP_LINEAR;
bool loop_wrap = false;
bool enabled = false;
diff --git a/editor/animation_track_editor_plugins.cpp b/editor/animation_track_editor_plugins.cpp
index 70ba806c37..dd3e08b299 100644
--- a/editor/animation_track_editor_plugins.cpp
+++ b/editor/animation_track_editor_plugins.cpp
@@ -1098,7 +1098,7 @@ void AnimationTrackEditTypeAudio::gui_input(const Ref<InputEvent> &p_event) {
}
Ref<InputEventMouseButton> mb = p_event;
- if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == MOUSE_BUTTON_LEFT && get_default_cursor_shape() == CURSOR_HSIZE) {
+ if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == MouseButton::LEFT && get_default_cursor_shape() == CURSOR_HSIZE) {
len_resizing = true;
len_resizing_start = mb->is_shift_pressed();
len_resizing_from_px = mb->get_position().x;
@@ -1108,7 +1108,7 @@ void AnimationTrackEditTypeAudio::gui_input(const Ref<InputEvent> &p_event) {
return;
}
- if (len_resizing && mb.is_valid() && !mb->is_pressed() && mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (len_resizing && mb.is_valid() && !mb->is_pressed() && mb->get_button_index() == MouseButton::LEFT) {
float ofs_local = -len_resizing_rel / get_timeline()->get_zoom_scale();
if (len_resizing_start) {
float prev_ofs = get_animation()->audio_track_get_key_start_offset(get_track(), len_resizing_index);
diff --git a/editor/code_editor.cpp b/editor/code_editor.cpp
index 1902ae66fb..bfcd2dd4ca 100644
--- a/editor/code_editor.cpp
+++ b/editor/code_editor.cpp
@@ -127,7 +127,7 @@ void FindReplaceBar::unhandled_input(const Ref<InputEvent> &p_event) {
bool accepted = true;
switch (k->get_keycode()) {
- case KEY_ESCAPE: {
+ case Key::ESCAPE: {
_hide_bar();
} break;
default: {
@@ -542,7 +542,7 @@ void FindReplaceBar::_search_text_changed(const String &p_text) {
}
void FindReplaceBar::_search_text_submitted(const String &p_text) {
- if (Input::get_singleton()->is_key_pressed(KEY_SHIFT)) {
+ if (Input::get_singleton()->is_key_pressed(Key::SHIFT)) {
search_prev();
} else {
search_next();
@@ -553,7 +553,7 @@ void FindReplaceBar::_replace_text_submitted(const String &p_text) {
if (selection_only->is_pressed() && text_editor->has_selection()) {
_replace_all();
_hide_bar();
- } else if (Input::get_singleton()->is_key_pressed(KEY_SHIFT)) {
+ } else if (Input::get_singleton()->is_key_pressed(Key::SHIFT)) {
_replace();
search_prev();
} else {
@@ -766,9 +766,9 @@ void CodeTextEditor::_text_editor_gui_input(const Ref<InputEvent> &p_event) {
if (mb.is_valid()) {
if (mb->is_pressed() && mb->is_command_pressed()) {
- if (mb->get_button_index() == MOUSE_BUTTON_WHEEL_UP) {
+ if (mb->get_button_index() == MouseButton::WHEEL_UP) {
_zoom_in();
- } else if (mb->get_button_index() == MOUSE_BUTTON_WHEEL_DOWN) {
+ } else if (mb->get_button_index() == MouseButton::WHEEL_DOWN) {
_zoom_out();
}
}
@@ -1654,7 +1654,7 @@ void CodeTextEditor::_toggle_scripts_pressed() {
void CodeTextEditor::_error_pressed(const Ref<InputEvent> &p_event) {
Ref<InputEventMouseButton> mb = p_event;
- if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == MouseButton::LEFT) {
goto_error();
}
}
@@ -1788,9 +1788,9 @@ void CodeTextEditor::update_toggle_scripts_button() {
CodeTextEditor::CodeTextEditor() {
code_complete_func = nullptr;
- ED_SHORTCUT("script_editor/zoom_in", TTR("Zoom In"), KEY_MASK_CMD | KEY_EQUAL);
- ED_SHORTCUT("script_editor/zoom_out", TTR("Zoom Out"), KEY_MASK_CMD | KEY_MINUS);
- ED_SHORTCUT("script_editor/reset_zoom", TTR("Reset Zoom"), KEY_MASK_CMD | KEY_0);
+ ED_SHORTCUT("script_editor/zoom_in", TTR("Zoom In"), KeyModifierMask::CMD | Key::EQUAL);
+ ED_SHORTCUT("script_editor/zoom_out", TTR("Zoom Out"), KeyModifierMask::CMD | Key::MINUS);
+ ED_SHORTCUT("script_editor/reset_zoom", TTR("Reset Zoom"), KeyModifierMask::CMD | Key::KEY_0);
text_editor = memnew(CodeEdit);
add_child(text_editor);
diff --git a/editor/connections_dialog.cpp b/editor/connections_dialog.cpp
index c773f51342..d00fdd0ce7 100644
--- a/editor/connections_dialog.cpp
+++ b/editor/connections_dialog.cpp
@@ -240,7 +240,7 @@ void ConnectDialog::_remove_bind() {
int idx = st.get_slice("/", 1).to_int() - 1;
ERR_FAIL_INDEX(idx, cdbinds->params.size());
- cdbinds->params.remove(idx);
+ cdbinds->params.remove_at(idx);
cdbinds->notify_changed();
}
@@ -378,7 +378,7 @@ void ConnectDialog::_advanced_pressed() {
error_label->hide();
} else {
set_min_size(Size2(600, 500) * EDSCALE);
- set_size(Size2());
+ reset_size();
connect_to_label->set_text(TTR("Connect to Script:"));
tree->set_connect_to_script_mode(true);
@@ -723,7 +723,7 @@ void ConnectionsDock::_open_connection_dialog(TreeItem &item) {
c = '_';
} else {
// Remove any other characters.
- midname.remove(i);
+ midname.remove_at(i);
i--;
continue;
}
diff --git a/editor/create_dialog.cpp b/editor/create_dialog.cpp
index f0b27702e7..dec4f50f03 100644
--- a/editor/create_dialog.cpp
+++ b/editor/create_dialog.cpp
@@ -352,10 +352,10 @@ void CreateDialog::_sbox_input(const Ref<InputEvent> &p_ie) {
Ref<InputEventKey> k = p_ie;
if (k.is_valid()) {
switch (k->get_keycode()) {
- case KEY_UP:
- case KEY_DOWN:
- case KEY_PAGEUP:
- case KEY_PAGEDOWN: {
+ case Key::UP:
+ case Key::DOWN:
+ case Key::PAGEUP:
+ case Key::PAGEDOWN: {
search_options->gui_input(k);
search_box->accept_event();
} break;
@@ -576,7 +576,7 @@ void CreateDialog::drop_data_fw(const Point2 &p_point, const Variant &p_data, Co
drop_idx--;
}
- favorite_list.remove(from_idx);
+ favorite_list.remove_at(from_idx);
if (ds < 0) {
favorite_list.insert(drop_idx, type);
diff --git a/editor/debugger/editor_performance_profiler.cpp b/editor/debugger/editor_performance_profiler.cpp
index 08ed675d16..952f46e9a5 100644
--- a/editor/debugger/editor_performance_profiler.cpp
+++ b/editor/debugger/editor_performance_profiler.cpp
@@ -249,7 +249,7 @@ TreeItem *EditorPerformanceProfiler::_create_monitor_item(const StringName &p_mo
void EditorPerformanceProfiler::_marker_input(const Ref<InputEvent> &p_event) {
Ref<InputEventMouseButton> mb = p_event;
- if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == MouseButton::LEFT) {
Vector<StringName> active;
for (OrderedHashMap<StringName, Monitor>::Element i = monitors.front(); i; i = i.next()) {
if (i.value().item->is_checked(0)) {
diff --git a/editor/debugger/editor_profiler.cpp b/editor/debugger/editor_profiler.cpp
index 2fe7cd7886..d08ae1de8a 100644
--- a/editor/debugger/editor_profiler.cpp
+++ b/editor/debugger/editor_profiler.cpp
@@ -438,7 +438,7 @@ void EditorProfiler::_graph_tex_input(const Ref<InputEvent> &p_ev) {
Ref<InputEventMouseMotion> mm = p_ev;
if (
- (mb.is_valid() && mb->get_button_index() == MOUSE_BUTTON_LEFT && mb->is_pressed()) ||
+ (mb.is_valid() && mb->get_button_index() == MouseButton::LEFT && mb->is_pressed()) ||
(mm.is_valid())) {
int x = me->get_position().x - 1;
x = x * frame_metrics.size() / graph->get_size().width;
@@ -453,7 +453,7 @@ void EditorProfiler::_graph_tex_input(const Ref<InputEvent> &p_ev) {
x = frame_metrics.size() - 1;
}
- if (mb.is_valid() || mm->get_button_mask() & MOUSE_BUTTON_MASK_LEFT) {
+ if (mb.is_valid() || (mm->get_button_mask() & MouseButton::MASK_LEFT) != MouseButton::NONE) {
updating_frame = true;
if (x < total_metrics)
diff --git a/editor/debugger/editor_visual_profiler.cpp b/editor/debugger/editor_visual_profiler.cpp
index f25f18b7e4..4739458f8e 100644
--- a/editor/debugger/editor_visual_profiler.cpp
+++ b/editor/debugger/editor_visual_profiler.cpp
@@ -517,7 +517,7 @@ void EditorVisualProfiler::_graph_tex_input(const Ref<InputEvent> &p_ev) {
Ref<InputEventMouseMotion> mm = p_ev;
if (
- (mb.is_valid() && mb->get_button_index() == MOUSE_BUTTON_LEFT && mb->is_pressed()) ||
+ (mb.is_valid() && mb->get_button_index() == MouseButton::LEFT && mb->is_pressed()) ||
(mm.is_valid())) {
int half_w = graph->get_size().width / 2;
int x = me->get_position().x;
@@ -549,7 +549,7 @@ void EditorVisualProfiler::_graph_tex_input(const Ref<InputEvent> &p_ev) {
hover_metric = -1;
}
- if (mb.is_valid() || mm->get_button_mask() & MOUSE_BUTTON_MASK_LEFT) {
+ if (mb.is_valid() || (mm->get_button_mask() & MouseButton::MASK_LEFT) != MouseButton::NONE) {
//cursor_metric=x;
updating_frame = true;
diff --git a/editor/debugger/script_editor_debugger.cpp b/editor/debugger/script_editor_debugger.cpp
index a312c161a8..b18c225f23 100644
--- a/editor/debugger/script_editor_debugger.cpp
+++ b/editor/debugger/script_editor_debugger.cpp
@@ -578,6 +578,12 @@ void ScriptEditorDebugger::_parse_message(const String &p_msg, const Array &p_da
error->set_tooltip(0, tooltip);
error->set_tooltip(1, tooltip);
+ if (warning_count == 0 && error_count == 0) {
+ expand_all_button->set_disabled(false);
+ collapse_all_button->set_disabled(false);
+ clear_button->set_disabled(false);
+ }
+
if (oe.warning) {
warning_count++;
} else {
@@ -1404,12 +1410,17 @@ void ScriptEditorDebugger::_clear_errors_list() {
error_tree->clear();
error_count = 0;
warning_count = 0;
+ update_tabs();
+
+ expand_all_button->set_disabled(true);
+ collapse_all_button->set_disabled(true);
+ clear_button->set_disabled(true);
}
// Right click on specific file(s) or folder(s).
void ScriptEditorDebugger::_error_tree_item_rmb_selected(const Vector2 &p_pos) {
item_menu->clear();
- item_menu->set_size(Size2(1, 1));
+ item_menu->reset_size();
if (error_tree->is_anything_selected()) {
item_menu->add_icon_item(get_theme_icon(SNAME("ActionCopy"), SNAME("EditorIcons")), TTR("Copy Error"), ACTION_COPY_ERROR);
@@ -1662,28 +1673,31 @@ ScriptEditorDebugger::ScriptEditorDebugger(EditorNode *p_editor) {
errors_tab = memnew(VBoxContainer);
errors_tab->set_name(TTR("Errors"));
- HBoxContainer *errhb = memnew(HBoxContainer);
- errors_tab->add_child(errhb);
+ HBoxContainer *error_hbox = memnew(HBoxContainer);
+ errors_tab->add_child(error_hbox);
- Button *expand_all = memnew(Button);
- expand_all->set_text(TTR("Expand All"));
- expand_all->connect("pressed", callable_mp(this, &ScriptEditorDebugger::_expand_errors_list));
- errhb->add_child(expand_all);
+ expand_all_button = memnew(Button);
+ expand_all_button->set_text(TTR("Expand All"));
+ expand_all_button->set_disabled(true);
+ expand_all_button->connect("pressed", callable_mp(this, &ScriptEditorDebugger::_expand_errors_list));
+ error_hbox->add_child(expand_all_button);
- Button *collapse_all = memnew(Button);
- collapse_all->set_text(TTR("Collapse All"));
- collapse_all->connect("pressed", callable_mp(this, &ScriptEditorDebugger::_collapse_errors_list));
- errhb->add_child(collapse_all);
+ collapse_all_button = memnew(Button);
+ collapse_all_button->set_text(TTR("Collapse All"));
+ collapse_all_button->set_disabled(true);
+ collapse_all_button->connect("pressed", callable_mp(this, &ScriptEditorDebugger::_collapse_errors_list));
+ error_hbox->add_child(collapse_all_button);
Control *space = memnew(Control);
space->set_h_size_flags(SIZE_EXPAND_FILL);
- errhb->add_child(space);
-
- clearbutton = memnew(Button);
- clearbutton->set_text(TTR("Clear"));
- clearbutton->set_h_size_flags(0);
- clearbutton->connect("pressed", callable_mp(this, &ScriptEditorDebugger::_clear_errors_list));
- errhb->add_child(clearbutton);
+ error_hbox->add_child(space);
+
+ clear_button = memnew(Button);
+ clear_button->set_text(TTR("Clear"));
+ clear_button->set_h_size_flags(0);
+ clear_button->set_disabled(true);
+ clear_button->connect("pressed", callable_mp(this, &ScriptEditorDebugger::_clear_errors_list));
+ error_hbox->add_child(clear_button);
error_tree = memnew(Tree);
error_tree->set_columns(2);
diff --git a/editor/debugger/script_editor_debugger.h b/editor/debugger/script_editor_debugger.h
index 1c1c0fd3e5..76209aef46 100644
--- a/editor/debugger/script_editor_debugger.h
+++ b/editor/debugger/script_editor_debugger.h
@@ -94,7 +94,9 @@ private:
VBoxContainer *errors_tab;
Tree *error_tree;
- Button *clearbutton;
+ Button *expand_all_button;
+ Button *collapse_all_button;
+ Button *clear_button;
PopupMenu *item_menu;
EditorFileDialog *file_dialog;
diff --git a/editor/dependency_editor.cpp b/editor/dependency_editor.cpp
index d07d77c112..f18284638f 100644
--- a/editor/dependency_editor.cpp
+++ b/editor/dependency_editor.cpp
@@ -270,7 +270,7 @@ DependencyEditor::DependencyEditor() {
/////////////////////////////////////
void DependencyEditorOwners::_list_rmb_select(int p_item, const Vector2 &p_pos) {
file_options->clear();
- file_options->set_size(Size2(1, 1));
+ file_options->reset_size();
if (p_item >= 0) {
file_options->add_item(TTR("Open"), FILE_OPEN);
}
@@ -464,7 +464,7 @@ void DependencyRemoveDialog::show(const Vector<String> &p_folders, const Vector<
if (removed_deps.is_empty()) {
owners->hide();
text->set_text(TTR("Remove the selected files from the project? (Cannot be undone.)\nDepending on your filesystem configuration, the files will either be moved to the system trash or deleted permanently."));
- set_size(Size2());
+ reset_size();
popup_centered();
} else {
_build_removed_dependency_tree(removed_deps);
diff --git a/editor/doc_tools.cpp b/editor/doc_tools.cpp
index 61cc6dbd4a..5ce57e936a 100644
--- a/editor/doc_tools.cpp
+++ b/editor/doc_tools.cpp
@@ -41,7 +41,7 @@
#include "scene/resources/theme.h"
// Used for a hack preserving Mono properties on non-Mono builds.
-#include "modules/modules_enabled.gen.h"
+#include "modules/modules_enabled.gen.h" // For mono.
void DocTools::merge_from(const DocTools &p_data) {
for (KeyValue<String, DocData::ClassDoc> &E : class_list) {
diff --git a/editor/editor_audio_buses.cpp b/editor/editor_audio_buses.cpp
index b9f1c1af54..dd9f10a23b 100644
--- a/editor/editor_audio_buses.cpp
+++ b/editor/editor_audio_buses.cpp
@@ -303,7 +303,7 @@ void EditorAudioBus::_volume_changed(float p_normalized) {
const float p_db = this->_normalized_volume_to_scaled_db(p_normalized);
- if (Input::get_singleton()->is_key_pressed(KEY_CTRL)) {
+ if (Input::get_singleton()->is_key_pressed(Key::CTRL)) {
// Snap the value when holding Ctrl for easier editing.
// To do so, it needs to be converted back to normalized volume (as the slider uses that unit).
slider->set_value(_scaled_db_to_normalized_volume(Math::round(p_db)));
@@ -363,7 +363,7 @@ float EditorAudioBus::_scaled_db_to_normalized_volume(float db) {
void EditorAudioBus::_show_value(float slider_value) {
float db;
- if (Input::get_singleton()->is_key_pressed(KEY_CTRL)) {
+ if (Input::get_singleton()->is_key_pressed(Key::CTRL)) {
// Display the correct (snapped) value when holding Ctrl
db = Math::round(_normalized_volume_to_scaled_db(slider_value));
} else {
@@ -534,7 +534,7 @@ void EditorAudioBus::gui_input(const Ref<InputEvent> &p_event) {
ERR_FAIL_COND(p_event.is_null());
Ref<InputEventMouseButton> mb = p_event;
- if (mb.is_valid() && mb->get_button_index() == MOUSE_BUTTON_RIGHT && mb->is_pressed()) {
+ if (mb.is_valid() && mb->get_button_index() == MouseButton::RIGHT && mb->is_pressed()) {
Vector2 pos = mb->get_position();
bus_popup->set_position(get_global_position() + pos);
bus_popup->popup();
@@ -543,7 +543,7 @@ void EditorAudioBus::gui_input(const Ref<InputEvent> &p_event) {
void EditorAudioBus::_effects_gui_input(Ref<InputEvent> p_event) {
Ref<InputEventKey> k = p_event;
- if (k.is_valid() && k->is_pressed() && !k->is_echo() && k->get_keycode() == KEY_DELETE) {
+ if (k.is_valid() && k->is_pressed() && !k->is_echo() && k->get_keycode() == Key::KEY_DELETE) {
TreeItem *current_effect = effects->get_selected();
if (current_effect && current_effect->get_metadata(0).get_type() == Variant::INT) {
_delete_effect_pressed(0);
@@ -925,8 +925,8 @@ EditorAudioBus::EditorAudioBus(EditorAudioBuses *p_buses, bool p_is_master) {
hbc->add_child(bus_options);
bus_popup = bus_options->get_popup();
- bus_popup->add_shortcut(ED_SHORTCUT("audio_bus_editor/duplicate_selected_bus", TTR("Duplicate Bus"), KEY_MASK_CMD | KEY_D));
- bus_popup->add_shortcut(ED_SHORTCUT("audio_bus_editor/delete_selected_bus", TTR("Delete Bus"), KEY_DELETE));
+ bus_popup->add_shortcut(ED_SHORTCUT("audio_bus_editor/duplicate_selected_bus", TTR("Duplicate Bus"), KeyModifierMask::CMD | Key::D));
+ bus_popup->add_shortcut(ED_SHORTCUT("audio_bus_editor/delete_selected_bus", TTR("Delete Bus"), Key::KEY_DELETE));
bus_popup->set_item_disabled(1, is_master);
bus_popup->add_item(TTR("Reset Volume"));
bus_popup->connect("index_pressed", callable_mp(this, &EditorAudioBus::_bus_popup_pressed));
diff --git a/editor/editor_autoload_settings.cpp b/editor/editor_autoload_settings.cpp
index 0840c3b6a8..25e76c2262 100644
--- a/editor/editor_autoload_settings.cpp
+++ b/editor/editor_autoload_settings.cpp
@@ -117,7 +117,7 @@ bool EditorAutoloadSettings::_autoload_name_is_valid(const String &p_name, Strin
for (const String &E : keywords) {
if (E == p_name) {
if (r_error) {
- *r_error = TTR("Invalid name.") + " " + TTR("Keyword cannot be used as an autoload name.");
+ *r_error = TTR("Invalid name.") + " " + TTR("Keyword cannot be used as an AutoLoad name.");
}
return false;
@@ -373,13 +373,13 @@ Node *EditorAutoloadSettings::_create_autoload(const String &p_path) {
Object *obj = ClassDB::instantiate(ibt);
- ERR_FAIL_COND_V_MSG(obj == nullptr, nullptr, "Cannot instance script for autoload, expected 'Node' inheritance, got: " + String(ibt) + ".");
+ ERR_FAIL_COND_V_MSG(obj == nullptr, nullptr, "Cannot instance script for AutoLoad, expected 'Node' inheritance, got: " + String(ibt) + ".");
n = Object::cast_to<Node>(obj);
n->set_script(s);
}
- ERR_FAIL_COND_V_MSG(!n, nullptr, "Path in autoload not a node or script: " + p_path + ".");
+ ERR_FAIL_COND_V_MSG(!n, nullptr, "Path in AutoLoad not a node or script: " + p_path + ".");
return n;
}
@@ -692,18 +692,18 @@ bool EditorAutoloadSettings::autoload_add(const String &p_name, const String &p_
String error;
if (!_autoload_name_is_valid(name, &error)) {
- EditorNode::get_singleton()->show_warning(TTR("Can't add autoload:") + "\n" + error);
+ EditorNode::get_singleton()->show_warning(TTR("Can't add AutoLoad:") + "\n" + error);
return false;
}
const String &path = p_path;
if (!FileAccess::exists(path)) {
- EditorNode::get_singleton()->show_warning(TTR("Can't add autoload:") + "\n" + vformat(TTR("%s is an invalid path. File does not exist."), path));
+ EditorNode::get_singleton()->show_warning(TTR("Can't add AutoLoad:") + "\n" + vformat(TTR("%s is an invalid path. File does not exist."), path));
return false;
}
if (!path.begins_with("res://")) {
- EditorNode::get_singleton()->show_warning(TTR("Can't add autoload:") + "\n" + vformat(TTR("%s is an invalid path. Not in resource path (res://)."), path));
+ EditorNode::get_singleton()->show_warning(TTR("Can't add AutoLoad:") + "\n" + vformat(TTR("%s is an invalid path. Not in resource path (res://)."), path));
return false;
}
diff --git a/editor/editor_builders.py b/editor/editor_builders.py
index ff0daa86ff..67d4b8534f 100644
--- a/editor/editor_builders.py
+++ b/editor/editor_builders.py
@@ -26,7 +26,9 @@ def make_doc_header(target, source, env):
decomp_size = len(buf)
import zlib
- buf = zlib.compress(buf)
+ # Use maximum zlib compression level to further reduce file size
+ # (at the cost of initial build times).
+ buf = zlib.compress(buf, zlib.Z_BEST_COMPRESSION)
g.write("/* THIS FILE IS GENERATED DO NOT EDIT */\n")
g.write("#ifndef _DOC_DATA_RAW_H\n")
@@ -92,7 +94,9 @@ def make_translations_header(target, source, env, category):
with open(sorted_paths[i], "rb") as f:
buf = f.read()
decomp_size = len(buf)
- buf = zlib.compress(buf)
+ # Use maximum zlib compression level to further reduce file size
+ # (at the cost of initial build times).
+ buf = zlib.compress(buf, zlib.Z_BEST_COMPRESSION)
name = os.path.splitext(os.path.basename(sorted_paths[i]))[0]
g.write("static const unsigned char _{}_translation_{}_compressed[] = {{\n".format(category, name))
diff --git a/editor/editor_command_palette.cpp b/editor/editor_command_palette.cpp
index 71e9fac219..52e55de84c 100644
--- a/editor/editor_command_palette.cpp
+++ b/editor/editor_command_palette.cpp
@@ -149,10 +149,10 @@ void EditorCommandPalette::_sbox_input(const Ref<InputEvent> &p_ie) {
Ref<InputEventKey> k = p_ie;
if (k.is_valid()) {
switch (k->get_keycode()) {
- case KEY_UP:
- case KEY_DOWN:
- case KEY_PAGEUP:
- case KEY_PAGEDOWN: {
+ case Key::UP:
+ case Key::DOWN:
+ case Key::PAGEUP:
+ case Key::PAGEDOWN: {
search_options->gui_input(k);
} break;
default:
diff --git a/editor/editor_command_palette.h b/editor/editor_command_palette.h
index 39821a1169..8836c7b0fb 100644
--- a/editor/editor_command_palette.h
+++ b/editor/editor_command_palette.h
@@ -99,6 +99,6 @@ public:
static EditorCommandPalette *get_singleton();
};
-Ref<Shortcut> ED_SHORTCUT_AND_COMMAND(const String &p_path, const String &p_name, Key p_keycode = KEY_NONE, String p_command = "");
+Ref<Shortcut> ED_SHORTCUT_AND_COMMAND(const String &p_path, const String &p_name, Key p_keycode = Key::NONE, String p_command = "");
#endif //EDITOR_COMMAND_PALETTE_H
diff --git a/editor/editor_data.cpp b/editor/editor_data.cpp
index aee9c21007..a163b468e6 100644
--- a/editor/editor_data.cpp
+++ b/editor/editor_data.cpp
@@ -70,7 +70,7 @@ void EditorHistory::cleanup_history() {
}
if (fail) {
- history.remove(i);
+ history.remove_at(i);
i--;
}
}
@@ -510,7 +510,7 @@ void EditorData::remove_custom_type(const String &p_type) {
for (Map<String, Vector<CustomType>>::Element *E = custom_types.front(); E; E = E->next()) {
for (int i = 0; i < E->get().size(); i++) {
if (E->get()[i].name == p_type) {
- E->get().remove(i);
+ E->get().remove_at(i);
if (E->get().is_empty()) {
custom_types.erase(E->key());
}
@@ -570,7 +570,7 @@ void EditorData::remove_scene(int p_idx) {
ScriptEditor::get_singleton()->close_builtin_scripts_from_scene(edited_scene[p_idx].path);
}
- edited_scene.remove(p_idx);
+ edited_scene.remove_at(p_idx);
}
bool EditorData::_find_updated_instances(Node *p_root, Node *p_node, Set<String> &checked_paths) {
@@ -751,7 +751,7 @@ void EditorData::move_edited_scene_to_index(int p_idx) {
ERR_FAIL_INDEX(p_idx, edited_scene.size());
EditedScene es = edited_scene[current_edited_scene];
- edited_scene.remove(current_edited_scene);
+ edited_scene.remove_at(current_edited_scene);
edited_scene.insert(p_idx, es);
current_edited_scene = p_idx;
}
diff --git a/editor/editor_export.cpp b/editor/editor_export.cpp
index 372d01d89a..03d91ebcba 100644
--- a/editor/editor_export.cpp
+++ b/editor/editor_export.cpp
@@ -82,7 +82,7 @@ bool EditorExportPreset::_get(const StringName &p_name, Variant &r_ret) const {
void EditorExportPreset::_get_property_list(List<PropertyInfo> *p_list) const {
for (const PropertyInfo &E : properties) {
- if (platform->get_option_visibility(E.name, values)) {
+ if (platform->get_export_option_visibility(E.name, values)) {
p_list->push_back(E);
}
}
@@ -1498,9 +1498,9 @@ String EditorExportPlatform::test_etc2() const {
bool etc_supported = ProjectSettings::get_singleton()->get("rendering/textures/vram_compression/import_etc");
bool etc2_supported = ProjectSettings::get_singleton()->get("rendering/textures/vram_compression/import_etc2");
- if (driver == "OpenGL3" && !etc_supported) {
+ if (driver == "opengl3" && !etc_supported) {
return TTR("Target platform requires 'ETC' texture compression for OpenGL. Enable 'Import Etc' in Project Settings.");
- } else if (driver == "Vulkan" && !etc2_supported) {
+ } else if (driver == "vulkan" && !etc2_supported) {
// FIXME: Review if this is true for Vulkan.
return TTR("Target platform requires 'ETC2' texture compression for Vulkan. Enable 'Import Etc 2' in Project Settings.");
}
@@ -1515,9 +1515,9 @@ String EditorExportPlatform::test_etc2_or_pvrtc() const {
// bool etc2_supported = ProjectSettings::get_singleton()->get("rendering/textures/vram_compression/import_etc2");
// bool pvrtc_supported = ProjectSettings::get_singleton()->get("rendering/textures/vram_compression/import_pvrtc");
- if (driver == "OpenGL3" && !pvrtc_supported) {
+ if (driver == "opengl3" && !pvrtc_supported) {
return TTR("Target platform requires 'PVRTC' texture compression for OpenGL. Enable 'Import Pvrtc' in Project Settings.");
- } else if (driver == "Vulkan" && !etc2_supported && !pvrtc_supported) {
+ } else if (driver == "vulkan" && !etc2_supported && !pvrtc_supported) {
// FIXME: Review if this is true for Vulkan.
return TTR("Target platform requires 'ETC2' or 'PVRTC' texture compression for Vulkan. Enable 'Import Etc 2' or 'Import Pvrtc' in Project Settings.");
}
@@ -1534,7 +1534,7 @@ Ref<EditorExportPreset> EditorExport::get_export_preset(int p_idx) {
}
void EditorExport::remove_export_preset(int p_idx) {
- export_presets.remove(p_idx);
+ export_presets.remove_at(p_idx);
save_presets();
}
diff --git a/editor/editor_export.h b/editor/editor_export.h
index b681f52330..1a5b8e6026 100644
--- a/editor/editor_export.h
+++ b/editor/editor_export.h
@@ -240,7 +240,7 @@ public:
virtual void get_export_options(List<ExportOption> *r_options) = 0;
virtual bool should_update_export_options() { return false; }
- virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const { return true; }
+ virtual bool get_export_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const { return true; }
virtual String get_os_name() const = 0;
virtual String get_name() const = 0;
diff --git a/editor/editor_file_dialog.cpp b/editor/editor_file_dialog.cpp
index 675234959a..bea5c99c1a 100644
--- a/editor/editor_file_dialog.cpp
+++ b/editor/editor_file_dialog.cpp
@@ -302,7 +302,7 @@ void EditorFileDialog::_post_popup() {
bool exists = dir_access->dir_exists(recentd[i]);
if (!exists) {
// Remove invalid directory from the list of Recent directories.
- recentd.remove(i--);
+ recentd.remove_at(i--);
} else {
recent->add_item(name, folder);
recent->set_item_metadata(recent->get_item_count() - 1, recentd[i]);
@@ -576,7 +576,7 @@ void EditorFileDialog::_item_dc_selected(int p_item) {
void EditorFileDialog::_item_list_item_rmb_selected(int p_item, const Vector2 &p_pos) {
// Right click on specific file(s) or folder(s).
item_menu->clear();
- item_menu->set_size(Size2(1, 1));
+ item_menu->reset_size();
// Allow specific actions only on one item.
bool single_item_selected = item_list->get_selected_items().size() == 1;
@@ -598,7 +598,7 @@ void EditorFileDialog::_item_list_item_rmb_selected(int p_item, const Vector2 &p
item_menu->add_icon_item(item_list->get_theme_icon(SNAME("ActionCopy"), SNAME("EditorIcons")), TTR("Copy Path"), ITEM_MENU_COPY_PATH);
}
if (allow_delete) {
- item_menu->add_icon_item(item_list->get_theme_icon(SNAME("Remove"), SNAME("EditorIcons")), TTR("Delete"), ITEM_MENU_DELETE, KEY_DELETE);
+ item_menu->add_icon_item(item_list->get_theme_icon(SNAME("Remove"), SNAME("EditorIcons")), TTR("Delete"), ITEM_MENU_DELETE, Key::KEY_DELETE);
}
if (single_item_selected) {
item_menu->add_separator();
@@ -620,12 +620,12 @@ void EditorFileDialog::_item_list_rmb_clicked(const Vector2 &p_pos) {
}
item_menu->clear();
- item_menu->set_size(Size2(1, 1));
+ item_menu->reset_size();
if (can_create_dir) {
- item_menu->add_icon_item(item_list->get_theme_icon(SNAME("folder"), SNAME("FileDialog")), TTR("New Folder..."), ITEM_MENU_NEW_FOLDER, KEY_MASK_CMD | KEY_N);
+ item_menu->add_icon_item(item_list->get_theme_icon(SNAME("folder"), SNAME("FileDialog")), TTR("New Folder..."), ITEM_MENU_NEW_FOLDER, KeyModifierMask::CMD | Key::N);
}
- item_menu->add_icon_item(item_list->get_theme_icon(SNAME("Reload"), SNAME("EditorIcons")), TTR("Refresh"), ITEM_MENU_REFRESH, KEY_F5);
+ item_menu->add_icon_item(item_list->get_theme_icon(SNAME("Reload"), SNAME("EditorIcons")), TTR("Refresh"), ITEM_MENU_REFRESH, Key::F5);
item_menu->add_separator();
item_menu->add_icon_item(item_list->get_theme_icon(SNAME("Filesystem"), SNAME("EditorIcons")), TTR("Open in File Manager"), ITEM_MENU_SHOW_IN_EXPLORER);
@@ -1117,7 +1117,7 @@ void EditorFileDialog::_delete_items() {
}
}
if (folders.size() + files.size() > 0) {
- remove_dialog->set_size(Size2(1, 1));
+ remove_dialog->reset_size();
remove_dialog->show(folders, files);
}
}
@@ -1445,7 +1445,7 @@ void EditorFileDialog::_save_to_recent() {
for (int i = 0; i < recent.size(); i++) {
bool cres = recent[i].begins_with("res://");
if (recent[i] == dir || (res == cres && count > max)) {
- recent.remove(i);
+ recent.remove_at(i);
i--;
} else {
count++;
@@ -1476,18 +1476,18 @@ EditorFileDialog::EditorFileDialog() {
mode = FILE_MODE_SAVE_FILE;
set_title(TTR("Save a File"));
- ED_SHORTCUT("file_dialog/go_back", TTR("Go Back"), KEY_MASK_ALT | KEY_LEFT);
- ED_SHORTCUT("file_dialog/go_forward", TTR("Go Forward"), KEY_MASK_ALT | KEY_RIGHT);
- ED_SHORTCUT("file_dialog/go_up", TTR("Go Up"), KEY_MASK_ALT | KEY_UP);
- ED_SHORTCUT("file_dialog/refresh", TTR("Refresh"), KEY_F5);
- ED_SHORTCUT("file_dialog/toggle_hidden_files", TTR("Toggle Hidden Files"), KEY_MASK_CMD | KEY_H);
- ED_SHORTCUT("file_dialog/toggle_favorite", TTR("Toggle Favorite"), KEY_MASK_ALT | KEY_F);
- ED_SHORTCUT("file_dialog/toggle_mode", TTR("Toggle Mode"), KEY_MASK_ALT | KEY_V);
- ED_SHORTCUT("file_dialog/create_folder", TTR("Create Folder"), KEY_MASK_CMD | KEY_N);
- ED_SHORTCUT("file_dialog/delete", TTR("Delete"), KEY_DELETE);
- ED_SHORTCUT("file_dialog/focus_path", TTR("Focus Path"), KEY_MASK_CMD | KEY_D);
- ED_SHORTCUT("file_dialog/move_favorite_up", TTR("Move Favorite Up"), KEY_MASK_CMD | KEY_UP);
- ED_SHORTCUT("file_dialog/move_favorite_down", TTR("Move Favorite Down"), KEY_MASK_CMD | KEY_DOWN);
+ ED_SHORTCUT("file_dialog/go_back", TTR("Go Back"), KeyModifierMask::ALT | Key::LEFT);
+ ED_SHORTCUT("file_dialog/go_forward", TTR("Go Forward"), KeyModifierMask::ALT | Key::RIGHT);
+ ED_SHORTCUT("file_dialog/go_up", TTR("Go Up"), KeyModifierMask::ALT | Key::UP);
+ ED_SHORTCUT("file_dialog/refresh", TTR("Refresh"), Key::F5);
+ ED_SHORTCUT("file_dialog/toggle_hidden_files", TTR("Toggle Hidden Files"), KeyModifierMask::CMD | Key::H);
+ ED_SHORTCUT("file_dialog/toggle_favorite", TTR("Toggle Favorite"), KeyModifierMask::ALT | Key::F);
+ ED_SHORTCUT("file_dialog/toggle_mode", TTR("Toggle Mode"), KeyModifierMask::ALT | Key::V);
+ ED_SHORTCUT("file_dialog/create_folder", TTR("Create Folder"), KeyModifierMask::CMD | Key::N);
+ ED_SHORTCUT("file_dialog/delete", TTR("Delete"), Key::KEY_DELETE);
+ ED_SHORTCUT("file_dialog/focus_path", TTR("Focus Path"), KeyModifierMask::CMD | Key::D);
+ ED_SHORTCUT("file_dialog/move_favorite_up", TTR("Move Favorite Up"), KeyModifierMask::CMD | Key::UP);
+ ED_SHORTCUT("file_dialog/move_favorite_down", TTR("Move Favorite Down"), KeyModifierMask::CMD | Key::DOWN);
HBoxContainer *pathhb = memnew(HBoxContainer);
diff --git a/editor/editor_file_system.cpp b/editor/editor_file_system.cpp
index 3d6b523733..4f02a82fb5 100644
--- a/editor/editor_file_system.cpp
+++ b/editor/editor_file_system.cpp
@@ -577,7 +577,7 @@ bool EditorFileSystem::_update_scan_actions() {
ERR_CONTINUE(idx == -1);
_delete_internal_files(ia.dir->files[idx]->file);
memdelete(ia.dir->files[idx]);
- ia.dir->files.remove(idx);
+ ia.dir->files.remove_at(idx);
fs_changed = true;
@@ -1536,7 +1536,7 @@ void EditorFileSystem::update_file(const String &p_file) {
}
}
memdelete(fs->files[cpos]);
- fs->files.remove(cpos);
+ fs->files.remove_at(cpos);
}
call_deferred(SNAME("emit_signal"), "filesystem_changed"); //update later
@@ -1633,7 +1633,7 @@ Error EditorFileSystem::_reimport_group(const String &p_group_file, const Vector
Ref<ResourceImporter> importer = ResourceFormatImporter::get_singleton()->get_importer_by_name(importer_name);
ERR_FAIL_COND_V(!importer.is_valid(), ERR_FILE_CORRUPT);
List<ResourceImporter::ImportOption> options;
- importer->get_import_options(&options);
+ importer->get_import_options(p_files[i], &options);
//set default values
for (const ResourceImporter::ImportOption &E : options) {
source_file_options[p_files[i]][E.option.name] = E.default_value;
@@ -1714,7 +1714,7 @@ Error EditorFileSystem::_reimport_group(const String &p_group_file, const Vector
//store options in provided order, to avoid file changing. Order is also important because first match is accepted first.
List<ResourceImporter::ImportOption> options;
- importer->get_import_options(&options);
+ importer->get_import_options(file, &options);
//set default values
for (const ResourceImporter::ImportOption &F : options) {
String base = F.option.name;
@@ -1851,7 +1851,7 @@ void EditorFileSystem::_reimport_file(const String &p_file, const Map<StringName
//mix with default params, in case a parameter is missing
List<ResourceImporter::ImportOption> opts;
- importer->get_import_options(&opts);
+ importer->get_import_options(p_file, &opts);
for (const ResourceImporter::ImportOption &E : opts) {
if (!params.has(E.option.name)) { //this one is not present
params[E.option.name] = E.default_value;
diff --git a/editor/editor_help.cpp b/editor/editor_help.cpp
index 8c3569df07..f520877256 100644
--- a/editor/editor_help.cpp
+++ b/editor/editor_help.cpp
@@ -33,13 +33,14 @@
#include "core/core_constants.h"
#include "core/input/input.h"
#include "core/os/keyboard.h"
+#include "core/version_generated.gen.h"
#include "doc_data_compressed.gen.h"
#include "editor/plugins/script_editor_plugin.h"
#include "editor_node.h"
#include "editor_scale.h"
#include "editor_settings.h"
-#define CONTRIBUTE_URL "https://docs.godotengine.org/en/latest/community/contributing/updating_the_class_reference.html"
+#define CONTRIBUTE_URL vformat("%s/community/contributing/updating_the_class_reference.html", VERSION_DOCS_URL)
DocTools *EditorHelp::doc = nullptr;
@@ -108,6 +109,9 @@ void EditorHelp::_class_desc_select(const String &p_select) {
} else if (tag == "constant") {
topic = "class_constant";
table = &this->constant_line;
+ } else if (tag == "theme_item") {
+ topic = "theme_item";
+ table = &this->theme_property_line;
} else {
return;
}
@@ -1429,14 +1433,15 @@ static void _add_text_to_rt(const String &p_bbcode, RichTextLabel *p_rt) {
bbcode = bbcode.replace("[/gdscript]", "[/codeblock]");
for (int pos = bbcode.find("[csharp]"); pos != -1; pos = bbcode.find("[csharp]")) {
- if (bbcode.find("[/csharp]") == -1) {
+ int end_pos = bbcode.find("[/csharp]");
+ if (end_pos == -1) {
WARN_PRINT("Unclosed [csharp] block or parse fail in code (search for tag errors)");
break;
}
- bbcode.erase(pos, bbcode.find("[/csharp]") + 9 - pos);
+ bbcode = bbcode.left(pos) + bbcode.substr(end_pos + 9); // 9 is length of "[/csharp]".
while (bbcode[pos] == '\n') {
- bbcode.erase(pos, 1);
+ bbcode = bbcode.left(pos) + bbcode.substr(pos + 1);
}
}
break;
@@ -1445,14 +1450,15 @@ static void _add_text_to_rt(const String &p_bbcode, RichTextLabel *p_rt) {
bbcode = bbcode.replace("[/csharp]", "[/codeblock]");
for (int pos = bbcode.find("[gdscript]"); pos != -1; pos = bbcode.find("[gdscript]")) {
- if (bbcode.find("[/gdscript]") == -1) {
+ int end_pos = bbcode.find("[/gdscript]");
+ if (end_pos == -1) {
WARN_PRINT("Unclosed [gdscript] block or parse fail in code (search for tag errors)");
break;
}
- bbcode.erase(pos, bbcode.find("[/gdscript]") + 11 - pos);
+ bbcode = bbcode.left(pos) + bbcode.substr(end_pos + 11); // 11 is length of "[/gdscript]".
while (bbcode[pos] == '\n') {
- bbcode.erase(pos, 1);
+ bbcode = bbcode.left(pos) + bbcode.substr(pos + 1);
}
}
break;
@@ -1535,7 +1541,7 @@ static void _add_text_to_rt(const String &p_bbcode, RichTextLabel *p_rt) {
p_rt->add_text("[");
pos = brk_pos + 1;
- } else if (tag.begins_with("method ") || tag.begins_with("member ") || tag.begins_with("signal ") || tag.begins_with("enum ") || tag.begins_with("constant ")) {
+ } else if (tag.begins_with("method ") || tag.begins_with("member ") || tag.begins_with("signal ") || tag.begins_with("enum ") || tag.begins_with("constant ") || tag.begins_with("theme_item ")) {
int tag_end = tag.find(" ");
String link_tag = tag.substr(0, tag_end);
@@ -2021,7 +2027,7 @@ void FindBar::unhandled_input(const Ref<InputEvent> &p_event) {
bool accepted = true;
switch (k->get_keycode()) {
- case KEY_ESCAPE: {
+ case Key::ESCAPE: {
_hide_bar();
} break;
default: {
@@ -2041,7 +2047,7 @@ void FindBar::_search_text_changed(const String &p_text) {
}
void FindBar::_search_text_submitted(const String &p_text) {
- if (Input::get_singleton()->is_key_pressed(KEY_SHIFT)) {
+ if (Input::get_singleton()->is_key_pressed(Key::SHIFT)) {
search_prev();
} else {
search_next();
diff --git a/editor/editor_help_search.cpp b/editor/editor_help_search.cpp
index 8504745b03..578e21861e 100644
--- a/editor/editor_help_search.cpp
+++ b/editor/editor_help_search.cpp
@@ -67,10 +67,10 @@ void EditorHelpSearch::_search_box_gui_input(const Ref<InputEvent> &p_event) {
Ref<InputEventKey> key = p_event;
if (key.is_valid()) {
switch (key->get_keycode()) {
- case KEY_UP:
- case KEY_DOWN:
- case KEY_PAGEUP:
- case KEY_PAGEDOWN: {
+ case Key::UP:
+ case Key::DOWN:
+ case Key::PAGEUP:
+ case Key::PAGEDOWN: {
results_tree->gui_input(key);
search_box->accept_event();
} break;
diff --git a/editor/editor_inspector.cpp b/editor/editor_inspector.cpp
index 9f049a0e58..e1fae47057 100644
--- a/editor/editor_inspector.cpp
+++ b/editor/editor_inspector.cpp
@@ -39,6 +39,7 @@
#include "editor_scale.h"
#include "editor_settings.h"
#include "multi_node_edit.h"
+#include "scene/property_utils.h"
#include "scene/resources/packed_scene.h"
Size2 EditorProperty::get_minimum_size() const {
@@ -305,6 +306,20 @@ void EditorProperty::_notification(int p_what) {
revert_rect = Rect2();
}
+ if (!pin_hidden && pinned) {
+ Ref<Texture2D> pinned_icon = get_theme_icon(SNAME("Pin"), SNAME("EditorIcons"));
+ int margin_w = get_theme_constant(SNAME("hseparator"), SNAME("Tree")) * 2;
+ int total_icon_w = margin_w + pinned_icon->get_width();
+ int text_w = font->get_string_size(label, font_size, rtl ? HALIGN_RIGHT : HALIGN_LEFT, text_limit - total_icon_w).x;
+ int y = (size.height - pinned_icon->get_height()) / 2;
+ if (rtl) {
+ draw_texture(pinned_icon, Vector2(size.width - ofs - text_w - total_icon_w, y), color);
+ } else {
+ draw_texture(pinned_icon, Vector2(ofs + text_w + margin_w, y), color);
+ }
+ text_limit -= total_icon_w;
+ }
+
int v_ofs = (size.height - font->get_height(font_size)) / 2;
if (rtl) {
draw_string(font, Point2(size.width - ofs - text_limit, v_ofs + font->get_ascent(font_size)), label, HALIGN_RIGHT, text_limit, font_size, color);
@@ -398,177 +413,12 @@ bool EditorProperty::is_read_only() const {
return read_only;
}
-bool EditorPropertyRevert::may_node_be_in_instance(Node *p_node) {
- Node *edited_scene = EditorNode::get_singleton()->get_edited_scene();
-
- bool might_be = false;
- Node *node = p_node;
-
- while (node) {
- if (node == edited_scene) {
- if (node->get_scene_inherited_state().is_valid()) {
- might_be = true;
- break;
- }
- might_be = false;
- break;
- }
- if (node->get_scene_instance_state().is_valid()) {
- might_be = true;
- break;
- }
- node = node->get_owner();
- }
-
- return might_be; // or might not be
-}
-
-bool EditorPropertyRevert::get_instantiated_node_original_property(Node *p_node, const StringName &p_prop, Variant &value, bool p_check_class_default) {
- Node *node = p_node;
- Node *orig = node;
-
- Node *edited_scene = EditorNode::get_singleton()->get_edited_scene();
-
- bool found = false;
-
- while (node) {
- Ref<SceneState> ss;
-
- if (node == edited_scene) {
- ss = node->get_scene_inherited_state();
-
- } else {
- ss = node->get_scene_instance_state();
- }
-
- if (ss.is_valid()) {
- NodePath np = node->get_path_to(orig);
- int node_idx = ss->find_node_by_path(np);
- if (node_idx >= 0) {
- bool lfound = false;
- Variant lvar;
- lvar = ss->get_property_value(node_idx, p_prop, lfound);
- if (lfound) {
- found = true;
- value = lvar;
- }
- }
- }
- if (node == edited_scene) {
- //just in case
- break;
- }
- node = node->get_owner();
- }
-
- if (p_check_class_default && !found && p_node) {
- //if not found, try default class value
- Variant attempt = ClassDB::class_get_default_property_value(p_node->get_class_name(), p_prop);
- if (attempt.get_type() != Variant::NIL) {
- found = true;
- value = attempt;
- }
- }
-
- return found;
-}
-
-bool EditorPropertyRevert::is_node_property_different(Node *p_node, const Variant &p_current, const Variant &p_orig) {
- // this is a pretty difficult function, because a property may not be saved but may have
- // the flag to not save if one or if zero
-
- //make sure there is an actual state
- {
- Node *node = p_node;
- if (!node) {
- return false;
- }
-
- Node *edited_scene = EditorNode::get_singleton()->get_edited_scene();
- bool found_state = false;
-
- while (node) {
- Ref<SceneState> ss;
-
- if (node == edited_scene) {
- ss = node->get_scene_inherited_state();
-
- } else {
- ss = node->get_scene_instance_state();
- }
-
- if (ss.is_valid()) {
- found_state = true;
- break;
- }
- if (node == edited_scene) {
- //just in case
- break;
- }
- node = node->get_owner();
- }
-
- if (!found_state) {
- return false; //pointless to check if we are not comparing against anything.
- }
- }
-
- return is_property_value_different(p_current, p_orig);
-}
-
-bool EditorPropertyRevert::is_property_value_different(const Variant &p_a, const Variant &p_b) {
- if (p_a.get_type() == Variant::FLOAT && p_b.get_type() == Variant::FLOAT) {
- //this must be done because, as some scenes save as text, there might be a tiny difference in floats due to numerical error
- return !Math::is_equal_approx((float)p_a, (float)p_b);
- } else {
- return p_a != p_b;
- }
-}
-
Variant EditorPropertyRevert::get_property_revert_value(Object *p_object, const StringName &p_property) {
- // If the object implements property_can_revert, rely on that completely
- // (i.e. don't then try to revert to default value - the property_get_revert implementation
- // can do that if so desired)
if (p_object->has_method("property_can_revert") && p_object->call("property_can_revert", p_property)) {
return p_object->call("property_get_revert", p_property);
}
- Ref<Script> scr = p_object->get_script();
- Node *node = Object::cast_to<Node>(p_object);
- if (node && EditorPropertyRevert::may_node_be_in_instance(node)) {
- //if this node is an instance or inherits, but it has a script attached which is unrelated
- //to the one set for the parent and also has a default value for the property, consider that
- //has precedence over the value from the parent, because that is an explicit source of defaults
- //closer in the tree to the current node
- bool ignore_parent = false;
- if (scr.is_valid()) {
- Variant sorig;
- if (EditorPropertyRevert::get_instantiated_node_original_property(node, "script", sorig) && !scr->inherits_script(sorig)) {
- Variant dummy;
- if (scr->get_property_default_value(p_property, dummy)) {
- ignore_parent = true;
- }
- }
- }
-
- if (!ignore_parent) {
- //check for difference including instantiation
- Variant vorig;
- if (EditorPropertyRevert::get_instantiated_node_original_property(node, p_property, vorig, false)) {
- return vorig;
- }
- }
- }
-
- if (scr.is_valid()) {
- Variant orig_value;
- if (scr->get_property_default_value(p_property, orig_value)) {
- return orig_value;
- }
- }
-
- //report default class value instead
- return ClassDB::class_get_default_property_value(p_object->get_class_name(), p_property);
+ return PropertyUtils::get_property_default_value(p_object, p_property);
}
bool EditorPropertyRevert::can_property_revert(Object *p_object, const StringName &p_property) {
@@ -577,18 +427,25 @@ bool EditorPropertyRevert::can_property_revert(Object *p_object, const StringNam
return false;
}
Variant current_value = p_object->get(p_property);
- return EditorPropertyRevert::is_property_value_different(current_value, revert_value);
+ return PropertyUtils::is_property_value_different(current_value, revert_value);
}
-void EditorProperty::update_reload_status() {
+void EditorProperty::update_revert_and_pin_status() {
if (property == StringName()) {
return; //no property, so nothing to do
}
- bool has_reload = EditorPropertyRevert::can_property_revert(object, property);
+ bool new_pinned = false;
+ if (can_pin) {
+ Node *node = Object::cast_to<Node>(object);
+ CRASH_COND(!node);
+ new_pinned = node->is_property_pinned(property);
+ }
+ bool new_can_revert = EditorPropertyRevert::can_property_revert(object, property) && !is_read_only();
- if (has_reload != can_revert) {
- can_revert = has_reload;
+ if (new_can_revert != can_revert || new_pinned != pinned) {
+ can_revert = new_can_revert;
+ pinned = new_pinned;
update();
}
}
@@ -714,7 +571,7 @@ void EditorProperty::gui_input(const Ref<InputEvent> &p_event) {
if (is_layout_rtl()) {
mpos.x = get_size().x - mpos.x;
}
- bool button_left = me->get_button_mask() & MOUSE_BUTTON_MASK_LEFT;
+ bool button_left = (me->get_button_mask() & MouseButton::MASK_LEFT) != MouseButton::NONE;
bool new_keying_hover = keying_rect.has_point(mpos) && !button_left;
if (new_keying_hover != keying_hover) {
@@ -743,7 +600,7 @@ void EditorProperty::gui_input(const Ref<InputEvent> &p_event) {
Ref<InputEventMouseButton> mb = p_event;
- if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == MouseButton::LEFT) {
Vector2 mpos = mb->get_position();
if (is_layout_rtl()) {
mpos.x = get_size().x - mpos.x;
@@ -790,10 +647,10 @@ void EditorProperty::gui_input(const Ref<InputEvent> &p_event) {
update();
emit_signal(SNAME("property_checked"), property, checked);
}
- } else if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == MOUSE_BUTTON_RIGHT) {
- _ensure_popup();
+ } else if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == MouseButton::RIGHT) {
+ _update_popup();
menu->set_position(get_screen_position() + get_local_mouse_position());
- menu->set_size(Vector2(1, 1));
+ menu->reset_size();
menu->popup();
select();
return;
@@ -914,6 +771,56 @@ float EditorProperty::get_name_split_ratio() const {
void EditorProperty::set_object_and_property(Object *p_object, const StringName &p_property) {
object = p_object;
property = p_property;
+ _update_pin_flags();
+}
+
+static bool _is_value_potential_override(Node *p_node, const String &p_property) {
+ // Consider a value is potentially overriding another if either of the following is true:
+ // a) The node is foreign (inheriting or an instance), so the original value may come from another scene.
+ // b) The node belongs to the scene, but the original value comes from somewhere but the builtin class (i.e., a script).
+ Node *edited_scene = EditorNode::get_singleton()->get_edited_scene();
+ Vector<SceneState::PackState> states_stack = PropertyUtils::get_node_states_stack(p_node, edited_scene);
+ if (states_stack.size()) {
+ return true;
+ } else {
+ bool is_class_default = false;
+ PropertyUtils::get_property_default_value(p_node, p_property, &states_stack, false, nullptr, &is_class_default);
+ return !is_class_default;
+ }
+}
+
+void EditorProperty::_update_pin_flags() {
+ can_pin = false;
+ pin_hidden = true;
+ if (read_only) {
+ return;
+ }
+ if (Node *node = Object::cast_to<Node>(object)) {
+ // Avoid errors down the road by ignoring nodes which are not part of a scene
+ if (!node->get_owner()) {
+ bool is_scene_root = false;
+ for (int i = 0; i < EditorNode::get_singleton()->get_editor_data().get_edited_scene_count(); ++i) {
+ if (EditorNode::get_singleton()->get_editor_data().get_edited_scene_root(i) == node) {
+ is_scene_root = true;
+ break;
+ }
+ }
+ if (!is_scene_root) {
+ return;
+ }
+ }
+ if (!_is_value_potential_override(node, property)) {
+ return;
+ }
+ pin_hidden = false;
+ {
+ Set<StringName> storable_properties;
+ node->get_storable_properties(storable_properties);
+ if (storable_properties.has(node->get_property_store_alias(property))) {
+ can_pin = true;
+ }
+ }
+ }
}
Control *EditorProperty::make_custom_tooltip(const String &p_text) const {
@@ -955,6 +862,10 @@ void EditorProperty::menu_option(int p_option) {
case MENU_COPY_PROPERTY_PATH: {
DisplayServer::get_singleton()->clipboard_set(property);
} break;
+ case MENU_PIN_VALUE: {
+ emit_signal(SNAME("property_pinned"), property, !pinned);
+ update();
+ } break;
}
}
@@ -1003,12 +914,14 @@ void EditorProperty::_bind_methods() {
ADD_SIGNAL(MethodInfo("property_keyed", PropertyInfo(Variant::STRING_NAME, "property")));
ADD_SIGNAL(MethodInfo("property_deleted", PropertyInfo(Variant::STRING_NAME, "property")));
ADD_SIGNAL(MethodInfo("property_keyed_with_value", PropertyInfo(Variant::STRING_NAME, "property"), PropertyInfo(Variant::NIL, "value", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NIL_IS_VARIANT)));
- ADD_SIGNAL(MethodInfo("property_checked", PropertyInfo(Variant::STRING_NAME, "property"), PropertyInfo(Variant::STRING, "bool")));
+ ADD_SIGNAL(MethodInfo("property_checked", PropertyInfo(Variant::STRING_NAME, "property"), PropertyInfo(Variant::BOOL, "checked")));
+ ADD_SIGNAL(MethodInfo("property_pinned", PropertyInfo(Variant::STRING_NAME, "property"), PropertyInfo(Variant::BOOL, "pinned")));
ADD_SIGNAL(MethodInfo("resource_selected", PropertyInfo(Variant::STRING, "path"), PropertyInfo(Variant::OBJECT, "resource", PROPERTY_HINT_RESOURCE_TYPE, "Resource")));
ADD_SIGNAL(MethodInfo("object_id_selected", PropertyInfo(Variant::STRING_NAME, "property"), PropertyInfo(Variant::INT, "id")));
ADD_SIGNAL(MethodInfo("selected", PropertyInfo(Variant::STRING, "path"), PropertyInfo(Variant::INT, "focusable_idx")));
GDVIRTUAL_BIND(_update_property)
+ ClassDB::bind_method(D_METHOD("_update_revert_and_pin_status"), &EditorProperty::update_revert_and_pin_status);
}
EditorProperty::EditorProperty() {
@@ -1027,6 +940,9 @@ EditorProperty::EditorProperty() {
revert_hover = false;
check_hover = false;
can_revert = false;
+ can_pin = false;
+ pin_hidden = false;
+ pinned = false;
use_folding = false;
property_usage = 0;
selected = false;
@@ -1038,17 +954,29 @@ EditorProperty::EditorProperty() {
set_process_unhandled_key_input(true);
}
-void EditorProperty::_ensure_popup() {
+void EditorProperty::_update_popup() {
if (menu) {
- return;
+ menu->clear();
+ } else {
+ menu = memnew(PopupMenu);
+ add_child(menu);
+ menu->connect("id_pressed", callable_mp(this, &EditorProperty::menu_option));
}
- menu = memnew(PopupMenu);
menu->add_shortcut(ED_GET_SHORTCUT("property_editor/copy_property"), MENU_COPY_PROPERTY);
menu->add_shortcut(ED_GET_SHORTCUT("property_editor/paste_property"), MENU_PASTE_PROPERTY);
menu->add_shortcut(ED_GET_SHORTCUT("property_editor/copy_property_path"), MENU_COPY_PROPERTY_PATH);
- menu->connect("id_pressed", callable_mp(this, &EditorProperty::menu_option));
menu->set_item_disabled(MENU_PASTE_PROPERTY, is_read_only());
- add_child(menu);
+ if (!pin_hidden) {
+ menu->add_separator();
+ if (can_pin) {
+ menu->add_check_item(TTR("Pin value"), MENU_PIN_VALUE);
+ menu->set_item_checked(menu->get_item_index(MENU_PIN_VALUE), pinned);
+ menu->set_item_tooltip(menu->get_item_index(MENU_PIN_VALUE), TTR("Pinning a value forces it to be saved even if it's equal to the default."));
+ } else {
+ menu->add_check_item(vformat(TTR("Pin value [Disabled because '%s' is editor-only]"), property), MENU_PIN_VALUE);
+ menu->set_item_disabled(menu->get_item_index(MENU_PIN_VALUE), true);
+ }
+ }
}
////////////////////////////////////////////////
@@ -1086,11 +1014,15 @@ bool EditorInspectorPlugin::can_handle(Object *p_object) {
}
void EditorInspectorPlugin::parse_begin(Object *p_object) {
- GDVIRTUAL_CALL(_parse_begin);
+ GDVIRTUAL_CALL(_parse_begin, p_object);
}
-void EditorInspectorPlugin::parse_category(Object *p_object, const String &p_parse_category) {
- GDVIRTUAL_CALL(_parse_category, p_object, p_parse_category);
+void EditorInspectorPlugin::parse_category(Object *p_object, const String &p_category) {
+ GDVIRTUAL_CALL(_parse_category, p_object, p_category);
+}
+
+void EditorInspectorPlugin::parse_group(Object *p_object, const String &p_group) {
+ GDVIRTUAL_CALL(_parse_group, p_object, p_group);
}
bool EditorInspectorPlugin::parse_property(Object *p_object, const Variant::Type p_type, const String &p_path, const PropertyHint p_hint, const String &p_hint_text, const uint32_t p_usage, const bool p_wide) {
@@ -1101,8 +1033,8 @@ bool EditorInspectorPlugin::parse_property(Object *p_object, const Variant::Type
return false;
}
-void EditorInspectorPlugin::parse_end() {
- GDVIRTUAL_CALL(_parse_end);
+void EditorInspectorPlugin::parse_end(Object *p_object) {
+ GDVIRTUAL_CALL(_parse_end, p_object);
}
void EditorInspectorPlugin::_bind_methods() {
@@ -1111,10 +1043,11 @@ void EditorInspectorPlugin::_bind_methods() {
ClassDB::bind_method(D_METHOD("add_property_editor_for_multiple_properties", "label", "properties", "editor"), &EditorInspectorPlugin::add_property_editor_for_multiple_properties);
GDVIRTUAL_BIND(_can_handle, "object")
- GDVIRTUAL_BIND(_parse_begin)
+ GDVIRTUAL_BIND(_parse_begin, "object")
GDVIRTUAL_BIND(_parse_category, "object", "category")
+ GDVIRTUAL_BIND(_parse_group, "object", "group")
GDVIRTUAL_BIND(_parse_property, "object", "type", "name", "hint_type", "hint_string", "usage_flags", "wide");
- GDVIRTUAL_BIND(_parse_end)
+ GDVIRTUAL_BIND(_parse_end, "object")
}
////////////////////////////////////////////////
@@ -1289,7 +1222,7 @@ void EditorInspectorSection::_notification(int p_what) {
Color c = bg_color;
c.a *= 0.4;
if (foldable && header_rect.has_point(get_local_mouse_position())) {
- c = c.lightened(Input::get_singleton()->is_mouse_button_pressed(MOUSE_BUTTON_LEFT) ? -0.05 : 0.2);
+ c = c.lightened(Input::get_singleton()->is_mouse_button_pressed(MouseButton::LEFT) ? -0.05 : 0.2);
}
draw_rect(header_rect, c);
@@ -1407,7 +1340,7 @@ void EditorInspectorSection::gui_input(const Ref<InputEvent> &p_event) {
}
Ref<InputEventMouseButton> mb = p_event;
- if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == MouseButton::LEFT) {
Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Tree"));
int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Tree"));
if (mb->get_position().y > font->get_height(font_size)) { //clicked outside
@@ -1610,7 +1543,7 @@ void EditorInspectorArray::_panel_gui_input(Ref<InputEvent> p_event, int p_index
if (key_ref.is_valid()) {
const InputEventKey &key = **key_ref;
- if (array_elements[p_index].panel->has_focus() && key.is_pressed() && key.get_keycode() == KEY_DELETE) {
+ if (array_elements[p_index].panel->has_focus() && key.is_pressed() && key.get_keycode() == Key::KEY_DELETE) {
_move_element(begin_array_index + p_index, -1);
array_elements[p_index].panel->accept_event();
}
@@ -1618,12 +1551,12 @@ void EditorInspectorArray::_panel_gui_input(Ref<InputEvent> p_event, int p_index
Ref<InputEventMouseButton> mb = p_event;
if (mb.is_valid()) {
- if (mb->get_button_index() == MOUSE_BUTTON_RIGHT) {
+ if (mb->get_button_index() == MouseButton::RIGHT) {
popup_array_index_pressed = begin_array_index + p_index;
rmb_popup->set_item_disabled(OPTION_MOVE_UP, popup_array_index_pressed == 0);
rmb_popup->set_item_disabled(OPTION_MOVE_DOWN, popup_array_index_pressed == count - 1);
rmb_popup->set_position(mb->get_global_position());
- rmb_popup->set_size(Vector2());
+ rmb_popup->reset_size();
rmb_popup->popup();
}
}
@@ -1675,11 +1608,11 @@ void EditorInspectorArray::_move_element(int p_element_index, int p_to_pos) {
properties_as_array.insert(p_to_pos < 0 ? properties_as_array.size() : p_to_pos, Dictionary());
} else if (p_to_pos < 0) {
// Delete the element.
- properties_as_array.remove(p_element_index);
+ properties_as_array.remove_at(p_element_index);
} else {
// Move the element.
properties_as_array.insert(p_to_pos, properties_as_array[p_element_index].duplicate());
- properties_as_array.remove(p_to_pos < p_element_index ? p_element_index + 1 : p_element_index);
+ properties_as_array.remove_at(p_to_pos < p_element_index ? p_element_index + 1 : p_element_index);
}
// Change the array size then set the properties.
@@ -2296,6 +2229,7 @@ void EditorInspector::_parse_added_editors(VBoxContainer *current_vbox, Ref<Edit
ep->connect("property_deleted", callable_mp(this, &EditorInspector::_property_deleted), varray(), CONNECT_DEFERRED);
ep->connect("property_keyed_with_value", callable_mp(this, &EditorInspector::_property_keyed_with_value));
ep->connect("property_checked", callable_mp(this, &EditorInspector::_property_checked));
+ ep->connect("property_pinned", callable_mp(this, &EditorInspector::_property_pinned));
ep->connect("selected", callable_mp(this, &EditorInspector::_property_selected));
ep->connect("multiple_properties_changed", callable_mp(this, &EditorInspector::_multiple_properties_changed));
ep->connect("resource_selected", callable_mp(this, &EditorInspector::_resource_selected), varray(), CONNECT_DEFERRED);
@@ -2324,7 +2258,8 @@ void EditorInspector::_parse_added_editors(VBoxContainer *current_vbox, Ref<Edit
ep->set_read_only(read_only);
ep->update_property();
- ep->update_reload_status();
+ ep->_update_pin_flags();
+ ep->update_revert_and_pin_status();
ep->set_deletable(deletable_properties);
ep->update_cache();
}
@@ -2698,6 +2633,12 @@ void EditorInspector::update_tree() {
c.a /= level;
section->setup(acc_path, component, object, c, use_folding);
+ // Add editors at the start of a group.
+ for (Ref<EditorInspectorPlugin> &ped : valid_plugins) {
+ ped->parse_group(object, path);
+ _parse_added_editors(section->get_vbox(), ped);
+ }
+
vbox_per_path[root_vbox][acc_path] = section->get_vbox();
}
@@ -2877,6 +2818,7 @@ void EditorInspector::update_tree() {
ep->connect("property_deleted", callable_mp(this, &EditorInspector::_property_deleted), varray(), CONNECT_DEFERRED);
ep->connect("property_keyed_with_value", callable_mp(this, &EditorInspector::_property_keyed_with_value));
ep->connect("property_checked", callable_mp(this, &EditorInspector::_property_checked));
+ ep->connect("property_pinned", callable_mp(this, &EditorInspector::_property_pinned));
ep->connect("selected", callable_mp(this, &EditorInspector::_property_selected));
ep->connect("multiple_properties_changed", callable_mp(this, &EditorInspector::_multiple_properties_changed));
ep->connect("resource_selected", callable_mp(this, &EditorInspector::_resource_selected), varray(), CONNECT_DEFERRED);
@@ -2887,7 +2829,8 @@ void EditorInspector::update_tree() {
ep->set_tooltip(property_prefix + p.name);
}
ep->update_property();
- ep->update_reload_status();
+ ep->_update_pin_flags();
+ ep->update_revert_and_pin_status();
ep->update_cache();
if (current_selected && ep->property == current_selected) {
@@ -2905,7 +2848,7 @@ void EditorInspector::update_tree() {
// Get the lists of to add at the end.
for (Ref<EditorInspectorPlugin> &ped : valid_plugins) {
- ped->parse_end();
+ ped->parse_end(object);
_parse_added_editors(main_vbox, ped);
}
}
@@ -2917,7 +2860,7 @@ void EditorInspector::update_property(const String &p_prop) {
for (EditorProperty *E : editor_property_map[p_prop]) {
E->update_property();
- E->update_reload_status();
+ E->update_revert_and_pin_status();
E->update_cache();
}
}
@@ -3143,12 +3086,20 @@ void EditorInspector::_edit_set(const String &p_name, const Variant &p_value, bo
} else {
undo_redo->create_action(vformat(TTR("Set %s"), p_name), UndoRedo::MERGE_ENDS);
undo_redo->add_do_property(object, p_name, p_value);
- undo_redo->add_undo_property(object, p_name, object->get(p_name));
+ bool valid = false;
+ Variant value = object->get(p_name, &valid);
+ if (valid) {
+ undo_redo->add_undo_property(object, p_name, value);
+ }
PropertyInfo prop_info;
if (ClassDB::get_property_info(object->get_class_name(), p_name, &prop_info)) {
for (const String &linked_prop : prop_info.linked_properties) {
- undo_redo->add_undo_property(object, linked_prop, object->get(linked_prop));
+ valid = false;
+ value = object->get(linked_prop, &valid);
+ if (valid) {
+ undo_redo->add_undo_property(object, linked_prop, value);
+ }
}
}
@@ -3196,7 +3147,7 @@ void EditorInspector::_edit_set(const String &p_name, const Variant &p_value, bo
if (editor_property_map.has(p_name)) {
for (EditorProperty *E : editor_property_map[p_name]) {
- E->update_reload_status();
+ E->update_revert_and_pin_status();
}
}
}
@@ -3295,7 +3246,7 @@ void EditorInspector::_property_checked(const String &p_path, bool p_checked) {
if (editor_property_map.has(p_path)) {
for (EditorProperty *E : editor_property_map[p_path]) {
E->update_property();
- E->update_reload_status();
+ E->update_revert_and_pin_status();
E->update_cache();
}
}
@@ -3305,6 +3256,35 @@ void EditorInspector::_property_checked(const String &p_path, bool p_checked) {
}
}
+void EditorInspector::_property_pinned(const String &p_path, bool p_pinned) {
+ if (!object) {
+ return;
+ }
+
+ Node *node = Object::cast_to<Node>(object);
+ ERR_FAIL_COND(!node);
+
+ if (undo_redo) {
+ undo_redo->create_action(vformat(p_pinned ? TTR("Pinned %s") : TTR("Unpinned %s"), p_path));
+ undo_redo->add_do_method(node, "_set_property_pinned", p_path, p_pinned);
+ undo_redo->add_undo_method(node, "_set_property_pinned", p_path, !p_pinned);
+ if (editor_property_map.has(p_path)) {
+ for (List<EditorProperty *>::Element *E = editor_property_map[p_path].front(); E; E = E->next()) {
+ undo_redo->add_do_method(E->get(), "_update_revert_and_pin_status");
+ undo_redo->add_undo_method(E->get(), "_update_revert_and_pin_status");
+ }
+ }
+ undo_redo->commit_action();
+ } else {
+ node->set_property_pinned(p_path, p_pinned);
+ if (editor_property_map.has(p_path)) {
+ for (List<EditorProperty *>::Element *E = editor_property_map[p_path].front(); E; E = E->next()) {
+ E->get()->update_revert_and_pin_status();
+ }
+ }
+ }
+}
+
void EditorInspector::_property_selected(const String &p_path, int p_focusable) {
property_selected = p_path;
property_focusable = p_focusable;
@@ -3375,7 +3355,7 @@ void EditorInspector::_notification(int p_what) {
for (EditorProperty *E : F.value) {
if (!E->is_cache_valid()) {
E->update_property();
- E->update_reload_status();
+ E->update_revert_and_pin_status();
E->update_cache();
}
}
@@ -3397,7 +3377,7 @@ void EditorInspector::_notification(int p_what) {
if (editor_property_map.has(prop)) {
for (EditorProperty *E : editor_property_map[prop]) {
E->update_property();
- E->update_reload_status();
+ E->update_revert_and_pin_status();
E->update_cache();
}
}
@@ -3490,7 +3470,7 @@ void EditorInspector::_update_script_class_properties(const Object &p_object, Li
String path = s->get_path();
String name = EditorNode::get_editor_data().script_class_get_name(path);
if (name.is_empty()) {
- if (!path.is_empty() && path.find("::") == -1) {
+ if (!s->is_built_in()) {
name = path.get_file();
} else {
name = TTR("Built-in script");
@@ -3596,7 +3576,7 @@ EditorInspector::EditorInspector() {
refresh_countdown = 0.33;
}
- ED_SHORTCUT("property_editor/copy_property", TTR("Copy Property"), KEY_MASK_CMD | KEY_C);
- ED_SHORTCUT("property_editor/paste_property", TTR("Paste Property"), KEY_MASK_CMD | KEY_V);
- ED_SHORTCUT("property_editor/copy_property_path", TTR("Copy Property Path"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_C);
+ ED_SHORTCUT("property_editor/copy_property", TTR("Copy Property"), KeyModifierMask::CMD | Key::C);
+ ED_SHORTCUT("property_editor/paste_property", TTR("Paste Property"), KeyModifierMask::CMD | Key::V);
+ ED_SHORTCUT("property_editor/copy_property_path", TTR("Copy Property Path"), KeyModifierMask::CMD | KeyModifierMask::SHIFT | Key::C);
}
diff --git a/editor/editor_inspector.h b/editor/editor_inspector.h
index 124ea31302..f2dfe32f82 100644
--- a/editor/editor_inspector.h
+++ b/editor/editor_inspector.h
@@ -43,7 +43,6 @@ class UndoRedo;
class EditorPropertyRevert {
public:
- static bool may_node_be_in_instance(Node *p_node);
static bool get_instantiated_node_original_property(Node *p_node, const StringName &p_prop, Variant &value, bool p_check_class_default = true);
static bool is_node_property_different(Node *p_node, const Variant &p_current, const Variant &p_orig);
static bool is_property_value_different(const Variant &p_a, const Variant &p_b);
@@ -60,6 +59,7 @@ public:
MENU_COPY_PROPERTY,
MENU_PASTE_PROPERTY,
MENU_COPY_PROPERTY_PATH,
+ MENU_PIN_VALUE,
};
private:
@@ -91,11 +91,14 @@ private:
bool delete_hover = false;
bool can_revert;
+ bool can_pin;
+ bool pin_hidden;
+ bool pinned;
bool use_folding;
bool draw_top_bg;
- void _ensure_popup();
+ void _update_popup();
void _focusable_focused(int p_index);
bool selectable;
@@ -114,6 +117,8 @@ private:
Map<StringName, Variant> cache;
GDVIRTUAL0(_update_property)
+ void _update_pin_flags();
+
protected:
void _notification(int p_what);
static void _bind_methods();
@@ -138,7 +143,7 @@ public:
StringName get_edited_property();
virtual void update_property();
- void update_reload_status();
+ void update_revert_and_pin_status();
virtual bool use_keying_next() const;
@@ -210,10 +215,11 @@ protected:
static void _bind_methods();
GDVIRTUAL1RC(bool, _can_handle, Variant)
- GDVIRTUAL0(_parse_begin)
+ GDVIRTUAL1(_parse_begin, Object *)
GDVIRTUAL2(_parse_category, Object *, String)
+ GDVIRTUAL2(_parse_group, Object *, String)
GDVIRTUAL7R(bool, _parse_property, Object *, int, String, int, String, int, bool)
- GDVIRTUAL0(_parse_end)
+ GDVIRTUAL1(_parse_end, Object *)
public:
void add_custom_control(Control *control);
@@ -222,9 +228,10 @@ public:
virtual bool can_handle(Object *p_object);
virtual void parse_begin(Object *p_object);
- virtual void parse_category(Object *p_object, const String &p_parse_category);
+ virtual void parse_category(Object *p_object, const String &p_category);
+ virtual void parse_group(Object *p_object, const String &p_group);
virtual bool parse_property(Object *p_object, const Variant::Type p_type, const String &p_path, const PropertyHint p_hint, const String &p_hint_text, const uint32_t p_usage, const bool p_wide = false);
- virtual void parse_end();
+ virtual void parse_end(Object *p_object);
};
class EditorInspectorCategory : public Control {
@@ -459,8 +466,8 @@ class EditorInspector : public ScrollContainer {
void _property_keyed(const String &p_path, bool p_advance);
void _property_keyed_with_value(const String &p_path, const Variant &p_value, bool p_advance);
void _property_deleted(const String &p_path);
-
void _property_checked(const String &p_path, bool p_checked);
+ void _property_pinned(const String &p_path, bool p_pinned);
void _resource_selected(const String &p_path, RES p_resource);
void _property_selected(const String &p_path, int p_focusable);
diff --git a/editor/editor_layouts_dialog.cpp b/editor/editor_layouts_dialog.cpp
index b1f8ba5d20..4cdeeb2396 100644
--- a/editor/editor_layouts_dialog.cpp
+++ b/editor/editor_layouts_dialog.cpp
@@ -46,15 +46,15 @@ void EditorLayoutsDialog::_line_gui_input(const Ref<InputEvent> &p_event) {
}
switch (k->get_keycode()) {
- case KEY_KP_ENTER:
- case KEY_ENTER: {
+ case Key::KP_ENTER:
+ case Key::ENTER: {
if (get_hide_on_ok()) {
hide();
}
ok_pressed();
set_input_as_handled();
} break;
- case KEY_ESCAPE: {
+ case Key::ESCAPE: {
hide();
set_input_as_handled();
} break;
diff --git a/editor/editor_log.cpp b/editor/editor_log.cpp
index 251e1c2385..5ace9ae03e 100644
--- a/editor/editor_log.cpp
+++ b/editor/editor_log.cpp
@@ -45,9 +45,9 @@ void EditorLog::_error_handler(void *p_self, const char *p_func, const char *p_f
String err_str;
if (p_errorexp && p_errorexp[0]) {
- err_str = p_errorexp;
+ err_str = String::utf8(p_errorexp);
} else {
- err_str = String(p_file) + ":" + itos(p_line) + " - " + String(p_error);
+ err_str = String::utf8(p_file) + ":" + itos(p_line) + " - " + String::utf8(p_error);
}
if (p_editor_notify) {
@@ -366,7 +366,7 @@ EditorLog::EditorLog() {
clear_button = memnew(Button);
clear_button->set_flat(true);
clear_button->set_focus_mode(FOCUS_NONE);
- clear_button->set_shortcut(ED_SHORTCUT("editor/clear_output", TTR("Clear Output"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_K));
+ clear_button->set_shortcut(ED_SHORTCUT("editor/clear_output", TTR("Clear Output"), KeyModifierMask::CMD | KeyModifierMask::SHIFT | Key::K));
clear_button->set_shortcut_context(this);
clear_button->connect("pressed", callable_mp(this, &EditorLog::_clear_request));
hb_tools->add_child(clear_button);
@@ -375,7 +375,7 @@ EditorLog::EditorLog() {
copy_button = memnew(Button);
copy_button->set_flat(true);
copy_button->set_focus_mode(FOCUS_NONE);
- copy_button->set_shortcut(ED_SHORTCUT("editor/copy_output", TTR("Copy Selection"), KEY_MASK_CMD | KEY_C));
+ copy_button->set_shortcut(ED_SHORTCUT("editor/copy_output", TTR("Copy Selection"), KeyModifierMask::CMD | Key::C));
copy_button->set_shortcut_context(this);
copy_button->connect("pressed", callable_mp(this, &EditorLog::_copy_request));
hb_tools->add_child(copy_button);
@@ -401,7 +401,7 @@ EditorLog::EditorLog() {
show_search_button->set_focus_mode(FOCUS_NONE);
show_search_button->set_toggle_mode(true);
show_search_button->set_pressed(true);
- show_search_button->set_shortcut(ED_SHORTCUT("editor/open_search", TTR("Focus Search/Filter Bar"), KEY_MASK_CMD | KEY_F));
+ show_search_button->set_shortcut(ED_SHORTCUT("editor/open_search", TTR("Focus Search/Filter Bar"), KeyModifierMask::CMD | Key::F));
show_search_button->set_shortcut_context(this);
show_search_button->connect("toggled", callable_mp(this, &EditorLog::_set_search_visible));
hb_tools2->add_child(show_search_button);
diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp
index 9edf0a24fc..6aaf0b063f 100644
--- a/editor/editor_node.cpp
+++ b/editor/editor_node.cpp
@@ -174,6 +174,7 @@
#include "editor/plugins/sprite_frames_editor_plugin.h"
#include "editor/plugins/style_box_editor_plugin.h"
#include "editor/plugins/sub_viewport_preview_editor_plugin.h"
+#include "editor/plugins/text_control_editor_plugin.h"
#include "editor/plugins/text_editor.h"
#include "editor/plugins/texture_3d_editor_plugin.h"
#include "editor/plugins/texture_editor_plugin.h"
@@ -382,6 +383,9 @@ void EditorNode::_update_scene_tabs() {
void EditorNode::_version_control_menu_option(int p_idx) {
switch (vcs_actions_menu->get_item_id(p_idx)) {
+ case RUN_VCS_METADATA: {
+ VersionControlEditorPlugin::get_singleton()->popup_vcs_metadata_dialog();
+ } break;
case RUN_VCS_SETTINGS: {
VersionControlEditorPlugin::get_singleton()->popup_vcs_set_up_dialog(gui_base);
} break;
@@ -620,6 +624,19 @@ void EditorNode::_notification(int p_what) {
} break;
case NOTIFICATION_READY: {
+ {
+ _initializing_addons = true;
+ Vector<String> addons;
+ if (ProjectSettings::get_singleton()->has_setting("editor_plugins/enabled")) {
+ addons = ProjectSettings::get_singleton()->get("editor_plugins/enabled");
+ }
+
+ for (int i = 0; i < addons.size(); i++) {
+ set_addon_plugin_enabled(addons[i], true);
+ }
+ _initializing_addons = false;
+ }
+
RenderingServer::get_singleton()->viewport_set_disable_2d(get_scene_root()->get_viewport_rid(), true);
RenderingServer::get_singleton()->viewport_set_disable_environment(get_viewport()->get_viewport_rid(), true);
@@ -814,7 +831,7 @@ void EditorNode::_remove_plugin_from_enabled(const String &p_name) {
PackedStringArray enabled_plugins = ps->get("editor_plugins/enabled");
for (int i = 0; i < enabled_plugins.size(); ++i) {
if (enabled_plugins.get(i) == p_name) {
- enabled_plugins.remove(i);
+ enabled_plugins.remove_at(i);
break;
}
}
@@ -993,18 +1010,6 @@ void EditorNode::_sources_changed(bool p_exist) {
load_scene(defer_load_scene);
defer_load_scene = "";
}
-
- // Only enable addons once resources have been imported
- _initializing_addons = true;
- Vector<String> addons;
- if (ProjectSettings::get_singleton()->has_setting("editor_plugins/enabled")) {
- addons = ProjectSettings::get_singleton()->get("editor_plugins/enabled");
- }
-
- for (int i = 0; i < addons.size(); i++) {
- set_addon_plugin_enabled(addons[i], true);
- }
- _initializing_addons = false;
}
}
@@ -1716,8 +1721,10 @@ void EditorNode::_save_scene(String p_file, int idx) {
err = ResourceSaver::save(p_file, sdata, flg);
- _save_external_resources();
+ // This needs to be emitted before saving external resources.
+ emit_signal(SNAME("scene_saved"), p_file);
+ _save_external_resources();
editor_data.save_editor_external_data();
for (Ref<AnimatedValuesBackup> &E : anim_backups) {
@@ -1791,7 +1798,7 @@ void EditorNode::_save_all_scenes() {
} else {
_save_scene_with_preview(scene->get_scene_file_path());
}
- } else {
+ } else if (scene->get_scene_file_path() != "") {
all_saved = false;
}
}
@@ -2256,7 +2263,8 @@ void EditorNode::_edit_current() {
if (main_plugin) {
// special case if use of external editor is true
- if (main_plugin->get_name() == "Script" && current_obj->get_class_name() != StringName("VisualScript") && (bool(EditorSettings::get_singleton()->get("text_editor/external/use_external_editor")) || overrides_external_editor(current_obj))) {
+ Resource *res = Object::cast_to<Resource>(current_obj);
+ if (main_plugin->get_name() == "Script" && current_obj->get_class_name() != StringName("VisualScript") && res && !res->is_built_in() && (bool(EditorSettings::get_singleton()->get("text_editor/external/use_external_editor")) || overrides_external_editor(current_obj))) {
if (!changing_scene) {
main_plugin->edit(current_obj);
}
@@ -2642,7 +2650,7 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) {
} break;
case EDIT_UNDO: {
- if (Input::get_singleton()->get_mouse_button_mask() & 0x7) {
+ if ((int)Input::get_singleton()->get_mouse_button_mask() & 0x7) {
log->add_message(TTR("Can't undo while mouse buttons are pressed."), EditorLog::MSG_TYPE_EDITOR);
} else {
String action = editor_data.get_undo_redo().get_current_action_name();
@@ -2655,7 +2663,7 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) {
}
} break;
case EDIT_REDO: {
- if (Input::get_singleton()->get_mouse_button_mask() & 0x7) {
+ if ((int)Input::get_singleton()->get_mouse_button_mask() & 0x7) {
log->add_message(TTR("Can't redo while mouse buttons are pressed."), EditorLog::MSG_TYPE_EDITOR);
} else {
if (!editor_data.get_undo_redo().redo()) {
@@ -3059,7 +3067,7 @@ void EditorNode::_discard_changes(const String &p_str) {
args.push_back(exec.get_base_dir());
args.push_back("--project-manager");
- Error err = OS::get_singleton()->create_process(exec, args);
+ Error err = OS::get_singleton()->create_instance(args);
ERR_FAIL_COND(err);
} break;
}
@@ -3191,7 +3199,7 @@ void EditorNode::remove_editor_plugin(EditorPlugin *p_editor, bool p_config_chan
}
memdelete(singleton->main_editor_buttons[i]);
- singleton->main_editor_buttons.remove(i);
+ singleton->main_editor_buttons.remove_at(i);
break;
}
@@ -3356,7 +3364,7 @@ void EditorNode::set_edited_scene(Node *p_scene) {
if (p_scene) {
if (p_scene->get_parent() != scene_root) {
- scene_root->add_child(p_scene);
+ scene_root->add_child(p_scene, true);
}
}
}
@@ -3488,7 +3496,7 @@ void EditorNode::set_current_scene(int p_idx) {
if (new_scene) {
if (new_scene->get_parent() != scene_root) {
- scene_root->add_child(new_scene);
+ scene_root->add_child(new_scene, true);
}
}
@@ -3622,7 +3630,7 @@ Error EditorNode::load_scene(const String &p_scene, bool p_ignore_broken_deps, b
sdata->set_path(lpath, true); // take over path
}
- Node *new_scene = sdata->instantiate(PackedScene::GEN_EDIT_STATE_MAIN);
+ Node *new_scene = sdata->instantiate(p_set_inherited ? PackedScene::GEN_EDIT_STATE_MAIN_INHERITED : PackedScene::GEN_EDIT_STATE_MAIN);
if (!new_scene) {
sdata.unref();
@@ -3750,7 +3758,7 @@ void EditorNode::_open_recent_scene(int p_idx) {
ERR_FAIL_INDEX(p_idx, rc.size());
if (load_scene(rc[p_idx]) != OK) {
- rc.remove(p_idx);
+ rc.remove_at(p_idx);
EditorSettings::get_singleton()->set_project_metadata("recent_files", "scenes", rc);
_update_recent_scenes();
}
@@ -4321,7 +4329,7 @@ void EditorNode::_dock_select_input(const Ref<InputEvent> &p_input) {
Ref<InputEventMouseButton> mb = me;
- if (mb.is_valid() && mb->get_button_index() == 1 && mb->is_pressed() && dock_popup_selected != nrect) {
+ if (mb.is_valid() && mb->get_button_index() == MouseButton::LEFT && mb->is_pressed() && dock_popup_selected != nrect) {
Control *dock = dock_slot[dock_popup_selected]->get_current_tab_control();
if (dock) {
dock_slot[dock_popup_selected]->remove_child(dock);
@@ -4898,7 +4906,7 @@ void EditorNode::_update_layouts_menu() {
editor_layouts->clear();
overridden_default_layout = -1;
- editor_layouts->set_size(Vector2());
+ editor_layouts->reset_size();
editor_layouts->add_shortcut(ED_SHORTCUT("layout/save", TTR("Save Layout")), SETTINGS_LAYOUT_SAVE);
editor_layouts->add_shortcut(ED_SHORTCUT("layout/delete", TTR("Delete Layout")), SETTINGS_LAYOUT_DELETE);
editor_layouts->add_separator();
@@ -5014,18 +5022,18 @@ void EditorNode::_scene_tab_input(const Ref<InputEvent> &p_input) {
if (mb.is_valid()) {
if (scene_tabs->get_hovered_tab() >= 0) {
- if (mb->get_button_index() == MOUSE_BUTTON_MIDDLE && mb->is_pressed()) {
+ if (mb->get_button_index() == MouseButton::MIDDLE && mb->is_pressed()) {
_scene_tab_closed(scene_tabs->get_hovered_tab());
}
} else {
- if ((mb->get_button_index() == MOUSE_BUTTON_LEFT && mb->is_double_click()) || (mb->get_button_index() == MOUSE_BUTTON_MIDDLE && mb->is_pressed())) {
+ if ((mb->get_button_index() == MouseButton::LEFT && mb->is_double_click()) || (mb->get_button_index() == MouseButton::MIDDLE && mb->is_pressed())) {
_menu_option_confirm(FILE_NEW_SCENE, true);
}
}
- if (mb->get_button_index() == MOUSE_BUTTON_RIGHT && mb->is_pressed()) {
+ if (mb->get_button_index() == MouseButton::RIGHT && mb->is_pressed()) {
// context menu
scene_tabs_context_menu->clear();
- scene_tabs_context_menu->set_size(Size2(1, 1));
+ scene_tabs_context_menu->reset_size();
scene_tabs_context_menu->add_shortcut(ED_GET_SHORTCUT("editor/new_scene"), FILE_NEW_SCENE);
if (scene_tabs->get_hovered_tab() >= 0) {
@@ -5055,12 +5063,12 @@ void EditorNode::_scene_tab_input(const Ref<InputEvent> &p_input) {
scene_tabs_context_menu->set_position(mb->get_global_position());
scene_tabs_context_menu->popup();
}
- if (mb->get_button_index() == MOUSE_BUTTON_WHEEL_UP && mb->is_pressed()) {
+ if (mb->get_button_index() == MouseButton::WHEEL_UP && mb->is_pressed()) {
int previous_tab = editor_data.get_edited_scene() - 1;
previous_tab = previous_tab >= 0 ? previous_tab : editor_data.get_edited_scene_count() - 1;
_scene_tab_changed(previous_tab);
}
- if (mb->get_button_index() == MOUSE_BUTTON_WHEEL_DOWN && mb->is_pressed()) {
+ if (mb->get_button_index() == MouseButton::WHEEL_DOWN && mb->is_pressed()) {
int next_tab = editor_data.get_edited_scene() + 1;
next_tab %= editor_data.get_edited_scene_count();
_scene_tab_changed(next_tab);
@@ -5169,7 +5177,7 @@ void EditorNode::remove_bottom_panel_item(Control *p_item) {
bottom_panel_vb->remove_child(bottom_panel_items[i].control);
bottom_panel_hb_editors->remove_child(bottom_panel_items[i].button);
memdelete(bottom_panel_items[i].button);
- bottom_panel_items.remove(i);
+ bottom_panel_items.remove_at(i);
break;
}
}
@@ -5420,8 +5428,7 @@ void EditorNode::_global_menu_new_window(const Variant &p_tag) {
if (OS::get_singleton()->get_main_loop()) {
List<String> args;
args.push_back("-p");
- String exec = OS::get_singleton()->get_executable_path();
- OS::get_singleton()->create_process(exec, args);
+ OS::get_singleton()->create_instance(args);
}
}
@@ -5711,6 +5718,7 @@ void EditorNode::_bind_methods() {
ADD_SIGNAL(MethodInfo("request_help_search"));
ADD_SIGNAL(MethodInfo("script_add_function_request", PropertyInfo(Variant::OBJECT, "obj"), PropertyInfo(Variant::STRING, "function"), PropertyInfo(Variant::PACKED_STRING_ARRAY, "args")));
ADD_SIGNAL(MethodInfo("resource_saved", PropertyInfo(Variant::OBJECT, "obj")));
+ ADD_SIGNAL(MethodInfo("scene_saved", PropertyInfo(Variant::STRING, "path")));
ADD_SIGNAL(MethodInfo("project_settings_changed"));
}
@@ -6254,8 +6262,8 @@ EditorNode::EditorNode() {
tabbar_container->add_child(scene_tabs);
distraction_free = memnew(Button);
distraction_free->set_flat(true);
- ED_SHORTCUT_AND_COMMAND("editor/distraction_free_mode", TTR("Distraction Free Mode"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_F11);
- ED_SHORTCUT_OVERRIDE("editor/distraction_free_mode", "macos", KEY_MASK_CMD | KEY_MASK_CTRL | KEY_D);
+ ED_SHORTCUT_AND_COMMAND("editor/distraction_free_mode", TTR("Distraction Free Mode"), KeyModifierMask::CMD | KeyModifierMask::SHIFT | Key::F11);
+ ED_SHORTCUT_OVERRIDE("editor/distraction_free_mode", "macos", KeyModifierMask::CMD | KeyModifierMask::CTRL | Key::D);
distraction_free->set_shortcut(ED_GET_SHORTCUT("editor/distraction_free_mode"));
distraction_free->set_tooltip(TTR("Toggle distraction-free mode."));
distraction_free->connect("pressed", callable_mp(this, &EditorNode::_toggle_distraction_free_mode));
@@ -6353,9 +6361,9 @@ EditorNode::EditorNode() {
gui_base->add_child(warning);
warning->connect("custom_action", callable_mp(this, &EditorNode::_copy_warning));
- ED_SHORTCUT("editor/next_tab", TTR("Next Scene Tab"), KEY_MASK_CMD + KEY_TAB);
- ED_SHORTCUT("editor/prev_tab", TTR("Previous Scene Tab"), KEY_MASK_CMD + KEY_MASK_SHIFT + KEY_TAB);
- ED_SHORTCUT("editor/filter_files", TTR("Focus FileSystem Filter"), KEY_MASK_CMD + KEY_MASK_ALT + KEY_P);
+ ED_SHORTCUT("editor/next_tab", TTR("Next Scene Tab"), KeyModifierMask::CMD + Key::TAB);
+ ED_SHORTCUT("editor/prev_tab", TTR("Previous Scene Tab"), KeyModifierMask::CMD + KeyModifierMask::SHIFT + Key::TAB);
+ ED_SHORTCUT("editor/filter_files", TTR("Focus FileSystem Filter"), KeyModifierMask::CMD + KeyModifierMask::ALT + Key::P);
command_palette = EditorCommandPalette::get_singleton();
command_palette->set_title(TTR("Command Palette"));
@@ -6367,22 +6375,22 @@ EditorNode::EditorNode() {
p = file_menu->get_popup();
- p->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/new_scene", TTR("New Scene"), KEY_MASK_CMD + KEY_N), FILE_NEW_SCENE);
- p->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/new_inherited_scene", TTR("New Inherited Scene..."), KEY_MASK_CMD + KEY_MASK_SHIFT + KEY_N), FILE_NEW_INHERITED_SCENE);
- p->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/open_scene", TTR("Open Scene..."), KEY_MASK_CMD + KEY_O), FILE_OPEN_SCENE);
- p->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/reopen_closed_scene", TTR("Reopen Closed Scene"), KEY_MASK_CMD + KEY_MASK_SHIFT + KEY_T), FILE_OPEN_PREV);
+ p->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/new_scene", TTR("New Scene"), KeyModifierMask::CMD + Key::N), FILE_NEW_SCENE);
+ p->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/new_inherited_scene", TTR("New Inherited Scene..."), KeyModifierMask::CMD + KeyModifierMask::SHIFT + Key::N), FILE_NEW_INHERITED_SCENE);
+ p->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/open_scene", TTR("Open Scene..."), KeyModifierMask::CMD + Key::O), FILE_OPEN_SCENE);
+ p->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/reopen_closed_scene", TTR("Reopen Closed Scene"), KeyModifierMask::CMD + KeyModifierMask::SHIFT + Key::T), FILE_OPEN_PREV);
p->add_submenu_item(TTR("Open Recent"), "RecentScenes", FILE_OPEN_RECENT);
p->add_separator();
- p->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/save_scene", TTR("Save Scene"), KEY_MASK_CMD + KEY_S), FILE_SAVE_SCENE);
- p->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/save_scene_as", TTR("Save Scene As..."), KEY_MASK_CMD + KEY_MASK_SHIFT + KEY_S), FILE_SAVE_AS_SCENE);
- p->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/save_all_scenes", TTR("Save All Scenes"), KEY_MASK_CMD + KEY_MASK_SHIFT + KEY_MASK_ALT + KEY_S), FILE_SAVE_ALL_SCENES);
+ p->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/save_scene", TTR("Save Scene"), KeyModifierMask::CMD + Key::S), FILE_SAVE_SCENE);
+ p->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/save_scene_as", TTR("Save Scene As..."), KeyModifierMask::CMD + KeyModifierMask::SHIFT + Key::S), FILE_SAVE_AS_SCENE);
+ p->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/save_all_scenes", TTR("Save All Scenes"), KeyModifierMask::CMD + KeyModifierMask::SHIFT + KeyModifierMask::ALT + Key::S), FILE_SAVE_ALL_SCENES);
p->add_separator();
- p->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/quick_open", TTR("Quick Open..."), KEY_MASK_SHIFT + KEY_MASK_ALT + KEY_O), FILE_QUICK_OPEN);
- p->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/quick_open_scene", TTR("Quick Open Scene..."), KEY_MASK_CMD + KEY_MASK_SHIFT + KEY_O), FILE_QUICK_OPEN_SCENE);
- p->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/quick_open_script", TTR("Quick Open Script..."), KEY_MASK_CMD + KEY_MASK_ALT + KEY_O), FILE_QUICK_OPEN_SCRIPT);
+ p->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/quick_open", TTR("Quick Open..."), KeyModifierMask::SHIFT + KeyModifierMask::ALT + Key::O), FILE_QUICK_OPEN);
+ p->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/quick_open_scene", TTR("Quick Open Scene..."), KeyModifierMask::CMD + KeyModifierMask::SHIFT + Key::O), FILE_QUICK_OPEN_SCENE);
+ p->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/quick_open_script", TTR("Quick Open Script..."), KeyModifierMask::CMD + KeyModifierMask::ALT + Key::O), FILE_QUICK_OPEN_SCRIPT);
p->add_separator();
PopupMenu *pm_export = memnew(PopupMenu);
@@ -6398,7 +6406,7 @@ EditorNode::EditorNode() {
p->add_separator();
p->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/reload_saved_scene", TTR("Reload Saved Scene")), EDIT_RELOAD_SAVED_SCENE);
- p->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/close_scene", TTR("Close Scene"), KEY_MASK_CMD + KEY_MASK_SHIFT + KEY_W), FILE_CLOSE);
+ p->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/close_scene", TTR("Close Scene"), KeyModifierMask::CMD + KeyModifierMask::SHIFT + Key::W), FILE_CLOSE);
recent_scenes = memnew(PopupMenu);
recent_scenes->set_name("RecentScenes");
@@ -6406,7 +6414,7 @@ EditorNode::EditorNode() {
recent_scenes->connect("id_pressed", callable_mp(this, &EditorNode::_open_recent_scene));
p->add_separator();
- p->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/file_quit", TTR("Quit"), KEY_MASK_CMD + KEY_Q), FILE_QUIT, true);
+ p->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/file_quit", TTR("Quit"), KeyModifierMask::CMD + Key::Q), FILE_QUIT, true);
project_menu = memnew(MenuButton);
project_menu->set_flat(false);
@@ -6418,7 +6426,7 @@ EditorNode::EditorNode() {
p = project_menu->get_popup();
- p->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/project_settings", TTR("Project Settings..."), KEY_NONE, TTR("Project Settings")), RUN_SETTINGS);
+ p->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/project_settings", TTR("Project Settings..."), Key::NONE, TTR("Project Settings")), RUN_SETTINGS);
p->connect("id_pressed", callable_mp(this, &EditorNode::_menu_option));
vcs_actions_menu = VersionControlEditorPlugin::get_singleton()->get_version_control_actions_panel();
@@ -6427,11 +6435,12 @@ EditorNode::EditorNode() {
p->add_separator();
p->add_child(vcs_actions_menu);
p->add_submenu_item(TTR("Version Control"), "Version Control");
+ vcs_actions_menu->add_item(TTR("Create Version Control Metadata"), RUN_VCS_METADATA);
vcs_actions_menu->add_item(TTR("Set Up Version Control"), RUN_VCS_SETTINGS);
vcs_actions_menu->add_item(TTR("Shut Down Version Control"), RUN_VCS_SHUT_DOWN);
p->add_separator();
- p->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/export", TTR("Export..."), KEY_NONE, TTR("Export")), FILE_EXPORT_PROJECT);
+ p->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/export", TTR("Export..."), Key::NONE, TTR("Export")), FILE_EXPORT_PROJECT);
p->add_item(TTR("Install Android Build Template..."), FILE_INSTALL_ANDROID_SOURCE);
p->add_item(TTR("Open Project Data Folder"), RUN_PROJECT_DATA_FOLDER);
@@ -6448,8 +6457,8 @@ EditorNode::EditorNode() {
p->add_separator();
p->add_shortcut(ED_SHORTCUT("editor/reload_current_project", TTR("Reload Current Project")), RUN_RELOAD_CURRENT_PROJECT);
- ED_SHORTCUT_AND_COMMAND("editor/quit_to_project_list", TTR("Quit to Project List"), KEY_MASK_CMD + KEY_MASK_SHIFT + KEY_Q);
- ED_SHORTCUT_OVERRIDE("editor/quit_to_project_list", "macos", KEY_MASK_SHIFT + KEY_MASK_ALT + KEY_Q);
+ ED_SHORTCUT_AND_COMMAND("editor/quit_to_project_list", TTR("Quit to Project List"), KeyModifierMask::CMD + KeyModifierMask::SHIFT + Key::Q);
+ ED_SHORTCUT_OVERRIDE("editor/quit_to_project_list", "macos", KeyModifierMask::SHIFT + KeyModifierMask::ALT + Key::Q);
p->add_shortcut(ED_GET_SHORTCUT("editor/quit_to_project_list"), RUN_PROJECT_MANAGER, true);
menu_hb->add_spacer();
@@ -6477,9 +6486,9 @@ EditorNode::EditorNode() {
p = settings_menu->get_popup();
ED_SHORTCUT_AND_COMMAND("editor/editor_settings", TTR("Editor Settings..."));
- ED_SHORTCUT_OVERRIDE("editor/editor_settings", "macos", KEY_MASK_CMD + KEY_COMMA);
+ ED_SHORTCUT_OVERRIDE("editor/editor_settings", "macos", KeyModifierMask::CMD + Key::COMMA);
p->add_shortcut(ED_GET_SHORTCUT("editor/editor_settings"), SETTINGS_PREFERENCES);
- p->add_shortcut(ED_SHORTCUT("editor/command_palette", TTR("Command Palette..."), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_P), HELP_COMMAND_PALETTE);
+ p->add_shortcut(ED_SHORTCUT("editor/command_palette", TTR("Command Palette..."), KeyModifierMask::CMD | KeyModifierMask::SHIFT | Key::P), HELP_COMMAND_PALETTE);
p->add_separator();
editor_layouts = memnew(PopupMenu);
@@ -6489,14 +6498,14 @@ EditorNode::EditorNode() {
p->add_submenu_item(TTR("Editor Layout"), "Layouts");
p->add_separator();
- ED_SHORTCUT_AND_COMMAND("editor/take_screenshot", TTR("Take Screenshot"), KEY_MASK_CTRL | KEY_F12);
- ED_SHORTCUT_OVERRIDE("editor/take_screenshot", "macos", KEY_MASK_CMD | KEY_F12);
+ ED_SHORTCUT_AND_COMMAND("editor/take_screenshot", TTR("Take Screenshot"), KeyModifierMask::CTRL | Key::F12);
+ ED_SHORTCUT_OVERRIDE("editor/take_screenshot", "macos", KeyModifierMask::CMD | Key::F12);
p->add_shortcut(ED_GET_SHORTCUT("editor/take_screenshot"), EDITOR_SCREENSHOT);
p->set_item_tooltip(p->get_item_count() - 1, TTR("Screenshots are stored in the Editor Data/Settings Folder."));
- ED_SHORTCUT_AND_COMMAND("editor/fullscreen_mode", TTR("Toggle Fullscreen"), KEY_MASK_SHIFT | KEY_F11);
- ED_SHORTCUT_OVERRIDE("editor/fullscreen_mode", "macos", KEY_MASK_CMD | KEY_MASK_CTRL | KEY_F);
+ ED_SHORTCUT_AND_COMMAND("editor/fullscreen_mode", TTR("Toggle Fullscreen"), KeyModifierMask::SHIFT | Key::F11);
+ ED_SHORTCUT_OVERRIDE("editor/fullscreen_mode", "macos", KeyModifierMask::CMD | KeyModifierMask::CTRL | Key::F);
p->add_shortcut(ED_GET_SHORTCUT("editor/fullscreen_mode"), SETTINGS_TOGGLE_FULLSCREEN);
#if defined(WINDOWS_ENABLED) && defined(WINDOWS_SUBSYSTEM_CONSOLE)
@@ -6530,8 +6539,8 @@ EditorNode::EditorNode() {
p = help_menu->get_popup();
p->connect("id_pressed", callable_mp(this, &EditorNode::_menu_option));
- ED_SHORTCUT_AND_COMMAND("editor/editor_help", TTR("Search Help"), KEY_F1);
- ED_SHORTCUT_OVERRIDE("editor/editor_help", "macos", KEY_MASK_ALT | KEY_SPACE);
+ ED_SHORTCUT_AND_COMMAND("editor/editor_help", TTR("Search Help"), Key::F1);
+ ED_SHORTCUT_OVERRIDE("editor/editor_help", "macos", KeyModifierMask::ALT | Key::SPACE);
p->add_icon_shortcut(gui_base->get_theme_icon(SNAME("HelpSearch"), SNAME("EditorIcons")), ED_GET_SHORTCUT("editor/editor_help"), HELP_SEARCH);
p->add_separator();
p->add_icon_shortcut(gui_base->get_theme_icon(SNAME("Instance"), SNAME("EditorIcons")), ED_SHORTCUT_AND_COMMAND("editor/online_docs", TTR("Online Documentation")), HELP_DOCS);
@@ -6556,8 +6565,8 @@ EditorNode::EditorNode() {
play_button->connect("pressed", callable_mp(this, &EditorNode::_menu_option), make_binds(RUN_PLAY));
play_button->set_tooltip(TTR("Play the project."));
- ED_SHORTCUT_AND_COMMAND("editor/play", TTR("Play"), KEY_F5);
- ED_SHORTCUT_OVERRIDE("editor/play", "macos", KEY_MASK_CMD | KEY_B);
+ ED_SHORTCUT_AND_COMMAND("editor/play", TTR("Play"), Key::F5);
+ ED_SHORTCUT_OVERRIDE("editor/play", "macos", KeyModifierMask::CMD | Key::B);
play_button->set_shortcut(ED_GET_SHORTCUT("editor/play"));
pause_button = memnew(Button);
@@ -6569,8 +6578,8 @@ EditorNode::EditorNode() {
pause_button->set_disabled(true);
play_hb->add_child(pause_button);
- ED_SHORTCUT("editor/pause_scene", TTR("Pause Scene"), KEY_F7);
- ED_SHORTCUT_OVERRIDE("editor/pause_scene", "macos", KEY_MASK_CMD | KEY_MASK_CTRL | KEY_Y);
+ ED_SHORTCUT("editor/pause_scene", TTR("Pause Scene"), Key::F7);
+ ED_SHORTCUT_OVERRIDE("editor/pause_scene", "macos", KeyModifierMask::CMD | KeyModifierMask::CTRL | Key::Y);
pause_button->set_shortcut(ED_GET_SHORTCUT("editor/pause_scene"));
stop_button = memnew(Button);
@@ -6582,8 +6591,8 @@ EditorNode::EditorNode() {
stop_button->set_tooltip(TTR("Stop the scene."));
stop_button->set_disabled(true);
- ED_SHORTCUT("editor/stop", TTR("Stop"), KEY_F8);
- ED_SHORTCUT_OVERRIDE("editor/stop", "macos", KEY_MASK_CMD | KEY_PERIOD);
+ ED_SHORTCUT("editor/stop", TTR("Stop"), Key::F8);
+ ED_SHORTCUT_OVERRIDE("editor/stop", "macos", KeyModifierMask::CMD | Key::PERIOD);
stop_button->set_shortcut(ED_GET_SHORTCUT("editor/stop"));
run_native = memnew(EditorRunNative);
@@ -6599,8 +6608,8 @@ EditorNode::EditorNode() {
play_scene_button->connect("pressed", callable_mp(this, &EditorNode::_menu_option), make_binds(RUN_PLAY_SCENE));
play_scene_button->set_tooltip(TTR("Play the edited scene."));
- ED_SHORTCUT_AND_COMMAND("editor/play_scene", TTR("Play Scene"), KEY_F6);
- ED_SHORTCUT_OVERRIDE("editor/play_scene", "macos", KEY_MASK_CMD | KEY_R);
+ ED_SHORTCUT_AND_COMMAND("editor/play_scene", TTR("Play Scene"), Key::F6);
+ ED_SHORTCUT_OVERRIDE("editor/play_scene", "macos", KeyModifierMask::CMD | Key::R);
play_scene_button->set_shortcut(ED_GET_SHORTCUT("editor/play_scene"));
play_custom_scene_button = memnew(Button);
@@ -6612,8 +6621,8 @@ EditorNode::EditorNode() {
play_custom_scene_button->connect("pressed", callable_mp(this, &EditorNode::_menu_option), make_binds(RUN_PLAY_CUSTOM_SCENE));
play_custom_scene_button->set_tooltip(TTR("Play custom scene"));
- ED_SHORTCUT_AND_COMMAND("editor/play_custom_scene", TTR("Play Custom Scene"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_F5);
- ED_SHORTCUT_OVERRIDE("editor/play_custom_scene", "macos", KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_R);
+ ED_SHORTCUT_AND_COMMAND("editor/play_custom_scene", TTR("Play Custom Scene"), KeyModifierMask::CMD | KeyModifierMask::SHIFT | Key::F5);
+ ED_SHORTCUT_OVERRIDE("editor/play_custom_scene", "macos", KeyModifierMask::CMD | KeyModifierMask::SHIFT | Key::R);
play_custom_scene_button->set_shortcut(ED_GET_SHORTCUT("editor/play_custom_scene"));
HBoxContainer *right_menu_hb = memnew(HBoxContainer);
@@ -6800,7 +6809,7 @@ EditorNode::EditorNode() {
bottom_panel_raise->set_flat(true);
bottom_panel_raise->set_icon(gui_base->get_theme_icon(SNAME("ExpandBottomDock"), SNAME("EditorIcons")));
- bottom_panel_raise->set_shortcut(ED_SHORTCUT_AND_COMMAND("editor/bottom_panel_expand", TTR("Expand Bottom Panel"), KEY_MASK_SHIFT | KEY_F12));
+ bottom_panel_raise->set_shortcut(ED_SHORTCUT_AND_COMMAND("editor/bottom_panel_expand", TTR("Expand Bottom Panel"), KeyModifierMask::SHIFT | Key::F12));
bottom_panel_hb->add_child(bottom_panel_raise);
bottom_panel_raise->hide();
@@ -6839,7 +6848,7 @@ EditorNode::EditorNode() {
gui_base->add_child(custom_build_manage_templates);
file_android_build_source = memnew(EditorFileDialog);
- file_android_build_source->set_title(TTR("Select android sources file"));
+ file_android_build_source->set_title(TTR("Select Android sources file"));
file_android_build_source->set_access(EditorFileDialog::ACCESS_FILESYSTEM);
file_android_build_source->set_file_mode(EditorFileDialog::FILE_MODE_OPEN_FILE);
file_android_build_source->add_filter("*.zip");
@@ -6877,10 +6886,12 @@ EditorNode::EditorNode() {
file_export_lib->connect("file_selected", callable_mp(this, &EditorNode::_dialog_action));
file_export_lib_merge = memnew(CheckBox);
file_export_lib_merge->set_text(TTR("Merge With Existing"));
+ file_export_lib_merge->set_h_size_flags(Control::SIZE_SHRINK_CENTER);
file_export_lib_merge->set_pressed(true);
file_export_lib->get_vbox()->add_child(file_export_lib_merge);
file_export_lib_apply_xforms = memnew(CheckBox);
file_export_lib_apply_xforms->set_text(TTR("Apply MeshInstance Transforms"));
+ file_export_lib_apply_xforms->set_h_size_flags(Control::SIZE_SHRINK_CENTER);
file_export_lib_apply_xforms->set_pressed(false);
file_export_lib->get_vbox()->add_child(file_export_lib_apply_xforms);
gui_base->add_child(file_export_lib);
@@ -7010,6 +7021,7 @@ EditorNode::EditorNode() {
add_editor_plugin(memnew(GPUParticlesCollisionSDFEditorPlugin(this)));
add_editor_plugin(memnew(InputEventEditorPlugin(this)));
add_editor_plugin(memnew(SubViewportPreviewEditorPlugin(this)));
+ add_editor_plugin(memnew(TextControlEditorPlugin(this)));
for (int i = 0; i < EditorPlugins::get_plugin_count(); i++) {
add_editor_plugin(EditorPlugins::create(i, this));
@@ -7140,8 +7152,6 @@ EditorNode::EditorNode() {
_build_icon_type_cache();
- Node::set_human_readable_collision_renaming(true);
-
pick_main_scene = memnew(ConfirmationDialog);
gui_base->add_child(pick_main_scene);
pick_main_scene->get_ok_button()->set_text(TTR("Select"));
@@ -7171,15 +7181,15 @@ EditorNode::EditorNode() {
ResourceLoader::set_load_callback(_resource_loaded);
// Use the Ctrl modifier so F2 can be used to rename nodes in the scene tree dock.
- ED_SHORTCUT_AND_COMMAND("editor/editor_2d", TTR("Open 2D Editor"), KEY_MASK_CTRL | KEY_F1);
- ED_SHORTCUT_AND_COMMAND("editor/editor_3d", TTR("Open 3D Editor"), KEY_MASK_CTRL | KEY_F2);
- ED_SHORTCUT_AND_COMMAND("editor/editor_script", TTR("Open Script Editor"), KEY_MASK_CTRL | KEY_F3);
- ED_SHORTCUT_AND_COMMAND("editor/editor_assetlib", TTR("Open Asset Library"), KEY_MASK_CTRL | KEY_F4);
-
- ED_SHORTCUT_OVERRIDE("editor/editor_2d", "macos", KEY_MASK_ALT | KEY_1);
- ED_SHORTCUT_OVERRIDE("editor/editor_3d", "macos", KEY_MASK_ALT | KEY_2);
- ED_SHORTCUT_OVERRIDE("editor/editor_script", "macos", KEY_MASK_ALT | KEY_3);
- ED_SHORTCUT_OVERRIDE("editor/editor_assetlib", "macos", KEY_MASK_ALT | KEY_4);
+ ED_SHORTCUT_AND_COMMAND("editor/editor_2d", TTR("Open 2D Editor"), KeyModifierMask::CTRL | Key::F1);
+ ED_SHORTCUT_AND_COMMAND("editor/editor_3d", TTR("Open 3D Editor"), KeyModifierMask::CTRL | Key::F2);
+ ED_SHORTCUT_AND_COMMAND("editor/editor_script", TTR("Open Script Editor"), KeyModifierMask::CTRL | Key::F3);
+ ED_SHORTCUT_AND_COMMAND("editor/editor_assetlib", TTR("Open Asset Library"), KeyModifierMask::CTRL | Key::F4);
+
+ ED_SHORTCUT_OVERRIDE("editor/editor_2d", "macos", KeyModifierMask::ALT | Key::KEY_1);
+ ED_SHORTCUT_OVERRIDE("editor/editor_3d", "macos", KeyModifierMask::ALT | Key::KEY_2);
+ ED_SHORTCUT_OVERRIDE("editor/editor_script", "macos", KeyModifierMask::ALT | Key::KEY_3);
+ ED_SHORTCUT_OVERRIDE("editor/editor_assetlib", "macos", KeyModifierMask::ALT | Key::KEY_4);
ED_SHORTCUT_AND_COMMAND("editor/editor_next", TTR("Open the next Editor"));
ED_SHORTCUT_AND_COMMAND("editor/editor_prev", TTR("Open the previous Editor"));
diff --git a/editor/editor_node.h b/editor/editor_node.h
index 98aa4b697c..d74ec33f25 100644
--- a/editor/editor_node.h
+++ b/editor/editor_node.h
@@ -170,6 +170,7 @@ private:
RUN_PROJECT_DATA_FOLDER,
RUN_RELOAD_CURRENT_PROJECT,
RUN_PROJECT_MANAGER,
+ RUN_VCS_METADATA,
RUN_VCS_SETTINGS,
RUN_VCS_SHUT_DOWN,
SETTINGS_UPDATE_CONTINUOUSLY,
diff --git a/editor/editor_properties.cpp b/editor/editor_properties.cpp
index e679222567..e48679cad7 100644
--- a/editor/editor_properties.cpp
+++ b/editor/editor_properties.cpp
@@ -35,6 +35,9 @@
#include "editor_node.h"
#include "editor_properties_array_dict.h"
#include "editor_scale.h"
+#include "scene/2d/gpu_particles_2d.h"
+#include "scene/3d/fog_volume.h"
+#include "scene/3d/gpu_particles_3d.h"
#include "scene/main/window.h"
#include "scene/resources/font.h"
@@ -815,7 +818,7 @@ public:
}
const Ref<InputEventMouseButton> mb = p_ev;
- if (mb.is_valid() && mb->get_button_index() == MOUSE_BUTTON_LEFT && mb->is_pressed()) {
+ if (mb.is_valid() && mb->get_button_index() == MouseButton::LEFT && mb->is_pressed()) {
if (hovered_index >= 0) {
// Toggle the flag.
// We base our choice on the hovered flag, so that it always matches the hovered flag.
@@ -1275,11 +1278,11 @@ void EditorPropertyEasing::_drag_easing(const Ref<InputEvent> &p_ev) {
}
const Ref<InputEventMouseButton> mb = p_ev;
if (mb.is_valid()) {
- if (mb->is_double_click() && mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (mb->is_double_click() && mb->get_button_index() == MouseButton::LEFT) {
_setup_spin();
}
- if (mb->is_pressed() && mb->get_button_index() == MOUSE_BUTTON_RIGHT) {
+ if (mb->is_pressed() && mb->get_button_index() == MouseButton::RIGHT) {
preset->set_position(easing_draw->get_screen_transform().xform(mb->get_position()));
preset->popup();
@@ -1288,7 +1291,7 @@ void EditorPropertyEasing::_drag_easing(const Ref<InputEvent> &p_ev) {
easing_draw->update();
}
- if (mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (mb->get_button_index() == MouseButton::LEFT) {
dragging = mb->is_pressed();
// Update to display the correct dragging color
easing_draw->update();
@@ -1297,7 +1300,7 @@ void EditorPropertyEasing::_drag_easing(const Ref<InputEvent> &p_ev) {
const Ref<InputEventMouseMotion> mm = p_ev;
- if (dragging && mm.is_valid() && mm->get_button_mask() & MOUSE_BUTTON_MASK_LEFT) {
+ if (dragging && mm.is_valid() && (mm->get_button_mask() & MouseButton::MASK_LEFT) != MouseButton::NONE) {
float rel = mm->get_relative().x;
if (rel == 0) {
return;
@@ -2821,8 +2824,8 @@ void EditorPropertyResource::_set_read_only(bool p_read_only) {
resource_picker->set_editable(!p_read_only);
};
-void EditorPropertyResource::_resource_selected(const RES &p_resource) {
- if (use_sub_inspector) {
+void EditorPropertyResource::_resource_selected(const RES &p_resource, bool p_edit) {
+ if (!p_edit && use_sub_inspector) {
bool unfold = !get_edited_object()->editor_is_section_unfolded(get_edited_property());
get_edited_object()->editor_set_section_unfold(get_edited_property(), unfold);
update_property();
@@ -2969,6 +2972,35 @@ void EditorPropertyResource::_update_property_bg() {
update();
}
+void EditorPropertyResource::_update_preferred_shader() {
+ Node *parent = get_parent();
+ EditorProperty *parent_property = nullptr;
+
+ while (parent && !parent_property) {
+ parent_property = Object::cast_to<EditorProperty>(parent);
+ parent = parent->get_parent();
+ }
+
+ if (parent_property) {
+ EditorShaderPicker *shader_picker = Object::cast_to<EditorShaderPicker>(resource_picker);
+ Object *object = parent_property->get_edited_object();
+ const StringName &property = parent_property->get_edited_property();
+
+ // Set preferred shader based on edited parent type.
+ if ((Object::cast_to<GPUParticles2D>(object) || Object::cast_to<GPUParticles3D>(object)) && property == SNAME("process_material")) {
+ shader_picker->set_preferred_mode(Shader::MODE_PARTICLES);
+ } else if (Object::cast_to<FogVolume>(object)) {
+ shader_picker->set_preferred_mode(Shader::MODE_FOG);
+ } else if (Object::cast_to<CanvasItem>(object)) {
+ shader_picker->set_preferred_mode(Shader::MODE_CANVAS_ITEM);
+ } else if (Object::cast_to<Node3D>(object)) {
+ shader_picker->set_preferred_mode(Shader::MODE_SPATIAL);
+ } else if (Object::cast_to<Sky>(object)) {
+ shader_picker->set_preferred_mode(Shader::MODE_SKY);
+ }
+ }
+}
+
void EditorPropertyResource::_viewport_selected(const NodePath &p_path) {
Node *to_node = get_node(p_path);
if (!Object::cast_to<Viewport>(to_node)) {
@@ -3000,6 +3032,7 @@ void EditorPropertyResource::setup(Object *p_object, const String &p_path, const
EditorShaderPicker *shader_picker = memnew(EditorShaderPicker);
shader_picker->set_edited_material(Object::cast_to<ShaderMaterial>(p_object));
resource_picker = shader_picker;
+ connect(SNAME("ready"), callable_mp(this, &EditorPropertyResource::_update_preferred_shader));
} else {
resource_picker = memnew(EditorResourcePicker);
}
@@ -3137,11 +3170,7 @@ EditorPropertyResource::EditorPropertyResource() {
////////////// DEFAULT PLUGIN //////////////////////
bool EditorInspectorDefaultPlugin::can_handle(Object *p_object) {
- return true; //can handle everything
-}
-
-void EditorInspectorDefaultPlugin::parse_begin(Object *p_object) {
- //do none
+ return true; // Can handle everything.
}
bool EditorInspectorDefaultPlugin::parse_property(Object *p_object, const Variant::Type p_type, const String &p_path, const PropertyHint p_hint, const String &p_hint_text, const uint32_t p_usage, const bool p_wide) {
@@ -3152,10 +3181,6 @@ bool EditorInspectorDefaultPlugin::parse_property(Object *p_object, const Varian
return false;
}
-void EditorInspectorDefaultPlugin::parse_end() {
- //do none
-}
-
struct EditorPropertyRangeHint {
bool angle_in_degrees = false;
bool greater = true;
diff --git a/editor/editor_properties.h b/editor/editor_properties.h
index 9a687f1a72..42ef650adc 100644
--- a/editor/editor_properties.h
+++ b/editor/editor_properties.h
@@ -657,7 +657,7 @@ class EditorPropertyResource : public EditorProperty {
bool updating_theme = false;
bool opened_editor = false;
- void _resource_selected(const RES &p_resource);
+ void _resource_selected(const RES &p_resource, bool p_edit);
void _resource_changed(const RES &p_resource);
void _viewport_selected(const NodePath &p_path);
@@ -669,6 +669,7 @@ class EditorPropertyResource : public EditorProperty {
void _open_editor_pressed();
void _fold_other_editors(Object *p_self);
void _update_property_bg();
+ void _update_preferred_shader();
protected:
virtual void _set_read_only(bool p_read_only) override;
@@ -695,9 +696,7 @@ class EditorInspectorDefaultPlugin : public EditorInspectorPlugin {
public:
virtual bool can_handle(Object *p_object) override;
- virtual void parse_begin(Object *p_object) override;
virtual bool parse_property(Object *p_object, const Variant::Type p_type, const String &p_path, const PropertyHint p_hint, const String &p_hint_text, const uint32_t p_usage, const bool p_wide = false) override;
- virtual void parse_end() override;
static EditorProperty *get_editor_for_property(Object *p_object, const Variant::Type p_type, const String &p_path, const PropertyHint p_hint, const String &p_hint_text, const uint32_t p_usage, const bool p_wide = false);
};
diff --git a/editor/editor_properties_array_dict.cpp b/editor/editor_properties_array_dict.cpp
index 9b5dc8851c..0f59c8281f 100644
--- a/editor/editor_properties_array_dict.cpp
+++ b/editor/editor_properties_array_dict.cpp
@@ -413,7 +413,7 @@ void EditorPropertyArray::update_property() {
void EditorPropertyArray::_remove_pressed(int p_index) {
Variant array = object->get_array();
- array.call("remove", p_index);
+ array.call("remove_at", p_index);
emit_changed(get_edited_property(), array, "", false);
update_property();
@@ -855,6 +855,7 @@ void EditorPropertyDictionary::update_property() {
object->set_dict(dict);
VBoxContainer *add_vbox = nullptr;
+ double default_float_step = EDITOR_GET("interface/inspector/default_float_step");
for (int i = 0; i < amount + 2; i++) {
String prop_name;
@@ -894,7 +895,7 @@ void EditorPropertyDictionary::update_property() {
} break;
case Variant::FLOAT: {
EditorPropertyFloat *editor = memnew(EditorPropertyFloat);
- editor->setup(-100000, 100000, 0.001, true, false, true, true);
+ editor->setup(-100000, 100000, default_float_step, true, false, true, true);
prop = editor;
} break;
case Variant::STRING: {
@@ -905,7 +906,7 @@ void EditorPropertyDictionary::update_property() {
// Math types.
case Variant::VECTOR2: {
EditorPropertyVector2 *editor = memnew(EditorPropertyVector2);
- editor->setup(-100000, 100000, 0.001, true);
+ editor->setup(-100000, 100000, default_float_step, true);
prop = editor;
} break;
@@ -917,7 +918,7 @@ void EditorPropertyDictionary::update_property() {
} break;
case Variant::RECT2: {
EditorPropertyRect2 *editor = memnew(EditorPropertyRect2);
- editor->setup(-100000, 100000, 0.001, true);
+ editor->setup(-100000, 100000, default_float_step, true);
prop = editor;
} break;
@@ -929,7 +930,7 @@ void EditorPropertyDictionary::update_property() {
} break;
case Variant::VECTOR3: {
EditorPropertyVector3 *editor = memnew(EditorPropertyVector3);
- editor->setup(-100000, 100000, 0.001, true);
+ editor->setup(-100000, 100000, default_float_step, true);
prop = editor;
} break;
@@ -941,37 +942,37 @@ void EditorPropertyDictionary::update_property() {
} break;
case Variant::TRANSFORM2D: {
EditorPropertyTransform2D *editor = memnew(EditorPropertyTransform2D);
- editor->setup(-100000, 100000, 0.001, true);
+ editor->setup(-100000, 100000, default_float_step, true);
prop = editor;
} break;
case Variant::PLANE: {
EditorPropertyPlane *editor = memnew(EditorPropertyPlane);
- editor->setup(-100000, 100000, 0.001, true);
+ editor->setup(-100000, 100000, default_float_step, true);
prop = editor;
} break;
case Variant::QUATERNION: {
EditorPropertyQuaternion *editor = memnew(EditorPropertyQuaternion);
- editor->setup(-100000, 100000, 0.001, true);
+ editor->setup(-100000, 100000, default_float_step, true);
prop = editor;
} break;
case Variant::AABB: {
EditorPropertyAABB *editor = memnew(EditorPropertyAABB);
- editor->setup(-100000, 100000, 0.001, true);
+ editor->setup(-100000, 100000, default_float_step, true);
prop = editor;
} break;
case Variant::BASIS: {
EditorPropertyBasis *editor = memnew(EditorPropertyBasis);
- editor->setup(-100000, 100000, 0.001, true);
+ editor->setup(-100000, 100000, default_float_step, true);
prop = editor;
} break;
case Variant::TRANSFORM3D: {
EditorPropertyTransform3D *editor = memnew(EditorPropertyTransform3D);
- editor->setup(-100000, 100000, 0.001, true);
+ editor->setup(-100000, 100000, default_float_step, true);
prop = editor;
} break;
diff --git a/editor/editor_resource_picker.cpp b/editor/editor_resource_picker.cpp
index 9dbf69a779..0703677dc8 100644
--- a/editor/editor_resource_picker.cpp
+++ b/editor/editor_resource_picker.cpp
@@ -84,7 +84,7 @@ void EditorResourcePicker::_update_resource_preview(const String &p_path, const
if (p_preview.is_valid()) {
preview_rect->set_offset(SIDE_LEFT, assign_button->get_icon()->get_width() + assign_button->get_theme_stylebox(SNAME("normal"))->get_default_margin(SIDE_LEFT) + get_theme_constant(SNAME("hseparation"), SNAME("Button")));
- if (type == "GradientTexture") {
+ if (type == "GradientTexture1D") {
preview_rect->set_stretch_mode(TextureRect::STRETCH_SCALE);
assign_button->set_custom_minimum_size(Size2(1, 1));
} else {
@@ -106,7 +106,7 @@ void EditorResourcePicker::_resource_selected() {
return;
}
- emit_signal(SNAME("resource_selected"), edited_resource);
+ emit_signal(SNAME("resource_selected"), edited_resource, false);
}
void EditorResourcePicker::_file_selected(const String &p_path) {
@@ -266,7 +266,7 @@ void EditorResourcePicker::_edit_menu_cbk(int p_which) {
case OBJ_MENU_EDIT: {
if (edited_resource.is_valid()) {
- emit_signal(SNAME("resource_selected"), edited_resource);
+ emit_signal(SNAME("resource_selected"), edited_resource, true);
}
} break;
@@ -464,7 +464,7 @@ void EditorResourcePicker::_button_input(const Ref<InputEvent> &p_event) {
Ref<InputEventMouseButton> mb = p_event;
if (mb.is_valid()) {
- if (mb->is_pressed() && mb->get_button_index() == MOUSE_BUTTON_RIGHT) {
+ if (mb->is_pressed() && mb->get_button_index() == MouseButton::RIGHT) {
_update_menu_items();
Vector2 pos = get_screen_position() + mb->get_position();
@@ -690,7 +690,7 @@ void EditorResourcePicker::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "editable"), "set_editable", "is_editable");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "toggle_mode"), "set_toggle_mode", "is_toggle_mode");
- ADD_SIGNAL(MethodInfo("resource_selected", PropertyInfo(Variant::OBJECT, "resource", PROPERTY_HINT_RESOURCE_TYPE, "Resource")));
+ ADD_SIGNAL(MethodInfo("resource_selected", PropertyInfo(Variant::OBJECT, "resource", PROPERTY_HINT_RESOURCE_TYPE, "Resource"), PropertyInfo(Variant::BOOL, "edit")));
ADD_SIGNAL(MethodInfo("resource_changed", PropertyInfo(Variant::OBJECT, "resource", PROPERTY_HINT_RESOURCE_TYPE, "Resource")));
}
@@ -934,7 +934,7 @@ bool EditorShaderPicker::handle_menu_selected(int p_which) {
switch (p_which) {
case OBJ_MENU_NEW_SHADER: {
if (material.is_valid()) {
- EditorNode::get_singleton()->get_scene_tree_dock()->open_shader_dialog(material);
+ EditorNode::get_singleton()->get_scene_tree_dock()->open_shader_dialog(material, preferred_mode);
return true;
}
} break;
@@ -952,5 +952,9 @@ ShaderMaterial *EditorShaderPicker::get_edited_material() const {
return edited_material;
}
+void EditorShaderPicker::set_preferred_mode(int p_mode) {
+ preferred_mode = p_mode;
+}
+
EditorShaderPicker::EditorShaderPicker() {
}
diff --git a/editor/editor_resource_picker.h b/editor/editor_resource_picker.h
index d0dad0287b..f55c6f47f3 100644
--- a/editor/editor_resource_picker.h
+++ b/editor/editor_resource_picker.h
@@ -156,6 +156,7 @@ class EditorShaderPicker : public EditorResourcePicker {
};
ShaderMaterial *edited_material = nullptr;
+ int preferred_mode = -1;
public:
virtual void set_create_options(Object *p_menu_node) override;
@@ -163,6 +164,7 @@ public:
void set_edited_material(ShaderMaterial *p_material);
ShaderMaterial *get_edited_material() const;
+ void set_preferred_mode(int p_preferred_mode);
EditorShaderPicker();
};
diff --git a/editor/editor_run.cpp b/editor/editor_run.cpp
index 8a7ec9aa82..0a77a8b0bb 100644
--- a/editor/editor_run.cpp
+++ b/editor/editor_run.cpp
@@ -201,7 +201,7 @@ Error EditorRun::run(const String &p_scene, const String &p_custom_args, const L
Vector<String> exec_args = p_custom_args.substr(0, placeholder_pos).split(" ", false);
if (exec_args.size() >= 1) {
exec = exec_args[0];
- exec_args.remove(0);
+ exec_args.remove_at(0);
// Append the Godot executable name before we append executable arguments
// (since the order is reversed when using `push_front()`).
@@ -236,7 +236,7 @@ Error EditorRun::run(const String &p_scene, const String &p_custom_args, const L
int instances = EditorSettings::get_singleton()->get_project_metadata("debug_options", "run_debug_instances", 1);
for (int i = 0; i < instances; i++) {
OS::ProcessID pid = 0;
- Error err = OS::get_singleton()->create_process(exec, args, &pid);
+ Error err = OS::get_singleton()->create_instance(args, &pid);
ERR_FAIL_COND_V(err, err);
pids.push_back(pid);
}
diff --git a/editor/editor_settings.cpp b/editor/editor_settings.cpp
index 1da9213b89..613e0ba7a0 100644
--- a/editor/editor_settings.cpp
+++ b/editor/editor_settings.cpp
@@ -293,8 +293,8 @@ void EditorSettings::_get_property_list(List<PropertyInfo> *p_list) const {
p_list->push_back(pi);
}
- p_list->push_back(PropertyInfo(Variant::ARRAY, "shortcuts", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL)); //do not edit
- p_list->push_back(PropertyInfo(Variant::ARRAY, "builtin_action_overrides", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL));
+ p_list->push_back(PropertyInfo(Variant::ARRAY, "shortcuts", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL)); //do not edit
+ p_list->push_back(PropertyInfo(Variant::ARRAY, "builtin_action_overrides", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL));
}
void EditorSettings::_add_property_info_bind(const Dictionary &p_info) {
@@ -1482,7 +1482,7 @@ void ED_SHORTCUT_OVERRIDE(const String &p_path, const String &p_feature, Key p_k
ERR_FAIL_COND_MSG(!sc.is_valid(), "Used ED_SHORTCUT_OVERRIDE with invalid shortcut: " + p_path + ".");
PackedInt32Array arr;
- arr.push_back(p_keycode);
+ arr.push_back((int32_t)p_keycode);
ED_SHORTCUT_OVERRIDE_ARRAY(p_path, p_feature, arr);
}
@@ -1503,13 +1503,12 @@ void ED_SHORTCUT_OVERRIDE_ARRAY(const String &p_path, const String &p_feature, c
#ifdef OSX_ENABLED
// Use Cmd+Backspace as a general replacement for Delete shortcuts on macOS
- if (keycode == KEY_DELETE) {
- keycode = KEY_MASK_CMD | KEY_BACKSPACE;
+ if (keycode == Key::KEY_DELETE) {
+ keycode = KeyModifierMask::CMD | Key::BACKSPACE;
}
#endif
-
Ref<InputEventKey> ie;
- if (keycode) {
+ if (keycode != Key::NONE) {
ie = InputEventKey::create_reference(keycode);
events.push_back(ie);
}
@@ -1522,7 +1521,7 @@ void ED_SHORTCUT_OVERRIDE_ARRAY(const String &p_path, const String &p_feature, c
Ref<Shortcut> ED_SHORTCUT(const String &p_path, const String &p_name, Key p_keycode) {
PackedInt32Array arr;
- arr.push_back(p_keycode);
+ arr.push_back((int32_t)p_keycode);
return ED_SHORTCUT_ARRAY(p_path, p_name, arr);
}
@@ -1534,13 +1533,13 @@ Ref<Shortcut> ED_SHORTCUT_ARRAY(const String &p_path, const String &p_name, cons
#ifdef OSX_ENABLED
// Use Cmd+Backspace as a general replacement for Delete shortcuts on macOS
- if (keycode == KEY_DELETE) {
- keycode = KEY_MASK_CMD | KEY_BACKSPACE;
+ if (keycode == Key::KEY_DELETE) {
+ keycode = KeyModifierMask::CMD | Key::BACKSPACE;
}
#endif
Ref<InputEventKey> ie;
- if (keycode) {
+ if (keycode != Key::NONE) {
ie = InputEventKey::create_reference(keycode);
events.push_back(ie);
}
diff --git a/editor/editor_settings.h b/editor/editor_settings.h
index 04e227bc5c..cb23ed3d19 100644
--- a/editor/editor_settings.h
+++ b/editor/editor_settings.h
@@ -200,9 +200,9 @@ Variant _EDITOR_DEF(const String &p_setting, const Variant &p_default, bool p_re
Variant _EDITOR_GET(const String &p_setting);
#define ED_IS_SHORTCUT(p_name, p_ev) (EditorSettings::get_singleton()->is_shortcut(p_name, p_ev))
-Ref<Shortcut> ED_SHORTCUT(const String &p_path, const String &p_name, Key p_keycode = KEY_NONE);
+Ref<Shortcut> ED_SHORTCUT(const String &p_path, const String &p_name, Key p_keycode = Key::NONE);
Ref<Shortcut> ED_SHORTCUT_ARRAY(const String &p_path, const String &p_name, const PackedInt32Array &p_keycodes);
-void ED_SHORTCUT_OVERRIDE(const String &p_path, const String &p_feature, Key p_keycode = KEY_NONE);
+void ED_SHORTCUT_OVERRIDE(const String &p_path, const String &p_feature, Key p_keycode = Key::NONE);
void ED_SHORTCUT_OVERRIDE_ARRAY(const String &p_path, const String &p_feature, const PackedInt32Array &p_keycodes);
Ref<Shortcut> ED_GET_SHORTCUT(const String &p_path);
diff --git a/editor/editor_spin_slider.cpp b/editor/editor_spin_slider.cpp
index 82b5ec5ca1..f07a5ab523 100644
--- a/editor/editor_spin_slider.cpp
+++ b/editor/editor_spin_slider.cpp
@@ -39,9 +39,9 @@
String EditorSpinSlider::get_tooltip(const Point2 &p_pos) const {
if (grabber->is_visible()) {
#ifdef OSX_ENABLED
- const int key = KEY_META;
+ Key key = Key::META;
#else
- const int key = KEY_CTRL;
+ Key key = Key::CTRL;
#endif
return TS->format_number(rtos(get_value())) + "\n\n" + vformat(TTR("Hold %s to round to integers. Hold Shift for more precise changes."), find_keycode_name(key));
}
@@ -61,7 +61,7 @@ void EditorSpinSlider::gui_input(const Ref<InputEvent> &p_event) {
Ref<InputEventMouseButton> mb = p_event;
if (mb.is_valid()) {
- if (mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (mb->get_button_index() == MouseButton::LEFT) {
if (mb->is_pressed()) {
if (updown_offset != -1 && mb->get_position().x > updown_offset) {
//there is an updown, so use it.
@@ -92,7 +92,7 @@ void EditorSpinSlider::gui_input(const Ref<InputEvent> &p_event) {
grabbing_spinner_attempt = false;
}
}
- } else if (mb->get_button_index() == MOUSE_BUTTON_WHEEL_UP || mb->get_button_index() == MOUSE_BUTTON_WHEEL_DOWN) {
+ } else if (mb->get_button_index() == MouseButton::WHEEL_UP || mb->get_button_index() == MouseButton::WHEEL_DOWN) {
if (grabber->is_visible()) {
call_deferred(SNAME("update"));
}
@@ -154,17 +154,17 @@ void EditorSpinSlider::_grabber_gui_input(const Ref<InputEvent> &p_event) {
if (grabbing_grabber) {
if (mb.is_valid()) {
- if (mb->get_button_index() == MOUSE_BUTTON_WHEEL_UP) {
+ if (mb->get_button_index() == MouseButton::WHEEL_UP) {
set_value(get_value() + get_step());
mousewheel_over_grabber = true;
- } else if (mb->get_button_index() == MOUSE_BUTTON_WHEEL_DOWN) {
+ } else if (mb->get_button_index() == MouseButton::WHEEL_DOWN) {
set_value(get_value() - get_step());
mousewheel_over_grabber = true;
}
}
}
- if (mb.is_valid() && mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (mb.is_valid() && mb->get_button_index() == MouseButton::LEFT) {
if (mb->is_pressed()) {
grabbing_grabber = true;
if (!mousewheel_over_grabber) {
@@ -212,9 +212,9 @@ void EditorSpinSlider::_value_input_gui_input(const Ref<InputEvent> &p_event) {
step *= 0.1;
}
- uint32_t code = k->get_keycode();
+ Key code = k->get_keycode();
switch (code) {
- case KEY_UP: {
+ case Key::UP: {
_evaluate_input_text();
double last_value = get_value();
@@ -228,7 +228,7 @@ void EditorSpinSlider::_value_input_gui_input(const Ref<InputEvent> &p_event) {
value_input_dirty = true;
set_process_internal(true);
} break;
- case KEY_DOWN: {
+ case Key::DOWN: {
_evaluate_input_text();
double last_value = get_value();
@@ -242,6 +242,8 @@ void EditorSpinSlider::_value_input_gui_input(const Ref<InputEvent> &p_event) {
value_input_dirty = true;
set_process_internal(true);
} break;
+ default:
+ break;
}
}
}
@@ -407,7 +409,7 @@ void EditorSpinSlider::_draw_spin_slider() {
Vector2 scale = get_global_transform_with_canvas().get_scale();
grabber->set_scale(scale);
- grabber->set_size(Size2(0, 0));
+ grabber->reset_size();
grabber->set_position(get_global_position() + (grabber_rect.get_center() - grabber->get_size() * 0.5) * scale);
if (mousewheel_over_grabber) {
diff --git a/editor/editor_themes.cpp b/editor/editor_themes.cpp
index 06c39a957c..637394d136 100644
--- a/editor/editor_themes.cpp
+++ b/editor/editor_themes.cpp
@@ -36,7 +36,7 @@
#include "editor_scale.h"
#include "editor_settings.h"
-#include "modules/modules_enabled.gen.h"
+#include "modules/modules_enabled.gen.h" // For svg.
#ifdef MODULE_SVG_ENABLED
#include "modules/svg/image_loader_svg.h"
#endif
@@ -1207,7 +1207,7 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) {
theme->set_color("font_shadow_color", "RichTextLabel", Color(0, 0, 0, 0));
theme->set_constant("shadow_offset_x", "RichTextLabel", 1 * EDSCALE);
theme->set_constant("shadow_offset_y", "RichTextLabel", 1 * EDSCALE);
- theme->set_constant("shadow_as_outline", "RichTextLabel", 0 * EDSCALE);
+ theme->set_constant("shadow_outline_size", "RichTextLabel", 1 * EDSCALE);
theme->set_stylebox("focus", "RichTextLabel", make_empty_stylebox());
theme->set_stylebox("normal", "RichTextLabel", style_tree_bg);
@@ -1223,7 +1223,7 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) {
theme->set_color("font_shadow_color", "Label", Color(0, 0, 0, 0));
theme->set_constant("shadow_offset_x", "Label", 1 * EDSCALE);
theme->set_constant("shadow_offset_y", "Label", 1 * EDSCALE);
- theme->set_constant("shadow_as_outline", "Label", 0 * EDSCALE);
+ theme->set_constant("shadow_outline_size", "Label", 1 * EDSCALE);
theme->set_constant("line_spacing", "Label", 3 * EDSCALE);
// LinkButton
diff --git a/editor/editor_toaster.cpp b/editor/editor_toaster.cpp
index 9de0ea40fe..0d9a546b8e 100644
--- a/editor/editor_toaster.cpp
+++ b/editor/editor_toaster.cpp
@@ -158,11 +158,11 @@ void EditorToaster::_error_handler(void *p_self, const char *p_func, const char
if (p_editor_notify || (show_all_setting == 0 && in_dev) || show_all_setting == 1) {
String err_str;
if (p_errorexp && p_errorexp[0]) {
- err_str = p_errorexp;
+ err_str = String::utf8(p_errorexp);
} else {
- err_str = String(p_error);
+ err_str = String::utf8(p_error);
}
- String tooltip_str = String(p_file) + ":" + itos(p_line);
+ String tooltip_str = String::utf8(p_file) + ":" + itos(p_line);
if (!p_editor_notify) {
if (p_type == ERR_HANDLER_WARNING) {
@@ -172,10 +172,11 @@ void EditorToaster::_error_handler(void *p_self, const char *p_func, const char
}
}
- if (p_type == ERR_HANDLER_WARNING) {
- EditorToaster::get_singleton()->popup_str(err_str, SEVERITY_WARNING, tooltip_str);
+ Severity severity = (p_type == ERR_HANDLER_WARNING) ? SEVERITY_WARNING : SEVERITY_ERROR;
+ if (Thread::get_caller_id() != Thread::get_main_id()) {
+ EditorToaster::get_singleton()->call_deferred(SNAME("popup_str"), err_str, severity, tooltip_str);
} else {
- EditorToaster::get_singleton()->popup_str(err_str, SEVERITY_ERROR, tooltip_str);
+ EditorToaster::get_singleton()->popup_str(err_str, severity, tooltip_str);
}
}
}
diff --git a/editor/editor_vcs_interface.cpp b/editor/editor_vcs_interface.cpp
index eaa8f891ec..b4b740d7c6 100644
--- a/editor/editor_vcs_interface.cpp
+++ b/editor/editor_vcs_interface.cpp
@@ -166,3 +166,24 @@ EditorVCSInterface *EditorVCSInterface::get_singleton() {
void EditorVCSInterface::set_singleton(EditorVCSInterface *p_singleton) {
singleton = p_singleton;
}
+
+void EditorVCSInterface::create_vcs_metadata_files(VCSMetadata p_vcs_metadata_type, String &p_dir) {
+ if (p_vcs_metadata_type == VCSMetadata::GIT) {
+ FileAccess *f = FileAccess::open(p_dir.plus_file(".gitignore"), FileAccess::WRITE);
+ if (!f) {
+ ERR_FAIL_MSG(TTR("Couldn't create .gitignore in project path."));
+ } else {
+ f->store_line("# Godot 4+ specific ignores");
+ f->store_line(".godot/");
+ memdelete(f);
+ }
+ f = FileAccess::open(p_dir.plus_file(".gitattributes"), FileAccess::WRITE);
+ if (!f) {
+ ERR_FAIL_MSG(TTR("Couldn't create .gitattributes in project path."));
+ } else {
+ f->store_line("# Normalize EOL for all files that Git considers text files.");
+ f->store_line("* text=auto eol=lf");
+ memdelete(f);
+ }
+ }
+}
diff --git a/editor/editor_vcs_interface.h b/editor/editor_vcs_interface.h
index 52ab6d68ee..1a2adeb148 100644
--- a/editor/editor_vcs_interface.h
+++ b/editor/editor_vcs_interface.h
@@ -61,6 +61,12 @@ public:
static EditorVCSInterface *get_singleton();
static void set_singleton(EditorVCSInterface *p_singleton);
+ enum class VCSMetadata {
+ NONE,
+ GIT,
+ };
+ static void create_vcs_metadata_files(VCSMetadata p_vcs_metadata_type, String &p_dir);
+
bool is_addon_ready();
// Proxy functions to the editor for use
diff --git a/editor/editor_zoom_widget.cpp b/editor/editor_zoom_widget.cpp
index 420aeb03fe..a998ec7e5b 100644
--- a/editor/editor_zoom_widget.cpp
+++ b/editor/editor_zoom_widget.cpp
@@ -51,7 +51,7 @@ void EditorZoomWidget::_update_zoom_label() {
}
void EditorZoomWidget::_button_zoom_minus() {
- set_zoom_by_increments(-6, Input::get_singleton()->is_key_pressed(KEY_ALT));
+ set_zoom_by_increments(-6, Input::get_singleton()->is_key_pressed(Key::ALT));
emit_signal(SNAME("zoom_changed"), zoom);
}
@@ -61,7 +61,7 @@ void EditorZoomWidget::_button_zoom_reset() {
}
void EditorZoomWidget::_button_zoom_plus() {
- set_zoom_by_increments(6, Input::get_singleton()->is_key_pressed(KEY_ALT));
+ set_zoom_by_increments(6, Input::get_singleton()->is_key_pressed(Key::ALT));
emit_signal(SNAME("zoom_changed"), zoom);
}
@@ -169,7 +169,7 @@ EditorZoomWidget::EditorZoomWidget() {
zoom_minus->set_flat(true);
add_child(zoom_minus);
zoom_minus->connect("pressed", callable_mp(this, &EditorZoomWidget::_button_zoom_minus));
- zoom_minus->set_shortcut(ED_SHORTCUT("canvas_item_editor/zoom_minus", TTR("Zoom Out"), KEY_MASK_CMD | KEY_MINUS));
+ zoom_minus->set_shortcut(ED_SHORTCUT("canvas_item_editor/zoom_minus", TTR("Zoom Out"), KeyModifierMask::CMD | Key::MINUS));
zoom_minus->set_shortcut_context(this);
zoom_minus->set_focus_mode(FOCUS_NONE);
@@ -180,7 +180,7 @@ EditorZoomWidget::EditorZoomWidget() {
zoom_reset->add_theme_color_override("font_outline_color", Color(0, 0, 0));
zoom_reset->add_theme_color_override("font_color", Color(1, 1, 1));
zoom_reset->connect("pressed", callable_mp(this, &EditorZoomWidget::_button_zoom_reset));
- zoom_reset->set_shortcut(ED_SHORTCUT("canvas_item_editor/zoom_reset", TTR("Zoom Reset"), KEY_MASK_CMD | KEY_0));
+ zoom_reset->set_shortcut(ED_SHORTCUT("canvas_item_editor/zoom_reset", TTR("Zoom Reset"), KeyModifierMask::CMD | Key::KEY_0));
zoom_reset->set_shortcut_context(this);
zoom_reset->set_focus_mode(FOCUS_NONE);
zoom_reset->set_text_align(Button::TextAlign::ALIGN_CENTER);
@@ -191,7 +191,7 @@ EditorZoomWidget::EditorZoomWidget() {
zoom_plus->set_flat(true);
add_child(zoom_plus);
zoom_plus->connect("pressed", callable_mp(this, &EditorZoomWidget::_button_zoom_plus));
- zoom_plus->set_shortcut(ED_SHORTCUT("canvas_item_editor/zoom_plus", TTR("Zoom In"), KEY_MASK_CMD | KEY_EQUAL)); // Usually direct access key for PLUS
+ zoom_plus->set_shortcut(ED_SHORTCUT("canvas_item_editor/zoom_plus", TTR("Zoom In"), KeyModifierMask::CMD | Key::EQUAL)); // Usually direct access key for PLUS
zoom_plus->set_shortcut_context(this);
zoom_plus->set_focus_mode(FOCUS_NONE);
diff --git a/editor/filesystem_dock.cpp b/editor/filesystem_dock.cpp
index f2a3aa3b44..f40a048b75 100644
--- a/editor/filesystem_dock.cpp
+++ b/editor/filesystem_dock.cpp
@@ -197,7 +197,7 @@ Vector<String> FileSystemDock::_compute_uncollapsed_paths() {
child = child->get_next();
}
}
- needs_check.remove(0);
+ needs_check.remove_at(0);
}
}
}
@@ -1093,7 +1093,7 @@ void FileSystemDock::_push_to_history() {
history_pos++;
if (history.size() > history_max_size) {
- history.remove(0);
+ history.remove_at(0);
history_pos = history_max_size - 1;
}
}
@@ -1670,7 +1670,7 @@ Vector<String> FileSystemDock::_remove_self_included_paths(Vector<String> select
String last_path = "";
for (int i = 0; i < selected_strings.size(); i++) {
if (last_path != "" && selected_strings[i].begins_with(last_path)) {
- selected_strings.remove(i);
+ selected_strings.remove_at(i);
i--;
}
if (selected_strings[i].ends_with("/")) {
@@ -1704,7 +1704,7 @@ void FileSystemDock::_tree_rmb_option(int p_option) {
child = child->get_next();
}
- needs_check.remove(0);
+ needs_check.remove_at(0);
}
}
} break;
@@ -2229,7 +2229,7 @@ void FileSystemDock::drop_data_fw(const Point2 &p_point, const Variant &p_data,
drop_position -= offset;
to_remove.sort();
for (int i = 0; i < to_remove.size(); i++) {
- dirs.remove(to_remove[i] - i);
+ dirs.remove_at(to_remove[i] - i);
}
// Re-add them at the right position.
@@ -2273,7 +2273,7 @@ void FileSystemDock::drop_data_fw(const Point2 &p_point, const Variant &p_data,
}
}
if (!to_move.is_empty()) {
- if (Input::get_singleton()->is_key_pressed(KEY_CTRL)) {
+ if (Input::get_singleton()->is_key_pressed(Key::CTRL)) {
for (int i = 0; i < to_move.size(); i++) {
String new_path;
String new_path_base;
@@ -2507,7 +2507,7 @@ void FileSystemDock::_tree_rmb_select(const Vector2 &p_pos) {
// Popup.
if (!paths.is_empty()) {
- tree_popup->set_size(Size2(1, 1));
+ tree_popup->reset_size();
_file_and_folders_fill_popup(tree_popup, paths);
tree_popup->set_position(tree->get_screen_position() + p_pos);
tree_popup->popup();
@@ -2518,7 +2518,7 @@ void FileSystemDock::_tree_rmb_empty(const Vector2 &p_pos) {
// Right click is pressed in the empty space of the tree.
path = "res://";
tree_popup->clear();
- tree_popup->set_size(Size2(1, 1));
+ tree_popup->reset_size();
tree_popup->add_icon_item(get_theme_icon(SNAME("Folder"), SNAME("EditorIcons")), TTR("New Folder..."), FILE_NEW_FOLDER);
tree_popup->add_icon_item(get_theme_icon(SNAME("PackedScene"), SNAME("EditorIcons")), TTR("New Scene..."), FILE_NEW_SCENE);
tree_popup->add_icon_item(get_theme_icon(SNAME("Script"), SNAME("EditorIcons")), TTR("New Script..."), FILE_NEW_SCRIPT);
@@ -2549,7 +2549,7 @@ void FileSystemDock::_file_list_rmb_select(int p_item, const Vector2 &p_pos) {
// Popup.
if (!paths.is_empty()) {
file_list_popup->clear();
- file_list_popup->set_size(Size2(1, 1));
+ file_list_popup->reset_size();
_file_and_folders_fill_popup(file_list_popup, paths, searched_string.length() == 0);
file_list_popup->set_position(files->get_global_position() + p_pos);
file_list_popup->popup();
@@ -2563,7 +2563,7 @@ void FileSystemDock::_file_list_rmb_pressed(const Vector2 &p_pos) {
}
file_list_popup->clear();
- file_list_popup->set_size(Size2(1, 1));
+ file_list_popup->reset_size();
file_list_popup->add_icon_item(get_theme_icon(SNAME("Folder"), SNAME("EditorIcons")), TTR("New Folder..."), FILE_NEW_FOLDER);
file_list_popup->add_icon_item(get_theme_icon(SNAME("PackedScene"), SNAME("EditorIcons")), TTR("New Scene..."), FILE_NEW_SCENE);
@@ -2794,11 +2794,12 @@ FileSystemDock::FileSystemDock(EditorNode *p_editor) {
editor = p_editor;
path = "res://";
- // `KEY_MASK_CMD | KEY_C` conflicts with other editor shortcuts.
- ED_SHORTCUT("filesystem_dock/copy_path", TTR("Copy Path"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_C);
- ED_SHORTCUT("filesystem_dock/duplicate", TTR("Duplicate..."), KEY_MASK_CMD | KEY_D);
- ED_SHORTCUT("filesystem_dock/delete", TTR("Delete"), KEY_DELETE);
- ED_SHORTCUT("filesystem_dock/rename", TTR("Rename..."), KEY_F2);
+ // `KeyModifierMask::CMD | Key::C` conflicts with other editor shortcuts.
+ ED_SHORTCUT("filesystem_dock/copy_path", TTR("Copy Path"), KeyModifierMask::CMD | KeyModifierMask::SHIFT | Key::C);
+ ED_SHORTCUT("filesystem_dock/duplicate", TTR("Duplicate..."), KeyModifierMask::CMD | Key::D);
+ ED_SHORTCUT("filesystem_dock/delete", TTR("Delete"), Key::KEY_DELETE);
+ ED_SHORTCUT("filesystem_dock/rename", TTR("Rename..."), Key::F2);
+ ED_SHORTCUT_OVERRIDE("filesystem_dock/rename", "macos", Key::ENTER);
VBoxContainer *top_vbc = memnew(VBoxContainer);
add_child(top_vbc);
diff --git a/editor/icons/GradientTexture.svg b/editor/icons/GradientTexture1D.svg
index fa03e69805..fa03e69805 100644
--- a/editor/icons/GradientTexture.svg
+++ b/editor/icons/GradientTexture1D.svg
diff --git a/editor/icons/InterpCubic.svg b/editor/icons/InterpCubic.svg
index ad2ed51ee1..b542986ea6 100644
--- a/editor/icons/InterpCubic.svg
+++ b/editor/icons/InterpCubic.svg
@@ -1 +1 @@
-<svg height="8" viewBox="0 0 16 8" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2 1050.4c3 0 3-4 6-4s3 4 6 4" fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-width="2" transform="translate(0 -1044.4)"/></svg>
+<svg height="8" viewBox="0 0 16 8" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2 1050.4c5 0 3-4 6-4s1 4 6 4" fill="none" stroke="#5fb2ff" stroke-linecap="round" stroke-width="2" transform="translate(0 -1044.4)"/></svg>
diff --git a/editor/icons/InterpLinear.svg b/editor/icons/InterpLinear.svg
index 241a82fc8f..966ddfdc31 100644
--- a/editor/icons/InterpLinear.svg
+++ b/editor/icons/InterpLinear.svg
@@ -1 +1 @@
-<svg height="8" viewBox="0 0 16 8" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2 1050.4 6-4 6 4" fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" transform="translate(0 -1044.4)"/></svg>
+<svg height="8" viewBox="0 0 16 8" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2 1050.4 6-4 6 4" fill="none" stroke="#ffca5f" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" transform="translate(0 -1044.4)"/></svg>
diff --git a/editor/icons/InterpWrapClamp.svg b/editor/icons/InterpWrapClamp.svg
index 6ba8e78500..b589542019 100644
--- a/editor/icons/InterpWrapClamp.svg
+++ b/editor/icons/InterpWrapClamp.svg
@@ -1 +1 @@
-<svg height="8" viewBox="0 0 16 8" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 1v6h2v-2.9863-3.0137zm2 3.0137a1.0001 1.0001 0 0 0 .29297.69336l2 2a1 1 0 0 0 1.4141 0 1 1 0 0 0 0-1.4141l-.29297-.29297h3.1719l-.29297.29297a1 1 0 0 0 0 1.4141 1 1 0 0 0 1.4141 0l2-2a1.0001 1.0001 0 0 0 .29297-.72266 1.0001 1.0001 0 0 0 -.29297-.69141l-2-2a1 1 0 0 0 -.7207-.29102 1 1 0 0 0 -.69336.29102 1 1 0 0 0 0 1.4141l.29297.29297h-3.1719l.29297-.29297a1 1 0 0 0 0-1.4141 1 1 0 0 0 -.7207-.29102 1 1 0 0 0 -.69336.29102l-2 2a1.0001 1.0001 0 0 0 -.29297.7207zm10-.029297v3.0156h2v-6h-2z" fill="#e0e0e0"/></svg>
+<svg height="8" viewBox="0 0 16 8" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 1v6h2v-2.9863-3.0137zm2 3.0137a1.0001 1.0001 0 0 0 .29297.69336l2 2a1 1 0 0 0 1.4141 0 1 1 0 0 0 0-1.4141l-.29297-.29297h3.1719l-.29297.29297a1 1 0 0 0 0 1.4141 1 1 0 0 0 1.4141 0l2-2a1.0001 1.0001 0 0 0 .29297-.72266 1.0001 1.0001 0 0 0 -.29297-.69141l-2-2a1 1 0 0 0 -.7207-.29102 1 1 0 0 0 -.69336.29102 1 1 0 0 0 0 1.4141l.29297.29297h-3.1719l.29297-.29297a1 1 0 0 0 0-1.4141 1 1 0 0 0 -.7207-.29102 1 1 0 0 0 -.69336.29102l-2 2a1.0001 1.0001 0 0 0 -.29297.7207zm10-.029297v3.0156h2v-6h-2z" fill="#fc7f7f"/></svg>
diff --git a/editor/icons/InterpWrapLoop.svg b/editor/icons/InterpWrapLoop.svg
index 57670f97ce..4faf7805f8 100644
--- a/editor/icons/InterpWrapLoop.svg
+++ b/editor/icons/InterpWrapLoop.svg
@@ -1 +1 @@
-<svg height="8" viewBox="0 0 16 8" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m9 0-3 2 3 2v-1h3a1 1 0 0 1 1 1 1 1 0 0 1 -1 1v2a3 3 0 0 0 3-3 3 3 0 0 0 -3-3h-3zm-5 1a3 3 0 0 0 -3 3 3 3 0 0 0 3 3h3v1l3-2-3-2v1h-3a1 1 0 0 1 -1-1 1 1 0 0 1 1-1z" fill="#e0e0e0"/></svg>
+<svg height="8" viewBox="0 0 16 8" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m9 0-3 2 3 2v-1h3a1 1 0 0 1 1 1 1 1 0 0 1 -1 1v2a3 3 0 0 0 3-3 3 3 0 0 0 -3-3h-3zm-5 1a3 3 0 0 0 -3 3 3 3 0 0 0 3 3h3v1l3-2-3-2v1h-3a1 1 0 0 1 -1-1 1 1 0 0 1 1-1z" fill="#c38ef1"/></svg>
diff --git a/editor/icons/KeyEasedSelected.svg b/editor/icons/KeyEasedSelected.svg
new file mode 100644
index 0000000000..c06d94c553
--- /dev/null
+++ b/editor/icons/KeyEasedSelected.svg
@@ -0,0 +1 @@
+<svg height="10" viewBox="0 0 10 10" width="10" xmlns="http://www.w3.org/2000/svg"><rect fill="#5fb2ff" height="9.999999" rx=".948002" stroke-width="1.2427" width="9.999999" x=".000001" y=".000035"/><rect fill="#003e7a" height="5.628136" rx=".533549" stroke-width=".699406" transform="matrix(.99989481 .01450427 .01450427 .99989481 0 0)" width="5.628136" x="2.115027" y="2.114924"/></svg>
diff --git a/editor/icons/KeyValueEased.svg b/editor/icons/KeyValueEased.svg
new file mode 100644
index 0000000000..4e4a33c006
--- /dev/null
+++ b/editor/icons/KeyValueEased.svg
@@ -0,0 +1 @@
+<svg height="10" viewBox="0 0 10 10" width="10" xmlns="http://www.w3.org/2000/svg"><rect fill="#e0e0e0" height="8.000001" rx="1.000032" ry="1.00003" stroke-width="1.3109" transform="rotate(-90)" width="8.000016" x="-9.000016" y=".999999"/></svg>
diff --git a/editor/icons/MirrorX.svg b/editor/icons/MirrorX.svg
new file mode 100644
index 0000000000..fa668986ac
--- /dev/null
+++ b/editor/icons/MirrorX.svg
@@ -0,0 +1 @@
+<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="none" stroke="#e0e0e0" stroke-opacity=".99608" stroke-width="2" transform="translate(0 -1036.4)"><path d="m4 1042.4-2 2 2 2" stroke-linecap="round" stroke-linejoin="round"/><path d="m2 1044.4h11"/><path d="m12 1042.4 2 2-2 2" stroke-linecap="round" stroke-linejoin="round"/></g></svg>
diff --git a/editor/icons/MirrorY.svg b/editor/icons/MirrorY.svg
new file mode 100644
index 0000000000..bb4e4d3543
--- /dev/null
+++ b/editor/icons/MirrorY.svg
@@ -0,0 +1 @@
+<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m11.012 1048.4a1.0001 1.0001 0 0 0 -1.7168-.6973l-.29297.293v-7.1719l.29297.293a1.0001 1.0001 0 0 0 1.7148-.7266 1.0001 1.0001 0 0 0 -.30078-.6875l-2-2a1.0001 1.0001 0 0 0 -1.4141 0l-2 2a1.0001 1.0001 0 1 0 1.4141 1.4141l.29297-.293v7.1719l-.29297-.293a1.0001 1.0001 0 1 0 -1.4141 1.4141l2 2a1.0001 1.0001 0 0 0 1.4141 0l2-2a1.0001 1.0001 0 0 0 .30273-.7168z" fill="#e0e0e0" fill-opacity=".99608" transform="translate(0 -1036.4)"/></svg>
diff --git a/editor/icons/PingPongLoop.svg b/editor/icons/PingPongLoop.svg
new file mode 100644
index 0000000000..c44f889b49
--- /dev/null
+++ b/editor/icons/PingPongLoop.svg
@@ -0,0 +1 @@
+<svg enable-background="new 0 0 16 16" height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0" fill-opacity=".9961"><path d="m10 7h-4v-2l-4 3 4 3v-2h4v2l4-3-4-3z"/><path d="m0 1v14h2v-7-7z"/><path d="m14 1v7 7h2v-14z"/></g></svg>
diff --git a/editor/icons/ReverseGradient.svg b/editor/icons/ReverseGradient.svg
new file mode 100644
index 0000000000..12f80d12dd
--- /dev/null
+++ b/editor/icons/ReverseGradient.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><svg version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><linearGradient id="b" x1=".26458" x2="3.9688" y1=".79375" y2=".79375" gradientTransform="scale(3.7795)" gradientUnits="userSpaceOnUse"><stop stop-color="#ccc" offset="0"/><stop stop-color="#ccc" stop-opacity="0" offset="1"/></linearGradient><linearGradient id="a" x1=".26458" x2="3.9688" y1="3.4396" y2="3.4396" gradientTransform="matrix(3.7795 0 0 3.7795 -16 -1.1865e-7)" gradientUnits="userSpaceOnUse"><stop stop-color="#ccc" offset="0"/><stop stop-color="#ccc" stop-opacity="0" offset="1"/></linearGradient></defs><g><rect x="1" y="1" width="14" height="4" ry="1" fill="url(#b)"/><rect transform="scale(-1,1)" x="-15" y="11" width="14" height="4" ry="1" fill="url(#a)" stroke-linecap="round" stroke-linejoin="round" stroke-width="3.7795"/><path d="m6 6 2 4 2-4z" fill="#ccc"/></g></svg>
diff --git a/editor/icons/RotateLeft.svg b/editor/icons/RotateLeft.svg
new file mode 100644
index 0000000000..1200df1dde
--- /dev/null
+++ b/editor/icons/RotateLeft.svg
@@ -0,0 +1 @@
+<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0" fill-opacity=".99608" transform="translate(0 -1036.4)"><path d="m9 2a6 6 0 0 0 -6 6h2a4 4 0 0 1 4-4 4 4 0 0 1 4 4 4 4 0 0 1 -4 4v2a6 6 0 0 0 6-6 6 6 0 0 0 -6-6z" transform="translate(0 1036.4)"/><path d="m4.118 1048.3-1.6771-.9683-1.6771-.9682 1.6771-.9683 1.6771-.9682-.0000001 1.9365z" transform="matrix(0 -1.1926 1.5492 0 -1617 1049.3)"/></g></svg>
diff --git a/editor/icons/RotateRight.svg b/editor/icons/RotateRight.svg
new file mode 100644
index 0000000000..d69e6a7705
--- /dev/null
+++ b/editor/icons/RotateRight.svg
@@ -0,0 +1 @@
+<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0" fill-opacity=".99608" transform="matrix(-1 0 0 1 16.026308 -1036.4)"><path d="m9 2a6 6 0 0 0 -6 6h2a4 4 0 0 1 4-4 4 4 0 0 1 4 4 4 4 0 0 1 -4 4v2a6 6 0 0 0 6-6 6 6 0 0 0 -6-6z" transform="translate(0 1036.4)"/><path d="m4.118 1048.3-1.6771-.9683-1.6771-.9682 1.6771-.9683 1.6771-.9682-.0000001 1.9365z" transform="matrix(0 -1.1926 1.5492 0 -1617 1049.3)"/></g></svg>
diff --git a/editor/icons/ShapeCast2D.svg b/editor/icons/ShapeCast2D.svg
new file mode 100644
index 0000000000..dcdba92f45
--- /dev/null
+++ b/editor/icons/ShapeCast2D.svg
@@ -0,0 +1 @@
+<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#a5b7f3"><path d="m7 1v9h-3l4 5 4-5h-3v-9z"/><circle cx="7.990566" cy="4.8202" r="4.009434"/></g></svg>
diff --git a/editor/icons/TrackCapture.svg b/editor/icons/TrackCapture.svg
index aaa4a20e4a..b3d5f09eff 100644
--- a/editor/icons/TrackCapture.svg
+++ b/editor/icons/TrackCapture.svg
@@ -1 +1 @@
-<svg height="8" viewBox="0 0 16 8" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0"><path d="m2.1665128.99764963c-.422625 0-.763672.34104737-.763672.76367187v4.5742187c0 .4226242.341047.7617192.763672.7617192h4.472656c.422625 0 .763672-.339095.763672-.7617192v-.9882812h-3.300781c-.1662 0-.298828-.3390943-.298828-.7617188v-1.2246094c0-.4226244.132628-.7636718.298828-.7636718h3.300781v-.8359375c0-.4226245-.341047-.76367187-.763672-.76367187z"/><path d="m9.1827441 4.7953408c.5166221-1.0415625 1.0955249-2.2117429 1.2864509-2.600401l.347137-.7066511.679654.00665.679654.00665.956945 2.3125c.526319 1.271875 1.007254 2.4334375 1.068744 2.5812497l.1118.26875h-.597215-.597214l-.332849-.6437497-.332849-.64375h-1.133826-1.133825l-.3786749.6561133-.3786747.6561134-.5922856.000137-.592285.000136zm3.1779349-.369483c.0042-.00346-.233487-.4884588-.528245-1.0777779l-.535922-1.0714891-.03691.0875c-.0203.048125-.183516.425-.362699.8375-.179182.4125-.355738.85125-.392346.975-.03661.12375-.07127.2390723-.07703.2562715-.0083.024853.188215.027989.957503.015278.532385-.0088.971429-.018823.975651-.022283z" stroke="#e0e0e0" stroke-width=".803"/></g></svg>
+<svg height="8" viewBox="0 0 16 8" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e1da5b"><path d="m2.1665128.99764963c-.422625 0-.763672.34104737-.763672.76367187v4.5742187c0 .4226242.341047.7617192.763672.7617192h4.472656c.422625 0 .763672-.339095.763672-.7617192v-.9882812h-3.300781c-.1662 0-.298828-.3390943-.298828-.7617188v-1.2246094c0-.4226244.132628-.7636718.298828-.7636718h3.300781v-.8359375c0-.4226245-.341047-.76367187-.763672-.76367187z"/><path d="m9.1827441 4.7953408c.5166221-1.0415625 1.0955249-2.2117429 1.2864509-2.600401l.347137-.7066511.679654.00665.679654.00665.956945 2.3125c.526319 1.271875 1.007254 2.4334375 1.068744 2.5812497l.1118.26875h-.597215-.597214l-.332849-.6437497-.332849-.64375h-1.133826-1.133825l-.3786749.6561133-.3786747.6561134-.5922856.000137-.592285.000136zm3.1779349-.369483c.0042-.00346-.233487-.4884588-.528245-1.0777779l-.535922-1.0714891-.03691.0875c-.0203.048125-.183516.425-.362699.8375-.179182.4125-.355738.85125-.392346.975-.03661.12375-.07127.2390723-.07703.2562715-.0083.024853.188215.027989.957503.015278.532385-.0088.971429-.018823.975651-.022283z" stroke="#e1da5b" stroke-width=".803"/></g></svg>
diff --git a/editor/icons/TrackDiscrete.svg b/editor/icons/TrackDiscrete.svg
index d1df4b1667..6498742233 100644
--- a/editor/icons/TrackDiscrete.svg
+++ b/editor/icons/TrackDiscrete.svg
@@ -1 +1 @@
-<svg height="8" viewBox="0 0 16 8" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m14 1a1 1 0 0 0 -1 1 1 1 0 0 0 1 1 1 1 0 0 0 1-1 1 1 0 0 0 -1-1zm-6 2a1 1 0 0 0 -1 1 1 1 0 0 0 1 1 1 1 0 0 0 1-1 1 1 0 0 0 -1-1zm-6 2a1 1 0 0 0 -1 1 1 1 0 0 0 1 1 1 1 0 0 0 1-1 1 1 0 0 0 -1-1z" fill="#e0e0e0"/></svg>
+<svg height="8" viewBox="0 0 16 8" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m14 1a1 1 0 0 0 -1 1 1 1 0 0 0 1 1 1 1 0 0 0 1-1 1 1 0 0 0 -1-1zm-6 2a1 1 0 0 0 -1 1 1 1 0 0 0 1 1 1 1 0 0 0 1-1 1 1 0 0 0 -1-1zm-6 2a1 1 0 0 0 -1 1 1 1 0 0 0 1 1 1 1 0 0 0 1-1 1 1 0 0 0 -1-1z" fill="#b9ec41"/></svg>
diff --git a/editor/icons/TrackTrigger.svg b/editor/icons/TrackTrigger.svg
index 6e46a74121..c403fba59a 100644
--- a/editor/icons/TrackTrigger.svg
+++ b/editor/icons/TrackTrigger.svg
@@ -1 +1 @@
-<svg height="8" viewBox="0 0 16 8" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 1v2h2v4h2v-4h2v-2zm13 0a1 1 0 0 0 -1 1 1 1 0 0 0 1 1 1 1 0 0 0 1-1 1 1 0 0 0 -1-1zm-3 2a1 1 0 0 0 -1 1 1 1 0 0 0 1 1 1 1 0 0 0 1-1 1 1 0 0 0 -1-1zm-3 2a1 1 0 0 0 -1 1 1 1 0 0 0 1 1 1 1 0 0 0 1-1 1 1 0 0 0 -1-1z" fill="#e0e0e0"/></svg>
+<svg height="8" viewBox="0 0 16 8" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 1v2h2v4h2v-4h2v-2zm13 0a1 1 0 0 0 -1 1 1 1 0 0 0 1 1 1 1 0 0 0 1-1 1 1 0 0 0 -1-1zm-3 2a1 1 0 0 0 -1 1 1 1 0 0 0 1 1 1 1 0 0 0 1-1 1 1 0 0 0 -1-1zm-3 2a1 1 0 0 0 -1 1 1 1 0 0 0 1 1 1 1 0 0 0 1-1 1 1 0 0 0 -1-1z" fill="#f68f45"/></svg>
diff --git a/editor/import/collada.cpp b/editor/import/collada.cpp
index 19b4943e6d..c34379f1ec 100644
--- a/editor/import/collada.cpp
+++ b/editor/import/collada.cpp
@@ -2024,7 +2024,7 @@ void Collada::_create_skeletons(Collada::Node **p_node, NodeSkeleton *p_skeleton
bool Collada::_remove_node(Node *p_parent, Node *p_node) {
for (int i = 0; i < p_parent->children.size(); i++) {
if (p_parent->children[i] == p_node) {
- p_parent->children.remove(i);
+ p_parent->children.remove_at(i);
return true;
}
if (_remove_node(p_parent->children[i], p_node)) {
@@ -2038,7 +2038,7 @@ bool Collada::_remove_node(Node *p_parent, Node *p_node) {
void Collada::_remove_node(VisualScene *p_vscene, Node *p_node) {
for (int i = 0; i < p_vscene->root_nodes.size(); i++) {
if (p_vscene->root_nodes[i] == p_node) {
- p_vscene->root_nodes.remove(i);
+ p_vscene->root_nodes.remove_at(i);
return;
}
if (_remove_node(p_vscene->root_nodes[i], p_node)) {
@@ -2271,7 +2271,7 @@ bool Collada::_move_geometry_to_skeletons(VisualScene *p_vscene, Node *p_node, L
for (int i = 0; i < p_node->children.size(); i++) {
if (_move_geometry_to_skeletons(p_vscene, p_node->children[i], p_mgeom)) {
- p_node->children.remove(i);
+ p_node->children.remove_at(i);
i--;
}
}
@@ -2325,7 +2325,7 @@ void Collada::_optimize() {
for (int i = 0; i < vs.root_nodes.size(); i++) {
List<Node *> mgeom;
if (_move_geometry_to_skeletons(&vs, vs.root_nodes[i], &mgeom)) {
- vs.root_nodes.remove(i);
+ vs.root_nodes.remove_at(i);
i--;
}
diff --git a/editor/import/dynamicfont_import_settings.cpp b/editor/import/dynamicfont_import_settings.cpp
index 474c9d5296..45937e20bc 100644
--- a/editor/import/dynamicfont_import_settings.cpp
+++ b/editor/import/dynamicfont_import_settings.cpp
@@ -1160,7 +1160,7 @@ void DynamicFontImportSettings::_range_update(int32_t p_start, int32_t p_end) {
void DynamicFontImportSettings::_lang_add() {
menu_langs->set_position(lang_list->get_screen_transform().xform(lang_list->get_local_mouse_position()));
- menu_langs->set_size(Vector2(1, 1));
+ menu_langs->reset_size();
menu_langs->popup();
}
@@ -1187,7 +1187,7 @@ void DynamicFontImportSettings::_lang_remove(Object *p_item, int p_column, int p
void DynamicFontImportSettings::_script_add() {
menu_scripts->set_position(script_list->get_screen_transform().xform(script_list->get_local_mouse_position()));
- menu_scripts->set_size(Vector2(1, 1));
+ menu_scripts->reset_size();
menu_scripts->popup();
}
diff --git a/editor/import/editor_import_collada.cpp b/editor/import/editor_import_collada.cpp
index f9aa550e7d..076c0cc62b 100644
--- a/editor/import/editor_import_collada.cpp
+++ b/editor/import/editor_import_collada.cpp
@@ -314,7 +314,7 @@ Error ColladaImport::_create_scene(Collada::Node *p_node, Node3D *p_parent) {
xf = collada.fix_transform(xf) * p_node->post_transform;
node->set_transform(xf);
- p_parent->add_child(node);
+ p_parent->add_child(node, true);
node->set_owner(scene);
if (p_node->empty_draw_type != "") {
@@ -1804,7 +1804,7 @@ Node *EditorSceneFormatImporterCollada::import_scene(const String &p_path, uint3
ap->add_animation(name, state.animations[i]);
}
- state.scene->add_child(ap);
+ state.scene->add_child(ap, true);
ap->set_owner(state.scene);
}
diff --git a/editor/import/editor_import_plugin.cpp b/editor/import/editor_import_plugin.cpp
index d219f6e325..1a002569c5 100644
--- a/editor/import/editor_import_plugin.cpp
+++ b/editor/import/editor_import_plugin.cpp
@@ -57,6 +57,7 @@ void EditorImportPlugin::get_recognized_extensions(List<String> *p_extensions) c
for (int i = 0; i < extensions.size(); i++) {
p_extensions->push_back(extensions[i]);
}
+ return;
}
ERR_FAIL_MSG("Unimplemented _get_recognized_extensions in add-on.");
}
@@ -109,12 +110,12 @@ int EditorImportPlugin::get_import_order() const {
ERR_FAIL_V_MSG(-1, "Unimplemented _get_import_order in add-on.");
}
-void EditorImportPlugin::get_import_options(List<ResourceImporter::ImportOption> *r_options, int p_preset) const {
+void EditorImportPlugin::get_import_options(const String &p_path, List<ResourceImporter::ImportOption> *r_options, int p_preset) const {
Array needed;
needed.push_back("name");
needed.push_back("default_value");
Array options;
- if (GDVIRTUAL_CALL(_get_import_options, p_preset, options)) {
+ if (GDVIRTUAL_CALL(_get_import_options, p_path, p_preset, options)) {
for (int i = 0; i < options.size(); i++) {
Dictionary d = options[i];
ERR_FAIL_COND(!d.has_all(needed));
@@ -139,12 +140,13 @@ void EditorImportPlugin::get_import_options(List<ResourceImporter::ImportOption>
ImportOption option(PropertyInfo(default_value.get_type(), name, hint, hint_string, usage), default_value);
r_options->push_back(option);
}
+ return;
}
ERR_FAIL_MSG("Unimplemented _get_import_options in add-on.");
}
-bool EditorImportPlugin::get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const {
+bool EditorImportPlugin::get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const {
Dictionary d;
Map<StringName, Variant>::Element *E = p_options.front();
while (E) {
@@ -152,7 +154,7 @@ bool EditorImportPlugin::get_option_visibility(const String &p_option, const Map
E = E->next();
}
bool visible;
- if (GDVIRTUAL_CALL(_get_option_visibility, p_option, d, visible)) {
+ if (GDVIRTUAL_CALL(_get_option_visibility, p_path, p_option, d, visible)) {
return visible;
}
@@ -190,11 +192,11 @@ void EditorImportPlugin::_bind_methods() {
GDVIRTUAL_BIND(_get_preset_count)
GDVIRTUAL_BIND(_get_preset_name, "preset_index")
GDVIRTUAL_BIND(_get_recognized_extensions)
- GDVIRTUAL_BIND(_get_import_options, "preset_index")
+ GDVIRTUAL_BIND(_get_import_options, "path", "preset_index")
GDVIRTUAL_BIND(_get_save_extension)
GDVIRTUAL_BIND(_get_resource_type)
GDVIRTUAL_BIND(_get_priority)
GDVIRTUAL_BIND(_get_import_order)
- GDVIRTUAL_BIND(_get_option_visibility, "option_name", "options")
+ GDVIRTUAL_BIND(_get_option_visibility, "path", "option_name", "options")
GDVIRTUAL_BIND(_import, "source_file", "save_path", "options", "platform_variants", "gen_files");
}
diff --git a/editor/import/editor_import_plugin.h b/editor/import/editor_import_plugin.h
index 49c959ab44..6c5f4f6005 100644
--- a/editor/import/editor_import_plugin.h
+++ b/editor/import/editor_import_plugin.h
@@ -44,12 +44,12 @@ protected:
GDVIRTUAL0RC(int, _get_preset_count)
GDVIRTUAL1RC(String, _get_preset_name, int)
GDVIRTUAL0RC(Vector<String>, _get_recognized_extensions)
- GDVIRTUAL1RC(Array, _get_import_options, int)
+ GDVIRTUAL2RC(Array, _get_import_options, String, int)
GDVIRTUAL0RC(String, _get_save_extension)
GDVIRTUAL0RC(String, _get_resource_type)
GDVIRTUAL0RC(float, _get_priority)
GDVIRTUAL0RC(int, _get_import_order)
- GDVIRTUAL2RC(bool, _get_option_visibility, StringName, Dictionary)
+ GDVIRTUAL3RC(bool, _get_option_visibility, String, StringName, Dictionary)
GDVIRTUAL5RC(int, _import, String, String, Dictionary, Array, Array)
public:
@@ -63,8 +63,8 @@ public:
virtual String get_resource_type() const override;
virtual float get_priority() const override;
virtual int get_import_order() const override;
- virtual void get_import_options(List<ImportOption> *r_options, int p_preset) const override;
- virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const override;
+ virtual void get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset) const override;
+ virtual bool get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const override;
virtual Error import(const String &p_source_file, const String &p_save_path, const Map<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files, Variant *r_metadata = nullptr) override;
};
diff --git a/editor/import/resource_importer_bitmask.cpp b/editor/import/resource_importer_bitmask.cpp
index 7fd9230284..c43052593d 100644
--- a/editor/import/resource_importer_bitmask.cpp
+++ b/editor/import/resource_importer_bitmask.cpp
@@ -57,7 +57,7 @@ String ResourceImporterBitMap::get_resource_type() const {
return "BitMap";
}
-bool ResourceImporterBitMap::get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const {
+bool ResourceImporterBitMap::get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const {
return true;
}
@@ -69,7 +69,7 @@ String ResourceImporterBitMap::get_preset_name(int p_idx) const {
return String();
}
-void ResourceImporterBitMap::get_import_options(List<ImportOption> *r_options, int p_preset) const {
+void ResourceImporterBitMap::get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset) const {
r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "create_from", PROPERTY_HINT_ENUM, "Black & White,Alpha"), 0));
r_options->push_back(ImportOption(PropertyInfo(Variant::FLOAT, "threshold", PROPERTY_HINT_RANGE, "0,1,0.01"), 0.5));
}
diff --git a/editor/import/resource_importer_bitmask.h b/editor/import/resource_importer_bitmask.h
index d68693c54a..f3da5f9a31 100644
--- a/editor/import/resource_importer_bitmask.h
+++ b/editor/import/resource_importer_bitmask.h
@@ -49,8 +49,8 @@ public:
virtual int get_preset_count() const override;
virtual String get_preset_name(int p_idx) const override;
- virtual void get_import_options(List<ImportOption> *r_options, int p_preset = 0) const override;
- virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const override;
+ virtual void get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset = 0) const override;
+ virtual bool get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const override;
virtual Error import(const String &p_source_file, const String &p_save_path, const Map<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = nullptr, Variant *r_metadata = nullptr) override;
ResourceImporterBitMap();
diff --git a/editor/import/resource_importer_bmfont.cpp b/editor/import/resource_importer_bmfont.cpp
index 2e7ef1402b..f54065416e 100644
--- a/editor/import/resource_importer_bmfont.cpp
+++ b/editor/import/resource_importer_bmfont.cpp
@@ -56,11 +56,11 @@ String ResourceImporterBMFont::get_resource_type() const {
return "FontData";
}
-bool ResourceImporterBMFont::get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const {
+bool ResourceImporterBMFont::get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const {
return true;
}
-void ResourceImporterBMFont::get_import_options(List<ImportOption> *r_options, int p_preset) const {
+void ResourceImporterBMFont::get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset) const {
r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "compress"), true));
}
@@ -359,6 +359,8 @@ Error ResourceImporterBMFont::import(const String &p_source_file, const String &
int height = 0;
int ascent = 0;
int outline = 0;
+ uint32_t st_flags = 0;
+ String font_name;
bool packed = false;
uint8_t ch[4] = { 0, 0, 0, 0 }; // RGBA
@@ -382,13 +384,23 @@ Error ResourceImporterBMFont::import(const String &p_source_file, const String &
base_size = f->get_16();
uint8_t flags = f->get_8();
ERR_FAIL_COND_V_MSG(flags & 0x02, ERR_CANT_CREATE, TTR("Non-unicode version of BMFont is not supported."));
+ if (flags & (1 << 3)) {
+ st_flags |= TextServer::FONT_BOLD;
+ }
+ if (flags & (1 << 2)) {
+ st_flags |= TextServer::FONT_ITALIC;
+ }
f->get_8(); // non-unicode charset, skip
f->get_16(); // stretch_h, skip
f->get_8(); // aa, skip
f->get_32(); // padding, skip
f->get_16(); // spacing, skip
outline = f->get_8();
- // font name, skip
+ // font name
+ PackedByteArray name_data;
+ name_data.resize(block_size - 14);
+ f->get_buffer(name_data.ptrw(), block_size - 14);
+ font_name = String::utf8((const char *)name_data.ptr(), block_size - 14);
font->set_fixed_size(base_size);
} break;
case 2: /* common */ {
@@ -601,6 +613,19 @@ Error ResourceImporterBMFont::import(const String &p_source_file, const String &
if (keys.has("outline")) {
outline = keys["outline"].to_int();
}
+ if (keys.has("bold")) {
+ if (keys["bold"].to_int()) {
+ st_flags |= TextServer::FONT_BOLD;
+ }
+ }
+ if (keys.has("italic")) {
+ if (keys["italic"].to_int()) {
+ st_flags |= TextServer::FONT_ITALIC;
+ }
+ }
+ if (keys.has("face")) {
+ font_name = keys["face"];
+ }
ERR_FAIL_COND_V_MSG((!keys.has("unicode") || keys["unicode"].to_int() != 1), ERR_CANT_CREATE, TTR("Non-unicode version of BMFont is not supported."));
} else if (type == "common") {
if (keys.has("lineHeight")) {
@@ -778,6 +803,8 @@ Error ResourceImporterBMFont::import(const String &p_source_file, const String &
}
}
+ font->set_font_name(font_name);
+ font->set_font_style(st_flags);
font->set_ascent(0, base_size, ascent);
font->set_descent(0, base_size, height - ascent);
diff --git a/editor/import/resource_importer_bmfont.h b/editor/import/resource_importer_bmfont.h
index 065703132a..64d536535c 100644
--- a/editor/import/resource_importer_bmfont.h
+++ b/editor/import/resource_importer_bmfont.h
@@ -45,8 +45,8 @@ public:
virtual String get_save_extension() const override;
virtual String get_resource_type() const override;
- virtual void get_import_options(List<ImportOption> *r_options, int p_preset = 0) const override;
- virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const override;
+ virtual void get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset = 0) const override;
+ virtual bool get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const override;
virtual Error import(const String &p_source_file, const String &p_save_path, const Map<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = nullptr, Variant *r_metadata = nullptr) override;
diff --git a/editor/import/resource_importer_csv_translation.cpp b/editor/import/resource_importer_csv_translation.cpp
index 07647d8b6a..7948d9e577 100644
--- a/editor/import/resource_importer_csv_translation.cpp
+++ b/editor/import/resource_importer_csv_translation.cpp
@@ -55,7 +55,7 @@ String ResourceImporterCSVTranslation::get_resource_type() const {
return "Translation";
}
-bool ResourceImporterCSVTranslation::get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const {
+bool ResourceImporterCSVTranslation::get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const {
return true;
}
@@ -67,7 +67,7 @@ String ResourceImporterCSVTranslation::get_preset_name(int p_idx) const {
return "";
}
-void ResourceImporterCSVTranslation::get_import_options(List<ImportOption> *r_options, int p_preset) const {
+void ResourceImporterCSVTranslation::get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset) const {
r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "compress"), true));
r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "delimiter", PROPERTY_HINT_ENUM, "Comma,Semicolon,Tab"), 0));
}
diff --git a/editor/import/resource_importer_csv_translation.h b/editor/import/resource_importer_csv_translation.h
index d53e91e38b..de7ba3e3a0 100644
--- a/editor/import/resource_importer_csv_translation.h
+++ b/editor/import/resource_importer_csv_translation.h
@@ -46,8 +46,8 @@ public:
virtual int get_preset_count() const override;
virtual String get_preset_name(int p_idx) const override;
- virtual void get_import_options(List<ImportOption> *r_options, int p_preset = 0) const override;
- virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const override;
+ virtual void get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset = 0) const override;
+ virtual bool get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const override;
virtual Error import(const String &p_source_file, const String &p_save_path, const Map<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = nullptr, Variant *r_metadata = nullptr) override;
diff --git a/editor/import/resource_importer_dynamicfont.cpp b/editor/import/resource_importer_dynamicfont.cpp
index 8e01adbd56..f7363a565d 100644
--- a/editor/import/resource_importer_dynamicfont.cpp
+++ b/editor/import/resource_importer_dynamicfont.cpp
@@ -30,12 +30,12 @@
#include "resource_importer_dynamicfont.h"
-#include "dynamicfont_import_settings.h"
-
#include "core/io/file_access.h"
#include "core/io/resource_saver.h"
+#include "dynamicfont_import_settings.h"
#include "editor/editor_node.h"
-#include "modules/modules_enabled.gen.h"
+
+#include "modules/modules_enabled.gen.h" // For freetype.
String ResourceImporterDynamicFont::get_importer_name() const {
return "font_data_dynamic";
@@ -66,7 +66,7 @@ String ResourceImporterDynamicFont::get_resource_type() const {
return "FontData";
}
-bool ResourceImporterDynamicFont::get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const {
+bool ResourceImporterDynamicFont::get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const {
if (p_option == "msdf_pixel_range" && !bool(p_options["multichannel_signed_distance_field"])) {
return false;
}
@@ -94,7 +94,7 @@ String ResourceImporterDynamicFont::get_preset_name(int p_idx) const {
}
}
-void ResourceImporterDynamicFont::get_import_options(List<ImportOption> *r_options, int p_preset) const {
+void ResourceImporterDynamicFont::get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset) const {
bool msdf = p_preset == PRESET_MSDF;
r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "antialiased"), true));
diff --git a/editor/import/resource_importer_dynamicfont.h b/editor/import/resource_importer_dynamicfont.h
index 52f256ab96..cb5294b9dd 100644
--- a/editor/import/resource_importer_dynamicfont.h
+++ b/editor/import/resource_importer_dynamicfont.h
@@ -57,8 +57,8 @@ public:
virtual int get_preset_count() const override;
virtual String get_preset_name(int p_idx) const override;
- virtual void get_import_options(List<ImportOption> *r_options, int p_preset = 0) const override;
- virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const override;
+ virtual void get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset = 0) const override;
+ virtual bool get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const override;
bool has_advanced_options() const override;
void show_advanced_options(const String &p_path) override;
diff --git a/editor/import/resource_importer_image.cpp b/editor/import/resource_importer_image.cpp
index 2dea359188..45cb5e2f9d 100644
--- a/editor/import/resource_importer_image.cpp
+++ b/editor/import/resource_importer_image.cpp
@@ -55,7 +55,7 @@ String ResourceImporterImage::get_resource_type() const {
return "Image";
}
-bool ResourceImporterImage::get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const {
+bool ResourceImporterImage::get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const {
return true;
}
@@ -67,7 +67,7 @@ String ResourceImporterImage::get_preset_name(int p_idx) const {
return String();
}
-void ResourceImporterImage::get_import_options(List<ImportOption> *r_options, int p_preset) const {
+void ResourceImporterImage::get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset) const {
}
Error ResourceImporterImage::import(const String &p_source_file, const String &p_save_path, const Map<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files, Variant *r_metadata) {
diff --git a/editor/import/resource_importer_image.h b/editor/import/resource_importer_image.h
index 7c8d5e228e..b7131ec850 100644
--- a/editor/import/resource_importer_image.h
+++ b/editor/import/resource_importer_image.h
@@ -47,8 +47,8 @@ public:
virtual int get_preset_count() const override;
virtual String get_preset_name(int p_idx) const override;
- virtual void get_import_options(List<ImportOption> *r_options, int p_preset = 0) const override;
- virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const override;
+ virtual void get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset = 0) const override;
+ virtual bool get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const override;
virtual Error import(const String &p_source_file, const String &p_save_path, const Map<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = nullptr, Variant *r_metadata = nullptr) override;
diff --git a/editor/import/resource_importer_imagefont.cpp b/editor/import/resource_importer_imagefont.cpp
index 997280d1dd..04a68e4a53 100644
--- a/editor/import/resource_importer_imagefont.cpp
+++ b/editor/import/resource_importer_imagefont.cpp
@@ -55,11 +55,11 @@ String ResourceImporterImageFont::get_resource_type() const {
return "FontData";
}
-bool ResourceImporterImageFont::get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const {
+bool ResourceImporterImageFont::get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const {
return true;
}
-void ResourceImporterImageFont::get_import_options(List<ImportOption> *r_options, int p_preset) const {
+void ResourceImporterImageFont::get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset) const {
r_options->push_back(ImportOption(PropertyInfo(Variant::PACKED_STRING_ARRAY, "character_ranges"), Vector<String>()));
r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "columns"), 1));
r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "rows"), 1));
diff --git a/editor/import/resource_importer_imagefont.h b/editor/import/resource_importer_imagefont.h
index 9b2b38596f..d600c35e1c 100644
--- a/editor/import/resource_importer_imagefont.h
+++ b/editor/import/resource_importer_imagefont.h
@@ -47,8 +47,8 @@ public:
virtual String get_save_extension() const override;
virtual String get_resource_type() const override;
- virtual void get_import_options(List<ImportOption> *r_options, int p_preset = 0) const override;
- virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const override;
+ virtual void get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset = 0) const override;
+ virtual bool get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const override;
virtual Error import(const String &p_source_file, const String &p_save_path, const Map<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = nullptr, Variant *r_metadata = nullptr) override;
diff --git a/editor/import/resource_importer_layered_texture.cpp b/editor/import/resource_importer_layered_texture.cpp
index d5bb21443c..89c62ab5cb 100644
--- a/editor/import/resource_importer_layered_texture.cpp
+++ b/editor/import/resource_importer_layered_texture.cpp
@@ -118,7 +118,7 @@ String ResourceImporterLayeredTexture::get_resource_type() const {
ERR_FAIL_V(String());
}
-bool ResourceImporterLayeredTexture::get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const {
+bool ResourceImporterLayeredTexture::get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const {
if (p_option == "compress/lossy_quality" && p_options.has("compress/mode")) {
return int(p_options["compress/mode"]) == COMPRESS_LOSSY;
}
@@ -133,7 +133,7 @@ String ResourceImporterLayeredTexture::get_preset_name(int p_idx) const {
return "";
}
-void ResourceImporterLayeredTexture::get_import_options(List<ImportOption> *r_options, int p_preset) const {
+void ResourceImporterLayeredTexture::get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset) const {
r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "compress/mode", PROPERTY_HINT_ENUM, "Lossless (PNG),Lossy (WebP),Video RAM (S3TC/ETC/BPTC),Uncompressed,Basis Universal", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), 1));
r_options->push_back(ImportOption(PropertyInfo(Variant::FLOAT, "compress/lossy_quality", PROPERTY_HINT_RANGE, "0,1,0.01"), 0.7));
r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "compress/hdr_compression", PROPERTY_HINT_ENUM, "Disabled,Opaque Only,Always"), 1));
diff --git a/editor/import/resource_importer_layered_texture.h b/editor/import/resource_importer_layered_texture.h
index 7d8fb3cac5..29dfe7263a 100644
--- a/editor/import/resource_importer_layered_texture.h
+++ b/editor/import/resource_importer_layered_texture.h
@@ -84,8 +84,8 @@ public:
virtual int get_preset_count() const override;
virtual String get_preset_name(int p_idx) const override;
- virtual void get_import_options(List<ImportOption> *r_options, int p_preset = 0) const override;
- virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const override;
+ virtual void get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset = 0) const override;
+ virtual bool get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const override;
void _save_tex(Vector<Ref<Image>> p_images, const String &p_to_path, int p_compress_mode, float p_lossy, Image::CompressMode p_vram_compression, Image::CompressSource p_csource, Image::UsedChannels used_channels, bool p_mipmaps, bool p_force_po2);
diff --git a/editor/import/resource_importer_obj.cpp b/editor/import/resource_importer_obj.cpp
index 4f75faedcb..bb68de99b1 100644
--- a/editor/import/resource_importer_obj.cpp
+++ b/editor/import/resource_importer_obj.cpp
@@ -405,11 +405,11 @@ static Error _parse_obj(const String &p_path, List<Ref<Mesh>> &r_meshes, bool p_
current_material_library = l.replace("mtllib", "").strip_edges();
if (!material_map.has(current_material_library)) {
Map<String, Ref<StandardMaterial3D>> lib;
- Error err = _parse_material_library(current_material_library, lib, r_missing_deps);
- if (err == ERR_CANT_OPEN) {
- String dir = p_path.get_base_dir();
- err = _parse_material_library(dir.plus_file(current_material_library), lib, r_missing_deps);
+ String lib_path = current_material_library;
+ if (lib_path.is_relative_path()) {
+ lib_path = p_path.get_base_dir().plus_file(current_material_library);
}
+ Error err = _parse_material_library(lib_path, lib, r_missing_deps);
if (err == OK) {
material_map[current_material_library] = lib;
}
@@ -448,7 +448,7 @@ Node *EditorOBJImporter::import_scene(const String &p_path, uint32_t p_flags, in
ImporterMeshInstance3D *mi = memnew(ImporterMeshInstance3D);
mi->set_mesh(mesh);
mi->set_name(m->get_name());
- scene->add_child(mi);
+ scene->add_child(mi, true);
mi->set_owner(scene);
}
@@ -504,14 +504,14 @@ String ResourceImporterOBJ::get_preset_name(int p_idx) const {
return "";
}
-void ResourceImporterOBJ::get_import_options(List<ImportOption> *r_options, int p_preset) const {
+void ResourceImporterOBJ::get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset) const {
r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "generate_tangents"), true));
r_options->push_back(ImportOption(PropertyInfo(Variant::VECTOR3, "scale_mesh"), Vector3(1, 1, 1)));
r_options->push_back(ImportOption(PropertyInfo(Variant::VECTOR3, "offset_mesh"), Vector3(0, 0, 0)));
r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "optimize_mesh"), true));
}
-bool ResourceImporterOBJ::get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const {
+bool ResourceImporterOBJ::get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const {
return true;
}
diff --git a/editor/import/resource_importer_obj.h b/editor/import/resource_importer_obj.h
index d9f2f79903..c3e46b6eb5 100644
--- a/editor/import/resource_importer_obj.h
+++ b/editor/import/resource_importer_obj.h
@@ -59,8 +59,8 @@ public:
virtual int get_preset_count() const override;
virtual String get_preset_name(int p_idx) const override;
- virtual void get_import_options(List<ImportOption> *r_options, int p_preset = 0) const override;
- virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const override;
+ virtual void get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset = 0) const override;
+ virtual bool get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const override;
virtual Error import(const String &p_source_file, const String &p_save_path, const Map<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = nullptr, Variant *r_metadata = nullptr) override;
diff --git a/editor/import/resource_importer_scene.cpp b/editor/import/resource_importer_scene.cpp
index 7d3b945b04..a25b694a60 100644
--- a/editor/import/resource_importer_scene.cpp
+++ b/editor/import/resource_importer_scene.cpp
@@ -91,6 +91,16 @@ Ref<Animation> EditorSceneFormatImporter::import_animation(const String &p_path,
ERR_FAIL_V(nullptr);
}
+void EditorSceneFormatImporter::get_import_options(const String &p_path, List<ResourceImporter::ImportOption> *r_options) {
+ GDVIRTUAL_CALL(_get_import_options, p_path);
+}
+
+Variant EditorSceneFormatImporter::get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) {
+ Variant ret;
+ GDVIRTUAL_CALL(_get_option_visibility, p_path, p_option, ret);
+ return ret;
+}
+
//for documenters, these functions are useful when an importer calls an external conversion helper (like, fbx2gltf),
//and you want to load the resulting file
@@ -110,6 +120,8 @@ void EditorSceneFormatImporter::_bind_methods() {
GDVIRTUAL_BIND(_get_extensions);
GDVIRTUAL_BIND(_import_scene, "path", "flags", "bake_fps");
GDVIRTUAL_BIND(_import_animation, "path", "flags", "bake_fps");
+ GDVIRTUAL_BIND(_get_import_options, "path");
+ GDVIRTUAL_BIND(_get_option_visibility, "path", "option");
BIND_CONSTANT(IMPORT_SCENE);
BIND_CONSTANT(IMPORT_ANIMATION);
@@ -193,15 +205,15 @@ void EditorScenePostImportPlugin::internal_process(InternalImportCategory p_cate
current_options_dict = nullptr;
}
-void EditorScenePostImportPlugin::get_import_options(List<ResourceImporter::ImportOption> *r_options) {
+void EditorScenePostImportPlugin::get_import_options(const String &p_path, List<ResourceImporter::ImportOption> *r_options) {
current_option_list = r_options;
- GDVIRTUAL_CALL(_get_import_options);
+ GDVIRTUAL_CALL(_get_import_options, p_path);
current_option_list = nullptr;
}
-Variant EditorScenePostImportPlugin::get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const {
+Variant EditorScenePostImportPlugin::get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const {
current_options = &p_options;
Variant ret;
- GDVIRTUAL_CALL(_get_option_visibility, p_option, ret);
+ GDVIRTUAL_CALL(_get_option_visibility, p_path, p_option, ret);
current_options = nullptr;
return ret;
}
@@ -227,8 +239,8 @@ void EditorScenePostImportPlugin::_bind_methods() {
GDVIRTUAL_BIND(_get_internal_option_visibility, "category", "option");
GDVIRTUAL_BIND(_get_internal_option_update_view_required, "category", "option");
GDVIRTUAL_BIND(_internal_process, "category", "base_node", "node", "resource");
- GDVIRTUAL_BIND(_get_import_options);
- GDVIRTUAL_BIND(_get_option_visibility, "option");
+ GDVIRTUAL_BIND(_get_import_options, "path");
+ GDVIRTUAL_BIND(_get_option_visibility, "path", "option");
GDVIRTUAL_BIND(_pre_process, "scene");
GDVIRTUAL_BIND(_post_process, "scene");
@@ -269,7 +281,7 @@ int ResourceImporterScene::get_format_version() const {
return 1;
}
-bool ResourceImporterScene::get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const {
+bool ResourceImporterScene::get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const {
if (p_option.begins_with("animation/")) {
if (p_option != "animation/import" && !bool(p_options["animation/import"])) {
return false;
@@ -281,7 +293,14 @@ bool ResourceImporterScene::get_option_visibility(const String &p_option, const
}
for (int i = 0; i < post_importer_plugins.size(); i++) {
- Variant ret = post_importer_plugins.write[i]->get_option_visibility(p_option, p_options);
+ Variant ret = post_importer_plugins.write[i]->get_option_visibility(p_path, p_option, p_options);
+ if (ret.get_type() == Variant::BOOL) {
+ return ret;
+ }
+ }
+
+ for (Ref<EditorSceneFormatImporter> importer : importers) {
+ Variant ret = importer->get_option_visibility(p_path, p_option, p_options);
if (ret.get_type() == Variant::BOOL) {
return ret;
}
@@ -424,10 +443,10 @@ Node *ResourceImporterScene::_pre_fix_node(Node *p_node, Node *p_root, Map<Ref<I
String animname = E;
const int loop_string_count = 3;
- static const char *loop_strings[loop_string_count] = { "loops", "loop", "cycle" };
+ static const char *loop_strings[loop_string_count] = { "loop_mode", "loop", "cycle" };
for (int i = 0; i < loop_string_count; i++) {
if (_teststr(animname, loop_strings[i])) {
- anim->set_loop(true);
+ anim->set_loop_mode(Animation::LoopMode::LOOP_LINEAR);
animname = _fixstr(animname, loop_strings[i]);
ap->rename_animation(E, animname);
}
@@ -502,7 +521,7 @@ Node *ResourceImporterScene::_pre_fix_node(Node *p_node, Node *p_root, Map<Ref<I
sphereShape->set_radius(1);
colshape->set_shape(sphereShape);
}
- sb->add_child(colshape);
+ sb->add_child(colshape, true);
colshape->set_owner(sb->get_owner());
}
@@ -528,7 +547,7 @@ Node *ResourceImporterScene::_pre_fix_node(Node *p_node, Node *p_root, Map<Ref<I
rigid_body->set_transform(mi->get_transform());
p_node = rigid_body;
mi->set_transform(Transform3D());
- rigid_body->add_child(mi);
+ rigid_body->add_child(mi, true);
mi->set_owner(rigid_body->get_owner());
_add_shapes(rigid_body, shapes);
@@ -566,7 +585,7 @@ Node *ResourceImporterScene::_pre_fix_node(Node *p_node, Node *p_root, Map<Ref<I
if (shapes.size()) {
StaticBody3D *col = memnew(StaticBody3D);
- mi->add_child(col);
+ mi->add_child(col, true);
col->set_owner(mi->get_owner());
_add_shapes(col, shapes);
@@ -614,7 +633,7 @@ Node *ResourceImporterScene::_pre_fix_node(Node *p_node, Node *p_root, Map<Ref<I
if (shapes.size()) {
StaticBody3D *col = memnew(StaticBody3D);
- p_node->add_child(col);
+ p_node->add_child(col, true);
col->set_owner(p_node->get_owner());
_add_shapes(col, shapes);
@@ -749,7 +768,7 @@ Node *ResourceImporterScene::_post_fix_node(Node *p_node, Node *p_root, Map<Ref<
switch (mesh_physics_mode) {
case MESH_PHYSICS_MESH_AND_STATIC_COLLIDER: {
StaticBody3D *col = memnew(StaticBody3D);
- p_node->add_child(col);
+ p_node->add_child(col, true);
col->set_owner(p_node->get_owner());
col->set_transform(get_collision_shapes_transform(node_settings));
base = col;
@@ -761,7 +780,7 @@ Node *ResourceImporterScene::_post_fix_node(Node *p_node, Node *p_root, Map<Ref<
rigid_body->set_transform(mi->get_transform() * get_collision_shapes_transform(node_settings));
p_node = rigid_body;
mi->set_transform(Transform3D());
- rigid_body->add_child(mi);
+ rigid_body->add_child(mi, true);
mi->set_owner(rigid_body->get_owner());
base = rigid_body;
} break;
@@ -790,7 +809,7 @@ Node *ResourceImporterScene::_post_fix_node(Node *p_node, Node *p_root, Map<Ref<
for (const Ref<Shape3D> &E : shapes) {
CollisionShape3D *cshape = memnew(CollisionShape3D);
cshape->set_shape(E);
- base->add_child(cshape);
+ base->add_child(cshape, true);
cshape->set_owner(base->get_owner());
idx++;
@@ -823,7 +842,7 @@ Node *ResourceImporterScene::_post_fix_node(Node *p_node, Node *p_root, Map<Ref<
memdelete(p_node);
p_node = nmi;
} else {
- mi->add_child(nmi);
+ mi->add_child(nmi, true);
nmi->set_owner(mi->get_owner());
}
}
@@ -868,7 +887,7 @@ Node *ResourceImporterScene::_post_fix_node(Node *p_node, Node *p_root, Map<Ref<
String name = node_settings["clip_" + itos(i + 1) + "/name"];
int from_frame = node_settings["clip_" + itos(i + 1) + "/start_frame"];
int end_frame = node_settings["clip_" + itos(i + 1) + "/end_frame"];
- bool loop = node_settings["clip_" + itos(i + 1) + "/loops"];
+ Animation::LoopMode loop_mode = static_cast<Animation::LoopMode>((int)node_settings["clip_" + itos(i + 1) + "/loop_mode"]);
bool save_to_file = node_settings["clip_" + itos(i + 1) + "/save_to_file/enabled"];
bool save_to_path = node_settings["clip_" + itos(i + 1) + "/save_to_file/path"];
bool save_to_file_keep_custom = node_settings["clip_" + itos(i + 1) + "/save_to_file/keep_custom_tracks"];
@@ -876,7 +895,7 @@ Node *ResourceImporterScene::_post_fix_node(Node *p_node, Node *p_root, Map<Ref<
animation_clips.push_back(name);
animation_clips.push_back(from_frame / p_animation_fps);
animation_clips.push_back(end_frame / p_animation_fps);
- animation_clips.push_back(loop);
+ animation_clips.push_back(loop_mode);
animation_clips.push_back(save_to_file);
animation_clips.push_back(save_to_path);
animation_clips.push_back(save_to_file_keep_custom);
@@ -903,7 +922,7 @@ Node *ResourceImporterScene::_post_fix_node(Node *p_node, Node *p_root, Map<Ref<
}
}
- anim->set_loop(anim_settings["settings/loops"]);
+ anim->set_loop_mode(static_cast<Animation::LoopMode>((int)anim_settings["settings/loop_mode"]));
bool save = anim_settings["save_to_file/enabled"];
String path = anim_settings["save_to_file/path"];
bool keep_custom = anim_settings["save_to_file/keep_custom_tracks"];
@@ -977,7 +996,7 @@ Ref<Animation> ResourceImporterScene::_save_animation_to_file(Ref<Animation> ani
old_anim->copy_track(i, anim);
}
}
- anim->set_loop(old_anim->has_loop());
+ anim->set_loop_mode(old_anim->get_loop_mode());
}
}
@@ -1005,7 +1024,7 @@ void ResourceImporterScene::_create_clips(AnimationPlayer *anim, const Array &p_
String name = p_clips[i];
float from = p_clips[i + 1];
float to = p_clips[i + 2];
- bool loop = p_clips[i + 3];
+ Animation::LoopMode loop_mode = static_cast<Animation::LoopMode>((int)p_clips[i + 3]);
bool save_to_file = p_clips[i + 4];
String save_to_path = p_clips[i + 5];
bool keep_current = p_clips[i + 6];
@@ -1135,7 +1154,7 @@ void ResourceImporterScene::_create_clips(AnimationPlayer *anim, const Array &p_
}
}
- new_anim->set_loop(loop);
+ new_anim->set_loop_mode(loop_mode);
new_anim->set_length(to - from);
anim->add_animation(name, new_anim);
@@ -1218,7 +1237,7 @@ void ResourceImporterScene::get_internal_import_options(InternalImportCategory p
r_options->push_back(ImportOption(PropertyInfo(Variant::STRING, "use_external/path", PROPERTY_HINT_FILE, "*.material,*.res,*.tres"), ""));
} break;
case INTERNAL_IMPORT_CATEGORY_ANIMATION: {
- r_options->push_back(ResourceImporter::ImportOption(PropertyInfo(Variant::BOOL, "settings/loops"), false));
+ r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "settings/loop_mode", PROPERTY_HINT_ENUM, "None,Linear,Pingpong"), 0));
r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "save_to_file/enabled", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), false));
r_options->push_back(ImportOption(PropertyInfo(Variant::STRING, "save_to_file/path", PROPERTY_HINT_SAVE_FILE, "*.res,*.tres"), ""));
r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "save_to_file/keep_custom_tracks"), ""));
@@ -1240,7 +1259,7 @@ void ResourceImporterScene::get_internal_import_options(InternalImportCategory p
r_options->push_back(ImportOption(PropertyInfo(Variant::STRING, "slice_" + itos(i + 1) + "/name"), ""));
r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "slice_" + itos(i + 1) + "/start_frame"), 0));
r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "slice_" + itos(i + 1) + "/end_frame"), 0));
- r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "slice_" + itos(i + 1) + "/loops"), false));
+ r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "slice_" + itos(i + 1) + "/loop_mode", PROPERTY_HINT_ENUM, "None,Linear,Pingpong"), 0));
r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "slice_" + itos(i + 1) + "/save_to_file/enabled", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), false));
r_options->push_back(ImportOption(PropertyInfo(Variant::STRING, "slice_" + itos(i + 1) + "/save_to_file/path", PROPERTY_HINT_SAVE_FILE, ".res,*.tres"), ""));
r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "slice_" + itos(i + 1) + "/save_to_file/keep_custom_tracks"), false));
@@ -1404,7 +1423,7 @@ bool ResourceImporterScene::get_internal_option_update_view_required(InternalImp
return false;
}
-void ResourceImporterScene::get_import_options(List<ImportOption> *r_options, int p_preset) const {
+void ResourceImporterScene::get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset) const {
r_options->push_back(ImportOption(PropertyInfo(Variant::STRING, "nodes/root_type", PROPERTY_HINT_TYPE_STRING, "Node"), "Node3D"));
r_options->push_back(ImportOption(PropertyInfo(Variant::STRING, "nodes/root_name"), "Scene Root"));
@@ -1428,13 +1447,17 @@ void ResourceImporterScene::get_import_options(List<ImportOption> *r_options, in
r_options->push_back(ImportOption(PropertyInfo(Variant::FLOAT, "meshes/lightmap_texel_size", PROPERTY_HINT_RANGE, "0.001,100,0.001"), 0.1));
r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "skins/use_named_skins"), true));
r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "animation/import"), true));
- r_options->push_back(ImportOption(PropertyInfo(Variant::FLOAT, "animation/fps", PROPERTY_HINT_RANGE, "1,120,1"), 15));
+ r_options->push_back(ImportOption(PropertyInfo(Variant::FLOAT, "animation/fps", PROPERTY_HINT_RANGE, "1,120,1"), 30));
r_options->push_back(ImportOption(PropertyInfo(Variant::STRING, "import_script/path", PROPERTY_HINT_FILE, script_ext_hint), ""));
- r_options->push_back(ImportOption(PropertyInfo(Variant::DICTIONARY, "_subresources", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR), Dictionary()));
+ r_options->push_back(ImportOption(PropertyInfo(Variant::DICTIONARY, "_subresources", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), Dictionary()));
for (int i = 0; i < post_importer_plugins.size(); i++) {
- post_importer_plugins.write[i]->get_import_options(r_options);
+ post_importer_plugins.write[i]->get_import_options(p_path, r_options);
+ }
+
+ for (Ref<EditorSceneFormatImporter> importer : importers) {
+ importer->get_import_options(p_path, r_options);
}
}
@@ -1462,7 +1485,7 @@ Node *ResourceImporterScene::import_scene_from_other_importer(EditorSceneFormatI
for (const String &F : extensions) {
if (F.to_lower() == ext) {
- importer = E;
+ importer = E->get();
break;
}
}
@@ -1492,7 +1515,7 @@ Ref<Animation> ResourceImporterScene::import_animation_from_other_importer(Edito
for (const String &F : extensions) {
if (F.to_lower() == ext) {
- importer = E;
+ importer = E->get();
break;
}
}
@@ -1680,7 +1703,7 @@ void ResourceImporterScene::_add_shapes(Node *p_node, const Vector<Ref<Shape3D>>
for (const Ref<Shape3D> &E : p_shapes) {
CollisionShape3D *cshape = memnew(CollisionShape3D);
cshape->set_shape(E);
- p_node->add_child(cshape);
+ p_node->add_child(cshape, true);
cshape->set_owner(p_node->get_owner());
}
diff --git a/editor/import/resource_importer_scene.h b/editor/import/resource_importer_scene.h
index a192921966..5437ecd159 100644
--- a/editor/import/resource_importer_scene.h
+++ b/editor/import/resource_importer_scene.h
@@ -55,6 +55,8 @@ protected:
GDVIRTUAL0RC(Vector<String>, _get_extensions)
GDVIRTUAL3R(Object *, _import_scene, String, uint32_t, uint32_t)
GDVIRTUAL3R(Ref<Animation>, _import_animation, String, uint32_t, uint32_t)
+ GDVIRTUAL1(_get_import_options, String)
+ GDVIRTUAL2RC(Variant, _get_option_visibility, String, String)
public:
enum ImportFlags {
@@ -69,6 +71,8 @@ public:
virtual void get_extensions(List<String> *r_extensions) const;
virtual Node *import_scene(const String &p_path, uint32_t p_flags, int p_bake_fps, List<String> *r_missing_deps, Error *r_err = nullptr);
virtual Ref<Animation> import_animation(const String &p_path, uint32_t p_flags, int p_bake_fps);
+ virtual void get_import_options(const String &p_path, List<ResourceImporter::ImportOption> *r_options);
+ virtual Variant get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options);
EditorSceneFormatImporter() {}
};
@@ -115,8 +119,8 @@ protected:
GDVIRTUAL2RC(Variant, _get_internal_option_visibility, int, String)
GDVIRTUAL2RC(Variant, _get_internal_option_update_view_required, int, String)
GDVIRTUAL4(_internal_process, int, Node *, Node *, RES)
- GDVIRTUAL0(_get_import_options)
- GDVIRTUAL1RC(Variant, _get_option_visibility, String)
+ GDVIRTUAL1(_get_import_options, String)
+ GDVIRTUAL2RC(Variant, _get_option_visibility, String, String)
GDVIRTUAL1(_pre_process, Node *)
GDVIRTUAL1(_post_process, Node *)
@@ -133,8 +137,8 @@ public:
virtual void internal_process(InternalImportCategory p_category, Node *p_base_scene, Node *p_node, RES p_resource, const Dictionary &p_options);
- virtual void get_import_options(List<ResourceImporter::ImportOption> *r_options);
- virtual Variant get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const;
+ virtual void get_import_options(const String &p_path, List<ResourceImporter::ImportOption> *r_options);
+ virtual Variant get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const;
virtual void pre_process(Node *p_scene, const Map<StringName, Variant> &p_options);
virtual void post_process(Node *p_scene, const Map<StringName, Variant> &p_options);
@@ -250,8 +254,8 @@ public:
bool get_internal_option_visibility(InternalImportCategory p_category, const String &p_option, const Map<StringName, Variant> &p_options) const;
bool get_internal_option_update_view_required(InternalImportCategory p_category, const String &p_option, const Map<StringName, Variant> &p_options) const;
- virtual void get_import_options(List<ImportOption> *r_options, int p_preset = 0) const override;
- virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const override;
+ virtual void get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset = 0) const override;
+ virtual bool get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const override;
// Import scenes *after* everything else (such as textures).
virtual int get_import_order() const override { return ResourceImporter::IMPORT_ORDER_SCENE; }
diff --git a/editor/import/resource_importer_shader_file.cpp b/editor/import/resource_importer_shader_file.cpp
index c01d8068da..797e11f5ea 100644
--- a/editor/import/resource_importer_shader_file.cpp
+++ b/editor/import/resource_importer_shader_file.cpp
@@ -65,10 +65,10 @@ String ResourceImporterShaderFile::get_preset_name(int p_idx) const {
return String();
}
-void ResourceImporterShaderFile::get_import_options(List<ImportOption> *r_options, int p_preset) const {
+void ResourceImporterShaderFile::get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset) const {
}
-bool ResourceImporterShaderFile::get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const {
+bool ResourceImporterShaderFile::get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const {
return true;
}
diff --git a/editor/import/resource_importer_shader_file.h b/editor/import/resource_importer_shader_file.h
index c421132ec2..3ed489e9fb 100644
--- a/editor/import/resource_importer_shader_file.h
+++ b/editor/import/resource_importer_shader_file.h
@@ -46,8 +46,8 @@ public:
virtual int get_preset_count() const override;
virtual String get_preset_name(int p_idx) const override;
- virtual void get_import_options(List<ImportOption> *r_options, int p_preset = 0) const override;
- virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const override;
+ virtual void get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset = 0) const override;
+ virtual bool get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const override;
virtual Error import(const String &p_source_file, const String &p_save_path, const Map<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = nullptr, Variant *r_metadata = nullptr) override;
diff --git a/editor/import/resource_importer_texture.cpp b/editor/import/resource_importer_texture.cpp
index 96a53b3257..b1fa2eda28 100644
--- a/editor/import/resource_importer_texture.cpp
+++ b/editor/import/resource_importer_texture.cpp
@@ -153,7 +153,7 @@ String ResourceImporterTexture::get_resource_type() const {
return "StreamTexture2D";
}
-bool ResourceImporterTexture::get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const {
+bool ResourceImporterTexture::get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const {
if (p_option == "compress/lossy_quality") {
int compress_mode = int(p_options["compress/mode"]);
if (compress_mode != COMPRESS_LOSSY && compress_mode != COMPRESS_VRAM_COMPRESSED) {
@@ -194,7 +194,7 @@ String ResourceImporterTexture::get_preset_name(int p_idx) const {
return preset_names[p_idx];
}
-void ResourceImporterTexture::get_import_options(List<ImportOption> *r_options, int p_preset) const {
+void ResourceImporterTexture::get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset) const {
r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "compress/mode", PROPERTY_HINT_ENUM, "Lossless,Lossy,VRAM Compressed,VRAM Uncompressed,Basis Universal", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), p_preset == PRESET_3D ? 2 : 0));
r_options->push_back(ImportOption(PropertyInfo(Variant::FLOAT, "compress/lossy_quality", PROPERTY_HINT_RANGE, "0,1,0.01"), 0.7));
r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "compress/hdr_compression", PROPERTY_HINT_ENUM, "Disabled,Opaque Only,Always"), 1));
@@ -218,7 +218,8 @@ void ResourceImporterTexture::get_import_options(List<ImportOption> *r_options,
void ResourceImporterTexture::save_to_stex_format(FileAccess *f, const Ref<Image> &p_image, CompressMode p_compress_mode, Image::UsedChannels p_channels, Image::CompressMode p_compress_format, float p_lossy_quality) {
switch (p_compress_mode) {
case COMPRESS_LOSSLESS: {
- bool lossless_force_png = ProjectSettings::get_singleton()->get("rendering/textures/lossless_compression/force_png");
+ bool lossless_force_png = ProjectSettings::get_singleton()->get("rendering/textures/lossless_compression/force_png") ||
+ !Image::_webp_mem_loader_func; // WebP module disabled.
bool use_webp = !lossless_force_png && p_image->get_width() <= 16383 && p_image->get_height() <= 16383; // WebP has a size limit
f->store_32(use_webp ? StreamTexture2D::DATA_FORMAT_WEBP : StreamTexture2D::DATA_FORMAT_PNG);
f->store_16(p_image->get_width());
diff --git a/editor/import/resource_importer_texture.h b/editor/import/resource_importer_texture.h
index 41220009cd..cb9d1b08cd 100644
--- a/editor/import/resource_importer_texture.h
+++ b/editor/import/resource_importer_texture.h
@@ -95,8 +95,8 @@ public:
virtual int get_preset_count() const override;
virtual String get_preset_name(int p_idx) const override;
- virtual void get_import_options(List<ImportOption> *r_options, int p_preset = 0) const override;
- virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const override;
+ virtual void get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset = 0) const override;
+ virtual bool get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const override;
virtual Error import(const String &p_source_file, const String &p_save_path, const Map<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = nullptr, Variant *r_metadata = nullptr) override;
diff --git a/editor/import/resource_importer_texture_atlas.cpp b/editor/import/resource_importer_texture_atlas.cpp
index cf699599ae..048d84d1f9 100644
--- a/editor/import/resource_importer_texture_atlas.cpp
+++ b/editor/import/resource_importer_texture_atlas.cpp
@@ -59,7 +59,7 @@ String ResourceImporterTextureAtlas::get_resource_type() const {
return "Texture2D";
}
-bool ResourceImporterTextureAtlas::get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const {
+bool ResourceImporterTextureAtlas::get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const {
return true;
}
@@ -71,7 +71,7 @@ String ResourceImporterTextureAtlas::get_preset_name(int p_idx) const {
return String();
}
-void ResourceImporterTextureAtlas::get_import_options(List<ImportOption> *r_options, int p_preset) const {
+void ResourceImporterTextureAtlas::get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset) const {
r_options->push_back(ImportOption(PropertyInfo(Variant::STRING, "atlas_file", PROPERTY_HINT_SAVE_FILE, "*.png"), ""));
r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "import_mode", PROPERTY_HINT_ENUM, "Region,Mesh2D"), 0));
r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "crop_to_region"), false));
@@ -134,7 +134,7 @@ static void _plot_triangle(Vector2i *vertices, const Vector2i &p_offset, bool p_
int max_y = MIN(y[2], height - p_offset.y - 1);
for (int yi = y[0]; yi < max_y; yi++) {
if (yi >= 0) {
- for (int xi = (xf > 0 ? int(xf) : 0); xi < (xt < width ? xt : width - 1); xi++) {
+ for (int xi = (xf > 0 ? int(xf) : 0); xi < (xt <= src_width ? xt : src_width); xi++) {
int px = xi, py = yi;
int sx = px, sy = py;
sx = CLAMP(sx, 0, src_width - 1);
@@ -156,7 +156,7 @@ static void _plot_triangle(Vector2i *vertices, const Vector2i &p_offset, bool p_
p_image->set_pixel(px, py, color);
}
- for (int xi = (xf < width ? int(xf) : width - 1); xi >= (xt > 0 ? xt : 0); xi--) {
+ for (int xi = (xf < src_width ? int(xf) : src_width - 1); xi >= (xt > 0 ? xt : 0); xi--) {
int px = xi, py = yi;
int sx = px, sy = py;
sx = CLAMP(sx, 0, src_width - 1);
diff --git a/editor/import/resource_importer_texture_atlas.h b/editor/import/resource_importer_texture_atlas.h
index d518a120bf..177ef949ac 100644
--- a/editor/import/resource_importer_texture_atlas.h
+++ b/editor/import/resource_importer_texture_atlas.h
@@ -60,8 +60,8 @@ public:
virtual int get_preset_count() const override;
virtual String get_preset_name(int p_idx) const override;
- virtual void get_import_options(List<ImportOption> *r_options, int p_preset = 0) const override;
- virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const override;
+ virtual void get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset = 0) const override;
+ virtual bool get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const override;
virtual String get_option_group_file() const override;
virtual Error import(const String &p_source_file, const String &p_save_path, const Map<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = nullptr, Variant *r_metadata = nullptr) override;
diff --git a/editor/import/resource_importer_wav.cpp b/editor/import/resource_importer_wav.cpp
index 89383d3dde..820eba951f 100644
--- a/editor/import/resource_importer_wav.cpp
+++ b/editor/import/resource_importer_wav.cpp
@@ -58,7 +58,7 @@ String ResourceImporterWAV::get_resource_type() const {
return "AudioStreamSample";
}
-bool ResourceImporterWAV::get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const {
+bool ResourceImporterWAV::get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const {
if (p_option == "force/max_rate_hz" && !bool(p_options["force/max_rate"])) {
return false;
}
@@ -74,7 +74,7 @@ String ResourceImporterWAV::get_preset_name(int p_idx) const {
return String();
}
-void ResourceImporterWAV::get_import_options(List<ImportOption> *r_options, int p_preset) const {
+void ResourceImporterWAV::get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset) const {
r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "force/8_bit"), false));
r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "force/mono"), false));
r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "force/max_rate", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), false));
@@ -272,7 +272,7 @@ Error ResourceImporterWAV::import(const String &p_source_file, const String &p_s
if (loop_type == 0x00) {
loop = AudioStreamSample::LOOP_FORWARD;
} else if (loop_type == 0x01) {
- loop = AudioStreamSample::LOOP_PING_PONG;
+ loop = AudioStreamSample::LOOP_PINGPONG;
} else if (loop_type == 0x02) {
loop = AudioStreamSample::LOOP_BACKWARD;
}
diff --git a/editor/import/resource_importer_wav.h b/editor/import/resource_importer_wav.h
index 7413dbd11c..e3e605aeb2 100644
--- a/editor/import/resource_importer_wav.h
+++ b/editor/import/resource_importer_wav.h
@@ -46,8 +46,8 @@ public:
virtual int get_preset_count() const override;
virtual String get_preset_name(int p_idx) const override;
- virtual void get_import_options(List<ImportOption> *r_options, int p_preset = 0) const override;
- virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const override;
+ virtual void get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset = 0) const override;
+ virtual bool get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const override;
static void _compress_ima_adpcm(const Vector<float> &p_data, Vector<uint8_t> &dst_data) {
/*p_sample_data->data = (void*)malloc(len);
diff --git a/editor/import/scene_import_settings.cpp b/editor/import/scene_import_settings.cpp
index 95a96f9e26..5690d49a55 100644
--- a/editor/import/scene_import_settings.cpp
+++ b/editor/import/scene_import_settings.cpp
@@ -327,7 +327,7 @@ void SceneImportSettings::_fill_scene(Node *p_node, TreeItem *p_parent_item) {
MeshInstance3D *collider_view = memnew(MeshInstance3D);
collider_view->set_name("collider_view");
collider_view->set_visible(false);
- mesh_node->add_child(collider_view);
+ mesh_node->add_child(collider_view, true);
collider_view->set_owner(mesh_node);
Transform3D accum_xform;
@@ -664,7 +664,7 @@ void SceneImportSettings::_select(Tree *p_from, String p_type, String p_id) {
List<ResourceImporter::ImportOption> options;
if (scene_import_settings_data->category == ResourceImporterScene::INTERNAL_IMPORT_CATEGORY_MAX) {
- ResourceImporterScene::get_singleton()->get_import_options(&options);
+ ResourceImporterScene::get_singleton()->get_import_options(base_path, &options);
} else {
ResourceImporterScene::get_singleton()->get_internal_import_options(scene_import_settings_data->category, &options);
}
@@ -737,21 +737,21 @@ void SceneImportSettings::_viewport_input(const Ref<InputEvent> &p_input) {
zoom = &md.cam_zoom;
}
Ref<InputEventMouseMotion> mm = p_input;
- if (mm.is_valid() && mm->get_button_mask() & MOUSE_BUTTON_MASK_LEFT) {
+ if (mm.is_valid() && (mm->get_button_mask() & MouseButton::MASK_LEFT) != MouseButton::NONE) {
(*rot_x) -= mm->get_relative().y * 0.01 * EDSCALE;
(*rot_y) -= mm->get_relative().x * 0.01 * EDSCALE;
(*rot_x) = CLAMP((*rot_x), -Math_PI / 2, Math_PI / 2);
_update_camera();
}
Ref<InputEventMouseButton> mb = p_input;
- if (mb.is_valid() && mb->get_button_index() == MOUSE_BUTTON_WHEEL_DOWN) {
+ if (mb.is_valid() && mb->get_button_index() == MouseButton::WHEEL_DOWN) {
(*zoom) *= 1.1;
if ((*zoom) > 10.0) {
(*zoom) = 10.0;
}
_update_camera();
}
- if (mb.is_valid() && mb->get_button_index() == MOUSE_BUTTON_WHEEL_UP) {
+ if (mb.is_valid() && mb->get_button_index() == MouseButton::WHEEL_UP) {
(*zoom) /= 1.1;
if ((*zoom) < 0.1) {
(*zoom) = 0.1;
diff --git a/editor/import_defaults_editor.cpp b/editor/import_defaults_editor.cpp
index 8300dcf555..4b69810861 100644
--- a/editor/import_defaults_editor.cpp
+++ b/editor/import_defaults_editor.cpp
@@ -62,7 +62,7 @@ protected:
return;
}
for (const PropertyInfo &E : properties) {
- if (importer->get_option_visibility(E.name, values)) {
+ if (importer->get_option_visibility("", E.name, values)) {
p_list->push_back(E);
}
}
@@ -119,7 +119,7 @@ void ImportDefaultsEditor::_update_importer() {
if (importer.is_valid()) {
List<ResourceImporter::ImportOption> options;
- importer->get_import_options(&options);
+ importer->get_import_options("", &options);
Dictionary d;
if (ProjectSettings::get_singleton()->has_setting("importer_defaults/" + importer->get_importer_name())) {
d = ProjectSettings::get_singleton()->get("importer_defaults/" + importer->get_importer_name());
diff --git a/editor/import_dock.cpp b/editor/import_dock.cpp
index a6e1e1d094..cc6b4e66e4 100644
--- a/editor/import_dock.cpp
+++ b/editor/import_dock.cpp
@@ -42,6 +42,7 @@ public:
Vector<String> paths;
Set<StringName> checked;
bool checking;
+ String base_options_path;
bool _set(const StringName &p_name, const Variant &p_value) {
if (values.has(p_name)) {
@@ -66,7 +67,7 @@ public:
}
void _get_property_list(List<PropertyInfo> *p_list) const {
for (const PropertyInfo &E : properties) {
- if (!importer->get_option_visibility(E.name, values)) {
+ if (!importer->get_option_visibility(base_options_path, E.name, values)) {
continue;
}
PropertyInfo pi = E;
@@ -104,8 +105,9 @@ void ImportDock::set_edit_path(const String &p_path) {
params->paths.clear();
params->paths.push_back(p_path);
+ params->base_options_path = p_path;
- _update_options(config);
+ _update_options(p_path, config);
List<Ref<ResourceImporter>> importers;
ResourceFormatImporter::get_singleton()->get_importers_for_extension(p_path.get_extension(), &importers);
@@ -146,17 +148,18 @@ void ImportDock::_add_keep_import_option(const String &p_importer_name) {
}
}
-void ImportDock::_update_options(const Ref<ConfigFile> &p_config) {
+void ImportDock::_update_options(const String &p_path, const Ref<ConfigFile> &p_config) {
List<ResourceImporter::ImportOption> options;
if (params->importer.is_valid()) {
- params->importer->get_import_options(&options);
+ params->importer->get_import_options(p_path, &options);
}
params->properties.clear();
params->values.clear();
params->checking = params->paths.size() > 1;
params->checked.clear();
+ params->base_options_path = p_path;
for (const ResourceImporter::ImportOption &E : options) {
params->properties.push_back(E.option);
@@ -184,10 +187,12 @@ void ImportDock::set_edit_multiple_paths(const Vector<String> &p_paths) {
// Use the value that is repeated the most.
Map<String, Dictionary> value_frequency;
+ Set<String> extensions;
for (int i = 0; i < p_paths.size(); i++) {
Ref<ConfigFile> config;
config.instantiate();
+ extensions.insert(p_paths[i].get_extension());
Error err = config->load(p_paths[i] + ".import");
ERR_CONTINUE(err != OK);
@@ -223,13 +228,18 @@ void ImportDock::set_edit_multiple_paths(const Vector<String> &p_paths) {
ERR_FAIL_COND(params->importer.is_null());
+ String base_path;
+ if (extensions.size() == 1 && p_paths.size() > 0) {
+ base_path = p_paths[0];
+ }
List<ResourceImporter::ImportOption> options;
- params->importer->get_import_options(&options);
+ params->importer->get_import_options(base_path, &options);
params->properties.clear();
params->values.clear();
params->checking = true;
params->checked.clear();
+ params->base_options_path = base_path;
for (const ResourceImporter::ImportOption &E : options) {
params->properties.push_back(E.option);
@@ -327,22 +337,22 @@ void ImportDock::_importer_selected(int i_idx) {
String name = import_as->get_selected_metadata();
if (name == "keep") {
params->importer.unref();
- _update_options(Ref<ConfigFile>());
+ _update_options(params->base_options_path, Ref<ConfigFile>());
} else {
Ref<ResourceImporter> importer = ResourceFormatImporter::get_singleton()->get_importer_by_name(name);
ERR_FAIL_COND(importer.is_null());
params->importer = importer;
-
Ref<ConfigFile> config;
if (params->paths.size()) {
+ String path = params->paths[0];
config.instantiate();
- Error err = config->load(params->paths[0] + ".import");
+ Error err = config->load(path + ".import");
if (err != OK) {
config.unref();
}
}
- _update_options(config);
+ _update_options(params->base_options_path, config);
}
}
@@ -387,7 +397,7 @@ void ImportDock::_preset_selected(int p_idx) {
default: {
List<ResourceImporter::ImportOption> options;
- params->importer->get_import_options(&options, p_idx);
+ params->importer->get_import_options(params->base_options_path, &options, p_idx);
if (params->checking) {
params->checked.clear();
diff --git a/editor/import_dock.h b/editor/import_dock.h
index 150c44576d..ac73f3e3c0 100644
--- a/editor/import_dock.h
+++ b/editor/import_dock.h
@@ -64,7 +64,7 @@ class ImportDock : public VBoxContainer {
void _preset_selected(int p_idx);
void _importer_selected(int i_idx);
- void _update_options(const Ref<ConfigFile> &p_config = Ref<ConfigFile>());
+ void _update_options(const String &p_path, const Ref<ConfigFile> &p_config = Ref<ConfigFile>());
void _update_preset_menu();
void _add_keep_import_option(const String &p_importer_name);
diff --git a/editor/localization_editor.cpp b/editor/localization_editor.cpp
index 3fe1aa557d..5c25e6aae9 100644
--- a/editor/localization_editor.cpp
+++ b/editor/localization_editor.cpp
@@ -98,7 +98,7 @@ void LocalizationEditor::_translation_delete(Object *p_item, int p_column, int p
ERR_FAIL_INDEX(idx, translations.size());
- translations.remove(idx);
+ translations.remove_at(idx);
undo_redo->create_action(TTR("Remove Translation"));
undo_redo->add_do_property(ProjectSettings::get_singleton(), "internationalization/locale/translations", translations);
@@ -276,7 +276,7 @@ void LocalizationEditor::_translation_res_option_delete(Object *p_item, int p_co
ERR_FAIL_COND(!remaps.has(key));
PackedStringArray r = remaps[key];
ERR_FAIL_INDEX(idx, r.size());
- r.remove(idx);
+ r.remove_at(idx);
remaps[key] = r;
undo_redo->create_action(TTR("Remove Resource Remap Option"));
@@ -321,7 +321,7 @@ void LocalizationEditor::_translation_filter_option_changed() {
}
} else {
if (l_idx != -1) {
- f_locales.remove(l_idx);
+ f_locales.remove_at(l_idx);
}
}
@@ -397,7 +397,7 @@ void LocalizationEditor::_pot_delete(Object *p_item, int p_column, int p_button)
ERR_FAIL_INDEX(idx, pot_translations.size());
- pot_translations.remove(idx);
+ pot_translations.remove_at(idx);
undo_redo->create_action(TTR("Remove file from POT generation"));
undo_redo->add_do_property(ProjectSettings::get_singleton(), "internationalization/locale/translations_pot_files", pot_translations);
diff --git a/editor/plugin_config_dialog.cpp b/editor/plugin_config_dialog.cpp
index 91ca1465df..c99b34e0c2 100644
--- a/editor/plugin_config_dialog.cpp
+++ b/editor/plugin_config_dialog.cpp
@@ -38,7 +38,7 @@
#include "editor/project_settings_editor.h"
#include "scene/gui/grid_container.h"
-#include "modules/modules_enabled.gen.h"
+#include "modules/modules_enabled.gen.h" // For gdscript.
#ifdef MODULE_GDSCRIPT_ENABLED
#include "modules/gdscript/gdscript.h"
#endif
diff --git a/editor/plugins/abstract_polygon_2d_editor.cpp b/editor/plugins/abstract_polygon_2d_editor.cpp
index 36a814c30a..58f92a98a6 100644
--- a/editor/plugins/abstract_polygon_2d_editor.cpp
+++ b/editor/plugins/abstract_polygon_2d_editor.cpp
@@ -245,11 +245,11 @@ bool AbstractPolygon2DEditor::forward_gui_input(const Ref<InputEvent> &p_event)
Ref<InputEventMouseButton> mb = p_event;
if (!_has_resource()) {
- if (mb.is_valid() && mb->get_button_index() == 1 && mb->is_pressed()) {
+ if (mb.is_valid() && mb->get_button_index() == MouseButton::LEFT && mb->is_pressed()) {
create_resource->set_text(String("No polygon resource on this node.\nCreate and assign one?"));
create_resource->popup_centered();
}
- return (mb.is_valid() && mb->get_button_index() == 1);
+ return (mb.is_valid() && mb->get_button_index() == MouseButton::LEFT);
}
CanvasItemEditor::Tool tool = CanvasItemEditor::get_singleton()->get_current_tool();
@@ -264,7 +264,7 @@ bool AbstractPolygon2DEditor::forward_gui_input(const Ref<InputEvent> &p_event)
Vector2 cpoint = _get_node()->to_local(canvas_item_editor->snap_point(canvas_item_editor->get_canvas_transform().affine_inverse().xform(mb->get_position())));
if (mode == MODE_EDIT || (_is_line() && mode == MODE_CREATE)) {
- if (mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (mb->get_button_index() == MouseButton::LEFT) {
if (mb->is_pressed()) {
if (mb->is_ctrl_pressed() || mb->is_shift_pressed() || mb->is_alt_pressed()) {
return false;
@@ -326,7 +326,7 @@ bool AbstractPolygon2DEditor::forward_gui_input(const Ref<InputEvent> &p_event)
return true;
}
}
- } else if (mb->get_button_index() == MOUSE_BUTTON_RIGHT && mb->is_pressed() && !edited_point.valid()) {
+ } else if (mb->get_button_index() == MouseButton::RIGHT && mb->is_pressed() && !edited_point.valid()) {
const PosVertex closest = closest_point(gpoint);
if (closest.valid()) {
@@ -335,7 +335,7 @@ bool AbstractPolygon2DEditor::forward_gui_input(const Ref<InputEvent> &p_event)
}
}
} else if (mode == MODE_DELETE) {
- if (mb->get_button_index() == MOUSE_BUTTON_LEFT && mb->is_pressed()) {
+ if (mb->get_button_index() == MouseButton::LEFT && mb->is_pressed()) {
const PosVertex closest = closest_point(gpoint);
if (closest.valid()) {
@@ -346,7 +346,7 @@ bool AbstractPolygon2DEditor::forward_gui_input(const Ref<InputEvent> &p_event)
}
if (mode == MODE_CREATE) {
- if (mb->get_button_index() == MOUSE_BUTTON_LEFT && mb->is_pressed()) {
+ if (mb->get_button_index() == MouseButton::LEFT && mb->is_pressed()) {
if (_is_line()) {
// for lines, we don't have a wip mode, and we can undo each single add point.
Vector<Vector2> vertices = _get_polygon(0);
@@ -384,7 +384,7 @@ bool AbstractPolygon2DEditor::forward_gui_input(const Ref<InputEvent> &p_event)
return true;
}
}
- } else if (mb->get_button_index() == MOUSE_BUTTON_RIGHT && mb->is_pressed() && wip_active) {
+ } else if (mb->get_button_index() == MouseButton::RIGHT && mb->is_pressed() && wip_active) {
_wip_cancel();
}
}
@@ -395,7 +395,7 @@ bool AbstractPolygon2DEditor::forward_gui_input(const Ref<InputEvent> &p_event)
if (mm.is_valid()) {
Vector2 gpoint = mm->get_position();
- if (edited_point.valid() && (wip_active || (mm->get_button_mask() & MOUSE_BUTTON_MASK_LEFT))) {
+ if (edited_point.valid() && (wip_active || (mm->get_button_mask() & MouseButton::MASK_LEFT) != MouseButton::NONE)) {
Vector2 cpoint = _get_node()->to_local(canvas_item_editor->snap_point(canvas_item_editor->get_canvas_transform().affine_inverse().xform(gpoint)));
//Move the point in a single axis. Should only work when editing a polygon and while holding shift.
@@ -443,10 +443,10 @@ bool AbstractPolygon2DEditor::forward_gui_input(const Ref<InputEvent> &p_event)
Ref<InputEventKey> k = p_event;
if (k.is_valid() && k->is_pressed()) {
- if (k->get_keycode() == KEY_DELETE || k->get_keycode() == KEY_BACKSPACE) {
+ if (k->get_keycode() == Key::KEY_DELETE || k->get_keycode() == Key::BACKSPACE) {
if (wip_active && selected_point.polygon == -1) {
if (wip.size() > selected_point.vertex) {
- wip.remove(selected_point.vertex);
+ wip.remove_at(selected_point.vertex);
_wip_changed();
selected_point = wip.size() - 1;
canvas_item_editor->update_viewport();
@@ -460,9 +460,9 @@ bool AbstractPolygon2DEditor::forward_gui_input(const Ref<InputEvent> &p_event)
return true;
}
}
- } else if (wip_active && k->get_keycode() == KEY_ENTER) {
+ } else if (wip_active && k->get_keycode() == Key::ENTER) {
_wip_close();
- } else if (wip_active && k->get_keycode() == KEY_ESCAPE) {
+ } else if (wip_active && k->get_keycode() == Key::ESCAPE) {
_wip_cancel();
}
}
@@ -599,7 +599,7 @@ void AbstractPolygon2DEditor::remove_point(const Vertex &p_vertex) {
Vector<Vector2> vertices = _get_polygon(p_vertex.polygon);
if (vertices.size() > (_is_line() ? 2 : 3)) {
- vertices.remove(p_vertex.vertex);
+ vertices.remove_at(p_vertex.vertex);
undo_redo->create_action(TTR("Edit Polygon (Remove Point)"));
_action_set_polygon(p_vertex.polygon, vertices);
diff --git a/editor/plugins/animation_blend_space_1d_editor.cpp b/editor/plugins/animation_blend_space_1d_editor.cpp
index ad2d9866fa..cfb7217baa 100644
--- a/editor/plugins/animation_blend_space_1d_editor.cpp
+++ b/editor/plugins/animation_blend_space_1d_editor.cpp
@@ -42,7 +42,7 @@ StringName AnimationNodeBlendSpace1DEditor::get_blend_position_path() const {
void AnimationNodeBlendSpace1DEditor::_blend_space_gui_input(const Ref<InputEvent> &p_event) {
Ref<InputEventKey> k = p_event;
- if (tool_select->is_pressed() && k.is_valid() && k->is_pressed() && k->get_keycode() == KEY_DELETE && !k->is_echo()) {
+ if (tool_select->is_pressed() && k.is_valid() && k->is_pressed() && k->get_keycode() == Key::KEY_DELETE && !k->is_echo()) {
if (selected_point != -1) {
_erase_selected();
accept_event();
@@ -51,7 +51,7 @@ void AnimationNodeBlendSpace1DEditor::_blend_space_gui_input(const Ref<InputEven
Ref<InputEventMouseButton> mb = p_event;
- if (mb.is_valid() && mb->is_pressed() && ((tool_select->is_pressed() && mb->get_button_index() == MOUSE_BUTTON_RIGHT) || (mb->get_button_index() == MOUSE_BUTTON_LEFT && tool_create->is_pressed()))) {
+ if (mb.is_valid() && mb->is_pressed() && ((tool_select->is_pressed() && mb->get_button_index() == MouseButton::RIGHT) || (mb->get_button_index() == MouseButton::LEFT && tool_create->is_pressed()))) {
menu->clear();
animations_menu->clear();
animations_to_add.clear();
@@ -110,7 +110,7 @@ void AnimationNodeBlendSpace1DEditor::_blend_space_gui_input(const Ref<InputEven
}
}
- if (mb.is_valid() && mb->is_pressed() && tool_select->is_pressed() && mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (mb.is_valid() && mb->is_pressed() && tool_select->is_pressed() && mb->get_button_index() == MouseButton::LEFT) {
blend_space_draw->update(); // why not
// try to see if a point can be selected
@@ -132,7 +132,7 @@ void AnimationNodeBlendSpace1DEditor::_blend_space_gui_input(const Ref<InputEven
}
}
- if (mb.is_valid() && !mb->is_pressed() && dragging_selected_attempt && mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (mb.is_valid() && !mb->is_pressed() && dragging_selected_attempt && mb->get_button_index() == MouseButton::LEFT) {
if (dragging_selected) {
// move
float point = blend_space->get_blend_point_position(selected_point);
@@ -161,7 +161,7 @@ void AnimationNodeBlendSpace1DEditor::_blend_space_gui_input(const Ref<InputEven
}
// *set* the blend
- if (mb.is_valid() && !mb->is_pressed() && tool_blend->is_pressed() && mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (mb.is_valid() && !mb->is_pressed() && tool_blend->is_pressed() && mb->get_button_index() == MouseButton::LEFT) {
float blend_pos = mb->get_position().x / blend_space_draw->get_size().x;
blend_pos *= blend_space->get_max_space() - blend_space->get_min_space();
blend_pos += blend_space->get_min_space();
@@ -184,7 +184,7 @@ void AnimationNodeBlendSpace1DEditor::_blend_space_gui_input(const Ref<InputEven
_update_edited_point_pos();
}
- if (mm.is_valid() && tool_blend->is_pressed() && mm->get_button_mask() & MOUSE_BUTTON_MASK_LEFT) {
+ if (mm.is_valid() && tool_blend->is_pressed() && (mm->get_button_mask() & MouseButton::MASK_LEFT) != MouseButton::NONE) {
float blend_pos = mm->get_position().x / blend_space_draw->get_size().x;
blend_pos *= blend_space->get_max_space() - blend_space->get_min_space();
blend_pos += blend_space->get_min_space();
diff --git a/editor/plugins/animation_blend_space_2d_editor.cpp b/editor/plugins/animation_blend_space_2d_editor.cpp
index 686a35e442..9af060ed84 100644
--- a/editor/plugins/animation_blend_space_2d_editor.cpp
+++ b/editor/plugins/animation_blend_space_2d_editor.cpp
@@ -70,7 +70,7 @@ StringName AnimationNodeBlendSpace2DEditor::get_blend_position_path() const {
void AnimationNodeBlendSpace2DEditor::_blend_space_gui_input(const Ref<InputEvent> &p_event) {
Ref<InputEventKey> k = p_event;
- if (tool_select->is_pressed() && k.is_valid() && k->is_pressed() && k->get_keycode() == KEY_DELETE && !k->is_echo()) {
+ if (tool_select->is_pressed() && k.is_valid() && k->is_pressed() && k->get_keycode() == Key::KEY_DELETE && !k->is_echo()) {
if (selected_point != -1 || selected_triangle != -1) {
_erase_selected();
accept_event();
@@ -79,7 +79,7 @@ void AnimationNodeBlendSpace2DEditor::_blend_space_gui_input(const Ref<InputEven
Ref<InputEventMouseButton> mb = p_event;
- if (mb.is_valid() && mb->is_pressed() && ((tool_select->is_pressed() && mb->get_button_index() == MOUSE_BUTTON_RIGHT) || (mb->get_button_index() == MOUSE_BUTTON_LEFT && tool_create->is_pressed()))) {
+ if (mb.is_valid() && mb->is_pressed() && ((tool_select->is_pressed() && mb->get_button_index() == MouseButton::RIGHT) || (mb->get_button_index() == MouseButton::LEFT && tool_create->is_pressed()))) {
menu->clear();
animations_menu->clear();
animations_to_add.clear();
@@ -133,7 +133,7 @@ void AnimationNodeBlendSpace2DEditor::_blend_space_gui_input(const Ref<InputEven
}
}
- if (mb.is_valid() && mb->is_pressed() && tool_select->is_pressed() && mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (mb.is_valid() && mb->is_pressed() && tool_select->is_pressed() && mb->get_button_index() == MouseButton::LEFT) {
blend_space_draw->update(); //update anyway
//try to see if a point can be selected
selected_point = -1;
@@ -173,7 +173,7 @@ void AnimationNodeBlendSpace2DEditor::_blend_space_gui_input(const Ref<InputEven
}
}
- if (mb.is_valid() && mb->is_pressed() && tool_triangle->is_pressed() && mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (mb.is_valid() && mb->is_pressed() && tool_triangle->is_pressed() && mb->get_button_index() == MouseButton::LEFT) {
blend_space_draw->update(); //update anyway
//try to see if a point can be selected
selected_point = -1;
@@ -208,7 +208,7 @@ void AnimationNodeBlendSpace2DEditor::_blend_space_gui_input(const Ref<InputEven
}
}
- if (mb.is_valid() && !mb->is_pressed() && dragging_selected_attempt && mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (mb.is_valid() && !mb->is_pressed() && dragging_selected_attempt && mb->get_button_index() == MouseButton::LEFT) {
if (dragging_selected) {
//move
Vector2 point = blend_space->get_blend_point_position(selected_point);
@@ -234,7 +234,7 @@ void AnimationNodeBlendSpace2DEditor::_blend_space_gui_input(const Ref<InputEven
blend_space_draw->update();
}
- if (mb.is_valid() && mb->is_pressed() && tool_blend->is_pressed() && mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (mb.is_valid() && mb->is_pressed() && tool_blend->is_pressed() && mb->get_button_index() == MouseButton::LEFT) {
Vector2 blend_pos = (mb->get_position() / blend_space_draw->get_size());
blend_pos.y = 1.0 - blend_pos.y;
blend_pos *= (blend_space->get_max_space() - blend_space->get_min_space());
@@ -268,7 +268,7 @@ void AnimationNodeBlendSpace2DEditor::_blend_space_gui_input(const Ref<InputEven
blend_space_draw->update();
}
- if (mm.is_valid() && tool_blend->is_pressed() && mm->get_button_mask() & MOUSE_BUTTON_MASK_LEFT) {
+ if (mm.is_valid() && tool_blend->is_pressed() && (mm->get_button_mask() & MouseButton::MASK_LEFT) != MouseButton::NONE) {
Vector2 blend_pos = (mm->get_position() / blend_space_draw->get_size());
blend_pos.y = 1.0 - blend_pos.y;
blend_pos *= (blend_space->get_max_space() - blend_space->get_min_space());
diff --git a/editor/plugins/animation_blend_tree_editor_plugin.cpp b/editor/plugins/animation_blend_tree_editor_plugin.cpp
index 55ffbf9477..75d2bed1b2 100644
--- a/editor/plugins/animation_blend_tree_editor_plugin.cpp
+++ b/editor/plugins/animation_blend_tree_editor_plugin.cpp
@@ -58,7 +58,7 @@ void AnimationNodeBlendTreeEditor::add_custom_type(const String &p_name, const R
void AnimationNodeBlendTreeEditor::remove_custom_type(const Ref<Script> &p_script) {
for (int i = 0; i < add_options.size(); i++) {
if (add_options[i].script == p_script) {
- add_options.remove(i);
+ add_options.remove_at(i);
return;
}
}
@@ -68,7 +68,7 @@ void AnimationNodeBlendTreeEditor::remove_custom_type(const Ref<Script> &p_scrip
void AnimationNodeBlendTreeEditor::_update_options_menu(bool p_has_input_ports) {
add_node->get_popup()->clear();
- add_node->get_popup()->set_size(Size2i(-1, -1));
+ add_node->get_popup()->reset_size();
for (int i = 0; i < add_options.size(); i++) {
if (p_has_input_ports && add_options[i].input_port_count == 0) {
continue;
diff --git a/editor/plugins/animation_player_editor_plugin.cpp b/editor/plugins/animation_player_editor_plugin.cpp
index ea025dad3e..226046f250 100644
--- a/editor/plugins/animation_player_editor_plugin.cpp
+++ b/editor/plugins/animation_player_editor_plugin.cpp
@@ -41,6 +41,7 @@
#include "editor/plugins/canvas_item_editor_plugin.h" // For onion skinning.
#include "editor/plugins/node_3d_editor_plugin.h" // For onion skinning.
#include "scene/main/window.h"
+#include "scene/resources/animation.h"
#include "servers/rendering_server.h"
void AnimationPlayerEditor::_node_removed(Node *p_node) {
@@ -72,7 +73,7 @@ void AnimationPlayerEditor::_notification(int p_what) {
if (player->has_animation(animname)) {
Ref<Animation> anim = player->get_animation(animname);
if (!anim.is_null()) {
- frame->set_max(anim->get_length());
+ frame->set_max((double)anim->get_length());
}
}
}
@@ -289,7 +290,7 @@ void AnimationPlayerEditor::_animation_selected(int p_which) {
track_editor->set_root(root);
}
}
- frame->set_max(anim->get_length());
+ frame->set_max((double)anim->get_length());
} else {
track_editor->set_animation(Ref<Animation>());
@@ -474,7 +475,7 @@ double AnimationPlayerEditor::_get_editor_step() const {
ERR_FAIL_COND_V(!anim.is_valid(), 0.0);
// Use more precise snapping when holding Shift
- return Input::get_singleton()->is_key_pressed(KEY_SHIFT) ? anim->get_step() * 0.25 : anim->get_step();
+ return Input::get_singleton()->is_key_pressed(Key::SHIFT) ? anim->get_step() * 0.25 : anim->get_step();
}
return 0.0;
@@ -1014,7 +1015,7 @@ void AnimationPlayerEditor::_seek_value_changed(float p_value, bool p_set, bool
Ref<Animation> anim;
anim = player->get_animation(current);
- float pos = CLAMP(anim->get_length() * (p_value / frame->get_max()), 0, anim->get_length());
+ float pos = CLAMP((double)anim->get_length() * (p_value / frame->get_max()), 0, (double)anim->get_length());
if (track_editor->is_snap_enabled()) {
pos = Math::snapped(pos, _get_editor_step());
}
@@ -1228,7 +1229,7 @@ void AnimationPlayerEditor::unhandled_key_input(const Ref<InputEvent> &p_ev) {
Ref<InputEventKey> k = p_ev;
if (is_visible_in_tree() && k.is_valid() && k->is_pressed() && !k->is_echo() && !k->is_alt_pressed() && !k->is_ctrl_pressed() && !k->is_meta_pressed()) {
switch (k->get_keycode()) {
- case KEY_A: {
+ case Key::A: {
if (!k->is_shift_pressed()) {
_play_bw_from_pressed();
} else {
@@ -1236,11 +1237,11 @@ void AnimationPlayerEditor::unhandled_key_input(const Ref<InputEvent> &p_ev) {
}
accept_event();
} break;
- case KEY_S: {
+ case Key::S: {
_stop_pressed();
accept_event();
} break;
- case KEY_D: {
+ case Key::D: {
if (!k->is_shift_pressed()) {
_play_from_pressed();
} else {
@@ -1424,7 +1425,7 @@ void AnimationPlayerEditor::_prepare_onion_layers_2() {
float pos = cpos + step_off * anim->get_step();
- bool valid = anim->has_loop() || (pos >= 0 && pos <= anim->get_length());
+ bool valid = anim->get_loop_mode() != Animation::LoopMode::LOOP_NONE || (pos >= 0 && pos <= anim->get_length());
onion.captures_valid.write[cidx] = valid;
if (valid) {
player->seek(pos, true);
diff --git a/editor/plugins/animation_state_machine_editor.cpp b/editor/plugins/animation_state_machine_editor.cpp
index a1f96f21bf..191f5d9071 100644
--- a/editor/plugins/animation_state_machine_editor.cpp
+++ b/editor/plugins/animation_state_machine_editor.cpp
@@ -66,7 +66,7 @@ void AnimationNodeStateMachineEditor::_state_machine_gui_input(const Ref<InputEv
}
Ref<InputEventKey> k = p_event;
- if (tool_select->is_pressed() && k.is_valid() && k->is_pressed() && k->get_keycode() == KEY_DELETE && !k->is_echo()) {
+ if (tool_select->is_pressed() && k.is_valid() && k->is_pressed() && k->get_keycode() == Key::KEY_DELETE && !k->is_echo()) {
if (selected_node != StringName() || selected_transition_to != StringName() || selected_transition_from != StringName()) {
_erase_selected();
accept_event();
@@ -76,7 +76,7 @@ void AnimationNodeStateMachineEditor::_state_machine_gui_input(const Ref<InputEv
Ref<InputEventMouseButton> mb = p_event;
//Add new node
- if (mb.is_valid() && mb->is_pressed() && ((tool_select->is_pressed() && mb->get_button_index() == MOUSE_BUTTON_RIGHT) || (tool_create->is_pressed() && mb->get_button_index() == MOUSE_BUTTON_LEFT))) {
+ if (mb.is_valid() && mb->is_pressed() && ((tool_select->is_pressed() && mb->get_button_index() == MouseButton::RIGHT) || (tool_create->is_pressed() && mb->get_button_index() == MouseButton::LEFT))) {
menu->clear();
animations_menu->clear();
animations_to_add.clear();
@@ -124,7 +124,7 @@ void AnimationNodeStateMachineEditor::_state_machine_gui_input(const Ref<InputEv
}
// select node or push a field inside
- if (mb.is_valid() && !mb->is_shift_pressed() && mb->is_pressed() && tool_select->is_pressed() && mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (mb.is_valid() && !mb->is_shift_pressed() && mb->is_pressed() && tool_select->is_pressed() && mb->get_button_index() == MouseButton::LEFT) {
selected_transition_from = StringName();
selected_transition_to = StringName();
selected_node = StringName();
@@ -216,7 +216,7 @@ void AnimationNodeStateMachineEditor::_state_machine_gui_input(const Ref<InputEv
}
//end moving node
- if (mb.is_valid() && dragging_selected_attempt && mb->get_button_index() == MOUSE_BUTTON_LEFT && !mb->is_pressed()) {
+ if (mb.is_valid() && dragging_selected_attempt && mb->get_button_index() == MouseButton::LEFT && !mb->is_pressed()) {
if (dragging_selected) {
Ref<AnimationNode> an = state_machine->get_node(selected_node);
updating = true;
@@ -237,7 +237,7 @@ void AnimationNodeStateMachineEditor::_state_machine_gui_input(const Ref<InputEv
}
//connect nodes
- if (mb.is_valid() && ((tool_select->is_pressed() && mb->is_shift_pressed()) || tool_connect->is_pressed()) && mb->get_button_index() == MOUSE_BUTTON_LEFT && mb->is_pressed()) {
+ if (mb.is_valid() && ((tool_select->is_pressed() && mb->is_shift_pressed()) || tool_connect->is_pressed()) && mb->get_button_index() == MouseButton::LEFT && mb->is_pressed()) {
for (int i = node_rects.size() - 1; i >= 0; i--) { //inverse to draw order
if (node_rects[i].node.has_point(mb->get_position())) { //select node since nothing else was selected
connecting = true;
@@ -250,7 +250,7 @@ void AnimationNodeStateMachineEditor::_state_machine_gui_input(const Ref<InputEv
}
//end connecting nodes
- if (mb.is_valid() && connecting && mb->get_button_index() == MOUSE_BUTTON_LEFT && !mb->is_pressed()) {
+ if (mb.is_valid() && connecting && mb->get_button_index() == MouseButton::LEFT && !mb->is_pressed()) {
if (connecting_to_node != StringName()) {
if (state_machine->has_transition(connecting_from, connecting_to_node)) {
EditorNode::get_singleton()->show_warning(TTR("Transition exists!"));
@@ -284,7 +284,7 @@ void AnimationNodeStateMachineEditor::_state_machine_gui_input(const Ref<InputEv
Ref<InputEventMouseMotion> mm = p_event;
//pan window
- if (mm.is_valid() && mm->get_button_mask() & MOUSE_BUTTON_MASK_MIDDLE) {
+ if (mm.is_valid() && (mm->get_button_mask() & MouseButton::MASK_MIDDLE) != MouseButton::NONE) {
h_scroll->set_value(h_scroll->get_value() - mm->get_relative().x);
v_scroll->set_value(v_scroll->get_value() - mm->get_relative().y);
}
diff --git a/editor/plugins/asset_library_editor_plugin.cpp b/editor/plugins/asset_library_editor_plugin.cpp
index aacfc3e305..1a216b3862 100644
--- a/editor/plugins/asset_library_editor_plugin.cpp
+++ b/editor/plugins/asset_library_editor_plugin.cpp
@@ -620,7 +620,7 @@ void EditorAssetLibrary::unhandled_key_input(const Ref<InputEvent> &p_event) {
const Ref<InputEventKey> key = p_event;
if (key.is_valid() && key->is_pressed()) {
- if (key->get_keycode_with_modifiers() == (KEY_MASK_CMD | KEY_F) && is_visible_in_tree()) {
+ if (key->get_keycode_with_modifiers() == (KeyModifierMask::CMD | Key::F) && is_visible_in_tree()) {
filter->grab_focus();
filter->select_all();
accept_event();
diff --git a/editor/plugins/audio_stream_editor_plugin.cpp b/editor/plugins/audio_stream_editor_plugin.cpp
index 482c08f50a..c76713f534 100644
--- a/editor/plugins/audio_stream_editor_plugin.cpp
+++ b/editor/plugins/audio_stream_editor_plugin.cpp
@@ -157,7 +157,7 @@ void AudioStreamEditor::_draw_indicator() {
void AudioStreamEditor::_on_input_indicator(Ref<InputEvent> p_event) {
const Ref<InputEventMouseButton> mb = p_event;
- if (mb.is_valid() && mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (mb.is_valid() && mb->get_button_index() == MouseButton::LEFT) {
if (mb->is_pressed()) {
_seek_to(mb->get_position().x);
}
@@ -232,7 +232,7 @@ AudioStreamEditor::AudioStreamEditor() {
hbox->add_child(_play_button);
_play_button->set_focus_mode(Control::FOCUS_NONE);
_play_button->connect("pressed", callable_mp(this, &AudioStreamEditor::_play));
- _play_button->set_shortcut(ED_SHORTCUT("inspector/audio_preview_play_pause", TTR("Audio Preview Play/Pause"), KEY_SPACE));
+ _play_button->set_shortcut(ED_SHORTCUT("inspector/audio_preview_play_pause", TTR("Audio Preview Play/Pause"), Key::SPACE));
_stop_button = memnew(Button);
_stop_button->set_flat(true);
diff --git a/editor/plugins/canvas_item_editor_plugin.cpp b/editor/plugins/canvas_item_editor_plugin.cpp
index 0e1bdf0155..a3378d1550 100644
--- a/editor/plugins/canvas_item_editor_plugin.cpp
+++ b/editor/plugins/canvas_item_editor_plugin.cpp
@@ -242,7 +242,7 @@ bool CanvasItemEditor::_is_node_movable(const Node *p_node, bool p_popup_warning
}
if (Object::cast_to<Control>(p_node) && Object::cast_to<Container>(p_node->get_parent())) {
if (p_popup_warning) {
- _popup_warning_temporarily(warning_child_of_container, 3.0);
+ EditorToaster::get_singleton()->popup_str("Children of a container get their position and size determined only by their parent.", EditorToaster::SEVERITY_WARNING);
}
return false;
}
@@ -333,7 +333,7 @@ Point2 CanvasItemEditor::snap_point(Point2 p_target, unsigned int p_modes, unsig
snap_target[0] = SNAP_TARGET_NONE;
snap_target[1] = SNAP_TARGET_NONE;
- bool is_snap_active = smart_snap_active ^ Input::get_singleton()->is_key_pressed(KEY_CTRL);
+ bool is_snap_active = smart_snap_active ^ Input::get_singleton()->is_key_pressed(Key::CTRL);
// Smart snap using the canvas position
Vector2 output = p_target;
@@ -461,7 +461,7 @@ Point2 CanvasItemEditor::snap_point(Point2 p_target, unsigned int p_modes, unsig
}
real_t CanvasItemEditor::snap_angle(real_t p_target, real_t p_start) const {
- if (((smart_snap_active || snap_rotation) ^ Input::get_singleton()->is_key_pressed(KEY_CTRL)) && snap_rotation_step != 0) {
+ if (((smart_snap_active || snap_rotation) ^ Input::get_singleton()->is_key_pressed(Key::CTRL)) && snap_rotation_step != 0) {
if (snap_relative) {
return Math::snapped(p_target - snap_rotation_offset, snap_rotation_step) + snap_rotation_offset + (p_start - (int)(p_start / snap_rotation_step) * snap_rotation_step);
} else {
@@ -482,7 +482,7 @@ void CanvasItemEditor::unhandled_key_input(const Ref<InputEvent> &p_ev) {
}
if (k.is_valid()) {
- if (k->get_keycode() == KEY_CTRL || k->get_keycode() == KEY_ALT || k->get_keycode() == KEY_SHIFT) {
+ if (k->get_keycode() == Key::CTRL || k->get_keycode() == Key::ALT || k->get_keycode() == Key::SHIFT) {
viewport->update();
}
@@ -658,7 +658,7 @@ void CanvasItemEditor::_get_canvas_items_at_pos(const Point2 &p_pos, Vector<_Sel
//Remove the item if invalid
if (!canvas_item || duplicate || (canvas_item != scene && canvas_item->get_owner() != scene && !scene->is_editable_instance(canvas_item->get_owner())) || (!p_allow_locked && _is_node_locked(canvas_item))) {
- r_items.remove(i);
+ r_items.remove_at(i);
i--;
} else {
r_items.write[i].item = canvas_item;
@@ -877,7 +877,7 @@ void CanvasItemEditor::_selection_result_pressed(int p_result) {
void CanvasItemEditor::_selection_menu_hide() {
selection_results.clear();
selection_menu->clear();
- selection_menu->set_size(Vector2(0, 0));
+ selection_menu->reset_size();
}
void CanvasItemEditor::_add_node_pressed(int p_result) {
@@ -950,7 +950,7 @@ bool CanvasItemEditor::_gui_input_rulers_and_guides(const Ref<InputEvent> &p_eve
}
// Start dragging a guide
- if (b.is_valid() && b->get_button_index() == MOUSE_BUTTON_LEFT && b->is_pressed()) {
+ if (b.is_valid() && b->get_button_index() == MouseButton::LEFT && b->is_pressed()) {
// Press button
if (b->get_position().x < RULER_WIDTH && b->get_position().y < RULER_WIDTH) {
// Drag a new double guide
@@ -1009,7 +1009,7 @@ bool CanvasItemEditor::_gui_input_rulers_and_guides(const Ref<InputEvent> &p_eve
}
// Release confirms the guide move
- if (b.is_valid() && b->get_button_index() == MOUSE_BUTTON_LEFT && !b->is_pressed()) {
+ if (b.is_valid() && b->get_button_index() == MouseButton::LEFT && !b->is_pressed()) {
if (show_guides && EditorNode::get_singleton()->get_edited_scene()) {
Transform2D xform = viewport_scrollable->get_transform() * transform;
@@ -1045,7 +1045,7 @@ bool CanvasItemEditor::_gui_input_rulers_and_guides(const Ref<InputEvent> &p_eve
}
} else {
if (dragged_guide_index >= 0) {
- vguides.remove(dragged_guide_index);
+ vguides.remove_at(dragged_guide_index);
undo_redo->create_action(TTR("Remove Vertical Guide"));
if (vguides.is_empty()) {
undo_redo->add_do_method(EditorNode::get_singleton()->get_edited_scene(), "remove_meta", "_edit_vertical_guides_");
@@ -1078,7 +1078,7 @@ bool CanvasItemEditor::_gui_input_rulers_and_guides(const Ref<InputEvent> &p_eve
}
} else {
if (dragged_guide_index >= 0) {
- hguides.remove(dragged_guide_index);
+ hguides.remove_at(dragged_guide_index);
undo_redo->create_action(TTR("Remove Horizontal Guide"));
if (hguides.is_empty()) {
undo_redo->add_do_method(EditorNode::get_singleton()->get_edited_scene(), "remove_meta", "_edit_horizontal_guides_");
@@ -1123,7 +1123,7 @@ bool CanvasItemEditor::_gui_input_zoom_or_pan(const Ref<InputEvent> &p_event, bo
if (pan_on_scroll) {
// Perform horizontal scrolling first so we can check for Shift being held.
if (b->is_pressed() &&
- (b->get_button_index() == MOUSE_BUTTON_WHEEL_LEFT || (b->is_shift_pressed() && b->get_button_index() == MOUSE_BUTTON_WHEEL_UP))) {
+ (b->get_button_index() == MouseButton::WHEEL_LEFT || (b->is_shift_pressed() && b->get_button_index() == MouseButton::WHEEL_UP))) {
// Pan left
view_offset.x -= int(EditorSettings::get_singleton()->get("editors/2d/pan_speed")) / zoom * b->get_factor();
update_viewport();
@@ -1131,7 +1131,7 @@ bool CanvasItemEditor::_gui_input_zoom_or_pan(const Ref<InputEvent> &p_event, bo
}
if (b->is_pressed() &&
- (b->get_button_index() == MOUSE_BUTTON_WHEEL_RIGHT || (b->is_shift_pressed() && b->get_button_index() == MOUSE_BUTTON_WHEEL_DOWN))) {
+ (b->get_button_index() == MouseButton::WHEEL_RIGHT || (b->is_shift_pressed() && b->get_button_index() == MouseButton::WHEEL_DOWN))) {
// Pan right
view_offset.x += int(EditorSettings::get_singleton()->get("editors/2d/pan_speed")) / zoom * b->get_factor();
update_viewport();
@@ -1139,13 +1139,13 @@ bool CanvasItemEditor::_gui_input_zoom_or_pan(const Ref<InputEvent> &p_event, bo
}
}
- if (b->is_pressed() && b->get_button_index() == MOUSE_BUTTON_WHEEL_DOWN) {
+ if (b->is_pressed() && b->get_button_index() == MouseButton::WHEEL_DOWN) {
// Scroll or pan down
if (pan_on_scroll) {
view_offset.y += int(EditorSettings::get_singleton()->get("editors/2d/pan_speed")) / zoom * b->get_factor();
update_viewport();
} else {
- zoom_widget->set_zoom_by_increments(-1, Input::get_singleton()->is_key_pressed(KEY_ALT));
+ zoom_widget->set_zoom_by_increments(-1, Input::get_singleton()->is_key_pressed(Key::ALT));
if (!Math::is_equal_approx(b->get_factor(), 1.0f)) {
// Handle high-precision (analog) scrolling.
zoom_widget->set_zoom(zoom * ((zoom_widget->get_zoom() / zoom - 1.f) * b->get_factor() + 1.f));
@@ -1155,13 +1155,13 @@ bool CanvasItemEditor::_gui_input_zoom_or_pan(const Ref<InputEvent> &p_event, bo
return true;
}
- if (b->is_pressed() && b->get_button_index() == MOUSE_BUTTON_WHEEL_UP) {
+ if (b->is_pressed() && b->get_button_index() == MouseButton::WHEEL_UP) {
// Scroll or pan up
if (pan_on_scroll) {
view_offset.y -= int(EditorSettings::get_singleton()->get("editors/2d/pan_speed")) / zoom * b->get_factor();
update_viewport();
} else {
- zoom_widget->set_zoom_by_increments(1, Input::get_singleton()->is_key_pressed(KEY_ALT));
+ zoom_widget->set_zoom_by_increments(1, Input::get_singleton()->is_key_pressed(Key::ALT));
if (!Math::is_equal_approx(b->get_factor(), 1.0f)) {
// Handle high-precision (analog) scrolling.
zoom_widget->set_zoom(zoom * ((zoom_widget->get_zoom() / zoom - 1.f) * b->get_factor() + 1.f));
@@ -1173,16 +1173,16 @@ bool CanvasItemEditor::_gui_input_zoom_or_pan(const Ref<InputEvent> &p_event, bo
if (!panning) {
if (b->is_pressed() &&
- (b->get_button_index() == MOUSE_BUTTON_MIDDLE ||
- (b->get_button_index() == MOUSE_BUTTON_LEFT && tool == TOOL_PAN) ||
- (b->get_button_index() == MOUSE_BUTTON_LEFT && !EditorSettings::get_singleton()->get("editors/2d/simple_panning") && pan_pressed))) {
+ (b->get_button_index() == MouseButton::MIDDLE ||
+ (b->get_button_index() == MouseButton::LEFT && tool == TOOL_PAN) ||
+ (b->get_button_index() == MouseButton::LEFT && !EditorSettings::get_singleton()->get("editors/2d/simple_panning") && pan_pressed))) {
// Pan the viewport
panning = true;
}
}
if (panning) {
- if (!b->is_pressed() && (pan_on_scroll || (b->get_button_index() != MOUSE_BUTTON_WHEEL_DOWN && b->get_button_index() != MOUSE_BUTTON_WHEEL_UP))) {
+ if (!b->is_pressed() && (pan_on_scroll || (b->get_button_index() != MouseButton::WHEEL_DOWN && b->get_button_index() != MouseButton::WHEEL_UP))) {
// Stop panning the viewport (for any mouse button press except zooming)
panning = false;
}
@@ -1294,8 +1294,8 @@ bool CanvasItemEditor::_gui_input_pivot(const Ref<InputEvent> &p_event) {
// Drag the pivot (in pivot mode / with V key)
if (drag_type == DRAG_NONE) {
- if ((b.is_valid() && b->is_pressed() && b->get_button_index() == MOUSE_BUTTON_LEFT && tool == TOOL_EDIT_PIVOT) ||
- (k.is_valid() && k->is_pressed() && !k->is_echo() && k->get_keycode() == KEY_V && tool == TOOL_SELECT && k->get_modifiers_mask() == 0)) {
+ if ((b.is_valid() && b->is_pressed() && b->get_button_index() == MouseButton::LEFT && tool == TOOL_EDIT_PIVOT) ||
+ (k.is_valid() && k->is_pressed() && !k->is_echo() && k->get_keycode() == Key::V && tool == TOOL_SELECT && k->get_modifiers_mask() == Key::NONE)) {
List<CanvasItem *> selection = _get_edited_canvas_items();
// Filters the selection with nodes that allow setting the pivot
@@ -1345,8 +1345,8 @@ bool CanvasItemEditor::_gui_input_pivot(const Ref<InputEvent> &p_event) {
// Confirm the pivot move
if (drag_selection.size() >= 1 &&
- ((b.is_valid() && !b->is_pressed() && b->get_button_index() == MOUSE_BUTTON_LEFT && tool == TOOL_EDIT_PIVOT) ||
- (k.is_valid() && !k->is_pressed() && k->get_keycode() == KEY_V))) {
+ ((b.is_valid() && !b->is_pressed() && b->get_button_index() == MouseButton::LEFT && tool == TOOL_EDIT_PIVOT) ||
+ (k.is_valid() && !k->is_pressed() && k->get_keycode() == Key::V))) {
_commit_canvas_item_state(
drag_selection,
vformat(
@@ -1359,7 +1359,7 @@ bool CanvasItemEditor::_gui_input_pivot(const Ref<InputEvent> &p_event) {
}
// Cancel a drag
- if (b.is_valid() && b->get_button_index() == MOUSE_BUTTON_RIGHT && b->is_pressed()) {
+ if (b.is_valid() && b->get_button_index() == MouseButton::RIGHT && b->is_pressed()) {
_restore_canvas_item_state(drag_selection);
drag_type = DRAG_NONE;
viewport->update();
@@ -1375,7 +1375,7 @@ bool CanvasItemEditor::_gui_input_rotate(const Ref<InputEvent> &p_event) {
// Start rotation
if (drag_type == DRAG_NONE) {
- if (b.is_valid() && b->get_button_index() == MOUSE_BUTTON_LEFT && b->is_pressed()) {
+ if (b.is_valid() && b->get_button_index() == MouseButton::LEFT && b->is_pressed()) {
if ((b->is_command_pressed() && !b->is_alt_pressed() && tool == TOOL_SELECT) || tool == TOOL_ROTATE) {
List<CanvasItem *> selection = _get_edited_canvas_items();
@@ -1418,7 +1418,7 @@ bool CanvasItemEditor::_gui_input_rotate(const Ref<InputEvent> &p_event) {
}
// Confirms the node rotation
- if (b.is_valid() && b->get_button_index() == MOUSE_BUTTON_LEFT && !b->is_pressed()) {
+ if (b.is_valid() && b->get_button_index() == MouseButton::LEFT && !b->is_pressed()) {
if (drag_selection.size() != 1) {
_commit_canvas_item_state(
drag_selection,
@@ -1442,7 +1442,7 @@ bool CanvasItemEditor::_gui_input_rotate(const Ref<InputEvent> &p_event) {
}
// Cancel a drag
- if (b.is_valid() && b->get_button_index() == MOUSE_BUTTON_RIGHT && b->is_pressed()) {
+ if (b.is_valid() && b->get_button_index() == MouseButton::RIGHT && b->is_pressed()) {
_restore_canvas_item_state(drag_selection);
drag_type = DRAG_NONE;
viewport->update();
@@ -1456,7 +1456,7 @@ bool CanvasItemEditor::_gui_input_open_scene_on_double_click(const Ref<InputEven
Ref<InputEventMouseButton> b = p_event;
// Open a sub-scene on double-click
- if (b.is_valid() && b->get_button_index() == MOUSE_BUTTON_LEFT && b->is_pressed() && b->is_double_click() && tool == TOOL_SELECT) {
+ if (b.is_valid() && b->get_button_index() == MouseButton::LEFT && b->is_pressed() && b->is_double_click() && tool == TOOL_SELECT) {
List<CanvasItem *> selection = _get_edited_canvas_items();
if (selection.size() == 1) {
CanvasItem *canvas_item = selection[0];
@@ -1475,7 +1475,7 @@ bool CanvasItemEditor::_gui_input_anchors(const Ref<InputEvent> &p_event) {
// Starts anchor dragging if needed
if (drag_type == DRAG_NONE) {
- if (b.is_valid() && b->get_button_index() == MOUSE_BUTTON_LEFT && b->is_pressed() && tool == TOOL_SELECT) {
+ if (b.is_valid() && b->get_button_index() == MouseButton::LEFT && b->is_pressed() && tool == TOOL_SELECT) {
List<CanvasItem *> selection = _get_edited_canvas_items();
if (selection.size() == 1) {
Control *control = Object::cast_to<Control>(selection[0]);
@@ -1595,7 +1595,7 @@ bool CanvasItemEditor::_gui_input_anchors(const Ref<InputEvent> &p_event) {
}
// Confirms new anchor position
- if (drag_selection.size() >= 1 && b.is_valid() && b->get_button_index() == MOUSE_BUTTON_LEFT && !b->is_pressed()) {
+ if (drag_selection.size() >= 1 && b.is_valid() && b->get_button_index() == MouseButton::LEFT && !b->is_pressed()) {
_commit_canvas_item_state(
drag_selection,
vformat(TTR("Move CanvasItem \"%s\" Anchor"), drag_selection[0]->get_name()));
@@ -1604,7 +1604,7 @@ bool CanvasItemEditor::_gui_input_anchors(const Ref<InputEvent> &p_event) {
}
// Cancel a drag
- if (b.is_valid() && b->get_button_index() == MOUSE_BUTTON_RIGHT && b->is_pressed()) {
+ if (b.is_valid() && b->get_button_index() == MouseButton::RIGHT && b->is_pressed()) {
_restore_canvas_item_state(drag_selection);
drag_type = DRAG_NONE;
viewport->update();
@@ -1620,7 +1620,7 @@ bool CanvasItemEditor::_gui_input_resize(const Ref<InputEvent> &p_event) {
// Drag resize handles
if (drag_type == DRAG_NONE) {
- if (b.is_valid() && b->get_button_index() == MOUSE_BUTTON_LEFT && b->is_pressed() && tool == TOOL_SELECT) {
+ if (b.is_valid() && b->get_button_index() == MouseButton::LEFT && b->is_pressed() && tool == TOOL_SELECT) {
List<CanvasItem *> selection = _get_edited_canvas_items();
if (selection.size() == 1) {
CanvasItem *canvas_item = selection[0];
@@ -1774,7 +1774,7 @@ bool CanvasItemEditor::_gui_input_resize(const Ref<InputEvent> &p_event) {
}
// Confirm resize
- if (drag_selection.size() >= 1 && b.is_valid() && b->get_button_index() == MOUSE_BUTTON_LEFT && !b->is_pressed()) {
+ if (drag_selection.size() >= 1 && b.is_valid() && b->get_button_index() == MouseButton::LEFT && !b->is_pressed()) {
const Node2D *node2d = Object::cast_to<Node2D>(drag_selection[0]);
if (node2d) {
// Extends from Node2D.
@@ -1811,7 +1811,7 @@ bool CanvasItemEditor::_gui_input_resize(const Ref<InputEvent> &p_event) {
}
// Cancel a drag
- if (b.is_valid() && b->get_button_index() == MOUSE_BUTTON_RIGHT && b->is_pressed()) {
+ if (b.is_valid() && b->get_button_index() == MouseButton::RIGHT && b->is_pressed()) {
_restore_canvas_item_state(drag_selection);
snap_target[0] = SNAP_TARGET_NONE;
snap_target[1] = SNAP_TARGET_NONE;
@@ -1829,7 +1829,7 @@ bool CanvasItemEditor::_gui_input_scale(const Ref<InputEvent> &p_event) {
// Drag resize handles
if (drag_type == DRAG_NONE) {
- if (b.is_valid() && b->get_button_index() == MOUSE_BUTTON_LEFT && b->is_pressed() && ((b->is_alt_pressed() && b->is_ctrl_pressed()) || tool == TOOL_SCALE)) {
+ if (b.is_valid() && b->get_button_index() == MouseButton::LEFT && b->is_pressed() && ((b->is_alt_pressed() && b->is_ctrl_pressed()) || tool == TOOL_SCALE)) {
List<CanvasItem *> selection = _get_edited_canvas_items();
if (selection.size() == 1) {
CanvasItem *canvas_item = selection[0];
@@ -1876,7 +1876,7 @@ bool CanvasItemEditor::_gui_input_scale(const Ref<InputEvent> &p_event) {
Transform2D simple_xform = (viewport->get_transform() * unscaled_transform).affine_inverse() * transform;
bool uniform = m->is_shift_pressed();
- bool is_ctrl = Input::get_singleton()->is_key_pressed(KEY_CTRL);
+ bool is_ctrl = Input::get_singleton()->is_key_pressed(Key::CTRL);
Point2 drag_from_local = simple_xform.xform(drag_from);
Point2 drag_to_local = simple_xform.xform(drag_to);
@@ -1925,7 +1925,7 @@ bool CanvasItemEditor::_gui_input_scale(const Ref<InputEvent> &p_event) {
}
// Confirm resize
- if (b.is_valid() && b->get_button_index() == MOUSE_BUTTON_LEFT && !b->is_pressed()) {
+ if (b.is_valid() && b->get_button_index() == MouseButton::LEFT && !b->is_pressed()) {
if (drag_selection.size() != 1) {
_commit_canvas_item_state(
drag_selection,
@@ -1950,7 +1950,7 @@ bool CanvasItemEditor::_gui_input_scale(const Ref<InputEvent> &p_event) {
}
// Cancel a drag
- if (b.is_valid() && b->get_button_index() == MOUSE_BUTTON_RIGHT && b->is_pressed()) {
+ if (b.is_valid() && b->get_button_index() == MouseButton::RIGHT && b->is_pressed()) {
_restore_canvas_item_state(drag_selection);
drag_type = DRAG_NONE;
viewport->update();
@@ -1967,7 +1967,7 @@ bool CanvasItemEditor::_gui_input_move(const Ref<InputEvent> &p_event) {
if (drag_type == DRAG_NONE) {
//Start moving the nodes
- if (b.is_valid() && b->get_button_index() == MOUSE_BUTTON_LEFT && b->is_pressed()) {
+ if (b.is_valid() && b->get_button_index() == MouseButton::LEFT && b->is_pressed()) {
if ((b->is_alt_pressed() && !b->is_ctrl_pressed()) || tool == TOOL_MOVE) {
List<CanvasItem *> selection = _get_edited_canvas_items();
@@ -2050,7 +2050,7 @@ bool CanvasItemEditor::_gui_input_move(const Ref<InputEvent> &p_event) {
}
// Confirm the move (only if it was moved)
- if (b.is_valid() && !b->is_pressed() && b->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (b.is_valid() && !b->is_pressed() && b->get_button_index() == MouseButton::LEFT) {
if (transform.affine_inverse().xform(b->get_position()) != drag_from) {
if (drag_selection.size() != 1) {
_commit_canvas_item_state(
@@ -2083,7 +2083,7 @@ bool CanvasItemEditor::_gui_input_move(const Ref<InputEvent> &p_event) {
}
// Cancel a drag
- if (b.is_valid() && b->get_button_index() == MOUSE_BUTTON_RIGHT && b->is_pressed()) {
+ if (b.is_valid() && b->get_button_index() == MouseButton::RIGHT && b->is_pressed()) {
_restore_canvas_item_state(drag_selection, true);
snap_target[0] = SNAP_TARGET_NONE;
snap_target[1] = SNAP_TARGET_NONE;
@@ -2095,7 +2095,7 @@ bool CanvasItemEditor::_gui_input_move(const Ref<InputEvent> &p_event) {
// Move the canvas items with the arrow keys
if (k.is_valid() && k->is_pressed() && (tool == TOOL_SELECT || tool == TOOL_MOVE) &&
- (k->get_keycode() == KEY_UP || k->get_keycode() == KEY_DOWN || k->get_keycode() == KEY_LEFT || k->get_keycode() == KEY_RIGHT)) {
+ (k->get_keycode() == Key::UP || k->get_keycode() == Key::DOWN || k->get_keycode() == Key::LEFT || k->get_keycode() == Key::RIGHT)) {
if (!k->is_echo()) {
// Start moving the canvas items with the keyboard
drag_selection = _get_edited_canvas_items();
@@ -2112,13 +2112,13 @@ bool CanvasItemEditor::_gui_input_move(const Ref<InputEvent> &p_event) {
bool move_local_base_rotated = k->is_ctrl_pressed() || k->is_meta_pressed();
Vector2 dir;
- if (k->get_keycode() == KEY_UP) {
+ if (k->get_keycode() == Key::UP) {
dir += Vector2(0, -1);
- } else if (k->get_keycode() == KEY_DOWN) {
+ } else if (k->get_keycode() == Key::DOWN) {
dir += Vector2(0, 1);
- } else if (k->get_keycode() == KEY_LEFT) {
+ } else if (k->get_keycode() == Key::LEFT) {
dir += Vector2(-1, 0);
- } else if (k->get_keycode() == KEY_RIGHT) {
+ } else if (k->get_keycode() == Key::RIGHT) {
dir += Vector2(1, 0);
}
if (k->is_shift_pressed()) {
@@ -2166,12 +2166,12 @@ bool CanvasItemEditor::_gui_input_move(const Ref<InputEvent> &p_event) {
}
if (k.is_valid() && !k->is_pressed() && drag_type == DRAG_KEY_MOVE && (tool == TOOL_SELECT || tool == TOOL_MOVE) &&
- (k->get_keycode() == KEY_UP || k->get_keycode() == KEY_DOWN || k->get_keycode() == KEY_LEFT || k->get_keycode() == KEY_RIGHT)) {
+ (k->get_keycode() == Key::UP || k->get_keycode() == Key::DOWN || k->get_keycode() == Key::LEFT || k->get_keycode() == Key::RIGHT)) {
// Confirm canvas items move by arrow keys
- if ((!Input::get_singleton()->is_key_pressed(KEY_UP)) &&
- (!Input::get_singleton()->is_key_pressed(KEY_DOWN)) &&
- (!Input::get_singleton()->is_key_pressed(KEY_LEFT)) &&
- (!Input::get_singleton()->is_key_pressed(KEY_RIGHT))) {
+ if ((!Input::get_singleton()->is_key_pressed(Key::UP)) &&
+ (!Input::get_singleton()->is_key_pressed(Key::DOWN)) &&
+ (!Input::get_singleton()->is_key_pressed(Key::LEFT)) &&
+ (!Input::get_singleton()->is_key_pressed(Key::RIGHT))) {
if (drag_selection.size() > 1) {
_commit_canvas_item_state(
drag_selection,
@@ -2192,7 +2192,7 @@ bool CanvasItemEditor::_gui_input_move(const Ref<InputEvent> &p_event) {
return true;
}
- return (k.is_valid() && (k->get_keycode() == KEY_UP || k->get_keycode() == KEY_DOWN || k->get_keycode() == KEY_LEFT || k->get_keycode() == KEY_RIGHT)); // Accept the key event in any case
+ return (k.is_valid() && (k->get_keycode() == Key::UP || k->get_keycode() == Key::DOWN || k->get_keycode() == Key::LEFT || k->get_keycode() == Key::RIGHT)); // Accept the key event in any case
}
bool CanvasItemEditor::_gui_input_select(const Ref<InputEvent> &p_event) {
@@ -2202,8 +2202,8 @@ bool CanvasItemEditor::_gui_input_select(const Ref<InputEvent> &p_event) {
if (drag_type == DRAG_NONE) {
if (b.is_valid() &&
- ((b->get_button_index() == MOUSE_BUTTON_RIGHT && b->is_alt_pressed() && tool == TOOL_SELECT) ||
- (b->get_button_index() == MOUSE_BUTTON_LEFT && tool == TOOL_LIST_SELECT))) {
+ ((b->get_button_index() == MouseButton::RIGHT && b->is_alt_pressed() && tool == TOOL_SELECT) ||
+ (b->get_button_index() == MouseButton::LEFT && tool == TOOL_LIST_SELECT))) {
// Popup the selection menu list
Point2 click = transform.affine_inverse().xform(b->get_position());
@@ -2264,15 +2264,15 @@ bool CanvasItemEditor::_gui_input_select(const Ref<InputEvent> &p_event) {
}
}
- if (b.is_valid() && b->is_pressed() && b->get_button_index() == MOUSE_BUTTON_RIGHT && b->is_ctrl_pressed()) {
- add_node_menu->set_position(get_global_transform().xform(get_local_mouse_position()));
- add_node_menu->set_size(Vector2(1, 1));
+ if (b.is_valid() && b->is_pressed() && b->get_button_index() == MouseButton::RIGHT) {
+ add_node_menu->reset_size();
+ add_node_menu->set_position(get_screen_position() + b->get_position());
add_node_menu->popup();
node_create_position = transform.affine_inverse().xform((get_local_mouse_position()));
return true;
}
- if (b.is_valid() && b->get_button_index() == MOUSE_BUTTON_LEFT && b->is_pressed() && tool == TOOL_SELECT) {
+ if (b.is_valid() && b->get_button_index() == MouseButton::LEFT && b->is_pressed() && tool == TOOL_SELECT) {
// Single item selection
Point2 click = transform.affine_inverse().xform(b->get_position());
@@ -2348,7 +2348,7 @@ bool CanvasItemEditor::_gui_input_select(const Ref<InputEvent> &p_event) {
}
if (drag_type == DRAG_BOX_SELECTION) {
- if (b.is_valid() && !b->is_pressed() && b->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (b.is_valid() && !b->is_pressed() && b->get_button_index() == MouseButton::LEFT) {
// Confirms box selection
Node *scene = editor->get_edited_scene();
if (scene) {
@@ -2377,7 +2377,7 @@ bool CanvasItemEditor::_gui_input_select(const Ref<InputEvent> &p_event) {
return true;
}
- if (b.is_valid() && b->is_pressed() && b->get_button_index() == MOUSE_BUTTON_RIGHT) {
+ if (b.is_valid() && b->is_pressed() && b->get_button_index() == MouseButton::RIGHT) {
// Cancel box selection
drag_type = DRAG_NONE;
viewport->update();
@@ -2392,7 +2392,7 @@ bool CanvasItemEditor::_gui_input_select(const Ref<InputEvent> &p_event) {
}
}
- if (k.is_valid() && k->is_pressed() && k->get_keycode() == KEY_ESCAPE && drag_type == DRAG_NONE && tool == TOOL_SELECT) {
+ if (k.is_valid() && k->is_pressed() && k->get_keycode() == Key::ESCAPE && drag_type == DRAG_NONE && tool == TOOL_SELECT) {
// Unselect everything
editor_selection->clear();
viewport->update();
@@ -2414,7 +2414,7 @@ bool CanvasItemEditor::_gui_input_ruler_tool(const Ref<InputEvent> &p_event) {
ruler_tool_origin = snap_point(viewport->get_local_mouse_position() / zoom + view_offset);
}
- if (b.is_valid() && b->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (b.is_valid() && b->get_button_index() == MouseButton::LEFT) {
if (b->is_pressed()) {
ruler_tool_active = true;
} else {
@@ -3354,8 +3354,8 @@ void CanvasItemEditor::_draw_selection() {
}
// Draw the move handles
- bool is_ctrl = Input::get_singleton()->is_key_pressed(KEY_CTRL);
- bool is_alt = Input::get_singleton()->is_key_pressed(KEY_ALT);
+ bool is_ctrl = Input::get_singleton()->is_key_pressed(Key::CTRL);
+ bool is_alt = Input::get_singleton()->is_key_pressed(Key::ALT);
if (tool == TOOL_MOVE && show_transformation_gizmos) {
if (_is_node_movable(canvas_item)) {
Transform2D unscaled_transform = (xform * canvas_item->get_transform().affine_inverse() * canvas_item->_edit_get_transform()).orthonormalized();
@@ -3391,7 +3391,7 @@ void CanvasItemEditor::_draw_selection() {
Transform2D simple_xform = viewport->get_transform() * unscaled_transform;
Size2 scale_factor = Size2(SCALE_HANDLE_DISTANCE, SCALE_HANDLE_DISTANCE);
- bool uniform = Input::get_singleton()->is_key_pressed(KEY_SHIFT);
+ bool uniform = Input::get_singleton()->is_key_pressed(Key::SHIFT);
Point2 offset = (simple_xform.affine_inverse().xform(drag_to) - simple_xform.affine_inverse().xform(drag_from)) * zoom;
if (drag_type == DRAG_SCALE_X) {
@@ -3665,8 +3665,6 @@ void CanvasItemEditor::_draw_viewport() {
group_button->set_disabled(selection.is_empty());
ungroup_button->set_visible(all_group);
- info_overlay->set_offset(SIDE_LEFT, (show_rulers ? RULER_WIDTH : 0) + 10);
-
_draw_grid();
_draw_ruler_tool();
_draw_axis();
@@ -3919,11 +3917,6 @@ void CanvasItemEditor::_notification(int p_what) {
anchors_popup->add_icon_item(get_theme_icon(SNAME("ControlAlignWide"), SNAME("EditorIcons")), TTR("Full Rect"), ANCHORS_PRESET_WIDE);
anchor_mode_button->set_icon(get_theme_icon(SNAME("Anchor"), SNAME("EditorIcons")));
-
- info_overlay->get_theme()->set_stylebox("normal", "Label", get_theme_stylebox(SNAME("CanvasItemInfoOverlay"), SNAME("EditorStyles")));
- warning_child_of_container->add_theme_color_override("font_color", get_theme_color(SNAME("warning_color"), SNAME("Editor")));
- warning_child_of_container->add_theme_font_override("font", get_theme_font(SNAME("main"), SNAME("EditorFonts")));
- warning_child_of_container->add_theme_font_size_override("font_size", get_theme_font_size(SNAME("main_size"), SNAME("EditorFonts")));
}
if (p_what == NOTIFICATION_VISIBILITY_CHANGED) {
@@ -4079,34 +4072,6 @@ void CanvasItemEditor::_update_scrollbars() {
updating_scroll = false;
}
-void CanvasItemEditor::_popup_warning_depop(Control *p_control) {
- ERR_FAIL_COND(!popup_temporarily_timers.has(p_control));
-
- Timer *timer = popup_temporarily_timers[p_control];
- timer->queue_delete();
- p_control->hide();
- popup_temporarily_timers.erase(p_control);
- info_overlay->set_offset(SIDE_LEFT, (show_rulers ? RULER_WIDTH : 0) + 10);
-}
-
-void CanvasItemEditor::_popup_warning_temporarily(Control *p_control, const double p_duration) {
- Timer *timer;
- if (!popup_temporarily_timers.has(p_control)) {
- timer = memnew(Timer);
- timer->connect("timeout", callable_mp(this, &CanvasItemEditor::_popup_warning_depop), varray(p_control));
- timer->set_one_shot(true);
- add_child(timer);
-
- popup_temporarily_timers[p_control] = timer;
- } else {
- timer = popup_temporarily_timers[p_control];
- }
-
- timer->start(p_duration);
- p_control->show();
- info_overlay->set_offset(SIDE_LEFT, (show_rulers ? RULER_WIDTH : 0) + 10);
-}
-
void CanvasItemEditor::_update_scroll(real_t) {
if (updating_scroll) {
return;
@@ -5136,19 +5101,6 @@ void CanvasItemEditor::set_state(const Dictionary &p_state) {
viewport->update();
}
-void CanvasItemEditor::add_control_to_info_overlay(Control *p_control) {
- ERR_FAIL_COND(!p_control);
-
- p_control->set_h_size_flags(p_control->get_h_size_flags() & ~Control::SIZE_EXPAND_FILL);
- info_overlay->add_child(p_control);
- info_overlay->set_offset(SIDE_LEFT, (show_rulers ? RULER_WIDTH : 0) + 10);
-}
-
-void CanvasItemEditor::remove_control_from_info_overlay(Control *p_control) {
- info_overlay->remove_child(p_control);
- info_overlay->set_offset(SIDE_LEFT, (show_rulers ? RULER_WIDTH : 0) + 10);
-}
-
void CanvasItemEditor::add_control_to_menu_panel(Control *p_control) {
ERR_FAIL_COND(!p_control);
@@ -5281,23 +5233,6 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) {
viewport->connect("draw", callable_mp(this, &CanvasItemEditor::_draw_viewport));
viewport->connect("gui_input", callable_mp(this, &CanvasItemEditor::_gui_input_viewport));
- info_overlay = memnew(VBoxContainer);
- info_overlay->set_anchors_and_offsets_preset(Control::PRESET_BOTTOM_LEFT);
- info_overlay->set_offset(SIDE_LEFT, 10);
- info_overlay->set_offset(SIDE_BOTTOM, -15);
- info_overlay->set_v_grow_direction(Control::GROW_DIRECTION_BEGIN);
- info_overlay->add_theme_constant_override("separation", 10);
- viewport_scrollable->add_child(info_overlay);
-
- // Make sure all labels inside of the container are styled the same.
- Theme *info_overlay_theme = memnew(Theme);
- info_overlay->set_theme(info_overlay_theme);
-
- warning_child_of_container = memnew(Label);
- warning_child_of_container->hide();
- warning_child_of_container->set_text(TTR("Warning: Children of a container get their position and size determined only by their parent."));
- add_control_to_info_overlay(warning_child_of_container);
-
h_scroll = memnew(HScrollBar);
viewport->add_child(h_scroll);
h_scroll->connect("value_changed", callable_mp(this, &CanvasItemEditor::_update_scroll));
@@ -5330,9 +5265,9 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) {
select_button->set_toggle_mode(true);
select_button->connect("pressed", callable_mp(this, &CanvasItemEditor::_button_tool_select), make_binds(TOOL_SELECT));
select_button->set_pressed(true);
- select_button->set_shortcut(ED_SHORTCUT("canvas_item_editor/select_mode", TTR("Select Mode"), KEY_Q));
+ select_button->set_shortcut(ED_SHORTCUT("canvas_item_editor/select_mode", TTR("Select Mode"), Key::Q));
select_button->set_shortcut_context(this);
- select_button->set_tooltip(keycode_get_string(KEY_MASK_CMD) + TTR("Drag: Rotate selected node around pivot.") + "\n" + TTR("Alt+Drag: Move selected node.") + "\n" + TTR("V: Set selected node's pivot position.") + "\n" + TTR("Alt+RMB: Show list of all nodes at position clicked, including locked.") + "\n" + keycode_get_string(KEY_MASK_CMD) + TTR("RMB: Add node at position clicked."));
+ select_button->set_tooltip(keycode_get_string((Key)KeyModifierMask::CMD) + TTR("Drag: Rotate selected node around pivot.") + "\n" + TTR("Alt+Drag: Move selected node.") + "\n" + TTR("V: Set selected node's pivot position.") + "\n" + TTR("Alt+RMB: Show list of all nodes at position clicked, including locked.") + "\n" + keycode_get_string((Key)KeyModifierMask::CMD) + TTR("RMB: Add node at position clicked."));
hb->add_child(memnew(VSeparator));
@@ -5341,7 +5276,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) {
hb->add_child(move_button);
move_button->set_toggle_mode(true);
move_button->connect("pressed", callable_mp(this, &CanvasItemEditor::_button_tool_select), make_binds(TOOL_MOVE));
- move_button->set_shortcut(ED_SHORTCUT("canvas_item_editor/move_mode", TTR("Move Mode"), KEY_W));
+ move_button->set_shortcut(ED_SHORTCUT("canvas_item_editor/move_mode", TTR("Move Mode"), Key::W));
move_button->set_shortcut_context(this);
move_button->set_tooltip(TTR("Move Mode"));
@@ -5350,7 +5285,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) {
hb->add_child(rotate_button);
rotate_button->set_toggle_mode(true);
rotate_button->connect("pressed", callable_mp(this, &CanvasItemEditor::_button_tool_select), make_binds(TOOL_ROTATE));
- rotate_button->set_shortcut(ED_SHORTCUT("canvas_item_editor/rotate_mode", TTR("Rotate Mode"), KEY_E));
+ rotate_button->set_shortcut(ED_SHORTCUT("canvas_item_editor/rotate_mode", TTR("Rotate Mode"), Key::E));
rotate_button->set_shortcut_context(this);
rotate_button->set_tooltip(TTR("Rotate Mode"));
@@ -5359,7 +5294,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) {
hb->add_child(scale_button);
scale_button->set_toggle_mode(true);
scale_button->connect("pressed", callable_mp(this, &CanvasItemEditor::_button_tool_select), make_binds(TOOL_SCALE));
- scale_button->set_shortcut(ED_SHORTCUT("canvas_item_editor/scale_mode", TTR("Scale Mode"), KEY_S));
+ scale_button->set_shortcut(ED_SHORTCUT("canvas_item_editor/scale_mode", TTR("Scale Mode"), Key::S));
scale_button->set_shortcut_context(this);
scale_button->set_tooltip(TTR("Scale Mode"));
@@ -5384,7 +5319,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) {
hb->add_child(pan_button);
pan_button->set_toggle_mode(true);
pan_button->connect("pressed", callable_mp(this, &CanvasItemEditor::_button_tool_select), make_binds(TOOL_PAN));
- pan_button->set_shortcut(ED_SHORTCUT("canvas_item_editor/pan_mode", TTR("Pan Mode"), KEY_G));
+ pan_button->set_shortcut(ED_SHORTCUT("canvas_item_editor/pan_mode", TTR("Pan Mode"), Key::G));
pan_button->set_shortcut_context(this);
pan_button->set_tooltip(TTR("You can also use Pan View shortcut (Space by default) to pan in any mode."));
@@ -5393,7 +5328,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) {
hb->add_child(ruler_button);
ruler_button->set_toggle_mode(true);
ruler_button->connect("pressed", callable_mp(this, &CanvasItemEditor::_button_tool_select), make_binds(TOOL_RULER));
- ruler_button->set_shortcut(ED_SHORTCUT("canvas_item_editor/ruler_mode", TTR("Ruler Mode"), KEY_R));
+ ruler_button->set_shortcut(ED_SHORTCUT("canvas_item_editor/ruler_mode", TTR("Ruler Mode"), Key::R));
ruler_button->set_shortcut_context(this);
ruler_button->set_tooltip(TTR("Ruler Mode"));
@@ -5405,7 +5340,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) {
smart_snap_button->set_toggle_mode(true);
smart_snap_button->connect("toggled", callable_mp(this, &CanvasItemEditor::_button_toggle_smart_snap));
smart_snap_button->set_tooltip(TTR("Toggle smart snapping."));
- smart_snap_button->set_shortcut(ED_SHORTCUT("canvas_item_editor/use_smart_snap", TTR("Use Smart Snap"), KEY_MASK_SHIFT | KEY_S));
+ smart_snap_button->set_shortcut(ED_SHORTCUT("canvas_item_editor/use_smart_snap", TTR("Use Smart Snap"), KeyModifierMask::SHIFT | Key::S));
smart_snap_button->set_shortcut_context(this);
grid_snap_button = memnew(Button);
@@ -5414,7 +5349,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) {
grid_snap_button->set_toggle_mode(true);
grid_snap_button->connect("toggled", callable_mp(this, &CanvasItemEditor::_button_toggle_grid_snap));
grid_snap_button->set_tooltip(TTR("Toggle grid snapping."));
- grid_snap_button->set_shortcut(ED_SHORTCUT("canvas_item_editor/use_grid_snap", TTR("Use Grid Snap"), KEY_MASK_SHIFT | KEY_G));
+ grid_snap_button->set_shortcut(ED_SHORTCUT("canvas_item_editor/use_grid_snap", TTR("Use Grid Snap"), KeyModifierMask::SHIFT | Key::G));
grid_snap_button->set_shortcut_context(this);
snap_config_menu = memnew(MenuButton);
@@ -5457,7 +5392,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) {
lock_button->connect("pressed", callable_mp(this, &CanvasItemEditor::_popup_callback), varray(LOCK_SELECTED));
lock_button->set_tooltip(TTR("Lock selected node, preventing selection and movement."));
// Define the shortcut globally (without a context) so that it works if the Scene tree dock is currently focused.
- lock_button->set_shortcut(ED_SHORTCUT("editor/lock_selected_nodes", TTR("Lock Selected Node(s)"), KEY_MASK_CMD | KEY_L));
+ lock_button->set_shortcut(ED_SHORTCUT("editor/lock_selected_nodes", TTR("Lock Selected Node(s)"), KeyModifierMask::CMD | Key::L));
unlock_button = memnew(Button);
unlock_button->set_flat(true);
@@ -5465,7 +5400,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) {
unlock_button->connect("pressed", callable_mp(this, &CanvasItemEditor::_popup_callback), varray(UNLOCK_SELECTED));
unlock_button->set_tooltip(TTR("Unlock selected node, allowing selection and movement."));
// Define the shortcut globally (without a context) so that it works if the Scene tree dock is currently focused.
- unlock_button->set_shortcut(ED_SHORTCUT("editor/unlock_selected_nodes", TTR("Unlock Selected Node(s)"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_L));
+ unlock_button->set_shortcut(ED_SHORTCUT("editor/unlock_selected_nodes", TTR("Unlock Selected Node(s)"), KeyModifierMask::CMD | KeyModifierMask::SHIFT | Key::L));
group_button = memnew(Button);
group_button->set_flat(true);
@@ -5473,7 +5408,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) {
group_button->connect("pressed", callable_mp(this, &CanvasItemEditor::_popup_callback), varray(GROUP_SELECTED));
group_button->set_tooltip(TTR("Makes sure the object's children are not selectable."));
// Define the shortcut globally (without a context) so that it works if the Scene tree dock is currently focused.
- group_button->set_shortcut(ED_SHORTCUT("editor/group_selected_nodes", TTR("Group Selected Node(s)"), KEY_MASK_CMD | KEY_G));
+ group_button->set_shortcut(ED_SHORTCUT("editor/group_selected_nodes", TTR("Group Selected Node(s)"), KeyModifierMask::CMD | Key::G));
ungroup_button = memnew(Button);
ungroup_button->set_flat(true);
@@ -5481,7 +5416,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) {
ungroup_button->connect("pressed", callable_mp(this, &CanvasItemEditor::_popup_callback), varray(UNGROUP_SELECTED));
ungroup_button->set_tooltip(TTR("Restores the object's children's ability to be selected."));
// Define the shortcut globally (without a context) so that it works if the Scene tree dock is currently focused.
- ungroup_button->set_shortcut(ED_SHORTCUT("editor/ungroup_selected_nodes", TTR("Ungroup Selected Node(s)"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_G));
+ ungroup_button->set_shortcut(ED_SHORTCUT("editor/ungroup_selected_nodes", TTR("Ungroup Selected Node(s)"), KeyModifierMask::CMD | KeyModifierMask::SHIFT | Key::G));
hb->add_child(memnew(VSeparator));
@@ -5495,7 +5430,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) {
p->set_hide_on_checkable_item_selection(false);
p->add_shortcut(ED_SHORTCUT("canvas_item_editor/skeleton_show_bones", TTR("Show Bones")), SKELETON_SHOW_BONES);
p->add_separator();
- p->add_shortcut(ED_SHORTCUT("canvas_item_editor/skeleton_make_bones", TTR("Make Bone2D Node(s) from Node(s)"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_B), SKELETON_MAKE_BONES);
+ p->add_shortcut(ED_SHORTCUT("canvas_item_editor/skeleton_make_bones", TTR("Make Bone2D Node(s) from Node(s)"), KeyModifierMask::CMD | KeyModifierMask::SHIFT | Key::B), SKELETON_MAKE_BONES);
p->connect("id_pressed", callable_mp(this, &CanvasItemEditor::_popup_callback));
hb->add_child(memnew(VSeparator));
@@ -5519,21 +5454,21 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) {
p = view_menu->get_popup();
p->set_hide_on_checkable_item_selection(false);
- p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/show_grid", TTR("Always Show Grid"), KEY_NUMBERSIGN), SHOW_GRID);
- p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/show_helpers", TTR("Show Helpers"), KEY_H), SHOW_HELPERS);
+ p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/show_grid", TTR("Always Show Grid"), Key::NUMBERSIGN), SHOW_GRID);
+ p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/show_helpers", TTR("Show Helpers"), Key::H), SHOW_HELPERS);
p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/show_rulers", TTR("Show Rulers")), SHOW_RULERS);
- p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/show_guides", TTR("Show Guides"), KEY_Y), SHOW_GUIDES);
+ p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/show_guides", TTR("Show Guides"), Key::Y), SHOW_GUIDES);
p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/show_origin", TTR("Show Origin")), SHOW_ORIGIN);
p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/show_viewport", TTR("Show Viewport")), SHOW_VIEWPORT);
p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/show_edit_locks", TTR("Show Group And Lock Icons")), SHOW_EDIT_LOCKS);
p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/show_transformation_gizmos", TTR("Show Transformation Gizmos")), SHOW_TRANSFORMATION_GIZMOS);
p->add_separator();
- p->add_shortcut(ED_SHORTCUT("canvas_item_editor/center_selection", TTR("Center Selection"), KEY_F), VIEW_CENTER_TO_SELECTION);
- p->add_shortcut(ED_SHORTCUT("canvas_item_editor/frame_selection", TTR("Frame Selection"), KEY_MASK_SHIFT | KEY_F), VIEW_FRAME_TO_SELECTION);
+ p->add_shortcut(ED_SHORTCUT("canvas_item_editor/center_selection", TTR("Center Selection"), Key::F), VIEW_CENTER_TO_SELECTION);
+ p->add_shortcut(ED_SHORTCUT("canvas_item_editor/frame_selection", TTR("Frame Selection"), KeyModifierMask::SHIFT | Key::F), VIEW_FRAME_TO_SELECTION);
p->add_shortcut(ED_SHORTCUT("canvas_item_editor/clear_guides", TTR("Clear Guides")), CLEAR_GUIDES);
p->add_separator();
- p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/preview_canvas_scale", TTR("Preview Canvas Scale"), KEY_MASK_SHIFT | KEY_MASK_CMD | KEY_P), PREVIEW_CANVAS_SCALE);
+ p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/preview_canvas_scale", TTR("Preview Canvas Scale"), KeyModifierMask::SHIFT | KeyModifierMask::CMD | Key::P), PREVIEW_CANVAS_SCALE);
hb->add_child(memnew(VSeparator));
@@ -5604,7 +5539,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) {
key_insert_button->set_focus_mode(FOCUS_NONE);
key_insert_button->connect("pressed", callable_mp(this, &CanvasItemEditor::_popup_callback), varray(ANIM_INSERT_KEY));
key_insert_button->set_tooltip(TTR("Insert keys (based on mask)."));
- key_insert_button->set_shortcut(ED_SHORTCUT("canvas_item_editor/anim_insert_key", TTR("Insert Key"), KEY_INSERT));
+ key_insert_button->set_shortcut(ED_SHORTCUT("canvas_item_editor/anim_insert_key", TTR("Insert Key"), Key::INSERT));
key_insert_button->set_shortcut_context(this);
animation_hb->add_child(key_insert_button);
@@ -5627,11 +5562,11 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) {
p = animation_menu->get_popup();
p->add_shortcut(ED_GET_SHORTCUT("canvas_item_editor/anim_insert_key"), ANIM_INSERT_KEY);
- p->add_shortcut(ED_SHORTCUT("canvas_item_editor/anim_insert_key_existing_tracks", TTR("Insert Key (Existing Tracks)"), KEY_MASK_CMD + KEY_INSERT), ANIM_INSERT_KEY_EXISTING);
+ p->add_shortcut(ED_SHORTCUT("canvas_item_editor/anim_insert_key_existing_tracks", TTR("Insert Key (Existing Tracks)"), KeyModifierMask::CMD + Key::INSERT), ANIM_INSERT_KEY_EXISTING);
p->add_separator();
p->add_shortcut(ED_SHORTCUT("canvas_item_editor/anim_copy_pose", TTR("Copy Pose")), ANIM_COPY_POSE);
p->add_shortcut(ED_SHORTCUT("canvas_item_editor/anim_paste_pose", TTR("Paste Pose")), ANIM_PASTE_POSE);
- p->add_shortcut(ED_SHORTCUT("canvas_item_editor/anim_clear_pose", TTR("Clear Pose"), KEY_MASK_SHIFT | KEY_K), ANIM_CLEAR_POSE);
+ p->add_shortcut(ED_SHORTCUT("canvas_item_editor/anim_clear_pose", TTR("Clear Pose"), KeyModifierMask::SHIFT | Key::K), ANIM_CLEAR_POSE);
snap_dialog = memnew(SnapDialog);
snap_dialog->connect("confirmed", callable_mp(this, &CanvasItemEditor::_snap_changed));
@@ -5651,9 +5586,9 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) {
add_node_menu->add_icon_item(editor->get_scene_tree_dock()->get_theme_icon(SNAME("Instance"), SNAME("EditorIcons")), TTR("Instance Scene Here"));
add_node_menu->connect("id_pressed", callable_mp(this, &CanvasItemEditor::_add_node_pressed));
- multiply_grid_step_shortcut = ED_SHORTCUT("canvas_item_editor/multiply_grid_step", TTR("Multiply grid step by 2"), KEY_KP_MULTIPLY);
- divide_grid_step_shortcut = ED_SHORTCUT("canvas_item_editor/divide_grid_step", TTR("Divide grid step by 2"), KEY_KP_DIVIDE);
- pan_view_shortcut = ED_SHORTCUT("canvas_item_editor/pan_view", TTR("Pan View"), KEY_SPACE);
+ multiply_grid_step_shortcut = ED_SHORTCUT("canvas_item_editor/multiply_grid_step", TTR("Multiply grid step by 2"), Key::KP_MULTIPLY);
+ divide_grid_step_shortcut = ED_SHORTCUT("canvas_item_editor/divide_grid_step", TTR("Divide grid step by 2"), Key::KP_DIVIDE);
+ pan_view_shortcut = ED_SHORTCUT("canvas_item_editor/pan_view", TTR("Pan View"), Key::SPACE);
skeleton_menu->get_popup()->set_item_checked(skeleton_menu->get_popup()->get_item_index(SKELETON_SHOW_BONES), true);
singleton = this;
@@ -5662,16 +5597,16 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) {
// those shortcuts one by one.
// Resetting zoom to 100% is a duplicate shortcut of `canvas_item_editor/reset_zoom`,
// but it ensures both 1 and Ctrl + 0 can be used to reset zoom.
- ED_SHORTCUT("canvas_item_editor/zoom_3.125_percent", TTR("Zoom to 3.125%"), KEY_MASK_SHIFT | KEY_5);
- ED_SHORTCUT("canvas_item_editor/zoom_6.25_percent", TTR("Zoom to 6.25%"), KEY_MASK_SHIFT | KEY_4);
- ED_SHORTCUT("canvas_item_editor/zoom_12.5_percent", TTR("Zoom to 12.5%"), KEY_MASK_SHIFT | KEY_3);
- ED_SHORTCUT("canvas_item_editor/zoom_25_percent", TTR("Zoom to 25%"), KEY_MASK_SHIFT | KEY_2);
- ED_SHORTCUT("canvas_item_editor/zoom_50_percent", TTR("Zoom to 50%"), KEY_MASK_SHIFT | KEY_1);
- ED_SHORTCUT("canvas_item_editor/zoom_100_percent", TTR("Zoom to 100%"), KEY_1);
- ED_SHORTCUT("canvas_item_editor/zoom_200_percent", TTR("Zoom to 200%"), KEY_2);
- ED_SHORTCUT("canvas_item_editor/zoom_400_percent", TTR("Zoom to 400%"), KEY_3);
- ED_SHORTCUT("canvas_item_editor/zoom_800_percent", TTR("Zoom to 800%"), KEY_4);
- ED_SHORTCUT("canvas_item_editor/zoom_1600_percent", TTR("Zoom to 1600%"), KEY_5);
+ ED_SHORTCUT("canvas_item_editor/zoom_3.125_percent", TTR("Zoom to 3.125%"), KeyModifierMask::SHIFT | Key::KEY_5);
+ ED_SHORTCUT("canvas_item_editor/zoom_6.25_percent", TTR("Zoom to 6.25%"), KeyModifierMask::SHIFT | Key::KEY_4);
+ ED_SHORTCUT("canvas_item_editor/zoom_12.5_percent", TTR("Zoom to 12.5%"), KeyModifierMask::SHIFT | Key::KEY_3);
+ ED_SHORTCUT("canvas_item_editor/zoom_25_percent", TTR("Zoom to 25%"), KeyModifierMask::SHIFT | Key::KEY_2);
+ ED_SHORTCUT("canvas_item_editor/zoom_50_percent", TTR("Zoom to 50%"), KeyModifierMask::SHIFT | Key::KEY_1);
+ ED_SHORTCUT("canvas_item_editor/zoom_100_percent", TTR("Zoom to 100%"), Key::KEY_1);
+ ED_SHORTCUT("canvas_item_editor/zoom_200_percent", TTR("Zoom to 200%"), Key::KEY_2);
+ ED_SHORTCUT("canvas_item_editor/zoom_400_percent", TTR("Zoom to 400%"), Key::KEY_3);
+ ED_SHORTCUT("canvas_item_editor/zoom_800_percent", TTR("Zoom to 800%"), Key::KEY_4);
+ ED_SHORTCUT("canvas_item_editor/zoom_1600_percent", TTR("Zoom to 1600%"), Key::KEY_5);
set_process_unhandled_key_input(true);
@@ -5836,7 +5771,7 @@ void CanvasItemEditorViewport::_create_nodes(Node *parent, Node *child, String &
Ref<Texture2D> texture = Ref<Texture2D>(Object::cast_to<Texture2D>(ResourceCache::get(path)));
if (parent) {
- editor_data->get_undo_redo().add_do_method(parent, "add_child", child);
+ editor_data->get_undo_redo().add_do_method(parent, "add_child", child, true);
editor_data->get_undo_redo().add_do_method(child, "set_owner", editor->get_edited_scene());
editor_data->get_undo_redo().add_do_reference(child);
editor_data->get_undo_redo().add_undo_method(parent, "remove_child", child);
@@ -6059,9 +5994,9 @@ bool CanvasItemEditorViewport::_only_packed_scenes_selected() const {
}
void CanvasItemEditorViewport::drop_data(const Point2 &p_point, const Variant &p_data) {
- bool is_shift = Input::get_singleton()->is_key_pressed(KEY_SHIFT);
- bool is_ctrl = Input::get_singleton()->is_key_pressed(KEY_CTRL);
- bool is_alt = Input::get_singleton()->is_key_pressed(KEY_ALT);
+ bool is_shift = Input::get_singleton()->is_key_pressed(Key::SHIFT);
+ bool is_ctrl = Input::get_singleton()->is_key_pressed(Key::CTRL);
+ bool is_alt = Input::get_singleton()->is_key_pressed(Key::ALT);
selected_files.clear();
Dictionary d = p_data;
@@ -6192,14 +6127,14 @@ CanvasItemEditorViewport::CanvasItemEditorViewport(EditorNode *p_node, CanvasIte
label = memnew(Label);
label->add_theme_color_override("font_shadow_color", Color(0, 0, 0, 1));
- label->add_theme_constant_override("shadow_as_outline", 1 * EDSCALE);
+ label->add_theme_constant_override("shadow_outline_size", 1 * EDSCALE);
label->hide();
canvas_item_editor->get_controls_container()->add_child(label);
label_desc = memnew(Label);
label_desc->add_theme_color_override("font_color", Color(0.6f, 0.6f, 0.6f, 1));
label_desc->add_theme_color_override("font_shadow_color", Color(0.2f, 0.2f, 0.2f, 1));
- label_desc->add_theme_constant_override("shadow_as_outline", 1 * EDSCALE);
+ label_desc->add_theme_constant_override("shadow_outline_size", 1 * EDSCALE);
label_desc->add_theme_constant_override("line_spacing", 0);
label_desc->hide();
canvas_item_editor->get_controls_container()->add_child(label_desc);
diff --git a/editor/plugins/canvas_item_editor_plugin.h b/editor/plugins/canvas_item_editor_plugin.h
index 286771ee08..b6576b7144 100644
--- a/editor/plugins/canvas_item_editor_plugin.h
+++ b/editor/plugins/canvas_item_editor_plugin.h
@@ -235,11 +235,6 @@ private:
PanelContainer *context_menu_container;
HBoxContainer *hbc_context_menu;
- Map<Control *, Timer *> popup_temporarily_timers;
-
- Label *warning_child_of_container;
- VBoxContainer *info_overlay;
-
Transform2D transform;
bool show_grid;
bool show_rulers;
@@ -536,8 +531,6 @@ private:
VSplitContainer *bottom_split;
void _update_context_menu_stylebox();
- void _popup_warning_temporarily(Control *p_control, const double p_duration);
- void _popup_warning_depop(Control *p_control);
void _set_owner_for_node_and_children(Node *p_node, Node *p_owner);
@@ -578,9 +571,6 @@ public:
void add_control_to_menu_panel(Control *p_control);
void remove_control_from_menu_panel(Control *p_control);
- void add_control_to_info_overlay(Control *p_control);
- void remove_control_from_info_overlay(Control *p_control);
-
HSplitContainer *get_palette_split();
VSplitContainer *get_bottom_split();
diff --git a/editor/plugins/collision_polygon_3d_editor_plugin.cpp b/editor/plugins/collision_polygon_3d_editor_plugin.cpp
index 53314db1e9..4c728ff757 100644
--- a/editor/plugins/collision_polygon_3d_editor_plugin.cpp
+++ b/editor/plugins/collision_polygon_3d_editor_plugin.cpp
@@ -142,7 +142,7 @@ EditorPlugin::AfterGUIInput CollisionPolygon3DEditor::forward_spatial_gui_input(
switch (mode) {
case MODE_CREATE: {
- if (mb->get_button_index() == MOUSE_BUTTON_LEFT && mb->is_pressed()) {
+ if (mb->get_button_index() == MouseButton::LEFT && mb->is_pressed()) {
if (!wip_active) {
wip.clear();
wip.push_back(cpoint);
@@ -166,14 +166,14 @@ EditorPlugin::AfterGUIInput CollisionPolygon3DEditor::forward_spatial_gui_input(
return EditorPlugin::AFTER_GUI_INPUT_STOP;
}
}
- } else if (mb->get_button_index() == MOUSE_BUTTON_RIGHT && mb->is_pressed() && wip_active) {
+ } else if (mb->get_button_index() == MouseButton::RIGHT && mb->is_pressed() && wip_active) {
_wip_close();
}
} break;
case MODE_EDIT: {
- if (mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (mb->get_button_index() == MouseButton::LEFT) {
if (mb->is_pressed()) {
if (mb->is_ctrl_pressed()) {
if (poly.size() < 3) {
@@ -267,7 +267,7 @@ EditorPlugin::AfterGUIInput CollisionPolygon3DEditor::forward_spatial_gui_input(
}
}
}
- if (mb->get_button_index() == MOUSE_BUTTON_RIGHT && mb->is_pressed() && edited_point == -1) {
+ if (mb->get_button_index() == MouseButton::RIGHT && mb->is_pressed() && edited_point == -1) {
int closest_idx = -1;
Vector2 closest_pos;
real_t closest_dist = 1e10;
@@ -285,7 +285,7 @@ EditorPlugin::AfterGUIInput CollisionPolygon3DEditor::forward_spatial_gui_input(
if (closest_idx >= 0) {
undo_redo->create_action(TTR("Edit Poly (Remove Point)"));
undo_redo->add_undo_method(node, "set_polygon", poly);
- poly.remove(closest_idx);
+ poly.remove_at(closest_idx);
undo_redo->add_do_method(node, "set_polygon", poly);
undo_redo->add_do_method(this, "_polygon_draw");
undo_redo->add_undo_method(this, "_polygon_draw");
@@ -301,7 +301,7 @@ EditorPlugin::AfterGUIInput CollisionPolygon3DEditor::forward_spatial_gui_input(
Ref<InputEventMouseMotion> mm = p_event;
if (mm.is_valid()) {
- if (edited_point != -1 && (wip_active || mm->get_button_mask() & MOUSE_BUTTON_MASK_LEFT)) {
+ if (edited_point != -1 && (wip_active || (mm->get_button_mask() & MouseButton::MASK_LEFT) != MouseButton::NONE)) {
Vector2 gpoint = mm->get_position();
Vector3 ray_from = p_camera->project_ray_origin(gpoint);
@@ -317,7 +317,7 @@ EditorPlugin::AfterGUIInput CollisionPolygon3DEditor::forward_spatial_gui_input(
Vector2 cpoint(spoint.x, spoint.y);
- if (snap_ignore && !Input::get_singleton()->is_key_pressed(KEY_CTRL)) {
+ if (snap_ignore && !Input::get_singleton()->is_key_pressed(Key::CTRL)) {
snap_ignore = false;
}
diff --git a/editor/plugins/collision_shape_2d_editor_plugin.cpp b/editor/plugins/collision_shape_2d_editor_plugin.cpp
index fb32d7b1fd..94fd9a5a08 100644
--- a/editor/plugins/collision_shape_2d_editor_plugin.cpp
+++ b/editor/plugins/collision_shape_2d_editor_plugin.cpp
@@ -183,7 +183,7 @@ void CollisionShape2DEditor::set_handle(int idx, Point2 &p_point) {
size.y = p_point.y * RECT_HANDLES[idx].y * 2;
}
- if (Input::get_singleton()->is_key_pressed(KEY_ALT)) {
+ if (Input::get_singleton()->is_key_pressed(Key::ALT)) {
rect->set_size(size.abs());
node->set_global_position(original_transform.get_origin());
} else {
@@ -333,7 +333,7 @@ bool CollisionShape2DEditor::forward_canvas_gui_input(const Ref<InputEvent> &p_e
if (mb.is_valid()) {
Vector2 gpoint = mb->get_position();
- if (mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (mb->get_button_index() == MouseButton::LEFT) {
if (mb->is_pressed()) {
for (int i = 0; i < handles.size(); i++) {
if (xform.xform(handles[i]).distance_to(gpoint) < 8) {
@@ -394,7 +394,7 @@ bool CollisionShape2DEditor::forward_canvas_gui_input(const Ref<InputEvent> &p_e
return false;
}
- if (shape_type == RECTANGLE_SHAPE && k->get_keycode() == KEY_ALT) {
+ if (shape_type == RECTANGLE_SHAPE && k->get_keycode() == Key::ALT) {
set_handle(edit_handle, last_point); // Update handle when Alt key is toggled.
}
}
diff --git a/editor/plugins/curve_editor_plugin.cpp b/editor/plugins/curve_editor_plugin.cpp
index 43eb6a7ce9..daf34903e6 100644
--- a/editor/plugins/curve_editor_plugin.cpp
+++ b/editor/plugins/curve_editor_plugin.cpp
@@ -115,16 +115,16 @@ void CurveEditor::gui_input(const Ref<InputEvent> &p_event) {
}
switch (mb.get_button_index()) {
- case MOUSE_BUTTON_RIGHT:
+ case MouseButton::RIGHT:
_context_click_pos = mpos;
open_context_menu(get_global_transform().xform(mpos));
break;
- case MOUSE_BUTTON_MIDDLE:
+ case MouseButton::MIDDLE:
remove_point(_hover_point);
break;
- case MOUSE_BUTTON_LEFT:
+ case MouseButton::LEFT:
_dragging = true;
break;
default:
@@ -132,7 +132,7 @@ void CurveEditor::gui_input(const Ref<InputEvent> &p_event) {
}
}
- if (!mb.is_pressed() && _dragging && mb.get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (!mb.is_pressed() && _dragging && mb.get_button_index() == MouseButton::LEFT) {
_dragging = false;
if (_has_undo_data) {
UndoRedo &ur = *EditorNode::get_singleton()->get_undo_redo();
@@ -210,7 +210,7 @@ void CurveEditor::gui_input(const Ref<InputEvent> &p_event) {
tangent = 9999 * (dir.y >= 0 ? 1 : -1);
}
- bool link = !Input::get_singleton()->is_key_pressed(KEY_SHIFT);
+ bool link = !Input::get_singleton()->is_key_pressed(Key::SHIFT);
if (_selected_tangent == TANGENT_LEFT) {
curve.set_point_left_tangent(_selected_point, tangent);
@@ -240,7 +240,7 @@ void CurveEditor::gui_input(const Ref<InputEvent> &p_event) {
const InputEventKey &key = **key_ref;
if (key.is_pressed() && _selected_point != -1) {
- if (key.get_keycode() == KEY_DELETE) {
+ if (key.get_keycode() == Key::KEY_DELETE) {
remove_point(_selected_point);
}
}
@@ -383,7 +383,7 @@ void CurveEditor::open_context_menu(Vector2 pos) {
_context_menu->add_submenu_item(TTR("Load Preset"), _presets_menu->get_name());
- _context_menu->set_size(Size2(0, 0));
+ _context_menu->reset_size();
_context_menu->popup();
}
diff --git a/editor/plugins/debugger_editor_plugin.cpp b/editor/plugins/debugger_editor_plugin.cpp
index cc916aad8b..51e1b639a4 100644
--- a/editor/plugins/debugger_editor_plugin.cpp
+++ b/editor/plugins/debugger_editor_plugin.cpp
@@ -41,10 +41,10 @@
DebuggerEditorPlugin::DebuggerEditorPlugin(EditorNode *p_editor, MenuButton *p_debug_menu) {
EditorDebuggerServer::initialize();
- ED_SHORTCUT("debugger/step_into", TTR("Step Into"), KEY_F11);
- ED_SHORTCUT("debugger/step_over", TTR("Step Over"), KEY_F10);
+ ED_SHORTCUT("debugger/step_into", TTR("Step Into"), Key::F11);
+ ED_SHORTCUT("debugger/step_over", TTR("Step Over"), Key::F10);
ED_SHORTCUT("debugger/break", TTR("Break"));
- ED_SHORTCUT("debugger/continue", TTR("Continue"), KEY_F12);
+ ED_SHORTCUT("debugger/continue", TTR("Continue"), Key::F12);
ED_SHORTCUT("debugger/keep_debugger_open", TTR("Keep Debugger Open"));
ED_SHORTCUT("debugger/debug_with_external_editor", TTR("Debug with External Editor"));
diff --git a/editor/plugins/editor_preview_plugins.cpp b/editor/plugins/editor_preview_plugins.cpp
index 4cb2c0a76b..9702c7e734 100644
--- a/editor/plugins/editor_preview_plugins.cpp
+++ b/editor/plugins/editor_preview_plugins.cpp
@@ -297,12 +297,14 @@ EditorPackedScenePreviewPlugin::EditorPackedScenePreviewPlugin() {
//////////////////////////////////////////////////////////////////
-void EditorMaterialPreviewPlugin::_preview_done(const Variant &p_udata) {
- preview_done.set();
+void EditorMaterialPreviewPlugin::_generate_frame_started() {
+ RS::get_singleton()->viewport_set_update_mode(viewport, RS::VIEWPORT_UPDATE_ONCE); //once used for capture
+
+ RS::get_singleton()->request_frame_drawn_callback(callable_mp(const_cast<EditorMaterialPreviewPlugin *>(this), &EditorMaterialPreviewPlugin::_preview_done));
}
-void EditorMaterialPreviewPlugin::_bind_methods() {
- ClassDB::bind_method("_preview_done", &EditorMaterialPreviewPlugin::_preview_done);
+void EditorMaterialPreviewPlugin::_preview_done() {
+ preview_done.post();
}
bool EditorMaterialPreviewPlugin::handles(const String &p_type) const {
@@ -320,14 +322,9 @@ Ref<Texture2D> EditorMaterialPreviewPlugin::generate(const RES &p_from, const Si
if (material->get_shader_mode() == Shader::MODE_SPATIAL) {
RS::get_singleton()->mesh_surface_set_material(sphere, 0, material->get_rid());
- RS::get_singleton()->viewport_set_update_mode(viewport, RS::VIEWPORT_UPDATE_ONCE); //once used for capture
+ RS::get_singleton()->connect(SNAME("frame_pre_draw"), callable_mp(const_cast<EditorMaterialPreviewPlugin *>(this), &EditorMaterialPreviewPlugin::_generate_frame_started), Vector<Variant>(), Object::CONNECT_ONESHOT);
- preview_done.clear();
- RS::get_singleton()->request_frame_drawn_callback(const_cast<EditorMaterialPreviewPlugin *>(this), "_preview_done", Variant());
-
- while (!preview_done.is_set()) {
- OS::get_singleton()->delay_usec(10);
- }
+ preview_done.wait();
Ref<Image> img = RS::get_singleton()->texture_2d_get(viewport_texture);
RS::get_singleton()->mesh_surface_set_material(sphere, 0, RID());
@@ -699,12 +696,14 @@ EditorAudioStreamPreviewPlugin::EditorAudioStreamPreviewPlugin() {
///////////////////////////////////////////////////////////////////////////
-void EditorMeshPreviewPlugin::_preview_done(const Variant &p_udata) {
- preview_done.set();
+void EditorMeshPreviewPlugin::_generate_frame_started() {
+ RS::get_singleton()->viewport_set_update_mode(viewport, RS::VIEWPORT_UPDATE_ONCE); //once used for capture
+
+ RS::get_singleton()->request_frame_drawn_callback(callable_mp(const_cast<EditorMeshPreviewPlugin *>(this), &EditorMeshPreviewPlugin::_preview_done));
}
-void EditorMeshPreviewPlugin::_bind_methods() {
- ClassDB::bind_method("_preview_done", &EditorMeshPreviewPlugin::_preview_done);
+void EditorMeshPreviewPlugin::_preview_done() {
+ preview_done.post();
}
bool EditorMeshPreviewPlugin::handles(const String &p_type) const {
@@ -735,14 +734,9 @@ Ref<Texture2D> EditorMeshPreviewPlugin::generate(const RES &p_from, const Size2
xform.origin.z -= rot_aabb.size.z * 2;
RS::get_singleton()->instance_set_transform(mesh_instance, xform);
- RS::get_singleton()->viewport_set_update_mode(viewport, RS::VIEWPORT_UPDATE_ONCE); //once used for capture
+ RS::get_singleton()->connect(SNAME("frame_pre_draw"), callable_mp(const_cast<EditorMeshPreviewPlugin *>(this), &EditorMeshPreviewPlugin::_generate_frame_started), Vector<Variant>(), Object::CONNECT_ONESHOT);
- preview_done.clear();
- RS::get_singleton()->request_frame_drawn_callback(const_cast<EditorMeshPreviewPlugin *>(this), "_preview_done", Variant());
-
- while (!preview_done.is_set()) {
- OS::get_singleton()->delay_usec(10);
- }
+ preview_done.wait();
Ref<Image> img = RS::get_singleton()->texture_2d_get(viewport_texture);
ERR_FAIL_COND_V(img.is_null(), Ref<ImageTexture>());
@@ -814,12 +808,14 @@ EditorMeshPreviewPlugin::~EditorMeshPreviewPlugin() {
///////////////////////////////////////////////////////////////////////////
-void EditorFontPreviewPlugin::_preview_done(const Variant &p_udata) {
- preview_done.set();
+void EditorFontPreviewPlugin::_generate_frame_started() {
+ RS::get_singleton()->viewport_set_update_mode(viewport, RS::VIEWPORT_UPDATE_ONCE); //once used for capture
+
+ RS::get_singleton()->request_frame_drawn_callback(callable_mp(const_cast<EditorFontPreviewPlugin *>(this), &EditorFontPreviewPlugin::_preview_done));
}
-void EditorFontPreviewPlugin::_bind_methods() {
- ClassDB::bind_method("_preview_done", &EditorFontPreviewPlugin::_preview_done);
+void EditorFontPreviewPlugin::_preview_done() {
+ preview_done.post();
}
bool EditorFontPreviewPlugin::handles(const String &p_type) const {
@@ -857,13 +853,9 @@ Ref<Texture2D> EditorFontPreviewPlugin::generate_from_path(const String &p_path,
font->draw_string(canvas_item, pos, sample, HALIGN_LEFT, -1.f, 50, Color(1, 1, 1));
- preview_done.clear();
- RS::get_singleton()->viewport_set_update_mode(viewport, RS::VIEWPORT_UPDATE_ONCE); //once used for capture
- RS::get_singleton()->request_frame_drawn_callback(const_cast<EditorFontPreviewPlugin *>(this), "_preview_done", Variant());
+ RS::get_singleton()->connect(SNAME("frame_pre_draw"), callable_mp(const_cast<EditorFontPreviewPlugin *>(this), &EditorFontPreviewPlugin::_generate_frame_started), Vector<Variant>(), Object::CONNECT_ONESHOT);
- while (!preview_done.is_set()) {
- OS::get_singleton()->delay_usec(10);
- }
+ preview_done.wait();
RS::get_singleton()->canvas_item_clear(canvas_item);
diff --git a/editor/plugins/editor_preview_plugins.h b/editor/plugins/editor_preview_plugins.h
index 091feae5fb..bf52f5771d 100644
--- a/editor/plugins/editor_preview_plugins.h
+++ b/editor/plugins/editor_preview_plugins.h
@@ -92,12 +92,10 @@ class EditorMaterialPreviewPlugin : public EditorResourcePreviewGenerator {
RID light2;
RID light_instance2;
RID camera;
- mutable SafeFlag preview_done;
+ Semaphore preview_done;
- void _preview_done(const Variant &p_udata);
-
-protected:
- static void _bind_methods();
+ void _generate_frame_started();
+ void _preview_done();
public:
virtual bool handles(const String &p_type) const override;
@@ -136,12 +134,10 @@ class EditorMeshPreviewPlugin : public EditorResourcePreviewGenerator {
RID light2;
RID light_instance2;
RID camera;
- mutable SafeFlag preview_done;
-
- void _preview_done(const Variant &p_udata);
+ Semaphore preview_done;
-protected:
- static void _bind_methods();
+ void _generate_frame_started();
+ void _preview_done();
public:
virtual bool handles(const String &p_type) const override;
@@ -158,12 +154,10 @@ class EditorFontPreviewPlugin : public EditorResourcePreviewGenerator {
RID viewport_texture;
RID canvas;
RID canvas_item;
- mutable SafeFlag preview_done;
+ Semaphore preview_done;
- void _preview_done(const Variant &p_udata);
-
-protected:
- static void _bind_methods();
+ void _generate_frame_started();
+ void _preview_done();
public:
virtual bool handles(const String &p_type) const override;
@@ -177,12 +171,10 @@ public:
class EditorTileMapPatternPreviewPlugin : public EditorResourcePreviewGenerator {
GDCLASS(EditorTileMapPatternPreviewPlugin, EditorResourcePreviewGenerator);
- mutable SafeFlag preview_done;
-
- void _preview_done(const Variant &p_udata);
+ Semaphore preview_done;
-protected:
- static void _bind_methods();
+ void _generate_frame_started();
+ void _preview_done();
public:
virtual bool handles(const String &p_type) const override;
diff --git a/editor/plugins/gradient_editor_plugin.cpp b/editor/plugins/gradient_editor_plugin.cpp
index 355bdb69d8..da050abc02 100644
--- a/editor/plugins/gradient_editor_plugin.cpp
+++ b/editor/plugins/gradient_editor_plugin.cpp
@@ -46,6 +46,8 @@ void GradientEditor::_gradient_changed() {
editing = true;
Vector<Gradient::Point> points = gradient->get_points();
set_points(points);
+ set_interpolation_mode(gradient->get_interpolation_mode());
+ update();
editing = false;
}
@@ -55,8 +57,10 @@ void GradientEditor::_ramp_changed() {
undo_redo->create_action(TTR("Gradient Edited"));
undo_redo->add_do_method(gradient.ptr(), "set_offsets", get_offsets());
undo_redo->add_do_method(gradient.ptr(), "set_colors", get_colors());
+ undo_redo->add_do_method(gradient.ptr(), "set_interpolation_mode", get_interpolation_mode());
undo_redo->add_undo_method(gradient.ptr(), "set_offsets", gradient->get_offsets());
undo_redo->add_undo_method(gradient.ptr(), "set_colors", gradient->get_colors());
+ undo_redo->add_undo_method(gradient.ptr(), "set_interpolation_mode", gradient->get_interpolation_mode());
undo_redo->commit_action();
editing = false;
}
@@ -69,6 +73,14 @@ void GradientEditor::set_gradient(const Ref<Gradient> &p_gradient) {
connect("ramp_changed", callable_mp(this, &GradientEditor::_ramp_changed));
gradient->connect("changed", callable_mp(this, &GradientEditor::_gradient_changed));
set_points(gradient->get_points());
+ set_interpolation_mode(gradient->get_interpolation_mode());
+}
+
+void GradientEditor::reverse_gradient() {
+ gradient->reverse();
+ set_points(gradient->get_points());
+ emit_signal(SNAME("ramp_changed"));
+ update();
}
GradientEditor::GradientEditor() {
@@ -77,6 +89,23 @@ GradientEditor::GradientEditor() {
///////////////////////
+void GradientReverseButton::_notification(int p_what) {
+ if (p_what == NOTIFICATION_DRAW) {
+ Ref<Texture2D> icon = get_theme_icon(SNAME("ReverseGradient"), SNAME("EditorIcons"));
+ if (is_pressed()) {
+ draw_texture_rect(icon, Rect2(margin, margin, icon->get_width(), icon->get_height()), false, get_theme_color(SNAME("icon_pressed_color"), SNAME("Button")));
+ } else {
+ draw_texture_rect(icon, Rect2(margin, margin, icon->get_width(), icon->get_height()));
+ }
+ }
+}
+
+Size2 GradientReverseButton::get_minimum_size() const {
+ return (get_theme_icon(SNAME("ReverseGradient"), SNAME("EditorIcons"))->get_size() + Size2(margin * 2, margin * 2));
+}
+
+///////////////////////
+
bool EditorInspectorPluginGradient::can_handle(Object *p_object) {
return Object::cast_to<Gradient>(p_object) != nullptr;
}
@@ -85,9 +114,23 @@ void EditorInspectorPluginGradient::parse_begin(Object *p_object) {
Gradient *gradient = Object::cast_to<Gradient>(p_object);
Ref<Gradient> g(gradient);
- GradientEditor *editor = memnew(GradientEditor);
+ editor = memnew(GradientEditor);
editor->set_gradient(g);
add_custom_control(editor);
+
+ reverse_btn = memnew(GradientReverseButton);
+
+ gradient_tools_hbox = memnew(HBoxContainer);
+ gradient_tools_hbox->add_child(reverse_btn);
+
+ add_custom_control(gradient_tools_hbox);
+
+ reverse_btn->connect("pressed", callable_mp(this, &EditorInspectorPluginGradient::_reverse_button_pressed));
+ reverse_btn->set_tooltip(TTR("Reverse/mirror gradient."));
+}
+
+void EditorInspectorPluginGradient::_reverse_button_pressed() {
+ editor->reverse_gradient();
}
GradientEditorPlugin::GradientEditorPlugin(EditorNode *p_node) {
diff --git a/editor/plugins/gradient_editor_plugin.h b/editor/plugins/gradient_editor_plugin.h
index bcbb86e422..95b7b466c9 100644
--- a/editor/plugins/gradient_editor_plugin.h
+++ b/editor/plugins/gradient_editor_plugin.h
@@ -50,12 +50,28 @@ protected:
public:
virtual Size2 get_minimum_size() const override;
void set_gradient(const Ref<Gradient> &p_gradient);
+ void reverse_gradient();
GradientEditor();
};
+class GradientReverseButton : public BaseButton {
+ GDCLASS(GradientReverseButton, BaseButton);
+
+ int margin = 2;
+
+ void _notification(int p_what);
+ virtual Size2 get_minimum_size() const override;
+};
+
class EditorInspectorPluginGradient : public EditorInspectorPlugin {
GDCLASS(EditorInspectorPluginGradient, EditorInspectorPlugin);
+ GradientEditor *editor;
+ HBoxContainer *gradient_tools_hbox;
+ GradientReverseButton *reverse_btn;
+
+ void _reverse_button_pressed();
+
public:
virtual bool can_handle(Object *p_object) override;
virtual void parse_begin(Object *p_object) override;
diff --git a/editor/plugins/mesh_editor_plugin.cpp b/editor/plugins/mesh_editor_plugin.cpp
index dc16a7a325..4b18ac6e9f 100644
--- a/editor/plugins/mesh_editor_plugin.cpp
+++ b/editor/plugins/mesh_editor_plugin.cpp
@@ -36,7 +36,7 @@ void MeshEditor::gui_input(const Ref<InputEvent> &p_event) {
ERR_FAIL_COND(p_event.is_null());
Ref<InputEventMouseMotion> mm = p_event;
- if (mm.is_valid() && mm->get_button_mask() & MOUSE_BUTTON_MASK_LEFT) {
+ if (mm.is_valid() && (mm->get_button_mask() & MouseButton::MASK_LEFT) != MouseButton::NONE) {
rot_x -= mm->get_relative().y * 0.01;
rot_y -= mm->get_relative().x * 0.01;
if (rot_x < -Math_PI / 2) {
diff --git a/editor/plugins/mesh_instance_3d_editor_plugin.cpp b/editor/plugins/mesh_instance_3d_editor_plugin.cpp
index 574d3ef27e..7a85c5167b 100644
--- a/editor/plugins/mesh_instance_3d_editor_plugin.cpp
+++ b/editor/plugins/mesh_instance_3d_editor_plugin.cpp
@@ -79,7 +79,7 @@ void MeshInstance3DEditor::_menu_option(int p_option) {
Node *owner = node == get_tree()->get_edited_scene_root() ? node : node->get_owner();
ur->create_action(TTR("Create Static Trimesh Body"));
- ur->add_do_method(node, "add_child", body);
+ ur->add_do_method(node, "add_child", body, true);
ur->add_do_method(body, "set_owner", owner);
ur->add_do_method(cshape, "set_owner", owner);
ur->add_do_reference(body);
@@ -113,7 +113,7 @@ void MeshInstance3DEditor::_menu_option(int p_option) {
Node *owner = instance == get_tree()->get_edited_scene_root() ? instance : instance->get_owner();
- ur->add_do_method(instance, "add_child", body);
+ ur->add_do_method(instance, "add_child", body, true);
ur->add_do_method(body, "set_owner", owner);
ur->add_do_method(cshape, "set_owner", owner);
ur->add_do_reference(body);
@@ -146,7 +146,7 @@ void MeshInstance3DEditor::_menu_option(int p_option) {
ur->create_action(TTR("Create Trimesh Static Shape"));
- ur->add_do_method(node->get_parent(), "add_child", cshape);
+ ur->add_do_method(node->get_parent(), "add_child", cshape, true);
ur->add_do_method(node->get_parent(), "move_child", cshape, node->get_index() + 1);
ur->add_do_method(cshape, "set_owner", owner);
ur->add_do_reference(cshape);
@@ -185,7 +185,7 @@ void MeshInstance3DEditor::_menu_option(int p_option) {
Node *owner = node->get_owner();
- ur->add_do_method(node->get_parent(), "add_child", cshape);
+ ur->add_do_method(node->get_parent(), "add_child", cshape, true);
ur->add_do_method(node->get_parent(), "move_child", cshape, node->get_index() + 1);
ur->add_do_method(cshape, "set_owner", owner);
ur->add_do_reference(cshape);
@@ -247,7 +247,7 @@ void MeshInstance3DEditor::_menu_option(int p_option) {
UndoRedo *ur = EditorNode::get_singleton()->get_undo_redo();
ur->create_action(TTR("Create Navigation Mesh"));
- ur->add_do_method(node, "add_child", nmi);
+ ur->add_do_method(node, "add_child", nmi, true);
ur->add_do_method(nmi, "set_owner", owner);
ur->add_do_reference(nmi);
@@ -426,7 +426,7 @@ void MeshInstance3DEditor::_create_outline_mesh() {
ur->create_action(TTR("Create Outline"));
- ur->add_do_method(node, "add_child", mi);
+ ur->add_do_method(node, "add_child", mi, true);
ur->add_do_method(mi, "set_owner", owner);
ur->add_do_reference(mi);
diff --git a/editor/plugins/node_3d_editor_plugin.cpp b/editor/plugins/node_3d_editor_plugin.cpp
index b99ccc1012..d3b462cda5 100644
--- a/editor/plugins/node_3d_editor_plugin.cpp
+++ b/editor/plugins/node_3d_editor_plugin.cpp
@@ -185,7 +185,7 @@ void ViewportRotationControl::gui_input(const Ref<InputEvent> &p_event) {
ERR_FAIL_COND(p_event.is_null());
const Ref<InputEventMouseButton> mb = p_event;
- if (mb.is_valid() && mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (mb.is_valid() && mb->get_button_index() == MouseButton::LEFT) {
Vector2 pos = mb->get_position();
if (mb->is_pressed()) {
if (pos.distance_to(get_size() / 2.0) < get_size().x / 2.0) {
@@ -860,7 +860,7 @@ void Node3DEditorViewport::_update_name() {
}
view_menu->set_text(name);
- view_menu->set_size(Vector2(0, 0)); // resets the button size
+ view_menu->reset_size();
}
void Node3DEditorViewport::_compute_edit(const Point2 &p_point) {
@@ -901,36 +901,36 @@ void Node3DEditorViewport::_compute_edit(const Point2 &p_point) {
}
}
-static int _get_key_modifier_setting(const String &p_property) {
+static Key _get_key_modifier_setting(const String &p_property) {
switch (EditorSettings::get_singleton()->get(p_property).operator int()) {
case 0:
- return 0;
+ return Key::NONE;
case 1:
- return KEY_SHIFT;
+ return Key::SHIFT;
case 2:
- return KEY_ALT;
+ return Key::ALT;
case 3:
- return KEY_META;
+ return Key::META;
case 4:
- return KEY_CTRL;
+ return Key::CTRL;
}
- return 0;
+ return Key::NONE;
}
-static int _get_key_modifier(Ref<InputEventWithModifiers> e) {
+static Key _get_key_modifier(Ref<InputEventWithModifiers> e) {
if (e->is_shift_pressed()) {
- return KEY_SHIFT;
+ return Key::SHIFT;
}
if (e->is_alt_pressed()) {
- return KEY_ALT;
+ return Key::ALT;
}
if (e->is_ctrl_pressed()) {
- return KEY_CTRL;
+ return Key::CTRL;
}
if (e->is_meta_pressed()) {
- return KEY_META;
+ return Key::META;
}
- return 0;
+ return Key::NONE;
}
bool Node3DEditorViewport::_transform_gizmo_select(const Vector2 &p_screenpos, bool p_highlight_only) {
@@ -1238,7 +1238,7 @@ void Node3DEditorViewport::_list_select(Ref<InputEventMouseButton> b) {
Node3D *item = selection_results[i].item;
if (item != scene && item->get_owner() != scene && item != scene->get_deepest_editable_node(item)) {
//invalid result
- selection_results.remove(i);
+ selection_results.remove_at(i);
i--;
}
}
@@ -1336,7 +1336,7 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
const real_t zoom_factor = 1 + (ZOOM_FREELOOK_MULTIPLIER - 1) * b->get_factor();
switch (b->get_button_index()) {
- case MOUSE_BUTTON_WHEEL_UP: {
+ case MouseButton::WHEEL_UP: {
if (b->is_alt_pressed()) {
scale_fov(-0.05);
} else {
@@ -1347,7 +1347,7 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
}
}
} break;
- case MOUSE_BUTTON_WHEEL_DOWN: {
+ case MouseButton::WHEEL_DOWN: {
if (b->is_alt_pressed()) {
scale_fov(0.05);
} else {
@@ -1358,7 +1358,7 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
}
}
} break;
- case MOUSE_BUTTON_RIGHT: {
+ case MouseButton::RIGHT: {
NavigationScheme nav_scheme = (NavigationScheme)EditorSettings::get_singleton()->get("editors/3d/navigation/navigation_scheme").operator int();
if (b->is_pressed() && _edit.gizmo.is_valid()) {
@@ -1415,7 +1415,7 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
}
if (b->is_pressed()) {
- const int mod = _get_key_modifier(b);
+ const Key mod = _get_key_modifier(b);
if (!orthogonal) {
if (mod == _get_key_modifier_setting("editors/3d/freelook/freelook_activation_modifier")) {
set_freelook_active(true);
@@ -1432,7 +1432,7 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
}
} break;
- case MOUSE_BUTTON_MIDDLE: {
+ case MouseButton::MIDDLE: {
if (b->is_pressed() && _edit.mode != TRANSFORM_NONE) {
switch (_edit.plane) {
case TRANSFORM_VIEW: {
@@ -1463,7 +1463,7 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
}
}
} break;
- case MOUSE_BUTTON_LEFT: {
+ case MouseButton::LEFT: {
if (b->is_pressed()) {
NavigationScheme nav_scheme = (NavigationScheme)EditorSettings::get_singleton()->get("editors/3d/navigation/navigation_scheme").operator int();
if ((nav_scheme == NAVIGATION_MAYA || nav_scheme == NAVIGATION_MODO) && b->is_alt_pressed()) {
@@ -1724,7 +1724,7 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
}
}
- if (spatial_editor->get_current_hover_gizmo().is_null() && !(m->get_button_mask() & 1) && !_edit.gizmo.is_valid()) {
+ if (spatial_editor->get_current_hover_gizmo().is_null() && (m->get_button_mask() & MouseButton::MASK_LEFT) == MouseButton::NONE && !_edit.gizmo.is_valid()) {
_transform_gizmo_select(_edit.mouse_pos, true);
}
@@ -1737,7 +1737,7 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
String n = _edit.gizmo->get_handle_name(_edit.gizmo_handle);
set_message(n + ": " + String(v));
- } else if (m->get_button_mask() & MOUSE_BUTTON_MASK_LEFT) {
+ } else if ((m->get_button_mask() & MouseButton::MASK_LEFT) != MouseButton::NONE) {
if (nav_scheme == NAVIGATION_MAYA && m->is_alt_pressed()) {
nav_mode = NAVIGATION_ORBIT;
} else if (nav_scheme == NAVIGATION_MODO && m->is_alt_pressed() && m->is_shift_pressed()) {
@@ -1827,7 +1827,7 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
} else {
// Alternative planar scaling mode
- if (_get_key_modifier(m) != KEY_SHIFT) {
+ if (_get_key_modifier(m) != Key::SHIFT) {
motion = motion_mask.dot(motion) * motion_mask;
}
}
@@ -2082,7 +2082,7 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
}
}
}
- } else if ((m->get_button_mask() & MOUSE_BUTTON_MASK_RIGHT) || freelook_active) {
+ } else if ((m->get_button_mask() & MouseButton::MASK_RIGHT) != MouseButton::NONE || freelook_active) {
if (nav_scheme == NAVIGATION_MAYA && m->is_alt_pressed()) {
nav_mode = NAVIGATION_ZOOM;
} else if (freelook_active) {
@@ -2091,14 +2091,14 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
nav_mode = NAVIGATION_PAN;
}
- } else if (m->get_button_mask() & MOUSE_BUTTON_MASK_MIDDLE) {
- const int mod = _get_key_modifier(m);
+ } else if ((m->get_button_mask() & MouseButton::MASK_MIDDLE) != MouseButton::NONE) {
+ const Key mod = _get_key_modifier(m);
if (nav_scheme == NAVIGATION_GODOT) {
if (mod == _get_key_modifier_setting("editors/3d/navigation/pan_modifier")) {
nav_mode = NAVIGATION_PAN;
} else if (mod == _get_key_modifier_setting("editors/3d/navigation/zoom_modifier")) {
nav_mode = NAVIGATION_ZOOM;
- } else if (mod == KEY_ALT || mod == _get_key_modifier_setting("editors/3d/navigation/orbit_modifier")) {
+ } else if (mod == Key::ALT || mod == _get_key_modifier_setting("editors/3d/navigation/orbit_modifier")) {
// Always allow Alt as a modifier to better support graphic tablets.
nav_mode = NAVIGATION_ORBIT;
}
@@ -2109,14 +2109,14 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
}
} else if (EditorSettings::get_singleton()->get("editors/3d/navigation/emulate_3_button_mouse")) {
// Handle trackpad (no external mouse) use case
- const int mod = _get_key_modifier(m);
+ const Key mod = _get_key_modifier(m);
- if (mod) {
+ if (mod != Key::NONE) {
if (mod == _get_key_modifier_setting("editors/3d/navigation/pan_modifier")) {
nav_mode = NAVIGATION_PAN;
} else if (mod == _get_key_modifier_setting("editors/3d/navigation/zoom_modifier")) {
nav_mode = NAVIGATION_ZOOM;
- } else if (mod == KEY_ALT || mod == _get_key_modifier_setting("editors/3d/navigation/orbit_modifier")) {
+ } else if (mod == Key::ALT || mod == _get_key_modifier_setting("editors/3d/navigation/orbit_modifier")) {
// Always allow Alt as a modifier to better support graphic tablets.
nav_mode = NAVIGATION_ORBIT;
}
@@ -2164,13 +2164,13 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
NavigationMode nav_mode = NAVIGATION_NONE;
if (nav_scheme == NAVIGATION_GODOT) {
- const int mod = _get_key_modifier(pan_gesture);
+ const Key mod = _get_key_modifier(pan_gesture);
if (mod == _get_key_modifier_setting("editors/3d/navigation/pan_modifier")) {
nav_mode = NAVIGATION_PAN;
} else if (mod == _get_key_modifier_setting("editors/3d/navigation/zoom_modifier")) {
nav_mode = NAVIGATION_ZOOM;
- } else if (mod == KEY_ALT || mod == _get_key_modifier_setting("editors/3d/navigation/orbit_modifier")) {
+ } else if (mod == Key::ALT || mod == _get_key_modifier_setting("editors/3d/navigation/orbit_modifier")) {
// Always allow Alt as a modifier to better support graphic tablets.
nav_mode = NAVIGATION_ORBIT;
}
@@ -2215,9 +2215,9 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
}
if (EditorSettings::get_singleton()->get("editors/3d/navigation/emulate_numpad")) {
- const uint32_t code = k->get_keycode();
- if (code >= KEY_0 && code <= KEY_9) {
- k->set_keycode(code - KEY_0 + KEY_KP_0);
+ const Key code = k->get_keycode();
+ if (code >= Key::KEY_0 && code <= Key::KEY_9) {
+ k->set_keycode(code - Key::KEY_0 + Key::KP_0);
}
}
@@ -2245,12 +2245,14 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
_menu_option(VIEW_RIGHT);
}
if (ED_IS_SHORTCUT("spatial_editor/orbit_view_down", p_event)) {
- cursor.x_rot -= Math_PI / 12.0;
+ // Clamp rotation to roughly -90..90 degrees so the user can't look upside-down and end up disoriented.
+ cursor.x_rot = CLAMP(cursor.x_rot - Math_PI / 12.0, -1.57, 1.57);
view_type = VIEW_TYPE_USER;
_update_name();
}
if (ED_IS_SHORTCUT("spatial_editor/orbit_view_up", p_event)) {
- cursor.x_rot += Math_PI / 12.0;
+ // Clamp rotation to roughly -90..90 degrees so the user can't look upside-down and end up disoriented.
+ cursor.x_rot = CLAMP(cursor.x_rot + Math_PI / 12.0, -1.57, 1.57);
view_type = VIEW_TYPE_USER;
_update_name();
}
@@ -2314,11 +2316,11 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
if (!orthogonal && ED_IS_SHORTCUT("spatial_editor/freelook_toggle", p_event)) {
set_freelook_active(!is_freelook_active());
- } else if (k->get_keycode() == KEY_ESCAPE) {
+ } else if (k->get_keycode() == Key::ESCAPE) {
set_freelook_active(false);
}
- if (k->get_keycode() == KEY_SPACE) {
+ if (k->get_keycode() == Key::SPACE) {
if (!k->is_pressed()) {
emit_signal(SNAME("toggle_maximize_view"), this);
}
@@ -2885,13 +2887,13 @@ void Node3DEditorViewport::_notification(int p_what) {
// Color labels depending on performance level ("good" = green, "OK" = yellow, "bad" = red).
// Middle point is at 15 ms.
- cpu_time_label->set_text(vformat(TTR("CPU Time: %s ms"), rtos(cpu_time).pad_decimals(1)));
+ cpu_time_label->set_text(vformat(TTR("CPU Time: %s ms"), rtos(cpu_time).pad_decimals(2)));
cpu_time_label->add_theme_color_override(
"font_color",
frame_time_gradient->get_color_at_offset(
Math::range_lerp(cpu_time, 0, 30, 0, 1)));
- gpu_time_label->set_text(vformat(TTR("GPU Time: %s ms"), rtos(gpu_time).pad_decimals(1)));
+ gpu_time_label->set_text(vformat(TTR("GPU Time: %s ms"), rtos(gpu_time).pad_decimals(2)));
// Middle point is at 15 ms.
gpu_time_label->add_theme_color_override(
"font_color",
@@ -3618,7 +3620,7 @@ void Node3DEditorViewport::_selection_result_pressed(int p_result) {
void Node3DEditorViewport::_selection_menu_hide() {
selection_results.clear();
selection_menu->clear();
- selection_menu->set_size(Vector2(0, 0));
+ selection_menu->reset_size();
}
void Node3DEditorViewport::set_can_preview(Camera3D *p_preview) {
@@ -3936,9 +3938,13 @@ Vector3 Node3DEditorViewport::_get_instance_position(const Point2 &p_pos) const
Vector3 point = world_pos + world_ray * MAX_DISTANCE;
PhysicsDirectSpaceState3D *ss = get_tree()->get_root()->get_world_3d()->get_direct_space_state();
- PhysicsDirectSpaceState3D::RayResult result;
- if (ss->intersect_ray(world_pos, world_pos + world_ray * MAX_DISTANCE, result)) {
+ PhysicsDirectSpaceState3D::RayParameters ray_params;
+ ray_params.from = world_pos;
+ ray_params.to = world_pos + world_ray * MAX_DISTANCE;
+
+ PhysicsDirectSpaceState3D::RayResult result;
+ if (ss->intersect_ray(ray_params, result)) {
point = result.position;
}
@@ -4192,8 +4198,8 @@ void Node3DEditorViewport::drop_data_fw(const Point2 &p_point, const Variant &p_
return;
}
- bool is_shift = Input::get_singleton()->is_key_pressed(KEY_SHIFT);
- bool is_ctrl = Input::get_singleton()->is_key_pressed(KEY_CTRL);
+ bool is_shift = Input::get_singleton()->is_key_pressed(Key::SHIFT);
+ bool is_ctrl = Input::get_singleton()->is_key_pressed(Key::CTRL);
selected_files.clear();
Dictionary d = p_data;
@@ -4388,18 +4394,18 @@ Node3DEditorViewport::Node3DEditorViewport(Node3DEditor *p_spatial_editor, Edito
view_menu->get_popup()->set_item_tooltip(shadeless_idx, unsupported_tooltip);
}
- ED_SHORTCUT("spatial_editor/freelook_left", TTR("Freelook Left"), KEY_A);
- ED_SHORTCUT("spatial_editor/freelook_right", TTR("Freelook Right"), KEY_D);
- ED_SHORTCUT("spatial_editor/freelook_forward", TTR("Freelook Forward"), KEY_W);
- ED_SHORTCUT("spatial_editor/freelook_backwards", TTR("Freelook Backwards"), KEY_S);
- ED_SHORTCUT("spatial_editor/freelook_up", TTR("Freelook Up"), KEY_E);
- ED_SHORTCUT("spatial_editor/freelook_down", TTR("Freelook Down"), KEY_Q);
- ED_SHORTCUT("spatial_editor/freelook_speed_modifier", TTR("Freelook Speed Modifier"), KEY_SHIFT);
- ED_SHORTCUT("spatial_editor/freelook_slow_modifier", TTR("Freelook Slow Modifier"), KEY_ALT);
+ ED_SHORTCUT("spatial_editor/freelook_left", TTR("Freelook Left"), Key::A);
+ ED_SHORTCUT("spatial_editor/freelook_right", TTR("Freelook Right"), Key::D);
+ ED_SHORTCUT("spatial_editor/freelook_forward", TTR("Freelook Forward"), Key::W);
+ ED_SHORTCUT("spatial_editor/freelook_backwards", TTR("Freelook Backwards"), Key::S);
+ ED_SHORTCUT("spatial_editor/freelook_up", TTR("Freelook Up"), Key::E);
+ ED_SHORTCUT("spatial_editor/freelook_down", TTR("Freelook Down"), Key::Q);
+ ED_SHORTCUT("spatial_editor/freelook_speed_modifier", TTR("Freelook Speed Modifier"), Key::SHIFT);
+ ED_SHORTCUT("spatial_editor/freelook_slow_modifier", TTR("Freelook Slow Modifier"), Key::ALT);
preview_camera = memnew(CheckBox);
preview_camera->set_text(TTR("Preview"));
- preview_camera->set_shortcut(ED_SHORTCUT("spatial_editor/toggle_camera_preview", TTR("Toggle Camera Preview"), KEY_MASK_CMD | KEY_P));
+ preview_camera->set_shortcut(ED_SHORTCUT("spatial_editor/toggle_camera_preview", TTR("Toggle Camera Preview"), KeyModifierMask::CMD | Key::P));
vbox->add_child(preview_camera);
preview_camera->set_h_size_flags(0);
preview_camera->hide();
@@ -4513,7 +4519,7 @@ void Node3DEditorViewportContainer::gui_input(const Ref<InputEvent> &p_event) {
Ref<InputEventMouseButton> mb = p_event;
- if (mb.is_valid() && mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (mb.is_valid() && mb->get_button_index() == MouseButton::LEFT) {
if (mb->is_pressed()) {
Vector2 size = get_size();
@@ -6566,7 +6572,12 @@ void Node3DEditor::snap_selected_nodes_to_floor() {
Vector3 to = from - Vector3(0.0, max_snap_height, 0.0);
Set<RID> excluded = _get_physics_bodies_rid(sp);
- if (ss->intersect_ray(from, to, result, excluded)) {
+ PhysicsDirectSpaceState3D::RayParameters ray_params;
+ ray_params.from = from;
+ ray_params.to = to;
+ ray_params.exclude = excluded;
+
+ if (ss->intersect_ray(ray_params, result)) {
snapped_to_floor = true;
}
}
@@ -6583,7 +6594,12 @@ void Node3DEditor::snap_selected_nodes_to_floor() {
Vector3 to = from - Vector3(0.0, max_snap_height, 0.0);
Set<RID> excluded = _get_physics_bodies_rid(sp);
- if (ss->intersect_ray(from, to, result, excluded)) {
+ PhysicsDirectSpaceState3D::RayParameters ray_params;
+ ray_params.from = from;
+ ray_params.to = to;
+ ray_params.exclude = excluded;
+
+ if (ss->intersect_ray(ray_params, result)) {
Vector3 position_offset = d["position_offset"];
Transform3D new_transform = sp->get_global_transform();
@@ -6609,7 +6625,7 @@ void Node3DEditor::unhandled_key_input(const Ref<InputEvent> &p_event) {
return;
}
- snap_key_enabled = Input::get_singleton()->is_key_pressed(KEY_CTRL);
+ snap_key_enabled = Input::get_singleton()->is_key_pressed(Key::CTRL);
}
void Node3DEditor::_sun_environ_settings_pressed() {
@@ -6621,7 +6637,7 @@ void Node3DEditor::_sun_environ_settings_pressed() {
void Node3DEditor::_add_sun_to_scene(bool p_already_added_environment) {
sun_environ_popup->hide();
- if (!p_already_added_environment && world_env_count == 0 && Input::get_singleton()->is_key_pressed(KEY_SHIFT)) {
+ if (!p_already_added_environment && world_env_count == 0 && Input::get_singleton()->is_key_pressed(Key::SHIFT)) {
// Prevent infinite feedback loop between the sun and environment methods.
_add_environment_to_scene(true);
}
@@ -6636,7 +6652,7 @@ void Node3DEditor::_add_sun_to_scene(bool p_already_added_environment) {
Node *new_sun = preview_sun->duplicate();
undo_redo->create_action(TTR("Add Preview Sun to Scene"));
- undo_redo->add_do_method(base, "add_child", new_sun);
+ undo_redo->add_do_method(base, "add_child", new_sun, true);
// Move to the beginning of the scene tree since more "global" nodes
// generally look better when placed at the top.
undo_redo->add_do_method(base, "move_child", new_sun, 0);
@@ -6649,7 +6665,7 @@ void Node3DEditor::_add_sun_to_scene(bool p_already_added_environment) {
void Node3DEditor::_add_environment_to_scene(bool p_already_added_sun) {
sun_environ_popup->hide();
- if (!p_already_added_sun && directional_light_count == 0 && Input::get_singleton()->is_key_pressed(KEY_SHIFT)) {
+ if (!p_already_added_sun && directional_light_count == 0 && Input::get_singleton()->is_key_pressed(Key::SHIFT)) {
// Prevent infinite feedback loop between the sun and environment methods.
_add_sun_to_scene(true);
}
@@ -6666,7 +6682,7 @@ void Node3DEditor::_add_environment_to_scene(bool p_already_added_sun) {
new_env->set_environment(preview_environment->get_environment()->duplicate(true));
undo_redo->create_action(TTR("Add Preview Environment to Scene"));
- undo_redo->add_do_method(base, "add_child", new_env);
+ undo_redo->add_do_method(base, "add_child", new_env, true);
// Move to the beginning of the scene tree since more "global" nodes
// generally look better when placed at the top.
undo_redo->add_do_method(base, "move_child", new_env, 0);
@@ -7132,7 +7148,7 @@ void Node3DEditor::_update_preview_environment() {
} else {
if (!preview_sun->get_parent()) {
- add_child(preview_sun);
+ add_child(preview_sun, true);
sun_state->hide();
sun_vb->show();
}
@@ -7168,7 +7184,7 @@ void Node3DEditor::_update_preview_environment() {
void Node3DEditor::_sun_direction_input(const Ref<InputEvent> &p_event) {
Ref<InputEventMouseMotion> mm = p_event;
- if (mm.is_valid() && mm->get_button_mask() & MOUSE_BUTTON_MASK_LEFT) {
+ if (mm.is_valid() && (mm->get_button_mask() & MouseButton::MASK_LEFT) != MouseButton::NONE) {
sun_rotation.x += mm->get_relative().y * (0.02 * EDSCALE);
sun_rotation.y -= mm->get_relative().x * (0.02 * EDSCALE);
sun_rotation.x = CLAMP(sun_rotation.x, -Math_TAU / 4, Math_TAU / 4);
@@ -7225,9 +7241,9 @@ Node3DEditor::Node3DEditor(EditorNode *p_editor) {
tool_button[TOOL_MODE_SELECT]->set_pressed(true);
button_binds.write[0] = MENU_TOOL_SELECT;
tool_button[TOOL_MODE_SELECT]->connect("pressed", callable_mp(this, &Node3DEditor::_menu_item_pressed), button_binds);
- tool_button[TOOL_MODE_SELECT]->set_shortcut(ED_SHORTCUT("spatial_editor/tool_select", TTR("Select Mode"), KEY_Q));
+ tool_button[TOOL_MODE_SELECT]->set_shortcut(ED_SHORTCUT("spatial_editor/tool_select", TTR("Select Mode"), Key::Q));
tool_button[TOOL_MODE_SELECT]->set_shortcut_context(this);
- tool_button[TOOL_MODE_SELECT]->set_tooltip(keycode_get_string(KEY_MASK_CMD) + TTR("Drag: Rotate selected node around pivot.") + "\n" + TTR("Alt+RMB: Show list of all nodes at position clicked, including locked."));
+ tool_button[TOOL_MODE_SELECT]->set_tooltip(keycode_get_string((Key)KeyModifierMask::CMD) + TTR("Drag: Rotate selected node around pivot.") + "\n" + TTR("Alt+RMB: Show list of all nodes at position clicked, including locked."));
hbc_menu->add_child(memnew(VSeparator));
tool_button[TOOL_MODE_MOVE] = memnew(Button);
@@ -7236,7 +7252,7 @@ Node3DEditor::Node3DEditor(EditorNode *p_editor) {
tool_button[TOOL_MODE_MOVE]->set_flat(true);
button_binds.write[0] = MENU_TOOL_MOVE;
tool_button[TOOL_MODE_MOVE]->connect("pressed", callable_mp(this, &Node3DEditor::_menu_item_pressed), button_binds);
- tool_button[TOOL_MODE_MOVE]->set_shortcut(ED_SHORTCUT("spatial_editor/tool_move", TTR("Move Mode"), KEY_W));
+ tool_button[TOOL_MODE_MOVE]->set_shortcut(ED_SHORTCUT("spatial_editor/tool_move", TTR("Move Mode"), Key::W));
tool_button[TOOL_MODE_MOVE]->set_shortcut_context(this);
tool_button[TOOL_MODE_ROTATE] = memnew(Button);
@@ -7245,7 +7261,7 @@ Node3DEditor::Node3DEditor(EditorNode *p_editor) {
tool_button[TOOL_MODE_ROTATE]->set_flat(true);
button_binds.write[0] = MENU_TOOL_ROTATE;
tool_button[TOOL_MODE_ROTATE]->connect("pressed", callable_mp(this, &Node3DEditor::_menu_item_pressed), button_binds);
- tool_button[TOOL_MODE_ROTATE]->set_shortcut(ED_SHORTCUT("spatial_editor/tool_rotate", TTR("Rotate Mode"), KEY_E));
+ tool_button[TOOL_MODE_ROTATE]->set_shortcut(ED_SHORTCUT("spatial_editor/tool_rotate", TTR("Rotate Mode"), Key::E));
tool_button[TOOL_MODE_ROTATE]->set_shortcut_context(this);
tool_button[TOOL_MODE_SCALE] = memnew(Button);
@@ -7254,7 +7270,7 @@ Node3DEditor::Node3DEditor(EditorNode *p_editor) {
tool_button[TOOL_MODE_SCALE]->set_flat(true);
button_binds.write[0] = MENU_TOOL_SCALE;
tool_button[TOOL_MODE_SCALE]->connect("pressed", callable_mp(this, &Node3DEditor::_menu_item_pressed), button_binds);
- tool_button[TOOL_MODE_SCALE]->set_shortcut(ED_SHORTCUT("spatial_editor/tool_scale", TTR("Scale Mode"), KEY_R));
+ tool_button[TOOL_MODE_SCALE]->set_shortcut(ED_SHORTCUT("spatial_editor/tool_scale", TTR("Scale Mode"), Key::R));
tool_button[TOOL_MODE_SCALE]->set_shortcut_context(this);
hbc_menu->add_child(memnew(VSeparator));
@@ -7274,7 +7290,7 @@ Node3DEditor::Node3DEditor(EditorNode *p_editor) {
tool_button[TOOL_LOCK_SELECTED]->connect("pressed", callable_mp(this, &Node3DEditor::_menu_item_pressed), button_binds);
tool_button[TOOL_LOCK_SELECTED]->set_tooltip(TTR("Lock selected node, preventing selection and movement."));
// Define the shortcut globally (without a context) so that it works if the Scene tree dock is currently focused.
- tool_button[TOOL_LOCK_SELECTED]->set_shortcut(ED_SHORTCUT("editor/lock_selected_nodes", TTR("Lock Selected Node(s)"), KEY_MASK_CMD | KEY_L));
+ tool_button[TOOL_LOCK_SELECTED]->set_shortcut(ED_SHORTCUT("editor/lock_selected_nodes", TTR("Lock Selected Node(s)"), KeyModifierMask::CMD | Key::L));
tool_button[TOOL_UNLOCK_SELECTED] = memnew(Button);
hbc_menu->add_child(tool_button[TOOL_UNLOCK_SELECTED]);
@@ -7283,7 +7299,7 @@ Node3DEditor::Node3DEditor(EditorNode *p_editor) {
tool_button[TOOL_UNLOCK_SELECTED]->connect("pressed", callable_mp(this, &Node3DEditor::_menu_item_pressed), button_binds);
tool_button[TOOL_UNLOCK_SELECTED]->set_tooltip(TTR("Unlock selected node, allowing selection and movement."));
// Define the shortcut globally (without a context) so that it works if the Scene tree dock is currently focused.
- tool_button[TOOL_UNLOCK_SELECTED]->set_shortcut(ED_SHORTCUT("editor/unlock_selected_nodes", TTR("Unlock Selected Node(s)"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_L));
+ tool_button[TOOL_UNLOCK_SELECTED]->set_shortcut(ED_SHORTCUT("editor/unlock_selected_nodes", TTR("Unlock Selected Node(s)"), KeyModifierMask::CMD | KeyModifierMask::SHIFT | Key::L));
tool_button[TOOL_GROUP_SELECTED] = memnew(Button);
hbc_menu->add_child(tool_button[TOOL_GROUP_SELECTED]);
@@ -7292,7 +7308,7 @@ Node3DEditor::Node3DEditor(EditorNode *p_editor) {
tool_button[TOOL_GROUP_SELECTED]->connect("pressed", callable_mp(this, &Node3DEditor::_menu_item_pressed), button_binds);
tool_button[TOOL_GROUP_SELECTED]->set_tooltip(TTR("Makes sure the object's children are not selectable."));
// Define the shortcut globally (without a context) so that it works if the Scene tree dock is currently focused.
- tool_button[TOOL_GROUP_SELECTED]->set_shortcut(ED_SHORTCUT("editor/group_selected_nodes", TTR("Group Selected Node(s)"), KEY_MASK_CMD | KEY_G));
+ tool_button[TOOL_GROUP_SELECTED]->set_shortcut(ED_SHORTCUT("editor/group_selected_nodes", TTR("Group Selected Node(s)"), KeyModifierMask::CMD | Key::G));
tool_button[TOOL_UNGROUP_SELECTED] = memnew(Button);
hbc_menu->add_child(tool_button[TOOL_UNGROUP_SELECTED]);
@@ -7301,7 +7317,7 @@ Node3DEditor::Node3DEditor(EditorNode *p_editor) {
tool_button[TOOL_UNGROUP_SELECTED]->connect("pressed", callable_mp(this, &Node3DEditor::_menu_item_pressed), button_binds);
tool_button[TOOL_UNGROUP_SELECTED]->set_tooltip(TTR("Restores the object's children's ability to be selected."));
// Define the shortcut globally (without a context) so that it works if the Scene tree dock is currently focused.
- tool_button[TOOL_UNGROUP_SELECTED]->set_shortcut(ED_SHORTCUT("editor/ungroup_selected_nodes", TTR("Ungroup Selected Node(s)"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_G));
+ tool_button[TOOL_UNGROUP_SELECTED]->set_shortcut(ED_SHORTCUT("editor/ungroup_selected_nodes", TTR("Ungroup Selected Node(s)"), KeyModifierMask::CMD | KeyModifierMask::SHIFT | Key::G));
hbc_menu->add_child(memnew(VSeparator));
@@ -7311,7 +7327,7 @@ Node3DEditor::Node3DEditor(EditorNode *p_editor) {
tool_option_button[TOOL_OPT_LOCAL_COORDS]->set_flat(true);
button_binds.write[0] = MENU_TOOL_LOCAL_COORDS;
tool_option_button[TOOL_OPT_LOCAL_COORDS]->connect("toggled", callable_mp(this, &Node3DEditor::_menu_item_toggled), button_binds);
- tool_option_button[TOOL_OPT_LOCAL_COORDS]->set_shortcut(ED_SHORTCUT("spatial_editor/local_coords", TTR("Use Local Space"), KEY_T));
+ tool_option_button[TOOL_OPT_LOCAL_COORDS]->set_shortcut(ED_SHORTCUT("spatial_editor/local_coords", TTR("Use Local Space"), Key::T));
tool_option_button[TOOL_OPT_LOCAL_COORDS]->set_shortcut_context(this);
tool_option_button[TOOL_OPT_USE_SNAP] = memnew(Button);
@@ -7320,7 +7336,7 @@ Node3DEditor::Node3DEditor(EditorNode *p_editor) {
tool_option_button[TOOL_OPT_USE_SNAP]->set_flat(true);
button_binds.write[0] = MENU_TOOL_USE_SNAP;
tool_option_button[TOOL_OPT_USE_SNAP]->connect("toggled", callable_mp(this, &Node3DEditor::_menu_item_toggled), button_binds);
- tool_option_button[TOOL_OPT_USE_SNAP]->set_shortcut(ED_SHORTCUT("spatial_editor/snap", TTR("Use Snap"), KEY_Y));
+ tool_option_button[TOOL_OPT_USE_SNAP]->set_shortcut(ED_SHORTCUT("spatial_editor/snap", TTR("Use Snap"), Key::Y));
tool_option_button[TOOL_OPT_USE_SNAP]->set_shortcut_context(this);
hbc_menu->add_child(memnew(VSeparator));
@@ -7366,27 +7382,27 @@ Node3DEditor::Node3DEditor(EditorNode *p_editor) {
preview_node = memnew(Node3D);
preview_bounds = AABB();
- ED_SHORTCUT("spatial_editor/bottom_view", TTR("Bottom View"), KEY_MASK_ALT + KEY_KP_7);
- ED_SHORTCUT("spatial_editor/top_view", TTR("Top View"), KEY_KP_7);
- ED_SHORTCUT("spatial_editor/rear_view", TTR("Rear View"), KEY_MASK_ALT + KEY_KP_1);
- ED_SHORTCUT("spatial_editor/front_view", TTR("Front View"), KEY_KP_1);
- ED_SHORTCUT("spatial_editor/left_view", TTR("Left View"), KEY_MASK_ALT + KEY_KP_3);
- ED_SHORTCUT("spatial_editor/right_view", TTR("Right View"), KEY_KP_3);
- ED_SHORTCUT("spatial_editor/orbit_view_down", TTR("Orbit View Down"), KEY_KP_2);
- ED_SHORTCUT("spatial_editor/orbit_view_left", TTR("Orbit View Left"), KEY_KP_4);
- ED_SHORTCUT("spatial_editor/orbit_view_right", TTR("Orbit View Right"), KEY_KP_6);
- ED_SHORTCUT("spatial_editor/orbit_view_up", TTR("Orbit View Up"), KEY_KP_8);
- ED_SHORTCUT("spatial_editor/orbit_view_180", TTR("Orbit View 180"), KEY_KP_9);
- ED_SHORTCUT("spatial_editor/switch_perspective_orthogonal", TTR("Switch Perspective/Orthogonal View"), KEY_KP_5);
- ED_SHORTCUT("spatial_editor/insert_anim_key", TTR("Insert Animation Key"), KEY_K);
- ED_SHORTCUT("spatial_editor/focus_origin", TTR("Focus Origin"), KEY_O);
- ED_SHORTCUT("spatial_editor/focus_selection", TTR("Focus Selection"), KEY_F);
- ED_SHORTCUT("spatial_editor/align_transform_with_view", TTR("Align Transform with View"), KEY_MASK_ALT + KEY_MASK_CMD + KEY_M);
- ED_SHORTCUT("spatial_editor/align_rotation_with_view", TTR("Align Rotation with View"), KEY_MASK_ALT + KEY_MASK_CMD + KEY_F);
- ED_SHORTCUT("spatial_editor/freelook_toggle", TTR("Toggle Freelook"), KEY_MASK_SHIFT + KEY_F);
- ED_SHORTCUT("spatial_editor/decrease_fov", TTR("Decrease Field of View"), KEY_MASK_CMD + KEY_EQUAL); // Usually direct access key for `KEY_PLUS`.
- ED_SHORTCUT("spatial_editor/increase_fov", TTR("Increase Field of View"), KEY_MASK_CMD + KEY_MINUS);
- ED_SHORTCUT("spatial_editor/reset_fov", TTR("Reset Field of View to Default"), KEY_MASK_CMD + KEY_0);
+ ED_SHORTCUT("spatial_editor/bottom_view", TTR("Bottom View"), KeyModifierMask::ALT + Key::KP_7);
+ ED_SHORTCUT("spatial_editor/top_view", TTR("Top View"), Key::KP_7);
+ ED_SHORTCUT("spatial_editor/rear_view", TTR("Rear View"), KeyModifierMask::ALT + Key::KP_1);
+ ED_SHORTCUT("spatial_editor/front_view", TTR("Front View"), Key::KP_1);
+ ED_SHORTCUT("spatial_editor/left_view", TTR("Left View"), KeyModifierMask::ALT + Key::KP_3);
+ ED_SHORTCUT("spatial_editor/right_view", TTR("Right View"), Key::KP_3);
+ ED_SHORTCUT("spatial_editor/orbit_view_down", TTR("Orbit View Down"), Key::KP_2);
+ ED_SHORTCUT("spatial_editor/orbit_view_left", TTR("Orbit View Left"), Key::KP_4);
+ ED_SHORTCUT("spatial_editor/orbit_view_right", TTR("Orbit View Right"), Key::KP_6);
+ ED_SHORTCUT("spatial_editor/orbit_view_up", TTR("Orbit View Up"), Key::KP_8);
+ ED_SHORTCUT("spatial_editor/orbit_view_180", TTR("Orbit View 180"), Key::KP_9);
+ ED_SHORTCUT("spatial_editor/switch_perspective_orthogonal", TTR("Switch Perspective/Orthogonal View"), Key::KP_5);
+ ED_SHORTCUT("spatial_editor/insert_anim_key", TTR("Insert Animation Key"), Key::K);
+ ED_SHORTCUT("spatial_editor/focus_origin", TTR("Focus Origin"), Key::O);
+ ED_SHORTCUT("spatial_editor/focus_selection", TTR("Focus Selection"), Key::F);
+ ED_SHORTCUT("spatial_editor/align_transform_with_view", TTR("Align Transform with View"), KeyModifierMask::ALT + KeyModifierMask::CMD + Key::M);
+ ED_SHORTCUT("spatial_editor/align_rotation_with_view", TTR("Align Rotation with View"), KeyModifierMask::ALT + KeyModifierMask::CMD + Key::F);
+ ED_SHORTCUT("spatial_editor/freelook_toggle", TTR("Toggle Freelook"), KeyModifierMask::SHIFT + Key::F);
+ ED_SHORTCUT("spatial_editor/decrease_fov", TTR("Decrease Field of View"), KeyModifierMask::CMD + Key::EQUAL); // Usually direct access key for `KEY_PLUS`.
+ ED_SHORTCUT("spatial_editor/increase_fov", TTR("Increase Field of View"), KeyModifierMask::CMD + Key::MINUS);
+ ED_SHORTCUT("spatial_editor/reset_fov", TTR("Reset Field of View to Default"), KeyModifierMask::CMD + Key::KEY_0);
PopupMenu *p;
@@ -7397,7 +7413,7 @@ Node3DEditor::Node3DEditor(EditorNode *p_editor) {
hbc_menu->add_child(transform_menu);
p = transform_menu->get_popup();
- p->add_shortcut(ED_SHORTCUT("spatial_editor/snap_to_floor", TTR("Snap Object to Floor"), KEY_PAGEDOWN), MENU_SNAP_TO_FLOOR);
+ p->add_shortcut(ED_SHORTCUT("spatial_editor/snap_to_floor", TTR("Snap Object to Floor"), Key::PAGEDOWN), MENU_SNAP_TO_FLOOR);
p->add_shortcut(ED_SHORTCUT("spatial_editor/transform_dialog", TTR("Transform Dialog...")), MENU_TRANSFORM_DIALOG);
p->add_separator();
@@ -7429,19 +7445,19 @@ Node3DEditor::Node3DEditor(EditorNode *p_editor) {
accept = memnew(AcceptDialog);
editor->get_gui_base()->add_child(accept);
- p->add_radio_check_shortcut(ED_SHORTCUT("spatial_editor/1_viewport", TTR("1 Viewport"), KEY_MASK_CMD + KEY_1), MENU_VIEW_USE_1_VIEWPORT);
- p->add_radio_check_shortcut(ED_SHORTCUT("spatial_editor/2_viewports", TTR("2 Viewports"), KEY_MASK_CMD + KEY_2), MENU_VIEW_USE_2_VIEWPORTS);
- p->add_radio_check_shortcut(ED_SHORTCUT("spatial_editor/2_viewports_alt", TTR("2 Viewports (Alt)"), KEY_MASK_ALT + KEY_MASK_CMD + KEY_2), MENU_VIEW_USE_2_VIEWPORTS_ALT);
- p->add_radio_check_shortcut(ED_SHORTCUT("spatial_editor/3_viewports", TTR("3 Viewports"), KEY_MASK_CMD + KEY_3), MENU_VIEW_USE_3_VIEWPORTS);
- p->add_radio_check_shortcut(ED_SHORTCUT("spatial_editor/3_viewports_alt", TTR("3 Viewports (Alt)"), KEY_MASK_ALT + KEY_MASK_CMD + KEY_3), MENU_VIEW_USE_3_VIEWPORTS_ALT);
- p->add_radio_check_shortcut(ED_SHORTCUT("spatial_editor/4_viewports", TTR("4 Viewports"), KEY_MASK_CMD + KEY_4), MENU_VIEW_USE_4_VIEWPORTS);
+ p->add_radio_check_shortcut(ED_SHORTCUT("spatial_editor/1_viewport", TTR("1 Viewport"), KeyModifierMask::CMD + Key::KEY_1), MENU_VIEW_USE_1_VIEWPORT);
+ p->add_radio_check_shortcut(ED_SHORTCUT("spatial_editor/2_viewports", TTR("2 Viewports"), KeyModifierMask::CMD + Key::KEY_2), MENU_VIEW_USE_2_VIEWPORTS);
+ p->add_radio_check_shortcut(ED_SHORTCUT("spatial_editor/2_viewports_alt", TTR("2 Viewports (Alt)"), KeyModifierMask::ALT + KeyModifierMask::CMD + Key::KEY_2), MENU_VIEW_USE_2_VIEWPORTS_ALT);
+ p->add_radio_check_shortcut(ED_SHORTCUT("spatial_editor/3_viewports", TTR("3 Viewports"), KeyModifierMask::CMD + Key::KEY_3), MENU_VIEW_USE_3_VIEWPORTS);
+ p->add_radio_check_shortcut(ED_SHORTCUT("spatial_editor/3_viewports_alt", TTR("3 Viewports (Alt)"), KeyModifierMask::ALT + KeyModifierMask::CMD + Key::KEY_3), MENU_VIEW_USE_3_VIEWPORTS_ALT);
+ p->add_radio_check_shortcut(ED_SHORTCUT("spatial_editor/4_viewports", TTR("4 Viewports"), KeyModifierMask::CMD + Key::KEY_4), MENU_VIEW_USE_4_VIEWPORTS);
p->add_separator();
p->add_submenu_item(TTR("Gizmos"), "GizmosMenu");
p->add_separator();
p->add_check_shortcut(ED_SHORTCUT("spatial_editor/view_origin", TTR("View Origin")), MENU_VIEW_ORIGIN);
- p->add_check_shortcut(ED_SHORTCUT("spatial_editor/view_grid", TTR("View Grid"), KEY_NUMBERSIGN), MENU_VIEW_GRID);
+ p->add_check_shortcut(ED_SHORTCUT("spatial_editor/view_grid", TTR("View Grid"), Key::NUMBERSIGN), MENU_VIEW_GRID);
p->add_separator();
p->add_shortcut(ED_SHORTCUT("spatial_editor/settings", TTR("Settings...")), MENU_VIEW_CAMERA_SETTINGS);
@@ -7854,7 +7870,7 @@ bool Node3DEditor::is_gizmo_visible() const {
double Node3DEditor::get_translate_snap() const {
double snap_value;
- if (Input::get_singleton()->is_key_pressed(KEY_SHIFT)) {
+ if (Input::get_singleton()->is_key_pressed(Key::SHIFT)) {
snap_value = snap_translate->get_text().to_float() / 10.0;
} else {
snap_value = snap_translate->get_text().to_float();
@@ -7865,7 +7881,7 @@ double Node3DEditor::get_translate_snap() const {
double Node3DEditor::get_rotate_snap() const {
double snap_value;
- if (Input::get_singleton()->is_key_pressed(KEY_SHIFT)) {
+ if (Input::get_singleton()->is_key_pressed(Key::SHIFT)) {
snap_value = snap_rotate->get_text().to_float() / 3.0;
} else {
snap_value = snap_rotate->get_text().to_float();
@@ -7876,7 +7892,7 @@ double Node3DEditor::get_rotate_snap() const {
double Node3DEditor::get_scale_snap() const {
double snap_value;
- if (Input::get_singleton()->is_key_pressed(KEY_SHIFT)) {
+ if (Input::get_singleton()->is_key_pressed(Key::SHIFT)) {
snap_value = snap_scale->get_text().to_float() / 2.0;
} else {
snap_value = snap_scale->get_text().to_float();
diff --git a/editor/plugins/ot_features_plugin.cpp b/editor/plugins/ot_features_plugin.cpp
index fd42bce06e..c949621e28 100644
--- a/editor/plugins/ot_features_plugin.cpp
+++ b/editor/plugins/ot_features_plugin.cpp
@@ -185,12 +185,6 @@ bool EditorInspectorPluginOpenTypeFeatures::can_handle(Object *p_object) {
return (Object::cast_to<Control>(p_object) != nullptr);
}
-void EditorInspectorPluginOpenTypeFeatures::parse_begin(Object *p_object) {
-}
-
-void EditorInspectorPluginOpenTypeFeatures::parse_category(Object *p_object, const String &p_parse_category) {
-}
-
bool EditorInspectorPluginOpenTypeFeatures::parse_property(Object *p_object, const Variant::Type p_type, const String &p_path, const PropertyHint p_hint, const String &p_hint_text, const uint32_t p_usage, const bool p_wide) {
if (p_path == "opentype_features/_new") {
OpenTypeFeaturesAdd *editor = memnew(OpenTypeFeaturesAdd);
diff --git a/editor/plugins/ot_features_plugin.h b/editor/plugins/ot_features_plugin.h
index dbafa3bbf6..add491ed48 100644
--- a/editor/plugins/ot_features_plugin.h
+++ b/editor/plugins/ot_features_plugin.h
@@ -86,8 +86,6 @@ class EditorInspectorPluginOpenTypeFeatures : public EditorInspectorPlugin {
public:
virtual bool can_handle(Object *p_object) override;
- virtual void parse_begin(Object *p_object) override;
- virtual void parse_category(Object *p_object, const String &p_parse_category) override;
virtual bool parse_property(Object *p_object, const Variant::Type p_type, const String &p_path, const PropertyHint p_hint, const String &p_hint_text, const uint32_t p_usage, const bool p_wide = false) override;
};
diff --git a/editor/plugins/path_2d_editor_plugin.cpp b/editor/plugins/path_2d_editor_plugin.cpp
index 119ecddf63..79f8ce95cd 100644
--- a/editor/plugins/path_2d_editor_plugin.cpp
+++ b/editor/plugins/path_2d_editor_plugin.cpp
@@ -88,7 +88,7 @@ bool Path2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) {
real_t dist_to_p_in = gpoint.distance_to(xform.xform(curve->get_point_position(i) + curve->get_point_in(i)));
// Check for point movement start (for point + in/out controls).
- if (mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (mb->get_button_index() == MouseButton::LEFT) {
if (mode == MODE_EDIT && !mb->is_shift_pressed() && dist_to_p < grab_threshold) {
// Points can only be moved in edit mode.
@@ -118,7 +118,7 @@ bool Path2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) {
}
// Check for point deletion.
- if ((mb->get_button_index() == MOUSE_BUTTON_RIGHT && mode == MODE_EDIT) || (mb->get_button_index() == MOUSE_BUTTON_LEFT && mode == MODE_DELETE)) {
+ if ((mb->get_button_index() == MouseButton::RIGHT && mode == MODE_EDIT) || (mb->get_button_index() == MouseButton::LEFT && mode == MODE_DELETE)) {
if (dist_to_p < grab_threshold) {
undo_redo->create_action(TTR("Remove Point from Curve"));
undo_redo->add_do_method(curve.ptr(), "remove_point", i);
@@ -149,7 +149,7 @@ bool Path2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) {
}
// Check for point creation.
- if (mb->is_pressed() && mb->get_button_index() == MOUSE_BUTTON_LEFT && ((mb->is_command_pressed() && mode == MODE_EDIT) || mode == MODE_CREATE)) {
+ if (mb->is_pressed() && mb->get_button_index() == MouseButton::LEFT && ((mb->is_command_pressed() && mode == MODE_EDIT) || mode == MODE_CREATE)) {
Ref<Curve2D> curve = node->get_curve();
undo_redo->create_action(TTR("Add Point to Curve"));
@@ -170,7 +170,7 @@ bool Path2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) {
}
// Check for segment split.
- if (mb->is_pressed() && mb->get_button_index() == MOUSE_BUTTON_LEFT && mode == MODE_EDIT && on_edge) {
+ if (mb->is_pressed() && mb->get_button_index() == MouseButton::LEFT && mode == MODE_EDIT && on_edge) {
Vector2 gpoint2 = mb->get_position();
Ref<Curve2D> curve = node->get_curve();
@@ -207,7 +207,7 @@ bool Path2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) {
}
// Check for point movement completion.
- if (!mb->is_pressed() && mb->get_button_index() == MOUSE_BUTTON_LEFT && action != ACTION_NONE) {
+ if (!mb->is_pressed() && mb->get_button_index() == MouseButton::LEFT && action != ACTION_NONE) {
Ref<Curve2D> curve = node->get_curve();
Vector2 new_pos = moving_from + xform.affine_inverse().basis_xform(gpoint - moving_screen_from);
@@ -537,7 +537,7 @@ Path2DEditor::Path2DEditor(EditorNode *p_editor) {
curve_edit->set_icon(EditorNode::get_singleton()->get_gui_base()->get_theme_icon(SNAME("CurveEdit"), SNAME("EditorIcons")));
curve_edit->set_toggle_mode(true);
curve_edit->set_focus_mode(Control::FOCUS_NONE);
- curve_edit->set_tooltip(TTR("Select Points") + "\n" + TTR("Shift+Drag: Select Control Points") + "\n" + keycode_get_string(KEY_MASK_CMD) + TTR("Click: Add Point") + "\n" + TTR("Left Click: Split Segment (in curve)") + "\n" + TTR("Right Click: Delete Point"));
+ curve_edit->set_tooltip(TTR("Select Points") + "\n" + TTR("Shift+Drag: Select Control Points") + "\n" + keycode_get_string((Key)KeyModifierMask::CMD) + TTR("Click: Add Point") + "\n" + TTR("Left Click: Split Segment (in curve)") + "\n" + TTR("Right Click: Delete Point"));
curve_edit->connect("pressed", callable_mp(this, &Path2DEditor::_mode_selected), varray(MODE_EDIT));
base_hb->add_child(curve_edit);
curve_edit_curve = memnew(Button);
diff --git a/editor/plugins/path_3d_editor_plugin.cpp b/editor/plugins/path_3d_editor_plugin.cpp
index f9a5f429d2..e83f6481f9 100644
--- a/editor/plugins/path_3d_editor_plugin.cpp
+++ b/editor/plugins/path_3d_editor_plugin.cpp
@@ -316,7 +316,7 @@ EditorPlugin::AfterGUIInput Path3DEditorPlugin::forward_spatial_gui_input(Camera
set_handle_clicked(false);
}
- if (mb->is_pressed() && mb->get_button_index() == MOUSE_BUTTON_LEFT && (curve_create->is_pressed() || (curve_edit->is_pressed() && mb->is_ctrl_pressed()))) {
+ if (mb->is_pressed() && mb->get_button_index() == MouseButton::LEFT && (curve_create->is_pressed() || (curve_edit->is_pressed() && mb->is_ctrl_pressed()))) {
//click into curve, break it down
Vector<Vector3> v3a = c->tessellate();
int idx = 0;
@@ -411,7 +411,7 @@ EditorPlugin::AfterGUIInput Path3DEditorPlugin::forward_spatial_gui_input(Camera
//add new at pos
}
- } else if (mb->is_pressed() && ((mb->get_button_index() == MOUSE_BUTTON_LEFT && curve_del->is_pressed()) || (mb->get_button_index() == MOUSE_BUTTON_RIGHT && curve_edit->is_pressed()))) {
+ } else if (mb->is_pressed() && ((mb->get_button_index() == MouseButton::LEFT && curve_del->is_pressed()) || (mb->get_button_index() == MouseButton::RIGHT && curve_edit->is_pressed()))) {
for (int i = 0; i < c->get_point_count(); i++) {
real_t dist_to_p = p_camera->unproject_position(gt.xform(c->get_point_position(i))).distance_to(mbpos);
real_t dist_to_p_out = p_camera->unproject_position(gt.xform(c->get_point_position(i) + c->get_point_out(i))).distance_to(mbpos);
@@ -573,7 +573,7 @@ Path3DEditorPlugin::Path3DEditorPlugin(EditorNode *p_node) {
curve_edit->set_toggle_mode(true);
curve_edit->hide();
curve_edit->set_focus_mode(Control::FOCUS_NONE);
- curve_edit->set_tooltip(TTR("Select Points") + "\n" + TTR("Shift+Drag: Select Control Points") + "\n" + keycode_get_string(KEY_MASK_CMD) + TTR("Click: Add Point") + "\n" + TTR("Right Click: Delete Point"));
+ curve_edit->set_tooltip(TTR("Select Points") + "\n" + TTR("Shift+Drag: Select Control Points") + "\n" + keycode_get_string((Key)KeyModifierMask::CMD) + TTR("Click: Add Point") + "\n" + TTR("Right Click: Delete Point"));
Node3DEditor::get_singleton()->add_control_to_menu_panel(curve_edit);
curve_create = memnew(Button);
curve_create->set_flat(true);
diff --git a/editor/plugins/polygon_2d_editor_plugin.cpp b/editor/plugins/polygon_2d_editor_plugin.cpp
index 5afe9ed60c..79cfcbec64 100644
--- a/editor/plugins/polygon_2d_editor_plugin.cpp
+++ b/editor/plugins/polygon_2d_editor_plugin.cpp
@@ -447,7 +447,7 @@ void Polygon2DEditor::_uv_input(const Ref<InputEvent> &p_input) {
Ref<InputEventMouseButton> mb = p_input;
if (mb.is_valid()) {
- if (mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (mb->get_button_index() == MouseButton::LEFT) {
if (mb->is_pressed()) {
uv_drag_from = snap_point(mb->get_position());
uv_drag = true;
@@ -584,10 +584,10 @@ void Polygon2DEditor::_uv_input(const Ref<InputEvent> &p_input) {
return;
}
- uv_create_poly_prev.remove(closest);
- uv_create_uv_prev.remove(closest);
+ uv_create_poly_prev.remove_at(closest);
+ uv_create_uv_prev.remove_at(closest);
if (uv_create_colors_prev.size()) {
- uv_create_colors_prev.remove(closest);
+ uv_create_colors_prev.remove_at(closest);
}
undo_redo->create_action(TTR("Remove Internal Vertex"));
@@ -599,7 +599,7 @@ void Polygon2DEditor::_uv_input(const Ref<InputEvent> &p_input) {
undo_redo->add_undo_method(node, "set_vertex_colors", node->get_vertex_colors());
for (int i = 0; i < node->get_bone_count(); i++) {
Vector<float> bonew = node->get_bone_weights(i);
- bonew.remove(closest);
+ bonew.remove_at(closest);
undo_redo->add_do_method(node, "set_bone_weights", i, bonew);
undo_redo->add_undo_method(node, "set_bone_weights", i, node->get_bone_weights(i));
}
@@ -702,7 +702,7 @@ void Polygon2DEditor::_uv_input(const Ref<InputEvent> &p_input) {
}
if (erase_index != -1) {
- polygons.remove(erase_index);
+ polygons.remove_at(erase_index);
undo_redo->create_action(TTR("Remove Custom Polygon"));
undo_redo->add_do_method(node, "set_polygons", polygons);
undo_redo->add_undo_method(node, "set_polygons", node->get_polygons());
@@ -759,7 +759,7 @@ void Polygon2DEditor::_uv_input(const Ref<InputEvent> &p_input) {
bone_painting = false;
}
}
- } else if (mb->get_button_index() == MOUSE_BUTTON_RIGHT && mb->is_pressed()) {
+ } else if (mb->get_button_index() == MouseButton::RIGHT && mb->is_pressed()) {
_cancel_editing();
if (bone_painting) {
@@ -768,9 +768,9 @@ void Polygon2DEditor::_uv_input(const Ref<InputEvent> &p_input) {
uv_edit_draw->update();
- } else if (mb->get_button_index() == MOUSE_BUTTON_WHEEL_UP && mb->is_pressed()) {
+ } else if (mb->get_button_index() == MouseButton::WHEEL_UP && mb->is_pressed()) {
uv_zoom->set_value(uv_zoom->get_value() / (1 - (0.1 * mb->get_factor())));
- } else if (mb->get_button_index() == MOUSE_BUTTON_WHEEL_DOWN && mb->is_pressed()) {
+ } else if (mb->get_button_index() == MouseButton::WHEEL_DOWN && mb->is_pressed()) {
uv_zoom->set_value(uv_zoom->get_value() * (1 - (0.1 * mb->get_factor())));
}
}
@@ -778,7 +778,7 @@ void Polygon2DEditor::_uv_input(const Ref<InputEvent> &p_input) {
Ref<InputEventMouseMotion> mm = p_input;
if (mm.is_valid()) {
- if ((mm->get_button_mask() & MOUSE_BUTTON_MASK_MIDDLE) || Input::get_singleton()->is_key_pressed(KEY_SPACE)) {
+ if ((mm->get_button_mask() & MouseButton::MASK_MIDDLE) != MouseButton::NONE || Input::get_singleton()->is_key_pressed(Key::SPACE)) {
Vector2 drag = mm->get_relative();
uv_hscroll->set_value(uv_hscroll->get_value() - drag.x);
uv_vscroll->set_value(uv_vscroll->get_value() - drag.y);
diff --git a/editor/plugins/root_motion_editor_plugin.cpp b/editor/plugins/root_motion_editor_plugin.cpp
index ed91f174d1..0f3c50a861 100644
--- a/editor/plugins/root_motion_editor_plugin.cpp
+++ b/editor/plugins/root_motion_editor_plugin.cpp
@@ -271,11 +271,7 @@ EditorPropertyRootMotion::EditorPropertyRootMotion() {
//////////////////////////
bool EditorInspectorRootMotionPlugin::can_handle(Object *p_object) {
- return true; //can handle everything
-}
-
-void EditorInspectorRootMotionPlugin::parse_begin(Object *p_object) {
- //do none
+ return true; // Can handle everything.
}
bool EditorInspectorRootMotionPlugin::parse_property(Object *p_object, const Variant::Type p_type, const String &p_path, const PropertyHint p_hint, const String &p_hint_text, const uint32_t p_usage, const bool p_wide) {
@@ -288,9 +284,5 @@ bool EditorInspectorRootMotionPlugin::parse_property(Object *p_object, const Var
return true;
}
- return false; //can be overridden, although it will most likely be last anyway
-}
-
-void EditorInspectorRootMotionPlugin::parse_end() {
- //do none
+ return false;
}
diff --git a/editor/plugins/root_motion_editor_plugin.h b/editor/plugins/root_motion_editor_plugin.h
index 1484af62e8..c05975b6c3 100644
--- a/editor/plugins/root_motion_editor_plugin.h
+++ b/editor/plugins/root_motion_editor_plugin.h
@@ -64,9 +64,7 @@ class EditorInspectorRootMotionPlugin : public EditorInspectorPlugin {
public:
virtual bool can_handle(Object *p_object) override;
- virtual void parse_begin(Object *p_object) override;
virtual bool parse_property(Object *p_object, const Variant::Type p_type, const String &p_path, const PropertyHint p_hint, const String &p_hint_text, const uint32_t p_usage, const bool p_wide = false) override;
- virtual void parse_end() override;
};
#endif // ROOT_MOTION_EDITOR_PLUGIN_H
diff --git a/editor/plugins/script_editor_plugin.cpp b/editor/plugins/script_editor_plugin.cpp
index 3f98560a2f..aeb6ba13d5 100644
--- a/editor/plugins/script_editor_plugin.cpp
+++ b/editor/plugins/script_editor_plugin.cpp
@@ -46,7 +46,7 @@
#include "editor/find_in_files.h"
#include "editor/node_dock.h"
#include "editor/plugins/shader_editor_plugin.h"
-#include "modules/visual_script/visual_script_editor.h"
+#include "modules/visual_script/editor/visual_script_editor.h"
#include "scene/main/window.h"
#include "scene/scene_string_names.h"
#include "script_text_editor.h"
@@ -227,12 +227,6 @@ void ScriptEditorBase::_bind_methods() {
ADD_SIGNAL(MethodInfo("replace_in_files_requested", PropertyInfo(Variant::STRING, "text")));
}
-static bool _is_built_in_script(Script *p_script) {
- String path = p_script->get_path();
-
- return path.find("::") != -1;
-}
-
class EditorScriptCodeCompletionCache : public ScriptCodeCompletionCache {
struct Cache {
uint64_t time_loaded = 0;
@@ -315,7 +309,7 @@ void ScriptEditorQuickOpen::_text_changed(const String &p_newtext) {
void ScriptEditorQuickOpen::_sbox_input(const Ref<InputEvent> &p_ie) {
Ref<InputEventKey> k = p_ie;
- if (k.is_valid() && (k->get_keycode() == KEY_UP || k->get_keycode() == KEY_DOWN || k->get_keycode() == KEY_PAGEUP || k->get_keycode() == KEY_PAGEDOWN)) {
+ if (k.is_valid() && (k->get_keycode() == Key::UP || k->get_keycode() == Key::DOWN || k->get_keycode() == Key::PAGEUP || k->get_keycode() == Key::PAGEDOWN)) {
search_options->gui_input(k);
search_box->accept_event();
}
@@ -739,7 +733,7 @@ void ScriptEditor::_open_recent_script(int p_idx) {
return;
}
- rc.remove(p_idx);
+ rc.remove_at(p_idx);
EditorSettings::get_singleton()->set_project_metadata("recent_files", "scripts", rc);
_update_recent_scripts();
_show_error_dialog(path);
@@ -764,7 +758,7 @@ void ScriptEditor::_close_tab(int p_idx, bool p_save, bool p_history_back) {
if (p_save && file.is_valid()) {
// Do not try to save internal scripts, but prompt to save in-memory
// scripts which are not saved to disk yet (have empty path).
- if (file->get_path().find("local://") == -1 && file->get_path().find("::") == -1) {
+ if (file->is_built_in()) {
save_current_script();
}
}
@@ -791,7 +785,7 @@ void ScriptEditor::_close_tab(int p_idx, bool p_save, bool p_history_back) {
for (int i = 0; i < history.size(); i++) {
if (history[i].control == tselected) {
- history.remove(i);
+ history.remove_at(i);
i--;
history_pos--;
}
@@ -910,7 +904,7 @@ void ScriptEditor::_resave_scripts(const String &p_str) {
RES script = se->get_edited_resource();
- if (script->get_path() == "" || script->get_path().find("local://") != -1 || script->get_path().find("::") != -1) {
+ if (script->is_built_in()) {
continue; //internal script, who cares
}
@@ -951,7 +945,7 @@ void ScriptEditor::_reload_scripts() {
RES edited_res = se->get_edited_resource();
- if (edited_res->get_path() == "" || edited_res->get_path().find("local://") != -1 || edited_res->get_path().find("::") != -1) {
+ if (edited_res->is_built_in()) {
continue; //internal script, who cares
}
@@ -995,10 +989,6 @@ void ScriptEditor::_res_saved_callback(const Ref<Resource> &p_res) {
RES script = se->get_edited_resource();
- if (script->get_path() == "" || script->get_path().find("local://") != -1 || script->get_path().find("::") != -1) {
- continue; //internal script, who cares
- }
-
if (script == p_res) {
se->tag_saved_version();
}
@@ -1008,6 +998,31 @@ void ScriptEditor::_res_saved_callback(const Ref<Resource> &p_res) {
_trigger_live_script_reload();
}
+void ScriptEditor::_scene_saved_callback(const String &p_path) {
+ // If scene was saved, mark all built-in scripts from that scene as saved.
+ for (int i = 0; i < tab_container->get_child_count(); i++) {
+ ScriptEditorBase *se = Object::cast_to<ScriptEditorBase>(tab_container->get_child(i));
+ if (!se) {
+ continue;
+ }
+
+ RES edited_res = se->get_edited_resource();
+
+ if (!edited_res->is_built_in()) {
+ continue; // External script, who cares.
+ }
+
+ if (edited_res->get_path().get_slice("::", 0) == p_path) {
+ se->tag_saved_version();
+ }
+
+ Ref<Script> scr = edited_res;
+ if (scr.is_valid() && scr->is_tool()) {
+ scr->reload(true);
+ }
+ }
+}
+
void ScriptEditor::_trigger_live_script_reload() {
if (!pending_auto_reload && auto_reload_running_scripts) {
call_deferred(SNAME("_live_auto_reload_running_scripts"));
@@ -1037,7 +1052,7 @@ bool ScriptEditor::_test_script_times_on_disk(RES p_for_script) {
continue;
}
- if (edited_res->get_path() == "" || edited_res->get_path().find("local://") != -1 || edited_res->get_path().find("::") != -1) {
+ if (edited_res->is_built_in()) {
continue; //internal script, who cares
}
@@ -1400,8 +1415,12 @@ void ScriptEditor::_menu_option(int p_option) {
} break;
case SHOW_IN_FILE_SYSTEM: {
const RES script = current->get_edited_resource();
- const String path = script->get_path();
+ String path = script->get_path();
if (!path.is_empty()) {
+ if (script->is_built_in()) {
+ path = path.get_slice("::", 0); // Show the scene instead.
+ }
+
FileSystemDock *file_system_dock = EditorNode::get_singleton()->get_filesystem_dock();
file_system_dock->navigate_to_path(path);
// Ensure that the FileSystem dock is visible.
@@ -1531,6 +1550,7 @@ void ScriptEditor::_notification(int p_what) {
editor->connect("stop_pressed", callable_mp(this, &ScriptEditor::_editor_stop));
editor->connect("script_add_function_request", callable_mp(this, &ScriptEditor::_add_callback));
editor->connect("resource_saved", callable_mp(this, &ScriptEditor::_res_saved_callback));
+ editor->connect("scene_saved", callable_mp(this, &ScriptEditor::_scene_saved_callback));
editor->get_filesystem_dock()->connect("files_moved", callable_mp(this, &ScriptEditor::_files_moved));
editor->get_filesystem_dock()->connect("file_removed", callable_mp(this, &ScriptEditor::_file_removed));
script_list->connect("item_selected", callable_mp(this, &ScriptEditor::_script_selected));
@@ -1624,8 +1644,8 @@ void ScriptEditor::close_builtin_scripts_from_scene(const String &p_scene) {
continue;
}
- if (script->get_path().find("::") != -1 && script->get_path().begins_with(p_scene)) { //is an internal script and belongs to scene being closed
- _close_tab(i);
+ if (script->is_built_in() && script->get_path().begins_with(p_scene)) { //is an internal script and belongs to scene being closed
+ _close_tab(i, false);
i--;
}
}
@@ -1708,7 +1728,7 @@ void ScriptEditor::_help_overview_selected(int p_idx) {
}
void ScriptEditor::_script_selected(int p_idx) {
- grab_focus_block = !Input::get_singleton()->is_mouse_button_pressed(MOUSE_BUTTON_LEFT); //amazing hack, simply amazing
+ grab_focus_block = !Input::get_singleton()->is_mouse_button_pressed(MouseButton::LEFT); //amazing hack, simply amazing
_go_to_tab(script_list->get_item_metadata(p_idx));
grab_focus_block = false;
@@ -1932,20 +1952,7 @@ void ScriptEditor::_update_script_names() {
// to update original path to previously edited resource.
se->set_meta("_edit_res_path", path);
}
- bool built_in = !path.is_resource_file();
- String name;
-
- if (built_in) {
- name = path.get_file();
- const String &resource_name = se->get_edited_resource()->get_name();
- if (resource_name != "") {
- // If the built-in script has a custom resource name defined,
- // display the built-in script name as follows: `ResourceName (scene_file.tscn)`
- name = vformat("%s (%s)", resource_name, name.substr(0, name.find("::", 0)));
- }
- } else {
- name = se->get_name();
- }
+ String name = se->get_name();
_ScriptEditorItemData sd;
sd.icon = icon;
@@ -2180,9 +2187,10 @@ bool ScriptEditor::edit(const RES &p_resource, int p_line, int p_col, bool p_gra
Ref<Script> script = p_resource;
// Don't open dominant script if using an external editor.
- const bool use_external_editor =
+ bool use_external_editor =
EditorSettings::get_singleton()->get("text_editor/external/use_external_editor") ||
(script.is_valid() && script->get_language()->overrides_external_editor());
+ use_external_editor = use_external_editor && !(script.is_valid() && script->is_built_in()); // Ignore external editor for built-in scripts.
const bool open_dominant = EditorSettings::get_singleton()->get("text_editor/behavior/files/open_dominant_script_on_scene_change");
const bool should_open = (open_dominant && !use_external_editor) || !EditorNode::get_singleton()->is_changing_scene();
@@ -2408,7 +2416,17 @@ void ScriptEditor::save_current_script() {
}
}
- editor->save_resource(resource);
+ if (resource->is_built_in()) {
+ // If built-in script, save the scene instead.
+ const String scene_path = resource->get_path().get_slice("::", 0);
+ if (!scene_path.is_empty()) {
+ Vector<String> scene_to_save;
+ scene_to_save.push_back(scene_path);
+ editor->save_scene_list(scene_to_save);
+ }
+ } else {
+ editor->save_resource(resource);
+ }
if (script != nullptr) {
const Vector<DocData::ClassDoc> &documentations = script->get_documentation();
@@ -2421,6 +2439,8 @@ void ScriptEditor::save_current_script() {
}
void ScriptEditor::save_all_scripts() {
+ Vector<String> scenes_to_save;
+
for (int i = 0; i < tab_container->get_child_count(); i++) {
ScriptEditorBase *se = Object::cast_to<ScriptEditorBase>(tab_container->get_child(i));
if (!se) {
@@ -2450,7 +2470,7 @@ void ScriptEditor::save_all_scripts() {
se->apply_code();
}
- if (edited_res->get_path() != "" && edited_res->get_path().find("local://") == -1 && edited_res->get_path().find("::") == -1) {
+ if (!edited_res->is_built_in()) {
Ref<TextFile> text_file = edited_res;
Ref<Script> script = edited_res;
@@ -2479,9 +2499,19 @@ void ScriptEditor::save_all_scripts() {
update_doc(doc.name);
}
}
+ } else {
+ // For built-in scripts, save their scenes instead.
+ const String scene_path = edited_res->get_path().get_slice("::", 0);
+ if (!scenes_to_save.has(scene_path)) {
+ scenes_to_save.push_back(scene_path);
+ }
}
}
+ if (!scenes_to_save.is_empty()) {
+ editor->save_scene_list(scenes_to_save);
+ }
+
_update_script_names();
EditorFileSystem::get_singleton()->update_script_classes();
}
@@ -2570,7 +2600,7 @@ void ScriptEditor::_add_callback(Object *p_obj, const String &p_function, const
script_list->select(script_list->find_metadata(i));
// Save the current script so the changes can be picked up by an external editor.
- if (!_is_built_in_script(script.ptr())) { // But only if it's not built-in script.
+ if (!script.ptr()->is_built_in()) { // But only if it's not built-in script.
save_current_script();
}
@@ -2925,11 +2955,11 @@ void ScriptEditor::input(const Ref<InputEvent> &p_event) {
// This must be hardcoded as the editor shortcuts dialog doesn't allow assigning
// more than one shortcut per action.
if (mb.is_valid() && mb->is_pressed() && is_visible_in_tree()) {
- if (mb->get_button_index() == MOUSE_BUTTON_XBUTTON1) {
+ if (mb->get_button_index() == MouseButton::MB_XBUTTON1) {
_history_back();
}
- if (mb->get_button_index() == MOUSE_BUTTON_XBUTTON2) {
+ if (mb->get_button_index() == MouseButton::MB_XBUTTON2) {
_history_forward();
}
}
@@ -2970,7 +3000,7 @@ void ScriptEditor::_script_list_gui_input(const Ref<InputEvent> &ev) {
Ref<InputEventMouseButton> mb = ev;
if (mb.is_valid() && mb->is_pressed()) {
switch (mb->get_button_index()) {
- case MOUSE_BUTTON_MIDDLE: {
+ case MouseButton::MIDDLE: {
// Right-click selects automatically; middle-click does not.
int idx = script_list->get_item_at_position(mb->get_position(), true);
if (idx >= 0) {
@@ -2980,7 +3010,7 @@ void ScriptEditor::_script_list_gui_input(const Ref<InputEvent> &ev) {
}
} break;
- case MOUSE_BUTTON_RIGHT: {
+ case MouseButton::RIGHT: {
_make_script_list_context_menu();
} break;
default:
@@ -3026,7 +3056,7 @@ void ScriptEditor::_make_script_list_context_menu() {
context_menu->add_shortcut(ED_GET_SHORTCUT("script_editor/toggle_scripts_panel"), TOGGLE_SCRIPTS_PANEL);
context_menu->set_position(get_global_transform().xform(get_local_mouse_position()));
- context_menu->set_size(Vector2(1, 1));
+ context_menu->reset_size();
context_menu->popup();
}
@@ -3250,15 +3280,15 @@ void ScriptEditor::_update_selected_editor_menu() {
EditorHelp *eh = Object::cast_to<EditorHelp>(tab_container->get_current_tab_control());
script_search_menu->get_popup()->clear();
if (eh) {
- script_search_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/find", TTR("Find..."), KEY_MASK_CMD | KEY_F), HELP_SEARCH_FIND);
- script_search_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/find_next", TTR("Find Next"), KEY_F3), HELP_SEARCH_FIND_NEXT);
- script_search_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/find_previous", TTR("Find Previous"), KEY_MASK_SHIFT | KEY_F3), HELP_SEARCH_FIND_PREVIOUS);
+ script_search_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/find", TTR("Find..."), KeyModifierMask::CMD | Key::F), HELP_SEARCH_FIND);
+ script_search_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/find_next", TTR("Find Next"), Key::F3), HELP_SEARCH_FIND_NEXT);
+ script_search_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/find_previous", TTR("Find Previous"), KeyModifierMask::SHIFT | Key::F3), HELP_SEARCH_FIND_PREVIOUS);
script_search_menu->get_popup()->add_separator();
- script_search_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/find_in_files", TTR("Find in Files"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_F), SEARCH_IN_FILES);
+ script_search_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/find_in_files", TTR("Find in Files"), KeyModifierMask::CMD | KeyModifierMask::SHIFT | Key::F), SEARCH_IN_FILES);
script_search_menu->show();
} else {
if (tab_container->get_child_count() == 0) {
- script_search_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/find_in_files", TTR("Find in Files"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_F), SEARCH_IN_FILES);
+ script_search_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/find_in_files", TTR("Find in Files"), KeyModifierMask::CMD | KeyModifierMask::SHIFT | Key::F), SEARCH_IN_FILES);
script_search_menu->show();
} else {
script_search_menu->hide();
@@ -3346,9 +3376,10 @@ Array ScriptEditor::_get_open_script_editors() const {
void ScriptEditor::set_scene_root_script(Ref<Script> p_script) {
// Don't open dominant script if using an external editor.
- const bool use_external_editor =
+ bool use_external_editor =
EditorSettings::get_singleton()->get("text_editor/external/use_external_editor") ||
(p_script.is_valid() && p_script->get_language()->overrides_external_editor());
+ use_external_editor = use_external_editor && !(p_script.is_valid() && p_script->is_built_in()); // Ignore external editor for built-in scripts.
const bool open_dominant = EditorSettings::get_singleton()->get("text_editor/behavior/files/open_dominant_script_on_scene_change");
if (open_dominant && !use_external_editor && p_script.is_valid()) {
@@ -3438,6 +3469,9 @@ void ScriptEditor::_on_find_in_files_result_selected(String fpath, int line_numb
shader_editor->make_visible(true);
shader_editor->get_shader_editor()->goto_line_selection(line_number - 1, begin, end);
return;
+ } else if (fpath.get_extension() == "tscn") {
+ editor->load_scene(fpath);
+ return;
} else {
Ref<Script> script = res;
if (script.is_valid()) {
@@ -3638,11 +3672,11 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) {
find_replace_bar->hide();
ED_SHORTCUT("script_editor/window_sort", TTR("Sort"));
- ED_SHORTCUT("script_editor/window_move_up", TTR("Move Up"), KEY_MASK_SHIFT | KEY_MASK_ALT | KEY_UP);
- ED_SHORTCUT("script_editor/window_move_down", TTR("Move Down"), KEY_MASK_SHIFT | KEY_MASK_ALT | KEY_DOWN);
- // FIXME: These should be `KEY_GREATER` and `KEY_LESS` but those don't work.
- ED_SHORTCUT("script_editor/next_script", TTR("Next Script"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_PERIOD);
- ED_SHORTCUT("script_editor/prev_script", TTR("Previous Script"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_COMMA);
+ ED_SHORTCUT("script_editor/window_move_up", TTR("Move Up"), KeyModifierMask::SHIFT | KeyModifierMask::ALT | Key::UP);
+ ED_SHORTCUT("script_editor/window_move_down", TTR("Move Down"), KeyModifierMask::SHIFT | KeyModifierMask::ALT | Key::DOWN);
+ // FIXME: These should be `Key::GREATER` and `Key::LESS` but those don't work.
+ ED_SHORTCUT("script_editor/next_script", TTR("Next Script"), KeyModifierMask::CMD | KeyModifierMask::SHIFT | Key::PERIOD);
+ ED_SHORTCUT("script_editor/prev_script", TTR("Previous Script"), KeyModifierMask::CMD | KeyModifierMask::SHIFT | Key::COMMA);
set_process_input(true);
set_process_unhandled_input(true);
@@ -3655,7 +3689,7 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) {
file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/new", TTR("New Script...")), FILE_NEW);
file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/new_textfile", TTR("New Text File...")), FILE_NEW_TEXTFILE);
file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/open", TTR("Open...")), FILE_OPEN);
- file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/reopen_closed_script", TTR("Reopen Closed Script"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_T), FILE_REOPEN_CLOSED);
+ file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/reopen_closed_script", TTR("Reopen Closed Script"), KeyModifierMask::CMD | KeyModifierMask::SHIFT | Key::T), FILE_REOPEN_CLOSED);
file_menu->get_popup()->add_submenu_item(TTR("Open Recent"), "RecentScripts", FILE_OPEN_RECENT);
recent_scripts = memnew(PopupMenu);
@@ -3665,17 +3699,17 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) {
_update_recent_scripts();
file_menu->get_popup()->add_separator();
- file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/save", TTR("Save"), KEY_MASK_ALT | KEY_MASK_CMD | KEY_S), FILE_SAVE);
+ file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/save", TTR("Save"), KeyModifierMask::ALT | KeyModifierMask::CMD | Key::S), FILE_SAVE);
file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/save_as", TTR("Save As...")), FILE_SAVE_AS);
- file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/save_all", TTR("Save All"), KEY_MASK_SHIFT | KEY_MASK_ALT | KEY_S), FILE_SAVE_ALL);
+ file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/save_all", TTR("Save All"), KeyModifierMask::SHIFT | KeyModifierMask::ALT | Key::S), FILE_SAVE_ALL);
file_menu->get_popup()->add_separator();
- file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/reload_script_soft", TTR("Soft Reload Script"), KEY_MASK_CMD | KEY_MASK_ALT | KEY_R), FILE_TOOL_RELOAD_SOFT);
+ file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/reload_script_soft", TTR("Soft Reload Script"), KeyModifierMask::CMD | KeyModifierMask::ALT | Key::R), FILE_TOOL_RELOAD_SOFT);
file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/copy_path", TTR("Copy Script Path")), FILE_COPY_PATH);
file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/show_in_file_system", TTR("Show in FileSystem")), SHOW_IN_FILE_SYSTEM);
file_menu->get_popup()->add_separator();
- file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/history_previous", TTR("History Previous"), KEY_MASK_ALT | KEY_LEFT), WINDOW_PREV);
- file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/history_next", TTR("History Next"), KEY_MASK_ALT | KEY_RIGHT), WINDOW_NEXT);
+ file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/history_previous", TTR("History Previous"), KeyModifierMask::ALT | Key::LEFT), WINDOW_PREV);
+ file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/history_next", TTR("History Next"), KeyModifierMask::ALT | Key::RIGHT), WINDOW_NEXT);
file_menu->get_popup()->add_separator();
file_menu->get_popup()->add_submenu_item(TTR("Theme"), "Theme", FILE_THEME);
@@ -3692,16 +3726,16 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) {
theme_submenu->add_shortcut(ED_SHORTCUT("script_editor/save_theme_as", TTR("Save Theme As...")), THEME_SAVE_AS);
file_menu->get_popup()->add_separator();
- file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/close_file", TTR("Close"), KEY_MASK_CMD | KEY_W), FILE_CLOSE);
+ file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/close_file", TTR("Close"), KeyModifierMask::CMD | Key::W), FILE_CLOSE);
file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/close_all", TTR("Close All")), CLOSE_ALL);
file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/close_other_tabs", TTR("Close Other Tabs")), CLOSE_OTHER_TABS);
file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/close_docs", TTR("Close Docs")), CLOSE_DOCS);
file_menu->get_popup()->add_separator();
- file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/run_file", TTR("Run"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_X), FILE_RUN);
+ file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/run_file", TTR("Run"), KeyModifierMask::CMD | KeyModifierMask::SHIFT | Key::X), FILE_RUN);
file_menu->get_popup()->add_separator();
- file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/toggle_scripts_panel", TTR("Toggle Scripts Panel"), KEY_MASK_CMD | KEY_BACKSLASH), TOGGLE_SCRIPTS_PANEL);
+ file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/toggle_scripts_panel", TTR("Toggle Scripts Panel"), KeyModifierMask::CMD | Key::BACKSLASH), TOGGLE_SCRIPTS_PANEL);
file_menu->get_popup()->connect("id_pressed", callable_mp(this, &ScriptEditor::_menu_option));
script_search_menu = memnew(MenuButton);
@@ -3858,7 +3892,7 @@ void ScriptEditorPlugin::edit(Object *p_object) {
Script *p_script = Object::cast_to<Script>(p_object);
String res_path = p_script->get_path().get_slice("::", 0);
- if (_is_built_in_script(p_script)) {
+ if (p_script->is_built_in()) {
if (ResourceLoader::get_resource_type(res_path) == "PackedScene") {
if (!EditorNode::get_singleton()->is_scene_open(res_path)) {
EditorNode::get_singleton()->load_scene(res_path);
@@ -3954,7 +3988,7 @@ ScriptEditorPlugin::ScriptEditorPlugin(EditorNode *p_node) {
EDITOR_DEF("text_editor/external/exec_flags", "{file}");
EditorSettings::get_singleton()->add_property_hint(PropertyInfo(Variant::STRING, "text_editor/external/exec_flags", PROPERTY_HINT_PLACEHOLDER_TEXT, "Call flags with placeholders: {project}, {file}, {col}, {line}."));
- ED_SHORTCUT("script_editor/reopen_closed_script", TTR("Reopen Closed Script"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_T);
+ ED_SHORTCUT("script_editor/reopen_closed_script", TTR("Reopen Closed Script"), KeyModifierMask::CMD | KeyModifierMask::SHIFT | Key::T);
ED_SHORTCUT("script_editor/clear_recent", TTR("Clear Recent Scripts"));
}
diff --git a/editor/plugins/script_editor_plugin.h b/editor/plugins/script_editor_plugin.h
index 2b0bdfd109..0adeca031e 100644
--- a/editor/plugins/script_editor_plugin.h
+++ b/editor/plugins/script_editor_plugin.h
@@ -365,6 +365,7 @@ class ScriptEditor : public PanelContainer {
void _add_callback(Object *p_obj, const String &p_function, const PackedStringArray &p_args);
void _res_saved_callback(const Ref<Resource> &p_res);
+ void _scene_saved_callback(const String &p_path);
bool open_textfile_after_create = true;
bool trim_trailing_whitespace_on_save;
diff --git a/editor/plugins/script_text_editor.cpp b/editor/plugins/script_text_editor.cpp
index 219498b5e7..30a4cef8ca 100644
--- a/editor/plugins/script_text_editor.cpp
+++ b/editor/plugins/script_text_editor.cpp
@@ -375,18 +375,21 @@ void ScriptTextEditor::ensure_focus() {
String ScriptTextEditor::get_name() {
String name;
- if (script->get_path().find("local://") == -1 && script->get_path().find("::") == -1) {
- name = script->get_path().get_file();
- if (is_unsaved()) {
- if (script->get_path().is_empty()) {
- name = TTR("[unsaved]");
- }
- name += "(*)";
+ name = script->get_path().get_file();
+ if (name.is_empty()) {
+ // This appears for newly created built-in scripts before saving the scene.
+ name = TTR("[unsaved]");
+ } else if (script->is_built_in()) {
+ const String &script_name = script->get_name();
+ if (script_name != "") {
+ // If the built-in script has a custom resource name defined,
+ // display the built-in script name as follows: `ResourceName (scene_file.tscn)`
+ name = vformat("%s (%s)", script_name, name.get_slice("::", 0));
}
- } else if (script->get_name() != "") {
- name = script->get_name();
- } else {
- name = script->get_class() + "(" + itos(script->get_instance_id()) + ")";
+ }
+
+ if (is_unsaved()) {
+ name += "(*)";
}
return name;
@@ -547,7 +550,7 @@ void ScriptTextEditor::_validate_script() {
void ScriptTextEditor::_update_bookmark_list() {
bookmarks_menu->clear();
- bookmarks_menu->set_size(Size2(1, 1));
+ bookmarks_menu->reset_size();
bookmarks_menu->add_shortcut(ED_GET_SHORTCUT("script_text_editor/toggle_bookmark"), BOOKMARK_TOGGLE);
bookmarks_menu->add_shortcut(ED_GET_SHORTCUT("script_text_editor/remove_all_bookmarks"), BOOKMARK_REMOVE_ALL);
@@ -658,7 +661,7 @@ void ScriptEditor::_update_modified_scripts_for_external_editor(Ref<Script> p_fo
continue;
}
- if (script->get_path() == "" || script->get_path().find("local://") != -1 || script->get_path().find("::") != -1) {
+ if (script->is_built_in()) {
continue; //internal script, who cares, though weird
}
@@ -699,7 +702,7 @@ void ScriptTextEditor::_code_complete_script(const String &p_code, List<ScriptCo
void ScriptTextEditor::_update_breakpoint_list() {
breakpoints_menu->clear();
- breakpoints_menu->set_size(Size2(1, 1));
+ breakpoints_menu->reset_size();
breakpoints_menu->add_shortcut(ED_GET_SHORTCUT("script_text_editor/toggle_breakpoint"), DEBUG_TOGGLE_BREAKPOINT);
breakpoints_menu->add_shortcut(ED_GET_SHORTCUT("script_text_editor/remove_all_breakpoints"), DEBUG_REMOVE_ALL_BREAKPOINTS);
@@ -1459,7 +1462,7 @@ void ScriptTextEditor::drop_data_fw(const Point2 &p_point, const Variant &p_data
Array files = d["files"];
String text_to_drop;
- bool preload = Input::get_singleton()->is_key_pressed(KEY_CTRL);
+ bool preload = Input::get_singleton()->is_key_pressed(Key::CTRL);
for (int i = 0; i < files.size(); i++) {
if (i > 0) {
text_to_drop += ", ";
@@ -1523,7 +1526,7 @@ void ScriptTextEditor::_text_edit_gui_input(const Ref<InputEvent> &ev) {
bool create_menu = false;
CodeEdit *tx = code_editor->get_text_editor();
- if (mb.is_valid() && mb->get_button_index() == MOUSE_BUTTON_RIGHT && mb->is_pressed()) {
+ if (mb.is_valid() && mb->get_button_index() == MouseButton::RIGHT && mb->is_pressed()) {
local_pos = mb->get_global_position() - tx->get_global_position();
create_menu = true;
} else if (k.is_valid() && k->is_action("ui_menu", true)) {
@@ -1626,10 +1629,7 @@ void ScriptTextEditor::_color_changed(const Color &p_color) {
}
String line = code_editor->get_text_editor()->get_line(color_position.x);
- int color_args_pos = line.find(color_args, color_position.y);
- String line_with_replaced_args = line;
- line_with_replaced_args.erase(color_args_pos, color_args.length());
- line_with_replaced_args = line_with_replaced_args.insert(color_args_pos, new_args);
+ String line_with_replaced_args = line.replace(color_args, new_args);
color_args = new_args;
code_editor->get_text_editor()->begin_complex_operation();
@@ -1689,7 +1689,7 @@ void ScriptTextEditor::_make_context_menu(bool p_selection, bool p_color, bool p
context_menu->set_item_disabled(context_menu->get_item_index(EDIT_REDO), !tx->has_redo());
context_menu->set_position(get_global_transform().xform(p_pos));
- context_menu->set_size(Vector2(1, 1));
+ context_menu->reset_size();
context_menu->popup();
}
@@ -1804,9 +1804,9 @@ void ScriptTextEditor::_enable_code_editor() {
edit_menu->get_popup()->add_child(convert_case);
edit_menu->get_popup()->add_submenu_item(TTR("Convert Case"), "convert_case");
- convert_case->add_shortcut(ED_SHORTCUT("script_text_editor/convert_to_uppercase", TTR("Uppercase"), KEY_MASK_SHIFT | KEY_F4), EDIT_TO_UPPERCASE);
- convert_case->add_shortcut(ED_SHORTCUT("script_text_editor/convert_to_lowercase", TTR("Lowercase"), KEY_MASK_SHIFT | KEY_F5), EDIT_TO_LOWERCASE);
- convert_case->add_shortcut(ED_SHORTCUT("script_text_editor/capitalize", TTR("Capitalize"), KEY_MASK_SHIFT | KEY_F6), EDIT_CAPITALIZE);
+ convert_case->add_shortcut(ED_SHORTCUT("script_text_editor/convert_to_uppercase", TTR("Uppercase"), KeyModifierMask::SHIFT | Key::F4), EDIT_TO_UPPERCASE);
+ convert_case->add_shortcut(ED_SHORTCUT("script_text_editor/convert_to_lowercase", TTR("Lowercase"), KeyModifierMask::SHIFT | Key::F5), EDIT_TO_LOWERCASE);
+ convert_case->add_shortcut(ED_SHORTCUT("script_text_editor/capitalize", TTR("Capitalize"), KeyModifierMask::SHIFT | Key::F6), EDIT_CAPITALIZE);
convert_case->connect("id_pressed", callable_mp(this, &ScriptTextEditor::_edit_option));
edit_menu->get_popup()->add_child(highlighter_menu);
@@ -1953,60 +1953,60 @@ static ScriptEditorBase *create_editor(const RES &p_resource) {
}
void ScriptTextEditor::register_editor() {
- ED_SHORTCUT("script_text_editor/move_up", TTR("Move Up"), KEY_MASK_ALT | KEY_UP);
- ED_SHORTCUT("script_text_editor/move_down", TTR("Move Down"), KEY_MASK_ALT | KEY_DOWN);
- ED_SHORTCUT("script_text_editor/delete_line", TTR("Delete Line"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_K);
+ ED_SHORTCUT("script_text_editor/move_up", TTR("Move Up"), KeyModifierMask::ALT | Key::UP);
+ ED_SHORTCUT("script_text_editor/move_down", TTR("Move Down"), KeyModifierMask::ALT | Key::DOWN);
+ ED_SHORTCUT("script_text_editor/delete_line", TTR("Delete Line"), KeyModifierMask::CMD | KeyModifierMask::SHIFT | Key::K);
// Leave these at zero, same can be accomplished with tab/shift-tab, including selection.
// The next/previous in history shortcut in this case makes a lot more sense.
- ED_SHORTCUT("script_text_editor/indent_left", TTR("Indent Left"), KEY_NONE);
- ED_SHORTCUT("script_text_editor/indent_right", TTR("Indent Right"), KEY_NONE);
- ED_SHORTCUT("script_text_editor/toggle_comment", TTR("Toggle Comment"), KEY_MASK_CMD | KEY_K);
- ED_SHORTCUT("script_text_editor/toggle_fold_line", TTR("Fold/Unfold Line"), KEY_MASK_ALT | KEY_F);
- ED_SHORTCUT("script_text_editor/fold_all_lines", TTR("Fold All Lines"), KEY_NONE);
- ED_SHORTCUT("script_text_editor/unfold_all_lines", TTR("Unfold All Lines"), KEY_NONE);
- ED_SHORTCUT("script_text_editor/duplicate_selection", TTR("Duplicate Selection"), KEY_MASK_SHIFT | KEY_MASK_CMD | KEY_D);
- ED_SHORTCUT_OVERRIDE("script_text_editor/duplicate_selection", "macos", KEY_MASK_SHIFT | KEY_MASK_CMD | KEY_C);
- ED_SHORTCUT("script_text_editor/evaluate_selection", TTR("Evaluate Selection"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_E);
- ED_SHORTCUT("script_text_editor/trim_trailing_whitespace", TTR("Trim Trailing Whitespace"), KEY_MASK_CMD | KEY_MASK_ALT | KEY_T);
- ED_SHORTCUT("script_text_editor/convert_indent_to_spaces", TTR("Convert Indent to Spaces"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_Y);
- ED_SHORTCUT("script_text_editor/convert_indent_to_tabs", TTR("Convert Indent to Tabs"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_I);
- ED_SHORTCUT("script_text_editor/auto_indent", TTR("Auto Indent"), KEY_MASK_CMD | KEY_I);
+ ED_SHORTCUT("script_text_editor/indent_left", TTR("Indent Left"), Key::NONE);
+ ED_SHORTCUT("script_text_editor/indent_right", TTR("Indent Right"), Key::NONE);
+ ED_SHORTCUT("script_text_editor/toggle_comment", TTR("Toggle Comment"), KeyModifierMask::CMD | Key::K);
+ ED_SHORTCUT("script_text_editor/toggle_fold_line", TTR("Fold/Unfold Line"), KeyModifierMask::ALT | Key::F);
+ ED_SHORTCUT("script_text_editor/fold_all_lines", TTR("Fold All Lines"), Key::NONE);
+ ED_SHORTCUT("script_text_editor/unfold_all_lines", TTR("Unfold All Lines"), Key::NONE);
+ ED_SHORTCUT("script_text_editor/duplicate_selection", TTR("Duplicate Selection"), KeyModifierMask::SHIFT | KeyModifierMask::CMD | Key::D);
+ ED_SHORTCUT_OVERRIDE("script_text_editor/duplicate_selection", "macos", KeyModifierMask::SHIFT | KeyModifierMask::CMD | Key::C);
+ ED_SHORTCUT("script_text_editor/evaluate_selection", TTR("Evaluate Selection"), KeyModifierMask::CMD | KeyModifierMask::SHIFT | Key::E);
+ ED_SHORTCUT("script_text_editor/trim_trailing_whitespace", TTR("Trim Trailing Whitespace"), KeyModifierMask::CMD | KeyModifierMask::ALT | Key::T);
+ ED_SHORTCUT("script_text_editor/convert_indent_to_spaces", TTR("Convert Indent to Spaces"), KeyModifierMask::CMD | KeyModifierMask::SHIFT | Key::Y);
+ ED_SHORTCUT("script_text_editor/convert_indent_to_tabs", TTR("Convert Indent to Tabs"), KeyModifierMask::CMD | KeyModifierMask::SHIFT | Key::I);
+ ED_SHORTCUT("script_text_editor/auto_indent", TTR("Auto Indent"), KeyModifierMask::CMD | Key::I);
- ED_SHORTCUT_AND_COMMAND("script_text_editor/find", TTR("Find..."), KEY_MASK_CMD | KEY_F);
+ ED_SHORTCUT_AND_COMMAND("script_text_editor/find", TTR("Find..."), KeyModifierMask::CMD | Key::F);
- ED_SHORTCUT("script_text_editor/find_next", TTR("Find Next"), KEY_F3);
- ED_SHORTCUT_OVERRIDE("script_text_editor/find_next", "macos", KEY_MASK_CMD | KEY_G);
+ ED_SHORTCUT("script_text_editor/find_next", TTR("Find Next"), Key::F3);
+ ED_SHORTCUT_OVERRIDE("script_text_editor/find_next", "macos", KeyModifierMask::CMD | Key::G);
- ED_SHORTCUT("script_text_editor/find_previous", TTR("Find Previous"), KEY_MASK_SHIFT | KEY_F3);
- ED_SHORTCUT_OVERRIDE("script_text_editor/find_previous", "macos", KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_G);
+ ED_SHORTCUT("script_text_editor/find_previous", TTR("Find Previous"), KeyModifierMask::SHIFT | Key::F3);
+ ED_SHORTCUT_OVERRIDE("script_text_editor/find_previous", "macos", KeyModifierMask::CMD | KeyModifierMask::SHIFT | Key::G);
- ED_SHORTCUT_AND_COMMAND("script_text_editor/replace", TTR("Replace..."), KEY_MASK_CMD | KEY_R);
- ED_SHORTCUT_OVERRIDE("script_text_editor/replace", "macos", KEY_MASK_ALT | KEY_MASK_CMD | KEY_F);
+ ED_SHORTCUT_AND_COMMAND("script_text_editor/replace", TTR("Replace..."), KeyModifierMask::CMD | Key::R);
+ ED_SHORTCUT_OVERRIDE("script_text_editor/replace", "macos", KeyModifierMask::ALT | KeyModifierMask::CMD | Key::F);
- ED_SHORTCUT("script_text_editor/find_in_files", TTR("Find in Files..."), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_F);
- ED_SHORTCUT("script_text_editor/replace_in_files", TTR("Replace in Files..."), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_R);
+ ED_SHORTCUT("script_text_editor/find_in_files", TTR("Find in Files..."), KeyModifierMask::CMD | KeyModifierMask::SHIFT | Key::F);
+ ED_SHORTCUT("script_text_editor/replace_in_files", TTR("Replace in Files..."), KeyModifierMask::CMD | KeyModifierMask::SHIFT | Key::R);
- ED_SHORTCUT("script_text_editor/contextual_help", TTR("Contextual Help"), KEY_MASK_ALT | KEY_F1);
- ED_SHORTCUT_OVERRIDE("script_text_editor/contextual_help", "macos", KEY_MASK_ALT | KEY_MASK_SHIFT | KEY_SPACE);
+ ED_SHORTCUT("script_text_editor/contextual_help", TTR("Contextual Help"), KeyModifierMask::ALT | Key::F1);
+ ED_SHORTCUT_OVERRIDE("script_text_editor/contextual_help", "macos", KeyModifierMask::ALT | KeyModifierMask::SHIFT | Key::SPACE);
- ED_SHORTCUT("script_text_editor/toggle_bookmark", TTR("Toggle Bookmark"), KEY_MASK_CMD | KEY_MASK_ALT | KEY_B);
- ED_SHORTCUT("script_text_editor/goto_next_bookmark", TTR("Go to Next Bookmark"), KEY_MASK_CMD | KEY_B);
- ED_SHORTCUT("script_text_editor/goto_previous_bookmark", TTR("Go to Previous Bookmark"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_B);
- ED_SHORTCUT("script_text_editor/remove_all_bookmarks", TTR("Remove All Bookmarks"), KEY_NONE);
+ ED_SHORTCUT("script_text_editor/toggle_bookmark", TTR("Toggle Bookmark"), KeyModifierMask::CMD | KeyModifierMask::ALT | Key::B);
+ ED_SHORTCUT("script_text_editor/goto_next_bookmark", TTR("Go to Next Bookmark"), KeyModifierMask::CMD | Key::B);
+ ED_SHORTCUT("script_text_editor/goto_previous_bookmark", TTR("Go to Previous Bookmark"), KeyModifierMask::CMD | KeyModifierMask::SHIFT | Key::B);
+ ED_SHORTCUT("script_text_editor/remove_all_bookmarks", TTR("Remove All Bookmarks"), Key::NONE);
- ED_SHORTCUT("script_text_editor/goto_function", TTR("Go to Function..."), KEY_MASK_ALT | KEY_MASK_CMD | KEY_F);
- ED_SHORTCUT_OVERRIDE("script_text_editor/goto_function", "macos", KEY_MASK_CTRL | KEY_MASK_CMD | KEY_J);
+ ED_SHORTCUT("script_text_editor/goto_function", TTR("Go to Function..."), KeyModifierMask::ALT | KeyModifierMask::CMD | Key::F);
+ ED_SHORTCUT_OVERRIDE("script_text_editor/goto_function", "macos", KeyModifierMask::CTRL | KeyModifierMask::CMD | Key::J);
- ED_SHORTCUT("script_text_editor/goto_line", TTR("Go to Line..."), KEY_MASK_CMD | KEY_L);
+ ED_SHORTCUT("script_text_editor/goto_line", TTR("Go to Line..."), KeyModifierMask::CMD | Key::L);
- ED_SHORTCUT("script_text_editor/toggle_breakpoint", TTR("Toggle Breakpoint"), KEY_F9);
- ED_SHORTCUT_OVERRIDE("script_text_editor/toggle_breakpoint", "macos", KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_B);
+ ED_SHORTCUT("script_text_editor/toggle_breakpoint", TTR("Toggle Breakpoint"), Key::F9);
+ ED_SHORTCUT_OVERRIDE("script_text_editor/toggle_breakpoint", "macos", KeyModifierMask::CMD | KeyModifierMask::SHIFT | Key::B);
- ED_SHORTCUT("script_text_editor/remove_all_breakpoints", TTR("Remove All Breakpoints"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_F9);
- ED_SHORTCUT("script_text_editor/goto_next_breakpoint", TTR("Go to Next Breakpoint"), KEY_MASK_CMD | KEY_PERIOD);
- ED_SHORTCUT("script_text_editor/goto_previous_breakpoint", TTR("Go to Previous Breakpoint"), KEY_MASK_CMD | KEY_COMMA);
+ ED_SHORTCUT("script_text_editor/remove_all_breakpoints", TTR("Remove All Breakpoints"), KeyModifierMask::CMD | KeyModifierMask::SHIFT | Key::F9);
+ ED_SHORTCUT("script_text_editor/goto_next_breakpoint", TTR("Go to Next Breakpoint"), KeyModifierMask::CMD | Key::PERIOD);
+ ED_SHORTCUT("script_text_editor/goto_previous_breakpoint", TTR("Go to Previous Breakpoint"), KeyModifierMask::CMD | Key::COMMA);
ScriptEditor::register_create_script_editor_function(create_editor);
}
diff --git a/editor/plugins/shader_editor_plugin.cpp b/editor/plugins/shader_editor_plugin.cpp
index 2731582288..7c1fda77bb 100644
--- a/editor/plugins/shader_editor_plugin.cpp
+++ b/editor/plugins/shader_editor_plugin.cpp
@@ -34,6 +34,7 @@
#include "core/io/resource_saver.h"
#include "core/os/keyboard.h"
#include "core/os/os.h"
+#include "core/version_generated.gen.h"
#include "editor/editor_node.h"
#include "editor/editor_scale.h"
#include "editor/editor_settings.h"
@@ -142,10 +143,10 @@ void ShaderTextEditor::_load_theme_settings() {
}
}
- const Color member_variable_color = EDITOR_GET("text_editor/theme/highlighting/member_variable_color");
+ const Color user_type_color = EDITOR_GET("text_editor/theme/highlighting/user_type_color");
for (const String &E : built_ins) {
- syntax_highlighter->add_keyword_color(E, member_variable_color);
+ syntax_highlighter->add_keyword_color(E, user_type_color);
}
// Colorize comments.
@@ -384,7 +385,7 @@ void ShaderEditor::_menu_option(int p_option) {
shader_editor->remove_all_bookmarks();
} break;
case HELP_DOCS: {
- OS::get_singleton()->shell_open("https://docs.godotengine.org/en/latest/tutorials/shaders/shader_reference/index.html");
+ OS::get_singleton()->shell_open(vformat("%s/tutorials/shaders/shader_reference/index.html", VERSION_DOCS_URL));
} break;
}
if (p_option != SEARCH_FIND && p_option != SEARCH_REPLACE && p_option != SEARCH_GOTO_LINE) {
@@ -482,8 +483,7 @@ void ShaderEditor::_check_for_external_edit() {
return;
}
- // internal shader.
- if (shader->get_path() == "" || shader->get_path().find("local://") != -1 || shader->get_path().find("::") != -1) {
+ if (shader->is_built_in()) {
return;
}
@@ -530,7 +530,7 @@ void ShaderEditor::save_external_data(const String &p_str) {
}
apply_shaders();
- if (shader->get_path() != "" && shader->get_path().find("local://") == -1 && shader->get_path().find("::") == -1) {
+ if (!shader->is_built_in()) {
//external shader, save it
ResourceSaver::save(shader->get_path(), shader);
}
@@ -553,7 +553,7 @@ void ShaderEditor::_text_edit_gui_input(const Ref<InputEvent> &ev) {
Ref<InputEventMouseButton> mb = ev;
if (mb.is_valid()) {
- if (mb->get_button_index() == MOUSE_BUTTON_RIGHT && mb->is_pressed()) {
+ if (mb->get_button_index() == MouseButton::RIGHT && mb->is_pressed()) {
CodeEdit *tx = shader_editor->get_text_editor();
Point2i pos = tx->get_line_column_at_pos(mb->get_global_position() - tx->get_global_position());
@@ -646,7 +646,7 @@ void ShaderEditor::_make_context_menu(bool p_selection, Vector2 p_position) {
context_menu->add_shortcut(ED_GET_SHORTCUT("script_text_editor/toggle_bookmark"), BOOKMARK_TOGGLE);
context_menu->set_position(get_global_transform().xform(p_position));
- context_menu->set_size(Vector2(1, 1));
+ context_menu->reset_size();
context_menu->popup();
}
diff --git a/editor/plugins/skeleton_2d_editor_plugin.cpp b/editor/plugins/skeleton_2d_editor_plugin.cpp
index c350004f0f..510e264c48 100644
--- a/editor/plugins/skeleton_2d_editor_plugin.cpp
+++ b/editor/plugins/skeleton_2d_editor_plugin.cpp
@@ -52,34 +52,34 @@ void Skeleton2DEditor::_menu_option(int p_option) {
}
switch (p_option) {
- case MENU_OPTION_MAKE_REST: {
+ case MENU_OPTION_SET_REST: {
if (node->get_bone_count() == 0) {
err_dialog->set_text(TTR("This skeleton has no bones, create some children Bone2D nodes."));
err_dialog->popup_centered();
return;
}
UndoRedo *ur = EditorNode::get_singleton()->get_undo_redo();
- ur->create_action(TTR("Create Rest Pose from Bones"));
+ ur->create_action(TTR("Set Rest Pose to Bones"));
for (int i = 0; i < node->get_bone_count(); i++) {
Bone2D *bone = node->get_bone(i);
- ur->add_do_method(bone, "set_rest", bone->get_transform());
- ur->add_undo_method(bone, "set_rest", bone->get_rest());
+ ur->add_do_method(bone, "set_transform", bone->get_rest());
+ ur->add_undo_method(bone, "set_transform", bone->get_transform());
}
ur->commit_action();
} break;
- case MENU_OPTION_SET_REST: {
+ case MENU_OPTION_MAKE_REST: {
if (node->get_bone_count() == 0) {
err_dialog->set_text(TTR("This skeleton has no bones, create some children Bone2D nodes."));
err_dialog->popup_centered();
return;
}
UndoRedo *ur = EditorNode::get_singleton()->get_undo_redo();
- ur->create_action(TTR("Set Rest Pose to Bones"));
+ ur->create_action(TTR("Create Rest Pose from Bones"));
for (int i = 0; i < node->get_bone_count(); i++) {
Bone2D *bone = node->get_bone(i);
- ur->add_do_method(bone, "set_transform", bone->get_rest());
- ur->add_undo_method(bone, "set_transform", bone->get_transform());
+ ur->add_do_method(bone, "set_rest", bone->get_transform());
+ ur->add_undo_method(bone, "set_rest", bone->get_rest());
}
ur->commit_action();
@@ -98,10 +98,10 @@ Skeleton2DEditor::Skeleton2DEditor() {
options->set_text(TTR("Skeleton2D"));
options->set_icon(EditorNode::get_singleton()->get_gui_base()->get_theme_icon(SNAME("Skeleton2D"), SNAME("EditorIcons")));
- options->get_popup()->add_item(TTR("Reset to Rest Pose"), MENU_OPTION_MAKE_REST);
+ options->get_popup()->add_item(TTR("Reset to Rest Pose"), MENU_OPTION_SET_REST);
options->get_popup()->add_separator();
// Use the "Overwrite" word to highlight that this is a destructive operation.
- options->get_popup()->add_item(TTR("Overwrite Rest Pose"), MENU_OPTION_SET_REST);
+ options->get_popup()->add_item(TTR("Overwrite Rest Pose"), MENU_OPTION_MAKE_REST);
options->set_switch_on_hover(true);
options->get_popup()->connect("id_pressed", callable_mp(this, &Skeleton2DEditor::_menu_option));
diff --git a/editor/plugins/skeleton_2d_editor_plugin.h b/editor/plugins/skeleton_2d_editor_plugin.h
index dacd8fe43f..066888f685 100644
--- a/editor/plugins/skeleton_2d_editor_plugin.h
+++ b/editor/plugins/skeleton_2d_editor_plugin.h
@@ -40,8 +40,8 @@ class Skeleton2DEditor : public Control {
GDCLASS(Skeleton2DEditor, Control);
enum Menu {
- MENU_OPTION_MAKE_REST,
MENU_OPTION_SET_REST,
+ MENU_OPTION_MAKE_REST,
};
Skeleton2D *node;
diff --git a/editor/plugins/skeleton_3d_editor_plugin.cpp b/editor/plugins/skeleton_3d_editor_plugin.cpp
index 0b8a56503c..5f21c8c881 100644
--- a/editor/plugins/skeleton_3d_editor_plugin.cpp
+++ b/editor/plugins/skeleton_3d_editor_plugin.cpp
@@ -681,7 +681,7 @@ void Skeleton3DEditor::create_editors() {
key_insert_button->set_focus_mode(FOCUS_NONE);
key_insert_button->connect("pressed", callable_mp(this, &Skeleton3DEditor::insert_keys), varray(false));
key_insert_button->set_tooltip(TTR("Insert key of bone poses already exist track."));
- key_insert_button->set_shortcut(ED_SHORTCUT("skeleton_3d_editor/insert_key_to_existing_tracks", TTR("Insert Key (Existing Tracks)"), KEY_INSERT));
+ key_insert_button->set_shortcut(ED_SHORTCUT("skeleton_3d_editor/insert_key_to_existing_tracks", TTR("Insert Key (Existing Tracks)"), Key::INSERT));
animation_hb->add_child(key_insert_button);
key_insert_all_button = memnew(Button);
@@ -689,7 +689,7 @@ void Skeleton3DEditor::create_editors() {
key_insert_all_button->set_focus_mode(FOCUS_NONE);
key_insert_all_button->connect("pressed", callable_mp(this, &Skeleton3DEditor::insert_keys), varray(true));
key_insert_all_button->set_tooltip(TTR("Insert key of all bone poses."));
- key_insert_all_button->set_shortcut(ED_SHORTCUT("skeleton_3d_editor/insert_key_of_all_bones", TTR("Insert Key (All Bones)"), KEY_MASK_CMD + KEY_INSERT));
+ key_insert_all_button->set_shortcut(ED_SHORTCUT("skeleton_3d_editor/insert_key_of_all_bones", TTR("Insert Key (All Bones)"), KeyModifierMask::CMD + Key::INSERT));
animation_hb->add_child(key_insert_all_button);
// Bone tree.
@@ -1028,7 +1028,7 @@ EditorPlugin::AfterGUIInput Skeleton3DEditorPlugin::forward_spatial_gui_input(Ca
Node3DEditor *ne = Node3DEditor::get_singleton();
if (se->is_edit_mode()) {
const Ref<InputEventMouseButton> mb = p_event;
- if (mb.is_valid() && mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (mb.is_valid() && mb->get_button_index() == MouseButton::LEFT) {
if (ne->get_tool_mode() != Node3DEditor::TOOL_MODE_SELECT) {
if (!ne->is_gizmo_visible()) {
return EditorPlugin::AFTER_GUI_INPUT_STOP;
diff --git a/editor/plugins/sprite_frames_editor_plugin.cpp b/editor/plugins/sprite_frames_editor_plugin.cpp
index 8a8d80891a..d455f4618b 100644
--- a/editor/plugins/sprite_frames_editor_plugin.cpp
+++ b/editor/plugins/sprite_frames_editor_plugin.cpp
@@ -126,7 +126,7 @@ void SpriteFramesEditor::_sheet_preview_draw() {
void SpriteFramesEditor::_sheet_preview_input(const Ref<InputEvent> &p_event) {
const Ref<InputEventMouseButton> mb = p_event;
- if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == MouseButton::LEFT) {
const int idx = _sheet_preview_position_to_frame_index(mb->get_position());
if (idx != -1) {
@@ -166,12 +166,12 @@ void SpriteFramesEditor::_sheet_preview_input(const Ref<InputEvent> &p_event) {
}
}
- if (mb.is_valid() && !mb->is_pressed() && mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (mb.is_valid() && !mb->is_pressed() && mb->get_button_index() == MouseButton::LEFT) {
frames_toggled_by_mouse_hover.clear();
}
const Ref<InputEventMouseMotion> mm = p_event;
- if (mm.is_valid() && mm->get_button_mask() & MOUSE_BUTTON_MASK_LEFT) {
+ if (mm.is_valid() && (mm->get_button_mask() & MouseButton::MASK_LEFT) != MouseButton::NONE) {
// Select by holding down the mouse button on frames.
const int idx = _sheet_preview_position_to_frame_index(mm->get_position());
@@ -200,11 +200,11 @@ void SpriteFramesEditor::_sheet_scroll_input(const Ref<InputEvent> &p_event) {
// Zoom in/out using Ctrl + mouse wheel. This is done on the ScrollContainer
// to allow performing this action anywhere, even if the cursor isn't
// hovering the texture in the workspace.
- if (mb->get_button_index() == MOUSE_BUTTON_WHEEL_UP && mb->is_pressed() && mb->is_ctrl_pressed()) {
+ if (mb->get_button_index() == MouseButton::WHEEL_UP && mb->is_pressed() && mb->is_ctrl_pressed()) {
_sheet_zoom_in();
// Don't scroll up after zooming in.
accept_event();
- } else if (mb->get_button_index() == MOUSE_BUTTON_WHEEL_DOWN && mb->is_pressed() && mb->is_ctrl_pressed()) {
+ } else if (mb->get_button_index() == MouseButton::WHEEL_DOWN && mb->is_pressed() && mb->is_ctrl_pressed()) {
_sheet_zoom_out();
// Don't scroll down after zooming out.
accept_event();
@@ -746,11 +746,11 @@ void SpriteFramesEditor::_tree_input(const Ref<InputEvent> &p_event) {
const Ref<InputEventMouseButton> mb = p_event;
if (mb.is_valid()) {
- if (mb->get_button_index() == MOUSE_BUTTON_WHEEL_UP && mb->is_pressed() && mb->is_ctrl_pressed()) {
+ if (mb->get_button_index() == MouseButton::WHEEL_UP && mb->is_pressed() && mb->is_ctrl_pressed()) {
_zoom_in();
// Don't scroll up after zooming in.
accept_event();
- } else if (mb->get_button_index() == MOUSE_BUTTON_WHEEL_DOWN && mb->is_pressed() && mb->is_ctrl_pressed()) {
+ } else if (mb->get_button_index() == MouseButton::WHEEL_DOWN && mb->is_pressed() && mb->is_ctrl_pressed()) {
_zoom_out();
// Don't scroll down after zooming out.
accept_event();
@@ -1006,7 +1006,7 @@ void SpriteFramesEditor::drop_data_fw(const Point2 &p_point, const Variant &p_da
if (String(d["type"]) == "files") {
Vector<String> files = d["files"];
- if (Input::get_singleton()->is_key_pressed(KEY_CTRL)) {
+ if (Input::get_singleton()->is_key_pressed(Key::CTRL)) {
_prepare_sprite_sheet(files[0]);
} else {
_file_load_request(files, at_pos);
diff --git a/editor/plugins/style_box_editor_plugin.cpp b/editor/plugins/style_box_editor_plugin.cpp
index 91c5e96f08..1c7f319280 100644
--- a/editor/plugins/style_box_editor_plugin.cpp
+++ b/editor/plugins/style_box_editor_plugin.cpp
@@ -44,13 +44,6 @@ void EditorInspectorPluginStyleBox::parse_begin(Object *p_object) {
add_custom_control(preview);
}
-bool EditorInspectorPluginStyleBox::parse_property(Object *p_object, const Variant::Type p_type, const String &p_path, PropertyHint p_hint, const String &p_hint_text, const uint32_t p_usage, bool p_wide) {
- return false; //do not want
-}
-
-void EditorInspectorPluginStyleBox::parse_end() {
-}
-
void StyleBoxPreview::edit(const Ref<StyleBox> &p_stylebox) {
if (stylebox.is_valid()) {
stylebox->disconnect("changed", callable_mp(this, &StyleBoxPreview::_sb_changed));
diff --git a/editor/plugins/style_box_editor_plugin.h b/editor/plugins/style_box_editor_plugin.h
index 8ca348bd80..d82e5ab05e 100644
--- a/editor/plugins/style_box_editor_plugin.h
+++ b/editor/plugins/style_box_editor_plugin.h
@@ -61,8 +61,6 @@ class EditorInspectorPluginStyleBox : public EditorInspectorPlugin {
public:
virtual bool can_handle(Object *p_object) override;
virtual void parse_begin(Object *p_object) override;
- virtual bool parse_property(Object *p_object, const Variant::Type p_type, const String &p_path, const PropertyHint p_hint, const String &p_hint_text, const uint32_t p_usage, const bool p_wide = false) override;
- virtual void parse_end() override;
};
class StyleBoxEditorPlugin : public EditorPlugin {
diff --git a/editor/plugins/text_control_editor_plugin.cpp b/editor/plugins/text_control_editor_plugin.cpp
new file mode 100644
index 0000000000..c878c83430
--- /dev/null
+++ b/editor/plugins/text_control_editor_plugin.cpp
@@ -0,0 +1,375 @@
+/*************************************************************************/
+/* text_control_editor_plugin.cpp */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+
+#include "text_control_editor_plugin.h"
+
+#include "editor/editor_scale.h"
+
+void TextControlEditor::_notification(int p_notification) {
+ switch (p_notification) {
+ case NOTIFICATION_ENTER_TREE: {
+ if (!EditorFileSystem::get_singleton()->is_connected("filesystem_changed", callable_mp(this, &TextControlEditor::_reload_fonts))) {
+ EditorFileSystem::get_singleton()->connect("filesystem_changed", callable_mp(this, &TextControlEditor::_reload_fonts), make_binds(""));
+ }
+ [[fallthrough]];
+ }
+ case NOTIFICATION_THEME_CHANGED: {
+ clear_formatting->set_icon(get_theme_icon(SNAME("Remove"), SNAME("EditorIcons")));
+ } break;
+ case NOTIFICATION_EXIT_TREE: {
+ if (EditorFileSystem::get_singleton()->is_connected("filesystem_changed", callable_mp(this, &TextControlEditor::_reload_fonts))) {
+ EditorFileSystem::get_singleton()->disconnect("filesystem_changed", callable_mp(this, &TextControlEditor::_reload_fonts));
+ }
+ } break;
+ default:
+ break;
+ }
+}
+
+void TextControlEditor::_find_resources(EditorFileSystemDirectory *p_dir) {
+ for (int i = 0; i < p_dir->get_subdir_count(); i++) {
+ _find_resources(p_dir->get_subdir(i));
+ }
+
+ for (int i = 0; i < p_dir->get_file_count(); i++) {
+ if (p_dir->get_file_type(i) == "FontData") {
+ Ref<FontData> fd = ResourceLoader::load(p_dir->get_file_path(i));
+ if (fd.is_valid()) {
+ String name = fd->get_font_name();
+ String sty = fd->get_font_style_name();
+ if (sty.is_empty()) {
+ sty = "Default";
+ }
+ fonts[name][sty] = p_dir->get_file_path(i);
+ }
+ }
+ }
+}
+
+void TextControlEditor::_reload_fonts(const String &p_path) {
+ fonts.clear();
+ _find_resources(EditorFileSystem::get_singleton()->get_filesystem());
+ _update_control();
+}
+
+void TextControlEditor::_update_fonts_menu() {
+ font_list->clear();
+ font_list->add_item(TTR("[Theme Default]"), FONT_INFO_THEME_DEFAULT);
+ if (custom_font.is_valid()) {
+ font_list->add_item(TTR("[Custom Font]"), FONT_INFO_USER_CUSTOM);
+ }
+
+ int id = FONT_INFO_ID;
+ for (Map<String, Map<String, String>>::Element *E = fonts.front(); E; E = E->next()) {
+ font_list->add_item(E->key(), id++);
+ }
+
+ if (font_list->get_item_count() > 1) {
+ font_list->show();
+ } else {
+ font_list->hide();
+ }
+}
+
+void TextControlEditor::_update_styles_menu() {
+ font_style_list->clear();
+ if ((font_list->get_selected_id() >= FONT_INFO_ID)) {
+ const String &name = font_list->get_item_text(font_list->get_selected());
+ for (Map<String, String>::Element *E = fonts[name].front(); E; E = E->next()) {
+ font_style_list->add_item(E->key());
+ }
+ } else {
+ font_style_list->add_item("Default");
+ }
+
+ if (font_style_list->get_item_count() > 1) {
+ font_style_list->show();
+ } else {
+ font_style_list->hide();
+ }
+}
+
+void TextControlEditor::_update_control() {
+ if (edited_control) {
+ // Get override names.
+ if (edited_control->is_class("RichTextLabel")) {
+ edited_color = "default_color";
+ edited_font = "normal_font";
+ edited_font_size = "normal_font_size";
+ } else {
+ edited_color = "font_color";
+ edited_font = "font";
+ edited_font_size = "font_size";
+ }
+
+ // Get font override.
+ Ref<Font> font;
+ if (edited_control->has_theme_font_override(edited_font)) {
+ font = edited_control->get_theme_font(edited_font);
+ }
+ if (font.is_valid()) {
+ if (font->get_data_count() != 1) {
+ // Composite font, save it to "custom_font" to allow undoing font change.
+ custom_font = font;
+ _update_fonts_menu();
+ font_list->select(FONT_INFO_USER_CUSTOM);
+ _update_styles_menu();
+ font_style_list->select(0);
+ } else {
+ // Single face font, search for the font with matching name and style.
+ String name = font->get_data(0)->get_font_name();
+ String style = font->get_data(0)->get_font_style_name();
+ if (fonts.has(name) && fonts[name].has(style)) {
+ _update_fonts_menu();
+ for (int i = 0; i < font_list->get_item_count(); i++) {
+ if (font_list->get_item_text(i) == name) {
+ font_list->select(i);
+ break;
+ }
+ }
+ _update_styles_menu();
+ for (int i = 0; i < font_style_list->get_item_count(); i++) {
+ if (font_style_list->get_item_text(i) == style) {
+ font_style_list->select(i);
+ break;
+ }
+ }
+ } else {
+ // Unknown font, save it to "custom_font" to allow undoing font change.
+ custom_font = font;
+ _update_fonts_menu();
+ font_list->select(FONT_INFO_USER_CUSTOM);
+ _update_styles_menu();
+ font_style_list->select(0);
+ }
+ }
+ } else {
+ // No font override, select "Theme Default".
+ _update_fonts_menu();
+ font_list->select(FONT_INFO_THEME_DEFAULT);
+ _update_styles_menu();
+ font_style_list->select(0);
+ }
+
+ // Get other theme overrides.
+ font_size_list->set_value(edited_control->get_theme_font_size(edited_font_size));
+ outline_size_list->set_value(edited_control->get_theme_constant("outline_size"));
+
+ font_color_picker->set_pick_color(edited_control->get_theme_color(edited_color));
+ outline_color_picker->set_pick_color(edited_control->get_theme_color("font_outline_color"));
+ }
+}
+
+void TextControlEditor::_font_selected(int p_id) {
+ _update_styles_menu();
+ _set_font();
+}
+
+void TextControlEditor::_font_style_selected(int p_id) {
+ _set_font();
+}
+
+void TextControlEditor::_set_font() {
+ if (edited_control) {
+ if (font_list->get_selected_id() == FONT_INFO_THEME_DEFAULT) {
+ // Remove font override.
+ edited_control->remove_theme_font_override(edited_font);
+ return;
+ } else if (font_list->get_selected_id() == FONT_INFO_USER_CUSTOM) {
+ // Restore "custom_font".
+ edited_control->add_theme_font_override(edited_font, custom_font);
+ return;
+ } else {
+ // Load new font resource using selected name and style.
+ String name = font_list->get_item_text(font_list->get_selected());
+ String sty = font_style_list->get_item_text(font_style_list->get_selected());
+ if (sty.is_empty()) {
+ sty = "Default";
+ }
+ if (fonts.has(name)) {
+ Ref<FontData> fd = ResourceLoader::load(fonts[name][sty]);
+ if (fd.is_valid()) {
+ Ref<Font> f;
+ f.instantiate();
+ f->add_data(fd);
+ edited_control->add_theme_font_override(edited_font, f);
+ }
+ }
+ }
+ }
+}
+
+void TextControlEditor::_font_size_selected(double p_size) {
+ if (edited_control) {
+ edited_control->add_theme_font_size_override(edited_font_size, p_size);
+ }
+}
+
+void TextControlEditor::_outline_size_selected(double p_size) {
+ if (edited_control) {
+ edited_control->add_theme_constant_override("outline_size", p_size);
+ }
+}
+
+void TextControlEditor::_font_color_changed(const Color &p_color) {
+ if (edited_control) {
+ edited_control->add_theme_color_override(edited_color, p_color);
+ }
+}
+
+void TextControlEditor::_outline_color_changed(const Color &p_color) {
+ if (edited_control) {
+ edited_control->add_theme_color_override("font_outline_color", p_color);
+ }
+}
+
+void TextControlEditor::_clear_formatting() {
+ if (edited_control) {
+ edited_control->begin_bulk_theme_override();
+ edited_control->remove_theme_font_override(edited_font);
+ edited_control->remove_theme_font_size_override(edited_font_size);
+ edited_control->remove_theme_color_override(edited_color);
+ edited_control->remove_theme_color_override("font_outline_color");
+ edited_control->remove_theme_constant_override("outline_size");
+ edited_control->end_bulk_theme_override();
+ _update_control();
+ }
+}
+
+void TextControlEditor::edit(Object *p_object) {
+ Control *ctrl = Object::cast_to<Control>(p_object);
+ if (!ctrl) {
+ edited_control = nullptr;
+ custom_font = Ref<Font>();
+ } else {
+ edited_control = ctrl;
+ custom_font = Ref<Font>();
+ _update_control();
+ }
+}
+
+bool TextControlEditor::handles(Object *p_object) const {
+ Control *ctrl = Object::cast_to<Control>(p_object);
+ if (!ctrl) {
+ return false;
+ } else {
+ bool valid = false;
+ ctrl->get("text", &valid);
+ return valid;
+ }
+}
+
+TextControlEditor::TextControlEditor() {
+ add_child(memnew(VSeparator));
+
+ font_list = memnew(OptionButton);
+ font_list->set_flat(true);
+ font_list->set_tooltip(TTR("Font"));
+ add_child(font_list);
+ font_list->connect("item_selected", callable_mp(this, &TextControlEditor::_font_selected));
+
+ font_style_list = memnew(OptionButton);
+ font_style_list->set_flat(true);
+ font_style_list->set_tooltip(TTR("Font style"));
+ font_style_list->set_toggle_mode(true);
+ add_child(font_style_list);
+ font_style_list->connect("item_selected", callable_mp(this, &TextControlEditor::_font_style_selected));
+
+ font_size_list = memnew(SpinBox);
+ font_size_list->set_tooltip(TTR("Font Size"));
+ font_size_list->get_line_edit()->add_theme_constant_override("minimum_character_width", 2);
+ font_size_list->set_min(6);
+ font_size_list->set_step(1);
+ font_size_list->set_max(96);
+ font_size_list->get_line_edit()->set_flat(true);
+ add_child(font_size_list);
+ font_size_list->connect("value_changed", callable_mp(this, &TextControlEditor::_font_size_selected));
+
+ font_color_picker = memnew(ColorPickerButton);
+ font_color_picker->set_custom_minimum_size(Size2(20, 0) * EDSCALE);
+ font_color_picker->set_flat(true);
+ font_color_picker->set_tooltip(TTR("Text Color"));
+ add_child(font_color_picker);
+ font_color_picker->connect("color_changed", callable_mp(this, &TextControlEditor::_font_color_changed));
+
+ add_child(memnew(VSeparator));
+
+ outline_size_list = memnew(SpinBox);
+ outline_size_list->set_tooltip(TTR("Outline Size"));
+ outline_size_list->get_line_edit()->add_theme_constant_override("minimum_character_width", 2);
+ outline_size_list->set_min(0);
+ outline_size_list->set_step(1);
+ outline_size_list->set_max(96);
+ outline_size_list->get_line_edit()->set_flat(true);
+ add_child(outline_size_list);
+ outline_size_list->connect("value_changed", callable_mp(this, &TextControlEditor::_outline_size_selected));
+
+ outline_color_picker = memnew(ColorPickerButton);
+ outline_color_picker->set_custom_minimum_size(Size2(20, 0) * EDSCALE);
+ outline_color_picker->set_flat(true);
+ outline_color_picker->set_tooltip(TTR("Outline Color"));
+ add_child(outline_color_picker);
+ outline_color_picker->connect("color_changed", callable_mp(this, &TextControlEditor::_outline_color_changed));
+
+ add_child(memnew(VSeparator));
+
+ clear_formatting = memnew(Button);
+ clear_formatting->set_flat(true);
+ clear_formatting->set_tooltip(TTR("Clear Formatting"));
+ add_child(clear_formatting);
+ clear_formatting->connect("pressed", callable_mp(this, &TextControlEditor::_clear_formatting));
+}
+
+/*************************************************************************/
+
+void TextControlEditorPlugin::edit(Object *p_object) {
+ text_ctl_editor->edit(p_object);
+}
+
+bool TextControlEditorPlugin::handles(Object *p_object) const {
+ return text_ctl_editor->handles(p_object);
+}
+
+void TextControlEditorPlugin::make_visible(bool p_visible) {
+ if (p_visible) {
+ text_ctl_editor->show();
+ } else {
+ text_ctl_editor->hide();
+ text_ctl_editor->edit(nullptr);
+ }
+}
+
+TextControlEditorPlugin::TextControlEditorPlugin(EditorNode *p_node) {
+ editor = p_node;
+ text_ctl_editor = memnew(TextControlEditor);
+ CanvasItemEditor::get_singleton()->add_control_to_menu_panel(text_ctl_editor);
+
+ text_ctl_editor->hide();
+}
diff --git a/editor/plugins/text_control_editor_plugin.h b/editor/plugins/text_control_editor_plugin.h
new file mode 100644
index 0000000000..7f4aa3754c
--- /dev/null
+++ b/editor/plugins/text_control_editor_plugin.h
@@ -0,0 +1,119 @@
+/*************************************************************************/
+/* text_control_editor_plugin.h */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+
+#ifndef TEXT_CONTROL_EDITOR_PLUGIN_H
+#define TEXT_CONTROL_EDITOR_PLUGIN_H
+
+#include "canvas_item_editor_plugin.h"
+#include "editor/editor_file_system.h"
+#include "editor/editor_inspector.h"
+#include "editor/editor_node.h"
+#include "editor/editor_plugin.h"
+#include "scene/gui/color_rect.h"
+#include "scene/gui/menu_button.h"
+#include "scene/gui/option_button.h"
+#include "scene/gui/popup_menu.h"
+
+/*************************************************************************/
+
+class TextControlEditor : public HBoxContainer {
+ GDCLASS(TextControlEditor, HBoxContainer);
+
+ enum FontInfoID {
+ FONT_INFO_THEME_DEFAULT = 0,
+ FONT_INFO_USER_CUSTOM = 1,
+ FONT_INFO_ID = 100,
+ };
+
+ Map<String, Map<String, String>> fonts;
+
+ OptionButton *font_list = nullptr;
+ SpinBox *font_size_list = nullptr;
+ OptionButton *font_style_list = nullptr;
+ ColorPickerButton *font_color_picker = nullptr;
+ SpinBox *outline_size_list = nullptr;
+ ColorPickerButton *outline_color_picker = nullptr;
+ Button *clear_formatting = nullptr;
+
+ Control *edited_control = nullptr;
+ String edited_color;
+ String edited_font;
+ String edited_font_size;
+ Ref<Font> custom_font;
+
+protected:
+ void _notification(int p_notification);
+ static void _bind_methods(){};
+
+ void _find_resources(EditorFileSystemDirectory *p_dir);
+ void _reload_fonts(const String &p_path);
+
+ void _update_fonts_menu();
+ void _update_styles_menu();
+ void _update_control();
+
+ void _font_selected(int p_id);
+ void _font_style_selected(int p_id);
+ void _set_font();
+
+ void _font_size_selected(double p_size);
+ void _outline_size_selected(double p_size);
+
+ void _font_color_changed(const Color &p_color);
+ void _outline_color_changed(const Color &p_color);
+
+ void _clear_formatting();
+
+public:
+ void edit(Object *p_object);
+ bool handles(Object *p_object) const;
+
+ TextControlEditor();
+};
+
+/*************************************************************************/
+
+class TextControlEditorPlugin : public EditorPlugin {
+ GDCLASS(TextControlEditorPlugin, EditorPlugin);
+
+ TextControlEditor *text_ctl_editor;
+ EditorNode *editor;
+
+public:
+ virtual String get_name() const override { return "TextControlFontEditor"; }
+ bool has_main_screen() const override { return false; }
+ virtual void edit(Object *p_object) override;
+ virtual bool handles(Object *p_object) const override;
+ virtual void make_visible(bool p_visible) override;
+
+ TextControlEditorPlugin(EditorNode *p_node);
+};
+
+#endif // TEXT_CONTROL_EDITOR_PLUGIN_H
diff --git a/editor/plugins/text_editor.cpp b/editor/plugins/text_editor.cpp
index 1fc7eb98e0..e252792c43 100644
--- a/editor/plugins/text_editor.cpp
+++ b/editor/plugins/text_editor.cpp
@@ -65,18 +65,21 @@ void TextEditor::_load_theme_settings() {
String TextEditor::get_name() {
String name;
- if (text_file->get_path().find("local://") == -1 && text_file->get_path().find("::") == -1) {
- name = text_file->get_path().get_file();
- if (is_unsaved()) {
- if (text_file->get_path().is_empty()) {
- name = TTR("[unsaved]");
- }
- name += "(*)";
+ name = text_file->get_path().get_file();
+ if (name.is_empty()) {
+ // This appears for newly created built-in text_files before saving the scene.
+ name = TTR("[unsaved]");
+ } else if (text_file->is_built_in()) {
+ const String &text_file_name = text_file->get_name();
+ if (text_file_name != "") {
+ // If the built-in text_file has a custom resource name defined,
+ // display the built-in text_file name as follows: `ResourceName (scene_file.tscn)`
+ name = vformat("%s (%s)", text_file_name, name.get_slice("::", 0));
}
- } else if (text_file->get_name() != "") {
- name = text_file->get_name();
- } else {
- name = text_file->get_class() + "(" + itos(text_file->get_instance_id()) + ")";
+ }
+
+ if (is_unsaved()) {
+ name += "(*)";
}
return name;
@@ -422,7 +425,7 @@ void TextEditor::_text_edit_gui_input(const Ref<InputEvent> &ev) {
Ref<InputEventMouseButton> mb = ev;
if (mb.is_valid()) {
- if (mb->get_button_index() == MOUSE_BUTTON_RIGHT) {
+ if (mb->get_button_index() == MouseButton::RIGHT) {
CodeEdit *tx = code_editor->get_text_editor();
Point2i pos = tx->get_line_column_at_pos(mb->get_global_position() - tx->get_global_position());
@@ -505,7 +508,7 @@ void TextEditor::_make_context_menu(bool p_selection, bool p_can_fold, bool p_is
context_menu->set_item_disabled(context_menu->get_item_index(EDIT_REDO), !tx->has_redo());
context_menu->set_position(get_global_transform().xform(p_position));
- context_menu->set_size(Vector2(1, 1));
+ context_menu->reset_size();
context_menu->popup();
}
diff --git a/editor/plugins/texture_3d_editor_plugin.cpp b/editor/plugins/texture_3d_editor_plugin.cpp
index bd1923f4ab..b4e394a1c0 100644
--- a/editor/plugins/texture_3d_editor_plugin.cpp
+++ b/editor/plugins/texture_3d_editor_plugin.cpp
@@ -173,7 +173,7 @@ Texture3DEditor::Texture3DEditor() {
info->set_v_grow_direction(GROW_DIRECTION_BEGIN);
info->add_theme_color_override("font_color", Color(1, 1, 1, 1));
info->add_theme_color_override("font_shadow_color", Color(0, 0, 0, 0.5));
- info->add_theme_constant_override("shadow_as_outline", 1);
+ info->add_theme_constant_override("shadow_outline_size", 1);
info->add_theme_constant_override("shadow_offset_x", 2);
info->add_theme_constant_override("shadow_offset_y", 2);
diff --git a/editor/plugins/texture_editor_plugin.cpp b/editor/plugins/texture_editor_plugin.cpp
index b9ec6bf5ab..e25b0270b4 100644
--- a/editor/plugins/texture_editor_plugin.cpp
+++ b/editor/plugins/texture_editor_plugin.cpp
@@ -101,7 +101,7 @@ TexturePreview::TexturePreview(Ref<Texture2D> p_texture, bool p_show_metadata) {
metadata_label->add_theme_color_override("font_outline_color", Color::named("black"));
metadata_label->add_theme_constant_override("outline_size", 2 * EDSCALE);
- metadata_label->add_theme_constant_override("shadow_as_outline", 1);
+ metadata_label->add_theme_constant_override("shadow_outline_size", 1);
metadata_label->set_h_size_flags(Control::SIZE_SHRINK_END);
metadata_label->set_v_size_flags(Control::SIZE_SHRINK_END);
diff --git a/editor/plugins/texture_layered_editor_plugin.cpp b/editor/plugins/texture_layered_editor_plugin.cpp
index 424e018a47..1f536d13cf 100644
--- a/editor/plugins/texture_layered_editor_plugin.cpp
+++ b/editor/plugins/texture_layered_editor_plugin.cpp
@@ -38,7 +38,7 @@ void TextureLayeredEditor::gui_input(const Ref<InputEvent> &p_event) {
ERR_FAIL_COND(p_event.is_null());
Ref<InputEventMouseMotion> mm = p_event;
- if (mm.is_valid() && mm->get_button_mask() & MOUSE_BUTTON_MASK_LEFT) {
+ if (mm.is_valid() && (mm->get_button_mask() & MouseButton::MASK_LEFT) != MouseButton::NONE) {
y_rot += -mm->get_relative().x * 0.01;
x_rot += mm->get_relative().y * 0.01;
_update_material();
@@ -249,7 +249,7 @@ TextureLayeredEditor::TextureLayeredEditor() {
info->set_v_grow_direction(GROW_DIRECTION_BEGIN);
info->add_theme_color_override("font_color", Color(1, 1, 1, 1));
info->add_theme_color_override("font_shadow_color", Color(0, 0, 0, 0.5));
- info->add_theme_constant_override("shadow_as_outline", 1);
+ info->add_theme_constant_override("shadow_outline_size", 1);
info->add_theme_constant_override("shadow_offset_x", 2);
info->add_theme_constant_override("shadow_offset_y", 2);
diff --git a/editor/plugins/texture_region_editor_plugin.cpp b/editor/plugins/texture_region_editor_plugin.cpp
index ce90d61616..8e1c81a876 100644
--- a/editor/plugins/texture_region_editor_plugin.cpp
+++ b/editor/plugins/texture_region_editor_plugin.cpp
@@ -284,7 +284,7 @@ void TextureRegionEditor::_region_input(const Ref<InputEvent> &p_input) {
Ref<InputEventMouseButton> mb = p_input;
if (mb.is_valid()) {
- if (mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (mb->get_button_index() == MouseButton::LEFT) {
if (mb->is_pressed()) {
if (node_ninepatch || obj_styleBox.is_valid()) {
edited_margin = -1;
@@ -330,7 +330,7 @@ void TextureRegionEditor::_region_input(const Ref<InputEvent> &p_input) {
for (const Rect2 &E : autoslice_cache) {
if (E.has_point(point)) {
rect = E;
- if (Input::get_singleton()->is_key_pressed(KEY_CTRL) && !(Input::get_singleton()->is_key_pressed(Key(KEY_SHIFT | KEY_ALT)))) {
+ if (Input::get_singleton()->is_key_pressed(Key::CTRL) && !(Input::get_singleton()->is_key_pressed(Key(Key::SHIFT | Key::ALT)))) {
Rect2 r;
if (atlas_tex.is_valid()) {
r = atlas_tex->get_region();
@@ -446,7 +446,7 @@ void TextureRegionEditor::_region_input(const Ref<InputEvent> &p_input) {
creating = false;
}
- } else if (mb->get_button_index() == MOUSE_BUTTON_RIGHT && mb->is_pressed()) {
+ } else if (mb->get_button_index() == MouseButton::RIGHT && mb->is_pressed()) {
if (drag) {
drag = false;
if (edited_margin >= 0) {
@@ -465,9 +465,9 @@ void TextureRegionEditor::_region_input(const Ref<InputEvent> &p_input) {
drag_index = -1;
}
}
- } else if (mb->get_button_index() == MOUSE_BUTTON_WHEEL_UP && mb->is_pressed()) {
+ } else if (mb->get_button_index() == MouseButton::WHEEL_UP && mb->is_pressed()) {
_zoom_on_position(draw_zoom * ((0.95 + (0.05 * mb->get_factor())) / 0.95), mb->get_position());
- } else if (mb->get_button_index() == MOUSE_BUTTON_WHEEL_DOWN && mb->is_pressed()) {
+ } else if (mb->get_button_index() == MouseButton::WHEEL_DOWN && mb->is_pressed()) {
_zoom_on_position(draw_zoom * (1 - (0.05 * mb->get_factor())), mb->get_position());
}
}
@@ -475,7 +475,7 @@ void TextureRegionEditor::_region_input(const Ref<InputEvent> &p_input) {
Ref<InputEventMouseMotion> mm = p_input;
if (mm.is_valid()) {
- if (mm->get_button_mask() & MOUSE_BUTTON_MASK_MIDDLE || Input::get_singleton()->is_key_pressed(KEY_SPACE)) {
+ if ((mm->get_button_mask() & MouseButton::MASK_MIDDLE) != MouseButton::NONE || Input::get_singleton()->is_key_pressed(Key::SPACE)) {
Vector2 dragged(mm->get_relative().x / draw_zoom, mm->get_relative().y / draw_zoom);
hscroll->set_value(hscroll->get_value() - dragged.x);
vscroll->set_value(vscroll->get_value() - dragged.y);
diff --git a/editor/plugins/theme_editor_plugin.cpp b/editor/plugins/theme_editor_plugin.cpp
index 127219546d..f94439f344 100644
--- a/editor/plugins/theme_editor_plugin.cpp
+++ b/editor/plugins/theme_editor_plugin.cpp
@@ -1711,13 +1711,13 @@ void ThemeItemEditorDialog::_edit_theme_item_gui_input(const Ref<InputEvent> &p_
}
switch (k->get_keycode()) {
- case KEY_KP_ENTER:
- case KEY_ENTER: {
+ case Key::KP_ENTER:
+ case Key::ENTER: {
_confirm_edit_theme_item();
edit_theme_item_dialog->hide();
edit_theme_item_dialog->set_input_as_handled();
} break;
- case KEY_ESCAPE: {
+ case Key::ESCAPE: {
edit_theme_item_dialog->hide();
edit_theme_item_dialog->set_input_as_handled();
} break;
@@ -2848,7 +2848,7 @@ void ThemeTypeEditor::_font_size_item_changed(float p_value, String p_item_name)
edited_theme->set_font_size(p_item_name, edited_type, int(p_value));
}
-void ThemeTypeEditor::_edit_resource_item(RES p_resource) {
+void ThemeTypeEditor::_edit_resource_item(RES p_resource, bool p_edit) {
EditorNode::get_singleton()->edit_resource(p_resource);
}
diff --git a/editor/plugins/theme_editor_plugin.h b/editor/plugins/theme_editor_plugin.h
index b6becbb1c7..f5ad577aff 100644
--- a/editor/plugins/theme_editor_plugin.h
+++ b/editor/plugins/theme_editor_plugin.h
@@ -362,7 +362,7 @@ class ThemeTypeEditor : public MarginContainer {
void _color_item_changed(Color p_value, String p_item_name);
void _constant_item_changed(float p_value, String p_item_name);
void _font_size_item_changed(float p_value, String p_item_name);
- void _edit_resource_item(RES p_resource);
+ void _edit_resource_item(RES p_resource, bool p_edit);
void _font_item_changed(Ref<Font> p_value, String p_item_name);
void _icon_item_changed(Ref<Texture2D> p_value, String p_item_name);
void _stylebox_item_changed(Ref<StyleBox> p_value, String p_item_name);
diff --git a/editor/plugins/theme_editor_preview.cpp b/editor/plugins/theme_editor_preview.cpp
index e13a10fe3f..f13fcb005f 100644
--- a/editor/plugins/theme_editor_preview.cpp
+++ b/editor/plugins/theme_editor_preview.cpp
@@ -71,6 +71,9 @@ void ThemeEditorPreview::_preview_visibility_changed() {
void ThemeEditorPreview::_picker_button_cbk() {
picker_overlay->set_visible(picker_button->is_pressed());
+ if (picker_button->is_pressed()) {
+ _reset_picker_overlay();
+ }
}
Control *ThemeEditorPreview::_find_hovered_control(Control *p_parent, Vector2 p_mouse_position) {
@@ -144,7 +147,7 @@ void ThemeEditorPreview::_gui_input_picker_overlay(const Ref<InputEvent> &p_even
Ref<InputEventMouseButton> mb = p_event;
- if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == MouseButton::LEFT) {
if (hovered_control) {
StringName theme_type = hovered_control->get_theme_type_variation();
if (theme_type == StringName()) {
diff --git a/editor/plugins/tiles/tile_atlas_view.cpp b/editor/plugins/tiles/tile_atlas_view.cpp
index c064073b77..604143ef93 100644
--- a/editor/plugins/tiles/tile_atlas_view.cpp
+++ b/editor/plugins/tiles/tile_atlas_view.cpp
@@ -46,7 +46,7 @@ void TileAtlasView::gui_input(const Ref<InputEvent> &p_event) {
if (mb.is_valid()) {
drag_type = DRAG_TYPE_NONE;
- Vector2i scroll_vec = Vector2((mb->get_button_index() == MOUSE_BUTTON_WHEEL_LEFT) - (mb->get_button_index() == MOUSE_BUTTON_WHEEL_RIGHT), (mb->get_button_index() == MOUSE_BUTTON_WHEEL_UP) - (mb->get_button_index() == MOUSE_BUTTON_WHEEL_DOWN));
+ Vector2i scroll_vec = Vector2((mb->get_button_index() == MouseButton::WHEEL_LEFT) - (mb->get_button_index() == MouseButton::WHEEL_RIGHT), (mb->get_button_index() == MouseButton::WHEEL_UP) - (mb->get_button_index() == MouseButton::WHEEL_DOWN));
if (scroll_vec != Vector2()) {
if (mb->is_ctrl_pressed()) {
if (mb->is_shift_pressed()) {
@@ -69,7 +69,7 @@ void TileAtlasView::gui_input(const Ref<InputEvent> &p_event) {
}
}
- if (mb->get_button_index() == MOUSE_BUTTON_MIDDLE || mb->get_button_index() == MOUSE_BUTTON_RIGHT) {
+ if (mb->get_button_index() == MouseButton::MIDDLE || mb->get_button_index() == MouseButton::RIGHT) {
if (mb->is_pressed()) {
drag_type = DRAG_TYPE_PAN;
} else {
diff --git a/editor/plugins/tiles/tile_data_editors.cpp b/editor/plugins/tiles/tile_data_editors.cpp
index e9d80bb4b8..44cf6b42bc 100644
--- a/editor/plugins/tiles/tile_data_editors.cpp
+++ b/editor/plugins/tiles/tile_data_editors.cpp
@@ -125,7 +125,14 @@ void GenericTilePolygonEditor::_base_control_draw() {
Color grid_color = EditorSettings::get_singleton()->get("editors/tiles_editor/grid_color");
const Ref<Texture2D> handle = get_theme_icon(SNAME("EditorPathSharpHandle"), SNAME("EditorIcons"));
const Ref<Texture2D> add_handle = get_theme_icon(SNAME("EditorHandleAdd"), SNAME("EditorIcons"));
+ const Ref<StyleBox> focus_stylebox = get_theme_stylebox(SNAME("Focus"), SNAME("EditorStyles"));
+ // Draw the focus rectangle.
+ if (base_control->has_focus()) {
+ base_control->draw_style_box(focus_stylebox, Rect2(Vector2(), base_control->get_size()));
+ }
+
+ // Draw tile-related things.
Size2 tile_size = tile_set->get_tile_size();
Transform2D xform;
@@ -240,9 +247,10 @@ void GenericTilePolygonEditor::_zoom_changed() {
}
void GenericTilePolygonEditor::_advanced_menu_item_pressed(int p_item_pressed) {
+ UndoRedo *undo_redo = use_undo_redo ? editor_undo_redo : memnew(UndoRedo);
switch (p_item_pressed) {
case RESET_TO_DEFAULT_TILE: {
- undo_redo->create_action(TTR("Edit Polygons"));
+ undo_redo->create_action(TTR("Reset Polygons"));
undo_redo->add_do_method(this, "clear_polygons");
Vector<Vector2> polygon = tile_set->get_tile_shape_polygon();
for (int i = 0; i < polygon.size(); i++) {
@@ -260,7 +268,7 @@ void GenericTilePolygonEditor::_advanced_menu_item_pressed(int p_item_pressed) {
undo_redo->commit_action(true);
} break;
case CLEAR_TILE: {
- undo_redo->create_action(TTR("Edit Polygons"));
+ undo_redo->create_action(TTR("Clear Polygons"));
undo_redo->add_do_method(this, "clear_polygons");
undo_redo->add_do_method(base_control, "update");
undo_redo->add_do_method(this, "emit_signal", "polygons_changed");
@@ -272,9 +280,50 @@ void GenericTilePolygonEditor::_advanced_menu_item_pressed(int p_item_pressed) {
undo_redo->add_undo_method(this, "emit_signal", "polygons_changed");
undo_redo->commit_action(true);
} break;
+ case ROTATE_RIGHT:
+ case ROTATE_LEFT:
+ case FLIP_HORIZONTALLY:
+ case FLIP_VERTICALLY: {
+ undo_redo->create_action(TTR("Rotate Polygons Left"));
+ for (unsigned int i = 0; i < polygons.size(); i++) {
+ Vector<Point2> new_polygon;
+ for (int point_index = 0; point_index < polygons[i].size(); point_index++) {
+ Vector2 point = polygons[i][point_index];
+ switch (p_item_pressed) {
+ case ROTATE_RIGHT: {
+ point = Vector2(-point.y, point.x);
+ } break;
+ case ROTATE_LEFT: {
+ point = Vector2(point.y, -point.x);
+ } break;
+ case FLIP_HORIZONTALLY: {
+ point = Vector2(-point.x, point.y);
+ } break;
+ case FLIP_VERTICALLY: {
+ point = Vector2(point.x, -point.y);
+ } break;
+ default:
+ break;
+ }
+ new_polygon.push_back(point);
+ }
+ undo_redo->add_do_method(this, "set_polygon", i, new_polygon);
+ }
+ undo_redo->add_do_method(base_control, "update");
+ undo_redo->add_do_method(this, "emit_signal", "polygons_changed");
+ for (unsigned int i = 0; i < polygons.size(); i++) {
+ undo_redo->add_undo_method(this, "set_polygon", polygons[i]);
+ }
+ undo_redo->add_undo_method(base_control, "update");
+ undo_redo->add_undo_method(this, "emit_signal", "polygons_changed");
+ undo_redo->commit_action(true);
+ } break;
default:
break;
}
+ if (!use_undo_redo) {
+ memdelete(undo_redo);
+ }
}
void GenericTilePolygonEditor::_grab_polygon_point(Vector2 p_pos, const Transform2D &p_polygon_xform, int &r_polygon_index, int &r_point_index) {
@@ -359,6 +408,7 @@ void GenericTilePolygonEditor::_snap_to_half_pixel(Point2 &r_point) {
}
void GenericTilePolygonEditor::_base_control_gui_input(Ref<InputEvent> p_event) {
+ UndoRedo *undo_redo = use_undo_redo ? editor_undo_redo : memnew(UndoRedo);
real_t grab_threshold = EDITOR_GET("editors/polygon_editor/point_grab_radius");
hovered_polygon_index = -1;
@@ -399,15 +449,15 @@ void GenericTilePolygonEditor::_base_control_gui_input(Ref<InputEvent> p_event)
Ref<InputEventMouseButton> mb = p_event;
if (mb.is_valid()) {
- if (mb->get_button_index() == MOUSE_BUTTON_WHEEL_UP && mb->is_ctrl_pressed()) {
+ if (mb->get_button_index() == MouseButton::WHEEL_UP && mb->is_ctrl_pressed()) {
editor_zoom_widget->set_zoom_by_increments(1);
_zoom_changed();
accept_event();
- } else if (mb->get_button_index() == MOUSE_BUTTON_WHEEL_DOWN && mb->is_ctrl_pressed()) {
+ } else if (mb->get_button_index() == MouseButton::WHEEL_DOWN && mb->is_ctrl_pressed()) {
editor_zoom_widget->set_zoom_by_increments(-1);
_zoom_changed();
accept_event();
- } else if (mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ } else if (mb->get_button_index() == MouseButton::LEFT) {
if (mb->is_pressed()) {
if (tools_button_group->get_pressed_button() != button_create) {
in_creation_polygon.clear();
@@ -466,7 +516,7 @@ void GenericTilePolygonEditor::_base_control_gui_input(Ref<InputEvent> p_event)
_grab_polygon_point(mb->get_position(), xform, closest_polygon, closest_point);
if (closest_polygon >= 0) {
PackedVector2Array old_polygon = polygons[closest_polygon];
- polygons[closest_polygon].remove(closest_point);
+ polygons[closest_polygon].remove_at(closest_point);
undo_redo->create_action(TTR("Edit Polygons"));
if (polygons[closest_polygon].size() < 3) {
remove_polygon(closest_polygon);
@@ -504,7 +554,7 @@ void GenericTilePolygonEditor::_base_control_gui_input(Ref<InputEvent> p_event)
drag_point_index = -1;
}
- } else if (mb->get_button_index() == MOUSE_BUTTON_RIGHT) {
+ } else if (mb->get_button_index() == MouseButton::RIGHT) {
if (mb->is_pressed()) {
if (tools_button_group->get_pressed_button() == button_edit) {
// Remove point or pan.
@@ -513,7 +563,7 @@ void GenericTilePolygonEditor::_base_control_gui_input(Ref<InputEvent> p_event)
_grab_polygon_point(mb->get_position(), xform, closest_polygon, closest_point);
if (closest_polygon >= 0) {
PackedVector2Array old_polygon = polygons[closest_polygon];
- polygons[closest_polygon].remove(closest_point);
+ polygons[closest_polygon].remove_at(closest_point);
undo_redo->create_action(TTR("Edit Polygons"));
if (polygons[closest_polygon].size() < 3) {
remove_polygon(closest_polygon);
@@ -538,7 +588,7 @@ void GenericTilePolygonEditor::_base_control_gui_input(Ref<InputEvent> p_event)
} else {
drag_type = DRAG_TYPE_NONE;
}
- } else if (mb->get_button_index() == MOUSE_BUTTON_MIDDLE) {
+ } else if (mb->get_button_index() == MouseButton::MIDDLE) {
if (mb->is_pressed()) {
drag_type = DRAG_TYPE_PAN;
drag_last_pos = mb->get_position();
@@ -549,21 +599,47 @@ void GenericTilePolygonEditor::_base_control_gui_input(Ref<InputEvent> p_event)
}
base_control->update();
+
+ if (!use_undo_redo) {
+ memdelete(undo_redo);
+ }
+}
+
+void GenericTilePolygonEditor::set_use_undo_redo(bool p_use_undo_redo) {
+ use_undo_redo = p_use_undo_redo;
}
void GenericTilePolygonEditor::set_tile_set(Ref<TileSet> p_tile_set) {
- if (tile_set != p_tile_set) {
- // Set the default tile shape
- clear_polygons();
- if (p_tile_set.is_valid()) {
- Vector<Vector2> polygon = p_tile_set->get_tile_shape_polygon();
- for (int i = 0; i < polygon.size(); i++) {
- polygon.write[i] = polygon[i] * p_tile_set->get_tile_size();
- }
- add_polygon(polygon);
+ ERR_FAIL_COND(!p_tile_set.is_valid());
+ if (tile_set == p_tile_set) {
+ return;
+ }
+
+ // Set the default tile shape
+ clear_polygons();
+ if (p_tile_set.is_valid()) {
+ Vector<Vector2> polygon = p_tile_set->get_tile_shape_polygon();
+ for (int i = 0; i < polygon.size(); i++) {
+ polygon.write[i] = polygon[i] * p_tile_set->get_tile_size();
}
+ add_polygon(polygon);
}
+
tile_set = p_tile_set;
+
+ // Set the default zoom value.
+ int default_control_y_size = 200 * EDSCALE;
+ Vector2 zoomed_tile = editor_zoom_widget->get_zoom() * tile_set->get_tile_size();
+ while (zoomed_tile.y < default_control_y_size) {
+ editor_zoom_widget->set_zoom_by_increments(6, false);
+ zoomed_tile = editor_zoom_widget->get_zoom() * tile_set->get_tile_size();
+ }
+ while (zoomed_tile.y > default_control_y_size) {
+ editor_zoom_widget->set_zoom_by_increments(-6, false);
+ zoomed_tile = editor_zoom_widget->get_zoom() * tile_set->get_tile_size();
+ }
+ editor_zoom_widget->set_zoom_by_increments(-6, false);
+ _zoom_changed();
}
void GenericTilePolygonEditor::set_background(Ref<Texture2D> p_texture, Rect2 p_region, Vector2 p_offset, bool p_flip_h, bool p_flip_v, bool p_transpose, Color p_modulate) {
@@ -600,7 +676,7 @@ int GenericTilePolygonEditor::add_polygon(Vector<Point2> p_polygon, int p_index)
void GenericTilePolygonEditor::remove_polygon(int p_index) {
ERR_FAIL_INDEX(p_index, (int)polygons.size());
- polygons.remove(p_index);
+ polygons.remove_at(p_index);
if (polygons.size() == 0) {
button_create->set_pressed(true);
@@ -644,6 +720,12 @@ void GenericTilePolygonEditor::_notification(int p_what) {
button_center_view->set_icon(EditorNode::get_singleton()->get_gui_base()->get_theme_icon(SNAME("CenterView"), SNAME("EditorIcons")));
button_pixel_snap->set_icon(EditorNode::get_singleton()->get_gui_base()->get_theme_icon(SNAME("Snap"), SNAME("EditorIcons")));
button_advanced_menu->set_icon(EditorNode::get_singleton()->get_gui_base()->get_theme_icon(SNAME("GuiTabMenuHl"), SNAME("EditorIcons")));
+
+ PopupMenu *p = button_advanced_menu->get_popup();
+ p->set_item_icon(p->get_item_index(ROTATE_RIGHT), get_theme_icon(SNAME("RotateRight"), SNAME("EditorIcons")));
+ p->set_item_icon(p->get_item_index(ROTATE_LEFT), get_theme_icon(SNAME("RotateLeft"), SNAME("EditorIcons")));
+ p->set_item_icon(p->get_item_index(FLIP_HORIZONTALLY), get_theme_icon(SNAME("MirrorX"), SNAME("EditorIcons")));
+ p->set_item_icon(p->get_item_index(FLIP_VERTICALLY), get_theme_icon(SNAME("MirrorY"), SNAME("EditorIcons")));
break;
}
}
@@ -670,18 +752,21 @@ GenericTilePolygonEditor::GenericTilePolygonEditor() {
button_create->set_toggle_mode(true);
button_create->set_button_group(tools_button_group);
button_create->set_pressed(true);
+ button_create->set_tooltip(TTR("Add polygon tool"));
toolbar->add_child(button_create);
button_edit = memnew(Button);
button_edit->set_flat(true);
button_edit->set_toggle_mode(true);
button_edit->set_button_group(tools_button_group);
+ button_edit->set_tooltip(TTR("Edit points tool"));
toolbar->add_child(button_edit);
button_delete = memnew(Button);
button_delete->set_flat(true);
button_delete->set_toggle_mode(true);
button_delete->set_button_group(tools_button_group);
+ button_delete->set_tooltip(TTR("Delete points tool"));
toolbar->add_child(button_delete);
button_advanced_menu = memnew(MenuButton);
@@ -689,7 +774,13 @@ GenericTilePolygonEditor::GenericTilePolygonEditor() {
button_advanced_menu->set_toggle_mode(true);
button_advanced_menu->get_popup()->add_item(TTR("Reset to default tile shape"), RESET_TO_DEFAULT_TILE);
button_advanced_menu->get_popup()->add_item(TTR("Clear"), CLEAR_TILE);
+ button_advanced_menu->get_popup()->add_separator();
+ button_advanced_menu->get_popup()->add_icon_item(get_theme_icon(SNAME("RotateRight"), SNAME("EditorIcons")), TTR("Rotate Right"), ROTATE_RIGHT);
+ button_advanced_menu->get_popup()->add_icon_item(get_theme_icon(SNAME("RotateLeft"), SNAME("EditorIcons")), TTR("Rotate Left"), ROTATE_LEFT);
+ button_advanced_menu->get_popup()->add_icon_item(get_theme_icon(SNAME("MirrorX"), SNAME("EditorIcons")), TTR("Flip Horizontally"), FLIP_HORIZONTALLY);
+ button_advanced_menu->get_popup()->add_icon_item(get_theme_icon(SNAME("MirrorY"), SNAME("EditorIcons")), TTR("Flip Vertically"), FLIP_VERTICALLY);
button_advanced_menu->get_popup()->connect("id_pressed", callable_mp(this, &GenericTilePolygonEditor::_advanced_menu_item_pressed));
+ button_advanced_menu->set_focus_mode(FOCUS_ALL);
toolbar->add_child(button_advanced_menu);
toolbar->add_child(memnew(VSeparator));
@@ -698,6 +789,7 @@ GenericTilePolygonEditor::GenericTilePolygonEditor() {
button_pixel_snap->set_flat(true);
button_pixel_snap->set_toggle_mode(true);
button_pixel_snap->set_pressed(true);
+ button_pixel_snap->set_tooltip(TTR("Snap to half-pixel"));
toolbar->add_child(button_pixel_snap);
Control *root = memnew(Control);
@@ -717,6 +809,7 @@ GenericTilePolygonEditor::GenericTilePolygonEditor() {
base_control->connect("draw", callable_mp(this, &GenericTilePolygonEditor::_base_control_draw));
base_control->connect("gui_input", callable_mp(this, &GenericTilePolygonEditor::_base_control_gui_input));
base_control->set_clip_contents(true);
+ base_control->set_focus_mode(Control::FOCUS_CLICK);
root->add_child(base_control);
editor_zoom_widget = memnew(EditorZoomWidget);
@@ -836,7 +929,7 @@ void TileDataDefaultEditor::forward_painting_atlas_gui_input(TileAtlasView *p_ti
Ref<InputEventMouseButton> mb = p_event;
if (mb.is_valid()) {
- if (mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (mb->get_button_index() == MouseButton::LEFT) {
if (mb->is_pressed()) {
if (picker_button->is_pressed()) {
Vector2i coords = p_tile_atlas_view->get_atlas_tile_coords_at_pos(mb->get_position());
@@ -927,7 +1020,7 @@ void TileDataDefaultEditor::forward_painting_alternatives_gui_input(TileAtlasVie
Ref<InputEventMouseButton> mb = p_event;
if (mb.is_valid()) {
- if (mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (mb->get_button_index() == MouseButton::LEFT) {
if (mb->is_pressed()) {
if (picker_button->is_pressed()) {
Vector3i tile = p_tile_atlas_view->get_alternative_tile_at_pos(mb->get_position());
@@ -1082,7 +1175,7 @@ TileDataDefaultEditor::TileDataDefaultEditor() {
picker_button = memnew(Button);
picker_button->set_flat(true);
picker_button->set_toggle_mode(true);
- picker_button->set_shortcut(ED_SHORTCUT("tiles_editor/picker", "Picker", KEY_P));
+ picker_button->set_shortcut(ED_SHORTCUT("tiles_editor/picker", "Picker", Key::P));
toolbar->add_child(picker_button);
}
@@ -1432,7 +1525,7 @@ TileDataCollisionEditor::TileDataCollisionEditor() {
angular_velocity_editor->connect("property_changed", callable_mp(this, &TileDataCollisionEditor::_property_value_changed).unbind(1));
angular_velocity_editor->update_property();
add_child(angular_velocity_editor);
- property_editors["angular_velocity"] = linear_velocity_editor;
+ property_editors["angular_velocity"] = angular_velocity_editor;
_polygons_changed();
}
@@ -1873,7 +1966,7 @@ void TileDataTerrainsEditor::forward_painting_atlas_gui_input(TileAtlasView *p_t
Ref<InputEventMouseButton> mb = p_event;
if (mb.is_valid()) {
- if (mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (mb->get_button_index() == MouseButton::LEFT) {
if (mb->is_pressed()) {
if (picker_button->is_pressed()) {
Vector2i coords = p_tile_atlas_view->get_atlas_tile_coords_at_pos(mb->get_position());
@@ -2214,7 +2307,7 @@ void TileDataTerrainsEditor::forward_painting_alternatives_gui_input(TileAtlasVi
Ref<InputEventMouseButton> mb = p_event;
if (mb.is_valid()) {
- if (mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (mb->get_button_index() == MouseButton::LEFT) {
if (mb->is_pressed()) {
if (picker_button->is_pressed()) {
Vector3i tile = p_tile_atlas_view->get_alternative_tile_at_pos(mb->get_position());
@@ -2385,7 +2478,7 @@ TileDataTerrainsEditor::TileDataTerrainsEditor() {
picker_button = memnew(Button);
picker_button->set_flat(true);
picker_button->set_toggle_mode(true);
- picker_button->set_shortcut(ED_SHORTCUT("tiles_editor/picker", "Picker", KEY_P));
+ picker_button->set_shortcut(ED_SHORTCUT("tiles_editor/picker", "Picker", Key::P));
toolbar->add_child(picker_button);
// Setup
diff --git a/editor/plugins/tiles/tile_data_editors.h b/editor/plugins/tiles/tile_data_editors.h
index acb4c5882d..3fc5e738bb 100644
--- a/editor/plugins/tiles/tile_data_editors.h
+++ b/editor/plugins/tiles/tile_data_editors.h
@@ -94,7 +94,8 @@ private:
LocalVector<Vector<Point2>> polygons;
bool multiple_polygon_mode = false;
- UndoRedo *undo_redo = EditorNode::get_undo_redo();
+ bool use_undo_redo = true;
+ UndoRedo *editor_undo_redo = EditorNode::get_undo_redo();
// UI
int hovered_polygon_index = -1;
@@ -108,7 +109,7 @@ private:
DRAG_TYPE_CREATE_POINT,
DRAG_TYPE_PAN,
};
- DragType drag_type;
+ DragType drag_type = DRAG_TYPE_NONE;
int drag_polygon_index;
int drag_point_index;
Vector2 drag_last_pos;
@@ -143,6 +144,10 @@ private:
enum AdvancedMenuOption {
RESET_TO_DEFAULT_TILE,
CLEAR_TILE,
+ ROTATE_RIGHT,
+ ROTATE_LEFT,
+ FLIP_HORIZONTALLY,
+ FLIP_VERTICALLY,
};
void _base_control_draw();
@@ -161,6 +166,8 @@ protected:
static void _bind_methods();
public:
+ void set_use_undo_redo(bool p_use_undo_redo);
+
void set_tile_set(Ref<TileSet> p_tile_set);
void set_background(Ref<Texture2D> p_texture, Rect2 p_region = Rect2(), Vector2 p_offset = Vector2(), bool p_flip_h = false, bool p_flip_v = false, bool p_transpose = false, Color p_modulate = Color(1.0, 1.0, 1.0, 0.0));
diff --git a/editor/plugins/tiles/tile_map_editor.cpp b/editor/plugins/tiles/tile_map_editor.cpp
index 21ef94b999..73b1fc7c67 100644
--- a/editor/plugins/tiles/tile_map_editor.cpp
+++ b/editor/plugins/tiles/tile_map_editor.cpp
@@ -99,7 +99,7 @@ void TileMapEditorTilesPlugin::_update_toolbar() {
picker_button->show();
erase_button->show();
tools_settings_vsep_2->show();
- bucket_continuous_checkbox->show();
+ bucket_contiguous_checkbox->show();
random_tile_checkbox->show();
scatter_label->show();
scatter_spinbox->show();
@@ -415,7 +415,7 @@ void TileMapEditorTilesPlugin::_scenes_list_multi_selected(int p_index, bool p_s
TileMapCell selected = TileMapCell(source_id, Vector2i(), scene_id);
// Clear the selection if shift is not pressed.
- if (!Input::get_singleton()->is_key_pressed(KEY_SHIFT)) {
+ if (!Input::get_singleton()->is_key_pressed(Key::SHIFT)) {
tile_set_selection.clear();
}
@@ -543,9 +543,9 @@ bool TileMapEditorTilesPlugin::forward_canvas_gui_input(const Ref<InputEvent> &p
switch (drag_type) {
case DRAG_TYPE_PAINT: {
- Map<Vector2i, TileMapCell> to_draw = _draw_line(drag_start_mouse_pos, drag_last_mouse_pos, mpos);
+ Map<Vector2i, TileMapCell> to_draw = _draw_line(drag_start_mouse_pos, drag_last_mouse_pos, mpos, drag_erasing);
for (const KeyValue<Vector2i, TileMapCell> &E : to_draw) {
- if (!_is_erasing() && E.value.source_id == TileSet::INVALID_SOURCE) {
+ if (!drag_erasing && E.value.source_id == TileSet::INVALID_SOURCE) {
continue;
}
Vector2i coords = E.key;
@@ -560,9 +560,9 @@ bool TileMapEditorTilesPlugin::forward_canvas_gui_input(const Ref<InputEvent> &p
Vector<Vector2i> line = TileMapEditor::get_line(tile_map, tile_map->world_to_map(drag_last_mouse_pos), tile_map->world_to_map(mpos));
for (int i = 0; i < line.size(); i++) {
if (!drag_modified.has(line[i])) {
- Map<Vector2i, TileMapCell> to_draw = _draw_bucket_fill(line[i], bucket_continuous_checkbox->is_pressed());
+ Map<Vector2i, TileMapCell> to_draw = _draw_bucket_fill(line[i], bucket_contiguous_checkbox->is_pressed(), drag_erasing);
for (const KeyValue<Vector2i, TileMapCell> &E : to_draw) {
- if (!_is_erasing() && E.value.source_id == TileSet::INVALID_SOURCE) {
+ if (!drag_erasing && E.value.source_id == TileSet::INVALID_SOURCE) {
continue;
}
Vector2i coords = E.key;
@@ -590,13 +590,13 @@ bool TileMapEditorTilesPlugin::forward_canvas_gui_input(const Ref<InputEvent> &p
Transform2D xform = CanvasItemEditor::get_singleton()->get_canvas_transform() * tile_map->get_global_transform();
Vector2 mpos = xform.affine_inverse().xform(mb->get_position());
- if (mb->get_button_index() == MOUSE_BUTTON_LEFT || mb->get_button_index() == MOUSE_BUTTON_RIGHT) {
+ if (mb->get_button_index() == MouseButton::LEFT || mb->get_button_index() == MouseButton::RIGHT) {
if (mb->is_pressed()) {
- if (mb->get_button_index() == MOUSE_BUTTON_RIGHT) {
- rmb_erasing = true;
+ // Pressed
+ if (erase_button->is_pressed() || mb->get_button_index() == MouseButton::RIGHT) {
+ drag_erasing = true;
}
- // Pressed
if (drag_type == DRAG_TYPE_CLIPBOARD_PASTE) {
// Do nothing.
} else if (tool_buttons_group->get_pressed_button() == select_tool_button) {
@@ -617,18 +617,18 @@ bool TileMapEditorTilesPlugin::forward_canvas_gui_input(const Ref<InputEvent> &p
}
} else {
// Check if we are picking a tile.
- if (picker_button->is_pressed() || (Input::get_singleton()->is_key_pressed(KEY_CTRL) && !Input::get_singleton()->is_key_pressed(KEY_SHIFT))) {
+ if (picker_button->is_pressed() || (Input::get_singleton()->is_key_pressed(Key::CTRL) && !Input::get_singleton()->is_key_pressed(Key::SHIFT))) {
drag_type = DRAG_TYPE_PICK;
drag_start_mouse_pos = mpos;
} else {
// Paint otherwise.
- if (tool_buttons_group->get_pressed_button() == paint_tool_button && !Input::get_singleton()->is_key_pressed(KEY_CTRL) && !Input::get_singleton()->is_key_pressed(KEY_SHIFT)) {
+ if (tool_buttons_group->get_pressed_button() == paint_tool_button && !Input::get_singleton()->is_key_pressed(Key::CTRL) && !Input::get_singleton()->is_key_pressed(Key::SHIFT)) {
drag_type = DRAG_TYPE_PAINT;
drag_start_mouse_pos = mpos;
drag_modified.clear();
- Map<Vector2i, TileMapCell> to_draw = _draw_line(drag_start_mouse_pos, mpos, mpos);
+ Map<Vector2i, TileMapCell> to_draw = _draw_line(drag_start_mouse_pos, mpos, mpos, drag_erasing);
for (const KeyValue<Vector2i, TileMapCell> &E : to_draw) {
- if (!_is_erasing() && E.value.source_id == TileSet::INVALID_SOURCE) {
+ if (!drag_erasing && E.value.source_id == TileSet::INVALID_SOURCE) {
continue;
}
Vector2i coords = E.key;
@@ -638,11 +638,11 @@ bool TileMapEditorTilesPlugin::forward_canvas_gui_input(const Ref<InputEvent> &p
tile_map->set_cell(tile_map_layer, coords, E.value.source_id, E.value.get_atlas_coords(), E.value.alternative_tile);
}
_fix_invalid_tiles_in_tile_map_selection();
- } else if (tool_buttons_group->get_pressed_button() == line_tool_button || (tool_buttons_group->get_pressed_button() == paint_tool_button && Input::get_singleton()->is_key_pressed(KEY_SHIFT) && !Input::get_singleton()->is_key_pressed(KEY_CTRL))) {
+ } else if (tool_buttons_group->get_pressed_button() == line_tool_button || (tool_buttons_group->get_pressed_button() == paint_tool_button && Input::get_singleton()->is_key_pressed(Key::SHIFT) && !Input::get_singleton()->is_key_pressed(Key::CTRL))) {
drag_type = DRAG_TYPE_LINE;
drag_start_mouse_pos = mpos;
drag_modified.clear();
- } else if (tool_buttons_group->get_pressed_button() == rect_tool_button || (tool_buttons_group->get_pressed_button() == paint_tool_button && Input::get_singleton()->is_key_pressed(KEY_SHIFT) && Input::get_singleton()->is_key_pressed(KEY_CTRL))) {
+ } else if (tool_buttons_group->get_pressed_button() == rect_tool_button || (tool_buttons_group->get_pressed_button() == paint_tool_button && Input::get_singleton()->is_key_pressed(Key::SHIFT) && Input::get_singleton()->is_key_pressed(Key::CTRL))) {
drag_type = DRAG_TYPE_RECT;
drag_start_mouse_pos = mpos;
drag_modified.clear();
@@ -653,9 +653,9 @@ bool TileMapEditorTilesPlugin::forward_canvas_gui_input(const Ref<InputEvent> &p
Vector<Vector2i> line = TileMapEditor::get_line(tile_map, tile_map->world_to_map(drag_last_mouse_pos), tile_map->world_to_map(mpos));
for (int i = 0; i < line.size(); i++) {
if (!drag_modified.has(line[i])) {
- Map<Vector2i, TileMapCell> to_draw = _draw_bucket_fill(line[i], bucket_continuous_checkbox->is_pressed());
+ Map<Vector2i, TileMapCell> to_draw = _draw_bucket_fill(line[i], bucket_contiguous_checkbox->is_pressed(), drag_erasing);
for (const KeyValue<Vector2i, TileMapCell> &E : to_draw) {
- if (!_is_erasing() && E.value.source_id == TileSet::INVALID_SOURCE) {
+ if (!drag_erasing && E.value.source_id == TileSet::INVALID_SOURCE) {
continue;
}
Vector2i coords = E.key;
@@ -674,9 +674,7 @@ bool TileMapEditorTilesPlugin::forward_canvas_gui_input(const Ref<InputEvent> &p
} else {
// Released
_stop_dragging();
- if (mb->get_button_index() == MOUSE_BUTTON_RIGHT) {
- rmb_erasing = false;
- }
+ drag_erasing = false;
}
CanvasItemEditor::get_singleton()->update_viewport();
@@ -715,7 +713,7 @@ void TileMapEditorTilesPlugin::forward_canvas_draw_over_viewport(Control *p_over
// Draw the selection.
if ((tiles_bottom_panel->is_visible_in_tree() || patterns_bottom_panel->is_visible_in_tree()) && tool_buttons_group->get_pressed_button() == select_tool_button) {
// In select mode, we only draw the current selection if we are modifying it (pressing control or shift).
- if (drag_type == DRAG_TYPE_MOVE || (drag_type == DRAG_TYPE_SELECT && !Input::get_singleton()->is_key_pressed(KEY_CTRL) && !Input::get_singleton()->is_key_pressed(KEY_SHIFT))) {
+ if (drag_type == DRAG_TYPE_MOVE || (drag_type == DRAG_TYPE_SELECT && !Input::get_singleton()->is_key_pressed(Key::CTRL) && !Input::get_singleton()->is_key_pressed(Key::SHIFT))) {
// Do nothing
} else {
Color grid_color = EditorSettings::get_singleton()->get("editors/tiles_editor/grid_color");
@@ -730,7 +728,7 @@ void TileMapEditorTilesPlugin::forward_canvas_draw_over_viewport(Control *p_over
Rect2i drawn_grid_rect;
if (drag_type == DRAG_TYPE_PICK) {
- // Draw the area being picvked.
+ // Draw the area being picked.
Rect2i rect = Rect2i(tile_map->world_to_map(drag_start_mouse_pos), tile_map->world_to_map(drag_last_mouse_pos) - tile_map->world_to_map(drag_start_mouse_pos)).abs();
rect.size += Vector2i(1, 1);
for (int x = rect.position.x; x < rect.get_end().x; x++) {
@@ -785,29 +783,29 @@ void TileMapEditorTilesPlugin::forward_canvas_draw_over_viewport(Control *p_over
Vector2i coords = tile_map->map_pattern(tile_map->world_to_map(drag_last_mouse_pos - mouse_offset), clipboard_used_cells[i], tile_map_clipboard);
preview[coords] = TileMapCell(tile_map_clipboard->get_cell_source_id(clipboard_used_cells[i]), tile_map_clipboard->get_cell_atlas_coords(clipboard_used_cells[i]), tile_map_clipboard->get_cell_alternative_tile(clipboard_used_cells[i]));
}
- } else if (!picker_button->is_pressed() && !(drag_type == DRAG_TYPE_NONE && Input::get_singleton()->is_key_pressed(KEY_CTRL) && !Input::get_singleton()->is_key_pressed(KEY_SHIFT))) {
+ } else if (!picker_button->is_pressed() && !(drag_type == DRAG_TYPE_NONE && Input::get_singleton()->is_key_pressed(Key::CTRL) && !Input::get_singleton()->is_key_pressed(Key::SHIFT))) {
bool expand_grid = false;
if (tool_buttons_group->get_pressed_button() == paint_tool_button && drag_type == DRAG_TYPE_NONE) {
// Preview for a single pattern.
- preview = _draw_line(drag_last_mouse_pos, drag_last_mouse_pos, drag_last_mouse_pos);
+ preview = _draw_line(drag_last_mouse_pos, drag_last_mouse_pos, drag_last_mouse_pos, erase_button->is_pressed());
expand_grid = true;
} else if (tool_buttons_group->get_pressed_button() == line_tool_button || drag_type == DRAG_TYPE_LINE) {
if (drag_type == DRAG_TYPE_NONE) {
// Preview for a single pattern.
- preview = _draw_line(drag_last_mouse_pos, drag_last_mouse_pos, drag_last_mouse_pos);
+ preview = _draw_line(drag_last_mouse_pos, drag_last_mouse_pos, drag_last_mouse_pos, erase_button->is_pressed());
expand_grid = true;
} else if (drag_type == DRAG_TYPE_LINE) {
// Preview for a line pattern.
- preview = _draw_line(drag_start_mouse_pos, drag_start_mouse_pos, drag_last_mouse_pos);
+ preview = _draw_line(drag_start_mouse_pos, drag_start_mouse_pos, drag_last_mouse_pos, drag_erasing);
expand_grid = true;
}
} else if (drag_type == DRAG_TYPE_RECT) {
// Preview for a rect pattern.
- preview = _draw_rect(tile_map->world_to_map(drag_start_mouse_pos), tile_map->world_to_map(drag_last_mouse_pos));
+ preview = _draw_rect(tile_map->world_to_map(drag_start_mouse_pos), tile_map->world_to_map(drag_last_mouse_pos), drag_erasing);
expand_grid = true;
} else if (tool_buttons_group->get_pressed_button() == bucket_tool_button && drag_type == DRAG_TYPE_NONE) {
// Preview for a fill pattern.
- preview = _draw_bucket_fill(tile_map->world_to_map(drag_last_mouse_pos), bucket_continuous_checkbox->is_pressed());
+ preview = _draw_bucket_fill(tile_map->world_to_map(drag_last_mouse_pos), bucket_contiguous_checkbox->is_pressed(), erase_button->is_pressed());
}
// Expand the grid if needed
@@ -855,7 +853,7 @@ void TileMapEditorTilesPlugin::forward_canvas_draw_over_viewport(Control *p_over
Transform2D tile_xform;
tile_xform.set_origin(tile_map->map_to_world(E.key));
tile_xform.set_scale(tile_set->get_tile_size());
- if (!_is_erasing() && random_tile_checkbox->is_pressed()) {
+ if (!(drag_erasing || erase_button->is_pressed()) && random_tile_checkbox->is_pressed()) {
tile_set->draw_tile_shape(p_overlay, xform * tile_xform, Color(1.0, 1.0, 1.0, 0.5), true);
} else {
if (tile_set->has_source(E.value.source_id)) {
@@ -966,7 +964,7 @@ TileMapCell TileMapEditorTilesPlugin::_pick_random_tile(Ref<TileMapPattern> p_pa
return TileMapCell();
}
-Map<Vector2i, TileMapCell> TileMapEditorTilesPlugin::_draw_line(Vector2 p_start_drag_mouse_pos, Vector2 p_from_mouse_pos, Vector2 p_to_mouse_pos) {
+Map<Vector2i, TileMapCell> TileMapEditorTilesPlugin::_draw_line(Vector2 p_start_drag_mouse_pos, Vector2 p_from_mouse_pos, Vector2 p_to_mouse_pos, bool p_erase) {
TileMap *tile_map = Object::cast_to<TileMap>(ObjectDB::get_instance(tile_map_id));
if (!tile_map) {
return Map<Vector2i, TileMapCell>();
@@ -981,12 +979,12 @@ Map<Vector2i, TileMapCell> TileMapEditorTilesPlugin::_draw_line(Vector2 p_start_
Ref<TileMapPattern> erase_pattern;
erase_pattern.instantiate();
erase_pattern->set_cell(Vector2i(0, 0), TileSet::INVALID_SOURCE, TileSetSource::INVALID_ATLAS_COORDS, TileSetSource::INVALID_TILE_ALTERNATIVE);
- Ref<TileMapPattern> pattern = _is_erasing() ? erase_pattern : selection_pattern;
+ Ref<TileMapPattern> pattern = p_erase ? erase_pattern : selection_pattern;
Map<Vector2i, TileMapCell> output;
if (!pattern->is_empty()) {
// Paint the tiles on the tile map.
- if (!_is_erasing() && random_tile_checkbox->is_pressed()) {
+ if (!p_erase && random_tile_checkbox->is_pressed()) {
// Paint a random tile.
Vector<Vector2i> line = TileMapEditor::get_line(tile_map, tile_map->world_to_map(p_from_mouse_pos), tile_map->world_to_map(p_to_mouse_pos));
for (int i = 0; i < line.size(); i++) {
@@ -1015,7 +1013,7 @@ Map<Vector2i, TileMapCell> TileMapEditorTilesPlugin::_draw_line(Vector2 p_start_
return output;
}
-Map<Vector2i, TileMapCell> TileMapEditorTilesPlugin::_draw_rect(Vector2i p_start_cell, Vector2i p_end_cell) {
+Map<Vector2i, TileMapCell> TileMapEditorTilesPlugin::_draw_rect(Vector2i p_start_cell, Vector2i p_end_cell, bool p_erase) {
TileMap *tile_map = Object::cast_to<TileMap>(ObjectDB::get_instance(tile_map_id));
if (!tile_map) {
return Map<Vector2i, TileMapCell>();
@@ -1034,7 +1032,7 @@ Map<Vector2i, TileMapCell> TileMapEditorTilesPlugin::_draw_rect(Vector2i p_start
Ref<TileMapPattern> erase_pattern;
erase_pattern.instantiate();
erase_pattern->set_cell(Vector2i(0, 0), TileSet::INVALID_SOURCE, TileSetSource::INVALID_ATLAS_COORDS, TileSetSource::INVALID_TILE_ALTERNATIVE);
- Ref<TileMapPattern> pattern = _is_erasing() ? erase_pattern : selection_pattern;
+ Ref<TileMapPattern> pattern = p_erase ? erase_pattern : selection_pattern;
Map<Vector2i, TileMapCell> err_output;
ERR_FAIL_COND_V(pattern->is_empty(), err_output);
@@ -1046,7 +1044,7 @@ Map<Vector2i, TileMapCell> TileMapEditorTilesPlugin::_draw_rect(Vector2i p_start
Map<Vector2i, TileMapCell> output;
if (!pattern->is_empty()) {
- if (!_is_erasing() && random_tile_checkbox->is_pressed()) {
+ if (!p_erase && random_tile_checkbox->is_pressed()) {
// Paint a random tile.
for (int x = 0; x < rect.size.x; x++) {
for (int y = 0; y < rect.size.y; y++) {
@@ -1074,7 +1072,7 @@ Map<Vector2i, TileMapCell> TileMapEditorTilesPlugin::_draw_rect(Vector2i p_start
return output;
}
-Map<Vector2i, TileMapCell> TileMapEditorTilesPlugin::_draw_bucket_fill(Vector2i p_coords, bool p_contiguous) {
+Map<Vector2i, TileMapCell> TileMapEditorTilesPlugin::_draw_bucket_fill(Vector2i p_coords, bool p_contiguous, bool p_erase) {
TileMap *tile_map = Object::cast_to<TileMap>(ObjectDB::get_instance(tile_map_id));
if (!tile_map) {
return Map<Vector2i, TileMapCell>();
@@ -1095,14 +1093,14 @@ Map<Vector2i, TileMapCell> TileMapEditorTilesPlugin::_draw_bucket_fill(Vector2i
Ref<TileMapPattern> erase_pattern;
erase_pattern.instantiate();
erase_pattern->set_cell(Vector2i(0, 0), TileSet::INVALID_SOURCE, TileSetSource::INVALID_ATLAS_COORDS, TileSetSource::INVALID_TILE_ALTERNATIVE);
- Ref<TileMapPattern> pattern = _is_erasing() ? erase_pattern : selection_pattern;
+ Ref<TileMapPattern> pattern = p_erase ? erase_pattern : selection_pattern;
if (!pattern->is_empty()) {
- TileMapCell source = tile_map->get_cell(tile_map_layer, p_coords);
+ TileMapCell source_cell = tile_map->get_cell(tile_map_layer, p_coords);
// If we are filling empty tiles, compute the tilemap boundaries.
Rect2i boundaries;
- if (source.source_id == TileSet::INVALID_SOURCE) {
+ if (source_cell.source_id == TileSet::INVALID_SOURCE) {
boundaries = tile_map->get_used_rect();
}
@@ -1115,11 +1113,11 @@ Map<Vector2i, TileMapCell> TileMapEditorTilesPlugin::_draw_bucket_fill(Vector2i
Vector2i coords = to_check.back()->get();
to_check.pop_back();
if (!already_checked.has(coords)) {
- if (source.source_id == tile_map->get_cell_source_id(tile_map_layer, coords) &&
- source.get_atlas_coords() == tile_map->get_cell_atlas_coords(tile_map_layer, coords) &&
- source.alternative_tile == tile_map->get_cell_alternative_tile(tile_map_layer, coords) &&
- (source.source_id != TileSet::INVALID_SOURCE || boundaries.has_point(coords))) {
- if (!_is_erasing() && random_tile_checkbox->is_pressed()) {
+ if (source_cell.source_id == tile_map->get_cell_source_id(tile_map_layer, coords) &&
+ source_cell.get_atlas_coords() == tile_map->get_cell_atlas_coords(tile_map_layer, coords) &&
+ source_cell.alternative_tile == tile_map->get_cell_alternative_tile(tile_map_layer, coords) &&
+ (source_cell.source_id != TileSet::INVALID_SOURCE || boundaries.has_point(coords))) {
+ if (!p_erase && random_tile_checkbox->is_pressed()) {
// Paint a random tile.
output.insert(coords, _pick_random_tile(pattern));
} else {
@@ -1146,7 +1144,7 @@ Map<Vector2i, TileMapCell> TileMapEditorTilesPlugin::_draw_bucket_fill(Vector2i
} else {
// Replace all tiles like the source.
TypedArray<Vector2i> to_check;
- if (source.source_id == TileSet::INVALID_SOURCE) {
+ if (source_cell.source_id == TileSet::INVALID_SOURCE) {
Rect2i rect = tile_map->get_used_rect();
if (rect.has_no_area()) {
rect = Rect2i(p_coords, Vector2i(1, 1));
@@ -1161,11 +1159,11 @@ Map<Vector2i, TileMapCell> TileMapEditorTilesPlugin::_draw_bucket_fill(Vector2i
}
for (int i = 0; i < to_check.size(); i++) {
Vector2i coords = to_check[i];
- if (source.source_id == tile_map->get_cell_source_id(tile_map_layer, coords) &&
- source.get_atlas_coords() == tile_map->get_cell_atlas_coords(tile_map_layer, coords) &&
- source.alternative_tile == tile_map->get_cell_alternative_tile(tile_map_layer, coords) &&
- (source.source_id != TileSet::INVALID_SOURCE || boundaries.has_point(coords))) {
- if (!_is_erasing() && random_tile_checkbox->is_pressed()) {
+ if (source_cell.source_id == tile_map->get_cell_source_id(tile_map_layer, coords) &&
+ source_cell.get_atlas_coords() == tile_map->get_cell_atlas_coords(tile_map_layer, coords) &&
+ source_cell.alternative_tile == tile_map->get_cell_alternative_tile(tile_map_layer, coords) &&
+ (source_cell.source_id != TileSet::INVALID_SOURCE || boundaries.has_point(coords))) {
+ if (!p_erase && random_tile_checkbox->is_pressed()) {
// Paint a random tile.
output.insert(coords, _pick_random_tile(pattern));
} else {
@@ -1214,14 +1212,14 @@ void TileMapEditorTilesPlugin::_stop_dragging() {
undo_redo->create_action(TTR("Change selection"));
undo_redo->add_undo_method(this, "_set_tile_map_selection", _get_tile_map_selection());
- if (!Input::get_singleton()->is_key_pressed(KEY_SHIFT) && !Input::get_singleton()->is_key_pressed(KEY_CTRL)) {
+ if (!Input::get_singleton()->is_key_pressed(Key::SHIFT) && !Input::get_singleton()->is_key_pressed(Key::CTRL)) {
tile_map_selection.clear();
}
Rect2i rect = Rect2i(tile_map->world_to_map(drag_start_mouse_pos), tile_map->world_to_map(mpos) - tile_map->world_to_map(drag_start_mouse_pos)).abs();
for (int x = rect.position.x; x <= rect.get_end().x; x++) {
for (int y = rect.position.y; y <= rect.get_end().y; y++) {
Vector2i coords = Vector2i(x, y);
- if (Input::get_singleton()->is_key_pressed(KEY_CTRL)) {
+ if (Input::get_singleton()->is_key_pressed(Key::CTRL)) {
if (tile_map_selection.has(coords)) {
tile_map_selection.erase(coords);
}
@@ -1338,10 +1336,10 @@ void TileMapEditorTilesPlugin::_stop_dragging() {
undo_redo->commit_action(false);
} break;
case DRAG_TYPE_LINE: {
- Map<Vector2i, TileMapCell> to_draw = _draw_line(drag_start_mouse_pos, drag_start_mouse_pos, mpos);
+ Map<Vector2i, TileMapCell> to_draw = _draw_line(drag_start_mouse_pos, drag_start_mouse_pos, mpos, drag_erasing);
undo_redo->create_action(TTR("Paint tiles"));
for (const KeyValue<Vector2i, TileMapCell> &E : to_draw) {
- if (!_is_erasing() && E.value.source_id == TileSet::INVALID_SOURCE) {
+ if (!drag_erasing && E.value.source_id == TileSet::INVALID_SOURCE) {
continue;
}
undo_redo->add_do_method(tile_map, "set_cell", tile_map_layer, E.key, E.value.source_id, E.value.get_atlas_coords(), E.value.alternative_tile);
@@ -1350,10 +1348,10 @@ void TileMapEditorTilesPlugin::_stop_dragging() {
undo_redo->commit_action();
} break;
case DRAG_TYPE_RECT: {
- Map<Vector2i, TileMapCell> to_draw = _draw_rect(tile_map->world_to_map(drag_start_mouse_pos), tile_map->world_to_map(mpos));
+ Map<Vector2i, TileMapCell> to_draw = _draw_rect(tile_map->world_to_map(drag_start_mouse_pos), tile_map->world_to_map(mpos), drag_erasing);
undo_redo->create_action(TTR("Paint tiles"));
for (const KeyValue<Vector2i, TileMapCell> &E : to_draw) {
- if (!_is_erasing() && E.value.source_id == TileSet::INVALID_SOURCE) {
+ if (!drag_erasing && E.value.source_id == TileSet::INVALID_SOURCE) {
continue;
}
undo_redo->add_do_method(tile_map, "set_cell", tile_map_layer, E.key, E.value.source_id, E.value.get_atlas_coords(), E.value.alternative_tile);
@@ -1473,10 +1471,6 @@ void TileMapEditorTilesPlugin::_fix_invalid_tiles_in_tile_map_selection() {
}
}
-bool TileMapEditorTilesPlugin::_is_erasing() const {
- return erase_button->is_pressed() || rmb_erasing;
-}
-
void TileMapEditorTilesPlugin::_update_selection_pattern_from_tilemap_selection() {
TileMap *tile_map = Object::cast_to<TileMap>(ObjectDB::get_instance(tile_map_id));
if (!tile_map) {
@@ -1740,7 +1734,7 @@ void TileMapEditorTilesPlugin::_tile_atlas_control_gui_input(const Ref<InputEven
}
Ref<InputEventMouseButton> mb = p_event;
- if (mb.is_valid() && mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (mb.is_valid() && mb->get_button_index() == MouseButton::LEFT) {
if (mb->is_pressed()) { // Pressed
tile_set_dragging_selection = true;
tile_set_drag_start_mouse_pos = tile_atlas_control->get_local_mouse_position();
@@ -1898,7 +1892,7 @@ void TileMapEditorTilesPlugin::_tile_alternatives_control_gui_input(const Ref<In
}
Ref<InputEventMouseButton> mb = p_event;
- if (mb.is_valid() && mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (mb.is_valid() && mb->get_button_index() == MouseButton::LEFT) {
if (mb->is_pressed()) { // Pressed
// Left click pressed.
if (!mb->is_shift_pressed()) {
@@ -1963,11 +1957,11 @@ TileMapEditorTilesPlugin::TileMapEditorTilesPlugin() {
CanvasItemEditor::get_singleton()->get_viewport_control()->connect("mouse_exited", callable_mp(this, &TileMapEditorTilesPlugin::_mouse_exited_viewport));
// --- Shortcuts ---
- ED_SHORTCUT("tiles_editor/cut", TTR("Cut"), KEY_MASK_CMD | KEY_X);
- ED_SHORTCUT("tiles_editor/copy", TTR("Copy"), KEY_MASK_CMD | KEY_C);
- ED_SHORTCUT("tiles_editor/paste", TTR("Paste"), KEY_MASK_CMD | KEY_V);
- ED_SHORTCUT("tiles_editor/cancel", TTR("Cancel"), KEY_ESCAPE);
- ED_SHORTCUT("tiles_editor/delete", TTR("Delete"), KEY_DELETE);
+ ED_SHORTCUT("tiles_editor/cut", TTR("Cut"), KeyModifierMask::CMD | Key::X);
+ ED_SHORTCUT("tiles_editor/copy", TTR("Copy"), KeyModifierMask::CMD | Key::C);
+ ED_SHORTCUT("tiles_editor/paste", TTR("Paste"), KeyModifierMask::CMD | Key::V);
+ ED_SHORTCUT("tiles_editor/cancel", TTR("Cancel"), Key::ESCAPE);
+ ED_SHORTCUT("tiles_editor/delete", TTR("Delete"), Key::KEY_DELETE);
// --- Initialize references ---
tile_map_clipboard.instantiate();
@@ -1985,7 +1979,7 @@ TileMapEditorTilesPlugin::TileMapEditorTilesPlugin() {
select_tool_button->set_flat(true);
select_tool_button->set_toggle_mode(true);
select_tool_button->set_button_group(tool_buttons_group);
- select_tool_button->set_shortcut(ED_SHORTCUT("tiles_editor/selection_tool", "Selection", KEY_S));
+ select_tool_button->set_shortcut(ED_SHORTCUT("tiles_editor/selection_tool", "Selection", Key::S));
select_tool_button->connect("pressed", callable_mp(this, &TileMapEditorTilesPlugin::_update_toolbar));
tilemap_tiles_tools_buttons->add_child(select_tool_button);
@@ -1993,7 +1987,7 @@ TileMapEditorTilesPlugin::TileMapEditorTilesPlugin() {
paint_tool_button->set_flat(true);
paint_tool_button->set_toggle_mode(true);
paint_tool_button->set_button_group(tool_buttons_group);
- paint_tool_button->set_shortcut(ED_SHORTCUT("tiles_editor/paint_tool", "Paint", KEY_D));
+ paint_tool_button->set_shortcut(ED_SHORTCUT("tiles_editor/paint_tool", "Paint", Key::D));
paint_tool_button->set_tooltip(TTR("Shift: Draw line.") + "\n" + TTR("Shift+Ctrl: Draw rectangle."));
paint_tool_button->connect("pressed", callable_mp(this, &TileMapEditorTilesPlugin::_update_toolbar));
tilemap_tiles_tools_buttons->add_child(paint_tool_button);
@@ -2002,7 +1996,7 @@ TileMapEditorTilesPlugin::TileMapEditorTilesPlugin() {
line_tool_button->set_flat(true);
line_tool_button->set_toggle_mode(true);
line_tool_button->set_button_group(tool_buttons_group);
- line_tool_button->set_shortcut(ED_SHORTCUT("tiles_editor/line_tool", "Line", KEY_L));
+ line_tool_button->set_shortcut(ED_SHORTCUT("tiles_editor/line_tool", "Line", Key::L));
line_tool_button->connect("pressed", callable_mp(this, &TileMapEditorTilesPlugin::_update_toolbar));
tilemap_tiles_tools_buttons->add_child(line_tool_button);
@@ -2010,7 +2004,7 @@ TileMapEditorTilesPlugin::TileMapEditorTilesPlugin() {
rect_tool_button->set_flat(true);
rect_tool_button->set_toggle_mode(true);
rect_tool_button->set_button_group(tool_buttons_group);
- rect_tool_button->set_shortcut(ED_SHORTCUT("tiles_editor/rect_tool", "Rect", KEY_R));
+ rect_tool_button->set_shortcut(ED_SHORTCUT("tiles_editor/rect_tool", "Rect", Key::R));
rect_tool_button->connect("pressed", callable_mp(this, &TileMapEditorTilesPlugin::_update_toolbar));
tilemap_tiles_tools_buttons->add_child(rect_tool_button);
@@ -2018,7 +2012,7 @@ TileMapEditorTilesPlugin::TileMapEditorTilesPlugin() {
bucket_tool_button->set_flat(true);
bucket_tool_button->set_toggle_mode(true);
bucket_tool_button->set_button_group(tool_buttons_group);
- bucket_tool_button->set_shortcut(ED_SHORTCUT("tiles_editor/bucket_tool", "Bucket", KEY_B));
+ bucket_tool_button->set_shortcut(ED_SHORTCUT("tiles_editor/bucket_tool", "Bucket", Key::B));
bucket_tool_button->connect("pressed", callable_mp(this, &TileMapEditorTilesPlugin::_update_toolbar));
tilemap_tiles_tools_buttons->add_child(bucket_tool_button);
toolbar->add_child(tilemap_tiles_tools_buttons);
@@ -2034,7 +2028,7 @@ TileMapEditorTilesPlugin::TileMapEditorTilesPlugin() {
picker_button = memnew(Button);
picker_button->set_flat(true);
picker_button->set_toggle_mode(true);
- picker_button->set_shortcut(ED_SHORTCUT("tiles_editor/picker", "Picker", KEY_P));
+ picker_button->set_shortcut(ED_SHORTCUT("tiles_editor/picker", "Picker", Key::P));
picker_button->set_tooltip(TTR("Alternatively hold Ctrl with other tools to pick tile."));
picker_button->connect("pressed", callable_mp(CanvasItemEditor::get_singleton(), &CanvasItemEditor::update_viewport));
tools_settings->add_child(picker_button);
@@ -2043,7 +2037,7 @@ TileMapEditorTilesPlugin::TileMapEditorTilesPlugin() {
erase_button = memnew(Button);
erase_button->set_flat(true);
erase_button->set_toggle_mode(true);
- erase_button->set_shortcut(ED_SHORTCUT("tiles_editor/eraser", "Eraser", KEY_E));
+ erase_button->set_shortcut(ED_SHORTCUT("tiles_editor/eraser", "Eraser", Key::E));
erase_button->set_tooltip(TTR("Alternatively use RMB to erase tiles."));
erase_button->connect("pressed", callable_mp(CanvasItemEditor::get_singleton(), &CanvasItemEditor::update_viewport));
tools_settings->add_child(erase_button);
@@ -2053,10 +2047,11 @@ TileMapEditorTilesPlugin::TileMapEditorTilesPlugin() {
tools_settings->add_child(tools_settings_vsep_2);
// Continuous checkbox.
- bucket_continuous_checkbox = memnew(CheckBox);
- bucket_continuous_checkbox->set_flat(true);
- bucket_continuous_checkbox->set_text(TTR("Contiguous"));
- tools_settings->add_child(bucket_continuous_checkbox);
+ bucket_contiguous_checkbox = memnew(CheckBox);
+ bucket_contiguous_checkbox->set_flat(true);
+ bucket_contiguous_checkbox->set_text(TTR("Contiguous"));
+ bucket_contiguous_checkbox->set_pressed(true);
+ tools_settings->add_child(bucket_contiguous_checkbox);
// Random tile checkbox.
random_tile_checkbox = memnew(CheckBox);
@@ -2210,6 +2205,26 @@ void TileMapEditorTerrainsPlugin::_update_toolbar() {
tools_settings_vsep->show();
picker_button->show();
erase_button->show();
+ tools_settings_vsep_2->hide();
+ bucket_contiguous_checkbox->hide();
+ } else if (tool_buttons_group->get_pressed_button() == line_tool_button) {
+ tools_settings_vsep->show();
+ picker_button->show();
+ erase_button->show();
+ tools_settings_vsep_2->hide();
+ bucket_contiguous_checkbox->hide();
+ } else if (tool_buttons_group->get_pressed_button() == rect_tool_button) {
+ tools_settings_vsep->show();
+ picker_button->show();
+ erase_button->show();
+ tools_settings_vsep_2->hide();
+ bucket_contiguous_checkbox->hide();
+ } else if (tool_buttons_group->get_pressed_button() == bucket_tool_button) {
+ tools_settings_vsep->show();
+ picker_button->show();
+ erase_button->show();
+ tools_settings_vsep_2->show();
+ bucket_contiguous_checkbox->show();
}
}
@@ -2321,23 +2336,224 @@ Map<Vector2i, TileMapCell> TileMapEditorTerrainsPlugin::_draw_terrains(const Map
// Actually paint the tiles.
for (const KeyValue<Vector2i, TileSet::TerrainsPattern> &E_to_paint : p_to_paint) {
- output[E_to_paint.key] = tile_set->get_random_tile_from_pattern(p_terrain_set, E_to_paint.value);
+ output[E_to_paint.key] = tile_set->get_random_tile_from_terrains_pattern(p_terrain_set, E_to_paint.value);
}
// Use the WFC run for the output.
for (const KeyValue<Vector2i, TileSet::TerrainsPattern> &E : wfc_output) {
- output[E.key] = tile_set->get_random_tile_from_pattern(p_terrain_set, E.value);
+ output[E.key] = tile_set->get_random_tile_from_terrains_pattern(p_terrain_set, E.value);
}
return output;
}
+Map<Vector2i, TileMapCell> TileMapEditorTerrainsPlugin::_draw_line(Vector2i p_start_cell, Vector2i p_end_cell, bool p_erase) {
+ TileMap *tile_map = Object::cast_to<TileMap>(ObjectDB::get_instance(tile_map_id));
+ if (!tile_map) {
+ return Map<Vector2i, TileMapCell>();
+ }
+
+ Ref<TileSet> tile_set = tile_map->get_tileset();
+ if (!tile_set.is_valid()) {
+ return Map<Vector2i, TileMapCell>();
+ }
+
+ TileSet::TerrainsPattern terrains_pattern;
+ if (p_erase) {
+ terrains_pattern = TileSet::TerrainsPattern(*tile_set, selected_terrain_set);
+ } else {
+ terrains_pattern = selected_terrains_pattern;
+ }
+
+ Vector<Vector2i> line = TileMapEditor::get_line(tile_map, p_start_cell, p_end_cell);
+ Map<Vector2i, TileSet::TerrainsPattern> to_draw;
+ for (int i = 0; i < line.size(); i++) {
+ to_draw[line[i]] = terrains_pattern;
+ }
+ return _draw_terrains(to_draw, selected_terrain_set);
+}
+
+Map<Vector2i, TileMapCell> TileMapEditorTerrainsPlugin::_draw_rect(Vector2i p_start_cell, Vector2i p_end_cell, bool p_erase) {
+ TileMap *tile_map = Object::cast_to<TileMap>(ObjectDB::get_instance(tile_map_id));
+ if (!tile_map) {
+ return Map<Vector2i, TileMapCell>();
+ }
+
+ Ref<TileSet> tile_set = tile_map->get_tileset();
+ if (!tile_set.is_valid()) {
+ return Map<Vector2i, TileMapCell>();
+ }
+
+ TileSet::TerrainsPattern terrains_pattern;
+ if (p_erase) {
+ terrains_pattern = TileSet::TerrainsPattern(*tile_set, selected_terrain_set);
+ } else {
+ terrains_pattern = selected_terrains_pattern;
+ }
+
+ Rect2i rect;
+ rect.set_position(p_start_cell);
+ rect.set_end(p_end_cell);
+ rect = rect.abs();
+
+ Map<Vector2i, TileSet::TerrainsPattern> to_draw;
+ for (int x = rect.position.x; x <= rect.get_end().x; x++) {
+ for (int y = rect.position.y; y <= rect.get_end().y; y++) {
+ to_draw[Vector2i(x, y)] = terrains_pattern;
+ }
+ }
+ return _draw_terrains(to_draw, selected_terrain_set);
+}
+
+Set<Vector2i> TileMapEditorTerrainsPlugin::_get_cells_for_bucket_fill(Vector2i p_coords, bool p_contiguous) {
+ TileMap *tile_map = Object::cast_to<TileMap>(ObjectDB::get_instance(tile_map_id));
+ if (!tile_map) {
+ return Set<Vector2i>();
+ }
+
+ Ref<TileSet> tile_set = tile_map->get_tileset();
+ if (!tile_set.is_valid()) {
+ return Set<Vector2i>();
+ }
+
+ TileMapCell source_cell = tile_map->get_cell(tile_map_layer, p_coords);
+
+ TileSet::TerrainsPattern source_pattern(*tile_set, selected_terrain_set);
+ if (source_cell.source_id != TileSet::INVALID_SOURCE) {
+ TileData *tile_data = nullptr;
+ Ref<TileSetSource> source = tile_set->get_source(source_cell.source_id);
+ Ref<TileSetAtlasSource> atlas_source = source;
+ if (atlas_source.is_valid()) {
+ tile_data = Object::cast_to<TileData>(atlas_source->get_tile_data(source_cell.get_atlas_coords(), source_cell.alternative_tile));
+ }
+ if (!tile_data) {
+ return Set<Vector2i>();
+ }
+ source_pattern = tile_data->get_terrains_pattern();
+ }
+
+ // If we are filling empty tiles, compute the tilemap boundaries.
+ Rect2i boundaries;
+ if (source_cell.source_id == TileSet::INVALID_SOURCE) {
+ boundaries = tile_map->get_used_rect();
+ }
+
+ Set<Vector2i> output;
+ if (p_contiguous) {
+ // Replace continuous tiles like the source.
+ Set<Vector2i> already_checked;
+ List<Vector2i> to_check;
+ to_check.push_back(p_coords);
+ while (!to_check.is_empty()) {
+ Vector2i coords = to_check.back()->get();
+ to_check.pop_back();
+ if (!already_checked.has(coords)) {
+ // Get the candidate cell pattern.
+ TileSet::TerrainsPattern candidate_pattern(*tile_set, selected_terrain_set);
+ if (tile_map->get_cell_source_id(tile_map_layer, coords) != TileSet::INVALID_SOURCE) {
+ TileData *tile_data = nullptr;
+ Ref<TileSetSource> source = tile_set->get_source(tile_map->get_cell_source_id(tile_map_layer, coords));
+ Ref<TileSetAtlasSource> atlas_source = source;
+ if (atlas_source.is_valid()) {
+ tile_data = Object::cast_to<TileData>(atlas_source->get_tile_data(tile_map->get_cell_atlas_coords(tile_map_layer, coords), tile_map->get_cell_alternative_tile(tile_map_layer, coords)));
+ }
+ if (tile_data) {
+ candidate_pattern = tile_data->get_terrains_pattern();
+ }
+ }
+
+ // Draw.
+ if (candidate_pattern == source_pattern && (!source_pattern.is_erase_pattern() || boundaries.has_point(coords))) {
+ output.insert(coords);
+
+ // Get surrounding tiles (handles different tile shapes).
+ TypedArray<Vector2i> around = tile_map->get_surrounding_tiles(coords);
+ for (int i = 0; i < around.size(); i++) {
+ to_check.push_back(around[i]);
+ }
+ }
+ already_checked.insert(coords);
+ }
+ }
+ } else {
+ // Replace all tiles like the source.
+ TypedArray<Vector2i> to_check;
+ if (source_cell.source_id == TileSet::INVALID_SOURCE) {
+ Rect2i rect = tile_map->get_used_rect();
+ if (rect.has_no_area()) {
+ rect = Rect2i(p_coords, Vector2i(1, 1));
+ }
+ for (int x = boundaries.position.x; x < boundaries.get_end().x; x++) {
+ for (int y = boundaries.position.y; y < boundaries.get_end().y; y++) {
+ to_check.append(Vector2i(x, y));
+ }
+ }
+ } else {
+ to_check = tile_map->get_used_cells(tile_map_layer);
+ }
+ for (int i = 0; i < to_check.size(); i++) {
+ Vector2i coords = to_check[i];
+ // Get the candidate cell pattern.
+ TileSet::TerrainsPattern candidate_pattern;
+ if (tile_map->get_cell_source_id(tile_map_layer, coords) != TileSet::INVALID_SOURCE) {
+ TileData *tile_data = nullptr;
+ Ref<TileSetSource> source = tile_set->get_source(tile_map->get_cell_source_id(tile_map_layer, coords));
+ Ref<TileSetAtlasSource> atlas_source = source;
+ if (atlas_source.is_valid()) {
+ tile_data = Object::cast_to<TileData>(atlas_source->get_tile_data(tile_map->get_cell_atlas_coords(tile_map_layer, coords), tile_map->get_cell_alternative_tile(tile_map_layer, coords)));
+ }
+ if (tile_data) {
+ candidate_pattern = tile_data->get_terrains_pattern();
+ }
+ }
+
+ // Draw.
+ if (candidate_pattern == source_pattern && (!source_pattern.is_erase_pattern() || boundaries.has_point(coords))) {
+ output.insert(coords);
+ }
+ }
+ }
+ return output;
+}
+
+Map<Vector2i, TileMapCell> TileMapEditorTerrainsPlugin::_draw_bucket_fill(Vector2i p_coords, bool p_contiguous, bool p_erase) {
+ TileMap *tile_map = Object::cast_to<TileMap>(ObjectDB::get_instance(tile_map_id));
+ if (!tile_map) {
+ return Map<Vector2i, TileMapCell>();
+ }
+
+ Ref<TileSet> tile_set = tile_map->get_tileset();
+ if (!tile_set.is_valid()) {
+ return Map<Vector2i, TileMapCell>();
+ }
+
+ TileSet::TerrainsPattern terrains_pattern;
+ if (p_erase) {
+ terrains_pattern = TileSet::TerrainsPattern(*tile_set, selected_terrain_set);
+ } else {
+ terrains_pattern = selected_terrains_pattern;
+ }
+
+ Set<Vector2i> cells_to_draw = _get_cells_for_bucket_fill(p_coords, p_contiguous);
+ Map<Vector2i, TileSet::TerrainsPattern> to_draw;
+ for (const Vector2i &coords : cells_to_draw) {
+ to_draw[coords] = terrains_pattern;
+ }
+
+ return _draw_terrains(to_draw, selected_terrain_set);
+}
+
void TileMapEditorTerrainsPlugin::_stop_dragging() {
TileMap *tile_map = Object::cast_to<TileMap>(ObjectDB::get_instance(tile_map_id));
if (!tile_map) {
return;
}
+ Ref<TileSet> tile_set = tile_map->get_tileset();
+ if (!tile_set.is_valid()) {
+ return;
+ }
+
Transform2D xform = CanvasItemEditor::get_singleton()->get_canvas_transform() * tile_map->get_global_transform();
Vector2 mpos = xform.affine_inverse().xform(CanvasItemEditor::get_singleton()->get_viewport_control()->get_local_mouse_position());
@@ -2345,12 +2561,6 @@ void TileMapEditorTerrainsPlugin::_stop_dragging() {
case DRAG_TYPE_PICK: {
Vector2i coords = tile_map->world_to_map(mpos);
TileMapCell cell = tile_map->get_cell(tile_map_layer, coords);
-
- Ref<TileSet> tile_set = tile_map->get_tileset();
- if (!tile_set.is_valid()) {
- return;
- }
-
TileData *tile_data = nullptr;
Ref<TileSetSource> source = tile_set->get_source(cell.source_id);
@@ -2360,17 +2570,19 @@ void TileMapEditorTerrainsPlugin::_stop_dragging() {
}
if (tile_data) {
- Array terrains_pattern = tile_data->get_terrains_pattern();
+ TileSet::TerrainsPattern terrains_pattern = tile_data->get_terrains_pattern();
// Find the tree item for the right terrain set.
bool need_tree_item_switch = true;
TreeItem *tree_item = terrains_tree->get_selected();
+ int new_terrain_set = -1;
if (tree_item) {
Dictionary metadata_dict = tree_item->get_metadata(0);
if (metadata_dict.has("terrain_set") && metadata_dict.has("terrain_id")) {
int terrain_set = metadata_dict["terrain_set"];
int terrain_id = metadata_dict["terrain_id"];
if (per_terrain_terrains_patterns[terrain_set][terrain_id].has(terrains_pattern)) {
+ new_terrain_set = terrain_set;
need_tree_item_switch = false;
}
}
@@ -2384,6 +2596,7 @@ void TileMapEditorTerrainsPlugin::_stop_dragging() {
int terrain_id = metadata_dict["terrain_id"];
if (per_terrain_terrains_patterns[terrain_set][terrain_id].has(terrains_pattern)) {
// Found
+ new_terrain_set = terrain_set;
tree_item->select(0);
_update_tiles_list();
break;
@@ -2396,15 +2609,9 @@ void TileMapEditorTerrainsPlugin::_stop_dragging() {
if (tree_item) {
for (int i = 0; i < terrains_tile_list->get_item_count(); i++) {
Dictionary metadata_dict = terrains_tile_list->get_item_metadata(i);
- TileSet::TerrainsPattern in_meta_terrains_pattern = metadata_dict["terrains_pattern"];
- bool equals = true;
- for (int j = 0; j < terrains_pattern.size(); j++) {
- if (terrains_pattern[j] != in_meta_terrains_pattern[j]) {
- equals = false;
- break;
- }
- }
- if (equals) {
+ TileSet::TerrainsPattern in_meta_terrains_pattern(*tile_set, new_terrain_set);
+ in_meta_terrains_pattern.set_terrains_from_array(metadata_dict["terrains_pattern"]);
+ if (in_meta_terrains_pattern == terrains_pattern) {
terrains_tile_list->select(i);
break;
}
@@ -2423,12 +2630,82 @@ void TileMapEditorTerrainsPlugin::_stop_dragging() {
}
undo_redo->commit_action(false);
} break;
+ case DRAG_TYPE_LINE: {
+ Map<Vector2i, TileMapCell> to_draw = _draw_line(tile_map->world_to_map(drag_start_mouse_pos), tile_map->world_to_map(mpos), drag_erasing);
+ undo_redo->create_action(TTR("Paint terrain"));
+ for (const KeyValue<Vector2i, TileMapCell> &E : to_draw) {
+ if (!drag_erasing && E.value.source_id == TileSet::INVALID_SOURCE) {
+ continue;
+ }
+ undo_redo->add_do_method(tile_map, "set_cell", tile_map_layer, E.key, E.value.source_id, E.value.get_atlas_coords(), E.value.alternative_tile);
+ undo_redo->add_undo_method(tile_map, "set_cell", tile_map_layer, E.key, tile_map->get_cell_source_id(tile_map_layer, E.key), tile_map->get_cell_atlas_coords(tile_map_layer, E.key), tile_map->get_cell_alternative_tile(tile_map_layer, E.key));
+ }
+ undo_redo->commit_action();
+ } break;
+ case DRAG_TYPE_RECT: {
+ Map<Vector2i, TileMapCell> to_draw = _draw_rect(tile_map->world_to_map(drag_start_mouse_pos), tile_map->world_to_map(mpos), drag_erasing);
+ undo_redo->create_action(TTR("Paint terrain"));
+ for (const KeyValue<Vector2i, TileMapCell> &E : to_draw) {
+ if (!drag_erasing && E.value.source_id == TileSet::INVALID_SOURCE) {
+ continue;
+ }
+ undo_redo->add_do_method(tile_map, "set_cell", tile_map_layer, E.key, E.value.source_id, E.value.get_atlas_coords(), E.value.alternative_tile);
+ undo_redo->add_undo_method(tile_map, "set_cell", tile_map_layer, E.key, tile_map->get_cell_source_id(tile_map_layer, E.key), tile_map->get_cell_atlas_coords(tile_map_layer, E.key), tile_map->get_cell_alternative_tile(tile_map_layer, E.key));
+ }
+ undo_redo->commit_action();
+ } break;
+ case DRAG_TYPE_BUCKET: {
+ undo_redo->create_action(TTR("Paint terrain"));
+ for (const KeyValue<Vector2i, TileMapCell> &E : drag_modified) {
+ undo_redo->add_do_method(tile_map, "set_cell", tile_map_layer, E.key, tile_map->get_cell_source_id(tile_map_layer, E.key), tile_map->get_cell_atlas_coords(tile_map_layer, E.key), tile_map->get_cell_alternative_tile(tile_map_layer, E.key));
+ undo_redo->add_undo_method(tile_map, "set_cell", tile_map_layer, E.key, E.value.source_id, E.value.get_atlas_coords(), E.value.alternative_tile);
+ }
+ undo_redo->commit_action(false);
+ } break;
+
default:
break;
}
drag_type = DRAG_TYPE_NONE;
}
+void TileMapEditorTerrainsPlugin::_mouse_exited_viewport() {
+ has_mouse = false;
+ CanvasItemEditor::get_singleton()->update_viewport();
+}
+
+void TileMapEditorTerrainsPlugin::_update_selection() {
+ TileMap *tile_map = Object::cast_to<TileMap>(ObjectDB::get_instance(tile_map_id));
+ if (!tile_map) {
+ return;
+ }
+
+ Ref<TileSet> tile_set = tile_map->get_tileset();
+ if (!tile_set.is_valid()) {
+ return;
+ }
+
+ // Get the selected terrain.
+ selected_terrains_pattern = TileSet::TerrainsPattern();
+ selected_terrain_set = -1;
+
+ TreeItem *selected_tree_item = terrains_tree->get_selected();
+ if (selected_tree_item && selected_tree_item->get_metadata(0)) {
+ Dictionary metadata_dict = selected_tree_item->get_metadata(0);
+ // Selected terrain
+ selected_terrain_set = metadata_dict["terrain_set"];
+
+ // Selected tile
+ if (erase_button->is_pressed()) {
+ selected_terrains_pattern = TileSet::TerrainsPattern(*tile_set, selected_terrain_set);
+ } else if (terrains_tile_list->is_anything_selected()) {
+ metadata_dict = terrains_tile_list->get_item_metadata(terrains_tile_list->get_selected_items()[0]);
+ selected_terrains_pattern = TileSet::TerrainsPattern(*tile_set, selected_terrain_set);
+ selected_terrains_pattern.set_terrains_from_array(metadata_dict["terrains_pattern"]);
+ }
+ }
+}
+
bool TileMapEditorTerrainsPlugin::forward_canvas_gui_input(const Ref<InputEvent> &p_event) {
if (!main_vbox_container->is_visible_in_tree()) {
// If the bottom editor is not visible, we ignore inputs.
@@ -2454,46 +2731,19 @@ bool TileMapEditorTerrainsPlugin::forward_canvas_gui_input(const Ref<InputEvent>
}
ERR_FAIL_COND_V(tile_map_layer >= tile_map->get_layers_count(), false);
- // Get the selected terrain.
- TileSet::TerrainsPattern selected_terrains_pattern;
- int selected_terrain_set = -1;
-
- TreeItem *selected_tree_item = terrains_tree->get_selected();
- if (selected_tree_item && selected_tree_item->get_metadata(0)) {
- Dictionary metadata_dict = selected_tree_item->get_metadata(0);
- // Selected terrain
- selected_terrain_set = metadata_dict["terrain_set"];
-
- // Selected tile
- if (erase_button->is_pressed()) {
- selected_terrains_pattern.clear();
- for (uint32_t i = 0; i < TileSet::CELL_NEIGHBOR_MAX; i++) {
- TileSet::CellNeighbor side = TileSet::CellNeighbor(i);
- if (tile_set->is_valid_peering_bit_terrain(selected_terrain_set, side)) {
- selected_terrains_pattern.push_back(-1);
- }
- }
- } else if (terrains_tile_list->is_anything_selected()) {
- metadata_dict = terrains_tile_list->get_item_metadata(terrains_tile_list->get_selected_items()[0]);
- selected_terrains_pattern = metadata_dict["terrains_pattern"];
- }
- }
+ _update_selection();
Ref<InputEventMouseMotion> mm = p_event;
if (mm.is_valid()) {
+ has_mouse = true;
Transform2D xform = CanvasItemEditor::get_singleton()->get_canvas_transform() * tile_map->get_global_transform();
Vector2 mpos = xform.affine_inverse().xform(mm->get_position());
switch (drag_type) {
case DRAG_TYPE_PAINT: {
if (selected_terrain_set >= 0) {
- Vector<Vector2i> line = TileMapEditor::get_line(tile_map, tile_map->world_to_map(drag_last_mouse_pos), tile_map->world_to_map(mpos));
- Map<Vector2i, TileSet::TerrainsPattern> to_draw;
- for (int i = 0; i < line.size(); i++) {
- to_draw[line[i]] = selected_terrains_pattern;
- }
- Map<Vector2i, TileMapCell> modified = _draw_terrains(to_draw, selected_terrain_set);
- for (const KeyValue<Vector2i, TileMapCell> &E : modified) {
+ Map<Vector2i, TileMapCell> to_draw = _draw_line(tile_map->world_to_map(drag_last_mouse_pos), tile_map->world_to_map(mpos), drag_erasing);
+ for (const KeyValue<Vector2i, TileMapCell> &E : to_draw) {
if (!drag_modified.has(E.key)) {
drag_modified[E.key] = tile_map->get_cell(tile_map_layer, E.key);
}
@@ -2512,35 +2762,79 @@ bool TileMapEditorTerrainsPlugin::forward_canvas_gui_input(const Ref<InputEvent>
Ref<InputEventMouseButton> mb = p_event;
if (mb.is_valid()) {
+ has_mouse = true;
Transform2D xform = CanvasItemEditor::get_singleton()->get_canvas_transform() * tile_map->get_global_transform();
Vector2 mpos = xform.affine_inverse().xform(mb->get_position());
- if (mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (mb->get_button_index() == MouseButton::LEFT || mb->get_button_index() == MouseButton::RIGHT) {
if (mb->is_pressed()) {
// Pressed
+ if (erase_button->is_pressed() || mb->get_button_index() == MouseButton::RIGHT) {
+ drag_erasing = true;
+ }
+
if (picker_button->is_pressed()) {
drag_type = DRAG_TYPE_PICK;
} else {
// Paint otherwise.
- if (selected_terrain_set >= 0 && !selected_terrains_pattern.is_empty() && tool_buttons_group->get_pressed_button() == paint_tool_button) {
+ if (tool_buttons_group->get_pressed_button() == paint_tool_button && !Input::get_singleton()->is_key_pressed(Key::CTRL) && !Input::get_singleton()->is_key_pressed(Key::SHIFT)) {
+ if (selected_terrain_set < 0 || !selected_terrains_pattern.is_valid()) {
+ return true;
+ }
+
drag_type = DRAG_TYPE_PAINT;
drag_start_mouse_pos = mpos;
drag_modified.clear();
-
- Map<Vector2i, TileSet::TerrainsPattern> terrains_to_draw;
- terrains_to_draw[tile_map->world_to_map(mpos)] = selected_terrains_pattern;
-
- Map<Vector2i, TileMapCell> to_draw = _draw_terrains(terrains_to_draw, selected_terrain_set);
+ Vector2i cell = tile_map->world_to_map(mpos);
+ Map<Vector2i, TileMapCell> to_draw = _draw_line(cell, cell, drag_erasing);
for (const KeyValue<Vector2i, TileMapCell> &E : to_draw) {
drag_modified[E.key] = tile_map->get_cell(tile_map_layer, E.key);
tile_map->set_cell(tile_map_layer, E.key, E.value.source_id, E.value.get_atlas_coords(), E.value.alternative_tile);
}
+ } else if (tool_buttons_group->get_pressed_button() == line_tool_button || (tool_buttons_group->get_pressed_button() == paint_tool_button && Input::get_singleton()->is_key_pressed(Key::SHIFT) && !Input::get_singleton()->is_key_pressed(Key::CTRL))) {
+ if (selected_terrain_set < 0 || !selected_terrains_pattern.is_valid()) {
+ return true;
+ }
+ drag_type = DRAG_TYPE_LINE;
+ drag_start_mouse_pos = mpos;
+ drag_modified.clear();
+ } else if (tool_buttons_group->get_pressed_button() == rect_tool_button || (tool_buttons_group->get_pressed_button() == paint_tool_button && Input::get_singleton()->is_key_pressed(Key::SHIFT) && Input::get_singleton()->is_key_pressed(Key::CTRL))) {
+ if (selected_terrain_set < 0 || !selected_terrains_pattern.is_valid()) {
+ return true;
+ }
+ drag_type = DRAG_TYPE_RECT;
+ drag_start_mouse_pos = mpos;
+ drag_modified.clear();
+ } else if (tool_buttons_group->get_pressed_button() == bucket_tool_button) {
+ if (selected_terrain_set < 0 || !selected_terrains_pattern.is_valid()) {
+ return true;
+ }
+ drag_type = DRAG_TYPE_BUCKET;
+ drag_start_mouse_pos = mpos;
+ drag_modified.clear();
+ Vector<Vector2i> line = TileMapEditor::get_line(tile_map, tile_map->world_to_map(drag_last_mouse_pos), tile_map->world_to_map(mpos));
+ for (int i = 0; i < line.size(); i++) {
+ if (!drag_modified.has(line[i])) {
+ Map<Vector2i, TileMapCell> to_draw = _draw_bucket_fill(line[i], bucket_contiguous_checkbox->is_pressed(), drag_erasing);
+ for (const KeyValue<Vector2i, TileMapCell> &E : to_draw) {
+ if (!drag_erasing && E.value.source_id == TileSet::INVALID_SOURCE) {
+ continue;
+ }
+ Vector2i coords = E.key;
+ if (!drag_modified.has(coords)) {
+ drag_modified.insert(coords, tile_map->get_cell(tile_map_layer, coords));
+ }
+ tile_map->set_cell(tile_map_layer, coords, E.value.source_id, E.value.get_atlas_coords(), E.value.alternative_tile);
+ }
+ }
+ }
}
}
} else {
// Released
_stop_dragging();
+ drag_erasing = false;
}
CanvasItemEditor::get_singleton()->update_viewport();
@@ -2553,6 +2847,135 @@ bool TileMapEditorTerrainsPlugin::forward_canvas_gui_input(const Ref<InputEvent>
return false;
}
+void TileMapEditorTerrainsPlugin::forward_canvas_draw_over_viewport(Control *p_overlay) {
+ TileMap *tile_map = Object::cast_to<TileMap>(ObjectDB::get_instance(tile_map_id));
+ if (!tile_map) {
+ return;
+ }
+
+ if (tile_map_layer < 0) {
+ return;
+ }
+ ERR_FAIL_INDEX(tile_map_layer, tile_map->get_layers_count());
+
+ Ref<TileSet> tile_set = tile_map->get_tileset();
+ if (!tile_set.is_valid()) {
+ return;
+ }
+
+ if (!tile_map->is_visible_in_tree()) {
+ return;
+ }
+
+ Transform2D xform = CanvasItemEditor::get_singleton()->get_canvas_transform() * tile_map->get_global_transform();
+ Vector2i tile_shape_size = tile_set->get_tile_size();
+
+ // Handle the preview of the tiles to be placed.
+ if (main_vbox_container->is_visible_in_tree() && has_mouse) { // Only if the tilemap editor is opened and the viewport is hovered.
+ Set<Vector2i> preview;
+ Rect2i drawn_grid_rect;
+
+ if (drag_type == DRAG_TYPE_PICK) {
+ // Draw the area being picked.
+ Vector2i coords = tile_map->world_to_map(drag_last_mouse_pos);
+ if (tile_map->get_cell_source_id(tile_map_layer, coords) != TileSet::INVALID_SOURCE) {
+ Transform2D tile_xform;
+ tile_xform.set_origin(tile_map->map_to_world(coords));
+ tile_xform.set_scale(tile_shape_size);
+ tile_set->draw_tile_shape(p_overlay, xform * tile_xform, Color(1.0, 1.0, 1.0), false);
+ }
+ } else if (!picker_button->is_pressed() && !(drag_type == DRAG_TYPE_NONE && Input::get_singleton()->is_key_pressed(Key::CTRL) && !Input::get_singleton()->is_key_pressed(Key::SHIFT))) {
+ bool expand_grid = false;
+ if (tool_buttons_group->get_pressed_button() == paint_tool_button && drag_type == DRAG_TYPE_NONE) {
+ // Preview for a single tile.
+ preview.insert(tile_map->world_to_map(drag_last_mouse_pos));
+ expand_grid = true;
+ } else if (tool_buttons_group->get_pressed_button() == line_tool_button || drag_type == DRAG_TYPE_LINE) {
+ if (drag_type == DRAG_TYPE_NONE) {
+ // Preview for a single tile.
+ preview.insert(tile_map->world_to_map(drag_last_mouse_pos));
+ } else if (drag_type == DRAG_TYPE_LINE) {
+ // Preview for a line.
+ Vector<Vector2i> line = TileMapEditor::get_line(tile_map, tile_map->world_to_map(drag_start_mouse_pos), tile_map->world_to_map(drag_last_mouse_pos));
+ for (int i = 0; i < line.size(); i++) {
+ preview.insert(line[i]);
+ }
+ expand_grid = true;
+ }
+ } else if (drag_type == DRAG_TYPE_RECT) {
+ // Preview for a rect.
+ Rect2i rect;
+ rect.set_position(tile_map->world_to_map(drag_start_mouse_pos));
+ rect.set_end(tile_map->world_to_map(drag_last_mouse_pos));
+ rect = rect.abs();
+
+ Map<Vector2i, TileSet::TerrainsPattern> to_draw;
+ for (int x = rect.position.x; x <= rect.get_end().x; x++) {
+ for (int y = rect.position.y; y <= rect.get_end().y; y++) {
+ preview.insert(Vector2i(x, y));
+ }
+ }
+ expand_grid = true;
+ } else if (tool_buttons_group->get_pressed_button() == bucket_tool_button && drag_type == DRAG_TYPE_NONE) {
+ // Preview for a fill.
+ preview = _get_cells_for_bucket_fill(tile_map->world_to_map(drag_last_mouse_pos), bucket_contiguous_checkbox->is_pressed());
+ }
+
+ // Expand the grid if needed
+ if (expand_grid && !preview.is_empty()) {
+ drawn_grid_rect = Rect2i(preview.front()->get(), Vector2i(1, 1));
+ for (const Vector2i &E : preview) {
+ drawn_grid_rect.expand_to(E);
+ }
+ }
+ }
+
+ if (!preview.is_empty()) {
+ const int fading = 5;
+
+ // Draw the lines of the grid behind the preview.
+ bool display_grid = EditorSettings::get_singleton()->get("editors/tiles_editor/display_grid");
+ if (display_grid) {
+ Color grid_color = EditorSettings::get_singleton()->get("editors/tiles_editor/grid_color");
+ if (drawn_grid_rect.size.x > 0 && drawn_grid_rect.size.y > 0) {
+ drawn_grid_rect = drawn_grid_rect.grow(fading);
+ for (int x = drawn_grid_rect.position.x; x < (drawn_grid_rect.position.x + drawn_grid_rect.size.x); x++) {
+ for (int y = drawn_grid_rect.position.y; y < (drawn_grid_rect.position.y + drawn_grid_rect.size.y); y++) {
+ Vector2i pos_in_rect = Vector2i(x, y) - drawn_grid_rect.position;
+
+ // Fade out the border of the grid.
+ float left_opacity = CLAMP(Math::inverse_lerp(0.0f, (float)fading, (float)pos_in_rect.x), 0.0f, 1.0f);
+ float right_opacity = CLAMP(Math::inverse_lerp((float)drawn_grid_rect.size.x, (float)(drawn_grid_rect.size.x - fading), (float)pos_in_rect.x), 0.0f, 1.0f);
+ float top_opacity = CLAMP(Math::inverse_lerp(0.0f, (float)fading, (float)pos_in_rect.y), 0.0f, 1.0f);
+ float bottom_opacity = CLAMP(Math::inverse_lerp((float)drawn_grid_rect.size.y, (float)(drawn_grid_rect.size.y - fading), (float)pos_in_rect.y), 0.0f, 1.0f);
+ float opacity = CLAMP(MIN(left_opacity, MIN(right_opacity, MIN(top_opacity, bottom_opacity))) + 0.1, 0.0f, 1.0f);
+
+ Transform2D tile_xform;
+ tile_xform.set_origin(tile_map->map_to_world(Vector2(x, y)));
+ tile_xform.set_scale(tile_shape_size);
+ Color color = grid_color;
+ color.a = color.a * opacity;
+ tile_set->draw_tile_shape(p_overlay, xform * tile_xform, color, false);
+ }
+ }
+ }
+ }
+
+ // Draw the preview.
+ for (const Vector2i &E : preview) {
+ Transform2D tile_xform;
+ tile_xform.set_origin(tile_map->map_to_world(E));
+ tile_xform.set_scale(tile_set->get_tile_size());
+ if (drag_erasing || erase_button->is_pressed()) {
+ tile_set->draw_tile_shape(p_overlay, xform * tile_xform, Color(0.0, 0.0, 0.0, 0.5), true);
+ } else {
+ tile_set->draw_tile_shape(p_overlay, xform * tile_xform, Color(1.0, 1.0, 1.0, 0.5), true);
+ }
+ }
+ }
+ }
+}
+
void TileMapEditorTerrainsPlugin::_update_terrains_cache() {
TileMap *tile_map = Object::cast_to<TileMap>(ObjectDB::get_instance(tile_map_id));
if (!tile_map) {
@@ -2595,12 +3018,14 @@ void TileMapEditorTerrainsPlugin::_update_terrains_cache() {
cell.alternative_tile = alternative_id;
TileSet::TerrainsPattern terrains_pattern = tile_data->get_terrains_pattern();
-
// Terrain bits.
- for (int i = 0; i < terrains_pattern.size(); i++) {
- int terrain = terrains_pattern[i];
- if (terrain >= 0 && terrain < (int)per_terrain_terrains_patterns[terrain_set].size()) {
- per_terrain_terrains_patterns[terrain_set][terrain].insert(terrains_pattern);
+ for (int i = 0; i < TileSet::CELL_NEIGHBOR_MAX; i++) {
+ TileSet::CellNeighbor bit = TileSet::CellNeighbor(i);
+ if (tile_set->is_valid_peering_bit_terrain(terrain_set, bit)) {
+ int terrain = terrains_pattern.get_terrain(bit);
+ if (terrain >= 0 && terrain < (int)per_terrain_terrains_patterns[terrain_set].size()) {
+ per_terrain_terrains_patterns[terrain_set][terrain].insert(terrains_pattern);
+ }
}
}
}
@@ -2686,8 +3111,9 @@ void TileMapEditorTerrainsPlugin::_update_tiles_list() {
// Count the number of matching sides/terrains.
int count = 0;
- for (int i = 0; i < E->get().size(); i++) {
- if (int(E->get()[i]) == selected_terrain_id) {
+ for (int i = 0; i < TileSet::CELL_NEIGHBOR_MAX; i++) {
+ TileSet::CellNeighbor bit = TileSet::CellNeighbor(i);
+ if (tile_set->is_valid_peering_bit_terrain(selected_terrain_set, bit) && E->get().get_terrain(bit) == selected_terrain_id) {
count++;
}
}
@@ -2733,7 +3159,7 @@ void TileMapEditorTerrainsPlugin::_update_tiles_list() {
terrains_tile_list->set_item_icon_region(item_index, region);
terrains_tile_list->set_item_icon_transposed(item_index, transpose);
Dictionary list_metadata_dict;
- list_metadata_dict["terrains_pattern"] = terrains_pattern;
+ list_metadata_dict["terrains_pattern"] = terrains_pattern.get_terrains_as_array();
terrains_tile_list->set_item_metadata(item_index, list_metadata_dict);
}
}
@@ -2745,6 +3171,10 @@ void TileMapEditorTerrainsPlugin::_update_tiles_list() {
void TileMapEditorTerrainsPlugin::_update_theme() {
paint_tool_button->set_icon(main_vbox_container->get_theme_icon(SNAME("Edit"), SNAME("EditorIcons")));
+ line_tool_button->set_icon(main_vbox_container->get_theme_icon(SNAME("CurveLinear"), SNAME("EditorIcons")));
+ rect_tool_button->set_icon(main_vbox_container->get_theme_icon(SNAME("Rectangle"), SNAME("EditorIcons")));
+ bucket_tool_button->set_icon(main_vbox_container->get_theme_icon(SNAME("Bucket"), SNAME("EditorIcons")));
+
picker_button->set_icon(main_vbox_container->get_theme_icon(SNAME("ColorPick"), SNAME("EditorIcons")));
erase_button->set_icon(main_vbox_container->get_theme_icon(SNAME("Eraser"), SNAME("EditorIcons")));
}
@@ -2800,10 +3230,34 @@ TileMapEditorTerrainsPlugin::TileMapEditorTerrainsPlugin() {
paint_tool_button->set_toggle_mode(true);
paint_tool_button->set_button_group(tool_buttons_group);
paint_tool_button->set_pressed(true);
- paint_tool_button->set_shortcut(ED_SHORTCUT("tiles_editor/paint_tool", "Paint", KEY_D));
+ paint_tool_button->set_shortcut(ED_SHORTCUT("tiles_editor/paint_tool", "Paint", Key::D));
paint_tool_button->connect("pressed", callable_mp(this, &TileMapEditorTerrainsPlugin::_update_toolbar));
tilemap_tiles_tools_buttons->add_child(paint_tool_button);
+ line_tool_button = memnew(Button);
+ line_tool_button->set_flat(true);
+ line_tool_button->set_toggle_mode(true);
+ line_tool_button->set_button_group(tool_buttons_group);
+ line_tool_button->set_shortcut(ED_SHORTCUT("tiles_editor/line_tool", "Line", Key::L));
+ line_tool_button->connect("pressed", callable_mp(this, &TileMapEditorTerrainsPlugin::_update_toolbar));
+ tilemap_tiles_tools_buttons->add_child(line_tool_button);
+
+ rect_tool_button = memnew(Button);
+ rect_tool_button->set_flat(true);
+ rect_tool_button->set_toggle_mode(true);
+ rect_tool_button->set_button_group(tool_buttons_group);
+ rect_tool_button->set_shortcut(ED_SHORTCUT("tiles_editor/rect_tool", "Rect", Key::R));
+ rect_tool_button->connect("pressed", callable_mp(this, &TileMapEditorTerrainsPlugin::_update_toolbar));
+ tilemap_tiles_tools_buttons->add_child(rect_tool_button);
+
+ bucket_tool_button = memnew(Button);
+ bucket_tool_button->set_flat(true);
+ bucket_tool_button->set_toggle_mode(true);
+ bucket_tool_button->set_button_group(tool_buttons_group);
+ bucket_tool_button->set_shortcut(ED_SHORTCUT("tiles_editor/bucket_tool", "Bucket", Key::B));
+ bucket_tool_button->connect("pressed", callable_mp(this, &TileMapEditorTerrainsPlugin::_update_toolbar));
+ tilemap_tiles_tools_buttons->add_child(bucket_tool_button);
+
toolbar->add_child(tilemap_tiles_tools_buttons);
// -- TileMap tool settings --
@@ -2817,7 +3271,7 @@ TileMapEditorTerrainsPlugin::TileMapEditorTerrainsPlugin() {
picker_button = memnew(Button);
picker_button->set_flat(true);
picker_button->set_toggle_mode(true);
- picker_button->set_shortcut(ED_SHORTCUT("tiles_editor/picker", "Picker", KEY_P));
+ picker_button->set_shortcut(ED_SHORTCUT("tiles_editor/picker", "Picker", Key::P));
picker_button->connect("pressed", callable_mp(CanvasItemEditor::get_singleton(), &CanvasItemEditor::update_viewport));
tools_settings->add_child(picker_button);
@@ -2825,9 +3279,20 @@ TileMapEditorTerrainsPlugin::TileMapEditorTerrainsPlugin() {
erase_button = memnew(Button);
erase_button->set_flat(true);
erase_button->set_toggle_mode(true);
- erase_button->set_shortcut(ED_SHORTCUT("tiles_editor/eraser", "Eraser", KEY_E));
+ erase_button->set_shortcut(ED_SHORTCUT("tiles_editor/eraser", "Eraser", Key::E));
erase_button->connect("pressed", callable_mp(CanvasItemEditor::get_singleton(), &CanvasItemEditor::update_viewport));
tools_settings->add_child(erase_button);
+
+ // Separator 2.
+ tools_settings_vsep_2 = memnew(VSeparator);
+ tools_settings->add_child(tools_settings_vsep_2);
+
+ // Continuous checkbox.
+ bucket_contiguous_checkbox = memnew(CheckBox);
+ bucket_contiguous_checkbox->set_flat(true);
+ bucket_contiguous_checkbox->set_text(TTR("Contiguous"));
+ bucket_contiguous_checkbox->set_pressed(true);
+ tools_settings->add_child(bucket_contiguous_checkbox);
}
TileMapEditorTerrainsPlugin::~TileMapEditorTerrainsPlugin() {
@@ -3432,8 +3897,8 @@ TileMapEditor::TileMapEditor() {
set_process_internal(true);
// Shortcuts.
- ED_SHORTCUT("tiles_editor/select_next_layer", TTR("Select Next Tile Map Layer"), KEY_PAGEUP);
- ED_SHORTCUT("tiles_editor/select_previous_layer", TTR("Select Previous Tile Map Layer"), KEY_PAGEDOWN);
+ ED_SHORTCUT("tiles_editor/select_next_layer", TTR("Select Next Tile Map Layer"), Key::PAGEUP);
+ ED_SHORTCUT("tiles_editor/select_previous_layer", TTR("Select Previous Tile Map Layer"), Key::PAGEDOWN);
// TileMap editor plugins
tile_map_editor_plugins.push_back(memnew(TileMapEditorTilesPlugin));
diff --git a/editor/plugins/tiles/tile_map_editor.h b/editor/plugins/tiles/tile_map_editor.h
index 0513a7b365..f462119727 100644
--- a/editor/plugins/tiles/tile_map_editor.h
+++ b/editor/plugins/tiles/tile_map_editor.h
@@ -75,14 +75,15 @@ private:
Button *line_tool_button;
Button *rect_tool_button;
Button *bucket_tool_button;
- Button *picker_button;
HBoxContainer *tools_settings;
+
VSeparator *tools_settings_vsep;
+ Button *picker_button;
Button *erase_button;
- CheckBox *bucket_continuous_checkbox;
VSeparator *tools_settings_vsep_2;
+ CheckBox *bucket_contiguous_checkbox;
CheckBox *random_tile_checkbox;
float scattering = 0.0;
Label *scatter_label;
@@ -108,17 +109,16 @@ private:
DRAG_TYPE_CLIPBOARD_PASTE,
};
DragType drag_type = DRAG_TYPE_NONE;
+ bool drag_erasing = false;
Vector2 drag_start_mouse_pos;
Vector2 drag_last_mouse_pos;
Map<Vector2i, TileMapCell> drag_modified;
- bool rmb_erasing = false;
TileMapCell _pick_random_tile(Ref<TileMapPattern> p_pattern);
- Map<Vector2i, TileMapCell> _draw_line(Vector2 p_start_drag_mouse_pos, Vector2 p_from_mouse_pos, Vector2 p_to_mouse_pos);
- Map<Vector2i, TileMapCell> _draw_rect(Vector2i p_start_cell, Vector2i p_end_cell);
- Map<Vector2i, TileMapCell> _draw_bucket_fill(Vector2i p_coords, bool p_contiguous);
+ Map<Vector2i, TileMapCell> _draw_line(Vector2 p_start_drag_mouse_pos, Vector2 p_from_mouse_pos, Vector2 p_to_mouse_pos, bool p_erase);
+ Map<Vector2i, TileMapCell> _draw_rect(Vector2i p_start_cell, Vector2i p_end_cell, bool p_erase);
+ Map<Vector2i, TileMapCell> _draw_bucket_fill(Vector2i p_coords, bool p_contiguous, bool p_erase);
void _stop_dragging();
- bool _is_erasing() const;
///// Selection system. /////
Set<Vector2i> tile_map_selection;
@@ -220,32 +220,53 @@ private:
Ref<ButtonGroup> tool_buttons_group;
Button *paint_tool_button;
+ Button *line_tool_button;
+ Button *rect_tool_button;
+ Button *bucket_tool_button;
HBoxContainer *tools_settings;
+
VSeparator *tools_settings_vsep;
Button *picker_button;
Button *erase_button;
+ VSeparator *tools_settings_vsep_2;
+ CheckBox *bucket_contiguous_checkbox;
void _update_toolbar();
// Main vbox.
VBoxContainer *main_vbox_container;
// TileMap editing.
+ bool has_mouse = false;
+ void _mouse_exited_viewport();
+
enum DragType {
DRAG_TYPE_NONE = 0,
DRAG_TYPE_PAINT,
+ DRAG_TYPE_LINE,
+ DRAG_TYPE_RECT,
+ DRAG_TYPE_BUCKET,
DRAG_TYPE_PICK,
};
DragType drag_type = DRAG_TYPE_NONE;
+ bool drag_erasing = false;
Vector2 drag_start_mouse_pos;
Vector2 drag_last_mouse_pos;
Map<Vector2i, TileMapCell> drag_modified;
// Painting
Map<Vector2i, TileMapCell> _draw_terrains(const Map<Vector2i, TileSet::TerrainsPattern> &p_to_paint, int p_terrain_set) const;
+ Map<Vector2i, TileMapCell> _draw_line(Vector2i p_start_cell, Vector2i p_end_cell, bool p_erase);
+ Map<Vector2i, TileMapCell> _draw_rect(Vector2i p_start_cell, Vector2i p_end_cell, bool p_erase);
+ Set<Vector2i> _get_cells_for_bucket_fill(Vector2i p_coords, bool p_contiguous);
+ Map<Vector2i, TileMapCell> _draw_bucket_fill(Vector2i p_coords, bool p_contiguous, bool p_erase);
void _stop_dragging();
+ int selected_terrain_set = -1;
+ TileSet::TerrainsPattern selected_terrains_pattern;
+ void _update_selection();
+
// Bottom panel.
Tree *terrains_tree;
ItemList *terrains_tile_list;
@@ -265,7 +286,7 @@ private:
public:
virtual Vector<TabData> get_tabs() const override;
virtual bool forward_canvas_gui_input(const Ref<InputEvent> &p_event) override;
- //virtual void forward_canvas_draw_over_viewport(Control *p_overlay) override;
+ virtual void forward_canvas_draw_over_viewport(Control *p_overlay) override;
TileMapEditorTerrainsPlugin();
~TileMapEditorTerrainsPlugin();
diff --git a/editor/plugins/tiles/tile_proxies_manager_dialog.cpp b/editor/plugins/tiles/tile_proxies_manager_dialog.cpp
index 9e47a44b34..60a66ab954 100644
--- a/editor/plugins/tiles/tile_proxies_manager_dialog.cpp
+++ b/editor/plugins/tiles/tile_proxies_manager_dialog.cpp
@@ -34,7 +34,7 @@
void TileProxiesManagerDialog::_right_clicked(int p_item, Vector2 p_local_mouse_pos, Object *p_item_list) {
ItemList *item_list = Object::cast_to<ItemList>(p_item_list);
- popup_menu->set_size(Vector2(1, 1));
+ popup_menu->reset_size();
popup_menu->set_position(get_position() + item_list->get_global_mouse_position());
popup_menu->popup();
}
diff --git a/editor/plugins/tiles/tile_set_atlas_source_editor.cpp b/editor/plugins/tiles/tile_set_atlas_source_editor.cpp
index ae744f697b..a48c0e795c 100644
--- a/editor/plugins/tiles/tile_set_atlas_source_editor.cpp
+++ b/editor/plugins/tiles/tile_set_atlas_source_editor.cpp
@@ -99,6 +99,7 @@ void TileSetAtlasSourceEditor::TileSetAtlasSourceProxyObject::_get_property_list
p_list->push_back(PropertyInfo(Variant::VECTOR2I, "margins", PROPERTY_HINT_NONE, ""));
p_list->push_back(PropertyInfo(Variant::VECTOR2I, "separation", PROPERTY_HINT_NONE, ""));
p_list->push_back(PropertyInfo(Variant::VECTOR2I, "texture_region_size", PROPERTY_HINT_NONE, ""));
+ p_list->push_back(PropertyInfo(Variant::BOOL, "use_texture_padding", PROPERTY_HINT_NONE, ""));
}
void TileSetAtlasSourceEditor::TileSetAtlasSourceProxyObject::_bind_methods() {
@@ -1141,7 +1142,7 @@ void TileSetAtlasSourceEditor::_tile_atlas_control_gui_input(const Ref<InputEven
Ref<InputEventMouseButton> mb = p_event;
if (mb.is_valid()) {
Vector2 mouse_local_pos = tile_atlas_control->get_local_mouse_position();
- if (mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (mb->get_button_index() == MouseButton::LEFT) {
if (mb->is_pressed()) {
// Left click pressed.
if (tools_button_group->get_pressed_button() == tool_setup_atlas_source_button) {
@@ -1287,7 +1288,7 @@ void TileSetAtlasSourceEditor::_tile_atlas_control_gui_input(const Ref<InputEven
alternative_tiles_control_unscaled->update();
tile_atlas_view->update();
return;
- } else if (mb->get_button_index() == MOUSE_BUTTON_RIGHT) {
+ } else if (mb->get_button_index() == MouseButton::RIGHT) {
// Right click pressed.
if (mb->is_pressed()) {
drag_type = DRAG_TYPE_MAY_POPUP_MENU;
@@ -1426,7 +1427,7 @@ void TileSetAtlasSourceEditor::_end_dragging() {
// Determine if we clear, then add or remove to the selection.
bool add_to_selection = true;
- if (Input::get_singleton()->is_key_pressed(KEY_SHIFT)) {
+ if (Input::get_singleton()->is_key_pressed(Key::SHIFT)) {
Vector2i coords = tile_set_atlas_source->get_tile_at_coords(start_base_tiles_coords);
if (coords != TileSetSource::INVALID_ATLAS_COORDS) {
if (selection.has({ coords, 0 })) {
@@ -1891,7 +1892,7 @@ void TileSetAtlasSourceEditor::_tile_alternatives_control_gui_input(const Ref<In
drag_type = DRAG_TYPE_NONE;
Vector2 mouse_local_pos = alternative_tiles_control->get_local_mouse_position();
- if (mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (mb->get_button_index() == MouseButton::LEFT) {
if (mb->is_pressed()) {
// Left click pressed.
if (tools_button_group->get_pressed_button() == tool_select_button) {
@@ -1907,7 +1908,7 @@ void TileSetAtlasSourceEditor::_tile_alternatives_control_gui_input(const Ref<In
_update_tile_id_label();
}
}
- } else if (mb->get_button_index() == MOUSE_BUTTON_RIGHT) {
+ } else if (mb->get_button_index() == MouseButton::RIGHT) {
if (mb->is_pressed()) {
// Right click pressed
Vector3 tile = tile_atlas_view->get_alternative_tile_at_pos(mouse_local_pos);
@@ -2061,7 +2062,7 @@ void TileSetAtlasSourceEditor::_undo_redo_inspector_callback(Object *p_undo_redo
int new_polygons_count = p_new_value;
int old_polygons_count = tile_data_proxy->get(vformat("physics_layer_%d/polygons_count", layer_index));
if (new_polygons_count < old_polygons_count) {
- for (int i = new_polygons_count - 1; i < old_polygons_count; i++) {
+ for (int i = new_polygons_count; i < old_polygons_count; i++) {
ADD_UNDO(tile_data_proxy, vformat("physics_layer_%d/polygon_%d/points", layer_index, i));
ADD_UNDO(tile_data_proxy, vformat("physics_layer_%d/polygon_%d/one_way", layer_index, i));
ADD_UNDO(tile_data_proxy, vformat("physics_layer_%d/polygon_%d/one_way_margin", layer_index, i));
@@ -2453,7 +2454,7 @@ TileSetAtlasSourceEditor::TileSetAtlasSourceEditor() {
tools_settings_erase_button = memnew(Button);
tools_settings_erase_button->set_flat(true);
tools_settings_erase_button->set_toggle_mode(true);
- tools_settings_erase_button->set_shortcut(ED_SHORTCUT("tiles_editor/eraser", "Eraser", KEY_E));
+ tools_settings_erase_button->set_shortcut(ED_SHORTCUT("tiles_editor/eraser", "Eraser", Key::E));
tools_settings_erase_button->set_shortcut_context(this);
tool_settings->add_child(tools_settings_erase_button);
@@ -2485,7 +2486,7 @@ TileSetAtlasSourceEditor::TileSetAtlasSourceEditor() {
right_panel->add_child(tile_atlas_view);
base_tile_popup_menu = memnew(PopupMenu);
- base_tile_popup_menu->add_shortcut(ED_SHORTCUT("tiles_editor/delete", TTR("Delete"), KEY_DELETE), TILE_DELETE);
+ base_tile_popup_menu->add_shortcut(ED_SHORTCUT("tiles_editor/delete", TTR("Delete"), Key::KEY_DELETE), TILE_DELETE);
base_tile_popup_menu->add_item(TTR("Create an Alternative Tile"), TILE_CREATE_ALTERNATIVE);
base_tile_popup_menu->connect("id_pressed", callable_mp(this, &TileSetAtlasSourceEditor::_menu_option));
tile_atlas_view->add_child(base_tile_popup_menu);
@@ -2508,7 +2509,7 @@ TileSetAtlasSourceEditor::TileSetAtlasSourceEditor() {
tile_atlas_control_unscaled->set_mouse_filter(Control::MOUSE_FILTER_IGNORE);
alternative_tile_popup_menu = memnew(PopupMenu);
- alternative_tile_popup_menu->add_shortcut(ED_SHORTCUT("tiles_editor/delete_tile", TTR("Delete"), KEY_DELETE), TILE_DELETE);
+ alternative_tile_popup_menu->add_shortcut(ED_SHORTCUT("tiles_editor/delete_tile", TTR("Delete"), Key::KEY_DELETE), TILE_DELETE);
alternative_tile_popup_menu->connect("id_pressed", callable_mp(this, &TileSetAtlasSourceEditor::_menu_option));
tile_atlas_view->add_child(alternative_tile_popup_menu);
@@ -2534,9 +2535,194 @@ TileSetAtlasSourceEditor::TileSetAtlasSourceEditor() {
right_panel->add_child(tile_atlas_view_missing_source_label);
EditorNode::get_singleton()->get_editor_data().add_undo_redo_inspector_hook_callback(callable_mp(this, &TileSetAtlasSourceEditor::_undo_redo_inspector_callback));
+
+ // Inspector plugin.
+ Ref<EditorInspectorPluginTileData> tile_data_inspector_plugin;
+ tile_data_inspector_plugin.instantiate();
+ EditorInspector::add_inspector_plugin(tile_data_inspector_plugin);
}
TileSetAtlasSourceEditor::~TileSetAtlasSourceEditor() {
memdelete(tile_proxy_object);
memdelete(atlas_source_proxy_object);
}
+
+////// EditorPropertyTilePolygon //////
+
+void EditorPropertyTilePolygon::_add_focusable_children(Node *p_node) {
+ Control *control = Object::cast_to<Control>(p_node);
+ if (control && control->get_focus_mode() != Control::FOCUS_NONE) {
+ add_focusable(control);
+ }
+ for (int i = 0; i < p_node->get_child_count(); i++) {
+ _add_focusable_children(p_node->get_child(i));
+ }
+}
+
+void EditorPropertyTilePolygon::_polygons_changed() {
+ if (String(count_property).is_empty()) {
+ if (base_type == "OccluderPolygon2D") {
+ // Single OccluderPolygon2D.
+ Ref<OccluderPolygon2D> occluder;
+ if (generic_tile_polygon_editor->get_polygon_count() >= 1) {
+ occluder.instantiate();
+ occluder->set_polygon(generic_tile_polygon_editor->get_polygon(0));
+ }
+ emit_changed(get_edited_property(), occluder);
+ } else if (base_type == "NavigationPolygon") {
+ Ref<NavigationPolygon> navigation_polygon;
+ if (generic_tile_polygon_editor->get_polygon_count() >= 1) {
+ navigation_polygon.instantiate();
+ for (int i = 0; i < generic_tile_polygon_editor->get_polygon_count(); i++) {
+ Vector<Vector2> polygon = generic_tile_polygon_editor->get_polygon(i);
+ navigation_polygon->add_outline(polygon);
+ }
+ navigation_polygon->make_polygons_from_outlines();
+ }
+ emit_changed(get_edited_property(), navigation_polygon);
+ }
+ } else {
+ if (base_type.is_empty()) {
+ // Multiple array of vertices.
+ Vector<String> changed_properties;
+ Array values;
+ int count = generic_tile_polygon_editor->get_polygon_count();
+ changed_properties.push_back(count_property);
+ values.push_back(count);
+ for (int i = 0; i < count; i++) {
+ changed_properties.push_back(vformat(element_pattern, i));
+ values.push_back(generic_tile_polygon_editor->get_polygon(i));
+ }
+ emit_signal("multiple_properties_changed", changed_properties, values, false);
+ }
+ }
+}
+
+void EditorPropertyTilePolygon::update_property() {
+ TileSetAtlasSourceEditor::AtlasTileProxyObject *atlas_tile_proxy_object = Object::cast_to<TileSetAtlasSourceEditor::AtlasTileProxyObject>(get_edited_object());
+ ERR_FAIL_COND(!atlas_tile_proxy_object);
+ ERR_FAIL_COND(atlas_tile_proxy_object->get_edited_tiles().is_empty());
+
+ TileSetAtlasSource *tile_set_atlas_source = atlas_tile_proxy_object->get_edited_tile_set_atlas_source();
+ generic_tile_polygon_editor->set_tile_set(Ref<TileSet>(tile_set_atlas_source->get_tile_set()));
+
+ // Set the background
+ Vector2i coords = atlas_tile_proxy_object->get_edited_tiles().front()->get().tile;
+ int alternative = atlas_tile_proxy_object->get_edited_tiles().front()->get().alternative;
+ TileData *tile_data = Object::cast_to<TileData>(tile_set_atlas_source->get_tile_data(coords, alternative));
+ generic_tile_polygon_editor->set_background(tile_set_atlas_source->get_texture(), tile_set_atlas_source->get_tile_texture_region(coords), tile_set_atlas_source->get_tile_effective_texture_offset(coords, alternative), tile_data->get_flip_h(), tile_data->get_flip_v(), tile_data->get_transpose(), tile_data->get_modulate());
+
+ // Reset the polygons.
+ generic_tile_polygon_editor->clear_polygons();
+
+ if (String(count_property).is_empty()) {
+ if (base_type == "OccluderPolygon2D") {
+ // Single OccluderPolygon2D.
+ Ref<OccluderPolygon2D> occluder = get_edited_object()->get(get_edited_property());
+ generic_tile_polygon_editor->clear_polygons();
+ if (occluder.is_valid()) {
+ generic_tile_polygon_editor->add_polygon(occluder->get_polygon());
+ }
+ } else if (base_type == "NavigationPolygon") {
+ // Single OccluderPolygon2D.
+ Ref<NavigationPolygon> navigation_polygon = get_edited_object()->get(get_edited_property());
+ generic_tile_polygon_editor->clear_polygons();
+ if (navigation_polygon.is_valid()) {
+ for (int i = 0; i < navigation_polygon->get_outline_count(); i++) {
+ generic_tile_polygon_editor->add_polygon(navigation_polygon->get_outline(i));
+ }
+ }
+ }
+ } else {
+ int count = get_edited_object()->get(count_property);
+ if (base_type.is_empty()) {
+ // Multiple array of vertices.
+ generic_tile_polygon_editor->clear_polygons();
+ for (int i = 0; i < count; i++) {
+ generic_tile_polygon_editor->add_polygon(get_edited_object()->get(vformat(element_pattern, i)));
+ }
+ }
+ }
+}
+
+void EditorPropertyTilePolygon::setup_single_mode(const StringName &p_property, const String &p_base_type) {
+ set_object_and_property(nullptr, p_property);
+ base_type = p_base_type;
+
+ generic_tile_polygon_editor->set_multiple_polygon_mode(false);
+}
+
+void EditorPropertyTilePolygon::setup_multiple_mode(const StringName &p_property, const StringName &p_count_property, const String &p_element_pattern, const String &p_base_type) {
+ set_object_and_property(nullptr, p_property);
+ count_property = p_count_property;
+ element_pattern = p_element_pattern;
+ base_type = p_base_type;
+
+ generic_tile_polygon_editor->set_multiple_polygon_mode(true);
+}
+
+EditorPropertyTilePolygon::EditorPropertyTilePolygon() {
+ // Setup the polygon editor.
+ generic_tile_polygon_editor = memnew(GenericTilePolygonEditor);
+ generic_tile_polygon_editor->set_use_undo_redo(false);
+ generic_tile_polygon_editor->clear_polygons();
+ add_child(generic_tile_polygon_editor);
+ generic_tile_polygon_editor->connect("polygons_changed", callable_mp(this, &EditorPropertyTilePolygon::_polygons_changed));
+
+ // Add all focussable children of generic_tile_polygon_editor as focussable.
+ _add_focusable_children(generic_tile_polygon_editor);
+}
+
+////// EditorInspectorPluginTileData //////
+
+bool EditorInspectorPluginTileData::can_handle(Object *p_object) {
+ return Object::cast_to<TileSetAtlasSourceEditor::AtlasTileProxyObject>(p_object) != nullptr;
+}
+
+bool EditorInspectorPluginTileData::parse_property(Object *p_object, const Variant::Type p_type, const String &p_path, const PropertyHint p_hint, const String &p_hint_text, const uint32_t p_usage, const bool p_wide) {
+ Vector<String> components = String(p_path).split("/", true, 2);
+ if (components.size() == 2 && components[0].begins_with("occlusion_layer_") && components[0].trim_prefix("occlusion_layer_").is_valid_int()) {
+ // Occlusion layers.
+ int layer_index = components[0].trim_prefix("occlusion_layer_").to_int();
+ ERR_FAIL_COND_V(layer_index < 0, false);
+ if (components[1] == "polygon") {
+ EditorPropertyTilePolygon *ep = memnew(EditorPropertyTilePolygon);
+ ep->setup_single_mode(p_path, "OccluderPolygon2D");
+ add_property_editor(p_path, ep);
+ return true;
+ }
+ } else if (components.size() >= 2 && components[0].begins_with("physics_layer_") && components[0].trim_prefix("physics_layer_").is_valid_int()) {
+ // Physics layers.
+ int layer_index = components[0].trim_prefix("physics_layer_").to_int();
+ ERR_FAIL_COND_V(layer_index < 0, false);
+ if (components[1] == "polygons_count") {
+ EditorPropertyTilePolygon *ep = memnew(EditorPropertyTilePolygon);
+ ep->setup_multiple_mode(vformat("physics_layer_%d/polygons", layer_index), vformat("physics_layer_%d/polygons_count", layer_index), vformat("physics_layer_%d/polygon_%%d/points", layer_index), "");
+ Vector<String> properties;
+ properties.push_back(p_path);
+ int count = p_object->get(vformat("physics_layer_%d/polygons_count", layer_index));
+ for (int i = 0; i < count; i++) {
+ properties.push_back(vformat(vformat("physics_layer_%d/polygon_%d/points", layer_index, i)));
+ }
+ add_property_editor_for_multiple_properties("Polygons", properties, ep);
+ return true;
+ } else if (components.size() == 3 && components[1].begins_with("polygon_") && components[1].trim_prefix("polygon_").is_valid_int()) {
+ int polygon_index = components[1].trim_prefix("polygon_").to_int();
+ ERR_FAIL_COND_V(polygon_index < 0, false);
+ if (components[2] == "points") {
+ return true;
+ }
+ }
+ } else if (components.size() == 2 && components[0].begins_with("navigation_layer_") && components[0].trim_prefix("navigation_layer_").is_valid_int()) {
+ // Navigation layers.
+ int layer_index = components[0].trim_prefix("navigation_layer_").to_int();
+ ERR_FAIL_COND_V(layer_index < 0, false);
+ if (components[1] == "polygon") {
+ EditorPropertyTilePolygon *ep = memnew(EditorPropertyTilePolygon);
+ ep->setup_single_mode(p_path, "NavigationPolygon");
+ add_property_editor(p_path, ep);
+ return true;
+ }
+ }
+ return false;
+}
diff --git a/editor/plugins/tiles/tile_set_atlas_source_editor.h b/editor/plugins/tiles/tile_set_atlas_source_editor.h
index ea6f2847ae..bd1fd2e7d0 100644
--- a/editor/plugins/tiles/tile_set_atlas_source_editor.h
+++ b/editor/plugins/tiles/tile_set_atlas_source_editor.h
@@ -43,7 +43,7 @@ class TileSet;
class TileSetAtlasSourceEditor : public HBoxContainer {
GDCLASS(TileSetAtlasSourceEditor, HBoxContainer);
-private:
+public:
// A class to store which tiles are selected.
struct TileSelection {
Vector2i tile = TileSetSource::INVALID_ATLAS_COORDS;
@@ -99,6 +99,9 @@ private:
static void _bind_methods();
public:
+ TileSetAtlasSource *get_edited_tile_set_atlas_source() const { return tile_set_atlas_source; };
+ Set<TileSelection> get_edited_tiles() const { return tiles; };
+
// Update the proxyed object.
void edit(TileSetAtlasSource *p_tile_set_atlas_source, Set<TileSelection> p_tiles = Set<TileSelection>());
@@ -107,6 +110,7 @@ private:
}
};
+private:
Ref<TileSet> tile_set;
TileSetAtlasSource *tile_set_atlas_source = nullptr;
int tile_set_atlas_source_id = TileSet::INVALID_SOURCE;
@@ -281,4 +285,34 @@ public:
~TileSetAtlasSourceEditor();
};
+class EditorPropertyTilePolygon : public EditorProperty {
+ GDCLASS(EditorPropertyTilePolygon, EditorProperty);
+
+ StringName count_property;
+ String element_pattern;
+ String base_type;
+
+ void _add_focusable_children(Node *p_node);
+
+ GenericTilePolygonEditor *generic_tile_polygon_editor;
+ void _polygons_changed();
+
+public:
+ virtual void update_property() override;
+ void setup_single_mode(const StringName &p_property, const String &p_base_type);
+ void setup_multiple_mode(const StringName &p_property, const StringName &p_count_property, const String &p_element_pattern, const String &p_base_type);
+ EditorPropertyTilePolygon();
+};
+
+class EditorInspectorPluginTileData : public EditorInspectorPlugin {
+ GDCLASS(EditorInspectorPluginTileData, EditorInspectorPlugin);
+
+ void _occlusion_polygon_set_callback();
+ void _polygons_changed(Object *p_generic_tile_polygon_editor, Object *p_object, const String &p_path);
+
+public:
+ virtual bool can_handle(Object *p_object) override;
+ virtual bool parse_property(Object *p_object, const Variant::Type p_type, const String &p_path, const PropertyHint p_hint, const String &p_hint_text, const uint32_t p_usage, const bool p_wide = false) override;
+};
+
#endif // TILE_SET_ATLAS_SOURCE_EDITOR_H
diff --git a/editor/plugins/tiles/tile_set_editor.cpp b/editor/plugins/tiles/tile_set_editor.cpp
index 0fbb9a98c7..915ce50836 100644
--- a/editor/plugins/tiles/tile_set_editor.cpp
+++ b/editor/plugins/tiles/tile_set_editor.cpp
@@ -41,10 +41,10 @@
TileSetEditor *TileSetEditor::singleton = nullptr;
-void TileSetEditor::drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from) {
+void TileSetEditor::_drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from) {
ERR_FAIL_COND(!tile_set.is_valid());
- if (!can_drop_data_fw(p_point, p_data, p_from)) {
+ if (!_can_drop_data_fw(p_point, p_data, p_from)) {
return;
}
@@ -81,7 +81,7 @@ void TileSetEditor::drop_data_fw(const Point2 &p_point, const Variant &p_data, C
}
}
-bool TileSetEditor::can_drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from) const {
+bool TileSetEditor::_can_drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from) const {
ERR_FAIL_COND_V(!tile_set.is_valid(), false);
if (p_from == sources_list) {
@@ -608,8 +608,8 @@ void TileSetEditor::_undo_redo_inspector_callback(Object *p_undo_redo, Object *p
}
void TileSetEditor::_bind_methods() {
- ClassDB::bind_method(D_METHOD("_can_drop_data_fw"), &TileSetEditor::can_drop_data_fw);
- ClassDB::bind_method(D_METHOD("_drop_data_fw"), &TileSetEditor::drop_data_fw);
+ ClassDB::bind_method(D_METHOD("_can_drop_data_fw"), &TileSetEditor::_can_drop_data_fw);
+ ClassDB::bind_method(D_METHOD("_drop_data_fw"), &TileSetEditor::_drop_data_fw);
}
void TileSetEditor::edit(Ref<TileSet> p_tile_set) {
diff --git a/editor/plugins/tiles/tile_set_editor.h b/editor/plugins/tiles/tile_set_editor.h
index cda38760cf..58312ce3df 100644
--- a/editor/plugins/tiles/tile_set_editor.h
+++ b/editor/plugins/tiles/tile_set_editor.h
@@ -59,6 +59,9 @@ private:
UndoRedo *undo_redo = EditorNode::get_undo_redo();
+ void _drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from);
+ bool _can_drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from) const;
+
void _update_sources_list(int force_selected_id = -1);
// Sources management.
@@ -98,9 +101,6 @@ public:
void edit(Ref<TileSet> p_tile_set);
- void drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from);
- bool can_drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from) const;
-
TileSetEditor();
~TileSetEditor();
};
diff --git a/editor/plugins/tiles/tile_set_scenes_collection_source_editor.cpp b/editor/plugins/tiles/tile_set_scenes_collection_source_editor.cpp
index dc26d380b8..d687d9651d 100644
--- a/editor/plugins/tiles/tile_set_scenes_collection_source_editor.cpp
+++ b/editor/plugins/tiles/tile_set_scenes_collection_source_editor.cpp
@@ -385,8 +385,8 @@ void TileSetScenesCollectionSourceEditor::edit(Ref<TileSet> p_tile_set, TileSetS
_update_tile_inspector();
}
-void TileSetScenesCollectionSourceEditor::drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from) {
- if (!can_drop_data_fw(p_point, p_data, p_from)) {
+void TileSetScenesCollectionSourceEditor::_drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from) {
+ if (!_can_drop_data_fw(p_point, p_data, p_from)) {
return;
}
@@ -412,7 +412,7 @@ void TileSetScenesCollectionSourceEditor::drop_data_fw(const Point2 &p_point, co
}
}
-bool TileSetScenesCollectionSourceEditor::can_drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from) const {
+bool TileSetScenesCollectionSourceEditor::_can_drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from) const {
if (p_from == scene_tiles_list) {
Dictionary d = p_data;
@@ -447,8 +447,8 @@ void TileSetScenesCollectionSourceEditor::_bind_methods() {
ADD_SIGNAL(MethodInfo("source_id_changed", PropertyInfo(Variant::INT, "source_id")));
ClassDB::bind_method(D_METHOD("_scene_thumbnail_done"), &TileSetScenesCollectionSourceEditor::_scene_thumbnail_done);
- ClassDB::bind_method(D_METHOD("can_drop_data_fw"), &TileSetScenesCollectionSourceEditor::can_drop_data_fw);
- ClassDB::bind_method(D_METHOD("drop_data_fw"), &TileSetScenesCollectionSourceEditor::drop_data_fw);
+ ClassDB::bind_method(D_METHOD("_can_drop_data_fw"), &TileSetScenesCollectionSourceEditor::_can_drop_data_fw);
+ ClassDB::bind_method(D_METHOD("_drop_data_fw"), &TileSetScenesCollectionSourceEditor::_drop_data_fw);
}
TileSetScenesCollectionSourceEditor::TileSetScenesCollectionSourceEditor() {
diff --git a/editor/plugins/tiles/tile_set_scenes_collection_source_editor.h b/editor/plugins/tiles/tile_set_scenes_collection_source_editor.h
index 3be7bee714..4e33128be5 100644
--- a/editor/plugins/tiles/tile_set_scenes_collection_source_editor.h
+++ b/editor/plugins/tiles/tile_set_scenes_collection_source_editor.h
@@ -125,14 +125,15 @@ private:
void _update_scenes_list();
void _update_action_buttons();
+ void _drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from);
+ bool _can_drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from) const;
+
protected:
void _notification(int p_what);
static void _bind_methods();
public:
void edit(Ref<TileSet> p_tile_set, TileSetScenesCollectionSource *p_tile_set_scenes_collection_source, int p_source_id);
- void drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from);
- bool can_drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from) const;
TileSetScenesCollectionSourceEditor();
~TileSetScenesCollectionSourceEditor();
};
diff --git a/editor/plugins/tiles/tiles_editor_plugin.cpp b/editor/plugins/tiles/tiles_editor_plugin.cpp
index f1918073fb..47dfc57b0f 100644
--- a/editor/plugins/tiles/tiles_editor_plugin.cpp
+++ b/editor/plugins/tiles/tiles_editor_plugin.cpp
@@ -47,8 +47,12 @@
TilesEditorPlugin *TilesEditorPlugin::singleton = nullptr;
-void TilesEditorPlugin::_pattern_preview_done(const Variant &p_udata) {
- pattern_preview_done.set();
+void TilesEditorPlugin::_preview_frame_started() {
+ RS::get_singleton()->request_frame_drawn_callback(callable_mp(const_cast<TilesEditorPlugin *>(this), &TilesEditorPlugin::_pattern_preview_done));
+}
+
+void TilesEditorPlugin::_pattern_preview_done() {
+ pattern_preview_done.post();
}
void TilesEditorPlugin::_thread_func(void *ud) {
@@ -112,12 +116,9 @@ void TilesEditorPlugin::_thread() {
// Add the viewport at the lasst moment to avoid rendering too early.
EditorNode::get_singleton()->add_child(viewport);
- pattern_preview_done.clear();
- RS::get_singleton()->request_frame_drawn_callback(const_cast<TilesEditorPlugin *>(this), "_pattern_preview_done", Variant());
+ RS::get_singleton()->connect(SNAME("frame_pre_draw"), callable_mp(const_cast<TilesEditorPlugin *>(this), &TilesEditorPlugin::_preview_frame_started), Vector<Variant>(), Object::CONNECT_ONESHOT);
- while (!pattern_preview_done.is_set()) {
- OS::get_singleton()->delay_usec(10);
- }
+ pattern_preview_done.wait();
Ref<Image> image = viewport->get_texture()->get_image();
Ref<ImageTexture> image_texture;
@@ -274,10 +275,6 @@ bool TilesEditorPlugin::handles(Object *p_object) const {
return p_object->is_class("TileMap") || p_object->is_class("TileSet");
}
-void TilesEditorPlugin::_bind_methods() {
- ClassDB::bind_method(D_METHOD("_pattern_preview_done", "pattern"), &TilesEditorPlugin::_pattern_preview_done);
-}
-
TilesEditorPlugin::TilesEditorPlugin(EditorNode *p_node) {
set_process_internal(true);
diff --git a/editor/plugins/tiles/tiles_editor_plugin.h b/editor/plugins/tiles/tiles_editor_plugin.h
index dd52bdc31a..33493040f6 100644
--- a/editor/plugins/tiles/tiles_editor_plugin.h
+++ b/editor/plugins/tiles/tiles_editor_plugin.h
@@ -77,14 +77,14 @@ private:
Thread pattern_preview_thread;
SafeFlag pattern_thread_exit;
SafeFlag pattern_thread_exited;
- mutable SafeFlag pattern_preview_done;
- void _pattern_preview_done(const Variant &p_udata);
+ Semaphore pattern_preview_done;
+ void _preview_frame_started();
+ void _pattern_preview_done();
static void _thread_func(void *ud);
void _thread();
protected:
void _notification(int p_what);
- static void _bind_methods();
public:
_FORCE_INLINE_ static TilesEditorPlugin *get_singleton() { return singleton; }
diff --git a/editor/plugins/version_control_editor_plugin.cpp b/editor/plugins/version_control_editor_plugin.cpp
index aaa29bcb7a..28352d25eb 100644
--- a/editor/plugins/version_control_editor_plugin.cpp
+++ b/editor/plugins/version_control_editor_plugin.cpp
@@ -49,6 +49,11 @@ void VersionControlEditorPlugin::_bind_methods() {
BIND_ENUM_CONSTANT(CHANGE_TYPE_TYPECHANGE);
}
+void VersionControlEditorPlugin::_create_vcs_metadata_files() {
+ String dir = "res://";
+ EditorVCSInterface::create_vcs_metadata_files(EditorVCSInterface::VCSMetadata(metadata_selection->get_selected()), dir);
+}
+
void VersionControlEditorPlugin::_selected_a_vcs(int p_id) {
List<StringName> available_addons = get_available_vcs_names();
const StringName selected_vcs = set_up_choice->get_item_text(p_id);
@@ -71,6 +76,10 @@ VersionControlEditorPlugin *VersionControlEditorPlugin::get_singleton() {
return singleton ? singleton : memnew(VersionControlEditorPlugin);
}
+void VersionControlEditorPlugin::popup_vcs_metadata_dialog() {
+ metadata_dialog->popup_centered();
+}
+
void VersionControlEditorPlugin::popup_vcs_set_up_dialog(const Control *p_gui_base) {
fetch_available_vcs_addon_names();
List<StringName> available_addons = get_available_vcs_names();
@@ -374,6 +383,30 @@ VersionControlEditorPlugin::VersionControlEditorPlugin() {
version_control_actions = memnew(PopupMenu);
+ metadata_dialog = memnew(ConfirmationDialog);
+ metadata_dialog->set_title(TTR("Create Version Control Metadata"));
+ metadata_dialog->set_min_size(Size2(200, 40));
+ version_control_actions->add_child(metadata_dialog);
+
+ VBoxContainer *metadata_vb = memnew(VBoxContainer);
+ HBoxContainer *metadata_hb = memnew(HBoxContainer);
+ metadata_hb->set_custom_minimum_size(Size2(200, 20));
+ Label *l = memnew(Label);
+ l->set_text(TTR("Create VCS metadata files for:"));
+ metadata_hb->add_child(l);
+ metadata_selection = memnew(OptionButton);
+ metadata_selection->set_custom_minimum_size(Size2(100, 20));
+ metadata_selection->add_item("None", (int)EditorVCSInterface::VCSMetadata::NONE);
+ metadata_selection->add_item("Git", (int)EditorVCSInterface::VCSMetadata::GIT);
+ metadata_selection->select((int)EditorVCSInterface::VCSMetadata::GIT);
+ metadata_dialog->get_ok_button()->connect("pressed", callable_mp(this, &VersionControlEditorPlugin::_create_vcs_metadata_files));
+ metadata_hb->add_child(metadata_selection);
+ metadata_vb->add_child(metadata_hb);
+ l = memnew(Label);
+ l->set_text(TTR("Existing VCS metadata files will be overwritten."));
+ metadata_vb->add_child(l);
+ metadata_dialog->add_child(metadata_vb);
+
set_up_dialog = memnew(AcceptDialog);
set_up_dialog->set_title(TTR("Set Up Version Control"));
set_up_dialog->set_min_size(Size2(400, 100));
@@ -488,7 +521,7 @@ VersionControlEditorPlugin::VersionControlEditorPlugin() {
commit_message->connect("text_changed", callable_mp(this, &VersionControlEditorPlugin::_update_commit_button));
commit_message->connect("gui_input", callable_mp(this, &VersionControlEditorPlugin::_commit_message_gui_input));
commit_box_vbc->add_child(commit_message);
- ED_SHORTCUT("version_control/commit", TTR("Commit"), KEY_MASK_CMD | KEY_ENTER);
+ ED_SHORTCUT("version_control/commit", TTR("Commit"), KeyModifierMask::CMD | Key::ENTER);
commit_button = memnew(Button);
commit_button->set_text(TTR("Commit Changes"));
diff --git a/editor/plugins/version_control_editor_plugin.h b/editor/plugins/version_control_editor_plugin.h
index d2ba63c86c..2782c1d9dc 100644
--- a/editor/plugins/version_control_editor_plugin.h
+++ b/editor/plugins/version_control_editor_plugin.h
@@ -57,6 +57,8 @@ private:
List<StringName> available_addons;
PopupMenu *version_control_actions;
+ ConfirmationDialog *metadata_dialog;
+ OptionButton *metadata_selection;
AcceptDialog *set_up_dialog;
VBoxContainer *set_up_vbc;
HBoxContainer *set_up_hbc;
@@ -98,6 +100,7 @@ private:
RichTextLabel *diff;
void _populate_available_vcs_names();
+ void _create_vcs_metadata_files();
void _selected_a_vcs(int p_id);
void _initialize_vcs();
void _send_commit_msg();
@@ -121,6 +124,7 @@ protected:
public:
static VersionControlEditorPlugin *get_singleton();
+ void popup_vcs_metadata_dialog();
void popup_vcs_set_up_dialog(const Control *p_gui_base);
void set_version_control_tool_button(Button *p_button) { version_control_dock_button = p_button; }
diff --git a/editor/plugins/visual_shader_editor_plugin.cpp b/editor/plugins/visual_shader_editor_plugin.cpp
index 9189c75162..da73fc093c 100644
--- a/editor/plugins/visual_shader_editor_plugin.cpp
+++ b/editor/plugins/visual_shader_editor_plugin.cpp
@@ -104,7 +104,6 @@ void VisualShaderGraphPlugin::_bind_methods() {
ClassDB::bind_method("connect_nodes", &VisualShaderGraphPlugin::connect_nodes);
ClassDB::bind_method("disconnect_nodes", &VisualShaderGraphPlugin::disconnect_nodes);
ClassDB::bind_method("set_node_position", &VisualShaderGraphPlugin::set_node_position);
- ClassDB::bind_method("set_node_size", &VisualShaderGraphPlugin::set_node_size);
ClassDB::bind_method("update_node", &VisualShaderGraphPlugin::update_node);
ClassDB::bind_method("update_node_deferred", &VisualShaderGraphPlugin::update_node_deferred);
ClassDB::bind_method("set_input_port_default_value", &VisualShaderGraphPlugin::set_input_port_default_value);
@@ -133,7 +132,7 @@ void VisualShaderGraphPlugin::show_port_preview(VisualShader::Type p_type, int p
if (links[p_node_id].preview_visible && !is_dirty() && links[p_node_id].preview_box != nullptr) {
links[p_node_id].graph_node->remove_child(links[p_node_id].preview_box);
memdelete(links[p_node_id].preview_box);
- links[p_node_id].graph_node->set_size(Vector2(-1, -1));
+ links[p_node_id].graph_node->reset_size();
links[p_node_id].preview_visible = false;
}
@@ -257,7 +256,7 @@ void VisualShaderGraphPlugin::update_node_size(int p_node_id) {
if (!links.has(p_node_id)) {
return;
}
- links[p_node_id].graph_node->set_size(Size2(-1, -1));
+ links[p_node_id].graph_node->reset_size();
}
void VisualShaderGraphPlugin::register_default_input_button(int p_node_id, int p_port_id, Button *p_button) {
@@ -292,12 +291,6 @@ void VisualShaderGraphPlugin::set_node_position(VisualShader::Type p_type, int p
}
}
-void VisualShaderGraphPlugin::set_node_size(VisualShader::Type p_type, int p_id, const Vector2 &p_size) {
- if (visual_shader->get_shader_type() == p_type && links.has(p_id)) {
- links[p_id].graph_node->set_size(p_size);
- }
-}
-
bool VisualShaderGraphPlugin::is_preview_visible(int p_id) const {
return links[p_id].preview_visible;
}
@@ -1047,7 +1040,6 @@ void VisualShaderEditor::edit(VisualShader *p_visual_shader) {
hide();
} else {
if (changed) { // to avoid tree collapse
- _clear_buffer();
_update_options_menu();
_update_preview();
_update_graph();
@@ -1069,7 +1061,7 @@ void VisualShaderEditor::remove_plugin(const Ref<VisualShaderNodePlugin> &p_plug
void VisualShaderEditor::clear_custom_types() {
for (int i = 0; i < add_options.size(); i++) {
if (add_options[i].is_custom) {
- add_options.remove(i);
+ add_options.remove_at(i);
i--;
}
}
@@ -1984,7 +1976,7 @@ void VisualShaderEditor::_set_node_size(int p_type, int p_node, const Vector2 &p
}
gn->set_custom_minimum_size(size);
- gn->set_size(Size2(1, 1));
+ gn->reset_size();
if (!expression_node.is_null() && text_box) {
Size2 box_size = size;
@@ -1998,7 +1990,7 @@ void VisualShaderEditor::_set_node_size(int p_type, int p_node, const Vector2 &p
box_size.y -= text_box->get_offset(SIDE_TOP);
box_size.y -= 28 * EDSCALE;
text_box->set_custom_minimum_size(box_size);
- text_box->set_size(Size2(1, 1));
+ text_box->reset_size();
}
}
}
@@ -2046,8 +2038,8 @@ void VisualShaderEditor::_comment_title_popup_show(const Point2 &p_position, int
}
void VisualShaderEditor::_comment_title_text_changed(const String &p_new_text) {
- comment_title_change_edit->set_size(Size2(-1, -1));
- comment_title_change_popup->set_size(Size2(-1, -1));
+ comment_title_change_edit->reset_size();
+ comment_title_change_popup->reset_size();
}
void VisualShaderEditor::_comment_title_text_submitted(const String &p_new_text) {
@@ -2091,8 +2083,8 @@ void VisualShaderEditor::_comment_desc_popup_show(const Point2 &p_position, int
}
void VisualShaderEditor::_comment_desc_text_changed() {
- comment_desc_change_edit->set_size(Size2(-1, -1));
- comment_desc_change_popup->set_size(Size2(-1, -1));
+ comment_desc_change_edit->reset_size();
+ comment_desc_change_popup->reset_size();
}
void VisualShaderEditor::_comment_desc_confirm() {
@@ -2765,9 +2757,6 @@ void VisualShaderEditor::_delete_nodes(int p_type, const List<int> &p_nodes) {
undo_redo->add_undo_method(visual_shader.ptr(), "add_node", type, node, visual_shader->get_node_position(type, F), F);
undo_redo->add_undo_method(graph_plugin.ptr(), "add_node", type, F);
- undo_redo->add_do_method(this, "_clear_buffer");
- undo_redo->add_undo_method(this, "_clear_buffer");
-
// restore size, inputs and outputs if node is group
VisualShaderNodeGroupBase *group = Object::cast_to<VisualShaderNodeGroupBase>(node.ptr());
if (group) {
@@ -3062,7 +3051,7 @@ void VisualShaderEditor::_graph_gui_input(const Ref<InputEvent> &p_event) {
Ref<InputEventMouseButton> mb = p_event;
VisualShader::Type type = get_current_shader_type();
- if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == MOUSE_BUTTON_RIGHT) {
+ if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == MouseButton::RIGHT) {
selected_constants.clear();
selected_uniforms.clear();
selected_comment = -1;
@@ -3103,13 +3092,15 @@ void VisualShaderEditor::_graph_gui_input(const Ref<InputEvent> &p_event) {
selected_float_constant = -1;
}
- if (to_change.is_empty() && copy_nodes_buffer.is_empty()) {
+ if (to_change.is_empty() && copy_items_buffer.is_empty()) {
_show_members_dialog(true);
} else {
+ popup_menu->set_item_disabled(NodeMenuOptions::CUT, to_change.is_empty());
popup_menu->set_item_disabled(NodeMenuOptions::COPY, to_change.is_empty());
- popup_menu->set_item_disabled(NodeMenuOptions::PASTE, copy_nodes_buffer.is_empty());
+ popup_menu->set_item_disabled(NodeMenuOptions::PASTE, copy_items_buffer.is_empty());
popup_menu->set_item_disabled(NodeMenuOptions::DELETE, to_change.is_empty());
popup_menu->set_item_disabled(NodeMenuOptions::DUPLICATE, to_change.is_empty());
+ popup_menu->set_item_disabled(NodeMenuOptions::CLEAR_COPY_BUFFER, copy_items_buffer.is_empty());
int temp = popup_menu->get_item_index(NodeMenuOptions::SEPARATOR2);
if (temp != -1) {
@@ -3176,7 +3167,7 @@ void VisualShaderEditor::_graph_gui_input(const Ref<InputEvent> &p_event) {
menu_point = graph->get_local_mouse_position();
Point2 gpos = Input::get_singleton()->get_mouse_position();
popup_menu->set_position(gpos);
- popup_menu->set_size(Size2(-1, -1));
+ popup_menu->reset_size();
popup_menu->popup();
}
}
@@ -3220,7 +3211,7 @@ void VisualShaderEditor::_show_members_dialog(bool at_mouse_pos, VisualShaderNod
void VisualShaderEditor::_sbox_input(const Ref<InputEvent> &p_ie) {
Ref<InputEventKey> ie = p_ie;
- if (ie.is_valid() && (ie->get_keycode() == KEY_UP || ie->get_keycode() == KEY_DOWN || ie->get_keycode() == KEY_ENTER || ie->get_keycode() == KEY_KP_ENTER)) {
+ if (ie.is_valid() && (ie->get_keycode() == Key::UP || ie->get_keycode() == Key::DOWN || ie->get_keycode() == Key::ENTER || ie->get_keycode() == Key::KP_ENTER)) {
members->gui_input(ie);
node_filter->accept_event();
}
@@ -3329,69 +3320,88 @@ void VisualShaderEditor::_node_changed(int p_id) {
}
}
-void VisualShaderEditor::_dup_update_excluded(int p_type, Set<int> &r_excluded) {
- r_excluded.clear();
- VisualShader::Type type = (VisualShader::Type)p_type;
-
- for (int i = 0; i < graph->get_child_count(); i++) {
- GraphNode *gn = Object::cast_to<GraphNode>(graph->get_child(i));
- if (gn) {
- int id = String(gn->get_name()).to_int();
- Ref<VisualShaderNode> node = visual_shader->get_node(type, id);
- Ref<VisualShaderNodeOutput> output = node;
- if (output.is_valid()) {
- r_excluded.insert(id);
- continue;
- }
- r_excluded.insert(id);
- }
- }
-}
-
-void VisualShaderEditor::_dup_copy_nodes(int p_type, List<int> &r_nodes, Set<int> &r_excluded) {
+void VisualShaderEditor::_dup_copy_nodes(int p_type, List<CopyItem> &r_items, List<VisualShader::Connection> &r_connections) {
VisualShader::Type type = (VisualShader::Type)p_type;
selection_center.x = 0.0f;
selection_center.y = 0.0f;
+ Set<int> nodes;
+
for (int i = 0; i < graph->get_child_count(); i++) {
GraphNode *gn = Object::cast_to<GraphNode>(graph->get_child(i));
if (gn) {
int id = String(gn->get_name()).to_int();
+
Ref<VisualShaderNode> node = visual_shader->get_node(type, id);
Ref<VisualShaderNodeOutput> output = node;
if (output.is_valid()) { // can't duplicate output
- r_excluded.insert(id);
continue;
}
+
if (node.is_valid() && gn->is_selected()) {
Vector2 pos = visual_shader->get_node_position(type, id);
selection_center += pos;
- r_nodes.push_back(id);
+
+ CopyItem item;
+ item.id = id;
+ item.node = visual_shader->get_node(type, id)->duplicate();
+ item.position = visual_shader->get_node_position(type, id);
+
+ Ref<VisualShaderNodeResizableBase> resizable_base = node;
+ if (resizable_base.is_valid()) {
+ item.size = resizable_base->get_size();
+ }
+
+ Ref<VisualShaderNodeGroupBase> group = node;
+ if (group.is_valid()) {
+ item.group_inputs = group->get_inputs();
+ item.group_outputs = group->get_outputs();
+ }
+
+ Ref<VisualShaderNodeExpression> expression = node;
+ if (expression.is_valid()) {
+ item.expression = expression->get_expression();
+ }
+
+ r_items.push_back(item);
+
+ nodes.insert(id);
}
- r_excluded.insert(id);
}
}
- selection_center /= (float)r_nodes.size();
+ List<VisualShader::Connection> connections;
+ visual_shader->get_node_connections(type, &connections);
+
+ for (const VisualShader::Connection &E : connections) {
+ if (nodes.has(E.from_node) && nodes.has(E.to_node)) {
+ r_connections.push_back(E);
+ }
+ }
+
+ selection_center /= (float)r_items.size();
}
-void VisualShaderEditor::_dup_paste_nodes(int p_type, int p_pasted_type, List<int> &r_nodes, Set<int> &r_excluded, const Vector2 &p_offset, bool p_select) {
+void VisualShaderEditor::_dup_paste_nodes(int p_type, List<CopyItem> &r_items, const List<VisualShader::Connection> &p_connections, const Vector2 &p_offset, bool p_duplicate) {
+ if (p_duplicate) {
+ undo_redo->create_action(TTR("Duplicate VisualShader Node(s)"));
+ } else {
+ undo_redo->create_action(TTR("Paste VisualShader Node(s)"));
+ }
+
VisualShader::Type type = (VisualShader::Type)p_type;
- VisualShader::Type pasted_type = (VisualShader::Type)p_pasted_type;
int base_id = visual_shader->get_valid_node_id(type);
int id_from = base_id;
Map<int, int> connection_remap;
Set<int> unsupported_set;
+ Set<int> added_set;
- for (int &E : r_nodes) {
- connection_remap[E] = id_from;
- Ref<VisualShaderNode> node = visual_shader->get_node(pasted_type, E);
-
+ for (CopyItem &item : r_items) {
bool unsupported = false;
for (int i = 0; i < add_options.size(); i++) {
- if (add_options[i].type == node->get_class_name()) {
+ if (add_options[i].type == item.node->get_class_name()) {
if (!_is_available(add_options[i].mode)) {
unsupported = true;
}
@@ -3399,48 +3409,47 @@ void VisualShaderEditor::_dup_paste_nodes(int p_type, int p_pasted_type, List<in
}
}
if (unsupported) {
- unsupported_set.insert(E);
+ unsupported_set.insert(item.id);
continue;
}
+ connection_remap[item.id] = id_from;
+ Ref<VisualShaderNode> node = item.node->duplicate();
- Ref<VisualShaderNode> dupli = node->duplicate();
-
- undo_redo->add_do_method(visual_shader.ptr(), "add_node", type, dupli, visual_shader->get_node_position(pasted_type, E) + p_offset, id_from);
- undo_redo->add_do_method(graph_plugin.ptr(), "add_node", type, id_from);
+ Ref<VisualShaderNodeResizableBase> resizable_base = Object::cast_to<VisualShaderNodeResizableBase>(node.ptr());
+ if (resizable_base.is_valid()) {
+ undo_redo->add_do_method(node.ptr(), "set_size", item.size);
+ }
- // duplicate size, inputs and outputs if node is group
Ref<VisualShaderNodeGroupBase> group = Object::cast_to<VisualShaderNodeGroupBase>(node.ptr());
- if (!group.is_null()) {
- undo_redo->add_do_method(dupli.ptr(), "set_size", group->get_size());
- undo_redo->add_do_method(graph_plugin.ptr(), "set_node_size", type, id_from, group->get_size());
- undo_redo->add_do_method(dupli.ptr(), "set_inputs", group->get_inputs());
- undo_redo->add_do_method(dupli.ptr(), "set_outputs", group->get_outputs());
+ if (group.is_valid()) {
+ undo_redo->add_do_method(node.ptr(), "set_inputs", item.group_inputs);
+ undo_redo->add_do_method(node.ptr(), "set_outputs", item.group_outputs);
}
- // duplicate expression text if node is expression
+
Ref<VisualShaderNodeExpression> expression = Object::cast_to<VisualShaderNodeExpression>(node.ptr());
- if (!expression.is_null()) {
- undo_redo->add_do_method(dupli.ptr(), "set_expression", expression->get_expression());
+ if (expression.is_valid()) {
+ undo_redo->add_do_method(node.ptr(), "set_expression", item.expression);
}
+ undo_redo->add_do_method(visual_shader.ptr(), "add_node", type, node, item.position + p_offset, id_from);
+ undo_redo->add_do_method(graph_plugin.ptr(), "add_node", type, id_from);
+
+ added_set.insert(id_from);
id_from++;
}
- List<VisualShader::Connection> conns;
- visual_shader->get_node_connections(pasted_type, &conns);
-
- for (const VisualShader::Connection &E : conns) {
+ for (const VisualShader::Connection &E : p_connections) {
if (unsupported_set.has(E.from_node) || unsupported_set.has(E.to_node)) {
continue;
}
- if (connection_remap.has(E.from_node) && connection_remap.has(E.to_node)) {
- undo_redo->add_do_method(visual_shader.ptr(), "connect_nodes", type, connection_remap[E.from_node], E.from_port, connection_remap[E.to_node], E.to_port);
- undo_redo->add_do_method(graph_plugin.ptr(), "connect_nodes", type, connection_remap[E.from_node], E.from_port, connection_remap[E.to_node], E.to_port);
- undo_redo->add_undo_method(graph_plugin.ptr(), "disconnect_nodes", type, connection_remap[E.from_node], E.from_port, connection_remap[E.to_node], E.to_port);
- }
+
+ undo_redo->add_do_method(visual_shader.ptr(), "connect_nodes", type, connection_remap[E.from_node], E.from_port, connection_remap[E.to_node], E.to_port);
+ undo_redo->add_do_method(graph_plugin.ptr(), "connect_nodes", type, connection_remap[E.from_node], E.from_port, connection_remap[E.to_node], E.to_port);
+ undo_redo->add_undo_method(graph_plugin.ptr(), "disconnect_nodes", type, connection_remap[E.from_node], E.from_port, connection_remap[E.to_node], E.to_port);
}
id_from = base_id;
- for (int i = 0; i < r_nodes.size(); i++) {
+ for (int i = 0; i < r_items.size(); i++) {
undo_redo->add_undo_method(visual_shader.ptr(), "remove_node", type, id_from);
undo_redo->add_undo_method(graph_plugin.ptr(), "remove_node", type, id_from);
id_from++;
@@ -3448,54 +3457,61 @@ void VisualShaderEditor::_dup_paste_nodes(int p_type, int p_pasted_type, List<in
undo_redo->commit_action();
- if (p_select) {
- // reselect duplicated nodes by excluding the other ones
- for (int i = 0; i < graph->get_child_count(); i++) {
- GraphNode *gn = Object::cast_to<GraphNode>(graph->get_child(i));
- if (gn) {
- int id = String(gn->get_name()).to_int();
- if (!r_excluded.has(id)) {
- gn->set_selected(true);
- } else {
- gn->set_selected(false);
- }
+ // reselect nodes by excluding the other ones
+ for (int i = 0; i < graph->get_child_count(); i++) {
+ GraphNode *gn = Object::cast_to<GraphNode>(graph->get_child(i));
+ if (gn) {
+ int id = String(gn->get_name()).to_int();
+ if (added_set.has(id)) {
+ gn->set_selected(true);
+ } else {
+ gn->set_selected(false);
}
}
}
}
-void VisualShaderEditor::_clear_buffer() {
- copy_nodes_buffer.clear();
- copy_nodes_excluded_buffer.clear();
+void VisualShaderEditor::_clear_copy_buffer() {
+ copy_items_buffer.clear();
+ copy_connections_buffer.clear();
}
void VisualShaderEditor::_duplicate_nodes() {
int type = get_current_shader_type();
- List<int> nodes;
- Set<int> excluded;
+ List<CopyItem> items;
+ List<VisualShader::Connection> connections;
- _dup_copy_nodes(type, nodes, excluded);
+ _dup_copy_nodes(type, items, connections);
- if (nodes.is_empty()) {
+ if (items.is_empty()) {
return;
}
- undo_redo->create_action(TTR("Duplicate VisualShader Node(s)"));
-
- _dup_paste_nodes(type, type, nodes, excluded, Vector2(10, 10) * EDSCALE, true);
+ _dup_paste_nodes(type, items, connections, Vector2(10, 10) * EDSCALE, true);
}
-void VisualShaderEditor::_copy_nodes() {
- copy_type = get_current_shader_type();
+void VisualShaderEditor::_copy_nodes(bool p_cut) {
+ _clear_copy_buffer();
+
+ _dup_copy_nodes(get_current_shader_type(), copy_items_buffer, copy_connections_buffer);
+
+ if (p_cut) {
+ undo_redo->create_action(TTR("Cut VisualShader Node(s)"));
+
+ List<int> ids;
+ for (const CopyItem &E : copy_items_buffer) {
+ ids.push_back(E.id);
+ }
- _clear_buffer();
+ _delete_nodes(get_current_shader_type(), ids);
- _dup_copy_nodes(copy_type, copy_nodes_buffer, copy_nodes_excluded_buffer);
+ undo_redo->commit_action();
+ }
}
void VisualShaderEditor::_paste_nodes(bool p_use_custom_position, const Vector2 &p_custom_position) {
- if (copy_nodes_buffer.is_empty()) {
+ if (copy_items_buffer.is_empty()) {
return;
}
@@ -3510,11 +3526,7 @@ void VisualShaderEditor::_paste_nodes(bool p_use_custom_position, const Vector2
mpos = graph->get_local_mouse_position();
}
- undo_redo->create_action(TTR("Paste VisualShader Node(s)"));
-
- _dup_paste_nodes(type, copy_type, copy_nodes_buffer, copy_nodes_excluded_buffer, (graph->get_scroll_ofs() / scale + mpos / scale - selection_center), false);
-
- _dup_update_excluded(type, copy_nodes_excluded_buffer); // to prevent selection of previous copies at new paste
+ _dup_paste_nodes(type, copy_items_buffer, copy_connections_buffer, graph->get_scroll_ofs() / scale + mpos / scale - selection_center, false);
}
void VisualShaderEditor::_mode_selected(int p_id) {
@@ -3540,6 +3552,8 @@ void VisualShaderEditor::_mode_selected(int p_id) {
visual_shader->set_shader_type(VisualShader::Type(p_id + offset));
_update_options_menu();
_update_graph();
+
+ graph->grab_focus();
}
void VisualShaderEditor::_custom_mode_toggled(bool p_enabled) {
@@ -3742,8 +3756,11 @@ void VisualShaderEditor::_node_menu_id_pressed(int p_idx) {
case NodeMenuOptions::ADD:
_show_members_dialog(true);
break;
+ case NodeMenuOptions::CUT:
+ _copy_nodes(true);
+ break;
case NodeMenuOptions::COPY:
- _copy_nodes();
+ _copy_nodes(false);
break;
case NodeMenuOptions::PASTE:
_paste_nodes(true, menu_point);
@@ -3754,6 +3771,9 @@ void VisualShaderEditor::_node_menu_id_pressed(int p_idx) {
case NodeMenuOptions::DUPLICATE:
_duplicate_nodes();
break;
+ case NodeMenuOptions::CLEAR_COPY_BUFFER:
+ _clear_copy_buffer();
+ break;
case NodeMenuOptions::CONVERT_CONSTANTS_TO_UNIFORMS:
_convert_constants_to_uniforms(false);
break;
@@ -3968,7 +3988,7 @@ void VisualShaderEditor::_bind_methods() {
ClassDB::bind_method("_input_select_item", &VisualShaderEditor::_input_select_item);
ClassDB::bind_method("_uniform_select_item", &VisualShaderEditor::_uniform_select_item);
ClassDB::bind_method("_set_node_size", &VisualShaderEditor::_set_node_size);
- ClassDB::bind_method("_clear_buffer", &VisualShaderEditor::_clear_buffer);
+ ClassDB::bind_method("_clear_copy_buffer", &VisualShaderEditor::_clear_copy_buffer);
ClassDB::bind_method("_update_uniforms", &VisualShaderEditor::_update_uniforms);
ClassDB::bind_method("_set_mode", &VisualShaderEditor::_set_mode);
ClassDB::bind_method("_nodes_dragged", &VisualShaderEditor::_nodes_dragged);
@@ -4022,7 +4042,7 @@ VisualShaderEditor::VisualShaderEditor() {
graph->connect("node_selected", callable_mp(this, &VisualShaderEditor::_node_selected));
graph->connect("scroll_offset_changed", callable_mp(this, &VisualShaderEditor::_scroll_changed));
graph->connect("duplicate_nodes_request", callable_mp(this, &VisualShaderEditor::_duplicate_nodes));
- graph->connect("copy_nodes_request", callable_mp(this, &VisualShaderEditor::_copy_nodes));
+ graph->connect("copy_nodes_request", callable_mp(this, &VisualShaderEditor::_copy_nodes), varray(false));
graph->connect("paste_nodes_request", callable_mp(this, &VisualShaderEditor::_paste_nodes), varray(false, Point2()));
graph->connect("delete_nodes_request", callable_mp(this, &VisualShaderEditor::_delete_nodes_request));
graph->connect("gui_input", callable_mp(this, &VisualShaderEditor::_graph_gui_input));
@@ -4148,10 +4168,12 @@ VisualShaderEditor::VisualShaderEditor() {
add_child(popup_menu);
popup_menu->add_item(TTR("Add Node"), NodeMenuOptions::ADD);
popup_menu->add_separator();
+ popup_menu->add_item(TTR("Cut"), NodeMenuOptions::CUT);
popup_menu->add_item(TTR("Copy"), NodeMenuOptions::COPY);
popup_menu->add_item(TTR("Paste"), NodeMenuOptions::PASTE);
popup_menu->add_item(TTR("Delete"), NodeMenuOptions::DELETE);
popup_menu->add_item(TTR("Duplicate"), NodeMenuOptions::DUPLICATE);
+ popup_menu->add_item(TTR("Clear Copy Buffer"), NodeMenuOptions::CLEAR_COPY_BUFFER);
popup_menu->connect("id_pressed", callable_mp(this, &VisualShaderEditor::_node_menu_id_pressed));
///////////////////////////////////////
@@ -4236,8 +4258,8 @@ VisualShaderEditor::VisualShaderEditor() {
comment_title_change_edit->connect("text_changed", callable_mp(this, &VisualShaderEditor::_comment_title_text_changed));
comment_title_change_edit->connect("text_submitted", callable_mp(this, &VisualShaderEditor::_comment_title_text_submitted));
comment_title_change_popup->add_child(comment_title_change_edit);
- comment_title_change_edit->set_size(Size2(-1, -1));
- comment_title_change_popup->set_size(Size2(-1, -1));
+ comment_title_change_edit->reset_size();
+ comment_title_change_popup->reset_size();
comment_title_change_popup->connect("focus_exited", callable_mp(this, &VisualShaderEditor::_comment_title_popup_focus_out));
comment_title_change_popup->connect("popup_hide", callable_mp(this, &VisualShaderEditor::_comment_title_popup_hide));
add_child(comment_title_change_popup);
@@ -4249,8 +4271,8 @@ VisualShaderEditor::VisualShaderEditor() {
comment_desc_change_edit->connect("text_changed", callable_mp(this, &VisualShaderEditor::_comment_desc_text_changed));
comment_desc_vbox->add_child(comment_desc_change_edit);
comment_desc_change_edit->set_custom_minimum_size(Size2(300 * EDSCALE, 150 * EDSCALE));
- comment_desc_change_edit->set_size(Size2(-1, -1));
- comment_desc_change_popup->set_size(Size2(-1, -1));
+ comment_desc_change_edit->reset_size();
+ comment_desc_change_popup->reset_size();
comment_desc_change_popup->connect("focus_exited", callable_mp(this, &VisualShaderEditor::_comment_desc_confirm));
comment_desc_change_popup->connect("popup_hide", callable_mp(this, &VisualShaderEditor::_comment_desc_popup_hide));
Button *comment_desc_confirm_button = memnew(Button);
@@ -4505,6 +4527,7 @@ VisualShaderEditor::VisualShaderEditor() {
add_options.push_back(AddOption("MultiplyByAxisAngle", "Particles", "Transform", "VisualShaderNodeParticleMultiplyByAxisAngle", "A node for help to multiply a position input vector by rotation using specific axis. Intended to work with emitters.", -1, VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_EMIT | TYPE_FLAGS_PROCESS | TYPE_FLAGS_COLLIDE, Shader::MODE_PARTICLES));
add_options.push_back(AddOption("BoxEmitter", "Particles", "Emitters", "VisualShaderNodeParticleBoxEmitter", "", -1, VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_EMIT, Shader::MODE_PARTICLES));
+ add_options.push_back(AddOption("MeshEmitter", "Particles", "Emitters", "VisualShaderNodeParticleMeshEmitter", "", -1, VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_EMIT, Shader::MODE_PARTICLES));
add_options.push_back(AddOption("RingEmitter", "Particles", "Emitters", "VisualShaderNodeParticleRingEmitter", "", -1, VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_EMIT, Shader::MODE_PARTICLES));
add_options.push_back(AddOption("SphereEmitter", "Particles", "Emitters", "VisualShaderNodeParticleSphereEmitter", "", -1, VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_EMIT, Shader::MODE_PARTICLES));
@@ -4955,7 +4978,7 @@ public:
}
}
- void setup(Ref<Resource> p_parent_resource, Vector<EditorProperty *> p_properties, const Vector<StringName> &p_names, Ref<VisualShaderNode> p_node) {
+ void setup(Ref<Resource> p_parent_resource, Vector<EditorProperty *> p_properties, const Vector<StringName> &p_names, const Map<StringName, String> &p_overrided_names, Ref<VisualShaderNode> p_node) {
parent_resource = p_parent_resource;
updating = false;
node = p_node;
@@ -4971,7 +4994,11 @@ public:
Label *prop_name = memnew(Label);
String prop_name_str = p_names[i];
- prop_name_str = prop_name_str.capitalize() + ":";
+ if (p_overrided_names.has(p_names[i])) {
+ prop_name_str = p_overrided_names[p_names[i]] + ":";
+ } else {
+ prop_name_str = prop_name_str.capitalize() + ":";
+ }
prop_name->set_text(prop_name_str);
prop_name->set_visible(false);
hbox->add_child(prop_name);
@@ -5063,7 +5090,7 @@ Control *VisualShaderNodePluginDefault::create_editor(const Ref<Resource> &p_par
properties.push_back(pinfo[i].name);
}
VisualShaderNodePluginDefaultEditor *editor = memnew(VisualShaderNodePluginDefaultEditor);
- editor->setup(p_parent_resource, editors, properties, p_node);
+ editor->setup(p_parent_resource, editors, properties, p_node->get_editable_properties_names(), p_node);
return editor;
}
@@ -5160,11 +5187,7 @@ EditorPropertyShaderMode::EditorPropertyShaderMode() {
}
bool EditorInspectorShaderModePlugin::can_handle(Object *p_object) {
- return true; //can handle everything
-}
-
-void EditorInspectorShaderModePlugin::parse_begin(Object *p_object) {
- //do none
+ return true; // Can handle everything.
}
bool EditorInspectorShaderModePlugin::parse_property(Object *p_object, const Variant::Type p_type, const String &p_path, const PropertyHint p_hint, const String &p_hint_text, const uint32_t p_usage, const bool p_wide) {
@@ -5177,11 +5200,7 @@ bool EditorInspectorShaderModePlugin::parse_property(Object *p_object, const Var
return true;
}
- return false; //can be overridden, although it will most likely be last anyway
-}
-
-void EditorInspectorShaderModePlugin::parse_end() {
- //do none
+ return false;
}
//////////////////////////////////
@@ -5198,7 +5217,9 @@ void VisualShaderNodePortPreview::_shader_changed() {
preview_shader.instantiate();
preview_shader->set_code(shader_code);
for (int i = 0; i < default_textures.size(); i++) {
- preview_shader->set_default_texture_param(default_textures[i].name, default_textures[i].param);
+ for (int j = 0; j < default_textures[i].params.size(); j++) {
+ preview_shader->set_default_texture_param(default_textures[i].name, default_textures[i].params[j], j);
+ }
}
Ref<ShaderMaterial> material;
diff --git a/editor/plugins/visual_shader_editor_plugin.h b/editor/plugins/visual_shader_editor_plugin.h
index 58bbcb7113..74ccda3c9a 100644
--- a/editor/plugins/visual_shader_editor_plugin.h
+++ b/editor/plugins/visual_shader_editor_plugin.h
@@ -111,7 +111,6 @@ public:
void disconnect_nodes(VisualShader::Type p_type, int p_from_node, int p_from_port, int p_to_node, int p_to_port);
void show_port_preview(VisualShader::Type p_type, int p_node_id, int p_port_id);
void set_node_position(VisualShader::Type p_type, int p_id, const Vector2 &p_position);
- void set_node_size(VisualShader::Type p_type, int p_id, const Vector2 &p_size);
void refresh_node_ports(VisualShader::Type p_type, int p_node);
void set_input_port_default_value(VisualShader::Type p_type, int p_node_id, int p_port_id, Variant p_value);
void update_uniform_refs();
@@ -217,10 +216,12 @@ class VisualShaderEditor : public VBoxContainer {
enum NodeMenuOptions {
ADD,
SEPARATOR, // ignore
+ CUT,
COPY,
PASTE,
DELETE,
DUPLICATE,
+ CLEAR_COPY_BUFFER,
SEPARATOR2, // ignore
FLOAT_CONSTANTS,
CONVERT_CONSTANTS_TO_UNIFORMS,
@@ -380,19 +381,27 @@ class VisualShaderEditor : public VBoxContainer {
void _port_name_focus_out(Object *line_edit, int p_node_id, int p_port_id, bool p_output);
- void _dup_copy_nodes(int p_type, List<int> &r_nodes, Set<int> &r_excluded);
- void _dup_update_excluded(int p_type, Set<int> &r_excluded);
- void _dup_paste_nodes(int p_type, int p_pasted_type, List<int> &r_nodes, Set<int> &r_excluded, const Vector2 &p_offset, bool p_select);
+ struct CopyItem {
+ int id;
+ Ref<VisualShaderNode> node;
+ Vector2 position;
+ Vector2 size;
+ String group_inputs;
+ String group_outputs;
+ String expression;
+ };
+
+ void _dup_copy_nodes(int p_type, List<CopyItem> &r_nodes, List<VisualShader::Connection> &r_connections);
+ void _dup_paste_nodes(int p_type, List<CopyItem> &r_items, const List<VisualShader::Connection> &p_connections, const Vector2 &p_offset, bool p_duplicate);
void _duplicate_nodes();
Vector2 selection_center;
- int copy_type; // shader type
- List<int> copy_nodes_buffer;
- Set<int> copy_nodes_excluded_buffer;
+ List<CopyItem> copy_items_buffer;
+ List<VisualShader::Connection> copy_connections_buffer;
- void _clear_buffer();
- void _copy_nodes();
+ void _clear_copy_buffer();
+ void _copy_nodes(bool p_cut);
void _paste_nodes(bool p_use_custom_position = false, const Vector2 &p_custom_position = Vector2());
Vector<Ref<VisualShaderNodePlugin>> plugins;
@@ -514,9 +523,7 @@ class EditorInspectorShaderModePlugin : public EditorInspectorPlugin {
public:
virtual bool can_handle(Object *p_object) override;
- virtual void parse_begin(Object *p_object) override;
virtual bool parse_property(Object *p_object, const Variant::Type p_type, const String &p_path, const PropertyHint p_hint, const String &p_hint_text, const uint32_t p_usage, const bool p_wide = false) override;
- virtual void parse_end() override;
};
class VisualShaderNodePortPreview : public Control {
diff --git a/editor/project_export.cpp b/editor/project_export.cpp
index ad9c81458f..a97d38323e 100644
--- a/editor/project_export.cpp
+++ b/editor/project_export.cpp
@@ -38,6 +38,7 @@
#include "core/io/resource_saver.h"
#include "core/os/os.h"
#include "core/string/optimized_translation.h"
+#include "core/version_generated.gen.h"
#include "editor_data.h"
#include "editor_node.h"
#include "editor_scale.h"
@@ -456,7 +457,7 @@ void ProjectExportDialog::_enc_filters_changed(const String &p_filters) {
}
void ProjectExportDialog::_open_key_help_link() {
- OS::get_singleton()->shell_open("https://docs.godotengine.org/en/latest/development/compiling/compiling_with_script_encryption_key.html");
+ OS::get_singleton()->shell_open(vformat("%s/development/compiling/compiling_with_script_encryption_key.html", VERSION_DOCS_URL));
}
void ProjectExportDialog::_enc_pck_changed(bool p_pressed) {
@@ -1276,11 +1277,13 @@ ProjectExportDialog::ProjectExportDialog() {
export_debug = memnew(CheckBox);
export_debug->set_text(TTR("Export With Debug"));
export_debug->set_pressed(true);
+ export_debug->set_h_size_flags(Control::SIZE_SHRINK_CENTER);
export_project->get_vbox()->add_child(export_debug);
export_pck_zip_debug = memnew(CheckBox);
export_pck_zip_debug->set_text(TTR("Export With Debug"));
export_pck_zip_debug->set_pressed(true);
+ export_pck_zip_debug->set_h_size_flags(Control::SIZE_SHRINK_CENTER);
export_pck_zip->get_vbox()->add_child(export_pck_zip_debug);
set_hide_on_ok(false);
diff --git a/editor/project_manager.cpp b/editor/project_manager.cpp
index dc35e01a56..372a77f67d 100644
--- a/editor/project_manager.cpp
+++ b/editor/project_manager.cpp
@@ -41,6 +41,7 @@
#include "core/string/translation.h"
#include "core/version.h"
#include "core/version_hash.gen.h"
+#include "editor/editor_vcs_interface.h"
#include "editor_scale.h"
#include "editor_settings.h"
#include "editor_themes.h"
@@ -52,6 +53,7 @@
#include "scene/gui/texture_rect.h"
#include "scene/main/window.h"
#include "servers/display_server.h"
+#include "servers/navigation_server_3d.h"
static inline String get_project_key_from_path(const String &dir) {
return dir.replace("/", "::");
@@ -66,19 +68,19 @@ public:
MODE_NEW,
MODE_IMPORT,
MODE_INSTALL,
- MODE_RENAME
+ MODE_RENAME,
};
private:
enum MessageType {
MESSAGE_ERROR,
MESSAGE_WARNING,
- MESSAGE_SUCCESS
+ MESSAGE_SUCCESS,
};
enum InputType {
PROJECT_PATH,
- INSTALL_PATH
+ INSTALL_PATH,
};
Mode mode;
@@ -89,6 +91,7 @@ private:
Container *path_container;
Container *install_path_container;
Container *rasterizer_container;
+ HBoxContainer *default_files_container;
Ref<ButtonGroup> rasterizer_button_group;
Label *msg;
LineEdit *project_path;
@@ -98,6 +101,8 @@ private:
TextureRect *install_status_rect;
FileDialog *fdialog;
FileDialog *fdialog_install;
+ OptionButton *vcs_metadata_selection;
+ CheckBox *create_default_environment;
String zip_path;
String zip_title;
AcceptDialog *dialog_error;
@@ -473,39 +478,50 @@ private:
cd->grab_focus();
return;
}
+ PackedStringArray project_features = ProjectSettings::get_required_features();
ProjectSettings::CustomMap initial_settings;
- initial_settings["rendering/vulkan/rendering/back_end"] = rasterizer_button_group->get_pressed_button()->get_meta(SNAME("driver_name"));
- if (rasterizer_button_group->get_pressed_button()->get_meta("driver_name") == "Vulkan") {
- initial_settings["rendering/driver/driver_name"] = "Vulkan";
+ // Be sure to change this code if/when renderers are changed.
+ int renderer_type = rasterizer_button_group->get_pressed_button()->get_meta(SNAME("driver_name"));
+ initial_settings["rendering/vulkan/rendering/back_end"] = renderer_type;
+ if (renderer_type == 0) {
+ project_features.push_back("Vulkan Clustered");
+ } else if (renderer_type == 1) {
+ project_features.push_back("Vulkan Mobile");
} else {
- initial_settings["rendering/driver/driver_name"] = "OpenGL3";
- initial_settings["rendering/textures/vram_compression/import_etc2"] = false;
- initial_settings["rendering/textures/vram_compression/import_etc"] = true;
+ WARN_PRINT("Unknown renderer type. Please report this as a bug on GitHub.");
}
+ project_features.sort();
+ initial_settings["application/config/features"] = project_features;
initial_settings["application/config/name"] = project_name->get_text().strip_edges();
initial_settings["application/config/icon"] = "res://icon.png";
- initial_settings["rendering/environment/defaults/default_environment"] = "res://default_env.tres";
+
+ if (create_default_environment->is_pressed()) {
+ initial_settings["rendering/environment/defaults/default_environment"] = "res://default_env.tres";
+ }
if (ProjectSettings::get_singleton()->save_custom(dir.plus_file("project.godot"), initial_settings, Vector<String>(), false) != OK) {
set_message(TTR("Couldn't create project.godot in project path."), MESSAGE_ERROR);
} else {
ResourceSaver::save(dir.plus_file("icon.png"), create_unscaled_default_project_icon());
-
- FileAccess *f = FileAccess::open(dir.plus_file("default_env.tres"), FileAccess::WRITE);
- if (!f) {
- set_message(TTR("Couldn't create project.godot in project path."), MESSAGE_ERROR);
- } else {
- f->store_line("[gd_resource type=\"Environment\" load_steps=2 format=3]");
- f->store_line("");
- f->store_line("[sub_resource type=\"Sky\" id=\"1\"]");
- f->store_line("");
- f->store_line("[resource]");
- f->store_line("background_mode = 2");
- f->store_line("sky = SubResource( \"1\" )");
- memdelete(f);
+ FileAccess *f;
+ if (create_default_environment->is_pressed()) {
+ f = FileAccess::open(dir.plus_file("default_env.tres"), FileAccess::WRITE);
+ if (!f) {
+ set_message(TTR("Couldn't create default_env.tres in project path."), MESSAGE_ERROR);
+ } else {
+ f->store_line("[gd_resource type=\"Environment\" load_steps=2 format=2]");
+ f->store_line("");
+ f->store_line("[sub_resource type=\"Sky\" id=\"1\"]");
+ f->store_line("");
+ f->store_line("[resource]");
+ f->store_line("background_mode = 2");
+ f->store_line("sky = SubResource( \"1\" )");
+ memdelete(f);
+ }
}
- }
+ EditorVCSInterface::create_vcs_metadata_files(EditorVCSInterface::VCSMetadata(vcs_metadata_selection->get_selected()), dir);
+ }
} else if (mode == MODE_INSTALL) {
if (project_path->get_text().ends_with(".zip")) {
dir = install_path->get_text();
@@ -700,6 +716,7 @@ public:
install_path_container->hide();
install_status_rect->hide();
rasterizer_container->hide();
+ default_files_container->hide();
get_ok_button()->set_disabled(false);
ProjectSettings *current = memnew(ProjectSettings);
@@ -751,6 +768,7 @@ public:
name_container->hide();
install_path_container->hide();
rasterizer_container->hide();
+ default_files_container->hide();
project_path->grab_focus();
} else if (mode == MODE_NEW) {
@@ -759,6 +777,7 @@ public:
name_container->show();
install_path_container->hide();
rasterizer_container->show();
+ default_files_container->show();
project_name->call_deferred(SNAME("grab_focus"));
project_name->call_deferred(SNAME("select_all"));
@@ -769,6 +788,7 @@ public:
name_container->show();
install_path_container->hide();
rasterizer_container->hide();
+ default_files_container->hide();
project_path->grab_focus();
}
@@ -911,6 +931,25 @@ public:
l->set_modulate(Color(1, 1, 1, 0.7));
rasterizer_container->add_child(l);
+ default_files_container = memnew(HBoxContainer);
+ vb->add_child(default_files_container);
+ l = memnew(Label);
+ l->set_text(TTR("Version Control Metadata:"));
+ default_files_container->add_child(l);
+ vcs_metadata_selection = memnew(OptionButton);
+ vcs_metadata_selection->set_custom_minimum_size(Size2(100, 20));
+ vcs_metadata_selection->add_item("None", (int)EditorVCSInterface::VCSMetadata::NONE);
+ vcs_metadata_selection->add_item("Git", (int)EditorVCSInterface::VCSMetadata::GIT);
+ vcs_metadata_selection->select((int)EditorVCSInterface::VCSMetadata::GIT);
+ default_files_container->add_child(vcs_metadata_selection);
+ Control *spacer = memnew(Control);
+ spacer->set_h_size_flags(Control::SIZE_EXPAND_FILL);
+ default_files_container->add_child(spacer);
+ create_default_environment = memnew(CheckBox);
+ create_default_environment->set_text("Create Default Environment");
+ create_default_environment->set_pressed(true);
+ default_files_container->add_child(create_default_environment);
+
fdialog = memnew(FileDialog);
fdialog->set_access(FileDialog::ACCESS_FILESYSTEM);
fdialog_install = memnew(FileDialog);
@@ -992,6 +1031,7 @@ public:
String path;
String icon;
String main_scene;
+ PackedStringArray unsupported_features;
uint64_t last_edited = 0;
bool favorite = false;
bool grayed = false;
@@ -1008,6 +1048,7 @@ public:
const String &p_path,
const String &p_icon,
const String &p_main_scene,
+ const PackedStringArray &p_unsupported_features,
uint64_t p_last_edited,
bool p_favorite,
bool p_grayed,
@@ -1019,6 +1060,7 @@ public:
path = p_path;
icon = p_icon;
main_scene = p_main_scene;
+ unsupported_features = p_unsupported_features;
last_edited = p_last_edited;
favorite = p_favorite;
grayed = p_grayed;
@@ -1070,8 +1112,7 @@ private:
void remove_project(int p_index, bool p_update_settings);
void update_icons_async();
void load_project_icon(int p_index);
-
- static void load_project_data(const String &p_property_key, Item &p_item, bool p_favorite);
+ static Item load_project_data(const String &p_property_key, bool p_favorite);
String _search_term;
FilterOption _order_option;
@@ -1162,7 +1203,8 @@ void ProjectList::load_project_icon(int p_index) {
item.control->icon_needs_reload = false;
}
-void ProjectList::load_project_data(const String &p_property_key, Item &p_item, bool p_favorite) {
+// Load project data from p_property_key and return it in a ProjectList::Item. p_favorite is passed directly into the Item.
+ProjectList::Item ProjectList::load_project_data(const String &p_property_key, bool p_favorite) {
String path = EditorSettings::get_singleton()->get(p_property_key);
String conf = path.plus_file("project.godot");
bool grayed = false;
@@ -1182,13 +1224,16 @@ void ProjectList::load_project_data(const String &p_property_key, Item &p_item,
}
if (config_version > ProjectSettings::CONFIG_VERSION) {
- // Comes from an incompatible (more recent) Godot version, grey it out
+ // Comes from an incompatible (more recent) Godot version, gray it out.
grayed = true;
}
- String description = cf->get_value("application", "config/description", "");
- String icon = cf->get_value("application", "config/icon", "");
- String main_scene = cf->get_value("application", "run/main_scene", "");
+ const String description = cf->get_value("application", "config/description", "");
+ const String icon = cf->get_value("application", "config/icon", "");
+ const String main_scene = cf->get_value("application", "run/main_scene", "");
+
+ PackedStringArray project_features = cf->get_value("application", "config/features", PackedStringArray());
+ PackedStringArray unsupported_features = ProjectSettings::get_unsupported_features(project_features);
uint64_t last_edited = 0;
if (FileAccess::exists(conf)) {
@@ -1210,9 +1255,9 @@ void ProjectList::load_project_data(const String &p_property_key, Item &p_item,
print_line("Project is missing: " + conf);
}
- String project_key = p_property_key.get_slice("/", 1);
+ const String project_key = p_property_key.get_slice("/", 1);
- p_item = Item(project_key, project_name, description, path, icon, main_scene, last_edited, p_favorite, grayed, missing, config_version);
+ return Item(project_key, project_name, description, path, icon, main_scene, unsupported_features, last_edited, p_favorite, grayed, missing, config_version);
}
void ProjectList::load_projects() {
@@ -1255,8 +1300,7 @@ void ProjectList::load_projects() {
String project_key = property_key.get_slice("/", 1);
bool favorite = favorites.has("favorite_projects/" + project_key);
- Item item;
- load_project_data(property_key, item, favorite);
+ Item item = load_project_data(property_key, favorite);
_projects.push_back(item);
}
@@ -1304,8 +1348,7 @@ void ProjectList::update_dock_menu() {
void ProjectList::_global_menu_new_window(const Variant &p_tag) {
List<String> args;
args.push_back("-p");
- String exec = OS::get_singleton()->get_executable_path();
- OS::get_singleton()->create_process(exec, args);
+ OS::get_singleton()->create_instance(args);
}
void ProjectList::_global_menu_open_project(const Variant &p_tag) {
@@ -1315,8 +1358,7 @@ void ProjectList::_global_menu_open_project(const Variant &p_tag) {
String conf = _projects[idx].path.plus_file("project.godot");
List<String> args;
args.push_back(conf);
- String exec = OS::get_singleton()->get_executable_path();
- OS::get_singleton()->create_process(exec, args);
+ OS::get_singleton()->create_instance(args);
}
}
@@ -1341,7 +1383,7 @@ void ProjectList::create_project_item_control(int p_index) {
TextureButton *favorite = memnew(TextureButton);
favorite->set_name("FavoriteButton");
favorite->set_normal_texture(favorite_icon);
- // This makes the project's "hover" style display correctly when hovering the favorite icon
+ // This makes the project's "hover" style display correctly when hovering the favorite icon.
favorite->set_mouse_filter(MOUSE_FILTER_PASS);
favorite->connect("pressed", callable_mp(this, &ProjectList::_favorite_pressed), varray(hb));
favorite_box->add_child(favorite);
@@ -1371,40 +1413,65 @@ void ProjectList::create_project_item_control(int p_index) {
ec->set_custom_minimum_size(Size2(0, 1));
ec->set_mouse_filter(MOUSE_FILTER_PASS);
vb->add_child(ec);
- Label *title = memnew(Label(!item.missing ? item.project_name : TTR("Missing Project")));
- title->add_theme_font_override("font", get_theme_font(SNAME("title"), SNAME("EditorFonts")));
- title->add_theme_font_size_override("font_size", get_theme_font_size(SNAME("title_size"), SNAME("EditorFonts")));
- title->add_theme_color_override("font_color", font_color);
- title->set_clip_text(true);
- vb->add_child(title);
-
- HBoxContainer *path_hb = memnew(HBoxContainer);
- path_hb->set_h_size_flags(Control::SIZE_EXPAND_FILL);
- vb->add_child(path_hb);
-
- Button *show = memnew(Button);
- // Display a folder icon if the project directory can be opened, or a "broken file" icon if it can't.
- show->set_icon(get_theme_icon(!item.missing ? "Load" : "FileBroken", "EditorIcons"));
- if (!item.grayed) {
- // Don't make the icon less prominent if the parent is already grayed out.
- show->set_modulate(Color(1, 1, 1, 0.5));
- }
- path_hb->add_child(show);
-
- if (!item.missing) {
- show->connect("pressed", callable_mp(this, &ProjectList::_show_project), varray(item.path));
- show->set_tooltip(TTR("Show in File Manager"));
- } else {
- show->set_tooltip(TTR("Error: Project is missing on the filesystem."));
- }
- Label *fpath = memnew(Label(item.path));
- fpath->set_structured_text_bidi_override(Control::STRUCTURED_TEXT_FILE);
- path_hb->add_child(fpath);
- fpath->set_h_size_flags(Control::SIZE_EXPAND_FILL);
- fpath->set_modulate(Color(1, 1, 1, 0.5));
- fpath->add_theme_color_override("font_color", font_color);
- fpath->set_clip_text(true);
+ { // Top half, title and unsupported features labels.
+ HBoxContainer *title_hb = memnew(HBoxContainer);
+ vb->add_child(title_hb);
+
+ Label *title = memnew(Label(!item.missing ? item.project_name : TTR("Missing Project")));
+ title->set_h_size_flags(Control::SIZE_EXPAND_FILL);
+ title->add_theme_font_override("font", get_theme_font(SNAME("title"), SNAME("EditorFonts")));
+ title->add_theme_font_size_override("font_size", get_theme_font_size(SNAME("title_size"), SNAME("EditorFonts")));
+ title->add_theme_color_override("font_color", font_color);
+ title->set_clip_text(true);
+ title_hb->add_child(title);
+
+ String unsupported_features_str = Variant(item.unsupported_features).operator String().trim_prefix("[").trim_suffix("]");
+ int length = unsupported_features_str.length();
+ if (length > 0) {
+ Label *unsupported_label = memnew(Label(unsupported_features_str));
+ unsupported_label->set_custom_minimum_size(Size2(length * 15, 10) * EDSCALE);
+ unsupported_label->add_theme_font_override("font", get_theme_font(SNAME("title"), SNAME("EditorFonts")));
+ unsupported_label->add_theme_color_override("font_color", get_theme_color(SNAME("warning_color"), SNAME("Editor")));
+ unsupported_label->set_clip_text(true);
+ unsupported_label->set_align(Label::ALIGN_RIGHT);
+ title_hb->add_child(unsupported_label);
+ Control *spacer = memnew(Control());
+ spacer->set_custom_minimum_size(Size2(10, 10));
+ title_hb->add_child(spacer);
+ }
+ }
+
+ { // Bottom half, containing the path and view folder button.
+ HBoxContainer *path_hb = memnew(HBoxContainer);
+ path_hb->set_h_size_flags(Control::SIZE_EXPAND_FILL);
+ vb->add_child(path_hb);
+
+ Button *show = memnew(Button);
+ // Display a folder icon if the project directory can be opened, or a "broken file" icon if it can't.
+ show->set_icon(get_theme_icon(!item.missing ? "Load" : "FileBroken", "EditorIcons"));
+ show->set_flat(true);
+ if (!item.grayed) {
+ // Don't make the icon less prominent if the parent is already grayed out.
+ show->set_modulate(Color(1, 1, 1, 0.5));
+ }
+ path_hb->add_child(show);
+
+ if (!item.missing) {
+ show->connect("pressed", callable_mp(this, &ProjectList::_show_project), varray(item.path));
+ show->set_tooltip(TTR("Show in File Manager"));
+ } else {
+ show->set_tooltip(TTR("Error: Project is missing on the filesystem."));
+ }
+
+ Label *fpath = memnew(Label(item.path));
+ fpath->set_structured_text_bidi_override(Control::STRUCTURED_TEXT_FILE);
+ path_hb->add_child(fpath);
+ fpath->set_h_size_flags(Control::SIZE_EXPAND_FILL);
+ fpath->set_modulate(Color(1, 1, 1, 0.5));
+ fpath->add_theme_color_override("font_color", font_color);
+ fpath->set_clip_text(true);
+ }
_scroll_children->add_child(hb);
item.control = hb;
@@ -1518,7 +1585,7 @@ void ProjectList::remove_project(int p_index, bool p_update_settings) {
}
memdelete(item.control);
- _projects.remove(p_index);
+ _projects.remove_at(p_index);
if (p_update_settings) {
EditorSettings::get_singleton()->erase("projects/" + item.project_key);
@@ -1609,8 +1676,7 @@ int ProjectList::refresh_project(const String &dir_path) {
if (should_be_in_list) {
// Recreate it with updated info
- Item item;
- load_project_data(property_key, item, is_favourite);
+ Item item = load_project_data(property_key, is_favourite);
_projects.push_back(item);
create_project_item_control(_projects.size() - 1);
@@ -1708,7 +1774,7 @@ void ProjectList::erase_selected_projects(bool p_delete_project_contents) {
}
memdelete(item.control);
- _projects.remove(i);
+ _projects.remove_at(i);
--i;
}
}
@@ -1744,7 +1810,7 @@ void ProjectList::_panel_input(const Ref<InputEvent> &p_ev, Node *p_hb) {
int clicked_index = p_hb->get_index();
const Item &clicked_project = _projects[clicked_index];
- if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == MouseButton::LEFT) {
if (mb->is_shift_pressed() && _selected_project_keys.size() > 0 && _last_clicked != "" && clicked_project.project_key != _last_clicked) {
int anchor_index = -1;
for (int i = 0; i < _projects.size(); ++i) {
@@ -1908,7 +1974,7 @@ void ProjectManager::unhandled_key_input(const Ref<InputEvent> &p_ev) {
// This is handled by the platform implementation on macOS,
// so only define the shortcut on other platforms
#ifndef OSX_ENABLED
- if (k->get_keycode_with_modifiers() == (KEY_MASK_CMD | KEY_Q)) {
+ if (k->get_keycode_with_modifiers() == (KeyModifierMask::CMD | Key::Q)) {
_dim_window();
get_tree()->quit();
}
@@ -1921,24 +1987,24 @@ void ProjectManager::unhandled_key_input(const Ref<InputEvent> &p_ev) {
bool keycode_handled = true;
switch (k->get_keycode()) {
- case KEY_ENTER: {
+ case Key::ENTER: {
_open_selected_projects_ask();
} break;
- case KEY_HOME: {
+ case Key::HOME: {
if (_project_list->get_project_count() > 0) {
_project_list->select_project(0);
_update_project_buttons();
}
} break;
- case KEY_END: {
+ case Key::END: {
if (_project_list->get_project_count() > 0) {
_project_list->select_project(_project_list->get_project_count() - 1);
_update_project_buttons();
}
} break;
- case KEY_UP: {
+ case Key::UP: {
if (k->is_shift_pressed()) {
break;
}
@@ -1952,7 +2018,7 @@ void ProjectManager::unhandled_key_input(const Ref<InputEvent> &p_ev) {
break;
}
- case KEY_DOWN: {
+ case Key::DOWN: {
if (k->is_shift_pressed()) {
break;
}
@@ -1965,7 +2031,7 @@ void ProjectManager::unhandled_key_input(const Ref<InputEvent> &p_ev) {
}
} break;
- case KEY_F: {
+ case Key::F: {
if (k->is_command_pressed()) {
this->search_box->grab_focus();
} else {
@@ -2062,8 +2128,7 @@ void ProjectManager::_open_selected_projects() {
args.push_back("--single-window");
}
- String exec = OS::get_singleton()->get_executable_path();
- Error err = OS::get_singleton()->create_process(exec, args);
+ Error err = OS::get_singleton()->create_instance(args);
ERR_FAIL_COND(err);
}
@@ -2090,8 +2155,12 @@ void ProjectManager::_open_selected_projects_ask() {
}
// Update the project settings or don't open
- String conf = project.path.plus_file("project.godot");
- int config_version = project.version;
+ const String conf = project.path.plus_file("project.godot");
+ const int config_version = project.version;
+ PackedStringArray unsupported_features = project.unsupported_features;
+
+ Label *ask_update_label = ask_update_settings->get_label();
+ ask_update_label->set_align(Label::ALIGN_LEFT); // Reset in case of previous center align.
// Check if the config_version property was empty or 0
if (config_version == 0) {
@@ -2111,6 +2180,35 @@ void ProjectManager::_open_selected_projects_ask() {
dialog_error->popup_centered();
return;
}
+ // Check if the project is using features not supported by this build of Godot.
+ if (!unsupported_features.is_empty()) {
+ String warning_message = "";
+ for (int i = 0; i < unsupported_features.size(); i++) {
+ String feature = unsupported_features[i];
+ if (feature == "Double Precision") {
+ warning_message += TTR("Warning: This project uses double precision floats, but this version of\nGodot uses single precision floats. Opening this project may cause data loss.\n\n");
+ unsupported_features.remove_at(i);
+ i--;
+ } else if (feature == "C#") {
+ warning_message += TTR("Warning: This project uses C#, but this build of Godot does not have\nthe Mono module. If you proceed you will not be able to use any C# scripts.\n\n");
+ unsupported_features.remove_at(i);
+ i--;
+ } else if (feature.substr(0, 3).is_numeric()) {
+ warning_message += vformat(TTR("Warning: This project was built in Godot %s.\nOpening will upgrade or downgrade the project to Godot %s.\n\n"), Variant(feature), Variant(VERSION_BRANCH));
+ unsupported_features.remove_at(i);
+ i--;
+ }
+ }
+ if (!unsupported_features.is_empty()) {
+ String unsupported_features_str = Variant(unsupported_features).operator String().trim_prefix("[").trim_suffix("]");
+ warning_message += vformat(TTR("Warning: This project uses the following features not supported by this build of Godot:\n\n%s\n\n"), unsupported_features_str);
+ }
+ warning_message += TTR("Open anyway? Project will be modified.");
+ ask_update_label->set_align(Label::ALIGN_CENTER);
+ ask_update_settings->set_text(warning_message);
+ ask_update_settings->popup_centered();
+ return;
+ }
// Open if the project is up-to-date
_open_selected_projects();
@@ -2148,8 +2246,7 @@ void ProjectManager::_run_project_confirm() {
args.push_back("--disable-crash-handler");
}
- String exec = OS::get_singleton()->get_executable_path();
- Error err = OS::get_singleton()->create_process(exec, args);
+ Error err = OS::get_singleton()->create_instance(args);
ERR_FAIL_COND(err);
}
}
@@ -2278,8 +2375,7 @@ void ProjectManager::_language_selected(int p_id) {
void ProjectManager::_restart_confirm() {
List<String> args = OS::get_singleton()->get_cmdline_args();
- String exec = OS::get_singleton()->get_executable_path();
- Error err = OS::get_singleton()->create_process(exec, args);
+ Error err = OS::get_singleton()->create_instance(args);
ERR_FAIL_COND(err);
_dim_window();
@@ -2394,6 +2490,11 @@ ProjectManager::ProjectManager() {
EditorSettings::create();
}
+ // Turn off some servers we aren't going to be using in the Project Manager.
+ NavigationServer3D::get_singleton()->set_active(false);
+ PhysicsServer3D::get_singleton()->set_active(false);
+ PhysicsServer2D::get_singleton()->set_active(false);
+
EditorSettings::get_singleton()->set_optimize_save(false); //just write settings as they came
{
@@ -2532,19 +2633,19 @@ ProjectManager::ProjectManager() {
Button *create = memnew(Button);
create->set_text(TTR("New Project"));
- create->set_shortcut(ED_SHORTCUT("project_manager/new_project", TTR("New Project"), KEY_MASK_CMD | KEY_N));
+ create->set_shortcut(ED_SHORTCUT("project_manager/new_project", TTR("New Project"), KeyModifierMask::CMD | Key::N));
create->connect("pressed", callable_mp(this, &ProjectManager::_new_project));
tree_vb->add_child(create);
Button *import = memnew(Button);
import->set_text(TTR("Import"));
- import->set_shortcut(ED_SHORTCUT("project_manager/import_project", TTR("Import Project"), KEY_MASK_CMD | KEY_I));
+ import->set_shortcut(ED_SHORTCUT("project_manager/import_project", TTR("Import Project"), KeyModifierMask::CMD | Key::I));
import->connect("pressed", callable_mp(this, &ProjectManager::_import_project));
tree_vb->add_child(import);
Button *scan = memnew(Button);
scan->set_text(TTR("Scan"));
- scan->set_shortcut(ED_SHORTCUT("project_manager/scan_projects", TTR("Scan Projects"), KEY_MASK_CMD | KEY_S));
+ scan->set_shortcut(ED_SHORTCUT("project_manager/scan_projects", TTR("Scan Projects"), KeyModifierMask::CMD | Key::S));
scan->connect("pressed", callable_mp(this, &ProjectManager::_scan_projects));
tree_vb->add_child(scan);
@@ -2552,25 +2653,26 @@ ProjectManager::ProjectManager() {
open_btn = memnew(Button);
open_btn->set_text(TTR("Edit"));
- open_btn->set_shortcut(ED_SHORTCUT("project_manager/edit_project", TTR("Edit Project"), KEY_MASK_CMD | KEY_E));
+ open_btn->set_shortcut(ED_SHORTCUT("project_manager/edit_project", TTR("Edit Project"), KeyModifierMask::CMD | Key::E));
open_btn->connect("pressed", callable_mp(this, &ProjectManager::_open_selected_projects_ask));
tree_vb->add_child(open_btn);
run_btn = memnew(Button);
run_btn->set_text(TTR("Run"));
- run_btn->set_shortcut(ED_SHORTCUT("project_manager/run_project", TTR("Run Project"), KEY_MASK_CMD | KEY_R));
+ run_btn->set_shortcut(ED_SHORTCUT("project_manager/run_project", TTR("Run Project"), KeyModifierMask::CMD | Key::R));
run_btn->connect("pressed", callable_mp(this, &ProjectManager::_run_project));
tree_vb->add_child(run_btn);
rename_btn = memnew(Button);
rename_btn->set_text(TTR("Rename"));
- rename_btn->set_shortcut(ED_SHORTCUT("project_manager/rename_project", TTR("Rename Project"), KEY_F2));
+ // The F2 shortcut isn't overridden with Enter on macOS as Enter is already used to edit a project.
+ rename_btn->set_shortcut(ED_SHORTCUT("project_manager/rename_project", TTR("Rename Project"), Key::F2));
rename_btn->connect("pressed", callable_mp(this, &ProjectManager::_rename_project));
tree_vb->add_child(rename_btn);
erase_btn = memnew(Button);
erase_btn->set_text(TTR("Remove"));
- erase_btn->set_shortcut(ED_SHORTCUT("project_manager/remove_project", TTR("Remove Project"), KEY_DELETE));
+ erase_btn->set_shortcut(ED_SHORTCUT("project_manager/remove_project", TTR("Remove Project"), Key::KEY_DELETE));
erase_btn->connect("pressed", callable_mp(this, &ProjectManager::_erase_project));
tree_vb->add_child(erase_btn);
diff --git a/editor/property_editor.cpp b/editor/property_editor.cpp
index db560af657..061f4d218a 100644
--- a/editor/property_editor.cpp
+++ b/editor/property_editor.cpp
@@ -312,7 +312,7 @@ bool CustomPropertyEditor::edit(Object *p_owner, const String &p_name, Variant::
spinbox->hide();
slider->hide();
menu->clear();
- menu->set_size(Size2(1, 1) * EDSCALE);
+ menu->reset_size();
for (int i = 0; i < MAX_VALUE_EDITORS; i++) {
if (i < MAX_VALUE_EDITORS / 4) {
@@ -1343,7 +1343,7 @@ void CustomPropertyEditor::_action_pressed(int p_which) {
void CustomPropertyEditor::_drag_easing(const Ref<InputEvent> &p_ev) {
Ref<InputEventMouseMotion> mm = p_ev;
- if (mm.is_valid() && mm->get_button_mask() & MOUSE_BUTTON_MASK_LEFT) {
+ if (mm.is_valid() && (mm->get_button_mask() & MouseButton::MASK_LEFT) != MouseButton::NONE) {
float rel = mm->get_relative().x;
if (rel == 0) {
return;
@@ -1628,7 +1628,7 @@ real_t CustomPropertyEditor::_parse_real_expression(String text) {
}
void CustomPropertyEditor::_emit_changed_whole_or_field() {
- if (!Input::get_singleton()->is_key_pressed(KEY_SHIFT)) {
+ if (!Input::get_singleton()->is_key_pressed(Key::SHIFT)) {
emit_signal(SNAME("variant_changed"));
} else {
emit_signal(SNAME("variant_field_changed"), field_names[focused_value_editor]);
@@ -1671,7 +1671,7 @@ void CustomPropertyEditor::_focus_exit() {
}
void CustomPropertyEditor::config_action_buttons(const List<String> &p_strings) {
- Ref<StyleBox> sb = action_buttons[0]->get_theme_stylebox(SNAME("panel"));
+ Ref<StyleBox> sb = action_buttons[0]->get_theme_stylebox(SNAME("button"));
int margin_top = sb->get_margin(SIDE_TOP);
int margin_left = sb->get_margin(SIDE_LEFT);
int margin_bottom = sb->get_margin(SIDE_BOTTOM);
@@ -1804,26 +1804,18 @@ CustomPropertyEditor::CustomPropertyEditor() {
}
text_edit = memnew(TextEdit);
- add_child(text_edit);
+ value_vbox->add_child(text_edit);
text_edit->set_anchors_and_offsets_preset(Control::PRESET_WIDE, Control::PRESET_MODE_MINSIZE, 5);
+ text_edit->set_v_size_flags(Control::SIZE_EXPAND_FILL);
text_edit->set_offset(SIDE_BOTTOM, -30);
text_edit->hide();
text_edit->connect("text_changed", callable_mp(this, &CustomPropertyEditor::_text_edit_changed));
- for (int i = 0; i < MAX_ACTION_BUTTONS; i++) {
- action_buttons[i] = memnew(Button);
- action_buttons[i]->hide();
- add_child(action_buttons[i]);
- Vector<Variant> binds;
- binds.push_back(i);
- action_buttons[i]->connect("pressed", callable_mp(this, &CustomPropertyEditor::_action_pressed), binds);
- }
-
color_picker = nullptr;
file = memnew(EditorFileDialog);
- add_child(file);
+ value_vbox->add_child(file);
file->hide();
file->connect("file_selected", callable_mp(this, &CustomPropertyEditor::_file_selected));
@@ -1831,46 +1823,58 @@ CustomPropertyEditor::CustomPropertyEditor() {
error = memnew(ConfirmationDialog);
error->set_title(TTR("Error!"));
- add_child(error);
+ value_vbox->add_child(error);
scene_tree = memnew(SceneTreeDialog);
- add_child(scene_tree);
+ value_vbox->add_child(scene_tree);
scene_tree->connect("selected", callable_mp(this, &CustomPropertyEditor::_node_path_selected));
scene_tree->get_scene_tree()->set_show_enabled_subscene(true);
texture_preview = memnew(TextureRect);
- add_child(texture_preview);
+ value_vbox->add_child(texture_preview);
texture_preview->hide();
easing_draw = memnew(Control);
- add_child(easing_draw);
+ value_vbox->add_child(easing_draw);
easing_draw->hide();
easing_draw->connect("draw", callable_mp(this, &CustomPropertyEditor::_draw_easing));
easing_draw->connect("gui_input", callable_mp(this, &CustomPropertyEditor::_drag_easing));
easing_draw->set_default_cursor_shape(Control::CURSOR_MOVE);
type_button = memnew(MenuButton);
- add_child(type_button);
+ value_vbox->add_child(type_button);
type_button->hide();
type_button->get_popup()->connect("id_pressed", callable_mp(this, &CustomPropertyEditor::_type_create_selected));
menu = memnew(PopupMenu);
// menu->set_pass_on_modal_close_click(false);
- add_child(menu);
+ value_vbox->add_child(menu);
menu->connect("id_pressed", callable_mp(this, &CustomPropertyEditor::_menu_option));
evaluator = nullptr;
spinbox = memnew(SpinBox);
- add_child(spinbox);
+ value_vbox->add_child(spinbox);
spinbox->set_anchors_and_offsets_preset(Control::PRESET_WIDE, Control::PRESET_MODE_MINSIZE, 5);
spinbox->connect("value_changed", callable_mp(this, &CustomPropertyEditor::_range_modified));
slider = memnew(HSlider);
- add_child(slider);
+ value_vbox->add_child(slider);
slider->set_anchors_and_offsets_preset(Control::PRESET_WIDE, Control::PRESET_MODE_MINSIZE, 5);
slider->connect("value_changed", callable_mp(this, &CustomPropertyEditor::_range_modified));
+ action_hboxes = memnew(HBoxContainer);
+ action_hboxes->set_alignment(BoxContainer::ALIGN_CENTER);
+ value_vbox->add_child(action_hboxes);
+ for (int i = 0; i < MAX_ACTION_BUTTONS; i++) {
+ action_buttons[i] = memnew(Button);
+ action_buttons[i]->hide();
+ action_hboxes->add_child(action_buttons[i]);
+ Vector<Variant> binds;
+ binds.push_back(i);
+ action_buttons[i]->connect("pressed", callable_mp(this, &CustomPropertyEditor::_action_pressed), binds);
+ }
+
create_dialog = nullptr;
property_select = nullptr;
}
diff --git a/editor/property_editor.h b/editor/property_editor.h
index 23771b7494..2565c6ee27 100644
--- a/editor/property_editor.h
+++ b/editor/property_editor.h
@@ -110,6 +110,7 @@ class CustomPropertyEditor : public PopupPanel {
int focused_value_editor;
Label *value_label[MAX_VALUE_EDITORS];
HScrollBar *scroll[4];
+ HBoxContainer *action_hboxes;
Button *action_buttons[MAX_ACTION_BUTTONS];
MenuButton *type_button;
Vector<String> inheritors_array;
diff --git a/editor/property_selector.cpp b/editor/property_selector.cpp
index f167ded4e7..877b4552c1 100644
--- a/editor/property_selector.cpp
+++ b/editor/property_selector.cpp
@@ -44,10 +44,10 @@ void PropertySelector::_sbox_input(const Ref<InputEvent> &p_ie) {
if (k.is_valid()) {
switch (k->get_keycode()) {
- case KEY_UP:
- case KEY_DOWN:
- case KEY_PAGEUP:
- case KEY_PAGEDOWN: {
+ case Key::UP:
+ case Key::DOWN:
+ case Key::PAGEUP:
+ case Key::PAGEDOWN: {
search_options->gui_input(k);
search_box->accept_event();
diff --git a/editor/quick_open.cpp b/editor/quick_open.cpp
index f0ec78bde6..7868414d89 100644
--- a/editor/quick_open.cpp
+++ b/editor/quick_open.cpp
@@ -167,10 +167,10 @@ void EditorQuickOpen::_sbox_input(const Ref<InputEvent> &p_ie) {
Ref<InputEventKey> k = p_ie;
if (k.is_valid()) {
switch (k->get_keycode()) {
- case KEY_UP:
- case KEY_DOWN:
- case KEY_PAGEUP:
- case KEY_PAGEDOWN: {
+ case Key::UP:
+ case Key::DOWN:
+ case Key::PAGEUP:
+ case Key::PAGEDOWN: {
search_options->gui_input(k);
search_box->accept_event();
diff --git a/editor/rename_dialog.cpp b/editor/rename_dialog.cpp
index 2792c193d9..eb73f88e61 100644
--- a/editor/rename_dialog.cpp
+++ b/editor/rename_dialog.cpp
@@ -30,6 +30,7 @@
#include "rename_dialog.h"
+#include "modules/modules_enabled.gen.h" // For regex.
#ifdef MODULE_REGEX_ENABLED
#include "core/string/print_string.h"
@@ -461,7 +462,7 @@ String RenameDialog::_substitute(const String &subject, const Node *node, int co
void RenameDialog::_error_handler(void *p_self, const char *p_func, const char *p_file, int p_line, const char *p_error, const char *p_errorexp, bool p_editor_notify, ErrorHandlerType p_type) {
RenameDialog *self = (RenameDialog *)p_self;
- String source_file(p_file);
+ String source_file = String::utf8(p_file);
// Only show first error that is related to "regex"
if (self->has_errors || source_file.find("regex") < 0) {
@@ -470,9 +471,9 @@ void RenameDialog::_error_handler(void *p_self, const char *p_func, const char *
String err_str;
if (p_errorexp && p_errorexp[0]) {
- err_str = p_errorexp;
+ err_str = String::utf8(p_errorexp);
} else {
- err_str = p_error;
+ err_str = String::utf8(p_error);
}
self->has_errors = true;
diff --git a/editor/rename_dialog.h b/editor/rename_dialog.h
index 4db3ef6740..f383877eb2 100644
--- a/editor/rename_dialog.h
+++ b/editor/rename_dialog.h
@@ -31,17 +31,16 @@
#ifndef RENAME_DIALOG_H
#define RENAME_DIALOG_H
-#include "modules/modules_enabled.gen.h"
+#include "modules/modules_enabled.gen.h" // For regex.
#ifdef MODULE_REGEX_ENABLED
+#include "core/object/undo_redo.h"
+#include "editor/scene_tree_editor.h"
#include "scene/gui/check_box.h"
#include "scene/gui/dialogs.h"
#include "scene/gui/option_button.h"
#include "scene/gui/spin_box.h"
-#include "core/object/undo_redo.h"
-#include "editor/scene_tree_editor.h"
-
/**
@author Blazej Floch
*/
diff --git a/editor/scene_tree_dock.cpp b/editor/scene_tree_dock.cpp
index 4a59eb4fb3..611038a947 100644
--- a/editor/scene_tree_dock.cpp
+++ b/editor/scene_tree_dock.cpp
@@ -47,10 +47,13 @@
#include "editor/plugins/script_editor_plugin.h"
#include "editor/shader_create_dialog.h"
#include "scene/main/window.h"
+#include "scene/property_utils.h"
#include "scene/resources/packed_scene.h"
#include "servers/display_server.h"
#include "servers/rendering_server.h"
+#include "modules/modules_enabled.gen.h" // For regex.
+
void SceneTreeDock::_nodes_drag_begin() {
if (restore_script_editor_on_drag) {
EditorNode::get_singleton()->set_visible_editor(EditorNode::EDITOR_SCRIPT);
@@ -67,7 +70,7 @@ void SceneTreeDock::input(const Ref<InputEvent> &p_event) {
Ref<InputEventMouseButton> mb = p_event;
- if (mb.is_valid() && !mb->is_pressed() && mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (mb.is_valid() && !mb->is_pressed() && mb->get_button_index() == MouseButton::LEFT) {
restore_script_editor_on_drag = false; //lost chance
}
}
@@ -213,7 +216,7 @@ void SceneTreeDock::_perform_instantiate_scenes(const Vector<String> &p_files, N
for (int i = 0; i < instances.size(); i++) {
Node *instantiated_scene = instances[i];
- editor_data->get_undo_redo().add_do_method(parent, "add_child", instantiated_scene);
+ editor_data->get_undo_redo().add_do_method(parent, "add_child", instantiated_scene, true);
if (p_pos >= 0) {
editor_data->get_undo_redo().add_do_method(parent, "move_child", instantiated_scene, p_pos + i);
}
@@ -258,8 +261,8 @@ void SceneTreeDock::_replace_with_branch_scene(const String &p_file, Node *base)
int pos = base->get_index();
undo_redo->add_do_method(parent, "remove_child", base);
undo_redo->add_undo_method(parent, "remove_child", instantiated_scene);
- undo_redo->add_do_method(parent, "add_child", instantiated_scene);
- undo_redo->add_undo_method(parent, "add_child", base);
+ undo_redo->add_do_method(parent, "add_child", instantiated_scene, true);
+ undo_redo->add_undo_method(parent, "add_child", base, true);
undo_redo->add_do_method(parent, "move_child", instantiated_scene, pos);
undo_redo->add_undo_method(parent, "move_child", base, pos);
@@ -511,7 +514,7 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) {
ERR_CONTINUE(!dup);
- editor_data->get_undo_redo().add_do_method(paste_parent, "add_child", dup);
+ editor_data->get_undo_redo().add_do_method(paste_parent, "add_child", dup, true);
for (KeyValue<const Node *, Node *> &E2 : duplimap) {
Node *d = E2.value;
@@ -813,7 +816,7 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) {
editor_data->get_undo_redo().create_action(TTR("Make node as Root"));
editor_data->get_undo_redo().add_do_method(node->get_parent(), "remove_child", node);
editor_data->get_undo_redo().add_do_method(editor, "set_edited_scene", node);
- editor_data->get_undo_redo().add_do_method(node, "add_child", root);
+ editor_data->get_undo_redo().add_do_method(node, "add_child", root, true);
editor_data->get_undo_redo().add_do_method(node, "set_scene_file_path", root->get_scene_file_path());
editor_data->get_undo_redo().add_do_method(root, "set_scene_file_path", String());
editor_data->get_undo_redo().add_do_method(node, "set_owner", (Object *)nullptr);
@@ -824,7 +827,7 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) {
editor_data->get_undo_redo().add_undo_method(node, "set_scene_file_path", String());
editor_data->get_undo_redo().add_undo_method(node, "remove_child", root);
editor_data->get_undo_redo().add_undo_method(editor, "set_edited_scene", root);
- editor_data->get_undo_redo().add_undo_method(node->get_parent(), "add_child", node);
+ editor_data->get_undo_redo().add_undo_method(node->get_parent(), "add_child", node, true);
editor_data->get_undo_redo().add_undo_method(node->get_parent(), "move_child", node, node->get_index());
editor_data->get_undo_redo().add_undo_method(root, "set_owner", (Object *)nullptr);
editor_data->get_undo_redo().add_undo_method(node, "set_owner", root);
@@ -896,7 +899,7 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) {
// Resize the dialog to its minimum size.
// This prevents the dialog from being too wide after displaying
// a deletion confirmation for a node with a long name.
- delete_dialog->set_size(Size2());
+ delete_dialog->reset_size();
delete_dialog->popup_centered();
}
@@ -1192,7 +1195,7 @@ void SceneTreeDock::_node_collapsed(Object *p_obj) {
return;
}
- if (Input::get_singleton()->is_key_pressed(KEY_SHIFT)) {
+ if (Input::get_singleton()->is_key_pressed(Key::SHIFT)) {
_set_collapsed_recursive(ti, ti->is_collapsed());
}
}
@@ -1785,7 +1788,7 @@ void SceneTreeDock::_do_reparent(Node *p_new_parent, int p_position_in_parent, V
}
editor_data->get_undo_redo().add_do_method(node->get_parent(), "remove_child", node);
- editor_data->get_undo_redo().add_do_method(new_parent, "add_child", node);
+ editor_data->get_undo_redo().add_do_method(new_parent, "add_child", node, true);
if (p_position_in_parent >= 0) {
editor_data->get_undo_redo().add_do_method(new_parent, "move_child", node, p_position_in_parent + inc);
@@ -1858,7 +1861,7 @@ void SceneTreeDock::_do_reparent(Node *p_new_parent, int p_position_in_parent, V
int child_pos = node->get_index();
- editor_data->get_undo_redo().add_undo_method(node->get_parent(), "add_child", node);
+ editor_data->get_undo_redo().add_undo_method(node->get_parent(), "add_child", node, true);
editor_data->get_undo_redo().add_undo_method(node->get_parent(), "move_child", node, child_pos);
editor_data->get_undo_redo().add_undo_method(this, "_set_owners", edited_scene, owners);
if (AnimationPlayerEditor::get_singleton()->get_track_editor()->get_root() == node) {
@@ -2071,7 +2074,7 @@ void SceneTreeDock::_delete_confirm(bool p_cut) {
}
editor_data->get_undo_redo().add_do_method(n->get_parent(), "remove_child", n);
- editor_data->get_undo_redo().add_undo_method(n->get_parent(), "add_child", n);
+ editor_data->get_undo_redo().add_undo_method(n->get_parent(), "add_child", n, true);
editor_data->get_undo_redo().add_undo_method(n->get_parent(), "move_child", n, n->get_index());
if (AnimationPlayerEditor::get_singleton()->get_track_editor()->get_root() == n) {
editor_data->get_undo_redo().add_undo_method(AnimationPlayerEditor::get_singleton()->get_track_editor(), "set_root", n);
@@ -2153,7 +2156,7 @@ void SceneTreeDock::_do_create(Node *p_parent) {
editor_data->get_undo_redo().create_action(TTR("Create Node"));
if (edited_scene) {
- editor_data->get_undo_redo().add_do_method(p_parent, "add_child", child);
+ editor_data->get_undo_redo().add_do_method(p_parent, "add_child", child, true);
editor_data->get_undo_redo().add_do_method(child, "set_owner", edited_scene);
editor_data->get_undo_redo().add_do_method(editor_selection, "clear");
editor_data->get_undo_redo().add_do_method(editor_selection, "add_node", child);
@@ -2572,7 +2575,7 @@ void SceneTreeDock::_files_dropped(Vector<String> p_files, NodePath p_to, int p_
menu_properties->set_item_metadata(menu_properties->get_item_count() - 1, p);
}
- menu_properties->set_size(Size2(1, 1));
+ menu_properties->reset_size();
menu_properties->set_position(get_screen_position() + get_local_mouse_position());
menu_properties->popup();
} else if (!valid_properties.is_empty()) {
@@ -2615,7 +2618,7 @@ void SceneTreeDock::_nodes_dragged(Array p_nodes, NodePath p_to, int p_type) {
int to_pos = -1;
_normalize_drop(to_node, to_pos, p_type);
- _do_reparent(to_node, to_pos, nodes, !Input::get_singleton()->is_key_pressed(KEY_SHIFT));
+ _do_reparent(to_node, to_pos, nodes, !Input::get_singleton()->is_key_pressed(Key::SHIFT));
}
void SceneTreeDock::_add_children_to_popup(Object *p_obj, int p_depth) {
@@ -2664,7 +2667,7 @@ void SceneTreeDock::_tree_rmb(const Vector2 &p_menu_pos) {
menu->add_icon_shortcut(get_theme_icon(SNAME("Instance"), SNAME("EditorIcons")), ED_GET_SHORTCUT("scene_tree/instance_scene"), TOOL_INSTANTIATE);
}
- menu->set_size(Size2(1, 1));
+ menu->reset_size();
menu->set_position(get_screen_position() + p_menu_pos);
menu->popup();
return;
@@ -2687,7 +2690,7 @@ void SceneTreeDock::_tree_rmb(const Vector2 &p_menu_pos) {
if (profile_allow_editing) {
subresources.clear();
menu_subresources->clear();
- menu_subresources->set_size(Size2(1, 1));
+ menu_subresources->reset_size();
_add_children_to_popup(selection.front()->get(), 0);
if (menu->get_item_count() > 0) {
menu->add_separator();
@@ -2826,9 +2829,9 @@ void SceneTreeDock::_tree_rmb(const Vector2 &p_menu_pos) {
if (profile_allow_editing) {
menu->add_separator();
- menu->add_icon_shortcut(get_theme_icon(SNAME("Remove"), SNAME("EditorIcons")), ED_SHORTCUT("scene_tree/delete", TTR("Delete Node(s)"), KEY_DELETE), TOOL_ERASE);
+ menu->add_icon_shortcut(get_theme_icon(SNAME("Remove"), SNAME("EditorIcons")), ED_SHORTCUT("scene_tree/delete", TTR("Delete Node(s)"), Key::KEY_DELETE), TOOL_ERASE);
}
- menu->set_size(Size2(1, 1));
+ menu->reset_size();
menu->set_position(p_menu_pos);
menu->popup();
}
@@ -2840,7 +2843,7 @@ void SceneTreeDock::_open_tree_menu() {
menu->add_check_item(TTR("Auto Expand to Selected"), TOOL_AUTO_EXPAND);
menu->set_item_checked(menu->get_item_idx_from_text(TTR("Auto Expand to Selected")), EditorSettings::get_singleton()->get("docks/scene_tree/auto_expand_to_selected"));
- menu->set_size(Size2(1, 1));
+ menu->reset_size();
menu->set_position(get_screen_position() + get_local_mouse_position());
menu->popup();
}
@@ -2943,7 +2946,7 @@ void SceneTreeDock::open_script_dialog(Node *p_for_node, bool p_extend) {
}
}
-void SceneTreeDock::attach_shader_to_selected() {
+void SceneTreeDock::attach_shader_to_selected(int p_preferred_mode) {
if (selected_shader_material.is_null()) {
return;
}
@@ -2970,13 +2973,13 @@ void SceneTreeDock::attach_shader_to_selected() {
shader_create_dialog->connect("shader_created", callable_mp(this, &SceneTreeDock::_shader_created));
shader_create_dialog->connect("confirmed", callable_mp(this, &SceneTreeDock::_shader_creation_closed));
shader_create_dialog->connect("cancelled", callable_mp(this, &SceneTreeDock::_shader_creation_closed));
- shader_create_dialog->config(path);
+ shader_create_dialog->config(path, true, true, p_preferred_mode);
shader_create_dialog->popup_centered();
}
-void SceneTreeDock::open_shader_dialog(Ref<ShaderMaterial> &p_for_material) {
+void SceneTreeDock::open_shader_dialog(Ref<ShaderMaterial> &p_for_material, int p_preferred_mode) {
selected_shader_material = p_for_material;
- attach_shader_to_selected();
+ attach_shader_to_selected(p_preferred_mode);
}
void SceneTreeDock::open_add_child_dialog() {
@@ -3132,7 +3135,9 @@ void SceneTreeDock::_clear_clipboard() {
void SceneTreeDock::_create_remap_for_node(Node *p_node, Map<RES, RES> &r_remap) {
List<PropertyInfo> props;
p_node->get_property_list(&props);
- bool is_instantiated = EditorPropertyRevert::may_node_be_in_instance(p_node);
+
+ Vector<SceneState::PackState> states_stack;
+ bool states_stack_ready = false;
for (const PropertyInfo &E : props) {
if (!(E.usage & PROPERTY_USAGE_STORAGE)) {
@@ -3143,16 +3148,17 @@ void SceneTreeDock::_create_remap_for_node(Node *p_node, Map<RES, RES> &r_remap)
if (v.is_ref()) {
RES res = v;
if (res.is_valid()) {
- if (is_instantiated) {
- Variant orig;
- if (EditorPropertyRevert::get_instantiated_node_original_property(p_node, E.name, orig)) {
- if (!EditorPropertyRevert::is_node_property_different(p_node, v, orig)) {
- continue;
- }
- }
+ if (!states_stack_ready) {
+ states_stack = PropertyUtils::get_node_states_stack(p_node);
+ states_stack_ready = true;
}
- if ((res->get_path() == "" || res->get_path().find("::") > -1) && !r_remap.has(res)) {
+ Variant orig = PropertyUtils::get_property_default_value(p_node, E.name, &states_stack);
+ if (!PropertyUtils::is_property_value_different(v, orig)) {
+ continue;
+ }
+
+ if (res->is_built_in() && !r_remap.has(res)) {
_create_remap_for_resource(res, r_remap);
}
}
@@ -3179,7 +3185,7 @@ void SceneTreeDock::_create_remap_for_resource(RES p_resource, Map<RES, RES> &r_
if (v.is_ref()) {
RES res = v;
if (res.is_valid()) {
- if ((res->get_path() == "" || res->get_path().find("::") > -1) && !r_remap.has(res)) {
+ if (res->is_built_in() && !r_remap.has(res)) {
_create_remap_for_resource(res, r_remap);
}
}
@@ -3223,28 +3229,32 @@ SceneTreeDock::SceneTreeDock(EditorNode *p_editor, Node *p_scene_root, EditorSel
HBoxContainer *filter_hbc = memnew(HBoxContainer);
filter_hbc->add_theme_constant_override("separate", 0);
- ED_SHORTCUT("scene_tree/rename", TTR("Rename"), KEY_F2);
- ED_SHORTCUT("scene_tree/batch_rename", TTR("Batch Rename"), KEY_MASK_SHIFT | KEY_F2);
- ED_SHORTCUT("scene_tree/add_child_node", TTR("Add Child Node"), KEY_MASK_CMD | KEY_A);
- ED_SHORTCUT("scene_tree/instance_scene", TTR("Instantiate Child Scene"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_A);
+ ED_SHORTCUT("scene_tree/rename", TTR("Rename"), Key::F2);
+ ED_SHORTCUT_OVERRIDE("scene_tree/rename", "macos", Key::ENTER);
+
+ ED_SHORTCUT("scene_tree/batch_rename", TTR("Batch Rename"), KeyModifierMask::SHIFT | Key::F2);
+ ED_SHORTCUT_OVERRIDE("scene_tree/batch_rename", "macos", KeyModifierMask::SHIFT | Key::ENTER);
+
+ ED_SHORTCUT("scene_tree/add_child_node", TTR("Add Child Node"), KeyModifierMask::CMD | Key::A);
+ ED_SHORTCUT("scene_tree/instance_scene", TTR("Instantiate Child Scene"), KeyModifierMask::CMD | KeyModifierMask::SHIFT | Key::A);
ED_SHORTCUT("scene_tree/expand_collapse_all", TTR("Expand/Collapse All"));
- ED_SHORTCUT("scene_tree/cut_node", TTR("Cut"), KEY_MASK_CMD | KEY_X);
- ED_SHORTCUT("scene_tree/copy_node", TTR("Copy"), KEY_MASK_CMD | KEY_C);
- ED_SHORTCUT("scene_tree/paste_node", TTR("Paste"), KEY_MASK_CMD | KEY_V);
+ ED_SHORTCUT("scene_tree/cut_node", TTR("Cut"), KeyModifierMask::CMD | Key::X);
+ ED_SHORTCUT("scene_tree/copy_node", TTR("Copy"), KeyModifierMask::CMD | Key::C);
+ ED_SHORTCUT("scene_tree/paste_node", TTR("Paste"), KeyModifierMask::CMD | Key::V);
ED_SHORTCUT("scene_tree/change_node_type", TTR("Change Type"));
ED_SHORTCUT("scene_tree/attach_script", TTR("Attach Script"));
ED_SHORTCUT("scene_tree/extend_script", TTR("Extend Script"));
ED_SHORTCUT("scene_tree/detach_script", TTR("Detach Script"));
- ED_SHORTCUT("scene_tree/move_up", TTR("Move Up"), KEY_MASK_CMD | KEY_UP);
- ED_SHORTCUT("scene_tree/move_down", TTR("Move Down"), KEY_MASK_CMD | KEY_DOWN);
- ED_SHORTCUT("scene_tree/duplicate", TTR("Duplicate"), KEY_MASK_CMD | KEY_D);
+ ED_SHORTCUT("scene_tree/move_up", TTR("Move Up"), KeyModifierMask::CMD | Key::UP);
+ ED_SHORTCUT("scene_tree/move_down", TTR("Move Down"), KeyModifierMask::CMD | Key::DOWN);
+ ED_SHORTCUT("scene_tree/duplicate", TTR("Duplicate"), KeyModifierMask::CMD | Key::D);
ED_SHORTCUT("scene_tree/reparent", TTR("Reparent"));
ED_SHORTCUT("scene_tree/reparent_to_new_node", TTR("Reparent to New Node"));
ED_SHORTCUT("scene_tree/make_root", TTR("Make Scene Root"));
ED_SHORTCUT("scene_tree/save_branch_as_scene", TTR("Save Branch as Scene"));
- ED_SHORTCUT("scene_tree/copy_node_path", TTR("Copy Node Path"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_C);
- ED_SHORTCUT("scene_tree/delete_no_confirm", TTR("Delete (No Confirm)"), KEY_MASK_SHIFT | KEY_DELETE);
- ED_SHORTCUT("scene_tree/delete", TTR("Delete"), KEY_DELETE);
+ ED_SHORTCUT("scene_tree/copy_node_path", TTR("Copy Node Path"), KeyModifierMask::CMD | KeyModifierMask::SHIFT | Key::C);
+ ED_SHORTCUT("scene_tree/delete_no_confirm", TTR("Delete (No Confirm)"), KeyModifierMask::SHIFT | Key::KEY_DELETE);
+ ED_SHORTCUT("scene_tree/delete", TTR("Delete"), Key::KEY_DELETE);
button_add = memnew(Button);
button_add->set_flat(true);
diff --git a/editor/scene_tree_dock.h b/editor/scene_tree_dock.h
index 66000602fa..c6e47fa002 100644
--- a/editor/scene_tree_dock.h
+++ b/editor/scene_tree_dock.h
@@ -48,6 +48,8 @@
#include "scene/gui/tree.h"
#include "scene_tree_editor.h"
+#include "modules/modules_enabled.gen.h" // For regex.
+
class EditorNode;
class ShaderCreateDialog;
@@ -300,8 +302,8 @@ public:
void attach_script_to_selected(bool p_extend);
void open_script_dialog(Node *p_for_node, bool p_extend);
- void attach_shader_to_selected();
- void open_shader_dialog(Ref<ShaderMaterial> &p_for_material);
+ void attach_shader_to_selected(int p_preferred_mode = -1);
+ void open_shader_dialog(Ref<ShaderMaterial> &p_for_material, int p_preferred_mode = -1);
void open_add_child_dialog();
void open_instance_child_dialog();
diff --git a/editor/script_create_dialog.cpp b/editor/script_create_dialog.cpp
index 1e19d9bd47..fb1575ad8c 100644
--- a/editor/script_create_dialog.cpp
+++ b/editor/script_create_dialog.cpp
@@ -315,7 +315,9 @@ void ScriptCreateDialog::_create_new() {
}
}
- if (!is_built_in) {
+ if (is_built_in) {
+ scr->set_name(internal_name->get_text());
+ } else {
String lpath = ProjectSettings::get_singleton()->localize_path(file_path->get_text());
scr->set_path(lpath);
Error err = ResourceSaver::save(lpath, scr, ResourceSaver::FLAG_CHANGE_PATH);
@@ -686,6 +688,11 @@ void ScriptCreateDialog::_update_dialog() {
builtin_warning_label->set_visible(is_built_in);
+ path_controls[0]->set_visible(!is_built_in);
+ path_controls[1]->set_visible(!is_built_in);
+ name_controls[0]->set_visible(is_built_in);
+ name_controls[1]->set_visible(is_built_in);
+
// Check if the script name is the same as the parent class.
// This warning isn't relevant if the script is built-in.
script_name_warning_label->set_visible(!is_built_in && _get_class_name() == parent_name->get_text());
@@ -868,9 +875,24 @@ ScriptCreateDialog::ScriptCreateDialog() {
path_button = memnew(Button);
path_button->connect("pressed", callable_mp(this, &ScriptCreateDialog::_browse_path), varray(false, true));
hb->add_child(path_button);
- gc->add_child(memnew(Label(TTR("Path:"))));
+ Label *label = memnew(Label(TTR("Path:")));
+ gc->add_child(label);
gc->add_child(hb);
re_check_path = false;
+ path_controls[0] = label;
+ path_controls[1] = hb;
+
+ /* Name */
+
+ internal_name = memnew(LineEdit);
+ internal_name->set_h_size_flags(Control::SIZE_EXPAND_FILL);
+ label = memnew(Label(TTR("Name:")));
+ gc->add_child(label);
+ gc->add_child(internal_name);
+ name_controls[0] = label;
+ name_controls[1] = internal_name;
+ label->hide();
+ internal_name->hide();
/* Dialog Setup */
diff --git a/editor/script_create_dialog.h b/editor/script_create_dialog.h
index 7c2ef1e150..dba798eea7 100644
--- a/editor/script_create_dialog.h
+++ b/editor/script_create_dialog.h
@@ -57,6 +57,7 @@ class ScriptCreateDialog : public ConfirmationDialog {
OptionButton *language_menu;
OptionButton *template_menu;
LineEdit *file_path;
+ LineEdit *internal_name;
Button *path_button;
EditorFileDialog *file_browse;
CheckBox *internal;
@@ -81,6 +82,9 @@ class ScriptCreateDialog : public ConfirmationDialog {
int default_language;
bool re_check_path;
+ Control *path_controls[2];
+ Control *name_controls[2];
+
enum ScriptOrigin {
SCRIPT_ORIGIN_PROJECT,
SCRIPT_ORIGIN_EDITOR,
diff --git a/editor/settings_config_dialog.cpp b/editor/settings_config_dialog.cpp
index 78dc85aa7d..e1229729ac 100644
--- a/editor/settings_config_dialog.cpp
+++ b/editor/settings_config_dialog.cpp
@@ -164,7 +164,7 @@ void EditorSettingsDialog::unhandled_input(const Ref<InputEvent> &p_event) {
handled = true;
}
- if (k->get_keycode_with_modifiers() == (KEY_MASK_CMD | KEY_F)) {
+ if (k->get_keycode_with_modifiers() == (KeyModifierMask::CMD | Key::F)) {
_focus_current_search_box();
handled = true;
}
@@ -486,7 +486,7 @@ void EditorSettingsDialog::_shortcut_button_pressed(Object *p_item, int p_column
_update_shortcut_events(current_edited_identifier, Array());
}
} else if (type == "event") {
- current_events.remove(current_event_index);
+ current_events.remove_at(current_event_index);
if (is_editing_action) {
_update_builtin_action(current_edited_identifier, current_events);
@@ -564,7 +564,7 @@ void EditorSettingsDialog::drop_data_fw(const Point2 &p_point, const Variant &p_
Array events = selected->get_parent()->get_meta("events");
Variant event_moved = events[index_moving_from];
- events.remove(index_moving_from);
+ events.remove_at(index_moving_from);
events.insert(target_event_index, event_moved);
String ident = selected->get_parent()->get_meta("shortcut_identifier");
diff --git a/editor/shader_create_dialog.cpp b/editor/shader_create_dialog.cpp
index 8b02544156..23bdc06f95 100644
--- a/editor/shader_create_dialog.cpp
+++ b/editor/shader_create_dialog.cpp
@@ -324,7 +324,7 @@ void ShaderCreateDialog::_path_submitted(const String &p_path) {
ok_pressed();
}
-void ShaderCreateDialog::config(const String &p_base_path, bool p_built_in_enabled, bool p_load_enabled) {
+void ShaderCreateDialog::config(const String &p_base_path, bool p_built_in_enabled, bool p_load_enabled, int p_preferred_mode) {
if (p_base_path != "") {
initial_base_path = p_base_path.get_basename();
file_path->set_text(initial_base_path + "." + language_data[language_menu->get_selected()].default_extension);
@@ -338,6 +338,11 @@ void ShaderCreateDialog::config(const String &p_base_path, bool p_built_in_enabl
built_in_enabled = p_built_in_enabled;
load_enabled = p_load_enabled;
+ if (p_preferred_mode > -1) {
+ mode_menu->select(p_preferred_mode);
+ _mode_changed(p_preferred_mode);
+ }
+
_language_changed(current_language);
_path_changed(file_path->get_text());
}
diff --git a/editor/shader_create_dialog.h b/editor/shader_create_dialog.h
index 6962fa3d8d..be0a0cad06 100644
--- a/editor/shader_create_dialog.h
+++ b/editor/shader_create_dialog.h
@@ -108,7 +108,7 @@ protected:
static void _bind_methods();
public:
- void config(const String &p_base_path, bool p_built_in_enabled = true, bool p_load_enabled = true);
+ void config(const String &p_base_path, bool p_built_in_enabled = true, bool p_load_enabled = true, int p_preferred_mode = -1);
ShaderCreateDialog();
};
diff --git a/editor/translations/af.po b/editor/translations/af.po
index a38a5103d2..a1a19d1679 100644
--- a/editor/translations/af.po
+++ b/editor/translations/af.po
@@ -7803,11 +7803,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
@@ -11143,11 +11143,11 @@ msgid ""
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Key "
+msgid "Physical Key"
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Physical Key"
+msgid "Key "
msgstr ""
#: editor/project_settings_editor.cpp
diff --git a/editor/translations/ar.po b/editor/translations/ar.po
index 67b76771d2..c8cc51dd2c 100644
--- a/editor/translations/ar.po
+++ b/editor/translations/ar.po
@@ -61,8 +61,8 @@ msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-09-19 11:14+0000\n"
-"Last-Translator: Mohammed Mubarak <modymu9@gmail.com>\n"
+"PO-Revision-Date: 2021-11-11 08:00+0000\n"
+"Last-Translator: Nabeel20 <nabeelandnizam@gmail.com>\n"
"Language-Team: Arabic <https://hosted.weblate.org/projects/godot-engine/"
"godot/ar/>\n"
"Language: ar\n"
@@ -71,7 +71,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n"
-"X-Generator: Weblate 4.9-dev\n"
+"X-Generator: Weblate 4.9.1-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -641,9 +641,8 @@ msgid "Go to Previous Step"
msgstr "إذهب إلى الخطوة السابقة"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Apply Reset"
-msgstr "إعادة تعيين"
+msgstr "طَبق إعادة تعيين"
#: editor/animation_track_editor.cpp
msgid "Optimize Animation"
@@ -986,7 +985,6 @@ msgid "Edit..."
msgstr "تعديل..."
#: editor/connections_dialog.cpp
-#, fuzzy
msgid "Go to Method"
msgstr "إذهب إلى الدالة"
@@ -1108,17 +1106,16 @@ msgid "Owners Of:"
msgstr "ملاك:"
#: editor/dependency_editor.cpp
-#, fuzzy
msgid ""
"Remove the selected files from the project? (Cannot be undone.)\n"
"Depending on your filesystem configuration, the files will either be moved "
"to the system trash or deleted permanently."
msgstr ""
-"Ø­Ø°Ù Ø§Ù„Ù…Ù„ÙØ§Øª المختارة من المشروع؟ (لا يمكن استعادتها)\n"
-"يمكنك إيجاد Ø§Ù„Ù…Ù„ÙØ§Øª Ø§Ù„Ù…Ø­Ø°ÙˆÙØ© ÙÙŠ سلة مهملات النظام حيث يمكنك إسترجاعها."
+"Ø­Ø°Ù Ø§Ù„Ù…Ù„ÙØ§Øª Ø§Ù„Ù…ÙØ®ØªØ§Ø±Ø© من المشروع؟ (لا يمكن استعادتها).\n"
+"حسب Ø¥ÙØ¹Ø¯Ø§Ø¯Ø§Øª Ù…ÙØ¯ÙŠØ± Ù…Ù„ÙØ§ØªÙÙƒ, Ø¥Ùما سيتم نقل الملقات Ø¥Ùلى سلة المÙهملات Ø£ÙŽÙˆ سيتم حذÙها "
+"نهائياً."
#: editor/dependency_editor.cpp
-#, fuzzy
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
@@ -1126,9 +1123,10 @@ msgid ""
"Depending on your filesystem configuration, the files will either be moved "
"to the system trash or deleted permanently."
msgstr ""
-"Ø§Ù„Ù…Ù„ÙØ§Øª التي يتم إزالتها مطلوبة من قبل موارد أخرى من اجل ان تعمل.\n"
-"هل تريد إزالتها على أي حال؟ (لا تراجع)\n"
-"يمكنك العثور على Ø§Ù„Ù…Ù„ÙØ§Øª التي تمت إزالتها ÙÙŠ مهملات النظام لاستعادتها."
+"Ø§Ù„Ù…Ù„ÙØ§Øª التي يتم إزالتها مطلوبة من قبل موارد أخرى من اجل Ø£ÙŽÙ† تعمل.\n"
+"هل تريد إزالتها على أي حال؟ (لا تراجع).\n"
+"حسب Ø¥ÙØ¹Ø¯Ø§Ø¯Ø§Øª Ù…ÙØ¯ÙŠØ± Ù…Ù„ÙØ§ØªÙÙƒ, Ø¥Ùما سيتم نقل الملقات Ø¥Ùلى سلة المÙهملات Ø£ÙŽÙˆ سيتم حذÙها "
+"نهائياً."
#: editor/dependency_editor.cpp
msgid "Cannot remove:"
@@ -1298,9 +1296,8 @@ msgid "Licenses"
msgstr "تراخيص"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Error opening asset file for \"%s\" (not in ZIP format)."
-msgstr "حدث خطأ Ø¹Ù†Ø¯ÙØªØ­ مل٠الحزمة بسبب أن المل٠ليس ÙÙŠ صيغة \"ZIP\"."
+msgstr "حدث خطأ Ø¹Ù†Ø¯ÙØªØ­ مل٠%s الحزمة بسبب أن المل٠ليس ÙÙŠ صيغة \"ZIP\"."
#: editor/editor_asset_installer.cpp
msgid "%s (already exists)"
@@ -1883,14 +1880,12 @@ msgid "Current Profile:"
msgstr "المل٠(النسخة) الحالية:"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Create Profile"
-msgstr "مسح الملÙ"
+msgstr "أصنع حساب"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Remove Profile"
-msgstr "إزالة البلاط"
+msgstr "أمسح الحساب"
#: editor/editor_feature_profile.cpp
msgid "Available Profiles:"
@@ -1910,9 +1905,8 @@ msgid "Export"
msgstr "تصدير"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Configure Selected Profile:"
-msgstr "المل٠(النسخة) الحالية:"
+msgstr "عدل على الحساب الحالي:"
#: editor/editor_feature_profile.cpp
#, fuzzy
@@ -2588,7 +2582,7 @@ msgstr "هل تريد Ø­ÙØ¸ التغييرات إلي'%s' قبل الإغلاق
#: editor/editor_node.cpp
msgid "%s no longer exists! Please specify a new save location."
-msgstr ""
+msgstr "%s لم يعد موجوداً! من ÙØ¶Ù„Ùƒ حدد موقعاً جديداً Ù„Ù„Ø­ÙØ¸."
#: editor/editor_node.cpp
msgid ""
@@ -2635,11 +2629,11 @@ msgstr "لم يتم Ø­ÙØ¸ المشهد الحالي. Ø¥ÙØªØ­Ù‡ علي أية Ø
#: editor/editor_node.cpp
msgid "Can't undo while mouse buttons are pressed."
-msgstr ""
+msgstr "لا يمكن التراجع أثناء ضغط أزار Ø§Ù„ÙØ£Ø±Ø©."
#: editor/editor_node.cpp
msgid "Nothing to undo."
-msgstr ""
+msgstr "لا شيء للتراجع عنه."
#: editor/editor_node.cpp
#, fuzzy
@@ -2648,11 +2642,11 @@ msgstr "تراجع"
#: editor/editor_node.cpp
msgid "Can't redo while mouse buttons are pressed."
-msgstr ""
+msgstr "لا يمكن إعادة العمل أثناء ضغط أزرار Ø§Ù„ÙØ£Ø±Ø©."
#: editor/editor_node.cpp
msgid "Nothing to redo."
-msgstr ""
+msgstr "لا شيء لإعادة عمله مجدداً."
#: editor/editor_node.cpp
#, fuzzy
@@ -3599,7 +3593,7 @@ msgstr ""
#: editor/editor_resource_picker.cpp
msgid "Quick Load"
-msgstr ""
+msgstr "تحميل سريع"
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
@@ -7805,14 +7799,14 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr "لا يملك هذا الهكيل أيّة عظام، أنشئ بعض عÙقد العظام ثنائية Ø§Ù„Ø¨ÙØ¹Ø¯ كأبناء."
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
-msgstr "إنشاء وضعية الراحة من العظام"
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Set Rest Pose to Bones"
msgstr "تحديد وضعية الراحة على العظام"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Create Rest Pose from Bones"
+msgstr "إنشاء وضعية الراحة من العظام"
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Skeleton2D"
msgstr "هيكل ثنائي Ø§Ù„Ø¨ÙØ¹Ø¯"
@@ -11284,14 +11278,14 @@ msgstr ""
"عنه query على الأقل حر٠`/` واحد."
#: editor/project_settings_editor.cpp
-msgid "Key "
-msgstr "زر "
-
-#: editor/project_settings_editor.cpp
msgid "Physical Key"
msgstr "الزر الÙيزيائي"
#: editor/project_settings_editor.cpp
+msgid "Key "
+msgstr "زر "
+
+#: editor/project_settings_editor.cpp
msgid "Joy Button"
msgstr "زر Joy"
diff --git a/editor/translations/az.po b/editor/translations/az.po
index 76fb760ac1..df60e7757a 100644
--- a/editor/translations/az.po
+++ b/editor/translations/az.po
@@ -7515,11 +7515,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
@@ -10699,11 +10699,11 @@ msgid ""
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Key "
+msgid "Physical Key"
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Physical Key"
+msgid "Key "
msgstr ""
#: editor/project_settings_editor.cpp
diff --git a/editor/translations/bg.po b/editor/translations/bg.po
index c4ad5a3993..98f60b8518 100644
--- a/editor/translations/bg.po
+++ b/editor/translations/bg.po
@@ -7514,14 +7514,14 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
-msgstr "Създаване на поза на Ð¿Ð¾ÐºÐ¾Ñ Ð¾Ñ‚ коÑтите"
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Create Rest Pose from Bones"
+msgstr "Създаване на поза на Ð¿Ð¾ÐºÐ¾Ñ Ð¾Ñ‚ коÑтите"
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Skeleton2D"
msgstr ""
@@ -10720,11 +10720,11 @@ msgid ""
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Key "
+msgid "Physical Key"
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Physical Key"
+msgid "Key "
msgstr ""
#: editor/project_settings_editor.cpp
diff --git a/editor/translations/bn.po b/editor/translations/bn.po
index 96a57f9dd5..a8581e7f45 100644
--- a/editor/translations/bn.po
+++ b/editor/translations/bn.po
@@ -8227,15 +8227,15 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Set Rest Pose to Bones"
+msgstr ""
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
#, fuzzy
msgid "Create Rest Pose from Bones"
msgstr "Mesh হতে Emitter তৈরি করà§à¦¨"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
-msgstr ""
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
#, fuzzy
msgid "Skeleton2D"
msgstr "সà§à¦•েলেটন/কাঠাম..."
@@ -11793,14 +11793,14 @@ msgid ""
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Key "
-msgstr "কী/চাবি "
-
-#: editor/project_settings_editor.cpp
msgid "Physical Key"
msgstr ""
#: editor/project_settings_editor.cpp
+msgid "Key "
+msgstr "কী/চাবি "
+
+#: editor/project_settings_editor.cpp
msgid "Joy Button"
msgstr "জয়সà§à¦Ÿà¦¿à¦• বোতাম"
diff --git a/editor/translations/br.po b/editor/translations/br.po
index 071e1f021c..3cbe4155a9 100644
--- a/editor/translations/br.po
+++ b/editor/translations/br.po
@@ -7436,11 +7436,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
@@ -10614,11 +10614,11 @@ msgid ""
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Key "
+msgid "Physical Key"
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Physical Key"
+msgid "Key "
msgstr ""
#: editor/project_settings_editor.cpp
diff --git a/editor/translations/ca.po b/editor/translations/ca.po
index 26f7646086..22b9e47836 100644
--- a/editor/translations/ca.po
+++ b/editor/translations/ca.po
@@ -7892,15 +7892,15 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr "Aquest esquelet no té ossos, crea alguns nodes Bone2D fills."
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Set Rest Pose to Bones"
+msgstr "Estableix la Postura de Repòs als Ossos"
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
#, fuzzy
msgid "Create Rest Pose from Bones"
msgstr "Crea Punts d'Emissió des d'una Malla"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
-msgstr "Estableix la Postura de Repòs als Ossos"
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Skeleton2D"
msgstr "Esquelet2D"
@@ -11447,14 +11447,14 @@ msgid ""
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Key "
-msgstr "Tecla "
-
-#: editor/project_settings_editor.cpp
msgid "Physical Key"
msgstr ""
#: editor/project_settings_editor.cpp
+msgid "Key "
+msgstr "Tecla "
+
+#: editor/project_settings_editor.cpp
msgid "Joy Button"
msgstr "Botó de la Maneta"
diff --git a/editor/translations/cs.po b/editor/translations/cs.po
index 598ff4163c..34de7ebc7a 100644
--- a/editor/translations/cs.po
+++ b/editor/translations/cs.po
@@ -26,13 +26,14 @@
# Václav Blažej <vaclavblazej@seznam.cz>, 2020, 2021.
# ProfJack <profjackcz@gmail.com>, 2021.
# swifterik <blaha.j502@gmail.com>, 2021.
+# Daniel <dan@ger.cz>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-09-15 00:46+0000\n"
-"Last-Translator: Zbyněk <zbynek.fiala@gmail.com>\n"
+"PO-Revision-Date: 2021-10-27 21:45+0000\n"
+"Last-Translator: Daniel <dan@ger.cz>\n"
"Language-Team: Czech <https://hosted.weblate.org/projects/godot-engine/godot/"
"cs/>\n"
"Language: cs\n"
@@ -389,15 +390,13 @@ msgstr "Animace: vložit"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "node '%s'"
-msgstr "Nelze otevřít '%s'."
+msgstr "uzel '%s'"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "animation"
-msgstr "Animace"
+msgstr "animace"
#: editor/animation_track_editor.cpp
msgid "AnimationPlayer can't animate itself, only other players."
@@ -405,9 +404,8 @@ msgstr "AnimationPlayer nemůže animovat sám sebe, pouze ostatní pÅ™ehrávaÄ
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "property '%s'"
-msgstr "Vlastnost '%s' neexistuje."
+msgstr "vlastnost '%s'"
#: editor/animation_track_editor.cpp
msgid "Anim Create & Insert"
@@ -554,7 +552,7 @@ msgstr "Seskupit stopy podle uzlu nebo je zobrazit jako jednoduchý seznam."
#: editor/animation_track_editor.cpp
msgid "Snap:"
-msgstr "Přichycení:"
+msgstr "Přichytit:"
#: editor/animation_track_editor.cpp
msgid "Animation step value."
@@ -965,7 +963,6 @@ msgid "Edit..."
msgstr "Upravit..."
#: editor/connections_dialog.cpp
-#, fuzzy
msgid "Go to Method"
msgstr "Přejít na metodu"
@@ -987,7 +984,7 @@ msgstr "Žádné výsledky pro \"%s\"."
#: editor/create_dialog.cpp editor/property_selector.cpp
msgid "No description available for %s."
-msgstr ""
+msgstr "Pro %s není dostupný popis."
#: editor/create_dialog.cpp editor/editor_file_dialog.cpp
#: editor/filesystem_dock.cpp
@@ -1087,17 +1084,16 @@ msgid "Owners Of:"
msgstr "Vlastníci:"
#: editor/dependency_editor.cpp
-#, fuzzy
msgid ""
"Remove the selected files from the project? (Cannot be undone.)\n"
"Depending on your filesystem configuration, the files will either be moved "
"to the system trash or deleted permanently."
msgstr ""
-"Odebrat vybrané soubory z projektu? (Nelze vrátit zpět)\n"
-"Odebrané soubory budou v systémovém koši a obnovit je."
+"Odebrat vybrané soubory z projektu? (Nelze vrátit zpět.)\n"
+"V závislosti na konfiguraci souborového systému budou soubory buÄ pÅ™esunuty "
+"do systémového koše, nebo trvale odstraněny."
#: editor/dependency_editor.cpp
-#, fuzzy
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
@@ -1105,9 +1101,10 @@ msgid ""
"Depending on your filesystem configuration, the files will either be moved "
"to the system trash or deleted permanently."
msgstr ""
-"Soubory ke smazání potÅ™ebují jiné zdroje ke své Äinnosti.\n"
-"Přesto je chcete smazat? (nelze vrátit zpět)\n"
-"Odebrané soubory budou v systémovém koši a obnovit je."
+"Odstraňované soubory potÅ™ebují jiné zdroje ke své Äinnosti.\n"
+"Chcete je přesto odstranit? (Nelze vrátit zpět.)\n"
+"V závislosti na konfiguraci souborového systému budou soubory buÄ pÅ™esunuty "
+"do systémového koše, nebo trvale odstraněny."
#: editor/dependency_editor.cpp
msgid "Cannot remove:"
@@ -1179,7 +1176,7 @@ msgstr "Děkujeme za komunitu Godotu!"
#: editor/editor_about.cpp editor/editor_node.cpp editor/project_manager.cpp
msgid "Click to copy."
-msgstr ""
+msgstr "Klikněte pro zkopírování."
#: editor/editor_about.cpp
msgid "Godot Engine contributors"
@@ -1277,41 +1274,37 @@ msgid "Licenses"
msgstr "Licence"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Error opening asset file for \"%s\" (not in ZIP format)."
-msgstr "Chyba pÅ™i otevírání balíÄku (není ve formátu ZIP)."
+msgstr "Chyba pÅ™i otevírání balíÄku \"%s\" (není ve formátu ZIP)."
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "%s (already exists)"
msgstr "%s (již existuje)"
#: editor/editor_asset_installer.cpp
msgid "Contents of asset \"%s\" - %d file(s) conflict with your project:"
-msgstr ""
+msgstr "Obsah balíÄku \"%s\" - %d souborů koliduje s vaším projektem:"
#: editor/editor_asset_installer.cpp
msgid "Contents of asset \"%s\" - No files conflict with your project:"
msgstr ""
+"Obsah balíÄku \"%s\" - Žádné soubory nejsou v konfliktu s vaším projektem:"
#: editor/editor_asset_installer.cpp
msgid "Uncompressing Assets"
msgstr "Dekomprese uživatelského obsahu"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "The following files failed extraction from asset \"%s\":"
-msgstr "Selhala extrakce následujících souborů z balíÄku:"
+msgstr "Následující soubory se nepodaÅ™ilo extrahovat z balíÄku \"%s\":"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "(and %s more files)"
-msgstr "A %s dalších souborů."
+msgstr "(a %s dalších souborů)"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Asset \"%s\" installed successfully!"
-msgstr "BalíÄek byl úspěšnÄ› nainstalován!"
+msgstr "BalíÄek \"%s\" byl úspěšnÄ› nainstalován!"
#: editor/editor_asset_installer.cpp
#: editor/plugins/asset_library_editor_plugin.cpp
@@ -1323,7 +1316,6 @@ msgid "Install"
msgstr "Instalovat"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Asset Installer"
msgstr "Instalátor balíÄků"
@@ -1556,13 +1548,12 @@ msgid "Can't add autoload:"
msgstr "Nelze pÅ™idat auto-naÄítání:"
#: editor/editor_autoload_settings.cpp
-#, fuzzy
msgid "%s is an invalid path. File does not exist."
-msgstr "Soubor neexistuje."
+msgstr "%s je neplatná cesta. Soubor neexistuje."
#: editor/editor_autoload_settings.cpp
msgid "%s is an invalid path. Not in resource path (res://)."
-msgstr ""
+msgstr "%s je neplatná cesta. Není v cestě ke zdrojům (res://)."
#: editor/editor_autoload_settings.cpp
msgid "Add AutoLoad"
@@ -1586,9 +1577,8 @@ msgid "Name"
msgstr "Název"
#: editor/editor_autoload_settings.cpp
-#, fuzzy
msgid "Global Variable"
-msgstr "Proměnná"
+msgstr "Globální proměnná"
#: editor/editor_data.cpp
msgid "Paste Params"
@@ -1762,48 +1752,50 @@ msgstr "Importovat panel"
#: editor/editor_feature_profile.cpp
msgid "Allows to view and edit 3D scenes."
-msgstr ""
+msgstr "Umožňuje prohlížet a upravovat 3D scény."
#: editor/editor_feature_profile.cpp
msgid "Allows to edit scripts using the integrated script editor."
-msgstr ""
+msgstr "Umožňuje upravovat skripty pomocí integrovaného editoru skriptů."
#: editor/editor_feature_profile.cpp
msgid "Provides built-in access to the Asset Library."
-msgstr ""
+msgstr "Poskytuje integrovaný přístup ke KnihovnÄ› balíÄků."
#: editor/editor_feature_profile.cpp
msgid "Allows editing the node hierarchy in the Scene dock."
-msgstr ""
+msgstr "Umožňuje upravovat hierarchii uzlů v doku scény."
#: editor/editor_feature_profile.cpp
msgid ""
"Allows to work with signals and groups of the node selected in the Scene "
"dock."
-msgstr ""
+msgstr "Umožňuje pracovat se signály a skupinami uzlu vybraného v doku scény."
#: editor/editor_feature_profile.cpp
msgid "Allows to browse the local file system via a dedicated dock."
msgstr ""
+"Umožňuje procházet místní souborový systém prostřednictvím vyhrazeného doku."
#: editor/editor_feature_profile.cpp
msgid ""
"Allows to configure import settings for individual assets. Requires the "
"FileSystem dock to function."
msgstr ""
+"Umožňuje konfigurovat nastavení importu pro jednotlivé zdroje. Pro svou "
+"funkci vyžaduje dok Souborový systém."
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "(current)"
-msgstr "(Aktuální)"
+msgstr "(aktuální)"
#: editor/editor_feature_profile.cpp
msgid "(none)"
-msgstr ""
+msgstr "(žádný)"
#: editor/editor_feature_profile.cpp
msgid "Remove currently selected profile, '%s'? Cannot be undone."
-msgstr ""
+msgstr "Odstranit aktuálně vybraný profil, '%s'? Nelze vrátit zpět."
#: editor/editor_feature_profile.cpp
msgid "Profile must be a valid filename and must not contain '.'"
@@ -1834,19 +1826,16 @@ msgid "Enable Contextual Editor"
msgstr "Aktivovat kontextový editor"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Class Properties:"
-msgstr "Vlastnosti:"
+msgstr "Vlastnosti třídy:"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Main Features:"
-msgstr "Vlastnosti"
+msgstr "Hlavní funkce:"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Nodes and Classes:"
-msgstr "Povolené třídy:"
+msgstr "Uzly a třídy:"
#: editor/editor_feature_profile.cpp
msgid "File '%s' format is invalid, import aborted."
@@ -1863,7 +1852,6 @@ msgid "Error saving profile to path: '%s'."
msgstr "Chyba při ukládání profilu do cesty: '%s '."
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Reset to Default"
msgstr "Obnovit výchozí"
@@ -1872,14 +1860,12 @@ msgid "Current Profile:"
msgstr "Aktuální profil:"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Create Profile"
-msgstr "Smazat profil"
+msgstr "Vytvořit profil"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Remove Profile"
-msgstr "Odstranit dlaždici"
+msgstr "Odstranit profil"
#: editor/editor_feature_profile.cpp
msgid "Available Profiles:"
@@ -1899,18 +1885,16 @@ msgid "Export"
msgstr "Export"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Configure Selected Profile:"
-msgstr "Aktuální profil:"
+msgstr "Konfigurace vybraného profilu:"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Extra Options:"
-msgstr "Možnosti třídy:"
+msgstr "Další možnosti:"
#: editor/editor_feature_profile.cpp
msgid "Create or import a profile to edit available classes and properties."
-msgstr ""
+msgstr "Vytvořte nebo importujte profil a upravte dostupné třídy a vlastnosti."
#: editor/editor_feature_profile.cpp
msgid "New profile name:"
@@ -1937,9 +1921,8 @@ msgid "Select Current Folder"
msgstr "Vybrat stávající složku"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
-#, fuzzy
msgid "File exists, overwrite?"
-msgstr "Soubor už existuje. Přepsat?"
+msgstr "Soubor existuje, přepsat?"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Select This Folder"
@@ -2337,6 +2320,9 @@ msgid ""
"Update Continuously is enabled, which can increase power usage. Click to "
"disable it."
msgstr ""
+"Aktivuje se při překreslování okna editoru.\n"
+"Je zapnuta funkce Průběžná aktualizace, která může zvýšit spotřebu energie. "
+"Klepnutím ji zakážete."
#: editor/editor_node.cpp
msgid "Spins when the editor window redraws."
@@ -2433,9 +2419,8 @@ msgstr ""
"(instance nebo dÄ›diÄnosti)."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Could not save one or more scenes!"
-msgstr "Nelze spustit podproces!"
+msgstr "Nelze uložit jednu nebo více scén!"
#: editor/editor_node.cpp
msgid "Save All Scenes"
@@ -2577,20 +2562,23 @@ msgstr "Uložit změny '%s' před zavřením?"
#: editor/editor_node.cpp
msgid "%s no longer exists! Please specify a new save location."
-msgstr ""
+msgstr "%s již neexistuje! Zadejte prosím nové umístění pro uložení."
#: editor/editor_node.cpp
msgid ""
"The current scene has no root node, but %d modified external resource(s) "
"were saved anyway."
msgstr ""
+"Aktuální scéna nemá kořenový uzel, ale přesto bylo uloženo %d upravených "
+"externích zdrojů."
#: editor/editor_node.cpp
-#, fuzzy
msgid ""
"A root node is required to save the scene. You can add a root node using the "
"Scene tree dock."
-msgstr "Pro uložení scény je vyžadován kořenový uzel."
+msgstr ""
+"Pro uložení scény je nutný kořenový uzel. Kořenový uzel můžete přidat pomocí "
+"doku Strom scény."
#: editor/editor_node.cpp
msgid "Save Scene As..."
@@ -2622,29 +2610,27 @@ msgstr "Aktuální scéna neuložena. Přesto otevřít?"
#: editor/editor_node.cpp
msgid "Can't undo while mouse buttons are pressed."
-msgstr ""
+msgstr "Nelze vrátit zpÄ›t, když jsou stisknuta tlaÄítka myÅ¡i."
#: editor/editor_node.cpp
msgid "Nothing to undo."
-msgstr ""
+msgstr "Není co vracet."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Undo: %s"
-msgstr "Zpět"
+msgstr "Zpět: %s"
#: editor/editor_node.cpp
msgid "Can't redo while mouse buttons are pressed."
-msgstr ""
+msgstr "Nelze opakovat, když jsou stisknuta tlaÄítka myÅ¡i."
#: editor/editor_node.cpp
msgid "Nothing to redo."
-msgstr ""
+msgstr "Není co opakovat."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Redo: %s"
-msgstr "Znovu"
+msgstr "Opakovat: %s"
#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
@@ -2929,11 +2915,11 @@ msgstr "Konvertovat na..."
#: editor/editor_node.cpp
msgid "MeshLibrary..."
-msgstr "MeshLibrary..."
+msgstr "Knihovna modelů..."
#: editor/editor_node.cpp
msgid "TileSet..."
-msgstr "TileSet..."
+msgstr "Sada dlaždic..."
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
@@ -2991,9 +2977,8 @@ msgid "Orphan Resource Explorer..."
msgstr "Průzkumník osiřelých zdrojů..."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Reload Current Project"
-msgstr "Přejmenovat projekt"
+msgstr "Znovu naÄíst aktuální projekt"
#: editor/editor_node.cpp
msgid "Quit to Project List"
@@ -3151,13 +3136,12 @@ msgid "Help"
msgstr "Nápověda"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Online Documentation"
-msgstr "Otevřít dokumentaci"
+msgstr "Online dokumentace"
#: editor/editor_node.cpp
msgid "Questions & Answers"
-msgstr ""
+msgstr "Otázky & odpovědi"
#: editor/editor_node.cpp
msgid "Report a Bug"
@@ -3165,7 +3149,7 @@ msgstr "Nahlásit chybu"
#: editor/editor_node.cpp
msgid "Suggest a Feature"
-msgstr ""
+msgstr "Navrhnout funkci"
#: editor/editor_node.cpp
msgid "Send Docs Feedback"
@@ -3176,9 +3160,8 @@ msgid "Community"
msgstr "Komunita"
#: editor/editor_node.cpp
-#, fuzzy
msgid "About Godot"
-msgstr "O aplikaci"
+msgstr "O aplikaci Godot"
#: editor/editor_node.cpp
msgid "Support Godot Development"
@@ -3271,14 +3254,12 @@ msgid "Manage Templates"
msgstr "Spravovat šablony"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Install from file"
msgstr "Instalovat ze souboru"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Select android sources file"
-msgstr "Vyberte zdrojovou síť:"
+msgstr "Vyberte soubor se zdroji pro Android"
#: editor/editor_node.cpp
msgid ""
@@ -3326,9 +3307,8 @@ msgid "Merge With Existing"
msgstr "SlouÄit s existující"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Apply MeshInstance Transforms"
-msgstr "Animace: Změna transformace"
+msgstr "Použít transformace MeshInstance"
#: editor/editor_node.cpp
msgid "Open & Run a Script"
@@ -3365,9 +3345,8 @@ msgid "Select"
msgstr "Vybrat"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Select Current"
-msgstr "Vybrat stávající složku"
+msgstr "Vybrat aktuální"
#: editor/editor_node.cpp
msgid "Open 2D Editor"
@@ -3402,9 +3381,8 @@ msgid "No sub-resources found."
msgstr "Nebyly nalezeny žádné dílÄí zdroje."
#: editor/editor_path.cpp
-#, fuzzy
msgid "Open a list of sub-resources."
-msgstr "Nebyly nalezeny žádné dílÄí zdroje."
+msgstr "OtevÅ™ete seznam dílÄích zdrojů."
#: editor/editor_plugin.cpp
msgid "Creating Mesh Previews"
@@ -3431,14 +3409,12 @@ msgid "Update"
msgstr "Aktualizovat"
#: editor/editor_plugin_settings.cpp
-#, fuzzy
msgid "Version"
-msgstr "Verze:"
+msgstr "Verze"
#: editor/editor_plugin_settings.cpp
-#, fuzzy
msgid "Author"
-msgstr "Autoři"
+msgstr "Autor"
#: editor/editor_plugin_settings.cpp
#: editor/plugins/version_control_editor_plugin.cpp
@@ -3451,14 +3427,12 @@ msgid "Measure:"
msgstr "Měření:"
#: editor/editor_profiler.cpp
-#, fuzzy
msgid "Frame Time (ms)"
-msgstr "Čas snímku (sek.)"
+msgstr "Čas snímku (ms)"
#: editor/editor_profiler.cpp
-#, fuzzy
msgid "Average Time (ms)"
-msgstr "PrůmÄ›rný Äas (sek.)"
+msgstr "PrůmÄ›rný Äas (ms)"
#: editor/editor_profiler.cpp
msgid "Frame %"
@@ -3485,6 +3459,12 @@ msgid ""
"functions called by that function.\n"
"Use this to find individual functions to optimize."
msgstr ""
+"VÄetnÄ›: Zahrnuje Äas z jiných funkcí volaných touto funkcí.\n"
+"Slouží k odhalení úzkých míst.\n"
+"\n"
+"Vlastní: ZapoÄítává pouze Äas strávený v samotné funkci, nikoli v jiných "
+"funkcích volaných touto funkcí.\n"
+"Použijte k vyhledání jednotlivých funkcí, které je třeba optimalizovat."
#: editor/editor_profiler.cpp
msgid "Frame #:"
@@ -3589,7 +3569,7 @@ msgstr ""
#: editor/editor_resource_picker.cpp
msgid "Quick Load"
-msgstr ""
+msgstr "Rychlé naÄtení"
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
@@ -3610,9 +3590,8 @@ msgid "Paste"
msgstr "Vložit"
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
-#, fuzzy
msgid "Convert to %s"
-msgstr "Konvertovat na %s"
+msgstr "Převést na %s"
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "New %s"
@@ -3662,11 +3641,9 @@ msgid "Did you forget the '_run' method?"
msgstr "Nezapoměl jste metodu '_run'?"
#: editor/editor_spin_slider.cpp
-#, fuzzy
msgid "Hold %s to round to integers. Hold Shift for more precise changes."
msgstr ""
-"Podržte Ctrl pro zaokrouhlení na celá Äísla. Podržte Shift pro pÅ™esnÄ›jší "
-"úpravy."
+"Podržte %s pro zaokrouhlení na celá Äísla. Pro pÅ™esnÄ›jší zmÄ›ny podržte Shift."
#: editor/editor_sub_scene.cpp
msgid "Select Node(s) to Import"
@@ -3686,49 +3663,43 @@ msgstr "Import z uzlu:"
#: editor/export_template_manager.cpp
msgid "Open the folder containing these templates."
-msgstr ""
+msgstr "Otevřít složku obsahující tyto šablony."
#: editor/export_template_manager.cpp
msgid "Uninstall these templates."
-msgstr ""
+msgstr "Odinstalovat tyto šablony."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "There are no mirrors available."
-msgstr "Neexistuje '%s' soubor."
+msgstr "Nejsou k dispozici žádná zrcadla."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Retrieving the mirror list..."
-msgstr "Získávání zrcadel, prosím Äekejte..."
+msgstr "Získávání seznamu zrcadel..."
#: editor/export_template_manager.cpp
msgid "Starting the download..."
-msgstr ""
+msgstr "Zahájení stahování..."
#: editor/export_template_manager.cpp
msgid "Error requesting URL:"
msgstr "Chyba žádosti o URL:"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Connecting to the mirror..."
-msgstr "Připojuji se k zrcadlu..."
+msgstr "Připojení k zrcadlu..."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Can't resolve the requested address."
-msgstr "Nelze přeložit název hostitele:"
+msgstr "Nelze dohledat požadovanou adresu."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Can't connect to the mirror."
-msgstr "Nelze se připojit k hostiteli:"
+msgstr "Nelze se připojit k zrcadlu."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "No response from the mirror."
-msgstr "Žádná odpovÄ›Ä od hostitele:"
+msgstr "Zrcadlo neodpovídá."
#: editor/export_template_manager.cpp
#: editor/plugins/asset_library_editor_plugin.cpp
@@ -3736,18 +3707,16 @@ msgid "Request failed."
msgstr "Požadavek selhal."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Request ended up in a redirect loop."
-msgstr "Požadavek se nezdařil, příliš mnoho přesměrování"
+msgstr "Požadavek skonÄil ve smyÄce pÅ™esmÄ›rování."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Request failed:"
-msgstr "Požadavek selhal."
+msgstr "Požadavek selhal:"
#: editor/export_template_manager.cpp
msgid "Download complete; extracting templates..."
-msgstr ""
+msgstr "Stažení dokonÄeno; extrahování Å¡ablon..."
#: editor/export_template_manager.cpp
msgid "Cannot remove temporary file:"
@@ -3766,13 +3735,13 @@ msgid "Error getting the list of mirrors."
msgstr "Chyba při získávání seznamu zrcadel."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Error parsing JSON with the list of mirrors. Please report this issue!"
-msgstr "Chyba parsování JSON mirror list. Prosím nahlaste tuto chybu!"
+msgstr ""
+"Chyba při parsování JSON se seznamem zrcadel. Nahlaste prosím tento problém!"
#: editor/export_template_manager.cpp
msgid "Best available mirror"
-msgstr ""
+msgstr "Nejlepší dostupné zrcadlo"
#: editor/export_template_manager.cpp
msgid ""
@@ -3825,24 +3794,20 @@ msgid "SSL Handshake Error"
msgstr "Selhání SSL handshaku"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Can't open the export templates file."
-msgstr "Nelze otevřít zip soubor exportních šablon."
+msgstr "Nelze otevřít soubor exportních šablon."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Invalid version.txt format inside the export templates file: %s."
-msgstr "Neplatný formát version.txt uvnitř šablon: %s."
+msgstr "Nesprávný formát version.txt uvnitř souboru exportních šablon: %s."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "No version.txt found inside the export templates file."
-msgstr "Nenalezena version.txt uvnitř šablon."
+msgstr "V souboru exportních šablon nebyl nalezen soubor version.txt."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Error creating path for extracting templates:"
-msgstr "Chyba při vytváření cesty pro šablony:"
+msgstr "Chyba při vytváření cesty pro extrakci šablon:"
#: editor/export_template_manager.cpp
msgid "Extracting Export Templates"
@@ -3853,9 +3818,8 @@ msgid "Importing:"
msgstr "Importování:"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Remove templates for the version '%s'?"
-msgstr "Odstranit šablonu verze '%s'?"
+msgstr "Odstranit šablony pro verzi '%s'?"
#: editor/export_template_manager.cpp
msgid "Uncompressing Android Build Sources"
@@ -3872,67 +3836,62 @@ msgstr "Aktuální verze:"
#: editor/export_template_manager.cpp
msgid "Export templates are missing. Download them or install from a file."
msgstr ""
+"Chybí šablony pro export. Stáhněte si je nebo je nainstalujte ze souboru."
#: editor/export_template_manager.cpp
msgid "Export templates are installed and ready to be used."
-msgstr ""
+msgstr "Exportní šablony jsou nainstalovány a připraveny k použití."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Open Folder"
-msgstr "Otevřít soubor"
+msgstr "Otevřít složku"
#: editor/export_template_manager.cpp
msgid "Open the folder containing installed templates for the current version."
-msgstr ""
+msgstr "Otevře složku obsahující nainstalované šablony pro aktuální verzi."
#: editor/export_template_manager.cpp
msgid "Uninstall"
msgstr "Odinstalovat"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Uninstall templates for the current version."
-msgstr "PoÄáteÄní hodnota pro poÄítadlo"
+msgstr "Odinstalování šablon pro aktuální verzi."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Download from:"
-msgstr "Chyba při stahování"
+msgstr "Stáhnout z:"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Open in Web Browser"
-msgstr "Spustit v prohlížeÄi"
+msgstr "Otevřít v prohlížeÄi"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Copy Mirror URL"
-msgstr "Kopírovat chybu"
+msgstr "Kopírovat URL zrcadla"
#: editor/export_template_manager.cpp
msgid "Download and Install"
-msgstr ""
+msgstr "Stáhnout a instalovat"
#: editor/export_template_manager.cpp
msgid ""
"Download and install templates for the current version from the best "
"possible mirror."
msgstr ""
+"Stáhnutí a instalace šablon pro aktuální verzi z nejlepšího možného zrcadla."
#: editor/export_template_manager.cpp
msgid "Official export templates aren't available for development builds."
msgstr "Oficiální šablony exportu nejsou k dispozici pro vývojová sestavení."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Install from File"
msgstr "Instalovat ze souboru"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Install templates from a local file."
-msgstr "Importovat šablony ze ZIP souboru"
+msgstr "Instalace šablon z místního souboru."
#: editor/export_template_manager.cpp editor/find_in_files.cpp
#: editor/progress_dialog.cpp scene/gui/dialogs.cpp
@@ -3940,19 +3899,16 @@ msgid "Cancel"
msgstr "Zrušit"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Cancel the download of the templates."
-msgstr "Nelze otevřít zip soubor exportních šablon."
+msgstr "Zrušit stahování šablon."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Other Installed Versions:"
-msgstr "Instalované verze:"
+msgstr "Další nainstalované verze:"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Uninstall Template"
-msgstr "Odinstalovat"
+msgstr "Odinstalovat šablonu"
#: editor/export_template_manager.cpp
msgid "Select Template File"
@@ -3967,6 +3923,8 @@ msgid ""
"The templates will continue to download.\n"
"You may experience a short editor freeze when they finish."
msgstr ""
+"Šablony se budou stahovat i nadále.\n"
+"Po dokonÄení může dojít ke krátkému zamrznutí editoru."
#: editor/filesystem_dock.cpp
msgid "Favorites"
@@ -4113,35 +4071,32 @@ msgid "Collapse All"
msgstr "Sbalit vše"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Sort files"
-msgstr "Hledat soubory"
+msgstr "Seřadit soubory"
#: editor/filesystem_dock.cpp
msgid "Sort by Name (Ascending)"
-msgstr ""
+msgstr "Seřadit podle názvu (vzestupně)"
#: editor/filesystem_dock.cpp
msgid "Sort by Name (Descending)"
-msgstr ""
+msgstr "Seřadit podle názvu (sestupně)"
#: editor/filesystem_dock.cpp
msgid "Sort by Type (Ascending)"
-msgstr ""
+msgstr "Seřadit podle typu (vzestupně)"
#: editor/filesystem_dock.cpp
msgid "Sort by Type (Descending)"
-msgstr ""
+msgstr "Seřadit podle typu (sestupně)"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Sort by Last Modified"
-msgstr "Datum modifikace"
+msgstr "Seřadit podle poslední změny"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Sort by First Modified"
-msgstr "Datum modifikace"
+msgstr "Seřadit podle první změny"
#: editor/filesystem_dock.cpp
msgid "Duplicate..."
@@ -4153,7 +4108,7 @@ msgstr "Přejmenovat..."
#: editor/filesystem_dock.cpp
msgid "Focus the search box"
-msgstr ""
+msgstr "Přejít do vyhledávacího pole"
#: editor/filesystem_dock.cpp
msgid "Previous Folder/File"
@@ -4440,6 +4395,10 @@ msgid ""
"Selecting another resource in the FileSystem dock without clicking Reimport "
"first will discard changes made in the Import dock."
msgstr ""
+"Máte Äekající zmÄ›ny, které jeÅ¡tÄ› nebyly použity. Klepnutím na tlaÄítko Znovu "
+"importovat uplatníte změny provedené v možnostech importu.\n"
+"Výběrem jiného zdroje v doku Souborový systém bez předchozího kliknutí na "
+"tlaÄítko Znovu importovat se zmÄ›ny provedené v doku Import zruší."
#: editor/import_dock.cpp
msgid "Import As:"
@@ -4469,14 +4428,12 @@ msgid "Failed to load resource."
msgstr "Selhalo nahrání zdroje."
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Copy Properties"
-msgstr "Vlastnosti"
+msgstr "Kopírovat vlastnosti"
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Paste Properties"
-msgstr "Vlastnosti"
+msgstr "Vložit vlastnosti"
#: editor/inspector_dock.cpp
msgid "Make Sub-Resources Unique"
@@ -4501,23 +4458,20 @@ msgid "Save As..."
msgstr "Uložit jako..."
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Extra resource options."
-msgstr "Není v cestě ke zdroji."
+msgstr "Další možnosti zdrojů."
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Edit Resource from Clipboard"
-msgstr "Editovat schránku zdrojů"
+msgstr "Upravit zdroj ze schránky"
#: editor/inspector_dock.cpp
msgid "Copy Resource"
msgstr "Kopírovat zdroj"
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Make Resource Built-In"
-msgstr "Vytvořit vestavěný"
+msgstr "Vytvořit vestavěný zdroj"
#: editor/inspector_dock.cpp
msgid "Go to the previous edited object in history."
@@ -4532,9 +4486,8 @@ msgid "History of recently edited objects."
msgstr "Historie naposledy upravených objektů."
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Open documentation for this object."
-msgstr "Otevřít dokumentaci"
+msgstr "Otevřít dokumentaci k tomuto objektu."
#: editor/inspector_dock.cpp editor/scene_tree_dock.cpp
msgid "Open Documentation"
@@ -4545,9 +4498,8 @@ msgid "Filter properties"
msgstr "Filtrovat vlastnosti"
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Manage object properties."
-msgstr "Vlastnosti objektu."
+msgstr "Spravovat vlastnosti objektu."
#: editor/inspector_dock.cpp
msgid "Changes may be lost!"
@@ -4791,9 +4743,8 @@ msgid "Blend:"
msgstr "Prolínání:"
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
-#, fuzzy
msgid "Parameter Changed:"
-msgstr "Parametr změněn"
+msgstr "Změněný parametr:"
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
#: editor/plugins/animation_tree_player_editor_plugin.cpp
@@ -5519,11 +5470,11 @@ msgstr "všichni"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Search templates, projects, and demos"
-msgstr ""
+msgstr "Vyhledávání šablon, projektů a ukázek"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Search assets (excluding templates, projects, and demos)"
-msgstr ""
+msgstr "Vyhledávání zdrojů (kromě šablon, projektů a ukázek)"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Import..."
@@ -5567,7 +5518,7 @@ msgstr "ZIP soubor asetů"
#: editor/plugins/audio_stream_editor_plugin.cpp
msgid "Audio Preview Play/Pause"
-msgstr ""
+msgstr "Náhled zvuku Přehrát/Pozastavit"
#: editor/plugins/baked_lightmap_editor_plugin.cpp
msgid ""
@@ -5578,13 +5529,12 @@ msgstr ""
"Uložte scénu a zkuste to znovu."
#: editor/plugins/baked_lightmap_editor_plugin.cpp
-#, fuzzy
msgid ""
"No meshes to bake. Make sure they contain an UV2 channel and that the 'Use "
"In Baked Light' and 'Generate Lightmap' flags are on."
msgstr ""
-"Žádné sítÄ› k zapeÄení. UjistÄ›te se, že obsahují kanál UV2 a že je nastaven "
-"příznak \"Zapéct světlo\"."
+"Žádné sítÄ› k zapeÄení. UjistÄ›te se, že obsahují kanál UV2 a že jsou zapnuté "
+"pÅ™epínaÄe \"Použít v zapeÄeném svÄ›tle\" a \"Generovat svÄ›telnou mapu\"."
#: editor/plugins/baked_lightmap_editor_plugin.cpp
msgid "Failed creating lightmap images, make sure path is writable."
@@ -5727,15 +5677,13 @@ msgstr "Přemístit CanvasItem \"%s\" na (%d, %d)"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Locked"
-msgstr "UzamÄít vybraný"
+msgstr "ZamÄeno"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Grouped"
-msgstr "Skupiny"
+msgstr "Seskupené"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
@@ -5839,13 +5787,12 @@ msgstr "Upravit kotvy"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid ""
"Project Camera Override\n"
"Overrides the running project's camera with the editor viewport camera."
msgstr ""
-"Přepsat herní kameru\n"
-"Herní kamera se nahradí kamerou z pohledu editoru."
+"Přepsání projektové kamery\n"
+"Přepíše kameru spuštěného projektu kamerou v pohledu editoru."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -5854,6 +5801,9 @@ msgid ""
"No project instance running. Run the project from the editor to use this "
"feature."
msgstr ""
+"Přepsání projektové kamery\n"
+"Není spuštěna žádná instance projektu. Chcete-li tuto funkci použít, spusťte "
+"projekt z editoru."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -5921,31 +5871,26 @@ msgstr "Režim výběru"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Drag: Rotate selected node around pivot."
-msgstr "Odstranit vybraný uzel nebo přechod."
+msgstr "PÅ™etažení: OtáÄení vybraného uzlu kolem pivotu."
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Alt+Drag: Move selected node."
-msgstr "Alt+Táhnutí: Přemístit"
+msgstr "Alt+přetažení: Přesun vybraného uzlu."
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "V: Set selected node's pivot position."
-msgstr "Odstranit vybraný uzel nebo přechod."
+msgstr "V: Nastavení polohy pivotu vybraného uzlu."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Alt+RMB: Show list of all nodes at position clicked, including locked."
msgstr ""
-"Zobrazit seznam objektů v bodě kliknutí\n"
-"(stejné jako Alt+PTM v režimu výběru)."
+"Alt+PTM: Zobrazí seznam vÅ¡ech uzlů na kliknuté pozici, vÄetnÄ› uzamÄených."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "RMB: Add node at position clicked."
-msgstr ""
+msgstr "PTM: Přidání uzlu na pozici, na kterou bylo kliknuto."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -6183,14 +6128,12 @@ msgid "Clear Pose"
msgstr "Vymazat pózu"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Add Node Here"
-msgstr "Přidat uzel"
+msgstr "Přidání uzlu sem"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Instance Scene Here"
-msgstr "Scéna/Scény instance"
+msgstr "Instance scény sem"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Multiply grid step by 2"
@@ -6206,49 +6149,43 @@ msgstr "Přesunout pohled"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom to 3.125%"
-msgstr ""
+msgstr "Přiblížení na 3,125 %"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom to 6.25%"
-msgstr ""
+msgstr "Přiblížení na 6,25 %"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom to 12.5%"
-msgstr ""
+msgstr "Přiblížení na 12,5 %"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 25%"
-msgstr "Zmenšit"
+msgstr "Přiblížení na 25 %"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 50%"
-msgstr "Zmenšit"
+msgstr "Přiblížení na 50 %"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 100%"
-msgstr "Zmenšit"
+msgstr "Přiblížení na 100 %"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 200%"
-msgstr "Zmenšit"
+msgstr "Přiblížení na 200 %"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 400%"
-msgstr "Zmenšit"
+msgstr "Přiblížení na 400 %"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 800%"
-msgstr "Zmenšit"
+msgstr "Přiblížení na 800 %"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom to 1600%"
-msgstr ""
+msgstr "Přiblížení na 1600 %"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Add %s"
@@ -6493,9 +6430,8 @@ msgid "Couldn't create a single convex collision shape."
msgstr "Vytvoření jediného konvexního kolizního tvaru se nezdařilo."
#: editor/plugins/mesh_instance_editor_plugin.cpp
-#, fuzzy
msgid "Create Simplified Convex Shape"
-msgstr "Vytvořit jediný konvexní tvar"
+msgstr "Vytvoření zjednodušeného konvexního tvaru"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Single Convex Shape"
@@ -6530,9 +6466,8 @@ msgid "No mesh to debug."
msgstr "Žádná mesh pro debugování."
#: editor/plugins/mesh_instance_editor_plugin.cpp
-#, fuzzy
msgid "Mesh has no UV in layer %d."
-msgstr "Model nemá UV v této vrstvě"
+msgstr "Model nemá ve vrstvě %d žádné UV."
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "MeshInstance lacks a Mesh!"
@@ -6607,6 +6542,9 @@ msgid ""
"This is similar to single collision shape, but can result in a simpler "
"geometry in some cases, at the cost of accuracy."
msgstr ""
+"Vytvoří zjednodušený konvexní kolizní tvar.\n"
+"Je podobný jednoduchému koliznímu tvaru, ale v některých případech může vést "
+"k jednodušší geometrii na úkor přesnosti."
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Multiple Convex Collision Siblings"
@@ -6652,7 +6590,7 @@ msgstr "Rozbalit UV2 pro Lightmapu/AO"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Outline Mesh"
-msgstr "Vytvořit síť obrysu"
+msgstr "Vytvoření obrysového modelu"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Outline Size:"
@@ -6676,7 +6614,7 @@ msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
msgid "Mesh Library"
-msgstr "Knihovna síťí"
+msgstr "Knihovna modelů"
#: editor/plugins/mesh_library_editor_plugin.cpp
msgid "Add Item"
@@ -6739,7 +6677,7 @@ msgstr "Povrch je neplatný (žádné stěny)."
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Select a Source Mesh:"
-msgstr "Vyberte zdrojovou síť:"
+msgstr "Vyberte zdrojový model:"
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Select a Target Surface:"
@@ -7272,14 +7210,12 @@ msgid "Flip Portals"
msgstr "Převrátit horizontálně"
#: editor/plugins/room_manager_editor_plugin.cpp
-#, fuzzy
msgid "Room Generate Points"
-msgstr "PoÄet vygenerovaných bodů:"
+msgstr "Generovat body místnosti"
#: editor/plugins/room_manager_editor_plugin.cpp
-#, fuzzy
msgid "Generate Points"
-msgstr "PoÄet vygenerovaných bodů:"
+msgstr "Generovat body"
#: editor/plugins/room_manager_editor_plugin.cpp
#, fuzzy
@@ -7786,14 +7722,14 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr "Kostra nemá žádné kosti, vytvoř nějaké potomky Bone2D."
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
-msgstr "Vytvořit klidovou pózu z kostí"
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Set Rest Pose to Bones"
msgstr "Nastavit kosti podle klidové pózy"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Create Rest Pose from Bones"
+msgstr "Vytvořit klidovou pózu z kostí"
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Skeleton2D"
msgstr "Skeleton2D (Kostra 2D)"
@@ -7894,12 +7830,12 @@ msgstr "Perspektivní"
#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
#: editor/plugins/spatial_editor_plugin.cpp
msgid " [auto]"
-msgstr ""
+msgstr " [auto]"
#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
#: editor/plugins/spatial_editor_plugin.cpp
msgid " [portals active]"
-msgstr ""
+msgstr " [aktivní portály]"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
@@ -7928,20 +7864,17 @@ msgid "None"
msgstr "Žádné"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Rotate"
-msgstr "Režim otáÄení"
+msgstr "OtoÄit"
#. TRANSLATORS: This refers to the movement that changes the position of an object.
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Translate"
-msgstr "Posunout:"
+msgstr "Posunout"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Scale"
-msgstr "Zvětšení:"
+msgstr "Zvětšit"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Scaling: "
@@ -7964,52 +7897,44 @@ msgid "Animation Key Inserted."
msgstr "AnimaÄní klÃ­Ä vložen."
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Pitch:"
-msgstr "Stoupání"
+msgstr "Stoupání:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Yaw:"
-msgstr ""
+msgstr "Odklon (Yaw):"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Size:"
-msgstr "Velikost: "
+msgstr "Velikost:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Objects Drawn:"
-msgstr "Objekty vykreslené"
+msgstr "Kreslené objekty:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Material Changes:"
-msgstr "Změny materiálu"
+msgstr "Změny materiálu:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Shader Changes:"
-msgstr "Změny shaderu"
+msgstr "Změny shaderu:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Surface Changes:"
-msgstr "Změny povrchu"
+msgstr "Změny povrchu:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Draw Calls:"
-msgstr "Vykreslovací volání"
+msgstr "Vykreslovací volání:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Vertices:"
-msgstr "Vrcholy"
+msgstr "Vrcholy:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "FPS: %d (%s ms)"
-msgstr ""
+msgstr "FPS: %d (%s ms)"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Top View."
@@ -8156,6 +8081,8 @@ msgstr "Rotace pohledu uzamknuta"
msgid ""
"To zoom further, change the camera's clipping planes (View -> Settings...)"
msgstr ""
+"Chcete-li přiblížení zvětšit, změňte roviny oříznutí kamery (Zobrazit -> "
+"Nastavení...)"
#: editor/plugins/spatial_editor_plugin.cpp
msgid ""
@@ -8172,7 +8099,7 @@ msgstr "Konvertovat na %s"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "XForm Dialog"
-msgstr "XForm Dialog"
+msgstr "XForm dialog"
#: editor/plugins/spatial_editor_plugin.cpp
msgid ""
@@ -8313,7 +8240,7 @@ msgstr "4 výřezy"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Gizmos"
-msgstr "Gizmos"
+msgstr "Gizma"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "View Origin"
@@ -8609,7 +8536,7 @@ msgstr "VytvoÅ™it rámeÄky ze Sprite Sheet"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "SpriteFrames"
-msgstr "SpriteFrames"
+msgstr "Snímky spritu"
#: editor/plugins/texture_region_editor_plugin.cpp
msgid "Set Region Rect"
@@ -8695,18 +8622,16 @@ msgid "{num} font(s)"
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "No fonts found."
-msgstr "Nenalezeno!"
+msgstr "Nebyla nalezena žádná písma."
#: editor/plugins/theme_editor_plugin.cpp
msgid "{num} icon(s)"
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "No icons found."
-msgstr "Nenalezeno!"
+msgstr "Nebyly nalezeny žádné ikony."
#: editor/plugins/theme_editor_plugin.cpp
msgid "{num} stylebox(es)"
@@ -8735,9 +8660,8 @@ msgid "Importing items {n}/{n}"
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Updating the editor"
-msgstr "UkonÄit editor?"
+msgstr "Aktualizace editoru"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -8754,14 +8678,12 @@ msgid "With Data"
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select by data type:"
-msgstr "Vybrat uzel"
+msgstr "Výběr podle typu dat:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select all visible color items."
-msgstr "Vyberte složku pro skenování"
+msgstr "Vybrat všechny viditelné barevné položky."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible color items and their data."
@@ -8772,9 +8694,8 @@ msgid "Deselect all visible color items."
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select all visible constant items."
-msgstr "Nejprve vyberte nastavení ze seznamu!"
+msgstr "Vybrat všechny viditelné konstantní položky."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible constant items and their data."
@@ -8785,9 +8706,8 @@ msgid "Deselect all visible constant items."
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select all visible font items."
-msgstr "Nejprve vyberte nastavení ze seznamu!"
+msgstr "Vybrat všechny viditelné položky písma."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible font items and their data."
@@ -8798,19 +8718,16 @@ msgid "Deselect all visible font items."
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select all visible icon items."
-msgstr "Nejprve vyberte nastavení ze seznamu!"
+msgstr "Vybrat všechny viditelné položky ikon."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select all visible icon items and their data."
-msgstr "Nejprve vyberte nastavení ze seznamu!"
+msgstr "Vybrat všechny viditelné položky ikon a jejich data."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Deselect all visible icon items."
-msgstr "Nejprve vyberte nastavení ze seznamu!"
+msgstr "Zrušit výběr všech viditelných položek ikon."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible stylebox items."
@@ -8831,19 +8748,16 @@ msgid ""
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Collapse types."
-msgstr "Sbalit vše"
+msgstr "Sbalit typy."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Expand types."
-msgstr "Rozbalit vše"
+msgstr "Rozbalit typy."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select all Theme items."
-msgstr "Vybrat soubor šablony"
+msgstr "Vybrat všechny položky motivu."
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -8997,9 +8911,8 @@ msgid "Add Type:"
msgstr "Typ:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Item:"
-msgstr "Přidat položku"
+msgstr "Přidat položku:"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -9007,9 +8920,8 @@ msgid "Add StyleBox Item"
msgstr "Přidat všechny položky"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove Items:"
-msgstr "Odstranit položku"
+msgstr "Odstranit položky:"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Remove Class Items"
@@ -9050,9 +8962,8 @@ msgid "Editor Theme"
msgstr "Editovat téma"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select Another Theme Resource:"
-msgstr "Smazat zdroj"
+msgstr "Vybrerte jiný zdroj motivu:"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -9095,9 +9006,8 @@ msgid "Add Item Type"
msgstr "Přidat položku"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Node Types:"
-msgstr "Typ uzlu"
+msgstr "Typy uzlu:"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -9118,9 +9028,8 @@ msgid "Override all default type items."
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Theme:"
-msgstr "Téma"
+msgstr "Motiv:"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -9142,9 +9051,8 @@ msgid "Default Preview"
msgstr "Obnovit náhled"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select UI Scene:"
-msgstr "Vyberte zdrojovou síť:"
+msgstr "Vyberte scénu uživatelského rozhraní:"
#: editor/plugins/theme_editor_preview.cpp
msgid ""
@@ -9421,7 +9329,7 @@ msgstr "Bitmaska"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Priority"
-msgstr "Priority"
+msgstr "Priorita"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Icon"
@@ -9796,7 +9704,7 @@ msgstr "Boolean"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Sampler"
-msgstr "Sampler"
+msgstr "VzorkovaÄ"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Add input port"
@@ -10642,12 +10550,11 @@ msgstr ""
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "VisualShader"
-msgstr "VisualShader"
+msgstr "Vizuální shader"
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Edit Visual Property:"
-msgstr "Upravit vizuální vlastnost"
+msgstr "Upravit vizuální vlastnost:"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Visual Shader Mode Changed"
@@ -10959,7 +10866,7 @@ msgstr "InstalaÄní cesta k projektu:"
#: editor/project_manager.cpp
msgid "Renderer:"
-msgstr "Renderer:"
+msgstr "VykreslovaÄ:"
#: editor/project_manager.cpp
msgid "OpenGL ES 3.0"
@@ -11092,14 +10999,12 @@ msgid "Are you sure to run %d projects at once?"
msgstr "Jste si jisti, že chcete spustit %d projektů najednou?"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Remove %d projects from the list?"
-msgstr "Vyberte zařízení ze seznamu"
+msgstr "Odstranit %d projektů ze seznamu?"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Remove this project from the list?"
-msgstr "Vyberte zařízení ze seznamu"
+msgstr "Odstranit tento projekt ze seznamu?"
#: editor/project_manager.cpp
msgid ""
@@ -11235,14 +11140,14 @@ msgstr ""
"jeden znak \"/\"."
#: editor/project_settings_editor.cpp
-msgid "Key "
-msgstr "Klávesa "
-
-#: editor/project_settings_editor.cpp
msgid "Physical Key"
msgstr ""
#: editor/project_settings_editor.cpp
+msgid "Key "
+msgstr "Klávesa "
+
+#: editor/project_settings_editor.cpp
msgid "Joy Button"
msgstr "TlaÄítko gamepadu"
@@ -12747,7 +12652,7 @@ msgstr "GridMap Vyplnit výběr"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Grid Map"
-msgstr "Grid Map"
+msgstr "Mřížková mapa"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Snap View"
@@ -12880,7 +12785,7 @@ msgstr "Zapéct NavMesh"
#: modules/recast/navigation_mesh_editor_plugin.cpp
msgid "Clear the navigation mesh."
-msgstr "Vymazat navigaÄní síť."
+msgstr "Vymazat navigaÄní model."
#: modules/recast/navigation_mesh_generator.cpp
msgid "Setting up Configuration..."
@@ -13382,14 +13287,12 @@ msgid "Running on %s"
msgstr ""
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Exporting APK..."
-msgstr "Exportování všeho"
+msgstr "Exportování APK..."
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Uninstalling..."
-msgstr "Odinstalovat"
+msgstr "Odinstalování..."
#: platform/android/export/export_plugin.cpp
#, fuzzy
@@ -13397,9 +13300,8 @@ msgid "Installing to device, please wait..."
msgstr "NaÄítání, prosím Äekejte..."
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Could not install to device: %s"
-msgstr "Nelze spustit podproces!"
+msgstr "Nepodařilo se nainstalovat do zařízení: %s"
#: platform/android/export/export_plugin.cpp
#, fuzzy
@@ -13521,16 +13423,12 @@ msgid "Signing debug %s..."
msgstr ""
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Signing release %s..."
-msgstr ""
-"Skenování souborů,\n"
-"Prosím, Äekejte..."
+msgstr "Podepisování vydání %s..."
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Could not find keystore, unable to export."
-msgstr "Nelze otevřít šablonu pro export:"
+msgstr "NepodaÅ™ilo se najít úložiÅ¡tÄ› klíÄů, nelze exportovat."
#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
@@ -13591,14 +13489,12 @@ msgid ""
msgstr ""
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Could not export project files to gradle project\n"
-msgstr "Nelze upravit project.godot v umístění projektu."
+msgstr "Nelze exportovat soubory projektu do projektu gradle\n"
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Could not write expansion package file!"
-msgstr "Nelze zapsat soubor:"
+msgstr "Nelze zapsat soubor rozÅ¡iÅ™ujícího balíÄku!"
#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
@@ -13635,11 +13531,12 @@ msgid "Creating APK..."
msgstr "Vytvářím kontury..."
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid ""
"Could not find template APK to export:\n"
"%s"
-msgstr "Nelze otevřít šablonu pro export:"
+msgstr ""
+"Nepodařilo se najít šablonu APK pro export:\n"
+"%s"
#: platform/android/export/export_plugin.cpp
msgid ""
@@ -13655,9 +13552,8 @@ msgid "Adding files..."
msgstr "Přidávám %s..."
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Could not export project files"
-msgstr "Nelze zapsat soubor:"
+msgstr "Nelze exportovat soubory projektu"
#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
@@ -13722,14 +13618,12 @@ msgid "Could not read HTML shell:"
msgstr "Nebylo možné pÅ™eÄíst HTML shell:"
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Could not create HTTP server directory:"
-msgstr "Nelze vytvořit složku."
+msgstr "Nepodařilo se vytvořit adresář serveru HTTP:"
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Error starting HTTP server:"
-msgstr "Chyba při ukládání scény."
+msgstr "Chyba při spuštění serveru HTTP:"
#: platform/osx/export/export.cpp
#, fuzzy
@@ -14361,7 +14255,7 @@ msgstr ""
#: scene/3d/soft_body.cpp
msgid "This body will be ignored until you set a mesh."
-msgstr "Toto tělo bude ignorováno dokud nenastavíte síť."
+msgstr "Toto těleso bude ignorováno, dokud nenastavíte model."
#: scene/3d/soft_body.cpp
msgid ""
@@ -14475,7 +14369,7 @@ msgstr "HSV"
#: scene/gui/color_picker.cpp
msgid "Raw"
-msgstr "Raw"
+msgstr "Surový"
#: scene/gui/color_picker.cpp
msgid "Switch between hexadecimal and code values."
diff --git a/editor/translations/da.po b/editor/translations/da.po
index af1038552e..12df305276 100644
--- a/editor/translations/da.po
+++ b/editor/translations/da.po
@@ -14,7 +14,7 @@
# Rémi Verschelde <akien@godotengine.org>, 2019.
# Mads K. Bredager <mbredager@gmail.com>, 2019.
# Kristoffer Andersen <kjaa@google.com>, 2019.
-# Joe Osborne <reachjoe.o@gmail.com>, 2020.
+# Joe Osborne <reachjoe.o@gmail.com>, 2020, 2021.
# Autowinto <happymansi@hotmail.com>, 2020, 2021.
# Mikkel Mouridsen <mikkelmouridsen@me.com>, 2020, 2021.
# snakatk <snaqii@live.dk>, 2021.
@@ -23,8 +23,8 @@ msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-04-26 22:31+0000\n"
-"Last-Translator: Kim Nielsen <kimmowich@stofanet.dk>\n"
+"PO-Revision-Date: 2021-11-05 11:56+0000\n"
+"Last-Translator: Joe Osborne <reachjoe.o@gmail.com>\n"
"Language-Team: Danish <https://hosted.weblate.org/projects/godot-engine/"
"godot/da/>\n"
"Language: da\n"
@@ -32,7 +32,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.7-dev\n"
+"X-Generator: Weblate 4.9-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -232,9 +232,8 @@ msgid "Animation Playback Track"
msgstr "Animation-afspilningsspor"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Animation length (frames)"
-msgstr "Animations længde (i sekunder)"
+msgstr "Animations længde (billeder)"
#: editor/animation_track_editor.cpp
#, fuzzy
@@ -263,9 +262,8 @@ msgid "Anim Clips:"
msgstr "Anim klip:"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Change Track Path"
-msgstr "Ændre Array-Værdi"
+msgstr "Ændre sporsti"
#: editor/animation_track_editor.cpp
msgid "Toggle this track on/off."
@@ -391,9 +389,8 @@ msgstr "Anim Indsæt"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "node '%s'"
-msgstr "Kan ikke åbne '%s'."
+msgstr "node '%s'"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
@@ -630,9 +627,8 @@ msgid "Go to Previous Step"
msgstr "GÃ¥ til Forrige Trin"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Apply Reset"
-msgstr "Nulstil Zoom"
+msgstr "Anvende nulstilling"
#: editor/animation_track_editor.cpp
msgid "Optimize Animation"
@@ -5291,7 +5287,7 @@ msgstr "Slut"
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Immediate"
-msgstr "Umiddelbart"
+msgstr "Umiddelbar"
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Sync"
@@ -5332,8 +5328,8 @@ msgid ""
"Shift+LMB to create connections."
msgstr ""
"Vælg og flyt nodes.\n"
-"RMB for at tilføje ny nodes.\n"
-"Shift+LMB for at oprette forbindelse."
+"RMB for at tilføje nye nodes.\n"
+"Shift+LMB for at oprette forbindelser."
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Create new nodes."
@@ -5367,7 +5363,7 @@ msgstr "Afspil Mode:"
#: editor/plugins/animation_tree_editor_plugin.cpp
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "AnimationTree"
-msgstr "Animation Tree"
+msgstr "Animation Træ"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "New name:"
@@ -5380,11 +5376,11 @@ msgstr "Skalér:"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Fade In (s):"
-msgstr ""
+msgstr "Fade ind (s):"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Fade Out (s):"
-msgstr ""
+msgstr "Fade Ud (s):"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Blend"
@@ -5409,7 +5405,7 @@ msgstr ""
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Start!"
-msgstr ""
+msgstr "Start!"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
#: editor/plugins/multimesh_editor_plugin.cpp
@@ -5442,11 +5438,11 @@ msgstr "Tilføj Input"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Clear Auto-Advance"
-msgstr ""
+msgstr "Ryd Automatisk Fremrykning"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Set Auto-Advance"
-msgstr ""
+msgstr "Sæt Automatisk Fremrykning"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
#, fuzzy
@@ -5463,7 +5459,7 @@ msgstr "Animationstræ er ugyldigt."
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Animation Node"
-msgstr ""
+msgstr "Animations Node"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "OneShot Node"
@@ -5487,15 +5483,15 @@ msgstr ""
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "TimeScale Node"
-msgstr ""
+msgstr "Tidsskala Node"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "TimeSeek Node"
-msgstr ""
+msgstr "Tidssøgning Node"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Transition Node"
-msgstr ""
+msgstr "Overgangs Node"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
#, fuzzy
@@ -5525,52 +5521,49 @@ msgid "Download"
msgstr "Download"
#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgid "Connection error, please try again."
msgstr "Forbindelsesfejl, prøv venligst igen."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Can't connect."
-msgstr "Ingen forbindelse."
+msgstr "Kan ikke oprette forbindelse."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Can't connect to host:"
-msgstr "Kan ikke forbinde til host:"
+msgstr "Kan ikke forbinde til værten:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "No response from host:"
-msgstr "Ingen respons fra host:"
+msgstr "Intet svar fra værten:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "No response."
-msgstr "Ingen reaktion."
+msgstr "Intet svar."
#: editor/plugins/asset_library_editor_plugin.cpp
+#, fuzzy
msgid "Can't resolve hostname:"
-msgstr ""
+msgstr "Kan ikke løse værtsnavnet:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Can't resolve."
msgstr "Kan ikke løses."
#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgid "Request failed, return code:"
msgstr "Forespørgsel mislykkedes, returkode:"
#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgid "Cannot save response to:"
-msgstr "Kan ikke gemme respons i:"
+msgstr "Kan ikke gemme svar til:"
#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgid "Write error."
msgstr "Skrivefejl."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, too many redirects"
-msgstr ""
+msgstr "Anmodningen mislykkedes, for mange omdirigeringer"
#: editor/plugins/asset_library_editor_plugin.cpp
#, fuzzy
@@ -5578,12 +5571,10 @@ msgid "Redirect loop."
msgstr "Omdiriger Løkke."
#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgid "Request failed, timeout"
msgstr "Forespørgsel mislykkedes, tiden udløb."
#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgid "Timeout."
msgstr "Tiden udløb."
@@ -5593,23 +5584,24 @@ msgstr "Fejlet:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Bad download hash, assuming file has been tampered with."
-msgstr ""
+msgstr "DÃ¥rligt download-hash, formoder at filen er blevet manipuleret."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Expected:"
-msgstr ""
+msgstr "Forventet:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Got:"
-msgstr ""
+msgstr "Fik:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Failed SHA-256 hash check"
-msgstr ""
+msgstr "Mislykkedes SHA-256 hash-tjek"
#: editor/plugins/asset_library_editor_plugin.cpp
+#, fuzzy
msgid "Asset Download Error:"
-msgstr ""
+msgstr "Asset Download Fejl:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Downloading (%s / %s)..."
@@ -5620,8 +5612,9 @@ msgid "Downloading..."
msgstr "Downloader..."
#: editor/plugins/asset_library_editor_plugin.cpp
+#, fuzzy
msgid "Resolving..."
-msgstr ""
+msgstr "Løser..."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Error making request"
@@ -5632,9 +5625,8 @@ msgid "Idle"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgid "Install..."
-msgstr "Installér..."
+msgstr "Installere.."
#: editor/plugins/asset_library_editor_plugin.cpp
#, fuzzy
@@ -5643,19 +5635,20 @@ msgstr "Prøv igen"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Download Error"
-msgstr ""
+msgstr "Fejl i Download"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Download for this asset is already in progress!"
-msgstr ""
+msgstr "Download for dette asset er allerede i gang!"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Recently Updated"
-msgstr ""
+msgstr "Nyligt Opdateret"
#: editor/plugins/asset_library_editor_plugin.cpp
+#, fuzzy
msgid "Least Recently Updated"
-msgstr ""
+msgstr "Seneste Nyligt Opdateret"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Name (A-Z)"
@@ -5678,9 +5671,8 @@ msgid "First"
msgstr "Første"
#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgid "Previous"
-msgstr "Forrige fane"
+msgstr "Forrige"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Next"
@@ -5696,11 +5688,12 @@ msgstr "Alle"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Search templates, projects, and demos"
-msgstr ""
+msgstr "Søg skabeloner, projekter og demoer"
#: editor/plugins/asset_library_editor_plugin.cpp
+#, fuzzy
msgid "Search assets (excluding templates, projects, and demos)"
-msgstr ""
+msgstr "Søge assets (undtagen skabeloner, projekter og demoer)"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Import..."
@@ -5743,14 +5736,18 @@ msgid "Assets ZIP File"
msgstr "Assets zipfil"
#: editor/plugins/audio_stream_editor_plugin.cpp
+#, fuzzy
msgid "Audio Preview Play/Pause"
-msgstr ""
+msgstr "Lyd forhåndsvisning Afspil/pause"
#: editor/plugins/baked_lightmap_editor_plugin.cpp
+#, fuzzy
msgid ""
"Can't determine a save path for lightmap images.\n"
"Save your scene and try again."
msgstr ""
+"Kan ikke finde et sted at gemme lightmap images.\n"
+"Gem din scene, og prøv igen."
#: editor/plugins/baked_lightmap_editor_plugin.cpp
msgid ""
@@ -8010,15 +8007,15 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Set Rest Pose to Bones"
+msgstr ""
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
#, fuzzy
msgid "Create Rest Pose from Bones"
msgstr "Spil Brugerdefineret Scene"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
-msgstr ""
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
#, fuzzy
msgid "Skeleton2D"
msgstr "Singleton"
@@ -11420,11 +11417,11 @@ msgid ""
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Key "
+msgid "Physical Key"
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Physical Key"
+msgid "Key "
msgstr ""
#: editor/project_settings_editor.cpp
diff --git a/editor/translations/de.po b/editor/translations/de.po
index 9f6f7ee0bf..56eca938d0 100644
--- a/editor/translations/de.po
+++ b/editor/translations/de.po
@@ -73,13 +73,14 @@
# jmih03 <joerni@mail.de>, 2021.
# Dominik Moos <dominik.moos@protonmail.com>, 2021.
# Zae Chao <zaevi@live.com>, 2021.
+# Tim <tim14speckenwirth@gmail.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-10-23 10:13+0000\n"
-"Last-Translator: Zae Chao <zaevi@live.com>\n"
+"PO-Revision-Date: 2021-10-31 22:17+0000\n"
+"Last-Translator: Tim <tim14speckenwirth@gmail.com>\n"
"Language-Team: German <https://hosted.weblate.org/projects/godot-engine/"
"godot/de/>\n"
"Language: de\n"
@@ -7841,14 +7842,14 @@ msgstr ""
"hinzugefügt werden."
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
-msgstr "Ruhe-Pose aus Knochen erstellen"
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Set Rest Pose to Bones"
msgstr "Knochen in Ruhe-Pose setzen"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Create Rest Pose from Bones"
+msgstr "Ruhe-Pose aus Knochen erstellen"
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Skeleton2D"
msgstr "Skelett2D"
@@ -11218,14 +11219,14 @@ msgstr ""
"der Suchanfrage vorhanden sein."
#: editor/project_settings_editor.cpp
-msgid "Key "
-msgstr "Taste "
-
-#: editor/project_settings_editor.cpp
msgid "Physical Key"
msgstr "Physische Taste"
#: editor/project_settings_editor.cpp
+msgid "Key "
+msgstr "Taste "
+
+#: editor/project_settings_editor.cpp
msgid "Joy Button"
msgstr "Joysticktaste"
@@ -14383,7 +14384,7 @@ msgid ""
"Please check the RoomList branch has been assigned in the RoomManager."
msgstr ""
"RoomList-Pfad ist ungültig.\n"
-"Wurde der RoomList-Zweig im RoomManager zugewiesen?"
+"Bitte überprüfen Sie, ob der RoomList-Zweig im RoomManager zugewiesen wurde."
#: scene/3d/room_manager.cpp
msgid "RoomList contains no Rooms, aborting."
@@ -14420,8 +14421,9 @@ msgid ""
"Error calculating room bounds.\n"
"Ensure all rooms contain geometry or manual bounds."
msgstr ""
-"Fehler beim Berechnen der Raumbegrenzungen.\n"
-"Enthalten alle Räume Geometrie oder manuelle Begrenzungen?"
+"Fehler bei der Berechnung von Raumbegrenzungen.\n"
+"Stellen Sie sicher, dass alle Räume Geometrie oder manuelle Begrenzungen "
+"enthalten."
#: scene/3d/soft_body.cpp
msgid "This body will be ignored until you set a mesh."
diff --git a/editor/translations/editor.pot b/editor/translations/editor.pot
index 60507c472d..9d183271f6 100644
--- a/editor/translations/editor.pot
+++ b/editor/translations/editor.pot
@@ -7409,11 +7409,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
@@ -10587,11 +10587,11 @@ msgid ""
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Key "
+msgid "Physical Key"
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Physical Key"
+msgid "Key "
msgstr ""
#: editor/project_settings_editor.cpp
diff --git a/editor/translations/el.po b/editor/translations/el.po
index d8d6251838..3aa20da318 100644
--- a/editor/translations/el.po
+++ b/editor/translations/el.po
@@ -7863,14 +7863,14 @@ msgstr ""
"Αυτός ο σκελετός δεν έχει οστά, δώστε του κάποιους κόμβους-παιδιά Bone2D."
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
-msgstr "ΔημιουÏγία Στάσης ΑδÏάνειας από Οστά"
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Set Rest Pose to Bones"
msgstr "ΟÏισμός Στάσης ΑδÏάνειας σε Οστά"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Create Rest Pose from Bones"
+msgstr "ΔημιουÏγία Στάσης ΑδÏάνειας από Οστά"
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Skeleton2D"
msgstr "Skeleton2D"
@@ -11340,14 +11340,14 @@ msgstr ""
"πεÏιέχει τουλάχιστον έναν χαÏακτήÏα `/`."
#: editor/project_settings_editor.cpp
-msgid "Key "
-msgstr "Κλειδί "
-
-#: editor/project_settings_editor.cpp
msgid "Physical Key"
msgstr ""
#: editor/project_settings_editor.cpp
+msgid "Key "
+msgstr "Κλειδί "
+
+#: editor/project_settings_editor.cpp
msgid "Joy Button"
msgstr "Κουμπί Joystick"
diff --git a/editor/translations/eo.po b/editor/translations/eo.po
index c0aa10e89f..c9dd8cfaa8 100644
--- a/editor/translations/eo.po
+++ b/editor/translations/eo.po
@@ -7747,11 +7747,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
@@ -11061,14 +11061,14 @@ msgid ""
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Key "
-msgstr "Klavo "
-
-#: editor/project_settings_editor.cpp
msgid "Physical Key"
msgstr ""
#: editor/project_settings_editor.cpp
+msgid "Key "
+msgstr "Klavo "
+
+#: editor/project_settings_editor.cpp
msgid "Joy Button"
msgstr "Butono de stirstango"
diff --git a/editor/translations/es.po b/editor/translations/es.po
index bc314e8294..fe7278beaf 100644
--- a/editor/translations/es.po
+++ b/editor/translations/es.po
@@ -43,7 +43,7 @@
# Dario <darlex259@gmail.com>, 2019.
# Adolfo Jayme Barrientos <fitojb@ubuntu.com>, 2019.
# Julián Luini <jluini@gmail.com>, 2020.
-# Victor S. <victorstancioiu@gmail.com>, 2020.
+# Victor S. <victorstancioiu@gmail.com>, 2020, 2021.
# henry rujano herrera <rujhen@gmail.com>, 2020.
# Megamega53 <Christopher.Morales21@myhunter.cuny.edu>, 2020.
# Serk Lintur <serk.lintur@gmail.com>, 2020.
@@ -70,13 +70,14 @@
# Erick Figueroa <querecuto@hotmail.com>, 2021.
# jonagamerpro1234 ss <js398704@gmail.com>, 2021.
# davidrogel <david.rogel.pernas@icloud.com>, 2021.
+# Anderson Guzman Abreu <chicobello1111@gmail.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-10-23 10:13+0000\n"
-"Last-Translator: Lisandro Lorea <lisandrolorea@gmail.com>\n"
+"PO-Revision-Date: 2021-11-11 16:02+0000\n"
+"Last-Translator: Victor S. <victorstancioiu@gmail.com>\n"
"Language-Team: Spanish <https://hosted.weblate.org/projects/godot-engine/"
"godot/es/>\n"
"Language: es\n"
@@ -84,7 +85,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.9-dev\n"
+"X-Generator: Weblate 4.9.1-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -2233,7 +2234,7 @@ msgstr "Buscar en la Ayuda"
#: editor/editor_help_search.cpp
msgid "Case Sensitive"
-msgstr "Respetar Mayus./Minus."
+msgstr "Respeta Mayus./Minus."
#: editor/editor_help_search.cpp
msgid "Show Hierarchy"
@@ -2940,7 +2941,7 @@ msgstr "Añadir nueva escena."
#: editor/editor_node.cpp
msgid "Scene"
-msgstr "Escenas"
+msgstr "Escena"
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
@@ -7841,14 +7842,14 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr "Este esqueleto no tiene huesos, crea algunos nodos Bone2D hijos."
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
-msgstr "Crear Pose de Descanso a partir de los Huesos"
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Set Rest Pose to Bones"
msgstr "Establecer Pose de Descanso en los Huesos"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Create Rest Pose from Bones"
+msgstr "Crear Pose de Descanso a partir de los Huesos"
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Skeleton2D"
msgstr "Skeleton2D"
@@ -11212,14 +11213,14 @@ msgstr ""
"al menos un carácter `/`."
#: editor/project_settings_editor.cpp
-msgid "Key "
-msgstr "Tecla "
-
-#: editor/project_settings_editor.cpp
msgid "Physical Key"
msgstr "Tecla Física"
#: editor/project_settings_editor.cpp
+msgid "Key "
+msgstr "Tecla "
+
+#: editor/project_settings_editor.cpp
msgid "Joy Button"
msgstr "Botón del Mando"
diff --git a/editor/translations/es_AR.po b/editor/translations/es_AR.po
index dbff18af4e..271bb11040 100644
--- a/editor/translations/es_AR.po
+++ b/editor/translations/es_AR.po
@@ -7778,14 +7778,14 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr "Este esqueleto no tiene huesos, crea algunos nodos Bone2D hijos."
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
-msgstr "Crear Pose de Descanso a partir de Huesos"
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Set Rest Pose to Bones"
msgstr "Asignar Pose de Descanso a Huesos"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Create Rest Pose from Bones"
+msgstr "Crear Pose de Descanso a partir de Huesos"
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Skeleton2D"
msgstr "Skeleton2D"
@@ -11148,14 +11148,14 @@ msgstr ""
"al menos un carácter `/`."
#: editor/project_settings_editor.cpp
-msgid "Key "
-msgstr "Tecla "
-
-#: editor/project_settings_editor.cpp
msgid "Physical Key"
msgstr "Tecla Física"
#: editor/project_settings_editor.cpp
+msgid "Key "
+msgstr "Tecla "
+
+#: editor/project_settings_editor.cpp
msgid "Joy Button"
msgstr "Bottón de Joystick"
diff --git a/editor/translations/et.po b/editor/translations/et.po
index ccc2681d0f..4dba826523 100644
--- a/editor/translations/et.po
+++ b/editor/translations/et.po
@@ -7514,11 +7514,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
@@ -10768,11 +10768,11 @@ msgid ""
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Key "
+msgid "Physical Key"
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Physical Key"
+msgid "Key "
msgstr ""
#: editor/project_settings_editor.cpp
diff --git a/editor/translations/eu.po b/editor/translations/eu.po
index 9a2948582e..be9638fa8f 100644
--- a/editor/translations/eu.po
+++ b/editor/translations/eu.po
@@ -7491,11 +7491,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
@@ -10726,11 +10726,11 @@ msgid ""
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Key "
+msgid "Physical Key"
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Physical Key"
+msgid "Key "
msgstr ""
#: editor/project_settings_editor.cpp
diff --git a/editor/translations/fa.po b/editor/translations/fa.po
index e61aa0a6c7..54715f5c9d 100644
--- a/editor/translations/fa.po
+++ b/editor/translations/fa.po
@@ -7814,15 +7814,15 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Set Rest Pose to Bones"
+msgstr ""
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
#, fuzzy
msgid "Create Rest Pose from Bones"
msgstr "پخش Ø³ÙØ§Ø±Ø´ÛŒ صحنه"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
-msgstr ""
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Skeleton2D"
msgstr ""
@@ -11249,11 +11249,11 @@ msgstr ""
"`کاراکتر باشد."
#: editor/project_settings_editor.cpp
-msgid "Key "
+msgid "Physical Key"
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Physical Key"
+msgid "Key "
msgstr ""
#: editor/project_settings_editor.cpp
diff --git a/editor/translations/fi.po b/editor/translations/fi.po
index a7dca1dd0d..b3fc0d100b 100644
--- a/editor/translations/fi.po
+++ b/editor/translations/fi.po
@@ -17,7 +17,7 @@ msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-10-18 15:35+0000\n"
+"PO-Revision-Date: 2021-10-28 22:09+0000\n"
"Last-Translator: Tapani Niemi <tapani.niemi@kapsi.fi>\n"
"Language-Team: Finnish <https://hosted.weblate.org/projects/godot-engine/"
"godot/fi/>\n"
@@ -1302,7 +1302,7 @@ msgstr "Assettien asentaja"
#: editor/editor_audio_buses.cpp
msgid "Speakers"
-msgstr "Kaiuttimiet"
+msgstr "Kaiuttimet"
#: editor/editor_audio_buses.cpp
msgid "Add Effect"
@@ -2210,7 +2210,7 @@ msgstr "Signaali"
#: editor/editor_help_search.cpp
msgid "Constant"
-msgstr "Muuttumaton"
+msgstr "Vakio"
#: editor/editor_help_search.cpp
msgid "Property"
@@ -5027,7 +5027,7 @@ msgstr "Pakota valkoisen modulaatio"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Include Gizmos (3D)"
-msgstr "Näytä 3D-muokkaimet"
+msgstr "Näytä 3D-vempaimet"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Pin AnimationPlayer"
@@ -7727,14 +7727,14 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr "Tällä luurangolla ei ole luita, luo joitakin Bone2D alisolmuja."
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
-msgstr "Luo lepoasento luista"
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Set Rest Pose to Bones"
msgstr "Aseta lepoasento luille"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Create Rest Pose from Bones"
+msgstr "Luo lepoasento luista"
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Skeleton2D"
msgstr "Skeleton2D"
@@ -7997,7 +7997,7 @@ msgstr "Näytä ympäristö"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "View Gizmos"
-msgstr "Näytä muokkaimet"
+msgstr "Näytä vempaimet"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "View Information"
@@ -8100,9 +8100,9 @@ msgid ""
msgstr ""
"Napsauta vaihtaaksesi näkyvyystilojen välillä.\n"
"\n"
-"Avoin silmä: muokkain on näkyvissä.\n"
-"Suljettu silmä: muokkain on piilotettu.\n"
-"Puoliavoin silmä: muokkain on näkyvissä myös läpikuultamattomien pintojen "
+"Avoin silmä: vempain on näkyvissä.\n"
+"Suljettu silmä: vempain on piilotettu.\n"
+"Puoliavoin silmä: vempain on näkyvissä myös läpikuultamattomien pintojen "
"läpi (\"röntgen\")."
#: editor/plugins/spatial_editor_plugin.cpp
@@ -8228,7 +8228,7 @@ msgstr "4 Näyttöruutua"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Gizmos"
-msgstr "Muokkaimet"
+msgstr "Vempaimet"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "View Origin"
@@ -8313,7 +8313,7 @@ msgstr "Jälki"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Unnamed Gizmo"
-msgstr "Nimetön muokkain"
+msgstr "Nimetön vempain"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Create Mesh2D"
@@ -8481,7 +8481,7 @@ msgstr "Lisää tekstuuri tiedostosta"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Add Frames from a Sprite Sheet"
-msgstr "Lisää ruudut Sprite Sheetistä"
+msgstr "Lisää ruudut sprite-arkista"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Insert Empty (Before)"
@@ -8517,7 +8517,7 @@ msgstr "Valitse tai tyhjää kaikki ruudut"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Create Frames from Sprite Sheet"
-msgstr "Luo ruudut Sprite Sheetistä"
+msgstr "Luo ruudut sprite-arkista"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "SpriteFrames"
@@ -11083,14 +11083,14 @@ msgstr ""
"mukana vähintään yksi `/` merkki."
#: editor/project_settings_editor.cpp
-msgid "Key "
-msgstr "Näppäin "
-
-#: editor/project_settings_editor.cpp
msgid "Physical Key"
msgstr "Fyysinen avain"
#: editor/project_settings_editor.cpp
+msgid "Key "
+msgstr "Näppäin "
+
+#: editor/project_settings_editor.cpp
msgid "Joy Button"
msgstr "Ohjaimen painike"
diff --git a/editor/translations/fil.po b/editor/translations/fil.po
index 44176ea6bc..84d4b6ff2a 100644
--- a/editor/translations/fil.po
+++ b/editor/translations/fil.po
@@ -7,12 +7,13 @@
# Bakainkorp <Ryan.Bautista86@myhunter.cuny.edu>, 2019.
# Jethro Parker <lionbearjet@hotmail.com>, 2020.
# Sven Sorupia <stsorupia@gmail.com>, 2021.
+# Napstaguy04 <brokenscreen3@gmail.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2021-06-07 23:43+0000\n"
-"Last-Translator: Sven Sorupia <stsorupia@gmail.com>\n"
+"PO-Revision-Date: 2021-11-19 08:44+0000\n"
+"Last-Translator: Napstaguy04 <brokenscreen3@gmail.com>\n"
"Language-Team: Filipino <https://hosted.weblate.org/projects/godot-engine/"
"godot/fil/>\n"
"Language: fil\n"
@@ -20,7 +21,7 @@ msgstr ""
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=2; plural=n != 1 && n != 2 && n != 3 && (n % 10 == 4 "
"|| n % 10 == 6 || n % 10 == 9);\n"
-"X-Generator: Weblate 4.7-dev\n"
+"X-Generator: Weblate 4.9.1-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -7444,11 +7445,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
@@ -10636,11 +10637,11 @@ msgid ""
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Key "
+msgid "Physical Key"
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Physical Key"
+msgid "Key "
msgstr ""
#: editor/project_settings_editor.cpp
@@ -10869,7 +10870,7 @@ msgstr ""
#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
msgid "General"
-msgstr ""
+msgstr "Pangkalahatan"
#: editor/project_settings_editor.cpp
msgid "Override For..."
diff --git a/editor/translations/fr.po b/editor/translations/fr.po
index 872b22322e..8da997112f 100644
--- a/editor/translations/fr.po
+++ b/editor/translations/fr.po
@@ -7876,14 +7876,14 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr "Ce squelette n'a pas d'os, créez des nœuds Bone2D enfants."
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
-msgstr "Créer la position de repos d'après les os"
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Set Rest Pose to Bones"
msgstr "Régler la position de repos sur les os"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Create Rest Pose from Bones"
+msgstr "Créer la position de repos d'après les os"
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Skeleton2D"
msgstr "Squelette 2D"
@@ -11266,14 +11266,14 @@ msgstr ""
"recherche doit inclure au moins un caractère `/`."
#: editor/project_settings_editor.cpp
-msgid "Key "
-msgstr "Touche "
-
-#: editor/project_settings_editor.cpp
msgid "Physical Key"
msgstr "Touche physique"
#: editor/project_settings_editor.cpp
+msgid "Key "
+msgstr "Touche "
+
+#: editor/project_settings_editor.cpp
msgid "Joy Button"
msgstr "Bouton de joystick"
diff --git a/editor/translations/ga.po b/editor/translations/ga.po
index de8d178967..41c2b72c3f 100644
--- a/editor/translations/ga.po
+++ b/editor/translations/ga.po
@@ -7427,11 +7427,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
@@ -10617,11 +10617,11 @@ msgid ""
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Key "
+msgid "Physical Key"
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Physical Key"
+msgid "Key "
msgstr ""
#: editor/project_settings_editor.cpp
diff --git a/editor/translations/gl.po b/editor/translations/gl.po
index ff6fc36818..43be118f3d 100644
--- a/editor/translations/gl.po
+++ b/editor/translations/gl.po
@@ -7706,14 +7706,14 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr "Este esqueleto non ten ósos; crea uns nodos fillo Bone2D."
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
-msgstr "Crear Pose de Repouso a partir dos Ósos"
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Set Rest Pose to Bones"
msgstr "Asignar Pose de Repouso aos Ósos"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Create Rest Pose from Bones"
+msgstr "Crear Pose de Repouso a partir dos Ósos"
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Skeleton2D"
msgstr "Skeleton2D"
@@ -11089,14 +11089,14 @@ msgstr ""
"polo menos un carácter '/'."
#: editor/project_settings_editor.cpp
-msgid "Key "
-msgstr "Botón: "
-
-#: editor/project_settings_editor.cpp
msgid "Physical Key"
msgstr ""
#: editor/project_settings_editor.cpp
+msgid "Key "
+msgstr "Botón: "
+
+#: editor/project_settings_editor.cpp
msgid "Joy Button"
msgstr "Botón Joystick"
diff --git a/editor/translations/he.po b/editor/translations/he.po
index 9e41b7f9c4..8150eb063d 100644
--- a/editor/translations/he.po
+++ b/editor/translations/he.po
@@ -7831,15 +7831,15 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Set Rest Pose to Bones"
+msgstr ""
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
#, fuzzy
msgid "Create Rest Pose from Bones"
msgstr "נגינת סצנה בהת×מה ×ישית"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
-msgstr ""
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
#, fuzzy
msgid "Skeleton2D"
msgstr "יחידני"
@@ -11249,14 +11249,14 @@ msgid ""
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Key "
-msgstr "מקש "
-
-#: editor/project_settings_editor.cpp
msgid "Physical Key"
msgstr ""
#: editor/project_settings_editor.cpp
+msgid "Key "
+msgstr "מקש "
+
+#: editor/project_settings_editor.cpp
msgid "Joy Button"
msgstr ""
diff --git a/editor/translations/hi.po b/editor/translations/hi.po
index 585fb5e33c..c9d5128faa 100644
--- a/editor/translations/hi.po
+++ b/editor/translations/hi.po
@@ -14,13 +14,14 @@
# Bishwajeet Parhi <bishwajeet.techmaster@gmail.com>, 2020.
# l4KKY <greenforcesave@gmail.com>, 2020.
# harvinder rathor <harvinderr09@gmail.com>, 2021.
+# Sumanyu Aggarwal <sumanyu.code@gmail.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-05-03 21:29+0000\n"
-"Last-Translator: harvinder rathor <harvinderr09@gmail.com>\n"
+"PO-Revision-Date: 2021-10-28 22:09+0000\n"
+"Last-Translator: Sumanyu Aggarwal <sumanyu.code@gmail.com>\n"
"Language-Team: Hindi <https://hosted.weblate.org/projects/godot-engine/godot/"
"hi/>\n"
"Language: hi\n"
@@ -28,7 +29,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.7-dev\n"
+"X-Generator: Weblate 4.9-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -383,7 +384,7 @@ msgstr ""
#: editor/animation_track_editor.cpp
#, fuzzy
msgid "animation"
-msgstr "कारà¥à¤¯à¥‹à¤‚:"
+msgstr "à¤à¤¨à¤¿à¤®à¥‡à¤¶à¤¨"
#: editor/animation_track_editor.cpp
msgid "AnimationPlayer can't animate itself, only other players."
@@ -3677,14 +3678,12 @@ msgid "Can't resolve the requested address."
msgstr ""
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Can't connect to the mirror."
-msgstr "कनेकà¥à¤Ÿ नहीं कर सकते।"
+msgstr "शीशे से जोड़ नहीं सकते|"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "No response from the mirror."
-msgstr "कोई जवाब नहीं।"
+msgstr "शीशे से कोई जवाब नहीं।"
#: editor/export_template_manager.cpp
#: editor/plugins/asset_library_editor_plugin.cpp
@@ -7678,11 +7677,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
@@ -10996,11 +10995,11 @@ msgid ""
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Key "
+msgid "Physical Key"
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Physical Key"
+msgid "Key "
msgstr ""
#: editor/project_settings_editor.cpp
diff --git a/editor/translations/hr.po b/editor/translations/hr.po
index a61ff60a0e..e4a3ff779e 100644
--- a/editor/translations/hr.po
+++ b/editor/translations/hr.po
@@ -7476,11 +7476,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
@@ -10692,11 +10692,11 @@ msgid ""
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Key "
+msgid "Physical Key"
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Physical Key"
+msgid "Key "
msgstr ""
#: editor/project_settings_editor.cpp
diff --git a/editor/translations/hu.po b/editor/translations/hu.po
index 3ceb60fa99..06185da411 100644
--- a/editor/translations/hu.po
+++ b/editor/translations/hu.po
@@ -17,13 +17,16 @@
# Újvári Marcell <mmarci72@gmail.com>, 2021.
# Gergő Pistai <gergopistai@gmail.com>, 2021.
# Misi <varady.misi@gmail.com>, 2021.
+# Looky1173 <lgl1173and2006@gmail.com>, 2021.
+# Frontrider <frontrider@tutanota.com>, 2021.
+# Andras Virag <snowflake71@gmail.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-10-09 16:52+0000\n"
-"Last-Translator: Misi <varady.misi@gmail.com>\n"
+"PO-Revision-Date: 2021-11-14 11:41+0000\n"
+"Last-Translator: Andras Virag <snowflake71@gmail.com>\n"
"Language-Team: Hungarian <https://hosted.weblate.org/projects/godot-engine/"
"godot/hu/>\n"
"Language: hu\n"
@@ -31,7 +34,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.9-dev\n"
+"X-Generator: Weblate 4.9.1-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -490,7 +493,7 @@ msgstr "Animáció - Kulcsok Mozgatása"
#: editor/animation_track_editor.cpp
#: modules/visual_script/visual_script_editor.cpp
msgid "Clipboard is empty!"
-msgstr ""
+msgstr "A vágólap üres!"
#: editor/animation_track_editor.cpp
msgid "Paste Tracks"
@@ -1173,7 +1176,7 @@ msgstr "Köszönet a Godot közösségétől!"
#: editor/editor_about.cpp editor/editor_node.cpp editor/project_manager.cpp
msgid "Click to copy."
-msgstr ""
+msgstr "Kattints a másoláshoz."
#: editor/editor_about.cpp
msgid "Godot Engine contributors"
@@ -1558,6 +1561,8 @@ msgstr "A fájl nem létezik."
#: editor/editor_autoload_settings.cpp
msgid "%s is an invalid path. Not in resource path (res://)."
msgstr ""
+"%s egy érvénytelen elérési útvonal. Nincs az erőforrás elérési útvonalában "
+"(res://)."
#: editor/editor_autoload_settings.cpp
msgid "Add AutoLoad"
@@ -1756,8 +1761,9 @@ msgid "Import Dock"
msgstr "Dock importálása"
#: editor/editor_feature_profile.cpp
+#, fuzzy
msgid "Allows to view and edit 3D scenes."
-msgstr ""
+msgstr "Lehetővé teszi a 3D jelenetek megtekintését és szerkesztését."
#: editor/editor_feature_profile.cpp
msgid "Allows to edit scripts using the integrated script editor."
@@ -2139,22 +2145,20 @@ msgid "Methods"
msgstr "Metódusok"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Theme Properties"
-msgstr "Téma Tulajdonságok"
+msgstr "Téma Tulajdonságai"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Enumerations"
-msgstr "Számlálók"
+msgstr "Listák"
#: editor/editor_help.cpp editor/plugins/theme_editor_plugin.cpp
msgid "Constants"
-msgstr "Konstansok"
+msgstr "Ãllandók"
#: editor/editor_help.cpp
msgid "Property Descriptions"
-msgstr "Tulajdonság leírások"
+msgstr "Tulajdonság leírásai"
#: editor/editor_help.cpp
msgid "(value)"
@@ -7734,11 +7738,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
@@ -11019,14 +11023,14 @@ msgid ""
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Key "
-msgstr "Kulcs "
-
-#: editor/project_settings_editor.cpp
msgid "Physical Key"
msgstr ""
#: editor/project_settings_editor.cpp
+msgid "Key "
+msgstr "Kulcs "
+
+#: editor/project_settings_editor.cpp
msgid "Joy Button"
msgstr "Joy gomb"
diff --git a/editor/translations/id.po b/editor/translations/id.po
index b45942a7c4..a52361e5c7 100644
--- a/editor/translations/id.po
+++ b/editor/translations/id.po
@@ -34,13 +34,14 @@
# undisputedgoose <diablodvorak@gmail.com>, 2021.
# Tsaqib Fadhlurrahman Soka <sokatsaqib@gmail.com>, 2021.
# Hilman Hazazi <hafizd.muhammad.kren.403@gmail.com>, 2021.
+# Brian <brian@brianthe.dev>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-10-15 04:32+0000\n"
-"Last-Translator: Tsaqib Fadhlurrahman Soka <sokatsaqib@gmail.com>\n"
+"PO-Revision-Date: 2021-11-19 08:43+0000\n"
+"Last-Translator: Brian <brian@brianthe.dev>\n"
"Language-Team: Indonesian <https://hosted.weblate.org/projects/godot-engine/"
"godot/id/>\n"
"Language: id\n"
@@ -48,7 +49,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 4.9-dev\n"
+"X-Generator: Weblate 4.9.1-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -2430,9 +2431,8 @@ msgstr ""
"tidak terpenuhi."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Could not save one or more scenes!"
-msgstr "Tidak dapat memulai subproses!"
+msgstr "Tidak dapat menyimpan satu atau lebih skena!"
#: editor/editor_node.cpp
msgid "Save All Scenes"
@@ -7380,14 +7380,12 @@ msgid "Move Down"
msgstr "Turunkan"
#: editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Next Script"
-msgstr "Skrip berikutnya"
+msgstr "Skrip Berikutnya"
#: editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Previous Script"
-msgstr "Skrip sebelumnya"
+msgstr "Skrip Sebelumnya"
#: editor/plugins/script_editor_plugin.cpp
msgid "File"
@@ -7741,14 +7739,14 @@ msgstr ""
"Kerangka ini tidak memiliki pertulangan, buatlah beberapa anak node Bone2D."
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
-msgstr "Buat Pose Istirahat dari Pertulangan"
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Set Rest Pose to Bones"
msgstr "Atur Pose Istirahat ke Pertulangan"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Create Rest Pose from Bones"
+msgstr "Buat Pose Istirahat dari Pertulangan"
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Skeleton2D"
msgstr "Skeleton2D"
@@ -7805,9 +7803,8 @@ msgid "Left Orthogonal"
msgstr "Ortogonal Kiri"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Left Perspective"
-msgstr "Perspektif"
+msgstr "Perspektif Kiri"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right Orthogonal"
@@ -7908,7 +7905,7 @@ msgstr "Dongak:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Yaw:"
-msgstr ""
+msgstr "Yaw:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Size:"
@@ -7940,7 +7937,7 @@ msgstr "Sudut:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "FPS: %d (%s ms)"
-msgstr ""
+msgstr "FPS: %d (%s ms)"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Top View."
@@ -8075,9 +8072,8 @@ msgid "Freelook Slow Modifier"
msgstr "Pengubah Lambat Tampilan Bebas"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Toggle Camera Preview"
-msgstr "Ubah Ukuran Kamera"
+msgstr "Alihkan Pratinjau Kamera"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "View Rotation Locked"
@@ -11169,14 +11165,14 @@ msgstr ""
"mengandung paling tidak satu karakter `/`."
#: editor/project_settings_editor.cpp
-msgid "Key "
-msgstr "Kunci "
-
-#: editor/project_settings_editor.cpp
msgid "Physical Key"
msgstr ""
#: editor/project_settings_editor.cpp
+msgid "Key "
+msgstr "Kunci "
+
+#: editor/project_settings_editor.cpp
msgid "Joy Button"
msgstr "Tombol Joystick"
diff --git a/editor/translations/is.po b/editor/translations/is.po
index 0d4f9a00f5..fcf380d7c8 100644
--- a/editor/translations/is.po
+++ b/editor/translations/is.po
@@ -7511,11 +7511,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
@@ -10757,11 +10757,11 @@ msgid ""
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Key "
+msgid "Physical Key"
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Physical Key"
+msgid "Key "
msgstr ""
#: editor/project_settings_editor.cpp
diff --git a/editor/translations/it.po b/editor/translations/it.po
index 8ec6f16734..dded7242e0 100644
--- a/editor/translations/it.po
+++ b/editor/translations/it.po
@@ -40,7 +40,7 @@
# Mirko Soppelsa <miknsop@gmail.com>, 2019, 2020, 2021.
# No <kingofwizards.kw7@gmail.com>, 2019.
# StarFang208 <polaritymanx@yahoo.it>, 2019.
-# Katia Piazza <gydey@ridiculousglitch.com>, 2019.
+# Katia Piazza <gydey@ridiculousglitch.com>, 2019, 2021.
# nickfla1 <lanterniniflavio@gmail.com>, 2019.
# Fabio Iotti <fabiogiopla@gmail.com>, 2020.
# Douglas Fiedler <dognew@gmail.com>, 2020.
@@ -61,13 +61,16 @@
# Daniele Basso <tiziodcaio@gmail.com>, 2021.
# Riteo Siuga <riteo@posteo.net>, 2021.
# Luigi <luibass92@live.it>, 2021.
+# Micky <micheledevita2@gmail.com>, 2021.
+# Fabio Plos <altre0cose@gmail.com>, 2021.
+# Theraloss <danilo.polani@gmail.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-10-11 15:44+0000\n"
-"Last-Translator: Luigi <luibass92@live.it>\n"
+"PO-Revision-Date: 2021-11-19 08:43+0000\n"
+"Last-Translator: Riteo Siuga <riteo@posteo.net>\n"
"Language-Team: Italian <https://hosted.weblate.org/projects/godot-engine/"
"godot/it/>\n"
"Language: it\n"
@@ -75,7 +78,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.9-dev\n"
+"X-Generator: Weblate 4.9.1-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -674,9 +677,8 @@ msgid "Use Bezier Curves"
msgstr "Usa le curve di Bézier"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Create RESET Track(s)"
-msgstr "Crea delle tracce di reimpostazione"
+msgstr "Crea traccia/e di rispristino"
#: editor/animation_track_editor.cpp
msgid "Anim. Optimizer"
@@ -1417,14 +1419,12 @@ msgid "Mute"
msgstr "Muto"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Bypass"
-msgstr "Bypassa"
+msgstr "Aggira"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Bus Options"
-msgstr "Opzioni del bus"
+msgstr "Opzioni Bus"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
@@ -1437,7 +1437,7 @@ msgstr "Ripristina il volume"
#: editor/editor_audio_buses.cpp
msgid "Delete Effect"
-msgstr "Elimina l'effetto"
+msgstr "Elimina Effetto"
#: editor/editor_audio_buses.cpp
msgid "Audio"
@@ -1449,7 +1449,7 @@ msgstr "Aggiungi un bus audio"
#: editor/editor_audio_buses.cpp
msgid "Master bus can't be deleted!"
-msgstr "Il bus principale non può essere cancellato!"
+msgstr "Il bus principale non può essere eliminato!"
#: editor/editor_audio_buses.cpp
msgid "Delete Audio Bus"
@@ -1523,7 +1523,7 @@ msgstr "Salva questa disposizione di bus in un file."
#: editor/editor_audio_buses.cpp editor/import_dock.cpp
msgid "Load Default"
-msgstr "Carica i predefiniti"
+msgstr "Carica predefinita"
#: editor/editor_audio_buses.cpp
msgid "Load the default Bus Layout."
@@ -1547,43 +1547,35 @@ msgstr "Non deve collidere con il nome di una classe del motore esistente."
#: editor/editor_autoload_settings.cpp
msgid "Must not collide with an existing built-in type name."
-msgstr "Non deve collidere con il nome di un tipo built-in esistente."
+msgstr "Non deve confliggere con il nome di un tipo predefinito già esistente."
#: editor/editor_autoload_settings.cpp
msgid "Must not collide with an existing global constant name."
msgstr "Non deve collidere con il nome di una costante globale esistente."
#: editor/editor_autoload_settings.cpp
-#, fuzzy
msgid "Keyword cannot be used as an autoload name."
-msgstr ""
-"Una parola chiave non può essere utilizzata come nome di un caricamento "
-"automatico."
+msgstr "Una parola chiave non può essere utilizzata come nome di un Autoload."
#: editor/editor_autoload_settings.cpp
-#, fuzzy
msgid "Autoload '%s' already exists!"
msgstr "L'Autoload \"%s\" esiste già!"
#: editor/editor_autoload_settings.cpp
-#, fuzzy
msgid "Rename Autoload"
-msgstr "Rinomina un Autoload"
+msgstr "Rinomina Autocaricamento"
#: editor/editor_autoload_settings.cpp
-#, fuzzy
msgid "Toggle AutoLoad Globals"
-msgstr "Commuta AutoLoad globals"
+msgstr "Commuta Autocaricamenti Globali"
#: editor/editor_autoload_settings.cpp
-#, fuzzy
msgid "Move Autoload"
-msgstr "Sposta un Autoload"
+msgstr "Sposta l'Autocaricamento"
#: editor/editor_autoload_settings.cpp
-#, fuzzy
msgid "Remove Autoload"
-msgstr "Rimuovi un Autoload"
+msgstr "Rimuovi l'autocaricamento"
#: editor/editor_autoload_settings.cpp editor/editor_plugin_settings.cpp
msgid "Enable"
@@ -1815,7 +1807,7 @@ msgstr "Permette di modificare gli script usando l'editor di script integrato."
#: editor/editor_feature_profile.cpp
msgid "Provides built-in access to the Asset Library."
-msgstr "Offre un accesso alla libreria dei contenuti integrato."
+msgstr "Offre un accesso incorporato alla Libreria dei Contenuti."
#: editor/editor_feature_profile.cpp
msgid "Allows editing the node hierarchy in the Scene dock."
@@ -1843,9 +1835,8 @@ msgstr ""
"individuali. Richiede il pannello del file system per funzionare."
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "(current)"
-msgstr "(Corrente)"
+msgstr "(Attuale)"
#: editor/editor_feature_profile.cpp
msgid "(none)"
@@ -1888,19 +1879,16 @@ msgid "Enable Contextual Editor"
msgstr "Abilita l'editor contestuale"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Class Properties:"
-msgstr "Proprietà:"
+msgstr "Proprietà delle classi:"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Main Features:"
-msgstr "Funzionalità"
+msgstr "Funzionalità Principali"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Nodes and Classes:"
-msgstr "Classi abilitate:"
+msgstr "Nodi e Classi:"
#: editor/editor_feature_profile.cpp
msgid "File '%s' format is invalid, import aborted."
@@ -1919,23 +1907,20 @@ msgid "Error saving profile to path: '%s'."
msgstr "Errore di salvataggio del profilo nel percorso: \"%s\"."
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Reset to Default"
-msgstr "Ripristinare le impostazioni predefinite"
+msgstr "Ripristina le impostazioni predefinite"
#: editor/editor_feature_profile.cpp
msgid "Current Profile:"
msgstr "Profilo attuale:"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Create Profile"
-msgstr "Cancella il profilo"
+msgstr "Crea un profilo"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Remove Profile"
-msgstr "Rimuovi Tile"
+msgstr "Rimuovi un profilo"
#: editor/editor_feature_profile.cpp
msgid "Available Profiles:"
@@ -1948,21 +1933,19 @@ msgstr "Rendi attuale"
#: editor/editor_feature_profile.cpp editor/editor_node.cpp
#: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp
msgid "Import"
-msgstr "Importazione"
+msgstr "Importa"
#: editor/editor_feature_profile.cpp editor/project_export.cpp
msgid "Export"
msgstr "Esporta"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Configure Selected Profile:"
-msgstr "Profilo attuale:"
+msgstr "Configura il profilo selezionato:"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Extra Options:"
-msgstr "Opzioni Texture"
+msgstr "Opzioni Addizionali"
#: editor/editor_feature_profile.cpp
msgid "Create or import a profile to edit available classes and properties."
@@ -1995,9 +1978,8 @@ msgid "Select Current Folder"
msgstr "Seleziona la cartella attuale"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
-#, fuzzy
msgid "File exists, overwrite?"
-msgstr "File esistente, sovrascriverlo?"
+msgstr "File esistente, sovrascrivere?"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Select This Folder"
@@ -2180,9 +2162,8 @@ msgid "Description"
msgstr "Descrizione"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Online Tutorials"
-msgstr "Tutorial Online"
+msgstr "Corsi Online"
#: editor/editor_help.cpp
msgid "Properties"
@@ -2341,9 +2322,8 @@ msgid "Clear"
msgstr "Rimuovi tutto"
#: editor/editor_log.cpp
-#, fuzzy
msgid "Clear Output"
-msgstr "Svuota output"
+msgstr "Svuota l'output"
#: editor/editor_network_profiler.cpp editor/editor_node.cpp
#: editor/editor_profiler.cpp
@@ -2500,9 +2480,8 @@ msgstr ""
"eredità) non siano state soddisfatte."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Could not save one or more scenes!"
-msgstr "Impossibile salvare la texture convertita:"
+msgstr "Impossibile salvare una o più scene!"
#: editor/editor_node.cpp
msgid "Save All Scenes"
@@ -2543,7 +2522,7 @@ msgid ""
"To restore the Default layout to its base settings, use the Delete Layout "
"option and delete the Default layout."
msgstr ""
-"Disposzione predefinita dell'editor sovrascritta.\n"
+"Disposizione predefinita dell'editor sovrascritta.\n"
"Per ripristinare la disposizione predefinita alle sue impostazioni di base, "
"usare l'opzione elimina layout ed eliminare la disposizione predefinita."
@@ -2646,7 +2625,7 @@ msgstr "Salvare le modifiche a \"%s\" prima di chiudere?"
#: editor/editor_node.cpp
msgid "%s no longer exists! Please specify a new save location."
-msgstr ""
+msgstr "%s non esiste più! Specificare una nuova posizione di salvataggio"
#: editor/editor_node.cpp
msgid ""
@@ -2657,11 +2636,12 @@ msgstr ""
"sono state salvate comunque."
#: editor/editor_node.cpp
-#, fuzzy
msgid ""
"A root node is required to save the scene. You can add a root node using the "
"Scene tree dock."
-msgstr "È necessario un nodo radice per salvare la scena."
+msgstr ""
+"È necessario un nodo principale per salvare la scena. Puoi aggiungerne uno "
+"nel pannello di scena"
#: editor/editor_node.cpp
msgid "Save Scene As..."
@@ -2693,29 +2673,27 @@ msgstr "Scena attuale non salvata. Aprire comunque?"
#: editor/editor_node.cpp
msgid "Can't undo while mouse buttons are pressed."
-msgstr ""
+msgstr "Impossible annullare quando i bottoni del mouse sono premuti"
#: editor/editor_node.cpp
msgid "Nothing to undo."
-msgstr ""
+msgstr "Niente da annullare."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Undo: %s"
msgstr "Annulla"
#: editor/editor_node.cpp
msgid "Can't redo while mouse buttons are pressed."
-msgstr ""
+msgstr "Impossibile ripetere mentre si premono pulsanti del mouse."
#: editor/editor_node.cpp
msgid "Nothing to redo."
-msgstr ""
+msgstr "Niente da ripetere."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Redo: %s"
-msgstr "Rifai"
+msgstr "Ripeti: %s"
#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
@@ -3072,9 +3050,8 @@ msgid "Orphan Resource Explorer..."
msgstr "Explorer di risorse orfane…"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Reload Current Project"
-msgstr "Rinomina progetto"
+msgstr "Rinomina il progetto corrente"
#: editor/editor_node.cpp
msgid "Quit to Project List"
@@ -3169,7 +3146,6 @@ msgid "Synchronize Script Changes"
msgstr "Sincronizza le modifiche degli script"
#: editor/editor_node.cpp
-#, fuzzy
msgid ""
"When this option is enabled, any script that is saved will be reloaded in "
"the running project.\n"
@@ -3194,12 +3170,10 @@ msgid "Editor Layout"
msgstr "Disposizione dell'editor"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Take Screenshot"
-msgstr "Acquisisci una schermata"
+msgstr "Acquisisci la schermata"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Screenshots are stored in the Editor Data/Settings Folder."
msgstr ""
"Gli screenshot vengono memorizzati nella cartella Data/Settings dell'editor."
@@ -3237,9 +3211,8 @@ msgid "Help"
msgstr "Aiuto"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Online Documentation"
-msgstr "Apri la documentazione"
+msgstr "Documentazione in linea"
#: editor/editor_node.cpp
msgid "Questions & Answers"
@@ -3250,21 +3223,18 @@ msgid "Report a Bug"
msgstr "Segnala un problema"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Suggest a Feature"
-msgstr "Imposta un Valore"
+msgstr "Suggerisci una funzionalità"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Send Docs Feedback"
-msgstr "Valuta la documentazione"
+msgstr "Manda un parere sulla documentazione"
#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp
msgid "Community"
msgstr "Comunità"
#: editor/editor_node.cpp
-#, fuzzy
msgid "About Godot"
msgstr "Informazioni su Godot"
@@ -3363,14 +3333,12 @@ msgid "Manage Templates"
msgstr "Gestisci i modelli d'esportazione"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Install from file"
-msgstr "Installa Da File"
+msgstr "Installa da un file"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Select android sources file"
-msgstr "Seleziona una Mesh Sorgente:"
+msgstr "Selezionare l'archivio delle sorgenti per android"
#: editor/editor_node.cpp
msgid ""
@@ -3421,9 +3389,8 @@ msgid "Merge With Existing"
msgstr "Unisci con una esistente"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Apply MeshInstance Transforms"
-msgstr "Cambia la trasformazione di un'animazione"
+msgstr "Applica le trasformazioni dei MeshInstance"
#: editor/editor_node.cpp
msgid "Open & Run a Script"
@@ -3460,9 +3427,8 @@ msgid "Select"
msgstr "Seleziona"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Select Current"
-msgstr "Seleziona la cartella attuale"
+msgstr "Seleziona l'attuale"
#: editor/editor_node.cpp
msgid "Open 2D Editor"
@@ -3499,7 +3465,7 @@ msgstr "Nessuna sottorisorsa trovata."
#: editor/editor_path.cpp
#, fuzzy
msgid "Open a list of sub-resources."
-msgstr "Nessuna sottorisorsa trovata."
+msgstr "Apre una lista di sottorisorse."
#: editor/editor_plugin.cpp
msgid "Creating Mesh Previews"
@@ -3526,14 +3492,12 @@ msgid "Update"
msgstr "Aggiorna"
#: editor/editor_plugin_settings.cpp
-#, fuzzy
msgid "Version"
-msgstr "Versione:"
+msgstr "Versione"
#: editor/editor_plugin_settings.cpp
-#, fuzzy
msgid "Author"
-msgstr "Autori"
+msgstr "Autore"
#: editor/editor_plugin_settings.cpp
#: editor/plugins/version_control_editor_plugin.cpp
@@ -3546,9 +3510,8 @@ msgid "Measure:"
msgstr "Misura:"
#: editor/editor_profiler.cpp
-#, fuzzy
msgid "Frame Time (ms)"
-msgstr "Tempo fotogramma (sec)"
+msgstr "Durata di un fotogramma (ms)"
#: editor/editor_profiler.cpp
#, fuzzy
@@ -3638,7 +3601,6 @@ msgstr ""
"Esse devono appartenere a una scena."
#: editor/editor_properties.cpp
-#, fuzzy
msgid ""
"Can't create a ViewportTexture on this resource because it's not set as "
"local to scene.\n"
@@ -3647,8 +3609,8 @@ msgid ""
msgstr ""
"Impossibile creare un VieportTexture su questa risorsa perché non è stata "
"impostata come locale alla scena.\n"
-"Per favore attivare la properietà \"local to scene\" su di essa (e su tutte "
-"quelle che la contengono fino ad arrivare a un nodo)."
+"Si prega di attivare la proprietà \"local to scene\" su di essa (e su tutte "
+"le risorse che la contengono fino ad arrivare a un nodo)."
#: editor/editor_properties.cpp editor/property_editor.cpp
msgid "Pick a Viewport"
@@ -3693,13 +3655,13 @@ msgstr ""
"questa proprietà (%s)."
#: editor/editor_resource_picker.cpp
+#, fuzzy
msgid "Quick Load"
-msgstr ""
+msgstr "Caricamento rapido"
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
-#, fuzzy
msgid "Make Unique"
-msgstr "Rendi unico"
+msgstr "Rendi Unico"
#: editor/editor_resource_picker.cpp
#: editor/plugins/animation_blend_space_1d_editor.cpp
@@ -3772,8 +3734,8 @@ msgstr "Hai dimenticato il metodo \"_run\"?"
#, fuzzy
msgid "Hold %s to round to integers. Hold Shift for more precise changes."
msgstr ""
-"Tenere premuto il tasto Ctrl per arrotondare ai numeri interi. Tenere "
-"premuto Shift per modifiche più precise."
+"Tenere premuto %s per arrotondare ai numeri interi. Tenere premuto Shift per "
+"modifiche più precise."
#: editor/editor_sub_scene.cpp
msgid "Select Node(s) to Import"
@@ -3823,14 +3785,13 @@ msgid "Connecting to the mirror..."
msgstr "Connessione al mirror in corso..."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Can't resolve the requested address."
-msgstr "Impossibile risolvere l'hostname:"
+msgstr "Impossibile risolvere l'hostname."
#: editor/export_template_manager.cpp
#, fuzzy
msgid "Can't connect to the mirror."
-msgstr "Impossibile connetersi all'host:"
+msgstr "Impossibile connettersi all'host."
#: editor/export_template_manager.cpp
#, fuzzy
@@ -3845,12 +3806,11 @@ msgstr "Richiesta fallita."
#: editor/export_template_manager.cpp
#, fuzzy
msgid "Request ended up in a redirect loop."
-msgstr "Richiesta fallita, troppi ridirezionamenti"
+msgstr "Richiesta bloccata in un ciclo di reindirizzamento."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Request failed:"
-msgstr "Richiesta fallita."
+msgstr "Richiesta fallita:"
#: editor/export_template_manager.cpp
msgid "Download complete; extracting templates..."
@@ -3865,8 +3825,8 @@ msgid ""
"Templates installation failed.\n"
"The problematic templates archives can be found at '%s'."
msgstr ""
-"Installazione del template fallita.\n"
-"Gli archivi dei template problematici possono essere trovati qui: \"%s\"."
+"Installazione dei modelli fallita.\n"
+"Gli archivi dei modelli problematici possono essere trovati qui: \"%s\"."
#: editor/export_template_manager.cpp
msgid "Error getting the list of mirrors."
@@ -3888,8 +3848,8 @@ msgid ""
"No download links found for this version. Direct download is only available "
"for official releases."
msgstr ""
-"Nessun collegamento di download trovato per questa versione. I download "
-"diretti sono disponibili solo per i rilasci ufficiali."
+"Nessun link per il download trovato per questa versione. I download diretti "
+"sono disponibili solo per i rilasci ufficiali."
#: editor/export_template_manager.cpp
msgid "Disconnected"
@@ -3901,7 +3861,7 @@ msgstr "Risolvendo"
#: editor/export_template_manager.cpp
msgid "Can't Resolve"
-msgstr "Impossibile Risolvere"
+msgstr "Impossibile risolvere"
#: editor/export_template_manager.cpp
#: editor/plugins/asset_library_editor_plugin.cpp
@@ -3936,7 +3896,7 @@ msgstr "Errore Handshake SSL"
#: editor/export_template_manager.cpp
#, fuzzy
msgid "Can't open the export templates file."
-msgstr "Impossibile aprire zip dei template d'esportazionie."
+msgstr "Impossibile aprire zip dei template d'esportazione."
#: editor/export_template_manager.cpp
#, fuzzy
@@ -3955,7 +3915,7 @@ msgstr "Errore di creazione del percorso per i template:"
#: editor/export_template_manager.cpp
msgid "Extracting Export Templates"
-msgstr "Estrazione Templates d'Esportazione"
+msgstr "Estrazione Template d'Esportazione"
#: editor/export_template_manager.cpp
msgid "Importing:"
@@ -4003,7 +3963,7 @@ msgstr "Disinstalla"
#: editor/export_template_manager.cpp
#, fuzzy
msgid "Uninstall templates for the current version."
-msgstr "Valore iniziale per il contatore"
+msgstr "Disinstalla template dalla versione attuale."
#: editor/export_template_manager.cpp
#, fuzzy
@@ -4041,12 +4001,11 @@ msgstr ""
#: editor/export_template_manager.cpp
#, fuzzy
msgid "Install from File"
-msgstr "Installa Da File"
+msgstr "Installa da File"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Install templates from a local file."
-msgstr "Importa i modelli da un file ZIP"
+msgstr "Importa i modelli da un file locale."
#: editor/export_template_manager.cpp editor/find_in_files.cpp
#: editor/progress_dialog.cpp scene/gui/dialogs.cpp
@@ -4056,21 +4015,19 @@ msgstr "Annulla"
#: editor/export_template_manager.cpp
#, fuzzy
msgid "Cancel the download of the templates."
-msgstr "Impossibile aprire zip dei template d'esportazionie."
+msgstr "Annulla lo scaricamento dei modelli."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Other Installed Versions:"
-msgstr "Versioni Installate:"
+msgstr "Altre Versioni Installate:"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Uninstall Template"
-msgstr "Disinstalla"
+msgstr "Disinstalla Modello"
#: editor/export_template_manager.cpp
msgid "Select Template File"
-msgstr "Seleziona file template"
+msgstr "Seleziona File Modello"
#: editor/export_template_manager.cpp
msgid "Godot Export Templates"
@@ -4098,7 +4055,7 @@ msgstr ""
msgid ""
"Importing has been disabled for this file, so it can't be opened for editing."
msgstr ""
-"L'importazione è stata disabilitata per questo file, perciò non possiamo "
+"L'importazione è stata disabilitata per questo file, perciò non è possibile "
"aprirlo per modificarlo."
#: editor/filesystem_dock.cpp
@@ -4131,7 +4088,7 @@ msgstr "Il nome fornito contiene caratteri non validi."
#: editor/filesystem_dock.cpp
msgid "A file or folder with this name already exists."
-msgstr "Un file o cartella con questo nome é già esistente."
+msgstr "Un file o cartella con questo nome è già esistente."
#: editor/filesystem_dock.cpp
msgid "Name contains invalid characters."
@@ -4163,15 +4120,15 @@ msgstr "Rinomina cartella:"
#: editor/filesystem_dock.cpp
msgid "Duplicating file:"
-msgstr "Duplicando file:"
+msgstr "Duplica file:"
#: editor/filesystem_dock.cpp
msgid "Duplicating folder:"
-msgstr "Duplicando cartella:"
+msgstr "Duplica cartella:"
#: editor/filesystem_dock.cpp
msgid "New Inherited Scene"
-msgstr "Nuova scena ereditata"
+msgstr "Nuova Scena Ereditata"
#: editor/filesystem_dock.cpp
msgid "Set As Main Scene"
@@ -4179,7 +4136,7 @@ msgstr "Imposta Come Scena Principale"
#: editor/filesystem_dock.cpp
msgid "Open Scenes"
-msgstr "Apri scene"
+msgstr "Apri Scene"
#: editor/filesystem_dock.cpp
msgid "Instance"
@@ -4187,7 +4144,7 @@ msgstr "Istanza"
#: editor/filesystem_dock.cpp
msgid "Add to Favorites"
-msgstr "Aggiungi ai preferiti"
+msgstr "Aggiungi ai Preferiti"
#: editor/filesystem_dock.cpp
msgid "Remove from Favorites"
@@ -4207,7 +4164,7 @@ msgstr "Sposta in..."
#: editor/filesystem_dock.cpp
msgid "New Scene..."
-msgstr "Nuova scena…"
+msgstr "Nuova Scena…"
#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
msgid "New Script..."
@@ -4230,35 +4187,33 @@ msgid "Collapse All"
msgstr "Comprimi Tutto"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Sort files"
-msgstr "Cerca file"
+msgstr "Ordina file"
#: editor/filesystem_dock.cpp
msgid "Sort by Name (Ascending)"
-msgstr "Ordina per nome (crescente)"
+msgstr "Ordina per nome (Crescente)"
#: editor/filesystem_dock.cpp
msgid "Sort by Name (Descending)"
-msgstr "Ordina per nome (decrescente)"
+msgstr "Ordina per nome (Decrescente)"
#: editor/filesystem_dock.cpp
msgid "Sort by Type (Ascending)"
-msgstr "Ordina per tipo (crescente)"
+msgstr "Ordina per tipo (Crescente)"
#: editor/filesystem_dock.cpp
msgid "Sort by Type (Descending)"
-msgstr "Ordina per tipo (decrescente)"
+msgstr "Ordina per tipo (Decrescente)"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Sort by Last Modified"
-msgstr "Ultima Modifica"
+msgstr "Ordina per Ultima Modifica"
#: editor/filesystem_dock.cpp
#, fuzzy
msgid "Sort by First Modified"
-msgstr "Ultima Modifica"
+msgstr "Ordina per Prima Modifica"
#: editor/filesystem_dock.cpp
msgid "Duplicate..."
@@ -4282,7 +4237,7 @@ msgstr "Cartella/File successivo"
#: editor/filesystem_dock.cpp
msgid "Re-Scan Filesystem"
-msgstr "Riscansiona il Filesystem"
+msgstr "Ri-scansiona il Filesystem"
#: editor/filesystem_dock.cpp
msgid "Toggle Split Mode"
@@ -4325,7 +4280,7 @@ msgstr "Crea Script"
#: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp
msgid "Find in Files"
-msgstr "Trova nei file"
+msgstr "Trova nei File"
#: editor/find_in_files.cpp
msgid "Find:"
@@ -4365,8 +4320,9 @@ msgid "Replace: "
msgstr "Sostituisci: "
#: editor/find_in_files.cpp
+#, fuzzy
msgid "Replace all (no undo)"
-msgstr "Sostituisci tutto (no undo)"
+msgstr "Sostituisci tutto (non annullabile)"
#: editor/find_in_files.cpp
msgid "Searching..."
@@ -4414,7 +4370,7 @@ msgstr "Gruppi"
#: editor/groups_editor.cpp
msgid "Nodes Not in Group"
-msgstr "Nodi non nel Gruppo"
+msgstr "Nodi Non nel Gruppo"
#: editor/groups_editor.cpp editor/scene_tree_dock.cpp
#: editor/scene_tree_editor.cpp
@@ -4423,7 +4379,7 @@ msgstr "Filtra nodi"
#: editor/groups_editor.cpp
msgid "Nodes in Group"
-msgstr "Nodi in Gruppo"
+msgstr "Nodi nel Gruppo"
#: editor/groups_editor.cpp
msgid "Empty groups will be automatically removed."
@@ -4533,7 +4489,7 @@ msgstr "Ripristinare le impostazioni predefinite"
#: editor/import_dock.cpp
msgid "Keep File (No Import)"
-msgstr "Mantieni il file ( Non importare)"
+msgstr "Mantieni il File (Non Importare)"
#: editor/import_dock.cpp
msgid "%d Files"
@@ -4558,6 +4514,11 @@ msgid ""
"Selecting another resource in the FileSystem dock without clicking Reimport "
"first will discard changes made in the Import dock."
msgstr ""
+"Hai modifiche non applicate in sospeso. Cliccare Reimporta per applicare le "
+"modifiche effettuate alle opzioni di importazione.\n"
+"Selezionare un'altra risorsa nel pannello del file system senza prima "
+"cliccare su Reimporta annullerà le modifiche effettuate nel riquadro di "
+"Importazione."
#: editor/import_dock.cpp
msgid "Import As:"
@@ -4587,14 +4548,12 @@ msgid "Failed to load resource."
msgstr "Caricamento della risorsa fallito."
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Copy Properties"
-msgstr "Proprietà"
+msgstr "Copia Proprietà"
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Paste Properties"
-msgstr "Proprietà"
+msgstr "Incolla Proprietà"
#: editor/inspector_dock.cpp
msgid "Make Sub-Resources Unique"
@@ -4610,7 +4569,7 @@ msgstr "Carica una risorsa esistente dal disco e modificala."
#: editor/inspector_dock.cpp
msgid "Save the currently edited resource."
-msgstr "Salva la risorsa in modifica."
+msgstr "Salva la risorsa attualmente in modifica."
#: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/script_editor_plugin.cpp
@@ -4619,27 +4578,24 @@ msgid "Save As..."
msgstr "Salva Come..."
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Extra resource options."
-msgstr "Non è nel percorso risorse."
+msgstr "Ulteriori opzioni di risorsa."
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Edit Resource from Clipboard"
-msgstr "Modifica gli appunti delle risorse"
+msgstr "Modifica la Risorsa dagli Appunti"
#: editor/inspector_dock.cpp
msgid "Copy Resource"
msgstr "Copia Risorsa"
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Make Resource Built-In"
-msgstr "Rendi Built-In"
+msgstr "Rendi Risorsa Integrata"
#: editor/inspector_dock.cpp
msgid "Go to the previous edited object in history."
-msgstr "Vai all'ultimo oggetto modificato nella cronologia."
+msgstr "Vai al precedente oggetto modificato nella cronologia."
#: editor/inspector_dock.cpp
msgid "Go to the next edited object in history."
@@ -4650,26 +4606,24 @@ msgid "History of recently edited objects."
msgstr "Cronologia di oggetti recentemente modificati."
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Open documentation for this object."
-msgstr "Apri la documentazione"
+msgstr "Apri la documentazione per questo oggetto."
#: editor/inspector_dock.cpp editor/scene_tree_dock.cpp
msgid "Open Documentation"
-msgstr "Apri la documentazione"
+msgstr "Apri la Documentazione"
#: editor/inspector_dock.cpp
msgid "Filter properties"
msgstr "Filtra proprietà"
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Manage object properties."
-msgstr "Proprietà oggetto."
+msgstr "Gestisci proprietà oggetto."
#: editor/inspector_dock.cpp
msgid "Changes may be lost!"
-msgstr "I cambiamenti potrebbero essere persi!"
+msgstr "Le modifiche potrebbero essere perse!"
#: editor/multi_node_edit.cpp
msgid "MultiNode Set"
@@ -4677,7 +4631,7 @@ msgstr "MultiNode Set"
#: editor/node_dock.cpp
msgid "Select a single node to edit its signals and groups."
-msgstr "Seleziona un singolo nodo per eliminare i suoi segnali e gruppi."
+msgstr "Seleziona un singolo nodo per modificarne i segnali e gruppi."
#: editor/plugin_config_dialog.cpp
msgid "Edit a Plugin"
@@ -4728,6 +4682,7 @@ msgid "Create points."
msgstr "Crea punti."
#: editor/plugins/abstract_polygon_2d_editor.cpp
+#, fuzzy
msgid ""
"Edit points.\n"
"LMB: Move Point\n"
@@ -4904,7 +4859,7 @@ msgstr "Cancella punti e triangoli."
#: editor/plugins/animation_blend_space_2d_editor.cpp
msgid "Generate blend triangles automatically (instead of manually)"
-msgstr "Genera i tringoli di fusione automaticamente (anzichè manualmente)"
+msgstr "Genera i triangoli di fusione automaticamente (anziché manualmente)"
#: editor/plugins/animation_blend_space_2d_editor.cpp
#: editor/plugins/animation_tree_player_editor_plugin.cpp
@@ -4923,7 +4878,7 @@ msgstr "Modifica Filtri"
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
msgid "Output node can't be added to the blend tree."
-msgstr "Il nodo di output non può essere aggiunto all'albero di fusione."
+msgstr "Il nodo in output non può essere aggiunto al BlendTree."
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
msgid "Add Node to BlendTree"
@@ -5101,7 +5056,7 @@ msgstr "Nessuna animazione da modificare!"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Play selected animation backwards from current pos. (A)"
msgstr ""
-"Esegui la seguente animazione al contrario dalla posizione corrente (A)"
+"Esegui la seguente animazione al contrario dalla posizione corrente. (A)"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Play selected animation backwards from end. (Shift+A)"
@@ -5113,11 +5068,11 @@ msgstr "Ferma il playback dell'animazione. (S)"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Play selected animation from start. (Shift+D)"
-msgstr "Esegui l'animazione seguente dall'inizio (Shift+D)"
+msgstr "Esegui la seguente l'animazione dall'inizio. (Shift+D)"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Play selected animation from current pos. (D)"
-msgstr "Esegui la seguente animazione dalla posizione corrente (D)"
+msgstr "Esegui la seguente animazione dalla posizione corrente. (D)"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation position (in seconds)."
@@ -5150,7 +5105,7 @@ msgstr "Apri nell'Inspector"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Display list of animations in player."
-msgstr "Mostra una lista di animazioni nel player."
+msgstr "Mostra la lista di animazioni nel player."
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Autoplay on Load"
@@ -5162,7 +5117,7 @@ msgstr "Abilita l'Onion Skinning"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Onion Skinning Options"
-msgstr "Opzioni dell'onion skinning"
+msgstr "Opzioni dell'Onion Skinning"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Directions"
@@ -5322,7 +5277,7 @@ msgstr ""
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Set the end animation. This is useful for sub-transitions."
-msgstr "Assegna l'animazione finale. Questo è utile per le sotto-transizioni."
+msgstr "Assegna l'animazione finale. Utile per le sotto-transizioni."
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Transition: "
@@ -5330,7 +5285,7 @@ msgstr "Transizione: "
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Play Mode:"
-msgstr "Modalità Gioco:"
+msgstr "Modalità Riproduzione:"
#: editor/plugins/animation_tree_editor_plugin.cpp
#: editor/plugins/animation_tree_player_editor_plugin.cpp
@@ -5364,7 +5319,7 @@ msgstr "Mischia"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Auto Restart:"
-msgstr "Restart Automatico:"
+msgstr "Riavvio Automatico:"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Restart (s):"
@@ -5372,7 +5327,7 @@ msgstr "Riavvia (s):"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Random Restart (s):"
-msgstr "Restart Casuale(i):"
+msgstr "Riavvio Casuale (s):"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Start!"
@@ -5515,7 +5470,7 @@ msgstr "Impossibile risolvere."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, return code:"
-msgstr "Richiesta fallita, codice di return:"
+msgstr "Richiesta fallita, codice ritornato:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Cannot save response to:"
@@ -5531,7 +5486,7 @@ msgstr "Richiesta fallita, troppi ridirezionamenti"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Redirect loop."
-msgstr "Ridirigi loop."
+msgstr "Ciclo di reindirizzamento."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, timeout"
@@ -5547,7 +5502,7 @@ msgstr "Fallito:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Bad download hash, assuming file has been tampered with."
-msgstr "Hash di download non buono, si presume il file sia stato manipolato."
+msgstr "Hash di download errato, si presume il file sia stato manomesso."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Expected:"
@@ -5559,11 +5514,11 @@ msgstr "Ottenuto:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Failed SHA-256 hash check"
-msgstr "Check has SHA-256 fallito"
+msgstr "Controllo hash SHA-256 fallito"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Asset Download Error:"
-msgstr "Errore di scaricamento del contenuto:"
+msgstr "Errore di download del contenuto:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Downloading (%s / %s)..."
@@ -5599,7 +5554,7 @@ msgstr "Errore durante il download"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Download for this asset is already in progress!"
-msgstr "Lo scaricamento di questo contenuto è già in corso!"
+msgstr "Il download di questo contenuto è già in corso!"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Recently Updated"
@@ -5695,7 +5650,7 @@ msgstr "File ZIP dei contenuti"
#: editor/plugins/audio_stream_editor_plugin.cpp
msgid "Audio Preview Play/Pause"
-msgstr "Avvia/Pausa l'anteprima audio"
+msgstr "Riproduci/Pausa Anteprima Audio"
#: editor/plugins/baked_lightmap_editor_plugin.cpp
msgid ""
@@ -5771,7 +5726,7 @@ msgstr "Passo della griglia:"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Primary Line Every:"
-msgstr "Line Primaria Ogni:"
+msgstr "Linea Principale Ogni:"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "steps"
@@ -5860,15 +5815,13 @@ msgstr "Sposta CanvasItem \"%s\" a (%d, %d)"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Locked"
-msgstr "Blocca selezionato"
+msgstr "Bloccato"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Grouped"
-msgstr "Gruppo"
+msgstr "Raggruppato"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
@@ -5887,7 +5840,7 @@ msgid ""
"When active, moving Control nodes changes their anchors instead of their "
"margins."
msgstr ""
-"Quando attivato, muovere i nodi Control cambia le loro ancore invece dei "
+"Se è attivato, spostare i nodi Control modifica le loro ancore invece dei "
"loro margini."
#: editor/plugins/canvas_item_editor_plugin.cpp
@@ -5928,7 +5881,7 @@ msgstr "Centro"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Left Wide"
-msgstr "Lato sinistro"
+msgstr "Lato Sinistro"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Top Wide"
@@ -5972,13 +5925,13 @@ msgstr "Cambia Ancore"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid ""
"Project Camera Override\n"
"Overrides the running project's camera with the editor viewport camera."
msgstr ""
"Sovrascrivi Camera Gioco\n"
-"Sovrascrive la camera del gioco con la camera del viewport dell'editor."
+"Sovrascrive la camera del progetto in esecuzione con la camera del viewport "
+"dell'editor."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -5994,22 +5947,22 @@ msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Lock Selected"
-msgstr "Blocca selezionato"
+msgstr "Blocca selezionato(i)"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Unlock Selected"
-msgstr "Sblocca selezionati"
+msgstr "Sblocca selezionato(i)"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Group Selected"
-msgstr "Gruppo Selezionato"
+msgstr "Raggruppa Selezionato(i)"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Ungroup Selected"
-msgstr "Rimuovi selezionati dal gruppo"
+msgstr "Rimuovi selezionato(i) dal gruppo"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Paste Pose"
@@ -6017,7 +5970,7 @@ msgstr "Incolla Posa"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Clear Guides"
-msgstr "Rimuovi guide"
+msgstr "Rimuovi Guide"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Create Custom Bone(s) from Node(s)"
@@ -6025,7 +5978,7 @@ msgstr "Crea Ossa personalizzate a partire da uno o più Nodi"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Clear Bones"
-msgstr "Rimuovi ossa"
+msgstr "Rimuovi Ossa"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Make IK Chain"
@@ -6048,40 +6001,36 @@ msgstr ""
#: editor/plugins/texture_region_editor_plugin.cpp
#: editor/plugins/tile_set_editor_plugin.cpp scene/gui/graph_edit.cpp
msgid "Zoom Reset"
-msgstr "Ripristina ingrandimento"
+msgstr "Ripristina Zoom"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Select Mode"
-msgstr "Modalità di selezione"
+msgstr "Modalità di Selezione"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Drag: Rotate selected node around pivot."
-msgstr "Rimuovi il nodo o la transizione selezionati."
+msgstr "Trascina: Ruota il nodo selezionato attorno al perno."
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Alt+Drag: Move selected node."
-msgstr "Alt+Drag: Muovi"
+msgstr "Alt+Trascina: Muovi nodo selezionato."
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "V: Set selected node's pivot position."
-msgstr "Rimuovi il nodo o la transizione selezionati."
+msgstr "V: Imposta il perno di rotazione del nodo selezionato."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Alt+RMB: Show list of all nodes at position clicked, including locked."
msgstr ""
-"Mostra una lista di tutti gli oggetti alla posizione cliccata\n"
-"(identico a Alt+RMB in modalità selezione)."
+"Alt+Tasto Destro del Mouse: Mostra una lista di tutti i nodi presenti nel "
+"posto cliccato, compresi quelli bloccati."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "RMB: Add node at position clicked."
-msgstr "Click destro: aggiungi un nodo sulla posizione cliccata."
+msgstr "Click destro: Aggiungi nodo alla posizione cliccata."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -6105,7 +6054,7 @@ msgid ""
"(same as Alt+RMB in select mode)."
msgstr ""
"Mostra una lista di tutti gli oggetti alla posizione cliccata\n"
-"(identico a Alt+RMB in modalità selezione)."
+"(identico a Alt+Click Destro in modalità selezione)."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Click to change object's rotation pivot."
@@ -6117,7 +6066,7 @@ msgstr "Modalità di Pan"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Ruler Mode"
-msgstr "Modalità righello"
+msgstr "Modalità Righello"
#: editor/plugins/canvas_item_editor_plugin.cpp
#, fuzzy
@@ -6251,6 +6200,7 @@ msgid "Always Show Grid"
msgstr "Mostra sempre Griglia"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
msgid "Show Helpers"
msgstr "Mostra guide"
@@ -6276,11 +6226,11 @@ msgstr "Mostra Gruppo e Blocca Icone"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Center Selection"
-msgstr "Centra selezione"
+msgstr "Centra Selezione"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Frame Selection"
-msgstr "Selezione frame"
+msgstr "Selezione Frame"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Preview Canvas Scale"
@@ -6321,11 +6271,11 @@ msgstr "Inserimento Automatico Chiave"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Animation Key and Pose Options"
-msgstr "Chiavi d'Animazione e Opzioni Posa"
+msgstr "Opzioni di Chiavi d'Animazione e Posa"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Insert Key (Existing Tracks)"
-msgstr "Inserisci chiave (tracce esistenti)"
+msgstr "Inserisci Chiave (Tracce Esistenti)"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Copy Pose"
@@ -6333,17 +6283,15 @@ msgstr "Copia Posa"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Clear Pose"
-msgstr "Azzera posa"
+msgstr "Azzera Posa"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Add Node Here"
-msgstr "Aggiungi Nodo"
+msgstr "Aggiungi Nodo Qui"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Instance Scene Here"
-msgstr "Istanzia Scena(e)"
+msgstr "Istanzia Scena(e) Qui"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Multiply grid step by 2"
@@ -6351,7 +6299,7 @@ msgstr "Moltiplica per 2 il passo della griglia"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Divide grid step by 2"
-msgstr "Dividi per 2 il passo della griglia"
+msgstr "Divide per 2 il passo della griglia"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Pan View"
@@ -6359,49 +6307,43 @@ msgstr "Trasla Visuale"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom to 3.125%"
-msgstr "Ingrandisci al 3.125%"
+msgstr "Zoom a 3.125%"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom to 6.25%"
-msgstr "Ingrandisci al 6.25%"
+msgstr "Zoom a 6.25%"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom to 12.5%"
-msgstr "Ingrandisci al 12.5%"
+msgstr "Zoom a 12.5%"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 25%"
-msgstr "Rimpicciolisci"
+msgstr "Zoom a 25%"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 50%"
-msgstr "Rimpicciolisci"
+msgstr "Zoom a 50%"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 100%"
-msgstr "Rimpicciolisci"
+msgstr "Zoom a 100%"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 200%"
-msgstr "Rimpicciolisci"
+msgstr "Zoom a 200%"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 400%"
-msgstr "Rimpicciolisci"
+msgstr "Zoom a 400%"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 800%"
-msgstr "Rimpicciolisci"
+msgstr "Zoom a 800%"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom to 1600%"
-msgstr "Ingrandisci al 1600%"
+msgstr "Zoom a 1600%"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Add %s"
@@ -6434,8 +6376,8 @@ msgid ""
"Drag & drop + Shift : Add node as sibling\n"
"Drag & drop + Alt : Change node type"
msgstr ""
-"Premi & Trascina + Shift : Aggiungi nodo come fratello\n"
-"Premi & Trascina + Alt : Cambia tipo del nodo"
+"Trascina & Rilascia + Shift : Aggiungi nodo come fratello\n"
+"Trascina & Rilascia + Alt : Cambia tipo del nodo"
#: editor/plugins/collision_polygon_editor_plugin.cpp
msgid "Create Polygon3D"
@@ -6617,7 +6559,7 @@ msgstr "Editor Lista Elementi"
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Create Occluder Polygon"
-msgstr "Crea Poligono di occlusione"
+msgstr "Crea Poligono di Occlusione"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Mesh is empty!"
@@ -6730,7 +6672,7 @@ msgid ""
msgstr ""
"Crea una StaticBody e le assegna automaticamente una forma di collisione "
"basata sui poligoni.\n"
-"Questa é l'opzione piú accurata (anche se piú lenta) per il calcolo delle "
+"Questa é l'opzione più accurata (anche se più lenta) per il calcolo delle "
"collisioni."
#: editor/plugins/mesh_instance_editor_plugin.cpp
@@ -6756,7 +6698,7 @@ msgid ""
"This is the fastest (but least accurate) option for collision detection."
msgstr ""
"Crea una singola forma di collisione convessa.\n"
-"Questa é l'opzione piú veloce (anche se meno accurata) per il calcolo delle "
+"Questa è l'opzione più veloce (sebbene meno accurata) per il calcolo delle "
"collisioni."
#: editor/plugins/mesh_instance_editor_plugin.cpp
@@ -6771,22 +6713,21 @@ msgid ""
"geometry in some cases, at the cost of accuracy."
msgstr ""
"Crea una forma di collisione convessa semplificata.\n"
-"Essa è simile a una forma di collisione singola ma in alcuni casi può "
-"risultare in una geometria più semplice al costo di risultare inaccurata."
+"Essa è simile a una forma di collisione singola, ma in alcuni casi può "
+"risultare in una geometria più semplice, al costo di risultare inaccurata."
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Multiple Convex Collision Siblings"
msgstr "Crea Multipli Fratelli di Collsione Convessa"
#: editor/plugins/mesh_instance_editor_plugin.cpp
-#, fuzzy
msgid ""
"Creates a polygon-based collision shape.\n"
"This is a performance middle-ground between a single convex collision and a "
"polygon-based collision."
msgstr ""
"Crea una forma di collisione basata sui poligoni.\n"
-"Questa opzione é, in termini di perfomance, un compromesso tra le due "
+"Questa opzione è, in termini di prestazioni, un compromesso tra le due "
"opzioni prima di questa."
#: editor/plugins/mesh_instance_editor_plugin.cpp
@@ -6794,6 +6735,7 @@ msgid "Create Outline Mesh..."
msgstr "Crea Mesh di Outline..."
#: editor/plugins/mesh_instance_editor_plugin.cpp
+#, fuzzy
msgid ""
"Creates a static outline mesh. The outline mesh will have its normals "
"flipped automatically.\n"
@@ -6851,7 +6793,7 @@ msgstr "Aggiungi Elemento"
#: editor/plugins/mesh_library_editor_plugin.cpp
msgid "Remove Selected Item"
-msgstr "Rimuovi Elementi Selezionati"
+msgstr "Rimuovi Elemento Selezionato"
#: editor/plugins/mesh_library_editor_plugin.cpp
#, fuzzy
@@ -6887,7 +6829,7 @@ msgstr "Sorgente Mesh invalida (non è una MeshInstance)."
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Mesh source is invalid (contains no Mesh resource)."
-msgstr "Sorgente Mesh invalida (non contiene alcun a risorsa Mesh)."
+msgstr "Sorgente Mesh invalida (non contiene alcuna risorsa Mesh)."
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "No surface source specified."
@@ -6910,6 +6852,7 @@ msgid "Select a Source Mesh:"
msgstr "Seleziona una Mesh Sorgente:"
#: editor/plugins/multimesh_editor_plugin.cpp
+#, fuzzy
msgid "Select a Target Surface:"
msgstr "Seleziona una Superficie di Target:"
@@ -6922,6 +6865,7 @@ msgid "Populate MultiMesh"
msgstr "Popola MultiMesh"
#: editor/plugins/multimesh_editor_plugin.cpp
+#, fuzzy
msgid "Target Surface:"
msgstr "Superficie Target:"
@@ -6982,7 +6926,7 @@ msgstr "Genera Rect Visibilità"
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Can only set point into a ParticlesMaterial process material"
msgstr ""
-"É solamente possibile impostare il punto in un materiale di processo "
+"È solamente possibile impostare il punto in un materiale di processo "
"ParticlesMaterial"
#: editor/plugins/particles_2d_editor_plugin.cpp
@@ -6996,7 +6940,7 @@ msgstr "Tempo di Generazione (sec):"
#: editor/plugins/particles_editor_plugin.cpp
msgid "The geometry's faces don't contain any area."
-msgstr "La faccia della geometria non contiene alcuna area."
+msgstr "Le facce della geometria non contengono nessuna area."
#: editor/plugins/particles_editor_plugin.cpp
msgid "The geometry doesn't contain any faces."
@@ -7040,7 +6984,7 @@ msgstr "Sorgente Emissione: "
#: editor/plugins/particles_editor_plugin.cpp
msgid "A processor material of type 'ParticlesMaterial' is required."
-msgstr "Un processor material di tipo \"ParticlesMaterial\" é richiesto."
+msgstr "Un processor material di tipo 'ParticlesMaterial' é richiesto."
#: editor/plugins/particles_editor_plugin.cpp
msgid "Generating AABB"
@@ -7052,7 +6996,7 @@ msgstr "Genera Visibilità AABB"
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Remove Point from Curve"
-msgstr "Rimuovi Punto da Curva"
+msgstr "Rimuovi Punto dalla Curva"
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Remove Out-Control from Curve"
@@ -7060,7 +7004,7 @@ msgstr "Rimuovi Out-Control dalla Curva"
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Remove In-Control from Curve"
-msgstr "Rimuovi In-Control da Curva"
+msgstr "Rimuovi In-Control dalla Curva"
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
@@ -7124,7 +7068,7 @@ msgstr "Elimina Punto"
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
msgid "Close Curve"
-msgstr "Chiudi curva"
+msgstr "Chiudi Curva"
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
@@ -7136,12 +7080,12 @@ msgstr "Opzioni"
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
msgid "Mirror Handle Angles"
-msgstr "Specchia maniglie angolari"
+msgstr "Specchia Angoli Manico"
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
msgid "Mirror Handle Lengths"
-msgstr "Specchia lunghezza maniglie"
+msgstr "Specchia Lunghezze Manico"
#: editor/plugins/path_editor_plugin.cpp
msgid "Curve Point #"
@@ -7177,20 +7121,20 @@ msgstr "Rimuovi Punto In-Control"
#: editor/plugins/path_editor_plugin.cpp
msgid "Split Segment (in curve)"
-msgstr "Dividere segmento (in curva)"
+msgstr "Dividere Segmento (in curva)"
#: editor/plugins/physical_bone_plugin.cpp
msgid "Move Joint"
-msgstr "Spostare il giunto"
+msgstr "Sposta Articolazione"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid ""
"The skeleton property of the Polygon2D does not point to a Skeleton2D node"
-msgstr "La proprietà scheletro del Polygon2D non punta a un nodo Skeleton2D"
+msgstr "La proprietà skeleton del Polygon2D non punta a un nodo Skeleton2D"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Sync Bones"
-msgstr "Sincronizza ossa"
+msgstr "Sincronizza Ossa"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid ""
@@ -7198,11 +7142,11 @@ msgid ""
"Set a texture to be able to edit UV."
msgstr ""
"Nessuna texture in questo poligono.\n"
-"Impostare una texture per poter modificare UV."
+"Imposta una texture per poter modificare l'UV."
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Create UV Map"
-msgstr "Creare mappa UV"
+msgstr "Creare Mappa UV"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid ""
@@ -7214,39 +7158,39 @@ msgstr ""
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Create Polygon & UV"
-msgstr "Crea poligono e UV"
+msgstr "Crea Poligono & UV"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Create Internal Vertex"
-msgstr "Crea vertice interno"
+msgstr "Crea Vertice Interno"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Remove Internal Vertex"
-msgstr "Rimuovi vertice interno"
+msgstr "Rimuovi Vertice Interno"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Invalid Polygon (need 3 different vertices)"
-msgstr "Poligono non valido (sono necessari 3 vertici differenti)"
+msgstr "Poligono non valido (sono necessari 3 vertici diversi)"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Add Custom Polygon"
-msgstr "Aggiungi poligono personalizzato"
+msgstr "Aggiungi Poligono Personalizzato"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Remove Custom Polygon"
-msgstr "Rimuovi poligono personalizzato"
+msgstr "Rimuovi Poligono Personalizzato"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Transform UV Map"
-msgstr "Trasforma la mappa UV"
+msgstr "Trasforma Mappa UV"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Transform Polygon"
-msgstr "Trasforma il poligono"
+msgstr "Trasforma Poligono"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Paint Bone Weights"
-msgstr "Dipingi peso delle ossa"
+msgstr "Dipingi Peso delle Ossa"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Open Polygon 2D UV editor."
@@ -7311,8 +7255,8 @@ msgstr "Scala poligono"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Create a custom polygon. Enables custom polygon rendering."
msgstr ""
-"Crea un poligono personalizzato. Abilita il rendering personalizzato dei "
-"poligoni."
+"Crea un poligono personalizzato. Abilita il rendering dei poligoni "
+"personalizzati."
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid ""
@@ -7320,7 +7264,7 @@ msgid ""
"disabled."
msgstr ""
"Rimuove un poligono personalizzato. Se non ne rimane nessuno, il rendering "
-"personalizzato dei poligoni è disabilitato."
+"dei poligoni personalizzati è disabilitato."
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Paint weights with specified intensity."
@@ -7388,7 +7332,7 @@ msgstr "Passo Y della griglia:"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Sync Bones to Polygon"
-msgstr "Sincronizza le ossa al poligono"
+msgstr "Sincronizza Ossa a Poligono"
#: editor/plugins/resource_preloader_editor_plugin.cpp
msgid "ERROR: Couldn't load resource!"
@@ -7438,7 +7382,7 @@ msgstr "Carica risorsa"
#: editor/plugins/resource_preloader_editor_plugin.cpp
msgid "ResourcePreloader"
-msgstr "Preloader Risorsa"
+msgstr "ResourcePreloader"
#: editor/plugins/room_manager_editor_plugin.cpp
#, fuzzy
@@ -7466,9 +7410,8 @@ msgid "Occluder Set Transform"
msgstr "Azzera la trasformazione"
#: editor/plugins/room_manager_editor_plugin.cpp
-#, fuzzy
msgid "Center Node"
-msgstr "Crea Nodo"
+msgstr "Centra Nodo"
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
@@ -7480,11 +7423,11 @@ msgstr "Il percorso per AnimationPlayer non è valido"
#: editor/plugins/script_editor_plugin.cpp
msgid "Clear Recent Files"
-msgstr "Elimina i file recenti"
+msgstr "Pulisci file recenti"
#: editor/plugins/script_editor_plugin.cpp
msgid "Close and save changes?"
-msgstr "Chiudere e salvare i cambiamenti?"
+msgstr "Chiudi e salva le modifiche?"
#: editor/plugins/script_editor_plugin.cpp
msgid "Error writing TextFile:"
@@ -7540,11 +7483,10 @@ msgid "Script is not in tool mode, will not be able to run."
msgstr "Lo script non è in modalità tool, non sarà possibile eseguirlo."
#: editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid ""
"To run this script, it must inherit EditorScript and be set to tool mode."
msgstr ""
-"Per eseguire questo script, esso deve ereditare da EditorScript ed essere "
+"Per eseguire questo script, deve ereditare da EditorScript ed essere "
"impostato in modalità tool."
#: editor/plugins/script_editor_plugin.cpp
@@ -7606,12 +7548,10 @@ msgid "Move Down"
msgstr "Sposta giù"
#: editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Next Script"
msgstr "Script successivo"
#: editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Previous Script"
msgstr "Script precedente"
@@ -7625,7 +7565,7 @@ msgstr "Apri..."
#: editor/plugins/script_editor_plugin.cpp
msgid "Reopen Closed Script"
-msgstr "Riapri lo script chiuso"
+msgstr "Riapri script chiuso"
#: editor/plugins/script_editor_plugin.cpp
msgid "Save All"
@@ -7711,7 +7651,6 @@ msgstr "Debug con un editor esterno"
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/shader_editor_plugin.cpp
-#, fuzzy
msgid "Online Docs"
msgstr "Documentazione online"
@@ -7721,15 +7660,15 @@ msgstr "Apri la documentazione online di Godot."
#: editor/plugins/script_editor_plugin.cpp
msgid "Search the reference documentation."
-msgstr "Cerca Riferimenti nella documentazione."
+msgstr "Cerca riferimenti nella documentazione."
#: editor/plugins/script_editor_plugin.cpp
msgid "Go to previous edited document."
-msgstr "Vai al documento precedentemente modificato."
+msgstr "Vai al documento modificato precedente."
#: editor/plugins/script_editor_plugin.cpp
msgid "Go to next edited document."
-msgstr "Vai al documento successivo."
+msgstr "Vai al documento modificato successivo."
#: editor/plugins/script_editor_plugin.cpp
msgid "Discard"
@@ -7740,8 +7679,8 @@ msgid ""
"The following files are newer on disk.\n"
"What action should be taken?:"
msgstr ""
-"I file seguenti sono più recenti su disco.\n"
-"Che azione deve essere intrapresa?:"
+"I seguenti file sono più recenti sul disco.\n"
+"Che azione dovrebbe essere intrapresa?:"
#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp
msgid "Debugger"
@@ -7749,7 +7688,7 @@ msgstr "Debugger"
#: editor/plugins/script_editor_plugin.cpp
msgid "Search Results"
-msgstr "Cerca risultati"
+msgstr "Risultati Ricerca"
#: editor/plugins/script_editor_plugin.cpp
msgid "Clear Recent Scripts"
@@ -7911,7 +7850,7 @@ msgstr "Aiuto contestuale"
#: editor/plugins/script_text_editor.cpp
msgid "Toggle Bookmark"
-msgstr "Commuta i segnalibri"
+msgstr "Commuta segnalibro"
#: editor/plugins/script_text_editor.cpp
msgid "Go to Next Bookmark"
@@ -7967,21 +7906,20 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr "Questo scheletro non ha ossa, crea dei nodi figlio Bone2D."
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
-msgstr "Crea Posizione di Riposo dalle Ossa"
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Set Rest Pose to Bones"
msgstr "Imposta Ossa in Posizione di Riposo"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Create Rest Pose from Bones"
+msgstr "Crea Posizione di Riposo dalle Ossa"
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Skeleton2D"
msgstr "Skeleton2D"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-#, fuzzy
msgid "Reset to Rest Pose"
-msgstr "Imposta Ossa in Posizione di Riposo"
+msgstr "Ripristina a Posizione di Riposo"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
#, fuzzy
@@ -8010,77 +7948,66 @@ msgstr "Ortogonale"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Perspective"
-msgstr "Prospettiva"
+msgstr "Prospettica"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Top Orthogonal"
-msgstr "Ortogonale"
+msgstr "Ortogonale dall'Alto"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Top Perspective"
-msgstr "Prospettiva"
+msgstr "Prospettica dall'Alto"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Bottom Orthogonal"
-msgstr "Ortogonale"
+msgstr "Ortogonale dal Basso"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Bottom Perspective"
-msgstr "Prospettiva"
+msgstr "Prospettica dal Basso"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Left Orthogonal"
-msgstr "Ortogonale"
+msgstr "Ortogonale a Sinistra"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Left Perspective"
-msgstr "Prospettiva"
+msgstr "Prospettica a Sinistra"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Right Orthogonal"
-msgstr "Ortogonale"
+msgstr "Ortogonale a Destra"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Right Perspective"
-msgstr "Prospettiva"
+msgstr "Prospettica a Destra"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Front Orthogonal"
-msgstr "Ortogonale"
+msgstr "Ortogonale di Fronte"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Front Perspective"
-msgstr "Prospettiva"
+msgstr "Prospettica di Fronte"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Rear Orthogonal"
-msgstr "Ortogonale"
+msgstr "Ortogonale da Dietro"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Rear Perspective"
-msgstr "Prospettiva"
+msgstr "Prospettica da Dietro"
#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
#: editor/plugins/spatial_editor_plugin.cpp
msgid " [auto]"
-msgstr ""
+msgstr " [auto]"
#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
msgid " [portals active]"
-msgstr ""
+msgstr " [portali attivi]"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
@@ -8109,15 +8036,13 @@ msgid "None"
msgstr "Nessuno"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Rotate"
-msgstr "Stato"
+msgstr "Ruota"
#. TRANSLATORS: This refers to the movement that changes the position of an object.
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Translate"
-msgstr "Trasla:"
+msgstr "Trasla"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Scale"
@@ -8144,38 +8069,32 @@ msgid "Animation Key Inserted."
msgstr "Chiave d'animazione inserita."
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Pitch:"
-msgstr "Inclinazione"
+msgstr "Inclinazione:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Yaw:"
msgstr "Imbardata:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Size:"
-msgstr "Dimensione: "
+msgstr "Dimensione:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Objects Drawn:"
-msgstr "Oggetti disegnati"
+msgstr "Oggetti disegnati:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Material Changes:"
-msgstr "Cambiamenti dei materiali"
+msgstr "Cambiamenti dei materiali:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Shader Changes:"
-msgstr "Cambiamenti degli shader"
+msgstr "Cambiamenti degli shader:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Surface Changes:"
-msgstr "Cambiamenti delle superfici"
+msgstr "Cambiamenti delle superfici:"
#: editor/plugins/spatial_editor_plugin.cpp
#, fuzzy
@@ -8183,9 +8102,8 @@ msgid "Draw Calls:"
msgstr "Draw Calls"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Vertices:"
-msgstr "Vertici"
+msgstr "Vertici:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "FPS: %d (%s ms)"
@@ -8321,12 +8239,11 @@ msgstr "Modificatore Velocità Vista Libera"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Freelook Slow Modifier"
-msgstr "Modificatore Vista Libera Velocità Lenta"
+msgstr "Modificatore Velocità Lenta Vista Libera"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Toggle Camera Preview"
-msgstr "Cambia dimensione Telecamera"
+msgstr "Cambia Anteprima Telecamera"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "View Rotation Locked"
@@ -8345,13 +8262,12 @@ msgid ""
"It cannot be used as a reliable indication of in-game performance."
msgstr ""
"Nota: Il valore di FPS mostrato è relativo al framerate dell'editor.\n"
-"Non può essere usato come indicatore affidabile delle performance durante il "
+"Non può essere usato come indicatore affidabile delle prestazioni durante il "
"gioco."
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Convert Rooms"
-msgstr "Converti in %s"
+msgstr "Converti Stanze"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "XForm Dialog"
@@ -8367,7 +8283,7 @@ msgid ""
msgstr ""
"Fare clic per passare da uno stato di visibilità all'altro.\n"
"\n"
-"Apri gli occhi: Gizmo è visibile.\n"
+"Occhio aperto: Gizmo è visibile.\n"
"Occhio chiuso: Gizmo è nascosto.\n"
"Occhio semiaperto: Gizmo è visibile anche attraverso superfici opache "
"(\"raggi X\")."
@@ -8388,9 +8304,8 @@ msgid "Use Local Space"
msgstr "Usa Spazio Locale"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Use Snap"
-msgstr "Scatta"
+msgstr "Usa Scatto"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Converts rooms for portal culling."
@@ -8513,14 +8428,12 @@ msgid "View Grid"
msgstr "Visualizza Griglia"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "View Portal Culling"
-msgstr "Impostazioni Viewport"
+msgstr "Visualizza Eliminazione Portali"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "View Occlusion Culling"
-msgstr "Impostazioni Viewport"
+msgstr "Visualizza Eliminazione Occlusioni"
#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
@@ -8577,7 +8490,7 @@ msgstr "Ruota (gradi):"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Scale (ratio):"
-msgstr "Scala (rateo):"
+msgstr "Scala (rapporto):"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Type"
@@ -8592,9 +8505,8 @@ msgid "Post"
msgstr "Post"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Unnamed Gizmo"
-msgstr "Progetto Senza Nome"
+msgstr "Gizmo Senza Nome"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Create Mesh2D"
@@ -8626,7 +8538,7 @@ msgstr "Crea LightOccluder2D"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "LightOccluder2D Preview"
-msgstr "Crea LightOccluder2D"
+msgstr "Anteprima LightOccluder2D"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Sprite is empty!"
@@ -8684,7 +8596,7 @@ msgstr "Rimpicciolisci (Pixels): "
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Grow (Pixels): "
-msgstr "Aumento (Pixels): "
+msgstr "Ingrandisci (Pixels): "
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Update Preview"
@@ -8700,7 +8612,7 @@ msgstr "Nessun Frame selezionato"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Add %d Frame(s)"
-msgstr "Aggiungi %d frame(s)"
+msgstr "Aggiungi %d frame"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Add Frame"
@@ -8728,7 +8640,7 @@ msgstr "Aggiungi vuoto"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Change Animation FPS"
-msgstr "Cambia FPS ANimazione"
+msgstr "Cambia FPS Animazione"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "(empty)"
@@ -8764,7 +8676,7 @@ msgstr "Aggiungi una Texture da File"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Add Frames from a Sprite Sheet"
-msgstr "Aggiungi Frames da uno Spritesheet"
+msgstr "Aggiungi Frame da uno Spritesheet"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Insert Empty (Before)"
@@ -8854,14 +8766,12 @@ msgid "Colors"
msgstr "Colore"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Fonts"
msgstr "Font"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Icons"
-msgstr "Icona"
+msgstr "Icone"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -8873,47 +8783,40 @@ msgid "{num} color(s)"
msgstr "{num} colori"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "No colors found."
-msgstr "Nessuna sottorisorsa trovata."
+msgstr "Nessun colore trovato."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "{num} constant(s)"
-msgstr "Costanti"
+msgstr "{num} costanti"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "No constants found."
-msgstr "Costante di colore."
+msgstr "Nessuna costante trovata."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "{num} font(s)"
-msgstr "{num} caratteri"
+msgstr "{num} font"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "No fonts found."
-msgstr "Non trovato!"
+msgstr "Nessun font trovato."
#: editor/plugins/theme_editor_plugin.cpp
msgid "{num} icon(s)"
msgstr "{num} icone"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "No icons found."
-msgstr "Non trovato!"
+msgstr "Nessuna icona trovata."
#: editor/plugins/theme_editor_plugin.cpp
msgid "{num} stylebox(es)"
msgstr "{num} stylebox"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "No styleboxes found."
-msgstr "Nessuna sottorisorsa trovata."
+msgstr "Nessun stylebox trovato."
#: editor/plugins/theme_editor_plugin.cpp
msgid "{num} currently selected"
@@ -8921,7 +8824,7 @@ msgstr "{num} selezionati"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Nothing was selected for the import."
-msgstr ""
+msgstr "Non è stato selezionato nulla da importare."
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -8943,13 +8846,12 @@ msgid "Finalizing"
msgstr "Analizzando"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Filter:"
-msgstr "Filtro:"
+msgstr "Filtra:"
#: editor/plugins/theme_editor_plugin.cpp
msgid "With Data"
-msgstr ""
+msgstr "Con i Dati"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -9027,6 +8929,8 @@ msgid ""
"Caution: Adding icon data may considerably increase the size of your Theme "
"resource."
msgstr ""
+"Attenzione: Aggiungere i dati delle icone potrebbe aumentare notevolmente il "
+"peso della tua risorsa Tema."
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -9044,27 +8948,24 @@ msgid "Select all Theme items."
msgstr "Seleziona file template"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select With Data"
-msgstr "Selezione Punti"
+msgstr "Selezione con data"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all Theme items with item data."
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Deselect All"
-msgstr "Seleziona tutto"
+msgstr "Deseleziona tutto"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Deselect all Theme items."
-msgstr ""
+msgstr "Deseleziona tutti gli elementi del Tema."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Import Selected"
-msgstr "Importa Scena"
+msgstr "Importa Selezionati"
#: editor/plugins/theme_editor_plugin.cpp
msgid ""
@@ -9166,13 +9067,12 @@ msgid "Rename Stylebox Item"
msgstr "Rimuovi Elementi Selezionati"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Invalid file, not a Theme resource."
-msgstr "File non valido, non è una disposizione di un bus audio."
+msgstr "File non valido, non una risorsa Tema."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Invalid file, same as the edited Theme resource."
-msgstr ""
+msgstr "File non valido, corrisponde alla risorsa Tema in modifica."
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -9195,9 +9095,8 @@ msgid "Add Type:"
msgstr "Tipo:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Item:"
-msgstr "Aggiungi Elemento"
+msgstr "Aggiungi Elemento:"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -9205,42 +9104,36 @@ msgid "Add StyleBox Item"
msgstr "Aggiungi Tutti gli Elementi"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove Items:"
-msgstr "Rimuovi l'elemento"
+msgstr "Rimuovi elementi:"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Remove Class Items"
msgstr "Rimuovi Elementi di Classe"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove Custom Items"
-msgstr "Rimuovi Elementi di Classe"
+msgstr "Rimuovi Elementi Personalizzati"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Remove All Items"
msgstr "Rimuovi tutti gli elementi"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Theme Item"
-msgstr "Elementi Tema GUI"
+msgstr "Aggiungi Elemento di Tema"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Old Name:"
-msgstr "Nome del nodo:"
+msgstr "Nome precedente:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Import Items"
-msgstr "Importa tema"
+msgstr "Importa Elementi"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Default Theme"
-msgstr "Predefinito"
+msgstr "Tema Predefinito"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -9268,9 +9161,8 @@ msgid "Cancel Item Rename"
msgstr "Rinomina in blocco"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Override Item"
-msgstr "Sovrascrizioni"
+msgstr "Sovrascrivi Elemento"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Unpin this StyleBox as a main style."
@@ -9305,20 +9197,19 @@ msgstr "Carica i predefiniti"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Show default type items alongside items that have been overridden."
msgstr ""
+"Mostra elementi predefiniti assieme ad elementi che sono stati sovrascritti."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Override All"
-msgstr "Sovrascrizioni"
+msgstr "Sovrascrivi tutti"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Override all default type items."
-msgstr ""
+msgstr "Sovrascrivi tutti gli elementi predefiniti."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Theme:"
-msgstr "Tema"
+msgstr "Tema:"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -9439,19 +9330,21 @@ msgstr "Ha,Molte,Opzioni"
#: editor/plugins/theme_editor_preview.cpp
msgid "Invalid path, the PackedScene resource was probably moved or removed."
msgstr ""
+"Percorso non valido, la risorsa PackedScene è stata probabilmente spostata o "
+"rimossa."
#: editor/plugins/theme_editor_preview.cpp
msgid "Invalid PackedScene resource, must have a Control node at its root."
msgstr ""
+"Risorsa PackedScene non valida, deve avere un nodo Control alla radice."
#: editor/plugins/theme_editor_preview.cpp
-#, fuzzy
msgid "Invalid file, not a PackedScene resource."
-msgstr "File non valido, non è una disposizione di un bus audio."
+msgstr "File non valido, non è una risorsa PackedScene."
#: editor/plugins/theme_editor_preview.cpp
msgid "Reload the scene to reflect its most actual state."
-msgstr ""
+msgstr "Ricarica la scena per riflettere i suo stato più reale."
#: editor/plugins/tile_map_editor_plugin.cpp
msgid "Erase Selection"
@@ -9866,7 +9759,7 @@ msgstr "Rimuovi Poligono di Navigazione"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Edit Tile Priority"
-msgstr "Modifica Priorità Tile"
+msgstr "Modifica Priorità della Tile"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Edit Tile Z Index"
@@ -9898,7 +9791,7 @@ msgstr "TileSet"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "No VCS addons are available."
-msgstr "Non sono disponibili addons VCS."
+msgstr "Non sono disponibili estensioni VCS."
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Error"
@@ -9914,7 +9807,7 @@ msgstr "Commit"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "VCS Addon is not initialized"
-msgstr "L'Addon VCS non è inizializzato"
+msgstr "L'Estenzione VCS non è inizializzata"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Version Control System"
@@ -9962,7 +9855,7 @@ msgstr "Stage Tutto"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Commit Changes"
-msgstr "Commit Cambiamenti"
+msgstr "Commit Modifiche"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "View file diffs before committing them to the latest version"
@@ -10004,11 +9897,11 @@ msgstr "Sampler"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Add input port"
-msgstr "Aggiungi porta di Input"
+msgstr "Aggiungi porta di input"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Add output port"
-msgstr "Aggiungi porta di Output"
+msgstr "Aggiungi porta di output"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Change input port type"
@@ -10020,11 +9913,11 @@ msgstr "Cambia tipo di porta di output"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Change input port name"
-msgstr "Cambia Nome porta Input"
+msgstr "Cambia nome porta Input"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Change output port name"
-msgstr "Cambia Nome porta Input"
+msgstr "Cambia nome porta Input"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Remove input port"
@@ -10178,11 +10071,11 @@ msgstr "Uguale (==)"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Greater Than (>)"
-msgstr "Maggiore Di (>)"
+msgstr "Maggiore di (>)"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Greater Than or Equal (>=)"
-msgstr "Maggiore o uguale (>=)"
+msgstr "Maggiore o Uguale a (>=)"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid ""
@@ -10210,11 +10103,11 @@ msgstr ""
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Less Than (<)"
-msgstr "Minore Di (<)"
+msgstr "Minore di (<)"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Less Than or Equal (<=)"
-msgstr "Minore o Uguale (<=)"
+msgstr "Minore o Uguale a (<=)"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Not Equal (!=)"
@@ -10451,9 +10344,8 @@ msgid "Finds the nearest even integer to the parameter."
msgstr "Trova il numero intero pari più vicino al parametro."
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Clamps the value between 0.0 and 1.0."
-msgstr "Blocca il valore tra 0.0 e 1.0."
+msgstr "Limita il valore tra 0.0 e 1.0."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Extracts the sign of the parameter."
@@ -10472,7 +10364,6 @@ msgid "Returns the square root of the parameter."
msgstr "Restituisce la radice quadrata del parametro."
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid ""
"SmoothStep function( scalar(edge0), scalar(edge1), scalar(x) ).\n"
"\n"
@@ -10561,7 +10452,6 @@ msgid "Transform function."
msgstr "Funzione di trasformazione."
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid ""
"Calculate the outer product of a pair of vectors.\n"
"\n"
@@ -10575,10 +10465,10 @@ msgstr ""
"\n"
"OuterProduct considera il primo parametro \"c\" come un vettore colonna "
"(matrice con una colonna) ed il secondo, \"r\", come un vettore riga "
-"(matrice con una riga) ed esegue una moltiplicazione algebrica lineare di "
-"matrici \"c * r\", creando una matrice i cui numeri di righe sono il numero "
-"di componenti di \"c\" e le cui colonne sono il numero di componenti in \"r"
-"\"."
+"(matrice con una sola riga) ed esegue una moltiplicazione algebrica lineare "
+"di matrici \"c * r\", creando una matrice il quale numero di righe è il "
+"numero di componenti di \"c\" e il cui numero di colonne è il numero di "
+"componenti in \"r\"."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Composes transform from four vectors."
@@ -10695,7 +10585,6 @@ msgid "Returns the vector that points in the direction of refraction."
msgstr "Restituisce un vettore che punta nella direzione della refrazione."
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid ""
"SmoothStep function( vector(edge0), vector(edge1), vector(x) ).\n"
"\n"
@@ -10705,12 +10594,11 @@ msgid ""
msgstr ""
"SmoothStep function( vector(edge0), vector(edge1), vector(x) ).\n"
"\n"
-"Restituisce 0.0 se \"x\" è minore di \"edge0\", e 1.0 se \"x\" è più grande "
+"Restituisce 0.0 se \"x\" è minore di \"edge0\", o 1.0 se \"x\" è più grande "
"di \"edge1\". Altrimenti, il valore di ritorno è interpolato tra 0.0 e 1.0 "
"usando i polinomiali di Hermite."
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid ""
"SmoothStep function( scalar(edge0), scalar(edge1), vector(x) ).\n"
"\n"
@@ -10720,7 +10608,7 @@ msgid ""
msgstr ""
"SmoothStep function( scalar(edge0), scalar(edge1), vector(x) ).\n"
"\n"
-"Restituisce 0.0 se \"x\" è minore di \"edge0\", e 1.0 se \"x\" è più grande "
+"Restituisce 0.0 se \"x\" è minore di \"edge0\", o 1.0 se \"x\" è più grande "
"di \"edge1\". Altrimenti, il valore di ritorno è interpolato tra 0.0 e 1.0 "
"usando i polinomiali di Hermite."
@@ -10773,16 +10661,15 @@ msgid "Vector uniform."
msgstr "Uniforme vettore."
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid ""
"Custom Godot Shader Language expression, with custom amount of input and "
"output ports. This is a direct injection of code into the vertex/fragment/"
"light function, do not use it to write the function declarations inside."
msgstr ""
-"Una espressione del Custom Godot Shader Language, con quantità "
-"personalizzabile di porte input e output. Questa è una iniezione diretta di "
-"codice nella funzione vertex/fragment/light. Non usarla per scrivere le "
-"dichiarazione della funzione all'interno."
+"Una espressione personalizzata in Godot Shader Language, con quantità "
+"variabile di porte input e output. Questa è una iniezione diretta di codice "
+"nella funzione vertex/fragment/light, non usarla per scrivere dichiarazioni "
+"di funzioni al suo interno."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid ""
@@ -10799,30 +10686,29 @@ msgid ""
"it later in the Expressions. You can also declare varyings, uniforms and "
"constants."
msgstr ""
-"Espressione custom per il Godot Shader Language, la quale sarà "
-"sovraposizionata allo shader risultante. Puoi piazzare varie definizioni di "
-"funzioni all'interno e chiamarla dopo nelle Espressioni. Puoi anche "
+"Espressione personalizzata per il Godot Shader Language, la quale sarà "
+"sovrapposta allo shader risultante. Puoi piazzare varie definizioni di "
+"funzioni all'interno e chiamarla in seguito nelle Espressioni. Puoi anche "
"dichiarare varianti, uniformi e costanti."
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "A reference to an existing uniform."
-msgstr "Un riferimento a una uniform esistente."
+msgstr "Un riferimento a una uniforme esistente."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "(Fragment/Light mode only) Scalar derivative function."
-msgstr "(Solo modalità Fragment/Light) Fuzione derivata scalare."
+msgstr "(Solo in modalità Fragment/Light) Funzione derivata scalare."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "(Fragment/Light mode only) Vector derivative function."
-msgstr "(Solo modalità Fragment/Light) Fuzione derivata vettoriale."
+msgstr "(Solo in modalità Fragment/Light) Funzione derivata vettoriale."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid ""
"(Fragment/Light mode only) (Vector) Derivative in 'x' using local "
"differencing."
msgstr ""
-"(Solo modalità Fragment/Light) (Vettore) Derivata in \"x\" usando la "
+"(Solo in modalità Fragment/Light) (Vettore) Derivata in \"x\" usando la "
"differenziazione locale."
#: editor/plugins/visual_shader_editor_plugin.cpp
@@ -10830,7 +10716,7 @@ msgid ""
"(Fragment/Light mode only) (Scalar) Derivative in 'x' using local "
"differencing."
msgstr ""
-"(Solo modalità Fragment/Light) (Scalare) Derivata in \"x\" usando la "
+"(Solo in modalità Fragment/Light) (Scalare) Derivata in \"x\" usando la "
"differeziazione locale."
#: editor/plugins/visual_shader_editor_plugin.cpp
@@ -10838,7 +10724,7 @@ msgid ""
"(Fragment/Light mode only) (Vector) Derivative in 'y' using local "
"differencing."
msgstr ""
-"(Soltanto modalità Fragment/Light) (Vettore) Derivata in \"y\" usando la "
+"(Solo in modalità Fragment/Light) (Vettore) Derivata in \"y\" usando la "
"differenziazione locale."
#: editor/plugins/visual_shader_editor_plugin.cpp
@@ -10846,35 +10732,32 @@ msgid ""
"(Fragment/Light mode only) (Scalar) Derivative in 'y' using local "
"differencing."
msgstr ""
-"(Soltanto modalità Fragment/Light) (Scalare) Derivata in \"y\" usando la "
+"(Solo in modalità Fragment/Light) (Scalare) Derivata in \"y\" usando la "
"differenziazione locale."
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid ""
"(Fragment/Light mode only) (Vector) Sum of absolute derivative in 'x' and "
"'y'."
msgstr ""
-"(Soltanto modalità Fragment/Light) (Vettore) Somma delle derivate assolute "
-"in \"x\" e \"y\"."
+"(Solo in modalità Fragment/Light) (Vettore) Somma delle derivate assolute in "
+"\"x\" e \"y\"."
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid ""
"(Fragment/Light mode only) (Scalar) Sum of absolute derivative in 'x' and "
"'y'."
msgstr ""
-"(Soltanto modalità Fragment/Light) (Scalare) Somma delle derivate assolute "
-"in \"x\" e \"y\"."
+"(Solo in modalità Fragment/Light) (Scalare) Somma delle derivate assolute in "
+"\"x\" e \"y\"."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "VisualShader"
msgstr "VisualShader"
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Edit Visual Property:"
-msgstr "Modifica Proprietà Visive"
+msgstr "Modifica Proprietà Visive:"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Visual Shader Mode Changed"
@@ -10893,17 +10776,16 @@ msgid ""
"Failed to export the project for platform '%s'.\n"
"Export templates seem to be missing or invalid."
msgstr ""
-"Impossibile esportare il progetto per la piattaforma \"%s\".\n"
+"Non è stato possibile esportare il progetto per la piattaforma \"%s\".\n"
"I template di esportazione sembrano essere mancanti o non validi."
#: editor/project_export.cpp
-#, fuzzy
msgid ""
"Failed to export the project for platform '%s'.\n"
"This might be due to a configuration issue in the export preset or your "
"export settings."
msgstr ""
-"Impossibile esportare il progetto per la piattaforma \"%s\".\n"
+"Non è stato possibile esportare il progetto per la piattaforma \"%s\".\n"
"Questo potrebbe essere dovuto a un problema di configurazione nel preset di "
"esportazione o nelle impostazioni di esportazione."
@@ -10975,7 +10857,7 @@ msgid ""
"(comma-separated, e.g: *.json, *.txt, docs/*)"
msgstr ""
"Filtri per esportare file/cartelle che non sono risorse\n"
-"(separati da virgole, per sempio: *.json, *.txt, docs/*)"
+"(separati da virgole, per esempio: *.json, *.txt, docs/*)"
#: editor/project_export.cpp
msgid ""
@@ -10983,7 +10865,7 @@ msgid ""
"(comma-separated, e.g: *.json, *.txt, docs/*)"
msgstr ""
"Filtri per escludere file/cartelle dal progetto\n"
-"(separati da virgole, per sempio: *.json, *.txt, docs/*)"
+"(separati da virgole, per esempio: *.json, *.txt, docs/*)"
#: editor/project_export.cpp
msgid "Features"
@@ -11002,9 +10884,8 @@ msgid "Script"
msgstr "Script"
#: editor/project_export.cpp
-#, fuzzy
msgid "GDScript Export Mode:"
-msgstr "Modalità Esportazione Script:"
+msgstr "Modalità Esportazione GDScript:"
#: editor/project_export.cpp
msgid "Text"
@@ -11012,21 +10893,20 @@ msgstr "Testo"
#: editor/project_export.cpp
msgid "Compiled Bytecode (Faster Loading)"
-msgstr ""
+msgstr "Compilato in Bytecode (Caricamento più Veloce)"
#: editor/project_export.cpp
msgid "Encrypted (Provide Key Below)"
msgstr "Criptato (Fornisci la Chiave Sotto)"
#: editor/project_export.cpp
-#, fuzzy
msgid "Invalid Encryption Key (must be 64 hexadecimal characters long)"
-msgstr "Chiave Crittografica non Valida (deve essere lunga 64 caratteri)"
+msgstr ""
+"Chiave Crittografica non Valida (deve essere lunga 64 caratteri esadecimali)"
#: editor/project_export.cpp
-#, fuzzy
msgid "GDScript Encryption Key (256-bits as hexadecimal):"
-msgstr "Chiave di Crittografia Script (256-bits come esadecimali):"
+msgstr "Chiave di Crittografia GDScript (256 bit in esadecimale):"
#: editor/project_export.cpp
msgid "Export PCK/Zip"
@@ -11034,7 +10914,7 @@ msgstr "Esporta PCK/Zip"
#: editor/project_export.cpp
msgid "Export Project"
-msgstr "Esporta progetto"
+msgstr "Esporta Progetto"
#: editor/project_export.cpp
msgid "Export mode?"
@@ -11066,7 +10946,7 @@ msgstr "Esporta Con Debug"
#: editor/project_manager.cpp
msgid "The path specified doesn't exist."
-msgstr "Il percorso specificato non é esistente."
+msgstr "Il percorso specificato non esiste."
#: editor/project_manager.cpp
msgid "Error opening package file (it's not in ZIP format)."
@@ -11085,7 +10965,7 @@ msgstr "Si prega di scegliere una cartella vuota."
#: editor/project_manager.cpp
msgid "Please choose a \"project.godot\" or \".zip\" file."
-msgstr "Perfavore, scegli un file \"project.godot\" o \".zip\"."
+msgstr "Si prega di scegliere un file \"project.godot\" o \".zip\"."
#: editor/project_manager.cpp
msgid "This directory already contains a Godot project."
@@ -11100,9 +10980,8 @@ msgid "Imported Project"
msgstr "Progetto Importato"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Invalid project name."
-msgstr "Nome Progetto non Valido."
+msgstr "Nome del progetto non valido."
#: editor/project_manager.cpp
msgid "Couldn't create folder."
@@ -11118,7 +10997,7 @@ msgstr "Sarebbe una buona idea dare un nome al tuo progetto."
#: editor/project_manager.cpp
msgid "Invalid project path (changed anything?)."
-msgstr "Percorso di progetto invalido (cambiato qualcosa?)."
+msgstr "Percorso del progetto invalido (cambiato qualcosa?)."
#: editor/project_manager.cpp
msgid ""
@@ -11130,13 +11009,14 @@ msgstr ""
#: editor/project_manager.cpp
msgid "Couldn't edit project.godot in project path."
-msgstr "Impossibile modificare project.godot nel percorso di progetto."
+msgstr "Impossibile modificare project.godot nel percorso del progetto."
#: editor/project_manager.cpp
msgid "Couldn't create project.godot in project path."
-msgstr "Impossibile creare project.godot nel percorso di progetto."
+msgstr "Impossibile creare project.godot nel percorso del progetto."
#: editor/project_manager.cpp
+#, fuzzy
msgid "Error opening package file, not in ZIP format."
msgstr "Errore nell'apertura del file del pacchetto, non è in formato ZIP."
@@ -11150,7 +11030,7 @@ msgstr "Pacchetto installato con successo!"
#: editor/project_manager.cpp
msgid "Rename Project"
-msgstr "Rinomina progetto"
+msgstr "Rinomina Progetto"
#: editor/project_manager.cpp
msgid "Import Existing Project"
@@ -11186,7 +11066,7 @@ msgstr "Percorso Progetto:"
#: editor/project_manager.cpp
msgid "Project Installation Path:"
-msgstr "Percorso Progetto di Installazione:"
+msgstr "Percorso Installazione del Progetto:"
#: editor/project_manager.cpp
msgid "Renderer:"
@@ -11209,7 +11089,7 @@ msgid ""
msgstr ""
"Qualità visiva migliore\n"
"Tutte le funzionalità disponibili\n"
-"Incompatibile con vecchi hardware\n"
+"Incompatibile con hardware poco recente\n"
"Non consigliato per giochi web"
#: editor/project_manager.cpp
@@ -11225,14 +11105,14 @@ msgid ""
msgstr ""
"Qualità visiva inferiore\n"
"Alcune funzionalità non disponibili\n"
-"Funziona sulla maggior parte degli hardware\n"
-"Raccomandato per giochi web"
+"Funziona sulla maggior parte di hardware\n"
+"Consigliato per giochi web"
#: editor/project_manager.cpp
msgid "Renderer can be changed later, but scenes may need to be adjusted."
msgstr ""
"Il renderer può essere cambiato in seguito, ma potrebbe essere necessario "
-"regolare le scene."
+"rivedere le scene."
#: editor/project_manager.cpp
msgid "Unnamed Project"
@@ -11327,22 +11207,20 @@ msgid "Are you sure to run %d projects at once?"
msgstr "Sei sicuro di voler eseguire %d progetti contemporaneamente?"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Remove %d projects from the list?"
-msgstr "Seleziona il dispositivo dall'elenco"
+msgstr "Rimuovere %d progetti dall'elenco?"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Remove this project from the list?"
-msgstr "Seleziona il dispositivo dall'elenco"
+msgstr "Rimuovere questo progetto dall'elenco?"
#: editor/project_manager.cpp
msgid ""
"Remove all missing projects from the list?\n"
"The project folders' contents won't be modified."
msgstr ""
-"Rimuovere tutti i progetti mancanti dalla lista?\n"
-"I contenuti delle cartelle di progetto non saranno modificati."
+"Rimuovere tutti i progetti mancanti dall'elenco?\n"
+"Il contenuto delle cartelle di progetto non verrà modificato."
#: editor/project_manager.cpp
msgid ""
@@ -11358,9 +11236,9 @@ msgid ""
"Are you sure to scan %s folders for existing Godot projects?\n"
"This could take a while."
msgstr ""
-"Sei sicuro di voler scannerizzare %s cartelle per progetti Godot già "
+"Sei sicuro di voler scansionare %s cartelle per progetti Godot già "
"esistenti?\n"
-"Per questo potrebbe volerci un pò."
+"Potrebbe volerci un po' di tempo."
#. TRANSLATORS: This refers to the application where users manage their Godot projects.
#: editor/project_manager.cpp
@@ -11368,9 +11246,8 @@ msgid "Project Manager"
msgstr "Gestore dei progetti"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Local Projects"
-msgstr "Progetti"
+msgstr "Progetti Locali"
#: editor/project_manager.cpp
msgid "Loading, please wait..."
@@ -11381,23 +11258,20 @@ msgid "Last Modified"
msgstr "Ultima Modifica"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Edit Project"
-msgstr "Esporta progetto"
+msgstr "Modifica Progetto"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Run Project"
-msgstr "Rinomina progetto"
+msgstr "Esegui progetto"
#: editor/project_manager.cpp
msgid "Scan"
-msgstr "Esamina"
+msgstr "Scansiona"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Scan Projects"
-msgstr "Progetti"
+msgstr "Scansiona Progetti"
#: editor/project_manager.cpp
msgid "Select a Folder to Scan"
@@ -11408,18 +11282,16 @@ msgid "New Project"
msgstr "Nuovo Progetto"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Import Project"
-msgstr "Progetto Importato"
+msgstr "Importa Progetto"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Remove Project"
-msgstr "Rinomina progetto"
+msgstr "Rimuovi Progetto"
#: editor/project_manager.cpp
msgid "Remove Missing"
-msgstr "Rimuovi mancante"
+msgstr "Rimuovi Mancanti"
#: editor/project_manager.cpp
msgid "About"
@@ -11439,7 +11311,7 @@ msgstr "Rimuovi Tutto"
#: editor/project_manager.cpp
msgid "Also delete project contents (no undo!)"
-msgstr ""
+msgstr "Elimina anche i contenuti del progetto (non reversibile!)"
#: editor/project_manager.cpp
msgid "Can't run project"
@@ -11454,29 +11326,26 @@ msgstr ""
"Esplorare i progetti di esempio ufficiali nella libreria dei contenuti?"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Filter projects"
-msgstr "Filtra proprietà"
+msgstr "Filtra progetti"
#: editor/project_manager.cpp
-#, fuzzy
msgid ""
"This field filters projects by name and last path component.\n"
"To filter projects by name and full path, the query must contain at least "
"one `/` character."
msgstr ""
-"La casella di ricerca filtra i progetti per nome e l'ultimo componente del "
-"percorso.\n"
+"Questo campo filtra i progetti per nome e ultimo componente del percorso.\n"
"Per filtrare i progetti per nome e percorso completo, la query deve "
"contenere almeno un carattere `/`."
#: editor/project_settings_editor.cpp
-msgid "Key "
-msgstr "Tasto "
+msgid "Physical Key"
+msgstr "Tasto Fisico"
#: editor/project_settings_editor.cpp
-msgid "Physical Key"
-msgstr ""
+msgid "Key "
+msgstr "Tasto "
#: editor/project_settings_editor.cpp
msgid "Joy Button"
@@ -11500,7 +11369,7 @@ msgstr ""
#: editor/project_settings_editor.cpp
msgid "An action with the name '%s' already exists."
-msgstr "Un'azione col nome \"%s\" è già esistente."
+msgstr "Un'azione con il nome \"%s\" è già esistente."
#: editor/project_settings_editor.cpp
msgid "Rename Input Action Event"
@@ -11524,7 +11393,7 @@ msgstr "Dispositivo"
#: editor/project_settings_editor.cpp
msgid " (Physical)"
-msgstr ""
+msgstr " (Fisico)"
#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
msgid "Press a Key..."
@@ -11556,19 +11425,19 @@ msgstr "Pulsante Rotellina Giù"
#: editor/project_settings_editor.cpp
msgid "Wheel Left Button"
-msgstr "Pulsante Sinistro della Rotellina"
+msgstr "Pulsante Rotellina Sinistro"
#: editor/project_settings_editor.cpp
msgid "Wheel Right Button"
-msgstr "Pulsante Destro della Rotellina"
+msgstr "Pulsante Rotellina Destro"
#: editor/project_settings_editor.cpp
msgid "X Button 1"
-msgstr "Tasto X 1"
+msgstr "Pulsante X 1"
#: editor/project_settings_editor.cpp
msgid "X Button 2"
-msgstr "Tasto X 2"
+msgstr "Pulsante X 2"
#: editor/project_settings_editor.cpp
msgid "Joypad Axis Index:"
@@ -11604,15 +11473,15 @@ msgstr "Pulsante Sinistro."
#: editor/project_settings_editor.cpp
msgid "Right Button."
-msgstr "Pulsante DEstro."
+msgstr "Pulsante Destro."
#: editor/project_settings_editor.cpp
msgid "Middle Button."
-msgstr "Pulsante centrale."
+msgstr "Pulsante Centrale."
#: editor/project_settings_editor.cpp
msgid "Wheel Up."
-msgstr "Rotellina su."
+msgstr "Rotellina Su."
#: editor/project_settings_editor.cpp
msgid "Wheel Down."
@@ -11624,7 +11493,7 @@ msgstr "Aggiungi Proprietà Globale"
#: editor/project_settings_editor.cpp
msgid "Select a setting item first!"
-msgstr "Prima seleziona un oggetto di impostazione!"
+msgstr "Seleziona prima un elemento di impostazione!"
#: editor/project_settings_editor.cpp
msgid "No property '%s' exists."
@@ -11648,7 +11517,7 @@ msgstr ""
#: editor/project_settings_editor.cpp
msgid "Add Input Action"
-msgstr "Aggiungi azione di input"
+msgstr "Aggiungi Azione di Input"
#: editor/project_settings_editor.cpp
msgid "Error saving settings."
@@ -11667,27 +11536,25 @@ msgid "Override for Feature"
msgstr "Sovrascrivi per Caratteristica"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Add %d Translations"
-msgstr "Aggiungi Traduzione"
+msgstr "Aggiungi %d Traduzioni"
#: editor/project_settings_editor.cpp
msgid "Remove Translation"
msgstr "Rimuovi Traduzione"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Translation Resource Remap: Add %d Path(s)"
-msgstr "Remap Risorse Aggiungi Remap"
+msgstr "Rimappatura Risorse per la Traduzione: Aggiungi %d Percorso(i)"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Translation Resource Remap: Add %d Remap(s)"
-msgstr "Remap Risorse Aggiungi Remap"
+msgstr "Rimappatura Risorse per la Traduzione: Aggiungi %d Remap"
#: editor/project_settings_editor.cpp
+#, fuzzy
msgid "Change Resource Remap Language"
-msgstr "Cambia Lingua Remap Risorse"
+msgstr "Cambia Lingua per il Remap Risorse"
#: editor/project_settings_editor.cpp
msgid "Remove Resource Remap"
@@ -11759,7 +11626,7 @@ msgstr "Traduzioni:"
#: editor/project_settings_editor.cpp
msgid "Remaps"
-msgstr "Remaps"
+msgstr "Rimappature"
#: editor/project_settings_editor.cpp
msgid "Resources:"
@@ -11767,7 +11634,7 @@ msgstr "Risorse:"
#: editor/project_settings_editor.cpp
msgid "Remaps by Locale:"
-msgstr "Remaps per Locale:"
+msgstr "Rimappature per Locale:"
#: editor/project_settings_editor.cpp
msgid "Locale"
@@ -11855,7 +11722,7 @@ msgstr "Seleziona Proprietà"
#: editor/property_selector.cpp
msgid "Select Virtual Method"
-msgstr "Seleziona il Metodo Virtuale"
+msgstr "Seleziona Metodo Virtuale"
#: editor/property_selector.cpp
msgid "Select Method"
@@ -11883,7 +11750,7 @@ msgstr "Usa Espressioni Regolari"
#: editor/rename_dialog.cpp
msgid "Advanced Options"
-msgstr "Opzioni avanzate"
+msgstr "Opzioni Avanzate"
#: editor/rename_dialog.cpp
msgid "Substitute"
@@ -11936,7 +11803,7 @@ msgstr "Passo"
#: editor/rename_dialog.cpp
msgid "Amount by which counter is incremented for each node"
-msgstr "Importo di cui il contatore viene incrementato per ogni nodo"
+msgstr "Quantità di cui viene incrementato il contatore per ogni nodo"
#: editor/rename_dialog.cpp
msgid "Padding"
@@ -11971,6 +11838,7 @@ msgid "snake_case to PascalCase"
msgstr "snake_case a PascalCase"
#: editor/rename_dialog.cpp
+#, fuzzy
msgid "Case"
msgstr "Caso"
@@ -11984,7 +11852,7 @@ msgstr "In Maiuscolo"
#: editor/rename_dialog.cpp
msgid "Reset"
-msgstr "Reset"
+msgstr "Ripristina"
#: editor/rename_dialog.cpp
msgid "Regular Expression Error:"
@@ -12000,7 +11868,7 @@ msgstr "Reparent Nodo"
#: editor/reparent_dialog.cpp
msgid "Reparent Location (Select new Parent):"
-msgstr "Posizione Reparent (Seleziona nuovo genitore):"
+msgstr "Posizione di Reparent (Seleziona nuovo Genitore):"
#: editor/reparent_dialog.cpp
msgid "Keep Global Transform"
@@ -12052,7 +11920,7 @@ msgstr "Istanzia Scena(e)"
#: editor/scene_tree_dock.cpp
msgid "Replace with Branch Scene"
-msgstr "Sostituisci con la Scena Branch"
+msgstr "Sostituisci con Scena Ramo"
#: editor/scene_tree_dock.cpp
msgid "Instance Child Scene"
@@ -12060,7 +11928,7 @@ msgstr "Istanzia Scena Figlia"
#: editor/scene_tree_dock.cpp
msgid "Can't paste root node into the same scene."
-msgstr "Non si può incollare il noto root nella stessa scena."
+msgstr "Non si può incollare il nodo radice nella stessa scena."
#: editor/scene_tree_dock.cpp
msgid "Paste Node(s)"
@@ -12128,12 +11996,16 @@ msgstr "Elimina il nodo \"%s\"?"
msgid ""
"Saving the branch as a scene requires having a scene open in the editor."
msgstr ""
+"Per salvare un ramo come scena è necessario avere una scene aperta "
+"nell'editor."
#: editor/scene_tree_dock.cpp
msgid ""
"Saving the branch as a scene requires selecting only one node, but you have "
"selected %d nodes."
msgstr ""
+"Per salvare un ramo come scena è necessario selezionare un solo nodo, ma ne "
+"sono stati selezionati %s."
#: editor/scene_tree_dock.cpp
msgid ""
@@ -12142,6 +12014,11 @@ msgid ""
"FileSystem dock context menu\n"
"or create an inherited scene using Scene > New Inherited Scene... instead."
msgstr ""
+"Impossibile salvare il ramo del nodo radice come una scena istanziata.\n"
+"Per creare una copia modificabile della scena corrente, duplicala tramite il "
+"menu contestuale del pannello file system\n"
+"altrimenti crea una scena ereditata attraverso Scena > Nuova Scena "
+"Ereditata... ."
#: editor/scene_tree_dock.cpp
msgid ""
@@ -12149,6 +12026,10 @@ msgid ""
"To create a variation of a scene, you can make an inherited scene based on "
"the instanced scene using Scene > New Inherited Scene... instead."
msgstr ""
+"Impossibile salvare il ramo di una scena già istanziata.\n"
+"Per creare una variazione di una scena, potresti invece creare una scena "
+"ereditata basata sulla scena istanziata attraverso Scena > Nuova Scena "
+"Ereditata... ."
#: editor/scene_tree_dock.cpp
msgid "Save New Scene As..."
@@ -12167,7 +12048,7 @@ msgid ""
"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and "
"cause all properties of the node to be reverted to their default."
msgstr ""
-"Abilitare \"Carica Come Placeholder\" disabiliterà \"Figlio Modificabile\" e "
+"Abilitare \"Carica come Placeholder\" disabiliterà \"Figli Modificabili\" e "
"riporterà tutte le proprietà del nodo ai loro valori predefiniti."
#: editor/scene_tree_dock.cpp
@@ -12200,7 +12081,7 @@ msgstr "Altro nodo"
#: editor/scene_tree_dock.cpp
msgid "Can't operate on nodes from a foreign scene!"
-msgstr "Impossibile operare su nodi da scena esterna!"
+msgstr "Impossibile operare su nodi di una scena esterna!"
#: editor/scene_tree_dock.cpp
msgid "Can't operate on nodes the current scene inherits from!"
@@ -12208,7 +12089,7 @@ msgstr "Impossibile operare su nodi da cui la scena corrente eredita!"
#: editor/scene_tree_dock.cpp
msgid "This operation can't be done on instanced scenes."
-msgstr "Questa operazione no può essere eseguita su scene istanziate."
+msgstr "Questa operazione non può essere eseguita su scene istanziate."
#: editor/scene_tree_dock.cpp
msgid "Attach Script"
@@ -12220,27 +12101,27 @@ msgstr "Taglia Nodo(i)"
#: editor/scene_tree_dock.cpp
msgid "Remove Node(s)"
-msgstr "Rimuovi nodo(i)"
+msgstr "Rimuovi Nodo(i)"
#: editor/scene_tree_dock.cpp
msgid "Change type of node(s)"
-msgstr "Cambia il tipo del/i nodo/i"
+msgstr "Cambia il tipo di nodo(i)"
#: editor/scene_tree_dock.cpp
msgid ""
"Couldn't save new scene. Likely dependencies (instances) couldn't be "
"satisfied."
msgstr ""
-"Impossibile salvare la scena. Probabili dipendenze (istanze) non hanno "
-"potuto essere soddisfatte."
+"Impossibile salvare una nuova scena. È probabile che le dipendenze (istanze) "
+"non siano state soddisfatte."
#: editor/scene_tree_dock.cpp
msgid "Error saving scene."
-msgstr "Errore salvando la scena."
+msgstr "Errore durante il salvataggio della scena."
#: editor/scene_tree_dock.cpp
msgid "Error duplicating scene to save it."
-msgstr "Errore duplicando la scena per salvarla."
+msgstr "Errore nel duplicare la scena per salvarla."
#: editor/scene_tree_dock.cpp
msgid "Sub-Resources"
@@ -12248,15 +12129,15 @@ msgstr "Sotto-Risorse"
#: editor/scene_tree_dock.cpp
msgid "Clear Inheritance"
-msgstr "Liberare ereditarietà"
+msgstr "Libera Ereditarietà"
#: editor/scene_tree_dock.cpp
msgid "Editable Children"
-msgstr "Figlio Modificabile"
+msgstr "Figli Modificabili"
#: editor/scene_tree_dock.cpp
msgid "Load As Placeholder"
-msgstr "Carica come placeholder"
+msgstr "Carica come Placeholder"
#: editor/scene_tree_dock.cpp
msgid ""
@@ -12274,7 +12155,7 @@ msgstr "Aggiungi un nodo figlio"
#: editor/scene_tree_dock.cpp
msgid "Expand/Collapse All"
-msgstr "Espandi/Collassa tutto"
+msgstr "Espandi/Comprimi tutto"
#: editor/scene_tree_dock.cpp
msgid "Change Type"
@@ -12282,7 +12163,7 @@ msgstr "Cambia Tipo"
#: editor/scene_tree_dock.cpp
msgid "Reparent to New Node"
-msgstr "Reparent a Nuovo Nodo"
+msgstr "Riparenta a Nuovo Nodo"
#: editor/scene_tree_dock.cpp
msgid "Make Scene Root"
@@ -12290,7 +12171,7 @@ msgstr "Rendi Scena Radice"
#: editor/scene_tree_dock.cpp
msgid "Merge From Scene"
-msgstr "Unisci Da Scena"
+msgstr "Unisci da Scena"
#: editor/scene_tree_dock.cpp editor/script_editor_debugger.cpp
msgid "Save Branch as Scene"
@@ -12314,7 +12195,7 @@ msgid ""
"exists."
msgstr ""
"Istanzia un file scena come Nodo. Crea una scena ereditata se nessun nodo di "
-"root esiste."
+"radice esiste."
#: editor/scene_tree_dock.cpp
msgid "Attach a new or existing script to the selected node."
@@ -12322,7 +12203,7 @@ msgstr "Allega un nuovo script o uno già esistente al nodo selezionato."
#: editor/scene_tree_dock.cpp
msgid "Detach the script from the selected node."
-msgstr "Rimuovi lo script per il nodo selezionato."
+msgstr "Rimuovi lo script dal nodo selezionato."
#: editor/scene_tree_dock.cpp
msgid "Remote"
@@ -12336,7 +12217,7 @@ msgid ""
msgstr ""
"Se selezionato, il pannello della scena remota farà ricaricare il progetto "
"ogni volta che viene aggiornato.\n"
-"Tornare al pannello della scena locale per migliorare le prestazioni."
+"Torna al pannello della scena locale per migliorare le prestazioni."
#: editor/scene_tree_dock.cpp
msgid "Local"
@@ -12344,7 +12225,7 @@ msgstr "Locale"
#: editor/scene_tree_dock.cpp
msgid "Clear Inheritance? (No Undo!)"
-msgstr "Liberare ereditarietà? (No Undo!)"
+msgstr "Liberare Ereditarietà? (Non Annullabile!)"
#: editor/scene_tree_editor.cpp
msgid "Toggle Visible"
@@ -12356,7 +12237,7 @@ msgstr "Sblocca nodo"
#: editor/scene_tree_editor.cpp
msgid "Button Group"
-msgstr "Gruppo pulsanti"
+msgstr "Gruppo Pulsanti"
#: editor/scene_tree_editor.cpp
msgid "(Connecting From)"
@@ -12364,7 +12245,7 @@ msgstr "(Collegamento da)"
#: editor/scene_tree_editor.cpp
msgid "Node configuration warning:"
-msgstr "Avviso confugurazione nodo:"
+msgstr "Avviso configurazione nodo:"
#: editor/scene_tree_editor.cpp
msgid ""
@@ -12372,7 +12253,7 @@ msgid ""
"Click to show signals dock."
msgstr ""
"Il nodo ha %s connessioni e %s gruppi.\n"
-"Cliccare per mostrare il pannello dei segnali."
+"Clicca per mostrare il pannello dei segnali."
#: editor/scene_tree_editor.cpp
msgid ""
@@ -12380,7 +12261,7 @@ msgid ""
"Click to show signals dock."
msgstr ""
"Il nodo ha %s connessioni.\n"
-"Cliccare per mostrare il pannello dei segnali."
+"Clicca per mostrare il pannello dei segnali."
#: editor/scene_tree_editor.cpp
msgid ""
@@ -12392,7 +12273,7 @@ msgstr ""
#: editor/scene_tree_editor.cpp
msgid "Open Script:"
-msgstr "Apri script:"
+msgstr "Apri Script:"
#: editor/scene_tree_editor.cpp
msgid ""
@@ -12420,7 +12301,7 @@ msgid ""
"Click to unpin."
msgstr ""
"AnimationPlayer è bloccato.\n"
-"Fare clic per sbloccare."
+"Fai clic per sbloccare."
#: editor/scene_tree_editor.cpp
msgid "Invalid node name, the following characters are not allowed:"
@@ -12476,7 +12357,7 @@ msgstr "Selezionata estensione errata."
#: editor/script_create_dialog.cpp
msgid "Error loading template '%s'"
-msgstr "Errore caricamento template \"%s\""
+msgstr "Errore di caricamento template \"%s\""
#: editor/script_create_dialog.cpp
msgid "Error - Could not create script in filesystem."
@@ -12484,7 +12365,7 @@ msgstr "Errore - Impossibile creare script in filesystem."
#: editor/script_create_dialog.cpp
msgid "Error loading script from %s"
-msgstr "Errore caricamento script da %s"
+msgstr "Errore di caricamento script da %s"
#: editor/script_create_dialog.cpp
msgid "Overrides"
@@ -12520,7 +12401,7 @@ msgstr "Nome o percorso genitore ereditato non valido."
#: editor/script_create_dialog.cpp
msgid "Script path/name is valid."
-msgstr "Il nome e la path dello script sono validi."
+msgstr "Il nome/percorso dello script sono validi."
#: editor/script_create_dialog.cpp
msgid "Allowed: a-z, A-Z, 0-9, _ and ."
@@ -12528,7 +12409,7 @@ msgstr "Consentiti: a-z, A-Z, 0-9, _ e ."
#: editor/script_create_dialog.cpp
msgid "Built-in script (into scene file)."
-msgstr "Script incorporato (nel file della scena)."
+msgstr "Script integrato (nel file della scena)."
#: editor/script_create_dialog.cpp
msgid "Will create a new script file."
@@ -12547,14 +12428,16 @@ msgid ""
"Note: Built-in scripts have some limitations and can't be edited using an "
"external editor."
msgstr ""
-"Note: Gli script pre-installati hanno alcune limitazioni e non possono "
-"essere modificati utilizzando un editor esterno."
+"Nota: Gli script integrati hanno alcune limitazioni e non possono essere "
+"modificati tramite un editor esterno."
#: editor/script_create_dialog.cpp
msgid ""
"Warning: Having the script name be the same as a built-in type is usually "
"not desired."
msgstr ""
+"Avviso: In genere non è ideale avere il nome dello script uguale a quello di "
+"un tipo predefinito."
#: editor/script_create_dialog.cpp
msgid "Class Name:"
@@ -12566,7 +12449,7 @@ msgstr "Template:"
#: editor/script_create_dialog.cpp
msgid "Built-in Script:"
-msgstr "Script Built-In:"
+msgstr "Script Integrato:"
#: editor/script_create_dialog.cpp
msgid "Attach Node Script"
@@ -12578,7 +12461,7 @@ msgstr "Remoto "
#: editor/script_editor_debugger.cpp
msgid "Bytes:"
-msgstr "Bytes:"
+msgstr "Byte:"
#: editor/script_editor_debugger.cpp
msgid "Warning:"
@@ -12618,7 +12501,7 @@ msgstr "Errori"
#: editor/script_editor_debugger.cpp
msgid "Child process connected."
-msgstr "Processo Figlio Connesso."
+msgstr "Processo figlio connesso."
#: editor/script_editor_debugger.cpp
msgid "Copy Error"
@@ -12626,7 +12509,7 @@ msgstr "Copia Errore"
#: editor/script_editor_debugger.cpp
msgid "Open C++ Source on GitHub"
-msgstr ""
+msgstr "Apri Sorgente C++ su Github"
#: editor/script_editor_debugger.cpp
msgid "Video RAM"
@@ -12634,7 +12517,7 @@ msgstr "RAM Video"
#: editor/script_editor_debugger.cpp
msgid "Skip Breakpoints"
-msgstr "Salta i breakpoint"
+msgstr "Salta i punti di interruzione"
#: editor/script_editor_debugger.cpp
msgid "Inspect Previous Instance"
@@ -12646,7 +12529,7 @@ msgstr "Ispeziona Istanza Successiva"
#: editor/script_editor_debugger.cpp
msgid "Stack Frames"
-msgstr "Impila Frame"
+msgstr "Stack Frame"
#: editor/script_editor_debugger.cpp
msgid "Profiler"
@@ -12670,7 +12553,7 @@ msgstr "Monitor"
#: editor/script_editor_debugger.cpp
msgid "Pick one or more items from the list to display the graph."
-msgstr "Scegli uno o più oggetti dalla lista per mostrare il grafico."
+msgstr "Scegli uno o più elementi dall'elenco per mostrare il grafico."
#: editor/script_editor_debugger.cpp
msgid "List of Video Memory Usage by Resource:"
@@ -12706,11 +12589,11 @@ msgstr "Vari"
#: editor/script_editor_debugger.cpp
msgid "Clicked Control:"
-msgstr "Clicked Control:"
+msgstr "Control Cliccato:"
#: editor/script_editor_debugger.cpp
msgid "Clicked Control Type:"
-msgstr "Tipo Clicked Control:"
+msgstr "Tipo Control Cliccato:"
#: editor/script_editor_debugger.cpp
msgid "Live Edit Root:"
@@ -12738,7 +12621,7 @@ msgstr "Cambia Scorciatoia"
#: editor/settings_config_dialog.cpp
msgid "Editor Settings"
-msgstr "Impostazioni editor"
+msgstr "Impostazioni Editor"
#: editor/settings_config_dialog.cpp
msgid "Shortcuts"
@@ -12805,24 +12688,20 @@ msgid "Change Ray Shape Length"
msgstr "Cambia lunghezza Ray Shape"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Set Room Point Position"
-msgstr "Imposta Posizione Punto Curva"
+msgstr "Imposta Posizione Punto Stanza"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Set Portal Point Position"
-msgstr "Imposta Posizione Punto Curva"
+msgstr "Imposta Posizione Punto Portale"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Set Occluder Sphere Radius"
-msgstr "Modifica Raggio di Forma del Cilindro"
+msgstr "Imposta Raggio della Sfera Occlusore"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Set Occluder Sphere Position"
-msgstr "Imposta Curva In Posizione"
+msgstr "Imposta Posizione della Sfera Occlusore"
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
@@ -12914,34 +12793,34 @@ msgstr "Non si basa su un file risorsa"
#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (missing @path)"
-msgstr "Istanza invalida formato dizionario (manca @path)"
+msgstr "Formato del dizionario dell'istanza non valido (manca @path)"
#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (can't load script at @path)"
msgstr ""
-"Istanza invalida formato dizionario (impossibile caricare script in @path)"
+"Formato del dizionario dell'istanza non valido (impossibile caricare script "
+"in @path)"
#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (invalid script at @path)"
-msgstr "Istanza invalida formato dizionario (script invalido in @path)"
+msgstr ""
+"Formato del dizionario dell'istanza non valido (script invalido in @path)"
#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary (invalid subclasses)"
-msgstr "Istanza invalida formato dizionario (sottoclassi invalide)"
+msgstr "Formato del dizionario dell'istanza non valido (sottoclassi invalide)"
#: modules/gdscript/gdscript_functions.cpp
msgid "Object can't provide a length."
msgstr "L'oggetto non può fornire una lunghezza."
#: modules/gltf/editor_scene_exporter_gltf_plugin.cpp
-#, fuzzy
msgid "Export Mesh GLTF2"
-msgstr "Esporta una libreria di Mesh"
+msgstr "Esporta Mesh GLTF2"
#: modules/gltf/editor_scene_exporter_gltf_plugin.cpp
-#, fuzzy
msgid "Export GLTF..."
-msgstr "Esporta..."
+msgstr "Esporta GLTF..."
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
@@ -12957,11 +12836,11 @@ msgstr "Piano:"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Floor"
-msgstr "Prossimo Piano"
+msgstr "Pavimento Successivo"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Previous Floor"
-msgstr "Piano Precedente"
+msgstr "Pavimento Precedente"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Floor:"
@@ -12976,6 +12855,7 @@ msgid "GridMap Fill Selection"
msgstr "GridMap Riempi Selezione"
#: modules/gridmap/grid_map_editor_plugin.cpp
+#, fuzzy
msgid "GridMap Paste Selection"
msgstr "Sezione GridMap incolla"
@@ -12993,9 +12873,8 @@ msgid "Grid Map"
msgstr "Mappa di Griglia"
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "Snap View"
-msgstr "Scatta la vista"
+msgstr "Scatta Visuale"
#: modules/gridmap/grid_map_editor_plugin.cpp
#, fuzzy
@@ -13076,7 +12955,8 @@ msgstr "Filtra mesh"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Give a MeshLibrary resource to this GridMap to use its meshes."
-msgstr "Dai una risorsa MeshLibrary a questa GridMap per usare le sue mesh."
+msgstr ""
+"Assegna una risorsa MeshLibrary a questa GridMap per usare le sue mesh."
#: modules/lightmapper_cpu/lightmapper_cpu.cpp
msgid "Begin Bake"
@@ -13111,17 +12991,17 @@ msgid "Class name can't be a reserved keyword"
msgstr "Il nome della classe non può essere una parola chiave riservata"
#: modules/mono/csharp_script.cpp
-#, fuzzy
msgid "Build Solution"
-msgstr "Riempi Selezione"
+msgstr "Crea Soluzione"
#: modules/mono/mono_gd/gd_mono_utils.cpp
+#, fuzzy
msgid "End of inner exception stack trace"
msgstr "Fine dell'analisi dell’eccezione interna dello stack"
#: modules/recast/navigation_mesh_editor_plugin.cpp
msgid "Bake NavMesh"
-msgstr "Preprocessa NavMesh"
+msgstr "Prepara NavMesh"
#: modules/recast/navigation_mesh_editor_plugin.cpp
msgid "Clear the navigation mesh."
@@ -13184,24 +13064,24 @@ msgid ""
"A node yielded without working memory, please read the docs on how to yield "
"properly!"
msgstr ""
-"Un nodo ha ceduto senza memoria di lavoro, si prega di leggere la "
-"documentazione riguardo a come cedere in maniera corretta!"
+"Un nodo ha reso (yield) senza memoria di lavoro, si prega di leggere la "
+"documentazione su come rendere correttamente!"
#: modules/visual_script/visual_script.cpp
msgid ""
"Node yielded, but did not return a function state in the first working "
"memory."
msgstr ""
-"Il nodo ha ceduto, ma non ha ritornato uno stato di funzione nella prima "
-"memoria di lavoro."
+"Il nodo ha reso (yield), ma non ha ritornato uno stato di funzione nella "
+"prima memoria di lavoro."
#: modules/visual_script/visual_script.cpp
msgid ""
"Return value must be assigned to first element of node working memory! Fix "
"your node please."
msgstr ""
-"Il valore di return deve essere assegnato al primo elemento della memoria di "
-"lavoro del nodo! Si prega di aggiustare il nodo."
+"Il valore restituito (return) deve essere assegnato al primo elemento della "
+"memoria di lavoro del nodo! Si prega di correggere il nodo."
#: modules/visual_script/visual_script.cpp
msgid "Node returned an invalid sequence output: "
@@ -13244,18 +13124,16 @@ msgid "Add Output Port"
msgstr "Aggiungi Porta Output"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Change Port Type"
-msgstr "Cambia Tipo"
+msgstr "Cambia Tipo Porta"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Change Port Name"
-msgstr "Cambia Nome porta Input"
+msgstr "Cambia Nome Porta"
#: modules/visual_script/visual_script_editor.cpp
msgid "Override an existing built-in function."
-msgstr "Sovrascrivi una funzione built-in esistente."
+msgstr "Sovrascrivi una funzione integrata esistente."
#: modules/visual_script/visual_script_editor.cpp
msgid "Create a new function."
@@ -13263,7 +13141,7 @@ msgstr "Crea una nuova funzione."
#: modules/visual_script/visual_script_editor.cpp
msgid "Variables:"
-msgstr "Valiabili:"
+msgstr "Variabili:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Create a new variable."
@@ -13303,7 +13181,7 @@ msgstr "Aggiungi Funzione"
#: modules/visual_script/visual_script_editor.cpp
msgid "Delete input port"
-msgstr "Rimuovi Porta Input"
+msgstr "Elimina porta input"
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Variable"
@@ -13342,8 +13220,8 @@ msgstr ""
#: modules/visual_script/visual_script_editor.cpp
msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
-"Mantieni premuto Control per rilasciare un Getter. Mantieni premuto Shift "
-"per rilasciare una firma generica."
+"Mantieni premuto Ctrl per rilasciare un Getter. Mantieni premuto Shift per "
+"rilasciare una firma generica."
#: modules/visual_script/visual_script_editor.cpp
msgid "Hold %s to drop a simple reference to the node."
@@ -13366,9 +13244,8 @@ msgid "Add Preload Node"
msgstr "Aggiungi Nodo Preload"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Add Node(s)"
-msgstr "Aggiungi Nodo"
+msgstr "Aggiungi Nodo(i)"
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Node(s) From Tree"
@@ -13381,7 +13258,7 @@ msgid ""
msgstr ""
"Impossibile lasciare le proprietà perché lo script \"%s\" non è usato nella "
"scena.\n"
-"Lascia andare premendo \"Shift (Maiuscolo)\" per copiare solo la firma."
+"Lascia andare tenendo premuto \"Shift\" per copiare solo la firma."
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Getter Property"
@@ -13441,7 +13318,7 @@ msgstr "Incolla Nodi VisualScript"
#: modules/visual_script/visual_script_editor.cpp
msgid "Can't create function with a function node."
-msgstr "Impossibile creare funzioni con il nodo funzione."
+msgstr "Impossibile creare funzioni con un nodo funzione."
#: modules/visual_script/visual_script_editor.cpp
msgid "Can't create function of nodes from nodes of multiple functions."
@@ -13636,37 +13513,31 @@ msgstr "Seleziona il dispositivo dall'elenco"
#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
-msgstr ""
+msgstr "Esecuzione su %s"
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Exporting APK..."
-msgstr "Esportando Tutto"
+msgstr "Esportando APK..."
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Uninstalling..."
-msgstr "Disinstalla"
+msgstr "Disinstallando..."
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Installing to device, please wait..."
-msgstr "Caricamento, per favore attendere..."
+msgstr "Installazione sul dispositivo, per favore attendere..."
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Could not install to device: %s"
-msgstr "Impossibile istanziare la scena!"
+msgstr "Impossibile installare sul dispositivo: %s"
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Running on device..."
-msgstr "Eseguendo Script Personalizzato..."
+msgstr "In esecuzione sul dispositivo..."
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Could not execute on device."
-msgstr "Impossibile creare la cartella."
+msgstr "Impossibile eseguire sul dispositivo."
#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
@@ -13685,6 +13556,8 @@ msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
msgstr ""
+"Devono essere configurate le impostazioni Debug Keystore, Debug User E Debug "
+"Password, altrimenti nessuna di esse."
#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
@@ -13696,6 +13569,8 @@ msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
msgstr ""
+"Devono essere configurate le impostazioni Release Keystore, Release User E "
+"Release Password, altrimenti nessuna di esse."
#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
@@ -13709,7 +13584,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
-msgstr "Un percorso invalido per il SDK Android nelle Impostazioni Editor."
+msgstr "Percorso per il SDK Android non valido nelle Impostazioni Editor."
#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
@@ -13750,7 +13625,7 @@ msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
msgstr ""
-"Modulo \"GodotPaymentV3\" non valido incluso nelle impostazione del progetto "
+"Modulo \"GodotPaymentV3\" non valido incluso nell'impostazione del progetto "
"\"android/moduli\" (modificato in Godot 3.2.2).\n"
#: platform/android/export/export_plugin.cpp
@@ -13776,35 +13651,34 @@ msgid ""
"directory.\n"
"The resulting %s is unsigned."
msgstr ""
+"Non è stato possibile trovare \"apksigner\".\n"
+"Verificare che il comando sia disponibile nella directory degli strumenti di "
+"compilazione Android SDK.\n"
+"Il %s risultato non è firmato."
#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr ""
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Signing release %s..."
-msgstr ""
-"Scansione File,\n"
-"Si prega di attendere..."
+msgstr "Firmando rilascio %s..."
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Could not find keystore, unable to export."
-msgstr "Impossibile aprire il template per l'esportazione:"
+msgstr "Non è stato possibile trovare keystore, impossible esportare."
#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
-msgstr ""
+msgstr "'apksigner' ha restituito con errore #%d"
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Verifying %s..."
-msgstr "Aggiungendo %s..."
+msgstr "Verificando %s..."
#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
-msgstr ""
+msgstr "Verifica 'apksigner' di %s non riuscita."
#: platform/android/export/export_plugin.cpp
#, fuzzy
@@ -13813,7 +13687,8 @@ msgstr "Esportazione per Android"
#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
-msgstr "Nome file invalido! Il Bundle Android App richiede l'estensione *.aab."
+msgstr ""
+"Nome file non valido! Il Bundle Android App richiede l'estensione *.aab."
#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
@@ -13821,19 +13696,19 @@ msgstr "L'estensione APK non è compatibile con il Bundle Android App."
#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
-msgstr "Nome file invalido! L'APK Android richiede l'estensione *.apk."
+msgstr "Nome file non valido! L'APK Android richiede l'estensione *.apk."
#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
-msgstr ""
+msgstr "Formato d'esportazione non supportato!\n"
#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
msgstr ""
-"Tentativo di costruire da un template build personalizzato, ma nesuna "
-"informazione sulla sua versione esiste. Perfavore, reinstallalo dal menu "
+"Tentato di costruire da un template build personalizzato, ma nessuna "
+"informazione sulla sua versione esiste. Per favore, reinstallalo dal menu "
"\"Progetto\"."
#: platform/android/export/export_plugin.cpp
@@ -13846,22 +13721,22 @@ msgstr ""
"Versione build di Android non coerente:\n"
" Template installato: %s\n"
" Versione Godot: %s\n"
-"Perfavore, reinstalla il build template di Android dal menu \"Progetto\"."
+"Per favore, reinstalla il build template di Android dal menu \"Progetto\"."
#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
+"Impossibile sovrascrivere i file res://android/build/res/*.xml con il nome "
+"del progetto"
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Could not export project files to gradle project\n"
-msgstr "Impossibile creare project.godot nel percorso di progetto."
+msgstr "Impossibile esportare i file del progetto in un progetto gradle\n"
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Could not write expansion package file!"
-msgstr "Impossibile scrivere il file:"
+msgstr "Impossibile scrivere il file del pacchetto di espansione!"
#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
@@ -13872,7 +13747,7 @@ msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
-"Costruzione del progetto Android fallita, controlla l'output per vedere gli "
+"Compilazione del progetto Android fallita, controlla l'output per vedere gli "
"errori.\n"
"In alternativa, visita docs.godotengine.org per la documentazione della "
"build Android."
@@ -13890,21 +13765,20 @@ msgstr ""
"directory del progetto gradle per gli output."
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Package not found: %s"
-msgstr "Animazione non trovata: \"%s\""
+msgstr "Pacchetto non trovato: \"%s\""
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Creating APK..."
-msgstr "Creazione contorni..."
+msgstr "Creazione APK..."
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid ""
"Could not find template APK to export:\n"
"%s"
-msgstr "Impossibile aprire il template per l'esportazione:"
+msgstr ""
+"Impossibile trovare il template APK per l'esportazione:\n"
+"%s"
#: platform/android/export/export_plugin.cpp
msgid ""
@@ -13913,28 +13787,30 @@ msgid ""
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
+"Mancano librerie nel template di esportazione per le architetture "
+"selezionate: %s.\n"
+"Si prega di costruire un template con tutte le librerie richieste, o "
+"deselezionare le architetture mancanti nel preset di esportazione."
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Adding files..."
-msgstr "Aggiungendo %s..."
+msgstr "Aggiungendo file..."
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Could not export project files"
-msgstr "Impossibile scrivere il file:"
+msgstr "Impossibile esportare i file del progetto"
#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
-msgstr ""
+msgstr "Allineamento APK..."
#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
-msgstr ""
+msgstr "Impossibile decomprimere l'APK temporaneamente non allineato."
#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
msgid "Identifier is missing."
-msgstr "L'identificatore è mancante."
+msgstr "Identificatore mancante."
#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
msgid "The character '%s' is not allowed in Identifier."
@@ -13978,49 +13854,44 @@ msgid "Could not write file:"
msgstr "Impossibile scrivere il file:"
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Could not read file:"
-msgstr "Impossibile scrivere il file:"
+msgstr "Impossibile leggere il file:"
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Could not read HTML shell:"
-msgstr "Impossibile leggere la shell HTML personalizzata:"
+msgstr "Impossibile leggere la shell HTML:"
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Could not create HTTP server directory:"
-msgstr "Impossibile creare la cartella."
+msgstr "Impossibile creare la directory per il server HTTP:"
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Error starting HTTP server:"
-msgstr "Errore salvando la scena."
+msgstr "Errore all'avvio del server HTTP:"
#: platform/osx/export/export.cpp
-#, fuzzy
msgid "Invalid bundle identifier:"
-msgstr "Identificatore non valido:"
+msgstr "Identificatore del bundle non valido:"
#: platform/osx/export/export.cpp
msgid "Notarization: code signing required."
-msgstr ""
+msgstr "Autenticazione: è richiesta la firma del codice."
#: platform/osx/export/export.cpp
msgid "Notarization: hardened runtime required."
-msgstr ""
+msgstr "Autenticazione: è richiesto un runtime rafforzato."
#: platform/osx/export/export.cpp
msgid "Notarization: Apple ID name not specified."
-msgstr ""
+msgstr "Autenticazione: nome Apple ID non specificato."
#: platform/osx/export/export.cpp
msgid "Notarization: Apple ID password not specified."
-msgstr ""
+msgstr "Autenticazione: password Apple ID non specificato."
#: platform/uwp/export/export.cpp
msgid "Invalid package short name."
-msgstr "Nome pacchetto invalido, troppo corto."
+msgstr "Nome breve del pacchetto non valido."
#: platform/uwp/export/export.cpp
msgid "Invalid package unique name."
@@ -14040,9 +13911,10 @@ msgstr "GUID publisher invalido."
#: platform/uwp/export/export.cpp
msgid "Invalid background color."
-msgstr "Colore di background invalido."
+msgstr "Colore di sfondo non valido."
#: platform/uwp/export/export.cpp
+#, fuzzy
msgid "Invalid Store Logo image dimensions (should be 50x50)."
msgstr ""
"Dimensioni dell'immagine dello Store Logo invalide (dovrebbero essere 50x50)."
@@ -14080,7 +13952,7 @@ msgstr ""
#: platform/uwp/export/export.cpp
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr ""
-"Dimensioni non valide dell'immagine dello splash screen (dovrebbero essere "
+"Dimensioni per l'immagine dello splash screen non valide (dovrebbero essere "
"620x300)."
#: scene/2d/animated_sprite.cpp
@@ -14089,7 +13961,7 @@ msgid ""
"order for AnimatedSprite to display frames."
msgstr ""
"Una risorsa SpriteFrames deve essere creata o impostata nella proprietà "
-"\"Frames\" in modo da far mostrare i frame dal nodo AnimatedSprite."
+"\"Frames\" per permettere a AnimatedSprite di visualizzare i frame."
#: scene/2d/canvas_modulate.cpp
msgid ""
@@ -14097,7 +13969,7 @@ msgid ""
"scenes). The first created one will work, while the rest will be ignored."
msgstr ""
"Solamente un CanvasModulate visibile è consentito per scena (o insieme di "
-"scene istanziate). Il primo creato funzionerà, mentre i restanti saranno "
+"scene istanziate). Il primo creato funzionerà, mentre gli altri saranno "
"ignorati."
#: scene/2d/collision_object_2d.cpp
@@ -14108,8 +13980,8 @@ msgid ""
msgstr ""
"Questo nodo non ha una forma, non può quindi collidere o interagire con gli "
"altri oggetti.\n"
-"Devi aggiungere come figlio un CollisionShape2D oppure un CollisionPolygon2D "
-"per definire la sua forma."
+"Aggiungi come figlio un CollisionShape2D o un CollisionPolygon2D per "
+"definire la sua forma."
#: scene/2d/collision_polygon_2d.cpp
msgid ""
@@ -14118,7 +13990,7 @@ msgid ""
"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
msgstr ""
"CollisionPolygon2D serve a fornire una forma di collisione a un nodo "
-"derivato di CollisionObject2D. Si prega di utilizzarlo solamente come figlio "
+"derivato da CollisionObject2D. Si prega di utilizzarlo solamente come figlio "
"di Area2D, StaticBody2D, RigidBody2D, KinematicBody2D, etc. in modo da "
"dargli una forma."
@@ -14139,16 +14011,15 @@ msgstr ""
"costruzione \"Segmenti\"."
#: scene/2d/collision_shape_2d.cpp
-#, fuzzy
msgid ""
"CollisionShape2D only serves to provide a collision shape to a "
"CollisionObject2D derived node. Please only use it as a child of Area2D, "
"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
msgstr ""
-"CollisionShape2D serve a fornire una forma di collisione a un nodo derivato "
-"da CollisionObject2D. Si prega di utilizzarlo solamente come figlio di "
-"Area2D, StaticBody2D, RigidBody2D, KinematicBody2D, etc. in modo da dargli "
-"una forma."
+"CollisionShape2D serve solo a fornire una forma di collisione a un nodo "
+"derivato da CollisionObject2D. Si prega di utilizzarlo solamente come figlio "
+"di Area2D, StaticBody2D, RigidBody2D, KinematicBody2D, etc. in modo da "
+"dargli una forma."
#: scene/2d/collision_shape_2d.cpp
msgid ""
@@ -14163,9 +14034,9 @@ msgid ""
"Polygon-based shapes are not meant be used nor edited directly through the "
"CollisionShape2D node. Please use the CollisionPolygon2D node instead."
msgstr ""
-"Le forme basate sui poligoni non sono state fatte per essere usate nè "
-"modificate direttamente tramite il nodo CollisionShape2D. Per piacere usa "
-"invece il nodo CollisionPolygon2D."
+"Le forme basate sui poligoni non sono dovrebbero essere usate né modificate "
+"direttamente tramite il nodo CollisionShape2D. Si prega di usare invece il "
+"nodo CollisionPolygon2D."
#: scene/2d/cpu_particles_2d.cpp
msgid ""
@@ -14193,14 +14064,14 @@ msgstr "Il giunto non è collegato a due PhysicsBody2D"
#: scene/2d/joints_2d.cpp
msgid "Node A and Node B must be different PhysicsBody2Ds"
-msgstr "Il Nodo A e il Nodo B devono essere PhysicsBody2D diversi"
+msgstr "Nodo A e Nodo B devono essere PhysicsBody2D diversi"
#: scene/2d/light_2d.cpp
msgid ""
"A texture with the shape of the light must be supplied to the \"Texture\" "
"property."
msgstr ""
-"Una texture con una forma della luce deve essere fornita alla proprietà "
+"Una texture con la forma della luce deve essere fornita alla proprietà "
"\"Texture\"."
#: scene/2d/light_occluder_2d.cpp
@@ -14213,7 +14084,7 @@ msgstr ""
#: scene/2d/light_occluder_2d.cpp
msgid "The occluder polygon for this occluder is empty. Please draw a polygon."
msgstr ""
-"Il poligono per questo occluder è vuoto. Perfavore, disegna un poligono."
+"Il poligono per questo occluder è vuoto. Si prega di disegnare un poligono."
#: scene/2d/navigation_polygon.cpp
msgid ""
@@ -14230,14 +14101,14 @@ msgid ""
"node. It only provides navigation data."
msgstr ""
"NavigationPolygonInstance deve essere figlio o nipote di un nodo "
-"Navigation2D. Fornisce solamente dati di navigazione."
+"Navigation2D. Esso fornisce solamente dati di navigazione."
#: scene/2d/parallax_layer.cpp
msgid ""
"ParallaxLayer node only works when set as child of a ParallaxBackground node."
msgstr ""
-"Il nodo ParallaxLayer funziona solamente quando impostato come figlio di un "
-"nodo ParallaxBackground."
+"Il nodo ParallaxLayer funziona solamente se impostato come figlio di un nodo "
+"ParallaxBackground."
#: scene/2d/particles_2d.cpp
msgid ""
@@ -14254,8 +14125,8 @@ msgid ""
"A material to process the particles is not assigned, so no behavior is "
"imprinted."
msgstr ""
-"Un materiale per processare le particelle non é assegnato, pertanto nessun "
-"comportamento é impresso."
+"Non è assegnato un materiale per processare le particelle, pertanto nessun "
+"comportamento viene impresso."
#: scene/2d/particles_2d.cpp
msgid ""
@@ -14268,8 +14139,7 @@ msgstr ""
#: scene/2d/path_2d.cpp
msgid "PathFollow2D only works when set as a child of a Path2D node."
msgstr ""
-"PathFollow2D funziona solamente quando impostato come figlio di un nodo "
-"Path2D."
+"PathFollow2D funziona solamente se impostato come figlio di un nodo Path2D."
#: scene/2d/physics_body_2d.cpp
msgid ""
@@ -14278,11 +14148,10 @@ msgid ""
"Change the size in children collision shapes instead."
msgstr ""
"I cambiamenti di dimensione a RigidBody2D (in modalità rigida o carattere) "
-"saranno sovrascritti dal motore fisico quando in esecuzione.\n"
+"saranno sovrascritti dal motore fisico durante l'esecuzione.\n"
"Modifica invece la dimensione nelle forme di collisione figlie."
#: scene/2d/remote_transform_2d.cpp
-#, fuzzy
msgid "Path property must point to a valid Node2D node to work."
msgstr "La proprietà path deve puntare a un nodo Node2D valido per funzionare."
@@ -14310,16 +14179,16 @@ msgid ""
"KinematicBody2D, etc. to give them a shape."
msgstr ""
"TileMap con Use Parent abilitato richiede un genitore CollisionObject2D per "
-"dargli forma. Perfavore, usalo come figlio di Area2D, StaticBody2D, "
-"RigidBody2D, KinematicBody2D, etc. per dargli una forma."
+"dargli forma. Si prega di usalo come figlio di Area2D, StaticBody2D, "
+"RigidBody2D, KinematicBody2D, ecc. per dare loro una forma."
#: scene/2d/visibility_notifier_2d.cpp
msgid ""
"VisibilityEnabler2D works best when used with the edited scene root directly "
"as parent."
msgstr ""
-"VisibilityEnabler2D funziona meglio quando usato con il nodo principale "
-"della scena ereditata direttamente come genitore."
+"VisibilityEnabler2D funziona meglio se usato con il nodo radice della scena "
+"modificata direttamente come genitore."
#: scene/3d/arvr_nodes.cpp
msgid "ARVRCamera must have an ARVROrigin node as its parent."
@@ -14330,13 +14199,12 @@ msgid "ARVRController must have an ARVROrigin node as its parent."
msgstr "ARVRController deve avere un nodo ARVROrigin come genitore."
#: scene/3d/arvr_nodes.cpp
-#, fuzzy
msgid ""
"The controller ID must not be 0 or this controller won't be bound to an "
"actual controller."
msgstr ""
-"L'id del controller non deve essere 0 o non verrà associato a un controller "
-"attuale."
+"L'ID del controller non deve essere 0 o esso non verrà associato a un vero "
+"controller."
#: scene/3d/arvr_nodes.cpp
msgid "ARVRAnchor must have an ARVROrigin node as its parent."
@@ -14348,8 +14216,8 @@ msgid ""
"The anchor ID must not be 0 or this anchor won't be bound to an actual "
"anchor."
msgstr ""
-"L'ID dell'ancora non deve essere 0 oppure non verrà associato a un'ancora "
-"attuale."
+"L'ID dell'ancora non deve essere 0 oppure essa non verrà associata a "
+"un'ancora vera."
#: scene/3d/arvr_nodes.cpp
msgid "ARVROrigin requires an ARVRCamera child node."
@@ -14369,11 +14237,11 @@ msgstr "Preparazione Ambiente"
#: scene/3d/baked_lightmap.cpp
msgid "Generating capture"
-msgstr "Generando cattura"
+msgstr "Generazione cattura"
#: scene/3d/baked_lightmap.cpp
msgid "Saving lightmaps"
-msgstr "Salvando Lightmap"
+msgstr "Salvataggio Lightmap"
#: scene/3d/baked_lightmap.cpp
msgid "Done"
@@ -14391,7 +14259,6 @@ msgstr ""
"definire la sua forma."
#: scene/3d/collision_polygon.cpp
-#, fuzzy
msgid ""
"CollisionPolygon only serves to provide a collision shape to a "
"CollisionObject derived node. Please only use it as a child of Area, "
@@ -14399,30 +14266,31 @@ msgid ""
msgstr ""
"CollisionPolygon serve solamente a fornire una forma di collisione a un nodo "
"derivato da CollisionObject. Si prega di usarlo solamente come figlio di "
-"Area, StaticBody, RigidBody, KinematicBody, etc. in modo da dargli una forma."
+"Area, StaticBody, RigidBody, KinematicBody, ecc. in modo da dare loro una "
+"forma."
#: scene/3d/collision_polygon.cpp
msgid "An empty CollisionPolygon has no effect on collision."
msgstr "Un CollisionPolygon vuoto non ha effetti in collisione."
#: scene/3d/collision_shape.cpp
-#, fuzzy
msgid ""
"CollisionShape only serves to provide a collision shape to a CollisionObject "
"derived node. Please only use it as a child of Area, StaticBody, RigidBody, "
"KinematicBody, etc. to give them a shape."
msgstr ""
-"CollisionShape serve a fornire una forma di collisione a un nodo derivato da "
-"CollisionObject. Si prega di utilizzarlo solamente come figlio di Area, "
-"StaticBody, RigidBody, KinematicBody, etc. in modo da dargli una forma."
+"CollisionShape serve solamente a fornire una forma di collisione a un nodo "
+"derivato da CollisionObject. Si prega di usarlo solamente come figlio di "
+"Area, StaticBody, RigidBody, KinematicBody, etc. in modo da dare loro una "
+"forma."
#: scene/3d/collision_shape.cpp
msgid ""
"A shape must be provided for CollisionShape to function. Please create a "
"shape resource for it."
msgstr ""
-"Una forma deve essere fornita per il CollisionShape per farlo funzionare. "
-"Perfavore, creali una risorsa \"forma\"."
+"È necessario fornire una forma al CollisionShape per farlo funzionare. "
+"Perciò, si prega di creare una risorsa forma (shape)."
#: scene/3d/collision_shape.cpp
msgid ""
@@ -14472,6 +14340,9 @@ msgid ""
"longer has any effect.\n"
"To remove this warning, disable the GIProbe's Compress property."
msgstr ""
+"La proprietà GIProbe Compress è stata deprecata a causa di bug noti e non ha "
+"più alcun effetto.\n"
+"Per rimuovere questo avviso, disattiva la proprietà Compress di GIProbe."
#: scene/3d/light.cpp
msgid "A SpotLight with an angle wider than 90 degrees cannot cast shadows."
@@ -14481,7 +14352,7 @@ msgstr ""
#: scene/3d/navigation_mesh.cpp
msgid "A NavigationMesh resource must be set or created for this node to work."
msgstr ""
-"Una risorsa NavigationMesh deve essere creata o impostata affinché questo "
+"È necessario creare o impostare una risorsa NavigationMesh affinché questo "
"nodo funzioni."
#: scene/3d/navigation_mesh.cpp
@@ -14494,11 +14365,11 @@ msgstr ""
#: scene/3d/occluder.cpp
msgid "No shape is set."
-msgstr ""
+msgstr "Nessuna forma è impostata."
#: scene/3d/occluder.cpp
msgid "Only uniform scales are supported."
-msgstr ""
+msgstr "Solo scale uniformi sono supportate."
#: scene/3d/particles.cpp
msgid ""
@@ -14520,8 +14391,8 @@ msgid ""
"Particles animation requires the usage of a SpatialMaterial whose Billboard "
"Mode is set to \"Particle Billboard\"."
msgstr ""
-"Le animazioni delle particelle richiedono l'uso di un SpatialMaterial la cui "
-"modalità Billboard è impostata a \"Particle Billboard\"."
+"L'animazione delle particelle richiede l'uso di un SpatialMaterial la cui "
+"Modalità Billboard è impostata a \"Particle Billboard\"."
#: scene/3d/path.cpp
msgid "PathFollow only works when set as a child of a Path node."
@@ -14532,7 +14403,7 @@ msgid ""
"PathFollow's ROTATION_ORIENTED requires \"Up Vector\" to be enabled in its "
"parent Path's Curve resource."
msgstr ""
-"Il flag ROTATION_ORIENTED di un PathFollow richiede \"Up Vector\" di essere "
+"Il flag ROTATION_ORIENTED di PathFollow richiede che \"Up Vector\" sia "
"abilitato nella risorsa Curve del genitore Path."
#: scene/3d/physics_body.cpp
@@ -14541,41 +14412,41 @@ msgid ""
"by the physics engine when running.\n"
"Change the size in children collision shapes instead."
msgstr ""
-"I cambiamenti di dimensione a RigidBody (nel personaggio o nelle modalità "
-"rigide) saranno sovrascritti dal motore fisico quando in esecuzione.\n"
-"Modifica invece la dimensione in sagome di collisione figlie."
+"I cambiamenti di dimensione a RigidBody (in modalità rigida o carattere) "
+"saranno sovrascritti dal motore fisico durante l'esecuzione.\n"
+"Modifica invece la dimensione nelle forme di collisione figlie."
#: scene/3d/physics_joint.cpp
msgid "Node A and Node B must be PhysicsBodies"
-msgstr "Il Nodo A e il Nodo B devono essere PhysicsBodies"
+msgstr "Nodo A e Nodo B devono essere PhysicsBodies"
#: scene/3d/physics_joint.cpp
msgid "Node A must be a PhysicsBody"
-msgstr "Il Nodo A deve essere un PhysicsBody"
+msgstr "Nodo A deve essere un PhysicsBody"
#: scene/3d/physics_joint.cpp
msgid "Node B must be a PhysicsBody"
-msgstr "Il Nodo B deve essere un PhysicsBody"
+msgstr "Nodo B deve essere un PhysicsBody"
#: scene/3d/physics_joint.cpp
msgid "Joint is not connected to any PhysicsBodies"
-msgstr "Il giunto non è collegato a dei PhysicsBodies"
+msgstr "Il giunto non è collegato a nessun PhysicsBody"
#: scene/3d/physics_joint.cpp
msgid "Node A and Node B must be different PhysicsBodies"
-msgstr "Il Nodo A e il Nodo B devono essere PhysicsBodies diversi"
+msgstr "Nodo A e Nodo B devono essere PhysicsBody diversi"
#: scene/3d/portal.cpp
msgid "The RoomManager should not be a child or grandchild of a Portal."
-msgstr ""
+msgstr "Il RoomManager non deve essere figlio o nipote di un Portal."
#: scene/3d/portal.cpp
msgid "A Room should not be a child or grandchild of a Portal."
-msgstr ""
+msgstr "Un nodo Room non dovrebbe essere figlio o nipote di un Portal."
#: scene/3d/portal.cpp
msgid "A RoomGroup should not be a child or grandchild of a Portal."
-msgstr ""
+msgstr "Un RoomGroup non dovrebbe essere figlio o nipote di un Portal."
#: scene/3d/remote_transform.cpp
msgid ""
@@ -14587,83 +14458,108 @@ msgstr ""
#: scene/3d/room.cpp
msgid "A Room cannot have another Room as a child or grandchild."
-msgstr ""
+msgstr "Un Room non può avere un altro Room come figlio o nipote."
#: scene/3d/room.cpp
msgid "The RoomManager should not be placed inside a Room."
-msgstr ""
+msgstr "Il RoomManager non dovrebbe collocato all'interno di un Room."
#: scene/3d/room.cpp
msgid "A RoomGroup should not be placed inside a Room."
-msgstr ""
+msgstr "Un RoomGroup non dovrebbe essere collocato all'interno di un Room."
#: scene/3d/room.cpp
msgid ""
"Room convex hull contains a large number of planes.\n"
"Consider simplifying the room bound in order to increase performance."
msgstr ""
+"L'hull converso del Room contiene un gran numero di piani.\n"
+"Si consiglia di semplificare i vincoli della stanza per aumentare le "
+"prestazioni."
#: scene/3d/room_group.cpp
msgid "The RoomManager should not be placed inside a RoomGroup."
msgstr ""
+"Il RoomManager non dovrebbe essere collocato all'interno di un RoomGroup."
#: scene/3d/room_manager.cpp
msgid "The RoomList has not been assigned."
-msgstr ""
+msgstr "Il RoomList non è stato assegnato."
#: scene/3d/room_manager.cpp
msgid "The RoomList node should be a Spatial (or derived from Spatial)."
msgstr ""
+"Il nodo RoomList dovrebbe essere di tipo Spatial (o derivato da Spatial)."
#: scene/3d/room_manager.cpp
msgid ""
"Portal Depth Limit is set to Zero.\n"
"Only the Room that the Camera is in will render."
msgstr ""
+"Portal Depth Limit è impostato a Zero.\n"
+"Verrà renderizzata soltanto la Stanza in cui si trova la telecamera."
#: scene/3d/room_manager.cpp
msgid "There should only be one RoomManager in the SceneTree."
-msgstr ""
+msgstr "Ci dovrebbe essere un solo RoomManager nello SceneTree."
#: scene/3d/room_manager.cpp
msgid ""
"RoomList path is invalid.\n"
"Please check the RoomList branch has been assigned in the RoomManager."
msgstr ""
+"Percorso per il RoomList non valido.\n"
+"Assicurarsi che il ramo RoomList sia stato assegnato nel RoomManager."
#: scene/3d/room_manager.cpp
+#, fuzzy
msgid "RoomList contains no Rooms, aborting."
-msgstr ""
+msgstr "RoomList non contiene Stanze, interruzione."
#: scene/3d/room_manager.cpp
msgid "Misnamed nodes detected, check output log for details. Aborting."
msgstr ""
+"Rilevati nodi con nomi errati, controlla il registro di output per i "
+"dettagli. Interruzione."
#: scene/3d/room_manager.cpp
+#, fuzzy
msgid "Portal link room not found, check output log for details."
msgstr ""
+"Collegamento stanza del Portale non trovato. Controlla il registro di output "
+"per i dettagli."
#: scene/3d/room_manager.cpp
msgid ""
"Portal autolink failed, check output log for details.\n"
"Check the portal is facing outwards from the source room."
msgstr ""
+"Collegamento automatico portali fallito, controlla il registro di output per "
+"i dettagli.\n"
+"Assicurarsi che il portale sia rivolto verso l'esterno della stanza di "
+"origine."
#: scene/3d/room_manager.cpp
msgid ""
"Room overlap detected, cameras may work incorrectly in overlapping area.\n"
"Check output log for details."
msgstr ""
+"Rilevata sovrapposizione di stanze, le telecamere potrebbero non funzionare "
+"correttamente nell'area sovrapposta.\n"
+"Controlla il registro di output per i dettagli."
#: scene/3d/room_manager.cpp
+#, fuzzy
msgid ""
"Error calculating room bounds.\n"
"Ensure all rooms contain geometry or manual bounds."
msgstr ""
+"Errore durante il calcolo dei confini della stanza.\n"
+"Assicurarsi che tutte le stanze contengano geometria o confini manuali."
#: scene/3d/soft_body.cpp
msgid "This body will be ignored until you set a mesh."
-msgstr "Questo corpo verrà ignorato fino a quando non imposterai una mesh."
+msgstr "Questo corpo verrà ignorato finché non imposterai una mesh."
#: scene/3d/soft_body.cpp
msgid ""
@@ -14673,7 +14569,7 @@ msgid ""
msgstr ""
"Le modifiche alle dimensioni di SoftBody saranno sovrascritte dal motore "
"fisico durante l'esecuzione.\n"
-"Cambiare invece le dimensioni nelle forme di collisioni figlie."
+"Modifica invece la dimensione nelle forme di collisione figlie."
#: scene/3d/sprite_3d.cpp
msgid ""
@@ -14681,7 +14577,7 @@ msgid ""
"order for AnimatedSprite3D to display frames."
msgstr ""
"Una risorsa SpriteFrames deve essere creata o impostata nella proprietà "
-"\"Frames\" in modo da far mostrare i frame dall'AnimatedSprite3D."
+"\"Frames\" per permettere a AnimatedSprite3D di visualizzare i frame."
#: scene/3d/vehicle_body.cpp
msgid ""
@@ -14696,23 +14592,24 @@ msgid ""
"WorldEnvironment requires its \"Environment\" property to contain an "
"Environment to have a visible effect."
msgstr ""
-"WordEnvironment richiede la sua proprietà \"Environment\" di contenere un "
+"WordEnvironment richiede che la sua proprietà \"Environment\" contenga un "
"Environment per avere un effetto visibile."
#: scene/3d/world_environment.cpp
msgid ""
"Only one WorldEnvironment is allowed per scene (or set of instanced scenes)."
msgstr ""
-"Solamente un WorldEnvironment è consentito per scena (o insieme di scene "
-"istanziate)."
+"Solamente un solo WorldEnvironment è consentito per scena (o insieme di "
+"scene istanziate)."
#: scene/3d/world_environment.cpp
msgid ""
"This WorldEnvironment is ignored. Either add a Camera (for 3D scenes) or set "
"this environment's Background Mode to Canvas (for 2D scenes)."
msgstr ""
-"Questo WorldEnvironment viene ignorato. Aggiungere una Telecamera (per le "
-"scene 3D) o impostare questo ambiente Modalità Canvas (per le scene in 2D)."
+"Questo WorldEnvironment è ignorato. Aggiungi una Telecamera (per le scene "
+"3D) oppure imposta il Background Mode di questo ambiente su Canvas (per le "
+"scene in 2D)."
#: scene/animation/animation_blend_tree.cpp
msgid "On BlendTree node '%s', animation not found: '%s'"
@@ -14723,8 +14620,9 @@ msgid "Animation not found: '%s'"
msgstr "Animazione non trovata: \"%s\""
#: scene/animation/animation_player.cpp
+#, fuzzy
msgid "Anim Apply Reset"
-msgstr ""
+msgstr "Applica Ripristino Anim."
#: scene/animation/animation_tree.cpp
msgid "In node '%s', invalid animation: '%s'."
@@ -14736,7 +14634,7 @@ msgstr "Animazione non valida: \"%s\"."
#: scene/animation/animation_tree.cpp
msgid "Nothing connected to input '%s' of node '%s'."
-msgstr "Nulla collegato all'ingresso \"%s\" del nodo \"%s\"."
+msgstr "Niente collegato all'input \"%s\" del nodo \"%s\"."
#: scene/animation/animation_tree.cpp
msgid "No root AnimationNode for the graph is set."
@@ -14745,7 +14643,7 @@ msgstr "Non è stato impostato alcun AnimationNode root per il grafico."
#: scene/animation/animation_tree.cpp
msgid "Path to an AnimationPlayer node containing animations is not set."
msgstr ""
-"Il Percorso di un nodo AnimationPlayer contenente animazioni non è impostato."
+"Il percorso di un nodo AnimationPlayer contenente animazioni non è impostato."
#: scene/animation/animation_tree.cpp
msgid "Path set for AnimationPlayer does not lead to an AnimationPlayer node."
@@ -14755,11 +14653,11 @@ msgstr ""
#: scene/animation/animation_tree.cpp
msgid "The AnimationPlayer root node is not a valid node."
-msgstr "Il nodo root dell'AnimationPlayer non è valido."
+msgstr "Il nodo radice dell'AnimationPlayer non è valido."
#: scene/animation/animation_tree_player.cpp
msgid "This node has been deprecated. Use AnimationTree instead."
-msgstr "Questo nodo è stato deprecato. In alternativa, usa un AnimationTree."
+msgstr "Questo nodo è stato deprecato. Usa invece un AnimationTree."
#: scene/gui/color_picker.cpp
msgid ""
@@ -14797,17 +14695,19 @@ msgid ""
"children placement behavior.\n"
"If you don't intend to add a script, use a plain Control node instead."
msgstr ""
-"Il Contanier da se non serve alcuna funzione affinché uno script non "
-"configura il comportamento di posizione dei figli.\n"
-"Se non intendi aggiungere uno script, usa un semplice nodo Control."
+"Il Container di per sé non serve a nulla, a meno che uno script non "
+"configuri il suo comportamento di posizionamento figli.\n"
+"Se non intendi aggiungere uno script, utilizza invece un semplice nodo "
+"Control."
#: scene/gui/control.cpp
msgid ""
"The Hint Tooltip won't be displayed as the control's Mouse Filter is set to "
"\"Ignore\". To solve this, set the Mouse Filter to \"Stop\" or \"Pass\"."
msgstr ""
-"Il tooltip non comparirà poiché il Mouse filter del control è impostato a "
-"\"Ignore\". Per risolvere questo, impostalo a \"Stop\" o \"Pass\"."
+"Il Tooltip non apparirà poiché la proprietà Mouse Filter del Control è "
+"impostata su \"Ignore\". Per risolvere questo problema, imposta Mouse Filter "
+"su \"Stop\" o \"Pass\"."
#: scene/gui/dialogs.cpp
msgid "Alert!"
@@ -14832,6 +14732,10 @@ msgid ""
"The GLES2 backend is currently in use, so these modes will act like Stretch "
"instead."
msgstr ""
+"Le opzioni Tile e Tile Fit per le proprietà Axis Stretch hanno effetto solo "
+"se si utilizza il rendering back-end GLES3.\n"
+"Poiché il back-end GLES2 è attualmente in uso, queste modalità si "
+"comporteranno invece come Stretch."
#: scene/gui/popup.cpp
msgid ""
@@ -14839,8 +14743,8 @@ msgid ""
"functions. Making them visible for editing is fine, but they will hide upon "
"running."
msgstr ""
-"I popup saranno nascosti di default finchè non chiami popup(), o una delle "
-"qualsiasi funzioni popup*(). Farli diventare visibili per modificarli va "
+"I popup saranno nascosti di default finché non chiami popup(), o una "
+"qualsiasi delle funzioni popup*(). Renderli visibili per modificarli va "
"bene, ma scompariranno durante l'esecuzione."
#: scene/gui/range.cpp
@@ -14848,15 +14752,15 @@ msgid "If \"Exp Edit\" is enabled, \"Min Value\" must be greater than 0."
msgstr "Se \"Exp Edit\" è abilitato, \"Min Value\" deve essere maggiore di 0."
#: scene/gui/scroll_container.cpp
-#, fuzzy
msgid ""
"ScrollContainer is intended to work with a single child control.\n"
"Use a container as child (VBox, HBox, etc.), or a Control and set the custom "
"minimum size manually."
msgstr ""
-"ScrollContainer è inteso per funzionare con un singolo figlio di controllo.\n"
-"Usa un container come figlio (VBox, HBox, ect.), oppure un nodo Control e "
-"imposta la dimensione minima personalizzata manualmente."
+"ScrollContainer è progettato per funzionare con un singolo figlio di "
+"controllo.\n"
+"Usa un container come figlio (VBox, HBox, ect.), oppure un nodo Control, "
+"impostando la dimensione minima personalizzata manualmente."
#: scene/gui/tree.cpp
msgid "(Other)"
@@ -14868,7 +14772,7 @@ msgid ""
"Environment -> Default Environment) could not be loaded."
msgstr ""
"Non è stato possibile caricare l'Ambiente predefinito come specificato nelle "
-"Impostazioni Progetto (Rendering -> Ambiente -> Ambiente Predefinito)."
+"Impostazioni Progetto (Rendering -> Environment -> Default Environment)."
#: scene/main/timer.cpp
msgid ""
@@ -14877,6 +14781,10 @@ msgid ""
"Consider using a script's process loop instead of relying on a Timer for "
"very low wait times."
msgstr ""
+"I tempi d'attesa dei Timer molto brevi (< 0.05 seconds) potrebbero "
+"comportarsi in modo poco incoerente, a seconda del framerate di rendering o "
+"fisico.\n"
+"Si consiglia invece di affidarsi a un Timer per tempi d'attesa molto brevi."
#: scene/main/viewport.cpp
msgid ""
@@ -14886,34 +14794,35 @@ msgid ""
"texture to some node for display."
msgstr ""
"Questo viewport non è impostato come target di render. Se si vuole che il "
-"suo contenuto venga direttamente mostrato a schermo, renderlo figlio di un "
-"Control, in modo che possa ottenere una dimensione. Altrimenti, renderlo un "
-"RenderTarget e assegnare alla sua texture interna qualche nodo da mostrare."
+"suo contenuto venga direttamente visualizzato sullo schermo, renderlo figlio "
+"di un Control, in modo che possa ottenere una dimensione. Altrimenti, "
+"renderlo un RenderTarget e assegnare la sua texture interna a qualche nodo "
+"per la visualizzazione."
#: scene/main/viewport.cpp
-#, fuzzy
msgid ""
"The Viewport size must be greater than or equal to 2 pixels on both "
"dimensions to render anything."
msgstr ""
-"La dimensione del Viewport deve essere maggiore di 0 affinché qualcosa sia "
-"visibile."
+"La dimensione del Viewport deve essere maggiore o uguale a 2 pixel su "
+"entrambi i lati per visualizzare qualcosa."
#: scene/resources/occluder_shape.cpp
+#, fuzzy
msgid "OccluderShapeSphere Set Spheres"
-msgstr ""
+msgstr "Imposta Sfere OccluderShapeSphere"
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
"'SamplerPort'."
msgstr ""
-"La porta del sampler è connessa ma mai usata. Considera cambiare la sorgente "
-"a \"SamplerPort\"."
+"La porta del sampler è connessa ma mai usata. Considera di cambiare la "
+"sorgente a \"SamplerPort\"."
#: scene/resources/visual_shader_nodes.cpp
msgid "Invalid source for preview."
-msgstr "Fonte non valida per l'anteprima."
+msgstr "Sorgente non valida per l'anteprima."
#: scene/resources/visual_shader_nodes.cpp
msgid "Invalid source for shader."
@@ -14924,26 +14833,30 @@ msgid "Invalid comparison function for that type."
msgstr "Funzione di confronto non valida per quel tipo."
#: servers/visual/shader_language.cpp
-#, fuzzy
msgid "Varying may not be assigned in the '%s' function."
-msgstr ""
-"Le variabili possono essere assegnate soltanto in funzione del vertice."
+msgstr "Le variabili non possono essere assegnate nella funzione \"%s\"."
#: servers/visual/shader_language.cpp
msgid ""
"Varyings which assigned in 'vertex' function may not be reassigned in "
"'fragment' or 'light'."
msgstr ""
+"Le variabili assegnate nella funzione \"vertex\" non possono essere "
+"riassegnate in \"fragment\" o \"light\"."
#: servers/visual/shader_language.cpp
msgid ""
"Varyings which assigned in 'fragment' function may not be reassigned in "
"'vertex' or 'light'."
msgstr ""
+"Le variabili assegnate nella funzione \"fragment\" non possono essere "
+"riassegnate in \"vertex\" o \"light\"."
#: servers/visual/shader_language.cpp
msgid "Fragment-stage varying could not been accessed in custom function!"
msgstr ""
+"Non è stato possibile accedere a variabile in fase di Fragment nella "
+"funzione personalizzata!"
#: servers/visual/shader_language.cpp
msgid "Assignment to function."
diff --git a/editor/translations/ja.po b/editor/translations/ja.po
index 4a2075e20b..91af3e6757 100644
--- a/editor/translations/ja.po
+++ b/editor/translations/ja.po
@@ -40,7 +40,7 @@ msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-10-22 06:04+0000\n"
+"PO-Revision-Date: 2021-11-14 11:41+0000\n"
"Last-Translator: nitenook <admin@alterbaum.net>\n"
"Language-Team: Japanese <https://hosted.weblate.org/projects/godot-engine/"
"godot/ja/>\n"
@@ -49,7 +49,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 4.9-dev\n"
+"X-Generator: Weblate 4.9.1-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -7743,14 +7743,14 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr "ã“ã®skeletonã«ã¯ãƒœãƒ¼ãƒ³ãŒã‚りã¾ã›ã‚“。å­Bone2Dノードを追加ã—ã¦ãã ã•ã„。"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
-msgstr "ボーンã‹ã‚‰ãƒ¬ã‚¹ãƒˆãƒãƒ¼ã‚ºã‚’作æˆ"
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Set Rest Pose to Bones"
msgstr "ボーンã¸ãƒ¬ã‚¹ãƒˆãƒãƒ¼ã‚ºã‚’設定ã™ã‚‹"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Create Rest Pose from Bones"
+msgstr "ボーンã‹ã‚‰ãƒ¬ã‚¹ãƒˆãƒãƒ¼ã‚ºã‚’作æˆ"
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Skeleton2D"
msgstr "Skeleton2D"
@@ -11092,14 +11092,14 @@ msgstr ""
"ã¨ã‚‚1ã¤å¿…è¦ã§ã™ã€‚"
#: editor/project_settings_editor.cpp
-msgid "Key "
-msgstr "キー "
-
-#: editor/project_settings_editor.cpp
msgid "Physical Key"
msgstr "物ç†ã‚­ãƒ¼"
#: editor/project_settings_editor.cpp
+msgid "Key "
+msgstr "キー "
+
+#: editor/project_settings_editor.cpp
msgid "Joy Button"
msgstr "ゲームパッドã®ãƒœã‚¿ãƒ³"
@@ -14418,7 +14418,7 @@ msgstr "警告ï¼"
#: scene/gui/dialogs.cpp
msgid "Please Confirm..."
-msgstr "確èª..."
+msgstr "確èª"
#: scene/gui/file_dialog.cpp
msgid "Must use a valid extension."
diff --git a/editor/translations/ka.po b/editor/translations/ka.po
index 548e016719..aeb8023ba4 100644
--- a/editor/translations/ka.po
+++ b/editor/translations/ka.po
@@ -7700,11 +7700,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
@@ -11004,11 +11004,11 @@ msgid ""
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Key "
+msgid "Physical Key"
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Physical Key"
+msgid "Key "
msgstr ""
#: editor/project_settings_editor.cpp
diff --git a/editor/translations/km.po b/editor/translations/km.po
index 860accd0c5..4a61c9969d 100644
--- a/editor/translations/km.po
+++ b/editor/translations/km.po
@@ -7418,11 +7418,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
@@ -10596,11 +10596,11 @@ msgid ""
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Key "
+msgid "Physical Key"
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Physical Key"
+msgid "Key "
msgstr ""
#: editor/project_settings_editor.cpp
diff --git a/editor/translations/ko.po b/editor/translations/ko.po
index b9faa4762e..096d8a3ee8 100644
--- a/editor/translations/ko.po
+++ b/editor/translations/ko.po
@@ -25,13 +25,16 @@
# Postive_ Cloud <postive12@gmail.com>, 2021.
# dewcked <dewcked@protonmail.ch>, 2021.
# SteamB23 <steamb23@outlook.com>, 2021.
+# Jaemin Park <ppparkje@naver.com>, 2021.
+# ì‹ ë™ê·œ <rlsl0422@gmail.com>, 2021.
+# Kiroo <elusive1102@naver.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-10-07 10:25+0000\n"
-"Last-Translator: SteamB23 <steamb23@outlook.com>\n"
+"PO-Revision-Date: 2021-11-19 08:43+0000\n"
+"Last-Translator: Myeongjin Lee <aranet100@gmail.com>\n"
"Language-Team: Korean <https://hosted.weblate.org/projects/godot-engine/"
"godot/ko/>\n"
"Language: ko\n"
@@ -39,7 +42,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 4.9-dev\n"
+"X-Generator: Weblate 4.9.1-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -522,18 +525,18 @@ msgid ""
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
-"ì´ ì• ë‹ˆë©”ì´ì…˜ì€ 불러온 ì”¬ì— ì†í•´ 있습니다. 불러온 íŠ¸ëž™ì˜ ë³€ê²½ì‚¬í•­ì€ ì €ìž¥ë˜ì§€ "
+"ì´ ì• ë‹ˆë©”ì´ì…˜ì€ 가져온 ì”¬ì— ì†í•´ 있습니다. 가져온 íŠ¸ëž™ì˜ ë³€ê²½ì‚¬í•­ì€ ì €ìž¥ë˜ì§€ "
"않습니다.\n"
"\n"
-"저장 ê¸°ëŠ¥ì„ í™œì„±í™”í•˜ë ¤ë©´ 커스텀 íŠ¸ëž™ì„ ì¶”ê°€í•˜ê³ , ì”¬ì˜ ë¶ˆëŸ¬ì˜¤ê¸°ê¸° 설정으로 ê°€"
+"저장 ê¸°ëŠ¥ì„ í™œì„±í™”í•˜ë ¤ë©´ 커스텀 íŠ¸ëž™ì„ ì¶”ê°€í•˜ê³ , ì”¬ì˜ ê°€ì ¸ì˜¤ê¸° 설정으로 ê°€"
"서\n"
"\"Animation > Storage\" ì„¤ì •ì„ \"Files\"로, \"Animation > Keep Custom Tracks"
"\" ì„¤ì •ì„ í™œì„±í™”í•œ ë’¤, 다시 가져오십시오.\n"
-"아니면 불러오기 프리셋으로 애니메ì´ì…˜ì„ 별ë„ì˜ íŒŒì¼ë¡œ 불러올 ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤."
+"아니면 가져오기 프리셋으로 애니메ì´ì…˜ì„ 별ë„ì˜ íŒŒì¼ë¡œ 가져올 ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤."
#: editor/animation_track_editor.cpp
msgid "Warning: Editing imported animation"
-msgstr "경고: 불러온 애니메ì´ì…˜ì„ 편집하고 있ìŒ"
+msgstr "경고: 가져온 애니메ì´ì…˜ì„ 편집하고 있ìŒ"
#: editor/animation_track_editor.cpp
msgid "Select an AnimationPlayer node to create and edit animations."
@@ -1740,7 +1743,7 @@ msgstr "파ì¼ì‹œìŠ¤í…œ ë…"
#: editor/editor_feature_profile.cpp
msgid "Import Dock"
-msgstr "ë… ë¶ˆëŸ¬ì˜¤ê¸°"
+msgstr "ë… ê°€ì ¸ì˜¤ê¸°"
#: editor/editor_feature_profile.cpp
msgid "Allows to view and edit 3D scenes."
@@ -1773,7 +1776,7 @@ msgid ""
"Allows to configure import settings for individual assets. Requires the "
"FileSystem dock to function."
msgstr ""
-"개별 ì• ì…‹ì— ëŒ€í•œ 불러오기 ì„¤ì •ì„ êµ¬ì„±í•  수 있게 합니다. ìž‘ë™í•˜ë ¤ë©´ 파ì¼ì‹œìФ"
+"개별 ì• ì…‹ì— ëŒ€í•œ 가져오기 ì„¤ì •ì„ êµ¬ì„±í•  수 있게 합니다. ìž‘ë™í•˜ë ¤ë©´ 파ì¼ì‹œìФ"
"í…œ ë…ì´ í•„ìš”í•©ë‹ˆë‹¤."
#: editor/editor_feature_profile.cpp
@@ -1830,15 +1833,15 @@ msgstr "노드와 í´ëž˜ìФ:"
#: editor/editor_feature_profile.cpp
msgid "File '%s' format is invalid, import aborted."
-msgstr "íŒŒì¼ '%s' 형ì‹ì´ 올바르지 않습니다. 불러오기를 중단합니다."
+msgstr "íŒŒì¼ '%s' 형ì‹ì´ 올바르지 않습니다. 가져오기를 중단합니다."
#: editor/editor_feature_profile.cpp
msgid ""
"Profile '%s' already exists. Remove it first before importing, import "
"aborted."
msgstr ""
-"프로필 '%s'ì´(ê°€) ì´ë¯¸ 있습니다. 불러오기 ì „ì— ì´ë¯¸ 있는 í”„ë¡œí•„ì„ ë¨¼ì € 제거하"
-"세요. 불러오기를 중단합니다."
+"프로필 '%s'ì´(ê°€) ì´ë¯¸ 있습니다. 가져오기 ì „ì— ì´ë¯¸ 있는 í”„ë¡œí•„ì„ ë¨¼ì € 제거하"
+"세요. 가져오기를 중단합니다."
#: editor/editor_feature_profile.cpp
msgid "Error saving profile to path: '%s'."
@@ -1871,7 +1874,7 @@ msgstr "현재 프로필로 설정"
#: editor/editor_feature_profile.cpp editor/editor_node.cpp
#: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp
msgid "Import"
-msgstr "불러오기"
+msgstr "가져오기"
#: editor/editor_feature_profile.cpp editor/project_export.cpp
msgid "Export"
@@ -1887,7 +1890,7 @@ msgstr "별ë„ì˜ ì˜µì…˜:"
#: editor/editor_feature_profile.cpp
msgid "Create or import a profile to edit available classes and properties."
-msgstr "사용 가능한 í´ëž˜ìŠ¤ì™€ ì†ì„±ì„ 편집하려면 í”„ë¡œí•„ì„ ë§Œë“¤ê±°ë‚˜ 불러오세요."
+msgstr "사용 가능한 í´ëž˜ìŠ¤ì™€ ì†ì„±ì„ 편집하려면 í”„ë¡œí•„ì„ ë§Œë“¤ê±°ë‚˜ 가져오세요."
#: editor/editor_feature_profile.cpp
msgid "New profile name:"
@@ -1899,7 +1902,7 @@ msgstr "Godot 기능 프로필"
#: editor/editor_feature_profile.cpp
msgid "Import Profile(s)"
-msgstr "프로필 불러오기"
+msgstr "프로필 가져오기"
#: editor/editor_feature_profile.cpp
msgid "Export Profile"
@@ -2074,7 +2077,7 @@ msgstr ""
#: editor/editor_file_system.cpp
msgid "(Re)Importing Assets"
-msgstr "애셋 (다시) 불러오기"
+msgstr "애셋 (다시) 가져오는 중"
#: editor/editor_help.cpp
msgid "Top"
@@ -2323,7 +2326,7 @@ msgstr "ì—디터 ì°½ì— ë³€í™”ê°€ ìžˆì„ ë•Œë§ˆë‹¤ 회전합니다."
#: editor/editor_node.cpp
msgid "Imported resources can't be saved."
-msgstr "불러온 리소스를 저장할 수 없습니다."
+msgstr "가져온 리소스를 저장할 수 없습니다."
#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
#: editor/plugins/theme_editor_plugin.cpp
@@ -2412,9 +2415,8 @@ msgstr ""
"는 것 같습니다."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Could not save one or more scenes!"
-msgstr "ë³€í™˜ëœ í…스ì³ë¥¼ 저장할 수 ì—†ìŒ:"
+msgstr "하나 ì´ìƒì˜ ìž¥ë©´ì„ ì €ìž¥í• ìˆ˜ 없습니다!"
#: editor/editor_node.cpp
msgid "Save All Scenes"
@@ -2472,8 +2474,8 @@ msgid ""
"Please read the documentation relevant to importing scenes to better "
"understand this workflow."
msgstr ""
-"ì´ ë¦¬ì†ŒìŠ¤ëŠ” 불러온 ì”¬ì— ì†í•œ 리소스ì´ë¯€ë¡œ 편집할 수 없습니다.\n"
-"ì´ ì›Œí¬í”Œë¡œë¥¼ ì´í•´í•˜ë ¤ë©´ 씬 불러오기(Importing Scenes)와 ê´€ë ¨ëœ ë¬¸ì„œë¥¼ ì½ì–´ì£¼"
+"ì´ ë¦¬ì†ŒìŠ¤ëŠ” 가져온 ì”¬ì— ì†í•œ 리소스ì´ë¯€ë¡œ 편집할 수 없습니다.\n"
+"ì´ ì›Œí¬í”Œë¡œë¥¼ ì´í•´í•˜ë ¤ë©´ 씬 가져오기(Importing Scenes)와 ê´€ë ¨ëœ ë¬¸ì„œë¥¼ ì½ì–´ì£¼"
"세요."
#: editor/editor_node.cpp
@@ -2489,8 +2491,8 @@ msgid ""
"This resource was imported, so it's not editable. Change its settings in the "
"import panel and then re-import."
msgstr ""
-"ì´ ë¦¬ì†ŒìŠ¤ëŠ” 불러온 것ì´ë¯€ë¡œ 편집할 수 없습니다. 불러오기 패ë„ì—서 ì„¤ì •ì„ ë³€ê²½"
-"한 뒤 다시 불러오세요."
+"ì´ ë¦¬ì†ŒìŠ¤ëŠ” 가져온 것ì´ë¯€ë¡œ 편집할 수 없습니다. 가져오기 패ë„ì—서 ì„¤ì •ì„ ë³€ê²½"
+"한 뒤 다시 가져오세요."
#: editor/editor_node.cpp
msgid ""
@@ -2499,9 +2501,9 @@ msgid ""
"Please read the documentation relevant to importing scenes to better "
"understand this workflow."
msgstr ""
-"ì´ ì”¬ì€ ë¶ˆëŸ¬ì˜¨ 것ì´ë¯€ë¡œ ë³€ê²½ì‚¬í•­ì´ ìœ ì§€ë˜ì§€ 않습니다.\n"
+"ì´ ì”¬ì€ ê°€ì ¸ì˜¨ 것ì´ë¯€ë¡œ ë³€ê²½ì‚¬í•­ì´ ìœ ì§€ë˜ì§€ 않습니다.\n"
"ì´ ì”¬ì„ ì¸ìŠ¤í„´ìŠ¤í™”í•˜ê±°ë‚˜ ìƒì†í•˜ë©´ 편집할 수 있습니다.\n"
-"ì´ ì›Œí¬í”Œë¡œë¥¼ ì´í•´í•˜ë ¤ë©´ 씬 불러오기(Importing Scenes)와 ê´€ë ¨ëœ ë¬¸ì„œë¥¼ ì½ì–´ì£¼"
+"ì´ ì›Œí¬í”Œë¡œë¥¼ ì´í•´í•˜ë ¤ë©´ 씬 가져오기(Importing Scenes)와 ê´€ë ¨ëœ ë¬¸ì„œë¥¼ ì½ì–´ì£¼"
"세요."
#: editor/editor_node.cpp
@@ -2555,7 +2557,7 @@ msgstr "닫기 ì „ì— '%s'ì— ë³€ê²½ì‚¬í•­ì„ ì €ìž¥í•˜ì‹œê² ìŠµë‹ˆê¹Œ?"
#: editor/editor_node.cpp
msgid "%s no longer exists! Please specify a new save location."
-msgstr ""
+msgstr "%sì€(는) ë” ì´ìƒ 존재하지 않습니다! 새 저장 위치를 지정해 주세요."
#: editor/editor_node.cpp
msgid ""
@@ -2736,7 +2738,7 @@ msgid ""
"Scene '%s' was automatically imported, so it can't be modified.\n"
"To make changes to it, a new inherited scene can be created."
msgstr ""
-"씬 '%s'ì„(를) ìžë™ìœ¼ë¡œ 불러왔으므로 수정할 수 없습니다.\n"
+"씬 '%s'ì„(를) ìžë™ìœ¼ë¡œ 가져왔으므로 수정할 수 없습니다.\n"
"ì´ ì”¬ì„ íŽ¸ì§‘í•˜ë ¤ë©´ 새로운 ìƒì† ì”¬ì„ ë§Œë“¤ì–´ì•¼ 합니다."
#: editor/editor_node.cpp
@@ -2745,7 +2747,7 @@ msgid ""
"open the scene, then save it inside the project path."
msgstr ""
"ì”¬ì„ ë¶ˆëŸ¬ì˜¤ëŠ” 중 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤. ì”¬ì€ í”„ë¡œì íЏ 경로 ì•ˆì— ìžˆì–´ì•¼ 합니다. "
-"'불러오기'를 사용해서 ì”¬ì„ ì—´ê³ , ê·¸ ì”¬ì„ í”„ë¡œì íЏ 경로 ì•ˆì— ì €ìž¥í•˜ì„¸ìš”."
+"'가져오기'를 사용해서 ì”¬ì„ ì—´ê³ , ê·¸ ì”¬ì„ í”„ë¡œì íЏ 경로 ì•ˆì— ì €ìž¥í•˜ì„¸ìš”."
#: editor/editor_node.cpp
msgid "Scene '%s' has broken dependencies:"
@@ -2928,7 +2930,7 @@ msgstr "다시 실행"
#: editor/editor_node.cpp
msgid "Miscellaneous project or scene-wide tools."
-msgstr "프로ì íЏ ë˜ëŠ” 씬 관련 여러가지 ë„구들."
+msgstr "프로ì íЏ ë˜ëŠ” 씬 관련 여러가지 툴."
#: editor/editor_node.cpp editor/project_manager.cpp
#: editor/script_create_dialog.cpp
@@ -2965,7 +2967,7 @@ msgstr "프로ì íЏ ë°ì´í„° í´ë” 열기"
#: editor/editor_node.cpp editor/plugins/tile_set_editor_plugin.cpp
msgid "Tools"
-msgstr "ë„구"
+msgstr "툴"
#: editor/editor_node.cpp
msgid "Orphan Resource Explorer..."
@@ -3229,7 +3231,7 @@ msgstr "ì¸ìŠ¤íŽ™í„°"
#: editor/editor_node.cpp
msgid "Expand Bottom Panel"
-msgstr "하단 íŒ¨ë„ í™•ìž¥"
+msgstr "아래쪽 íŒ¨ë„ í™•ìž¥"
#: editor/editor_node.cpp
msgid "Output"
@@ -3285,7 +3287,7 @@ msgstr ""
#: editor/editor_node.cpp
msgid "Import Templates From ZIP File"
-msgstr "ZIP 파ì¼ì—서 템플릿 불러오기"
+msgstr "ZIP 파ì¼ì—서 템플릿 가져오기"
#: editor/editor_node.cpp
msgid "Template Package"
@@ -3636,7 +3638,7 @@ msgstr "%s를 눌러 정수로 반올림합니다. Shift를 눌러 좀 ë” ì •ë°
#: editor/editor_sub_scene.cpp
msgid "Select Node(s) to Import"
-msgstr "불러올 노드 ì„ íƒ"
+msgstr "가져올 노드 ì„ íƒ"
#: editor/editor_sub_scene.cpp editor/project_manager.cpp
msgid "Browse"
@@ -3648,7 +3650,7 @@ msgstr "씬 경로:"
#: editor/editor_sub_scene.cpp
msgid "Import From Node:"
-msgstr "노드ì—서 불러오기:"
+msgstr "노드ì—서 가져오기:"
#: editor/export_template_manager.cpp
msgid "Open the folder containing these templates."
@@ -3803,7 +3805,7 @@ msgstr "내보내기 템플릿 압축 푸는 중"
#: editor/export_template_manager.cpp
msgid "Importing:"
-msgstr "불러오는 중:"
+msgstr "가져오는 중:"
#: editor/export_template_manager.cpp
msgid "Remove templates for the version '%s'?"
@@ -3921,14 +3923,14 @@ msgstr "ì¦ê²¨ì°¾ê¸°"
#: editor/filesystem_dock.cpp
msgid "Status: Import of file failed. Please fix file and reimport manually."
msgstr ""
-"ìƒíƒœ: íŒŒì¼ ë¶ˆëŸ¬ì˜¤ê¸°ì— ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤. 수ë™ìœ¼ë¡œ 파ì¼ì„ 수정하고 다시 불러와주세"
+"ìƒíƒœ: íŒŒì¼ ê°€ì ¸ì˜¤ê¸°ì— ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤. 수ë™ìœ¼ë¡œ 파ì¼ì„ 수정하고 다시 가져와주세"
"ìš”."
#: editor/filesystem_dock.cpp
msgid ""
"Importing has been disabled for this file, so it can't be opened for editing."
msgstr ""
-"ì´ íŒŒì¼ì— 대해 불러오기가 비활성화ë˜ì—ˆìœ¼ë©°, íŽ¸ì§‘ì„ ìœ„í•´ ì—´ 수 없습니다."
+"ì´ íŒŒì¼ì— 대해 가져오기가 비활성화ë˜ì—ˆìœ¼ë©°, íŽ¸ì§‘ì„ ìœ„í•´ ì—´ 수 없습니다."
#: editor/filesystem_dock.cpp
msgid "Cannot move/rename resources root."
@@ -4264,52 +4266,52 @@ msgstr "그룹 관리"
#: editor/import/resource_importer_scene.cpp
msgid "Import as Single Scene"
-msgstr "ë‹¨ì¼ ì”¬ìœ¼ë¡œ 불러오기"
+msgstr "ë‹¨ì¼ ì”¬ìœ¼ë¡œ 가져오기"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Animations"
-msgstr "별ë„ì˜ ì• ë‹ˆë©”ì´ì…˜ìœ¼ë¡œ 불러오기"
+msgstr "별ë„ì˜ ì• ë‹ˆë©”ì´ì…˜ìœ¼ë¡œ 가져오기"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Materials"
-msgstr "별ë„ì˜ ë¨¸í‹°ë¦¬ì–¼ë¡œ 불러오기"
+msgstr "별ë„ì˜ ë¨¸í‹°ë¦¬ì–¼ë¡œ 가져오기"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Objects"
-msgstr "별ë„ì˜ ì˜¤ë¸Œì íŠ¸ë¡œ 불러오기"
+msgstr "별ë„ì˜ ì˜¤ë¸Œì íŠ¸ë¡œ 가져오기"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Objects+Materials"
-msgstr "별ë„ì˜ ì˜¤ë¸Œì íŠ¸ì™€ 머티리얼로 불러오기"
+msgstr "별ë„ì˜ ì˜¤ë¸Œì íŠ¸ì™€ 머티리얼로 가져오기"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Objects+Animations"
-msgstr "별ë„ì˜ ì˜¤ë¸Œì íŠ¸ì™€ 애니메ì´ì…˜ìœ¼ë¡œ 불러오기"
+msgstr "별ë„ì˜ ì˜¤ë¸Œì íŠ¸ì™€ 애니메ì´ì…˜ìœ¼ë¡œ 가져오기"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Materials+Animations"
-msgstr "별ë„ì˜ ë¨¸í‹°ë¦¬ì–¼ê³¼ 애니메ì´ì…˜ìœ¼ë¡œ 불러오기"
+msgstr "별ë„ì˜ ë¨¸í‹°ë¦¬ì–¼ê³¼ 애니메ì´ì…˜ìœ¼ë¡œ 가져오기"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Objects+Materials+Animations"
-msgstr "별ë„ì˜ ì˜¤ë¸Œì íЏ, 머티리얼과 애니메ì´ì…˜ìœ¼ë¡œ 불러오기"
+msgstr "별ë„ì˜ ì˜¤ë¸Œì íЏ, 머티리얼과 애니메ì´ì…˜ìœ¼ë¡œ 가져오기"
#: editor/import/resource_importer_scene.cpp
msgid "Import as Multiple Scenes"
-msgstr "여러 ê°œì˜ ì”¬ìœ¼ë¡œ 불러오기"
+msgstr "여러 ê°œì˜ ì”¬ìœ¼ë¡œ 가져오기"
#: editor/import/resource_importer_scene.cpp
msgid "Import as Multiple Scenes+Materials"
-msgstr "여러 ê°œì˜ ì”¬ê³¼ 머티리얼로 불러오기"
+msgstr "여러 ê°œì˜ ì”¬ê³¼ 머티리얼로 가져오기"
#: editor/import/resource_importer_scene.cpp
#: editor/plugins/mesh_library_editor_plugin.cpp
msgid "Import Scene"
-msgstr "씬 불러오기"
+msgstr "씬 가져오기"
#: editor/import/resource_importer_scene.cpp
msgid "Importing Scene..."
-msgstr "씬 불러오는 중..."
+msgstr "씬 가져오는 중..."
#: editor/import/resource_importer_scene.cpp
msgid "Generating Lightmaps"
@@ -4357,7 +4359,7 @@ msgstr "ë””í´íŠ¸ë¡œ 재설정"
#: editor/import_dock.cpp
msgid "Keep File (No Import)"
-msgstr "íŒŒì¼ ìœ ì§€ (불러오기 ì—†ìŒ)"
+msgstr "íŒŒì¼ ìœ ì§€ (가져오기 ì—†ìŒ)"
#: editor/import_dock.cpp
msgid "%d Files"
@@ -4365,7 +4367,7 @@ msgstr "íŒŒì¼ %dê°œ"
#: editor/import_dock.cpp
msgid "Set as Default for '%s'"
-msgstr "'%s'ì„(를) ë””í´íŠ¸ìœ¼ë¡œ 설정"
+msgstr "'%s'ì„(를) ë””í´íŠ¸ë¡œ 설정"
#: editor/import_dock.cpp
msgid "Clear Default for '%s'"
@@ -4373,7 +4375,7 @@ msgstr "'%s'ì„(를) ë””í´íЏì—서 지우기"
#: editor/import_dock.cpp
msgid "Reimport"
-msgstr "다시 불러오기"
+msgstr "다시 가져오기"
#: editor/import_dock.cpp
msgid ""
@@ -4382,10 +4384,14 @@ msgid ""
"Selecting another resource in the FileSystem dock without clicking Reimport "
"first will discard changes made in the Import dock."
msgstr ""
+"ì•„ì§ ì ìš©ë˜ì§€ ì•Šì€ ë³´ë¥˜ ì¤‘ì¸ ë³€ê²½ì‚¬í•­ì´ ìžˆìŠµë‹ˆë‹¤. 가져오기 ì˜µì…˜ì— ëŒ€í•œ 변경사"
+"í•­ì„ ì ìš©í•˜ë ¤ë©´ 다시 가져오기를 í´ë¦­í•˜ì„¸ìš”.\n"
+"다시 가져오기를 먼저 í´ë¦­í•˜ì§€ 않고 파ì¼ì‹œìŠ¤í…œ ë…ì—서 다른 리소스를 ì„ íƒí•˜ë©´ "
+"가져오기 ë…ì˜ ë³€ê²½ì‚¬í•­ì€ ë²„ë ¤ì§‘ë‹ˆë‹¤."
#: editor/import_dock.cpp
msgid "Import As:"
-msgstr "ë‹¤ìŒ í˜•ì‹ìœ¼ë¡œ 불러오기:"
+msgstr "ë‹¤ìŒ í˜•ì‹ìœ¼ë¡œ 가져오기:"
#: editor/import_dock.cpp
msgid "Preset"
@@ -4393,11 +4399,11 @@ msgstr "프리셋"
#: editor/import_dock.cpp
msgid "Save Scenes, Re-Import, and Restart"
-msgstr "씬 저장, 다시 불러오기 ë° ë‹¤ì‹œ 시작"
+msgstr "씬 저장, 다시 가져오기 ë° ë‹¤ì‹œ 시작"
#: editor/import_dock.cpp
msgid "Changing the type of an imported file requires editor restart."
-msgstr "불러온 파ì¼ì˜ íƒ€ìž…ì„ ë°”ê¾¸ë ¤ë©´ ì—디터를 다시 시작해야 합니다."
+msgstr "가져온 파ì¼ì˜ íƒ€ìž…ì„ ë°”ê¾¸ë ¤ë©´ ì—디터를 다시 시작해야 합니다."
#: editor/import_dock.cpp
msgid ""
@@ -4938,7 +4944,7 @@ msgstr "ë…¸ë“œì˜ ì• ë‹ˆë©”ì´ì…˜ ìž¬ìƒ ìŠ¤ì¼€ì¼ë¥¼ ì „ì²´ì ìœ¼ë¡œ 조절합ë
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Tools"
-msgstr "애니메ì´ì…˜ ë„구"
+msgstr "애니메ì´ì…˜ 툴"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation"
@@ -4963,7 +4969,7 @@ msgstr "애니메ì´ì…˜ 목ë¡ì„ 표시합니다."
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Autoplay on Load"
-msgstr "불러올 시 ìžë™ìœ¼ë¡œ 재ìƒ"
+msgstr "불러오면 ìžë™ 재ìƒ"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Enable Onion Skinning"
@@ -5271,7 +5277,7 @@ msgstr "전환 노드"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Import Animations..."
-msgstr "애니메ì´ì…˜ 불러오기..."
+msgstr "애니메ì´ì…˜ 가져오기..."
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Edit Node Filters"
@@ -5355,7 +5361,7 @@ msgstr "실패함:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Bad download hash, assuming file has been tampered with."
-msgstr "ìž˜ëª»ëœ ë‹¤ìš´ë¡œë“œ 해시. 파ì¼ì´ ë³€ì¡°ëœ ê²ƒ 같아요."
+msgstr "ìž˜ëª»ëœ ë‹¤ìš´ë¡œë“œ 해시. 파ì¼ì´ ë³€ì¡°ëœ ê²ƒ 같습니다."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Expected:"
@@ -5463,7 +5469,7 @@ msgstr "ì• ì…‹ 검색 (템플릿, 프로ì íЏ, ë° ë°ëª¨ 제외)"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Import..."
-msgstr "불러오기..."
+msgstr "가져오기..."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Plugins..."
@@ -5832,7 +5838,7 @@ msgstr "IK ì²´ì¸ ì§€ìš°ê¸°"
msgid ""
"Warning: Children of a container get their position and size determined only "
"by their parent."
-msgstr "경고: 컨테ì´ë„ˆì˜ ìžì† 위치와 í¬ê¸°ëŠ” ë¶€ëª¨ì— ì˜í•´ ê²°ì •ë©ë‹ˆë‹¤."
+msgstr "경고: 컨테ì´ë„ˆì˜ ìžì‹ 위치와 í¬ê¸°ëŠ” ë¶€ëª¨ì— ì˜í•´ ê²°ì •ë©ë‹ˆë‹¤."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp
@@ -5987,12 +5993,12 @@ msgstr "ì„ íƒëœ 오브ì íŠ¸ë¥¼ 잠금ì—서 풉니다 (움ì§ì¼ 수 있습ë‹
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Makes sure the object's children are not selectable."
-msgstr "오브ì íŠ¸ì˜ ìžì†ì„ ì„ íƒí•˜ì§€ 않ë„ë¡ í•©ë‹ˆë‹¤."
+msgstr "오브ì íŠ¸ì˜ ìžì‹ì„ ì„ íƒí•˜ì§€ 않ë„ë¡ í•©ë‹ˆë‹¤."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Restores the object's children's ability to be selected."
-msgstr "오브ì íŠ¸ì˜ ìžì†ì„ ì„ íƒí•  수 있ë„ë¡ ë³µì›í•©ë‹ˆë‹¤."
+msgstr "오브ì íŠ¸ì˜ ìžì‹ì„ ì„ íƒí•  수 있ë„ë¡ ë³µì›í•©ë‹ˆë‹¤."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Skeleton Options"
@@ -6600,11 +6606,11 @@ msgstr "ì„ íƒí•œ 항목 제거"
#: editor/plugins/mesh_library_editor_plugin.cpp
msgid "Import from Scene (Ignore Transforms)"
-msgstr "씬ì—서 불러오기 (변형 무시)"
+msgstr "씬ì—서 가져오기 (변형 무시)"
#: editor/plugins/mesh_library_editor_plugin.cpp
msgid "Import from Scene (Apply Transforms)"
-msgstr "씬ì—서 불러오기 (변형 ì ìš©)"
+msgstr "씬ì—서 가져오기 (변형 ì ìš©)"
#: editor/plugins/mesh_library_editor_plugin.cpp
msgid "Update from Scene"
@@ -7240,11 +7246,11 @@ msgstr "저장 중 오류"
#: editor/plugins/script_editor_plugin.cpp
msgid "Error importing theme."
-msgstr "테마 불러오는 중 오류."
+msgstr "테마 가져오는 중 오류."
#: editor/plugins/script_editor_plugin.cpp
msgid "Error Importing"
-msgstr "불러오는 중 오류"
+msgstr "가져오는 중 오류"
#: editor/plugins/script_editor_plugin.cpp
msgid "New Text File..."
@@ -7279,7 +7285,7 @@ msgstr ""
#: editor/plugins/script_editor_plugin.cpp
msgid "Import Theme"
-msgstr "테마 불러오기"
+msgstr "테마 가져오기"
#: editor/plugins/script_editor_plugin.cpp
msgid "Error while saving theme"
@@ -7336,12 +7342,10 @@ msgid "Move Down"
msgstr "아래로 ì´ë™"
#: editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Next Script"
msgstr "ë‹¤ìŒ ìŠ¤í¬ë¦½íЏ"
#: editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Previous Script"
msgstr "ì´ì „ 스í¬ë¦½íЏ"
@@ -7384,7 +7388,7 @@ msgstr "테마"
#: editor/plugins/script_editor_plugin.cpp
msgid "Import Theme..."
-msgstr "테마 불러오기..."
+msgstr "테마 가져오기..."
#: editor/plugins/script_editor_plugin.cpp
msgid "Reload Theme"
@@ -7692,17 +7696,17 @@ msgstr "ì…°ì´ë”"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "This skeleton has no bones, create some children Bone2D nodes."
-msgstr "ì´ ìŠ¤ì¼ˆë ˆí†¤ì—는 ë³¸ì´ ì—†ìŠµë‹ˆë‹¤. Bone2D노드를 ìžì†ìœ¼ë¡œ 만드세요."
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
-msgstr "ë³¸ì˜ ëŒ€ê¸° ìžì„¸ 만들기"
+msgstr "ì´ ìŠ¤ì¼ˆë ˆí†¤ì—는 ë³¸ì´ ì—†ìŠµë‹ˆë‹¤. Bone2D노드를 ìžì‹ìœ¼ë¡œ 만드세요."
#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Set Rest Pose to Bones"
msgstr "본ì—게 대기 ìžì„¸ 설정"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Create Rest Pose from Bones"
+msgstr "ë³¸ì˜ ëŒ€ê¸° ìžì„¸ 만들기"
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Skeleton2D"
msgstr "스켈레톤2D"
@@ -7759,9 +7763,8 @@ msgid "Left Orthogonal"
msgstr "좌측 ì§êµ"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Left Perspective"
-msgstr "ì›ê·¼"
+msgstr "좌측 ì›ê·¼"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right Orthogonal"
@@ -7930,7 +7933,7 @@ msgstr "íšŒì „ì„ ë·°ì— ì •ë ¬"
#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
msgid "No parent to instance a child at."
-msgstr "ìžì†ì„ ì¸ìŠ¤í„´ìŠ¤í•  부모가 없습니다."
+msgstr "ìžì‹ì„ ì¸ìŠ¤í„´ìŠ¤í™”í•  부모가 없습니다."
#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
msgid "This operation requires a single selected node."
@@ -8093,11 +8096,11 @@ msgstr "í¬í„¸ 컬ë§ì„ 위한 ë£¸ì„ ë³€í™˜í•©ë‹ˆë‹¤."
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Bottom View"
-msgstr "하단 뷰"
+msgstr "아래쪽 뷰"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Top View"
-msgstr "ìƒë‹¨ ë·°"
+msgstr "위쪽 뷰"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View"
@@ -8117,24 +8120,23 @@ msgstr "우측 뷰"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Orbit View Down"
-msgstr ""
+msgstr "선회 뷰 아래로"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Orbit View Left"
-msgstr ""
+msgstr "선회 뷰 왼쪽으로"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Orbit View Right"
-msgstr ""
+msgstr "선회 뷰 오른쪽으로"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Orbit View Up"
-msgstr "ì •ë©´ ë·°"
+msgstr "선회 뷰 위로"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Orbit View 180"
-msgstr ""
+msgstr "선회 뷰 180으로"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Switch Perspective/Orthogonal View"
@@ -8592,15 +8594,15 @@ msgstr "현재 ì„ íƒ {num}ê°œ"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Nothing was selected for the import."
-msgstr "불러올 ê²ƒì´ ì„ íƒë˜ì§€ 않았습니다."
+msgstr "가져올 ê²ƒì´ ì„ íƒë˜ì§€ 않았습니다."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Importing Theme Items"
-msgstr "테마 í•­ëª©ì„ ë¶ˆëŸ¬ì˜¤ëŠ” 중"
+msgstr "테마 í•­ëª©ì„ ê°€ì ¸ì˜¤ëŠ” 중"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Importing items {n}/{n}"
-msgstr "í•­ëª©ì„ ë¶ˆëŸ¬ì˜¤ëŠ” 중 {n}/{n}"
+msgstr "항목 {n}/{n}ì„ ê°€ì ¸ì˜¤ëŠ” 중"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Updating the editor"
@@ -8719,7 +8721,7 @@ msgstr "모든 테마 í•­ëª©ì„ ì„ íƒ í•´ì œí•©ë‹ˆë‹¤."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Import Selected"
-msgstr "ì„ íƒëœ 항목 불러오기"
+msgstr "ì„ íƒëœ 항목 가져오기"
#: editor/plugins/theme_editor_plugin.cpp
msgid ""
@@ -8727,7 +8729,7 @@ msgid ""
"closing this window.\n"
"Close anyway?"
msgstr ""
-"항목 불러오기 íƒ­ì— ì¼ë¶€ í•­ëª©ì´ ì„ íƒë˜ì–´ 있습니다. ì´ ì°½ì„ ë‹«ìœ¼ë©´ ì„ íƒì„ 잃게 "
+"항목 가져오기 íƒ­ì— ì¼ë¶€ í•­ëª©ì´ ì„ íƒë˜ì–´ 있습니다. ì´ ì°½ì„ ë‹«ìœ¼ë©´ ì„ íƒì„ 잃게 "
"ë©ë‹ˆë‹¤.\n"
"무시하고 닫으시겠습니까?"
@@ -8737,7 +8739,7 @@ msgid ""
"You can add a custom type or import a type with its items from another theme."
msgstr ""
"í…Œë§ˆì˜ í•­ëª©ì„ íŽ¸ì§‘í•˜ë ¤ë©´ 목ë¡ì—서 테마 íƒ€ìž…ì„ ì„ íƒí•˜ì„¸ìš”.\n"
-"커스텀 íƒ€ìž…ì„ ì¶”ê°€í•˜ê±°ë‚˜ 다른 í…Œë§ˆì˜ í•­ëª©ê³¼ 함께 íƒ€ìž…ì„ ë¶ˆëŸ¬ì˜¬ 수 있습니다."
+"커스텀 íƒ€ìž…ì„ ì¶”ê°€í•˜ê±°ë‚˜ 다른 í…Œë§ˆì˜ í•­ëª©ê³¼ 함께 íƒ€ìž…ì„ ê°€ì ¸ì˜¬ 수 있습니다."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Remove All Color Items"
@@ -8769,7 +8771,7 @@ msgid ""
"Add more items to it manually or by importing from another theme."
msgstr ""
"ì´ í…Œë§ˆ íƒ€ìž…ì€ ë¹„ì–´ 있습니다.\n"
-"ì§ì ‘ ë˜ëŠ” 다른 테마ì—서 불러와서 í…Œë§ˆì— ë” ë§Žì€ í•­ëª©ì„ ì¶”ê°€í•˜ì„¸ìš”."
+"ì§ì ‘ ë˜ëŠ” 다른 테마ì—서 가져와서 í…Œë§ˆì— ë” ë§Žì€ í•­ëª©ì„ ì¶”ê°€í•˜ì„¸ìš”."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Add Color Item"
@@ -8869,7 +8871,7 @@ msgstr "ì´ì „ ì´ë¦„:"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Import Items"
-msgstr "항목 불러오기"
+msgstr "항목 가져오기"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Default Theme"
@@ -8949,7 +8951,7 @@ msgstr "항목 관리..."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Add, remove, organize and import Theme items."
-msgstr "테마 í•­ëª©ì„ ì¶”ê°€, 제거, 구성 ë° ë¶ˆëŸ¬ì˜µë‹ˆë‹¤."
+msgstr "테마 í•­ëª©ì„ ì¶”ê°€, 제거, 구성 ë° ê°€ì ¸ì˜µë‹ˆë‹¤."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Add Preview"
@@ -9020,7 +9022,6 @@ msgid "Subitem 2"
msgstr "하위 항목 2"
#: editor/plugins/theme_editor_preview.cpp
-#, fuzzy
msgid "Has"
msgstr "갖춤"
@@ -9053,9 +9054,8 @@ msgid "Subtree"
msgstr "하위 트리"
#: editor/plugins/theme_editor_preview.cpp
-#, fuzzy
msgid "Has,Many,Options"
-msgstr "ë§Žì€,옵션,갖춤"
+msgstr "갖춤,ë§Žì€,옵션"
#: editor/plugins/theme_editor_preview.cpp
msgid "Invalid path, the PackedScene resource was probably moved or removed."
@@ -10665,7 +10665,7 @@ msgstr "새 게임 프로ì íЏ"
#: editor/project_manager.cpp
msgid "Imported Project"
-msgstr "불러온 프로ì íЏ"
+msgstr "가져온 프로ì íЏ"
#: editor/project_manager.cpp
msgid "Invalid project name."
@@ -10721,11 +10721,11 @@ msgstr "프로ì íЏ ì´ë¦„ 바꾸기"
#: editor/project_manager.cpp
msgid "Import Existing Project"
-msgstr "기존 프로ì íЏ 불러오기"
+msgstr "기존 프로ì íЏ 가져오기"
#: editor/project_manager.cpp
msgid "Import & Edit"
-msgstr "불러오기 & 편집"
+msgstr "가져오기 & 편집"
#: editor/project_manager.cpp
msgid "Create New Project"
@@ -10880,8 +10880,8 @@ msgid ""
"Can't run project: Assets need to be imported.\n"
"Please edit the project to trigger the initial import."
msgstr ""
-"프로ì íŠ¸ë¥¼ 실행할 수 ì—†ìŒ: ì• ì…‹ì„ ë¶ˆëŸ¬ì™€ì•¼ 합니다.\n"
-"프로ì íŠ¸ë¥¼ 편집해서 최초 불러오기가 실행ë˜ë„ë¡ í•˜ì„¸ìš”."
+"프로ì íŠ¸ë¥¼ 실행할 수 ì—†ìŒ: ì• ì…‹ì„ ê°€ì ¸ì™€ì•¼ 합니다.\n"
+"프로ì íŠ¸ë¥¼ 편집해서 최초 가져오기가 실행ë˜ë„ë¡ í•˜ì„¸ìš”."
#: editor/project_manager.cpp
msgid "Are you sure to run %d projects at once?"
@@ -10962,7 +10962,7 @@ msgstr "새 프로ì íЏ"
#: editor/project_manager.cpp
msgid "Import Project"
-msgstr "프로ì íЏ 불러오기"
+msgstr "프로ì íЏ 가져오기"
#: editor/project_manager.cpp
msgid "Remove Project"
@@ -11019,14 +11019,14 @@ msgstr ""
"ìƒ í¬í•¨ì‹œì¼œì•¼ 합니다."
#: editor/project_settings_editor.cpp
-msgid "Key "
-msgstr "키 "
-
-#: editor/project_settings_editor.cpp
msgid "Physical Key"
msgstr "물리 키"
#: editor/project_settings_editor.cpp
+msgid "Key "
+msgstr "키 "
+
+#: editor/project_settings_editor.cpp
msgid "Joy Button"
msgstr "ì¡°ì´ìŠ¤í‹± 버튼"
@@ -11144,7 +11144,7 @@ msgstr "ì´ë²¤íЏ 추가"
#: editor/project_settings_editor.cpp
msgid "Button"
-msgstr "Button"
+msgstr "버튼"
#: editor/project_settings_editor.cpp
msgid "Left Button."
@@ -11348,7 +11348,7 @@ msgstr "플러그ì¸(Plugin)"
#: editor/project_settings_editor.cpp
msgid "Import Defaults"
-msgstr "ë””í´íЏ 불러오기"
+msgstr "ë””í´íЏ 가져오기"
#: editor/property_editor.cpp
msgid "Preset..."
@@ -11468,7 +11468,7 @@ msgstr "단계별 카운터"
#: editor/rename_dialog.cpp
msgid "If set, the counter restarts for each group of child nodes."
-msgstr "설정하면 ê° ê·¸ë£¹ì˜ ìžì† ë…¸ë“œì˜ ì¹´ìš´í„°ë¥¼ 다시 시작합니다."
+msgstr "설정하면 ê° ê·¸ë£¹ì˜ ìžì‹ ë…¸ë“œì˜ ì¹´ìš´í„°ë¥¼ 다시 시작합니다."
#: editor/rename_dialog.cpp
msgid "Initial value for the counter"
@@ -11598,7 +11598,7 @@ msgstr "가지 씬으로 êµì²´"
#: editor/scene_tree_dock.cpp
msgid "Instance Child Scene"
-msgstr "ìžì† 씬 ì¸ìŠ¤í„´ìŠ¤í™”"
+msgstr "ìžì‹ 씬 ì¸ìŠ¤í„´ìŠ¤í™”"
#: editor/scene_tree_dock.cpp
msgid "Can't paste root node into the same scene."
@@ -11648,7 +11648,7 @@ msgstr "노드를 루트로 만들기"
#: editor/scene_tree_dock.cpp
msgid "Delete %d nodes and any children?"
-msgstr "%d ê°œì˜ ë…¸ë“œì™€ 모든 ìžì† 노드를 삭제할까요?"
+msgstr "%d ê°œì˜ ë…¸ë“œì™€ 모든 ìžì‹ 노드를 삭제할까요?"
#: editor/scene_tree_dock.cpp
msgid "Delete %d nodes?"
@@ -11660,7 +11660,7 @@ msgstr "루트 노드 \"%s\"ì„(를) 삭제할까요?"
#: editor/scene_tree_dock.cpp
msgid "Delete node \"%s\" and its children?"
-msgstr "노드 \"%s\"와(ê³¼) ìžì†ì„ 삭제할까요?"
+msgstr "노드 \"%s\"와(ê³¼) ìžì‹ì„ 삭제할까요?"
#: editor/scene_tree_dock.cpp
msgid "Delete node \"%s\"?"
@@ -11717,7 +11717,7 @@ msgid ""
"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and "
"cause all properties of the node to be reverted to their default."
msgstr ""
-"\"ìžë¦¬ 표시ìžë¡œ 불러오기\"를 활성화하면 \"편집할 수 있는 ìžì†\" ì„¤ì •ì´ ë¹„í™œì„±"
+"\"ìžë¦¬ 표시ìžë¡œ 불러오기\"를 활성화하면 \"편집할 수 있는 ìžì‹\" ì„¤ì •ì´ ë¹„í™œì„±"
"í™”ë˜ê³ , 그러면 ê·¸ ë…¸ë“œì˜ ëª¨ë“  ì†ì„±ì´ ë””í´íŠ¸ë¡œ ë³µì›ë©ë‹ˆë‹¤."
#: editor/scene_tree_dock.cpp
@@ -11801,7 +11801,7 @@ msgstr "ìƒì† 지우기"
#: editor/scene_tree_dock.cpp
msgid "Editable Children"
-msgstr "편집할 수 있는 ìžì†"
+msgstr "편집할 수 있는 ìžì‹"
#: editor/scene_tree_dock.cpp
msgid "Load As Placeholder"
@@ -11818,7 +11818,7 @@ msgstr ""
#: editor/scene_tree_dock.cpp
msgid "Add Child Node"
-msgstr "ìžì† 노드 추가"
+msgstr "ìžì‹ 노드 추가"
#: editor/scene_tree_dock.cpp
msgid "Expand/Collapse All"
@@ -11842,7 +11842,7 @@ msgstr "다른 씬ì—서 병합하기"
#: editor/scene_tree_dock.cpp editor/script_editor_debugger.cpp
msgid "Save Branch as Scene"
-msgstr "가지를 씬으로 저장"
+msgstr "가지를 씬으로 저장하기"
#: editor/scene_tree_dock.cpp editor/script_editor_debugger.cpp
msgid "Copy Node Path"
@@ -11861,7 +11861,7 @@ msgid ""
"Instance a scene file as a Node. Creates an inherited scene if no root node "
"exists."
msgstr ""
-"씬 파ì¼ì„ 노드로 ì¸ìŠ¤í„´ìŠ¤í•©ë‹ˆë‹¤. 루트 노드가 없으면 ìƒì†ëœ ì”¬ì„ ë§Œë“­ë‹ˆë‹¤."
+"씬 파ì¼ì„ 노드로 ì¸ìŠ¤í„´ìŠ¤í™”í•©ë‹ˆë‹¤. 루트 노드가 없으면 ìƒì†ëœ ì”¬ì„ ë§Œë“­ë‹ˆë‹¤."
#: editor/scene_tree_dock.cpp
msgid "Attach a new or existing script to the selected node."
@@ -11954,7 +11954,7 @@ msgid ""
"Children are not selectable.\n"
"Click to make selectable."
msgstr ""
-"ìžì†ì„ ì„ íƒí•  수 없습니다.\n"
+"ìžì‹ì„ ì„ íƒí•  수 없습니다.\n"
"í´ë¦­í•˜ë©´ ì„ íƒí•  수 있습니다."
#: editor/scene_tree_editor.cpp
@@ -12167,7 +12167,7 @@ msgstr "오류"
#: editor/script_editor_debugger.cpp
msgid "Child process connected."
-msgstr "ìžì† 프로세스 ì—°ê²°ë¨."
+msgstr "ìžì‹ 프로세스 ì—°ê²°ë¨."
#: editor/script_editor_debugger.cpp
msgid "Copy Error"
@@ -12247,7 +12247,7 @@ msgstr "형ì‹"
#: editor/script_editor_debugger.cpp
msgid "Usage"
-msgstr "사용"
+msgstr "사용례"
#: editor/script_editor_debugger.cpp
msgid "Misc"
@@ -13016,7 +13016,7 @@ msgstr "ì‹œê·¸ë„ íŽ¸ì§‘:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Make Tool:"
-msgstr "ë„구 만들기:"
+msgstr "툴 만들기:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Members:"
@@ -13192,7 +13192,7 @@ msgstr "기기ì—서 실행할 수 없었습니다."
#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
-msgstr "'apksigner' ë„구를 ì°¾ì„ ìˆ˜ 없습니다."
+msgstr "'apksigner' íˆ´ì„ ì°¾ì„ ìˆ˜ 없습니다."
#: platform/android/export/export_plugin.cpp
msgid ""
@@ -13596,7 +13596,7 @@ msgid ""
"define its shape."
msgstr ""
"ì´ ë…¸ë“œëŠ” ëª¨ì–‘ì´ ì—†ìŠµë‹ˆë‹¤, 다른 물체와 ì¶©ëŒí•˜ê±°ë‚˜ ìƒí˜¸ 작용할 수 없습니다.\n"
-"CollisionShape2D ë˜ëŠ” CollisionPolygon2D를 ìžì† 노드로 추가하여 ëª¨ì–‘ì„ ì •ì˜í•˜"
+"CollisionShape2D ë˜ëŠ” CollisionPolygon2D를 ìžì‹ 노드로 추가하여 ëª¨ì–‘ì„ ì •ì˜í•˜"
"는 ê²ƒì„ ê³ ë ¤í•˜ì„¸ìš”."
#: scene/2d/collision_polygon_2d.cpp
@@ -13607,7 +13607,7 @@ msgid ""
msgstr ""
"CollisionPolygon2D는 CollisionObject2Dì— ì½œë¦¬ì „ ëª¨ì–‘ì„ ì§€ì •í•˜ëŠ” ìš©ë„로만 사용"
"ë©ë‹ˆë‹¤. ëª¨ì–‘ì„ ì •ì˜í•´ì•¼ 하는 Area2D, StaticBody2D, RigidBody2D, "
-"KinematicBody2D ë“±ì˜ ìžì†ìœ¼ë¡œë§Œ 사용해주세요."
+"KinematicBody2D ë“±ì˜ ìžì‹ìœ¼ë¡œë§Œ 사용해주세요."
#: scene/2d/collision_polygon_2d.cpp
msgid "An empty CollisionPolygon2D has no effect on collision."
@@ -13629,7 +13629,7 @@ msgid ""
msgstr ""
"CollisionShape2D는 CollisionObject2Dì— ì½œë¦¬ì „ ëª¨ì–‘ì„ ì§€ì •í•˜ëŠ” ìš©ë„로만 사용ë©"
"니다. ëª¨ì–‘ì„ ì •ì˜í•´ì•¼ 하는 Area2D, StaticBody2D, RigidBody2D, "
-"KinematicBody2D ë“±ì˜ ìžì†ìœ¼ë¡œë§Œ 사용해주세요."
+"KinematicBody2D ë“±ì˜ ìžì‹ìœ¼ë¡œë§Œ 사용해주세요."
#: scene/2d/collision_shape_2d.cpp
msgid ""
@@ -13704,14 +13704,14 @@ msgid ""
"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
"node. It only provides navigation data."
msgstr ""
-"NavigationPolygonInstance는 Navigation2D ë…¸ë“œì˜ ìžì†ì´ë‚˜ ì†ì£¼ì— 있어야 합니"
+"NavigationPolygonInstance는 Navigation2D ë…¸ë“œì˜ ìžì‹ì´ë‚˜ ì†ì£¼ì— 있어야 합니"
"다. ì´ê²ƒì€ 내비게ì´ì…˜ ë°ì´í„°ë§Œì„ 제공합니다."
#: scene/2d/parallax_layer.cpp
msgid ""
"ParallaxLayer node only works when set as child of a ParallaxBackground node."
msgstr ""
-"ParallaxLayer는 ParallaxBackground ë…¸ë“œì˜ ìžì† 노드로 ìžˆì„ ë•Œë§Œ ìž‘ë™í•©ë‹ˆë‹¤."
+"ParallaxLayer는 ParallaxBackground ë…¸ë“œì˜ ìžì‹ 노드로 ìžˆì„ ë•Œë§Œ ìž‘ë™í•©ë‹ˆë‹¤."
#: scene/2d/particles_2d.cpp
msgid ""
@@ -13741,7 +13741,7 @@ msgstr ""
#: scene/2d/path_2d.cpp
msgid "PathFollow2D only works when set as a child of a Path2D node."
-msgstr "PathFollow2D는 Path2D ë…¸ë“œì˜ ìžì† 노드로 ìžˆì„ ë•Œë§Œ ìž‘ë™í•©ë‹ˆë‹¤."
+msgstr "PathFollow2D는 Path2D ë…¸ë“œì˜ ìžì‹ 노드로 ìžˆì„ ë•Œë§Œ ìž‘ë™í•©ë‹ˆë‹¤."
#: scene/2d/physics_body_2d.cpp
msgid ""
@@ -13751,7 +13751,7 @@ msgid ""
msgstr ""
"(ìºë¦­í„°ë‚˜ 리지드 모드ì—서) RigidBody2Dì˜ í¬ê¸° ë³€ê²½ì€ ë¬¼ë¦¬ ì—”ì§„ì´ ìž‘ë™í•˜ëŠ” ë™"
"안 í° ë¶€ë‹´ì´ ë©ë‹ˆë‹¤.\n"
-"대신 ìžì† 콜리전 ëª¨ì–‘ì˜ í¬ê¸°ë¥¼ 변경해보세요."
+"대신 ìžì‹ 콜리전 ëª¨ì–‘ì˜ í¬ê¸°ë¥¼ 변경해보세요."
#: scene/2d/remote_transform_2d.cpp
msgid "Path property must point to a valid Node2D node to work."
@@ -13780,7 +13780,7 @@ msgid ""
msgstr ""
"Use Parentê°€ 켜진 TileMapì€ ëª¨ì–‘ì„ ì£¼ëŠ” 부모 CollisionObject2Dê°€ 필요합니다. "
"ëª¨ì–‘ì„ ì£¼ê¸° 위해 Area2D, StaticBody2D, RigidBody2D, KinematicBody2D ë“±ì„ ìž"
-"ì† ë…¸ë“œë¡œ 사용해주세요."
+"ì‹ ë…¸ë“œë¡œ 사용해주세요."
#: scene/2d/visibility_notifier_2d.cpp
msgid ""
@@ -13817,7 +13817,7 @@ msgstr "앵커 IDê°€ 0ì´ ë˜ë©´ 앵커가 실제 ì•µì»¤ì— ë°”ì¸ë”©í•˜ì§€ 않ê
#: scene/3d/arvr_nodes.cpp
msgid "ARVROrigin requires an ARVRCamera child node."
-msgstr "ARVROriginì€ ìžì†ìœ¼ë¡œ ARVRCamera 노드가 필요합니다."
+msgstr "ARVROriginì€ ìžì‹ìœ¼ë¡œ ARVRCamera 노드가 필요합니다."
#: scene/3d/baked_lightmap.cpp
msgid "Finding meshes and lights"
@@ -13850,7 +13850,7 @@ msgid ""
"its shape."
msgstr ""
"ì´ ë…¸ë“œëŠ” ëª¨ì–‘ì´ ì—†ìŠµë‹ˆë‹¤. 다른 물체와 ì¶©ëŒí•˜ê±°ë‚˜ ìƒí˜¸ 작용할 수 없습니다.\n"
-"CollisionShape ë˜ëŠ” CollisionPolygonì„ ìžì† 노드로 추가해서 ëª¨ì–‘ì„ ì •ì˜í•˜ëŠ” "
+"CollisionShape ë˜ëŠ” CollisionPolygonì„ ìžì‹ 노드로 추가해서 ëª¨ì–‘ì„ ì •ì˜í•˜ëŠ” "
"ê²ƒì„ ê³ ë ¤í•˜ì„¸ìš”."
#: scene/3d/collision_polygon.cpp
@@ -13860,7 +13860,7 @@ msgid ""
"StaticBody, RigidBody, KinematicBody, etc. to give them a shape."
msgstr ""
"CollisionPolygonì€ CollisionObjectì— ì½œë¦¬ì „ ëª¨ì–‘ì„ ì§€ì •í•˜ëŠ” ìš©ë„로만 사용ë©ë‹ˆ"
-"다. Area, StaticBody, RigidBody, KinematicBody ë“±ì— ìžì† 노드로 추가해서 사용"
+"다. Area, StaticBody, RigidBody, KinematicBody ë“±ì— ìžì‹ 노드로 추가해서 사용"
"해주세요."
#: scene/3d/collision_polygon.cpp
@@ -13874,7 +13874,7 @@ msgid ""
"KinematicBody, etc. to give them a shape."
msgstr ""
"CollisionShapeì€ CollisionObjectì— ì½œë¦¬ì „ ëª¨ì–‘ì„ ì§€ì •í•˜ëŠ” ìš©ë„로만 사용ë©ë‹ˆ"
-"다. Area, StaticBody, RigidBody, KinematicBody ë“±ì— ìžì† 노드로 추가해서 사용"
+"다. Area, StaticBody, RigidBody, KinematicBody ë“±ì— ìžì‹ 노드로 추가해서 사용"
"해주세요."
#: scene/3d/collision_shape.cpp
@@ -13952,7 +13952,7 @@ msgid ""
"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
"It only provides navigation data."
msgstr ""
-"NavigationMeshInstance는 Navigation ë…¸ë“œì˜ ìžì†ì´ë‚˜ ì†ì£¼ì— 있어야 합니다. ì´"
+"NavigationMeshInstance는 Navigation ë…¸ë“œì˜ ìžì‹ì´ë‚˜ ì†ì£¼ì— 있어야 합니다. ì´"
"ê²ƒì€ ë‚´ë¹„ê²Œì´ì…˜ ë°ì´í„°ë§Œ 제공합니다."
#: scene/3d/occluder.cpp
@@ -13988,7 +13988,7 @@ msgstr ""
#: scene/3d/path.cpp
msgid "PathFollow only works when set as a child of a Path node."
-msgstr "PathFollow는 Path ë…¸ë“œì˜ ìžì†ìœ¼ë¡œ ìžˆì„ ë•Œë§Œ ìž‘ë™í•©ë‹ˆë‹¤."
+msgstr "PathFollow는 Path ë…¸ë“œì˜ ìžì‹ìœ¼ë¡œ ìžˆì„ ë•Œë§Œ ìž‘ë™í•©ë‹ˆë‹¤."
#: scene/3d/path.cpp
msgid ""
@@ -14006,7 +14006,7 @@ msgid ""
msgstr ""
"(ìºë¦­í„°ë‚˜ 리지드 모드ì—서) RigidBodyì˜ í¬ê¸° ë³€ê²½ì€ ë¬¼ë¦¬ ì—”ì§„ì´ ìž‘ë™í•˜ëŠ” ë™ì•ˆ "
"í° ë¶€ë‹´ì´ ë©ë‹ˆë‹¤.\n"
-"대신 ìžì† 콜리전 ëª¨ì–‘ì˜ í¬ê¸°ë¥¼ 변경하세요."
+"대신 ìžì‹ 콜리전 ëª¨ì–‘ì˜ í¬ê¸°ë¥¼ 변경하세요."
#: scene/3d/physics_joint.cpp
msgid "Node A and Node B must be PhysicsBodies"
@@ -14030,15 +14030,15 @@ msgstr "노드 A와 노드 B는 서로 다른 PhysicsBody여야 합니다"
#: scene/3d/portal.cpp
msgid "The RoomManager should not be a child or grandchild of a Portal."
-msgstr "RoomManager는 Portalì˜ ìžì†ì´ë‚˜ ì†ì£¼ê°€ 아니어야 합니다."
+msgstr "RoomManager는 Portalì˜ ìžì‹ì´ë‚˜ ì†ì£¼ê°€ 아니어야 합니다."
#: scene/3d/portal.cpp
msgid "A Room should not be a child or grandchild of a Portal."
-msgstr "Roomì€ Portalì˜ ìžì†ì´ë‚˜ ì†ì£¼ê°€ 아니어야 합니다."
+msgstr "Roomì€ Portalì˜ ìžì‹ì´ë‚˜ ì†ì£¼ê°€ 아니어야 합니다."
#: scene/3d/portal.cpp
msgid "A RoomGroup should not be a child or grandchild of a Portal."
-msgstr "RoomGroupì€ Portalì˜ ìžì†ì´ë‚˜ ì†ì£¼ê°€ 아니어야 합니다."
+msgstr "RoomGroupì€ Portalì˜ ìžì‹ì´ë‚˜ ì†ì£¼ê°€ 아니어야 합니다."
#: scene/3d/remote_transform.cpp
msgid ""
@@ -14050,7 +14050,7 @@ msgstr ""
#: scene/3d/room.cpp
msgid "A Room cannot have another Room as a child or grandchild."
-msgstr "Roomì€ ë‹¤ë¥¸ Roomì„ ìžì†ì´ë‚˜ ì†ì£¼ë¡œ 가질 수 없습니다."
+msgstr "Roomì€ ë‹¤ë¥¸ Roomì„ ìžì‹ì´ë‚˜ ì†ì£¼ë¡œ 가질 수 없습니다."
#: scene/3d/room.cpp
msgid "The RoomManager should not be placed inside a Room."
@@ -14165,7 +14165,7 @@ msgid ""
"it as a child of a VehicleBody."
msgstr ""
"VehicleWheelì€ VehicleBody로 바퀴 ì‹œìŠ¤í…œì„ ì œê³µí•˜ëŠ” 역할입니다. VehicleBody"
-"ì˜ ìžì†ìœ¼ë¡œ 사용해주세요."
+"ì˜ ìžì‹ìœ¼ë¡œ 사용해주세요."
#: scene/3d/world_environment.cpp
msgid ""
@@ -14271,7 +14271,7 @@ msgid ""
"children placement behavior.\n"
"If you don't intend to add a script, use a plain Control node instead."
msgstr ""
-"Container ìžì²´ëŠ” ìžì† 배치 ìž‘ì—…ì„ êµ¬ì„±í•˜ëŠ” 스í¬ë¦½íЏ 외ì—는 목ì ì´ 없습니다.\n"
+"Container ìžì²´ëŠ” ìžì‹ 배치 ìž‘ì—…ì„ êµ¬ì„±í•˜ëŠ” 스í¬ë¦½íЏ 외ì—는 목ì ì´ 없습니다.\n"
"스í¬ë¦½íŠ¸ë¥¼ 추가하는 ì˜ë„ê°€ 없으면, 순수한 Control 노드를 사용해주세요."
#: scene/gui/control.cpp
@@ -14330,8 +14330,8 @@ msgid ""
"Use a container as child (VBox, HBox, etc.), or a Control and set the custom "
"minimum size manually."
msgstr ""
-"ScrollContainer는 ë‹¨ì¼ ìžì† Controlì„ ìž‘ì—…í•˜ê¸° 위한 것입니다.\n"
-"(VBox, HBox 등) 컨테ì´ë„ˆë¥¼ ìžì†ìœ¼ë¡œ 사용하거나, Controlì„ ì‚¬ìš©í•˜ê³  ì‚¬ìš©ìž ì§€"
+"ScrollContainer는 ë‹¨ì¼ ìžì‹ Controlì„ ìž‘ì—…í•˜ê¸° 위한 것입니다.\n"
+"(VBox, HBox 등) 컨테ì´ë„ˆë¥¼ ìžì‹ìœ¼ë¡œ 사용하거나, Controlì„ ì‚¬ìš©í•˜ê³  ì‚¬ìš©ìž ì§€"
"ì • 최소 수치를 수ë™ìœ¼ë¡œ 설정하세요."
#: scene/gui/tree.cpp
@@ -14353,6 +14353,10 @@ msgid ""
"Consider using a script's process loop instead of relying on a Timer for "
"very low wait times."
msgstr ""
+"매우 ì§§ì€ íƒ€ì´ë¨¸ 대기 시간(< 0.05ì´ˆ)ì€ ë Œë”ë§ëœ 프레임 ë ˆì´íŠ¸ë‚˜ 물리 프레임 "
+"ë ˆì´íŠ¸ì— ë”°ë¼ ìƒë‹¹ížˆ 다른 ë°©ì‹ìœ¼ë¡œ ìž‘ë™í•  수 있습니다.\n"
+"대기 ì‹œê°„ì´ ë§¤ìš° 짧다면 타ì´ë¨¸ì— ì˜ì¡´í•˜ëŠ” 대신 스í¬ë¦½íŠ¸ì˜ í”„ë¡œì„¸ìŠ¤ 루프를 사"
+"용하는 ê²ƒì´ ì¢‹ìŠµë‹ˆë‹¤."
#: scene/main/viewport.cpp
msgid ""
@@ -14362,16 +14366,16 @@ msgid ""
"texture to some node for display."
msgstr ""
"ë·°í¬íŠ¸ë¥¼ ë Œë” ëŒ€ìƒìœ¼ë¡œ 설정하지 않았습니다. ë·°í¬íŠ¸ì˜ ë‚´ìš©ì„ í™”ë©´ì— ì§ì ‘ 표시"
-"하려면, Controlì˜ ìžì† 노드로 만들어서 í¬ê¸°ë¥¼ 얻어야 합니다. 그렇지 ì•Šì„ ê²½"
+"하려면, Controlì˜ ìžì‹ 노드로 만들어서 í¬ê¸°ë¥¼ 얻어야 합니다. 그렇지 ì•Šì„ ê²½"
"ìš°, í™”ë©´ì— í‘œì‹œí•˜ê¸° 위해서는 ë·°í¬íŠ¸ë¥¼ RenderTarget으로 만들고 ë‚´ë¶€ì ì¸ í…스처"
"를 다른 ë…¸ë“œì— ì§€ì •í•´ì•¼ 합니다."
#: scene/main/viewport.cpp
-#, fuzzy
msgid ""
"The Viewport size must be greater than or equal to 2 pixels on both "
"dimensions to render anything."
-msgstr "무엇ì´ë“  ë Œë”ë§í•˜ë ¤ë©´ ë·°í¬íЏ í¬ê¸°ê°€ 0보다 커야 합니다."
+msgstr ""
+"무엇ì´ë“  ë Œë”ë§í•˜ë ¤ë©´ ë·°í¬íЏ í¬ê¸°ê°€ 양쪽 ì°¨ì›ì—서 2픽셀 ì´ìƒì´ì–´ì•¼ 합니다."
#: scene/resources/occluder_shape.cpp
msgid "OccluderShapeSphere Set Spheres"
diff --git a/editor/translations/lt.po b/editor/translations/lt.po
index 404f9f5096..f4cdcf8c89 100644
--- a/editor/translations/lt.po
+++ b/editor/translations/lt.po
@@ -7676,11 +7676,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
@@ -10989,11 +10989,11 @@ msgid ""
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Key "
+msgid "Physical Key"
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Physical Key"
+msgid "Key "
msgstr ""
#: editor/project_settings_editor.cpp
diff --git a/editor/translations/lv.po b/editor/translations/lv.po
index 68dd8370bd..808a13782b 100644
--- a/editor/translations/lv.po
+++ b/editor/translations/lv.po
@@ -8,13 +8,14 @@
# Anonymous <noreply@weblate.org>, 2020.
# StiLins <aigars.skilins@gmail.com>, 2020.
# Rihards Kubilis <oldcar@inbox.lv>, 2020.
+# M E <gruffy7932@gmail.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2020-11-15 12:43+0000\n"
-"Last-Translator: Rihards Kubilis <oldcar@inbox.lv>\n"
+"PO-Revision-Date: 2021-11-15 10:49+0000\n"
+"Last-Translator: M E <gruffy7932@gmail.com>\n"
"Language-Team: Latvian <https://hosted.weblate.org/projects/godot-engine/"
"godot/lv/>\n"
"Language: lv\n"
@@ -23,7 +24,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n % 10 == 0 || n % 100 >= 11 && n % 100 <= "
"19) ? 0 : ((n % 10 == 1 && n % 100 != 11) ? 1 : 2);\n"
-"X-Generator: Weblate 4.4-dev\n"
+"X-Generator: Weblate 4.9.1-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -47,7 +48,7 @@ msgstr "NederÄ«ga ievade %i (nav padota) izteikumÄ"
#: core/math/expression.cpp
msgid "self can't be used because instance is null (not passed)"
-msgstr "'self' nevar izmantot, jo instance ir 'null' (nav padota)"
+msgstr "'self' nevar izmantot, jo instance ir tukÅ¡a (nav norÄdÄ«ta)"
#: core/math/expression.cpp
msgid "Invalid operands to operator %s, %s and %s."
@@ -373,13 +374,12 @@ msgstr "Anim ievietot"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
msgid "node '%s'"
-msgstr ""
+msgstr "mezgls '%s'"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "animation"
-msgstr "Funkcijas:"
+msgstr "animÄcija"
#: editor/animation_track_editor.cpp
msgid "AnimationPlayer can't animate itself, only other players."
@@ -388,7 +388,7 @@ msgstr "AnimationPlayer nevar animÄ“t pats sevi, tikai citus spÄ“lÄ“tÄjus."
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
msgid "property '%s'"
-msgstr ""
+msgstr "vērtība '%s'"
#: editor/animation_track_editor.cpp
msgid "Anim Create & Insert"
@@ -477,7 +477,7 @@ msgstr "Anim PÄrvietot AtslÄ“gas"
#: editor/animation_track_editor.cpp
#: modules/visual_script/visual_script_editor.cpp
msgid "Clipboard is empty!"
-msgstr ""
+msgstr "Starpliktuve ir tukša!"
#: editor/animation_track_editor.cpp
msgid "Paste Tracks"
@@ -595,12 +595,11 @@ msgstr "Doties uz NÄkamo Soli"
#: editor/animation_track_editor.cpp
msgid "Go to Previous Step"
-msgstr "Doties uz Iepriekšējo Soli"
+msgstr "Doties uz iepriekšejo soli"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Apply Reset"
-msgstr "AtiestatÄ«t tÄlummaiņu"
+msgstr "Pielietot atiestatīšanu"
#: editor/animation_track_editor.cpp
msgid "Optimize Animation"
@@ -619,9 +618,8 @@ msgid "Use Bezier Curves"
msgstr "Izmanto Bezjē Līknes"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Create RESET Track(s)"
-msgstr "Ielīmēt celiņus"
+msgstr "Izveidot atiestatīšanas celiņu(s)"
#: editor/animation_track_editor.cpp
msgid "Anim. Optimizer"
@@ -788,9 +786,8 @@ msgid "Method in target node must be specified."
msgstr "Metodi mÄ“rÄ·a mezglÄ nepiecieÅ¡ams specificÄ“t."
#: editor/connections_dialog.cpp
-#, fuzzy
msgid "Method name must be a valid identifier."
-msgstr "Metodi mÄ“rÄ·a mezglÄ nepiecieÅ¡ams specificÄ“t."
+msgstr "Metodes nosaukumam jÄbÅ«t korektam identifikÄtoram."
#: editor/connections_dialog.cpp
msgid ""
@@ -910,7 +907,7 @@ msgstr "Savieno..."
#: editor/connections_dialog.cpp
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Disconnect"
-msgstr "Atvieno"
+msgstr "Atvienot"
#: editor/connections_dialog.cpp
msgid "Connect a Signal to a Method"
@@ -930,9 +927,8 @@ msgid "Signals"
msgstr "SignÄli"
#: editor/connections_dialog.cpp
-#, fuzzy
msgid "Filter signals"
-msgstr "No SignÄla:"
+msgstr "FiltrÄ“t signÄlus"
#: editor/connections_dialog.cpp
msgid "Are you sure you want to remove all connections from this signal?"
@@ -941,16 +937,15 @@ msgstr ""
#: editor/connections_dialog.cpp
msgid "Disconnect All"
-msgstr "Atvienot Visu"
+msgstr "Atvienot visu"
#: editor/connections_dialog.cpp
msgid "Edit..."
msgstr "Rediģēt..."
#: editor/connections_dialog.cpp
-#, fuzzy
msgid "Go to Method"
-msgstr "Doties Uz Metodi"
+msgstr "Doties uz Metodi"
#: editor/create_dialog.cpp
msgid "Change %s Type"
@@ -966,11 +961,11 @@ msgstr "Izveidot Jaunu %s"
#: editor/create_dialog.cpp editor/plugins/asset_library_editor_plugin.cpp
msgid "No results for \"%s\"."
-msgstr ""
+msgstr "Nav rezultÄtu \"%s\"."
#: editor/create_dialog.cpp editor/property_selector.cpp
msgid "No description available for %s."
-msgstr ""
+msgstr "Apraksts nav pieejams priekš %s."
#: editor/create_dialog.cpp editor/editor_file_dialog.cpp
#: editor/filesystem_dock.cpp
@@ -1032,7 +1027,7 @@ msgstr "Atkarības"
#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
-msgstr "Resurs"
+msgstr "Resurss"
#: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp
#: editor/project_manager.cpp editor/project_settings_editor.cpp
@@ -1053,7 +1048,7 @@ msgstr "Atkarību Redaktors"
#: editor/dependency_editor.cpp
msgid "Search Replacement Resource:"
-msgstr "MeklÄ“t AizstÄjÄ“ja Resursu:"
+msgstr "MeklÄ“t aizstÄjÄ“ja resursu:"
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
@@ -1070,15 +1065,16 @@ msgid "Owners Of:"
msgstr "Īpašnieki:"
#: editor/dependency_editor.cpp
-#, fuzzy
msgid ""
"Remove the selected files from the project? (Cannot be undone.)\n"
"Depending on your filesystem configuration, the files will either be moved "
"to the system trash or deleted permanently."
-msgstr "Vai noņemt izvēlētos failus no projekta? (Netiks atjaunoti)"
+msgstr ""
+"Vai noņemt izvēlētos failus no projekta? (Netiks atjaunoti)\n"
+"AtšķirÄ«bÄ no failu sistÄ“mas konfigurÄcijas, faili tiks aizvÄkti uz sistÄ“mas "
+"atkritni vai dzÄ“sti pilnÄ«bÄ."
#: editor/dependency_editor.cpp
-#, fuzzy
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
@@ -1086,9 +1082,11 @@ msgid ""
"Depending on your filesystem configuration, the files will either be moved "
"to the system trash or deleted permanently."
msgstr ""
-"Faili, kurus Jūs vēlaties noņemt ir nepieciešami citiem resursiem lai tie "
+"Faili, kurus Jūs vēlaties noņemt ir nepieciešami citiem resursiem, lai tie "
"varÄ“tu strÄdÄt.\n"
-"Tik un tÄ noņemt tos? (Nevar atsaukt)"
+"Tik un tÄ noņemt tos? (Nevar atsaukt)\n"
+"AtšķirÄ«bÄ no jÅ«su failu sistÄ“mas konfigurÄcijas, faili tiks aizvÄkti uz "
+"sistÄ“mas atkritni vai dzÄ“sti pilnÄ«bÄ."
#: editor/dependency_editor.cpp
msgid "Cannot remove:"
@@ -1144,7 +1142,7 @@ msgstr "Pieder"
#: editor/dependency_editor.cpp
msgid "Resources Without Explicit Ownership:"
-msgstr "Resursi Bez Skaidra Īpašnieka:"
+msgstr "Resursi bez izteiktas piederības:"
#: editor/dictionary_property_edit.cpp
msgid "Change Dictionary Key"
@@ -1160,7 +1158,7 @@ msgstr "Paldies no Godot sabiedrības!"
#: editor/editor_about.cpp editor/editor_node.cpp editor/project_manager.cpp
msgid "Click to copy."
-msgstr ""
+msgstr "Klikšķini, lai kopētu."
#: editor/editor_about.cpp
msgid "Godot Engine contributors"
@@ -1198,14 +1196,12 @@ msgid "Gold Sponsors"
msgstr "Zelta Sponsori"
#: editor/editor_about.cpp
-#, fuzzy
msgid "Silver Sponsors"
-msgstr "Sudraba Donors"
+msgstr "Sudraba Sponsors"
#: editor/editor_about.cpp
-#, fuzzy
msgid "Bronze Sponsors"
-msgstr "Bronzas Donors"
+msgstr "Bronzas Sponsors"
#: editor/editor_about.cpp
msgid "Mini Sponsors"
@@ -1260,41 +1256,36 @@ msgid "Licenses"
msgstr "Licences"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Error opening asset file for \"%s\" (not in ZIP format)."
-msgstr "Kļūme atverot arhÄ«vu failu, nav ZIP formÄtÄ."
+msgstr "Kļūme atverot pakotnes failu \"%s\" (nav ZIP formÄtÄ)."
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "%s (already exists)"
-msgstr "%s (Jau Eksistē)"
+msgstr "%s (jau eksistē)"
#: editor/editor_asset_installer.cpp
msgid "Contents of asset \"%s\" - %d file(s) conflict with your project:"
-msgstr ""
+msgstr "Pakotnes \"%s\" saturs - %d fails(-i) konfliktē ar tavu projektu:"
#: editor/editor_asset_installer.cpp
msgid "Contents of asset \"%s\" - No files conflict with your project:"
-msgstr ""
+msgstr "Pakotnes \"%s\" saturs - Neviens fails nekonfliktē ar tavu projektu:"
#: editor/editor_asset_installer.cpp
msgid "Uncompressing Assets"
msgstr "Nekompresēti Līdzekļi"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "The following files failed extraction from asset \"%s\":"
-msgstr "Sekojošie faili netika izvilkti no paketes:"
+msgstr "Sekojošie faili netika izvilkti no paketes \"%s\":"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "(and %s more files)"
-msgstr "Un %s vēl faili."
+msgstr "(un vēl %s faili)"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Asset \"%s\" installed successfully!"
-msgstr "Pakete instalēta sekmīgi!"
+msgstr "Pakete \"%s\" instalēta sekmīgi!"
#: editor/editor_asset_installer.cpp
#: editor/plugins/asset_library_editor_plugin.cpp
@@ -1306,7 +1297,6 @@ msgid "Install"
msgstr "Ieinstalēt"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Asset Installer"
msgstr "Paketes InstalÄ“tÄjs"
@@ -1360,7 +1350,7 @@ msgstr "Velc un atlaid, lai pÄrkÄrtotu."
#: editor/editor_audio_buses.cpp
msgid "Solo"
-msgstr "Solo"
+msgstr "IndividuÄli"
#: editor/editor_audio_buses.cpp
msgid "Mute"
@@ -1371,18 +1361,17 @@ msgid "Bypass"
msgstr "Å unts"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Bus Options"
-msgstr "Kopnes iestatījumi"
+msgstr "Kopnes Iestatījumi"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
-msgstr "Izveidot DublikÄtu"
+msgstr "Izveidot dublikÄtu"
#: editor/editor_audio_buses.cpp
msgid "Reset Volume"
-msgstr ""
+msgstr "Atiestatīt Skaļumu"
#: editor/editor_audio_buses.cpp
msgid "Delete Effect"
@@ -1398,47 +1387,47 @@ msgstr "Pievienot Audio Kopni"
#: editor/editor_audio_buses.cpp
msgid "Master bus can't be deleted!"
-msgstr ""
+msgstr "Master kopni nevar idzēst!"
#: editor/editor_audio_buses.cpp
msgid "Delete Audio Bus"
-msgstr ""
+msgstr "Izdzēst Audio Kopni"
#: editor/editor_audio_buses.cpp
msgid "Duplicate Audio Bus"
-msgstr ""
+msgstr "Dubultot Audio Kopni"
#: editor/editor_audio_buses.cpp
msgid "Reset Bus Volume"
-msgstr ""
+msgstr "Atiestatīt Kopnes Skaļumu"
#: editor/editor_audio_buses.cpp
msgid "Move Audio Bus"
-msgstr ""
+msgstr "PÄrvietot Audio Kopni"
#: editor/editor_audio_buses.cpp
msgid "Save Audio Bus Layout As..."
-msgstr ""
+msgstr "SaglabÄt Audio Kopņu IzkÄrtojumu KÄ...."
#: editor/editor_audio_buses.cpp
msgid "Location for New Layout..."
-msgstr ""
+msgstr "JaunÄ izkÄrtojuma lokÄcija..."
#: editor/editor_audio_buses.cpp
msgid "Open Audio Bus Layout"
-msgstr ""
+msgstr "AtvÄ“rt audio kopnes izkÄrtojumu"
#: editor/editor_audio_buses.cpp
msgid "There is no '%s' file."
-msgstr ""
+msgstr "Fails '%s' neeksistē."
#: editor/editor_audio_buses.cpp editor/plugins/canvas_item_editor_plugin.cpp
msgid "Layout"
-msgstr ""
+msgstr "IzkÄrtojums"
#: editor/editor_audio_buses.cpp
msgid "Invalid file, not an audio bus layout."
-msgstr ""
+msgstr "Nepareizs fails, nav audio kopnes izkÄrtojuma."
#: editor/editor_audio_buses.cpp
msgid "Error saving file: %s"
@@ -1450,7 +1439,7 @@ msgstr "Pievienot Kopni"
#: editor/editor_audio_buses.cpp
msgid "Add a new Audio Bus to this layout."
-msgstr ""
+msgstr "Pievienot jaunu Audio Kopni Å¡im izkÄrtojumam."
#: editor/editor_audio_buses.cpp editor/editor_resource_picker.cpp
#: editor/plugins/animation_player_editor_plugin.cpp editor/property_editor.cpp
@@ -1480,7 +1469,7 @@ msgstr "IelÄdÄ“t Kopnes IzkÄrtojuma noklusÄ“jumu."
#: editor/editor_audio_buses.cpp
msgid "Create a new Bus Layout."
-msgstr ""
+msgstr "Izveidot jaunu Kopnes izkÄrtojumu."
#: editor/editor_autoload_settings.cpp
msgid "Invalid name."
@@ -1506,27 +1495,27 @@ msgstr ""
#: editor/editor_autoload_settings.cpp
msgid "Keyword cannot be used as an autoload name."
-msgstr ""
+msgstr "AtslÄ“gvÄrdu nedrÄ«kst lietot kÄ auto-ielÄdes vÄrdu."
#: editor/editor_autoload_settings.cpp
msgid "Autoload '%s' already exists!"
-msgstr ""
+msgstr "Auto-ielÄde '%s' jau eksistÄ“!"
#: editor/editor_autoload_settings.cpp
msgid "Rename Autoload"
-msgstr ""
+msgstr "PÄrsaukt Auto-ielÄdi"
#: editor/editor_autoload_settings.cpp
msgid "Toggle AutoLoad Globals"
-msgstr ""
+msgstr "PÄrslÄ“gt Auto-ielÄdes GlobÄlÄs vÄ“rtÄ«bas"
#: editor/editor_autoload_settings.cpp
msgid "Move Autoload"
-msgstr ""
+msgstr "PÄrvietot Auto-ielÄdi"
#: editor/editor_autoload_settings.cpp
msgid "Remove Autoload"
-msgstr ""
+msgstr "IzdzÄ“st Auto-ielÄdi"
#: editor/editor_autoload_settings.cpp editor/editor_plugin_settings.cpp
msgid "Enable"
@@ -1534,34 +1523,34 @@ msgstr "Iespējot"
#: editor/editor_autoload_settings.cpp
msgid "Rearrange Autoloads"
-msgstr ""
+msgstr "PÄrkÄrtot Auto-ielÄdes"
#: editor/editor_autoload_settings.cpp
msgid "Can't add autoload:"
-msgstr ""
+msgstr "Nevar pievienot Auto-ielÄdi:"
#: editor/editor_autoload_settings.cpp
msgid "%s is an invalid path. File does not exist."
-msgstr ""
+msgstr "%s ir nederīgs ceļš. Fails neeksistē."
#: editor/editor_autoload_settings.cpp
msgid "%s is an invalid path. Not in resource path (res://)."
-msgstr ""
+msgstr "%s ir nederÄ«gs ceļš. Nav resursu ceÄ¼Ä (res://)."
#: editor/editor_autoload_settings.cpp
msgid "Add AutoLoad"
-msgstr ""
+msgstr "Pievienot Auto-ielÄdi"
#: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp
#: editor/editor_plugin_settings.cpp
#: editor/plugins/animation_tree_editor_plugin.cpp
#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp
msgid "Path:"
-msgstr ""
+msgstr "Ceļš:"
#: editor/editor_autoload_settings.cpp
msgid "Node Name:"
-msgstr ""
+msgstr "Mezgla VÄrds:"
#: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp
#: editor/editor_plugin_settings.cpp editor/editor_profiler.cpp
@@ -1571,11 +1560,11 @@ msgstr "Nosaukums"
#: editor/editor_autoload_settings.cpp
msgid "Global Variable"
-msgstr ""
+msgstr "GlobÄls mainÄ«gais"
#: editor/editor_data.cpp
msgid "Paste Params"
-msgstr ""
+msgstr "Ielīmēt Parametrus"
#: editor/editor_data.cpp
msgid "Updating Scene"
@@ -1583,11 +1572,11 @@ msgstr "Atjaunina Ainu"
#: editor/editor_data.cpp
msgid "Storing local changes..."
-msgstr ""
+msgstr "SaglabÄ lokÄlÄs izmaiņas..."
#: editor/editor_data.cpp
msgid "Updating scene..."
-msgstr ""
+msgstr "Atjauno ainu...."
#: editor/editor_data.cpp editor/editor_resource_picker.cpp
msgid "[empty]"
@@ -1599,57 +1588,61 @@ msgstr "[nesaglabÄts]"
#: editor/editor_dir_dialog.cpp
msgid "Please select a base directory first."
-msgstr ""
+msgstr "LÅ«dzu vispirms izvÄ“laties bÄzes mapi."
#: editor/editor_dir_dialog.cpp
msgid "Choose a Directory"
-msgstr ""
+msgstr "Izvēlēties Direktoriju"
#: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp
#: editor/filesystem_dock.cpp editor/project_manager.cpp
#: scene/gui/file_dialog.cpp
msgid "Create Folder"
-msgstr ""
+msgstr "Izveidot mapi"
#: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp
#: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp
#: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp
#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp
msgid "Name:"
-msgstr ""
+msgstr "Nosaukums:"
#: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp
#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp
msgid "Could not create folder."
-msgstr ""
+msgstr "NeizdevÄs izveidot mapi."
#: editor/editor_dir_dialog.cpp
msgid "Choose"
-msgstr ""
+msgstr "Izvēlaties"
#: editor/editor_export.cpp
msgid "Storing File:"
-msgstr ""
+msgstr "Faila saglabÄÅ¡ana:"
#: editor/editor_export.cpp
msgid "No export template found at the expected path:"
-msgstr ""
+msgstr "NorÄdÄ«tajÄ ceÄ¼Ä nav atrasta eksporta veidne:"
#: editor/editor_export.cpp
msgid "Packing"
-msgstr ""
+msgstr "Pako"
#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
msgstr ""
+"Mērķa platforma pieprasa 'ETC' tekstūru saspiešanu priekš GLES2. Iespējo "
+"'Importēt Etc' projekta iestatījumos."
#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC2' texture compression for GLES3. Enable "
"'Import Etc 2' in Project Settings."
msgstr ""
+"Mērķa platforma pieprasa 'ETC2' tekstūru saspiešanu priekš GLES3. Iespējo "
+"'Importēt Etc 2' projekta iestatījumos."
#: editor/editor_export.cpp
msgid ""
@@ -1658,18 +1651,26 @@ msgid ""
"Enable 'Import Etc' in Project Settings, or disable 'Driver Fallback "
"Enabled'."
msgstr ""
+"MÄ“rÄ·a platforma pieprasa 'ETC' tekstÅ«ru saspieÅ¡anu priekÅ¡ draivera atkÄpes "
+"uz GLES2.\n"
+"IespÄ“jo 'ImportÄ“t Etc' projekta iestatÄ«jumos vai atslÄ“dz 'Draivera atkÄpe "
+"ieslēgta'."
#: editor/editor_export.cpp
msgid ""
"Target platform requires 'PVRTC' texture compression for GLES2. Enable "
"'Import Pvrtc' in Project Settings."
msgstr ""
+"Mērķa platforma pieprasa 'PVRTV' tekstūru saspiešanu priekš GLES2. Iespējo "
+"'Importēt Pvrtc' projekta iestatījumos."
#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC2' or 'PVRTC' texture compression for GLES3. "
"Enable 'Import Etc 2' or 'Import Pvrtc' in Project Settings."
msgstr ""
+"Mērķa platforma pieprasa 'ETC2' vai 'PVRTC' tekstūru saspiešanu priekš "
+"GLES3. Iespējo 'Importēt Etc 2' vai 'Importēt Pvrtc' projekta iestatījumos."
#: editor/editor_export.cpp
msgid ""
@@ -1678,26 +1679,30 @@ msgid ""
"Enable 'Import Pvrtc' in Project Settings, or disable 'Driver Fallback "
"Enabled'."
msgstr ""
+"MÄ“rÄ·a platforma pieprasa 'PVRTC' tekstÅ«ru saspieÅ¡anu priekÅ¡ draivera atkÄpes "
+"uz GLES2.\n"
+"IespÄ“jo 'ImportÄ“t Pvrtc' projekta iestatÄ«jumos vai atslÄ“dz 'Draivera atkÄpe "
+"ieslēgta'."
#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
-msgstr ""
+msgstr "PielÄgots atkļūdoÅ¡anas Å¡ablons nav atrasts."
#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
-msgstr ""
+msgstr "PielÄgots relÄ«zes sablons nav atrasts."
#: editor/editor_export.cpp platform/javascript/export/export.cpp
msgid "Template file not found:"
-msgstr ""
+msgstr "Å ablona fails nav atrasts:"
#: editor/editor_export.cpp
msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB."
-msgstr ""
+msgstr "Pie 32-bitu eksportēšanas, iepakotais PCK nevar bÅ«t lielÄks par 4GB."
#: editor/editor_feature_profile.cpp
msgid "3D Editor"
@@ -1705,87 +1710,90 @@ msgstr "3D Redaktors"
#: editor/editor_feature_profile.cpp
msgid "Script Editor"
-msgstr ""
+msgstr "Skripta redaktors"
#: editor/editor_feature_profile.cpp
msgid "Asset Library"
-msgstr ""
+msgstr "Līdzekļu bibliotēka"
#: editor/editor_feature_profile.cpp
msgid "Scene Tree Editing"
-msgstr ""
+msgstr "Ainas koka rediģēšana"
#: editor/editor_feature_profile.cpp
msgid "Node Dock"
-msgstr ""
+msgstr "Mezgla doks"
#: editor/editor_feature_profile.cpp
msgid "FileSystem Dock"
-msgstr ""
+msgstr "Failu sistēmas doks"
#: editor/editor_feature_profile.cpp
msgid "Import Dock"
-msgstr ""
+msgstr "Importēt doku"
#: editor/editor_feature_profile.cpp
msgid "Allows to view and edit 3D scenes."
-msgstr ""
+msgstr "Atļauj skatīt un rediģēt visas 3D ainas."
#: editor/editor_feature_profile.cpp
msgid "Allows to edit scripts using the integrated script editor."
-msgstr ""
+msgstr "Atļauj rediģēt skriptus izmantojot iebūvēto skriptu redaktoru."
#: editor/editor_feature_profile.cpp
msgid "Provides built-in access to the Asset Library."
-msgstr ""
+msgstr "Nodrošina iebūvēto piekļuvi līdzekļu bibliotēkai."
#: editor/editor_feature_profile.cpp
msgid "Allows editing the node hierarchy in the Scene dock."
-msgstr ""
+msgstr "Atļauj mezgla hierarhijas rediģēšanu ainu dokÄ."
#: editor/editor_feature_profile.cpp
msgid ""
"Allows to work with signals and groups of the node selected in the Scene "
"dock."
-msgstr ""
+msgstr "Atļauj strÄdÄt ar signÄliem un grupÄm izvÄ“lÄ“tÄ mezgla ainu dokÄ."
#: editor/editor_feature_profile.cpp
msgid "Allows to browse the local file system via a dedicated dock."
-msgstr ""
+msgstr "Atļauj pÄrlÅ«kot lokÄlo failu sistÄ“mu atvÄ“lÄ“tajÄ dokÄ."
#: editor/editor_feature_profile.cpp
msgid ""
"Allows to configure import settings for individual assets. Requires the "
"FileSystem dock to function."
msgstr ""
+"Atļauj konfigurÄ“t importēšanas iestatÄ«jumus individuÄliem lÄ«dzekļiem. "
+"Pieprasa failu sistēmas doku, lai funkcionētu."
#: editor/editor_feature_profile.cpp
msgid "(current)"
-msgstr ""
+msgstr "(current) / pašreizējs"
#: editor/editor_feature_profile.cpp
msgid "(none)"
-msgstr ""
+msgstr "(neviens)"
#: editor/editor_feature_profile.cpp
msgid "Remove currently selected profile, '%s'? Cannot be undone."
-msgstr ""
+msgstr "Noņemt pašreiz izvēlēto profilu '%s' ? Nevar atsaukt."
#: editor/editor_feature_profile.cpp
msgid "Profile must be a valid filename and must not contain '.'"
msgstr ""
+"Profila nosaukumam jÄbÅ«t derÄ«gam faila nosaukumam un tas nedrÄ«kst iekļaut '.'"
#: editor/editor_feature_profile.cpp
msgid "Profile with this name already exists."
-msgstr ""
+msgstr "Profils ar Å¡Ädu nosaukumu jau eksistÄ“."
#: editor/editor_feature_profile.cpp
msgid "(Editor Disabled, Properties Disabled)"
-msgstr ""
+msgstr "(Redaktors atslēgts, iestatījumi atslēgti)"
#: editor/editor_feature_profile.cpp
msgid "(Properties Disabled)"
-msgstr ""
+msgstr "(Iestatījumi atslēgti)"
#: editor/editor_feature_profile.cpp
msgid "(Editor Disabled)"
@@ -1797,53 +1805,51 @@ msgstr "Klases Iespējas:"
#: editor/editor_feature_profile.cpp
msgid "Enable Contextual Editor"
-msgstr ""
+msgstr "IespÄ“jot kontekstuÄlo redaktoru"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Class Properties:"
-msgstr "Ieslēgtie Mainīgie:"
+msgstr "Klases iestatījumi:"
#: editor/editor_feature_profile.cpp
msgid "Main Features:"
-msgstr ""
+msgstr "GalvenÄs iespÄ“jas:"
#: editor/editor_feature_profile.cpp
msgid "Nodes and Classes:"
-msgstr ""
+msgstr "Mezgli un klases:"
#: editor/editor_feature_profile.cpp
msgid "File '%s' format is invalid, import aborted."
-msgstr ""
+msgstr "Faila '%s' formÄts ir nepareizs, importēšana atcelta."
#: editor/editor_feature_profile.cpp
msgid ""
"Profile '%s' already exists. Remove it first before importing, import "
"aborted."
msgstr ""
+"Profils '%s' jau eksistē. Vispirms to noņem pirms importēšanas. Importēšana "
+"atcelta."
#: editor/editor_feature_profile.cpp
msgid "Error saving profile to path: '%s'."
msgstr "Kļūda saglabÄjot profilu uz ceļu: '%s'."
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Reset to Default"
-msgstr "IelÄdÄ“t NoklusÄ“jumu"
+msgstr "Atiestatīt uz noklusējumu"
#: editor/editor_feature_profile.cpp
msgid "Current Profile:"
-msgstr ""
+msgstr "Pašreizējais profils:"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Create Profile"
-msgstr "Izveidot"
+msgstr "Izveidot profilu"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Remove Profile"
-msgstr "Noņemt"
+msgstr "Noņemt profilu"
#: editor/editor_feature_profile.cpp
msgid "Available Profiles:"
@@ -1856,52 +1862,52 @@ msgstr "Aktualizēt"
#: editor/editor_feature_profile.cpp editor/editor_node.cpp
#: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp
msgid "Import"
-msgstr ""
+msgstr "Importēt"
#: editor/editor_feature_profile.cpp editor/project_export.cpp
msgid "Export"
-msgstr ""
+msgstr "Eksportēt"
#: editor/editor_feature_profile.cpp
msgid "Configure Selected Profile:"
-msgstr ""
+msgstr "Konfigurēt izvēlēto profilu:"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Extra Options:"
-msgstr "Klases Iespējas:"
+msgstr "Papildus iespējas:"
#: editor/editor_feature_profile.cpp
msgid "Create or import a profile to edit available classes and properties."
msgstr ""
+"Izveidot vai importÄ“t profilu, lai rediģētu pieejamÄs klases un iestatÄ«jumus."
#: editor/editor_feature_profile.cpp
msgid "New profile name:"
-msgstr ""
+msgstr "Jaunais profila nosaukums:"
#: editor/editor_feature_profile.cpp
msgid "Godot Feature Profile"
-msgstr ""
+msgstr "Godot iespēju profils"
#: editor/editor_feature_profile.cpp
msgid "Import Profile(s)"
-msgstr ""
+msgstr "Importēt profilu(s)"
#: editor/editor_feature_profile.cpp
msgid "Export Profile"
-msgstr ""
+msgstr "Eksportēt profilu"
#: editor/editor_feature_profile.cpp
msgid "Manage Editor Feature Profiles"
-msgstr ""
+msgstr "PÄrvaldÄ«t redaktora iespÄ“ju profilus"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Select Current Folder"
-msgstr ""
+msgstr "Izvēlēties pašreizējo mapi"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "File exists, overwrite?"
-msgstr ""
+msgstr "Fails eksistÄ“. PÄrrakstÄ«t ?"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Select This Folder"
@@ -1909,7 +1915,7 @@ msgstr "Izvēlēties Šo Mapi"
#: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp
msgid "Copy Path"
-msgstr ""
+msgstr "Kopēt celiņu"
#: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp
msgid "Open in File Manager"
@@ -1918,40 +1924,40 @@ msgstr "AtvÄ“rt Failu PÄrlÅ«kÄ"
#: editor/editor_file_dialog.cpp editor/editor_node.cpp
#: editor/filesystem_dock.cpp editor/project_manager.cpp
msgid "Show in File Manager"
-msgstr ""
+msgstr "ParÄdÄ«t failu menedžerÄ«"
#: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp
msgid "New Folder..."
-msgstr ""
+msgstr "Jauna mape..."
#: editor/editor_file_dialog.cpp editor/find_in_files.cpp
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Refresh"
-msgstr ""
+msgstr "AtsvaidzinÄt"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "All Recognized"
-msgstr ""
+msgstr "Viss atpazīts"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "All Files (*)"
-msgstr ""
+msgstr "Visi faili (*)"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Open a File"
-msgstr ""
+msgstr "Atvērt failu"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Open File(s)"
-msgstr ""
+msgstr "Atvērt failu(s)"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Open a Directory"
-msgstr ""
+msgstr "Atvērt mapi"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Open a File or Directory"
-msgstr ""
+msgstr "Atvērt failu vai mapi"
#: editor/editor_file_dialog.cpp editor/editor_node.cpp
#: editor/editor_resource_picker.cpp editor/import_defaults_editor.cpp
@@ -1959,47 +1965,47 @@ msgstr ""
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/theme_editor_plugin.cpp scene/gui/file_dialog.cpp
msgid "Save"
-msgstr ""
+msgstr "SaglabÄt"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Save a File"
-msgstr ""
+msgstr "SaglabÄt failu"
#: editor/editor_file_dialog.cpp
msgid "Go Back"
-msgstr ""
+msgstr "Doties atpakaļ"
#: editor/editor_file_dialog.cpp
msgid "Go Forward"
-msgstr ""
+msgstr "Doties tÄlÄk"
#: editor/editor_file_dialog.cpp
msgid "Go Up"
-msgstr ""
+msgstr "Doties augšup"
#: editor/editor_file_dialog.cpp
msgid "Toggle Hidden Files"
-msgstr ""
+msgstr "PÄrslÄ“gt slÄ“ptos failus"
#: editor/editor_file_dialog.cpp
msgid "Toggle Favorite"
-msgstr ""
+msgstr "PÄrslÄ“gt favorÄ«tu"
#: editor/editor_file_dialog.cpp
msgid "Toggle Mode"
-msgstr ""
+msgstr "PÄrslÄ“gt režīmu"
#: editor/editor_file_dialog.cpp
msgid "Focus Path"
-msgstr ""
+msgstr "Fokusa ceļš"
#: editor/editor_file_dialog.cpp
msgid "Move Favorite Up"
-msgstr ""
+msgstr "PÄrvietot favorÄ«tu augÅ¡up"
#: editor/editor_file_dialog.cpp
msgid "Move Favorite Down"
-msgstr ""
+msgstr "PÄrvietot favorÄ«tu lejup"
#: editor/editor_file_dialog.cpp
msgid "Go to previous folder."
@@ -2011,7 +2017,7 @@ msgstr "Doties uz nÄkamo mapi."
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Go to parent folder."
-msgstr ""
+msgstr "AtvÄ“rt mÄtes mapi."
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Refresh files."
@@ -2019,63 +2025,65 @@ msgstr "Atjaunot failus."
#: editor/editor_file_dialog.cpp
msgid "(Un)favorite current folder."
-msgstr ""
+msgstr "Pievienot/noņemt pašreizējo mapi pie/no favorītiem."
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Toggle the visibility of hidden files."
-msgstr ""
+msgstr "PÄrslÄ“gt slÄ“pto failu redzamÄ«bu."
#: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp
msgid "View items as a grid of thumbnails."
-msgstr ""
+msgstr "SkatÄ«t vienumus kÄ režģi ar sÄ«ktÄ“liem."
#: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp
msgid "View items as a list."
-msgstr ""
+msgstr "SkatÄ«t lietas kÄ sarakstu."
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Directories & Files:"
-msgstr ""
+msgstr "Mapes & Faili:"
#: editor/editor_file_dialog.cpp editor/plugins/sprite_editor_plugin.cpp
#: editor/plugins/style_box_editor_plugin.cpp editor/rename_dialog.cpp
msgid "Preview:"
-msgstr ""
+msgstr "Priekškatījums:"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "File:"
-msgstr ""
+msgstr "Fails:"
#: editor/editor_file_system.cpp
msgid "ScanSources"
-msgstr ""
+msgstr "ScanSources / Skenēšanas Avoti"
#: editor/editor_file_system.cpp
msgid ""
"There are multiple importers for different types pointing to file %s, import "
"aborted"
msgstr ""
+"Ir vairÄki importÄ“tÄji dažÄdiem tipiem, kas norÄda uz failu %s, importēšana "
+"atcelta"
#: editor/editor_file_system.cpp
msgid "(Re)Importing Assets"
-msgstr ""
+msgstr "(Re)Importē līdzekļus"
#: editor/editor_help.cpp
msgid "Top"
-msgstr ""
+msgstr "Virsotne"
#: editor/editor_help.cpp
msgid "Class:"
-msgstr ""
+msgstr "Klase:"
#: editor/editor_help.cpp editor/scene_tree_editor.cpp
#: editor/script_create_dialog.cpp
msgid "Inherits:"
-msgstr ""
+msgstr "Manto:"
#: editor/editor_help.cpp
msgid "Inherited by:"
-msgstr ""
+msgstr "Manto uz:"
#: editor/editor_help.cpp
msgid "Description"
@@ -2083,15 +2091,15 @@ msgstr "Apraksts"
#: editor/editor_help.cpp
msgid "Online Tutorials"
-msgstr ""
+msgstr "Online PamÄcÄ«bas"
#: editor/editor_help.cpp
msgid "Properties"
-msgstr ""
+msgstr "Iestatījumi"
#: editor/editor_help.cpp
msgid "override:"
-msgstr ""
+msgstr "pÄrrakstīšana:"
#: editor/editor_help.cpp
msgid "default:"
@@ -2099,15 +2107,15 @@ msgstr "pēc noklusējuma:"
#: editor/editor_help.cpp
msgid "Methods"
-msgstr ""
+msgstr "Metodes"
#: editor/editor_help.cpp
msgid "Theme Properties"
-msgstr ""
+msgstr "Motīva iestatījumi"
#: editor/editor_help.cpp
msgid "Enumerations"
-msgstr ""
+msgstr "Uzskaites"
#: editor/editor_help.cpp editor/plugins/theme_editor_plugin.cpp
msgid "Constants"
@@ -2115,17 +2123,19 @@ msgstr "Konstantes"
#: editor/editor_help.cpp
msgid "Property Descriptions"
-msgstr "Mainīgo Apraksts"
+msgstr "Iestatījumu apraksti"
#: editor/editor_help.cpp
msgid "(value)"
-msgstr ""
+msgstr "(vērtība)"
#: editor/editor_help.cpp
msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
+"Pašreiz šim mainīgajam nav apraksta. Lūdzu, palīdzi mums [color=$color][url="
+"$url]izveidot to[/url][/color]!"
#: editor/editor_help.cpp
msgid "Method Descriptions"
@@ -2136,31 +2146,33 @@ msgid ""
"There is currently no description for this method. Please help us by [color="
"$color][url=$url]contributing one[/url][/color]!"
msgstr ""
+"Pašreiz šai metodei nav apraksta. Lūdzu, palīdzi mums [color=$color][url="
+"$url]pievienojot vienu[/url][/color]!"
#: editor/editor_help_search.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp
msgid "Search Help"
-msgstr ""
+msgstr "Meklēt Palīdzību"
#: editor/editor_help_search.cpp
msgid "Case Sensitive"
-msgstr ""
+msgstr "Reģistrjūtīgs"
#: editor/editor_help_search.cpp
msgid "Show Hierarchy"
-msgstr ""
+msgstr "RÄdÄ«t Hierarhiju"
#: editor/editor_help_search.cpp
msgid "Display All"
-msgstr ""
+msgstr "ParÄdÄ«t Visu"
#: editor/editor_help_search.cpp
msgid "Classes Only"
-msgstr ""
+msgstr "Tikai Klases"
#: editor/editor_help_search.cpp
msgid "Methods Only"
-msgstr ""
+msgstr "Tikai Metodes"
#: editor/editor_help_search.cpp
msgid "Signals Only"
@@ -2168,27 +2180,27 @@ msgstr "Tikai SignÄli"
#: editor/editor_help_search.cpp
msgid "Constants Only"
-msgstr ""
+msgstr "Tikai Konstantes"
#: editor/editor_help_search.cpp
msgid "Properties Only"
-msgstr ""
+msgstr "Tikai Iestatījumus"
#: editor/editor_help_search.cpp
msgid "Theme Properties Only"
-msgstr ""
+msgstr "Tikai Motīva Iestatījumus"
#: editor/editor_help_search.cpp
msgid "Member Type"
-msgstr ""
+msgstr "Dalībnieka veids"
#: editor/editor_help_search.cpp
msgid "Class"
-msgstr ""
+msgstr "Klase"
#: editor/editor_help_search.cpp
msgid "Method"
-msgstr ""
+msgstr "Metode"
#: editor/editor_help_search.cpp editor/plugins/script_text_editor.cpp
msgid "Signal"
@@ -2196,32 +2208,32 @@ msgstr "SignÄls"
#: editor/editor_help_search.cpp
msgid "Constant"
-msgstr ""
+msgstr "Konstante"
#: editor/editor_help_search.cpp
msgid "Property"
-msgstr ""
+msgstr "Mainīgais"
#: editor/editor_help_search.cpp
msgid "Theme Property"
-msgstr ""
+msgstr "Motīva Mainīgais"
#: editor/editor_inspector.cpp editor/project_settings_editor.cpp
msgid "Property:"
-msgstr ""
+msgstr "Parametrs:"
#: editor/editor_inspector.cpp editor/scene_tree_dock.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Set %s"
-msgstr ""
+msgstr "Likt %s"
#: editor/editor_inspector.cpp
msgid "Set Multiple:"
-msgstr ""
+msgstr "Uzlikt vairÄkus:"
#: editor/editor_log.cpp
msgid "Output:"
-msgstr ""
+msgstr "Izeja:"
#: editor/editor_log.cpp editor/plugins/tile_map_editor_plugin.cpp
msgid "Copy Selection"
@@ -2235,57 +2247,57 @@ msgstr "Kopēt Izvēlēto"
#: modules/gdnative/gdnative_library_editor_plugin.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Clear"
-msgstr ""
+msgstr "Notītīt"
#: editor/editor_log.cpp
msgid "Clear Output"
-msgstr ""
+msgstr "Notīrīt Izeju"
#: editor/editor_network_profiler.cpp editor/editor_node.cpp
#: editor/editor_profiler.cpp
msgid "Stop"
-msgstr ""
+msgstr "PÄrtraukt"
#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp
#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp
msgid "Start"
-msgstr ""
+msgstr "SÄkt"
#: editor/editor_network_profiler.cpp
msgid "%s/s"
-msgstr ""
+msgstr "%s/s"
#: editor/editor_network_profiler.cpp
msgid "Down"
-msgstr ""
+msgstr "Lejup"
#: editor/editor_network_profiler.cpp
msgid "Up"
-msgstr ""
+msgstr "Augšup"
#: editor/editor_network_profiler.cpp editor/editor_node.cpp
msgid "Node"
-msgstr ""
+msgstr "Mezgls"
#: editor/editor_network_profiler.cpp
msgid "Incoming RPC"
-msgstr ""
+msgstr "IenÄkoÅ¡s RPC"
#: editor/editor_network_profiler.cpp
msgid "Incoming RSET"
-msgstr ""
+msgstr "IenÄkoÅ¡s RSET"
#: editor/editor_network_profiler.cpp
msgid "Outgoing RPC"
-msgstr ""
+msgstr "Izejošs RPC"
#: editor/editor_network_profiler.cpp
msgid "Outgoing RSET"
-msgstr ""
+msgstr "Izejošs RSET"
#: editor/editor_node.cpp editor/project_manager.cpp
msgid "New Window"
-msgstr ""
+msgstr "Jauns logs"
#: editor/editor_node.cpp
msgid ""
@@ -2293,98 +2305,107 @@ msgid ""
"Update Continuously is enabled, which can increase power usage. Click to "
"disable it."
msgstr ""
+"Griežas, kad redaktora logs atjauninas.\n"
+"AtjauninÄt konstanti ir iespÄ“jots, kas var palielinÄt jaudas izmantoÅ¡anu. "
+"Klikšķini, lai atslēgtu."
#: editor/editor_node.cpp
msgid "Spins when the editor window redraws."
-msgstr ""
+msgstr "Griežas, kad redaktora logs atjauninas."
#: editor/editor_node.cpp
msgid "Imported resources can't be saved."
-msgstr ""
+msgstr "ImportÄ“tie resursi nevar tikt saglabÄti."
#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
#: editor/plugins/theme_editor_plugin.cpp
#: modules/gltf/editor_scene_exporter_gltf_plugin.cpp scene/gui/dialogs.cpp
msgid "OK"
-msgstr ""
+msgstr "Labi"
#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Error saving resource!"
-msgstr ""
+msgstr "Kļūda saglabÄjot resursu!"
#: editor/editor_node.cpp
msgid ""
"This resource can't be saved because it does not belong to the edited scene. "
"Make it unique first."
msgstr ""
+"Å o resursu nevar saglabÄt, jo tas nepieder rediģētajai ainai. Vispirms "
+"uztaisi to unikÄlu."
#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Save Resource As..."
-msgstr ""
+msgstr "SaglabÄt Resursu KÄ..."
#: editor/editor_node.cpp
msgid "Can't open file for writing:"
-msgstr ""
+msgstr "Nevar atvērt failu rakstīšanai:"
#: editor/editor_node.cpp
msgid "Requested file format unknown:"
-msgstr ""
+msgstr "PieprasÄ«tais faila formÄts ir nezinÄms:"
#: editor/editor_node.cpp
msgid "Error while saving."
-msgstr ""
+msgstr "Kļūda saglabÄjot."
#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
msgid "Can't open '%s'. The file could have been moved or deleted."
-msgstr ""
+msgstr "Nevar atvÄ“rt '%s'. Fails ir pÄrvietots vai dzÄ“sts."
#: editor/editor_node.cpp
msgid "Error while parsing '%s'."
-msgstr ""
+msgstr "Kļūda pÄrsienot '%s'."
#: editor/editor_node.cpp
msgid "Unexpected end of file '%s'."
-msgstr ""
+msgstr "Negaidītas faila beigas '%s'."
#: editor/editor_node.cpp
msgid "Missing '%s' or its dependencies."
-msgstr ""
+msgstr "IztrÅ«kst '%s' vai tÄ atkarÄ«bas."
#: editor/editor_node.cpp
msgid "Error while loading '%s'."
-msgstr ""
+msgstr "Kļūda ielÄdÄ“jot '%s'."
#: editor/editor_node.cpp
msgid "Saving Scene"
-msgstr ""
+msgstr "SaglabÄ Ainu"
#: editor/editor_node.cpp
msgid "Analyzing"
-msgstr ""
+msgstr "Analizē"
#: editor/editor_node.cpp
msgid "Creating Thumbnail"
-msgstr ""
+msgstr "Izveido sīktēlu"
#: editor/editor_node.cpp
msgid "This operation can't be done without a tree root."
-msgstr ""
+msgstr "Nevar veikt šo darbību bez koka cilmes."
#: editor/editor_node.cpp
msgid ""
"This scene can't be saved because there is a cyclic instancing inclusion.\n"
"Please resolve it and then attempt to save again."
msgstr ""
+"Å o ainu nevar saglabÄt, jo ir konstatÄ“ta cikliska instancēšanas cilpa.\n"
+"LÅ«dzu, atrisini to un tad mÄ“gini saglabÄt ainu vÄ“lreiz."
#: editor/editor_node.cpp
msgid ""
"Couldn't save scene. Likely dependencies (instances or inheritance) couldn't "
"be satisfied."
msgstr ""
+"Nevar saglabÄt ainu. DroÅ¡ivien atkarÄ«bas (instances vai mantojumi) ir "
+"kļūdainas."
#: editor/editor_node.cpp
msgid "Could not save one or more scenes!"
-msgstr ""
+msgstr "Nevar saglabÄt vienu vai vairÄkas ainas!"
#: editor/editor_node.cpp
msgid "Save All Scenes"
@@ -2392,29 +2413,31 @@ msgstr "SaglabÄt Visas Ainas"
#: editor/editor_node.cpp editor/scene_tree_dock.cpp
msgid "Can't overwrite scene that is still open!"
-msgstr ""
+msgstr "Nevar pÄrrakstÄ«t ainu, kas joprojÄm ir atvÄ“rta!"
#: editor/editor_node.cpp
msgid "Can't load MeshLibrary for merging!"
-msgstr ""
+msgstr "NevarÄ“ja ielÄdÄ“t tÄ«klu bibliotÄ“ku sapludinÄÅ¡anai!"
#: editor/editor_node.cpp
msgid "Error saving MeshLibrary!"
-msgstr ""
+msgstr "Kļūda saglabÄjot tÄ«kla bibliotÄ“ku!"
#: editor/editor_node.cpp
msgid "Can't load TileSet for merging!"
-msgstr ""
+msgstr "Nevar ielÄdÄ“t flīžu karti sapludinÄÅ¡anai!"
#: editor/editor_node.cpp
msgid "Error saving TileSet!"
-msgstr ""
+msgstr "Kļūda saglabÄjot flīžu komplektu!"
#: editor/editor_node.cpp
msgid ""
"An error occurred while trying to save the editor layout.\n"
"Make sure the editor's user data path is writable."
msgstr ""
+"Notika gļūda saglabÄjot redaktora izkÄrtojumu.\n"
+"PÄrliecinies, ka redaktora lietotÄja datu mape ir rakstÄma."
#: editor/editor_node.cpp
msgid ""
@@ -2422,14 +2445,17 @@ msgid ""
"To restore the Default layout to its base settings, use the Delete Layout "
"option and delete the Default layout."
msgstr ""
+"NoklusÄ“juma redaktora izkÄrtojums pÄrrakstÄ«ts.\n"
+"Lai atjaunotu noklusÄ“juma izkÄrtojumu uz bÄzes iestatÄ«jumiem, izmantojiet "
+"DzÄ“st izkÄrtojumu opciju."
#: editor/editor_node.cpp
msgid "Layout name not found!"
-msgstr ""
+msgstr "IzkÄrtojuma nosaukums nav atrasts!"
#: editor/editor_node.cpp
msgid "Restored the Default layout to its base settings."
-msgstr ""
+msgstr "NoklusÄ“juma izkÄrtojums atjaunots uz bÄzes iestatÄ«jumiem."
#: editor/editor_node.cpp
msgid ""
@@ -2457,6 +2483,10 @@ msgid ""
"Please read the documentation relevant to importing scenes to better "
"understand this workflow."
msgstr ""
+"Å Ä« aina ir importÄ“ta, tÄdēļ izmaiņas netiks saglabÄas.\n"
+"Veidojiet no tÄs paraugu, lai ļautu saglabÄt izmaiņas.\n"
+"LÅ«dzu, lasiet dokumentÄciju par ainu importēšanu un labÄkai darbaplÅ«smas "
+"saprašanai."
#: editor/editor_node.cpp
msgid ""
@@ -2467,23 +2497,23 @@ msgstr ""
#: editor/editor_node.cpp
msgid "There is no defined scene to run."
-msgstr ""
+msgstr "Nav definēta aina, kuru palaist."
#: editor/editor_node.cpp
msgid "Save scene before running..."
-msgstr ""
+msgstr "SaglabÄ ainu pirms palaiÅ¡anas..."
#: editor/editor_node.cpp
msgid "Could not start subprocess!"
-msgstr ""
+msgstr "Nevar palaist sub-procesu!"
#: editor/editor_node.cpp editor/filesystem_dock.cpp
msgid "Open Scene"
-msgstr ""
+msgstr "Atvērt ainu"
#: editor/editor_node.cpp
msgid "Open Base Scene"
-msgstr ""
+msgstr "AtvÄ“rt bÄzes ainu"
#: editor/editor_node.cpp
msgid "Quick Open..."
@@ -2491,29 +2521,31 @@ msgstr "Ātri Atvērt..."
#: editor/editor_node.cpp
msgid "Quick Open Scene..."
-msgstr ""
+msgstr "Ātri atvērt ainu..."
#: editor/editor_node.cpp
msgid "Quick Open Script..."
-msgstr ""
+msgstr "Ätri atvÄ“rt skriptu..."
#: editor/editor_node.cpp
msgid "Save & Close"
-msgstr ""
+msgstr "SaglabÄt & aizvÄ“rt"
#: editor/editor_node.cpp
msgid "Save changes to '%s' before closing?"
-msgstr ""
+msgstr "SaglabÄt izmaiņas '%s' pirms aizvÄ“rÅ¡anas ?"
#: editor/editor_node.cpp
msgid "%s no longer exists! Please specify a new save location."
-msgstr ""
+msgstr "%s vairs neeksistÄ“! LÅ«dzu norÄdi jaunu saglabÄÅ¡anas lokÄciju."
#: editor/editor_node.cpp
msgid ""
"The current scene has no root node, but %d modified external resource(s) "
"were saved anyway."
msgstr ""
+"PaÅ¡reizÄ“jai ainav nav saknes mezgla, bet %d pÄrveidoti ÄrÄ“jie resursi tika "
+"saglbÄti tÄpat."
#: editor/editor_node.cpp
msgid ""
@@ -2523,43 +2555,43 @@ msgstr ""
#: editor/editor_node.cpp
msgid "Save Scene As..."
-msgstr ""
+msgstr "SaglabÄt ainu kÄ..."
#: editor/editor_node.cpp modules/gltf/editor_scene_exporter_gltf_plugin.cpp
msgid "This operation can't be done without a scene."
-msgstr ""
+msgstr "Å o operÄciju nevar veikt bez ainas."
#: editor/editor_node.cpp
msgid "Export Mesh Library"
-msgstr ""
+msgstr "Ekportēt tīkla bibliotēku"
#: editor/editor_node.cpp
msgid "This operation can't be done without a root node."
-msgstr ""
+msgstr "Šī darbība nevar tikt veikta bez cilmes mezgla."
#: editor/editor_node.cpp
msgid "Export Tile Set"
-msgstr ""
+msgstr "Eksportēt flīžu kopumu"
#: editor/editor_node.cpp
msgid "This operation can't be done without a selected node."
-msgstr ""
+msgstr "Šo darbību nevar veikt bez izvēlēta mezgla."
#: editor/editor_node.cpp
msgid "Current scene not saved. Open anyway?"
-msgstr ""
+msgstr "PaÅ¡reizÄ“jÄ aina nav saglabÄta. Vienalga atvÄ“rt ?"
#: editor/editor_node.cpp
msgid "Can't undo while mouse buttons are pressed."
-msgstr ""
+msgstr "Nevar atgriezt, kad peles pogas ir nospiestas."
#: editor/editor_node.cpp
msgid "Nothing to undo."
-msgstr ""
+msgstr "Nav ko atgriezt."
#: editor/editor_node.cpp
msgid "Undo: %s"
-msgstr ""
+msgstr "Atgriezts: %s"
#: editor/editor_node.cpp
msgid "Can't redo while mouse buttons are pressed."
@@ -2575,12 +2607,11 @@ msgstr ""
#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
-msgstr ""
+msgstr "Nevar pÄrlÄdÄ“t ainu, kas nav bijusi saglabÄta."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Reload Saved Scene"
-msgstr "Atvērt Aizvērto Ainu"
+msgstr "PÄrlÄdÄ“t saglabÄto ainu"
#: editor/editor_node.cpp
msgid ""
@@ -2590,49 +2621,52 @@ msgstr ""
#: editor/editor_node.cpp
msgid "Quick Run Scene..."
-msgstr ""
+msgstr "Ä€tri palaist ainu..."
#: editor/editor_node.cpp
msgid "Quit"
-msgstr ""
+msgstr "Iziet"
#: editor/editor_node.cpp
msgid "Yes"
-msgstr ""
+msgstr "JÄ"
#: editor/editor_node.cpp
msgid "Exit the editor?"
-msgstr ""
+msgstr "Iziet no redaktora?"
#: editor/editor_node.cpp
msgid "Open Project Manager?"
-msgstr ""
+msgstr "Atvērt projektu menedžeri ?"
#: editor/editor_node.cpp
msgid "Save & Quit"
-msgstr ""
+msgstr "SaglabÄt & iziet"
#: editor/editor_node.cpp
msgid "Save changes to the following scene(s) before quitting?"
-msgstr ""
+msgstr "SaglabÄt izmaiņas sekojoÅ¡ai ainai(-Äm) pirms izieÅ¡anas ?"
#: editor/editor_node.cpp
msgid "Save changes to the following scene(s) before opening Project Manager?"
msgstr ""
+"SaglabÄt izmaiņas sekojoÅ¡ai ainai(-Äm) pirms projektu menedžera atvÄ“rÅ¡anas ?"
#: editor/editor_node.cpp
msgid ""
"This option is deprecated. Situations where refresh must be forced are now "
"considered a bug. Please report."
msgstr ""
+"Å Ä« iespÄ“ja in novecojusi. SituÄcijas, kad atsvaidzinÄÅ¡ana ir jÄveic "
+"piespiedu kÄrtÄ, ir uzskatÄma par kļūdu, lÅ«dzu ziņojiet."
#: editor/editor_node.cpp
msgid "Pick a Main Scene"
-msgstr ""
+msgstr "Izvēlēties galveno ainu"
#: editor/editor_node.cpp
msgid "Close Scene"
-msgstr ""
+msgstr "Aizvērt ainu"
#: editor/editor_node.cpp
msgid "Reopen Closed Scene"
@@ -2644,11 +2678,11 @@ msgstr ""
#: editor/editor_node.cpp
msgid "Unable to find script field for addon plugin at: '%s'."
-msgstr ""
+msgstr "Nevarēja atrast skripta lauku spraudnim: '%s'."
#: editor/editor_node.cpp
msgid "Unable to load addon script from path: '%s'."
-msgstr ""
+msgstr "NevarÄ“ja ielÄdÄ“t spraudņa skriptu no: '%s'."
#: editor/editor_node.cpp
msgid ""
@@ -2665,6 +2699,7 @@ msgstr ""
#: editor/editor_node.cpp
msgid "Unable to load addon script from path: '%s' Script is not in tool mode."
msgstr ""
+"NevarÄ“ja ielÄdÄ“t spraudņa skriptu no mapes: '%s' Skripts nav rÄ«ka režīmÄ."
#: editor/editor_node.cpp
msgid ""
@@ -2680,11 +2715,11 @@ msgstr ""
#: editor/editor_node.cpp
msgid "Scene '%s' has broken dependencies:"
-msgstr ""
+msgstr "Ainai '%s' ir bojÄtas atkarÄ«bas:"
#: editor/editor_node.cpp
msgid "Clear Recent Scenes"
-msgstr ""
+msgstr "NotÄ«rÄ«t nesenÄs ainas"
#: editor/editor_node.cpp
msgid ""
@@ -2709,25 +2744,25 @@ msgstr ""
#: editor/editor_node.cpp
msgid "Save Layout"
-msgstr ""
+msgstr "SaglabÄt izkÄrtojumu"
#: editor/editor_node.cpp
msgid "Delete Layout"
-msgstr ""
+msgstr "DzÄ“st izkÄrtojumu"
#: editor/editor_node.cpp editor/import_dock.cpp
#: editor/script_create_dialog.cpp
msgid "Default"
-msgstr ""
+msgstr "Noklusējuma"
#: editor/editor_node.cpp editor/editor_resource_picker.cpp
#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp
msgid "Show in FileSystem"
-msgstr ""
+msgstr "ParÄdÄ«t failu sistÄ“mÄ"
#: editor/editor_node.cpp
msgid "Play This Scene"
-msgstr ""
+msgstr "Spēlēt šo ainu"
#: editor/editor_node.cpp
msgid "Close Tab"
@@ -2739,11 +2774,11 @@ msgstr "Atcelt Cilnes Aizvēršanu"
#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
msgid "Close Other Tabs"
-msgstr ""
+msgstr "AizvÄ“rt pÄrÄ“jÄs cilnes"
#: editor/editor_node.cpp
msgid "Close Tabs to the Right"
-msgstr ""
+msgstr "Aizvērt cilnes pa labi"
#: editor/editor_node.cpp
msgid "Close All Tabs"
@@ -2751,23 +2786,23 @@ msgstr "Aizvērt Visas Cilnes"
#: editor/editor_node.cpp
msgid "Switch Scene Tab"
-msgstr ""
+msgstr "PÄrslÄ“gt ainas cilni"
#: editor/editor_node.cpp
msgid "%d more files or folders"
-msgstr ""
+msgstr "%d vēl faili vai mapes"
#: editor/editor_node.cpp
msgid "%d more folders"
-msgstr ""
+msgstr "%s vēl mapes"
#: editor/editor_node.cpp
msgid "%d more files"
-msgstr ""
+msgstr "%d vēl faili"
#: editor/editor_node.cpp
msgid "Dock Position"
-msgstr ""
+msgstr "Doka pozīcija"
#: editor/editor_node.cpp
msgid "Distraction Free Mode"
@@ -2779,15 +2814,15 @@ msgstr ""
#: editor/editor_node.cpp
msgid "Add a new scene."
-msgstr ""
+msgstr "Pievienot jaunu ainu."
#: editor/editor_node.cpp
msgid "Scene"
-msgstr ""
+msgstr "Aina"
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
-msgstr ""
+msgstr "Iet uz iepriekš atvērto ainu."
#: editor/editor_node.cpp
msgid "Copy Text"
@@ -2795,15 +2830,15 @@ msgstr "Kopēt Tekstu"
#: editor/editor_node.cpp
msgid "Next tab"
-msgstr ""
+msgstr "NÄkamÄ cilne"
#: editor/editor_node.cpp
msgid "Previous tab"
-msgstr ""
+msgstr "IepriekšējÄ cilne"
#: editor/editor_node.cpp
msgid "Filter Files..."
-msgstr ""
+msgstr "Filtrēt failus..."
#: editor/editor_node.cpp
msgid "Operations with scene files."
@@ -2811,11 +2846,11 @@ msgstr ""
#: editor/editor_node.cpp
msgid "New Scene"
-msgstr ""
+msgstr "Jauna aina"
#: editor/editor_node.cpp
msgid "New Inherited Scene..."
-msgstr ""
+msgstr "Jauna mantota aina..."
#: editor/editor_node.cpp
msgid "Open Scene..."
@@ -2823,15 +2858,15 @@ msgstr ""
#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
msgid "Open Recent"
-msgstr ""
+msgstr "Atvērt nesenu"
#: editor/editor_node.cpp
msgid "Save Scene"
-msgstr ""
+msgstr "SaglabÄt ainu"
#: editor/editor_node.cpp
msgid "Convert To..."
-msgstr ""
+msgstr "Konvertēt Uz..."
#: editor/editor_node.cpp
msgid "MeshLibrary..."
@@ -2844,12 +2879,12 @@ msgstr ""
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Undo"
-msgstr ""
+msgstr "Atsaukt"
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Redo"
-msgstr ""
+msgstr "PÄrtaisÄ«t"
#: editor/editor_node.cpp
msgid "Miscellaneous project or scene-wide tools."
@@ -2858,31 +2893,31 @@ msgstr ""
#: editor/editor_node.cpp editor/project_manager.cpp
#: editor/script_create_dialog.cpp
msgid "Project"
-msgstr ""
+msgstr "Projekts"
#: editor/editor_node.cpp
msgid "Project Settings..."
-msgstr ""
+msgstr "Projekta iestatjumi..."
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
msgid "Version Control"
-msgstr ""
+msgstr "Versiju Kontrole"
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
msgid "Set Up Version Control"
-msgstr ""
+msgstr "UzstÄdÄ«t Versiju Kontroli"
#: editor/editor_node.cpp
msgid "Shut Down Version Control"
-msgstr ""
+msgstr "Izbeigt Versiju Kontroli"
#: editor/editor_node.cpp
msgid "Export..."
-msgstr ""
+msgstr "Eksportēt..."
#: editor/editor_node.cpp
msgid "Install Android Build Template..."
-msgstr ""
+msgstr "Instalēt Android būves šablonu..."
#: editor/editor_node.cpp
msgid "Open Project Data Folder"
@@ -2890,28 +2925,28 @@ msgstr "Atvērt Projekta Datu Mapi"
#: editor/editor_node.cpp editor/plugins/tile_set_editor_plugin.cpp
msgid "Tools"
-msgstr ""
+msgstr "Rīki"
#: editor/editor_node.cpp
msgid "Orphan Resource Explorer..."
-msgstr ""
+msgstr "BÄreņu resursu pÄrlÅ«ks..."
#: editor/editor_node.cpp
msgid "Reload Current Project"
-msgstr ""
+msgstr "PÄrlÄdÄ“t paÅ¡reizÄ“jo projektu"
#: editor/editor_node.cpp
msgid "Quit to Project List"
-msgstr ""
+msgstr "Iziet uz projektu sarakstu"
#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
#: editor/project_export.cpp
msgid "Debug"
-msgstr ""
+msgstr "Atkļūdot"
#: editor/editor_node.cpp
msgid "Deploy with Remote Debug"
-msgstr ""
+msgstr "Palaist ar tÄlvadÄ«bas atkļūdoÅ¡anu"
#: editor/editor_node.cpp
msgid ""
@@ -2922,10 +2957,16 @@ msgid ""
"mobile device).\n"
"You don't need to enable it to use the GDScript debugger locally."
msgstr ""
+"Kad šī opcija ir ieslÄ“gta, izmantojot viena klikšķa palaiÅ¡anu, tÄ liks "
+"spēlei savienoties ar šī datora IP adresi, lai pašreizējais projekts varētu "
+"tik atkļūdots attÄlinÄti.\n"
+"Å Ä« opcija ir paredzÄ“ta izmantoÅ¡anai tÄlvadÄ«bas atkļūdoÅ¡anai (parasti ar "
+"mobilu ierīci).\n"
+"Jums tÄ nav jÄieslÄ“dz, lai izmantotu GDScript atkļūdotÄju lokÄli."
#: editor/editor_node.cpp
msgid "Small Deploy with Network Filesystem"
-msgstr ""
+msgstr "MazÄ palaiÅ¡ana ar tÄ«kla failu sistÄ“mu"
#: editor/editor_node.cpp
msgid ""
@@ -2936,10 +2977,15 @@ msgid ""
"On Android, deploying will use the USB cable for faster performance. This "
"option speeds up testing for projects with large assets."
msgstr ""
+"Kad šī opcija ir ieslÄ“gta, izmantojot viena klikšķa palaiÅ¡anu uz Android, tÄ "
+"eksportēs tikai spēles palaišanas failu bez projekta datiem.\n"
+"Projekta failu sistÄ“ma tiks nodroÅ¡inÄta attÄlinÄti, caur internetu.\n"
+"Uz Android, palaiÅ¡ana izmantos USB kabeli, lai nodroÅ¡inÄtu ÄtrÄku "
+"izpildÄ«jumu. Å Ä« opcija paÄtrina projektu testēšanu ar milzÄ«giem resursiem."
#: editor/editor_node.cpp
msgid "Visible Collision Shapes"
-msgstr ""
+msgstr "Redzamas sadursmes formas"
#: editor/editor_node.cpp
msgid ""
@@ -2949,7 +2995,7 @@ msgstr ""
#: editor/editor_node.cpp
msgid "Visible Navigation"
-msgstr ""
+msgstr "Redzama navigÄcija"
#: editor/editor_node.cpp
msgid ""
@@ -2959,7 +3005,7 @@ msgstr ""
#: editor/editor_node.cpp
msgid "Synchronize Scene Changes"
-msgstr ""
+msgstr "Sinhronizēt ainas izmaiņas"
#: editor/editor_node.cpp
msgid ""
@@ -2971,7 +3017,7 @@ msgstr ""
#: editor/editor_node.cpp
msgid "Synchronize Script Changes"
-msgstr ""
+msgstr "Sinhronizēt skripta izmaiņas"
#: editor/editor_node.cpp
msgid ""
@@ -2983,108 +3029,107 @@ msgstr ""
#: editor/editor_node.cpp editor/script_create_dialog.cpp
msgid "Editor"
-msgstr ""
+msgstr "Redaktors"
#: editor/editor_node.cpp
msgid "Editor Settings..."
-msgstr ""
+msgstr "Redaktora iestatījumi..."
#: editor/editor_node.cpp
msgid "Editor Layout"
-msgstr ""
+msgstr "Redaktora izkÄrtojums"
#: editor/editor_node.cpp
msgid "Take Screenshot"
-msgstr ""
+msgstr "Uzņemt EkrÄnÅ¡Äviņu"
#: editor/editor_node.cpp
msgid "Screenshots are stored in the Editor Data/Settings Folder."
-msgstr ""
+msgstr "EkrÄnÅ¡Äviņi tiek saglabÄti redaktora datu / iestatÄ«jumu mapÄ“."
#: editor/editor_node.cpp
msgid "Toggle Fullscreen"
-msgstr ""
+msgstr "PÄrslÄ“gt PilnekrÄnu"
#: editor/editor_node.cpp
msgid "Toggle System Console"
-msgstr ""
+msgstr "PÄrslÄ“gt sistÄ“mas konsoli"
#: editor/editor_node.cpp
msgid "Open Editor Data/Settings Folder"
-msgstr ""
+msgstr "Atvērt redaktora datu / iestatījumu mapi"
#: editor/editor_node.cpp
msgid "Open Editor Data Folder"
-msgstr ""
+msgstr "Atvērt redaktora datu mapi"
#: editor/editor_node.cpp
msgid "Open Editor Settings Folder"
-msgstr ""
+msgstr "Atvērt redaktora iestatījumu mapi"
#: editor/editor_node.cpp
msgid "Manage Editor Features..."
-msgstr ""
+msgstr "PÄrvaldÄ«t redaktora iespÄ“jas..."
#: editor/editor_node.cpp
msgid "Manage Export Templates..."
-msgstr ""
+msgstr "PÄrvaldÄ«t eksporta Å¡ablonus..."
#: editor/editor_node.cpp editor/plugins/shader_editor_plugin.cpp
msgid "Help"
-msgstr ""
+msgstr "Palīdzība"
#: editor/editor_node.cpp
msgid "Online Documentation"
-msgstr ""
+msgstr "TieÅ¡saistes DokumentÄcija"
#: editor/editor_node.cpp
msgid "Questions & Answers"
-msgstr ""
+msgstr "JautÄjumi & Atbildes"
#: editor/editor_node.cpp
msgid "Report a Bug"
-msgstr ""
+msgstr "Ziņot par kļūmi"
#: editor/editor_node.cpp
msgid "Suggest a Feature"
-msgstr ""
+msgstr "Ieteikt Iespēju"
#: editor/editor_node.cpp
msgid "Send Docs Feedback"
-msgstr ""
+msgstr "Sūtīt dokumentu atsauksmi"
#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp
msgid "Community"
-msgstr "Sabiedrība"
+msgstr "Komūns"
#: editor/editor_node.cpp
-#, fuzzy
msgid "About Godot"
-msgstr "Par"
+msgstr "Par Godot"
#: editor/editor_node.cpp
msgid "Support Godot Development"
-msgstr ""
+msgstr "AtbalstÄ«t Godot izstrÄdi"
#: editor/editor_node.cpp
msgid "Play the project."
-msgstr ""
+msgstr "Atskaņot projektu."
#: editor/editor_node.cpp
msgid "Play"
-msgstr ""
+msgstr "Atskaņot"
#: editor/editor_node.cpp
msgid "Pause the scene execution for debugging."
-msgstr ""
+msgstr "Pauzēt ainas izpildi priekš atkļūdošanas."
#: editor/editor_node.cpp
msgid "Pause Scene"
-msgstr ""
+msgstr "Pauzēt ainu"
#: editor/editor_node.cpp
msgid "Stop the scene."
-msgstr ""
+msgstr "ApstÄdinÄt ainu."
#: editor/editor_node.cpp
msgid "Play the edited scene."
@@ -3092,7 +3137,7 @@ msgstr ""
#: editor/editor_node.cpp
msgid "Play Scene"
-msgstr ""
+msgstr "Spēlēt Ainu"
#: editor/editor_node.cpp
msgid "Play custom scene"
@@ -3109,7 +3154,7 @@ msgstr ""
#: editor/editor_node.cpp editor/project_settings_editor.cpp
#: editor/settings_config_dialog.cpp
msgid "Save & Restart"
-msgstr ""
+msgstr "SaglabÄt & pÄrstartÄ“t"
#: editor/editor_node.cpp
msgid "Update Continuously"
@@ -3117,7 +3162,7 @@ msgstr "NepÄrtraukti Atjaunot"
#: editor/editor_node.cpp
msgid "Update When Changed"
-msgstr ""
+msgstr "Atjaunot Kad Mainīts"
#: editor/editor_node.cpp
msgid "Hide Update Spinner"
@@ -3125,11 +3170,11 @@ msgstr ""
#: editor/editor_node.cpp
msgid "FileSystem"
-msgstr ""
+msgstr "Failu sistēma"
#: editor/editor_node.cpp
msgid "Inspector"
-msgstr ""
+msgstr "Inspektors"
#: editor/editor_node.cpp
msgid "Expand Bottom Panel"
@@ -3137,11 +3182,11 @@ msgstr ""
#: editor/editor_node.cpp
msgid "Output"
-msgstr ""
+msgstr "Izeja"
#: editor/editor_node.cpp
msgid "Don't Save"
-msgstr ""
+msgstr "NesaglabÄt"
#: editor/editor_node.cpp
msgid "Android build template is missing, please install relevant templates."
@@ -3169,6 +3214,12 @@ msgid ""
"the \"Use Custom Build\" option should be enabled in the Android export "
"preset."
msgstr ""
+"Å is iestatÄ«s jÅ«su projektu priekÅ¡ pielÄgotÄm Android bÅ«vÄ“m, ieinstalÄ“jot "
+"avota šablonu uz \"res://android/build\".\n"
+"JÅ«s varat veikt izmaiņas un uzbÅ«vÄ“t paÅ¡i savu pielÄgoto APK pie "
+"eksportēšanas (pievienot moduļus, mainīt AndroidManifest.xml, utt.).\n"
+"PiezÄ«me - lai veiktu pielÄgotÄs bÅ«ves jau iebÅ«vÄ“to APK vietÄ, opcijai "
+"\"Izmantot PielÄgotu bÅ«vi\" jÄbÅ«t ieslÄ“gtai pie Android eksporta Å¡ablona."
#: editor/editor_node.cpp
msgid ""
@@ -3195,30 +3246,30 @@ msgid "Merge With Existing"
msgstr ""
#: editor/editor_node.cpp
-#, fuzzy
msgid "Apply MeshInstance Transforms"
-msgstr "Anim IzmainÄ«t TransformÄciju"
+msgstr "Pielietot MeshInstances TransformÄcijas"
#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr ""
#: editor/editor_node.cpp
-#, fuzzy
msgid ""
"The following files are newer on disk.\n"
"What action should be taken?"
-msgstr "Sekojošie faili netika izvilkti no paketes:"
+msgstr ""
+"SekojoÅ¡ie faili ir jaunÄki uz diska.\n"
+"KÄdu darbÄ«bu veikt ?"
#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
#: editor/plugins/shader_editor_plugin.cpp
msgid "Reload"
-msgstr ""
+msgstr "PÄrlÄdÄ“t"
#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
#: editor/plugins/shader_editor_plugin.cpp
msgid "Resave"
-msgstr ""
+msgstr "PÄrglabÄt"
#: editor/editor_node.cpp
msgid "New Inherited"
@@ -3226,52 +3277,51 @@ msgstr ""
#: editor/editor_node.cpp
msgid "Load Errors"
-msgstr ""
+msgstr "IelÄdÄ“t kļūdas"
#: editor/editor_node.cpp editor/plugins/tile_map_editor_plugin.cpp
msgid "Select"
-msgstr ""
+msgstr "Izvēlēties"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Select Current"
-msgstr "Aktualizēt"
+msgstr "Izvēlēties pašreizējo"
#: editor/editor_node.cpp
msgid "Open 2D Editor"
-msgstr ""
+msgstr "Atvērt 2D redaktoru"
#: editor/editor_node.cpp
msgid "Open 3D Editor"
-msgstr ""
+msgstr "Atvērt 3D redaktoru"
#: editor/editor_node.cpp
msgid "Open Script Editor"
-msgstr ""
+msgstr "Atvērt skriptu redaktoru"
#: editor/editor_node.cpp editor/project_manager.cpp
msgid "Open Asset Library"
-msgstr ""
+msgstr "Atvērt līdzekļu bibliotēku"
#: editor/editor_node.cpp
msgid "Open the next Editor"
-msgstr ""
+msgstr "AtvÄ“rt nÄkamo redaktoru"
#: editor/editor_node.cpp
msgid "Open the previous Editor"
-msgstr ""
+msgstr "Atvērt iepriekšējo redaktoru"
#: editor/editor_node.h
msgid "Warning!"
-msgstr ""
+msgstr "BrÄ«dinÄjums!"
#: editor/editor_path.cpp
msgid "No sub-resources found."
-msgstr ""
+msgstr "Sub-resursi nav atrasti."
#: editor/editor_path.cpp
msgid "Open a list of sub-resources."
-msgstr ""
+msgstr "Atvērt sarakstu ar sub-resursiem."
#: editor/editor_plugin.cpp
msgid "Creating Mesh Previews"
@@ -3279,7 +3329,7 @@ msgstr ""
#: editor/editor_plugin.cpp
msgid "Thumbnail..."
-msgstr ""
+msgstr "Sīktēls..."
#: editor/editor_plugin_settings.cpp
msgid "Main Script:"
@@ -3287,59 +3337,57 @@ msgstr "Galvenais Skripts:"
#: editor/editor_plugin_settings.cpp
msgid "Edit Plugin"
-msgstr ""
+msgstr "Rediģēt spraudni"
#: editor/editor_plugin_settings.cpp
msgid "Installed Plugins:"
-msgstr ""
+msgstr "Instalētie spraudņi:"
#: editor/editor_plugin_settings.cpp editor/plugin_config_dialog.cpp
msgid "Update"
-msgstr ""
+msgstr "AtjauninÄt"
#: editor/editor_plugin_settings.cpp
msgid "Version"
-msgstr ""
+msgstr "Versija"
#: editor/editor_plugin_settings.cpp
-#, fuzzy
msgid "Author"
-msgstr "Autori"
+msgstr "Autors"
#: editor/editor_plugin_settings.cpp
#: editor/plugins/version_control_editor_plugin.cpp
#: modules/gdnative/gdnative_library_singleton_editor.cpp
msgid "Status"
-msgstr ""
+msgstr "Statuss"
#: editor/editor_profiler.cpp
msgid "Measure:"
-msgstr ""
+msgstr "Mērogs:"
#: editor/editor_profiler.cpp
-#, fuzzy
msgid "Frame Time (ms)"
-msgstr "Laiks (s): "
+msgstr "Kadra Laiks (ms)"
#: editor/editor_profiler.cpp
msgid "Average Time (ms)"
-msgstr ""
+msgstr "Vidējais laiks (ms)"
#: editor/editor_profiler.cpp
msgid "Frame %"
-msgstr ""
+msgstr "Kadrs %"
#: editor/editor_profiler.cpp
msgid "Physics Frame %"
-msgstr ""
+msgstr "Fizikas kadrs %"
#: editor/editor_profiler.cpp
msgid "Inclusive"
-msgstr ""
+msgstr "Iekļaujošs"
#: editor/editor_profiler.cpp
msgid "Self"
-msgstr ""
+msgstr "Sevi"
#: editor/editor_profiler.cpp
msgid ""
@@ -3353,15 +3401,15 @@ msgstr ""
#: editor/editor_profiler.cpp
msgid "Frame #:"
-msgstr ""
+msgstr "Kadrs #:"
#: editor/editor_profiler.cpp
msgid "Time"
-msgstr ""
+msgstr "Laiks"
#: editor/editor_profiler.cpp
msgid "Calls"
-msgstr ""
+msgstr "Izsaukumi"
#: editor/editor_properties.cpp
msgid "Edit Text:"
@@ -3373,19 +3421,19 @@ msgstr ""
#: editor/editor_properties.cpp
msgid "Layer"
-msgstr ""
+msgstr "KÄrta"
#: editor/editor_properties.cpp
msgid "Bit %d, value %d"
-msgstr ""
+msgstr "Bits %d, vērtība %d"
#: editor/editor_properties.cpp
msgid "[Empty]"
-msgstr ""
+msgstr "[Tukšs]"
#: editor/editor_properties.cpp editor/plugins/root_motion_editor_plugin.cpp
msgid "Assign..."
-msgstr ""
+msgstr "Pievienot..."
#: editor/editor_properties.cpp
msgid "Invalid RID"
@@ -3415,24 +3463,24 @@ msgstr ""
#: editor/editor_properties_array_dict.cpp
msgid "Size: "
-msgstr ""
+msgstr "Izmērs: "
#: editor/editor_properties_array_dict.cpp
msgid "Page: "
-msgstr ""
+msgstr "Lapa: "
#: editor/editor_properties_array_dict.cpp
#: editor/plugins/theme_editor_plugin.cpp
msgid "Remove Item"
-msgstr ""
+msgstr "Noņemt vienumu"
#: editor/editor_properties_array_dict.cpp
msgid "New Key:"
-msgstr ""
+msgstr "Jauna atslēga:"
#: editor/editor_properties_array_dict.cpp
msgid "New Value:"
-msgstr ""
+msgstr "Jauna vērtība:"
#: editor/editor_properties_array_dict.cpp
msgid "Add Key/Value Pair"
@@ -3464,12 +3512,11 @@ msgstr ""
#: editor/plugins/tile_map_editor_plugin.cpp editor/property_editor.cpp
#: editor/scene_tree_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Paste"
-msgstr ""
+msgstr "Ielīmēt"
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
-#, fuzzy
msgid "Convert to %s"
-msgstr "Izveidot"
+msgstr "Konvertēt uz %s"
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "New %s"
@@ -3477,11 +3524,11 @@ msgstr ""
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "New Script"
-msgstr ""
+msgstr "Jauns skripts"
#: editor/editor_resource_picker.cpp editor/scene_tree_dock.cpp
msgid "Extend Script"
-msgstr ""
+msgstr "PagarinÄt skriptu"
#: editor/editor_run_native.cpp
msgid ""
@@ -3492,23 +3539,23 @@ msgstr ""
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
-msgstr ""
+msgstr "Raksti savu loģiku _run() metodē."
#: editor/editor_run_script.cpp
msgid "There is an edited scene already."
-msgstr ""
+msgstr "Jau ir rediģēta aina."
#: editor/editor_run_script.cpp
msgid "Couldn't instance script:"
-msgstr ""
+msgstr "Nevar pakļaut skriptu:"
#: editor/editor_run_script.cpp
msgid "Did you forget the 'tool' keyword?"
-msgstr ""
+msgstr "Vai aizmirsi 'tool' atslÄ“gvÄrdu?"
#: editor/editor_run_script.cpp
msgid "Couldn't run script:"
-msgstr ""
+msgstr "Nevar palaist skriptu:"
#: editor/editor_run_script.cpp
msgid "Did you forget the '_run' method?"
@@ -3524,15 +3571,15 @@ msgstr ""
#: editor/editor_sub_scene.cpp editor/project_manager.cpp
msgid "Browse"
-msgstr ""
+msgstr "PÄrlÅ«kot"
#: editor/editor_sub_scene.cpp
msgid "Scene Path:"
-msgstr ""
+msgstr "Ainas ceļš:"
#: editor/editor_sub_scene.cpp
msgid "Import From Node:"
-msgstr ""
+msgstr "Importēt no mezgla:"
#: editor/export_template_manager.cpp
msgid "Open the folder containing these templates."
@@ -3540,19 +3587,19 @@ msgstr ""
#: editor/export_template_manager.cpp
msgid "Uninstall these templates."
-msgstr ""
+msgstr "Atinstalēt šos šablonus."
#: editor/export_template_manager.cpp
msgid "There are no mirrors available."
-msgstr ""
+msgstr "Spoguļi nav pieejami."
#: editor/export_template_manager.cpp
msgid "Retrieving the mirror list..."
-msgstr ""
+msgstr "Saņem spoguļu sarakstu..."
#: editor/export_template_manager.cpp
msgid "Starting the download..."
-msgstr ""
+msgstr "SÄk lejuplÄdi..."
#: editor/export_template_manager.cpp
msgid "Error requesting URL:"
@@ -3560,15 +3607,15 @@ msgstr "Kļūda pieprasot URL:"
#: editor/export_template_manager.cpp
msgid "Connecting to the mirror..."
-msgstr ""
+msgstr "Savienojas ar spoguli..."
#: editor/export_template_manager.cpp
msgid "Can't resolve the requested address."
-msgstr ""
+msgstr "Nevar atrisinÄt pieprasÄ«to adresi."
#: editor/export_template_manager.cpp
msgid "Can't connect to the mirror."
-msgstr ""
+msgstr "Nevar pievienoties spogulim."
#: editor/export_template_manager.cpp
msgid "No response from the mirror."
@@ -3621,11 +3668,11 @@ msgstr ""
#: editor/export_template_manager.cpp
msgid "Disconnected"
-msgstr ""
+msgstr "Atvienots"
#: editor/export_template_manager.cpp
msgid "Resolving"
-msgstr ""
+msgstr "Atrisina"
#: editor/export_template_manager.cpp
msgid "Can't Resolve"
@@ -3634,24 +3681,24 @@ msgstr ""
#: editor/export_template_manager.cpp
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Connecting..."
-msgstr ""
+msgstr "Savienojas..."
#: editor/export_template_manager.cpp
msgid "Can't Connect"
-msgstr ""
+msgstr "Nevar Savieoties"
#: editor/export_template_manager.cpp
msgid "Connected"
-msgstr ""
+msgstr "Savienots"
#: editor/export_template_manager.cpp
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Requesting..."
-msgstr ""
+msgstr "Pieprasa..."
#: editor/export_template_manager.cpp
msgid "Downloading"
-msgstr ""
+msgstr "LejuplÄdÄ“"
#: editor/export_template_manager.cpp
msgid "Connection Error"
@@ -3683,23 +3730,23 @@ msgstr ""
#: editor/export_template_manager.cpp
msgid "Importing:"
-msgstr ""
+msgstr "Importē:"
#: editor/export_template_manager.cpp
msgid "Remove templates for the version '%s'?"
-msgstr ""
+msgstr "Noņemt šablonus versijai '%s'?"
#: editor/export_template_manager.cpp
msgid "Uncompressing Android Build Sources"
-msgstr ""
+msgstr "Atspiež Android būves avotus"
#: editor/export_template_manager.cpp
msgid "Export Template Manager"
-msgstr ""
+msgstr "Eksporta šablonu menedžeris"
#: editor/export_template_manager.cpp
msgid "Current Version:"
-msgstr ""
+msgstr "PaÅ¡reizÄ“jÄ Versija:"
#: editor/export_template_manager.cpp
msgid "Export templates are missing. Download them or install from a file."
@@ -3710,9 +3757,8 @@ msgid "Export templates are installed and ready to be used."
msgstr ""
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Open Folder"
-msgstr "Atvērt"
+msgstr "Atvērt mapi"
#: editor/export_template_manager.cpp
msgid "Open the folder containing installed templates for the current version."
@@ -3720,7 +3766,7 @@ msgstr ""
#: editor/export_template_manager.cpp
msgid "Uninstall"
-msgstr ""
+msgstr "Atinstalēt"
#: editor/export_template_manager.cpp
msgid "Uninstall templates for the current version."
@@ -3728,20 +3774,19 @@ msgstr ""
#: editor/export_template_manager.cpp
msgid "Download from:"
-msgstr ""
+msgstr "LejuplÄdÄ“t no:"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Open in Web Browser"
-msgstr "AtvÄ“rt Failu PÄrlÅ«kÄ"
+msgstr "AtvÄ“rt interneta pÄrlÅ«kÄ"
#: editor/export_template_manager.cpp
msgid "Copy Mirror URL"
-msgstr ""
+msgstr "Kopēt spoguļa linku"
#: editor/export_template_manager.cpp
msgid "Download and Install"
-msgstr ""
+msgstr "LejuplÄdÄ“t un instalÄ“t"
#: editor/export_template_manager.cpp
msgid ""
@@ -3751,11 +3796,11 @@ msgstr ""
#: editor/export_template_manager.cpp
msgid "Official export templates aren't available for development builds."
-msgstr ""
+msgstr "OficiÄlie eksporta Å¡abloni nav pieejami eksperimentÄlajÄm bÅ«vÄ“m."
#: editor/export_template_manager.cpp
msgid "Install from File"
-msgstr ""
+msgstr "Instalēt no Faila"
#: editor/export_template_manager.cpp
msgid "Install templates from a local file."
@@ -3764,15 +3809,15 @@ msgstr ""
#: editor/export_template_manager.cpp editor/find_in_files.cpp
#: editor/progress_dialog.cpp scene/gui/dialogs.cpp
msgid "Cancel"
-msgstr ""
+msgstr "Atcelt"
#: editor/export_template_manager.cpp
msgid "Cancel the download of the templates."
-msgstr ""
+msgstr "Atcelt Å¡ablonu lejuplÄdi."
#: editor/export_template_manager.cpp
msgid "Other Installed Versions:"
-msgstr ""
+msgstr "Citas instalÄ“tÄs versijas:"
#: editor/export_template_manager.cpp
msgid "Uninstall Template"
@@ -3791,6 +3836,8 @@ msgid ""
"The templates will continue to download.\n"
"You may experience a short editor freeze when they finish."
msgstr ""
+"Å ablonu lejuplÄdes turpinÄsies.\n"
+"JÅ«s varat pieredzÄ“t Ä«slaicÄ«gu redaktora sastingÅ¡anu, kad tÄs tiks pabeigtas."
#: editor/filesystem_dock.cpp
msgid "Favorites"
@@ -3815,7 +3862,7 @@ msgstr ""
#: editor/filesystem_dock.cpp
msgid "Error moving:"
-msgstr ""
+msgstr "Kļūda parvietojot:"
#: editor/filesystem_dock.cpp
msgid "Error duplicating:"
@@ -3853,7 +3900,7 @@ msgstr ""
#: editor/filesystem_dock.cpp
msgid "Renaming file:"
-msgstr ""
+msgstr "PÄrsauc failu:"
#: editor/filesystem_dock.cpp
msgid "Renaming folder:"
@@ -3881,7 +3928,7 @@ msgstr "Atvērt Ainas"
#: editor/filesystem_dock.cpp
msgid "Instance"
-msgstr ""
+msgstr "Å ablons"
#: editor/filesystem_dock.cpp
msgid "Add to Favorites"
@@ -3909,7 +3956,7 @@ msgstr "Jauna Aina..."
#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
msgid "New Script..."
-msgstr ""
+msgstr "Jauns Skripts..."
#: editor/filesystem_dock.cpp
msgid "New Resource..."
@@ -3928,9 +3975,8 @@ msgid "Collapse All"
msgstr ""
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Sort files"
-msgstr "Meklēt failus"
+msgstr "Å Ä·irot failus"
#: editor/filesystem_dock.cpp
msgid "Sort by Name (Ascending)"
@@ -3958,11 +4004,11 @@ msgstr ""
#: editor/filesystem_dock.cpp
msgid "Duplicate..."
-msgstr ""
+msgstr "Dublicēt..."
#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Rename..."
-msgstr ""
+msgstr "PÄrsaukt..."
#: editor/filesystem_dock.cpp
msgid "Focus the search box"
@@ -3996,14 +4042,14 @@ msgstr ""
#: editor/filesystem_dock.cpp
msgid "Move"
-msgstr ""
+msgstr "KustinÄt"
#: editor/filesystem_dock.cpp
#: editor/plugins/animation_tree_player_editor_plugin.cpp
#: editor/project_manager.cpp editor/rename_dialog.cpp
#: editor/scene_tree_dock.cpp
msgid "Rename"
-msgstr ""
+msgstr "PÄrsaukt"
#: editor/filesystem_dock.cpp
msgid "Overwrite"
@@ -4042,11 +4088,11 @@ msgstr ""
#: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
msgid "Find..."
-msgstr ""
+msgstr "Meklēt..."
#: editor/find_in_files.cpp editor/plugins/script_text_editor.cpp
msgid "Replace..."
-msgstr ""
+msgstr "Aizvietot..."
#: editor/find_in_files.cpp
msgid "Find: "
@@ -4065,19 +4111,16 @@ msgid "Searching..."
msgstr "Meklē..."
#: editor/find_in_files.cpp
-#, fuzzy
msgid "%d match in %d file."
-msgstr "%d sakritības."
+msgstr "%d sakritÄ«bas %d failÄ."
#: editor/find_in_files.cpp
-#, fuzzy
msgid "%d matches in %d file."
-msgstr "%d sakritības."
+msgstr "%d sakritÄ«bas %d failÄ."
#: editor/find_in_files.cpp
-#, fuzzy
msgid "%d matches in %d files."
-msgstr "%d sakritības."
+msgstr "%d sakritības %d failos."
#: editor/groups_editor.cpp
msgid "Add to Group"
@@ -4105,7 +4148,7 @@ msgstr "Izdzēst Grupu"
#: editor/groups_editor.cpp editor/node_dock.cpp
msgid "Groups"
-msgstr ""
+msgstr "Grupas"
#: editor/groups_editor.cpp
msgid "Nodes Not in Group"
@@ -4122,7 +4165,7 @@ msgstr ""
#: editor/groups_editor.cpp
msgid "Empty groups will be automatically removed."
-msgstr ""
+msgstr "TukÅ¡Äs grupas tiks automÄtiski noņemtas."
#: editor/groups_editor.cpp
msgid "Group Editor"
@@ -4130,7 +4173,7 @@ msgstr "Grupas Redaktors"
#: editor/groups_editor.cpp
msgid "Manage Groups"
-msgstr ""
+msgstr "PÄrvaldÄ«t grupas"
#: editor/import/resource_importer_scene.cpp
msgid "Import as Single Scene"
@@ -4211,21 +4254,19 @@ msgstr ""
#: editor/import/resource_importer_scene.cpp
msgid "Saving..."
-msgstr ""
+msgstr "SaglabÄ..."
#: editor/import_defaults_editor.cpp
-#, fuzzy
msgid "Select Importer"
-msgstr "Izvēlēties Šablona Failu"
+msgstr "IzvÄ“lÄ“ties importÄ“tÄju"
#: editor/import_defaults_editor.cpp
msgid "Importer:"
msgstr ""
#: editor/import_defaults_editor.cpp
-#, fuzzy
msgid "Reset to Defaults"
-msgstr "IelÄdÄ“t NoklusÄ“jumu"
+msgstr "Atiestatīt uz noklusējumiem"
#: editor/import_dock.cpp
msgid "Keep File (No Import)"
@@ -4245,7 +4286,7 @@ msgstr ""
#: editor/import_dock.cpp
msgid "Reimport"
-msgstr ""
+msgstr "Reimportēt"
#: editor/import_dock.cpp
msgid ""
@@ -4281,14 +4322,12 @@ msgid "Failed to load resource."
msgstr ""
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Copy Properties"
-msgstr "Ieslēgtie Mainīgie:"
+msgstr "Kopēt iestatījumus"
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Paste Properties"
-msgstr "Ieslēgtie Mainīgie:"
+msgstr "Ielīmēt iestatījumus"
#: editor/inspector_dock.cpp
msgid "Make Sub-Resources Unique"
@@ -4310,7 +4349,7 @@ msgstr ""
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/theme_editor_plugin.cpp
msgid "Save As..."
-msgstr ""
+msgstr "SaglabÄt kÄ..."
#: editor/inspector_dock.cpp
msgid "Extra resource options."
@@ -4342,20 +4381,19 @@ msgstr ""
#: editor/inspector_dock.cpp
msgid "Open documentation for this object."
-msgstr ""
+msgstr "AtvÄ“rt dokumentÄciju Å¡im objektam."
#: editor/inspector_dock.cpp editor/scene_tree_dock.cpp
msgid "Open Documentation"
-msgstr ""
+msgstr "AtvÄ“rt dokumentÄciju"
#: editor/inspector_dock.cpp
msgid "Filter properties"
-msgstr ""
+msgstr "Filtrēt iestatījumus"
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Manage object properties."
-msgstr "AnimÄcijas Ä«pašības."
+msgstr "PÄrvaldÄ«t objekta rekvizÄ«tus."
#: editor/inspector_dock.cpp
msgid "Changes may be lost!"
@@ -4367,7 +4405,7 @@ msgstr ""
#: editor/node_dock.cpp
msgid "Select a single node to edit its signals and groups."
-msgstr ""
+msgstr "IzvÄ“lies kÄdu mezglu, lai rediģētu tÄ signÄlus un grupas."
#: editor/plugin_config_dialog.cpp
msgid "Edit a Plugin"
@@ -4387,16 +4425,16 @@ msgstr ""
#: editor/plugin_config_dialog.cpp
msgid "Author:"
-msgstr ""
+msgstr "Autors:"
#: editor/plugin_config_dialog.cpp
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Version:"
-msgstr ""
+msgstr "Versija:"
#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp
msgid "Language:"
-msgstr ""
+msgstr "Valoda:"
#: editor/plugin_config_dialog.cpp
msgid "Script Name:"
@@ -4590,7 +4628,7 @@ msgstr ""
#: editor/plugins/animation_blend_space_2d_editor.cpp
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Blend:"
-msgstr ""
+msgstr "SapludinÄt:"
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
msgid "Parameter Changed:"
@@ -4639,7 +4677,7 @@ msgstr "Izdzēst Mezglu"
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
#: editor/scene_tree_dock.cpp
msgid "Delete Node(s)"
-msgstr ""
+msgstr "Dzēst mezglu(s)"
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
msgid "Toggle Filter On/Off"
@@ -4804,12 +4842,12 @@ msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation"
-msgstr ""
+msgstr "AnimÄcija"
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/version_control_editor_plugin.cpp
msgid "New"
-msgstr ""
+msgstr "Jauns"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Edit Transitions..."
@@ -4837,23 +4875,23 @@ msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Directions"
-msgstr ""
+msgstr "Virzieni"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Past"
-msgstr ""
+msgstr "PagÄtne"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Future"
-msgstr ""
+msgstr "NÄkotne"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Depth"
-msgstr ""
+msgstr "Dziļums"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "1 step"
-msgstr ""
+msgstr "1 solis"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "2 steps"
@@ -4892,7 +4930,7 @@ msgstr ""
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
msgid "Error!"
-msgstr ""
+msgstr "Kļūda!"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Blend Times:"
@@ -4933,7 +4971,7 @@ msgstr ""
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Sync"
-msgstr ""
+msgstr "SinhronizÄcija"
#: editor/plugins/animation_state_machine_editor.cpp
msgid "At End"
@@ -5010,7 +5048,7 @@ msgstr ""
#: editor/plugins/animation_tree_player_editor_plugin.cpp
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Scale:"
-msgstr ""
+msgstr "Mērogs:"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Fade In (s):"
@@ -5022,11 +5060,11 @@ msgstr ""
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Blend"
-msgstr ""
+msgstr "PludinÄt"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Mix"
-msgstr ""
+msgstr "Miksēt"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Auto Restart:"
@@ -5042,12 +5080,12 @@ msgstr ""
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Start!"
-msgstr ""
+msgstr "SÄkt!"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Amount:"
-msgstr ""
+msgstr "Daudzums:"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Blend 0:"
@@ -5063,7 +5101,7 @@ msgstr ""
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Current:"
-msgstr ""
+msgstr "Pašreizējs:"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
#: editor/plugins/visual_shader_editor_plugin.cpp
@@ -5137,11 +5175,11 @@ msgstr ""
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Filters..."
-msgstr ""
+msgstr "Filtri..."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Contents:"
-msgstr ""
+msgstr "Saturs:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "View Files"
@@ -5149,7 +5187,7 @@ msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Download"
-msgstr ""
+msgstr "LejuplÄdÄ“t"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Connection error, please try again."
@@ -5209,7 +5247,7 @@ msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Failed:"
-msgstr ""
+msgstr "NeizdevÄs:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Bad download hash, assuming file has been tampered with."
@@ -5217,11 +5255,11 @@ msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Expected:"
-msgstr ""
+msgstr "SagaidÄms:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Got:"
-msgstr ""
+msgstr "Saņemts:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Failed SHA-256 hash check"
@@ -5241,7 +5279,7 @@ msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Resolving..."
-msgstr ""
+msgstr "Atrisina.."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Error making request"
@@ -5249,7 +5287,7 @@ msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Idle"
-msgstr ""
+msgstr "DÄ«kstÄve"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Install..."
@@ -5257,7 +5295,7 @@ msgstr "Instalēt..."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Retry"
-msgstr ""
+msgstr "MēģinÄt vÄ“lreiz"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Download Error"
@@ -5293,23 +5331,23 @@ msgstr "Licence (Z-A)"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "First"
-msgstr ""
+msgstr "Pirmais"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Previous"
-msgstr ""
+msgstr "Iepriekšējais"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Next"
-msgstr ""
+msgstr "NÄkamais"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Last"
-msgstr ""
+msgstr "Pēdējais"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "All"
-msgstr ""
+msgstr "Visi"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Search templates, projects, and demos"
@@ -5329,15 +5367,15 @@ msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp
msgid "Sort:"
-msgstr ""
+msgstr "KÄrtot:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Category:"
-msgstr ""
+msgstr "Kategorija:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Site:"
-msgstr ""
+msgstr "Lapa:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Support"
@@ -5345,11 +5383,11 @@ msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Official"
-msgstr ""
+msgstr "OficiÄls"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Testing"
-msgstr ""
+msgstr "Testē"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Loading..."
@@ -5399,14 +5437,13 @@ msgid "Bake Lightmaps"
msgstr ""
#: editor/plugins/baked_lightmap_editor_plugin.cpp
-#, fuzzy
msgid "Select lightmap bake file:"
-msgstr "Izvēlēties Šablona Failu"
+msgstr "Izvēlēties gaismas kartes cepšanas failu:"
#: editor/plugins/camera_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Preview"
-msgstr ""
+msgstr "Priekšskats"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Configure Snap"
@@ -5515,9 +5552,8 @@ msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Grouped"
-msgstr "Grupa Izvēlēta"
+msgstr "Grupēts"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
@@ -5597,7 +5633,7 @@ msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Full Rect"
-msgstr ""
+msgstr "Pilns logs"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Keep Ratio"
@@ -5694,19 +5730,16 @@ msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Drag: Rotate selected node around pivot."
-msgstr "Noņemt izvÄ“lÄ“to mezglu vai pÄreju."
+msgstr "BÄ«dÄ«t: RotÄ“ izvÄ“lÄ“to mezglu apkÄrt asij."
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Alt+Drag: Move selected node."
-msgstr "Izdzēst izvēlēto Taisnstūri."
+msgstr "Alt+BÄ«dÄ«t: PÄrvietot izvÄ“lÄ“to mezglu."
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "V: Set selected node's pivot position."
-msgstr "Noņemt izvÄ“lÄ“to mezglu vai pÄreju."
+msgstr "V: Uzlikt izvÄ“lÄ“tÄ mezgla centra pozÄ«ciju."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -5859,7 +5892,7 @@ msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
msgid "View"
-msgstr ""
+msgstr "Skatīt"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Always Show Grid"
@@ -5946,14 +5979,12 @@ msgid "Clear Pose"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Add Node Here"
-msgstr "Pievienot Mezgla Punktu"
+msgstr "Pievienot mezglu šeit"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Instance Scene Here"
-msgstr "Ievadiet Atslēgu Šeit"
+msgstr "Izveidot ainas instanci šeit"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Multiply grid step by 2"
@@ -5980,34 +6011,28 @@ msgid "Zoom to 12.5%"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 25%"
-msgstr "AttÄlinÄt"
+msgstr "TuvinÄt uz 25%"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 50%"
-msgstr "AttÄlinÄt"
+msgstr "TuvinÄt uz 50%"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 100%"
-msgstr "AttÄlinÄt"
+msgstr "TuvinÄt uz 100%"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 200%"
-msgstr "AttÄlinÄt"
+msgstr "TuvinÄt uz 200%"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 400%"
-msgstr "AttÄlinÄt"
+msgstr "TuvinÄt uz 400%"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 800%"
-msgstr "AttÄlinÄt"
+msgstr "TuvinÄt uz 800%"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom to 1600%"
@@ -6082,7 +6107,7 @@ msgstr ""
#: editor/plugins/particles_2d_editor_plugin.cpp
#: editor/plugins/particles_editor_plugin.cpp
msgid "Particles"
-msgstr ""
+msgstr "Daļiņas"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
@@ -6139,7 +6164,7 @@ msgstr ""
#: editor/plugins/curve_editor_plugin.cpp
msgid "Flat 1"
-msgstr ""
+msgstr "Plakans 1"
#: editor/plugins/curve_editor_plugin.cpp editor/property_editor.cpp
msgid "Ease In"
@@ -6254,9 +6279,8 @@ msgid "Couldn't create a single convex collision shape."
msgstr ""
#: editor/plugins/mesh_instance_editor_plugin.cpp
-#, fuzzy
msgid "Create Simplified Convex Shape"
-msgstr "Izveidot Vienu Izliektu Formu"
+msgstr "Izveidot vienkÄrÅ¡otu izliektu formu"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Single Convex Shape"
@@ -6350,9 +6374,8 @@ msgid ""
msgstr ""
#: editor/plugins/mesh_instance_editor_plugin.cpp
-#, fuzzy
msgid "Create Simplified Convex Collision Sibling"
-msgstr "Izveidot Vienu Izliektu Sadursmes Uzmavu"
+msgstr "Izveidot vienkÄrÅ¡otu izliektu sadursmes radinieku"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid ""
@@ -6504,15 +6527,15 @@ msgstr ""
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "X-Axis"
-msgstr ""
+msgstr "X ass"
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Y-Axis"
-msgstr ""
+msgstr "Y ass"
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Z-Axis"
-msgstr ""
+msgstr "Z ass"
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Mesh Up Axis:"
@@ -6532,7 +6555,7 @@ msgstr ""
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Populate"
-msgstr ""
+msgstr "Apdzīvot"
#: editor/plugins/navigation_polygon_editor_plugin.cpp
#: editor/plugins/tile_set_editor_plugin.cpp
@@ -6557,9 +6580,8 @@ msgid "Can only set point into a ParticlesMaterial process material"
msgstr ""
#: editor/plugins/particles_2d_editor_plugin.cpp
-#, fuzzy
msgid "Convert to CPUParticles2D"
-msgstr "Izveidot"
+msgstr "Konvertēt uz CPUParticles2D"
#: editor/plugins/particles_2d_editor_plugin.cpp
#: editor/plugins/particles_editor_plugin.cpp
@@ -6604,7 +6626,7 @@ msgstr ""
#: editor/plugins/particles_editor_plugin.cpp
msgid "Volume"
-msgstr ""
+msgstr "Tilpums"
#: editor/plugins/particles_editor_plugin.cpp
msgid "Emission Source: "
@@ -6703,7 +6725,7 @@ msgstr ""
#: editor/plugins/theme_editor_preview.cpp
#: editor/plugins/visual_shader_editor_plugin.cpp editor/project_export.cpp
msgid "Options"
-msgstr ""
+msgstr "Opcijas"
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
@@ -6797,23 +6819,20 @@ msgid "Invalid Polygon (need 3 different vertices)"
msgstr ""
#: editor/plugins/polygon_2d_editor_plugin.cpp
-#, fuzzy
msgid "Add Custom Polygon"
-msgstr "Izveidot"
+msgstr "Pievienot pielÄgotu daudzstÅ«ri"
#: editor/plugins/polygon_2d_editor_plugin.cpp
-#, fuzzy
msgid "Remove Custom Polygon"
-msgstr "Izveidot"
+msgstr "Noņemt pielÄgotu daudzstÅ«ri"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Transform UV Map"
msgstr ""
#: editor/plugins/polygon_2d_editor_plugin.cpp
-#, fuzzy
msgid "Transform Polygon"
-msgstr "Izveidot"
+msgstr "Transformēt daudzstūri"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Paint Bone Weights"
@@ -6836,9 +6855,8 @@ msgid "Points"
msgstr ""
#: editor/plugins/polygon_2d_editor_plugin.cpp
-#, fuzzy
msgid "Polygons"
-msgstr "Izveidot"
+msgstr "Daudzstūri"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Bones"
@@ -6907,9 +6925,8 @@ msgid "Copy Polygon to UV"
msgstr ""
#: editor/plugins/polygon_2d_editor_plugin.cpp
-#, fuzzy
msgid "Copy UV to Polygon"
-msgstr "Izveidot"
+msgstr "Kopēt UV uz daudzstūra"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Clear UV"
@@ -6929,7 +6946,7 @@ msgstr ""
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Grid"
-msgstr ""
+msgstr "Režģis"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Show Grid"
@@ -6994,7 +7011,7 @@ msgstr ""
#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp
#: modules/visual_script/visual_script_editor.cpp
msgid "Type:"
-msgstr ""
+msgstr "Tips:"
#: editor/plugins/resource_preloader_editor_plugin.cpp
#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp
@@ -7014,14 +7031,12 @@ msgid "Flip Portals"
msgstr ""
#: editor/plugins/room_manager_editor_plugin.cpp
-#, fuzzy
msgid "Room Generate Points"
-msgstr "PÄrvietot BezjÄ“ Punktus"
+msgstr "Telpas punktu Ä£enerÄcija"
#: editor/plugins/room_manager_editor_plugin.cpp
-#, fuzzy
msgid "Generate Points"
-msgstr "Izveidot punktus."
+msgstr "Ģenerēt Punktus"
#: editor/plugins/room_manager_editor_plugin.cpp
msgid "Flip Portal"
@@ -7032,9 +7047,8 @@ msgid "Occluder Set Transform"
msgstr ""
#: editor/plugins/room_manager_editor_plugin.cpp
-#, fuzzy
msgid "Center Node"
-msgstr "Izdzēst"
+msgstr "Centrēt mezglu"
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
@@ -7050,7 +7064,7 @@ msgstr ""
#: editor/plugins/script_editor_plugin.cpp
msgid "Close and save changes?"
-msgstr ""
+msgstr "AizvÄ“rt un saglabÄt izmaiņas?"
#: editor/plugins/script_editor_plugin.cpp
msgid "Error writing TextFile:"
@@ -7061,9 +7075,8 @@ msgid "Could not load file at:"
msgstr ""
#: editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Error saving file!"
-msgstr "Kļūmes lÄdÄ“jot!"
+msgstr "Kļūda saglabÄjot failu!"
#: editor/plugins/script_editor_plugin.cpp
msgid "Error while saving theme."
@@ -7074,9 +7087,8 @@ msgid "Error Saving"
msgstr "Kļūda SaglabÄjot"
#: editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Error importing theme."
-msgstr "Kļūda lÄdÄ“jot fontu."
+msgstr "Kļūda importējot motīvu."
#: editor/plugins/script_editor_plugin.cpp
msgid "Error Importing"
@@ -7084,12 +7096,11 @@ msgstr "Kļūda Importējot"
#: editor/plugins/script_editor_plugin.cpp
msgid "New Text File..."
-msgstr ""
+msgstr "Jauns teksta fails..."
#: editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Open File"
-msgstr "Atvērt"
+msgstr "Atvērt failu"
#: editor/plugins/script_editor_plugin.cpp
msgid "Save File As..."
@@ -7126,7 +7137,7 @@ msgstr ""
#: editor/plugins/script_editor_plugin.cpp
msgid "Save Theme As..."
-msgstr ""
+msgstr "SaglabÄt motÄ«vu kÄ..."
#: editor/plugins/script_editor_plugin.cpp
msgid "%s Class Reference"
@@ -7135,7 +7146,7 @@ msgstr ""
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
msgid "Find Next"
-msgstr ""
+msgstr "Atrast NÄkamo"
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
@@ -7156,33 +7167,31 @@ msgstr ""
#: editor/plugins/script_editor_plugin.cpp
msgid "Sort"
-msgstr ""
+msgstr "Å Ä·irot"
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
#: modules/gdnative/gdnative_library_editor_plugin.cpp
msgid "Move Up"
-msgstr ""
+msgstr "Bīdīt augšup"
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
#: modules/gdnative/gdnative_library_editor_plugin.cpp
msgid "Move Down"
-msgstr ""
+msgstr "Bīdīt lejup"
#: editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Next Script"
-msgstr "Galvenais Skripts:"
+msgstr "NÄkamais skripts"
#: editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Previous Script"
-msgstr "Izvēlēties šo Mapi"
+msgstr "Iepriekšējais skripts"
#: editor/plugins/script_editor_plugin.cpp
msgid "File"
-msgstr ""
+msgstr "Fails"
#: editor/plugins/script_editor_plugin.cpp
msgid "Open..."
@@ -7190,11 +7199,11 @@ msgstr "Atvērt..."
#: editor/plugins/script_editor_plugin.cpp
msgid "Reopen Closed Script"
-msgstr ""
+msgstr "Atvērt aizvērto skriptu"
#: editor/plugins/script_editor_plugin.cpp
msgid "Save All"
-msgstr ""
+msgstr "SaglabÄt visu"
#: editor/plugins/script_editor_plugin.cpp
msgid "Soft Reload Script"
@@ -7227,11 +7236,11 @@ msgstr ""
#: editor/plugins/script_editor_plugin.cpp
msgid "Save Theme"
-msgstr ""
+msgstr "SaglabÄt motÄ«vu"
#: editor/plugins/script_editor_plugin.cpp
msgid "Close All"
-msgstr ""
+msgstr "Aizvērt Visu"
#: editor/plugins/script_editor_plugin.cpp
msgid "Close Docs"
@@ -7239,7 +7248,7 @@ msgstr ""
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
msgid "Run"
-msgstr ""
+msgstr "Palaist"
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
@@ -7247,7 +7256,7 @@ msgstr ""
#: editor/plugins/visual_shader_editor_plugin.cpp
#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
msgid "Search"
-msgstr ""
+msgstr "Meklēt"
#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp
msgid "Step Into"
@@ -7259,16 +7268,16 @@ msgstr ""
#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp
msgid "Break"
-msgstr ""
+msgstr "PÄrtraukt"
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
#: editor/script_editor_debugger.cpp
msgid "Continue"
-msgstr ""
+msgstr "turpinÄt"
#: editor/plugins/script_editor_plugin.cpp
msgid "Keep Debugger Open"
-msgstr ""
+msgstr "AtstÄt atkļūdotÄju atvÄ“rtu"
#: editor/plugins/script_editor_plugin.cpp
msgid "Debug with External Editor"
@@ -7277,11 +7286,11 @@ msgstr ""
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/shader_editor_plugin.cpp
msgid "Online Docs"
-msgstr ""
+msgstr "Tiešsaistes Dokumenti"
#: editor/plugins/script_editor_plugin.cpp
msgid "Open Godot online documentation."
-msgstr ""
+msgstr "AtvÄ“rt Godot tieÅ¡saistes dokumentÄciju."
#: editor/plugins/script_editor_plugin.cpp
msgid "Search the reference documentation."
@@ -7297,7 +7306,7 @@ msgstr ""
#: editor/plugins/script_editor_plugin.cpp
msgid "Discard"
-msgstr ""
+msgstr "Atmest"
#: editor/plugins/script_editor_plugin.cpp
msgid ""
@@ -7307,7 +7316,7 @@ msgstr ""
#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp
msgid "Debugger"
-msgstr ""
+msgstr "AtkļūdotÄjs"
#: editor/plugins/script_editor_plugin.cpp
msgid "Search Results"
@@ -7322,9 +7331,8 @@ msgid "Connections to method:"
msgstr ""
#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp
-#, fuzzy
msgid "Source"
-msgstr "Resurs"
+msgstr "Avots"
#: editor/plugins/script_text_editor.cpp
msgid "Target"
@@ -7338,16 +7346,15 @@ msgstr ""
#: editor/plugins/script_text_editor.cpp
msgid "[Ignore]"
-msgstr ""
+msgstr "[Ignorēt]"
#: editor/plugins/script_text_editor.cpp
msgid "Line"
msgstr "Rinda"
#: editor/plugins/script_text_editor.cpp
-#, fuzzy
msgid "Go to Function"
-msgstr "Izveidot Funkciju"
+msgstr "Iet uz funkciju"
#: editor/plugins/script_text_editor.cpp
msgid "Only resources from filesystem can be dropped."
@@ -7392,9 +7399,8 @@ msgid "Bookmarks"
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#, fuzzy
msgid "Breakpoints"
-msgstr "Izveidot"
+msgstr "PÄrrÄvumpunkts"
#: editor/plugins/script_text_editor.cpp
#: editor/plugins/shader_editor_plugin.cpp editor/plugins/text_editor.cpp
@@ -7404,7 +7410,7 @@ msgstr ""
#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Cut"
-msgstr ""
+msgstr "Izgriezt"
#: editor/plugins/script_text_editor.cpp editor/plugins/theme_editor_plugin.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
@@ -7444,9 +7450,8 @@ msgid "Complete Symbol"
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#, fuzzy
msgid "Evaluate Selection"
-msgstr "Mēroga Izvēle"
+msgstr "Novērtēt izvēli"
#: editor/plugins/script_text_editor.cpp
msgid "Trim Trailing Whitespace"
@@ -7477,14 +7482,12 @@ msgid "Toggle Bookmark"
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#, fuzzy
msgid "Go to Next Bookmark"
-msgstr "Doties uz nÄkamo soli"
+msgstr "Doties uz nÄkamo grÄmatzÄ«mi"
#: editor/plugins/script_text_editor.cpp
-#, fuzzy
msgid "Go to Previous Bookmark"
-msgstr "Doties uz iepriekšējo soli"
+msgstr "Doties uz iepriekšējo grÄmatzÄ«mi"
#: editor/plugins/script_text_editor.cpp
msgid "Remove All Bookmarks"
@@ -7508,14 +7511,12 @@ msgid "Remove All Breakpoints"
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#, fuzzy
msgid "Go to Next Breakpoint"
-msgstr "Doties uz nÄkamo soli"
+msgstr "Doties uz nÄkamo pÄrrÄvumpunktu"
#: editor/plugins/script_text_editor.cpp
-#, fuzzy
msgid "Go to Previous Breakpoint"
-msgstr "Doties uz iepriekšējo soli"
+msgstr "Doties uz iepriekšējo pÄrrÄvumpunktu"
#: editor/plugins/shader_editor_plugin.cpp
msgid ""
@@ -7525,18 +7526,18 @@ msgstr ""
#: editor/plugins/shader_editor_plugin.cpp
msgid "Shader"
-msgstr ""
+msgstr "Ä’notÄjs"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
@@ -7544,9 +7545,8 @@ msgid "Skeleton2D"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-#, fuzzy
msgid "Reset to Rest Pose"
-msgstr "IelÄdÄ“t NoklusÄ“jumu"
+msgstr "Atiestatīt uz atpūtas pozu"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Overwrite Rest Pose"
@@ -7574,7 +7574,7 @@ msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Perspective"
-msgstr ""
+msgstr "Perspektīva"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Top Orthogonal"
@@ -7670,13 +7670,12 @@ msgid "Translate"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Scale"
-msgstr "Mēroga Režīms"
+msgstr "Mērogs"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Scaling: "
-msgstr ""
+msgstr "Mērogs: "
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Translating: "
@@ -7715,14 +7714,12 @@ msgid "Material Changes:"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Shader Changes:"
-msgstr "Nomainīt"
+msgstr "Ä’notÄja izmaiņas:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Surface Changes:"
-msgstr "Nomainīt"
+msgstr "Virsmas izmaiņas:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Draw Calls:"
@@ -7825,9 +7822,8 @@ msgid "Audio Listener"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Enable Doppler"
-msgstr "Nomainīt"
+msgstr "Iespējot doppler"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Cinematic Preview"
@@ -7889,9 +7885,8 @@ msgid ""
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Convert Rooms"
-msgstr "Izveidot"
+msgstr "Konvertēt telpas"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "XForm Dialog"
@@ -8044,9 +8039,8 @@ msgid "View Portal Culling"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "View Occlusion Culling"
-msgstr "Izveidot"
+msgstr "Skatīt sķēršļu izkaušanu"
#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
@@ -8107,7 +8101,7 @@ msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Pre"
-msgstr ""
+msgstr "iepriekš"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Post"
@@ -8118,42 +8112,36 @@ msgid "Unnamed Gizmo"
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
-#, fuzzy
msgid "Create Mesh2D"
-msgstr "Izveidot Jaunu %s"
+msgstr "Izveidot Mesh2D"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Mesh2D Preview"
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
-#, fuzzy
msgid "Create Polygon2D"
-msgstr "Izveidot"
+msgstr "Izveidot Polygon2D"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Polygon2D Preview"
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
-#, fuzzy
msgid "Create CollisionPolygon2D"
-msgstr "Izveidot"
+msgstr "Izveidot CollisionPolygon2D"
#: editor/plugins/sprite_editor_plugin.cpp
-#, fuzzy
msgid "CollisionPolygon2D Preview"
-msgstr "Izveidot"
+msgstr "CollisionPolygon2D priekšskatījums"
#: editor/plugins/sprite_editor_plugin.cpp
-#, fuzzy
msgid "Create LightOccluder2D"
-msgstr "Izveidot"
+msgstr "Izveidot LightOccluder2D"
#: editor/plugins/sprite_editor_plugin.cpp
-#, fuzzy
msgid "LightOccluder2D Preview"
-msgstr "Izveidot"
+msgstr "LightOccluder2D priekšskatījums"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Sprite is empty!"
@@ -8176,18 +8164,16 @@ msgid "Invalid geometry, can't create polygon."
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
-#, fuzzy
msgid "Convert to Polygon2D"
-msgstr "Izveidot"
+msgstr "Konvertēt uz Polygon2D"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Invalid geometry, can't create collision polygon."
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
-#, fuzzy
msgid "Create CollisionPolygon2D Sibling"
-msgstr "Izveidot"
+msgstr "Izveidot CollisionPolygon2D radinieku"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Invalid geometry, can't create light occluder."
@@ -8222,9 +8208,8 @@ msgid "Settings:"
msgstr ""
#: editor/plugins/sprite_frames_editor_plugin.cpp
-#, fuzzy
msgid "No Frames Selected"
-msgstr "Savienot"
+msgstr "Nav izvēlēti kadri"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Add %d Frame(s)"
@@ -8267,14 +8252,12 @@ msgid "Move Frame"
msgstr ""
#: editor/plugins/sprite_frames_editor_plugin.cpp
-#, fuzzy
msgid "Animations:"
-msgstr "Funkcijas:"
+msgstr "AnimÄcijas:"
#: editor/plugins/sprite_frames_editor_plugin.cpp
-#, fuzzy
msgid "New Animation"
-msgstr "OptimizÄ“t animÄciju"
+msgstr "Jauna animÄcija"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed:"
@@ -8282,16 +8265,15 @@ msgstr ""
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Loop"
-msgstr ""
+msgstr "Cilpa"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Animation Frames:"
msgstr "AnimÄcijas Kadri:"
#: editor/plugins/sprite_frames_editor_plugin.cpp
-#, fuzzy
msgid "Add a Texture from File"
-msgstr "Noņemt Izvēlēto"
+msgstr "Pievienot tekstūru no faila"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Add Frames from a Sprite Sheet"
@@ -8370,9 +8352,8 @@ msgid "Step:"
msgstr ""
#: editor/plugins/texture_region_editor_plugin.cpp
-#, fuzzy
msgid "Separation:"
-msgstr "Sēpija funkcija."
+msgstr "Atdalījums:"
#: editor/plugins/texture_region_editor_plugin.cpp
msgid "TextureRegion"
@@ -8403,9 +8384,8 @@ msgid "No colors found."
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "{num} constant(s)"
-msgstr "Konstantes"
+msgstr "{num} konstante(s)"
#: editor/plugins/theme_editor_plugin.cpp
msgid "No constants found."
@@ -8444,27 +8424,24 @@ msgid "Nothing was selected for the import."
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Importing Theme Items"
-msgstr "Kļūda lÄdÄ“jot fontu."
+msgstr "Tēmas elementu importēšana"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Importing items {n}/{n}"
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Updating the editor"
-msgstr "Atjaunina Ainu"
+msgstr "Atjaunina redaktoru"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Finalizing"
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Filter:"
-msgstr "Nomainīt Filtru"
+msgstr "Filtrs:"
#: editor/plugins/theme_editor_plugin.cpp
msgid "With Data"
@@ -8549,9 +8526,8 @@ msgid "Expand types."
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select all Theme items."
-msgstr "Izvēlēties Šablona Failu"
+msgstr "Atlasiet visus motīvu vienumus."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select With Data"
@@ -8562,18 +8538,16 @@ msgid "Select all Theme items with item data."
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Deselect All"
-msgstr "Atvienot Visu"
+msgstr "Atcelt visu atlasi"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Deselect all Theme items."
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Import Selected"
-msgstr "Grupa Izvēlēta"
+msgstr "Importēt izvēlēto"
#: editor/plugins/theme_editor_plugin.cpp
msgid ""
@@ -8589,28 +8563,24 @@ msgid ""
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove All Color Items"
-msgstr "Noņemt no Favorītiem"
+msgstr "Noņemt visas krÄsas vienÄ«bas"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Rename Item"
-msgstr "PÄrsaukt Audio Kopni"
+msgstr "Noņemt vienību"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Remove All Constant Items"
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove All Font Items"
-msgstr "Noņemt no Favorītiem"
+msgstr "Noņemt visus fontu vienumus"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove All Icon Items"
-msgstr "SaglabÄt Visas Ainas"
+msgstr "Noņemt visus ikonu vienumus"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Remove All StyleBox Items"
@@ -8623,24 +8593,20 @@ msgid ""
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Color Item"
-msgstr "Pievienot Favorītiem"
+msgstr "Pievienot krÄsas vienumu"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Constant Item"
-msgstr "Konstantes"
+msgstr "Pievienot konstantes vienumu"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Font Item"
-msgstr "Pievienot Punktu"
+msgstr "Pievienot fonta vienumu"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Icon Item"
-msgstr "Pievienot Punktu"
+msgstr "Pievienot ikonas vienumu"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Add Stylebox Item"
@@ -8679,9 +8645,8 @@ msgid "Manage Theme Items"
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Edit Items"
-msgstr "Rediģēt Tekstu:"
+msgstr "Rediģēt vienumus"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Types:"
@@ -8700,18 +8665,16 @@ msgid "Add StyleBox Item"
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove Items:"
-msgstr "Noņemt Izvēlēto"
+msgstr "Noņemt vienumus:"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Remove Class Items"
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove Custom Items"
-msgstr "Izveidot"
+msgstr "Noņemt pielÄgotos vienumus"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Remove All Items"
@@ -8722,29 +8685,24 @@ msgid "Add Theme Item"
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Old Name:"
-msgstr "Nosaukums"
+msgstr "Vecais vÄrds:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Import Items"
-msgstr "IelÄdÄ“t NoklusÄ“jumu"
+msgstr "Importēt vienumus"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Default Theme"
-msgstr "Nomainīt Noklusējuma Tipu"
+msgstr "Noklusējuma motīvs"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Editor Theme"
-msgstr "Rediģēt Tekstu:"
+msgstr "Redaktora motīvs"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select Another Theme Resource:"
-msgstr "MeklÄ“t AizstÄjÄ“ja Resursu:"
+msgstr "Izvēlēties citu motīva resursu:"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Another Theme"
@@ -8756,7 +8714,7 @@ msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
msgid "Cancel Item Rename"
-msgstr ""
+msgstr "Atcelt pÄrsaukÅ¡anu"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Override Item"
@@ -8773,9 +8731,8 @@ msgid ""
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Type"
-msgstr "Pievienot Trijstūri"
+msgstr "Pievienot tipu"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Add Item Type"
@@ -8786,9 +8743,8 @@ msgid "Node Types:"
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Show Default"
-msgstr "IelÄdÄ“t NoklusÄ“jumu"
+msgstr "RÄdÄ«t noklusÄ“jumu"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Show default type items alongside items that have been overridden."
@@ -8803,9 +8759,8 @@ msgid "Override all default type items."
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Theme:"
-msgstr "Atvērt"
+msgstr "Motīvs:"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Manage Items..."
@@ -8816,18 +8771,16 @@ msgid "Add, remove, organize and import Theme items."
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Preview"
-msgstr "Pievienot Trijstūri"
+msgstr "Pievienot priekšskatījumu"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Default Preview"
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select UI Scene:"
-msgstr "IestatÄ«t KÄ Galveno Ainu"
+msgstr "Izvēlēties UI ainu:"
#: editor/plugins/theme_editor_preview.cpp
msgid ""
@@ -8840,18 +8793,16 @@ msgid "Toggle Button"
msgstr ""
#: editor/plugins/theme_editor_preview.cpp
-#, fuzzy
msgid "Disabled Button"
-msgstr "Atspējots"
+msgstr "Atspējota poga"
#: editor/plugins/theme_editor_preview.cpp
msgid "Item"
msgstr ""
#: editor/plugins/theme_editor_preview.cpp
-#, fuzzy
msgid "Disabled Item"
-msgstr "Atspējots"
+msgstr "Atspējots vienums"
#: editor/plugins/theme_editor_preview.cpp
msgid "Check Item"
@@ -8887,16 +8838,15 @@ msgstr ""
#: editor/plugins/theme_editor_preview.cpp
msgid "Has"
-msgstr ""
+msgstr "Satur"
#: editor/plugins/theme_editor_preview.cpp
msgid "Many"
-msgstr ""
+msgstr "Daudz"
#: editor/plugins/theme_editor_preview.cpp
-#, fuzzy
msgid "Disabled LineEdit"
-msgstr "Atspējots"
+msgstr "Atspējota LineEdit"
#: editor/plugins/theme_editor_preview.cpp
msgid "Tab 1"
@@ -8920,7 +8870,7 @@ msgstr ""
#: editor/plugins/theme_editor_preview.cpp
msgid "Has,Many,Options"
-msgstr ""
+msgstr "Ir,Daudz,Opcijas"
#: editor/plugins/theme_editor_preview.cpp
msgid "Invalid path, the PackedScene resource was probably moved or removed."
@@ -8948,9 +8898,8 @@ msgstr "Salabot NederÄ«gÄs FlÄ«zes"
#: editor/plugins/tile_map_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "Cut Selection"
-msgstr "Dzēst izvēlētos"
+msgstr "Griezt izvēlēto"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid "Paint TileMap"
@@ -9050,7 +8999,7 @@ msgstr ""
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Merge from Scene"
-msgstr ""
+msgstr "SapludinÄt no ainas"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "New Single Tile"
@@ -9081,24 +9030,20 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr ""
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Region"
-msgstr "InterpolÄcijas režīms"
+msgstr "Reģions"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Collision"
-msgstr "InterpolÄcijas režīms"
+msgstr "Sadursme"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Occlusion"
-msgstr "Izveidot"
+msgstr "Šķērslis"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Navigation"
-msgstr "Izveidot"
+msgstr "NavigÄcija"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Bitmask"
@@ -9110,31 +9055,27 @@ msgstr ""
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Icon"
-msgstr ""
+msgstr "Ikona"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Z Index"
msgstr ""
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Region Mode"
-msgstr "InterpolÄcijas režīms"
+msgstr "Reģiona režīms"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Collision Mode"
-msgstr "InterpolÄcijas režīms"
+msgstr "Sadursmes režīms"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Occlusion Mode"
-msgstr "Izveidot"
+msgstr "Oklūzijas režīms"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Navigation Mode"
-msgstr "Izveidot"
+msgstr "NavigÄcijas režīms"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Bitmask Mode"
@@ -9169,23 +9110,20 @@ msgid "Create a new rectangle."
msgstr "Izveidot jaunu taisnstūri."
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "New Rectangle"
-msgstr "Izveidot jaunu taisnstūri."
+msgstr "Jauns taisnstūris"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Create a new polygon."
msgstr "Izveidot jaunu daudzstūri."
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "New Polygon"
-msgstr "Izveidot"
+msgstr "Jauns daudzstūris"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Delete Selected Shape"
-msgstr "IzdzÄ“st IzvÄ“lÄ“to(Äs) AtslÄ“gu(as)"
+msgstr "Izdzēst izvēlēto formu"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Keep polygon inside region Rect."
@@ -9219,12 +9157,11 @@ msgstr ""
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Merge from scene?"
-msgstr ""
+msgstr "sablodinÄt no ainas?"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Remove Texture"
-msgstr "Noņemt Izvēlēto"
+msgstr "Noņemt tekstūru"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "%s file(s) were not added because was already on the list."
@@ -9282,9 +9219,8 @@ msgid "Set Tile Region"
msgstr ""
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Create Tile"
-msgstr "Izveidot"
+msgstr "Izveidot flīzi"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Set Tile Icon"
@@ -9295,24 +9231,20 @@ msgid "Edit Tile Bitmask"
msgstr ""
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Edit Collision Polygon"
-msgstr "Izveidot"
+msgstr "Rediģēt sadursmes daudzstūri"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Edit Occlusion Polygon"
-msgstr "Izveidot"
+msgstr "Rediģēt oklūzijas daudzstūri"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Edit Navigation Polygon"
-msgstr "Izveidot"
+msgstr "Rediģēt navigÄcijas daudzstÅ«ri"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Paste Tile Bitmask"
-msgstr "Ielīmēt celiņus"
+msgstr "Ielīmēt flīzes bitmasku"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Clear Tile Bitmask"
@@ -9323,14 +9255,12 @@ msgid "Make Polygon Concave"
msgstr ""
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Make Polygon Convex"
-msgstr "Izveidot"
+msgstr "Izveidot dadzstūra izliekumu"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Remove Tile"
-msgstr "Noņemt"
+msgstr "Noņemt flīzi"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Remove Collision Polygon"
@@ -9353,24 +9283,20 @@ msgid "Edit Tile Z Index"
msgstr ""
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Make Convex"
-msgstr "Izveidot"
+msgstr "Izveidot izliekumu"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Make Concave"
-msgstr "Izveidot"
+msgstr "Izveidot ieliekumu"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Create Collision Polygon"
-msgstr "Izveidot"
+msgstr "Izveidot sadursmes daudzstūri"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Create Occlusion Polygon"
-msgstr "Izveidot"
+msgstr "Izveidot oklūzijas daudzstūri"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "This property can't be changed."
@@ -9413,47 +9339,40 @@ msgid "Staging area"
msgstr ""
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Detect new changes"
-msgstr "Izveidot Jaunu %s"
+msgstr "Atrast jaunas izmaiņas"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Changes"
-msgstr "Nomainīt"
+msgstr "Maiņas"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Modified"
msgstr ""
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Renamed"
-msgstr "PÄrsaukt Audio Kopni"
+msgstr "PÄrsaukts"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Deleted"
-msgstr "Izdzēst"
+msgstr "Dzēsts"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Typechange"
-msgstr "Nomainīt"
+msgstr "Tipa maiņa"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Stage Selected"
-msgstr "Mēroga Izvēle"
+msgstr "Posma izvēle"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Stage All"
msgstr ""
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Commit Changes"
-msgstr "Nomainīt"
+msgstr "Pielietot izmaiņas"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "View file diffs before committing them to the latest version"
@@ -9500,9 +9419,8 @@ msgid "Add output port"
msgstr ""
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Change input port type"
-msgstr "Nomainīt %s Tipu"
+msgstr "MainÄ«t ienÄkoÅ¡a porta tipu"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Change output port type"
@@ -9517,14 +9435,12 @@ msgid "Change output port name"
msgstr ""
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Remove input port"
-msgstr "Noņemt Izvēlēto"
+msgstr "Noņemt ienÄkoÅ¡o portu"
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Remove output port"
-msgstr "Noņemt Izvēlēto"
+msgstr "Noņemt izejas portu"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Set expression"
@@ -9547,14 +9463,12 @@ msgid "Add Node to Visual Shader"
msgstr ""
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Node(s) Moved"
-msgstr "Mezgls Noņemts"
+msgstr "Mezgls(-i) pÄrvietots(-i)"
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Duplicate Nodes"
-msgstr "Dublicēt atslēgvietnes"
+msgstr "Dubliēt mezglus"
#: editor/plugins/visual_shader_editor_plugin.cpp
#: modules/visual_script/visual_script_editor.cpp
@@ -9562,9 +9476,8 @@ msgid "Paste Nodes"
msgstr ""
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Delete Nodes"
-msgstr "Izdzēst"
+msgstr "Dzēst mezglus"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Visual Shader Input Type Changed"
@@ -9591,9 +9504,8 @@ msgid "Show resulted shader code."
msgstr "AttÄ“lot rezultÄ“joÅ¡o Ä“notÄja kodu."
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Create Shader Node"
-msgstr "Izveidot Jaunu %s"
+msgstr "Izveidot Ä“notÄja mezglu"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Color function."
@@ -10282,9 +10194,8 @@ msgid "VisualShader"
msgstr ""
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Edit Visual Property:"
-msgstr "Ieslēgtie Mainīgie:"
+msgstr "Rediģēt vizuÄlo mainÄ«go:"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Visual Shader Mode Changed"
@@ -10451,7 +10362,7 @@ msgstr ""
#: editor/project_export.cpp
msgid "Manage Export Templates"
-msgstr ""
+msgstr "PÄrvaldÄ«t Eksporta Å ablonus"
#: editor/project_export.cpp
msgid "Export With Debug"
@@ -10462,9 +10373,8 @@ msgid "The path specified doesn't exist."
msgstr ""
#: editor/project_manager.cpp
-#, fuzzy
msgid "Error opening package file (it's not in ZIP format)."
-msgstr "Kļūme atverot arhÄ«vu failu, nav ZIP formÄtÄ."
+msgstr "Kļūme atverot paketes failu (tÄ nav ZIP formÄtÄ)."
#: editor/project_manager.cpp
msgid ""
@@ -10485,16 +10395,15 @@ msgstr ""
#: editor/project_manager.cpp
msgid "New Game Project"
-msgstr ""
+msgstr "Jauns spēles projekts"
#: editor/project_manager.cpp
msgid "Imported Project"
msgstr ""
#: editor/project_manager.cpp
-#, fuzzy
msgid "Invalid project name."
-msgstr "Nederīgs grupas nosaukums."
+msgstr "Nederīgs projekta nosaukums."
#: editor/project_manager.cpp
msgid "Couldn't create folder."
@@ -10540,7 +10449,7 @@ msgstr "Pakete instalēta sekmīgi!"
#: editor/project_manager.cpp
msgid "Rename Project"
-msgstr ""
+msgstr "PÄrsaukt Projektu"
#: editor/project_manager.cpp
msgid "Import Existing Project"
@@ -10564,7 +10473,7 @@ msgstr ""
#: editor/project_manager.cpp
msgid "Install & Edit"
-msgstr ""
+msgstr "Instalēt & Rediģēt"
#: editor/project_manager.cpp
msgid "Project Name:"
@@ -10572,11 +10481,11 @@ msgstr ""
#: editor/project_manager.cpp
msgid "Project Path:"
-msgstr ""
+msgstr "Projekta ceļš:"
#: editor/project_manager.cpp
msgid "Project Installation Path:"
-msgstr ""
+msgstr "Projekta instalÄcijas ceļš:"
#: editor/project_manager.cpp
msgid "Renderer:"
@@ -10616,7 +10525,7 @@ msgstr ""
#: editor/project_manager.cpp
msgid "Unnamed Project"
-msgstr ""
+msgstr "Nenosaukts Projekts"
#: editor/project_manager.cpp
msgid "Missing Project"
@@ -10688,7 +10597,7 @@ msgstr ""
#: editor/project_manager.cpp
msgid "Remove this project from the list?"
-msgstr ""
+msgstr "Noņemt šo projektu no saraksta?"
#: editor/project_manager.cpp
msgid ""
@@ -10714,60 +10623,52 @@ msgid "Project Manager"
msgstr ""
#: editor/project_manager.cpp
-#, fuzzy
msgid "Local Projects"
-msgstr "Projekta DibinÄtÄji"
+msgstr "LokÄlie projekti"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Loading, please wait..."
-msgstr "IelÄdÄ“t..."
+msgstr "IelÄdÄ“, lÅ«dzu uzgaidi..."
#: editor/project_manager.cpp
msgid "Last Modified"
msgstr ""
#: editor/project_manager.cpp
-#, fuzzy
msgid "Edit Project"
-msgstr "Projekta DibinÄtÄji"
+msgstr "Rediģēt Projektu"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Run Project"
-msgstr "Projekta DibinÄtÄji"
+msgstr "Palaist Projektu"
#: editor/project_manager.cpp
msgid "Scan"
-msgstr ""
+msgstr "Skenēt"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Scan Projects"
-msgstr "Projekta DibinÄtÄji"
+msgstr "Skenēt Projektu"
#: editor/project_manager.cpp
msgid "Select a Folder to Scan"
-msgstr ""
+msgstr "NorÄdÄ«t mapi kuru skenÄ“t"
#: editor/project_manager.cpp
msgid "New Project"
-msgstr ""
+msgstr "Jauns projekts"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Import Project"
-msgstr "Projekta DibinÄtÄji"
+msgstr "Importēt Projektu"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Remove Project"
-msgstr "Noņemt Punktu"
+msgstr "Noņemt Projektu"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Remove Missing"
-msgstr "Noņemt"
+msgstr "Noņemt trūkstošo"
#: editor/project_manager.cpp
msgid "About"
@@ -10775,34 +10676,35 @@ msgstr "Par"
#: editor/project_manager.cpp
msgid "Asset Library Projects"
-msgstr ""
+msgstr "Līdzekļu bibliotēkas projekti"
#: editor/project_manager.cpp
msgid "Restart Now"
-msgstr ""
+msgstr "Restartēt tagad"
#: editor/project_manager.cpp
msgid "Remove All"
-msgstr ""
+msgstr "Noņemt visu"
#: editor/project_manager.cpp
msgid "Also delete project contents (no undo!)"
-msgstr ""
+msgstr "Dzēst projekta saturu (nevar atsaukt)"
#: editor/project_manager.cpp
msgid "Can't run project"
-msgstr ""
+msgstr "Nevar palaist projektu"
#: editor/project_manager.cpp
msgid ""
"You currently don't have any projects.\n"
"Would you like to explore official example projects in the Asset Library?"
msgstr ""
+"Jums pašreiz nav neviena projekta.\n"
+"Vai vÄ“laties skatÄ«t oficiÄlos paraugu projektus LÄ«dzekļu bibliotÄ“kÄ ?"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Filter projects"
-msgstr "Projekta DibinÄtÄji"
+msgstr "Filtrēt projektus"
#: editor/project_manager.cpp
msgid ""
@@ -10812,12 +10714,12 @@ msgid ""
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Key "
+msgid "Physical Key"
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Physical Key"
-msgstr ""
+msgid "Key "
+msgstr "Taustiņš "
#: editor/project_settings_editor.cpp
msgid "Joy Button"
@@ -11004,9 +10906,8 @@ msgid "Override for Feature"
msgstr ""
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Add %d Translations"
-msgstr "Pievienot PÄreju"
+msgstr "Pievienot %d tulkojumus"
#: editor/project_settings_editor.cpp
msgid "Remove Translation"
@@ -11042,7 +10943,7 @@ msgstr ""
#: editor/project_settings_editor.cpp
msgid "Project Settings (project.godot)"
-msgstr ""
+msgstr "Projekta iestatījumi (project.godot)"
#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
msgid "General"
@@ -11058,16 +10959,15 @@ msgstr ""
#: editor/project_settings_editor.cpp
msgid "Input Map"
-msgstr ""
+msgstr "Ievade"
#: editor/project_settings_editor.cpp
msgid "Action:"
msgstr ""
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Action"
-msgstr "Visa Izvēle"
+msgstr "Darbība"
#: editor/project_settings_editor.cpp
msgid "Deadzone"
@@ -11083,7 +10983,7 @@ msgstr ""
#: editor/project_settings_editor.cpp
msgid "Localization"
-msgstr ""
+msgstr "LokalizÄcija"
#: editor/project_settings_editor.cpp
msgid "Translations"
@@ -11135,16 +11035,15 @@ msgstr ""
#: editor/project_settings_editor.cpp
msgid "Plugins"
-msgstr ""
+msgstr "Spraudņi"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Import Defaults"
-msgstr "IelÄdÄ“t NoklusÄ“jumu"
+msgstr "Importēt noklusējumus"
#: editor/property_editor.cpp
msgid "Preset..."
-msgstr ""
+msgstr "Priekš-iestatījums..."
#: editor/property_editor.cpp
msgid "Zero"
@@ -11203,9 +11102,8 @@ msgid "Batch Rename"
msgstr ""
#: editor/rename_dialog.cpp
-#, fuzzy
msgid "Replace:"
-msgstr "Aizvietot: "
+msgstr "Aizvietot:"
#: editor/rename_dialog.cpp
msgid "Prefix:"
@@ -11316,9 +11214,8 @@ msgid "To Uppercase"
msgstr ""
#: editor/rename_dialog.cpp
-#, fuzzy
msgid "Reset"
-msgstr "AtiestatÄ«t tÄlummaiņu"
+msgstr "Atiestatīt"
#: editor/rename_dialog.cpp
msgid "Regular Expression Error:"
@@ -11370,7 +11267,7 @@ msgstr ""
#: editor/scene_tree_dock.cpp
msgid "Error loading scene from %s"
-msgstr ""
+msgstr "Kļūda ielÄdÄ“jot ainu no %s"
#: editor/scene_tree_dock.cpp
msgid ""
@@ -11395,14 +11292,12 @@ msgid "Can't paste root node into the same scene."
msgstr ""
#: editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Paste Node(s)"
-msgstr "Dublicēt atslēgvietnes"
+msgstr "Ielīmēt mezglu(s)"
#: editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Detach Script"
-msgstr "Galvenais Skripts:"
+msgstr "Atvienot skriptu"
#: editor/scene_tree_dock.cpp
msgid "This operation can't be done on the tree root."
@@ -11437,9 +11332,8 @@ msgid "Make node as Root"
msgstr ""
#: editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Delete %d nodes and any children?"
-msgstr "Izdzēst %d mezglus?"
+msgstr "Dzēst %d mezglus un to bērnus?"
#: editor/scene_tree_dock.cpp
msgid "Delete %d nodes?"
@@ -11447,11 +11341,11 @@ msgstr "Izdzēst %d mezglus?"
#: editor/scene_tree_dock.cpp
msgid "Delete the root node \"%s\"?"
-msgstr ""
+msgstr "Dzēst saknes mezglu \"%s\"?"
#: editor/scene_tree_dock.cpp
msgid "Delete node \"%s\" and its children?"
-msgstr ""
+msgstr "DzÄ“st mezglu \"%s\" un tÄ bÄ“rnus?"
#: editor/scene_tree_dock.cpp
msgid "Delete node \"%s\"?"
@@ -11485,7 +11379,7 @@ msgstr ""
#: editor/scene_tree_dock.cpp
msgid "Save New Scene As..."
-msgstr ""
+msgstr "SaglabÄt jaunu ainu kÄ..."
#: editor/scene_tree_dock.cpp
msgid ""
@@ -11513,20 +11407,19 @@ msgstr "Izveidot Cilmes Mezglu:"
#: editor/scene_tree_dock.cpp
msgid "2D Scene"
-msgstr ""
+msgstr "2D Aina"
#: editor/scene_tree_dock.cpp
msgid "3D Scene"
-msgstr ""
+msgstr "3D Aina"
#: editor/scene_tree_dock.cpp
msgid "User Interface"
-msgstr ""
+msgstr "LietotÄja interfeiss"
#: editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Other Node"
-msgstr "Izdzēst"
+msgstr "Cits mezgls"
#: editor/scene_tree_dock.cpp
msgid "Can't operate on nodes from a foreign scene!"
@@ -11542,12 +11435,11 @@ msgstr ""
#: editor/scene_tree_dock.cpp
msgid "Attach Script"
-msgstr ""
+msgstr "Pievienot skriptu"
#: editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Cut Node(s)"
-msgstr "Dublicēt atslēgvietnes"
+msgstr "Izgriezt mezglu(s)"
#: editor/scene_tree_dock.cpp
msgid "Remove Node(s)"
@@ -11555,7 +11447,7 @@ msgstr ""
#: editor/scene_tree_dock.cpp
msgid "Change type of node(s)"
-msgstr ""
+msgstr "Mezgla(-u) tipa maiņa"
#: editor/scene_tree_dock.cpp
msgid ""
@@ -11596,7 +11488,7 @@ msgstr ""
#: editor/scene_tree_dock.cpp
msgid "Add Child Node"
-msgstr ""
+msgstr "Pievienot bērna mezglu"
#: editor/scene_tree_dock.cpp
msgid "Expand/Collapse All"
@@ -11604,12 +11496,11 @@ msgstr ""
#: editor/scene_tree_dock.cpp
msgid "Change Type"
-msgstr ""
+msgstr "Mainīt tipu"
#: editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Reparent to New Node"
-msgstr "Izveidot Jaunu %s"
+msgstr "Pakļaut zem jauna mezgla"
#: editor/scene_tree_dock.cpp
msgid "Make Scene Root"
@@ -11617,15 +11508,15 @@ msgstr ""
#: editor/scene_tree_dock.cpp
msgid "Merge From Scene"
-msgstr ""
+msgstr "SapludinÄt no ainas"
#: editor/scene_tree_dock.cpp editor/script_editor_debugger.cpp
msgid "Save Branch as Scene"
-msgstr ""
+msgstr "SaglabÄt zaru kÄ ainu"
#: editor/scene_tree_dock.cpp editor/script_editor_debugger.cpp
msgid "Copy Node Path"
-msgstr ""
+msgstr "Kopēt mezgla ceļu"
#: editor/scene_tree_dock.cpp
msgid "Delete (No Confirm)"
@@ -11643,7 +11534,7 @@ msgstr ""
#: editor/scene_tree_dock.cpp
msgid "Attach a new or existing script to the selected node."
-msgstr ""
+msgstr "Pievienot jaunu vai eksistējošu skriptu izvēlētajam mezglam."
#: editor/scene_tree_dock.cpp
msgid "Detach the script from the selected node."
@@ -11705,6 +11596,8 @@ msgid ""
"Node is in %s group(s).\n"
"Click to show groups dock."
msgstr ""
+"Mezgls ir %s grupÄs.\n"
+"Klikšķini, lai parÄdÄ«tu grupu doku."
#: editor/scene_tree_editor.cpp
msgid "Open Script:"
@@ -11724,7 +11617,7 @@ msgstr ""
#: editor/scene_tree_editor.cpp
msgid "Toggle Visibility"
-msgstr ""
+msgstr "PÄrslÄ“gt redzamÄ«bu"
#: editor/scene_tree_editor.cpp
msgid ""
@@ -11765,9 +11658,8 @@ msgid "Path is not local."
msgstr ""
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Invalid base path."
-msgstr "Nederīgs nosaukums."
+msgstr "NederÄ«gs bÄzes ceļš."
#: editor/script_create_dialog.cpp
msgid "A directory with the same name exists."
@@ -11778,9 +11670,8 @@ msgid "File does not exist."
msgstr ""
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Invalid extension."
-msgstr "Nederīgs fonta izmērs."
+msgstr "NederÄ«gs paplaÅ¡inÄjums."
#: editor/script_create_dialog.cpp
msgid "Wrong extension chosen."
@@ -11823,9 +11714,8 @@ msgid "Invalid path."
msgstr "Nederīgs ceļš."
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Invalid class name."
-msgstr "Nederīgs nosaukums."
+msgstr "Nederīgs klases nosaukums."
#: editor/script_create_dialog.cpp
msgid "Invalid inherited parent name or path."
@@ -11833,7 +11723,7 @@ msgstr ""
#: editor/script_create_dialog.cpp
msgid "Script path/name is valid."
-msgstr ""
+msgstr "Skripta ceļš/nosaukums ir derīgs."
#: editor/script_create_dialog.cpp
msgid "Allowed: a-z, A-Z, 0-9, _ and ."
@@ -11848,9 +11738,8 @@ msgid "Will create a new script file."
msgstr "Izveidos jaunu skripta failu."
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Will load an existing script file."
-msgstr "IelÄdÄ“t eksistÄ“joÅ¡u Kopnes IzkÄrtojumu."
+msgstr "IelÄdÄ“s eksistÄ“joÅ¡u skriptu."
#: editor/script_create_dialog.cpp
msgid "Script file already exists."
@@ -11870,20 +11759,19 @@ msgstr ""
#: editor/script_create_dialog.cpp
msgid "Class Name:"
-msgstr ""
+msgstr "Klases nosaukums:"
#: editor/script_create_dialog.cpp
msgid "Template:"
-msgstr ""
+msgstr "Å ablons:"
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Built-in Script:"
-msgstr "Savieno SignÄlu:"
+msgstr "Iebūvētais skripts:"
#: editor/script_create_dialog.cpp
msgid "Attach Node Script"
-msgstr ""
+msgstr "Pievienot mezgla skriptu"
#: editor/script_editor_debugger.cpp
msgid "Remote "
@@ -11898,9 +11786,8 @@ msgid "Warning:"
msgstr ""
#: editor/script_editor_debugger.cpp
-#, fuzzy
msgid "Error:"
-msgstr "Kļūme lÄdÄ“jot:"
+msgstr "Kļūda:"
#: editor/script_editor_debugger.cpp
msgid "C++ Error"
@@ -11911,9 +11798,8 @@ msgid "C++ Error:"
msgstr ""
#: editor/script_editor_debugger.cpp
-#, fuzzy
msgid "C++ Source"
-msgstr "Resurs"
+msgstr "C++ avots"
#: editor/script_editor_debugger.cpp
msgid "Source:"
@@ -11929,7 +11815,7 @@ msgstr ""
#: editor/script_editor_debugger.cpp
msgid "Errors"
-msgstr ""
+msgstr "Kļūdas"
#: editor/script_editor_debugger.cpp
msgid "Child process connected."
@@ -11948,9 +11834,8 @@ msgid "Video RAM"
msgstr ""
#: editor/script_editor_debugger.cpp
-#, fuzzy
msgid "Skip Breakpoints"
-msgstr "Izveidot"
+msgstr "Izlaist pÄrrÄvumpunktus"
#: editor/script_editor_debugger.cpp
msgid "Inspect Previous Instance"
@@ -12018,7 +11903,7 @@ msgstr ""
#: editor/script_editor_debugger.cpp
msgid "Misc"
-msgstr ""
+msgstr "Citi"
#: editor/script_editor_debugger.cpp
msgid "Clicked Control:"
@@ -12198,11 +12083,11 @@ msgstr ""
#: modules/gdnative/gdnative_library_singleton_editor.cpp
msgid "Library"
-msgstr ""
+msgstr "Bibliotēka"
#: modules/gdnative/gdnative_library_singleton_editor.cpp
msgid "Libraries: "
-msgstr ""
+msgstr "Bibliotēkas: "
#: modules/gdnative/register_types.cpp
msgid "GDNative"
@@ -12281,23 +12166,20 @@ msgid "GridMap Delete Selection"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "GridMap Fill Selection"
-msgstr "Visa Izvēle"
+msgstr "Režģkartes pildīšanas izvēle"
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "GridMap Paste Selection"
-msgstr "Visa Izvēle"
+msgstr "Režģkartes ielīmēšanas izvēle"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "GridMap Paint"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "GridMap Selection"
-msgstr "Visa Izvēle"
+msgstr "Režģkartes izvēle"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Grid Map"
@@ -12360,18 +12242,16 @@ msgid "Cursor Clear Rotation"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "Paste Selects"
-msgstr "Visa Izvēle"
+msgstr "Ielīmēt izvēlnes"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Clear Selection"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "Fill Selection"
-msgstr "Visa Izvēle"
+msgstr "Aizpildīt izvēlni"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "GridMap Settings"
@@ -12422,9 +12302,8 @@ msgid "Class name can't be a reserved keyword"
msgstr ""
#: modules/mono/csharp_script.cpp
-#, fuzzy
msgid "Build Solution"
-msgstr "Visa Izvēle"
+msgstr "BÅ«vÄ“t risinÄjumu"
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
@@ -12488,7 +12367,7 @@ msgstr ""
#: modules/recast/navigation_mesh_generator.cpp
msgid "Done!"
-msgstr ""
+msgstr "Darīts!"
#: modules/visual_script/visual_script.cpp
msgid ""
@@ -12549,21 +12428,16 @@ msgid "Add Output Port"
msgstr "Pievienot Izejas Pieslēgvietu"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Change Port Type"
-msgstr "Nomainīt %s Tipu"
+msgstr "Mainīt porta tipu"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Change Port Name"
-msgstr "Izmainīt masīva vērtību"
+msgstr "Mainīt porta nosaukumu"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Override an existing built-in function."
-msgstr ""
-"Nederīgs nosaukums. Nedrīkst sadurties ar eksistējošu iebūvēto tipa "
-"nosaukumu."
+msgstr "PÄrrakstÄ«t eksistÄ“joÅ¡u iebÅ«vÄ“to funkciju."
#: modules/visual_script/visual_script_editor.cpp
msgid "Create a new function."
@@ -12579,7 +12453,7 @@ msgstr "Izveidot jaunu mainīgo."
#: modules/visual_script/visual_script_editor.cpp
msgid "Signals:"
-msgstr ""
+msgstr "SignÄli:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Create a new signal."
@@ -12610,9 +12484,8 @@ msgid "Add Function"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Delete input port"
-msgstr "Noņemt Izvēlēto"
+msgstr "DzÄ“st ienÄkoÅ¡o portu"
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Variable"
@@ -12623,14 +12496,12 @@ msgid "Add Signal"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Remove Input Port"
-msgstr "Noņemt Izvēlēto"
+msgstr "Noņemt ienÄkoÅ¡o portu"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Remove Output Port"
-msgstr "Noņemt Izvēlēto"
+msgstr "Noņemt izejas portu"
#: modules/visual_script/visual_script_editor.cpp
msgid "Change Expression"
@@ -12673,9 +12544,8 @@ msgid "Add Preload Node"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Add Node(s)"
-msgstr "Pievienot Mezglus..."
+msgstr "Pievienot Mezglu(s)"
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Node(s) From Tree"
@@ -12712,9 +12582,8 @@ msgid "Connect Nodes"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Disconnect Nodes"
-msgstr "Savienot"
+msgstr "Atvienot mezglus"
#: modules/visual_script/visual_script_editor.cpp
msgid "Connect Node Data"
@@ -12761,9 +12630,8 @@ msgid "Try to only have one sequence input in selection."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Create Function"
-msgstr "Izveidot Jaunu %s"
+msgstr "Izveidot funkciju"
#: modules/visual_script/visual_script_editor.cpp
msgid "Remove Function"
@@ -12940,14 +12808,12 @@ msgid "Exporting APK..."
msgstr ""
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Uninstalling..."
-msgstr "Instalēt..."
+msgstr "Atinstalē..."
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Installing to device, please wait..."
-msgstr "IelÄdÄ“t..."
+msgstr "Instalē ierīcē, lūdzu uzgaidi..."
#: platform/android/export/export_plugin.cpp
msgid "Could not install to device: %s"
@@ -13146,9 +13012,8 @@ msgid ""
msgstr ""
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Package not found: %s"
-msgstr "AnimÄcija netika atrasta: '%s'"
+msgstr "Paka nav atrasta: %s"
#: platform/android/export/export_plugin.cpp
msgid "Creating APK..."
@@ -13169,9 +13034,8 @@ msgid ""
msgstr ""
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Adding files..."
-msgstr "Pievienot Mezglus..."
+msgstr "Failu pievienošana..."
#: platform/android/export/export_plugin.cpp
msgid "Could not export project files"
@@ -13246,9 +13110,8 @@ msgid "Error starting HTTP server:"
msgstr ""
#: platform/osx/export/export.cpp
-#, fuzzy
msgid "Invalid bundle identifier:"
-msgstr "Nederīgs Identifikators:"
+msgstr "Nederīgs bunduļa identifikators:"
#: platform/osx/export/export.cpp
msgid "Notarization: code signing required."
@@ -13267,34 +13130,28 @@ msgid "Notarization: Apple ID password not specified."
msgstr ""
#: platform/uwp/export/export.cpp
-#, fuzzy
msgid "Invalid package short name."
-msgstr "Nederīgs nosaukums."
+msgstr "Nederīgs paketes īsais nosaukums."
#: platform/uwp/export/export.cpp
-#, fuzzy
msgid "Invalid package unique name."
-msgstr "Nederīgs nosaukums."
+msgstr "NederÄ«gs paketes unikÄlais nosaukums."
#: platform/uwp/export/export.cpp
-#, fuzzy
msgid "Invalid package publisher display name."
-msgstr "Nederīgs nosaukums."
+msgstr "NederÄ«gs paketes izdevÄ“ja displeja vÄrds."
#: platform/uwp/export/export.cpp
-#, fuzzy
msgid "Invalid product GUID."
-msgstr "Nederīgs nosaukums."
+msgstr "Nederīgs produkta GUID."
#: platform/uwp/export/export.cpp
-#, fuzzy
msgid "Invalid publisher GUID."
-msgstr "Nederīgs fonta izmērs."
+msgstr "Nederīgs izdevēja GUID."
#: platform/uwp/export/export.cpp
-#, fuzzy
msgid "Invalid background color."
-msgstr "Nederīgs nosaukums."
+msgstr "NederÄ«ga fona krÄsa."
#: platform/uwp/export/export.cpp
msgid "Invalid Store Logo image dimensions (should be 50x50)."
@@ -13849,12 +13706,11 @@ msgstr ""
#: scene/animation/animation_tree.cpp
msgid "In node '%s', invalid animation: '%s'."
-msgstr ""
+msgstr "MezglÄ '%s', nederÄ«ga animÄcija: '%s'."
#: scene/animation/animation_tree.cpp
-#, fuzzy
msgid "Invalid animation: '%s'."
-msgstr "Nederīgs fonta izmērs."
+msgstr "NederÄ«ga animÄcija: '%s'."
#: scene/animation/animation_tree.cpp
msgid "Nothing connected to input '%s' of node '%s'."
@@ -13878,7 +13734,7 @@ msgstr ""
#: scene/animation/animation_tree_player.cpp
msgid "This node has been deprecated. Use AnimationTree instead."
-msgstr ""
+msgstr "Å is mezgls ir novecojis. TÄ vietÄ izmanto AnimationTree."
#: scene/gui/color_picker.cpp
msgid ""
@@ -13889,7 +13745,7 @@ msgstr ""
#: scene/gui/color_picker.cpp
msgid "Pick a color from the editor window."
-msgstr ""
+msgstr "IzvÄ“lÄ“ties krÄsu no redaktora loga."
#: scene/gui/color_picker.cpp
msgid "HSV"
@@ -13897,7 +13753,7 @@ msgstr ""
#: scene/gui/color_picker.cpp
msgid "Raw"
-msgstr ""
+msgstr "Jēls"
#: scene/gui/color_picker.cpp
msgid "Switch between hexadecimal and code values."
@@ -13926,15 +13782,15 @@ msgstr "BrÄ«dinÄjums!"
#: scene/gui/dialogs.cpp
msgid "Please Confirm..."
-msgstr "Lūdzu Apstipriniet..."
+msgstr "Lūdzu apstipriniet..."
#: scene/gui/file_dialog.cpp
msgid "Must use a valid extension."
-msgstr ""
+msgstr "JÄbÅ«t derÄ«gai galotnei."
#: scene/gui/graph_edit.cpp
msgid "Enable grid minimap."
-msgstr ""
+msgstr "Iespējot režģa minikarti."
#: scene/gui/nine_patch_rect.cpp
msgid ""
@@ -13950,6 +13806,9 @@ msgid ""
"functions. Making them visible for editing is fine, but they will hide upon "
"running."
msgstr ""
+"UznirstoÅ¡ie logi ir paslÄ“pti pÄ“c noklusÄ“juma, lai tos parÄdÄ«tu, izmanto ."
+"popup() vai jebkuru no to funkcijÄm. PadarÄ«t tos redzamus rediģēšanai ir "
+"labi, bet tie tiks paslēpti pēc palaišanas."
#: scene/gui/range.cpp
msgid "If \"Exp Edit\" is enabled, \"Min Value\" must be greater than 0."
@@ -13971,6 +13830,8 @@ msgid ""
"Default Environment as specified in Project Settings (Rendering -> "
"Environment -> Default Environment) could not be loaded."
msgstr ""
+"NoklusÄ“juma vide, kas norÄdÄ«ta projekta iestatÄ«jumos, nevar tikt ielÄdÄ“ta. "
+"(Projekta iestatījumi -> Renderēšana -> vide -> noklusējuma vide)."
#: scene/main/timer.cpp
msgid ""
@@ -14005,19 +13866,16 @@ msgid ""
msgstr ""
#: scene/resources/visual_shader_nodes.cpp
-#, fuzzy
msgid "Invalid source for preview."
-msgstr "Nederīgs fonta izmērs."
+msgstr "Nederīgs avots priekšskatījumam."
#: scene/resources/visual_shader_nodes.cpp
-#, fuzzy
msgid "Invalid source for shader."
-msgstr "Nederīgs fonta izmērs."
+msgstr "NederÄ«gs fÄ“notÄja avots."
#: scene/resources/visual_shader_nodes.cpp
-#, fuzzy
msgid "Invalid comparison function for that type."
-msgstr "Nederīgs fonta izmērs."
+msgstr "NederÄ«gs funkcijas salÄ«dzinÄjums tÄs tipam."
#: servers/visual/shader_language.cpp
msgid "Varying may not be assigned in the '%s' function."
@@ -14049,7 +13907,7 @@ msgstr ""
#: servers/visual/shader_language.cpp
msgid "Constants cannot be modified."
-msgstr ""
+msgstr "Konstantes nevar pÄrveidot."
#~ msgid "Package Contents:"
#~ msgstr "Paketes Saturs:"
diff --git a/editor/translations/mi.po b/editor/translations/mi.po
index b51c143856..6afda28ec5 100644
--- a/editor/translations/mi.po
+++ b/editor/translations/mi.po
@@ -7406,11 +7406,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
@@ -10584,11 +10584,11 @@ msgid ""
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Key "
+msgid "Physical Key"
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Physical Key"
+msgid "Key "
msgstr ""
#: editor/project_settings_editor.cpp
diff --git a/editor/translations/mk.po b/editor/translations/mk.po
index d9663ce943..93b4e2afe1 100644
--- a/editor/translations/mk.po
+++ b/editor/translations/mk.po
@@ -4,19 +4,20 @@
# This file is distributed under the same license as the Godot source code.
#
# Kristijan Fremen Velkovski <me@krisfremen.com>, 2021.
+# Denis <densisman@gmail.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2021-01-22 10:21+0000\n"
-"Last-Translator: Kristijan Fremen Velkovski <me@krisfremen.com>\n"
+"PO-Revision-Date: 2021-11-18 13:37+0000\n"
+"Last-Translator: Denis <densisman@gmail.com>\n"
"Language-Team: Macedonian <https://hosted.weblate.org/projects/godot-engine/"
"godot/mk/>\n"
"Language: mk\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=2; plural=n==1 || n%10==1 ? 0 : 1;\n"
-"X-Generator: Weblate 4.5-dev\n"
+"X-Generator: Weblate 4.9.1-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -39,7 +40,7 @@ msgstr "Ðевалидено внеÑување %i (не додадено) во
#: core/math/expression.cpp
msgid "self can't be used because instance is null (not passed)"
-msgstr "self неможе да Ñе кориÑти зашто инÑтанцата е нула(не дадена)"
+msgstr "Ñелф не може да Ñе кориÑти бидејќи инÑтанцата е нула (не минува)"
#: core/math/expression.cpp
msgid "Invalid operands to operator %s, %s and %s."
@@ -220,7 +221,7 @@ msgstr ""
#: editor/animation_track_editor.cpp
msgid "Add Track"
-msgstr ""
+msgstr "Додади Лента"
#: editor/animation_track_editor.cpp
msgid "Animation Looping"
@@ -1796,7 +1797,7 @@ msgstr ""
#: editor/editor_feature_profile.cpp editor/editor_node.cpp
#: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp
msgid "Import"
-msgstr ""
+msgstr "Импортирај"
#: editor/editor_feature_profile.cpp editor/project_export.cpp
msgid "Export"
@@ -2204,7 +2205,7 @@ msgstr ""
#: editor/editor_network_profiler.cpp editor/editor_node.cpp
msgid "Node"
-msgstr ""
+msgstr "Јазол"
#: editor/editor_network_profiler.cpp
msgid "Incoming RPC"
@@ -7421,11 +7422,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
@@ -10599,11 +10600,11 @@ msgid ""
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Key "
+msgid "Physical Key"
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Physical Key"
+msgid "Key "
msgstr ""
#: editor/project_settings_editor.cpp
diff --git a/editor/translations/ml.po b/editor/translations/ml.po
index 21a19ba01b..7fcb0ea508 100644
--- a/editor/translations/ml.po
+++ b/editor/translations/ml.po
@@ -7430,11 +7430,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
@@ -10609,11 +10609,11 @@ msgid ""
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Key "
+msgid "Physical Key"
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Physical Key"
+msgid "Key "
msgstr ""
#: editor/project_settings_editor.cpp
diff --git a/editor/translations/mr.po b/editor/translations/mr.po
index 0d02f7b34a..8b63ae3338 100644
--- a/editor/translations/mr.po
+++ b/editor/translations/mr.po
@@ -7419,11 +7419,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
@@ -10601,11 +10601,11 @@ msgid ""
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Key "
+msgid "Physical Key"
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Physical Key"
+msgid "Key "
msgstr ""
#: editor/project_settings_editor.cpp
diff --git a/editor/translations/ms.po b/editor/translations/ms.po
index cc9f6f797b..a6c0097736 100644
--- a/editor/translations/ms.po
+++ b/editor/translations/ms.po
@@ -7704,11 +7704,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
@@ -10969,11 +10969,11 @@ msgid ""
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Key "
+msgid "Physical Key"
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Physical Key"
+msgid "Key "
msgstr ""
#: editor/project_settings_editor.cpp
diff --git a/editor/translations/nb.po b/editor/translations/nb.po
index 660c01fed9..0a8064f763 100644
--- a/editor/translations/nb.po
+++ b/editor/translations/nb.po
@@ -18,13 +18,15 @@
# Patrick Sletvold <patricksletvold@hotmail.com>, 2021.
# Kristoffer <kskau93@gmail.com>, 2021.
# Lili Zoey <sayaks1@gmail.com>, 2021.
+# slasken06 <ask.skivdal@gmail.com>, 2021.
+# Daniel Skogly <daniel@klungo.no>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-08-12 21:32+0000\n"
-"Last-Translator: Petter Reinholdtsen <pere-weblate@hungry.com>\n"
+"PO-Revision-Date: 2021-11-03 13:15+0000\n"
+"Last-Translator: Daniel Skogly <daniel@klungo.no>\n"
"Language-Team: Norwegian Bokmål <https://hosted.weblate.org/projects/godot-"
"engine/godot/nb_NO/>\n"
"Language: nb\n"
@@ -32,7 +34,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.8-dev\n"
+"X-Generator: Weblate 4.9-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -8080,15 +8082,15 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Set Rest Pose to Bones"
+msgstr ""
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
#, fuzzy
msgid "Create Rest Pose from Bones"
msgstr "Fjern Ben"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
-msgstr ""
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
#, fuzzy
msgid "Skeleton2D"
msgstr "Singleton"
@@ -11532,11 +11534,11 @@ msgid ""
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Key "
+msgid "Physical Key"
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Physical Key"
+msgid "Key "
msgstr ""
#: editor/project_settings_editor.cpp
diff --git a/editor/translations/nl.po b/editor/translations/nl.po
index abbf9a02bf..669ed2e73d 100644
--- a/editor/translations/nl.po
+++ b/editor/translations/nl.po
@@ -50,13 +50,14 @@
# Hugo van de Kuilen <hugo.vandekuilen1234567890@gmail.com>, 2021.
# tobeqz <vanveenjorik+tobeqz@gmail.com>, 2021.
# Edgar <Edgar@anotherfoxguy.com>, 2021.
+# Daan van Luijk <daanvl@outlook.be>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-10-04 13:31+0000\n"
-"Last-Translator: Edgar <Edgar@anotherfoxguy.com>\n"
+"PO-Revision-Date: 2021-11-07 22:23+0000\n"
+"Last-Translator: Daan van Luijk <daanvl@outlook.be>\n"
"Language-Team: Dutch <https://hosted.weblate.org/projects/godot-engine/godot/"
"nl/>\n"
"Language: nl\n"
@@ -419,9 +420,8 @@ msgstr "node '%s'"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "animation"
-msgstr "Animatie"
+msgstr "animatie"
#: editor/animation_track_editor.cpp
msgid "AnimationPlayer can't animate itself, only other players."
@@ -990,9 +990,8 @@ msgid "Edit..."
msgstr "Bewerken..."
#: editor/connections_dialog.cpp
-#, fuzzy
msgid "Go to Method"
-msgstr "Naar methode springen"
+msgstr "Ga naar methode"
#: editor/create_dialog.cpp
msgid "Change %s Type"
@@ -1788,6 +1787,8 @@ msgstr "Laat u 3D scenes weergeven en bewerken."
#: editor/editor_feature_profile.cpp
msgid "Allows to edit scripts using the integrated script editor."
msgstr ""
+"Staat toe het script aan te passen door middel van de geïntegreerde script "
+"editor"
#: editor/editor_feature_profile.cpp
msgid "Provides built-in access to the Asset Library."
@@ -1814,13 +1815,12 @@ msgid ""
msgstr ""
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "(current)"
-msgstr "(Huidig)"
+msgstr "(huidig)"
#: editor/editor_feature_profile.cpp
msgid "(none)"
-msgstr ""
+msgstr "(geen)"
#: editor/editor_feature_profile.cpp
msgid "Remove currently selected profile, '%s'? Cannot be undone."
@@ -2170,7 +2170,7 @@ msgstr "Thema-eigenschappen"
#: editor/editor_help.cpp
msgid "Enumerations"
-msgstr "Enumeratie"
+msgstr "Enumeraties"
#: editor/editor_help.cpp editor/plugins/theme_editor_plugin.cpp
msgid "Constants"
@@ -7840,14 +7840,14 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr "Dit skelet heeft geen botten, maak een aantal Bone2D-knopen als kind."
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
-msgstr "CreëerRest Pose vanuit botten"
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Set Rest Pose to Bones"
msgstr "Botten in rusthouding zetten"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Create Rest Pose from Bones"
+msgstr "CreëerRest Pose vanuit botten"
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Skeleton2D"
msgstr "Skeleton2D"
@@ -11316,14 +11316,14 @@ msgstr ""
"`/` karakter bevatten."
#: editor/project_settings_editor.cpp
-msgid "Key "
-msgstr "Toets "
-
-#: editor/project_settings_editor.cpp
msgid "Physical Key"
msgstr ""
#: editor/project_settings_editor.cpp
+msgid "Key "
+msgstr "Toets "
+
+#: editor/project_settings_editor.cpp
msgid "Joy Button"
msgstr "Controllerknop"
diff --git a/editor/translations/or.po b/editor/translations/or.po
index 00e5009221..202b73cddc 100644
--- a/editor/translations/or.po
+++ b/editor/translations/or.po
@@ -7412,11 +7412,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
@@ -10590,11 +10590,11 @@ msgid ""
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Key "
+msgid "Physical Key"
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Physical Key"
+msgid "Key "
msgstr ""
#: editor/project_settings_editor.cpp
diff --git a/editor/translations/pl.po b/editor/translations/pl.po
index 5c55b0c86f..2ca074c533 100644
--- a/editor/translations/pl.po
+++ b/editor/translations/pl.po
@@ -50,12 +50,14 @@
# Suchy Talerz <kacperkubis06@gmail.com>, 2021.
# Bartosz Stasiak <bs97086@amu.edu.pl>, 2021.
# Marek Malaria <to.tylko.dla.kont@gmail.com>, 2021.
+# Mateusz Żak <matisgramy@gmail.com>, 2021.
+# voltinus <voltinusmail@gmail.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-10-06 00:12+0000\n"
+"PO-Revision-Date: 2021-10-31 22:17+0000\n"
"Last-Translator: Tomek <kobewi4e@gmail.com>\n"
"Language-Team: Polish <https://hosted.weblate.org/projects/godot-engine/"
"godot/pl/>\n"
@@ -2439,9 +2441,8 @@ msgstr ""
"(instancjonowanie lub dziedziczenie) nie są spełnione."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Could not save one or more scenes!"
-msgstr "Nie można zapisać zkonwertowanej tekstury:"
+msgstr "Nie można zapisać jednej lub więcej scen!"
#: editor/editor_node.cpp
msgid "Save All Scenes"
@@ -2585,7 +2586,7 @@ msgstr "Zapisać zmiany w \"%s\" przed zamknięciem?"
#: editor/editor_node.cpp
msgid "%s no longer exists! Please specify a new save location."
-msgstr ""
+msgstr "%s już nie istnieje! Określ nową lokalizację zapisu."
#: editor/editor_node.cpp
msgid ""
@@ -4425,6 +4426,10 @@ msgid ""
"Selecting another resource in the FileSystem dock without clicking Reimport "
"first will discard changes made in the Import dock."
msgstr ""
+"Masz niezapisane zmiany, które nie zostały jeszcze zastosowane. Kliknij "
+"Importuj ponownie, aby zastosować zmiany dokonane w ustawieniach importu.\n"
+"Wybranie innego zasobu w systemie plików bez kliknięcia wpierw Importuj "
+"ponownie odrzuci zmiany dokonane w imporcie."
#: editor/import_dock.cpp
msgid "Import As:"
@@ -7398,12 +7403,10 @@ msgid "Move Down"
msgstr "Przesuń w dół"
#: editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Next Script"
msgstr "Następny skrypt"
#: editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Previous Script"
msgstr "Poprzedni skrypt"
@@ -7757,14 +7760,14 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr "Ten szkielet nie ma kości. Stwórz jakieś węzły potomne Bone2D."
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
-msgstr "Utwórz pozę spoczynkową z kości"
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Set Rest Pose to Bones"
msgstr "Ustaw kościom pozę spoczynkową"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Create Rest Pose from Bones"
+msgstr "Utwórz pozę spoczynkową z kości"
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Skeleton2D"
msgstr "Szkielet 2D"
@@ -7821,9 +7824,8 @@ msgid "Left Orthogonal"
msgstr "Lewo ortogonalnie"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Left Perspective"
-msgstr "Perspektywa"
+msgstr "Perspektywa z Lewej"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right Orthogonal"
@@ -8182,24 +8184,23 @@ msgstr "Widok z prawej"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Orbit View Down"
-msgstr ""
+msgstr "Orbituj widok w dół"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Orbit View Left"
-msgstr ""
+msgstr "Orbituj widok w lewo"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Orbit View Right"
-msgstr ""
+msgstr "Orbituj widok w prawo"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Orbit View Up"
-msgstr "Widok z przodu"
+msgstr "Widok Orbitalny z Góry"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Orbit View 180"
-msgstr ""
+msgstr "Orbituj widok o 180"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Switch Perspective/Orthogonal View"
@@ -11120,14 +11121,14 @@ msgstr ""
"przynajmniej jeden znak \"/\"."
#: editor/project_settings_editor.cpp
-msgid "Key "
-msgstr "Klawisz "
-
-#: editor/project_settings_editor.cpp
msgid "Physical Key"
msgstr "Fizyczny klawisz"
#: editor/project_settings_editor.cpp
+msgid "Key "
+msgstr "Klawisz "
+
+#: editor/project_settings_editor.cpp
msgid "Joy Button"
msgstr "Przycisk joysticka"
@@ -14508,6 +14509,10 @@ msgid ""
"Consider using a script's process loop instead of relying on a Timer for "
"very low wait times."
msgstr ""
+"Bardzo niskie czasy czekania (< 0,05 sekund) mogą zachowywać się znacząco "
+"różnie w zależności od częstotliwości klatek renderowania lub fizyki\n"
+"Rozważ użycie pętli procesowej w skrypcie zamiast polegać na Timerze dla "
+"bardzo niskich czasów czekania."
#: scene/main/viewport.cpp
msgid ""
@@ -14522,11 +14527,12 @@ msgstr ""
"przyporządkuj jego teksturę dla któregoś węzła."
#: scene/main/viewport.cpp
-#, fuzzy
msgid ""
"The Viewport size must be greater than or equal to 2 pixels on both "
"dimensions to render anything."
-msgstr "Rozmiar węzła Viewport musi być większy niż 0, by coś wyrenderować."
+msgstr ""
+"Wielkość Viewportu musi być większa lub równa 2 piksele w obu wymiarach, by "
+"cokolwiek renderować."
#: scene/resources/occluder_shape.cpp
msgid "OccluderShapeSphere Set Spheres"
diff --git a/editor/translations/pr.po b/editor/translations/pr.po
index 9ea671ae8f..7d84259d58 100644
--- a/editor/translations/pr.po
+++ b/editor/translations/pr.po
@@ -7680,11 +7680,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
@@ -11005,11 +11005,11 @@ msgid ""
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Key "
+msgid "Physical Key"
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Physical Key"
+msgid "Key "
msgstr ""
#: editor/project_settings_editor.cpp
diff --git a/editor/translations/pt.po b/editor/translations/pt.po
index e78f560111..58f22f48ae 100644
--- a/editor/translations/pt.po
+++ b/editor/translations/pt.po
@@ -24,7 +24,7 @@ msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-10-21 10:31+0000\n"
+"PO-Revision-Date: 2021-11-07 09:45+0000\n"
"Last-Translator: João Lopes <linux-man@hotmail.com>\n"
"Language-Team: Portuguese <https://hosted.weblate.org/projects/godot-engine/"
"godot/pt/>\n"
@@ -3058,7 +3058,7 @@ msgstr ""
#: editor/editor_node.cpp
msgid "Synchronize Scene Changes"
-msgstr "Sincronizar Alterações de Cena"
+msgstr "Sincronizar Alterações da Cena"
#: editor/editor_node.cpp
msgid ""
@@ -7733,14 +7733,14 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr "Este esqueleto não tem ossos, crie alguns nós filhos Bone2D."
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
-msgstr "Criar Pose de Descanso a partir de Ossos"
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Set Rest Pose to Bones"
msgstr "Definir Pose de Descanso para Ossos"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Create Rest Pose from Bones"
+msgstr "Criar Pose de Descanso a partir de Ossos"
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Skeleton2D"
msgstr "Esqueleto2D"
@@ -11087,14 +11087,14 @@ msgstr ""
"pelo menos um caráter `/`."
#: editor/project_settings_editor.cpp
-msgid "Key "
-msgstr "Tecla "
-
-#: editor/project_settings_editor.cpp
msgid "Physical Key"
msgstr "Chave Física"
#: editor/project_settings_editor.cpp
+msgid "Key "
+msgstr "Tecla "
+
+#: editor/project_settings_editor.cpp
msgid "Joy Button"
msgstr "Botão do joystick"
diff --git a/editor/translations/pt_BR.po b/editor/translations/pt_BR.po
index 9e7d53c52e..cf6ec219e1 100644
--- a/editor/translations/pt_BR.po
+++ b/editor/translations/pt_BR.po
@@ -125,13 +125,17 @@
# Zenvasca <zenvasca@gmail.com>, 2021.
# Wladimir Roberto Barbosa <wladrbarbosa@gmail.com>, 2021.
# Mário Victor Ribeiro Silva <mariovictorrs@gmail.com>, 2021.
+# jak3z <jose_renato06@outlook.com>, 2021.
+# Henrique Darko <henridark00@gmail.com>, 2021.
+# Cearaj <pmoraisleal@gmail.com>, 2021.
+# Alefy San <alefyferreiradeoliveira@outlook.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: 2016-05-30\n"
-"PO-Revision-Date: 2021-10-21 10:31+0000\n"
-"Last-Translator: Mário Victor Ribeiro Silva <mariovictorrs@gmail.com>\n"
+"PO-Revision-Date: 2021-11-15 21:14+0000\n"
+"Last-Translator: Alefy San <alefyferreiradeoliveira@outlook.com>\n"
"Language-Team: Portuguese (Brazil) <https://hosted.weblate.org/projects/"
"godot-engine/godot/pt_BR/>\n"
"Language: pt_BR\n"
@@ -139,7 +143,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 4.9-dev\n"
+"X-Generator: Weblate 4.9.1-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -488,7 +492,7 @@ msgstr "Inserir Anim"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
msgid "node '%s'"
-msgstr "nodo '%s'"
+msgstr "nó '%s'"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
@@ -551,7 +555,7 @@ msgstr "Não é possível adicionar uma nova trilha sem uma raiz"
#: editor/animation_track_editor.cpp
msgid "Invalid track for Bezier (no suitable sub-properties)"
-msgstr "Trilha inválida para Bézier (sem subpropriedades adequadas)"
+msgstr "Trilha inválida para Bézier (sem sub-propriedades adequadas)"
#: editor/animation_track_editor.cpp
msgid "Add Bezier Track"
@@ -576,7 +580,7 @@ msgstr "Adicionar Trilha Chave"
#: editor/animation_track_editor.cpp
msgid "Track path is invalid, so can't add a method key."
msgstr ""
-"Caminho da trilha é inválido,então não pode adicionar uma chave de método."
+"Caminho da trilha é inválido, então não pode adicionar uma chave de método."
#: editor/animation_track_editor.cpp
msgid "Add Method Track Key"
@@ -607,7 +611,8 @@ msgstr "Alterar Escala das Chaves na Anim"
msgid ""
"This option does not work for Bezier editing, as it's only a single track."
msgstr ""
-"Essa opção não funciona para edição por Bezier,pois é apenas uma faixa única."
+"Essa opção não funciona para edição por Bézier, pois é apenas uma trilha "
+"única."
#: editor/animation_track_editor.cpp
msgid ""
@@ -3791,9 +3796,8 @@ msgid "There are no mirrors available."
msgstr "Não há espelhos disponíveis."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Retrieving the mirror list..."
-msgstr "Reconectando, por favor aguarde."
+msgstr "Reconectando a lista de espelhos..."
#: editor/export_template_manager.cpp
msgid "Starting the download..."
@@ -3853,7 +3857,6 @@ msgid "Error getting the list of mirrors."
msgstr "Erro ao obter a lista de espelhos."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Error parsing JSON with the list of mirrors. Please report this issue!"
msgstr ""
"Erro ao analisar o JSON da lista de espelhos. Por favor, reporte este "
@@ -3942,9 +3945,8 @@ msgid "Importing:"
msgstr "Importando:"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Remove templates for the version '%s'?"
-msgstr "Remover versão '%s' do modelo?"
+msgstr "Remover modelo para a versão '%s'?"
#: editor/export_template_manager.cpp
msgid "Uncompressing Android Build Sources"
@@ -3982,9 +3984,8 @@ msgid "Uninstall"
msgstr "Desinstalar"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Uninstall templates for the current version."
-msgstr "Valor inicial para o contador"
+msgstr "Desinstalar modelos da versão atual."
#: editor/export_template_manager.cpp
msgid "Download from:"
@@ -3995,9 +3996,8 @@ msgid "Open in Web Browser"
msgstr "Abrir no Navegador"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Copy Mirror URL"
-msgstr "Copiar Erro"
+msgstr "Copiar URL do Espelho"
#: editor/export_template_manager.cpp
msgid "Download and Install"
@@ -4022,9 +4022,8 @@ msgid "Install from File"
msgstr "Instalar a Partir do Arquivo"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Install templates from a local file."
-msgstr "Importar Modelos de um Arquivo ZIP"
+msgstr "Importar modelos de um arquivo local."
#: editor/export_template_manager.cpp editor/find_in_files.cpp
#: editor/progress_dialog.cpp scene/gui/dialogs.cpp
@@ -4032,9 +4031,8 @@ msgid "Cancel"
msgstr "Cancelar"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Cancel the download of the templates."
-msgstr "Não se pôde abrir zip dos modelos de exportação."
+msgstr "Cancelar o download dos modelos."
#: editor/export_template_manager.cpp
msgid "Other Installed Versions:"
@@ -4226,14 +4224,12 @@ msgid "Sort by Type (Descending)"
msgstr "Ordenar por Tipo (Descendente)"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Sort by Last Modified"
-msgstr "Ultima Modificação"
+msgstr "Ordenar por Último Modificado"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Sort by First Modified"
-msgstr "Ultima Modificação"
+msgstr "Ordenar por Primeiro Modificado"
#: editor/filesystem_dock.cpp
msgid "Duplicate..."
@@ -4495,7 +4491,7 @@ msgstr "Salvando..."
#: editor/import_defaults_editor.cpp
msgid "Select Importer"
-msgstr "Selecione o arquivo para importar"
+msgstr "Selecione Importador"
#: editor/import_defaults_editor.cpp
msgid "Importer:"
@@ -4532,6 +4528,11 @@ msgid ""
"Selecting another resource in the FileSystem dock without clicking Reimport "
"first will discard changes made in the Import dock."
msgstr ""
+"Você tem mudanças pendentes que não foram aplicadas ainda. Clique em "
+"Reimportar para aplicar as mudanças feitas nas opções de importação.\n"
+"Selecionado outro recurso no painel do Sistema de Arquivos sem ter clicado "
+"em Reimportar primeiro ira descartar as mudanças feitas no painel de "
+"Importar."
#: editor/import_dock.cpp
msgid "Import As:"
@@ -4592,21 +4593,18 @@ msgid "Save As..."
msgstr "Salvar Como..."
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Extra resource options."
-msgstr "Não está no caminho de recursos."
+msgstr "Opções de recursos extras."
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Edit Resource from Clipboard"
-msgstr "Editar Ãrea de Transferência de Recursos"
+msgstr "Editar Recursos da Ãrea de Transferência"
#: editor/inspector_dock.cpp
msgid "Copy Resource"
msgstr "Copiar Recurso"
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Make Resource Built-In"
msgstr "Tornar Embutido"
@@ -4635,9 +4633,8 @@ msgid "Filter properties"
msgstr "Filtrar propriedades"
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Manage object properties."
-msgstr "Propriedades do objeto."
+msgstr "Gerenciar propriedades do objeto."
#: editor/inspector_dock.cpp
msgid "Changes may be lost!"
@@ -5676,13 +5673,13 @@ msgstr ""
"Salve sua cena e tente novamente."
#: editor/plugins/baked_lightmap_editor_plugin.cpp
-#, fuzzy
msgid ""
"No meshes to bake. Make sure they contain an UV2 channel and that the 'Use "
"In Baked Light' and 'Generate Lightmap' flags are on."
msgstr ""
-"Não há malhas para preparar. Certifique-se de que elas possuem um canal UV2 "
-"e que a propriedade \"Preparar Luz\" está habilitada."
+"Não há malhas para pré-calcular. Certifique-se de que elas possuem um canal "
+"UV2 e que as propriedades \"Use In Baked Light\" e \"Generate Lightmap\" "
+"está habilitada."
#: editor/plugins/baked_lightmap_editor_plugin.cpp
msgid "Failed creating lightmap images, make sure path is writable."
@@ -5730,7 +5727,7 @@ msgstr "Configurar o Snap"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Grid Offset:"
-msgstr "Deslocamento da grade:"
+msgstr "Deslocamento da Grade:"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Grid Step:"
@@ -5746,7 +5743,7 @@ msgstr "passos"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Rotation Offset:"
-msgstr "Deslocamento de rotação:"
+msgstr "Deslocamento de Rotação:"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Rotation Step:"
@@ -5826,15 +5823,13 @@ msgstr "Mover CanvaItem \"%s\" para (%d, %d)"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Locked"
msgstr "Fixar Seleção"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Grouped"
-msgstr "Grupo"
+msgstr "Agrupado"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
@@ -5938,13 +5933,13 @@ msgstr "Alterar Âncoras"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid ""
"Project Camera Override\n"
"Overrides the running project's camera with the editor viewport camera."
msgstr ""
-"Sobrepor Câmera de Jogo\n"
-"Sobrepõe a câmera de jogo com a janela de exibição da câmera."
+"Sobrepor câmera do projeto.\n"
+"Sobrepõe a câmera do projeto em execução com a câmera da janela de exibição "
+"do editor."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -5953,6 +5948,9 @@ msgid ""
"No project instance running. Run the project from the editor to use this "
"feature."
msgstr ""
+"Sobrepor câmera do projeto.\n"
+"Sem instâncias do projeto em execução. Execute o projeto pelo editor para "
+"usar essa funcionalidade."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -5984,7 +5982,7 @@ msgstr "Limpar Guias"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Create Custom Bone(s) from Node(s)"
-msgstr "Criar esqueleto(s) customizado(s) do(s) nó(s)"
+msgstr "Criar Esqueleto(s) Customizado(s) a partir do(s) Nó(s)"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Clear Bones"
@@ -6020,25 +6018,23 @@ msgstr "Modo de Seleção"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Drag: Rotate selected node around pivot."
-msgstr "Remover nó ou trilha selecionada."
+msgstr "Arrastar: Gire nó em tono do pivô."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Alt+Drag: Move selected node."
msgstr "Alt+Arrastar: Mover nó selecionado."
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "V: Set selected node's pivot position."
-msgstr "Remover nó ou trilha selecionada."
+msgstr "V: Define a posição do pivô do nó selecionado."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Alt+RMB: Show list of all nodes at position clicked, including locked."
msgstr ""
-"Alt+BDM: Mostra uma lista de todos os nodes na posição clicada, incluindo "
-"os bloqueados."
+"Alt+Botão Direito do Mouse: Mostrar a lista de todos os nós na posição "
+"clicada, incluindo os bloqueados."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "RMB: Add node at position clicked."
@@ -6582,9 +6578,8 @@ msgid "Couldn't create a single convex collision shape."
msgstr "Não foi possível criar uma forma de colisão convexa simples."
#: editor/plugins/mesh_instance_editor_plugin.cpp
-#, fuzzy
msgid "Create Simplified Convex Shape"
-msgstr "Criar Forma(s) Convexa(s) Simples"
+msgstr "Criar Forma(s) Convexa(s) Simplificadas"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Single Convex Shape"
@@ -6619,9 +6614,8 @@ msgid "No mesh to debug."
msgstr "Nenhuma malha para depurar."
#: editor/plugins/mesh_instance_editor_plugin.cpp
-#, fuzzy
msgid "Mesh has no UV in layer %d."
-msgstr "Modelo não tem uma UV nesta camada"
+msgstr "Modelo não tem UV na camada %d."
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "MeshInstance lacks a Mesh!"
@@ -6686,9 +6680,8 @@ msgstr ""
"Esta é a opção mais rápida (mas menos precisa) para detecção de colisão."
#: editor/plugins/mesh_instance_editor_plugin.cpp
-#, fuzzy
msgid "Create Simplified Convex Collision Sibling"
-msgstr "Criar um irmão de Colisão Convexa"
+msgstr "Criar Colisão Convexa Simplificada Irmã"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid ""
@@ -6705,14 +6698,14 @@ msgid "Create Multiple Convex Collision Siblings"
msgstr "Criar Múltipla Colisão Convexa Irmã(s)"
#: editor/plugins/mesh_instance_editor_plugin.cpp
-#, fuzzy
msgid ""
"Creates a polygon-based collision shape.\n"
"This is a performance middle-ground between a single convex collision and a "
"polygon-based collision."
msgstr ""
-"Cria um polígono base de colisão forma.\n"
-"Este é um meio-termo entre as duas opções acima."
+"Cria uma forma de colisão baseada em polígonos.\n"
+"Este é um meio-termo em desempenho entre uma única colisão convexa e uma "
+"colisão baseada em polígono."
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Outline Mesh..."
@@ -6779,14 +6772,12 @@ msgid "Remove Selected Item"
msgstr "Remover Item Selecionado"
#: editor/plugins/mesh_library_editor_plugin.cpp
-#, fuzzy
msgid "Import from Scene (Ignore Transforms)"
-msgstr "Importar da Cena"
+msgstr "Importar da Cena (Ignora Transforms)"
#: editor/plugins/mesh_library_editor_plugin.cpp
-#, fuzzy
msgid "Import from Scene (Apply Transforms)"
-msgstr "Importar da Cena"
+msgstr "Importar da Cena (Aplica Transforms)"
#: editor/plugins/mesh_library_editor_plugin.cpp
msgid "Update from Scene"
@@ -7134,7 +7125,7 @@ msgid ""
"viewport."
msgstr ""
"Polygon2D tem vértices internos, portanto não pode mais ser editado na "
-"viewport."
+"janela de exibição."
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Create Polygon & UV"
@@ -7365,24 +7356,20 @@ msgid "ResourcePreloader"
msgstr "ResourcePreloader"
#: editor/plugins/room_manager_editor_plugin.cpp
-#, fuzzy
msgid "Flip Portals"
msgstr "Inverter Horizontalmente"
#: editor/plugins/room_manager_editor_plugin.cpp
-#, fuzzy
msgid "Room Generate Points"
-msgstr "Gerar Contagem de Pontos:"
+msgstr "Gerar Contagem de Pontos"
#: editor/plugins/room_manager_editor_plugin.cpp
-#, fuzzy
msgid "Generate Points"
-msgstr "Gerar Contagem de Pontos:"
+msgstr "Gerar Pontos"
#: editor/plugins/room_manager_editor_plugin.cpp
-#, fuzzy
msgid "Flip Portal"
-msgstr "Inverter Horizontalmente"
+msgstr "Virar Portal"
#: editor/plugins/room_manager_editor_plugin.cpp
#, fuzzy
@@ -7882,26 +7869,24 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr "Este esqueleto não tem ossos, crie alguns nós filhos Bone2D."
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
-msgstr "Criar postura de descanso para os Ossos"
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Set Rest Pose to Bones"
msgstr "Definir a postura de repouso para os Ossos"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Create Rest Pose from Bones"
+msgstr "Criar postura de descanso para os Ossos"
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Skeleton2D"
msgstr "Esqueleto2D"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-#, fuzzy
msgid "Reset to Rest Pose"
-msgstr "Definir os ossos para descansar Pose"
+msgstr "Redefinir para Pose de Descanso"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-#, fuzzy
msgid "Overwrite Rest Pose"
-msgstr "Sobrescrever Cena Existente"
+msgstr "Sobrescrever Pose de Descanso"
#: editor/plugins/skeleton_editor_plugin.cpp
msgid "Create physical bones"
@@ -7928,74 +7913,62 @@ msgid "Perspective"
msgstr "Perspectiva"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Top Orthogonal"
-msgstr "Ortogonal"
+msgstr "Ortogonal Topo"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Top Perspective"
-msgstr "Perspectiva"
+msgstr "Perspectiva Topo"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Bottom Orthogonal"
-msgstr "Ortogonal"
+msgstr "Ortogonal Baixo"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Bottom Perspective"
-msgstr "Perspectiva"
+msgstr "Perspectiva Baixo"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Left Orthogonal"
-msgstr "Ortogonal"
+msgstr "Ortogonal Esquerda"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Left Perspective"
-msgstr "Perspectiva"
+msgstr "Perspectiva Esquerda"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Right Orthogonal"
-msgstr "Ortogonal"
+msgstr "Ortogonal Direita"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Right Perspective"
-msgstr "Perspectiva"
+msgstr "Perspectiva Direita"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Front Orthogonal"
-msgstr "Ortogonal"
+msgstr "Ortogonal Dianteira"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Front Perspective"
-msgstr "Perspectiva"
+msgstr "Perspectiva Dianteira"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Rear Orthogonal"
-msgstr "Ortogonal"
+msgstr "Ortogonal Traseira"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Rear Perspective"
-msgstr "Perspectiva"
+msgstr "Perspectiva Traseira"
#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
#: editor/plugins/spatial_editor_plugin.cpp
msgid " [auto]"
-msgstr ""
+msgstr " [automático]"
#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
#: editor/plugins/spatial_editor_plugin.cpp
msgid " [portals active]"
-msgstr ""
+msgstr " [portais ativados]"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
@@ -8057,9 +8030,8 @@ msgid "Animation Key Inserted."
msgstr "Chave de Animação Inserida."
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Pitch:"
-msgstr "Tom"
+msgstr "Tom:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Yaw:"
@@ -8253,9 +8225,8 @@ msgstr ""
"Ele não deve ser usado como indicação confiável de desempenho do jogo."
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Convert Rooms"
-msgstr "Converter Para %s"
+msgstr "Converter Salas"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "XForm Dialog"
@@ -8277,9 +8248,8 @@ msgstr ""
"x\")."
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Snap Nodes to Floor"
-msgstr "Encaixar Nó(s) no Chão"
+msgstr "Atrair Nó(s) ao Chão"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Couldn't find a solid floor to snap the selection to."
@@ -8295,7 +8265,7 @@ msgstr "Use Encaixar"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Converts rooms for portal culling."
-msgstr ""
+msgstr "Converter salas para portal culling."
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Bottom View"
@@ -8323,15 +8293,15 @@ msgstr "Visão Direita"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Orbit View Down"
-msgstr ""
+msgstr "Vista Órbita Baixo"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Orbit View Left"
-msgstr ""
+msgstr "Vista Órbita Esquerda"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Orbit View Right"
-msgstr ""
+msgstr "Vista Órbita Direita"
#: editor/plugins/spatial_editor_plugin.cpp
#, fuzzy
@@ -8340,7 +8310,7 @@ msgstr "Visão Frontal"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Orbit View 180"
-msgstr ""
+msgstr "Vista Órbita 180"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Switch Perspective/Orthogonal View"
@@ -8741,65 +8711,56 @@ msgid "TextureRegion"
msgstr "Região da Textura"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Colors"
-msgstr "Cor"
+msgstr "Cores"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Fonts"
-msgstr "Fonte"
+msgstr "Fontes"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Icons"
-msgstr "Ãcone"
+msgstr "Ãcones"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Styleboxes"
-msgstr "StyleBox"
+msgstr "Styleboxes"
#: editor/plugins/theme_editor_plugin.cpp
msgid "{num} color(s)"
-msgstr ""
+msgstr "{num} cor(es)"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "No colors found."
-msgstr "Nenhum sub-recurso encontrado."
+msgstr "Nenhuma cor encontrada."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "{num} constant(s)"
-msgstr "Constantes"
+msgstr "{num} constante(s)"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "No constants found."
-msgstr "Cor constante."
+msgstr "Nenhuma constante encontrada."
#: editor/plugins/theme_editor_plugin.cpp
msgid "{num} font(s)"
-msgstr ""
+msgstr "{num} fonte(s)"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "No fonts found."
-msgstr "Não encontrado!"
+msgstr "Fontes não encontradas."
#: editor/plugins/theme_editor_plugin.cpp
msgid "{num} icon(s)"
-msgstr ""
+msgstr "{num} ícone(s)"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "No icons found."
-msgstr "Não encontrado!"
+msgstr "Ãcones não encontrados."
#: editor/plugins/theme_editor_plugin.cpp
msgid "{num} stylebox(es)"
-msgstr ""
+msgstr "{num} stylebox(es)"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -8808,98 +8769,87 @@ msgstr "Nenhum sub-recurso encontrado."
#: editor/plugins/theme_editor_plugin.cpp
msgid "{num} currently selected"
-msgstr ""
+msgstr "{num} selecionado(s)"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Nothing was selected for the import."
-msgstr ""
+msgstr "Nada foi selecionado para a importação."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Importing Theme Items"
-msgstr "Importar Tema"
+msgstr "Importando Tema"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Importing items {n}/{n}"
-msgstr ""
+msgstr "Importando itens {n}/{n}"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Updating the editor"
-msgstr "Sair do editor?"
+msgstr "Atualizando o editor"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Finalizing"
-msgstr "Analisando"
+msgstr "Finalizando"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Filter:"
-msgstr "Filtro: "
+msgstr "Filtro:"
#: editor/plugins/theme_editor_plugin.cpp
msgid "With Data"
-msgstr ""
+msgstr "Com Dados"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select by data type:"
-msgstr "Selecione um Nó"
+msgstr "Selecione por tipo de dados:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select all visible color items."
-msgstr "Selecione um item de configuração primeiro!"
+msgstr "Selecione todos os itens de cor visíveis."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible color items and their data."
-msgstr ""
+msgstr "Selecione todos os itens de cor visíveis e seus dados."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Deselect all visible color items."
-msgstr ""
+msgstr "Desmarque todos os itens de cor visíveis."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select all visible constant items."
-msgstr "Selecione um item de configuração primeiro!"
+msgstr "Selecione todos os itens constantes visíveis."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible constant items and their data."
-msgstr ""
+msgstr "Selecione todos os itens constantes visíveis e seus dados."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Deselect all visible constant items."
-msgstr ""
+msgstr "Desmarque todos os itens constantes visíveis."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select all visible font items."
-msgstr "Selecione um item de configuração primeiro!"
+msgstr "Selecione todos os itens de fonte visíveis."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible font items and their data."
-msgstr ""
+msgstr "Selecione todos os itens de fonte visíveis e seus dados."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Deselect all visible font items."
-msgstr ""
+msgstr "Desmarque todos os itens de fonte visíveis."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select all visible icon items."
-msgstr "Selecione um item de configuração primeiro!"
+msgstr "Selecione todos os itens de ícones visíveis."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select all visible icon items and their data."
-msgstr "Selecione um item de configuração primeiro!"
+msgstr "Selecione todos os itens de ícones visíveis e seus dados."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Deselect all visible icon items."
-msgstr "Selecione um item de configuração primeiro!"
+msgstr "Desmarque todos os itens de ícones visíveis."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible stylebox items."
@@ -8922,42 +8872,36 @@ msgstr ""
"do recurso do Tema."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Collapse types."
-msgstr "Recolher Tudo"
+msgstr "Recolher tudo."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Expand types."
-msgstr "Expandir Tudo"
+msgstr "Expandir tudo."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select all Theme items."
-msgstr "Selecionar o Arquivo de Modelo"
+msgstr "Selecionar todos os itens do Tema."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select With Data"
-msgstr "Selecionar Pontos"
+msgstr "Selecionar Com Dados"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all Theme items with item data."
msgstr "Selecionar todos os itens do Tema com dados."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Deselect All"
-msgstr "Selecionar tudo"
+msgstr "Desmarcar Tudo"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Deselect all Theme items."
msgstr "Desselecionar todos os itens do Tema."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Import Selected"
-msgstr "Importar Cena"
+msgstr "Importar Selecionado"
#: editor/plugins/theme_editor_plugin.cpp
msgid ""
@@ -8974,273 +8918,240 @@ msgid ""
"Select a theme type from the list to edit its items.\n"
"You can add a custom type or import a type with its items from another theme."
msgstr ""
+"Selecione um modelo de tema da lista para editar seus itens.\n"
+"Você pode adicionar um modelo personalizado ou importar um modelo com itens "
+"de outro tema."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove All Color Items"
-msgstr "Remover Todos os Itens"
+msgstr "Remover Todos os Itens de Cor"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Rename Item"
-msgstr "Remover Item"
+msgstr "Renomear Item"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove All Constant Items"
-msgstr "Remover Todos os Itens"
+msgstr "Remover Todos os Itens de Constante"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove All Font Items"
-msgstr "Remover Todos os Itens"
+msgstr "Remover Todos os Itens de Fonte"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove All Icon Items"
-msgstr "Remover Todos os Itens"
+msgstr "Remover Todos os Itens de Ãcone"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
msgid "Remove All StyleBox Items"
-msgstr "Remover Todos os Itens"
+msgstr "Remover Todos os Itens de StyleBox"
#: editor/plugins/theme_editor_plugin.cpp
msgid ""
"This theme type is empty.\n"
"Add more items to it manually or by importing from another theme."
msgstr ""
-"Este tipo de tema está vazio.\n"
+"Este modelo de tema está vazio.\n"
"Adicione mais itens manualmente ou importe de outro tema."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Color Item"
-msgstr "Adicionar Itens de Classe"
+msgstr "Adicionar Itens de Cor"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Constant Item"
-msgstr "Adicionar Itens de Classe"
+msgstr "Adicionar Item de Constante"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Font Item"
-msgstr "Adicionar Item"
+msgstr "Adicionar Item de Fonte"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Icon Item"
-msgstr "Adicionar Item"
+msgstr "Adicionar Item de Ãcone"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
msgid "Add Stylebox Item"
-msgstr "Adicionar Todos os Itens"
+msgstr "Adicionar Item de Stylebox"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Rename Color Item"
-msgstr "Remover Itens de Classe"
+msgstr "Renomear Item de Cor"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Rename Constant Item"
-msgstr "Remover Itens de Classe"
+msgstr "Renomear Item de Constante"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Rename Font Item"
-msgstr "Renomear Nó"
+msgstr "Renomear Item de Fonte"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Rename Icon Item"
-msgstr "Renomear Nó"
+msgstr "Renomear Item de Ãcone"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
msgid "Rename Stylebox Item"
-msgstr "Remover Item Selecionado"
+msgstr "Renomear Item de Stylebox"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Invalid file, not a Theme resource."
-msgstr "Arquivo inválido, não é um layout de canais de áudio."
+msgstr "Arquivo inválido, não é um recurso de Tema."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Invalid file, same as the edited Theme resource."
-msgstr ""
+msgstr "Arquivo inválido, é o mesmo recurso de Tema sendo editado."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Manage Theme Items"
-msgstr "Gerenciar Templates"
+msgstr "Gerenciar Itens do Tema"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Edit Items"
-msgstr "Item Editável"
+msgstr "Editar Itens"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Types:"
-msgstr "Tipo:"
+msgstr "Modelos:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Type:"
-msgstr "Tipo:"
+msgstr "Adicionar Modelo:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Item:"
-msgstr "Adicionar Item"
+msgstr "Adicionar Item:"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
msgid "Add StyleBox Item"
-msgstr "Adicionar Todos os Itens"
+msgstr "Adicionar Item de Stylebox"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove Items:"
-msgstr "Remover Item"
+msgstr "Remover Itens:"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Remove Class Items"
msgstr "Remover Itens de Classe"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove Custom Items"
-msgstr "Remover Itens de Classe"
+msgstr "Remover Itens Personalizados"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Remove All Items"
msgstr "Remover Todos os Itens"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Theme Item"
-msgstr "Itens do Tema de GUI"
+msgstr "Adicionar Item de Tema"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Old Name:"
-msgstr "Nome do Nó:"
+msgstr "Nome Antigo:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Import Items"
-msgstr "Importar Tema"
+msgstr "Importar Itens"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Default Theme"
-msgstr "Padrão"
+msgstr "Tema Padrão"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Editor Theme"
-msgstr "Editar Tema"
+msgstr "Tema do Editor"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select Another Theme Resource:"
-msgstr "Excluir Recurso"
+msgstr "Selecionar Outro Recurso de Tema:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Another Theme"
-msgstr "Importar Tema"
+msgstr "Outro Tema"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Confirm Item Rename"
-msgstr "Renomear Trilha na Anim"
+msgstr "Confirmar Renomeação do Item"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Cancel Item Rename"
-msgstr "Renomear em lote"
+msgstr "Cancelar Renomeação do Item"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Override Item"
-msgstr "Sobrescreve"
+msgstr "Sobrescrever Item"
#: editor/plugins/theme_editor_plugin.cpp
+#, fuzzy
msgid "Unpin this StyleBox as a main style."
-msgstr ""
+msgstr "Desafixar essa StyleBox do estilo principal."
#: editor/plugins/theme_editor_plugin.cpp
+#, fuzzy
msgid ""
"Pin this StyleBox as a main style. Editing its properties will update the "
"same properties in all other StyleBoxes of this type."
msgstr ""
+"Fixar essa StyleBox como estilo principal. Editar suas propriedades vai "
+"atualizar as mesmas propriedades em todas as outras StyleBoxes desse modelo."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Type"
-msgstr "Tipo"
+msgstr "Adicionar Modelo"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Item Type"
-msgstr "Adicionar Item"
+msgstr "Adicionar Tipo de Item"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Node Types:"
-msgstr "Tipo de nó"
+msgstr "Tipos de Nó:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Show Default"
-msgstr "Carregar Padrão"
+msgstr "Mostrar Padrão"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Show default type items alongside items that have been overridden."
msgstr ""
+"Mostrar itens do modelo padrão ao lado de itens que foram substituídos."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Override All"
-msgstr "Sobrescreve"
+msgstr "Substituir Todos"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Override all default type items."
-msgstr ""
+msgstr "Substituir todos os itens do modelo padrão."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Theme:"
-msgstr "Tema"
+msgstr "Tema:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Manage Items..."
-msgstr "Gerenciar Modelos de Exportação..."
+msgstr "Gerenciar Itens..."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Add, remove, organize and import Theme items."
-msgstr ""
+msgstr "Adicionar, remover, organizar e importar itens de Tema."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Preview"
-msgstr "Visualização"
+msgstr "Adicionar Prévia"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Default Preview"
-msgstr "Atualizar visualização"
+msgstr "Prévia Padrão"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select UI Scene:"
-msgstr "Selecione uma Malha de origem:"
+msgstr "Selecione a Cena de UI:"
#: editor/plugins/theme_editor_preview.cpp
msgid ""
@@ -9336,19 +9247,19 @@ msgstr "Tem,Muitas,Opções"
#: editor/plugins/theme_editor_preview.cpp
msgid "Invalid path, the PackedScene resource was probably moved or removed."
msgstr ""
+"Caminho inválido, o recurso PackedScene foi provavelmente movido ou deletado."
#: editor/plugins/theme_editor_preview.cpp
msgid "Invalid PackedScene resource, must have a Control node at its root."
-msgstr ""
+msgstr "Recurso PackedScene inválido, se deve ter um nó Control na sua raíz."
#: editor/plugins/theme_editor_preview.cpp
-#, fuzzy
msgid "Invalid file, not a PackedScene resource."
-msgstr "Arquivo inválido, não é um layout de canais de áudio."
+msgstr "Arquivo inválido, não é um recurso PackedScene."
#: editor/plugins/theme_editor_preview.cpp
msgid "Reload the scene to reflect its most actual state."
-msgstr ""
+msgstr "Recarregue a cena para refletir seu estado mais atual."
#: editor/plugins/tile_map_editor_plugin.cpp
msgid "Erase Selection"
@@ -10744,9 +10655,8 @@ msgid "VisualShader"
msgstr "VisualShader"
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Edit Visual Property:"
-msgstr "Editar Propriedade Visual"
+msgstr "Editar Propriedade Visual:"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Visual Shader Mode Changed"
@@ -10874,9 +10784,8 @@ msgid "Script"
msgstr "Roteiro"
#: editor/project_export.cpp
-#, fuzzy
msgid "GDScript Export Mode:"
-msgstr "Modo de Exportação de Scripts:"
+msgstr "Modo de Exportação do GDScript:"
#: editor/project_export.cpp
msgid "Text"
@@ -10884,7 +10793,7 @@ msgstr "Texto"
#: editor/project_export.cpp
msgid "Compiled Bytecode (Faster Loading)"
-msgstr ""
+msgstr "Bytecode Compilado (Carregamento Mais Rápido)"
#: editor/project_export.cpp
msgid "Encrypted (Provide Key Below)"
@@ -11199,12 +11108,11 @@ msgstr "Tem certeza de que quer executar %d projetos ao mesmo tempo?"
#: editor/project_manager.cpp
#, fuzzy
msgid "Remove %d projects from the list?"
-msgstr "Selecione um dispositivo da lista"
+msgstr "Remover projetos %d da lista?"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Remove this project from the list?"
-msgstr "Selecione um dispositivo da lista"
+msgstr "Remover esse projeto da lista?"
#: editor/project_manager.cpp
msgid ""
@@ -11238,9 +11146,8 @@ msgid "Project Manager"
msgstr "Gerenciador de Projetos"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Local Projects"
-msgstr "Projetos"
+msgstr "Projetos Locais"
#: editor/project_manager.cpp
msgid "Loading, please wait..."
@@ -11251,9 +11158,8 @@ msgid "Last Modified"
msgstr "Ultima Modificação"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Edit Project"
-msgstr "Exportar Projeto"
+msgstr "Editar Projeto"
#: editor/project_manager.cpp
#, fuzzy
@@ -11265,9 +11171,8 @@ msgid "Scan"
msgstr "Escanear"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Scan Projects"
-msgstr "Projetos"
+msgstr "Escanear Projetos"
#: editor/project_manager.cpp
msgid "Select a Folder to Scan"
@@ -11278,14 +11183,12 @@ msgid "New Project"
msgstr "Novo Projeto"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Import Project"
-msgstr "Projeto Importado"
+msgstr "Importar Projeto"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Remove Project"
-msgstr "Renomear Projeto"
+msgstr "Remover Projeto"
#: editor/project_manager.cpp
msgid "Remove Missing"
@@ -11296,9 +11199,8 @@ msgid "About"
msgstr "Sobre"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Asset Library Projects"
-msgstr "Biblioteca de Assets"
+msgstr "Projetos da Biblioteca de Recursos"
#: editor/project_manager.cpp
msgid "Restart Now"
@@ -11310,7 +11212,7 @@ msgstr "Remover Tudo"
#: editor/project_manager.cpp
msgid "Also delete project contents (no undo!)"
-msgstr ""
+msgstr "Também deletar os conteúdos do projeto (não se pode desfazer!)"
#: editor/project_manager.cpp
msgid "Can't run project"
@@ -11325,9 +11227,8 @@ msgstr ""
"Gostaria de explorar projetos de exemplo oficiais na Asset Library?"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Filter projects"
-msgstr "Filtrar propriedades"
+msgstr "Filtrar Projetos"
#: editor/project_manager.cpp
#, fuzzy
@@ -11342,12 +11243,12 @@ msgstr ""
"conter pelo menos um caractere `/`."
#: editor/project_settings_editor.cpp
-msgid "Key "
-msgstr "Tecla "
+msgid "Physical Key"
+msgstr "Tecla Física"
#: editor/project_settings_editor.cpp
-msgid "Physical Key"
-msgstr ""
+msgid "Key "
+msgstr "Tecla "
#: editor/project_settings_editor.cpp
msgid "Joy Button"
@@ -11394,8 +11295,9 @@ msgid "Device"
msgstr "Dispositivo"
#: editor/project_settings_editor.cpp
+#, fuzzy
msgid " (Physical)"
-msgstr ""
+msgstr " Físico"
#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
msgid "Press a Key..."
@@ -11538,9 +11440,8 @@ msgid "Override for Feature"
msgstr "Sobrescrever para Funcionalidade"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Add %d Translations"
-msgstr "Adicionar Tradução"
+msgstr "Adicionar %d Traduções"
#: editor/project_settings_editor.cpp
msgid "Remove Translation"
@@ -11998,12 +11899,15 @@ msgstr "Excluir o nó \"%s\"?"
msgid ""
"Saving the branch as a scene requires having a scene open in the editor."
msgstr ""
+"Para salvar o ramo como cena é necessário ter uma cena aberta no editor."
#: editor/scene_tree_dock.cpp
msgid ""
"Saving the branch as a scene requires selecting only one node, but you have "
"selected %d nodes."
msgstr ""
+"Para salvar o ramo como cena é necessário selecionar apenas um nó, mas você "
+"selecionou %d nós."
#: editor/scene_tree_dock.cpp
msgid ""
@@ -12425,6 +12329,8 @@ msgid ""
"Warning: Having the script name be the same as a built-in type is usually "
"not desired."
msgstr ""
+"Aviso: É geralmente indesejável que o nome do script seja o mesmo que o de "
+"um tipo embutido."
#: editor/script_create_dialog.cpp
msgid "Class Name:"
@@ -12496,7 +12402,7 @@ msgstr "Copiar Erro"
#: editor/script_editor_debugger.cpp
msgid "Open C++ Source on GitHub"
-msgstr ""
+msgstr "Abrir Código C++ no GitHub"
#: editor/script_editor_debugger.cpp
msgid "Video RAM"
@@ -12810,9 +12716,8 @@ msgid "Export Mesh GLTF2"
msgstr "Exportar Biblioteca de Malhas"
#: modules/gltf/editor_scene_exporter_gltf_plugin.cpp
-#, fuzzy
msgid "Export GLTF..."
-msgstr "Exportar..."
+msgstr "Exportar GLTF..."
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
@@ -12980,9 +12885,8 @@ msgid "Class name can't be a reserved keyword"
msgstr "Nome da classe não pode ser uma palavra reservada"
#: modules/mono/csharp_script.cpp
-#, fuzzy
msgid "Build Solution"
-msgstr "Seleção de preenchimento"
+msgstr "Construir Solução"
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
@@ -13521,7 +13425,7 @@ msgstr "Carregando, por favor aguarde."
#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not install to device: %s"
-msgstr "Não foi possível instanciar cena!"
+msgstr "Não foi possível instalar para o dispositivo: %s"
#: platform/android/export/export_plugin.cpp
msgid "Running on device..."
@@ -13648,7 +13552,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
-msgstr ""
+msgstr "Assinando depuração %s..."
#: platform/android/export/export_plugin.cpp
msgid "Signing release %s..."
@@ -13657,11 +13561,11 @@ msgstr "Assinando lançamento %s..."
#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not find keystore, unable to export."
-msgstr "Não foi possível abrir o modelo para exportar:"
+msgstr "Não foi possível encontrar a keystore, incapaz de exportar."
#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
-msgstr ""
+msgstr "'apksigner' retornou com o erro #%d"
#: platform/android/export/export_plugin.cpp
msgid "Verifying %s..."
@@ -13669,7 +13573,7 @@ msgstr "Verificando %s..."
#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
-msgstr ""
+msgstr "A verificação de 'apksigner' de %s falhou."
#: platform/android/export/export_plugin.cpp
msgid "Exporting for Android"
@@ -13689,7 +13593,7 @@ msgstr "Nome de arquivo inválido! Android APK requer a extensão *.apk."
#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
-msgstr ""
+msgstr "Formato de Exportação Não Suportado\n"
#: platform/android/export/export_plugin.cpp
msgid ""
@@ -13716,6 +13620,8 @@ msgstr ""
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
+"Incapaz de sobrescrever os arquivos res://android/build/res/*.xml com o nome "
+"do projeto"
#: platform/android/export/export_plugin.cpp
msgid "Could not export project files to gradle project\n"
@@ -13723,9 +13629,8 @@ msgstr ""
"Não foi possível exportar os arquivos do projeto ao projeto do gradle\n"
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Could not write expansion package file!"
-msgstr "Não foi possível escrever o arquivo:"
+msgstr "Não foi possível escrever o arquivo do pacote de expansão!"
#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
@@ -13757,9 +13662,8 @@ msgid "Package not found: %s"
msgstr "Pacote não encontrado: '%s'"
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Creating APK..."
-msgstr "Criando contornos..."
+msgstr "Criando APK..."
#: platform/android/export/export_plugin.cpp
msgid ""
@@ -13782,13 +13686,12 @@ msgid "Adding files..."
msgstr "Adicionando arquivos..."
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Could not export project files"
-msgstr "Não foi possível escrever o arquivo:"
+msgstr "Não foi possível exportar os arquivos do projeto"
#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
-msgstr ""
+msgstr "Alinhando APK..."
#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
@@ -13840,9 +13743,8 @@ msgid "Could not write file:"
msgstr "Não foi possível escrever o arquivo:"
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Could not read file:"
-msgstr "Não foi possível escrever o arquivo:"
+msgstr "Não foi possível ler o arquivo:"
#: platform/javascript/export/export.cpp
#, fuzzy
@@ -13857,7 +13759,7 @@ msgstr "Não foi possível criar a pasta."
#: platform/javascript/export/export.cpp
#, fuzzy
msgid "Error starting HTTP server:"
-msgstr "Erro ao salvar cena."
+msgstr "Erro iniciando servidor HTTP:"
#: platform/osx/export/export.cpp
#, fuzzy
@@ -14408,11 +14310,11 @@ msgstr ""
#: scene/3d/portal.cpp
msgid "A Room should not be a child or grandchild of a Portal."
-msgstr ""
+msgstr "Um Room não deve ser filho ou neto de um Portal."
#: scene/3d/portal.cpp
msgid "A RoomGroup should not be a child or grandchild of a Portal."
-msgstr ""
+msgstr "Um RoomGroup não deve ser filho ou neto de um Portal."
#: scene/3d/remote_transform.cpp
msgid ""
@@ -14424,15 +14326,15 @@ msgstr ""
#: scene/3d/room.cpp
msgid "A Room cannot have another Room as a child or grandchild."
-msgstr ""
+msgstr "Um Room não pode ter outro Room como filho ou neto."
#: scene/3d/room.cpp
msgid "The RoomManager should not be placed inside a Room."
-msgstr ""
+msgstr "O RoomManager não deve ser colocado dentro de um Room."
#: scene/3d/room.cpp
msgid "A RoomGroup should not be placed inside a Room."
-msgstr ""
+msgstr "Um RoomGroup não deve ser colocado dentro de um Room."
#: scene/3d/room.cpp
msgid ""
@@ -14442,7 +14344,7 @@ msgstr ""
#: scene/3d/room_group.cpp
msgid "The RoomManager should not be placed inside a RoomGroup."
-msgstr ""
+msgstr "O RoomManager não deve ser colocado dentro de um RoomGroup."
#: scene/3d/room_manager.cpp
msgid "The RoomList has not been assigned."
@@ -14450,7 +14352,7 @@ msgstr ""
#: scene/3d/room_manager.cpp
msgid "The RoomList node should be a Spatial (or derived from Spatial)."
-msgstr ""
+msgstr "O nó RoomList deve ser Spatial(ou derivado de Spatial)."
#: scene/3d/room_manager.cpp
msgid ""
@@ -14460,7 +14362,7 @@ msgstr ""
#: scene/3d/room_manager.cpp
msgid "There should only be one RoomManager in the SceneTree."
-msgstr ""
+msgstr "Só Deve existir um RoomManager na SceneTree."
#: scene/3d/room_manager.cpp
msgid ""
@@ -14470,7 +14372,7 @@ msgstr ""
#: scene/3d/room_manager.cpp
msgid "RoomList contains no Rooms, aborting."
-msgstr ""
+msgstr "A RoomList não contem Rooms, abortando."
#: scene/3d/room_manager.cpp
msgid "Misnamed nodes detected, check output log for details. Aborting."
@@ -14729,12 +14631,12 @@ msgstr ""
"render e atribua sua textura interna a algum nó para exibir."
#: scene/main/viewport.cpp
-#, fuzzy
msgid ""
"The Viewport size must be greater than or equal to 2 pixels on both "
"dimensions to render anything."
msgstr ""
-"O tamanho da Viewport deve ser maior do que 0 para renderizar qualquer coisa."
+"O tamanho do Viewport deve ser maior ou igual a 2 pixels em ambas as "
+"dimensões para renderizar algo."
#: scene/resources/occluder_shape.cpp
msgid "OccluderShapeSphere Set Spheres"
@@ -14779,7 +14681,7 @@ msgstr ""
#: servers/visual/shader_language.cpp
msgid "Fragment-stage varying could not been accessed in custom function!"
-msgstr ""
+msgstr "Variante Fragment-stage não pôde ser acessada na função personalizada!"
#: servers/visual/shader_language.cpp
msgid "Assignment to function."
diff --git a/editor/translations/ro.po b/editor/translations/ro.po
index 12102e12dc..9a45a6ca63 100644
--- a/editor/translations/ro.po
+++ b/editor/translations/ro.po
@@ -15,13 +15,14 @@
# f0roots <f0rootss@gmail.com>, 2020.
# Gigel2 <mihalacher02@gmail.com>, 2020.
# R3ktGamerRO <bluegamermc1@gmail.com>, 2021.
+# FlooferLand <yunaflarf@gmail.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-03-20 04:18+0000\n"
-"Last-Translator: R3ktGamerRO <bluegamermc1@gmail.com>\n"
+"PO-Revision-Date: 2021-11-11 16:02+0000\n"
+"Last-Translator: FlooferLand <yunaflarf@gmail.com>\n"
"Language-Team: Romanian <https://hosted.weblate.org/projects/godot-engine/"
"godot/ro/>\n"
"Language: ro\n"
@@ -30,7 +31,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < "
"20)) ? 1 : 2;\n"
-"X-Generator: Weblate 4.5.2-dev\n"
+"X-Generator: Weblate 4.9.1-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -379,15 +380,13 @@ msgstr "Anim Inserați"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "node '%s'"
-msgstr "Mod Snap (%s)"
+msgstr "nodul '%s'"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "animation"
-msgstr "Animație"
+msgstr "animație"
#: editor/animation_track_editor.cpp
msgid "AnimationPlayer can't animate itself, only other players."
@@ -395,9 +394,8 @@ msgstr "AnimationPlayer nu se poate anima singur, doar alți jucători."
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "property '%s'"
-msgstr "Proprietate"
+msgstr "proprietatea '%s'"
#: editor/animation_track_editor.cpp
msgid "Anim Create & Insert"
@@ -486,7 +484,7 @@ msgstr "Anim Mutați Cheie"
#: editor/animation_track_editor.cpp
#: modules/visual_script/visual_script_editor.cpp
msgid "Clipboard is empty!"
-msgstr ""
+msgstr "Clipboardul este gol!"
#: editor/animation_track_editor.cpp
msgid "Paste Tracks"
@@ -608,9 +606,8 @@ msgid "Go to Previous Step"
msgstr "Mergeți la Pasul Anterior"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Apply Reset"
-msgstr "Resetați Zoom-area"
+msgstr "Resetați"
#: editor/animation_track_editor.cpp
msgid "Optimize Animation"
@@ -629,9 +626,8 @@ msgid "Use Bezier Curves"
msgstr "Folosește curbe Bezier"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Create RESET Track(s)"
-msgstr "Lipiţi Piste"
+msgstr "Creați o pista RESET"
#: editor/animation_track_editor.cpp
msgid "Anim. Optimizer"
@@ -973,11 +969,11 @@ msgstr "Creați %s Nou"
#: editor/create_dialog.cpp editor/plugins/asset_library_editor_plugin.cpp
msgid "No results for \"%s\"."
-msgstr ""
+msgstr "Niciun rezultat pentru \"%s\"."
#: editor/create_dialog.cpp editor/property_selector.cpp
msgid "No description available for %s."
-msgstr ""
+msgstr "Nu exista o descriere pentru %s."
#: editor/create_dialog.cpp editor/editor_file_dialog.cpp
#: editor/filesystem_dock.cpp
@@ -1077,14 +1073,14 @@ msgid "Owners Of:"
msgstr "Stăpâni La:"
#: editor/dependency_editor.cpp
-#, fuzzy
msgid ""
"Remove the selected files from the project? (Cannot be undone.)\n"
"Depending on your filesystem configuration, the files will either be moved "
"to the system trash or deleted permanently."
msgstr ""
"Ștergeți fișierele selectate din proiect? (Acțiune ireversibilă)\n"
-"Poți gasi fișierele șterse in coșul de gunoi dacă vrei să le restabilești."
+"Bazat pe configurarea sistemului de fișiere, fișierele vor fi mutate în "
+"coșul de gunoi al sistemului, ori vor fi șterse definitiv."
#: editor/dependency_editor.cpp
#, fuzzy
@@ -1170,7 +1166,7 @@ msgstr "Mulțumesc din partea comunităţii Godot!"
#: editor/editor_about.cpp editor/editor_node.cpp editor/project_manager.cpp
msgid "Click to copy."
-msgstr ""
+msgstr "Apasă click sa copiezi."
#: editor/editor_about.cpp
msgid "Godot Engine contributors"
@@ -1268,41 +1264,38 @@ msgid "Licenses"
msgstr "Licențe"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Error opening asset file for \"%s\" (not in ZIP format)."
-msgstr "Eroare la deschiderea fişierului pachet, nu este în format ZIP."
+msgstr ""
+"Eroare la deschiderea fişierului pachet \"%s\" (nu este în formatul ZIP)."
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "%s (already exists)"
-msgstr "%s (Există deja)"
+msgstr "%s (deja există)"
#: editor/editor_asset_installer.cpp
msgid "Contents of asset \"%s\" - %d file(s) conflict with your project:"
-msgstr ""
+msgstr "Conținutul pachetului \"%s\" - %d fișiere conflictă cu proiectul tău:"
#: editor/editor_asset_installer.cpp
msgid "Contents of asset \"%s\" - No files conflict with your project:"
msgstr ""
+"Conținutul pachetului \"%s\" - Niciun fișier nu conflictă cu proiectul tău:"
#: editor/editor_asset_installer.cpp
msgid "Uncompressing Assets"
msgstr "Decomprimare Asset-uri"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "The following files failed extraction from asset \"%s\":"
-msgstr "Următoarele file au eșuat extragerea din pachet:"
+msgstr "Următoarele fișiere au eșuat extragerea din pachetul \"%s\":"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "(and %s more files)"
-msgstr "și %d alte fișiere."
+msgstr "(și %s alte fișiere)"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Asset \"%s\" installed successfully!"
-msgstr "Pachet instalat cu succes!"
+msgstr "Pachetul \"%s\" sa instalat cu succes!"
#: editor/editor_asset_installer.cpp
#: editor/plugins/asset_library_editor_plugin.cpp
@@ -1551,13 +1544,12 @@ msgid "Can't add autoload:"
msgstr "Nu pot adaugă încărcare automata:"
#: editor/editor_autoload_settings.cpp
-#, fuzzy
msgid "%s is an invalid path. File does not exist."
-msgstr "Fișierul nu există."
+msgstr "%s este o cale invalidă. Fișierul nu există."
#: editor/editor_autoload_settings.cpp
msgid "%s is an invalid path. Not in resource path (res://)."
-msgstr ""
+msgstr "%s este o cale invalida. Nu este în calea resurselor (res://)."
#: editor/editor_autoload_settings.cpp
msgid "Add AutoLoad"
@@ -1582,7 +1574,7 @@ msgstr "Nume"
#: editor/editor_autoload_settings.cpp
msgid "Global Variable"
-msgstr ""
+msgstr "Variabil Global"
#: editor/editor_data.cpp
msgid "Paste Params"
@@ -1761,7 +1753,7 @@ msgstr "Importă Bară"
#: editor/editor_feature_profile.cpp
msgid "Allows to view and edit 3D scenes."
-msgstr ""
+msgstr "Permite vizualizarea și editarea scenelor 3D."
#: editor/editor_feature_profile.cpp
msgid "Allows to edit scripts using the integrated script editor."
@@ -1783,7 +1775,7 @@ msgstr ""
#: editor/editor_feature_profile.cpp
msgid "Allows to browse the local file system via a dedicated dock."
-msgstr ""
+msgstr "Permite navigarea sistemului local de fișiere printr-un dock dedicat."
#: editor/editor_feature_profile.cpp
msgid ""
@@ -1792,17 +1784,16 @@ msgid ""
msgstr ""
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "(current)"
-msgstr "(Curent)"
+msgstr "(actual)"
#: editor/editor_feature_profile.cpp
msgid "(none)"
-msgstr ""
+msgstr "(nici unul)"
#: editor/editor_feature_profile.cpp
msgid "Remove currently selected profile, '%s'? Cannot be undone."
-msgstr ""
+msgstr "Șterge profilul actual selectat, '%s'? Nu poate fi anulat."
#: editor/editor_feature_profile.cpp
msgid "Profile must be a valid filename and must not contain '.'"
@@ -1834,9 +1825,8 @@ msgid "Enable Contextual Editor"
msgstr "Activează Editorul Contextual"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Class Properties:"
-msgstr "Reduceți toate proprietățile"
+msgstr "Proprietățile clasei:"
#: editor/editor_feature_profile.cpp
#, fuzzy
@@ -1844,9 +1834,8 @@ msgid "Main Features:"
msgstr "Caracteristici active:"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Nodes and Classes:"
-msgstr "Clase Activate:"
+msgstr "Noduri și Clase:"
#: editor/editor_feature_profile.cpp
msgid "File '%s' format is invalid, import aborted."
@@ -1874,14 +1863,12 @@ msgid "Current Profile:"
msgstr "Profil Curent:"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Create Profile"
-msgstr "Ștergere Profil"
+msgstr "Creează un Profil"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Remove Profile"
-msgstr "Elimină Șablon"
+msgstr "Șterge Profil"
#: editor/editor_feature_profile.cpp
msgid "Available Profiles:"
@@ -1901,14 +1888,12 @@ msgid "Export"
msgstr "Exportare"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Configure Selected Profile:"
-msgstr "Profil Curent:"
+msgstr "Configură Profilul Selectat:"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Extra Options:"
-msgstr "Opțiuni Clasă:"
+msgstr "Opțiunii Extra:"
#: editor/editor_feature_profile.cpp
msgid "Create or import a profile to edit available classes and properties."
@@ -1939,9 +1924,8 @@ msgid "Select Current Folder"
msgstr "Selectaţi directorul curent"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
-#, fuzzy
msgid "File exists, overwrite?"
-msgstr "Fișierul există, suprascrieţi?"
+msgstr "Fișierul există, înlocuiți?"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Select This Folder"
@@ -2259,8 +2243,9 @@ msgstr "Proprietate:"
#: editor/editor_inspector.cpp editor/scene_tree_dock.cpp
#: modules/visual_script/visual_script_property_selector.cpp
+#, fuzzy
msgid "Set %s"
-msgstr ""
+msgstr "Setați %s"
#: editor/editor_inspector.cpp
msgid "Set Multiple:"
@@ -2436,9 +2421,8 @@ msgstr ""
"putut fi satisfăcute."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Could not save one or more scenes!"
-msgstr "Nu s-a putut porni subprocesul!"
+msgstr "Nu s-au putut salva una sau mai multe scene!"
#: editor/editor_node.cpp
msgid "Save All Scenes"
@@ -2543,7 +2527,7 @@ msgstr "Nu există nici o scenă definită pentru a execuție."
#: editor/editor_node.cpp
msgid "Save scene before running..."
-msgstr ""
+msgstr "Salvați scena înainte de a rula..."
#: editor/editor_node.cpp
msgid "Could not start subprocess!"
@@ -2579,7 +2563,7 @@ msgstr "Salvează schimbările la ’%s’ înainte de ieșire?"
#: editor/editor_node.cpp
msgid "%s no longer exists! Please specify a new save location."
-msgstr ""
+msgstr "%s nu mai există! Vă rugăm să specificați o nouă locație de salvare."
#: editor/editor_node.cpp
msgid ""
@@ -7879,15 +7863,15 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Set Rest Pose to Bones"
+msgstr ""
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
#, fuzzy
msgid "Create Rest Pose from Bones"
msgstr "Creează Puncte de Emisie Din Mesh"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
-msgstr ""
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
#, fuzzy
msgid "Skeleton2D"
msgstr "Singleton (Unicat)"
@@ -11270,11 +11254,11 @@ msgid ""
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Key "
+msgid "Physical Key"
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Physical Key"
+msgid "Key "
msgstr ""
#: editor/project_settings_editor.cpp
diff --git a/editor/translations/ru.po b/editor/translations/ru.po
index df2c3c1cdf..0d7bd238ed 100644
--- a/editor/translations/ru.po
+++ b/editor/translations/ru.po
@@ -99,13 +99,14 @@
# Олег Довгер <oleg.a.dovger@gmail.com>, 2021.
# Anna Malinovskaia <tacitcoast@gmail.com>, 2021.
# mrvladus <mrvladus@yandex.ru>, 2021.
+# DΞLTΛ <craftercrafter43@gmail.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-10-21 10:31+0000\n"
-"Last-Translator: Danil Alexeev <danil@alexeev.xyz>\n"
+"PO-Revision-Date: 2021-11-07 09:45+0000\n"
+"Last-Translator: DΞLTΛ <craftercrafter43@gmail.com>\n"
"Language-Team: Russian <https://hosted.weblate.org/projects/godot-engine/"
"godot/ru/>\n"
"Language: ru\n"
@@ -7817,20 +7818,20 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr "У Ñтого Ñкелета нет коÑтей, Ñоздайте дочерние Bone2D узлы."
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
-msgstr "Создать позу Ð¿Ð¾ÐºÐ¾Ñ Ð¸Ð· коÑтей"
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Set Rest Pose to Bones"
msgstr "Задать позу Ð¿Ð¾ÐºÐ¾Ñ ÐºÐ¾ÑÑ‚Ñм"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Create Rest Pose from Bones"
+msgstr "Создать позу Ð¿Ð¾ÐºÐ¾Ñ Ð¸Ð· коÑтей"
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Skeleton2D"
msgstr "2D Ñкелет"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Reset to Rest Pose"
-msgstr "СброÑить к позе покоÑ"
+msgstr "Создать позу покоÑ"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Overwrite Rest Pose"
@@ -11177,14 +11178,14 @@ msgstr ""
"Ñ…Ð¾Ñ‚Ñ Ð±Ñ‹ один Ñимвол `/`."
#: editor/project_settings_editor.cpp
-msgid "Key "
-msgstr "Клавиша "
-
-#: editor/project_settings_editor.cpp
msgid "Physical Key"
msgstr "ФизичеÑÐºÐ°Ñ ÐºÐ»Ð°Ð²Ð¸ÑˆÐ°"
#: editor/project_settings_editor.cpp
+msgid "Key "
+msgstr "Клавиша "
+
+#: editor/project_settings_editor.cpp
msgid "Joy Button"
msgstr "Кнопка геймпада"
diff --git a/editor/translations/si.po b/editor/translations/si.po
index c19727905b..a6c6eb5ab3 100644
--- a/editor/translations/si.po
+++ b/editor/translations/si.po
@@ -7480,11 +7480,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
@@ -10693,11 +10693,11 @@ msgid ""
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Key "
+msgid "Physical Key"
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Physical Key"
+msgid "Key "
msgstr ""
#: editor/project_settings_editor.cpp
diff --git a/editor/translations/sk.po b/editor/translations/sk.po
index 93e2cf40ab..70488a8dae 100644
--- a/editor/translations/sk.po
+++ b/editor/translations/sk.po
@@ -7783,11 +7783,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
@@ -11161,11 +11161,11 @@ msgid ""
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Key "
+msgid "Physical Key"
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Physical Key"
+msgid "Key "
msgstr ""
#: editor/project_settings_editor.cpp
diff --git a/editor/translations/sl.po b/editor/translations/sl.po
index dc381b7d0a..5fe2168656 100644
--- a/editor/translations/sl.po
+++ b/editor/translations/sl.po
@@ -8055,15 +8055,15 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Set Rest Pose to Bones"
+msgstr ""
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
#, fuzzy
msgid "Create Rest Pose from Bones"
msgstr "Zaženi Prizor po Meri"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
-msgstr ""
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
#, fuzzy
msgid "Skeleton2D"
msgstr "Posameznik"
@@ -11477,11 +11477,11 @@ msgid ""
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Key "
+msgid "Physical Key"
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Physical Key"
+msgid "Key "
msgstr ""
#: editor/project_settings_editor.cpp
diff --git a/editor/translations/sq.po b/editor/translations/sq.po
index 2cf0327ec4..a68667d741 100644
--- a/editor/translations/sq.po
+++ b/editor/translations/sq.po
@@ -7802,11 +7802,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
@@ -11106,11 +11106,11 @@ msgid ""
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Key "
+msgid "Physical Key"
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Physical Key"
+msgid "Key "
msgstr ""
#: editor/project_settings_editor.cpp
diff --git a/editor/translations/sr_Cyrl.po b/editor/translations/sr_Cyrl.po
index 53a3dc6761..73448d79ed 100644
--- a/editor/translations/sr_Cyrl.po
+++ b/editor/translations/sr_Cyrl.po
@@ -6,12 +6,13 @@
# ÐлекÑандар Урошевић <nicecubedude@gmail.com>, 2017.
# Младен Габић <cupakabra@protonmail.com>, 2020.
# Anonymous <noreply@weblate.org>, 2020.
+# ÐлекÑић Владица <vlajkousk@gmail.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2020-05-22 21:01+0000\n"
-"Last-Translator: Младен Габић <cupakabra@protonmail.com>\n"
+"PO-Revision-Date: 2021-11-07 22:23+0000\n"
+"Last-Translator: ÐлекÑић Владица <vlajkousk@gmail.com>\n"
"Language-Team: Serbian (cyrillic) <https://hosted.weblate.org/projects/godot-"
"engine/godot/sr_Cyrl/>\n"
"Language: sr_Cyrl\n"
@@ -19,7 +20,7 @@ msgstr ""
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Generator: Weblate 4.1-dev\n"
+"X-Generator: Weblate 4.9-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -101,7 +102,6 @@ msgid "Balanced"
msgstr "БаланÑирано"
#: editor/animation_bezier_editor.cpp
-#, fuzzy
msgid "Mirror"
msgstr "Огледало"
@@ -110,14 +110,12 @@ msgid "Time:"
msgstr "Време:"
#: editor/animation_bezier_editor.cpp
-#, fuzzy
msgid "Value:"
msgstr "ВредноÑÑ‚:"
#: editor/animation_bezier_editor.cpp
-#, fuzzy
msgid "Insert Key Here"
-msgstr "Убаци кључ"
+msgstr "Овде Убаците Кључ"
#: editor/animation_bezier_editor.cpp
#, fuzzy
@@ -1024,7 +1022,7 @@ msgstr "Сигурно желиш да уклониш Ñве везе Ñа \"%s\
#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp
msgid "Signals"
-msgstr "Сигнали"
+msgstr "Знаци"
#: editor/connections_dialog.cpp
#, fuzzy
@@ -2272,9 +2270,8 @@ msgid "Inherited by:"
msgstr "ÐаÑлеђено од:"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Description"
-msgstr "ОпиÑ:"
+msgstr "ОпиÑ"
#: editor/editor_help.cpp
#, fuzzy
@@ -2297,25 +2294,26 @@ msgstr "Уобичајено"
#: editor/editor_help.cpp
msgid "Methods"
-msgstr "Методе"
+msgstr "ПоÑтупци"
#: editor/editor_help.cpp
#, fuzzy
msgid "Theme Properties"
-msgstr "ОÑобине"
+msgstr "ОÑобине Теме"
#: editor/editor_help.cpp
+#, fuzzy
msgid "Enumerations"
-msgstr "Енумерације"
+msgstr "ПопиÑивање"
#: editor/editor_help.cpp editor/plugins/theme_editor_plugin.cpp
msgid "Constants"
-msgstr "КонÑтанте"
+msgstr "Ðепроменљиве"
#: editor/editor_help.cpp
#, fuzzy
msgid "Property Descriptions"
-msgstr "ÐžÐ¿Ð¸Ñ Ð¾Ñобине:"
+msgstr "ОпиÑи ОÑобина"
#: editor/editor_help.cpp
#, fuzzy
@@ -2333,7 +2331,7 @@ msgstr ""
#: editor/editor_help.cpp
#, fuzzy
msgid "Method Descriptions"
-msgstr "ÐžÐ¿Ð¸Ñ Ð¼ÐµÑ‚Ð¾Ð´Ðµ:"
+msgstr "ОпиÑи Метода"
#: editor/editor_help.cpp
msgid ""
@@ -8467,13 +8465,13 @@ msgstr "Овај коÑтур нема коÑти, креирај му децу
#: editor/plugins/skeleton_2d_editor_plugin.cpp
#, fuzzy
-msgid "Create Rest Pose from Bones"
-msgstr "Ðаправи тачке емиÑије од мреже"
+msgid "Set Rest Pose to Bones"
+msgstr "ПоÑтави Одмор Позу на КоÑке"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
#, fuzzy
-msgid "Set Rest Pose to Bones"
-msgstr "ПоÑтави Одмор Позу на КоÑке"
+msgid "Create Rest Pose from Bones"
+msgstr "Ðаправи тачке емиÑије од мреже"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
#, fuzzy
@@ -12346,15 +12344,15 @@ msgstr ""
"карактер."
#: editor/project_settings_editor.cpp
+msgid "Physical Key"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
#, fuzzy
msgid "Key "
msgstr "Кључ"
#: editor/project_settings_editor.cpp
-msgid "Physical Key"
-msgstr ""
-
-#: editor/project_settings_editor.cpp
#, fuzzy
msgid "Joy Button"
msgstr "ÐÐ¾Ñ˜Ñ Ð´ÑƒÐ³Ð¼Ð¸Ð¶"
diff --git a/editor/translations/sr_Latn.po b/editor/translations/sr_Latn.po
index 668ee7d7de..d8a6c896f1 100644
--- a/editor/translations/sr_Latn.po
+++ b/editor/translations/sr_Latn.po
@@ -7532,11 +7532,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
@@ -10795,11 +10795,11 @@ msgid ""
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Key "
+msgid "Physical Key"
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Physical Key"
+msgid "Key "
msgstr ""
#: editor/project_settings_editor.cpp
diff --git a/editor/translations/sv.po b/editor/translations/sv.po
index f22e9500e1..7abece55a6 100644
--- a/editor/translations/sv.po
+++ b/editor/translations/sv.po
@@ -23,13 +23,14 @@
# Marcus Toftedahl <marcus.toftedahl@his.se>, 2020.
# Alex25820 <Alexander_sjogren@hotmail.se>, 2021.
# Leon <joel.lundborg@gmail.com>, 2021.
+# Kent Jofur <kent.jofur@gmail.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-10-21 10:31+0000\n"
-"Last-Translator: Christoffer Sundbom <christoffer_karlsson@live.se>\n"
+"PO-Revision-Date: 2021-11-03 13:15+0000\n"
+"Last-Translator: Kent Jofur <kent.jofur@gmail.com>\n"
"Language-Team: Swedish <https://hosted.weblate.org/projects/godot-engine/"
"godot/sv/>\n"
"Language: sv\n"
@@ -385,15 +386,13 @@ msgstr "Anim Infoga"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "node '%s'"
-msgstr "Kan inte öppna '%s'."
+msgstr "nod '%s'"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "animation"
-msgstr "Animation"
+msgstr "animering"
#: editor/animation_track_editor.cpp
msgid "AnimationPlayer can't animate itself, only other players."
@@ -402,9 +401,8 @@ msgstr ""
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "property '%s'"
-msgstr "Egenskaper"
+msgstr "egenskapen '%s'"
#: editor/animation_track_editor.cpp
msgid "Anim Create & Insert"
@@ -874,9 +872,8 @@ msgstr ""
"vilotid."
#: editor/connections_dialog.cpp
-#, fuzzy
msgid "Oneshot"
-msgstr "Oneshot"
+msgstr "Ett skott"
#: editor/connections_dialog.cpp
msgid "Disconnects the signal after its first emission."
@@ -1304,9 +1301,8 @@ msgid "(and %s more files)"
msgstr "(och %s fler filer)"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Asset \"%s\" installed successfully!"
-msgstr "Paketet installerades!"
+msgstr "Paketet \"%s\" har installerats!"
#: editor/editor_asset_installer.cpp
#: editor/plugins/asset_library_editor_plugin.cpp
@@ -1830,9 +1826,8 @@ msgid "Enable Contextual Editor"
msgstr "Aktivera kontextuell redigerare"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Class Properties:"
-msgstr "Expandera alla"
+msgstr "Klassegenskaper:"
#: editor/editor_feature_profile.cpp
#, fuzzy
@@ -2176,7 +2171,7 @@ msgstr ""
#: editor/editor_help.cpp
msgid "Method Descriptions"
-msgstr "Metodbeskrivningar"
+msgstr "Metodbeskrivning"
#: editor/editor_help.cpp
msgid ""
@@ -2606,13 +2601,15 @@ msgstr "Spara ändringar i '%s' innan stängning?"
#: editor/editor_node.cpp
msgid "%s no longer exists! Please specify a new save location."
-msgstr ""
+msgstr "%s finns inte längre! Vänligen ange en ny lagringsplats."
#: editor/editor_node.cpp
msgid ""
"The current scene has no root node, but %d modified external resource(s) "
"were saved anyway."
msgstr ""
+"Den aktuella scenen har ingen rotnod, men %d modifierade externa resurser "
+"sparades ändå."
#: editor/editor_node.cpp
#, fuzzy
@@ -2651,29 +2648,27 @@ msgstr "Nuvarande scen inte sparad. Öppna ändå?"
#: editor/editor_node.cpp
msgid "Can't undo while mouse buttons are pressed."
-msgstr ""
+msgstr "Det går inte att ångra medan musknapparna är nedtryckta."
#: editor/editor_node.cpp
msgid "Nothing to undo."
-msgstr ""
+msgstr "Inget att ångra."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Undo: %s"
-msgstr "Ã…ngra"
+msgstr "Ã…ngra: %s"
#: editor/editor_node.cpp
msgid "Can't redo while mouse buttons are pressed."
-msgstr ""
+msgstr "Det går inte att göra om medan musknapparna är nedtryckta."
#: editor/editor_node.cpp
msgid "Nothing to redo."
-msgstr ""
+msgstr "Inget att göra om."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Redo: %s"
-msgstr "Återställ"
+msgstr "Gör om: %s"
#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
@@ -3278,9 +3273,8 @@ msgid "Inspector"
msgstr "Inspektör"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Expand Bottom Panel"
-msgstr "Expandera alla"
+msgstr "Expandera Nedre Panel"
#: editor/editor_node.cpp
msgid "Output"
@@ -3452,9 +3446,8 @@ msgid "Update"
msgstr "Uppdatera"
#: editor/editor_plugin_settings.cpp
-#, fuzzy
msgid "Version"
-msgstr "Version:"
+msgstr "Version"
#: editor/editor_plugin_settings.cpp
#, fuzzy
@@ -3721,9 +3714,8 @@ msgid "Error requesting URL:"
msgstr "Fel vid laddning:"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Connecting to the mirror..."
-msgstr "Anslut Till Node:"
+msgstr "Ansluter till spegeln..."
#: editor/export_template_manager.cpp
msgid "Can't resolve the requested address."
@@ -3749,9 +3741,8 @@ msgid "Request ended up in a redirect loop."
msgstr ""
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Request failed:"
-msgstr "Förfrågning Misslyckades."
+msgstr "Förfrågning misslyckades:"
#: editor/export_template_manager.cpp
msgid "Download complete; extracting templates..."
@@ -3902,9 +3893,8 @@ msgid "Uninstall templates for the current version."
msgstr ""
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Download from:"
-msgstr "Ladda ner"
+msgstr "Ladda ner från:"
#: editor/export_template_manager.cpp
#, fuzzy
@@ -4405,19 +4395,19 @@ msgstr "Genererar Lightmaps"
#: editor/import/resource_importer_scene.cpp
msgid "Generating for Mesh: "
-msgstr ""
+msgstr "Generera för mesh: "
#: editor/import/resource_importer_scene.cpp
msgid "Running Custom Script..."
-msgstr ""
+msgstr "Kör anpassat skript..."
#: editor/import/resource_importer_scene.cpp
msgid "Couldn't load post-import script:"
-msgstr ""
+msgstr "Det gick inte att läsa in skript efter import:"
#: editor/import/resource_importer_scene.cpp
msgid "Invalid/broken script for post-import (check console):"
-msgstr ""
+msgstr "Ogiltigt/felaktigt skript för efterimport (kontrollera konsolen):"
#: editor/import/resource_importer_scene.cpp
msgid "Error running post-import script:"
@@ -4432,22 +4422,20 @@ msgid "Saving..."
msgstr "Sparar..."
#: editor/import_defaults_editor.cpp
-#, fuzzy
msgid "Select Importer"
-msgstr "Välj Node"
+msgstr "Välj Importör"
#: editor/import_defaults_editor.cpp
msgid "Importer:"
msgstr "Importör:"
#: editor/import_defaults_editor.cpp
-#, fuzzy
msgid "Reset to Defaults"
-msgstr "Ladda Standard"
+msgstr "Återställ till standardvärden"
#: editor/import_dock.cpp
msgid "Keep File (No Import)"
-msgstr ""
+msgstr "Behåll fil (ingen import)"
#: editor/import_dock.cpp
msgid "%d Files"
@@ -4472,6 +4460,10 @@ msgid ""
"Selecting another resource in the FileSystem dock without clicking Reimport "
"first will discard changes made in the Import dock."
msgstr ""
+"Du har väntande ändringar som inte har tillämpats ännu. Klicka på "
+"Återimportera för att tillämpa ändringar som gjorts i importalternativen.\n"
+"Om du väljer en annan resurs i FilSystem-dockan utan att först klicka på "
+"Återimportera kommer ändringar som gjorts i importdockan att ignoreras."
#: editor/import_dock.cpp
msgid "Import As:"
@@ -4484,16 +4476,18 @@ msgstr "Återställ Zoom"
#: editor/import_dock.cpp
msgid "Save Scenes, Re-Import, and Restart"
-msgstr ""
+msgstr "Spara scener, återimportera och starta om"
#: editor/import_dock.cpp
msgid "Changing the type of an imported file requires editor restart."
-msgstr ""
+msgstr "Att ändra typen av en importerad fil kräver omstart av editorn."
#: editor/import_dock.cpp
msgid ""
"WARNING: Assets exist that use this resource, they may stop loading properly."
msgstr ""
+"VARNING: Det finns tillgångar som använder den här resursen, de kan sluta "
+"laddas in korrekt."
#: editor/inspector_dock.cpp
msgid "Failed to load resource."
@@ -4519,7 +4513,7 @@ msgstr "Skapa en ny resurs i minnet och ändra den."
#: editor/inspector_dock.cpp
msgid "Load an existing resource from disk and edit it."
-msgstr ""
+msgstr "Ladda en befintlig resurs från disken och redigera den."
#: editor/inspector_dock.cpp
msgid "Save the currently edited resource."
@@ -4835,9 +4829,8 @@ msgid "Blend:"
msgstr ""
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
-#, fuzzy
msgid "Parameter Changed:"
-msgstr "Uppdatera Ändringar"
+msgstr "Parameter ändrad:"
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
#: editor/plugins/animation_tree_player_editor_plugin.cpp
@@ -5469,9 +5462,8 @@ msgid "Request failed, timeout"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgid "Timeout."
-msgstr "Tid:"
+msgstr "Tidsgräns."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Failed:"
@@ -7877,15 +7869,15 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Set Rest Pose to Bones"
+msgstr ""
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
#, fuzzy
msgid "Create Rest Pose from Bones"
msgstr "Skapa från Scen"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
-msgstr ""
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
#, fuzzy
msgid "Skeleton2D"
msgstr "Singleton"
@@ -8028,9 +8020,8 @@ msgid "Translate"
msgstr "Översättningar"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Scale"
-msgstr "Skala:"
+msgstr "Skala"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Scaling: "
@@ -8062,28 +8053,24 @@ msgid "Yaw:"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Size:"
-msgstr "Storlek: "
+msgstr "Storlek:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Objects Drawn:"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Material Changes:"
-msgstr "Uppdatera Ändringar"
+msgstr "Materialförändringar:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Shader Changes:"
-msgstr "Ändra"
+msgstr "Shader Ändringar:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Surface Changes:"
-msgstr "Ändra"
+msgstr "Ytförändringar:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Draw Calls:"
@@ -8838,9 +8825,8 @@ msgid "Importing items {n}/{n}"
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Updating the editor"
-msgstr "Stäng redigeraren?"
+msgstr "Uppdaterar editorn"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -8857,9 +8843,8 @@ msgid "With Data"
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select by data type:"
-msgstr "Välj en Node"
+msgstr "Välj efter datatyp:"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -9101,9 +9086,8 @@ msgid "Add StyleBox Item"
msgstr "Stil"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove Items:"
-msgstr "Ta Bort Mall"
+msgstr "Ta bort objekt:"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Remove Class Items"
@@ -9143,9 +9127,8 @@ msgid "Editor Theme"
msgstr "Redigera Tema"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select Another Theme Resource:"
-msgstr "Ta bort Resurs"
+msgstr "Välj en annan temaresurs:"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -9201,18 +9184,16 @@ msgid "Show default type items alongside items that have been overridden."
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Override All"
-msgstr "skriv över:"
+msgstr "Åsidosätt Alla"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Override all default type items."
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Theme:"
-msgstr "Tema"
+msgstr "Tema:"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -9234,9 +9215,8 @@ msgid "Default Preview"
msgstr "Förhandsgranska"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select UI Scene:"
-msgstr "Återställ Scen"
+msgstr "Välj UI-scen:"
#: editor/plugins/theme_editor_preview.cpp
msgid ""
@@ -9386,9 +9366,8 @@ msgid "Erase TileMap"
msgstr ""
#: editor/plugins/tile_map_editor_plugin.cpp
-#, fuzzy
msgid "Find Tile"
-msgstr "Hitta Nästa"
+msgstr "Hitta Bricka"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid "Transpose"
@@ -9559,9 +9538,8 @@ msgid "Navigation Mode"
msgstr "Animations-Node"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Bitmask Mode"
-msgstr "Raw-Läge"
+msgstr "Bitmaskläge"
#: editor/plugins/tile_set_editor_plugin.cpp
#, fuzzy
@@ -9569,9 +9547,8 @@ msgid "Priority Mode"
msgstr "Exportera Projekt"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Icon Mode"
-msgstr "Växla Läge"
+msgstr "Icon Läge"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Z Index Mode"
@@ -9857,9 +9834,8 @@ msgid "Detect new changes"
msgstr "Skapa Ny"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Changes"
-msgstr "Ändra"
+msgstr "Ändringar"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Modified"
@@ -10723,9 +10699,8 @@ msgid "VisualShader"
msgstr ""
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Edit Visual Property:"
-msgstr "Redigera Filter"
+msgstr "Redigera Visuell Egenskap:"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Visual Shader Mode Changed"
@@ -11147,14 +11122,12 @@ msgid "Are you sure to run %d projects at once?"
msgstr ""
#: editor/project_manager.cpp
-#, fuzzy
msgid "Remove %d projects from the list?"
-msgstr "Välj enhet från listan"
+msgstr "Ta bort %d projekt från listan?"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Remove this project from the list?"
-msgstr "Välj enhet från listan"
+msgstr "Vill du ta bort det här projektet från listan?"
#: editor/project_manager.cpp
msgid ""
@@ -11279,14 +11252,14 @@ msgid ""
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Key "
-msgstr "Nyckel "
-
-#: editor/project_settings_editor.cpp
msgid "Physical Key"
msgstr ""
#: editor/project_settings_editor.cpp
+msgid "Key "
+msgstr "Nyckel "
+
+#: editor/project_settings_editor.cpp
msgid "Joy Button"
msgstr ""
@@ -13584,9 +13557,8 @@ msgstr ""
"Snälla Vänta..."
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Could not find keystore, unable to export."
-msgstr "Kunde inte öppna mall för export:"
+msgstr "Det gick inte att hitta nyckellager, det gick inte att exportera."
#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
@@ -13646,9 +13618,8 @@ msgid "Could not export project files to gradle project\n"
msgstr ""
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Could not write expansion package file!"
-msgstr "Kunde inte skriva till filen:"
+msgstr "Kunde inte skriva expansionspaketfil!"
#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
@@ -13701,9 +13672,8 @@ msgid "Adding files..."
msgstr "Lägger till %s..."
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Could not export project files"
-msgstr "Kunde inte skriva till filen:"
+msgstr "Kunde inte exportera projektfiler"
#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
@@ -13768,14 +13738,12 @@ msgid "Could not read HTML shell:"
msgstr "Kunde inte skriva till filen:"
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Could not create HTTP server directory:"
-msgstr "Kunde inte skapa mapp."
+msgstr "Kunde inte skapa HTTP-serverkatalog:"
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Error starting HTTP server:"
-msgstr "Fel vid sparande av scenen."
+msgstr "Fel vid start av HTTP-server:"
#: platform/osx/export/export.cpp
#, fuzzy
@@ -14574,9 +14542,8 @@ msgid "Invalid source for shader."
msgstr "Ogiltig teckenstorlek."
#: scene/resources/visual_shader_nodes.cpp
-#, fuzzy
msgid "Invalid comparison function for that type."
-msgstr "Ogiltig teckenstorlek."
+msgstr "Ogiltig jämförelsefunktion för den typen."
#: servers/visual/shader_language.cpp
msgid "Varying may not be assigned in the '%s' function."
@@ -14607,8 +14574,9 @@ msgid "Assignment to uniform."
msgstr ""
#: servers/visual/shader_language.cpp
+#, fuzzy
msgid "Constants cannot be modified."
-msgstr ""
+msgstr "Konstanter kan inte ändras."
#~ msgid "Bottom"
#~ msgstr "Botten"
diff --git a/editor/translations/ta.po b/editor/translations/ta.po
index d9114adc60..137e2a28f9 100644
--- a/editor/translations/ta.po
+++ b/editor/translations/ta.po
@@ -7482,11 +7482,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
@@ -10697,11 +10697,11 @@ msgid ""
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Key "
+msgid "Physical Key"
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Physical Key"
+msgid "Key "
msgstr ""
#: editor/project_settings_editor.cpp
diff --git a/editor/translations/te.po b/editor/translations/te.po
index 39cda33625..fbe2d0dac3 100644
--- a/editor/translations/te.po
+++ b/editor/translations/te.po
@@ -7416,11 +7416,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
@@ -10595,11 +10595,11 @@ msgid ""
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Key "
+msgid "Physical Key"
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Physical Key"
+msgid "Key "
msgstr ""
#: editor/project_settings_editor.cpp
diff --git a/editor/translations/th.po b/editor/translations/th.po
index ef1bb3b2bb..6fe9af7f1d 100644
--- a/editor/translations/th.po
+++ b/editor/translations/th.po
@@ -7700,14 +7700,14 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr "โครงหลัà¸à¸™à¸µà¹‰à¸¢à¸±à¸‡à¹„ม่มีโครงใดๆ สร้างโหนดลูà¸à¸‚อง Bone2D"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
-msgstr "สร้างท่าโพสจาà¸à¹‚ครง"
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Set Rest Pose to Bones"
msgstr "ตั้งท่าโพสจาà¸à¹‚ครง"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Create Rest Pose from Bones"
+msgstr "สร้างท่าโพสจาà¸à¹‚ครง"
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Skeleton2D"
msgstr "Skeleton2D"
@@ -11110,14 +11110,14 @@ msgstr ""
"à¹à¸šà¸šà¸ªà¸­à¸šà¸–ามต้องมีอัà¸à¸‚ระ `/` อย่างน้อยหนึ่งตัวเพื่อà¸à¸£à¸­à¸‡à¸•ามชื่อโครงà¸à¸²à¸£à¹à¸¥à¸°à¸—ี่อยู่à¹à¸šà¸šà¹€à¸•็ม"
#: editor/project_settings_editor.cpp
-msgid "Key "
-msgstr "ปุ่ม "
-
-#: editor/project_settings_editor.cpp
msgid "Physical Key"
msgstr ""
#: editor/project_settings_editor.cpp
+msgid "Key "
+msgstr "ปุ่ม "
+
+#: editor/project_settings_editor.cpp
msgid "Joy Button"
msgstr "ปุ่มจอย"
diff --git a/editor/translations/tl.po b/editor/translations/tl.po
new file mode 100644
index 0000000000..691f0eeeac
--- /dev/null
+++ b/editor/translations/tl.po
@@ -0,0 +1,13819 @@
+# Tagalog translation of the Godot Engine editor.
+# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur.
+# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md).
+# This file is distributed under the same license as the Godot source code.
+#
+# Napstaguy04 <brokenscreen3@gmail.com>, 2021.
+msgid ""
+msgstr ""
+"Project-Id-Version: Godot Engine editor\n"
+"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
+"PO-Revision-Date: 2021-11-19 08:44+0000\n"
+"Last-Translator: Napstaguy04 <brokenscreen3@gmail.com>\n"
+"Language-Team: Tagalog <https://hosted.weblate.org/projects/godot-engine/"
+"godot/tl/>\n"
+"Language: tl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8-bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1 && n != 2 && n != 3 && (n % 10 == 4 "
+"|| n % 10 == 6 || n % 10 == 9);\n"
+"X-Generator: Weblate 4.9.1-dev\n"
+
+#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
+#: modules/visual_script/visual_script_builtin_funcs.cpp
+msgid "Invalid type argument to convert(), use TYPE_* constants."
+msgstr ""
+"Di-wastong uri ng argumento para sa convert(), gamitin ang TYPE_* constants."
+
+#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
+msgid "Expected a string of length 1 (a character)."
+msgstr "Inaasahang string na may habang 1 (isang karakter)."
+
+#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
+#: modules/mono/glue/gd_glue.cpp
+#: modules/visual_script/visual_script_builtin_funcs.cpp
+msgid "Not enough bytes for decoding bytes, or invalid format."
+msgstr "Kulang na bytes para sa decoding bytes, o di-wastong format."
+
+#: core/math/expression.cpp
+msgid "Invalid input %i (not passed) in expression"
+msgstr "Di-wastong input %i (di naipasa) sa expression"
+
+#: core/math/expression.cpp
+msgid "self can't be used because instance is null (not passed)"
+msgstr ""
+"Hindi magagamit ang self dahil ang instance ay naka-null (hindi ipinasa)"
+
+#: core/math/expression.cpp
+msgid "Invalid operands to operator %s, %s and %s."
+msgstr "Di-wastong mga operands sa mga operator %s, %s at %s."
+
+#: core/math/expression.cpp
+msgid "Invalid index of type %s for base type %s"
+msgstr "Di-wastong index ng uring %s para sa batayang uri %s"
+
+#: core/math/expression.cpp
+msgid "Invalid named index '%s' for base type %s"
+msgstr "Di-wastong pinangalang index '%s' para sa batayang uri na %s"
+
+#: core/math/expression.cpp
+msgid "Invalid arguments to construct '%s'"
+msgstr "Di-wastong mga argument para i-construct ang '%s'"
+
+#: core/math/expression.cpp
+msgid "On call to '%s':"
+msgstr "Sa pagtawag sa '%s':"
+
+#: core/ustring.cpp
+msgid "B"
+msgstr "B"
+
+#: core/ustring.cpp
+msgid "KiB"
+msgstr "KiB"
+
+#: core/ustring.cpp
+msgid "MiB"
+msgstr "MiB"
+
+#: core/ustring.cpp
+msgid "GiB"
+msgstr "GiB"
+
+#: core/ustring.cpp
+msgid "TiB"
+msgstr "TiB"
+
+#: core/ustring.cpp
+msgid "PiB"
+msgstr "PiB"
+
+#: core/ustring.cpp
+msgid "EiB"
+msgstr "EiB"
+
+#: editor/animation_bezier_editor.cpp
+msgid "Free"
+msgstr "Walang Bayad"
+
+#: editor/animation_bezier_editor.cpp
+msgid "Balanced"
+msgstr "Nakabalanse"
+
+#: editor/animation_bezier_editor.cpp
+msgid "Mirror"
+msgstr "Salamin"
+
+#: editor/animation_bezier_editor.cpp editor/editor_profiler.cpp
+msgid "Time:"
+msgstr "Oras:"
+
+#: editor/animation_bezier_editor.cpp
+msgid "Value:"
+msgstr "Halaga:"
+
+#: editor/animation_bezier_editor.cpp
+msgid "Insert Key Here"
+msgstr "Maglagay ng Key dito"
+
+#: editor/animation_bezier_editor.cpp
+msgid "Duplicate Selected Key(s)"
+msgstr "Doblehin ang (mga) Napiling Key"
+
+#: editor/animation_bezier_editor.cpp
+msgid "Delete Selected Key(s)"
+msgstr "Burahin ang (mga) Napiling Key"
+
+#: editor/animation_bezier_editor.cpp
+msgid "Add Bezier Point"
+msgstr "Magdagdag ng Bezier Point"
+
+#: editor/animation_bezier_editor.cpp
+msgid "Move Bezier Points"
+msgstr "Maglipat ng (mga) Bezier Point"
+
+#: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp
+msgid "Anim Duplicate Keys"
+msgstr "Pagdodoble ng mga Animation Key"
+
+#: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp
+msgid "Anim Delete Keys"
+msgstr "Pagbura ng mga Animation Key"
+
+#: editor/animation_track_editor.cpp
+msgid "Anim Change Keyframe Time"
+msgstr "Pagbago ng Keyframe Time ng Animation"
+
+#: editor/animation_track_editor.cpp
+msgid "Anim Change Transition"
+msgstr "Pagbago ng Transisyon ng Animation"
+
+#: editor/animation_track_editor.cpp
+msgid "Anim Change Transform"
+msgstr "Pagbago ng Transform ng Animation"
+
+#: editor/animation_track_editor.cpp
+msgid "Anim Change Keyframe Value"
+msgstr "Pagbago ng Nilalaman ng Keyframe ng Animation"
+
+#: editor/animation_track_editor.cpp
+msgid "Anim Change Call"
+msgstr "Pagbago ng Pagtawag sa Animation"
+
+#: editor/animation_track_editor.cpp
+msgid "Anim Multi Change Keyframe Time"
+msgstr "Pagbago ng Oras ng Maraming Keyframe ng Animation"
+
+#: editor/animation_track_editor.cpp
+msgid "Anim Multi Change Transition"
+msgstr "Pagbago ng Maraming Transisyon ng Animation"
+
+#: editor/animation_track_editor.cpp
+msgid "Anim Multi Change Transform"
+msgstr "Pagbago ng Maraming Transform ng Animation"
+
+#: editor/animation_track_editor.cpp
+msgid "Anim Multi Change Keyframe Value"
+msgstr ""
+
+#: editor/animation_track_editor.cpp
+msgid "Anim Multi Change Call"
+msgstr "Pagbago ng Maraming Pagtawag ng Animation"
+
+#: editor/animation_track_editor.cpp
+msgid "Change Animation Length"
+msgstr "Pagbago ang Haba ng Animation"
+
+#: editor/animation_track_editor.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Change Animation Loop"
+msgstr "Pagbago ng Animation Loop"
+
+#: editor/animation_track_editor.cpp
+msgid "Property Track"
+msgstr "Pangkatangiang Track"
+
+#: editor/animation_track_editor.cpp
+msgid "3D Transform Track"
+msgstr "Track na Pang-3D Transform"
+
+#: editor/animation_track_editor.cpp
+msgid "Call Method Track"
+msgstr "Track na Pantawag ng Method"
+
+#: editor/animation_track_editor.cpp
+msgid "Bezier Curve Track"
+msgstr "Track na Pang-Bezier Curve"
+
+#: editor/animation_track_editor.cpp
+msgid "Audio Playback Track"
+msgstr "Track na Tagapatunog ng Audio"
+
+#: editor/animation_track_editor.cpp
+msgid "Animation Playback Track"
+msgstr "Track na Tagasimula ng Animation"
+
+#: editor/animation_track_editor.cpp
+msgid "Animation length (frames)"
+msgstr "Haba ng Animation (frames)"
+
+#: editor/animation_track_editor.cpp
+msgid "Animation length (seconds)"
+msgstr "Haba ng Animation (Kada segundo)"
+
+#: editor/animation_track_editor.cpp
+msgid "Add Track"
+msgstr "Magdagdag ng Track"
+
+#: editor/animation_track_editor.cpp
+msgid "Animation Looping"
+msgstr "Paguulit ng Animation"
+
+#: editor/animation_track_editor.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Functions:"
+msgstr "Mga Punsyon:"
+
+#: editor/animation_track_editor.cpp
+msgid "Audio Clips:"
+msgstr "Kabahagi ng Audio:"
+
+#: editor/animation_track_editor.cpp
+msgid "Anim Clips:"
+msgstr "Mga Kabahagi ng Anim:"
+
+#: editor/animation_track_editor.cpp
+msgid "Change Track Path"
+msgstr "Ibahin ang Daan ng Track"
+
+#: editor/animation_track_editor.cpp
+msgid "Toggle this track on/off."
+msgstr "Ipalit sa on/off ang track na ito."
+
+#: editor/animation_track_editor.cpp
+msgid "Update Mode (How this property is set)"
+msgstr "Paraang Nag-aapdate (Kung papano inayos ang katangian na ito)"
+
+#: editor/animation_track_editor.cpp
+msgid "Interpolation Mode"
+msgstr "Paraang Interpolasyon"
+
+#: editor/animation_track_editor.cpp
+msgid "Loop Wrap Mode (Interpolate end with beginning on loop)"
+msgstr ""
+"Paraang Paikot na Paghigpit (I-interpolate ang dulo kasama ng pagsimula ng "
+"loop)"
+
+#: editor/animation_track_editor.cpp
+msgid "Remove this track."
+msgstr "Tanggalin ang track na ito."
+
+#: editor/animation_track_editor.cpp
+msgid "Time (s): "
+msgstr "Oras (s): "
+
+#: editor/animation_track_editor.cpp
+msgid "Toggle Track Enabled"
+msgstr "Pinapagana ang Pagpalit ng Track"
+
+#: editor/animation_track_editor.cpp
+msgid "Continuous"
+msgstr "Tuloy-tuloy"
+
+#: editor/animation_track_editor.cpp
+msgid "Discrete"
+msgstr "Magkaiba"
+
+#: editor/animation_track_editor.cpp
+msgid "Trigger"
+msgstr "Trigger"
+
+#: editor/animation_track_editor.cpp
+msgid "Capture"
+msgstr "Pagkuha"
+
+#: editor/animation_track_editor.cpp
+msgid "Nearest"
+msgstr "Pinakamalapit"
+
+#: editor/animation_track_editor.cpp editor/plugins/curve_editor_plugin.cpp
+#: editor/property_editor.cpp
+msgid "Linear"
+msgstr "Pahanay"
+
+#: editor/animation_track_editor.cpp
+msgid "Cubic"
+msgstr "Pakubo"
+
+#: editor/animation_track_editor.cpp
+msgid "Clamp Loop Interp"
+msgstr "Hanggahan ang Loop Interp"
+
+#: editor/animation_track_editor.cpp
+msgid "Wrap Loop Interp"
+msgstr "Ibalot ang Loop Interp"
+
+#: editor/animation_track_editor.cpp
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Key"
+msgstr "Maglagay ng Key"
+
+#: editor/animation_track_editor.cpp
+msgid "Duplicate Key(s)"
+msgstr "Doblehin ang (mga) Key"
+
+#: editor/animation_track_editor.cpp
+msgid "Delete Key(s)"
+msgstr "Tanggalin Ang (mga) Key"
+
+#: editor/animation_track_editor.cpp
+msgid "Change Animation Update Mode"
+msgstr "Ibahin ang Paraan ng Pag-update ng Animation"
+
+#: editor/animation_track_editor.cpp
+msgid "Change Animation Interpolation Mode"
+msgstr "Ibahin ang Paraan ng Pag-interpolate ng Animation"
+
+#: editor/animation_track_editor.cpp
+msgid "Change Animation Loop Mode"
+msgstr "Ibahin Ang Paraan ng Pag-loop"
+
+#: editor/animation_track_editor.cpp
+msgid "Remove Anim Track"
+msgstr "Alisin ang Anim Track"
+
+#. TRANSLATORS: %s will be replaced by a phrase describing the target of track.
+#: editor/animation_track_editor.cpp
+msgid "Create NEW track for %s and insert key?"
+msgstr "Gumawa ng BAGONG track para sa %s at ilagay ang key?"
+
+#: editor/animation_track_editor.cpp
+msgid "Create %d NEW tracks and insert keys?"
+msgstr "Gumawa ng %d BAGONG mga track at maglagay ng mga key?"
+
+#: editor/animation_track_editor.cpp editor/create_dialog.cpp
+#: editor/editor_audio_buses.cpp editor/editor_feature_profile.cpp
+#: editor/editor_plugin_settings.cpp editor/plugin_config_dialog.cpp
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+#: editor/plugins/particles_editor_plugin.cpp
+#: editor/plugins/visual_shader_editor_plugin.cpp
+#: editor/script_create_dialog.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Create"
+msgstr "Lumikha"
+
+#: editor/animation_track_editor.cpp
+msgid "Anim Insert"
+msgstr "Maglagay ng Anim"
+
+#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
+#: editor/animation_track_editor.cpp
+msgid "node '%s'"
+msgstr "node '%s'"
+
+#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
+#: editor/animation_track_editor.cpp
+msgid "animation"
+msgstr "animation"
+
+#: editor/animation_track_editor.cpp
+msgid "AnimationPlayer can't animate itself, only other players."
+msgstr ""
+"Hindi kayang i-animate ng AnimationPlayer ang sarili, sa ibang manlalaro "
+"lang."
+
+#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
+#: editor/animation_track_editor.cpp
+msgid "property '%s'"
+msgstr "katangiang '%s'"
+
+#: editor/animation_track_editor.cpp
+msgid "Anim Create & Insert"
+msgstr "Lumikha at Maglagay ng Anim"
+
+#: editor/animation_track_editor.cpp
+msgid "Anim Insert Track & Key"
+msgstr "Maglagay ng Anim Track & Key"
+
+#: editor/animation_track_editor.cpp
+msgid "Anim Insert Key"
+msgstr "Maglagay ng Anim Key"
+
+#: editor/animation_track_editor.cpp
+msgid "Change Animation Step"
+msgstr "Ibahin ang Baytang ng Animation"
+
+#: editor/animation_track_editor.cpp
+msgid "Rearrange Tracks"
+msgstr "Ayusin ang mga Track"
+
+#: editor/animation_track_editor.cpp
+msgid "Transform tracks only apply to Spatial-based nodes."
+msgstr ""
+"Ang mga transform track ay maari lang ikapit sa mga nakabaseng Spatial node."
+
+#: editor/animation_track_editor.cpp
+msgid ""
+"Audio tracks can only point to nodes of type:\n"
+"-AudioStreamPlayer\n"
+"-AudioStreamPlayer2D\n"
+"-AudioStreamPlayer3D"
+msgstr ""
+"Maari lang tumuro sa mga node na ganitong uri:\n"
+"-AudioStreamPlayer\n"
+"-AudioStreamPlayer2D\n"
+"-AudioStreamPlayer3D"
+
+#: editor/animation_track_editor.cpp
+msgid "Animation tracks can only point to AnimationPlayer nodes."
+msgstr "Maari lang tumuro ang mga Animation tracks sa AnimationPlayer nodes."
+
+#: editor/animation_track_editor.cpp
+msgid "Not possible to add a new track without a root"
+msgstr "Hindi maaring magdagdag ng bagong track na walang ugat"
+
+#: editor/animation_track_editor.cpp
+msgid "Invalid track for Bezier (no suitable sub-properties)"
+msgstr "Hindi kaayong track para sa Bezier (walang kaayong subproperties)"
+
+#: editor/animation_track_editor.cpp
+msgid "Add Bezier Track"
+msgstr "Magdagdag ng Bezier Track"
+
+#: editor/animation_track_editor.cpp
+msgid "Track path is invalid, so can't add a key."
+msgstr "Ang pagdaraanan ng track ay imbalido, kaya hindi makakadagdag ng key."
+
+#: editor/animation_track_editor.cpp
+msgid "Track is not of type Spatial, can't insert key"
+msgstr "Hindi Spatial ang Track, hindi makakalagay ng key"
+
+#: editor/animation_track_editor.cpp
+msgid "Add Transform Track Key"
+msgstr "Magdagdag ng Transform Track Key"
+
+#: editor/animation_track_editor.cpp
+msgid "Add Track Key"
+msgstr "Magdagdag ng Track Key"
+
+#: editor/animation_track_editor.cpp
+msgid "Track path is invalid, so can't add a method key."
+msgstr "Di-wasto ang daan ng Track, kaya di maidaragdag ang method key."
+
+#: editor/animation_track_editor.cpp
+msgid "Add Method Track Key"
+msgstr "Magdagdag ng Method Track Key"
+
+#: editor/animation_track_editor.cpp
+msgid "Method not found in object: "
+msgstr "Hindi mahanap ang Method sa object: "
+
+#: editor/animation_track_editor.cpp
+msgid "Anim Move Keys"
+msgstr ""
+
+#: editor/animation_track_editor.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Clipboard is empty!"
+msgstr "Walang laman ang clipboard!"
+
+#: editor/animation_track_editor.cpp
+msgid "Paste Tracks"
+msgstr "Idikit ang mga Track"
+
+#: editor/animation_track_editor.cpp
+msgid "Anim Scale Keys"
+msgstr "Mga Key ng Anim Scale"
+
+#: editor/animation_track_editor.cpp
+msgid ""
+"This option does not work for Bezier editing, as it's only a single track."
+msgstr ""
+"Hindi gumagana ang opsyong ito para sa pag-edit ng Bezier, dahil iisa lang "
+"ito."
+
+#: editor/animation_track_editor.cpp
+msgid ""
+"This animation belongs to an imported scene, so changes to imported tracks "
+"will not be saved.\n"
+"\n"
+"To enable the ability to add custom tracks, navigate to the scene's import "
+"settings and set\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
+"\", then re-import.\n"
+"Alternatively, use an import preset that imports animations to separate "
+"files."
+msgstr ""
+"Ang animation na ito ay nabibilang sa na-import na eksena, kaya ang anumang "
+"pagbabago sa imported tracks ay hindi mase-save.\n"
+"\n"
+"Upang magbigay ng kakayahang magdagdag ng mga custom track, mag-navigate sa "
+"import settings ng eksena at itakda ang\n"
+"\"Animation> Stroage\" sa \"File\", i-activate ang \"Animation> Keep Custom "
+"Tracks\", pagkatapos ay muling i-import.\n"
+"Bilang kahalili, gumamit ng import preset na nag-i-import ng mga animation "
+"upang paghiwalayin ang mga file."
+
+#: editor/animation_track_editor.cpp
+msgid "Warning: Editing imported animation"
+msgstr "Babala: Ineedit ang na import na animation"
+
+#: editor/animation_track_editor.cpp
+msgid "Select an AnimationPlayer node to create and edit animations."
+msgstr ""
+
+#: editor/animation_track_editor.cpp
+msgid "Only show tracks from nodes selected in tree."
+msgstr ""
+
+#: editor/animation_track_editor.cpp
+msgid "Group tracks by node or display them as plain list."
+msgstr ""
+
+#: editor/animation_track_editor.cpp
+msgid "Snap:"
+msgstr ""
+
+#: editor/animation_track_editor.cpp
+msgid "Animation step value."
+msgstr ""
+
+#: editor/animation_track_editor.cpp
+msgid "Seconds"
+msgstr "Mga Segundo"
+
+#: editor/animation_track_editor.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "FPS"
+msgstr "FPS"
+
+#: editor/animation_track_editor.cpp editor/editor_plugin_settings.cpp
+#: editor/editor_resource_picker.cpp
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/shader_editor_plugin.cpp editor/plugins/text_editor.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp editor/project_manager.cpp
+#: editor/project_settings_editor.cpp editor/property_editor.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Edit"
+msgstr "Ayusin"
+
+#: editor/animation_track_editor.cpp
+msgid "Animation properties."
+msgstr "Mga katangian ng animation."
+
+#: editor/animation_track_editor.cpp
+msgid "Copy Tracks"
+msgstr "Kopyahin ang mga Tracks"
+
+#: editor/animation_track_editor.cpp
+msgid "Scale Selection"
+msgstr ""
+
+#: editor/animation_track_editor.cpp
+msgid "Scale From Cursor"
+msgstr ""
+
+#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Duplicate Selection"
+msgstr ""
+
+#: editor/animation_track_editor.cpp
+msgid "Duplicate Transposed"
+msgstr ""
+
+#: editor/animation_track_editor.cpp
+msgid "Delete Selection"
+msgstr ""
+
+#: editor/animation_track_editor.cpp
+msgid "Go to Next Step"
+msgstr ""
+
+#: editor/animation_track_editor.cpp
+msgid "Go to Previous Step"
+msgstr ""
+
+#: editor/animation_track_editor.cpp
+msgid "Apply Reset"
+msgstr ""
+
+#: editor/animation_track_editor.cpp
+msgid "Optimize Animation"
+msgstr "Pabilisin ang takbo ng Animation"
+
+#: editor/animation_track_editor.cpp
+msgid "Clean-Up Animation"
+msgstr ""
+
+#: editor/animation_track_editor.cpp
+msgid "Pick the node that will be animated:"
+msgstr "Piliin ang node na i-aanimate:"
+
+#: editor/animation_track_editor.cpp
+msgid "Use Bezier Curves"
+msgstr "Gumamit ng Bezier Curves"
+
+#: editor/animation_track_editor.cpp
+msgid "Create RESET Track(s)"
+msgstr "Gumawa ng (mga) RESET Track"
+
+#: editor/animation_track_editor.cpp
+msgid "Anim. Optimizer"
+msgstr ""
+
+#: editor/animation_track_editor.cpp
+msgid "Max. Linear Error:"
+msgstr ""
+
+#: editor/animation_track_editor.cpp
+msgid "Max. Angular Error:"
+msgstr ""
+
+#: editor/animation_track_editor.cpp
+msgid "Max Optimizable Angle:"
+msgstr ""
+
+#: editor/animation_track_editor.cpp
+msgid "Optimize"
+msgstr "Pabilisin ang takbo"
+
+#: editor/animation_track_editor.cpp
+msgid "Remove invalid keys"
+msgstr ""
+
+#: editor/animation_track_editor.cpp
+msgid "Remove unresolved and empty tracks"
+msgstr ""
+
+#: editor/animation_track_editor.cpp
+msgid "Clean-up all animations"
+msgstr ""
+
+#: editor/animation_track_editor.cpp
+msgid "Clean-Up Animation(s) (NO UNDO!)"
+msgstr ""
+
+#: editor/animation_track_editor.cpp
+msgid "Clean-Up"
+msgstr ""
+
+#: editor/animation_track_editor.cpp
+msgid "Scale Ratio:"
+msgstr ""
+
+#: editor/animation_track_editor.cpp
+msgid "Select Tracks to Copy"
+msgstr ""
+
+#: editor/animation_track_editor.cpp editor/editor_log.cpp
+#: editor/editor_resource_picker.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
+#: editor/scene_tree_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+msgid "Copy"
+msgstr "Kopyahin"
+
+#: editor/animation_track_editor.cpp
+msgid "Select All/None"
+msgstr "Piliin Lahat/Wala"
+
+#: editor/animation_track_editor_plugins.cpp
+msgid "Add Audio Track Clip"
+msgstr "Magdagdag ng Audio Track Clip"
+
+#: editor/animation_track_editor_plugins.cpp
+msgid "Change Audio Track Clip Start Offset"
+msgstr ""
+
+#: editor/animation_track_editor_plugins.cpp
+msgid "Change Audio Track Clip End Offset"
+msgstr "Ibahin ang Urong ng hulihan ng Audio Track"
+
+#: editor/array_property_edit.cpp
+msgid "Resize Array"
+msgstr ""
+
+#: editor/array_property_edit.cpp
+msgid "Change Array Value Type"
+msgstr ""
+
+#: editor/array_property_edit.cpp
+msgid "Change Array Value"
+msgstr ""
+
+#: editor/code_editor.cpp
+msgid "Go to Line"
+msgstr "Pumunta sa Line"
+
+#: editor/code_editor.cpp
+msgid "Line Number:"
+msgstr "Bilang ng Linya:"
+
+#: editor/code_editor.cpp
+msgid "%d replaced."
+msgstr "Naalis ang %d."
+
+#: editor/code_editor.cpp editor/editor_help.cpp
+msgid "%d match."
+msgstr "%d na kapares."
+
+#: editor/code_editor.cpp editor/editor_help.cpp
+msgid "%d matches."
+msgstr "%d na mga kapares."
+
+#: editor/code_editor.cpp editor/find_in_files.cpp
+msgid "Match Case"
+msgstr ""
+
+#: editor/code_editor.cpp editor/find_in_files.cpp
+msgid "Whole Words"
+msgstr ""
+
+#: editor/code_editor.cpp
+msgid "Replace"
+msgstr "Palitan"
+
+#: editor/code_editor.cpp
+msgid "Replace All"
+msgstr "Palitan Lahat"
+
+#: editor/code_editor.cpp
+msgid "Selection Only"
+msgstr "Napili lang"
+
+#: editor/code_editor.cpp editor/plugins/script_text_editor.cpp
+#: editor/plugins/text_editor.cpp
+msgid "Standard"
+msgstr "Karaniwan"
+
+#: editor/code_editor.cpp editor/plugins/script_editor_plugin.cpp
+msgid "Toggle Scripts Panel"
+msgstr ""
+
+#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+#: editor/plugins/texture_region_editor_plugin.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/gui/graph_edit.cpp
+msgid "Zoom In"
+msgstr "Palakihin Ang Tanaw"
+
+#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+#: editor/plugins/texture_region_editor_plugin.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/gui/graph_edit.cpp
+msgid "Zoom Out"
+msgstr "Paliitin Ang Tanaw"
+
+#: editor/code_editor.cpp
+msgid "Reset Zoom"
+msgstr "Ibalik sa Dati Ang Tanaw"
+
+#: editor/code_editor.cpp
+msgid "Warnings"
+msgstr "Mga Babala"
+
+#: editor/code_editor.cpp
+msgid "Line and column numbers."
+msgstr ""
+
+#: editor/connections_dialog.cpp
+msgid "Method in target node must be specified."
+msgstr ""
+
+#: editor/connections_dialog.cpp
+msgid "Method name must be a valid identifier."
+msgstr ""
+
+#: editor/connections_dialog.cpp
+msgid ""
+"Target method not found. Specify a valid method or attach a script to the "
+"target node."
+msgstr ""
+
+#: editor/connections_dialog.cpp
+msgid "Connect to Node:"
+msgstr "Ikabit sa Node:"
+
+#: editor/connections_dialog.cpp
+msgid "Connect to Script:"
+msgstr "Ikabit sa Script:"
+
+#: editor/connections_dialog.cpp
+msgid "From Signal:"
+msgstr "Galing sa Hudyat:"
+
+#: editor/connections_dialog.cpp
+msgid "Scene does not contain any script."
+msgstr "Walang script ang eksena."
+
+#: editor/connections_dialog.cpp editor/editor_autoload_settings.cpp
+#: editor/groups_editor.cpp editor/plugins/item_list_editor_plugin.cpp
+#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp
+msgid "Add"
+msgstr "Maglagay"
+
+#: editor/connections_dialog.cpp editor/dependency_editor.cpp
+#: editor/groups_editor.cpp editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/visual_shader_editor_plugin.cpp editor/project_manager.cpp
+#: editor/project_settings_editor.cpp
+msgid "Remove"
+msgstr "Alisin"
+
+#: editor/connections_dialog.cpp
+msgid "Add Extra Call Argument:"
+msgstr "Magdagdag ng Dagdag na Argumento sa Tawag:"
+
+#: editor/connections_dialog.cpp
+msgid "Extra Call Arguments:"
+msgstr "Mga Dagdag na Argumento ng Tawag:"
+
+#: editor/connections_dialog.cpp
+msgid "Receiver Method:"
+msgstr ""
+
+#: editor/connections_dialog.cpp
+msgid "Advanced"
+msgstr ""
+
+#: editor/connections_dialog.cpp
+msgid "Deferred"
+msgstr "Ipinagbaliban"
+
+#: editor/connections_dialog.cpp
+msgid ""
+"Defers the signal, storing it in a queue and only firing it at idle time."
+msgstr ""
+"Ipinagpaliban ang hudyat. Iniistore ito sa isang queue at pinapalitaw lamang "
+"kapag walang ginagawa."
+
+#: editor/connections_dialog.cpp
+msgid "Oneshot"
+msgstr "Isang Beses"
+
+#: editor/connections_dialog.cpp
+msgid "Disconnects the signal after its first emission."
+msgstr "Tinatanggal ang hudyat pagkatapos ng unang pag-trigger."
+
+#: editor/connections_dialog.cpp
+msgid "Cannot connect signal"
+msgstr "Hindi maikabit ang hudyat"
+
+#: editor/connections_dialog.cpp editor/dependency_editor.cpp
+#: editor/export_template_manager.cpp editor/groups_editor.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+#: editor/plugins/theme_editor_plugin.cpp
+#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp
+#: editor/project_settings_editor.cpp editor/property_editor.cpp
+#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Close"
+msgstr "Isara"
+
+#: editor/connections_dialog.cpp
+msgid "Connect"
+msgstr "Ikabit"
+
+#: editor/connections_dialog.cpp
+msgid "Signal:"
+msgstr "Hudyat:"
+
+#: editor/connections_dialog.cpp
+msgid "Connect '%s' to '%s'"
+msgstr "Ikabit ang '%s' sa '%s'"
+
+#: editor/connections_dialog.cpp
+msgid "Disconnect '%s' from '%s'"
+msgstr "Tanggalin ang '%s' sa '%s'"
+
+#: editor/connections_dialog.cpp
+msgid "Disconnect all from signal: '%s'"
+msgstr "Tanggalin lahat sa nakakabit na hudyat: '%s'"
+
+#: editor/connections_dialog.cpp
+msgid "Connect..."
+msgstr "Ikabit..."
+
+#: editor/connections_dialog.cpp
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "Disconnect"
+msgstr "Tanggalin"
+
+#: editor/connections_dialog.cpp
+msgid "Connect a Signal to a Method"
+msgstr "Ikabit Ang Hudyat sa Isang Method"
+
+#: editor/connections_dialog.cpp
+msgid "Edit Connection:"
+msgstr "Ayusin Ang Pagkakabit:"
+
+#: editor/connections_dialog.cpp
+msgid "Are you sure you want to remove all connections from the \"%s\" signal?"
+msgstr ""
+"Tiyak ka bang gusto mong alisin lahat ng mga pagkakabit mula sa hudyat \"%s"
+"\"?"
+
+#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp
+msgid "Signals"
+msgstr "Mga Hudyat"
+
+#: editor/connections_dialog.cpp
+msgid "Filter signals"
+msgstr "Salain ang mga hudyat"
+
+#: editor/connections_dialog.cpp
+msgid "Are you sure you want to remove all connections from this signal?"
+msgstr "Gusto mo bang alisin lahat ng pagkakabit sa hudyat na ito?"
+
+#: editor/connections_dialog.cpp
+msgid "Disconnect All"
+msgstr "Tanggalin Lahat"
+
+#: editor/connections_dialog.cpp
+msgid "Edit..."
+msgstr "Ayusin..."
+
+#: editor/connections_dialog.cpp
+msgid "Go to Method"
+msgstr "Pumunta sa Method"
+
+#: editor/create_dialog.cpp
+msgid "Change %s Type"
+msgstr "Ibahin Ang Uri ng %s"
+
+#: editor/create_dialog.cpp editor/project_settings_editor.cpp
+msgid "Change"
+msgstr "Baguhin"
+
+#: editor/create_dialog.cpp
+msgid "Create New %s"
+msgstr "Gumawa ng Bagong %s"
+
+#: editor/create_dialog.cpp editor/plugins/asset_library_editor_plugin.cpp
+msgid "No results for \"%s\"."
+msgstr "Walang resulta para sa \"%s\"."
+
+#: editor/create_dialog.cpp editor/property_selector.cpp
+msgid "No description available for %s."
+msgstr "Walang paglalarawan sa %s."
+
+#: editor/create_dialog.cpp editor/editor_file_dialog.cpp
+#: editor/filesystem_dock.cpp
+msgid "Favorites:"
+msgstr "Mga Paborito:"
+
+#: editor/create_dialog.cpp editor/editor_file_dialog.cpp
+msgid "Recent:"
+msgstr "Kamakailan:"
+
+#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
+#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: modules/visual_script/visual_script_property_selector.cpp
+msgid "Search:"
+msgstr "Maghanap:"
+
+#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
+#: editor/property_selector.cpp editor/quick_open.cpp
+#: modules/visual_script/visual_script_property_selector.cpp
+msgid "Matches:"
+msgstr "Mga Tugma:"
+
+#: editor/create_dialog.cpp editor/editor_feature_profile.cpp
+#: editor/editor_plugin_settings.cpp editor/plugin_config_dialog.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+#: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp
+#: modules/visual_script/visual_script_property_selector.cpp
+msgid "Description:"
+msgstr "Paglalarawan:"
+
+#: editor/dependency_editor.cpp
+msgid "Search Replacement For:"
+msgstr "Maghanap ng Kapalit para sa:"
+
+#: editor/dependency_editor.cpp
+msgid "Dependencies For:"
+msgstr "Mga Kaasahan Para Sa:"
+
+#: editor/dependency_editor.cpp
+msgid ""
+"Scene '%s' is currently being edited.\n"
+"Changes will only take effect when reloaded."
+msgstr ""
+"Kasalukuyang binabago ang Eksenang '%s'.\n"
+"Magpapakita lang ang mga pagbabago sa pag-reload."
+
+#: editor/dependency_editor.cpp
+msgid ""
+"Resource '%s' is in use.\n"
+"Changes will only take effect when reloaded."
+msgstr ""
+
+#: editor/dependency_editor.cpp
+#: modules/gdnative/gdnative_library_editor_plugin.cpp
+msgid "Dependencies"
+msgstr "Mga Kaasahan"
+
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
+msgid "Resource"
+msgstr ""
+
+#: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp
+#: editor/project_manager.cpp editor/project_settings_editor.cpp
+msgid "Path"
+msgstr "Kinaroroonan"
+
+#: editor/dependency_editor.cpp
+msgid "Dependencies:"
+msgstr "Mga Kaasahan:"
+
+#: editor/dependency_editor.cpp
+msgid "Fix Broken"
+msgstr "Ayusin Ang Sira"
+
+#: editor/dependency_editor.cpp
+msgid "Dependency Editor"
+msgstr "Editor ng Kaasahan"
+
+#: editor/dependency_editor.cpp
+msgid "Search Replacement Resource:"
+msgstr "Maghanap ng Pangpalit na Resource:"
+
+#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
+#: editor/editor_help_search.cpp editor/editor_node.cpp
+#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
+#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/script_create_dialog.cpp
+#: modules/visual_script/visual_script_property_selector.cpp
+#: scene/gui/file_dialog.cpp
+msgid "Open"
+msgstr "Buksan"
+
+#: editor/dependency_editor.cpp
+msgid "Owners Of:"
+msgstr "Mga May-ari ng:"
+
+#: editor/dependency_editor.cpp
+msgid ""
+"Remove the selected files from the project? (Cannot be undone.)\n"
+"Depending on your filesystem configuration, the files will either be moved "
+"to the system trash or deleted permanently."
+msgstr ""
+"Alisin ang mga napiling file sa proyekto? (Bawal nang bawiin.)\n"
+"Depende sa ayos ng filesystem mo, ang mga file ay maaring malipat sa "
+"basurahan ng system o mananatili nang mawala."
+
+#: editor/dependency_editor.cpp
+msgid ""
+"The files being removed are required by other resources in order for them to "
+"work.\n"
+"Remove them anyway? (Cannot be undone.)\n"
+"Depending on your filesystem configuration, the files will either be moved "
+"to the system trash or deleted permanently."
+msgstr ""
+
+#: editor/dependency_editor.cpp
+msgid "Cannot remove:"
+msgstr "Hindi matanggal:"
+
+#: editor/dependency_editor.cpp
+msgid "Error loading:"
+msgstr "Nabigong ikarga:"
+
+#: editor/dependency_editor.cpp
+msgid "Load failed due to missing dependencies:"
+msgstr "Nabigo ang pagkakarga dahil sa mga nawawalang kaasahan:"
+
+#: editor/dependency_editor.cpp editor/editor_node.cpp
+msgid "Open Anyway"
+msgstr ""
+
+#: editor/dependency_editor.cpp
+msgid "Which action should be taken?"
+msgstr "Aling kilos ang dapat tanggapin?"
+
+#: editor/dependency_editor.cpp
+msgid "Fix Dependencies"
+msgstr "Ayusin Ang Mga Kaasahan."
+
+#: editor/dependency_editor.cpp
+msgid "Errors loading!"
+msgstr ""
+
+#: editor/dependency_editor.cpp
+msgid "Permanently delete %d item(s)? (No undo!)"
+msgstr ""
+
+#: editor/dependency_editor.cpp
+msgid "Show Dependencies"
+msgstr "Ipakita Ang Mga Kaasahan"
+
+#: editor/dependency_editor.cpp
+msgid "Orphan Resource Explorer"
+msgstr ""
+
+#: editor/dependency_editor.cpp editor/editor_audio_buses.cpp
+#: editor/editor_file_dialog.cpp editor/editor_node.cpp
+#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp
+#: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp
+msgid "Delete"
+msgstr "Alisin"
+
+#: editor/dependency_editor.cpp
+msgid "Owns"
+msgstr "Ay Minamayari Ang"
+
+#: editor/dependency_editor.cpp
+msgid "Resources Without Explicit Ownership:"
+msgstr "Mga Resources na Walang Tiyak na Pagmamayari:"
+
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Key"
+msgstr ""
+
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Value"
+msgstr ""
+
+#: editor/editor_about.cpp
+msgid "Thanks from the Godot community!"
+msgstr "Salamat mula sa komunidad ng Godot!"
+
+#: editor/editor_about.cpp editor/editor_node.cpp editor/project_manager.cpp
+msgid "Click to copy."
+msgstr "Pindutin para kopyahin."
+
+#: editor/editor_about.cpp
+msgid "Godot Engine contributors"
+msgstr "Mga Tagapagambag ng Godot Engine"
+
+#: editor/editor_about.cpp
+msgid "Project Founders"
+msgstr "Mga Tagapagtatag ng Proyekto"
+
+#: editor/editor_about.cpp
+msgid "Lead Developer"
+msgstr "Pangunahing Developer"
+
+#. TRANSLATORS: This refers to a job title.
+#. The trailing space is used to distinguish with the project list application,
+#. you do not have to keep it in your translation.
+#: editor/editor_about.cpp
+msgid "Project Manager "
+msgstr "Tagapangasiwa ng Proyekto "
+
+#: editor/editor_about.cpp
+msgid "Developers"
+msgstr "Mga Developers"
+
+#: editor/editor_about.cpp
+msgid "Authors"
+msgstr "Mga May-akda"
+
+#: editor/editor_about.cpp
+msgid "Platinum Sponsors"
+msgstr ""
+
+#: editor/editor_about.cpp
+msgid "Gold Sponsors"
+msgstr ""
+
+#: editor/editor_about.cpp
+msgid "Silver Sponsors"
+msgstr ""
+
+#: editor/editor_about.cpp
+msgid "Bronze Sponsors"
+msgstr ""
+
+#: editor/editor_about.cpp
+msgid "Mini Sponsors"
+msgstr ""
+
+#: editor/editor_about.cpp
+msgid "Gold Donors"
+msgstr ""
+
+#: editor/editor_about.cpp
+msgid "Silver Donors"
+msgstr ""
+
+#: editor/editor_about.cpp
+msgid "Bronze Donors"
+msgstr ""
+
+#: editor/editor_about.cpp
+msgid "Donors"
+msgstr "Mga Nagabuloy"
+
+#: editor/editor_about.cpp
+msgid "License"
+msgstr "Lisensya"
+
+#: editor/editor_about.cpp
+msgid "Third-party Licenses"
+msgstr "Mga Lisensyang Third-party"
+
+#: editor/editor_about.cpp
+msgid ""
+"Godot Engine relies on a number of third-party free and open source "
+"libraries, all compatible with the terms of its MIT license. The following "
+"is an exhaustive list of all such third-party components with their "
+"respective copyright statements and license terms."
+msgstr ""
+
+#: editor/editor_about.cpp
+msgid "All Components"
+msgstr "Lahat ng Mga Bahagi"
+
+#: editor/editor_about.cpp
+msgid "Components"
+msgstr "Mga Bahagi"
+
+#: editor/editor_about.cpp
+msgid "Licenses"
+msgstr "Mga Lisensya"
+
+#: editor/editor_asset_installer.cpp
+msgid "Error opening asset file for \"%s\" (not in ZIP format)."
+msgstr ""
+
+#: editor/editor_asset_installer.cpp
+msgid "%s (already exists)"
+msgstr "%s (mayroon na)"
+
+#: editor/editor_asset_installer.cpp
+msgid "Contents of asset \"%s\" - %d file(s) conflict with your project:"
+msgstr ""
+
+#: editor/editor_asset_installer.cpp
+msgid "Contents of asset \"%s\" - No files conflict with your project:"
+msgstr ""
+
+#: editor/editor_asset_installer.cpp
+msgid "Uncompressing Assets"
+msgstr ""
+
+#: editor/editor_asset_installer.cpp
+msgid "The following files failed extraction from asset \"%s\":"
+msgstr ""
+
+#: editor/editor_asset_installer.cpp
+msgid "(and %s more files)"
+msgstr "(at %s pang mga file)"
+
+#: editor/editor_asset_installer.cpp
+msgid "Asset \"%s\" installed successfully!"
+msgstr ""
+
+#: editor/editor_asset_installer.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Success!"
+msgstr "Tagumpay!"
+
+#: editor/editor_asset_installer.cpp editor/editor_node.cpp
+msgid "Install"
+msgstr "I-install"
+
+#: editor/editor_asset_installer.cpp
+msgid "Asset Installer"
+msgstr "Taga-install ng mga Asset"
+
+#: editor/editor_audio_buses.cpp
+msgid "Speakers"
+msgstr "Mga Speaker"
+
+#: editor/editor_audio_buses.cpp
+msgid "Add Effect"
+msgstr "Magdagdag ng Effect"
+
+#: editor/editor_audio_buses.cpp
+msgid "Rename Audio Bus"
+msgstr "Palitan ang pangalan ng Audio Bus"
+
+#: editor/editor_audio_buses.cpp
+msgid "Change Audio Bus Volume"
+msgstr "Ibahin ang Kaingayan ng Audio Bus"
+
+#: editor/editor_audio_buses.cpp
+msgid "Toggle Audio Bus Solo"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Toggle Audio Bus Mute"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Toggle Audio Bus Bypass Effects"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Select Audio Bus Send"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Add Audio Bus Effect"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Move Bus Effect"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Delete Bus Effect"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Drag & drop to rearrange."
+msgstr "I-drag & i-hulog para ayusin."
+
+#: editor/editor_audio_buses.cpp
+msgid "Solo"
+msgstr "Naka-solo"
+
+#: editor/editor_audio_buses.cpp
+msgid "Mute"
+msgstr "Nakatahimik"
+
+#: editor/editor_audio_buses.cpp
+msgid "Bypass"
+msgstr "Pasikot-sikot"
+
+#: editor/editor_audio_buses.cpp
+msgid "Bus Options"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+msgid "Duplicate"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Reset Volume"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Delete Effect"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Audio"
+msgstr "Tunog (Audio)"
+
+#: editor/editor_audio_buses.cpp
+msgid "Add Audio Bus"
+msgstr "Magdagdag ng Audio Bus"
+
+#: editor/editor_audio_buses.cpp
+msgid "Master bus can't be deleted!"
+msgstr "Hindi maaring alisin ang master bus!"
+
+#: editor/editor_audio_buses.cpp
+msgid "Delete Audio Bus"
+msgstr "Alisin ang Audio Bus"
+
+#: editor/editor_audio_buses.cpp
+msgid "Duplicate Audio Bus"
+msgstr "Doblehin ang Audio Bus"
+
+#: editor/editor_audio_buses.cpp
+msgid "Reset Bus Volume"
+msgstr "Ibalik sa Dati Ang Kaingayan ng Bus"
+
+#: editor/editor_audio_buses.cpp
+msgid "Move Audio Bus"
+msgstr "Ilipat ang Audio Bus"
+
+#: editor/editor_audio_buses.cpp
+msgid "Save Audio Bus Layout As..."
+msgstr "I-save Ang Ayos ng Audio Bus Bilang..."
+
+#: editor/editor_audio_buses.cpp
+msgid "Location for New Layout..."
+msgstr "Lokasyon para sa Bagong Layout..."
+
+#: editor/editor_audio_buses.cpp
+msgid "Open Audio Bus Layout"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "There is no '%s' file."
+msgstr "Walang file na '%s'."
+
+#: editor/editor_audio_buses.cpp editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Layout"
+msgstr "Kaayusan"
+
+#: editor/editor_audio_buses.cpp
+msgid "Invalid file, not an audio bus layout."
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Error saving file: %s"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Add Bus"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Add a new Audio Bus to this layout."
+msgstr ""
+
+#: editor/editor_audio_buses.cpp editor/editor_resource_picker.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp editor/property_editor.cpp
+#: editor/script_create_dialog.cpp
+msgid "Load"
+msgstr "Kumarga"
+
+#: editor/editor_audio_buses.cpp
+msgid "Load an existing Bus Layout."
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Save As"
+msgstr "I-save Bilang"
+
+#: editor/editor_audio_buses.cpp
+msgid "Save this Bus Layout to a file."
+msgstr ""
+
+#: editor/editor_audio_buses.cpp editor/import_dock.cpp
+msgid "Load Default"
+msgstr "I-load ang Karaniwan"
+
+#: editor/editor_audio_buses.cpp
+msgid "Load the default Bus Layout."
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Create a new Bus Layout."
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Invalid name."
+msgstr "Di-wastong pangalan."
+
+#: editor/editor_autoload_settings.cpp
+msgid "Valid characters:"
+msgstr "Mga Pinapayagang Karakter:"
+
+#: editor/editor_autoload_settings.cpp
+msgid "Must not collide with an existing engine class name."
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Must not collide with an existing built-in type name."
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Must not collide with an existing global constant name."
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Keyword cannot be used as an autoload name."
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Autoload '%s' already exists!"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Rename Autoload"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Toggle AutoLoad Globals"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Move Autoload"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Remove Autoload"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp editor/editor_plugin_settings.cpp
+msgid "Enable"
+msgstr "Paganahin"
+
+#: editor/editor_autoload_settings.cpp
+msgid "Rearrange Autoloads"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Can't add autoload:"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "%s is an invalid path. File does not exist."
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "%s is an invalid path. Not in resource path (res://)."
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Add AutoLoad"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp
+#: editor/editor_plugin_settings.cpp
+#: editor/plugins/animation_tree_editor_plugin.cpp
+#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Path:"
+msgstr "Kinaroroonan:"
+
+#: editor/editor_autoload_settings.cpp
+msgid "Node Name:"
+msgstr "Pangalan ng Node:"
+
+#: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp
+#: editor/editor_plugin_settings.cpp editor/editor_profiler.cpp
+#: editor/project_manager.cpp editor/settings_config_dialog.cpp
+msgid "Name"
+msgstr "Pangalan"
+
+#: editor/editor_autoload_settings.cpp
+msgid "Global Variable"
+msgstr "Pangkalahatang (Global) Variable"
+
+#: editor/editor_data.cpp
+msgid "Paste Params"
+msgstr ""
+
+#: editor/editor_data.cpp
+msgid "Updating Scene"
+msgstr ""
+
+#: editor/editor_data.cpp
+msgid "Storing local changes..."
+msgstr ""
+
+#: editor/editor_data.cpp
+msgid "Updating scene..."
+msgstr ""
+
+#: editor/editor_data.cpp editor/editor_resource_picker.cpp
+msgid "[empty]"
+msgstr "[wala]"
+
+#: editor/editor_data.cpp
+msgid "[unsaved]"
+msgstr "[di-nakasave]"
+
+#: editor/editor_dir_dialog.cpp
+msgid "Please select a base directory first."
+msgstr ""
+
+#: editor/editor_dir_dialog.cpp
+msgid "Choose a Directory"
+msgstr ""
+
+#: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp
+#: editor/filesystem_dock.cpp editor/project_manager.cpp
+#: scene/gui/file_dialog.cpp
+msgid "Create Folder"
+msgstr ""
+
+#: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp
+#: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp
+#: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp
+#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp
+msgid "Name:"
+msgstr ""
+
+#: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp
+#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp
+msgid "Could not create folder."
+msgstr ""
+
+#: editor/editor_dir_dialog.cpp
+msgid "Choose"
+msgstr "Pumili"
+
+#: editor/editor_export.cpp
+msgid "Storing File:"
+msgstr "Inimpok ang File:"
+
+#: editor/editor_export.cpp
+msgid "No export template found at the expected path:"
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Packing"
+msgstr "Iniimpake"
+
+#: editor/editor_export.cpp
+msgid ""
+"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
+"Etc' in Project Settings."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid ""
+"Target platform requires 'ETC2' texture compression for GLES3. Enable "
+"'Import Etc 2' in Project Settings."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid ""
+"Target platform requires 'ETC' texture compression for the driver fallback "
+"to GLES2.\n"
+"Enable 'Import Etc' in Project Settings, or disable 'Driver Fallback "
+"Enabled'."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid ""
+"Target platform requires 'PVRTC' texture compression for GLES2. Enable "
+"'Import Pvrtc' in Project Settings."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid ""
+"Target platform requires 'ETC2' or 'PVRTC' texture compression for GLES3. "
+"Enable 'Import Etc 2' or 'Import Pvrtc' in Project Settings."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid ""
+"Target platform requires 'PVRTC' texture compression for the driver fallback "
+"to GLES2.\n"
+"Enable 'Import Pvrtc' in Project Settings, or disable 'Driver Fallback "
+"Enabled'."
+msgstr ""
+
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
+msgid "Custom debug template not found."
+msgstr ""
+
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
+msgid "Custom release template not found."
+msgstr ""
+
+#: editor/editor_export.cpp platform/javascript/export/export.cpp
+msgid "Template file not found:"
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB."
+msgstr ""
+
+#: editor/editor_feature_profile.cpp
+msgid "3D Editor"
+msgstr "3D Editor"
+
+#: editor/editor_feature_profile.cpp
+msgid "Script Editor"
+msgstr "Editor ng Script"
+
+#: editor/editor_feature_profile.cpp
+msgid "Asset Library"
+msgstr "Silid-Assetan"
+
+#: editor/editor_feature_profile.cpp
+msgid "Scene Tree Editing"
+msgstr ""
+
+#: editor/editor_feature_profile.cpp
+msgid "Node Dock"
+msgstr ""
+
+#: editor/editor_feature_profile.cpp
+msgid "FileSystem Dock"
+msgstr ""
+
+#: editor/editor_feature_profile.cpp
+msgid "Import Dock"
+msgstr ""
+
+#: editor/editor_feature_profile.cpp
+msgid "Allows to view and edit 3D scenes."
+msgstr ""
+
+#: editor/editor_feature_profile.cpp
+msgid "Allows to edit scripts using the integrated script editor."
+msgstr ""
+
+#: editor/editor_feature_profile.cpp
+msgid "Provides built-in access to the Asset Library."
+msgstr ""
+
+#: editor/editor_feature_profile.cpp
+msgid "Allows editing the node hierarchy in the Scene dock."
+msgstr ""
+
+#: editor/editor_feature_profile.cpp
+msgid ""
+"Allows to work with signals and groups of the node selected in the Scene "
+"dock."
+msgstr ""
+
+#: editor/editor_feature_profile.cpp
+msgid "Allows to browse the local file system via a dedicated dock."
+msgstr ""
+
+#: editor/editor_feature_profile.cpp
+msgid ""
+"Allows to configure import settings for individual assets. Requires the "
+"FileSystem dock to function."
+msgstr ""
+
+#: editor/editor_feature_profile.cpp
+msgid "(current)"
+msgstr "(nakatutok)"
+
+#: editor/editor_feature_profile.cpp
+msgid "(none)"
+msgstr "(wala)"
+
+#: editor/editor_feature_profile.cpp
+msgid "Remove currently selected profile, '%s'? Cannot be undone."
+msgstr "Alisin ang napiling profile na '%s'? Hindi na mababawi."
+
+#: editor/editor_feature_profile.cpp
+msgid "Profile must be a valid filename and must not contain '.'"
+msgstr "Ang profile ay dapat may wastong pangalan at walang '.'"
+
+#: editor/editor_feature_profile.cpp
+msgid "Profile with this name already exists."
+msgstr "Mayroon nang profile na may ganitong pangalan."
+
+#: editor/editor_feature_profile.cpp
+msgid "(Editor Disabled, Properties Disabled)"
+msgstr ""
+"(Hindi pinapagana ang Editor, Ang Tala ng Katangian Ay Hindi Rin Pinapagana)"
+
+#: editor/editor_feature_profile.cpp
+msgid "(Properties Disabled)"
+msgstr "(Hindi Pinapagana Ang Tala ng Mga Katangian)"
+
+#: editor/editor_feature_profile.cpp
+msgid "(Editor Disabled)"
+msgstr "(Hindi Pinapagana Ang Editor)"
+
+#: editor/editor_feature_profile.cpp
+msgid "Class Options:"
+msgstr "Mga Kaayusan ng Class:"
+
+#: editor/editor_feature_profile.cpp
+msgid "Enable Contextual Editor"
+msgstr ""
+
+#: editor/editor_feature_profile.cpp
+msgid "Class Properties:"
+msgstr "Katangian ng Class:"
+
+#: editor/editor_feature_profile.cpp
+msgid "Main Features:"
+msgstr "Pangunahing Mga Tampok:"
+
+#: editor/editor_feature_profile.cpp
+msgid "Nodes and Classes:"
+msgstr "Mga Node at Class:"
+
+#: editor/editor_feature_profile.cpp
+msgid "File '%s' format is invalid, import aborted."
+msgstr "Hindi wasto ang format ng '%s', Ipinagpaliban ang pag-aangkat."
+
+#: editor/editor_feature_profile.cpp
+msgid ""
+"Profile '%s' already exists. Remove it first before importing, import "
+"aborted."
+msgstr ""
+
+#: editor/editor_feature_profile.cpp
+msgid "Error saving profile to path: '%s'."
+msgstr "Hindi maisalba ang profile sa kinaroroonang: '%s'."
+
+#: editor/editor_feature_profile.cpp
+msgid "Reset to Default"
+msgstr "Ibalik sa Dati"
+
+#: editor/editor_feature_profile.cpp
+msgid "Current Profile:"
+msgstr "Nakatutok na Profile:"
+
+#: editor/editor_feature_profile.cpp
+msgid "Create Profile"
+msgstr "Gumawa ng Profile"
+
+#: editor/editor_feature_profile.cpp
+msgid "Remove Profile"
+msgstr "Alisin ang Profile"
+
+#: editor/editor_feature_profile.cpp
+msgid "Available Profiles:"
+msgstr "Magagamit na mga Profile:"
+
+#: editor/editor_feature_profile.cpp
+msgid "Make Current"
+msgstr ""
+
+#: editor/editor_feature_profile.cpp editor/editor_node.cpp
+#: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp
+msgid "Import"
+msgstr "Magangkat"
+
+#: editor/editor_feature_profile.cpp editor/project_export.cpp
+msgid "Export"
+msgstr ""
+
+#: editor/editor_feature_profile.cpp
+msgid "Configure Selected Profile:"
+msgstr ""
+
+#: editor/editor_feature_profile.cpp
+msgid "Extra Options:"
+msgstr ""
+
+#: editor/editor_feature_profile.cpp
+msgid "Create or import a profile to edit available classes and properties."
+msgstr ""
+
+#: editor/editor_feature_profile.cpp
+msgid "New profile name:"
+msgstr ""
+
+#: editor/editor_feature_profile.cpp
+msgid "Godot Feature Profile"
+msgstr ""
+
+#: editor/editor_feature_profile.cpp
+msgid "Import Profile(s)"
+msgstr ""
+
+#: editor/editor_feature_profile.cpp
+msgid "Export Profile"
+msgstr ""
+
+#: editor/editor_feature_profile.cpp
+msgid "Manage Editor Feature Profiles"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Select Current Folder"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "File exists, overwrite?"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Select This Folder"
+msgstr "Piliin ang Folder na Ito"
+
+#: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp
+msgid "Copy Path"
+msgstr "Kopyahin ang Kinaroroonan"
+
+#: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp
+msgid "Open in File Manager"
+msgstr "Buksan sa File Manager"
+
+#: editor/editor_file_dialog.cpp editor/editor_node.cpp
+#: editor/filesystem_dock.cpp editor/project_manager.cpp
+msgid "Show in File Manager"
+msgstr "Ipakita sa File Manager"
+
+#: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp
+msgid "New Folder..."
+msgstr "Bagong Folder..."
+
+#: editor/editor_file_dialog.cpp editor/find_in_files.cpp
+#: editor/plugins/version_control_editor_plugin.cpp
+msgid "Refresh"
+msgstr "I-refresh"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "All Recognized"
+msgstr "Nakilala Lahat"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "All Files (*)"
+msgstr "Lahat ng Files (*)"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Open a File"
+msgstr "Buksan ang File"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Open File(s)"
+msgstr "Buksan Ang (Mga) File"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Open a Directory"
+msgstr "Bumukas ng Directory"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Open a File or Directory"
+msgstr "Bumukas ng File o Directory"
+
+#: editor/editor_file_dialog.cpp editor/editor_node.cpp
+#: editor/editor_resource_picker.cpp editor/import_defaults_editor.cpp
+#: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/theme_editor_plugin.cpp scene/gui/file_dialog.cpp
+msgid "Save"
+msgstr "I-save"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Save a File"
+msgstr "Magsave ng File"
+
+#: editor/editor_file_dialog.cpp
+msgid "Go Back"
+msgstr "Bumalik"
+
+#: editor/editor_file_dialog.cpp
+msgid "Go Forward"
+msgstr "Umusad"
+
+#: editor/editor_file_dialog.cpp
+msgid "Go Up"
+msgstr "Tumaas"
+
+#: editor/editor_file_dialog.cpp
+msgid "Toggle Hidden Files"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp
+msgid "Toggle Favorite"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp
+msgid "Toggle Mode"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp
+msgid "Focus Path"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp
+msgid "Move Favorite Up"
+msgstr "Ilipat Pataas Ang Paborito"
+
+#: editor/editor_file_dialog.cpp
+msgid "Move Favorite Down"
+msgstr "Ilipat Pababa ang Paborito"
+
+#: editor/editor_file_dialog.cpp
+msgid "Go to previous folder."
+msgstr "Pumunta sa Nakaraang Folder."
+
+#: editor/editor_file_dialog.cpp
+msgid "Go to next folder."
+msgstr "Pumunta sa susunod na folder."
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Go to parent folder."
+msgstr "Pumunta sa ugat na folder."
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Refresh files."
+msgstr "I-refresh ang mga file."
+
+#: editor/editor_file_dialog.cpp
+msgid "(Un)favorite current folder."
+msgstr ""
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Toggle the visibility of hidden files."
+msgstr "I-toggle ang pagkakakita ng mga nakatagong file."
+
+#: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp
+msgid "View items as a grid of thumbnails."
+msgstr "Tingnan ang mga items na nakabalaylay ang mga thumbnail."
+
+#: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp
+msgid "View items as a list."
+msgstr "Tingnan ang mga item bilang talaan."
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Directories & Files:"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp editor/plugins/sprite_editor_plugin.cpp
+#: editor/plugins/style_box_editor_plugin.cpp editor/rename_dialog.cpp
+msgid "Preview:"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "File:"
+msgstr "File:"
+
+#: editor/editor_file_system.cpp
+msgid "ScanSources"
+msgstr ""
+
+#: editor/editor_file_system.cpp
+msgid ""
+"There are multiple importers for different types pointing to file %s, import "
+"aborted"
+msgstr ""
+
+#: editor/editor_file_system.cpp
+msgid "(Re)Importing Assets"
+msgstr "Inaangkat muli ang mga Asset"
+
+#: editor/editor_help.cpp
+msgid "Top"
+msgstr "Nasaitaas"
+
+#: editor/editor_help.cpp
+msgid "Class:"
+msgstr "Class:"
+
+#: editor/editor_help.cpp editor/scene_tree_editor.cpp
+#: editor/script_create_dialog.cpp
+msgid "Inherits:"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "Inherited by:"
+msgstr "Pinagmana ng:"
+
+#: editor/editor_help.cpp
+msgid "Description"
+msgstr "Paglalarawan"
+
+#: editor/editor_help.cpp
+msgid "Online Tutorials"
+msgstr "Mga Tutorial sa Online"
+
+#: editor/editor_help.cpp
+msgid "Properties"
+msgstr "Mga Katangian"
+
+#: editor/editor_help.cpp
+msgid "override:"
+msgstr "ipagpalit:"
+
+#: editor/editor_help.cpp
+msgid "default:"
+msgstr "karaniwan:"
+
+#: editor/editor_help.cpp
+msgid "Methods"
+msgstr "Mga Method"
+
+#: editor/editor_help.cpp
+msgid "Theme Properties"
+msgstr "Mga Katangian ng Theme"
+
+#: editor/editor_help.cpp
+msgid "Enumerations"
+msgstr "Mga Enumerasyon"
+
+#: editor/editor_help.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Constants"
+msgstr "Mga Konstant"
+
+#: editor/editor_help.cpp
+msgid "Property Descriptions"
+msgstr "Mga Paglalarawan ng Katangian"
+
+#: editor/editor_help.cpp
+msgid "(value)"
+msgstr "(halaga)"
+
+#: editor/editor_help.cpp
+msgid ""
+"There is currently no description for this property. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
+msgstr ""
+"Kasalukuyang walang panglalarawan sa katangiang ito. Maaring tulungan kami "
+"sa pamamagitan ng [color=$color][url=$url]pag-kokontribyut[/url][/color]!"
+
+#: editor/editor_help.cpp
+msgid "Method Descriptions"
+msgstr "Panglalarawan ng mga Method"
+
+#: editor/editor_help.cpp
+msgid ""
+"There is currently no description for this method. Please help us by [color="
+"$color][url=$url]contributing one[/url][/color]!"
+msgstr ""
+"Kasalukuyang walang paglalarawan sa method na ito. Maaring tulungan kami sa "
+"pamamagitan ng [color=$color][url=$url]pag-kontribyut[/url][/color]!"
+
+#: editor/editor_help_search.cpp editor/editor_node.cpp
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Search Help"
+msgstr "Maghanap sa Sanggunian"
+
+#: editor/editor_help_search.cpp
+msgid "Case Sensitive"
+msgstr ""
+
+#: editor/editor_help_search.cpp
+msgid "Show Hierarchy"
+msgstr "Ipakita ang Halpunuan"
+
+#: editor/editor_help_search.cpp
+msgid "Display All"
+msgstr "Ipakita Lahat"
+
+#: editor/editor_help_search.cpp
+msgid "Classes Only"
+msgstr "Mga Class Lang"
+
+#: editor/editor_help_search.cpp
+msgid "Methods Only"
+msgstr "Mga Method Lang"
+
+#: editor/editor_help_search.cpp
+msgid "Signals Only"
+msgstr "Mga Hudyat Lang"
+
+#: editor/editor_help_search.cpp
+msgid "Constants Only"
+msgstr "Mga Konstant Lang"
+
+#: editor/editor_help_search.cpp
+msgid "Properties Only"
+msgstr "Mga Katangian Lang"
+
+#: editor/editor_help_search.cpp
+msgid "Theme Properties Only"
+msgstr ""
+
+#: editor/editor_help_search.cpp
+msgid "Member Type"
+msgstr "Uri ng Kasapi"
+
+#: editor/editor_help_search.cpp
+msgid "Class"
+msgstr "Class"
+
+#: editor/editor_help_search.cpp
+msgid "Method"
+msgstr "Method"
+
+#: editor/editor_help_search.cpp editor/plugins/script_text_editor.cpp
+msgid "Signal"
+msgstr "Hudyat"
+
+#: editor/editor_help_search.cpp
+msgid "Constant"
+msgstr "Constant"
+
+#: editor/editor_help_search.cpp
+msgid "Property"
+msgstr "Katangian"
+
+#: editor/editor_help_search.cpp
+msgid "Theme Property"
+msgstr ""
+
+#: editor/editor_inspector.cpp editor/project_settings_editor.cpp
+msgid "Property:"
+msgstr ""
+
+#: editor/editor_inspector.cpp editor/scene_tree_dock.cpp
+#: modules/visual_script/visual_script_property_selector.cpp
+msgid "Set %s"
+msgstr "Itakda ang %s"
+
+#: editor/editor_inspector.cpp
+msgid "Set Multiple:"
+msgstr ""
+
+#: editor/editor_log.cpp
+msgid "Output:"
+msgstr "Kalabasan:"
+
+#: editor/editor_log.cpp editor/plugins/tile_map_editor_plugin.cpp
+msgid "Copy Selection"
+msgstr "Kopyahin Ang Pinagpipilian"
+
+#: editor/editor_log.cpp editor/editor_network_profiler.cpp
+#: editor/editor_profiler.cpp editor/editor_resource_picker.cpp
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+#: editor/property_editor.cpp editor/scene_tree_dock.cpp
+#: editor/script_editor_debugger.cpp
+#: modules/gdnative/gdnative_library_editor_plugin.cpp scene/gui/line_edit.cpp
+#: scene/gui/text_edit.cpp
+msgid "Clear"
+msgstr "Linisin"
+
+#: editor/editor_log.cpp
+msgid "Clear Output"
+msgstr "Linisin ang Kalabasan"
+
+#: editor/editor_network_profiler.cpp editor/editor_node.cpp
+#: editor/editor_profiler.cpp
+msgid "Stop"
+msgstr "Huminto"
+
+#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp
+#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp
+msgid "Start"
+msgstr "Magsimula"
+
+#: editor/editor_network_profiler.cpp
+msgid "%s/s"
+msgstr ""
+
+#: editor/editor_network_profiler.cpp
+msgid "Down"
+msgstr "Baba"
+
+#: editor/editor_network_profiler.cpp
+msgid "Up"
+msgstr "Taas"
+
+#: editor/editor_network_profiler.cpp editor/editor_node.cpp
+msgid "Node"
+msgstr "Node"
+
+#: editor/editor_network_profiler.cpp
+msgid "Incoming RPC"
+msgstr "Padating na RPC"
+
+#: editor/editor_network_profiler.cpp
+msgid "Incoming RSET"
+msgstr "Padating na RSET"
+
+#: editor/editor_network_profiler.cpp
+msgid "Outgoing RPC"
+msgstr "Paluwas na RPC"
+
+#: editor/editor_network_profiler.cpp
+msgid "Outgoing RSET"
+msgstr "Paluwas na RSET"
+
+#: editor/editor_node.cpp editor/project_manager.cpp
+msgid "New Window"
+msgstr "Bagong Tabing"
+
+#: editor/editor_node.cpp
+msgid ""
+"Spins when the editor window redraws.\n"
+"Update Continuously is enabled, which can increase power usage. Click to "
+"disable it."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Spins when the editor window redraws."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Imported resources can't be saved."
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/theme_editor_plugin.cpp
+#: modules/gltf/editor_scene_exporter_gltf_plugin.cpp scene/gui/dialogs.cpp
+msgid "OK"
+msgstr "OK"
+
+#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp
+msgid "Error saving resource!"
+msgstr "Hindi ma-save ang resource!"
+
+#: editor/editor_node.cpp
+msgid ""
+"This resource can't be saved because it does not belong to the edited scene. "
+"Make it unique first."
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp
+msgid "Save Resource As..."
+msgstr "I-save ang Resource Bilang..."
+
+#: editor/editor_node.cpp
+msgid "Can't open file for writing:"
+msgstr "Hindi mabuksan ang file para sa pagsusulat:"
+
+#: editor/editor_node.cpp
+msgid "Requested file format unknown:"
+msgstr "Hindi ma-tiyak ang porma ng file na hinihiling:"
+
+#: editor/editor_node.cpp
+msgid "Error while saving."
+msgstr "Nabigo habang nagsesave."
+
+#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
+msgid "Can't open '%s'. The file could have been moved or deleted."
+msgstr "Hindi mabuksan ang '%s'. Maaring nalipat o nabura ang file."
+
+#: editor/editor_node.cpp
+msgid "Error while parsing '%s'."
+msgstr "Nabigo habang sinisiyasat ang '%s'."
+
+#: editor/editor_node.cpp
+msgid "Unexpected end of file '%s'."
+msgstr "Hindi inaasahang hulihan ng file na '%s'."
+
+#: editor/editor_node.cpp
+msgid "Missing '%s' or its dependencies."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Error while loading '%s'."
+msgstr "Nabigo habang kinakarga ang '%s'."
+
+#: editor/editor_node.cpp
+msgid "Saving Scene"
+msgstr "Sinasalba ang Eksena"
+
+#: editor/editor_node.cpp
+msgid "Analyzing"
+msgstr "Sinusuri"
+
+#: editor/editor_node.cpp
+msgid "Creating Thumbnail"
+msgstr "Ginagawa ang Thumbnail"
+
+#: editor/editor_node.cpp
+msgid "This operation can't be done without a tree root."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"This scene can't be saved because there is a cyclic instancing inclusion.\n"
+"Please resolve it and then attempt to save again."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"Couldn't save scene. Likely dependencies (instances or inheritance) couldn't "
+"be satisfied."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Could not save one or more scenes!"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save All Scenes"
+msgstr ""
+
+#: editor/editor_node.cpp editor/scene_tree_dock.cpp
+msgid "Can't overwrite scene that is still open!"
+msgstr "Hindi ma-overwrite ang mga bukas pa ring eksena!"
+
+#: editor/editor_node.cpp
+msgid "Can't load MeshLibrary for merging!"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Error saving MeshLibrary!"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Can't load TileSet for merging!"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Error saving TileSet!"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Layout name not found!"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Restored the Default layout to its base settings."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"This resource belongs to a scene that was imported, so it's not editable.\n"
+"Please read the documentation relevant to importing scenes to better "
+"understand this workflow."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"This resource belongs to a scene that was instanced or inherited.\n"
+"Changes to it won't be kept when saving the current scene."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"This resource was imported, so it's not editable. Change its settings in the "
+"import panel and then re-import."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"This scene was imported, so changes to it won't be kept.\n"
+"Instancing it or inheriting will allow making changes to it.\n"
+"Please read the documentation relevant to importing scenes to better "
+"understand this workflow."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"This is a remote object, so changes to it won't be kept.\n"
+"Please read the documentation relevant to debugging to better understand "
+"this workflow."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "There is no defined scene to run."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save scene before running..."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Could not start subprocess!"
+msgstr ""
+
+#: editor/editor_node.cpp editor/filesystem_dock.cpp
+msgid "Open Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open Base Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Quick Open..."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Quick Open Scene..."
+msgstr "Mabilisang Magbukas ng Eksena..."
+
+#: editor/editor_node.cpp
+msgid "Quick Open Script..."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save & Close"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save changes to '%s' before closing?"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "%s no longer exists! Please specify a new save location."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"The current scene has no root node, but %d modified external resource(s) "
+"were saved anyway."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"A root node is required to save the scene. You can add a root node using the "
+"Scene tree dock."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save Scene As..."
+msgstr ""
+
+#: editor/editor_node.cpp modules/gltf/editor_scene_exporter_gltf_plugin.cpp
+msgid "This operation can't be done without a scene."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Export Mesh Library"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "This operation can't be done without a root node."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Export Tile Set"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "This operation can't be done without a selected node."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Current scene not saved. Open anyway?"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Undo: %s"
+msgstr "Ibalik: %s"
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Redo: %s"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Can't reload a scene that was never saved."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Reload Saved Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"The current scene has unsaved changes.\n"
+"Reload the saved scene anyway? This action cannot be undone."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Quick Run Scene..."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Quit"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Yes"
+msgstr "Oo"
+
+#: editor/editor_node.cpp
+msgid "Exit the editor?"
+msgstr "Umalis sa editor?"
+
+#: editor/editor_node.cpp
+msgid "Open Project Manager?"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save & Quit"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save changes to the following scene(s) before quitting?"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save changes to the following scene(s) before opening Project Manager?"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"This option is deprecated. Situations where refresh must be forced are now "
+"considered a bug. Please report."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Pick a Main Scene"
+msgstr "Pumili ng Pangunahing Eksena"
+
+#: editor/editor_node.cpp
+msgid "Close Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Reopen Closed Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Unable to enable addon plugin at: '%s' parsing of config failed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Unable to find script field for addon plugin at: '%s'."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Unable to load addon script from path: '%s'."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"Unable to load addon script from path: '%s'. This might be due to a code "
+"error in that script.\n"
+"Disabling the addon at '%s' to prevent further errors."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"Unable to load addon script from path: '%s' Base type is not EditorPlugin."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Unable to load addon script from path: '%s' Script is not in tool mode."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"Scene '%s' was automatically imported, so it can't be modified.\n"
+"To make changes to it, a new inherited scene can be created."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"Error loading scene, it must be inside the project path. Use 'Import' to "
+"open the scene, then save it inside the project path."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Scene '%s' has broken dependencies:"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Clear Recent Scenes"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"No main scene has ever been defined, select one?\n"
+"You can change it later in \"Project Settings\" under the 'application' "
+"category."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"Selected scene '%s' does not exist, select a valid one?\n"
+"You can change it later in \"Project Settings\" under the 'application' "
+"category."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"Selected scene '%s' is not a scene file, select a valid one?\n"
+"You can change it later in \"Project Settings\" under the 'application' "
+"category."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save Layout"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Delete Layout"
+msgstr "Alisin Ang Pagkaayos"
+
+#: editor/editor_node.cpp editor/import_dock.cpp
+#: editor/script_create_dialog.cpp
+msgid "Default"
+msgstr "Karaniwan"
+
+#: editor/editor_node.cpp editor/editor_resource_picker.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp
+msgid "Show in FileSystem"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Play This Scene"
+msgstr "Ipalabas Ang Eksenang Ito"
+
+#: editor/editor_node.cpp
+msgid "Close Tab"
+msgstr "Isara ang Tab"
+
+#: editor/editor_node.cpp
+msgid "Undo Close Tab"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
+msgid "Close Other Tabs"
+msgstr "Isara Ang Ibang Mga Tab"
+
+#: editor/editor_node.cpp
+msgid "Close Tabs to the Right"
+msgstr "Isara Ang Mga Tab Sa Kanan"
+
+#: editor/editor_node.cpp
+msgid "Close All Tabs"
+msgstr "Isara Lahat ng Tabs"
+
+#: editor/editor_node.cpp
+msgid "Switch Scene Tab"
+msgstr "Palitan Ang Tab ng Eksena"
+
+#: editor/editor_node.cpp
+msgid "%d more files or folders"
+msgstr "%d pang mga file o mga folder"
+
+#: editor/editor_node.cpp
+msgid "%d more folders"
+msgstr "%d pang mga folder"
+
+#: editor/editor_node.cpp
+msgid "%d more files"
+msgstr "%d mga file"
+
+#: editor/editor_node.cpp
+msgid "Dock Position"
+msgstr "Idaong Ang Posisyon"
+
+#: editor/editor_node.cpp
+msgid "Distraction Free Mode"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Toggle distraction-free mode."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Add a new scene."
+msgstr "Magdagdag ng panibagong eksena."
+
+#: editor/editor_node.cpp
+msgid "Scene"
+msgstr "Eksena"
+
+#: editor/editor_node.cpp
+msgid "Go to previously opened scene."
+msgstr "Bumalik sa dating binuksang eksena."
+
+#: editor/editor_node.cpp
+msgid "Copy Text"
+msgstr "Kopyahin Ang Nakasulat"
+
+#: editor/editor_node.cpp
+msgid "Next tab"
+msgstr "Susunod na tab"
+
+#: editor/editor_node.cpp
+msgid "Previous tab"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Filter Files..."
+msgstr "Magsala ng mga File..."
+
+#: editor/editor_node.cpp
+msgid "Operations with scene files."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "New Scene"
+msgstr "Panibagong Eksena"
+
+#: editor/editor_node.cpp
+msgid "New Inherited Scene..."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open Scene..."
+msgstr "Magbukas ng Eksena..."
+
+#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
+msgid "Open Recent"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Convert To..."
+msgstr "Palitan Sa..."
+
+#: editor/editor_node.cpp
+msgid "MeshLibrary..."
+msgstr "MeshLibrary..."
+
+#: editor/editor_node.cpp
+msgid "TileSet..."
+msgstr "TileSet..."
+
+#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+msgid "Undo"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+msgid "Redo"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Miscellaneous project or scene-wide tools."
+msgstr ""
+
+#: editor/editor_node.cpp editor/project_manager.cpp
+#: editor/script_create_dialog.cpp
+msgid "Project"
+msgstr "Proyekto"
+
+#: editor/editor_node.cpp
+msgid "Project Settings..."
+msgstr "Kaayusan ng Proyekto..."
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+msgid "Version Control"
+msgstr "Pagmamahala ng Bersyon"
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+msgid "Set Up Version Control"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Shut Down Version Control"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Export..."
+msgstr "Magluwas..."
+
+#: editor/editor_node.cpp
+msgid "Install Android Build Template..."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open Project Data Folder"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/tile_set_editor_plugin.cpp
+msgid "Tools"
+msgstr "Mga Kagamitan"
+
+#: editor/editor_node.cpp
+msgid "Orphan Resource Explorer..."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Reload Current Project"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Quit to Project List"
+msgstr "Umuwi sa Talaproyektuhan"
+
+#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
+#: editor/project_export.cpp
+msgid "Debug"
+msgstr "Debug"
+
+#: editor/editor_node.cpp
+msgid "Deploy with Remote Debug"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"When this option is enabled, using one-click deploy will make the executable "
+"attempt to connect to this computer's IP so the running project can be "
+"debugged.\n"
+"This option is intended to be used for remote debugging (typically with a "
+"mobile device).\n"
+"You don't need to enable it to use the GDScript debugger locally."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Small Deploy with Network Filesystem"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"When this option is enabled, using one-click deploy for Android will only "
+"export an executable without the project data.\n"
+"The filesystem will be provided from the project by the editor over the "
+"network.\n"
+"On Android, deploying will use the USB cable for faster performance. This "
+"option speeds up testing for projects with large assets."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Visible Collision Shapes"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"When this option is enabled, collision shapes and raycast nodes (for 2D and "
+"3D) will be visible in the running project."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Visible Navigation"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"When this option is enabled, navigation meshes and polygons will be visible "
+"in the running project."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Synchronize Scene Changes"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"When this option is enabled, any changes made to the scene in the editor "
+"will be replicated in the running project.\n"
+"When used remotely on a device, this is more efficient when the network "
+"filesystem option is enabled."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Synchronize Script Changes"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"When this option is enabled, any script that is saved will be reloaded in "
+"the running project.\n"
+"When used remotely on a device, this is more efficient when the network "
+"filesystem option is enabled."
+msgstr ""
+
+#: editor/editor_node.cpp editor/script_create_dialog.cpp
+msgid "Editor"
+msgstr "Editor"
+
+#: editor/editor_node.cpp
+msgid "Editor Settings..."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Editor Layout"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Take Screenshot"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Screenshots are stored in the Editor Data/Settings Folder."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Toggle Fullscreen"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Toggle System Console"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open Editor Data/Settings Folder"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open Editor Data Folder"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open Editor Settings Folder"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Manage Editor Features..."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Manage Export Templates..."
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/shader_editor_plugin.cpp
+msgid "Help"
+msgstr "Tulong"
+
+#: editor/editor_node.cpp
+msgid "Online Documentation"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Questions & Answers"
+msgstr "Mga Katanungan at Kasagutan"
+
+#: editor/editor_node.cpp
+msgid "Report a Bug"
+msgstr "Umulat ng Bug"
+
+#: editor/editor_node.cpp
+msgid "Suggest a Feature"
+msgstr "Magmungkahi ng Tampok"
+
+#: editor/editor_node.cpp
+msgid "Send Docs Feedback"
+msgstr "Magpadala ng Puna Ukol sa Docs"
+
+#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp
+msgid "Community"
+msgstr "Pamayanan"
+
+#: editor/editor_node.cpp
+msgid "About Godot"
+msgstr "Tungkol sa Godot"
+
+#: editor/editor_node.cpp
+msgid "Support Godot Development"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Play the project."
+msgstr "Ipalabas ang proyekto."
+
+#: editor/editor_node.cpp
+msgid "Play"
+msgstr "Ipalabas"
+
+#: editor/editor_node.cpp
+msgid "Pause the scene execution for debugging."
+msgstr "Ihinto muna ang pagpapalabas ng eksena para sa pagdebug."
+
+#: editor/editor_node.cpp
+msgid "Pause Scene"
+msgstr "Ihinto muna ang Eksena"
+
+#: editor/editor_node.cpp
+msgid "Stop the scene."
+msgstr "Itigil Ang Pagpapalabas ng Eksena."
+
+#: editor/editor_node.cpp
+msgid "Play the edited scene."
+msgstr "Ipalabas ang nabagong eksena."
+
+#: editor/editor_node.cpp
+msgid "Play Scene"
+msgstr "Ipalabas Ang Eksena"
+
+#: editor/editor_node.cpp
+msgid "Play custom scene"
+msgstr "Ipalabas ang pasadyang eksena"
+
+#: editor/editor_node.cpp
+msgid "Play Custom Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Changing the video driver requires restarting the editor."
+msgstr ""
+
+#: editor/editor_node.cpp editor/project_settings_editor.cpp
+#: editor/settings_config_dialog.cpp
+msgid "Save & Restart"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Update Continuously"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Update When Changed"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Hide Update Spinner"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "FileSystem"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Inspector"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Expand Bottom Panel"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Output"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Don't Save"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Android build template is missing, please install relevant templates."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Manage Templates"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Install from file"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Select android sources file"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"This will set up your project for custom Android builds by installing the "
+"source template to \"res://android/build\".\n"
+"You can then apply modifications and build your own custom APK on export "
+"(adding modules, changing the AndroidManifest.xml, etc.).\n"
+"Note that in order to make custom builds instead of using pre-built APKs, "
+"the \"Use Custom Build\" option should be enabled in the Android export "
+"preset."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"The Android build template is already installed in this project and it won't "
+"be overwritten.\n"
+"Remove the \"res://android/build\" directory manually before attempting this "
+"operation again."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Import Templates From ZIP File"
+msgstr "Magankat ng mga Template mula sa ZIP File"
+
+#: editor/editor_node.cpp
+msgid "Template Package"
+msgstr "Pakete ng Template"
+
+#: editor/editor_node.cpp modules/gltf/editor_scene_exporter_gltf_plugin.cpp
+msgid "Export Library"
+msgstr "Iluwas ang Library"
+
+#: editor/editor_node.cpp
+msgid "Merge With Existing"
+msgstr "Ipagsama Sa Mga Umiiral"
+
+#: editor/editor_node.cpp
+msgid "Apply MeshInstance Transforms"
+msgstr "Applayan ng MeshInstance Transform"
+
+#: editor/editor_node.cpp
+msgid "Open & Run a Script"
+msgstr "Magbukas at magpatakbo ng skrip"
+
+#: editor/editor_node.cpp
+msgid ""
+"The following files are newer on disk.\n"
+"What action should be taken?"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/shader_editor_plugin.cpp
+msgid "Reload"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/shader_editor_plugin.cpp
+msgid "Resave"
+msgstr "Isalba muli"
+
+#: editor/editor_node.cpp
+msgid "New Inherited"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Load Errors"
+msgstr "Mga Kabugian Sa Pagloload"
+
+#: editor/editor_node.cpp editor/plugins/tile_map_editor_plugin.cpp
+msgid "Select"
+msgstr "Magpili"
+
+#: editor/editor_node.cpp
+msgid "Select Current"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open 2D Editor"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open 3D Editor"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open Script Editor"
+msgstr ""
+
+#: editor/editor_node.cpp editor/project_manager.cpp
+msgid "Open Asset Library"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open the next Editor"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open the previous Editor"
+msgstr ""
+
+#: editor/editor_node.h
+msgid "Warning!"
+msgstr "Babala!"
+
+#: editor/editor_path.cpp
+msgid "No sub-resources found."
+msgstr ""
+
+#: editor/editor_path.cpp
+msgid "Open a list of sub-resources."
+msgstr ""
+
+#: editor/editor_plugin.cpp
+msgid "Creating Mesh Previews"
+msgstr ""
+
+#: editor/editor_plugin.cpp
+msgid "Thumbnail..."
+msgstr ""
+
+#: editor/editor_plugin_settings.cpp
+msgid "Main Script:"
+msgstr ""
+
+#: editor/editor_plugin_settings.cpp
+msgid "Edit Plugin"
+msgstr ""
+
+#: editor/editor_plugin_settings.cpp
+msgid "Installed Plugins:"
+msgstr ""
+
+#: editor/editor_plugin_settings.cpp editor/plugin_config_dialog.cpp
+msgid "Update"
+msgstr ""
+
+#: editor/editor_plugin_settings.cpp
+msgid "Version"
+msgstr ""
+
+#: editor/editor_plugin_settings.cpp
+msgid "Author"
+msgstr ""
+
+#: editor/editor_plugin_settings.cpp
+#: editor/plugins/version_control_editor_plugin.cpp
+#: modules/gdnative/gdnative_library_singleton_editor.cpp
+msgid "Status"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Measure:"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Frame Time (ms)"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Average Time (ms)"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Frame %"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Physics Frame %"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Inclusive"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Self"
+msgstr "Sarili"
+
+#: editor/editor_profiler.cpp
+msgid ""
+"Inclusive: Includes time from other functions called by this function.\n"
+"Use this to spot bottlenecks.\n"
+"\n"
+"Self: Only count the time spent in the function itself, not in other "
+"functions called by that function.\n"
+"Use this to find individual functions to optimize."
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Frame #:"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Time"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Calls"
+msgstr ""
+
+#: editor/editor_properties.cpp
+msgid "Edit Text:"
+msgstr "Baguhin ang Text:"
+
+#: editor/editor_properties.cpp editor/script_create_dialog.cpp
+msgid "On"
+msgstr "Nakabukas"
+
+#: editor/editor_properties.cpp
+msgid "Layer"
+msgstr ""
+
+#: editor/editor_properties.cpp
+msgid "Bit %d, value %d"
+msgstr ""
+
+#: editor/editor_properties.cpp
+msgid "[Empty]"
+msgstr "[Puwang]"
+
+#: editor/editor_properties.cpp editor/plugins/root_motion_editor_plugin.cpp
+msgid "Assign..."
+msgstr ""
+
+#: editor/editor_properties.cpp
+msgid "Invalid RID"
+msgstr ""
+
+#: editor/editor_properties.cpp
+msgid ""
+"Can't create a ViewportTexture on resources saved as a file.\n"
+"Resource needs to belong to a scene."
+msgstr ""
+
+#: editor/editor_properties.cpp
+msgid ""
+"Can't create a ViewportTexture on this resource because it's not set as "
+"local to scene.\n"
+"Please switch on the 'local to scene' property on it (and all resources "
+"containing it up to a node)."
+msgstr ""
+
+#: editor/editor_properties.cpp editor/property_editor.cpp
+msgid "Pick a Viewport"
+msgstr ""
+
+#: editor/editor_properties.cpp editor/property_editor.cpp
+msgid "Selected node is not a Viewport!"
+msgstr ""
+
+#: editor/editor_properties_array_dict.cpp
+msgid "Size: "
+msgstr "Laki: "
+
+#: editor/editor_properties_array_dict.cpp
+msgid "Page: "
+msgstr "Pahina: "
+
+#: editor/editor_properties_array_dict.cpp
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Remove Item"
+msgstr "Alisin ang Gamit"
+
+#: editor/editor_properties_array_dict.cpp
+msgid "New Key:"
+msgstr "Bagong Susi:"
+
+#: editor/editor_properties_array_dict.cpp
+msgid "New Value:"
+msgstr "Bagong Halaga:"
+
+#: editor/editor_properties_array_dict.cpp
+msgid "Add Key/Value Pair"
+msgstr ""
+
+#: editor/editor_resource_picker.cpp
+msgid ""
+"The selected resource (%s) does not match any type expected for this "
+"property (%s)."
+msgstr ""
+
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
+#: editor/editor_resource_picker.cpp editor/property_editor.cpp
+msgid "Make Unique"
+msgstr ""
+
+#: editor/editor_resource_picker.cpp
+#: editor/plugins/animation_blend_space_1d_editor.cpp
+#: editor/plugins/animation_blend_space_2d_editor.cpp
+#: editor/plugins/animation_blend_tree_editor_plugin.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/animation_state_machine_editor.cpp
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+#: editor/plugins/tile_map_editor_plugin.cpp editor/property_editor.cpp
+#: editor/scene_tree_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+msgid "Paste"
+msgstr "Idikit"
+
+#: editor/editor_resource_picker.cpp editor/property_editor.cpp
+msgid "Convert to %s"
+msgstr ""
+
+#: editor/editor_resource_picker.cpp editor/property_editor.cpp
+msgid "New %s"
+msgstr ""
+
+#: editor/editor_resource_picker.cpp editor/property_editor.cpp
+msgid "New Script"
+msgstr ""
+
+#: editor/editor_resource_picker.cpp editor/scene_tree_dock.cpp
+msgid "Extend Script"
+msgstr ""
+
+#: editor/editor_run_native.cpp
+msgid ""
+"No runnable export preset found for this platform.\n"
+"Please add a runnable preset in the Export menu or define an existing preset "
+"as runnable."
+msgstr ""
+
+#: editor/editor_run_script.cpp
+msgid "Write your logic in the _run() method."
+msgstr ""
+
+#: editor/editor_run_script.cpp
+msgid "There is an edited scene already."
+msgstr ""
+
+#: editor/editor_run_script.cpp
+msgid "Couldn't instance script:"
+msgstr ""
+
+#: editor/editor_run_script.cpp
+msgid "Did you forget the 'tool' keyword?"
+msgstr ""
+
+#: editor/editor_run_script.cpp
+msgid "Couldn't run script:"
+msgstr ""
+
+#: editor/editor_run_script.cpp
+msgid "Did you forget the '_run' method?"
+msgstr ""
+
+#: editor/editor_spin_slider.cpp
+msgid "Hold %s to round to integers. Hold Shift for more precise changes."
+msgstr ""
+
+#: editor/editor_sub_scene.cpp
+msgid "Select Node(s) to Import"
+msgstr ""
+
+#: editor/editor_sub_scene.cpp editor/project_manager.cpp
+msgid "Browse"
+msgstr ""
+
+#: editor/editor_sub_scene.cpp
+msgid "Scene Path:"
+msgstr ""
+
+#: editor/editor_sub_scene.cpp
+msgid "Import From Node:"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Open the folder containing these templates."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Uninstall these templates."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "There are no mirrors available."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Retrieving the mirror list..."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Starting the download..."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Error requesting URL:"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Connecting to the mirror..."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Can't resolve the requested address."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Can't connect to the mirror."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "No response from the mirror."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Request failed."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Request ended up in a redirect loop."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Request failed:"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Download complete; extracting templates..."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Cannot remove temporary file:"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid ""
+"Templates installation failed.\n"
+"The problematic templates archives can be found at '%s'."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Error getting the list of mirrors."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Error parsing JSON with the list of mirrors. Please report this issue!"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Best available mirror"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid ""
+"No download links found for this version. Direct download is only available "
+"for official releases."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Disconnected"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Resolving"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Can't Resolve"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Connecting..."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Can't Connect"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Connected"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Requesting..."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Downloading"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Connection Error"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "SSL Handshake Error"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Can't open the export templates file."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Invalid version.txt format inside the export templates file: %s."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "No version.txt found inside the export templates file."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Error creating path for extracting templates:"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Extracting Export Templates"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Importing:"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Remove templates for the version '%s'?"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Uncompressing Android Build Sources"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Export Template Manager"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Current Version:"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Export templates are missing. Download them or install from a file."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Export templates are installed and ready to be used."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Open Folder"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Open the folder containing installed templates for the current version."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Uninstall"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Uninstall templates for the current version."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Download from:"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Open in Web Browser"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Copy Mirror URL"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Download and Install"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid ""
+"Download and install templates for the current version from the best "
+"possible mirror."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Official export templates aren't available for development builds."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Install from File"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Install templates from a local file."
+msgstr ""
+
+#: editor/export_template_manager.cpp editor/find_in_files.cpp
+#: editor/progress_dialog.cpp scene/gui/dialogs.cpp
+msgid "Cancel"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Cancel the download of the templates."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Other Installed Versions:"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Uninstall Template"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Select Template File"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Godot Export Templates"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid ""
+"The templates will continue to download.\n"
+"You may experience a short editor freeze when they finish."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Favorites"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Status: Import of file failed. Please fix file and reimport manually."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
+"Importing has been disabled for this file, so it can't be opened for editing."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Cannot move/rename resources root."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Cannot move a folder into itself."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Error moving:"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Error duplicating:"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Unable to update dependencies:"
+msgstr ""
+
+#: editor/filesystem_dock.cpp editor/scene_tree_editor.cpp
+msgid "No name provided."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Provided name contains invalid characters."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "A file or folder with this name already exists."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Name contains invalid characters."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
+"The following files or folders conflict with items in the target location "
+"'%s':\n"
+"\n"
+"%s\n"
+"\n"
+"Do you wish to overwrite them?"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Renaming file:"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Renaming folder:"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Duplicating file:"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Duplicating folder:"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "New Inherited Scene"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Set As Main Scene"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Open Scenes"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Instance"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Add to Favorites"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Remove from Favorites"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Edit Dependencies..."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "View Owners..."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Move To..."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "New Scene..."
+msgstr ""
+
+#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
+msgid "New Script..."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "New Resource..."
+msgstr ""
+
+#: editor/filesystem_dock.cpp editor/inspector_dock.cpp
+#: editor/plugins/visual_shader_editor_plugin.cpp
+#: editor/script_editor_debugger.cpp
+msgid "Expand All"
+msgstr ""
+
+#: editor/filesystem_dock.cpp editor/inspector_dock.cpp
+#: editor/plugins/visual_shader_editor_plugin.cpp
+#: editor/script_editor_debugger.cpp
+msgid "Collapse All"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Sort files"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Sort by Name (Ascending)"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Sort by Name (Descending)"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Sort by Type (Ascending)"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Sort by Type (Descending)"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Sort by Last Modified"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Sort by First Modified"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Duplicate..."
+msgstr ""
+
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
+msgid "Rename..."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Focus the search box"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Previous Folder/File"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Next Folder/File"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Re-Scan Filesystem"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Toggle Split Mode"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Search files"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
+"Scanning Files,\n"
+"Please Wait..."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Move"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+#: editor/project_manager.cpp editor/rename_dialog.cpp
+#: editor/scene_tree_dock.cpp
+msgid "Rename"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Overwrite"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Create Scene"
+msgstr ""
+
+#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
+msgid "Create Script"
+msgstr ""
+
+#: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp
+msgid "Find in Files"
+msgstr ""
+
+#: editor/find_in_files.cpp
+msgid "Find:"
+msgstr ""
+
+#: editor/find_in_files.cpp
+msgid "Folder:"
+msgstr ""
+
+#: editor/find_in_files.cpp
+msgid "Filters:"
+msgstr ""
+
+#: editor/find_in_files.cpp
+msgid ""
+"Include the files with the following extensions. Add or remove them in "
+"ProjectSettings."
+msgstr ""
+
+#: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+msgid "Find..."
+msgstr ""
+
+#: editor/find_in_files.cpp editor/plugins/script_text_editor.cpp
+msgid "Replace..."
+msgstr ""
+
+#: editor/find_in_files.cpp
+msgid "Find: "
+msgstr ""
+
+#: editor/find_in_files.cpp
+msgid "Replace: "
+msgstr ""
+
+#: editor/find_in_files.cpp
+msgid "Replace all (no undo)"
+msgstr ""
+
+#: editor/find_in_files.cpp
+msgid "Searching..."
+msgstr ""
+
+#: editor/find_in_files.cpp
+msgid "%d match in %d file."
+msgstr ""
+
+#: editor/find_in_files.cpp
+msgid "%d matches in %d file."
+msgstr ""
+
+#: editor/find_in_files.cpp
+msgid "%d matches in %d files."
+msgstr ""
+
+#: editor/groups_editor.cpp
+msgid "Add to Group"
+msgstr ""
+
+#: editor/groups_editor.cpp
+msgid "Remove from Group"
+msgstr ""
+
+#: editor/groups_editor.cpp
+msgid "Group name already exists."
+msgstr ""
+
+#: editor/groups_editor.cpp
+msgid "Invalid group name."
+msgstr ""
+
+#: editor/groups_editor.cpp
+msgid "Rename Group"
+msgstr ""
+
+#: editor/groups_editor.cpp
+msgid "Delete Group"
+msgstr ""
+
+#: editor/groups_editor.cpp editor/node_dock.cpp
+msgid "Groups"
+msgstr ""
+
+#: editor/groups_editor.cpp
+msgid "Nodes Not in Group"
+msgstr ""
+
+#: editor/groups_editor.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_editor.cpp
+msgid "Filter nodes"
+msgstr ""
+
+#: editor/groups_editor.cpp
+msgid "Nodes in Group"
+msgstr ""
+
+#: editor/groups_editor.cpp
+msgid "Empty groups will be automatically removed."
+msgstr ""
+
+#: editor/groups_editor.cpp
+msgid "Group Editor"
+msgstr ""
+
+#: editor/groups_editor.cpp
+msgid "Manage Groups"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import as Single Scene"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import with Separate Animations"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import with Separate Materials"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import with Separate Objects"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import with Separate Objects+Materials"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import with Separate Objects+Animations"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import with Separate Materials+Animations"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import with Separate Objects+Materials+Animations"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import as Multiple Scenes"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import as Multiple Scenes+Materials"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+#: editor/plugins/mesh_library_editor_plugin.cpp
+msgid "Import Scene"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Importing Scene..."
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Generating Lightmaps"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Generating for Mesh: "
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Running Custom Script..."
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Couldn't load post-import script:"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Invalid/broken script for post-import (check console):"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Error running post-import script:"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Did you return a Node-derived object in the `post_import()` method?"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Saving..."
+msgstr ""
+
+#: editor/import_defaults_editor.cpp
+msgid "Select Importer"
+msgstr ""
+
+#: editor/import_defaults_editor.cpp
+msgid "Importer:"
+msgstr ""
+
+#: editor/import_defaults_editor.cpp
+msgid "Reset to Defaults"
+msgstr ""
+
+#: editor/import_dock.cpp
+msgid "Keep File (No Import)"
+msgstr ""
+
+#: editor/import_dock.cpp
+msgid "%d Files"
+msgstr ""
+
+#: editor/import_dock.cpp
+msgid "Set as Default for '%s'"
+msgstr ""
+
+#: editor/import_dock.cpp
+msgid "Clear Default for '%s'"
+msgstr ""
+
+#: editor/import_dock.cpp
+msgid "Reimport"
+msgstr ""
+
+#: editor/import_dock.cpp
+msgid ""
+"You have pending changes that haven't been applied yet. Click Reimport to "
+"apply changes made to the import options.\n"
+"Selecting another resource in the FileSystem dock without clicking Reimport "
+"first will discard changes made in the Import dock."
+msgstr ""
+
+#: editor/import_dock.cpp
+msgid "Import As:"
+msgstr ""
+
+#: editor/import_dock.cpp
+msgid "Preset"
+msgstr ""
+
+#: editor/import_dock.cpp
+msgid "Save Scenes, Re-Import, and Restart"
+msgstr ""
+
+#: editor/import_dock.cpp
+msgid "Changing the type of an imported file requires editor restart."
+msgstr ""
+
+#: editor/import_dock.cpp
+msgid ""
+"WARNING: Assets exist that use this resource, they may stop loading properly."
+msgstr ""
+
+#: editor/inspector_dock.cpp
+msgid "Failed to load resource."
+msgstr ""
+
+#: editor/inspector_dock.cpp
+msgid "Copy Properties"
+msgstr ""
+
+#: editor/inspector_dock.cpp
+msgid "Paste Properties"
+msgstr ""
+
+#: editor/inspector_dock.cpp
+msgid "Make Sub-Resources Unique"
+msgstr ""
+
+#: editor/inspector_dock.cpp
+msgid "Create a new resource in memory and edit it."
+msgstr ""
+
+#: editor/inspector_dock.cpp
+msgid "Load an existing resource from disk and edit it."
+msgstr ""
+
+#: editor/inspector_dock.cpp
+msgid "Save the currently edited resource."
+msgstr ""
+
+#: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Save As..."
+msgstr ""
+
+#: editor/inspector_dock.cpp
+msgid "Extra resource options."
+msgstr ""
+
+#: editor/inspector_dock.cpp
+msgid "Edit Resource from Clipboard"
+msgstr ""
+
+#: editor/inspector_dock.cpp
+msgid "Copy Resource"
+msgstr ""
+
+#: editor/inspector_dock.cpp
+msgid "Make Resource Built-In"
+msgstr ""
+
+#: editor/inspector_dock.cpp
+msgid "Go to the previous edited object in history."
+msgstr ""
+
+#: editor/inspector_dock.cpp
+msgid "Go to the next edited object in history."
+msgstr ""
+
+#: editor/inspector_dock.cpp
+msgid "History of recently edited objects."
+msgstr ""
+
+#: editor/inspector_dock.cpp
+msgid "Open documentation for this object."
+msgstr ""
+
+#: editor/inspector_dock.cpp editor/scene_tree_dock.cpp
+msgid "Open Documentation"
+msgstr ""
+
+#: editor/inspector_dock.cpp
+msgid "Filter properties"
+msgstr ""
+
+#: editor/inspector_dock.cpp
+msgid "Manage object properties."
+msgstr ""
+
+#: editor/inspector_dock.cpp
+msgid "Changes may be lost!"
+msgstr ""
+
+#: editor/multi_node_edit.cpp
+msgid "MultiNode Set"
+msgstr ""
+
+#: editor/node_dock.cpp
+msgid "Select a single node to edit its signals and groups."
+msgstr ""
+
+#: editor/plugin_config_dialog.cpp
+msgid "Edit a Plugin"
+msgstr ""
+
+#: editor/plugin_config_dialog.cpp
+msgid "Create a Plugin"
+msgstr ""
+
+#: editor/plugin_config_dialog.cpp
+msgid "Plugin Name:"
+msgstr ""
+
+#: editor/plugin_config_dialog.cpp
+msgid "Subfolder:"
+msgstr ""
+
+#: editor/plugin_config_dialog.cpp
+msgid "Author:"
+msgstr ""
+
+#: editor/plugin_config_dialog.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Version:"
+msgstr ""
+
+#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp
+msgid "Language:"
+msgstr ""
+
+#: editor/plugin_config_dialog.cpp
+msgid "Script Name:"
+msgstr ""
+
+#: editor/plugin_config_dialog.cpp
+msgid "Activate now?"
+msgstr ""
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Create Polygon"
+msgstr ""
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+#: editor/plugins/animation_blend_space_1d_editor.cpp
+#: editor/plugins/animation_blend_space_2d_editor.cpp
+msgid "Create points."
+msgstr ""
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid ""
+"Edit points.\n"
+"LMB: Move Point\n"
+"RMB: Erase Point"
+msgstr ""
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+#: editor/plugins/animation_blend_space_1d_editor.cpp
+msgid "Erase points."
+msgstr ""
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid "Edit Polygon"
+msgstr ""
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid "Insert Point"
+msgstr ""
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid "Edit Polygon (Remove Point)"
+msgstr ""
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid "Remove Polygon And Point"
+msgstr ""
+
+#: editor/plugins/animation_blend_space_1d_editor.cpp
+#: editor/plugins/animation_blend_space_2d_editor.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/animation_state_machine_editor.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Animation"
+msgstr ""
+
+#: editor/plugins/animation_blend_space_1d_editor.cpp
+#: editor/plugins/animation_blend_space_2d_editor.cpp
+#: editor/plugins/animation_blend_tree_editor_plugin.cpp
+#: editor/plugins/animation_state_machine_editor.cpp
+msgid "Load..."
+msgstr ""
+
+#: editor/plugins/animation_blend_space_1d_editor.cpp
+#: editor/plugins/animation_blend_space_2d_editor.cpp
+msgid "Move Node Point"
+msgstr ""
+
+#: editor/plugins/animation_blend_space_1d_editor.cpp
+msgid "Change BlendSpace1D Limits"
+msgstr ""
+
+#: editor/plugins/animation_blend_space_1d_editor.cpp
+msgid "Change BlendSpace1D Labels"
+msgstr ""
+
+#: editor/plugins/animation_blend_space_1d_editor.cpp
+#: editor/plugins/animation_blend_space_2d_editor.cpp
+#: editor/plugins/animation_state_machine_editor.cpp
+msgid "This type of node can't be used. Only root nodes are allowed."
+msgstr ""
+
+#: editor/plugins/animation_blend_space_1d_editor.cpp
+#: editor/plugins/animation_blend_space_2d_editor.cpp
+msgid "Add Node Point"
+msgstr ""
+
+#: editor/plugins/animation_blend_space_1d_editor.cpp
+#: editor/plugins/animation_blend_space_2d_editor.cpp
+msgid "Add Animation Point"
+msgstr ""
+
+#: editor/plugins/animation_blend_space_1d_editor.cpp
+msgid "Remove BlendSpace1D Point"
+msgstr ""
+
+#: editor/plugins/animation_blend_space_1d_editor.cpp
+msgid "Move BlendSpace1D Node Point"
+msgstr ""
+
+#: editor/plugins/animation_blend_space_1d_editor.cpp
+#: editor/plugins/animation_blend_space_2d_editor.cpp
+#: editor/plugins/animation_blend_tree_editor_plugin.cpp
+#: editor/plugins/animation_state_machine_editor.cpp
+msgid ""
+"AnimationTree is inactive.\n"
+"Activate to enable playback, check node warnings if activation fails."
+msgstr ""
+
+#: editor/plugins/animation_blend_space_1d_editor.cpp
+#: editor/plugins/animation_blend_space_2d_editor.cpp
+msgid "Set the blending position within the space"
+msgstr ""
+
+#: editor/plugins/animation_blend_space_1d_editor.cpp
+#: editor/plugins/animation_blend_space_2d_editor.cpp
+msgid "Select and move points, create points with RMB."
+msgstr ""
+
+#: editor/plugins/animation_blend_space_1d_editor.cpp
+#: editor/plugins/animation_blend_space_2d_editor.cpp scene/gui/graph_edit.cpp
+msgid "Enable snap and show grid."
+msgstr ""
+
+#: editor/plugins/animation_blend_space_1d_editor.cpp
+#: editor/plugins/animation_blend_space_2d_editor.cpp
+msgid "Point"
+msgstr ""
+
+#: editor/plugins/animation_blend_space_1d_editor.cpp
+#: editor/plugins/animation_blend_space_2d_editor.cpp
+#: editor/plugins/animation_blend_tree_editor_plugin.cpp
+msgid "Open Editor"
+msgstr ""
+
+#: editor/plugins/animation_blend_space_1d_editor.cpp
+#: editor/plugins/animation_blend_space_2d_editor.cpp
+#: editor/plugins/animation_blend_tree_editor_plugin.cpp
+#: editor/plugins/animation_state_machine_editor.cpp
+msgid "Open Animation Node"
+msgstr ""
+
+#: editor/plugins/animation_blend_space_2d_editor.cpp
+msgid "Triangle already exists."
+msgstr ""
+
+#: editor/plugins/animation_blend_space_2d_editor.cpp
+msgid "Add Triangle"
+msgstr ""
+
+#: editor/plugins/animation_blend_space_2d_editor.cpp
+msgid "Change BlendSpace2D Limits"
+msgstr ""
+
+#: editor/plugins/animation_blend_space_2d_editor.cpp
+msgid "Change BlendSpace2D Labels"
+msgstr ""
+
+#: editor/plugins/animation_blend_space_2d_editor.cpp
+msgid "Remove BlendSpace2D Point"
+msgstr ""
+
+#: editor/plugins/animation_blend_space_2d_editor.cpp
+msgid "Remove BlendSpace2D Triangle"
+msgstr ""
+
+#: editor/plugins/animation_blend_space_2d_editor.cpp
+msgid "BlendSpace2D does not belong to an AnimationTree node."
+msgstr ""
+
+#: editor/plugins/animation_blend_space_2d_editor.cpp
+msgid "No triangles exist, so no blending can take place."
+msgstr ""
+
+#: editor/plugins/animation_blend_space_2d_editor.cpp
+msgid "Toggle Auto Triangles"
+msgstr ""
+
+#: editor/plugins/animation_blend_space_2d_editor.cpp
+msgid "Create triangles by connecting points."
+msgstr ""
+
+#: editor/plugins/animation_blend_space_2d_editor.cpp
+msgid "Erase points and triangles."
+msgstr ""
+
+#: editor/plugins/animation_blend_space_2d_editor.cpp
+msgid "Generate blend triangles automatically (instead of manually)"
+msgstr ""
+
+#: editor/plugins/animation_blend_space_2d_editor.cpp
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "Blend:"
+msgstr ""
+
+#: editor/plugins/animation_blend_tree_editor_plugin.cpp
+msgid "Parameter Changed:"
+msgstr ""
+
+#: editor/plugins/animation_blend_tree_editor_plugin.cpp
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "Edit Filters"
+msgstr ""
+
+#: editor/plugins/animation_blend_tree_editor_plugin.cpp
+msgid "Output node can't be added to the blend tree."
+msgstr ""
+
+#: editor/plugins/animation_blend_tree_editor_plugin.cpp
+msgid "Add Node to BlendTree"
+msgstr ""
+
+#: editor/plugins/animation_blend_tree_editor_plugin.cpp
+msgid "Node Moved"
+msgstr ""
+
+#: editor/plugins/animation_blend_tree_editor_plugin.cpp
+msgid "Unable to connect, port may be in use or connection may be invalid."
+msgstr ""
+
+#: editor/plugins/animation_blend_tree_editor_plugin.cpp
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Nodes Connected"
+msgstr ""
+
+#: editor/plugins/animation_blend_tree_editor_plugin.cpp
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Nodes Disconnected"
+msgstr ""
+
+#: editor/plugins/animation_blend_tree_editor_plugin.cpp
+msgid "Set Animation"
+msgstr ""
+
+#: editor/plugins/animation_blend_tree_editor_plugin.cpp
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Delete Node"
+msgstr ""
+
+#: editor/plugins/animation_blend_tree_editor_plugin.cpp
+#: editor/scene_tree_dock.cpp
+msgid "Delete Node(s)"
+msgstr ""
+
+#: editor/plugins/animation_blend_tree_editor_plugin.cpp
+msgid "Toggle Filter On/Off"
+msgstr ""
+
+#: editor/plugins/animation_blend_tree_editor_plugin.cpp
+msgid "Change Filter"
+msgstr ""
+
+#: editor/plugins/animation_blend_tree_editor_plugin.cpp
+msgid "No animation player set, so unable to retrieve track names."
+msgstr ""
+
+#: editor/plugins/animation_blend_tree_editor_plugin.cpp
+msgid "Player path set is invalid, so unable to retrieve track names."
+msgstr ""
+
+#: editor/plugins/animation_blend_tree_editor_plugin.cpp
+#: editor/plugins/root_motion_editor_plugin.cpp
+msgid ""
+"Animation player has no valid root node path, so unable to retrieve track "
+"names."
+msgstr ""
+
+#: editor/plugins/animation_blend_tree_editor_plugin.cpp
+msgid "Anim Clips"
+msgstr ""
+
+#: editor/plugins/animation_blend_tree_editor_plugin.cpp
+msgid "Audio Clips"
+msgstr ""
+
+#: editor/plugins/animation_blend_tree_editor_plugin.cpp
+msgid "Functions"
+msgstr ""
+
+#: editor/plugins/animation_blend_tree_editor_plugin.cpp
+#: editor/plugins/animation_state_machine_editor.cpp
+msgid "Node Renamed"
+msgstr ""
+
+#: editor/plugins/animation_blend_tree_editor_plugin.cpp
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Add Node..."
+msgstr ""
+
+#: editor/plugins/animation_blend_tree_editor_plugin.cpp
+#: editor/plugins/root_motion_editor_plugin.cpp
+msgid "Edit Filtered Tracks:"
+msgstr ""
+
+#: editor/plugins/animation_blend_tree_editor_plugin.cpp
+msgid "Enable Filtering"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Toggle Autoplay"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "New Animation Name:"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "New Anim"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Change Animation Name:"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Delete Animation?"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Remove Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Invalid animation name!"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation name already exists!"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Rename Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Blend Next Changed"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Change Blend Time"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Load Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Duplicate Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "No animation to copy!"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "No animation resource on clipboard!"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Pasted Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Paste Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "No animation to edit!"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation backwards from current pos. (A)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation backwards from end. (Shift+A)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Stop animation playback. (S)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation from start. (Shift+D)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation from current pos. (D)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation position (in seconds)."
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Scale animation playback globally for the node."
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation Tools"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/version_control_editor_plugin.cpp
+msgid "New"
+msgstr "Bago"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Edit Transitions..."
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Open in Inspector"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Display list of animations in player."
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Autoplay on Load"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Enable Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Onion Skinning Options"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Directions"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Past"
+msgstr "Nakaraan"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Future"
+msgstr "Hinaharap"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Depth"
+msgstr "Lalim"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "1 step"
+msgstr "1 hakbang"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "2 steps"
+msgstr "2 hakbang"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "3 steps"
+msgstr "3 hakbang"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Differences Only"
+msgstr "Mga Pagkakaiba Lang"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Force White Modulate"
+msgstr "Piliting Magmodulate ng Paputi"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Include Gizmos (3D)"
+msgstr "Magsama ng mga Gizmo (3D)"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Pin AnimationPlayer"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+msgstr "Gumawa ng Bagong Animasyon"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation Name:"
+msgstr "Pangalan ng Animasyon:"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
+msgid "Error!"
+msgstr "Kabiguan!"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Blend Times:"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Next (Auto Queue):"
+msgstr "Sunod (Kusang Pagpila):"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Cross-Animation Blend Times"
+msgstr ""
+
+#: editor/plugins/animation_state_machine_editor.cpp
+msgid "Move Node"
+msgstr "Ilipat Ang Node"
+
+#: editor/plugins/animation_state_machine_editor.cpp
+msgid "Transition exists!"
+msgstr "Mayroon ng Transisyon!"
+
+#: editor/plugins/animation_state_machine_editor.cpp
+msgid "Add Transition"
+msgstr "Magdagdag ng Transisyon"
+
+#: editor/plugins/animation_state_machine_editor.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Node"
+msgstr "Magdagdag ng Node"
+
+#: editor/plugins/animation_state_machine_editor.cpp
+msgid "End"
+msgstr "Iwakas"
+
+#: editor/plugins/animation_state_machine_editor.cpp
+msgid "Immediate"
+msgstr "Mabilisan"
+
+#: editor/plugins/animation_state_machine_editor.cpp
+msgid "Sync"
+msgstr "Ipagsabay"
+
+#: editor/plugins/animation_state_machine_editor.cpp
+msgid "At End"
+msgstr "Sa Huli"
+
+#: editor/plugins/animation_state_machine_editor.cpp
+msgid "Travel"
+msgstr ""
+
+#: editor/plugins/animation_state_machine_editor.cpp
+msgid "Start and end nodes are needed for a sub-transition."
+msgstr ""
+
+#: editor/plugins/animation_state_machine_editor.cpp
+msgid "No playback resource set at path: %s."
+msgstr ""
+
+#: editor/plugins/animation_state_machine_editor.cpp
+msgid "Node Removed"
+msgstr "Naalis ang Node"
+
+#: editor/plugins/animation_state_machine_editor.cpp
+msgid "Transition Removed"
+msgstr "Naalis ang Transisyon"
+
+#: editor/plugins/animation_state_machine_editor.cpp
+msgid "Set Start Node (Autoplay)"
+msgstr "Itakda ang Umpisa ng Node (Kusang Pagpalabas)"
+
+#: editor/plugins/animation_state_machine_editor.cpp
+msgid ""
+"Select and move nodes.\n"
+"RMB to add new nodes.\n"
+"Shift+LMB to create connections."
+msgstr ""
+
+#: editor/plugins/animation_state_machine_editor.cpp
+msgid "Create new nodes."
+msgstr "Gumawa ng bagong mga node."
+
+#: editor/plugins/animation_state_machine_editor.cpp
+msgid "Connect nodes."
+msgstr "Magkabit ng mga node."
+
+#: editor/plugins/animation_state_machine_editor.cpp
+msgid "Remove selected node or transition."
+msgstr "Alisin ang napiling node o transisyon."
+
+#: editor/plugins/animation_state_machine_editor.cpp
+msgid "Toggle autoplay this animation on start, restart or seek to zero."
+msgstr ""
+
+#: editor/plugins/animation_state_machine_editor.cpp
+msgid "Set the end animation. This is useful for sub-transitions."
+msgstr ""
+"Itakda ang hulihan ng animasyon. Magagamit to para sa mga sub-transisyon."
+
+#: editor/plugins/animation_state_machine_editor.cpp
+msgid "Transition: "
+msgstr "Transisyon: "
+
+#: editor/plugins/animation_state_machine_editor.cpp
+msgid "Play Mode:"
+msgstr "Paraan sa Pagpapalabas:"
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "AnimationTree"
+msgstr "AnimationTree"
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "New name:"
+msgstr "Bagong pangalan:"
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Scale:"
+msgstr "Sukat:"
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "Fade In (s):"
+msgstr "(Mga) Palabong Pagpasok:"
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "Fade Out (s):"
+msgstr "(Mga) Palabong Paglabas:"
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "Blend"
+msgstr "Halo"
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "Mix"
+msgstr "Mix"
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "Auto Restart:"
+msgstr "Kusa Muling Pagumpisa:"
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "Restart (s):"
+msgstr "(Mga) Muling Pagumpisa:"
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "Random Restart (s):"
+msgstr "Alinmang (Mga) Kusa Muling-Pagsisimula:"
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "Start!"
+msgstr "Simulan!"
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Amount:"
+msgstr "Bilang:"
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "Blend 0:"
+msgstr ""
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "Blend 1:"
+msgstr ""
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "X-Fade Time (s):"
+msgstr ""
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "Current:"
+msgstr ""
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+#: editor/plugins/visual_shader_editor_plugin.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Input"
+msgstr ""
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "Clear Auto-Advance"
+msgstr ""
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "Set Auto-Advance"
+msgstr ""
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "Delete Input"
+msgstr ""
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "Animation tree is valid."
+msgstr ""
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "Animation tree is invalid."
+msgstr ""
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "Animation Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "OneShot Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "Mix Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "Blend2 Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "Blend3 Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "Blend4 Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "TimeScale Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "TimeSeek Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "Transition Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "Import Animations..."
+msgstr ""
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "Edit Node Filters"
+msgstr ""
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "Filters..."
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Contents:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "View Files"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Download"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Connection error, please try again."
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't connect."
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't connect to host:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "No response from host:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't resolve hostname:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Request failed, return code:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Cannot save response to:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Write error."
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Request failed, too many redirects"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Redirect loop."
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Request failed, timeout"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Timeout."
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Bad download hash, assuming file has been tampered with."
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Expected:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Got:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Failed SHA-256 hash check"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Asset Download Error:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Downloading (%s / %s)..."
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Downloading..."
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Resolving..."
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Error making request"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Idle"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Install..."
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Retry"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Download Error"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Download for this asset is already in progress!"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Recently Updated"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Least Recently Updated"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Name (A-Z)"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Name (Z-A)"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "License (A-Z)"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "License (Z-A)"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "First"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Previous"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Next"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Last"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "All"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Search templates, projects, and demos"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Search assets (excluding templates, projects, and demos)"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Import..."
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Plugins..."
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp
+msgid "Sort:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Category:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Site:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Support"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Official"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Testing"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Loading..."
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Assets ZIP File"
+msgstr ""
+
+#: editor/plugins/audio_stream_editor_plugin.cpp
+msgid "Audio Preview Play/Pause"
+msgstr ""
+
+#: editor/plugins/baked_lightmap_editor_plugin.cpp
+msgid ""
+"Can't determine a save path for lightmap images.\n"
+"Save your scene and try again."
+msgstr ""
+
+#: editor/plugins/baked_lightmap_editor_plugin.cpp
+msgid ""
+"No meshes to bake. Make sure they contain an UV2 channel and that the 'Use "
+"In Baked Light' and 'Generate Lightmap' flags are on."
+msgstr ""
+
+#: editor/plugins/baked_lightmap_editor_plugin.cpp
+msgid "Failed creating lightmap images, make sure path is writable."
+msgstr ""
+
+#: editor/plugins/baked_lightmap_editor_plugin.cpp
+msgid "Failed determining lightmap size. Maximum lightmap size too small?"
+msgstr ""
+
+#: editor/plugins/baked_lightmap_editor_plugin.cpp
+msgid ""
+"Some mesh is invalid. Make sure the UV2 channel values are contained within "
+"the [0.0,1.0] square region."
+msgstr ""
+
+#: editor/plugins/baked_lightmap_editor_plugin.cpp
+msgid ""
+"Godot editor was built without ray tracing support, lightmaps can't be baked."
+msgstr ""
+
+#: editor/plugins/baked_lightmap_editor_plugin.cpp
+msgid "Bake Lightmaps"
+msgstr ""
+
+#: editor/plugins/baked_lightmap_editor_plugin.cpp
+msgid "Select lightmap bake file:"
+msgstr ""
+
+#: editor/plugins/camera_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Preview"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Configure Snap"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Grid Offset:"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Grid Step:"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Primary Line Every:"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "steps"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Rotation Offset:"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Rotation Step:"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Scale Step:"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move Vertical Guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create Vertical Guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Remove Vertical Guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move Horizontal Guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create Horizontal Guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Remove Horizontal Guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create Horizontal and Vertical Guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Set CanvasItem \"%s\" Pivot Offset to (%d, %d)"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Rotate %d CanvasItems"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Rotate CanvasItem \"%s\" to %d degrees"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move CanvasItem \"%s\" Anchor"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Scale Node2D \"%s\" to (%s, %s)"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Resize Control \"%s\" to (%d, %d)"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Scale %d CanvasItems"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Scale CanvasItem \"%s\" to (%s, %s)"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move %d CanvasItems"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move CanvasItem \"%s\" to (%d, %d)"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Locked"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Grouped"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid ""
+"Children of containers have their anchors and margins values overridden by "
+"their parent."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Presets for the anchors and margins values of a Control node."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid ""
+"When active, moving Control nodes changes their anchors instead of their "
+"margins."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Top Left"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Top Right"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Bottom Right"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Bottom Left"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Center Left"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Center Top"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Center Right"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Center Bottom"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Center"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Left Wide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Top Wide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Right Wide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Bottom Wide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "VCenter Wide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "HCenter Wide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Full Rect"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Keep Ratio"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Anchors only"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Change Anchors and Margins"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Change Anchors"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid ""
+"Project Camera Override\n"
+"Overrides the running project's camera with the editor viewport camera."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid ""
+"Project Camera Override\n"
+"No project instance running. Run the project from the editor to use this "
+"feature."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Lock Selected"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Unlock Selected"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Group Selected"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Ungroup Selected"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Paste Pose"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear Guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create Custom Bone(s) from Node(s)"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear Bones"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Make IK Chain"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear IK Chain"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid ""
+"Warning: Children of a container get their position and size determined only "
+"by their parent."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+#: editor/plugins/texture_region_editor_plugin.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/gui/graph_edit.cpp
+msgid "Zoom Reset"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Select Mode"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Drag: Rotate selected node around pivot."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Alt+Drag: Move selected node."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "V: Set selected node's pivot position."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Alt+RMB: Show list of all nodes at position clicked, including locked."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "RMB: Add node at position clicked."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Move Mode"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate Mode"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale Mode"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid ""
+"Show a list of all objects at the position clicked\n"
+"(same as Alt+RMB in select mode)."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Click to change object's rotation pivot."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Pan Mode"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Ruler Mode"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Toggle smart snapping."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Use Smart Snap"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Toggle grid snapping."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Use Grid Snap"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snapping Options"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Use Rotation Snap"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Use Scale Snap"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap Relative"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Use Pixel Snap"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Smart Snapping"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Configure Snap..."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to Parent"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to Node Anchor"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to Node Sides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to Node Center"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to Other Nodes"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to Guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Lock the selected object in place (can't be moved)."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Unlock the selected object (can be moved)."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Makes sure the object's children are not selectable."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Restores the object's children's ability to be selected."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Skeleton Options"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show Bones"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Make Custom Bone(s) from Node(s)"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear Custom Bones"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Always Show Grid"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show Helpers"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show Rulers"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show Guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show Origin"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show Viewport"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show Group And Lock Icons"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Center Selection"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Frame Selection"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Preview Canvas Scale"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Translation mask for inserting keys."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Rotation mask for inserting keys."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Scale mask for inserting keys."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert keys (based on mask)."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid ""
+"Auto insert keys when objects are translated, rotated or scaled (based on "
+"mask).\n"
+"Keys are only added to existing tracks, no new tracks will be created.\n"
+"Keys must be inserted manually for the first time."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Auto Insert Key"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Animation Key and Pose Options"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Key (Existing Tracks)"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Copy Pose"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear Pose"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Add Node Here"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Instance Scene Here"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Multiply grid step by 2"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Divide grid step by 2"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Pan View"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom to 3.125%"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom to 6.25%"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom to 12.5%"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom to 25%"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom to 50%"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom to 100%"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom to 200%"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom to 400%"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom to 800%"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom to 1600%"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Add %s"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Adding %s..."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Cannot instantiate multiple nodes without root."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
+msgid "Create Node"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
+msgid "Error instancing scene from %s"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Change Default Type"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid ""
+"Drag & drop + Shift : Add node as sibling\n"
+"Drag & drop + Alt : Change node type"
+msgstr ""
+
+#: editor/plugins/collision_polygon_editor_plugin.cpp
+msgid "Create Polygon3D"
+msgstr ""
+
+#: editor/plugins/collision_polygon_editor_plugin.cpp
+msgid "Edit Poly"
+msgstr ""
+
+#: editor/plugins/collision_polygon_editor_plugin.cpp
+msgid "Edit Poly (Remove Point)"
+msgstr ""
+
+#: editor/plugins/collision_shape_2d_editor_plugin.cpp
+msgid "Set Handle"
+msgstr ""
+
+#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Load Emission Mask"
+msgstr ""
+
+#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
+#: editor/plugins/cpu_particles_editor_plugin.cpp
+#: editor/plugins/particles_2d_editor_plugin.cpp
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Restart"
+msgstr ""
+
+#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Clear Emission Mask"
+msgstr ""
+
+#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
+#: editor/plugins/particles_2d_editor_plugin.cpp
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Particles"
+msgstr ""
+
+#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Generated Point Count:"
+msgstr ""
+
+#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Emission Mask"
+msgstr ""
+
+#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Solid Pixels"
+msgstr ""
+
+#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Border Pixels"
+msgstr ""
+
+#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Directed Border Pixels"
+msgstr ""
+
+#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Capture from Pixel"
+msgstr ""
+
+#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Emission Colors"
+msgstr ""
+
+#: editor/plugins/cpu_particles_editor_plugin.cpp
+msgid "CPUParticles"
+msgstr ""
+
+#: editor/plugins/cpu_particles_editor_plugin.cpp
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emission Points From Mesh"
+msgstr ""
+
+#: editor/plugins/cpu_particles_editor_plugin.cpp
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emission Points From Node"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Flat 0"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Flat 1"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp editor/property_editor.cpp
+msgid "Ease In"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp editor/property_editor.cpp
+msgid "Ease Out"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Smoothstep"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Modify Curve Point"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Modify Curve Tangent"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Load Curve Preset"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Add Point"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Remove Point"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Left Linear"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Right Linear"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Load Preset"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Remove Curve Point"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Toggle Curve Linear Tangent"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Hold Shift to edit tangents individually"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Right click to add point"
+msgstr ""
+
+#: editor/plugins/gi_probe_editor_plugin.cpp
+msgid "Bake GI Probe"
+msgstr ""
+
+#: editor/plugins/gradient_editor_plugin.cpp
+msgid "Gradient Edited"
+msgstr ""
+
+#: editor/plugins/item_list_editor_plugin.cpp
+msgid "Item %d"
+msgstr ""
+
+#: editor/plugins/item_list_editor_plugin.cpp
+msgid "Items"
+msgstr ""
+
+#: editor/plugins/item_list_editor_plugin.cpp
+msgid "Item List Editor"
+msgstr ""
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create Occluder Polygon"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Mesh is empty!"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Couldn't create a Trimesh collision shape."
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Static Trimesh Body"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "This doesn't work on scene root!"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Static Shape"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Can't create a single convex collision shape for the scene root."
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Couldn't create a single convex collision shape."
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Simplified Convex Shape"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Single Convex Shape"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Can't create multiple convex collision shapes for the scene root."
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Couldn't create any collision shapes."
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Multiple Convex Shapes"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Navigation Mesh"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Contained Mesh is not of type ArrayMesh."
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "UV Unwrap failed, mesh may not be manifold?"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "No mesh to debug."
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Mesh has no UV in layer %d."
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "MeshInstance lacks a Mesh!"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Mesh has not surface to create outlines from!"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Mesh primitive type is not PRIMITIVE_TRIANGLES!"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Could not create outline!"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Mesh"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Static Body"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid ""
+"Creates a StaticBody and assigns a polygon-based collision shape to it "
+"automatically.\n"
+"This is the most accurate (but slowest) option for collision detection."
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Collision Sibling"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid ""
+"Creates a polygon-based collision shape.\n"
+"This is the most accurate (but slowest) option for collision detection."
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Single Convex Collision Sibling"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid ""
+"Creates a single convex collision shape.\n"
+"This is the fastest (but least accurate) option for collision detection."
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Simplified Convex Collision Sibling"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid ""
+"Creates a simplified convex collision shape.\n"
+"This is similar to single collision shape, but can result in a simpler "
+"geometry in some cases, at the cost of accuracy."
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Multiple Convex Collision Siblings"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid ""
+"Creates a polygon-based collision shape.\n"
+"This is a performance middle-ground between a single convex collision and a "
+"polygon-based collision."
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline Mesh..."
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid ""
+"Creates a static outline mesh. The outline mesh will have its normals "
+"flipped automatically.\n"
+"This can be used instead of the SpatialMaterial Grow property when using "
+"that property isn't possible."
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "View UV1"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "View UV2"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Unwrap UV2 for Lightmap/AO"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline Mesh"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Outline Size:"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "UV Channel Debug"
+msgstr ""
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+msgid "Remove item %d?"
+msgstr ""
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+msgid ""
+"Update from existing scene?:\n"
+"%s"
+msgstr ""
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+msgid "Mesh Library"
+msgstr ""
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+msgid "Add Item"
+msgstr ""
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+msgid "Remove Selected Item"
+msgstr ""
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+msgid "Import from Scene (Ignore Transforms)"
+msgstr ""
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+msgid "Import from Scene (Apply Transforms)"
+msgstr ""
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+msgid "Update from Scene"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "No mesh source specified (and no MultiMesh set in node)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "No mesh source specified (and MultiMesh contains no Mesh)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (invalid path)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (not a MeshInstance)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (contains no Mesh resource)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "No surface source specified."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (invalid path)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (no geometry)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (no faces)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Select a Source Mesh:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Select a Target Surface:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate Surface"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate MultiMesh"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Target Surface:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Source Mesh:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "X-Axis"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Y-Axis"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Z-Axis"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh Up Axis:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Rotation:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Tilt:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Scale:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate"
+msgstr ""
+
+#: editor/plugins/navigation_polygon_editor_plugin.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Create Navigation Polygon"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Convert to CPUParticles"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Generating Visibility Rect"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Generate Visibility Rect"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Can only set point into a ParticlesMaterial process material"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Convert to CPUParticles2D"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generation Time (sec):"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "The geometry's faces don't contain any area."
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "The geometry doesn't contain any faces."
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "\"%s\" doesn't inherit from Spatial."
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "\"%s\" doesn't contain geometry."
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "\"%s\" doesn't contain face geometry."
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emitter"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Emission Points:"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Surface Points"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Surface Points+Normal (Directed)"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Volume"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Emission Source: "
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "A processor material of type 'ParticlesMaterial' is required."
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generating AABB"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generate Visibility AABB"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Remove Point from Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Remove Out-Control from Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Remove In-Control from Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Add Point to Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Split Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move Point in Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move In-Control in Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move Out-Control in Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Select Points"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Shift+Drag: Select Control Points"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Click: Add Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Left Click: Split Segment (in curve)"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Right Click: Delete Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Select Control Points (Shift+Drag)"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Add Point (in empty space)"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Delete Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Close Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+#: editor/plugins/theme_editor_preview.cpp
+#: editor/plugins/visual_shader_editor_plugin.cpp editor/project_export.cpp
+msgid "Options"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Mirror Handle Angles"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Mirror Handle Lengths"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Curve Point #"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve Point Position"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve In Position"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve Out Position"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Split Path"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Remove Path Point"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Remove Out-Control Point"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Remove In-Control Point"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Split Segment (in curve)"
+msgstr ""
+
+#: editor/plugins/physical_bone_plugin.cpp
+msgid "Move Joint"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid ""
+"The skeleton property of the Polygon2D does not point to a Skeleton2D node"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Sync Bones"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid ""
+"No texture in this polygon.\n"
+"Set a texture to be able to edit UV."
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Create UV Map"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid ""
+"Polygon 2D has internal vertices, so it can no longer be edited in the "
+"viewport."
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Create Polygon & UV"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Create Internal Vertex"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Remove Internal Vertex"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Invalid Polygon (need 3 different vertices)"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Add Custom Polygon"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Remove Custom Polygon"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Transform UV Map"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Transform Polygon"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Paint Bone Weights"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Open Polygon 2D UV editor."
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Polygon 2D UV Editor"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "UV"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Points"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Polygons"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Bones"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Move Points"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Command: Rotate"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Shift: Move All"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Shift+Command: Scale"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Ctrl: Rotate"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Shift+Ctrl: Scale"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Move Polygon"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Rotate Polygon"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Scale Polygon"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Create a custom polygon. Enables custom polygon rendering."
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid ""
+"Remove a custom polygon. If none remain, custom polygon rendering is "
+"disabled."
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Paint weights with specified intensity."
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Unpaint weights with specified intensity."
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Radius:"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Copy Polygon to UV"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Copy UV to Polygon"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Clear UV"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Grid Settings"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Snap"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Enable Snap"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Grid"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Show Grid"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Configure Grid:"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Grid Offset X:"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Grid Offset Y:"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Grid Step X:"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Grid Step Y:"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Sync Bones to Polygon"
+msgstr ""
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "ERROR: Couldn't load resource!"
+msgstr ""
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Add Resource"
+msgstr ""
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Rename Resource"
+msgstr ""
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Delete Resource"
+msgstr ""
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Resource clipboard is empty!"
+msgstr ""
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Paste Resource"
+msgstr ""
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/scene_tree_editor.cpp
+msgid "Instance:"
+msgstr ""
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp
+#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Type:"
+msgstr ""
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp
+msgid "Open in Editor"
+msgstr ""
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Load Resource"
+msgstr ""
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "ResourcePreloader"
+msgstr ""
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+msgid "Flip Portals"
+msgstr ""
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+msgid "Room Generate Points"
+msgstr ""
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+msgid "Generate Points"
+msgstr ""
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+msgid "Flip Portal"
+msgstr ""
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+msgid "Occluder Set Transform"
+msgstr ""
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+msgid "Center Node"
+msgstr ""
+
+#: editor/plugins/root_motion_editor_plugin.cpp
+msgid "AnimationTree has no path set to an AnimationPlayer"
+msgstr ""
+
+#: editor/plugins/root_motion_editor_plugin.cpp
+msgid "Path to AnimationPlayer is invalid"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Clear Recent Files"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Close and save changes?"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Error writing TextFile:"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Could not load file at:"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Error saving file!"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Error while saving theme."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Error Saving"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Error importing theme."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Error Importing"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "New Text File..."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Open File"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Save File As..."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Can't obtain the script for running."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Script failed reloading, check console for errors."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Script is not in tool mode, will not be able to run."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid ""
+"To run this script, it must inherit EditorScript and be set to tool mode."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Import Theme"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Error while saving theme"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Error saving"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Save Theme As..."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "%s Class Reference"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+msgid "Find Next"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+msgid "Find Previous"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Filter scripts"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Toggle alphabetical sorting of the method list."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Filter methods"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Sort"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+#: modules/gdnative/gdnative_library_editor_plugin.cpp
+msgid "Move Up"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+#: modules/gdnative/gdnative_library_editor_plugin.cpp
+msgid "Move Down"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Next Script"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Previous Script"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "File"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Open..."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Reopen Closed Script"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Save All"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Soft Reload Script"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Copy Script Path"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "History Previous"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "History Next"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Theme"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Import Theme..."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Reload Theme"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Save Theme"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Close All"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Close Docs"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
+msgid "Run"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/shader_editor_plugin.cpp editor/plugins/text_editor.cpp
+#: editor/plugins/visual_shader_editor_plugin.cpp
+#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
+msgid "Search"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp
+msgid "Step Into"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp
+msgid "Step Over"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp
+msgid "Break"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
+#: editor/script_editor_debugger.cpp
+msgid "Continue"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Keep Debugger Open"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Debug with External Editor"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/shader_editor_plugin.cpp
+msgid "Online Docs"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Open Godot online documentation."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Search the reference documentation."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Go to previous edited document."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Go to next edited document."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Discard"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid ""
+"The following files are newer on disk.\n"
+"What action should be taken?:"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp
+msgid "Debugger"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Search Results"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Clear Recent Scripts"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Connections to method:"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp
+msgid "Source"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Target"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid ""
+"Missing connected method '%s' for signal '%s' from node '%s' to node '%s'."
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "[Ignore]"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Line"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Go to Function"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Only resources from filesystem can be dropped."
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Can't drop nodes because script '%s' is not used in this scene."
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Lookup Symbol"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Pick Color"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp
+msgid "Convert Case"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp
+msgid "Uppercase"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp
+msgid "Lowercase"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp
+msgid "Capitalize"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp
+msgid "Syntax Highlighter"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/shader_editor_plugin.cpp editor/plugins/text_editor.cpp
+msgid "Bookmarks"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Breakpoints"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/shader_editor_plugin.cpp editor/plugins/text_editor.cpp
+msgid "Go To"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+msgid "Cut"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp editor/plugins/theme_editor_plugin.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+msgid "Select All"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Delete Line"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Indent Left"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Indent Right"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Toggle Comment"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Fold/Unfold Line"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Fold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Complete Symbol"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Evaluate Selection"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Trim Trailing Whitespace"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent to Spaces"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent to Tabs"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Auto Indent"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Find in Files..."
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Contextual Help"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Toggle Bookmark"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Go to Next Bookmark"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Go to Previous Bookmark"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Remove All Bookmarks"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Go to Function..."
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Go to Line..."
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Toggle Breakpoint"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Remove All Breakpoints"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Go to Next Breakpoint"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Go to Previous Breakpoint"
+msgstr ""
+
+#: editor/plugins/shader_editor_plugin.cpp
+msgid ""
+"This shader has been modified on on disk.\n"
+"What action should be taken?"
+msgstr ""
+
+#: editor/plugins/shader_editor_plugin.cpp
+msgid "Shader"
+msgstr ""
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "This skeleton has no bones, create some children Bone2D nodes."
+msgstr ""
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Set Rest Pose to Bones"
+msgstr ""
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Create Rest Pose from Bones"
+msgstr ""
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Skeleton2D"
+msgstr ""
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Reset to Rest Pose"
+msgstr ""
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Overwrite Rest Pose"
+msgstr ""
+
+#: editor/plugins/skeleton_editor_plugin.cpp
+msgid "Create physical bones"
+msgstr ""
+
+#: editor/plugins/skeleton_editor_plugin.cpp
+msgid "Skeleton"
+msgstr ""
+
+#: editor/plugins/skeleton_editor_plugin.cpp
+msgid "Create physical skeleton"
+msgstr ""
+
+#: editor/plugins/skeleton_ik_editor_plugin.cpp
+msgid "Play IK"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Left Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Left Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Perspective"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Aborted."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "X-Axis Transform."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Y-Axis Transform."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Z-Axis Transform."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Plane Transform."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#: editor/plugins/texture_region_editor_plugin.cpp
+#: editor/plugins/theme_editor_plugin.cpp scene/resources/visual_shader.cpp
+msgid "None"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate"
+msgstr ""
+
+#. TRANSLATORS: This refers to the movement that changes the position of an object.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Translate"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scaling: "
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Translating: "
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotating %s degrees."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Keying is disabled (no key inserted)."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Animation Key Inserted."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Pitch:"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Yaw:"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Size:"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Objects Drawn:"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Material Changes:"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Shader Changes:"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Surface Changes:"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Draw Calls:"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Vertices:"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "FPS: %d (%s ms)"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top View."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom View."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Left View."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right View."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front View."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear View."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Align Transform with View"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Align Rotation with View"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
+msgid "No parent to instance a child at."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
+msgid "This operation requires a single selected node."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Auto Orthogonal Enabled"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Lock View Rotation"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Normal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Wireframe"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Overdraw"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Unshaded"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Environment"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Gizmos"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Information"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View FPS"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Half Resolution"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Audio Listener"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Enable Doppler"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Cinematic Preview"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Not available when using the GLES2 renderer."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Left"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Right"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Forward"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Backwards"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Up"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Down"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Speed Modifier"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Slow Modifier"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Toggle Camera Preview"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Rotation Locked"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid ""
+"To zoom further, change the camera's clipping planes (View -> Settings...)"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid ""
+"Note: The FPS value displayed is the editor's framerate.\n"
+"It cannot be used as a reliable indication of in-game performance."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Convert Rooms"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "XForm Dialog"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid ""
+"Click to toggle between visibility states.\n"
+"\n"
+"Open eye: Gizmo is visible.\n"
+"Closed eye: Gizmo is hidden.\n"
+"Half-open eye: Gizmo is also visible through opaque surfaces (\"x-ray\")."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Snap Nodes to Floor"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Couldn't find a solid floor to snap the selection to."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Use Local Space"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Use Snap"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Converts rooms for portal culling."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom View"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top View"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear View"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front View"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Left View"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right View"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Orbit View Down"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Orbit View Left"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Orbit View Right"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Orbit View Up"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Orbit View 180"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Switch Perspective/Orthogonal View"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Insert Animation Key"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Focus Origin"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Focus Selection"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Toggle Freelook"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Transform"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Snap Object to Floor"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Dialog..."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "1 Viewport"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "2 Viewports"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "2 Viewports (Alt)"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "3 Viewports"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "3 Viewports (Alt)"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "4 Viewports"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Gizmos"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Origin"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Grid"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Portal Culling"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Occlusion Culling"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Settings..."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Snap Settings"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Translate Snap:"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate Snap (deg.):"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale Snap (%):"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Viewport Settings"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Perspective FOV (deg.):"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Z-Near:"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Z-Far:"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Change"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Translate:"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate (deg.):"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale (ratio):"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Type"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Pre"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Post"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Unnamed Gizmo"
+msgstr ""
+
+#: editor/plugins/sprite_editor_plugin.cpp
+msgid "Create Mesh2D"
+msgstr ""
+
+#: editor/plugins/sprite_editor_plugin.cpp
+msgid "Mesh2D Preview"
+msgstr ""
+
+#: editor/plugins/sprite_editor_plugin.cpp
+msgid "Create Polygon2D"
+msgstr ""
+
+#: editor/plugins/sprite_editor_plugin.cpp
+msgid "Polygon2D Preview"
+msgstr ""
+
+#: editor/plugins/sprite_editor_plugin.cpp
+msgid "Create CollisionPolygon2D"
+msgstr ""
+
+#: editor/plugins/sprite_editor_plugin.cpp
+msgid "CollisionPolygon2D Preview"
+msgstr ""
+
+#: editor/plugins/sprite_editor_plugin.cpp
+msgid "Create LightOccluder2D"
+msgstr ""
+
+#: editor/plugins/sprite_editor_plugin.cpp
+msgid "LightOccluder2D Preview"
+msgstr ""
+
+#: editor/plugins/sprite_editor_plugin.cpp
+msgid "Sprite is empty!"
+msgstr ""
+
+#: editor/plugins/sprite_editor_plugin.cpp
+msgid "Can't convert a sprite using animation frames to mesh."
+msgstr ""
+
+#: editor/plugins/sprite_editor_plugin.cpp
+msgid "Invalid geometry, can't replace by mesh."
+msgstr ""
+
+#: editor/plugins/sprite_editor_plugin.cpp
+msgid "Convert to Mesh2D"
+msgstr ""
+
+#: editor/plugins/sprite_editor_plugin.cpp
+msgid "Invalid geometry, can't create polygon."
+msgstr ""
+
+#: editor/plugins/sprite_editor_plugin.cpp
+msgid "Convert to Polygon2D"
+msgstr ""
+
+#: editor/plugins/sprite_editor_plugin.cpp
+msgid "Invalid geometry, can't create collision polygon."
+msgstr ""
+
+#: editor/plugins/sprite_editor_plugin.cpp
+msgid "Create CollisionPolygon2D Sibling"
+msgstr ""
+
+#: editor/plugins/sprite_editor_plugin.cpp
+msgid "Invalid geometry, can't create light occluder."
+msgstr ""
+
+#: editor/plugins/sprite_editor_plugin.cpp
+msgid "Create LightOccluder2D Sibling"
+msgstr ""
+
+#: editor/plugins/sprite_editor_plugin.cpp
+msgid "Sprite"
+msgstr ""
+
+#: editor/plugins/sprite_editor_plugin.cpp
+msgid "Simplification: "
+msgstr ""
+
+#: editor/plugins/sprite_editor_plugin.cpp
+msgid "Shrink (Pixels): "
+msgstr ""
+
+#: editor/plugins/sprite_editor_plugin.cpp
+msgid "Grow (Pixels): "
+msgstr ""
+
+#: editor/plugins/sprite_editor_plugin.cpp
+msgid "Update Preview"
+msgstr ""
+
+#: editor/plugins/sprite_editor_plugin.cpp
+msgid "Settings:"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "No Frames Selected"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add %d Frame(s)"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Frame"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Unable to load images"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "ERROR: Couldn't load frame resource!"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Resource clipboard is empty or not a texture!"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Paste Frame"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Empty"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Change Animation FPS"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "(empty)"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Move Frame"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Animations:"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "New Animation"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Speed:"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Loop"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Animation Frames:"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add a Texture from File"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Frames from a Sprite Sheet"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Insert Empty (Before)"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Insert Empty (After)"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Move (Before)"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Move (After)"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Select Frames"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Horizontal:"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Vertical:"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Select/Clear All Frames"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Create Frames from Sprite Sheet"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "SpriteFrames"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Set Region Rect"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Set Margin"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Snap Mode:"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Pixel Snap"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Grid Snap"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Auto Slice"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Offset:"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Step:"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Separation:"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "TextureRegion"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Colors"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Fonts"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Icons"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Styleboxes"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "{num} color(s)"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "No colors found."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "{num} constant(s)"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "No constants found."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "{num} font(s)"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "No fonts found."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "{num} icon(s)"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "No icons found."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "{num} stylebox(es)"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "No styleboxes found."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "{num} currently selected"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Nothing was selected for the import."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Importing Theme Items"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Importing items {n}/{n}"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Updating the editor"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Finalizing"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Filter:"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "With Data"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Select by data type:"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Select all visible color items."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Select all visible color items and their data."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Deselect all visible color items."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Select all visible constant items."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Select all visible constant items and their data."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Deselect all visible constant items."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Select all visible font items."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Select all visible font items and their data."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Deselect all visible font items."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Select all visible icon items."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Select all visible icon items and their data."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Deselect all visible icon items."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Select all visible stylebox items."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Select all visible stylebox items and their data."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Deselect all visible stylebox items."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid ""
+"Caution: Adding icon data may considerably increase the size of your Theme "
+"resource."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Collapse types."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Expand types."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Select all Theme items."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Select With Data"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Select all Theme items with item data."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Deselect All"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Deselect all Theme items."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Import Selected"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid ""
+"Import Items tab has some items selected. Selection will be lost upon "
+"closing this window.\n"
+"Close anyway?"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid ""
+"Select a theme type from the list to edit its items.\n"
+"You can add a custom type or import a type with its items from another theme."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Remove All Color Items"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Rename Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Remove All Constant Items"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Remove All Font Items"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Remove All Icon Items"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Remove All StyleBox Items"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid ""
+"This theme type is empty.\n"
+"Add more items to it manually or by importing from another theme."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Add Color Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Add Constant Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Add Font Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Add Icon Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Add Stylebox Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Rename Color Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Rename Constant Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Rename Font Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Rename Icon Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Rename Stylebox Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Invalid file, not a Theme resource."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Invalid file, same as the edited Theme resource."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Manage Theme Items"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Edit Items"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Types:"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Add Type:"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Add Item:"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Add StyleBox Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Remove Items:"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Remove Class Items"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Remove Custom Items"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Remove All Items"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Add Theme Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Old Name:"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Import Items"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Default Theme"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Editor Theme"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Select Another Theme Resource:"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Another Theme"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Confirm Item Rename"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Cancel Item Rename"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Override Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Unpin this StyleBox as a main style."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid ""
+"Pin this StyleBox as a main style. Editing its properties will update the "
+"same properties in all other StyleBoxes of this type."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Add Type"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Add Item Type"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Node Types:"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Show Default"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Show default type items alongside items that have been overridden."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Override All"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Override all default type items."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Theme:"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Manage Items..."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Add, remove, organize and import Theme items."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Add Preview"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Default Preview"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Select UI Scene:"
+msgstr ""
+
+#: editor/plugins/theme_editor_preview.cpp
+msgid ""
+"Toggle the control picker, allowing to visually select control types for "
+"edit."
+msgstr ""
+
+#: editor/plugins/theme_editor_preview.cpp
+msgid "Toggle Button"
+msgstr ""
+
+#: editor/plugins/theme_editor_preview.cpp
+msgid "Disabled Button"
+msgstr ""
+
+#: editor/plugins/theme_editor_preview.cpp
+msgid "Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_preview.cpp
+msgid "Disabled Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_preview.cpp
+msgid "Check Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_preview.cpp
+msgid "Checked Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_preview.cpp
+msgid "Radio Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_preview.cpp
+msgid "Checked Radio Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_preview.cpp
+msgid "Named Separator"
+msgstr ""
+
+#: editor/plugins/theme_editor_preview.cpp
+msgid "Submenu"
+msgstr ""
+
+#: editor/plugins/theme_editor_preview.cpp
+msgid "Subitem 1"
+msgstr ""
+
+#: editor/plugins/theme_editor_preview.cpp
+msgid "Subitem 2"
+msgstr ""
+
+#: editor/plugins/theme_editor_preview.cpp
+msgid "Has"
+msgstr ""
+
+#: editor/plugins/theme_editor_preview.cpp
+msgid "Many"
+msgstr ""
+
+#: editor/plugins/theme_editor_preview.cpp
+msgid "Disabled LineEdit"
+msgstr ""
+
+#: editor/plugins/theme_editor_preview.cpp
+msgid "Tab 1"
+msgstr ""
+
+#: editor/plugins/theme_editor_preview.cpp
+msgid "Tab 2"
+msgstr ""
+
+#: editor/plugins/theme_editor_preview.cpp
+msgid "Tab 3"
+msgstr ""
+
+#: editor/plugins/theme_editor_preview.cpp
+msgid "Editable Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_preview.cpp
+msgid "Subtree"
+msgstr ""
+
+#: editor/plugins/theme_editor_preview.cpp
+msgid "Has,Many,Options"
+msgstr ""
+
+#: editor/plugins/theme_editor_preview.cpp
+msgid "Invalid path, the PackedScene resource was probably moved or removed."
+msgstr ""
+
+#: editor/plugins/theme_editor_preview.cpp
+msgid "Invalid PackedScene resource, must have a Control node at its root."
+msgstr ""
+
+#: editor/plugins/theme_editor_preview.cpp
+msgid "Invalid file, not a PackedScene resource."
+msgstr ""
+
+#: editor/plugins/theme_editor_preview.cpp
+msgid "Reload the scene to reflect its most actual state."
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Erase Selection"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Fix Invalid Tiles"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cut Selection"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Paint TileMap"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Line Draw"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rectangle Paint"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Bucket Fill"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Erase TileMap"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Find Tile"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Transpose"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Disable Autotile"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Enable Priority"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Filter tiles"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Give a TileSet resource to this TileMap to use its tiles."
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Paint Tile"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid ""
+"Shift+LMB: Line Draw\n"
+"Shift+Command+LMB: Rectangle Paint"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid ""
+"Shift+LMB: Line Draw\n"
+"Shift+Ctrl+LMB: Rectangle Paint"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Pick Tile"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate Left"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate Right"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Flip Horizontally"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Flip Vertically"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Clear Transform"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Add Texture(s) to TileSet."
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Remove selected Texture from TileSet."
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Create from Scene"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Merge from Scene"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "New Single Tile"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "New Autotile"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "New Atlas"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Next Coordinate"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Select the next shape, subtile, or Tile."
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Previous Coordinate"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Select the previous shape, subtile, or Tile."
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Region"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Collision"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Occlusion"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Navigation"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Bitmask"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Priority"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Icon"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Z Index"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Region Mode"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Collision Mode"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Occlusion Mode"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Navigation Mode"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Bitmask Mode"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Priority Mode"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Icon Mode"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Z Index Mode"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Copy bitmask."
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Paste bitmask."
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Erase bitmask."
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Create a new rectangle."
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "New Rectangle"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Create a new polygon."
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "New Polygon"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Delete Selected Shape"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Keep polygon inside region Rect."
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Enable snap and show grid (configurable via the Inspector)."
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Display Tile Names (Hold Alt Key)"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid ""
+"Add or select a texture on the left panel to edit the tiles bound to it."
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Remove selected texture? This will remove all tiles which use it."
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "You haven't selected a texture to remove."
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Create from scene? This will overwrite all current tiles."
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Merge from scene?"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Remove Texture"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "%s file(s) were not added because was already on the list."
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid ""
+"Drag handles to edit Rect.\n"
+"Click on another Tile to edit it."
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Delete selected Rect."
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid ""
+"Select current edited sub-tile.\n"
+"Click on another Tile to edit it."
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Delete polygon."
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid ""
+"LMB: Set bit on.\n"
+"RMB: Set bit off.\n"
+"Shift+LMB: Set wildcard bit.\n"
+"Click on another Tile to edit it."
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid ""
+"Select sub-tile to use as icon, this will be also used on invalid autotile "
+"bindings.\n"
+"Click on another Tile to edit it."
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid ""
+"Select sub-tile to change its priority.\n"
+"Click on another Tile to edit it."
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid ""
+"Select sub-tile to change its z index.\n"
+"Click on another Tile to edit it."
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Set Tile Region"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Create Tile"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Set Tile Icon"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Edit Tile Bitmask"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Edit Collision Polygon"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Edit Occlusion Polygon"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Edit Navigation Polygon"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Paste Tile Bitmask"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Clear Tile Bitmask"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Make Polygon Concave"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Make Polygon Convex"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Remove Tile"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Remove Collision Polygon"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Remove Occlusion Polygon"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Remove Navigation Polygon"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Edit Tile Priority"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Edit Tile Z Index"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Make Convex"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Make Concave"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Create Collision Polygon"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Create Occlusion Polygon"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "This property can't be changed."
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "TileSet"
+msgstr ""
+
+#: editor/plugins/version_control_editor_plugin.cpp
+msgid "No VCS addons are available."
+msgstr ""
+
+#: editor/plugins/version_control_editor_plugin.cpp
+msgid "Error"
+msgstr ""
+
+#: editor/plugins/version_control_editor_plugin.cpp
+msgid "No files added to stage"
+msgstr ""
+
+#: editor/plugins/version_control_editor_plugin.cpp
+msgid "Commit"
+msgstr ""
+
+#: editor/plugins/version_control_editor_plugin.cpp
+msgid "VCS Addon is not initialized"
+msgstr ""
+
+#: editor/plugins/version_control_editor_plugin.cpp
+msgid "Version Control System"
+msgstr ""
+
+#: editor/plugins/version_control_editor_plugin.cpp
+msgid "Initialize"
+msgstr ""
+
+#: editor/plugins/version_control_editor_plugin.cpp
+msgid "Staging area"
+msgstr ""
+
+#: editor/plugins/version_control_editor_plugin.cpp
+msgid "Detect new changes"
+msgstr ""
+
+#: editor/plugins/version_control_editor_plugin.cpp
+msgid "Changes"
+msgstr ""
+
+#: editor/plugins/version_control_editor_plugin.cpp
+msgid "Modified"
+msgstr ""
+
+#: editor/plugins/version_control_editor_plugin.cpp
+msgid "Renamed"
+msgstr ""
+
+#: editor/plugins/version_control_editor_plugin.cpp
+msgid "Deleted"
+msgstr ""
+
+#: editor/plugins/version_control_editor_plugin.cpp
+msgid "Typechange"
+msgstr ""
+
+#: editor/plugins/version_control_editor_plugin.cpp
+msgid "Stage Selected"
+msgstr ""
+
+#: editor/plugins/version_control_editor_plugin.cpp
+msgid "Stage All"
+msgstr ""
+
+#: editor/plugins/version_control_editor_plugin.cpp
+msgid "Commit Changes"
+msgstr ""
+
+#: editor/plugins/version_control_editor_plugin.cpp
+msgid "View file diffs before committing them to the latest version"
+msgstr ""
+
+#: editor/plugins/version_control_editor_plugin.cpp
+msgid "No file diff is active"
+msgstr ""
+
+#: editor/plugins/version_control_editor_plugin.cpp
+msgid "Detect changes in file diff"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "(GLES3 only)"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Add Output"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Scalar"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Vector"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Boolean"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Sampler"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Add input port"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Add output port"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Change input port type"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Change output port type"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Change input port name"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Change output port name"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Remove input port"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Remove output port"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Set expression"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Resize VisualShader node"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Set Uniform Name"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Set Input Default Port"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Add Node to Visual Shader"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Node(s) Moved"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Duplicate Nodes"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Paste Nodes"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Delete Nodes"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Visual Shader Input Type Changed"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "UniformRef Name Changed"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Vertex"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Fragment"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Light"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Show resulted shader code."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Create Shader Node"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Color function."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Color operator."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Grayscale function."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Converts HSV vector to RGB equivalent."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Converts RGB vector to HSV equivalent."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Sepia function."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Burn operator."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Darken operator."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Difference operator."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Dodge operator."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "HardLight operator."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Lighten operator."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Overlay operator."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Screen operator."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "SoftLight operator."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Color constant."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Color uniform."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Returns the boolean result of the %s comparison between two parameters."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Equal (==)"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Greater Than (>)"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Greater Than or Equal (>=)"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid ""
+"Returns an associated vector if the provided scalars are equal, greater or "
+"less."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid ""
+"Returns the boolean result of the comparison between INF and a scalar "
+"parameter."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid ""
+"Returns the boolean result of the comparison between NaN and a scalar "
+"parameter."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Less Than (<)"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Less Than or Equal (<=)"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Not Equal (!=)"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid ""
+"Returns an associated vector if the provided boolean value is true or false."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid ""
+"Returns an associated scalar if the provided boolean value is true or false."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Returns the boolean result of the comparison between two parameters."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid ""
+"Returns the boolean result of the comparison between INF (or NaN) and a "
+"scalar parameter."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Boolean constant."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Boolean uniform."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "'%s' input parameter for all shader modes."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Input parameter."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "'%s' input parameter for vertex and fragment shader modes."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "'%s' input parameter for fragment and light shader modes."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "'%s' input parameter for fragment shader mode."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "'%s' input parameter for light shader mode."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "'%s' input parameter for vertex shader mode."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "'%s' input parameter for vertex and fragment shader mode."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Scalar function."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Scalar operator."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "E constant (2.718282). Represents the base of the natural logarithm."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Epsilon constant (0.00001). Smallest possible scalar number."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Phi constant (1.618034). Golden ratio."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Pi/4 constant (0.785398) or 45 degrees."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Pi/2 constant (1.570796) or 90 degrees."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Pi constant (3.141593) or 180 degrees."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Tau constant (6.283185) or 360 degrees."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Sqrt2 constant (1.414214). Square root of 2."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Returns the absolute value of the parameter."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Returns the arc-cosine of the parameter."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Returns the inverse hyperbolic cosine of the parameter."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Returns the arc-sine of the parameter."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Returns the inverse hyperbolic sine of the parameter."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Returns the arc-tangent of the parameter."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Returns the arc-tangent of the parameters."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Returns the inverse hyperbolic tangent of the parameter."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid ""
+"Finds the nearest integer that is greater than or equal to the parameter."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Constrains a value to lie between two further values."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Returns the cosine of the parameter."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Returns the hyperbolic cosine of the parameter."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Converts a quantity in radians to degrees."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Base-e Exponential."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Base-2 Exponential."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Finds the nearest integer less than or equal to the parameter."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Computes the fractional part of the argument."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Returns the inverse of the square root of the parameter."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Natural logarithm."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Base-2 logarithm."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Returns the greater of two values."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Returns the lesser of two values."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Linear interpolation between two scalars."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Returns the opposite value of the parameter."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "1.0 - scalar"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid ""
+"Returns the value of the first parameter raised to the power of the second."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Converts a quantity in degrees to radians."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "1.0 / scalar"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Finds the nearest integer to the parameter."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Finds the nearest even integer to the parameter."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Clamps the value between 0.0 and 1.0."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Extracts the sign of the parameter."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Returns the sine of the parameter."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Returns the hyperbolic sine of the parameter."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Returns the square root of the parameter."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid ""
+"SmoothStep function( scalar(edge0), scalar(edge1), scalar(x) ).\n"
+"\n"
+"Returns 0.0 if 'x' is smaller than 'edge0' and 1.0 if x is larger than "
+"'edge1'. Otherwise the return value is interpolated between 0.0 and 1.0 "
+"using Hermite polynomials."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid ""
+"Step function( scalar(edge), scalar(x) ).\n"
+"\n"
+"Returns 0.0 if 'x' is smaller than 'edge' and otherwise 1.0."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Returns the tangent of the parameter."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Returns the hyperbolic tangent of the parameter."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Finds the truncated value of the parameter."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Adds scalar to scalar."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Divides scalar by scalar."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Multiplies scalar by scalar."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Returns the remainder of the two scalars."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Subtracts scalar from scalar."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Scalar constant."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Scalar uniform."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Perform the cubic texture lookup."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Perform the texture lookup."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Cubic texture uniform lookup."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "2D texture uniform lookup."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "2D texture uniform lookup with triplanar."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Transform function."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid ""
+"Calculate the outer product of a pair of vectors.\n"
+"\n"
+"OuterProduct treats the first parameter 'c' as a column vector (matrix with "
+"one column) and the second parameter 'r' as a row vector (matrix with one "
+"row) and does a linear algebraic matrix multiply 'c * r', yielding a matrix "
+"whose number of rows is the number of components in 'c' and whose number of "
+"columns is the number of components in 'r'."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Composes transform from four vectors."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Decomposes transform to four vectors."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Calculates the determinant of a transform."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Calculates the inverse of a transform."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Calculates the transpose of a transform."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Multiplies transform by transform."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Multiplies vector by transform."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Transform constant."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Transform uniform."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Vector function."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Vector operator."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Composes vector from three scalars."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Decomposes vector to three scalars."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Calculates the cross product of two vectors."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Returns the distance between two points."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Calculates the dot product of two vectors."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid ""
+"Returns the vector that points in the same direction as a reference vector. "
+"The function has three vector parameters : N, the vector to orient, I, the "
+"incident vector, and Nref, the reference vector. If the dot product of I and "
+"Nref is smaller than zero the return value is N. Otherwise -N is returned."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Calculates the length of a vector."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Linear interpolation between two vectors."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Linear interpolation between two vectors using scalar."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Calculates the normalize product of vector."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "1.0 - vector"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "1.0 / vector"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid ""
+"Returns the vector that points in the direction of reflection ( a : incident "
+"vector, b : normal vector )."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Returns the vector that points in the direction of refraction."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid ""
+"SmoothStep function( vector(edge0), vector(edge1), vector(x) ).\n"
+"\n"
+"Returns 0.0 if 'x' is smaller than 'edge0' and 1.0 if 'x' is larger than "
+"'edge1'. Otherwise the return value is interpolated between 0.0 and 1.0 "
+"using Hermite polynomials."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid ""
+"SmoothStep function( scalar(edge0), scalar(edge1), vector(x) ).\n"
+"\n"
+"Returns 0.0 if 'x' is smaller than 'edge0' and 1.0 if 'x' is larger than "
+"'edge1'. Otherwise the return value is interpolated between 0.0 and 1.0 "
+"using Hermite polynomials."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid ""
+"Step function( vector(edge), vector(x) ).\n"
+"\n"
+"Returns 0.0 if 'x' is smaller than 'edge' and otherwise 1.0."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid ""
+"Step function( scalar(edge), vector(x) ).\n"
+"\n"
+"Returns 0.0 if 'x' is smaller than 'edge' and otherwise 1.0."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Adds vector to vector."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Divides vector by vector."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Multiplies vector by vector."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Returns the remainder of the two vectors."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Subtracts vector from vector."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Vector constant."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Vector uniform."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid ""
+"Custom Godot Shader Language expression, with custom amount of input and "
+"output ports. This is a direct injection of code into the vertex/fragment/"
+"light function, do not use it to write the function declarations inside."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid ""
+"Returns falloff based on the dot product of surface normal and view "
+"direction of camera (pass associated inputs to it)."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid ""
+"Custom Godot Shader Language expression, which is placed on top of the "
+"resulted shader. You can place various function definitions inside and call "
+"it later in the Expressions. You can also declare varyings, uniforms and "
+"constants."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "A reference to an existing uniform."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "(Fragment/Light mode only) Scalar derivative function."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "(Fragment/Light mode only) Vector derivative function."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid ""
+"(Fragment/Light mode only) (Vector) Derivative in 'x' using local "
+"differencing."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid ""
+"(Fragment/Light mode only) (Scalar) Derivative in 'x' using local "
+"differencing."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid ""
+"(Fragment/Light mode only) (Vector) Derivative in 'y' using local "
+"differencing."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid ""
+"(Fragment/Light mode only) (Scalar) Derivative in 'y' using local "
+"differencing."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid ""
+"(Fragment/Light mode only) (Vector) Sum of absolute derivative in 'x' and "
+"'y'."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid ""
+"(Fragment/Light mode only) (Scalar) Sum of absolute derivative in 'x' and "
+"'y'."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "VisualShader"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Edit Visual Property:"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Visual Shader Mode Changed"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Runnable"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Delete preset '%s'?"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid ""
+"Failed to export the project for platform '%s'.\n"
+"Export templates seem to be missing or invalid."
+msgstr ""
+
+#: editor/project_export.cpp
+msgid ""
+"Failed to export the project for platform '%s'.\n"
+"This might be due to a configuration issue in the export preset or your "
+"export settings."
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Release"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Exporting All"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "The given export path doesn't exist:"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export templates for this platform are missing/corrupted:"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Presets"
+msgstr ""
+
+#: editor/project_export.cpp editor/project_settings_editor.cpp
+msgid "Add..."
+msgstr ""
+
+#: editor/project_export.cpp
+msgid ""
+"If checked, the preset will be available for use in one-click deploy.\n"
+"Only one preset per platform may be marked as runnable."
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export Path"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Resources"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export all resources in the project"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export selected scenes (and dependencies)"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export selected resources (and dependencies)"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export Mode:"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Resources to export:"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid ""
+"Filters to export non-resource files/folders\n"
+"(comma-separated, e.g: *.json, *.txt, docs/*)"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid ""
+"Filters to exclude files/folders from project\n"
+"(comma-separated, e.g: *.json, *.txt, docs/*)"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Features"
+msgstr "Mga Tampok"
+
+#: editor/project_export.cpp
+msgid "Custom (comma-separated):"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Feature List:"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Script"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "GDScript Export Mode:"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Text"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Compiled Bytecode (Faster Loading)"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Encrypted (Provide Key Below)"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Invalid Encryption Key (must be 64 hexadecimal characters long)"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "GDScript Encryption Key (256-bits as hexadecimal):"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export PCK/Zip"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export Project"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export mode?"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export All"
+msgstr ""
+
+#: editor/project_export.cpp editor/project_manager.cpp
+msgid "ZIP File"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Godot Game Pack"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export templates for this platform are missing:"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Manage Export Templates"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export With Debug"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "The path specified doesn't exist."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Error opening package file (it's not in ZIP format)."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Please choose an empty folder."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Please choose a \"project.godot\" or \".zip\" file."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "This directory already contains a Godot project."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "New Game Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Imported Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Invalid project name."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Couldn't create folder."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "There is already a folder in this path with the specified name."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "It would be a good idea to name your project."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Invalid project path (changed anything?)."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"Couldn't load project.godot in project path (error %d). It may be missing or "
+"corrupted."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Couldn't edit project.godot in project path."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Couldn't create project.godot in project path."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Error opening package file, not in ZIP format."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "The following files failed extraction from package:"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Package installed successfully!"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Rename Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Import Existing Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Import & Edit"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Create New Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Create & Edit"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Install Project:"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Install & Edit"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Project Name:"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Project Path:"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Project Installation Path:"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Renderer:"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "OpenGL ES 3.0"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Not supported by your GPU drivers."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"Higher visual quality\n"
+"All features available\n"
+"Incompatible with older hardware\n"
+"Not recommended for web games"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "OpenGL ES 2.0"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"Lower visual quality\n"
+"Some features not available\n"
+"Works on most hardware\n"
+"Recommended for web games"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Renderer can be changed later, but scenes may need to be adjusted."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Unnamed Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Missing Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Error: Project is missing on the filesystem."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Can't open project at '%s'."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Are you sure to open more than one project?"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"The following project settings file does not specify the version of Godot "
+"through which it was created.\n"
+"\n"
+"%s\n"
+"\n"
+"If you proceed with opening it, it will be converted to Godot's current "
+"configuration file format.\n"
+"Warning: You won't be able to open the project with previous versions of the "
+"engine anymore."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"The following project settings file was generated by an older engine "
+"version, and needs to be converted for this version:\n"
+"\n"
+"%s\n"
+"\n"
+"Do you want to convert it?\n"
+"Warning: You won't be able to open the project with previous versions of the "
+"engine anymore."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"The project settings were created by a newer engine version, whose settings "
+"are not compatible with this version."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"Can't run project: no main scene defined.\n"
+"Please edit the project and set the main scene in the Project Settings under "
+"the \"Application\" category."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"Can't run project: Assets need to be imported.\n"
+"Please edit the project to trigger the initial import."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Are you sure to run %d projects at once?"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Remove %d projects from the list?"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Remove this project from the list?"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"Remove all missing projects from the list?\n"
+"The project folders' contents won't be modified."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"Language changed.\n"
+"The interface will update after restarting the editor or project manager."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"Are you sure to scan %s folders for existing Godot projects?\n"
+"This could take a while."
+msgstr ""
+
+#. TRANSLATORS: This refers to the application where users manage their Godot projects.
+#: editor/project_manager.cpp
+msgid "Project Manager"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Local Projects"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Loading, please wait..."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Last Modified"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Edit Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Run Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Scan"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Scan Projects"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Select a Folder to Scan"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "New Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Import Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Remove Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Remove Missing"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "About"
+msgstr "Tungkol sa Godot"
+
+#: editor/project_manager.cpp
+msgid "Asset Library Projects"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Restart Now"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Remove All"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Also delete project contents (no undo!)"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Can't run project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"You currently don't have any projects.\n"
+"Would you like to explore official example projects in the Asset Library?"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Filter projects"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"This field filters projects by name and last path component.\n"
+"To filter projects by name and full path, the query must contain at least "
+"one `/` character."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Physical Key"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Key "
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Joy Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Joy Axis"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Mouse Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid ""
+"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or "
+"'\"'"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "An action with the name '%s' already exists."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Rename Input Action Event"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Change Action deadzone"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Add Input Action Event"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "All Devices"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Device"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid " (Physical)"
+msgstr ""
+
+#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
+msgid "Press a Key..."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Mouse Button Index:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Left Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Right Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Middle Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Wheel Up Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Wheel Down Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Wheel Left Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Wheel Right Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "X Button 1"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "X Button 2"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Joypad Axis Index:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Axis"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Joypad Button Index:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Erase Input Action"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Erase Input Action Event"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Add Event"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Left Button."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Right Button."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Middle Button."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Wheel Up."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Wheel Down."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Add Global Property"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Select a setting item first!"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "No property '%s' exists."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Setting '%s' is internal, and it can't be deleted."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Delete Item"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid ""
+"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or "
+"'\"'."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Add Input Action"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Error saving settings."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Settings saved OK."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Moved Input Action Event"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Override for Feature"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Add %d Translations"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Remove Translation"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Translation Resource Remap: Add %d Path(s)"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Translation Resource Remap: Add %d Remap(s)"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Change Resource Remap Language"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Remove Resource Remap"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Remove Resource Remap Option"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Changed Locale Filter"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Changed Locale Filter Mode"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Project Settings (project.godot)"
+msgstr ""
+
+#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
+msgid "General"
+msgstr "Pangkalahatan"
+
+#: editor/project_settings_editor.cpp
+msgid "Override For..."
+msgstr ""
+
+#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
+msgid "The editor must be restarted for changes to take effect."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Input Map"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Action:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Action"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Deadzone"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Device:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Index:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Localization"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Translations"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Translations:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Remaps"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Resources:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Remaps by Locale:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Locale"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Locales Filter"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Show All Locales"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Show Selected Locales Only"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Filter mode:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Locales:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "AutoLoad"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Plugins"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Import Defaults"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Preset..."
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Zero"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Easing In-Out"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Easing Out-In"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "File..."
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Dir..."
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Assign"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Select Node"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Error loading file: Not a resource!"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Pick a Node"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Bit %d, val %d."
+msgstr ""
+
+#: editor/property_selector.cpp
+msgid "Select Property"
+msgstr ""
+
+#: editor/property_selector.cpp
+msgid "Select Virtual Method"
+msgstr ""
+
+#: editor/property_selector.cpp
+msgid "Select Method"
+msgstr ""
+
+#: editor/rename_dialog.cpp editor/scene_tree_dock.cpp
+msgid "Batch Rename"
+msgstr ""
+
+#: editor/rename_dialog.cpp
+msgid "Replace:"
+msgstr ""
+
+#: editor/rename_dialog.cpp
+msgid "Prefix:"
+msgstr ""
+
+#: editor/rename_dialog.cpp
+msgid "Suffix:"
+msgstr ""
+
+#: editor/rename_dialog.cpp
+msgid "Use Regular Expressions"
+msgstr ""
+
+#: editor/rename_dialog.cpp
+msgid "Advanced Options"
+msgstr ""
+
+#: editor/rename_dialog.cpp
+msgid "Substitute"
+msgstr ""
+
+#: editor/rename_dialog.cpp
+msgid "Node name"
+msgstr ""
+
+#: editor/rename_dialog.cpp
+msgid "Node's parent name, if available"
+msgstr ""
+
+#: editor/rename_dialog.cpp
+msgid "Node type"
+msgstr ""
+
+#: editor/rename_dialog.cpp
+msgid "Current scene name"
+msgstr ""
+
+#: editor/rename_dialog.cpp
+msgid "Root node name"
+msgstr ""
+
+#: editor/rename_dialog.cpp
+msgid ""
+"Sequential integer counter.\n"
+"Compare counter options."
+msgstr ""
+
+#: editor/rename_dialog.cpp
+msgid "Per-level Counter"
+msgstr ""
+
+#: editor/rename_dialog.cpp
+msgid "If set, the counter restarts for each group of child nodes."
+msgstr ""
+
+#: editor/rename_dialog.cpp
+msgid "Initial value for the counter"
+msgstr ""
+
+#: editor/rename_dialog.cpp
+msgid "Step"
+msgstr ""
+
+#: editor/rename_dialog.cpp
+msgid "Amount by which counter is incremented for each node"
+msgstr ""
+
+#: editor/rename_dialog.cpp
+msgid "Padding"
+msgstr ""
+
+#: editor/rename_dialog.cpp
+msgid ""
+"Minimum number of digits for the counter.\n"
+"Missing digits are padded with leading zeros."
+msgstr ""
+
+#: editor/rename_dialog.cpp
+msgid "Post-Process"
+msgstr ""
+
+#: editor/rename_dialog.cpp
+msgid "Style"
+msgstr ""
+
+#: editor/rename_dialog.cpp
+msgid "Keep"
+msgstr ""
+
+#: editor/rename_dialog.cpp
+msgid "PascalCase to snake_case"
+msgstr ""
+
+#: editor/rename_dialog.cpp
+msgid "snake_case to PascalCase"
+msgstr ""
+
+#: editor/rename_dialog.cpp
+msgid "Case"
+msgstr ""
+
+#: editor/rename_dialog.cpp
+msgid "To Lowercase"
+msgstr ""
+
+#: editor/rename_dialog.cpp
+msgid "To Uppercase"
+msgstr ""
+
+#: editor/rename_dialog.cpp
+msgid "Reset"
+msgstr ""
+
+#: editor/rename_dialog.cpp
+msgid "Regular Expression Error:"
+msgstr ""
+
+#: editor/rename_dialog.cpp
+msgid "At character %s"
+msgstr ""
+
+#: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp
+msgid "Reparent Node"
+msgstr ""
+
+#: editor/reparent_dialog.cpp
+msgid "Reparent Location (Select new Parent):"
+msgstr ""
+
+#: editor/reparent_dialog.cpp
+msgid "Keep Global Transform"
+msgstr ""
+
+#: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp
+msgid "Reparent"
+msgstr ""
+
+#: editor/run_settings_dialog.cpp
+msgid "Run Mode:"
+msgstr ""
+
+#: editor/run_settings_dialog.cpp
+msgid "Current Scene"
+msgstr ""
+
+#: editor/run_settings_dialog.cpp
+msgid "Main Scene"
+msgstr ""
+
+#: editor/run_settings_dialog.cpp
+msgid "Main Scene Arguments:"
+msgstr ""
+
+#: editor/run_settings_dialog.cpp
+msgid "Scene Run Settings"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "No parent to instance the scenes at."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Error loading scene from %s"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid ""
+"Cannot instance the scene '%s' because the current scene exists within one "
+"of its nodes."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Instance Scene(s)"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Replace with Branch Scene"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Instance Child Scene"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Can't paste root node into the same scene."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Paste Node(s)"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Detach Script"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "This operation can't be done on the tree root."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Move Node In Parent"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Move Nodes In Parent"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Duplicate Node(s)"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Can't reparent nodes in inherited scenes, order of nodes can't change."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Node must belong to the edited scene to become root."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Instantiated scenes can't become root"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Make node as Root"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Delete %d nodes and any children?"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Delete %d nodes?"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Delete the root node \"%s\"?"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Delete node \"%s\" and its children?"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Delete node \"%s\"?"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid ""
+"Saving the branch as a scene requires having a scene open in the editor."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid ""
+"Saving the branch as a scene requires selecting only one node, but you have "
+"selected %d nodes."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid ""
+"Can't save the root node branch as an instanced scene.\n"
+"To create an editable copy of the current scene, duplicate it using the "
+"FileSystem dock context menu\n"
+"or create an inherited scene using Scene > New Inherited Scene... instead."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid ""
+"Can't save the branch of an already instanced scene.\n"
+"To create a variation of a scene, you can make an inherited scene based on "
+"the instanced scene using Scene > New Inherited Scene... instead."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Save New Scene As..."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid ""
+"Disabling \"editable_instance\" will cause all properties of the node to be "
+"reverted to their default."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid ""
+"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and "
+"cause all properties of the node to be reverted to their default."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Make Local"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "New Scene Root"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Create Root Node:"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "2D Scene"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "3D Scene"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "User Interface"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Other Node"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Can't operate on nodes from a foreign scene!"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Can't operate on nodes the current scene inherits from!"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "This operation can't be done on instanced scenes."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Attach Script"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Cut Node(s)"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Remove Node(s)"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Change type of node(s)"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid ""
+"Couldn't save new scene. Likely dependencies (instances) couldn't be "
+"satisfied."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Error saving scene."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Error duplicating scene to save it."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Sub-Resources"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Clear Inheritance"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Editable Children"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Load As Placeholder"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid ""
+"Cannot attach a script: there are no languages registered.\n"
+"This is probably because this editor was built with all language modules "
+"disabled."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Add Child Node"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Expand/Collapse All"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Change Type"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Reparent to New Node"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Make Scene Root"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Merge From Scene"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp editor/script_editor_debugger.cpp
+msgid "Save Branch as Scene"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp editor/script_editor_debugger.cpp
+msgid "Copy Node Path"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Delete (No Confirm)"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Add/Create a New Node."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid ""
+"Instance a scene file as a Node. Creates an inherited scene if no root node "
+"exists."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Attach a new or existing script to the selected node."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Detach the script from the selected node."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Remote"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid ""
+"If selected, the Remote scene tree dock will cause the project to stutter "
+"every time it updates.\n"
+"Switch back to the Local scene tree dock to improve performance."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Local"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Clear Inheritance? (No Undo!)"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Toggle Visible"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Unlock Node"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Button Group"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "(Connecting From)"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Node configuration warning:"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid ""
+"Node has %s connection(s) and %s group(s).\n"
+"Click to show signals dock."
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid ""
+"Node has %s connection(s).\n"
+"Click to show signals dock."
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid ""
+"Node is in %s group(s).\n"
+"Click to show groups dock."
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Open Script:"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid ""
+"Node is locked.\n"
+"Click to unlock it."
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid ""
+"Children are not selectable.\n"
+"Click to make selectable."
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Toggle Visibility"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid ""
+"AnimationPlayer is pinned.\n"
+"Click to unpin."
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Invalid node name, the following characters are not allowed:"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Rename Node"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Scene Tree (Nodes):"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Node Configuration Warning!"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Select a Node"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Path is empty."
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Filename is empty."
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Path is not local."
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Invalid base path."
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "A directory with the same name exists."
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "File does not exist."
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Invalid extension."
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Wrong extension chosen."
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Error loading template '%s'"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Error - Could not create script in filesystem."
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Error loading script from %s"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Overrides"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "N/A"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Open Script / Choose Location"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Open Script"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "File exists, it will be reused."
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Invalid path."
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Invalid class name."
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Invalid inherited parent name or path."
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Script path/name is valid."
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Allowed: a-z, A-Z, 0-9, _ and ."
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Built-in script (into scene file)."
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Will create a new script file."
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Will load an existing script file."
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Script file already exists."
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid ""
+"Note: Built-in scripts have some limitations and can't be edited using an "
+"external editor."
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid ""
+"Warning: Having the script name be the same as a built-in type is usually "
+"not desired."
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Class Name:"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Template:"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Built-in Script:"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Attach Node Script"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Remote "
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Bytes:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Warning:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Error:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "C++ Error"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "C++ Error:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "C++ Source"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Source:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "C++ Source:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Stack Trace"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Errors"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Child process connected."
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Copy Error"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Open C++ Source on GitHub"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Video RAM"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Skip Breakpoints"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Inspect Previous Instance"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Inspect Next Instance"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Stack Frames"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Profiler"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Network Profiler"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Monitor"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Value"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Monitors"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Pick one or more items from the list to display the graph."
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "List of Video Memory Usage by Resource:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Total:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Export list to a CSV file"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Resource Path"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Type"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Format"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Usage"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Misc"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Clicked Control:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Clicked Control Type:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Live Edit Root:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Set From Tree"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Export measures as CSV"
+msgstr ""
+
+#: editor/settings_config_dialog.cpp
+msgid "Erase Shortcut"
+msgstr ""
+
+#: editor/settings_config_dialog.cpp
+msgid "Restore Shortcut"
+msgstr ""
+
+#: editor/settings_config_dialog.cpp
+msgid "Change Shortcut"
+msgstr ""
+
+#: editor/settings_config_dialog.cpp
+msgid "Editor Settings"
+msgstr ""
+
+#: editor/settings_config_dialog.cpp
+msgid "Shortcuts"
+msgstr ""
+
+#: editor/settings_config_dialog.cpp
+msgid "Binding"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Light Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change AudioStreamPlayer3D Emission Angle"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Camera FOV"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Camera Size"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Notifier AABB"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Particles AABB"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Probe Extents"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp modules/csg/csg_gizmos.cpp
+msgid "Change Sphere Shape Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp modules/csg/csg_gizmos.cpp
+msgid "Change Box Shape Extents"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Capsule Shape Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Capsule Shape Height"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Cylinder Shape Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Cylinder Shape Height"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Ray Shape Length"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Room Point Position"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Portal Point Position"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Position"
+msgstr ""
+
+#: modules/csg/csg_gizmos.cpp
+msgid "Change Cylinder Radius"
+msgstr ""
+
+#: modules/csg/csg_gizmos.cpp
+msgid "Change Cylinder Height"
+msgstr ""
+
+#: modules/csg/csg_gizmos.cpp
+msgid "Change Torus Inner Radius"
+msgstr ""
+
+#: modules/csg/csg_gizmos.cpp
+msgid "Change Torus Outer Radius"
+msgstr ""
+
+#: modules/gdnative/gdnative_library_editor_plugin.cpp
+msgid "Select the dynamic library for this entry"
+msgstr ""
+
+#: modules/gdnative/gdnative_library_editor_plugin.cpp
+msgid "Select dependencies of the library for this entry"
+msgstr ""
+
+#: modules/gdnative/gdnative_library_editor_plugin.cpp
+msgid "Remove current entry"
+msgstr ""
+
+#: modules/gdnative/gdnative_library_editor_plugin.cpp
+msgid "Double click to create a new entry"
+msgstr ""
+
+#: modules/gdnative/gdnative_library_editor_plugin.cpp
+msgid "Platform:"
+msgstr ""
+
+#: modules/gdnative/gdnative_library_editor_plugin.cpp
+msgid "Platform"
+msgstr ""
+
+#: modules/gdnative/gdnative_library_editor_plugin.cpp
+msgid "Dynamic Library"
+msgstr ""
+
+#: modules/gdnative/gdnative_library_editor_plugin.cpp
+msgid "Add an architecture entry"
+msgstr ""
+
+#: modules/gdnative/gdnative_library_editor_plugin.cpp
+msgid "GDNativeLibrary"
+msgstr ""
+
+#: modules/gdnative/gdnative_library_singleton_editor.cpp
+msgid "Enabled GDNative Singleton"
+msgstr ""
+
+#: modules/gdnative/gdnative_library_singleton_editor.cpp
+msgid "Disabled GDNative Singleton"
+msgstr ""
+
+#: modules/gdnative/gdnative_library_singleton_editor.cpp
+msgid "Library"
+msgstr ""
+
+#: modules/gdnative/gdnative_library_singleton_editor.cpp
+msgid "Libraries: "
+msgstr ""
+
+#: modules/gdnative/register_types.cpp
+msgid "GDNative"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Step argument is zero!"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Not a script with an instance"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Not based on a script"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Not based on a resource file"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Invalid instance dictionary format (missing @path)"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Invalid instance dictionary format (can't load script at @path)"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Invalid instance dictionary format (invalid script at @path)"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Invalid instance dictionary (invalid subclasses)"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Object can't provide a length."
+msgstr ""
+
+#: modules/gltf/editor_scene_exporter_gltf_plugin.cpp
+msgid "Export Mesh GLTF2"
+msgstr ""
+
+#: modules/gltf/editor_scene_exporter_gltf_plugin.cpp
+msgid "Export GLTF..."
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Next Plane"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Previous Plane"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Plane:"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Next Floor"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Previous Floor"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Floor:"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "GridMap Delete Selection"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "GridMap Fill Selection"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "GridMap Paste Selection"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "GridMap Paint"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "GridMap Selection"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Grid Map"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Snap View"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Clip Disabled"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Clip Above"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Clip Below"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Edit X Axis"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Edit Y Axis"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Edit Z Axis"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cursor Rotate X"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cursor Rotate Y"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cursor Rotate Z"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cursor Back Rotate X"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cursor Back Rotate Y"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cursor Back Rotate Z"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cursor Clear Rotation"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Paste Selects"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Clear Selection"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Fill Selection"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "GridMap Settings"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Pick Distance:"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Filter meshes"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Give a MeshLibrary resource to this GridMap to use its meshes."
+msgstr ""
+
+#: modules/lightmapper_cpu/lightmapper_cpu.cpp
+msgid "Begin Bake"
+msgstr ""
+
+#: modules/lightmapper_cpu/lightmapper_cpu.cpp
+msgid "Preparing data structures"
+msgstr ""
+
+#: modules/lightmapper_cpu/lightmapper_cpu.cpp
+msgid "Generate buffers"
+msgstr ""
+
+#: modules/lightmapper_cpu/lightmapper_cpu.cpp
+msgid "Direct lighting"
+msgstr ""
+
+#: modules/lightmapper_cpu/lightmapper_cpu.cpp
+msgid "Indirect lighting"
+msgstr ""
+
+#: modules/lightmapper_cpu/lightmapper_cpu.cpp
+msgid "Post processing"
+msgstr ""
+
+#: modules/lightmapper_cpu/lightmapper_cpu.cpp
+msgid "Plotting lightmaps"
+msgstr ""
+
+#: modules/mono/csharp_script.cpp
+msgid "Class name can't be a reserved keyword"
+msgstr ""
+
+#: modules/mono/csharp_script.cpp
+msgid "Build Solution"
+msgstr ""
+
+#: modules/mono/mono_gd/gd_mono_utils.cpp
+msgid "End of inner exception stack trace"
+msgstr ""
+
+#: modules/recast/navigation_mesh_editor_plugin.cpp
+msgid "Bake NavMesh"
+msgstr ""
+
+#: modules/recast/navigation_mesh_editor_plugin.cpp
+msgid "Clear the navigation mesh."
+msgstr ""
+
+#: modules/recast/navigation_mesh_generator.cpp
+msgid "Setting up Configuration..."
+msgstr ""
+
+#: modules/recast/navigation_mesh_generator.cpp
+msgid "Calculating grid size..."
+msgstr ""
+
+#: modules/recast/navigation_mesh_generator.cpp
+msgid "Creating heightfield..."
+msgstr ""
+
+#: modules/recast/navigation_mesh_generator.cpp
+msgid "Marking walkable triangles..."
+msgstr ""
+
+#: modules/recast/navigation_mesh_generator.cpp
+msgid "Constructing compact heightfield..."
+msgstr ""
+
+#: modules/recast/navigation_mesh_generator.cpp
+msgid "Eroding walkable area..."
+msgstr ""
+
+#: modules/recast/navigation_mesh_generator.cpp
+msgid "Partitioning..."
+msgstr ""
+
+#: modules/recast/navigation_mesh_generator.cpp
+msgid "Creating contours..."
+msgstr ""
+
+#: modules/recast/navigation_mesh_generator.cpp
+msgid "Creating polymesh..."
+msgstr ""
+
+#: modules/recast/navigation_mesh_generator.cpp
+msgid "Converting to native navigation mesh..."
+msgstr ""
+
+#: modules/recast/navigation_mesh_generator.cpp
+msgid "Navigation Mesh Generator Setup:"
+msgstr ""
+
+#: modules/recast/navigation_mesh_generator.cpp
+msgid "Parsing Geometry..."
+msgstr ""
+
+#: modules/recast/navigation_mesh_generator.cpp
+msgid "Done!"
+msgstr ""
+
+#: modules/visual_script/visual_script.cpp
+msgid ""
+"A node yielded without working memory, please read the docs on how to yield "
+"properly!"
+msgstr ""
+
+#: modules/visual_script/visual_script.cpp
+msgid ""
+"Node yielded, but did not return a function state in the first working "
+"memory."
+msgstr ""
+
+#: modules/visual_script/visual_script.cpp
+msgid ""
+"Return value must be assigned to first element of node working memory! Fix "
+"your node please."
+msgstr ""
+
+#: modules/visual_script/visual_script.cpp
+msgid "Node returned an invalid sequence output: "
+msgstr ""
+
+#: modules/visual_script/visual_script.cpp
+msgid "Found sequence bit but not the node in the stack, report bug!"
+msgstr ""
+
+#: modules/visual_script/visual_script.cpp
+msgid "Stack overflow with stack depth: "
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change Signal Arguments"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change Argument Type"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change Argument name"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Set Variable Default Value"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Set Variable Type"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Input Port"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Output Port"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change Port Type"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change Port Name"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Override an existing built-in function."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Create a new function."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Variables:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Create a new variable."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Signals:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Create a new signal."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Name is not a valid identifier:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Name already in use by another func/var/signal:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Rename Function"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Rename Variable"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Rename Signal"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Function"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Delete input port"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Variable"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Signal"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Remove Input Port"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Remove Output Port"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change Expression"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Remove VisualScript Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Duplicate VisualScript Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold %s to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold %s to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Preload Node"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Node(s)"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Node(s) From Tree"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid ""
+"Can't drop properties because script '%s' is not used in this scene.\n"
+"Drop holding 'Shift' to just copy the signature."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Getter Property"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Setter Property"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change Base Type"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Move Node(s)"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Remove VisualScript Node"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Connect Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Disconnect Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Connect Node Data"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Connect Node Sequence"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Script already has function '%s'"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change Input Value"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Resize Comment"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Can't copy the function node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Paste VisualScript Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Can't create function with a function node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Can't create function of nodes from nodes of multiple functions."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Select at least one node with sequence port."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Try to only have one sequence input in selection."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Create Function"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Remove Function"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Remove Variable"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Editing Variable:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Remove Signal"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Editing Signal:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Make Tool:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Members:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change Base Type:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Nodes..."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Function..."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "function_name"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Select or create a function to edit its graph."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Delete Selected"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Find Node Type"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Copy Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Cut Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Make Function"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Refresh Graph"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Edit Member"
+msgstr ""
+
+#: modules/visual_script/visual_script_flow_control.cpp
+msgid "Input type not iterable: "
+msgstr ""
+
+#: modules/visual_script/visual_script_flow_control.cpp
+msgid "Iterator became invalid"
+msgstr ""
+
+#: modules/visual_script/visual_script_flow_control.cpp
+msgid "Iterator became invalid: "
+msgstr ""
+
+#: modules/visual_script/visual_script_func_nodes.cpp
+msgid "Invalid index property name."
+msgstr ""
+
+#: modules/visual_script/visual_script_func_nodes.cpp
+msgid "Base object is not a Node!"
+msgstr ""
+
+#: modules/visual_script/visual_script_func_nodes.cpp
+msgid "Path does not lead Node!"
+msgstr ""
+
+#: modules/visual_script/visual_script_func_nodes.cpp
+msgid "Invalid index property name '%s' in node %s."
+msgstr ""
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid ": Invalid argument of type: "
+msgstr ""
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid ": Invalid arguments: "
+msgstr ""
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid "VariableGet not found in script: "
+msgstr ""
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid "VariableSet not found in script: "
+msgstr ""
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid "Custom node has no _step() method, can't process graph."
+msgstr ""
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid ""
+"Invalid return value from _step(), must be integer (seq out), or string "
+"(error)."
+msgstr ""
+
+#: modules/visual_script/visual_script_property_selector.cpp
+msgid "Search VisualScript"
+msgstr ""
+
+#: modules/visual_script/visual_script_property_selector.cpp
+msgid "Get %s"
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Package name is missing."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Package segments must be of non-zero length."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "The character '%s' is not allowed in Android application package names."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "A digit cannot be the first character in a package segment."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "The character '%s' cannot be the first character in a package segment."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "The package must have at least one '.' separator."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Select device from the list"
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Running on %s"
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Exporting APK..."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Uninstalling..."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Installing to device, please wait..."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Could not install to device: %s"
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Running on device..."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Could not execute on device."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Unable to find the 'apksigner' tool."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid ""
+"Android build template not installed in the project. Install it from the "
+"Project menu."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid ""
+"Either Debug Keystore, Debug User AND Debug Password settings must be "
+"configured OR none of them."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Debug keystore not configured in the Editor Settings nor in the preset."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid ""
+"Either Release Keystore, Release User AND Release Password settings must be "
+"configured OR none of them."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Release keystore incorrectly configured in the export preset."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "A valid Android SDK path is required in Editor Settings."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Invalid Android SDK path in Editor Settings."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Unable to find Android SDK platform-tools' adb command."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Please check in the Android SDK directory specified in Editor Settings."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Unable to find Android SDK build-tools' apksigner command."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Invalid public key for APK expansion."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Invalid package name:"
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid ""
+"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
+"project setting (changed in Godot 3.2.2).\n"
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "\"Use Custom Build\" must be enabled to use the plugins."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid ""
+"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid ""
+"'apksigner' could not be found.\n"
+"Please check the command is available in the Android SDK build-tools "
+"directory.\n"
+"The resulting %s is unsigned."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Signing debug %s..."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Signing release %s..."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Could not find keystore, unable to export."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "'apksigner' returned with error #%d"
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Verifying %s..."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "'apksigner' verification of %s failed."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Exporting for Android"
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Invalid filename! Android App Bundle requires the *.aab extension."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "APK Expansion not compatible with Android App Bundle."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Invalid filename! Android APK requires the *.apk extension."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Unsupported export format!\n"
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid ""
+"Trying to build from a custom built template, but no version info for it "
+"exists. Please reinstall from the 'Project' menu."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid ""
+"Android build version mismatch:\n"
+" Template installed: %s\n"
+" Godot Version: %s\n"
+"Please reinstall Android build template from 'Project' menu."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid ""
+"Unable to overwrite res://android/build/res/*.xml files with project name"
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Could not export project files to gradle project\n"
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Could not write expansion package file!"
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Building Android Project (gradle)"
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid ""
+"Building of Android project failed, check output for the error.\n"
+"Alternatively visit docs.godotengine.org for Android build documentation."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Moving output"
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid ""
+"Unable to copy and rename export file, check gradle project directory for "
+"outputs."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Package not found: %s"
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Creating APK..."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid ""
+"Could not find template APK to export:\n"
+"%s"
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid ""
+"Missing libraries in the export template for the selected architectures: "
+"%s.\n"
+"Please build a template with all required libraries, or uncheck the missing "
+"architectures in the export preset."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Adding files..."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Could not export project files"
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Aligning APK..."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Could not unzip temporary unaligned APK."
+msgstr ""
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+msgid "Identifier is missing."
+msgstr ""
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+msgid "The character '%s' is not allowed in Identifier."
+msgstr ""
+
+#: platform/iphone/export/export.cpp
+msgid "App Store Team ID not specified - cannot configure the project."
+msgstr ""
+
+#: platform/iphone/export/export.cpp
+msgid "Invalid Identifier:"
+msgstr ""
+
+#: platform/iphone/export/export.cpp
+msgid "Required icon is not specified in the preset."
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Stop HTTP Server"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Run in Browser"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Run exported HTML in the system's default browser."
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Could not open template for export:"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Invalid export template:"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Could not write file:"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Could not read file:"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Could not read HTML shell:"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Could not create HTTP server directory:"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Error starting HTTP server:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Invalid bundle identifier:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: code signing required."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: hardened runtime required."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Apple ID name not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Apple ID password not specified."
+msgstr ""
+
+#: platform/uwp/export/export.cpp
+msgid "Invalid package short name."
+msgstr ""
+
+#: platform/uwp/export/export.cpp
+msgid "Invalid package unique name."
+msgstr ""
+
+#: platform/uwp/export/export.cpp
+msgid "Invalid package publisher display name."
+msgstr ""
+
+#: platform/uwp/export/export.cpp
+msgid "Invalid product GUID."
+msgstr ""
+
+#: platform/uwp/export/export.cpp
+msgid "Invalid publisher GUID."
+msgstr ""
+
+#: platform/uwp/export/export.cpp
+msgid "Invalid background color."
+msgstr ""
+
+#: platform/uwp/export/export.cpp
+msgid "Invalid Store Logo image dimensions (should be 50x50)."
+msgstr ""
+
+#: platform/uwp/export/export.cpp
+msgid "Invalid square 44x44 logo image dimensions (should be 44x44)."
+msgstr ""
+
+#: platform/uwp/export/export.cpp
+msgid "Invalid square 71x71 logo image dimensions (should be 71x71)."
+msgstr ""
+
+#: platform/uwp/export/export.cpp
+msgid "Invalid square 150x150 logo image dimensions (should be 150x150)."
+msgstr ""
+
+#: platform/uwp/export/export.cpp
+msgid "Invalid square 310x310 logo image dimensions (should be 310x310)."
+msgstr ""
+
+#: platform/uwp/export/export.cpp
+msgid "Invalid wide 310x150 logo image dimensions (should be 310x150)."
+msgstr ""
+
+#: platform/uwp/export/export.cpp
+msgid "Invalid splash screen image dimensions (should be 620x300)."
+msgstr ""
+
+#: scene/2d/animated_sprite.cpp
+msgid ""
+"A SpriteFrames resource must be created or set in the \"Frames\" property in "
+"order for AnimatedSprite to display frames."
+msgstr ""
+
+#: scene/2d/canvas_modulate.cpp
+msgid ""
+"Only one visible CanvasModulate is allowed per scene (or set of instanced "
+"scenes). The first created one will work, while the rest will be ignored."
+msgstr ""
+
+#: scene/2d/collision_object_2d.cpp
+msgid ""
+"This node has no shape, so it can't collide or interact with other objects.\n"
+"Consider adding a CollisionShape2D or CollisionPolygon2D as a child to "
+"define its shape."
+msgstr ""
+
+#: scene/2d/collision_polygon_2d.cpp
+msgid ""
+"CollisionPolygon2D only serves to provide a collision shape to a "
+"CollisionObject2D derived node. Please only use it as a child of Area2D, "
+"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
+msgstr ""
+
+#: scene/2d/collision_polygon_2d.cpp
+msgid "An empty CollisionPolygon2D has no effect on collision."
+msgstr ""
+
+#: scene/2d/collision_polygon_2d.cpp
+msgid "Invalid polygon. At least 3 points are needed in 'Solids' build mode."
+msgstr ""
+
+#: scene/2d/collision_polygon_2d.cpp
+msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode."
+msgstr ""
+
+#: scene/2d/collision_shape_2d.cpp
+msgid ""
+"CollisionShape2D only serves to provide a collision shape to a "
+"CollisionObject2D derived node. Please only use it as a child of Area2D, "
+"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
+msgstr ""
+
+#: scene/2d/collision_shape_2d.cpp
+msgid ""
+"A shape must be provided for CollisionShape2D to function. Please create a "
+"shape resource for it!"
+msgstr ""
+
+#: scene/2d/collision_shape_2d.cpp
+msgid ""
+"Polygon-based shapes are not meant be used nor edited directly through the "
+"CollisionShape2D node. Please use the CollisionPolygon2D node instead."
+msgstr ""
+
+#: scene/2d/cpu_particles_2d.cpp
+msgid ""
+"CPUParticles2D animation requires the usage of a CanvasItemMaterial with "
+"\"Particles Animation\" enabled."
+msgstr ""
+
+#: scene/2d/joints_2d.cpp
+msgid "Node A and Node B must be PhysicsBody2Ds"
+msgstr ""
+
+#: scene/2d/joints_2d.cpp
+msgid "Node A must be a PhysicsBody2D"
+msgstr ""
+
+#: scene/2d/joints_2d.cpp
+msgid "Node B must be a PhysicsBody2D"
+msgstr ""
+
+#: scene/2d/joints_2d.cpp
+msgid "Joint is not connected to two PhysicsBody2Ds"
+msgstr ""
+
+#: scene/2d/joints_2d.cpp
+msgid "Node A and Node B must be different PhysicsBody2Ds"
+msgstr ""
+
+#: scene/2d/light_2d.cpp
+msgid ""
+"A texture with the shape of the light must be supplied to the \"Texture\" "
+"property."
+msgstr ""
+
+#: scene/2d/light_occluder_2d.cpp
+msgid ""
+"An occluder polygon must be set (or drawn) for this occluder to take effect."
+msgstr ""
+
+#: scene/2d/light_occluder_2d.cpp
+msgid "The occluder polygon for this occluder is empty. Please draw a polygon."
+msgstr ""
+
+#: scene/2d/navigation_polygon.cpp
+msgid ""
+"A NavigationPolygon resource must be set or created for this node to work. "
+"Please set a property or draw a polygon."
+msgstr ""
+
+#: scene/2d/navigation_polygon.cpp
+msgid ""
+"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
+"node. It only provides navigation data."
+msgstr ""
+
+#: scene/2d/parallax_layer.cpp
+msgid ""
+"ParallaxLayer node only works when set as child of a ParallaxBackground node."
+msgstr ""
+
+#: scene/2d/particles_2d.cpp
+msgid ""
+"GPU-based particles are not supported by the GLES2 video driver.\n"
+"Use the CPUParticles2D node instead. You can use the \"Convert to "
+"CPUParticles\" option for this purpose."
+msgstr ""
+
+#: scene/2d/particles_2d.cpp scene/3d/particles.cpp
+msgid ""
+"A material to process the particles is not assigned, so no behavior is "
+"imprinted."
+msgstr ""
+
+#: scene/2d/particles_2d.cpp
+msgid ""
+"Particles2D animation requires the usage of a CanvasItemMaterial with "
+"\"Particles Animation\" enabled."
+msgstr ""
+
+#: scene/2d/path_2d.cpp
+msgid "PathFollow2D only works when set as a child of a Path2D node."
+msgstr ""
+
+#: scene/2d/physics_body_2d.cpp
+msgid ""
+"Size changes to RigidBody2D (in character or rigid modes) will be overridden "
+"by the physics engine when running.\n"
+"Change the size in children collision shapes instead."
+msgstr ""
+
+#: scene/2d/remote_transform_2d.cpp
+msgid "Path property must point to a valid Node2D node to work."
+msgstr ""
+
+#: scene/2d/skeleton_2d.cpp
+msgid "This Bone2D chain should end at a Skeleton2D node."
+msgstr ""
+
+#: scene/2d/skeleton_2d.cpp
+msgid "A Bone2D only works with a Skeleton2D or another Bone2D as parent node."
+msgstr ""
+
+#: scene/2d/skeleton_2d.cpp
+msgid ""
+"This bone lacks a proper REST pose. Go to the Skeleton2D node and set one."
+msgstr ""
+
+#: scene/2d/tile_map.cpp
+msgid ""
+"TileMap with Use Parent on needs a parent CollisionObject2D to give shapes "
+"to. Please use it as a child of Area2D, StaticBody2D, RigidBody2D, "
+"KinematicBody2D, etc. to give them a shape."
+msgstr ""
+
+#: scene/2d/visibility_notifier_2d.cpp
+msgid ""
+"VisibilityEnabler2D works best when used with the edited scene root directly "
+"as parent."
+msgstr ""
+
+#: scene/3d/arvr_nodes.cpp
+msgid "ARVRCamera must have an ARVROrigin node as its parent."
+msgstr ""
+
+#: scene/3d/arvr_nodes.cpp
+msgid "ARVRController must have an ARVROrigin node as its parent."
+msgstr ""
+
+#: scene/3d/arvr_nodes.cpp
+msgid ""
+"The controller ID must not be 0 or this controller won't be bound to an "
+"actual controller."
+msgstr ""
+
+#: scene/3d/arvr_nodes.cpp
+msgid "ARVRAnchor must have an ARVROrigin node as its parent."
+msgstr ""
+
+#: scene/3d/arvr_nodes.cpp
+msgid ""
+"The anchor ID must not be 0 or this anchor won't be bound to an actual "
+"anchor."
+msgstr ""
+
+#: scene/3d/arvr_nodes.cpp
+msgid "ARVROrigin requires an ARVRCamera child node."
+msgstr ""
+
+#: scene/3d/baked_lightmap.cpp
+msgid "Finding meshes and lights"
+msgstr ""
+
+#: scene/3d/baked_lightmap.cpp
+msgid "Preparing geometry (%d/%d)"
+msgstr ""
+
+#: scene/3d/baked_lightmap.cpp
+msgid "Preparing environment"
+msgstr ""
+
+#: scene/3d/baked_lightmap.cpp
+msgid "Generating capture"
+msgstr ""
+
+#: scene/3d/baked_lightmap.cpp
+msgid "Saving lightmaps"
+msgstr ""
+
+#: scene/3d/baked_lightmap.cpp
+msgid "Done"
+msgstr ""
+
+#: scene/3d/collision_object.cpp
+msgid ""
+"This node has no shape, so it can't collide or interact with other objects.\n"
+"Consider adding a CollisionShape or CollisionPolygon as a child to define "
+"its shape."
+msgstr ""
+
+#: scene/3d/collision_polygon.cpp
+msgid ""
+"CollisionPolygon only serves to provide a collision shape to a "
+"CollisionObject derived node. Please only use it as a child of Area, "
+"StaticBody, RigidBody, KinematicBody, etc. to give them a shape."
+msgstr ""
+
+#: scene/3d/collision_polygon.cpp
+msgid "An empty CollisionPolygon has no effect on collision."
+msgstr ""
+
+#: scene/3d/collision_shape.cpp
+msgid ""
+"CollisionShape only serves to provide a collision shape to a CollisionObject "
+"derived node. Please only use it as a child of Area, StaticBody, RigidBody, "
+"KinematicBody, etc. to give them a shape."
+msgstr ""
+
+#: scene/3d/collision_shape.cpp
+msgid ""
+"A shape must be provided for CollisionShape to function. Please create a "
+"shape resource for it."
+msgstr ""
+
+#: scene/3d/collision_shape.cpp
+msgid ""
+"Plane shapes don't work well and will be removed in future versions. Please "
+"don't use them."
+msgstr ""
+
+#: scene/3d/collision_shape.cpp
+msgid ""
+"ConcavePolygonShape doesn't support RigidBody in another mode than static."
+msgstr ""
+
+#: scene/3d/cpu_particles.cpp
+msgid "Nothing is visible because no mesh has been assigned."
+msgstr ""
+
+#: scene/3d/cpu_particles.cpp
+msgid ""
+"CPUParticles animation requires the usage of a SpatialMaterial whose "
+"Billboard Mode is set to \"Particle Billboard\"."
+msgstr ""
+
+#: scene/3d/gi_probe.cpp
+msgid "Plotting Meshes"
+msgstr ""
+
+#: scene/3d/gi_probe.cpp
+msgid "Finishing Plot"
+msgstr ""
+
+#: scene/3d/gi_probe.cpp
+msgid ""
+"GIProbes are not supported by the GLES2 video driver.\n"
+"Use a BakedLightmap instead."
+msgstr ""
+
+#: scene/3d/gi_probe.cpp
+msgid ""
+"The GIProbe Compress property has been deprecated due to known bugs and no "
+"longer has any effect.\n"
+"To remove this warning, disable the GIProbe's Compress property."
+msgstr ""
+
+#: scene/3d/light.cpp
+msgid "A SpotLight with an angle wider than 90 degrees cannot cast shadows."
+msgstr ""
+
+#: scene/3d/navigation_mesh.cpp
+msgid "A NavigationMesh resource must be set or created for this node to work."
+msgstr ""
+
+#: scene/3d/navigation_mesh.cpp
+msgid ""
+"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
+"It only provides navigation data."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
+#: scene/3d/particles.cpp
+msgid ""
+"GPU-based particles are not supported by the GLES2 video driver.\n"
+"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
+"\" option for this purpose."
+msgstr ""
+
+#: scene/3d/particles.cpp
+msgid ""
+"Nothing is visible because meshes have not been assigned to draw passes."
+msgstr ""
+
+#: scene/3d/particles.cpp
+msgid ""
+"Particles animation requires the usage of a SpatialMaterial whose Billboard "
+"Mode is set to \"Particle Billboard\"."
+msgstr ""
+
+#: scene/3d/path.cpp
+msgid "PathFollow only works when set as a child of a Path node."
+msgstr ""
+
+#: scene/3d/path.cpp
+msgid ""
+"PathFollow's ROTATION_ORIENTED requires \"Up Vector\" to be enabled in its "
+"parent Path's Curve resource."
+msgstr ""
+
+#: scene/3d/physics_body.cpp
+msgid ""
+"Size changes to RigidBody (in character or rigid modes) will be overridden "
+"by the physics engine when running.\n"
+"Change the size in children collision shapes instead."
+msgstr ""
+
+#: scene/3d/physics_joint.cpp
+msgid "Node A and Node B must be PhysicsBodies"
+msgstr ""
+
+#: scene/3d/physics_joint.cpp
+msgid "Node A must be a PhysicsBody"
+msgstr ""
+
+#: scene/3d/physics_joint.cpp
+msgid "Node B must be a PhysicsBody"
+msgstr ""
+
+#: scene/3d/physics_joint.cpp
+msgid "Joint is not connected to any PhysicsBodies"
+msgstr ""
+
+#: scene/3d/physics_joint.cpp
+msgid "Node A and Node B must be different PhysicsBodies"
+msgstr ""
+
+#: scene/3d/portal.cpp
+msgid "The RoomManager should not be a child or grandchild of a Portal."
+msgstr ""
+
+#: scene/3d/portal.cpp
+msgid "A Room should not be a child or grandchild of a Portal."
+msgstr ""
+
+#: scene/3d/portal.cpp
+msgid "A RoomGroup should not be a child or grandchild of a Portal."
+msgstr ""
+
+#: scene/3d/remote_transform.cpp
+msgid ""
+"The \"Remote Path\" property must point to a valid Spatial or Spatial-"
+"derived node to work."
+msgstr ""
+
+#: scene/3d/room.cpp
+msgid "A Room cannot have another Room as a child or grandchild."
+msgstr ""
+
+#: scene/3d/room.cpp
+msgid "The RoomManager should not be placed inside a Room."
+msgstr ""
+
+#: scene/3d/room.cpp
+msgid "A RoomGroup should not be placed inside a Room."
+msgstr ""
+
+#: scene/3d/room.cpp
+msgid ""
+"Room convex hull contains a large number of planes.\n"
+"Consider simplifying the room bound in order to increase performance."
+msgstr ""
+
+#: scene/3d/room_group.cpp
+msgid "The RoomManager should not be placed inside a RoomGroup."
+msgstr ""
+
+#: scene/3d/room_manager.cpp
+msgid "The RoomList has not been assigned."
+msgstr ""
+
+#: scene/3d/room_manager.cpp
+msgid "The RoomList node should be a Spatial (or derived from Spatial)."
+msgstr ""
+
+#: scene/3d/room_manager.cpp
+msgid ""
+"Portal Depth Limit is set to Zero.\n"
+"Only the Room that the Camera is in will render."
+msgstr ""
+
+#: scene/3d/room_manager.cpp
+msgid "There should only be one RoomManager in the SceneTree."
+msgstr ""
+
+#: scene/3d/room_manager.cpp
+msgid ""
+"RoomList path is invalid.\n"
+"Please check the RoomList branch has been assigned in the RoomManager."
+msgstr ""
+
+#: scene/3d/room_manager.cpp
+msgid "RoomList contains no Rooms, aborting."
+msgstr ""
+
+#: scene/3d/room_manager.cpp
+msgid "Misnamed nodes detected, check output log for details. Aborting."
+msgstr ""
+
+#: scene/3d/room_manager.cpp
+msgid "Portal link room not found, check output log for details."
+msgstr ""
+
+#: scene/3d/room_manager.cpp
+msgid ""
+"Portal autolink failed, check output log for details.\n"
+"Check the portal is facing outwards from the source room."
+msgstr ""
+
+#: scene/3d/room_manager.cpp
+msgid ""
+"Room overlap detected, cameras may work incorrectly in overlapping area.\n"
+"Check output log for details."
+msgstr ""
+
+#: scene/3d/room_manager.cpp
+msgid ""
+"Error calculating room bounds.\n"
+"Ensure all rooms contain geometry or manual bounds."
+msgstr ""
+
+#: scene/3d/soft_body.cpp
+msgid "This body will be ignored until you set a mesh."
+msgstr ""
+
+#: scene/3d/soft_body.cpp
+msgid ""
+"Size changes to SoftBody will be overridden by the physics engine when "
+"running.\n"
+"Change the size in children collision shapes instead."
+msgstr ""
+
+#: scene/3d/sprite_3d.cpp
+msgid ""
+"A SpriteFrames resource must be created or set in the \"Frames\" property in "
+"order for AnimatedSprite3D to display frames."
+msgstr ""
+
+#: scene/3d/vehicle_body.cpp
+msgid ""
+"VehicleWheel serves to provide a wheel system to a VehicleBody. Please use "
+"it as a child of a VehicleBody."
+msgstr ""
+
+#: scene/3d/world_environment.cpp
+msgid ""
+"WorldEnvironment requires its \"Environment\" property to contain an "
+"Environment to have a visible effect."
+msgstr ""
+
+#: scene/3d/world_environment.cpp
+msgid ""
+"Only one WorldEnvironment is allowed per scene (or set of instanced scenes)."
+msgstr ""
+
+#: scene/3d/world_environment.cpp
+msgid ""
+"This WorldEnvironment is ignored. Either add a Camera (for 3D scenes) or set "
+"this environment's Background Mode to Canvas (for 2D scenes)."
+msgstr ""
+
+#: scene/animation/animation_blend_tree.cpp
+msgid "On BlendTree node '%s', animation not found: '%s'"
+msgstr ""
+
+#: scene/animation/animation_blend_tree.cpp
+msgid "Animation not found: '%s'"
+msgstr ""
+
+#: scene/animation/animation_player.cpp
+msgid "Anim Apply Reset"
+msgstr ""
+
+#: scene/animation/animation_tree.cpp
+msgid "In node '%s', invalid animation: '%s'."
+msgstr ""
+
+#: scene/animation/animation_tree.cpp
+msgid "Invalid animation: '%s'."
+msgstr ""
+
+#: scene/animation/animation_tree.cpp
+msgid "Nothing connected to input '%s' of node '%s'."
+msgstr ""
+
+#: scene/animation/animation_tree.cpp
+msgid "No root AnimationNode for the graph is set."
+msgstr ""
+
+#: scene/animation/animation_tree.cpp
+msgid "Path to an AnimationPlayer node containing animations is not set."
+msgstr ""
+
+#: scene/animation/animation_tree.cpp
+msgid "Path set for AnimationPlayer does not lead to an AnimationPlayer node."
+msgstr ""
+
+#: scene/animation/animation_tree.cpp
+msgid "The AnimationPlayer root node is not a valid node."
+msgstr ""
+
+#: scene/animation/animation_tree_player.cpp
+msgid "This node has been deprecated. Use AnimationTree instead."
+msgstr ""
+
+#: scene/gui/color_picker.cpp
+msgid ""
+"Color: #%s\n"
+"LMB: Set color\n"
+"RMB: Remove preset"
+msgstr ""
+
+#: scene/gui/color_picker.cpp
+msgid "Pick a color from the editor window."
+msgstr ""
+
+#: scene/gui/color_picker.cpp
+msgid "HSV"
+msgstr ""
+
+#: scene/gui/color_picker.cpp
+msgid "Raw"
+msgstr ""
+
+#: scene/gui/color_picker.cpp
+msgid "Switch between hexadecimal and code values."
+msgstr ""
+
+#: scene/gui/color_picker.cpp
+msgid "Add current color as a preset."
+msgstr ""
+
+#: scene/gui/container.cpp
+msgid ""
+"Container by itself serves no purpose unless a script configures its "
+"children placement behavior.\n"
+"If you don't intend to add a script, use a plain Control node instead."
+msgstr ""
+
+#: scene/gui/control.cpp
+msgid ""
+"The Hint Tooltip won't be displayed as the control's Mouse Filter is set to "
+"\"Ignore\". To solve this, set the Mouse Filter to \"Stop\" or \"Pass\"."
+msgstr ""
+
+#: scene/gui/dialogs.cpp
+msgid "Alert!"
+msgstr ""
+
+#: scene/gui/dialogs.cpp
+msgid "Please Confirm..."
+msgstr ""
+
+#: scene/gui/file_dialog.cpp
+msgid "Must use a valid extension."
+msgstr ""
+
+#: scene/gui/graph_edit.cpp
+msgid "Enable grid minimap."
+msgstr ""
+
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
+#: scene/gui/popup.cpp
+msgid ""
+"Popups will hide by default unless you call popup() or any of the popup*() "
+"functions. Making them visible for editing is fine, but they will hide upon "
+"running."
+msgstr ""
+
+#: scene/gui/range.cpp
+msgid "If \"Exp Edit\" is enabled, \"Min Value\" must be greater than 0."
+msgstr ""
+
+#: scene/gui/scroll_container.cpp
+msgid ""
+"ScrollContainer is intended to work with a single child control.\n"
+"Use a container as child (VBox, HBox, etc.), or a Control and set the custom "
+"minimum size manually."
+msgstr ""
+
+#: scene/gui/tree.cpp
+msgid "(Other)"
+msgstr ""
+
+#: scene/main/scene_tree.cpp
+msgid ""
+"Default Environment as specified in Project Settings (Rendering -> "
+"Environment -> Default Environment) could not be loaded."
+msgstr ""
+
+#: scene/main/timer.cpp
+msgid ""
+"Very low timer wait times (< 0.05 seconds) may behave in significantly "
+"different ways depending on the rendered or physics frame rate.\n"
+"Consider using a script's process loop instead of relying on a Timer for "
+"very low wait times."
+msgstr ""
+
+#: scene/main/viewport.cpp
+msgid ""
+"This viewport is not set as render target. If you intend for it to display "
+"its contents directly to the screen, make it a child of a Control so it can "
+"obtain a size. Otherwise, make it a RenderTarget and assign its internal "
+"texture to some node for display."
+msgstr ""
+
+#: scene/main/viewport.cpp
+msgid ""
+"The Viewport size must be greater than or equal to 2 pixels on both "
+"dimensions to render anything."
+msgstr ""
+
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
+#: scene/resources/visual_shader_nodes.cpp
+msgid ""
+"The sampler port is connected but not used. Consider changing the source to "
+"'SamplerPort'."
+msgstr ""
+
+#: scene/resources/visual_shader_nodes.cpp
+msgid "Invalid source for preview."
+msgstr ""
+
+#: scene/resources/visual_shader_nodes.cpp
+msgid "Invalid source for shader."
+msgstr ""
+
+#: scene/resources/visual_shader_nodes.cpp
+msgid "Invalid comparison function for that type."
+msgstr ""
+
+#: servers/visual/shader_language.cpp
+msgid "Varying may not be assigned in the '%s' function."
+msgstr ""
+
+#: servers/visual/shader_language.cpp
+msgid ""
+"Varyings which assigned in 'vertex' function may not be reassigned in "
+"'fragment' or 'light'."
+msgstr ""
+
+#: servers/visual/shader_language.cpp
+msgid ""
+"Varyings which assigned in 'fragment' function may not be reassigned in "
+"'vertex' or 'light'."
+msgstr ""
+
+#: servers/visual/shader_language.cpp
+msgid "Fragment-stage varying could not been accessed in custom function!"
+msgstr ""
+
+#: servers/visual/shader_language.cpp
+msgid "Assignment to function."
+msgstr ""
+
+#: servers/visual/shader_language.cpp
+msgid "Assignment to uniform."
+msgstr ""
+
+#: servers/visual/shader_language.cpp
+msgid "Constants cannot be modified."
+msgstr "Hindi maaring maibago ang mga Constant."
diff --git a/editor/translations/tr.po b/editor/translations/tr.po
index 5f8a365768..6cab155c7e 100644
--- a/editor/translations/tr.po
+++ b/editor/translations/tr.po
@@ -63,13 +63,15 @@
# kahveciderin <kahveciderin@gmail.com>, 2021.
# Lucifer25x <umudyt2006@gmail.com>, 2021.
# Kadir Berk YaÄŸar <ykadirberk2@gmail.com>, 2021.
+# Aysu Toprak <moonwater99@hotmail.com>, 2021.
+# Yusuf Yavuzyigit <yusufyavuzyigit25@gmail.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-10-01 03:16+0000\n"
-"Last-Translator: Kadir Berk YaÄŸar <ykadirberk2@gmail.com>\n"
+"PO-Revision-Date: 2021-11-18 13:37+0000\n"
+"Last-Translator: Yusuf Yavuzyigit <yusufyavuzyigit25@gmail.com>\n"
"Language-Team: Turkish <https://hosted.weblate.org/projects/godot-engine/"
"godot/tr/>\n"
"Language: tr\n"
@@ -77,7 +79,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.9-dev\n"
+"X-Generator: Weblate 4.9.1-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -86,7 +88,7 @@ msgstr "convert() için geçersiz türde argüman, TYPE_* sabitlerini kullanın.
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
msgid "Expected a string of length 1 (a character)."
-msgstr "1 uzunluÄŸunda bir metin (bir karakter) bekleniyor."
+msgstr "1 uzunluÄŸunda bir metin bekleniyor (bir karakter)."
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/mono/glue/gd_glue.cpp
@@ -96,11 +98,11 @@ msgstr "Baytları çözümlemek için yetersiz miktarda bayt ya da geçersiz for
#: core/math/expression.cpp
msgid "Invalid input %i (not passed) in expression"
-msgstr "İfade de geçersiz giriş %i (geçersiz)"
+msgstr "İfadede geçersiz giriş %i (geçersiz)"
#: core/math/expression.cpp
msgid "self can't be used because instance is null (not passed)"
-msgstr "\"self\" kullanılamaz çünkü \"null\" değerini almış(geçersiz)"
+msgstr "self kullanılamaz çünkü örnek boş (geçilmedi)"
#: core/math/expression.cpp
msgid "Invalid operands to operator %s, %s and %s."
@@ -128,7 +130,7 @@ msgstr "B"
#: core/ustring.cpp
msgid "KiB"
-msgstr "KB"
+msgstr "KiB"
#: core/ustring.cpp
msgid "MiB"
@@ -977,7 +979,7 @@ msgstr ""
#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp
msgid "Signals"
-msgstr "Sinyaller"
+msgstr "sinyaller"
#: editor/connections_dialog.cpp
msgid "Filter signals"
@@ -1321,7 +1323,6 @@ msgid "Contents of asset \"%s\" - %d file(s) conflict with your project:"
msgstr "\"%s\" öğesinin içeriği - %d dosya(lar) projenizle çakışıyor:"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Contents of asset \"%s\" - No files conflict with your project:"
msgstr "\"%s\" öğesinin içeriği - Projenizle çakışan dosya yok:"
@@ -1334,9 +1335,8 @@ msgid "The following files failed extraction from asset \"%s\":"
msgstr "Aşağıdaki dosyaların \"%s\" kaynağından ayıklanmasında hata oluştu:"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "(and %s more files)"
-msgstr "Ve %s kadar dosya daha."
+msgstr "(ve %s dosya daha)"
#: editor/editor_asset_installer.cpp
msgid "Asset \"%s\" installed successfully!"
@@ -1352,7 +1352,6 @@ msgid "Install"
msgstr "Kur"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Asset Installer"
msgstr "Paket Yükleyici"
@@ -1417,7 +1416,6 @@ msgid "Bypass"
msgstr "Baypas"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Bus Options"
msgstr "Bus ayarları"
@@ -1806,7 +1804,6 @@ msgid "Allows editing the node hierarchy in the Scene dock."
msgstr "Scene dock'ta düğüm hiyerarşisini düzenlemeye izin verir."
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid ""
"Allows to work with signals and groups of the node selected in the Scene "
"dock."
@@ -1836,7 +1833,7 @@ msgstr "(hiç)"
#: editor/editor_feature_profile.cpp
msgid "Remove currently selected profile, '%s'? Cannot be undone."
-msgstr "Seçili olan '%s' profili kaldırılsın mı? (Geri alınamaz.)"
+msgstr "Seçili olan '%s' profili kaldırılsın mı? Geri alınamaz."
#: editor/editor_feature_profile.cpp
msgid "Profile must be a valid filename and must not contain '.'"
@@ -1875,9 +1872,8 @@ msgid "Main Features:"
msgstr "Ana Özellikler:"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Nodes and Classes:"
-msgstr "Aktif Sınıflar:"
+msgstr "Düğümler ve Sınıflar:"
#: editor/editor_feature_profile.cpp
msgid "File '%s' format is invalid, import aborted."
@@ -2167,7 +2163,7 @@ msgstr "varsayılan:"
#: editor/editor_help.cpp
msgid "Methods"
-msgstr "Metotlar"
+msgstr "Metodlar"
#: editor/editor_help.cpp
msgid "Theme Properties"
@@ -2464,9 +2460,8 @@ msgstr ""
"karşılanamadı."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Could not save one or more scenes!"
-msgstr "Dönüştürülmüş doku kaydedilemedi:"
+msgstr "Bir veya birden fazla sahne kaydedilemedi!"
#: editor/editor_node.cpp
msgid "Save All Scenes"
@@ -2609,10 +2604,9 @@ msgstr "Kapatmadan önce değişklikler buraya '%s' kaydedilsin mi?"
#: editor/editor_node.cpp
msgid "%s no longer exists! Please specify a new save location."
-msgstr ""
+msgstr "%s artık mevcut değil! Lütfen yeni bir kaydetme konumu belirtin."
#: editor/editor_node.cpp
-#, fuzzy
msgid ""
"The current scene has no root node, but %d modified external resource(s) "
"were saved anyway."
@@ -2621,11 +2615,12 @@ msgstr ""
"yine de kaydedildi."
#: editor/editor_node.cpp
-#, fuzzy
msgid ""
"A root node is required to save the scene. You can add a root node using the "
"Scene tree dock."
-msgstr "Sahneyi kaydedilmesi için kök düğüm gerekiyor."
+msgstr ""
+"Sahneyi kaydedilmesi için kök düğüm gerekiyor. Sahne ağacını kullanarak bir "
+"kök düğüm ekleyebilirsin."
#: editor/editor_node.cpp
msgid "Save Scene As..."
@@ -3362,9 +3357,8 @@ msgid "Merge With Existing"
msgstr "Var Olanla BirleÅŸtir"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Apply MeshInstance Transforms"
-msgstr "Animasyon Değişikliği Dönüşümü"
+msgstr "MeshInstance dönüşümlerini uygula"
#: editor/editor_node.cpp
msgid "Open & Run a Script"
@@ -3401,7 +3395,6 @@ msgid "Select"
msgstr "Seç"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Select Current"
msgstr "Geçerli Klasörü Seç"
@@ -3728,9 +3721,8 @@ msgid "Uninstall these templates."
msgstr "Bu şablonları kaldırın."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "There are no mirrors available."
-msgstr "'%s' dosyası bulunamadı."
+msgstr "Hiç mevcut ayna bulunamadı."
#: editor/export_template_manager.cpp
msgid "Retrieving the mirror list..."
@@ -4460,6 +4452,10 @@ msgid ""
"Selecting another resource in the FileSystem dock without clicking Reimport "
"first will discard changes made in the Import dock."
msgstr ""
+"Daha uygulanmamış değişiklere sahipsiniz. İçe aktarma seçeneklerinde yapılan "
+"değişiklikleri uygulamak için Yeniden İçe Aktar'a tıklayın.\n"
+"Önce Yeniden İçe Aktar'ı tıklatmadan Dosya Sisteminden başka bir kaynak "
+"seçmek, İçe Aktarma yuvasında yapılan değişiklikleri yok sayacaktır."
#: editor/import_dock.cpp
msgid "Import As:"
@@ -5595,13 +5591,13 @@ msgstr ""
"Sahneyi kaydedip tekrar deneyin."
#: editor/plugins/baked_lightmap_editor_plugin.cpp
-#, fuzzy
msgid ""
"No meshes to bake. Make sure they contain an UV2 channel and that the 'Use "
"In Baked Light' and 'Generate Lightmap' flags are on."
msgstr ""
-"Pişirilecek örüntüler yok. Örüntülerin UV2 kanalı içerdiğinden ve 'Bake "
-"Light' bayrağınının açık olduğundan emin olun."
+"Pişirilecek örüntüler yok. Örüntülerin UV2 kanalı içerdiğinden, 'Pişirilmiş "
+"Işık Kullan' ve 'Işık Haritası Oluştur' bayrağınının açık olduğundan emin "
+"olun."
#: editor/plugins/baked_lightmap_editor_plugin.cpp
msgid "Failed creating lightmap images, make sure path is writable."
@@ -5937,18 +5933,16 @@ msgstr "Kip Seç"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Drag: Rotate selected node around pivot."
-msgstr "Seçilen düğüm ya da geçişi sil."
+msgstr "Sürükle: Seçili düğümü pivot etrafında döndürün."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Alt+Drag: Move selected node."
msgstr "Alt+Sürükle: Seçili düğümü taşıyın."
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "V: Set selected node's pivot position."
-msgstr "Seçilen düğüm ya da geçişi sil."
+msgstr "V: Seçili düğümün pivot konumunu ayarlayın."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -6196,14 +6190,12 @@ msgid "Clear Pose"
msgstr "DuruÅŸu Temizle"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Add Node Here"
-msgstr "Düğüm Ekle"
+msgstr "Buraya Düğüm Ekle"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Instance Scene Here"
-msgstr "Sahne(leri) Örnekle"
+msgstr "Buraya Sahne Örnekle"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Multiply grid step by 2"
@@ -6218,49 +6210,40 @@ msgid "Pan View"
msgstr "Yatay Kaydırma Görünümü"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 3.125%"
msgstr "%3.125'e yakınlaştır"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 6.25%"
msgstr "%6,25'e yakınlaştır"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 12.5%"
msgstr "%12,5'e yakınlaştır"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 25%"
-msgstr "Uzaklaştır"
+msgstr "%25'e yakınlaştır"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 50%"
-msgstr "Uzaklaştır"
+msgstr "%50'ye yakınlaştır"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 100%"
-msgstr "Uzaklaştır"
+msgstr "%100'e yakınlaştır"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 200%"
-msgstr "Uzaklaştır"
+msgstr "%200'e yakınlaştır"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 400%"
-msgstr "Uzaklaştır"
+msgstr "%400'e yakınlaştır"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 800%"
-msgstr "Uzaklaştır"
+msgstr "%800'e yakınlaştır"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom to 1600%"
@@ -6394,7 +6377,7 @@ msgstr "Sade 0"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Flat 1"
-msgstr "Sade 1"
+msgstr "Düz 1"
#: editor/plugins/curve_editor_plugin.cpp editor/property_editor.cpp
msgid "Ease In"
@@ -6611,9 +6594,8 @@ msgstr ""
"Bu, çarpışma tespiti için en hızlı (ancak en az doğru) seçenektir."
#: editor/plugins/mesh_instance_editor_plugin.cpp
-#, fuzzy
msgid "Create Simplified Convex Collision Sibling"
-msgstr "Dışbükey Çarpışma Komşusu Oluştur"
+msgstr "Basitleştirilmiş Dışbükey Çarpışma Kardeşi Oluştur"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid ""
@@ -6630,14 +6612,14 @@ msgid "Create Multiple Convex Collision Siblings"
msgstr "Dışbükey Çarpışma Komşuları Oluştur"
#: editor/plugins/mesh_instance_editor_plugin.cpp
-#, fuzzy
msgid ""
"Creates a polygon-based collision shape.\n"
"This is a performance middle-ground between a single convex collision and a "
"polygon-based collision."
msgstr ""
-"Poligon bazlı bir çarpışma şekli oluştur.\n"
-"Bu performans açısından üstteki iki seçeneğin arasındadır."
+"Poligon tabanlı bir çarpışma şekli oluştur.\n"
+"Bu, tek bir dışbükey çarpışma ile poligon tabanlı bir çarpışma arasındaki "
+"performans orta noktasıdır."
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Outline Mesh..."
@@ -7283,29 +7265,24 @@ msgid "ResourcePreloader"
msgstr "KaynakÖnyükleyici"
#: editor/plugins/room_manager_editor_plugin.cpp
-#, fuzzy
msgid "Flip Portals"
-msgstr "Yatay Yansıt"
+msgstr "Portalları Çevir"
#: editor/plugins/room_manager_editor_plugin.cpp
-#, fuzzy
msgid "Room Generate Points"
-msgstr "Üretilen Nokta Sayısı:"
+msgstr "Oda Noktalar OluÅŸtur"
#: editor/plugins/room_manager_editor_plugin.cpp
-#, fuzzy
msgid "Generate Points"
-msgstr "Üretilen Nokta Sayısı:"
+msgstr "Noktalar OluÅŸtur"
#: editor/plugins/room_manager_editor_plugin.cpp
-#, fuzzy
msgid "Flip Portal"
-msgstr "Yatay Yansıt"
+msgstr "Portalı Çevir"
#: editor/plugins/room_manager_editor_plugin.cpp
-#, fuzzy
msgid "Occluder Set Transform"
-msgstr "Dönüşümü Temizle"
+msgstr "Engelleyici Dönüşümü Ayarla"
#: editor/plugins/room_manager_editor_plugin.cpp
msgid "Center Node"
@@ -7445,12 +7422,10 @@ msgid "Move Down"
msgstr "Aşağı Taşı"
#: editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Next Script"
msgstr "Sonraki betik"
#: editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Previous Script"
msgstr "Önceki betik"
@@ -7803,26 +7778,24 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr "Bu iskelette hiç kemik yok, alt öge olarak Kemik2D düğümleri oluştur."
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
-msgstr "Kemiklerle dinlenme duruÅŸu OluÅŸtur"
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Set Rest Pose to Bones"
msgstr "Dinlenme duruÅŸunu Kemiklere ata"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Create Rest Pose from Bones"
+msgstr "Kemiklerle dinlenme duruÅŸu OluÅŸtur"
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Skeleton2D"
msgstr "İskelet2D"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-#, fuzzy
msgid "Reset to Rest Pose"
-msgstr "Kemikleri Dinlenme DuruÅŸuna ata"
+msgstr "Dinlenme Duruşuna Sıfırla"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-#, fuzzy
msgid "Overwrite Rest Pose"
-msgstr "Üzerine Yaz"
+msgstr "Dinlenme Duruşunun Üstüne Yaz"
#: editor/plugins/skeleton_editor_plugin.cpp
msgid "Create physical bones"
@@ -7849,64 +7822,52 @@ msgid "Perspective"
msgstr "Derinlik"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Top Orthogonal"
-msgstr "Dikey"
+msgstr "Üst Dikaçılı"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Top Perspective"
-msgstr "Derinlik"
+msgstr "Üst Perspektif"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Bottom Orthogonal"
-msgstr "Dikey"
+msgstr "Alt Dikaçılı"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Bottom Perspective"
-msgstr "Derinlik"
+msgstr "Alt Perspektif"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Left Orthogonal"
-msgstr "Dikey"
+msgstr "Sol Dikaçılı"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Left Perspective"
-msgstr "Derinlik"
+msgstr "Sol Perspektif"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Right Orthogonal"
-msgstr "Dikey"
+msgstr "Sağ Dikaçılı"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Right Perspective"
-msgstr "Derinlik"
+msgstr "SaÄŸ Perspektif"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Front Orthogonal"
-msgstr "Dikey"
+msgstr "Ön Dikaçılı"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Front Perspective"
-msgstr "Derinlik"
+msgstr "Ön Perspektif"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Rear Orthogonal"
-msgstr "Dikey"
+msgstr "Arka Dikaçılı"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Rear Perspective"
-msgstr "Derinlik"
+msgstr "Arka Perspektif"
#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
#: editor/plugins/spatial_editor_plugin.cpp
@@ -8173,9 +8134,8 @@ msgstr ""
"Oyun içi performansın gösteri olarak ele alınamaz."
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Convert Rooms"
-msgstr "Şuna Dönüştür %s"
+msgstr "Odaları Dönüştür"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "XForm Dialog"
@@ -8196,9 +8156,8 @@ msgstr ""
"Yarı-açık göz: Gizmo aynı zamanda saydam yüzeylerden görünür (\"x-ray\")."
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Snap Nodes to Floor"
-msgstr "Düğümleri zemine hizala"
+msgstr "Düğümleri Zemine Yapıştır"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Couldn't find a solid floor to snap the selection to."
@@ -8213,7 +8172,6 @@ msgid "Use Snap"
msgstr "Yapışma Kullan"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Converts rooms for portal culling."
msgstr "Odaları portal ayıklama için dönüştürür."
@@ -8243,24 +8201,23 @@ msgstr "Sağdan Görünüm"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Orbit View Down"
-msgstr ""
+msgstr "Yörünge Görünümü Alt"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Orbit View Left"
-msgstr ""
+msgstr "Yörünge Görünümü Sol"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Orbit View Right"
-msgstr ""
+msgstr "Yörünge Görünümü Sağ"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Orbit View Up"
-msgstr "Önden Görünüm"
+msgstr "Yörünge Görünümü Yukarı"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Orbit View 180"
-msgstr ""
+msgstr "Yörünge Görünümü 180"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Switch Perspective/Orthogonal View"
@@ -8332,14 +8289,12 @@ msgid "View Grid"
msgstr "Izgara Görünümü"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "View Portal Culling"
-msgstr "Görüntükapısı Ayarları"
+msgstr "Portal Ayırmayı Görüntüle"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "View Occlusion Culling"
-msgstr "Görüntükapısı Ayarları"
+msgstr "Emilme Ayırmayı Görüntüle"
#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
@@ -11177,14 +11132,14 @@ msgstr ""
"` karakteri içermesi gereklidir."
#: editor/project_settings_editor.cpp
-msgid "Key "
-msgstr "Anahtar "
-
-#: editor/project_settings_editor.cpp
msgid "Physical Key"
msgstr "Fiziksel Anahtar"
#: editor/project_settings_editor.cpp
+msgid "Key "
+msgstr "Anahtar "
+
+#: editor/project_settings_editor.cpp
msgid "Joy Button"
msgstr "Oyun Kolu Düğmesi"
@@ -11379,14 +11334,12 @@ msgid "Remove Translation"
msgstr "Çeviriyi Kaldır"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Translation Resource Remap: Add %d Path(s)"
-msgstr "Kaynak Yeniden EÅŸleme Ekle EÅŸle"
+msgstr "Çeviri Kaynağı Yeniden Eşlemesi: %d Yol(lar) Ekle"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Translation Resource Remap: Add %d Remap(s)"
-msgstr "Kaynak Yeniden EÅŸleme Ekle EÅŸle"
+msgstr "Çeviri Kaynağı Yeniden Eşlemesi: %d Yeniden Haritalama Ekle"
#: editor/project_settings_editor.cpp
msgid "Change Resource Remap Language"
@@ -12522,24 +12475,20 @@ msgid "Change Ray Shape Length"
msgstr "Işın Şeklinin Uzunluğunu Değiştir"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Set Room Point Position"
-msgstr "Eğri Noktası Konumu Ayarla"
+msgstr "Oda Noktası Konumunu Ayarla"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Set Portal Point Position"
-msgstr "Eğri Noktası Konumu Ayarla"
+msgstr "Portal Noktası Konumunu Ayarla"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Set Occluder Sphere Radius"
-msgstr "Silindir Şekli Yarıçapını Değiştir"
+msgstr "Engelleyici Silindir Yarıçapını Ayarla"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Set Occluder Sphere Position"
-msgstr "EÄŸriyi Konumda Ayarla"
+msgstr "Engelleyici Küre Konumunu Ayarla"
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
@@ -12650,14 +12599,12 @@ msgid "Object can't provide a length."
msgstr "Nesne bir uzunluk saÄŸlayamaz."
#: modules/gltf/editor_scene_exporter_gltf_plugin.cpp
-#, fuzzy
msgid "Export Mesh GLTF2"
-msgstr "Örüntü Kütüphanesini Dışa Aktar"
+msgstr "Örüntüyü GLTF2 Olarak Dışa Aktar"
#: modules/gltf/editor_scene_exporter_gltf_plugin.cpp
-#, fuzzy
msgid "Export GLTF..."
-msgstr "Dışa Aktar..."
+msgstr "GLTF Dışa Aktar..."
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
@@ -12700,9 +12647,8 @@ msgid "GridMap Paint"
msgstr "IzgaraHaritası Boyama"
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "GridMap Selection"
-msgstr "IzgaraHaritası Seçimi Doldur"
+msgstr "GridMap Seçimi"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Grid Map"
@@ -12825,9 +12771,8 @@ msgid "Class name can't be a reserved keyword"
msgstr "Sınıf ismi ayrılmış anahtar kelime olamaz"
#: modules/mono/csharp_script.cpp
-#, fuzzy
msgid "Build Solution"
-msgstr "Seçimi Doldur"
+msgstr "Solüsyonu İnşa Et"
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
@@ -12958,14 +12903,12 @@ msgid "Add Output Port"
msgstr "Çıkış Portu Ekle"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Change Port Type"
-msgstr "Türü Değiştir"
+msgstr "Bağlantı Noktası Türünü Değiştir"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Change Port Name"
-msgstr "Giriş noktası adını değiştir"
+msgstr "Bağlantı Noktası Adını Değiştir"
#: modules/visual_script/visual_script_editor.cpp
msgid "Override an existing built-in function."
@@ -13080,9 +13023,8 @@ msgid "Add Preload Node"
msgstr "Önyüklenen Düğüm Ekle"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Add Node(s)"
-msgstr "Düğüm Ekle"
+msgstr "Düğüm(ler) Ekle"
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Node(s) From Tree"
@@ -13346,33 +13288,28 @@ msgid "Running on %s"
msgstr "%s üzerinde çalışıyor"
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Exporting APK..."
-msgstr "Tümünü Dışa Aktarma"
+msgstr "APK dışarı aktarılıyor..."
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Uninstalling..."
-msgstr "Kaldır"
+msgstr "Kaldırılıyor..."
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Installing to device, please wait..."
-msgstr "Yükleniyor, lütfen bekleyin..."
+msgstr "Cihaza yükleniyor, lütfen bekleyin..."
#: platform/android/export/export_plugin.cpp
msgid "Could not install to device: %s"
msgstr "Cihaza yüklenemedi: %s"
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Running on device..."
-msgstr "Çalışan Özel Betik..."
+msgstr "Cihazda çalışıyor..."
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Could not execute on device."
-msgstr "Klasör oluşturulamadı."
+msgstr "Cihazda yürütülemedi."
#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
@@ -13497,27 +13434,24 @@ msgid "Signing release %s..."
msgstr "%s sürümü imzalanıyor..."
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Could not find keystore, unable to export."
-msgstr "Dışa aktarma için şablon açılamadı:"
+msgstr "Anahtar deposu bulunamadı, dışa aktarılamadı."
#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr "'apksigner', #%d hatasıyla döndürüldü"
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Verifying %s..."
-msgstr "Ekliyor %s..."
+msgstr "Doğrulanıyor %s..."
#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr "%s için 'apksigner' doğrulaması başarısız oldu."
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Exporting for Android"
-msgstr "Tümünü Dışa Aktarma"
+msgstr "Android için dışa aktarılıyor"
#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
@@ -13596,14 +13530,12 @@ msgstr ""
"için gradle proje dizinini kontrol edin."
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Package not found: %s"
-msgstr "Animasyon bulunamadı: '%s'"
+msgstr "Paket bulunamadı: %s"
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Creating APK..."
-msgstr "Konturlar oluÅŸturuluyor..."
+msgstr "APK oluÅŸturuluyor..."
#: platform/android/export/export_plugin.cpp
msgid ""
@@ -13625,14 +13557,12 @@ msgstr ""
"aktarma ön ayarındaki eksik mimarilerin işaretini kaldırın."
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Adding files..."
-msgstr "Ekliyor %s..."
+msgstr "Dosyalar ekleniyor..."
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Could not export project files"
-msgstr "Dosya yazılamadı:"
+msgstr "Proje dosyaları dışa aktarılamadı"
#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
@@ -13687,29 +13617,24 @@ msgid "Could not write file:"
msgstr "Dosya yazılamadı:"
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Could not read file:"
-msgstr "Dosya yazılamadı:"
+msgstr "Dosya okunamadı:"
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Could not read HTML shell:"
-msgstr "Özel HTML çekirdeği okunamadı:"
+msgstr "HTML kabuğu okunamadı:"
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Could not create HTTP server directory:"
-msgstr "Klasör oluşturulamadı."
+msgstr "HTTP sunucu klasörü oluşturulamadı:"
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Error starting HTTP server:"
-msgstr "Sahne kaydedilirken hata."
+msgstr "HTTP sunucusu başlatılırken hata:"
#: platform/osx/export/export.cpp
-#, fuzzy
msgid "Invalid bundle identifier:"
-msgstr "Geçersiz Tanımlayıcı:"
+msgstr "Geçersiz paket tanımlayıcısı:"
#: platform/osx/export/export.cpp
msgid "Notarization: code signing required."
@@ -14429,9 +14354,8 @@ msgid "Animation not found: '%s'"
msgstr "Animasyon bulunamadı: '%s'"
#: scene/animation/animation_player.cpp
-#, fuzzy
msgid "Anim Apply Reset"
-msgstr "Animasyonu Sıfırla"
+msgstr "Animasyon Sıfırlamayı Uygula"
#: scene/animation/animation_tree.cpp
msgid "In node '%s', invalid animation: '%s'."
@@ -14588,6 +14512,10 @@ msgid ""
"Consider using a script's process loop instead of relying on a Timer for "
"very low wait times."
msgstr ""
+"Çok düşük zamanlayıcı bekleme süreleri (< 0.05 saniye) kare hızına bağlı "
+"olarak, olması gerekenden farklı çalışabilir.\n"
+"Çok düşük bekleme süreleri için Timer'a güvenmektense, bir betiğin process "
+"döngüsünü kullanmayı tercih edin."
#: scene/main/viewport.cpp
msgid ""
@@ -14602,12 +14530,12 @@ msgstr ""
"bir RenderTarget yap ve dahili dokusunu herhangi bir düğüme ata."
#: scene/main/viewport.cpp
-#, fuzzy
msgid ""
"The Viewport size must be greater than or equal to 2 pixels on both "
"dimensions to render anything."
msgstr ""
-"Herhangi bir şeyi işlemek için görüntükapısı boyutu 0'dan büyük olmalıdır."
+"Herhangi bir şeyi işlemek için her iki boyutta da görüntükapısı boyutu 2 "
+"pikselden büyük ya da buna eşit olmalıdır."
#: scene/resources/occluder_shape.cpp
msgid "OccluderShapeSphere Set Spheres"
@@ -14634,9 +14562,8 @@ msgid "Invalid comparison function for that type."
msgstr "Bu tür için geçersiz karşılaştırma işlevi."
#: servers/visual/shader_language.cpp
-#, fuzzy
msgid "Varying may not be assigned in the '%s' function."
-msgstr "varyings yalnızca vertex işlevinde atanabilir."
+msgstr "'%s' işlevinde farklılıklar atanamayabilir."
#: servers/visual/shader_language.cpp
msgid ""
diff --git a/editor/translations/tt.po b/editor/translations/tt.po
index fc5064a395..b9631ca8b4 100644
--- a/editor/translations/tt.po
+++ b/editor/translations/tt.po
@@ -7415,11 +7415,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
@@ -10593,11 +10593,11 @@ msgid ""
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Key "
+msgid "Physical Key"
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Physical Key"
+msgid "Key "
msgstr ""
#: editor/project_settings_editor.cpp
diff --git a/editor/translations/tzm.po b/editor/translations/tzm.po
index 1911f0fde6..b75bb26463 100644
--- a/editor/translations/tzm.po
+++ b/editor/translations/tzm.po
@@ -7413,11 +7413,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
@@ -10591,11 +10591,11 @@ msgid ""
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Key "
+msgid "Physical Key"
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Physical Key"
+msgid "Key "
msgstr ""
#: editor/project_settings_editor.cpp
diff --git a/editor/translations/uk.po b/editor/translations/uk.po
index db324bbc2c..401f0fa006 100644
--- a/editor/translations/uk.po
+++ b/editor/translations/uk.po
@@ -7762,14 +7762,14 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr "У цього каркаÑа немає кіÑток, Ñтворіть хоч ÑкіÑÑŒ дочірні вузли Bone2D."
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
-msgstr "Створити вільну позу з кіÑток"
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Set Rest Pose to Bones"
msgstr "Створити вільну позу Ð´Ð»Ñ ÐºÑ–Ñток"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Create Rest Pose from Bones"
+msgstr "Створити вільну позу з кіÑток"
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Skeleton2D"
msgstr "ПлоÑкий каркаÑ"
@@ -11131,14 +11131,14 @@ msgstr ""
"бути принаймні один Ñимвол «/»."
#: editor/project_settings_editor.cpp
-msgid "Key "
-msgstr "Клавіша "
-
-#: editor/project_settings_editor.cpp
msgid "Physical Key"
msgstr "Фізична клавіша"
#: editor/project_settings_editor.cpp
+msgid "Key "
+msgstr "Клавіша "
+
+#: editor/project_settings_editor.cpp
msgid "Joy Button"
msgstr "Кнопка джойÑтика"
diff --git a/editor/translations/ur_PK.po b/editor/translations/ur_PK.po
index b192d4b651..c557fa7dfc 100644
--- a/editor/translations/ur_PK.po
+++ b/editor/translations/ur_PK.po
@@ -7604,11 +7604,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
@@ -10910,11 +10910,11 @@ msgid ""
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Key "
+msgid "Physical Key"
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Physical Key"
+msgid "Key "
msgstr ""
#: editor/project_settings_editor.cpp
diff --git a/editor/translations/vi.po b/editor/translations/vi.po
index e1aa97d317..4e1718101e 100644
--- a/editor/translations/vi.po
+++ b/editor/translations/vi.po
@@ -7716,14 +7716,14 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr "Bộ xương không có xương, tạo một số nút Bone2D."
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
-msgstr "Tạo tư thế nghỉ từ Xương"
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Set Rest Pose to Bones"
msgstr "Äặt tư thế nghỉ cho Xương"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Create Rest Pose from Bones"
+msgstr "Tạo tư thế nghỉ từ Xương"
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Skeleton2D"
msgstr "Skeleton2D"
@@ -11117,14 +11117,14 @@ msgstr ""
"một ký tự '/'."
#: editor/project_settings_editor.cpp
-msgid "Key "
-msgstr "Khoá "
-
-#: editor/project_settings_editor.cpp
msgid "Physical Key"
msgstr ""
#: editor/project_settings_editor.cpp
+msgid "Key "
+msgstr "Khoá "
+
+#: editor/project_settings_editor.cpp
msgid "Joy Button"
msgstr ""
diff --git a/editor/translations/zh_CN.po b/editor/translations/zh_CN.po
index 82159d534e..51e1b6212b 100644
--- a/editor/translations/zh_CN.po
+++ b/editor/translations/zh_CN.po
@@ -87,7 +87,7 @@ msgstr ""
"Project-Id-Version: Chinese (Simplified) (Godot Engine)\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: 2018-01-20 12:15+0200\n"
-"PO-Revision-Date: 2021-10-21 10:31+0000\n"
+"PO-Revision-Date: 2021-11-11 16:02+0000\n"
"Last-Translator: Haoyu Qiu <timothyqiu32@gmail.com>\n"
"Language-Team: Chinese (Simplified) <https://hosted.weblate.org/projects/"
"godot-engine/godot/zh_Hans/>\n"
@@ -96,7 +96,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 4.9-dev\n"
+"X-Generator: Weblate 4.9.1-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -5591,7 +5591,7 @@ msgstr "创建垂直水平å‚考线"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Set CanvasItem \"%s\" Pivot Offset to (%d, %d)"
-msgstr "å°† CanvasItem “%sâ€çš„ Pivot Offset 设为 (%d, %d)"
+msgstr "å°† CanvasItem“%sâ€çš„ Pivot Offset 设为 (%d, %d)"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Rotate %d CanvasItems"
@@ -5599,19 +5599,19 @@ msgstr "旋转 %d 个 CanvasItem"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Rotate CanvasItem \"%s\" to %d degrees"
-msgstr "旋转 CanvasItem “%s†为 %d 度"
+msgstr "å°† CanvasItem“%sâ€çš„æ—‹è½¬è®¾ä¸º %d 度"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Move CanvasItem \"%s\" Anchor"
-msgstr "移动 CanvasItem “%s†的锚点"
+msgstr "移动 CanvasItem“%sâ€çš„锚点"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Scale Node2D \"%s\" to (%s, %s)"
-msgstr "缩放 Node2D “%s†为 (%s, %s)"
+msgstr "å°† Node2D“%sâ€ç¼©æ”¾ä¸º (%s, %s)"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Resize Control \"%s\" to (%d, %d)"
-msgstr "缩放 Control “%s†为 (%d, %d)"
+msgstr "å°† Control“%sâ€çš„大尿›´æ”¹ä¸º (%d, %d)"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Scale %d CanvasItems"
@@ -5619,7 +5619,7 @@ msgstr "缩放 %d 个 CanvasItem"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Scale CanvasItem \"%s\" to (%s, %s)"
-msgstr "缩放 CanvasItem “%s†为 (%s, %s)"
+msgstr "å°† CanvasItem“%sâ€ç¼©æ”¾ä¸º (%s, %s)"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Move %d CanvasItems"
@@ -5627,7 +5627,7 @@ msgstr "移动 %s 个 CanvasItem"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Move CanvasItem \"%s\" to (%d, %d)"
-msgstr "移动 CanvasItem “%s†至 (%d, %d)"
+msgstr "移动 CanvasItem“%sâ€è‡³ (%d, %d)"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -7647,14 +7647,14 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr "该骨架没有骨骼绑定,请创建一些 Bone2D 骨骼å­èŠ‚ç‚¹ã€‚"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
-msgstr "从骨骼创建放æ¾å§¿åŠ¿"
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Set Rest Pose to Bones"
msgstr "将放æ¾å§¿åŠ¿è®¾ç½®åˆ°éª¨éª¼"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Create Rest Pose from Bones"
+msgstr "从骨骼创建放æ¾å§¿åŠ¿"
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Skeleton2D"
msgstr "2D 骨骼节点"
@@ -10934,14 +10934,14 @@ msgstr ""
"å¦‚æžœè¦æ ¹æ®å称和完整路径筛选,æœç´¢å†…容应至少包å«ä¸€ä¸ªâ€œ/â€å­—符。"
#: editor/project_settings_editor.cpp
-msgid "Key "
-msgstr "按键 "
-
-#: editor/project_settings_editor.cpp
msgid "Physical Key"
msgstr "ç‰©ç†æŒ‰é”®"
#: editor/project_settings_editor.cpp
+msgid "Key "
+msgstr "按键 "
+
+#: editor/project_settings_editor.cpp
msgid "Joy Button"
msgstr "手柄按键"
diff --git a/editor/translations/zh_HK.po b/editor/translations/zh_HK.po
index b3ac6dcf79..a3c6a8fa3d 100644
--- a/editor/translations/zh_HK.po
+++ b/editor/translations/zh_HK.po
@@ -7976,15 +7976,15 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Set Rest Pose to Bones"
+msgstr ""
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
#, fuzzy
msgid "Create Rest Pose from Bones"
msgstr "é‹è¡Œå ´æ™¯"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
-msgstr ""
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Skeleton2D"
msgstr ""
@@ -11395,11 +11395,11 @@ msgid ""
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Key "
+msgid "Physical Key"
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Physical Key"
+msgid "Key "
msgstr ""
#: editor/project_settings_editor.cpp
diff --git a/editor/translations/zh_TW.po b/editor/translations/zh_TW.po
index 6ec9a2671a..a251712cb1 100644
--- a/editor/translations/zh_TW.po
+++ b/editor/translations/zh_TW.po
@@ -26,13 +26,14 @@
# BinotaLIU <me@binota.org>, 2020, 2021.
# MintSoda <lionlxh@qq.com>, 2020.
# meowmeowmeowcat <meowmeowcat1211@gmail.com>, 2021.
+# anthonychen <anton1554970211@126.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-07-13 06:13+0000\n"
-"Last-Translator: meowmeowmeowcat <meowmeowcat1211@gmail.com>\n"
+"PO-Revision-Date: 2021-11-11 16:02+0000\n"
+"Last-Translator: anthonychen <anton1554970211@126.com>\n"
"Language-Team: Chinese (Traditional) <https://hosted.weblate.org/projects/"
"godot-engine/godot/zh_Hant/>\n"
"Language: zh_TW\n"
@@ -40,7 +41,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 4.7.2-dev\n"
+"X-Generator: Weblate 4.9.1-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -388,13 +389,11 @@ msgstr "æ’入動畫"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "node '%s'"
-msgstr "無法開啟 \"%s\"。"
+msgstr "無法開啟 \"%s\""
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "animation"
msgstr "å‹•ç•«"
@@ -404,7 +403,6 @@ msgstr "AnimationPlayer ä¸èƒ½æ’­æ”¾è‡ªå·±ï¼Œåªå¯æ’­æ”¾å…¶ä»– Player。"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "property '%s'"
msgstr "屬性「%sã€ä¸å­˜åœ¨ã€‚"
@@ -632,7 +630,6 @@ msgid "Use Bezier Curves"
msgstr "使用è²èŒ²æ›²ç·š"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Create RESET Track(s)"
msgstr "貼上關éµç•«æ ¼"
@@ -977,7 +974,7 @@ msgstr "找ä¸åˆ°èˆ‡ã€Œ%sã€ç›¸é—œçš„çµæžœã€‚"
#: editor/create_dialog.cpp editor/property_selector.cpp
msgid "No description available for %s."
-msgstr ""
+msgstr "缺少å°%sçš„å¯ç”¨è§£é‡‹ã€‚"
#: editor/create_dialog.cpp editor/editor_file_dialog.cpp
#: editor/filesystem_dock.cpp
@@ -7689,14 +7686,14 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr "此骨架未包å«éª¨éª¼ï¼Œè«‹å»ºç«‹ä¸€äº›å­ Bone2D 節點。"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
-msgstr "è‡ªéª¨éª¼å»ºç«‹éœæ­¢å§¿å‹¢"
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Set Rest Pose to Bones"
msgstr "è¨­å®šéœæ­¢å§¿å‹¢è‡³éª¨éª¼"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Create Rest Pose from Bones"
+msgstr "è‡ªéª¨éª¼å»ºç«‹éœæ­¢å§¿å‹¢"
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Skeleton2D"
msgstr "Sekeleton2D"
@@ -11092,14 +11089,14 @@ msgstr ""
"è‹¥è¦ä»¥åç¨±èˆ‡å®Œæ•´è·¯å¾‘ä¾†éŽæ¿¾å°ˆæ¡ˆï¼Œæœå°‹å…§å®¹æ‡‰è‡³å°‘包å«ä¸€å€‹ã€Œ/ã€å­—元。"
#: editor/project_settings_editor.cpp
-msgid "Key "
-msgstr "æŒ‰éµ "
-
-#: editor/project_settings_editor.cpp
msgid "Physical Key"
msgstr ""
#: editor/project_settings_editor.cpp
+msgid "Key "
+msgstr "æŒ‰éµ "
+
+#: editor/project_settings_editor.cpp
msgid "Joy Button"
msgstr "控制器按鈕"
diff --git a/glsl_builders.py b/glsl_builders.py
index 57aaed5f9f..0926212e50 100644
--- a/glsl_builders.py
+++ b/glsl_builders.py
@@ -29,6 +29,10 @@ def include_file_in_rd_header(filename, header_data, depth):
while line:
+ index = line.find("//")
+ if index != -1:
+ line = line[:index]
+
if line.find("#[vertex]") != -1:
header_data.reading = "vertex"
line = fs.readline()
@@ -55,7 +59,14 @@ def include_file_in_rd_header(filename, header_data, depth):
import os.path
- included_file = os.path.relpath(os.path.dirname(filename) + "/" + includeline)
+ included_file = ""
+
+ if includeline.startswith("thirdparty/"):
+ included_file = os.path.relpath(includeline)
+
+ else:
+ included_file = os.path.relpath(os.path.dirname(filename) + "/" + includeline)
+
if not included_file in header_data.vertex_included_files and header_data.reading == "vertex":
header_data.vertex_included_files += [included_file]
if include_file_in_rd_header(included_file, header_data, depth + 1) is None:
diff --git a/main/main.cpp b/main/main.cpp
index fe0f2693e4..b4fbc1929c 100644
--- a/main/main.cpp
+++ b/main/main.cpp
@@ -57,7 +57,6 @@
#include "main/performance.h"
#include "main/splash.gen.h"
#include "main/splash_editor.gen.h"
-#include "modules/modules_enabled.gen.h"
#include "modules/register_module_types.h"
#include "platform/register_platform_apis.h"
#include "scene/main/scene_tree.h"
@@ -81,16 +80,16 @@
#endif
#ifdef TOOLS_ENABLED
-
#include "editor/doc_data_class_path.gen.h"
#include "editor/doc_tools.h"
#include "editor/editor_node.h"
#include "editor/editor_settings.h"
#include "editor/progress_dialog.h"
#include "editor/project_manager.h"
-
#endif
+#include "modules/modules_enabled.gen.h" // For mono.
+
/* Static members */
// Singletons
@@ -1137,7 +1136,7 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
FileAccess::make_default<FileAccessNetwork>(FileAccess::ACCESS_RESOURCES);
}
- if (globals->setup(project_path, main_pack, upwards) == OK) {
+ if (globals->setup(project_path, main_pack, upwards, editor) == OK) {
#ifdef TOOLS_ENABLED
found_project = true;
#endif
@@ -1275,14 +1274,14 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
register_core_extensions(); //before display
// possibly be worth changing the default from vulkan to something lower spec,
// for the project manager, depending on how smooth the fallback is.
- GLOBAL_DEF_RST("rendering/driver/driver_name", "Vulkan");
+ GLOBAL_DEF_RST("rendering/driver/driver_name", "vulkan");
// this list is hard coded, which makes it more difficult to add new backends.
// can potentially be changed to more of a plugin system at a later date.
ProjectSettings::get_singleton()->set_custom_property_info("rendering/driver/driver_name",
PropertyInfo(Variant::STRING,
"rendering/driver/driver_name",
- PROPERTY_HINT_ENUM, "Vulkan,OpenGL"));
+ PROPERTY_HINT_ENUM, "vulkan,opengl3"));
// if not set on the command line
if (rendering_driver == "") {
@@ -1701,9 +1700,10 @@ Error Main::setup2(Thread::ID p_main_tid_override) {
RenderingServer::get_singleton()->set_default_clear_color(clear);
if (show_logo) { //boot logo!
- String boot_logo_path = GLOBAL_DEF("application/boot_splash/image", String());
- bool boot_logo_scale = GLOBAL_DEF("application/boot_splash/fullsize", true);
- bool boot_logo_filter = GLOBAL_DEF("application/boot_splash/use_filter", true);
+ const bool boot_logo_image = GLOBAL_DEF("application/boot_splash/show_image", true);
+ const String boot_logo_path = String(GLOBAL_DEF("application/boot_splash/image", String())).strip_edges();
+ const bool boot_logo_scale = GLOBAL_DEF("application/boot_splash/fullsize", true);
+ const bool boot_logo_filter = GLOBAL_DEF("application/boot_splash/use_filter", true);
ProjectSettings::get_singleton()->set_custom_property_info("application/boot_splash/image",
PropertyInfo(Variant::STRING,
"application/boot_splash/image",
@@ -1711,14 +1711,19 @@ Error Main::setup2(Thread::ID p_main_tid_override) {
Ref<Image> boot_logo;
- boot_logo_path = boot_logo_path.strip_edges();
-
- if (boot_logo_path != String()) {
- boot_logo.instantiate();
- Error load_err = ImageLoader::load_image(boot_logo_path, boot_logo);
- if (load_err) {
- ERR_PRINT("Non-existing or invalid boot splash at '" + boot_logo_path + "'. Loading default splash.");
+ if (boot_logo_image) {
+ if (boot_logo_path != String()) {
+ boot_logo.instantiate();
+ Error load_err = ImageLoader::load_image(boot_logo_path, boot_logo);
+ if (load_err) {
+ ERR_PRINT("Non-existing or invalid boot splash at '" + boot_logo_path + "'. Loading default splash.");
+ }
}
+ } else {
+ // Create a 1×1 transparent image. This will effectively hide the splash image.
+ boot_logo.instantiate();
+ boot_logo->create(1, 1, false, Image::FORMAT_RGBA8);
+ boot_logo->set_pixel(0, 0, Color(0, 0, 0, 0));
}
#if defined(TOOLS_ENABLED) && !defined(NO_EDITOR_SPLASH)
@@ -2050,9 +2055,7 @@ bool Main::start() {
GLOBAL_DEF("mono/debugger_agent/wait_timeout", 3000);
GLOBAL_DEF("mono/profiler/args", "log:calls,alloc,sample,output=output.mlpd");
GLOBAL_DEF("mono/profiler/enabled", false);
- GLOBAL_DEF("mono/unhandled_exception_policy", 0);
- // From editor/csharp_project.cpp.
- GLOBAL_DEF("mono/project/auto_update_project", true);
+ GLOBAL_DEF("mono/runtime/unhandled_exception_policy", 0);
#endif
DocTools doc;
@@ -2689,10 +2692,10 @@ bool Main::iteration() {
if (frame > 1000000) {
if (editor || project_manager) {
if (print_fps) {
- print_line(vformat("Editor FPS: %d (%s mspf)", frames, rtos(1000.0 / frames).pad_decimals(1)));
+ print_line(vformat("Editor FPS: %d (%s mspf)", frames, rtos(1000.0 / frames).pad_decimals(2)));
}
} else if (GLOBAL_GET("debug/settings/stdout/print_fps") || print_fps) {
- print_line(vformat("Project FPS: %d (%s mspf)", frames, rtos(1000.0 / frames).pad_decimals(1)));
+ print_line(vformat("Project FPS: %d (%s mspf)", frames, rtos(1000.0 / frames).pad_decimals(2)));
}
Engine::get_singleton()->_fps = frames;
@@ -2848,9 +2851,8 @@ void Main::cleanup(bool p_force) {
if (OS::get_singleton()->is_restart_on_exit_set()) {
//attempt to restart with arguments
- String exec = OS::get_singleton()->get_executable_path();
List<String> args = OS::get_singleton()->get_restart_on_exit_arguments();
- OS::get_singleton()->create_process(exec, args);
+ OS::get_singleton()->create_instance(args);
OS::get_singleton()->set_restart_on_exit(false, List<String>()); //clear list (uses memory)
}
diff --git a/methods.py b/methods.py
index b2eb7b7c77..3331e159c7 100644
--- a/methods.py
+++ b/methods.py
@@ -105,6 +105,8 @@ def update_version(module_version_string=""):
f.write('#define VERSION_MODULE_CONFIG "' + str(version.module_config) + module_version_string + '"\n')
f.write("#define VERSION_YEAR " + str(version.year) + "\n")
f.write('#define VERSION_WEBSITE "' + str(version.website) + '"\n')
+ f.write('#define VERSION_DOCS_BRANCH "' + str(version.docs) + '"\n')
+ f.write('#define VERSION_DOCS_URL "https://docs.godotengine.org/en/" VERSION_DOCS_BRANCH\n')
f.write("#endif // VERSION_GENERATED_GEN_H\n")
f.close()
diff --git a/misc/dist/html/editor.html b/misc/dist/html/editor.html
index 69e267f665..8b077a5725 100644
--- a/misc/dist/html/editor.html
+++ b/misc/dist/html/editor.html
@@ -281,8 +281,7 @@
<label for="videoMode" style="margin-right: 1rem">Video driver:</label>
<select id="videoMode">
<option value="" selected="selected">Auto</option>
- <option value="GLES2">WebGL</option>
- <option value="GLES3">WebGL 2</option>
+ <option value="opengl3">WebGL 2</option>
</select>
<br />
<br />
@@ -562,8 +561,9 @@
const is_project_manager = args.filter(function(v) { return v == '--project-manager' }).length != 0;
const is_game = !is_editor && !is_project_manager;
if (video_driver) {
- args.push('--video-driver', video_driver);
+ args.push('--rendering-driver', video_driver);
}
+
if (is_game) {
if (game) {
console.error("A game is already running. Close it first");
@@ -651,9 +651,9 @@
selectVideoMode();
showTab('editor');
setLoaderEnabled(false);
- const args = ['--project-manager'];
+ const args = ['--project-manager', '--single-window'];
if (video_driver) {
- args.push('--video-driver', video_driver);
+ args.push('--rendering-driver', video_driver);
}
editor.start({'args': args, 'persistentDrops': true}).then(function() {
setStatusMode('hidden');
diff --git a/misc/dist/osx_tools.app/Contents/Resources/af.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/af.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/af.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/ar.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/ar.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/ar.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/az.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/az.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/az.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/bg.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/bg.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/bg.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/bn.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/bn.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/bn.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/br.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/br.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/br.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/ca.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/ca.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/ca.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/cs.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/cs.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/cs.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/da.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/da.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/da.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/de.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/de.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/de.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/el.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/el.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/el.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/eo.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/eo.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/eo.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/es.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/es.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/es.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/es_AR.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/es_AR.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/es_AR.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/et.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/et.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/et.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/eu.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/eu.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/eu.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/fa.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/fa.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/fa.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/fi.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/fi.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/fi.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/fil.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/fil.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/fil.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/fr.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/fr.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/fr.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/ga.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/ga.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/ga.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/gl.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/gl.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/gl.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/he.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/he.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/he.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/hi.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/hi.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/hi.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/hr.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/hr.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/hr.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/hu.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/hu.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/hu.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/id.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/id.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/id.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/is.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/is.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/is.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/it.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/it.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/it.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/ja.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/ja.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/ja.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/ka.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/ka.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/ka.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/km.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/km.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/km.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/ko.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/ko.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/ko.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/lt.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/lt.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/lt.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/lv.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/lv.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/lv.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/mi.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/mi.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/mi.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/mk.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/mk.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/mk.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/ml.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/ml.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/ml.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/mr.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/mr.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/mr.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/ms.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/ms.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/ms.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/nb.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/nb.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/nb.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/nl.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/nl.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/nl.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/or.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/or.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/or.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/pl.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/pl.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/pl.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/pt.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/pt.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/pt.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/pt_BR.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/pt_BR.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/pt_BR.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/ro.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/ro.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/ro.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/ru.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/ru.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/ru.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/si.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/si.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/si.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/sk.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/sk.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/sk.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/sl.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/sl.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/sl.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/sq.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/sq.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/sq.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/sr-Cyrl.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/sr-Cyrl.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/sr-Cyrl.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/sr-Latn.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/sr-Latn.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/sr-Latn.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/sv.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/sv.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/sv.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/ta.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/ta.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/ta.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/te.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/te.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/te.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/th.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/th.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/th.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/tr.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/tr.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/tr.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/tt.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/tt.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/tt.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/tzm.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/tzm.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/tzm.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/uk.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/uk.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/uk.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/ur_PK.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/ur_PK.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/ur_PK.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/vi.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/vi.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/vi.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/zh_CN.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/zh_CN.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/zh_CN.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/zh_HK.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/zh_HK.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/zh_HK.lproj/InfoPlist.strings
diff --git a/misc/dist/osx_tools.app/Contents/Resources/zh_TW.lproj/InfoPlist.strings b/misc/dist/osx_tools.app/Contents/Resources/zh_TW.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/zh_TW.lproj/InfoPlist.strings
diff --git a/misc/hooks/README.md b/misc/hooks/README.md
index e420c6cb5c..8732237244 100644
--- a/misc/hooks/README.md
+++ b/misc/hooks/README.md
@@ -28,7 +28,7 @@ so they should work out of the box on Linux/macOS.
#### Windows
##### clang-format
-- Download LLVM for Windows (version 8 or later) from
+- Download LLVM for Windows (version 13 or later) from
<https://releases.llvm.org/download.html>
- Make sure LLVM is added to the `PATH` during installation
diff --git a/misc/hooks/pre-commit-black b/misc/hooks/pre-commit-black
index 76d97294da..8e22e6068e 100755
--- a/misc/hooks/pre-commit-black
+++ b/misc/hooks/pre-commit-black
@@ -14,7 +14,7 @@ DELETE_OLD_PATCHES=false
# File types to parse.
FILE_NAMES="SConstruct SCsub"
-FILE_EXTS="py"
+FILE_EXTS=".py"
# Use pygmentize instead of cat to parse diff with highlighting.
# Install it with `pip install pygments` (Linux) or `easy_install Pygments` (Mac)
diff --git a/modules/bullet/area_bullet.cpp b/modules/bullet/area_bullet.cpp
index c3bd84c329..10a71d65df 100644
--- a/modules/bullet/area_bullet.cpp
+++ b/modules/bullet/area_bullet.cpp
@@ -59,8 +59,8 @@ AreaBullet::AreaBullet() :
AreaBullet::~AreaBullet() {
// signal are handled by godot, so just clear without notify
- for (int i = overlappingObjects.size() - 1; 0 <= i; --i) {
- overlappingObjects[i].object->on_exit_area(this);
+ for (int i = 0; i < overlapping_shapes.size(); i++) {
+ overlapping_shapes[i].other_object->on_exit_area(this);
}
}
@@ -70,89 +70,140 @@ void AreaBullet::dispatch_callbacks() {
}
isScratched = false;
- // Reverse order because I've to remove EXIT objects
- for (int i = overlappingObjects.size() - 1; 0 <= i; --i) {
- OverlappingObjectData &otherObj = overlappingObjects.write[i];
+ // Reverse order so items can be removed.
+ for (int i = overlapping_shapes.size() - 1; i >= 0; i--) {
+ OverlappingShapeData &overlapping_shape = overlapping_shapes.write[i];
- switch (otherObj.state) {
+ switch (overlapping_shape.state) {
case OVERLAP_STATE_ENTER:
- otherObj.state = OVERLAP_STATE_INSIDE;
- call_event(otherObj.object, PhysicsServer3D::AREA_BODY_ADDED);
- otherObj.object->on_enter_area(this);
+ overlapping_shape.state = OVERLAP_STATE_INSIDE;
+ call_event(overlapping_shape, PhysicsServer3D::AREA_BODY_ADDED);
+ if (_overlapping_shape_count(overlapping_shape.other_object) == 1) {
+ // This object's first shape being added.
+ overlapping_shape.other_object->on_enter_area(this);
+ }
break;
case OVERLAP_STATE_EXIT:
- call_event(otherObj.object, PhysicsServer3D::AREA_BODY_REMOVED);
- otherObj.object->on_exit_area(this);
- overlappingObjects.remove(i); // Remove after callback
+ call_event(overlapping_shape, PhysicsServer3D::AREA_BODY_REMOVED);
+ if (_overlapping_shape_count(overlapping_shape.other_object) == 1) {
+ // This object's last shape being removed.
+ overlapping_shape.other_object->on_exit_area(this);
+ }
+ overlapping_shapes.remove_at(i); // Remove after callback
break;
+ case OVERLAP_STATE_INSIDE: {
+ if (overlapping_shape.other_object->getType() == TYPE_RIGID_BODY) {
+ RigidBodyBullet *body = static_cast<RigidBodyBullet *>(overlapping_shape.other_object);
+ body->scratch_space_override_modificator();
+ }
+ break;
+ }
case OVERLAP_STATE_DIRTY:
- case OVERLAP_STATE_INSIDE:
break;
}
}
}
-void AreaBullet::call_event(CollisionObjectBullet *p_otherObject, PhysicsServer3D::AreaBodyStatus p_status) {
- InOutEventCallback &event = eventsCallbacks[static_cast<int>(p_otherObject->getType())];
- Object *areaGodoObject = ObjectDB::get_instance(event.event_callback_id);
+void AreaBullet::call_event(const OverlappingShapeData &p_overlapping_shape, PhysicsServer3D::AreaBodyStatus p_status) {
+ InOutEventCallback &event = eventsCallbacks[static_cast<int>(p_overlapping_shape.other_object->getType())];
- if (!areaGodoObject) {
- event.event_callback_id = ObjectID();
+ if (!event.event_callback.is_valid()) {
+ event.event_callback = Callable();
return;
}
call_event_res[0] = p_status;
- call_event_res[1] = p_otherObject->get_self(); // Other body
- call_event_res[2] = p_otherObject->get_instance_id(); // instance ID
- call_event_res[3] = 0; // other_body_shape ID
- call_event_res[4] = 0; // self_shape ID
+ call_event_res[1] = p_overlapping_shape.other_object->get_self(); // RID
+ call_event_res[2] = p_overlapping_shape.other_object->get_instance_id(); // Object ID
+ call_event_res[3] = p_overlapping_shape.other_shape_id; // Other object's shape ID
+ call_event_res[4] = p_overlapping_shape.our_shape_id; // This area's shape ID
Callable::CallError outResp;
- areaGodoObject->call(event.event_callback_method, (const Variant **)call_event_res_ptr, 5, outResp);
+ Variant ret;
+ event.event_callback.call((const Variant **)call_event_res, 5, ret, outResp);
}
-void AreaBullet::scratch() {
- if (isScratched) {
- return;
+int AreaBullet::_overlapping_shape_count(CollisionObjectBullet *p_other_object) {
+ int count = 0;
+ for (int i = 0; i < overlapping_shapes.size(); i++) {
+ if (overlapping_shapes[i].other_object == p_other_object) {
+ count++;
+ }
}
- isScratched = true;
+ return count;
}
-void AreaBullet::clear_overlaps(bool p_notify) {
- for (int i = overlappingObjects.size() - 1; 0 <= i; --i) {
- if (p_notify) {
- call_event(overlappingObjects[i].object, PhysicsServer3D::AREA_BODY_REMOVED);
+int AreaBullet::_find_overlapping_shape(CollisionObjectBullet *p_other_object, uint32_t p_other_shape_id, uint32_t p_our_shape_id) {
+ for (int i = 0; i < overlapping_shapes.size(); i++) {
+ const OverlappingShapeData &overlapping_shape = overlapping_shapes[i];
+ if (overlapping_shape.other_object == p_other_object && overlapping_shape.other_shape_id == p_other_shape_id && overlapping_shape.our_shape_id == p_our_shape_id) {
+ return i;
}
- overlappingObjects[i].object->on_exit_area(this);
}
- overlappingObjects.clear();
+ return -1;
}
-void AreaBullet::remove_overlap(CollisionObjectBullet *p_object, bool p_notify) {
- for (int i = overlappingObjects.size() - 1; 0 <= i; --i) {
- if (overlappingObjects[i].object == p_object) {
- if (p_notify) {
- call_event(overlappingObjects[i].object, PhysicsServer3D::AREA_BODY_REMOVED);
- }
- overlappingObjects[i].object->on_exit_area(this);
- overlappingObjects.remove(i);
- break;
+void AreaBullet::mark_all_overlaps_dirty() {
+ OverlappingShapeData *overlapping_shapes_w = overlapping_shapes.ptrw();
+ for (int i = 0; i < overlapping_shapes.size(); i++) {
+ // Don't overwrite OVERLAP_STATE_ENTER state.
+ if (overlapping_shapes_w[i].state != OVERLAP_STATE_ENTER) {
+ overlapping_shapes_w[i].state = OVERLAP_STATE_DIRTY;
}
}
}
-int AreaBullet::find_overlapping_object(CollisionObjectBullet *p_colObj) {
- const int size = overlappingObjects.size();
- for (int i = 0; i < size; ++i) {
- if (overlappingObjects[i].object == p_colObj) {
- return i;
+void AreaBullet::mark_object_overlaps_inside(CollisionObjectBullet *p_other_object) {
+ OverlappingShapeData *overlapping_shapes_w = overlapping_shapes.ptrw();
+ for (int i = 0; i < overlapping_shapes.size(); i++) {
+ if (overlapping_shapes_w[i].other_object == p_other_object && overlapping_shapes_w[i].state == OVERLAP_STATE_DIRTY) {
+ overlapping_shapes_w[i].state = OVERLAP_STATE_INSIDE;
}
}
- return -1;
+}
+
+void AreaBullet::set_overlap(CollisionObjectBullet *p_other_object, uint32_t p_other_shape_id, uint32_t p_our_shape_id) {
+ int i = _find_overlapping_shape(p_other_object, p_other_shape_id, p_our_shape_id);
+ if (i == -1) { // Not found, create new one.
+ OverlappingShapeData overlapping_shape(p_other_object, OVERLAP_STATE_ENTER, p_other_shape_id, p_our_shape_id);
+ overlapping_shapes.push_back(overlapping_shape);
+ p_other_object->notify_new_overlap(this);
+ isScratched = true;
+ } else {
+ overlapping_shapes.ptrw()[i].state = OVERLAP_STATE_INSIDE;
+ }
+}
+
+void AreaBullet::mark_all_dirty_overlaps_as_exit() {
+ OverlappingShapeData *overlapping_shapes_w = overlapping_shapes.ptrw();
+ for (int i = 0; i < overlapping_shapes.size(); i++) {
+ if (overlapping_shapes[i].state == OVERLAP_STATE_DIRTY) {
+ overlapping_shapes_w[i].state = OVERLAP_STATE_EXIT;
+ isScratched = true;
+ }
+ }
+}
+
+void AreaBullet::remove_object_overlaps(CollisionObjectBullet *p_object) {
+ // Reverse order so items can be removed.
+ for (int i = overlapping_shapes.size() - 1; i >= 0; i--) {
+ if (overlapping_shapes[i].other_object == p_object) {
+ overlapping_shapes.remove_at(i);
+ }
+ }
+}
+
+void AreaBullet::clear_overlaps() {
+ for (int i = 0; i < overlapping_shapes.size(); i++) {
+ call_event(overlapping_shapes[i], PhysicsServer3D::AREA_BODY_REMOVED);
+ overlapping_shapes[i].other_object->on_exit_area(this);
+ }
+ overlapping_shapes.clear();
}
void AreaBullet::set_monitorable(bool p_monitorable) {
monitorable = p_monitorable;
+ updated = true;
}
bool AreaBullet::is_monitoring() const {
@@ -162,6 +213,7 @@ bool AreaBullet::is_monitoring() const {
void AreaBullet::main_shape_changed() {
CRASH_COND(!get_main_shape());
btGhost->setCollisionShape(get_main_shape());
+ updated = true;
}
void AreaBullet::reload_body() {
@@ -174,7 +226,7 @@ void AreaBullet::reload_body() {
void AreaBullet::set_space(SpaceBullet *p_space) {
// Clear the old space if there is one
if (space) {
- clear_overlaps(false);
+ clear_overlaps();
isScratched = false;
// Remove this object form the physics world
@@ -192,24 +244,7 @@ void AreaBullet::on_collision_filters_change() {
if (space) {
space->reload_collision_filters(this);
}
-}
-
-void AreaBullet::add_overlap(CollisionObjectBullet *p_otherObject) {
- scratch();
- overlappingObjects.push_back(OverlappingObjectData(p_otherObject, OVERLAP_STATE_ENTER));
- p_otherObject->notify_new_overlap(this);
-}
-
-void AreaBullet::put_overlap_as_exit(int p_index) {
- scratch();
- overlappingObjects.write[p_index].state = OVERLAP_STATE_EXIT;
-}
-
-void AreaBullet::put_overlap_as_inside(int p_index) {
- // This check is required to be sure this body was inside
- if (OVERLAP_STATE_DIRTY == overlappingObjects[p_index].state) {
- overlappingObjects.write[p_index].state = OVERLAP_STATE_INSIDE;
- }
+ updated = true;
}
void AreaBullet::set_param(PhysicsServer3D::AreaParameter p_param, const Variant &p_value) {
@@ -241,6 +276,7 @@ void AreaBullet::set_param(PhysicsServer3D::AreaParameter p_param, const Variant
default:
WARN_PRINT("Area doesn't support this parameter in the Bullet backend: " + itos(p_param));
}
+ isScratched = true;
}
Variant AreaBullet::get_param(PhysicsServer3D::AreaParameter p_param) const {
@@ -267,21 +303,21 @@ Variant AreaBullet::get_param(PhysicsServer3D::AreaParameter p_param) const {
}
}
-void AreaBullet::set_event_callback(Type p_callbackObjectType, ObjectID p_id, const StringName &p_method) {
+void AreaBullet::set_event_callback(Type p_callbackObjectType, const Callable &p_callback) {
InOutEventCallback &ev = eventsCallbacks[static_cast<int>(p_callbackObjectType)];
- ev.event_callback_id = p_id;
- ev.event_callback_method = p_method;
+ ev.event_callback = p_callback;
/// Set if monitoring
- if (eventsCallbacks[0].event_callback_id.is_valid() || eventsCallbacks[1].event_callback_id.is_valid()) {
+ if (!eventsCallbacks[0].event_callback.is_null() || !eventsCallbacks[1].event_callback.is_null()) {
set_godot_object_flags(get_godot_object_flags() | GOF_IS_MONITORING_AREA);
} else {
set_godot_object_flags(get_godot_object_flags() & (~GOF_IS_MONITORING_AREA));
+ clear_overlaps();
}
}
bool AreaBullet::has_event_callback(Type p_callbackObjectType) {
- return eventsCallbacks[static_cast<int>(p_callbackObjectType)].event_callback_id.is_valid();
+ return !eventsCallbacks[static_cast<int>(p_callbackObjectType)].event_callback.is_null();
}
void AreaBullet::on_enter_area(AreaBullet *p_area) {
diff --git a/modules/bullet/area_bullet.h b/modules/bullet/area_bullet.h
index c8b516c951..3bff364cc1 100644
--- a/modules/bullet/area_bullet.h
+++ b/modules/bullet/area_bullet.h
@@ -43,12 +43,9 @@
class btGhostObject;
class AreaBullet : public RigidCollisionObjectBullet {
- friend void SpaceBullet::check_ghost_overlaps();
-
public:
struct InOutEventCallback {
- ObjectID event_callback_id;
- StringName event_callback_method;
+ Callable event_callback;
InOutEventCallback() {}
};
@@ -60,21 +57,19 @@ public:
OVERLAP_STATE_EXIT // Mark ended overlaps
};
- struct OverlappingObjectData {
- CollisionObjectBullet *object = nullptr;
- OverlapState state = OVERLAP_STATE_ENTER;
-
- OverlappingObjectData() {}
- OverlappingObjectData(CollisionObjectBullet *p_object, OverlapState p_state) :
- object(p_object),
- state(p_state) {}
- OverlappingObjectData(const OverlappingObjectData &other) {
- operator=(other);
- }
- void operator=(const OverlappingObjectData &other) {
- object = other.object;
- state = other.state;
- }
+ struct OverlappingShapeData {
+ CollisionObjectBullet *other_object = nullptr;
+ OverlapState state = OVERLAP_STATE_DIRTY;
+ uint32_t other_shape_id = 0;
+ uint32_t our_shape_id = 0;
+
+ OverlappingShapeData() {}
+
+ OverlappingShapeData(CollisionObjectBullet *p_other_object, OverlapState p_state, uint32_t p_other_shape_id, uint32_t p_our_shape_id) :
+ other_object(p_other_object),
+ state(p_state),
+ other_shape_id(p_other_shape_id),
+ our_shape_id(p_our_shape_id) {}
};
private:
@@ -83,7 +78,9 @@ private:
Variant *call_event_res_ptr[5] = {};
btGhostObject *btGhost = nullptr;
- Vector<OverlappingObjectData> overlappingObjects;
+ Vector<OverlappingShapeData> overlapping_shapes;
+ int _overlapping_shape_count(CollisionObjectBullet *p_other_object);
+ int _find_overlapping_shape(CollisionObjectBullet *p_other_object, uint32_t p_other_shape_id, uint32_t p_our_shape_id);
bool monitorable = true;
PhysicsServer3D::AreaSpaceOverrideMode spOv_mode = PhysicsServer3D::AREA_SPACE_OVERRIDE_DISABLED;
@@ -105,7 +102,6 @@ public:
~AreaBullet();
_FORCE_INLINE_ btGhostObject *get_bt_ghost() const { return btGhost; }
- int find_overlapping_object(CollisionObjectBullet *p_colObj);
void set_monitorable(bool p_monitorable);
_FORCE_INLINE_ bool is_monitorable() const { return monitorable; }
@@ -144,25 +140,23 @@ public:
virtual void set_space(SpaceBullet *p_space);
virtual void dispatch_callbacks();
- void call_event(CollisionObjectBullet *p_otherObject, PhysicsServer3D::AreaBodyStatus p_status);
- void scratch();
-
- void clear_overlaps(bool p_notify);
- // Dispatch the callbacks and removes from overlapping list
- void remove_overlap(CollisionObjectBullet *p_object, bool p_notify);
+ void call_event(const OverlappingShapeData &p_overlapping_shape, PhysicsServer3D::AreaBodyStatus p_status);
virtual void on_collision_filters_change();
virtual void on_collision_checker_start() {}
- virtual void on_collision_checker_end() { isTransformChanged = false; }
+ virtual void on_collision_checker_end() { updated = false; }
- void add_overlap(CollisionObjectBullet *p_otherObject);
- void put_overlap_as_exit(int p_index);
- void put_overlap_as_inside(int p_index);
+ void mark_all_overlaps_dirty();
+ void mark_object_overlaps_inside(CollisionObjectBullet *p_other_object);
+ void set_overlap(CollisionObjectBullet *p_other_object, uint32_t p_other_shape_id, uint32_t p_our_shape_id);
+ void mark_all_dirty_overlaps_as_exit();
+ void remove_object_overlaps(CollisionObjectBullet *p_object);
+ void clear_overlaps();
void set_param(PhysicsServer3D::AreaParameter p_param, const Variant &p_value);
Variant get_param(PhysicsServer3D::AreaParameter p_param) const;
- void set_event_callback(Type p_callbackObjectType, ObjectID p_id, const StringName &p_method);
+ void set_event_callback(Type p_callbackObjectType, const Callable &p_callback);
bool has_event_callback(Type p_callbackObjectType);
virtual void on_enter_area(AreaBullet *p_area);
diff --git a/modules/bullet/bullet_physics_server.cpp b/modules/bullet/bullet_physics_server.cpp
index bb2db49c87..684a20cf4d 100644
--- a/modules/bullet/bullet_physics_server.cpp
+++ b/modules/bullet/bullet_physics_server.cpp
@@ -413,18 +413,18 @@ void BulletPhysicsServer3D::area_set_monitorable(RID p_area, bool p_monitorable)
area->set_monitorable(p_monitorable);
}
-void BulletPhysicsServer3D::area_set_monitor_callback(RID p_area, Object *p_receiver, const StringName &p_method) {
+void BulletPhysicsServer3D::area_set_monitor_callback(RID p_area, const Callable &p_callback) {
AreaBullet *area = area_owner.get_or_null(p_area);
ERR_FAIL_COND(!area);
- area->set_event_callback(CollisionObjectBullet::TYPE_RIGID_BODY, p_receiver ? p_receiver->get_instance_id() : ObjectID(), p_method);
+ area->set_event_callback(CollisionObjectBullet::TYPE_RIGID_BODY, p_callback.is_valid() ? p_callback : Callable());
}
-void BulletPhysicsServer3D::area_set_area_monitor_callback(RID p_area, Object *p_receiver, const StringName &p_method) {
+void BulletPhysicsServer3D::area_set_area_monitor_callback(RID p_area, const Callable &p_callback) {
AreaBullet *area = area_owner.get_or_null(p_area);
ERR_FAIL_COND(!area);
- area->set_event_callback(CollisionObjectBullet::TYPE_AREA, p_receiver ? p_receiver->get_instance_id() : ObjectID(), p_method);
+ area->set_event_callback(CollisionObjectBullet::TYPE_AREA, p_callback.is_valid() ? p_callback : Callable());
}
void BulletPhysicsServer3D::area_set_ray_pickable(RID p_area, bool p_enable) {
@@ -837,8 +837,17 @@ void BulletPhysicsServer3D::body_set_ray_pickable(RID p_body, bool p_enable) {
}
PhysicsDirectBodyState3D *BulletPhysicsServer3D::body_get_direct_state(RID p_body) {
+ if (!rigid_body_owner.owns(p_body)) {
+ return nullptr;
+ }
+
RigidBodyBullet *body = rigid_body_owner.get_or_null(p_body);
ERR_FAIL_COND_V(!body, nullptr);
+
+ if (!body->get_space()) {
+ return nullptr;
+ }
+
return BulletPhysicsDirectBodyState3D::get_singleton(body);
}
diff --git a/modules/bullet/bullet_physics_server.h b/modules/bullet/bullet_physics_server.h
index 7c146de0c3..94635b5bfc 100644
--- a/modules/bullet/bullet_physics_server.h
+++ b/modules/bullet/bullet_physics_server.h
@@ -160,8 +160,8 @@ public:
virtual void area_set_collision_layer(RID p_area, uint32_t p_layer) override;
virtual void area_set_monitorable(RID p_area, bool p_monitorable) override;
- virtual void area_set_monitor_callback(RID p_area, Object *p_receiver, const StringName &p_method) override;
- virtual void area_set_area_monitor_callback(RID p_area, Object *p_receiver, const StringName &p_method) override;
+ virtual void area_set_monitor_callback(RID p_area, const Callable &p_callback) override;
+ virtual void area_set_area_monitor_callback(RID p_area, const Callable &p_callback) override;
virtual void area_set_ray_pickable(RID p_area, bool p_enable) override;
/* RIGID BODY API */
diff --git a/modules/bullet/collision_object_bullet.cpp b/modules/bullet/collision_object_bullet.cpp
index c45bd5bbc0..cbb746800d 100644
--- a/modules/bullet/collision_object_bullet.cpp
+++ b/modules/bullet/collision_object_bullet.cpp
@@ -93,11 +93,9 @@ CollisionObjectBullet::CollisionObjectBullet(Type p_type) :
type(p_type) {}
CollisionObjectBullet::~CollisionObjectBullet() {
- // Remove all overlapping, notify is not required since godot take care of it
- for (int i = areasOverlapped.size() - 1; 0 <= i; --i) {
- areasOverlapped[i]->remove_overlap(this, /*Notify*/ false);
+ for (int i = 0; i < areasOverlapped.size(); i++) {
+ areasOverlapped[i]->remove_object_overlaps(this);
}
-
destroyBulletCollisionObject();
}
@@ -178,7 +176,9 @@ bool CollisionObjectBullet::is_collisions_response_enabled() {
}
void CollisionObjectBullet::notify_new_overlap(AreaBullet *p_area) {
- areasOverlapped.push_back(p_area);
+ if (areasOverlapped.find(p_area) == -1) {
+ areasOverlapped.push_back(p_area);
+ }
}
void CollisionObjectBullet::on_exit_area(AreaBullet *p_area) {
@@ -187,6 +187,7 @@ void CollisionObjectBullet::on_exit_area(AreaBullet *p_area) {
void CollisionObjectBullet::set_godot_object_flags(int flags) {
bt_collision_object->setUserIndex2(flags);
+ updated = true;
}
int CollisionObjectBullet::get_godot_object_flags() const {
@@ -220,7 +221,7 @@ const btTransform &CollisionObjectBullet::get_transform__bullet() const {
}
void CollisionObjectBullet::notify_transform_changed() {
- isTransformChanged = true;
+ updated = true;
}
RigidCollisionObjectBullet::~RigidCollisionObjectBullet() {
@@ -272,7 +273,7 @@ void RigidCollisionObjectBullet::remove_shape_full(ShapeBullet *p_shape) {
for (int i = shapes.size() - 1; 0 <= i; --i) {
if (p_shape == shapes[i].shape) {
internal_shape_destroy(i);
- shapes.remove(i);
+ shapes.remove_at(i);
}
}
reload_shapes();
@@ -281,7 +282,7 @@ void RigidCollisionObjectBullet::remove_shape_full(ShapeBullet *p_shape) {
void RigidCollisionObjectBullet::remove_shape_full(int p_index) {
ERR_FAIL_INDEX(p_index, get_shape_count());
internal_shape_destroy(p_index);
- shapes.remove(p_index);
+ shapes.remove_at(p_index);
reload_shapes();
}
diff --git a/modules/bullet/collision_object_bullet.h b/modules/bullet/collision_object_bullet.h
index 944ab89b87..6d2c564e44 100644
--- a/modules/bullet/collision_object_bullet.h
+++ b/modules/bullet/collision_object_bullet.h
@@ -128,7 +128,7 @@ protected:
/// New area is added when overlap with new area (AreaBullet::addOverlap), then is removed when it exit (CollisionObjectBullet::onExitArea)
/// This array is used mainly to know which area hold the pointer of this object
Vector<AreaBullet *> areasOverlapped;
- bool isTransformChanged = false;
+ bool updated = false;
public:
CollisionObjectBullet(Type p_type);
@@ -206,9 +206,9 @@ public:
Transform3D get_transform() const;
virtual void set_transform__bullet(const btTransform &p_global_transform);
virtual const btTransform &get_transform__bullet() const;
-
- bool is_transform_changed() const { return isTransformChanged; }
virtual void notify_transform_changed();
+
+ bool is_updated() const { return updated; }
};
class RigidCollisionObjectBullet : public CollisionObjectBullet, public ShapeOwnerBullet {
diff --git a/modules/bullet/rigid_body_bullet.cpp b/modules/bullet/rigid_body_bullet.cpp
index 7b20fad28c..4faab19539 100644
--- a/modules/bullet/rigid_body_bullet.cpp
+++ b/modules/bullet/rigid_body_bullet.cpp
@@ -420,7 +420,7 @@ void RigidBodyBullet::on_collision_checker_start() {
void RigidBodyBullet::on_collision_checker_end() {
// Always true if active and not a static or kinematic body
- isTransformChanged = btBody->isActive() && !btBody->isStaticOrKinematicObject();
+ updated = btBody->isActive() && !btBody->isStaticOrKinematicObject();
}
bool RigidBodyBullet::add_collision_object(RigidBodyBullet *p_otherObject, const Vector3 &p_hitWorldLocation, const Vector3 &p_hitLocalLocation, const Vector3 &p_hitNormal, const real_t &p_appliedImpulse, int p_other_shape_index, int p_local_shape_index) {
diff --git a/modules/bullet/soft_body_bullet.cpp b/modules/bullet/soft_body_bullet.cpp
index 3a2370ff31..c0ffffa364 100644
--- a/modules/bullet/soft_body_bullet.cpp
+++ b/modules/bullet/soft_body_bullet.cpp
@@ -442,7 +442,7 @@ void SoftBodyBullet::unpin_node(int p_node_index) {
}
const int id = search_node_pinned(p_node_index);
if (-1 != id) {
- pinned_nodes.remove(id);
+ pinned_nodes.remove_at(id);
}
}
diff --git a/modules/bullet/space_bullet.cpp b/modules/bullet/space_bullet.cpp
index 66d7370bd7..7aa3815c94 100644
--- a/modules/bullet/space_bullet.cpp
+++ b/modules/bullet/space_bullet.cpp
@@ -662,101 +662,77 @@ void SpaceBullet::destroy_world() {
}
void SpaceBullet::check_ghost_overlaps() {
- /// Algorithm support variables
- btCollisionShape *other_body_shape;
- btConvexShape *area_shape;
- btGjkPairDetector::ClosestPointInput gjk_input;
- AreaBullet *area;
- int x(-1), i(-1), y(-1), z(-1), indexOverlap(-1);
-
- /// For each areas
- for (x = areas.size() - 1; 0 <= x; --x) {
- area = areas[x];
-
- btVector3 area_scale(area->get_bt_body_scale());
-
+ // For each area
+ for (int area_idx = 0; area_idx < areas.size(); area_idx++) {
+ AreaBullet *area = areas[area_idx];
if (!area->is_monitoring()) {
continue;
}
- /// 1. Reset all states
- for (i = area->overlappingObjects.size() - 1; 0 <= i; --i) {
- AreaBullet::OverlappingObjectData &otherObj = area->overlappingObjects.write[i];
- // This check prevent the overwrite of ENTER state
- // if this function is called more times before dispatchCallbacks
- if (otherObj.state != AreaBullet::OVERLAP_STATE_ENTER) {
- otherObj.state = AreaBullet::OVERLAP_STATE_DIRTY;
- }
- }
+ btGhostObject *bt_ghost = area->get_bt_ghost();
+ const btTransform &area_transform = area->get_transform__bullet();
+ const btVector3 &area_scale(area->get_bt_body_scale());
- /// 2. Check all overlapping objects using GJK
+ // Mark all current overlapping shapes dirty.
+ area->mark_all_overlaps_dirty();
- const btAlignedObjectArray<btCollisionObject *> ghostOverlaps = area->get_bt_ghost()->getOverlappingPairs();
+ // Broadphase
+ const btAlignedObjectArray<btCollisionObject *> overlapping_pairs = bt_ghost->getOverlappingPairs();
+ // Narrowphase
+ for (int pair_idx = 0; pair_idx < overlapping_pairs.size(); pair_idx++) {
+ btCollisionObject *other_bt_collision_object = overlapping_pairs[pair_idx];
+ RigidCollisionObjectBullet *other_object = static_cast<RigidCollisionObjectBullet *>(other_bt_collision_object->getUserPointer());
+ const btTransform &other_transform = other_object->get_transform__bullet();
+ const btVector3 &other_scale(other_object->get_bt_body_scale());
- // For each overlapping
- for (i = ghostOverlaps.size() - 1; 0 <= i; --i) {
- bool hasOverlap = false;
- btCollisionObject *overlapped_bt_co = ghostOverlaps[i];
- RigidCollisionObjectBullet *otherObject = static_cast<RigidCollisionObjectBullet *>(overlapped_bt_co->getUserPointer());
- btVector3 other_body_scale(otherObject->get_bt_body_scale());
-
- if (!area->is_transform_changed() && !otherObject->is_transform_changed()) {
- hasOverlap = -1 != area->find_overlapping_object(otherObject);
- goto collision_found;
+ if (!area->is_updated() && !other_object->is_updated()) {
+ area->mark_object_overlaps_inside(other_object);
+ continue;
}
- if (overlapped_bt_co->getUserIndex() == CollisionObjectBullet::TYPE_AREA) {
- if (!static_cast<AreaBullet *>(overlapped_bt_co->getUserPointer())->is_monitorable()) {
+ if (other_bt_collision_object->getUserIndex() == CollisionObjectBullet::TYPE_AREA) {
+ if (!static_cast<AreaBullet *>(other_bt_collision_object->getUserPointer())->is_monitorable()) {
continue;
}
- } else if (overlapped_bt_co->getUserIndex() != CollisionObjectBullet::TYPE_RIGID_BODY) {
+ } else if (other_bt_collision_object->getUserIndex() != CollisionObjectBullet::TYPE_RIGID_BODY) {
continue;
}
// For each area shape
- for (y = area->get_shape_count() - 1; 0 <= y; --y) {
- if (!area->get_bt_shape(y)->isConvex()) {
+ for (int our_shape_id = 0; our_shape_id < area->get_shape_count(); our_shape_id++) {
+ btCollisionShape *area_shape = area->get_bt_shape(our_shape_id);
+ if (!area_shape->isConvex()) {
continue;
}
+ btConvexShape *area_convex_shape = static_cast<btConvexShape *>(area_shape);
- btTransform area_shape_treansform(area->get_bt_shape_transform(y));
- area_shape_treansform.getOrigin() *= area_scale;
-
- gjk_input.m_transformA =
- area->get_transform__bullet() *
- area_shape_treansform;
-
- area_shape = static_cast<btConvexShape *>(area->get_bt_shape(y));
+ btTransform area_shape_transform(area->get_bt_shape_transform(our_shape_id));
+ area_shape_transform.getOrigin() *= area_scale;
+ btGjkPairDetector::ClosestPointInput gjk_input;
+ gjk_input.m_transformA = area_transform * area_shape_transform;
// For each other object shape
- for (z = otherObject->get_shape_count() - 1; 0 <= z; --z) {
- other_body_shape = static_cast<btCollisionShape *>(otherObject->get_bt_shape(z));
-
- btTransform other_shape_transform(otherObject->get_bt_shape_transform(z));
- other_shape_transform.getOrigin() *= other_body_scale;
-
- gjk_input.m_transformB =
- otherObject->get_transform__bullet() *
- other_shape_transform;
+ for (int other_shape_id = 0; other_shape_id < other_object->get_shape_count(); other_shape_id++) {
+ btCollisionShape *other_shape = other_object->get_bt_shape(other_shape_id);
+ btTransform other_shape_transform(other_object->get_bt_shape_transform(other_shape_id));
+ other_shape_transform.getOrigin() *= other_scale;
+ gjk_input.m_transformB = other_transform * other_shape_transform;
- if (other_body_shape->isConvex()) {
+ if (other_shape->isConvex()) {
btPointCollector result;
btGjkPairDetector gjk_pair_detector(
- area_shape,
- static_cast<btConvexShape *>(other_body_shape),
+ area_convex_shape,
+ static_cast<btConvexShape *>(other_shape),
gjk_simplex_solver,
gjk_epa_pen_solver);
- gjk_pair_detector.getClosestPoints(gjk_input, result, nullptr);
- if (0 >= result.m_distance) {
- hasOverlap = true;
- goto collision_found;
+ gjk_pair_detector.getClosestPoints(gjk_input, result, nullptr);
+ if (result.m_distance <= 0) {
+ area->set_overlap(other_object, other_shape_id, our_shape_id);
}
-
- } else {
- btCollisionObjectWrapper obA(nullptr, area_shape, area->get_bt_ghost(), gjk_input.m_transformA, -1, y);
- btCollisionObjectWrapper obB(nullptr, other_body_shape, otherObject->get_bt_collision_object(), gjk_input.m_transformB, -1, z);
-
+ } else { // Other shape is not convex.
+ btCollisionObjectWrapper obA(nullptr, area_convex_shape, bt_ghost, gjk_input.m_transformA, -1, our_shape_id);
+ btCollisionObjectWrapper obB(nullptr, other_shape, other_bt_collision_object, gjk_input.m_transformB, -1, other_shape_id);
btCollisionAlgorithm *algorithm = dispatcher->findAlgorithm(&obA, &obB, nullptr, BT_CONTACT_POINT_ALGORITHMS);
if (!algorithm) {
@@ -765,42 +741,20 @@ void SpaceBullet::check_ghost_overlaps() {
GodotDeepPenetrationContactResultCallback contactPointResult(&obA, &obB);
algorithm->processCollision(&obA, &obB, dynamicsWorld->getDispatchInfo(), &contactPointResult);
-
algorithm->~btCollisionAlgorithm();
dispatcher->freeCollisionAlgorithm(algorithm);
if (contactPointResult.hasHit()) {
- hasOverlap = true;
- goto collision_found;
+ area->set_overlap(other_object, our_shape_id, other_shape_id);
}
}
+ } // End for each other object shape
+ } // End for each area shape
+ } // End for each overlapping pair
- } // ~For each other object shape
- } // ~For each area shape
-
- collision_found:
- if (!hasOverlap) {
- continue;
- }
-
- indexOverlap = area->find_overlapping_object(otherObject);
- if (-1 == indexOverlap) {
- // Not found
- area->add_overlap(otherObject);
- } else {
- // Found
- area->put_overlap_as_inside(indexOverlap);
- }
- }
-
- /// 3. Remove not overlapping
- for (i = area->overlappingObjects.size() - 1; 0 <= i; --i) {
- // If the overlap has DIRTY state it means that it's no more overlapping
- if (area->overlappingObjects[i].state == AreaBullet::OVERLAP_STATE_DIRTY) {
- area->put_overlap_as_exit(i);
- }
- }
- }
+ // All overlapping shapes still marked dirty must have exited.
+ area->mark_all_dirty_overlaps_as_exit();
+ } // End for each area
}
void SpaceBullet::check_body_collision() {
@@ -835,7 +789,7 @@ void SpaceBullet::check_body_collision() {
btManifoldPoint &pt = contactManifold->getContactPoint(0);
#endif
if (
- pt.getDistance() <= 0.0 ||
+ pt.getDistance() < 0.0 ||
bodyA->was_colliding(bodyB) ||
bodyB->was_colliding(bodyA)) {
Vector3 collisionWorldPosition;
diff --git a/modules/csg/csg.cpp b/modules/csg/csg.cpp
index a7742ef415..a70e153abd 100644
--- a/modules/csg/csg.cpp
+++ b/modules/csg/csg.cpp
@@ -933,7 +933,7 @@ void CSGBrushOperation::Build2DFaces::_merge_faces(const Vector<int> &p_segment_
merge_faces_idx.sort();
merge_faces_idx.reverse();
for (int i = 0; i < merge_faces_idx.size(); ++i) {
- faces.remove(merge_faces_idx[i]);
+ faces.remove_at(merge_faces_idx[i]);
}
if (degenerate_points.size() == 0) {
@@ -983,7 +983,7 @@ void CSGBrushOperation::Build2DFaces::_merge_faces(const Vector<int> &p_segment_
// If new vertex snaps to degenerate vertex, just delete this face.
if (degenerate_idx == opposite_vertex_idx) {
- faces.remove(face_idx);
+ faces.remove_at(face_idx);
// Update index.
--face_idx;
break;
@@ -999,7 +999,7 @@ void CSGBrushOperation::Build2DFaces::_merge_faces(const Vector<int> &p_segment_
right_face.vertex_idx[0] = opposite_vertex_idx;
right_face.vertex_idx[1] = face.vertex_idx[face_edge_idx];
right_face.vertex_idx[2] = degenerate_idx;
- faces.remove(face_idx);
+ faces.remove_at(face_idx);
faces.insert(face_idx, right_face);
faces.insert(face_idx, left_face);
@@ -1070,7 +1070,7 @@ void CSGBrushOperation::Build2DFaces::_find_edge_intersections(const Vector2 p_s
// If new vertex snaps to opposite vertex, just delete this face.
if (new_vertex_idx == opposite_vertex_idx) {
- faces.remove(face_idx);
+ faces.remove_at(face_idx);
// Update index.
--face_idx;
break;
@@ -1092,7 +1092,7 @@ void CSGBrushOperation::Build2DFaces::_find_edge_intersections(const Vector2 p_s
right_face.vertex_idx[0] = opposite_vertex_idx;
right_face.vertex_idx[1] = face.vertex_idx[face_edge_idx];
right_face.vertex_idx[2] = new_vertex_idx;
- faces.remove(face_idx);
+ faces.remove_at(face_idx);
faces.insert(face_idx, right_face);
faces.insert(face_idx, left_face);
@@ -1162,7 +1162,7 @@ int CSGBrushOperation::Build2DFaces::_insert_point(const Vector2 &p_point) {
// If new vertex snaps to opposite vertex, just delete this face.
if (new_vertex_idx == opposite_vertex_idx) {
- faces.remove(face_idx);
+ faces.remove_at(face_idx);
// Update index.
--face_idx;
break;
@@ -1187,7 +1187,7 @@ int CSGBrushOperation::Build2DFaces::_insert_point(const Vector2 &p_point) {
right_face.vertex_idx[0] = opposite_vertex_idx;
right_face.vertex_idx[1] = face.vertex_idx[face_edge_idx];
right_face.vertex_idx[2] = new_vertex_idx;
- faces.remove(face_idx);
+ faces.remove_at(face_idx);
faces.insert(face_idx, right_face);
faces.insert(face_idx, left_face);
@@ -1222,7 +1222,7 @@ int CSGBrushOperation::Build2DFaces::_insert_point(const Vector2 &p_point) {
new_face.vertex_idx[2] = new_vertex_idx;
faces.push_back(new_face);
}
- faces.remove(face_idx);
+ faces.remove_at(face_idx);
// No need to check other faces.
break;
diff --git a/modules/csg/csg_shape.cpp b/modules/csg/csg_shape.cpp
index 863936ab8c..b9be7535dc 100644
--- a/modules/csg/csg_shape.cpp
+++ b/modules/csg/csg_shape.cpp
@@ -572,9 +572,9 @@ void CSGShape3D::_validate_property(PropertyInfo &property) const {
bool is_collision_prefixed = property.name.begins_with("collision_");
if ((is_collision_prefixed || property.name.begins_with("use_collision")) && is_inside_tree() && !is_root_shape()) {
//hide collision if not root
- property.usage = PROPERTY_USAGE_NOEDITOR;
+ property.usage = PROPERTY_USAGE_NO_EDITOR;
} else if (is_collision_prefixed && !bool(get("use_collision"))) {
- property.usage = PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL;
+ property.usage = PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL;
}
GeometryInstance3D::_validate_property(property);
}
diff --git a/modules/csg/doc_classes/CSGShape3D.xml b/modules/csg/doc_classes/CSGShape3D.xml
index 446269f3f0..f5031064d6 100644
--- a/modules/csg/doc_classes/CSGShape3D.xml
+++ b/modules/csg/doc_classes/CSGShape3D.xml
@@ -59,10 +59,10 @@
<member name="collision_layer" type="int" setter="set_collision_layer" getter="get_collision_layer" default="1">
The physics layers this area is in.
Collidable objects can exist in any of 32 different layers. These layers work like a tagging system, and are not visual. A collidable can use these layers to select with which objects it can collide, using the collision_mask property.
- A contact is detected if object A is in any of the layers that object B scans, or object B is in any layer scanned by object A. See [url=https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
+ A contact is detected if object A is in any of the layers that object B scans, or object B is in any layer scanned by object A. See [url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
</member>
<member name="collision_mask" type="int" setter="set_collision_mask" getter="get_collision_mask" default="1">
- The physics layers this CSG shape scans for collisions. See [url=https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
+ The physics layers this CSG shape scans for collisions. See [url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
</member>
<member name="operation" type="int" setter="set_operation" getter="get_operation" enum="CSGShape3D.Operation" default="0">
The operation that is performed on this shape. This is ignored for the first CSG child node as the operation is between this node and the previous child of this nodes parent.
diff --git a/modules/denoise/config.py b/modules/denoise/config.py
index 6f650354cb..3aa840acb0 100644
--- a/modules/denoise/config.py
+++ b/modules/denoise/config.py
@@ -5,7 +5,13 @@ def can_build(env, platform):
# as doing lightmap generation and denoising on Android or HTML5
# would be a bit far-fetched.
desktop_platforms = ["linuxbsd", "osx", "windows"]
- supported_arch = env["bits"] == "64" and env["arch"] != "arm64" and not env["arch"].startswith("rv")
+ supported_arch = env["bits"] == "64"
+ if env["arch"] == "arm64":
+ supported_arch = False
+ if env["arch"].startswith("ppc"):
+ supported_arch = False
+ if env["arch"].startswith("rv"):
+ supported_arch = False
return env["tools"] and platform in desktop_platforms and supported_arch
diff --git a/modules/enet/doc_classes/ENetMultiplayerPeer.xml b/modules/enet/doc_classes/ENetMultiplayerPeer.xml
index 22136c3944..d2456d3360 100644
--- a/modules/enet/doc_classes/ENetMultiplayerPeer.xml
+++ b/modules/enet/doc_classes/ENetMultiplayerPeer.xml
@@ -8,7 +8,7 @@
[b]Note:[/b] ENet only uses UDP, not TCP. When forwarding the server port to make your server accessible on the public Internet, you only need to forward the server port in UDP. You can use the [UPNP] class to try to forward the server port automatically when starting the server.
</description>
<tutorials>
- <link title="High-level multiplayer">https://docs.godotengine.org/en/latest/tutorials/networking/high_level_multiplayer.html</link>
+ <link title="High-level multiplayer">$DOCS_URL/tutorials/networking/high_level_multiplayer.html</link>
<link title="API documentation on the ENet website">http://enet.bespin.org/usergroup0.html</link>
</tutorials>
<methods>
diff --git a/modules/fbx/editor_scene_importer_fbx.cpp b/modules/fbx/editor_scene_importer_fbx.cpp
index 9bdeafbf91..b11c145599 100644
--- a/modules/fbx/editor_scene_importer_fbx.cpp
+++ b/modules/fbx/editor_scene_importer_fbx.cpp
@@ -843,7 +843,7 @@ Node3D *EditorSceneFormatImporterFBX::_generate_scene(
if (state.animation_player == nullptr) {
print_verbose("Creating animation player");
state.animation_player = memnew(AnimationPlayer);
- state.root->add_child(state.animation_player);
+ state.root->add_child(state.animation_player, true);
state.animation_player->set_owner(state.root_owner);
}
diff --git a/modules/gdnative/doc_classes/GDNativeLibrary.xml b/modules/gdnative/doc_classes/GDNativeLibrary.xml
index 6b3bd714b9..21df640ebc 100644
--- a/modules/gdnative/doc_classes/GDNativeLibrary.xml
+++ b/modules/gdnative/doc_classes/GDNativeLibrary.xml
@@ -7,8 +7,8 @@
A GDNative library can implement [NativeScript]s, global functions to call with the [GDNative] class, or low-level engine extensions through interfaces such as XRInterfaceGDNative. The library must be compiled for each platform and architecture that the project will run on.
</description>
<tutorials>
- <link title="GDNative C example">https://docs.godotengine.org/en/latest/tutorials/scripting/gdnative/gdnative_c_example.html</link>
- <link title="GDNative C++ example">https://docs.godotengine.org/en/latest/tutorials/scripting/gdnative/gdnative_cpp_example.html</link>
+ <link title="GDNative C example">$DOCS_URL/tutorials/scripting/gdnative/gdnative_c_example.html</link>
+ <link title="GDNative C++ example">$DOCS_URL/tutorials/scripting/gdnative/gdnative_cpp_example.html</link>
</tutorials>
<methods>
<method name="get_current_dependencies" qualifiers="const">
diff --git a/modules/gdnative/include/nativescript/godot_nativescript.h b/modules/gdnative/include/nativescript/godot_nativescript.h
index 5390d30c9f..bc53a4001d 100644
--- a/modules/gdnative/include/nativescript/godot_nativescript.h
+++ b/modules/gdnative/include/nativescript/godot_nativescript.h
@@ -102,7 +102,7 @@ typedef enum {
GODOT_PROPERTY_USAGE_DEFAULT = GODOT_PROPERTY_USAGE_STORAGE | GODOT_PROPERTY_USAGE_EDITOR | GODOT_PROPERTY_USAGE_NETWORK,
GODOT_PROPERTY_USAGE_DEFAULT_INTL = GODOT_PROPERTY_USAGE_STORAGE | GODOT_PROPERTY_USAGE_EDITOR | GODOT_PROPERTY_USAGE_NETWORK | GODOT_PROPERTY_USAGE_INTERNATIONALIZED,
- GODOT_PROPERTY_USAGE_NOEDITOR = GODOT_PROPERTY_USAGE_STORAGE | GODOT_PROPERTY_USAGE_NETWORK,
+ GODOT_PROPERTY_USAGE_NO_EDITOR = GODOT_PROPERTY_USAGE_STORAGE | GODOT_PROPERTY_USAGE_NETWORK,
} godot_nativescript_property_usage_flags;
typedef struct {
diff --git a/modules/gdnative/videodecoder/video_stream_gdnative.cpp b/modules/gdnative/videodecoder/video_stream_gdnative.cpp
index 4c9bfb395d..e249363016 100644
--- a/modules/gdnative/videodecoder/video_stream_gdnative.cpp
+++ b/modules/gdnative/videodecoder/video_stream_gdnative.cpp
@@ -341,7 +341,7 @@ void VideoStreamGDNative::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_file", "file"), &VideoStreamGDNative::set_file);
ClassDB::bind_method(D_METHOD("get_file"), &VideoStreamGDNative::get_file);
- ADD_PROPERTY(PropertyInfo(Variant::STRING, "file", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL), "set_file", "get_file");
+ ADD_PROPERTY(PropertyInfo(Variant::STRING, "file", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL), "set_file", "get_file");
}
void VideoStreamGDNative::set_audio_track(int p_track) {
diff --git a/modules/gdscript/doc_classes/@GDScript.xml b/modules/gdscript/doc_classes/@GDScript.xml
index 631ee4d895..33f4198ac1 100644
--- a/modules/gdscript/doc_classes/@GDScript.xml
+++ b/modules/gdscript/doc_classes/@GDScript.xml
@@ -4,10 +4,10 @@
Built-in GDScript functions.
</brief_description>
<description>
- List of core built-in GDScript functions. Math functions and other utilities. Everything else is provided by objects. (Keywords: builtin, built in, global functions.)
+ A list of GDScript-specific utility functions accessed in any script.
+ For the list of the global functions and constants see [@GlobalScope].
</description>
<tutorials>
- <link title="Random number generation">https://docs.godotengine.org/en/latest/tutorials/math/random_number_generation.html</link>
</tutorials>
<methods>
<method name="Color8">
@@ -98,6 +98,7 @@
[codeblock]
[{function:bar, line:12, source:res://script.gd}, {function:foo, line:9, source:res://script.gd}, {function:_ready, line:6, source:res://script.gd}]
[/codeblock]
+ [b]Note:[/b] Not supported for calling from threads. Instead, this will return an empty array.
</description>
</method>
<method name="inst2dict">
@@ -160,17 +161,24 @@
<method name="print_debug" qualifiers="vararg">
<return type="void" />
<description>
- Like [method @GlobalScope.print], but prints only when used in debug mode.
+ Like [method @GlobalScope.print], but includes the current stack frame when running with the debugger turned on.
+ Output in the console would look something like this:
+ [codeblock]
+ Test print
+ At: res://test.gd:15:_process()
+ [/codeblock]
+ [b]Note:[/b] Not supported for calling from threads. Instead of the stack frame, this will print the thread ID.
</description>
</method>
<method name="print_stack">
<return type="void" />
<description>
- Prints a stack track at code location, only works when running with debugger turned on.
+ Prints a stack trace at the current code location. Only works when running with debugger turned on.
Output in the console would look something like this:
[codeblock]
Frame 0 - res://test.gd:16 in function '_process'
[/codeblock]
+ [b]Note:[/b] Not supported for calling from threads. Instead of the stack trace, this will print the thread ID.
</description>
</method>
<method name="range" qualifiers="vararg">
diff --git a/modules/gdscript/doc_classes/GDScript.xml b/modules/gdscript/doc_classes/GDScript.xml
index 0a448ed88c..5acb29e748 100644
--- a/modules/gdscript/doc_classes/GDScript.xml
+++ b/modules/gdscript/doc_classes/GDScript.xml
@@ -8,7 +8,7 @@
[method new] creates a new instance of the script. [method Object.set_script] extends an existing object, if that object's class matches one of the script's base classes.
</description>
<tutorials>
- <link title="GDScript documentation index">https://docs.godotengine.org/en/latest/tutorials/scripting/gdscript/index.html</link>
+ <link title="GDScript documentation index">$DOCS_URL/tutorials/scripting/gdscript/index.html</link>
</tutorials>
<methods>
<method name="get_as_byte_code" qualifiers="const">
diff --git a/modules/gdscript/gdscript.cpp b/modules/gdscript/gdscript.cpp
index 2e55506fd4..b76c2c0437 100644
--- a/modules/gdscript/gdscript.cpp
+++ b/modules/gdscript/gdscript.cpp
@@ -361,7 +361,7 @@ ScriptInstance *GDScript::instance_create(Object *p_this) {
if (top->native.is_valid()) {
if (!ClassDB::is_parent_class(p_this->get_class_name(), top->native->get_name())) {
if (EngineDebugger::is_active()) {
- GDScriptLanguage::get_singleton()->debug_break_parse(get_path(), 1, "Script inherits from native type '" + String(top->native->get_name()) + "', so it can't be instantiated in object of type: '" + p_this->get_class() + "'");
+ GDScriptLanguage::get_singleton()->debug_break_parse(_get_debug_path(), 1, "Script inherits from native type '" + String(top->native->get_name()) + "', so it can't be instantiated in object of type: '" + p_this->get_class() + "'");
}
ERR_FAIL_V_MSG(nullptr, "Script inherits from native type '" + String(top->native->get_name()) + "', so it can't be instantiated in object of type '" + p_this->get_class() + "'" + ".");
}
@@ -427,7 +427,7 @@ void GDScript::_add_doc(const DocData::ClassDoc &p_inner_class) {
} else {
for (int i = 0; i < docs.size(); i++) {
if (docs[i].name == p_inner_class.name) {
- docs.remove(i);
+ docs.remove_at(i);
break;
}
}
@@ -789,6 +789,14 @@ void GDScript::_set_subclass_path(Ref<GDScript> &p_sc, const String &p_path) {
}
}
+String GDScript::_get_debug_path() const {
+ if (is_built_in() && !get_name().is_empty()) {
+ return get_name() + " (" + get_path().get_slice("::", 0) + ")";
+ } else {
+ return get_path();
+ }
+}
+
Error GDScript::reload(bool p_keep_state) {
bool has_instances;
{
@@ -832,7 +840,7 @@ Error GDScript::reload(bool p_keep_state) {
Error err = parser.parse(source, path, false);
if (err) {
if (EngineDebugger::is_active()) {
- GDScriptLanguage::get_singleton()->debug_break_parse(get_path(), parser.get_errors().front()->get().line, "Parser Error: " + parser.get_errors().front()->get().message);
+ GDScriptLanguage::get_singleton()->debug_break_parse(_get_debug_path(), parser.get_errors().front()->get().line, "Parser Error: " + parser.get_errors().front()->get().message);
}
// TODO: Show all error messages.
_err_print_error("GDScript::reload", path.is_empty() ? "built-in" : (const char *)path.utf8().get_data(), parser.get_errors().front()->get().line, ("Parse Error: " + parser.get_errors().front()->get().message).utf8().get_data(), false, ERR_HANDLER_SCRIPT);
@@ -844,7 +852,7 @@ Error GDScript::reload(bool p_keep_state) {
if (err) {
if (EngineDebugger::is_active()) {
- GDScriptLanguage::get_singleton()->debug_break_parse(get_path(), parser.get_errors().front()->get().line, "Parser Error: " + parser.get_errors().front()->get().message);
+ GDScriptLanguage::get_singleton()->debug_break_parse(_get_debug_path(), parser.get_errors().front()->get().line, "Parser Error: " + parser.get_errors().front()->get().message);
}
const List<GDScriptParser::ParserError>::Element *e = parser.get_errors().front();
@@ -867,7 +875,7 @@ Error GDScript::reload(bool p_keep_state) {
if (err) {
if (can_run) {
if (EngineDebugger::is_active()) {
- GDScriptLanguage::get_singleton()->debug_break_parse(get_path(), compiler.get_error_line(), "Parser Error: " + compiler.get_error());
+ GDScriptLanguage::get_singleton()->debug_break_parse(_get_debug_path(), compiler.get_error_line(), "Parser Error: " + compiler.get_error());
}
_err_print_error("GDScript::reload", path.is_empty() ? "built-in" : (const char *)path.utf8().get_data(), compiler.get_error_line(), ("Compile Error: " + compiler.get_error()).utf8().get_data(), false, ERR_HANDLER_SCRIPT);
ERR_FAIL_V(ERR_COMPILATION_FAILED);
@@ -979,7 +987,7 @@ bool GDScript::_set(const StringName &p_name, const Variant &p_value) {
}
void GDScript::_get_property_list(List<PropertyInfo> *p_properties) const {
- p_properties->push_back(PropertyInfo(Variant::STRING, "script/source", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL));
+ p_properties->push_back(PropertyInfo(Variant::STRING, "script/source", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL));
}
void GDScript::_bind_methods() {
@@ -1257,6 +1265,8 @@ bool GDScriptInstance::set(const StringName &p_name, const Variant &p_value) {
call(member->setter, &val, 1, err);
if (err.error == Callable::CallError::CALL_OK) {
return true; //function exists, call was successful
+ } else {
+ return false;
}
} else {
if (member->data_type.has_type) {
@@ -2121,7 +2131,7 @@ String GDScriptLanguage::get_global_class_name(const String &p_path, String *r_b
const GDScriptParser::ClassNode *inner_class = subclass->members[i].m_class;
if (inner_class->identifier->name == extend_classes[0]) {
- extend_classes.remove(0);
+ extend_classes.remove_at(0);
found = true;
subclass = inner_class;
break;
diff --git a/modules/gdscript/gdscript.h b/modules/gdscript/gdscript.h
index 791f8a1431..ade4f247c9 100644
--- a/modules/gdscript/gdscript.h
+++ b/modules/gdscript/gdscript.h
@@ -135,6 +135,7 @@ class GDScript : public Script {
GDScriptInstance *_create_instance(const Variant **p_args, int p_argcount, Object *p_owner, bool p_is_ref_counted, Callable::CallError &r_error);
void _set_subclass_path(Ref<GDScript> &p_sc, const String &p_path);
+ String _get_debug_path() const;
#ifdef TOOLS_ENABLED
Set<PlaceHolderScriptInstance *> placeholders;
diff --git a/modules/gdscript/gdscript_analyzer.cpp b/modules/gdscript/gdscript_analyzer.cpp
index cd8fd361c5..1ecde53dd0 100644
--- a/modules/gdscript/gdscript_analyzer.cpp
+++ b/modules/gdscript/gdscript_analyzer.cpp
@@ -3001,7 +3001,7 @@ void GDScriptAnalyzer::reduce_preload(GDScriptParser::PreloadNode *p_preload) {
// TODO: Don't load if validating: use completion cache.
p_preload->resource = ResourceLoader::load(p_preload->resolved_path);
if (p_preload->resource.is_null()) {
- push_error(vformat(R"(Could not p_preload resource file "%s".)", p_preload->resolved_path), p_preload->path);
+ push_error(vformat(R"(Could not preload resource file "%s".)", p_preload->resolved_path), p_preload->path);
}
}
}
diff --git a/modules/gdscript/gdscript_parser.cpp b/modules/gdscript/gdscript_parser.cpp
index b96139ac51..41b2d2191c 100644
--- a/modules/gdscript/gdscript_parser.cpp
+++ b/modules/gdscript/gdscript_parser.cpp
@@ -740,10 +740,26 @@ void GDScriptParser::parse_class_member(T *(GDScriptParser::*p_parse_function)()
#endif // TOOLS_ENABLED
if (member->identifier != nullptr) {
- // Enums may be unnamed.
- // TODO: Consider names in outer scope too, for constants and classes (and static functions?)
- if (current_class->members_indices.has(member->identifier->name)) {
- push_error(vformat(R"(%s "%s" has the same name as a previously declared %s.)", p_member_kind.capitalize(), member->identifier->name, current_class->get_member(member->identifier->name).get_type_name()), member->identifier);
+ if (!((String)member->identifier->name).is_empty()) { // Enums may be unnamed.
+
+#ifdef DEBUG_ENABLED
+ List<MethodInfo> gdscript_funcs;
+ GDScriptLanguage::get_singleton()->get_public_functions(&gdscript_funcs);
+ for (MethodInfo &info : gdscript_funcs) {
+ if (info.name == member->identifier->name) {
+ push_warning(member->identifier, GDScriptWarning::SHADOWED_GLOBAL_IDENTIFIER, p_member_kind, member->identifier->name, "built-in function");
+ }
+ }
+ if (Variant::has_utility_function(member->identifier->name)) {
+ push_warning(member->identifier, GDScriptWarning::SHADOWED_GLOBAL_IDENTIFIER, p_member_kind, member->identifier->name, "built-in function");
+ }
+#endif
+
+ if (current_class->members_indices.has(member->identifier->name)) {
+ push_error(vformat(R"(%s "%s" has the same name as a previously declared %s.)", p_member_kind.capitalize(), member->identifier->name, current_class->get_member(member->identifier->name).get_type_name()), member->identifier);
+ } else {
+ current_class->add_member(member);
+ }
} else {
current_class->add_member(member);
}
@@ -811,9 +827,24 @@ GDScriptParser::VariableNode *GDScriptParser::parse_variable(bool p_allow_proper
return nullptr;
}
+ GDScriptParser::IdentifierNode *identifier = parse_identifier();
+
+#ifdef DEBUG_ENABLED
+ List<MethodInfo> gdscript_funcs;
+ GDScriptLanguage::get_singleton()->get_public_functions(&gdscript_funcs);
+ for (MethodInfo &info : gdscript_funcs) {
+ if (info.name == identifier->name) {
+ push_warning(identifier, GDScriptWarning::SHADOWED_GLOBAL_IDENTIFIER, "local variable", identifier->name, "built-in function");
+ }
+ }
+ if (Variant::has_utility_function(identifier->name)) {
+ push_warning(identifier, GDScriptWarning::SHADOWED_GLOBAL_IDENTIFIER, "local variable", identifier->name, "built-in function");
+ }
+#endif
+
VariableNode *variable = alloc_node<VariableNode>();
- variable->identifier = parse_identifier();
- variable->export_info.name = variable->identifier->name;
+ variable->identifier = identifier;
+ variable->export_info.name = identifier->name;
if (match(GDScriptTokenizer::Token::COLON)) {
if (check(GDScriptTokenizer::Token::NEWLINE)) {
@@ -1066,8 +1097,24 @@ GDScriptParser::ParameterNode *GDScriptParser::parse_parameter() {
return nullptr;
}
+ GDScriptParser::IdentifierNode *identifier = parse_identifier();
+#ifdef DEBUG_ENABLED
+ List<MethodInfo> gdscript_funcs;
+ GDScriptLanguage::get_singleton()->get_public_functions(&gdscript_funcs);
+ for (MethodInfo &info : gdscript_funcs) {
+ if (info.name == identifier->name) {
+ push_warning(identifier, GDScriptWarning::SHADOWED_GLOBAL_IDENTIFIER, "parameter", identifier->name, "built-in function");
+ }
+ }
+ if (Variant::has_utility_function(identifier->name)) {
+ push_warning(identifier, GDScriptWarning::SHADOWED_GLOBAL_IDENTIFIER, "parameter", identifier->name, "built-in function");
+ } else if (ClassDB::class_exists(identifier->name)) {
+ push_warning(identifier, GDScriptWarning::SHADOWED_GLOBAL_IDENTIFIER, "parameter", identifier->name, "global class");
+ }
+#endif
+
ParameterNode *parameter = alloc_node<ParameterNode>();
- parameter->identifier = parse_identifier();
+ parameter->identifier = identifier;
if (match(GDScriptTokenizer::Token::COLON)) {
if (check((GDScriptTokenizer::Token::EQUAL))) {
@@ -1145,13 +1192,31 @@ GDScriptParser::EnumNode *GDScriptParser::parse_enum() {
HashMap<StringName, int> elements;
+#ifdef DEBUG_ENABLED
+ List<MethodInfo> gdscript_funcs;
+ GDScriptLanguage::get_singleton()->get_public_functions(&gdscript_funcs);
+#endif
+
do {
if (check(GDScriptTokenizer::Token::BRACE_CLOSE)) {
break; // Allow trailing comma.
}
if (consume(GDScriptTokenizer::Token::IDENTIFIER, R"(Expected identifier for enum key.)")) {
EnumNode::Value item;
- item.identifier = parse_identifier();
+ GDScriptParser::IdentifierNode *identifier = parse_identifier();
+#ifdef DEBUG_ENABLED
+ for (MethodInfo &info : gdscript_funcs) {
+ if (info.name == identifier->name) {
+ push_warning(identifier, GDScriptWarning::SHADOWED_GLOBAL_IDENTIFIER, "enum member", identifier->name, "built-in function");
+ }
+ }
+ if (Variant::has_utility_function(identifier->name)) {
+ push_warning(identifier, GDScriptWarning::SHADOWED_GLOBAL_IDENTIFIER, "enum member", identifier->name, "built-in function");
+ } else if (ClassDB::class_exists(identifier->name)) {
+ push_warning(identifier, GDScriptWarning::SHADOWED_GLOBAL_IDENTIFIER, "enum member", identifier->name, "global class");
+ }
+#endif
+ item.identifier = identifier;
item.parent_enum = enum_node;
item.line = previous.start_line;
item.leftmost_column = previous.leftmost_column;
@@ -2774,6 +2839,23 @@ GDScriptParser::ExpressionNode *GDScriptParser::parse_get_node(ExpressionNode *p
get_node->chain.push_back(identifier);
} while (match(GDScriptTokenizer::Token::SLASH));
return get_node;
+ } else if (match(GDScriptTokenizer::Token::SLASH)) {
+ GetNodeNode *get_node = alloc_node<GetNodeNode>();
+ IdentifierNode *identifier_root = alloc_node<IdentifierNode>();
+ get_node->chain.push_back(identifier_root);
+ int chain_position = 0;
+ do {
+ make_completion_context(COMPLETION_GET_NODE, get_node, chain_position++);
+ if (!current.is_node_name()) {
+ push_error(R"(Expect node path after "/".)");
+ return nullptr;
+ }
+ advance();
+ IdentifierNode *identifier = alloc_node<IdentifierNode>();
+ identifier->name = previous.get_identifier();
+ get_node->chain.push_back(identifier);
+ } while (match(GDScriptTokenizer::Token::SLASH));
+ return get_node;
} else {
push_error(R"(Expect node path as string or identifier after "$".)");
return nullptr;
@@ -3332,7 +3414,7 @@ bool GDScriptParser::validate_annotation_arguments(AnnotationNode *p_annotation)
p_annotation->resolved_arguments.push_back(r);
if (error.error != Callable::CallError::CALL_OK) {
push_error(vformat(R"(Expected %s as argument %d of annotation "%s").)", Variant::get_type_name(parameter.type), i + 1, p_annotation->name));
- p_annotation->resolved_arguments.remove(p_annotation->resolved_arguments.size() - 1);
+ p_annotation->resolved_arguments.remove_at(p_annotation->resolved_arguments.size() - 1);
return false;
}
break;
@@ -3356,7 +3438,7 @@ bool GDScriptParser::validate_annotation_arguments(AnnotationNode *p_annotation)
p_annotation->resolved_arguments.push_back(r);
if (error.error != Callable::CallError::CALL_OK) {
push_error(vformat(R"(Expected %s as argument %d of annotation "%s").)", Variant::get_type_name(parameter.type), i + 1, p_annotation->name));
- p_annotation->resolved_arguments.remove(p_annotation->resolved_arguments.size() - 1);
+ p_annotation->resolved_arguments.remove_at(p_annotation->resolved_arguments.size() - 1);
return false;
}
break;
diff --git a/modules/gdscript/gdscript_tokenizer.cpp b/modules/gdscript/gdscript_tokenizer.cpp
index d4a098811a..3725fb58f5 100644
--- a/modules/gdscript/gdscript_tokenizer.cpp
+++ b/modules/gdscript/gdscript_tokenizer.cpp
@@ -795,6 +795,15 @@ GDScriptTokenizer::Token GDScriptTokenizer::string() {
char32_t ch = _peek();
+ if (ch == 0x200E || ch == 0x200F || (ch >= 0x202A && ch <= 0x202E) || (ch >= 0x2066 && ch <= 0x2069)) {
+ Token error = make_error("Invisible text direction control character present in the string, escape it (\"\\u" + String::num_int64(ch, 16) + "\") to avoid confusion.");
+ error.start_column = column;
+ error.leftmost_column = error.start_column;
+ error.end_column = column + 1;
+ error.rightmost_column = error.end_column;
+ push_error(error);
+ }
+
if (ch == '\\') {
// Escape pattern.
_advance();
@@ -1064,7 +1073,8 @@ void GDScriptTokenizer::check_indent() {
// First time indenting, choose character now.
indent_char = current_indent_char;
} else if (current_indent_char != indent_char) {
- Token error = make_error(vformat("Used \"%s\" for indentation instead \"%s\" as used before in the file.", String(&current_indent_char, 1).c_escape(), String(&indent_char, 1).c_escape()));
+ Token error = make_error(vformat("Used %s character for indentation instead of %s as used before in the file.",
+ _get_indent_char_name(current_indent_char), _get_indent_char_name(indent_char)));
error.start_line = line;
error.start_column = 1;
error.leftmost_column = 1;
@@ -1114,6 +1124,12 @@ void GDScriptTokenizer::check_indent() {
}
}
+String GDScriptTokenizer::_get_indent_char_name(char32_t ch) {
+ ERR_FAIL_COND_V(ch != ' ' && ch != '\t', String(&ch, 1).c_escape());
+
+ return ch == ' ' ? "space" : "tab";
+}
+
void GDScriptTokenizer::_skip_whitespace() {
if (pending_indents != 0) {
// Still have some indent/dedent tokens to give.
diff --git a/modules/gdscript/gdscript_tokenizer.h b/modules/gdscript/gdscript_tokenizer.h
index 84b82c07f0..b4ee11fd9a 100644
--- a/modules/gdscript/gdscript_tokenizer.h
+++ b/modules/gdscript/gdscript_tokenizer.h
@@ -233,6 +233,7 @@ private:
bool has_error() const { return !error_stack.is_empty(); }
Token pop_error();
char32_t _advance();
+ String _get_indent_char_name(char32_t ch);
void _skip_whitespace();
void check_indent();
diff --git a/modules/gdscript/gdscript_utility_functions.cpp b/modules/gdscript/gdscript_utility_functions.cpp
index f1b0079536..e997d3a51e 100644
--- a/modules/gdscript/gdscript_utility_functions.cpp
+++ b/modules/gdscript/gdscript_utility_functions.cpp
@@ -437,9 +437,13 @@ struct GDScriptUtilityFunctionsDefinitions {
str += p_args[i]->operator String();
}
- ScriptLanguage *script = GDScriptLanguage::get_singleton();
- if (script->debug_get_stack_level_count() > 0) {
- str += "\n At: " + script->debug_get_stack_level_source(0) + ":" + itos(script->debug_get_stack_level_line(0)) + ":" + script->debug_get_stack_level_function(0) + "()";
+ if (Thread::get_caller_id() == Thread::get_main_id()) {
+ ScriptLanguage *script = GDScriptLanguage::get_singleton();
+ if (script->debug_get_stack_level_count() > 0) {
+ str += "\n At: " + script->debug_get_stack_level_source(0) + ":" + itos(script->debug_get_stack_level_line(0)) + ":" + script->debug_get_stack_level_function(0) + "()";
+ }
+ } else {
+ str += "\n At: Cannot retrieve debug info outside the main thread. Thread ID: " + itos(Thread::get_caller_id());
}
print_line(str);
@@ -448,15 +452,24 @@ struct GDScriptUtilityFunctionsDefinitions {
static inline void print_stack(Variant *r_ret, const Variant **p_args, int p_arg_count, Callable::CallError &r_error) {
VALIDATE_ARG_COUNT(0);
+ if (Thread::get_caller_id() != Thread::get_main_id()) {
+ print_line("Cannot retrieve debug info outside the main thread. Thread ID: " + itos(Thread::get_caller_id()));
+ return;
+ }
ScriptLanguage *script = GDScriptLanguage::get_singleton();
for (int i = 0; i < script->debug_get_stack_level_count(); i++) {
print_line("Frame " + itos(i) + " - " + script->debug_get_stack_level_source(i) + ":" + itos(script->debug_get_stack_level_line(i)) + " in function '" + script->debug_get_stack_level_function(i) + "'");
};
+ *r_ret = Variant();
}
static inline void get_stack(Variant *r_ret, const Variant **p_args, int p_arg_count, Callable::CallError &r_error) {
VALIDATE_ARG_COUNT(0);
+ if (Thread::get_caller_id() != Thread::get_main_id()) {
+ *r_ret = Array();
+ return;
+ }
ScriptLanguage *script = GDScriptLanguage::get_singleton();
Array ret;
diff --git a/modules/gdscript/gdscript_vm.cpp b/modules/gdscript/gdscript_vm.cpp
index a1cc2246d6..6dd8c3e0dd 100644
--- a/modules/gdscript/gdscript_vm.cpp
+++ b/modules/gdscript/gdscript_vm.cpp
@@ -3309,7 +3309,7 @@ Variant GDScriptFunction::call(GDScriptInstance *p_instance, const Variant **p_a
}
int err_line = line;
if (err_text == "") {
- err_text = "Internal Script Error! - opcode #" + itos(last_opcode) + " (report please).";
+ err_text = "Internal script error! Opcode: " + itos(last_opcode) + " (please report).";
}
if (!GDScriptLanguage::get_singleton()->debug_break(err_text, false)) {
diff --git a/modules/gdscript/gdscript_warning.cpp b/modules/gdscript/gdscript_warning.cpp
index 7a483a16ba..a351bd6dad 100644
--- a/modules/gdscript/gdscript_warning.cpp
+++ b/modules/gdscript/gdscript_warning.cpp
@@ -148,6 +148,10 @@ String GDScriptWarning::get_message() const {
case EMPTY_FILE: {
return "Empty script file.";
}
+ case SHADOWED_GLOBAL_IDENTIFIER: {
+ CHECK_SYMBOLS(3);
+ return vformat(R"(The %s '%s' has the same name as a %s.)", symbols[0], symbols[1], symbols[2]);
+ }
case WARNING_MAX:
break; // Can't happen, but silences warning
}
@@ -194,6 +198,7 @@ String GDScriptWarning::get_name_from_code(Code p_code) {
"ASSERT_ALWAYS_FALSE",
"REDUNDANT_AWAIT",
"EMPTY_FILE",
+ "SHADOWED_GLOBAL_IDENTIFIER",
};
static_assert((sizeof(names) / sizeof(*names)) == WARNING_MAX, "Amount of warning types don't match the amount of warning names.");
diff --git a/modules/gdscript/gdscript_warning.h b/modules/gdscript/gdscript_warning.h
index 8de46b08c1..d05f47efe7 100644
--- a/modules/gdscript/gdscript_warning.h
+++ b/modules/gdscript/gdscript_warning.h
@@ -69,6 +69,7 @@ public:
ASSERT_ALWAYS_FALSE, // Expression for assert argument is always false.
REDUNDANT_AWAIT, // await is used but expression is synchronous (not a signal nor a coroutine).
EMPTY_FILE, // A script file is empty.
+ SHADOWED_GLOBAL_IDENTIFIER, // A global class or function has the same name as variable.
WARNING_MAX,
};
diff --git a/modules/gdscript/language_server/gdscript_extend_parser.cpp b/modules/gdscript/language_server/gdscript_extend_parser.cpp
index f4c0c4d9bb..80f4721e2d 100644
--- a/modules/gdscript/language_server/gdscript_extend_parser.cpp
+++ b/modules/gdscript/language_server/gdscript_extend_parser.cpp
@@ -269,7 +269,7 @@ void ExtendGDScriptParser::parse_class_symbol(const GDScriptParser::ClassNode *p
if (j > 0) {
symbol.detail += ", ";
}
- symbol.detail += m.signal->parameters[i]->identifier->name;
+ symbol.detail += m.signal->parameters[j]->identifier->name;
}
symbol.detail += ")";
diff --git a/modules/gdscript/language_server/gdscript_language_protocol.cpp b/modules/gdscript/language_server/gdscript_language_protocol.cpp
index 5cf1e0fc5f..578943696e 100644
--- a/modules/gdscript/language_server/gdscript_language_protocol.cpp
+++ b/modules/gdscript/language_server/gdscript_language_protocol.cpp
@@ -115,7 +115,7 @@ Error GDScriptLanguageProtocol::LSPeer::send_data() {
// Response sent
if (res_sent >= c_res.size() - 1) {
res_sent = 0;
- res_queue.remove(0);
+ res_queue.remove_at(0);
}
}
return OK;
diff --git a/modules/gdscript/language_server/gdscript_language_protocol.h b/modules/gdscript/language_server/gdscript_language_protocol.h
index 899446fb42..a4a63a23a8 100644
--- a/modules/gdscript/language_server/gdscript_language_protocol.h
+++ b/modules/gdscript/language_server/gdscript_language_protocol.h
@@ -38,7 +38,7 @@
#include "gdscript_workspace.h"
#include "lsp.hpp"
-#include "modules/modules_enabled.gen.h"
+#include "modules/modules_enabled.gen.h" // For jsonrpc.
#ifdef MODULE_JSONRPC_ENABLED
#include "modules/jsonrpc/jsonrpc.h"
#else
diff --git a/modules/gdscript/tests/scripts/parser/errors/mixing_tabs_spaces.out b/modules/gdscript/tests/scripts/parser/errors/mixing_tabs_spaces.out
index 6390de9788..31bed2dbc7 100644
--- a/modules/gdscript/tests/scripts/parser/errors/mixing_tabs_spaces.out
+++ b/modules/gdscript/tests/scripts/parser/errors/mixing_tabs_spaces.out
@@ -1,2 +1,2 @@
GDTEST_PARSER_ERROR
-Used "\t" for indentation instead " " as used before in the file.
+Used tab character for indentation instead of space as used before in the file.
diff --git a/modules/gdscript/tests/scripts/parser/warnings/shadowed_global_identifier.gd b/modules/gdscript/tests/scripts/parser/warnings/shadowed_global_identifier.gd
new file mode 100644
index 0000000000..3c64be571b
--- /dev/null
+++ b/modules/gdscript/tests/scripts/parser/warnings/shadowed_global_identifier.gd
@@ -0,0 +1,2 @@
+func test():
+ var abs = "This variable has the same name as the built-in function."
diff --git a/modules/gdscript/tests/scripts/parser/warnings/shadowed_global_identifier.out b/modules/gdscript/tests/scripts/parser/warnings/shadowed_global_identifier.out
new file mode 100644
index 0000000000..f2b29e5bad
--- /dev/null
+++ b/modules/gdscript/tests/scripts/parser/warnings/shadowed_global_identifier.out
@@ -0,0 +1,9 @@
+GDTEST_OK
+>> WARNING
+>> Line: 2
+>> SHADOWED_GLOBAL_IDENTIFIER
+>> The local variable 'abs' has the same name as a built-in function.
+>> WARNING
+>> Line: 2
+>> UNUSED_VARIABLE
+>> The local variable 'abs' is declared but never used in the block. If this is intended, prefix it with an underscore: '_abs'
diff --git a/modules/gltf/doc_classes/GLTFMesh.xml b/modules/gltf/doc_classes/GLTFMesh.xml
index 1e7199d229..58853217e2 100644
--- a/modules/gltf/doc_classes/GLTFMesh.xml
+++ b/modules/gltf/doc_classes/GLTFMesh.xml
@@ -9,6 +9,8 @@
<members>
<member name="blend_weights" type="PackedFloat32Array" setter="set_blend_weights" getter="get_blend_weights" default="PackedFloat32Array()">
</member>
+ <member name="instance_materials" type="Array" setter="set_instance_materials" getter="get_instance_materials" default="[]">
+ </member>
<member name="mesh" type="ImporterMesh" setter="set_mesh" getter="get_mesh">
</member>
</members>
diff --git a/modules/gltf/gltf_document.cpp b/modules/gltf/gltf_document.cpp
index 333fc4637d..f3317aeada 100644
--- a/modules/gltf/gltf_document.cpp
+++ b/modules/gltf/gltf_document.cpp
@@ -68,7 +68,7 @@
#include "scene/resources/multimesh.h"
#include "scene/resources/surface_tool.h"
-#include "modules/modules_enabled.gen.h"
+#include "modules/modules_enabled.gen.h" // For csg, gridmap.
#ifdef MODULE_CSG_ENABLED
#include "modules/csg/csg_shape.h"
@@ -795,6 +795,9 @@ Error GLTFDocument::_encode_buffer_views(Ref<GLTFState> state) {
buffers.push_back(d);
}
print_verbose("glTF: Total buffer views: " + itos(state->buffer_views.size()));
+ if (!buffers.size()) {
+ return OK;
+ }
state->json["bufferViews"] = buffers;
return OK;
}
@@ -884,6 +887,9 @@ Error GLTFDocument::_encode_accessors(Ref<GLTFState> state) {
accessors.push_back(d);
}
+ if (!accessors.size()) {
+ return OK;
+ }
state->json["accessors"] = accessors;
ERR_FAIL_COND_V(!state->json.has("accessors"), ERR_FILE_CORRUPT);
print_verbose("glTF: Total accessors: " + itos(state->accessors.size()));
@@ -2112,6 +2118,7 @@ Error GLTFDocument::_serialize_meshes(Ref<GLTFState> state) {
if (import_mesh.is_null()) {
continue;
}
+ Array instance_materials = state->meshes.write[gltf_mesh_i]->get_instance_materials();
Array primitives;
Dictionary gltf_mesh;
Array target_names;
@@ -2431,7 +2438,14 @@ Error GLTFDocument::_serialize_meshes(Ref<GLTFState> state) {
}
}
- Ref<BaseMaterial3D> mat = import_mesh->get_surface_material(surface_i);
+ Variant v;
+ if (surface_i < instance_materials.size()) {
+ v = instance_materials.get(surface_i);
+ }
+ Ref<BaseMaterial3D> mat = v;
+ if (!mat.is_valid()) {
+ mat = import_mesh->get_surface_material(surface_i);
+ }
if (mat.is_valid()) {
Map<Ref<BaseMaterial3D>, GLTFMaterialIndex>::Element *material_cache_i = state->material_cache.find(mat);
if (material_cache_i && material_cache_i->get() != -1) {
@@ -2475,6 +2489,9 @@ Error GLTFDocument::_serialize_meshes(Ref<GLTFState> state) {
meshes.push_back(gltf_mesh);
}
+ if (!meshes.size()) {
+ return OK;
+ }
state->json["meshes"] = meshes;
print_verbose("glTF: Total meshes: " + itos(meshes.size()));
@@ -3454,6 +3471,9 @@ Error GLTFDocument::_serialize_materials(Ref<GLTFState> state) {
}
materials.push_back(d);
}
+ if (!materials.size()) {
+ return OK;
+ }
state->json["materials"] = materials;
print_verbose("Total materials: " + itos(state->materials.size()));
@@ -4837,6 +4857,9 @@ Error GLTFDocument::_serialize_animations(Ref<GLTFState> state) {
}
}
+ if (!animations.size()) {
+ return OK;
+ }
state->json["animations"] = animations;
print_verbose("glTF: Total animations '" + itos(state->animations.size()) + "'.");
@@ -5057,6 +5080,18 @@ GLTFMeshIndex GLTFDocument::_convert_mesh_to_gltf(Ref<GLTFState> state, MeshInst
}
Ref<GLTFMesh> gltf_mesh;
gltf_mesh.instantiate();
+ Array instance_materials;
+ for (int32_t surface_i = 0; surface_i < current_mesh->get_surface_count(); surface_i++) {
+ Ref<Material> mat = current_mesh->get_surface_material(surface_i);
+ if (p_mesh_instance->get_surface_override_material(surface_i).is_valid()) {
+ mat = p_mesh_instance->get_surface_override_material(surface_i);
+ }
+ if (p_mesh_instance->get_material_override().is_valid()) {
+ mat = p_mesh_instance->get_material_override();
+ }
+ instance_materials.append(mat);
+ }
+ gltf_mesh->set_instance_materials(instance_materials);
gltf_mesh->set_mesh(current_mesh);
gltf_mesh->set_blend_weights(blend_weights);
GLTFMeshIndex mesh_i = state->meshes.size();
@@ -5570,7 +5605,7 @@ void GLTFDocument::_generate_scene_node(Ref<GLTFState> state, Node *scene_parent
// Bone Attachment - Parent Case
BoneAttachment3D *bone_attachment = _generate_bone_attachment(state, active_skeleton, node_index, gltf_node->parent);
- scene_parent->add_child(bone_attachment);
+ scene_parent->add_child(bone_attachment, true);
bone_attachment->set_owner(scene_root);
// There is no gltf_node that represent this, so just directly create a unique name
@@ -5593,7 +5628,7 @@ void GLTFDocument::_generate_scene_node(Ref<GLTFState> state, Node *scene_parent
current_node = _generate_spatial(state, scene_parent, node_index);
}
- scene_parent->add_child(current_node);
+ scene_parent->add_child(current_node, true);
if (current_node != scene_root) {
current_node->set_owner(scene_root);
}
@@ -5623,7 +5658,7 @@ void GLTFDocument::_generate_skeleton_bone_node(Ref<GLTFState> state, Node *scen
// Bone Attachment - Direct Parented Skeleton Case
BoneAttachment3D *bone_attachment = _generate_bone_attachment(state, active_skeleton, node_index, gltf_node->parent);
- scene_parent->add_child(bone_attachment);
+ scene_parent->add_child(bone_attachment, true);
bone_attachment->set_owner(scene_root);
// There is no gltf_node that represent this, so just directly create a unique name
@@ -5637,7 +5672,7 @@ void GLTFDocument::_generate_skeleton_bone_node(Ref<GLTFState> state, Node *scen
// Add it to the scene if it has not already been added
if (skeleton->get_parent() == nullptr) {
- scene_parent->add_child(skeleton);
+ scene_parent->add_child(skeleton, true);
skeleton->set_owner(scene_root);
}
}
@@ -5651,7 +5686,7 @@ void GLTFDocument::_generate_skeleton_bone_node(Ref<GLTFState> state, Node *scen
// Bone Attachment - Same Node Case
BoneAttachment3D *bone_attachment = _generate_bone_attachment(state, active_skeleton, node_index, node_index);
- scene_parent->add_child(bone_attachment);
+ scene_parent->add_child(bone_attachment, true);
bone_attachment->set_owner(scene_root);
// There is no gltf_node that represent this, so just directly create a unique name
@@ -5671,7 +5706,7 @@ void GLTFDocument::_generate_skeleton_bone_node(Ref<GLTFState> state, Node *scen
current_node = _generate_light(state, scene_parent, node_index);
}
- scene_parent->add_child(current_node);
+ scene_parent->add_child(current_node, true);
if (current_node != scene_root) {
current_node->set_owner(scene_root);
}
@@ -5821,7 +5856,7 @@ void GLTFDocument::_import_animation(Ref<GLTFState> state, AnimationPlayer *ap,
animation->set_name(name);
if (anim->get_loop()) {
- animation->set_loop(true);
+ animation->set_loop_mode(Animation::LOOP_LINEAR);
}
float length = 0.0;
@@ -6080,7 +6115,10 @@ void GLTFDocument::_convert_mesh_instances(Ref<GLTFState> state) {
int bone_cnt = skeleton->get_bone_count();
ERR_FAIL_COND(bone_cnt != gltf_skeleton->joints.size());
- ObjectID gltf_skin_key = skin->get_instance_id();
+ ObjectID gltf_skin_key;
+ if (skin.is_valid()) {
+ gltf_skin_key = skin->get_instance_id();
+ }
ObjectID gltf_skel_key = godot_skeleton->get_instance_id();
GLTFSkinIndex skin_gltf_i = -1;
GLTFNodeIndex root_gltf_i = -1;
@@ -6185,7 +6223,7 @@ void GLTFDocument::_process_mesh_instances(Ref<GLTFState> state, Node *scene_roo
ERR_CONTINUE_MSG(skeleton == nullptr, vformat("Unable to find Skeleton for node %d skin %d", node_i, skin_i));
mi->get_parent()->remove_child(mi);
- skeleton->add_child(mi);
+ skeleton->add_child(mi, true);
mi->set_owner(skeleton->get_owner());
mi->set_skin(state->skins.write[skin_i]->godot_skin);
@@ -6865,7 +6903,7 @@ Node *GLTFDocument::import_scene_gltf(const String &p_path, uint32_t p_flags, in
gltf_document->_process_mesh_instances(r_state, root);
if (r_state->animations.size()) {
AnimationPlayer *ap = memnew(AnimationPlayer);
- root->add_child(ap);
+ root->add_child(ap, true);
ap->set_owner(root);
for (int i = 0; i < r_state->animations.size(); i++) {
gltf_document->_import_animation(r_state, ap, i, p_bake_fps);
diff --git a/modules/gltf/gltf_document.h b/modules/gltf/gltf_document.h
index f2f0b439a5..27a1f64bca 100644
--- a/modules/gltf/gltf_document.h
+++ b/modules/gltf/gltf_document.h
@@ -46,7 +46,8 @@
#include "scene/resources/material.h"
#include "scene/resources/texture.h"
-#include "modules/modules_enabled.gen.h"
+#include "modules/modules_enabled.gen.h" // For csg, gridmap.
+
#include <cstdint>
class GLTFState;
diff --git a/modules/gltf/gltf_mesh.cpp b/modules/gltf/gltf_mesh.cpp
index 747820521a..7134345b30 100644
--- a/modules/gltf/gltf_mesh.cpp
+++ b/modules/gltf/gltf_mesh.cpp
@@ -36,9 +36,12 @@ void GLTFMesh::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_mesh", "mesh"), &GLTFMesh::set_mesh);
ClassDB::bind_method(D_METHOD("get_blend_weights"), &GLTFMesh::get_blend_weights);
ClassDB::bind_method(D_METHOD("set_blend_weights", "blend_weights"), &GLTFMesh::set_blend_weights);
+ ClassDB::bind_method(D_METHOD("get_instance_materials"), &GLTFMesh::get_instance_materials);
+ ClassDB::bind_method(D_METHOD("set_instance_materials", "instance_materials"), &GLTFMesh::set_instance_materials);
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "mesh"), "set_mesh", "get_mesh");
ADD_PROPERTY(PropertyInfo(Variant::PACKED_FLOAT32_ARRAY, "blend_weights"), "set_blend_weights", "get_blend_weights"); // Vector<float>
+ ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "instance_materials"), "set_instance_materials", "get_instance_materials");
}
Ref<ImporterMesh> GLTFMesh::get_mesh() {
@@ -49,6 +52,14 @@ void GLTFMesh::set_mesh(Ref<ImporterMesh> p_mesh) {
mesh = p_mesh;
}
+Array GLTFMesh::get_instance_materials() {
+ return instance_materials;
+}
+
+void GLTFMesh::set_instance_materials(Array p_instance_materials) {
+ instance_materials = p_instance_materials;
+}
+
Vector<float> GLTFMesh::get_blend_weights() {
return blend_weights;
}
diff --git a/modules/gltf/gltf_mesh.h b/modules/gltf/gltf_mesh.h
index 3aba0ede32..cc2be93c09 100644
--- a/modules/gltf/gltf_mesh.h
+++ b/modules/gltf/gltf_mesh.h
@@ -43,6 +43,7 @@ class GLTFMesh : public Resource {
private:
Ref<ImporterMesh> mesh;
Vector<float> blend_weights;
+ Array instance_materials;
protected:
static void _bind_methods();
@@ -52,5 +53,7 @@ public:
void set_mesh(Ref<ImporterMesh> p_mesh);
Vector<float> get_blend_weights();
void set_blend_weights(Vector<float> p_blend_weights);
+ Array get_instance_materials();
+ void set_instance_materials(Array p_instance_materials);
};
#endif // GLTF_MESH_H
diff --git a/modules/gridmap/doc_classes/GridMap.xml b/modules/gridmap/doc_classes/GridMap.xml
index c1dbe63628..73315350ff 100644
--- a/modules/gridmap/doc_classes/GridMap.xml
+++ b/modules/gridmap/doc_classes/GridMap.xml
@@ -11,7 +11,7 @@
[b]Note:[/b] GridMap doesn't extend [VisualInstance3D] and therefore can't be hidden or cull masked based on [member VisualInstance3D.layers]. If you make a light not affect the first layer, the whole GridMap won't be lit by the light in question.
</description>
<tutorials>
- <link title="Using gridmaps">https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html</link>
+ <link title="Using gridmaps">$DOCS_URL/tutorials/3d/using_gridmaps.html</link>
<link title="3D Platformer Demo">https://godotengine.org/asset-library/asset/125</link>
<link title="3D Kinematic Character Demo">https://godotengine.org/asset-library/asset/126</link>
</tutorials>
@@ -173,7 +173,7 @@
GridMaps act as static bodies, meaning they aren't affected by gravity or other forces. They only affect other physics bodies that collide with them.
</member>
<member name="collision_mask" type="int" setter="set_collision_mask" getter="get_collision_mask" default="1">
- The physics layers this GridMap detects collisions in. See [url=https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
+ The physics layers this GridMap detects collisions in. See [url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
</member>
<member name="mesh_library" type="MeshLibrary" setter="set_mesh_library" getter="get_mesh_library">
The assigned [MeshLibrary].
diff --git a/modules/gridmap/grid_map_editor_plugin.cpp b/modules/gridmap/grid_map_editor_plugin.cpp
index 08d55de976..d827ce2fb0 100644
--- a/modules/gridmap/grid_map_editor_plugin.cpp
+++ b/modules/gridmap/grid_map_editor_plugin.cpp
@@ -611,13 +611,13 @@ EditorPlugin::AfterGUIInput GridMapEditor::forward_spatial_input_event(Camera3D
Ref<InputEventMouseButton> mb = p_event;
if (mb.is_valid()) {
- if (mb->get_button_index() == MOUSE_BUTTON_WHEEL_UP && (mb->is_command_pressed() || mb->is_shift_pressed())) {
+ if (mb->get_button_index() == MouseButton::WHEEL_UP && (mb->is_command_pressed() || mb->is_shift_pressed())) {
if (mb->is_pressed()) {
floor->set_value(floor->get_value() + mb->get_factor());
}
return EditorPlugin::AFTER_GUI_INPUT_STOP; // Eaten.
- } else if (mb->get_button_index() == MOUSE_BUTTON_WHEEL_DOWN && (mb->is_command_pressed() || mb->is_shift_pressed())) {
+ } else if (mb->get_button_index() == MouseButton::WHEEL_DOWN && (mb->is_command_pressed() || mb->is_shift_pressed())) {
if (mb->is_pressed()) {
floor->set_value(floor->get_value() - mb->get_factor());
}
@@ -628,7 +628,7 @@ EditorPlugin::AfterGUIInput GridMapEditor::forward_spatial_input_event(Camera3D
Node3DEditorViewport::NavigationScheme nav_scheme = (Node3DEditorViewport::NavigationScheme)EditorSettings::get_singleton()->get("editors/3d/navigation/navigation_scheme").operator int();
if ((nav_scheme == Node3DEditorViewport::NAVIGATION_MAYA || nav_scheme == Node3DEditorViewport::NAVIGATION_MODO) && mb->is_alt_pressed()) {
input_action = INPUT_NONE;
- } else if (mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ } else if (mb->get_button_index() == MouseButton::LEFT) {
bool can_edit = (node && node->get_mesh_library().is_valid());
if (input_action == INPUT_PASTE) {
_do_paste();
@@ -643,7 +643,7 @@ EditorPlugin::AfterGUIInput GridMapEditor::forward_spatial_input_event(Camera3D
input_action = INPUT_PAINT;
set_items.clear();
}
- } else if (mb->get_button_index() == MOUSE_BUTTON_RIGHT) {
+ } else if (mb->get_button_index() == MouseButton::RIGHT) {
if (input_action == INPUT_PASTE) {
_clear_clipboard_data();
input_action = INPUT_NONE;
@@ -665,7 +665,7 @@ EditorPlugin::AfterGUIInput GridMapEditor::forward_spatial_input_event(Camera3D
}
return EditorPlugin::AFTER_GUI_INPUT_PASS;
} else {
- if ((mb->get_button_index() == MOUSE_BUTTON_RIGHT && input_action == INPUT_ERASE) || (mb->get_button_index() == MOUSE_BUTTON_LEFT && input_action == INPUT_PAINT)) {
+ if ((mb->get_button_index() == MouseButton::RIGHT && input_action == INPUT_ERASE) || (mb->get_button_index() == MouseButton::LEFT && input_action == INPUT_PAINT)) {
if (set_items.size()) {
undo_redo->create_action(TTR("GridMap Paint"));
for (const SetItem &si : set_items) {
@@ -687,19 +687,19 @@ EditorPlugin::AfterGUIInput GridMapEditor::forward_spatial_input_event(Camera3D
return EditorPlugin::AFTER_GUI_INPUT_PASS;
}
- if (mb->get_button_index() == MOUSE_BUTTON_LEFT && input_action == INPUT_SELECT) {
+ if (mb->get_button_index() == MouseButton::LEFT && input_action == INPUT_SELECT) {
undo_redo->create_action(TTR("GridMap Selection"));
undo_redo->add_do_method(this, "_set_selection", selection.active, selection.begin, selection.end);
undo_redo->add_undo_method(this, "_set_selection", last_selection.active, last_selection.begin, last_selection.end);
undo_redo->commit_action();
}
- if (mb->get_button_index() == MOUSE_BUTTON_LEFT && input_action != INPUT_NONE) {
+ if (mb->get_button_index() == MouseButton::LEFT && input_action != INPUT_NONE) {
set_items.clear();
input_action = INPUT_NONE;
return EditorPlugin::AFTER_GUI_INPUT_STOP;
}
- if (mb->get_button_index() == MOUSE_BUTTON_RIGHT && (input_action == INPUT_ERASE || input_action == INPUT_PASTE)) {
+ if (mb->get_button_index() == MouseButton::RIGHT && (input_action == INPUT_ERASE || input_action == INPUT_PASTE)) {
input_action = INPUT_NONE;
return EditorPlugin::AFTER_GUI_INPUT_STOP;
}
@@ -719,7 +719,7 @@ EditorPlugin::AfterGUIInput GridMapEditor::forward_spatial_input_event(Camera3D
if (k.is_valid()) {
if (k->is_pressed()) {
- if (k->get_keycode() == KEY_ESCAPE) {
+ if (k->get_keycode() == Key::ESCAPE) {
if (input_action == INPUT_PASTE) {
_clear_clipboard_data();
input_action = INPUT_NONE;
@@ -738,12 +738,12 @@ EditorPlugin::AfterGUIInput GridMapEditor::forward_spatial_input_event(Camera3D
}
if (k->is_shift_pressed() && selection.active && input_action != INPUT_PASTE) {
- if (k->get_keycode() == options->get_popup()->get_item_accelerator(options->get_popup()->get_item_index(MENU_OPTION_PREV_LEVEL))) {
+ if (k->get_keycode() == (Key)options->get_popup()->get_item_accelerator(options->get_popup()->get_item_index(MENU_OPTION_PREV_LEVEL))) {
selection.click[edit_axis]--;
_validate_selection();
return EditorPlugin::AFTER_GUI_INPUT_STOP;
}
- if (k->get_keycode() == options->get_popup()->get_item_accelerator(options->get_popup()->get_item_index(MENU_OPTION_NEXT_LEVEL))) {
+ if (k->get_keycode() == (Key)options->get_popup()->get_item_accelerator(options->get_popup()->get_item_index(MENU_OPTION_NEXT_LEVEL))) {
selection.click[edit_axis]++;
_validate_selection();
return EditorPlugin::AFTER_GUI_INPUT_STOP;
@@ -759,7 +759,7 @@ EditorPlugin::AfterGUIInput GridMapEditor::forward_spatial_input_event(Camera3D
accumulated_floor_delta += delta;
int step = 0;
if (ABS(accumulated_floor_delta) > 1.0) {
- step = SGN(accumulated_floor_delta);
+ step = SIGN(accumulated_floor_delta);
accumulated_floor_delta -= step;
}
if (step) {
@@ -804,7 +804,7 @@ void GridMapEditor::_text_changed(const String &p_text) {
void GridMapEditor::_sbox_input(const Ref<InputEvent> &p_ie) {
const Ref<InputEventKey> k = p_ie;
- if (k.is_valid() && (k->get_keycode() == KEY_UP || k->get_keycode() == KEY_DOWN || k->get_keycode() == KEY_PAGEUP || k->get_keycode() == KEY_PAGEDOWN)) {
+ if (k.is_valid() && (k->get_keycode() == Key::UP || k->get_keycode() == Key::DOWN || k->get_keycode() == Key::PAGEUP || k->get_keycode() == Key::PAGEDOWN)) {
// Forward the key input to the ItemList so it can be scrolled
mesh_library_palette->gui_input(k);
search_box->accept_event();
@@ -816,11 +816,11 @@ void GridMapEditor::_mesh_library_palette_input(const Ref<InputEvent> &p_ie) {
// Zoom in/out using Ctrl + mouse wheel
if (mb.is_valid() && mb->is_pressed() && mb->is_command_pressed()) {
- if (mb->is_pressed() && mb->get_button_index() == MOUSE_BUTTON_WHEEL_UP) {
+ if (mb->is_pressed() && mb->get_button_index() == MouseButton::WHEEL_UP) {
size_slider->set_value(size_slider->get_value() + 0.2);
}
- if (mb->is_pressed() && mb->get_button_index() == MOUSE_BUTTON_WHEEL_DOWN) {
+ if (mb->is_pressed() && mb->get_button_index() == MouseButton::WHEEL_DOWN) {
size_slider->set_value(size_slider->get_value() - 0.2);
}
}
@@ -1097,7 +1097,7 @@ void GridMapEditor::_notification(int p_what) {
// Simulate mouse released event to stop drawing when editor focus exists.
Ref<InputEventMouseButton> release;
release.instantiate();
- release->set_button_index(MOUSE_BUTTON_LEFT);
+ release->set_button_index(MouseButton::LEFT);
forward_spatial_input_event(nullptr, release);
}
} break;
@@ -1188,33 +1188,33 @@ GridMapEditor::GridMapEditor(EditorNode *p_editor) {
spatial_editor_hb->hide();
options->set_text(TTR("Grid Map"));
- options->get_popup()->add_item(TTR("Previous Floor"), MENU_OPTION_PREV_LEVEL, KEY_Q);
- options->get_popup()->add_item(TTR("Next Floor"), MENU_OPTION_NEXT_LEVEL, KEY_E);
+ options->get_popup()->add_item(TTR("Previous Floor"), MENU_OPTION_PREV_LEVEL, Key::Q);
+ options->get_popup()->add_item(TTR("Next Floor"), MENU_OPTION_NEXT_LEVEL, Key::E);
options->get_popup()->add_separator();
options->get_popup()->add_radio_check_item(TTR("Clip Disabled"), MENU_OPTION_CLIP_DISABLED);
options->get_popup()->set_item_checked(options->get_popup()->get_item_index(MENU_OPTION_CLIP_DISABLED), true);
options->get_popup()->add_radio_check_item(TTR("Clip Above"), MENU_OPTION_CLIP_ABOVE);
options->get_popup()->add_radio_check_item(TTR("Clip Below"), MENU_OPTION_CLIP_BELOW);
options->get_popup()->add_separator();
- options->get_popup()->add_radio_check_item(TTR("Edit X Axis"), MENU_OPTION_X_AXIS, KEY_Z);
- options->get_popup()->add_radio_check_item(TTR("Edit Y Axis"), MENU_OPTION_Y_AXIS, KEY_X);
- options->get_popup()->add_radio_check_item(TTR("Edit Z Axis"), MENU_OPTION_Z_AXIS, KEY_C);
+ options->get_popup()->add_radio_check_item(TTR("Edit X Axis"), MENU_OPTION_X_AXIS, Key::Z);
+ options->get_popup()->add_radio_check_item(TTR("Edit Y Axis"), MENU_OPTION_Y_AXIS, Key::X);
+ options->get_popup()->add_radio_check_item(TTR("Edit Z Axis"), MENU_OPTION_Z_AXIS, Key::C);
options->get_popup()->set_item_checked(options->get_popup()->get_item_index(MENU_OPTION_Y_AXIS), true);
options->get_popup()->add_separator();
- options->get_popup()->add_item(TTR("Cursor Rotate X"), MENU_OPTION_CURSOR_ROTATE_X, KEY_A);
- options->get_popup()->add_item(TTR("Cursor Rotate Y"), MENU_OPTION_CURSOR_ROTATE_Y, KEY_S);
- options->get_popup()->add_item(TTR("Cursor Rotate Z"), MENU_OPTION_CURSOR_ROTATE_Z, KEY_D);
- options->get_popup()->add_item(TTR("Cursor Back Rotate X"), MENU_OPTION_CURSOR_BACK_ROTATE_X, KEY_MASK_SHIFT + KEY_A);
- options->get_popup()->add_item(TTR("Cursor Back Rotate Y"), MENU_OPTION_CURSOR_BACK_ROTATE_Y, KEY_MASK_SHIFT + KEY_S);
- options->get_popup()->add_item(TTR("Cursor Back Rotate Z"), MENU_OPTION_CURSOR_BACK_ROTATE_Z, KEY_MASK_SHIFT + KEY_D);
- options->get_popup()->add_item(TTR("Cursor Clear Rotation"), MENU_OPTION_CURSOR_CLEAR_ROTATION, KEY_W);
+ options->get_popup()->add_item(TTR("Cursor Rotate X"), MENU_OPTION_CURSOR_ROTATE_X, Key::A);
+ options->get_popup()->add_item(TTR("Cursor Rotate Y"), MENU_OPTION_CURSOR_ROTATE_Y, Key::S);
+ options->get_popup()->add_item(TTR("Cursor Rotate Z"), MENU_OPTION_CURSOR_ROTATE_Z, Key::D);
+ options->get_popup()->add_item(TTR("Cursor Back Rotate X"), MENU_OPTION_CURSOR_BACK_ROTATE_X, KeyModifierMask::SHIFT + Key::A);
+ options->get_popup()->add_item(TTR("Cursor Back Rotate Y"), MENU_OPTION_CURSOR_BACK_ROTATE_Y, KeyModifierMask::SHIFT + Key::S);
+ options->get_popup()->add_item(TTR("Cursor Back Rotate Z"), MENU_OPTION_CURSOR_BACK_ROTATE_Z, KeyModifierMask::SHIFT + Key::D);
+ options->get_popup()->add_item(TTR("Cursor Clear Rotation"), MENU_OPTION_CURSOR_CLEAR_ROTATION, Key::W);
options->get_popup()->add_separator();
options->get_popup()->add_check_item(TTR("Paste Selects"), MENU_OPTION_PASTE_SELECTS);
options->get_popup()->add_separator();
- options->get_popup()->add_item(TTR("Duplicate Selection"), MENU_OPTION_SELECTION_DUPLICATE, KEY_MASK_CTRL + KEY_C);
- options->get_popup()->add_item(TTR("Cut Selection"), MENU_OPTION_SELECTION_CUT, KEY_MASK_CTRL + KEY_X);
- options->get_popup()->add_item(TTR("Clear Selection"), MENU_OPTION_SELECTION_CLEAR, KEY_DELETE);
- options->get_popup()->add_item(TTR("Fill Selection"), MENU_OPTION_SELECTION_FILL, KEY_MASK_CTRL + KEY_F);
+ options->get_popup()->add_item(TTR("Duplicate Selection"), MENU_OPTION_SELECTION_DUPLICATE, KeyModifierMask::CTRL + Key::C);
+ options->get_popup()->add_item(TTR("Cut Selection"), MENU_OPTION_SELECTION_CUT, KeyModifierMask::CTRL + Key::X);
+ options->get_popup()->add_item(TTR("Clear Selection"), MENU_OPTION_SELECTION_CLEAR, Key::KEY_DELETE);
+ options->get_popup()->add_item(TTR("Fill Selection"), MENU_OPTION_SELECTION_FILL, KeyModifierMask::CTRL + Key::F);
options->get_popup()->add_separator();
options->get_popup()->add_item(TTR("Settings..."), MENU_OPTION_GRIDMAP_SETTINGS);
diff --git a/modules/lightmapper_rd/lm_compute.glsl b/modules/lightmapper_rd/lm_compute.glsl
index 158cd960c4..7bb8346c47 100644
--- a/modules/lightmapper_rd/lm_compute.glsl
+++ b/modules/lightmapper_rd/lm_compute.glsl
@@ -235,19 +235,39 @@ uint trace_ray(vec3 p_from, vec3 p_to
return RAY_MISS;
}
+// https://www.reedbeta.com/blog/hash-functions-for-gpu-rendering/
+uint hash(uint value) {
+ uint state = value * 747796405u + 2891336453u;
+ uint word = ((state >> ((state >> 28u) + 4u)) ^ state) * 277803737u;
+ return (word >> 22u) ^ word;
+}
+
+uint random_seed(ivec3 seed) {
+ return hash(seed.x ^ hash(seed.y ^ hash(seed.z)));
+}
+
+// generates a random value in range [0.0, 1.0)
+float randomize(inout uint value) {
+ value = hash(value);
+ return float(value / 4294967296.0);
+}
+
const float PI = 3.14159265f;
-const float GOLDEN_ANGLE = PI * (3.0 - sqrt(5.0));
-
-vec3 vogel_hemisphere(uint p_index, uint p_count, float p_offset) {
- float r = sqrt(float(p_index) + 0.5f) / sqrt(float(p_count));
- float theta = float(p_index) * GOLDEN_ANGLE + p_offset;
- float y = cos(r * PI * 0.5);
- float l = sin(r * PI * 0.5);
- return vec3(l * cos(theta), l * sin(theta), y);
+
+// http://www.realtimerendering.com/raytracinggems/unofficial_RayTracingGems_v1.4.pdf (chapter 15)
+vec3 generate_hemisphere_uniform_direction(inout uint noise) {
+ float noise1 = randomize(noise);
+ float noise2 = randomize(noise) * 2.0 * PI;
+
+ float factor = sqrt(1 - (noise1 * noise1));
+ return vec3(factor * cos(noise2), factor * sin(noise2), noise1);
}
-float quick_hash(vec2 pos) {
- return fract(sin(dot(pos * 19.19, vec2(49.5791, 97.413))) * 49831.189237);
+vec3 generate_hemisphere_cosine_weighted_direction(inout uint noise) {
+ float noise1 = randomize(noise);
+ float noise2 = randomize(noise) * 2.0 * PI;
+
+ return vec3(sqrt(noise1) * cos(noise2), sqrt(noise1) * sin(noise2), sqrt(1.0 - noise1));
}
float get_omni_attenuation(float distance, float inv_range, float decay) {
@@ -404,8 +424,9 @@ void main() {
#endif
vec3 light_average = vec3(0.0);
float active_rays = 0.0;
+ uint noise = random_seed(ivec3(params.ray_from, atlas_pos));
for (uint i = params.ray_from; i < params.ray_to; i++) {
- vec3 ray_dir = normal_mat * vogel_hemisphere(i, params.ray_count, quick_hash(vec2(atlas_pos)));
+ vec3 ray_dir = normal_mat * generate_hemisphere_cosine_weighted_direction(noise);
uint tidx;
vec3 barycentric;
@@ -550,8 +571,9 @@ void main() {
vec4(0.0),
vec4(0.0));
+ uint noise = random_seed(ivec3(params.ray_from, probe_index, 49502741 /* some prime */));
for (uint i = params.ray_from; i < params.ray_to; i++) {
- vec3 ray_dir = vogel_hemisphere(i, params.ray_count, quick_hash(vec2(float(probe_index), 0.0)));
+ vec3 ray_dir = generate_hemisphere_uniform_direction(noise);
if (bool(i & 1)) {
//throw to both sides, so alternate them
ray_dir.z *= -1.0;
diff --git a/modules/minimp3/audio_stream_mp3.cpp b/modules/minimp3/audio_stream_mp3.cpp
index 17ce051b67..49e9f5f97e 100644
--- a/modules/minimp3/audio_stream_mp3.cpp
+++ b/modules/minimp3/audio_stream_mp3.cpp
@@ -228,9 +228,9 @@ void AudioStreamMP3::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_loop_offset", "seconds"), &AudioStreamMP3::set_loop_offset);
ClassDB::bind_method(D_METHOD("get_loop_offset"), &AudioStreamMP3::get_loop_offset);
- ADD_PROPERTY(PropertyInfo(Variant::PACKED_BYTE_ARRAY, "data", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR), "set_data", "get_data");
- ADD_PROPERTY(PropertyInfo(Variant::BOOL, "loop", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR), "set_loop", "has_loop");
- ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "loop_offset", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR), "set_loop_offset", "get_loop_offset");
+ ADD_PROPERTY(PropertyInfo(Variant::PACKED_BYTE_ARRAY, "data", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), "set_data", "get_data");
+ ADD_PROPERTY(PropertyInfo(Variant::BOOL, "loop", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), "set_loop", "has_loop");
+ ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "loop_offset", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), "set_loop_offset", "get_loop_offset");
}
AudioStreamMP3::AudioStreamMP3() {
diff --git a/modules/minimp3/resource_importer_mp3.cpp b/modules/minimp3/resource_importer_mp3.cpp
index dc360c12ba..b2a755e23b 100644
--- a/modules/minimp3/resource_importer_mp3.cpp
+++ b/modules/minimp3/resource_importer_mp3.cpp
@@ -54,7 +54,7 @@ String ResourceImporterMP3::get_resource_type() const {
return "AudioStreamMP3";
}
-bool ResourceImporterMP3::get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const {
+bool ResourceImporterMP3::get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const {
return true;
}
@@ -66,7 +66,7 @@ String ResourceImporterMP3::get_preset_name(int p_idx) const {
return String();
}
-void ResourceImporterMP3::get_import_options(List<ImportOption> *r_options, int p_preset) const {
+void ResourceImporterMP3::get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset) const {
r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "loop"), true));
r_options->push_back(ImportOption(PropertyInfo(Variant::FLOAT, "loop_offset"), 0));
}
diff --git a/modules/minimp3/resource_importer_mp3.h b/modules/minimp3/resource_importer_mp3.h
index 71b51887a2..356ec77d22 100644
--- a/modules/minimp3/resource_importer_mp3.h
+++ b/modules/minimp3/resource_importer_mp3.h
@@ -47,8 +47,8 @@ public:
virtual int get_preset_count() const override;
virtual String get_preset_name(int p_idx) const override;
- virtual void get_import_options(List<ImportOption> *r_options, int p_preset = 0) const override;
- virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const override;
+ virtual void get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset = 0) const override;
+ virtual bool get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const override;
virtual Error import(const String &p_source_file, const String &p_save_path, const Map<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = nullptr, Variant *r_metadata = nullptr) override;
diff --git a/modules/mono/build_scripts/make_android_mono_config.py b/modules/mono/build_scripts/make_android_mono_config.py
index 28494bff6e..1920ef1c1a 100644
--- a/modules/mono/build_scripts/make_android_mono_config.py
+++ b/modules/mono/build_scripts/make_android_mono_config.py
@@ -8,7 +8,9 @@ def generate_compressed_config(config_src, output_dir):
decompr_size = len(buf)
import zlib
- buf = zlib.compress(buf)
+ # Use maximum zlib compression level to further reduce file size
+ # (at the cost of initial build times).
+ buf = zlib.compress(buf, zlib.Z_BEST_COMPRESSION)
compr_size = len(buf)
bytes_seq_str = ""
diff --git a/modules/mono/csharp_script.cpp b/modules/mono/csharp_script.cpp
index 6970349414..0ceb45d425 100644
--- a/modules/mono/csharp_script.cpp
+++ b/modules/mono/csharp_script.cpp
@@ -788,11 +788,7 @@ bool CSharpLanguage::is_assembly_reloading_needed() {
GDMonoAssembly *proj_assembly = gdmono->get_project_assembly();
- String appname = ProjectSettings::get_singleton()->get("application/config/name");
- String appname_safe = OS::get_singleton()->get_safe_dir_name(appname);
- if (appname_safe.is_empty()) {
- appname_safe = "UnnamedProject";
- }
+ String appname_safe = ProjectSettings::get_singleton()->get_safe_project_name();
appname_safe += ".dll";
@@ -1355,7 +1351,7 @@ void CSharpLanguage::_editor_init_callback() {
// Enable it as a plugin
EditorNode::add_editor_plugin(godotsharp_editor);
- ED_SHORTCUT("mono/build_solution", TTR("Build Solution"), KEY_MASK_ALT | KEY_B);
+ ED_SHORTCUT("mono/build_solution", TTR("Build Solution"), KeyModifierMask::ALT | Key::B);
godotsharp_editor->enable_plugin();
get_singleton()->godotsharp_editor = godotsharp_editor;
@@ -2981,7 +2977,7 @@ bool CSharpScript::_set(const StringName &p_name, const Variant &p_value) {
}
void CSharpScript::_get_property_list(List<PropertyInfo> *p_properties) const {
- p_properties->push_back(PropertyInfo(Variant::STRING, CSharpLanguage::singleton->string_names._script_source, PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL));
+ p_properties->push_back(PropertyInfo(Variant::STRING, CSharpLanguage::singleton->string_names._script_source, PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL));
}
void CSharpScript::_bind_methods() {
diff --git a/modules/mono/doc_classes/CSharpScript.xml b/modules/mono/doc_classes/CSharpScript.xml
index abd860a55f..14c62b4bb0 100644
--- a/modules/mono/doc_classes/CSharpScript.xml
+++ b/modules/mono/doc_classes/CSharpScript.xml
@@ -8,17 +8,14 @@
See also [GodotSharp].
</description>
<tutorials>
- <link title="C# documentation index">https://docs.godotengine.org/en/latest/tutorials/scripting/c_sharp/index.html</link>
+ <link title="C# documentation index">$DOCS_URL/tutorials/scripting/c_sharp/index.html</link>
</tutorials>
<methods>
<method name="new" qualifiers="vararg">
- <return type="Variant">
- </return>
+ <return type="Variant" />
<description>
Returns a new instance of the script.
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/modules/mono/doc_classes/GodotSharp.xml b/modules/mono/doc_classes/GodotSharp.xml
index 417f8ac704..a148072245 100644
--- a/modules/mono/doc_classes/GodotSharp.xml
+++ b/modules/mono/doc_classes/GodotSharp.xml
@@ -11,66 +11,55 @@
</tutorials>
<methods>
<method name="attach_thread">
- <return type="void">
- </return>
+ <return type="void" />
<description>
Attaches the current thread to the Mono runtime.
</description>
</method>
<method name="detach_thread">
- <return type="void">
- </return>
+ <return type="void" />
<description>
Detaches the current thread from the Mono runtime.
</description>
</method>
<method name="get_domain_id">
- <return type="int">
- </return>
+ <return type="int" />
<description>
Returns the current MonoDomain ID.
[b]Note:[/b] The Mono runtime must be initialized for this method to work (use [method is_runtime_initialized] to check). If the Mono runtime isn't initialized at the time this method is called, the engine will crash.
</description>
</method>
<method name="get_scripts_domain_id">
- <return type="int">
- </return>
+ <return type="int" />
<description>
Returns the scripts MonoDomain's ID. This will be the same MonoDomain ID as [method get_domain_id], unless the scripts domain isn't loaded.
[b]Note:[/b] The Mono runtime must be initialized for this method to work (use [method is_runtime_initialized] to check). If the Mono runtime isn't initialized at the time this method is called, the engine will crash.
</description>
</method>
<method name="is_domain_finalizing_for_unload">
- <return type="bool">
- </return>
- <argument index="0" name="domain_id" type="int">
- </argument>
+ <return type="bool" />
+ <argument index="0" name="domain_id" type="int" />
<description>
Returns [code]true[/code] if the domain is being finalized, [code]false[/code] otherwise.
</description>
</method>
<method name="is_runtime_initialized">
- <return type="bool">
- </return>
+ <return type="bool" />
<description>
Returns [code]true[/code] if the Mono runtime is initialized, [code]false[/code] otherwise.
</description>
</method>
<method name="is_runtime_shutting_down">
- <return type="bool">
- </return>
+ <return type="bool" />
<description>
Returns [code]true[/code] if the Mono runtime is shutting down, [code]false[/code] otherwise.
</description>
</method>
<method name="is_scripts_domain_loaded">
- <return type="bool">
- </return>
+ <return type="bool" />
<description>
Returns [code]true[/code] if the scripts domain is loaded, [code]false[/code] otherwise.
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/AABB.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/AABB.cs
index 70a2cf5695..850ae7fc3b 100644
--- a/modules/mono/glue/GodotSharp/GodotSharp/Core/AABB.cs
+++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/AABB.cs
@@ -666,21 +666,40 @@ namespace Godot
_size = new Vector3(width, height, depth);
}
+ /// <summary>
+ /// Returns <see langword="true"/> if the AABBs are exactly equal.
+ /// Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
+ /// </summary>
+ /// <param name="left">The left AABB.</param>
+ /// <param name="right">The right AABB.</param>
+ /// <returns>Whether or not the AABBs are exactly equal.</returns>
public static bool operator ==(AABB left, AABB right)
{
return left.Equals(right);
}
+ /// <summary>
+ /// Returns <see langword="true"/> if the AABBs are not equal.
+ /// Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
+ /// </summary>
+ /// <param name="left">The left AABB.</param>
+ /// <param name="right">The right AABB.</param>
+ /// <returns>Whether or not the AABBs are not equal.</returns>
public static bool operator !=(AABB left, AABB right)
{
return !left.Equals(right);
}
/// <summary>
- /// Returns <see langword="true"/> if this AABB and <paramref name="obj"/> are equal.
+ /// Returns <see langword="true"/> if the AABB is exactly equal
+ /// to the given object (<see paramref="obj"/>).
+ /// Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
/// </summary>
- /// <param name="obj">The other object to compare.</param>
- /// <returns>Whether or not the AABB structure and the other object are equal.</returns>
+ /// <param name="obj">The object to compare with.</param>
+ /// <returns>Whether or not the AABB and the object are equal.</returns>
public override bool Equals(object obj)
{
if (obj is AABB)
@@ -692,10 +711,12 @@ namespace Godot
}
/// <summary>
- /// Returns <see langword="true"/> if this AABB and <paramref name="other"/> are equal
+ /// Returns <see langword="true"/> if the AABBs are exactly equal.
+ /// Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
/// </summary>
- /// <param name="other">The other AABB to compare.</param>
- /// <returns>Whether or not the AABBs are equal.</returns>
+ /// <param name="other">The other AABB.</param>
+ /// <returns>Whether or not the AABBs are exactly equal.</returns>
public bool Equals(AABB other)
{
return _position == other._position && _size == other._size;
diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Basis.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Basis.cs
index 0fb1df6c2f..bfbf1a097e 100644
--- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Basis.cs
+++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Basis.cs
@@ -827,6 +827,14 @@ namespace Godot
Row2 = new Vector3(xz, yz, zz);
}
+ /// <summary>
+ /// Composes these two basis matrices by multiplying them
+ /// together. This has the effect of transforming the second basis
+ /// (the child) by the first basis (the parent).
+ /// </summary>
+ /// <param name="left">The parent basis.</param>
+ /// <param name="right">The child basis.</param>
+ /// <returns>The composed basis.</returns>
public static Basis operator *(Basis left, Basis right)
{
return new Basis
@@ -837,21 +845,40 @@ namespace Godot
);
}
+ /// <summary>
+ /// Returns <see langword="true"/> if the basis matrices are exactly
+ /// equal. Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
+ /// </summary>
+ /// <param name="left">The left basis.</param>
+ /// <param name="right">The right basis.</param>
+ /// <returns>Whether or not the basis matrices are exactly equal.</returns>
public static bool operator ==(Basis left, Basis right)
{
return left.Equals(right);
}
+ /// <summary>
+ /// Returns <see langword="true"/> if the basis matrices are not equal.
+ /// Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
+ /// </summary>
+ /// <param name="left">The left basis.</param>
+ /// <param name="right">The right basis.</param>
+ /// <returns>Whether or not the basis matrices are not equal.</returns>
public static bool operator !=(Basis left, Basis right)
{
return !left.Equals(right);
}
/// <summary>
- /// Returns <see langword="true"/> if this basis and <paramref name="obj"/> are equal.
+ /// Returns <see langword="true"/> if the <see cref="Basis"/> is
+ /// exactly equal to the given object (<see paramref="obj"/>).
+ /// Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
/// </summary>
- /// <param name="obj">The other object to compare.</param>
- /// <returns>Whether or not the basis and the other object are equal.</returns>
+ /// <param name="obj">The object to compare with.</param>
+ /// <returns>Whether or not the basis matrix and the object are exactly equal.</returns>
public override bool Equals(object obj)
{
if (obj is Basis)
@@ -863,10 +890,12 @@ namespace Godot
}
/// <summary>
- /// Returns <see langword="true"/> if this basis and <paramref name="other"/> are equal
+ /// Returns <see langword="true"/> if the basis matrices are exactly
+ /// equal. Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
/// </summary>
- /// <param name="other">The other basis to compare.</param>
- /// <returns>Whether or not the bases are equal.</returns>
+ /// <param name="other">The other basis.</param>
+ /// <returns>Whether or not the basis matrices are exactly equal.</returns>
public bool Equals(Basis other)
{
return Row0.Equals(other.Row0) && Row1.Equals(other.Row1) && Row2.Equals(other.Row2);
diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Color.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Color.cs
index 2a869bc335..fc9d40ca48 100644
--- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Color.cs
+++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Color.cs
@@ -878,6 +878,13 @@ namespace Godot
return true;
}
+ /// <summary>
+ /// Adds each component of the <see cref="Color"/>
+ /// with the components of the given <see cref="Color"/>.
+ /// </summary>
+ /// <param name="left">The left color.</param>
+ /// <param name="right">The right color.</param>
+ /// <returns>The added color.</returns>
public static Color operator +(Color left, Color right)
{
left.r += right.r;
@@ -887,6 +894,13 @@ namespace Godot
return left;
}
+ /// <summary>
+ /// Subtracts each component of the <see cref="Color"/>
+ /// by the components of the given <see cref="Color"/>.
+ /// </summary>
+ /// <param name="left">The left color.</param>
+ /// <param name="right">The right color.</param>
+ /// <returns>The subtracted color.</returns>
public static Color operator -(Color left, Color right)
{
left.r -= right.r;
@@ -896,11 +910,25 @@ namespace Godot
return left;
}
+ /// <summary>
+ /// Inverts the given color. This is equivalent to
+ /// <c>Colors.White - c</c> or
+ /// <c>new Color(1 - c.r, 1 - c.g, 1 - c.b, 1 - c.a)</c>.
+ /// </summary>
+ /// <param name="color">The color to invert.</param>
+ /// <returns>The inverted color</returns>
public static Color operator -(Color color)
{
return Colors.White - color;
}
+ /// <summary>
+ /// Multiplies each component of the <see cref="Color"/>
+ /// by the given <see langword="float"/>.
+ /// </summary>
+ /// <param name="color">The color to multiply.</param>
+ /// <param name="scale">The value to multiply by.</param>
+ /// <returns>The multiplied color.</returns>
public static Color operator *(Color color, float scale)
{
color.r *= scale;
@@ -910,6 +938,13 @@ namespace Godot
return color;
}
+ /// <summary>
+ /// Multiplies each component of the <see cref="Color"/>
+ /// by the given <see langword="float"/>.
+ /// </summary>
+ /// <param name="scale">The value to multiply by.</param>
+ /// <param name="color">The color to multiply.</param>
+ /// <returns>The multiplied color.</returns>
public static Color operator *(float scale, Color color)
{
color.r *= scale;
@@ -919,6 +954,13 @@ namespace Godot
return color;
}
+ /// <summary>
+ /// Multiplies each component of the <see cref="Color"/>
+ /// by the components of the given <see cref="Color"/>.
+ /// </summary>
+ /// <param name="left">The left color.</param>
+ /// <param name="right">The right color.</param>
+ /// <returns>The multiplied color.</returns>
public static Color operator *(Color left, Color right)
{
left.r *= right.r;
@@ -928,6 +970,13 @@ namespace Godot
return left;
}
+ /// <summary>
+ /// Divides each component of the <see cref="Color"/>
+ /// by the given <see langword="float"/>.
+ /// </summary>
+ /// <param name="color">The dividend vector.</param>
+ /// <param name="scale">The divisor value.</param>
+ /// <returns>The divided color.</returns>
public static Color operator /(Color color, float scale)
{
color.r /= scale;
@@ -937,6 +986,13 @@ namespace Godot
return color;
}
+ /// <summary>
+ /// Divides each component of the <see cref="Color"/>
+ /// by the components of the given <see cref="Color"/>.
+ /// </summary>
+ /// <param name="left">The dividend color.</param>
+ /// <param name="right">The divisor color.</param>
+ /// <returns>The divided color.</returns>
public static Color operator /(Color left, Color right)
{
left.r /= right.r;
@@ -946,23 +1002,51 @@ namespace Godot
return left;
}
+ /// <summary>
+ /// Returns <see langword="true"/> if the colors are exactly equal.
+ /// Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
+ /// </summary>
+ /// <param name="left">The left color.</param>
+ /// <param name="right">The right color.</param>
+ /// <returns>Whether or not the colors are equal.</returns>
public static bool operator ==(Color left, Color right)
{
return left.Equals(right);
}
+ /// <summary>
+ /// Returns <see langword="true"/> if the colors are not equal.
+ /// Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
+ /// </summary>
+ /// <param name="left">The left color.</param>
+ /// <param name="right">The right color.</param>
+ /// <returns>Whether or not the colors are equal.</returns>
public static bool operator !=(Color left, Color right)
{
return !left.Equals(right);
}
+ /// <summary>
+ /// Compares two <see cref="Color"/>s by first checking if
+ /// the red value of the <paramref name="left"/> color is less than
+ /// the red value of the <paramref name="right"/> color.
+ /// If the red values are exactly equal, then it repeats this check
+ /// with the green values of the two colors, then with the blue values,
+ /// and then with the alpha value.
+ /// This operator is useful for sorting colors.
+ /// </summary>
+ /// <param name="left">The left color.</param>
+ /// <param name="right">The right color.</param>
+ /// <returns>Whether or not the left is less than the right.</returns>
public static bool operator <(Color left, Color right)
{
- if (Mathf.IsEqualApprox(left.r, right.r))
+ if (left.r == right.r)
{
- if (Mathf.IsEqualApprox(left.g, right.g))
+ if (left.g == right.g)
{
- if (Mathf.IsEqualApprox(left.b, right.b))
+ if (left.b == right.b)
{
return left.a < right.a;
}
@@ -973,13 +1057,25 @@ namespace Godot
return left.r < right.r;
}
+ /// <summary>
+ /// Compares two <see cref="Color"/>s by first checking if
+ /// the red value of the <paramref name="left"/> color is greater than
+ /// the red value of the <paramref name="right"/> color.
+ /// If the red values are exactly equal, then it repeats this check
+ /// with the green values of the two colors, then with the blue values,
+ /// and then with the alpha value.
+ /// This operator is useful for sorting colors.
+ /// </summary>
+ /// <param name="left">The left color.</param>
+ /// <param name="right">The right color.</param>
+ /// <returns>Whether or not the left is greater than the right.</returns>
public static bool operator >(Color left, Color right)
{
- if (Mathf.IsEqualApprox(left.r, right.r))
+ if (left.r == right.r)
{
- if (Mathf.IsEqualApprox(left.g, right.g))
+ if (left.g == right.g)
{
- if (Mathf.IsEqualApprox(left.b, right.b))
+ if (left.b == right.b)
{
return left.a > right.a;
}
@@ -991,6 +1087,64 @@ namespace Godot
}
/// <summary>
+ /// Compares two <see cref="Color"/>s by first checking if
+ /// the red value of the <paramref name="left"/> color is less than
+ /// or equal to the red value of the <paramref name="right"/> color.
+ /// If the red values are exactly equal, then it repeats this check
+ /// with the green values of the two colors, then with the blue values,
+ /// and then with the alpha value.
+ /// This operator is useful for sorting colors.
+ /// </summary>
+ /// <param name="left">The left color.</param>
+ /// <param name="right">The right color.</param>
+ /// <returns>Whether or not the left is less than or equal to the right.</returns>
+ public static bool operator <=(Color left, Color right)
+ {
+ if (left.r == right.r)
+ {
+ if (left.g == right.g)
+ {
+ if (left.b == right.b)
+ {
+ return left.a <= right.a;
+ }
+ return left.b < right.b;
+ }
+ return left.g < right.g;
+ }
+ return left.r < right.r;
+ }
+
+ /// <summary>
+ /// Compares two <see cref="Color"/>s by first checking if
+ /// the red value of the <paramref name="left"/> color is greater than
+ /// or equal to the red value of the <paramref name="right"/> color.
+ /// If the red values are exactly equal, then it repeats this check
+ /// with the green values of the two colors, then with the blue values,
+ /// and then with the alpha value.
+ /// This operator is useful for sorting colors.
+ /// </summary>
+ /// <param name="left">The left color.</param>
+ /// <param name="right">The right color.</param>
+ /// <returns>Whether or not the left is greater than or equal to the right.</returns>
+ public static bool operator >=(Color left, Color right)
+ {
+ if (left.r == right.r)
+ {
+ if (left.g == right.g)
+ {
+ if (left.b == right.b)
+ {
+ return left.a >= right.a;
+ }
+ return left.b > right.b;
+ }
+ return left.g > right.g;
+ }
+ return left.r > right.r;
+ }
+
+ /// <summary>
/// Returns <see langword="true"/> if this color and <paramref name="obj"/> are equal.
/// </summary>
/// <param name="obj">The other object to compare.</param>
@@ -1006,9 +1160,11 @@ namespace Godot
}
/// <summary>
- /// Returns <see langword="true"/> if this color and <paramref name="other"/> are equal
+ /// Returns <see langword="true"/> if the colors are exactly equal.
+ /// Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
/// </summary>
- /// <param name="other">The other color to compare.</param>
+ /// <param name="other">The other color.</param>
/// <returns>Whether or not the colors are equal.</returns>
public bool Equals(Color other)
{
diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Colors.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Colors.cs
index d64c8b563e..68c821b447 100644
--- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Colors.cs
+++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Colors.cs
@@ -158,6 +158,7 @@ namespace Godot
{"YELLOWGREEN", new Color(0.60f, 0.80f, 0.20f)},
};
+#pragma warning disable CS1591 // Disable warning: "Missing XML comment for publicly visible type or member"
public static Color AliceBlue { get { return namedColors["ALICEBLUE"]; } }
public static Color AntiqueWhite { get { return namedColors["ANTIQUEWHITE"]; } }
public static Color Aqua { get { return namedColors["AQUA"]; } }
@@ -304,5 +305,6 @@ namespace Godot
public static Color WhiteSmoke { get { return namedColors["WHITESMOKE"]; } }
public static Color Yellow { get { return namedColors["YELLOW"]; } }
public static Color YellowGreen { get { return namedColors["YELLOWGREEN"]; } }
+#pragma warning restore CS1591
}
}
diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Dictionary.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Dictionary.cs
index 2dfe304aaa..75240b0c09 100644
--- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Dictionary.cs
+++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Dictionary.cs
@@ -314,13 +314,13 @@ namespace Godot.Collections
internal static extern int godot_icall_Dictionary_Count(IntPtr ptr);
[MethodImpl(MethodImplOptions.InternalCall)]
- internal extern static int godot_icall_Dictionary_KeyValuePairs(IntPtr ptr, out IntPtr keys, out IntPtr values);
+ internal static extern int godot_icall_Dictionary_KeyValuePairs(IntPtr ptr, out IntPtr keys, out IntPtr values);
[MethodImpl(MethodImplOptions.InternalCall)]
- internal extern static void godot_icall_Dictionary_KeyValuePairAt(IntPtr ptr, int index, out object key, out object value);
+ internal static extern void godot_icall_Dictionary_KeyValuePairAt(IntPtr ptr, int index, out object key, out object value);
[MethodImpl(MethodImplOptions.InternalCall)]
- internal extern static void godot_icall_Dictionary_Add(IntPtr ptr, object key, object value);
+ internal static extern void godot_icall_Dictionary_Add(IntPtr ptr, object key, object value);
[MethodImpl(MethodImplOptions.InternalCall)]
internal static extern void godot_icall_Dictionary_Clear(IntPtr ptr);
diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/GD.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/GD.cs
index ef42374041..a3afc83222 100644
--- a/modules/mono/glue/GodotSharp/GodotSharp/Core/GD.cs
+++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/GD.cs
@@ -323,6 +323,16 @@ namespace Godot
}
/// <summary>
+ /// Returns a normally-distributed pseudo-random number, using Box-Muller transform with the specified <c>mean</c> and a standard <c>deviation</c>.
+ /// This is also called Gaussian distribution.
+ /// </summary>
+ /// <returns>A random normally-distributed <see langword="float"/> number.</returns>
+ public static double Randfn(double mean, double deviation)
+ {
+ return godot_icall_GD_randfn(mean, deviation);
+ }
+
+ /// <summary>
/// Returns a random unsigned 32-bit integer.
/// Use remainder to obtain a random value in the interval <c>[0, N - 1]</c> (where N is smaller than 2^32).
/// </summary>
@@ -564,19 +574,22 @@ namespace Godot
internal static extern void godot_icall_GD_printt(object[] what);
[MethodImpl(MethodImplOptions.InternalCall)]
- internal static extern float godot_icall_GD_randf();
+ internal static extern void godot_icall_GD_randomize();
[MethodImpl(MethodImplOptions.InternalCall)]
internal static extern uint godot_icall_GD_randi();
[MethodImpl(MethodImplOptions.InternalCall)]
- internal static extern void godot_icall_GD_randomize();
+ internal static extern float godot_icall_GD_randf();
+
+ [MethodImpl(MethodImplOptions.InternalCall)]
+ internal static extern int godot_icall_GD_randi_range(int from, int to);
[MethodImpl(MethodImplOptions.InternalCall)]
internal static extern double godot_icall_GD_randf_range(double from, double to);
[MethodImpl(MethodImplOptions.InternalCall)]
- internal static extern int godot_icall_GD_randi_range(int from, int to);
+ internal static extern double godot_icall_GD_randfn(double mean, double deviation);
[MethodImpl(MethodImplOptions.InternalCall)]
internal static extern uint godot_icall_GD_rand_seed(ulong seed, out ulong newSeed);
diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Mathf.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Mathf.cs
index 6f7fac7429..fbc8ff64a6 100644
--- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Mathf.cs
+++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Mathf.cs
@@ -693,5 +693,23 @@ namespace Godot
}
return min + ((((value - min) % range) + range) % range);
}
+
+ private static real_t Fract(real_t value)
+ {
+ return value - (real_t)Math.Floor(value);
+ }
+
+ /// <summary>
+ /// Returns the [code]value[/code] wrapped between [code]0[/code] and the [code]length[/code].
+ /// If the limit is reached, the next value the function returned is decreased to the [code]0[/code] side or increased to the [code]length[/code] side (like a triangle wave).
+ /// If [code]length[/code] is less than zero, it becomes positive.
+ /// </summary>
+ /// <param name="value">The value to pingpong.</param>
+ /// <param name="length">The maximum value of the function.</param>
+ /// <returns>The ping-ponged value.</returns>
+ public static real_t PingPong(real_t value, real_t length)
+ {
+ return (length != (real_t)0.0) ? Abs(Fract((value - length) / (length * (real_t)2.0)) * length * (real_t)2.0 - length) : (real_t)0.0;
+ }
}
}
diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Plane.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Plane.cs
index 66f7b745f7..63af1c5892 100644
--- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Plane.cs
+++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Plane.cs
@@ -309,16 +309,43 @@ namespace Godot
D = _normal.Dot(v1);
}
+ /// <summary>
+ /// Returns the negative value of the <see cref="Plane"/>.
+ /// This is the same as writing <c>new Plane(-p.Normal, -p.D)</c>.
+ /// This operation flips the direction of the normal vector and
+ /// also flips the distance value, resulting in a Plane that is
+ /// in the same place, but facing the opposite direction.
+ /// </summary>
+ /// <param name="plane">The plane to negate/flip.</param>
+ /// <returns>The negated/flipped plane.</returns>
public static Plane operator -(Plane plane)
{
return new Plane(-plane._normal, -plane.D);
}
+ /// <summary>
+ /// Returns <see langword="true"/> if the
+ /// <see cref="Plane"/>s are exactly equal.
+ /// Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
+ /// </summary>
+ /// <param name="left">The left rect.</param>
+ /// <param name="right">The right rect.</param>
+ /// <returns>Whether or not the planes are exactly equal.</returns>
public static bool operator ==(Plane left, Plane right)
{
return left.Equals(right);
}
+ /// <summary>
+ /// Returns <see langword="true"/> if the
+ /// <see cref="Plane"/>s are not equal.
+ /// Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
+ /// </summary>
+ /// <param name="left">The left rect.</param>
+ /// <param name="right">The right rect.</param>
+ /// <returns>Whether or not the planes are not equal.</returns>
public static bool operator !=(Plane left, Plane right)
{
return !left.Equals(right);
@@ -328,7 +355,7 @@ namespace Godot
/// Returns <see langword="true"/> if this plane and <paramref name="obj"/> are equal.
/// </summary>
/// <param name="obj">The other object to compare.</param>
- /// <returns>Whether or not the plane and the other object are equal.</returns>
+ /// <returns>Whether or not the plane and the other object are exactly equal.</returns>
public override bool Equals(object obj)
{
if (obj is Plane)
@@ -343,7 +370,7 @@ namespace Godot
/// Returns <see langword="true"/> if this plane and <paramref name="other"/> are equal.
/// </summary>
/// <param name="other">The other plane to compare.</param>
- /// <returns>Whether or not the planes are equal.</returns>
+ /// <returns>Whether or not the planes are exactly equal.</returns>
public bool Equals(Plane other)
{
return _normal == other._normal && D == other.D;
diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Quaternion.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Quaternion.cs
index 1694ac0320..dfb8e87bce 100644
--- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Quaternion.cs
+++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Quaternion.cs
@@ -446,6 +446,14 @@ namespace Godot
}
}
+ /// <summary>
+ /// Composes these two quaternions by multiplying them together.
+ /// This has the effect of rotating the second quaternion
+ /// (the child) by the first quaternion (the parent).
+ /// </summary>
+ /// <param name="left">The parent quaternion.</param>
+ /// <param name="right">The child quaternion.</param>
+ /// <returns>The composed quaternion.</returns>
public static Quaternion operator *(Quaternion left, Quaternion right)
{
return new Quaternion
@@ -457,63 +465,143 @@ namespace Godot
);
}
+ /// <summary>
+ /// Adds each component of the left <see cref="Quaternion"/>
+ /// to the right <see cref="Quaternion"/>. This operation is not
+ /// meaningful on its own, but it can be used as a part of a
+ /// larger expression, such as approximating an intermediate
+ /// rotation between two nearby rotations.
+ /// </summary>
+ /// <param name="left">The left quaternion to add.</param>
+ /// <param name="right">The right quaternion to add.</param>
+ /// <returns>The added quaternion.</returns>
public static Quaternion operator +(Quaternion left, Quaternion right)
{
return new Quaternion(left.x + right.x, left.y + right.y, left.z + right.z, left.w + right.w);
}
+ /// <summary>
+ /// Subtracts each component of the left <see cref="Quaternion"/>
+ /// by the right <see cref="Quaternion"/>. This operation is not
+ /// meaningful on its own, but it can be used as a part of a
+ /// larger expression.
+ /// </summary>
+ /// <param name="left">The left quaternion to subtract.</param>
+ /// <param name="right">The right quaternion to subtract.</param>
+ /// <returns>The subtracted quaternion.</returns>
public static Quaternion operator -(Quaternion left, Quaternion right)
{
return new Quaternion(left.x - right.x, left.y - right.y, left.z - right.z, left.w - right.w);
}
- public static Quaternion operator -(Quaternion left)
+ /// <summary>
+ /// Returns the negative value of the <see cref="Quaternion"/>.
+ /// This is the same as writing
+ /// <c>new Quaternion(-q.x, -q.y, -q.z, -q.w)</c>. This operation
+ /// results in a quaternion that represents the same rotation.
+ /// </summary>
+ /// <param name="quat">The quaternion to negate.</param>
+ /// <returns>The negated quaternion.</returns>
+ public static Quaternion operator -(Quaternion quat)
{
- return new Quaternion(-left.x, -left.y, -left.z, -left.w);
+ return new Quaternion(-quat.x, -quat.y, -quat.z, -quat.w);
}
- public static Quaternion operator *(Quaternion left, Vector3 right)
+ /// <summary>
+ /// Rotates (multiplies) the <see cref="Vector3"/>
+ /// by the given <see cref="Quaternion"/>.
+ /// </summary>
+ /// <param name="quat">The quaternion to rotate by.</param>
+ /// <param name="vec">The vector to rotate.</param>
+ /// <returns>The rotated vector.</returns>
+ public static Vector3 operator *(Quaternion quat, Vector3 vec)
{
- return new Quaternion
- (
- (left.w * right.x) + (left.y * right.z) - (left.z * right.y),
- (left.w * right.y) + (left.z * right.x) - (left.x * right.z),
- (left.w * right.z) + (left.x * right.y) - (left.y * right.x),
- -(left.x * right.x) - (left.y * right.y) - (left.z * right.z)
- );
+#if DEBUG
+ if (!quat.IsNormalized())
+ {
+ throw new InvalidOperationException("Quaternion is not normalized.");
+ }
+#endif
+ var u = new Vector3(quat.x, quat.y, quat.z);
+ Vector3 uv = u.Cross(vec);
+ return vec + (((uv * quat.w) + u.Cross(uv)) * 2);
}
- public static Quaternion operator *(Vector3 left, Quaternion right)
+ /// <summary>
+ /// Inversely rotates (multiplies) the <see cref="Vector3"/>
+ /// by the given <see cref="Quaternion"/>.
+ /// </summary>
+ /// <param name="vec">The vector to rotate.</param>
+ /// <param name="quat">The quaternion to rotate by.</param>
+ /// <returns>The inversely rotated vector.</returns>
+ public static Vector3 operator *(Vector3 vec, Quaternion quat)
{
- return new Quaternion
- (
- (right.w * left.x) + (right.y * left.z) - (right.z * left.y),
- (right.w * left.y) + (right.z * left.x) - (right.x * left.z),
- (right.w * left.z) + (right.x * left.y) - (right.y * left.x),
- -(right.x * left.x) - (right.y * left.y) - (right.z * left.z)
- );
+ return quat.Inverse() * vec;
}
+ /// <summary>
+ /// Multiplies each component of the <see cref="Quaternion"/>
+ /// by the given <see cref="real_t"/>. This operation is not
+ /// meaningful on its own, but it can be used as a part of a
+ /// larger expression.
+ /// </summary>
+ /// <param name="left">The quaternion to multiply.</param>
+ /// <param name="right">The value to multiply by.</param>
+ /// <returns>The multiplied quaternion.</returns>
public static Quaternion operator *(Quaternion left, real_t right)
{
return new Quaternion(left.x * right, left.y * right, left.z * right, left.w * right);
}
+ /// <summary>
+ /// Multiplies each component of the <see cref="Quaternion"/>
+ /// by the given <see cref="real_t"/>. This operation is not
+ /// meaningful on its own, but it can be used as a part of a
+ /// larger expression.
+ /// </summary>
+ /// <param name="left">The value to multiply by.</param>
+ /// <param name="right">The quaternion to multiply.</param>
+ /// <returns>The multiplied quaternion.</returns>
public static Quaternion operator *(real_t left, Quaternion right)
{
return new Quaternion(right.x * left, right.y * left, right.z * left, right.w * left);
}
+ /// <summary>
+ /// Divides each component of the <see cref="Quaternion"/>
+ /// by the given <see cref="real_t"/>. This operation is not
+ /// meaningful on its own, but it can be used as a part of a
+ /// larger expression.
+ /// </summary>
+ /// <param name="left">The quaternion to divide.</param>
+ /// <param name="right">The value to divide by.</param>
+ /// <returns>The divided quaternion.</returns>
public static Quaternion operator /(Quaternion left, real_t right)
{
return left * (1.0f / right);
}
+ /// <summary>
+ /// Returns <see langword="true"/> if the quaternions are exactly equal.
+ /// Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
+ /// </summary>
+ /// <param name="left">The left quaternion.</param>
+ /// <param name="right">The right quaternion.</param>
+ /// <returns>Whether or not the quaternions are exactly equal.</returns>
public static bool operator ==(Quaternion left, Quaternion right)
{
return left.Equals(right);
}
+ /// <summary>
+ /// Returns <see langword="true"/> if the quaternions are not equal.
+ /// Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
+ /// </summary>
+ /// <param name="left">The left quaternion.</param>
+ /// <param name="right">The right quaternion.</param>
+ /// <returns>Whether or not the quaternions are not equal.</returns>
public static bool operator !=(Quaternion left, Quaternion right)
{
return !left.Equals(right);
@@ -523,7 +611,7 @@ namespace Godot
/// Returns <see langword="true"/> if this quaternion and <paramref name="obj"/> are equal.
/// </summary>
/// <param name="obj">The other object to compare.</param>
- /// <returns>Whether or not the quaternion and the other object are equal.</returns>
+ /// <returns>Whether or not the quaternion and the other object are exactly equal.</returns>
public override bool Equals(object obj)
{
if (obj is Quaternion)
@@ -538,7 +626,7 @@ namespace Godot
/// Returns <see langword="true"/> if this quaternion and <paramref name="other"/> are equal.
/// </summary>
/// <param name="other">The other quaternion to compare.</param>
- /// <returns>Whether or not the quaternions are equal.</returns>
+ /// <returns>Whether or not the quaternions are exactly equal.</returns>
public bool Equals(Quaternion other)
{
return x == other.x && y == other.y && z == other.z && w == other.w;
diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Rect2.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Rect2.cs
index af94484577..ec16920fed 100644
--- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Rect2.cs
+++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Rect2.cs
@@ -396,11 +396,29 @@ namespace Godot
_size = new Vector2(width, height);
}
+ /// <summary>
+ /// Returns <see langword="true"/> if the
+ /// <see cref="Rect2"/>s are exactly equal.
+ /// Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
+ /// </summary>
+ /// <param name="left">The left rect.</param>
+ /// <param name="right">The right rect.</param>
+ /// <returns>Whether or not the rects are exactly equal.</returns>
public static bool operator ==(Rect2 left, Rect2 right)
{
return left.Equals(right);
}
+ /// <summary>
+ /// Returns <see langword="true"/> if the
+ /// <see cref="Rect2"/>s are not equal.
+ /// Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
+ /// </summary>
+ /// <param name="left">The left rect.</param>
+ /// <param name="right">The right rect.</param>
+ /// <returns>Whether or not the rects are not equal.</returns>
public static bool operator !=(Rect2 left, Rect2 right)
{
return !left.Equals(right);
@@ -410,7 +428,7 @@ namespace Godot
/// Returns <see langword="true"/> if this rect and <paramref name="obj"/> are equal.
/// </summary>
/// <param name="obj">The other object to compare.</param>
- /// <returns>Whether or not the rect and the other object are equal.</returns>
+ /// <returns>Whether or not the rect and the other object are exactly equal.</returns>
public override bool Equals(object obj)
{
if (obj is Rect2)
@@ -425,7 +443,7 @@ namespace Godot
/// Returns <see langword="true"/> if this rect and <paramref name="other"/> are equal.
/// </summary>
/// <param name="other">The other rect to compare.</param>
- /// <returns>Whether or not the rects are equal.</returns>
+ /// <returns>Whether or not the rects are exactly equal.</returns>
public bool Equals(Rect2 other)
{
return _position.Equals(other._position) && _size.Equals(other._size);
diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Rect2i.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Rect2i.cs
index 03f406a910..5d53b8330e 100644
--- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Rect2i.cs
+++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Rect2i.cs
@@ -377,11 +377,25 @@ namespace Godot
_size = new Vector2i(width, height);
}
+ /// <summary>
+ /// Returns <see langword="true"/> if the
+ /// <see cref="Rect2i"/>s are exactly equal.
+ /// </summary>
+ /// <param name="left">The left rect.</param>
+ /// <param name="right">The right rect.</param>
+ /// <returns>Whether or not the rects are equal.</returns>
public static bool operator ==(Rect2i left, Rect2i right)
{
return left.Equals(right);
}
+ /// <summary>
+ /// Returns <see langword="true"/> if the
+ /// <see cref="Rect2i"/>s are not equal.
+ /// </summary>
+ /// <param name="left">The left rect.</param>
+ /// <param name="right">The right rect.</param>
+ /// <returns>Whether or not the rects are not equal.</returns>
public static bool operator !=(Rect2i left, Rect2i right)
{
return !left.Equals(right);
diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/StringExtensions.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/StringExtensions.cs
index 6b3eb09581..d9ee684c5b 100644
--- a/modules/mono/glue/GodotSharp/GodotSharp/Core/StringExtensions.cs
+++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/StringExtensions.cs
@@ -1345,7 +1345,7 @@ namespace Godot
}
[MethodImpl(MethodImplOptions.InternalCall)]
- internal extern static string godot_icall_String_simplify_path(string str);
+ internal static extern string godot_icall_String_simplify_path(string str);
/// <summary>
/// Split the string by a divisor string, return an array of the substrings.
diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Transform2D.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Transform2D.cs
index c82c5f4588..6f1d9574a8 100644
--- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Transform2D.cs
+++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Transform2D.cs
@@ -447,6 +447,14 @@ namespace Godot
this.origin = origin;
}
+ /// <summary>
+ /// Composes these two transformation matrices by multiplying them
+ /// together. This has the effect of transforming the second transform
+ /// (the child) by the first transform (the parent).
+ /// </summary>
+ /// <param name="left">The parent transform.</param>
+ /// <param name="right">The child transform.</param>
+ /// <returns>The composed transform.</returns>
public static Transform2D operator *(Transform2D left, Transform2D right)
{
left.origin = left * right.origin;
@@ -554,31 +562,52 @@ namespace Godot
return newArray;
}
+ /// <summary>
+ /// Returns <see langword="true"/> if the transforms are exactly equal.
+ /// Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
+ /// </summary>
+ /// <param name="left">The left transform.</param>
+ /// <param name="right">The right transform.</param>
+ /// <returns>Whether or not the transforms are exactly equal.</returns>
public static bool operator ==(Transform2D left, Transform2D right)
{
return left.Equals(right);
}
+ /// <summary>
+ /// Returns <see langword="true"/> if the transforms are not equal.
+ /// Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
+ /// </summary>
+ /// <param name="left">The left transform.</param>
+ /// <param name="right">The right transform.</param>
+ /// <returns>Whether or not the transforms are not equal.</returns>
public static bool operator !=(Transform2D left, Transform2D right)
{
return !left.Equals(right);
}
/// <summary>
- /// Returns <see langword="true"/> if this transform and <paramref name="obj"/> are equal.
+ /// Returns <see langword="true"/> if the transform is exactly equal
+ /// to the given object (<see paramref="obj"/>).
+ /// Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
/// </summary>
- /// <param name="obj">The other object to compare.</param>
- /// <returns>Whether or not the transform and the other object are equal.</returns>
+ /// <param name="obj">The object to compare with.</param>
+ /// <returns>Whether or not the transform and the object are exactly equal.</returns>
public override bool Equals(object obj)
{
return obj is Transform2D transform2D && Equals(transform2D);
}
/// <summary>
- /// Returns <see langword="true"/> if this transform and <paramref name="other"/> are equal.
+ /// Returns <see langword="true"/> if the transforms are exactly equal.
+ /// Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
/// </summary>
/// <param name="other">The other transform to compare.</param>
- /// <returns>Whether or not the matrices are equal.</returns>
+ /// <returns>Whether or not the matrices are exactly equal.</returns>
public bool Equals(Transform2D other)
{
return x.Equals(other.x) && y.Equals(other.y) && origin.Equals(other.origin);
diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Transform3D.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Transform3D.cs
index 7176cd60dc..4bb8308c12 100644
--- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Transform3D.cs
+++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Transform3D.cs
@@ -352,6 +352,14 @@ namespace Godot
this.origin = origin;
}
+ /// <summary>
+ /// Composes these two transformation matrices by multiplying them
+ /// together. This has the effect of transforming the second transform
+ /// (the child) by the first transform (the parent).
+ /// </summary>
+ /// <param name="left">The parent transform.</param>
+ /// <param name="right">The child transform.</param>
+ /// <returns>The composed transform.</returns>
public static Transform3D operator *(Transform3D left, Transform3D right)
{
left.origin = left.Xform(right.origin);
@@ -359,21 +367,40 @@ namespace Godot
return left;
}
+ /// <summary>
+ /// Returns <see langword="true"/> if the transforms are exactly equal.
+ /// Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
+ /// </summary>
+ /// <param name="left">The left transform.</param>
+ /// <param name="right">The right transform.</param>
+ /// <returns>Whether or not the transforms are exactly equal.</returns>
public static bool operator ==(Transform3D left, Transform3D right)
{
return left.Equals(right);
}
+ /// <summary>
+ /// Returns <see langword="true"/> if the transforms are not equal.
+ /// Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
+ /// </summary>
+ /// <param name="left">The left transform.</param>
+ /// <param name="right">The right transform.</param>
+ /// <returns>Whether or not the transforms are not equal.</returns>
public static bool operator !=(Transform3D left, Transform3D right)
{
return !left.Equals(right);
}
/// <summary>
- /// Returns <see langword="true"/> if this transform and <paramref name="obj"/> are equal.
+ /// Returns <see langword="true"/> if the transform is exactly equal
+ /// to the given object (<see paramref="obj"/>).
+ /// Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
/// </summary>
- /// <param name="obj">The other object to compare.</param>
- /// <returns>Whether or not the transform and the other object are equal.</returns>
+ /// <param name="obj">The object to compare with.</param>
+ /// <returns>Whether or not the transform and the object are exactly equal.</returns>
public override bool Equals(object obj)
{
if (obj is Transform3D)
@@ -385,10 +412,12 @@ namespace Godot
}
/// <summary>
- /// Returns <see langword="true"/> if this transform and <paramref name="other"/> are equal.
+ /// Returns <see langword="true"/> if the transforms are exactly equal.
+ /// Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
/// </summary>
/// <param name="other">The other transform to compare.</param>
- /// <returns>Whether or not the matrices are equal.</returns>
+ /// <returns>Whether or not the matrices are exactly equal.</returns>
public bool Equals(Transform3D other)
{
return basis.Equals(other.basis) && origin.Equals(other.origin);
diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector2.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector2.cs
index fe70d71cce..0c3331900a 100644
--- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector2.cs
+++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector2.cs
@@ -642,6 +642,13 @@ namespace Godot
return new Vector2(Mathf.Cos(angle), Mathf.Sin(angle));
}
+ /// <summary>
+ /// Adds each component of the <see cref="Vector2"/>
+ /// with the components of the given <see cref="Vector2"/>.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>The added vector.</returns>
public static Vector2 operator +(Vector2 left, Vector2 right)
{
left.x += right.x;
@@ -649,6 +656,13 @@ namespace Godot
return left;
}
+ /// <summary>
+ /// Subtracts each component of the <see cref="Vector2"/>
+ /// by the components of the given <see cref="Vector2"/>.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>The subtracted vector.</returns>
public static Vector2 operator -(Vector2 left, Vector2 right)
{
left.x -= right.x;
@@ -656,6 +670,15 @@ namespace Godot
return left;
}
+ /// <summary>
+ /// Returns the negative value of the <see cref="Vector2"/>.
+ /// This is the same as writing <c>new Vector2(-v.x, -v.y)</c>.
+ /// This operation flips the direction of the vector while
+ /// keeping the same magnitude.
+ /// With floats, the number zero can be either positive or negative.
+ /// </summary>
+ /// <param name="vec">The vector to negate/flip.</param>
+ /// <returns>The negated/flipped vector.</returns>
public static Vector2 operator -(Vector2 vec)
{
vec.x = -vec.x;
@@ -663,6 +686,13 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Multiplies each component of the <see cref="Vector2"/>
+ /// by the given <see cref="real_t"/>.
+ /// </summary>
+ /// <param name="vec">The vector to multiply.</param>
+ /// <param name="scale">The scale to multiply by.</param>
+ /// <returns>The multiplied vector.</returns>
public static Vector2 operator *(Vector2 vec, real_t scale)
{
vec.x *= scale;
@@ -670,6 +700,13 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Multiplies each component of the <see cref="Vector2"/>
+ /// by the given <see cref="real_t"/>.
+ /// </summary>
+ /// <param name="scale">The scale to multiply by.</param>
+ /// <param name="vec">The vector to multiply.</param>
+ /// <returns>The multiplied vector.</returns>
public static Vector2 operator *(real_t scale, Vector2 vec)
{
vec.x *= scale;
@@ -677,6 +714,13 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Multiplies each component of the <see cref="Vector2"/>
+ /// by the components of the given <see cref="Vector2"/>.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>The multiplied vector.</returns>
public static Vector2 operator *(Vector2 left, Vector2 right)
{
left.x *= right.x;
@@ -684,6 +728,13 @@ namespace Godot
return left;
}
+ /// <summary>
+ /// Multiplies each component of the <see cref="Vector2"/>
+ /// by the given <see cref="real_t"/>.
+ /// </summary>
+ /// <param name="vec">The dividend vector.</param>
+ /// <param name="divisor">The divisor value.</param>
+ /// <returns>The divided vector.</returns>
public static Vector2 operator /(Vector2 vec, real_t divisor)
{
vec.x /= divisor;
@@ -691,6 +742,13 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Divides each component of the <see cref="Vector2"/>
+ /// by the components of the given <see cref="Vector2"/>.
+ /// </summary>
+ /// <param name="vec">The dividend vector.</param>
+ /// <param name="divisorv">The divisor vector.</param>
+ /// <returns>The divided vector.</returns>
public static Vector2 operator /(Vector2 vec, Vector2 divisorv)
{
vec.x /= divisorv.x;
@@ -698,6 +756,22 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Gets the remainder of each component of the <see cref="Vector2"/>
+ /// with the components of the given <see cref="real_t"/>.
+ /// This operation uses truncated division, which is often not desired
+ /// as it does not work well with negative numbers.
+ /// Consider using <see cref="PosMod(real_t)"/> instead
+ /// if you want to handle negative numbers.
+ /// </summary>
+ /// <example>
+ /// <code>
+ /// GD.Print(new Vector2(10, -20) % 7); // Prints "(3, -6)"
+ /// </code>
+ /// </example>
+ /// <param name="vec">The dividend vector.</param>
+ /// <param name="divisor">The divisor value.</param>
+ /// <returns>The remainder vector.</returns>
public static Vector2 operator %(Vector2 vec, real_t divisor)
{
vec.x %= divisor;
@@ -705,6 +779,22 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Gets the remainder of each component of the <see cref="Vector2"/>
+ /// with the components of the given <see cref="Vector2"/>.
+ /// This operation uses truncated division, which is often not desired
+ /// as it does not work well with negative numbers.
+ /// Consider using <see cref="PosMod(Vector2)"/> instead
+ /// if you want to handle negative numbers.
+ /// </summary>
+ /// <example>
+ /// <code>
+ /// GD.Print(new Vector2(10, -20) % new Vector2(7, 8)); // Prints "(3, -4)"
+ /// </code>
+ /// </example>
+ /// <param name="vec">The dividend vector.</param>
+ /// <param name="divisorv">The divisor vector.</param>
+ /// <returns>The remainder vector.</returns>
public static Vector2 operator %(Vector2 vec, Vector2 divisorv)
{
vec.x %= divisorv.x;
@@ -712,16 +802,43 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Returns <see langword="true"/> if the vectors are exactly equal.
+ /// Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>Whether or not the vectors are exactly equal.</returns>
public static bool operator ==(Vector2 left, Vector2 right)
{
return left.Equals(right);
}
+ /// <summary>
+ /// Returns <see langword="true"/> if the vectors are not equal.
+ /// Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>Whether or not the vectors are not equal.</returns>
public static bool operator !=(Vector2 left, Vector2 right)
{
return !left.Equals(right);
}
+ /// <summary>
+ /// Compares two <see cref="Vector2"/> vectors by first checking if
+ /// the X value of the <paramref name="left"/> vector is less than
+ /// the X value of the <paramref name="right"/> vector.
+ /// If the X values are exactly equal, then it repeats this check
+ /// with the Y values of the two vectors.
+ /// This operator is useful for sorting vectors.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>Whether or not the left is less than the right.</returns>
public static bool operator <(Vector2 left, Vector2 right)
{
if (left.x == right.x)
@@ -731,6 +848,17 @@ namespace Godot
return left.x < right.x;
}
+ /// <summary>
+ /// Compares two <see cref="Vector2"/> vectors by first checking if
+ /// the X value of the <paramref name="left"/> vector is greater than
+ /// the X value of the <paramref name="right"/> vector.
+ /// If the X values are exactly equal, then it repeats this check
+ /// with the Y values of the two vectors.
+ /// This operator is useful for sorting vectors.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>Whether or not the left is greater than the right.</returns>
public static bool operator >(Vector2 left, Vector2 right)
{
if (left.x == right.x)
@@ -740,29 +868,54 @@ namespace Godot
return left.x > right.x;
}
+ /// <summary>
+ /// Compares two <see cref="Vector2"/> vectors by first checking if
+ /// the X value of the <paramref name="left"/> vector is less than
+ /// or equal to the X value of the <paramref name="right"/> vector.
+ /// If the X values are exactly equal, then it repeats this check
+ /// with the Y values of the two vectors.
+ /// This operator is useful for sorting vectors.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>Whether or not the left is less than or equal to the right.</returns>
public static bool operator <=(Vector2 left, Vector2 right)
{
if (left.x == right.x)
{
return left.y <= right.y;
}
- return left.x <= right.x;
+ return left.x < right.x;
}
+ /// <summary>
+ /// Compares two <see cref="Vector2"/> vectors by first checking if
+ /// the X value of the <paramref name="left"/> vector is greater than
+ /// or equal to the X value of the <paramref name="right"/> vector.
+ /// If the X values are exactly equal, then it repeats this check
+ /// with the Y values of the two vectors.
+ /// This operator is useful for sorting vectors.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>Whether or not the left is greater than or equal to the right.</returns>
public static bool operator >=(Vector2 left, Vector2 right)
{
if (left.x == right.x)
{
return left.y >= right.y;
}
- return left.x >= right.x;
+ return left.x > right.x;
}
/// <summary>
- /// Returns <see langword="true"/> if this vector and <paramref name="obj"/> are equal.
+ /// Returns <see langword="true"/> if the vector is exactly equal
+ /// to the given object (<see paramref="obj"/>).
+ /// Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
/// </summary>
- /// <param name="obj">The other object to compare.</param>
- /// <returns>Whether or not the vector and the other object are equal.</returns>
+ /// <param name="obj">The object to compare with.</param>
+ /// <returns>Whether or not the vector and the object are equal.</returns>
public override bool Equals(object obj)
{
if (obj is Vector2)
@@ -773,10 +926,12 @@ namespace Godot
}
/// <summary>
- /// Returns <see langword="true"/> if this vector and <paramref name="other"/> are equal.
+ /// Returns <see langword="true"/> if the vectors are exactly equal.
+ /// Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
/// </summary>
- /// <param name="other">The other vector to compare.</param>
- /// <returns>Whether or not the vectors are equal.</returns>
+ /// <param name="other">The other vector.</param>
+ /// <returns>Whether or not the vectors are exactly equal.</returns>
public bool Equals(Vector2 other)
{
return x == other.x && y == other.y;
diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector2i.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector2i.cs
index ca4531d885..6cac16d53b 100644
--- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector2i.cs
+++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector2i.cs
@@ -366,6 +366,13 @@ namespace Godot
this.y = Mathf.RoundToInt(v.y);
}
+ /// <summary>
+ /// Adds each component of the <see cref="Vector2i"/>
+ /// with the components of the given <see cref="Vector2i"/>.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>The added vector.</returns>
public static Vector2i operator +(Vector2i left, Vector2i right)
{
left.x += right.x;
@@ -373,6 +380,13 @@ namespace Godot
return left;
}
+ /// <summary>
+ /// Subtracts each component of the <see cref="Vector2i"/>
+ /// by the components of the given <see cref="Vector2i"/>.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>The subtracted vector.</returns>
public static Vector2i operator -(Vector2i left, Vector2i right)
{
left.x -= right.x;
@@ -380,6 +394,14 @@ namespace Godot
return left;
}
+ /// <summary>
+ /// Returns the negative value of the <see cref="Vector2i"/>.
+ /// This is the same as writing <c>new Vector2i(-v.x, -v.y)</c>.
+ /// This operation flips the direction of the vector while
+ /// keeping the same magnitude.
+ /// </summary>
+ /// <param name="vec">The vector to negate/flip.</param>
+ /// <returns>The negated/flipped vector.</returns>
public static Vector2i operator -(Vector2i vec)
{
vec.x = -vec.x;
@@ -387,6 +409,13 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Multiplies each component of the <see cref="Vector2i"/>
+ /// by the given <see langword="int"/>.
+ /// </summary>
+ /// <param name="vec">The vector to multiply.</param>
+ /// <param name="scale">The scale to multiply by.</param>
+ /// <returns>The multiplied vector.</returns>
public static Vector2i operator *(Vector2i vec, int scale)
{
vec.x *= scale;
@@ -394,6 +423,13 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Multiplies each component of the <see cref="Vector2i"/>
+ /// by the given <see langword="int"/>.
+ /// </summary>
+ /// <param name="scale">The scale to multiply by.</param>
+ /// <param name="vec">The vector to multiply.</param>
+ /// <returns>The multiplied vector.</returns>
public static Vector2i operator *(int scale, Vector2i vec)
{
vec.x *= scale;
@@ -401,6 +437,13 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Multiplies each component of the <see cref="Vector2i"/>
+ /// by the components of the given <see cref="Vector2i"/>.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>The multiplied vector.</returns>
public static Vector2i operator *(Vector2i left, Vector2i right)
{
left.x *= right.x;
@@ -408,6 +451,13 @@ namespace Godot
return left;
}
+ /// <summary>
+ /// Multiplies each component of the <see cref="Vector2i"/>
+ /// by the given <see langword="int"/>.
+ /// </summary>
+ /// <param name="vec">The dividend vector.</param>
+ /// <param name="divisor">The divisor value.</param>
+ /// <returns>The divided vector.</returns>
public static Vector2i operator /(Vector2i vec, int divisor)
{
vec.x /= divisor;
@@ -415,6 +465,13 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Divides each component of the <see cref="Vector2i"/>
+ /// by the components of the given <see cref="Vector2i"/>.
+ /// </summary>
+ /// <param name="vec">The dividend vector.</param>
+ /// <param name="divisorv">The divisor vector.</param>
+ /// <returns>The divided vector.</returns>
public static Vector2i operator /(Vector2i vec, Vector2i divisorv)
{
vec.x /= divisorv.x;
@@ -422,6 +479,22 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Gets the remainder of each component of the <see cref="Vector2i"/>
+ /// with the components of the given <see langword="int"/>.
+ /// This operation uses truncated division, which is often not desired
+ /// as it does not work well with negative numbers.
+ /// Consider using <see cref="PosMod(int)"/> instead
+ /// if you want to handle negative numbers.
+ /// </summary>
+ /// <example>
+ /// <code>
+ /// GD.Print(new Vector2i(10, -20) % 7); // Prints "(3, -6)"
+ /// </code>
+ /// </example>
+ /// <param name="vec">The dividend vector.</param>
+ /// <param name="divisor">The divisor value.</param>
+ /// <returns>The remainder vector.</returns>
public static Vector2i operator %(Vector2i vec, int divisor)
{
vec.x %= divisor;
@@ -429,6 +502,22 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Gets the remainder of each component of the <see cref="Vector2i"/>
+ /// with the components of the given <see cref="Vector2i"/>.
+ /// This operation uses truncated division, which is often not desired
+ /// as it does not work well with negative numbers.
+ /// Consider using <see cref="PosMod(Vector2i)"/> instead
+ /// if you want to handle negative numbers.
+ /// </summary>
+ /// <example>
+ /// <code>
+ /// GD.Print(new Vector2i(10, -20) % new Vector2i(7, 8)); // Prints "(3, -4)"
+ /// </code>
+ /// </example>
+ /// <param name="vec">The dividend vector.</param>
+ /// <param name="divisorv">The divisor vector.</param>
+ /// <returns>The remainder vector.</returns>
public static Vector2i operator %(Vector2i vec, Vector2i divisorv)
{
vec.x %= divisorv.x;
@@ -436,6 +525,13 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Performs a bitwise AND operation with this <see cref="Vector2i"/>
+ /// and the given <see langword="int"/>.
+ /// </summary>
+ /// <param name="vec">The vector to AND with.</param>
+ /// <param name="and">The integer to AND with.</param>
+ /// <returns>The result of the bitwise AND.</returns>
public static Vector2i operator &(Vector2i vec, int and)
{
vec.x &= and;
@@ -443,6 +539,13 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Performs a bitwise AND operation with this <see cref="Vector2i"/>
+ /// and the given <see cref="Vector2i"/>.
+ /// </summary>
+ /// <param name="vec">The left vector to AND with.</param>
+ /// <param name="andv">The right vector to AND with.</param>
+ /// <returns>The result of the bitwise AND.</returns>
public static Vector2i operator &(Vector2i vec, Vector2i andv)
{
vec.x &= andv.x;
@@ -450,50 +553,106 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Returns <see langword="true"/> if the vectors are equal.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>Whether or not the vectors are equal.</returns>
public static bool operator ==(Vector2i left, Vector2i right)
{
return left.Equals(right);
}
+ /// <summary>
+ /// Returns <see langword="true"/> if the vectors are not equal.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>Whether or not the vectors are not equal.</returns>
public static bool operator !=(Vector2i left, Vector2i right)
{
return !left.Equals(right);
}
+ /// <summary>
+ /// Compares two <see cref="Vector2i"/> vectors by first checking if
+ /// the X value of the <paramref name="left"/> vector is less than
+ /// the X value of the <paramref name="right"/> vector.
+ /// If the X values are exactly equal, then it repeats this check
+ /// with the Y values of the two vectors.
+ /// This operator is useful for sorting vectors.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>Whether or not the left is less than the right.</returns>
public static bool operator <(Vector2i left, Vector2i right)
{
- if (left.x.Equals(right.x))
+ if (left.x == right.x)
{
return left.y < right.y;
}
return left.x < right.x;
}
+ /// <summary>
+ /// Compares two <see cref="Vector2i"/> vectors by first checking if
+ /// the X value of the <paramref name="left"/> vector is greater than
+ /// the X value of the <paramref name="right"/> vector.
+ /// If the X values are exactly equal, then it repeats this check
+ /// with the Y values of the two vectors.
+ /// This operator is useful for sorting vectors.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>Whether or not the left is greater than the right.</returns>
public static bool operator >(Vector2i left, Vector2i right)
{
- if (left.x.Equals(right.x))
+ if (left.x == right.x)
{
return left.y > right.y;
}
return left.x > right.x;
}
+ /// <summary>
+ /// Compares two <see cref="Vector2i"/> vectors by first checking if
+ /// the X value of the <paramref name="left"/> vector is less than
+ /// or equal to the X value of the <paramref name="right"/> vector.
+ /// If the X values are exactly equal, then it repeats this check
+ /// with the Y values of the two vectors.
+ /// This operator is useful for sorting vectors.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>Whether or not the left is less than or equal to the right.</returns>
public static bool operator <=(Vector2i left, Vector2i right)
{
- if (left.x.Equals(right.x))
+ if (left.x == right.x)
{
return left.y <= right.y;
}
- return left.x <= right.x;
+ return left.x < right.x;
}
+ /// <summary>
+ /// Compares two <see cref="Vector2i"/> vectors by first checking if
+ /// the X value of the <paramref name="left"/> vector is greater than
+ /// or equal to the X value of the <paramref name="right"/> vector.
+ /// If the X values are exactly equal, then it repeats this check
+ /// with the Y values of the two vectors.
+ /// This operator is useful for sorting vectors.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>Whether or not the left is greater than or equal to the right.</returns>
public static bool operator >=(Vector2i left, Vector2i right)
{
- if (left.x.Equals(right.x))
+ if (left.x == right.x)
{
return left.y >= right.y;
}
- return left.x >= right.x;
+ return left.x > right.x;
}
/// <summary>
@@ -515,10 +674,11 @@ namespace Godot
}
/// <summary>
- /// Returns <see langword="true"/> if this vector and <paramref name="obj"/> are equal.
+ /// Returns <see langword="true"/> if the vector is equal
+ /// to the given object (<see paramref="obj"/>).
/// </summary>
- /// <param name="obj">The other object to compare.</param>
- /// <returns>Whether or not the vector and the other object are equal.</returns>
+ /// <param name="obj">The object to compare with.</param>
+ /// <returns>Whether or not the vector and the object are equal.</returns>
public override bool Equals(object obj)
{
if (obj is Vector2i)
@@ -530,9 +690,9 @@ namespace Godot
}
/// <summary>
- /// Returns <see langword="true"/> if this vector and <paramref name="other"/> are equal.
+ /// Returns <see langword="true"/> if the vectors are equal.
/// </summary>
- /// <param name="other">The other vector to compare.</param>
+ /// <param name="other">The other vector.</param>
/// <returns>Whether or not the vectors are equal.</returns>
public bool Equals(Vector2i other)
{
diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector3.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector3.cs
index 01e3a71bcb..63d9be0a6d 100644
--- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector3.cs
+++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector3.cs
@@ -699,6 +699,13 @@ namespace Godot
z = v.z;
}
+ /// <summary>
+ /// Adds each component of the <see cref="Vector3"/>
+ /// with the components of the given <see cref="Vector3"/>.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>The added vector.</returns>
public static Vector3 operator +(Vector3 left, Vector3 right)
{
left.x += right.x;
@@ -707,6 +714,13 @@ namespace Godot
return left;
}
+ /// <summary>
+ /// Subtracts each component of the <see cref="Vector3"/>
+ /// by the components of the given <see cref="Vector3"/>.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>The subtracted vector.</returns>
public static Vector3 operator -(Vector3 left, Vector3 right)
{
left.x -= right.x;
@@ -715,6 +729,15 @@ namespace Godot
return left;
}
+ /// <summary>
+ /// Returns the negative value of the <see cref="Vector3"/>.
+ /// This is the same as writing <c>new Vector3(-v.x, -v.y, -v.z)</c>.
+ /// This operation flips the direction of the vector while
+ /// keeping the same magnitude.
+ /// With floats, the number zero can be either positive or negative.
+ /// </summary>
+ /// <param name="vec">The vector to negate/flip.</param>
+ /// <returns>The negated/flipped vector.</returns>
public static Vector3 operator -(Vector3 vec)
{
vec.x = -vec.x;
@@ -723,6 +746,13 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Multiplies each component of the <see cref="Vector3"/>
+ /// by the given <see cref="real_t"/>.
+ /// </summary>
+ /// <param name="vec">The vector to multiply.</param>
+ /// <param name="scale">The scale to multiply by.</param>
+ /// <returns>The multiplied vector.</returns>
public static Vector3 operator *(Vector3 vec, real_t scale)
{
vec.x *= scale;
@@ -731,6 +761,13 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Multiplies each component of the <see cref="Vector3"/>
+ /// by the given <see cref="real_t"/>.
+ /// </summary>
+ /// <param name="scale">The scale to multiply by.</param>
+ /// <param name="vec">The vector to multiply.</param>
+ /// <returns>The multiplied vector.</returns>
public static Vector3 operator *(real_t scale, Vector3 vec)
{
vec.x *= scale;
@@ -739,6 +776,13 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Multiplies each component of the <see cref="Vector3"/>
+ /// by the components of the given <see cref="Vector3"/>.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>The multiplied vector.</returns>
public static Vector3 operator *(Vector3 left, Vector3 right)
{
left.x *= right.x;
@@ -747,6 +791,13 @@ namespace Godot
return left;
}
+ /// <summary>
+ /// Divides each component of the <see cref="Vector3"/>
+ /// by the given <see cref="real_t"/>.
+ /// </summary>
+ /// <param name="vec">The dividend vector.</param>
+ /// <param name="divisor">The divisor value.</param>
+ /// <returns>The divided vector.</returns>
public static Vector3 operator /(Vector3 vec, real_t divisor)
{
vec.x /= divisor;
@@ -755,6 +806,13 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Divides each component of the <see cref="Vector3"/>
+ /// by the components of the given <see cref="Vector3"/>.
+ /// </summary>
+ /// <param name="vec">The dividend vector.</param>
+ /// <param name="divisorv">The divisor vector.</param>
+ /// <returns>The divided vector.</returns>
public static Vector3 operator /(Vector3 vec, Vector3 divisorv)
{
vec.x /= divisorv.x;
@@ -763,6 +821,22 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Gets the remainder of each component of the <see cref="Vector3"/>
+ /// with the components of the given <see cref="real_t"/>.
+ /// This operation uses truncated division, which is often not desired
+ /// as it does not work well with negative numbers.
+ /// Consider using <see cref="PosMod(real_t)"/> instead
+ /// if you want to handle negative numbers.
+ /// </summary>
+ /// <example>
+ /// <code>
+ /// GD.Print(new Vector3(10, -20, 30) % 7); // Prints "(3, -6, 2)"
+ /// </code>
+ /// </example>
+ /// <param name="vec">The dividend vector.</param>
+ /// <param name="divisor">The divisor value.</param>
+ /// <returns>The remainder vector.</returns>
public static Vector3 operator %(Vector3 vec, real_t divisor)
{
vec.x %= divisor;
@@ -771,6 +845,22 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Gets the remainder of each component of the <see cref="Vector3"/>
+ /// with the components of the given <see cref="Vector3"/>.
+ /// This operation uses truncated division, which is often not desired
+ /// as it does not work well with negative numbers.
+ /// Consider using <see cref="PosMod(Vector3)"/> instead
+ /// if you want to handle negative numbers.
+ /// </summary>
+ /// <example>
+ /// <code>
+ /// GD.Print(new Vector3(10, -20, 30) % new Vector3(7, 8, 9)); // Prints "(3, -4, 3)"
+ /// </code>
+ /// </example>
+ /// <param name="vec">The dividend vector.</param>
+ /// <param name="divisorv">The divisor vector.</param>
+ /// <returns>The remainder vector.</returns>
public static Vector3 operator %(Vector3 vec, Vector3 divisorv)
{
vec.x %= divisorv.x;
@@ -779,16 +869,43 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Returns <see langword="true"/> if the vectors are exactly equal.
+ /// Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>Whether or not the vectors are exactly equal.</returns>
public static bool operator ==(Vector3 left, Vector3 right)
{
return left.Equals(right);
}
+ /// <summary>
+ /// Returns <see langword="true"/> if the vectors are not equal.
+ /// Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>Whether or not the vectors are not equal.</returns>
public static bool operator !=(Vector3 left, Vector3 right)
{
return !left.Equals(right);
}
+ /// <summary>
+ /// Compares two <see cref="Vector3"/> vectors by first checking if
+ /// the X value of the <paramref name="left"/> vector is less than
+ /// the X value of the <paramref name="right"/> vector.
+ /// If the X values are exactly equal, then it repeats this check
+ /// with the Y values of the two vectors, and then with the Z values.
+ /// This operator is useful for sorting vectors.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>Whether or not the left is less than the right.</returns>
public static bool operator <(Vector3 left, Vector3 right)
{
if (left.x == right.x)
@@ -802,6 +919,17 @@ namespace Godot
return left.x < right.x;
}
+ /// <summary>
+ /// Compares two <see cref="Vector3"/> vectors by first checking if
+ /// the X value of the <paramref name="left"/> vector is greater than
+ /// the X value of the <paramref name="right"/> vector.
+ /// If the X values are exactly equal, then it repeats this check
+ /// with the Y values of the two vectors, and then with the Z values.
+ /// This operator is useful for sorting vectors.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>Whether or not the left is greater than the right.</returns>
public static bool operator >(Vector3 left, Vector3 right)
{
if (left.x == right.x)
@@ -815,6 +943,17 @@ namespace Godot
return left.x > right.x;
}
+ /// <summary>
+ /// Compares two <see cref="Vector3"/> vectors by first checking if
+ /// the X value of the <paramref name="left"/> vector is less than
+ /// or equal to the X value of the <paramref name="right"/> vector.
+ /// If the X values are exactly equal, then it repeats this check
+ /// with the Y values of the two vectors, and then with the Z values.
+ /// This operator is useful for sorting vectors.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>Whether or not the left is less than or equal to the right.</returns>
public static bool operator <=(Vector3 left, Vector3 right)
{
if (left.x == right.x)
@@ -828,6 +967,17 @@ namespace Godot
return left.x < right.x;
}
+ /// <summary>
+ /// Compares two <see cref="Vector3"/> vectors by first checking if
+ /// the X value of the <paramref name="left"/> vector is greater than
+ /// or equal to the X value of the <paramref name="right"/> vector.
+ /// If the X values are exactly equal, then it repeats this check
+ /// with the Y values of the two vectors, and then with the Z values.
+ /// This operator is useful for sorting vectors.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>Whether or not the left is greater than or equal to the right.</returns>
public static bool operator >=(Vector3 left, Vector3 right)
{
if (left.x == right.x)
@@ -842,10 +992,13 @@ namespace Godot
}
/// <summary>
- /// Returns <see langword="true"/> if this vector and <paramref name="obj"/> are equal.
+ /// Returns <see langword="true"/> if the vector is exactly equal
+ /// to the given object (<see paramref="obj"/>).
+ /// Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
/// </summary>
- /// <param name="obj">The other object to compare.</param>
- /// <returns>Whether or not the vector and the other object are equal.</returns>
+ /// <param name="obj">The object to compare with.</param>
+ /// <returns>Whether or not the vector and the object are equal.</returns>
public override bool Equals(object obj)
{
if (obj is Vector3)
@@ -857,10 +1010,12 @@ namespace Godot
}
/// <summary>
- /// Returns <see langword="true"/> if this vector and <paramref name="other"/> are equal
+ /// Returns <see langword="true"/> if the vectors are exactly equal.
+ /// Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
/// </summary>
- /// <param name="other">The other vector to compare.</param>
- /// <returns>Whether or not the vectors are equal.</returns>
+ /// <param name="other">The other vector.</param>
+ /// <returns>Whether or not the vectors are exactly equal.</returns>
public bool Equals(Vector3 other)
{
return x == other.x && y == other.y && z == other.z;
diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector3i.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector3i.cs
index 2a7771cdfc..474876fc91 100644
--- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector3i.cs
+++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector3i.cs
@@ -347,6 +347,13 @@ namespace Godot
this.z = Mathf.RoundToInt(v.z);
}
+ /// <summary>
+ /// Adds each component of the <see cref="Vector3i"/>
+ /// with the components of the given <see cref="Vector3i"/>.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>The added vector.</returns>
public static Vector3i operator +(Vector3i left, Vector3i right)
{
left.x += right.x;
@@ -355,6 +362,13 @@ namespace Godot
return left;
}
+ /// <summary>
+ /// Subtracts each component of the <see cref="Vector3i"/>
+ /// by the components of the given <see cref="Vector3i"/>.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>The subtracted vector.</returns>
public static Vector3i operator -(Vector3i left, Vector3i right)
{
left.x -= right.x;
@@ -363,6 +377,14 @@ namespace Godot
return left;
}
+ /// <summary>
+ /// Returns the negative value of the <see cref="Vector3i"/>.
+ /// This is the same as writing <c>new Vector3i(-v.x, -v.y, -v.z)</c>.
+ /// This operation flips the direction of the vector while
+ /// keeping the same magnitude.
+ /// </summary>
+ /// <param name="vec">The vector to negate/flip.</param>
+ /// <returns>The negated/flipped vector.</returns>
public static Vector3i operator -(Vector3i vec)
{
vec.x = -vec.x;
@@ -371,6 +393,13 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Multiplies each component of the <see cref="Vector3i"/>
+ /// by the given <see langword="int"/>.
+ /// </summary>
+ /// <param name="vec">The vector to multiply.</param>
+ /// <param name="scale">The scale to multiply by.</param>
+ /// <returns>The multiplied vector.</returns>
public static Vector3i operator *(Vector3i vec, int scale)
{
vec.x *= scale;
@@ -379,6 +408,13 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Multiplies each component of the <see cref="Vector3i"/>
+ /// by the given <see langword="int"/>.
+ /// </summary>
+ /// <param name="scale">The scale to multiply by.</param>
+ /// <param name="vec">The vector to multiply.</param>
+ /// <returns>The multiplied vector.</returns>
public static Vector3i operator *(int scale, Vector3i vec)
{
vec.x *= scale;
@@ -387,6 +423,13 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Multiplies each component of the <see cref="Vector3i"/>
+ /// by the components of the given <see cref="Vector3i"/>.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>The multiplied vector.</returns>
public static Vector3i operator *(Vector3i left, Vector3i right)
{
left.x *= right.x;
@@ -395,6 +438,13 @@ namespace Godot
return left;
}
+ /// <summary>
+ /// Multiplies each component of the <see cref="Vector3i"/>
+ /// by the given <see langword="int"/>.
+ /// </summary>
+ /// <param name="vec">The dividend vector.</param>
+ /// <param name="divisor">The divisor value.</param>
+ /// <returns>The divided vector.</returns>
public static Vector3i operator /(Vector3i vec, int divisor)
{
vec.x /= divisor;
@@ -403,6 +453,13 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Divides each component of the <see cref="Vector3i"/>
+ /// by the components of the given <see cref="Vector3i"/>.
+ /// </summary>
+ /// <param name="vec">The dividend vector.</param>
+ /// <param name="divisorv">The divisor vector.</param>
+ /// <returns>The divided vector.</returns>
public static Vector3i operator /(Vector3i vec, Vector3i divisorv)
{
vec.x /= divisorv.x;
@@ -411,6 +468,22 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Gets the remainder of each component of the <see cref="Vector3i"/>
+ /// with the components of the given <see langword="int"/>.
+ /// This operation uses truncated division, which is often not desired
+ /// as it does not work well with negative numbers.
+ /// Consider using <see cref="PosMod(int)"/> instead
+ /// if you want to handle negative numbers.
+ /// </summary>
+ /// <example>
+ /// <code>
+ /// GD.Print(new Vector3i(10, -20, 30) % 7); // Prints "(3, -6, 2)"
+ /// </code>
+ /// </example>
+ /// <param name="vec">The dividend vector.</param>
+ /// <param name="divisor">The divisor value.</param>
+ /// <returns>The remainder vector.</returns>
public static Vector3i operator %(Vector3i vec, int divisor)
{
vec.x %= divisor;
@@ -419,6 +492,22 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Gets the remainder of each component of the <see cref="Vector3i"/>
+ /// with the components of the given <see cref="Vector3i"/>.
+ /// This operation uses truncated division, which is often not desired
+ /// as it does not work well with negative numbers.
+ /// Consider using <see cref="PosMod(Vector3i)"/> instead
+ /// if you want to handle negative numbers.
+ /// </summary>
+ /// <example>
+ /// <code>
+ /// GD.Print(new Vector3i(10, -20, 30) % new Vector3i(7, 8, 9)); // Prints "(3, -4, 3)"
+ /// </code>
+ /// </example>
+ /// <param name="vec">The dividend vector.</param>
+ /// <param name="divisorv">The divisor vector.</param>
+ /// <returns>The remainder vector.</returns>
public static Vector3i operator %(Vector3i vec, Vector3i divisorv)
{
vec.x %= divisorv.x;
@@ -427,6 +516,13 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Performs a bitwise AND operation with this <see cref="Vector3i"/>
+ /// and the given <see langword="int"/>.
+ /// </summary>
+ /// <param name="vec">The vector to AND with.</param>
+ /// <param name="and">The integer to AND with.</param>
+ /// <returns>The result of the bitwise AND.</returns>
public static Vector3i operator &(Vector3i vec, int and)
{
vec.x &= and;
@@ -435,6 +531,13 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Performs a bitwise AND operation with this <see cref="Vector3i"/>
+ /// and the given <see cref="Vector3i"/>.
+ /// </summary>
+ /// <param name="vec">The left vector to AND with.</param>
+ /// <param name="andv">The right vector to AND with.</param>
+ /// <returns>The result of the bitwise AND.</returns>
public static Vector3i operator &(Vector3i vec, Vector3i andv)
{
vec.x &= andv.x;
@@ -443,65 +546,121 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Returns <see langword="true"/> if the vectors are equal.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>Whether or not the vectors are equal.</returns>
public static bool operator ==(Vector3i left, Vector3i right)
{
return left.Equals(right);
}
+ /// <summary>
+ /// Returns <see langword="true"/> if the vectors are not equal.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>Whether or not the vectors are not equal.</returns>
public static bool operator !=(Vector3i left, Vector3i right)
{
return !left.Equals(right);
}
+ /// <summary>
+ /// Compares two <see cref="Vector3i"/> vectors by first checking if
+ /// the X value of the <paramref name="left"/> vector is less than
+ /// the X value of the <paramref name="right"/> vector.
+ /// If the X values are exactly equal, then it repeats this check
+ /// with the Y values of the two vectors, and then with the Z values.
+ /// This operator is useful for sorting vectors.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>Whether or not the left is less than the right.</returns>
public static bool operator <(Vector3i left, Vector3i right)
{
if (left.x == right.x)
{
if (left.y == right.y)
+ {
return left.z < right.z;
- else
- return left.y < right.y;
+ }
+ return left.y < right.y;
}
-
return left.x < right.x;
}
+ /// <summary>
+ /// Compares two <see cref="Vector3i"/> vectors by first checking if
+ /// the X value of the <paramref name="left"/> vector is greater than
+ /// the X value of the <paramref name="right"/> vector.
+ /// If the X values are exactly equal, then it repeats this check
+ /// with the Y values of the two vectors, and then with the Z values.
+ /// This operator is useful for sorting vectors.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>Whether or not the left is greater than the right.</returns>
public static bool operator >(Vector3i left, Vector3i right)
{
if (left.x == right.x)
{
if (left.y == right.y)
+ {
return left.z > right.z;
- else
- return left.y > right.y;
+ }
+ return left.y > right.y;
}
-
return left.x > right.x;
}
+ /// <summary>
+ /// Compares two <see cref="Vector3i"/> vectors by first checking if
+ /// the X value of the <paramref name="left"/> vector is less than
+ /// or equal to the X value of the <paramref name="right"/> vector.
+ /// If the X values are exactly equal, then it repeats this check
+ /// with the Y values of the two vectors, and then with the Z values.
+ /// This operator is useful for sorting vectors.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>Whether or not the left is less than or equal to the right.</returns>
public static bool operator <=(Vector3i left, Vector3i right)
{
if (left.x == right.x)
{
if (left.y == right.y)
+ {
return left.z <= right.z;
- else
- return left.y < right.y;
+ }
+ return left.y < right.y;
}
-
return left.x < right.x;
}
+ /// <summary>
+ /// Compares two <see cref="Vector3i"/> vectors by first checking if
+ /// the X value of the <paramref name="left"/> vector is greater than
+ /// or equal to the X value of the <paramref name="right"/> vector.
+ /// If the X values are exactly equal, then it repeats this check
+ /// with the Y values of the two vectors, and then with the Z values.
+ /// This operator is useful for sorting vectors.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>Whether or not the left is greater than or equal to the right.</returns>
public static bool operator >=(Vector3i left, Vector3i right)
{
if (left.x == right.x)
{
if (left.y == right.y)
+ {
return left.z >= right.z;
- else
- return left.y > right.y;
+ }
+ return left.y > right.y;
}
-
return left.x > right.x;
}
@@ -524,10 +683,11 @@ namespace Godot
}
/// <summary>
- /// Returns <see langword="true"/> if this vector and <paramref name="obj"/> are equal.
+ /// Returns <see langword="true"/> if the vector is equal
+ /// to the given object (<see paramref="obj"/>).
/// </summary>
- /// <param name="obj">The other object to compare.</param>
- /// <returns>Whether or not the vector and the other object are equal.</returns>
+ /// <param name="obj">The object to compare with.</param>
+ /// <returns>Whether or not the vector and the object are equal.</returns>
public override bool Equals(object obj)
{
if (obj is Vector3i)
@@ -539,9 +699,9 @@ namespace Godot
}
/// <summary>
- /// Returns <see langword="true"/> if this vector and <paramref name="other"/> are equal
+ /// Returns <see langword="true"/> if the vectors are equal.
/// </summary>
- /// <param name="other">The other vector to compare.</param>
+ /// <param name="other">The other vector.</param>
/// <returns>Whether or not the vectors are equal.</returns>
public bool Equals(Vector3i other)
{
diff --git a/modules/mono/glue/collections_glue.cpp b/modules/mono/glue/collections_glue.cpp
index 86976de244..e367ecb7d6 100644
--- a/modules/mono/glue/collections_glue.cpp
+++ b/modules/mono/glue/collections_glue.cpp
@@ -144,7 +144,7 @@ void godot_icall_Array_Insert(Array *ptr, int32_t index, MonoObject *item) {
MonoBoolean godot_icall_Array_Remove(Array *ptr, MonoObject *item) {
int idx = ptr->find(GDMonoMarshal::mono_object_to_variant(item));
if (idx >= 0) {
- ptr->remove(idx);
+ ptr->remove_at(idx);
return true;
}
return false;
@@ -155,7 +155,7 @@ void godot_icall_Array_RemoveAt(Array *ptr, int32_t index) {
GDMonoUtils::set_pending_exception(mono_get_exception_index_out_of_range());
return;
}
- ptr->remove(index);
+ ptr->remove_at(index);
}
int32_t godot_icall_Array_Resize(Array *ptr, int32_t new_size) {
diff --git a/modules/mono/glue/gd_glue.cpp b/modules/mono/glue/gd_glue.cpp
index a2ff868f65..07ddf5d945 100644
--- a/modules/mono/glue/gd_glue.cpp
+++ b/modules/mono/glue/gd_glue.cpp
@@ -182,26 +182,30 @@ void godot_icall_GD_printt(MonoArray *p_what) {
print_line(str);
}
-float godot_icall_GD_randf() {
- return Math::randf();
+void godot_icall_GD_randomize() {
+ Math::randomize();
}
uint32_t godot_icall_GD_randi() {
return Math::rand();
}
-void godot_icall_GD_randomize() {
- Math::randomize();
+float godot_icall_GD_randf() {
+ return Math::randf();
}
-double godot_icall_GD_randf_range(double from, double to) {
+int32_t godot_icall_GD_randi_range(int32_t from, int32_t to) {
return Math::random(from, to);
}
-int32_t godot_icall_GD_randi_range(int32_t from, int32_t to) {
+double godot_icall_GD_randf_range(double from, double to) {
return Math::random(from, to);
}
+double godot_icall_GD_randfn(double mean, double deviation) {
+ return Math::randfn(mean, deviation);
+}
+
uint32_t godot_icall_GD_rand_seed(uint64_t seed, uint64_t *newSeed) {
uint32_t ret = Math::rand_from_seed(&seed);
*newSeed = seed;
@@ -300,11 +304,12 @@ void godot_register_gd_icalls() {
GDMonoUtils::add_internal_call("Godot.GD::godot_icall_GD_printraw", godot_icall_GD_printraw);
GDMonoUtils::add_internal_call("Godot.GD::godot_icall_GD_prints", godot_icall_GD_prints);
GDMonoUtils::add_internal_call("Godot.GD::godot_icall_GD_printt", godot_icall_GD_printt);
- GDMonoUtils::add_internal_call("Godot.GD::godot_icall_GD_randf", godot_icall_GD_randf);
- GDMonoUtils::add_internal_call("Godot.GD::godot_icall_GD_randi", godot_icall_GD_randi);
GDMonoUtils::add_internal_call("Godot.GD::godot_icall_GD_randomize", godot_icall_GD_randomize);
- GDMonoUtils::add_internal_call("Godot.GD::godot_icall_GD_randf_range", godot_icall_GD_randf_range);
+ GDMonoUtils::add_internal_call("Godot.GD::godot_icall_GD_randi", godot_icall_GD_randi);
+ GDMonoUtils::add_internal_call("Godot.GD::godot_icall_GD_randf", godot_icall_GD_randf);
GDMonoUtils::add_internal_call("Godot.GD::godot_icall_GD_randi_range", godot_icall_GD_randi_range);
+ GDMonoUtils::add_internal_call("Godot.GD::godot_icall_GD_randf_range", godot_icall_GD_randf_range);
+ GDMonoUtils::add_internal_call("Godot.GD::godot_icall_GD_randfn", godot_icall_GD_randfn);
GDMonoUtils::add_internal_call("Godot.GD::godot_icall_GD_rand_seed", godot_icall_GD_rand_seed);
GDMonoUtils::add_internal_call("Godot.GD::godot_icall_GD_seed", godot_icall_GD_seed);
GDMonoUtils::add_internal_call("Godot.GD::godot_icall_GD_str", godot_icall_GD_str);
diff --git a/modules/mono/mono_gd/gd_mono.cpp b/modules/mono/mono_gd/gd_mono.cpp
index f3e83b26b9..52447bc59b 100644
--- a/modules/mono/mono_gd/gd_mono.cpp
+++ b/modules/mono/mono_gd/gd_mono.cpp
@@ -504,7 +504,7 @@ void GDMono::_init_godot_api_hashes() {
}
void GDMono::_init_exception_policy() {
- PropertyInfo exc_policy_prop = PropertyInfo(Variant::INT, "mono/unhandled_exception_policy", PROPERTY_HINT_ENUM,
+ PropertyInfo exc_policy_prop = PropertyInfo(Variant::INT, "mono/runtime/unhandled_exception_policy", PROPERTY_HINT_ENUM,
vformat("Terminate Application:%s,Log Error:%s", (int)POLICY_TERMINATE_APP, (int)POLICY_LOG_ERROR));
unhandled_exception_policy = (UnhandledExceptionPolicy)(int)GLOBAL_DEF(exc_policy_prop.name, (int)POLICY_TERMINATE_APP);
ProjectSettings::get_singleton()->set_custom_property_info(exc_policy_prop.name, exc_policy_prop);
diff --git a/modules/navigation/godot_navigation_server.cpp b/modules/navigation/godot_navigation_server.cpp
index f600f07c87..ac3422187f 100644
--- a/modules/navigation/godot_navigation_server.cpp
+++ b/modules/navigation/godot_navigation_server.cpp
@@ -150,8 +150,8 @@ COMMAND_2(map_set_active, RID, p_map, bool, p_active) {
} else {
int map_index = active_maps.find(map);
ERR_FAIL_COND(map_index < 0);
- active_maps.remove(map_index);
- active_maps_update_id.remove(map_index);
+ active_maps.remove_at(map_index);
+ active_maps_update_id.remove_at(map_index);
}
}
@@ -469,8 +469,8 @@ COMMAND_1(free, RID, p_object) {
}
int map_index = active_maps.find(map);
- active_maps.remove(map_index);
- active_maps_update_id.remove(map_index);
+ active_maps.remove_at(map_index);
+ active_maps_update_id.remove_at(map_index);
map_owner.free(p_object);
} else if (region_owner.owns(p_object)) {
diff --git a/modules/navigation/navigation_mesh_generator.cpp b/modules/navigation/navigation_mesh_generator.cpp
index 8fd3a13e1f..05e040b518 100644
--- a/modules/navigation/navigation_mesh_generator.cpp
+++ b/modules/navigation/navigation_mesh_generator.cpp
@@ -52,7 +52,8 @@
#include "editor/editor_settings.h"
#endif
-#include "modules/modules_enabled.gen.h"
+#include "modules/modules_enabled.gen.h" // For csg, gridmap.
+
#ifdef MODULE_CSG_ENABLED
#include "modules/csg/csg_shape.h"
#endif
diff --git a/modules/ogg/ogg_packet_sequence.cpp b/modules/ogg/ogg_packet_sequence.cpp
index b7a3ad2876..abb2b67ab0 100644
--- a/modules/ogg/ogg_packet_sequence.cpp
+++ b/modules/ogg/ogg_packet_sequence.cpp
@@ -127,9 +127,9 @@ void OGGPacketSequence::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_length"), &OGGPacketSequence::get_length);
- ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "packet_data", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR), "set_packet_data", "get_packet_data");
- ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "granule_positions", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR), "set_packet_granule_positions", "get_packet_granule_positions");
- ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "sampling_rate", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR), "set_sampling_rate", "get_sampling_rate");
+ ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "packet_data", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), "set_packet_data", "get_packet_data");
+ ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "granule_positions", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), "set_packet_granule_positions", "get_packet_granule_positions");
+ ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "sampling_rate", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), "set_sampling_rate", "get_sampling_rate");
}
bool OGGPacketSequencePlayback::next_ogg_packet(ogg_packet **p_packet) const {
diff --git a/modules/opensimplex/doc_classes/NoiseTexture.xml b/modules/opensimplex/doc_classes/NoiseTexture.xml
index 8a10411cf6..16fea228b1 100644
--- a/modules/opensimplex/doc_classes/NoiseTexture.xml
+++ b/modules/opensimplex/doc_classes/NoiseTexture.xml
@@ -8,8 +8,9 @@
NoiseTexture can also generate normal map textures.
The class uses [Thread]s to generate the texture data internally, so [method Texture2D.get_image] may return [code]null[/code] if the generation process has not completed yet. In that case, you need to wait for the texture to be generated before accessing the image and the generated byte data:
[codeblock]
- var texture = preload("res://noise.tres")
- yield(texture, "changed")
+ var texture = NoiseTexture.new()
+ texture.noise = OpenSimplexNoise.new()
+ await texture.changed
var image = texture.get_image()
var data = image.get_data()
[/codeblock]
diff --git a/modules/opensimplex/noise_texture.cpp b/modules/opensimplex/noise_texture.cpp
index 9db3f3d5fd..e36dcfcea5 100644
--- a/modules/opensimplex/noise_texture.cpp
+++ b/modules/opensimplex/noise_texture.cpp
@@ -80,7 +80,7 @@ void NoiseTexture::_bind_methods() {
void NoiseTexture::_validate_property(PropertyInfo &property) const {
if (property.name == "bump_strength") {
if (!as_normal_map) {
- property.usage = PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL;
+ property.usage = PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL;
}
}
}
diff --git a/modules/opensimplex/noise_texture.h b/modules/opensimplex/noise_texture.h
index 6237b6460d..a0b2a86c41 100644
--- a/modules/opensimplex/noise_texture.h
+++ b/modules/opensimplex/noise_texture.h
@@ -35,9 +35,6 @@
#include "core/io/image.h"
#include "core/object/ref_counted.h"
-#include "editor/editor_node.h"
-#include "editor/editor_plugin.h"
-#include "editor/property_editor.h"
class NoiseTexture : public Texture2D {
GDCLASS(NoiseTexture, Texture2D);
diff --git a/modules/raycast/config.py b/modules/raycast/config.py
index 2f8bacd4ae..7e8b3e9840 100644
--- a/modules/raycast/config.py
+++ b/modules/raycast/config.py
@@ -1,6 +1,6 @@
def can_build(env, platform):
# Depends on Embree library, which only supports x86_64 and aarch64.
- if env["arch"].startswith("rv"):
+ if env["arch"].startswith("rv") or env["arch"].startswith("ppc"):
return False
if platform == "android":
diff --git a/modules/text_server_adv/text_server_adv.cpp b/modules/text_server_adv/text_server_adv.cpp
index 129bc6af0b..f480c86088 100644
--- a/modules/text_server_adv/text_server_adv.cpp
+++ b/modules/text_server_adv/text_server_adv.cpp
@@ -38,6 +38,8 @@
#include "thirdparty/icu4c/icudata.gen.h"
#endif
+#include "modules/modules_enabled.gen.h" // For freetype, msdfgen.
+
#ifdef MODULE_MSDFGEN_ENABLED
#include "core/ShapeDistanceFinder.h"
#include "core/contour-combiners.h"
@@ -1279,6 +1281,23 @@ _FORCE_INLINE_ bool TextServerAdvanced::_ensure_cache_for_size(FontDataAdvanced
fd->underline_thickness = (FT_MulFix(fd->face->underline_thickness, fd->face->size->metrics.y_scale) / 64.0) / fd->oversampling * fd->scale;
if (!p_font_data->face_init) {
+ // Get style flags and name.
+ if (fd->face->family_name != nullptr) {
+ p_font_data->font_name = String::utf8((const char *)fd->face->family_name);
+ }
+ if (fd->face->style_name != nullptr) {
+ p_font_data->style_name = String::utf8((const char *)fd->face->style_name);
+ }
+ p_font_data->style_flags = 0;
+ if (fd->face->style_flags & FT_STYLE_FLAG_BOLD) {
+ p_font_data->style_flags |= FONT_BOLD;
+ }
+ if (fd->face->style_flags & FT_STYLE_FLAG_ITALIC) {
+ p_font_data->style_flags |= FONT_ITALIC;
+ }
+ if (fd->face->face_flags & FT_FACE_FLAG_FIXED_WIDTH) {
+ p_font_data->style_flags |= FONT_FIXED_WIDTH;
+ }
// Get supported scripts from OpenType font data.
p_font_data->supported_scripts.clear();
unsigned int count = hb_ot_layout_table_get_script_tags(hb_font_get_face(fd->hb_handle), HB_OT_TAG_GSUB, 0, nullptr, nullptr);
@@ -1648,6 +1667,66 @@ void TextServerAdvanced::font_set_data_ptr(RID p_font_rid, const uint8_t *p_data
fd->data_size = p_data_size;
}
+void TextServerAdvanced::font_set_style(RID p_font_rid, uint32_t /*FontStyle*/ p_style) {
+ FontDataAdvanced *fd = font_owner.get_or_null(p_font_rid);
+ ERR_FAIL_COND(!fd);
+
+ MutexLock lock(fd->mutex);
+ Vector2i size = _get_size(fd, 16);
+ ERR_FAIL_COND(!_ensure_cache_for_size(fd, size));
+ fd->style_flags = p_style;
+}
+
+uint32_t /*FontStyle*/ TextServerAdvanced::font_get_style(RID p_font_rid) const {
+ FontDataAdvanced *fd = font_owner.get_or_null(p_font_rid);
+ ERR_FAIL_COND_V(!fd, 0);
+
+ MutexLock lock(fd->mutex);
+ Vector2i size = _get_size(fd, 16);
+ ERR_FAIL_COND_V(!_ensure_cache_for_size(fd, size), 0);
+ return fd->style_flags;
+}
+
+void TextServerAdvanced::font_set_style_name(RID p_font_rid, const String &p_name) {
+ FontDataAdvanced *fd = font_owner.get_or_null(p_font_rid);
+ ERR_FAIL_COND(!fd);
+
+ MutexLock lock(fd->mutex);
+ Vector2i size = _get_size(fd, 16);
+ ERR_FAIL_COND(!_ensure_cache_for_size(fd, size));
+ fd->style_name = p_name;
+}
+
+String TextServerAdvanced::font_get_style_name(RID p_font_rid) const {
+ FontDataAdvanced *fd = font_owner.get_or_null(p_font_rid);
+ ERR_FAIL_COND_V(!fd, String());
+
+ MutexLock lock(fd->mutex);
+ Vector2i size = _get_size(fd, 16);
+ ERR_FAIL_COND_V(!_ensure_cache_for_size(fd, size), String());
+ return fd->style_name;
+}
+
+void TextServerAdvanced::font_set_name(RID p_font_rid, const String &p_name) {
+ FontDataAdvanced *fd = font_owner.get_or_null(p_font_rid);
+ ERR_FAIL_COND(!fd);
+
+ MutexLock lock(fd->mutex);
+ Vector2i size = _get_size(fd, 16);
+ ERR_FAIL_COND(!_ensure_cache_for_size(fd, size));
+ fd->font_name = p_name;
+}
+
+String TextServerAdvanced::font_get_name(RID p_font_rid) const {
+ FontDataAdvanced *fd = font_owner.get_or_null(p_font_rid);
+ ERR_FAIL_COND_V(!fd, String());
+
+ MutexLock lock(fd->mutex);
+ Vector2i size = _get_size(fd, 16);
+ ERR_FAIL_COND_V(!_ensure_cache_for_size(fd, size), String());
+ return fd->font_name;
+}
+
void TextServerAdvanced::font_set_antialiased(RID p_font_rid, bool p_antialiased) {
FontDataAdvanced *fd = font_owner.get_or_null(p_font_rid);
ERR_FAIL_COND(!fd);
@@ -2069,7 +2148,7 @@ void TextServerAdvanced::font_remove_texture(RID p_font_rid, const Vector2i &p_s
ERR_FAIL_COND(!_ensure_cache_for_size(fd, size));
ERR_FAIL_INDEX(p_texture_index, fd->cache[size]->textures.size());
- fd->cache[size]->textures.remove(p_texture_index);
+ fd->cache[size]->textures.remove_at(p_texture_index);
}
void TextServerAdvanced::font_set_texture_image(RID p_font_rid, const Vector2i &p_size, int p_texture_index, const Ref<Image> &p_image) {
@@ -2931,6 +3010,27 @@ TextServer::Direction TextServerAdvanced::shaped_text_get_direction(RID p_shaped
return sd->direction;
}
+void TextServerAdvanced::shaped_text_set_custom_punctuation(RID p_shaped, const String &p_punct) {
+ _THREAD_SAFE_METHOD_
+ ShapedTextDataAdvanced *sd = shaped_owner.get_or_null(p_shaped);
+ ERR_FAIL_COND(!sd);
+
+ if (sd->custom_punct != p_punct) {
+ if (sd->parent != RID()) {
+ full_copy(sd);
+ }
+ sd->custom_punct = p_punct;
+ invalidate(sd);
+ }
+}
+
+String TextServerAdvanced::shaped_text_get_custom_punctuation(RID p_shaped) const {
+ _THREAD_SAFE_METHOD_
+ const ShapedTextDataAdvanced *sd = shaped_owner.get_or_null(p_shaped);
+ ERR_FAIL_COND_V(!sd, String());
+ return sd->custom_punct;
+}
+
void TextServerAdvanced::shaped_text_set_bidi_override(RID p_shaped, const Array &p_override) {
ShapedTextDataAdvanced *sd = shaped_owner.get_or_null(p_shaped);
ERR_FAIL_COND(!sd);
@@ -3230,6 +3330,7 @@ RID TextServerAdvanced::shaped_text_substr(RID p_shaped, int p_start, int p_leng
new_sd->orientation = sd->orientation;
new_sd->direction = sd->direction;
+ new_sd->custom_punct = sd->custom_punct;
new_sd->para_direction = sd->para_direction;
new_sd->line_breaks_valid = sd->line_breaks_valid;
new_sd->justification_ops_valid = sd->justification_ops_valid;
@@ -3810,6 +3911,9 @@ bool TextServerAdvanced::shaped_text_update_breaks(RID p_shaped) {
const char32_t *ch = sd->text.ptr();
Glyph *sd_glyphs = sd->glyphs.ptrw();
+ int c_punct_size = sd->custom_punct.length();
+ const char32_t *c_punct = sd->custom_punct.ptr();
+
for (i = 0; i < sd_size; i++) {
if (sd_glyphs[i].count > 0) {
char32_t c = ch[sd_glyphs[i].start - sd->start];
@@ -3822,12 +3926,21 @@ bool TextServerAdvanced::shaped_text_update_breaks(RID p_shaped) {
if (is_whitespace(c)) {
sd_glyphs[i].flags |= GRAPHEME_IS_SPACE;
}
+ if (c_punct_size == 0) {
+ if (u_ispunct(c) && c != 0x005F) {
+ sd_glyphs[i].flags |= GRAPHEME_IS_PUNCTUATION;
+ }
+ } else {
+ for (int j = 0; j < c_punct_size; j++) {
+ if (c_punct[j] == c) {
+ sd_glyphs[i].flags |= GRAPHEME_IS_PUNCTUATION;
+ break;
+ }
+ }
+ }
if (is_underscore(c)) {
sd_glyphs[i].flags |= GRAPHEME_IS_UNDERSCORE;
}
- if (u_ispunct(c) && c != 0x005F) {
- sd_glyphs[i].flags |= GRAPHEME_IS_PUNCTUATION;
- }
if (breaks.has(sd->glyphs[i].start)) {
if (breaks[sd->glyphs[i].start]) {
sd_glyphs[i].flags |= GRAPHEME_IS_BREAK_HARD;
diff --git a/modules/text_server_adv/text_server_adv.h b/modules/text_server_adv/text_server_adv.h
index 15f3a7f1a9..5eaff67a6e 100644
--- a/modules/text_server_adv/text_server_adv.h
+++ b/modules/text_server_adv/text_server_adv.h
@@ -55,7 +55,7 @@
#include <unicode/ustring.h>
#include <unicode/utypes.h>
-#include "modules/modules_enabled.gen.h"
+#include "modules/modules_enabled.gen.h" // For freetype, msdfgen.
#ifdef MODULE_FREETYPE_ENABLED
#include <ft2build.h>
@@ -177,6 +177,10 @@ class TextServerAdvanced : public TextServer {
Dictionary variation_coordinates;
float oversampling = 0.f;
+ uint32_t style_flags = 0;
+ String font_name;
+ String style_name;
+
Map<Vector2i, FontDataForSizeAdvanced *> cache;
bool face_init = false;
@@ -321,6 +325,15 @@ public:
virtual void font_set_data(RID p_font_rid, const PackedByteArray &p_data) override;
virtual void font_set_data_ptr(RID p_font_rid, const uint8_t *p_data_ptr, size_t p_data_size) override;
+ virtual void font_set_style(RID p_font_rid, uint32_t /*FontStyle*/ p_style) override;
+ virtual uint32_t /*FontStyle*/ font_get_style(RID p_font_rid) const override;
+
+ virtual void font_set_style_name(RID p_font_rid, const String &p_name) override;
+ virtual String font_get_style_name(RID p_font_rid) const override;
+
+ virtual void font_set_name(RID p_font_rid, const String &p_name) override;
+ virtual String font_get_name(RID p_font_rid) const override;
+
virtual void font_set_antialiased(RID p_font_rid, bool p_antialiased) override;
virtual bool font_is_antialiased(RID p_font_rid) const override;
@@ -450,6 +463,9 @@ public:
virtual void shaped_text_set_bidi_override(RID p_shaped, const Array &p_override) override;
+ virtual void shaped_text_set_custom_punctuation(RID p_shaped, const String &p_punct) override;
+ virtual String shaped_text_get_custom_punctuation(RID p_shaped) const override;
+
virtual void shaped_text_set_orientation(RID p_shaped, Orientation p_orientation = ORIENTATION_HORIZONTAL) override;
virtual Orientation shaped_text_get_orientation(RID p_shaped) const override;
diff --git a/modules/text_server_fb/text_server_fb.cpp b/modules/text_server_fb/text_server_fb.cpp
index e0e77ff753..5c06051211 100644
--- a/modules/text_server_fb/text_server_fb.cpp
+++ b/modules/text_server_fb/text_server_fb.cpp
@@ -33,6 +33,8 @@
#include "core/error/error_macros.h"
#include "core/string/print_string.h"
+#include "modules/modules_enabled.gen.h" // For freetype, msdfgen.
+
#ifdef MODULE_MSDFGEN_ENABLED
#include "core/ShapeDistanceFinder.h"
#include "core/contour-combiners.h"
@@ -736,6 +738,23 @@ _FORCE_INLINE_ bool TextServerFallback::_ensure_cache_for_size(FontDataFallback
fd->underline_thickness = (FT_MulFix(fd->face->underline_thickness, fd->face->size->metrics.y_scale) / 64.0) / fd->oversampling * fd->scale;
if (!p_font_data->face_init) {
+ // Get style flags and name.
+ if (fd->face->family_name != nullptr) {
+ p_font_data->font_name = String::utf8((const char *)fd->face->family_name);
+ }
+ if (fd->face->style_name != nullptr) {
+ p_font_data->style_name = String::utf8((const char *)fd->face->style_name);
+ }
+ p_font_data->style_flags = 0;
+ if (fd->face->style_flags & FT_STYLE_FLAG_BOLD) {
+ p_font_data->style_flags |= FONT_BOLD;
+ }
+ if (fd->face->style_flags & FT_STYLE_FLAG_ITALIC) {
+ p_font_data->style_flags |= FONT_ITALIC;
+ }
+ if (fd->face->face_flags & FT_FACE_FLAG_FIXED_WIDTH) {
+ p_font_data->style_flags |= FONT_FIXED_WIDTH;
+ }
// Read OpenType variations.
p_font_data->supported_varaitions.clear();
if (fd->face->face_flags & FT_FACE_FLAG_MULTIPLE_MASTERS) {
@@ -826,6 +845,66 @@ void TextServerFallback::font_set_data_ptr(RID p_font_rid, const uint8_t *p_data
fd->data_size = p_data_size;
}
+void TextServerFallback::font_set_style(RID p_font_rid, uint32_t /*FontStyle*/ p_style) {
+ FontDataFallback *fd = font_owner.get_or_null(p_font_rid);
+ ERR_FAIL_COND(!fd);
+
+ MutexLock lock(fd->mutex);
+ Vector2i size = _get_size(fd, 16);
+ ERR_FAIL_COND(!_ensure_cache_for_size(fd, size));
+ fd->style_flags = p_style;
+}
+
+uint32_t /*FontStyle*/ TextServerFallback::font_get_style(RID p_font_rid) const {
+ FontDataFallback *fd = font_owner.get_or_null(p_font_rid);
+ ERR_FAIL_COND_V(!fd, 0);
+
+ MutexLock lock(fd->mutex);
+ Vector2i size = _get_size(fd, 16);
+ ERR_FAIL_COND_V(!_ensure_cache_for_size(fd, size), 0);
+ return fd->style_flags;
+}
+
+void TextServerFallback::font_set_style_name(RID p_font_rid, const String &p_name) {
+ FontDataFallback *fd = font_owner.get_or_null(p_font_rid);
+ ERR_FAIL_COND(!fd);
+
+ MutexLock lock(fd->mutex);
+ Vector2i size = _get_size(fd, 16);
+ ERR_FAIL_COND(!_ensure_cache_for_size(fd, size));
+ fd->style_name = p_name;
+}
+
+String TextServerFallback::font_get_style_name(RID p_font_rid) const {
+ FontDataFallback *fd = font_owner.get_or_null(p_font_rid);
+ ERR_FAIL_COND_V(!fd, String());
+
+ MutexLock lock(fd->mutex);
+ Vector2i size = _get_size(fd, 16);
+ ERR_FAIL_COND_V(!_ensure_cache_for_size(fd, size), String());
+ return fd->style_name;
+}
+
+void TextServerFallback::font_set_name(RID p_font_rid, const String &p_name) {
+ FontDataFallback *fd = font_owner.get_or_null(p_font_rid);
+ ERR_FAIL_COND(!fd);
+
+ MutexLock lock(fd->mutex);
+ Vector2i size = _get_size(fd, 16);
+ ERR_FAIL_COND(!_ensure_cache_for_size(fd, size));
+ fd->font_name = p_name;
+}
+
+String TextServerFallback::font_get_name(RID p_font_rid) const {
+ FontDataFallback *fd = font_owner.get_or_null(p_font_rid);
+ ERR_FAIL_COND_V(!fd, String());
+
+ MutexLock lock(fd->mutex);
+ Vector2i size = _get_size(fd, 16);
+ ERR_FAIL_COND_V(!_ensure_cache_for_size(fd, size), String());
+ return fd->font_name;
+}
+
void TextServerFallback::font_set_antialiased(RID p_font_rid, bool p_antialiased) {
FontDataFallback *fd = font_owner.get_or_null(p_font_rid);
ERR_FAIL_COND(!fd);
@@ -1247,7 +1326,7 @@ void TextServerFallback::font_remove_texture(RID p_font_rid, const Vector2i &p_s
ERR_FAIL_COND(!_ensure_cache_for_size(fd, size));
ERR_FAIL_INDEX(p_texture_index, fd->cache[size]->textures.size());
- fd->cache[size]->textures.remove(p_texture_index);
+ fd->cache[size]->textures.remove_at(p_texture_index);
}
void TextServerFallback::font_set_texture_image(RID p_font_rid, const Vector2i &p_size, int p_texture_index, const Ref<Image> &p_image) {
@@ -2030,6 +2109,27 @@ TextServer::Direction TextServerFallback::shaped_text_get_direction(RID p_shaped
return TextServer::DIRECTION_LTR;
}
+void TextServerFallback::shaped_text_set_custom_punctuation(RID p_shaped, const String &p_punct) {
+ _THREAD_SAFE_METHOD_
+ ShapedTextData *sd = shaped_owner.get_or_null(p_shaped);
+ ERR_FAIL_COND(!sd);
+
+ if (sd->custom_punct != p_punct) {
+ if (sd->parent != RID()) {
+ full_copy(sd);
+ }
+ sd->custom_punct = p_punct;
+ invalidate(sd);
+ }
+}
+
+String TextServerFallback::shaped_text_get_custom_punctuation(RID p_shaped) const {
+ _THREAD_SAFE_METHOD_
+ const ShapedTextData *sd = shaped_owner.get_or_null(p_shaped);
+ ERR_FAIL_COND_V(!sd, String());
+ return sd->custom_punct;
+}
+
void TextServerFallback::shaped_text_set_orientation(RID p_shaped, TextServer::Orientation p_orientation) {
ShapedTextData *sd = shaped_owner.get_or_null(p_shaped);
ERR_FAIL_COND(!sd);
@@ -2332,6 +2432,7 @@ RID TextServerFallback::shaped_text_substr(RID p_shaped, int p_start, int p_leng
new_sd->orientation = sd->orientation;
new_sd->direction = sd->direction;
+ new_sd->custom_punct = sd->custom_punct;
new_sd->para_direction = sd->para_direction;
new_sd->line_breaks_valid = sd->line_breaks_valid;
new_sd->justification_ops_valid = sd->justification_ops_valid;
@@ -2615,27 +2716,41 @@ bool TextServerFallback::shaped_text_update_breaks(RID p_shaped) {
}
int sd_size = sd->glyphs.size();
+ Glyph *sd_glyphs = sd->glyphs.ptrw();
+
+ int c_punct_size = sd->custom_punct.length();
+ const char32_t *c_punct = sd->custom_punct.ptr();
+
for (int i = 0; i < sd_size; i++) {
- if (sd->glyphs[i].count > 0) {
- char32_t c = sd->text[sd->glyphs[i].start];
- if (is_punct(c)) {
- sd->glyphs.write[i].flags |= GRAPHEME_IS_PUNCTUATION;
+ if (sd_glyphs[i].count > 0) {
+ char32_t c = sd->text[sd_glyphs[i].start];
+ if (c_punct_size == 0) {
+ if (is_punct(c)) {
+ sd_glyphs[i].flags |= GRAPHEME_IS_PUNCTUATION;
+ }
+ } else {
+ for (int j = 0; j < c_punct_size; j++) {
+ if (c_punct[j] == c) {
+ sd_glyphs[i].flags |= GRAPHEME_IS_PUNCTUATION;
+ break;
+ }
+ }
}
if (is_underscore(c)) {
sd->glyphs.write[i].flags |= GRAPHEME_IS_UNDERSCORE;
}
if (is_whitespace(c) && !is_linebreak(c)) {
- sd->glyphs.write[i].flags |= GRAPHEME_IS_SPACE;
- sd->glyphs.write[i].flags |= GRAPHEME_IS_BREAK_SOFT;
+ sd_glyphs[i].flags |= GRAPHEME_IS_SPACE;
+ sd_glyphs[i].flags |= GRAPHEME_IS_BREAK_SOFT;
}
if (is_linebreak(c)) {
- sd->glyphs.write[i].flags |= GRAPHEME_IS_BREAK_HARD;
+ sd_glyphs[i].flags |= GRAPHEME_IS_BREAK_HARD;
}
if (c == 0x0009 || c == 0x000b) {
- sd->glyphs.write[i].flags |= GRAPHEME_IS_TAB;
+ sd_glyphs[i].flags |= GRAPHEME_IS_TAB;
}
- i += (sd->glyphs[i].count - 1);
+ i += (sd_glyphs[i].count - 1);
}
}
sd->line_breaks_valid = true;
@@ -3152,7 +3267,9 @@ TextServerFallback::TextServerFallback() {
};
TextServerFallback::~TextServerFallback() {
+#ifdef MODULE_FREETYPE_ENABLED
if (library != nullptr) {
FT_Done_FreeType(library);
}
+#endif
};
diff --git a/modules/text_server_fb/text_server_fb.h b/modules/text_server_fb/text_server_fb.h
index fb7de8f443..67b08d1eac 100644
--- a/modules/text_server_fb/text_server_fb.h
+++ b/modules/text_server_fb/text_server_fb.h
@@ -42,7 +42,7 @@
#include "core/templates/thread_work_pool.h"
#include "scene/resources/texture.h"
-#include "modules/modules_enabled.gen.h"
+#include "modules/modules_enabled.gen.h" // For freetype, msdfgen.
#ifdef MODULE_FREETYPE_ENABLED
#include <ft2build.h>
@@ -142,6 +142,10 @@ class TextServerFallback : public TextServer {
Dictionary variation_coordinates;
float oversampling = 0.f;
+ uint32_t style_flags = 0;
+ String font_name;
+ String style_name;
+
Map<Vector2i, FontDataForSizeFallback *> cache;
bool face_init = false;
@@ -234,6 +238,15 @@ public:
virtual void font_set_data(RID p_font_rid, const PackedByteArray &p_data) override;
virtual void font_set_data_ptr(RID p_font_rid, const uint8_t *p_data_ptr, size_t p_data_size) override;
+ virtual void font_set_style(RID p_font_rid, uint32_t /*FontStyle*/ p_style) override;
+ virtual uint32_t /*FontStyle*/ font_get_style(RID p_font_rid) const override;
+
+ virtual void font_set_style_name(RID p_font_rid, const String &p_name) override;
+ virtual String font_get_style_name(RID p_font_rid) const override;
+
+ virtual void font_set_name(RID p_font_rid, const String &p_name) override;
+ virtual String font_get_name(RID p_font_rid) const override;
+
virtual void font_set_antialiased(RID p_font_rid, bool p_antialiased) override;
virtual bool font_is_antialiased(RID p_font_rid) const override;
@@ -361,6 +374,9 @@ public:
virtual void shaped_text_set_bidi_override(RID p_shaped, const Array &p_override) override;
+ virtual void shaped_text_set_custom_punctuation(RID p_shaped, const String &p_punct) override;
+ virtual String shaped_text_get_custom_punctuation(RID p_shaped) const override;
+
virtual void shaped_text_set_orientation(RID p_shaped, Orientation p_orientation = ORIENTATION_HORIZONTAL) override;
virtual Orientation shaped_text_get_orientation(RID p_shaped) const override;
diff --git a/modules/theora/video_stream_theora.cpp b/modules/theora/video_stream_theora.cpp
index ef434f107e..4f5ae4afb0 100644
--- a/modules/theora/video_stream_theora.cpp
+++ b/modules/theora/video_stream_theora.cpp
@@ -673,7 +673,7 @@ void VideoStreamTheora::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_file", "file"), &VideoStreamTheora::set_file);
ClassDB::bind_method(D_METHOD("get_file"), &VideoStreamTheora::get_file);
- ADD_PROPERTY(PropertyInfo(Variant::STRING, "file", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL), "set_file", "get_file");
+ ADD_PROPERTY(PropertyInfo(Variant::STRING, "file", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL), "set_file", "get_file");
}
////////////
diff --git a/modules/tinyexr/SCsub b/modules/tinyexr/SCsub
index 30bde96fb4..bf9242cc16 100644
--- a/modules/tinyexr/SCsub
+++ b/modules/tinyexr/SCsub
@@ -20,6 +20,9 @@ env_tinyexr.Prepend(CPPPATH=[thirdparty_dir])
# Enable threaded loading with C++11.
env_tinyexr.Append(CPPDEFINES=["TINYEXR_USE_THREAD"])
+# miniz is an external dependency, we could add it but we can instead rely
+# on our existing bundled zlib.
+env_tinyexr.Append(CPPDEFINES=[("TINYEXR_USE_MINIZ", 0)])
env_thirdparty = env_tinyexr.Clone()
env_thirdparty.disable_warnings()
diff --git a/modules/tinyexr/image_loader_tinyexr.cpp b/modules/tinyexr/image_loader_tinyexr.cpp
index eb7a8597e6..6c4c06aab0 100644
--- a/modules/tinyexr/image_loader_tinyexr.cpp
+++ b/modules/tinyexr/image_loader_tinyexr.cpp
@@ -33,6 +33,8 @@
#include "core/os/os.h"
#include "core/string/print_string.h"
+#include <zlib.h> // Should come before including tinyexr.
+
#include "thirdparty/tinyexr/tinyexr.h"
Error ImageLoaderTinyEXR::load_image(Ref<Image> p_image, FileAccess *f, bool p_force_linear, float p_scale) {
diff --git a/modules/tinyexr/image_saver_tinyexr.cpp b/modules/tinyexr/image_saver_tinyexr.cpp
index 6a2fb0f666..f64acf8395 100644
--- a/modules/tinyexr/image_saver_tinyexr.cpp
+++ b/modules/tinyexr/image_saver_tinyexr.cpp
@@ -31,6 +31,8 @@
#include "image_saver_tinyexr.h"
#include "core/math/math_funcs.h"
+#include <zlib.h> // Should come before including tinyexr.
+
#include "thirdparty/tinyexr/tinyexr.h"
static bool is_supported_format(Image::Format p_format) {
diff --git a/modules/upnp/SCsub b/modules/upnp/SCsub
index b2fed0cb23..4b385b820d 100644
--- a/modules/upnp/SCsub
+++ b/modules/upnp/SCsub
@@ -26,9 +26,9 @@ if env["builtin_miniupnpc"]:
"receivedata.c",
"addr_is_reserved.c",
]
- thirdparty_sources = [thirdparty_dir + "miniupnpc/" + file for file in thirdparty_sources]
+ thirdparty_sources = [thirdparty_dir + "src/" + file for file in thirdparty_sources]
- env_upnp.Prepend(CPPPATH=[thirdparty_dir])
+ env_upnp.Prepend(CPPPATH=[thirdparty_dir + "include"])
env_upnp.Append(CPPDEFINES=["MINIUPNP_STATICLIB"])
env_upnp.Append(CPPDEFINES=["MINIUPNPC_SET_SOCKET_TIMEOUT"])
diff --git a/modules/upnp/upnp.cpp b/modules/upnp/upnp.cpp
index 0e51822b01..64823deaba 100644
--- a/modules/upnp/upnp.cpp
+++ b/modules/upnp/upnp.cpp
@@ -30,8 +30,8 @@
#include "upnp.h"
-#include <miniupnpc/miniwget.h>
-#include <miniupnpc/upnpcommands.h>
+#include <miniwget.h>
+#include <upnpcommands.h>
#include <stdlib.h>
@@ -257,7 +257,7 @@ void UPNP::set_device(int index, Ref<UPNPDevice> device) {
void UPNP::remove_device(int index) {
ERR_FAIL_INDEX(index, devices.size());
- devices.remove(index);
+ devices.remove_at(index);
}
void UPNP::clear_devices() {
diff --git a/modules/upnp/upnp.h b/modules/upnp/upnp.h
index b961a9667f..67df187f8c 100644
--- a/modules/upnp/upnp.h
+++ b/modules/upnp/upnp.h
@@ -35,7 +35,7 @@
#include "upnp_device.h"
-#include <miniupnpc/miniupnpc.h>
+#include <miniupnpc.h>
class UPNP : public RefCounted {
GDCLASS(UPNP, RefCounted);
diff --git a/modules/upnp/upnp_device.cpp b/modules/upnp/upnp_device.cpp
index ddc66d593c..692a0f3509 100644
--- a/modules/upnp/upnp_device.cpp
+++ b/modules/upnp/upnp_device.cpp
@@ -32,7 +32,7 @@
#include "upnp.h"
-#include <miniupnpc/upnpcommands.h>
+#include <upnpcommands.h>
String UPNPDevice::query_external_address() const {
ERR_FAIL_COND_V_MSG(!is_valid_gateway(), "", "The Internet Gateway Device must be valid.");
diff --git a/modules/visual_script/SCsub b/modules/visual_script/SCsub
index 16faea08d7..b91cceae09 100644
--- a/modules/visual_script/SCsub
+++ b/modules/visual_script/SCsub
@@ -6,3 +6,6 @@ Import("env_modules")
env_vs = env_modules.Clone()
env_vs.add_source_files(env.modules_sources, "*.cpp")
+
+if env["tools"]:
+ env_vs.add_source_files(env.modules_sources, "editor/*.cpp")
diff --git a/modules/visual_script/doc_classes/VisualScript.xml b/modules/visual_script/doc_classes/VisualScript.xml
index be6bf00e50..a452974014 100644
--- a/modules/visual_script/doc_classes/VisualScript.xml
+++ b/modules/visual_script/doc_classes/VisualScript.xml
@@ -9,7 +9,7 @@
You are most likely to use this class via the Visual Script editor or when writing plugins for it.
</description>
<tutorials>
- <link title="VisualScript documentation index">https://docs.godotengine.org/en/latest/tutorials/scripting/visual_script/index.html</link>
+ <link title="VisualScript documentation index">$DOCS_URL/tutorials/scripting/visual_script/index.html</link>
</tutorials>
<methods>
<method name="add_custom_signal">
diff --git a/modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml b/modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml
index 942d92311b..b3fd678379 100644
--- a/modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml
+++ b/modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml
@@ -112,101 +112,107 @@
<constant name="MATH_RANDF" value="32" enum="BuiltinFunc">
Return a random floating-point value between 0 and 1. To obtain a random value between 0 to N, you can use it with multiplication.
</constant>
- <constant name="MATH_RANDF_RANGE" value="33" enum="BuiltinFunc">
+ <constant name="MATH_RANDI_RANGE" value="33" enum="BuiltinFunc">
+ Return a random 32-bit integer value between the two inputs.
+ </constant>
+ <constant name="MATH_RANDF_RANGE" value="34" enum="BuiltinFunc">
Return a random floating-point value between the two inputs.
</constant>
- <constant name="MATH_RANDI_RANGE" value="34" enum="BuiltinFunc">
- Return a random 32-bit integer value between the two inputs.
+ <constant name="MATH_RANDFN" value="35" enum="BuiltinFunc">
+ Returns a normally-distributed pseudo-random number, using Box-Muller transform with the specified mean and a standard deviation. This is also called Gaussian distribution.
</constant>
- <constant name="MATH_SEED" value="35" enum="BuiltinFunc">
+ <constant name="MATH_SEED" value="36" enum="BuiltinFunc">
Set the seed for the random number generator.
</constant>
- <constant name="MATH_RANDSEED" value="36" enum="BuiltinFunc">
+ <constant name="MATH_RANDSEED" value="37" enum="BuiltinFunc">
Return a random value from the given seed, along with the new seed.
</constant>
- <constant name="MATH_DEG2RAD" value="37" enum="BuiltinFunc">
+ <constant name="MATH_DEG2RAD" value="38" enum="BuiltinFunc">
Convert the input from degrees to radians.
</constant>
- <constant name="MATH_RAD2DEG" value="38" enum="BuiltinFunc">
+ <constant name="MATH_RAD2DEG" value="39" enum="BuiltinFunc">
Convert the input from radians to degrees.
</constant>
- <constant name="MATH_LINEAR2DB" value="39" enum="BuiltinFunc">
+ <constant name="MATH_LINEAR2DB" value="40" enum="BuiltinFunc">
Convert the input from linear volume to decibel volume.
</constant>
- <constant name="MATH_DB2LINEAR" value="40" enum="BuiltinFunc">
+ <constant name="MATH_DB2LINEAR" value="41" enum="BuiltinFunc">
Convert the input from decibel volume to linear volume.
</constant>
- <constant name="MATH_WRAP" value="41" enum="BuiltinFunc">
+ <constant name="MATH_WRAP" value="42" enum="BuiltinFunc">
+ </constant>
+ <constant name="MATH_WRAPF" value="43" enum="BuiltinFunc">
</constant>
- <constant name="MATH_WRAPF" value="42" enum="BuiltinFunc">
+ <constant name="MATH_PINGPONG" value="44" enum="BuiltinFunc">
+ Return the [code]value[/code] wrapped between [code]0[/code] and the [code]length[/code]. If the limit is reached, the next value the function returned is decreased to the [code]0[/code] side or increased to the [code]length[/code] side (like a triangle wave). If [code]length[/code] is less than zero, it becomes positive.
</constant>
- <constant name="LOGIC_MAX" value="43" enum="BuiltinFunc">
+ <constant name="LOGIC_MAX" value="45" enum="BuiltinFunc">
Return the greater of the two numbers, also known as their maximum.
</constant>
- <constant name="LOGIC_MIN" value="44" enum="BuiltinFunc">
+ <constant name="LOGIC_MIN" value="46" enum="BuiltinFunc">
Return the lesser of the two numbers, also known as their minimum.
</constant>
- <constant name="LOGIC_CLAMP" value="45" enum="BuiltinFunc">
+ <constant name="LOGIC_CLAMP" value="47" enum="BuiltinFunc">
Return the input clamped inside the given range, ensuring the result is never outside it. Equivalent to [code]min(max(input, range_low), range_high)[/code].
</constant>
- <constant name="LOGIC_NEAREST_PO2" value="46" enum="BuiltinFunc">
+ <constant name="LOGIC_NEAREST_PO2" value="48" enum="BuiltinFunc">
Return the nearest power of 2 to the input.
</constant>
- <constant name="OBJ_WEAKREF" value="47" enum="BuiltinFunc">
+ <constant name="OBJ_WEAKREF" value="49" enum="BuiltinFunc">
Create a [WeakRef] from the input.
</constant>
- <constant name="TYPE_CONVERT" value="48" enum="BuiltinFunc">
+ <constant name="TYPE_CONVERT" value="50" enum="BuiltinFunc">
Convert between types.
</constant>
- <constant name="TYPE_OF" value="49" enum="BuiltinFunc">
+ <constant name="TYPE_OF" value="51" enum="BuiltinFunc">
Return the type of the input as an integer. Check [enum Variant.Type] for the integers that might be returned.
</constant>
- <constant name="TYPE_EXISTS" value="50" enum="BuiltinFunc">
+ <constant name="TYPE_EXISTS" value="52" enum="BuiltinFunc">
Checks if a type is registered in the [ClassDB].
</constant>
- <constant name="TEXT_CHAR" value="51" enum="BuiltinFunc">
+ <constant name="TEXT_CHAR" value="53" enum="BuiltinFunc">
Return a character with the given ascii value.
</constant>
- <constant name="TEXT_STR" value="52" enum="BuiltinFunc">
+ <constant name="TEXT_STR" value="54" enum="BuiltinFunc">
Convert the input to a string.
</constant>
- <constant name="TEXT_PRINT" value="53" enum="BuiltinFunc">
+ <constant name="TEXT_PRINT" value="55" enum="BuiltinFunc">
Print the given string to the output window.
</constant>
- <constant name="TEXT_PRINTERR" value="54" enum="BuiltinFunc">
+ <constant name="TEXT_PRINTERR" value="56" enum="BuiltinFunc">
Print the given string to the standard error output.
</constant>
- <constant name="TEXT_PRINTRAW" value="55" enum="BuiltinFunc">
+ <constant name="TEXT_PRINTRAW" value="57" enum="BuiltinFunc">
Print the given string to the standard output, without adding a newline.
</constant>
- <constant name="TEXT_PRINT_VERBOSE" value="56" enum="BuiltinFunc">
+ <constant name="TEXT_PRINT_VERBOSE" value="58" enum="BuiltinFunc">
</constant>
- <constant name="VAR_TO_STR" value="57" enum="BuiltinFunc">
+ <constant name="VAR_TO_STR" value="59" enum="BuiltinFunc">
Serialize a [Variant] to a string.
</constant>
- <constant name="STR_TO_VAR" value="58" enum="BuiltinFunc">
+ <constant name="STR_TO_VAR" value="60" enum="BuiltinFunc">
Deserialize a [Variant] from a string serialized using [constant VAR_TO_STR].
</constant>
- <constant name="VAR_TO_BYTES" value="59" enum="BuiltinFunc">
+ <constant name="VAR_TO_BYTES" value="61" enum="BuiltinFunc">
Serialize a [Variant] to a [PackedByteArray].
</constant>
- <constant name="BYTES_TO_VAR" value="60" enum="BuiltinFunc">
+ <constant name="BYTES_TO_VAR" value="62" enum="BuiltinFunc">
Deserialize a [Variant] from a [PackedByteArray] serialized using [constant VAR_TO_BYTES].
</constant>
- <constant name="MATH_SMOOTHSTEP" value="61" enum="BuiltinFunc">
+ <constant name="MATH_SMOOTHSTEP" value="63" enum="BuiltinFunc">
Return a number smoothly interpolated between the first two inputs, based on the third input. Similar to [constant MATH_LERP], but interpolates faster at the beginning and slower at the end. Using Hermite interpolation formula:
[codeblock]
var t = clamp((weight - from) / (to - from), 0.0, 1.0)
return t * t * (3.0 - 2.0 * t)
[/codeblock]
</constant>
- <constant name="MATH_POSMOD" value="62" enum="BuiltinFunc">
+ <constant name="MATH_POSMOD" value="64" enum="BuiltinFunc">
</constant>
- <constant name="MATH_LERP_ANGLE" value="63" enum="BuiltinFunc">
+ <constant name="MATH_LERP_ANGLE" value="65" enum="BuiltinFunc">
</constant>
- <constant name="TEXT_ORD" value="64" enum="BuiltinFunc">
+ <constant name="TEXT_ORD" value="66" enum="BuiltinFunc">
</constant>
- <constant name="FUNC_MAX" value="65" enum="BuiltinFunc">
+ <constant name="FUNC_MAX" value="67" enum="BuiltinFunc">
Represents the size of the [enum BuiltinFunc] enum.
</constant>
</constants>
diff --git a/modules/visual_script/visual_script_editor.cpp b/modules/visual_script/editor/visual_script_editor.cpp
index b23374bfb1..13dd1f7bc7 100644
--- a/modules/visual_script/visual_script_editor.cpp
+++ b/modules/visual_script/editor/visual_script_editor.cpp
@@ -30,6 +30,10 @@
#include "visual_script_editor.h"
+#include "../visual_script_expression.h"
+#include "../visual_script_flow_control.h"
+#include "../visual_script_func_nodes.h"
+#include "../visual_script_nodes.h"
#include "core/input/input.h"
#include "core/object/class_db.h"
#include "core/object/script_language.h"
@@ -39,10 +43,6 @@
#include "editor/editor_resource_preview.h"
#include "editor/editor_scale.h"
#include "scene/main/window.h"
-#include "visual_script_expression.h"
-#include "visual_script_flow_control.h"
-#include "visual_script_func_nodes.h"
-#include "visual_script_nodes.h"
#ifdef TOOLS_ENABLED
class VisualScriptEditorSignalEdit : public Object {
@@ -998,7 +998,7 @@ void VisualScriptEditor::_change_port_type(int p_select, int p_id, int p_port, b
void VisualScriptEditor::_update_node_size(int p_id) {
Node *node = graph->get_node(itos(p_id));
if (Object::cast_to<Control>(node)) {
- Object::cast_to<Control>(node)->set_size(Vector2(1, 1)); // Shrink if text is smaller.
+ Object::cast_to<Control>(node)->reset_size(); // Shrink if text is smaller.
}
}
@@ -1172,9 +1172,9 @@ void VisualScriptEditor::_member_selected() {
if (ti->get_parent() == members->get_root()->get_first_child()) {
#ifdef OSX_ENABLED
- bool held_ctrl = Input::get_singleton()->is_key_pressed(KEY_META);
+ bool held_ctrl = Input::get_singleton()->is_key_pressed(Key::META);
#else
- bool held_ctrl = Input::get_singleton()->is_key_pressed(KEY_CTRL);
+ bool held_ctrl = Input::get_singleton()->is_key_pressed(Key::CTRL);
#endif
if (held_ctrl) {
ERR_FAIL_COND(!script->has_function(selected));
@@ -1262,6 +1262,23 @@ void VisualScriptEditor::_member_edited() {
undo_redo->create_action(TTR("Rename Variable"));
undo_redo->add_do_method(script.ptr(), "rename_variable", name, new_name);
undo_redo->add_undo_method(script.ptr(), "rename_variable", new_name, name);
+
+ // Also fix all variable setter & getter calls
+ List<int> lst;
+ script->get_node_list(&lst);
+ for (int &P : lst) {
+ Ref<VisualScriptPropertySet> pset = script->get_node(P);
+ if (pset.is_valid() && pset->get_property() == name) {
+ undo_redo->add_do_method(pset.ptr(), "set_property", new_name);
+ undo_redo->add_undo_method(pset.ptr(), "set_property", name);
+ }
+ Ref<VisualScriptPropertyGet> pget = script->get_node(P);
+ if (pget.is_valid() && pget->get_property() == name) {
+ undo_redo->add_do_method(pget.ptr(), "set_property", new_name);
+ undo_redo->add_undo_method(pget.ptr(), "set_property", name);
+ }
+ }
+
undo_redo->add_do_method(this, "_update_members");
undo_redo->add_undo_method(this, "_update_members");
undo_redo->add_do_method(this, "_update_graph");
@@ -1278,6 +1295,18 @@ void VisualScriptEditor::_member_edited() {
undo_redo->create_action(TTR("Rename Signal"));
undo_redo->add_do_method(script.ptr(), "rename_custom_signal", name, new_name);
undo_redo->add_undo_method(script.ptr(), "rename_custom_signal", new_name, name);
+
+ // Also fix all signal emitting nodes
+ List<int> lst;
+ script->get_node_list(&lst);
+ for (int &P : lst) {
+ Ref<VisualScriptEmitSignal> psig = script->get_node(P);
+ if (psig.is_valid() && psig->get_signal() == name) {
+ undo_redo->add_do_method(psig.ptr(), "set_signal", new_name);
+ undo_redo->add_undo_method(psig.ptr(), "set_signal", name);
+ }
+ }
+
undo_redo->add_do_method(this, "_update_members");
undo_redo->add_undo_method(this, "_update_members");
undo_redo->add_do_method(this, "emit_signal", "edited_script_changed");
@@ -1616,7 +1645,7 @@ void VisualScriptEditor::_expression_text_changed(const String &p_text, int p_id
Node *node = graph->get_node(itos(p_id));
if (Object::cast_to<Control>(node)) {
- Object::cast_to<Control>(node)->set_size(Vector2(1, 1)); // Shrink if text is smaller.
+ Object::cast_to<Control>(node)->reset_size(); // Shrink if text is smaller.
}
updating_graph = false;
@@ -1676,6 +1705,128 @@ String VisualScriptEditor::_validate_name(const String &p_name) const {
return valid;
}
+void VisualScriptEditor::_on_nodes_copy() {
+ clipboard->nodes.clear();
+ clipboard->data_connections.clear();
+ clipboard->sequence_connections.clear();
+
+ for (int i = 0; i < graph->get_child_count(); i++) {
+ GraphNode *gn = Object::cast_to<GraphNode>(graph->get_child(i));
+ if (gn) {
+ if (gn->is_selected()) {
+ int id = gn->get_name().operator String().to_int();
+ Ref<VisualScriptNode> node = script->get_node(id);
+ if (Object::cast_to<VisualScriptFunction>(*node)) {
+ EditorNode::get_singleton()->show_warning(TTR("Can't copy the function node."));
+ return;
+ }
+ if (node.is_valid()) {
+ clipboard->nodes[id] = node->duplicate(true);
+ clipboard->nodes_positions[id] = script->get_node_position(id);
+ }
+ }
+ }
+ }
+
+ if (clipboard->nodes.is_empty()) {
+ return;
+ }
+
+ List<VisualScript::SequenceConnection> sequence_connections;
+ script->get_sequence_connection_list(&sequence_connections);
+
+ for (const VisualScript::SequenceConnection &E : sequence_connections) {
+ if (clipboard->nodes.has(E.from_node) && clipboard->nodes.has(E.to_node)) {
+ clipboard->sequence_connections.insert(E);
+ }
+ }
+
+ List<VisualScript::DataConnection> data_connections;
+ script->get_data_connection_list(&data_connections);
+
+ for (const VisualScript::DataConnection &E : data_connections) {
+ if (clipboard->nodes.has(E.from_node) && clipboard->nodes.has(E.to_node)) {
+ clipboard->data_connections.insert(E);
+ }
+ }
+}
+
+void VisualScriptEditor::_on_nodes_paste() {
+ if (clipboard->nodes.is_empty()) {
+ EditorNode::get_singleton()->show_warning(TTR("Clipboard is empty!"));
+ return;
+ }
+
+ Map<int, int> remap;
+
+ undo_redo->create_action(TTR("Paste VisualScript Nodes"));
+ int idc = script->get_available_id() + 1;
+
+ Set<int> to_select;
+
+ Set<Vector2> existing_positions;
+
+ {
+ List<int> nodes;
+ script->get_node_list(&nodes);
+ for (int &E : nodes) {
+ Vector2 pos = script->get_node_position(E).snapped(Vector2(2, 2));
+ existing_positions.insert(pos);
+ }
+ }
+
+ bool first_paste = true;
+ Vector2 position_offset = Vector2(0, 0);
+
+ for (KeyValue<int, Ref<VisualScriptNode>> &E : clipboard->nodes) {
+ Ref<VisualScriptNode> node = E.value->duplicate();
+
+ int new_id = idc++;
+ to_select.insert(new_id);
+
+ remap[E.key] = new_id;
+
+ Vector2 paste_pos = clipboard->nodes_positions[E.key];
+
+ if (first_paste) {
+ position_offset = _get_pos_in_graph(mouse_up_position - graph->get_global_position()) - paste_pos;
+ first_paste = false;
+ }
+
+ paste_pos += position_offset;
+
+ while (existing_positions.has(paste_pos.snapped(Vector2(2, 2)))) {
+ paste_pos += Vector2(20, 20) * EDSCALE;
+ }
+
+ undo_redo->add_do_method(script.ptr(), "add_node", new_id, node, paste_pos);
+ undo_redo->add_undo_method(script.ptr(), "remove_node", new_id);
+ }
+
+ for (Set<VisualScript::SequenceConnection>::Element *E = clipboard->sequence_connections.front(); E; E = E->next()) {
+ undo_redo->add_do_method(script.ptr(), "sequence_connect", remap[E->get().from_node], E->get().from_output, remap[E->get().to_node]);
+ undo_redo->add_undo_method(script.ptr(), "sequence_disconnect", remap[E->get().from_node], E->get().from_output, remap[E->get().to_node]);
+ }
+
+ for (Set<VisualScript::DataConnection>::Element *E = clipboard->data_connections.front(); E; E = E->next()) {
+ undo_redo->add_do_method(script.ptr(), "data_connect", remap[E->get().from_node], E->get().from_port, remap[E->get().to_node], E->get().to_port);
+ undo_redo->add_undo_method(script.ptr(), "data_disconnect", remap[E->get().from_node], E->get().from_port, remap[E->get().to_node], E->get().to_port);
+ }
+
+ undo_redo->add_do_method(this, "_update_graph");
+ undo_redo->add_undo_method(this, "_update_graph");
+
+ undo_redo->commit_action();
+
+ for (int i = 0; i < graph->get_child_count(); i++) {
+ GraphNode *gn = Object::cast_to<GraphNode>(graph->get_child(i));
+ if (gn) {
+ int id = gn->get_name().operator String().to_int();
+ gn->set_selected(to_select.has(id));
+ }
+ }
+}
+
void VisualScriptEditor::_on_nodes_delete() {
// Delete all the selected nodes.
@@ -1830,7 +1981,7 @@ void VisualScriptEditor::input(const Ref<InputEvent> &p_event) {
void VisualScriptEditor::_graph_gui_input(const Ref<InputEvent> &p_event) {
Ref<InputEventMouseButton> key = p_event;
- if (key.is_valid() && key->is_pressed() && key->get_button_mask() == MOUSE_BUTTON_RIGHT) {
+ if (key.is_valid() && key->is_pressed() && key->get_button_mask() == MouseButton::RIGHT) {
saved_position = graph->get_local_mouse_position();
Point2 gpos = Input::get_singleton()->get_mouse_position();
@@ -1927,7 +2078,7 @@ void VisualScriptEditor::_fn_name_box_input(const Ref<InputEvent> &p_event) {
}
Ref<InputEventKey> key = p_event;
- if (key.is_valid() && key->is_pressed() && key->get_keycode() == KEY_ENTER) {
+ if (key.is_valid() && key->is_pressed() && key->get_keycode() == Key::ENTER) {
function_name_edit->hide();
_rename_function(selected, function_name_box->get_text());
function_name_box->clear();
@@ -1986,7 +2137,7 @@ bool VisualScriptEditor::can_drop_data_fw(const Point2 &p_point, const Variant &
String(d["type"]) == "nodes")) {
if (String(d["type"]) == "obj_property") {
#ifdef OSX_ENABLED
- const_cast<VisualScriptEditor *>(this)->_show_hint(vformat(TTR("Hold %s to drop a Getter. Hold Shift to drop a generic signature."), find_keycode_name(KEY_META)));
+ const_cast<VisualScriptEditor *>(this)->_show_hint(vformat(TTR("Hold %s to drop a Getter. Hold Shift to drop a generic signature."), find_keycode_name(Key::META)));
#else
const_cast<VisualScriptEditor *>(this)->_show_hint(TTR("Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."));
#endif
@@ -1994,7 +2145,7 @@ bool VisualScriptEditor::can_drop_data_fw(const Point2 &p_point, const Variant &
if (String(d["type"]) == "nodes") {
#ifdef OSX_ENABLED
- const_cast<VisualScriptEditor *>(this)->_show_hint(vformat(TTR("Hold %s to drop a simple reference to the node."), find_keycode_name(KEY_META)));
+ const_cast<VisualScriptEditor *>(this)->_show_hint(vformat(TTR("Hold %s to drop a simple reference to the node."), find_keycode_name(Key::META)));
#else
const_cast<VisualScriptEditor *>(this)->_show_hint(TTR("Hold Ctrl to drop a simple reference to the node."));
#endif
@@ -2002,7 +2153,7 @@ bool VisualScriptEditor::can_drop_data_fw(const Point2 &p_point, const Variant &
if (String(d["type"]) == "visual_script_variable_drag") {
#ifdef OSX_ENABLED
- const_cast<VisualScriptEditor *>(this)->_show_hint(vformat(TTR("Hold %s to drop a Variable Setter."), find_keycode_name(KEY_META)));
+ const_cast<VisualScriptEditor *>(this)->_show_hint(vformat(TTR("Hold %s to drop a Variable Setter."), find_keycode_name(Key::META)));
#else
const_cast<VisualScriptEditor *>(this)->_show_hint(TTR("Hold Ctrl to drop a Variable Setter."));
#endif
@@ -2065,28 +2216,28 @@ void VisualScriptEditor::drop_data_fw(const Point2 &p_point, const Variant &p_da
if (String(d["type"]) == "visual_script_variable_drag") {
#ifdef OSX_ENABLED
- bool use_set = Input::get_singleton()->is_key_pressed(KEY_META);
+ bool use_set = Input::get_singleton()->is_key_pressed(Key::META);
#else
- bool use_set = Input::get_singleton()->is_key_pressed(KEY_CTRL);
+ bool use_set = Input::get_singleton()->is_key_pressed(Key::CTRL);
#endif
Vector2 pos = _get_pos_in_graph(p_point);
Ref<VisualScriptNode> vnode;
if (use_set) {
- Ref<VisualScriptVariableSet> vnodes;
- vnodes.instantiate();
- vnodes->set_variable(d["variable"]);
- vnode = vnodes;
+ Ref<VisualScriptPropertySet> pset;
+ pset.instantiate();
+ vnode = pset;
} else {
- Ref<VisualScriptVariableGet> vnodeg;
- vnodeg.instantiate();
- vnodeg->set_variable(d["variable"]);
- vnode = vnodeg;
+ Ref<VisualScriptPropertyGet> pget;
+ pget.instantiate();
+ vnode = pget;
}
int new_id = script->get_available_id();
-
undo_redo->create_action(TTR("Add Node"));
+ undo_redo->add_do_method(vnode.ptr(), "set_property", d["variable"]);
+ undo_redo->add_do_method(vnode.ptr(), "set_base_script", script->get_path());
+
undo_redo->add_do_method(script.ptr(), "add_node", new_id, vnode, pos);
undo_redo->add_undo_method(script.ptr(), "remove_node", new_id);
undo_redo->add_do_method(this, "_update_graph");
@@ -2174,9 +2325,9 @@ void VisualScriptEditor::drop_data_fw(const Point2 &p_point, const Variant &p_da
if (String(d["type"]) == "files") {
#ifdef OSX_ENABLED
- bool use_preload = Input::get_singleton()->is_key_pressed(KEY_META);
+ bool use_preload = Input::get_singleton()->is_key_pressed(Key::META);
#else
- bool use_preload = Input::get_singleton()->is_key_pressed(KEY_CTRL);
+ bool use_preload = Input::get_singleton()->is_key_pressed(Key::CTRL);
#endif
Vector2 pos = _get_pos_in_graph(p_point);
@@ -2237,9 +2388,9 @@ void VisualScriptEditor::drop_data_fw(const Point2 &p_point, const Variant &p_da
}
#ifdef OSX_ENABLED
- bool use_node = Input::get_singleton()->is_key_pressed(KEY_META);
+ bool use_node = Input::get_singleton()->is_key_pressed(Key::META);
#else
- bool use_node = Input::get_singleton()->is_key_pressed(KEY_CTRL);
+ bool use_node = Input::get_singleton()->is_key_pressed(Key::CTRL);
#endif
Array nodes = d["nodes"];
@@ -2287,7 +2438,7 @@ void VisualScriptEditor::drop_data_fw(const Point2 &p_point, const Variant &p_da
if (String(d["type"]) == "obj_property") {
Node *sn = _find_script_node(get_tree()->get_edited_scene_root(), get_tree()->get_edited_scene_root(), script);
- if (!sn && !Input::get_singleton()->is_key_pressed(KEY_SHIFT)) {
+ if (!sn && !Input::get_singleton()->is_key_pressed(Key::SHIFT)) {
EditorNode::get_singleton()->show_warning(vformat(TTR("Can't drop properties because script '%s' is not used in this scene.\nDrop holding 'Shift' to just copy the signature."), get_name()));
return;
}
@@ -2302,12 +2453,12 @@ void VisualScriptEditor::drop_data_fw(const Point2 &p_point, const Variant &p_da
Vector2 pos = _get_pos_in_graph(p_point);
#ifdef OSX_ENABLED
- bool use_get = Input::get_singleton()->is_key_pressed(KEY_META);
+ bool use_get = Input::get_singleton()->is_key_pressed(Key::META);
#else
- bool use_get = Input::get_singleton()->is_key_pressed(KEY_CTRL);
+ bool use_get = Input::get_singleton()->is_key_pressed(Key::CTRL);
#endif
- if (!node || Input::get_singleton()->is_key_pressed(KEY_SHIFT)) {
+ if (!node || Input::get_singleton()->is_key_pressed(Key::SHIFT)) {
if (use_get) {
undo_redo->create_action(TTR("Add Getter Property"));
} else {
@@ -2329,12 +2480,14 @@ void VisualScriptEditor::drop_data_fw(const Point2 &p_point, const Variant &p_da
pget.instantiate();
pget->set_call_mode(VisualScriptPropertyGet::CALL_MODE_INSTANCE);
pget->set_base_type(obj->get_class());
-
vnode = pget;
}
undo_redo->add_do_method(script.ptr(), "add_node", base_id, vnode, pos);
undo_redo->add_do_method(vnode.ptr(), "set_property", d["property"]);
+ if (!obj->get_script().is_null()) {
+ undo_redo->add_do_method(vnode.ptr(), "set_base_script", Ref<Script>(obj->get_script())->get_path());
+ }
if (!use_get) {
undo_redo->add_do_method(vnode.ptr(), "set_default_input_value", 0, d["value"]);
}
@@ -2365,7 +2518,6 @@ void VisualScriptEditor::drop_data_fw(const Point2 &p_point, const Variant &p_da
pset->set_call_mode(VisualScriptPropertySet::CALL_MODE_NODE_PATH);
pset->set_base_path(sn->get_path_to(node));
}
-
vnode = pset;
} else {
Ref<VisualScriptPropertyGet> pget;
@@ -2380,9 +2532,13 @@ void VisualScriptEditor::drop_data_fw(const Point2 &p_point, const Variant &p_da
}
undo_redo->add_do_method(script.ptr(), "add_node", base_id, vnode, pos);
undo_redo->add_do_method(vnode.ptr(), "set_property", d["property"]);
+ if (!obj->get_script().is_null()) {
+ undo_redo->add_do_method(vnode.ptr(), "set_base_script", Ref<Script>(obj->get_script())->get_path());
+ }
if (!use_get) {
undo_redo->add_do_method(vnode.ptr(), "set_default_input_value", 0, d["value"]);
}
+
undo_redo->add_undo_method(script.ptr(), "remove_node", base_id);
undo_redo->add_do_method(this, "_update_graph");
@@ -2460,18 +2616,21 @@ void VisualScriptEditor::reload_text() {
String VisualScriptEditor::get_name() {
String name;
- if (script->get_path().find("local://") == -1 && script->get_path().find("::") == -1) {
- name = script->get_path().get_file();
- if (is_unsaved()) {
- if (script->get_path().is_empty()) {
- name = TTR("[unsaved]");
- }
- name += "(*)";
+ name = script->get_path().get_file();
+ if (name.is_empty()) {
+ // This appears for newly created built-in scripts before saving the scene.
+ name = TTR("[unsaved]");
+ } else if (script->is_built_in()) {
+ const String &script_name = script->get_name();
+ if (script_name != "") {
+ // If the built-in script has a custom resource name defined,
+ // display the built-in script name as follows: `ResourceName (scene_file.tscn)`
+ name = vformat("%s (%s)", script_name, name.get_slice("::", 0));
}
- } else if (script->get_name() != "") {
- name = script->get_name();
- } else {
- name = script->get_class() + "(" + itos(script->get_instance_id()) + ")";
+ }
+
+ if (is_unsaved()) {
+ name += "(*)";
}
return name;
@@ -3546,7 +3705,7 @@ void VisualScriptEditor::_default_value_edited(Node *p_button, int p_id, int p_i
}
default_value_edit->set_position(Object::cast_to<Control>(p_button)->get_global_position() + Vector2(0, Object::cast_to<Control>(p_button)->get_size().y));
- default_value_edit->set_size(Size2(1, 1));
+ default_value_edit->reset_size();
if (pinfo.type == Variant::NODE_PATH) {
Node *edited_scene = get_tree()->get_edited_scene_root();
@@ -3702,7 +3861,7 @@ void VisualScriptEditor::_comment_node_resized(const Vector2 &p_new_size, int p_
undo_redo->commit_action();
gn->set_custom_minimum_size(new_size);
- gn->set_size(Size2(1, 1));
+ gn->reset_size();
graph->set_block_minimum_size_adjust(false);
updating_graph = false;
}
@@ -3739,120 +3898,15 @@ void VisualScriptEditor::_menu_option(int p_what) {
case EDIT_FIND_NODE_TYPE: {
_generic_search(script->get_instance_base_type());
} break;
- case EDIT_COPY_NODES:
+ case EDIT_COPY_NODES: {
+ _on_nodes_copy();
+ } break;
case EDIT_CUT_NODES: {
- clipboard->nodes.clear();
- clipboard->data_connections.clear();
- clipboard->sequence_connections.clear();
-
- for (int i = 0; i < graph->get_child_count(); i++) {
- GraphNode *gn = Object::cast_to<GraphNode>(graph->get_child(i));
- if (gn) {
- if (gn->is_selected()) {
- int id = gn->get_name().operator String().to_int();
- Ref<VisualScriptNode> node = script->get_node(id);
- if (Object::cast_to<VisualScriptFunction>(*node)) {
- EditorNode::get_singleton()->show_warning(TTR("Can't copy the function node."));
- return;
- }
- if (node.is_valid()) {
- clipboard->nodes[id] = node->duplicate(true);
- clipboard->nodes_positions[id] = script->get_node_position(id);
- }
- }
- }
- }
-
- if (clipboard->nodes.is_empty()) {
- break;
- }
-
- List<VisualScript::SequenceConnection> sequence_connections;
- script->get_sequence_connection_list(&sequence_connections);
-
- for (const VisualScript::SequenceConnection &E : sequence_connections) {
- if (clipboard->nodes.has(E.from_node) && clipboard->nodes.has(E.to_node)) {
- clipboard->sequence_connections.insert(E);
- }
- }
-
- List<VisualScript::DataConnection> data_connections;
- script->get_data_connection_list(&data_connections);
-
- for (const VisualScript::DataConnection &E : data_connections) {
- if (clipboard->nodes.has(E.from_node) && clipboard->nodes.has(E.to_node)) {
- clipboard->data_connections.insert(E);
- }
- }
- if (p_what == EDIT_CUT_NODES) {
- _on_nodes_delete(); // oh yeah, also delete on cut
- }
-
+ _on_nodes_copy();
+ _on_nodes_delete();
} break;
case EDIT_PASTE_NODES: {
- if (clipboard->nodes.is_empty()) {
- EditorNode::get_singleton()->show_warning(TTR("Clipboard is empty!"));
- break;
- }
-
- Map<int, int> remap;
-
- undo_redo->create_action(TTR("Paste VisualScript Nodes"));
- int idc = script->get_available_id() + 1;
-
- Set<int> to_select;
-
- Set<Vector2> existing_positions;
-
- {
- List<int> nodes;
- script->get_node_list(&nodes);
- for (int &E : nodes) {
- Vector2 pos = script->get_node_position(E).snapped(Vector2(2, 2));
- existing_positions.insert(pos);
- }
- }
-
- for (KeyValue<int, Ref<VisualScriptNode>> &E : clipboard->nodes) {
- Ref<VisualScriptNode> node = E.value->duplicate();
-
- int new_id = idc++;
- to_select.insert(new_id);
-
- remap[E.key] = new_id;
-
- Vector2 paste_pos = clipboard->nodes_positions[E.key];
-
- while (existing_positions.has(paste_pos.snapped(Vector2(2, 2)))) {
- paste_pos += Vector2(20, 20) * EDSCALE;
- }
-
- undo_redo->add_do_method(script.ptr(), "add_node", new_id, node, paste_pos);
- undo_redo->add_undo_method(script.ptr(), "remove_node", new_id);
- }
-
- for (Set<VisualScript::SequenceConnection>::Element *E = clipboard->sequence_connections.front(); E; E = E->next()) {
- undo_redo->add_do_method(script.ptr(), "sequence_connect", remap[E->get().from_node], E->get().from_output, remap[E->get().to_node]);
- undo_redo->add_undo_method(script.ptr(), "sequence_disconnect", remap[E->get().from_node], E->get().from_output, remap[E->get().to_node]);
- }
-
- for (Set<VisualScript::DataConnection>::Element *E = clipboard->data_connections.front(); E; E = E->next()) {
- undo_redo->add_do_method(script.ptr(), "data_connect", remap[E->get().from_node], E->get().from_port, remap[E->get().to_node], E->get().to_port);
- undo_redo->add_undo_method(script.ptr(), "data_disconnect", remap[E->get().from_node], E->get().from_port, remap[E->get().to_node], E->get().to_port);
- }
-
- undo_redo->add_do_method(this, "_update_graph");
- undo_redo->add_undo_method(this, "_update_graph");
-
- undo_redo->commit_action();
-
- for (int i = 0; i < graph->get_child_count(); i++) {
- GraphNode *gn = Object::cast_to<GraphNode>(graph->get_child(i));
- if (gn) {
- int id = gn->get_name().operator String().to_int();
- gn->set_selected(to_select.has(id));
- }
- }
+ _on_nodes_paste();
} break;
case EDIT_CREATE_FUNCTION: {
// Create Function.
@@ -4107,10 +4161,10 @@ void VisualScriptEditor::_member_rmb_selected(const Vector2 &p_pos) {
member_popup->clear();
member_popup->set_position(members->get_global_position() + p_pos);
- member_popup->set_size(Vector2());
+ member_popup->reset_size();
function_name_edit->set_position(members->get_global_position() + p_pos);
- function_name_edit->set_size(Vector2());
+ function_name_edit->reset_size();
TreeItem *root = members->get_root();
@@ -4334,6 +4388,8 @@ VisualScriptEditor::VisualScriptEditor() {
graph->connect("node_selected", callable_mp(this, &VisualScriptEditor::_node_selected));
graph->connect("begin_node_move", callable_mp(this, &VisualScriptEditor::_begin_node_move));
graph->connect("end_node_move", callable_mp(this, &VisualScriptEditor::_end_node_move));
+ graph->connect("copy_nodes_request", callable_mp(this, &VisualScriptEditor::_on_nodes_copy));
+ graph->connect("paste_nodes_request", callable_mp(this, &VisualScriptEditor::_on_nodes_paste));
graph->connect("delete_nodes_request", callable_mp(this, &VisualScriptEditor::_on_nodes_delete));
graph->connect("duplicate_nodes_request", callable_mp(this, &VisualScriptEditor::_on_nodes_duplicate));
graph->connect("gui_input", callable_mp(this, &VisualScriptEditor::_graph_gui_input));
@@ -4527,11 +4583,11 @@ void VisualScriptEditor::free_clipboard() {
static void register_editor_callback() {
ScriptEditor::register_create_script_editor_function(create_editor);
- ED_SHORTCUT("visual_script_editor/toggle_breakpoint", TTR("Toggle Breakpoint"), KEY_F9);
- ED_SHORTCUT("visual_script_editor/find_node_type", TTR("Find Node Type"), KEY_MASK_CMD + KEY_F);
- ED_SHORTCUT("visual_script_editor/create_function", TTR("Make Function"), KEY_MASK_CMD + KEY_G);
- ED_SHORTCUT("visual_script_editor/refresh_nodes", TTR("Refresh Graph"), KEY_MASK_CMD + KEY_R);
- ED_SHORTCUT("visual_script_editor/edit_member", TTR("Edit Member"), KEY_MASK_CMD + KEY_E);
+ ED_SHORTCUT("visual_script_editor/toggle_breakpoint", TTR("Toggle Breakpoint"), Key::F9);
+ ED_SHORTCUT("visual_script_editor/find_node_type", TTR("Find Node Type"), KeyModifierMask::CMD + Key::F);
+ ED_SHORTCUT("visual_script_editor/create_function", TTR("Make Function"), KeyModifierMask::CMD + Key::G);
+ ED_SHORTCUT("visual_script_editor/refresh_nodes", TTR("Refresh Graph"), KeyModifierMask::CMD + Key::R);
+ ED_SHORTCUT("visual_script_editor/edit_member", TTR("Edit Member"), KeyModifierMask::CMD + Key::E);
}
void VisualScriptEditor::register_editor() {
diff --git a/modules/visual_script/visual_script_editor.h b/modules/visual_script/editor/visual_script_editor.h
index 19f5aabac9..fd1db2bc43 100644
--- a/modules/visual_script/visual_script_editor.h
+++ b/modules/visual_script/editor/visual_script_editor.h
@@ -31,11 +31,11 @@
#ifndef VISUALSCRIPT_EDITOR_H
#define VISUALSCRIPT_EDITOR_H
+#include "../visual_script.h"
#include "editor/create_dialog.h"
#include "editor/plugins/script_editor_plugin.h"
#include "editor/property_editor.h"
#include "scene/gui/graph_edit.h"
-#include "visual_script.h"
#include "visual_script_property_selector.h"
class VisualScriptEditorSignalEdit;
@@ -253,6 +253,8 @@ class VisualScriptEditor : public ScriptEditorBase {
void _node_item_selected();
void _node_item_unselected();
+ void _on_nodes_copy();
+ void _on_nodes_paste();
void _on_nodes_delete();
void _on_nodes_duplicate();
diff --git a/modules/visual_script/visual_script_property_selector.cpp b/modules/visual_script/editor/visual_script_property_selector.cpp
index d8b88d6cd3..02307b712c 100644
--- a/modules/visual_script/visual_script_property_selector.cpp
+++ b/modules/visual_script/editor/visual_script_property_selector.cpp
@@ -30,15 +30,15 @@
#include "visual_script_property_selector.h"
+#include "../visual_script.h"
+#include "../visual_script_builtin_funcs.h"
+#include "../visual_script_flow_control.h"
+#include "../visual_script_func_nodes.h"
+#include "../visual_script_nodes.h"
#include "core/os/keyboard.h"
#include "editor/doc_tools.h"
#include "editor/editor_node.h"
#include "editor/editor_scale.h"
-#include "modules/visual_script/visual_script.h"
-#include "modules/visual_script/visual_script_builtin_funcs.h"
-#include "modules/visual_script/visual_script_flow_control.h"
-#include "modules/visual_script/visual_script_func_nodes.h"
-#include "modules/visual_script/visual_script_nodes.h"
#include "scene/main/node.h"
#include "scene/main/window.h"
@@ -51,10 +51,10 @@ void VisualScriptPropertySelector::_sbox_input(const Ref<InputEvent> &p_ie) {
if (k.is_valid()) {
switch (k->get_keycode()) {
- case KEY_UP:
- case KEY_DOWN:
- case KEY_PAGEUP:
- case KEY_PAGEDOWN: {
+ case Key::UP:
+ case Key::DOWN:
+ case Key::PAGEUP:
+ case Key::PAGEDOWN: {
search_options->gui_input(k);
search_box->accept_event();
diff --git a/modules/visual_script/visual_script_property_selector.h b/modules/visual_script/editor/visual_script_property_selector.h
index 7a87f3d3ee..7a87f3d3ee 100644
--- a/modules/visual_script/visual_script_property_selector.h
+++ b/modules/visual_script/editor/visual_script_property_selector.h
diff --git a/modules/visual_script/register_types.cpp b/modules/visual_script/register_types.cpp
index 890861cf82..6f56fbbc70 100644
--- a/modules/visual_script/register_types.cpp
+++ b/modules/visual_script/register_types.cpp
@@ -34,7 +34,6 @@
#include "core/io/resource_loader.h"
#include "visual_script.h"
#include "visual_script_builtin_funcs.h"
-#include "visual_script_editor.h"
#include "visual_script_expression.h"
#include "visual_script_flow_control.h"
#include "visual_script_func_nodes.h"
@@ -42,7 +41,9 @@
#include "visual_script_yield_nodes.h"
VisualScriptLanguage *visual_script_language = nullptr;
+
#ifdef TOOLS_ENABLED
+#include "editor/visual_script_editor.h"
static VisualScriptCustomNodes *vs_custom_nodes_singleton = nullptr;
#endif
diff --git a/modules/visual_script/visual_script.cpp b/modules/visual_script/visual_script.cpp
index 01fc7cfca0..34d8c0b1e6 100644
--- a/modules/visual_script/visual_script.cpp
+++ b/modules/visual_script/visual_script.cpp
@@ -113,7 +113,7 @@ void VisualScriptNode::_bind_methods() {
ClassDB::bind_method(D_METHOD("_set_default_input_values", "values"), &VisualScriptNode::_set_default_input_values);
ClassDB::bind_method(D_METHOD("_get_default_input_values"), &VisualScriptNode::_get_default_input_values);
- ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "_default_input_values", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL), "_set_default_input_values", "_get_default_input_values");
+ ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "_default_input_values", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL), "_set_default_input_values", "_get_default_input_values");
ADD_SIGNAL(MethodInfo("ports_changed"));
}
@@ -661,7 +661,7 @@ void VisualScript::custom_signal_remove_argument(const StringName &p_func, int p
ERR_FAIL_COND(instances.size());
ERR_FAIL_COND(!custom_signals.has(p_func));
ERR_FAIL_INDEX(p_argidx, custom_signals[p_func].size());
- custom_signals[p_func].remove(p_argidx);
+ custom_signals[p_func].remove_at(p_argidx);
}
int VisualScript::custom_signal_get_argument_count(const StringName &p_func) const {
@@ -1172,7 +1172,7 @@ void VisualScript::_bind_methods() {
ClassDB::bind_method(D_METHOD("_set_data", "data"), &VisualScript::_set_data);
ClassDB::bind_method(D_METHOD("_get_data"), &VisualScript::_get_data);
- ADD_PROPERTY(PropertyInfo(Variant::DICTIONARY, "data", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL), "_set_data", "_get_data");
+ ADD_PROPERTY(PropertyInfo(Variant::DICTIONARY, "data", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL), "_set_data", "_get_data");
ADD_SIGNAL(MethodInfo("node_ports_changed", PropertyInfo(Variant::INT, "id")));
}
diff --git a/modules/visual_script/visual_script_builtin_funcs.cpp b/modules/visual_script/visual_script_builtin_funcs.cpp
index 7e01031128..7ae85ea415 100644
--- a/modules/visual_script/visual_script_builtin_funcs.cpp
+++ b/modules/visual_script/visual_script_builtin_funcs.cpp
@@ -71,8 +71,9 @@ const char *VisualScriptBuiltinFunc::func_name[VisualScriptBuiltinFunc::FUNC_MAX
"randomize",
"randi",
"randf",
- "randf_range",
"randi_range",
+ "randf_range",
+ "randfn",
"seed",
"rand_seed",
"deg2rad",
@@ -81,6 +82,7 @@ const char *VisualScriptBuiltinFunc::func_name[VisualScriptBuiltinFunc::FUNC_MAX
"db2linear",
"wrapi",
"wrapf",
+ "pingpong",
"max",
"min",
"clamp",
@@ -190,11 +192,13 @@ int VisualScriptBuiltinFunc::get_func_argument_count(BuiltinFunc p_func) {
case MATH_FMOD:
case MATH_FPOSMOD:
case MATH_POSMOD:
+ case MATH_PINGPONG:
case MATH_POW:
case MATH_EASE:
case MATH_SNAPPED:
- case MATH_RANDF_RANGE:
case MATH_RANDI_RANGE:
+ case MATH_RANDF_RANGE:
+ case MATH_RANDFN:
case LOGIC_MAX:
case LOGIC_MIN:
case TYPE_CONVERT:
@@ -351,6 +355,13 @@ PropertyInfo VisualScriptBuiltinFunc::get_input_value_port_info(int p_idx) const
case MATH_RANDI:
case MATH_RANDF: {
} break;
+ case MATH_RANDI_RANGE: {
+ if (p_idx == 0) {
+ return PropertyInfo(Variant::INT, "from");
+ } else {
+ return PropertyInfo(Variant::INT, "to");
+ }
+ } break;
case MATH_RANDF_RANGE: {
if (p_idx == 0) {
return PropertyInfo(Variant::FLOAT, "from");
@@ -358,11 +369,11 @@ PropertyInfo VisualScriptBuiltinFunc::get_input_value_port_info(int p_idx) const
return PropertyInfo(Variant::FLOAT, "to");
}
} break;
- case MATH_RANDI_RANGE: {
+ case MATH_RANDFN: {
if (p_idx == 0) {
- return PropertyInfo(Variant::INT, "from");
+ return PropertyInfo(Variant::FLOAT, "mean");
} else {
- return PropertyInfo(Variant::INT, "to");
+ return PropertyInfo(Variant::FLOAT, "deviation");
}
} break;
case MATH_SEED:
@@ -381,6 +392,13 @@ PropertyInfo VisualScriptBuiltinFunc::get_input_value_port_info(int p_idx) const
case MATH_DB2LINEAR: {
return PropertyInfo(Variant::FLOAT, "db");
} break;
+ case MATH_PINGPONG: {
+ if (p_idx == 0) {
+ return PropertyInfo(Variant::FLOAT, "value");
+ } else {
+ return PropertyInfo(Variant::FLOAT, "length");
+ }
+ } break;
case MATH_WRAP: {
if (p_idx == 0) {
return PropertyInfo(Variant::INT, "value");
@@ -518,6 +536,7 @@ PropertyInfo VisualScriptBuiltinFunc::get_output_value_port_info(int p_idx) cons
t = Variant::INT;
} break;
case MATH_RANDF:
+ case MATH_RANDFN:
case MATH_RANDF_RANGE: {
t = Variant::FLOAT;
} break;
@@ -537,6 +556,7 @@ PropertyInfo VisualScriptBuiltinFunc::get_output_value_port_info(int p_idx) cons
case MATH_RAD2DEG:
case MATH_LINEAR2DB:
case MATH_WRAPF:
+ case MATH_PINGPONG:
case MATH_DB2LINEAR: {
t = Variant::FLOAT;
} break;
@@ -817,15 +837,20 @@ void VisualScriptBuiltinFunc::exec_func(BuiltinFunc p_func, const Variant **p_in
case VisualScriptBuiltinFunc::MATH_RANDF: {
*r_return = Math::randf();
} break;
+ case VisualScriptBuiltinFunc::MATH_RANDI_RANGE: {
+ VALIDATE_ARG_NUM(0);
+ VALIDATE_ARG_NUM(1);
+ *r_return = Math::random((int)*p_inputs[0], (int)*p_inputs[1]);
+ } break;
case VisualScriptBuiltinFunc::MATH_RANDF_RANGE: {
VALIDATE_ARG_NUM(0);
VALIDATE_ARG_NUM(1);
*r_return = Math::random((double)*p_inputs[0], (double)*p_inputs[1]);
} break;
- case VisualScriptBuiltinFunc::MATH_RANDI_RANGE: {
+ case VisualScriptBuiltinFunc::MATH_RANDFN: {
VALIDATE_ARG_NUM(0);
VALIDATE_ARG_NUM(1);
- *r_return = Math::random((int)*p_inputs[0], (int)*p_inputs[1]);
+ *r_return = Math::randfn((double)*p_inputs[0], (double)*p_inputs[1]);
} break;
case VisualScriptBuiltinFunc::MATH_SEED: {
VALIDATE_ARG_NUM(0);
@@ -859,6 +884,11 @@ void VisualScriptBuiltinFunc::exec_func(BuiltinFunc p_func, const Variant **p_in
VALIDATE_ARG_NUM(0);
*r_return = Math::db2linear((double)*p_inputs[0]);
} break;
+ case VisualScriptBuiltinFunc::MATH_PINGPONG: {
+ VALIDATE_ARG_NUM(0);
+ VALIDATE_ARG_NUM(1);
+ *r_return = Math::pingpong((double)*p_inputs[0], (double)*p_inputs[1]);
+ } break;
case VisualScriptBuiltinFunc::MATH_WRAP: {
VALIDATE_ARG_NUM(0);
VALIDATE_ARG_NUM(1);
@@ -1196,8 +1226,9 @@ void VisualScriptBuiltinFunc::_bind_methods() {
BIND_ENUM_CONSTANT(MATH_RANDOMIZE);
BIND_ENUM_CONSTANT(MATH_RANDI);
BIND_ENUM_CONSTANT(MATH_RANDF);
- BIND_ENUM_CONSTANT(MATH_RANDF_RANGE);
BIND_ENUM_CONSTANT(MATH_RANDI_RANGE);
+ BIND_ENUM_CONSTANT(MATH_RANDF_RANGE);
+ BIND_ENUM_CONSTANT(MATH_RANDFN);
BIND_ENUM_CONSTANT(MATH_SEED);
BIND_ENUM_CONSTANT(MATH_RANDSEED);
BIND_ENUM_CONSTANT(MATH_DEG2RAD);
@@ -1206,6 +1237,7 @@ void VisualScriptBuiltinFunc::_bind_methods() {
BIND_ENUM_CONSTANT(MATH_DB2LINEAR);
BIND_ENUM_CONSTANT(MATH_WRAP);
BIND_ENUM_CONSTANT(MATH_WRAPF);
+ BIND_ENUM_CONSTANT(MATH_PINGPONG);
BIND_ENUM_CONSTANT(LOGIC_MAX);
BIND_ENUM_CONSTANT(LOGIC_MIN);
BIND_ENUM_CONSTANT(LOGIC_CLAMP);
@@ -1285,8 +1317,9 @@ void register_visual_script_builtin_func_node() {
VisualScriptLanguage::singleton->add_register_func("functions/built_in/randomize", create_builtin_func_node<VisualScriptBuiltinFunc::MATH_RANDOMIZE>);
VisualScriptLanguage::singleton->add_register_func("functions/built_in/randi", create_builtin_func_node<VisualScriptBuiltinFunc::MATH_RANDI>);
VisualScriptLanguage::singleton->add_register_func("functions/built_in/randf", create_builtin_func_node<VisualScriptBuiltinFunc::MATH_RANDF>);
- VisualScriptLanguage::singleton->add_register_func("functions/built_in/randf_range", create_builtin_func_node<VisualScriptBuiltinFunc::MATH_RANDF_RANGE>);
VisualScriptLanguage::singleton->add_register_func("functions/built_in/randi_range", create_builtin_func_node<VisualScriptBuiltinFunc::MATH_RANDI_RANGE>);
+ VisualScriptLanguage::singleton->add_register_func("functions/built_in/randf_range", create_builtin_func_node<VisualScriptBuiltinFunc::MATH_RANDF_RANGE>);
+ VisualScriptLanguage::singleton->add_register_func("functions/built_in/randfn", create_builtin_func_node<VisualScriptBuiltinFunc::MATH_RANDFN>);
VisualScriptLanguage::singleton->add_register_func("functions/built_in/seed", create_builtin_func_node<VisualScriptBuiltinFunc::MATH_SEED>);
VisualScriptLanguage::singleton->add_register_func("functions/built_in/randseed", create_builtin_func_node<VisualScriptBuiltinFunc::MATH_RANDSEED>);
@@ -1296,6 +1329,7 @@ void register_visual_script_builtin_func_node() {
VisualScriptLanguage::singleton->add_register_func("functions/built_in/db2linear", create_builtin_func_node<VisualScriptBuiltinFunc::MATH_DB2LINEAR>);
VisualScriptLanguage::singleton->add_register_func("functions/built_in/wrapi", create_builtin_func_node<VisualScriptBuiltinFunc::MATH_WRAP>);
VisualScriptLanguage::singleton->add_register_func("functions/built_in/wrapf", create_builtin_func_node<VisualScriptBuiltinFunc::MATH_WRAPF>);
+ VisualScriptLanguage::singleton->add_register_func("functions/built_in/pingpong", create_builtin_func_node<VisualScriptBuiltinFunc::MATH_PINGPONG>);
VisualScriptLanguage::singleton->add_register_func("functions/built_in/max", create_builtin_func_node<VisualScriptBuiltinFunc::LOGIC_MAX>);
VisualScriptLanguage::singleton->add_register_func("functions/built_in/min", create_builtin_func_node<VisualScriptBuiltinFunc::LOGIC_MIN>);
diff --git a/modules/visual_script/visual_script_builtin_funcs.h b/modules/visual_script/visual_script_builtin_funcs.h
index f9eb7e983f..f71a053f7d 100644
--- a/modules/visual_script/visual_script_builtin_funcs.h
+++ b/modules/visual_script/visual_script_builtin_funcs.h
@@ -71,8 +71,9 @@ public:
MATH_RANDOMIZE,
MATH_RANDI,
MATH_RANDF,
- MATH_RANDF_RANGE,
MATH_RANDI_RANGE,
+ MATH_RANDF_RANGE,
+ MATH_RANDFN,
MATH_SEED,
MATH_RANDSEED,
MATH_DEG2RAD,
@@ -81,6 +82,7 @@ public:
MATH_DB2LINEAR,
MATH_WRAP,
MATH_WRAPF,
+ MATH_PINGPONG,
LOGIC_MAX,
LOGIC_MIN,
LOGIC_CLAMP,
diff --git a/modules/visual_script/visual_script_expression.cpp b/modules/visual_script/visual_script_expression.cpp
index 99b7275008..699042ffa6 100644
--- a/modules/visual_script/visual_script_expression.cpp
+++ b/modules/visual_script/visual_script_expression.cpp
@@ -136,7 +136,7 @@ void VisualScriptExpression::_get_property_list(List<PropertyInfo> *p_list) cons
argt += "," + Variant::get_type_name(Variant::Type(i));
}
- p_list->push_back(PropertyInfo(Variant::STRING, "expression", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR));
+ p_list->push_back(PropertyInfo(Variant::STRING, "expression", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR));
p_list->push_back(PropertyInfo(Variant::INT, "out_type", PROPERTY_HINT_ENUM, argt));
p_list->push_back(PropertyInfo(Variant::INT, "input_count", PROPERTY_HINT_RANGE, "0,64,1"));
p_list->push_back(PropertyInfo(Variant::BOOL, "sequenced"));
@@ -1190,7 +1190,7 @@ VisualScriptExpression::ENode *VisualScriptExpression::_parse_expression() {
op->nodes[1] = nullptr;
expression.write[i].is_op = false;
expression.write[i].node = op;
- expression.remove(i + 1);
+ expression.remove_at(i + 1);
}
} else {
@@ -1222,8 +1222,8 @@ VisualScriptExpression::ENode *VisualScriptExpression::_parse_expression() {
//replace all 3 nodes by this operator and make it an expression
expression.write[next_op - 1].node = op;
- expression.remove(next_op);
- expression.remove(next_op);
+ expression.remove_at(next_op);
+ expression.remove_at(next_op);
}
}
diff --git a/modules/visual_script/visual_script_func_nodes.cpp b/modules/visual_script/visual_script_func_nodes.cpp
index 205918a5f0..a2ad38bf01 100644
--- a/modules/visual_script/visual_script_func_nodes.cpp
+++ b/modules/visual_script/visual_script_func_nodes.cpp
@@ -514,7 +514,7 @@ Dictionary VisualScriptFunctionCall::_get_argument_cache() const {
void VisualScriptFunctionCall::_validate_property(PropertyInfo &property) const {
if (property.name == "base_type") {
if (call_mode != CALL_MODE_INSTANCE) {
- property.usage = PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL;
+ property.usage = PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL;
}
}
@@ -696,7 +696,7 @@ void VisualScriptFunctionCall::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::STRING, "singleton"), "set_singleton", "get_singleton");
ADD_PROPERTY(PropertyInfo(Variant::INT, "basic_type", PROPERTY_HINT_ENUM, bt), "set_basic_type", "get_basic_type");
ADD_PROPERTY(PropertyInfo(Variant::NODE_PATH, "node_path", PROPERTY_HINT_NODE_PATH_TO_EDITED_NODE), "set_base_path", "get_base_path");
- ADD_PROPERTY(PropertyInfo(Variant::DICTIONARY, "argument_cache", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL), "_set_argument_cache", "_get_argument_cache");
+ ADD_PROPERTY(PropertyInfo(Variant::DICTIONARY, "argument_cache", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL), "_set_argument_cache", "_get_argument_cache");
ADD_PROPERTY(PropertyInfo(Variant::STRING, "function"), "set_function", "get_function"); //when set, if loaded properly, will override argument count.
ADD_PROPERTY(PropertyInfo(Variant::INT, "use_default_args"), "set_use_default_args", "get_use_default_args");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "validate"), "set_validate", "get_validate");
@@ -1282,7 +1282,7 @@ VisualScriptPropertySet::AssignOp VisualScriptPropertySet::get_assign_op() const
void VisualScriptPropertySet::_validate_property(PropertyInfo &property) const {
if (property.name == "base_type") {
if (call_mode != CALL_MODE_INSTANCE) {
- property.usage = PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL;
+ property.usage = PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL;
}
}
@@ -1420,7 +1420,7 @@ void VisualScriptPropertySet::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::INT, "set_mode", PROPERTY_HINT_ENUM, "Self,Node Path,Instance,Basic Type"), "set_call_mode", "get_call_mode");
ADD_PROPERTY(PropertyInfo(Variant::STRING, "base_type", PROPERTY_HINT_TYPE_STRING, "Object"), "set_base_type", "get_base_type");
ADD_PROPERTY(PropertyInfo(Variant::STRING, "base_script", PROPERTY_HINT_FILE, script_ext_hint), "set_base_script", "get_base_script");
- ADD_PROPERTY(PropertyInfo(Variant::INT, "type_cache", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL), "_set_type_cache", "_get_type_cache");
+ ADD_PROPERTY(PropertyInfo(Variant::INT, "type_cache", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL), "_set_type_cache", "_get_type_cache");
ADD_PROPERTY(PropertyInfo(Variant::INT, "basic_type", PROPERTY_HINT_ENUM, bt), "set_basic_type", "get_basic_type");
ADD_PROPERTY(PropertyInfo(Variant::NODE_PATH, "node_path", PROPERTY_HINT_NODE_PATH_TO_EDITED_NODE), "set_base_path", "get_base_path");
ADD_PROPERTY(PropertyInfo(Variant::STRING, "property"), "set_property", "get_property");
@@ -1988,7 +1988,7 @@ StringName VisualScriptPropertyGet::get_index() const {
void VisualScriptPropertyGet::_validate_property(PropertyInfo &property) const {
if (property.name == "base_type") {
if (call_mode != CALL_MODE_INSTANCE) {
- property.usage = PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL;
+ property.usage = PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL;
}
}
@@ -2122,7 +2122,7 @@ void VisualScriptPropertyGet::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::INT, "set_mode", PROPERTY_HINT_ENUM, "Self,Node Path,Instance,Basic Type"), "set_call_mode", "get_call_mode");
ADD_PROPERTY(PropertyInfo(Variant::STRING, "base_type", PROPERTY_HINT_TYPE_STRING, "Object"), "set_base_type", "get_base_type");
ADD_PROPERTY(PropertyInfo(Variant::STRING, "base_script", PROPERTY_HINT_FILE, script_ext_hint), "set_base_script", "get_base_script");
- ADD_PROPERTY(PropertyInfo(Variant::INT, "type_cache", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL), "_set_type_cache", "_get_type_cache");
+ ADD_PROPERTY(PropertyInfo(Variant::INT, "type_cache", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL), "_set_type_cache", "_get_type_cache");
ADD_PROPERTY(PropertyInfo(Variant::INT, "basic_type", PROPERTY_HINT_ENUM, bt), "set_basic_type", "get_basic_type");
ADD_PROPERTY(PropertyInfo(Variant::NODE_PATH, "node_path", PROPERTY_HINT_NODE_PATH_TO_EDITED_NODE), "set_base_path", "get_base_path");
ADD_PROPERTY(PropertyInfo(Variant::STRING, "property"), "set_property", "get_property");
diff --git a/modules/visual_script/visual_script_nodes.cpp b/modules/visual_script/visual_script_nodes.cpp
index ef77c0cef3..b0af030981 100644
--- a/modules/visual_script/visual_script_nodes.cpp
+++ b/modules/visual_script/visual_script_nodes.cpp
@@ -253,7 +253,7 @@ String VisualScriptFunction::get_argument_name(int p_argidx) const {
void VisualScriptFunction::remove_argument(int p_argidx) {
ERR_FAIL_INDEX(p_argidx, arguments.size());
- arguments.remove(p_argidx);
+ arguments.remove_at(p_argidx);
ports_changed_notify();
}
@@ -623,7 +623,7 @@ void VisualScriptLists::remove_input_data_port(int p_argidx) {
ERR_FAIL_INDEX(p_argidx, inputports.size());
- inputports.remove(p_argidx);
+ inputports.remove_at(p_argidx);
ports_changed_notify();
notify_property_list_changed();
@@ -679,7 +679,7 @@ void VisualScriptLists::remove_output_data_port(int p_argidx) {
ERR_FAIL_INDEX(p_argidx, outputports.size());
- outputports.remove(p_argidx);
+ outputports.remove_at(p_argidx);
ports_changed_notify();
notify_property_list_changed();
@@ -3415,8 +3415,8 @@ void VisualScriptConstructor::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_constructor", "constructor"), &VisualScriptConstructor::set_constructor);
ClassDB::bind_method(D_METHOD("get_constructor"), &VisualScriptConstructor::get_constructor);
- ADD_PROPERTY(PropertyInfo(Variant::INT, "type", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL), "set_constructor_type", "get_constructor_type");
- ADD_PROPERTY(PropertyInfo(Variant::DICTIONARY, "constructor", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL), "set_constructor", "get_constructor");
+ ADD_PROPERTY(PropertyInfo(Variant::INT, "type", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL), "set_constructor_type", "get_constructor_type");
+ ADD_PROPERTY(PropertyInfo(Variant::DICTIONARY, "constructor", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL), "set_constructor", "get_constructor");
}
VisualScriptConstructor::VisualScriptConstructor() {
@@ -3958,7 +3958,7 @@ void VisualScriptDeconstruct::_bind_methods() {
}
ADD_PROPERTY(PropertyInfo(Variant::INT, "type", PROPERTY_HINT_ENUM, argt), "set_deconstruct_type", "get_deconstruct_type");
- ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "elem_cache", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL), "_set_elem_cache", "_get_elem_cache");
+ ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "elem_cache", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL), "_set_elem_cache", "_get_elem_cache");
}
VisualScriptDeconstruct::VisualScriptDeconstruct() {
diff --git a/modules/visual_script/visual_script_yield_nodes.cpp b/modules/visual_script/visual_script_yield_nodes.cpp
index c62de64a85..4b89c9ccd0 100644
--- a/modules/visual_script/visual_script_yield_nodes.cpp
+++ b/modules/visual_script/visual_script_yield_nodes.cpp
@@ -186,7 +186,7 @@ void VisualScriptYield::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_wait_time", "sec"), &VisualScriptYield::set_wait_time);
ClassDB::bind_method(D_METHOD("get_wait_time"), &VisualScriptYield::get_wait_time);
- ADD_PROPERTY(PropertyInfo(Variant::INT, "mode", PROPERTY_HINT_ENUM, "Frame,Physics Frame,Time", PROPERTY_USAGE_NOEDITOR), "set_yield_mode", "get_yield_mode");
+ ADD_PROPERTY(PropertyInfo(Variant::INT, "mode", PROPERTY_HINT_ENUM, "Frame,Physics Frame,Time", PROPERTY_USAGE_NO_EDITOR), "set_yield_mode", "get_yield_mode");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "wait_time"), "set_wait_time", "get_wait_time");
BIND_ENUM_CONSTANT(YIELD_FRAME);
@@ -415,7 +415,7 @@ VisualScriptYieldSignal::CallMode VisualScriptYieldSignal::get_call_mode() const
void VisualScriptYieldSignal::_validate_property(PropertyInfo &property) const {
if (property.name == "base_type") {
if (call_mode != CALL_MODE_INSTANCE) {
- property.usage = PROPERTY_USAGE_NOEDITOR;
+ property.usage = PROPERTY_USAGE_NO_EDITOR;
}
}
diff --git a/modules/vorbis/audio_stream_ogg_vorbis.cpp b/modules/vorbis/audio_stream_ogg_vorbis.cpp
index e4a80c339f..d913c115d9 100644
--- a/modules/vorbis/audio_stream_ogg_vorbis.cpp
+++ b/modules/vorbis/audio_stream_ogg_vorbis.cpp
@@ -425,7 +425,7 @@ void AudioStreamOGGVorbis::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_loop_offset", "seconds"), &AudioStreamOGGVorbis::set_loop_offset);
ClassDB::bind_method(D_METHOD("get_loop_offset"), &AudioStreamOGGVorbis::get_loop_offset);
- ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "packet_sequence", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR), "set_packet_sequence", "get_packet_sequence");
+ ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "packet_sequence", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), "set_packet_sequence", "get_packet_sequence");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "loop"), "set_loop", "has_loop");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "loop_offset"), "set_loop_offset", "get_loop_offset");
}
diff --git a/modules/vorbis/resource_importer_ogg_vorbis.cpp b/modules/vorbis/resource_importer_ogg_vorbis.cpp
index 33ee6cf359..be9f880103 100644
--- a/modules/vorbis/resource_importer_ogg_vorbis.cpp
+++ b/modules/vorbis/resource_importer_ogg_vorbis.cpp
@@ -57,7 +57,7 @@ String ResourceImporterOGGVorbis::get_resource_type() const {
return "AudioStreamOGGVorbis";
}
-bool ResourceImporterOGGVorbis::get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const {
+bool ResourceImporterOGGVorbis::get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const {
return true;
}
@@ -69,7 +69,7 @@ String ResourceImporterOGGVorbis::get_preset_name(int p_idx) const {
return String();
}
-void ResourceImporterOGGVorbis::get_import_options(List<ImportOption> *r_options, int p_preset) const {
+void ResourceImporterOGGVorbis::get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset) const {
r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "loop"), true));
r_options->push_back(ImportOption(PropertyInfo(Variant::FLOAT, "loop_offset"), 0));
}
diff --git a/modules/vorbis/resource_importer_ogg_vorbis.h b/modules/vorbis/resource_importer_ogg_vorbis.h
index acdc1a3d38..8565e0deb8 100644
--- a/modules/vorbis/resource_importer_ogg_vorbis.h
+++ b/modules/vorbis/resource_importer_ogg_vorbis.h
@@ -51,8 +51,8 @@ public:
virtual String get_visible_name() const override;
virtual int get_preset_count() const override;
virtual String get_preset_name(int p_idx) const override;
- virtual void get_import_options(List<ImportOption> *r_options, int p_preset = 0) const override;
- virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const override;
+ virtual void get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset = 0) const override;
+ virtual bool get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const override;
virtual Error import(const String &p_source_file, const String &p_save_path, const Map<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = nullptr, Variant *r_metadata = nullptr) override;
diff --git a/modules/webp/SCsub b/modules/webp/SCsub
index 4c0c2f7893..80d62400c8 100644
--- a/modules/webp/SCsub
+++ b/modules/webp/SCsub
@@ -67,6 +67,7 @@ if env["builtin_libwebp"]:
"dsp/lossless_msa.c",
"dsp/lossless_neon.c",
"dsp/lossless_sse2.c",
+ "dsp/lossless_sse41.c",
"dsp/rescaler.c",
"dsp/rescaler_mips32.c",
"dsp/rescaler_mips_dsp_r2.c",
diff --git a/modules/websocket/SCsub b/modules/websocket/SCsub
index 4c022c43cf..63c941c4a8 100644
--- a/modules/websocket/SCsub
+++ b/modules/websocket/SCsub
@@ -18,12 +18,11 @@ elif env["builtin_wslay"]:
"wslay_net.c",
"wslay_event.c",
"wslay_queue.c",
- "wslay_stack.c",
"wslay_frame.c",
]
thirdparty_sources = [thirdparty_dir + s for s in thirdparty_sources]
- env_ws.Prepend(CPPPATH=[thirdparty_dir + "includes/"])
+ env_ws.Prepend(CPPPATH=[thirdparty_dir])
env_ws.Append(CPPDEFINES=["HAVE_CONFIG_H"])
if env["platform"] == "windows" or env["platform"] == "uwp":
diff --git a/platform/android/android_input_handler.cpp b/platform/android/android_input_handler.cpp
index e03375e8d9..52f80b3080 100644
--- a/platform/android/android_input_handler.cpp
+++ b/platform/android/android_input_handler.cpp
@@ -45,7 +45,7 @@ void AndroidInputHandler::process_joy_event(AndroidInputHandler::JoypadEvent p_e
Input::get_singleton()->joy_axis(p_event.device, (JoyAxis)p_event.index, value);
break;
case JOY_EVENT_HAT:
- Input::get_singleton()->joy_hat(p_event.device, (HatMask)p_event.hat);
+ Input::get_singleton()->joy_hat(p_event.device, p_event.hat);
break;
default:
return;
@@ -82,37 +82,37 @@ void AndroidInputHandler::process_key_event(int p_keycode, int p_scancode, int p
Ref<InputEventKey> ev;
ev.instantiate();
int val = unicode;
- int keycode = android_get_keysym(p_keycode);
- int phy_keycode = android_get_keysym(p_scancode);
+ Key keycode = android_get_keysym(p_keycode);
+ Key phy_keycode = android_get_keysym(p_scancode);
- if (keycode == KEY_SHIFT) {
+ if (keycode == Key::SHIFT) {
shift_mem = p_pressed;
}
- if (keycode == KEY_ALT) {
+ if (keycode == Key::ALT) {
alt_mem = p_pressed;
}
- if (keycode == KEY_CTRL) {
+ if (keycode == Key::CTRL) {
control_mem = p_pressed;
}
- if (keycode == KEY_META) {
+ if (keycode == Key::META) {
meta_mem = p_pressed;
}
- ev->set_keycode((Key)keycode);
- ev->set_physical_keycode((Key)phy_keycode);
+ ev->set_keycode(keycode);
+ ev->set_physical_keycode(phy_keycode);
ev->set_unicode(val);
ev->set_pressed(p_pressed);
_set_key_modifier_state(ev);
if (val == '\n') {
- ev->set_keycode(KEY_ENTER);
+ ev->set_keycode(Key::ENTER);
} else if (val == 61448) {
- ev->set_keycode(KEY_BACKSPACE);
- ev->set_unicode(KEY_BACKSPACE);
+ ev->set_keycode(Key::BACKSPACE);
+ ev->set_unicode((char32_t)Key::BACKSPACE);
} else if (val == 61453) {
- ev->set_keycode(KEY_ENTER);
- ev->set_unicode(KEY_ENTER);
+ ev->set_keycode(Key::ENTER);
+ ev->set_unicode((char32_t)Key::ENTER);
} else if (p_keycode == 4) {
if (DisplayServerAndroid *dsa = Object::cast_to<DisplayServerAndroid>(DisplayServer::get_singleton())) {
dsa->send_window_event(DisplayServer::WINDOW_EVENT_GO_BACK_REQUEST, true);
@@ -223,7 +223,7 @@ void AndroidInputHandler::process_touch(int p_event, int p_pointer, const Vector
ev->set_pressed(false);
ev->set_position(touch[i].pos);
Input::get_singleton()->parse_input_event(ev);
- touch.remove(i);
+ touch.remove_at(i);
break;
}
@@ -305,15 +305,15 @@ void AndroidInputHandler::process_mouse_event(int input_device, int event_action
ev->set_pressed(true);
buttons_state = event_buttons_mask;
if (event_vertical_factor > 0) {
- _wheel_button_click(event_buttons_mask, ev, MOUSE_BUTTON_WHEEL_UP, event_vertical_factor);
+ _wheel_button_click(event_buttons_mask, ev, MouseButton::WHEEL_UP, event_vertical_factor);
} else if (event_vertical_factor < 0) {
- _wheel_button_click(event_buttons_mask, ev, MOUSE_BUTTON_WHEEL_DOWN, -event_vertical_factor);
+ _wheel_button_click(event_buttons_mask, ev, MouseButton::WHEEL_DOWN, -event_vertical_factor);
}
if (event_horizontal_factor > 0) {
- _wheel_button_click(event_buttons_mask, ev, MOUSE_BUTTON_WHEEL_RIGHT, event_horizontal_factor);
+ _wheel_button_click(event_buttons_mask, ev, MouseButton::WHEEL_RIGHT, event_horizontal_factor);
} else if (event_horizontal_factor < 0) {
- _wheel_button_click(event_buttons_mask, ev, MOUSE_BUTTON_WHEEL_LEFT, -event_horizontal_factor);
+ _wheel_button_click(event_buttons_mask, ev, MouseButton::WHEEL_LEFT, -event_horizontal_factor);
}
} break;
}
@@ -323,7 +323,7 @@ void AndroidInputHandler::_wheel_button_click(MouseButton event_buttons_mask, co
Ref<InputEventMouseButton> evd = ev->duplicate();
_set_key_modifier_state(evd);
evd->set_button_index(wheel_button);
- evd->set_button_mask(MouseButton(event_buttons_mask ^ (1 << (wheel_button - 1))));
+ evd->set_button_mask(MouseButton(event_buttons_mask ^ mouse_button_to_mask(wheel_button)));
evd->set_factor(factor);
Input::get_singleton()->parse_input_event(evd);
Ref<InputEventMouseButton> evdd = evd->duplicate();
@@ -339,7 +339,7 @@ void AndroidInputHandler::process_double_tap(int event_android_button_mask, Poin
_set_key_modifier_state(ev);
ev->set_position(p_pos);
ev->set_global_position(p_pos);
- ev->set_pressed(event_button_mask != 0);
+ ev->set_pressed(event_button_mask != MouseButton::NONE);
ev->set_button_index(_button_index_from_mask(event_button_mask));
ev->set_button_mask(event_button_mask);
ev->set_double_click(true);
@@ -348,37 +348,37 @@ void AndroidInputHandler::process_double_tap(int event_android_button_mask, Poin
MouseButton AndroidInputHandler::_button_index_from_mask(MouseButton button_mask) {
switch (button_mask) {
- case MOUSE_BUTTON_MASK_LEFT:
- return MOUSE_BUTTON_LEFT;
- case MOUSE_BUTTON_MASK_RIGHT:
- return MOUSE_BUTTON_RIGHT;
- case MOUSE_BUTTON_MASK_MIDDLE:
- return MOUSE_BUTTON_MIDDLE;
- case MOUSE_BUTTON_MASK_XBUTTON1:
- return MOUSE_BUTTON_XBUTTON1;
- case MOUSE_BUTTON_MASK_XBUTTON2:
- return MOUSE_BUTTON_XBUTTON2;
+ case MouseButton::MASK_LEFT:
+ return MouseButton::LEFT;
+ case MouseButton::MASK_RIGHT:
+ return MouseButton::RIGHT;
+ case MouseButton::MASK_MIDDLE:
+ return MouseButton::MIDDLE;
+ case MouseButton::MASK_XBUTTON1:
+ return MouseButton::MB_XBUTTON1;
+ case MouseButton::MASK_XBUTTON2:
+ return MouseButton::MB_XBUTTON2;
default:
- return MOUSE_BUTTON_NONE;
+ return MouseButton::NONE;
}
}
MouseButton AndroidInputHandler::_android_button_mask_to_godot_button_mask(int android_button_mask) {
- MouseButton godot_button_mask = MOUSE_BUTTON_NONE;
+ MouseButton godot_button_mask = MouseButton::NONE;
if (android_button_mask & AMOTION_EVENT_BUTTON_PRIMARY) {
- godot_button_mask |= MOUSE_BUTTON_MASK_LEFT;
+ godot_button_mask |= MouseButton::MASK_LEFT;
}
if (android_button_mask & AMOTION_EVENT_BUTTON_SECONDARY) {
- godot_button_mask |= MOUSE_BUTTON_MASK_RIGHT;
+ godot_button_mask |= MouseButton::MASK_RIGHT;
}
if (android_button_mask & AMOTION_EVENT_BUTTON_TERTIARY) {
- godot_button_mask |= MOUSE_BUTTON_MASK_MIDDLE;
+ godot_button_mask |= MouseButton::MASK_MIDDLE;
}
if (android_button_mask & AMOTION_EVENT_BUTTON_BACK) {
- godot_button_mask |= MOUSE_BUTTON_MASK_XBUTTON1;
+ godot_button_mask |= MouseButton::MASK_XBUTTON1;
}
if (android_button_mask & AMOTION_EVENT_BUTTON_FORWARD) {
- godot_button_mask |= MOUSE_BUTTON_MASK_XBUTTON2;
+ godot_button_mask |= MouseButton::MASK_XBUTTON2;
}
return godot_button_mask;
diff --git a/platform/android/android_input_handler.h b/platform/android/android_input_handler.h
index 2918ca300b..e0b4196f14 100644
--- a/platform/android/android_input_handler.h
+++ b/platform/android/android_input_handler.h
@@ -53,10 +53,10 @@ public:
struct JoypadEvent {
int device = 0;
int type = 0;
- int index = 0;
+ int index = 0; // Can be either JoyAxis or JoyButton.
bool pressed = false;
float value = 0;
- int hat = 0;
+ HatMask hat = HatMask::CENTER;
};
private:
@@ -65,7 +65,7 @@ private:
bool control_mem = false;
bool meta_mem = false;
- MouseButton buttons_state = MOUSE_BUTTON_NONE;
+ MouseButton buttons_state = MouseButton::NONE;
Vector<TouchPos> touch;
Point2 hover_prev_pos; // needed to calculate the relative position on hover events
diff --git a/platform/android/android_keys_utils.cpp b/platform/android/android_keys_utils.cpp
index 5aa546c17b..0cea0589ce 100644
--- a/platform/android/android_keys_utils.cpp
+++ b/platform/android/android_keys_utils.cpp
@@ -30,12 +30,12 @@
#include "android_keys_utils.h"
-unsigned int android_get_keysym(unsigned int p_code) {
- for (int i = 0; _ak_to_keycode[i].keysym != KEY_UNKNOWN; i++) {
+Key android_get_keysym(unsigned int p_code) {
+ for (int i = 0; _ak_to_keycode[i].keysym != Key::UNKNOWN; i++) {
if (_ak_to_keycode[i].keycode == p_code) {
return _ak_to_keycode[i].keysym;
}
}
- return KEY_UNKNOWN;
+ return Key::UNKNOWN;
}
diff --git a/platform/android/android_keys_utils.h b/platform/android/android_keys_utils.h
index de6f48d33a..bac9bab6db 100644
--- a/platform/android/android_keys_utils.h
+++ b/platform/android/android_keys_utils.h
@@ -35,101 +35,101 @@
#include <core/os/keyboard.h>
struct _WinTranslatePair {
- unsigned int keysym = 0;
+ Key keysym = Key::NONE;
unsigned int keycode = 0;
};
static _WinTranslatePair _ak_to_keycode[] = {
- { KEY_TAB, AKEYCODE_TAB },
- { KEY_ENTER, AKEYCODE_ENTER },
- { KEY_SHIFT, AKEYCODE_SHIFT_LEFT },
- { KEY_SHIFT, AKEYCODE_SHIFT_RIGHT },
- { KEY_ALT, AKEYCODE_ALT_LEFT },
- { KEY_ALT, AKEYCODE_ALT_RIGHT },
- { KEY_MENU, AKEYCODE_MENU },
- { KEY_PAUSE, AKEYCODE_MEDIA_PLAY_PAUSE },
- { KEY_ESCAPE, AKEYCODE_BACK },
- { KEY_SPACE, AKEYCODE_SPACE },
- { KEY_PAGEUP, AKEYCODE_PAGE_UP },
- { KEY_PAGEDOWN, AKEYCODE_PAGE_DOWN },
- { KEY_HOME, AKEYCODE_HOME }, //(0x24)
- { KEY_LEFT, AKEYCODE_DPAD_LEFT },
- { KEY_UP, AKEYCODE_DPAD_UP },
- { KEY_RIGHT, AKEYCODE_DPAD_RIGHT },
- { KEY_DOWN, AKEYCODE_DPAD_DOWN },
- { KEY_PERIODCENTERED, AKEYCODE_DPAD_CENTER },
- { KEY_BACKSPACE, AKEYCODE_DEL },
- { KEY_0, AKEYCODE_0 }, ////0 key
- { KEY_1, AKEYCODE_1 }, ////1 key
- { KEY_2, AKEYCODE_2 }, ////2 key
- { KEY_3, AKEYCODE_3 }, ////3 key
- { KEY_4, AKEYCODE_4 }, ////4 key
- { KEY_5, AKEYCODE_5 }, ////5 key
- { KEY_6, AKEYCODE_6 }, ////6 key
- { KEY_7, AKEYCODE_7 }, ////7 key
- { KEY_8, AKEYCODE_8 }, ////8 key
- { KEY_9, AKEYCODE_9 }, ////9 key
- { KEY_A, AKEYCODE_A }, ////A key
- { KEY_B, AKEYCODE_B }, ////B key
- { KEY_C, AKEYCODE_C }, ////C key
- { KEY_D, AKEYCODE_D }, ////D key
- { KEY_E, AKEYCODE_E }, ////E key
- { KEY_F, AKEYCODE_F }, ////F key
- { KEY_G, AKEYCODE_G }, ////G key
- { KEY_H, AKEYCODE_H }, ////H key
- { KEY_I, AKEYCODE_I }, ////I key
- { KEY_J, AKEYCODE_J }, ////J key
- { KEY_K, AKEYCODE_K }, ////K key
- { KEY_L, AKEYCODE_L }, ////L key
- { KEY_M, AKEYCODE_M }, ////M key
- { KEY_N, AKEYCODE_N }, ////N key
- { KEY_O, AKEYCODE_O }, ////O key
- { KEY_P, AKEYCODE_P }, ////P key
- { KEY_Q, AKEYCODE_Q }, ////Q key
- { KEY_R, AKEYCODE_R }, ////R key
- { KEY_S, AKEYCODE_S }, ////S key
- { KEY_T, AKEYCODE_T }, ////T key
- { KEY_U, AKEYCODE_U }, ////U key
- { KEY_V, AKEYCODE_V }, ////V key
- { KEY_W, AKEYCODE_W }, ////W key
- { KEY_X, AKEYCODE_X }, ////X key
- { KEY_Y, AKEYCODE_Y }, ////Y key
- { KEY_Z, AKEYCODE_Z }, ////Z key
- { KEY_HOMEPAGE, AKEYCODE_EXPLORER },
- { KEY_LAUNCH0, AKEYCODE_BUTTON_A },
- { KEY_LAUNCH1, AKEYCODE_BUTTON_B },
- { KEY_LAUNCH2, AKEYCODE_BUTTON_C },
- { KEY_LAUNCH3, AKEYCODE_BUTTON_X },
- { KEY_LAUNCH4, AKEYCODE_BUTTON_Y },
- { KEY_LAUNCH5, AKEYCODE_BUTTON_Z },
- { KEY_LAUNCH6, AKEYCODE_BUTTON_L1 },
- { KEY_LAUNCH7, AKEYCODE_BUTTON_R1 },
- { KEY_LAUNCH8, AKEYCODE_BUTTON_L2 },
- { KEY_LAUNCH9, AKEYCODE_BUTTON_R2 },
- { KEY_LAUNCHA, AKEYCODE_BUTTON_THUMBL },
- { KEY_LAUNCHB, AKEYCODE_BUTTON_THUMBR },
- { KEY_LAUNCHC, AKEYCODE_BUTTON_START },
- { KEY_LAUNCHD, AKEYCODE_BUTTON_SELECT },
- { KEY_LAUNCHE, AKEYCODE_BUTTON_MODE },
- { KEY_VOLUMEMUTE, AKEYCODE_MUTE },
- { KEY_VOLUMEDOWN, AKEYCODE_VOLUME_DOWN },
- { KEY_VOLUMEUP, AKEYCODE_VOLUME_UP },
- { KEY_BACK, AKEYCODE_MEDIA_REWIND },
- { KEY_FORWARD, AKEYCODE_MEDIA_FAST_FORWARD },
- { KEY_MEDIANEXT, AKEYCODE_MEDIA_NEXT },
- { KEY_MEDIAPREVIOUS, AKEYCODE_MEDIA_PREVIOUS },
- { KEY_MEDIASTOP, AKEYCODE_MEDIA_STOP },
- { KEY_PLUS, AKEYCODE_PLUS },
- { KEY_EQUAL, AKEYCODE_EQUALS }, // the '+' key
- { KEY_COMMA, AKEYCODE_COMMA }, // the ',' key
- { KEY_MINUS, AKEYCODE_MINUS }, // the '-' key
- { KEY_SLASH, AKEYCODE_SLASH }, // the '/?' key
- { KEY_BACKSLASH, AKEYCODE_BACKSLASH },
- { KEY_BRACKETLEFT, AKEYCODE_LEFT_BRACKET },
- { KEY_BRACKETRIGHT, AKEYCODE_RIGHT_BRACKET },
- { KEY_CTRL, AKEYCODE_CTRL_LEFT },
- { KEY_CTRL, AKEYCODE_CTRL_RIGHT },
- { KEY_UNKNOWN, 0 }
+ { Key::TAB, AKEYCODE_TAB },
+ { Key::ENTER, AKEYCODE_ENTER },
+ { Key::SHIFT, AKEYCODE_SHIFT_LEFT },
+ { Key::SHIFT, AKEYCODE_SHIFT_RIGHT },
+ { Key::ALT, AKEYCODE_ALT_LEFT },
+ { Key::ALT, AKEYCODE_ALT_RIGHT },
+ { Key::MENU, AKEYCODE_MENU },
+ { Key::PAUSE, AKEYCODE_MEDIA_PLAY_PAUSE },
+ { Key::ESCAPE, AKEYCODE_BACK },
+ { Key::SPACE, AKEYCODE_SPACE },
+ { Key::PAGEUP, AKEYCODE_PAGE_UP },
+ { Key::PAGEDOWN, AKEYCODE_PAGE_DOWN },
+ { Key::HOME, AKEYCODE_HOME }, //(0x24)
+ { Key::LEFT, AKEYCODE_DPAD_LEFT },
+ { Key::UP, AKEYCODE_DPAD_UP },
+ { Key::RIGHT, AKEYCODE_DPAD_RIGHT },
+ { Key::DOWN, AKEYCODE_DPAD_DOWN },
+ { Key::PERIODCENTERED, AKEYCODE_DPAD_CENTER },
+ { Key::BACKSPACE, AKEYCODE_DEL },
+ { Key::KEY_0, AKEYCODE_0 },
+ { Key::KEY_1, AKEYCODE_1 },
+ { Key::KEY_2, AKEYCODE_2 },
+ { Key::KEY_3, AKEYCODE_3 },
+ { Key::KEY_4, AKEYCODE_4 },
+ { Key::KEY_5, AKEYCODE_5 },
+ { Key::KEY_6, AKEYCODE_6 },
+ { Key::KEY_7, AKEYCODE_7 },
+ { Key::KEY_8, AKEYCODE_8 },
+ { Key::KEY_9, AKEYCODE_9 },
+ { Key::A, AKEYCODE_A },
+ { Key::B, AKEYCODE_B },
+ { Key::C, AKEYCODE_C },
+ { Key::D, AKEYCODE_D },
+ { Key::E, AKEYCODE_E },
+ { Key::F, AKEYCODE_F },
+ { Key::G, AKEYCODE_G },
+ { Key::H, AKEYCODE_H },
+ { Key::I, AKEYCODE_I },
+ { Key::J, AKEYCODE_J },
+ { Key::K, AKEYCODE_K },
+ { Key::L, AKEYCODE_L },
+ { Key::M, AKEYCODE_M },
+ { Key::N, AKEYCODE_N },
+ { Key::O, AKEYCODE_O },
+ { Key::P, AKEYCODE_P },
+ { Key::Q, AKEYCODE_Q },
+ { Key::R, AKEYCODE_R },
+ { Key::S, AKEYCODE_S },
+ { Key::T, AKEYCODE_T },
+ { Key::U, AKEYCODE_U },
+ { Key::V, AKEYCODE_V },
+ { Key::W, AKEYCODE_W },
+ { Key::X, AKEYCODE_X },
+ { Key::Y, AKEYCODE_Y },
+ { Key::Z, AKEYCODE_Z },
+ { Key::HOMEPAGE, AKEYCODE_EXPLORER },
+ { Key::LAUNCH0, AKEYCODE_BUTTON_A },
+ { Key::LAUNCH1, AKEYCODE_BUTTON_B },
+ { Key::LAUNCH2, AKEYCODE_BUTTON_C },
+ { Key::LAUNCH3, AKEYCODE_BUTTON_X },
+ { Key::LAUNCH4, AKEYCODE_BUTTON_Y },
+ { Key::LAUNCH5, AKEYCODE_BUTTON_Z },
+ { Key::LAUNCH6, AKEYCODE_BUTTON_L1 },
+ { Key::LAUNCH7, AKEYCODE_BUTTON_R1 },
+ { Key::LAUNCH8, AKEYCODE_BUTTON_L2 },
+ { Key::LAUNCH9, AKEYCODE_BUTTON_R2 },
+ { Key::LAUNCHA, AKEYCODE_BUTTON_THUMBL },
+ { Key::LAUNCHB, AKEYCODE_BUTTON_THUMBR },
+ { Key::LAUNCHC, AKEYCODE_BUTTON_START },
+ { Key::LAUNCHD, AKEYCODE_BUTTON_SELECT },
+ { Key::LAUNCHE, AKEYCODE_BUTTON_MODE },
+ { Key::VOLUMEMUTE, AKEYCODE_MUTE },
+ { Key::VOLUMEDOWN, AKEYCODE_VOLUME_DOWN },
+ { Key::VOLUMEUP, AKEYCODE_VOLUME_UP },
+ { Key::BACK, AKEYCODE_MEDIA_REWIND },
+ { Key::FORWARD, AKEYCODE_MEDIA_FAST_FORWARD },
+ { Key::MEDIANEXT, AKEYCODE_MEDIA_NEXT },
+ { Key::MEDIAPREVIOUS, AKEYCODE_MEDIA_PREVIOUS },
+ { Key::MEDIASTOP, AKEYCODE_MEDIA_STOP },
+ { Key::PLUS, AKEYCODE_PLUS },
+ { Key::EQUAL, AKEYCODE_EQUALS }, // the '+' key
+ { Key::COMMA, AKEYCODE_COMMA }, // the ',' key
+ { Key::MINUS, AKEYCODE_MINUS }, // the '-' key
+ { Key::SLASH, AKEYCODE_SLASH }, // the '/?' key
+ { Key::BACKSLASH, AKEYCODE_BACKSLASH },
+ { Key::BRACKETLEFT, AKEYCODE_LEFT_BRACKET },
+ { Key::BRACKETRIGHT, AKEYCODE_RIGHT_BRACKET },
+ { Key::CTRL, AKEYCODE_CTRL_LEFT },
+ { Key::CTRL, AKEYCODE_CTRL_RIGHT },
+ { Key::UNKNOWN, 0 }
};
/*
TODO: map these android key:
@@ -157,6 +157,6 @@ TODO: map these android key:
AKEYCODE_SWITCH_CHARSET = 95,
*/
-unsigned int android_get_keysym(unsigned int p_code);
+Key android_get_keysym(unsigned int p_code);
#endif // ANDROID_KEYS_UTILS_H
diff --git a/platform/android/display_server_android.cpp b/platform/android/display_server_android.cpp
index 34f0064a5e..505e7ac0eb 100644
--- a/platform/android/display_server_android.cpp
+++ b/platform/android/display_server_android.cpp
@@ -119,7 +119,9 @@ DisplayServer::ScreenOrientation DisplayServerAndroid::screen_get_orientation(in
GodotIOJavaWrapper *godot_io_java = OS_Android::get_singleton()->get_godot_io_java();
ERR_FAIL_COND_V(!godot_io_java, SCREEN_LANDSCAPE);
- return (ScreenOrientation)godot_io_java->get_screen_orientation();
+ const int orientation = godot_io_java->get_screen_orientation();
+ ERR_FAIL_INDEX_V_MSG(orientation, 7, SCREEN_LANDSCAPE, "Unrecognized screen orientation");
+ return (ScreenOrientation)orientation;
}
int DisplayServerAndroid::get_screen_count() const {
diff --git a/platform/android/export/export_plugin.cpp b/platform/android/export/export_plugin.cpp
index e27274be21..c5d3cbd966 100644
--- a/platform/android/export/export_plugin.cpp
+++ b/platform/android/export/export_plugin.cpp
@@ -751,9 +751,9 @@ void EditorExportPlatformAndroid::_get_permissions(const Ref<EditorExportPreset>
}
int xr_mode_index = p_preset->get("xr_features/xr_mode");
- if (xr_mode_index == 1 /* XRMode.OVR */) {
+ if (xr_mode_index == XR_MODE_OPENXR) {
int hand_tracking_index = p_preset->get("xr_features/hand_tracking"); // 0: none, 1: optional, 2: required
- if (hand_tracking_index > 0) {
+ if (hand_tracking_index > XR_HAND_TRACKING_NONE) {
if (r_permissions.find("com.oculus.permission.HAND_TRACKING") == -1) {
r_permissions.push_back("com.oculus.permission.HAND_TRACKING");
}
@@ -964,6 +964,20 @@ void EditorExportPlatformAndroid::_fix_manifest(const Ref<EditorExportPreset> &p
}
}
+ if (tname == "meta-data" && attrname == "name" && value == "xr_mode_metadata_name") {
+ // Update the meta-data 'android:name' attribute based on the selected XR mode.
+ if (xr_mode_index == XR_MODE_OPENXR) {
+ string_table.write[attr_value] = "com.samsung.android.vr.application.mode";
+ }
+ }
+
+ if (tname == "meta-data" && attrname == "value" && value == "xr_mode_metadata_value") {
+ // Update the meta-data 'android:value' attribute based on the selected XR mode.
+ if (xr_mode_index == XR_MODE_OPENXR) {
+ string_table.write[attr_value] = "vr_only";
+ }
+ }
+
iofs += 20;
}
@@ -978,7 +992,7 @@ void EditorExportPlatformAndroid::_fix_manifest(const Ref<EditorExportPreset> &p
Vector<bool> feature_required_list;
Vector<int> feature_versions;
- if (xr_mode_index == 1 /* XRMode.OVR */) {
+ if (xr_mode_index == XR_MODE_OPENXR) {
// Set degrees of freedom
feature_names.push_back("android.hardware.vr.headtracking");
feature_required_list.push_back(true);
@@ -986,11 +1000,19 @@ void EditorExportPlatformAndroid::_fix_manifest(const Ref<EditorExportPreset> &p
// Check for hand tracking
int hand_tracking_index = p_preset->get("xr_features/hand_tracking"); // 0: none, 1: optional, 2: required
- if (hand_tracking_index > 0) {
+ if (hand_tracking_index > XR_HAND_TRACKING_NONE) {
feature_names.push_back("oculus.software.handtracking");
- feature_required_list.push_back(hand_tracking_index == 2);
+ feature_required_list.push_back(hand_tracking_index == XR_HAND_TRACKING_REQUIRED);
feature_versions.push_back(-1); // no version attribute should be added.
}
+
+ // Check for passthrough
+ int passthrough_mode = p_preset->get("xr_features/passthrough");
+ if (passthrough_mode > XR_PASSTHROUGH_NONE) {
+ feature_names.push_back("com.oculus.feature.PASSTHROUGH");
+ feature_required_list.push_back(passthrough_mode == XR_PASSTHROUGH_REQUIRED);
+ feature_versions.push_back(-1);
+ }
}
if (feature_names.size() > 0) {
@@ -1612,11 +1634,11 @@ Vector<String> EditorExportPlatformAndroid::get_enabled_abis(const Ref<EditorExp
void EditorExportPlatformAndroid::get_preset_features(const Ref<EditorExportPreset> &p_preset, List<String> *r_features) {
String driver = ProjectSettings::get_singleton()->get("rendering/driver/driver_name");
- if (driver == "OpenGL3") {
+ if (driver == "opengl3") {
r_features->push_back("etc");
}
// FIXME: Review what texture formats are used for Vulkan.
- if (driver == "Vulkan") {
+ if (driver == "vulkan") {
r_features->push_back("etc2");
}
@@ -1667,11 +1689,11 @@ void EditorExportPlatformAndroid::get_export_options(List<ExportOption> *r_optio
r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, launcher_adaptive_icon_foreground_option, PROPERTY_HINT_FILE, "*.png"), ""));
r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, launcher_adaptive_icon_background_option, PROPERTY_HINT_FILE, "*.png"), ""));
- r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "graphics/32_bits_framebuffer"), true));
r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "graphics/opengl_debug"), false));
- r_options->push_back(ExportOption(PropertyInfo(Variant::INT, "xr_features/xr_mode", PROPERTY_HINT_ENUM, "Regular,Oculus Mobile VR"), 0));
+ r_options->push_back(ExportOption(PropertyInfo(Variant::INT, "xr_features/xr_mode", PROPERTY_HINT_ENUM, "Regular,OpenXR"), 0));
r_options->push_back(ExportOption(PropertyInfo(Variant::INT, "xr_features/hand_tracking", PROPERTY_HINT_ENUM, "None,Optional,Required"), 0));
+ r_options->push_back(ExportOption(PropertyInfo(Variant::INT, "xr_features/passthrough", PROPERTY_HINT_ENUM, "None,Optional,Required"), 0));
r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "screen/immersive_mode"), true));
r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "screen/support_small"), true));
@@ -2138,10 +2160,17 @@ bool EditorExportPlatformAndroid::can_export(const Ref<EditorExportPreset> &p_pr
// Validate the Xr features are properly populated
int xr_mode_index = p_preset->get("xr_features/xr_mode");
int hand_tracking = p_preset->get("xr_features/hand_tracking");
- if (xr_mode_index != /* XRMode.OVR*/ 1) {
- if (hand_tracking > 0) {
+ int passthrough_mode = p_preset->get("xr_features/passthrough");
+ if (xr_mode_index != XR_MODE_OPENXR) {
+ if (hand_tracking > XR_HAND_TRACKING_NONE) {
valid = false;
- err += TTR("\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\".");
+ err += TTR("\"Hand Tracking\" is only valid when \"Xr Mode\" is \"OpenXR\".");
+ err += "\n";
+ }
+
+ if (passthrough_mode > XR_PASSTHROUGH_NONE) {
+ valid = false;
+ err += TTR("\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\".");
err += "\n";
}
}
@@ -2183,7 +2212,7 @@ void EditorExportPlatformAndroid::get_command_line_flags(const Ref<EditorExportP
Vector<String> command_line_strings = cmdline.strip_edges().split(" ");
for (int i = 0; i < command_line_strings.size(); i++) {
if (command_line_strings[i].strip_edges().length() == 0) {
- command_line_strings.remove(i);
+ command_line_strings.remove_at(i);
i--;
}
}
@@ -2203,17 +2232,12 @@ void EditorExportPlatformAndroid::get_command_line_flags(const Ref<EditorExportP
}
int xr_mode_index = p_preset->get("xr_features/xr_mode");
- if (xr_mode_index == 1) {
- command_line_strings.push_back("--xr_mode_ovr");
+ if (xr_mode_index == XR_MODE_OPENXR) {
+ command_line_strings.push_back("--xr_mode_openxr");
} else { // XRMode.REGULAR is the default.
command_line_strings.push_back("--xr_mode_regular");
}
- bool use_32_bit_framebuffer = p_preset->get("graphics/32_bits_framebuffer");
- if (use_32_bit_framebuffer) {
- command_line_strings.push_back("--use_depth_32");
- }
-
bool immersive = p_preset->get("screen/immersive_mode");
if (immersive) {
command_line_strings.push_back("--use_immersive");
diff --git a/platform/android/export/gradle_export_util.cpp b/platform/android/export/gradle_export_util.cpp
index b0d623827e..658c0ecd0a 100644
--- a/platform/android/export/gradle_export_util.cpp
+++ b/platform/android/export/gradle_export_util.cpp
@@ -211,16 +211,24 @@ String _get_screen_sizes_tag(const Ref<EditorExportPreset> &p_preset) {
String _get_xr_features_tag(const Ref<EditorExportPreset> &p_preset) {
String manifest_xr_features;
- bool uses_xr = (int)(p_preset->get("xr_features/xr_mode")) == 1;
+ int xr_mode_index = (int)(p_preset->get("xr_features/xr_mode"));
+ bool uses_xr = xr_mode_index == XR_MODE_OPENXR;
if (uses_xr) {
manifest_xr_features += " <uses-feature tools:node=\"replace\" android:name=\"android.hardware.vr.headtracking\" android:required=\"true\" android:version=\"1\" />\n";
int hand_tracking_index = p_preset->get("xr_features/hand_tracking"); // 0: none, 1: optional, 2: required
- if (hand_tracking_index == 1) {
+ if (hand_tracking_index == XR_HAND_TRACKING_OPTIONAL) {
manifest_xr_features += " <uses-feature tools:node=\"replace\" android:name=\"oculus.software.handtracking\" android:required=\"false\" />\n";
- } else if (hand_tracking_index == 2) {
+ } else if (hand_tracking_index == XR_HAND_TRACKING_REQUIRED) {
manifest_xr_features += " <uses-feature tools:node=\"replace\" android:name=\"oculus.software.handtracking\" android:required=\"true\" />\n";
}
+
+ int passthrough_mode = p_preset->get("xr_features/passthrough");
+ if (passthrough_mode == XR_PASSTHROUGH_OPTIONAL) {
+ manifest_xr_features += " <uses-feature tools:node=\"replace\" android:name=\"com.oculus.feature.PASSTHROUGH\" android:required=\"false\" />\n";
+ } else if (passthrough_mode == XR_PASSTHROUGH_REQUIRED) {
+ manifest_xr_features += " <uses-feature tools:node=\"replace\" android:name=\"com.oculus.feature.PASSTHROUGH\" android:required=\"true\" />\n";
+ }
}
return manifest_xr_features;
}
@@ -239,7 +247,8 @@ String _get_instrumentation_tag(const Ref<EditorExportPreset> &p_preset) {
}
String _get_activity_tag(const Ref<EditorExportPreset> &p_preset) {
- bool uses_xr = (int)(p_preset->get("xr_features/xr_mode")) == 1;
+ int xr_mode_index = (int)(p_preset->get("xr_features/xr_mode"));
+ bool uses_xr = xr_mode_index == XR_MODE_OPENXR;
String orientation = _get_android_orientation_label(DisplayServer::ScreenOrientation(int(GLOBAL_GET("display/window/handheld/orientation"))));
String manifest_activity_text = vformat(
" <activity android:name=\"com.godot.game.GodotApp\" "
@@ -256,6 +265,8 @@ String _get_activity_tag(const Ref<EditorExportPreset> &p_preset) {
}
String _get_application_tag(const Ref<EditorExportPreset> &p_preset, bool p_has_storage_permission) {
+ int xr_mode_index = (int)(p_preset->get("xr_features/xr_mode"));
+ bool uses_xr = xr_mode_index == XR_MODE_OPENXR;
String manifest_application_text = vformat(
" <application android:label=\"@string/godot_project_name_string\"\n"
" android:allowBackup=\"%s\"\n"
@@ -270,6 +281,9 @@ String _get_application_tag(const Ref<EditorExportPreset> &p_preset, bool p_has_
bool_to_string(p_preset->get("package/retain_data_on_uninstall")),
bool_to_string(p_has_storage_permission));
+ if (uses_xr) {
+ manifest_application_text += " <meta-data tools:node=\"replace\" android:name=\"com.samsung.android.vr.application.mode\" android:value=\"vr_only\" />\n";
+ }
manifest_application_text += _get_activity_tag(p_preset);
manifest_application_text += " </application>\n";
return manifest_application_text;
diff --git a/platform/android/export/gradle_export_util.h b/platform/android/export/gradle_export_util.h
index 744022f1f9..db05c7534c 100644
--- a/platform/android/export/gradle_export_util.h
+++ b/platform/android/export/gradle_export_util.h
@@ -44,6 +44,21 @@ const String godot_project_name_xml_string = R"(<?xml version="1.0" encoding="ut
</resources>
)";
+// Supported XR modes.
+// This should match the entries in 'platform/android/java/lib/src/org/godotengine/godot/xr/XRMode.java'
+static const int XR_MODE_REGULAR = 0;
+static const int XR_MODE_OPENXR = 1;
+
+// Supported XR hand tracking modes.
+static const int XR_HAND_TRACKING_NONE = 0;
+static const int XR_HAND_TRACKING_OPTIONAL = 1;
+static const int XR_HAND_TRACKING_REQUIRED = 2;
+
+// Supported XR passthrough modes.
+static const int XR_PASSTHROUGH_NONE = 0;
+static const int XR_PASSTHROUGH_OPTIONAL = 1;
+static const int XR_PASSTHROUGH_REQUIRED = 2;
+
struct CustomExportData {
String assets_directory;
bool debug;
diff --git a/platform/android/java/app/AndroidManifest.xml b/platform/android/java/app/AndroidManifest.xml
index d7bf6cef30..9ae6367b42 100644
--- a/platform/android/java/app/AndroidManifest.xml
+++ b/platform/android/java/app/AndroidManifest.xml
@@ -33,6 +33,11 @@
<!-- The following metadata values are replaced when Godot exports, modifying them here has no effect. -->
<!-- Do these changes in the export preset. Adding new ones is fine. -->
+ <!-- XR mode metadata. This is modified by the exporter based on the selected xr mode. DO NOT CHANGE the values here. -->
+ <meta-data
+ android:name="xr_mode_metadata_name"
+ android:value="xr_mode_metadata_value" />
+
<activity
android:name=".GodotApp"
android:label="@string/godot_project_name_string"
diff --git a/platform/android/java/app/config.gradle b/platform/android/java/app/config.gradle
index 3fafdf8573..2a2850df0f 100644
--- a/platform/android/java/app/config.gradle
+++ b/platform/android/java/app/config.gradle
@@ -1,8 +1,8 @@
ext.versions = [
androidGradlePlugin: '7.0.3',
compileSdk : 30,
- minSdk : 19,
- targetSdk : 30,
+ minSdk : 19, // Also update 'platform/android/java/lib/AndroidManifest.xml#minSdkVersion' value
+ targetSdk : 30, // Also update 'platform/android/java/lib/AndroidManifest.xml#targetSdkVersion' value
buildTools : '30.0.3',
kotlinVersion : '1.5.10',
fragmentVersion : '1.3.6',
diff --git a/platform/android/java/lib/AndroidManifest.xml b/platform/android/java/lib/AndroidManifest.xml
index 3034794d69..2de62271c4 100644
--- a/platform/android/java/lib/AndroidManifest.xml
+++ b/platform/android/java/lib/AndroidManifest.xml
@@ -4,6 +4,9 @@
android:versionCode="1"
android:versionName="1.0">
+ <!-- Should match the mindSdk and targetSdk values in platform/android/java/app/config.gradle -->
+ <uses-sdk android:minSdkVersion="19" android:targetSdkVersion="30" />
+
<application>
<!-- Records the version of the Godot library -->
diff --git a/platform/android/java/lib/src/org/godotengine/godot/Godot.java b/platform/android/java/lib/src/org/godotengine/godot/Godot.java
index 5de092ee7e..17ff3c75c0 100644
--- a/platform/android/java/lib/src/org/godotengine/godot/Godot.java
+++ b/platform/android/java/lib/src/org/godotengine/godot/Godot.java
@@ -119,7 +119,6 @@ public class Godot extends Fragment implements SensorEventListener, IDownloaderC
private Button mWiFiSettingsButton;
private XRMode xrMode = XRMode.REGULAR;
- private boolean use_32_bits = false;
private boolean use_immersive = false;
private boolean use_debug_opengl = false;
private boolean mStatePaused;
@@ -263,11 +262,10 @@ public class Godot extends Fragment implements SensorEventListener, IDownloaderC
GodotLib.setup(command_line);
final String videoDriver = GodotLib.getGlobal("rendering/driver/driver_name");
- if (videoDriver.equals("Vulkan")) {
+ if (videoDriver.equals("vulkan")) {
mRenderView = new GodotVulkanRenderView(activity, this);
} else {
- mRenderView = new GodotGLRenderView(activity, this, xrMode, use_32_bits,
- use_debug_opengl);
+ mRenderView = new GodotGLRenderView(activity, this, xrMode, use_debug_opengl);
}
View view = mRenderView.getView();
@@ -504,10 +502,8 @@ public class Godot extends Fragment implements SensorEventListener, IDownloaderC
boolean has_extra = i < command_line.length - 1;
if (command_line[i].equals(XRMode.REGULAR.cmdLineArg)) {
xrMode = XRMode.REGULAR;
- } else if (command_line[i].equals(XRMode.OVR.cmdLineArg)) {
- xrMode = XRMode.OVR;
- } else if (command_line[i].equals("--use_depth_32")) {
- use_32_bits = true;
+ } else if (command_line[i].equals(XRMode.OPENXR.cmdLineArg)) {
+ xrMode = XRMode.OPENXR;
} else if (command_line[i].equals("--debug_opengl")) {
use_debug_opengl = true;
} else if (command_line[i].equals("--use_immersive")) {
diff --git a/platform/android/java/lib/src/org/godotengine/godot/GodotGLRenderView.java b/platform/android/java/lib/src/org/godotengine/godot/GodotGLRenderView.java
index 32aad8dc4f..d5b0b67903 100644
--- a/platform/android/java/lib/src/org/godotengine/godot/GodotGLRenderView.java
+++ b/platform/android/java/lib/src/org/godotengine/godot/GodotGLRenderView.java
@@ -78,10 +78,8 @@ public class GodotGLRenderView extends GLSurfaceView implements GodotRenderView
private final GodotRenderer godotRenderer;
private PointerIcon pointerIcon;
- public GodotGLRenderView(Context context, Godot godot, XRMode xrMode, boolean p_use_32_bits,
- boolean p_use_debug_opengl) {
+ public GodotGLRenderView(Context context, Godot godot, XRMode xrMode, boolean p_use_debug_opengl) {
super(context);
- GLUtils.use_32 = p_use_32_bits;
GLUtils.use_debug_opengl = p_use_debug_opengl;
this.godot = godot;
@@ -91,7 +89,7 @@ public class GodotGLRenderView extends GLSurfaceView implements GodotRenderView
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
pointerIcon = PointerIcon.getSystemIcon(getContext(), PointerIcon.TYPE_DEFAULT);
}
- init(xrMode, false, 16, 0);
+ init(xrMode, false);
}
@Override
@@ -172,11 +170,11 @@ public class GodotGLRenderView extends GLSurfaceView implements GodotRenderView
return pointerIcon;
}
- private void init(XRMode xrMode, boolean translucent, int depth, int stencil) {
+ private void init(XRMode xrMode, boolean translucent) {
setPreserveEGLContextOnPause(true);
setFocusableInTouchMode(true);
switch (xrMode) {
- case OVR:
+ case OPENXR:
// Replace the default egl config chooser.
setEGLConfigChooser(new OvrConfigChooser());
@@ -209,18 +207,9 @@ public class GodotGLRenderView extends GLSurfaceView implements GodotRenderView
* below.
*/
- if (GLUtils.use_32) {
- setEGLConfigChooser(translucent
- ? new RegularFallbackConfigChooser(8, 8, 8, 8, 24, stencil,
- new RegularConfigChooser(8, 8, 8, 8, 16, stencil))
- : new RegularFallbackConfigChooser(8, 8, 8, 8, 24, stencil,
- new RegularConfigChooser(5, 6, 5, 0, 16, stencil)));
-
- } else {
- setEGLConfigChooser(translucent
- ? new RegularConfigChooser(8, 8, 8, 8, 16, stencil)
- : new RegularConfigChooser(5, 6, 5, 0, 16, stencil));
- }
+ setEGLConfigChooser(
+ new RegularFallbackConfigChooser(8, 8, 8, 8, 24, 0,
+ new RegularConfigChooser(8, 8, 8, 8, 16, 0)));
break;
}
diff --git a/platform/android/java/lib/src/org/godotengine/godot/GodotIO.java b/platform/android/java/lib/src/org/godotengine/godot/GodotIO.java
index d85d88ec6c..5f354b6b4c 100644
--- a/platform/android/java/lib/src/org/godotengine/godot/GodotIO.java
+++ b/platform/android/java/lib/src/org/godotengine/godot/GodotIO.java
@@ -288,7 +288,34 @@ public class GodotIO {
}
public int getScreenOrientation() {
- return activity.getRequestedOrientation();
+ int orientation = activity.getRequestedOrientation();
+ switch (orientation) {
+ case ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE:
+ return SCREEN_LANDSCAPE;
+ case ActivityInfo.SCREEN_ORIENTATION_PORTRAIT:
+ return SCREEN_PORTRAIT;
+ case ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE:
+ return SCREEN_REVERSE_LANDSCAPE;
+ case ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT:
+ return SCREEN_REVERSE_PORTRAIT;
+ case ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE:
+ case ActivityInfo.SCREEN_ORIENTATION_USER_LANDSCAPE:
+ return SCREEN_SENSOR_LANDSCAPE;
+ case ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT:
+ case ActivityInfo.SCREEN_ORIENTATION_USER_PORTRAIT:
+ return SCREEN_SENSOR_PORTRAIT;
+ case ActivityInfo.SCREEN_ORIENTATION_SENSOR:
+ case ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR:
+ case ActivityInfo.SCREEN_ORIENTATION_FULL_USER:
+ return SCREEN_SENSOR;
+ case ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED:
+ case ActivityInfo.SCREEN_ORIENTATION_USER:
+ case ActivityInfo.SCREEN_ORIENTATION_BEHIND:
+ case ActivityInfo.SCREEN_ORIENTATION_NOSENSOR:
+ case ActivityInfo.SCREEN_ORIENTATION_LOCKED:
+ default:
+ return -1;
+ }
}
public void setEdit(GodotEditText _edit) {
diff --git a/platform/android/java/lib/src/org/godotengine/godot/GodotLib.java b/platform/android/java/lib/src/org/godotengine/godot/GodotLib.java
index 95870acda1..a23d030d4c 100644
--- a/platform/android/java/lib/src/org/godotengine/godot/GodotLib.java
+++ b/platform/android/java/lib/src/org/godotengine/godot/GodotLib.java
@@ -75,9 +75,8 @@ public class GodotLib {
/**
* Invoked on the render thread when the underlying Android surface is created or recreated.
* @param p_surface
- * @param p_32_bits
*/
- public static native void newcontext(Surface p_surface, boolean p_32_bits);
+ public static native void newcontext(Surface p_surface);
/**
* Forward {@link Activity#onBackPressed()} event from the main thread to the GL thread.
diff --git a/platform/android/java/lib/src/org/godotengine/godot/GodotRenderer.java b/platform/android/java/lib/src/org/godotengine/godot/GodotRenderer.java
index 878a119c5c..12e452fc99 100644
--- a/platform/android/java/lib/src/org/godotengine/godot/GodotRenderer.java
+++ b/platform/android/java/lib/src/org/godotengine/godot/GodotRenderer.java
@@ -70,7 +70,7 @@ class GodotRenderer implements GLSurfaceView.Renderer {
}
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
- GodotLib.newcontext(null, GLUtils.use_32);
+ GodotLib.newcontext(null);
for (GodotPlugin plugin : pluginRegistry.getAllPlugins()) {
plugin.onGLSurfaceCreated(gl, config);
}
diff --git a/platform/android/java/lib/src/org/godotengine/godot/utils/GLUtils.java b/platform/android/java/lib/src/org/godotengine/godot/utils/GLUtils.java
index 19588f8465..09820fad5f 100644
--- a/platform/android/java/lib/src/org/godotengine/godot/utils/GLUtils.java
+++ b/platform/android/java/lib/src/org/godotengine/godot/utils/GLUtils.java
@@ -44,7 +44,6 @@ public class GLUtils {
public static final boolean DEBUG = false;
- public static boolean use_32 = false;
public static boolean use_debug_opengl = false;
private static final String[] ATTRIBUTES_NAMES = new String[] {
diff --git a/platform/android/java/lib/src/org/godotengine/godot/vulkan/VkRenderer.kt b/platform/android/java/lib/src/org/godotengine/godot/vulkan/VkRenderer.kt
index a35f6ec5a7..b13f9bfeab 100644
--- a/platform/android/java/lib/src/org/godotengine/godot/vulkan/VkRenderer.kt
+++ b/platform/android/java/lib/src/org/godotengine/godot/vulkan/VkRenderer.kt
@@ -58,7 +58,7 @@ internal class VkRenderer {
* Called when the surface is created and signals the beginning of rendering.
*/
fun onVkSurfaceCreated(surface: Surface) {
- GodotLib.newcontext(surface, false)
+ GodotLib.newcontext(surface)
for (plugin in pluginRegistry.getAllPlugins()) {
plugin.onVkSurfaceCreated(surface)
diff --git a/platform/android/java/lib/src/org/godotengine/godot/xr/XRMode.java b/platform/android/java/lib/src/org/godotengine/godot/xr/XRMode.java
index 0995477baf..58f02b0396 100644
--- a/platform/android/java/lib/src/org/godotengine/godot/xr/XRMode.java
+++ b/platform/android/java/lib/src/org/godotengine/godot/xr/XRMode.java
@@ -35,7 +35,7 @@ package org.godotengine.godot.xr;
*/
public enum XRMode {
REGULAR(0, "Regular", "--xr_mode_regular", "Default Android Gamepad"), // Regular/flatscreen
- OVR(1, "Oculus Mobile VR", "--xr_mode_ovr", "");
+ OPENXR(1, "OpenXR", "--xr_mode_openxr", "");
final int index;
final String label;
diff --git a/platform/android/java/lib/src/org/godotengine/godot/xr/regular/RegularFallbackConfigChooser.java b/platform/android/java/lib/src/org/godotengine/godot/xr/regular/RegularFallbackConfigChooser.java
index e690c5b695..63c5381994 100644
--- a/platform/android/java/lib/src/org/godotengine/godot/xr/regular/RegularFallbackConfigChooser.java
+++ b/platform/android/java/lib/src/org/godotengine/godot/xr/regular/RegularFallbackConfigChooser.java
@@ -38,7 +38,7 @@ import javax.microedition.khronos.egl.EGL10;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.egl.EGLDisplay;
-/* Fallback if 32bit View is not supported*/
+/* Fallback if the requested configuration is not supported */
public class RegularFallbackConfigChooser extends RegularConfigChooser {
private static final String TAG = RegularFallbackConfigChooser.class.getSimpleName();
@@ -55,7 +55,6 @@ public class RegularFallbackConfigChooser extends RegularConfigChooser {
if (ec == null) {
Log.w(TAG, "Trying ConfigChooser fallback");
ec = fallback.chooseConfig(egl, display, configs);
- GLUtils.use_32 = false;
}
return ec;
}
diff --git a/platform/android/java_godot_lib_jni.cpp b/platform/android/java_godot_lib_jni.cpp
index d971727269..3236512f5c 100644
--- a/platform/android/java_godot_lib_jni.cpp
+++ b/platform/android/java_godot_lib_jni.cpp
@@ -182,11 +182,10 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_resize(JNIEnv *env, j
}
}
-JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_newcontext(JNIEnv *env, jclass clazz, jobject p_surface, jboolean p_32_bits) {
+JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_newcontext(JNIEnv *env, jclass clazz, jobject p_surface) {
if (os_android) {
if (step.get() == 0) {
// During startup
- os_android->set_context_is_16_bits(!p_32_bits);
if (p_surface) {
ANativeWindow *native_window = ANativeWindow_fromSurface(env, p_surface);
os_android->set_native_window(native_window);
@@ -318,8 +317,9 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_joybutton(JNIEnv *env
// Called on the UI thread
JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_joyaxis(JNIEnv *env, jclass clazz, jint p_device, jint p_axis, jfloat p_value) {
- if (step.get() <= 0)
+ if (step.get() <= 0) {
return;
+ }
AndroidInputHandler::JoypadEvent jevent;
jevent.device = p_device;
@@ -332,24 +332,27 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_joyaxis(JNIEnv *env,
// Called on the UI thread
JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_joyhat(JNIEnv *env, jclass clazz, jint p_device, jint p_hat_x, jint p_hat_y) {
- if (step.get() <= 0)
+ if (step.get() <= 0) {
return;
+ }
AndroidInputHandler::JoypadEvent jevent;
jevent.device = p_device;
jevent.type = AndroidInputHandler::JOY_EVENT_HAT;
- int hat = 0;
+ HatMask hat = HatMask::CENTER;
if (p_hat_x != 0) {
- if (p_hat_x < 0)
- hat |= HatMask::HAT_MASK_LEFT;
- else
- hat |= HatMask::HAT_MASK_RIGHT;
+ if (p_hat_x < 0) {
+ hat |= HatMask::LEFT;
+ } else {
+ hat |= HatMask::RIGHT;
+ }
}
if (p_hat_y != 0) {
- if (p_hat_y < 0)
- hat |= HatMask::HAT_MASK_UP;
- else
- hat |= HatMask::HAT_MASK_DOWN;
+ if (p_hat_y < 0) {
+ hat |= HatMask::UP;
+ } else {
+ hat |= HatMask::DOWN;
+ }
}
jevent.hat = hat;
diff --git a/platform/android/java_godot_lib_jni.h b/platform/android/java_godot_lib_jni.h
index 63e9e6d8e5..7ea74480cb 100644
--- a/platform/android/java_godot_lib_jni.h
+++ b/platform/android/java_godot_lib_jni.h
@@ -41,7 +41,7 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_initialize(JNIEnv *en
JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_ondestroy(JNIEnv *env, jclass clazz);
JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_setup(JNIEnv *env, jclass clazz, jobjectArray p_cmdline);
JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_resize(JNIEnv *env, jclass clazz, jobject p_surface, jint p_width, jint p_height);
-JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_newcontext(JNIEnv *env, jclass clazz, jobject p_surface, jboolean p_32_bits);
+JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_newcontext(JNIEnv *env, jclass clazz, jobject p_surface);
JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_step(JNIEnv *env, jclass clazz);
JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_back(JNIEnv *env, jclass clazz);
void touch_preprocessing(JNIEnv *env, jclass clazz, jint input_device, jint ev, jint pointer, jint pointer_count, jfloatArray positions, jint buttons_mask = 0, jfloat vertical_factor = 0, jfloat horizontal_factor = 0);
diff --git a/platform/android/os_android.cpp b/platform/android/os_android.cpp
index 1a4c5ec00f..0e5e10bc0a 100644
--- a/platform/android/os_android.cpp
+++ b/platform/android/os_android.cpp
@@ -261,13 +261,6 @@ Size2i OS_Android::get_display_size() const {
return display_size;
}
-void OS_Android::set_context_is_16_bits(bool p_is_16) {
-#if defined(GLES3_ENABLED)
- //if (rasterizer)
- // rasterizer->set_force_16_bits_fbo(p_is_16);
-#endif
-}
-
void OS_Android::set_opengl_extensions(const char *p_gl_extensions) {
#if defined(GLES3_ENABLED)
ERR_FAIL_COND(!p_gl_extensions);
diff --git a/platform/android/os_android.h b/platform/android/os_android.h
index d2e0e7d1e9..a62f79952c 100644
--- a/platform/android/os_android.h
+++ b/platform/android/os_android.h
@@ -102,7 +102,6 @@ public:
void set_display_size(const Size2i &p_size);
Size2i get_display_size() const;
- void set_context_is_16_bits(bool p_is_16);
void set_opengl_extensions(const char *p_gl_extensions);
void set_native_window(ANativeWindow *p_native_window);
diff --git a/platform/iphone/display_server_iphone.mm b/platform/iphone/display_server_iphone.mm
index 7d13a08d39..b746c60d4e 100644
--- a/platform/iphone/display_server_iphone.mm
+++ b/platform/iphone/display_server_iphone.mm
@@ -261,7 +261,7 @@ void DisplayServerIPhone::key(Key p_key, bool p_pressed) {
ev->set_pressed(p_pressed);
ev->set_keycode(p_key);
ev->set_physical_keycode(p_key);
- ev->set_unicode(p_key);
+ ev->set_unicode((char32_t)p_key);
perform_event(ev);
};
diff --git a/platform/iphone/export/export_plugin.cpp b/platform/iphone/export/export_plugin.cpp
index 54fb597c62..7450215cfb 100644
--- a/platform/iphone/export/export_plugin.cpp
+++ b/platform/iphone/export/export_plugin.cpp
@@ -33,7 +33,7 @@
void EditorExportPlatformIOS::get_preset_features(const Ref<EditorExportPreset> &p_preset, List<String> *r_features) {
String driver = ProjectSettings::get_singleton()->get("rendering/driver/driver_name");
r_features->push_back("pvrtc");
- if (driver == "Vulkan") {
+ if (driver == "vulkan") {
// FIXME: Review if this is correct.
r_features->push_back("etc2");
}
@@ -1685,8 +1685,10 @@ Error EditorExportPlatformIOS::export_project(const Ref<EditorExportPreset> &p_p
archive_args.push_back("archive");
archive_args.push_back("-archivePath");
archive_args.push_back(archive_path);
- err = OS::get_singleton()->execute("xcodebuild", archive_args);
+ String archive_str;
+ err = OS::get_singleton()->execute("xcodebuild", archive_args, &archive_str, nullptr, true);
ERR_FAIL_COND_V(err, err);
+ print_line("xcodebuild (.xcarchive):\n" + archive_str);
if (ep.step("Making .ipa", 4)) {
return ERR_SKIP;
@@ -1700,8 +1702,10 @@ Error EditorExportPlatformIOS::export_project(const Ref<EditorExportPreset> &p_p
export_args.push_back("-allowProvisioningUpdates");
export_args.push_back("-exportPath");
export_args.push_back(dest_dir);
- err = OS::get_singleton()->execute("xcodebuild", export_args);
+ String export_str;
+ err = OS::get_singleton()->execute("xcodebuild", export_args, &export_str, nullptr, true);
ERR_FAIL_COND_V(err, err);
+ print_line("xcodebuild (.ipa):\n" + export_str);
#else
print_line(".ipa can only be built on macOS. Leaving Xcode project without building the package.");
#endif
diff --git a/platform/iphone/joypad_iphone.mm b/platform/iphone/joypad_iphone.mm
index 45842b38aa..1bf5462d91 100644
--- a/platform/iphone/joypad_iphone.mm
+++ b/platform/iphone/joypad_iphone.mm
@@ -259,31 +259,31 @@ void JoypadIPhone::start_processing() {
int joy_id = [self getJoyIdForController:controller];
if (element == gamepad.buttonA) {
- Input::get_singleton()->joy_button(joy_id, JOY_BUTTON_A,
+ Input::get_singleton()->joy_button(joy_id, JoyButton::A,
gamepad.buttonA.isPressed);
} else if (element == gamepad.buttonB) {
- Input::get_singleton()->joy_button(joy_id, JOY_BUTTON_B,
+ Input::get_singleton()->joy_button(joy_id, JoyButton::B,
gamepad.buttonB.isPressed);
} else if (element == gamepad.buttonX) {
- Input::get_singleton()->joy_button(joy_id, JOY_BUTTON_X,
+ Input::get_singleton()->joy_button(joy_id, JoyButton::X,
gamepad.buttonX.isPressed);
} else if (element == gamepad.buttonY) {
- Input::get_singleton()->joy_button(joy_id, JOY_BUTTON_Y,
+ Input::get_singleton()->joy_button(joy_id, JoyButton::Y,
gamepad.buttonY.isPressed);
} else if (element == gamepad.leftShoulder) {
- Input::get_singleton()->joy_button(joy_id, JOY_BUTTON_LEFT_SHOULDER,
+ Input::get_singleton()->joy_button(joy_id, JoyButton::LEFT_SHOULDER,
gamepad.leftShoulder.isPressed);
} else if (element == gamepad.rightShoulder) {
- Input::get_singleton()->joy_button(joy_id, JOY_BUTTON_RIGHT_SHOULDER,
+ Input::get_singleton()->joy_button(joy_id, JoyButton::RIGHT_SHOULDER,
gamepad.rightShoulder.isPressed);
} else if (element == gamepad.dpad) {
- Input::get_singleton()->joy_button(joy_id, JOY_BUTTON_DPAD_UP,
+ Input::get_singleton()->joy_button(joy_id, JoyButton::DPAD_UP,
gamepad.dpad.up.isPressed);
- Input::get_singleton()->joy_button(joy_id, JOY_BUTTON_DPAD_DOWN,
+ Input::get_singleton()->joy_button(joy_id, JoyButton::DPAD_DOWN,
gamepad.dpad.down.isPressed);
- Input::get_singleton()->joy_button(joy_id, JOY_BUTTON_DPAD_LEFT,
+ Input::get_singleton()->joy_button(joy_id, JoyButton::DPAD_LEFT,
gamepad.dpad.left.isPressed);
- Input::get_singleton()->joy_button(joy_id, JOY_BUTTON_DPAD_RIGHT,
+ Input::get_singleton()->joy_button(joy_id, JoyButton::DPAD_RIGHT,
gamepad.dpad.right.isPressed);
};
@@ -291,20 +291,20 @@ void JoypadIPhone::start_processing() {
jx.min = -1;
if (element == gamepad.leftThumbstick) {
jx.value = gamepad.leftThumbstick.xAxis.value;
- Input::get_singleton()->joy_axis(joy_id, JOY_AXIS_LEFT_X, jx);
+ Input::get_singleton()->joy_axis(joy_id, JoyAxis::LEFT_X, jx);
jx.value = -gamepad.leftThumbstick.yAxis.value;
- Input::get_singleton()->joy_axis(joy_id, JOY_AXIS_LEFT_Y, jx);
+ Input::get_singleton()->joy_axis(joy_id, JoyAxis::LEFT_Y, jx);
} else if (element == gamepad.rightThumbstick) {
jx.value = gamepad.rightThumbstick.xAxis.value;
- Input::get_singleton()->joy_axis(joy_id, JOY_AXIS_RIGHT_X, jx);
+ Input::get_singleton()->joy_axis(joy_id, JoyAxis::RIGHT_X, jx);
jx.value = -gamepad.rightThumbstick.yAxis.value;
- Input::get_singleton()->joy_axis(joy_id, JOY_AXIS_RIGHT_Y, jx);
+ Input::get_singleton()->joy_axis(joy_id, JoyAxis::RIGHT_Y, jx);
} else if (element == gamepad.leftTrigger) {
jx.value = gamepad.leftTrigger.value;
- Input::get_singleton()->joy_axis(joy_id, JOY_AXIS_TRIGGER_LEFT, jx);
+ Input::get_singleton()->joy_axis(joy_id, JoyAxis::TRIGGER_LEFT, jx);
} else if (element == gamepad.rightTrigger) {
jx.value = gamepad.rightTrigger.value;
- Input::get_singleton()->joy_axis(joy_id, JOY_AXIS_TRIGGER_RIGHT, jx);
+ Input::get_singleton()->joy_axis(joy_id, JoyAxis::TRIGGER_RIGHT, jx);
};
};
} else if (controller.microGamepad != nil) {
@@ -319,18 +319,18 @@ void JoypadIPhone::start_processing() {
int joy_id = [self getJoyIdForController:controller];
if (element == gamepad.buttonA) {
- Input::get_singleton()->joy_button(joy_id, JOY_BUTTON_A,
+ Input::get_singleton()->joy_button(joy_id, JoyButton::A,
gamepad.buttonA.isPressed);
} else if (element == gamepad.buttonX) {
- Input::get_singleton()->joy_button(joy_id, JOY_BUTTON_X,
+ Input::get_singleton()->joy_button(joy_id, JoyButton::X,
gamepad.buttonX.isPressed);
} else if (element == gamepad.dpad) {
- Input::get_singleton()->joy_button(joy_id, JOY_BUTTON_DPAD_UP,
+ Input::get_singleton()->joy_button(joy_id, JoyButton::DPAD_UP,
gamepad.dpad.up.isPressed);
- Input::get_singleton()->joy_button(joy_id, JOY_BUTTON_DPAD_DOWN,
+ Input::get_singleton()->joy_button(joy_id, JoyButton::DPAD_DOWN,
gamepad.dpad.down.isPressed);
- Input::get_singleton()->joy_button(joy_id, JOY_BUTTON_DPAD_LEFT, gamepad.dpad.left.isPressed);
- Input::get_singleton()->joy_button(joy_id, JOY_BUTTON_DPAD_RIGHT, gamepad.dpad.right.isPressed);
+ Input::get_singleton()->joy_button(joy_id, JoyButton::DPAD_LEFT, gamepad.dpad.left.isPressed);
+ Input::get_singleton()->joy_button(joy_id, JoyButton::DPAD_RIGHT, gamepad.dpad.right.isPressed);
};
};
}
diff --git a/platform/iphone/keyboard_input_view.mm b/platform/iphone/keyboard_input_view.mm
index e2bd0acff4..b11d04181e 100644
--- a/platform/iphone/keyboard_input_view.mm
+++ b/platform/iphone/keyboard_input_view.mm
@@ -115,8 +115,8 @@
- (void)deleteText:(NSInteger)charactersToDelete {
for (int i = 0; i < charactersToDelete; i++) {
- DisplayServerIPhone::get_singleton()->key(KEY_BACKSPACE, true);
- DisplayServerIPhone::get_singleton()->key(KEY_BACKSPACE, false);
+ DisplayServerIPhone::get_singleton()->key(Key::BACKSPACE, true);
+ DisplayServerIPhone::get_singleton()->key(Key::BACKSPACE, false);
}
}
@@ -129,10 +129,10 @@
switch (character) {
case 10:
- character = KEY_ENTER;
+ character = (int)Key::ENTER;
break;
case 8198:
- character = KEY_SPACE;
+ character = (int)Key::SPACE;
break;
default:
break;
diff --git a/platform/javascript/detect.py b/platform/javascript/detect.py
index 891ae419bd..b57f3b3f16 100644
--- a/platform/javascript/detect.py
+++ b/platform/javascript/detect.py
@@ -180,6 +180,13 @@ def configure(env):
env.Prepend(CPPPATH=["#platform/javascript"])
env.Append(CPPDEFINES=["JAVASCRIPT_ENABLED", "UNIX_ENABLED"])
+ if env["opengl3"]:
+ env.AppendUnique(CPPDEFINES=["GLES3_ENABLED"])
+ # This setting just makes WebGL 2 APIs available, it does NOT disable WebGL 1.
+ env.Append(LINKFLAGS=["-s", "USE_WEBGL2=1"])
+ # Allow use to take control of swapping WebGL buffers.
+ env.Append(LINKFLAGS=["-s", "OFFSCREEN_FRAMEBUFFER=1"])
+
if env["javascript_eval"]:
env.Append(CPPDEFINES=["JAVASCRIPT_EVAL_ENABLED"])
@@ -218,25 +225,11 @@ def configure(env):
# us since we don't know requirements at compile-time.
env.Append(LINKFLAGS=["-s", "ALLOW_MEMORY_GROWTH=1"])
- # This setting just makes WebGL 2 APIs available, it does NOT disable WebGL 1.
- env.Append(LINKFLAGS=["-s", "USE_WEBGL2=1"])
-
# Do not call main immediately when the support code is ready.
env.Append(LINKFLAGS=["-s", "INVOKE_RUN=0"])
- # Allow use to take control of swapping WebGL buffers.
- env.Append(LINKFLAGS=["-s", "OFFSCREEN_FRAMEBUFFER=1"])
-
# callMain for manual start, cwrap for the mono version.
env.Append(LINKFLAGS=["-s", "EXPORTED_RUNTIME_METHODS=['callMain','cwrap']"])
# Add code that allow exiting runtime.
env.Append(LINKFLAGS=["-s", "EXIT_RUNTIME=1"])
-
- # TODO remove once we have GLES support back (temporary fix undefined symbols due to dead code elimination).
- env.Append(
- LINKFLAGS=[
- "-s",
- "EXPORTED_FUNCTIONS=['_main', '_emscripten_webgl_get_current_context']",
- ]
- )
diff --git a/platform/javascript/display_server_javascript.cpp b/platform/javascript/display_server_javascript.cpp
index c7d68019a1..7648ddaf43 100644
--- a/platform/javascript/display_server_javascript.cpp
+++ b/platform/javascript/display_server_javascript.cpp
@@ -30,6 +30,9 @@
#include "platform/javascript/display_server_javascript.h"
+#ifdef GLES3_ENABLED
+#include "drivers/gles3/rasterizer_gles3.h"
+#endif
#include "platform/javascript/os_javascript.h"
#include "servers/rendering/rasterizer_dummy.h"
@@ -50,14 +53,6 @@ DisplayServerJavaScript *DisplayServerJavaScript::get_singleton() {
}
// Window (canvas)
-void DisplayServerJavaScript::focus_canvas() {
- godot_js_display_canvas_focus();
-}
-
-bool DisplayServerJavaScript::is_canvas_focused() {
- return godot_js_display_canvas_is_focused() != 0;
-}
-
bool DisplayServerJavaScript::check_size_force_redraw() {
return godot_js_display_size_update() != 0;
}
@@ -141,29 +136,30 @@ void DisplayServerJavaScript::key_callback(int p_pressed, int p_repeat, int p_mo
int DisplayServerJavaScript::mouse_button_callback(int p_pressed, int p_button, double p_x, double p_y, int p_modifiers) {
DisplayServerJavaScript *ds = get_singleton();
+ Point2 pos(p_x, p_y);
+ Input::get_singleton()->set_mouse_position(pos);
Ref<InputEventMouseButton> ev;
ev.instantiate();
- ev->set_pressed(p_pressed);
- ev->set_position(Point2(p_x, p_y));
- ev->set_global_position(ev->get_position());
+ ev->set_position(pos);
+ ev->set_global_position(pos);
ev->set_pressed(p_pressed);
dom2godot_mod(ev, p_modifiers);
switch (p_button) {
case DOM_BUTTON_LEFT:
- ev->set_button_index(MOUSE_BUTTON_LEFT);
+ ev->set_button_index(MouseButton::LEFT);
break;
case DOM_BUTTON_MIDDLE:
- ev->set_button_index(MOUSE_BUTTON_MIDDLE);
+ ev->set_button_index(MouseButton::MIDDLE);
break;
case DOM_BUTTON_RIGHT:
- ev->set_button_index(MOUSE_BUTTON_RIGHT);
+ ev->set_button_index(MouseButton::RIGHT);
break;
case DOM_BUTTON_XBUTTON1:
- ev->set_button_index(MOUSE_BUTTON_XBUTTON1);
+ ev->set_button_index(MouseButton::MB_XBUTTON1);
break;
case DOM_BUTTON_XBUTTON2:
- ev->set_button_index(MOUSE_BUTTON_XBUTTON2);
+ ev->set_button_index(MouseButton::MB_XBUTTON2);
break;
default:
return false;
@@ -176,7 +172,7 @@ int DisplayServerJavaScript::mouse_button_callback(int p_pressed, int p_button,
if (diff < 400 && Point2(ds->last_click_pos).distance_to(ev->get_position()) < 5) {
ds->last_click_ms = 0;
ds->last_click_pos = Point2(-100, -100);
- ds->last_click_button_index = -1;
+ ds->last_click_button_index = MouseButton::NONE;
ev->set_double_click(true);
}
@@ -190,11 +186,11 @@ int DisplayServerJavaScript::mouse_button_callback(int p_pressed, int p_button,
}
}
- int mask = Input::get_singleton()->get_mouse_button_mask();
- int button_flag = 1 << (ev->get_button_index() - 1);
+ MouseButton mask = Input::get_singleton()->get_mouse_button_mask();
+ MouseButton button_flag = mouse_button_to_mask(ev->get_button_index());
if (ev->is_pressed()) {
mask |= button_flag;
- } else if (mask & button_flag) {
+ } else if ((mask & button_flag) != MouseButton::NONE) {
mask &= ~button_flag;
} else {
// Received release event, but press was outside the canvas, so ignore.
@@ -215,19 +211,22 @@ int DisplayServerJavaScript::mouse_button_callback(int p_pressed, int p_button,
}
void DisplayServerJavaScript::mouse_move_callback(double p_x, double p_y, double p_rel_x, double p_rel_y, int p_modifiers) {
- int input_mask = Input::get_singleton()->get_mouse_button_mask();
+ MouseButton input_mask = Input::get_singleton()->get_mouse_button_mask();
// For motion outside the canvas, only read mouse movement if dragging
// started inside the canvas; imitating desktop app behaviour.
- if (!get_singleton()->cursor_inside_canvas && !input_mask)
+ if (!get_singleton()->cursor_inside_canvas && input_mask == MouseButton::NONE) {
return;
+ }
+ Point2 pos(p_x, p_y);
+ Input::get_singleton()->set_mouse_position(pos);
Ref<InputEventMouseMotion> ev;
ev.instantiate();
dom2godot_mod(ev, p_modifiers);
ev->set_button_mask(input_mask);
- ev->set_position(Point2(p_x, p_y));
- ev->set_global_position(ev->get_position());
+ ev->set_position(pos);
+ ev->set_global_position(pos);
ev->set_relative(Vector2(p_rel_x, p_rel_y));
Input::get_singleton()->set_mouse_position(ev->get_position());
@@ -396,6 +395,10 @@ DisplayServer::MouseMode DisplayServerJavaScript::mouse_get_mode() const {
return MOUSE_MODE_VISIBLE;
}
+Point2i DisplayServerJavaScript::mouse_get_position() const {
+ return Input::get_singleton()->get_mouse_position();
+}
+
// Wheel
int DisplayServerJavaScript::mouse_wheel_callback(double p_delta_x, double p_delta_y) {
if (!godot_js_display_canvas_is_focused()) {
@@ -412,19 +415,19 @@ int DisplayServerJavaScript::mouse_wheel_callback(double p_delta_x, double p_del
ev->set_position(input->get_mouse_position());
ev->set_global_position(ev->get_position());
- ev->set_shift_pressed(input->is_key_pressed(KEY_SHIFT));
- ev->set_alt_pressed(input->is_key_pressed(KEY_ALT));
- ev->set_ctrl_pressed(input->is_key_pressed(KEY_CTRL));
- ev->set_meta_pressed(input->is_key_pressed(KEY_META));
+ ev->set_shift_pressed(input->is_key_pressed(Key::SHIFT));
+ ev->set_alt_pressed(input->is_key_pressed(Key::ALT));
+ ev->set_ctrl_pressed(input->is_key_pressed(Key::CTRL));
+ ev->set_meta_pressed(input->is_key_pressed(Key::META));
if (p_delta_y < 0) {
- ev->set_button_index(MOUSE_BUTTON_WHEEL_UP);
+ ev->set_button_index(MouseButton::WHEEL_UP);
} else if (p_delta_y > 0) {
- ev->set_button_index(MOUSE_BUTTON_WHEEL_DOWN);
+ ev->set_button_index(MouseButton::WHEEL_DOWN);
} else if (p_delta_x > 0) {
- ev->set_button_index(MOUSE_BUTTON_WHEEL_LEFT);
+ ev->set_button_index(MouseButton::WHEEL_LEFT);
} else if (p_delta_x < 0) {
- ev->set_button_index(MOUSE_BUTTON_WHEEL_RIGHT);
+ ev->set_button_index(MouseButton::WHEEL_RIGHT);
} else {
return false;
}
@@ -432,7 +435,7 @@ int DisplayServerJavaScript::mouse_wheel_callback(double p_delta_x, double p_del
// Different browsers give wildly different delta values, and we can't
// interpret deltaMode, so use default value for wheel events' factor.
- int button_flag = 1 << (ev->get_button_index() - 1);
+ MouseButton button_flag = mouse_button_to_mask(ev->get_button_index());
ev->set_pressed(true);
ev->set_button_mask(input->get_mouse_button_mask() | button_flag);
@@ -509,12 +512,12 @@ void DisplayServerJavaScript::vk_input_text_callback(const char *p_text, int p_c
k.instantiate();
k->set_pressed(true);
k->set_echo(false);
- k->set_keycode(KEY_RIGHT);
+ k->set_keycode(Key::RIGHT);
input->parse_input_event(k);
k.instantiate();
k->set_pressed(false);
k->set_echo(false);
- k->set_keycode(KEY_RIGHT);
+ k->set_keycode(Key::RIGHT);
input->parse_input_event(k);
}
}
@@ -557,12 +560,12 @@ void DisplayServerJavaScript::process_joypads() {
for (int b = 0; b < s_btns_num; b++) {
float value = s_btns[b];
// Buttons 6 and 7 in the standard mapping need to be
- // axis to be handled as JOY_AXIS_TRIGGER by Godot.
+ // axis to be handled as JoyAxis::TRIGGER by Godot.
if (s_standard && (b == 6 || b == 7)) {
Input::JoyAxisValue joy_axis;
joy_axis.min = 0;
joy_axis.value = value;
- JoyAxis a = b == 6 ? JOY_AXIS_TRIGGER_LEFT : JOY_AXIS_TRIGGER_RIGHT;
+ JoyAxis a = b == 6 ? JoyAxis::TRIGGER_LEFT : JoyAxis::TRIGGER_RIGHT;
input->joy_axis(idx, a, joy_axis);
} else {
input->joy_button(idx, (JoyButton)b, value);
@@ -579,7 +582,9 @@ void DisplayServerJavaScript::process_joypads() {
Vector<String> DisplayServerJavaScript::get_rendering_drivers_func() {
Vector<String> drivers;
- drivers.push_back("dummy");
+#ifdef GLES3_ENABLED
+ drivers.push_back("opengl3");
+#endif
return drivers;
}
@@ -677,40 +682,34 @@ DisplayServerJavaScript::DisplayServerJavaScript(const String &p_rendering_drive
// Expose method for requesting quit.
godot_js_os_request_quit_cb(request_quit_callback);
- RasterizerDummy::make_current(); // TODO OpenGL in Godot 4.0... or webgpu?
-#if 0
- EmscriptenWebGLContextAttributes attributes;
- emscripten_webgl_init_context_attributes(&attributes);
- attributes.alpha = GLOBAL_GET("display/window/per_pixel_transparency/allowed");
- attributes.antialias = false;
- ERR_FAIL_INDEX_V(p_video_driver, VIDEO_DRIVER_MAX, ERR_INVALID_PARAMETER);
-
- if (p_desired.layered) {
- set_window_per_pixel_transparency_enabled(true);
- }
-
- bool gl_initialization_error = false;
-
- if (RasterizerGLES3::is_viable() == OK) {
- attributes.majorVersion = 1;
- RasterizerGLES3::register_config();
- RasterizerGLES3::make_current();
- } else {
- gl_initialization_error = true;
- }
-
- EMSCRIPTEN_WEBGL_CONTEXT_HANDLE ctx = emscripten_webgl_create_context(canvas_id, &attributes);
- if (emscripten_webgl_make_context_current(ctx) != EMSCRIPTEN_RESULT_SUCCESS) {
- gl_initialization_error = true;
+#ifdef GLES3_ENABLED
+ // TODO "vulkan" defaults to webgl2 for now.
+ bool wants_webgl2 = p_rendering_driver == "opengl3" || p_rendering_driver == "vulkan";
+ bool webgl2_init_failed = wants_webgl2 && !godot_js_display_has_webgl(2);
+ if (wants_webgl2 && !webgl2_init_failed) {
+ EmscriptenWebGLContextAttributes attributes;
+ emscripten_webgl_init_context_attributes(&attributes);
+ //attributes.alpha = GLOBAL_GET("display/window/per_pixel_transparency/allowed");
+ attributes.alpha = true;
+ attributes.antialias = false;
+ attributes.majorVersion = 2;
+
+ webgl_ctx = emscripten_webgl_create_context(canvas_id, &attributes);
+ if (emscripten_webgl_make_context_current(webgl_ctx) != EMSCRIPTEN_RESULT_SUCCESS) {
+ webgl2_init_failed = true;
+ } else {
+ RasterizerGLES3::make_current();
+ }
}
-
- if (gl_initialization_error) {
- OS::get_singleton()->alert("Your browser does not seem to support WebGL. Please update your browser version.",
+ if (webgl2_init_failed) {
+ OS::get_singleton()->alert("Your browser does not seem to support WebGL2. Please update your browser version.",
"Unable to initialize video driver");
- return ERR_UNAVAILABLE;
}
-
- video_driver_index = p_video_driver;
+ if (!wants_webgl2 || webgl2_init_failed) {
+ RasterizerDummy::make_current();
+ }
+#else
+ RasterizerDummy::make_current();
#endif
// JS Input interface (js/libs/library_godot_input.js)
@@ -737,8 +736,12 @@ DisplayServerJavaScript::DisplayServerJavaScript(const String &p_rendering_drive
}
DisplayServerJavaScript::~DisplayServerJavaScript() {
- //emscripten_webgl_commit_frame();
- //emscripten_webgl_destroy_context(webgl_ctx);
+#ifdef GLES3_ENABLED
+ if (webgl_ctx) {
+ emscripten_webgl_commit_frame();
+ emscripten_webgl_destroy_context(webgl_ctx);
+ }
+#endif
}
bool DisplayServerJavaScript::has_feature(Feature p_feature) const {
@@ -967,5 +970,9 @@ bool DisplayServerJavaScript::get_swap_cancel_ok() {
}
void DisplayServerJavaScript::swap_buffers() {
- //emscripten_webgl_commit_frame();
+#ifdef GLES3_ENABLED
+ if (webgl_ctx) {
+ emscripten_webgl_commit_frame();
+ }
+#endif
}
diff --git a/platform/javascript/display_server_javascript.h b/platform/javascript/display_server_javascript.h
index 1aa600c421..843bb61984 100644
--- a/platform/javascript/display_server_javascript.h
+++ b/platform/javascript/display_server_javascript.h
@@ -51,6 +51,10 @@ private:
};
JSKeyEvent key_event;
+#ifdef GLES3_ENABLED
+ EMSCRIPTEN_WEBGL_CONTEXT_HANDLE webgl_ctx = 0;
+#endif
+
WindowMode window_mode = WINDOW_MODE_WINDOWED;
ObjectID window_attached_instance_id = {};
@@ -67,13 +71,11 @@ private:
CursorShape cursor_shape = CURSOR_ARROW;
Point2i last_click_pos = Point2(-100, -100); // TODO check this again.
uint64_t last_click_ms = 0;
- int last_click_button_index = -1;
+ MouseButton last_click_button_index = MouseButton::NONE;
bool swap_cancel_ok = false;
// utilities
- static void focus_canvas();
- static bool is_canvas_focused();
static void dom2godot_mod(Ref<InputEventWithModifiers> ev, int p_mod);
static const char *godot2dom_cursor(DisplayServer::CursorShape p_shape);
@@ -121,6 +123,7 @@ public:
// mouse
virtual void mouse_set_mode(MouseMode p_mode) override;
virtual MouseMode mouse_get_mode() const override;
+ virtual Point2i mouse_get_position() const override;
// touch
virtual bool screen_is_touchscreen(int p_screen = SCREEN_OF_MAIN_WINDOW) const override;
diff --git a/platform/javascript/dom_keys.inc b/platform/javascript/dom_keys.inc
index 0e62776923..31589f3f40 100644
--- a/platform/javascript/dom_keys.inc
+++ b/platform/javascript/dom_keys.inc
@@ -34,7 +34,7 @@
Key dom_code2godot_scancode(EM_UTF8 const p_code[32], EM_UTF8 const p_key[32], bool p_physical) {
#define DOM2GODOT(p_str, p_godot_code) \
if (memcmp((const void *)p_str, (void *)p_code, strlen(p_str) + 1) == 0) { \
- return KEY_##p_godot_code; \
+ return Key::p_godot_code; \
}
// Numpad section.
@@ -105,16 +105,16 @@ Key dom_code2godot_scancode(EM_UTF8 const p_code[32], EM_UTF8 const p_key[32], b
DOM2GODOT("BracketLeft", BRACKETLEFT);
DOM2GODOT("BracketRight", BRACKETRIGHT);
DOM2GODOT("Comma", COMMA);
- DOM2GODOT("Digit0", 0);
- DOM2GODOT("Digit1", 1);
- DOM2GODOT("Digit2", 2);
- DOM2GODOT("Digit3", 3);
- DOM2GODOT("Digit4", 4);
- DOM2GODOT("Digit5", 5);
- DOM2GODOT("Digit6", 6);
- DOM2GODOT("Digit7", 7);
- DOM2GODOT("Digit8", 8);
- DOM2GODOT("Digit9", 9);
+ DOM2GODOT("Digit0", KEY_0);
+ DOM2GODOT("Digit1", KEY_1);
+ DOM2GODOT("Digit2", KEY_2);
+ DOM2GODOT("Digit3", KEY_3);
+ DOM2GODOT("Digit4", KEY_4);
+ DOM2GODOT("Digit5", KEY_5);
+ DOM2GODOT("Digit6", KEY_6);
+ DOM2GODOT("Digit7", KEY_7);
+ DOM2GODOT("Digit8", KEY_8);
+ DOM2GODOT("Digit9", KEY_9);
DOM2GODOT("Equal", EQUAL);
DOM2GODOT("IntlBackslash", BACKSLASH);
//DOM2GODOT("IntlRo", UNKNOWN);
@@ -170,7 +170,7 @@ Key dom_code2godot_scancode(EM_UTF8 const p_code[32], EM_UTF8 const p_key[32], b
DOM2GODOT("Tab", TAB);
// ControlPad section.
- DOM2GODOT("Delete", DELETE);
+ DOM2GODOT("Delete", KEY_DELETE);
DOM2GODOT("End", END);
DOM2GODOT("Help", HELP);
DOM2GODOT("Home", HOME);
@@ -227,6 +227,6 @@ Key dom_code2godot_scancode(EM_UTF8 const p_code[32], EM_UTF8 const p_key[32], b
DOM2GODOT("AudioVolumeMute", VOLUMEMUTE);
DOM2GODOT("AudioVolumeUp", VOLUMEUP);
//DOM2GODOT("WakeUp", UNKNOWN);
- return KEY_UNKNOWN;
+ return Key::UNKNOWN;
#undef DOM2GODOT
}
diff --git a/platform/javascript/export/export_plugin.cpp b/platform/javascript/export/export_plugin.cpp
index b4f93b9b44..018dd3b664 100644
--- a/platform/javascript/export/export_plugin.cpp
+++ b/platform/javascript/export/export_plugin.cpp
@@ -300,9 +300,9 @@ void EditorExportPlatformJavaScript::get_preset_features(const Ref<EditorExportP
if (p_preset->get("vram_texture_compression/for_mobile")) {
String driver = ProjectSettings::get_singleton()->get("rendering/driver/driver_name");
- if (driver == "OpenGL3") {
+ if (driver == "opengl3") {
r_features->push_back("etc");
- } else if (driver == "Vulkan") {
+ } else if (driver == "vulkan") {
// FIXME: Review if this is correct.
r_features->push_back("etc2");
}
diff --git a/platform/javascript/js/libs/library_godot_input.js b/platform/javascript/js/libs/library_godot_input.js
index 587c320f35..d85d0d5335 100644
--- a/platform/javascript/js/libs/library_godot_input.js
+++ b/platform/javascript/js/libs/library_godot_input.js
@@ -104,10 +104,14 @@ const GodotInputGamepads = {
}
}
GodotEventListeners.add(window, 'gamepadconnected', function (evt) {
- add(evt.gamepad);
+ if (evt.gamepad) {
+ add(evt.gamepad);
+ }
}, false);
GodotEventListeners.add(window, 'gamepaddisconnected', function (evt) {
- onchange(evt.gamepad.index, 0);
+ if (evt.gamepad) {
+ onchange(evt.gamepad.index, 0);
+ }
}, false);
},
@@ -389,6 +393,9 @@ const GodotInput = {
const rect = canvas.getBoundingClientRect();
const pos = GodotInput.computePosition(evt, rect);
const modifiers = GodotInput.getModifiers(evt);
+ if (p_pressed && document.activeElement !== GodotConfig.canvas) {
+ GodotConfig.canvas.focus();
+ }
if (func(p_pressed, evt.button, pos[0], pos[1], modifiers)) {
evt.preventDefault();
}
@@ -405,6 +412,9 @@ const GodotInput = {
const func = GodotRuntime.get_func(callback);
const canvas = GodotConfig.canvas;
function touch_cb(type, evt) {
+ if (type === 0 && document.activeElement !== GodotConfig.canvas) {
+ GodotConfig.canvas.focus();
+ }
const rect = canvas.getBoundingClientRect();
const touches = evt.changedTouches;
for (let i = 0; i < touches.length; i++) {
diff --git a/platform/javascript/os_javascript.cpp b/platform/javascript/os_javascript.cpp
index 4431bd5f1b..5da9a96a90 100644
--- a/platform/javascript/os_javascript.cpp
+++ b/platform/javascript/os_javascript.cpp
@@ -36,7 +36,7 @@
#include "main/main.h"
#include "platform/javascript/display_server_javascript.h"
-#include "modules/modules_enabled.gen.h"
+#include "modules/modules_enabled.gen.h" // For websocket.
#ifdef MODULE_WEBSOCKET_ENABLED
#include "modules/websocket/remote_debugger_peer_websocket.h"
#endif
diff --git a/platform/javascript/os_javascript.h b/platform/javascript/os_javascript.h
index d053082d92..fbab95d33b 100644
--- a/platform/javascript/os_javascript.h
+++ b/platform/javascript/os_javascript.h
@@ -75,6 +75,7 @@ public:
Error kill(const ProcessID &p_pid) override;
int get_process_id() const override;
int get_processor_count() const override;
+ int get_default_thread_pool_size() const override { return 1; }
String get_executable_path() const override;
Error shell_open(String p_uri) override;
@@ -89,6 +90,7 @@ public:
String get_user_data_dir() const override;
bool is_userfs_persistent() const override;
+ bool is_single_window() const override { return true; }
void alert(const String &p_alert, const String &p_title = "ALERT!") override;
diff --git a/platform/linuxbsd/crash_handler_linuxbsd.cpp b/platform/linuxbsd/crash_handler_linuxbsd.cpp
index 0e98af71fa..9b24b24cb4 100644
--- a/platform/linuxbsd/crash_handler_linuxbsd.cpp
+++ b/platform/linuxbsd/crash_handler_linuxbsd.cpp
@@ -115,7 +115,7 @@ static void handle_crash(int sig) {
int ret;
Error err = OS::get_singleton()->execute(String("addr2line"), args, &output, &ret);
if (err == OK) {
- output.erase(output.length() - 1, 1);
+ output = output.substr(0, output.length() - 1);
}
fprintf(stderr, "[%ld] %s (%s)\n", (long int)i, fname, output.utf8().get_data());
diff --git a/platform/linuxbsd/detect.py b/platform/linuxbsd/detect.py
index a9e8fb64c3..07e16a982b 100644
--- a/platform/linuxbsd/detect.py
+++ b/platform/linuxbsd/detect.py
@@ -119,8 +119,16 @@ def configure(env):
if env["bits"] == "default":
env["bits"] = "64" if is64 else "32"
- if env["arch"] == "" and platform.machine() == "riscv64":
- env["arch"] = "rv64"
+ machines = {
+ "riscv64": "rv64",
+ "ppc64le": "ppc64",
+ "ppc64": "ppc64",
+ "ppcle": "ppc",
+ "ppc": "ppc",
+ }
+
+ if env["arch"] == "" and platform.machine() in machines:
+ env["arch"] = machines[platform.machine()]
if env["arch"] == "rv64":
# G = General-purpose extensions, C = Compression extension (very common).
diff --git a/platform/linuxbsd/display_server_x11.cpp b/platform/linuxbsd/display_server_x11.cpp
index d00a5794ca..74ec8b652f 100644
--- a/platform/linuxbsd/display_server_x11.cpp
+++ b/platform/linuxbsd/display_server_x11.cpp
@@ -286,7 +286,7 @@ void DisplayServerX11::_flush_mouse_motion() {
XIDeviceEvent *event_data = (XIDeviceEvent *)event.xcookie.data;
if (event_data->evtype == XI_RawMotion) {
XFreeEventData(x11_display, &event.xcookie);
- polled_events.remove(event_index--);
+ polled_events.remove_at(event_index--);
continue;
}
XFreeEventData(x11_display, &event.xcookie);
@@ -733,6 +733,16 @@ Size2i DisplayServerX11::screen_get_size(int p_screen) const {
return _screen_get_rect(p_screen).size;
}
+bool g_bad_window = false;
+int bad_window_error_handler(Display *display, XErrorEvent *error) {
+ if (error->error_code == BadWindow) {
+ g_bad_window = true;
+ } else {
+ ERR_PRINT("Unhandled XServer error code: " + itos(error->error_code));
+ }
+ return 0;
+}
+
Rect2i DisplayServerX11::screen_get_usable_rect(int p_screen) const {
_THREAD_SAFE_METHOD_
@@ -740,21 +750,276 @@ Rect2i DisplayServerX11::screen_get_usable_rect(int p_screen) const {
p_screen = window_get_current_screen();
}
- // Using Xinerama Extension
- int event_base, error_base;
- const Bool ext_okay = XineramaQueryExtension(x11_display, &event_base, &error_base);
- if (!ext_okay) {
- return Rect2i(0, 0, 0, 0);
+ int screen_count = get_screen_count();
+
+ // Check if screen is valid.
+ ERR_FAIL_INDEX_V(p_screen, screen_count, Rect2i(0, 0, 0, 0));
+
+ bool is_multiscreen = screen_count > 1;
+
+ // Use full monitor size as fallback.
+ Rect2i rect = _screen_get_rect(p_screen);
+
+ // There's generally only one screen reported by xlib even in multi-screen setup,
+ // in this case it's just one virtual screen composed of all physical monitors.
+ int x11_screen_count = ScreenCount(x11_display);
+ Window x11_window = RootWindow(x11_display, p_screen < x11_screen_count ? p_screen : 0);
+
+ Atom type;
+ int format = 0;
+ unsigned long remaining = 0;
+
+ // Find active desktop for the root window.
+ unsigned int desktop_index = 0;
+ Atom desktop_prop = XInternAtom(x11_display, "_NET_CURRENT_DESKTOP", True);
+ if (desktop_prop != None) {
+ unsigned long desktop_len = 0;
+ unsigned char *desktop_data = nullptr;
+ if (XGetWindowProperty(x11_display, x11_window, desktop_prop, 0, LONG_MAX, False, XA_CARDINAL, &type, &format, &desktop_len, &remaining, &desktop_data) == Success) {
+ if ((format == 32) && (desktop_len > 0) && desktop_data) {
+ desktop_index = (unsigned int)desktop_data[0];
+ }
+ if (desktop_data) {
+ XFree(desktop_data);
+ }
+ }
}
- int count;
- XineramaScreenInfo *xsi = XineramaQueryScreens(x11_display, &count);
+ bool use_simple_method = true;
+
+ // First check for GTK work area, which is more accurate for multi-screen setup.
+ if (is_multiscreen) {
+ // Use already calculated work area when available.
+ Atom gtk_workareas_prop = XInternAtom(x11_display, "_GTK_WORKAREAS", False);
+ if (gtk_workareas_prop != None) {
+ char gtk_workarea_prop_name[32];
+ snprintf(gtk_workarea_prop_name, 32, "_GTK_WORKAREAS_D%d", desktop_index);
+ Atom gtk_workarea_prop = XInternAtom(x11_display, gtk_workarea_prop_name, True);
+ if (gtk_workarea_prop != None) {
+ unsigned long workarea_len = 0;
+ unsigned char *workarea_data = nullptr;
+ if (XGetWindowProperty(x11_display, x11_window, gtk_workarea_prop, 0, LONG_MAX, False, XA_CARDINAL, &type, &format, &workarea_len, &remaining, &workarea_data) == Success) {
+ if ((format == 32) && (workarea_len % 4 == 0) && workarea_data) {
+ long *rect_data = (long *)workarea_data;
+ for (uint32_t data_offset = 0; data_offset < workarea_len; data_offset += 4) {
+ Rect2i workarea_rect;
+ workarea_rect.position.x = rect_data[data_offset];
+ workarea_rect.position.y = rect_data[data_offset + 1];
+ workarea_rect.size.x = rect_data[data_offset + 2];
+ workarea_rect.size.y = rect_data[data_offset + 3];
+
+ // Intersect with actual monitor size to find the correct area,
+ // because areas are not in the same order as screens from Xinerama.
+ if (rect.grow(-1).intersects(workarea_rect)) {
+ rect = rect.intersection(workarea_rect);
+ XFree(workarea_data);
+ return rect;
+ }
+ }
+ }
+ }
+ if (workarea_data) {
+ XFree(workarea_data);
+ }
+ }
+ }
- // Check if screen is valid
- ERR_FAIL_INDEX_V(p_screen, count, Rect2i(0, 0, 0, 0));
+ // Fallback to calculating work area by hand from struts.
+ Atom client_list_prop = XInternAtom(x11_display, "_NET_CLIENT_LIST", True);
+ if (client_list_prop != None) {
+ unsigned long clients_len = 0;
+ unsigned char *clients_data = nullptr;
+ if (XGetWindowProperty(x11_display, x11_window, client_list_prop, 0, LONG_MAX, False, XA_WINDOW, &type, &format, &clients_len, &remaining, &clients_data) == Success) {
+ if ((format == 32) && (clients_len > 0) && clients_data) {
+ Window *windows_data = (Window *)clients_data;
+
+ Rect2i desktop_rect;
+ bool desktop_valid = false;
+
+ // Get full desktop size.
+ {
+ Atom desktop_geometry_prop = XInternAtom(x11_display, "_NET_DESKTOP_GEOMETRY", True);
+ if (desktop_geometry_prop != None) {
+ unsigned long geom_len = 0;
+ unsigned char *geom_data = nullptr;
+ if (XGetWindowProperty(x11_display, x11_window, desktop_geometry_prop, 0, LONG_MAX, False, XA_CARDINAL, &type, &format, &geom_len, &remaining, &geom_data) == Success) {
+ if ((format == 32) && (geom_len >= 2) && geom_data) {
+ desktop_valid = true;
+ long *size_data = (long *)geom_data;
+ desktop_rect.size.x = size_data[0];
+ desktop_rect.size.y = size_data[1];
+ }
+ }
+ if (geom_data) {
+ XFree(geom_data);
+ }
+ }
+ }
+
+ // Get full desktop position.
+ if (desktop_valid) {
+ Atom desktop_viewport_prop = XInternAtom(x11_display, "_NET_DESKTOP_VIEWPORT", True);
+ if (desktop_viewport_prop != None) {
+ unsigned long viewport_len = 0;
+ unsigned char *viewport_data = nullptr;
+ if (XGetWindowProperty(x11_display, x11_window, desktop_viewport_prop, 0, LONG_MAX, False, XA_CARDINAL, &type, &format, &viewport_len, &remaining, &viewport_data) == Success) {
+ if ((format == 32) && (viewport_len >= 2) && viewport_data) {
+ desktop_valid = true;
+ long *pos_data = (long *)viewport_data;
+ desktop_rect.position.x = pos_data[0];
+ desktop_rect.position.y = pos_data[1];
+ }
+ }
+ if (viewport_data) {
+ XFree(viewport_data);
+ }
+ }
+ }
+
+ if (desktop_valid) {
+ use_simple_method = false;
+
+ // Handle bad window errors silently because there's no other way to check
+ // that one of the windows has been destroyed in the meantime.
+ int (*oldHandler)(Display *, XErrorEvent *) = XSetErrorHandler(&bad_window_error_handler);
+
+ for (unsigned long win_index = 0; win_index < clients_len; ++win_index) {
+ g_bad_window = false;
+
+ // Remove strut size from desktop size to get a more accurate result.
+ bool strut_found = false;
+ unsigned long strut_len = 0;
+ unsigned char *strut_data = nullptr;
+ Atom strut_partial_prop = XInternAtom(x11_display, "_NET_WM_STRUT_PARTIAL", True);
+ if (strut_partial_prop != None) {
+ if (XGetWindowProperty(x11_display, windows_data[win_index], strut_partial_prop, 0, LONG_MAX, False, XA_CARDINAL, &type, &format, &strut_len, &remaining, &strut_data) == Success) {
+ strut_found = true;
+ }
+ }
+ // Fallback to older strut property.
+ if (!g_bad_window && !strut_found) {
+ Atom strut_prop = XInternAtom(x11_display, "_NET_WM_STRUT", True);
+ if (strut_prop != None) {
+ if (XGetWindowProperty(x11_display, windows_data[win_index], strut_prop, 0, LONG_MAX, False, XA_CARDINAL, &type, &format, &strut_len, &remaining, &strut_data) == Success) {
+ strut_found = true;
+ }
+ }
+ }
+ if (!g_bad_window && strut_found && (format == 32) && (strut_len >= 4) && strut_data) {
+ long *struts = (long *)strut_data;
+
+ long left = struts[0];
+ long right = struts[1];
+ long top = struts[2];
+ long bottom = struts[3];
+
+ long left_start_y, left_end_y, right_start_y, right_end_y;
+ long top_start_x, top_end_x, bottom_start_x, bottom_end_x;
+
+ if (strut_len >= 12) {
+ left_start_y = struts[4];
+ left_end_y = struts[5];
+ right_start_y = struts[6];
+ right_end_y = struts[7];
+ top_start_x = struts[8];
+ top_end_x = struts[9];
+ bottom_start_x = struts[10];
+ bottom_end_x = struts[11];
+ } else {
+ left_start_y = 0;
+ left_end_y = desktop_rect.size.y;
+ right_start_y = 0;
+ right_end_y = desktop_rect.size.y;
+ top_start_x = 0;
+ top_end_x = desktop_rect.size.x;
+ bottom_start_x = 0;
+ bottom_end_x = desktop_rect.size.x;
+ }
+
+ const Point2i &pos = desktop_rect.position;
+ const Size2i &size = desktop_rect.size;
+
+ Rect2i left_rect(pos.x, pos.y + left_start_y, left, left_end_y - left_start_y);
+ if (left_rect.size.x > 0) {
+ Rect2i intersection = rect.intersection(left_rect);
+ if (!intersection.has_no_area() && intersection.size.x < rect.size.x) {
+ rect.position.x = left_rect.size.x;
+ rect.size.x = rect.size.x - intersection.size.x;
+ }
+ }
+
+ Rect2i right_rect(pos.x + size.x - right, pos.y + right_start_y, right, right_end_y - right_start_y);
+ if (right_rect.size.x > 0) {
+ Rect2i intersection = rect.intersection(right_rect);
+ if (!intersection.has_no_area() && right_rect.size.x < rect.size.x) {
+ rect.size.x = intersection.position.x - rect.position.x;
+ }
+ }
+
+ Rect2i top_rect(pos.x + top_start_x, pos.y, top_end_x - top_start_x, top);
+ if (top_rect.size.y > 0) {
+ Rect2i intersection = rect.intersection(top_rect);
+ if (!intersection.has_no_area() && intersection.size.y < rect.size.y) {
+ rect.position.y = top_rect.size.y;
+ rect.size.y = rect.size.y - intersection.size.y;
+ }
+ }
+
+ Rect2i bottom_rect(pos.x + bottom_start_x, pos.y + size.y - bottom, bottom_end_x - bottom_start_x, bottom);
+ if (bottom_rect.size.y > 0) {
+ Rect2i intersection = rect.intersection(bottom_rect);
+ if (!intersection.has_no_area() && right_rect.size.y < rect.size.y) {
+ rect.size.y = intersection.position.y - rect.position.y;
+ }
+ }
+ }
+ if (strut_data) {
+ XFree(strut_data);
+ }
+ }
+
+ // Restore default error handler.
+ XSetErrorHandler(oldHandler);
+ }
+ }
+ }
+ if (clients_data) {
+ XFree(clients_data);
+ }
+ }
+ }
+
+ // Single screen or fallback for multi screen.
+ if (use_simple_method) {
+ // Get desktop available size from the global work area.
+ Atom workarea_prop = XInternAtom(x11_display, "_NET_WORKAREA", True);
+ if (workarea_prop != None) {
+ unsigned long workarea_len = 0;
+ unsigned char *workarea_data = nullptr;
+ if (XGetWindowProperty(x11_display, x11_window, workarea_prop, 0, LONG_MAX, False, XA_CARDINAL, &type, &format, &workarea_len, &remaining, &workarea_data) == Success) {
+ if ((format == 32) && (workarea_len >= ((desktop_index + 1) * 4)) && workarea_data) {
+ long *rect_data = (long *)workarea_data;
+ int data_offset = desktop_index * 4;
+ Rect2i workarea_rect;
+ workarea_rect.position.x = rect_data[data_offset];
+ workarea_rect.position.y = rect_data[data_offset + 1];
+ workarea_rect.size.x = rect_data[data_offset + 2];
+ workarea_rect.size.y = rect_data[data_offset + 3];
+
+ // Intersect with actual monitor size to get a proper approximation in multi-screen setup.
+ if (!is_multiscreen) {
+ rect = workarea_rect;
+ } else if (rect.intersects(workarea_rect)) {
+ rect = rect.intersection(workarea_rect);
+ }
+ }
+ }
+ if (workarea_data) {
+ XFree(workarea_data);
+ }
+ }
+ }
- Rect2i rect = Rect2i(xsi[p_screen].x_org, xsi[p_screen].y_org, xsi[p_screen].width, xsi[p_screen].height);
- XFree(xsi);
return rect;
}
@@ -2143,9 +2408,9 @@ String DisplayServerX11::keyboard_get_layout_name(int p_index) const {
}
Key DisplayServerX11::keyboard_get_keycode_from_physical(Key p_keycode) const {
- unsigned int modifiers = p_keycode & KEY_MODIFIER_MASK;
- unsigned int keycode_no_mod = p_keycode & KEY_CODE_MASK;
- unsigned int xkeycode = KeyMappingX11::get_xlibcode((Key)keycode_no_mod);
+ Key modifiers = p_keycode & KeyModifierMask::MODIFIER_MASK;
+ Key keycode_no_mod = p_keycode & KeyModifierMask::CODE_MASK;
+ unsigned int xkeycode = KeyMappingX11::get_xlibcode(keycode_no_mod);
KeySym xkeysym = XkbKeycodeToKeysym(x11_display, xkeycode, 0, 0);
if (xkeysym >= 'a' && xkeysym <= 'z') {
xkeysym -= ('a' - 'A');
@@ -2154,7 +2419,7 @@ Key DisplayServerX11::keyboard_get_keycode_from_physical(Key p_keycode) const {
Key key = KeyMappingX11::get_keycode(xkeysym);
// If not found, fallback to QWERTY.
// This should match the behavior of the event pump
- if (key == KEY_NONE) {
+ if (key == Key::NONE) {
return p_keycode;
}
return (Key)(key | modifiers);
@@ -2228,12 +2493,12 @@ void DisplayServerX11::_get_key_modifier_state(unsigned int p_x11_state, Ref<Inp
}
MouseButton DisplayServerX11::_get_mouse_button_state(MouseButton p_x11_button, int p_x11_type) {
- MouseButton mask = MouseButton(1 << (p_x11_button - 1));
+ MouseButton mask = mouse_button_to_mask(p_x11_button);
if (p_x11_type == ButtonPress) {
last_button_state |= mask;
} else {
- last_button_state &= MouseButton(~mask);
+ last_button_state &= ~mask;
}
return last_button_state;
@@ -2300,9 +2565,9 @@ void DisplayServerX11::_handle_key_event(WindowID p_window, XKeyEvent *p_event,
if (status == XLookupChars) {
bool keypress = xkeyevent->type == KeyPress;
Key keycode = KeyMappingX11::get_keycode(keysym_keycode);
- unsigned int physical_keycode = KeyMappingX11::get_scancode(xkeyevent->keycode);
+ Key physical_keycode = KeyMappingX11::get_scancode(xkeyevent->keycode);
- if (keycode >= 'a' && keycode <= 'z') {
+ if (keycode >= Key::A + 32 && keycode <= Key::Z + 32) {
keycode -= 'a' - 'A';
}
@@ -2311,11 +2576,11 @@ void DisplayServerX11::_handle_key_event(WindowID p_window, XKeyEvent *p_event,
for (int i = 0; i < tmp.length(); i++) {
Ref<InputEventKey> k;
k.instantiate();
- if (physical_keycode == 0 && keycode == 0 && tmp[i] == 0) {
+ if (physical_keycode == Key::NONE && keycode == Key::NONE && tmp[i] == 0) {
continue;
}
- if (keycode == 0) {
+ if (keycode == Key::NONE) {
keycode = (Key)physical_keycode;
}
@@ -2332,10 +2597,10 @@ void DisplayServerX11::_handle_key_event(WindowID p_window, XKeyEvent *p_event,
k->set_echo(false);
- if (k->get_keycode() == KEY_BACKTAB) {
+ if (k->get_keycode() == Key::BACKTAB) {
//make it consistent across platforms.
- k->set_keycode(KEY_TAB);
- k->set_physical_keycode(KEY_TAB);
+ k->set_keycode(Key::TAB);
+ k->set_physical_keycode(Key::TAB);
k->set_shift_pressed(true);
}
@@ -2364,7 +2629,7 @@ void DisplayServerX11::_handle_key_event(WindowID p_window, XKeyEvent *p_event,
// keysym, so it works in all platforms the same.
Key keycode = KeyMappingX11::get_keycode(keysym_keycode);
- unsigned int physical_keycode = KeyMappingX11::get_scancode(xkeyevent->keycode);
+ Key physical_keycode = KeyMappingX11::get_scancode(xkeyevent->keycode);
/* Phase 3, obtain a unicode character from the keysym */
@@ -2384,11 +2649,11 @@ void DisplayServerX11::_handle_key_event(WindowID p_window, XKeyEvent *p_event,
bool keypress = xkeyevent->type == KeyPress;
- if (physical_keycode == 0 && keycode == KEY_NONE && unicode == 0) {
+ if (physical_keycode == Key::NONE && keycode == Key::NONE && unicode == 0) {
return;
}
- if (keycode == KEY_NONE) {
+ if (keycode == Key::NONE) {
keycode = (Key)physical_keycode;
}
@@ -2451,7 +2716,7 @@ void DisplayServerX11::_handle_key_event(WindowID p_window, XKeyEvent *p_event,
k->set_pressed(keypress);
- if (keycode >= 'a' && keycode <= 'z') {
+ if (keycode >= Key::A + 32 && keycode <= Key::Z + 32) {
keycode -= int('a' - 'A');
}
@@ -2460,23 +2725,23 @@ void DisplayServerX11::_handle_key_event(WindowID p_window, XKeyEvent *p_event,
k->set_unicode(unicode);
k->set_echo(p_echo);
- if (k->get_keycode() == KEY_BACKTAB) {
+ if (k->get_keycode() == Key::BACKTAB) {
//make it consistent across platforms.
- k->set_keycode(KEY_TAB);
- k->set_physical_keycode(KEY_TAB);
+ k->set_keycode(Key::TAB);
+ k->set_physical_keycode(Key::TAB);
k->set_shift_pressed(true);
}
//don't set mod state if modifier keys are released by themselves
//else event.is_action() will not work correctly here
if (!k->is_pressed()) {
- if (k->get_keycode() == KEY_SHIFT) {
+ if (k->get_keycode() == Key::SHIFT) {
k->set_shift_pressed(false);
- } else if (k->get_keycode() == KEY_CTRL) {
+ } else if (k->get_keycode() == Key::CTRL) {
k->set_ctrl_pressed(false);
- } else if (k->get_keycode() == KEY_ALT) {
+ } else if (k->get_keycode() == Key::ALT) {
k->set_alt_pressed(false);
- } else if (k->get_keycode() == KEY_META) {
+ } else if (k->get_keycode() == Key::META) {
k->set_meta_pressed(false);
}
}
@@ -3204,10 +3469,10 @@ void DisplayServerX11::process_events() {
mb->set_window_id(window_id);
_get_key_modifier_state(event.xbutton.state, mb);
mb->set_button_index((MouseButton)event.xbutton.button);
- if (mb->get_button_index() == MOUSE_BUTTON_RIGHT) {
- mb->set_button_index(MOUSE_BUTTON_MIDDLE);
- } else if (mb->get_button_index() == MOUSE_BUTTON_MIDDLE) {
- mb->set_button_index(MOUSE_BUTTON_RIGHT);
+ if (mb->get_button_index() == MouseButton::RIGHT) {
+ mb->set_button_index(MouseButton::MIDDLE);
+ } else if (mb->get_button_index() == MouseButton::MIDDLE) {
+ mb->set_button_index(MouseButton::RIGHT);
}
mb->set_button_mask(_get_mouse_button_state(mb->get_button_index(), event.xbutton.type));
mb->set_position(Vector2(event.xbutton.x, event.xbutton.y));
@@ -3233,11 +3498,11 @@ void DisplayServerX11::process_events() {
if (diff < 400 && Vector2(last_click_pos).distance_to(Vector2(event.xbutton.x, event.xbutton.y)) < 5) {
last_click_ms = 0;
last_click_pos = Point2i(-100, -100);
- last_click_button_index = -1;
+ last_click_button_index = MouseButton::NONE;
mb->set_double_click(true);
}
- } else if (mb->get_button_index() < 4 || mb->get_button_index() > 7) {
+ } else if (mb->get_button_index() < MouseButton::WHEEL_UP || mb->get_button_index() > MouseButton::WHEEL_RIGHT) {
last_click_button_index = mb->get_button_index();
}
@@ -3370,12 +3635,12 @@ void DisplayServerX11::process_events() {
if (xi.pressure_supported) {
mm->set_pressure(xi.pressure);
} else {
- mm->set_pressure((mouse_get_button_state() & MOUSE_BUTTON_MASK_LEFT) ? 1.0f : 0.0f);
+ mm->set_pressure(bool(mouse_get_button_state() & MouseButton::MASK_LEFT) ? 1.0f : 0.0f);
}
mm->set_tilt(xi.tilt);
_get_key_modifier_state(event.xmotion.state, mm);
- mm->set_button_mask(mouse_get_button_state());
+ mm->set_button_mask((MouseButton)mouse_get_button_state());
mm->set_position(pos);
mm->set_global_position(pos);
Input::get_singleton()->set_mouse_position(pos);
@@ -3420,11 +3685,18 @@ void DisplayServerX11::process_events() {
} break;
case KeyPress:
case KeyRelease: {
+#ifdef DISPLAY_SERVER_X11_DEBUG_LOGS_ENABLED
+ if (event.type == KeyPress) {
+ DEBUG_LOG_X11("[%u] KeyPress window=%lu (%u), keycode=%u, time=%lu \n", frame, event.xkey.window, window_id, event.xkey.keycode, event.xkey.time);
+ } else {
+ DEBUG_LOG_X11("[%u] KeyRelease window=%lu (%u), keycode=%u, time=%lu \n", frame, event.xkey.window, window_id, event.xkey.keycode, event.xkey.time);
+ }
+#endif
last_timestamp = event.xkey.time;
// key event is a little complex, so
// it will be handled in its own function.
- _handle_key_event(window_id, (XKeyEvent *)&event, events, event_index);
+ _handle_key_event(window_id, &event.xkey, events, event_index);
} break;
case SelectionNotify:
@@ -3979,7 +4251,7 @@ DisplayServerX11::DisplayServerX11(const String &p_rendering_driver, WindowMode
xmbstring = nullptr;
last_click_ms = 0;
- last_click_button_index = -1;
+ last_click_button_index = MouseButton::NONE;
last_click_pos = Point2i(-100, -100);
last_timestamp = 0;
diff --git a/platform/linuxbsd/display_server_x11.h b/platform/linuxbsd/display_server_x11.h
index 869ff386c5..3587d587d6 100644
--- a/platform/linuxbsd/display_server_x11.h
+++ b/platform/linuxbsd/display_server_x11.h
@@ -173,8 +173,8 @@ class DisplayServerX11 : public DisplayServer {
bool last_mouse_pos_valid;
Point2i last_click_pos;
uint64_t last_click_ms;
- int last_click_button_index;
- MouseButton last_button_state = MOUSE_BUTTON_NONE;
+ MouseButton last_click_button_index = MouseButton::NONE;
+ MouseButton last_button_state = MouseButton::NONE;
bool app_focused = false;
uint64_t time_since_no_focus = 0;
diff --git a/platform/linuxbsd/joypad_linux.cpp b/platform/linuxbsd/joypad_linux.cpp
index 8b6dbc4c20..55cc21cc6c 100644
--- a/platform/linuxbsd/joypad_linux.cpp
+++ b/platform/linuxbsd/joypad_linux.cpp
@@ -59,7 +59,7 @@ JoypadLinux::Joypad::~Joypad() {
}
void JoypadLinux::Joypad::reset() {
- dpad = 0;
+ dpad = HatMask::CENTER;
fd = -1;
Input::JoyAxisValue jx;
@@ -253,7 +253,7 @@ void JoypadLinux::close_joypad(int p_id) {
if (joy.fd != -1) {
close(joy.fd);
joy.fd = -1;
- attached_devices.remove(attached_devices.find(joy.devpath));
+ attached_devices.remove_at(attached_devices.find(joy.devpath));
input->joy_connection_changed(p_id, false, "");
};
}
@@ -484,12 +484,12 @@ void JoypadLinux::process_joypads() {
case ABS_HAT0X:
if (ev.value != 0) {
if (ev.value < 0) {
- joy->dpad = (HatMask)((joy->dpad | HatMask::HAT_MASK_LEFT) & ~HatMask::HAT_MASK_RIGHT);
+ joy->dpad = (HatMask)((joy->dpad | HatMask::LEFT) & ~HatMask::RIGHT);
} else {
- joy->dpad = (HatMask)((joy->dpad | HatMask::HAT_MASK_RIGHT) & ~HatMask::HAT_MASK_LEFT);
+ joy->dpad = (HatMask)((joy->dpad | HatMask::RIGHT) & ~HatMask::LEFT);
}
} else {
- joy->dpad &= ~(HatMask::HAT_MASK_LEFT | HatMask::HAT_MASK_RIGHT);
+ joy->dpad &= ~(HatMask::LEFT | HatMask::RIGHT);
}
input->joy_hat(i, (HatMask)joy->dpad);
@@ -498,12 +498,12 @@ void JoypadLinux::process_joypads() {
case ABS_HAT0Y:
if (ev.value != 0) {
if (ev.value < 0) {
- joy->dpad = (HatMask)((joy->dpad | HatMask::HAT_MASK_UP) & ~HatMask::HAT_MASK_DOWN);
+ joy->dpad = (HatMask)((joy->dpad | HatMask::UP) & ~HatMask::DOWN);
} else {
- joy->dpad = (HatMask)((joy->dpad | HatMask::HAT_MASK_DOWN) & ~HatMask::HAT_MASK_UP);
+ joy->dpad = (HatMask)((joy->dpad | HatMask::DOWN) & ~HatMask::UP);
}
} else {
- joy->dpad &= ~(HatMask::HAT_MASK_UP | HatMask::HAT_MASK_DOWN);
+ joy->dpad &= ~(HatMask::UP | HatMask::DOWN);
}
input->joy_hat(i, (HatMask)joy->dpad);
diff --git a/platform/linuxbsd/joypad_linux.h b/platform/linuxbsd/joypad_linux.h
index 177d7a51ce..12b9046d64 100644
--- a/platform/linuxbsd/joypad_linux.h
+++ b/platform/linuxbsd/joypad_linux.h
@@ -56,7 +56,7 @@ private:
Input::JoyAxisValue curr_axis[MAX_ABS];
int key_map[MAX_KEY];
int abs_map[MAX_ABS];
- int dpad = 0;
+ HatMask dpad = HatMask::CENTER;
int fd = -1;
String devpath;
diff --git a/platform/linuxbsd/key_mapping_x11.cpp b/platform/linuxbsd/key_mapping_x11.cpp
index 829feda40a..16c2392859 100644
--- a/platform/linuxbsd/key_mapping_x11.cpp
+++ b/platform/linuxbsd/key_mapping_x11.cpp
@@ -40,266 +40,266 @@ struct _XTranslatePair {
static _XTranslatePair _xkeysym_to_keycode[] = {
// misc keys
- { XK_Escape, KEY_ESCAPE },
- { XK_Tab, KEY_TAB },
- { XK_ISO_Left_Tab, KEY_BACKTAB },
- { XK_BackSpace, KEY_BACKSPACE },
- { XK_Return, KEY_ENTER },
- { XK_Insert, KEY_INSERT },
- { XK_Delete, KEY_DELETE },
- { XK_Clear, KEY_DELETE },
- { XK_Pause, KEY_PAUSE },
- { XK_Print, KEY_PRINT },
- { XK_Home, KEY_HOME },
- { XK_End, KEY_END },
- { XK_Left, KEY_LEFT },
- { XK_Up, KEY_UP },
- { XK_Right, KEY_RIGHT },
- { XK_Down, KEY_DOWN },
- { XK_Prior, KEY_PAGEUP },
- { XK_Next, KEY_PAGEDOWN },
- { XK_Shift_L, KEY_SHIFT },
- { XK_Shift_R, KEY_SHIFT },
- { XK_Shift_Lock, KEY_SHIFT },
- { XK_Control_L, KEY_CTRL },
- { XK_Control_R, KEY_CTRL },
- { XK_Meta_L, KEY_META },
- { XK_Meta_R, KEY_META },
- { XK_Alt_L, KEY_ALT },
- { XK_Alt_R, KEY_ALT },
- { XK_Caps_Lock, KEY_CAPSLOCK },
- { XK_Num_Lock, KEY_NUMLOCK },
- { XK_Scroll_Lock, KEY_SCROLLLOCK },
- { XK_Super_L, KEY_SUPER_L },
- { XK_Super_R, KEY_SUPER_R },
- { XK_Menu, KEY_MENU },
- { XK_Hyper_L, KEY_HYPER_L },
- { XK_Hyper_R, KEY_HYPER_R },
- { XK_Help, KEY_HELP },
- { XK_KP_Space, KEY_SPACE },
- { XK_KP_Tab, KEY_TAB },
- { XK_KP_Enter, KEY_KP_ENTER },
- { XK_Home, KEY_HOME },
- { XK_Left, KEY_LEFT },
- { XK_Up, KEY_UP },
- { XK_Right, KEY_RIGHT },
- { XK_Down, KEY_DOWN },
- { XK_Prior, KEY_PAGEUP },
- { XK_Next, KEY_PAGEDOWN },
- { XK_End, KEY_END },
- { XK_Begin, KEY_CLEAR },
- { XK_Insert, KEY_INSERT },
- { XK_Delete, KEY_DELETE },
- //{ XK_KP_Equal, KEY_EQUAL },
- //{ XK_KP_Separator, KEY_COMMA },
- { XK_KP_Decimal, KEY_KP_PERIOD },
- { XK_KP_Delete, KEY_KP_PERIOD },
- { XK_KP_Multiply, KEY_KP_MULTIPLY },
- { XK_KP_Divide, KEY_KP_DIVIDE },
- { XK_KP_Subtract, KEY_KP_SUBTRACT },
- { XK_KP_Add, KEY_KP_ADD },
- { XK_KP_0, KEY_KP_0 },
- { XK_KP_1, KEY_KP_1 },
- { XK_KP_2, KEY_KP_2 },
- { XK_KP_3, KEY_KP_3 },
- { XK_KP_4, KEY_KP_4 },
- { XK_KP_5, KEY_KP_5 },
- { XK_KP_6, KEY_KP_6 },
- { XK_KP_7, KEY_KP_7 },
- { XK_KP_8, KEY_KP_8 },
- { XK_KP_9, KEY_KP_9 },
+ { XK_Escape, Key::ESCAPE },
+ { XK_Tab, Key::TAB },
+ { XK_ISO_Left_Tab, Key::BACKTAB },
+ { XK_BackSpace, Key::BACKSPACE },
+ { XK_Return, Key::ENTER },
+ { XK_Insert, Key::INSERT },
+ { XK_Delete, Key::KEY_DELETE },
+ { XK_Clear, Key::KEY_DELETE },
+ { XK_Pause, Key::PAUSE },
+ { XK_Print, Key::PRINT },
+ { XK_Home, Key::HOME },
+ { XK_End, Key::END },
+ { XK_Left, Key::LEFT },
+ { XK_Up, Key::UP },
+ { XK_Right, Key::RIGHT },
+ { XK_Down, Key::DOWN },
+ { XK_Prior, Key::PAGEUP },
+ { XK_Next, Key::PAGEDOWN },
+ { XK_Shift_L, Key::SHIFT },
+ { XK_Shift_R, Key::SHIFT },
+ { XK_Shift_Lock, Key::SHIFT },
+ { XK_Control_L, Key::CTRL },
+ { XK_Control_R, Key::CTRL },
+ { XK_Meta_L, Key::META },
+ { XK_Meta_R, Key::META },
+ { XK_Alt_L, Key::ALT },
+ { XK_Alt_R, Key::ALT },
+ { XK_Caps_Lock, Key::CAPSLOCK },
+ { XK_Num_Lock, Key::NUMLOCK },
+ { XK_Scroll_Lock, Key::SCROLLLOCK },
+ { XK_Super_L, Key::SUPER_L },
+ { XK_Super_R, Key::SUPER_R },
+ { XK_Menu, Key::MENU },
+ { XK_Hyper_L, Key::HYPER_L },
+ { XK_Hyper_R, Key::HYPER_R },
+ { XK_Help, Key::HELP },
+ { XK_KP_Space, Key::SPACE },
+ { XK_KP_Tab, Key::TAB },
+ { XK_KP_Enter, Key::KP_ENTER },
+ { XK_Home, Key::HOME },
+ { XK_Left, Key::LEFT },
+ { XK_Up, Key::UP },
+ { XK_Right, Key::RIGHT },
+ { XK_Down, Key::DOWN },
+ { XK_Prior, Key::PAGEUP },
+ { XK_Next, Key::PAGEDOWN },
+ { XK_End, Key::END },
+ { XK_Begin, Key::CLEAR },
+ { XK_Insert, Key::INSERT },
+ { XK_Delete, Key::KEY_DELETE },
+ //{ XK_KP_Equal, Key::EQUAL },
+ //{ XK_KP_Separator, Key::COMMA },
+ { XK_KP_Decimal, Key::KP_PERIOD },
+ { XK_KP_Delete, Key::KP_PERIOD },
+ { XK_KP_Multiply, Key::KP_MULTIPLY },
+ { XK_KP_Divide, Key::KP_DIVIDE },
+ { XK_KP_Subtract, Key::KP_SUBTRACT },
+ { XK_KP_Add, Key::KP_ADD },
+ { XK_KP_0, Key::KP_0 },
+ { XK_KP_1, Key::KP_1 },
+ { XK_KP_2, Key::KP_2 },
+ { XK_KP_3, Key::KP_3 },
+ { XK_KP_4, Key::KP_4 },
+ { XK_KP_5, Key::KP_5 },
+ { XK_KP_6, Key::KP_6 },
+ { XK_KP_7, Key::KP_7 },
+ { XK_KP_8, Key::KP_8 },
+ { XK_KP_9, Key::KP_9 },
// same but with numlock
- { XK_KP_Insert, KEY_KP_0 },
- { XK_KP_End, KEY_KP_1 },
- { XK_KP_Down, KEY_KP_2 },
- { XK_KP_Page_Down, KEY_KP_3 },
- { XK_KP_Left, KEY_KP_4 },
- { XK_KP_Begin, KEY_KP_5 },
- { XK_KP_Right, KEY_KP_6 },
- { XK_KP_Home, KEY_KP_7 },
- { XK_KP_Up, KEY_KP_8 },
- { XK_KP_Page_Up, KEY_KP_9 },
- { XK_F1, KEY_F1 },
- { XK_F2, KEY_F2 },
- { XK_F3, KEY_F3 },
- { XK_F4, KEY_F4 },
- { XK_F5, KEY_F5 },
- { XK_F6, KEY_F6 },
- { XK_F7, KEY_F7 },
- { XK_F8, KEY_F8 },
- { XK_F9, KEY_F9 },
- { XK_F10, KEY_F10 },
- { XK_F11, KEY_F11 },
- { XK_F12, KEY_F12 },
- { XK_F13, KEY_F13 },
- { XK_F14, KEY_F14 },
- { XK_F15, KEY_F15 },
- { XK_F16, KEY_F16 },
+ { XK_KP_Insert, Key::KP_0 },
+ { XK_KP_End, Key::KP_1 },
+ { XK_KP_Down, Key::KP_2 },
+ { XK_KP_Page_Down, Key::KP_3 },
+ { XK_KP_Left, Key::KP_4 },
+ { XK_KP_Begin, Key::KP_5 },
+ { XK_KP_Right, Key::KP_6 },
+ { XK_KP_Home, Key::KP_7 },
+ { XK_KP_Up, Key::KP_8 },
+ { XK_KP_Page_Up, Key::KP_9 },
+ { XK_F1, Key::F1 },
+ { XK_F2, Key::F2 },
+ { XK_F3, Key::F3 },
+ { XK_F4, Key::F4 },
+ { XK_F5, Key::F5 },
+ { XK_F6, Key::F6 },
+ { XK_F7, Key::F7 },
+ { XK_F8, Key::F8 },
+ { XK_F9, Key::F9 },
+ { XK_F10, Key::F10 },
+ { XK_F11, Key::F11 },
+ { XK_F12, Key::F12 },
+ { XK_F13, Key::F13 },
+ { XK_F14, Key::F14 },
+ { XK_F15, Key::F15 },
+ { XK_F16, Key::F16 },
// media keys
- { XF86XK_Back, KEY_BACK },
- { XF86XK_Forward, KEY_FORWARD },
- { XF86XK_Stop, KEY_STOP },
- { XF86XK_Refresh, KEY_REFRESH },
- { XF86XK_Favorites, KEY_FAVORITES },
- { XF86XK_AudioMedia, KEY_LAUNCHMEDIA },
- { XF86XK_OpenURL, KEY_OPENURL },
- { XF86XK_HomePage, KEY_HOMEPAGE },
- { XF86XK_Search, KEY_SEARCH },
- { XF86XK_AudioLowerVolume, KEY_VOLUMEDOWN },
- { XF86XK_AudioMute, KEY_VOLUMEMUTE },
- { XF86XK_AudioRaiseVolume, KEY_VOLUMEUP },
- { XF86XK_AudioPlay, KEY_MEDIAPLAY },
- { XF86XK_AudioStop, KEY_MEDIASTOP },
- { XF86XK_AudioPrev, KEY_MEDIAPREVIOUS },
- { XF86XK_AudioNext, KEY_MEDIANEXT },
- { XF86XK_AudioRecord, KEY_MEDIARECORD },
+ { XF86XK_Back, Key::BACK },
+ { XF86XK_Forward, Key::FORWARD },
+ { XF86XK_Stop, Key::STOP },
+ { XF86XK_Refresh, Key::REFRESH },
+ { XF86XK_Favorites, Key::FAVORITES },
+ { XF86XK_AudioMedia, Key::LAUNCHMEDIA },
+ { XF86XK_OpenURL, Key::OPENURL },
+ { XF86XK_HomePage, Key::HOMEPAGE },
+ { XF86XK_Search, Key::SEARCH },
+ { XF86XK_AudioLowerVolume, Key::VOLUMEDOWN },
+ { XF86XK_AudioMute, Key::VOLUMEMUTE },
+ { XF86XK_AudioRaiseVolume, Key::VOLUMEUP },
+ { XF86XK_AudioPlay, Key::MEDIAPLAY },
+ { XF86XK_AudioStop, Key::MEDIASTOP },
+ { XF86XK_AudioPrev, Key::MEDIAPREVIOUS },
+ { XF86XK_AudioNext, Key::MEDIANEXT },
+ { XF86XK_AudioRecord, Key::MEDIARECORD },
// launch keys
- { XF86XK_Mail, KEY_LAUNCHMAIL },
- { XF86XK_MyComputer, KEY_LAUNCH0 },
- { XF86XK_Calculator, KEY_LAUNCH1 },
- { XF86XK_Standby, KEY_STANDBY },
+ { XF86XK_Mail, Key::LAUNCHMAIL },
+ { XF86XK_MyComputer, Key::LAUNCH0 },
+ { XF86XK_Calculator, Key::LAUNCH1 },
+ { XF86XK_Standby, Key::STANDBY },
- { XF86XK_Launch0, KEY_LAUNCH2 },
- { XF86XK_Launch1, KEY_LAUNCH3 },
- { XF86XK_Launch2, KEY_LAUNCH4 },
- { XF86XK_Launch3, KEY_LAUNCH5 },
- { XF86XK_Launch4, KEY_LAUNCH6 },
- { XF86XK_Launch5, KEY_LAUNCH7 },
- { XF86XK_Launch6, KEY_LAUNCH8 },
- { XF86XK_Launch7, KEY_LAUNCH9 },
- { XF86XK_Launch8, KEY_LAUNCHA },
- { XF86XK_Launch9, KEY_LAUNCHB },
- { XF86XK_LaunchA, KEY_LAUNCHC },
- { XF86XK_LaunchB, KEY_LAUNCHD },
- { XF86XK_LaunchC, KEY_LAUNCHE },
- { XF86XK_LaunchD, KEY_LAUNCHF },
+ { XF86XK_Launch0, Key::LAUNCH2 },
+ { XF86XK_Launch1, Key::LAUNCH3 },
+ { XF86XK_Launch2, Key::LAUNCH4 },
+ { XF86XK_Launch3, Key::LAUNCH5 },
+ { XF86XK_Launch4, Key::LAUNCH6 },
+ { XF86XK_Launch5, Key::LAUNCH7 },
+ { XF86XK_Launch6, Key::LAUNCH8 },
+ { XF86XK_Launch7, Key::LAUNCH9 },
+ { XF86XK_Launch8, Key::LAUNCHA },
+ { XF86XK_Launch9, Key::LAUNCHB },
+ { XF86XK_LaunchA, Key::LAUNCHC },
+ { XF86XK_LaunchB, Key::LAUNCHD },
+ { XF86XK_LaunchC, Key::LAUNCHE },
+ { XF86XK_LaunchD, Key::LAUNCHF },
- { 0, KEY_NONE }
+ { 0, Key::NONE }
};
struct _TranslatePair {
- unsigned int keysym;
+ Key keysym;
unsigned int keycode;
};
static _TranslatePair _scancode_to_keycode[] = {
- { KEY_ESCAPE, 0x09 },
- { KEY_1, 0x0A },
- { KEY_2, 0x0B },
- { KEY_3, 0x0C },
- { KEY_4, 0x0D },
- { KEY_5, 0x0E },
- { KEY_6, 0x0F },
- { KEY_7, 0x10 },
- { KEY_8, 0x11 },
- { KEY_9, 0x12 },
- { KEY_0, 0x13 },
- { KEY_MINUS, 0x14 },
- { KEY_EQUAL, 0x15 },
- { KEY_BACKSPACE, 0x16 },
- { KEY_TAB, 0x17 },
- { KEY_Q, 0x18 },
- { KEY_W, 0x19 },
- { KEY_E, 0x1A },
- { KEY_R, 0x1B },
- { KEY_T, 0x1C },
- { KEY_Y, 0x1D },
- { KEY_U, 0x1E },
- { KEY_I, 0x1F },
- { KEY_O, 0x20 },
- { KEY_P, 0x21 },
- { KEY_BRACELEFT, 0x22 },
- { KEY_BRACERIGHT, 0x23 },
- { KEY_ENTER, 0x24 },
- { KEY_CTRL, 0x25 },
- { KEY_A, 0x26 },
- { KEY_S, 0x27 },
- { KEY_D, 0x28 },
- { KEY_F, 0x29 },
- { KEY_G, 0x2A },
- { KEY_H, 0x2B },
- { KEY_J, 0x2C },
- { KEY_K, 0x2D },
- { KEY_L, 0x2E },
- { KEY_SEMICOLON, 0x2F },
- { KEY_APOSTROPHE, 0x30 },
- { KEY_QUOTELEFT, 0x31 },
- { KEY_SHIFT, 0x32 },
- { KEY_BACKSLASH, 0x33 },
- { KEY_Z, 0x34 },
- { KEY_X, 0x35 },
- { KEY_C, 0x36 },
- { KEY_V, 0x37 },
- { KEY_B, 0x38 },
- { KEY_N, 0x39 },
- { KEY_M, 0x3A },
- { KEY_COMMA, 0x3B },
- { KEY_PERIOD, 0x3C },
- { KEY_SLASH, 0x3D },
- { KEY_SHIFT, 0x3E },
- { KEY_KP_MULTIPLY, 0x3F },
- { KEY_ALT, 0x40 },
- { KEY_SPACE, 0x41 },
- { KEY_CAPSLOCK, 0x42 },
- { KEY_F1, 0x43 },
- { KEY_F2, 0x44 },
- { KEY_F3, 0x45 },
- { KEY_F4, 0x46 },
- { KEY_F5, 0x47 },
- { KEY_F6, 0x48 },
- { KEY_F7, 0x49 },
- { KEY_F8, 0x4A },
- { KEY_F9, 0x4B },
- { KEY_F10, 0x4C },
- { KEY_NUMLOCK, 0x4D },
- { KEY_SCROLLLOCK, 0x4E },
- { KEY_KP_7, 0x4F },
- { KEY_KP_8, 0x50 },
- { KEY_KP_9, 0x51 },
- { KEY_KP_SUBTRACT, 0x52 },
- { KEY_KP_4, 0x53 },
- { KEY_KP_5, 0x54 },
- { KEY_KP_6, 0x55 },
- { KEY_KP_ADD, 0x56 },
- { KEY_KP_1, 0x57 },
- { KEY_KP_2, 0x58 },
- { KEY_KP_3, 0x59 },
- { KEY_KP_0, 0x5A },
- { KEY_KP_PERIOD, 0x5B },
- //{ KEY_???, 0x5E }, //NON US BACKSLASH
- { KEY_F11, 0x5F },
- { KEY_F12, 0x60 },
- { KEY_KP_ENTER, 0x68 },
- { KEY_CTRL, 0x69 },
- { KEY_KP_DIVIDE, 0x6A },
- { KEY_PRINT, 0x6B },
- { KEY_ALT, 0x6C },
- { KEY_ENTER, 0x6D },
- { KEY_HOME, 0x6E },
- { KEY_UP, 0x6F },
- { KEY_PAGEUP, 0x70 },
- { KEY_LEFT, 0x71 },
- { KEY_RIGHT, 0x72 },
- { KEY_END, 0x73 },
- { KEY_DOWN, 0x74 },
- { KEY_PAGEDOWN, 0x75 },
- { KEY_INSERT, 0x76 },
- { KEY_DELETE, 0x77 },
- { KEY_VOLUMEMUTE, 0x79 },
- { KEY_VOLUMEDOWN, 0x7A },
- { KEY_VOLUMEUP, 0x7B },
- { KEY_PAUSE, 0x7F },
- { KEY_SUPER_L, 0x85 },
- { KEY_SUPER_R, 0x86 },
- { KEY_MENU, 0x87 },
- { KEY_UNKNOWN, 0 }
+ { Key::ESCAPE, 0x09 },
+ { Key::KEY_1, 0x0A },
+ { Key::KEY_2, 0x0B },
+ { Key::KEY_3, 0x0C },
+ { Key::KEY_4, 0x0D },
+ { Key::KEY_5, 0x0E },
+ { Key::KEY_6, 0x0F },
+ { Key::KEY_7, 0x10 },
+ { Key::KEY_8, 0x11 },
+ { Key::KEY_9, 0x12 },
+ { Key::KEY_0, 0x13 },
+ { Key::MINUS, 0x14 },
+ { Key::EQUAL, 0x15 },
+ { Key::BACKSPACE, 0x16 },
+ { Key::TAB, 0x17 },
+ { Key::Q, 0x18 },
+ { Key::W, 0x19 },
+ { Key::E, 0x1A },
+ { Key::R, 0x1B },
+ { Key::T, 0x1C },
+ { Key::Y, 0x1D },
+ { Key::U, 0x1E },
+ { Key::I, 0x1F },
+ { Key::O, 0x20 },
+ { Key::P, 0x21 },
+ { Key::BRACELEFT, 0x22 },
+ { Key::BRACERIGHT, 0x23 },
+ { Key::ENTER, 0x24 },
+ { Key::CTRL, 0x25 },
+ { Key::A, 0x26 },
+ { Key::S, 0x27 },
+ { Key::D, 0x28 },
+ { Key::F, 0x29 },
+ { Key::G, 0x2A },
+ { Key::H, 0x2B },
+ { Key::J, 0x2C },
+ { Key::K, 0x2D },
+ { Key::L, 0x2E },
+ { Key::SEMICOLON, 0x2F },
+ { Key::APOSTROPHE, 0x30 },
+ { Key::QUOTELEFT, 0x31 },
+ { Key::SHIFT, 0x32 },
+ { Key::BACKSLASH, 0x33 },
+ { Key::Z, 0x34 },
+ { Key::X, 0x35 },
+ { Key::C, 0x36 },
+ { Key::V, 0x37 },
+ { Key::B, 0x38 },
+ { Key::N, 0x39 },
+ { Key::M, 0x3A },
+ { Key::COMMA, 0x3B },
+ { Key::PERIOD, 0x3C },
+ { Key::SLASH, 0x3D },
+ { Key::SHIFT, 0x3E },
+ { Key::KP_MULTIPLY, 0x3F },
+ { Key::ALT, 0x40 },
+ { Key::SPACE, 0x41 },
+ { Key::CAPSLOCK, 0x42 },
+ { Key::F1, 0x43 },
+ { Key::F2, 0x44 },
+ { Key::F3, 0x45 },
+ { Key::F4, 0x46 },
+ { Key::F5, 0x47 },
+ { Key::F6, 0x48 },
+ { Key::F7, 0x49 },
+ { Key::F8, 0x4A },
+ { Key::F9, 0x4B },
+ { Key::F10, 0x4C },
+ { Key::NUMLOCK, 0x4D },
+ { Key::SCROLLLOCK, 0x4E },
+ { Key::KP_7, 0x4F },
+ { Key::KP_8, 0x50 },
+ { Key::KP_9, 0x51 },
+ { Key::KP_SUBTRACT, 0x52 },
+ { Key::KP_4, 0x53 },
+ { Key::KP_5, 0x54 },
+ { Key::KP_6, 0x55 },
+ { Key::KP_ADD, 0x56 },
+ { Key::KP_1, 0x57 },
+ { Key::KP_2, 0x58 },
+ { Key::KP_3, 0x59 },
+ { Key::KP_0, 0x5A },
+ { Key::KP_PERIOD, 0x5B },
+ //{ Key::???, 0x5E }, //NON US BACKSLASH
+ { Key::F11, 0x5F },
+ { Key::F12, 0x60 },
+ { Key::KP_ENTER, 0x68 },
+ { Key::CTRL, 0x69 },
+ { Key::KP_DIVIDE, 0x6A },
+ { Key::PRINT, 0x6B },
+ { Key::ALT, 0x6C },
+ { Key::ENTER, 0x6D },
+ { Key::HOME, 0x6E },
+ { Key::UP, 0x6F },
+ { Key::PAGEUP, 0x70 },
+ { Key::LEFT, 0x71 },
+ { Key::RIGHT, 0x72 },
+ { Key::END, 0x73 },
+ { Key::DOWN, 0x74 },
+ { Key::PAGEDOWN, 0x75 },
+ { Key::INSERT, 0x76 },
+ { Key::KEY_DELETE, 0x77 },
+ { Key::VOLUMEMUTE, 0x79 },
+ { Key::VOLUMEDOWN, 0x7A },
+ { Key::VOLUMEUP, 0x7B },
+ { Key::PAUSE, 0x7F },
+ { Key::SUPER_L, 0x85 },
+ { Key::SUPER_R, 0x86 },
+ { Key::MENU, 0x87 },
+ { Key::UNKNOWN, 0 }
};
-unsigned int KeyMappingX11::get_scancode(unsigned int p_code) {
- unsigned int keycode = KEY_UNKNOWN;
- for (int i = 0; _scancode_to_keycode[i].keysym != KEY_UNKNOWN; i++) {
+Key KeyMappingX11::get_scancode(unsigned int p_code) {
+ Key keycode = Key::UNKNOWN;
+ for (int i = 0; _scancode_to_keycode[i].keysym != Key::UNKNOWN; i++) {
if (_scancode_to_keycode[i].keycode == p_code) {
keycode = _scancode_to_keycode[i].keysym;
break;
@@ -309,9 +309,9 @@ unsigned int KeyMappingX11::get_scancode(unsigned int p_code) {
return keycode;
}
-unsigned int KeyMappingX11::get_xlibcode(unsigned int p_keysym) {
+unsigned int KeyMappingX11::get_xlibcode(Key p_keysym) {
unsigned int code = 0;
- for (int i = 0; _scancode_to_keycode[i].keysym != KEY_UNKNOWN; i++) {
+ for (int i = 0; _scancode_to_keycode[i].keysym != Key::UNKNOWN; i++) {
if (_scancode_to_keycode[i].keysym == p_keysym) {
code = _scancode_to_keycode[i].keycode;
break;
@@ -335,13 +335,13 @@ Key KeyMappingX11::get_keycode(KeySym p_keysym) {
}
}
- return KEY_NONE;
+ return Key::NONE;
}
KeySym KeyMappingX11::get_keysym(Key p_code) {
// kinda bruteforce.. could optimize.
- if (p_code < 0x100) { // Latin 1, maps 1-1
+ if (p_code < Key::END_LATIN1) { // Latin 1, maps 1-1
return (KeySym)p_code;
}
@@ -352,7 +352,7 @@ KeySym KeyMappingX11::get_keysym(Key p_code) {
}
}
- return (KeySym)KEY_NONE;
+ return (KeySym)Key::NONE;
}
/***** UNICODE CONVERSION ******/
diff --git a/platform/linuxbsd/key_mapping_x11.h b/platform/linuxbsd/key_mapping_x11.h
index d4f1554671..5f61197abe 100644
--- a/platform/linuxbsd/key_mapping_x11.h
+++ b/platform/linuxbsd/key_mapping_x11.h
@@ -45,11 +45,11 @@ class KeyMappingX11 {
public:
static Key get_keycode(KeySym p_keysym);
- static unsigned int get_xlibcode(unsigned int p_keysym);
- static unsigned int get_scancode(unsigned int p_code);
+ static unsigned int get_xlibcode(Key p_keysym);
+ static Key get_scancode(unsigned int p_code);
static KeySym get_keysym(Key p_code);
static unsigned int get_unicode_from_keysym(KeySym p_keysym);
static KeySym get_keysym_from_unicode(unsigned int p_unicode);
};
-#endif
+#endif // KEY_MAPPING_X11_H
diff --git a/platform/osx/SCsub b/platform/osx/SCsub
index 46c13d8550..8ba106d1c2 100644
--- a/platform/osx/SCsub
+++ b/platform/osx/SCsub
@@ -13,7 +13,7 @@ files = [
"dir_access_osx.mm",
"joypad_osx.cpp",
"vulkan_context_osx.mm",
- "context_gl_osx.mm",
+ "gl_manager_osx.mm",
]
prog = env.add_program("#bin/godot", files)
diff --git a/platform/osx/context_gl_osx.mm b/platform/osx/context_gl_osx.mm
deleted file mode 100644
index eab9d8dc0c..0000000000
--- a/platform/osx/context_gl_osx.mm
+++ /dev/null
@@ -1,161 +0,0 @@
-/*************************************************************************/
-/* context_gl_osx.mm */
-/*************************************************************************/
-/* This file is part of: */
-/* GODOT ENGINE */
-/* https://godotengine.org */
-/*************************************************************************/
-/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */
-/* Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). */
-/* */
-/* Permission is hereby granted, free of charge, to any person obtaining */
-/* a copy of this software and associated documentation files (the */
-/* "Software"), to deal in the Software without restriction, including */
-/* without limitation the rights to use, copy, modify, merge, publish, */
-/* distribute, sublicense, and/or sell copies of the Software, and to */
-/* permit persons to whom the Software is furnished to do so, subject to */
-/* the following conditions: */
-/* */
-/* The above copyright notice and this permission notice shall be */
-/* included in all copies or substantial portions of the Software. */
-/* */
-/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
-/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
-/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
-/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
-/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
-/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
-/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
-/*************************************************************************/
-
-#include "context_gl_osx.h"
-
-#if defined(GLES3_ENABLED) || defined(GLES_ENABLED)
-
-void ContextGL_OSX::release_current() {
- [NSOpenGLContext clearCurrentContext];
-}
-
-void ContextGL_OSX::make_current() {
- [context makeCurrentContext];
-}
-
-void ContextGL_OSX::update() {
- [context update];
-}
-
-void ContextGL_OSX::set_opacity(GLint p_opacity) {
- [context setValues:&p_opacity forParameter:NSOpenGLCPSurfaceOpacity];
-}
-
-int ContextGL_OSX::get_window_width() {
- return OS::get_singleton()->get_video_mode().width;
-}
-
-int ContextGL_OSX::get_window_height() {
- return OS::get_singleton()->get_video_mode().height;
-}
-
-void ContextGL_OSX::swap_buffers() {
- [context flushBuffer];
-}
-
-void ContextGL_OSX::set_use_vsync(bool p_use) {
- CGLContextObj ctx = CGLGetCurrentContext();
- if (ctx) {
- GLint swapInterval = p_use ? 1 : 0;
- CGLSetParameter(ctx, kCGLCPSwapInterval, &swapInterval);
- use_vsync = p_use;
- }
-}
-
-bool ContextGL_OSX::is_using_vsync() const {
- return use_vsync;
-}
-
-Error ContextGL_OSX::initialize() {
- framework = CFBundleGetBundleWithIdentifier(CFSTR("com.apple.opengl"));
- ERR_FAIL_COND_V(!framework, ERR_CANT_CREATE);
-
- unsigned int attributeCount = 0;
-
- // OS X needs non-zero color size, so set reasonable values
- int colorBits = 32;
-
- // Fail if a robustness strategy was requested
-
-#define ADD_ATTR(x) \
- { attributes[attributeCount++] = x; }
-#define ADD_ATTR2(x, y) \
- { \
- ADD_ATTR(x); \
- ADD_ATTR(y); \
- }
-
- // Arbitrary array size here
- NSOpenGLPixelFormatAttribute attributes[40];
-
- ADD_ATTR(NSOpenGLPFADoubleBuffer);
- ADD_ATTR(NSOpenGLPFAClosestPolicy);
-
- if (!gles3_context) {
- ADD_ATTR2(NSOpenGLPFAOpenGLProfile, NSOpenGLProfileVersionLegacy);
- } else {
- //we now need OpenGL 3 or better, maybe even change this to 3_3Core ?
- ADD_ATTR2(NSOpenGLPFAOpenGLProfile, NSOpenGLProfileVersion3_2Core);
- }
-
- ADD_ATTR2(NSOpenGLPFAColorSize, colorBits);
-
- /*
- if (fbconfig->alphaBits > 0)
- ADD_ATTR2(NSOpenGLPFAAlphaSize, fbconfig->alphaBits);
-*/
-
- ADD_ATTR2(NSOpenGLPFADepthSize, 24);
-
- ADD_ATTR2(NSOpenGLPFAStencilSize, 8);
-
- /*
- if (fbconfig->stereo)
- ADD_ATTR(NSOpenGLPFAStereo);
-*/
-
- /*
- if (fbconfig->samples > 0) {
- ADD_ATTR2(NSOpenGLPFASampleBuffers, 1);
- ADD_ATTR2(NSOpenGLPFASamples, fbconfig->samples);
- }
-*/
-
- // NOTE: All NSOpenGLPixelFormats on the relevant cards support sRGB
- // framebuffer, so there's no need (and no way) to request it
-
- ADD_ATTR(0);
-
-#undef ADD_ATTR
-#undef ADD_ATTR2
-
- pixelFormat = [[NSOpenGLPixelFormat alloc] initWithAttributes:attributes];
- ERR_FAIL_COND_V(pixelFormat == nil, ERR_CANT_CREATE);
-
- context = [[NSOpenGLContext alloc] initWithFormat:pixelFormat shareContext:nil];
-
- ERR_FAIL_COND_V(context == nil, ERR_CANT_CREATE);
-
- [context setView:window_view];
-
- [context makeCurrentContext];
-
- return OK;
-}
-
-ContextGL_OSX::ContextGL_OSX(id p_view, bool p_gles3_context) {
- gles3_context = p_gles3_context;
- window_view = p_view;
- use_vsync = false;
-}
-
-ContextGL_OSX::~ContextGL_OSX() {}
-
-#endif
diff --git a/platform/osx/crash_handler_osx.mm b/platform/osx/crash_handler_osx.mm
index 31228b10b4..57bca7a5b9 100644
--- a/platform/osx/crash_handler_osx.mm
+++ b/platform/osx/crash_handler_osx.mm
@@ -134,8 +134,13 @@ static void handle_crash(int sig) {
args.push_back("-o");
args.push_back(_execpath);
+#if defined(__x86_64) || defined(__x86_64__) || defined(__amd64__)
args.push_back("-arch");
args.push_back("x86_64");
+#elif defined(__aarch64__)
+ args.push_back("-arch");
+ args.push_back("arm64");
+#endif
args.push_back("-l");
snprintf(str, 1024, "%p", load_addr);
args.push_back(str);
@@ -146,7 +151,7 @@ static void handle_crash(int sig) {
String out = "";
Error err = OS::get_singleton()->execute(String("atos"), args, &out, &ret);
if (err == OK && out.substr(0, 2) != "0x") {
- out.erase(out.length() - 1, 1);
+ out = out.substr(0, out.length() - 1);
output = out;
}
}
diff --git a/platform/osx/detect.py b/platform/osx/detect.py
index d9b55631cd..f5c7731395 100644
--- a/platform/osx/detect.py
+++ b/platform/osx/detect.py
@@ -82,7 +82,7 @@ def configure(env):
env.Append(CCFLAGS=["-arch", "arm64", "-mmacosx-version-min=10.15"])
env.Append(LINKFLAGS=["-arch", "arm64", "-mmacosx-version-min=10.15"])
else:
- print("Building for macOS 10.12+, platform x86-64.")
+ print("Building for macOS 10.12+, platform x86_64.")
env.Append(CCFLAGS=["-arch", "x86_64", "-mmacosx-version-min=10.12"])
env.Append(LINKFLAGS=["-arch", "x86_64", "-mmacosx-version-min=10.12"])
@@ -183,10 +183,13 @@ def configure(env):
)
env.Append(LIBS=["pthread", "z"])
+ if env["opengl3"]:
+ env.Append(CPPDEFINES=["GLES_ENABLED", "GLES3_ENABLED"])
+ env.Append(CCFLAGS=["-Wno-deprecated-declarations"]) # Disable deprecation warnings
+ env.Append(LINKFLAGS=["-framework", "OpenGL"])
+
if env["vulkan"]:
env.Append(CPPDEFINES=["VULKAN_ENABLED"])
env.Append(LINKFLAGS=["-framework", "Metal", "-framework", "QuartzCore", "-framework", "IOSurface"])
if not env["use_volk"]:
env.Append(LINKFLAGS=["-L$VULKAN_SDK_PATH/MoltenVK/MoltenVK.xcframework/macos-arm64_x86_64/", "-lMoltenVK"])
-
- # env.Append(CPPDEFINES=['GLES_ENABLED', 'GLES3_ENABLED'])
diff --git a/platform/osx/display_server_osx.h b/platform/osx/display_server_osx.h
index 96baeb4dec..3cc0b10c5b 100644
--- a/platform/osx/display_server_osx.h
+++ b/platform/osx/display_server_osx.h
@@ -37,8 +37,7 @@
#include "servers/display_server.h"
#if defined(GLES3_ENABLED)
-#include "context_gl_osx.h"
-//TODO - reimplement OpenGLES
+#include "gl_manager_osx.h"
#endif
#if defined(VULKAN_ENABLED)
@@ -65,11 +64,11 @@ public:
void _menu_callback(id p_sender);
#if defined(GLES3_ENABLED)
- ContextGL_OSX *context_gles2;
+ GLManager_OSX *gl_manager = nullptr;
#endif
#if defined(VULKAN_ENABLED)
- VulkanContextOSX *context_vulkan;
- RenderingDeviceVulkan *rendering_device_vulkan;
+ VulkanContextOSX *context_vulkan = nullptr;
+ RenderingDeviceVulkan *rendering_device_vulkan = nullptr;
#endif
const NSMenu *_get_menu_root(const String &p_menu_root) const;
@@ -85,8 +84,8 @@ public:
bool pressed = false;
bool echo = false;
bool raw = false;
- Key keycode = KEY_NONE;
- uint32_t physical_keycode = 0;
+ Key keycode = Key::NONE;
+ Key physical_keycode = Key::NONE;
uint32_t unicode = 0;
};
@@ -109,9 +108,6 @@ public:
Vector<Vector2> mpath;
-#if defined(GLES3_ENABLED)
- ContextGL_OSX *context_gles2 = nullptr;
-#endif
Point2i mouse_pos;
Size2i min_size;
@@ -176,7 +172,7 @@ public:
MouseMode mouse_mode;
Point2i last_mouse_pos;
- MouseButton last_button_state = MOUSE_BUTTON_NONE;
+ MouseButton last_button_state = MouseButton::NONE;
bool window_focused;
bool drop_events;
@@ -287,6 +283,7 @@ public:
virtual void window_attach_instance_id(ObjectID p_instance, WindowID p_window = MAIN_WINDOW_ID) override;
virtual ObjectID window_get_attached_instance_id(WindowID p_window = MAIN_WINDOW_ID) const override;
+ virtual void gl_window_make_current(DisplayServer::WindowID p_window_id) override;
virtual void window_set_vsync_mode(DisplayServer::VSyncMode p_vsync_mode, WindowID p_window = MAIN_WINDOW_ID) override;
virtual DisplayServer::VSyncMode window_get_vsync_mode(WindowID p_vsync_mode) const override;
diff --git a/platform/osx/display_server_osx.mm b/platform/osx/display_server_osx.mm
index d89e64cd7d..fec5c98a99 100644
--- a/platform/osx/display_server_osx.mm
+++ b/platform/osx/display_server_osx.mm
@@ -46,7 +46,7 @@
#include <IOKit/hid/IOHIDLib.h>
#if defined(GLES3_ENABLED)
-//TODO - reimplement OpenGLES
+#include "drivers/gles3/rasterizer_gles3.h"
#import <AppKit/NSOpenGLView.h>
#endif
@@ -167,8 +167,8 @@ static NSCursor *_cursorFromSelector(SEL selector, SEL fallback = nil) {
}
#if defined(GLES3_ENABLED)
- if (DS_OSX->rendering_driver == "opengl_es") {
- //TODO - reimplement OpenGLES
+ if (DS_OSX->rendering_driver == "opengl3") {
+ DS_OSX->gl_manager->window_destroy(window_id);
}
#endif
#ifdef VULKAN_ENABLED
@@ -272,8 +272,8 @@ static NSCursor *_cursorFromSelector(SEL selector, SEL fallback = nil) {
}
#if defined(GLES3_ENABLED)
- if (DS_OSX->rendering_driver == "opengl_es") {
- //TODO - reimplement OpenGLES
+ if (DS_OSX->rendering_driver == "opengl3") {
+ DS_OSX->gl_manager->window_resize(window_id, wd.size.width, wd.size.height);
}
#endif
#if defined(VULKAN_ENABLED)
@@ -289,14 +289,6 @@ static NSCursor *_cursorFromSelector(SEL selector, SEL fallback = nil) {
Callable::CallError ce;
wd.rect_changed_callback.call((const Variant **)&sizep, 1, ret, ce);
}
-
- if (OS_OSX::get_singleton()->get_main_loop()) {
- Main::force_redraw();
- //Event retrieval blocks until resize is over. Call Main::iteration() directly.
- if (!Main::is_iterating()) { //avoid cyclic loop
- Main::iteration();
- }
- }
}
- (void)windowDidMove:(NSNotification *)notification {
@@ -377,7 +369,12 @@ static NSCursor *_cursorFromSelector(SEL selector, SEL fallback = nil) {
/* GodotContentView */
/*************************************************************************/
+#if defined(GLES3_ENABLED)
+@interface GodotContentView : NSOpenGLView <NSTextInputClient> {
+#else
@interface GodotContentView : NSView <NSTextInputClient> {
+#endif
+
DisplayServerOSX::WindowID window_id;
NSTrackingArea *trackingArea;
NSMutableAttributedString *markedText;
@@ -405,12 +402,6 @@ static NSCursor *_cursorFromSelector(SEL selector, SEL fallback = nil) {
}
- (CALayer *)makeBackingLayer {
-#if defined(GLES3_ENABLED)
- if (DS_OSX->rendering_driver == "opengl_es") {
- CALayer *layer = [[NSOpenGLLayer class] layer];
- return layer;
- }
-#endif
#if defined(VULKAN_ENABLED)
if (DS_OSX->rendering_driver == "vulkan") {
CALayer *layer = [[CAMetalLayer class] layer];
@@ -422,9 +413,8 @@ static NSCursor *_cursorFromSelector(SEL selector, SEL fallback = nil) {
- (void)updateLayer {
#if defined(GLES3_ENABLED)
- if (DS_OSX->rendering_driver == "opengl_es") {
- [super updateLayer];
- //TODO - reimplement OpenGLES
+ if (DS_OSX->rendering_driver == "opengl3") {
+ DS_OSX->gl_manager->window_update(window_id);
}
#endif
#if defined(VULKAN_ENABLED)
@@ -589,8 +579,8 @@ static const NSRange kEmptyRange = { NSNotFound, 0 };
ke.pressed = true;
ke.echo = false;
ke.raw = false; // IME input event
- ke.keycode = KEY_NONE;
- ke.physical_keycode = 0;
+ ke.keycode = Key::NONE;
+ ke.physical_keycode = Key::NONE;
ke.unicode = codepoint;
_push_to_key_event_buffer(ke);
@@ -690,7 +680,7 @@ static void _mouseDownEvent(DisplayServer::WindowID window_id, NSEvent *event, M
mb->set_position(pos);
mb->set_global_position(pos);
mb->set_button_mask(DS_OSX->last_button_state);
- if (index == MOUSE_BUTTON_LEFT && pressed) {
+ if (index == MouseButton::LEFT && pressed) {
mb->set_double_click([event clickCount] == 2);
}
@@ -703,10 +693,10 @@ static void _mouseDownEvent(DisplayServer::WindowID window_id, NSEvent *event, M
if (([event modifierFlags] & NSEventModifierFlagControl)) {
wd.mouse_down_control = true;
- _mouseDownEvent(window_id, event, MOUSE_BUTTON_RIGHT, MOUSE_BUTTON_MASK_RIGHT, true);
+ _mouseDownEvent(window_id, event, MouseButton::RIGHT, MouseButton::MASK_RIGHT, true);
} else {
wd.mouse_down_control = false;
- _mouseDownEvent(window_id, event, MOUSE_BUTTON_LEFT, MOUSE_BUTTON_MASK_LEFT, true);
+ _mouseDownEvent(window_id, event, MouseButton::LEFT, MouseButton::MASK_LEFT, true);
}
}
@@ -719,9 +709,9 @@ static void _mouseDownEvent(DisplayServer::WindowID window_id, NSEvent *event, M
DisplayServerOSX::WindowData &wd = DS_OSX->windows[window_id];
if (wd.mouse_down_control) {
- _mouseDownEvent(window_id, event, MOUSE_BUTTON_RIGHT, MOUSE_BUTTON_MASK_RIGHT, false);
+ _mouseDownEvent(window_id, event, MouseButton::RIGHT, MouseButton::MASK_RIGHT, false);
} else {
- _mouseDownEvent(window_id, event, MOUSE_BUTTON_LEFT, MOUSE_BUTTON_MASK_LEFT, false);
+ _mouseDownEvent(window_id, event, MouseButton::LEFT, MouseButton::MASK_LEFT, false);
}
}
@@ -807,7 +797,7 @@ static void _mouseDownEvent(DisplayServer::WindowID window_id, NSEvent *event, M
}
- (void)rightMouseDown:(NSEvent *)event {
- _mouseDownEvent(window_id, event, MOUSE_BUTTON_RIGHT, MOUSE_BUTTON_MASK_RIGHT, true);
+ _mouseDownEvent(window_id, event, MouseButton::RIGHT, MouseButton::MASK_RIGHT, true);
}
- (void)rightMouseDragged:(NSEvent *)event {
@@ -815,16 +805,16 @@ static void _mouseDownEvent(DisplayServer::WindowID window_id, NSEvent *event, M
}
- (void)rightMouseUp:(NSEvent *)event {
- _mouseDownEvent(window_id, event, MOUSE_BUTTON_RIGHT, MOUSE_BUTTON_MASK_RIGHT, false);
+ _mouseDownEvent(window_id, event, MouseButton::RIGHT, MouseButton::MASK_RIGHT, false);
}
- (void)otherMouseDown:(NSEvent *)event {
if ((int)[event buttonNumber] == 2) {
- _mouseDownEvent(window_id, event, MOUSE_BUTTON_MIDDLE, MOUSE_BUTTON_MASK_MIDDLE, true);
+ _mouseDownEvent(window_id, event, MouseButton::MIDDLE, MouseButton::MASK_MIDDLE, true);
} else if ((int)[event buttonNumber] == 3) {
- _mouseDownEvent(window_id, event, MOUSE_BUTTON_XBUTTON1, MOUSE_BUTTON_MASK_XBUTTON1, true);
+ _mouseDownEvent(window_id, event, MouseButton::MB_XBUTTON1, MouseButton::MASK_XBUTTON1, true);
} else if ((int)[event buttonNumber] == 4) {
- _mouseDownEvent(window_id, event, MOUSE_BUTTON_XBUTTON2, MOUSE_BUTTON_MASK_XBUTTON2, true);
+ _mouseDownEvent(window_id, event, MouseButton::MB_XBUTTON2, MouseButton::MASK_XBUTTON2, true);
} else {
return;
}
@@ -836,11 +826,11 @@ static void _mouseDownEvent(DisplayServer::WindowID window_id, NSEvent *event, M
- (void)otherMouseUp:(NSEvent *)event {
if ((int)[event buttonNumber] == 2) {
- _mouseDownEvent(window_id, event, MOUSE_BUTTON_MIDDLE, MOUSE_BUTTON_MASK_MIDDLE, false);
+ _mouseDownEvent(window_id, event, MouseButton::MIDDLE, MouseButton::MASK_MIDDLE, false);
} else if ((int)[event buttonNumber] == 3) {
- _mouseDownEvent(window_id, event, MOUSE_BUTTON_XBUTTON1, MOUSE_BUTTON_MASK_XBUTTON1, false);
+ _mouseDownEvent(window_id, event, MouseButton::MB_XBUTTON1, MouseButton::MASK_XBUTTON1, false);
} else if ((int)[event buttonNumber] == 4) {
- _mouseDownEvent(window_id, event, MOUSE_BUTTON_XBUTTON2, MOUSE_BUTTON_MASK_XBUTTON2, false);
+ _mouseDownEvent(window_id, event, MouseButton::MB_XBUTTON2, MouseButton::MASK_XBUTTON2, false);
} else {
return;
}
@@ -932,140 +922,140 @@ static bool isNumpadKey(unsigned int key) {
// Keyboard symbol translation table
static const Key _osx_to_godot_table[128] = {
- /* 00 */ KEY_A,
- /* 01 */ KEY_S,
- /* 02 */ KEY_D,
- /* 03 */ KEY_F,
- /* 04 */ KEY_H,
- /* 05 */ KEY_G,
- /* 06 */ KEY_Z,
- /* 07 */ KEY_X,
- /* 08 */ KEY_C,
- /* 09 */ KEY_V,
- /* 0a */ KEY_SECTION, /* ISO Section */
- /* 0b */ KEY_B,
- /* 0c */ KEY_Q,
- /* 0d */ KEY_W,
- /* 0e */ KEY_E,
- /* 0f */ KEY_R,
- /* 10 */ KEY_Y,
- /* 11 */ KEY_T,
- /* 12 */ KEY_1,
- /* 13 */ KEY_2,
- /* 14 */ KEY_3,
- /* 15 */ KEY_4,
- /* 16 */ KEY_6,
- /* 17 */ KEY_5,
- /* 18 */ KEY_EQUAL,
- /* 19 */ KEY_9,
- /* 1a */ KEY_7,
- /* 1b */ KEY_MINUS,
- /* 1c */ KEY_8,
- /* 1d */ KEY_0,
- /* 1e */ KEY_BRACERIGHT,
- /* 1f */ KEY_O,
- /* 20 */ KEY_U,
- /* 21 */ KEY_BRACELEFT,
- /* 22 */ KEY_I,
- /* 23 */ KEY_P,
- /* 24 */ KEY_ENTER,
- /* 25 */ KEY_L,
- /* 26 */ KEY_J,
- /* 27 */ KEY_APOSTROPHE,
- /* 28 */ KEY_K,
- /* 29 */ KEY_SEMICOLON,
- /* 2a */ KEY_BACKSLASH,
- /* 2b */ KEY_COMMA,
- /* 2c */ KEY_SLASH,
- /* 2d */ KEY_N,
- /* 2e */ KEY_M,
- /* 2f */ KEY_PERIOD,
- /* 30 */ KEY_TAB,
- /* 31 */ KEY_SPACE,
- /* 32 */ KEY_QUOTELEFT,
- /* 33 */ KEY_BACKSPACE,
- /* 34 */ KEY_UNKNOWN,
- /* 35 */ KEY_ESCAPE,
- /* 36 */ KEY_META,
- /* 37 */ KEY_META,
- /* 38 */ KEY_SHIFT,
- /* 39 */ KEY_CAPSLOCK,
- /* 3a */ KEY_ALT,
- /* 3b */ KEY_CTRL,
- /* 3c */ KEY_SHIFT,
- /* 3d */ KEY_ALT,
- /* 3e */ KEY_CTRL,
- /* 3f */ KEY_UNKNOWN, /* Function */
- /* 40 */ KEY_UNKNOWN, /* F17 */
- /* 41 */ KEY_KP_PERIOD,
- /* 42 */ KEY_UNKNOWN,
- /* 43 */ KEY_KP_MULTIPLY,
- /* 44 */ KEY_UNKNOWN,
- /* 45 */ KEY_KP_ADD,
- /* 46 */ KEY_UNKNOWN,
- /* 47 */ KEY_NUMLOCK, /* Really KeypadClear... */
- /* 48 */ KEY_VOLUMEUP, /* VolumeUp */
- /* 49 */ KEY_VOLUMEDOWN, /* VolumeDown */
- /* 4a */ KEY_VOLUMEMUTE, /* Mute */
- /* 4b */ KEY_KP_DIVIDE,
- /* 4c */ KEY_KP_ENTER,
- /* 4d */ KEY_UNKNOWN,
- /* 4e */ KEY_KP_SUBTRACT,
- /* 4f */ KEY_UNKNOWN, /* F18 */
- /* 50 */ KEY_UNKNOWN, /* F19 */
- /* 51 */ KEY_EQUAL, /* KeypadEqual */
- /* 52 */ KEY_KP_0,
- /* 53 */ KEY_KP_1,
- /* 54 */ KEY_KP_2,
- /* 55 */ KEY_KP_3,
- /* 56 */ KEY_KP_4,
- /* 57 */ KEY_KP_5,
- /* 58 */ KEY_KP_6,
- /* 59 */ KEY_KP_7,
- /* 5a */ KEY_UNKNOWN, /* F20 */
- /* 5b */ KEY_KP_8,
- /* 5c */ KEY_KP_9,
- /* 5d */ KEY_YEN, /* JIS Yen */
- /* 5e */ KEY_UNDERSCORE, /* JIS Underscore */
- /* 5f */ KEY_COMMA, /* JIS KeypadComma */
- /* 60 */ KEY_F5,
- /* 61 */ KEY_F6,
- /* 62 */ KEY_F7,
- /* 63 */ KEY_F3,
- /* 64 */ KEY_F8,
- /* 65 */ KEY_F9,
- /* 66 */ KEY_UNKNOWN, /* JIS Eisu */
- /* 67 */ KEY_F11,
- /* 68 */ KEY_UNKNOWN, /* JIS Kana */
- /* 69 */ KEY_F13,
- /* 6a */ KEY_F16,
- /* 6b */ KEY_F14,
- /* 6c */ KEY_UNKNOWN,
- /* 6d */ KEY_F10,
- /* 6e */ KEY_MENU,
- /* 6f */ KEY_F12,
- /* 70 */ KEY_UNKNOWN,
- /* 71 */ KEY_F15,
- /* 72 */ KEY_INSERT, /* Really Help... */
- /* 73 */ KEY_HOME,
- /* 74 */ KEY_PAGEUP,
- /* 75 */ KEY_DELETE,
- /* 76 */ KEY_F4,
- /* 77 */ KEY_END,
- /* 78 */ KEY_F2,
- /* 79 */ KEY_PAGEDOWN,
- /* 7a */ KEY_F1,
- /* 7b */ KEY_LEFT,
- /* 7c */ KEY_RIGHT,
- /* 7d */ KEY_DOWN,
- /* 7e */ KEY_UP,
- /* 7f */ KEY_UNKNOWN,
+ /* 00 */ Key::A,
+ /* 01 */ Key::S,
+ /* 02 */ Key::D,
+ /* 03 */ Key::F,
+ /* 04 */ Key::H,
+ /* 05 */ Key::G,
+ /* 06 */ Key::Z,
+ /* 07 */ Key::X,
+ /* 08 */ Key::C,
+ /* 09 */ Key::V,
+ /* 0a */ Key::SECTION, /* ISO Section */
+ /* 0b */ Key::B,
+ /* 0c */ Key::Q,
+ /* 0d */ Key::W,
+ /* 0e */ Key::E,
+ /* 0f */ Key::R,
+ /* 10 */ Key::Y,
+ /* 11 */ Key::T,
+ /* 12 */ Key::KEY_1,
+ /* 13 */ Key::KEY_2,
+ /* 14 */ Key::KEY_3,
+ /* 15 */ Key::KEY_4,
+ /* 16 */ Key::KEY_6,
+ /* 17 */ Key::KEY_5,
+ /* 18 */ Key::EQUAL,
+ /* 19 */ Key::KEY_9,
+ /* 1a */ Key::KEY_7,
+ /* 1b */ Key::MINUS,
+ /* 1c */ Key::KEY_8,
+ /* 1d */ Key::KEY_0,
+ /* 1e */ Key::BRACERIGHT,
+ /* 1f */ Key::O,
+ /* 20 */ Key::U,
+ /* 21 */ Key::BRACELEFT,
+ /* 22 */ Key::I,
+ /* 23 */ Key::P,
+ /* 24 */ Key::ENTER,
+ /* 25 */ Key::L,
+ /* 26 */ Key::J,
+ /* 27 */ Key::APOSTROPHE,
+ /* 28 */ Key::K,
+ /* 29 */ Key::SEMICOLON,
+ /* 2a */ Key::BACKSLASH,
+ /* 2b */ Key::COMMA,
+ /* 2c */ Key::SLASH,
+ /* 2d */ Key::N,
+ /* 2e */ Key::M,
+ /* 2f */ Key::PERIOD,
+ /* 30 */ Key::TAB,
+ /* 31 */ Key::SPACE,
+ /* 32 */ Key::QUOTELEFT,
+ /* 33 */ Key::BACKSPACE,
+ /* 34 */ Key::UNKNOWN,
+ /* 35 */ Key::ESCAPE,
+ /* 36 */ Key::META,
+ /* 37 */ Key::META,
+ /* 38 */ Key::SHIFT,
+ /* 39 */ Key::CAPSLOCK,
+ /* 3a */ Key::ALT,
+ /* 3b */ Key::CTRL,
+ /* 3c */ Key::SHIFT,
+ /* 3d */ Key::ALT,
+ /* 3e */ Key::CTRL,
+ /* 3f */ Key::UNKNOWN, /* Function */
+ /* 40 */ Key::UNKNOWN, /* F17 */
+ /* 41 */ Key::KP_PERIOD,
+ /* 42 */ Key::UNKNOWN,
+ /* 43 */ Key::KP_MULTIPLY,
+ /* 44 */ Key::UNKNOWN,
+ /* 45 */ Key::KP_ADD,
+ /* 46 */ Key::UNKNOWN,
+ /* 47 */ Key::NUMLOCK, /* Really KeypadClear... */
+ /* 48 */ Key::VOLUMEUP, /* VolumeUp */
+ /* 49 */ Key::VOLUMEDOWN, /* VolumeDown */
+ /* 4a */ Key::VOLUMEMUTE, /* Mute */
+ /* 4b */ Key::KP_DIVIDE,
+ /* 4c */ Key::KP_ENTER,
+ /* 4d */ Key::UNKNOWN,
+ /* 4e */ Key::KP_SUBTRACT,
+ /* 4f */ Key::UNKNOWN, /* F18 */
+ /* 50 */ Key::UNKNOWN, /* F19 */
+ /* 51 */ Key::EQUAL, /* KeypadEqual */
+ /* 52 */ Key::KP_0,
+ /* 53 */ Key::KP_1,
+ /* 54 */ Key::KP_2,
+ /* 55 */ Key::KP_3,
+ /* 56 */ Key::KP_4,
+ /* 57 */ Key::KP_5,
+ /* 58 */ Key::KP_6,
+ /* 59 */ Key::KP_7,
+ /* 5a */ Key::UNKNOWN, /* F20 */
+ /* 5b */ Key::KP_8,
+ /* 5c */ Key::KP_9,
+ /* 5d */ Key::YEN, /* JIS Yen */
+ /* 5e */ Key::UNDERSCORE, /* JIS Underscore */
+ /* 5f */ Key::COMMA, /* JIS KeypadComma */
+ /* 60 */ Key::F5,
+ /* 61 */ Key::F6,
+ /* 62 */ Key::F7,
+ /* 63 */ Key::F3,
+ /* 64 */ Key::F8,
+ /* 65 */ Key::F9,
+ /* 66 */ Key::UNKNOWN, /* JIS Eisu */
+ /* 67 */ Key::F11,
+ /* 68 */ Key::UNKNOWN, /* JIS Kana */
+ /* 69 */ Key::F13,
+ /* 6a */ Key::F16,
+ /* 6b */ Key::F14,
+ /* 6c */ Key::UNKNOWN,
+ /* 6d */ Key::F10,
+ /* 6e */ Key::MENU,
+ /* 6f */ Key::F12,
+ /* 70 */ Key::UNKNOWN,
+ /* 71 */ Key::F15,
+ /* 72 */ Key::INSERT, /* Really Help... */
+ /* 73 */ Key::HOME,
+ /* 74 */ Key::PAGEUP,
+ /* 75 */ Key::KEY_DELETE,
+ /* 76 */ Key::F4,
+ /* 77 */ Key::END,
+ /* 78 */ Key::F2,
+ /* 79 */ Key::PAGEDOWN,
+ /* 7a */ Key::F1,
+ /* 7b */ Key::LEFT,
+ /* 7c */ Key::RIGHT,
+ /* 7d */ Key::DOWN,
+ /* 7e */ Key::UP,
+ /* 7f */ Key::UNKNOWN,
};
// Translates a OS X keycode to a Godot keycode
static Key translateKey(unsigned int key) {
if (key >= 128) {
- return KEY_UNKNOWN;
+ return Key::UNKNOWN;
}
return _osx_to_godot_table[key];
@@ -1087,61 +1077,61 @@ struct _KeyCodeMap {
};
static const _KeyCodeMap _keycodes[55] = {
- { '`', KEY_QUOTELEFT },
- { '~', KEY_ASCIITILDE },
- { '0', KEY_0 },
- { '1', KEY_1 },
- { '2', KEY_2 },
- { '3', KEY_3 },
- { '4', KEY_4 },
- { '5', KEY_5 },
- { '6', KEY_6 },
- { '7', KEY_7 },
- { '8', KEY_8 },
- { '9', KEY_9 },
- { '-', KEY_MINUS },
- { '_', KEY_UNDERSCORE },
- { '=', KEY_EQUAL },
- { '+', KEY_PLUS },
- { 'q', KEY_Q },
- { 'w', KEY_W },
- { 'e', KEY_E },
- { 'r', KEY_R },
- { 't', KEY_T },
- { 'y', KEY_Y },
- { 'u', KEY_U },
- { 'i', KEY_I },
- { 'o', KEY_O },
- { 'p', KEY_P },
- { '[', KEY_BRACELEFT },
- { ']', KEY_BRACERIGHT },
- { '{', KEY_BRACELEFT },
- { '}', KEY_BRACERIGHT },
- { 'a', KEY_A },
- { 's', KEY_S },
- { 'd', KEY_D },
- { 'f', KEY_F },
- { 'g', KEY_G },
- { 'h', KEY_H },
- { 'j', KEY_J },
- { 'k', KEY_K },
- { 'l', KEY_L },
- { ';', KEY_SEMICOLON },
- { ':', KEY_COLON },
- { '\'', KEY_APOSTROPHE },
- { '\"', KEY_QUOTEDBL },
- { '\\', KEY_BACKSLASH },
- { '#', KEY_NUMBERSIGN },
- { 'z', KEY_Z },
- { 'x', KEY_X },
- { 'c', KEY_C },
- { 'v', KEY_V },
- { 'b', KEY_B },
- { 'n', KEY_N },
- { 'm', KEY_M },
- { ',', KEY_COMMA },
- { '.', KEY_PERIOD },
- { '/', KEY_SLASH }
+ { '`', Key::QUOTELEFT },
+ { '~', Key::ASCIITILDE },
+ { '0', Key::KEY_0 },
+ { '1', Key::KEY_1 },
+ { '2', Key::KEY_2 },
+ { '3', Key::KEY_3 },
+ { '4', Key::KEY_4 },
+ { '5', Key::KEY_5 },
+ { '6', Key::KEY_6 },
+ { '7', Key::KEY_7 },
+ { '8', Key::KEY_8 },
+ { '9', Key::KEY_9 },
+ { '-', Key::MINUS },
+ { '_', Key::UNDERSCORE },
+ { '=', Key::EQUAL },
+ { '+', Key::PLUS },
+ { 'q', Key::Q },
+ { 'w', Key::W },
+ { 'e', Key::E },
+ { 'r', Key::R },
+ { 't', Key::T },
+ { 'y', Key::Y },
+ { 'u', Key::U },
+ { 'i', Key::I },
+ { 'o', Key::O },
+ { 'p', Key::P },
+ { '[', Key::BRACELEFT },
+ { ']', Key::BRACERIGHT },
+ { '{', Key::BRACELEFT },
+ { '}', Key::BRACERIGHT },
+ { 'a', Key::A },
+ { 's', Key::S },
+ { 'd', Key::D },
+ { 'f', Key::F },
+ { 'g', Key::G },
+ { 'h', Key::H },
+ { 'j', Key::J },
+ { 'k', Key::K },
+ { 'l', Key::L },
+ { ';', Key::SEMICOLON },
+ { ':', Key::COLON },
+ { '\'', Key::APOSTROPHE },
+ { '\"', Key::QUOTEDBL },
+ { '\\', Key::BACKSLASH },
+ { '#', Key::NUMBERSIGN },
+ { 'z', Key::Z },
+ { 'x', Key::X },
+ { 'c', Key::C },
+ { 'v', Key::V },
+ { 'b', Key::B },
+ { 'n', Key::N },
+ { 'm', Key::M },
+ { ',', Key::COMMA },
+ { '.', Key::PERIOD },
+ { '/', Key::SLASH }
};
static Key remapKey(unsigned int key, unsigned int state) {
@@ -1355,7 +1345,7 @@ inline void sendScrollEvent(DisplayServer::WindowID window_id, MouseButton butto
ERR_FAIL_COND(!DS_OSX->windows.has(window_id));
DisplayServerOSX::WindowData &wd = DS_OSX->windows[window_id];
- MouseButton mask = MouseButton(1 << (button - 1));
+ MouseButton mask = mouse_button_to_mask(button);
Ref<InputEventMouseButton> sc;
sc.instantiate();
@@ -1428,10 +1418,10 @@ inline void sendPanEvent(DisplayServer::WindowID window_id, double dx, double dy
sendPanEvent(window_id, deltaX, deltaY, [event modifierFlags]);
} else {
if (fabs(deltaX)) {
- sendScrollEvent(window_id, 0 > deltaX ? MOUSE_BUTTON_WHEEL_RIGHT : MOUSE_BUTTON_WHEEL_LEFT, fabs(deltaX * 0.3), [event modifierFlags]);
+ sendScrollEvent(window_id, 0 > deltaX ? MouseButton::WHEEL_RIGHT : MouseButton::WHEEL_LEFT, fabs(deltaX * 0.3), [event modifierFlags]);
}
if (fabs(deltaY)) {
- sendScrollEvent(window_id, 0 < deltaY ? MOUSE_BUTTON_WHEEL_UP : MOUSE_BUTTON_WHEEL_DOWN, fabs(deltaY * 0.3), [event modifierFlags]);
+ sendScrollEvent(window_id, 0 < deltaY ? MouseButton::WHEEL_UP : MouseButton::WHEEL_DOWN, fabs(deltaY * 0.3), [event modifierFlags]);
}
}
}
@@ -1930,6 +1920,7 @@ void DisplayServerOSX::mouse_set_mode(MouseMode p_mode) {
return;
}
+ WindowData &wd = windows[MAIN_WINDOW_ID];
if (p_mode == MOUSE_MODE_CAPTURED) {
// Apple Docs state that the display parameter is not used.
// "This parameter is not used. By default, you may pass kCGDirectMainDisplay."
@@ -1938,7 +1929,7 @@ void DisplayServerOSX::mouse_set_mode(MouseMode p_mode) {
CGDisplayHideCursor(kCGDirectMainDisplay);
}
CGAssociateMouseAndMouseCursorPosition(false);
- WindowData &wd = windows[MAIN_WINDOW_ID];
+ [wd.window_object setMovable:NO];
const NSRect contentRect = [wd.window_view frame];
NSRect pointInWindowRect = NSMakeRect(contentRect.size.width / 2, contentRect.size.height / 2, 0, 0);
NSPoint pointOnScreen = [[wd.window_view window] convertRectToScreen:pointInWindowRect].origin;
@@ -1948,17 +1939,21 @@ void DisplayServerOSX::mouse_set_mode(MouseMode p_mode) {
if (mouse_mode == MOUSE_MODE_VISIBLE || mouse_mode == MOUSE_MODE_CONFINED) {
CGDisplayHideCursor(kCGDirectMainDisplay);
}
+ [wd.window_object setMovable:YES];
CGAssociateMouseAndMouseCursorPosition(true);
} else if (p_mode == MOUSE_MODE_CONFINED) {
CGDisplayShowCursor(kCGDirectMainDisplay);
+ [wd.window_object setMovable:NO];
CGAssociateMouseAndMouseCursorPosition(false);
} else if (p_mode == MOUSE_MODE_CONFINED_HIDDEN) {
if (mouse_mode == MOUSE_MODE_VISIBLE || mouse_mode == MOUSE_MODE_CONFINED) {
CGDisplayHideCursor(kCGDirectMainDisplay);
}
+ [wd.window_object setMovable:NO];
CGAssociateMouseAndMouseCursorPosition(false);
} else { // MOUSE_MODE_VISIBLE
CGDisplayShowCursor(kCGDirectMainDisplay);
+ [wd.window_object setMovable:YES];
CGAssociateMouseAndMouseCursorPosition(true);
}
@@ -2587,7 +2582,7 @@ void DisplayServerOSX::_set_window_per_pixel_transparency_enabled(bool p_enabled
}
#endif
#if defined(GLES3_ENABLED)
- if (rendering_driver == "opengl_es") {
+ if (rendering_driver == "opengl3") {
//TODO - reimplement OpenGLES
}
#endif
@@ -2606,14 +2601,14 @@ void DisplayServerOSX::_set_window_per_pixel_transparency_enabled(bool p_enabled
}
#endif
#if defined(GLES3_ENABLED)
- if (rendering_driver == "opengl_es") {
+ if (rendering_driver == "opengl3") {
//TODO - reimplement OpenGLES
}
#endif
wd.layered_window = false;
}
#if defined(GLES3_ENABLED)
- if (rendering_driver == "opengl_es") {
+ if (rendering_driver == "opengl3") {
//TODO - reimplement OpenGLES
}
#endif
@@ -3210,12 +3205,12 @@ String DisplayServerOSX::keyboard_get_layout_name(int p_index) const {
}
Key DisplayServerOSX::keyboard_get_keycode_from_physical(Key p_keycode) const {
- if (p_keycode == KEY_PAUSE) {
+ if (p_keycode == Key::PAUSE) {
return p_keycode;
}
- unsigned int modifiers = p_keycode & KEY_MODIFIER_MASK;
- unsigned int keycode_no_mod = p_keycode & KEY_CODE_MASK;
+ Key modifiers = p_keycode & KeyModifierMask::MODIFIER_MASK;
+ Key keycode_no_mod = p_keycode & KeyModifierMask::CODE_MASK;
unsigned int osx_keycode = unmapKey((Key)keycode_no_mod);
return (Key)(remapKey(osx_keycode, 0) | modifiers);
}
@@ -3273,8 +3268,8 @@ void DisplayServerOSX::_send_event(NSEvent *p_event) {
_get_key_modifier_state([p_event modifierFlags], k);
k->set_window_id(DisplayServerOSX::INVALID_WINDOW_ID);
k->set_pressed(true);
- k->set_keycode(KEY_PERIOD);
- k->set_physical_keycode(KEY_PERIOD);
+ k->set_keycode(Key::PERIOD);
+ k->set_physical_keycode(Key::PERIOD);
k->set_echo([p_event isARepeat]);
Input::get_singleton()->parse_input_event(k);
@@ -3301,20 +3296,20 @@ void DisplayServerOSX::_process_key_events() {
_push_input(k);
} else {
// IME input
- if ((i == 0 && ke.keycode == 0) || (i > 0 && key_event_buffer[i - 1].keycode == 0)) {
+ if ((i == 0 && ke.keycode == Key::NONE) || (i > 0 && key_event_buffer[i - 1].keycode == Key::NONE)) {
k.instantiate();
k->set_window_id(ke.window_id);
_get_key_modifier_state(ke.osx_state, k);
k->set_pressed(ke.pressed);
k->set_echo(ke.echo);
- k->set_keycode(KEY_NONE);
- k->set_physical_keycode(KEY_NONE);
+ k->set_keycode(Key::NONE);
+ k->set_physical_keycode(Key::NONE);
k->set_unicode(ke.unicode);
_push_input(k);
}
- if (ke.keycode != 0) {
+ if (ke.keycode != Key::NONE) {
k.instantiate();
k->set_window_id(ke.window_id);
@@ -3324,7 +3319,7 @@ void DisplayServerOSX::_process_key_events() {
k->set_keycode(ke.keycode);
k->set_physical_keycode((Key)ke.physical_keycode);
- if (i + 1 < key_event_pos && key_event_buffer[i + 1].keycode == 0) {
+ if (i + 1 < key_event_pos && key_event_buffer[i + 1].keycode == Key::NONE) {
k->set_unicode(key_event_buffer[i + 1].unicode);
}
@@ -3455,18 +3450,31 @@ void DisplayServerOSX::set_icon(const Ref<Image> &p_icon) {
void DisplayServerOSX::window_set_vsync_mode(DisplayServer::VSyncMode p_vsync_mode, WindowID p_window) {
_THREAD_SAFE_METHOD_
+#if defined(GLES3_ENABLED)
+ if (rendering_driver == "opengl3") {
+ gl_manager->swap_buffers();
+ }
+#endif
#if defined(VULKAN_ENABLED)
- context_vulkan->set_vsync_mode(p_window, p_vsync_mode);
+ if (rendering_driver == "vulkan") {
+ context_vulkan->set_vsync_mode(p_window, p_vsync_mode);
+ }
#endif
}
DisplayServer::VSyncMode DisplayServerOSX::window_get_vsync_mode(WindowID p_window) const {
_THREAD_SAFE_METHOD_
+#if defined(GLES3_ENABLED)
+ if (rendering_driver == "opengl3") {
+ return (gl_manager->is_using_vsync() ? DisplayServer::VSyncMode::VSYNC_ENABLED : DisplayServer::VSyncMode::VSYNC_DISABLED);
+ }
+#endif
#if defined(VULKAN_ENABLED)
- return context_vulkan->get_vsync_mode(p_window);
-#else
- return DisplayServer::VSYNC_ENABLED;
+ if (rendering_driver == "vulkan") {
+ return context_vulkan->get_vsync_mode(p_window);
+ }
#endif
+ return DisplayServer::VSYNC_ENABLED;
}
Vector<String> DisplayServerOSX::get_rendering_drivers_func() {
@@ -3476,12 +3484,18 @@ Vector<String> DisplayServerOSX::get_rendering_drivers_func() {
drivers.push_back("vulkan");
#endif
#if defined(GLES3_ENABLED)
- drivers.push_back("opengl_es");
+ drivers.push_back("opengl3");
#endif
return drivers;
}
+void DisplayServerOSX::gl_window_make_current(DisplayServer::WindowID p_window_id) {
+#if defined(GLES3_ENABLED)
+ gl_manager->window_make_current(p_window_id);
+#endif
+}
+
Point2i DisplayServerOSX::ime_get_selection() const {
return im_selection;
}
@@ -3522,7 +3536,7 @@ ObjectID DisplayServerOSX::window_get_attached_instance_id(WindowID p_window) co
DisplayServer *DisplayServerOSX::create_func(const String &p_rendering_driver, WindowMode p_mode, VSyncMode p_vsync_mode, uint32_t p_flags, const Vector2i &p_resolution, Error &r_error) {
DisplayServer *ds = memnew(DisplayServerOSX(p_rendering_driver, p_mode, p_vsync_mode, p_flags, p_resolution, r_error));
if (r_error != OK) {
- OS::get_singleton()->alert("Your video card driver does not support any of the supported Metal versions.", "Unable to initialize Video driver");
+ OS::get_singleton()->alert("Your video card driver does not support any of the supported Vulkan or OpenGL versions.", "Unable to initialize Video driver");
}
return ds;
}
@@ -3580,8 +3594,11 @@ DisplayServerOSX::WindowID DisplayServerOSX::_create_window(WindowMode p_mode, V
}
#endif
#if defined(GLES3_ENABLED)
- if (rendering_driver == "opengl_es") {
- //TODO - reimplement OpenGLES
+ if (rendering_driver == "opengl3") {
+ if (gl_manager) {
+ Error err = gl_manager->window_create(window_id_counter, wd.window_view, p_rect.size.width, p_rect.size.height);
+ ERR_FAIL_COND_V_MSG(err != OK, INVALID_WINDOW_ID, "Can't create an OpenGL context");
+ }
}
#endif
id = window_id_counter++;
@@ -3601,8 +3618,8 @@ DisplayServerOSX::WindowID DisplayServerOSX::_create_window(WindowMode p_mode, V
}
#if defined(GLES3_ENABLED)
- if (rendering_driver == "opengl_es") {
- //TODO - reimplement OpenGLES
+ if (rendering_driver == "opengl3") {
+ gl_manager->window_resize(id, wd.size.width, wd.size.height);
}
#endif
#if defined(VULKAN_ENABLED)
@@ -3654,15 +3671,15 @@ void DisplayServerOSX::_dispatch_input_event(const Ref<InputEvent> &p_event) {
}
void DisplayServerOSX::release_rendering_thread() {
- //TODO - reimplement OpenGLES
}
void DisplayServerOSX::make_rendering_thread() {
- //TODO - reimplement OpenGLES
}
void DisplayServerOSX::swap_buffers() {
- //TODO - reimplement OpenGLES
+#if defined(GLES3_ENABLED)
+ gl_manager->swap_buffers();
+#endif
}
void DisplayServerOSX::console_set_visible(bool p_enabled) {
@@ -3753,14 +3770,17 @@ DisplayServerOSX::DisplayServerOSX(const String &p_rendering_driver, WindowMode
//TODO - do Vulkan and OpenGL support checks, driver selection and fallback
rendering_driver = p_rendering_driver;
-#ifndef _MSC_VER
-#warning Forcing vulkan rendering driver because OpenGL not implemented yet
-#endif
- rendering_driver = "vulkan";
-
#if defined(GLES3_ENABLED)
- if (rendering_driver == "opengl_es") {
- //TODO - reimplement OpenGLES
+ if (rendering_driver == "opengl3") {
+ GLManager_OSX::ContextType opengl_api_type = GLManager_OSX::GLES_3_0_COMPATIBLE;
+ gl_manager = memnew(GLManager_OSX(opengl_api_type));
+ if (gl_manager->initialize() != OK) {
+ memdelete(gl_manager);
+ gl_manager = nullptr;
+ r_error = ERR_UNAVAILABLE;
+ ERR_FAIL_MSG("Could not initialize OpenGL");
+ return;
+ }
}
#endif
#if defined(VULKAN_ENABLED)
@@ -3788,8 +3808,8 @@ DisplayServerOSX::DisplayServerOSX(const String &p_rendering_driver, WindowMode
show_window(MAIN_WINDOW_ID);
#if defined(GLES3_ENABLED)
- if (rendering_driver == "opengl_es") {
- //TODO - reimplement OpenGLES
+ if (rendering_driver == "opengl3") {
+ RasterizerGLES3::make_current();
}
#endif
#if defined(VULKAN_ENABLED)
@@ -3821,20 +3841,21 @@ DisplayServerOSX::~DisplayServerOSX() {
//destroy drivers
#if defined(GLES3_ENABLED)
- if (rendering_driver == "opengl_es") {
- //TODO - reimplement OpenGLES
+ if (gl_manager) {
+ memdelete(gl_manager);
+ gl_manager = nullptr;
}
#endif
#if defined(VULKAN_ENABLED)
- if (rendering_driver == "vulkan") {
- if (rendering_device_vulkan) {
- rendering_device_vulkan->finalize();
- memdelete(rendering_device_vulkan);
- }
+ if (rendering_device_vulkan) {
+ rendering_device_vulkan->finalize();
+ memdelete(rendering_device_vulkan);
+ rendering_device_vulkan = nullptr;
+ }
- if (context_vulkan) {
- memdelete(context_vulkan);
- }
+ if (context_vulkan) {
+ memdelete(context_vulkan);
+ context_vulkan = nullptr;
}
#endif
diff --git a/platform/osx/export/export_plugin.cpp b/platform/osx/export/export_plugin.cpp
index 1e80dcd97b..a88f7bb332 100644
--- a/platform/osx/export/export_plugin.cpp
+++ b/platform/osx/export/export_plugin.cpp
@@ -1048,8 +1048,21 @@ void EditorExportPlatformOSX::_zip_folder_recursive(zipFile &p_zip, const String
0x0314, // "version made by", 0x03 - Unix, 0x14 - ZIP specification version 2.0, required to store Unix file permissions
0);
- Vector<uint8_t> array = FileAccess::get_file_as_array(dir.plus_file(f));
- zipWriteInFileInZip(p_zip, array.ptr(), array.size());
+ FileAccessRef fa = FileAccess::open(dir.plus_file(f), FileAccess::READ);
+ if (!fa) {
+ ERR_FAIL_MSG("Can't open file to read from path '" + String(dir.plus_file(f)) + "'.");
+ }
+ const int bufsize = 16384;
+ uint8_t buf[bufsize];
+
+ while (true) {
+ uint64_t got = fa->get_buffer(buf, bufsize);
+ if (got == 0) {
+ break;
+ }
+ zipWriteInFileInZip(p_zip, buf, got);
+ }
+
zipCloseFileInZip(p_zip);
}
}
diff --git a/platform/osx/gl_manager_osx.h b/platform/osx/gl_manager_osx.h
new file mode 100644
index 0000000000..f86bc805c1
--- /dev/null
+++ b/platform/osx/gl_manager_osx.h
@@ -0,0 +1,106 @@
+/*************************************************************************/
+/* gl_manager_osx.h */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+
+#ifndef GL_MANAGER_OSX_H
+#define GL_MANAGER_OSX_H
+
+#if defined(OSX_ENABLED) && defined(GLES3_ENABLED)
+
+#include "core/error/error_list.h"
+#include "core/os/os.h"
+#include "core/templates/local_vector.h"
+#include "servers/display_server.h"
+
+#include <AppKit/AppKit.h>
+#include <ApplicationServices/ApplicationServices.h>
+#include <CoreVideo/CoreVideo.h>
+
+class GLManager_OSX {
+public:
+ enum ContextType {
+ GLES_3_0_COMPATIBLE,
+ };
+
+private:
+ struct GLWindow {
+ GLWindow() { in_use = false; }
+ bool in_use;
+
+ DisplayServer::WindowID window_id;
+ int width;
+ int height;
+
+ id window_view;
+ NSOpenGLContext *context;
+ };
+
+ LocalVector<GLWindow> _windows;
+
+ NSOpenGLContext *_shared_context = nullptr;
+ GLWindow *_current_window;
+
+ Error _create_context(GLWindow &win);
+ void _internal_set_current_window(GLWindow *p_win);
+
+ GLWindow &get_window(unsigned int id) { return _windows[id]; }
+ const GLWindow &get_window(unsigned int id) const { return _windows[id]; }
+
+ bool use_vsync;
+ ContextType context_type;
+
+public:
+ Error window_create(DisplayServer::WindowID p_window_id, id p_view, int p_width, int p_height);
+ void window_destroy(DisplayServer::WindowID p_window_id);
+ void window_resize(DisplayServer::WindowID p_window_id, int p_width, int p_height);
+
+ // get directly from the cached GLWindow
+ int window_get_width(DisplayServer::WindowID p_window_id = 0);
+ int window_get_height(DisplayServer::WindowID p_window_id = 0);
+
+ void release_current();
+ void make_current();
+ void swap_buffers();
+
+ void window_make_current(DisplayServer::WindowID p_window_id);
+
+ void window_update(DisplayServer::WindowID p_window_id);
+
+ Error initialize();
+
+ void set_use_vsync(bool p_use);
+ bool is_using_vsync() const;
+
+ GLManager_OSX(ContextType p_context_type);
+ ~GLManager_OSX();
+};
+
+#endif // defined(OSX_ENABLED) && defined(GLES3_ENABLED)
+
+#endif // GL_MANAGER_OSX_H
diff --git a/platform/osx/gl_manager_osx.mm b/platform/osx/gl_manager_osx.mm
new file mode 100644
index 0000000000..60e0706fc0
--- /dev/null
+++ b/platform/osx/gl_manager_osx.mm
@@ -0,0 +1,233 @@
+/*************************************************************************/
+/* gl_manager_osx.mm */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+
+#include "gl_manager_osx.h"
+
+#ifdef OSX_ENABLED
+#ifdef GLES3_ENABLED
+
+#include <stdio.h>
+#include <stdlib.h>
+
+Error GLManager_OSX::_create_context(GLWindow &win) {
+ NSOpenGLPixelFormatAttribute attributes[] = {
+ NSOpenGLPFADoubleBuffer,
+ NSOpenGLPFAClosestPolicy,
+ NSOpenGLPFAOpenGLProfile, NSOpenGLProfileVersion3_2Core,
+ NSOpenGLPFAColorSize, 32,
+ NSOpenGLPFADepthSize, 24,
+ NSOpenGLPFAStencilSize, 8,
+ 0
+ };
+
+ NSOpenGLPixelFormat *pixel_format = [[NSOpenGLPixelFormat alloc] initWithAttributes:attributes];
+ ERR_FAIL_COND_V(pixel_format == nil, ERR_CANT_CREATE);
+
+ win.context = [[NSOpenGLContext alloc] initWithFormat:pixel_format shareContext:_shared_context];
+ ERR_FAIL_COND_V(win.context == nil, ERR_CANT_CREATE);
+ if (_shared_context == nullptr) {
+ _shared_context = win.context;
+ }
+
+ [win.context setView:win.window_view];
+ [win.context makeCurrentContext];
+
+ return OK;
+}
+
+Error GLManager_OSX::window_create(DisplayServer::WindowID p_window_id, id p_view, int p_width, int p_height) {
+ if (p_window_id >= (int)_windows.size()) {
+ _windows.resize(p_window_id + 1);
+ }
+
+ GLWindow &win = _windows[p_window_id];
+ win.in_use = true;
+ win.window_id = p_window_id;
+ win.width = p_width;
+ win.height = p_height;
+ win.window_view = p_view;
+
+ if (_create_context(win) != OK) {
+ _windows.remove_at(_windows.size() - 1);
+ return FAILED;
+ }
+
+ window_make_current(_windows.size() - 1);
+
+ return OK;
+}
+
+void GLManager_OSX::_internal_set_current_window(GLWindow *p_win) {
+ _current_window = p_win;
+}
+
+void GLManager_OSX::window_resize(DisplayServer::WindowID p_window_id, int p_width, int p_height) {
+ if (p_window_id == -1) {
+ return;
+ }
+
+ GLWindow &win = _windows[p_window_id];
+ if (!win.in_use) {
+ return;
+ }
+
+ win.width = p_width;
+ win.height = p_height;
+
+ GLint dim[2];
+ dim[0] = p_width;
+ dim[1] = p_height;
+ CGLSetParameter((CGLContextObj)[win.context CGLContextObj], kCGLCPSurfaceBackingSize, &dim[0]);
+ CGLEnable((CGLContextObj)[win.context CGLContextObj], kCGLCESurfaceBackingSize);
+ if (OS::get_singleton()->is_hidpi_allowed()) {
+ [win.window_view setWantsBestResolutionOpenGLSurface:YES];
+ } else {
+ [win.window_view setWantsBestResolutionOpenGLSurface:NO];
+ }
+
+ [win.context update];
+}
+
+int GLManager_OSX::window_get_width(DisplayServer::WindowID p_window_id) {
+ return get_window(p_window_id).width;
+}
+
+int GLManager_OSX::window_get_height(DisplayServer::WindowID p_window_id) {
+ return get_window(p_window_id).height;
+}
+
+void GLManager_OSX::window_destroy(DisplayServer::WindowID p_window_id) {
+ GLWindow &win = get_window(p_window_id);
+ win.in_use = false;
+
+ if (_current_window == &win) {
+ _current_window = nullptr;
+ }
+}
+
+void GLManager_OSX::release_current() {
+ if (!_current_window) {
+ return;
+ }
+
+ [NSOpenGLContext clearCurrentContext];
+}
+
+void GLManager_OSX::window_make_current(DisplayServer::WindowID p_window_id) {
+ if (p_window_id == -1) {
+ return;
+ }
+
+ GLWindow &win = _windows[p_window_id];
+ if (!win.in_use) {
+ return;
+ }
+
+ if (&win == _current_window) {
+ return;
+ }
+
+ [win.context makeCurrentContext];
+
+ _internal_set_current_window(&win);
+}
+
+void GLManager_OSX::make_current() {
+ if (!_current_window) {
+ return;
+ }
+ if (!_current_window->in_use) {
+ WARN_PRINT("current window not in use!");
+ return;
+ }
+ [_current_window->context makeCurrentContext];
+}
+
+void GLManager_OSX::swap_buffers() {
+ // NO NEED TO CALL SWAP BUFFERS for each window...
+ // see https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/glXSwapBuffers.xml
+
+ if (!_current_window) {
+ return;
+ }
+ if (!_current_window->in_use) {
+ WARN_PRINT("current window not in use!");
+ return;
+ }
+ [_current_window->context flushBuffer];
+}
+
+void GLManager_OSX::window_update(DisplayServer::WindowID p_window_id) {
+ if (p_window_id == -1) {
+ return;
+ }
+
+ GLWindow &win = _windows[p_window_id];
+ if (!win.in_use) {
+ return;
+ }
+
+ if (&win == _current_window) {
+ return;
+ }
+
+ [win.context update];
+}
+
+Error GLManager_OSX::initialize() {
+ return OK;
+}
+
+void GLManager_OSX::set_use_vsync(bool p_use) {
+ use_vsync = p_use;
+ CGLContextObj ctx = CGLGetCurrentContext();
+ if (ctx) {
+ GLint swapInterval = p_use ? 1 : 0;
+ CGLSetParameter(ctx, kCGLCPSwapInterval, &swapInterval);
+ use_vsync = p_use;
+ }
+}
+
+bool GLManager_OSX::is_using_vsync() const {
+ return use_vsync;
+}
+
+GLManager_OSX::GLManager_OSX(ContextType p_context_type) {
+ context_type = p_context_type;
+ use_vsync = false;
+ _current_window = nullptr;
+}
+
+GLManager_OSX::~GLManager_OSX() {
+ release_current();
+}
+
+#endif // GLES3_ENABLED
+#endif // OSX
diff --git a/platform/osx/joypad_osx.cpp b/platform/osx/joypad_osx.cpp
index 46ed651384..48d165d30b 100644
--- a/platform/osx/joypad_osx.cpp
+++ b/platform/osx/joypad_osx.cpp
@@ -58,6 +58,7 @@ void joypad::free() {
if (ff_device) {
FFDeviceReleaseEffect(ff_device, ff_object);
FFReleaseDevice(ff_device);
+ ff_device = nullptr;
memfree(ff_axes);
memfree(ff_directions);
}
@@ -243,7 +244,7 @@ void JoypadOSX::_device_added(IOReturn p_res, IOHIDDeviceRef p_device) {
if (is_joypad(p_device)) {
configure_joypad(p_device, &new_joypad);
#if MAC_OS_X_VERSION_MIN_REQUIRED < 1060
- if (IOHIDDeviceGetService != nullptr) {
+ if (IOHIDDeviceGetService) {
#endif
const io_service_t ioservice = IOHIDDeviceGetService(p_device);
if ((ioservice) && (FFIsForceFeedback(ioservice) == FF_OK) && new_joypad.config_force_feedback(ioservice)) {
@@ -263,7 +264,7 @@ void JoypadOSX::_device_removed(IOReturn p_res, IOHIDDeviceRef p_device) {
input->joy_connection_changed(device_list[device].id, false, "");
device_list.write[device].free();
- device_list.remove(device);
+ device_list.remove_at(device);
}
static String _hex_str(uint8_t p_byte) {
@@ -348,6 +349,7 @@ bool JoypadOSX::configure_joypad(IOHIDDeviceRef p_device_ref, joypad *p_joy) {
{ \
if (ret != FF_OK) { \
FFReleaseDevice(ff_device); \
+ ff_device = nullptr; \
return false; \
} \
}
@@ -367,6 +369,7 @@ bool joypad::config_force_feedback(io_service_t p_service) {
return true;
}
FFReleaseDevice(ff_device);
+ ff_device = nullptr;
return false;
}
#undef FF_ERR
@@ -397,10 +400,10 @@ bool joypad::check_ff_features() {
return false;
}
-static int process_hat_value(int p_min, int p_max, int p_value, bool p_offset_hat) {
+static HatMask process_hat_value(int p_min, int p_max, int p_value, bool p_offset_hat) {
int range = (p_max - p_min + 1);
int value = p_value - p_min;
- int hat_value = HatMask::HAT_MASK_CENTER;
+ HatMask hat_value = HatMask::CENTER;
if (range == 4) {
value *= 2;
}
@@ -410,31 +413,31 @@ static int process_hat_value(int p_min, int p_max, int p_value, bool p_offset_ha
switch (value) {
case 0:
- hat_value = (HatMask)HatMask::HAT_MASK_UP;
+ hat_value = HatMask::UP;
break;
case 1:
- hat_value = (HatMask)(HatMask::HAT_MASK_UP | HatMask::HAT_MASK_RIGHT);
+ hat_value = (HatMask::UP | HatMask::RIGHT);
break;
case 2:
- hat_value = (HatMask)HatMask::HAT_MASK_RIGHT;
+ hat_value = HatMask::RIGHT;
break;
case 3:
- hat_value = (HatMask)(HatMask::HAT_MASK_DOWN | HatMask::HAT_MASK_RIGHT);
+ hat_value = (HatMask::DOWN | HatMask::RIGHT);
break;
case 4:
- hat_value = (HatMask)HatMask::HAT_MASK_DOWN;
+ hat_value = HatMask::DOWN;
break;
case 5:
- hat_value = (HatMask)(HatMask::HAT_MASK_DOWN | HatMask::HAT_MASK_LEFT);
+ hat_value = (HatMask::DOWN | HatMask::LEFT);
break;
case 6:
- hat_value = (HatMask)HatMask::HAT_MASK_LEFT;
+ hat_value = HatMask::LEFT;
break;
case 7:
- hat_value = (HatMask)(HatMask::HAT_MASK_UP | HatMask::HAT_MASK_LEFT);
+ hat_value = (HatMask::UP | HatMask::LEFT);
break;
default:
- hat_value = (HatMask)HatMask::HAT_MASK_CENTER;
+ hat_value = HatMask::CENTER;
break;
}
return hat_value;
@@ -480,8 +483,8 @@ void JoypadOSX::process_joypads() {
for (int j = 0; j < joy.hat_elements.size(); j++) {
rec_element &elem = joy.hat_elements.write[j];
int value = joy.get_hid_element_state(&elem);
- int hat_value = process_hat_value(elem.min, elem.max, value, joy.offset_hat);
- input->joy_hat(joy.id, (HatMask)hat_value);
+ HatMask hat_value = process_hat_value(elem.min, elem.max, value, joy.offset_hat);
+ input->joy_hat(joy.id, hat_value);
}
if (joy.ffservice) {
@@ -601,7 +604,7 @@ JoypadOSX::JoypadOSX(Input *in) {
if (array) {
hid_manager = IOHIDManagerCreate(kCFAllocatorDefault, kIOHIDOptionsTypeNone);
- if (hid_manager != nullptr) {
+ if (hid_manager) {
config_hid_manager(array);
}
CFRelease(array);
diff --git a/platform/osx/joypad_osx.h b/platform/osx/joypad_osx.h
index 3048ecf39e..2ba7f0d950 100644
--- a/platform/osx/joypad_osx.h
+++ b/platform/osx/joypad_osx.h
@@ -68,8 +68,8 @@ struct joypad {
io_service_t ffservice = 0; /* Interface for force feedback, 0 = no ff */
FFCONSTANTFORCE ff_constant_force;
- FFDeviceObjectReference ff_device;
- FFEffectObjectReference ff_object;
+ FFDeviceObjectReference ff_device = nullptr;
+ FFEffectObjectReference ff_object = nullptr;
uint64_t ff_timestamp = 0;
LONG *ff_directions = nullptr;
FFEFFECT ff_effect;
diff --git a/platform/osx/os_osx.h b/platform/osx/os_osx.h
index a52436a70a..7e02f4e154 100644
--- a/platform/osx/os_osx.h
+++ b/platform/osx/os_osx.h
@@ -57,6 +57,8 @@ class OS_OSX : public OS_Unix {
MainLoop *main_loop;
+ static void pre_wait_observer_cb(CFRunLoopObserverRef p_observer, CFRunLoopActivity p_activiy, void *p_context);
+
public:
String open_with_filename;
@@ -92,6 +94,8 @@ public:
String get_locale() const override;
virtual String get_executable_path() const override;
+ virtual Error create_process(const String &p_path, const List<String> &p_arguments, ProcessID *r_child_id = nullptr) override;
+ virtual Error create_instance(const List<String> &p_arguments, ProcessID *r_child_id = nullptr) override;
virtual String get_unique_id() const override; //++
diff --git a/platform/osx/os_osx.mm b/platform/osx/os_osx.mm
index 489cbe074b..45a81be80a 100644
--- a/platform/osx/os_osx.mm
+++ b/platform/osx/os_osx.mm
@@ -491,14 +491,89 @@ String OS_OSX::get_executable_path() const {
}
}
+Error OS_OSX::create_instance(const List<String> &p_arguments, ProcessID *r_child_id) {
+ // If executable is bundled, always execute editor instances as an app bundle to ensure app window is registered and activated correctly.
+ NSString *nsappname = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleName"];
+ if (nsappname != nil) {
+ String path;
+ path.parse_utf8([[[NSBundle mainBundle] bundlePath] UTF8String]);
+ return create_process(path, p_arguments, r_child_id);
+ } else {
+ return create_process(get_executable_path(), p_arguments, r_child_id);
+ }
+}
+
+Error OS_OSX::create_process(const String &p_path, const List<String> &p_arguments, ProcessID *r_child_id) {
+ if (@available(macOS 10.15, *)) {
+ // Use NSWorkspace if path is an .app bundle.
+ NSURL *url = [NSURL fileURLWithPath:@(p_path.utf8().get_data())];
+ NSBundle *bundle = [NSBundle bundleWithURL:url];
+ if (bundle) {
+ NSMutableArray *arguments = [[NSMutableArray alloc] init];
+ for (const List<String>::Element *E = p_arguments.front(); E; E = E->next()) {
+ [arguments addObject:[NSString stringWithUTF8String:E->get().utf8().get_data()]];
+ }
+ NSWorkspaceOpenConfiguration *configuration = [[NSWorkspaceOpenConfiguration alloc] init];
+ [configuration setArguments:arguments];
+ [configuration setCreatesNewApplicationInstance:YES];
+ __block dispatch_semaphore_t lock = dispatch_semaphore_create(0);
+ __block Error err = ERR_TIMEOUT;
+ __block pid_t pid = 0;
+ [[NSWorkspace sharedWorkspace] openApplicationAtURL:url
+ configuration:configuration
+ completionHandler:^(NSRunningApplication *app, NSError *error) {
+ if (error) {
+ err = ERR_CANT_FORK;
+ NSLog(@"Failed to execute: %@", error.localizedDescription);
+ } else {
+ pid = [app processIdentifier];
+ err = OK;
+ }
+ dispatch_semaphore_signal(lock);
+ }];
+ dispatch_semaphore_wait(lock, dispatch_time(DISPATCH_TIME_NOW, 20000000000)); // 20 sec timeout, wait for app to launch.
+ dispatch_release(lock);
+
+ if (err == OK) {
+ if (r_child_id) {
+ *r_child_id = (ProcessID)pid;
+ }
+ }
+
+ return err;
+ } else {
+ return OS_Unix::create_process(p_path, p_arguments, r_child_id);
+ }
+ } else {
+ return OS_Unix::create_process(p_path, p_arguments, r_child_id);
+ }
+}
+
+void OS_OSX::pre_wait_observer_cb(CFRunLoopObserverRef p_observer, CFRunLoopActivity p_activiy, void *p_context) {
+ // Prevent main loop from sleeping and redraw window during resize / modal popups.
+
+ if (get_singleton()->get_main_loop()) {
+ Main::force_redraw();
+ if (!Main::is_iterating()) { // Avoid cyclic loop.
+ Main::iteration();
+ }
+ }
+
+ CFRunLoopWakeUp(CFRunLoopGetCurrent()); // Prevent main loop from sleeping.
+}
+
void OS_OSX::run() {
force_quit = false;
- if (!main_loop)
+ if (!main_loop) {
return;
+ }
main_loop->initialize();
+ CFRunLoopObserverRef pre_wait_observer = CFRunLoopObserverCreate(kCFAllocatorDefault, kCFRunLoopBeforeWaiting, true, 0, &pre_wait_observer_cb, nullptr);
+ CFRunLoopAddObserver(CFRunLoopGetCurrent(), pre_wait_observer, kCFRunLoopCommonModes);
+
bool quit = false;
while (!force_quit && !quit) {
@try {
@@ -514,6 +589,10 @@ void OS_OSX::run() {
ERR_PRINT("NSException: " + String([exception reason].UTF8String));
}
};
+
+ CFRunLoopRemoveObserver(CFRunLoopGetCurrent(), pre_wait_observer, kCFRunLoopCommonModes);
+ CFRelease(pre_wait_observer);
+
main_loop->finalize();
}
diff --git a/platform/uwp/export/export_plugin.cpp b/platform/uwp/export/export_plugin.cpp
index a54b85a803..192814efe4 100644
--- a/platform/uwp/export/export_plugin.cpp
+++ b/platform/uwp/export/export_plugin.cpp
@@ -376,7 +376,7 @@ Error EditorExportPlatformUWP::export_project(const Ref<EditorExportPreset> &p_p
Vector<String> cl = ((String)p_preset->get("command_line/extra_args")).strip_edges().split(" ");
for (int i = 0; i < cl.size(); i++) {
if (cl[i].strip_edges().length() == 0) {
- cl.remove(i);
+ cl.remove_at(i);
i--;
}
}
diff --git a/platform/uwp/joypad_uwp.cpp b/platform/uwp/joypad_uwp.cpp
index b419fb4fae..f8eb4fc96d 100644
--- a/platform/uwp/joypad_uwp.cpp
+++ b/platform/uwp/joypad_uwp.cpp
@@ -58,12 +58,12 @@ void JoypadUWP::process_controllers() {
button_mask *= 2;
}
- input->joy_axis(joy.id, JOY_AXIS_LEFT_X, axis_correct(reading.LeftThumbstickX));
- input->joy_axis(joy.id, JOY_AXIS_LEFT_Y, axis_correct(reading.LeftThumbstickY, true));
- input->joy_axis(joy.id, JOY_AXIS_RIGHT_X, axis_correct(reading.RightThumbstickX));
- input->joy_axis(joy.id, JOY_AXIS_RIGHT_Y, axis_correct(reading.RightThumbstickY, true));
- input->joy_axis(joy.id, JOY_AXIS_TRIGGER_LEFT, axis_correct(reading.LeftTrigger, false, true));
- input->joy_axis(joy.id, JOY_AXIS_TRIGGER_RIGHT, axis_correct(reading.RightTrigger, false, true));
+ input->joy_axis(joy.id, JoyAxis::LEFT_X, axis_correct(reading.LeftThumbstickX));
+ input->joy_axis(joy.id, JoyAxis::LEFT_Y, axis_correct(reading.LeftThumbstickY, true));
+ input->joy_axis(joy.id, JoyAxis::RIGHT_X, axis_correct(reading.RightThumbstickX));
+ input->joy_axis(joy.id, JoyAxis::RIGHT_Y, axis_correct(reading.RightThumbstickY, true));
+ input->joy_axis(joy.id, JoyAxis::TRIGGER_LEFT, axis_correct(reading.LeftTrigger, false, true));
+ input->joy_axis(joy.id, JoyAxis::TRIGGER_RIGHT, axis_correct(reading.RightTrigger, false, true));
uint64_t timestamp = input->get_joy_vibration_timestamp(joy.id);
if (timestamp > joy.ff_timestamp) {
diff --git a/platform/uwp/os_uwp.h b/platform/uwp/os_uwp.h
index 74a9e96b2c..0b4d6b73b6 100644
--- a/platform/uwp/os_uwp.h
+++ b/platform/uwp/os_uwp.h
@@ -59,7 +59,7 @@ public:
bool alt = false, shift = false, control = false;
MessageType type = KEY_EVENT_MESSAGE;
bool pressed = false;
- Key keycode = KEY_NONE;
+ Key keycode = Key::NONE;
unsigned int physical_keycode = 0;
unsigned int unicode = 0;
bool echo = false;
@@ -107,7 +107,7 @@ private:
bool control_mem;
bool meta_mem;
bool force_quit;
- MouseButton last_button_state = MOUSE_BUTTON_NONE;
+ MouseButton last_button_state = MouseButton::NONE;
CursorShape cursor_shape;
diff --git a/platform/windows/detect.py b/platform/windows/detect.py
index 22fbbeb74f..aaaa50e729 100644
--- a/platform/windows/detect.py
+++ b/platform/windows/detect.py
@@ -206,6 +206,8 @@ def configure_msvc(env, manual_msvc_config):
elif env["target"] == "debug":
env.AppendUnique(CCFLAGS=["/Zi", "/FS", "/Od", "/EHsc"])
+ # Allow big objects. Only needed for debug, see MinGW branch for rationale.
+ env.AppendUnique(CCFLAGS=["/bigobj"])
env.Append(LINKFLAGS=["/DEBUG"])
if env["debug_symbols"]:
@@ -226,9 +228,9 @@ def configure_msvc(env, manual_msvc_config):
env.AppendUnique(CCFLAGS=["/MD"])
env.AppendUnique(CCFLAGS=["/Gd", "/GR", "/nologo"])
- # Force to use Unicode encoding
- env.AppendUnique(CCFLAGS=["/utf-8"])
+ env.AppendUnique(CCFLAGS=["/utf-8"]) # Force to use Unicode encoding.
env.AppendUnique(CXXFLAGS=["/TP"]) # assume all sources are C++
+
if manual_msvc_config: # should be automatic if SCons found it
if os.getenv("WindowsSdkDir") is not None:
env.Prepend(CPPPATH=[os.getenv("WindowsSdkDir") + "/Include"])
@@ -358,6 +360,10 @@ def configure_mingw(env):
elif env["target"] == "debug":
env.Append(CCFLAGS=["-g3"])
+ # Allow big objects. It's supposed not to have drawbacks but seems to break
+ # GCC LTO, so enabling for debug builds only (which are not built with LTO
+ # and are the only ones with too big objects).
+ env.Append(CCFLAGS=["-Wa,-mbig-obj"])
if env["windows_subsystem"] == "gui":
env.Append(LINKFLAGS=["-Wl,--subsystem,windows"])
diff --git a/platform/windows/display_server_windows.cpp b/platform/windows/display_server_windows.cpp
index e2c9951692..9fe15366f4 100644
--- a/platform/windows/display_server_windows.cpp
+++ b/platform/windows/display_server_windows.cpp
@@ -42,6 +42,11 @@
#include "drivers/gles3/rasterizer_gles3.h"
#endif
+#if defined(__GNUC__)
+// Workaround GCC warning from -Wcast-function-type.
+#define GetProcAddress (void *)GetProcAddress
+#endif
+
static String format_error_message(DWORD id) {
LPWSTR messageBuffer = nullptr;
size_t size = FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
@@ -1495,13 +1500,13 @@ String DisplayServerWindows::keyboard_get_layout_language(int p_index) const {
}
Key DisplayServerWindows::keyboard_get_keycode_from_physical(Key p_keycode) const {
- unsigned int modifiers = p_keycode & KEY_MODIFIER_MASK;
- Key keycode_no_mod = (Key)(p_keycode & KEY_CODE_MASK);
+ Key modifiers = p_keycode & KeyModifierMask::MODIFIER_MASK;
+ Key keycode_no_mod = (Key)(p_keycode & KeyModifierMask::CODE_MASK);
- if (keycode_no_mod == KEY_PRINT ||
- keycode_no_mod == KEY_KP_ADD ||
- keycode_no_mod == KEY_KP_5 ||
- (keycode_no_mod >= KEY_0 && keycode_no_mod <= KEY_9)) {
+ if (keycode_no_mod == Key::PRINT ||
+ keycode_no_mod == Key::KP_ADD ||
+ keycode_no_mod == Key::KP_5 ||
+ (keycode_no_mod >= Key::KEY_0 && keycode_no_mod <= Key::KEY_9)) {
return p_keycode;
}
@@ -1521,10 +1526,10 @@ Key DisplayServerWindows::keyboard_get_keycode_from_physical(Key p_keycode) cons
// we limit these to ASCII to fix some layouts, including Arabic ones
if (char_code >= 32 && char_code <= 127) {
// Godot uses 'braces' instead of 'brackets'
- if (char_code == KEY_BRACKETLEFT || char_code == KEY_BRACKETRIGHT) {
+ if (char_code == (unsigned int)Key::BRACKETLEFT || char_code == (unsigned int)Key::BRACKETRIGHT) {
char_code += 32;
}
- return (Key)(char_code | modifiers);
+ return (Key)(char_code | (unsigned int)modifiers);
}
return (Key)(KeyMappingWindows::get_keysym(vk) | modifiers);
@@ -2461,41 +2466,41 @@ LRESULT DisplayServerWindows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARA
switch (uMsg) {
case WM_LBUTTONDOWN: {
mb->set_pressed(true);
- mb->set_button_index(MOUSE_BUTTON_LEFT);
+ mb->set_button_index(MouseButton::LEFT);
} break;
case WM_LBUTTONUP: {
mb->set_pressed(false);
- mb->set_button_index(MOUSE_BUTTON_LEFT);
+ mb->set_button_index(MouseButton::LEFT);
} break;
case WM_MBUTTONDOWN: {
mb->set_pressed(true);
- mb->set_button_index(MOUSE_BUTTON_MIDDLE);
+ mb->set_button_index(MouseButton::MIDDLE);
} break;
case WM_MBUTTONUP: {
mb->set_pressed(false);
- mb->set_button_index(MOUSE_BUTTON_MIDDLE);
+ mb->set_button_index(MouseButton::MIDDLE);
} break;
case WM_RBUTTONDOWN: {
mb->set_pressed(true);
- mb->set_button_index(MOUSE_BUTTON_RIGHT);
+ mb->set_button_index(MouseButton::RIGHT);
} break;
case WM_RBUTTONUP: {
mb->set_pressed(false);
- mb->set_button_index(MOUSE_BUTTON_RIGHT);
+ mb->set_button_index(MouseButton::RIGHT);
} break;
case WM_LBUTTONDBLCLK: {
mb->set_pressed(true);
- mb->set_button_index(MOUSE_BUTTON_LEFT);
+ mb->set_button_index(MouseButton::LEFT);
mb->set_double_click(true);
} break;
case WM_RBUTTONDBLCLK: {
mb->set_pressed(true);
- mb->set_button_index(MOUSE_BUTTON_RIGHT);
+ mb->set_button_index(MouseButton::RIGHT);
mb->set_double_click(true);
} break;
case WM_MBUTTONDBLCLK: {
mb->set_pressed(true);
- mb->set_button_index(MOUSE_BUTTON_MIDDLE);
+ mb->set_button_index(MouseButton::MIDDLE);
mb->set_double_click(true);
} break;
case WM_MOUSEWHEEL: {
@@ -2506,9 +2511,9 @@ LRESULT DisplayServerWindows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARA
}
if (motion > 0) {
- mb->set_button_index(MOUSE_BUTTON_WHEEL_UP);
+ mb->set_button_index(MouseButton::WHEEL_UP);
} else {
- mb->set_button_index(MOUSE_BUTTON_WHEEL_DOWN);
+ mb->set_button_index(MouseButton::WHEEL_DOWN);
}
mb->set_factor(fabs((double)motion / (double)WHEEL_DELTA));
} break;
@@ -2520,34 +2525,34 @@ LRESULT DisplayServerWindows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARA
}
if (motion < 0) {
- mb->set_button_index(MOUSE_BUTTON_WHEEL_LEFT);
+ mb->set_button_index(MouseButton::WHEEL_LEFT);
} else {
- mb->set_button_index(MOUSE_BUTTON_WHEEL_RIGHT);
+ mb->set_button_index(MouseButton::WHEEL_RIGHT);
}
mb->set_factor(fabs((double)motion / (double)WHEEL_DELTA));
} break;
case WM_XBUTTONDOWN: {
mb->set_pressed(true);
if (HIWORD(wParam) == XBUTTON1) {
- mb->set_button_index(MOUSE_BUTTON_XBUTTON1);
+ mb->set_button_index(MouseButton::MB_XBUTTON1);
} else {
- mb->set_button_index(MOUSE_BUTTON_XBUTTON2);
+ mb->set_button_index(MouseButton::MB_XBUTTON2);
}
} break;
case WM_XBUTTONUP: {
mb->set_pressed(false);
if (HIWORD(wParam) == XBUTTON1) {
- mb->set_button_index(MOUSE_BUTTON_XBUTTON1);
+ mb->set_button_index(MouseButton::MB_XBUTTON1);
} else {
- mb->set_button_index(MOUSE_BUTTON_XBUTTON2);
+ mb->set_button_index(MouseButton::MB_XBUTTON2);
}
} break;
case WM_XBUTTONDBLCLK: {
mb->set_pressed(true);
if (HIWORD(wParam) == XBUTTON1) {
- mb->set_button_index(MOUSE_BUTTON_XBUTTON1);
+ mb->set_button_index(MouseButton::MB_XBUTTON1);
} else {
- mb->set_button_index(MOUSE_BUTTON_XBUTTON2);
+ mb->set_button_index(MouseButton::MB_XBUTTON2);
}
mb->set_double_click(true);
} break;
@@ -2561,9 +2566,9 @@ LRESULT DisplayServerWindows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARA
mb->set_alt_pressed(alt_mem);
// mb->is_alt_pressed()=(wParam&MK_MENU)!=0;
if (mb->is_pressed()) {
- last_button_state |= MouseButton(1 << (mb->get_button_index() - 1));
+ last_button_state |= mouse_button_to_mask(mb->get_button_index());
} else {
- last_button_state &= (MouseButton) ~(1 << (mb->get_button_index() - 1));
+ last_button_state &= ~mouse_button_to_mask(mb->get_button_index());
}
mb->set_button_mask(last_button_state);
@@ -2599,11 +2604,11 @@ LRESULT DisplayServerWindows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARA
mb->set_global_position(mb->get_position());
Input::get_singleton()->parse_input_event(mb);
- if (mb->is_pressed() && mb->get_button_index() > 3 && mb->get_button_index() < 8) {
+ if (mb->is_pressed() && mb->get_button_index() >= MouseButton::WHEEL_UP && mb->get_button_index() <= MouseButton::WHEEL_RIGHT) {
// Send release for mouse wheel.
Ref<InputEventMouseButton> mbd = mb->duplicate();
mbd->set_window_id(window_id);
- last_button_state &= (MouseButton) ~(1 << (mbd->get_button_index() - 1));
+ last_button_state &= ~mouse_button_to_mask(mbd->get_button_index());
mbd->set_button_mask(last_button_state);
mbd->set_pressed(false);
Input::get_singleton()->parse_input_event(mbd);
@@ -2953,7 +2958,7 @@ void DisplayServerWindows::_process_key_events() {
if ((ke.lParam & (1 << 24)) && (ke.wParam == VK_RETURN)) {
// Special case for Numpad Enter key.
- k->set_keycode(KEY_KP_ENTER);
+ k->set_keycode(Key::KP_ENTER);
} else {
k->set_keycode((Key)KeyMappingWindows::get_keysym(ke.wParam));
}
diff --git a/platform/windows/display_server_windows.h b/platform/windows/display_server_windows.h
index 8e2c346d5b..a59f8ebb44 100644
--- a/platform/windows/display_server_windows.h
+++ b/platform/windows/display_server_windows.h
@@ -410,7 +410,7 @@ class DisplayServerWindows : public DisplayServer {
bool shift_mem = false;
bool control_mem = false;
bool meta_mem = false;
- MouseButton last_button_state = MOUSE_BUTTON_NONE;
+ MouseButton last_button_state = MouseButton::NONE;
bool use_raw_input = false;
bool drop_events = false;
bool in_dispatch_input_event = false;
diff --git a/platform/windows/gl_manager_windows.cpp b/platform/windows/gl_manager_windows.cpp
index 98205d6282..fe98f8b0ba 100644
--- a/platform/windows/gl_manager_windows.cpp
+++ b/platform/windows/gl_manager_windows.cpp
@@ -77,7 +77,7 @@ int GLManager_Windows::_find_or_create_display(GLWindow &win) {
if (err != OK) {
// not good
// delete the _display?
- _displays.remove(new_display_id);
+ _displays.remove_at(new_display_id);
return -1;
}
@@ -193,13 +193,10 @@ Error GLManager_Windows::window_create(DisplayServer::WindowID p_window_id, HWND
if (win.gldisplay_id == -1) {
// release DC?
- _windows.remove(_windows.size() - 1);
+ _windows.remove_at(_windows.size() - 1);
return FAILED;
}
- // the display could be invalid .. check NYI
- GLDisplay &gl_display = _displays[win.gldisplay_id];
-
// make current
window_make_current(_windows.size() - 1);
diff --git a/platform/windows/joypad_windows.cpp b/platform/windows/joypad_windows.cpp
index 94da63e49d..1d3761ee83 100644
--- a/platform/windows/joypad_windows.cpp
+++ b/platform/windows/joypad_windows.cpp
@@ -334,12 +334,12 @@ void JoypadWindows::process_joypads() {
button_mask = button_mask * 2;
}
- input->joy_axis(joy.id, JOY_AXIS_LEFT_X, axis_correct(joy.state.Gamepad.sThumbLX, true));
- input->joy_axis(joy.id, JOY_AXIS_LEFT_Y, axis_correct(joy.state.Gamepad.sThumbLY, true, false, true));
- input->joy_axis(joy.id, JOY_AXIS_RIGHT_X, axis_correct(joy.state.Gamepad.sThumbRX, true));
- input->joy_axis(joy.id, JOY_AXIS_RIGHT_Y, axis_correct(joy.state.Gamepad.sThumbRY, true, false, true));
- input->joy_axis(joy.id, JOY_AXIS_TRIGGER_LEFT, axis_correct(joy.state.Gamepad.bLeftTrigger, true, true));
- input->joy_axis(joy.id, JOY_AXIS_TRIGGER_RIGHT, axis_correct(joy.state.Gamepad.bRightTrigger, true, true));
+ input->joy_axis(joy.id, JoyAxis::LEFT_X, axis_correct(joy.state.Gamepad.sThumbLX, true));
+ input->joy_axis(joy.id, JoyAxis::LEFT_Y, axis_correct(joy.state.Gamepad.sThumbLY, true, false, true));
+ input->joy_axis(joy.id, JoyAxis::RIGHT_X, axis_correct(joy.state.Gamepad.sThumbRX, true));
+ input->joy_axis(joy.id, JoyAxis::RIGHT_Y, axis_correct(joy.state.Gamepad.sThumbRY, true, false, true));
+ input->joy_axis(joy.id, JoyAxis::TRIGGER_LEFT, axis_correct(joy.state.Gamepad.bLeftTrigger, true, true));
+ input->joy_axis(joy.id, JoyAxis::TRIGGER_RIGHT, axis_correct(joy.state.Gamepad.bRightTrigger, true, true));
joy.last_packet = joy.state.dwPacketNumber;
}
uint64_t timestamp = input->get_joy_vibration_timestamp(joy.id);
@@ -417,31 +417,31 @@ void JoypadWindows::post_hat(int p_device, DWORD p_dpad) {
// BOOL POVCentered = (LOWORD(dwPOV) == 0xFFFF);"
// https://docs.microsoft.com/en-us/previous-versions/windows/desktop/ee416628(v%3Dvs.85)#remarks
if (LOWORD(p_dpad) == 0xFFFF) {
- dpad_val = (HatMask)HatMask::HAT_MASK_CENTER;
+ dpad_val = (HatMask)HatMask::CENTER;
}
if (p_dpad == 0) {
- dpad_val = (HatMask)HatMask::HAT_MASK_UP;
+ dpad_val = (HatMask)HatMask::UP;
} else if (p_dpad == 4500) {
- dpad_val = (HatMask)(HatMask::HAT_MASK_UP | HatMask::HAT_MASK_RIGHT);
+ dpad_val = (HatMask)(HatMask::UP | HatMask::RIGHT);
} else if (p_dpad == 9000) {
- dpad_val = (HatMask)HatMask::HAT_MASK_RIGHT;
+ dpad_val = (HatMask)HatMask::RIGHT;
} else if (p_dpad == 13500) {
- dpad_val = (HatMask)(HatMask::HAT_MASK_RIGHT | HatMask::HAT_MASK_DOWN);
+ dpad_val = (HatMask)(HatMask::RIGHT | HatMask::DOWN);
} else if (p_dpad == 18000) {
- dpad_val = (HatMask)HatMask::HAT_MASK_DOWN;
+ dpad_val = (HatMask)HatMask::DOWN;
} else if (p_dpad == 22500) {
- dpad_val = (HatMask)(HatMask::HAT_MASK_DOWN | HatMask::HAT_MASK_LEFT);
+ dpad_val = (HatMask)(HatMask::DOWN | HatMask::LEFT);
} else if (p_dpad == 27000) {
- dpad_val = (HatMask)HatMask::HAT_MASK_LEFT;
+ dpad_val = (HatMask)HatMask::LEFT;
} else if (p_dpad == 31500) {
- dpad_val = (HatMask)(HatMask::HAT_MASK_LEFT | HatMask::HAT_MASK_UP);
+ dpad_val = (HatMask)(HatMask::LEFT | HatMask::UP);
}
input->joy_hat(p_device, dpad_val);
};
diff --git a/platform/windows/key_mapping_windows.cpp b/platform/windows/key_mapping_windows.cpp
index b9cf8151fc..65ee5dd46b 100644
--- a/platform/windows/key_mapping_windows.cpp
+++ b/platform/windows/key_mapping_windows.cpp
@@ -33,200 +33,200 @@
#include <stdio.h>
struct _WinTranslatePair {
- unsigned int keysym;
+ Key keysym;
unsigned int keycode;
};
static _WinTranslatePair _vk_to_keycode[] = {
- { KEY_BACKSPACE, VK_BACK }, // (0x08) // backspace
- { KEY_TAB, VK_TAB }, //(0x09)
+ { Key::BACKSPACE, VK_BACK }, // (0x08) // backspace
+ { Key::TAB, VK_TAB }, //(0x09)
//VK_CLEAR (0x0C)
- { KEY_ENTER, VK_RETURN }, //(0x0D)
+ { Key::ENTER, VK_RETURN }, //(0x0D)
- { KEY_SHIFT, VK_SHIFT }, //(0x10)
+ { Key::SHIFT, VK_SHIFT }, //(0x10)
- { KEY_CTRL, VK_CONTROL }, //(0x11)
+ { Key::CTRL, VK_CONTROL }, //(0x11)
- { KEY_ALT, VK_MENU }, //(0x12)
+ { Key::ALT, VK_MENU }, //(0x12)
- { KEY_PAUSE, VK_PAUSE }, //(0x13)
+ { Key::PAUSE, VK_PAUSE }, //(0x13)
- { KEY_CAPSLOCK, VK_CAPITAL }, //(0x14)
+ { Key::CAPSLOCK, VK_CAPITAL }, //(0x14)
- { KEY_ESCAPE, VK_ESCAPE }, //(0x1B)
+ { Key::ESCAPE, VK_ESCAPE }, //(0x1B)
- { KEY_SPACE, VK_SPACE }, //(0x20)
+ { Key::SPACE, VK_SPACE }, //(0x20)
- { KEY_PAGEUP, VK_PRIOR }, //(0x21)
+ { Key::PAGEUP, VK_PRIOR }, //(0x21)
- { KEY_PAGEDOWN, VK_NEXT }, //(0x22)
+ { Key::PAGEDOWN, VK_NEXT }, //(0x22)
- { KEY_END, VK_END }, //(0x23)
+ { Key::END, VK_END }, //(0x23)
- { KEY_HOME, VK_HOME }, //(0x24)
+ { Key::HOME, VK_HOME }, //(0x24)
- { KEY_LEFT, VK_LEFT }, //(0x25)
+ { Key::LEFT, VK_LEFT }, //(0x25)
- { KEY_UP, VK_UP }, //(0x26)
+ { Key::UP, VK_UP }, //(0x26)
- { KEY_RIGHT, VK_RIGHT }, //(0x27)
+ { Key::RIGHT, VK_RIGHT }, //(0x27)
- { KEY_DOWN, VK_DOWN }, // (0x28)
+ { Key::DOWN, VK_DOWN }, // (0x28)
//VK_SELECT (0x29)
- { KEY_PRINT, VK_PRINT }, // (0x2A)
+ { Key::PRINT, VK_PRINT }, // (0x2A)
//VK_EXECUTE (0x2B)
- { KEY_PRINT, VK_SNAPSHOT }, // (0x2C)
-
- { KEY_INSERT, VK_INSERT }, // (0x2D)
-
- { KEY_DELETE, VK_DELETE }, // (0x2E)
-
- { KEY_HELP, VK_HELP }, // (0x2F)
-
- { KEY_0, (0x30) }, ////0 key
- { KEY_1, (0x31) }, ////1 key
- { KEY_2, (0x32) }, ////2 key
- { KEY_3, (0x33) }, ////3 key
- { KEY_4, (0x34) }, ////4 key
- { KEY_5, (0x35) }, ////5 key
- { KEY_6, (0x36) }, ////6 key
- { KEY_7, (0x37) }, ////7 key
- { KEY_8, (0x38) }, ////8 key
- { KEY_9, (0x39) }, ////9 key
- { KEY_A, (0x41) }, ////A key
- { KEY_B, (0x42) }, ////B key
- { KEY_C, (0x43) }, ////C key
- { KEY_D, (0x44) }, ////D key
- { KEY_E, (0x45) }, ////E key
- { KEY_F, (0x46) }, ////F key
- { KEY_G, (0x47) }, ////G key
- { KEY_H, (0x48) }, ////H key
- { KEY_I, (0x49) }, ////I key
- { KEY_J, (0x4A) }, ////J key
- { KEY_K, (0x4B) }, ////K key
- { KEY_L, (0x4C) }, ////L key
- { KEY_M, (0x4D) }, ////M key
- { KEY_N, (0x4E) }, ////N key
- { KEY_O, (0x4F) }, ////O key
- { KEY_P, (0x50) }, ////P key
- { KEY_Q, (0x51) }, ////Q key
- { KEY_R, (0x52) }, ////R key
- { KEY_S, (0x53) }, ////S key
- { KEY_T, (0x54) }, ////T key
- { KEY_U, (0x55) }, ////U key
- { KEY_V, (0x56) }, ////V key
- { KEY_W, (0x57) }, ////W key
- { KEY_X, (0x58) }, ////X key
- { KEY_Y, (0x59) }, ////Y key
- { KEY_Z, (0x5A) }, ////Z key
-
- { KEY_MASK_META, VK_LWIN }, //(0x5B)
- { KEY_MASK_META, VK_RWIN }, //(0x5C)
- { KEY_MENU, VK_APPS }, //(0x5D)
- { KEY_STANDBY, VK_SLEEP }, //(0x5F)
- { KEY_KP_0, VK_NUMPAD0 }, //(0x60)
- { KEY_KP_1, VK_NUMPAD1 }, //(0x61)
- { KEY_KP_2, VK_NUMPAD2 }, //(0x62)
- { KEY_KP_3, VK_NUMPAD3 }, //(0x63)
- { KEY_KP_4, VK_NUMPAD4 }, //(0x64)
- { KEY_KP_5, VK_NUMPAD5 }, //(0x65)
- { KEY_KP_6, VK_NUMPAD6 }, //(0x66)
- { KEY_KP_7, VK_NUMPAD7 }, //(0x67)
- { KEY_KP_8, VK_NUMPAD8 }, //(0x68)
- { KEY_KP_9, VK_NUMPAD9 }, //(0x69)
- { KEY_KP_MULTIPLY, VK_MULTIPLY }, // (0x6A)
- { KEY_KP_ADD, VK_ADD }, // (0x6B)
+ { Key::PRINT, VK_SNAPSHOT }, // (0x2C)
+
+ { Key::INSERT, VK_INSERT }, // (0x2D)
+
+ { Key::KEY_DELETE, VK_DELETE }, // (0x2E)
+
+ { Key::HELP, VK_HELP }, // (0x2F)
+
+ { Key::KEY_0, (0x30) }, ////0 key
+ { Key::KEY_1, (0x31) }, ////1 key
+ { Key::KEY_2, (0x32) }, ////2 key
+ { Key::KEY_3, (0x33) }, ////3 key
+ { Key::KEY_4, (0x34) }, ////4 key
+ { Key::KEY_5, (0x35) }, ////5 key
+ { Key::KEY_6, (0x36) }, ////6 key
+ { Key::KEY_7, (0x37) }, ////7 key
+ { Key::KEY_8, (0x38) }, ////8 key
+ { Key::KEY_9, (0x39) }, ////9 key
+ { Key::A, (0x41) }, ////A key
+ { Key::B, (0x42) }, ////B key
+ { Key::C, (0x43) }, ////C key
+ { Key::D, (0x44) }, ////D key
+ { Key::E, (0x45) }, ////E key
+ { Key::F, (0x46) }, ////F key
+ { Key::G, (0x47) }, ////G key
+ { Key::H, (0x48) }, ////H key
+ { Key::I, (0x49) }, ////I key
+ { Key::J, (0x4A) }, ////J key
+ { Key::K, (0x4B) }, ////K key
+ { Key::L, (0x4C) }, ////L key
+ { Key::M, (0x4D) }, ////M key
+ { Key::N, (0x4E) }, ////N key
+ { Key::O, (0x4F) }, ////O key
+ { Key::P, (0x50) }, ////P key
+ { Key::Q, (0x51) }, ////Q key
+ { Key::R, (0x52) }, ////R key
+ { Key::S, (0x53) }, ////S key
+ { Key::T, (0x54) }, ////T key
+ { Key::U, (0x55) }, ////U key
+ { Key::V, (0x56) }, ////V key
+ { Key::W, (0x57) }, ////W key
+ { Key::X, (0x58) }, ////X key
+ { Key::Y, (0x59) }, ////Y key
+ { Key::Z, (0x5A) }, ////Z key
+
+ { (Key)KeyModifierMask::META, VK_LWIN }, //(0x5B)
+ { (Key)KeyModifierMask::META, VK_RWIN }, //(0x5C)
+ { Key::MENU, VK_APPS }, //(0x5D)
+ { Key::STANDBY, VK_SLEEP }, //(0x5F)
+ { Key::KP_0, VK_NUMPAD0 }, //(0x60)
+ { Key::KP_1, VK_NUMPAD1 }, //(0x61)
+ { Key::KP_2, VK_NUMPAD2 }, //(0x62)
+ { Key::KP_3, VK_NUMPAD3 }, //(0x63)
+ { Key::KP_4, VK_NUMPAD4 }, //(0x64)
+ { Key::KP_5, VK_NUMPAD5 }, //(0x65)
+ { Key::KP_6, VK_NUMPAD6 }, //(0x66)
+ { Key::KP_7, VK_NUMPAD7 }, //(0x67)
+ { Key::KP_8, VK_NUMPAD8 }, //(0x68)
+ { Key::KP_9, VK_NUMPAD9 }, //(0x69)
+ { Key::KP_MULTIPLY, VK_MULTIPLY }, // (0x6A)
+ { Key::KP_ADD, VK_ADD }, // (0x6B)
//VK_SEPARATOR (0x6C)
- { KEY_KP_SUBTRACT, VK_SUBTRACT }, // (0x6D)
- { KEY_KP_PERIOD, VK_DECIMAL }, // (0x6E)
- { KEY_KP_DIVIDE, VK_DIVIDE }, // (0x6F)
- { KEY_F1, VK_F1 }, // (0x70)
- { KEY_F2, VK_F2 }, // (0x71)
- { KEY_F3, VK_F3 }, // (0x72)
- { KEY_F4, VK_F4 }, // (0x73)
- { KEY_F5, VK_F5 }, // (0x74)
- { KEY_F6, VK_F6 }, // (0x75)
- { KEY_F7, VK_F7 }, // (0x76)
- { KEY_F8, VK_F8 }, // (0x77)
- { KEY_F9, VK_F9 }, // (0x78)
- { KEY_F10, VK_F10 }, // (0x79)
- { KEY_F11, VK_F11 }, // (0x7A)
- { KEY_F12, VK_F12 }, // (0x7B)
- { KEY_F13, VK_F13 }, // (0x7C)
- { KEY_F14, VK_F14 }, // (0x7D)
- { KEY_F15, VK_F15 }, // (0x7E)
- { KEY_F16, VK_F16 }, // (0x7F)
- { KEY_NUMLOCK, VK_NUMLOCK }, // (0x90)
- { KEY_SCROLLLOCK, VK_SCROLL }, // (0x91)
- { KEY_SHIFT, VK_LSHIFT }, // (0xA0)
- { KEY_SHIFT, VK_RSHIFT }, // (0xA1)
- { KEY_CTRL, VK_LCONTROL }, // (0xA2)
- { KEY_CTRL, VK_RCONTROL }, // (0xA3)
- { KEY_MENU, VK_LMENU }, // (0xA4)
- { KEY_MENU, VK_RMENU }, // (0xA5)
+ { Key::KP_SUBTRACT, VK_SUBTRACT }, // (0x6D)
+ { Key::KP_PERIOD, VK_DECIMAL }, // (0x6E)
+ { Key::KP_DIVIDE, VK_DIVIDE }, // (0x6F)
+ { Key::F1, VK_F1 }, // (0x70)
+ { Key::F2, VK_F2 }, // (0x71)
+ { Key::F3, VK_F3 }, // (0x72)
+ { Key::F4, VK_F4 }, // (0x73)
+ { Key::F5, VK_F5 }, // (0x74)
+ { Key::F6, VK_F6 }, // (0x75)
+ { Key::F7, VK_F7 }, // (0x76)
+ { Key::F8, VK_F8 }, // (0x77)
+ { Key::F9, VK_F9 }, // (0x78)
+ { Key::F10, VK_F10 }, // (0x79)
+ { Key::F11, VK_F11 }, // (0x7A)
+ { Key::F12, VK_F12 }, // (0x7B)
+ { Key::F13, VK_F13 }, // (0x7C)
+ { Key::F14, VK_F14 }, // (0x7D)
+ { Key::F15, VK_F15 }, // (0x7E)
+ { Key::F16, VK_F16 }, // (0x7F)
+ { Key::NUMLOCK, VK_NUMLOCK }, // (0x90)
+ { Key::SCROLLLOCK, VK_SCROLL }, // (0x91)
+ { Key::SHIFT, VK_LSHIFT }, // (0xA0)
+ { Key::SHIFT, VK_RSHIFT }, // (0xA1)
+ { Key::CTRL, VK_LCONTROL }, // (0xA2)
+ { Key::CTRL, VK_RCONTROL }, // (0xA3)
+ { Key::MENU, VK_LMENU }, // (0xA4)
+ { Key::MENU, VK_RMENU }, // (0xA5)
- { KEY_BACK, VK_BROWSER_BACK }, // (0xA6)
+ { Key::BACK, VK_BROWSER_BACK }, // (0xA6)
- { KEY_FORWARD, VK_BROWSER_FORWARD }, // (0xA7)
+ { Key::FORWARD, VK_BROWSER_FORWARD }, // (0xA7)
- { KEY_REFRESH, VK_BROWSER_REFRESH }, // (0xA8)
+ { Key::REFRESH, VK_BROWSER_REFRESH }, // (0xA8)
- { KEY_STOP, VK_BROWSER_STOP }, // (0xA9)
+ { Key::STOP, VK_BROWSER_STOP }, // (0xA9)
- { KEY_SEARCH, VK_BROWSER_SEARCH }, // (0xAA)
+ { Key::SEARCH, VK_BROWSER_SEARCH }, // (0xAA)
- { KEY_FAVORITES, VK_BROWSER_FAVORITES }, // (0xAB)
+ { Key::FAVORITES, VK_BROWSER_FAVORITES }, // (0xAB)
- { KEY_HOMEPAGE, VK_BROWSER_HOME }, // (0xAC)
+ { Key::HOMEPAGE, VK_BROWSER_HOME }, // (0xAC)
- { KEY_VOLUMEMUTE, VK_VOLUME_MUTE }, // (0xAD)
+ { Key::VOLUMEMUTE, VK_VOLUME_MUTE }, // (0xAD)
- { KEY_VOLUMEDOWN, VK_VOLUME_DOWN }, // (0xAE)
+ { Key::VOLUMEDOWN, VK_VOLUME_DOWN }, // (0xAE)
- { KEY_VOLUMEUP, VK_VOLUME_UP }, // (0xAF)
+ { Key::VOLUMEUP, VK_VOLUME_UP }, // (0xAF)
- { KEY_MEDIANEXT, VK_MEDIA_NEXT_TRACK }, // (0xB0)
+ { Key::MEDIANEXT, VK_MEDIA_NEXT_TRACK }, // (0xB0)
- { KEY_MEDIAPREVIOUS, VK_MEDIA_PREV_TRACK }, // (0xB1)
+ { Key::MEDIAPREVIOUS, VK_MEDIA_PREV_TRACK }, // (0xB1)
- { KEY_MEDIASTOP, VK_MEDIA_STOP }, // (0xB2)
+ { Key::MEDIASTOP, VK_MEDIA_STOP }, // (0xB2)
//VK_MEDIA_PLAY_PAUSE (0xB3)
- { KEY_LAUNCHMAIL, VK_LAUNCH_MAIL }, // (0xB4)
+ { Key::LAUNCHMAIL, VK_LAUNCH_MAIL }, // (0xB4)
- { KEY_LAUNCHMEDIA, VK_LAUNCH_MEDIA_SELECT }, // (0xB5)
+ { Key::LAUNCHMEDIA, VK_LAUNCH_MEDIA_SELECT }, // (0xB5)
- { KEY_LAUNCH0, VK_LAUNCH_APP1 }, // (0xB6)
+ { Key::LAUNCH0, VK_LAUNCH_APP1 }, // (0xB6)
- { KEY_LAUNCH1, VK_LAUNCH_APP2 }, // (0xB7)
+ { Key::LAUNCH1, VK_LAUNCH_APP2 }, // (0xB7)
- { KEY_SEMICOLON, VK_OEM_1 }, // (0xBA)
+ { Key::SEMICOLON, VK_OEM_1 }, // (0xBA)
- { KEY_EQUAL, VK_OEM_PLUS }, // (0xBB) // Windows 2000/XP: For any country/region, the '+' key
- { KEY_COMMA, VK_OEM_COMMA }, // (0xBC) // Windows 2000/XP: For any country/region, the ',' key
- { KEY_MINUS, VK_OEM_MINUS }, // (0xBD) // Windows 2000/XP: For any country/region, the '-' key
- { KEY_PERIOD, VK_OEM_PERIOD }, // (0xBE) // Windows 2000/XP: For any country/region, the '.' key
- { KEY_SLASH, VK_OEM_2 }, // (0xBF) //Windows 2000/XP: For the US standard keyboard, the '/?' key
+ { Key::EQUAL, VK_OEM_PLUS }, // (0xBB) // Windows 2000/XP: For any country/region, the '+' key
+ { Key::COMMA, VK_OEM_COMMA }, // (0xBC) // Windows 2000/XP: For any country/region, the ',' key
+ { Key::MINUS, VK_OEM_MINUS }, // (0xBD) // Windows 2000/XP: For any country/region, the '-' key
+ { Key::PERIOD, VK_OEM_PERIOD }, // (0xBE) // Windows 2000/XP: For any country/region, the '.' key
+ { Key::SLASH, VK_OEM_2 }, // (0xBF) //Windows 2000/XP: For the US standard keyboard, the '/?' key
- { KEY_QUOTELEFT, VK_OEM_3 }, // (0xC0)
- { KEY_BRACELEFT, VK_OEM_4 }, // (0xDB)
- { KEY_BACKSLASH, VK_OEM_5 }, // (0xDC)
- { KEY_BRACERIGHT, VK_OEM_6 }, // (0xDD)
- { KEY_APOSTROPHE, VK_OEM_7 }, // (0xDE)
+ { Key::QUOTELEFT, VK_OEM_3 }, // (0xC0)
+ { Key::BRACELEFT, VK_OEM_4 }, // (0xDB)
+ { Key::BACKSLASH, VK_OEM_5 }, // (0xDC)
+ { Key::BRACERIGHT, VK_OEM_6 }, // (0xDD)
+ { Key::APOSTROPHE, VK_OEM_7 }, // (0xDE)
/*
{VK_OEM_8 (0xDF)
{VK_OEM_102 (0xE2) // Windows 2000/XP: Either the angle bracket key or the backslash key on the RT 102-key keyboard
*/
- //{ KEY_PLAY, VK_PLAY},// (0xFA)
+ //{ Key::PLAY, VK_PLAY},// (0xFA)
- { KEY_UNKNOWN, 0 }
+ { Key::UNKNOWN, 0 }
};
/*
@@ -237,104 +237,104 @@ VK_OEM_CLEAR (0xFE)
*/
static _WinTranslatePair _scancode_to_keycode[] = {
- { KEY_ESCAPE, 0x01 },
- { KEY_1, 0x02 },
- { KEY_2, 0x03 },
- { KEY_3, 0x04 },
- { KEY_4, 0x05 },
- { KEY_5, 0x06 },
- { KEY_6, 0x07 },
- { KEY_7, 0x08 },
- { KEY_8, 0x09 },
- { KEY_9, 0x0A },
- { KEY_0, 0x0B },
- { KEY_MINUS, 0x0C },
- { KEY_EQUAL, 0x0D },
- { KEY_BACKSPACE, 0x0E },
- { KEY_TAB, 0x0F },
- { KEY_Q, 0x10 },
- { KEY_W, 0x11 },
- { KEY_E, 0x12 },
- { KEY_R, 0x13 },
- { KEY_T, 0x14 },
- { KEY_Y, 0x15 },
- { KEY_U, 0x16 },
- { KEY_I, 0x17 },
- { KEY_O, 0x18 },
- { KEY_P, 0x19 },
- { KEY_BRACELEFT, 0x1A },
- { KEY_BRACERIGHT, 0x1B },
- { KEY_ENTER, 0x1C },
- { KEY_CTRL, 0x1D },
- { KEY_A, 0x1E },
- { KEY_S, 0x1F },
- { KEY_D, 0x20 },
- { KEY_F, 0x21 },
- { KEY_G, 0x22 },
- { KEY_H, 0x23 },
- { KEY_J, 0x24 },
- { KEY_K, 0x25 },
- { KEY_L, 0x26 },
- { KEY_SEMICOLON, 0x27 },
- { KEY_APOSTROPHE, 0x28 },
- { KEY_QUOTELEFT, 0x29 },
- { KEY_SHIFT, 0x2A },
- { KEY_BACKSLASH, 0x2B },
- { KEY_Z, 0x2C },
- { KEY_X, 0x2D },
- { KEY_C, 0x2E },
- { KEY_V, 0x2F },
- { KEY_B, 0x30 },
- { KEY_N, 0x31 },
- { KEY_M, 0x32 },
- { KEY_COMMA, 0x33 },
- { KEY_PERIOD, 0x34 },
- { KEY_SLASH, 0x35 },
- { KEY_SHIFT, 0x36 },
- { KEY_PRINT, 0x37 },
- { KEY_ALT, 0x38 },
- { KEY_SPACE, 0x39 },
- { KEY_CAPSLOCK, 0x3A },
- { KEY_F1, 0x3B },
- { KEY_F2, 0x3C },
- { KEY_F3, 0x3D },
- { KEY_F4, 0x3E },
- { KEY_F5, 0x3F },
- { KEY_F6, 0x40 },
- { KEY_F7, 0x41 },
- { KEY_F8, 0x42 },
- { KEY_F9, 0x43 },
- { KEY_F10, 0x44 },
- { KEY_NUMLOCK, 0x45 },
- { KEY_SCROLLLOCK, 0x46 },
- { KEY_HOME, 0x47 },
- { KEY_UP, 0x48 },
- { KEY_PAGEUP, 0x49 },
- { KEY_KP_SUBTRACT, 0x4A },
- { KEY_LEFT, 0x4B },
- { KEY_KP_5, 0x4C },
- { KEY_RIGHT, 0x4D },
- { KEY_KP_ADD, 0x4E },
- { KEY_END, 0x4F },
- { KEY_DOWN, 0x50 },
- { KEY_PAGEDOWN, 0x51 },
- { KEY_INSERT, 0x52 },
- { KEY_DELETE, 0x53 },
- //{ KEY_???, 0x56 }, //NON US BACKSLASH
- { KEY_F11, 0x57 },
- { KEY_F12, 0x58 },
- { KEY_META, 0x5B },
- { KEY_META, 0x5C },
- { KEY_MENU, 0x5D },
- { KEY_F13, 0x64 },
- { KEY_F14, 0x65 },
- { KEY_F15, 0x66 },
- { KEY_F16, 0x67 },
- { KEY_UNKNOWN, 0 }
+ { Key::ESCAPE, 0x01 },
+ { Key::KEY_1, 0x02 },
+ { Key::KEY_2, 0x03 },
+ { Key::KEY_3, 0x04 },
+ { Key::KEY_4, 0x05 },
+ { Key::KEY_5, 0x06 },
+ { Key::KEY_6, 0x07 },
+ { Key::KEY_7, 0x08 },
+ { Key::KEY_8, 0x09 },
+ { Key::KEY_9, 0x0A },
+ { Key::KEY_0, 0x0B },
+ { Key::MINUS, 0x0C },
+ { Key::EQUAL, 0x0D },
+ { Key::BACKSPACE, 0x0E },
+ { Key::TAB, 0x0F },
+ { Key::Q, 0x10 },
+ { Key::W, 0x11 },
+ { Key::E, 0x12 },
+ { Key::R, 0x13 },
+ { Key::T, 0x14 },
+ { Key::Y, 0x15 },
+ { Key::U, 0x16 },
+ { Key::I, 0x17 },
+ { Key::O, 0x18 },
+ { Key::P, 0x19 },
+ { Key::BRACELEFT, 0x1A },
+ { Key::BRACERIGHT, 0x1B },
+ { Key::ENTER, 0x1C },
+ { Key::CTRL, 0x1D },
+ { Key::A, 0x1E },
+ { Key::S, 0x1F },
+ { Key::D, 0x20 },
+ { Key::F, 0x21 },
+ { Key::G, 0x22 },
+ { Key::H, 0x23 },
+ { Key::J, 0x24 },
+ { Key::K, 0x25 },
+ { Key::L, 0x26 },
+ { Key::SEMICOLON, 0x27 },
+ { Key::APOSTROPHE, 0x28 },
+ { Key::QUOTELEFT, 0x29 },
+ { Key::SHIFT, 0x2A },
+ { Key::BACKSLASH, 0x2B },
+ { Key::Z, 0x2C },
+ { Key::X, 0x2D },
+ { Key::C, 0x2E },
+ { Key::V, 0x2F },
+ { Key::B, 0x30 },
+ { Key::N, 0x31 },
+ { Key::M, 0x32 },
+ { Key::COMMA, 0x33 },
+ { Key::PERIOD, 0x34 },
+ { Key::SLASH, 0x35 },
+ { Key::SHIFT, 0x36 },
+ { Key::PRINT, 0x37 },
+ { Key::ALT, 0x38 },
+ { Key::SPACE, 0x39 },
+ { Key::CAPSLOCK, 0x3A },
+ { Key::F1, 0x3B },
+ { Key::F2, 0x3C },
+ { Key::F3, 0x3D },
+ { Key::F4, 0x3E },
+ { Key::F5, 0x3F },
+ { Key::F6, 0x40 },
+ { Key::F7, 0x41 },
+ { Key::F8, 0x42 },
+ { Key::F9, 0x43 },
+ { Key::F10, 0x44 },
+ { Key::NUMLOCK, 0x45 },
+ { Key::SCROLLLOCK, 0x46 },
+ { Key::HOME, 0x47 },
+ { Key::UP, 0x48 },
+ { Key::PAGEUP, 0x49 },
+ { Key::KP_SUBTRACT, 0x4A },
+ { Key::LEFT, 0x4B },
+ { Key::KP_5, 0x4C },
+ { Key::RIGHT, 0x4D },
+ { Key::KP_ADD, 0x4E },
+ { Key::END, 0x4F },
+ { Key::DOWN, 0x50 },
+ { Key::PAGEDOWN, 0x51 },
+ { Key::INSERT, 0x52 },
+ { Key::KEY_DELETE, 0x53 },
+ //{ Key::???, 0x56 }, //NON US BACKSLASH
+ { Key::F11, 0x57 },
+ { Key::F12, 0x58 },
+ { Key::META, 0x5B },
+ { Key::META, 0x5C },
+ { Key::MENU, 0x5D },
+ { Key::F13, 0x64 },
+ { Key::F14, 0x65 },
+ { Key::F15, 0x66 },
+ { Key::F16, 0x67 },
+ { Key::UNKNOWN, 0 }
};
-unsigned int KeyMappingWindows::get_keysym(unsigned int p_code) {
- for (int i = 0; _vk_to_keycode[i].keysym != KEY_UNKNOWN; i++) {
+Key KeyMappingWindows::get_keysym(unsigned int p_code) {
+ for (int i = 0; _vk_to_keycode[i].keysym != Key::UNKNOWN; i++) {
if (_vk_to_keycode[i].keycode == p_code) {
//printf("outcode: %x\n",_vk_to_keycode[i].keysym);
@@ -342,11 +342,11 @@ unsigned int KeyMappingWindows::get_keysym(unsigned int p_code) {
}
}
- return KEY_UNKNOWN;
+ return Key::UNKNOWN;
}
unsigned int KeyMappingWindows::get_scancode(Key p_keycode) {
- for (int i = 0; _scancode_to_keycode[i].keysym != KEY_UNKNOWN; i++) {
+ for (int i = 0; _scancode_to_keycode[i].keysym != Key::UNKNOWN; i++) {
if (_scancode_to_keycode[i].keysym == p_keycode) {
return _scancode_to_keycode[i].keycode;
}
@@ -355,9 +355,9 @@ unsigned int KeyMappingWindows::get_scancode(Key p_keycode) {
return 0;
}
-unsigned int KeyMappingWindows::get_scansym(unsigned int p_code, bool p_extended) {
- unsigned int keycode = KEY_UNKNOWN;
- for (int i = 0; _scancode_to_keycode[i].keysym != KEY_UNKNOWN; i++) {
+Key KeyMappingWindows::get_scansym(unsigned int p_code, bool p_extended) {
+ Key keycode = Key::UNKNOWN;
+ for (int i = 0; _scancode_to_keycode[i].keysym != Key::UNKNOWN; i++) {
if (_scancode_to_keycode[i].keycode == p_code) {
keycode = _scancode_to_keycode[i].keysym;
break;
@@ -366,55 +366,55 @@ unsigned int KeyMappingWindows::get_scansym(unsigned int p_code, bool p_extended
if (p_extended) {
switch (keycode) {
- case KEY_ENTER: {
- keycode = KEY_KP_ENTER;
+ case Key::ENTER: {
+ keycode = Key::KP_ENTER;
} break;
- case KEY_SLASH: {
- keycode = KEY_KP_DIVIDE;
+ case Key::SLASH: {
+ keycode = Key::KP_DIVIDE;
} break;
- case KEY_CAPSLOCK: {
- keycode = KEY_KP_ADD;
+ case Key::CAPSLOCK: {
+ keycode = Key::KP_ADD;
} break;
default:
break;
}
} else {
switch (keycode) {
- case KEY_NUMLOCK: {
- keycode = KEY_PAUSE;
+ case Key::NUMLOCK: {
+ keycode = Key::PAUSE;
} break;
- case KEY_HOME: {
- keycode = KEY_KP_7;
+ case Key::HOME: {
+ keycode = Key::KP_7;
} break;
- case KEY_UP: {
- keycode = KEY_KP_8;
+ case Key::UP: {
+ keycode = Key::KP_8;
} break;
- case KEY_PAGEUP: {
- keycode = KEY_KP_9;
+ case Key::PAGEUP: {
+ keycode = Key::KP_9;
} break;
- case KEY_LEFT: {
- keycode = KEY_KP_4;
+ case Key::LEFT: {
+ keycode = Key::KP_4;
} break;
- case KEY_RIGHT: {
- keycode = KEY_KP_6;
+ case Key::RIGHT: {
+ keycode = Key::KP_6;
} break;
- case KEY_END: {
- keycode = KEY_KP_1;
+ case Key::END: {
+ keycode = Key::KP_1;
} break;
- case KEY_DOWN: {
- keycode = KEY_KP_2;
+ case Key::DOWN: {
+ keycode = Key::KP_2;
} break;
- case KEY_PAGEDOWN: {
- keycode = KEY_KP_3;
+ case Key::PAGEDOWN: {
+ keycode = Key::KP_3;
} break;
- case KEY_INSERT: {
- keycode = KEY_KP_0;
+ case Key::INSERT: {
+ keycode = Key::KP_0;
} break;
- case KEY_DELETE: {
- keycode = KEY_KP_PERIOD;
+ case Key::KEY_DELETE: {
+ keycode = Key::KP_PERIOD;
} break;
- case KEY_PRINT: {
- keycode = KEY_KP_MULTIPLY;
+ case Key::PRINT: {
+ keycode = Key::KP_MULTIPLY;
} break;
default:
break;
diff --git a/platform/windows/key_mapping_windows.h b/platform/windows/key_mapping_windows.h
index d056e88f06..0454be7310 100644
--- a/platform/windows/key_mapping_windows.h
+++ b/platform/windows/key_mapping_windows.h
@@ -41,9 +41,9 @@ class KeyMappingWindows {
KeyMappingWindows() {}
public:
- static unsigned int get_keysym(unsigned int p_code);
+ static Key get_keysym(unsigned int p_code);
static unsigned int get_scancode(Key p_keycode);
- static unsigned int get_scansym(unsigned int p_code, bool p_extended);
+ static Key get_scansym(unsigned int p_code, bool p_extended);
static bool is_extended_key(unsigned int p_code);
};
diff --git a/platform/windows/os_windows.cpp b/platform/windows/os_windows.cpp
index 22c0219ea6..6a0a4790fc 100644
--- a/platform/windows/os_windows.cpp
+++ b/platform/windows/os_windows.cpp
@@ -447,7 +447,12 @@ Error OS_Windows::execute(const String &p_path, const List<String> &p_arguments,
ZeroMemory(&pi.pi, sizeof(pi.pi));
LPSTARTUPINFOW si_w = (LPSTARTUPINFOW)&pi.si;
- int ret = CreateProcessW(nullptr, (LPWSTR)(command.utf16().ptrw()), nullptr, nullptr, false, NORMAL_PRIORITY_CLASS & CREATE_NO_WINDOW, nullptr, nullptr, si_w, &pi.pi);
+ DWORD dwCreationFlags = NORMAL_PRIORITY_CLASS;
+#ifndef DEBUG_ENABLED
+ dwCreationFlags |= CREATE_NO_WINDOW;
+#endif
+
+ int ret = CreateProcessW(nullptr, (LPWSTR)(command.utf16().ptrw()), nullptr, nullptr, false, dwCreationFlags, nullptr, nullptr, si_w, &pi.pi);
ERR_FAIL_COND_V_MSG(ret == 0, ERR_CANT_FORK, "Could not create child process: " + command);
WaitForSingleObject(pi.pi.hProcess, INFINITE);
@@ -475,7 +480,12 @@ Error OS_Windows::create_process(const String &p_path, const List<String> &p_arg
ZeroMemory(&pi.pi, sizeof(pi.pi));
LPSTARTUPINFOW si_w = (LPSTARTUPINFOW)&pi.si;
- int ret = CreateProcessW(nullptr, (LPWSTR)(command.utf16().ptrw()), nullptr, nullptr, false, NORMAL_PRIORITY_CLASS & CREATE_NO_WINDOW, nullptr, nullptr, si_w, &pi.pi);
+ DWORD dwCreationFlags = NORMAL_PRIORITY_CLASS;
+#ifndef DEBUG_ENABLED
+ dwCreationFlags |= CREATE_NO_WINDOW;
+#endif
+
+ int ret = CreateProcessW(nullptr, (LPWSTR)(command.utf16().ptrw()), nullptr, nullptr, false, dwCreationFlags, nullptr, nullptr, si_w, &pi.pi);
ERR_FAIL_COND_V_MSG(ret == 0, ERR_CANT_FORK, "Could not create child process: " + command);
ProcessID pid = pi.pi.dwProcessId;
@@ -760,7 +770,7 @@ String OS_Windows::get_user_data_dir() const {
}
}
- return ProjectSettings::get_singleton()->get_resource_path();
+ return get_data_path().plus_file(get_godot_dir_name()).plus_file("app_userdata").plus_file("[unnamed project]");
}
String OS_Windows::get_unique_id() const {
diff --git a/scene/2d/area_2d.cpp b/scene/2d/area_2d.cpp
index fff9c47d4d..8db1491953 100644
--- a/scene/2d/area_2d.cpp
+++ b/scene/2d/area_2d.cpp
@@ -33,13 +33,13 @@
#include "scene/scene_string_names.h"
#include "servers/audio_server.h"
-void Area2D::set_space_override_mode(SpaceOverride p_mode) {
- space_override = p_mode;
- PhysicsServer2D::get_singleton()->area_set_space_override_mode(get_rid(), PhysicsServer2D::AreaSpaceOverrideMode(p_mode));
+void Area2D::set_gravity_space_override_mode(SpaceOverride p_mode) {
+ gravity_space_override = p_mode;
+ PhysicsServer2D::get_singleton()->area_set_param(get_rid(), PhysicsServer2D::AREA_PARAM_GRAVITY_OVERRIDE_MODE, p_mode);
}
-Area2D::SpaceOverride Area2D::get_space_override_mode() const {
- return space_override;
+Area2D::SpaceOverride Area2D::get_gravity_space_override_mode() const {
+ return gravity_space_override;
}
void Area2D::set_gravity_is_point(bool p_enabled) {
@@ -51,21 +51,30 @@ bool Area2D::is_gravity_a_point() const {
return gravity_is_point;
}
-void Area2D::set_gravity_distance_scale(real_t p_scale) {
+void Area2D::set_gravity_point_distance_scale(real_t p_scale) {
gravity_distance_scale = p_scale;
PhysicsServer2D::get_singleton()->area_set_param(get_rid(), PhysicsServer2D::AREA_PARAM_GRAVITY_DISTANCE_SCALE, p_scale);
}
-real_t Area2D::get_gravity_distance_scale() const {
+real_t Area2D::get_gravity_point_distance_scale() const {
return gravity_distance_scale;
}
-void Area2D::set_gravity_vector(const Vector2 &p_vec) {
- gravity_vec = p_vec;
- PhysicsServer2D::get_singleton()->area_set_param(get_rid(), PhysicsServer2D::AREA_PARAM_GRAVITY_VECTOR, p_vec);
+void Area2D::set_gravity_point_center(const Vector2 &p_center) {
+ gravity_vec = p_center;
+ PhysicsServer2D::get_singleton()->area_set_param(get_rid(), PhysicsServer2D::AREA_PARAM_GRAVITY_VECTOR, p_center);
}
-Vector2 Area2D::get_gravity_vector() const {
+const Vector2 &Area2D::get_gravity_point_center() const {
+ return gravity_vec;
+}
+
+void Area2D::set_gravity_direction(const Vector2 &p_direction) {
+ gravity_vec = p_direction;
+ PhysicsServer2D::get_singleton()->area_set_param(get_rid(), PhysicsServer2D::AREA_PARAM_GRAVITY_VECTOR, p_direction);
+}
+
+const Vector2 &Area2D::get_gravity_direction() const {
return gravity_vec;
}
@@ -78,6 +87,24 @@ real_t Area2D::get_gravity() const {
return gravity;
}
+void Area2D::set_linear_damp_space_override_mode(SpaceOverride p_mode) {
+ linear_damp_space_override = p_mode;
+ PhysicsServer2D::get_singleton()->area_set_param(get_rid(), PhysicsServer2D::AREA_PARAM_LINEAR_DAMP_OVERRIDE_MODE, p_mode);
+}
+
+Area2D::SpaceOverride Area2D::get_linear_damp_space_override_mode() const {
+ return linear_damp_space_override;
+}
+
+void Area2D::set_angular_damp_space_override_mode(SpaceOverride p_mode) {
+ angular_damp_space_override = p_mode;
+ PhysicsServer2D::get_singleton()->area_set_param(get_rid(), PhysicsServer2D::AREA_PARAM_ANGULAR_DAMP_OVERRIDE_MODE, p_mode);
+}
+
+Area2D::SpaceOverride Area2D::get_angular_damp_space_override_mode() const {
+ return angular_damp_space_override;
+}
+
void Area2D::set_linear_damp(real_t p_linear_damp) {
linear_damp = p_linear_damp;
PhysicsServer2D::get_singleton()->area_set_param(get_rid(), PhysicsServer2D::AREA_PARAM_LINEAR_DAMP, p_linear_damp);
@@ -369,12 +396,11 @@ void Area2D::set_monitoring(bool p_enable) {
monitoring = p_enable;
if (monitoring) {
- PhysicsServer2D::get_singleton()->area_set_monitor_callback(get_rid(), this, SceneStringNames::get_singleton()->_body_inout);
- PhysicsServer2D::get_singleton()->area_set_area_monitor_callback(get_rid(), this, SceneStringNames::get_singleton()->_area_inout);
-
+ PhysicsServer2D::get_singleton()->area_set_monitor_callback(get_rid(), callable_mp(this, &Area2D::_body_inout));
+ PhysicsServer2D::get_singleton()->area_set_area_monitor_callback(get_rid(), callable_mp(this, &Area2D::_area_inout));
} else {
- PhysicsServer2D::get_singleton()->area_set_monitor_callback(get_rid(), nullptr, StringName());
- PhysicsServer2D::get_singleton()->area_set_area_monitor_callback(get_rid(), nullptr, StringName());
+ PhysicsServer2D::get_singleton()->area_set_monitor_callback(get_rid(), Callable());
+ PhysicsServer2D::get_singleton()->area_set_area_monitor_callback(get_rid(), Callable());
_clear_monitoring();
}
}
@@ -484,25 +510,56 @@ void Area2D::_validate_property(PropertyInfo &property) const {
}
property.hint_string = options;
+ } else if (property.name.begins_with("gravity") && property.name != "gravity_space_override") {
+ if (gravity_space_override == SPACE_OVERRIDE_DISABLED) {
+ property.usage = PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL;
+ } else {
+ if (gravity_is_point) {
+ if (property.name == "gravity_direction") {
+ property.usage = PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL;
+ }
+ } else {
+ if (property.name.begins_with("gravity_point_")) {
+ property.usage = PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL;
+ }
+ }
+ }
+ } else if (property.name.begins_with("linear_damp") && property.name != "linear_damp_space_override") {
+ if (linear_damp_space_override == SPACE_OVERRIDE_DISABLED) {
+ property.usage = PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL;
+ }
+ } else if (property.name.begins_with("angular_damp") && property.name != "angular_damp_space_override") {
+ if (angular_damp_space_override == SPACE_OVERRIDE_DISABLED) {
+ property.usage = PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL;
+ }
}
}
void Area2D::_bind_methods() {
- ClassDB::bind_method(D_METHOD("set_space_override_mode", "space_override_mode"), &Area2D::set_space_override_mode);
- ClassDB::bind_method(D_METHOD("get_space_override_mode"), &Area2D::get_space_override_mode);
+ ClassDB::bind_method(D_METHOD("set_gravity_space_override_mode", "space_override_mode"), &Area2D::set_gravity_space_override_mode);
+ ClassDB::bind_method(D_METHOD("get_gravity_space_override_mode"), &Area2D::get_gravity_space_override_mode);
ClassDB::bind_method(D_METHOD("set_gravity_is_point", "enable"), &Area2D::set_gravity_is_point);
ClassDB::bind_method(D_METHOD("is_gravity_a_point"), &Area2D::is_gravity_a_point);
- ClassDB::bind_method(D_METHOD("set_gravity_distance_scale", "distance_scale"), &Area2D::set_gravity_distance_scale);
- ClassDB::bind_method(D_METHOD("get_gravity_distance_scale"), &Area2D::get_gravity_distance_scale);
+ ClassDB::bind_method(D_METHOD("set_gravity_point_distance_scale", "distance_scale"), &Area2D::set_gravity_point_distance_scale);
+ ClassDB::bind_method(D_METHOD("get_gravity_point_distance_scale"), &Area2D::get_gravity_point_distance_scale);
- ClassDB::bind_method(D_METHOD("set_gravity_vector", "vector"), &Area2D::set_gravity_vector);
- ClassDB::bind_method(D_METHOD("get_gravity_vector"), &Area2D::get_gravity_vector);
+ ClassDB::bind_method(D_METHOD("set_gravity_point_center", "center"), &Area2D::set_gravity_point_center);
+ ClassDB::bind_method(D_METHOD("get_gravity_point_center"), &Area2D::get_gravity_point_center);
+
+ ClassDB::bind_method(D_METHOD("set_gravity_direction", "direction"), &Area2D::set_gravity_direction);
+ ClassDB::bind_method(D_METHOD("get_gravity_direction"), &Area2D::get_gravity_direction);
ClassDB::bind_method(D_METHOD("set_gravity", "gravity"), &Area2D::set_gravity);
ClassDB::bind_method(D_METHOD("get_gravity"), &Area2D::get_gravity);
+ ClassDB::bind_method(D_METHOD("set_linear_damp_space_override_mode", "space_override_mode"), &Area2D::set_linear_damp_space_override_mode);
+ ClassDB::bind_method(D_METHOD("get_linear_damp_space_override_mode"), &Area2D::get_linear_damp_space_override_mode);
+
+ ClassDB::bind_method(D_METHOD("set_angular_damp_space_override_mode", "space_override_mode"), &Area2D::set_angular_damp_space_override_mode);
+ ClassDB::bind_method(D_METHOD("get_angular_damp_space_override_mode"), &Area2D::get_angular_damp_space_override_mode);
+
ClassDB::bind_method(D_METHOD("set_linear_damp", "linear_damp"), &Area2D::set_linear_damp);
ClassDB::bind_method(D_METHOD("get_linear_damp"), &Area2D::get_linear_damp);
@@ -530,9 +587,6 @@ void Area2D::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_audio_bus_override", "enable"), &Area2D::set_audio_bus_override);
ClassDB::bind_method(D_METHOD("is_overriding_audio_bus"), &Area2D::is_overriding_audio_bus);
- ClassDB::bind_method(D_METHOD("_body_inout"), &Area2D::_body_inout);
- ClassDB::bind_method(D_METHOD("_area_inout"), &Area2D::_area_inout);
-
ADD_SIGNAL(MethodInfo("body_shape_entered", PropertyInfo(Variant::RID, "body_rid"), PropertyInfo(Variant::OBJECT, "body", PROPERTY_HINT_RESOURCE_TYPE, "Node2D"), PropertyInfo(Variant::INT, "body_shape_index"), PropertyInfo(Variant::INT, "local_shape_index")));
ADD_SIGNAL(MethodInfo("body_shape_exited", PropertyInfo(Variant::RID, "body_rid"), PropertyInfo(Variant::OBJECT, "body", PROPERTY_HINT_RESOURCE_TYPE, "Node2D"), PropertyInfo(Variant::INT, "body_shape_index"), PropertyInfo(Variant::INT, "local_shape_index")));
ADD_SIGNAL(MethodInfo("body_entered", PropertyInfo(Variant::OBJECT, "body", PROPERTY_HINT_RESOURCE_TYPE, "Node2D")));
@@ -547,13 +601,20 @@ void Area2D::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "monitorable"), "set_monitorable", "is_monitorable");
ADD_PROPERTY(PropertyInfo(Variant::INT, "priority", PROPERTY_HINT_RANGE, "0,128,1"), "set_priority", "get_priority");
- ADD_GROUP("Physics Overrides", "");
- ADD_PROPERTY(PropertyInfo(Variant::INT, "space_override", PROPERTY_HINT_ENUM, "Disabled,Combine,Combine-Replace,Replace,Replace-Combine"), "set_space_override_mode", "get_space_override_mode");
- ADD_PROPERTY(PropertyInfo(Variant::BOOL, "gravity_point"), "set_gravity_is_point", "is_gravity_a_point");
- ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "gravity_distance_scale", PROPERTY_HINT_RANGE, "0,1024,0.001,or_greater,exp"), "set_gravity_distance_scale", "get_gravity_distance_scale");
- ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "gravity_vec"), "set_gravity_vector", "get_gravity_vector");
+ ADD_GROUP("Gravity", "gravity_");
+ ADD_PROPERTY(PropertyInfo(Variant::INT, "gravity_space_override", PROPERTY_HINT_ENUM, "Disabled,Combine,Combine-Replace,Replace,Replace-Combine", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), "set_gravity_space_override_mode", "get_gravity_space_override_mode");
+ ADD_PROPERTY(PropertyInfo(Variant::BOOL, "gravity_point", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), "set_gravity_is_point", "is_gravity_a_point");
+ ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "gravity_point_distance_scale", PROPERTY_HINT_RANGE, "0,1024,0.001,or_greater,exp"), "set_gravity_point_distance_scale", "get_gravity_point_distance_scale");
+ ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "gravity_point_center"), "set_gravity_point_center", "get_gravity_point_center");
+ ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "gravity_direction"), "set_gravity_direction", "get_gravity_direction");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "gravity", PROPERTY_HINT_RANGE, "-4096,4096,0.001,or_lesser,or_greater"), "set_gravity", "get_gravity");
+
+ ADD_GROUP("Linear Damp", "linear_damp_");
+ ADD_PROPERTY(PropertyInfo(Variant::INT, "linear_damp_space_override", PROPERTY_HINT_ENUM, "Disabled,Combine,Combine-Replace,Replace,Replace-Combine", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), "set_linear_damp_space_override_mode", "get_linear_damp_space_override_mode");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "linear_damp", PROPERTY_HINT_RANGE, "0,100,0.001,or_greater"), "set_linear_damp", "get_linear_damp");
+
+ ADD_GROUP("Angular Damp", "angular_damp_");
+ ADD_PROPERTY(PropertyInfo(Variant::INT, "angular_damp_space_override", PROPERTY_HINT_ENUM, "Disabled,Combine,Combine-Replace,Replace,Replace-Combine", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), "set_angular_damp_space_override_mode", "get_angular_damp_space_override_mode");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "angular_damp", PROPERTY_HINT_RANGE, "0,100,0.001,or_greater"), "set_angular_damp", "get_angular_damp");
ADD_GROUP("Audio Bus", "audio_bus_");
@@ -570,7 +631,7 @@ void Area2D::_bind_methods() {
Area2D::Area2D() :
CollisionObject2D(PhysicsServer2D::get_singleton()->area_create(), true) {
set_gravity(980);
- set_gravity_vector(Vector2(0, 1));
+ set_gravity_direction(Vector2(0, 1));
set_monitoring(true);
set_monitorable(true);
}
diff --git a/scene/2d/area_2d.h b/scene/2d/area_2d.h
index 2c29e4660d..98ba270a61 100644
--- a/scene/2d/area_2d.h
+++ b/scene/2d/area_2d.h
@@ -47,14 +47,19 @@ public:
};
private:
- SpaceOverride space_override = SPACE_OVERRIDE_DISABLED;
+ SpaceOverride gravity_space_override = SPACE_OVERRIDE_DISABLED;
Vector2 gravity_vec;
real_t gravity;
bool gravity_is_point = false;
real_t gravity_distance_scale = 0.0;
+
+ SpaceOverride linear_damp_space_override = SPACE_OVERRIDE_DISABLED;
+ SpaceOverride angular_damp_space_override = SPACE_OVERRIDE_DISABLED;
real_t linear_damp = 0.1;
real_t angular_damp = 1.0;
+
int priority = 0;
+
bool monitoring = false;
bool monitorable = false;
bool locked = false;
@@ -133,21 +138,30 @@ protected:
void _validate_property(PropertyInfo &property) const override;
public:
- void set_space_override_mode(SpaceOverride p_mode);
- SpaceOverride get_space_override_mode() const;
+ void set_gravity_space_override_mode(SpaceOverride p_mode);
+ SpaceOverride get_gravity_space_override_mode() const;
void set_gravity_is_point(bool p_enabled);
bool is_gravity_a_point() const;
- void set_gravity_distance_scale(real_t p_scale);
- real_t get_gravity_distance_scale() const;
+ void set_gravity_point_distance_scale(real_t p_scale);
+ real_t get_gravity_point_distance_scale() const;
- void set_gravity_vector(const Vector2 &p_vec);
- Vector2 get_gravity_vector() const;
+ void set_gravity_point_center(const Vector2 &p_center);
+ const Vector2 &get_gravity_point_center() const;
+
+ void set_gravity_direction(const Vector2 &p_direction);
+ const Vector2 &get_gravity_direction() const;
void set_gravity(real_t p_gravity);
real_t get_gravity() const;
+ void set_linear_damp_space_override_mode(SpaceOverride p_mode);
+ SpaceOverride get_linear_damp_space_override_mode() const;
+
+ void set_angular_damp_space_override_mode(SpaceOverride p_mode);
+ SpaceOverride get_angular_damp_space_override_mode() const;
+
void set_linear_damp(real_t p_linear_damp);
real_t get_linear_damp() const;
diff --git a/scene/2d/audio_stream_player_2d.cpp b/scene/2d/audio_stream_player_2d.cpp
index f73d52152e..8bf95e6965 100644
--- a/scene/2d/audio_stream_player_2d.cpp
+++ b/scene/2d/audio_stream_player_2d.cpp
@@ -97,7 +97,7 @@ void AudioStreamPlayer2D::_notification(int p_what) {
while (stream_playbacks.size() > max_polyphony) {
AudioServer::get_singleton()->stop_playback_stream(stream_playbacks[0]);
- stream_playbacks.remove(0);
+ stream_playbacks.remove_at(0);
}
}
}
@@ -112,7 +112,13 @@ StringName AudioStreamPlayer2D::_get_actual_bus() {
PhysicsDirectSpaceState2D *space_state = PhysicsServer2D::get_singleton()->space_get_direct_state(world_2d->get_space());
PhysicsDirectSpaceState2D::ShapeResult sr[MAX_INTERSECT_AREAS];
- int areas = space_state->intersect_point(global_pos, sr, MAX_INTERSECT_AREAS, Set<RID>(), area_mask, false, true);
+ PhysicsDirectSpaceState2D::PointParameters point_params;
+ point_params.position = global_pos;
+ point_params.collision_mask = area_mask;
+ point_params.collide_with_bodies = false;
+ point_params.collide_with_areas = true;
+
+ int areas = space_state->intersect_point(point_params, sr, MAX_INTERSECT_AREAS);
for (int i = 0; i < areas; i++) {
Area2D *area2d = Object::cast_to<Area2D>(sr[i].collider);
diff --git a/scene/2d/camera_2d.cpp b/scene/2d/camera_2d.cpp
index 8195d98f55..bf5671be19 100644
--- a/scene/2d/camera_2d.cpp
+++ b/scene/2d/camera_2d.cpp
@@ -232,6 +232,7 @@ void Camera2D::_notification(int p_what) {
} break;
case NOTIFICATION_ENTER_TREE: {
+ ERR_FAIL_COND(!is_inside_tree());
if (custom_viewport && ObjectDB::get_instance(custom_viewport_id)) {
viewport = custom_viewport;
} else {
@@ -660,7 +661,7 @@ bool Camera2D::is_margin_drawing_enabled() const {
void Camera2D::_validate_property(PropertyInfo &property) const {
if (!smoothing_enabled && property.name == "smoothing_speed") {
- property.usage = PROPERTY_USAGE_NOEDITOR;
+ property.usage = PROPERTY_USAGE_NO_EDITOR;
}
}
diff --git a/scene/2d/collision_object_2d.cpp b/scene/2d/collision_object_2d.cpp
index 4b348f12e6..bd13d96b01 100644
--- a/scene/2d/collision_object_2d.cpp
+++ b/scene/2d/collision_object_2d.cpp
@@ -434,7 +434,7 @@ void CollisionObject2D::shape_owner_remove_shape(uint32_t p_owner, int p_shape)
PhysicsServer2D::get_singleton()->body_remove_shape(rid, index_to_remove);
}
- shapes[p_owner].shapes.remove(p_shape);
+ shapes[p_owner].shapes.remove_at(p_shape);
for (KeyValue<uint32_t, ShapeData> &E : shapes) {
for (int i = 0; i < E.value.shapes.size(); i++) {
diff --git a/scene/2d/cpu_particles_2d.cpp b/scene/2d/cpu_particles_2d.cpp
index bf26ec1f20..80c17b6e88 100644
--- a/scene/2d/cpu_particles_2d.cpp
+++ b/scene/2d/cpu_particles_2d.cpp
@@ -1168,7 +1168,7 @@ void CPUParticles2D::convert_from_particles(Node *p_particles) {
set_color(material->get_color());
- Ref<GradientTexture> gt = material->get_color_ramp();
+ Ref<GradientTexture1D> gt = material->get_color_ramp();
if (gt.is_valid()) {
set_color_ramp(gt->get_gradient());
}
diff --git a/scene/2d/light_2d.cpp b/scene/2d/light_2d.cpp
index 1853b3428c..66c0f979ae 100644
--- a/scene/2d/light_2d.cpp
+++ b/scene/2d/light_2d.cpp
@@ -221,7 +221,7 @@ real_t Light2D::get_shadow_smooth() const {
void Light2D::_validate_property(PropertyInfo &property) const {
if (!shadow && (property.name == "shadow_color" || property.name == "shadow_filter" || property.name == "shadow_filter_smooth" || property.name == "shadow_item_cull_mask")) {
- property.usage = PROPERTY_USAGE_NOEDITOR;
+ property.usage = PROPERTY_USAGE_NO_EDITOR;
}
}
diff --git a/scene/2d/line_2d.cpp b/scene/2d/line_2d.cpp
index 37eb45c21d..00767ec22c 100644
--- a/scene/2d/line_2d.cpp
+++ b/scene/2d/line_2d.cpp
@@ -148,7 +148,7 @@ void Line2D::add_point(Vector2 p_pos, int p_atpos) {
}
void Line2D::remove_point(int i) {
- _points.remove(i);
+ _points.remove_at(i);
update();
}
diff --git a/scene/2d/navigation_obstacle_2d.cpp b/scene/2d/navigation_obstacle_2d.cpp
index 0a105826c0..8802a1098a 100644
--- a/scene/2d/navigation_obstacle_2d.cpp
+++ b/scene/2d/navigation_obstacle_2d.cpp
@@ -34,19 +34,41 @@
#include "servers/navigation_server_2d.h"
void NavigationObstacle2D::_bind_methods() {
+ ClassDB::bind_method(D_METHOD("set_estimate_radius", "estimate_radius"), &NavigationObstacle2D::set_estimate_radius);
+ ClassDB::bind_method(D_METHOD("is_radius_estimated"), &NavigationObstacle2D::is_radius_estimated);
+ ClassDB::bind_method(D_METHOD("set_radius", "radius"), &NavigationObstacle2D::set_radius);
+ ClassDB::bind_method(D_METHOD("get_radius"), &NavigationObstacle2D::get_radius);
+
+ ADD_PROPERTY(PropertyInfo(Variant::BOOL, "estimate_radius"), "set_estimate_radius", "is_radius_estimated");
+ ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "radius", PROPERTY_HINT_RANGE, "0.01,500,0.01"), "set_radius", "get_radius");
+}
+
+void NavigationObstacle2D::_validate_property(PropertyInfo &p_property) const {
+ if (p_property.name == "radius") {
+ if (estimate_radius) {
+ p_property.usage = PROPERTY_USAGE_NO_EDITOR;
+ }
+ }
}
void NavigationObstacle2D::_notification(int p_what) {
switch (p_what) {
case NOTIFICATION_READY: {
+ initialize_agent();
+ parent_node2d = Object::cast_to<Node2D>(get_parent());
+ if (parent_node2d != nullptr) {
+ // place agent on navigation map first or else the RVO agent callback creation fails silently later
+ NavigationServer2D::get_singleton()->agent_set_map(get_rid(), parent_node2d->get_world_2d()->get_navigation_map());
+ }
set_physics_process_internal(true);
} break;
case NOTIFICATION_EXIT_TREE: {
+ parent_node2d = nullptr;
set_physics_process_internal(false);
} break;
case NOTIFICATION_PARENTED: {
parent_node2d = Object::cast_to<Node2D>(get_parent());
- update_agent_shape();
+ reevaluate_agent_radius();
} break;
case NOTIFICATION_UNPARENTED: {
parent_node2d = nullptr;
@@ -78,7 +100,22 @@ TypedArray<String> NavigationObstacle2D::get_configuration_warnings() const {
return warnings;
}
-void NavigationObstacle2D::update_agent_shape() {
+void NavigationObstacle2D::initialize_agent() {
+ NavigationServer2D::get_singleton()->agent_set_neighbor_dist(agent, 0.0);
+ NavigationServer2D::get_singleton()->agent_set_max_neighbors(agent, 0);
+ NavigationServer2D::get_singleton()->agent_set_time_horizon(agent, 0.0);
+ NavigationServer2D::get_singleton()->agent_set_max_speed(agent, 0.0);
+}
+
+void NavigationObstacle2D::reevaluate_agent_radius() {
+ if (!estimate_radius) {
+ NavigationServer2D::get_singleton()->agent_set_radius(agent, radius);
+ } else if (parent_node2d) {
+ NavigationServer2D::get_singleton()->agent_set_radius(agent, estimate_agent_radius());
+ }
+}
+
+real_t NavigationObstacle2D::estimate_agent_radius() const {
if (parent_node2d) {
// Estimate the radius of this physics body
real_t radius = 0.0;
@@ -101,15 +138,21 @@ void NavigationObstacle2D::update_agent_shape() {
Vector2 s = parent_node2d->get_global_scale();
radius *= MAX(s.x, s.y);
- if (radius == 0.0) {
- radius = 1.0; // Never a 0 radius
+ if (radius > 0.0) {
+ return radius;
}
-
- // Initialize the Agent as an object
- NavigationServer2D::get_singleton()->agent_set_neighbor_dist(agent, 0.0);
- NavigationServer2D::get_singleton()->agent_set_max_neighbors(agent, 0);
- NavigationServer2D::get_singleton()->agent_set_time_horizon(agent, 0.0);
- NavigationServer2D::get_singleton()->agent_set_radius(agent, radius);
- NavigationServer2D::get_singleton()->agent_set_max_speed(agent, 0.0);
}
+ return 1.0; // Never a 0 radius
+}
+
+void NavigationObstacle2D::set_estimate_radius(bool p_estimate_radius) {
+ estimate_radius = p_estimate_radius;
+ notify_property_list_changed();
+ reevaluate_agent_radius();
+}
+
+void NavigationObstacle2D::set_radius(real_t p_radius) {
+ ERR_FAIL_COND_MSG(p_radius <= 0.0, "Radius must be greater than 0.");
+ radius = p_radius;
+ reevaluate_agent_radius();
}
diff --git a/scene/2d/navigation_obstacle_2d.h b/scene/2d/navigation_obstacle_2d.h
index 9cffc2c0c3..a5603f059f 100644
--- a/scene/2d/navigation_obstacle_2d.h
+++ b/scene/2d/navigation_obstacle_2d.h
@@ -40,8 +40,12 @@ class NavigationObstacle2D : public Node {
Node2D *parent_node2d = nullptr;
RID agent;
+ bool estimate_radius = true;
+ real_t radius = 1.0;
+
protected:
static void _bind_methods();
+ void _validate_property(PropertyInfo &p_property) const override;
void _notification(int p_what);
public:
@@ -52,10 +56,21 @@ public:
return agent;
}
+ void set_estimate_radius(bool p_estimate_radius);
+ bool is_radius_estimated() const {
+ return estimate_radius;
+ }
+ void set_radius(real_t p_radius);
+ real_t get_radius() const {
+ return radius;
+ }
+
TypedArray<String> get_configuration_warnings() const override;
private:
- void update_agent_shape();
+ void initialize_agent();
+ void reevaluate_agent_radius();
+ real_t estimate_agent_radius() const;
};
#endif
diff --git a/scene/2d/navigation_region_2d.cpp b/scene/2d/navigation_region_2d.cpp
index cbf0d50c4e..ecd79c23a7 100644
--- a/scene/2d/navigation_region_2d.cpp
+++ b/scene/2d/navigation_region_2d.cpp
@@ -207,7 +207,7 @@ void NavigationPolygon::set_outline(int p_idx, const Vector<Vector2> &p_outline)
void NavigationPolygon::remove_outline(int p_idx) {
ERR_FAIL_INDEX(p_idx, outlines.size());
- outlines.remove(p_idx);
+ outlines.remove_at(p_idx);
rect_cache_dirty = true;
}
@@ -346,9 +346,9 @@ void NavigationPolygon::_bind_methods() {
ClassDB::bind_method(D_METHOD("_set_outlines", "outlines"), &NavigationPolygon::_set_outlines);
ClassDB::bind_method(D_METHOD("_get_outlines"), &NavigationPolygon::_get_outlines);
- ADD_PROPERTY(PropertyInfo(Variant::PACKED_VECTOR2_ARRAY, "vertices", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL), "set_vertices", "get_vertices");
- ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "polygons", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL), "_set_polygons", "_get_polygons");
- ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "outlines", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL), "_set_outlines", "_get_outlines");
+ ADD_PROPERTY(PropertyInfo(Variant::PACKED_VECTOR2_ARRAY, "vertices", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL), "set_vertices", "get_vertices");
+ ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "polygons", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL), "_set_polygons", "_get_polygons");
+ ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "outlines", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL), "_set_outlines", "_get_outlines");
}
void NavigationRegion2D::set_enabled(bool p_enabled) {
@@ -464,7 +464,7 @@ void NavigationRegion2D::_notification(int p_what) {
draw_line(a, b, doors_color);
// Draw a circle to illustrate the margins.
- real_t angle = b.angle_to_point(a);
+ real_t angle = a.angle_to_point(b);
draw_arc(a, radius, angle + Math_PI / 2.0, angle - Math_PI / 2.0 + Math_TAU, 10, doors_color);
draw_arc(b, radius, angle - Math_PI / 2.0, angle + Math_PI / 2.0, 10, doors_color);
}
diff --git a/scene/2d/physics_body_2d.cpp b/scene/2d/physics_body_2d.cpp
index 4d4d21bad7..f0e51097db 100644
--- a/scene/2d/physics_body_2d.cpp
+++ b/scene/2d/physics_body_2d.cpp
@@ -133,9 +133,12 @@ bool PhysicsBody2D::test_move(const Transform2D &p_from, const Vector2 &p_linear
ERR_FAIL_COND_V(!is_inside_tree(), false);
PhysicsServer2D::MotionResult *r = nullptr;
+ PhysicsServer2D::MotionResult temp_result;
if (r_collision.is_valid()) {
// Needs const_cast because method bindings don't support non-const Ref.
r = const_cast<PhysicsServer2D::MotionResult *>(&r_collision->result);
+ } else {
+ r = &temp_result;
}
// Hack in order to work with calling from _process as well as from _physics_process; calling from thread is risky.
@@ -143,7 +146,14 @@ bool PhysicsBody2D::test_move(const Transform2D &p_from, const Vector2 &p_linear
PhysicsServer2D::MotionParameters parameters(p_from, p_linear_velocity * delta, p_margin);
- return PhysicsServer2D::get_singleton()->body_test_motion(get_rid(), parameters, r);
+ bool colliding = PhysicsServer2D::get_singleton()->body_test_motion(get_rid(), parameters, r);
+
+ if (colliding) {
+ // Don't report collision when the whole motion is done.
+ return (r->collision_safe_fraction < 1.0);
+ } else {
+ return false;
+ }
}
TypedArray<PhysicsBody2D> PhysicsBody2D::get_collision_exceptions() {
@@ -684,6 +694,24 @@ real_t RigidDynamicBody2D::get_gravity_scale() const {
return gravity_scale;
}
+void RigidDynamicBody2D::set_linear_damp_mode(DampMode p_mode) {
+ linear_damp_mode = p_mode;
+ PhysicsServer2D::get_singleton()->body_set_param(get_rid(), PhysicsServer2D::BODY_PARAM_LINEAR_DAMP_MODE, linear_damp_mode);
+}
+
+RigidDynamicBody2D::DampMode RigidDynamicBody2D::get_linear_damp_mode() const {
+ return linear_damp_mode;
+}
+
+void RigidDynamicBody2D::set_angular_damp_mode(DampMode p_mode) {
+ angular_damp_mode = p_mode;
+ PhysicsServer2D::get_singleton()->body_set_param(get_rid(), PhysicsServer2D::BODY_PARAM_ANGULAR_DAMP_MODE, angular_damp_mode);
+}
+
+RigidDynamicBody2D::DampMode RigidDynamicBody2D::get_angular_damp_mode() const {
+ return angular_damp_mode;
+}
+
void RigidDynamicBody2D::set_linear_damp(real_t p_linear_damp) {
ERR_FAIL_COND(p_linear_damp < -1);
linear_damp = p_linear_damp;
@@ -916,6 +944,12 @@ void RigidDynamicBody2D::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_gravity_scale", "gravity_scale"), &RigidDynamicBody2D::set_gravity_scale);
ClassDB::bind_method(D_METHOD("get_gravity_scale"), &RigidDynamicBody2D::get_gravity_scale);
+ ClassDB::bind_method(D_METHOD("set_linear_damp_mode", "linear_damp_mode"), &RigidDynamicBody2D::set_linear_damp_mode);
+ ClassDB::bind_method(D_METHOD("get_linear_damp_mode"), &RigidDynamicBody2D::get_linear_damp_mode);
+
+ ClassDB::bind_method(D_METHOD("set_angular_damp_mode", "angular_damp_mode"), &RigidDynamicBody2D::set_angular_damp_mode);
+ ClassDB::bind_method(D_METHOD("get_angular_damp_mode"), &RigidDynamicBody2D::get_angular_damp_mode);
+
ClassDB::bind_method(D_METHOD("set_linear_damp", "linear_damp"), &RigidDynamicBody2D::set_linear_damp);
ClassDB::bind_method(D_METHOD("get_linear_damp"), &RigidDynamicBody2D::get_linear_damp);
@@ -992,9 +1026,11 @@ void RigidDynamicBody2D::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::INT, "freeze_mode", PROPERTY_HINT_ENUM, "Static,Kinematic"), "set_freeze_mode", "get_freeze_mode");
ADD_GROUP("Linear", "linear_");
ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "linear_velocity"), "set_linear_velocity", "get_linear_velocity");
+ ADD_PROPERTY(PropertyInfo(Variant::INT, "linear_damp_mode", PROPERTY_HINT_ENUM, "Combine,Replace"), "set_linear_damp_mode", "get_linear_damp_mode");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "linear_damp", PROPERTY_HINT_RANGE, "-1,100,0.001,or_greater"), "set_linear_damp", "get_linear_damp");
ADD_GROUP("Angular", "angular_");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "angular_velocity"), "set_angular_velocity", "get_angular_velocity");
+ ADD_PROPERTY(PropertyInfo(Variant::INT, "angular_damp_mode", PROPERTY_HINT_ENUM, "Combine,Replace"), "set_angular_damp_mode", "get_angular_damp_mode");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "angular_damp", PROPERTY_HINT_RANGE, "-1,100,0.001,or_greater"), "set_angular_damp", "get_angular_damp");
ADD_GROUP("Applied Forces", "applied_");
ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "applied_force"), "set_applied_force", "get_applied_force");
@@ -1012,6 +1048,9 @@ void RigidDynamicBody2D::_bind_methods() {
BIND_ENUM_CONSTANT(CENTER_OF_MASS_MODE_AUTO);
BIND_ENUM_CONSTANT(CENTER_OF_MASS_MODE_CUSTOM);
+ BIND_ENUM_CONSTANT(DAMP_MODE_COMBINE);
+ BIND_ENUM_CONSTANT(DAMP_MODE_REPLACE);
+
BIND_ENUM_CONSTANT(CCD_MODE_DISABLED);
BIND_ENUM_CONSTANT(CCD_MODE_CAST_RAY);
BIND_ENUM_CONSTANT(CCD_MODE_CAST_SHAPE);
@@ -1020,7 +1059,7 @@ void RigidDynamicBody2D::_bind_methods() {
void RigidDynamicBody2D::_validate_property(PropertyInfo &property) const {
if (center_of_mass_mode != CENTER_OF_MASS_MODE_CUSTOM) {
if (property.name == "center_of_mass") {
- property.usage = PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL;
+ property.usage = PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL;
}
}
}
@@ -1072,6 +1111,10 @@ bool CharacterBody2D::move_and_slide() {
if (bs) {
Vector2 local_position = gt.elements[2] - bs->get_transform().elements[2];
current_platform_velocity = bs->get_velocity_at_local_position(local_position);
+ } else {
+ // Body is removed or destroyed, invalidate floor.
+ current_platform_velocity = Vector2();
+ platform_rid = RID();
}
} else {
current_platform_velocity = Vector2();
@@ -1274,6 +1317,17 @@ void CharacterBody2D::_move_and_slide_grounded(double p_delta, bool p_was_on_flo
_snap_on_floor(p_was_on_floor, vel_dir_facing_up);
+ // Scales the horizontal velocity according to the wall slope.
+ if (is_on_wall_only() && motion_slide_up.dot(motion_results.get(0).collision_normal) < 0) {
+ Vector2 slide_motion = motion_velocity.slide(motion_results.get(0).collision_normal);
+ if (motion_slide_up.dot(slide_motion) < 0) {
+ motion_velocity = up_direction * up_direction.dot(motion_velocity);
+ } else {
+ // Keeps the vertical motion from motion_velocity and add the horizontal motion of the projection.
+ motion_velocity = up_direction * up_direction.dot(motion_velocity) + slide_motion.slide(up_direction);
+ }
+ }
+
// Reset the gravity accumulation when touching the ground.
if (on_floor && !vel_dir_facing_up) {
motion_velocity = motion_velocity.slide(up_direction);
@@ -1686,9 +1740,9 @@ void CharacterBody2D::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::INT, "motion_mode", PROPERTY_HINT_ENUM, "Grounded,Free", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), "set_motion_mode", "get_motion_mode");
ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "up_direction"), "set_up_direction", "get_up_direction");
- ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "motion_velocity", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR), "set_motion_velocity", "get_motion_velocity");
+ ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "motion_velocity", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), "set_motion_velocity", "get_motion_velocity");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "slide_on_ceiling"), "set_slide_on_ceiling_enabled", "is_slide_on_ceiling_enabled");
- ADD_PROPERTY(PropertyInfo(Variant::INT, "max_slides", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR), "set_max_slides", "get_max_slides");
+ ADD_PROPERTY(PropertyInfo(Variant::INT, "max_slides", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), "set_max_slides", "get_max_slides");
ADD_GROUP("Free Mode", "free_mode_");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "free_mode_min_slide_angle", PROPERTY_HINT_RANGE, "0,180,0.1,radians", PROPERTY_USAGE_DEFAULT), "set_free_mode_min_slide_angle", "get_free_mode_min_slide_angle");
@@ -1715,11 +1769,11 @@ void CharacterBody2D::_bind_methods() {
void CharacterBody2D::_validate_property(PropertyInfo &property) const {
if (motion_mode == MOTION_MODE_FREE) {
if (property.name.begins_with("floor_") || property.name == "up_direction" || property.name == "slide_on_ceiling") {
- property.usage = PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL;
+ property.usage = PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL;
}
} else {
if (property.name == "free_mode_min_slide_angle") {
- property.usage = PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL;
+ property.usage = PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL;
}
}
}
diff --git a/scene/2d/physics_body_2d.h b/scene/2d/physics_body_2d.h
index 15e8469bb4..2abce4b0a5 100644
--- a/scene/2d/physics_body_2d.h
+++ b/scene/2d/physics_body_2d.h
@@ -127,6 +127,11 @@ public:
CENTER_OF_MASS_MODE_CUSTOM,
};
+ enum DampMode {
+ DAMP_MODE_COMBINE,
+ DAMP_MODE_REPLACE,
+ };
+
enum CCDMode {
CCD_MODE_DISABLED,
CCD_MODE_CAST_RAY,
@@ -146,8 +151,12 @@ private:
Ref<PhysicsMaterial> physics_material_override;
real_t gravity_scale = 1.0;
- real_t linear_damp = -1.0;
- real_t angular_damp = -1.0;
+
+ DampMode linear_damp_mode = DAMP_MODE_COMBINE;
+ DampMode angular_damp_mode = DAMP_MODE_COMBINE;
+
+ real_t linear_damp = 0.0;
+ real_t angular_damp = 0.0;
Vector2 linear_velocity;
real_t angular_velocity = 0.0;
@@ -241,6 +250,12 @@ public:
void set_gravity_scale(real_t p_gravity_scale);
real_t get_gravity_scale() const;
+ void set_linear_damp_mode(DampMode p_mode);
+ DampMode get_linear_damp_mode() const;
+
+ void set_angular_damp_mode(DampMode p_mode);
+ DampMode get_angular_damp_mode() const;
+
void set_linear_damp(real_t p_linear_damp);
real_t get_linear_damp() const;
@@ -300,6 +315,7 @@ private:
VARIANT_ENUM_CAST(RigidDynamicBody2D::FreezeMode);
VARIANT_ENUM_CAST(RigidDynamicBody2D::CenterOfMassMode);
+VARIANT_ENUM_CAST(RigidDynamicBody2D::DampMode);
VARIANT_ENUM_CAST(RigidDynamicBody2D::CCDMode);
class CharacterBody2D : public PhysicsBody2D {
diff --git a/scene/2d/polygon_2d.cpp b/scene/2d/polygon_2d.cpp
index 7366be5a7d..7a237bf557 100644
--- a/scene/2d/polygon_2d.cpp
+++ b/scene/2d/polygon_2d.cpp
@@ -92,7 +92,7 @@ bool Polygon2D::_edit_is_selected_on_click(const Point2 &p_point, double p_toler
void Polygon2D::_validate_property(PropertyInfo &property) const {
if (!invert && property.name == "invert_border") {
- property.usage = PROPERTY_USAGE_NOEDITOR;
+ property.usage = PROPERTY_USAGE_NO_EDITOR;
}
}
@@ -532,7 +532,7 @@ Vector<float> Polygon2D::get_bone_weights(int p_index) const {
void Polygon2D::erase_bone(int p_idx) {
ERR_FAIL_INDEX(p_idx, bone_weights.size());
- bone_weights.remove(p_idx);
+ bone_weights.remove_at(p_idx);
}
void Polygon2D::clear_bones() {
@@ -554,7 +554,9 @@ void Polygon2D::set_bone_path(int p_index, const NodePath &p_path) {
Array Polygon2D::_get_bones() const {
Array bones;
for (int i = 0; i < get_bone_count(); i++) {
- bones.push_back(get_bone_path(i));
+ // Convert path property to String to avoid errors due to invalid node path in editor,
+ // because it's relative to the Skeleton2D node and not Polygon2D.
+ bones.push_back(String(get_bone_path(i)));
bones.push_back(get_bone_weights(i));
}
return bones;
@@ -564,7 +566,8 @@ void Polygon2D::_set_bones(const Array &p_bones) {
ERR_FAIL_COND(p_bones.size() & 1);
clear_bones();
for (int i = 0; i < p_bones.size(); i += 2) {
- add_bone(p_bones[i], p_bones[i + 1]);
+ // Convert back from String to NodePath.
+ add_bone(NodePath(p_bones[i]), p_bones[i + 1]);
}
}
@@ -659,7 +662,7 @@ void Polygon2D::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::PACKED_VECTOR2_ARRAY, "uv"), "set_uv", "get_uv");
ADD_PROPERTY(PropertyInfo(Variant::PACKED_COLOR_ARRAY, "vertex_colors"), "set_vertex_colors", "get_vertex_colors");
ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "polygons"), "set_polygons", "get_polygons");
- ADD_PROPERTY(PropertyInfo(Variant::BOOL, "bones", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR), "_set_bones", "_get_bones");
+ ADD_PROPERTY(PropertyInfo(Variant::BOOL, "bones", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), "_set_bones", "_get_bones");
ADD_PROPERTY(PropertyInfo(Variant::INT, "internal_vertex_count", PROPERTY_HINT_RANGE, "0,1000"), "set_internal_vertex_count", "get_internal_vertex_count");
}
diff --git a/scene/2d/ray_cast_2d.cpp b/scene/2d/ray_cast_2d.cpp
index 0a8e9e2a58..f9830a8743 100644
--- a/scene/2d/ray_cast_2d.cpp
+++ b/scene/2d/ray_cast_2d.cpp
@@ -192,7 +192,17 @@ void RayCast2D::_update_raycast_state() {
PhysicsDirectSpaceState2D::RayResult rr;
bool prev_collision_state = collided;
- if (dss->intersect_ray(gt.get_origin(), gt.xform(to), rr, exclude, collision_mask, collide_with_bodies, collide_with_areas)) {
+
+ PhysicsDirectSpaceState2D::RayParameters ray_params;
+ ray_params.from = gt.get_origin();
+ ray_params.to = gt.xform(to);
+ ray_params.exclude = exclude;
+ ray_params.collision_mask = collision_mask;
+ ray_params.collide_with_bodies = collide_with_bodies;
+ ray_params.collide_with_areas = collide_with_areas;
+ ray_params.hit_from_inside = hit_from_inside;
+
+ if (dss->intersect_ray(ray_params, rr)) {
collided = true;
against = rr.collider_id;
collision_point = rr.position;
@@ -281,22 +291,30 @@ void RayCast2D::clear_exceptions() {
exclude.clear();
}
-void RayCast2D::set_collide_with_areas(bool p_clip) {
- collide_with_areas = p_clip;
+void RayCast2D::set_collide_with_areas(bool p_enabled) {
+ collide_with_areas = p_enabled;
}
bool RayCast2D::is_collide_with_areas_enabled() const {
return collide_with_areas;
}
-void RayCast2D::set_collide_with_bodies(bool p_clip) {
- collide_with_bodies = p_clip;
+void RayCast2D::set_collide_with_bodies(bool p_enabled) {
+ collide_with_bodies = p_enabled;
}
bool RayCast2D::is_collide_with_bodies_enabled() const {
return collide_with_bodies;
}
+void RayCast2D::set_hit_from_inside(bool p_enabled) {
+ hit_from_inside = p_enabled;
+}
+
+bool RayCast2D::is_hit_from_inside_enabled() const {
+ return hit_from_inside;
+}
+
void RayCast2D::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_enabled", "enabled"), &RayCast2D::set_enabled);
ClassDB::bind_method(D_METHOD("is_enabled"), &RayCast2D::is_enabled);
@@ -335,10 +353,14 @@ void RayCast2D::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_collide_with_bodies", "enable"), &RayCast2D::set_collide_with_bodies);
ClassDB::bind_method(D_METHOD("is_collide_with_bodies_enabled"), &RayCast2D::is_collide_with_bodies_enabled);
+ ClassDB::bind_method(D_METHOD("set_hit_from_inside", "enable"), &RayCast2D::set_hit_from_inside);
+ ClassDB::bind_method(D_METHOD("is_hit_from_inside_enabled"), &RayCast2D::is_hit_from_inside_enabled);
+
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "enabled"), "set_enabled", "is_enabled");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "exclude_parent"), "set_exclude_parent_body", "get_exclude_parent_body");
ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "target_position"), "set_target_position", "get_target_position");
ADD_PROPERTY(PropertyInfo(Variant::INT, "collision_mask", PROPERTY_HINT_LAYERS_2D_PHYSICS), "set_collision_mask", "get_collision_mask");
+ ADD_PROPERTY(PropertyInfo(Variant::BOOL, "hit_from_inside"), "set_hit_from_inside", "is_hit_from_inside_enabled");
ADD_GROUP("Collide With", "collide_with");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "collide_with_areas", PROPERTY_HINT_LAYERS_3D_PHYSICS), "set_collide_with_areas", "is_collide_with_areas_enabled");
diff --git a/scene/2d/ray_cast_2d.h b/scene/2d/ray_cast_2d.h
index 65b6e7899b..3ee09fad32 100644
--- a/scene/2d/ray_cast_2d.h
+++ b/scene/2d/ray_cast_2d.h
@@ -51,6 +51,8 @@ class RayCast2D : public Node2D {
bool collide_with_areas = false;
bool collide_with_bodies = true;
+ bool hit_from_inside = false;
+
void _draw_debug_shape();
protected:
@@ -65,6 +67,9 @@ public:
void set_collide_with_bodies(bool p_clip);
bool is_collide_with_bodies_enabled() const;
+ void set_hit_from_inside(bool p_enable);
+ bool is_hit_from_inside_enabled() const;
+
void set_enabled(bool p_enabled);
bool is_enabled() const;
diff --git a/scene/2d/shape_cast_2d.cpp b/scene/2d/shape_cast_2d.cpp
new file mode 100644
index 0000000000..50b44eb4ef
--- /dev/null
+++ b/scene/2d/shape_cast_2d.cpp
@@ -0,0 +1,459 @@
+/*************************************************************************/
+/* shape_cast_2d.cpp */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+
+#include "shape_cast_2d.h"
+
+#include "core/config/engine.h"
+#include "core/core_string_names.h"
+#include "scene/2d/collision_object_2d.h"
+#include "scene/2d/physics_body_2d.h"
+#include "scene/resources/circle_shape_2d.h"
+#include "servers/physics_2d/godot_physics_server_2d.h"
+
+void ShapeCast2D::set_target_position(const Vector2 &p_point) {
+ target_position = p_point;
+ if (is_inside_tree() && (Engine::get_singleton()->is_editor_hint() || get_tree()->is_debugging_collisions_hint())) {
+ update();
+ }
+}
+
+Vector2 ShapeCast2D::get_target_position() const {
+ return target_position;
+}
+
+void ShapeCast2D::set_margin(real_t p_margin) {
+ margin = p_margin;
+}
+
+real_t ShapeCast2D::get_margin() const {
+ return margin;
+}
+
+void ShapeCast2D::set_max_results(int p_max_results) {
+ max_results = p_max_results;
+}
+
+int ShapeCast2D::get_max_results() const {
+ return max_results;
+}
+
+void ShapeCast2D::set_collision_mask(uint32_t p_mask) {
+ collision_mask = p_mask;
+}
+
+uint32_t ShapeCast2D::get_collision_mask() const {
+ return collision_mask;
+}
+
+void ShapeCast2D::set_collision_mask_value(int p_layer_number, bool p_value) {
+ ERR_FAIL_COND_MSG(p_layer_number < 1, "Collision layer number must be between 1 and 32 inclusive.");
+ ERR_FAIL_COND_MSG(p_layer_number > 32, "Collision layer number must be between 1 and 32 inclusive.");
+ uint32_t mask = get_collision_mask();
+ if (p_value) {
+ mask |= 1 << (p_layer_number - 1);
+ } else {
+ mask &= ~(1 << (p_layer_number - 1));
+ }
+ set_collision_mask(mask);
+}
+
+bool ShapeCast2D::get_collision_mask_value(int p_layer_number) const {
+ ERR_FAIL_COND_V_MSG(p_layer_number < 1, false, "Collision layer number must be between 1 and 32 inclusive.");
+ ERR_FAIL_COND_V_MSG(p_layer_number > 32, false, "Collision layer number must be between 1 and 32 inclusive.");
+ return get_collision_mask() & (1 << (p_layer_number - 1));
+}
+
+int ShapeCast2D::get_collision_count() const {
+ return result.size();
+}
+
+bool ShapeCast2D::is_colliding() const {
+ return collided;
+}
+
+Object *ShapeCast2D::get_collider(int p_idx) const {
+ ERR_FAIL_INDEX_V_MSG(p_idx, result.size(), nullptr, "No collider found.");
+
+ if (result[p_idx].collider_id.is_null()) {
+ return nullptr;
+ }
+ return ObjectDB::get_instance(result[p_idx].collider_id);
+}
+
+int ShapeCast2D::get_collider_shape(int p_idx) const {
+ ERR_FAIL_INDEX_V_MSG(p_idx, result.size(), -1, "No collider shape found.");
+ return result[p_idx].shape;
+}
+
+Vector2 ShapeCast2D::get_collision_point(int p_idx) const {
+ ERR_FAIL_INDEX_V_MSG(p_idx, result.size(), Vector2(), "No collision point found.");
+ return result[p_idx].point;
+}
+
+Vector2 ShapeCast2D::get_collision_normal(int p_idx) const {
+ ERR_FAIL_INDEX_V_MSG(p_idx, result.size(), Vector2(), "No collision normal found.");
+ return result[p_idx].normal;
+}
+
+real_t ShapeCast2D::get_closest_collision_safe_fraction() const {
+ return collision_safe_fraction;
+}
+
+real_t ShapeCast2D::get_closest_collision_unsafe_fraction() const {
+ return collision_unsafe_fraction;
+}
+
+void ShapeCast2D::set_enabled(bool p_enabled) {
+ enabled = p_enabled;
+ update();
+ if (is_inside_tree() && !Engine::get_singleton()->is_editor_hint()) {
+ set_physics_process_internal(p_enabled);
+ }
+ if (!p_enabled) {
+ collided = false;
+ }
+}
+
+bool ShapeCast2D::is_enabled() const {
+ return enabled;
+}
+
+void ShapeCast2D::set_shape(const Ref<Shape2D> &p_shape) {
+ shape = p_shape;
+ if (p_shape.is_valid()) {
+ shape->connect(CoreStringNames::get_singleton()->changed, callable_mp(this, &ShapeCast2D::_redraw_shape));
+ shape_rid = shape->get_rid();
+ }
+ update_configuration_warnings();
+ update();
+}
+
+Ref<Shape2D> ShapeCast2D::get_shape() const {
+ return shape;
+}
+
+void ShapeCast2D::set_exclude_parent_body(bool p_exclude_parent_body) {
+ if (exclude_parent_body == p_exclude_parent_body) {
+ return;
+ }
+ exclude_parent_body = p_exclude_parent_body;
+
+ if (!is_inside_tree()) {
+ return;
+ }
+ if (Object::cast_to<CollisionObject2D>(get_parent())) {
+ if (exclude_parent_body) {
+ exclude.insert(Object::cast_to<CollisionObject2D>(get_parent())->get_rid());
+ } else {
+ exclude.erase(Object::cast_to<CollisionObject2D>(get_parent())->get_rid());
+ }
+ }
+}
+
+bool ShapeCast2D::get_exclude_parent_body() const {
+ return exclude_parent_body;
+}
+
+void ShapeCast2D::_redraw_shape() {
+ update();
+}
+
+void ShapeCast2D::_notification(int p_what) {
+ switch (p_what) {
+ case NOTIFICATION_ENTER_TREE: {
+ if (enabled && !Engine::get_singleton()->is_editor_hint()) {
+ set_physics_process_internal(true);
+ } else {
+ set_physics_process_internal(false);
+ }
+ if (Object::cast_to<CollisionObject2D>(get_parent())) {
+ if (exclude_parent_body) {
+ exclude.insert(Object::cast_to<CollisionObject2D>(get_parent())->get_rid());
+ } else {
+ exclude.erase(Object::cast_to<CollisionObject2D>(get_parent())->get_rid());
+ }
+ }
+ } break;
+ case NOTIFICATION_EXIT_TREE: {
+ if (enabled) {
+ set_physics_process_internal(false);
+ }
+ } break;
+
+ case NOTIFICATION_DRAW: {
+#ifdef TOOLS_ENABLED
+ ERR_FAIL_COND(!is_inside_tree());
+ if (!Engine::get_singleton()->is_editor_hint() && !get_tree()->is_debugging_collisions_hint()) {
+ break;
+ }
+ if (shape.is_null()) {
+ break;
+ }
+ Color draw_col = get_tree()->get_debug_collisions_color();
+ if (!enabled) {
+ float g = draw_col.get_v();
+ draw_col.r = g;
+ draw_col.g = g;
+ draw_col.b = g;
+ }
+ // Draw continuos chain of shapes along the cast.
+ const int steps = MAX(2, target_position.length() / shape->get_rect().get_size().length() * 4);
+ for (int i = 0; i <= steps; ++i) {
+ Vector2 t = (real_t(i) / steps) * target_position;
+ draw_set_transform(t, 0.0, Size2(1, 1));
+ shape->draw(get_canvas_item(), draw_col);
+ }
+ draw_set_transform(Vector2(), 0.0, Size2(1, 1));
+
+ // Draw an arrow indicating where the ShapeCast is pointing to.
+ if (target_position != Vector2()) {
+ Transform2D xf;
+ xf.rotate(target_position.angle());
+ xf.translate(Vector2(target_position.length(), 0));
+
+ draw_line(Vector2(), target_position, draw_col, 2);
+ Vector<Vector2> pts;
+ float tsize = 8;
+ pts.push_back(xf.xform(Vector2(tsize, 0)));
+ pts.push_back(xf.xform(Vector2(0, Math_SQRT12 * tsize)));
+ pts.push_back(xf.xform(Vector2(0, -Math_SQRT12 * tsize)));
+ Vector<Color> cols;
+ for (int i = 0; i < 3; i++)
+ cols.push_back(draw_col);
+
+ draw_primitive(pts, cols, Vector<Vector2>());
+ }
+#endif
+ } break;
+ case NOTIFICATION_INTERNAL_PHYSICS_PROCESS: {
+ if (!enabled) {
+ break;
+ }
+ _update_shapecast_state();
+ } break;
+ }
+}
+
+void ShapeCast2D::_update_shapecast_state() {
+ result.clear();
+
+ ERR_FAIL_COND_MSG(shape.is_null(), "Invalid shape.");
+
+ Ref<World2D> w2d = get_world_2d();
+ ERR_FAIL_COND(w2d.is_null());
+
+ PhysicsDirectSpaceState2D *dss = PhysicsServer2D::get_singleton()->space_get_direct_state(w2d->get_space());
+ ERR_FAIL_COND(!dss);
+
+ Transform2D gt = get_global_transform();
+
+ PhysicsDirectSpaceState2D::ShapeParameters params;
+ params.shape_rid = shape_rid;
+ params.transform = gt;
+ params.motion = gt.basis_xform(target_position);
+ params.margin = margin;
+ params.exclude = exclude;
+ params.collision_mask = collision_mask;
+ params.collide_with_bodies = collide_with_bodies;
+ params.collide_with_areas = collide_with_areas;
+
+ collision_safe_fraction = 0.0;
+ collision_unsafe_fraction = 0.0;
+
+ if (target_position != Vector2()) {
+ dss->cast_motion(params, collision_safe_fraction, collision_unsafe_fraction);
+ if (collision_unsafe_fraction < 1.0) {
+ // Move shape transform to the point of impact,
+ // so we can collect contact info at that point.
+ gt.set_origin(gt.get_origin() + params.motion * (collision_unsafe_fraction + CMP_EPSILON));
+ params.transform = gt;
+ }
+ }
+ // Regardless of whether the shape is stuck or it's moved along
+ // the motion vector, we'll only consider static collisions from now on.
+ params.motion = Vector2();
+
+ bool intersected = true;
+ while (intersected && result.size() < max_results) {
+ PhysicsDirectSpaceState2D::ShapeRestInfo info;
+ intersected = dss->rest_info(params, &info);
+ if (intersected) {
+ result.push_back(info);
+ params.exclude.insert(info.rid);
+ }
+ }
+ collided = !result.is_empty();
+}
+
+void ShapeCast2D::force_shapecast_update() {
+ _update_shapecast_state();
+}
+
+void ShapeCast2D::add_exception_rid(const RID &p_rid) {
+ exclude.insert(p_rid);
+}
+
+void ShapeCast2D::add_exception(const Object *p_object) {
+ ERR_FAIL_NULL(p_object);
+ const CollisionObject2D *co = Object::cast_to<CollisionObject2D>(p_object);
+ if (!co) {
+ return;
+ }
+ add_exception_rid(co->get_rid());
+}
+
+void ShapeCast2D::remove_exception_rid(const RID &p_rid) {
+ exclude.erase(p_rid);
+}
+
+void ShapeCast2D::remove_exception(const Object *p_object) {
+ ERR_FAIL_NULL(p_object);
+ const CollisionObject2D *co = Object::cast_to<CollisionObject2D>(p_object);
+ if (!co) {
+ return;
+ }
+ remove_exception_rid(co->get_rid());
+}
+
+void ShapeCast2D::clear_exceptions() {
+ exclude.clear();
+}
+
+void ShapeCast2D::set_collide_with_areas(bool p_clip) {
+ collide_with_areas = p_clip;
+}
+
+bool ShapeCast2D::is_collide_with_areas_enabled() const {
+ return collide_with_areas;
+}
+
+void ShapeCast2D::set_collide_with_bodies(bool p_clip) {
+ collide_with_bodies = p_clip;
+}
+
+bool ShapeCast2D::is_collide_with_bodies_enabled() const {
+ return collide_with_bodies;
+}
+
+Array ShapeCast2D::_get_collision_result() const {
+ Array ret;
+
+ for (int i = 0; i < result.size(); ++i) {
+ const PhysicsDirectSpaceState2D::ShapeRestInfo &sri = result[i];
+
+ Dictionary col;
+ col["point"] = sri.point;
+ col["normal"] = sri.normal;
+ col["rid"] = sri.rid;
+ col["collider"] = ObjectDB::get_instance(sri.collider_id);
+ col["collider_id"] = sri.collider_id;
+ col["shape"] = sri.shape;
+ col["linear_velocity"] = sri.linear_velocity;
+
+ ret.push_back(col);
+ }
+ return ret;
+}
+
+TypedArray<String> ShapeCast2D::get_configuration_warnings() const {
+ TypedArray<String> warnings = Node2D::get_configuration_warnings();
+
+ if (shape.is_null()) {
+ warnings.push_back(TTR("This node cannot interact with other objects unless a Shape2D is assigned."));
+ }
+ return warnings;
+}
+
+void ShapeCast2D::_bind_methods() {
+ ClassDB::bind_method(D_METHOD("set_enabled", "enabled"), &ShapeCast2D::set_enabled);
+ ClassDB::bind_method(D_METHOD("is_enabled"), &ShapeCast2D::is_enabled);
+
+ ClassDB::bind_method(D_METHOD("set_shape", "shape"), &ShapeCast2D::set_shape);
+ ClassDB::bind_method(D_METHOD("get_shape"), &ShapeCast2D::get_shape);
+
+ ClassDB::bind_method(D_METHOD("set_target_position", "local_point"), &ShapeCast2D::set_target_position);
+ ClassDB::bind_method(D_METHOD("get_target_position"), &ShapeCast2D::get_target_position);
+
+ ClassDB::bind_method(D_METHOD("set_margin", "margin"), &ShapeCast2D::set_margin);
+ ClassDB::bind_method(D_METHOD("get_margin"), &ShapeCast2D::get_margin);
+
+ ClassDB::bind_method(D_METHOD("set_max_results", "max_results"), &ShapeCast2D::set_max_results);
+ ClassDB::bind_method(D_METHOD("get_max_results"), &ShapeCast2D::get_max_results);
+
+ ClassDB::bind_method(D_METHOD("is_colliding"), &ShapeCast2D::is_colliding);
+ ClassDB::bind_method(D_METHOD("get_collision_count"), &ShapeCast2D::get_collision_count);
+
+ ClassDB::bind_method(D_METHOD("force_shapecast_update"), &ShapeCast2D::force_shapecast_update);
+
+ ClassDB::bind_method(D_METHOD("get_collider", "index"), &ShapeCast2D::get_collider);
+ ClassDB::bind_method(D_METHOD("get_collider_shape", "index"), &ShapeCast2D::get_collider_shape);
+ ClassDB::bind_method(D_METHOD("get_collision_point", "index"), &ShapeCast2D::get_collision_point);
+ ClassDB::bind_method(D_METHOD("get_collision_normal", "index"), &ShapeCast2D::get_collision_normal);
+
+ ClassDB::bind_method(D_METHOD("get_closest_collision_safe_fraction"), &ShapeCast2D::get_closest_collision_safe_fraction);
+ ClassDB::bind_method(D_METHOD("get_closest_collision_unsafe_fraction"), &ShapeCast2D::get_closest_collision_unsafe_fraction);
+
+ ClassDB::bind_method(D_METHOD("add_exception_rid", "rid"), &ShapeCast2D::add_exception_rid);
+ ClassDB::bind_method(D_METHOD("add_exception", "node"), &ShapeCast2D::add_exception);
+
+ ClassDB::bind_method(D_METHOD("remove_exception_rid", "rid"), &ShapeCast2D::remove_exception_rid);
+ ClassDB::bind_method(D_METHOD("remove_exception", "node"), &ShapeCast2D::remove_exception);
+
+ ClassDB::bind_method(D_METHOD("clear_exceptions"), &ShapeCast2D::clear_exceptions);
+
+ ClassDB::bind_method(D_METHOD("set_collision_mask", "mask"), &ShapeCast2D::set_collision_mask);
+ ClassDB::bind_method(D_METHOD("get_collision_mask"), &ShapeCast2D::get_collision_mask);
+
+ ClassDB::bind_method(D_METHOD("set_collision_mask_value", "layer_number", "value"), &ShapeCast2D::set_collision_mask_value);
+ ClassDB::bind_method(D_METHOD("get_collision_mask_value", "layer_number"), &ShapeCast2D::get_collision_mask_value);
+
+ ClassDB::bind_method(D_METHOD("set_exclude_parent_body", "mask"), &ShapeCast2D::set_exclude_parent_body);
+ ClassDB::bind_method(D_METHOD("get_exclude_parent_body"), &ShapeCast2D::get_exclude_parent_body);
+
+ ClassDB::bind_method(D_METHOD("set_collide_with_areas", "enable"), &ShapeCast2D::set_collide_with_areas);
+ ClassDB::bind_method(D_METHOD("is_collide_with_areas_enabled"), &ShapeCast2D::is_collide_with_areas_enabled);
+
+ ClassDB::bind_method(D_METHOD("set_collide_with_bodies", "enable"), &ShapeCast2D::set_collide_with_bodies);
+ ClassDB::bind_method(D_METHOD("is_collide_with_bodies_enabled"), &ShapeCast2D::is_collide_with_bodies_enabled);
+
+ ClassDB::bind_method(D_METHOD("_get_collision_result"), &ShapeCast2D::_get_collision_result);
+
+ ADD_PROPERTY(PropertyInfo(Variant::BOOL, "enabled"), "set_enabled", "is_enabled");
+ ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "shape", PROPERTY_HINT_RESOURCE_TYPE, "Shape2D"), "set_shape", "get_shape");
+ ADD_PROPERTY(PropertyInfo(Variant::BOOL, "exclude_parent"), "set_exclude_parent_body", "get_exclude_parent_body");
+ ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "target_position"), "set_target_position", "get_target_position");
+ ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "margin", PROPERTY_HINT_RANGE, "0,100,0.01"), "set_margin", "get_margin");
+ ADD_PROPERTY(PropertyInfo(Variant::INT, "max_results"), "set_max_results", "get_max_results");
+ ADD_PROPERTY(PropertyInfo(Variant::INT, "collision_mask", PROPERTY_HINT_LAYERS_2D_PHYSICS), "set_collision_mask", "get_collision_mask");
+ ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "collision_result", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), "", "_get_collision_result");
+ ADD_GROUP("Collide With", "collide_with");
+ ADD_PROPERTY(PropertyInfo(Variant::BOOL, "collide_with_areas", PROPERTY_HINT_LAYERS_3D_PHYSICS), "set_collide_with_areas", "is_collide_with_areas_enabled");
+ ADD_PROPERTY(PropertyInfo(Variant::BOOL, "collide_with_bodies", PROPERTY_HINT_LAYERS_3D_PHYSICS), "set_collide_with_bodies", "is_collide_with_bodies_enabled");
+}
diff --git a/scene/2d/shape_cast_2d.h b/scene/2d/shape_cast_2d.h
new file mode 100644
index 0000000000..fca6b46155
--- /dev/null
+++ b/scene/2d/shape_cast_2d.h
@@ -0,0 +1,120 @@
+/*************************************************************************/
+/* shape_cast_2d.h */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+
+#ifndef SHAPE_CAST_2D
+#define SHAPE_CAST_2D
+
+#include "scene/2d/node_2d.h"
+#include "scene/resources/shape_2d.h"
+
+class ShapeCast2D : public Node2D {
+ GDCLASS(ShapeCast2D, Node2D);
+
+ bool enabled = true;
+
+ Ref<Shape2D> shape;
+ RID shape_rid;
+ Vector2 target_position = Vector2(0, 50);
+
+ Set<RID> exclude;
+ real_t margin = 0.0;
+ uint32_t collision_mask = 1;
+ bool exclude_parent_body = true;
+ bool collide_with_areas = false;
+ bool collide_with_bodies = true;
+
+ // Result
+ int max_results = 32;
+ Vector<PhysicsDirectSpaceState2D::ShapeRestInfo> result;
+ bool collided = false;
+ real_t collision_safe_fraction = 1.0;
+ real_t collision_unsafe_fraction = 1.0;
+
+ Array _get_collision_result() const;
+ void _redraw_shape();
+
+protected:
+ void _notification(int p_what);
+ void _update_shapecast_state();
+ static void _bind_methods();
+
+public:
+ void set_collide_with_areas(bool p_clip);
+ bool is_collide_with_areas_enabled() const;
+
+ void set_collide_with_bodies(bool p_clip);
+ bool is_collide_with_bodies_enabled() const;
+
+ void set_enabled(bool p_enabled);
+ bool is_enabled() const;
+
+ void set_shape(const Ref<Shape2D> &p_shape);
+ Ref<Shape2D> get_shape() const;
+
+ void set_target_position(const Vector2 &p_point);
+ Vector2 get_target_position() const;
+
+ void set_margin(real_t p_margin);
+ real_t get_margin() const;
+
+ void set_max_results(int p_max_results);
+ int get_max_results() const;
+
+ void set_collision_mask(uint32_t p_mask);
+ uint32_t get_collision_mask() const;
+
+ void set_collision_mask_value(int p_layer_number, bool p_value);
+ bool get_collision_mask_value(int p_layer_number) const;
+
+ void set_exclude_parent_body(bool p_exclude_parent_body);
+ bool get_exclude_parent_body() const;
+
+ void force_shapecast_update();
+ bool is_colliding() const;
+
+ int get_collision_count() const;
+ Object *get_collider(int p_idx) const;
+ int get_collider_shape(int p_idx) const;
+ Vector2 get_collision_point(int p_idx) const;
+ Vector2 get_collision_normal(int p_idx) const;
+
+ real_t get_closest_collision_safe_fraction() const;
+ real_t get_closest_collision_unsafe_fraction() const;
+
+ void add_exception_rid(const RID &p_rid);
+ void add_exception(const Object *p_object);
+ void remove_exception_rid(const RID &p_rid);
+ void remove_exception(const Object *p_object);
+ void clear_exceptions();
+
+ TypedArray<String> get_configuration_warnings() const override;
+};
+
+#endif
diff --git a/scene/2d/skeleton_2d.cpp b/scene/2d/skeleton_2d.cpp
index 63a0fb9b89..b558f0aa21 100644
--- a/scene/2d/skeleton_2d.cpp
+++ b/scene/2d/skeleton_2d.cpp
@@ -165,7 +165,7 @@ void Bone2D::_notification(int p_what) {
if (skeleton) {
for (int i = 0; i < skeleton->bones.size(); i++) {
if (skeleton->bones[i].bone == this) {
- skeleton->bones.remove(i);
+ skeleton->bones.remove_at(i);
break;
}
}
diff --git a/scene/2d/sprite_2d.cpp b/scene/2d/sprite_2d.cpp
index 5761f19a53..b2302d09db 100644
--- a/scene/2d/sprite_2d.cpp
+++ b/scene/2d/sprite_2d.cpp
@@ -385,7 +385,7 @@ void Sprite2D::_validate_property(PropertyInfo &property) const {
}
if (!region_enabled && (property.name == "region_rect" || property.name == "region_filter_clip")) {
- property.usage = PROPERTY_USAGE_NOEDITOR;
+ property.usage = PROPERTY_USAGE_NO_EDITOR;
}
}
diff --git a/scene/2d/tile_map.cpp b/scene/2d/tile_map.cpp
index c11262e0c9..084a5a520d 100644
--- a/scene/2d/tile_map.cpp
+++ b/scene/2d/tile_map.cpp
@@ -576,7 +576,7 @@ void TileMap::move_layer(int p_layer, int p_to_pos) {
TileMapLayer tl = layers[p_layer];
layers.insert(p_to_pos, tl);
- layers.remove(p_to_pos < p_layer ? p_layer + 1 : p_layer);
+ layers.remove_at(p_to_pos < p_layer ? p_layer + 1 : p_layer);
_recreate_internals();
notify_property_list_changed();
@@ -595,7 +595,7 @@ void TileMap::remove_layer(int p_layer) {
// Clear before removing the layer.
_clear_internals();
- layers.remove(p_layer);
+ layers.remove_at(p_layer);
_recreate_internals();
notify_property_list_changed();
@@ -1259,7 +1259,7 @@ void TileMap::_rendering_draw_quadrant_debug(TileMapQuadrant *p_quadrant) {
TileSetAtlasSource *atlas_source = Object::cast_to<TileSetAtlasSource>(source);
if (atlas_source) {
Vector2i grid_size = atlas_source->get_atlas_grid_size();
- if (!atlas_source->get_texture().is_valid() || c.get_atlas_coords().x >= grid_size.x || c.get_atlas_coords().y >= grid_size.y) {
+ if (!atlas_source->get_runtime_texture().is_valid() || c.get_atlas_coords().x >= grid_size.x || c.get_atlas_coords().y >= grid_size.y) {
// Generate a random color from the hashed values of the tiles.
Array to_hash;
to_hash.push_back(c.source_id);
@@ -1299,7 +1299,7 @@ void TileMap::draw_tile(RID p_canvas_item, Vector2i p_position, const Ref<TileSe
}
// Get the texture.
- Ref<Texture2D> tex = atlas_source->get_texture();
+ Ref<Texture2D> tex = atlas_source->get_runtime_texture();
if (!tex.is_valid()) {
return;
}
@@ -1321,7 +1321,7 @@ void TileMap::draw_tile(RID p_canvas_item, Vector2i p_position, const Ref<TileSe
// Get destination rect.
Rect2 dest_rect;
- dest_rect.size = atlas_source->get_tile_texture_region(p_atlas_coords).size;
+ dest_rect.size = atlas_source->get_runtime_tile_texture_region(p_atlas_coords).size;
dest_rect.size.x += FP_ADJUST;
dest_rect.size.y += FP_ADJUST;
@@ -1342,10 +1342,10 @@ void TileMap::draw_tile(RID p_canvas_item, Vector2i p_position, const Ref<TileSe
// Draw the tile.
if (p_frame >= 0) {
- Rect2i source_rect = atlas_source->get_tile_texture_region(p_atlas_coords, p_frame);
+ Rect2i source_rect = atlas_source->get_runtime_tile_texture_region(p_atlas_coords, p_frame);
tex->draw_rect_region(p_canvas_item, dest_rect, source_rect, modulate, transpose, p_tile_set->is_uv_clipping());
} else if (atlas_source->get_tile_animation_frames_count(p_atlas_coords) == 1) {
- Rect2i source_rect = atlas_source->get_tile_texture_region(p_atlas_coords, 0);
+ Rect2i source_rect = atlas_source->get_runtime_tile_texture_region(p_atlas_coords, 0);
tex->draw_rect_region(p_canvas_item, dest_rect, source_rect, modulate, transpose, p_tile_set->is_uv_clipping());
} else {
real_t speed = atlas_source->get_tile_animation_speed(p_atlas_coords);
@@ -1355,7 +1355,7 @@ void TileMap::draw_tile(RID p_canvas_item, Vector2i p_position, const Ref<TileSe
real_t frame_duration = atlas_source->get_tile_animation_frame_duration(p_atlas_coords, frame) / speed;
RenderingServer::get_singleton()->canvas_item_add_animation_slice(p_canvas_item, animation_duration, time, time + frame_duration, 0.0);
- Rect2i source_rect = atlas_source->get_tile_texture_region(p_atlas_coords, frame);
+ Rect2i source_rect = atlas_source->get_runtime_tile_texture_region(p_atlas_coords, frame);
tex->draw_rect_region(p_canvas_item, dest_rect, source_rect, modulate, transpose, p_tile_set->is_uv_clipping());
time += frame_duration;
@@ -1928,7 +1928,7 @@ void TileMap::set_cell(int p_layer, const Vector2i &p_coords, int p_source_id, c
if ((source_id == TileSet::INVALID_SOURCE || atlas_coords == TileSetSource::INVALID_ATLAS_COORDS || alternative_tile == TileSetSource::INVALID_TILE_ALTERNATIVE) &&
(source_id != TileSet::INVALID_SOURCE || atlas_coords != TileSetSource::INVALID_ATLAS_COORDS || alternative_tile != TileSetSource::INVALID_TILE_ALTERNATIVE)) {
- WARN_PRINT("Setting a cell a cell as empty requires both source_id, atlas_coord and alternative_tile to be set to their respective \"invalid\" values. Values were thus changes accordingly.");
+ WARN_PRINT("Setting a cell as empty requires both source_id, atlas_coord and alternative_tile to be set to their respective \"invalid\" values. Values were thus changes accordingly.");
source_id = TileSet::INVALID_SOURCE;
atlas_coords = TileSetSource::INVALID_ATLAS_COORDS;
alternative_tile = TileSetSource::INVALID_TILE_ALTERNATIVE;
@@ -2146,18 +2146,16 @@ Set<TileSet::TerrainsPattern> TileMap::_get_valid_terrains_patterns_for_constrai
Set<TileSet::TerrainsPattern> compatible_terrain_tile_patterns;
for (TileSet::TerrainsPattern &terrain_pattern : tile_set->get_terrains_pattern_set(p_terrain_set)) {
int valid = true;
- int in_pattern_count = 0;
for (int i = 0; i < TileSet::CELL_NEIGHBOR_MAX; i++) {
TileSet::CellNeighbor bit = TileSet::CellNeighbor(i);
if (tile_set->is_valid_peering_bit_terrain(p_terrain_set, bit)) {
// Check if the bit is compatible with the constraints.
- TerrainConstraint terrain_bit_constraint = TerrainConstraint(this, p_position, bit, terrain_pattern[in_pattern_count]);
+ TerrainConstraint terrain_bit_constraint = TerrainConstraint(this, p_position, bit, terrain_pattern.get_terrain(bit));
Set<TerrainConstraint>::Element *in_set_constraint_element = p_constraints.find(terrain_bit_constraint);
if (in_set_constraint_element && in_set_constraint_element->get().get_terrain() != terrain_bit_constraint.get_terrain()) {
valid = false;
break;
}
- in_pattern_count++;
}
}
@@ -2249,13 +2247,11 @@ Set<TileMap::TerrainConstraint> TileMap::get_terrain_constraints_from_added_tile
// Compute the constraints needed from the surrounding tiles.
Set<TerrainConstraint> output;
- int in_pattern_count = 0;
for (uint32_t i = 0; i < TileSet::CELL_NEIGHBOR_MAX; i++) {
TileSet::CellNeighbor side = TileSet::CellNeighbor(i);
if (tile_set->is_valid_peering_bit_terrain(p_terrain_set, side)) {
- TerrainConstraint c = TerrainConstraint(this, p_position, side, p_terrains_pattern[in_pattern_count]);
+ TerrainConstraint c = TerrainConstraint(this, p_position, side, p_terrains_pattern.get_terrain(side));
output.insert(c);
- in_pattern_count++;
}
}
@@ -2312,8 +2308,11 @@ Map<Vector2i, TileSet::TerrainsPattern> TileMap::terrain_wave_function_collapse(
int pattern_index = 0;
for (const TileSet::TerrainsPattern &pattern : valid_tiles) {
Set<int> terrains;
- for (int i = 0; i < pattern.size(); i++) {
- terrains.insert(pattern[i]);
+ for (int i = 0; i < TileSet::CELL_NEIGHBOR_MAX; i++) {
+ TileSet::CellNeighbor side = TileSet::CellNeighbor(i);
+ if (tile_set->is_valid_peering_bit_terrain(p_terrain_set, side)) {
+ terrains.insert(pattern.get_terrain(side));
+ }
}
min_terrain_count = MIN(min_terrain_count, terrains.size());
terrains_counts.push_back(terrains.size());
@@ -2369,7 +2368,7 @@ void TileMap::set_cells_from_surrounding_terrains(int p_layer, TypedArray<Vector
Map<Vector2i, TileSet::TerrainsPattern> wfc_output = terrain_wave_function_collapse(coords_set, p_terrain_set, constraints);
for (const KeyValue<Vector2i, TileSet::TerrainsPattern> &kv : wfc_output) {
- TileMapCell cell = tile_set->get_random_tile_from_pattern(p_terrain_set, kv.value);
+ TileMapCell cell = tile_set->get_random_tile_from_terrains_pattern(p_terrain_set, kv.value);
set_cell(p_layer, kv.key, cell.source_id, cell.get_atlas_coords(), cell.alternative_tile);
}
}
@@ -2711,7 +2710,7 @@ bool TileMap::_get(const StringName &p_name, Variant &r_ret) const {
}
void TileMap::_get_property_list(List<PropertyInfo> *p_list) const {
- p_list->push_back(PropertyInfo(Variant::INT, "format", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL));
+ p_list->push_back(PropertyInfo(Variant::INT, "format", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL));
p_list->push_back(PropertyInfo(Variant::NIL, "Layers", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_GROUP));
for (unsigned int i = 0; i < layers.size(); i++) {
p_list->push_back(PropertyInfo(Variant::STRING, vformat("layer_%d/name", i), PROPERTY_HINT_NONE));
@@ -2720,7 +2719,7 @@ void TileMap::_get_property_list(List<PropertyInfo> *p_list) const {
p_list->push_back(PropertyInfo(Variant::BOOL, vformat("layer_%d/y_sort_enabled", i), PROPERTY_HINT_NONE));
p_list->push_back(PropertyInfo(Variant::INT, vformat("layer_%d/y_sort_origin", i), PROPERTY_HINT_NONE));
p_list->push_back(PropertyInfo(Variant::INT, vformat("layer_%d/z_index", i), PROPERTY_HINT_NONE));
- p_list->push_back(PropertyInfo(Variant::OBJECT, vformat("layer_%d/tile_data", i), PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR));
+ p_list->push_back(PropertyInfo(Variant::OBJECT, vformat("layer_%d/tile_data", i), PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR));
}
}
diff --git a/scene/3d/area_3d.cpp b/scene/3d/area_3d.cpp
index 9179983220..073543638f 100644
--- a/scene/3d/area_3d.cpp
+++ b/scene/3d/area_3d.cpp
@@ -33,13 +33,13 @@
#include "scene/scene_string_names.h"
#include "servers/audio_server.h"
-void Area3D::set_space_override_mode(SpaceOverride p_mode) {
- space_override = p_mode;
- PhysicsServer3D::get_singleton()->area_set_space_override_mode(get_rid(), PhysicsServer3D::AreaSpaceOverrideMode(p_mode));
+void Area3D::set_gravity_space_override_mode(SpaceOverride p_mode) {
+ gravity_space_override = p_mode;
+ PhysicsServer3D::get_singleton()->area_set_param(get_rid(), PhysicsServer3D::AREA_PARAM_GRAVITY_OVERRIDE_MODE, p_mode);
}
-Area3D::SpaceOverride Area3D::get_space_override_mode() const {
- return space_override;
+Area3D::SpaceOverride Area3D::get_gravity_space_override_mode() const {
+ return gravity_space_override;
}
void Area3D::set_gravity_is_point(bool p_enabled) {
@@ -51,21 +51,30 @@ bool Area3D::is_gravity_a_point() const {
return gravity_is_point;
}
-void Area3D::set_gravity_distance_scale(real_t p_scale) {
+void Area3D::set_gravity_point_distance_scale(real_t p_scale) {
gravity_distance_scale = p_scale;
PhysicsServer3D::get_singleton()->area_set_param(get_rid(), PhysicsServer3D::AREA_PARAM_GRAVITY_DISTANCE_SCALE, p_scale);
}
-real_t Area3D::get_gravity_distance_scale() const {
+real_t Area3D::get_gravity_point_distance_scale() const {
return gravity_distance_scale;
}
-void Area3D::set_gravity_vector(const Vector3 &p_vec) {
- gravity_vec = p_vec;
- PhysicsServer3D::get_singleton()->area_set_param(get_rid(), PhysicsServer3D::AREA_PARAM_GRAVITY_VECTOR, p_vec);
+void Area3D::set_gravity_point_center(const Vector3 &p_center) {
+ gravity_vec = p_center;
+ PhysicsServer3D::get_singleton()->area_set_param(get_rid(), PhysicsServer3D::AREA_PARAM_GRAVITY_VECTOR, p_center);
}
-Vector3 Area3D::get_gravity_vector() const {
+const Vector3 &Area3D::get_gravity_point_center() const {
+ return gravity_vec;
+}
+
+void Area3D::set_gravity_direction(const Vector3 &p_direction) {
+ gravity_vec = p_direction;
+ PhysicsServer3D::get_singleton()->area_set_param(get_rid(), PhysicsServer3D::AREA_PARAM_GRAVITY_VECTOR, p_direction);
+}
+
+const Vector3 &Area3D::get_gravity_direction() const {
return gravity_vec;
}
@@ -78,6 +87,24 @@ real_t Area3D::get_gravity() const {
return gravity;
}
+void Area3D::set_linear_damp_space_override_mode(SpaceOverride p_mode) {
+ linear_damp_space_override = p_mode;
+ PhysicsServer3D::get_singleton()->area_set_param(get_rid(), PhysicsServer3D::AREA_PARAM_LINEAR_DAMP_OVERRIDE_MODE, p_mode);
+}
+
+Area3D::SpaceOverride Area3D::get_linear_damp_space_override_mode() const {
+ return linear_damp_space_override;
+}
+
+void Area3D::set_angular_damp_space_override_mode(SpaceOverride p_mode) {
+ angular_damp_space_override = p_mode;
+ PhysicsServer3D::get_singleton()->area_set_param(get_rid(), PhysicsServer3D::AREA_PARAM_ANGULAR_DAMP_OVERRIDE_MODE, p_mode);
+}
+
+Area3D::SpaceOverride Area3D::get_angular_damp_space_override_mode() const {
+ return angular_damp_space_override;
+}
+
void Area3D::set_linear_damp(real_t p_linear_damp) {
linear_damp = p_linear_damp;
PhysicsServer3D::get_singleton()->area_set_param(get_rid(), PhysicsServer3D::AREA_PARAM_LINEAR_DAMP, p_linear_damp);
@@ -334,11 +361,11 @@ void Area3D::set_monitoring(bool p_enable) {
monitoring = p_enable;
if (monitoring) {
- PhysicsServer3D::get_singleton()->area_set_monitor_callback(get_rid(), this, SceneStringNames::get_singleton()->_body_inout);
- PhysicsServer3D::get_singleton()->area_set_area_monitor_callback(get_rid(), this, SceneStringNames::get_singleton()->_area_inout);
+ PhysicsServer3D::get_singleton()->area_set_monitor_callback(get_rid(), callable_mp(this, &Area3D::_body_inout));
+ PhysicsServer3D::get_singleton()->area_set_area_monitor_callback(get_rid(), callable_mp(this, &Area3D::_area_inout));
} else {
- PhysicsServer3D::get_singleton()->area_set_monitor_callback(get_rid(), nullptr, StringName());
- PhysicsServer3D::get_singleton()->area_set_area_monitor_callback(get_rid(), nullptr, StringName());
+ PhysicsServer3D::get_singleton()->area_set_monitor_callback(get_rid(), Callable());
+ PhysicsServer3D::get_singleton()->area_set_area_monitor_callback(get_rid(), Callable());
_clear_monitoring();
}
}
@@ -579,27 +606,58 @@ void Area3D::_validate_property(PropertyInfo &property) const {
}
property.hint_string = options;
+ } else if (property.name.begins_with("gravity") && property.name != "gravity_space_override") {
+ if (gravity_space_override == SPACE_OVERRIDE_DISABLED) {
+ property.usage = PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL;
+ } else {
+ if (gravity_is_point) {
+ if (property.name == "gravity_direction") {
+ property.usage = PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL;
+ }
+ } else {
+ if (property.name.begins_with("gravity_point_")) {
+ property.usage = PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL;
+ }
+ }
+ }
+ } else if (property.name.begins_with("linear_damp") && property.name != "linear_damp_space_override") {
+ if (linear_damp_space_override == SPACE_OVERRIDE_DISABLED) {
+ property.usage = PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL;
+ }
+ } else if (property.name.begins_with("angular_damp") && property.name != "angular_damp_space_override") {
+ if (angular_damp_space_override == SPACE_OVERRIDE_DISABLED) {
+ property.usage = PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL;
+ }
}
CollisionObject3D::_validate_property(property);
}
void Area3D::_bind_methods() {
- ClassDB::bind_method(D_METHOD("set_space_override_mode", "enable"), &Area3D::set_space_override_mode);
- ClassDB::bind_method(D_METHOD("get_space_override_mode"), &Area3D::get_space_override_mode);
+ ClassDB::bind_method(D_METHOD("set_gravity_space_override_mode", "space_override_mode"), &Area3D::set_gravity_space_override_mode);
+ ClassDB::bind_method(D_METHOD("get_gravity_space_override_mode"), &Area3D::get_gravity_space_override_mode);
ClassDB::bind_method(D_METHOD("set_gravity_is_point", "enable"), &Area3D::set_gravity_is_point);
ClassDB::bind_method(D_METHOD("is_gravity_a_point"), &Area3D::is_gravity_a_point);
- ClassDB::bind_method(D_METHOD("set_gravity_distance_scale", "distance_scale"), &Area3D::set_gravity_distance_scale);
- ClassDB::bind_method(D_METHOD("get_gravity_distance_scale"), &Area3D::get_gravity_distance_scale);
+ ClassDB::bind_method(D_METHOD("set_gravity_point_distance_scale", "distance_scale"), &Area3D::set_gravity_point_distance_scale);
+ ClassDB::bind_method(D_METHOD("get_gravity_point_distance_scale"), &Area3D::get_gravity_point_distance_scale);
+
+ ClassDB::bind_method(D_METHOD("set_gravity_point_center", "center"), &Area3D::set_gravity_point_center);
+ ClassDB::bind_method(D_METHOD("get_gravity_point_center"), &Area3D::get_gravity_point_center);
- ClassDB::bind_method(D_METHOD("set_gravity_vector", "vector"), &Area3D::set_gravity_vector);
- ClassDB::bind_method(D_METHOD("get_gravity_vector"), &Area3D::get_gravity_vector);
+ ClassDB::bind_method(D_METHOD("set_gravity_direction", "direction"), &Area3D::set_gravity_direction);
+ ClassDB::bind_method(D_METHOD("get_gravity_direction"), &Area3D::get_gravity_direction);
ClassDB::bind_method(D_METHOD("set_gravity", "gravity"), &Area3D::set_gravity);
ClassDB::bind_method(D_METHOD("get_gravity"), &Area3D::get_gravity);
+ ClassDB::bind_method(D_METHOD("set_linear_damp_space_override_mode", "space_override_mode"), &Area3D::set_linear_damp_space_override_mode);
+ ClassDB::bind_method(D_METHOD("get_linear_damp_space_override_mode"), &Area3D::get_linear_damp_space_override_mode);
+
+ ClassDB::bind_method(D_METHOD("set_angular_damp_space_override_mode", "space_override_mode"), &Area3D::set_angular_damp_space_override_mode);
+ ClassDB::bind_method(D_METHOD("get_angular_damp_space_override_mode"), &Area3D::get_angular_damp_space_override_mode);
+
ClassDB::bind_method(D_METHOD("set_angular_damp", "angular_damp"), &Area3D::set_angular_damp);
ClassDB::bind_method(D_METHOD("get_angular_damp"), &Area3D::get_angular_damp);
@@ -630,9 +688,6 @@ void Area3D::_bind_methods() {
ClassDB::bind_method(D_METHOD("overlaps_body", "body"), &Area3D::overlaps_body);
ClassDB::bind_method(D_METHOD("overlaps_area", "area"), &Area3D::overlaps_area);
- ClassDB::bind_method(D_METHOD("_body_inout"), &Area3D::_body_inout);
- ClassDB::bind_method(D_METHOD("_area_inout"), &Area3D::_area_inout);
-
ClassDB::bind_method(D_METHOD("set_audio_bus_override", "enable"), &Area3D::set_audio_bus_override);
ClassDB::bind_method(D_METHOD("is_overriding_audio_bus"), &Area3D::is_overriding_audio_bus);
@@ -665,14 +720,23 @@ void Area3D::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "monitorable"), "set_monitorable", "is_monitorable");
ADD_PROPERTY(PropertyInfo(Variant::INT, "priority", PROPERTY_HINT_RANGE, "0,128,1"), "set_priority", "get_priority");
- ADD_GROUP("Physics Overrides", "");
- ADD_PROPERTY(PropertyInfo(Variant::INT, "space_override", PROPERTY_HINT_ENUM, "Disabled,Combine,Combine-Replace,Replace,Replace-Combine"), "set_space_override_mode", "get_space_override_mode");
- ADD_PROPERTY(PropertyInfo(Variant::BOOL, "gravity_point"), "set_gravity_is_point", "is_gravity_a_point");
- ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "gravity_distance_scale", PROPERTY_HINT_RANGE, "0,1024,0.001,or_greater,exp"), "set_gravity_distance_scale", "get_gravity_distance_scale");
- ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "gravity_vec"), "set_gravity_vector", "get_gravity_vector");
+ ADD_GROUP("Gravity", "gravity_");
+ ADD_PROPERTY(PropertyInfo(Variant::INT, "gravity_space_override", PROPERTY_HINT_ENUM, "Disabled,Combine,Combine-Replace,Replace,Replace-Combine", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), "set_gravity_space_override_mode", "get_gravity_space_override_mode");
+ ADD_PROPERTY(PropertyInfo(Variant::BOOL, "gravity_point", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), "set_gravity_is_point", "is_gravity_a_point");
+ ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "gravity_point_distance_scale", PROPERTY_HINT_RANGE, "0,1024,0.001,or_greater,exp"), "set_gravity_point_distance_scale", "get_gravity_point_distance_scale");
+ ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "gravity_point_center"), "set_gravity_point_center", "get_gravity_point_center");
+ ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "gravity_direction"), "set_gravity_direction", "get_gravity_direction");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "gravity", PROPERTY_HINT_RANGE, "-32,32,0.001,or_lesser,or_greater"), "set_gravity", "get_gravity");
+
+ ADD_GROUP("Linear Damp", "linear_damp_");
+ ADD_PROPERTY(PropertyInfo(Variant::INT, "linear_damp_space_override", PROPERTY_HINT_ENUM, "Disabled,Combine,Combine-Replace,Replace,Replace-Combine", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), "set_linear_damp_space_override_mode", "get_linear_damp_space_override_mode");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "linear_damp", PROPERTY_HINT_RANGE, "0,100,0.001,or_greater"), "set_linear_damp", "get_linear_damp");
+
+ ADD_GROUP("Angular Damp", "angular_damp_");
+ ADD_PROPERTY(PropertyInfo(Variant::INT, "angular_damp_space_override", PROPERTY_HINT_ENUM, "Disabled,Combine,Combine-Replace,Replace,Replace-Combine", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), "set_angular_damp_space_override_mode", "get_angular_damp_space_override_mode");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "angular_damp", PROPERTY_HINT_RANGE, "0,100,0.001,or_greater"), "set_angular_damp", "get_angular_damp");
+
+ ADD_GROUP("Wind", "wind_");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "wind_force_magnitude", PROPERTY_HINT_RANGE, "0,10,0.001,or_greater"), "set_wind_force_magnitude", "get_wind_force_magnitude");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "wind_attenuation_factor", PROPERTY_HINT_RANGE, "0.0,3.0,0.001,or_greater"), "set_wind_attenuation_factor", "get_wind_attenuation_factor");
ADD_PROPERTY(PropertyInfo(Variant::NODE_PATH, "wind_source_path", PROPERTY_HINT_NODE_PATH_VALID_TYPES, "Node3D"), "set_wind_source_path", "get_wind_source_path");
@@ -697,7 +761,7 @@ void Area3D::_bind_methods() {
Area3D::Area3D() :
CollisionObject3D(PhysicsServer3D::get_singleton()->area_create(), true) {
set_gravity(9.8);
- set_gravity_vector(Vector3(0, -1, 0));
+ set_gravity_direction(Vector3(0, -1, 0));
set_monitoring(true);
set_monitorable(true);
}
diff --git a/scene/3d/area_3d.h b/scene/3d/area_3d.h
index 847d1c5966..7f31be2e17 100644
--- a/scene/3d/area_3d.h
+++ b/scene/3d/area_3d.h
@@ -47,17 +47,23 @@ public:
};
private:
- SpaceOverride space_override = SPACE_OVERRIDE_DISABLED;
+ SpaceOverride gravity_space_override = SPACE_OVERRIDE_DISABLED;
Vector3 gravity_vec;
real_t gravity;
bool gravity_is_point = false;
real_t gravity_distance_scale = 0.0;
+
+ SpaceOverride linear_damp_space_override = SPACE_OVERRIDE_DISABLED;
+ SpaceOverride angular_damp_space_override = SPACE_OVERRIDE_DISABLED;
real_t angular_damp = 0.1;
real_t linear_damp = 0.1;
+
int priority = 0;
+
real_t wind_force_magnitude = 0.0;
real_t wind_attenuation_factor = 0.0;
NodePath wind_source_path;
+
bool monitoring = false;
bool monitorable = false;
bool locked = false;
@@ -144,21 +150,30 @@ protected:
static void _bind_methods();
public:
- void set_space_override_mode(SpaceOverride p_mode);
- SpaceOverride get_space_override_mode() const;
+ void set_gravity_space_override_mode(SpaceOverride p_mode);
+ SpaceOverride get_gravity_space_override_mode() const;
void set_gravity_is_point(bool p_enabled);
bool is_gravity_a_point() const;
- void set_gravity_distance_scale(real_t p_scale);
- real_t get_gravity_distance_scale() const;
+ void set_gravity_point_distance_scale(real_t p_scale);
+ real_t get_gravity_point_distance_scale() const;
- void set_gravity_vector(const Vector3 &p_vec);
- Vector3 get_gravity_vector() const;
+ void set_gravity_point_center(const Vector3 &p_center);
+ const Vector3 &get_gravity_point_center() const;
+
+ void set_gravity_direction(const Vector3 &p_direction);
+ const Vector3 &get_gravity_direction() const;
void set_gravity(real_t p_gravity);
real_t get_gravity() const;
+ void set_linear_damp_space_override_mode(SpaceOverride p_mode);
+ SpaceOverride get_linear_damp_space_override_mode() const;
+
+ void set_angular_damp_space_override_mode(SpaceOverride p_mode);
+ SpaceOverride get_angular_damp_space_override_mode() const;
+
void set_angular_damp(real_t p_angular_damp);
real_t get_angular_damp() const;
diff --git a/scene/3d/audio_stream_player_3d.cpp b/scene/3d/audio_stream_player_3d.cpp
index b5e4eac5d5..efe23c6102 100644
--- a/scene/3d/audio_stream_player_3d.cpp
+++ b/scene/3d/audio_stream_player_3d.cpp
@@ -311,7 +311,7 @@ void AudioStreamPlayer3D::_notification(int p_what) {
while (stream_playbacks.size() > max_polyphony) {
AudioServer::get_singleton()->stop_playback_stream(stream_playbacks[0]);
- stream_playbacks.remove(0);
+ stream_playbacks.remove_at(0);
}
}
}
@@ -327,7 +327,13 @@ Area3D *AudioStreamPlayer3D::_get_overriding_area() {
PhysicsDirectSpaceState3D::ShapeResult sr[MAX_INTERSECT_AREAS];
- int areas = space_state->intersect_point(global_pos, sr, MAX_INTERSECT_AREAS, Set<RID>(), area_mask, false, true);
+ PhysicsDirectSpaceState3D::PointParameters point_params;
+ point_params.position = global_pos;
+ point_params.collision_mask = area_mask;
+ point_params.collide_with_bodies = false;
+ point_params.collide_with_areas = true;
+
+ int areas = space_state->intersect_point(point_params, sr, MAX_INTERSECT_AREAS);
for (int i = 0; i < areas; i++) {
if (!sr[i].collider) {
diff --git a/scene/3d/camera_3d.cpp b/scene/3d/camera_3d.cpp
index af3b3ae5bc..cc5b7078e3 100644
--- a/scene/3d/camera_3d.cpp
+++ b/scene/3d/camera_3d.cpp
@@ -60,15 +60,15 @@ void Camera3D::_update_camera_mode() {
void Camera3D::_validate_property(PropertyInfo &p_property) const {
if (p_property.name == "fov") {
if (mode != PROJECTION_PERSPECTIVE) {
- p_property.usage = PROPERTY_USAGE_NOEDITOR;
+ p_property.usage = PROPERTY_USAGE_NO_EDITOR;
}
} else if (p_property.name == "size") {
if (mode != PROJECTION_ORTHOGONAL && mode != PROJECTION_FRUSTUM) {
- p_property.usage = PROPERTY_USAGE_NOEDITOR;
+ p_property.usage = PROPERTY_USAGE_NO_EDITOR;
}
} else if (p_property.name == "frustum_offset") {
if (mode != PROJECTION_FRUSTUM) {
- p_property.usage = PROPERTY_USAGE_NOEDITOR;
+ p_property.usage = PROPERTY_USAGE_NO_EDITOR;
}
}
diff --git a/scene/3d/collision_object_3d.cpp b/scene/3d/collision_object_3d.cpp
index a166a05c71..085f1ade66 100644
--- a/scene/3d/collision_object_3d.cpp
+++ b/scene/3d/collision_object_3d.cpp
@@ -628,7 +628,7 @@ void CollisionObject3D::shape_owner_remove_shape(uint32_t p_owner, int p_shape)
--debug_shapes_count;
}
- shapes[p_owner].shapes.remove(p_shape);
+ shapes[p_owner].shapes.remove_at(p_shape);
for (KeyValue<uint32_t, ShapeData> &E : shapes) {
for (int i = 0; i < E.value.shapes.size(); i++) {
diff --git a/scene/3d/cpu_particles_3d.cpp b/scene/3d/cpu_particles_3d.cpp
index 5f13ed3c66..d347d24c2c 100644
--- a/scene/3d/cpu_particles_3d.cpp
+++ b/scene/3d/cpu_particles_3d.cpp
@@ -1328,7 +1328,7 @@ void CPUParticles3D::convert_from_particles(Node *p_particles) {
set_color(material->get_color());
- Ref<GradientTexture> gt = material->get_color_ramp();
+ Ref<GradientTexture1D> gt = material->get_color_ramp();
if (gt.is_valid()) {
set_color_ramp(gt->get_gradient());
}
diff --git a/scene/3d/decal.cpp b/scene/3d/decal.cpp
index e3c63d62f9..500bf4d8f5 100644
--- a/scene/3d/decal.cpp
+++ b/scene/3d/decal.cpp
@@ -158,7 +158,7 @@ Vector<Face3> Decal::get_faces(uint32_t p_usage_flags) const {
void Decal::_validate_property(PropertyInfo &property) const {
if (!distance_fade_enabled && (property.name == "distance_fade_begin" || property.name == "distance_fade_length")) {
- property.usage = PROPERTY_USAGE_NOEDITOR;
+ property.usage = PROPERTY_USAGE_NO_EDITOR;
}
VisualInstance3D::_validate_property(property);
}
@@ -175,9 +175,6 @@ TypedArray<String> Decal::get_configuration_warnings() const {
}
if (cull_mask == 0) {
- // NOTE: This warning will not be emitted if none of the 20 checkboxes
- // exposed in the editor are checked. This is because there are
- // currently 12 unexposed layers in the editor inspector.
warnings.push_back(TTR("The decal's Cull Mask has no bits enabled, which means the decal will not paint objects on any layer.\nTo resolve this, enable at least one bit in the Cull Mask property."));
}
diff --git a/scene/3d/fog_volume.cpp b/scene/3d/fog_volume.cpp
index cc4fbbb41b..694defd7dc 100644
--- a/scene/3d/fog_volume.cpp
+++ b/scene/3d/fog_volume.cpp
@@ -50,6 +50,7 @@ void FogVolume::_validate_property(PropertyInfo &property) const {
property.usage = PROPERTY_USAGE_NONE;
return;
}
+ VisualInstance3D::_validate_property(property);
}
void FogVolume::set_extents(const Vector3 &p_extents) {
diff --git a/scene/3d/gpu_particles_collision_3d.cpp b/scene/3d/gpu_particles_collision_3d.cpp
index 6ac9364b1a..2235de1599 100644
--- a/scene/3d/gpu_particles_collision_3d.cpp
+++ b/scene/3d/gpu_particles_collision_3d.cpp
@@ -256,10 +256,10 @@ void GPUParticlesCollisionSDF::_find_closest_distance(const Vector3 &p_pos, cons
Vector2 pq1 = v1 - e1 * CLAMP(v1.dot(e1) / e1.dot(e1), 0.0, 1.0);
Vector2 pq2 = v2 - e2 * CLAMP(v2.dot(e2) / e2.dot(e2), 0.0, 1.0);
- float s = SGN(e0.x * e2.y - e0.y * e2.x);
+ float s = SIGN(e0.x * e2.y - e0.y * e2.x);
Vector2 d2 = Vector2(pq0.dot(pq0), s * (v0.x * e0.y - v0.y * e0.x)).min(Vector2(pq1.dot(pq1), s * (v1.x * e1.y - v1.y * e1.x))).min(Vector2(pq2.dot(pq2), s * (v2.x * e2.y - v2.y * e2.x)));
- inside_d = -Math::sqrt(d2.x) * SGN(d2.y);
+ inside_d = -Math::sqrt(d2.x) * SIGN(d2.y);
}
//make sure distance to planes is not shorter if inside
@@ -288,7 +288,7 @@ void GPUParticlesCollisionSDF::_find_closest_distance(const Vector3 &p_pos, cons
Vector3 nor = ba.cross(ac);
inside_d = Math::sqrt(
- (SGN(ba.cross(nor).dot(pa)) + SGN(cb.cross(nor).dot(pb)) + SGN(ac.cross(nor).dot(pc)) < 2.0)
+ (SIGN(ba.cross(nor).dot(pa)) + SIGN(cb.cross(nor).dot(pb)) + SIGN(ac.cross(nor).dot(pc)) < 2.0)
? MIN(MIN(
Vector3_dot2(ba * CLAMP(ba.dot(pa) / Vector3_dot2(ba), 0.0, 1.0) - pa),
Vector3_dot2(cb * CLAMP(cb.dot(pb) / Vector3_dot2(cb), 0.0, 1.0) - pb)),
diff --git a/scene/3d/light_3d.cpp b/scene/3d/light_3d.cpp
index fbdbd79c0c..5d9ae019c2 100644
--- a/scene/3d/light_3d.cpp
+++ b/scene/3d/light_3d.cpp
@@ -197,7 +197,7 @@ bool Light3D::is_editor_only() const {
void Light3D::_validate_property(PropertyInfo &property) const {
if (!shadow && (property.name == "shadow_color" || property.name == "shadow_bias" || property.name == "shadow_normal_bias" || property.name == "shadow_reverse_cull_face" || property.name == "shadow_transmittance_bias" || property.name == "shadow_fog_fade" || property.name == "shadow_blur")) {
- property.usage = PROPERTY_USAGE_NOEDITOR;
+ property.usage = PROPERTY_USAGE_NO_EDITOR;
}
if (get_light_type() != RS::LIGHT_DIRECTIONAL && property.name == "light_angular_distance") {
@@ -379,12 +379,12 @@ bool DirectionalLight3D::is_sky_only() const {
void DirectionalLight3D::_validate_property(PropertyInfo &property) const {
if (shadow_mode == SHADOW_ORTHOGONAL && (property.name == "directional_shadow_split_1" || property.name == "directional_shadow_blend_splits")) {
// Split 2 and split blending are only used with the PSSM 2 Splits and PSSM 4 Splits shadow modes.
- property.usage = PROPERTY_USAGE_NOEDITOR;
+ property.usage = PROPERTY_USAGE_NO_EDITOR;
}
if ((shadow_mode == SHADOW_ORTHOGONAL || shadow_mode == SHADOW_PARALLEL_2_SPLITS) && (property.name == "directional_shadow_split_2" || property.name == "directional_shadow_split_3")) {
// Splits 3 and 4 are only used with the PSSM 4 Splits shadow mode.
- property.usage = PROPERTY_USAGE_NOEDITOR;
+ property.usage = PROPERTY_USAGE_NO_EDITOR;
}
if (property.name == "light_size" || property.name == "light_projector" || property.name == "light_specular") {
diff --git a/scene/3d/lightmap_gi.cpp b/scene/3d/lightmap_gi.cpp
index 3bcb6add76..1b5d4ad243 100644
--- a/scene/3d/lightmap_gi.cpp
+++ b/scene/3d/lightmap_gi.cpp
@@ -200,9 +200,9 @@ void LightmapGIData::_bind_methods() {
ClassDB::bind_method(D_METHOD("_get_probe_data"), &LightmapGIData::_get_probe_data);
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "light_texture", PROPERTY_HINT_RESOURCE_TYPE, "TextureLayered"), "set_light_texture", "get_light_texture");
- ADD_PROPERTY(PropertyInfo(Variant::BOOL, "uses_spherical_harmonics", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL), "set_uses_spherical_harmonics", "is_using_spherical_harmonics");
- ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "user_data", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL), "_set_user_data", "_get_user_data");
- ADD_PROPERTY(PropertyInfo(Variant::DICTIONARY, "probe_data", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL), "_set_probe_data", "_get_probe_data");
+ ADD_PROPERTY(PropertyInfo(Variant::BOOL, "uses_spherical_harmonics", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL), "set_uses_spherical_harmonics", "is_using_spherical_harmonics");
+ ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "user_data", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL), "_set_user_data", "_get_user_data");
+ ADD_PROPERTY(PropertyInfo(Variant::DICTIONARY, "probe_data", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL), "_set_probe_data", "_get_probe_data");
}
LightmapGIData::LightmapGIData() {
diff --git a/scene/3d/mesh_instance_3d.cpp b/scene/3d/mesh_instance_3d.cpp
index c148f95461..ae686143e4 100644
--- a/scene/3d/mesh_instance_3d.cpp
+++ b/scene/3d/mesh_instance_3d.cpp
@@ -244,7 +244,7 @@ Node *MeshInstance3D::create_trimesh_collision_node() {
StaticBody3D *static_body = memnew(StaticBody3D);
CollisionShape3D *cshape = memnew(CollisionShape3D);
cshape->set_shape(shape);
- static_body->add_child(cshape);
+ static_body->add_child(cshape, true);
return static_body;
}
@@ -253,7 +253,7 @@ void MeshInstance3D::create_trimesh_collision() {
ERR_FAIL_COND(!static_body);
static_body->set_name(String(get_name()) + "_col");
- add_child(static_body);
+ add_child(static_body, true);
if (get_owner()) {
CollisionShape3D *cshape = Object::cast_to<CollisionShape3D>(static_body->get_child(0));
static_body->set_owner(get_owner());
@@ -274,7 +274,7 @@ Node *MeshInstance3D::create_convex_collision_node(bool p_clean, bool p_simplify
StaticBody3D *static_body = memnew(StaticBody3D);
CollisionShape3D *cshape = memnew(CollisionShape3D);
cshape->set_shape(shape);
- static_body->add_child(cshape);
+ static_body->add_child(cshape, true);
return static_body;
}
@@ -283,7 +283,7 @@ void MeshInstance3D::create_convex_collision(bool p_clean, bool p_simplify) {
ERR_FAIL_COND(!static_body);
static_body->set_name(String(get_name()) + "_col");
- add_child(static_body);
+ add_child(static_body, true);
if (get_owner()) {
CollisionShape3D *cshape = Object::cast_to<CollisionShape3D>(static_body->get_child(0));
static_body->set_owner(get_owner());
@@ -306,7 +306,7 @@ Node *MeshInstance3D::create_multiple_convex_collisions_node() {
for (int i = 0; i < shapes.size(); i++) {
CollisionShape3D *cshape = memnew(CollisionShape3D);
cshape->set_shape(shapes[i]);
- static_body->add_child(cshape);
+ static_body->add_child(cshape, true);
}
return static_body;
}
@@ -316,7 +316,7 @@ void MeshInstance3D::create_multiple_convex_collisions() {
ERR_FAIL_COND(!static_body);
static_body->set_name(String(get_name()) + "_col");
- add_child(static_body);
+ add_child(static_body, true);
if (get_owner()) {
static_body->set_owner(get_owner());
int count = static_body->get_child_count();
@@ -460,7 +460,7 @@ void MeshInstance3D::create_debug_tangents() {
MeshInstance3D *mi = memnew(MeshInstance3D);
mi->set_mesh(am);
mi->set_name("DebugTangents");
- add_child(mi);
+ add_child(mi, true);
#ifdef TOOLS_ENABLED
if (is_inside_tree() && this == get_tree()->get_edited_scene_root()) {
diff --git a/scene/3d/navigation_obstacle_3d.cpp b/scene/3d/navigation_obstacle_3d.cpp
index 20ffc3b00e..f9fff802e0 100644
--- a/scene/3d/navigation_obstacle_3d.cpp
+++ b/scene/3d/navigation_obstacle_3d.cpp
@@ -35,19 +35,41 @@
#include "servers/navigation_server_3d.h"
void NavigationObstacle3D::_bind_methods() {
+ ClassDB::bind_method(D_METHOD("set_estimate_radius", "estimate_radius"), &NavigationObstacle3D::set_estimate_radius);
+ ClassDB::bind_method(D_METHOD("is_radius_estimated"), &NavigationObstacle3D::is_radius_estimated);
+ ClassDB::bind_method(D_METHOD("set_radius", "radius"), &NavigationObstacle3D::set_radius);
+ ClassDB::bind_method(D_METHOD("get_radius"), &NavigationObstacle3D::get_radius);
+
+ ADD_PROPERTY(PropertyInfo(Variant::BOOL, "estimate_radius"), "set_estimate_radius", "is_radius_estimated");
+ ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "radius", PROPERTY_HINT_RANGE, "0.01,100,0.01"), "set_radius", "get_radius");
+}
+
+void NavigationObstacle3D::_validate_property(PropertyInfo &p_property) const {
+ if (p_property.name == "radius") {
+ if (estimate_radius) {
+ p_property.usage = PROPERTY_USAGE_NO_EDITOR;
+ }
+ }
}
void NavigationObstacle3D::_notification(int p_what) {
switch (p_what) {
case NOTIFICATION_READY: {
+ initialize_agent();
+ parent_node3d = Object::cast_to<Node3D>(get_parent());
+ if (parent_node3d != nullptr) {
+ // place agent on navigation map first or else the RVO agent callback creation fails silently later
+ NavigationServer3D::get_singleton()->agent_set_map(get_rid(), parent_node3d->get_world_3d()->get_navigation_map());
+ }
set_physics_process_internal(true);
} break;
case NOTIFICATION_EXIT_TREE: {
+ parent_node3d = nullptr;
set_physics_process_internal(false);
} break;
case NOTIFICATION_PARENTED: {
parent_node3d = Object::cast_to<Node3D>(get_parent());
- update_agent_shape();
+ reevaluate_agent_radius();
} break;
case NOTIFICATION_UNPARENTED: {
parent_node3d = nullptr;
@@ -86,7 +108,22 @@ TypedArray<String> NavigationObstacle3D::get_configuration_warnings() const {
return warnings;
}
-void NavigationObstacle3D::update_agent_shape() {
+void NavigationObstacle3D::initialize_agent() {
+ NavigationServer3D::get_singleton()->agent_set_neighbor_dist(agent, 0.0);
+ NavigationServer3D::get_singleton()->agent_set_max_neighbors(agent, 0);
+ NavigationServer3D::get_singleton()->agent_set_time_horizon(agent, 0.0);
+ NavigationServer3D::get_singleton()->agent_set_max_speed(agent, 0.0);
+}
+
+void NavigationObstacle3D::reevaluate_agent_radius() {
+ if (!estimate_radius) {
+ NavigationServer3D::get_singleton()->agent_set_radius(agent, radius);
+ } else if (parent_node3d) {
+ NavigationServer3D::get_singleton()->agent_set_radius(agent, estimate_agent_radius());
+ }
+}
+
+real_t NavigationObstacle3D::estimate_agent_radius() const {
if (parent_node3d) {
// Estimate the radius of this physics body
real_t radius = 0.0;
@@ -110,15 +147,21 @@ void NavigationObstacle3D::update_agent_shape() {
Vector3 s = parent_node3d->get_global_transform().basis.get_scale();
radius *= MAX(s.x, MAX(s.y, s.z));
- if (radius == 0.0) {
- radius = 1.0; // Never a 0 radius
+ if (radius > 0.0) {
+ return radius;
}
-
- // Initialize the Agent as an object
- NavigationServer3D::get_singleton()->agent_set_neighbor_dist(agent, 0.0);
- NavigationServer3D::get_singleton()->agent_set_max_neighbors(agent, 0);
- NavigationServer3D::get_singleton()->agent_set_time_horizon(agent, 0.0);
- NavigationServer3D::get_singleton()->agent_set_radius(agent, radius);
- NavigationServer3D::get_singleton()->agent_set_max_speed(agent, 0.0);
}
+ return 1.0; // Never a 0 radius
+}
+
+void NavigationObstacle3D::set_estimate_radius(bool p_estimate_radius) {
+ estimate_radius = p_estimate_radius;
+ notify_property_list_changed();
+ reevaluate_agent_radius();
+}
+
+void NavigationObstacle3D::set_radius(real_t p_radius) {
+ ERR_FAIL_COND_MSG(p_radius <= 0.0, "Radius must be greater than 0.");
+ radius = p_radius;
+ reevaluate_agent_radius();
}
diff --git a/scene/3d/navigation_obstacle_3d.h b/scene/3d/navigation_obstacle_3d.h
index ab0b158303..12c813ab08 100644
--- a/scene/3d/navigation_obstacle_3d.h
+++ b/scene/3d/navigation_obstacle_3d.h
@@ -39,8 +39,12 @@ class NavigationObstacle3D : public Node {
Node3D *parent_node3d = nullptr;
RID agent;
+ bool estimate_radius = true;
+ real_t radius = 1.0;
+
protected:
static void _bind_methods();
+ void _validate_property(PropertyInfo &p_property) const override;
void _notification(int p_what);
public:
@@ -51,10 +55,21 @@ public:
return agent;
}
+ void set_estimate_radius(bool p_estimate_radius);
+ bool is_radius_estimated() const {
+ return estimate_radius;
+ }
+ void set_radius(real_t p_radius);
+ real_t get_radius() const {
+ return radius;
+ }
+
TypedArray<String> get_configuration_warnings() const override;
private:
- void update_agent_shape();
+ void initialize_agent();
+ void reevaluate_agent_radius();
+ real_t estimate_agent_radius() const;
};
#endif
diff --git a/scene/3d/node_3d.cpp b/scene/3d/node_3d.cpp
index 1265679b36..ddd9d2da8a 100644
--- a/scene/3d/node_3d.cpp
+++ b/scene/3d/node_3d.cpp
@@ -478,7 +478,7 @@ void Node3D::remove_gizmo(Ref<Node3DGizmo> p_gizmo) {
int idx = data.gizmos.find(p_gizmo);
if (idx != -1) {
p_gizmo->free();
- data.gizmos.remove(idx);
+ data.gizmos.remove_at(idx);
}
#endif
}
@@ -943,7 +943,7 @@ void Node3D::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::INT, "rotation_edit_mode", PROPERTY_HINT_ENUM, "Euler,Quaternion,Basis"), "set_rotation_edit_mode", "get_rotation_edit_mode");
ADD_PROPERTY(PropertyInfo(Variant::INT, "rotation_order", PROPERTY_HINT_ENUM, "XYZ,XZY,YXZ,YZX,ZXY,ZYX"), "set_rotation_order", "get_rotation_order");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "top_level"), "set_as_top_level", "is_set_as_top_level");
- ADD_PROPERTY(PropertyInfo(Variant::TRANSFORM3D, "transform", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR), "set_transform", "get_transform");
+ ADD_PROPERTY(PropertyInfo(Variant::TRANSFORM3D, "transform", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), "set_transform", "get_transform");
ADD_GROUP("Visibility", "");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "visible"), "set_visible", "is_visible");
ADD_PROPERTY(PropertyInfo(Variant::NODE_PATH, "visibility_parent", PROPERTY_HINT_NODE_PATH_VALID_TYPES, "GeometryInstance3D"), "set_visibility_parent", "get_visibility_parent");
diff --git a/scene/3d/occluder_instance_3d.cpp b/scene/3d/occluder_instance_3d.cpp
index f3e174c01b..aeac430cd9 100644
--- a/scene/3d/occluder_instance_3d.cpp
+++ b/scene/3d/occluder_instance_3d.cpp
@@ -130,8 +130,8 @@ void Occluder3D::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_indices", "indices"), &Occluder3D::set_indices);
ClassDB::bind_method(D_METHOD("get_indices"), &Occluder3D::get_indices);
- ADD_PROPERTY(PropertyInfo(Variant::PACKED_VECTOR3_ARRAY, "vertices", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR), "set_vertices", "get_vertices");
- ADD_PROPERTY(PropertyInfo(Variant::PACKED_INT32_ARRAY, "indices", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR), "set_indices", "get_indices");
+ ADD_PROPERTY(PropertyInfo(Variant::PACKED_VECTOR3_ARRAY, "vertices", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), "set_vertices", "get_vertices");
+ ADD_PROPERTY(PropertyInfo(Variant::PACKED_INT32_ARRAY, "indices", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), "set_indices", "get_indices");
}
Occluder3D::Occluder3D() {
@@ -329,9 +329,6 @@ TypedArray<String> OccluderInstance3D::get_configuration_warnings() const {
}
if (bake_mask == 0) {
- // NOTE: This warning will not be emitted if none of the 20 checkboxes
- // exposed in the editor are checked. This is because there are
- // currently 12 unexposed layers in the editor inspector.
warnings.push_back(TTR("The Bake Mask has no bits enabled, which means baking will not produce any occluder meshes for this OccluderInstance3D.\nTo resolve this, enable at least one bit in the Bake Mask property."));
}
diff --git a/scene/3d/physics_body_3d.cpp b/scene/3d/physics_body_3d.cpp
index 4f1003839e..393e29e398 100644
--- a/scene/3d/physics_body_3d.cpp
+++ b/scene/3d/physics_body_3d.cpp
@@ -174,9 +174,12 @@ bool PhysicsBody3D::test_move(const Transform3D &p_from, const Vector3 &p_linear
ERR_FAIL_COND_V(!is_inside_tree(), false);
PhysicsServer3D::MotionResult *r = nullptr;
+ PhysicsServer3D::MotionResult temp_result;
if (r_collision.is_valid()) {
// Needs const_cast because method bindings don't support non-const Ref.
r = const_cast<PhysicsServer3D::MotionResult *>(&r_collision->result);
+ } else {
+ r = &temp_result;
}
// Hack in order to work with calling from _process as well as from _physics_process; calling from thread is risky
@@ -184,7 +187,14 @@ bool PhysicsBody3D::test_move(const Transform3D &p_from, const Vector3 &p_linear
PhysicsServer3D::MotionParameters parameters(p_from, p_linear_velocity * delta, p_margin);
- return PhysicsServer3D::get_singleton()->body_test_motion(get_rid(), parameters, r);
+ bool colliding = PhysicsServer3D::get_singleton()->body_test_motion(get_rid(), parameters, r);
+
+ if (colliding) {
+ // Don't report collision when the whole motion is done.
+ return (r->collision_safe_fraction < 1.0);
+ } else {
+ return false;
+ }
}
void PhysicsBody3D::set_axis_lock(PhysicsServer3D::BodyAxis p_axis, bool p_lock) {
@@ -758,8 +768,26 @@ real_t RigidDynamicBody3D::get_gravity_scale() const {
return gravity_scale;
}
+void RigidDynamicBody3D::set_linear_damp_mode(DampMode p_mode) {
+ linear_damp_mode = p_mode;
+ PhysicsServer3D::get_singleton()->body_set_param(get_rid(), PhysicsServer3D::BODY_PARAM_LINEAR_DAMP_MODE, linear_damp_mode);
+}
+
+RigidDynamicBody3D::DampMode RigidDynamicBody3D::get_linear_damp_mode() const {
+ return linear_damp_mode;
+}
+
+void RigidDynamicBody3D::set_angular_damp_mode(DampMode p_mode) {
+ angular_damp_mode = p_mode;
+ PhysicsServer3D::get_singleton()->body_set_param(get_rid(), PhysicsServer3D::BODY_PARAM_ANGULAR_DAMP_MODE, angular_damp_mode);
+}
+
+RigidDynamicBody3D::DampMode RigidDynamicBody3D::get_angular_damp_mode() const {
+ return angular_damp_mode;
+}
+
void RigidDynamicBody3D::set_linear_damp(real_t p_linear_damp) {
- ERR_FAIL_COND(p_linear_damp < -1);
+ ERR_FAIL_COND(p_linear_damp < 0.0);
linear_damp = p_linear_damp;
PhysicsServer3D::get_singleton()->body_set_param(get_rid(), PhysicsServer3D::BODY_PARAM_LINEAR_DAMP, linear_damp);
}
@@ -769,7 +797,7 @@ real_t RigidDynamicBody3D::get_linear_damp() const {
}
void RigidDynamicBody3D::set_angular_damp(real_t p_angular_damp) {
- ERR_FAIL_COND(p_angular_damp < -1);
+ ERR_FAIL_COND(p_angular_damp < 0.0);
angular_damp = p_angular_damp;
PhysicsServer3D::get_singleton()->body_set_param(get_rid(), PhysicsServer3D::BODY_PARAM_ANGULAR_DAMP, angular_damp);
}
@@ -970,6 +998,12 @@ void RigidDynamicBody3D::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_gravity_scale", "gravity_scale"), &RigidDynamicBody3D::set_gravity_scale);
ClassDB::bind_method(D_METHOD("get_gravity_scale"), &RigidDynamicBody3D::get_gravity_scale);
+ ClassDB::bind_method(D_METHOD("set_linear_damp_mode", "linear_damp_mode"), &RigidDynamicBody3D::set_linear_damp_mode);
+ ClassDB::bind_method(D_METHOD("get_linear_damp_mode"), &RigidDynamicBody3D::get_linear_damp_mode);
+
+ ClassDB::bind_method(D_METHOD("set_angular_damp_mode", "angular_damp_mode"), &RigidDynamicBody3D::set_angular_damp_mode);
+ ClassDB::bind_method(D_METHOD("get_angular_damp_mode"), &RigidDynamicBody3D::get_angular_damp_mode);
+
ClassDB::bind_method(D_METHOD("set_linear_damp", "linear_damp"), &RigidDynamicBody3D::set_linear_damp);
ClassDB::bind_method(D_METHOD("get_linear_damp"), &RigidDynamicBody3D::get_linear_damp);
@@ -1035,10 +1069,12 @@ void RigidDynamicBody3D::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::INT, "freeze_mode", PROPERTY_HINT_ENUM, "Static,Kinematic"), "set_freeze_mode", "get_freeze_mode");
ADD_GROUP("Linear", "linear_");
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "linear_velocity"), "set_linear_velocity", "get_linear_velocity");
- ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "linear_damp", PROPERTY_HINT_RANGE, "-1,100,0.001,or_greater"), "set_linear_damp", "get_linear_damp");
+ ADD_PROPERTY(PropertyInfo(Variant::INT, "linear_damp_mode", PROPERTY_HINT_ENUM, "Combine,Replace"), "set_linear_damp_mode", "get_linear_damp_mode");
+ ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "linear_damp", PROPERTY_HINT_RANGE, "0,100,0.001,or_greater"), "set_linear_damp", "get_linear_damp");
ADD_GROUP("Angular", "angular_");
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "angular_velocity"), "set_angular_velocity", "get_angular_velocity");
- ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "angular_damp", PROPERTY_HINT_RANGE, "-1,100,0.001,or_greater"), "set_angular_damp", "get_angular_damp");
+ ADD_PROPERTY(PropertyInfo(Variant::INT, "angular_damp_mode", PROPERTY_HINT_ENUM, "Combine,Replace"), "set_angular_damp_mode", "get_angular_damp_mode");
+ ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "angular_damp", PROPERTY_HINT_RANGE, "0,100,0.001,or_greater"), "set_angular_damp", "get_angular_damp");
ADD_SIGNAL(MethodInfo("body_shape_entered", PropertyInfo(Variant::RID, "body_rid"), PropertyInfo(Variant::OBJECT, "body", PROPERTY_HINT_RESOURCE_TYPE, "Node"), PropertyInfo(Variant::INT, "body_shape_index"), PropertyInfo(Variant::INT, "local_shape_index")));
ADD_SIGNAL(MethodInfo("body_shape_exited", PropertyInfo(Variant::RID, "body_rid"), PropertyInfo(Variant::OBJECT, "body", PROPERTY_HINT_RESOURCE_TYPE, "Node"), PropertyInfo(Variant::INT, "body_shape_index"), PropertyInfo(Variant::INT, "local_shape_index")));
@@ -1051,12 +1087,15 @@ void RigidDynamicBody3D::_bind_methods() {
BIND_ENUM_CONSTANT(CENTER_OF_MASS_MODE_AUTO);
BIND_ENUM_CONSTANT(CENTER_OF_MASS_MODE_CUSTOM);
+
+ BIND_ENUM_CONSTANT(DAMP_MODE_COMBINE);
+ BIND_ENUM_CONSTANT(DAMP_MODE_REPLACE);
}
void RigidDynamicBody3D::_validate_property(PropertyInfo &property) const {
if (center_of_mass_mode != CENTER_OF_MASS_MODE_CUSTOM) {
if (property.name == "center_of_mass") {
- property.usage = PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL;
+ property.usage = PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL;
}
}
PhysicsBody3D::_validate_property(property);
@@ -1116,6 +1155,10 @@ bool CharacterBody3D::move_and_slide() {
if (bs) {
Vector3 local_position = gt.origin - bs->get_transform().origin;
current_platform_velocity = bs->get_velocity_at_local_position(local_position);
+ } else {
+ // Body is removed or destroyed, invalidate floor.
+ current_platform_velocity = Vector3();
+ platform_rid = RID();
}
} else {
current_platform_velocity = Vector3();
@@ -1256,7 +1299,6 @@ void CharacterBody3D::_move_and_slide_grounded(double p_delta, bool p_was_on_flo
// in order to avoid blocking lateral motion along a wall.
if (motion_angle < .5 * Math_PI) {
apply_default_sliding = false;
-
if (p_was_on_floor && !vel_dir_facing_up) {
// Cancel the motion.
Transform3D gt = get_global_transform();
@@ -1264,14 +1306,18 @@ void CharacterBody3D::_move_and_slide_grounded(double p_delta, bool p_was_on_flo
real_t cancel_dist_max = MIN(0.1, margin * 20);
if (travel_total <= margin + CMP_EPSILON) {
gt.origin -= result.travel;
+ result.travel = Vector3(); // Cancel for constant speed computation.
} else if (travel_total < cancel_dist_max) { // If the movement is large the body can be prevented from reaching the walls.
gt.origin -= result.travel.slide(up_direction);
// Keep remaining motion in sync with amount canceled.
motion = motion.slide(up_direction);
+ result.travel = Vector3();
+ } else {
+ // Travel is too high to be safely cancelled, we take it into account.
+ result.travel = result.travel.slide(up_direction);
+ motion = motion.normalized() * result.travel.length();
}
set_global_transform(gt);
- result.travel = Vector3(); // Cancel for constant speed computation.
-
// Determines if you are on the ground, and limits the possibility of climbing on the walls because of the approximations.
_snap_on_floor(true, false);
} else {
@@ -1282,8 +1328,15 @@ void CharacterBody3D::_move_and_slide_grounded(double p_delta, bool p_was_on_flo
// Apply slide on forward in order to allow only lateral motion on next step.
Vector3 forward = wall_normal.slide(up_direction).normalized();
motion = motion.slide(forward);
- // Avoid accelerating when you jump on the wall and smooth falling.
- motion_velocity = motion_velocity.slide(forward);
+
+ // Scales the horizontal velocity according to the wall slope.
+ if (vel_dir_facing_up) {
+ Vector3 slide_motion = motion_velocity.slide(result.collisions[0].normal);
+ // Keeps the vertical motion from motion_velocity and add the horizontal motion of the projection.
+ motion_velocity = up_direction * up_direction.dot(motion_velocity) + slide_motion.slide(up_direction);
+ } else {
+ motion_velocity = motion_velocity.slide(forward);
+ }
// Allow only lateral motion along previous floor when already on floor.
// Fixes slowing down when moving in diagonal against an inclined wall.
@@ -1541,6 +1594,7 @@ void CharacterBody3D::_set_collision_direction(const PhysicsServer3D::MotionResu
Vector3 prev_wall_normal = wall_normal;
int wall_collision_count = 0;
Vector3 combined_wall_normal;
+ Vector3 tmp_wall_col; // Avoid duplicate on average calculation.
for (int i = p_result.collision_count - 1; i >= 0; i--) {
const PhysicsServer3D::MotionCollision &collision = p_result.collisions[i];
@@ -1587,8 +1641,11 @@ void CharacterBody3D::_set_collision_direction(const PhysicsServer3D::MotionResu
}
// Collect normal for calculating average.
- combined_wall_normal += collision.normal;
- wall_collision_count++;
+ if (!collision.normal.is_equal_approx(tmp_wall_col)) {
+ tmp_wall_col = collision.normal;
+ combined_wall_normal += collision.normal;
+ wall_collision_count++;
+ }
}
if (r_state.wall) {
@@ -1904,8 +1961,8 @@ void CharacterBody3D::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::INT, "motion_mode", PROPERTY_HINT_ENUM, "Grounded,Free", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), "set_motion_mode", "get_motion_mode");
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "up_direction"), "set_up_direction", "get_up_direction");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "slide_on_ceiling"), "set_slide_on_ceiling_enabled", "is_slide_on_ceiling_enabled");
- ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "motion_velocity", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR), "set_motion_velocity", "get_motion_velocity");
- ADD_PROPERTY(PropertyInfo(Variant::INT, "max_slides", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR), "set_max_slides", "get_max_slides");
+ ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "motion_velocity", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), "set_motion_velocity", "get_motion_velocity");
+ ADD_PROPERTY(PropertyInfo(Variant::INT, "max_slides", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), "set_max_slides", "get_max_slides");
ADD_GROUP("Free Mode", "free_mode_");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "wall_min_slide_angle", PROPERTY_HINT_RANGE, "0,180,0.1,radians", PROPERTY_USAGE_DEFAULT), "set_wall_min_slide_angle", "get_wall_min_slide_angle");
ADD_GROUP("Floor", "floor_");
@@ -1931,7 +1988,7 @@ void CharacterBody3D::_bind_methods() {
void CharacterBody3D::_validate_property(PropertyInfo &property) const {
if (motion_mode == MOTION_MODE_FREE) {
if (property.name.begins_with("floor_") || property.name == "up_direction" || property.name == "slide_on_ceiling") {
- property.usage = PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL;
+ property.usage = PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL;
}
}
PhysicsBody3D::_validate_property(property);
@@ -2825,6 +2882,12 @@ void PhysicalBone3D::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_gravity_scale", "gravity_scale"), &PhysicalBone3D::set_gravity_scale);
ClassDB::bind_method(D_METHOD("get_gravity_scale"), &PhysicalBone3D::get_gravity_scale);
+ ClassDB::bind_method(D_METHOD("set_linear_damp_mode", "linear_damp_mode"), &PhysicalBone3D::set_linear_damp_mode);
+ ClassDB::bind_method(D_METHOD("get_linear_damp_mode"), &PhysicalBone3D::get_linear_damp_mode);
+
+ ClassDB::bind_method(D_METHOD("set_angular_damp_mode", "angular_damp_mode"), &PhysicalBone3D::set_angular_damp_mode);
+ ClassDB::bind_method(D_METHOD("get_angular_damp_mode"), &PhysicalBone3D::get_angular_damp_mode);
+
ClassDB::bind_method(D_METHOD("set_linear_damp", "linear_damp"), &PhysicalBone3D::set_linear_damp);
ClassDB::bind_method(D_METHOD("get_linear_damp"), &PhysicalBone3D::get_linear_damp);
@@ -2845,10 +2908,15 @@ void PhysicalBone3D::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "friction", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_friction", "get_friction");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "bounce", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_bounce", "get_bounce");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "gravity_scale", PROPERTY_HINT_RANGE, "-10,10,0.01"), "set_gravity_scale", "get_gravity_scale");
- ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "linear_damp", PROPERTY_HINT_RANGE, "-1,100,0.001,or_greater"), "set_linear_damp", "get_linear_damp");
- ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "angular_damp", PROPERTY_HINT_RANGE, "-1,100,0.001,or_greater"), "set_angular_damp", "get_angular_damp");
+ ADD_PROPERTY(PropertyInfo(Variant::INT, "linear_damp_mode", PROPERTY_HINT_ENUM, "Combine,Replace"), "set_linear_damp_mode", "get_linear_damp_mode");
+ ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "linear_damp", PROPERTY_HINT_RANGE, "0,100,0.001,or_greater"), "set_linear_damp", "get_linear_damp");
+ ADD_PROPERTY(PropertyInfo(Variant::INT, "angular_damp_mode", PROPERTY_HINT_ENUM, "Combine,Replace"), "set_angular_damp_mode", "get_angular_damp_mode");
+ ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "angular_damp", PROPERTY_HINT_RANGE, "0,100,0.001,or_greater"), "set_angular_damp", "get_angular_damp");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "can_sleep"), "set_can_sleep", "is_able_to_sleep");
+ BIND_ENUM_CONSTANT(DAMP_MODE_COMBINE);
+ BIND_ENUM_CONSTANT(DAMP_MODE_REPLACE);
+
BIND_ENUM_CONSTANT(JOINT_TYPE_NONE);
BIND_ENUM_CONSTANT(JOINT_TYPE_PIN);
BIND_ENUM_CONSTANT(JOINT_TYPE_CONE);
@@ -3146,8 +3214,27 @@ real_t PhysicalBone3D::get_gravity_scale() const {
return gravity_scale;
}
+void PhysicalBone3D::set_linear_damp_mode(DampMode p_mode) {
+ linear_damp_mode = p_mode;
+ PhysicsServer3D::get_singleton()->body_set_param(get_rid(), PhysicsServer3D::BODY_PARAM_LINEAR_DAMP_MODE, linear_damp_mode);
+}
+
+PhysicalBone3D::DampMode PhysicalBone3D::get_linear_damp_mode() const {
+ return linear_damp_mode;
+}
+
+void PhysicalBone3D::set_angular_damp_mode(DampMode p_mode) {
+ angular_damp_mode = p_mode;
+ PhysicsServer3D::get_singleton()->body_set_param(get_rid(), PhysicsServer3D::BODY_PARAM_ANGULAR_DAMP_MODE, angular_damp_mode);
+}
+
+PhysicalBone3D::DampMode PhysicalBone3D::get_angular_damp_mode() const {
+ return angular_damp_mode;
+}
+
void PhysicalBone3D::set_linear_damp(real_t p_linear_damp) {
- ERR_FAIL_COND(p_linear_damp < -1);
+ ERR_FAIL_COND(p_linear_damp < 0);
+
linear_damp = p_linear_damp;
PhysicsServer3D::get_singleton()->body_set_param(get_rid(), PhysicsServer3D::BODY_PARAM_LINEAR_DAMP, linear_damp);
}
@@ -3157,7 +3244,8 @@ real_t PhysicalBone3D::get_linear_damp() const {
}
void PhysicalBone3D::set_angular_damp(real_t p_angular_damp) {
- ERR_FAIL_COND(p_angular_damp < -1);
+ ERR_FAIL_COND(p_angular_damp < 0);
+
angular_damp = p_angular_damp;
PhysicsServer3D::get_singleton()->body_set_param(get_rid(), PhysicsServer3D::BODY_PARAM_ANGULAR_DAMP, angular_damp);
}
diff --git a/scene/3d/physics_body_3d.h b/scene/3d/physics_body_3d.h
index 5677df730c..2ea796d335 100644
--- a/scene/3d/physics_body_3d.h
+++ b/scene/3d/physics_body_3d.h
@@ -143,6 +143,11 @@ public:
CENTER_OF_MASS_MODE_CUSTOM,
};
+ enum DampMode {
+ DAMP_MODE_COMBINE,
+ DAMP_MODE_REPLACE,
+ };
+
private:
bool can_sleep = true;
bool lock_rotation = false;
@@ -160,8 +165,12 @@ private:
Vector3 angular_velocity;
Basis inverse_inertia_tensor;
real_t gravity_scale = 1.0;
- real_t linear_damp = -1.0;
- real_t angular_damp = -1.0;
+
+ DampMode linear_damp_mode = DAMP_MODE_COMBINE;
+ DampMode angular_damp_mode = DAMP_MODE_COMBINE;
+
+ real_t linear_damp = 0.0;
+ real_t angular_damp = 0.0;
bool sleeping = false;
bool ccd = false;
@@ -265,6 +274,12 @@ public:
void set_gravity_scale(real_t p_gravity_scale);
real_t get_gravity_scale() const;
+ void set_linear_damp_mode(DampMode p_mode);
+ DampMode get_linear_damp_mode() const;
+
+ void set_angular_damp_mode(DampMode p_mode);
+ DampMode get_angular_damp_mode() const;
+
void set_linear_damp(real_t p_linear_damp);
real_t get_linear_damp() const;
@@ -310,6 +325,7 @@ private:
VARIANT_ENUM_CAST(RigidDynamicBody3D::FreezeMode);
VARIANT_ENUM_CAST(RigidDynamicBody3D::CenterOfMassMode);
+VARIANT_ENUM_CAST(RigidDynamicBody3D::DampMode);
class KinematicCollision3D;
@@ -494,6 +510,11 @@ class PhysicalBone3D : public PhysicsBody3D {
GDCLASS(PhysicalBone3D, PhysicsBody3D);
public:
+ enum DampMode {
+ DAMP_MODE_COMBINE,
+ DAMP_MODE_REPLACE,
+ };
+
enum JointType {
JOINT_TYPE_NONE,
JOINT_TYPE_PIN,
@@ -632,10 +653,14 @@ private:
real_t mass = 1.0;
real_t friction = 1.0;
real_t gravity_scale = 1.0;
- real_t linear_damp = -1.0;
- real_t angular_damp = -1.0;
bool can_sleep = true;
+ DampMode linear_damp_mode = DAMP_MODE_COMBINE;
+ DampMode angular_damp_mode = DAMP_MODE_COMBINE;
+
+ real_t linear_damp = 0.0;
+ real_t angular_damp = 0.0;
+
protected:
bool _set(const StringName &p_name, const Variant &p_value);
bool _get(const StringName &p_name, Variant &r_ret) const;
@@ -698,6 +723,12 @@ public:
void set_gravity_scale(real_t p_gravity_scale);
real_t get_gravity_scale() const;
+ void set_linear_damp_mode(DampMode p_mode);
+ DampMode get_linear_damp_mode() const;
+
+ void set_angular_damp_mode(DampMode p_mode);
+ DampMode get_angular_damp_mode() const;
+
void set_linear_damp(real_t p_linear_damp);
real_t get_linear_damp() const;
@@ -725,5 +756,6 @@ private:
};
VARIANT_ENUM_CAST(PhysicalBone3D::JointType);
+VARIANT_ENUM_CAST(PhysicalBone3D::DampMode);
#endif // PHYSICS_BODY__H
diff --git a/scene/3d/ray_cast_3d.cpp b/scene/3d/ray_cast_3d.cpp
index fd4c6e7416..bfa397a1f5 100644
--- a/scene/3d/ray_cast_3d.cpp
+++ b/scene/3d/ray_cast_3d.cpp
@@ -212,9 +212,17 @@ void RayCast3D::_update_raycast_state() {
to = Vector3(0, 0.01, 0);
}
- PhysicsDirectSpaceState3D::RayResult rr;
+ PhysicsDirectSpaceState3D::RayParameters ray_params;
+ ray_params.from = gt.get_origin();
+ ray_params.to = gt.xform(to);
+ ray_params.exclude = exclude;
+ ray_params.collision_mask = collision_mask;
+ ray_params.collide_with_bodies = collide_with_bodies;
+ ray_params.collide_with_areas = collide_with_areas;
+ ray_params.hit_from_inside = hit_from_inside;
- if (dss->intersect_ray(gt.get_origin(), gt.xform(to), rr, exclude, collision_mask, collide_with_bodies, collide_with_areas)) {
+ PhysicsDirectSpaceState3D::RayResult rr;
+ if (dss->intersect_ray(ray_params, rr)) {
collided = true;
against = rr.collider_id;
collision_point = rr.position;
@@ -261,22 +269,30 @@ void RayCast3D::clear_exceptions() {
exclude.clear();
}
-void RayCast3D::set_collide_with_areas(bool p_clip) {
- collide_with_areas = p_clip;
+void RayCast3D::set_collide_with_areas(bool p_enabled) {
+ collide_with_areas = p_enabled;
}
bool RayCast3D::is_collide_with_areas_enabled() const {
return collide_with_areas;
}
-void RayCast3D::set_collide_with_bodies(bool p_clip) {
- collide_with_bodies = p_clip;
+void RayCast3D::set_collide_with_bodies(bool p_enabled) {
+ collide_with_bodies = p_enabled;
}
bool RayCast3D::is_collide_with_bodies_enabled() const {
return collide_with_bodies;
}
+void RayCast3D::set_hit_from_inside(bool p_enabled) {
+ hit_from_inside = p_enabled;
+}
+
+bool RayCast3D::is_hit_from_inside_enabled() const {
+ return hit_from_inside;
+}
+
void RayCast3D::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_enabled", "enabled"), &RayCast3D::set_enabled);
ClassDB::bind_method(D_METHOD("is_enabled"), &RayCast3D::is_enabled);
@@ -315,6 +331,9 @@ void RayCast3D::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_collide_with_bodies", "enable"), &RayCast3D::set_collide_with_bodies);
ClassDB::bind_method(D_METHOD("is_collide_with_bodies_enabled"), &RayCast3D::is_collide_with_bodies_enabled);
+ ClassDB::bind_method(D_METHOD("set_hit_from_inside", "enable"), &RayCast3D::set_hit_from_inside);
+ ClassDB::bind_method(D_METHOD("is_hit_from_inside_enabled"), &RayCast3D::is_hit_from_inside_enabled);
+
ClassDB::bind_method(D_METHOD("set_debug_shape_custom_color", "debug_shape_custom_color"), &RayCast3D::set_debug_shape_custom_color);
ClassDB::bind_method(D_METHOD("get_debug_shape_custom_color"), &RayCast3D::get_debug_shape_custom_color);
@@ -325,6 +344,7 @@ void RayCast3D::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "exclude_parent"), "set_exclude_parent_body", "get_exclude_parent_body");
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "target_position"), "set_target_position", "get_target_position");
ADD_PROPERTY(PropertyInfo(Variant::INT, "collision_mask", PROPERTY_HINT_LAYERS_3D_PHYSICS), "set_collision_mask", "get_collision_mask");
+ ADD_PROPERTY(PropertyInfo(Variant::BOOL, "hit_from_inside"), "set_hit_from_inside", "is_hit_from_inside_enabled");
ADD_GROUP("Collide With", "collide_with");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "collide_with_areas", PROPERTY_HINT_LAYERS_3D_PHYSICS), "set_collide_with_areas", "is_collide_with_areas_enabled");
diff --git a/scene/3d/ray_cast_3d.h b/scene/3d/ray_cast_3d.h
index 3828bfb4c4..5c2a61c35b 100644
--- a/scene/3d/ray_cast_3d.h
+++ b/scene/3d/ray_cast_3d.h
@@ -65,18 +65,23 @@ class RayCast3D : public Node3D {
bool collide_with_areas = false;
bool collide_with_bodies = true;
+ bool hit_from_inside = false;
+
protected:
void _notification(int p_what);
void _update_raycast_state();
static void _bind_methods();
public:
- void set_collide_with_areas(bool p_clip);
+ void set_collide_with_areas(bool p_enabled);
bool is_collide_with_areas_enabled() const;
- void set_collide_with_bodies(bool p_clip);
+ void set_collide_with_bodies(bool p_enabled);
bool is_collide_with_bodies_enabled() const;
+ void set_hit_from_inside(bool p_enabled);
+ bool is_hit_from_inside_enabled() const;
+
void set_enabled(bool p_enabled);
bool is_enabled() const;
diff --git a/scene/3d/reflection_probe.cpp b/scene/3d/reflection_probe.cpp
index 29c382cd05..f7f19596a7 100644
--- a/scene/3d/reflection_probe.cpp
+++ b/scene/3d/reflection_probe.cpp
@@ -94,7 +94,7 @@ void ReflectionProbe::set_extents(const Vector3 &p_extents) {
}
if (extents[i] - 0.01 < ABS(origin_offset[i])) {
- origin_offset[i] = SGN(origin_offset[i]) * (extents[i] - 0.01);
+ origin_offset[i] = SIGN(origin_offset[i]) * (extents[i] - 0.01);
}
}
@@ -113,7 +113,7 @@ void ReflectionProbe::set_origin_offset(const Vector3 &p_extents) {
for (int i = 0; i < 3; i++) {
if (extents[i] - 0.01 < ABS(origin_offset[i])) {
- origin_offset[i] = SGN(origin_offset[i]) * (extents[i] - 0.01);
+ origin_offset[i] = SIGN(origin_offset[i]) * (extents[i] - 0.01);
}
}
RS::get_singleton()->reflection_probe_set_extents(probe, extents);
@@ -185,7 +185,7 @@ Vector<Face3> ReflectionProbe::get_faces(uint32_t p_usage_flags) const {
void ReflectionProbe::_validate_property(PropertyInfo &property) const {
if (property.name == "interior/ambient_color" || property.name == "interior/ambient_color_energy") {
if (ambient_mode != AMBIENT_COLOR) {
- property.usage = PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL;
+ property.usage = PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL;
}
}
VisualInstance3D::_validate_property(property);
diff --git a/scene/3d/skeleton_3d.cpp b/scene/3d/skeleton_3d.cpp
index e3744ad5e9..04b5b88ef8 100644
--- a/scene/3d/skeleton_3d.cpp
+++ b/scene/3d/skeleton_3d.cpp
@@ -155,13 +155,13 @@ bool Skeleton3D::_get(const StringName &p_path, Variant &r_ret) const {
void Skeleton3D::_get_property_list(List<PropertyInfo> *p_list) const {
for (int i = 0; i < bones.size(); i++) {
String prep = "bones/" + itos(i) + "/";
- p_list->push_back(PropertyInfo(Variant::STRING, prep + "name", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR));
- p_list->push_back(PropertyInfo(Variant::INT, prep + "parent", PROPERTY_HINT_RANGE, "-1," + itos(bones.size() - 1) + ",1", PROPERTY_USAGE_NOEDITOR));
- p_list->push_back(PropertyInfo(Variant::TRANSFORM3D, prep + "rest", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR));
- p_list->push_back(PropertyInfo(Variant::BOOL, prep + "enabled", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR));
- p_list->push_back(PropertyInfo(Variant::VECTOR3, prep + "position", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR));
- p_list->push_back(PropertyInfo(Variant::QUATERNION, prep + "rotation", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR));
- p_list->push_back(PropertyInfo(Variant::VECTOR3, prep + "scale", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR));
+ p_list->push_back(PropertyInfo(Variant::STRING, prep + "name", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR));
+ p_list->push_back(PropertyInfo(Variant::INT, prep + "parent", PROPERTY_HINT_RANGE, "-1," + itos(bones.size() - 1) + ",1", PROPERTY_USAGE_NO_EDITOR));
+ p_list->push_back(PropertyInfo(Variant::TRANSFORM3D, prep + "rest", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR));
+ p_list->push_back(PropertyInfo(Variant::BOOL, prep + "enabled", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR));
+ p_list->push_back(PropertyInfo(Variant::VECTOR3, prep + "position", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR));
+ p_list->push_back(PropertyInfo(Variant::QUATERNION, prep + "rotation", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR));
+ p_list->push_back(PropertyInfo(Variant::VECTOR3, prep + "scale", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR));
}
#ifndef _3D_DISABLED
@@ -633,7 +633,7 @@ void Skeleton3D::remove_bone_child(int p_bone, int p_child) {
int child_idx = bones[p_bone].child_bones.find(p_child);
if (child_idx >= 0) {
- bones.write[p_bone].child_bones.remove(child_idx);
+ bones.write[p_bone].child_bones.remove_at(child_idx);
} else {
WARN_PRINT("Cannot remove child bone: Child bone not found.");
}
diff --git a/scene/3d/soft_dynamic_body_3d.cpp b/scene/3d/soft_dynamic_body_3d.cpp
index 903eedb58b..5546b88fb1 100644
--- a/scene/3d/soft_dynamic_body_3d.cpp
+++ b/scene/3d/soft_dynamic_body_3d.cpp
@@ -773,7 +773,7 @@ void SoftDynamicBody3D::_reset_points_offsets() {
void SoftDynamicBody3D::_remove_pinned_point(int p_point_index) {
const int id(_has_pinned_point(p_point_index));
if (-1 != id) {
- pinned_points.remove(id);
+ pinned_points.remove_at(id);
}
}
diff --git a/scene/3d/spring_arm_3d.cpp b/scene/3d/spring_arm_3d.cpp
index 116cab19b1..0b5af8823b 100644
--- a/scene/3d/spring_arm_3d.cpp
+++ b/scene/3d/spring_arm_3d.cpp
@@ -149,10 +149,24 @@ void SpringArm3D::process_spring() {
//use camera rotation, but spring arm position
Transform3D base_transform = camera->get_global_transform();
base_transform.origin = get_global_transform().origin;
- get_world_3d()->get_direct_space_state()->cast_motion(camera->get_pyramid_shape_rid(), base_transform, motion, 0, motion_delta, motion_delta_unsafe, excluded_objects, mask);
+
+ PhysicsDirectSpaceState3D::ShapeParameters shape_params;
+ shape_params.shape_rid = camera->get_pyramid_shape_rid();
+ shape_params.transform = base_transform;
+ shape_params.motion = motion;
+ shape_params.exclude = excluded_objects;
+ shape_params.collision_mask = mask;
+
+ get_world_3d()->get_direct_space_state()->cast_motion(shape_params, motion_delta, motion_delta_unsafe);
} else {
+ PhysicsDirectSpaceState3D::RayParameters ray_params;
+ ray_params.from = get_global_transform().origin;
+ ray_params.to = get_global_transform().origin + motion;
+ ray_params.exclude = excluded_objects;
+ ray_params.collision_mask = mask;
+
PhysicsDirectSpaceState3D::RayResult r;
- bool intersected = get_world_3d()->get_direct_space_state()->intersect_ray(get_global_transform().origin, get_global_transform().origin + motion, r, excluded_objects, mask);
+ bool intersected = get_world_3d()->get_direct_space_state()->intersect_ray(ray_params, r);
if (intersected) {
real_t dist = get_global_transform().origin.distance_to(r.position);
dist -= margin;
@@ -160,7 +174,14 @@ void SpringArm3D::process_spring() {
}
}
} else {
- get_world_3d()->get_direct_space_state()->cast_motion(shape->get_rid(), get_global_transform(), motion, 0, motion_delta, motion_delta_unsafe, excluded_objects, mask);
+ PhysicsDirectSpaceState3D::ShapeParameters shape_params;
+ shape_params.shape_rid = shape->get_rid();
+ shape_params.transform = get_global_transform();
+ shape_params.motion = motion;
+ shape_params.exclude = excluded_objects;
+ shape_params.collision_mask = mask;
+
+ get_world_3d()->get_direct_space_state()->cast_motion(shape_params, motion_delta, motion_delta_unsafe);
}
current_spring_length = spring_length * motion_delta;
diff --git a/scene/3d/vehicle_body_3d.cpp b/scene/3d/vehicle_body_3d.cpp
index 61cba17cde..90db093137 100644
--- a/scene/3d/vehicle_body_3d.cpp
+++ b/scene/3d/vehicle_body_3d.cpp
@@ -407,7 +407,13 @@ real_t VehicleBody3D::_ray_cast(int p_idx, PhysicsDirectBodyState3D *s) {
PhysicsDirectSpaceState3D *ss = s->get_space_state();
- bool col = ss->intersect_ray(source, target, rr, exclude, get_collision_mask());
+ PhysicsDirectSpaceState3D::RayParameters ray_params;
+ ray_params.from = source;
+ ray_params.to = target;
+ ray_params.exclude = exclude;
+ ray_params.collision_mask = get_collision_mask();
+
+ bool col = ss->intersect_ray(ray_params, rr);
wheel.m_raycastInfo.m_groundObject = nullptr;
diff --git a/scene/3d/voxel_gi.cpp b/scene/3d/voxel_gi.cpp
index f0cf8f5016..c7108cbae0 100644
--- a/scene/3d/voxel_gi.cpp
+++ b/scene/3d/voxel_gi.cpp
@@ -225,7 +225,7 @@ void VoxelGIData::_bind_methods() {
ClassDB::bind_method(D_METHOD("_set_data", "data"), &VoxelGIData::_set_data);
ClassDB::bind_method(D_METHOD("_get_data"), &VoxelGIData::_get_data);
- ADD_PROPERTY(PropertyInfo(Variant::DICTIONARY, "_data", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL), "_set_data", "_get_data");
+ ADD_PROPERTY(PropertyInfo(Variant::DICTIONARY, "_data", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL), "_set_data", "_get_data");
ADD_PROPERTY(PropertyInfo(Variant::INT, "dynamic_range", PROPERTY_HINT_RANGE, "0,8,0.01"), "set_dynamic_range", "get_dynamic_range");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "energy", PROPERTY_HINT_RANGE, "0,64,0.01"), "set_energy", "get_energy");
@@ -403,7 +403,7 @@ void VoxelGI::bake(Node *p_from_node, bool p_create_visual_debug) {
if (p_create_visual_debug) {
MultiMeshInstance3D *mmi = memnew(MultiMeshInstance3D);
mmi->set_multimesh(baker.create_debug_multimesh());
- add_child(mmi);
+ add_child(mmi, true);
#ifdef TOOLS_ENABLED
if (is_inside_tree() && get_tree()->get_edited_scene_root() == this) {
mmi->set_owner(this);
diff --git a/scene/animation/animation_blend_space_1d.cpp b/scene/animation/animation_blend_space_1d.cpp
index 0167992baf..9a71e7bf55 100644
--- a/scene/animation/animation_blend_space_1d.cpp
+++ b/scene/animation/animation_blend_space_1d.cpp
@@ -81,14 +81,14 @@ void AnimationNodeBlendSpace1D::_bind_methods() {
ClassDB::bind_method(D_METHOD("_add_blend_point", "index", "node"), &AnimationNodeBlendSpace1D::_add_blend_point);
for (int i = 0; i < MAX_BLEND_POINTS; i++) {
- ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "blend_point_" + itos(i) + "/node", PROPERTY_HINT_RESOURCE_TYPE, "AnimationRootNode", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL), "_add_blend_point", "get_blend_point_node", i);
- ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "blend_point_" + itos(i) + "/pos", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL), "set_blend_point_position", "get_blend_point_position", i);
+ ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "blend_point_" + itos(i) + "/node", PROPERTY_HINT_RESOURCE_TYPE, "AnimationRootNode", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL), "_add_blend_point", "get_blend_point_node", i);
+ ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "blend_point_" + itos(i) + "/pos", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL), "set_blend_point_position", "get_blend_point_position", i);
}
- ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "min_space", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR), "set_min_space", "get_min_space");
- ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "max_space", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR), "set_max_space", "get_max_space");
- ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "snap", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR), "set_snap", "get_snap");
- ADD_PROPERTY(PropertyInfo(Variant::STRING, "value_label", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR), "set_value_label", "get_value_label");
+ ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "min_space", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), "set_min_space", "get_min_space");
+ ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "max_space", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), "set_max_space", "get_max_space");
+ ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "snap", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), "set_snap", "get_snap");
+ ADD_PROPERTY(PropertyInfo(Variant::STRING, "value_label", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), "set_value_label", "get_value_label");
}
void AnimationNodeBlendSpace1D::get_child_nodes(List<ChildNode> *r_child_nodes) {
diff --git a/scene/animation/animation_blend_space_2d.cpp b/scene/animation/animation_blend_space_2d.cpp
index 145e7c605b..8b5203961f 100644
--- a/scene/animation/animation_blend_space_2d.cpp
+++ b/scene/animation/animation_blend_space_2d.cpp
@@ -30,6 +30,7 @@
#include "animation_blend_space_2d.h"
+#include "animation_blend_tree.h"
#include "core/math/geometry_2d.h"
void AnimationNodeBlendSpace2D::get_parameter_list(List<PropertyInfo> *r_list) const {
@@ -133,7 +134,7 @@ void AnimationNodeBlendSpace2D::remove_blend_point(int p_point) {
}
}
if (erase) {
- triangles.remove(i);
+ triangles.remove_at(i);
i--;
}
@@ -223,7 +224,7 @@ int AnimationNodeBlendSpace2D::get_triangle_point(int p_triangle, int p_point) {
void AnimationNodeBlendSpace2D::remove_triangle(int p_triangle) {
ERR_FAIL_INDEX(p_triangle, triangles.size());
- triangles.remove(p_triangle);
+ triangles.remove_at(p_triangle);
}
int AnimationNodeBlendSpace2D::get_triangle_count() const {
@@ -531,6 +532,12 @@ double AnimationNodeBlendSpace2D::process(double p_time, bool p_seek) {
if (new_closest != closest && new_closest != -1) {
float from = 0.0;
if (blend_mode == BLEND_MODE_DISCRETE_CARRY && closest != -1) {
+ //for ping-pong loop
+ Ref<AnimationNodeAnimation> na_c = static_cast<Ref<AnimationNodeAnimation>>(blend_points[closest].node);
+ Ref<AnimationNodeAnimation> na_n = static_cast<Ref<AnimationNodeAnimation>>(blend_points[new_closest].node);
+ if (!na_c.is_null() && !na_n.is_null()) {
+ na_n->set_backward(na_c->is_backward());
+ }
//see how much animation remains
from = length_internal - blend_node(blend_points[closest].name, blend_points[closest].node, p_time, false, 0.0, FILTER_IGNORE, false);
}
@@ -639,21 +646,21 @@ void AnimationNodeBlendSpace2D::_bind_methods() {
ClassDB::bind_method(D_METHOD("_update_triangles"), &AnimationNodeBlendSpace2D::_update_triangles);
- ADD_PROPERTY(PropertyInfo(Variant::BOOL, "auto_triangles", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR), "set_auto_triangles", "get_auto_triangles");
+ ADD_PROPERTY(PropertyInfo(Variant::BOOL, "auto_triangles", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), "set_auto_triangles", "get_auto_triangles");
for (int i = 0; i < MAX_BLEND_POINTS; i++) {
- ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "blend_point_" + itos(i) + "/node", PROPERTY_HINT_RESOURCE_TYPE, "AnimationRootNode", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL), "_add_blend_point", "get_blend_point_node", i);
- ADD_PROPERTYI(PropertyInfo(Variant::VECTOR2, "blend_point_" + itos(i) + "/pos", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL), "set_blend_point_position", "get_blend_point_position", i);
+ ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "blend_point_" + itos(i) + "/node", PROPERTY_HINT_RESOURCE_TYPE, "AnimationRootNode", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL), "_add_blend_point", "get_blend_point_node", i);
+ ADD_PROPERTYI(PropertyInfo(Variant::VECTOR2, "blend_point_" + itos(i) + "/pos", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL), "set_blend_point_position", "get_blend_point_position", i);
}
- ADD_PROPERTY(PropertyInfo(Variant::PACKED_INT32_ARRAY, "triangles", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL), "_set_triangles", "_get_triangles");
+ ADD_PROPERTY(PropertyInfo(Variant::PACKED_INT32_ARRAY, "triangles", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL), "_set_triangles", "_get_triangles");
- ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "min_space", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR), "set_min_space", "get_min_space");
- ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "max_space", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR), "set_max_space", "get_max_space");
- ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "snap", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR), "set_snap", "get_snap");
- ADD_PROPERTY(PropertyInfo(Variant::STRING, "x_label", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR), "set_x_label", "get_x_label");
- ADD_PROPERTY(PropertyInfo(Variant::STRING, "y_label", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR), "set_y_label", "get_y_label");
- ADD_PROPERTY(PropertyInfo(Variant::INT, "blend_mode", PROPERTY_HINT_ENUM, "Interpolated,Discrete,Carry", PROPERTY_USAGE_NOEDITOR), "set_blend_mode", "get_blend_mode");
+ ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "min_space", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), "set_min_space", "get_min_space");
+ ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "max_space", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), "set_max_space", "get_max_space");
+ ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "snap", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), "set_snap", "get_snap");
+ ADD_PROPERTY(PropertyInfo(Variant::STRING, "x_label", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), "set_x_label", "get_x_label");
+ ADD_PROPERTY(PropertyInfo(Variant::STRING, "y_label", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), "set_y_label", "get_y_label");
+ ADD_PROPERTY(PropertyInfo(Variant::INT, "blend_mode", PROPERTY_HINT_ENUM, "Interpolated,Discrete,Carry", PROPERTY_USAGE_NO_EDITOR), "set_blend_mode", "get_blend_mode");
ADD_SIGNAL(MethodInfo("triangles_updated"));
BIND_ENUM_CONSTANT(BLEND_MODE_INTERPOLATED);
diff --git a/scene/animation/animation_blend_tree.cpp b/scene/animation/animation_blend_tree.cpp
index 10a66386eb..d6c5d0b51c 100644
--- a/scene/animation/animation_blend_tree.cpp
+++ b/scene/animation/animation_blend_tree.cpp
@@ -30,6 +30,7 @@
#include "animation_blend_tree.h"
+#include "scene/resources/animation.h"
#include "scene/scene_string_names.h"
void AnimationNodeAnimation::set_animation(const StringName &p_name) {
@@ -83,30 +84,55 @@ double AnimationNodeAnimation::process(double p_time, bool p_seek) {
}
Ref<Animation> anim = ap->get_animation(animation);
-
- double step;
+ double anim_size = (double)anim->get_length();
+ double step = 0.0;
+ double prev_time = time;
+ int pingponged = 0;
+ bool current_backward = signbit(p_time);
if (p_seek) {
+ step = p_time - time;
time = p_time;
- step = 0;
} else {
- time = MAX(0, time + p_time);
- step = p_time;
+ p_time *= backward ? -1.0 : 1.0;
+ if (!(time == anim_size && !current_backward) && !(time == 0 && current_backward)) {
+ time = time + p_time;
+ step = p_time;
+ }
}
- double anim_size = anim->get_length();
-
- if (anim->has_loop()) {
+ if (anim->get_loop_mode() == Animation::LoopMode::LOOP_PINGPONG) {
if (anim_size) {
- time = Math::fposmod(time, anim_size);
+ if ((int)Math::floor(abs(time - prev_time) / anim_size) % 2 == 0) {
+ if (prev_time > 0 && time <= 0) {
+ backward = !backward;
+ pingponged = -1;
+ }
+ if (prev_time < anim_size && time >= anim_size) {
+ backward = !backward;
+ pingponged = 1;
+ }
+ }
+ time = Math::pingpong(time, anim_size);
}
-
- } else if (time > anim_size) {
- time = anim_size;
+ } else {
+ if (anim->get_loop_mode() == Animation::LoopMode::LOOP_LINEAR) {
+ if (anim_size) {
+ time = Math::fposmod(time, anim_size);
+ }
+ } else if (time < 0) {
+ time = 0;
+ } else if (time > anim_size) {
+ time = anim_size;
+ }
+ backward = false;
}
- blend_animation(animation, time, step, p_seek, 1.0);
-
+ if (play_mode == PLAY_MODE_FORWARD) {
+ blend_animation(animation, time, step, p_seek, 1.0, pingponged);
+ } else {
+ blend_animation(animation, anim_size - time, -step, p_seek, 1.0, pingponged);
+ }
set_parameter(this->time, time);
return anim_size - time;
@@ -116,11 +142,34 @@ String AnimationNodeAnimation::get_caption() const {
return "Animation";
}
+void AnimationNodeAnimation::set_play_mode(PlayMode p_play_mode) {
+ play_mode = p_play_mode;
+}
+
+AnimationNodeAnimation::PlayMode AnimationNodeAnimation::get_play_mode() const {
+ return play_mode;
+}
+
+void AnimationNodeAnimation::set_backward(bool p_backward) {
+ backward = p_backward;
+}
+
+bool AnimationNodeAnimation::is_backward() const {
+ return backward;
+}
+
void AnimationNodeAnimation::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_animation", "name"), &AnimationNodeAnimation::set_animation);
ClassDB::bind_method(D_METHOD("get_animation"), &AnimationNodeAnimation::get_animation);
+ ClassDB::bind_method(D_METHOD("set_play_mode", "mode"), &AnimationNodeAnimation::set_play_mode);
+ ClassDB::bind_method(D_METHOD("get_play_mode"), &AnimationNodeAnimation::get_play_mode);
+
ADD_PROPERTY(PropertyInfo(Variant::STRING_NAME, "animation"), "set_animation", "get_animation");
+ ADD_PROPERTY(PropertyInfo(Variant::INT, "play_mode", PROPERTY_HINT_ENUM, "Forward,Backward"), "set_play_mode", "get_play_mode");
+
+ BIND_ENUM_CONSTANT(PLAY_MODE_FORWARD);
+ BIND_ENUM_CONSTANT(PLAY_MODE_BACKWARD);
}
AnimationNodeAnimation::AnimationNodeAnimation() {
@@ -533,7 +582,7 @@ AnimationNodeBlend3::AnimationNodeBlend3() {
/////////////////////////////////
void AnimationNodeTimeScale::get_parameter_list(List<PropertyInfo> *r_list) const {
- r_list->push_back(PropertyInfo(Variant::FLOAT, scale, PROPERTY_HINT_RANGE, "0,32,0.01,or_greater"));
+ r_list->push_back(PropertyInfo(Variant::FLOAT, scale, PROPERTY_HINT_RANGE, "-32,32,0.01,or_lesser,or_greater"));
}
Variant AnimationNodeTimeScale::get_parameter_default_value(const StringName &p_parameter) const {
@@ -1112,12 +1161,12 @@ void AnimationNodeBlendTree::_get_property_list(List<PropertyInfo> *p_list) cons
for (const StringName &E : names) {
String name = E;
if (name != "output") {
- p_list->push_back(PropertyInfo(Variant::OBJECT, "nodes/" + name + "/node", PROPERTY_HINT_RESOURCE_TYPE, "AnimationNode", PROPERTY_USAGE_NOEDITOR));
+ p_list->push_back(PropertyInfo(Variant::OBJECT, "nodes/" + name + "/node", PROPERTY_HINT_RESOURCE_TYPE, "AnimationNode", PROPERTY_USAGE_NO_EDITOR));
}
- p_list->push_back(PropertyInfo(Variant::VECTOR2, "nodes/" + name + "/position", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR));
+ p_list->push_back(PropertyInfo(Variant::VECTOR2, "nodes/" + name + "/position", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR));
}
- p_list->push_back(PropertyInfo(Variant::ARRAY, "node_connections", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR));
+ p_list->push_back(PropertyInfo(Variant::ARRAY, "node_connections", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR));
}
void AnimationNodeBlendTree::reset_state() {
@@ -1152,7 +1201,7 @@ void AnimationNodeBlendTree::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_graph_offset", "offset"), &AnimationNodeBlendTree::set_graph_offset);
ClassDB::bind_method(D_METHOD("get_graph_offset"), &AnimationNodeBlendTree::get_graph_offset);
- ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "graph_offset", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR), "set_graph_offset", "get_graph_offset");
+ ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "graph_offset", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), "set_graph_offset", "get_graph_offset");
BIND_CONSTANT(CONNECTION_OK);
BIND_CONSTANT(CONNECTION_ERROR_NO_INPUT);
diff --git a/scene/animation/animation_blend_tree.h b/scene/animation/animation_blend_tree.h
index 258443a999..e55dfb58ed 100644
--- a/scene/animation/animation_blend_tree.h
+++ b/scene/animation/animation_blend_tree.h
@@ -42,12 +42,12 @@ class AnimationNodeAnimation : public AnimationRootNode {
uint64_t last_version = 0;
bool skip = false;
-protected:
- void _validate_property(PropertyInfo &property) const override;
-
- static void _bind_methods();
-
public:
+ enum PlayMode {
+ PLAY_MODE_FORWARD,
+ PLAY_MODE_BACKWARD
+ };
+
void get_parameter_list(List<PropertyInfo> *r_list) const override;
static Vector<String> (*get_editable_animation_list)();
@@ -58,9 +58,25 @@ public:
void set_animation(const StringName &p_name);
StringName get_animation() const;
+ void set_play_mode(PlayMode p_play_mode);
+ PlayMode get_play_mode() const;
+
+ void set_backward(bool p_backward);
+ bool is_backward() const;
+
AnimationNodeAnimation();
+
+protected:
+ void _validate_property(PropertyInfo &property) const override;
+ static void _bind_methods();
+
+private:
+ PlayMode play_mode = PLAY_MODE_FORWARD;
+ bool backward = false;
};
+VARIANT_ENUM_CAST(AnimationNodeAnimation::PlayMode)
+
class AnimationNodeOneShot : public AnimationNode {
GDCLASS(AnimationNodeOneShot, AnimationNode);
diff --git a/scene/animation/animation_node_state_machine.cpp b/scene/animation/animation_node_state_machine.cpp
index 81ecb50ea0..c8fa8bf395 100644
--- a/scene/animation/animation_node_state_machine.cpp
+++ b/scene/animation/animation_node_state_machine.cpp
@@ -464,7 +464,7 @@ double AnimationNodeStateMachinePlayback::process(AnimationNodeStateMachine *p_s
}
if (path.size()) { //if it came from path, remove path
- path.remove(0);
+ path.remove_at(0);
}
current = next;
if (switch_mode == AnimationNodeStateMachineTransition::SWITCH_MODE_SYNC) {
@@ -624,7 +624,7 @@ void AnimationNodeStateMachine::remove_node(const StringName &p_name) {
for (int i = 0; i < transitions.size(); i++) {
if (transitions[i].from == p_name || transitions[i].to == p_name) {
transitions.write[i].transition->disconnect("advance_condition_changed", callable_mp(this, &AnimationNodeStateMachine::_tree_changed));
- transitions.remove(i);
+ transitions.remove_at(i);
i--;
}
}
@@ -751,7 +751,7 @@ void AnimationNodeStateMachine::remove_transition(const StringName &p_from, cons
for (int i = 0; i < transitions.size(); i++) {
if (transitions[i].from == p_from && transitions[i].to == p_to) {
transitions.write[i].transition->disconnect("advance_condition_changed", callable_mp(this, &AnimationNodeStateMachine::_tree_changed));
- transitions.remove(i);
+ transitions.remove_at(i);
return;
}
}
@@ -764,7 +764,7 @@ void AnimationNodeStateMachine::remove_transition(const StringName &p_from, cons
void AnimationNodeStateMachine::remove_transition_by_index(int p_transition) {
ERR_FAIL_INDEX(p_transition, transitions.size());
transitions.write[p_transition].transition->disconnect("advance_condition_changed", callable_mp(this, &AnimationNodeStateMachine::_tree_changed));
- transitions.remove(p_transition);
+ transitions.remove_at(p_transition);
/*if (playing) {
path.clear();
}*/
@@ -909,14 +909,14 @@ void AnimationNodeStateMachine::_get_property_list(List<PropertyInfo> *p_list) c
names.sort_custom<StringName::AlphCompare>();
for (const StringName &name : names) {
- p_list->push_back(PropertyInfo(Variant::OBJECT, "states/" + name + "/node", PROPERTY_HINT_RESOURCE_TYPE, "AnimationNode", PROPERTY_USAGE_NOEDITOR));
- p_list->push_back(PropertyInfo(Variant::VECTOR2, "states/" + name + "/position", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR));
+ p_list->push_back(PropertyInfo(Variant::OBJECT, "states/" + name + "/node", PROPERTY_HINT_RESOURCE_TYPE, "AnimationNode", PROPERTY_USAGE_NO_EDITOR));
+ p_list->push_back(PropertyInfo(Variant::VECTOR2, "states/" + name + "/position", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR));
}
- p_list->push_back(PropertyInfo(Variant::ARRAY, "transitions", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR));
- p_list->push_back(PropertyInfo(Variant::STRING_NAME, "start_node", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR));
- p_list->push_back(PropertyInfo(Variant::STRING_NAME, "end_node", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR));
- p_list->push_back(PropertyInfo(Variant::VECTOR2, "graph_offset", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR));
+ p_list->push_back(PropertyInfo(Variant::ARRAY, "transitions", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR));
+ p_list->push_back(PropertyInfo(Variant::STRING_NAME, "start_node", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR));
+ p_list->push_back(PropertyInfo(Variant::STRING_NAME, "end_node", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR));
+ p_list->push_back(PropertyInfo(Variant::VECTOR2, "graph_offset", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR));
}
void AnimationNodeStateMachine::reset_state() {
diff --git a/scene/animation/animation_player.cpp b/scene/animation/animation_player.cpp
index 26caf826a7..93339711bd 100644
--- a/scene/animation/animation_player.cpp
+++ b/scene/animation/animation_player.cpp
@@ -174,9 +174,9 @@ void AnimationPlayer::_get_property_list(List<PropertyInfo> *p_list) const {
List<PropertyInfo> anim_names;
for (const KeyValue<StringName, AnimationData> &E : animation_set) {
- anim_names.push_back(PropertyInfo(Variant::OBJECT, "anims/" + String(E.key), PROPERTY_HINT_RESOURCE_TYPE, "Animation", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL | PROPERTY_USAGE_DO_NOT_SHARE_ON_DUPLICATE));
+ anim_names.push_back(PropertyInfo(Variant::OBJECT, "anims/" + String(E.key), PROPERTY_HINT_RESOURCE_TYPE, "Animation", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL | PROPERTY_USAGE_DO_NOT_SHARE_ON_DUPLICATE));
if (E.value.next != StringName()) {
- anim_names.push_back(PropertyInfo(Variant::STRING, "next/" + String(E.key), PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL));
+ anim_names.push_back(PropertyInfo(Variant::STRING, "next/" + String(E.key), PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL));
}
}
@@ -186,7 +186,7 @@ void AnimationPlayer::_get_property_list(List<PropertyInfo> *p_list) const {
p_list->push_back(E);
}
- p_list->push_back(PropertyInfo(Variant::ARRAY, "blend_times", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL));
+ p_list->push_back(PropertyInfo(Variant::ARRAY, "blend_times", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL));
}
void AnimationPlayer::advance(float p_time) {
@@ -398,12 +398,13 @@ void AnimationPlayer::_ensure_node_caches(AnimationData *p_anim, Node *p_root_ov
}
}
-void AnimationPlayer::_animation_process_animation(AnimationData *p_anim, double p_time, double p_delta, float p_interp, bool p_is_current, bool p_seeked, bool p_started) {
+void AnimationPlayer::_animation_process_animation(AnimationData *p_anim, double p_time, double p_delta, float p_interp, bool p_is_current, bool p_seeked, bool p_started, int p_pingponged) {
_ensure_node_caches(p_anim);
ERR_FAIL_COND(p_anim->node_cache.size() != p_anim->animation->get_track_count());
Animation *a = p_anim->animation.operator->();
bool can_call = is_inside_tree() && !Engine::get_singleton()->is_editor_hint();
+ bool backward = signbit(p_delta);
for (int i = 0; i < a->get_track_count(); i++) {
// If an animation changes this animation (or it animates itself)
@@ -557,8 +558,8 @@ void AnimationPlayer::_animation_process_animation(AnimationData *p_anim, double
continue; //eeh not worth it
}
- float first_key_time = a->track_get_key_time(i, 0);
- float transition = 1.0;
+ double first_key_time = a->track_get_key_time(i, 0);
+ double transition = 1.0;
int first_key = 0;
if (first_key_time == 0.0) {
@@ -566,13 +567,13 @@ void AnimationPlayer::_animation_process_animation(AnimationData *p_anim, double
if (key_count == 1) {
continue; //with one key we can't do anything
}
- transition = a->track_get_key_transition(i, 0);
+ transition = (double)a->track_get_key_transition(i, 0);
first_key_time = a->track_get_key_time(i, 1);
first_key = 1;
}
if (p_time < first_key_time) {
- float c = Math::ease(p_time / first_key_time, transition);
+ double c = Math::ease(p_time / first_key_time, transition);
Variant first_value = a->track_get_key_value(i, first_key);
Variant interp_value;
Variant::interpolate(pa->capture, first_value, c, interp_value);
@@ -614,7 +615,7 @@ void AnimationPlayer::_animation_process_animation(AnimationData *p_anim, double
} else if (p_is_current && p_delta != 0) {
List<int> indices;
- a->value_track_get_key_indices(i, p_time, p_delta, &indices);
+ a->value_track_get_key_indices(i, p_time, p_delta, &indices, p_pingponged);
for (int &F : indices) {
Variant value = a->track_get_key_value(i, F);
@@ -673,7 +674,7 @@ void AnimationPlayer::_animation_process_animation(AnimationData *p_anim, double
List<int> indices;
- a->method_track_get_key_indices(i, p_time, p_delta, &indices);
+ a->method_track_get_key_indices(i, p_time, p_delta, &indices, p_pingponged);
for (int &E : indices) {
StringName method = a->method_track_get_name(i, E);
@@ -728,7 +729,7 @@ void AnimationPlayer::_animation_process_animation(AnimationData *p_anim, double
TrackNodeCache::BezierAnim *ba = &E->get();
- float bezier = a->bezier_track_interpolate(i, p_time);
+ real_t bezier = a->bezier_track_interpolate(i, p_time);
if (ba->accum_pass != accum_pass) {
ERR_CONTINUE(cache_update_bezier_size >= NODE_CACHE_UPDATE_MAX);
cache_update_bezier[cache_update_bezier_size++] = ba;
@@ -789,7 +790,7 @@ void AnimationPlayer::_animation_process_animation(AnimationData *p_anim, double
} else {
//find stuff to play
List<int> to_play;
- a->track_get_key_indices_in_range(i, p_time, p_delta, &to_play);
+ a->track_get_key_indices_in_range(i, p_time, p_delta, &to_play, p_pingponged);
if (to_play.size()) {
int idx = to_play.back()->get();
@@ -817,12 +818,14 @@ void AnimationPlayer::_animation_process_animation(AnimationData *p_anim, double
nc->audio_start = p_time;
}
} else if (nc->audio_playing) {
- bool loop = a->has_loop();
+ bool loop = a->get_loop_mode() != Animation::LoopMode::LOOP_NONE;
bool stop = false;
- if (!loop && p_time < nc->audio_start) {
- stop = true;
+ if (!loop) {
+ if ((p_time < nc->audio_start && !backward) || (p_time > nc->audio_start && backward)) {
+ stop = true;
+ }
} else if (nc->audio_len > 0) {
float len = nc->audio_start > p_time ? (a->get_length() - nc->audio_start) + p_time : p_time - nc->audio_start;
@@ -863,12 +866,23 @@ void AnimationPlayer::_animation_process_animation(AnimationData *p_anim, double
Ref<Animation> anim = player->get_animation(anim_name);
- double at_anim_pos;
+ double at_anim_pos = 0.0;
- if (anim->has_loop()) {
- at_anim_pos = Math::fposmod(p_time - pos, (double)anim->get_length()); //seek to loop
- } else {
- at_anim_pos = MIN((double)anim->get_length(), p_time - pos); //seek to end
+ switch (anim->get_loop_mode()) {
+ case Animation::LoopMode::LOOP_NONE: {
+ at_anim_pos = MIN((double)anim->get_length(), p_time - pos); //seek to end
+ } break;
+
+ case Animation::LoopMode::LOOP_LINEAR: {
+ at_anim_pos = Math::fposmod(p_time - pos, (double)anim->get_length()); //seek to loop
+ } break;
+
+ case Animation::LoopMode::LOOP_PINGPONG: {
+ at_anim_pos = Math::pingpong(p_time - pos, (double)anim->get_length());
+ } break;
+
+ default:
+ break;
}
if (player->is_playing() || p_seeked) {
@@ -883,7 +897,7 @@ void AnimationPlayer::_animation_process_animation(AnimationData *p_anim, double
} else {
//find stuff to play
List<int> to_play;
- a->track_get_key_indices_in_range(i, p_time, p_delta, &to_play);
+ a->track_get_key_indices_in_range(i, p_time, p_delta, &to_play, p_pingponged);
if (to_play.size()) {
int idx = to_play.back()->get();
@@ -913,46 +927,73 @@ void AnimationPlayer::_animation_process_data(PlaybackData &cd, double p_delta,
double next_pos = cd.pos + delta;
real_t len = cd.from->animation->get_length();
- bool loop = cd.from->animation->has_loop();
+ int pingponged = 0;
+
+ switch (cd.from->animation->get_loop_mode()) {
+ case Animation::LoopMode::LOOP_NONE: {
+ if (next_pos < 0) {
+ next_pos = 0;
+ } else if (next_pos > len) {
+ next_pos = len;
+ }
- if (!loop) {
- if (next_pos < 0) {
- next_pos = 0;
- } else if (next_pos > len) {
- next_pos = len;
- }
+ bool backwards = signbit(delta); // Negative zero means playing backwards too
+ delta = next_pos - cd.pos; // Fix delta (after determination of backwards because negative zero is lost here)
- bool backwards = signbit(delta); // Negative zero means playing backwards too
- delta = next_pos - cd.pos; // Fix delta (after determination of backwards because negative zero is lost here)
+ if (&cd == &playback.current) {
+ if (!backwards && cd.pos <= len && next_pos == len) {
+ //playback finished
+ end_reached = true;
+ end_notify = cd.pos < len; // Notify only if not already at the end
+ }
- if (&cd == &playback.current) {
- if (!backwards && cd.pos <= len && next_pos == len) {
- //playback finished
- end_reached = true;
- end_notify = cd.pos < len; // Notify only if not already at the end
+ if (backwards && cd.pos >= 0 && next_pos == 0) {
+ //playback finished
+ end_reached = true;
+ end_notify = cd.pos > 0; // Notify only if not already at the beginning
+ }
}
+ } break;
- if (backwards && cd.pos >= 0 && next_pos == 0) {
- //playback finished
- end_reached = true;
- end_notify = cd.pos > 0; // Notify only if not already at the beginning
+ case Animation::LoopMode::LOOP_LINEAR: {
+ double looped_next_pos = Math::fposmod(next_pos, (double)len);
+ if (looped_next_pos == 0 && next_pos != 0) {
+ // Loop multiples of the length to it, rather than 0
+ // so state at time=length is previewable in the editor
+ next_pos = len;
+ } else {
+ next_pos = looped_next_pos;
}
- }
+ } break;
- } else {
- double looped_next_pos = Math::fposmod(next_pos, (double)len);
- if (looped_next_pos == 0 && next_pos != 0) {
- // Loop multiples of the length to it, rather than 0
- // so state at time=length is previewable in the editor
- next_pos = len;
- } else {
- next_pos = looped_next_pos;
- }
+ case Animation::LoopMode::LOOP_PINGPONG: {
+ if ((int)Math::floor(abs(next_pos - cd.pos) / len) % 2 == 0) {
+ if (next_pos < 0 && cd.pos >= 0) {
+ cd.speed_scale *= -1.0;
+ pingponged = -1;
+ }
+ if (next_pos > len && cd.pos <= len) {
+ cd.speed_scale *= -1.0;
+ pingponged = 1;
+ }
+ }
+ double looped_next_pos = Math::pingpong(next_pos, (double)len);
+ if (looped_next_pos == 0 && next_pos != 0) {
+ // Loop multiples of the length to it, rather than 0
+ // so state at time=length is previewable in the editor
+ next_pos = len;
+ } else {
+ next_pos = looped_next_pos;
+ }
+ } break;
+
+ default:
+ break;
}
cd.pos = next_pos;
- _animation_process_animation(cd.from, cd.pos, delta, p_blend, &cd == &playback.current, p_seeked, p_started);
+ _animation_process_animation(cd.from, cd.pos, delta, p_blend, &cd == &playback.current, p_seeked, p_started, pingponged);
}
void AnimationPlayer::_animation_process2(double p_delta, bool p_started) {
@@ -1813,7 +1854,7 @@ void AnimationPlayer::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::NODE_PATH, "root_node"), "set_root", "get_root");
ADD_PROPERTY(PropertyInfo(Variant::STRING_NAME, "current_animation", PROPERTY_HINT_ENUM, "", PROPERTY_USAGE_EDITOR | PROPERTY_USAGE_ANIMATE_AS_TRIGGER), "set_current_animation", "get_current_animation");
ADD_PROPERTY(PropertyInfo(Variant::STRING_NAME, "assigned_animation", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NONE), "set_assigned_animation", "get_assigned_animation");
- ADD_PROPERTY(PropertyInfo(Variant::STRING_NAME, "autoplay", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR), "set_autoplay", "get_autoplay");
+ ADD_PROPERTY(PropertyInfo(Variant::STRING_NAME, "autoplay", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), "set_autoplay", "get_autoplay");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "reset_on_save", PROPERTY_HINT_NONE, ""), "set_reset_on_save_enabled", "is_reset_on_save_enabled");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "current_animation_length", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NONE), "", "get_current_animation_length");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "current_animation_position", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NONE), "", "get_current_animation_position");
diff --git a/scene/animation/animation_player.h b/scene/animation/animation_player.h
index d9d88b5510..ea04918988 100644
--- a/scene/animation/animation_player.h
+++ b/scene/animation/animation_player.h
@@ -231,7 +231,7 @@ private:
NodePath root;
- void _animation_process_animation(AnimationData *p_anim, double p_time, double p_delta, float p_interp, bool p_is_current = true, bool p_seeked = false, bool p_started = false);
+ void _animation_process_animation(AnimationData *p_anim, double p_time, double p_delta, float p_interp, bool p_is_current = true, bool p_seeked = false, bool p_started = false, int p_pingponged = 0);
void _ensure_node_caches(AnimationData *p_anim, Node *p_root_override = nullptr);
void _animation_process_data(PlaybackData &cd, double p_delta, float p_blend, bool p_seeked, bool p_started);
diff --git a/scene/animation/animation_tree.cpp b/scene/animation/animation_tree.cpp
index ccb5fa9472..57c615a6ab 100644
--- a/scene/animation/animation_tree.cpp
+++ b/scene/animation/animation_tree.cpp
@@ -32,6 +32,7 @@
#include "animation_blend_tree.h"
#include "core/config/engine.h"
+#include "scene/resources/animation.h"
#include "scene/scene_string_names.h"
#include "servers/audio/audio_stream.h"
@@ -87,7 +88,7 @@ void AnimationNode::get_child_nodes(List<ChildNode> *r_child_nodes) {
}
}
-void AnimationNode::blend_animation(const StringName &p_animation, real_t p_time, real_t p_delta, bool p_seeked, real_t p_blend) {
+void AnimationNode::blend_animation(const StringName &p_animation, real_t p_time, real_t p_delta, bool p_seeked, real_t p_blend, int p_pingponged) {
ERR_FAIL_COND(!state);
ERR_FAIL_COND(!state->player->has_animation(p_animation));
@@ -113,6 +114,7 @@ void AnimationNode::blend_animation(const StringName &p_animation, real_t p_time
anim_state.time = p_time;
anim_state.animation = animation;
anim_state.seeked = p_seeked;
+ anim_state.pingponged = p_pingponged;
state->animation_states.push_back(anim_state);
}
@@ -327,7 +329,7 @@ void AnimationNode::set_input_name(int p_input, const String &p_name) {
void AnimationNode::remove_input(int p_index) {
ERR_FAIL_INDEX(p_index, inputs.size());
- inputs.remove(p_index);
+ inputs.remove_at(p_index);
emit_changed();
}
@@ -418,15 +420,15 @@ void AnimationNode::_bind_methods() {
ClassDB::bind_method(D_METHOD("_set_filters", "filters"), &AnimationNode::_set_filters);
ClassDB::bind_method(D_METHOD("_get_filters"), &AnimationNode::_get_filters);
- ClassDB::bind_method(D_METHOD("blend_animation", "animation", "time", "delta", "seeked", "blend"), &AnimationNode::blend_animation);
+ ClassDB::bind_method(D_METHOD("blend_animation", "animation", "time", "delta", "seeked", "blend", "pingponged"), &AnimationNode::blend_animation, DEFVAL(0));
ClassDB::bind_method(D_METHOD("blend_node", "name", "node", "time", "seek", "blend", "filter", "optimize"), &AnimationNode::blend_node, DEFVAL(FILTER_IGNORE), DEFVAL(true));
ClassDB::bind_method(D_METHOD("blend_input", "input_index", "time", "seek", "blend", "filter", "optimize"), &AnimationNode::blend_input, DEFVAL(FILTER_IGNORE), DEFVAL(true));
ClassDB::bind_method(D_METHOD("set_parameter", "name", "value"), &AnimationNode::set_parameter);
ClassDB::bind_method(D_METHOD("get_parameter", "name"), &AnimationNode::get_parameter);
- ADD_PROPERTY(PropertyInfo(Variant::BOOL, "filter_enabled", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR), "set_filter_enabled", "is_filter_enabled");
- ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "filters", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL), "_set_filters", "_get_filters");
+ ADD_PROPERTY(PropertyInfo(Variant::BOOL, "filter_enabled", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), "set_filter_enabled", "is_filter_enabled");
+ ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "filters", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL), "_set_filters", "_get_filters");
GDVIRTUAL_BIND(_get_child_nodes);
GDVIRTUAL_BIND(_get_parameter_list);
@@ -898,6 +900,10 @@ void AnimationTree::_process_graph(real_t p_delta) {
double delta = as.delta;
real_t weight = as.blend;
bool seeked = as.seeked;
+ int pingponged = as.pingponged;
+#ifndef _3D_DISABLED
+ bool backward = signbit(delta);
+#endif // _3D_DISABLED
for (int i = 0; i < a->get_track_count(); i++) {
NodePath path = a->track_get_path(i);
@@ -939,27 +945,63 @@ void AnimationTree::_process_graph(real_t p_delta) {
}
if (track->root_motion) {
- real_t prev_time = time - delta;
- if (prev_time < 0) {
- if (!a->has_loop()) {
- prev_time = 0;
- } else {
- prev_time = a->get_length() + prev_time;
+ double prev_time = time - delta;
+ if (!backward) {
+ if (prev_time < 0) {
+ switch (a->get_loop_mode()) {
+ case Animation::LOOP_NONE: {
+ prev_time = 0;
+ } break;
+ case Animation::LOOP_LINEAR: {
+ prev_time = Math::fposmod(prev_time, (double)a->get_length());
+ } break;
+ case Animation::LOOP_PINGPONG: {
+ prev_time = Math::pingpong(prev_time, (double)a->get_length());
+ } break;
+ default:
+ break;
+ }
+ }
+ } else {
+ if (prev_time > a->get_length()) {
+ switch (a->get_loop_mode()) {
+ case Animation::LOOP_NONE: {
+ prev_time = (double)a->get_length();
+ } break;
+ case Animation::LOOP_LINEAR: {
+ prev_time = Math::fposmod(prev_time, (double)a->get_length());
+ } break;
+ case Animation::LOOP_PINGPONG: {
+ prev_time = Math::pingpong(prev_time, (double)a->get_length());
+ } break;
+ default:
+ break;
+ }
}
}
Vector3 loc[2];
- if (prev_time > time) {
- Error err = a->position_track_interpolate(i, prev_time, &loc[0]);
- if (err != OK) {
- continue;
+ if (!backward) {
+ if (prev_time > time) {
+ Error err = a->position_track_interpolate(i, prev_time, &loc[0]);
+ if (err != OK) {
+ continue;
+ }
+ a->position_track_interpolate(i, (double)a->get_length(), &loc[1]);
+ t->loc += (loc[1] - loc[0]) * blend;
+ prev_time = 0;
+ }
+ } else {
+ if (prev_time < time) {
+ Error err = a->position_track_interpolate(i, prev_time, &loc[0]);
+ if (err != OK) {
+ continue;
+ }
+ a->position_track_interpolate(i, 0, &loc[1]);
+ t->loc += (loc[1] - loc[0]) * blend;
+ prev_time = 0;
}
-
- a->position_track_interpolate(i, a->get_length(), &loc[1]);
-
- t->loc += (loc[1] - loc[0]) * blend;
- prev_time = 0;
}
Error err = a->position_track_interpolate(i, prev_time, &loc[0]);
@@ -968,17 +1010,13 @@ void AnimationTree::_process_graph(real_t p_delta) {
}
a->position_track_interpolate(i, time, &loc[1]);
-
t->loc += (loc[1] - loc[0]) * blend;
-
- prev_time = 0;
+ prev_time = !backward ? 0 : (double)a->get_length();
} else {
Vector3 loc;
Error err = a->position_track_interpolate(i, time, &loc);
- //ERR_CONTINUE(err!=OK); //used for testing, should be removed
-
if (err != OK) {
continue;
}
@@ -1000,29 +1038,65 @@ void AnimationTree::_process_graph(real_t p_delta) {
}
if (track->root_motion) {
- real_t prev_time = time - delta;
- if (prev_time < 0) {
- if (!a->has_loop()) {
- prev_time = 0;
- } else {
- prev_time = a->get_length() + prev_time;
+ double prev_time = time - delta;
+ if (!backward) {
+ if (prev_time < 0) {
+ switch (a->get_loop_mode()) {
+ case Animation::LOOP_NONE: {
+ prev_time = 0;
+ } break;
+ case Animation::LOOP_LINEAR: {
+ prev_time = Math::fposmod(prev_time, (double)a->get_length());
+ } break;
+ case Animation::LOOP_PINGPONG: {
+ prev_time = Math::pingpong(prev_time, (double)a->get_length());
+ } break;
+ default:
+ break;
+ }
+ }
+ } else {
+ if (prev_time > a->get_length()) {
+ switch (a->get_loop_mode()) {
+ case Animation::LOOP_NONE: {
+ prev_time = (double)a->get_length();
+ } break;
+ case Animation::LOOP_LINEAR: {
+ prev_time = Math::fposmod(prev_time, (double)a->get_length());
+ } break;
+ case Animation::LOOP_PINGPONG: {
+ prev_time = Math::pingpong(prev_time, (double)a->get_length());
+ } break;
+ default:
+ break;
+ }
}
}
Quaternion rot[2];
- if (prev_time > time) {
- Error err = a->rotation_track_interpolate(i, prev_time, &rot[0]);
- if (err != OK) {
- continue;
+ if (!backward) {
+ if (prev_time > time) {
+ Error err = a->rotation_track_interpolate(i, prev_time, &rot[0]);
+ if (err != OK) {
+ continue;
+ }
+ a->rotation_track_interpolate(i, (double)a->get_length(), &rot[1]);
+ Quaternion q = Quaternion().slerp(rot[0].normalized().inverse() * rot[1].normalized(), blend).normalized();
+ t->rot = (t->rot * q).normalized();
+ prev_time = 0;
+ }
+ } else {
+ if (prev_time < time) {
+ Error err = a->rotation_track_interpolate(i, prev_time, &rot[0]);
+ if (err != OK) {
+ continue;
+ }
+ a->rotation_track_interpolate(i, 0, &rot[1]);
+ Quaternion q = Quaternion().slerp(rot[0].normalized().inverse() * rot[1].normalized(), blend).normalized();
+ t->rot = (t->rot * q).normalized();
+ prev_time = 0;
}
-
- a->rotation_track_interpolate(i, a->get_length(), &rot[1]);
-
- Quaternion q = Quaternion().slerp(rot[0].normalized().inverse() * rot[1].normalized(), blend).normalized();
- t->rot = (t->rot * q).normalized();
-
- prev_time = 0;
}
Error err = a->rotation_track_interpolate(i, prev_time, &rot[0]);
@@ -1031,18 +1105,14 @@ void AnimationTree::_process_graph(real_t p_delta) {
}
a->rotation_track_interpolate(i, time, &rot[1]);
-
Quaternion q = Quaternion().slerp(rot[0].normalized().inverse() * rot[1].normalized(), blend).normalized();
t->rot = (t->rot * q).normalized();
-
- prev_time = 0;
+ prev_time = !backward ? 0 : (double)a->get_length();
} else {
Quaternion rot;
Error err = a->rotation_track_interpolate(i, time, &rot);
- //ERR_CONTINUE(err!=OK); //used for testing, should be removed
-
if (err != OK) {
continue;
}
@@ -1071,28 +1141,63 @@ void AnimationTree::_process_graph(real_t p_delta) {
}
if (track->root_motion) {
- real_t prev_time = time - delta;
- if (prev_time < 0) {
- if (!a->has_loop()) {
- prev_time = 0;
- } else {
- prev_time = a->get_length() + prev_time;
+ double prev_time = time - delta;
+ if (!backward) {
+ if (prev_time < 0) {
+ switch (a->get_loop_mode()) {
+ case Animation::LOOP_NONE: {
+ prev_time = 0;
+ } break;
+ case Animation::LOOP_LINEAR: {
+ prev_time = Math::fposmod(prev_time, (double)a->get_length());
+ } break;
+ case Animation::LOOP_PINGPONG: {
+ prev_time = Math::pingpong(prev_time, (double)a->get_length());
+ } break;
+ default:
+ break;
+ }
+ }
+ } else {
+ if (prev_time > a->get_length()) {
+ switch (a->get_loop_mode()) {
+ case Animation::LOOP_NONE: {
+ prev_time = (double)a->get_length();
+ } break;
+ case Animation::LOOP_LINEAR: {
+ prev_time = Math::fposmod(prev_time, (double)a->get_length());
+ } break;
+ case Animation::LOOP_PINGPONG: {
+ prev_time = Math::pingpong(prev_time, (double)a->get_length());
+ } break;
+ default:
+ break;
+ }
}
}
Vector3 scale[2];
- if (prev_time > time) {
- Error err = a->scale_track_interpolate(i, prev_time, &scale[0]);
- if (err != OK) {
- continue;
+ if (!backward) {
+ if (prev_time > time) {
+ Error err = a->scale_track_interpolate(i, prev_time, &scale[0]);
+ if (err != OK) {
+ continue;
+ }
+ a->scale_track_interpolate(i, (double)a->get_length(), &scale[1]);
+ t->scale += (scale[1] - scale[0]) * blend;
+ prev_time = 0;
+ }
+ } else {
+ if (prev_time < time) {
+ Error err = a->scale_track_interpolate(i, prev_time, &scale[0]);
+ if (err != OK) {
+ continue;
+ }
+ a->scale_track_interpolate(i, 0, &scale[1]);
+ t->scale += (scale[1] - scale[0]) * blend;
+ prev_time = 0;
}
-
- a->scale_track_interpolate(i, a->get_length(), &scale[1]);
-
- t->scale += (scale[1] - scale[0]) * blend;
-
- prev_time = 0;
}
Error err = a->scale_track_interpolate(i, prev_time, &scale[0]);
@@ -1101,17 +1206,13 @@ void AnimationTree::_process_graph(real_t p_delta) {
}
a->scale_track_interpolate(i, time, &scale[1]);
-
t->scale += (scale[1] - scale[0]) * blend;
-
- prev_time = 0;
+ prev_time = !backward ? 0 : (double)a->get_length();
} else {
Vector3 scale;
Error err = a->scale_track_interpolate(i, time, &scale);
- //ERR_CONTINUE(err!=OK); //used for testing, should be removed
-
if (err != OK) {
continue;
}
@@ -1164,7 +1265,7 @@ void AnimationTree::_process_graph(real_t p_delta) {
} else {
List<int> indices;
- a->value_track_get_key_indices(i, time, delta, &indices);
+ a->value_track_get_key_indices(i, time, delta, &indices, pingponged);
for (int &F : indices) {
Variant value = a->track_get_key_value(i, F);
@@ -1181,7 +1282,7 @@ void AnimationTree::_process_graph(real_t p_delta) {
List<int> indices;
- a->method_track_get_key_indices(i, time, delta, &indices);
+ a->method_track_get_key_indices(i, time, delta, &indices, pingponged);
for (int &F : indices) {
StringName method = a->method_track_get_name(i, F);
@@ -1264,7 +1365,7 @@ void AnimationTree::_process_graph(real_t p_delta) {
} else {
//find stuff to play
List<int> to_play;
- a->track_get_key_indices_in_range(i, time, delta, &to_play);
+ a->track_get_key_indices_in_range(i, time, delta, &to_play, pingponged);
if (to_play.size()) {
int idx = to_play.back()->get();
@@ -1292,12 +1393,20 @@ void AnimationTree::_process_graph(real_t p_delta) {
t->start = time;
}
} else if (t->playing) {
- bool loop = a->has_loop();
+ bool loop = a->get_loop_mode() != Animation::LoopMode::LOOP_NONE;
bool stop = false;
- if (!loop && time < t->start) {
- stop = true;
+ if (!loop) {
+ if (delta > 0) {
+ if (time < t->start) {
+ stop = true;
+ }
+ } else if (delta < 0) {
+ if (time > t->start) {
+ stop = true;
+ }
+ }
} else if (t->len > 0) {
real_t len = t->start > time ? (a->get_length() - t->start) + time : time - t->start;
@@ -1331,7 +1440,7 @@ void AnimationTree::_process_graph(real_t p_delta) {
continue;
}
- if (delta == 0 || seeked) {
+ if (seeked) {
//seek
int idx = a->track_find_key(i, time);
if (idx < 0) {
@@ -1347,12 +1456,20 @@ void AnimationTree::_process_graph(real_t p_delta) {
Ref<Animation> anim = player2->get_animation(anim_name);
- real_t at_anim_pos;
-
- if (anim->has_loop()) {
- at_anim_pos = Math::fposmod(time - pos, (double)anim->get_length()); //seek to loop
- } else {
- at_anim_pos = MAX(anim->get_length(), time - pos); //seek to end
+ real_t at_anim_pos = 0.0;
+
+ switch (anim->get_loop_mode()) {
+ case Animation::LoopMode::LOOP_NONE: {
+ at_anim_pos = MAX((double)anim->get_length(), time - pos); //seek to end
+ } break;
+ case Animation::LoopMode::LOOP_LINEAR: {
+ at_anim_pos = Math::fposmod(time - pos, (double)anim->get_length()); //seek to loop
+ } break;
+ case Animation::LoopMode::LOOP_PINGPONG: {
+ at_anim_pos = Math::pingpong(time - pos, (double)a->get_length());
+ } break;
+ default:
+ break;
}
if (player2->is_playing() || seeked) {
@@ -1367,7 +1484,7 @@ void AnimationTree::_process_graph(real_t p_delta) {
} else {
//find stuff to play
List<int> to_play;
- a->track_get_key_indices_in_range(i, time, delta, &to_play);
+ a->track_get_key_indices_in_range(i, time, delta, &to_play, pingponged);
if (to_play.size()) {
int idx = to_play.back()->get();
diff --git a/scene/animation/animation_tree.h b/scene/animation/animation_tree.h
index 5abea39d20..6fc051fa41 100644
--- a/scene/animation/animation_tree.h
+++ b/scene/animation/animation_tree.h
@@ -66,6 +66,7 @@ public:
const Vector<real_t> *track_blends = nullptr;
real_t blend = 0.0;
bool seeked = false;
+ int pingponged = 0;
};
struct State {
@@ -98,9 +99,10 @@ public:
real_t _blend_node(const StringName &p_subpath, const Vector<StringName> &p_connections, AnimationNode *p_new_parent, Ref<AnimationNode> p_node, real_t p_time, bool p_seek, real_t p_blend, FilterAction p_filter = FILTER_IGNORE, bool p_optimize = true, real_t *r_max = nullptr);
protected:
- void blend_animation(const StringName &p_animation, real_t p_time, real_t p_delta, bool p_seeked, real_t p_blend);
+ void blend_animation(const StringName &p_animation, real_t p_time, real_t p_delta, bool p_seeked, real_t p_blend, int p_pingponged = 0);
real_t blend_node(const StringName &p_sub_path, Ref<AnimationNode> p_node, real_t p_time, bool p_seek, real_t p_blend, FilterAction p_filter = FILTER_IGNORE, bool p_optimize = true);
real_t blend_input(int p_input, real_t p_time, bool p_seek, real_t p_blend, FilterAction p_filter = FILTER_IGNORE, bool p_optimize = true);
+
void make_invalid(const String &p_reason);
static void _bind_methods();
diff --git a/scene/animation/tween.cpp b/scene/animation/tween.cpp
index 47e290beb3..da933ae02d 100644
--- a/scene/animation/tween.cpp
+++ b/scene/animation/tween.cpp
@@ -626,7 +626,7 @@ void Tween::_bind_methods() {
ClassDB::bind_method(D_METHOD("parallel"), &Tween::parallel);
ClassDB::bind_method(D_METHOD("chain"), &Tween::chain);
- ClassDB::bind_method(D_METHOD("interpolate_value", "trans_type", "ease_type", "elapsed_time", "initial_value", "delta_value", "duration"), &Tween::interpolate_variant);
+ ClassDB::bind_method(D_METHOD("interpolate_value", "initial_value", "delta_value", "elapsed_time", "duration", "trans_type", "ease_type"), &Tween::interpolate_variant);
ADD_SIGNAL(MethodInfo("step_finished", PropertyInfo(Variant::INT, "idx")));
ADD_SIGNAL(MethodInfo("loop_finished", PropertyInfo(Variant::INT, "loop_count")));
diff --git a/scene/audio/audio_stream_player.cpp b/scene/audio/audio_stream_player.cpp
index 43c4ce4c82..3da4f23a08 100644
--- a/scene/audio/audio_stream_player.cpp
+++ b/scene/audio/audio_stream_player.cpp
@@ -143,7 +143,7 @@ void AudioStreamPlayer::play(float p_from_pos) {
set_process_internal(true);
while (stream_playbacks.size() > max_polyphony) {
AudioServer::get_singleton()->stop_playback_stream(stream_playbacks[0]);
- stream_playbacks.remove(0);
+ stream_playbacks.remove_at(0);
}
}
diff --git a/scene/gui/base_button.cpp b/scene/gui/base_button.cpp
index bef1011364..9f712ed478 100644
--- a/scene/gui/base_button.cpp
+++ b/scene/gui/base_button.cpp
@@ -62,7 +62,7 @@ void BaseButton::gui_input(const Ref<InputEvent> &p_event) {
Ref<InputEventMouseButton> mouse_button = p_event;
bool ui_accept = p_event->is_action("ui_accept") && !p_event->is_echo();
- bool button_masked = mouse_button.is_valid() && ((1 << (mouse_button->get_button_index() - 1)) & button_mask) != 0;
+ bool button_masked = mouse_button.is_valid() && (mouse_button_to_mask(mouse_button->get_button_index()) & button_mask) != MouseButton::NONE;
if (button_masked || ui_accept) {
on_action_event(p_event);
return;
@@ -313,11 +313,11 @@ BaseButton::ActionMode BaseButton::get_action_mode() const {
return action_mode;
}
-void BaseButton::set_button_mask(int p_mask) {
+void BaseButton::set_button_mask(MouseButton p_mask) {
button_mask = p_mask;
}
-int BaseButton::get_button_mask() const {
+MouseButton BaseButton::get_button_mask() const {
return button_mask;
}
diff --git a/scene/gui/base_button.h b/scene/gui/base_button.h
index cd6e78464f..3ea59c3ff9 100644
--- a/scene/gui/base_button.h
+++ b/scene/gui/base_button.h
@@ -45,7 +45,7 @@ public:
};
private:
- int button_mask = MOUSE_BUTTON_MASK_LEFT;
+ MouseButton button_mask = MouseButton::MASK_LEFT;
bool toggle_mode = false;
bool shortcut_in_tooltip = true;
bool keep_pressed_outside = false;
@@ -118,8 +118,8 @@ public:
void set_keep_pressed_outside(bool p_on);
bool is_keep_pressed_outside() const;
- void set_button_mask(int p_mask);
- int get_button_mask() const;
+ void set_button_mask(MouseButton p_mask);
+ MouseButton get_button_mask() const;
void set_shortcut(const Ref<Shortcut> &p_shortcut);
Ref<Shortcut> get_shortcut() const;
diff --git a/scene/gui/box_container.cpp b/scene/gui/box_container.cpp
index cf2df4e1a2..cb9f13e970 100644
--- a/scene/gui/box_container.cpp
+++ b/scene/gui/box_container.cpp
@@ -354,7 +354,7 @@ MarginContainer *VBoxContainer::add_margin_child(const String &p_label, Control
add_child(l, false, INTERNAL_MODE_FRONT);
MarginContainer *mc = memnew(MarginContainer);
mc->add_theme_constant_override("margin_left", 0);
- mc->add_child(p_control);
+ mc->add_child(p_control, true);
add_child(mc, false, INTERNAL_MODE_FRONT);
if (p_expand) {
mc->set_v_size_flags(SIZE_EXPAND_FILL);
diff --git a/scene/gui/code_edit.cpp b/scene/gui/code_edit.cpp
index 046d256867..a8c5966569 100644
--- a/scene/gui/code_edit.cpp
+++ b/scene/gui/code_edit.cpp
@@ -263,19 +263,19 @@ void CodeEdit::gui_input(const Ref<InputEvent> &p_gui_input) {
}
switch (mb->get_button_index()) {
- case MOUSE_BUTTON_WHEEL_UP: {
+ case MouseButton::WHEEL_UP: {
if (code_completion_current_selected > 0) {
code_completion_current_selected--;
update();
}
} break;
- case MOUSE_BUTTON_WHEEL_DOWN: {
+ case MouseButton::WHEEL_DOWN: {
if (code_completion_current_selected < code_completion_options.size() - 1) {
code_completion_current_selected++;
update();
}
} break;
- case MOUSE_BUTTON_LEFT: {
+ case MouseButton::LEFT: {
code_completion_current_selected = CLAMP(code_completion_line_ofs + (mb->get_position().y - code_completion_rect.position.y) / get_line_height(), 0, code_completion_options.size() - 1);
if (mb->is_double_click()) {
confirm_code_completion();
@@ -296,11 +296,11 @@ void CodeEdit::gui_input(const Ref<InputEvent> &p_gui_input) {
mpos.x = get_size().x - mpos.x;
}
- Point2i pos = get_line_column_at_pos(mpos);
+ Point2i pos = get_line_column_at_pos(mpos, false);
int line = pos.y;
int col = pos.x;
- if (mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (line != -1 && mb->get_button_index() == MouseButton::LEFT) {
if (is_line_folded(line)) {
int wrap_index = get_line_wrap_index_at_column(line, col);
if (wrap_index == get_line_wrap_count(line)) {
@@ -314,18 +314,20 @@ void CodeEdit::gui_input(const Ref<InputEvent> &p_gui_input) {
}
}
} else {
- if (mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (mb->get_button_index() == MouseButton::LEFT) {
if (mb->is_command_pressed() && symbol_lookup_word != String()) {
Vector2i mpos = mb->get_position();
if (is_layout_rtl()) {
mpos.x = get_size().x - mpos.x;
}
- Point2i pos = get_line_column_at_pos(mpos);
+ Point2i pos = get_line_column_at_pos(mpos, false);
int line = pos.y;
int col = pos.x;
- emit_signal(SNAME("symbol_lookup"), symbol_lookup_word, line, col);
+ if (line != -1) {
+ emit_signal(SNAME("symbol_lookup"), symbol_lookup_word, line, col);
+ }
return;
}
}
@@ -340,7 +342,7 @@ void CodeEdit::gui_input(const Ref<InputEvent> &p_gui_input) {
}
if (symbol_lookup_on_click_enabled) {
- if (mm->is_command_pressed() && mm->get_button_mask() == 0 && !is_dragging_cursor()) {
+ if (mm->is_command_pressed() && mm->get_button_mask() == MouseButton::NONE && !is_dragging_cursor()) {
symbol_lookup_new_word = get_word_at_pos(mpos);
if (symbol_lookup_new_word != symbol_lookup_word) {
emit_signal(SNAME("symbol_validate"), symbol_lookup_new_word);
@@ -360,9 +362,9 @@ void CodeEdit::gui_input(const Ref<InputEvent> &p_gui_input) {
/* Ctrl + Hover symbols */
#ifdef OSX_ENABLED
- if (k->get_keycode() == KEY_META) {
+ if (k->get_keycode() == Key::META) {
#else
- if (k->get_keycode() == KEY_CTRL) {
+ if (k->get_keycode() == Key::CTRL) {
#endif
if (symbol_lookup_on_click_enabled) {
if (k->is_pressed() && !is_dragging_cursor()) {
@@ -378,7 +380,7 @@ void CodeEdit::gui_input(const Ref<InputEvent> &p_gui_input) {
}
/* If a modifier has been pressed, and nothing else, return. */
- if (!k->is_pressed() || k->get_keycode() == KEY_CTRL || k->get_keycode() == KEY_ALT || k->get_keycode() == KEY_SHIFT || k->get_keycode() == KEY_META) {
+ if (!k->is_pressed() || k->get_keycode() == Key::CTRL || k->get_keycode() == Key::ALT || k->get_keycode() == Key::SHIFT || k->get_keycode() == Key::META) {
return;
}
@@ -536,11 +538,11 @@ Control::CursorShape CodeEdit::get_cursor_shape(const Point2 &p_pos) const {
return CURSOR_ARROW;
}
- Point2i pos = get_line_column_at_pos(p_pos);
+ Point2i pos = get_line_column_at_pos(p_pos, false);
int line = pos.y;
int col = pos.x;
- if (is_line_folded(line)) {
+ if (line != -1 && is_line_folded(line)) {
int wrap_index = get_line_wrap_index_at_column(line, col);
if (wrap_index == get_line_wrap_count(line)) {
int eol_icon_width = folded_eol_icon->get_width();
@@ -1417,40 +1419,23 @@ void CodeEdit::fold_line(int p_line) {
/* End line is the same therefore we have a block of single line delimiters. */
if (end_line == p_line) {
for (int i = p_line + 1; i <= line_count; i++) {
- if (i == line_count) {
- end_line = line_count;
- break;
- }
-
if ((in_string != -1 && is_in_string(i) == -1) || (in_comment != -1 && is_in_comment(i) == -1)) {
- end_line = i - 1;
break;
}
+ end_line = i;
}
}
} else {
int start_indent = get_indent_level(p_line);
for (int i = p_line + 1; i <= line_count; i++) {
- if (get_line(p_line).strip_edges().size() == 0 || is_in_string(i) != -1 || is_in_comment(i) != -1) {
- end_line = i;
+ if (get_line(i).strip_edges().size() == 0) {
continue;
}
-
- if (i == line_count) {
- /* Do not fold empty last line of script if any */
+ if (get_indent_level(i) > start_indent) {
end_line = i;
- if (get_line(i).strip_edges().size() == 0) {
- end_line--;
- }
- break;
+ continue;
}
-
- if ((get_indent_level(i) <= start_indent && get_line(i).strip_edges().size() != 0)) {
- /* Keep an empty line unfolded if any */
- end_line = i - 1;
- if (get_line(i - 1).strip_edges().size() == 0 && i - 2 > p_line) {
- end_line = i - 2;
- }
+ if (is_in_string(i) == -1 && is_in_comment(i) == -1) {
break;
}
}
@@ -2016,10 +2001,14 @@ bool CodeEdit::is_symbol_lookup_on_click_enabled() const {
String CodeEdit::get_text_for_symbol_lookup() {
Point2i mp = get_local_mouse_pos();
- Point2i pos = get_line_column_at_pos(mp);
+ Point2i pos = get_line_column_at_pos(mp, false);
int line = pos.y;
int col = pos.x;
+ if (line == -1) {
+ return String();
+ }
+
StringBuilder lookup_text;
const int text_size = get_line_count();
for (int i = 0; i < text_size; i++) {
@@ -2389,7 +2378,7 @@ void CodeEdit::_update_delimiter_cache(int p_from_line, int p_to_line) {
if (start_line != end_line) {
if (p_to_line < p_from_line) {
for (int i = end_line; i > start_line; i--) {
- delimiter_cache.remove(i);
+ delimiter_cache.remove_at(i);
}
} else {
for (int i = start_line; i < end_line; i++) {
@@ -2626,7 +2615,7 @@ void CodeEdit::_remove_delimiter(const String &p_start_key, DelimiterType p_type
break;
}
- delimiters.remove(i);
+ delimiters.remove_at(i);
if (!setting_delimiters) {
delimiter_cache.clear();
_update_delimiter_cache();
@@ -2667,7 +2656,7 @@ void CodeEdit::_set_delimiters(const TypedArray<String> &p_delimiters, Delimiter
void CodeEdit::_clear_delimiters(DelimiterType p_type) {
for (int i = delimiters.size() - 1; i >= 0; i--) {
if (delimiters[i].type == p_type) {
- delimiters.remove(i);
+ delimiters.remove_at(i);
}
}
delimiter_cache.clear();
diff --git a/scene/gui/color_picker.cpp b/scene/gui/color_picker.cpp
index 894175d559..5a378554c9 100644
--- a/scene/gui/color_picker.cpp
+++ b/scene/gui/color_picker.cpp
@@ -582,7 +582,7 @@ void ColorPicker::_update_text_value() {
void ColorPicker::_sample_input(const Ref<InputEvent> &p_event) {
const Ref<InputEventMouseButton> mb = p_event;
- if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == MouseButton::LEFT) {
const Rect2 rect_old = Rect2(Point2(), Size2(sample->get_size().width * 0.5, sample->get_size().height * 0.95));
if (rect_old.has_point(mb->get_position())) {
// Revert to the old color when left-clicking the old color sample.
@@ -827,13 +827,13 @@ void ColorPicker::_uv_input(const Ref<InputEvent> &p_event, Control *c) {
Ref<InputEventMouseButton> bev = p_event;
if (bev.is_valid()) {
- if (bev->is_pressed() && bev->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (bev->is_pressed() && bev->get_button_index() == MouseButton::LEFT) {
Vector2 center = c->get_size() / 2.0;
if (picker_type == SHAPE_VHS_CIRCLE) {
real_t dist = center.distance_to(bev->get_position());
if (dist <= center.x) {
- real_t rad = bev->get_position().angle_to_point(center);
+ real_t rad = center.angle_to_point(bev->get_position());
h = ((rad >= 0) ? rad : (Math_TAU + rad)) / Math_TAU;
s = CLAMP(dist / center.x, 0, 1);
} else {
@@ -850,7 +850,7 @@ void ColorPicker::_uv_input(const Ref<InputEvent> &p_event, Control *c) {
real_t dist = center.distance_to(bev->get_position());
if (dist >= center.x * 0.84 && dist <= center.x) {
- real_t rad = bev->get_position().angle_to_point(center);
+ real_t rad = center.angle_to_point(bev->get_position());
h = ((rad >= 0) ? rad : (Math_TAU + rad)) / Math_TAU;
spinning = true;
} else {
@@ -875,7 +875,7 @@ void ColorPicker::_uv_input(const Ref<InputEvent> &p_event, Control *c) {
if (!deferred_mode_enabled) {
emit_signal(SNAME("color_changed"), color);
}
- } else if (deferred_mode_enabled && !bev->is_pressed() && bev->get_button_index() == MOUSE_BUTTON_LEFT) {
+ } else if (deferred_mode_enabled && !bev->is_pressed() && bev->get_button_index() == MouseButton::LEFT) {
emit_signal(SNAME("color_changed"), color);
changing_color = false;
spinning = false;
@@ -895,12 +895,12 @@ void ColorPicker::_uv_input(const Ref<InputEvent> &p_event, Control *c) {
Vector2 center = c->get_size() / 2.0;
if (picker_type == SHAPE_VHS_CIRCLE) {
real_t dist = center.distance_to(mev->get_position());
- real_t rad = mev->get_position().angle_to_point(center);
+ real_t rad = center.angle_to_point(mev->get_position());
h = ((rad >= 0) ? rad : (Math_TAU + rad)) / Math_TAU;
s = CLAMP(dist / center.x, 0, 1);
} else {
if (spinning) {
- real_t rad = mev->get_position().angle_to_point(center);
+ real_t rad = center.angle_to_point(mev->get_position());
h = ((rad >= 0) ? rad : (Math_TAU + rad)) / Math_TAU;
} else {
real_t corner_x = (c == wheel_uv) ? center.x - Math_SQRT12 * c->get_size().width * 0.42 : 0;
@@ -929,7 +929,7 @@ void ColorPicker::_w_input(const Ref<InputEvent> &p_event) {
Ref<InputEventMouseButton> bev = p_event;
if (bev.is_valid()) {
- if (bev->is_pressed() && bev->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (bev->is_pressed() && bev->get_button_index() == MouseButton::LEFT) {
changing_color = true;
float y = CLAMP((float)bev->get_position().y, 0, w_edit->get_size().height);
if (picker_type == SHAPE_VHS_CIRCLE) {
@@ -946,7 +946,7 @@ void ColorPicker::_w_input(const Ref<InputEvent> &p_event) {
_update_color();
if (!deferred_mode_enabled) {
emit_signal(SNAME("color_changed"), color);
- } else if (!bev->is_pressed() && bev->get_button_index() == MOUSE_BUTTON_LEFT) {
+ } else if (!bev->is_pressed() && bev->get_button_index() == MouseButton::LEFT) {
emit_signal(SNAME("color_changed"), color);
}
}
@@ -977,11 +977,11 @@ void ColorPicker::_preset_input(const Ref<InputEvent> &p_event, const Color &p_c
Ref<InputEventMouseButton> bev = p_event;
if (bev.is_valid()) {
- if (bev->is_pressed() && bev->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (bev->is_pressed() && bev->get_button_index() == MouseButton::LEFT) {
set_pick_color(p_color);
_update_color();
emit_signal(SNAME("color_changed"), p_color);
- } else if (bev->is_pressed() && bev->get_button_index() == MOUSE_BUTTON_RIGHT && presets_enabled) {
+ } else if (bev->is_pressed() && bev->get_button_index() == MouseButton::RIGHT && presets_enabled) {
erase_preset(p_color);
emit_signal(SNAME("preset_removed"), p_color);
}
@@ -994,7 +994,7 @@ void ColorPicker::_screen_input(const Ref<InputEvent> &p_event) {
}
Ref<InputEventMouseButton> bev = p_event;
- if (bev.is_valid() && bev->get_button_index() == MOUSE_BUTTON_LEFT && !bev->is_pressed()) {
+ if (bev.is_valid() && bev->get_button_index() == MouseButton::LEFT && !bev->is_pressed()) {
emit_signal(SNAME("color_changed"), color);
screen->hide();
}
diff --git a/scene/gui/control.cpp b/scene/gui/control.cpp
index 582c8e5860..9f715be155 100644
--- a/scene/gui/control.cpp
+++ b/scene/gui/control.cpp
@@ -810,6 +810,10 @@ void Control::set_drag_preview(Control *p_control) {
get_viewport()->_gui_set_drag_preview(this, p_control);
}
+bool Control::is_drag_successful() const {
+ return is_inside_tree() && get_viewport()->gui_is_drag_successful();
+}
+
void Control::_call_gui_input(const Ref<InputEvent> &p_event) {
emit_signal(SceneStringNames::get_singleton()->gui_input, p_event); //signal should be first, so it's possible to override an event (and then accept it)
if (!is_inside_tree() || get_viewport()->is_input_handled()) {
@@ -1821,6 +1825,10 @@ Size2 Control::get_size() const {
return data.size_cache;
}
+void Control::reset_size() {
+ set_size(Size2());
+}
+
Rect2 Control::get_global_rect() const {
return Rect2(get_global_position(), get_size());
}
@@ -2841,6 +2849,7 @@ void Control::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_position", "position", "keep_offsets"), &Control::set_position, DEFVAL(false));
ClassDB::bind_method(D_METHOD("_set_position", "position"), &Control::_set_position);
ClassDB::bind_method(D_METHOD("set_size", "size", "keep_offsets"), &Control::set_size, DEFVAL(false));
+ ClassDB::bind_method(D_METHOD("reset_size"), &Control::reset_size);
ClassDB::bind_method(D_METHOD("_set_size", "size"), &Control::_set_size);
ClassDB::bind_method(D_METHOD("set_custom_minimum_size", "size"), &Control::set_custom_minimum_size);
ClassDB::bind_method(D_METHOD("set_global_position", "position", "keep_offsets"), &Control::set_global_position, DEFVAL(false));
@@ -2964,6 +2973,7 @@ void Control::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_drag_forwarding", "target"), &Control::set_drag_forwarding);
ClassDB::bind_method(D_METHOD("set_drag_preview", "control"), &Control::set_drag_preview);
+ ClassDB::bind_method(D_METHOD("is_drag_successful"), &Control::is_drag_successful);
ClassDB::bind_method(D_METHOD("warp_mouse", "to_position"), &Control::warp_mouse);
diff --git a/scene/gui/control.h b/scene/gui/control.h
index 02ab336ef0..1a94cc68a6 100644
--- a/scene/gui/control.h
+++ b/scene/gui/control.h
@@ -357,6 +357,7 @@ public:
virtual void drop_data(const Point2 &p_point, const Variant &p_data);
void set_drag_preview(Control *p_control);
void force_drag(const Variant &p_data, Control *p_control);
+ bool is_drag_successful() const;
void set_custom_minimum_size(const Size2 &p_custom);
Size2 get_custom_minimum_size() const;
@@ -400,6 +401,7 @@ public:
void set_size(const Size2 &p_size, bool p_keep_offsets = false);
Size2 get_size() const;
+ void reset_size();
Rect2 get_rect() const;
Rect2 get_global_rect() const;
diff --git a/scene/gui/dialogs.cpp b/scene/gui/dialogs.cpp
index 71d2778cc3..f66d3f6835 100644
--- a/scene/gui/dialogs.cpp
+++ b/scene/gui/dialogs.cpp
@@ -44,7 +44,7 @@
void AcceptDialog::_input_from_window(const Ref<InputEvent> &p_event) {
Ref<InputEventKey> key = p_event;
- if (key.is_valid() && key->is_pressed() && key->get_keycode() == KEY_ESCAPE) {
+ if (key.is_valid() && key->is_pressed() && key->get_keycode() == Key::ESCAPE) {
_cancel_pressed();
}
}
diff --git a/scene/gui/file_dialog.cpp b/scene/gui/file_dialog.cpp
index 5f9f09fc50..44853fc006 100644
--- a/scene/gui/file_dialog.cpp
+++ b/scene/gui/file_dialog.cpp
@@ -110,7 +110,7 @@ void FileDialog::unhandled_input(const Ref<InputEvent> &p_event) {
bool handled = true;
switch (k->get_keycode()) {
- case KEY_H: {
+ case Key::H: {
if (k->is_command_pressed()) {
set_show_hidden_files(!show_hidden_files);
} else {
@@ -118,10 +118,10 @@ void FileDialog::unhandled_input(const Ref<InputEvent> &p_event) {
}
} break;
- case KEY_F5: {
+ case Key::F5: {
invalidate();
} break;
- case KEY_BACKSPACE: {
+ case Key::BACKSPACE: {
_dir_submitted("..");
} break;
default: {
diff --git a/scene/gui/gradient_edit.cpp b/scene/gui/gradient_edit.cpp
index 5d024d3be7..1210be15ce 100644
--- a/scene/gui/gradient_edit.cpp
+++ b/scene/gui/gradient_edit.cpp
@@ -39,6 +39,10 @@ GradientEdit::GradientEdit() {
picker = memnew(ColorPicker);
popup->add_child(picker);
+ gradient_cache.instantiate();
+ preview_texture.instantiate();
+
+ preview_texture->set_width(1024);
add_child(popup, false, INTERNAL_MODE_FRONT);
}
@@ -47,7 +51,7 @@ int GradientEdit::_get_point_from_pos(int x) {
int total_w = get_size().width - get_size().height - draw_spacing;
float min_distance = 1e20;
for (int i = 0; i < points.size(); i++) {
- //Check if we clicked at point
+ // Check if we clicked at point.
float distance = ABS(x - points[i].offset * total_w);
float min = (draw_point_width / 2 * 1.7); //make it easier to grab
if (distance <= min && distance < min_distance) {
@@ -84,8 +88,8 @@ void GradientEdit::gui_input(const Ref<InputEvent> &p_event) {
Ref<InputEventKey> k = p_event;
- if (k.is_valid() && k->is_pressed() && k->get_keycode() == KEY_DELETE && grabbed != -1) {
- points.remove(grabbed);
+ if (k.is_valid() && k->is_pressed() && k->get_keycode() == Key::KEY_DELETE && grabbed != -1) {
+ points.remove_at(grabbed);
grabbed = -1;
grabbing = false;
update();
@@ -94,18 +98,18 @@ void GradientEdit::gui_input(const Ref<InputEvent> &p_event) {
}
Ref<InputEventMouseButton> mb = p_event;
- //Show color picker on double click.
- if (mb.is_valid() && mb->get_button_index() == 1 && mb->is_double_click() && mb->is_pressed()) {
+ // Show color picker on double click.
+ if (mb.is_valid() && mb->get_button_index() == MouseButton::LEFT && mb->is_double_click() && mb->is_pressed()) {
grabbed = _get_point_from_pos(mb->get_position().x);
_show_color_picker();
accept_event();
}
- //Delete point on right click
- if (mb.is_valid() && mb->get_button_index() == 2 && mb->is_pressed()) {
+ // Delete point on right click.
+ if (mb.is_valid() && mb->get_button_index() == MouseButton::RIGHT && mb->is_pressed()) {
grabbed = _get_point_from_pos(mb->get_position().x);
if (grabbed != -1) {
- points.remove(grabbed);
+ points.remove_at(grabbed);
grabbed = -1;
grabbing = false;
update();
@@ -114,20 +118,20 @@ void GradientEdit::gui_input(const Ref<InputEvent> &p_event) {
}
}
- //Hold alt key to duplicate selected color
- if (mb.is_valid() && mb->get_button_index() == 1 && mb->is_pressed() && mb->is_alt_pressed()) {
+ // Hold alt key to duplicate selected color.
+ if (mb.is_valid() && mb->get_button_index() == MouseButton::LEFT && mb->is_pressed() && mb->is_alt_pressed()) {
int x = mb->get_position().x;
grabbed = _get_point_from_pos(x);
if (grabbed != -1) {
int total_w = get_size().width - get_size().height - draw_spacing;
- Gradient::Point newPoint = points[grabbed];
- newPoint.offset = CLAMP(x / float(total_w), 0, 1);
+ Gradient::Point new_point = points[grabbed];
+ new_point.offset = CLAMP(x / float(total_w), 0, 1);
- points.push_back(newPoint);
+ points.push_back(new_point);
points.sort();
for (int i = 0; i < points.size(); ++i) {
- if (points[i].offset == newPoint.offset) {
+ if (points[i].offset == new_point.offset) {
grabbed = i;
break;
}
@@ -138,8 +142,8 @@ void GradientEdit::gui_input(const Ref<InputEvent> &p_event) {
}
}
- //select
- if (mb.is_valid() && mb->get_button_index() == 1 && mb->is_pressed()) {
+ // Select.
+ if (mb.is_valid() && mb->get_button_index() == MouseButton::LEFT && mb->is_pressed()) {
update();
int x = mb->get_position().x;
int total_w = get_size().width - get_size().height - draw_spacing;
@@ -158,16 +162,16 @@ void GradientEdit::gui_input(const Ref<InputEvent> &p_event) {
return;
}
- //insert
- Gradient::Point newPoint;
- newPoint.offset = CLAMP(x / float(total_w), 0, 1);
+ // Insert point.
+ Gradient::Point new_point;
+ new_point.offset = CLAMP(x / float(total_w), 0, 1);
Gradient::Point prev;
Gradient::Point next;
int pos = -1;
for (int i = 0; i < points.size(); i++) {
- if (points[i].offset < newPoint.offset) {
+ if (points[i].offset < new_point.offset) {
pos = i;
}
}
@@ -191,12 +195,12 @@ void GradientEdit::gui_input(const Ref<InputEvent> &p_event) {
prev = points[pos];
}
- newPoint.color = prev.color.lerp(next.color, (newPoint.offset - prev.offset) / (next.offset - prev.offset));
+ new_point.color = prev.color.lerp(next.color, (new_point.offset - prev.offset) / (next.offset - prev.offset));
- points.push_back(newPoint);
+ points.push_back(new_point);
points.sort();
for (int i = 0; i < points.size(); i++) {
- if (points[i].offset == newPoint.offset) {
+ if (points[i].offset == new_point.offset) {
grabbed = i;
break;
}
@@ -205,7 +209,7 @@ void GradientEdit::gui_input(const Ref<InputEvent> &p_event) {
emit_signal(SNAME("ramp_changed"));
}
- if (mb.is_valid() && mb->get_button_index() == 1 && !mb->is_pressed()) {
+ if (mb.is_valid() && mb->get_button_index() == MouseButton::LEFT && !mb->is_pressed()) {
if (grabbing) {
grabbing = false;
emit_signal(SNAME("ramp_changed"));
@@ -223,7 +227,7 @@ void GradientEdit::gui_input(const Ref<InputEvent> &p_event) {
float newofs = CLAMP(x / float(total_w), 0, 1);
// Snap to "round" coordinates if holding Ctrl.
- // Be more precise if holding Shift as well
+ // Be more precise if holding Shift as well.
if (mm->is_ctrl_pressed()) {
newofs = Math::snapped(newofs, mm->is_shift_pressed() ? 0.025 : 0.1);
} else if (mm->is_shift_pressed()) {
@@ -299,57 +303,22 @@ void GradientEdit::_notification(int p_what) {
int h = get_size().y;
if (w == 0 || h == 0) {
- return; //Safety check. We have division by 'h'. And in any case there is nothing to draw with such size
+ return; // Safety check. We have division by 'h'. And in any case there is nothing to draw with such size.
}
int total_w = get_size().width - get_size().height - draw_spacing;
- //Draw checker pattern for ramp
+ // Draw checker pattern for ramp.
draw_texture_rect(get_theme_icon(SNAME("GuiMiniCheckerboard"), SNAME("EditorIcons")), Rect2(0, 0, total_w, h), true);
- //Draw color ramp
- Gradient::Point prev;
- prev.offset = 0;
- if (points.size() == 0) {
- prev.color = Color(0, 0, 0); //Draw black rectangle if we have no points
- } else {
- prev.color = points[0].color; //Extend color of first point to the beginning.
- }
+ // Draw color ramp.
- for (int i = -1; i < points.size(); i++) {
- Gradient::Point next;
- //If there is no next point
- if (i + 1 == points.size()) {
- if (points.size() == 0) {
- next.color = Color(0, 0, 0); //Draw black rectangle if we have no points
- } else {
- next.color = points[i].color; //Extend color of last point to the end.
- }
- next.offset = 1;
- } else {
- next = points[i + 1];
- }
+ gradient_cache->set_points(points);
+ gradient_cache->set_interpolation_mode(interpolation_mode);
+ preview_texture->set_gradient(gradient_cache);
+ draw_texture_rect(preview_texture, Rect2(0, 0, total_w, h));
- if (prev.offset == next.offset) {
- prev = next;
- continue;
- }
-
- Vector<Vector2> points;
- Vector<Color> colors;
- points.push_back(Vector2(prev.offset * total_w, h));
- points.push_back(Vector2(prev.offset * total_w, 0));
- points.push_back(Vector2(next.offset * total_w, 0));
- points.push_back(Vector2(next.offset * total_w, h));
- colors.push_back(prev.color);
- colors.push_back(prev.color);
- colors.push_back(next.color);
- colors.push_back(next.color);
- draw_primitive(points, colors, Vector<Point2>());
- prev = next;
- }
-
- //Draw point markers
+ // Draw point markers.
for (int i = 0; i < points.size(); i++) {
Color col = points[i].color.inverted();
col.a = 0.9;
@@ -383,7 +352,7 @@ void GradientEdit::_notification(int p_what) {
draw_line(Vector2(total_w + draw_spacing, h), Vector2(total_w + draw_spacing + h, 0), Color(1, 1, 1, 0.6));
}
- //Draw borders around color ramp if in focus
+ // Draw borders around color ramp if in focus.
if (has_focus()) {
draw_line(Vector2(-1, -1), Vector2(total_w + 1, -1), Color(1, 1, 1, 0.6));
draw_line(Vector2(total_w + 1, -1), Vector2(total_w + 1, h + 1), Color(1, 1, 1, 0.6));
@@ -448,12 +417,21 @@ void GradientEdit::set_points(Vector<Gradient::Point> &p_points) {
}
points.clear();
points = p_points;
+ points.sort();
}
Vector<Gradient::Point> &GradientEdit::get_points() {
return points;
}
+void GradientEdit::set_interpolation_mode(Gradient::InterpolationMode p_interp_mode) {
+ interpolation_mode = p_interp_mode;
+}
+
+Gradient::InterpolationMode GradientEdit::get_interpolation_mode() {
+ return interpolation_mode;
+}
+
void GradientEdit::_bind_methods() {
ADD_SIGNAL(MethodInfo("ramp_changed"));
}
diff --git a/scene/gui/gradient_edit.h b/scene/gui/gradient_edit.h
index f3a39daaf6..66b60d87c7 100644
--- a/scene/gui/gradient_edit.h
+++ b/scene/gui/gradient_edit.h
@@ -45,6 +45,10 @@ class GradientEdit : public Control {
bool grabbing = false;
int grabbed = -1;
Vector<Gradient::Point> points;
+ Gradient::InterpolationMode interpolation_mode = Gradient::GRADIENT_INTERPOLATE_LINEAR;
+
+ Ref<Gradient> gradient_cache;
+ Ref<GradientTexture1D> preview_texture;
// Make sure to use the scaled value below.
const int BASE_SPACING = 3;
@@ -69,6 +73,9 @@ public:
Vector<Color> get_colors() const;
void set_points(Vector<Gradient::Point> &p_points);
Vector<Gradient::Point> &get_points();
+ void set_interpolation_mode(Gradient::InterpolationMode p_interp_mode);
+ Gradient::InterpolationMode get_interpolation_mode();
+
virtual Size2 get_minimum_size() const override;
GradientEdit();
diff --git a/scene/gui/graph_edit.cpp b/scene/gui/graph_edit.cpp
index 35e31be9af..e7d98a686f 100644
--- a/scene/gui/graph_edit.cpp
+++ b/scene/gui/graph_edit.cpp
@@ -150,7 +150,7 @@ void GraphEditMinimap::gui_input(const Ref<InputEvent> &p_ev) {
Ref<InputEventMouseButton> mb = p_ev;
Ref<InputEventMouseMotion> mm = p_ev;
- if (mb.is_valid() && mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (mb.is_valid() && mb->get_button_index() == MouseButton::LEFT) {
if (mb->is_pressed()) {
is_pressing = true;
@@ -501,6 +501,43 @@ void GraphEdit::_notification(int p_what) {
}
}
+void GraphEdit::_update_comment_enclosed_nodes_list(GraphNode *p_node, HashMap<StringName, Vector<GraphNode *>> &p_comment_enclosed_nodes) {
+ Rect2 comment_node_rect = p_node->get_rect();
+ Vector<GraphNode *> enclosed_nodes;
+
+ for (int i = 0; i < get_child_count(); i++) {
+ GraphNode *gn = Object::cast_to<GraphNode>(get_child(i));
+ if (!gn || gn->is_selected()) {
+ continue;
+ }
+
+ Rect2 node_rect = gn->get_rect();
+ bool included = comment_node_rect.encloses(node_rect);
+ if (included) {
+ enclosed_nodes.push_back(gn);
+ }
+ }
+
+ p_comment_enclosed_nodes.set(p_node->get_name(), enclosed_nodes);
+}
+
+void GraphEdit::_set_drag_comment_enclosed_nodes(GraphNode *p_node, HashMap<StringName, Vector<GraphNode *>> &p_comment_enclosed_nodes, bool p_drag) {
+ for (int i = 0; i < p_comment_enclosed_nodes[p_node->get_name()].size(); i++) {
+ p_comment_enclosed_nodes[p_node->get_name()][i]->set_drag(p_drag);
+ }
+}
+
+void GraphEdit::_set_position_of_comment_enclosed_nodes(GraphNode *p_node, HashMap<StringName, Vector<GraphNode *>> &p_comment_enclosed_nodes, Vector2 p_drag_accum) {
+ for (int i = 0; i < p_comment_enclosed_nodes[p_node->get_name()].size(); i++) {
+ Vector2 pos = (p_comment_enclosed_nodes[p_node->get_name()][i]->get_drag_from() * zoom + drag_accum) / zoom;
+ if (is_using_snap() ^ Input::get_singleton()->is_key_pressed(Key::CTRL)) {
+ const int snap = get_snap();
+ pos = pos.snapped(Vector2(snap, snap));
+ }
+ p_comment_enclosed_nodes[p_node->get_name()][i]->set_position_offset(pos);
+ }
+}
+
bool GraphEdit::_filter_input(const Point2 &p_point) {
Ref<Texture2D> port = get_theme_icon(SNAME("port"), SNAME("GraphNode"));
Vector2i port_size = Vector2i(port->get_width(), port->get_height());
@@ -531,7 +568,7 @@ bool GraphEdit::_filter_input(const Point2 &p_point) {
void GraphEdit::_top_layer_input(const Ref<InputEvent> &p_ev) {
Ref<InputEventMouseButton> mb = p_ev;
- if (mb.is_valid() && mb->get_button_index() == MOUSE_BUTTON_LEFT && mb->is_pressed()) {
+ if (mb.is_valid() && mb->get_button_index() == MouseButton::LEFT && mb->is_pressed()) {
Ref<Texture2D> port = get_theme_icon(SNAME("port"), SNAME("GraphNode"));
Vector2i port_size = Vector2i(port->get_width(), port->get_height());
@@ -678,7 +715,7 @@ void GraphEdit::_top_layer_input(const Ref<InputEvent> &p_ev) {
}
}
- if (mb.is_valid() && mb->get_button_index() == MOUSE_BUTTON_LEFT && !mb->is_pressed()) {
+ if (mb.is_valid() && mb->get_button_index() == MouseButton::LEFT && !mb->is_pressed()) {
if (connecting_valid) {
if (connecting && connecting_target) {
String from = connecting_from;
@@ -1031,7 +1068,7 @@ void GraphEdit::gui_input(const Ref<InputEvent> &p_ev) {
ERR_FAIL_COND(p_ev.is_null());
Ref<InputEventMouseMotion> mm = p_ev;
- if (mm.is_valid() && (mm->get_button_mask() & MOUSE_BUTTON_MASK_MIDDLE || (mm->get_button_mask() & MOUSE_BUTTON_MASK_LEFT && Input::get_singleton()->is_key_pressed(KEY_SPACE)))) {
+ if (mm.is_valid() && ((mm->get_button_mask() & MouseButton::MASK_MIDDLE) != MouseButton::NONE || ((mm->get_button_mask() & MouseButton::MASK_LEFT) != MouseButton::NONE && Input::get_singleton()->is_key_pressed(Key::SPACE)))) {
Vector2i relative = Input::get_singleton()->warp_mouse_motion(mm, get_global_rect());
h_scroll->set_value(h_scroll->get_value() - relative.x);
v_scroll->set_value(v_scroll->get_value() - relative.y);
@@ -1052,12 +1089,15 @@ void GraphEdit::gui_input(const Ref<InputEvent> &p_ev) {
// Snapping can be toggled temporarily by holding down Ctrl.
// This is done here as to not toggle the grid when holding down Ctrl.
- if (is_using_snap() ^ Input::get_singleton()->is_key_pressed(KEY_CTRL)) {
+ if (is_using_snap() ^ Input::get_singleton()->is_key_pressed(Key::CTRL)) {
const int snap = get_snap();
pos = pos.snapped(Vector2(snap, snap));
}
gn->set_position_offset(pos);
+ if (gn->is_comment()) {
+ _set_position_of_comment_enclosed_nodes(gn, comment_enclosed_nodes, drag_accum);
+ }
}
}
}
@@ -1101,7 +1141,7 @@ void GraphEdit::gui_input(const Ref<InputEvent> &p_ev) {
Ref<InputEventMouseButton> b = p_ev;
if (b.is_valid()) {
- if (b->get_button_index() == MOUSE_BUTTON_RIGHT && b->is_pressed()) {
+ if (b->get_button_index() == MouseButton::RIGHT && b->is_pressed()) {
if (box_selecting) {
box_selecting = false;
for (int i = get_child_count() - 1; i >= 0; i--) {
@@ -1131,8 +1171,8 @@ void GraphEdit::gui_input(const Ref<InputEvent> &p_ev) {
}
}
- if (b->get_button_index() == MOUSE_BUTTON_LEFT && !b->is_pressed() && dragging) {
- if (!just_selected && drag_accum == Vector2() && Input::get_singleton()->is_key_pressed(KEY_CTRL)) {
+ if (b->get_button_index() == MouseButton::LEFT && !b->is_pressed() && dragging) {
+ if (!just_selected && drag_accum == Vector2() && Input::get_singleton()->is_key_pressed(Key::CTRL)) {
//deselect current node
for (int i = get_child_count() - 1; i >= 0; i--) {
GraphNode *gn = Object::cast_to<GraphNode>(get_child(i));
@@ -1153,6 +1193,9 @@ void GraphEdit::gui_input(const Ref<InputEvent> &p_ev) {
GraphNode *gn = Object::cast_to<GraphNode>(get_child(i));
if (gn && gn->is_selected()) {
gn->set_drag(false);
+ if (gn->is_comment()) {
+ _set_drag_comment_enclosed_nodes(gn, comment_enclosed_nodes, false);
+ }
}
}
}
@@ -1170,7 +1213,7 @@ void GraphEdit::gui_input(const Ref<InputEvent> &p_ev) {
connections_layer->update();
}
- if (b->get_button_index() == MOUSE_BUTTON_LEFT && b->is_pressed()) {
+ if (b->get_button_index() == MouseButton::LEFT && b->is_pressed()) {
GraphNode *gn = nullptr;
for (int i = get_child_count() - 1; i >= 0; i--) {
@@ -1196,7 +1239,7 @@ void GraphEdit::gui_input(const Ref<InputEvent> &p_ev) {
dragging = true;
drag_accum = Vector2();
just_selected = !gn->is_selected();
- if (!gn->is_selected() && !Input::get_singleton()->is_key_pressed(KEY_CTRL)) {
+ if (!gn->is_selected() && !Input::get_singleton()->is_key_pressed(Key::CTRL)) {
for (int i = 0; i < get_child_count(); i++) {
GraphNode *o_gn = Object::cast_to<GraphNode>(get_child(i));
if (o_gn) {
@@ -1220,6 +1263,10 @@ void GraphEdit::gui_input(const Ref<InputEvent> &p_ev) {
}
if (o_gn->is_selected()) {
o_gn->set_drag(true);
+ if (o_gn->is_comment()) {
+ _update_comment_enclosed_nodes_list(o_gn, comment_enclosed_nodes);
+ _set_drag_comment_enclosed_nodes(o_gn, comment_enclosed_nodes, true);
+ }
}
}
@@ -1227,7 +1274,7 @@ void GraphEdit::gui_input(const Ref<InputEvent> &p_ev) {
if (_filter_input(b->get_position())) {
return;
}
- if (Input::get_singleton()->is_key_pressed(KEY_SPACE)) {
+ if (Input::get_singleton()->is_key_pressed(Key::SPACE)) {
return;
}
@@ -1272,7 +1319,7 @@ void GraphEdit::gui_input(const Ref<InputEvent> &p_ev) {
}
}
- if (b->get_button_index() == MOUSE_BUTTON_LEFT && !b->is_pressed() && box_selecting) {
+ if (b->get_button_index() == MouseButton::LEFT && !b->is_pressed() && box_selecting) {
box_selecting = false;
box_selecting_rect = Rect2();
previous_selected.clear();
@@ -1280,7 +1327,7 @@ void GraphEdit::gui_input(const Ref<InputEvent> &p_ev) {
minimap->update();
}
- int scroll_direction = (b->get_button_index() == MOUSE_BUTTON_WHEEL_DOWN) - (b->get_button_index() == MOUSE_BUTTON_WHEEL_UP);
+ int scroll_direction = (b->get_button_index() == MouseButton::WHEEL_DOWN) - (b->get_button_index() == MouseButton::WHEEL_UP);
if (scroll_direction != 0) {
if (b->is_ctrl_pressed()) {
if (b->is_shift_pressed()) {
diff --git a/scene/gui/graph_edit.h b/scene/gui/graph_edit.h
index 44e50aa3c2..6c11f9df6a 100644
--- a/scene/gui/graph_edit.h
+++ b/scene/gui/graph_edit.h
@@ -217,6 +217,11 @@ private:
Set<int> valid_left_disconnect_types;
Set<int> valid_right_disconnect_types;
+ HashMap<StringName, Vector<GraphNode *>> comment_enclosed_nodes;
+ void _update_comment_enclosed_nodes_list(GraphNode *p_node, HashMap<StringName, Vector<GraphNode *>> &p_comment_enclosed_nodes);
+ void _set_drag_comment_enclosed_nodes(GraphNode *p_node, HashMap<StringName, Vector<GraphNode *>> &p_comment_enclosed_nodes, bool p_drag);
+ void _set_position_of_comment_enclosed_nodes(GraphNode *p_node, HashMap<StringName, Vector<GraphNode *>> &p_comment_enclosed_nodes, Vector2 p_pos);
+
HBoxContainer *zoom_hb;
friend class GraphEditFilter;
diff --git a/scene/gui/graph_node.cpp b/scene/gui/graph_node.cpp
index 8462fd259e..e7094c89b1 100644
--- a/scene/gui/graph_node.cpp
+++ b/scene/gui/graph_node.cpp
@@ -894,7 +894,7 @@ void GraphNode::gui_input(const Ref<InputEvent> &p_ev) {
if (mb.is_valid()) {
ERR_FAIL_COND_MSG(get_parent_control() == nullptr, "GraphNode must be the child of a GraphEdit node.");
- if (mb->is_pressed() && mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (mb->is_pressed() && mb->get_button_index() == MouseButton::LEFT) {
Vector2 mpos = mb->get_position();
if (close_rect.size != Size2() && close_rect.has_point(mpos)) {
//send focus to parent
@@ -917,7 +917,7 @@ void GraphNode::gui_input(const Ref<InputEvent> &p_ev) {
emit_signal(SNAME("raise_request"));
}
- if (!mb->is_pressed() && mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (!mb->is_pressed() && mb->get_button_index() == MouseButton::LEFT) {
resizing = false;
}
}
diff --git a/scene/gui/item_list.cpp b/scene/gui/item_list.cpp
index 4215c9aff4..408ef53e89 100644
--- a/scene/gui/item_list.cpp
+++ b/scene/gui/item_list.cpp
@@ -29,6 +29,7 @@
/*************************************************************************/
#include "item_list.h"
+
#include "core/config/project_settings.h"
#include "core/os/os.h"
#include "core/string/translation.h"
@@ -380,7 +381,7 @@ void ItemList::move_item(int p_from_idx, int p_to_idx) {
}
Item item = items[p_from_idx];
- items.remove(p_from_idx);
+ items.remove_at(p_from_idx);
items.insert(p_to_idx, item);
update();
@@ -403,7 +404,7 @@ int ItemList::get_item_count() const {
void ItemList::remove_item(int p_idx) {
ERR_FAIL_INDEX(p_idx, items.size());
- items.remove(p_idx);
+ items.remove_at(p_idx);
if (current == p_idx) {
current = -1;
}
@@ -546,7 +547,7 @@ void ItemList::gui_input(const Ref<InputEvent> &p_event) {
Ref<InputEventMouseButton> mb = p_event;
- if (defer_select_single >= 0 && mb.is_valid() && mb->get_button_index() == MOUSE_BUTTON_LEFT && !mb->is_pressed()) {
+ if (defer_select_single >= 0 && mb.is_valid() && mb->get_button_index() == MouseButton::LEFT && !mb->is_pressed()) {
select(defer_select_single, true);
emit_signal(SNAME("multi_selected"), defer_select_single, true);
@@ -554,7 +555,7 @@ void ItemList::gui_input(const Ref<InputEvent> &p_event) {
return;
}
- if (mb.is_valid() && (mb->get_button_index() == MOUSE_BUTTON_LEFT || (allow_rmb_select && mb->get_button_index() == MOUSE_BUTTON_RIGHT)) && mb->is_pressed()) {
+ if (mb.is_valid() && (mb->get_button_index() == MouseButton::LEFT || (allow_rmb_select && mb->get_button_index() == MouseButton::RIGHT)) && mb->is_pressed()) {
search_string = ""; //any mousepress cancels
Vector2 pos = mb->get_position();
Ref<StyleBox> bg = get_theme_stylebox(SNAME("bg"));
@@ -600,16 +601,16 @@ void ItemList::gui_input(const Ref<InputEvent> &p_event) {
}
}
- if (mb->get_button_index() == MOUSE_BUTTON_RIGHT) {
+ if (mb->get_button_index() == MouseButton::RIGHT) {
emit_signal(SNAME("item_rmb_selected"), i, get_local_mouse_position());
}
} else {
- if (!mb->is_double_click() && !mb->is_command_pressed() && select_mode == SELECT_MULTI && items[i].selectable && !items[i].disabled && items[i].selected && mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (!mb->is_double_click() && !mb->is_command_pressed() && select_mode == SELECT_MULTI && items[i].selectable && !items[i].disabled && items[i].selected && mb->get_button_index() == MouseButton::LEFT) {
defer_select_single = i;
return;
}
- if (items[i].selected && mb->get_button_index() == MOUSE_BUTTON_RIGHT) {
+ if (items[i].selected && mb->get_button_index() == MouseButton::RIGHT) {
emit_signal(SNAME("item_rmb_selected"), i, get_local_mouse_position());
} else {
bool selected = items[i].selected;
@@ -624,7 +625,7 @@ void ItemList::gui_input(const Ref<InputEvent> &p_event) {
}
}
- if (mb->get_button_index() == MOUSE_BUTTON_RIGHT) {
+ if (mb->get_button_index() == MouseButton::RIGHT) {
emit_signal(SNAME("item_rmb_selected"), i, get_local_mouse_position());
} else if (/*select_mode==SELECT_SINGLE &&*/ mb->is_double_click()) {
emit_signal(SNAME("item_activated"), i);
@@ -634,7 +635,7 @@ void ItemList::gui_input(const Ref<InputEvent> &p_event) {
return;
}
- if (mb->get_button_index() == MOUSE_BUTTON_RIGHT) {
+ if (mb->get_button_index() == MouseButton::RIGHT) {
emit_signal(SNAME("rmb_clicked"), mb->get_position());
return;
@@ -643,10 +644,10 @@ void ItemList::gui_input(const Ref<InputEvent> &p_event) {
// Since closest is null, more likely we clicked on empty space, so send signal to interested controls. Allows, for example, implement items deselecting.
emit_signal(SNAME("nothing_selected"));
}
- if (mb.is_valid() && mb->get_button_index() == MOUSE_BUTTON_WHEEL_UP && mb->is_pressed()) {
+ if (mb.is_valid() && mb->get_button_index() == MouseButton::WHEEL_UP && mb->is_pressed()) {
scroll_bar->set_value(scroll_bar->get_value() - scroll_bar->get_page() * mb->get_factor() / 8);
}
- if (mb.is_valid() && mb->get_button_index() == MOUSE_BUTTON_WHEEL_DOWN && mb->is_pressed()) {
+ if (mb.is_valid() && mb->get_button_index() == MouseButton::WHEEL_DOWN && mb->is_pressed()) {
scroll_bar->set_value(scroll_bar->get_value() + scroll_bar->get_page() * mb->get_factor() / 8);
}
@@ -1605,7 +1606,7 @@ void ItemList::_bind_methods() {
ClassDB::bind_method(D_METHOD("move_item", "from_idx", "to_idx"), &ItemList::move_item);
- ClassDB::bind_method(D_METHOD("set_item_count"), &ItemList::set_item_count);
+ ClassDB::bind_method(D_METHOD("set_item_count", "count"), &ItemList::set_item_count);
ClassDB::bind_method(D_METHOD("get_item_count"), &ItemList::get_item_count);
ClassDB::bind_method(D_METHOD("remove_item", "idx"), &ItemList::remove_item);
diff --git a/scene/gui/label.cpp b/scene/gui/label.cpp
index b8cb618171..50908f6a77 100644
--- a/scene/gui/label.cpp
+++ b/scene/gui/label.cpp
@@ -243,11 +243,9 @@ inline void draw_glyph_outline(const Glyph &p_gl, const RID &p_canvas, const Col
if (p_gl.font_rid != RID()) {
if (p_font_shadow_color.a > 0) {
TS->font_draw_glyph(p_gl.font_rid, p_canvas, p_gl.font_size, p_ofs + Vector2(p_gl.x_off, p_gl.y_off) + shadow_ofs, p_gl.index, p_font_shadow_color);
- if (p_shadow_outline_size > 0) {
- TS->font_draw_glyph_outline(p_gl.font_rid, p_canvas, p_gl.font_size, p_shadow_outline_size, p_ofs + Vector2(p_gl.x_off, p_gl.y_off) + Vector2(-shadow_ofs.x, shadow_ofs.y), p_gl.index, p_font_shadow_color);
- TS->font_draw_glyph_outline(p_gl.font_rid, p_canvas, p_gl.font_size, p_shadow_outline_size, p_ofs + Vector2(p_gl.x_off, p_gl.y_off) + Vector2(shadow_ofs.x, -shadow_ofs.y), p_gl.index, p_font_shadow_color);
- TS->font_draw_glyph_outline(p_gl.font_rid, p_canvas, p_gl.font_size, p_shadow_outline_size, p_ofs + Vector2(p_gl.x_off, p_gl.y_off) + Vector2(-shadow_ofs.x, -shadow_ofs.y), p_gl.index, p_font_shadow_color);
- }
+ }
+ if (p_font_shadow_color.a > 0 && p_shadow_outline_size > 0) {
+ TS->font_draw_glyph_outline(p_gl.font_rid, p_canvas, p_gl.font_size, p_shadow_outline_size, p_ofs + Vector2(p_gl.x_off, p_gl.y_off) + shadow_ofs, p_gl.index, p_font_shadow_color);
}
if (p_font_outline_color.a != 0.0 && p_outline_size > 0) {
TS->font_draw_glyph_outline(p_gl.font_rid, p_canvas, p_gl.font_size, p_outline_size, p_ofs + Vector2(p_gl.x_off, p_gl.y_off), p_gl.index, p_font_outline_color);
@@ -397,7 +395,7 @@ void Label::_notification(int p_what) {
int ellipsis_gl_size = TS->shaped_text_get_ellipsis_glyph_count(lines_rid[i]);
// Draw outline. Note: Do not merge this into the single loop with the main text, to prevent overlaps.
- if (font_shadow_color.a > 0 || (font_outline_color.a != 0.0 && outline_size > 0)) {
+ if ((outline_size > 0 && font_outline_color.a != 0) || (font_shadow_color.a != 0)) {
Vector2 offset = ofs;
// Draw RTL ellipsis string when necessary.
if (rtl && ellipsis_pos >= 0) {
diff --git a/scene/gui/line_edit.cpp b/scene/gui/line_edit.cpp
index 8c33d306a1..69b08fda3c 100644
--- a/scene/gui/line_edit.cpp
+++ b/scene/gui/line_edit.cpp
@@ -225,17 +225,17 @@ void LineEdit::gui_input(const Ref<InputEvent> &p_event) {
// Ignore mouse clicks in IME input mode.
return;
}
- if (b->is_pressed() && b->get_button_index() == MOUSE_BUTTON_RIGHT && context_menu_enabled) {
+ if (b->is_pressed() && b->get_button_index() == MouseButton::RIGHT && context_menu_enabled) {
_ensure_menu();
menu->set_position(get_screen_transform().xform(get_local_mouse_position()));
- menu->set_size(Vector2(1, 1));
+ menu->reset_size();
menu->popup();
grab_focus();
accept_event();
return;
}
- if (is_middle_mouse_paste_enabled() && b->is_pressed() && b->get_button_index() == MOUSE_BUTTON_MIDDLE && is_editable() && DisplayServer::get_singleton()->has_feature(DisplayServer::FEATURE_CLIPBOARD_PRIMARY)) {
+ if (is_middle_mouse_paste_enabled() && b->is_pressed() && b->get_button_index() == MouseButton::MIDDLE && is_editable() && DisplayServer::get_singleton()->has_feature(DisplayServer::FEATURE_CLIPBOARD_PRIMARY)) {
String paste_buffer = DisplayServer::get_singleton()->clipboard_get_primary().strip_escapes();
deselect();
@@ -254,7 +254,7 @@ void LineEdit::gui_input(const Ref<InputEvent> &p_event) {
return;
}
- if (b->get_button_index() != MOUSE_BUTTON_LEFT) {
+ if (b->get_button_index() != MouseButton::LEFT) {
return;
}
@@ -268,7 +268,9 @@ void LineEdit::gui_input(const Ref<InputEvent> &p_event) {
return;
}
- shift_selection_check_pre(b->is_shift_pressed());
+ if (b->is_shift_pressed()) {
+ shift_selection_check_pre(true);
+ }
set_caret_at_pixel_pos(b->get_position().x);
@@ -328,7 +330,7 @@ void LineEdit::gui_input(const Ref<InputEvent> &p_event) {
update();
} else {
- if (selection.enabled && !pass && b->get_button_index() == MOUSE_BUTTON_LEFT && DisplayServer::get_singleton()->has_feature(DisplayServer::FEATURE_CLIPBOARD_PRIMARY)) {
+ if (selection.enabled && !pass && b->get_button_index() == MouseButton::LEFT && DisplayServer::get_singleton()->has_feature(DisplayServer::FEATURE_CLIPBOARD_PRIMARY)) {
DisplayServer::get_singleton()->clipboard_set_primary(text.substr(selection.begin, selection.end - selection.begin));
}
if (!text.is_empty() && is_editable() && clear_button_enabled) {
@@ -345,6 +347,9 @@ void LineEdit::gui_input(const Ref<InputEvent> &p_event) {
}
selection.creating = false;
selection.double_click = false;
+ if (!drag_action) {
+ selection.drag_attempt = false;
+ }
show_virtual_keyboard();
}
@@ -363,12 +368,17 @@ void LineEdit::gui_input(const Ref<InputEvent> &p_event) {
}
}
- if (m->get_button_mask() & MOUSE_BUTTON_LEFT) {
+ if ((m->get_button_mask() & MouseButton::MASK_LEFT) != MouseButton::NONE) {
if (selection.creating) {
set_caret_at_pixel_pos(m->get_position().x);
selection_fill_at_caret();
}
}
+
+ if (drag_action && can_drop_data(m->get_position(), get_viewport()->gui_get_drag_data())) {
+ drag_caret_force_displayed = true;
+ set_caret_at_pixel_pos(m->get_position().x);
+ }
}
Ref<InputEventKey> k = p_event;
@@ -383,7 +393,7 @@ void LineEdit::gui_input(const Ref<InputEvent> &p_event) {
_ensure_menu();
Point2 pos = Point2(get_caret_pixel_pos().x, (get_size().y + get_theme_font(SNAME("font"))->get_height(get_theme_font_size(SNAME("font_size")))) / 2);
menu->set_position(get_global_transform().xform(pos));
- menu->set_size(Vector2(1, 1));
+ menu->reset_size();
menu->popup();
menu->grab_focus();
}
@@ -569,22 +579,44 @@ bool LineEdit::can_drop_data(const Point2 &p_point, const Variant &p_data) const
return drop_override;
}
- return p_data.get_type() == Variant::STRING;
+ return is_editable() && p_data.get_type() == Variant::STRING;
}
void LineEdit::drop_data(const Point2 &p_point, const Variant &p_data) {
Control::drop_data(p_point, p_data);
- if (p_data.get_type() == Variant::STRING) {
+ if (p_data.get_type() == Variant::STRING && is_editable()) {
set_caret_at_pixel_pos(p_point.x);
- int selected = selection.end - selection.begin;
-
- text.erase(selection.begin, selected);
- _shape();
+ int caret_column_tmp = caret_column;
+ if (selection.drag_attempt) {
+ selection.drag_attempt = false;
+ if (caret_column < selection.begin || caret_column > selection.end) {
+ if (caret_column_tmp > selection.end) {
+ caret_column_tmp = caret_column_tmp - (selection.end - selection.begin);
+ }
+ selection_delete();
- insert_text_at_caret(p_data);
- selection.begin = caret_column - selected;
- selection.end = caret_column;
+ set_caret_column(caret_column_tmp);
+ insert_text_at_caret(p_data);
+ }
+ } else if (selection.enabled && caret_column >= selection.begin && caret_column <= selection.end) {
+ caret_column_tmp = selection.begin;
+ selection_delete();
+ set_caret_column(caret_column_tmp);
+ insert_text_at_caret(p_data);
+ grab_focus();
+ } else {
+ insert_text_at_caret(p_data);
+ grab_focus();
+ }
+ select(caret_column_tmp, caret_column);
+ if (!text_changed_dirty) {
+ if (is_inside_tree()) {
+ MessageQueue::get_singleton()->push_call(this, "_text_changed");
+ }
+ text_changed_dirty = true;
+ }
+ update();
}
}
@@ -664,7 +696,9 @@ void LineEdit::_notification(int p_what) {
}
Ref<Font> font = get_theme_font(SNAME("font"));
- style->draw(ci, Rect2(Point2(), size));
+ if (!flat) {
+ style->draw(ci, Rect2(Point2(), size));
+ }
if (has_focus()) {
get_theme_stylebox(SNAME("focus"))->draw(ci, Rect2(Point2(), size));
@@ -802,7 +836,7 @@ void LineEdit::_notification(int p_what) {
// Draw carets.
ofs.x = x_ofs + scroll_offset;
- if (draw_caret) {
+ if (draw_caret || drag_caret_force_displayed) {
if (ime_text.length() == 0) {
// Normal caret.
CaretInfo caret = TS->shaped_text_get_carets(text_rid, caret_column);
@@ -920,7 +954,7 @@ void LineEdit::_notification(int p_what) {
DisplayServer::get_singleton()->virtual_keyboard_hide();
}
- if (deselect_on_focus_loss_enabled) {
+ if (deselect_on_focus_loss_enabled && !selection.drag_attempt) {
deselect();
}
} break;
@@ -934,6 +968,25 @@ void LineEdit::_notification(int p_what) {
update();
}
} break;
+ case Control::NOTIFICATION_DRAG_BEGIN: {
+ drag_action = true;
+ } break;
+ case Control::NOTIFICATION_DRAG_END: {
+ if (is_drag_successful()) {
+ if (selection.drag_attempt) {
+ selection.drag_attempt = false;
+ if (is_editable()) {
+ selection_delete();
+ } else if (deselect_on_focus_loss_enabled) {
+ deselect();
+ }
+ }
+ } else {
+ selection.drag_attempt = false;
+ }
+ drag_action = false;
+ drag_caret_force_displayed = false;
+ } break;
}
}
@@ -998,6 +1051,9 @@ void LineEdit::undo() {
} else if (undo_stack_pos == undo_stack.front()) {
return;
}
+
+ deselect();
+
undo_stack_pos = undo_stack_pos->prev();
TextOperation op = undo_stack_pos->get();
text = op.text;
@@ -1019,6 +1075,9 @@ void LineEdit::redo() {
if (undo_stack_pos == undo_stack.back()) {
return;
}
+
+ deselect();
+
undo_stack_pos = undo_stack_pos->next();
TextOperation op = undo_stack_pos->get();
text = op.text;
@@ -1242,7 +1301,7 @@ void LineEdit::delete_char() {
return;
}
- text.erase(caret_column - 1, 1);
+ text = text.left(caret_column - 1) + text.substr(caret_column);
_shape();
set_caret_column(get_caret_column() - 1);
@@ -1254,7 +1313,7 @@ void LineEdit::delete_text(int p_from_column, int p_to_column) {
ERR_FAIL_COND_MSG(p_from_column < 0 || p_from_column > p_to_column || p_to_column > text.length(),
vformat("Positional parameters (from: %d, to: %d) are inverted or outside the text length (%d).", p_from_column, p_to_column, text.length()));
- text.erase(p_from_column, p_to_column - p_from_column);
+ text = text.left(p_from_column) + text.substr(p_to_column);
_shape();
caret_column -= CLAMP(caret_column - p_from_column, 0, p_to_column - p_from_column);
@@ -1966,6 +2025,17 @@ Ref<Texture2D> LineEdit::get_right_icon() {
return right_icon;
}
+void LineEdit::set_flat(bool p_enabled) {
+ if (flat != p_enabled) {
+ flat = p_enabled;
+ update();
+ }
+}
+
+bool LineEdit::is_flat() const {
+ return flat;
+}
+
void LineEdit::_text_changed() {
_emit_text_change();
_clear_redo();
@@ -2058,25 +2128,25 @@ void LineEdit::_create_undo_state() {
undo_stack.push_back(op);
}
-int LineEdit::_get_menu_action_accelerator(const String &p_action) {
+Key LineEdit::_get_menu_action_accelerator(const String &p_action) {
const List<Ref<InputEvent>> *events = InputMap::get_singleton()->action_get_events(p_action);
if (!events) {
- return 0;
+ return Key::NONE;
}
// Use first event in the list for the accelerator.
const List<Ref<InputEvent>>::Element *first_event = events->front();
if (!first_event) {
- return 0;
+ return Key::NONE;
}
const Ref<InputEventKey> event = first_event->get();
if (event.is_null()) {
- return 0;
+ return Key::NONE;
}
// Use physical keycode if non-zero
- if (event->get_physical_keycode() != 0) {
+ if (event->get_physical_keycode() != Key::NONE) {
return event->get_physical_keycode_with_modifiers();
} else {
return event->get_keycode_with_modifiers();
@@ -2135,7 +2205,7 @@ void LineEdit::_get_property_list(List<PropertyInfo> *p_list) const {
void LineEdit::_validate_property(PropertyInfo &property) const {
if (!caret_blink_enabled && property.name == "caret_blink_speed") {
- property.usage = PROPERTY_USAGE_NOEDITOR;
+ property.usage = PROPERTY_USAGE_NO_EDITOR;
}
}
@@ -2214,6 +2284,8 @@ void LineEdit::_bind_methods() {
ClassDB::bind_method(D_METHOD("is_deselect_on_focus_loss_enabled"), &LineEdit::is_deselect_on_focus_loss_enabled);
ClassDB::bind_method(D_METHOD("set_right_icon", "icon"), &LineEdit::set_right_icon);
ClassDB::bind_method(D_METHOD("get_right_icon"), &LineEdit::get_right_icon);
+ ClassDB::bind_method(D_METHOD("set_flat", "enabled"), &LineEdit::set_flat);
+ ClassDB::bind_method(D_METHOD("is_flat"), &LineEdit::is_flat);
ADD_SIGNAL(MethodInfo("text_changed", PropertyInfo(Variant::STRING, "new_text")));
ADD_SIGNAL(MethodInfo("text_change_rejected", PropertyInfo(Variant::STRING, "rejected_substring")));
@@ -2269,6 +2341,7 @@ void LineEdit::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "selecting_enabled"), "set_selecting_enabled", "is_selecting_enabled");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "deselect_on_focus_loss_enabled"), "set_deselect_on_focus_loss_enabled", "is_deselect_on_focus_loss_enabled");
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "right_icon", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_right_icon", "get_right_icon");
+ ADD_PROPERTY(PropertyInfo(Variant::BOOL, "flat"), "set_flat", "is_flat");
ADD_PROPERTY(PropertyInfo(Variant::INT, "text_direction", PROPERTY_HINT_ENUM, "Auto,Left-to-Right,Right-to-Left,Inherited"), "set_text_direction", "get_text_direction");
ADD_PROPERTY(PropertyInfo(Variant::STRING, "language"), "set_language", "get_language");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "draw_control_chars"), "set_draw_control_chars", "get_draw_control_chars");
@@ -2329,21 +2402,21 @@ void LineEdit::_ensure_menu() {
// Reorganize context menu.
menu->clear();
if (editable) {
- menu->add_item(RTR("Cut"), MENU_CUT, is_shortcut_keys_enabled() ? _get_menu_action_accelerator("ui_cut") : 0);
+ menu->add_item(RTR("Cut"), MENU_CUT, is_shortcut_keys_enabled() ? _get_menu_action_accelerator("ui_cut") : Key::NONE);
}
- menu->add_item(RTR("Copy"), MENU_COPY, is_shortcut_keys_enabled() ? _get_menu_action_accelerator("ui_copy") : 0);
+ menu->add_item(RTR("Copy"), MENU_COPY, is_shortcut_keys_enabled() ? _get_menu_action_accelerator("ui_copy") : Key::NONE);
if (editable) {
- menu->add_item(RTR("Paste"), MENU_PASTE, is_shortcut_keys_enabled() ? _get_menu_action_accelerator("ui_paste") : 0);
+ menu->add_item(RTR("Paste"), MENU_PASTE, is_shortcut_keys_enabled() ? _get_menu_action_accelerator("ui_paste") : Key::NONE);
}
menu->add_separator();
if (is_selecting_enabled()) {
- menu->add_item(RTR("Select All"), MENU_SELECT_ALL, is_shortcut_keys_enabled() ? _get_menu_action_accelerator("ui_text_select_all") : 0);
+ menu->add_item(RTR("Select All"), MENU_SELECT_ALL, is_shortcut_keys_enabled() ? _get_menu_action_accelerator("ui_text_select_all") : Key::NONE);
}
if (editable) {
menu->add_item(RTR("Clear"), MENU_CLEAR);
menu->add_separator();
- menu->add_item(RTR("Undo"), MENU_UNDO, is_shortcut_keys_enabled() ? _get_menu_action_accelerator("ui_undo") : 0);
- menu->add_item(RTR("Redo"), MENU_REDO, is_shortcut_keys_enabled() ? _get_menu_action_accelerator("ui_redo") : 0);
+ menu->add_item(RTR("Undo"), MENU_UNDO, is_shortcut_keys_enabled() ? _get_menu_action_accelerator("ui_undo") : Key::NONE);
+ menu->add_item(RTR("Redo"), MENU_REDO, is_shortcut_keys_enabled() ? _get_menu_action_accelerator("ui_redo") : Key::NONE);
}
menu->add_separator();
menu->add_submenu_item(RTR("Text Writing Direction"), "DirMenu");
diff --git a/scene/gui/line_edit.h b/scene/gui/line_edit.h
index 3364e02e01..221dd9eb2e 100644
--- a/scene/gui/line_edit.h
+++ b/scene/gui/line_edit.h
@@ -129,7 +129,11 @@ private:
bool middle_mouse_paste_enabled = true;
+ bool drag_action = false;
+ bool drag_caret_force_displayed = false;
+
Ref<Texture2D> right_icon;
+ bool flat = false;
struct Selection {
int begin = 0;
@@ -169,7 +173,7 @@ private:
void _clear_redo();
void _create_undo_state();
- int _get_menu_action_accelerator(const String &p_action);
+ Key _get_menu_action_accelerator(const String &p_action);
void _shape();
void _fit_to_width();
@@ -332,6 +336,9 @@ public:
void set_right_icon(const Ref<Texture2D> &p_icon);
Ref<Texture2D> get_right_icon();
+ void set_flat(bool p_enabled);
+ bool is_flat() const;
+
virtual bool is_text_field() const override;
void show_virtual_keyboard();
diff --git a/scene/gui/menu_button.cpp b/scene/gui/menu_button.cpp
index ceb2092e3a..39c7b04955 100644
--- a/scene/gui/menu_button.cpp
+++ b/scene/gui/menu_button.cpp
@@ -110,14 +110,6 @@ PopupMenu *MenuButton::get_popup() const {
return popup;
}
-void MenuButton::_set_items(const Array &p_items) {
- popup->set("items", p_items);
-}
-
-Array MenuButton::_get_items() const {
- return popup->get("items");
-}
-
void MenuButton::set_switch_on_hover(bool p_enabled) {
switch_on_hover = p_enabled;
}
@@ -126,6 +118,16 @@ bool MenuButton::is_switch_on_hover() {
return switch_on_hover;
}
+void MenuButton::set_item_count(int p_count) {
+ ERR_FAIL_COND(p_count < 0);
+ popup->set_item_count(p_count);
+ notify_property_list_changed();
+}
+
+int MenuButton::get_item_count() const {
+ return popup->get_item_count();
+}
+
void MenuButton::_notification(int p_what) {
switch (p_what) {
case NOTIFICATION_VISIBILITY_CHANGED: {
@@ -146,16 +148,66 @@ void MenuButton::_notification(int p_what) {
}
}
+bool MenuButton::_set(const StringName &p_name, const Variant &p_value) {
+ Vector<String> components = String(p_name).split("/", true, 2);
+ if (components.size() >= 2 && components[0] == "popup") {
+ bool valid;
+ popup->set(String(p_name).trim_prefix("popup/"), p_value, &valid);
+ return valid;
+ }
+ return false;
+}
+
+bool MenuButton::_get(const StringName &p_name, Variant &r_ret) const {
+ Vector<String> components = String(p_name).split("/", true, 2);
+ if (components.size() >= 2 && components[0] == "popup") {
+ bool valid;
+ r_ret = popup->get(String(p_name).trim_prefix("popup/"), &valid);
+ return valid;
+ }
+ return false;
+}
+
+void MenuButton::_get_property_list(List<PropertyInfo> *p_list) const {
+ for (int i = 0; i < popup->get_item_count(); i++) {
+ p_list->push_back(PropertyInfo(Variant::STRING, vformat("popup/item_%d/text", i)));
+
+ PropertyInfo pi = PropertyInfo(Variant::OBJECT, vformat("popup/item_%d/icon", i), PROPERTY_HINT_RESOURCE_TYPE, "Texture2D");
+ pi.usage &= ~(popup->get_item_icon(i).is_null() ? PROPERTY_USAGE_STORAGE : 0);
+ p_list->push_back(pi);
+
+ pi = PropertyInfo(Variant::INT, vformat("popup/item_%d/checkable", i), PROPERTY_HINT_ENUM, "No,As checkbox,As radio button");
+ pi.usage &= ~(!popup->is_item_checkable(i) ? PROPERTY_USAGE_STORAGE : 0);
+ p_list->push_back(pi);
+
+ pi = PropertyInfo(Variant::BOOL, vformat("popup/item_%d/checked", i));
+ pi.usage &= ~(!popup->is_item_checked(i) ? PROPERTY_USAGE_STORAGE : 0);
+ p_list->push_back(pi);
+
+ pi = PropertyInfo(Variant::INT, vformat("popup/item_%d/id", i), PROPERTY_HINT_RANGE, "1,10,1,or_greater");
+ p_list->push_back(pi);
+
+ pi = PropertyInfo(Variant::BOOL, vformat("popup/item_%d/disabled", i));
+ pi.usage &= ~(!popup->is_item_disabled(i) ? PROPERTY_USAGE_STORAGE : 0);
+ p_list->push_back(pi);
+
+ pi = PropertyInfo(Variant::BOOL, vformat("popup/item_%d/separator", i));
+ pi.usage &= ~(!popup->is_item_separator(i) ? PROPERTY_USAGE_STORAGE : 0);
+ p_list->push_back(pi);
+ }
+}
+
void MenuButton::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_popup"), &MenuButton::get_popup);
- ClassDB::bind_method(D_METHOD("_set_items"), &MenuButton::_set_items);
- ClassDB::bind_method(D_METHOD("_get_items"), &MenuButton::_get_items);
ClassDB::bind_method(D_METHOD("set_switch_on_hover", "enable"), &MenuButton::set_switch_on_hover);
ClassDB::bind_method(D_METHOD("is_switch_on_hover"), &MenuButton::is_switch_on_hover);
ClassDB::bind_method(D_METHOD("set_disable_shortcuts", "disabled"), &MenuButton::set_disable_shortcuts);
- ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "items", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL), "_set_items", "_get_items");
+ ClassDB::bind_method(D_METHOD("set_item_count", "count"), &MenuButton::set_item_count);
+ ClassDB::bind_method(D_METHOD("get_item_count"), &MenuButton::get_item_count);
+
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "switch_on_hover"), "set_switch_on_hover", "is_switch_on_hover");
+ ADD_ARRAY_COUNT("Items", "items_count", "set_item_count", "get_item_count", "popup/item_");
ADD_SIGNAL(MethodInfo("about_to_popup"));
}
diff --git a/scene/gui/menu_button.h b/scene/gui/menu_button.h
index 730495b65d..455b7dc870 100644
--- a/scene/gui/menu_button.h
+++ b/scene/gui/menu_button.h
@@ -44,15 +44,15 @@ class MenuButton : public Button {
Vector2i mouse_pos_adjusted;
- Array _get_items() const;
- void _set_items(const Array &p_items);
-
virtual void gui_input(const Ref<InputEvent> &p_event) override;
void _popup_visibility_changed(bool p_visible);
protected:
void _notification(int p_what);
+ bool _set(const StringName &p_name, const Variant &p_value);
+ bool _get(const StringName &p_name, Variant &r_ret) const;
+ void _get_property_list(List<PropertyInfo> *p_list) const;
static void _bind_methods();
virtual void unhandled_key_input(const Ref<InputEvent> &p_event) override;
@@ -64,6 +64,9 @@ public:
bool is_switch_on_hover();
void set_disable_shortcuts(bool p_disabled);
+ void set_item_count(int p_count);
+ int get_item_count() const;
+
MenuButton();
~MenuButton();
};
diff --git a/scene/gui/option_button.cpp b/scene/gui/option_button.cpp
index c00c040048..dcf3cfeb09 100644
--- a/scene/gui/option_button.cpp
+++ b/scene/gui/option_button.cpp
@@ -332,7 +332,7 @@ void OptionButton::_bind_methods() {
ClassDB::bind_method(D_METHOD("_set_items"), &OptionButton::_set_items);
ClassDB::bind_method(D_METHOD("_get_items"), &OptionButton::_get_items);
- ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "items", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL), "_set_items", "_get_items");
+ ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "items", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL), "_set_items", "_get_items");
// "selected" property must come after "items", otherwise GH-10213 occurs.
ADD_PROPERTY(PropertyInfo(Variant::INT, "selected"), "_select_int", "get_selected");
ADD_SIGNAL(MethodInfo("item_selected", PropertyInfo(Variant::INT, "index")));
diff --git a/scene/gui/popup.cpp b/scene/gui/popup.cpp
index be05fd5a60..a48ad0f770 100644
--- a/scene/gui/popup.cpp
+++ b/scene/gui/popup.cpp
@@ -36,7 +36,7 @@
void Popup::_input_from_window(const Ref<InputEvent> &p_event) {
Ref<InputEventKey> key = p_event;
- if (key.is_valid() && key->is_pressed() && key->get_keycode() == KEY_ESCAPE) {
+ if (key.is_valid() && key->is_pressed() && key->get_keycode() == Key::ESCAPE) {
_close_pressed();
}
}
@@ -105,8 +105,6 @@ void Popup::_close_pressed() {
_deinitialize_visible_parents();
call_deferred(SNAME("hide"));
-
- emit_signal(SNAME("cancelled"));
}
void Popup::set_as_minsize() {
diff --git a/scene/gui/popup_menu.cpp b/scene/gui/popup_menu.cpp
index c0a559e624..2e854abb76 100644
--- a/scene/gui/popup_menu.cpp
+++ b/scene/gui/popup_menu.cpp
@@ -39,7 +39,7 @@
String PopupMenu::_get_accel_text(const Item &p_item) const {
if (p_item.shortcut.is_valid()) {
return p_item.shortcut->get_as_text();
- } else if (p_item.accel) {
+ } else if (p_item.accel != Key::NONE) {
return keycode_get_string(p_item.accel);
}
return String();
@@ -74,7 +74,7 @@ Size2 PopupMenu::_get_contents_minimum_size() const {
size.width += items[i].text_buf->get_size().x;
size.height += vseparation;
- if (items[i].accel || (items[i].shortcut.is_valid() && items[i].shortcut->has_valid_event())) {
+ if (items[i].accel != Key::NONE || (items[i].shortcut.is_valid() && items[i].shortcut->has_valid_event())) {
int accel_w = hseparation * 2;
accel_w += items[i].accel_text_buf->get_size().x;
accel_max_w = MAX(accel_w, accel_max_w);
@@ -358,15 +358,15 @@ void PopupMenu::gui_input(const Ref<InputEvent> &p_event) {
return;
}
- int button_idx = b->get_button_index();
+ MouseButton button_idx = b->get_button_index();
if (!b->is_pressed()) {
// Activate the item on release of either the left mouse button or
// any mouse button held down when the popup was opened.
// This allows for opening the popup and triggering an action in a single mouse click.
- if (button_idx == MOUSE_BUTTON_LEFT || (initial_button_mask & (1 << (button_idx - 1)))) {
+ if (button_idx == MouseButton::LEFT || (initial_button_mask & mouse_button_to_mask(button_idx)) != MouseButton::NONE) {
bool was_during_grabbed_click = during_grabbed_click;
during_grabbed_click = false;
- initial_button_mask = 0;
+ initial_button_mask = MouseButton::NONE;
// Disable clicks under a time threshold to avoid selection right when opening the popup.
uint64_t now = OS::get_singleton()->get_ticks_msec();
@@ -637,7 +637,7 @@ void PopupMenu::_draw_items() {
}
// Accelerator / Shortcut
- if (items[i].accel || (items[i].shortcut.is_valid() && items[i].shortcut->has_valid_event())) {
+ if (items[i].accel != Key::NONE || (items[i].shortcut.is_valid() && items[i].shortcut->has_valid_event())) {
if (rtl) {
item_ofs.x = scroll_width + style->get_margin(SIDE_LEFT) + item_end_padding;
} else {
@@ -813,16 +813,17 @@ void PopupMenu::_notification(int p_what) {
item.id = p_id == -1 ? items.size() : p_id; \
item.accel = p_accel;
-void PopupMenu::add_item(const String &p_label, int p_id, uint32_t p_accel) {
+void PopupMenu::add_item(const String &p_label, int p_id, Key p_accel) {
Item item;
ITEM_SETUP_WITH_ACCEL(p_label, p_id, p_accel);
items.push_back(item);
_shape_item(items.size() - 1);
control->update();
child_controls_changed();
+ notify_property_list_changed();
}
-void PopupMenu::add_icon_item(const Ref<Texture2D> &p_icon, const String &p_label, int p_id, uint32_t p_accel) {
+void PopupMenu::add_icon_item(const Ref<Texture2D> &p_icon, const String &p_label, int p_id, Key p_accel) {
Item item;
ITEM_SETUP_WITH_ACCEL(p_label, p_id, p_accel);
item.icon = p_icon;
@@ -830,9 +831,10 @@ void PopupMenu::add_icon_item(const Ref<Texture2D> &p_icon, const String &p_labe
_shape_item(items.size() - 1);
control->update();
child_controls_changed();
+ notify_property_list_changed();
}
-void PopupMenu::add_check_item(const String &p_label, int p_id, uint32_t p_accel) {
+void PopupMenu::add_check_item(const String &p_label, int p_id, Key p_accel) {
Item item;
ITEM_SETUP_WITH_ACCEL(p_label, p_id, p_accel);
item.checkable_type = Item::CHECKABLE_TYPE_CHECK_BOX;
@@ -842,7 +844,7 @@ void PopupMenu::add_check_item(const String &p_label, int p_id, uint32_t p_accel
child_controls_changed();
}
-void PopupMenu::add_icon_check_item(const Ref<Texture2D> &p_icon, const String &p_label, int p_id, uint32_t p_accel) {
+void PopupMenu::add_icon_check_item(const Ref<Texture2D> &p_icon, const String &p_label, int p_id, Key p_accel) {
Item item;
ITEM_SETUP_WITH_ACCEL(p_label, p_id, p_accel);
item.icon = p_icon;
@@ -853,7 +855,7 @@ void PopupMenu::add_icon_check_item(const Ref<Texture2D> &p_icon, const String &
child_controls_changed();
}
-void PopupMenu::add_radio_check_item(const String &p_label, int p_id, uint32_t p_accel) {
+void PopupMenu::add_radio_check_item(const String &p_label, int p_id, Key p_accel) {
Item item;
ITEM_SETUP_WITH_ACCEL(p_label, p_id, p_accel);
item.checkable_type = Item::CHECKABLE_TYPE_RADIO_BUTTON;
@@ -863,7 +865,7 @@ void PopupMenu::add_radio_check_item(const String &p_label, int p_id, uint32_t p
child_controls_changed();
}
-void PopupMenu::add_icon_radio_check_item(const Ref<Texture2D> &p_icon, const String &p_label, int p_id, uint32_t p_accel) {
+void PopupMenu::add_icon_radio_check_item(const Ref<Texture2D> &p_icon, const String &p_label, int p_id, Key p_accel) {
Item item;
ITEM_SETUP_WITH_ACCEL(p_label, p_id, p_accel);
item.icon = p_icon;
@@ -874,7 +876,7 @@ void PopupMenu::add_icon_radio_check_item(const Ref<Texture2D> &p_icon, const St
child_controls_changed();
}
-void PopupMenu::add_multistate_item(const String &p_label, int p_max_states, int p_default_state, int p_id, uint32_t p_accel) {
+void PopupMenu::add_multistate_item(const String &p_label, int p_max_states, int p_default_state, int p_id, Key p_accel) {
Item item;
ITEM_SETUP_WITH_ACCEL(p_label, p_id, p_accel);
item.max_states = p_max_states;
@@ -1043,7 +1045,7 @@ void PopupMenu::set_item_id(int p_idx, int p_id) {
child_controls_changed();
}
-void PopupMenu::set_item_accelerator(int p_idx, uint32_t p_accel) {
+void PopupMenu::set_item_accelerator(int p_idx, Key p_accel) {
ERR_FAIL_INDEX(p_idx, items.size());
items.write[p_idx].accel = p_accel;
items.write[p_idx].dirty = true;
@@ -1119,8 +1121,8 @@ Ref<Texture2D> PopupMenu::get_item_icon(int p_idx) const {
return items[p_idx].icon;
}
-uint32_t PopupMenu::get_item_accelerator(int p_idx) const {
- ERR_FAIL_INDEX_V(p_idx, items.size(), 0);
+Key PopupMenu::get_item_accelerator(int p_idx) const {
+ ERR_FAIL_INDEX_V(p_idx, items.size(), Key::NONE);
return items[p_idx].accel;
}
@@ -1271,30 +1273,38 @@ int PopupMenu::get_current_index() const {
return mouse_over;
}
+void PopupMenu::set_item_count(int p_count) {
+ ERR_FAIL_COND(p_count < 0);
+ items.resize(p_count);
+ control->update();
+ child_controls_changed();
+ notify_property_list_changed();
+}
+
int PopupMenu::get_item_count() const {
return items.size();
}
bool PopupMenu::activate_item_by_event(const Ref<InputEvent> &p_event, bool p_for_global_only) {
- Key code = KEY_NONE;
+ Key code = Key::NONE;
Ref<InputEventKey> k = p_event;
if (k.is_valid()) {
code = k->get_keycode();
- if (code == KEY_NONE) {
+ if (code == Key::NONE) {
code = (Key)k->get_unicode();
}
if (k->is_ctrl_pressed()) {
- code |= KEY_MASK_CTRL;
+ code |= KeyModifierMask::CTRL;
}
if (k->is_alt_pressed()) {
- code |= KEY_MASK_ALT;
+ code |= KeyModifierMask::ALT;
}
if (k->is_meta_pressed()) {
- code |= KEY_MASK_META;
+ code |= KeyModifierMask::META;
}
if (k->is_shift_pressed()) {
- code |= KEY_MASK_SHIFT;
+ code |= KeyModifierMask::SHIFT;
}
}
@@ -1308,7 +1318,7 @@ bool PopupMenu::activate_item_by_event(const Ref<InputEvent> &p_event, bool p_fo
return true;
}
- if (code != 0 && items[i].accel == code) {
+ if (code != Key::NONE && items[i].accel == code) {
activate_item(i);
return true;
}
@@ -1393,7 +1403,7 @@ void PopupMenu::remove_item(int p_idx) {
_unref_shortcut(items[p_idx].shortcut);
}
- items.remove(p_idx);
+ items.remove_at(p_idx);
control->update();
child_controls_changed();
}
@@ -1420,27 +1430,7 @@ void PopupMenu::clear() {
mouse_over = -1;
control->update();
child_controls_changed();
-}
-
-Array PopupMenu::_get_items() const {
- Array items;
- for (int i = 0; i < get_item_count(); i++) {
- items.push_back(get_item_text(i));
- items.push_back(get_item_icon(i));
- // For compatibility, use false/true for no/checkbox and integers for other values
- int ct = this->items[i].checkable_type;
- items.push_back(Variant(ct <= Item::CHECKABLE_TYPE_CHECK_BOX ? is_item_checkable(i) : ct));
- items.push_back(is_item_checked(i));
- items.push_back(is_item_disabled(i));
-
- items.push_back(get_item_id(i));
- items.push_back(get_item_accelerator(i));
- items.push_back(get_item_metadata(i));
- items.push_back(get_item_submenu(i));
- items.push_back(is_item_separator(i));
- }
-
- return items;
+ notify_property_list_changed();
}
void PopupMenu::_ref_shortcut(Ref<Shortcut> p_sc) {
@@ -1461,45 +1451,6 @@ void PopupMenu::_unref_shortcut(Ref<Shortcut> p_sc) {
}
}
-void PopupMenu::_set_items(const Array &p_items) {
- ERR_FAIL_COND(p_items.size() % 10);
- clear();
-
- for (int i = 0; i < p_items.size(); i += 10) {
- String text = p_items[i + 0];
- Ref<Texture2D> icon = p_items[i + 1];
- // For compatibility, use false/true for no/checkbox and integers for other values
- bool checkable = p_items[i + 2];
- bool radio_checkable = (int)p_items[i + 2] == Item::CHECKABLE_TYPE_RADIO_BUTTON;
- bool checked = p_items[i + 3];
- bool disabled = p_items[i + 4];
-
- int id = p_items[i + 5];
- int accel = p_items[i + 6];
- Variant meta = p_items[i + 7];
- String subm = p_items[i + 8];
- bool sep = p_items[i + 9];
-
- int idx = get_item_count();
- add_item(text, id);
- set_item_icon(idx, icon);
- if (checkable) {
- if (radio_checkable) {
- set_item_as_radio_checkable(idx, true);
- } else {
- set_item_as_checkable(idx, true);
- }
- }
- set_item_checked(idx, checked);
- set_item_disabled(idx, disabled);
- set_item_id(idx, id);
- set_item_metadata(idx, meta);
- set_item_as_separator(idx, sep);
- set_item_accelerator(idx, accel);
- set_item_submenu(idx, subm);
- }
-}
-
// Hide on item selection determines whether or not the popup will close after item selection
void PopupMenu::set_hide_on_item_selection(bool p_enabled) {
hide_on_item_selection = p_enabled;
@@ -1581,6 +1532,145 @@ void PopupMenu::take_mouse_focus() {
}
}
+bool PopupMenu::_set(const StringName &p_name, const Variant &p_value) {
+ Vector<String> components = String(p_name).split("/", true, 2);
+ if (components.size() >= 2 && components[0].begins_with("item_") && components[0].trim_prefix("item_").is_valid_int()) {
+ int item_index = components[0].trim_prefix("item_").to_int();
+ String property = components[1];
+ if (property == "text") {
+ set_item_text(item_index, p_value);
+ return true;
+ } else if (property == "icon") {
+ set_item_icon(item_index, p_value);
+ return true;
+ } else if (property == "checkable") {
+ bool radio_checkable = (int)p_value == Item::CHECKABLE_TYPE_RADIO_BUTTON;
+ if (radio_checkable) {
+ set_item_as_radio_checkable(item_index, true);
+ } else {
+ bool checkable = p_value;
+ set_item_as_checkable(item_index, checkable);
+ }
+ return true;
+ } else if (property == "checked") {
+ set_item_checked(item_index, p_value);
+ return true;
+ } else if (property == "id") {
+ set_item_id(item_index, p_value);
+ return true;
+ } else if (components[1] == "disabled") {
+ set_item_disabled(item_index, p_value);
+ return true;
+ } else if (property == "separator") {
+ set_item_as_separator(item_index, p_value);
+ return true;
+ }
+ }
+#ifndef DISABLE_DEPRECATED
+ // Compatibility.
+ if (p_name == "items") {
+ Array arr = p_value;
+ ERR_FAIL_COND_V(arr.size() % 10, false);
+ clear();
+
+ for (int i = 0; i < arr.size(); i += 10) {
+ String text = arr[i + 0];
+ Ref<Texture2D> icon = arr[i + 1];
+ // For compatibility, use false/true for no/checkbox and integers for other values
+ bool checkable = arr[i + 2];
+ bool radio_checkable = (int)arr[i + 2] == Item::CHECKABLE_TYPE_RADIO_BUTTON;
+ bool checked = arr[i + 3];
+ bool disabled = arr[i + 4];
+
+ int id = arr[i + 5];
+ int accel = arr[i + 6];
+ Variant meta = arr[i + 7];
+ String subm = arr[i + 8];
+ bool sep = arr[i + 9];
+
+ int idx = get_item_count();
+ add_item(text, id);
+ set_item_icon(idx, icon);
+ if (checkable) {
+ if (radio_checkable) {
+ set_item_as_radio_checkable(idx, true);
+ } else {
+ set_item_as_checkable(idx, true);
+ }
+ }
+ set_item_checked(idx, checked);
+ set_item_disabled(idx, disabled);
+ set_item_id(idx, id);
+ set_item_metadata(idx, meta);
+ set_item_as_separator(idx, sep);
+ set_item_accelerator(idx, (Key)accel);
+ set_item_submenu(idx, subm);
+ }
+ }
+#endif
+ return false;
+}
+
+bool PopupMenu::_get(const StringName &p_name, Variant &r_ret) const {
+ Vector<String> components = String(p_name).split("/", true, 2);
+ if (components.size() >= 2 && components[0].begins_with("item_") && components[0].trim_prefix("item_").is_valid_int()) {
+ int item_index = components[0].trim_prefix("item_").to_int();
+ String property = components[1];
+ if (property == "text") {
+ r_ret = get_item_text(item_index);
+ return true;
+ } else if (property == "icon") {
+ r_ret = get_item_icon(item_index);
+ return true;
+ } else if (property == "checkable") {
+ r_ret = this->items[item_index].checkable_type;
+ return true;
+ } else if (property == "checked") {
+ r_ret = is_item_checked(item_index);
+ return true;
+ } else if (property == "id") {
+ r_ret = get_item_id(item_index);
+ return true;
+ } else if (components[1] == "disabled") {
+ r_ret = is_item_disabled(item_index);
+ return true;
+ } else if (property == "separator") {
+ r_ret = is_item_separator(item_index);
+ return true;
+ }
+ }
+ return false;
+}
+
+void PopupMenu::_get_property_list(List<PropertyInfo> *p_list) const {
+ for (int i = 0; i < items.size(); i++) {
+ p_list->push_back(PropertyInfo(Variant::STRING, vformat("item_%d/text", i)));
+
+ PropertyInfo pi = PropertyInfo(Variant::OBJECT, vformat("item_%d/icon", i), PROPERTY_HINT_RESOURCE_TYPE, "Texture2D");
+ pi.usage &= ~(get_item_icon(i).is_null() ? PROPERTY_USAGE_STORAGE : 0);
+ p_list->push_back(pi);
+
+ pi = PropertyInfo(Variant::INT, vformat("item_%d/checkable", i), PROPERTY_HINT_ENUM, "No,As checkbox,As radio button");
+ pi.usage &= ~(!is_item_checkable(i) ? PROPERTY_USAGE_STORAGE : 0);
+ p_list->push_back(pi);
+
+ pi = PropertyInfo(Variant::BOOL, vformat("item_%d/checked", i));
+ pi.usage &= ~(!is_item_checked(i) ? PROPERTY_USAGE_STORAGE : 0);
+ p_list->push_back(pi);
+
+ pi = PropertyInfo(Variant::INT, vformat("item_%d/id", i), PROPERTY_HINT_RANGE, "1,10,1,or_greater");
+ p_list->push_back(pi);
+
+ pi = PropertyInfo(Variant::BOOL, vformat("item_%d/disabled", i));
+ pi.usage &= ~(!is_item_disabled(i) ? PROPERTY_USAGE_STORAGE : 0);
+ p_list->push_back(pi);
+
+ pi = PropertyInfo(Variant::BOOL, vformat("item_%d/separator", i));
+ pi.usage &= ~(!is_item_separator(i) ? PROPERTY_USAGE_STORAGE : 0);
+ p_list->push_back(pi);
+ }
+}
+
void PopupMenu::_bind_methods() {
ClassDB::bind_method(D_METHOD("add_item", "label", "id", "accel"), &PopupMenu::add_item, DEFVAL(-1), DEFVAL(0));
ClassDB::bind_method(D_METHOD("add_icon_item", "texture", "label", "id", "accel"), &PopupMenu::add_icon_item, DEFVAL(-1), DEFVAL(0));
@@ -1643,6 +1733,7 @@ void PopupMenu::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_item_shortcut", "idx"), &PopupMenu::get_item_shortcut);
ClassDB::bind_method(D_METHOD("get_current_index"), &PopupMenu::get_current_index);
+ ClassDB::bind_method(D_METHOD("set_item_count", "count"), &PopupMenu::set_item_count);
ClassDB::bind_method(D_METHOD("get_item_count"), &PopupMenu::get_item_count);
ClassDB::bind_method(D_METHOD("remove_item", "idx"), &PopupMenu::remove_item);
@@ -1650,9 +1741,6 @@ void PopupMenu::_bind_methods() {
ClassDB::bind_method(D_METHOD("add_separator", "label", "id"), &PopupMenu::add_separator, DEFVAL(String()), DEFVAL(-1));
ClassDB::bind_method(D_METHOD("clear"), &PopupMenu::clear);
- ClassDB::bind_method(D_METHOD("_set_items"), &PopupMenu::_set_items);
- ClassDB::bind_method(D_METHOD("_get_items"), &PopupMenu::_get_items);
-
ClassDB::bind_method(D_METHOD("set_hide_on_item_selection", "enable"), &PopupMenu::set_hide_on_item_selection);
ClassDB::bind_method(D_METHOD("is_hide_on_item_selection"), &PopupMenu::is_hide_on_item_selection);
@@ -1668,13 +1756,14 @@ void PopupMenu::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_allow_search", "allow"), &PopupMenu::set_allow_search);
ClassDB::bind_method(D_METHOD("get_allow_search"), &PopupMenu::get_allow_search);
- ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "items", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL), "_set_items", "_get_items");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "hide_on_item_selection"), "set_hide_on_item_selection", "is_hide_on_item_selection");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "hide_on_checkable_item_selection"), "set_hide_on_checkable_item_selection", "is_hide_on_checkable_item_selection");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "hide_on_state_item_selection"), "set_hide_on_state_item_selection", "is_hide_on_state_item_selection");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "submenu_popup_delay"), "set_submenu_popup_delay", "get_submenu_popup_delay");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "allow_search"), "set_allow_search", "get_allow_search");
+ ADD_ARRAY_COUNT("Items", "items_count", "set_item_count", "get_item_count", "item_");
+
ADD_SIGNAL(MethodInfo("id_pressed", PropertyInfo(Variant::INT, "id")));
ADD_SIGNAL(MethodInfo("id_focused", PropertyInfo(Variant::INT, "id")));
ADD_SIGNAL(MethodInfo("index_pressed", PropertyInfo(Variant::INT, "index")));
diff --git a/scene/gui/popup_menu.h b/scene/gui/popup_menu.h
index 428076c6da..22912fb59c 100644
--- a/scene/gui/popup_menu.h
+++ b/scene/gui/popup_menu.h
@@ -66,7 +66,7 @@ class PopupMenu : public Popup {
Variant metadata;
String submenu;
String tooltip;
- uint32_t accel = 0;
+ Key accel = Key::NONE;
int _ofs_cache = 0;
int _height_cache = 0;
int h_ofs = 0;
@@ -92,7 +92,7 @@ class PopupMenu : public Popup {
Timer *submenu_timer;
List<Rect2> autohide_areas;
Vector<Item> items;
- int initial_button_mask = 0;
+ MouseButton initial_button_mask = MouseButton::NONE;
bool during_grabbed_click = false;
int mouse_over = -1;
int submenu_over = -1;
@@ -117,9 +117,6 @@ class PopupMenu : public Popup {
bool hide_on_multistate_item_selection = false;
Vector2 moved;
- Array _get_items() const;
- void _set_items(const Array &p_items);
-
Map<Ref<Shortcut>, int> shortcut_refcount;
void _ref_shortcut(Ref<Shortcut> p_sc);
@@ -141,6 +138,9 @@ class PopupMenu : public Popup {
protected:
void _notification(int p_what);
+ bool _set(const StringName &p_name, const Variant &p_value);
+ bool _get(const StringName &p_name, Variant &r_ret) const;
+ void _get_property_list(List<PropertyInfo> *p_list) const;
static void _bind_methods();
public:
@@ -148,14 +148,14 @@ public:
// this value should be updated to reflect the new size.
static const int ITEM_PROPERTY_SIZE = 10;
- void add_item(const String &p_label, int p_id = -1, uint32_t p_accel = 0);
- void add_icon_item(const Ref<Texture2D> &p_icon, const String &p_label, int p_id = -1, uint32_t p_accel = 0);
- void add_check_item(const String &p_label, int p_id = -1, uint32_t p_accel = 0);
- void add_icon_check_item(const Ref<Texture2D> &p_icon, const String &p_label, int p_id = -1, uint32_t p_accel = 0);
- void add_radio_check_item(const String &p_label, int p_id = -1, uint32_t p_accel = 0);
- void add_icon_radio_check_item(const Ref<Texture2D> &p_icon, const String &p_label, int p_id = -1, uint32_t p_accel = 0);
+ void add_item(const String &p_label, int p_id = -1, Key p_accel = Key::NONE);
+ void add_icon_item(const Ref<Texture2D> &p_icon, const String &p_label, int p_id = -1, Key p_accel = Key::NONE);
+ void add_check_item(const String &p_label, int p_id = -1, Key p_accel = Key::NONE);
+ void add_icon_check_item(const Ref<Texture2D> &p_icon, const String &p_label, int p_id = -1, Key p_accel = Key::NONE);
+ void add_radio_check_item(const String &p_label, int p_id = -1, Key p_accel = Key::NONE);
+ void add_icon_radio_check_item(const Ref<Texture2D> &p_icon, const String &p_label, int p_id = -1, Key p_accel = Key::NONE);
- void add_multistate_item(const String &p_label, int p_max_states, int p_default_state = 0, int p_id = -1, uint32_t p_accel = 0);
+ void add_multistate_item(const String &p_label, int p_max_states, int p_default_state = 0, int p_id = -1, Key p_accel = Key::NONE);
void add_shortcut(const Ref<Shortcut> &p_shortcut, int p_id = -1, bool p_global = false);
void add_icon_shortcut(const Ref<Texture2D> &p_icon, const Ref<Shortcut> &p_shortcut, int p_id = -1, bool p_global = false);
@@ -175,7 +175,7 @@ public:
void set_item_icon(int p_idx, const Ref<Texture2D> &p_icon);
void set_item_checked(int p_idx, bool p_checked);
void set_item_id(int p_idx, int p_id);
- void set_item_accelerator(int p_idx, uint32_t p_accel);
+ void set_item_accelerator(int p_idx, Key p_accel);
void set_item_metadata(int p_idx, const Variant &p_meta);
void set_item_disabled(int p_idx, bool p_disabled);
void set_item_submenu(int p_idx, const String &p_submenu);
@@ -200,7 +200,7 @@ public:
bool is_item_checked(int p_idx) const;
int get_item_id(int p_idx) const;
int get_item_index(int p_id) const;
- uint32_t get_item_accelerator(int p_idx) const;
+ Key get_item_accelerator(int p_idx) const;
Variant get_item_metadata(int p_idx) const;
bool is_item_disabled(int p_idx) const;
String get_item_submenu(int p_idx) const;
@@ -213,6 +213,8 @@ public:
int get_item_state(int p_idx) const;
int get_current_index() const;
+
+ void set_item_count(int p_count);
int get_item_count() const;
bool activate_item_by_event(const Ref<InputEvent> &p_event, bool p_for_global_only = false);
diff --git a/scene/gui/range.cpp b/scene/gui/range.cpp
index 92d4261d8d..c4f05a7975 100644
--- a/scene/gui/range.cpp
+++ b/scene/gui/range.cpp
@@ -61,6 +61,11 @@ void Range::_changed_notify(const char *p_what) {
update();
}
+void Range::_validate_values() {
+ shared->max = MAX(shared->max, shared->min);
+ shared->page = CLAMP(shared->page, 0, shared->max - shared->min);
+}
+
void Range::Shared::emit_changed(const char *p_what) {
for (Set<Range *>::Element *E = owners.front(); E; E = E->next()) {
Range *r = E->get();
@@ -100,6 +105,7 @@ void Range::set_value(double p_val) {
void Range::set_min(double p_min) {
shared->min = p_min;
set_value(shared->val);
+ _validate_values();
shared->emit_changed("min");
@@ -109,6 +115,7 @@ void Range::set_min(double p_min) {
void Range::set_max(double p_max) {
shared->max = p_max;
set_value(shared->val);
+ _validate_values();
shared->emit_changed("max");
}
@@ -121,6 +128,7 @@ void Range::set_step(double p_step) {
void Range::set_page(double p_page) {
shared->page = p_page;
set_value(shared->val);
+ _validate_values();
shared->emit_changed("page");
}
@@ -270,6 +278,12 @@ void Range::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "rounded"), "set_use_rounded_values", "is_using_rounded_values");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "allow_greater"), "set_allow_greater", "is_greater_allowed");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "allow_lesser"), "set_allow_lesser", "is_lesser_allowed");
+
+ ADD_LINKED_PROPERTY("min_value", "value");
+ ADD_LINKED_PROPERTY("min_value", "max_value");
+ ADD_LINKED_PROPERTY("min_value", "page");
+ ADD_LINKED_PROPERTY("max_value", "value");
+ ADD_LINKED_PROPERTY("max_value", "page");
}
void Range::set_use_rounded_values(bool p_enable) {
diff --git a/scene/gui/range.h b/scene/gui/range.h
index 7a129e88d6..0dc702b19c 100644
--- a/scene/gui/range.h
+++ b/scene/gui/range.h
@@ -59,6 +59,7 @@ class Range : public Control {
void _value_changed_notify();
void _changed_notify(const char *p_what = "");
+ void _validate_values();
protected:
virtual void _value_changed(double) {}
diff --git a/scene/gui/rich_text_label.cpp b/scene/gui/rich_text_label.cpp
index f1efbbda98..fd19fad667 100644
--- a/scene/gui/rich_text_label.cpp
+++ b/scene/gui/rich_text_label.cpp
@@ -36,7 +36,7 @@
#include "scene/scene_string_names.h"
#include "servers/display_server.h"
-#include "modules/modules_enabled.gen.h"
+#include "modules/modules_enabled.gen.h" // For regex.
#ifdef MODULE_REGEX_ENABLED
#include "modules/regex/regex.h"
#endif
@@ -621,7 +621,7 @@ void RichTextLabel::_shape_line(ItemFrame *p_frame, int p_line, const Ref<Font>
}
}
-int RichTextLabel::_draw_line(ItemFrame *p_frame, int p_line, const Vector2 &p_ofs, int p_width, const Color &p_base_color, int p_outline_size, const Color &p_outline_color, const Color &p_font_shadow_color, bool p_shadow_as_outline, const Point2 &p_shadow_ofs) {
+int RichTextLabel::_draw_line(ItemFrame *p_frame, int p_line, const Vector2 &p_ofs, int p_width, const Color &p_base_color, int p_outline_size, const Color &p_outline_color, const Color &p_font_shadow_color, int p_shadow_outline_size, const Point2 &p_shadow_ofs) {
Vector2 off;
ERR_FAIL_COND_V(p_frame == nullptr, 0);
@@ -804,7 +804,7 @@ int RichTextLabel::_draw_line(ItemFrame *p_frame, int p_line, const Vector2 &p_o
}
for (int j = 0; j < frame->lines.size(); j++) {
- _draw_line(frame, j, p_ofs + rect.position + off + Vector2(0, frame->lines[j].offset.y), rect.size.x, p_base_color, p_outline_size, p_outline_color, p_font_shadow_color, p_shadow_as_outline, p_shadow_ofs);
+ _draw_line(frame, j, p_ofs + rect.position + off + Vector2(0, frame->lines[j].offset.y), rect.size.x, p_base_color, p_outline_size, p_outline_color, p_font_shadow_color, p_shadow_outline_size, p_shadow_ofs);
}
idx++;
}
@@ -824,7 +824,8 @@ int RichTextLabel::_draw_line(ItemFrame *p_frame, int p_line, const Vector2 &p_o
Item *it = _get_item_at_pos(it_from, it_to, glyphs[i].start);
int size = _find_outline_size(it, p_outline_size);
Color font_color = _find_outline_color(it, p_outline_color);
- if (size <= 0) {
+ Color font_shadow_color = p_font_shadow_color;
+ if ((size <= 0 || font_color.a == 0) && (font_shadow_color.a == 0)) {
gloff.x += glyphs[i].advance;
continue;
}
@@ -871,9 +872,10 @@ int RichTextLabel::_draw_line(ItemFrame *p_frame, int p_line, const Vector2 &p_o
faded_visibility = faded_visibility < 0.0f ? 0.0f : faded_visibility;
}
font_color.a = faded_visibility;
+ font_shadow_color.a = faded_visibility;
}
- bool visible = (font_color.a != 0);
+ bool visible = (font_color.a != 0) || (font_shadow_color.a != 0);
for (int j = 0; j < fx_stack.size(); j++) {
ItemFX *item_fx = fx_stack[j];
@@ -942,18 +944,19 @@ int RichTextLabel::_draw_line(ItemFrame *p_frame, int p_line, const Vector2 &p_o
}
}
- Point2 shadow_ofs(get_theme_constant(SNAME("shadow_offset_x")), get_theme_constant(SNAME("shadow_offset_y")));
-
// Draw glyph outlines.
for (int j = 0; j < glyphs[i].repeat; j++) {
if (visible) {
if (frid != RID()) {
- if (p_shadow_as_outline) {
- TS->font_draw_glyph_outline(frid, ci, glyphs[i].font_size, size, p_ofs + fx_offset + gloff + Vector2(-shadow_ofs.x, shadow_ofs.y), gl, p_font_shadow_color);
- TS->font_draw_glyph_outline(frid, ci, glyphs[i].font_size, size, p_ofs + fx_offset + gloff + Vector2(shadow_ofs.x, -shadow_ofs.y), gl, p_font_shadow_color);
- TS->font_draw_glyph_outline(frid, ci, glyphs[i].font_size, size, p_ofs + fx_offset + gloff + Vector2(-shadow_ofs.x, -shadow_ofs.y), gl, p_font_shadow_color);
+ if (font_shadow_color.a > 0) {
+ TS->font_draw_glyph(frid, ci, glyphs[i].font_size, p_ofs + fx_offset + gloff + p_shadow_ofs, gl, font_shadow_color);
+ }
+ if (font_shadow_color.a > 0 && p_shadow_outline_size > 0) {
+ TS->font_draw_glyph_outline(frid, ci, glyphs[i].font_size, p_shadow_outline_size, p_ofs + fx_offset + gloff + p_shadow_ofs, gl, font_shadow_color);
+ }
+ if (font_color.a != 0.0 && size > 0) {
+ TS->font_draw_glyph_outline(frid, ci, glyphs[i].font_size, size, p_ofs + fx_offset + gloff, gl, font_color);
}
- TS->font_draw_glyph_outline(frid, ci, glyphs[i].font_size, size, p_ofs + fx_offset + gloff, gl, font_color);
}
}
gloff.x += glyphs[i].advance;
@@ -1470,7 +1473,7 @@ void RichTextLabel::_notification(int p_what) {
Color outline_color = get_theme_color(SNAME("font_outline_color"));
int outline_size = get_theme_constant(SNAME("outline_size"));
Color font_shadow_color = get_theme_color(SNAME("font_shadow_color"));
- bool use_outline = get_theme_constant(SNAME("shadow_as_outline"));
+ int shadow_outline_size = get_theme_constant(SNAME("shadow_outline_size"));
Point2 shadow_ofs(get_theme_constant(SNAME("shadow_offset_x")), get_theme_constant(SNAME("shadow_offset_y")));
visible_paragraph_count = 0;
@@ -1480,7 +1483,7 @@ void RichTextLabel::_notification(int p_what) {
Point2 ofs = text_rect.get_position() + Vector2(0, main->lines[from_line].offset.y - vofs);
while (ofs.y < size.height && from_line < main->lines.size()) {
visible_paragraph_count++;
- visible_line_count += _draw_line(main, from_line, ofs, text_rect.size.x, base_color, outline_size, outline_color, font_shadow_color, use_outline, shadow_ofs);
+ visible_line_count += _draw_line(main, from_line, ofs, text_rect.size.x, base_color, outline_size, outline_color, font_shadow_color, shadow_outline_size, shadow_ofs);
ofs.y += main->lines[from_line].text_buf->get_size().y + get_theme_constant(SNAME("line_separation"));
from_line++;
}
@@ -1542,7 +1545,7 @@ void RichTextLabel::gui_input(const Ref<InputEvent> &p_event) {
return;
}
- if (b->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (b->get_button_index() == MouseButton::LEFT) {
if (b->is_pressed() && !b->is_double_click()) {
scroll_updated = false;
ItemFrame *c_frame = nullptr;
@@ -1633,12 +1636,12 @@ void RichTextLabel::gui_input(const Ref<InputEvent> &p_event) {
}
}
- if (b->get_button_index() == MOUSE_BUTTON_WHEEL_UP) {
+ if (b->get_button_index() == MouseButton::WHEEL_UP) {
if (scroll_active) {
vscroll->set_value(vscroll->get_value() - vscroll->get_page() * b->get_factor() * 0.5 / 8);
}
}
- if (b->get_button_index() == MOUSE_BUTTON_WHEEL_DOWN) {
+ if (b->get_button_index() == MouseButton::WHEEL_DOWN) {
if (scroll_active) {
vscroll->set_value(vscroll->get_value() + vscroll->get_page() * b->get_factor() * 0.5 / 8);
}
@@ -2331,7 +2334,7 @@ void RichTextLabel::_remove_item(Item *p_item, const int p_line, const int p_sub
p_item->parent->subitems.erase(p_item);
// If a newline was erased, all lines AFTER the newline need to be decremented.
if (p_item->type == ITEM_NEWLINE) {
- current_frame->lines.remove(p_line);
+ current_frame->lines.remove_at(p_line);
for (int i = 0; i < current->subitems.size(); i++) {
if (current->subitems[i]->line > p_subitem_line) {
current->subitems[i]->line--;
@@ -2420,7 +2423,7 @@ bool RichTextLabel::remove_line(const int p_line) {
}
if (!had_newline) {
- current_frame->lines.remove(p_line);
+ current_frame->lines.remove_at(p_line);
if (current_frame->lines.size() == 0) {
current_frame->lines.resize(1);
}
@@ -3524,7 +3527,7 @@ void RichTextLabel::append_text(const String &p_bbcode) {
pos = brk_pos + 1;
} else {
String identifier = expr[0];
- expr.remove(0);
+ expr.remove_at(0);
Dictionary properties = parse_expressions_for_values(expr);
Ref<RichTextEffect> effect = _get_custom_effect_by_code(identifier);
@@ -3798,45 +3801,32 @@ String RichTextLabel::_get_line_text(ItemFrame *p_frame, int p_line, Selection p
}
}
for (Item *it = l.from; it && it != it_to; it = _get_next_item(it)) {
+ if (it->type == ITEM_TABLE) {
+ ItemTable *table = static_cast<ItemTable *>(it);
+ for (Item *E : table->subitems) {
+ ERR_CONTINUE(E->type != ITEM_FRAME); // Children should all be frames.
+ ItemFrame *frame = static_cast<ItemFrame *>(E);
+ for (int i = 0; i < frame->lines.size(); i++) {
+ text += _get_line_text(frame, i, p_selection);
+ }
+ }
+ }
if ((p_selection.to_item != nullptr) && (p_selection.to_item->index < l.from->index)) {
- break;
+ continue;
}
if ((p_selection.from_item != nullptr) && (p_selection.from_item->index >= end_idx)) {
- break;
+ continue;
}
- switch (it->type) {
- case ITEM_NEWLINE: {
- text += "\n";
- } break;
- case ITEM_TEXT: {
- ItemText *t = (ItemText *)it;
- text += t->text;
- } break;
- case ITEM_IMAGE: {
- text += " ";
- } break;
- case ITEM_TABLE: {
- ItemTable *table = static_cast<ItemTable *>(it);
- int idx = 0;
- int col_count = table->columns.size();
- for (Item *E : table->subitems) {
- ERR_CONTINUE(E->type != ITEM_FRAME); // Children should all be frames.
- ItemFrame *frame = static_cast<ItemFrame *>(E);
- int column = idx % col_count;
-
- for (int i = 0; i < frame->lines.size(); i++) {
- text += _get_line_text(frame, i, p_selection);
- }
- if (column == col_count - 1) {
- text += "\n";
- } else {
- text += " ";
- }
- idx++;
- }
- } break;
- default:
- break;
+ if (it->type == ITEM_DROPCAP) {
+ const ItemDropcap *dc = static_cast<ItemDropcap *>(it);
+ text += dc->text;
+ } else if (it->type == ITEM_TEXT) {
+ const ItemText *t = static_cast<ItemText *>(it);
+ text += t->text;
+ } else if (it->type == ITEM_NEWLINE) {
+ text += "\n";
+ } else if (it->type == ITEM_IMAGE) {
+ text += " ";
}
}
if ((l.from != nullptr) && (p_frame == p_selection.to_frame) && (p_selection.to_item != nullptr) && (p_selection.to_item->index >= l.from->index) && (p_selection.to_item->index < end_idx)) {
diff --git a/scene/gui/rich_text_label.h b/scene/gui/rich_text_label.h
index f3c4c11cc8..5b58f14d96 100644
--- a/scene/gui/rich_text_label.h
+++ b/scene/gui/rich_text_label.h
@@ -412,7 +412,7 @@ private:
void _shape_line(ItemFrame *p_frame, int p_line, const Ref<Font> &p_base_font, int p_base_font_size, int p_width, int *r_char_offset);
void _resize_line(ItemFrame *p_frame, int p_line, const Ref<Font> &p_base_font, int p_base_font_size, int p_width);
- int _draw_line(ItemFrame *p_frame, int p_line, const Vector2 &p_ofs, int p_width, const Color &p_base_color, int p_outline_size, const Color &p_outline_color, const Color &p_font_shadow_color, bool p_shadow_as_outline, const Point2 &shadow_ofs);
+ int _draw_line(ItemFrame *p_frame, int p_line, const Vector2 &p_ofs, int p_width, const Color &p_base_color, int p_outline_size, const Color &p_outline_color, const Color &p_font_shadow_color, int p_shadow_outline_size, const Point2 &p_shadow_ofs);
float _find_click_in_line(ItemFrame *p_frame, int p_line, const Vector2 &p_ofs, int p_width, const Point2i &p_click, ItemFrame **r_click_frame = nullptr, int *r_click_line = nullptr, Item **r_click_item = nullptr, int *r_click_char = nullptr);
String _roman(int p_num, bool p_capitalize) const;
diff --git a/scene/gui/scroll_bar.cpp b/scene/gui/scroll_bar.cpp
index 4a3a6837d5..8c292e663e 100644
--- a/scene/gui/scroll_bar.cpp
+++ b/scene/gui/scroll_bar.cpp
@@ -54,17 +54,17 @@ void ScrollBar::gui_input(const Ref<InputEvent> &p_event) {
if (b.is_valid()) {
accept_event();
- if (b->get_button_index() == MOUSE_BUTTON_WHEEL_DOWN && b->is_pressed()) {
+ if (b->get_button_index() == MouseButton::WHEEL_DOWN && b->is_pressed()) {
set_value(get_value() + get_page() / 4.0);
accept_event();
}
- if (b->get_button_index() == MOUSE_BUTTON_WHEEL_UP && b->is_pressed()) {
+ if (b->get_button_index() == MouseButton::WHEEL_UP && b->is_pressed()) {
set_value(get_value() - get_page() / 4.0);
accept_event();
}
- if (b->get_button_index() != MOUSE_BUTTON_LEFT) {
+ if (b->get_button_index() != MouseButton::LEFT) {
return;
}
@@ -525,7 +525,7 @@ void ScrollBar::_drag_node_input(const Ref<InputEvent> &p_input) {
Ref<InputEventMouseButton> mb = p_input;
if (mb.is_valid()) {
- if (mb->get_button_index() != 1) {
+ if (mb->get_button_index() != MouseButton::LEFT) {
return;
}
diff --git a/scene/gui/scroll_container.cpp b/scene/gui/scroll_container.cpp
index 0c0ec39c7f..7b2ea46e17 100644
--- a/scene/gui/scroll_container.cpp
+++ b/scene/gui/scroll_container.cpp
@@ -92,7 +92,7 @@ void ScrollContainer::gui_input(const Ref<InputEvent> &p_gui_input) {
Ref<InputEventMouseButton> mb = p_gui_input;
if (mb.is_valid()) {
- if (mb->get_button_index() == MOUSE_BUTTON_WHEEL_UP && mb->is_pressed()) {
+ if (mb->get_button_index() == MouseButton::WHEEL_UP && mb->is_pressed()) {
// only horizontal is enabled, scroll horizontally
if (h_scroll->is_visible() && (!v_scroll->is_visible() || mb->is_shift_pressed())) {
h_scroll->set_value(h_scroll->get_value() - h_scroll->get_page() / 8 * mb->get_factor());
@@ -101,7 +101,7 @@ void ScrollContainer::gui_input(const Ref<InputEvent> &p_gui_input) {
}
}
- if (mb->get_button_index() == MOUSE_BUTTON_WHEEL_DOWN && mb->is_pressed()) {
+ if (mb->get_button_index() == MouseButton::WHEEL_DOWN && mb->is_pressed()) {
// only horizontal is enabled, scroll horizontally
if (h_scroll->is_visible() && (!v_scroll->is_visible() || mb->is_shift_pressed())) {
h_scroll->set_value(h_scroll->get_value() + h_scroll->get_page() / 8 * mb->get_factor());
@@ -110,13 +110,13 @@ void ScrollContainer::gui_input(const Ref<InputEvent> &p_gui_input) {
}
}
- if (mb->get_button_index() == MOUSE_BUTTON_WHEEL_LEFT && mb->is_pressed()) {
+ if (mb->get_button_index() == MouseButton::WHEEL_LEFT && mb->is_pressed()) {
if (h_scroll->is_visible_in_tree()) {
h_scroll->set_value(h_scroll->get_value() - h_scroll->get_page() * mb->get_factor() / 8);
}
}
- if (mb->get_button_index() == MOUSE_BUTTON_WHEEL_RIGHT && mb->is_pressed()) {
+ if (mb->get_button_index() == MouseButton::WHEEL_RIGHT && mb->is_pressed()) {
if (h_scroll->is_visible_in_tree()) {
h_scroll->set_value(h_scroll->get_value() + h_scroll->get_page() * mb->get_factor() / 8);
}
@@ -130,7 +130,7 @@ void ScrollContainer::gui_input(const Ref<InputEvent> &p_gui_input) {
return;
}
- if (mb->get_button_index() != MOUSE_BUTTON_LEFT) {
+ if (mb->get_button_index() != MouseButton::LEFT) {
return;
}
@@ -320,7 +320,9 @@ void ScrollContainer::_notification(int p_what) {
};
if (p_what == NOTIFICATION_READY) {
- get_viewport()->connect("gui_focus_changed", callable_mp(this, &ScrollContainer::_gui_focus_changed));
+ Viewport *viewport = get_viewport();
+ ERR_FAIL_COND(!viewport);
+ viewport->connect("gui_focus_changed", callable_mp(this, &ScrollContainer::_gui_focus_changed));
_update_dimensions();
}
diff --git a/scene/gui/slider.cpp b/scene/gui/slider.cpp
index 352f87954e..4cc425aad3 100644
--- a/scene/gui/slider.cpp
+++ b/scene/gui/slider.cpp
@@ -55,7 +55,7 @@ void Slider::gui_input(const Ref<InputEvent> &p_event) {
Ref<InputEventMouseButton> mb = p_event;
if (mb.is_valid()) {
- if (mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (mb->get_button_index() == MouseButton::LEFT) {
if (mb->is_pressed()) {
Ref<Texture2D> grabber = get_theme_icon(mouse_inside || has_focus() ? "grabber_highlight" : "grabber");
grab.pos = orientation == VERTICAL ? mb->get_position().y : mb->get_position().x;
@@ -74,10 +74,10 @@ void Slider::gui_input(const Ref<InputEvent> &p_event) {
grab.active = false;
}
} else if (scrollable) {
- if (mb->is_pressed() && mb->get_button_index() == MOUSE_BUTTON_WHEEL_UP) {
+ if (mb->is_pressed() && mb->get_button_index() == MouseButton::WHEEL_UP) {
grab_focus();
set_value(get_value() + get_step());
- } else if (mb->is_pressed() && mb->get_button_index() == MOUSE_BUTTON_WHEEL_DOWN) {
+ } else if (mb->is_pressed() && mb->get_button_index() == MouseButton::WHEEL_DOWN) {
grab_focus();
set_value(get_value() - get_step());
}
diff --git a/scene/gui/spin_box.cpp b/scene/gui/spin_box.cpp
index 0446e1b402..f30206c943 100644
--- a/scene/gui/spin_box.cpp
+++ b/scene/gui/spin_box.cpp
@@ -85,7 +85,7 @@ void SpinBox::_line_edit_input(const Ref<InputEvent> &p_event) {
}
void SpinBox::_range_click_timeout() {
- if (!drag.enabled && Input::get_singleton()->is_mouse_button_pressed(MOUSE_BUTTON_LEFT)) {
+ if (!drag.enabled && Input::get_singleton()->is_mouse_button_pressed(MouseButton::LEFT)) {
bool up = get_local_mouse_position().y < (get_size().height / 2);
set_value(get_value() + (up ? get_step() : -get_step()));
@@ -121,7 +121,7 @@ void SpinBox::gui_input(const Ref<InputEvent> &p_event) {
bool up = mb->get_position().y < (get_size().height / 2);
switch (mb->get_button_index()) {
- case MOUSE_BUTTON_LEFT: {
+ case MouseButton::LEFT: {
line_edit->grab_focus();
set_value(get_value() + (up ? get_step() : -get_step()));
@@ -133,17 +133,17 @@ void SpinBox::gui_input(const Ref<InputEvent> &p_event) {
drag.allowed = true;
drag.capture_pos = mb->get_position();
} break;
- case MOUSE_BUTTON_RIGHT: {
+ case MouseButton::RIGHT: {
line_edit->grab_focus();
set_value((up ? get_max() : get_min()));
} break;
- case MOUSE_BUTTON_WHEEL_UP: {
+ case MouseButton::WHEEL_UP: {
if (line_edit->has_focus()) {
set_value(get_value() + get_step() * mb->get_factor());
accept_event();
}
} break;
- case MOUSE_BUTTON_WHEEL_DOWN: {
+ case MouseButton::WHEEL_DOWN: {
if (line_edit->has_focus()) {
set_value(get_value() - get_step() * mb->get_factor());
accept_event();
@@ -154,7 +154,7 @@ void SpinBox::gui_input(const Ref<InputEvent> &p_event) {
}
}
- if (mb.is_valid() && !mb->is_pressed() && mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (mb.is_valid() && !mb->is_pressed() && mb->get_button_index() == MouseButton::LEFT) {
//set_default_cursor_shape(CURSOR_ARROW);
range_click_timer->stop();
_release_mouse();
@@ -163,10 +163,10 @@ void SpinBox::gui_input(const Ref<InputEvent> &p_event) {
Ref<InputEventMouseMotion> mm = p_event;
- if (mm.is_valid() && mm->get_button_mask() & MOUSE_BUTTON_MASK_LEFT) {
+ if (mm.is_valid() && (mm->get_button_mask() & MouseButton::MASK_LEFT) != MouseButton::NONE) {
if (drag.enabled) {
drag.diff_y += mm->get_relative().y;
- float diff_y = -0.01 * Math::pow(ABS(drag.diff_y), 1.8f) * SGN(drag.diff_y);
+ float diff_y = -0.01 * Math::pow(ABS(drag.diff_y), 1.8f) * SIGN(drag.diff_y);
set_value(CLAMP(drag.base_val + get_step() * diff_y, get_min(), get_max()));
} else if (drag.allowed && drag.capture_pos.distance_to(mm->get_position()) > 2) {
Input::get_singleton()->set_mouse_mode(Input::MOUSE_MODE_CAPTURED);
diff --git a/scene/gui/split_container.cpp b/scene/gui/split_container.cpp
index 4736a1ad37..6b53c0220e 100644
--- a/scene/gui/split_container.cpp
+++ b/scene/gui/split_container.cpp
@@ -216,7 +216,7 @@ void SplitContainer::gui_input(const Ref<InputEvent> &p_event) {
Ref<InputEventMouseButton> mb = p_event;
if (mb.is_valid()) {
- if (mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (mb->get_button_index() == MouseButton::LEFT) {
if (mb->is_pressed()) {
int sep = get_theme_constant(SNAME("separation"));
diff --git a/scene/gui/tab_bar.cpp b/scene/gui/tab_bar.cpp
index 405fbdae75..57ee7fd494 100644
--- a/scene/gui/tab_bar.cpp
+++ b/scene/gui/tab_bar.cpp
@@ -143,7 +143,7 @@ void TabBar::gui_input(const Ref<InputEvent> &p_event) {
Ref<InputEventMouseButton> mb = p_event;
if (mb.is_valid()) {
- if (mb->is_pressed() && mb->get_button_index() == MOUSE_BUTTON_WHEEL_UP && !mb->is_command_pressed()) {
+ if (mb->is_pressed() && mb->get_button_index() == MouseButton::WHEEL_UP && !mb->is_command_pressed()) {
if (scrolling_enabled && buttons_visible) {
if (offset > 0) {
offset--;
@@ -152,7 +152,7 @@ void TabBar::gui_input(const Ref<InputEvent> &p_event) {
}
}
- if (mb->is_pressed() && mb->get_button_index() == MOUSE_BUTTON_WHEEL_DOWN && !mb->is_command_pressed()) {
+ if (mb->is_pressed() && mb->get_button_index() == MouseButton::WHEEL_DOWN && !mb->is_command_pressed()) {
if (scrolling_enabled && buttons_visible) {
if (missing_right) {
offset++;
@@ -162,7 +162,7 @@ void TabBar::gui_input(const Ref<InputEvent> &p_event) {
}
}
- if (rb_pressing && !mb->is_pressed() && mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (rb_pressing && !mb->is_pressed() && mb->get_button_index() == MouseButton::LEFT) {
if (rb_hover != -1) {
// pressed
emit_signal(SNAME("tab_rmb_clicked"), rb_hover);
@@ -172,7 +172,7 @@ void TabBar::gui_input(const Ref<InputEvent> &p_event) {
update();
}
- if (cb_pressing && !mb->is_pressed() && mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (cb_pressing && !mb->is_pressed() && mb->get_button_index() == MouseButton::LEFT) {
if (cb_hover != -1) {
// pressed
emit_signal(SNAME("tab_close_pressed"), cb_hover);
@@ -182,7 +182,7 @@ void TabBar::gui_input(const Ref<InputEvent> &p_event) {
update();
}
- if (mb->is_pressed() && (mb->get_button_index() == MOUSE_BUTTON_LEFT || (select_with_rmb && mb->get_button_index() == MOUSE_BUTTON_RIGHT))) {
+ if (mb->is_pressed() && (mb->get_button_index() == MouseButton::LEFT || (select_with_rmb && mb->get_button_index() == MouseButton::RIGHT))) {
// clicks
Point2 pos = mb->get_position();
@@ -790,7 +790,7 @@ void TabBar::clear_tabs() {
void TabBar::remove_tab(int p_idx) {
ERR_FAIL_INDEX(p_idx, tabs.size());
- tabs.remove(p_idx);
+ tabs.remove_at(p_idx);
if (current >= p_idx) {
current--;
}
@@ -961,7 +961,7 @@ void TabBar::move_tab(int from, int to) {
ERR_FAIL_INDEX(to, tabs.size());
Tab tab_from = tabs[from];
- tabs.remove(from);
+ tabs.remove_at(from);
tabs.insert(to, tab_from);
_update_cache();
diff --git a/scene/gui/tab_container.cpp b/scene/gui/tab_container.cpp
index c8a0501d8a..ff53d91ea3 100644
--- a/scene/gui/tab_container.cpp
+++ b/scene/gui/tab_container.cpp
@@ -78,7 +78,7 @@ void TabContainer::gui_input(const Ref<InputEvent> &p_event) {
Popup *popup = get_popup();
- if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == MouseButton::LEFT) {
Point2 pos = mb->get_position();
Size2 size = get_size();
diff --git a/scene/gui/text_edit.cpp b/scene/gui/text_edit.cpp
index cb7a6c0978..2cb9d10fca 100644
--- a/scene/gui/text_edit.cpp
+++ b/scene/gui/text_edit.cpp
@@ -300,11 +300,11 @@ void TextEdit::Text::insert(int p_at, const String &p_text, const Array &p_bidi_
invalidate_cache(p_at);
}
-void TextEdit::Text::remove(int p_at) {
- int height = text[p_at].height;
- int width = text[p_at].width;
+void TextEdit::Text::remove_at(int p_index) {
+ int height = text[p_index].height;
+ int width = text[p_index].width;
- text.remove(p_at);
+ text.remove_at(p_index);
// If this is the tallest line, we need to get the next tallest.
if (height == line_height) {
@@ -330,7 +330,7 @@ void TextEdit::Text::add_gutter(int p_at) {
void TextEdit::Text::remove_gutter(int p_gutter) {
for (int i = 0; i < text.size(); i++) {
- text.write[i].gutters.remove(p_gutter);
+ text.write[i].gutters.remove_at(p_gutter);
}
gutter_count--;
}
@@ -608,7 +608,7 @@ void TextEdit::_notification(int p_what) {
int draw_amount = visible_rows + (smooth_scroll_enabled ? 1 : 0);
draw_amount += get_line_wrap_count(first_visible_line + 1);
- // minimap
+ // Draw minimap.
if (draw_minimap) {
int minimap_visible_lines = get_minimap_visible_lines();
int minimap_line_height = (minimap_char_size.y + minimap_line_spacing);
@@ -788,8 +788,9 @@ void TextEdit::_notification(int p_what) {
bottom_limit_y -= style_normal->get_margin(SIDE_BOTTOM);
}
- // draw main text
+ // Draw main text.
caret.visible = false;
+ line_drawing_cache.clear();
int row_height = get_line_height();
int line = first_visible_line;
for (int i = 0; i < draw_amount; i++) {
@@ -810,6 +811,8 @@ void TextEdit::_notification(int p_what) {
continue;
}
+ LineDrawingCache cache_entry;
+
Dictionary color_map = _get_line_syntax_highlighting(line);
// Ensure we at least use the font color.
@@ -899,6 +902,8 @@ void TextEdit::_notification(int p_what) {
if (line_wrap_index == 0) {
// Only do these if we are on the first wrapped part of a line.
+ cache_entry.y_offset = ofs_y;
+
int gutter_offset = style_normal->get_margin(SIDE_LEFT);
for (int g = 0; g < gutters.size(); g++) {
const GutterInfo gutter = gutters[g];
@@ -1076,6 +1081,10 @@ void TextEdit::_notification(int p_what) {
int gl_size = TS->shaped_text_get_glyph_count(rid);
ofs_y += ldata->get_line_ascent(line_wrap_index);
+
+ int first_visible_char = TS->shaped_text_get_range(rid).y;
+ int last_visible_char = TS->shaped_text_get_range(rid).x;
+
int char_ofs = 0;
if (outline_size > 0 && outline_color.a > 0) {
for (int j = 0; j < gl_size; j++) {
@@ -1143,21 +1152,36 @@ void TextEdit::_notification(int p_what) {
}
}
+ bool had_glyphs_drawn = false;
for (int k = 0; k < glyphs[j].repeat; k++) {
if (!clipped && (char_ofs + char_margin) >= xmargin_beg && (char_ofs + glyphs[j].advance + char_margin) <= xmargin_end) {
if (glyphs[j].font_rid != RID()) {
TS->font_draw_glyph(glyphs[j].font_rid, ci, glyphs[j].font_size, Vector2(char_margin + char_ofs + ofs_x + glyphs[j].x_off, ofs_y + glyphs[j].y_off), glyphs[j].index, current_color);
+ had_glyphs_drawn = true;
} else if ((glyphs[j].flags & TextServer::GRAPHEME_IS_VIRTUAL) != TextServer::GRAPHEME_IS_VIRTUAL) {
TS->draw_hex_code_box(ci, glyphs[j].font_size, Vector2(char_margin + char_ofs + ofs_x + glyphs[j].x_off, ofs_y + glyphs[j].y_off), glyphs[j].index, current_color);
+ had_glyphs_drawn = true;
}
}
char_ofs += glyphs[j].advance;
}
+
+ if (had_glyphs_drawn) {
+ if (first_visible_char > glyphs[j].start) {
+ first_visible_char = glyphs[j].start;
+ } else if (last_visible_char < glyphs[j].end) {
+ last_visible_char = glyphs[j].end;
+ }
+ }
+
if ((char_ofs + char_margin) >= xmargin_end) {
break;
}
}
+ cache_entry.first_visible_chars.push_back(first_visible_char);
+ cache_entry.last_visible_chars.push_back(last_visible_char);
+
// is_line_folded
if (line_wrap_index == line_wrap_amount && line < text.size() - 1 && _is_line_hidden(line + 1)) {
int xofs = char_ofs + char_margin + ofs_x + (folded_eol_icon->get_width() / 2);
@@ -1308,6 +1332,8 @@ void TextEdit::_notification(int p_what) {
}
}
}
+
+ line_drawing_cache[line] = cache_entry;
}
if (has_focus()) {
@@ -1407,7 +1433,7 @@ void TextEdit::gui_input(const Ref<InputEvent> &p_gui_input) {
}
if (mb->is_pressed()) {
- if (mb->get_button_index() == MOUSE_BUTTON_WHEEL_UP && !mb->is_command_pressed()) {
+ if (mb->get_button_index() == MouseButton::WHEEL_UP && !mb->is_command_pressed()) {
if (mb->is_shift_pressed()) {
h_scroll->set_value(h_scroll->get_value() - (100 * mb->get_factor()));
} else if (mb->is_alt_pressed()) {
@@ -1418,7 +1444,7 @@ void TextEdit::gui_input(const Ref<InputEvent> &p_gui_input) {
_scroll_up(3 * mb->get_factor());
}
}
- if (mb->get_button_index() == MOUSE_BUTTON_WHEEL_DOWN && !mb->is_command_pressed()) {
+ if (mb->get_button_index() == MouseButton::WHEEL_DOWN && !mb->is_command_pressed()) {
if (mb->is_shift_pressed()) {
h_scroll->set_value(h_scroll->get_value() + (100 * mb->get_factor()));
} else if (mb->is_alt_pressed()) {
@@ -1429,13 +1455,13 @@ void TextEdit::gui_input(const Ref<InputEvent> &p_gui_input) {
_scroll_down(3 * mb->get_factor());
}
}
- if (mb->get_button_index() == MOUSE_BUTTON_WHEEL_LEFT) {
+ if (mb->get_button_index() == MouseButton::WHEEL_LEFT) {
h_scroll->set_value(h_scroll->get_value() - (100 * mb->get_factor()));
}
- if (mb->get_button_index() == MOUSE_BUTTON_WHEEL_RIGHT) {
+ if (mb->get_button_index() == MouseButton::WHEEL_RIGHT) {
h_scroll->set_value(h_scroll->get_value() + (100 * mb->get_factor()));
}
- if (mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (mb->get_button_index() == MouseButton::LEFT) {
_reset_caret_blink_timer();
Point2i pos = get_line_column_at_pos(mpos);
@@ -1538,11 +1564,11 @@ void TextEdit::gui_input(const Ref<InputEvent> &p_gui_input) {
update();
}
- if (is_middle_mouse_paste_enabled() && mb->get_button_index() == MOUSE_BUTTON_MIDDLE && DisplayServer::get_singleton()->has_feature(DisplayServer::FEATURE_CLIPBOARD_PRIMARY)) {
+ if (is_middle_mouse_paste_enabled() && mb->get_button_index() == MouseButton::MIDDLE && DisplayServer::get_singleton()->has_feature(DisplayServer::FEATURE_CLIPBOARD_PRIMARY)) {
paste_primary_clipboard();
}
- if (mb->get_button_index() == MOUSE_BUTTON_RIGHT && context_menu_enabled) {
+ if (mb->get_button_index() == MouseButton::RIGHT && context_menu_enabled) {
_reset_caret_blink_timer();
Point2i pos = get_line_column_at_pos(mpos);
@@ -1569,12 +1595,12 @@ void TextEdit::gui_input(const Ref<InputEvent> &p_gui_input) {
_generate_context_menu();
menu->set_position(get_screen_transform().xform(mpos));
- menu->set_size(Vector2(1, 1));
+ menu->reset_size();
menu->popup();
grab_focus();
}
} else {
- if (mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (mb->get_button_index() == MouseButton::LEFT) {
dragging_minimap = false;
dragging_selection = false;
can_drag_minimap = false;
@@ -1613,7 +1639,7 @@ void TextEdit::gui_input(const Ref<InputEvent> &p_gui_input) {
mpos.x = get_size().x - mpos.x;
}
- if (mm->get_button_mask() & MOUSE_BUTTON_MASK_LEFT && get_viewport()->gui_get_drag_data() == Variant()) { // Ignore if dragging.
+ if ((mm->get_button_mask() & MouseButton::MASK_LEFT) != MouseButton::NONE && get_viewport()->gui_get_drag_data() == Variant()) { // Ignore if dragging.
_reset_caret_blink_timer();
if (draw_minimap && !dragging_selection) {
@@ -1681,7 +1707,7 @@ void TextEdit::gui_input(const Ref<InputEvent> &p_gui_input) {
}
// If a modifier has been pressed, and nothing else, return.
- if (k->get_keycode() == KEY_CTRL || k->get_keycode() == KEY_ALT || k->get_keycode() == KEY_SHIFT || k->get_keycode() == KEY_META) {
+ if (k->get_keycode() == Key::CTRL || k->get_keycode() == Key::ALT || k->get_keycode() == Key::SHIFT || k->get_keycode() == Key::META) {
return;
}
@@ -1802,7 +1828,7 @@ void TextEdit::gui_input(const Ref<InputEvent> &p_gui_input) {
_generate_context_menu();
adjust_viewport_to_caret();
menu->set_position(get_screen_transform().xform(get_caret_draw_pos()));
- menu->set_size(Vector2(1, 1));
+ menu->reset_size();
menu->popup();
menu->grab_focus();
}
@@ -1898,7 +1924,7 @@ void TextEdit::gui_input(const Ref<InputEvent> &p_gui_input) {
}
// Handle Unicode (if no modifiers active). Tab has a value of 0x09.
- if (allow_unicode_handling && editable && (k->get_unicode() >= 32 || k->get_keycode() == KEY_TAB)) {
+ if (allow_unicode_handling && editable && (k->get_unicode() >= 32 || k->get_keycode() == Key::TAB)) {
handle_unicode_input(k->get_unicode());
accept_event();
return;
@@ -2878,6 +2904,16 @@ Point2i TextEdit::get_next_visible_line_index_offset_from(int p_line_from, int p
}
}
wrap_index = get_line_wrap_count(MIN(i, text.size() - 1)) - MAX(0, num_visible - p_visible_amount);
+
+ // If we are a hidden line, then we are the last line as we cannot reach "p_visible_amount".
+ // This means we need to backtrack to get last visible line.
+ // Currently, line 0 cannot be hidden so this should always be valid.
+ int line = (p_line_from + num_total) - 1;
+ if (_is_line_hidden(line)) {
+ Point2i backtrack = get_next_visible_line_index_offset_from(line, 0, -1);
+ num_total = num_total - (backtrack.x - 1);
+ wrap_index = backtrack.y;
+ }
} else {
p_visible_amount = ABS(p_visible_amount);
int i;
@@ -3386,7 +3422,7 @@ String TextEdit::get_word_at_pos(const Vector2 &p_pos) const {
return String();
}
-Point2i TextEdit::get_line_column_at_pos(const Point2i &p_pos) const {
+Point2i TextEdit::get_line_column_at_pos(const Point2i &p_pos, bool p_allow_out_of_bounds) const {
float rows = p_pos.y;
rows -= style_normal->get_margin(SIDE_TOP);
rows /= get_line_height();
@@ -3396,8 +3432,9 @@ Point2i TextEdit::get_line_column_at_pos(const Point2i &p_pos) const {
int wrap_index = 0;
if (get_line_wrapping_mode() != LineWrappingMode::LINE_WRAPPING_NONE || _is_hiding_enabled()) {
- Point2i f_ofs = get_next_visible_line_index_offset_from(first_vis_line, caret.wrap_ofs, rows + (1 * SGN(rows)));
+ Point2i f_ofs = get_next_visible_line_index_offset_from(first_vis_line, caret.wrap_ofs, rows + (1 * SIGN(rows)));
wrap_index = f_ofs.y;
+
if (rows < 0) {
row = first_vis_line - (f_ofs.x - 1);
} else {
@@ -3409,37 +3446,86 @@ Point2i TextEdit::get_line_column_at_pos(const Point2i &p_pos) const {
row = 0;
}
- int col = 0;
-
if (row >= text.size()) {
row = text.size() - 1;
- col = text[row].size();
- } else {
- int colx = p_pos.x - (style_normal->get_margin(SIDE_LEFT) + gutters_width + gutter_padding);
- colx += caret.x_ofs;
- col = _get_char_pos_for_line(colx, row, wrap_index);
- if (get_line_wrapping_mode() != LineWrappingMode::LINE_WRAPPING_NONE && wrap_index < get_line_wrap_count(row)) {
- // Move back one if we are at the end of the row.
- Vector<String> rows2 = get_line_wrapped_text(row);
- int row_end_col = 0;
- for (int i = 0; i < wrap_index + 1; i++) {
- row_end_col += rows2[i].length();
- }
- if (col >= row_end_col) {
- col -= 1;
- }
+ }
+
+ int visible_lines = get_visible_line_count_in_range(first_vis_line, row);
+ if (rows > visible_lines) {
+ if (!p_allow_out_of_bounds) {
+ return Point2i(-1, -1);
}
+ return Point2i(text[row].size(), row);
+ }
- RID text_rid = text.get_line_data(row)->get_line_rid(wrap_index);
- if (is_layout_rtl()) {
- colx = TS->shaped_text_get_size(text_rid).x - colx;
+ int col = 0;
+ int colx = p_pos.x - (style_normal->get_margin(SIDE_LEFT) + gutters_width + gutter_padding);
+ colx += caret.x_ofs;
+ col = _get_char_pos_for_line(colx, row, wrap_index);
+ if (get_line_wrapping_mode() != LineWrappingMode::LINE_WRAPPING_NONE && wrap_index < get_line_wrap_count(row)) {
+ // Move back one if we are at the end of the row.
+ Vector<String> rows2 = get_line_wrapped_text(row);
+ int row_end_col = 0;
+ for (int i = 0; i < wrap_index + 1; i++) {
+ row_end_col += rows2[i].length();
+ }
+ if (col >= row_end_col) {
+ col -= 1;
}
- col = TS->shaped_text_hit_test_position(text_rid, colx);
}
+ RID text_rid = text.get_line_data(row)->get_line_rid(wrap_index);
+ if (is_layout_rtl()) {
+ colx = TS->shaped_text_get_size(text_rid).x - colx;
+ }
+ col = TS->shaped_text_hit_test_position(text_rid, colx);
+
return Point2i(col, row);
}
+Point2i TextEdit::get_pos_at_line_column(int p_line, int p_column) const {
+ Rect2i rect = get_rect_at_line_column(p_line, p_column);
+ return rect.position + Vector2i(0, get_line_height());
+}
+
+Rect2i TextEdit::get_rect_at_line_column(int p_line, int p_column) const {
+ ERR_FAIL_INDEX_V(p_line, text.size(), Rect2i(-1, -1, 0, 0));
+ ERR_FAIL_COND_V(p_column < 0, Rect2i(-1, -1, 0, 0));
+ ERR_FAIL_COND_V(p_column > text[p_line].length(), Rect2i(-1, -1, 0, 0));
+
+ if (line_drawing_cache.size() == 0 || !line_drawing_cache.has(p_line)) {
+ // Line is not in the cache, which means it's outside of the viewing area.
+ return Rect2i(-1, -1, 0, 0);
+ }
+ LineDrawingCache cache_entry = line_drawing_cache[p_line];
+
+ int wrap_index = get_line_wrap_index_at_column(p_line, p_column);
+ if (wrap_index >= cache_entry.first_visible_chars.size()) {
+ // Line seems to be wrapped beyond the viewable area.
+ return Rect2i(-1, -1, 0, 0);
+ }
+
+ int first_visible_char = cache_entry.first_visible_chars[wrap_index];
+ int last_visible_char = cache_entry.last_visible_chars[wrap_index];
+ if (p_column < first_visible_char || p_column > last_visible_char) {
+ // Character is outside of the viewing area, no point calculating its position.
+ return Rect2i(-1, -1, 0, 0);
+ }
+
+ Point2i pos, size;
+ pos.y = cache_entry.y_offset + get_line_height() * wrap_index;
+ pos.x = get_total_gutter_width() + style_normal->get_margin(SIDE_LEFT) - get_h_scroll();
+
+ RID text_rid = text.get_line_data(p_line)->get_line_rid(wrap_index);
+ Vector2 col_bounds = TS->shaped_text_get_grapheme_bounds(text_rid, p_column);
+ pos.x += col_bounds.x;
+ size.x = col_bounds.y - col_bounds.x;
+
+ size.y = get_line_height();
+
+ return Rect2i(pos, size);
+}
+
int TextEdit::get_minimap_line_at_pos(const Point2i &p_pos) const {
float rows = p_pos.y;
rows -= style_normal->get_margin(SIDE_TOP);
@@ -3471,7 +3557,7 @@ int TextEdit::get_minimap_line_at_pos(const Point2i &p_pos) const {
int row = minimap_line + Math::floor(rows);
if (get_line_wrapping_mode() != LineWrappingMode::LINE_WRAPPING_NONE || _is_hiding_enabled()) {
- int f_ofs = get_next_visible_line_index_offset_from(minimap_line, caret.wrap_ofs, rows + (1 * SGN(rows))).x - 1;
+ int f_ofs = get_next_visible_line_index_offset_from(minimap_line, caret.wrap_ofs, rows + (1 * SIGN(rows))).x - 1;
if (rows < 0) {
row = minimap_line - f_ofs;
} else {
@@ -3697,8 +3783,10 @@ void TextEdit::set_selection_mode(SelectionMode p_mode, int p_line, int p_column
if (p_line >= 0) {
ERR_FAIL_INDEX(p_line, text.size());
selection.selecting_line = p_line;
+ selection.selecting_column = CLAMP(selection.selecting_column, 0, text[selection.selecting_line].length());
}
if (p_column >= 0) {
+ ERR_FAIL_INDEX(selection.selecting_line, text.size());
ERR_FAIL_INDEX(p_column, text[selection.selecting_line].length());
selection.selecting_column = p_column;
}
@@ -3878,7 +3966,7 @@ void TextEdit::delete_selection() {
update();
}
-/* line wrapping. */
+/* Line wrapping. */
void TextEdit::set_line_wrapping_mode(LineWrappingMode p_wrapping_mode) {
if (line_wrapping_mode != p_wrapping_mode) {
line_wrapping_mode = p_wrapping_mode;
@@ -4010,15 +4098,7 @@ double TextEdit::get_scroll_pos_for_line(int p_line, int p_wrap_index) const {
return p_line;
}
- // Count the number of visible lines up to this line.
- double new_line_scroll_pos = 0.0;
- int to = CLAMP(p_line, 0, text.size() - 1);
- for (int i = 0; i < to; i++) {
- if (!text.is_hidden(i)) {
- new_line_scroll_pos++;
- new_line_scroll_pos += get_line_wrap_count(i);
- }
- }
+ double new_line_scroll_pos = get_visible_line_count_in_range(0, CLAMP(p_line, 0, text.size() - 1));
new_line_scroll_pos += p_wrap_index;
return new_line_scroll_pos;
}
@@ -4075,14 +4155,18 @@ int TextEdit::get_visible_line_count() const {
return _get_control_height() / get_line_height();
}
-int TextEdit::get_total_visible_line_count() const {
+int TextEdit::get_visible_line_count_in_range(int p_from_line, int p_to_line) const {
+ ERR_FAIL_INDEX_V(p_from_line, text.size(), 0);
+ ERR_FAIL_INDEX_V(p_to_line, text.size(), 0);
+ ERR_FAIL_COND_V(p_from_line > p_to_line, 0);
+
/* Returns the total number of (lines + wrapped - hidden). */
if (!_is_hiding_enabled() && get_line_wrapping_mode() == LineWrappingMode::LINE_WRAPPING_NONE) {
- return text.size();
+ return p_to_line - p_from_line;
}
int total_rows = 0;
- for (int i = 0; i < text.size(); i++) {
+ for (int i = p_from_line; i <= p_to_line; i++) {
if (!text.is_hidden(i)) {
total_rows++;
total_rows += get_line_wrap_count(i);
@@ -4091,6 +4175,10 @@ int TextEdit::get_total_visible_line_count() const {
return total_rows;
}
+int TextEdit::get_total_visible_line_count() const {
+ return get_visible_line_count_in_range(0, text.size() - 1);
+}
+
// Auto adjust
void TextEdit::adjust_viewport_to_caret() {
// Make sure Caret is visible on the screen.
@@ -4259,7 +4347,7 @@ void TextEdit::add_gutter(int p_at) {
void TextEdit::remove_gutter(int p_gutter) {
ERR_FAIL_INDEX(p_gutter, gutters.size());
- gutters.remove(p_gutter);
+ gutters.remove_at(p_gutter);
for (int i = 0; i < text.size() + 1; i++) {
text.remove_gutter(p_gutter);
@@ -4681,7 +4769,10 @@ void TextEdit::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_word_at_pos", "position"), &TextEdit::get_word_at_pos);
- ClassDB::bind_method(D_METHOD("get_line_column_at_pos", "position"), &TextEdit::get_line_column_at_pos);
+ ClassDB::bind_method(D_METHOD("get_line_column_at_pos", "position", "allow_out_of_bounds"), &TextEdit::get_line_column_at_pos, DEFVAL(true));
+ ClassDB::bind_method(D_METHOD("get_pos_at_line_column", "line", "column"), &TextEdit::get_pos_at_line_column);
+ ClassDB::bind_method(D_METHOD("get_rect_at_line_column", "line", "column"), &TextEdit::get_rect_at_line_column);
+
ClassDB::bind_method(D_METHOD("get_minimap_line_at_pos", "position"), &TextEdit::get_minimap_line_at_pos);
ClassDB::bind_method(D_METHOD("is_dragging_cursor"), &TextEdit::is_dragging_cursor);
@@ -4759,7 +4850,7 @@ void TextEdit::_bind_methods() {
ClassDB::bind_method(D_METHOD("deselect"), &TextEdit::deselect);
ClassDB::bind_method(D_METHOD("delete_selection"), &TextEdit::delete_selection);
- /* line wrapping. */
+ /* Line wrapping. */
BIND_ENUM_CONSTANT(LINE_WRAPPING_NONE);
BIND_ENUM_CONSTANT(LINE_WRAPPING_BOUNDARY);
@@ -4805,6 +4896,7 @@ void TextEdit::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_last_full_visible_line_wrap_index"), &TextEdit::get_last_full_visible_line_wrap_index);
ClassDB::bind_method(D_METHOD("get_visible_line_count"), &TextEdit::get_visible_line_count);
+ ClassDB::bind_method(D_METHOD("get_visible_line_count_in_range", "from_line", "to_line"), &TextEdit::get_visible_line_count_in_range);
ClassDB::bind_method(D_METHOD("get_total_visible_line_count"), &TextEdit::get_total_visible_line_count);
// Auto adjust
@@ -5249,21 +5341,21 @@ void TextEdit::_generate_context_menu() {
// Reorganize context menu.
menu->clear();
if (editable) {
- menu->add_item(RTR("Cut"), MENU_CUT, is_shortcut_keys_enabled() ? _get_menu_action_accelerator("ui_cut") : 0);
+ menu->add_item(RTR("Cut"), MENU_CUT, is_shortcut_keys_enabled() ? _get_menu_action_accelerator("ui_cut") : Key::NONE);
}
- menu->add_item(RTR("Copy"), MENU_COPY, is_shortcut_keys_enabled() ? _get_menu_action_accelerator("ui_copy") : 0);
+ menu->add_item(RTR("Copy"), MENU_COPY, is_shortcut_keys_enabled() ? _get_menu_action_accelerator("ui_copy") : Key::NONE);
if (editable) {
- menu->add_item(RTR("Paste"), MENU_PASTE, is_shortcut_keys_enabled() ? _get_menu_action_accelerator("ui_paste") : 0);
+ menu->add_item(RTR("Paste"), MENU_PASTE, is_shortcut_keys_enabled() ? _get_menu_action_accelerator("ui_paste") : Key::NONE);
}
menu->add_separator();
if (is_selecting_enabled()) {
- menu->add_item(RTR("Select All"), MENU_SELECT_ALL, is_shortcut_keys_enabled() ? _get_menu_action_accelerator("ui_text_select_all") : 0);
+ menu->add_item(RTR("Select All"), MENU_SELECT_ALL, is_shortcut_keys_enabled() ? _get_menu_action_accelerator("ui_text_select_all") : Key::NONE);
}
if (editable) {
menu->add_item(RTR("Clear"), MENU_CLEAR);
menu->add_separator();
- menu->add_item(RTR("Undo"), MENU_UNDO, is_shortcut_keys_enabled() ? _get_menu_action_accelerator("ui_undo") : 0);
- menu->add_item(RTR("Redo"), MENU_REDO, is_shortcut_keys_enabled() ? _get_menu_action_accelerator("ui_redo") : 0);
+ menu->add_item(RTR("Undo"), MENU_UNDO, is_shortcut_keys_enabled() ? _get_menu_action_accelerator("ui_undo") : Key::NONE);
+ menu->add_item(RTR("Redo"), MENU_REDO, is_shortcut_keys_enabled() ? _get_menu_action_accelerator("ui_redo") : Key::NONE);
}
menu->add_separator();
menu->add_submenu_item(RTR("Text Writing Direction"), "DirMenu");
@@ -5284,25 +5376,25 @@ void TextEdit::_generate_context_menu() {
}
}
-int TextEdit::_get_menu_action_accelerator(const String &p_action) {
+Key TextEdit::_get_menu_action_accelerator(const String &p_action) {
const List<Ref<InputEvent>> *events = InputMap::get_singleton()->action_get_events(p_action);
if (!events) {
- return 0;
+ return Key::NONE;
}
// Use first event in the list for the accelerator.
const List<Ref<InputEvent>>::Element *first_event = events->front();
if (!first_event) {
- return 0;
+ return Key::NONE;
}
const Ref<InputEventKey> event = first_event->get();
if (event.is_null()) {
- return 0;
+ return Key::NONE;
}
// Use physical keycode if non-zero
- if (event->get_physical_keycode() != 0) {
+ if (event->get_physical_keycode() != Key::NONE) {
return event->get_physical_keycode_with_modifiers();
} else {
return event->get_keycode_with_modifiers();
@@ -5457,10 +5549,10 @@ int TextEdit::_get_column_x_offset_for_line(int p_char, int p_line) const {
/* Selection */
void TextEdit::_click_selection_held() {
- // Warning: is_mouse_button_pressed(MOUSE_BUTTON_LEFT) returns false for double+ clicks, so this doesn't work for MODE_WORD
+ // Warning: is_mouse_button_pressed(MouseButton::LEFT) returns false for double+ clicks, so this doesn't work for MODE_WORD
// and MODE_LINE. However, moving the mouse triggers _gui_input, which calls these functions too, so that's not a huge problem.
// I'm unsure if there's an actual fix that doesn't have a ton of side effects.
- if (Input::get_singleton()->is_mouse_button_pressed(MOUSE_BUTTON_LEFT) && selection.selecting_mode != SelectionMode::SELECTION_MODE_NONE) {
+ if (Input::get_singleton()->is_mouse_button_pressed(MouseButton::LEFT) && selection.selecting_mode != SelectionMode::SELECTION_MODE_NONE) {
switch (selection.selecting_mode) {
case SelectionMode::SELECTION_MODE_POINTER: {
_update_selection_mode_pointer();
@@ -5760,7 +5852,7 @@ double TextEdit::_get_v_scroll_offset() const {
}
void TextEdit::_scroll_up(real_t p_delta) {
- if (scrolling && smooth_scroll_enabled && SGN(target_v_scroll - v_scroll->get_value()) != SGN(-p_delta)) {
+ if (scrolling && smooth_scroll_enabled && SIGN(target_v_scroll - v_scroll->get_value()) != SIGN(-p_delta)) {
scrolling = false;
minimap_clicked = false;
}
@@ -5787,7 +5879,7 @@ void TextEdit::_scroll_up(real_t p_delta) {
}
void TextEdit::_scroll_down(real_t p_delta) {
- if (scrolling && smooth_scroll_enabled && SGN(target_v_scroll - v_scroll->get_value()) != SGN(p_delta)) {
+ if (scrolling && smooth_scroll_enabled && SIGN(target_v_scroll - v_scroll->get_value()) != SIGN(p_delta)) {
scrolling = false;
minimap_clicked = false;
}
@@ -6157,7 +6249,7 @@ void TextEdit::_base_remove_text(int p_from_line, int p_from_column, int p_to_li
String post_text = text[p_to_line].substr(p_to_column, text[p_to_line].length());
for (int i = p_from_line; i < p_to_line; i++) {
- text.remove(p_from_line + 1);
+ text.remove_at(p_from_line + 1);
}
text.set(p_from_line, pre_text + post_text, structured_text_parser(st_parser, st_args, pre_text + post_text));
diff --git a/scene/gui/text_edit.h b/scene/gui/text_edit.h
index 23f80efce0..42b21cbe9c 100644
--- a/scene/gui/text_edit.h
+++ b/scene/gui/text_edit.h
@@ -205,7 +205,7 @@ private:
}
bool is_hidden(int p_line) const { return text[p_line].hidden; }
void insert(int p_at, const String &p_text, const Array &p_bidi_override);
- void remove(int p_at);
+ void remove_at(int p_index);
int size() const { return text.size(); }
void clear();
@@ -271,7 +271,7 @@ private:
bool virtual_keyboard_enabled = true;
bool middle_mouse_paste_enabled = true;
- // Overridable actions
+ // Overridable actions.
String cut_copy_line = "";
// Context menu.
@@ -280,7 +280,7 @@ private:
PopupMenu *menu_ctl = nullptr;
void _generate_context_menu();
- int _get_menu_action_accelerator(const String &p_action);
+ Key _get_menu_action_accelerator(const String &p_action);
/* Versioning */
struct TextOperation {
@@ -336,6 +336,14 @@ private:
Variant tooltip_ud;
/* Mouse */
+ struct LineDrawingCache {
+ int y_offset = 0;
+ Vector<int> first_visible_chars;
+ Vector<int> last_visible_chars;
+ };
+
+ Map<int, LineDrawingCache> line_drawing_cache;
+
int _get_char_pos_for_line(int p_px, int p_line, int p_wrap_index = 0) const;
/* Caret. */
@@ -415,7 +423,7 @@ private:
void _pre_shift_selection();
void _post_shift_selection();
- /* line wrapping. */
+ /* Line wrapping. */
LineWrappingMode line_wrapping_mode = LineWrappingMode::LINE_WRAPPING_NONE;
int wrap_at_column = 0;
@@ -455,14 +463,14 @@ private:
void _scroll_lines_up();
void _scroll_lines_down();
- // Minimap
+ // Minimap.
bool draw_minimap = false;
int minimap_width = 80;
Point2 minimap_char_size = Point2(1, 2);
int minimap_line_spacing = 1;
- // minimap scroll
+ // Minimap scroll.
bool minimap_clicked = false;
bool hovering_minimap = false;
bool dragging_minimap = false;
@@ -716,7 +724,10 @@ public:
String get_word_at_pos(const Vector2 &p_pos) const;
- Point2i get_line_column_at_pos(const Point2i &p_pos) const;
+ Point2i get_line_column_at_pos(const Point2i &p_pos, bool p_allow_out_of_bounds = true) const;
+ Point2i get_pos_at_line_column(int p_line, int p_column) const;
+ Rect2i get_rect_at_line_column(int p_line, int p_column) const;
+
int get_minimap_line_at_pos(const Point2i &p_pos) const;
bool is_dragging_cursor() const;
@@ -782,7 +793,7 @@ public:
void deselect();
void delete_selection();
- /* line wrapping. */
+ /* Line wrapping. */
void set_line_wrapping_mode(LineWrappingMode p_wrapping_mode);
LineWrappingMode get_line_wrapping_mode() const;
@@ -822,6 +833,7 @@ public:
int get_last_full_visible_line_wrap_index() const;
int get_visible_line_count() const;
+ int get_visible_line_count_in_range(int p_from, int p_to) const;
int get_total_visible_line_count() const;
// Auto Adjust
diff --git a/scene/gui/tree.cpp b/scene/gui/tree.cpp
index 1245a37c4d..89caaaafd0 100644
--- a/scene/gui/tree.cpp
+++ b/scene/gui/tree.cpp
@@ -848,7 +848,7 @@ String TreeItem::get_button_tooltip(int p_column, int p_idx) const {
void TreeItem::erase_button(int p_column, int p_idx) {
ERR_FAIL_INDEX(p_column, cells.size());
ERR_FAIL_INDEX(p_idx, cells[p_column].buttons.size());
- cells.write[p_column].buttons.remove(p_idx);
+ cells.write[p_column].buttons.remove_at(p_idx);
_changed_notify(p_column);
}
@@ -1955,7 +1955,7 @@ int Tree::draw_item(const Point2i &p_pos, const Point2 &p_draw_ofs, const Size2
if (p_item->cells[i].custom_button) {
if (cache.hover_item == p_item && cache.hover_cell == i) {
- if (Input::get_singleton()->is_mouse_button_pressed(MOUSE_BUTTON_LEFT)) {
+ if (Input::get_singleton()->is_mouse_button_pressed(MouseButton::LEFT)) {
draw_style_box(cache.custom_button_pressed, ir);
} else {
draw_style_box(cache.custom_button_hover, ir);
@@ -2256,7 +2256,7 @@ Rect2 Tree::search_item_rect(TreeItem *p_from, TreeItem *p_item) {
}
void Tree::_range_click_timeout() {
- if (range_item_last && !range_drag_enabled && Input::get_singleton()->is_mouse_button_pressed(MOUSE_BUTTON_LEFT)) {
+ if (range_item_last && !range_drag_enabled && Input::get_singleton()->is_mouse_button_pressed(MouseButton::LEFT)) {
Point2 pos = get_local_mouse_position() - cache.bg->get_offset();
if (show_column_titles) {
pos.y -= _get_title_button_height();
@@ -2284,7 +2284,7 @@ void Tree::_range_click_timeout() {
propagate_mouse_activated = false; // done from outside, so signal handler can't clear the tree in the middle of emit (which is a common case)
blocked++;
- propagate_mouse_event(pos + cache.offset, 0, 0, x_limit + cache.offset.width, false, root, MOUSE_BUTTON_LEFT, mb);
+ propagate_mouse_event(pos + cache.offset, 0, 0, x_limit + cache.offset.width, false, root, MouseButton::LEFT, mb);
blocked--;
if (range_click_timer->is_one_shot()) {
@@ -2307,7 +2307,7 @@ void Tree::_range_click_timeout() {
}
}
-int Tree::propagate_mouse_event(const Point2i &p_pos, int x_ofs, int y_ofs, int x_limit, bool p_double_click, TreeItem *p_item, int p_button, const Ref<InputEventWithModifiers> &p_mod) {
+int Tree::propagate_mouse_event(const Point2i &p_pos, int x_ofs, int y_ofs, int x_limit, bool p_double_click, TreeItem *p_item, MouseButton p_button, const Ref<InputEventWithModifiers> &p_mod) {
int item_h = compute_item_height(p_item) + cache.vseparation;
bool skip = (p_item == root && hide_root);
@@ -2427,7 +2427,7 @@ int Tree::propagate_mouse_event(const Point2i &p_pos, int x_ofs, int y_ofs, int
col_width -= w + cache.button_margin;
}
- if (p_button == MOUSE_BUTTON_LEFT || (p_button == MOUSE_BUTTON_RIGHT && allow_rmb_select)) {
+ if (p_button == MouseButton::LEFT || (p_button == MouseButton::RIGHT && allow_rmb_select)) {
/* process selection */
if (p_double_click && (!c.editable || c.mode == TreeItem::CELL_MODE_CUSTOM || c.mode == TreeItem::CELL_MODE_ICON /*|| c.mode==TreeItem::CELL_MODE_CHECK*/)) { //it's confusing for check
@@ -2439,10 +2439,10 @@ int Tree::propagate_mouse_event(const Point2i &p_pos, int x_ofs, int y_ofs, int
}
if (select_mode == SELECT_MULTI && p_mod->is_command_pressed() && c.selectable) {
- if (!c.selected || p_button == MOUSE_BUTTON_RIGHT) {
+ if (!c.selected || p_button == MouseButton::RIGHT) {
p_item->select(col);
emit_signal(SNAME("multi_selected"), p_item, col, true);
- if (p_button == MOUSE_BUTTON_RIGHT) {
+ if (p_button == MouseButton::RIGHT) {
emit_signal(SNAME("item_rmb_selected"), get_local_mouse_position());
}
@@ -2459,21 +2459,21 @@ int Tree::propagate_mouse_event(const Point2i &p_pos, int x_ofs, int y_ofs, int
bool inrange = false;
select_single_item(p_item, root, col, selected_item, &inrange);
- if (p_button == MOUSE_BUTTON_RIGHT) {
+ if (p_button == MouseButton::RIGHT) {
emit_signal(SNAME("item_rmb_selected"), get_local_mouse_position());
}
} else {
int icount = _count_selected_items(root);
- if (select_mode == SELECT_MULTI && icount > 1 && p_button != MOUSE_BUTTON_RIGHT) {
+ if (select_mode == SELECT_MULTI && icount > 1 && p_button != MouseButton::RIGHT) {
single_select_defer = p_item;
single_select_defer_column = col;
} else {
- if (p_button != MOUSE_BUTTON_RIGHT || !c.selected) {
+ if (p_button != MouseButton::RIGHT || !c.selected) {
select_single_item(p_item, root, col);
}
- if (p_button == MOUSE_BUTTON_RIGHT) {
+ if (p_button == MouseButton::RIGHT) {
emit_signal(SNAME("item_rmb_selected"), get_local_mouse_position());
}
}
@@ -2543,7 +2543,7 @@ int Tree::propagate_mouse_event(const Point2i &p_pos, int x_ofs, int y_ofs, int
/* touching the combo */
bool up = p_pos.y < (item_h / 2);
- if (p_button == MOUSE_BUTTON_LEFT) {
+ if (p_button == MouseButton::LEFT) {
if (range_click_timer->get_time_left() == 0) {
range_item_last = p_item;
range_up_last = up;
@@ -2560,13 +2560,13 @@ int Tree::propagate_mouse_event(const Point2i &p_pos, int x_ofs, int y_ofs, int
item_edited(col, p_item);
- } else if (p_button == MOUSE_BUTTON_RIGHT) {
+ } else if (p_button == MouseButton::RIGHT) {
p_item->set_range(col, (up ? c.max : c.min));
item_edited(col, p_item);
- } else if (p_button == MOUSE_BUTTON_WHEEL_UP) {
+ } else if (p_button == MouseButton::WHEEL_UP) {
p_item->set_range(col, c.val + c.step);
item_edited(col, p_item);
- } else if (p_button == MOUSE_BUTTON_WHEEL_DOWN) {
+ } else if (p_button == MouseButton::WHEEL_DOWN) {
p_item->set_range(col, c.val - c.step);
item_edited(col, p_item);
}
@@ -2599,14 +2599,14 @@ int Tree::propagate_mouse_event(const Point2i &p_pos, int x_ofs, int y_ofs, int
}
if (!p_item->cells[col].custom_button || !on_arrow) {
- item_edited(col, p_item, p_button == MOUSE_BUTTON_LEFT);
+ item_edited(col, p_item, p_button == MouseButton::LEFT);
}
click_handled = true;
return -1;
} break;
};
- if (!bring_up_editor || p_button != MOUSE_BUTTON_LEFT) {
+ if (!bring_up_editor || p_button != MouseButton::LEFT) {
return -1;
}
@@ -2646,7 +2646,7 @@ int Tree::propagate_mouse_event(const Point2i &p_pos, int x_ofs, int y_ofs, int
item_h += child_h;
}
}
- if (p_item == root && p_button == MOUSE_BUTTON_RIGHT) {
+ if (p_item == root && p_button == MouseButton::RIGHT) {
emit_signal(SNAME("empty_rmb"), get_local_mouse_position());
}
}
@@ -2655,9 +2655,9 @@ int Tree::propagate_mouse_event(const Point2i &p_pos, int x_ofs, int y_ofs, int
}
void Tree::_text_editor_modal_close() {
- if (Input::get_singleton()->is_key_pressed(KEY_ESCAPE) ||
- Input::get_singleton()->is_key_pressed(KEY_KP_ENTER) ||
- Input::get_singleton()->is_key_pressed(KEY_ENTER)) {
+ if (Input::get_singleton()->is_key_pressed(Key::ESCAPE) ||
+ Input::get_singleton()->is_key_pressed(Key::KP_ENTER) ||
+ Input::get_singleton()->is_key_pressed(Key::ENTER)) {
return;
}
@@ -3048,7 +3048,7 @@ void Tree::gui_input(const Ref<InputEvent> &p_event) {
return;
} else {
- if (k->get_keycode() != KEY_SHIFT) {
+ if (k->get_keycode() != Key::SHIFT) {
last_keypress = 0;
}
}
@@ -3164,7 +3164,7 @@ void Tree::gui_input(const Ref<InputEvent> &p_event) {
} else {
const TreeItem::Cell &c = popup_edited_item->cells[popup_edited_item_col];
float diff_y = -mm->get_relative().y;
- diff_y = Math::pow(ABS(diff_y), 1.8f) * SGN(diff_y);
+ diff_y = Math::pow(ABS(diff_y), 1.8f) * SIGN(diff_y);
diff_y *= 0.1;
range_drag_base = CLAMP(range_drag_base + c.step * diff_y, c.min, c.max);
popup_edited_item->set_range(popup_edited_item_col, range_drag_base);
@@ -3189,7 +3189,7 @@ void Tree::gui_input(const Ref<InputEvent> &p_event) {
bool rtl = is_layout_rtl();
if (!b->is_pressed()) {
- if (b->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (b->get_button_index() == MouseButton::LEFT) {
Point2 pos = b->get_position();
if (rtl) {
pos.x = get_size().width - pos.x;
@@ -3270,8 +3270,8 @@ void Tree::gui_input(const Ref<InputEvent> &p_event) {
}
switch (b->get_button_index()) {
- case MOUSE_BUTTON_RIGHT:
- case MOUSE_BUTTON_LEFT: {
+ case MouseButton::RIGHT:
+ case MouseButton::LEFT: {
Ref<StyleBox> bg = cache.bg;
Point2 pos = b->get_position();
@@ -3284,7 +3284,7 @@ void Tree::gui_input(const Ref<InputEvent> &p_event) {
pos.y -= _get_title_button_height();
if (pos.y < 0) {
- if (b->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (b->get_button_index() == MouseButton::LEFT) {
pos.x += cache.offset.x;
int len = 0;
for (int i = 0; i < columns.size(); i++) {
@@ -3302,7 +3302,7 @@ void Tree::gui_input(const Ref<InputEvent> &p_event) {
}
}
if (!root || (!root->get_first_child() && hide_root)) {
- if (b->get_button_index() == MOUSE_BUTTON_RIGHT && allow_rmb_select) {
+ if (b->get_button_index() == MouseButton::RIGHT && allow_rmb_select) {
emit_signal(SNAME("empty_tree_rmb_selected"), get_local_mouse_position());
}
break;
@@ -3329,7 +3329,7 @@ void Tree::gui_input(const Ref<InputEvent> &p_event) {
}
}
- if (b->get_button_index() == MOUSE_BUTTON_RIGHT) {
+ if (b->get_button_index() == MouseButton::RIGHT) {
break;
}
@@ -3352,7 +3352,7 @@ void Tree::gui_input(const Ref<InputEvent> &p_event) {
set_physics_process_internal(true);
}
- if (b->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (b->get_button_index() == MouseButton::LEFT) {
if (get_item_at_position(b->get_position()) == nullptr && !b->is_shift_pressed() && !b->is_ctrl_pressed() && !b->is_command_pressed()) {
emit_signal(SNAME("nothing_selected"));
}
@@ -3365,7 +3365,7 @@ void Tree::gui_input(const Ref<InputEvent> &p_event) {
}
} break;
- case MOUSE_BUTTON_WHEEL_UP: {
+ case MouseButton::WHEEL_UP: {
double prev_value = v_scroll->get_value();
v_scroll->set_value(v_scroll->get_value() - v_scroll->get_page() * b->get_factor() / 8);
if (v_scroll->get_value() != prev_value) {
@@ -3373,7 +3373,7 @@ void Tree::gui_input(const Ref<InputEvent> &p_event) {
}
} break;
- case MOUSE_BUTTON_WHEEL_DOWN: {
+ case MouseButton::WHEEL_DOWN: {
double prev_value = v_scroll->get_value();
v_scroll->set_value(v_scroll->get_value() + v_scroll->get_page() * b->get_factor() / 8);
if (v_scroll->get_value() != prev_value) {
diff --git a/scene/gui/tree.h b/scene/gui/tree.h
index 6ca9458e9b..d4caec614a 100644
--- a/scene/gui/tree.h
+++ b/scene/gui/tree.h
@@ -171,7 +171,7 @@ private:
}
if (parent) {
if (!parent->children_cache.is_empty()) {
- parent->children_cache.remove(get_index());
+ parent->children_cache.remove_at(get_index());
}
if (parent->first_child == this) {
parent->first_child = next;
@@ -462,7 +462,7 @@ private:
void draw_item_rect(TreeItem::Cell &p_cell, const Rect2i &p_rect, const Color &p_color, const Color &p_icon_color, int p_ol_size, const Color &p_ol_color);
int draw_item(const Point2i &p_pos, const Point2 &p_draw_ofs, const Size2 &p_draw_size, TreeItem *p_item);
void select_single_item(TreeItem *p_selected, TreeItem *p_current, int p_col, TreeItem *p_prev = nullptr, bool *r_in_range = nullptr, bool p_force_deselect = false);
- int propagate_mouse_event(const Point2i &p_pos, int x_ofs, int y_ofs, int x_limit, bool p_double_click, TreeItem *p_item, int p_button, const Ref<InputEventWithModifiers> &p_mod);
+ int propagate_mouse_event(const Point2i &p_pos, int x_ofs, int y_ofs, int x_limit, bool p_double_click, TreeItem *p_item, MouseButton p_button, const Ref<InputEventWithModifiers> &p_mod);
void _text_editor_submit(String p_text);
void _text_editor_modal_close();
void value_editor_changed(double p_value);
diff --git a/scene/main/canvas_item.cpp b/scene/main/canvas_item.cpp
index 5065684839..22e3c3bf24 100644
--- a/scene/main/canvas_item.cpp
+++ b/scene/main/canvas_item.cpp
@@ -274,6 +274,7 @@ void CanvasItem::_exit_canvas() {
void CanvasItem::_notification(int p_what) {
switch (p_what) {
case NOTIFICATION_ENTER_TREE: {
+ ERR_FAIL_COND(!is_inside_tree());
_update_texture_filter_changed(false);
_update_texture_repeat_changed(false);
diff --git a/scene/main/canvas_layer.cpp b/scene/main/canvas_layer.cpp
index 26bff4494b..cd7534f73c 100644
--- a/scene/main/canvas_layer.cpp
+++ b/scene/main/canvas_layer.cpp
@@ -256,7 +256,7 @@ void CanvasLayer::_update_follow_viewport(bool p_force_exit) {
void CanvasLayer::_validate_property(PropertyInfo &property) const {
if (!follow_viewport && property.name == "follow_viewport_scale") {
- property.usage = PROPERTY_USAGE_NOEDITOR;
+ property.usage = PROPERTY_USAGE_NO_EDITOR;
}
}
diff --git a/scene/main/node.cpp b/scene/main/node.cpp
index 189aebb47d..0d646ff2a9 100644
--- a/scene/main/node.cpp
+++ b/scene/main/node.cpp
@@ -114,7 +114,7 @@ void Node::_notification(int p_notification) {
get_multiplayer()->scene_enter_exit_notify(data.scene_file_path, this, false);
}
} break;
- case NOTIFICATION_PATH_CHANGED: {
+ case NOTIFICATION_PATH_RENAMED: {
if (data.path_cache) {
memdelete(data.path_cache);
data.path_cache = nullptr;
@@ -332,7 +332,7 @@ void Node::_move_child(Node *p_child, int p_pos, bool p_ignore_end) {
int motion_from = MIN(p_pos, p_child->data.pos);
int motion_to = MAX(p_pos, p_child->data.pos);
- data.children.remove(p_child->data.pos);
+ data.children.remove_at(p_child->data.pos);
data.children.insert(p_pos, p_child);
if (data.tree) {
@@ -899,7 +899,7 @@ void Node::set_name(const String &p_name) {
data.parent->_validate_child_name(this);
}
- propagate_notification(NOTIFICATION_PATH_CHANGED);
+ propagate_notification(NOTIFICATION_PATH_RENAMED);
if (is_inside_tree()) {
emit_signal(SNAME("renamed"));
@@ -908,17 +908,12 @@ void Node::set_name(const String &p_name) {
}
}
-static bool node_hrcr = false;
static SafeRefCount node_hrcr_count;
void Node::init_node_hrcr() {
node_hrcr_count.init(1);
}
-void Node::set_human_readable_collision_renaming(bool p_enabled) {
- node_hrcr = p_enabled;
-}
-
#ifdef TOOLS_ENABLED
String Node::validate_child_name(Node *p_child) {
StringName name = p_child->data.name;
@@ -930,9 +925,8 @@ String Node::validate_child_name(Node *p_child) {
void Node::_validate_child_name(Node *p_child, bool p_force_human_readable) {
/* Make sure the name is unique */
- if (node_hrcr || p_force_human_readable) {
+ if (p_force_human_readable) {
//this approach to autoset node names is human readable but very slow
- //it's turned on while running in the editor
StringName name = p_child->data.name;
_generate_serial_child_name(p_child, name);
@@ -1214,7 +1208,7 @@ void Node::remove_child(Node *p_child) {
remove_child_notify(p_child);
p_child->notification(NOTIFICATION_UNPARENTED);
- data.children.remove(idx);
+ data.children.remove_at(idx);
//update pointer and size
child_count = data.children.size();
@@ -1899,6 +1893,56 @@ Node *Node::get_deepest_editable_node(Node *p_start_node) const {
return node;
}
+#ifdef TOOLS_ENABLED
+void Node::set_property_pinned(const String &p_property, bool p_pinned) {
+ bool current_pinned = false;
+ bool has_pinned = has_meta("_edit_pinned_properties_");
+ Array pinned;
+ String psa = get_property_store_alias(p_property);
+ if (has_pinned) {
+ pinned = get_meta("_edit_pinned_properties_");
+ current_pinned = pinned.has(psa);
+ }
+
+ if (current_pinned != p_pinned) {
+ if (p_pinned) {
+ pinned.append(psa);
+ if (!has_pinned) {
+ set_meta("_edit_pinned_properties_", pinned);
+ }
+ } else {
+ pinned.erase(psa);
+ if (pinned.is_empty()) {
+ remove_meta("_edit_pinned_properties_");
+ }
+ }
+ }
+}
+
+bool Node::is_property_pinned(const StringName &p_property) const {
+ if (!has_meta("_edit_pinned_properties_")) {
+ return false;
+ }
+ Array pinned = get_meta("_edit_pinned_properties_");
+ String psa = get_property_store_alias(p_property);
+ return pinned.has(psa);
+}
+
+StringName Node::get_property_store_alias(const StringName &p_property) const {
+ return p_property;
+}
+#endif
+
+void Node::get_storable_properties(Set<StringName> &r_storable_properties) const {
+ List<PropertyInfo> pi;
+ get_property_list(&pi);
+ for (List<PropertyInfo>::Element *E = pi.front(); E; E = E->next()) {
+ if ((E->get().usage & PROPERTY_USAGE_STORAGE)) {
+ r_storable_properties.insert(E->get().name);
+ }
+ }
+}
+
String Node::to_string() {
if (get_script_instance()) {
bool valid;
@@ -2750,7 +2794,11 @@ void Node::_bind_methods() {
ClassDB::bind_method(D_METHOD("_set_import_path", "import_path"), &Node::set_import_path);
ClassDB::bind_method(D_METHOD("_get_import_path"), &Node::get_import_path);
- ADD_PROPERTY(PropertyInfo(Variant::NODE_PATH, "_import_path", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL), "_set_import_path", "_get_import_path");
+#ifdef TOOLS_ENABLED
+ ClassDB::bind_method(D_METHOD("_set_property_pinned", "property", "pinned"), &Node::set_property_pinned);
+#endif
+
+ ADD_PROPERTY(PropertyInfo(Variant::NODE_PATH, "_import_path", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL), "_set_import_path", "_get_import_path");
{
MethodInfo mi;
@@ -2781,7 +2829,7 @@ void Node::_bind_methods() {
BIND_CONSTANT(NOTIFICATION_INSTANCED);
BIND_CONSTANT(NOTIFICATION_DRAG_BEGIN);
BIND_CONSTANT(NOTIFICATION_DRAG_END);
- BIND_CONSTANT(NOTIFICATION_PATH_CHANGED);
+ BIND_CONSTANT(NOTIFICATION_PATH_RENAMED);
BIND_CONSTANT(NOTIFICATION_INTERNAL_PROCESS);
BIND_CONSTANT(NOTIFICATION_INTERNAL_PHYSICS_PROCESS);
BIND_CONSTANT(NOTIFICATION_POST_ENTER_TREE);
@@ -2841,7 +2889,7 @@ void Node::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::INT, "process_priority"), "set_process_priority", "get_process_priority");
ADD_GROUP("Editor Description", "editor_");
- ADD_PROPERTY(PropertyInfo(Variant::STRING, "editor_description", PROPERTY_HINT_MULTILINE_TEXT, "", PROPERTY_USAGE_EDITOR | PROPERTY_USAGE_INTERNAL), "set_editor_description", "get_editor_description");
+ ADD_PROPERTY(PropertyInfo(Variant::STRING, "editor_description", PROPERTY_HINT_MULTILINE_TEXT), "set_editor_description", "get_editor_description");
GDVIRTUAL_BIND(_process, "delta");
GDVIRTUAL_BIND(_physics_process, "delta");
diff --git a/scene/main/node.h b/scene/main/node.h
index e59a7a390a..dc74a33580 100644
--- a/scene/main/node.h
+++ b/scene/main/node.h
@@ -256,7 +256,7 @@ public:
NOTIFICATION_INSTANCED = 20,
NOTIFICATION_DRAG_BEGIN = 21,
NOTIFICATION_DRAG_END = 22,
- NOTIFICATION_PATH_CHANGED = 23,
+ NOTIFICATION_PATH_RENAMED = 23,
//NOTIFICATION_TRANSLATION_CHANGED = 24, moved below
NOTIFICATION_INTERNAL_PROCESS = 25,
NOTIFICATION_INTERNAL_PHYSICS_PROCESS = 26,
@@ -363,6 +363,13 @@ public:
bool is_editable_instance(const Node *p_node) const;
Node *get_deepest_editable_node(Node *p_start_node) const;
+#ifdef TOOLS_ENABLED
+ void set_property_pinned(const String &p_property, bool p_pinned);
+ bool is_property_pinned(const StringName &p_property) const;
+ virtual StringName get_property_store_alias(const StringName &p_property) const;
+#endif
+ void get_storable_properties(Set<StringName> &r_storable_properties) const;
+
virtual String to_string() override;
/* NOTIFICATIONS */
@@ -437,7 +444,6 @@ public:
void queue_delete();
//hacks for speed
- static void set_human_readable_collision_renaming(bool p_enabled);
static void init_node_hrcr();
void force_parent_owned() { data.parent_owned = true; } //hack to avoid duplicate nodes
diff --git a/scene/main/resource_preloader.cpp b/scene/main/resource_preloader.cpp
index f4c90ee668..c44b55284d 100644
--- a/scene/main/resource_preloader.cpp
+++ b/scene/main/resource_preloader.cpp
@@ -147,7 +147,7 @@ void ResourcePreloader::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_resource", "name"), &ResourcePreloader::get_resource);
ClassDB::bind_method(D_METHOD("get_resource_list"), &ResourcePreloader::_get_resource_list);
- ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "resources", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL), "_set_resources", "_get_resources");
+ ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "resources", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL), "_set_resources", "_get_resources");
}
ResourcePreloader::ResourcePreloader() {
diff --git a/scene/main/viewport.cpp b/scene/main/viewport.cpp
index 6388b375d9..f9e96a0784 100644
--- a/scene/main/viewport.cpp
+++ b/scene/main/viewport.cpp
@@ -55,6 +55,7 @@
#include "scene/resources/world_2d.h"
#include "scene/scene_string_names.h"
#include "servers/audio_server.h"
+#include "servers/rendering/rendering_server_globals.h"
void ViewportTexture::setup_local_to_scene() {
Node *local_scene = get_local_scene();
@@ -290,7 +291,7 @@ void Viewport::_sub_window_grab_focus(Window *p_window) {
if (p_window->get_flag(Window::FLAG_NO_FOCUS)) {
// Can only move to foreground, but no focus granted.
SubWindow sw = gui.sub_windows[index];
- gui.sub_windows.remove(index);
+ gui.sub_windows.remove_at(index);
gui.sub_windows.push_back(sw);
index = gui.sub_windows.size() - 1;
_sub_window_update_order();
@@ -318,7 +319,7 @@ void Viewport::_sub_window_grab_focus(Window *p_window) {
{ // Move to foreground.
SubWindow sw = gui.sub_windows[index];
- gui.sub_windows.remove(index);
+ gui.sub_windows.remove_at(index);
gui.sub_windows.push_back(sw);
index = gui.sub_windows.size() - 1;
_sub_window_update_order();
@@ -335,7 +336,7 @@ void Viewport::_sub_window_remove(Window *p_window) {
for (int i = 0; i < gui.sub_windows.size(); i++) {
if (gui.sub_windows[i].window == p_window) {
RS::get_singleton()->free(gui.sub_windows[i].canvas_item);
- gui.sub_windows.remove(i);
+ gui.sub_windows.remove_at(i);
break;
}
}
@@ -584,9 +585,9 @@ void Viewport::_process_picking() {
physics_last_mouse_state.meta = mb->is_meta_pressed();
if (mb->is_pressed()) {
- physics_last_mouse_state.mouse_mask |= (MouseButton)(1 << (mb->get_button_index() - 1));
+ physics_last_mouse_state.mouse_mask |= mouse_button_to_mask(mb->get_button_index());
} else {
- physics_last_mouse_state.mouse_mask &= (MouseButton) ~(1 << (mb->get_button_index() - 1));
+ physics_last_mouse_state.mouse_mask &= ~mouse_button_to_mask(mb->get_button_index());
// If touch mouse raised, assume we don't know last mouse pos until new events come
if (mb->get_device() == InputEvent::DEVICE_ID_TOUCH_MOUSE) {
@@ -638,7 +639,13 @@ void Viewport::_process_picking() {
Vector2 point = canvas_transform.affine_inverse().xform(pos);
- int rc = ss2d->intersect_point_on_canvas(point, canvas_layer_id, res, 64, Set<RID>(), 0xFFFFFFFF, true, true, true);
+ PhysicsDirectSpaceState2D::PointParameters point_params;
+ point_params.position = point;
+ point_params.canvas_instance_id = canvas_layer_id;
+ point_params.collide_with_areas = true;
+ point_params.pick_point = true;
+
+ int rc = ss2d->intersect_point(point_params, res, 64);
for (int i = 0; i < rc; i++) {
if (res[i].collider_id.is_valid() && res[i].collider) {
CollisionObject2D *co = Object::cast_to<CollisionObject2D>(res[i].collider);
@@ -690,7 +697,7 @@ void Viewport::_process_picking() {
if (co && camera_3d) {
_collision_object_3d_input_event(co, camera_3d, ev, Vector3(), Vector3(), 0);
captured = true;
- if (mb.is_valid() && mb->get_button_index() == 1 && !mb->is_pressed()) {
+ if (mb.is_valid() && mb->get_button_index() == MouseButton::LEFT && !mb->is_pressed()) {
physics_object_capture = ObjectID();
}
@@ -706,7 +713,7 @@ void Viewport::_process_picking() {
if (ObjectDB::get_instance(last_id) && last_object) {
// Good, exists.
_collision_object_3d_input_event(last_object, camera_3d, ev, result.position, result.normal, result.shape);
- if (last_object->get_capture_input_on_drag() && mb.is_valid() && mb->get_button_index() == 1 && mb->is_pressed()) {
+ if (last_object->get_capture_input_on_drag() && mb.is_valid() && mb->get_button_index() == MouseButton::LEFT && mb->is_pressed()) {
physics_object_capture = last_id;
}
}
@@ -715,10 +722,17 @@ void Viewport::_process_picking() {
if (camera_3d) {
Vector3 from = camera_3d->project_ray_origin(pos);
Vector3 dir = camera_3d->project_ray_normal(pos);
+ real_t far = camera_3d->far;
PhysicsDirectSpaceState3D *space = PhysicsServer3D::get_singleton()->space_get_direct_state(find_world_3d()->get_space());
if (space) {
- bool col = space->intersect_ray(from, from + dir * 10000, result, Set<RID>(), 0xFFFFFFFF, true, true, true);
+ PhysicsDirectSpaceState3D::RayParameters ray_params;
+ ray_params.from = from;
+ ray_params.to = from + dir * far;
+ ray_params.collide_with_areas = true;
+ ray_params.pick_ray = true;
+
+ bool col = space->intersect_ray(ray_params, result);
ObjectID new_collider;
if (col) {
CollisionObject3D *co = Object::cast_to<CollisionObject3D>(result.collider);
@@ -727,7 +741,7 @@ void Viewport::_process_picking() {
last_object = co;
last_id = result.collider_id;
new_collider = last_id;
- if (co->get_capture_input_on_drag() && mb.is_valid() && mb->get_button_index() == 1 && mb->is_pressed()) {
+ if (co->get_capture_input_on_drag() && mb.is_valid() && mb->get_button_index() == MouseButton::LEFT && mb->is_pressed()) {
physics_object_capture = last_id;
}
}
@@ -1246,10 +1260,10 @@ void Viewport::_gui_call_input(Control *p_control, const Ref<InputEvent> &p_inpu
Ref<InputEventMouseButton> mb = p_input;
bool cant_stop_me_now = (mb.is_valid() &&
- (mb->get_button_index() == MOUSE_BUTTON_WHEEL_DOWN ||
- mb->get_button_index() == MOUSE_BUTTON_WHEEL_UP ||
- mb->get_button_index() == MOUSE_BUTTON_WHEEL_LEFT ||
- mb->get_button_index() == MOUSE_BUTTON_WHEEL_RIGHT));
+ (mb->get_button_index() == MouseButton::WHEEL_DOWN ||
+ mb->get_button_index() == MouseButton::WHEEL_UP ||
+ mb->get_button_index() == MouseButton::WHEEL_LEFT ||
+ mb->get_button_index() == MouseButton::WHEEL_RIGHT));
Ref<InputEventPanGesture> pn = p_input;
cant_stop_me_now = pn.is_valid() || cant_stop_me_now;
@@ -1432,21 +1446,21 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) {
gui.last_mouse_pos = mpos;
if (mb->is_pressed()) {
Size2 pos = mpos;
- if (gui.mouse_focus_mask) {
+ if (gui.mouse_focus_mask != MouseButton::NONE) {
// Do not steal mouse focus and stuff while a focus mask exists.
- gui.mouse_focus_mask |= 1 << (mb->get_button_index() - 1); // Add the button to the mask.
+ gui.mouse_focus_mask |= mouse_button_to_mask(mb->get_button_index());
} else {
gui.mouse_focus = gui_find_control(pos);
gui.last_mouse_focus = gui.mouse_focus;
if (!gui.mouse_focus) {
- gui.mouse_focus_mask = 0;
+ gui.mouse_focus_mask = MouseButton::NONE;
return;
}
- gui.mouse_focus_mask = 1 << (mb->get_button_index() - 1);
+ gui.mouse_focus_mask = mouse_button_to_mask(mb->get_button_index());
- if (mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (mb->get_button_index() == MouseButton::LEFT) {
gui.drag_accum = Vector2();
gui.drag_attempted = false;
}
@@ -1469,7 +1483,7 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) {
}
#endif
- if (mb->get_button_index() == MOUSE_BUTTON_LEFT) { // Assign focus.
+ if (mb->get_button_index() == MouseButton::LEFT) { // Assign focus.
CanvasItem *ci = gui.mouse_focus;
while (ci) {
Control *control = Object::cast_to<Control>(ci);
@@ -1500,10 +1514,11 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) {
set_input_as_handled();
- if (gui.drag_data.get_type() != Variant::NIL && mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (gui.drag_data.get_type() != Variant::NIL && mb->get_button_index() == MouseButton::LEFT) {
// Alternate drop use (when using force_drag(), as proposed by #5342).
+ gui.drag_successful = false;
if (gui.mouse_focus) {
- _gui_drop(gui.mouse_focus, pos, false);
+ gui.drag_successful = _gui_drop(gui.mouse_focus, pos, false);
}
gui.drag_data = Variant();
@@ -1520,9 +1535,10 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) {
_gui_cancel_tooltip();
} else {
- if (gui.drag_data.get_type() != Variant::NIL && mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (gui.drag_data.get_type() != Variant::NIL && mb->get_button_index() == MouseButton::LEFT) {
+ gui.drag_successful = false;
if (gui.drag_mouse_over) {
- _gui_drop(gui.drag_mouse_over, gui.drag_mouse_over_pos, false);
+ gui.drag_successful = _gui_drop(gui.drag_mouse_over, gui.drag_mouse_over_pos, false);
}
Control *drag_preview = _gui_get_drag_preview();
@@ -1538,7 +1554,7 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) {
// Change mouse accordingly.
}
- gui.mouse_focus_mask &= ~(1 << (mb->get_button_index() - 1)); // Remove from mask.
+ gui.mouse_focus_mask &= ~mouse_button_to_mask(mb->get_button_index()); // Remove from mask.
if (!gui.mouse_focus) {
// Release event is only sent if a mouse focus (previously pressed button) exists.
@@ -1557,7 +1573,7 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) {
// Disable mouse focus if needed before calling input,
// this makes popups on mouse press event work better,
// as the release will never be received otherwise.
- if (gui.mouse_focus_mask == 0) {
+ if (gui.mouse_focus_mask == MouseButton::NONE) {
gui.mouse_focus = nullptr;
gui.forced_mouse_focus = false;
}
@@ -1577,7 +1593,7 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) {
over = gui_find_control(mpos);
}
- if (gui.mouse_focus_mask == 0 && over != gui.mouse_over) {
+ if (gui.mouse_focus_mask == MouseButton::NONE && over != gui.mouse_over) {
if (gui.mouse_over) {
_gui_call_notification(gui.mouse_over, Control::NOTIFICATION_MOUSE_EXIT);
}
@@ -1605,7 +1621,7 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) {
Control *over = nullptr;
// Drag & drop.
- if (!gui.drag_attempted && gui.mouse_focus && mm->get_button_mask() & MOUSE_BUTTON_MASK_LEFT) {
+ if (!gui.drag_attempted && gui.mouse_focus && (mm->get_button_mask() & MouseButton::MASK_LEFT) != MouseButton::NONE) {
gui.drag_accum += mm->get_relative();
float len = gui.drag_accum.length();
if (len > 10) {
@@ -1619,7 +1635,7 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) {
if (gui.drag_data.get_type() != Variant::NIL) {
gui.mouse_focus = nullptr;
gui.forced_mouse_focus = false;
- gui.mouse_focus_mask = 0;
+ gui.mouse_focus_mask = MouseButton::NONE;
break;
} else {
Control *drag_preview = _gui_get_drag_preview();
@@ -1688,7 +1704,7 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) {
mm->set_speed(speed);
mm->set_relative(rel);
- if (mm->get_button_mask() == 0) {
+ if (mm->get_button_mask() == MouseButton::NONE) {
// Nothing pressed.
bool can_tooltip = true;
@@ -1741,7 +1757,7 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) {
Control *c = over;
Vector2 cpos = pos;
while (c) {
- if (gui.mouse_focus_mask != 0 || c->has_point(cpos)) {
+ if (gui.mouse_focus_mask != MouseButton::NONE || c->has_point(cpos)) {
cursor_shape = c->get_cursor_shape(cpos);
} else {
cursor_shape = Control::CURSOR_ARROW;
@@ -1854,7 +1870,7 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) {
Transform2D localizer = gui.drag_mouse_over->get_global_transform_with_canvas().affine_inverse();
gui.drag_mouse_over_pos = localizer.xform(viewport_pos);
- if (mm->get_button_mask() & MOUSE_BUTTON_MASK_LEFT) {
+ if ((mm->get_button_mask() & MouseButton::MASK_LEFT) != MouseButton::NONE) {
bool can_drop = _gui_drop(gui.drag_mouse_over, gui.drag_mouse_over_pos, true);
if (!can_drop) {
@@ -2095,7 +2111,7 @@ void Viewport::_gui_remove_control(Control *p_control) {
if (gui.mouse_focus == p_control) {
gui.mouse_focus = nullptr;
gui.forced_mouse_focus = false;
- gui.mouse_focus_mask = 0;
+ gui.mouse_focus_mask = MouseButton::NONE;
}
if (gui.last_mouse_focus == p_control) {
gui.last_mouse_focus = nullptr;
@@ -2165,13 +2181,13 @@ void Viewport::_gui_accept_event() {
void Viewport::_drop_mouse_focus() {
Control *c = gui.mouse_focus;
- int mask = gui.mouse_focus_mask;
+ MouseButton mask = gui.mouse_focus_mask;
gui.mouse_focus = nullptr;
gui.forced_mouse_focus = false;
- gui.mouse_focus_mask = 0;
+ gui.mouse_focus_mask = MouseButton::NONE;
for (int i = 0; i < 3; i++) {
- if (mask & (1 << i)) {
+ if ((int)mask & (1 << i)) {
Ref<InputEventMouseButton> mb;
mb.instantiate();
mb->set_position(c->get_local_mouse_position());
@@ -2280,11 +2296,11 @@ void Viewport::_post_gui_grab_click_focus() {
return;
}
- int mask = gui.mouse_focus_mask;
+ MouseButton mask = gui.mouse_focus_mask;
Point2 click = gui.mouse_focus->get_global_transform_with_canvas().affine_inverse().xform(gui.last_mouse_pos);
for (int i = 0; i < 3; i++) {
- if (mask & (1 << i)) {
+ if ((int)mask & (1 << i)) {
Ref<InputEventMouseButton> mb;
mb.instantiate();
@@ -2302,7 +2318,7 @@ void Viewport::_post_gui_grab_click_focus() {
click = gui.mouse_focus->get_global_transform_with_canvas().affine_inverse().xform(gui.last_mouse_pos);
for (int i = 0; i < 3; i++) {
- if (mask & (1 << i)) {
+ if ((int)mask & (1 << i)) {
Ref<InputEventMouseButton> mb;
mb.instantiate();
@@ -2399,7 +2415,7 @@ bool Viewport::_sub_windows_forward_input(const Ref<InputEvent> &p_event) {
ERR_FAIL_COND_V(gui.subwindow_focused == nullptr, false);
Ref<InputEventMouseButton> mb = p_event;
- if (mb.is_valid() && !mb->is_pressed() && mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (mb.is_valid() && !mb->is_pressed() && mb->get_button_index() == MouseButton::LEFT) {
if (gui.subwindow_drag == SUB_WINDOW_DRAG_CLOSE) {
if (gui.subwindow_drag_close_rect.has_point(mb->get_position())) {
// Close window.
@@ -2524,7 +2540,7 @@ bool Viewport::_sub_windows_forward_input(const Ref<InputEvent> &p_event) {
Ref<InputEventMouseButton> mb = p_event;
// If the event is a mouse button, we need to check whether another window was clicked.
- if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == MOUSE_BUTTON_LEFT) {
+ if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == MouseButton::LEFT) {
bool click_on_window = false;
for (int i = gui.sub_windows.size() - 1; i >= 0; i--) {
SubWindow &sw = gui.sub_windows.write[i];
@@ -2882,6 +2898,10 @@ bool Viewport::gui_is_dragging() const {
return gui.dragging;
}
+bool Viewport::gui_is_drag_successful() const {
+ return gui.drag_successful;
+}
+
void Viewport::set_input_as_handled() {
_drop_physics_mouseover();
@@ -3028,7 +3048,7 @@ void Viewport::pass_mouse_focus_to(Viewport *p_viewport, Control *p_control) {
gui.mouse_focus = nullptr;
gui.forced_mouse_focus = false;
- gui.mouse_focus_mask = 0;
+ gui.mouse_focus_mask = MouseButton::NONE;
}
}
@@ -3454,17 +3474,60 @@ bool Viewport::is_using_xr() {
return use_xr;
}
-void Viewport::set_scale_3d(float p_scale_3d) {
+void Viewport::set_scaling_3d_mode(Scaling3DMode p_scaling_3d_mode) {
+ if (scaling_3d_mode == p_scaling_3d_mode) {
+ return;
+ }
+
+ scaling_3d_mode = p_scaling_3d_mode;
+ RS::get_singleton()->viewport_set_scaling_3d_mode(viewport, (RS::ViewportScaling3DMode)(int)p_scaling_3d_mode);
+}
+
+Viewport::Scaling3DMode Viewport::get_scaling_3d_mode() const {
+ return scaling_3d_mode;
+}
+
+void Viewport::set_scaling_3d_scale(float p_scaling_3d_scale) {
// Clamp to reasonable values that are actually useful.
// Values above 2.0 don't serve a practical purpose since the viewport
// isn't displayed with mipmaps.
- scale_3d = CLAMP(p_scale_3d, 0.1, 2.0);
+ scaling_3d_scale = CLAMP(p_scaling_3d_scale, 0.1, 2.0);
+
+ RS::get_singleton()->viewport_set_scaling_3d_scale(viewport, scaling_3d_scale);
+}
+
+float Viewport::get_scaling_3d_scale() const {
+ return scaling_3d_scale;
+}
+
+void Viewport::set_fsr_sharpness(float p_fsr_sharpness) {
+ if (fsr_sharpness == p_fsr_sharpness) {
+ return;
+ }
- RS::get_singleton()->viewport_set_scale_3d(viewport, scale_3d);
+ if (p_fsr_sharpness < 0.0f) {
+ p_fsr_sharpness = 0.0f;
+ }
+
+ fsr_sharpness = p_fsr_sharpness;
+ RS::get_singleton()->viewport_set_fsr_sharpness(viewport, p_fsr_sharpness);
+}
+
+float Viewport::get_fsr_sharpness() const {
+ return fsr_sharpness;
+}
+
+void Viewport::set_fsr_mipmap_bias(float p_fsr_mipmap_bias) {
+ if (fsr_mipmap_bias == p_fsr_mipmap_bias) {
+ return;
+ }
+
+ fsr_mipmap_bias = p_fsr_mipmap_bias;
+ RS::get_singleton()->viewport_set_fsr_mipmap_bias(viewport, p_fsr_mipmap_bias);
}
-float Viewport::get_scale_3d() const {
- return scale_3d;
+float Viewport::get_fsr_mipmap_bias() const {
+ return fsr_mipmap_bias;
}
#endif // _3D_DISABLED
@@ -3521,6 +3584,7 @@ void Viewport::_bind_methods() {
ClassDB::bind_method(D_METHOD("gui_get_drag_data"), &Viewport::gui_get_drag_data);
ClassDB::bind_method(D_METHOD("gui_is_dragging"), &Viewport::gui_is_dragging);
+ ClassDB::bind_method(D_METHOD("gui_is_drag_successful"), &Viewport::gui_is_drag_successful);
ClassDB::bind_method(D_METHOD("set_disable_input", "disable"), &Viewport::set_disable_input);
ClassDB::bind_method(D_METHOD("is_input_disabled"), &Viewport::is_input_disabled);
@@ -3591,12 +3655,20 @@ void Viewport::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_use_xr", "use"), &Viewport::set_use_xr);
ClassDB::bind_method(D_METHOD("is_using_xr"), &Viewport::is_using_xr);
- ClassDB::bind_method(D_METHOD("set_scale_3d", "scale"), &Viewport::set_scale_3d);
- ClassDB::bind_method(D_METHOD("get_scale_3d"), &Viewport::get_scale_3d);
+ ClassDB::bind_method(D_METHOD("set_scaling_3d_mode", "scaling_3d_mode"), &Viewport::set_scaling_3d_mode);
+ ClassDB::bind_method(D_METHOD("get_scaling_3d_mode"), &Viewport::get_scaling_3d_mode);
+
+ ClassDB::bind_method(D_METHOD("set_scaling_3d_scale", "scale"), &Viewport::set_scaling_3d_scale);
+ ClassDB::bind_method(D_METHOD("get_scaling_3d_scale"), &Viewport::get_scaling_3d_scale);
+
+ ClassDB::bind_method(D_METHOD("set_fsr_sharpness", "fsr_sharpness"), &Viewport::set_fsr_sharpness);
+ ClassDB::bind_method(D_METHOD("get_fsr_sharpness"), &Viewport::get_fsr_sharpness);
+
+ ClassDB::bind_method(D_METHOD("set_fsr_mipmap_bias", "fsr_mipmap_bias"), &Viewport::set_fsr_mipmap_bias);
+ ClassDB::bind_method(D_METHOD("get_fsr_mipmap_bias"), &Viewport::get_fsr_mipmap_bias);
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "disable_3d"), "set_disable_3d", "is_3d_disabled");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "use_xr"), "set_use_xr", "is_using_xr");
- ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "scale_3d", PROPERTY_HINT_RANGE, "0.25,2.0,0.01"), "set_scale_3d", "get_scale_3d");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "audio_listener_enable_3d"), "set_as_audio_listener_3d", "is_audio_listener_3d");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "own_world_3d"), "set_use_own_world_3d", "is_using_own_world_3d");
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "world_3d", PROPERTY_HINT_RESOURCE_TYPE, "World3D"), "set_world_3d", "get_world_3d");
@@ -3613,6 +3685,13 @@ void Viewport::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "use_occlusion_culling"), "set_use_occlusion_culling", "is_using_occlusion_culling");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "lod_threshold", PROPERTY_HINT_RANGE, "0,1024,0.1"), "set_lod_threshold", "get_lod_threshold");
ADD_PROPERTY(PropertyInfo(Variant::INT, "debug_draw", PROPERTY_HINT_ENUM, "Disabled,Unshaded,Overdraw,Wireframe"), "set_debug_draw", "get_debug_draw");
+#ifndef _3D_DISABLED
+ ADD_GROUP("Scaling 3D", "");
+ ADD_PROPERTY(PropertyInfo(Variant::INT, "scaling_3d_mode", PROPERTY_HINT_ENUM, "Disabled (Slowest),Bilinear (Fastest),FSR (Fast)"), "set_scaling_3d_mode", "get_scaling_3d_mode");
+ ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "scaling_3d_scale", PROPERTY_HINT_RANGE, "0.25,2.0,0.01"), "set_scaling_3d_scale", "get_scaling_3d_scale");
+ ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "fsr_mipmap_bias", PROPERTY_HINT_RANGE, "-2,2,0.1"), "set_fsr_mipmap_bias", "get_fsr_mipmap_bias");
+ ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "fsr_sharpness", PROPERTY_HINT_RANGE, "0,2,0.1"), "set_fsr_sharpness", "get_fsr_sharpness");
+#endif
ADD_GROUP("Canvas Items", "canvas_item_");
ADD_PROPERTY(PropertyInfo(Variant::INT, "canvas_item_default_texture_filter", PROPERTY_HINT_ENUM, "Nearest,Linear,Linear Mipmap,Nearest Mipmap"), "set_default_canvas_item_texture_filter", "get_default_canvas_item_texture_filter");
ADD_PROPERTY(PropertyInfo(Variant::INT, "canvas_item_default_texture_repeat", PROPERTY_HINT_ENUM, "Disabled,Enabled,Mirror"), "set_default_canvas_item_texture_repeat", "get_default_canvas_item_texture_repeat");
@@ -3649,6 +3728,10 @@ void Viewport::_bind_methods() {
BIND_ENUM_CONSTANT(SHADOW_ATLAS_QUADRANT_SUBDIV_1024);
BIND_ENUM_CONSTANT(SHADOW_ATLAS_QUADRANT_SUBDIV_MAX);
+ BIND_ENUM_CONSTANT(SCALING_3D_MODE_BILINEAR);
+ BIND_ENUM_CONSTANT(SCALING_3D_MODE_FSR);
+ BIND_ENUM_CONSTANT(SCALING_3D_MODE_MAX);
+
BIND_ENUM_CONSTANT(MSAA_DISABLED);
BIND_ENUM_CONSTANT(MSAA_2X);
BIND_ENUM_CONSTANT(MSAA_4X);
@@ -3752,7 +3835,16 @@ Viewport::Viewport() {
ProjectSettings::get_singleton()->set_custom_property_info("gui/timers/tooltip_delay_sec", PropertyInfo(Variant::FLOAT, "gui/timers/tooltip_delay_sec", PROPERTY_HINT_RANGE, "0,5,0.01,or_greater")); // No negative numbers
#ifndef _3D_DISABLED
- set_scale_3d(GLOBAL_GET("rendering/3d/viewport/scale"));
+ Viewport::Scaling3DMode scaling_3d_mode = (Viewport::Scaling3DMode)(int)GLOBAL_GET("rendering/scaling_3d/mode");
+ set_scaling_3d_mode(scaling_3d_mode);
+
+ set_scaling_3d_scale(GLOBAL_GET("rendering/scaling_3d/scale"));
+
+ float fsr_sharpness = GLOBAL_GET("rendering/scaling_3d/fsr_sharpness");
+ set_fsr_sharpness(fsr_sharpness);
+
+ float fsr_mipmap_bias = GLOBAL_GET("rendering/scaling_3d/fsr_mipmap_bias");
+ set_fsr_mipmap_bias(fsr_mipmap_bias);
#endif // _3D_DISABLED
set_sdf_oversize(sdf_oversize); // Set to server.
diff --git a/scene/main/viewport.h b/scene/main/viewport.h
index 1f19ff04c9..38d43e1e59 100644
--- a/scene/main/viewport.h
+++ b/scene/main/viewport.h
@@ -89,6 +89,12 @@ class Viewport : public Node {
GDCLASS(Viewport, Node);
public:
+ enum Scaling3DMode {
+ SCALING_3D_MODE_BILINEAR,
+ SCALING_3D_MODE_FSR,
+ SCALING_3D_MODE_MAX
+ };
+
enum ShadowAtlasQuadrantSubdiv {
SHADOW_ATLAS_QUADRANT_SUBDIV_DISABLED,
SHADOW_ATLAS_QUADRANT_SUBDIV_1,
@@ -244,7 +250,7 @@ private:
bool control = false;
bool shift = false;
bool meta = false;
- int mouse_mask = 0;
+ MouseButton mouse_mask = MouseButton::NONE;
} physics_last_mouse_state;
@@ -284,6 +290,11 @@ private:
MSAA msaa = MSAA_DISABLED;
ScreenSpaceAA screen_space_aa = SCREEN_SPACE_AA_DISABLED;
+
+ Scaling3DMode scaling_3d_mode = SCALING_3D_MODE_BILINEAR;
+ float scaling_3d_scale = 1.0;
+ float fsr_sharpness = 0.2f;
+ float fsr_mipmap_bias = 0.0f;
bool use_debanding = false;
float lod_threshold = 1.0;
bool use_occlusion_culling = false;
@@ -327,7 +338,7 @@ private:
Control *mouse_focus = nullptr;
Control *last_mouse_focus = nullptr;
Control *mouse_click_grabber = nullptr;
- int mouse_focus_mask = 0;
+ MouseButton mouse_focus_mask = MouseButton::NONE;
Control *key_focus = nullptr;
Control *mouse_over = nullptr;
Control *drag_mouse_over = nullptr;
@@ -348,6 +359,7 @@ private:
List<Control *> roots;
int canvas_sort_index = 0; //for sorting items with canvas as root
bool dragging = false;
+ bool drag_successful = false;
bool embed_subwindows_hint = false;
bool embedding_subwindows = false;
@@ -503,6 +515,18 @@ public:
void set_screen_space_aa(ScreenSpaceAA p_screen_space_aa);
ScreenSpaceAA get_screen_space_aa() const;
+ void set_scaling_3d_mode(Scaling3DMode p_scaling_3d_mode);
+ Scaling3DMode get_scaling_3d_mode() const;
+
+ void set_scaling_3d_scale(float p_scaling_3d_scale);
+ float get_scaling_3d_scale() const;
+
+ void set_fsr_sharpness(float p_fsr_sharpness);
+ float get_fsr_sharpness() const;
+
+ void set_fsr_mipmap_bias(float p_fsr_mipmap_bias);
+ float get_fsr_mipmap_bias() const;
+
void set_use_debanding(bool p_use_debanding);
bool is_using_debanding() const;
@@ -556,6 +580,7 @@ public:
bool is_handling_input_locally() const;
bool gui_is_dragging() const;
+ bool gui_is_drag_successful() const;
Control *gui_find_control(const Point2 &p_global);
@@ -584,7 +609,6 @@ public:
#ifndef _3D_DISABLED
bool use_xr = false;
- float scale_3d = 1.0;
friend class AudioListener3D;
AudioListener3D *audio_listener_3d = nullptr;
Set<AudioListener3D *> audio_listener_3d_set;
@@ -655,9 +679,6 @@ public:
void set_use_xr(bool p_use_xr);
bool is_using_xr();
-
- void set_scale_3d(float p_scale_3d);
- float get_scale_3d() const;
#endif // _3D_DISABLED
Viewport();
@@ -712,6 +733,7 @@ public:
SubViewport();
~SubViewport();
};
+VARIANT_ENUM_CAST(Viewport::Scaling3DMode);
VARIANT_ENUM_CAST(SubViewport::UpdateMode);
VARIANT_ENUM_CAST(Viewport::ShadowAtlasQuadrantSubdiv);
VARIANT_ENUM_CAST(Viewport::MSAA);
diff --git a/scene/main/window.cpp b/scene/main/window.cpp
index a0f62c853f..20f8b30dc6 100644
--- a/scene/main/window.cpp
+++ b/scene/main/window.cpp
@@ -88,6 +88,10 @@ Size2i Window::get_size() const {
return size;
}
+void Window::reset_size() {
+ set_size(Size2i());
+}
+
Size2i Window::get_real_size() const {
if (window_id != DisplayServer::INVALID_WINDOW_ID) {
return DisplayServer::get_singleton()->window_get_real_size(window_id);
@@ -895,7 +899,7 @@ void Window::_window_input(const Ref<InputEvent> &p_ev) {
if (EngineDebugger::is_active()) {
//quit from game window using F8
Ref<InputEventKey> k = p_ev;
- if (k.is_valid() && k->is_pressed() && !k->is_echo() && k->get_keycode() == KEY_F8) {
+ if (k.is_valid() && k->is_pressed() && !k->is_echo() && k->get_keycode() == Key::F8) {
EngineDebugger::get_singleton()->send_message("request_quit", Array());
}
}
@@ -1410,6 +1414,7 @@ void Window::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_size", "size"), &Window::set_size);
ClassDB::bind_method(D_METHOD("get_size"), &Window::get_size);
+ ClassDB::bind_method(D_METHOD("reset_size"), &Window::reset_size);
ClassDB::bind_method(D_METHOD("get_real_size"), &Window::get_real_size);
diff --git a/scene/main/window.h b/scene/main/window.h
index def6eab7b8..0b1075ff76 100644
--- a/scene/main/window.h
+++ b/scene/main/window.h
@@ -178,6 +178,7 @@ public:
void set_size(const Size2i &p_size);
Size2i get_size() const;
+ void reset_size();
Size2i get_real_size() const;
diff --git a/scene/property_utils.cpp b/scene/property_utils.cpp
new file mode 100644
index 0000000000..7df601492b
--- /dev/null
+++ b/scene/property_utils.cpp
@@ -0,0 +1,188 @@
+/*************************************************************************/
+/* property_utils.cpp */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+
+#include "property_utils.h"
+
+#include "core/config/engine.h"
+#include "core/templates/local_vector.h"
+#include "scene/resources/packed_scene.h"
+
+#ifdef TOOLS_ENABLED
+#include "editor/editor_node.h"
+#endif // TOOLS_ENABLED
+
+bool PropertyUtils::is_property_value_different(const Variant &p_a, const Variant &p_b) {
+ if (p_a.get_type() == Variant::FLOAT && p_b.get_type() == Variant::FLOAT) {
+ //this must be done because, as some scenes save as text, there might be a tiny difference in floats due to numerical error
+ return !Math::is_equal_approx((float)p_a, (float)p_b);
+ } else {
+ // For our purposes, treating null object as NIL is the right thing to do
+ const Variant &a = p_a.get_type() == Variant::OBJECT && (Object *)p_a == nullptr ? Variant() : p_a;
+ const Variant &b = p_b.get_type() == Variant::OBJECT && (Object *)p_b == nullptr ? Variant() : p_b;
+ return a != b;
+ }
+}
+
+Variant PropertyUtils::get_property_default_value(const Object *p_object, const StringName &p_property, const Vector<SceneState::PackState> *p_states_stack_cache, bool p_update_exports, const Node *p_owner, bool *r_is_class_default) {
+ // This function obeys the way property values are set when an object is instantiated,
+ // which is the following (the latter wins):
+ // 1. Default value from builtin class
+ // 2. Default value from script exported variable (from the topmost script)
+ // 3. Value overrides from the instantiation/inheritance stack
+
+ if (r_is_class_default) {
+ *r_is_class_default = false;
+ }
+
+ Ref<Script> topmost_script;
+
+ if (const Node *node = Object::cast_to<Node>(p_object)) {
+ // Check inheritance/instantiation ancestors
+ const Vector<SceneState::PackState> &states_stack = p_states_stack_cache ? *p_states_stack_cache : PropertyUtils::get_node_states_stack(node, p_owner);
+ for (int i = 0; i < states_stack.size(); ++i) {
+ const SceneState::PackState &ia = states_stack[i];
+ bool found = false;
+ Variant value_in_ancestor = ia.state->get_property_value(ia.node, p_property, found);
+ if (found) {
+ return value_in_ancestor;
+ }
+ // Save script for later
+ bool has_script = false;
+ Variant script = ia.state->get_property_value(ia.node, SNAME("script"), has_script);
+ if (has_script) {
+ Ref<Script> scr = script;
+ if (scr.is_valid()) {
+ topmost_script = scr;
+ }
+ }
+ }
+ }
+
+ // Let's see what default is set by the topmost script having a default, if any
+ if (topmost_script.is_null()) {
+ topmost_script = p_object->get_script();
+ }
+ if (topmost_script.is_valid()) {
+ // Should be called in the editor only and not at runtime,
+ // otherwise it can cause problems because of missing instance state support
+ if (p_update_exports && Engine::get_singleton()->is_editor_hint()) {
+ topmost_script->update_exports();
+ }
+ Variant default_value;
+ if (topmost_script->get_property_default_value(p_property, default_value)) {
+ return default_value;
+ }
+ }
+
+ // Fall back to the default from the native class
+ if (r_is_class_default) {
+ *r_is_class_default = true;
+ }
+ return ClassDB::class_get_default_property_value(p_object->get_class_name(), p_property);
+}
+
+// Like SceneState::PackState, but using a raw pointer to avoid the cost of
+// updating the reference count during the internal work of the functions below
+namespace {
+struct _FastPackState {
+ SceneState *state = nullptr;
+ int node = -1;
+};
+} // namespace
+
+static bool _collect_inheritance_chain(const Ref<SceneState> &p_state, const NodePath &p_path, LocalVector<_FastPackState> &r_states_stack) {
+ bool found = false;
+
+ LocalVector<_FastPackState> inheritance_states;
+
+ Ref<SceneState> state = p_state;
+ while (state.is_valid()) {
+ int node = state->find_node_by_path(p_path);
+ if (node >= 0) {
+ // This one has state for this node
+ inheritance_states.push_back({ state.ptr(), node });
+ found = true;
+ }
+ state = state->get_base_scene_state();
+ }
+
+ for (int i = inheritance_states.size() - 1; i >= 0; --i) {
+ r_states_stack.push_back(inheritance_states[i]);
+ }
+
+ return found;
+}
+
+Vector<SceneState::PackState> PropertyUtils::get_node_states_stack(const Node *p_node, const Node *p_owner, bool *r_instantiated_by_owner) {
+ if (r_instantiated_by_owner) {
+ *r_instantiated_by_owner = true;
+ }
+
+ LocalVector<_FastPackState> states_stack;
+ {
+ const Node *owner = p_owner;
+#ifdef TOOLS_ENABLED
+ if (!p_owner && Engine::get_singleton()->is_editor_hint()) {
+ owner = EditorNode::get_singleton()->get_edited_scene();
+ }
+#endif
+
+ const Node *n = p_node;
+ while (n) {
+ if (n == owner) {
+ const Ref<SceneState> &state = n->get_scene_inherited_state();
+ if (_collect_inheritance_chain(state, n->get_path_to(p_node), states_stack)) {
+ if (r_instantiated_by_owner) {
+ *r_instantiated_by_owner = false;
+ }
+ }
+ break;
+ } else if (n->get_scene_file_path() != String()) {
+ const Ref<SceneState> &state = n->get_scene_instance_state();
+ _collect_inheritance_chain(state, n->get_path_to(p_node), states_stack);
+ }
+ n = n->get_owner();
+ }
+ }
+
+ // Convert to the proper type for returning, inverting the vector on the go
+ // (it was more convenient to fill the vector in reverse order)
+ Vector<SceneState::PackState> states_stack_ret;
+ {
+ states_stack_ret.resize(states_stack.size());
+ _FastPackState *ps = states_stack.ptr();
+ for (int i = states_stack.size() - 1; i >= 0; --i) {
+ states_stack_ret.write[i].state.reference_ptr(ps->state);
+ states_stack_ret.write[i].node = ps->node;
+ ++ps;
+ }
+ }
+ return states_stack_ret;
+}
diff --git a/platform/osx/context_gl_osx.h b/scene/property_utils.h
index 77bae3247d..fde9163548 100644
--- a/platform/osx/context_gl_osx.h
+++ b/scene/property_utils.h
@@ -1,5 +1,5 @@
/*************************************************************************/
-/* context_gl_osx.h */
+/* property_utils.h */
/*************************************************************************/
/* This file is part of: */
/* GODOT ENGINE */
@@ -28,47 +28,24 @@
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
-#ifndef CONTEXT_GL_OSX_H
-#define CONTEXT_GL_OSX_H
+#ifndef PROPERTY_UTILS_H
+#define PROPERTY_UTILS_H
-#if defined(GLES3_ENABLED) || defined(GLES_ENABLED)
-
-#include "core/error/error_list.h"
-#include "core/os/os.h"
-
-#include <AppKit/AppKit.h>
-#include <ApplicationServices/ApplicationServices.h>
-#include <CoreVideo/CoreVideo.h>
-
-class ContextGL_OSX {
- bool gles3_context;
- bool use_vsync;
-
- void *framework;
- id window_view;
- NSOpenGLPixelFormat *pixelFormat;
- NSOpenGLContext *context;
+#include "scene/main/node.h"
+#include "scene/resources/packed_scene.h"
+class PropertyUtils {
public:
- void release_current();
-
- void make_current();
- void update();
-
- void set_opacity(GLint p_opacity);
-
- int get_window_width();
- int get_window_height();
- void swap_buffers();
-
- Error initialize();
-
- void set_use_vsync(bool p_use);
- bool is_using_vsync() const;
-
- ContextGL_OSX(id p_view, bool p_gles3_context);
- ~ContextGL_OSX();
+ static bool is_property_value_different(const Variant &p_a, const Variant &p_b);
+ // Gets the most pure default value, the one that would be set when the node has just been instantiated
+ static Variant get_property_default_value(const Object *p_object, const StringName &p_property, const Vector<SceneState::PackState> *p_states_stack_cache = nullptr, bool p_update_exports = false, const Node *p_owner = nullptr, bool *r_is_class_default = nullptr);
+
+ // Gets the instance/inheritance states of this node, in order of precedence,
+ // that is, from the topmost (the most able to override values) to the lowermost
+ // (Note that in nested instancing the one with the greatest precedence is the furthest
+ // in the tree, since every owner found while traversing towards the root gets a chance
+ // to override property values.)
+ static Vector<SceneState::PackState> get_node_states_stack(const Node *p_node, const Node *p_owner = nullptr, bool *r_instantiated_by_owner = nullptr);
};
-#endif
-#endif
+#endif // PROPERTY_UTILS_H
diff --git a/scene/register_scene_types.cpp b/scene/register_scene_types.cpp
index d44cd7ca63..056ace5e4e 100644
--- a/scene/register_scene_types.cpp
+++ b/scene/register_scene_types.cpp
@@ -63,6 +63,7 @@
#include "scene/2d/position_2d.h"
#include "scene/2d/ray_cast_2d.h"
#include "scene/2d/remote_transform_2d.h"
+#include "scene/2d/shape_cast_2d.h"
#include "scene/2d/skeleton_2d.h"
#include "scene/2d/sprite_2d.h"
#include "scene/2d/tile_map.h"
@@ -628,6 +629,7 @@ void register_scene_types() {
GDREGISTER_CLASS(VisualShaderNodeParticleSphereEmitter);
GDREGISTER_CLASS(VisualShaderNodeParticleBoxEmitter);
GDREGISTER_CLASS(VisualShaderNodeParticleRingEmitter);
+ GDREGISTER_CLASS(VisualShaderNodeParticleMeshEmitter);
GDREGISTER_CLASS(VisualShaderNodeParticleMultiplyByAxisAngle);
GDREGISTER_CLASS(VisualShaderNodeParticleConeVelocity);
GDREGISTER_CLASS(VisualShaderNodeParticleRandomness);
@@ -665,6 +667,7 @@ void register_scene_types() {
GDREGISTER_CLASS(CollisionShape2D);
GDREGISTER_CLASS(CollisionPolygon2D);
GDREGISTER_CLASS(RayCast2D);
+ GDREGISTER_CLASS(ShapeCast2D);
GDREGISTER_CLASS(VisibleOnScreenNotifier2D);
GDREGISTER_CLASS(VisibleOnScreenEnabler2D);
GDREGISTER_CLASS(Polygon2D);
@@ -791,7 +794,7 @@ void register_scene_types() {
GDREGISTER_CLASS(MeshTexture);
GDREGISTER_CLASS(CurveTexture);
GDREGISTER_CLASS(CurveXYZTexture);
- GDREGISTER_CLASS(GradientTexture);
+ GDREGISTER_CLASS(GradientTexture1D);
GDREGISTER_CLASS(GradientTexture2D);
GDREGISTER_CLASS(ProxyTexture);
GDREGISTER_CLASS(AnimatedTexture);
@@ -922,6 +925,7 @@ void register_scene_types() {
ClassDB::add_compatibility_class("EditorSpatialGizmo", "EditorNode3DGizmo");
ClassDB::add_compatibility_class("EditorSpatialGizmoPlugin", "EditorNode3DGizmoPlugin");
ClassDB::add_compatibility_class("Generic6DOFJoint", "Generic6DOFJoint3D");
+ ClassDB::add_compatibility_class("GradientTexture", "GradientTexture1D");
ClassDB::add_compatibility_class("HeightMapShape", "HeightMapShape3D");
ClassDB::add_compatibility_class("HingeJoint", "HingeJoint3D");
ClassDB::add_compatibility_class("Joint", "Joint3D");
diff --git a/scene/resources/animation.cpp b/scene/resources/animation.cpp
index 06ce993cc7..e3cf9183a0 100644
--- a/scene/resources/animation.cpp
+++ b/scene/resources/animation.cpp
@@ -317,7 +317,7 @@ bool Animation::_set(const StringName &p_name, const Variant &p_value) {
Vector<real_t> times = d["times"];
Vector<real_t> values = d["points"];
- ERR_FAIL_COND_V(times.size() * 5 != values.size(), false);
+ ERR_FAIL_COND_V(times.size() * 6 != values.size(), false);
if (times.size()) {
int valcount = times.size();
@@ -330,11 +330,12 @@ bool Animation::_set(const StringName &p_name, const Variant &p_value) {
for (int i = 0; i < valcount; i++) {
bt->values.write[i].time = rt[i];
bt->values.write[i].transition = 0; //unused in bezier
- bt->values.write[i].value.value = rv[i * 5 + 0];
- bt->values.write[i].value.in_handle.x = rv[i * 5 + 1];
- bt->values.write[i].value.in_handle.y = rv[i * 5 + 2];
- bt->values.write[i].value.out_handle.x = rv[i * 5 + 3];
- bt->values.write[i].value.out_handle.y = rv[i * 5 + 4];
+ bt->values.write[i].value.value = rv[i * 6 + 0];
+ bt->values.write[i].value.in_handle.x = rv[i * 6 + 1];
+ bt->values.write[i].value.in_handle.y = rv[i * 6 + 2];
+ bt->values.write[i].value.out_handle.x = rv[i * 6 + 3];
+ bt->values.write[i].value.out_handle.y = rv[i * 6 + 4];
+ bt->values.write[i].value.handle_mode = static_cast<HandleMode>((int)rv[i * 6 + 5]);
}
}
@@ -449,8 +450,8 @@ bool Animation::_get(const StringName &p_name, Variant &r_ret) const {
return true;
} else if (name == "length") {
r_ret = length;
- } else if (name == "loop") {
- r_ret = loop;
+ } else if (name == "loop_mode") {
+ r_ret = loop_mode;
} else if (name == "step") {
r_ret = step;
} else if (name.begins_with("tracks/")) {
@@ -698,7 +699,7 @@ bool Animation::_get(const StringName &p_name, Variant &r_ret) const {
int kk = bt->values.size();
key_times.resize(kk);
- key_points.resize(kk * 5);
+ key_points.resize(kk * 6);
real_t *wti = key_times.ptrw();
real_t *wpo = key_points.ptrw();
@@ -709,11 +710,12 @@ bool Animation::_get(const StringName &p_name, Variant &r_ret) const {
for (int i = 0; i < kk; i++) {
wti[idx] = vls[i].time;
- wpo[idx * 5 + 0] = vls[i].value.value;
- wpo[idx * 5 + 1] = vls[i].value.in_handle.x;
- wpo[idx * 5 + 2] = vls[i].value.in_handle.y;
- wpo[idx * 5 + 3] = vls[i].value.out_handle.x;
- wpo[idx * 5 + 4] = vls[i].value.out_handle.y;
+ wpo[idx * 6 + 0] = vls[i].value.value;
+ wpo[idx * 6 + 1] = vls[i].value.in_handle.x;
+ wpo[idx * 6 + 2] = vls[i].value.in_handle.y;
+ wpo[idx * 6 + 3] = vls[i].value.out_handle.x;
+ wpo[idx * 6 + 4] = vls[i].value.out_handle.y;
+ wpo[idx * 6 + 5] = (double)vls[i].value.handle_mode;
idx++;
}
@@ -799,19 +801,19 @@ bool Animation::_get(const StringName &p_name, Variant &r_ret) const {
void Animation::_get_property_list(List<PropertyInfo> *p_list) const {
if (compression.enabled) {
- p_list->push_back(PropertyInfo(Variant::DICTIONARY, "_compression", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL));
+ p_list->push_back(PropertyInfo(Variant::DICTIONARY, "_compression", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL));
}
for (int i = 0; i < tracks.size(); i++) {
- p_list->push_back(PropertyInfo(Variant::STRING, "tracks/" + itos(i) + "/type", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL));
- p_list->push_back(PropertyInfo(Variant::BOOL, "tracks/" + itos(i) + "/imported", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL));
- p_list->push_back(PropertyInfo(Variant::BOOL, "tracks/" + itos(i) + "/enabled", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL));
- p_list->push_back(PropertyInfo(Variant::NODE_PATH, "tracks/" + itos(i) + "/path", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL));
+ p_list->push_back(PropertyInfo(Variant::STRING, "tracks/" + itos(i) + "/type", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL));
+ p_list->push_back(PropertyInfo(Variant::BOOL, "tracks/" + itos(i) + "/imported", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL));
+ p_list->push_back(PropertyInfo(Variant::BOOL, "tracks/" + itos(i) + "/enabled", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL));
+ p_list->push_back(PropertyInfo(Variant::NODE_PATH, "tracks/" + itos(i) + "/path", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL));
if (track_is_compressed(i)) {
- p_list->push_back(PropertyInfo(Variant::INT, "tracks/" + itos(i) + "/compressed_track", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL));
+ p_list->push_back(PropertyInfo(Variant::INT, "tracks/" + itos(i) + "/compressed_track", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL));
} else {
- p_list->push_back(PropertyInfo(Variant::INT, "tracks/" + itos(i) + "/interp", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL));
- p_list->push_back(PropertyInfo(Variant::BOOL, "tracks/" + itos(i) + "/loop_wrap", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL));
- p_list->push_back(PropertyInfo(Variant::ARRAY, "tracks/" + itos(i) + "/keys", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL));
+ p_list->push_back(PropertyInfo(Variant::INT, "tracks/" + itos(i) + "/interp", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL));
+ p_list->push_back(PropertyInfo(Variant::BOOL, "tracks/" + itos(i) + "/loop_wrap", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL));
+ p_list->push_back(PropertyInfo(Variant::ARRAY, "tracks/" + itos(i) + "/keys", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL));
}
}
}
@@ -928,7 +930,7 @@ void Animation::remove_track(int p_track) {
}
memdelete(t);
- tracks.remove(p_track);
+ tracks.remove_at(p_track);
emit_changed();
emit_signal(SceneStringNames::get_singleton()->tracks_changed);
}
@@ -1318,7 +1320,7 @@ void Animation::track_remove_key(int p_track, int p_idx) {
ERR_FAIL_COND(tt->compressed_track >= 0);
ERR_FAIL_INDEX(p_idx, tt->positions.size());
- tt->positions.remove(p_idx);
+ tt->positions.remove_at(p_idx);
} break;
case TYPE_ROTATION_3D: {
@@ -1327,7 +1329,7 @@ void Animation::track_remove_key(int p_track, int p_idx) {
ERR_FAIL_COND(rt->compressed_track >= 0);
ERR_FAIL_INDEX(p_idx, rt->rotations.size());
- rt->rotations.remove(p_idx);
+ rt->rotations.remove_at(p_idx);
} break;
case TYPE_SCALE_3D: {
@@ -1336,7 +1338,7 @@ void Animation::track_remove_key(int p_track, int p_idx) {
ERR_FAIL_COND(st->compressed_track >= 0);
ERR_FAIL_INDEX(p_idx, st->scales.size());
- st->scales.remove(p_idx);
+ st->scales.remove_at(p_idx);
} break;
case TYPE_BLEND_SHAPE: {
@@ -1345,37 +1347,37 @@ void Animation::track_remove_key(int p_track, int p_idx) {
ERR_FAIL_COND(bst->compressed_track >= 0);
ERR_FAIL_INDEX(p_idx, bst->blend_shapes.size());
- bst->blend_shapes.remove(p_idx);
+ bst->blend_shapes.remove_at(p_idx);
} break;
case TYPE_VALUE: {
ValueTrack *vt = static_cast<ValueTrack *>(t);
ERR_FAIL_INDEX(p_idx, vt->values.size());
- vt->values.remove(p_idx);
+ vt->values.remove_at(p_idx);
} break;
case TYPE_METHOD: {
MethodTrack *mt = static_cast<MethodTrack *>(t);
ERR_FAIL_INDEX(p_idx, mt->methods.size());
- mt->methods.remove(p_idx);
+ mt->methods.remove_at(p_idx);
} break;
case TYPE_BEZIER: {
BezierTrack *bz = static_cast<BezierTrack *>(t);
ERR_FAIL_INDEX(p_idx, bz->values.size());
- bz->values.remove(p_idx);
+ bz->values.remove_at(p_idx);
} break;
case TYPE_AUDIO: {
AudioTrack *ad = static_cast<AudioTrack *>(t);
ERR_FAIL_INDEX(p_idx, ad->values.size());
- ad->values.remove(p_idx);
+ ad->values.remove_at(p_idx);
} break;
case TYPE_ANIMATION: {
AnimationTrack *an = static_cast<AnimationTrack *>(t);
ERR_FAIL_INDEX(p_idx, an->values.size());
- an->values.remove(p_idx);
+ an->values.remove_at(p_idx);
} break;
}
@@ -1623,7 +1625,7 @@ void Animation::track_insert_key(int p_track, double p_time, const Variant &p_ke
BezierTrack *bt = static_cast<BezierTrack *>(t);
Array arr = p_key;
- ERR_FAIL_COND(arr.size() != 5);
+ ERR_FAIL_COND(arr.size() != 6);
TKey<BezierKey> k;
k.time = p_time;
@@ -1632,6 +1634,7 @@ void Animation::track_insert_key(int p_track, double p_time, const Variant &p_ke
k.value.in_handle.y = arr[2];
k.value.out_handle.x = arr[3];
k.value.out_handle.y = arr[4];
+ k.value.handle_mode = static_cast<HandleMode>((int)arr[5]);
_insert(p_time, bt->values, k);
} break;
@@ -1770,12 +1773,13 @@ Variant Animation::track_get_key_value(int p_track, int p_key_idx) const {
ERR_FAIL_INDEX_V(p_key_idx, bt->values.size(), Variant());
Array arr;
- arr.resize(5);
+ arr.resize(6);
arr[0] = bt->values[p_key_idx].value.value;
arr[1] = bt->values[p_key_idx].value.in_handle.x;
arr[2] = bt->values[p_key_idx].value.in_handle.y;
arr[3] = bt->values[p_key_idx].value.out_handle.x;
arr[4] = bt->values[p_key_idx].value.out_handle.y;
+ arr[5] = (double)bt->values[p_key_idx].value.handle_mode;
return arr;
} break;
@@ -1901,7 +1905,7 @@ void Animation::track_set_key_time(int p_track, int p_key_idx, double p_time) {
ERR_FAIL_INDEX(p_key_idx, tt->positions.size());
TKey<Vector3> key = tt->positions[p_key_idx];
key.time = p_time;
- tt->positions.remove(p_key_idx);
+ tt->positions.remove_at(p_key_idx);
_insert(p_time, tt->positions, key);
return;
}
@@ -1911,7 +1915,7 @@ void Animation::track_set_key_time(int p_track, int p_key_idx, double p_time) {
ERR_FAIL_INDEX(p_key_idx, tt->rotations.size());
TKey<Quaternion> key = tt->rotations[p_key_idx];
key.time = p_time;
- tt->rotations.remove(p_key_idx);
+ tt->rotations.remove_at(p_key_idx);
_insert(p_time, tt->rotations, key);
return;
}
@@ -1921,7 +1925,7 @@ void Animation::track_set_key_time(int p_track, int p_key_idx, double p_time) {
ERR_FAIL_INDEX(p_key_idx, tt->scales.size());
TKey<Vector3> key = tt->scales[p_key_idx];
key.time = p_time;
- tt->scales.remove(p_key_idx);
+ tt->scales.remove_at(p_key_idx);
_insert(p_time, tt->scales, key);
return;
}
@@ -1931,7 +1935,7 @@ void Animation::track_set_key_time(int p_track, int p_key_idx, double p_time) {
ERR_FAIL_INDEX(p_key_idx, tt->blend_shapes.size());
TKey<float> key = tt->blend_shapes[p_key_idx];
key.time = p_time;
- tt->blend_shapes.remove(p_key_idx);
+ tt->blend_shapes.remove_at(p_key_idx);
_insert(p_time, tt->blend_shapes, key);
return;
}
@@ -1940,7 +1944,7 @@ void Animation::track_set_key_time(int p_track, int p_key_idx, double p_time) {
ERR_FAIL_INDEX(p_key_idx, vt->values.size());
TKey<Variant> key = vt->values[p_key_idx];
key.time = p_time;
- vt->values.remove(p_key_idx);
+ vt->values.remove_at(p_key_idx);
_insert(p_time, vt->values, key);
return;
}
@@ -1949,7 +1953,7 @@ void Animation::track_set_key_time(int p_track, int p_key_idx, double p_time) {
ERR_FAIL_INDEX(p_key_idx, mt->methods.size());
MethodKey key = mt->methods[p_key_idx];
key.time = p_time;
- mt->methods.remove(p_key_idx);
+ mt->methods.remove_at(p_key_idx);
_insert(p_time, mt->methods, key);
return;
}
@@ -1958,7 +1962,7 @@ void Animation::track_set_key_time(int p_track, int p_key_idx, double p_time) {
ERR_FAIL_INDEX(p_key_idx, bt->values.size());
TKey<BezierKey> key = bt->values[p_key_idx];
key.time = p_time;
- bt->values.remove(p_key_idx);
+ bt->values.remove_at(p_key_idx);
_insert(p_time, bt->values, key);
return;
}
@@ -1967,7 +1971,7 @@ void Animation::track_set_key_time(int p_track, int p_key_idx, double p_time) {
ERR_FAIL_INDEX(p_key_idx, at->values.size());
TKey<AudioKey> key = at->values[p_key_idx];
key.time = p_time;
- at->values.remove(p_key_idx);
+ at->values.remove_at(p_key_idx);
_insert(p_time, at->values, key);
return;
}
@@ -1976,7 +1980,7 @@ void Animation::track_set_key_time(int p_track, int p_key_idx, double p_time) {
ERR_FAIL_INDEX(p_key_idx, at->values.size());
TKey<StringName> key = at->values[p_key_idx];
key.time = p_time;
- at->values.remove(p_key_idx);
+ at->values.remove_at(p_key_idx);
_insert(p_time, at->values, key);
return;
}
@@ -2144,13 +2148,14 @@ void Animation::track_set_key_value(int p_track, int p_key_idx, const Variant &p
ERR_FAIL_INDEX(p_key_idx, bt->values.size());
Array arr = p_value;
- ERR_FAIL_COND(arr.size() != 5);
+ ERR_FAIL_COND(arr.size() != 6);
bt->values.write[p_key_idx].value.value = arr[0];
bt->values.write[p_key_idx].value.in_handle.x = arr[1];
bt->values.write[p_key_idx].value.in_handle.y = arr[2];
bt->values.write[p_key_idx].value.out_handle.x = arr[3];
bt->values.write[p_key_idx].value.out_handle.y = arr[4];
+ bt->values.write[p_key_idx].value.handle_mode = static_cast<HandleMode>((int)arr[5]);
} break;
case TYPE_AUDIO: {
@@ -2231,7 +2236,7 @@ void Animation::track_set_key_transition(int p_track, int p_key_idx, real_t p_tr
}
template <class K>
-int Animation::_find(const Vector<K> &p_keys, double p_time) const {
+int Animation::_find(const Vector<K> &p_keys, double p_time, bool p_backward) const {
int len = p_keys.size();
if (len == 0) {
return -2;
@@ -2261,8 +2266,14 @@ int Animation::_find(const Vector<K> &p_keys, double p_time) const {
}
}
- if (keys[middle].time > p_time) {
- middle--;
+ if (!p_backward) {
+ if (keys[middle].time > p_time) {
+ middle--;
+ }
+ } else {
+ if (keys[middle].time < p_time) {
+ middle++;
+ }
}
return middle;
@@ -2385,7 +2396,7 @@ real_t Animation::_cubic_interpolate(const real_t &p_pre_a, const real_t &p_a, c
}
template <class T>
-T Animation::_interpolate(const Vector<TKey<T>> &p_keys, double p_time, InterpolationType p_interp, bool p_loop_wrap, bool *p_ok) const {
+T Animation::_interpolate(const Vector<TKey<T>> &p_keys, double p_time, InterpolationType p_interp, bool p_loop_wrap, bool *p_ok, bool p_backward) const {
int len = _find(p_keys, length) + 1; // try to find last key (there may be more past the end)
if (len <= 0) {
@@ -2403,7 +2414,7 @@ T Animation::_interpolate(const Vector<TKey<T>> &p_keys, double p_time, Interpol
return p_keys[0].value;
}
- int idx = _find(p_keys, p_time);
+ int idx = _find(p_keys, p_time, p_backward);
ERR_FAIL_COND_V(idx == -2, T());
@@ -2412,24 +2423,42 @@ T Animation::_interpolate(const Vector<TKey<T>> &p_keys, double p_time, Interpol
real_t c = 0.0;
// prepare for all cases of interpolation
- if (loop && p_loop_wrap) {
+ if ((loop_mode == LOOP_LINEAR || loop_mode == LOOP_PINGPONG) && p_loop_wrap) {
// loop
- if (idx >= 0) {
- if ((idx + 1) < len) {
- next = idx + 1;
- real_t delta = p_keys[next].time - p_keys[idx].time;
- real_t from = p_time - p_keys[idx].time;
-
- if (Math::is_zero_approx(delta)) {
- c = 0;
+ if (!p_backward) {
+ // no backward
+ if (idx >= 0) {
+ if (idx < len - 1) {
+ next = idx + 1;
+ real_t delta = p_keys[next].time - p_keys[idx].time;
+ real_t from = p_time - p_keys[idx].time;
+
+ if (Math::is_zero_approx(delta)) {
+ c = 0;
+ } else {
+ c = from / delta;
+ }
} else {
- c = from / delta;
- }
+ next = 0;
+ real_t delta = (length - p_keys[idx].time) + p_keys[next].time;
+ real_t from = p_time - p_keys[idx].time;
+ if (Math::is_zero_approx(delta)) {
+ c = 0;
+ } else {
+ c = from / delta;
+ }
+ }
} else {
+ // on loop, behind first key
+ idx = len - 1;
next = 0;
- real_t delta = (length - p_keys[idx].time) + p_keys[next].time;
- real_t from = p_time - p_keys[idx].time;
+ real_t endtime = (length - p_keys[idx].time);
+ if (endtime < 0) { // may be keys past the end
+ endtime = 0;
+ }
+ real_t delta = endtime + p_keys[next].time;
+ real_t from = endtime + p_time;
if (Math::is_zero_approx(delta)) {
c = 0;
@@ -2437,49 +2466,81 @@ T Animation::_interpolate(const Vector<TKey<T>> &p_keys, double p_time, Interpol
c = from / delta;
}
}
-
} else {
- // on loop, behind first key
- idx = len - 1;
- next = 0;
- real_t endtime = (length - p_keys[idx].time);
- if (endtime < 0) { // may be keys past the end
- endtime = 0;
- }
- real_t delta = endtime + p_keys[next].time;
- real_t from = endtime + p_time;
-
- if (Math::is_zero_approx(delta)) {
- c = 0;
+ // backward
+ if (idx <= len - 1) {
+ if (idx > 0) {
+ next = idx - 1;
+ real_t delta = (length - p_keys[next].time) - (length - p_keys[idx].time);
+ real_t from = (length - p_time) - (length - p_keys[idx].time);
+
+ if (Math::is_zero_approx(delta))
+ c = 0;
+ else
+ c = from / delta;
+ } else {
+ next = len - 1;
+ real_t delta = p_keys[idx].time + (length - p_keys[next].time);
+ real_t from = (length - p_time) - (length - p_keys[idx].time);
+
+ if (Math::is_zero_approx(delta))
+ c = 0;
+ else
+ c = from / delta;
+ }
} else {
- c = from / delta;
+ // on loop, in front of last key
+ idx = 0;
+ next = len - 1;
+ real_t endtime = p_keys[idx].time;
+ if (endtime > length) // may be keys past the end
+ endtime = length;
+ real_t delta = p_keys[next].time - endtime;
+ real_t from = p_time - endtime;
+
+ if (Math::is_zero_approx(delta))
+ c = 0;
+ else
+ c = from / delta;
}
}
-
} else { // no loop
-
- if (idx >= 0) {
- if ((idx + 1) < len) {
- next = idx + 1;
- real_t delta = p_keys[next].time - p_keys[idx].time;
- real_t from = p_time - p_keys[idx].time;
-
- if (Math::is_zero_approx(delta)) {
- c = 0;
+ if (!p_backward) {
+ if (idx >= 0) {
+ if (idx < len - 1) {
+ next = idx + 1;
+ real_t delta = p_keys[next].time - p_keys[idx].time;
+ real_t from = p_time - p_keys[idx].time;
+
+ if (Math::is_zero_approx(delta)) {
+ c = 0;
+ } else {
+ c = from / delta;
+ }
} else {
- c = from / delta;
+ next = idx;
}
-
} else {
- next = idx;
+ idx = next = 0;
}
-
} else {
- // only allow extending first key to anim start if looping
- if (loop) {
- idx = next = 0;
+ if (idx <= len - 1) {
+ if (idx > 0) {
+ next = idx - 1;
+ real_t delta = (length - p_keys[next].time) - (length - p_keys[idx].time);
+ real_t from = (length - p_time) - (length - p_keys[idx].time);
+
+ if (Math::is_zero_approx(delta)) {
+ c = 0;
+ } else {
+ c = from / delta;
+ }
+
+ } else {
+ next = idx;
+ }
} else {
- result = false;
+ idx = next = len - 1;
}
}
}
@@ -2583,7 +2644,7 @@ void Animation::_value_track_get_key_indices_in_range(const ValueTrack *vt, doub
}
}
-void Animation::value_track_get_key_indices(int p_track, double p_time, double p_delta, List<int> *p_indices) const {
+void Animation::value_track_get_key_indices(int p_track, double p_time, double p_delta, List<int> *p_indices, int p_pingponged) const {
ERR_FAIL_INDEX(p_track, tracks.size());
Track *t = tracks[p_track];
ERR_FAIL_COND(t->type != TYPE_VALUE);
@@ -2597,30 +2658,50 @@ void Animation::value_track_get_key_indices(int p_track, double p_time, double p
SWAP(from_time, to_time);
}
- if (loop) {
- from_time = Math::fposmod(from_time, length);
- to_time = Math::fposmod(to_time, length);
+ switch (loop_mode) {
+ case LOOP_NONE: {
+ if (from_time < 0) {
+ from_time = 0;
+ }
+ if (from_time > length) {
+ from_time = length;
+ }
- if (from_time > to_time) {
- // handle loop by splitting
- _value_track_get_key_indices_in_range(vt, from_time, length, p_indices);
- _value_track_get_key_indices_in_range(vt, 0, to_time, p_indices);
- return;
- }
- } else {
- if (from_time < 0) {
- from_time = 0;
- }
- if (from_time > length) {
- from_time = length;
- }
+ if (to_time < 0) {
+ to_time = 0;
+ }
+ if (to_time > length) {
+ to_time = length;
+ }
+ } break;
+ case LOOP_LINEAR: {
+ from_time = Math::fposmod(from_time, length);
+ to_time = Math::fposmod(to_time, length);
- if (to_time < 0) {
- to_time = 0;
- }
- if (to_time > length) {
- to_time = length;
- }
+ if (from_time > to_time) {
+ // handle loop by splitting
+ _value_track_get_key_indices_in_range(vt, from_time, length, p_indices);
+ _value_track_get_key_indices_in_range(vt, 0, to_time, p_indices);
+ return;
+ }
+ } break;
+ case LOOP_PINGPONG: {
+ from_time = Math::pingpong(from_time, length);
+ to_time = Math::pingpong(to_time, length);
+
+ if (p_pingponged == -1) {
+ // handle loop by splitting
+ _value_track_get_key_indices_in_range(vt, 0, from_time, p_indices);
+ _value_track_get_key_indices_in_range(vt, 0, to_time, p_indices);
+ return;
+ }
+ if (p_pingponged == 1) {
+ // handle loop by splitting
+ _value_track_get_key_indices_in_range(vt, from_time, length, p_indices);
+ _value_track_get_key_indices_in_range(vt, to_time, length, p_indices);
+ return;
+ }
+ } break;
}
_value_track_get_key_indices_in_range(vt, from_time, to_time, p_indices);
@@ -2679,7 +2760,7 @@ void Animation::_track_get_key_indices_in_range(const Vector<T> &p_array, double
}
}
-void Animation::track_get_key_indices_in_range(int p_track, double p_time, double p_delta, List<int> *p_indices) const {
+void Animation::track_get_key_indices_in_range(int p_track, double p_time, double p_delta, List<int> *p_indices, int p_pingponged) const {
ERR_FAIL_INDEX(p_track, tracks.size());
const Track *t = tracks[p_track];
@@ -2690,114 +2771,255 @@ void Animation::track_get_key_indices_in_range(int p_track, double p_time, doubl
SWAP(from_time, to_time);
}
- if (loop) {
- if (from_time > length || from_time < 0) {
- from_time = Math::fposmod(from_time, length);
- }
-
- if (to_time > length || to_time < 0) {
- to_time = Math::fposmod(to_time, length);
- }
-
- if (from_time > to_time) {
- // handle loop by splitting
-
- switch (t->type) {
- case TYPE_POSITION_3D: {
- const PositionTrack *tt = static_cast<const PositionTrack *>(t);
- if (tt->compressed_track >= 0) {
- _get_compressed_key_indices_in_range<3>(tt->compressed_track, from_time, length, p_indices);
- _get_compressed_key_indices_in_range<3>(tt->compressed_track, 0, to_time, p_indices);
-
- } else {
- _track_get_key_indices_in_range(tt->positions, from_time, length, p_indices);
- _track_get_key_indices_in_range(tt->positions, 0, to_time, p_indices);
- }
-
- } break;
- case TYPE_ROTATION_3D: {
- const RotationTrack *rt = static_cast<const RotationTrack *>(t);
- if (rt->compressed_track >= 0) {
- _get_compressed_key_indices_in_range<3>(rt->compressed_track, from_time, length, p_indices);
- _get_compressed_key_indices_in_range<3>(rt->compressed_track, 0, to_time, p_indices);
+ switch (loop_mode) {
+ case LOOP_NONE: {
+ if (from_time < 0) {
+ from_time = 0;
+ }
+ if (from_time > length) {
+ from_time = length;
+ }
- } else {
- _track_get_key_indices_in_range(rt->rotations, from_time, length, p_indices);
- _track_get_key_indices_in_range(rt->rotations, 0, to_time, p_indices);
- }
+ if (to_time < 0) {
+ to_time = 0;
+ }
+ if (to_time > length) {
+ to_time = length;
+ }
+ } break;
+ case LOOP_LINEAR: {
+ if (from_time > length || from_time < 0) {
+ from_time = Math::fposmod(from_time, length);
+ }
+ if (to_time > length || to_time < 0) {
+ to_time = Math::fposmod(to_time, length);
+ }
- } break;
- case TYPE_SCALE_3D: {
- const ScaleTrack *st = static_cast<const ScaleTrack *>(t);
- if (st->compressed_track >= 0) {
- _get_compressed_key_indices_in_range<3>(st->compressed_track, from_time, length, p_indices);
- _get_compressed_key_indices_in_range<3>(st->compressed_track, 0, to_time, p_indices);
+ if (from_time > to_time) {
+ // handle loop by splitting
+ switch (t->type) {
+ case TYPE_POSITION_3D: {
+ const PositionTrack *tt = static_cast<const PositionTrack *>(t);
+ if (tt->compressed_track >= 0) {
+ _get_compressed_key_indices_in_range<3>(tt->compressed_track, from_time, length, p_indices);
+ _get_compressed_key_indices_in_range<3>(tt->compressed_track, 0, to_time, p_indices);
+ } else {
+ _track_get_key_indices_in_range(tt->positions, from_time, length, p_indices);
+ _track_get_key_indices_in_range(tt->positions, 0, to_time, p_indices);
+ }
+ } break;
+ case TYPE_ROTATION_3D: {
+ const RotationTrack *rt = static_cast<const RotationTrack *>(t);
+ if (rt->compressed_track >= 0) {
+ _get_compressed_key_indices_in_range<3>(rt->compressed_track, from_time, length, p_indices);
+ _get_compressed_key_indices_in_range<3>(rt->compressed_track, 0, to_time, p_indices);
+ } else {
+ _track_get_key_indices_in_range(rt->rotations, from_time, length, p_indices);
+ _track_get_key_indices_in_range(rt->rotations, 0, to_time, p_indices);
+ }
+ } break;
+ case TYPE_SCALE_3D: {
+ const ScaleTrack *st = static_cast<const ScaleTrack *>(t);
+ if (st->compressed_track >= 0) {
+ _get_compressed_key_indices_in_range<3>(st->compressed_track, from_time, length, p_indices);
+ _get_compressed_key_indices_in_range<3>(st->compressed_track, 0, to_time, p_indices);
+ } else {
+ _track_get_key_indices_in_range(st->scales, from_time, length, p_indices);
+ _track_get_key_indices_in_range(st->scales, 0, to_time, p_indices);
+ }
+ } break;
+ case TYPE_BLEND_SHAPE: {
+ const BlendShapeTrack *bst = static_cast<const BlendShapeTrack *>(t);
+ if (bst->compressed_track >= 0) {
+ _get_compressed_key_indices_in_range<1>(bst->compressed_track, from_time, length, p_indices);
+ _get_compressed_key_indices_in_range<1>(bst->compressed_track, 0, to_time, p_indices);
+ } else {
+ _track_get_key_indices_in_range(bst->blend_shapes, from_time, length, p_indices);
+ _track_get_key_indices_in_range(bst->blend_shapes, 0, to_time, p_indices);
+ }
+ } break;
+ case TYPE_VALUE: {
+ const ValueTrack *vt = static_cast<const ValueTrack *>(t);
+ _track_get_key_indices_in_range(vt->values, from_time, length, p_indices);
+ _track_get_key_indices_in_range(vt->values, 0, to_time, p_indices);
+ } break;
+ case TYPE_METHOD: {
+ const MethodTrack *mt = static_cast<const MethodTrack *>(t);
+ _track_get_key_indices_in_range(mt->methods, from_time, length, p_indices);
+ _track_get_key_indices_in_range(mt->methods, 0, to_time, p_indices);
+ } break;
+ case TYPE_BEZIER: {
+ const BezierTrack *bz = static_cast<const BezierTrack *>(t);
+ _track_get_key_indices_in_range(bz->values, from_time, length, p_indices);
+ _track_get_key_indices_in_range(bz->values, 0, to_time, p_indices);
+ } break;
+ case TYPE_AUDIO: {
+ const AudioTrack *ad = static_cast<const AudioTrack *>(t);
+ _track_get_key_indices_in_range(ad->values, from_time, length, p_indices);
+ _track_get_key_indices_in_range(ad->values, 0, to_time, p_indices);
+ } break;
+ case TYPE_ANIMATION: {
+ const AnimationTrack *an = static_cast<const AnimationTrack *>(t);
+ _track_get_key_indices_in_range(an->values, from_time, length, p_indices);
+ _track_get_key_indices_in_range(an->values, 0, to_time, p_indices);
+ } break;
+ }
+ return;
+ }
+ } break;
+ case LOOP_PINGPONG: {
+ if (from_time > length || from_time < 0) {
+ from_time = Math::pingpong(from_time, length);
+ }
+ if (to_time > length || to_time < 0) {
+ to_time = Math::pingpong(to_time, length);
+ }
- } else {
- _track_get_key_indices_in_range(st->scales, from_time, length, p_indices);
- _track_get_key_indices_in_range(st->scales, 0, to_time, p_indices);
+ if ((int)Math::floor(abs(p_delta) / length) % 2 == 0) {
+ if (p_pingponged == -1) {
+ // handle loop by splitting
+ switch (t->type) {
+ case TYPE_POSITION_3D: {
+ const PositionTrack *tt = static_cast<const PositionTrack *>(t);
+ if (tt->compressed_track >= 0) {
+ _get_compressed_key_indices_in_range<3>(tt->compressed_track, 0, from_time, p_indices);
+ _get_compressed_key_indices_in_range<3>(tt->compressed_track, 0, to_time, p_indices);
+ } else {
+ _track_get_key_indices_in_range(tt->positions, 0, from_time, p_indices);
+ _track_get_key_indices_in_range(tt->positions, 0, to_time, p_indices);
+ }
+ } break;
+ case TYPE_ROTATION_3D: {
+ const RotationTrack *rt = static_cast<const RotationTrack *>(t);
+ if (rt->compressed_track >= 0) {
+ _get_compressed_key_indices_in_range<3>(rt->compressed_track, 0, from_time, p_indices);
+ _get_compressed_key_indices_in_range<3>(rt->compressed_track, 0, to_time, p_indices);
+ } else {
+ _track_get_key_indices_in_range(rt->rotations, 0, from_time, p_indices);
+ _track_get_key_indices_in_range(rt->rotations, 0, to_time, p_indices);
+ }
+ } break;
+ case TYPE_SCALE_3D: {
+ const ScaleTrack *st = static_cast<const ScaleTrack *>(t);
+ if (st->compressed_track >= 0) {
+ _get_compressed_key_indices_in_range<3>(st->compressed_track, 0, from_time, p_indices);
+ _get_compressed_key_indices_in_range<3>(st->compressed_track, 0, to_time, p_indices);
+ } else {
+ _track_get_key_indices_in_range(st->scales, 0, from_time, p_indices);
+ _track_get_key_indices_in_range(st->scales, 0, to_time, p_indices);
+ }
+ } break;
+ case TYPE_BLEND_SHAPE: {
+ const BlendShapeTrack *bst = static_cast<const BlendShapeTrack *>(t);
+ if (bst->compressed_track >= 0) {
+ _get_compressed_key_indices_in_range<1>(bst->compressed_track, 0, from_time, p_indices);
+ _get_compressed_key_indices_in_range<1>(bst->compressed_track, 0, to_time, p_indices);
+ } else {
+ _track_get_key_indices_in_range(bst->blend_shapes, 0, from_time, p_indices);
+ _track_get_key_indices_in_range(bst->blend_shapes, 0, to_time, p_indices);
+ }
+ } break;
+ case TYPE_VALUE: {
+ const ValueTrack *vt = static_cast<const ValueTrack *>(t);
+ _track_get_key_indices_in_range(vt->values, 0, from_time, p_indices);
+ _track_get_key_indices_in_range(vt->values, 0, to_time, p_indices);
+ } break;
+ case TYPE_METHOD: {
+ const MethodTrack *mt = static_cast<const MethodTrack *>(t);
+ _track_get_key_indices_in_range(mt->methods, 0, from_time, p_indices);
+ _track_get_key_indices_in_range(mt->methods, 0, to_time, p_indices);
+ } break;
+ case TYPE_BEZIER: {
+ const BezierTrack *bz = static_cast<const BezierTrack *>(t);
+ _track_get_key_indices_in_range(bz->values, 0, from_time, p_indices);
+ _track_get_key_indices_in_range(bz->values, 0, to_time, p_indices);
+ } break;
+ case TYPE_AUDIO: {
+ const AudioTrack *ad = static_cast<const AudioTrack *>(t);
+ _track_get_key_indices_in_range(ad->values, 0, from_time, p_indices);
+ _track_get_key_indices_in_range(ad->values, 0, to_time, p_indices);
+ } break;
+ case TYPE_ANIMATION: {
+ const AnimationTrack *an = static_cast<const AnimationTrack *>(t);
+ _track_get_key_indices_in_range(an->values, 0, from_time, p_indices);
+ _track_get_key_indices_in_range(an->values, 0, to_time, p_indices);
+ } break;
}
-
- } break;
- case TYPE_BLEND_SHAPE: {
- const BlendShapeTrack *bst = static_cast<const BlendShapeTrack *>(t);
- if (bst->compressed_track >= 0) {
- _get_compressed_key_indices_in_range<1>(bst->compressed_track, from_time, length, p_indices);
- _get_compressed_key_indices_in_range<1>(bst->compressed_track, 0, to_time, p_indices);
-
- } else {
- _track_get_key_indices_in_range(bst->blend_shapes, from_time, length, p_indices);
- _track_get_key_indices_in_range(bst->blend_shapes, 0, to_time, p_indices);
+ return;
+ }
+ if (p_pingponged == 1) {
+ // handle loop by splitting
+ switch (t->type) {
+ case TYPE_POSITION_3D: {
+ const PositionTrack *tt = static_cast<const PositionTrack *>(t);
+ if (tt->compressed_track >= 0) {
+ _get_compressed_key_indices_in_range<3>(tt->compressed_track, from_time, length, p_indices);
+ _get_compressed_key_indices_in_range<3>(tt->compressed_track, to_time, length, p_indices);
+ } else {
+ _track_get_key_indices_in_range(tt->positions, from_time, length, p_indices);
+ _track_get_key_indices_in_range(tt->positions, to_time, length, p_indices);
+ }
+ } break;
+ case TYPE_ROTATION_3D: {
+ const RotationTrack *rt = static_cast<const RotationTrack *>(t);
+ if (rt->compressed_track >= 0) {
+ _get_compressed_key_indices_in_range<3>(rt->compressed_track, from_time, length, p_indices);
+ _get_compressed_key_indices_in_range<3>(rt->compressed_track, to_time, length, p_indices);
+ } else {
+ _track_get_key_indices_in_range(rt->rotations, from_time, length, p_indices);
+ _track_get_key_indices_in_range(rt->rotations, to_time, length, p_indices);
+ }
+ } break;
+ case TYPE_SCALE_3D: {
+ const ScaleTrack *st = static_cast<const ScaleTrack *>(t);
+ if (st->compressed_track >= 0) {
+ _get_compressed_key_indices_in_range<3>(st->compressed_track, from_time, length, p_indices);
+ _get_compressed_key_indices_in_range<3>(st->compressed_track, to_time, length, p_indices);
+ } else {
+ _track_get_key_indices_in_range(st->scales, from_time, length, p_indices);
+ _track_get_key_indices_in_range(st->scales, to_time, length, p_indices);
+ }
+ } break;
+ case TYPE_BLEND_SHAPE: {
+ const BlendShapeTrack *bst = static_cast<const BlendShapeTrack *>(t);
+ if (bst->compressed_track >= 0) {
+ _get_compressed_key_indices_in_range<1>(bst->compressed_track, from_time, length, p_indices);
+ _get_compressed_key_indices_in_range<1>(bst->compressed_track, to_time, length, p_indices);
+ } else {
+ _track_get_key_indices_in_range(bst->blend_shapes, from_time, length, p_indices);
+ _track_get_key_indices_in_range(bst->blend_shapes, to_time, length, p_indices);
+ }
+ } break;
+ case TYPE_VALUE: {
+ const ValueTrack *vt = static_cast<const ValueTrack *>(t);
+ _track_get_key_indices_in_range(vt->values, from_time, length, p_indices);
+ _track_get_key_indices_in_range(vt->values, to_time, length, p_indices);
+ } break;
+ case TYPE_METHOD: {
+ const MethodTrack *mt = static_cast<const MethodTrack *>(t);
+ _track_get_key_indices_in_range(mt->methods, from_time, length, p_indices);
+ _track_get_key_indices_in_range(mt->methods, to_time, length, p_indices);
+ } break;
+ case TYPE_BEZIER: {
+ const BezierTrack *bz = static_cast<const BezierTrack *>(t);
+ _track_get_key_indices_in_range(bz->values, from_time, length, p_indices);
+ _track_get_key_indices_in_range(bz->values, to_time, length, p_indices);
+ } break;
+ case TYPE_AUDIO: {
+ const AudioTrack *ad = static_cast<const AudioTrack *>(t);
+ _track_get_key_indices_in_range(ad->values, from_time, length, p_indices);
+ _track_get_key_indices_in_range(ad->values, to_time, length, p_indices);
+ } break;
+ case TYPE_ANIMATION: {
+ const AnimationTrack *an = static_cast<const AnimationTrack *>(t);
+ _track_get_key_indices_in_range(an->values, from_time, length, p_indices);
+ _track_get_key_indices_in_range(an->values, to_time, length, p_indices);
+ } break;
}
-
- } break;
- case TYPE_VALUE: {
- const ValueTrack *vt = static_cast<const ValueTrack *>(t);
- _track_get_key_indices_in_range(vt->values, from_time, length, p_indices);
- _track_get_key_indices_in_range(vt->values, 0, to_time, p_indices);
-
- } break;
- case TYPE_METHOD: {
- const MethodTrack *mt = static_cast<const MethodTrack *>(t);
- _track_get_key_indices_in_range(mt->methods, from_time, length, p_indices);
- _track_get_key_indices_in_range(mt->methods, 0, to_time, p_indices);
-
- } break;
- case TYPE_BEZIER: {
- const BezierTrack *bz = static_cast<const BezierTrack *>(t);
- _track_get_key_indices_in_range(bz->values, from_time, length, p_indices);
- _track_get_key_indices_in_range(bz->values, 0, to_time, p_indices);
-
- } break;
- case TYPE_AUDIO: {
- const AudioTrack *ad = static_cast<const AudioTrack *>(t);
- _track_get_key_indices_in_range(ad->values, from_time, length, p_indices);
- _track_get_key_indices_in_range(ad->values, 0, to_time, p_indices);
-
- } break;
- case TYPE_ANIMATION: {
- const AnimationTrack *an = static_cast<const AnimationTrack *>(t);
- _track_get_key_indices_in_range(an->values, from_time, length, p_indices);
- _track_get_key_indices_in_range(an->values, 0, to_time, p_indices);
-
- } break;
+ return;
+ }
}
- return;
- }
- } else {
- if (from_time < 0) {
- from_time = 0;
- }
- if (from_time > length) {
- from_time = length;
- }
-
- if (to_time < 0) {
- to_time = 0;
- }
- if (to_time > length) {
- to_time = length;
- }
+ } break;
}
switch (t->type) {
@@ -2808,7 +3030,6 @@ void Animation::track_get_key_indices_in_range(int p_track, double p_time, doubl
} else {
_track_get_key_indices_in_range(tt->positions, from_time, to_time, p_indices);
}
-
} break;
case TYPE_ROTATION_3D: {
const RotationTrack *rt = static_cast<const RotationTrack *>(t);
@@ -2817,7 +3038,6 @@ void Animation::track_get_key_indices_in_range(int p_track, double p_time, doubl
} else {
_track_get_key_indices_in_range(rt->rotations, from_time, to_time, p_indices);
}
-
} break;
case TYPE_SCALE_3D: {
const ScaleTrack *st = static_cast<const ScaleTrack *>(t);
@@ -2826,7 +3046,6 @@ void Animation::track_get_key_indices_in_range(int p_track, double p_time, doubl
} else {
_track_get_key_indices_in_range(st->scales, from_time, to_time, p_indices);
}
-
} break;
case TYPE_BLEND_SHAPE: {
const BlendShapeTrack *bst = static_cast<const BlendShapeTrack *>(t);
@@ -2835,32 +3054,26 @@ void Animation::track_get_key_indices_in_range(int p_track, double p_time, doubl
} else {
_track_get_key_indices_in_range(bst->blend_shapes, from_time, to_time, p_indices);
}
-
} break;
case TYPE_VALUE: {
const ValueTrack *vt = static_cast<const ValueTrack *>(t);
_track_get_key_indices_in_range(vt->values, from_time, to_time, p_indices);
-
} break;
case TYPE_METHOD: {
const MethodTrack *mt = static_cast<const MethodTrack *>(t);
_track_get_key_indices_in_range(mt->methods, from_time, to_time, p_indices);
-
} break;
case TYPE_BEZIER: {
const BezierTrack *bz = static_cast<const BezierTrack *>(t);
_track_get_key_indices_in_range(bz->values, from_time, to_time, p_indices);
-
} break;
case TYPE_AUDIO: {
const AudioTrack *ad = static_cast<const AudioTrack *>(t);
_track_get_key_indices_in_range(ad->values, from_time, to_time, p_indices);
-
} break;
case TYPE_ANIMATION: {
const AnimationTrack *an = static_cast<const AnimationTrack *>(t);
_track_get_key_indices_in_range(an->values, from_time, to_time, p_indices);
-
} break;
}
}
@@ -2898,7 +3111,7 @@ void Animation::_method_track_get_key_indices_in_range(const MethodTrack *mt, do
}
}
-void Animation::method_track_get_key_indices(int p_track, double p_time, double p_delta, List<int> *p_indices) const {
+void Animation::method_track_get_key_indices(int p_track, double p_time, double p_delta, List<int> *p_indices, int p_pingponged) const {
ERR_FAIL_INDEX(p_track, tracks.size());
Track *t = tracks[p_track];
ERR_FAIL_COND(t->type != TYPE_METHOD);
@@ -2912,35 +3125,58 @@ void Animation::method_track_get_key_indices(int p_track, double p_time, double
SWAP(from_time, to_time);
}
- if (loop) {
- if (from_time > length || from_time < 0) {
- from_time = Math::fposmod(from_time, length);
- }
+ switch (loop_mode) {
+ case LOOP_NONE: {
+ if (from_time < 0) {
+ from_time = 0;
+ }
+ if (from_time > length) {
+ from_time = length;
+ }
- if (to_time > length || to_time < 0) {
- to_time = Math::fposmod(to_time, length);
- }
+ if (to_time < 0) {
+ to_time = 0;
+ }
+ if (to_time > length) {
+ to_time = length;
+ }
+ } break;
+ case LOOP_LINEAR: {
+ if (from_time > length || from_time < 0) {
+ from_time = Math::fposmod(from_time, length);
+ }
+ if (to_time > length || to_time < 0) {
+ to_time = Math::fposmod(to_time, length);
+ }
- if (from_time > to_time) {
- // handle loop by splitting
- _method_track_get_key_indices_in_range(mt, from_time, length, p_indices);
- _method_track_get_key_indices_in_range(mt, 0, to_time, p_indices);
- return;
- }
- } else {
- if (from_time < 0) {
- from_time = 0;
- }
- if (from_time > length) {
- from_time = length;
- }
+ if (from_time > to_time) {
+ // handle loop by splitting
+ _method_track_get_key_indices_in_range(mt, from_time, length, p_indices);
+ _method_track_get_key_indices_in_range(mt, 0, to_time, p_indices);
+ return;
+ }
+ } break;
+ case LOOP_PINGPONG: {
+ if (from_time > length || from_time < 0) {
+ from_time = Math::pingpong(from_time, length);
+ }
+ if (to_time > length || to_time < 0) {
+ to_time = Math::pingpong(to_time, length);
+ }
- if (to_time < 0) {
- to_time = 0;
- }
- if (to_time > length) {
- to_time = length;
- }
+ if (p_pingponged == -1) {
+ _method_track_get_key_indices_in_range(mt, 0, from_time, p_indices);
+ _method_track_get_key_indices_in_range(mt, 0, to_time, p_indices);
+ return;
+ }
+ if (p_pingponged == 1) {
+ _method_track_get_key_indices_in_range(mt, from_time, length, p_indices);
+ _method_track_get_key_indices_in_range(mt, to_time, length, p_indices);
+ return;
+ }
+ } break;
+ default:
+ break;
}
_method_track_get_key_indices_in_range(mt, from_time, to_time, p_indices);
@@ -2972,7 +3208,7 @@ StringName Animation::method_track_get_name(int p_track, int p_key_idx) const {
return pm->methods[p_key_idx].method;
}
-int Animation::bezier_track_insert_key(int p_track, double p_time, real_t p_value, const Vector2 &p_in_handle, const Vector2 &p_out_handle) {
+int Animation::bezier_track_insert_key(int p_track, double p_time, real_t p_value, const Vector2 &p_in_handle, const Vector2 &p_out_handle, const HandleMode p_handle_mode) {
ERR_FAIL_INDEX_V(p_track, tracks.size(), -1);
Track *t = tracks[p_track];
ERR_FAIL_COND_V(t->type != TYPE_BEZIER, -1);
@@ -2990,6 +3226,7 @@ int Animation::bezier_track_insert_key(int p_track, double p_time, real_t p_valu
if (k.value.out_handle.x < 0) {
k.value.out_handle.x = 0;
}
+ k.value.handle_mode = p_handle_mode;
int key = _insert(p_time, bt->values, k);
@@ -2998,6 +3235,30 @@ int Animation::bezier_track_insert_key(int p_track, double p_time, real_t p_valu
return key;
}
+void Animation::bezier_track_set_key_handle_mode(int p_track, int p_index, HandleMode p_mode, double p_balanced_value_time_ratio) {
+ ERR_FAIL_INDEX(p_track, tracks.size());
+ Track *t = tracks[p_track];
+ ERR_FAIL_COND(t->type != TYPE_BEZIER);
+
+ BezierTrack *bt = static_cast<BezierTrack *>(t);
+
+ ERR_FAIL_INDEX(p_index, bt->values.size());
+
+ bt->values.write[p_index].value.handle_mode = p_mode;
+
+ if (p_mode == HANDLE_MODE_BALANCED) {
+ Transform2D xform;
+ xform.set_scale(Vector2(1.0, 1.0 / p_balanced_value_time_ratio));
+
+ Vector2 vec_in = xform.xform(bt->values[p_index].value.in_handle);
+ Vector2 vec_out = xform.xform(bt->values[p_index].value.out_handle);
+
+ bt->values.write[p_index].value.in_handle = xform.affine_inverse().xform(-vec_out.normalized() * vec_in.length());
+ }
+
+ emit_changed();
+}
+
void Animation::bezier_track_set_key_value(int p_track, int p_index, real_t p_value) {
ERR_FAIL_INDEX(p_track, tracks.size());
Track *t = tracks[p_track];
@@ -3011,7 +3272,7 @@ void Animation::bezier_track_set_key_value(int p_track, int p_index, real_t p_va
emit_changed();
}
-void Animation::bezier_track_set_key_in_handle(int p_track, int p_index, const Vector2 &p_handle) {
+void Animation::bezier_track_set_key_in_handle(int p_track, int p_index, const Vector2 &p_handle, double p_balanced_value_time_ratio) {
ERR_FAIL_INDEX(p_track, tracks.size());
Track *t = tracks[p_track];
ERR_FAIL_COND(t->type != TYPE_BEZIER);
@@ -3020,14 +3281,26 @@ void Animation::bezier_track_set_key_in_handle(int p_track, int p_index, const V
ERR_FAIL_INDEX(p_index, bt->values.size());
- bt->values.write[p_index].value.in_handle = p_handle;
- if (bt->values[p_index].value.in_handle.x > 0) {
- bt->values.write[p_index].value.in_handle.x = 0;
+ Vector2 in_handle = p_handle;
+ if (in_handle.x > 0) {
+ in_handle.x = 0;
+ }
+ bt->values.write[p_index].value.in_handle = in_handle;
+
+ if (bt->values[p_index].value.handle_mode == HANDLE_MODE_BALANCED) {
+ Transform2D xform;
+ xform.set_scale(Vector2(1.0, 1.0 / p_balanced_value_time_ratio));
+
+ Vector2 vec_out = xform.xform(bt->values[p_index].value.out_handle);
+ Vector2 vec_in = xform.xform(in_handle);
+
+ bt->values.write[p_index].value.out_handle = xform.affine_inverse().xform(-vec_in.normalized() * vec_out.length());
}
+
emit_changed();
}
-void Animation::bezier_track_set_key_out_handle(int p_track, int p_index, const Vector2 &p_handle) {
+void Animation::bezier_track_set_key_out_handle(int p_track, int p_index, const Vector2 &p_handle, double p_balanced_value_time_ratio) {
ERR_FAIL_INDEX(p_track, tracks.size());
Track *t = tracks[p_track];
ERR_FAIL_COND(t->type != TYPE_BEZIER);
@@ -3036,10 +3309,22 @@ void Animation::bezier_track_set_key_out_handle(int p_track, int p_index, const
ERR_FAIL_INDEX(p_index, bt->values.size());
- bt->values.write[p_index].value.out_handle = p_handle;
- if (bt->values[p_index].value.out_handle.x < 0) {
- bt->values.write[p_index].value.out_handle.x = 0;
+ Vector2 out_handle = p_handle;
+ if (out_handle.x < 0) {
+ out_handle.x = 0;
+ }
+ bt->values.write[p_index].value.out_handle = out_handle;
+
+ if (bt->values[p_index].value.handle_mode == HANDLE_MODE_BALANCED) {
+ Transform2D xform;
+ xform.set_scale(Vector2(1.0, 1.0 / p_balanced_value_time_ratio));
+
+ Vector2 vec_in = xform.xform(bt->values[p_index].value.in_handle);
+ Vector2 vec_out = xform.xform(out_handle);
+
+ bt->values.write[p_index].value.in_handle = xform.affine_inverse().xform(-vec_out.normalized() * vec_in.length());
}
+
emit_changed();
}
@@ -3055,6 +3340,18 @@ real_t Animation::bezier_track_get_key_value(int p_track, int p_index) const {
return bt->values[p_index].value.value;
}
+int Animation::bezier_track_get_key_handle_mode(int p_track, int p_index) const {
+ ERR_FAIL_INDEX_V(p_track, tracks.size(), 0);
+ Track *t = tracks[p_track];
+ ERR_FAIL_COND_V(t->type != TYPE_BEZIER, 0);
+
+ BezierTrack *bt = static_cast<BezierTrack *>(t);
+
+ ERR_FAIL_INDEX_V(p_index, bt->values.size(), 0);
+
+ return bt->values[p_index].value.handle_mode;
+}
+
Vector2 Animation::bezier_track_get_key_in_handle(int p_track, int p_index) const {
ERR_FAIL_INDEX_V(p_track, tracks.size(), Vector2());
Track *t = tracks[p_track];
@@ -3326,13 +3623,13 @@ real_t Animation::get_length() const {
return length;
}
-void Animation::set_loop(bool p_enabled) {
- loop = p_enabled;
+void Animation::set_loop_mode(Animation::LoopMode p_loop_mode) {
+ loop_mode = p_loop_mode;
emit_changed();
}
-bool Animation::has_loop() const {
- return loop;
+Animation::LoopMode Animation::get_loop_mode() const {
+ return loop_mode;
}
void Animation::track_set_imported(int p_track, bool p_imported) {
@@ -3382,7 +3679,7 @@ void Animation::track_move_to(int p_track, int p_to_index) {
}
Track *track = tracks.get(p_track);
- tracks.remove(p_track);
+ tracks.remove_at(p_track);
// Take into account that the position of the tracks that come after the one removed will change.
tracks.insert(p_to_index > p_track ? p_to_index - 1 : p_to_index, track);
@@ -3487,11 +3784,11 @@ void Animation::_bind_methods() {
ClassDB::bind_method(D_METHOD("method_track_get_name", "track_idx", "key_idx"), &Animation::method_track_get_name);
ClassDB::bind_method(D_METHOD("method_track_get_params", "track_idx", "key_idx"), &Animation::method_track_get_params);
- ClassDB::bind_method(D_METHOD("bezier_track_insert_key", "track_idx", "time", "value", "in_handle", "out_handle"), &Animation::bezier_track_insert_key, DEFVAL(Vector2()), DEFVAL(Vector2()));
+ ClassDB::bind_method(D_METHOD("bezier_track_insert_key", "track_idx", "time", "value", "in_handle", "out_handle", "handle_mode"), &Animation::bezier_track_insert_key, DEFVAL(Vector2()), DEFVAL(Vector2()), DEFVAL(Animation::HandleMode::HANDLE_MODE_BALANCED));
ClassDB::bind_method(D_METHOD("bezier_track_set_key_value", "track_idx", "key_idx", "value"), &Animation::bezier_track_set_key_value);
- ClassDB::bind_method(D_METHOD("bezier_track_set_key_in_handle", "track_idx", "key_idx", "in_handle"), &Animation::bezier_track_set_key_in_handle);
- ClassDB::bind_method(D_METHOD("bezier_track_set_key_out_handle", "track_idx", "key_idx", "out_handle"), &Animation::bezier_track_set_key_out_handle);
+ ClassDB::bind_method(D_METHOD("bezier_track_set_key_in_handle", "track_idx", "key_idx", "in_handle", "balanced_value_time_ratio"), &Animation::bezier_track_set_key_in_handle, DEFVAL(1.0));
+ ClassDB::bind_method(D_METHOD("bezier_track_set_key_out_handle", "track_idx", "key_idx", "out_handle", "balanced_value_time_ratio"), &Animation::bezier_track_set_key_out_handle, DEFVAL(1.0));
ClassDB::bind_method(D_METHOD("bezier_track_get_key_value", "track_idx", "key_idx"), &Animation::bezier_track_get_key_value);
ClassDB::bind_method(D_METHOD("bezier_track_get_key_in_handle", "track_idx", "key_idx"), &Animation::bezier_track_get_key_in_handle);
@@ -3507,6 +3804,9 @@ void Animation::_bind_methods() {
ClassDB::bind_method(D_METHOD("audio_track_get_key_start_offset", "track_idx", "key_idx"), &Animation::audio_track_get_key_start_offset);
ClassDB::bind_method(D_METHOD("audio_track_get_key_end_offset", "track_idx", "key_idx"), &Animation::audio_track_get_key_end_offset);
+ ClassDB::bind_method(D_METHOD("bezier_track_set_key_handle_mode", "track_idx", "key_idx", "key_handle_mode", "balanced_value_time_ratio"), &Animation::bezier_track_set_key_handle_mode, DEFVAL(1.0));
+ ClassDB::bind_method(D_METHOD("bezier_track_get_key_handle_mode", "track_idx", "key_idx"), &Animation::bezier_track_get_key_handle_mode);
+
ClassDB::bind_method(D_METHOD("animation_track_insert_key", "track_idx", "time", "animation"), &Animation::animation_track_insert_key);
ClassDB::bind_method(D_METHOD("animation_track_set_key_animation", "track_idx", "key_idx", "animation"), &Animation::animation_track_set_key_animation);
ClassDB::bind_method(D_METHOD("animation_track_get_key_animation", "track_idx", "key_idx"), &Animation::animation_track_get_key_animation);
@@ -3514,8 +3814,8 @@ void Animation::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_length", "time_sec"), &Animation::set_length);
ClassDB::bind_method(D_METHOD("get_length"), &Animation::get_length);
- ClassDB::bind_method(D_METHOD("set_loop", "enabled"), &Animation::set_loop);
- ClassDB::bind_method(D_METHOD("has_loop"), &Animation::has_loop);
+ ClassDB::bind_method(D_METHOD("set_loop_mode", "loop_mode"), &Animation::set_loop_mode);
+ ClassDB::bind_method(D_METHOD("get_loop_mode"), &Animation::get_loop_mode);
ClassDB::bind_method(D_METHOD("set_step", "size_sec"), &Animation::set_step);
ClassDB::bind_method(D_METHOD("get_step"), &Animation::get_step);
@@ -3526,7 +3826,7 @@ void Animation::_bind_methods() {
ClassDB::bind_method(D_METHOD("compress", "page_size", "fps", "split_tolerance"), &Animation::compress, DEFVAL(8192), DEFVAL(120), DEFVAL(4.0));
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "length", PROPERTY_HINT_RANGE, "0.001,99999,0.001"), "set_length", "get_length");
- ADD_PROPERTY(PropertyInfo(Variant::BOOL, "loop"), "set_loop", "has_loop");
+ ADD_PROPERTY(PropertyInfo(Variant::INT, "loop_mode"), "set_loop_mode", "get_loop_mode");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "step", PROPERTY_HINT_RANGE, "0,4096,0.001"), "set_step", "get_step");
ADD_SIGNAL(MethodInfo("tracks_changed"));
@@ -3549,6 +3849,13 @@ void Animation::_bind_methods() {
BIND_ENUM_CONSTANT(UPDATE_DISCRETE);
BIND_ENUM_CONSTANT(UPDATE_TRIGGER);
BIND_ENUM_CONSTANT(UPDATE_CAPTURE);
+
+ BIND_ENUM_CONSTANT(LOOP_NONE);
+ BIND_ENUM_CONSTANT(LOOP_LINEAR);
+ BIND_ENUM_CONSTANT(LOOP_PINGPONG);
+
+ BIND_ENUM_CONSTANT(HANDLE_MODE_FREE);
+ BIND_ENUM_CONSTANT(HANDLE_MODE_BALANCED);
}
void Animation::clear() {
@@ -3556,7 +3863,7 @@ void Animation::clear() {
memdelete(tracks[i]);
}
tracks.clear();
- loop = false;
+ loop_mode = LOOP_NONE;
length = 1;
compression.enabled = false;
compression.bounds.clear();
@@ -3751,7 +4058,7 @@ void Animation::_position_track_optimize(int p_idx, real_t p_allowed_linear_err,
prev_erased = true;
}
- tt->positions.remove(i);
+ tt->positions.remove_at(i);
i--;
} else {
@@ -3786,7 +4093,7 @@ void Animation::_rotation_track_optimize(int p_idx, real_t p_allowed_angular_err
prev_erased = true;
}
- tt->rotations.remove(i);
+ tt->rotations.remove_at(i);
i--;
} else {
@@ -3820,7 +4127,7 @@ void Animation::_scale_track_optimize(int p_idx, real_t p_allowed_linear_err) {
prev_erased = true;
}
- tt->scales.remove(i);
+ tt->scales.remove_at(i);
i--;
} else {
@@ -3855,7 +4162,7 @@ void Animation::_blend_shape_track_optimize(int p_idx, real_t p_allowed_linear_e
prev_erased = true;
}
- tt->blend_shapes.remove(i);
+ tt->blend_shapes.remove_at(i);
i--;
} else {
diff --git a/scene/resources/animation.h b/scene/resources/animation.h
index ee07fb19d3..8e4287e4fb 100644
--- a/scene/resources/animation.h
+++ b/scene/resources/animation.h
@@ -64,7 +64,17 @@ public:
UPDATE_DISCRETE,
UPDATE_TRIGGER,
UPDATE_CAPTURE,
+ };
+
+ enum LoopMode {
+ LOOP_NONE,
+ LOOP_LINEAR,
+ LOOP_PINGPONG,
+ };
+ enum HandleMode {
+ HANDLE_MODE_FREE,
+ HANDLE_MODE_BALANCED,
};
private:
@@ -152,10 +162,10 @@ private:
};
/* BEZIER TRACK */
-
struct BezierKey {
Vector2 in_handle; //relative (x always <0)
Vector2 out_handle; //relative (x always >0)
+ HandleMode handle_mode = HANDLE_MODE_BALANCED;
real_t value = 0.0;
};
@@ -208,7 +218,8 @@ private:
int _insert(double p_time, T &p_keys, const V &p_value);
template <class K>
- inline int _find(const Vector<K> &p_keys, double p_time) const;
+
+ inline int _find(const Vector<K> &p_keys, double p_time, bool p_backward = false) const;
_FORCE_INLINE_ Vector3 _interpolate(const Vector3 &p_a, const Vector3 &p_b, real_t p_c) const;
_FORCE_INLINE_ Quaternion _interpolate(const Quaternion &p_a, const Quaternion &p_b, real_t p_c) const;
@@ -221,7 +232,7 @@ private:
_FORCE_INLINE_ real_t _cubic_interpolate(const real_t &p_pre_a, const real_t &p_a, const real_t &p_b, const real_t &p_post_b, real_t p_c) const;
template <class T>
- _FORCE_INLINE_ T _interpolate(const Vector<TKey<T>> &p_keys, double p_time, InterpolationType p_interp, bool p_loop_wrap, bool *p_ok) const;
+ _FORCE_INLINE_ T _interpolate(const Vector<TKey<T>> &p_keys, double p_time, InterpolationType p_interp, bool p_loop_wrap, bool *p_ok, bool p_backward = false) const;
template <class T>
_FORCE_INLINE_ void _track_get_key_indices_in_range(const Vector<T> &p_array, double from_time, double to_time, List<int> *p_indices) const;
@@ -231,7 +242,8 @@ private:
double length = 1.0;
real_t step = 0.1;
- bool loop = false;
+ LoopMode loop_mode = LOOP_NONE;
+ int pingponged = 0;
/* Animation compression page format (version 1):
*
@@ -412,11 +424,13 @@ public:
void track_set_interpolation_type(int p_track, InterpolationType p_interp);
InterpolationType track_get_interpolation_type(int p_track) const;
- int bezier_track_insert_key(int p_track, double p_time, real_t p_value, const Vector2 &p_in_handle, const Vector2 &p_out_handle);
+ int bezier_track_insert_key(int p_track, double p_time, real_t p_value, const Vector2 &p_in_handle, const Vector2 &p_out_handle, const HandleMode p_handle_mode = HandleMode::HANDLE_MODE_BALANCED);
+ void bezier_track_set_key_handle_mode(int p_track, int p_index, HandleMode p_mode, double p_balanced_value_time_ratio = 1.0);
void bezier_track_set_key_value(int p_track, int p_index, real_t p_value);
- void bezier_track_set_key_in_handle(int p_track, int p_index, const Vector2 &p_handle);
- void bezier_track_set_key_out_handle(int p_track, int p_index, const Vector2 &p_handle);
+ void bezier_track_set_key_in_handle(int p_track, int p_index, const Vector2 &p_handle, double p_balanced_value_time_ratio = 1.0);
+ void bezier_track_set_key_out_handle(int p_track, int p_index, const Vector2 &p_handle, double p_balanced_value_time_ratio = 1.0);
real_t bezier_track_get_key_value(int p_track, int p_index) const;
+ int bezier_track_get_key_handle_mode(int p_track, int p_index) const;
Vector2 bezier_track_get_key_in_handle(int p_track, int p_index) const;
Vector2 bezier_track_get_key_out_handle(int p_track, int p_index) const;
@@ -438,23 +452,23 @@ public:
bool track_get_interpolation_loop_wrap(int p_track) const;
Variant value_track_interpolate(int p_track, double p_time) const;
- void value_track_get_key_indices(int p_track, double p_time, double p_delta, List<int> *p_indices) const;
+ void value_track_get_key_indices(int p_track, double p_time, double p_delta, List<int> *p_indices, int p_pingponged = 0) const;
void value_track_set_update_mode(int p_track, UpdateMode p_mode);
UpdateMode value_track_get_update_mode(int p_track) const;
- void method_track_get_key_indices(int p_track, double p_time, double p_delta, List<int> *p_indices) const;
+ void method_track_get_key_indices(int p_track, double p_time, double p_delta, List<int> *p_indices, int p_pingponged = 0) const;
Vector<Variant> method_track_get_params(int p_track, int p_key_idx) const;
StringName method_track_get_name(int p_track, int p_key_idx) const;
void copy_track(int p_track, Ref<Animation> p_to_animation);
- void track_get_key_indices_in_range(int p_track, double p_time, double p_delta, List<int> *p_indices) const;
+ void track_get_key_indices_in_range(int p_track, double p_time, double p_delta, List<int> *p_indices, int p_pingponged = 0) const;
void set_length(real_t p_length);
real_t get_length() const;
- void set_loop(bool p_enabled);
- bool has_loop() const;
+ void set_loop_mode(LoopMode p_loop_mode);
+ LoopMode get_loop_mode() const;
void set_step(real_t p_step);
real_t get_step() const;
@@ -471,5 +485,7 @@ public:
VARIANT_ENUM_CAST(Animation::TrackType);
VARIANT_ENUM_CAST(Animation::InterpolationType);
VARIANT_ENUM_CAST(Animation::UpdateMode);
+VARIANT_ENUM_CAST(Animation::HandleMode);
+VARIANT_ENUM_CAST(Animation::LoopMode);
#endif
diff --git a/scene/resources/audio_stream_sample.cpp b/scene/resources/audio_stream_sample.cpp
index d018103e64..d3fab802c5 100644
--- a/scene/resources/audio_stream_sample.cpp
+++ b/scene/resources/audio_stream_sample.cpp
@@ -299,7 +299,7 @@ int AudioStreamPlaybackSample::mix(AudioFrame *p_buffer, float p_rate_scale, int
if (loop_format != AudioStreamSample::LOOP_DISABLED && offset < loop_begin_fp) {
/* loopstart reached */
- if (loop_format == AudioStreamSample::LOOP_PING_PONG) {
+ if (loop_format == AudioStreamSample::LOOP_PINGPONG) {
/* bounce ping pong */
offset = loop_begin_fp + (loop_begin_fp - offset);
increment = -increment;
@@ -320,7 +320,7 @@ int AudioStreamPlaybackSample::mix(AudioFrame *p_buffer, float p_rate_scale, int
if (loop_format != AudioStreamSample::LOOP_DISABLED && offset >= loop_end_fp) {
/* loopend reached */
- if (loop_format == AudioStreamSample::LOOP_PING_PONG) {
+ if (loop_format == AudioStreamSample::LOOP_PINGPONG) {
/* bounce ping pong */
offset = loop_end_fp - (offset - loop_end_fp);
increment = -increment;
@@ -636,7 +636,7 @@ void AudioStreamSample::_bind_methods() {
ClassDB::bind_method(D_METHOD("save_to_wav", "path"), &AudioStreamSample::save_to_wav);
- ADD_PROPERTY(PropertyInfo(Variant::PACKED_BYTE_ARRAY, "data", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR), "set_data", "get_data");
+ ADD_PROPERTY(PropertyInfo(Variant::PACKED_BYTE_ARRAY, "data", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), "set_data", "get_data");
ADD_PROPERTY(PropertyInfo(Variant::INT, "format", PROPERTY_HINT_ENUM, "8-Bit,16-Bit,IMA-ADPCM"), "set_format", "get_format");
ADD_PROPERTY(PropertyInfo(Variant::INT, "loop_mode", PROPERTY_HINT_ENUM, "Disabled,Forward,Ping-Pong,Backward"), "set_loop_mode", "get_loop_mode");
ADD_PROPERTY(PropertyInfo(Variant::INT, "loop_begin"), "set_loop_begin", "get_loop_begin");
@@ -650,7 +650,7 @@ void AudioStreamSample::_bind_methods() {
BIND_ENUM_CONSTANT(LOOP_DISABLED);
BIND_ENUM_CONSTANT(LOOP_FORWARD);
- BIND_ENUM_CONSTANT(LOOP_PING_PONG);
+ BIND_ENUM_CONSTANT(LOOP_PINGPONG);
BIND_ENUM_CONSTANT(LOOP_BACKWARD);
}
diff --git a/scene/resources/audio_stream_sample.h b/scene/resources/audio_stream_sample.h
index 24198e3c98..0eb34be9bf 100644
--- a/scene/resources/audio_stream_sample.h
+++ b/scene/resources/audio_stream_sample.h
@@ -92,7 +92,7 @@ public:
enum LoopMode {
LOOP_DISABLED,
LOOP_FORWARD,
- LOOP_PING_PONG,
+ LOOP_PINGPONG,
LOOP_BACKWARD
};
diff --git a/scene/resources/bit_map.cpp b/scene/resources/bit_map.cpp
index 49ed9dcb82..16f1507c34 100644
--- a/scene/resources/bit_map.cpp
+++ b/scene/resources/bit_map.cpp
@@ -674,7 +674,7 @@ void BitMap::_bind_methods() {
ClassDB::bind_method(D_METHOD("grow_mask", "pixels", "rect"), &BitMap::grow_mask);
ClassDB::bind_method(D_METHOD("opaque_to_polygons", "rect", "epsilon"), &BitMap::_opaque_to_polygons_bind, DEFVAL(2.0));
- ADD_PROPERTY(PropertyInfo(Variant::DICTIONARY, "data", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL), "_set_data", "_get_data");
+ ADD_PROPERTY(PropertyInfo(Variant::DICTIONARY, "data", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL), "_set_data", "_get_data");
}
BitMap::BitMap() {}
diff --git a/scene/resources/camera_effects.cpp b/scene/resources/camera_effects.cpp
index b633196424..0df372ea1b 100644
--- a/scene/resources/camera_effects.cpp
+++ b/scene/resources/camera_effects.cpp
@@ -149,7 +149,7 @@ void CameraEffects::_validate_property(PropertyInfo &property) const {
if ((!dof_blur_far_enabled && (property.name == "dof_blur_far_distance" || property.name == "dof_blur_far_transition")) ||
(!dof_blur_near_enabled && (property.name == "dof_blur_near_distance" || property.name == "dof_blur_near_transition")) ||
(!override_exposure_enabled && property.name == "override_exposure")) {
- property.usage = PROPERTY_USAGE_NOEDITOR;
+ property.usage = PROPERTY_USAGE_NO_EDITOR;
}
}
diff --git a/scene/resources/concave_polygon_shape_3d.cpp b/scene/resources/concave_polygon_shape_3d.cpp
index 3fed700383..03854683bd 100644
--- a/scene/resources/concave_polygon_shape_3d.cpp
+++ b/scene/resources/concave_polygon_shape_3d.cpp
@@ -108,7 +108,7 @@ void ConcavePolygonShape3D::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_backface_collision_enabled", "enabled"), &ConcavePolygonShape3D::set_backface_collision_enabled);
ClassDB::bind_method(D_METHOD("is_backface_collision_enabled"), &ConcavePolygonShape3D::is_backface_collision_enabled);
- ADD_PROPERTY(PropertyInfo(Variant::PACKED_VECTOR3_ARRAY, "data", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL), "set_faces", "get_faces");
+ ADD_PROPERTY(PropertyInfo(Variant::PACKED_VECTOR3_ARRAY, "data", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL), "set_faces", "get_faces");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "backface_collision"), "set_backface_collision_enabled", "is_backface_collision_enabled");
}
diff --git a/scene/resources/curve.cpp b/scene/resources/curve.cpp
index 9dc76dcf44..b87639de6a 100644
--- a/scene/resources/curve.cpp
+++ b/scene/resources/curve.cpp
@@ -136,7 +136,7 @@ void Curve::clean_dupes() {
for (int i = 1; i < _points.size(); ++i) {
real_t diff = _points[i - 1].pos.x - _points[i].pos.x;
if (diff <= CMP_EPSILON) {
- _points.remove(i);
+ _points.remove_at(i);
--i;
dirty = true;
}
@@ -207,7 +207,7 @@ Curve::TangentMode Curve::get_point_right_mode(int i) const {
void Curve::remove_point(int p_index) {
ERR_FAIL_INDEX(p_index, _points.size());
- _points.remove(p_index);
+ _points.remove_at(p_index);
mark_dirty();
}
@@ -522,7 +522,7 @@ void Curve::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "min_value", PROPERTY_HINT_RANGE, "-1024,1024,0.01"), "set_min_value", "get_min_value");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "max_value", PROPERTY_HINT_RANGE, "-1024,1024,0.01"), "set_max_value", "get_max_value");
ADD_PROPERTY(PropertyInfo(Variant::INT, "bake_resolution", PROPERTY_HINT_RANGE, "1,1000,1"), "set_bake_resolution", "get_bake_resolution");
- ADD_PROPERTY(PropertyInfo(Variant::INT, "_data", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL), "_set_data", "_get_data");
+ ADD_PROPERTY(PropertyInfo(Variant::INT, "_data", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL), "_set_data", "_get_data");
ADD_SIGNAL(MethodInfo(SIGNAL_RANGE_CHANGED));
@@ -591,7 +591,7 @@ Vector2 Curve2D::get_point_out(int p_index) const {
void Curve2D::remove_point(int p_index) {
ERR_FAIL_INDEX(p_index, points.size());
- points.remove(p_index);
+ points.remove_at(p_index);
baked_cache_dirty = true;
emit_signal(CoreStringNames::get_singleton()->changed);
}
@@ -1006,7 +1006,7 @@ void Curve2D::_bind_methods() {
ClassDB::bind_method(D_METHOD("_set_data"), &Curve2D::_set_data);
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "bake_interval", PROPERTY_HINT_RANGE, "0.01,512,0.01"), "set_bake_interval", "get_bake_interval");
- ADD_PROPERTY(PropertyInfo(Variant::INT, "_data", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL), "_set_data", "_get_data");
+ ADD_PROPERTY(PropertyInfo(Variant::INT, "_data", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL), "_set_data", "_get_data");
}
Curve2D::Curve2D() {
@@ -1095,7 +1095,7 @@ Vector3 Curve3D::get_point_out(int p_index) const {
void Curve3D::remove_point(int p_index) {
ERR_FAIL_INDEX(p_index, points.size());
- points.remove(p_index);
+ points.remove_at(p_index);
baked_cache_dirty = true;
emit_signal(CoreStringNames::get_singleton()->changed);
}
@@ -1699,7 +1699,7 @@ void Curve3D::_bind_methods() {
ClassDB::bind_method(D_METHOD("_set_data"), &Curve3D::_set_data);
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "bake_interval", PROPERTY_HINT_RANGE, "0.01,512,0.01"), "set_bake_interval", "get_bake_interval");
- ADD_PROPERTY(PropertyInfo(Variant::INT, "_data", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL), "_set_data", "_get_data");
+ ADD_PROPERTY(PropertyInfo(Variant::INT, "_data", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL), "_set_data", "_get_data");
ADD_GROUP("Up Vector", "up_vector_");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "up_vector_enabled"), "set_up_vector_enabled", "is_up_vector_enabled");
diff --git a/scene/resources/default_theme/default_theme.cpp b/scene/resources/default_theme/default_theme.cpp
index f21a070133..a1d76ef352 100644
--- a/scene/resources/default_theme/default_theme.cpp
+++ b/scene/resources/default_theme/default_theme.cpp
@@ -940,7 +940,7 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const
theme->set_constant("shadow_offset_x", "RichTextLabel", 1 * scale);
theme->set_constant("shadow_offset_y", "RichTextLabel", 1 * scale);
- theme->set_constant("shadow_as_outline", "RichTextLabel", 0 * scale);
+ theme->set_constant("shadow_outline_size", "RichTextLabel", 1 * scale);
theme->set_constant("line_separation", "RichTextLabel", 0 * scale);
theme->set_constant("table_hseparation", "RichTextLabel", 3 * scale);
diff --git a/scene/resources/environment.cpp b/scene/resources/environment.cpp
index 9f8e89564d..4c25ed589b 100644
--- a/scene/resources/environment.cpp
+++ b/scene/resources/environment.cpp
@@ -917,7 +917,7 @@ float Environment::get_adjustment_saturation() const {
void Environment::set_adjustment_color_correction(Ref<Texture> p_color_correction) {
adjustment_color_correction = p_color_correction;
- Ref<GradientTexture> grad_tex = p_color_correction;
+ Ref<GradientTexture1D> grad_tex = p_color_correction;
if (grad_tex.is_valid()) {
if (!grad_tex->is_connected(CoreStringNames::get_singleton()->changed, callable_mp(this, &Environment::_update_adjustment))) {
grad_tex->connect(CoreStringNames::get_singleton()->changed, callable_mp(this, &Environment::_update_adjustment));
@@ -954,39 +954,39 @@ void Environment::_update_adjustment() {
void Environment::_validate_property(PropertyInfo &property) const {
if (property.name == "sky" || property.name == "sky_custom_fov" || property.name == "sky_rotation" || property.name == "ambient_light/sky_contribution") {
if (bg_mode != BG_SKY && ambient_source != AMBIENT_SOURCE_SKY && reflection_source != REFLECTION_SOURCE_SKY) {
- property.usage = PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL;
+ property.usage = PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL;
}
}
if (property.name == "fog_aerial_perspective") {
if (bg_mode != BG_SKY) {
- property.usage = PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL;
+ property.usage = PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL;
}
}
if (property.name == "glow_intensity" && glow_blend_mode == GLOW_BLEND_MODE_MIX) {
- property.usage = PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL;
+ property.usage = PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL;
}
if (property.name == "glow_mix" && glow_blend_mode != GLOW_BLEND_MODE_MIX) {
- property.usage = PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL;
+ property.usage = PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL;
}
if (property.name == "background_color") {
if (bg_mode != BG_COLOR && ambient_source != AMBIENT_SOURCE_COLOR) {
- property.usage = PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL;
+ property.usage = PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL;
}
}
if (property.name == "background_canvas_max_layer") {
if (bg_mode != BG_CANVAS) {
- property.usage = PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL;
+ property.usage = PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL;
}
}
if (property.name == "background_camera_feed_id") {
if (bg_mode != BG_CAMERA_FEED) {
- property.usage = PROPERTY_USAGE_NOEDITOR;
+ property.usage = PROPERTY_USAGE_NO_EDITOR;
}
}
@@ -1018,7 +1018,7 @@ void Environment::_validate_property(PropertyInfo &property) const {
String enabled = prefix + "enabled";
if (property.name.begins_with(prefix) && property.name != enabled && !bool(get(enabled))) {
- property.usage = PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL;
+ property.usage = PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL;
return;
}
@@ -1031,7 +1031,7 @@ void Environment::_validate_property(PropertyInfo &property) const {
String prefix = String(*prefixes);
if (property.name.begins_with(prefix)) {
- property.usage = PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL;
+ property.usage = PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL;
return;
}
diff --git a/scene/resources/font.cpp b/scene/resources/font.cpp
index 819ae95715..d88a2c557b 100644
--- a/scene/resources/font.cpp
+++ b/scene/resources/font.cpp
@@ -70,6 +70,15 @@ void FontData::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_antialiased", "antialiased"), &FontData::set_antialiased);
ClassDB::bind_method(D_METHOD("is_antialiased"), &FontData::is_antialiased);
+ ClassDB::bind_method(D_METHOD("set_font_name", "name"), &FontData::set_font_name);
+ ClassDB::bind_method(D_METHOD("get_font_name"), &FontData::get_font_name);
+
+ ClassDB::bind_method(D_METHOD("set_font_style_name", "name"), &FontData::set_font_style_name);
+ ClassDB::bind_method(D_METHOD("get_font_style_name"), &FontData::get_font_style_name);
+
+ ClassDB::bind_method(D_METHOD("set_font_style", "style"), &FontData::set_font_style);
+ ClassDB::bind_method(D_METHOD("get_font_style"), &FontData::get_font_style);
+
ClassDB::bind_method(D_METHOD("set_multichannel_signed_distance_field", "msdf"), &FontData::set_multichannel_signed_distance_field);
ClassDB::bind_method(D_METHOD("is_multichannel_signed_distance_field"), &FontData::is_multichannel_signed_distance_field);
@@ -79,6 +88,9 @@ void FontData::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_msdf_size", "msdf_size"), &FontData::set_msdf_size);
ClassDB::bind_method(D_METHOD("get_msdf_size"), &FontData::get_msdf_size);
+ ClassDB::bind_method(D_METHOD("set_fixed_size", "fixed_size"), &FontData::set_fixed_size);
+ ClassDB::bind_method(D_METHOD("get_fixed_size"), &FontData::get_fixed_size);
+
ClassDB::bind_method(D_METHOD("set_force_autohinter", "force_autohinter"), &FontData::set_force_autohinter);
ClassDB::bind_method(D_METHOD("is_force_autohinter"), &FontData::is_force_autohinter);
@@ -190,6 +202,15 @@ bool FontData::_set(const StringName &p_name, const Variant &p_value) {
} else if (tokens[0] == "antialiased") {
set_antialiased(p_value);
return true;
+ } else if (tokens[0] == "font_name") {
+ set_font_name(p_value);
+ return true;
+ } else if (tokens[0] == "style_name") {
+ set_font_style_name(p_value);
+ return true;
+ } else if (tokens[0] == "font_style") {
+ set_font_style(p_value);
+ return true;
} else if (tokens[0] == "multichannel_signed_distance_field") {
set_multichannel_signed_distance_field(p_value);
return true;
@@ -295,6 +316,15 @@ bool FontData::_get(const StringName &p_name, Variant &r_ret) const {
} else if (tokens[0] == "antialiased") {
r_ret = is_antialiased();
return true;
+ } else if (tokens[0] == "font_name") {
+ r_ret = get_font_name();
+ return true;
+ } else if (tokens[0] == "style_name") {
+ r_ret = get_font_style_name();
+ return true;
+ } else if (tokens[0] == "font_style") {
+ r_ret = get_font_style();
+ return true;
} else if (tokens[0] == "multichannel_signed_distance_field") {
r_ret = is_multichannel_signed_distance_field();
return true;
@@ -394,6 +424,9 @@ bool FontData::_get(const StringName &p_name, Variant &r_ret) const {
void FontData::_get_property_list(List<PropertyInfo> *p_list) const {
p_list->push_back(PropertyInfo(Variant::PACKED_BYTE_ARRAY, "data", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_STORAGE));
+ p_list->push_back(PropertyInfo(Variant::STRING, "font_name", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_STORAGE));
+ p_list->push_back(PropertyInfo(Variant::STRING, "style_name", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_STORAGE));
+ p_list->push_back(PropertyInfo(Variant::INT, "font_style", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_STORAGE));
p_list->push_back(PropertyInfo(Variant::BOOL, "antialiased", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_STORAGE));
p_list->push_back(PropertyInfo(Variant::BOOL, "multichannel_signed_distance_field", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_STORAGE));
p_list->push_back(PropertyInfo(Variant::INT, "msdf_pixel_range", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_STORAGE));
@@ -510,6 +543,36 @@ PackedByteArray FontData::get_data() const {
return data;
}
+void FontData::set_font_name(const String &p_name) {
+ _ensure_rid(0);
+ TS->font_set_name(cache[0], p_name);
+}
+
+String FontData::get_font_name() const {
+ _ensure_rid(0);
+ return TS->font_get_name(cache[0]);
+}
+
+void FontData::set_font_style_name(const String &p_name) {
+ _ensure_rid(0);
+ TS->font_set_style_name(cache[0], p_name);
+}
+
+String FontData::get_font_style_name() const {
+ _ensure_rid(0);
+ return TS->font_get_style_name(cache[0]);
+}
+
+void FontData::set_font_style(uint32_t p_style) {
+ _ensure_rid(0);
+ TS->font_set_style(cache[0], p_style);
+}
+
+uint32_t FontData::get_font_style() const {
+ _ensure_rid(0);
+ return TS->font_get_style(cache[0]);
+}
+
void FontData::set_antialiased(bool p_antialiased) {
if (antialiased != p_antialiased) {
antialiased = p_antialiased;
@@ -689,7 +752,7 @@ void FontData::remove_cache(int p_cache_index) {
if (cache[p_cache_index].is_valid()) {
TS->free(cache.write[p_cache_index]);
}
- cache.remove(p_cache_index);
+ cache.remove_at(p_cache_index);
emit_changed();
}
@@ -1293,8 +1356,8 @@ void Font::remove_data(int p_idx) {
data.write[p_idx]->disconnect(SNAME("changed"), callable_mp(this, &Font::_data_changed));
}
- data.remove(p_idx);
- rids.remove(p_idx);
+ data.remove_at(p_idx);
+ rids.remove_at(p_idx);
cache.clear();
cache_wrap.clear();
diff --git a/scene/resources/font.h b/scene/resources/font.h
index e1f1f6d742..4d9ee72c84 100644
--- a/scene/resources/font.h
+++ b/scene/resources/font.h
@@ -79,6 +79,15 @@ public:
virtual PackedByteArray get_data() const;
// Common properties.
+ virtual void set_font_name(const String &p_name);
+ virtual String get_font_name() const;
+
+ virtual void set_font_style_name(const String &p_name);
+ virtual String get_font_style_name() const;
+
+ virtual void set_font_style(uint32_t p_style);
+ virtual uint32_t get_font_style() const;
+
virtual void set_antialiased(bool p_antialiased);
virtual bool is_antialiased() const;
diff --git a/scene/resources/gradient.cpp b/scene/resources/gradient.cpp
index 7b9b942142..95ec141df6 100644
--- a/scene/resources/gradient.cpp
+++ b/scene/resources/gradient.cpp
@@ -51,6 +51,8 @@ void Gradient::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_offset", "point", "offset"), &Gradient::set_offset);
ClassDB::bind_method(D_METHOD("get_offset", "point"), &Gradient::get_offset);
+ ClassDB::bind_method(D_METHOD("reverse"), &Gradient::reverse);
+
ClassDB::bind_method(D_METHOD("set_color", "point", "color"), &Gradient::set_color);
ClassDB::bind_method(D_METHOD("get_color", "point"), &Gradient::get_color);
@@ -64,8 +66,18 @@ void Gradient::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_colors", "colors"), &Gradient::set_colors);
ClassDB::bind_method(D_METHOD("get_colors"), &Gradient::get_colors);
+ ClassDB::bind_method(D_METHOD("set_interpolation_mode", "interpolation_mode"), &Gradient::set_interpolation_mode);
+ ClassDB::bind_method(D_METHOD("get_interpolation_mode"), &Gradient::get_interpolation_mode);
+
+ ADD_PROPERTY(PropertyInfo(Variant::INT, "interpolation_mode", PROPERTY_HINT_ENUM, "Linear,Constant,Cubic"), "set_interpolation_mode", "get_interpolation_mode");
+
+ ADD_GROUP("Raw data", "");
ADD_PROPERTY(PropertyInfo(Variant::PACKED_FLOAT32_ARRAY, "offsets"), "set_offsets", "get_offsets");
ADD_PROPERTY(PropertyInfo(Variant::PACKED_COLOR_ARRAY, "colors"), "set_colors", "get_colors");
+
+ BIND_ENUM_CONSTANT(GRADIENT_INTERPOLATE_LINEAR);
+ BIND_ENUM_CONSTANT(GRADIENT_INTERPOLATE_CONSTANT);
+ BIND_ENUM_CONSTANT(GRADIENT_INTERPOLATE_CUBIC);
}
Vector<float> Gradient::get_offsets() const {
@@ -86,6 +98,15 @@ Vector<Color> Gradient::get_colors() const {
return colors;
}
+void Gradient::set_interpolation_mode(Gradient::InterpolationMode p_interp_mode) {
+ interpolation_mode = p_interp_mode;
+ emit_signal(CoreStringNames::get_singleton()->changed);
+}
+
+Gradient::InterpolationMode Gradient::get_interpolation_mode() {
+ return interpolation_mode;
+}
+
void Gradient::set_offsets(const Vector<float> &p_offsets) {
points.resize(p_offsets.size());
for (int i = 0; i < points.size(); i++) {
@@ -123,7 +144,16 @@ void Gradient::add_point(float p_offset, const Color &p_color) {
void Gradient::remove_point(int p_index) {
ERR_FAIL_INDEX(p_index, points.size());
ERR_FAIL_COND(points.size() <= 1);
- points.remove(p_index);
+ points.remove_at(p_index);
+ emit_signal(CoreStringNames::get_singleton()->changed);
+}
+
+void Gradient::reverse() {
+ for (int i = 0; i < points.size(); i++) {
+ points.write[i].offset = 1.0 - points[i].offset;
+ }
+
+ _update_sorting();
emit_signal(CoreStringNames::get_singleton()->changed);
}
diff --git a/scene/resources/gradient.h b/scene/resources/gradient.h
index cf5b179c45..eb438d0bba 100644
--- a/scene/resources/gradient.h
+++ b/scene/resources/gradient.h
@@ -38,6 +38,12 @@ class Gradient : public Resource {
OBJ_SAVE_TYPE(Gradient);
public:
+ enum InterpolationMode {
+ GRADIENT_INTERPOLATE_LINEAR,
+ GRADIENT_INTERPOLATE_CONSTANT,
+ GRADIENT_INTERPOLATE_CUBIC,
+ };
+
struct Point {
float offset = 0.0;
Color color;
@@ -49,6 +55,8 @@ public:
private:
Vector<Point> points;
bool is_sorted = true;
+ InterpolationMode interpolation_mode = GRADIENT_INTERPOLATE_LINEAR;
+
_FORCE_INLINE_ void _update_sorting() {
if (!is_sorted) {
points.sort();
@@ -65,9 +73,9 @@ public:
void add_point(float p_offset, const Color &p_color);
void remove_point(int p_index);
-
void set_points(Vector<Point> &p_points);
Vector<Point> &get_points();
+ void reverse();
void set_offset(int pos, const float offset);
float get_offset(int pos);
@@ -81,6 +89,13 @@ public:
void set_colors(const Vector<Color> &p_colors);
Vector<Color> get_colors() const;
+ void set_interpolation_mode(InterpolationMode p_interp_mode);
+ InterpolationMode get_interpolation_mode();
+
+ _FORCE_INLINE_ float cubic_interpolate(float p0, float p1, float p2, float p3, float x) {
+ return p1 + 0.5 * x * (p2 - p0 + x * (2.0 * p0 - 5.0 * p1 + 4.0 * p2 - p3 + x * (3.0 * (p1 - p2) + p3 - p0)));
+ }
+
_FORCE_INLINE_ Color get_color_at_offset(float p_offset) {
if (points.is_empty()) {
return Color(0, 0, 0, 1);
@@ -88,7 +103,7 @@ public:
_update_sorting();
- //binary search
+ // Binary search.
int low = 0;
int high = points.size() - 1;
int middle = 0;
@@ -111,7 +126,7 @@ public:
}
}
- //return interpolated value
+ // Return interpolated value.
if (points[middle].offset > p_offset) {
middle--;
}
@@ -125,10 +140,44 @@ public:
}
const Point &pointFirst = points[first];
const Point &pointSecond = points[second];
- return pointFirst.color.lerp(pointSecond.color, (p_offset - pointFirst.offset) / (pointSecond.offset - pointFirst.offset));
+
+ switch (interpolation_mode) {
+ case GRADIENT_INTERPOLATE_LINEAR: {
+ return pointFirst.color.lerp(pointSecond.color, (p_offset - pointFirst.offset) / (pointSecond.offset - pointFirst.offset));
+ } break;
+ case GRADIENT_INTERPOLATE_CONSTANT: {
+ return pointFirst.color;
+ } break;
+ case GRADIENT_INTERPOLATE_CUBIC: {
+ int p0 = first - 1;
+ int p3 = second + 1;
+ if (p3 >= points.size()) {
+ p3 = second;
+ }
+ if (p0 < 0) {
+ p0 = first;
+ }
+ const Point &pointP0 = points[p0];
+ const Point &pointP3 = points[p3];
+
+ float x = (p_offset - pointFirst.offset) / (pointSecond.offset - pointFirst.offset);
+ float r = cubic_interpolate(pointP0.color.r, pointFirst.color.r, pointSecond.color.r, pointP3.color.r, x);
+ float g = cubic_interpolate(pointP0.color.g, pointFirst.color.g, pointSecond.color.g, pointP3.color.g, x);
+ float b = cubic_interpolate(pointP0.color.b, pointFirst.color.b, pointSecond.color.b, pointP3.color.b, x);
+ float a = cubic_interpolate(pointP0.color.a, pointFirst.color.a, pointSecond.color.a, pointP3.color.a, x);
+
+ return Color(r, g, b, a);
+ } break;
+ default: {
+ // Fallback to linear interpolation.
+ return pointFirst.color.lerp(pointSecond.color, (p_offset - pointFirst.offset) / (pointSecond.offset - pointFirst.offset));
+ }
+ }
}
int get_points_count() const;
};
+VARIANT_ENUM_CAST(Gradient::InterpolationMode);
+
#endif // GRADIENT_H
diff --git a/scene/resources/importer_mesh.cpp b/scene/resources/importer_mesh.cpp
index 076b8312b6..7afa4c91f0 100644
--- a/scene/resources/importer_mesh.cpp
+++ b/scene/resources/importer_mesh.cpp
@@ -1243,5 +1243,5 @@ void ImporterMesh::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_lightmap_size_hint", "size"), &ImporterMesh::set_lightmap_size_hint);
ClassDB::bind_method(D_METHOD("get_lightmap_size_hint"), &ImporterMesh::get_lightmap_size_hint);
- ADD_PROPERTY(PropertyInfo(Variant::DICTIONARY, "_data", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR), "_set_data", "_get_data");
+ ADD_PROPERTY(PropertyInfo(Variant::DICTIONARY, "_data", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), "_set_data", "_get_data");
}
diff --git a/scene/resources/material.cpp b/scene/resources/material.cpp
index e01be7cc84..8399b14a56 100644
--- a/scene/resources/material.cpp
+++ b/scene/resources/material.cpp
@@ -1695,7 +1695,7 @@ BaseMaterial3D::TextureFilter BaseMaterial3D::get_texture_filter() const {
void BaseMaterial3D::_validate_feature(const String &text, Feature feature, PropertyInfo &property) const {
if (property.name.begins_with(text) && property.name != text + "_enabled" && !features[feature]) {
- property.usage = PROPERTY_USAGE_NOEDITOR;
+ property.usage = PROPERTY_USAGE_NO_EDITOR;
}
}
@@ -1729,23 +1729,23 @@ void BaseMaterial3D::_validate_property(PropertyInfo &property) const {
}
if (property.name == "billboard_keep_scale" && billboard_mode == BILLBOARD_DISABLED) {
- property.usage = PROPERTY_USAGE_NOEDITOR;
+ property.usage = PROPERTY_USAGE_NO_EDITOR;
}
if (property.name == "grow_amount" && !grow_enabled) {
- property.usage = PROPERTY_USAGE_NOEDITOR;
+ property.usage = PROPERTY_USAGE_NO_EDITOR;
}
if (property.name == "point_size" && !flags[FLAG_USE_POINT_SIZE]) {
- property.usage = PROPERTY_USAGE_NOEDITOR;
+ property.usage = PROPERTY_USAGE_NO_EDITOR;
}
if (property.name == "proximity_fade_distance" && !proximity_fade_enabled) {
- property.usage = PROPERTY_USAGE_NOEDITOR;
+ property.usage = PROPERTY_USAGE_NO_EDITOR;
}
if ((property.name == "distance_fade_max_distance" || property.name == "distance_fade_min_distance") && distance_fade == DISTANCE_FADE_DISABLED) {
- property.usage = PROPERTY_USAGE_NOEDITOR;
+ property.usage = PROPERTY_USAGE_NO_EDITOR;
}
// you can only enable anti-aliasing (in materials) on alpha scissor and alpha hash
diff --git a/scene/resources/mesh.cpp b/scene/resources/mesh.cpp
index 7ffe0b03e1..51b4e1fbd8 100644
--- a/scene/resources/mesh.cpp
+++ b/scene/resources/mesh.cpp
@@ -1842,8 +1842,8 @@ void ArrayMesh::_bind_methods() {
ClassDB::bind_method(D_METHOD("_set_surfaces", "surfaces"), &ArrayMesh::_set_surfaces);
ClassDB::bind_method(D_METHOD("_get_surfaces"), &ArrayMesh::_get_surfaces);
- ADD_PROPERTY(PropertyInfo(Variant::PACKED_STRING_ARRAY, "_blend_shape_names", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL), "_set_blend_shape_names", "_get_blend_shape_names");
- ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "_surfaces", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL), "_set_surfaces", "_get_surfaces");
+ ADD_PROPERTY(PropertyInfo(Variant::PACKED_STRING_ARRAY, "_blend_shape_names", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL), "_set_blend_shape_names", "_get_blend_shape_names");
+ ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "_surfaces", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL), "_set_surfaces", "_get_surfaces");
ADD_PROPERTY(PropertyInfo(Variant::INT, "blend_shape_mode", PROPERTY_HINT_ENUM, "Normalized,Relative"), "set_blend_shape_mode", "get_blend_shape_mode");
ADD_PROPERTY(PropertyInfo(Variant::AABB, "custom_aabb", PROPERTY_HINT_NONE, ""), "set_custom_aabb", "get_custom_aabb");
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "shadow_mesh", PROPERTY_HINT_RESOURCE_TYPE, "ArrayMesh"), "set_shadow_mesh", "get_shadow_mesh");
diff --git a/scene/resources/mesh_data_tool.cpp b/scene/resources/mesh_data_tool.cpp
index 04b2437ae8..9ecd8ec2f3 100644
--- a/scene/resources/mesh_data_tool.cpp
+++ b/scene/resources/mesh_data_tool.cpp
@@ -421,6 +421,7 @@ Vector<int> MeshDataTool::get_vertex_bones(int p_idx) const {
void MeshDataTool::set_vertex_bones(int p_idx, const Vector<int> &p_bones) {
ERR_FAIL_INDEX(p_idx, vertices.size());
+ ERR_FAIL_COND(p_bones.size() != 4);
vertices.write[p_idx].bones = p_bones;
format |= Mesh::ARRAY_FORMAT_BONES;
}
@@ -432,6 +433,7 @@ Vector<float> MeshDataTool::get_vertex_weights(int p_idx) const {
void MeshDataTool::set_vertex_weights(int p_idx, const Vector<float> &p_weights) {
ERR_FAIL_INDEX(p_idx, vertices.size());
+ ERR_FAIL_COND(p_weights.size() != 4);
vertices.write[p_idx].weights = p_weights;
format |= Mesh::ARRAY_FORMAT_WEIGHTS;
}
diff --git a/scene/resources/navigation_mesh.cpp b/scene/resources/navigation_mesh.cpp
index d87056f55d..db091ec37b 100644
--- a/scene/resources/navigation_mesh.cpp
+++ b/scene/resources/navigation_mesh.cpp
@@ -477,8 +477,8 @@ void NavigationMesh::_bind_methods() {
ClassDB::bind_method(D_METHOD("_set_polygons", "polygons"), &NavigationMesh::_set_polygons);
ClassDB::bind_method(D_METHOD("_get_polygons"), &NavigationMesh::_get_polygons);
- ADD_PROPERTY(PropertyInfo(Variant::PACKED_VECTOR3_ARRAY, "vertices", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL), "set_vertices", "get_vertices");
- ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "polygons", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL), "_set_polygons", "_get_polygons");
+ ADD_PROPERTY(PropertyInfo(Variant::PACKED_VECTOR3_ARRAY, "vertices", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL), "set_vertices", "get_vertices");
+ ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "polygons", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL), "_set_polygons", "_get_polygons");
ADD_PROPERTY(PropertyInfo(Variant::INT, "sample_partition_type/sample_partition_type", PROPERTY_HINT_ENUM, "Watershed,Monotone,Layers"), "set_sample_partition_type", "get_sample_partition_type");
ADD_PROPERTY(PropertyInfo(Variant::INT, "geometry/parsed_geometry_type", PROPERTY_HINT_ENUM, "Mesh Instances,Static Colliders,Both"), "set_parsed_geometry_type", "get_parsed_geometry_type");
diff --git a/scene/resources/packed_scene.cpp b/scene/resources/packed_scene.cpp
index 60cda637ca..c39f59d535 100644
--- a/scene/resources/packed_scene.cpp
+++ b/scene/resources/packed_scene.cpp
@@ -34,10 +34,12 @@
#include "core/config/project_settings.h"
#include "core/core_string_names.h"
#include "core/io/resource_loader.h"
+#include "editor/editor_inspector.h"
#include "scene/2d/node_2d.h"
#include "scene/3d/node_3d.h"
#include "scene/gui/control.h"
#include "scene/main/instance_placeholder.h"
+#include "scene/property_utils.h"
#define PACKED_SCENE_VERSION 2
@@ -45,6 +47,30 @@ bool SceneState::can_instantiate() const {
return nodes.size() > 0;
}
+static Array _sanitize_node_pinned_properties(Node *p_node) {
+ if (!p_node->has_meta("_edit_pinned_properties_")) {
+ return Array();
+ }
+ Array pinned = p_node->get_meta("_edit_pinned_properties_");
+ if (pinned.is_empty()) {
+ return Array();
+ }
+ Set<StringName> storable_properties;
+ p_node->get_storable_properties(storable_properties);
+ int i = 0;
+ do {
+ if (storable_properties.has(pinned[i])) {
+ i++;
+ } else {
+ pinned.remove_at(i);
+ }
+ } while (i < pinned.size());
+ if (pinned.is_empty()) {
+ p_node->remove_meta("_edit_pinned_properties_");
+ }
+ return pinned;
+}
+
Node *SceneState::instantiate(GenEditState p_edit_state) const {
// nodes where instancing failed (because something is missing)
List<Node *> stray_instances;
@@ -227,7 +253,7 @@ Node *SceneState::instantiate(GenEditState p_edit_state) const {
} else {
Node *base = i == 0 ? node : ret_nodes[0];
- if (p_edit_state == GEN_EDIT_STATE_MAIN) {
+ if (p_edit_state == GEN_EDIT_STATE_MAIN || p_edit_state == GEN_EDIT_STATE_MAIN_INHERITED) {
//for the main scene, use the resource as is
res->configure_for_local_scene(base, resources_local_to_scene);
resources_local_to_scene[res] = res;
@@ -289,6 +315,13 @@ Node *SceneState::instantiate(GenEditState p_edit_state) const {
node->_set_owner_nocheck(owner);
}
}
+
+ // we only want to deal with pinned flag if instancing as pure main (no instance, no inheriting)
+ if (p_edit_state == GEN_EDIT_STATE_MAIN) {
+ _sanitize_node_pinned_properties(node);
+ } else {
+ node->remove_meta("_edit_pinned_properties_");
+ }
}
ret_nodes[i] = node;
@@ -415,61 +448,22 @@ Error SceneState::_parse_node(Node *p_owner, Node *p_node, int p_parent_idx, Map
// with the instance states, we can query for identical properties/groups
// and only save what has changed
- List<PackState> pack_state_stack;
-
- bool instantiated_by_owner = true;
-
- {
- Node *n = p_node;
-
- while (n) {
- if (n == p_owner) {
- Ref<SceneState> state = n->get_scene_inherited_state();
- if (state.is_valid()) {
- int node = state->find_node_by_path(n->get_path_to(p_node));
- if (node >= 0) {
- //this one has state for this node, save
- PackState ps;
- ps.node = node;
- ps.state = state;
- pack_state_stack.push_back(ps);
- instantiated_by_owner = false;
- }
- }
-
- if (p_node->get_scene_file_path() != String() && p_node->get_owner() == p_owner && instantiated_by_owner) {
- if (p_node->get_scene_instance_load_placeholder()) {
- //it's a placeholder, use the placeholder path
- nd.instance = _vm_get_variant(p_node->get_scene_file_path(), variant_map);
- nd.instance |= FLAG_INSTANCE_IS_PLACEHOLDER;
- } else {
- //must instance ourselves
- Ref<PackedScene> instance = ResourceLoader::load(p_node->get_scene_file_path());
- if (!instance.is_valid()) {
- return ERR_CANT_OPEN;
- }
+ bool instantiated_by_owner = false;
+ Vector<SceneState::PackState> states_stack = PropertyUtils::get_node_states_stack(p_node, p_owner, &instantiated_by_owner);
- nd.instance = _vm_get_variant(instance, variant_map);
- }
- }
- n = nullptr;
- } else {
- if (n->get_scene_file_path() != String()) {
- //is an instance
- Ref<SceneState> state = n->get_scene_instance_state();
- if (state.is_valid()) {
- int node = state->find_node_by_path(n->get_path_to(p_node));
- if (node >= 0) {
- //this one has state for this node, save
- PackState ps;
- ps.node = node;
- ps.state = state;
- pack_state_stack.push_back(ps);
- }
- }
- }
- n = n->get_owner();
+ if (p_node->get_scene_file_path() != String() && p_node->get_owner() == p_owner && instantiated_by_owner) {
+ if (p_node->get_scene_instance_load_placeholder()) {
+ //it's a placeholder, use the placeholder path
+ nd.instance = _vm_get_variant(p_node->get_scene_file_path(), variant_map);
+ nd.instance |= FLAG_INSTANCE_IS_PLACEHOLDER;
+ } else {
+ //must instance ourselves
+ Ref<PackedScene> instance = ResourceLoader::load(p_node->get_scene_file_path());
+ if (!instance.is_valid()) {
+ return ERR_CANT_OPEN;
}
+
+ nd.instance = _vm_get_variant(instance, variant_map);
}
}
@@ -478,88 +472,37 @@ Error SceneState::_parse_node(Node *p_owner, Node *p_node, int p_parent_idx, Map
List<PropertyInfo> plist;
p_node->get_property_list(&plist);
- StringName type = p_node->get_class();
- Ref<Script> script = p_node->get_script();
- if (Engine::get_singleton()->is_editor_hint() && script.is_valid()) {
- // Should be called in the editor only and not at runtime,
- // otherwise it can cause problems because of missing instance state support.
- script->update_exports();
- }
+ Array pinned_props = _sanitize_node_pinned_properties(p_node);
for (const PropertyInfo &E : plist) {
if (!(E.usage & PROPERTY_USAGE_STORAGE)) {
continue;
}
- String name = E.name;
- Variant value = p_node->get(E.name);
-
- bool isdefault = false;
- Variant default_value = ClassDB::class_get_default_property_value(type, name);
-
- if (default_value.get_type() != Variant::NIL) {
- isdefault = bool(Variant::evaluate(Variant::OP_EQUAL, value, default_value));
- }
+ Variant forced_value;
- if (!isdefault && script.is_valid() && script->get_property_default_value(name, default_value)) {
- isdefault = bool(Variant::evaluate(Variant::OP_EQUAL, value, default_value));
- }
- // the version above makes more sense, because it does not rely on placeholder or usage flag
- // in the script, just the default value function.
- // if (E.usage & PROPERTY_USAGE_SCRIPT_DEFAULT_VALUE) {
- // isdefault = true; //is script default value
- // }
-
- if (pack_state_stack.size()) {
- // we are on part of an instantiated subscene
- // or part of instantiated scene.
- // only save what has been changed
- // only save changed properties in instance
-
- if ((E.usage & PROPERTY_USAGE_NO_INSTANCE_STATE) || E.name == "__meta__") {
- //property has requested that no instance state is saved, sorry
- //also, meta won't be overridden or saved
+ // If instance or inheriting, not saving if property requested so, or it's meta
+ if (states_stack.size()) {
+ if ((E.usage & PROPERTY_USAGE_NO_INSTANCE_STATE)) {
continue;
}
-
- bool exists = false;
- Variant original;
-
- for (List<PackState>::Element *F = pack_state_stack.back(); F; F = F->prev()) {
- //check all levels of pack to see if the property exists somewhere
- const PackState &ps = F->get();
-
- original = ps.state->get_property_value(ps.node, E.name, exists);
- if (exists) {
- break;
- }
- }
-
- if (exists) {
- //check if already exists and did not change
- if (value.get_type() == Variant::FLOAT && original.get_type() == Variant::FLOAT) {
- //this must be done because, as some scenes save as text, there might be a tiny difference in floats due to numerical error
- float a = value;
- float b = original;
-
- if (Math::is_equal_approx(a, b)) {
- continue;
- }
- } else if (bool(Variant::evaluate(Variant::OP_EQUAL, value, original))) {
- continue;
+ // Meta is normally not saved in instances/inherited (see GH-12838), but we need to save the pinned list
+ if (E.name == "__meta__") {
+ if (pinned_props.size()) {
+ Dictionary meta_override;
+ meta_override["_edit_pinned_properties_"] = pinned_props;
+ forced_value = meta_override;
}
}
+ }
- if (!exists && isdefault) {
- //does not exist in original node, but it's the default value
- //so safe to skip too.
- continue;
- }
+ StringName name = E.name;
+ Variant value = forced_value.get_type() == Variant::NIL ? p_node->get(name) : forced_value;
- } else {
- if (isdefault) {
- //it's the default value, no point in saving it
+ if (!pinned_props.has(name) && forced_value.get_type() == Variant::NIL) {
+ Variant default_value = PropertyUtils::get_property_default_value(p_node, name, &states_stack, true);
+ if (!PropertyUtils::is_property_value_different(value, default_value)) {
continue;
}
}
@@ -585,10 +528,9 @@ Error SceneState::_parse_node(Node *p_owner, Node *p_node, int p_parent_idx, Map
*/
bool skip = false;
- for (const PackState &F : pack_state_stack) {
+ for (const SceneState::PackState &ia : states_stack) {
//check all levels of pack to see if the group was added somewhere
- const PackState &ps = F;
- if (ps.state->is_node_in_group(ps.node, gi.name)) {
+ if (ia.state->is_node_in_group(ia.node, gi.name)) {
skip = true;
break;
}
@@ -618,7 +560,7 @@ Error SceneState::_parse_node(Node *p_owner, Node *p_node, int p_parent_idx, Map
// Save the right type. If this node was created by an instance
// then flag that the node should not be created but reused
- if (pack_state_stack.is_empty() && !is_editable_instance) {
+ if (states_stack.is_empty() && !is_editable_instance) {
//this node is not part of an instancing process, so save the type
nd.type = _nm_get_string(p_node->get_class(), name_map);
} else {
@@ -635,7 +577,7 @@ Error SceneState::_parse_node(Node *p_owner, Node *p_node, int p_parent_idx, Map
bool save_node = nd.properties.size() || nd.groups.size(); // some local properties or groups exist
save_node = save_node || p_node == p_owner; // owner is always saved
- save_node = save_node || (p_node->get_owner() == p_owner && instantiated_by_owner); //part of scene and not instantiated
+ save_node = save_node || (p_node->get_owner() == p_owner && instantiated_by_owner); //part of scene and not instanced
int idx = nodes.size();
int parent_node = NO_PARENT_SAVED;
@@ -932,7 +874,7 @@ void SceneState::clear() {
base_scene_idx = -1;
}
-Ref<SceneState> SceneState::_get_base_scene_state() const {
+Ref<SceneState> SceneState::get_base_scene_state() const {
if (base_scene_idx >= 0) {
Ref<PackedScene> ps = variants[base_scene_idx];
if (ps.is_valid()) {
@@ -947,8 +889,8 @@ int SceneState::find_node_by_path(const NodePath &p_node) const {
ERR_FAIL_COND_V_MSG(node_path_cache.size() == 0, -1, "This operation requires the node cache to have been built.");
if (!node_path_cache.has(p_node)) {
- if (_get_base_scene_state().is_valid()) {
- int idx = _get_base_scene_state()->find_node_by_path(p_node);
+ if (get_base_scene_state().is_valid()) {
+ int idx = get_base_scene_state()->find_node_by_path(p_node);
if (idx != -1) {
int rkey = _find_base_scene_node_remap_key(idx);
if (rkey == -1) {
@@ -963,11 +905,11 @@ int SceneState::find_node_by_path(const NodePath &p_node) const {
int nid = node_path_cache[p_node];
- if (_get_base_scene_state().is_valid() && !base_scene_node_remap.has(nid)) {
+ if (get_base_scene_state().is_valid() && !base_scene_node_remap.has(nid)) {
//for nodes that _do_ exist in current scene, still try to look for
//the node in the instantiated scene, as a property may be missing
//from the local one
- int idx = _get_base_scene_state()->find_node_by_path(p_node);
+ int idx = get_base_scene_state()->find_node_by_path(p_node);
if (idx != -1) {
base_scene_node_remap[nid] = idx;
}
@@ -1007,7 +949,7 @@ Variant SceneState::get_property_value(int p_node, const StringName &p_property,
//property not found, try on instance
if (base_scene_node_remap.has(p_node)) {
- return _get_base_scene_state()->get_property_value(base_scene_node_remap[p_node], p_property, found);
+ return get_base_scene_state()->get_property_value(base_scene_node_remap[p_node], p_property, found);
}
return Variant();
@@ -1026,7 +968,7 @@ bool SceneState::is_node_in_group(int p_node, const StringName &p_group) const {
}
if (base_scene_node_remap.has(p_node)) {
- return _get_base_scene_state()->is_node_in_group(base_scene_node_remap[p_node], p_group);
+ return get_base_scene_state()->is_node_in_group(base_scene_node_remap[p_node], p_group);
}
return false;
@@ -1065,7 +1007,7 @@ bool SceneState::is_connection(int p_node, const StringName &p_signal, int p_to_
}
if (base_scene_node_remap.has(p_node) && base_scene_node_remap.has(p_to_node)) {
- return _get_base_scene_state()->is_connection(base_scene_node_remap[p_node], p_signal, base_scene_node_remap[p_to_node], p_to_method);
+ return get_base_scene_state()->is_connection(base_scene_node_remap[p_node], p_signal, base_scene_node_remap[p_to_node], p_to_method);
}
return false;
@@ -1488,7 +1430,7 @@ bool SceneState::has_connection(const NodePath &p_node_from, const StringName &p
}
}
- ss = ss->_get_base_scene_state();
+ ss = ss->get_base_scene_state();
} while (ss.is_valid());
return false;
@@ -1610,6 +1552,7 @@ void SceneState::_bind_methods() {
BIND_ENUM_CONSTANT(GEN_EDIT_STATE_DISABLED);
BIND_ENUM_CONSTANT(GEN_EDIT_STATE_INSTANCE);
BIND_ENUM_CONSTANT(GEN_EDIT_STATE_MAIN);
+ BIND_ENUM_CONSTANT(GEN_EDIT_STATE_MAIN_INHERITED);
}
SceneState::SceneState() {
@@ -1651,7 +1594,7 @@ Node *PackedScene::instantiate(GenEditState p_edit_state) const {
s->set_scene_instance_state(state);
}
- if (get_path() != "" && get_path().find("::") == -1) {
+ if (!is_built_in()) {
s->set_scene_file_path(get_path());
}
@@ -1701,6 +1644,7 @@ void PackedScene::_bind_methods() {
BIND_ENUM_CONSTANT(GEN_EDIT_STATE_DISABLED);
BIND_ENUM_CONSTANT(GEN_EDIT_STATE_INSTANCE);
BIND_ENUM_CONSTANT(GEN_EDIT_STATE_MAIN);
+ BIND_ENUM_CONSTANT(GEN_EDIT_STATE_MAIN_INHERITED);
}
PackedScene::PackedScene() {
diff --git a/scene/resources/packed_scene.h b/scene/resources/packed_scene.h
index 55708f7914..a03da558e4 100644
--- a/scene/resources/packed_scene.h
+++ b/scene/resources/packed_scene.h
@@ -69,11 +69,6 @@ class SceneState : public RefCounted {
Vector<int> groups;
};
- struct PackState {
- Ref<SceneState> state;
- int node = -1;
- };
-
Vector<NodeData> nodes;
struct ConnectionData {
@@ -94,8 +89,6 @@ class SceneState : public RefCounted {
uint64_t last_modified_time = 0;
- _FORCE_INLINE_ Ref<SceneState> _get_base_scene_state() const;
-
static bool disable_placeholders;
Vector<String> _get_node_groups(int p_idx) const;
@@ -117,6 +110,12 @@ public:
GEN_EDIT_STATE_DISABLED,
GEN_EDIT_STATE_INSTANCE,
GEN_EDIT_STATE_MAIN,
+ GEN_EDIT_STATE_MAIN_INHERITED,
+ };
+
+ struct PackState {
+ Ref<SceneState> state;
+ int node = -1;
};
static void set_disable_placeholders(bool p_disable);
@@ -139,6 +138,8 @@ public:
bool can_instantiate() const;
Node *instantiate(GenEditState p_edit_state) const;
+ Ref<SceneState> get_base_scene_state() const;
+
//unbuild API
int get_node_count() const;
@@ -207,6 +208,7 @@ public:
GEN_EDIT_STATE_DISABLED,
GEN_EDIT_STATE_INSTANCE,
GEN_EDIT_STATE_MAIN,
+ GEN_EDIT_STATE_MAIN_INHERITED,
};
Error pack(Node *p_scene);
diff --git a/scene/resources/particles_material.cpp b/scene/resources/particles_material.cpp
index d9ec0bfd69..e77f5a0be7 100644
--- a/scene/resources/particles_material.cpp
+++ b/scene/resources/particles_material.cpp
@@ -1413,7 +1413,7 @@ void ParticlesMaterial::_bind_methods() {
ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "scale_curve", PROPERTY_HINT_RESOURCE_TYPE, "CurveTexture,CurveXYZTexture"), "set_param_texture", "get_param_texture", PARAM_SCALE);
ADD_GROUP("Color", "");
ADD_PROPERTY(PropertyInfo(Variant::COLOR, "color"), "set_color", "get_color");
- ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "color_ramp", PROPERTY_HINT_RESOURCE_TYPE, "GradientTexture"), "set_color_ramp", "get_color_ramp");
+ ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "color_ramp", PROPERTY_HINT_RESOURCE_TYPE, "GradientTexture1D"), "set_color_ramp", "get_color_ramp");
ADD_GROUP("Hue Variation", "hue_");
ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "hue_variation_min", PROPERTY_HINT_RANGE, "-1,1,0.01"), "set_param_min", "get_param_min", PARAM_HUE_VARIATION);
diff --git a/scene/resources/polygon_path_finder.cpp b/scene/resources/polygon_path_finder.cpp
index 4dd3c874cb..ec2022ed2f 100644
--- a/scene/resources/polygon_path_finder.cpp
+++ b/scene/resources/polygon_path_finder.cpp
@@ -556,7 +556,7 @@ void PolygonPathFinder::_bind_methods() {
ClassDB::bind_method(D_METHOD("_set_data"), &PolygonPathFinder::_set_data);
ClassDB::bind_method(D_METHOD("_get_data"), &PolygonPathFinder::_get_data);
- ADD_PROPERTY(PropertyInfo(Variant::DICTIONARY, "data", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL), "_set_data", "_get_data");
+ ADD_PROPERTY(PropertyInfo(Variant::DICTIONARY, "data", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL), "_set_data", "_get_data");
}
PolygonPathFinder::PolygonPathFinder() {
diff --git a/scene/resources/resource_format_text.cpp b/scene/resources/resource_format_text.cpp
index 77d915aef9..cead42b4e2 100644
--- a/scene/resources/resource_format_text.cpp
+++ b/scene/resources/resource_format_text.cpp
@@ -350,7 +350,7 @@ Ref<PackedScene> ResourceLoaderText::_parse_node_tag(VariantParser::ResourcePars
} else if (next_tag.name == "editable") {
if (!next_tag.fields.has("path")) {
error = ERR_FILE_CORRUPT;
- error_text = "missing 'path' field from connection tag";
+ error_text = "missing 'path' field from editable tag";
_printerr();
return Ref<PackedScene>();
}
@@ -1492,7 +1492,7 @@ String ResourceFormatSaverTextInstance::_write_resource(const RES &res) {
} else {
if (internal_resources.has(res)) {
return "SubResource( \"" + internal_resources[res] + "\" )";
- } else if (res->get_path().length() && res->get_path().find("::") == -1) {
+ } else if (!res->is_built_in()) {
if (res->get_path() == local_path) { //circular reference attempt
return "null";
}
@@ -1515,7 +1515,7 @@ void ResourceFormatSaverTextInstance::_find_resources(const Variant &p_variant,
return;
}
- if (!p_main && (!bundle_resources) && res->get_path().length() && res->get_path().find("::") == -1) {
+ if (!p_main && (!bundle_resources) && !res->is_built_in()) {
if (res->get_path() == local_path) {
ERR_PRINT("Circular reference to resource being saved found: '" + local_path + "' will be null next time it's loaded.");
return;
@@ -1728,7 +1728,7 @@ Error ResourceFormatSaverTextInstance::save(const String &p_path, const RES &p_r
for (List<RES>::Element *E = saved_resources.front(); E; E = E->next()) {
RES res = E->get();
- if (E->next() && (res->get_path() == "" || res->get_path().find("::") != -1)) {
+ if (E->next() && res->is_built_in()) {
if (res->get_scene_unique_id() != "") {
if (used_unique_ids.has(res->get_scene_unique_id())) {
res->set_scene_unique_id(""); // Repeated.
diff --git a/scene/resources/shader.cpp b/scene/resources/shader.cpp
index 4ba8d4d494..84fa07e4f4 100644
--- a/scene/resources/shader.cpp
+++ b/scene/resources/shader.cpp
@@ -97,28 +97,36 @@ RID Shader::get_rid() const {
return shader;
}
-void Shader::set_default_texture_param(const StringName &p_param, const Ref<Texture2D> &p_texture) {
+void Shader::set_default_texture_param(const StringName &p_param, const Ref<Texture2D> &p_texture, int p_index) {
if (p_texture.is_valid()) {
- default_textures[p_param] = p_texture;
- RS::get_singleton()->shader_set_default_texture_param(shader, p_param, p_texture->get_rid());
+ if (!default_textures.has(p_param)) {
+ default_textures[p_param] = Map<int, Ref<Texture2D>>();
+ }
+ default_textures[p_param][p_index] = p_texture;
+ RS::get_singleton()->shader_set_default_texture_param(shader, p_param, p_texture->get_rid(), p_index);
} else {
- default_textures.erase(p_param);
- RS::get_singleton()->shader_set_default_texture_param(shader, p_param, RID());
+ if (default_textures.has(p_param) && default_textures[p_param].has(p_index)) {
+ default_textures[p_param].erase(p_index);
+
+ if (default_textures[p_param].is_empty()) {
+ default_textures.erase(p_param);
+ }
+ }
+ RS::get_singleton()->shader_set_default_texture_param(shader, p_param, RID(), p_index);
}
emit_changed();
}
-Ref<Texture2D> Shader::get_default_texture_param(const StringName &p_param) const {
- if (default_textures.has(p_param)) {
- return default_textures[p_param];
- } else {
- return Ref<Texture2D>();
+Ref<Texture2D> Shader::get_default_texture_param(const StringName &p_param, int p_index) const {
+ if (default_textures.has(p_param) && default_textures[p_param].has(p_index)) {
+ return default_textures[p_param][p_index];
}
+ return Ref<Texture2D>();
}
void Shader::get_default_texture_param_list(List<StringName> *r_textures) const {
- for (const KeyValue<StringName, Ref<Texture2D>> &E : default_textures) {
+ for (const KeyValue<StringName, Map<int, Ref<Texture2D>>> &E : default_textures) {
r_textures->push_back(E.key);
}
}
@@ -140,12 +148,12 @@ void Shader::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_code", "code"), &Shader::set_code);
ClassDB::bind_method(D_METHOD("get_code"), &Shader::get_code);
- ClassDB::bind_method(D_METHOD("set_default_texture_param", "param", "texture"), &Shader::set_default_texture_param);
- ClassDB::bind_method(D_METHOD("get_default_texture_param", "param"), &Shader::get_default_texture_param);
+ ClassDB::bind_method(D_METHOD("set_default_texture_param", "param", "texture", "index"), &Shader::set_default_texture_param, DEFVAL(0));
+ ClassDB::bind_method(D_METHOD("get_default_texture_param", "param", "index"), &Shader::get_default_texture_param, DEFVAL(0));
ClassDB::bind_method(D_METHOD("has_param", "name"), &Shader::has_param);
- ADD_PROPERTY(PropertyInfo(Variant::STRING, "code", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR), "set_code", "get_code");
+ ADD_PROPERTY(PropertyInfo(Variant::STRING, "code", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), "set_code", "get_code");
BIND_ENUM_CONSTANT(MODE_SPATIAL);
BIND_ENUM_CONSTANT(MODE_CANVAS_ITEM);
diff --git a/scene/resources/shader.h b/scene/resources/shader.h
index c0dc07b403..c688dc1bab 100644
--- a/scene/resources/shader.h
+++ b/scene/resources/shader.h
@@ -59,7 +59,7 @@ private:
// conversion fast and save memory.
mutable bool params_cache_dirty = true;
mutable Map<StringName, StringName> params_cache; //map a shader param to a material param..
- Map<StringName, Ref<Texture2D>> default_textures;
+ Map<StringName, Map<int, Ref<Texture2D>>> default_textures;
virtual void _update_shader() const; //used for visual shader
protected:
@@ -75,8 +75,8 @@ public:
void get_param_list(List<PropertyInfo> *p_params) const;
bool has_param(const StringName &p_param) const;
- void set_default_texture_param(const StringName &p_param, const Ref<Texture2D> &p_texture);
- Ref<Texture2D> get_default_texture_param(const StringName &p_param) const;
+ void set_default_texture_param(const StringName &p_param, const Ref<Texture2D> &p_texture, int p_index = 0);
+ Ref<Texture2D> get_default_texture_param(const StringName &p_param, int p_index = 0) const;
void get_default_texture_param_list(List<StringName> *r_textures) const;
virtual bool is_text_shader() const;
diff --git a/scene/resources/skeleton_modification_2d_ccdik.cpp b/scene/resources/skeleton_modification_2d_ccdik.cpp
index 6eab8d4afe..bea42109cb 100644
--- a/scene/resources/skeleton_modification_2d_ccdik.cpp
+++ b/scene/resources/skeleton_modification_2d_ccdik.cpp
@@ -205,8 +205,8 @@ void SkeletonModification2DCCDIK::_execute_ccdik_joint(int p_joint_idx, Node2D *
} else {
// How to rotate from the tip: get the difference of rotation needed from the tip to the target, from the perspective of the joint.
// Because we are only using the offset, we do not need to account for the bone angle of the Bone2D node.
- float joint_to_tip = operation_transform.get_origin().angle_to_point(p_tip->get_global_position());
- float joint_to_target = operation_transform.get_origin().angle_to_point(p_target->get_global_position());
+ float joint_to_tip = p_tip->get_global_position().angle_to_point(operation_transform.get_origin());
+ float joint_to_target = p_target->get_global_position().angle_to_point(operation_transform.get_origin());
operation_transform.set_rotation(
operation_transform.get_rotation() + (joint_to_target - joint_to_tip));
}
diff --git a/scene/resources/skeleton_modification_2d_jiggle.cpp b/scene/resources/skeleton_modification_2d_jiggle.cpp
index 84abc9d020..31045455a3 100644
--- a/scene/resources/skeleton_modification_2d_jiggle.cpp
+++ b/scene/resources/skeleton_modification_2d_jiggle.cpp
@@ -194,9 +194,13 @@ void SkeletonModification2DJiggle::_execute_jiggle_joint(int p_joint_idx, Node2D
PhysicsDirectSpaceState2D *space_state = PhysicsServer2D::get_singleton()->space_get_direct_state(world_2d->get_space());
PhysicsDirectSpaceState2D::RayResult ray_result;
+ PhysicsDirectSpaceState2D::RayParameters ray_params;
+ ray_params.from = operation_bone_trans.get_origin();
+ ray_params.to = jiggle_data_chain[p_joint_idx].dynamic_position;
+ ray_params.collision_mask = collision_mask;
+
// Add exception support?
- bool ray_hit = space_state->intersect_ray(operation_bone_trans.get_origin(), jiggle_data_chain[p_joint_idx].dynamic_position,
- ray_result, Set<RID>(), collision_mask);
+ bool ray_hit = space_state->intersect_ray(ray_params, ray_result);
if (ray_hit) {
jiggle_data_chain.write[p_joint_idx].dynamic_position = jiggle_data_chain[p_joint_idx].last_noncollision_position;
diff --git a/scene/resources/skeleton_modification_3d_jiggle.cpp b/scene/resources/skeleton_modification_3d_jiggle.cpp
index a6bcb0176a..2535f2b987 100644
--- a/scene/resources/skeleton_modification_3d_jiggle.cpp
+++ b/scene/resources/skeleton_modification_3d_jiggle.cpp
@@ -206,8 +206,12 @@ void SkeletonModification3DJiggle::_execute_jiggle_joint(int p_joint_idx, Node3D
Transform3D new_bone_trans_world = stack->skeleton->global_pose_to_world_transform(new_bone_trans);
Transform3D dynamic_position_world = stack->skeleton->global_pose_to_world_transform(Transform3D(Basis(), jiggle_data_chain[p_joint_idx].dynamic_position));
- bool ray_hit = space_state->intersect_ray(new_bone_trans_world.origin, dynamic_position_world.get_origin(),
- ray_result, Set<RID>(), collision_mask);
+ PhysicsDirectSpaceState3D::RayParameters ray_params;
+ ray_params.from = new_bone_trans_world.origin;
+ ray_params.to = dynamic_position_world.get_origin();
+ ray_params.collision_mask = collision_mask;
+
+ bool ray_hit = space_state->intersect_ray(ray_params, ray_result);
if (ray_hit) {
jiggle_data_chain[p_joint_idx].dynamic_position = jiggle_data_chain[p_joint_idx].last_noncollision_position;
diff --git a/scene/resources/skeleton_modification_stack_2d.cpp b/scene/resources/skeleton_modification_stack_2d.cpp
index db9fe62b4d..e596390f78 100644
--- a/scene/resources/skeleton_modification_stack_2d.cpp
+++ b/scene/resources/skeleton_modification_stack_2d.cpp
@@ -172,7 +172,7 @@ void SkeletonModificationStack2D::add_modification(Ref<SkeletonModification2D> p
void SkeletonModificationStack2D::delete_modification(int p_mod_idx) {
ERR_FAIL_INDEX(p_mod_idx, modifications.size());
- modifications.remove(p_mod_idx);
+ modifications.remove_at(p_mod_idx);
#ifdef TOOLS_ENABLED
set_editor_gizmos_dirty(true);
@@ -195,6 +195,7 @@ void SkeletonModificationStack2D::set_modification(int p_mod_idx, Ref<SkeletonMo
}
void SkeletonModificationStack2D::set_modification_count(int p_count) {
+ ERR_FAIL_COND_MSG(p_count < 0, "Modification count cannot be less than zero.");
modifications.resize(p_count);
notify_property_list_changed();
diff --git a/scene/resources/skeleton_modification_stack_3d.cpp b/scene/resources/skeleton_modification_stack_3d.cpp
index c03210cf48..e5b7771251 100644
--- a/scene/resources/skeleton_modification_stack_3d.cpp
+++ b/scene/resources/skeleton_modification_stack_3d.cpp
@@ -133,7 +133,7 @@ void SkeletonModificationStack3D::add_modification(Ref<SkeletonModification3D> p
void SkeletonModificationStack3D::delete_modification(int p_mod_idx) {
const int modifications_size = modifications.size();
ERR_FAIL_INDEX(p_mod_idx, modifications_size);
- modifications.remove(p_mod_idx);
+ modifications.remove_at(p_mod_idx);
}
void SkeletonModificationStack3D::set_modification(int p_mod_idx, Ref<SkeletonModification3D> p_mod) {
@@ -141,7 +141,7 @@ void SkeletonModificationStack3D::set_modification(int p_mod_idx, Ref<SkeletonMo
ERR_FAIL_INDEX(p_mod_idx, modifications_size);
if (p_mod == nullptr) {
- modifications.remove(p_mod_idx);
+ modifications.remove_at(p_mod_idx);
} else {
p_mod->_setup_modification(this);
modifications[p_mod_idx] = p_mod;
@@ -149,6 +149,7 @@ void SkeletonModificationStack3D::set_modification(int p_mod_idx, Ref<SkeletonMo
}
void SkeletonModificationStack3D::set_modification_count(int p_count) {
+ ERR_FAIL_COND_MSG(p_count < 0, "Modification count cannot be less than zero.");
modifications.resize(p_count);
notify_property_list_changed();
}
diff --git a/scene/resources/skin.cpp b/scene/resources/skin.cpp
index 710612ae05..15cdb86bab 100644
--- a/scene/resources/skin.cpp
+++ b/scene/resources/skin.cpp
@@ -133,7 +133,7 @@ void Skin::_get_property_list(List<PropertyInfo> *p_list) const {
p_list->push_back(PropertyInfo(Variant::INT, "bind_count", PROPERTY_HINT_RANGE, "0,16384,1,or_greater"));
for (int i = 0; i < get_bind_count(); i++) {
p_list->push_back(PropertyInfo(Variant::STRING_NAME, "bind/" + itos(i) + "/name"));
- p_list->push_back(PropertyInfo(Variant::INT, "bind/" + itos(i) + "/bone", PROPERTY_HINT_RANGE, "0,16384,1,or_greater", get_bind_name(i) != StringName() ? PROPERTY_USAGE_NOEDITOR : PROPERTY_USAGE_DEFAULT));
+ p_list->push_back(PropertyInfo(Variant::INT, "bind/" + itos(i) + "/bone", PROPERTY_HINT_RANGE, "0,16384,1,or_greater", get_bind_name(i) != StringName() ? PROPERTY_USAGE_NO_EDITOR : PROPERTY_USAGE_DEFAULT));
p_list->push_back(PropertyInfo(Variant::TRANSFORM3D, "bind/" + itos(i) + "/pose"));
}
}
diff --git a/scene/resources/sky_material.cpp b/scene/resources/sky_material.cpp
index de94c92cac..ff388e288c 100644
--- a/scene/resources/sky_material.cpp
+++ b/scene/resources/sky_material.cpp
@@ -37,7 +37,7 @@ RID ProceduralSkyMaterial::shader;
void ProceduralSkyMaterial::set_sky_top_color(const Color &p_sky_top) {
sky_top_color = p_sky_top;
- RS::get_singleton()->material_set_param(_get_material(), "sky_top_color", sky_top_color.to_linear());
+ RS::get_singleton()->material_set_param(_get_material(), "sky_top_color", sky_top_color);
}
Color ProceduralSkyMaterial::get_sky_top_color() const {
@@ -46,7 +46,7 @@ Color ProceduralSkyMaterial::get_sky_top_color() const {
void ProceduralSkyMaterial::set_sky_horizon_color(const Color &p_sky_horizon) {
sky_horizon_color = p_sky_horizon;
- RS::get_singleton()->material_set_param(_get_material(), "sky_horizon_color", sky_horizon_color.to_linear());
+ RS::get_singleton()->material_set_param(_get_material(), "sky_horizon_color", sky_horizon_color);
}
Color ProceduralSkyMaterial::get_sky_horizon_color() const {
@@ -73,7 +73,7 @@ float ProceduralSkyMaterial::get_sky_energy() const {
void ProceduralSkyMaterial::set_ground_bottom_color(const Color &p_ground_bottom) {
ground_bottom_color = p_ground_bottom;
- RS::get_singleton()->material_set_param(_get_material(), "ground_bottom_color", ground_bottom_color.to_linear());
+ RS::get_singleton()->material_set_param(_get_material(), "ground_bottom_color", ground_bottom_color);
}
Color ProceduralSkyMaterial::get_ground_bottom_color() const {
@@ -82,7 +82,7 @@ Color ProceduralSkyMaterial::get_ground_bottom_color() const {
void ProceduralSkyMaterial::set_ground_horizon_color(const Color &p_ground_horizon) {
ground_horizon_color = p_ground_horizon;
- RS::get_singleton()->material_set_param(_get_material(), "ground_horizon_color", ground_horizon_color.to_linear());
+ RS::get_singleton()->material_set_param(_get_material(), "ground_horizon_color", ground_horizon_color);
}
Color ProceduralSkyMaterial::get_ground_horizon_color() const {
@@ -564,10 +564,10 @@ void PhysicalSkyMaterial::_update_shader() {
shader_type sky;
uniform float rayleigh : hint_range(0, 64) = 2.0;
-uniform vec4 rayleigh_color : hint_color = vec4(0.056, 0.14, 0.3, 1.0);
+uniform vec4 rayleigh_color : hint_color = vec4(0.26, 0.41, 0.58, 1.0);
uniform float mie : hint_range(0, 1) = 0.005;
uniform float mie_eccentricity : hint_range(-1, 1) = 0.8;
-uniform vec4 mie_color : hint_color = vec4(0.36, 0.56, 0.82, 1.0);
+uniform vec4 mie_color : hint_color = vec4(0.63, 0.77, 0.92, 1.0);
uniform float turbidity : hint_range(0, 1000) = 10.0;
uniform float sun_disk_scale : hint_range(0, 360) = 1.0;
@@ -661,10 +661,10 @@ void sky() {
PhysicalSkyMaterial::PhysicalSkyMaterial() {
set_rayleigh_coefficient(2.0);
- set_rayleigh_color(Color(0.056, 0.14, 0.3));
+ set_rayleigh_color(Color(0.26, 0.41, 0.58));
set_mie_coefficient(0.005);
set_mie_eccentricity(0.8);
- set_mie_color(Color(0.36, 0.56, 0.82));
+ set_mie_color(Color(0.63, 0.77, 0.92));
set_turbidity(10.0);
set_sun_disk_scale(1.0);
set_ground_color(Color(1.0, 1.0, 1.0));
diff --git a/scene/resources/sprite_frames.cpp b/scene/resources/sprite_frames.cpp
index 01afb00283..71ed96cf15 100644
--- a/scene/resources/sprite_frames.cpp
+++ b/scene/resources/sprite_frames.cpp
@@ -56,7 +56,7 @@ void SpriteFrames::remove_frame(const StringName &p_anim, int p_idx) {
Map<StringName, Anim>::Element *E = animations.find(p_anim);
ERR_FAIL_COND_MSG(!E, "Animation '" + String(p_anim) + "' doesn't exist.");
- E->get().frames.remove(p_idx);
+ E->get().frames.remove_at(p_idx);
emit_changed();
}
@@ -233,7 +233,7 @@ void SpriteFrames::_bind_methods() {
ClassDB::bind_method(D_METHOD("_set_animations"), &SpriteFrames::_set_animations);
ClassDB::bind_method(D_METHOD("_get_animations"), &SpriteFrames::_get_animations);
- ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "animations", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL), "_set_animations", "_get_animations"); //compatibility
+ ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "animations", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL), "_set_animations", "_get_animations"); //compatibility
}
SpriteFrames::SpriteFrames() {
diff --git a/scene/resources/style_box.cpp b/scene/resources/style_box.cpp
index 3381043d29..b960944d99 100644
--- a/scene/resources/style_box.cpp
+++ b/scene/resources/style_box.cpp
@@ -790,7 +790,7 @@ float StyleBoxFlat::get_style_margin(Side p_side) const {
void StyleBoxFlat::_validate_property(PropertyInfo &property) const {
if (!anti_aliased && property.name == "anti_aliasing_size") {
- property.usage = PROPERTY_USAGE_NOEDITOR;
+ property.usage = PROPERTY_USAGE_NO_EDITOR;
}
}
diff --git a/scene/resources/syntax_highlighter.cpp b/scene/resources/syntax_highlighter.cpp
index 52a3abf74d..cfb5ac2ca6 100644
--- a/scene/resources/syntax_highlighter.cpp
+++ b/scene/resources/syntax_highlighter.cpp
@@ -501,7 +501,7 @@ void CodeHighlighter::add_color_region(const String &p_start_key, const String &
void CodeHighlighter::remove_color_region(const String &p_start_key) {
for (int i = 0; i < color_regions.size(); i++) {
if (color_regions[i].start_key == p_start_key) {
- color_regions.remove(i);
+ color_regions.remove_at(i);
break;
}
}
diff --git a/scene/resources/text_paragraph.cpp b/scene/resources/text_paragraph.cpp
index fae1de94d3..1b7fc64267 100644
--- a/scene/resources/text_paragraph.cpp
+++ b/scene/resources/text_paragraph.cpp
@@ -38,6 +38,11 @@ void TextParagraph::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::INT, "direction", PROPERTY_HINT_ENUM, "Auto,Light-to-right,Right-to-left"), "set_direction", "get_direction");
+ ClassDB::bind_method(D_METHOD("set_custom_punctuation", "custom_punctuation"), &TextParagraph::set_custom_punctuation);
+ ClassDB::bind_method(D_METHOD("get_custom_punctuation"), &TextParagraph::get_custom_punctuation);
+
+ ADD_PROPERTY(PropertyInfo(Variant::STRING, "custom_punctuation"), "set_custom_punctuation", "get_custom_punctuation");
+
ClassDB::bind_method(D_METHOD("set_orientation", "orientation"), &TextParagraph::set_orientation);
ClassDB::bind_method(D_METHOD("get_orientation"), &TextParagraph::get_orientation);
@@ -304,6 +309,15 @@ TextServer::Direction TextParagraph::get_direction() const {
return TS->shaped_text_get_direction(rid);
}
+void TextParagraph::set_custom_punctuation(const String &p_punct) {
+ TS->shaped_text_set_custom_punctuation(rid, p_punct);
+ lines_dirty = true;
+}
+
+String TextParagraph::get_custom_punctuation() const {
+ return TS->shaped_text_get_custom_punctuation(rid);
+}
+
void TextParagraph::set_orientation(TextServer::Orientation p_orientation) {
TS->shaped_text_set_orientation(rid, p_orientation);
TS->shaped_text_set_orientation(dropcap_rid, p_orientation);
diff --git a/scene/resources/text_paragraph.h b/scene/resources/text_paragraph.h
index 701c9a17cd..4c4af43d14 100644
--- a/scene/resources/text_paragraph.h
+++ b/scene/resources/text_paragraph.h
@@ -96,6 +96,9 @@ public:
void set_bidi_override(const Array &p_override);
+ void set_custom_punctuation(const String &p_punct);
+ String get_custom_punctuation() const;
+
bool set_dropcap(const String &p_text, const Ref<Font> &p_fonts, int p_size, const Rect2 &p_dropcap_margins = Rect2(), const Dictionary &p_opentype_features = Dictionary(), const String &p_language = "");
void clear_dropcap();
diff --git a/scene/resources/texture.cpp b/scene/resources/texture.cpp
index dafc32b490..311bd9524b 100644
--- a/scene/resources/texture.cpp
+++ b/scene/resources/texture.cpp
@@ -1503,6 +1503,7 @@ Ref<Curve> CurveTexture::get_curve() const {
}
void CurveTexture::set_texture_mode(TextureMode p_mode) {
+ ERR_FAIL_COND(p_mode < TEXTURE_MODE_RGB || p_mode > TEXTURE_MODE_RED);
if (texture_mode == p_mode) {
return;
}
@@ -1728,53 +1729,53 @@ CurveXYZTexture::~CurveXYZTexture() {
//////////////////
-GradientTexture::GradientTexture() {
+GradientTexture1D::GradientTexture1D() {
_queue_update();
}
-GradientTexture::~GradientTexture() {
+GradientTexture1D::~GradientTexture1D() {
if (texture.is_valid()) {
RS::get_singleton()->free(texture);
}
}
-void GradientTexture::_bind_methods() {
- ClassDB::bind_method(D_METHOD("set_gradient", "gradient"), &GradientTexture::set_gradient);
- ClassDB::bind_method(D_METHOD("get_gradient"), &GradientTexture::get_gradient);
+void GradientTexture1D::_bind_methods() {
+ ClassDB::bind_method(D_METHOD("set_gradient", "gradient"), &GradientTexture1D::set_gradient);
+ ClassDB::bind_method(D_METHOD("get_gradient"), &GradientTexture1D::get_gradient);
- ClassDB::bind_method(D_METHOD("set_width", "width"), &GradientTexture::set_width);
+ ClassDB::bind_method(D_METHOD("set_width", "width"), &GradientTexture1D::set_width);
// The `get_width()` method is already exposed by the parent class Texture2D.
- ClassDB::bind_method(D_METHOD("set_use_hdr", "enabled"), &GradientTexture::set_use_hdr);
- ClassDB::bind_method(D_METHOD("is_using_hdr"), &GradientTexture::is_using_hdr);
+ ClassDB::bind_method(D_METHOD("set_use_hdr", "enabled"), &GradientTexture1D::set_use_hdr);
+ ClassDB::bind_method(D_METHOD("is_using_hdr"), &GradientTexture1D::is_using_hdr);
- ClassDB::bind_method(D_METHOD("_update"), &GradientTexture::_update);
+ ClassDB::bind_method(D_METHOD("_update"), &GradientTexture1D::_update);
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "gradient", PROPERTY_HINT_RESOURCE_TYPE, "Gradient"), "set_gradient", "get_gradient");
ADD_PROPERTY(PropertyInfo(Variant::INT, "width", PROPERTY_HINT_RANGE, "1,4096"), "set_width", "get_width");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "use_hdr"), "set_use_hdr", "is_using_hdr");
}
-void GradientTexture::set_gradient(Ref<Gradient> p_gradient) {
+void GradientTexture1D::set_gradient(Ref<Gradient> p_gradient) {
if (p_gradient == gradient) {
return;
}
if (gradient.is_valid()) {
- gradient->disconnect(CoreStringNames::get_singleton()->changed, callable_mp(this, &GradientTexture::_update));
+ gradient->disconnect(CoreStringNames::get_singleton()->changed, callable_mp(this, &GradientTexture1D::_update));
}
gradient = p_gradient;
if (gradient.is_valid()) {
- gradient->connect(CoreStringNames::get_singleton()->changed, callable_mp(this, &GradientTexture::_update));
+ gradient->connect(CoreStringNames::get_singleton()->changed, callable_mp(this, &GradientTexture1D::_update));
}
_update();
emit_changed();
}
-Ref<Gradient> GradientTexture::get_gradient() const {
+Ref<Gradient> GradientTexture1D::get_gradient() const {
return gradient;
}
-void GradientTexture::_queue_update() {
+void GradientTexture1D::_queue_update() {
if (update_pending) {
return;
}
@@ -1783,7 +1784,7 @@ void GradientTexture::_queue_update() {
call_deferred(SNAME("_update"));
}
-void GradientTexture::_update() {
+void GradientTexture1D::_update() {
update_pending = false;
if (gradient.is_null()) {
@@ -1838,17 +1839,17 @@ void GradientTexture::_update() {
emit_changed();
}
-void GradientTexture::set_width(int p_width) {
+void GradientTexture1D::set_width(int p_width) {
ERR_FAIL_COND(p_width <= 0);
width = p_width;
_queue_update();
}
-int GradientTexture::get_width() const {
+int GradientTexture1D::get_width() const {
return width;
}
-void GradientTexture::set_use_hdr(bool p_enabled) {
+void GradientTexture1D::set_use_hdr(bool p_enabled) {
if (p_enabled == use_hdr) {
return;
}
@@ -1857,11 +1858,11 @@ void GradientTexture::set_use_hdr(bool p_enabled) {
_queue_update();
}
-bool GradientTexture::is_using_hdr() const {
+bool GradientTexture1D::is_using_hdr() const {
return use_hdr;
}
-Ref<Image> GradientTexture::get_image() const {
+Ref<Image> GradientTexture1D::get_image() const {
if (!texture.is_valid()) {
return Ref<Image>();
}
@@ -2870,15 +2871,6 @@ RID CameraTexture::get_rid() const {
}
}
-void CameraTexture::set_flags(uint32_t p_flags) {
- // not supported
-}
-
-uint32_t CameraTexture::get_flags() const {
- // not supported
- return 0;
-}
-
Ref<Image> CameraTexture::get_image() const {
// not (yet) supported
return Ref<Image>();
diff --git a/scene/resources/texture.h b/scene/resources/texture.h
index 51567124c6..5b69711de6 100644
--- a/scene/resources/texture.h
+++ b/scene/resources/texture.h
@@ -669,8 +669,8 @@ public:
~CurveXYZTexture();
};
-class GradientTexture : public Texture2D {
- GDCLASS(GradientTexture, Texture2D);
+class GradientTexture1D : public Texture2D {
+ GDCLASS(GradientTexture1D, Texture2D);
public:
struct Point {
@@ -710,8 +710,8 @@ public:
virtual Ref<Image> get_image() const override;
- GradientTexture();
- virtual ~GradientTexture();
+ GradientTexture1D();
+ virtual ~GradientTexture1D();
};
class GradientTexture2D : public Texture2D {
@@ -900,9 +900,6 @@ public:
virtual RID get_rid() const override;
virtual bool has_alpha() const override;
- virtual void set_flags(uint32_t p_flags);
- virtual uint32_t get_flags() const;
-
virtual Ref<Image> get_image() const override;
void set_camera_feed_id(int p_new_id);
diff --git a/scene/resources/tile_set.cpp b/scene/resources/tile_set.cpp
index 141e9e1b0e..34fe7c0b87 100644
--- a/scene/resources/tile_set.cpp
+++ b/scene/resources/tile_set.cpp
@@ -203,7 +203,7 @@ bool TileMapPattern::_get(const StringName &p_name, Variant &r_ret) const {
}
void TileMapPattern::_get_property_list(List<PropertyInfo> *p_list) const {
- p_list->push_back(PropertyInfo(Variant::OBJECT, "tile_data", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL));
+ p_list->push_back(PropertyInfo(Variant::OBJECT, "tile_data", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL));
}
void TileMapPattern::_bind_methods() {
@@ -212,7 +212,7 @@ void TileMapPattern::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_cell", "coords", "source_id", "atlas_coords", "alternative_tile"), &TileMapPattern::set_cell, DEFVAL(TileSet::INVALID_SOURCE), DEFVAL(TileSetSource::INVALID_ATLAS_COORDS), DEFVAL(TileSetSource::INVALID_TILE_ALTERNATIVE));
ClassDB::bind_method(D_METHOD("has_cell", "coords"), &TileMapPattern::has_cell);
- ClassDB::bind_method(D_METHOD("remove_cell", "coords"), &TileMapPattern::remove_cell);
+ ClassDB::bind_method(D_METHOD("remove_cell", "coords", "update_size"), &TileMapPattern::remove_cell);
ClassDB::bind_method(D_METHOD("get_cell_source_id", "coords"), &TileMapPattern::get_cell_source_id);
ClassDB::bind_method(D_METHOD("get_cell_atlas_coords", "coords"), &TileMapPattern::get_cell_atlas_coords);
ClassDB::bind_method(D_METHOD("get_cell_alternative_tile", "coords"), &TileMapPattern::get_cell_alternative_tile);
@@ -225,6 +225,90 @@ void TileMapPattern::_bind_methods() {
/////////////////////////////// TileSet //////////////////////////////////////
+bool TileSet::TerrainsPattern::is_valid() const {
+ return valid;
+}
+
+bool TileSet::TerrainsPattern::is_erase_pattern() const {
+ return not_empty_terrains_count == 0;
+}
+
+bool TileSet::TerrainsPattern::operator<(const TerrainsPattern &p_terrains_pattern) const {
+ for (int i = 0; i < TileSet::CELL_NEIGHBOR_MAX; i++) {
+ if (is_valid_bit[i] != p_terrains_pattern.is_valid_bit[i]) {
+ return is_valid_bit[i] < p_terrains_pattern.is_valid_bit[i];
+ }
+ }
+ for (int i = 0; i < TileSet::CELL_NEIGHBOR_MAX; i++) {
+ if (is_valid_bit[i] && bits[i] != p_terrains_pattern.bits[i]) {
+ return bits[i] < p_terrains_pattern.bits[i];
+ }
+ }
+ return false;
+}
+
+bool TileSet::TerrainsPattern::operator==(const TerrainsPattern &p_terrains_pattern) const {
+ for (int i = 0; i < TileSet::CELL_NEIGHBOR_MAX; i++) {
+ if (is_valid_bit[i] != p_terrains_pattern.is_valid_bit[i]) {
+ return false;
+ }
+ if (is_valid_bit[i] && bits[i] != p_terrains_pattern.bits[i]) {
+ return false;
+ }
+ }
+ return true;
+}
+
+void TileSet::TerrainsPattern::set_terrain(TileSet::CellNeighbor p_peering_bit, int p_terrain) {
+ ERR_FAIL_COND(p_peering_bit == TileSet::CELL_NEIGHBOR_MAX);
+ ERR_FAIL_COND(!is_valid_bit[p_peering_bit]);
+ ERR_FAIL_COND(p_terrain < -1);
+
+ // Update the "is_erase_pattern" status.
+ if (p_terrain >= 0 && bits[p_peering_bit] < 0) {
+ not_empty_terrains_count++;
+ } else if (p_terrain < 0 && bits[p_peering_bit] >= 0) {
+ not_empty_terrains_count--;
+ }
+
+ bits[p_peering_bit] = p_terrain;
+}
+
+int TileSet::TerrainsPattern::get_terrain(TileSet::CellNeighbor p_peering_bit) const {
+ ERR_FAIL_COND_V(p_peering_bit == TileSet::CELL_NEIGHBOR_MAX, -1);
+ ERR_FAIL_COND_V(!is_valid_bit[p_peering_bit], -1);
+ return bits[p_peering_bit];
+}
+
+void TileSet::TerrainsPattern::set_terrains_from_array(Array p_terrains) {
+ int in_array_index = 0;
+ for (int i = 0; i < TileSet::CELL_NEIGHBOR_MAX; i++) {
+ if (is_valid_bit[i]) {
+ ERR_FAIL_COND(in_array_index >= p_terrains.size());
+ set_terrain(TileSet::CellNeighbor(i), p_terrains[in_array_index]);
+ in_array_index++;
+ }
+ }
+}
+
+Array TileSet::TerrainsPattern::get_terrains_as_array() const {
+ Array output;
+ for (int i = 0; i < TileSet::CELL_NEIGHBOR_MAX; i++) {
+ if (is_valid_bit[i]) {
+ output.push_back(bits[i]);
+ }
+ }
+ return output;
+}
+TileSet::TerrainsPattern::TerrainsPattern(const TileSet *p_tile_set, int p_terrain_set) {
+ ERR_FAIL_COND(p_terrain_set < 0);
+ for (int i = 0; i < TileSet::CELL_NEIGHBOR_MAX; i++) {
+ is_valid_bit[i] = (p_tile_set->is_valid_peering_bit_terrain(p_terrain_set, TileSet::CellNeighbor(i)));
+ bits[i] = -1;
+ }
+ valid = true;
+}
+
const int TileSet::INVALID_SOURCE = -1;
const char *TileSet::CELL_NEIGHBOR_ENUM_TO_TEXT[] = {
@@ -330,10 +414,13 @@ void TileSet::_update_terrains_cache() {
TileSet::TerrainsPattern terrains_pattern = tile_data->get_terrains_pattern();
// Terrain bits.
- for (int i = 0; i < terrains_pattern.size(); i++) {
- int terrain = terrains_pattern[i];
- if (terrain >= 0) {
- per_terrain_pattern_tiles[terrain_set][terrains_pattern].insert(cell);
+ for (int i = 0; i < TileSet::CELL_NEIGHBOR_MAX; i++) {
+ CellNeighbor bit = CellNeighbor(i);
+ if (is_valid_peering_bit_terrain(terrain_set, bit)) {
+ int terrain = terrains_pattern.get_terrain(bit);
+ if (terrain >= 0) {
+ per_terrain_pattern_tiles[terrain_set][terrains_pattern].insert(cell);
+ }
}
}
}
@@ -344,12 +431,7 @@ void TileSet::_update_terrains_cache() {
// Add the empty cell in the possible patterns and cells.
for (int i = 0; i < terrain_sets.size(); i++) {
- TileSet::TerrainsPattern empty_pattern;
- for (int j = 0; j < TileSet::CELL_NEIGHBOR_MAX; j++) {
- if (is_valid_peering_bit_terrain(i, TileSet::CellNeighbor(j))) {
- empty_pattern.push_back(-1);
- }
- }
+ TileSet::TerrainsPattern empty_pattern(this, i);
TileMapCell empty_cell;
empty_cell.source_id = TileSet::INVALID_SOURCE;
@@ -478,7 +560,7 @@ void TileSet::move_occlusion_layer(int p_from_index, int p_to_pos) {
ERR_FAIL_INDEX(p_from_index, occlusion_layers.size());
ERR_FAIL_INDEX(p_to_pos, occlusion_layers.size() + 1);
occlusion_layers.insert(p_to_pos, occlusion_layers[p_from_index]);
- occlusion_layers.remove(p_to_pos < p_from_index ? p_from_index + 1 : p_from_index);
+ occlusion_layers.remove_at(p_to_pos < p_from_index ? p_from_index + 1 : p_from_index);
for (KeyValue<int, Ref<TileSetSource>> source : sources) {
source.value->move_occlusion_layer(p_from_index, p_to_pos);
}
@@ -488,7 +570,7 @@ void TileSet::move_occlusion_layer(int p_from_index, int p_to_pos) {
void TileSet::remove_occlusion_layer(int p_index) {
ERR_FAIL_INDEX(p_index, occlusion_layers.size());
- occlusion_layers.remove(p_index);
+ occlusion_layers.remove_at(p_index);
for (KeyValue<int, Ref<TileSetSource>> source : sources) {
source.value->remove_occlusion_layer(p_index);
}
@@ -541,7 +623,7 @@ void TileSet::move_physics_layer(int p_from_index, int p_to_pos) {
ERR_FAIL_INDEX(p_from_index, physics_layers.size());
ERR_FAIL_INDEX(p_to_pos, physics_layers.size() + 1);
physics_layers.insert(p_to_pos, physics_layers[p_from_index]);
- physics_layers.remove(p_to_pos < p_from_index ? p_from_index + 1 : p_from_index);
+ physics_layers.remove_at(p_to_pos < p_from_index ? p_from_index + 1 : p_from_index);
for (KeyValue<int, Ref<TileSetSource>> source : sources) {
source.value->move_physics_layer(p_from_index, p_to_pos);
}
@@ -551,7 +633,7 @@ void TileSet::move_physics_layer(int p_from_index, int p_to_pos) {
void TileSet::remove_physics_layer(int p_index) {
ERR_FAIL_INDEX(p_index, physics_layers.size());
- physics_layers.remove(p_index);
+ physics_layers.remove_at(p_index);
for (KeyValue<int, Ref<TileSetSource>> source : sources) {
source.value->remove_physics_layer(p_index);
}
@@ -616,7 +698,7 @@ void TileSet::move_terrain_set(int p_from_index, int p_to_pos) {
ERR_FAIL_INDEX(p_from_index, terrain_sets.size());
ERR_FAIL_INDEX(p_to_pos, terrain_sets.size() + 1);
terrain_sets.insert(p_to_pos, terrain_sets[p_from_index]);
- terrain_sets.remove(p_to_pos < p_from_index ? p_from_index + 1 : p_from_index);
+ terrain_sets.remove_at(p_to_pos < p_from_index ? p_from_index + 1 : p_from_index);
for (KeyValue<int, Ref<TileSetSource>> source : sources) {
source.value->move_terrain_set(p_from_index, p_to_pos);
}
@@ -627,7 +709,7 @@ void TileSet::move_terrain_set(int p_from_index, int p_to_pos) {
void TileSet::remove_terrain_set(int p_index) {
ERR_FAIL_INDEX(p_index, terrain_sets.size());
- terrain_sets.remove(p_index);
+ terrain_sets.remove_at(p_index);
for (KeyValue<int, Ref<TileSetSource>> source : sources) {
source.value->remove_terrain_set(p_index);
}
@@ -690,7 +772,7 @@ void TileSet::move_terrain(int p_terrain_set, int p_from_index, int p_to_pos) {
ERR_FAIL_INDEX(p_from_index, terrains.size());
ERR_FAIL_INDEX(p_to_pos, terrains.size() + 1);
terrains.insert(p_to_pos, terrains[p_from_index]);
- terrains.remove(p_to_pos < p_from_index ? p_from_index + 1 : p_from_index);
+ terrains.remove_at(p_to_pos < p_from_index ? p_from_index + 1 : p_from_index);
for (KeyValue<int, Ref<TileSetSource>> source : sources) {
source.value->move_terrain(p_terrain_set, p_from_index, p_to_pos);
}
@@ -704,7 +786,7 @@ void TileSet::remove_terrain(int p_terrain_set, int p_index) {
Vector<Terrain> &terrains = terrain_sets.write[p_terrain_set].terrains;
ERR_FAIL_INDEX(p_index, terrains.size());
- terrains.remove(p_index);
+ terrains.remove_at(p_index);
for (KeyValue<int, Ref<TileSetSource>> source : sources) {
source.value->remove_terrain(p_terrain_set, p_index);
}
@@ -859,7 +941,7 @@ void TileSet::move_navigation_layer(int p_from_index, int p_to_pos) {
ERR_FAIL_INDEX(p_from_index, navigation_layers.size());
ERR_FAIL_INDEX(p_to_pos, navigation_layers.size() + 1);
navigation_layers.insert(p_to_pos, navigation_layers[p_from_index]);
- navigation_layers.remove(p_to_pos < p_from_index ? p_from_index + 1 : p_from_index);
+ navigation_layers.remove_at(p_to_pos < p_from_index ? p_from_index + 1 : p_from_index);
for (KeyValue<int, Ref<TileSetSource>> source : sources) {
source.value->move_navigation_layer(p_from_index, p_to_pos);
}
@@ -869,7 +951,7 @@ void TileSet::move_navigation_layer(int p_from_index, int p_to_pos) {
void TileSet::remove_navigation_layer(int p_index) {
ERR_FAIL_INDEX(p_index, navigation_layers.size());
- navigation_layers.remove(p_index);
+ navigation_layers.remove_at(p_index);
for (KeyValue<int, Ref<TileSetSource>> source : sources) {
source.value->remove_navigation_layer(p_index);
}
@@ -912,7 +994,7 @@ void TileSet::move_custom_data_layer(int p_from_index, int p_to_pos) {
ERR_FAIL_INDEX(p_from_index, custom_data_layers.size());
ERR_FAIL_INDEX(p_to_pos, custom_data_layers.size() + 1);
custom_data_layers.insert(p_to_pos, custom_data_layers[p_from_index]);
- custom_data_layers.remove(p_to_pos < p_from_index ? p_from_index + 1 : p_from_index);
+ custom_data_layers.remove_at(p_to_pos < p_from_index ? p_from_index + 1 : p_from_index);
for (KeyValue<int, Ref<TileSetSource>> source : sources) {
source.value->move_custom_data_layer(p_from_index, p_to_pos);
}
@@ -922,7 +1004,7 @@ void TileSet::move_custom_data_layer(int p_from_index, int p_to_pos) {
void TileSet::remove_custom_data_layer(int p_index) {
ERR_FAIL_INDEX(p_index, custom_data_layers.size());
- custom_data_layers.remove(p_index);
+ custom_data_layers.remove_at(p_index);
for (KeyValue<String, int> E : custom_data_layers_by_name) {
if (E.value == p_index) {
custom_data_layers_by_name.erase(E.key);
@@ -1258,7 +1340,7 @@ Ref<TileMapPattern> TileSet::get_pattern(int p_index) {
void TileSet::remove_pattern(int p_index) {
ERR_FAIL_INDEX(p_index, (int)patterns.size());
- patterns.remove(p_index);
+ patterns.remove_at(p_index);
emit_changed();
}
@@ -1283,7 +1365,7 @@ Set<TileMapCell> TileSet::get_tiles_for_terrains_pattern(int p_terrain_set, Terr
return per_terrain_pattern_tiles[p_terrain_set][p_terrain_tile_pattern];
}
-TileMapCell TileSet::get_random_tile_from_pattern(int p_terrain_set, TileSet::TerrainsPattern p_terrain_tile_pattern) {
+TileMapCell TileSet::get_random_tile_from_terrains_pattern(int p_terrain_set, TileSet::TerrainsPattern p_terrain_tile_pattern) {
ERR_FAIL_INDEX_V(p_terrain_set, terrain_sets.size(), TileMapCell());
_update_terrains_cache();
@@ -3042,19 +3124,19 @@ void TileSet::_get_property_list(List<PropertyInfo> *p_list) const {
// Sources.
// Note: sources have to be listed in at the end as some TileData rely on the TileSet properties being initialized first.
for (const KeyValue<int, Ref<TileSetSource>> &E_source : sources) {
- p_list->push_back(PropertyInfo(Variant::INT, vformat("sources/%d", E_source.key), PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR));
+ p_list->push_back(PropertyInfo(Variant::INT, vformat("sources/%d", E_source.key), PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR));
}
// Tile Proxies.
// Note: proxies need to be set after sources are set.
p_list->push_back(PropertyInfo(Variant::NIL, "Tile Proxies", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_GROUP));
- p_list->push_back(PropertyInfo(Variant::ARRAY, "tile_proxies/source_level", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR));
- p_list->push_back(PropertyInfo(Variant::ARRAY, "tile_proxies/coords_level", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR));
- p_list->push_back(PropertyInfo(Variant::ARRAY, "tile_proxies/alternative_level", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR));
+ p_list->push_back(PropertyInfo(Variant::ARRAY, "tile_proxies/source_level", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR));
+ p_list->push_back(PropertyInfo(Variant::ARRAY, "tile_proxies/coords_level", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR));
+ p_list->push_back(PropertyInfo(Variant::ARRAY, "tile_proxies/alternative_level", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR));
// Patterns.
for (unsigned int pattern_index = 0; pattern_index < patterns.size(); pattern_index++) {
- p_list->push_back(PropertyInfo(Variant::OBJECT, vformat("pattern_%d", pattern_index), PROPERTY_HINT_RESOURCE_TYPE, "TileMapPattern", PROPERTY_USAGE_NOEDITOR));
+ p_list->push_back(PropertyInfo(Variant::OBJECT, vformat("pattern_%d", pattern_index), PROPERTY_HINT_RESOURCE_TYPE, "TileMapPattern", PROPERTY_USAGE_NO_EDITOR));
}
}
@@ -3277,6 +3359,10 @@ void TileSetAtlasSource::set_tile_set(const TileSet *p_tile_set) {
}
}
+const TileSet *TileSetAtlasSource::get_tile_set() const {
+ return tile_set;
+}
+
void TileSetAtlasSource::notify_tile_data_properties_should_change() {
// Set the TileSet on all TileData.
for (KeyValue<Vector2i, TileAlternativesData> &E_tile : tiles) {
@@ -3440,9 +3526,18 @@ void TileSetAtlasSource::reset_state() {
}
void TileSetAtlasSource::set_texture(Ref<Texture2D> p_texture) {
+ if (texture.is_valid()) {
+ texture->disconnect(SNAME("changed"), callable_mp(this, &TileSetAtlasSource::_queue_update_padded_texture));
+ }
+
texture = p_texture;
+ if (texture.is_valid()) {
+ texture->connect(SNAME("changed"), callable_mp(this, &TileSetAtlasSource::_queue_update_padded_texture));
+ }
+
_clear_tiles_outside_texture();
+ _queue_update_padded_texture();
emit_changed();
}
@@ -3459,8 +3554,10 @@ void TileSetAtlasSource::set_margins(Vector2i p_margins) {
}
_clear_tiles_outside_texture();
+ _queue_update_padded_texture();
emit_changed();
}
+
Vector2i TileSetAtlasSource::get_margins() const {
return margins;
}
@@ -3474,8 +3571,10 @@ void TileSetAtlasSource::set_separation(Vector2i p_separation) {
}
_clear_tiles_outside_texture();
+ _queue_update_padded_texture();
emit_changed();
}
+
Vector2i TileSetAtlasSource::get_separation() const {
return separation;
}
@@ -3489,12 +3588,27 @@ void TileSetAtlasSource::set_texture_region_size(Vector2i p_tile_size) {
}
_clear_tiles_outside_texture();
+ _queue_update_padded_texture();
emit_changed();
}
+
Vector2i TileSetAtlasSource::get_texture_region_size() const {
return texture_region_size;
}
+void TileSetAtlasSource::set_use_texture_padding(bool p_use_padding) {
+ if (use_texture_padding == p_use_padding) {
+ return;
+ }
+ use_texture_padding = p_use_padding;
+ _queue_update_padded_texture();
+ emit_changed();
+}
+
+bool TileSetAtlasSource::get_use_texture_padding() const {
+ return use_texture_padding;
+}
+
Vector2i TileSetAtlasSource::get_atlas_grid_size() const {
Ref<Texture2D> texture = get_texture();
if (!texture.is_valid()) {
@@ -3655,35 +3769,35 @@ void TileSetAtlasSource::_get_property_list(List<PropertyInfo> *p_list) const {
List<PropertyInfo> tile_property_list;
// size_in_atlas
- property_info = PropertyInfo(Variant::VECTOR2I, "size_in_atlas", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR);
+ property_info = PropertyInfo(Variant::VECTOR2I, "size_in_atlas", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR);
if (E_tile.value.size_in_atlas == Vector2i(1, 1)) {
property_info.usage ^= PROPERTY_USAGE_STORAGE;
}
tile_property_list.push_back(property_info);
// next_alternative_id
- property_info = PropertyInfo(Variant::INT, "next_alternative_id", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR);
+ property_info = PropertyInfo(Variant::INT, "next_alternative_id", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR);
if (E_tile.value.next_alternative_id == 1) {
property_info.usage ^= PROPERTY_USAGE_STORAGE;
}
tile_property_list.push_back(property_info);
// animation_columns.
- property_info = PropertyInfo(Variant::INT, "animation_columns", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR);
+ property_info = PropertyInfo(Variant::INT, "animation_columns", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR);
if (E_tile.value.animation_columns == 0) {
property_info.usage ^= PROPERTY_USAGE_STORAGE;
}
tile_property_list.push_back(property_info);
// animation_separation.
- property_info = PropertyInfo(Variant::INT, "animation_separation", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR);
+ property_info = PropertyInfo(Variant::INT, "animation_separation", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR);
if (E_tile.value.animation_separation == Vector2i()) {
property_info.usage ^= PROPERTY_USAGE_STORAGE;
}
tile_property_list.push_back(property_info);
// animation_speed.
- property_info = PropertyInfo(Variant::FLOAT, "animation_speed", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR);
+ property_info = PropertyInfo(Variant::FLOAT, "animation_speed", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR);
if (E_tile.value.animation_speed == 1.0) {
property_info.usage ^= PROPERTY_USAGE_STORAGE;
}
@@ -3695,7 +3809,7 @@ void TileSetAtlasSource::_get_property_list(List<PropertyInfo> *p_list) const {
// animation_frame_*.
bool store_durations = tiles[E_tile.key].animation_frames_durations.size() >= 2;
for (int i = 0; i < (int)tiles[E_tile.key].animation_frames_durations.size(); i++) {
- property_info = PropertyInfo(Variant::FLOAT, vformat("animation_frame_%d/duration", i), PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR);
+ property_info = PropertyInfo(Variant::FLOAT, vformat("animation_frame_%d/duration", i), PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR);
if (!store_durations) {
property_info.usage ^= PROPERTY_USAGE_STORAGE;
}
@@ -3704,7 +3818,7 @@ void TileSetAtlasSource::_get_property_list(List<PropertyInfo> *p_list) const {
for (const KeyValue<int, TileData *> &E_alternative : E_tile.value.alternatives) {
// Add a dummy property to show the alternative exists.
- tile_property_list.push_back(PropertyInfo(Variant::INT, vformat("%d", E_alternative.key), PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR));
+ tile_property_list.push_back(PropertyInfo(Variant::INT, vformat("%d", E_alternative.key), PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR));
// Get the alternative tile's properties and append them to the list of properties.
List<PropertyInfo> alternative_property_list;
@@ -3753,6 +3867,7 @@ void TileSetAtlasSource::create_tile(const Vector2i p_atlas_coords, const Vector
tiles_ids.sort();
_create_coords_mapping_cache(p_atlas_coords);
+ _queue_update_padded_texture();
emit_signal(SNAME("changed"));
}
@@ -3773,6 +3888,8 @@ void TileSetAtlasSource::remove_tile(Vector2i p_atlas_coords) {
tiles_ids.erase(p_atlas_coords);
tiles_ids.sort();
+ _queue_update_padded_texture();
+
emit_signal(SNAME("changed"));
}
@@ -3801,6 +3918,7 @@ void TileSetAtlasSource::set_tile_animation_columns(const Vector2i p_atlas_coord
tiles[p_atlas_coords].animation_columns = p_frame_columns;
_create_coords_mapping_cache(p_atlas_coords);
+ _queue_update_padded_texture();
emit_signal(SNAME("changed"));
}
@@ -3823,6 +3941,7 @@ void TileSetAtlasSource::set_tile_animation_separation(const Vector2i p_atlas_co
tiles[p_atlas_coords].animation_separation = p_separation;
_create_coords_mapping_cache(p_atlas_coords);
+ _queue_update_padded_texture();
emit_signal(SNAME("changed"));
}
@@ -3850,19 +3969,24 @@ void TileSetAtlasSource::set_tile_animation_frames_count(const Vector2i p_atlas_
ERR_FAIL_COND_MSG(!tiles.has(p_atlas_coords), vformat("TileSetAtlasSource has no tile at %s.", Vector2i(p_atlas_coords)));
ERR_FAIL_COND(p_frames_count < 1);
+ int old_size = tiles[p_atlas_coords].animation_frames_durations.size();
+ if (p_frames_count == old_size) {
+ return;
+ }
+
TileAlternativesData &tad = tiles[p_atlas_coords];
bool room_for_tile = has_room_for_tile(p_atlas_coords, tad.size_in_atlas, tad.animation_columns, tad.animation_separation, p_frames_count, p_atlas_coords);
ERR_FAIL_COND_MSG(!room_for_tile, "Cannot set animation columns count, tiles are already present in the space the tile would cover.");
_clear_coords_mapping_cache(p_atlas_coords);
- int old_size = tiles[p_atlas_coords].animation_frames_durations.size();
tiles[p_atlas_coords].animation_frames_durations.resize(p_frames_count);
for (int i = old_size; i < p_frames_count; i++) {
tiles[p_atlas_coords].animation_frames_durations[i] = 1.0;
}
_create_coords_mapping_cache(p_atlas_coords);
+ _queue_update_padded_texture();
notify_property_list_changed();
@@ -4001,6 +4125,31 @@ Vector2i TileSetAtlasSource::get_tile_effective_texture_offset(Vector2i p_atlas_
return effective_texture_offset;
}
+// Getters for texture and tile region (padded or not)
+Ref<Texture2D> TileSetAtlasSource::get_runtime_texture() const {
+ if (use_texture_padding) {
+ return padded_texture;
+ } else {
+ return texture;
+ }
+}
+
+Rect2i TileSetAtlasSource::get_runtime_tile_texture_region(Vector2i p_atlas_coords, int p_frame) const {
+ ERR_FAIL_COND_V_MSG(!tiles.has(p_atlas_coords), Rect2i(), vformat("TileSetAtlasSource has no tile at %s.", String(p_atlas_coords)));
+ ERR_FAIL_INDEX_V(p_frame, (int)tiles[p_atlas_coords].animation_frames_durations.size(), Rect2i());
+
+ Rect2i src_rect = get_tile_texture_region(p_atlas_coords, p_frame);
+ if (use_texture_padding) {
+ const TileAlternativesData &tad = tiles[p_atlas_coords];
+ Vector2i frame_coords = p_atlas_coords + (tad.size_in_atlas + tad.animation_separation) * ((tad.animation_columns > 0) ? Vector2i(p_frame % tad.animation_columns, p_frame / tad.animation_columns) : Vector2i(p_frame, 0));
+ Vector2i base_pos = frame_coords * (texture_region_size + Vector2i(2, 2)) + Vector2i(1, 1);
+
+ return Rect2i(base_pos, src_rect.size);
+ } else {
+ return src_rect;
+ }
+}
+
void TileSetAtlasSource::move_tile_in_atlas(Vector2i p_atlas_coords, Vector2i p_new_atlas_coords, Vector2i p_new_size) {
ERR_FAIL_COND_MSG(!tiles.has(p_atlas_coords), vformat("TileSetAtlasSource has no tile at %s.", String(p_atlas_coords)));
@@ -4031,6 +4180,7 @@ void TileSetAtlasSource::move_tile_in_atlas(Vector2i p_atlas_coords, Vector2i p_
tiles[new_atlas_coords].size_in_atlas = new_size;
_create_coords_mapping_cache(new_atlas_coords);
+ _queue_update_padded_texture();
emit_signal(SNAME("changed"));
}
@@ -4122,11 +4272,14 @@ void TileSetAtlasSource::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_separation"), &TileSetAtlasSource::get_separation);
ClassDB::bind_method(D_METHOD("set_texture_region_size", "texture_region_size"), &TileSetAtlasSource::set_texture_region_size);
ClassDB::bind_method(D_METHOD("get_texture_region_size"), &TileSetAtlasSource::get_texture_region_size);
+ ClassDB::bind_method(D_METHOD("set_use_texture_padding", "use_texture_padding"), &TileSetAtlasSource::set_use_texture_padding);
+ ClassDB::bind_method(D_METHOD("get_use_texture_padding"), &TileSetAtlasSource::get_use_texture_padding);
- ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "texture", PROPERTY_HINT_RESOURCE_TYPE, "Texture2D", PROPERTY_USAGE_NOEDITOR), "set_texture", "get_texture");
- ADD_PROPERTY(PropertyInfo(Variant::VECTOR2I, "margins", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR), "set_margins", "get_margins");
- ADD_PROPERTY(PropertyInfo(Variant::VECTOR2I, "separation", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR), "set_separation", "get_separation");
- ADD_PROPERTY(PropertyInfo(Variant::VECTOR2I, "texture_region_size", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR), "set_texture_region_size", "get_texture_region_size");
+ ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "texture", PROPERTY_HINT_RESOURCE_TYPE, "Texture2D", PROPERTY_USAGE_NO_EDITOR), "set_texture", "get_texture");
+ ADD_PROPERTY(PropertyInfo(Variant::VECTOR2I, "margins", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), "set_margins", "get_margins");
+ ADD_PROPERTY(PropertyInfo(Variant::VECTOR2I, "separation", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), "set_separation", "get_separation");
+ ADD_PROPERTY(PropertyInfo(Variant::VECTOR2I, "texture_region_size", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), "set_texture_region_size", "get_texture_region_size");
+ ADD_PROPERTY(PropertyInfo(Variant::BOOL, "use_texture_padding", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), "set_use_texture_padding", "get_use_texture_padding");
// Base tiles
ClassDB::bind_method(D_METHOD("create_tile", "atlas_coords", "size"), &TileSetAtlasSource::create_tile, DEFVAL(Vector2i(1, 1)));
@@ -4161,6 +4314,11 @@ void TileSetAtlasSource::_bind_methods() {
// Helpers.
ClassDB::bind_method(D_METHOD("get_atlas_grid_size"), &TileSetAtlasSource::get_atlas_grid_size);
ClassDB::bind_method(D_METHOD("get_tile_texture_region", "atlas_coords", "frame"), &TileSetAtlasSource::get_tile_texture_region, DEFVAL(0));
+
+ // Getters for texture and tile region (padded or not)
+ ClassDB::bind_method(D_METHOD("_update_padded_texture"), &TileSetAtlasSource::_update_padded_texture);
+ ClassDB::bind_method(D_METHOD("get_runtime_texture"), &TileSetAtlasSource::get_runtime_texture);
+ ClassDB::bind_method(D_METHOD("get_runtime_tile_texture_region", "atlas_coords", "frame"), &TileSetAtlasSource::get_runtime_tile_texture_region);
}
TileSetAtlasSource::~TileSetAtlasSource() {
@@ -4247,6 +4405,69 @@ void TileSetAtlasSource::_clear_tiles_outside_texture() {
}
}
+void TileSetAtlasSource::_queue_update_padded_texture() {
+ padded_texture_needs_update = true;
+ call_deferred("_update_padded_texture");
+}
+
+void TileSetAtlasSource::_update_padded_texture() {
+ if (!padded_texture_needs_update) {
+ return;
+ }
+ padded_texture_needs_update = false;
+ padded_texture = Ref<ImageTexture>();
+
+ if (!texture.is_valid()) {
+ return;
+ }
+
+ if (!use_texture_padding) {
+ return;
+ }
+
+ Size2 size = get_atlas_grid_size() * (texture_region_size + Vector2i(2, 2));
+
+ Ref<Image> src = texture->get_image();
+
+ Ref<Image> image;
+ image.instantiate();
+ image->create(size.x, size.y, false, Image::FORMAT_RGBA8);
+
+ for (KeyValue<Vector2i, TileAlternativesData> kv : tiles) {
+ for (int frame = 0; frame < (int)kv.value.animation_frames_durations.size(); frame++) {
+ // Compute the source rects.
+ Rect2i src_rect = get_tile_texture_region(kv.key, frame);
+
+ Rect2i top_src_rect = Rect2i(src_rect.position, Vector2i(src_rect.size.x, 1));
+ Rect2i bottom_src_rect = Rect2i(src_rect.position + Vector2i(0, src_rect.size.y - 1), Vector2i(src_rect.size.x, 1));
+ Rect2i left_src_rect = Rect2i(src_rect.position, Vector2i(1, src_rect.size.y));
+ Rect2i right_src_rect = Rect2i(src_rect.position + Vector2i(src_rect.size.x - 1, 0), Vector2i(1, src_rect.size.y));
+
+ // Copy the tile and the paddings.
+ Vector2i frame_coords = kv.key + (kv.value.size_in_atlas + kv.value.animation_separation) * ((kv.value.animation_columns > 0) ? Vector2i(frame % kv.value.animation_columns, frame / kv.value.animation_columns) : Vector2i(frame, 0));
+ Vector2i base_pos = frame_coords * (texture_region_size + Vector2i(2, 2)) + Vector2i(1, 1);
+
+ image->blit_rect(*src, src_rect, base_pos);
+
+ image->blit_rect(*src, top_src_rect, base_pos + Vector2i(0, -1));
+ image->blit_rect(*src, bottom_src_rect, base_pos + Vector2i(0, src_rect.size.y));
+ image->blit_rect(*src, left_src_rect, base_pos + Vector2i(-1, 0));
+ image->blit_rect(*src, right_src_rect, base_pos + Vector2i(src_rect.size.x, 0));
+
+ image->set_pixelv(base_pos + Vector2i(-1, -1), src->get_pixelv(src_rect.position));
+ image->set_pixelv(base_pos + Vector2i(src_rect.size.x, -1), src->get_pixelv(src_rect.position + Vector2i(src_rect.size.x - 1, 0)));
+ image->set_pixelv(base_pos + Vector2i(-1, src_rect.size.y), src->get_pixelv(src_rect.position + Vector2i(0, src_rect.size.y - 1)));
+ image->set_pixelv(base_pos + Vector2i(src_rect.size.x, src_rect.size.y), src->get_pixelv(src_rect.position + Vector2i(src_rect.size.x - 1, src_rect.size.y - 1)));
+ }
+ }
+
+ if (!padded_texture.is_valid()) {
+ padded_texture.instantiate();
+ }
+ padded_texture->create_from_image(image);
+ emit_changed();
+}
+
/////////////////////////////// TileSetScenesCollectionSource //////////////////////////////////////
void TileSetScenesCollectionSource::_compute_next_alternative_id() {
@@ -4486,12 +4707,12 @@ void TileData::move_occlusion_layer(int p_from_index, int p_to_pos) {
ERR_FAIL_INDEX(p_from_index, occluders.size());
ERR_FAIL_INDEX(p_to_pos, occluders.size() + 1);
occluders.insert(p_to_pos, occluders[p_from_index]);
- occluders.remove(p_to_pos < p_from_index ? p_from_index + 1 : p_from_index);
+ occluders.remove_at(p_to_pos < p_from_index ? p_from_index + 1 : p_from_index);
}
void TileData::remove_occlusion_layer(int p_index) {
ERR_FAIL_INDEX(p_index, occluders.size());
- occluders.remove(p_index);
+ occluders.remove_at(p_index);
}
void TileData::add_physics_layer(int p_to_pos) {
@@ -4506,12 +4727,12 @@ void TileData::move_physics_layer(int p_from_index, int p_to_pos) {
ERR_FAIL_INDEX(p_from_index, physics.size());
ERR_FAIL_INDEX(p_to_pos, physics.size() + 1);
physics.insert(p_to_pos, physics[p_from_index]);
- physics.remove(p_to_pos < p_from_index ? p_from_index + 1 : p_from_index);
+ physics.remove_at(p_to_pos < p_from_index ? p_from_index + 1 : p_from_index);
}
void TileData::remove_physics_layer(int p_index) {
ERR_FAIL_INDEX(p_index, physics.size());
- physics.remove(p_index);
+ physics.remove_at(p_index);
}
void TileData::add_terrain_set(int p_to_pos) {
@@ -4595,12 +4816,12 @@ void TileData::move_navigation_layer(int p_from_index, int p_to_pos) {
ERR_FAIL_INDEX(p_from_index, navigation.size());
ERR_FAIL_INDEX(p_to_pos, navigation.size() + 1);
navigation.insert(p_to_pos, navigation[p_from_index]);
- navigation.remove(p_to_pos < p_from_index ? p_from_index + 1 : p_from_index);
+ navigation.remove_at(p_to_pos < p_from_index ? p_from_index + 1 : p_from_index);
}
void TileData::remove_navigation_layer(int p_index) {
ERR_FAIL_INDEX(p_index, navigation.size());
- navigation.remove(p_index);
+ navigation.remove_at(p_index);
}
void TileData::add_custom_data_layer(int p_to_pos) {
@@ -4615,12 +4836,12 @@ void TileData::move_custom_data_layer(int p_from_index, int p_to_pos) {
ERR_FAIL_INDEX(p_from_index, custom_data.size());
ERR_FAIL_INDEX(p_to_pos, custom_data.size() + 1);
custom_data.insert(p_to_pos, navigation[p_from_index]);
- custom_data.remove(p_to_pos < p_from_index ? p_from_index + 1 : p_from_index);
+ custom_data.remove_at(p_to_pos < p_from_index ? p_from_index + 1 : p_from_index);
}
void TileData::remove_custom_data_layer(int p_index) {
ERR_FAIL_INDEX(p_index, custom_data.size());
- custom_data.remove(p_index);
+ custom_data.remove_at(p_index);
}
void TileData::reset_state() {
@@ -4776,6 +4997,9 @@ real_t TileData::get_constant_angular_velocity(int p_layer_id) const {
void TileData::set_collision_polygons_count(int p_layer_id, int p_polygons_count) {
ERR_FAIL_INDEX(p_layer_id, physics.size());
ERR_FAIL_COND(p_polygons_count < 0);
+ if (p_polygons_count == physics.write[p_layer_id].polygons.size()) {
+ return;
+ }
physics.write[p_layer_id].polygons.resize(p_polygons_count);
notify_property_list_changed();
emit_signal(SNAME("changed"));
@@ -4795,7 +5019,7 @@ void TileData::add_collision_polygon(int p_layer_id) {
void TileData::remove_collision_polygon(int p_layer_id, int p_polygon_index) {
ERR_FAIL_INDEX(p_layer_id, physics.size());
ERR_FAIL_INDEX(p_polygon_index, physics[p_layer_id].polygons.size());
- physics.write[p_layer_id].polygons.remove(p_polygon_index);
+ physics.write[p_layer_id].polygons.remove_at(p_polygon_index);
emit_signal(SNAME("changed"));
}
@@ -4864,8 +5088,8 @@ int TileData::get_collision_polygon_shapes_count(int p_layer_id, int p_polygon_i
Ref<ConvexPolygonShape2D> TileData::get_collision_polygon_shape(int p_layer_id, int p_polygon_index, int shape_index) const {
ERR_FAIL_INDEX_V(p_layer_id, physics.size(), 0);
ERR_FAIL_INDEX_V(p_polygon_index, physics[p_layer_id].polygons.size(), Ref<ConvexPolygonShape2D>());
- ERR_FAIL_INDEX_V(shape_index, (int)physics[p_layer_id].polygons[shape_index].shapes.size(), Ref<ConvexPolygonShape2D>());
- return physics[p_layer_id].polygons[shape_index].shapes[shape_index];
+ ERR_FAIL_INDEX_V(shape_index, (int)physics[p_layer_id].polygons[p_polygon_index].shapes.size(), Ref<ConvexPolygonShape2D>());
+ return physics[p_layer_id].polygons[p_polygon_index].shapes[shape_index];
}
// Terrain
@@ -4915,10 +5139,10 @@ bool TileData::is_valid_peering_bit_terrain(TileSet::CellNeighbor p_peering_bit)
TileSet::TerrainsPattern TileData::get_terrains_pattern() const {
ERR_FAIL_COND_V(!tile_set, TileSet::TerrainsPattern());
- TileSet::TerrainsPattern output;
+ TileSet::TerrainsPattern output(tile_set, terrain_set);
for (int i = 0; i < TileSet::CELL_NEIGHBOR_MAX; i++) {
if (tile_set->is_valid_peering_bit_terrain(terrain_set, TileSet::CellNeighbor(i))) {
- output.push_back(get_peering_bit_terrain(TileSet::CellNeighbor(i)));
+ output.set_terrain(TileSet::CellNeighbor(i), get_peering_bit_terrain(TileSet::CellNeighbor(i)));
}
}
return output;
@@ -4981,9 +5205,6 @@ bool TileData::_set(const StringName &p_name, const Variant &p_value) {
ERR_FAIL_COND_V(layer_index < 0, false);
if (components[1] == "polygon") {
Ref<OccluderPolygon2D> polygon = p_value;
- if (!polygon.is_valid()) {
- return false;
- }
if (layer_index >= occluders.size()) {
if (tile_set) {
@@ -5055,9 +5276,6 @@ bool TileData::_set(const StringName &p_name, const Variant &p_value) {
ERR_FAIL_COND_V(layer_index < 0, false);
if (components[1] == "polygon") {
Ref<NavigationPolygon> polygon = p_value;
- if (!polygon.is_valid()) {
- return false;
- }
if (layer_index >= navigation.size()) {
if (tile_set) {
diff --git a/scene/resources/tile_set.h b/scene/resources/tile_set.h
index 077315e58d..d2238c26d2 100644
--- a/scene/resources/tile_set.h
+++ b/scene/resources/tile_set.h
@@ -253,7 +253,30 @@ public:
Ref<PackedScene> scene;
Vector2 offset;
};
- typedef Array TerrainsPattern;
+
+ class TerrainsPattern {
+ bool valid = false;
+ int bits[TileSet::CELL_NEIGHBOR_MAX];
+ bool is_valid_bit[TileSet::CELL_NEIGHBOR_MAX];
+
+ int not_empty_terrains_count = 0;
+
+ public:
+ bool is_valid() const;
+ bool is_erase_pattern() const;
+
+ bool operator<(const TerrainsPattern &p_terrains_pattern) const;
+ bool operator==(const TerrainsPattern &p_terrains_pattern) const;
+
+ void set_terrain(TileSet::CellNeighbor p_peering_bit, int p_terrain);
+ int get_terrain(TileSet::CellNeighbor p_peering_bit) const;
+
+ void set_terrains_from_array(Array p_terrains);
+ Array get_terrains_as_array() const;
+
+ TerrainsPattern(const TileSet *p_tile_set, int p_terrain_set);
+ TerrainsPattern() {}
+ };
protected:
bool _set(const StringName &p_name, const Variant &p_value);
@@ -478,7 +501,7 @@ public:
// Terrains.
Set<TerrainsPattern> get_terrains_pattern_set(int p_terrain_set);
Set<TileMapCell> get_tiles_for_terrains_pattern(int p_terrain_set, TerrainsPattern p_terrain_tile_pattern);
- TileMapCell get_random_tile_from_pattern(int p_terrain_set, TerrainsPattern p_terrain_tile_pattern);
+ TileMapCell get_random_tile_from_terrains_pattern(int p_terrain_set, TerrainsPattern p_terrain_tile_pattern);
// Helpers
Vector<Vector2> get_tile_shape_polygon();
@@ -580,6 +603,12 @@ private:
void _clear_tiles_outside_texture();
+ bool use_texture_padding = true;
+ Ref<ImageTexture> padded_texture;
+ bool padded_texture_needs_update = false;
+ void _queue_update_padded_texture();
+ void _update_padded_texture();
+
protected:
bool _set(const StringName &p_name, const Variant &p_value);
bool _get(const StringName &p_name, Variant &r_ret) const;
@@ -590,6 +619,7 @@ protected:
public:
// Not exposed.
virtual void set_tile_set(const TileSet *p_tile_set) override;
+ const TileSet *get_tile_set() const;
virtual void notify_tile_data_properties_should_change() override;
virtual void add_occlusion_layer(int p_index) override;
virtual void move_occlusion_layer(int p_from_index, int p_to_pos) override;
@@ -621,6 +651,10 @@ public:
void set_texture_region_size(Vector2i p_tile_size);
Vector2i get_texture_region_size() const;
+ // Padding.
+ void set_use_texture_padding(bool p_use_padding);
+ bool get_use_texture_padding() const;
+
// Base tiles.
void create_tile(const Vector2i p_atlas_coords, const Vector2i p_size = Vector2i(1, 1));
void remove_tile(Vector2i p_atlas_coords);
@@ -666,6 +700,10 @@ public:
Rect2i get_tile_texture_region(Vector2i p_atlas_coords, int p_frame = 0) const;
Vector2i get_tile_effective_texture_offset(Vector2i p_atlas_coords, int p_alternative_tile) const;
+ // Getters for texture and tile region (padded or not)
+ Ref<Texture2D> get_runtime_texture() const;
+ Rect2i get_runtime_tile_texture_region(Vector2i p_atlas_coords, int p_frame = 0) const;
+
~TileSetAtlasSource();
};
@@ -743,7 +781,7 @@ private:
};
Vector2 linear_velocity;
- float angular_velocity = 0.0;
+ double angular_velocity = 0.0;
Vector<PolygonShapeTileData> polygons;
};
Vector<PhysicsLayerTileData> physics;
diff --git a/scene/resources/visual_shader.cpp b/scene/resources/visual_shader.cpp
index fd785631a8..41e78e0bc8 100644
--- a/scene/resources/visual_shader.cpp
+++ b/scene/resources/visual_shader.cpp
@@ -36,6 +36,11 @@
#include "visual_shader_particle_nodes.h"
#include "visual_shader_sdf_nodes.h"
+String make_unique_id(VisualShader::Type p_type, int p_id, const String &p_name) {
+ static const char *typepf[VisualShader::TYPE_MAX] = { "vtx", "frg", "lgt", "start", "process", "collide", "start_custom", "process_custom", "sky", "fog" };
+ return p_name + "_" + String(typepf[p_type]) + "_" + itos(p_id);
+}
+
bool VisualShaderNode::is_simple_decl() const {
return simple_decl;
}
@@ -199,6 +204,10 @@ Vector<StringName> VisualShaderNode::get_editable_properties() const {
return Vector<StringName>();
}
+Map<StringName, String> VisualShaderNode::get_editable_properties_names() const {
+ return Map<StringName, String>();
+}
+
Array VisualShaderNode::get_default_input_values() const {
Array ret;
for (const KeyValue<int, Variant> &E : default_input_values) {
@@ -246,8 +255,8 @@ void VisualShaderNode::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_default_input_values"), &VisualShaderNode::get_default_input_values);
ADD_PROPERTY(PropertyInfo(Variant::INT, "output_port_for_preview"), "set_output_port_for_preview", "get_output_port_for_preview");
- ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "default_input_values", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL), "set_default_input_values", "get_default_input_values");
- ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "expanded_output_ports", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL), "_set_output_ports_expanded", "_get_output_ports_expanded");
+ ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "default_input_values", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL), "set_default_input_values", "get_default_input_values");
+ ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "expanded_output_ports", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL), "_set_output_ports_expanded", "_get_output_ports_expanded");
ADD_SIGNAL(MethodInfo("editor_refresh_request"));
BIND_ENUM_CONSTANT(PORT_TYPE_SCALAR);
@@ -350,7 +359,7 @@ String VisualShaderNodeCustom::generate_code(Shader::Mode p_mode, VisualShader::
}
String code = " {\n";
String _code;
- GDVIRTUAL_CALL(_get_code, input_vars, output_vars, (int)p_mode, (int)p_type, _code);
+ GDVIRTUAL_CALL(_get_code, input_vars, output_vars, p_mode, p_type, _code);
bool nend = _code.ends_with("\n");
_code = _code.insert(0, " ");
_code = _code.replace("\n", "\n ");
@@ -358,7 +367,7 @@ String VisualShaderNodeCustom::generate_code(Shader::Mode p_mode, VisualShader::
if (!nend) {
code += "\n }";
} else {
- code.remove(code.size() - 1);
+ code.remove_at(code.size() - 1);
code += "}";
}
code += "\n";
@@ -367,7 +376,7 @@ String VisualShaderNodeCustom::generate_code(Shader::Mode p_mode, VisualShader::
String VisualShaderNodeCustom::generate_global_per_node(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const {
String ret;
- if (GDVIRTUAL_CALL(_get_global_code, (int)p_mode, ret)) {
+ if (GDVIRTUAL_CALL(_get_global_code, p_mode, ret)) {
String code = "// " + get_caption() + "\n";
code += ret;
code += "\n";
@@ -431,7 +440,7 @@ void VisualShaderNodeCustom::_bind_methods() {
ClassDB::bind_method(D_METHOD("_is_initialized"), &VisualShaderNodeCustom::_is_initialized);
ClassDB::bind_method(D_METHOD("_set_input_port_default_value", "port", "value"), &VisualShaderNodeCustom::_set_input_port_default_value);
- ADD_PROPERTY(PropertyInfo(Variant::BOOL, "initialized", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL), "_set_initialized", "_is_initialized");
+ ADD_PROPERTY(PropertyInfo(Variant::BOOL, "initialized", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL), "_set_initialized", "_is_initialized");
}
VisualShaderNodeCustom::VisualShaderNodeCustom() {
@@ -1291,20 +1300,20 @@ void VisualShader::_get_property_list(List<PropertyInfo> *p_list) const {
prop_name += "/" + itos(E.key);
if (E.key != NODE_ID_OUTPUT) {
- p_list->push_back(PropertyInfo(Variant::OBJECT, prop_name + "/node", PROPERTY_HINT_RESOURCE_TYPE, "VisualShaderNode", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_DO_NOT_SHARE_ON_DUPLICATE));
+ p_list->push_back(PropertyInfo(Variant::OBJECT, prop_name + "/node", PROPERTY_HINT_RESOURCE_TYPE, "VisualShaderNode", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_DO_NOT_SHARE_ON_DUPLICATE));
}
- p_list->push_back(PropertyInfo(Variant::VECTOR2, prop_name + "/position", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR));
+ p_list->push_back(PropertyInfo(Variant::VECTOR2, prop_name + "/position", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR));
if (Object::cast_to<VisualShaderNodeGroupBase>(E.value.node.ptr()) != nullptr) {
- p_list->push_back(PropertyInfo(Variant::VECTOR2, prop_name + "/size", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR));
- p_list->push_back(PropertyInfo(Variant::STRING, prop_name + "/input_ports", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR));
- p_list->push_back(PropertyInfo(Variant::STRING, prop_name + "/output_ports", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR));
+ p_list->push_back(PropertyInfo(Variant::VECTOR2, prop_name + "/size", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR));
+ p_list->push_back(PropertyInfo(Variant::STRING, prop_name + "/input_ports", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR));
+ p_list->push_back(PropertyInfo(Variant::STRING, prop_name + "/output_ports", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR));
}
if (Object::cast_to<VisualShaderNodeExpression>(E.value.node.ptr()) != nullptr) {
- p_list->push_back(PropertyInfo(Variant::STRING, prop_name + "/expression", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR));
+ p_list->push_back(PropertyInfo(Variant::STRING, prop_name + "/expression", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR));
}
}
- p_list->push_back(PropertyInfo(Variant::PACKED_INT32_ARRAY, "nodes/" + String(type_string[i]) + "/connections", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR));
+ p_list->push_back(PropertyInfo(Variant::PACKED_INT32_ARRAY, "nodes/" + String(type_string[i]) + "/connections", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR));
}
}
@@ -1825,6 +1834,8 @@ void VisualShader::_update_shader() const {
code += " vec3 __vec3_buff2;\n";
code += " float __scalar_buff1;\n";
code += " float __scalar_buff2;\n";
+ code += " int __scalar_ibuff;\n";
+ code += " vec4 __vec4_buff;\n";
code += " vec3 __ndiff = normalize(__diff);\n\n";
}
if (has_start) {
@@ -1922,6 +1933,10 @@ void VisualShader::_update_shader() const {
global_compute_code += " return mat4(vec4(oc * axis.x * axis.x + c, oc * axis.x * axis.y - axis.z * s, oc * axis.z * axis.x + axis.y * s, 0), vec4(oc * axis.x * axis.y + axis.z * s, oc * axis.y * axis.y + c, oc * axis.y * axis.z - axis.x * s, 0), vec4(oc * axis.z * axis.x - axis.y * s, oc * axis.y * axis.z + axis.x * s, oc * axis.z * axis.z + c, 0), vec4(0, 0, 0, 1));\n";
global_compute_code += "}\n\n";
+ global_compute_code += "vec2 __get_random_unit_vec2(inout uint seed) {\n";
+ global_compute_code += " return normalize(vec2(__rand_from_seed_m1_p1(seed), __rand_from_seed_m1_p1(seed)));\n";
+ global_compute_code += "}\n\n";
+
global_compute_code += "vec3 __get_random_unit_vec3(inout uint seed) {\n";
global_compute_code += " return normalize(vec3(__rand_from_seed_m1_p1(seed), __rand_from_seed_m1_p1(seed), __rand_from_seed_m1_p1(seed)));\n";
global_compute_code += "}\n\n";
@@ -1948,7 +1963,9 @@ void VisualShader::_update_shader() const {
const_cast<VisualShader *>(this)->set_code(final_code);
for (int i = 0; i < default_tex_params.size(); i++) {
- const_cast<VisualShader *>(this)->set_default_texture_param(default_tex_params[i].name, default_tex_params[i].param);
+ for (int j = 0; j < default_tex_params[i].params.size(); j++) {
+ const_cast<VisualShader *>(this)->set_default_texture_param(default_tex_params[i].name, default_tex_params[i].params[j], j);
+ }
}
if (previous_code != final_code) {
const_cast<VisualShader *>(this)->emit_signal(SNAME("changed"));
@@ -2017,8 +2034,8 @@ void VisualShader::_bind_methods() {
ClassDB::bind_method(D_METHOD("_update_shader"), &VisualShader::_update_shader);
- ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "graph_offset", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR), "set_graph_offset", "get_graph_offset");
- ADD_PROPERTY(PropertyInfo(Variant::STRING, "engine_version", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR), "set_engine_version", "get_engine_version");
+ ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "graph_offset", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), "set_graph_offset", "get_graph_offset");
+ ADD_PROPERTY(PropertyInfo(Variant::STRING, "engine_version", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), "set_engine_version", "get_engine_version");
ADD_PROPERTY_DEFAULT("code", ""); // Inherited from Shader, prevents showing default code as override in docs.
@@ -2850,7 +2867,7 @@ void VisualShaderNodeUniformRef::_bind_methods() {
ClassDB::bind_method(D_METHOD("_get_uniform_type"), &VisualShaderNodeUniformRef::_get_uniform_type);
ADD_PROPERTY(PropertyInfo(Variant::STRING_NAME, "uniform_name", PROPERTY_HINT_ENUM, ""), "set_uniform_name", "get_uniform_name");
- ADD_PROPERTY(PropertyInfo(Variant::INT, "uniform_type", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL), "_set_uniform_type", "_get_uniform_type");
+ ADD_PROPERTY(PropertyInfo(Variant::INT, "uniform_type", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL), "_set_uniform_type", "_get_uniform_type");
}
Vector<StringName> VisualShaderNodeUniformRef::get_editable_properties() const {
@@ -3436,7 +3453,7 @@ void VisualShaderNodeGroupBase::add_input_port(int p_id, int p_type, const Strin
count++;
}
- inputs.erase(index, count);
+ inputs = inputs.left(index) + inputs.substr(index + count);
inputs = inputs.insert(index, itos(i));
index += inputs_strings[i].size();
}
@@ -3459,7 +3476,7 @@ void VisualShaderNodeGroupBase::remove_input_port(int p_id) {
}
index += inputs_strings[i].size();
}
- inputs.erase(index, count);
+ inputs = inputs.left(index) + inputs.substr(index + count);
inputs_strings = inputs.split(";", false);
inputs = inputs.substr(0, index);
@@ -3512,7 +3529,7 @@ void VisualShaderNodeGroupBase::add_output_port(int p_id, int p_type, const Stri
count++;
}
- outputs.erase(index, count);
+ outputs = outputs.left(index) + outputs.substr(index + count);
outputs = outputs.insert(index, itos(i));
index += outputs_strings[i].size();
}
@@ -3535,7 +3552,7 @@ void VisualShaderNodeGroupBase::remove_output_port(int p_id) {
}
index += outputs_strings[i].size();
}
- outputs.erase(index, count);
+ outputs = outputs.left(index) + outputs.substr(index + count);
outputs_strings = outputs.split(";", false);
outputs = outputs.substr(0, index);
@@ -3587,8 +3604,7 @@ void VisualShaderNodeGroupBase::set_input_port_type(int p_id, int p_type) {
index += inputs_strings[i].size();
}
- inputs.erase(index, count);
-
+ inputs = inputs.left(index) + inputs.substr(index + count);
inputs = inputs.insert(index, itos(p_type));
_apply_port_changes();
@@ -3623,8 +3639,7 @@ void VisualShaderNodeGroupBase::set_input_port_name(int p_id, const String &p_na
index += inputs_strings[i].size();
}
- inputs.erase(index, count);
-
+ inputs = inputs.left(index) + inputs.substr(index + count);
inputs = inputs.insert(index, p_name);
_apply_port_changes();
@@ -3659,7 +3674,7 @@ void VisualShaderNodeGroupBase::set_output_port_type(int p_id, int p_type) {
index += output_strings[i].size();
}
- outputs.erase(index, count);
+ outputs = outputs.left(index) + outputs.substr(index + count);
outputs = outputs.insert(index, itos(p_type));
@@ -3695,7 +3710,7 @@ void VisualShaderNodeGroupBase::set_output_port_name(int p_id, const String &p_n
index += output_strings[i].size();
}
- outputs.erase(index, count);
+ outputs = outputs.left(index) + outputs.substr(index + count);
outputs = outputs.insert(index, p_name);
diff --git a/scene/resources/visual_shader.h b/scene/resources/visual_shader.h
index 19530e5a34..5bb9d45f39 100644
--- a/scene/resources/visual_shader.h
+++ b/scene/resources/visual_shader.h
@@ -70,7 +70,7 @@ public:
struct DefaultTextureParam {
StringName name;
- Ref<Texture2D> param;
+ List<Ref<Texture2D>> params;
};
private:
@@ -272,6 +272,7 @@ public:
void set_disabled(bool p_disabled = true);
virtual Vector<StringName> get_editable_properties() const;
+ virtual Map<StringName, String> get_editable_properties_names() const;
virtual Vector<VisualShader::DefaultTextureParam> get_default_texture_parameters(VisualShader::Type p_type, int p_id) const;
virtual String generate_global(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const;
@@ -327,8 +328,8 @@ protected:
GDVIRTUAL0RC(int, _get_output_port_count)
GDVIRTUAL1RC(int, _get_output_port_type, int)
GDVIRTUAL1RC(String, _get_output_port_name, int)
- GDVIRTUAL4RC(String, _get_code, Vector<String>, TypedArray<String>, int, int)
- GDVIRTUAL1RC(String, _get_global_code, int)
+ GDVIRTUAL4RC(String, _get_code, Vector<String>, TypedArray<String>, Shader::Mode, VisualShader::Type)
+ GDVIRTUAL1RC(String, _get_global_code, Shader::Mode)
GDVIRTUAL0RC(bool, _is_highend)
protected:
@@ -696,4 +697,6 @@ public:
VisualShaderNodeGlobalExpression();
};
+extern String make_unique_id(VisualShader::Type p_type, int p_id, const String &p_name);
+
#endif // VISUAL_SHADER_H
diff --git a/scene/resources/visual_shader_nodes.cpp b/scene/resources/visual_shader_nodes.cpp
index c3d9ef7b04..951870fe34 100644
--- a/scene/resources/visual_shader_nodes.cpp
+++ b/scene/resources/visual_shader_nodes.cpp
@@ -494,15 +494,10 @@ String VisualShaderNodeTexture::get_input_port_default_hint(int p_port) const {
return "";
}
-static String make_unique_id(VisualShader::Type p_type, int p_id, const String &p_name) {
- static const char *typepf[VisualShader::TYPE_MAX] = { "vtx", "frg", "lgt" };
- return p_name + "_" + String(typepf[p_type]) + "_" + itos(p_id);
-}
-
Vector<VisualShader::DefaultTextureParam> VisualShaderNodeTexture::get_default_texture_parameters(VisualShader::Type p_type, int p_id) const {
VisualShader::DefaultTextureParam dtp;
dtp.name = make_unique_id(p_type, p_id, "tex");
- dtp.param = texture;
+ dtp.params.push_back(texture);
Vector<VisualShader::DefaultTextureParam> ret;
ret.push_back(dtp);
return ret;
@@ -900,7 +895,7 @@ String VisualShaderNodeCurveTexture::generate_code(Shader::Mode p_mode, VisualSh
Vector<VisualShader::DefaultTextureParam> VisualShaderNodeCurveTexture::get_default_texture_parameters(VisualShader::Type p_type, int p_id) const {
VisualShader::DefaultTextureParam dtp;
dtp.name = make_unique_id(p_type, p_id, "curve");
- dtp.param = texture;
+ dtp.params.push_back(texture);
Vector<VisualShader::DefaultTextureParam> ret;
ret.push_back(dtp);
return ret;
@@ -985,7 +980,7 @@ String VisualShaderNodeCurveXYZTexture::generate_code(Shader::Mode p_mode, Visua
Vector<VisualShader::DefaultTextureParam> VisualShaderNodeCurveXYZTexture::get_default_texture_parameters(VisualShader::Type p_type, int p_id) const {
VisualShader::DefaultTextureParam dtp;
dtp.name = make_unique_id(p_type, p_id, "curve3d");
- dtp.param = texture;
+ dtp.params.push_back(texture);
Vector<VisualShader::DefaultTextureParam> ret;
ret.push_back(dtp);
return ret;
@@ -1167,7 +1162,7 @@ String VisualShaderNodeTexture2DArray::get_input_port_name(int p_port) const {
Vector<VisualShader::DefaultTextureParam> VisualShaderNodeTexture2DArray::get_default_texture_parameters(VisualShader::Type p_type, int p_id) const {
VisualShader::DefaultTextureParam dtp;
dtp.name = make_unique_id(p_type, p_id, "tex3d");
- dtp.param = texture_array;
+ dtp.params.push_back(texture_array);
Vector<VisualShader::DefaultTextureParam> ret;
ret.push_back(dtp);
return ret;
@@ -1224,7 +1219,7 @@ String VisualShaderNodeTexture3D::get_input_port_name(int p_port) const {
Vector<VisualShader::DefaultTextureParam> VisualShaderNodeTexture3D::get_default_texture_parameters(VisualShader::Type p_type, int p_id) const {
VisualShader::DefaultTextureParam dtp;
dtp.name = make_unique_id(p_type, p_id, "tex3d");
- dtp.param = texture;
+ dtp.params.push_back(texture);
Vector<VisualShader::DefaultTextureParam> ret;
ret.push_back(dtp);
return ret;
@@ -1323,7 +1318,7 @@ bool VisualShaderNodeCubemap::is_output_port_expandable(int p_port) const {
Vector<VisualShader::DefaultTextureParam> VisualShaderNodeCubemap::get_default_texture_parameters(VisualShader::Type p_type, int p_id) const {
VisualShader::DefaultTextureParam dtp;
dtp.name = make_unique_id(p_type, p_id, "cube");
- dtp.param = cube_map;
+ dtp.params.push_back(cube_map);
Vector<VisualShader::DefaultTextureParam> ret;
ret.push_back(dtp);
return ret;
diff --git a/scene/resources/visual_shader_particle_nodes.cpp b/scene/resources/visual_shader_particle_nodes.cpp
index 18b933e5cf..1a829968e3 100644
--- a/scene/resources/visual_shader_particle_nodes.cpp
+++ b/scene/resources/visual_shader_particle_nodes.cpp
@@ -30,6 +30,8 @@
#include "visual_shader_particle_nodes.h"
+#include "core/core_string_names.h"
+
// VisualShaderNodeParticleEmitter
int VisualShaderNodeParticleEmitter::get_output_port_count() const {
@@ -51,6 +53,38 @@ bool VisualShaderNodeParticleEmitter::has_output_port_preview(int p_port) const
return false;
}
+void VisualShaderNodeParticleEmitter::set_mode_2d(bool p_enabled) {
+ mode_2d = p_enabled;
+ emit_changed();
+}
+
+bool VisualShaderNodeParticleEmitter::is_mode_2d() const {
+ return mode_2d;
+}
+
+Vector<StringName> VisualShaderNodeParticleEmitter::get_editable_properties() const {
+ Vector<StringName> props;
+ props.push_back("mode_2d");
+ return props;
+}
+
+Map<StringName, String> VisualShaderNodeParticleEmitter::get_editable_properties_names() const {
+ Map<StringName, String> names;
+ names.insert("mode_2d", TTR("2D Mode"));
+ return names;
+}
+
+bool VisualShaderNodeParticleEmitter::is_show_prop_names() const {
+ return true;
+}
+
+void VisualShaderNodeParticleEmitter::_bind_methods() {
+ ClassDB::bind_method(D_METHOD("set_mode_2d", "enabled"), &VisualShaderNodeParticleEmitter::set_mode_2d);
+ ClassDB::bind_method(D_METHOD("is_mode_2d"), &VisualShaderNodeParticleEmitter::is_mode_2d);
+
+ ADD_PROPERTY(PropertyInfo(Variant::BOOL, "mode_2d"), "set_mode_2d", "is_mode_2d");
+}
+
VisualShaderNodeParticleEmitter::VisualShaderNodeParticleEmitter() {
}
@@ -79,15 +113,27 @@ String VisualShaderNodeParticleSphereEmitter::get_input_port_name(int p_port) co
String VisualShaderNodeParticleSphereEmitter::generate_global_per_node(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const {
String code;
+
+ code += "vec2 __get_random_point_in_circle(inout uint seed, float radius, float inner_radius) {\n";
+ code += " return __get_random_unit_vec2(seed) * __randf_range(seed, inner_radius, radius);\n";
+ code += "}\n\n";
+
code += "vec3 __get_random_point_in_sphere(inout uint seed, float radius, float inner_radius) {\n";
code += " return __get_random_unit_vec3(seed) * __randf_range(seed, inner_radius, radius);\n";
code += "}\n\n";
+
return code;
}
String VisualShaderNodeParticleSphereEmitter::generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview) const {
String code;
- code += " " + p_output_vars[0] + " = __get_random_point_in_sphere(__seed, " + (p_input_vars[0].is_empty() ? (String)get_input_port_default_value(0) : p_input_vars[0]) + ", " + (p_input_vars[1].is_empty() ? (String)get_input_port_default_value(1) : p_input_vars[1]) + ");\n";
+
+ if (mode_2d) {
+ code += " " + p_output_vars[0] + " = vec3(__get_random_point_in_circle(__seed, " + (p_input_vars[0].is_empty() ? (String)get_input_port_default_value(0) : p_input_vars[0]) + ", " + (p_input_vars[1].is_empty() ? (String)get_input_port_default_value(1) : p_input_vars[1]) + "), 0.0);\n";
+ } else {
+ code += " " + p_output_vars[0] + " = __get_random_point_in_sphere(__seed, " + (p_input_vars[0].is_empty() ? (String)get_input_port_default_value(0) : p_input_vars[0]) + ", " + (p_input_vars[1].is_empty() ? (String)get_input_port_default_value(1) : p_input_vars[1]) + ");\n";
+ }
+
return code;
}
@@ -122,16 +168,27 @@ String VisualShaderNodeParticleBoxEmitter::get_input_port_name(int p_port) const
String VisualShaderNodeParticleBoxEmitter::generate_global_per_node(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const {
String code;
- code += "vec3 __get_random_point_in_box(inout uint seed, vec3 extents) {\n";
+
+ code += "vec2 __get_random_point_in_box2d(inout uint seed, vec2 extents) {\n";
+ code += " vec2 half_extents = extents / 2.0;\n";
+ code += " return vec2(__randf_range(seed, -half_extents.x, half_extents.x), __randf_range(seed, -half_extents.y, half_extents.y));\n";
+ code += "}\n\n";
+
+ code += "vec3 __get_random_point_in_box3d(inout uint seed, vec3 extents) {\n";
code += " vec3 half_extents = extents / 2.0;\n";
code += " return vec3(__randf_range(seed, -half_extents.x, half_extents.x), __randf_range(seed, -half_extents.y, half_extents.y), __randf_range(seed, -half_extents.z, half_extents.z));\n";
code += "}\n\n";
+
return code;
}
String VisualShaderNodeParticleBoxEmitter::generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview) const {
String code;
- code += " " + p_output_vars[0] + " = __get_random_point_in_box(__seed, " + (p_input_vars[0].is_empty() ? (String)get_input_port_default_value(0) : p_input_vars[0]) + ");\n";
+ if (mode_2d) {
+ code += " " + p_output_vars[0] + " = vec3(__get_random_point_in_box2d(__seed, " + (p_input_vars[0].is_empty() ? (String)get_input_port_default_value(0) : p_input_vars[0]) + ".xy), 0.0);\n";
+ } else {
+ code += " " + p_output_vars[0] + " = __get_random_point_in_box3d(__seed, " + (p_input_vars[0].is_empty() ? (String)get_input_port_default_value(0) : p_input_vars[0]) + ");\n";
+ }
return code;
}
@@ -166,17 +223,31 @@ String VisualShaderNodeParticleRingEmitter::get_input_port_name(int p_port) cons
String VisualShaderNodeParticleRingEmitter::generate_global_per_node(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const {
String code;
- code += "vec3 __get_random_point_on_ring(inout uint seed, float radius, float inner_radius, float height) {\n";
- code += " float angle = __rand_from_seed(seed) * PI * 2.0;\n";
+
+ code += "vec2 __get_random_point_on_ring2d(inout uint seed, float radius, float inner_radius) {\n";
+ code += " float angle = __rand_from_seed(seed) * TAU;\n";
+ code += " vec2 ring = vec2(sin(angle), cos(angle)) * __randf_range(seed, inner_radius, radius);\n";
+ code += " return vec2(ring.x, ring.y);\n";
+ code += "}\n\n";
+
+ code += "vec3 __get_random_point_on_ring3d(inout uint seed, float radius, float inner_radius, float height) {\n";
+ code += " float angle = __rand_from_seed(seed) * TAU;\n";
code += " vec2 ring = vec2(sin(angle), cos(angle)) * __randf_range(seed, inner_radius, radius);\n";
code += " return vec3(ring.x, __randf_range(seed, min(0.0, height), max(0.0, height)), ring.y);\n";
code += "}\n\n";
+
return code;
}
String VisualShaderNodeParticleRingEmitter::generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview) const {
String code;
- code = " " + p_output_vars[0] + " = __get_random_point_on_ring(__seed, " + (p_input_vars[0].is_empty() ? (String)get_input_port_default_value(0) : p_input_vars[0]) + ", " + (p_input_vars[1].is_empty() ? (String)get_input_port_default_value(1) : p_input_vars[1]) + ", " + (p_input_vars[2].is_empty() ? (String)get_input_port_default_value(2) : p_input_vars[2]) + ");\n";
+
+ if (mode_2d) {
+ code = " " + p_output_vars[0] + " = vec3(__get_random_point_on_ring2d(__seed, " + (p_input_vars[0].is_empty() ? (String)get_input_port_default_value(0) : p_input_vars[0]) + ", " + (p_input_vars[1].is_empty() ? (String)get_input_port_default_value(1) : p_input_vars[1]) + "), 0.0);\n";
+ } else {
+ code = " " + p_output_vars[0] + " = __get_random_point_on_ring3d(__seed, " + (p_input_vars[0].is_empty() ? (String)get_input_port_default_value(0) : p_input_vars[0]) + ", " + (p_input_vars[1].is_empty() ? (String)get_input_port_default_value(1) : p_input_vars[1]) + ", " + (p_input_vars[2].is_empty() ? (String)get_input_port_default_value(2) : p_input_vars[2]) + ");\n";
+ }
+
return code;
}
@@ -186,6 +257,430 @@ VisualShaderNodeParticleRingEmitter::VisualShaderNodeParticleRingEmitter() {
set_input_port_default_value(2, 0.0);
}
+// VisualShaderNodeParticleMeshEmitter
+
+String VisualShaderNodeParticleMeshEmitter::get_caption() const {
+ return "MeshEmitter";
+}
+
+int VisualShaderNodeParticleMeshEmitter::get_output_port_count() const {
+ return 6;
+}
+
+VisualShaderNodeParticleBoxEmitter::PortType VisualShaderNodeParticleMeshEmitter::get_output_port_type(int p_port) const {
+ switch (p_port) {
+ case 0:
+ return PORT_TYPE_VECTOR; // position
+ case 1:
+ return PORT_TYPE_VECTOR; // normal
+ case 2:
+ return PORT_TYPE_VECTOR; // color
+ case 3:
+ return PORT_TYPE_SCALAR; // alpha
+ case 4:
+ return PORT_TYPE_VECTOR; // uv
+ case 5:
+ return PORT_TYPE_VECTOR; // uv2
+ }
+ return PORT_TYPE_SCALAR;
+}
+
+String VisualShaderNodeParticleMeshEmitter::get_output_port_name(int p_port) const {
+ switch (p_port) {
+ case 0:
+ return "position";
+ case 1:
+ return "normal";
+ case 2:
+ return "color";
+ case 3:
+ return "alpha";
+ case 4:
+ return "uv";
+ case 5:
+ return "uv2";
+ }
+ return String();
+}
+
+int VisualShaderNodeParticleMeshEmitter::get_input_port_count() const {
+ return 0;
+}
+
+VisualShaderNodeParticleBoxEmitter::PortType VisualShaderNodeParticleMeshEmitter::get_input_port_type(int p_port) const {
+ return PORT_TYPE_SCALAR;
+}
+
+String VisualShaderNodeParticleMeshEmitter::get_input_port_name(int p_port) const {
+ return String();
+}
+
+String VisualShaderNodeParticleMeshEmitter::generate_global(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const {
+ String code;
+
+ if (mesh.is_valid()) {
+ if (is_output_port_connected(0)) { // position
+ code += "uniform sampler2D " + make_unique_id(p_type, p_id, "mesh_vx") + ";\n";
+ }
+
+ if (is_output_port_connected(1)) { // normal
+ code += "uniform sampler2D " + make_unique_id(p_type, p_id, "mesh_nm") + ";\n";
+ }
+
+ if (is_output_port_connected(2) || is_output_port_connected(3)) { // color & alpha
+ code += "uniform sampler2D " + make_unique_id(p_type, p_id, "mesh_col") + ";\n";
+ }
+
+ if (is_output_port_connected(4)) { // uv
+ code += "uniform sampler2D " + make_unique_id(p_type, p_id, "mesh_uv") + ";\n";
+ }
+
+ if (is_output_port_connected(5)) { // uv2
+ code += "uniform sampler2D " + make_unique_id(p_type, p_id, "mesh_uv2") + ";\n";
+ }
+ }
+
+ return code;
+}
+
+String VisualShaderNodeParticleMeshEmitter::_generate_code(VisualShader::Type p_type, int p_id, const String *p_output_vars, int p_index, const String &p_texture_name, bool p_ignore_mode2d) const {
+ String code;
+ if (is_output_port_connected(p_index)) {
+ if (mode_2d && !p_ignore_mode2d) {
+ code += " " + p_output_vars[p_index] + " = vec3(";
+ code += "texelFetch(";
+ code += make_unique_id(p_type, p_id, p_texture_name) + ", ";
+ code += "ivec2(__scalar_ibuff, 0), 0).xy, 0.0);\n";
+ } else {
+ code += " " + p_output_vars[p_index] + " = texelFetch(";
+ code += make_unique_id(p_type, p_id, p_texture_name) + ", ";
+ code += "ivec2(__scalar_ibuff, 0), 0).xyz;\n";
+ }
+ }
+ return code;
+}
+
+String VisualShaderNodeParticleMeshEmitter::generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview) const {
+ String code;
+ code += " __scalar_ibuff = int(__rand_from_seed(__seed) * 65535.0) % " + itos(position_texture->get_width()) + ";\n";
+
+ code += _generate_code(p_type, p_id, p_output_vars, 0, "mesh_vx");
+ code += _generate_code(p_type, p_id, p_output_vars, 1, "mesh_nm");
+
+ if (is_output_port_connected(2) || is_output_port_connected(3)) {
+ code += " __vec4_buff = texelFetch(";
+ code += make_unique_id(p_type, p_id, "mesh_col") + ", ";
+ code += "ivec2(__scalar_ibuff, 0), 0);\n";
+ if (is_output_port_connected(2)) {
+ code += " " + p_output_vars[2] + " = __vec4_buff.rgb;\n";
+ } else {
+ code += " " + p_output_vars[2] + " = vec3(0.0);\n";
+ }
+ if (is_output_port_connected(3)) {
+ code += " " + p_output_vars[3] + " = __vec4_buff.a;\n";
+ } else {
+ code += " " + p_output_vars[3] + " = 0.0;\n";
+ }
+ }
+
+ code += _generate_code(p_type, p_id, p_output_vars, 4, "mesh_uv", true);
+ code += _generate_code(p_type, p_id, p_output_vars, 5, "mesh_uv2", true);
+
+ return code;
+}
+
+Vector<VisualShader::DefaultTextureParam> VisualShaderNodeParticleMeshEmitter::get_default_texture_parameters(VisualShader::Type p_type, int p_id) const {
+ Vector<VisualShader::DefaultTextureParam> ret;
+
+ if (is_output_port_connected(0)) {
+ VisualShader::DefaultTextureParam dtp;
+ dtp.name = make_unique_id(p_type, p_id, "mesh_vx");
+ dtp.params.push_back(position_texture);
+ ret.push_back(dtp);
+ }
+
+ if (is_output_port_connected(1)) {
+ VisualShader::DefaultTextureParam dtp;
+ dtp.name = make_unique_id(p_type, p_id, "mesh_nm");
+ dtp.params.push_back(normal_texture);
+ ret.push_back(dtp);
+ }
+
+ if (is_output_port_connected(2) || is_output_port_connected(3)) {
+ VisualShader::DefaultTextureParam dtp;
+ dtp.name = make_unique_id(p_type, p_id, "mesh_col");
+ dtp.params.push_back(color_texture);
+ ret.push_back(dtp);
+ }
+
+ if (is_output_port_connected(4)) {
+ VisualShader::DefaultTextureParam dtp;
+ dtp.name = make_unique_id(p_type, p_id, "mesh_uv");
+ dtp.params.push_back(uv_texture);
+ ret.push_back(dtp);
+ }
+
+ if (is_output_port_connected(5)) {
+ VisualShader::DefaultTextureParam dtp;
+ dtp.name = make_unique_id(p_type, p_id, "mesh_uv2");
+ dtp.params.push_back(uv2_texture);
+ ret.push_back(dtp);
+ }
+
+ return ret;
+}
+
+void VisualShaderNodeParticleMeshEmitter::_update_texture(const Vector<Vector2> &p_array, Ref<ImageTexture> &r_texture) {
+ Ref<Image> image;
+ image.instantiate();
+
+ if (p_array.size() == 0) {
+ image->create(1, 1, false, Image::Format::FORMAT_RGBF);
+ } else {
+ image->create(p_array.size(), 1, false, Image::Format::FORMAT_RGBF);
+ }
+
+ for (int i = 0; i < p_array.size(); i++) {
+ Vector2 v = p_array[i];
+ image->set_pixel(i, 0, Color(v.x, v.y, 0));
+ }
+ if (r_texture->get_width() != p_array.size() || p_array.size() == 0) {
+ r_texture->create_from_image(image);
+ } else {
+ r_texture->update(image);
+ }
+}
+
+void VisualShaderNodeParticleMeshEmitter::_update_texture(const Vector<Vector3> &p_array, Ref<ImageTexture> &r_texture) {
+ Ref<Image> image;
+ image.instantiate();
+
+ if (p_array.size() == 0) {
+ image->create(1, 1, false, Image::Format::FORMAT_RGBF);
+ } else {
+ image->create(p_array.size(), 1, false, Image::Format::FORMAT_RGBF);
+ }
+
+ for (int i = 0; i < p_array.size(); i++) {
+ Vector3 v = p_array[i];
+ image->set_pixel(i, 0, Color(v.x, v.y, v.z));
+ }
+ if (r_texture->get_width() != p_array.size() || p_array.size() == 0) {
+ r_texture->create_from_image(image);
+ } else {
+ r_texture->update(image);
+ }
+}
+
+void VisualShaderNodeParticleMeshEmitter::_update_texture(const Vector<Color> &p_array, Ref<ImageTexture> &r_texture) {
+ Ref<Image> image;
+ image.instantiate();
+
+ if (p_array.size() == 0) {
+ image->create(1, 1, false, Image::Format::FORMAT_RGBA8);
+ } else {
+ image->create(p_array.size(), 1, false, Image::Format::FORMAT_RGBA8);
+ }
+
+ for (int i = 0; i < p_array.size(); i++) {
+ image->set_pixel(i, 0, p_array[i]);
+ }
+ if (r_texture->get_width() != p_array.size() || p_array.size() == 0) {
+ r_texture->create_from_image(image);
+ } else {
+ r_texture->update(image);
+ }
+}
+
+void VisualShaderNodeParticleMeshEmitter::_update_textures() {
+ if (!mesh.is_valid()) {
+ return;
+ }
+
+ Vector<Vector3> vertices;
+ Vector<Vector3> normals;
+ Vector<Color> colors;
+ Vector<Vector2> uvs;
+ Vector<Vector2> uvs2;
+
+ if (use_all_surfaces) {
+ for (int i = 0; i < max_surface_index; i++) {
+ // position
+ Array vertex_array = mesh->surface_get_arrays(i)[Mesh::ARRAY_VERTEX];
+ for (int j = 0; j < vertex_array.size(); j++) {
+ vertices.push_back((Vector3)vertex_array[j]);
+ }
+
+ // normal
+ Array normal_array = mesh->surface_get_arrays(i)[Mesh::ARRAY_NORMAL];
+ for (int j = 0; j < normal_array.size(); j++) {
+ normals.push_back((Vector3)normal_array[j]);
+ }
+
+ // color
+ Array color_array = mesh->surface_get_arrays(i)[Mesh::ARRAY_COLOR];
+ for (int j = 0; j < color_array.size(); j++) {
+ colors.push_back((Color)color_array[j]);
+ }
+
+ // uv
+ Array uv_array = mesh->surface_get_arrays(i)[Mesh::ARRAY_TEX_UV];
+ for (int j = 0; j < uv_array.size(); j++) {
+ uvs.push_back((Vector2)uv_array[j]);
+ }
+
+ // uv2
+ Array uv2_array = mesh->surface_get_arrays(i)[Mesh::ARRAY_TEX_UV2];
+ for (int j = 0; j < uv2_array.size(); j++) {
+ uvs2.push_back((Vector2)uv2_array[j]);
+ }
+ }
+ } else {
+ // position
+ Array vertex_array = mesh->surface_get_arrays(surface_index)[Mesh::ARRAY_VERTEX];
+ for (int i = 0; i < vertex_array.size(); i++) {
+ vertices.push_back((Vector3)vertex_array[i]);
+ }
+
+ // normal
+ Array normal_array = mesh->surface_get_arrays(surface_index)[Mesh::ARRAY_NORMAL];
+ for (int i = 0; i < normal_array.size(); i++) {
+ normals.push_back((Vector3)normal_array[i]);
+ }
+
+ // color
+ Array color_array = mesh->surface_get_arrays(surface_index)[Mesh::ARRAY_COLOR];
+ for (int i = 0; i < color_array.size(); i++) {
+ colors.push_back((Color)color_array[i]);
+ }
+
+ // uv
+ Array uv_array = mesh->surface_get_arrays(surface_index)[Mesh::ARRAY_TEX_UV];
+ for (int j = 0; j < uv_array.size(); j++) {
+ uvs.push_back((Vector2)uv_array[j]);
+ }
+
+ // uv2
+ Array uv2_array = mesh->surface_get_arrays(surface_index)[Mesh::ARRAY_TEX_UV2];
+ for (int j = 0; j < uv2_array.size(); j++) {
+ uvs2.push_back((Vector2)uv2_array[j]);
+ }
+ }
+
+ _update_texture(vertices, position_texture);
+ _update_texture(normals, normal_texture);
+ _update_texture(colors, color_texture);
+ _update_texture(uvs, uv_texture);
+ _update_texture(uvs2, uv2_texture);
+}
+
+void VisualShaderNodeParticleMeshEmitter::set_mesh(Ref<Mesh> p_mesh) {
+ if (mesh == p_mesh) {
+ return;
+ }
+
+ if (p_mesh.is_valid()) {
+ max_surface_index = p_mesh->get_surface_count();
+ } else {
+ max_surface_index = 0;
+ }
+
+ if (mesh.is_valid()) {
+ Callable callable = callable_mp(this, &VisualShaderNodeParticleMeshEmitter::_update_textures);
+
+ if (mesh->is_connected(CoreStringNames::get_singleton()->changed, callable)) {
+ mesh->disconnect(CoreStringNames::get_singleton()->changed, callable);
+ }
+ }
+
+ mesh = p_mesh;
+
+ if (mesh.is_valid()) {
+ Callable callable = callable_mp(this, &VisualShaderNodeParticleMeshEmitter::_update_textures);
+
+ if (!mesh->is_connected(CoreStringNames::get_singleton()->changed, callable)) {
+ mesh->connect(CoreStringNames::get_singleton()->changed, callable);
+ }
+ }
+
+ emit_changed();
+}
+
+Ref<Mesh> VisualShaderNodeParticleMeshEmitter::get_mesh() const {
+ return mesh;
+}
+
+void VisualShaderNodeParticleMeshEmitter::set_use_all_surfaces(bool p_enabled) {
+ if (use_all_surfaces == p_enabled) {
+ return;
+ }
+ use_all_surfaces = p_enabled;
+ emit_changed();
+}
+
+bool VisualShaderNodeParticleMeshEmitter::is_use_all_surfaces() const {
+ return use_all_surfaces;
+}
+
+void VisualShaderNodeParticleMeshEmitter::set_surface_index(int p_surface_index) {
+ if (p_surface_index == surface_index || p_surface_index < 0 || p_surface_index >= max_surface_index) {
+ return;
+ }
+ surface_index = p_surface_index;
+ emit_changed();
+}
+
+int VisualShaderNodeParticleMeshEmitter::get_surface_index() const {
+ return surface_index;
+}
+
+Vector<StringName> VisualShaderNodeParticleMeshEmitter::get_editable_properties() const {
+ Vector<StringName> props = VisualShaderNodeParticleEmitter::get_editable_properties();
+
+ props.push_back("mesh");
+ props.push_back("use_all_surfaces");
+ if (!use_all_surfaces) {
+ props.push_back("surface_index");
+ }
+
+ return props;
+}
+
+Map<StringName, String> VisualShaderNodeParticleMeshEmitter::get_editable_properties_names() const {
+ Map<StringName, String> names = VisualShaderNodeParticleEmitter::get_editable_properties_names();
+
+ names.insert("mesh", TTR("Mesh"));
+ names.insert("use_all_surfaces", TTR("Use All Surfaces"));
+ if (!use_all_surfaces) {
+ names.insert("surface_index", TTR("Surface Index"));
+ }
+
+ return names;
+}
+
+void VisualShaderNodeParticleMeshEmitter::_bind_methods() {
+ ClassDB::bind_method(D_METHOD("set_mesh", "mesh"), &VisualShaderNodeParticleMeshEmitter::set_mesh);
+ ClassDB::bind_method(D_METHOD("get_mesh"), &VisualShaderNodeParticleMeshEmitter::get_mesh);
+ ClassDB::bind_method(D_METHOD("set_use_all_surfaces", "enabled"), &VisualShaderNodeParticleMeshEmitter::set_use_all_surfaces);
+ ClassDB::bind_method(D_METHOD("is_use_all_surfaces"), &VisualShaderNodeParticleMeshEmitter::is_use_all_surfaces);
+ ClassDB::bind_method(D_METHOD("set_surface_index", "surface_index"), &VisualShaderNodeParticleMeshEmitter::set_surface_index);
+ ClassDB::bind_method(D_METHOD("get_surface_index"), &VisualShaderNodeParticleMeshEmitter::get_surface_index);
+
+ ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "mesh", PROPERTY_HINT_RESOURCE_TYPE, "Mesh"), "set_mesh", "get_mesh");
+ ADD_PROPERTY(PropertyInfo(Variant::BOOL, "use_all_surfaces"), "set_use_all_surfaces", "is_use_all_surfaces");
+ ADD_PROPERTY(PropertyInfo(Variant::INT, "surface_index"), "set_surface_index", "get_surface_index");
+}
+
+VisualShaderNodeParticleMeshEmitter::VisualShaderNodeParticleMeshEmitter() {
+ connect(CoreStringNames::get_singleton()->changed, callable_mp(this, &VisualShaderNodeParticleMeshEmitter::_update_textures));
+
+ position_texture.instantiate();
+ normal_texture.instantiate();
+ color_texture.instantiate();
+ uv_texture.instantiate();
+ uv2_texture.instantiate();
+}
+
// VisualShaderNodeParticleMultiplyByAxisAngle
void VisualShaderNodeParticleMultiplyByAxisAngle::_bind_methods() {
@@ -265,7 +760,6 @@ bool VisualShaderNodeParticleMultiplyByAxisAngle::is_degrees_mode() const {
Vector<StringName> VisualShaderNodeParticleMultiplyByAxisAngle::get_editable_properties() const {
Vector<StringName> props;
props.push_back("degrees_mode");
- props.push_back("axis_amount");
return props;
}
diff --git a/scene/resources/visual_shader_particle_nodes.h b/scene/resources/visual_shader_particle_nodes.h
index b8bc7992cc..79459432f1 100644
--- a/scene/resources/visual_shader_particle_nodes.h
+++ b/scene/resources/visual_shader_particle_nodes.h
@@ -38,12 +38,23 @@
class VisualShaderNodeParticleEmitter : public VisualShaderNode {
GDCLASS(VisualShaderNodeParticleEmitter, VisualShaderNode);
+protected:
+ bool mode_2d = false;
+ static void _bind_methods();
+
public:
virtual int get_output_port_count() const override;
virtual PortType get_output_port_type(int p_port) const override;
virtual String get_output_port_name(int p_port) const override;
virtual bool has_output_port_preview(int p_port) const override;
+ void set_mode_2d(bool p_enabled);
+ bool is_mode_2d() const;
+
+ Vector<StringName> get_editable_properties() const override;
+ virtual Map<StringName, String> get_editable_properties_names() const override;
+ bool is_show_prop_names() const override;
+
VisualShaderNodeParticleEmitter();
};
@@ -95,6 +106,59 @@ public:
VisualShaderNodeParticleRingEmitter();
};
+class VisualShaderNodeParticleMeshEmitter : public VisualShaderNodeParticleEmitter {
+ GDCLASS(VisualShaderNodeParticleMeshEmitter, VisualShaderNodeParticleEmitter);
+ Ref<Mesh> mesh;
+ bool use_all_surfaces = true;
+ int surface_index = 0;
+ int max_surface_index = 0;
+
+ Ref<ImageTexture> position_texture;
+ Ref<ImageTexture> normal_texture;
+ Ref<ImageTexture> color_texture;
+ Ref<ImageTexture> uv_texture;
+ Ref<ImageTexture> uv2_texture;
+
+ String _generate_code(VisualShader::Type p_type, int p_id, const String *p_output_vars, int p_index, const String &p_texture_name, bool p_ignore_mode2d = false) const;
+
+ void _update_texture(const Vector<Vector2> &p_array, Ref<ImageTexture> &r_texture);
+ void _update_texture(const Vector<Vector3> &p_array, Ref<ImageTexture> &r_texture);
+ void _update_texture(const Vector<Color> &p_array, Ref<ImageTexture> &r_texture);
+ void _update_textures();
+
+protected:
+ static void _bind_methods();
+
+public:
+ virtual String get_caption() const override;
+
+ virtual int get_output_port_count() const override;
+ virtual PortType get_output_port_type(int p_port) const override;
+ virtual String get_output_port_name(int p_port) const override;
+
+ virtual int get_input_port_count() const override;
+ virtual PortType get_input_port_type(int p_port) const override;
+ virtual String get_input_port_name(int p_port) const override;
+
+ virtual String generate_global(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const override;
+ virtual String generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview = false) const override;
+
+ void set_mesh(Ref<Mesh> p_mesh);
+ Ref<Mesh> get_mesh() const;
+
+ void set_use_all_surfaces(bool p_enabled);
+ bool is_use_all_surfaces() const;
+
+ void set_surface_index(int p_surface_index);
+ int get_surface_index() const;
+
+ Vector<StringName> get_editable_properties() const override;
+ Map<StringName, String> get_editable_properties_names() const override;
+ Vector<VisualShader::DefaultTextureParam> get_default_texture_parameters(VisualShader::Type p_type, int p_id) const override;
+
+ VisualShaderNodeParticleMeshEmitter();
+};
+
class VisualShaderNodeParticleMultiplyByAxisAngle : public VisualShaderNode {
GDCLASS(VisualShaderNodeParticleMultiplyByAxisAngle, VisualShaderNode);
bool degrees_mode = true;
diff --git a/scene/resources/world_3d.cpp b/scene/resources/world_3d.cpp
index 42047f104f..0e1b343eac 100644
--- a/scene/resources/world_3d.cpp
+++ b/scene/resources/world_3d.cpp
@@ -144,9 +144,9 @@ World3D::World3D() {
PhysicsServer3D::get_singleton()->area_set_param(space, PhysicsServer3D::AREA_PARAM_GRAVITY, GLOBAL_DEF("physics/3d/default_gravity", 9.8));
PhysicsServer3D::get_singleton()->area_set_param(space, PhysicsServer3D::AREA_PARAM_GRAVITY_VECTOR, GLOBAL_DEF("physics/3d/default_gravity_vector", Vector3(0, -1, 0)));
PhysicsServer3D::get_singleton()->area_set_param(space, PhysicsServer3D::AREA_PARAM_LINEAR_DAMP, GLOBAL_DEF("physics/3d/default_linear_damp", 0.1));
- ProjectSettings::get_singleton()->set_custom_property_info("physics/3d/default_linear_damp", PropertyInfo(Variant::FLOAT, "physics/3d/default_linear_damp", PROPERTY_HINT_RANGE, "-1,100,0.001,or_greater"));
+ ProjectSettings::get_singleton()->set_custom_property_info("physics/3d/default_linear_damp", PropertyInfo(Variant::FLOAT, "physics/3d/default_linear_damp", PROPERTY_HINT_RANGE, "0,100,0.001,or_greater"));
PhysicsServer3D::get_singleton()->area_set_param(space, PhysicsServer3D::AREA_PARAM_ANGULAR_DAMP, GLOBAL_DEF("physics/3d/default_angular_damp", 0.1));
- ProjectSettings::get_singleton()->set_custom_property_info("physics/3d/default_angular_damp", PropertyInfo(Variant::FLOAT, "physics/3d/default_angular_damp", PROPERTY_HINT_RANGE, "-1,100,0.001,or_greater"));
+ ProjectSettings::get_singleton()->set_custom_property_info("physics/3d/default_angular_damp", PropertyInfo(Variant::FLOAT, "physics/3d/default_angular_damp", PROPERTY_HINT_RANGE, "0,100,0.001,or_greater"));
navigation_map = NavigationServer3D::get_singleton()->map_create();
NavigationServer3D::get_singleton()->map_set_active(navigation_map, true);
diff --git a/servers/audio_server.cpp b/servers/audio_server.cpp
index ab704c6f78..f7c8f0921c 100644
--- a/servers/audio_server.cpp
+++ b/servers/audio_server.cpp
@@ -762,7 +762,7 @@ void AudioServer::remove_bus(int p_index) {
lock();
bus_map.erase(buses[p_index]->name);
memdelete(buses[p_index]);
- buses.remove(p_index);
+ buses.remove_at(p_index);
unlock();
emit_signal(SNAME("bus_layout_changed"));
@@ -833,7 +833,7 @@ void AudioServer::move_bus(int p_bus, int p_to_pos) {
}
Bus *bus = buses[p_bus];
- buses.remove(p_bus);
+ buses.remove_at(p_bus);
if (p_to_pos == -1) {
buses.push_back(bus);
@@ -1026,7 +1026,7 @@ void AudioServer::remove_bus_effect(int p_bus, int p_effect) {
lock();
- buses[p_bus]->effects.remove(p_effect);
+ buses[p_bus]->effects.remove_at(p_effect);
_update_bus_effects(p_bus);
unlock();
@@ -1864,16 +1864,16 @@ bool AudioBusLayout::_get(const StringName &p_name, Variant &r_ret) const {
void AudioBusLayout::_get_property_list(List<PropertyInfo> *p_list) const {
for (int i = 0; i < buses.size(); i++) {
- p_list->push_back(PropertyInfo(Variant::STRING, "bus/" + itos(i) + "/name", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL));
- p_list->push_back(PropertyInfo(Variant::BOOL, "bus/" + itos(i) + "/solo", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL));
- p_list->push_back(PropertyInfo(Variant::BOOL, "bus/" + itos(i) + "/mute", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL));
- p_list->push_back(PropertyInfo(Variant::BOOL, "bus/" + itos(i) + "/bypass_fx", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL));
- p_list->push_back(PropertyInfo(Variant::FLOAT, "bus/" + itos(i) + "/volume_db", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL));
- p_list->push_back(PropertyInfo(Variant::FLOAT, "bus/" + itos(i) + "/send", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL));
+ p_list->push_back(PropertyInfo(Variant::STRING, "bus/" + itos(i) + "/name", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL));
+ p_list->push_back(PropertyInfo(Variant::BOOL, "bus/" + itos(i) + "/solo", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL));
+ p_list->push_back(PropertyInfo(Variant::BOOL, "bus/" + itos(i) + "/mute", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL));
+ p_list->push_back(PropertyInfo(Variant::BOOL, "bus/" + itos(i) + "/bypass_fx", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL));
+ p_list->push_back(PropertyInfo(Variant::FLOAT, "bus/" + itos(i) + "/volume_db", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL));
+ p_list->push_back(PropertyInfo(Variant::FLOAT, "bus/" + itos(i) + "/send", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL));
for (int j = 0; j < buses[i].effects.size(); j++) {
- p_list->push_back(PropertyInfo(Variant::OBJECT, "bus/" + itos(i) + "/effect/" + itos(j) + "/effect", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL));
- p_list->push_back(PropertyInfo(Variant::BOOL, "bus/" + itos(i) + "/effect/" + itos(j) + "/enabled", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL));
+ p_list->push_back(PropertyInfo(Variant::OBJECT, "bus/" + itos(i) + "/effect/" + itos(j) + "/effect", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL));
+ p_list->push_back(PropertyInfo(Variant::BOOL, "bus/" + itos(i) + "/effect/" + itos(j) + "/enabled", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL));
}
}
}
diff --git a/servers/camera_server.cpp b/servers/camera_server.cpp
index 6f506d0f7a..8391a2ee2e 100644
--- a/servers/camera_server.cpp
+++ b/servers/camera_server.cpp
@@ -124,7 +124,7 @@ void CameraServer::remove_feed(const Ref<CameraFeed> &p_feed) {
#endif
// remove it from our array, if this results in our feed being unreferenced it will be destroyed
- feeds.remove(i);
+ feeds.remove_at(i);
// let whomever is interested know
emit_signal(SNAME("camera_feed_removed"), feed_id);
diff --git a/servers/display_server.cpp b/servers/display_server.cpp
index 7bf5673663..8b5a965738 100644
--- a/servers/display_server.cpp
+++ b/servers/display_server.cpp
@@ -148,7 +148,7 @@ Point2i DisplayServer::mouse_get_position() const {
}
MouseButton DisplayServer::mouse_get_button_state() const {
- ERR_FAIL_V_MSG(MOUSE_BUTTON_NONE, "Mouse is not supported by this display server.");
+ ERR_FAIL_V_MSG(MouseButton::NONE, "Mouse is not supported by this display server.");
}
void DisplayServer::clipboard_set(const String &p_text) {
diff --git a/servers/display_server_headless.h b/servers/display_server_headless.h
index d9ee91084f..0837e41db8 100644
--- a/servers/display_server_headless.h
+++ b/servers/display_server_headless.h
@@ -65,7 +65,11 @@ public:
Vector<DisplayServer::WindowID> get_window_list() const override { return Vector<DisplayServer::WindowID>(); }
- WindowID get_window_at_screen_position(const Point2i &p_position) const override { return -1; }
+ WindowID create_sub_window(WindowMode p_mode, VSyncMode p_vsync_mode, uint32_t p_flags, const Rect2i &p_rect = Rect2i()) override { return 0; }
+ void show_window(WindowID p_id) override {}
+ void delete_sub_window(WindowID p_id) override {}
+
+ WindowID get_window_at_screen_position(const Point2i &p_position) const override { return 0; }
void window_attach_instance_id(ObjectID p_instance, WindowID p_window = MAIN_WINDOW_ID) override {}
ObjectID window_get_attached_instance_id(WindowID p_window = MAIN_WINDOW_ID) const override { return ObjectID(); }
@@ -93,7 +97,7 @@ public:
Size2i window_get_max_size(WindowID p_window = MAIN_WINDOW_ID) const override { return Size2i(); }
void window_set_min_size(const Size2i p_size, WindowID p_window = MAIN_WINDOW_ID) override {}
- Size2i window_get_min_size(WindowID p_window = MAIN_WINDOW_ID) const override { return Size2i(); };
+ Size2i window_get_min_size(WindowID p_window = MAIN_WINDOW_ID) const override { return Size2i(); }
void window_set_size(const Size2i p_size, WindowID p_window = MAIN_WINDOW_ID) override {}
Size2i window_get_size(WindowID p_window = MAIN_WINDOW_ID) const override { return Size2i(); }
@@ -102,10 +106,13 @@ public:
void window_set_mode(WindowMode p_mode, WindowID p_window = MAIN_WINDOW_ID) override {}
WindowMode window_get_mode(WindowID p_window = MAIN_WINDOW_ID) const override { return WINDOW_MODE_MINIMIZED; }
+ void window_set_vsync_mode(VSyncMode p_vsync_mode, WindowID p_window = MAIN_WINDOW_ID) override {}
+ VSyncMode window_get_vsync_mode(WindowID p_window) const override { return VSyncMode::VSYNC_ENABLED; }
+
bool window_is_maximize_allowed(WindowID p_window = MAIN_WINDOW_ID) const override { return false; }
void window_set_flag(WindowFlags p_flag, bool p_enabled, WindowID p_window = MAIN_WINDOW_ID) override {}
- virtual bool window_get_flag(WindowFlags p_flag, WindowID p_window = MAIN_WINDOW_ID) const override { return false; }
+ bool window_get_flag(WindowFlags p_flag, WindowID p_window = MAIN_WINDOW_ID) const override { return false; }
void window_request_attention(WindowID p_window = MAIN_WINDOW_ID) override {}
void window_move_to_foreground(WindowID p_window = MAIN_WINDOW_ID) override {}
@@ -114,6 +121,9 @@ public:
bool can_any_window_draw() const override { return false; }
+ void window_set_ime_active(const bool p_active, WindowID p_window = MAIN_WINDOW_ID) override {}
+ void window_set_ime_position(const Point2i &p_pos, WindowID p_window = MAIN_WINDOW_ID) override {}
+
void process_events() override {}
void set_icon(const Ref<Image> &p_icon) override {}
diff --git a/servers/physics_2d/godot_area_2d.cpp b/servers/physics_2d/godot_area_2d.cpp
index 7cb202dd1f..c4060615c9 100644
--- a/servers/physics_2d/godot_area_2d.cpp
+++ b/servers/physics_2d/godot_area_2d.cpp
@@ -77,16 +77,17 @@ void GodotArea2D::set_space(GodotSpace2D *p_space) {
_set_space(p_space);
}
-void GodotArea2D::set_monitor_callback(ObjectID p_id, const StringName &p_method) {
- if (p_id == monitor_callback_id) {
- monitor_callback_method = p_method;
+void GodotArea2D::set_monitor_callback(const Callable &p_callback) {
+ ObjectID id = p_callback.get_object_id();
+
+ if (id == monitor_callback.get_object_id()) {
+ monitor_callback = p_callback;
return;
}
_unregister_shapes();
- monitor_callback_id = p_id;
- monitor_callback_method = p_method;
+ monitor_callback = p_callback;
monitored_bodies.clear();
monitored_areas.clear();
@@ -98,16 +99,17 @@ void GodotArea2D::set_monitor_callback(ObjectID p_id, const StringName &p_method
}
}
-void GodotArea2D::set_area_monitor_callback(ObjectID p_id, const StringName &p_method) {
- if (p_id == area_monitor_callback_id) {
- area_monitor_callback_method = p_method;
+void GodotArea2D::set_area_monitor_callback(const Callable &p_callback) {
+ ObjectID id = p_callback.get_object_id();
+
+ if (id == area_monitor_callback.get_object_id()) {
+ area_monitor_callback = p_callback;
return;
}
_unregister_shapes();
- area_monitor_callback_id = p_id;
- area_monitor_callback_method = p_method;
+ area_monitor_callback = p_callback;
monitored_bodies.clear();
monitored_areas.clear();
@@ -119,18 +121,21 @@ void GodotArea2D::set_area_monitor_callback(ObjectID p_id, const StringName &p_m
}
}
-void GodotArea2D::set_space_override_mode(PhysicsServer2D::AreaSpaceOverrideMode p_mode) {
- bool do_override = p_mode != PhysicsServer2D::AREA_SPACE_OVERRIDE_DISABLED;
- if (do_override == (space_override_mode != PhysicsServer2D::AREA_SPACE_OVERRIDE_DISABLED)) {
+void GodotArea2D::_set_space_override_mode(PhysicsServer2D::AreaSpaceOverrideMode &r_mode, PhysicsServer2D::AreaSpaceOverrideMode p_new_mode) {
+ bool do_override = p_new_mode != PhysicsServer2D::AREA_SPACE_OVERRIDE_DISABLED;
+ if (do_override == (r_mode != PhysicsServer2D::AREA_SPACE_OVERRIDE_DISABLED)) {
return;
}
_unregister_shapes();
- space_override_mode = p_mode;
+ r_mode = p_new_mode;
_shape_changed();
}
void GodotArea2D::set_param(PhysicsServer2D::AreaParameter p_param, const Variant &p_value) {
switch (p_param) {
+ case PhysicsServer2D::AREA_PARAM_GRAVITY_OVERRIDE_MODE:
+ _set_space_override_mode(gravity_override_mode, (PhysicsServer2D::AreaSpaceOverrideMode)(int)p_value);
+ break;
case PhysicsServer2D::AREA_PARAM_GRAVITY:
gravity = p_value;
break;
@@ -146,9 +151,15 @@ void GodotArea2D::set_param(PhysicsServer2D::AreaParameter p_param, const Varian
case PhysicsServer2D::AREA_PARAM_GRAVITY_POINT_ATTENUATION:
point_attenuation = p_value;
break;
+ case PhysicsServer2D::AREA_PARAM_LINEAR_DAMP_OVERRIDE_MODE:
+ _set_space_override_mode(linear_damping_override_mode, (PhysicsServer2D::AreaSpaceOverrideMode)(int)p_value);
+ break;
case PhysicsServer2D::AREA_PARAM_LINEAR_DAMP:
linear_damp = p_value;
break;
+ case PhysicsServer2D::AREA_PARAM_ANGULAR_DAMP_OVERRIDE_MODE:
+ _set_space_override_mode(angular_damping_override_mode, (PhysicsServer2D::AreaSpaceOverrideMode)(int)p_value);
+ break;
case PhysicsServer2D::AREA_PARAM_ANGULAR_DAMP:
angular_damp = p_value;
break;
@@ -160,6 +171,8 @@ void GodotArea2D::set_param(PhysicsServer2D::AreaParameter p_param, const Varian
Variant GodotArea2D::get_param(PhysicsServer2D::AreaParameter p_param) const {
switch (p_param) {
+ case PhysicsServer2D::AREA_PARAM_GRAVITY_OVERRIDE_MODE:
+ return gravity_override_mode;
case PhysicsServer2D::AREA_PARAM_GRAVITY:
return gravity;
case PhysicsServer2D::AREA_PARAM_GRAVITY_VECTOR:
@@ -170,8 +183,12 @@ Variant GodotArea2D::get_param(PhysicsServer2D::AreaParameter p_param) const {
return gravity_distance_scale;
case PhysicsServer2D::AREA_PARAM_GRAVITY_POINT_ATTENUATION:
return point_attenuation;
+ case PhysicsServer2D::AREA_PARAM_LINEAR_DAMP_OVERRIDE_MODE:
+ return linear_damping_override_mode;
case PhysicsServer2D::AREA_PARAM_LINEAR_DAMP:
return linear_damp;
+ case PhysicsServer2D::AREA_PARAM_ANGULAR_DAMP_OVERRIDE_MODE:
+ return angular_damping_override_mode;
case PhysicsServer2D::AREA_PARAM_ANGULAR_DAMP:
return angular_damp;
case PhysicsServer2D::AREA_PARAM_PRIORITY:
@@ -196,80 +213,79 @@ void GodotArea2D::set_monitorable(bool p_monitorable) {
monitorable = p_monitorable;
_set_static(!monitorable);
+ _shapes_changed();
}
void GodotArea2D::call_queries() {
- if (monitor_callback_id.is_valid() && !monitored_bodies.is_empty()) {
- Variant res[5];
- Variant *resptr[5];
- for (int i = 0; i < 5; i++) {
- resptr[i] = &res[i];
- }
+ if (!monitor_callback.is_null() && !monitored_bodies.is_empty()) {
+ if (monitor_callback.is_valid()) {
+ Variant res[5];
+ Variant *resptr[5];
+ for (int i = 0; i < 5; i++) {
+ resptr[i] = &res[i];
+ }
- Object *obj = ObjectDB::get_instance(monitor_callback_id);
- if (!obj) {
- monitored_bodies.clear();
- monitor_callback_id = ObjectID();
- return;
- }
+ for (Map<BodyKey, BodyState>::Element *E = monitored_bodies.front(); E;) {
+ if (E->get().state == 0) { // Nothing happened
+ Map<BodyKey, BodyState>::Element *next = E->next();
+ monitored_bodies.erase(E);
+ E = next;
+ continue;
+ }
+
+ res[0] = E->get().state > 0 ? PhysicsServer2D::AREA_BODY_ADDED : PhysicsServer2D::AREA_BODY_REMOVED;
+ res[1] = E->key().rid;
+ res[2] = E->key().instance_id;
+ res[3] = E->key().body_shape;
+ res[4] = E->key().area_shape;
- for (Map<BodyKey, BodyState>::Element *E = monitored_bodies.front(); E;) {
- if (E->get().state == 0) { // Nothing happened
Map<BodyKey, BodyState>::Element *next = E->next();
monitored_bodies.erase(E);
E = next;
- continue;
- }
- res[0] = E->get().state > 0 ? PhysicsServer2D::AREA_BODY_ADDED : PhysicsServer2D::AREA_BODY_REMOVED;
- res[1] = E->key().rid;
- res[2] = E->key().instance_id;
- res[3] = E->key().body_shape;
- res[4] = E->key().area_shape;
-
- Map<BodyKey, BodyState>::Element *next = E->next();
- monitored_bodies.erase(E);
- E = next;
-
- Callable::CallError ce;
- obj->call(monitor_callback_method, (const Variant **)resptr, 5, ce);
+ Callable::CallError ce;
+ Variant ret;
+ monitor_callback.call((const Variant **)resptr, 5, ret, ce);
+ }
+ } else {
+ monitored_bodies.clear();
+ monitor_callback = Callable();
}
}
- if (area_monitor_callback_id.is_valid() && !monitored_areas.is_empty()) {
- Variant res[5];
- Variant *resptr[5];
- for (int i = 0; i < 5; i++) {
- resptr[i] = &res[i];
- }
+ if (!area_monitor_callback.is_null() && !monitored_areas.is_empty()) {
+ if (area_monitor_callback.is_valid()) {
+ Variant res[5];
+ Variant *resptr[5];
+ for (int i = 0; i < 5; i++) {
+ resptr[i] = &res[i];
+ }
- Object *obj = ObjectDB::get_instance(area_monitor_callback_id);
- if (!obj) {
- monitored_areas.clear();
- area_monitor_callback_id = ObjectID();
- return;
- }
+ for (Map<BodyKey, BodyState>::Element *E = monitored_areas.front(); E;) {
+ if (E->get().state == 0) { // Nothing happened
+ Map<BodyKey, BodyState>::Element *next = E->next();
+ monitored_areas.erase(E);
+ E = next;
+ continue;
+ }
+
+ res[0] = E->get().state > 0 ? PhysicsServer2D::AREA_BODY_ADDED : PhysicsServer2D::AREA_BODY_REMOVED;
+ res[1] = E->key().rid;
+ res[2] = E->key().instance_id;
+ res[3] = E->key().body_shape;
+ res[4] = E->key().area_shape;
- for (Map<BodyKey, BodyState>::Element *E = monitored_areas.front(); E;) {
- if (E->get().state == 0) { // Nothing happened
Map<BodyKey, BodyState>::Element *next = E->next();
monitored_areas.erase(E);
E = next;
- continue;
- }
-
- res[0] = E->get().state > 0 ? PhysicsServer2D::AREA_BODY_ADDED : PhysicsServer2D::AREA_BODY_REMOVED;
- res[1] = E->key().rid;
- res[2] = E->key().instance_id;
- res[3] = E->key().body_shape;
- res[4] = E->key().area_shape;
-
- Map<BodyKey, BodyState>::Element *next = E->next();
- monitored_areas.erase(E);
- E = next;
- Callable::CallError ce;
- obj->call(area_monitor_callback_method, (const Variant **)resptr, 5, ce);
+ Callable::CallError ce;
+ Variant ret;
+ area_monitor_callback.call((const Variant **)resptr, 5, ret, ce);
+ }
+ } else {
+ monitored_areas.clear();
+ area_monitor_callback = Callable();
}
}
}
diff --git a/servers/physics_2d/godot_area_2d.h b/servers/physics_2d/godot_area_2d.h
index daa03d39e3..699c1c1bc8 100644
--- a/servers/physics_2d/godot_area_2d.h
+++ b/servers/physics_2d/godot_area_2d.h
@@ -41,7 +41,10 @@ class GodotBody2D;
class GodotConstraint2D;
class GodotArea2D : public GodotCollisionObject2D {
- PhysicsServer2D::AreaSpaceOverrideMode space_override_mode = PhysicsServer2D::AREA_SPACE_OVERRIDE_DISABLED;
+ PhysicsServer2D::AreaSpaceOverrideMode gravity_override_mode = PhysicsServer2D::AREA_SPACE_OVERRIDE_DISABLED;
+ PhysicsServer2D::AreaSpaceOverrideMode linear_damping_override_mode = PhysicsServer2D::AREA_SPACE_OVERRIDE_DISABLED;
+ PhysicsServer2D::AreaSpaceOverrideMode angular_damping_override_mode = PhysicsServer2D::AREA_SPACE_OVERRIDE_DISABLED;
+
real_t gravity = 9.80665;
Vector2 gravity_vector = Vector2(0, -1);
bool gravity_is_point = false;
@@ -52,11 +55,9 @@ class GodotArea2D : public GodotCollisionObject2D {
int priority = 0;
bool monitorable = false;
- ObjectID monitor_callback_id;
- StringName monitor_callback_method;
+ Callable monitor_callback;
- ObjectID area_monitor_callback_id;
- StringName area_monitor_callback_method;
+ Callable area_monitor_callback;
SelfList<GodotArea2D> monitor_query_list;
SelfList<GodotArea2D> moved_list;
@@ -98,12 +99,14 @@ class GodotArea2D : public GodotCollisionObject2D {
virtual void _shapes_changed();
void _queue_monitor_update();
+ void _set_space_override_mode(PhysicsServer2D::AreaSpaceOverrideMode &r_mode, PhysicsServer2D::AreaSpaceOverrideMode p_new_mode);
+
public:
- void set_monitor_callback(ObjectID p_id, const StringName &p_method);
- _FORCE_INLINE_ bool has_monitor_callback() const { return monitor_callback_id.is_valid(); }
+ void set_monitor_callback(const Callable &p_callback);
+ _FORCE_INLINE_ bool has_monitor_callback() const { return !monitor_callback.is_null(); }
- void set_area_monitor_callback(ObjectID p_id, const StringName &p_method);
- _FORCE_INLINE_ bool has_area_monitor_callback() const { return area_monitor_callback_id.is_valid(); }
+ void set_area_monitor_callback(const Callable &p_callback);
+ _FORCE_INLINE_ bool has_area_monitor_callback() const { return !area_monitor_callback.is_null(); }
_FORCE_INLINE_ void add_body_to_query(GodotBody2D *p_body, uint32_t p_body_shape, uint32_t p_area_shape);
_FORCE_INLINE_ void remove_body_from_query(GodotBody2D *p_body, uint32_t p_body_shape, uint32_t p_area_shape);
@@ -114,9 +117,6 @@ public:
void set_param(PhysicsServer2D::AreaParameter p_param, const Variant &p_value);
Variant get_param(PhysicsServer2D::AreaParameter p_param) const;
- void set_space_override_mode(PhysicsServer2D::AreaSpaceOverrideMode p_mode);
- PhysicsServer2D::AreaSpaceOverrideMode get_space_override_mode() const { return space_override_mode; }
-
_FORCE_INLINE_ void set_gravity(real_t p_gravity) { gravity = p_gravity; }
_FORCE_INLINE_ real_t get_gravity() const { return gravity; }
diff --git a/servers/physics_2d/godot_area_pair_2d.cpp b/servers/physics_2d/godot_area_pair_2d.cpp
index fdb95aa262..bde22aab11 100644
--- a/servers/physics_2d/godot_area_pair_2d.cpp
+++ b/servers/physics_2d/godot_area_pair_2d.cpp
@@ -38,10 +38,18 @@ bool GodotAreaPair2D::setup(real_t p_step) {
}
process_collision = false;
+ has_space_override = false;
if (result != colliding) {
- if (area->get_space_override_mode() != PhysicsServer2D::AREA_SPACE_OVERRIDE_DISABLED) {
- process_collision = true;
- } else if (area->has_monitor_callback()) {
+ if ((int)area->get_param(PhysicsServer2D::AREA_PARAM_GRAVITY_OVERRIDE_MODE) != PhysicsServer2D::AREA_SPACE_OVERRIDE_DISABLED) {
+ has_space_override = true;
+ } else if ((int)area->get_param(PhysicsServer2D::AREA_PARAM_LINEAR_DAMP_OVERRIDE_MODE) != PhysicsServer2D::AREA_SPACE_OVERRIDE_DISABLED) {
+ has_space_override = true;
+ } else if ((int)area->get_param(PhysicsServer2D::AREA_PARAM_ANGULAR_DAMP_OVERRIDE_MODE) != PhysicsServer2D::AREA_SPACE_OVERRIDE_DISABLED) {
+ has_space_override = true;
+ }
+ process_collision = has_space_override;
+
+ if (area->has_monitor_callback()) {
process_collision = true;
}
@@ -57,7 +65,7 @@ bool GodotAreaPair2D::pre_solve(real_t p_step) {
}
if (colliding) {
- if (area->get_space_override_mode() != PhysicsServer2D::AREA_SPACE_OVERRIDE_DISABLED) {
+ if (has_space_override) {
body->add_area(area);
}
@@ -65,7 +73,7 @@ bool GodotAreaPair2D::pre_solve(real_t p_step) {
area->add_body_to_query(body, body_shape, area_shape);
}
} else {
- if (area->get_space_override_mode() != PhysicsServer2D::AREA_SPACE_OVERRIDE_DISABLED) {
+ if (has_space_override) {
body->remove_area(area);
}
@@ -95,7 +103,7 @@ GodotAreaPair2D::GodotAreaPair2D(GodotBody2D *p_body, int p_body_shape, GodotAre
GodotAreaPair2D::~GodotAreaPair2D() {
if (colliding) {
- if (area->get_space_override_mode() != PhysicsServer2D::AREA_SPACE_OVERRIDE_DISABLED) {
+ if (has_space_override) {
body->remove_area(area);
}
if (area->has_monitor_callback()) {
@@ -120,7 +128,7 @@ bool GodotArea2Pair2D::setup(real_t p_step) {
process_collision_a = false;
if (result_a != colliding_a) {
- if (area_a->has_area_monitor_callback() && area_b->is_monitorable()) {
+ if (area_a->has_area_monitor_callback() && area_b_monitorable) {
process_collision_a = true;
process_collision = true;
}
@@ -129,7 +137,7 @@ bool GodotArea2Pair2D::setup(real_t p_step) {
process_collision_b = false;
if (result_b != colliding_b) {
- if (area_b->has_area_monitor_callback() && area_a->is_monitorable()) {
+ if (area_b->has_area_monitor_callback() && area_a_monitorable) {
process_collision_b = true;
process_collision = true;
}
@@ -168,19 +176,21 @@ GodotArea2Pair2D::GodotArea2Pair2D(GodotArea2D *p_area_a, int p_shape_a, GodotAr
area_b = p_area_b;
shape_a = p_shape_a;
shape_b = p_shape_b;
+ area_a_monitorable = area_a->is_monitorable();
+ area_b_monitorable = area_b->is_monitorable();
area_a->add_constraint(this);
area_b->add_constraint(this);
}
GodotArea2Pair2D::~GodotArea2Pair2D() {
if (colliding_a) {
- if (area_a->has_area_monitor_callback()) {
+ if (area_a->has_area_monitor_callback() && area_b_monitorable) {
area_a->remove_area_from_query(area_b, shape_b, shape_a);
}
}
if (colliding_b) {
- if (area_b->has_area_monitor_callback()) {
+ if (area_b->has_area_monitor_callback() && area_a_monitorable) {
area_b->remove_area_from_query(area_a, shape_a, shape_b);
}
}
diff --git a/servers/physics_2d/godot_area_pair_2d.h b/servers/physics_2d/godot_area_pair_2d.h
index 7a9677f714..f1290a27d0 100644
--- a/servers/physics_2d/godot_area_pair_2d.h
+++ b/servers/physics_2d/godot_area_pair_2d.h
@@ -41,6 +41,7 @@ class GodotAreaPair2D : public GodotConstraint2D {
int body_shape = 0;
int area_shape = 0;
bool colliding = false;
+ bool has_space_override = false;
bool process_collision = false;
public:
@@ -61,6 +62,8 @@ class GodotArea2Pair2D : public GodotConstraint2D {
bool colliding_b = false;
bool process_collision_a = false;
bool process_collision_b = false;
+ bool area_a_monitorable;
+ bool area_b_monitorable;
public:
virtual bool setup(real_t p_step) override;
diff --git a/servers/physics_2d/godot_body_2d.cpp b/servers/physics_2d/godot_body_2d.cpp
index 56f191c203..44da5d4f3b 100644
--- a/servers/physics_2d/godot_body_2d.cpp
+++ b/servers/physics_2d/godot_body_2d.cpp
@@ -185,8 +185,19 @@ void GodotBody2D::set_param(PhysicsServer2D::BodyParameter p_param, const Varian
_update_transform_dependent();
} break;
case PhysicsServer2D::BODY_PARAM_GRAVITY_SCALE: {
+ if (Math::is_zero_approx(gravity_scale)) {
+ wakeup();
+ }
gravity_scale = p_value;
} break;
+ case PhysicsServer2D::BODY_PARAM_LINEAR_DAMP_MODE: {
+ int mode_value = p_value;
+ linear_damp_mode = (PhysicsServer2D::BodyDampMode)mode_value;
+ } break;
+ case PhysicsServer2D::BODY_PARAM_ANGULAR_DAMP_MODE: {
+ int mode_value = p_value;
+ angular_damp_mode = (PhysicsServer2D::BodyDampMode)mode_value;
+ } break;
case PhysicsServer2D::BODY_PARAM_LINEAR_DAMP: {
linear_damp = p_value;
} break;
@@ -213,11 +224,17 @@ Variant GodotBody2D::get_param(PhysicsServer2D::BodyParameter p_param) const {
return inertia;
}
case PhysicsServer2D::BODY_PARAM_CENTER_OF_MASS: {
- return center_of_mass;
+ return center_of_mass_local;
}
case PhysicsServer2D::BODY_PARAM_GRAVITY_SCALE: {
return gravity_scale;
}
+ case PhysicsServer2D::BODY_PARAM_LINEAR_DAMP_MODE: {
+ return linear_damp_mode;
+ }
+ case PhysicsServer2D::BODY_PARAM_ANGULAR_DAMP_MODE: {
+ return angular_damp_mode;
+ }
case PhysicsServer2D::BODY_PARAM_LINEAR_DAMP: {
return linear_damp;
}
@@ -396,15 +413,6 @@ void GodotBody2D::set_space(GodotSpace2D *p_space) {
}
}
-void GodotBody2D::_compute_area_gravity_and_damping(const GodotArea2D *p_area) {
- Vector2 area_gravity;
- p_area->compute_gravity(get_transform().get_origin(), area_gravity);
- gravity += area_gravity;
-
- area_linear_damp += p_area->get_linear_damp();
- area_angular_damp += p_area->get_angular_damp();
-}
-
void GodotBody2D::_update_transform_dependent() {
center_of_mass = get_transform().basis_xform(center_of_mass_local);
}
@@ -414,61 +422,135 @@ void GodotBody2D::integrate_forces(real_t p_step) {
return;
}
- GodotArea2D *def_area = get_space()->get_default_area();
- // GodotArea2D *damp_area = def_area;
- ERR_FAIL_COND(!def_area);
+ ERR_FAIL_COND(!get_space());
int ac = areas.size();
+
+ bool gravity_done = false;
+ bool linear_damp_done = false;
+ bool angular_damp_done = false;
+
bool stopped = false;
+
gravity = Vector2(0, 0);
- area_angular_damp = 0;
- area_linear_damp = 0;
+
+ total_linear_damp = 0.0;
+ total_angular_damp = 0.0;
+
+ // Combine gravity and damping from overlapping areas in priority order.
if (ac) {
areas.sort();
const AreaCMP *aa = &areas[0];
- // damp_area = aa[ac-1].area;
for (int i = ac - 1; i >= 0 && !stopped; i--) {
- PhysicsServer2D::AreaSpaceOverrideMode mode = aa[i].area->get_space_override_mode();
- switch (mode) {
- case PhysicsServer2D::AREA_SPACE_OVERRIDE_COMBINE:
- case PhysicsServer2D::AREA_SPACE_OVERRIDE_COMBINE_REPLACE: {
- _compute_area_gravity_and_damping(aa[i].area);
- stopped = mode == PhysicsServer2D::AREA_SPACE_OVERRIDE_COMBINE_REPLACE;
- } break;
- case PhysicsServer2D::AREA_SPACE_OVERRIDE_REPLACE:
- case PhysicsServer2D::AREA_SPACE_OVERRIDE_REPLACE_COMBINE: {
- gravity = Vector2(0, 0);
- area_angular_damp = 0;
- area_linear_damp = 0;
- _compute_area_gravity_and_damping(aa[i].area);
- stopped = mode == PhysicsServer2D::AREA_SPACE_OVERRIDE_REPLACE;
- } break;
- default: {
+ if (!gravity_done) {
+ PhysicsServer2D::AreaSpaceOverrideMode area_gravity_mode = (PhysicsServer2D::AreaSpaceOverrideMode)(int)aa[i].area->get_param(PhysicsServer2D::AREA_PARAM_GRAVITY_OVERRIDE_MODE);
+ if (area_gravity_mode != PhysicsServer2D::AREA_SPACE_OVERRIDE_DISABLED) {
+ Vector2 area_gravity;
+ aa[i].area->compute_gravity(get_transform().get_origin(), area_gravity);
+ switch (area_gravity_mode) {
+ case PhysicsServer2D::AREA_SPACE_OVERRIDE_COMBINE:
+ case PhysicsServer2D::AREA_SPACE_OVERRIDE_COMBINE_REPLACE: {
+ gravity += area_gravity;
+ gravity_done = area_gravity_mode == PhysicsServer2D::AREA_SPACE_OVERRIDE_COMBINE_REPLACE;
+ } break;
+ case PhysicsServer2D::AREA_SPACE_OVERRIDE_REPLACE:
+ case PhysicsServer2D::AREA_SPACE_OVERRIDE_REPLACE_COMBINE: {
+ gravity = area_gravity;
+ gravity_done = area_gravity_mode == PhysicsServer2D::AREA_SPACE_OVERRIDE_REPLACE;
+ } break;
+ default: {
+ }
+ }
+ }
+ }
+ if (!linear_damp_done) {
+ PhysicsServer2D::AreaSpaceOverrideMode area_linear_damp_mode = (PhysicsServer2D::AreaSpaceOverrideMode)(int)aa[i].area->get_param(PhysicsServer2D::AREA_PARAM_LINEAR_DAMP_OVERRIDE_MODE);
+ if (area_linear_damp_mode != PhysicsServer2D::AREA_SPACE_OVERRIDE_DISABLED) {
+ real_t area_linear_damp = aa[i].area->get_linear_damp();
+ switch (area_linear_damp_mode) {
+ case PhysicsServer2D::AREA_SPACE_OVERRIDE_COMBINE:
+ case PhysicsServer2D::AREA_SPACE_OVERRIDE_COMBINE_REPLACE: {
+ total_linear_damp += area_linear_damp;
+ linear_damp_done = area_linear_damp_mode == PhysicsServer2D::AREA_SPACE_OVERRIDE_COMBINE_REPLACE;
+ } break;
+ case PhysicsServer2D::AREA_SPACE_OVERRIDE_REPLACE:
+ case PhysicsServer2D::AREA_SPACE_OVERRIDE_REPLACE_COMBINE: {
+ total_linear_damp = area_linear_damp;
+ linear_damp_done = area_linear_damp_mode == PhysicsServer2D::AREA_SPACE_OVERRIDE_REPLACE;
+ } break;
+ default: {
+ }
+ }
}
}
+ if (!angular_damp_done) {
+ PhysicsServer2D::AreaSpaceOverrideMode area_angular_damp_mode = (PhysicsServer2D::AreaSpaceOverrideMode)(int)aa[i].area->get_param(PhysicsServer2D::AREA_PARAM_ANGULAR_DAMP_OVERRIDE_MODE);
+ if (area_angular_damp_mode != PhysicsServer2D::AREA_SPACE_OVERRIDE_DISABLED) {
+ real_t area_angular_damp = aa[i].area->get_angular_damp();
+ switch (area_angular_damp_mode) {
+ case PhysicsServer2D::AREA_SPACE_OVERRIDE_COMBINE:
+ case PhysicsServer2D::AREA_SPACE_OVERRIDE_COMBINE_REPLACE: {
+ total_angular_damp += area_angular_damp;
+ angular_damp_done = area_angular_damp_mode == PhysicsServer2D::AREA_SPACE_OVERRIDE_COMBINE_REPLACE;
+ } break;
+ case PhysicsServer2D::AREA_SPACE_OVERRIDE_REPLACE:
+ case PhysicsServer2D::AREA_SPACE_OVERRIDE_REPLACE_COMBINE: {
+ total_angular_damp = area_angular_damp;
+ angular_damp_done = area_angular_damp_mode == PhysicsServer2D::AREA_SPACE_OVERRIDE_REPLACE;
+ } break;
+ default: {
+ }
+ }
+ }
+ }
+ stopped = gravity_done && linear_damp_done && angular_damp_done;
}
}
+
+ // Add default gravity and damping from space area.
if (!stopped) {
- _compute_area_gravity_and_damping(def_area);
+ GodotArea2D *default_area = get_space()->get_default_area();
+ ERR_FAIL_COND(!default_area);
+
+ if (!gravity_done) {
+ Vector2 default_gravity;
+ default_area->compute_gravity(get_transform().get_origin(), default_gravity);
+ gravity += default_gravity;
+ }
+
+ if (!linear_damp_done) {
+ total_linear_damp += default_area->get_linear_damp();
+ }
+
+ if (!angular_damp_done) {
+ total_angular_damp += default_area->get_angular_damp();
+ }
}
- gravity *= gravity_scale;
- // If less than 0, override dampenings with that of the Body2D
- if (angular_damp >= 0) {
- area_angular_damp = angular_damp;
+ // Override linear damping with body's value.
+ switch (linear_damp_mode) {
+ case PhysicsServer2D::BODY_DAMP_MODE_COMBINE: {
+ total_linear_damp += linear_damp;
+ } break;
+ case PhysicsServer2D::BODY_DAMP_MODE_REPLACE: {
+ total_linear_damp = linear_damp;
+ } break;
}
- /*
- else
- area_angular_damp=damp_area->get_angular_damp();
- */
- if (linear_damp >= 0) {
- area_linear_damp = linear_damp;
+ // Override angular damping with body's value.
+ switch (angular_damp_mode) {
+ case PhysicsServer2D::BODY_DAMP_MODE_COMBINE: {
+ total_angular_damp += angular_damp;
+ } break;
+ case PhysicsServer2D::BODY_DAMP_MODE_REPLACE: {
+ total_angular_damp = angular_damp;
+ } break;
}
- /*
- else
- area_linear_damp=damp_area->get_linear_damp();
- */
+
+ gravity *= gravity_scale;
+
+ prev_linear_velocity = linear_velocity;
+ prev_angular_velocity = angular_velocity;
Vector2 motion;
bool do_motion = false;
@@ -483,13 +565,6 @@ void GodotBody2D::integrate_forces(real_t p_step) {
do_motion = true;
- /*
- for(int i=0;i<get_shape_count();i++) {
- set_shape_kinematic_advance(i,Vector2());
- set_shape_kinematic_retreat(i,0);
- }
- */
-
} else {
if (!omit_force_integration) {
//overridden by direct state query
@@ -498,13 +573,13 @@ void GodotBody2D::integrate_forces(real_t p_step) {
force += applied_force;
real_t torque = applied_torque;
- real_t damp = 1.0 - p_step * area_linear_damp;
+ real_t damp = 1.0 - p_step * total_linear_damp;
if (damp < 0) { // reached zero in the given time
damp = 0;
}
- real_t angular_damp = 1.0 - p_step * area_angular_damp;
+ real_t angular_damp = 1.0 - p_step * total_angular_damp;
if (angular_damp < 0) { // reached zero in the given time
angular_damp = 0;
@@ -523,8 +598,6 @@ void GodotBody2D::integrate_forces(real_t p_step) {
}
}
- //motion=linear_velocity*p_step;
-
biased_angular_velocity = 0;
biased_linear_velocity = Vector2();
@@ -532,8 +605,6 @@ void GodotBody2D::integrate_forces(real_t p_step) {
_update_shapes_with_motion(motion);
}
- // damp_area=nullptr; // clear the area, so it is set in the next frame
- def_area = nullptr; // clear the area, so it is set in the next frame
contact_count = 0;
}
diff --git a/servers/physics_2d/godot_body_2d.h b/servers/physics_2d/godot_body_2d.h
index 5fce362fa7..ba4c39737a 100644
--- a/servers/physics_2d/godot_body_2d.h
+++ b/servers/physics_2d/godot_body_2d.h
@@ -50,11 +50,21 @@ class GodotBody2D : public GodotCollisionObject2D {
Vector2 linear_velocity;
real_t angular_velocity = 0.0;
+ Vector2 prev_linear_velocity;
+ real_t prev_angular_velocity = 0.0;
+
Vector2 constant_linear_velocity;
real_t constant_angular_velocity = 0.0;
- real_t linear_damp = -1.0;
- real_t angular_damp = -1.0;
+ PhysicsServer2D::BodyDampMode linear_damp_mode = PhysicsServer2D::BODY_DAMP_MODE_COMBINE;
+ PhysicsServer2D::BodyDampMode angular_damp_mode = PhysicsServer2D::BODY_DAMP_MODE_COMBINE;
+
+ real_t linear_damp = 0.0;
+ real_t angular_damp = 0.0;
+
+ real_t total_linear_damp = 0.0;
+ real_t total_angular_damp = 0.0;
+
real_t gravity_scale = 1.0;
real_t bounce = 0.0;
@@ -73,8 +83,6 @@ class GodotBody2D : public GodotCollisionObject2D {
bool calculate_center_of_mass = true;
Vector2 gravity;
- real_t area_linear_damp = 0.0;
- real_t area_angular_damp = 0.0;
real_t still_time = 0.0;
@@ -140,8 +148,6 @@ class GodotBody2D : public GodotCollisionObject2D {
uint64_t island_step = 0;
- void _compute_area_gravity_and_damping(const GodotArea2D *p_area);
-
void _update_transform_dependent();
friend class GodotPhysicsDirectBodyState2D; // i give up, too many functions to expose
@@ -166,7 +172,7 @@ public:
if (index > -1) {
areas.write[index].refCount -= 1;
if (areas[index].refCount < 1) {
- areas.remove(index);
+ areas.remove_at(index);
}
}
}
@@ -206,6 +212,9 @@ public:
_FORCE_INLINE_ void set_angular_velocity(real_t p_velocity) { angular_velocity = p_velocity; }
_FORCE_INLINE_ real_t get_angular_velocity() const { return angular_velocity; }
+ _FORCE_INLINE_ Vector2 get_prev_linear_velocity() const { return prev_linear_velocity; }
+ _FORCE_INLINE_ real_t get_prev_angular_velocity() const { return prev_angular_velocity; }
+
_FORCE_INLINE_ void set_biased_linear_velocity(const Vector2 &p_velocity) { biased_linear_velocity = p_velocity; }
_FORCE_INLINE_ Vector2 get_biased_linear_velocity() const { return biased_linear_velocity; }
@@ -276,14 +285,12 @@ public:
void update_mass_properties();
void reset_mass_properties();
- _FORCE_INLINE_ Vector2 get_center_of_mass() const { return center_of_mass; }
+ _FORCE_INLINE_ const Vector2 &get_center_of_mass() const { return center_of_mass; }
+ _FORCE_INLINE_ const Vector2 &get_center_of_mass_local() const { return center_of_mass_local; }
_FORCE_INLINE_ real_t get_inv_mass() const { return _inv_mass; }
_FORCE_INLINE_ real_t get_inv_inertia() const { return _inv_inertia; }
_FORCE_INLINE_ real_t get_friction() const { return friction; }
- _FORCE_INLINE_ Vector2 get_gravity() const { return gravity; }
_FORCE_INLINE_ real_t get_bounce() const { return bounce; }
- _FORCE_INLINE_ real_t get_linear_damp() const { return linear_damp; }
- _FORCE_INLINE_ real_t get_angular_damp() const { return angular_damp; }
void integrate_forces(real_t p_step);
void integrate_velocities(real_t p_step);
diff --git a/servers/physics_2d/godot_body_direct_state_2d.cpp b/servers/physics_2d/godot_body_direct_state_2d.cpp
index 300c302c79..9c9bd56268 100644
--- a/servers/physics_2d/godot_body_direct_state_2d.cpp
+++ b/servers/physics_2d/godot_body_direct_state_2d.cpp
@@ -39,17 +39,21 @@ Vector2 GodotPhysicsDirectBodyState2D::get_total_gravity() const {
}
real_t GodotPhysicsDirectBodyState2D::get_total_angular_damp() const {
- return body->area_angular_damp;
+ return body->total_angular_damp;
}
real_t GodotPhysicsDirectBodyState2D::get_total_linear_damp() const {
- return body->area_linear_damp;
+ return body->total_linear_damp;
}
Vector2 GodotPhysicsDirectBodyState2D::get_center_of_mass() const {
return body->get_center_of_mass();
}
+Vector2 GodotPhysicsDirectBodyState2D::get_center_of_mass_local() const {
+ return body->get_center_of_mass_local();
+}
+
real_t GodotPhysicsDirectBodyState2D::get_inverse_mass() const {
return body->get_inv_mass();
}
diff --git a/servers/physics_2d/godot_body_direct_state_2d.h b/servers/physics_2d/godot_body_direct_state_2d.h
index 2f3e8e5095..ff25205d52 100644
--- a/servers/physics_2d/godot_body_direct_state_2d.h
+++ b/servers/physics_2d/godot_body_direct_state_2d.h
@@ -46,6 +46,7 @@ public:
virtual real_t get_total_linear_damp() const override;
virtual Vector2 get_center_of_mass() const override;
+ virtual Vector2 get_center_of_mass_local() const override;
virtual real_t get_inverse_mass() const override;
virtual real_t get_inverse_inertia() const override;
diff --git a/servers/physics_2d/godot_body_pair_2d.cpp b/servers/physics_2d/godot_body_pair_2d.cpp
index 97eeefbfe6..67b0f21456 100644
--- a/servers/physics_2d/godot_body_pair_2d.cpp
+++ b/servers/physics_2d/godot_body_pair_2d.cpp
@@ -32,7 +32,6 @@
#include "godot_collision_solver_2d.h"
#include "godot_space_2d.h"
-#define POSITION_CORRECTION
#define ACCUMULATE_IMPULSES
void GodotBodyPair2D::_add_contact(const Vector2 &p_point_A, const Vector2 &p_point_B, void *p_self) {
@@ -453,9 +452,9 @@ bool GodotBodyPair2D::pre_solve(real_t p_step) {
c.bounce = combine_bounce(A, B);
if (c.bounce) {
- Vector2 crA(-A->get_angular_velocity() * c.rA.y, A->get_angular_velocity() * c.rA.x);
- Vector2 crB(-B->get_angular_velocity() * c.rB.y, B->get_angular_velocity() * c.rB.x);
- Vector2 dv = B->get_linear_velocity() + crB - A->get_linear_velocity() - crA;
+ Vector2 crA(-A->get_prev_angular_velocity() * c.rA.y, A->get_prev_angular_velocity() * c.rA.x);
+ Vector2 crB(-B->get_prev_angular_velocity() * c.rB.y, B->get_prev_angular_velocity() * c.rB.x);
+ Vector2 dv = B->get_prev_linear_velocity() + crB - A->get_prev_linear_velocity() - crA;
c.bounce = c.bounce * dv.dot(c.normal);
}
diff --git a/servers/physics_2d/godot_collision_object_2d.cpp b/servers/physics_2d/godot_collision_object_2d.cpp
index 3d4ebbedcd..719d9c874a 100644
--- a/servers/physics_2d/godot_collision_object_2d.cpp
+++ b/servers/physics_2d/godot_collision_object_2d.cpp
@@ -121,7 +121,7 @@ void GodotCollisionObject2D::remove_shape(int p_index) {
shapes.write[i].bpid = 0;
}
shapes[p_index].shape->remove_owner(this);
- shapes.remove(p_index);
+ shapes.remove_at(p_index);
if (!pending_shape_update_list.in_list()) {
GodotPhysicsServer2D::godot_singleton->pending_shape_update_list.add(&pending_shape_update_list);
diff --git a/servers/physics_2d/godot_physics_server_2d.cpp b/servers/physics_2d/godot_physics_server_2d.cpp
index c86f87fc03..8ac27077fc 100644
--- a/servers/physics_2d/godot_physics_server_2d.cpp
+++ b/servers/physics_2d/godot_physics_server_2d.cpp
@@ -289,7 +289,7 @@ RID GodotPhysicsServer2D::area_create() {
RID rid = area_owner.make_rid(area);
area->set_self(rid);
return rid;
-};
+}
void GodotPhysicsServer2D::area_set_space(RID p_area, RID p_space) {
GodotArea2D *area = area_owner.get_or_null(p_area);
@@ -307,7 +307,7 @@ void GodotPhysicsServer2D::area_set_space(RID p_area, RID p_space) {
area->clear_constraints();
area->set_space(space);
-};
+}
RID GodotPhysicsServer2D::area_get_space(RID p_area) const {
GodotArea2D *area = area_owner.get_or_null(p_area);
@@ -318,20 +318,6 @@ RID GodotPhysicsServer2D::area_get_space(RID p_area) const {
return RID();
}
return space->get_self();
-};
-
-void GodotPhysicsServer2D::area_set_space_override_mode(RID p_area, AreaSpaceOverrideMode p_mode) {
- GodotArea2D *area = area_owner.get_or_null(p_area);
- ERR_FAIL_COND(!area);
-
- area->set_space_override_mode(p_mode);
-}
-
-PhysicsServer2D::AreaSpaceOverrideMode GodotPhysicsServer2D::area_get_space_override_mode(RID p_area) const {
- const GodotArea2D *area = area_owner.get_or_null(p_area);
- ERR_FAIL_COND_V(!area, AREA_SPACE_OVERRIDE_DISABLED);
-
- return area->get_space_override_mode();
}
void GodotPhysicsServer2D::area_add_shape(RID p_area, RID p_shape, const Transform2D &p_transform, bool p_disabled) {
@@ -513,18 +499,18 @@ void GodotPhysicsServer2D::area_set_collision_layer(RID p_area, uint32_t p_layer
area->set_collision_layer(p_layer);
}
-void GodotPhysicsServer2D::area_set_monitor_callback(RID p_area, Object *p_receiver, const StringName &p_method) {
+void GodotPhysicsServer2D::area_set_monitor_callback(RID p_area, const Callable &p_callback) {
GodotArea2D *area = area_owner.get_or_null(p_area);
ERR_FAIL_COND(!area);
- area->set_monitor_callback(p_receiver ? p_receiver->get_instance_id() : ObjectID(), p_method);
+ area->set_monitor_callback(p_callback.is_valid() ? p_callback : Callable());
}
-void GodotPhysicsServer2D::area_set_area_monitor_callback(RID p_area, Object *p_receiver, const StringName &p_method) {
+void GodotPhysicsServer2D::area_set_area_monitor_callback(RID p_area, const Callable &p_callback) {
GodotArea2D *area = area_owner.get_or_null(p_area);
ERR_FAIL_COND(!area);
- area->set_area_monitor_callback(p_receiver ? p_receiver->get_instance_id() : ObjectID(), p_method);
+ area->set_area_monitor_callback(p_callback.is_valid() ? p_callback : Callable());
}
/* BODY API */
@@ -963,10 +949,17 @@ bool GodotPhysicsServer2D::body_test_motion(RID p_body, const MotionParameters &
PhysicsDirectBodyState2D *GodotPhysicsServer2D::body_get_direct_state(RID p_body) {
ERR_FAIL_COND_V_MSG((using_threads && !doing_sync), nullptr, "Body state is inaccessible right now, wait for iteration or physics process notification.");
+ if (!body_owner.owns(p_body)) {
+ return nullptr;
+ }
+
GodotBody2D *body = body_owner.get_or_null(p_body);
ERR_FAIL_COND_V(!body, nullptr);
- ERR_FAIL_COND_V(!body->get_space(), nullptr);
+ if (!body->get_space()) {
+ return nullptr;
+ }
+
ERR_FAIL_COND_V_MSG(body->get_space()->is_locked(), nullptr, "Body state is inaccessible right now, wait for iteration or physics process notification.");
return body->get_direct_state();
diff --git a/servers/physics_2d/godot_physics_server_2d.h b/servers/physics_2d/godot_physics_server_2d.h
index a8a1e71d13..1f544fee72 100644
--- a/servers/physics_2d/godot_physics_server_2d.h
+++ b/servers/physics_2d/godot_physics_server_2d.h
@@ -124,9 +124,6 @@ public:
virtual RID area_create() override;
- virtual void area_set_space_override_mode(RID p_area, AreaSpaceOverrideMode p_mode) override;
- virtual AreaSpaceOverrideMode area_get_space_override_mode(RID p_area) const override;
-
virtual void area_set_space(RID p_area, RID p_space) override;
virtual RID area_get_space(RID p_area) const override;
@@ -158,8 +155,8 @@ public:
virtual void area_set_collision_mask(RID p_area, uint32_t p_mask) override;
virtual void area_set_collision_layer(RID p_area, uint32_t p_layer) override;
- virtual void area_set_monitor_callback(RID p_area, Object *p_receiver, const StringName &p_method) override;
- virtual void area_set_area_monitor_callback(RID p_area, Object *p_receiver, const StringName &p_method) override;
+ virtual void area_set_monitor_callback(RID p_area, const Callable &p_callback) override;
+ virtual void area_set_area_monitor_callback(RID p_area, const Callable &p_callback) override;
virtual void area_set_pickable(RID p_area, bool p_pickable) override;
diff --git a/servers/physics_2d/godot_space_2d.cpp b/servers/physics_2d/godot_space_2d.cpp
index d72014a8ed..7a5eb26bb3 100644
--- a/servers/physics_2d/godot_space_2d.cpp
+++ b/servers/physics_2d/godot_space_2d.cpp
@@ -54,13 +54,13 @@ _FORCE_INLINE_ static bool _can_collide_with(GodotCollisionObject2D *p_object, u
return true;
}
-int GodotPhysicsDirectSpaceState2D::_intersect_point_impl(const Vector2 &p_point, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude, uint32_t p_collision_mask, bool p_collide_with_bodies, bool p_collide_with_areas, bool p_pick_point, bool p_filter_by_canvas, ObjectID p_canvas_instance_id) {
+int GodotPhysicsDirectSpaceState2D::intersect_point(const PointParameters &p_parameters, ShapeResult *r_results, int p_result_max) {
if (p_result_max <= 0) {
return 0;
}
Rect2 aabb;
- aabb.position = p_point - Vector2(0.00001, 0.00001);
+ aabb.position = p_parameters.position - Vector2(0.00001, 0.00001);
aabb.size = Vector2(0.00002, 0.00002);
int amount = space->broadphase->cull_aabb(aabb, space->intersection_query_results, GodotSpace2D::INTERSECTION_QUERY_MAX, space->intersection_query_subindex_results);
@@ -68,21 +68,21 @@ int GodotPhysicsDirectSpaceState2D::_intersect_point_impl(const Vector2 &p_point
int cc = 0;
for (int i = 0; i < amount; i++) {
- if (!_can_collide_with(space->intersection_query_results[i], p_collision_mask, p_collide_with_bodies, p_collide_with_areas)) {
+ if (!_can_collide_with(space->intersection_query_results[i], p_parameters.collision_mask, p_parameters.collide_with_bodies, p_parameters.collide_with_areas)) {
continue;
}
- if (p_exclude.has(space->intersection_query_results[i]->get_self())) {
+ if (p_parameters.exclude.has(space->intersection_query_results[i]->get_self())) {
continue;
}
const GodotCollisionObject2D *col_obj = space->intersection_query_results[i];
- if (p_pick_point && !col_obj->is_pickable()) {
+ if (p_parameters.pick_point && !col_obj->is_pickable()) {
continue;
}
- if (p_filter_by_canvas && col_obj->get_canvas_instance_id() != p_canvas_instance_id) {
+ if (p_parameters.canvas_instance_id.is_valid() && col_obj->get_canvas_instance_id() != p_parameters.canvas_instance_id) {
continue;
}
@@ -90,7 +90,7 @@ int GodotPhysicsDirectSpaceState2D::_intersect_point_impl(const Vector2 &p_point
GodotShape2D *shape = col_obj->get_shape(shape_idx);
- Vector2 local_point = (col_obj->get_transform() * col_obj->get_shape_transform(shape_idx)).affine_inverse().xform(p_point);
+ Vector2 local_point = (col_obj->get_transform() * col_obj->get_shape_transform(shape_idx)).affine_inverse().xform(p_parameters.position);
if (!shape->contains_point(local_point)) {
continue;
@@ -113,21 +113,13 @@ int GodotPhysicsDirectSpaceState2D::_intersect_point_impl(const Vector2 &p_point
return cc;
}
-int GodotPhysicsDirectSpaceState2D::intersect_point(const Vector2 &p_point, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude, uint32_t p_collision_mask, bool p_collide_with_bodies, bool p_collide_with_areas, bool p_pick_point) {
- return _intersect_point_impl(p_point, r_results, p_result_max, p_exclude, p_collision_mask, p_collide_with_bodies, p_collide_with_areas, p_pick_point);
-}
-
-int GodotPhysicsDirectSpaceState2D::intersect_point_on_canvas(const Vector2 &p_point, ObjectID p_canvas_instance_id, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude, uint32_t p_collision_mask, bool p_collide_with_bodies, bool p_collide_with_areas, bool p_pick_point) {
- return _intersect_point_impl(p_point, r_results, p_result_max, p_exclude, p_collision_mask, p_collide_with_bodies, p_collide_with_areas, p_pick_point, true, p_canvas_instance_id);
-}
-
-bool GodotPhysicsDirectSpaceState2D::intersect_ray(const Vector2 &p_from, const Vector2 &p_to, RayResult &r_result, const Set<RID> &p_exclude, uint32_t p_collision_mask, bool p_collide_with_bodies, bool p_collide_with_areas) {
+bool GodotPhysicsDirectSpaceState2D::intersect_ray(const RayParameters &p_parameters, RayResult &r_result) {
ERR_FAIL_COND_V(space->locked, false);
Vector2 begin, end;
Vector2 normal;
- begin = p_from;
- end = p_to;
+ begin = p_parameters.from;
+ end = p_parameters.to;
normal = (end - begin).normalized();
int amount = space->broadphase->cull_segment(begin, end, space->intersection_query_results, GodotSpace2D::INTERSECTION_QUERY_MAX, space->intersection_query_subindex_results);
@@ -141,11 +133,11 @@ bool GodotPhysicsDirectSpaceState2D::intersect_ray(const Vector2 &p_from, const
real_t min_d = 1e10;
for (int i = 0; i < amount; i++) {
- if (!_can_collide_with(space->intersection_query_results[i], p_collision_mask, p_collide_with_bodies, p_collide_with_areas)) {
+ if (!_can_collide_with(space->intersection_query_results[i], p_parameters.collision_mask, p_parameters.collide_with_bodies, p_parameters.collide_with_areas)) {
continue;
}
- if (p_exclude.has(space->intersection_query_results[i]->get_self())) {
+ if (p_parameters.exclude.has(space->intersection_query_results[i]->get_self())) {
continue;
}
@@ -157,16 +149,26 @@ bool GodotPhysicsDirectSpaceState2D::intersect_ray(const Vector2 &p_from, const
Vector2 local_from = inv_xform.xform(begin);
Vector2 local_to = inv_xform.xform(end);
- /*local_from = col_obj->get_inv_transform().xform(begin);
- local_from = col_obj->get_shape_inv_transform(shape_idx).xform(local_from);
-
- local_to = col_obj->get_inv_transform().xform(end);
- local_to = col_obj->get_shape_inv_transform(shape_idx).xform(local_to);*/
-
const GodotShape2D *shape = col_obj->get_shape(shape_idx);
Vector2 shape_point, shape_normal;
+ if (shape->contains_point(local_from)) {
+ if (p_parameters.hit_from_inside) {
+ // Hit shape at starting point.
+ min_d = 0;
+ res_point = local_from;
+ res_normal = Vector2();
+ res_shape = shape_idx;
+ res_obj = col_obj;
+ collided = true;
+ break;
+ } else {
+ // Ignore shape when starting inside.
+ continue;
+ }
+ }
+
if (shape->intersect_segment(local_from, local_to, shape_point, shape_normal)) {
Transform2D xform = col_obj->get_transform() * col_obj->get_shape_transform(shape_idx);
shape_point = xform.xform(shape_point);
@@ -200,16 +202,17 @@ bool GodotPhysicsDirectSpaceState2D::intersect_ray(const Vector2 &p_from, const
return true;
}
-int GodotPhysicsDirectSpaceState2D::intersect_shape(const RID &p_shape, const Transform2D &p_xform, const Vector2 &p_motion, real_t p_margin, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude, uint32_t p_collision_mask, bool p_collide_with_bodies, bool p_collide_with_areas) {
+int GodotPhysicsDirectSpaceState2D::intersect_shape(const ShapeParameters &p_parameters, ShapeResult *r_results, int p_result_max) {
if (p_result_max <= 0) {
return 0;
}
- GodotShape2D *shape = GodotPhysicsServer2D::godot_singleton->shape_owner.get_or_null(p_shape);
+ GodotShape2D *shape = GodotPhysicsServer2D::godot_singleton->shape_owner.get_or_null(p_parameters.shape_rid);
ERR_FAIL_COND_V(!shape, 0);
- Rect2 aabb = p_xform.xform(shape->get_aabb());
- aabb = aabb.grow(p_margin);
+ Rect2 aabb = p_parameters.transform.xform(shape->get_aabb());
+ aabb = aabb.merge(Rect2(aabb.position + p_parameters.motion, aabb.size)); //motion
+ aabb = aabb.grow(p_parameters.margin);
int amount = space->broadphase->cull_aabb(aabb, space->intersection_query_results, GodotSpace2D::INTERSECTION_QUERY_MAX, space->intersection_query_subindex_results);
@@ -220,18 +223,18 @@ int GodotPhysicsDirectSpaceState2D::intersect_shape(const RID &p_shape, const Tr
break;
}
- if (!_can_collide_with(space->intersection_query_results[i], p_collision_mask, p_collide_with_bodies, p_collide_with_areas)) {
+ if (!_can_collide_with(space->intersection_query_results[i], p_parameters.collision_mask, p_parameters.collide_with_bodies, p_parameters.collide_with_areas)) {
continue;
}
- if (p_exclude.has(space->intersection_query_results[i]->get_self())) {
+ if (p_parameters.exclude.has(space->intersection_query_results[i]->get_self())) {
continue;
}
const GodotCollisionObject2D *col_obj = space->intersection_query_results[i];
int shape_idx = space->intersection_query_subindex_results[i];
- if (!GodotCollisionSolver2D::solve(shape, p_xform, p_motion, col_obj->get_shape(shape_idx), col_obj->get_transform() * col_obj->get_shape_transform(shape_idx), Vector2(), nullptr, nullptr, nullptr, p_margin)) {
+ if (!GodotCollisionSolver2D::solve(shape, p_parameters.transform, p_parameters.motion, col_obj->get_shape(shape_idx), col_obj->get_transform() * col_obj->get_shape_transform(shape_idx), Vector2(), nullptr, nullptr, nullptr, p_parameters.margin)) {
continue;
}
@@ -248,13 +251,13 @@ int GodotPhysicsDirectSpaceState2D::intersect_shape(const RID &p_shape, const Tr
return cc;
}
-bool GodotPhysicsDirectSpaceState2D::cast_motion(const RID &p_shape, const Transform2D &p_xform, const Vector2 &p_motion, real_t p_margin, real_t &p_closest_safe, real_t &p_closest_unsafe, const Set<RID> &p_exclude, uint32_t p_collision_mask, bool p_collide_with_bodies, bool p_collide_with_areas) {
- GodotShape2D *shape = GodotPhysicsServer2D::godot_singleton->shape_owner.get_or_null(p_shape);
+bool GodotPhysicsDirectSpaceState2D::cast_motion(const ShapeParameters &p_parameters, real_t &p_closest_safe, real_t &p_closest_unsafe) {
+ GodotShape2D *shape = GodotPhysicsServer2D::godot_singleton->shape_owner.get_or_null(p_parameters.shape_rid);
ERR_FAIL_COND_V(!shape, false);
- Rect2 aabb = p_xform.xform(shape->get_aabb());
- aabb = aabb.merge(Rect2(aabb.position + p_motion, aabb.size)); //motion
- aabb = aabb.grow(p_margin);
+ Rect2 aabb = p_parameters.transform.xform(shape->get_aabb());
+ aabb = aabb.merge(Rect2(aabb.position + p_parameters.motion, aabb.size)); //motion
+ aabb = aabb.grow(p_parameters.margin);
int amount = space->broadphase->cull_aabb(aabb, space->intersection_query_results, GodotSpace2D::INTERSECTION_QUERY_MAX, space->intersection_query_subindex_results);
@@ -262,11 +265,11 @@ bool GodotPhysicsDirectSpaceState2D::cast_motion(const RID &p_shape, const Trans
real_t best_unsafe = 1;
for (int i = 0; i < amount; i++) {
- if (!_can_collide_with(space->intersection_query_results[i], p_collision_mask, p_collide_with_bodies, p_collide_with_areas)) {
+ if (!_can_collide_with(space->intersection_query_results[i], p_parameters.collision_mask, p_parameters.collide_with_bodies, p_parameters.collide_with_areas)) {
continue;
}
- if (p_exclude.has(space->intersection_query_results[i]->get_self())) {
+ if (p_parameters.exclude.has(space->intersection_query_results[i]->get_self())) {
continue; //ignore excluded
}
@@ -275,16 +278,16 @@ bool GodotPhysicsDirectSpaceState2D::cast_motion(const RID &p_shape, const Trans
Transform2D col_obj_xform = col_obj->get_transform() * col_obj->get_shape_transform(shape_idx);
//test initial overlap, does it collide if going all the way?
- if (!GodotCollisionSolver2D::solve(shape, p_xform, p_motion, col_obj->get_shape(shape_idx), col_obj_xform, Vector2(), nullptr, nullptr, nullptr, p_margin)) {
+ if (!GodotCollisionSolver2D::solve(shape, p_parameters.transform, p_parameters.motion, col_obj->get_shape(shape_idx), col_obj_xform, Vector2(), nullptr, nullptr, nullptr, p_parameters.margin)) {
continue;
}
//test initial overlap, ignore objects it's inside of.
- if (GodotCollisionSolver2D::solve(shape, p_xform, Vector2(), col_obj->get_shape(shape_idx), col_obj_xform, Vector2(), nullptr, nullptr, nullptr, p_margin)) {
+ if (GodotCollisionSolver2D::solve(shape, p_parameters.transform, Vector2(), col_obj->get_shape(shape_idx), col_obj_xform, Vector2(), nullptr, nullptr, nullptr, p_parameters.margin)) {
continue;
}
- Vector2 mnormal = p_motion.normalized();
+ Vector2 mnormal = p_parameters.motion.normalized();
//just do kinematic solving
real_t low = 0.0;
@@ -294,7 +297,7 @@ bool GodotPhysicsDirectSpaceState2D::cast_motion(const RID &p_shape, const Trans
real_t fraction = low + (hi - low) * fraction_coeff;
Vector2 sep = mnormal; //important optimization for this to work fast enough
- bool collided = GodotCollisionSolver2D::solve(shape, p_xform, p_motion * fraction, col_obj->get_shape(shape_idx), col_obj_xform, Vector2(), nullptr, nullptr, &sep, p_margin);
+ bool collided = GodotCollisionSolver2D::solve(shape, p_parameters.transform, p_parameters.motion * fraction, col_obj->get_shape(shape_idx), col_obj_xform, Vector2(), nullptr, nullptr, &sep, p_parameters.margin);
if (collided) {
hi = fraction;
@@ -331,17 +334,17 @@ bool GodotPhysicsDirectSpaceState2D::cast_motion(const RID &p_shape, const Trans
return true;
}
-bool GodotPhysicsDirectSpaceState2D::collide_shape(RID p_shape, const Transform2D &p_shape_xform, const Vector2 &p_motion, real_t p_margin, Vector2 *r_results, int p_result_max, int &r_result_count, const Set<RID> &p_exclude, uint32_t p_collision_mask, bool p_collide_with_bodies, bool p_collide_with_areas) {
+bool GodotPhysicsDirectSpaceState2D::collide_shape(const ShapeParameters &p_parameters, Vector2 *r_results, int p_result_max, int &r_result_count) {
if (p_result_max <= 0) {
return false;
}
- GodotShape2D *shape = GodotPhysicsServer2D::godot_singleton->shape_owner.get_or_null(p_shape);
+ GodotShape2D *shape = GodotPhysicsServer2D::godot_singleton->shape_owner.get_or_null(p_parameters.shape_rid);
ERR_FAIL_COND_V(!shape, 0);
- Rect2 aabb = p_shape_xform.xform(shape->get_aabb());
- aabb = aabb.merge(Rect2(aabb.position + p_motion, aabb.size)); //motion
- aabb = aabb.grow(p_margin);
+ Rect2 aabb = p_parameters.transform.xform(shape->get_aabb());
+ aabb = aabb.merge(Rect2(aabb.position + p_parameters.motion, aabb.size)); //motion
+ aabb = aabb.grow(p_parameters.margin);
int amount = space->broadphase->cull_aabb(aabb, space->intersection_query_results, GodotSpace2D::INTERSECTION_QUERY_MAX, space->intersection_query_subindex_results);
@@ -358,13 +361,13 @@ bool GodotPhysicsDirectSpaceState2D::collide_shape(RID p_shape, const Transform2
GodotPhysicsServer2D::CollCbkData *cbkptr = &cbk;
for (int i = 0; i < amount; i++) {
- if (!_can_collide_with(space->intersection_query_results[i], p_collision_mask, p_collide_with_bodies, p_collide_with_areas)) {
+ if (!_can_collide_with(space->intersection_query_results[i], p_parameters.collision_mask, p_parameters.collide_with_bodies, p_parameters.collide_with_areas)) {
continue;
}
const GodotCollisionObject2D *col_obj = space->intersection_query_results[i];
- if (p_exclude.has(col_obj->get_self())) {
+ if (p_parameters.exclude.has(col_obj->get_self())) {
continue;
}
@@ -373,7 +376,7 @@ bool GodotPhysicsDirectSpaceState2D::collide_shape(RID p_shape, const Transform2
cbk.valid_dir = Vector2();
cbk.valid_depth = 0;
- if (GodotCollisionSolver2D::solve(shape, p_shape_xform, p_motion, col_obj->get_shape(shape_idx), col_obj->get_transform() * col_obj->get_shape_transform(shape_idx), Vector2(), cbkres, cbkptr, nullptr, p_margin)) {
+ if (GodotCollisionSolver2D::solve(shape, p_parameters.transform, p_parameters.motion, col_obj->get_shape(shape_idx), col_obj->get_transform() * col_obj->get_shape_transform(shape_idx), Vector2(), cbkres, cbkptr, nullptr, p_parameters.margin)) {
collided = cbk.amount > 0;
}
}
@@ -432,32 +435,31 @@ static void _rest_cbk_result(const Vector2 &p_point_A, const Vector2 &p_point_B,
rd->best_local_shape = rd->local_shape;
}
-bool GodotPhysicsDirectSpaceState2D::rest_info(RID p_shape, const Transform2D &p_shape_xform, const Vector2 &p_motion, real_t p_margin, ShapeRestInfo *r_info, const Set<RID> &p_exclude, uint32_t p_collision_mask, bool p_collide_with_bodies, bool p_collide_with_areas) {
- GodotShape2D *shape = GodotPhysicsServer2D::godot_singleton->shape_owner.get_or_null(p_shape);
+bool GodotPhysicsDirectSpaceState2D::rest_info(const ShapeParameters &p_parameters, ShapeRestInfo *r_info) {
+ GodotShape2D *shape = GodotPhysicsServer2D::godot_singleton->shape_owner.get_or_null(p_parameters.shape_rid);
ERR_FAIL_COND_V(!shape, 0);
- real_t min_contact_depth = p_margin * TEST_MOTION_MIN_CONTACT_DEPTH_FACTOR;
-
- Rect2 aabb = p_shape_xform.xform(shape->get_aabb());
- aabb = aabb.merge(Rect2(aabb.position + p_motion, aabb.size)); //motion
- aabb = aabb.grow(p_margin);
+ Rect2 aabb = p_parameters.transform.xform(shape->get_aabb());
+ aabb = aabb.merge(Rect2(aabb.position + p_parameters.motion, aabb.size)); //motion
+ aabb = aabb.grow(p_parameters.margin);
int amount = space->broadphase->cull_aabb(aabb, space->intersection_query_results, GodotSpace2D::INTERSECTION_QUERY_MAX, space->intersection_query_subindex_results);
_RestCallbackData2D rcd;
- rcd.best_len = 0;
- rcd.best_object = nullptr;
- rcd.best_shape = 0;
- rcd.min_allowed_depth = min_contact_depth;
+
+ // Allowed depth can't be lower than motion length, in order to handle contacts at low speed.
+ real_t motion_length = p_parameters.motion.length();
+ real_t min_contact_depth = p_parameters.margin * TEST_MOTION_MIN_CONTACT_DEPTH_FACTOR;
+ rcd.min_allowed_depth = MIN(motion_length, min_contact_depth);
for (int i = 0; i < amount; i++) {
- if (!_can_collide_with(space->intersection_query_results[i], p_collision_mask, p_collide_with_bodies, p_collide_with_areas)) {
+ if (!_can_collide_with(space->intersection_query_results[i], p_parameters.collision_mask, p_parameters.collide_with_bodies, p_parameters.collide_with_areas)) {
continue;
}
const GodotCollisionObject2D *col_obj = space->intersection_query_results[i];
- if (p_exclude.has(col_obj->get_self())) {
+ if (p_parameters.exclude.has(col_obj->get_self())) {
continue;
}
@@ -467,7 +469,7 @@ bool GodotPhysicsDirectSpaceState2D::rest_info(RID p_shape, const Transform2D &p
rcd.object = col_obj;
rcd.shape = shape_idx;
rcd.local_shape = 0;
- bool sc = GodotCollisionSolver2D::solve(shape, p_shape_xform, p_motion, col_obj->get_shape(shape_idx), col_obj->get_transform() * col_obj->get_shape_transform(shape_idx), Vector2(), _rest_cbk_result, &rcd, nullptr, p_margin);
+ bool sc = GodotCollisionSolver2D::solve(shape, p_parameters.transform, p_parameters.motion, col_obj->get_shape(shape_idx), col_obj->get_transform() * col_obj->get_shape_transform(shape_idx), Vector2(), _rest_cbk_result, &rcd, nullptr, p_parameters.margin);
if (!sc) {
continue;
}
@@ -876,9 +878,6 @@ bool GodotSpace2D::test_body_motion(GodotBody2D *p_body, const PhysicsServer2D::
ugt.elements[2] += p_parameters.motion * unsafe;
_RestCallbackData2D rcd;
- rcd.best_len = 0;
- rcd.best_object = nullptr;
- rcd.best_shape = 0;
// Allowed depth can't be lower than motion length, in order to handle contacts at low speed.
rcd.min_allowed_depth = MIN(motion_length, min_contact_depth);
diff --git a/servers/physics_2d/godot_space_2d.h b/servers/physics_2d/godot_space_2d.h
index 97e2928a9d..b155a834b6 100644
--- a/servers/physics_2d/godot_space_2d.h
+++ b/servers/physics_2d/godot_space_2d.h
@@ -45,18 +45,15 @@
class GodotPhysicsDirectSpaceState2D : public PhysicsDirectSpaceState2D {
GDCLASS(GodotPhysicsDirectSpaceState2D, PhysicsDirectSpaceState2D);
- int _intersect_point_impl(const Vector2 &p_point, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude, uint32_t p_collision_mask, bool p_collide_with_bodies, bool p_collide_with_areas, bool p_pick_point, bool p_filter_by_canvas = false, ObjectID p_canvas_instance_id = ObjectID());
-
public:
GodotSpace2D *space = nullptr;
- virtual int intersect_point(const Vector2 &p_point, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = UINT32_MAX, bool p_collide_with_bodies = true, bool p_collide_with_areas = false, bool p_pick_point = false) override;
- virtual int intersect_point_on_canvas(const Vector2 &p_point, ObjectID p_canvas_instance_id, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = UINT32_MAX, bool p_collide_with_bodies = true, bool p_collide_with_areas = false, bool p_pick_point = false) override;
- virtual bool intersect_ray(const Vector2 &p_from, const Vector2 &p_to, RayResult &r_result, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = UINT32_MAX, bool p_collide_with_bodies = true, bool p_collide_with_areas = false) override;
- virtual int intersect_shape(const RID &p_shape, const Transform2D &p_xform, const Vector2 &p_motion, real_t p_margin, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = UINT32_MAX, bool p_collide_with_bodies = true, bool p_collide_with_areas = false) override;
- virtual bool cast_motion(const RID &p_shape, const Transform2D &p_xform, const Vector2 &p_motion, real_t p_margin, real_t &p_closest_safe, real_t &p_closest_unsafe, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = UINT32_MAX, bool p_collide_with_bodies = true, bool p_collide_with_areas = false) override;
- virtual bool collide_shape(RID p_shape, const Transform2D &p_shape_xform, const Vector2 &p_motion, real_t p_margin, Vector2 *r_results, int p_result_max, int &r_result_count, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = UINT32_MAX, bool p_collide_with_bodies = true, bool p_collide_with_areas = false) override;
- virtual bool rest_info(RID p_shape, const Transform2D &p_shape_xform, const Vector2 &p_motion, real_t p_margin, ShapeRestInfo *r_info, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = UINT32_MAX, bool p_collide_with_bodies = true, bool p_collide_with_areas = false) override;
+ virtual int intersect_point(const PointParameters &p_parameters, ShapeResult *r_results, int p_result_max) override;
+ virtual bool intersect_ray(const RayParameters &p_parameters, RayResult &r_result) override;
+ virtual int intersect_shape(const ShapeParameters &p_parameters, ShapeResult *r_results, int p_result_max) override;
+ virtual bool cast_motion(const ShapeParameters &p_parameters, real_t &p_closest_safe, real_t &p_closest_unsafe) override;
+ virtual bool collide_shape(const ShapeParameters &p_parameters, Vector2 *r_results, int p_result_max, int &r_result_count) override;
+ virtual bool rest_info(const ShapeParameters &p_parameters, ShapeRestInfo *r_info) override;
GodotPhysicsDirectSpaceState2D() {}
};
diff --git a/servers/physics_2d/godot_step_2d.cpp b/servers/physics_2d/godot_step_2d.cpp
index 3010315571..00d11acdab 100644
--- a/servers/physics_2d/godot_step_2d.cpp
+++ b/servers/physics_2d/godot_step_2d.cpp
@@ -152,6 +152,9 @@ void GodotStep2D::step(GodotSpace2D *p_space, real_t p_delta, int p_iterations)
p_space->set_active_objects(active_count);
+ // Update the broadphase to register collision pairs.
+ p_space->update();
+
{ //profile
profile_endtime = OS::get_singleton()->get_ticks_usec();
p_space->set_elapsed_time(GodotSpace2D::ELAPSED_TIME_INTEGRATE_FORCES, profile_endtime - profile_begtime);
@@ -255,11 +258,7 @@ void GodotStep2D::step(GodotSpace2D *p_space, real_t p_delta, int p_iterations)
// Warning: _solve_island modifies the constraint islands for optimization purpose,
// their content is not reliable after these calls and shouldn't be used anymore.
- if (island_count > 1) {
- work_pool.do_work(island_count, this, &GodotStep2D::_solve_island, nullptr);
- } else if (island_count > 0) {
- _solve_island(0);
- }
+ work_pool.do_work(island_count, this, &GodotStep2D::_solve_island, nullptr);
{ //profile
profile_endtime = OS::get_singleton()->get_ticks_usec();
@@ -290,7 +289,6 @@ void GodotStep2D::step(GodotSpace2D *p_space, real_t p_delta, int p_iterations)
all_constraints.clear();
- p_space->update();
p_space->unlock();
_step++;
}
diff --git a/servers/physics_3d/godot_area_3d.cpp b/servers/physics_3d/godot_area_3d.cpp
index e115e17061..d4e14b8d85 100644
--- a/servers/physics_3d/godot_area_3d.cpp
+++ b/servers/physics_3d/godot_area_3d.cpp
@@ -86,16 +86,16 @@ void GodotArea3D::set_space(GodotSpace3D *p_space) {
_set_space(p_space);
}
-void GodotArea3D::set_monitor_callback(ObjectID p_id, const StringName &p_method) {
- if (p_id == monitor_callback_id) {
- monitor_callback_method = p_method;
+void GodotArea3D::set_monitor_callback(const Callable &p_callback) {
+ ObjectID id = p_callback.get_object_id();
+ if (id == monitor_callback.get_object_id()) {
+ monitor_callback = p_callback;
return;
}
_unregister_shapes();
- monitor_callback_id = p_id;
- monitor_callback_method = p_method;
+ monitor_callback = p_callback;
monitored_bodies.clear();
monitored_areas.clear();
@@ -107,16 +107,16 @@ void GodotArea3D::set_monitor_callback(ObjectID p_id, const StringName &p_method
}
}
-void GodotArea3D::set_area_monitor_callback(ObjectID p_id, const StringName &p_method) {
- if (p_id == area_monitor_callback_id) {
- area_monitor_callback_method = p_method;
+void GodotArea3D::set_area_monitor_callback(const Callable &p_callback) {
+ ObjectID id = p_callback.get_object_id();
+ if (id == area_monitor_callback.get_object_id()) {
+ area_monitor_callback = p_callback;
return;
}
_unregister_shapes();
- area_monitor_callback_id = p_id;
- area_monitor_callback_method = p_method;
+ area_monitor_callback = p_callback;
monitored_bodies.clear();
monitored_areas.clear();
@@ -128,18 +128,21 @@ void GodotArea3D::set_area_monitor_callback(ObjectID p_id, const StringName &p_m
}
}
-void GodotArea3D::set_space_override_mode(PhysicsServer3D::AreaSpaceOverrideMode p_mode) {
- bool do_override = p_mode != PhysicsServer3D::AREA_SPACE_OVERRIDE_DISABLED;
- if (do_override == (space_override_mode != PhysicsServer3D::AREA_SPACE_OVERRIDE_DISABLED)) {
+void GodotArea3D::_set_space_override_mode(PhysicsServer3D::AreaSpaceOverrideMode &r_mode, PhysicsServer3D::AreaSpaceOverrideMode p_new_mode) {
+ bool do_override = p_new_mode != PhysicsServer3D::AREA_SPACE_OVERRIDE_DISABLED;
+ if (do_override == (r_mode != PhysicsServer3D::AREA_SPACE_OVERRIDE_DISABLED)) {
return;
}
_unregister_shapes();
- space_override_mode = p_mode;
+ r_mode = p_new_mode;
_shape_changed();
}
void GodotArea3D::set_param(PhysicsServer3D::AreaParameter p_param, const Variant &p_value) {
switch (p_param) {
+ case PhysicsServer3D::AREA_PARAM_GRAVITY_OVERRIDE_MODE:
+ _set_space_override_mode(gravity_override_mode, (PhysicsServer3D::AreaSpaceOverrideMode)(int)p_value);
+ break;
case PhysicsServer3D::AREA_PARAM_GRAVITY:
gravity = p_value;
break;
@@ -155,9 +158,15 @@ void GodotArea3D::set_param(PhysicsServer3D::AreaParameter p_param, const Varian
case PhysicsServer3D::AREA_PARAM_GRAVITY_POINT_ATTENUATION:
point_attenuation = p_value;
break;
+ case PhysicsServer3D::AREA_PARAM_LINEAR_DAMP_OVERRIDE_MODE:
+ _set_space_override_mode(linear_damping_override_mode, (PhysicsServer3D::AreaSpaceOverrideMode)(int)p_value);
+ break;
case PhysicsServer3D::AREA_PARAM_LINEAR_DAMP:
linear_damp = p_value;
break;
+ case PhysicsServer3D::AREA_PARAM_ANGULAR_DAMP_OVERRIDE_MODE:
+ _set_space_override_mode(angular_damping_override_mode, (PhysicsServer3D::AreaSpaceOverrideMode)(int)p_value);
+ break;
case PhysicsServer3D::AREA_PARAM_ANGULAR_DAMP:
angular_damp = p_value;
break;
@@ -183,6 +192,8 @@ void GodotArea3D::set_param(PhysicsServer3D::AreaParameter p_param, const Varian
Variant GodotArea3D::get_param(PhysicsServer3D::AreaParameter p_param) const {
switch (p_param) {
+ case PhysicsServer3D::AREA_PARAM_GRAVITY_OVERRIDE_MODE:
+ return gravity_override_mode;
case PhysicsServer3D::AREA_PARAM_GRAVITY:
return gravity;
case PhysicsServer3D::AREA_PARAM_GRAVITY_VECTOR:
@@ -193,8 +204,12 @@ Variant GodotArea3D::get_param(PhysicsServer3D::AreaParameter p_param) const {
return gravity_distance_scale;
case PhysicsServer3D::AREA_PARAM_GRAVITY_POINT_ATTENUATION:
return point_attenuation;
+ case PhysicsServer3D::AREA_PARAM_LINEAR_DAMP_OVERRIDE_MODE:
+ return linear_damping_override_mode;
case PhysicsServer3D::AREA_PARAM_LINEAR_DAMP:
return linear_damp;
+ case PhysicsServer3D::AREA_PARAM_ANGULAR_DAMP_OVERRIDE_MODE:
+ return angular_damping_override_mode;
case PhysicsServer3D::AREA_PARAM_ANGULAR_DAMP:
return angular_damp;
case PhysicsServer3D::AREA_PARAM_PRIORITY:
@@ -227,80 +242,79 @@ void GodotArea3D::set_monitorable(bool p_monitorable) {
monitorable = p_monitorable;
_set_static(!monitorable);
+ _shapes_changed();
}
void GodotArea3D::call_queries() {
- if (monitor_callback_id.is_valid() && !monitored_bodies.is_empty()) {
- Variant res[5];
- Variant *resptr[5];
- for (int i = 0; i < 5; i++) {
- resptr[i] = &res[i];
- }
+ if (!monitor_callback.is_null() && !monitored_bodies.is_empty()) {
+ if (monitor_callback.is_valid()) {
+ Variant res[5];
+ Variant *resptr[5];
+ for (int i = 0; i < 5; i++) {
+ resptr[i] = &res[i];
+ }
- Object *obj = ObjectDB::get_instance(monitor_callback_id);
- if (!obj) {
- monitored_bodies.clear();
- monitor_callback_id = ObjectID();
- return;
- }
+ for (Map<BodyKey, BodyState>::Element *E = monitored_bodies.front(); E;) {
+ if (E->get().state == 0) { // Nothing happened
+ Map<BodyKey, BodyState>::Element *next = E->next();
+ monitored_bodies.erase(E);
+ E = next;
+ continue;
+ }
+
+ res[0] = E->get().state > 0 ? PhysicsServer3D::AREA_BODY_ADDED : PhysicsServer3D::AREA_BODY_REMOVED;
+ res[1] = E->key().rid;
+ res[2] = E->key().instance_id;
+ res[3] = E->key().body_shape;
+ res[4] = E->key().area_shape;
- for (Map<BodyKey, BodyState>::Element *E = monitored_bodies.front(); E;) {
- if (E->get().state == 0) { // Nothing happened
Map<BodyKey, BodyState>::Element *next = E->next();
monitored_bodies.erase(E);
E = next;
- continue;
- }
-
- res[0] = E->get().state > 0 ? PhysicsServer3D::AREA_BODY_ADDED : PhysicsServer3D::AREA_BODY_REMOVED;
- res[1] = E->key().rid;
- res[2] = E->key().instance_id;
- res[3] = E->key().body_shape;
- res[4] = E->key().area_shape;
- Map<BodyKey, BodyState>::Element *next = E->next();
- monitored_bodies.erase(E);
- E = next;
-
- Callable::CallError ce;
- obj->call(monitor_callback_method, (const Variant **)resptr, 5, ce);
+ Callable::CallError ce;
+ Variant ret;
+ monitor_callback.call((const Variant **)resptr, 5, ret, ce);
+ }
+ } else {
+ monitored_bodies.clear();
+ monitor_callback = Callable();
}
}
- if (area_monitor_callback_id.is_valid() && !monitored_areas.is_empty()) {
- Variant res[5];
- Variant *resptr[5];
- for (int i = 0; i < 5; i++) {
- resptr[i] = &res[i];
- }
+ if (!area_monitor_callback.is_null() && !monitored_areas.is_empty()) {
+ if (area_monitor_callback.is_valid()) {
+ Variant res[5];
+ Variant *resptr[5];
+ for (int i = 0; i < 5; i++) {
+ resptr[i] = &res[i];
+ }
- Object *obj = ObjectDB::get_instance(area_monitor_callback_id);
- if (!obj) {
- monitored_areas.clear();
- area_monitor_callback_id = ObjectID();
- return;
- }
+ for (Map<BodyKey, BodyState>::Element *E = monitored_areas.front(); E;) {
+ if (E->get().state == 0) { // Nothing happened
+ Map<BodyKey, BodyState>::Element *next = E->next();
+ monitored_areas.erase(E);
+ E = next;
+ continue;
+ }
+
+ res[0] = E->get().state > 0 ? PhysicsServer3D::AREA_BODY_ADDED : PhysicsServer3D::AREA_BODY_REMOVED;
+ res[1] = E->key().rid;
+ res[2] = E->key().instance_id;
+ res[3] = E->key().body_shape;
+ res[4] = E->key().area_shape;
- for (Map<BodyKey, BodyState>::Element *E = monitored_areas.front(); E;) {
- if (E->get().state == 0) { // Nothing happened
Map<BodyKey, BodyState>::Element *next = E->next();
monitored_areas.erase(E);
E = next;
- continue;
- }
-
- res[0] = E->get().state > 0 ? PhysicsServer3D::AREA_BODY_ADDED : PhysicsServer3D::AREA_BODY_REMOVED;
- res[1] = E->key().rid;
- res[2] = E->key().instance_id;
- res[3] = E->key().body_shape;
- res[4] = E->key().area_shape;
-
- Map<BodyKey, BodyState>::Element *next = E->next();
- monitored_areas.erase(E);
- E = next;
- Callable::CallError ce;
- obj->call(area_monitor_callback_method, (const Variant **)resptr, 5, ce);
+ Callable::CallError ce;
+ Variant ret;
+ area_monitor_callback.call((const Variant **)resptr, 5, ret, ce);
+ }
+ } else {
+ monitored_areas.clear();
+ area_monitor_callback = Callable();
}
}
}
diff --git a/servers/physics_3d/godot_area_3d.h b/servers/physics_3d/godot_area_3d.h
index e8caa9221b..0dcf89b2b4 100644
--- a/servers/physics_3d/godot_area_3d.h
+++ b/servers/physics_3d/godot_area_3d.h
@@ -42,7 +42,10 @@ class GodotSoftBody3D;
class GodotConstraint3D;
class GodotArea3D : public GodotCollisionObject3D {
- PhysicsServer3D::AreaSpaceOverrideMode space_override_mode = PhysicsServer3D::AREA_SPACE_OVERRIDE_DISABLED;
+ PhysicsServer3D::AreaSpaceOverrideMode gravity_override_mode = PhysicsServer3D::AREA_SPACE_OVERRIDE_DISABLED;
+ PhysicsServer3D::AreaSpaceOverrideMode linear_damping_override_mode = PhysicsServer3D::AREA_SPACE_OVERRIDE_DISABLED;
+ PhysicsServer3D::AreaSpaceOverrideMode angular_damping_override_mode = PhysicsServer3D::AREA_SPACE_OVERRIDE_DISABLED;
+
real_t gravity = 9.80665;
Vector3 gravity_vector = Vector3(0, -1, 0);
bool gravity_is_point = false;
@@ -57,11 +60,8 @@ class GodotArea3D : public GodotCollisionObject3D {
int priority = 0;
bool monitorable = false;
- ObjectID monitor_callback_id;
- StringName monitor_callback_method;
-
- ObjectID area_monitor_callback_id;
- StringName area_monitor_callback_method;
+ Callable monitor_callback;
+ Callable area_monitor_callback;
SelfList<GodotArea3D> monitor_query_list;
SelfList<GodotArea3D> moved_list;
@@ -105,12 +105,14 @@ class GodotArea3D : public GodotCollisionObject3D {
virtual void _shapes_changed();
void _queue_monitor_update();
+ void _set_space_override_mode(PhysicsServer3D::AreaSpaceOverrideMode &r_mode, PhysicsServer3D::AreaSpaceOverrideMode p_new_mode);
+
public:
- void set_monitor_callback(ObjectID p_id, const StringName &p_method);
- _FORCE_INLINE_ bool has_monitor_callback() const { return monitor_callback_id.is_valid(); }
+ void set_monitor_callback(const Callable &p_callback);
+ _FORCE_INLINE_ bool has_monitor_callback() const { return !monitor_callback.is_null(); }
- void set_area_monitor_callback(ObjectID p_id, const StringName &p_method);
- _FORCE_INLINE_ bool has_area_monitor_callback() const { return area_monitor_callback_id.is_valid(); }
+ void set_area_monitor_callback(const Callable &p_callback);
+ _FORCE_INLINE_ bool has_area_monitor_callback() const { return !area_monitor_callback.is_null(); }
_FORCE_INLINE_ void add_body_to_query(GodotBody3D *p_body, uint32_t p_body_shape, uint32_t p_area_shape);
_FORCE_INLINE_ void remove_body_from_query(GodotBody3D *p_body, uint32_t p_body_shape, uint32_t p_area_shape);
@@ -124,9 +126,6 @@ public:
void set_param(PhysicsServer3D::AreaParameter p_param, const Variant &p_value);
Variant get_param(PhysicsServer3D::AreaParameter p_param) const;
- void set_space_override_mode(PhysicsServer3D::AreaSpaceOverrideMode p_mode);
- PhysicsServer3D::AreaSpaceOverrideMode get_space_override_mode() const { return space_override_mode; }
-
_FORCE_INLINE_ void set_gravity(real_t p_gravity) { gravity = p_gravity; }
_FORCE_INLINE_ real_t get_gravity() const { return gravity; }
diff --git a/servers/physics_3d/godot_area_pair_3d.cpp b/servers/physics_3d/godot_area_pair_3d.cpp
index 7453153de6..58188565e3 100644
--- a/servers/physics_3d/godot_area_pair_3d.cpp
+++ b/servers/physics_3d/godot_area_pair_3d.cpp
@@ -39,10 +39,18 @@ bool GodotAreaPair3D::setup(real_t p_step) {
}
process_collision = false;
+ has_space_override = false;
if (result != colliding) {
- if (area->get_space_override_mode() != PhysicsServer3D::AREA_SPACE_OVERRIDE_DISABLED) {
- process_collision = true;
- } else if (area->has_monitor_callback()) {
+ if ((int)area->get_param(PhysicsServer3D::AREA_PARAM_GRAVITY_OVERRIDE_MODE) != PhysicsServer3D::AREA_SPACE_OVERRIDE_DISABLED) {
+ has_space_override = true;
+ } else if ((int)area->get_param(PhysicsServer3D::AREA_PARAM_LINEAR_DAMP_OVERRIDE_MODE) != PhysicsServer3D::AREA_SPACE_OVERRIDE_DISABLED) {
+ has_space_override = true;
+ } else if ((int)area->get_param(PhysicsServer3D::AREA_PARAM_ANGULAR_DAMP_OVERRIDE_MODE) != PhysicsServer3D::AREA_SPACE_OVERRIDE_DISABLED) {
+ has_space_override = true;
+ }
+ process_collision = has_space_override;
+
+ if (area->has_monitor_callback()) {
process_collision = true;
}
@@ -58,7 +66,7 @@ bool GodotAreaPair3D::pre_solve(real_t p_step) {
}
if (colliding) {
- if (area->get_space_override_mode() != PhysicsServer3D::AREA_SPACE_OVERRIDE_DISABLED) {
+ if (has_space_override) {
body->add_area(area);
}
@@ -66,7 +74,7 @@ bool GodotAreaPair3D::pre_solve(real_t p_step) {
area->add_body_to_query(body, body_shape, area_shape);
}
} else {
- if (area->get_space_override_mode() != PhysicsServer3D::AREA_SPACE_OVERRIDE_DISABLED) {
+ if (has_space_override) {
body->remove_area(area);
}
@@ -96,7 +104,7 @@ GodotAreaPair3D::GodotAreaPair3D(GodotBody3D *p_body, int p_body_shape, GodotAre
GodotAreaPair3D::~GodotAreaPair3D() {
if (colliding) {
- if (area->get_space_override_mode() != PhysicsServer3D::AREA_SPACE_OVERRIDE_DISABLED) {
+ if (has_space_override) {
body->remove_area(area);
}
if (area->has_monitor_callback()) {
@@ -121,7 +129,7 @@ bool GodotArea2Pair3D::setup(real_t p_step) {
process_collision_a = false;
if (result_a != colliding_a) {
- if (area_a->has_area_monitor_callback() && area_b->is_monitorable()) {
+ if (area_a->has_area_monitor_callback() && area_b_monitorable) {
process_collision_a = true;
process_collision = true;
}
@@ -130,7 +138,7 @@ bool GodotArea2Pair3D::setup(real_t p_step) {
process_collision_b = false;
if (result_b != colliding_b) {
- if (area_b->has_area_monitor_callback() && area_a->is_monitorable()) {
+ if (area_b->has_area_monitor_callback() && area_a_monitorable) {
process_collision_b = true;
process_collision = true;
}
@@ -169,19 +177,21 @@ GodotArea2Pair3D::GodotArea2Pair3D(GodotArea3D *p_area_a, int p_shape_a, GodotAr
area_b = p_area_b;
shape_a = p_shape_a;
shape_b = p_shape_b;
+ area_a_monitorable = area_a->is_monitorable();
+ area_b_monitorable = area_b->is_monitorable();
area_a->add_constraint(this);
area_b->add_constraint(this);
}
GodotArea2Pair3D::~GodotArea2Pair3D() {
if (colliding_a) {
- if (area_a->has_area_monitor_callback()) {
+ if (area_a->has_area_monitor_callback() && area_b_monitorable) {
area_a->remove_area_from_query(area_b, shape_b, shape_a);
}
}
if (colliding_b) {
- if (area_b->has_area_monitor_callback()) {
+ if (area_b->has_area_monitor_callback() && area_a_monitorable) {
area_b->remove_area_from_query(area_a, shape_a, shape_b);
}
}
@@ -207,10 +217,15 @@ bool GodotAreaSoftBodyPair3D::setup(real_t p_step) {
}
process_collision = false;
+ has_space_override = false;
if (result != colliding) {
- if (area->get_space_override_mode() != PhysicsServer3D::AREA_SPACE_OVERRIDE_DISABLED) {
- process_collision = true;
- } else if (area->has_monitor_callback()) {
+ if ((int)area->get_param(PhysicsServer3D::AREA_PARAM_GRAVITY_OVERRIDE_MODE) != PhysicsServer3D::AREA_SPACE_OVERRIDE_DISABLED) {
+ has_space_override = true;
+ } else if (area->get_wind_force_magnitude() > CMP_EPSILON) {
+ has_space_override = true;
+ }
+
+ if (area->has_monitor_callback()) {
process_collision = true;
}
@@ -226,7 +241,7 @@ bool GodotAreaSoftBodyPair3D::pre_solve(real_t p_step) {
}
if (colliding) {
- if (area->get_space_override_mode() != PhysicsServer3D::AREA_SPACE_OVERRIDE_DISABLED) {
+ if (has_space_override) {
soft_body->add_area(area);
}
@@ -234,7 +249,7 @@ bool GodotAreaSoftBodyPair3D::pre_solve(real_t p_step) {
area->add_soft_body_to_query(soft_body, soft_body_shape, area_shape);
}
} else {
- if (area->get_space_override_mode() != PhysicsServer3D::AREA_SPACE_OVERRIDE_DISABLED) {
+ if (has_space_override) {
soft_body->remove_area(area);
}
@@ -261,7 +276,7 @@ GodotAreaSoftBodyPair3D::GodotAreaSoftBodyPair3D(GodotSoftBody3D *p_soft_body, i
GodotAreaSoftBodyPair3D::~GodotAreaSoftBodyPair3D() {
if (colliding) {
- if (area->get_space_override_mode() != PhysicsServer3D::AREA_SPACE_OVERRIDE_DISABLED) {
+ if (has_space_override) {
soft_body->remove_area(area);
}
if (area->has_monitor_callback()) {
diff --git a/servers/physics_3d/godot_area_pair_3d.h b/servers/physics_3d/godot_area_pair_3d.h
index f55c03be03..4237e7722e 100644
--- a/servers/physics_3d/godot_area_pair_3d.h
+++ b/servers/physics_3d/godot_area_pair_3d.h
@@ -43,6 +43,7 @@ class GodotAreaPair3D : public GodotConstraint3D {
int area_shape;
bool colliding = false;
bool process_collision = false;
+ bool has_space_override = false;
public:
virtual bool setup(real_t p_step) override;
@@ -62,6 +63,8 @@ class GodotArea2Pair3D : public GodotConstraint3D {
bool colliding_b = false;
bool process_collision_a = false;
bool process_collision_b = false;
+ bool area_a_monitorable;
+ bool area_b_monitorable;
public:
virtual bool setup(real_t p_step) override;
@@ -79,6 +82,7 @@ class GodotAreaSoftBodyPair3D : public GodotConstraint3D {
int area_shape;
bool colliding = false;
bool process_collision = false;
+ bool has_space_override = false;
public:
virtual bool setup(real_t p_step) override;
diff --git a/servers/physics_3d/godot_body_3d.cpp b/servers/physics_3d/godot_body_3d.cpp
index 02929eeaed..d5098a2a5f 100644
--- a/servers/physics_3d/godot_body_3d.cpp
+++ b/servers/physics_3d/godot_body_3d.cpp
@@ -227,8 +227,19 @@ void GodotBody3D::set_param(PhysicsServer3D::BodyParameter p_param, const Varian
_update_transform_dependent();
} break;
case PhysicsServer3D::BODY_PARAM_GRAVITY_SCALE: {
+ if (Math::is_zero_approx(gravity_scale)) {
+ wakeup();
+ }
gravity_scale = p_value;
} break;
+ case PhysicsServer3D::BODY_PARAM_LINEAR_DAMP_MODE: {
+ int mode_value = p_value;
+ linear_damp_mode = (PhysicsServer3D::BodyDampMode)mode_value;
+ } break;
+ case PhysicsServer3D::BODY_PARAM_ANGULAR_DAMP_MODE: {
+ int mode_value = p_value;
+ angular_damp_mode = (PhysicsServer3D::BodyDampMode)mode_value;
+ } break;
case PhysicsServer3D::BODY_PARAM_LINEAR_DAMP: {
linear_damp = p_value;
} break;
@@ -259,11 +270,17 @@ Variant GodotBody3D::get_param(PhysicsServer3D::BodyParameter p_param) const {
}
} break;
case PhysicsServer3D::BODY_PARAM_CENTER_OF_MASS: {
- return center_of_mass;
+ return center_of_mass_local;
} break;
case PhysicsServer3D::BODY_PARAM_GRAVITY_SCALE: {
return gravity_scale;
} break;
+ case PhysicsServer3D::BODY_PARAM_LINEAR_DAMP_MODE: {
+ return linear_damp_mode;
+ }
+ case PhysicsServer3D::BODY_PARAM_ANGULAR_DAMP_MODE: {
+ return angular_damp_mode;
+ }
case PhysicsServer3D::BODY_PARAM_LINEAR_DAMP: {
return linear_damp;
} break;
@@ -443,15 +460,6 @@ void GodotBody3D::set_space(GodotSpace3D *p_space) {
}
}
-void GodotBody3D::_compute_area_gravity_and_damping(const GodotArea3D *p_area) {
- Vector3 area_gravity;
- p_area->compute_gravity(get_transform().get_origin(), area_gravity);
- gravity += area_gravity;
-
- area_linear_damp += p_area->get_linear_damp();
- area_angular_damp += p_area->get_angular_damp();
-}
-
void GodotBody3D::set_axis_lock(PhysicsServer3D::BodyAxis p_axis, bool lock) {
if (lock) {
locked_axis |= p_axis;
@@ -469,63 +477,135 @@ void GodotBody3D::integrate_forces(real_t p_step) {
return;
}
- GodotArea3D *def_area = get_space()->get_default_area();
-
- ERR_FAIL_COND(!def_area);
+ ERR_FAIL_COND(!get_space());
int ac = areas.size();
+
+ bool gravity_done = false;
+ bool linear_damp_done = false;
+ bool angular_damp_done = false;
+
bool stopped = false;
+
gravity = Vector3(0, 0, 0);
- area_linear_damp = 0;
- area_angular_damp = 0;
+
+ total_linear_damp = 0.0;
+ total_angular_damp = 0.0;
+
+ // Combine gravity and damping from overlapping areas in priority order.
if (ac) {
areas.sort();
const AreaCMP *aa = &areas[0];
- // damp_area = aa[ac-1].area;
for (int i = ac - 1; i >= 0 && !stopped; i--) {
- PhysicsServer3D::AreaSpaceOverrideMode mode = aa[i].area->get_space_override_mode();
- switch (mode) {
- case PhysicsServer3D::AREA_SPACE_OVERRIDE_COMBINE:
- case PhysicsServer3D::AREA_SPACE_OVERRIDE_COMBINE_REPLACE: {
- _compute_area_gravity_and_damping(aa[i].area);
- stopped = mode == PhysicsServer3D::AREA_SPACE_OVERRIDE_COMBINE_REPLACE;
- } break;
- case PhysicsServer3D::AREA_SPACE_OVERRIDE_REPLACE:
- case PhysicsServer3D::AREA_SPACE_OVERRIDE_REPLACE_COMBINE: {
- gravity = Vector3(0, 0, 0);
- area_angular_damp = 0;
- area_linear_damp = 0;
- _compute_area_gravity_and_damping(aa[i].area);
- stopped = mode == PhysicsServer3D::AREA_SPACE_OVERRIDE_REPLACE;
- } break;
- default: {
+ if (!gravity_done) {
+ PhysicsServer3D::AreaSpaceOverrideMode area_gravity_mode = (PhysicsServer3D::AreaSpaceOverrideMode)(int)aa[i].area->get_param(PhysicsServer3D::AREA_PARAM_GRAVITY_OVERRIDE_MODE);
+ if (area_gravity_mode != PhysicsServer3D::AREA_SPACE_OVERRIDE_DISABLED) {
+ Vector3 area_gravity;
+ aa[i].area->compute_gravity(get_transform().get_origin(), area_gravity);
+ switch (area_gravity_mode) {
+ case PhysicsServer3D::AREA_SPACE_OVERRIDE_COMBINE:
+ case PhysicsServer3D::AREA_SPACE_OVERRIDE_COMBINE_REPLACE: {
+ gravity += area_gravity;
+ gravity_done = area_gravity_mode == PhysicsServer3D::AREA_SPACE_OVERRIDE_COMBINE_REPLACE;
+ } break;
+ case PhysicsServer3D::AREA_SPACE_OVERRIDE_REPLACE:
+ case PhysicsServer3D::AREA_SPACE_OVERRIDE_REPLACE_COMBINE: {
+ gravity = area_gravity;
+ gravity_done = area_gravity_mode == PhysicsServer3D::AREA_SPACE_OVERRIDE_REPLACE;
+ } break;
+ default: {
+ }
+ }
+ }
+ }
+ if (!linear_damp_done) {
+ PhysicsServer3D::AreaSpaceOverrideMode area_linear_damp_mode = (PhysicsServer3D::AreaSpaceOverrideMode)(int)aa[i].area->get_param(PhysicsServer3D::AREA_PARAM_LINEAR_DAMP_OVERRIDE_MODE);
+ if (area_linear_damp_mode != PhysicsServer3D::AREA_SPACE_OVERRIDE_DISABLED) {
+ real_t area_linear_damp = aa[i].area->get_linear_damp();
+ switch (area_linear_damp_mode) {
+ case PhysicsServer3D::AREA_SPACE_OVERRIDE_COMBINE:
+ case PhysicsServer3D::AREA_SPACE_OVERRIDE_COMBINE_REPLACE: {
+ total_linear_damp += area_linear_damp;
+ linear_damp_done = area_linear_damp_mode == PhysicsServer3D::AREA_SPACE_OVERRIDE_COMBINE_REPLACE;
+ } break;
+ case PhysicsServer3D::AREA_SPACE_OVERRIDE_REPLACE:
+ case PhysicsServer3D::AREA_SPACE_OVERRIDE_REPLACE_COMBINE: {
+ total_linear_damp = area_linear_damp;
+ linear_damp_done = area_linear_damp_mode == PhysicsServer3D::AREA_SPACE_OVERRIDE_REPLACE;
+ } break;
+ default: {
+ }
+ }
}
}
+ if (!angular_damp_done) {
+ PhysicsServer3D::AreaSpaceOverrideMode area_angular_damp_mode = (PhysicsServer3D::AreaSpaceOverrideMode)(int)aa[i].area->get_param(PhysicsServer3D::AREA_PARAM_ANGULAR_DAMP_OVERRIDE_MODE);
+ if (area_angular_damp_mode != PhysicsServer3D::AREA_SPACE_OVERRIDE_DISABLED) {
+ real_t area_angular_damp = aa[i].area->get_angular_damp();
+ switch (area_angular_damp_mode) {
+ case PhysicsServer3D::AREA_SPACE_OVERRIDE_COMBINE:
+ case PhysicsServer3D::AREA_SPACE_OVERRIDE_COMBINE_REPLACE: {
+ total_angular_damp += area_angular_damp;
+ angular_damp_done = area_angular_damp_mode == PhysicsServer3D::AREA_SPACE_OVERRIDE_COMBINE_REPLACE;
+ } break;
+ case PhysicsServer3D::AREA_SPACE_OVERRIDE_REPLACE:
+ case PhysicsServer3D::AREA_SPACE_OVERRIDE_REPLACE_COMBINE: {
+ total_angular_damp = area_angular_damp;
+ angular_damp_done = area_angular_damp_mode == PhysicsServer3D::AREA_SPACE_OVERRIDE_REPLACE;
+ } break;
+ default: {
+ }
+ }
+ }
+ }
+ stopped = gravity_done && linear_damp_done && angular_damp_done;
}
}
+ // Add default gravity and damping from space area.
if (!stopped) {
- _compute_area_gravity_and_damping(def_area);
- }
+ GodotArea3D *default_area = get_space()->get_default_area();
+ ERR_FAIL_COND(!default_area);
- gravity *= gravity_scale;
+ if (!gravity_done) {
+ Vector3 default_gravity;
+ default_area->compute_gravity(get_transform().get_origin(), default_gravity);
+ gravity += default_gravity;
+ }
+
+ if (!linear_damp_done) {
+ total_linear_damp += default_area->get_linear_damp();
+ }
+
+ if (!angular_damp_done) {
+ total_angular_damp += default_area->get_angular_damp();
+ }
+ }
- // If less than 0, override dampenings with that of the Body
- if (angular_damp >= 0) {
- area_angular_damp = angular_damp;
+ // Override linear damping with body's value.
+ switch (linear_damp_mode) {
+ case PhysicsServer3D::BODY_DAMP_MODE_COMBINE: {
+ total_linear_damp += linear_damp;
+ } break;
+ case PhysicsServer3D::BODY_DAMP_MODE_REPLACE: {
+ total_linear_damp = linear_damp;
+ } break;
}
- /*
- else
- area_angular_damp=damp_area->get_angular_damp();
- */
- if (linear_damp >= 0) {
- area_linear_damp = linear_damp;
+ // Override angular damping with body's value.
+ switch (angular_damp_mode) {
+ case PhysicsServer3D::BODY_DAMP_MODE_COMBINE: {
+ total_angular_damp += angular_damp;
+ } break;
+ case PhysicsServer3D::BODY_DAMP_MODE_REPLACE: {
+ total_angular_damp = angular_damp;
+ } break;
}
- /*
- else
- area_linear_damp=damp_area->get_linear_damp();
- */
+
+ gravity *= gravity_scale;
+
+ prev_linear_velocity = linear_velocity;
+ prev_angular_velocity = angular_velocity;
Vector3 motion;
bool do_motion = false;
@@ -552,13 +632,13 @@ void GodotBody3D::integrate_forces(real_t p_step) {
force += applied_force;
Vector3 torque = applied_torque;
- real_t damp = 1.0 - p_step * area_linear_damp;
+ real_t damp = 1.0 - p_step * total_linear_damp;
if (damp < 0) { // reached zero in the given time
damp = 0;
}
- real_t angular_damp = 1.0 - p_step * area_angular_damp;
+ real_t angular_damp = 1.0 - p_step * total_angular_damp;
if (angular_damp < 0) { // reached zero in the given time
angular_damp = 0;
@@ -580,8 +660,6 @@ void GodotBody3D::integrate_forces(real_t p_step) {
applied_force = Vector3();
applied_torque = Vector3();
- //motion=linear_velocity*p_step;
-
biased_angular_velocity = Vector3();
biased_linear_velocity = Vector3();
@@ -589,7 +667,6 @@ void GodotBody3D::integrate_forces(real_t p_step) {
_update_shapes_with_motion(motion);
}
- def_area = nullptr; // clear the area, so it is set in the next frame
contact_count = 0;
}
diff --git a/servers/physics_3d/godot_body_3d.h b/servers/physics_3d/godot_body_3d.h
index 5acdab9d13..6ea6d1fcaa 100644
--- a/servers/physics_3d/godot_body_3d.h
+++ b/servers/physics_3d/godot_body_3d.h
@@ -45,6 +45,9 @@ class GodotBody3D : public GodotCollisionObject3D {
Vector3 linear_velocity;
Vector3 angular_velocity;
+ Vector3 prev_linear_velocity;
+ Vector3 prev_angular_velocity;
+
Vector3 constant_linear_velocity;
Vector3 constant_angular_velocity;
@@ -55,8 +58,15 @@ class GodotBody3D : public GodotCollisionObject3D {
real_t friction = 1.0;
Vector3 inertia;
- real_t linear_damp = -1.0;
- real_t angular_damp = -1.0;
+ PhysicsServer3D::BodyDampMode linear_damp_mode = PhysicsServer3D::BODY_DAMP_MODE_COMBINE;
+ PhysicsServer3D::BodyDampMode angular_damp_mode = PhysicsServer3D::BODY_DAMP_MODE_COMBINE;
+
+ real_t linear_damp = 0.0;
+ real_t angular_damp = 0.0;
+
+ real_t total_linear_damp = 0.0;
+ real_t total_angular_damp = 0.0;
+
real_t gravity_scale = 1.0;
uint16_t locked_axis = 0;
@@ -83,9 +93,6 @@ class GodotBody3D : public GodotCollisionObject3D {
Vector3 applied_force;
Vector3 applied_torque;
- real_t area_angular_damp = 0.0;
- real_t area_linear_damp = 0.0;
-
SelfList<GodotBody3D> active_list;
SelfList<GodotBody3D> mass_properties_update_list;
SelfList<GodotBody3D> direct_state_query_list;
@@ -135,8 +142,6 @@ class GodotBody3D : public GodotCollisionObject3D {
uint64_t island_step = 0;
- void _compute_area_gravity_and_damping(const GodotArea3D *p_area);
-
void _update_transform_dependent();
friend class GodotPhysicsDirectBodyState3D; // i give up, too many functions to expose
@@ -161,7 +166,7 @@ public:
if (index > -1) {
areas.write[index].refCount -= 1;
if (areas[index].refCount < 1) {
- areas.remove(index);
+ areas.remove_at(index);
}
}
}
@@ -196,6 +201,7 @@ public:
_FORCE_INLINE_ Basis get_principal_inertia_axes() const { return principal_inertia_axes; }
_FORCE_INLINE_ Vector3 get_center_of_mass() const { return center_of_mass; }
+ _FORCE_INLINE_ Vector3 get_center_of_mass_local() const { return center_of_mass_local; }
_FORCE_INLINE_ Vector3 xform_local_to_principal(const Vector3 &p_pos) const { return principal_inertia_axes_local.xform(p_pos - center_of_mass_local); }
_FORCE_INLINE_ void set_linear_velocity(const Vector3 &p_velocity) { linear_velocity = p_velocity; }
@@ -204,6 +210,9 @@ public:
_FORCE_INLINE_ void set_angular_velocity(const Vector3 &p_velocity) { angular_velocity = p_velocity; }
_FORCE_INLINE_ Vector3 get_angular_velocity() const { return angular_velocity; }
+ _FORCE_INLINE_ Vector3 get_prev_linear_velocity() const { return prev_linear_velocity; }
+ _FORCE_INLINE_ Vector3 get_prev_angular_velocity() const { return prev_angular_velocity; }
+
_FORCE_INLINE_ const Vector3 &get_biased_linear_velocity() const { return biased_linear_velocity; }
_FORCE_INLINE_ const Vector3 &get_biased_angular_velocity() const { return biased_angular_velocity; }
@@ -285,7 +294,6 @@ public:
_FORCE_INLINE_ const Vector3 &get_inv_inertia() const { return _inv_inertia; }
_FORCE_INLINE_ const Basis &get_inv_inertia_tensor() const { return _inv_inertia_tensor; }
_FORCE_INLINE_ real_t get_friction() const { return friction; }
- _FORCE_INLINE_ const Vector3 &get_gravity() const { return gravity; }
_FORCE_INLINE_ real_t get_bounce() const { return bounce; }
void set_axis_lock(PhysicsServer3D::BodyAxis p_axis, bool lock);
diff --git a/servers/physics_3d/godot_body_direct_state_3d.cpp b/servers/physics_3d/godot_body_direct_state_3d.cpp
index db09657f8a..a929cab6f9 100644
--- a/servers/physics_3d/godot_body_direct_state_3d.cpp
+++ b/servers/physics_3d/godot_body_direct_state_3d.cpp
@@ -38,17 +38,21 @@ Vector3 GodotPhysicsDirectBodyState3D::get_total_gravity() const {
}
real_t GodotPhysicsDirectBodyState3D::get_total_angular_damp() const {
- return body->area_angular_damp;
+ return body->total_angular_damp;
}
real_t GodotPhysicsDirectBodyState3D::get_total_linear_damp() const {
- return body->area_linear_damp;
+ return body->total_linear_damp;
}
Vector3 GodotPhysicsDirectBodyState3D::get_center_of_mass() const {
return body->get_center_of_mass();
}
+Vector3 GodotPhysicsDirectBodyState3D::get_center_of_mass_local() const {
+ return body->get_center_of_mass_local();
+}
+
Basis GodotPhysicsDirectBodyState3D::get_principal_inertia_axes() const {
return body->get_principal_inertia_axes();
}
diff --git a/servers/physics_3d/godot_body_direct_state_3d.h b/servers/physics_3d/godot_body_direct_state_3d.h
index 6c584a2634..35fd1543b0 100644
--- a/servers/physics_3d/godot_body_direct_state_3d.h
+++ b/servers/physics_3d/godot_body_direct_state_3d.h
@@ -46,6 +46,7 @@ public:
virtual real_t get_total_linear_damp() const override;
virtual Vector3 get_center_of_mass() const override;
+ virtual Vector3 get_center_of_mass_local() const override;
virtual Basis get_principal_inertia_axes() const override;
virtual real_t get_inverse_mass() const override;
diff --git a/servers/physics_3d/godot_body_pair_3d.cpp b/servers/physics_3d/godot_body_pair_3d.cpp
index f7d9ed9ee9..8a701466ed 100644
--- a/servers/physics_3d/godot_body_pair_3d.cpp
+++ b/servers/physics_3d/godot_body_pair_3d.cpp
@@ -35,18 +35,6 @@
#include "core/os/os.h"
-/*
-#define NO_ACCUMULATE_IMPULSES
-#define NO_SPLIT_IMPULSES
-
-#define NO_FRICTION
-*/
-
-#define NO_TANGENTIALS
-/* BODY PAIR */
-
-//#define ALLOWED_PENETRATION 0.01
-#define RELAXATION_TIMESTEPS 3
#define MIN_VELOCITY 0.0001
#define MAX_BIAS_ROTATION (Math_PI / 8)
@@ -191,7 +179,7 @@ bool GodotBodyPair3D::_test_ccd(real_t p_step, GodotBody3D *p_A, int p_shape_A,
Vector3 local_to = from_inv.xform(to);
Vector3 rpos, rnorm;
- if (!p_B->get_shape(p_shape_B)->intersect_segment(local_from, local_to, rpos, rnorm)) {
+ if (!p_B->get_shape(p_shape_B)->intersect_segment(local_from, local_to, rpos, rnorm, true)) {
return false;
}
@@ -370,10 +358,9 @@ bool GodotBodyPair3D::pre_solve(real_t p_step) {
c.bounce = combine_bounce(A, B);
if (c.bounce) {
- Vector3 crA = A->get_angular_velocity().cross(c.rA);
- Vector3 crB = B->get_angular_velocity().cross(c.rB);
- Vector3 dv = B->get_linear_velocity() + crB - A->get_linear_velocity() - crA;
- //normal impule
+ Vector3 crA = A->get_prev_angular_velocity().cross(c.rA);
+ Vector3 crB = B->get_prev_angular_velocity().cross(c.rB);
+ Vector3 dv = B->get_prev_linear_velocity() + crB - A->get_prev_linear_velocity() - crA;
c.bounce = c.bounce * dv.dot(c.normal);
}
}
diff --git a/servers/physics_3d/godot_collision_object_3d.cpp b/servers/physics_3d/godot_collision_object_3d.cpp
index 80a3d18ce0..421291011b 100644
--- a/servers/physics_3d/godot_collision_object_3d.cpp
+++ b/servers/physics_3d/godot_collision_object_3d.cpp
@@ -118,7 +118,7 @@ void GodotCollisionObject3D::remove_shape(int p_index) {
shapes.write[i].bpid = 0;
}
shapes[p_index].shape->remove_owner(this);
- shapes.remove(p_index);
+ shapes.remove_at(p_index);
if (!pending_shape_update_list.in_list()) {
GodotPhysicsServer3D::godot_singleton->pending_shape_update_list.add(&pending_shape_update_list);
@@ -171,7 +171,7 @@ void GodotCollisionObject3D::_update_shapes() {
s.aabb_cache = shape_aabb;
Vector3 scale = xform.get_basis().get_scale();
- s.area_cache = s.shape->get_area() * scale.x * scale.y * scale.z;
+ s.area_cache = s.shape->get_volume() * scale.x * scale.y * scale.z;
if (s.bpid == 0) {
s.bpid = space->get_broadphase()->create(this, i, shape_aabb, _static);
diff --git a/servers/physics_3d/godot_collision_solver_3d.cpp b/servers/physics_3d/godot_collision_solver_3d.cpp
index b9f2f7506b..540b16c6e3 100644
--- a/servers/physics_3d/godot_collision_solver_3d.cpp
+++ b/servers/physics_3d/godot_collision_solver_3d.cpp
@@ -102,7 +102,7 @@ bool GodotCollisionSolver3D::solve_separation_ray(const GodotShape3D *p_shape_A,
to = ai.xform(to);
Vector3 p, n;
- if (!p_shape_B->intersect_segment(from, to, p, n)) {
+ if (!p_shape_B->intersect_segment(from, to, p, n, true)) {
return false;
}
@@ -264,7 +264,7 @@ bool GodotCollisionSolver3D::solve_soft_body(const GodotShape3D *p_shape_A, cons
local_aabb.size[i] = smax - smin;
}
- concave_shape_A->cull(local_aabb, soft_body_concave_callback, &query_cinfo);
+ concave_shape_A->cull(local_aabb, soft_body_concave_callback, &query_cinfo, true);
} else {
AABB shape_aabb = p_transform_A.xform(p_shape_A->get_aabb());
shape_aabb.grow_by(collision_margin);
@@ -346,7 +346,7 @@ bool GodotCollisionSolver3D::solve_concave(const GodotShape3D *p_shape_A, const
local_aabb.size[i] = smax - smin;
}
- concave_B->cull(local_aabb, concave_callback, &cinfo);
+ concave_B->cull(local_aabb, concave_callback, &cinfo, false);
return cinfo.collided;
}
@@ -559,7 +559,7 @@ bool GodotCollisionSolver3D::solve_distance(const GodotShape3D *p_shape_A, const
local_aabb.size[i] = smax - smin;
}
- concave_B->cull(local_aabb, concave_distance_callback, &cinfo);
+ concave_B->cull(local_aabb, concave_distance_callback, &cinfo, false);
if (!cinfo.collided) {
r_point_A = cinfo.close_A;
r_point_B = cinfo.close_B;
diff --git a/servers/physics_3d/godot_collision_solver_3d_sat.cpp b/servers/physics_3d/godot_collision_solver_3d_sat.cpp
index 0790333f65..4faa07b6c9 100644
--- a/servers/physics_3d/godot_collision_solver_3d_sat.cpp
+++ b/servers/physics_3d/godot_collision_solver_3d_sat.cpp
@@ -36,6 +36,8 @@
#define fallback_collision_solver gjk_epa_calculate_penetration
+#define _BACKFACE_NORMAL_THRESHOLD -0.0002
+
// Cylinder SAT analytic methods and face-circle contact points for cylinder-trimesh and cylinder-box collision are based on ODE colliders.
/*
@@ -612,13 +614,14 @@ class SeparatorAxisTest {
const Transform3D *transform_A = nullptr;
const Transform3D *transform_B = nullptr;
real_t best_depth = 1e15;
- Vector3 best_axis;
_CollectorCallback *callback = nullptr;
real_t margin_A = 0.0;
real_t margin_B = 0.0;
Vector3 separator_axis;
public:
+ Vector3 best_axis;
+
_FORCE_INLINE_ bool test_previous_axis() {
if (callback && callback->prev_axis && *callback->prev_axis != Vector3()) {
return test_axis(*callback->prev_axis);
@@ -627,7 +630,7 @@ public:
}
}
- _FORCE_INLINE_ bool test_axis(const Vector3 &p_axis, bool p_directional = false) {
+ _FORCE_INLINE_ bool test_axis(const Vector3 &p_axis) {
Vector3 axis = p_axis;
if (axis.is_equal_approx(Vector3())) {
@@ -661,12 +664,7 @@ public:
//use the smallest depth
if (min_B < 0.0) { // could be +0.0, we don't want it to become -0.0
- if (p_directional) {
- min_B = max_B;
- axis = -axis;
- } else {
- min_B = -min_B;
- }
+ min_B = -min_B;
}
if (max_B < min_B) {
@@ -1014,7 +1012,7 @@ static void _collision_sphere_face(const GodotShape3D *p_a, const Transform3D &p
Vector3 normal = (vertex[0] - vertex[2]).cross(vertex[0] - vertex[1]).normalized();
- if (!separator.test_axis(normal, !face_B->backface_collision)) {
+ if (!separator.test_axis(normal)) {
return;
}
@@ -1041,6 +1039,17 @@ static void _collision_sphere_face(const GodotShape3D *p_a, const Transform3D &p
}
}
+ if (!face_B->backface_collision) {
+ if (separator.best_axis.dot(normal) < _BACKFACE_NORMAL_THRESHOLD) {
+ if (face_B->invert_backface_collision) {
+ separator.best_axis = separator.best_axis.bounce(normal);
+ } else {
+ // Just ignore backface collision.
+ return;
+ }
+ }
+ }
+
separator.generate_contacts();
}
@@ -1486,7 +1495,7 @@ static void _collision_box_face(const GodotShape3D *p_a, const Transform3D &p_tr
Vector3 normal = (vertex[0] - vertex[2]).cross(vertex[0] - vertex[1]).normalized();
- if (!separator.test_axis(normal, !face_B->backface_collision)) {
+ if (!separator.test_axis(normal)) {
return;
}
@@ -1591,6 +1600,17 @@ static void _collision_box_face(const GodotShape3D *p_a, const Transform3D &p_tr
}
}
+ if (!face_B->backface_collision) {
+ if (separator.best_axis.dot(normal) < _BACKFACE_NORMAL_THRESHOLD) {
+ if (face_B->invert_backface_collision) {
+ separator.best_axis = separator.best_axis.bounce(normal);
+ } else {
+ // Just ignore backface collision.
+ return;
+ }
+ }
+ }
+
separator.generate_contacts();
}
@@ -1802,7 +1822,7 @@ static void _collision_capsule_face(const GodotShape3D *p_a, const Transform3D &
Vector3 normal = (vertex[0] - vertex[2]).cross(vertex[0] - vertex[1]).normalized();
- if (!separator.test_axis(normal, !face_B->backface_collision)) {
+ if (!separator.test_axis(normal)) {
return;
}
@@ -1858,6 +1878,17 @@ static void _collision_capsule_face(const GodotShape3D *p_a, const Transform3D &
}
}
+ if (!face_B->backface_collision) {
+ if (separator.best_axis.dot(normal) < _BACKFACE_NORMAL_THRESHOLD) {
+ if (face_B->invert_backface_collision) {
+ separator.best_axis = separator.best_axis.bounce(normal);
+ } else {
+ // Just ignore backface collision.
+ return;
+ }
+ }
+ }
+
separator.generate_contacts();
}
@@ -1952,7 +1983,7 @@ static void _collision_cylinder_face(const GodotShape3D *p_a, const Transform3D
Vector3 normal = (vertex[0] - vertex[2]).cross(vertex[0] - vertex[1]).normalized();
// Face B normal.
- if (!separator.test_axis(normal, !face_B->backface_collision)) {
+ if (!separator.test_axis(normal)) {
return;
}
@@ -2034,6 +2065,17 @@ static void _collision_cylinder_face(const GodotShape3D *p_a, const Transform3D
}
}
+ if (!face_B->backface_collision) {
+ if (separator.best_axis.dot(normal) < _BACKFACE_NORMAL_THRESHOLD) {
+ if (face_B->invert_backface_collision) {
+ separator.best_axis = separator.best_axis.bounce(normal);
+ } else {
+ // Just ignore backface collision.
+ return;
+ }
+ }
+ }
+
separator.generate_contacts();
}
@@ -2174,7 +2216,7 @@ static void _collision_convex_polygon_face(const GodotShape3D *p_a, const Transf
Vector3 normal = (vertex[0] - vertex[2]).cross(vertex[0] - vertex[1]).normalized();
- if (!separator.test_axis(normal, !face_B->backface_collision)) {
+ if (!separator.test_axis(normal)) {
return;
}
@@ -2266,6 +2308,17 @@ static void _collision_convex_polygon_face(const GodotShape3D *p_a, const Transf
}
}
+ if (!face_B->backface_collision) {
+ if (separator.best_axis.dot(normal) < _BACKFACE_NORMAL_THRESHOLD) {
+ if (face_B->invert_backface_collision) {
+ separator.best_axis = separator.best_axis.bounce(normal);
+ } else {
+ // Just ignore backface collision.
+ return;
+ }
+ }
+ }
+
separator.generate_contacts();
}
diff --git a/servers/physics_3d/godot_physics_server_3d.cpp b/servers/physics_3d/godot_physics_server_3d.cpp
index 79a2e0b0ea..9acae62382 100644
--- a/servers/physics_3d/godot_physics_server_3d.cpp
+++ b/servers/physics_3d/godot_physics_server_3d.cpp
@@ -219,7 +219,7 @@ RID GodotPhysicsServer3D::area_create() {
RID rid = area_owner.make_rid(area);
area->set_self(rid);
return rid;
-};
+}
void GodotPhysicsServer3D::area_set_space(RID p_area, RID p_space) {
GodotArea3D *area = area_owner.get_or_null(p_area);
@@ -237,7 +237,7 @@ void GodotPhysicsServer3D::area_set_space(RID p_area, RID p_space) {
area->clear_constraints();
area->set_space(space);
-};
+}
RID GodotPhysicsServer3D::area_get_space(RID p_area) const {
GodotArea3D *area = area_owner.get_or_null(p_area);
@@ -248,20 +248,6 @@ RID GodotPhysicsServer3D::area_get_space(RID p_area) const {
return RID();
}
return space->get_self();
-};
-
-void GodotPhysicsServer3D::area_set_space_override_mode(RID p_area, AreaSpaceOverrideMode p_mode) {
- GodotArea3D *area = area_owner.get_or_null(p_area);
- ERR_FAIL_COND(!area);
-
- area->set_space_override_mode(p_mode);
-}
-
-PhysicsServer3D::AreaSpaceOverrideMode GodotPhysicsServer3D::area_get_space_override_mode(RID p_area) const {
- const GodotArea3D *area = area_owner.get_or_null(p_area);
- ERR_FAIL_COND_V(!area, AREA_SPACE_OVERRIDE_DISABLED);
-
- return area->get_space_override_mode();
}
void GodotPhysicsServer3D::area_add_shape(RID p_area, RID p_shape, const Transform3D &p_transform, bool p_disabled) {
@@ -416,11 +402,11 @@ void GodotPhysicsServer3D::area_set_monitorable(RID p_area, bool p_monitorable)
area->set_monitorable(p_monitorable);
}
-void GodotPhysicsServer3D::area_set_monitor_callback(RID p_area, Object *p_receiver, const StringName &p_method) {
+void GodotPhysicsServer3D::area_set_monitor_callback(RID p_area, const Callable &p_callback) {
GodotArea3D *area = area_owner.get_or_null(p_area);
ERR_FAIL_COND(!area);
- area->set_monitor_callback(p_receiver ? p_receiver->get_instance_id() : ObjectID(), p_method);
+ area->set_monitor_callback(p_callback.is_valid() ? p_callback : Callable());
}
void GodotPhysicsServer3D::area_set_ray_pickable(RID p_area, bool p_enable) {
@@ -430,11 +416,11 @@ void GodotPhysicsServer3D::area_set_ray_pickable(RID p_area, bool p_enable) {
area->set_ray_pickable(p_enable);
}
-void GodotPhysicsServer3D::area_set_area_monitor_callback(RID p_area, Object *p_receiver, const StringName &p_method) {
+void GodotPhysicsServer3D::area_set_area_monitor_callback(RID p_area, const Callable &p_callback) {
GodotArea3D *area = area_owner.get_or_null(p_area);
ERR_FAIL_COND(!area);
- area->set_area_monitor_callback(p_receiver ? p_receiver->get_instance_id() : ObjectID(), p_method);
+ area->set_area_monitor_callback(p_callback.is_valid() ? p_callback : Callable());
}
/* BODY API */
@@ -881,10 +867,17 @@ bool GodotPhysicsServer3D::body_test_motion(RID p_body, const MotionParameters &
PhysicsDirectBodyState3D *GodotPhysicsServer3D::body_get_direct_state(RID p_body) {
ERR_FAIL_COND_V_MSG((using_threads && !doing_sync), nullptr, "Body state is inaccessible right now, wait for iteration or physics process notification.");
+ if (!body_owner.owns(p_body)) {
+ return nullptr;
+ }
+
GodotBody3D *body = body_owner.get_or_null(p_body);
ERR_FAIL_NULL_V(body, nullptr);
- ERR_FAIL_NULL_V(body->get_space(), nullptr);
+ if (!body->get_space()) {
+ return nullptr;
+ }
+
ERR_FAIL_COND_V_MSG(body->get_space()->is_locked(), nullptr, "Body state is inaccessible right now, wait for iteration or physics process notification.");
return body->get_direct_state();
diff --git a/servers/physics_3d/godot_physics_server_3d.h b/servers/physics_3d/godot_physics_server_3d.h
index 3ed9e320dc..f5c8e0f60d 100644
--- a/servers/physics_3d/godot_physics_server_3d.h
+++ b/servers/physics_3d/godot_physics_server_3d.h
@@ -122,9 +122,6 @@ public:
virtual RID area_create() override;
- virtual void area_set_space_override_mode(RID p_area, AreaSpaceOverrideMode p_mode) override;
- virtual AreaSpaceOverrideMode area_get_space_override_mode(RID p_area) const override;
-
virtual void area_set_space(RID p_area, RID p_space) override;
virtual RID area_get_space(RID p_area) const override;
@@ -157,8 +154,8 @@ public:
virtual void area_set_monitorable(RID p_area, bool p_monitorable) override;
- virtual void area_set_monitor_callback(RID p_area, Object *p_receiver, const StringName &p_method) override;
- virtual void area_set_area_monitor_callback(RID p_area, Object *p_receiver, const StringName &p_method) override;
+ virtual void area_set_monitor_callback(RID p_area, const Callable &p_callback) override;
+ virtual void area_set_area_monitor_callback(RID p_area, const Callable &p_callback) override;
/* BODY API */
diff --git a/servers/physics_3d/godot_shape_3d.cpp b/servers/physics_3d/godot_shape_3d.cpp
index 4c12a5a948..5364a9833d 100644
--- a/servers/physics_3d/godot_shape_3d.cpp
+++ b/servers/physics_3d/godot_shape_3d.cpp
@@ -119,7 +119,7 @@ Vector3 GodotWorldBoundaryShape3D::get_support(const Vector3 &p_normal) const {
return p_normal * 1e15;
}
-bool GodotWorldBoundaryShape3D::intersect_segment(const Vector3 &p_begin, const Vector3 &p_end, Vector3 &r_result, Vector3 &r_normal) const {
+bool GodotWorldBoundaryShape3D::intersect_segment(const Vector3 &p_begin, const Vector3 &p_end, Vector3 &r_result, Vector3 &r_normal, bool p_hit_back_faces) const {
bool inters = plane.intersects_segment(p_begin, p_end, &r_result);
if (inters) {
r_normal = plane.normal;
@@ -200,7 +200,7 @@ void GodotSeparationRayShape3D::get_supports(const Vector3 &p_normal, int p_max,
}
}
-bool GodotSeparationRayShape3D::intersect_segment(const Vector3 &p_begin, const Vector3 &p_end, Vector3 &r_result, Vector3 &r_normal) const {
+bool GodotSeparationRayShape3D::intersect_segment(const Vector3 &p_begin, const Vector3 &p_end, Vector3 &r_result, Vector3 &r_normal, bool p_hit_back_faces) const {
return false; //simply not possible
}
@@ -268,7 +268,7 @@ void GodotSphereShape3D::get_supports(const Vector3 &p_normal, int p_max, Vector
r_type = FEATURE_POINT;
}
-bool GodotSphereShape3D::intersect_segment(const Vector3 &p_begin, const Vector3 &p_end, Vector3 &r_result, Vector3 &r_normal) const {
+bool GodotSphereShape3D::intersect_segment(const Vector3 &p_begin, const Vector3 &p_end, Vector3 &r_result, Vector3 &r_normal, bool p_hit_back_faces) const {
return Geometry3D::segment_intersects_sphere(p_begin, p_end, Vector3(), radius, &r_result, &r_normal);
}
@@ -410,7 +410,7 @@ void GodotBoxShape3D::get_supports(const Vector3 &p_normal, int p_max, Vector3 *
r_supports[0] = point;
}
-bool GodotBoxShape3D::intersect_segment(const Vector3 &p_begin, const Vector3 &p_end, Vector3 &r_result, Vector3 &r_normal) const {
+bool GodotBoxShape3D::intersect_segment(const Vector3 &p_begin, const Vector3 &p_end, Vector3 &r_result, Vector3 &r_normal, bool p_hit_back_faces) const {
AABB aabb(-half_extents, half_extents * 2.0);
return aabb.intersects_segment(p_begin, p_end, &r_result, &r_normal);
@@ -430,7 +430,7 @@ Vector3 GodotBoxShape3D::get_closest_point_to(const Vector3 &p_point) const {
if (outside == 1) {
//use plane if only one side matches
Vector3 n;
- n[i] = SGN(p_point[i]);
+ n[i] = SIGN(p_point[i]);
Plane p(n, half_extents[i]);
min_point = p.project(p_point);
@@ -546,7 +546,7 @@ void GodotCapsuleShape3D::get_supports(const Vector3 &p_normal, int p_max, Vecto
}
}
-bool GodotCapsuleShape3D::intersect_segment(const Vector3 &p_begin, const Vector3 &p_end, Vector3 &r_result, Vector3 &r_normal) const {
+bool GodotCapsuleShape3D::intersect_segment(const Vector3 &p_begin, const Vector3 &p_end, Vector3 &r_result, Vector3 &r_normal, bool p_hit_back_faces) const {
Vector3 norm = (p_end - p_begin).normalized();
real_t min_d = 1e20;
@@ -761,7 +761,7 @@ void GodotCylinderShape3D::get_supports(const Vector3 &p_normal, int p_max, Vect
}
}
-bool GodotCylinderShape3D::intersect_segment(const Vector3 &p_begin, const Vector3 &p_end, Vector3 &r_result, Vector3 &r_normal) const {
+bool GodotCylinderShape3D::intersect_segment(const Vector3 &p_begin, const Vector3 &p_end, Vector3 &r_result, Vector3 &r_normal, bool p_hit_back_faces) const {
return Geometry3D::segment_intersects_cylinder(p_begin, p_end, height, radius, &r_result, &r_normal, 1);
}
@@ -954,7 +954,7 @@ void GodotConvexPolygonShape3D::get_supports(const Vector3 &p_normal, int p_max,
r_type = FEATURE_POINT;
}
-bool GodotConvexPolygonShape3D::intersect_segment(const Vector3 &p_begin, const Vector3 &p_end, Vector3 &r_result, Vector3 &r_normal) const {
+bool GodotConvexPolygonShape3D::intersect_segment(const Vector3 &p_begin, const Vector3 &p_end, Vector3 &r_result, Vector3 &r_normal, bool p_hit_back_faces) const {
const Geometry3D::MeshData::Face *faces = mesh.faces.ptr();
int fc = mesh.faces.size();
@@ -1188,12 +1188,12 @@ void GodotFaceShape3D::get_supports(const Vector3 &p_normal, int p_max, Vector3
r_supports[0] = vertex[vert_support_idx];
}
-bool GodotFaceShape3D::intersect_segment(const Vector3 &p_begin, const Vector3 &p_end, Vector3 &r_result, Vector3 &r_normal) const {
+bool GodotFaceShape3D::intersect_segment(const Vector3 &p_begin, const Vector3 &p_end, Vector3 &r_result, Vector3 &r_normal, bool p_hit_back_faces) const {
bool c = Geometry3D::segment_intersects_triangle(p_begin, p_end, vertex[0], vertex[1], vertex[2], &r_result);
if (c) {
r_normal = Plane(vertex[0], vertex[1], vertex[2]).normal;
if (r_normal.dot(p_end - p_begin) > 0) {
- if (backface_collision) {
+ if (backface_collision && p_hit_back_faces) {
r_normal = -r_normal;
} else {
c = false;
@@ -1304,7 +1304,7 @@ void GodotConcavePolygonShape3D::_cull_segment(int p_idx, _SegmentCullParams *p_
Vector3 res;
Vector3 normal;
- if (face->intersect_segment(p_params->from, p_params->to, res, normal)) {
+ if (face->intersect_segment(p_params->from, p_params->to, res, normal, true)) {
real_t d = p_params->dir.dot(res) - p_params->dir.dot(p_params->from);
if ((d > 0) && (d < p_params->min_d)) {
p_params->min_d = d;
@@ -1323,7 +1323,7 @@ void GodotConcavePolygonShape3D::_cull_segment(int p_idx, _SegmentCullParams *p_
}
}
-bool GodotConcavePolygonShape3D::intersect_segment(const Vector3 &p_begin, const Vector3 &p_end, Vector3 &r_result, Vector3 &r_normal) const {
+bool GodotConcavePolygonShape3D::intersect_segment(const Vector3 &p_begin, const Vector3 &p_end, Vector3 &r_result, Vector3 &r_normal, bool p_hit_back_faces) const {
if (faces.size() == 0) {
return false;
}
@@ -1334,7 +1334,7 @@ bool GodotConcavePolygonShape3D::intersect_segment(const Vector3 &p_begin, const
const BVH *br = bvh.ptr();
GodotFaceShape3D face;
- face.backface_collision = backface_collision;
+ face.backface_collision = backface_collision && p_hit_back_faces;
_SegmentCullParams params;
params.from = p_begin;
@@ -1401,7 +1401,7 @@ bool GodotConcavePolygonShape3D::_cull(int p_idx, _CullParams *p_params) const {
return false;
}
-void GodotConcavePolygonShape3D::cull(const AABB &p_local_aabb, QueryCallback p_callback, void *p_userdata) const {
+void GodotConcavePolygonShape3D::cull(const AABB &p_local_aabb, QueryCallback p_callback, void *p_userdata, bool p_invert_backface_collision) const {
// make matrix local to concave
if (faces.size() == 0) {
return;
@@ -1416,6 +1416,7 @@ void GodotConcavePolygonShape3D::cull(const AABB &p_local_aabb, QueryCallback p_
GodotFaceShape3D face; // use this to send in the callback
face.backface_collision = backface_collision;
+ face.invert_backface_collision = p_invert_backface_collision;
_CullParams params;
params.aabb = local_aabb;
@@ -1675,7 +1676,7 @@ struct _HeightmapGridCullState {
_FORCE_INLINE_ bool _heightmap_face_cull_segment(_HeightmapSegmentCullParams &p_params) {
Vector3 res;
Vector3 normal;
- if (p_params.face->intersect_segment(p_params.from, p_params.to, res, normal)) {
+ if (p_params.face->intersect_segment(p_params.from, p_params.to, res, normal, true)) {
p_params.result = res;
p_params.normal = normal;
return true;
@@ -1881,7 +1882,7 @@ bool GodotHeightMapShape3D::_intersect_grid_segment(ProcessFunction &p_process,
return false;
}
-bool GodotHeightMapShape3D::intersect_segment(const Vector3 &p_begin, const Vector3 &p_end, Vector3 &r_point, Vector3 &r_normal) const {
+bool GodotHeightMapShape3D::intersect_segment(const Vector3 &p_begin, const Vector3 &p_end, Vector3 &r_point, Vector3 &r_normal, bool p_hit_back_faces) const {
if (heights.is_empty()) {
return false;
}
@@ -1899,7 +1900,7 @@ bool GodotHeightMapShape3D::intersect_segment(const Vector3 &p_begin, const Vect
// Simple case for rays that don't traverse the grid horizontally.
// Just perform a test on the given cell.
GodotFaceShape3D face;
- face.backface_collision = false;
+ face.backface_collision = p_hit_back_faces;
_HeightmapSegmentCullParams params;
params.from = p_begin;
@@ -1961,7 +1962,7 @@ void GodotHeightMapShape3D::_get_cell(const Vector3 &p_point, int &r_x, int &r_y
r_z = (clamped_point.z < 0.0) ? (clamped_point.z - 0.5) : (clamped_point.z + 0.5);
}
-void GodotHeightMapShape3D::cull(const AABB &p_local_aabb, QueryCallback p_callback, void *p_userdata) const {
+void GodotHeightMapShape3D::cull(const AABB &p_local_aabb, QueryCallback p_callback, void *p_userdata, bool p_invert_backface_collision) const {
if (heights.is_empty()) {
return;
}
@@ -1988,7 +1989,8 @@ void GodotHeightMapShape3D::cull(const AABB &p_local_aabb, QueryCallback p_callb
int end_z = MIN(depth - 1, aabb_max[2]);
GodotFaceShape3D face;
- face.backface_collision = true;
+ face.backface_collision = !p_invert_backface_collision;
+ face.invert_backface_collision = p_invert_backface_collision;
for (int z = start_z; z < end_z; z++) {
for (int x = start_x; x < end_x; x++) {
diff --git a/servers/physics_3d/godot_shape_3d.h b/servers/physics_3d/godot_shape_3d.h
index 8822d9487b..43319510d4 100644
--- a/servers/physics_3d/godot_shape_3d.h
+++ b/servers/physics_3d/godot_shape_3d.h
@@ -64,7 +64,7 @@ public:
FEATURE_CIRCLE,
};
- virtual real_t get_area() const { return aabb.get_area(); }
+ virtual real_t get_volume() const { return aabb.get_volume(); }
_FORCE_INLINE_ void set_self(const RID &p_self) { self = p_self; }
_FORCE_INLINE_ RID get_self() const { return self; }
@@ -80,7 +80,7 @@ public:
virtual Vector3 get_support(const Vector3 &p_normal) const;
virtual void get_supports(const Vector3 &p_normal, int p_max, Vector3 *r_supports, int &r_amount, FeatureType &r_type) const = 0;
virtual Vector3 get_closest_point_to(const Vector3 &p_point) const = 0;
- virtual bool intersect_segment(const Vector3 &p_begin, const Vector3 &p_end, Vector3 &r_point, Vector3 &r_normal) const = 0;
+ virtual bool intersect_segment(const Vector3 &p_begin, const Vector3 &p_end, Vector3 &r_point, Vector3 &r_normal, bool p_hit_back_faces) const = 0;
virtual bool intersect_point(const Vector3 &p_point) const = 0;
virtual Vector3 get_moment_of_inertia(real_t p_mass) const = 0;
@@ -107,7 +107,7 @@ public:
// Returns true to stop the query.
typedef bool (*QueryCallback)(void *p_userdata, GodotShape3D *p_convex);
- virtual void cull(const AABB &p_local_aabb, QueryCallback p_callback, void *p_userdata) const = 0;
+ virtual void cull(const AABB &p_local_aabb, QueryCallback p_callback, void *p_userdata, bool p_invert_backface_collision) const = 0;
GodotConcaveShape3D() {}
};
@@ -120,13 +120,13 @@ class GodotWorldBoundaryShape3D : public GodotShape3D {
public:
Plane get_plane() const;
- virtual real_t get_area() const override { return INFINITY; }
+ virtual real_t get_volume() const override { return INFINITY; }
virtual PhysicsServer3D::ShapeType get_type() const override { return PhysicsServer3D::SHAPE_WORLD_BOUNDARY; }
virtual void project_range(const Vector3 &p_normal, const Transform3D &p_transform, real_t &r_min, real_t &r_max) const override;
virtual Vector3 get_support(const Vector3 &p_normal) const override;
virtual void get_supports(const Vector3 &p_normal, int p_max, Vector3 *r_supports, int &r_amount, FeatureType &r_type) const override { r_amount = 0; }
- virtual bool intersect_segment(const Vector3 &p_begin, const Vector3 &p_end, Vector3 &r_result, Vector3 &r_normal) const override;
+ virtual bool intersect_segment(const Vector3 &p_begin, const Vector3 &p_end, Vector3 &r_result, Vector3 &r_normal, bool p_hit_back_faces) const override;
virtual bool intersect_point(const Vector3 &p_point) const override;
virtual Vector3 get_closest_point_to(const Vector3 &p_point) const override;
virtual Vector3 get_moment_of_inertia(real_t p_mass) const override;
@@ -147,13 +147,13 @@ public:
real_t get_length() const;
bool get_slide_on_slope() const;
- virtual real_t get_area() const override { return 0.0; }
+ virtual real_t get_volume() const override { return 0.0; }
virtual PhysicsServer3D::ShapeType get_type() const override { return PhysicsServer3D::SHAPE_SEPARATION_RAY; }
virtual void project_range(const Vector3 &p_normal, const Transform3D &p_transform, real_t &r_min, real_t &r_max) const override;
virtual Vector3 get_support(const Vector3 &p_normal) const override;
virtual void get_supports(const Vector3 &p_normal, int p_max, Vector3 *r_supports, int &r_amount, FeatureType &r_type) const override;
- virtual bool intersect_segment(const Vector3 &p_begin, const Vector3 &p_end, Vector3 &r_result, Vector3 &r_normal) const override;
+ virtual bool intersect_segment(const Vector3 &p_begin, const Vector3 &p_end, Vector3 &r_result, Vector3 &r_normal, bool p_hit_back_faces) const override;
virtual bool intersect_point(const Vector3 &p_point) const override;
virtual Vector3 get_closest_point_to(const Vector3 &p_point) const override;
@@ -173,14 +173,14 @@ class GodotSphereShape3D : public GodotShape3D {
public:
real_t get_radius() const;
- virtual real_t get_area() const override { return 4.0 / 3.0 * Math_PI * radius * radius * radius; }
+ virtual real_t get_volume() const override { return 4.0 / 3.0 * Math_PI * radius * radius * radius; }
virtual PhysicsServer3D::ShapeType get_type() const override { return PhysicsServer3D::SHAPE_SPHERE; }
virtual void project_range(const Vector3 &p_normal, const Transform3D &p_transform, real_t &r_min, real_t &r_max) const override;
virtual Vector3 get_support(const Vector3 &p_normal) const override;
virtual void get_supports(const Vector3 &p_normal, int p_max, Vector3 *r_supports, int &r_amount, FeatureType &r_type) const override;
- virtual bool intersect_segment(const Vector3 &p_begin, const Vector3 &p_end, Vector3 &r_result, Vector3 &r_normal) const override;
+ virtual bool intersect_segment(const Vector3 &p_begin, const Vector3 &p_end, Vector3 &r_result, Vector3 &r_normal, bool p_hit_back_faces) const override;
virtual bool intersect_point(const Vector3 &p_point) const override;
virtual Vector3 get_closest_point_to(const Vector3 &p_point) const override;
@@ -198,14 +198,14 @@ class GodotBoxShape3D : public GodotShape3D {
public:
_FORCE_INLINE_ Vector3 get_half_extents() const { return half_extents; }
- virtual real_t get_area() const override { return 8 * half_extents.x * half_extents.y * half_extents.z; }
+ virtual real_t get_volume() const override { return 8 * half_extents.x * half_extents.y * half_extents.z; }
virtual PhysicsServer3D::ShapeType get_type() const override { return PhysicsServer3D::SHAPE_BOX; }
virtual void project_range(const Vector3 &p_normal, const Transform3D &p_transform, real_t &r_min, real_t &r_max) const override;
virtual Vector3 get_support(const Vector3 &p_normal) const override;
virtual void get_supports(const Vector3 &p_normal, int p_max, Vector3 *r_supports, int &r_amount, FeatureType &r_type) const override;
- virtual bool intersect_segment(const Vector3 &p_begin, const Vector3 &p_end, Vector3 &r_result, Vector3 &r_normal) const override;
+ virtual bool intersect_segment(const Vector3 &p_begin, const Vector3 &p_end, Vector3 &r_result, Vector3 &r_normal, bool p_hit_back_faces) const override;
virtual bool intersect_point(const Vector3 &p_point) const override;
virtual Vector3 get_closest_point_to(const Vector3 &p_point) const override;
@@ -227,14 +227,14 @@ public:
_FORCE_INLINE_ real_t get_height() const { return height; }
_FORCE_INLINE_ real_t get_radius() const { return radius; }
- virtual real_t get_area() const override { return 4.0 / 3.0 * Math_PI * radius * radius * radius + (height - radius * 2.0) * Math_PI * radius * radius; }
+ virtual real_t get_volume() const override { return 4.0 / 3.0 * Math_PI * radius * radius * radius + (height - radius * 2.0) * Math_PI * radius * radius; }
virtual PhysicsServer3D::ShapeType get_type() const override { return PhysicsServer3D::SHAPE_CAPSULE; }
virtual void project_range(const Vector3 &p_normal, const Transform3D &p_transform, real_t &r_min, real_t &r_max) const override;
virtual Vector3 get_support(const Vector3 &p_normal) const override;
virtual void get_supports(const Vector3 &p_normal, int p_max, Vector3 *r_supports, int &r_amount, FeatureType &r_type) const override;
- virtual bool intersect_segment(const Vector3 &p_begin, const Vector3 &p_end, Vector3 &r_result, Vector3 &r_normal) const override;
+ virtual bool intersect_segment(const Vector3 &p_begin, const Vector3 &p_end, Vector3 &r_result, Vector3 &r_normal, bool p_hit_back_faces) const override;
virtual bool intersect_point(const Vector3 &p_point) const override;
virtual Vector3 get_closest_point_to(const Vector3 &p_point) const override;
@@ -256,14 +256,14 @@ public:
_FORCE_INLINE_ real_t get_height() const { return height; }
_FORCE_INLINE_ real_t get_radius() const { return radius; }
- virtual real_t get_area() const override { return 4.0 / 3.0 * Math_PI * radius * radius * radius + height * Math_PI * radius * radius; }
+ virtual real_t get_volume() const override { return height * Math_PI * radius * radius; }
virtual PhysicsServer3D::ShapeType get_type() const override { return PhysicsServer3D::SHAPE_CYLINDER; }
virtual void project_range(const Vector3 &p_normal, const Transform3D &p_transform, real_t &r_min, real_t &r_max) const override;
virtual Vector3 get_support(const Vector3 &p_normal) const override;
virtual void get_supports(const Vector3 &p_normal, int p_max, Vector3 *r_supports, int &r_amount, FeatureType &r_type) const override;
- virtual bool intersect_segment(const Vector3 &p_begin, const Vector3 &p_end, Vector3 &r_result, Vector3 &r_normal) const override;
+ virtual bool intersect_segment(const Vector3 &p_begin, const Vector3 &p_end, Vector3 &r_result, Vector3 &r_normal, bool p_hit_back_faces) const override;
virtual bool intersect_point(const Vector3 &p_point) const override;
virtual Vector3 get_closest_point_to(const Vector3 &p_point) const override;
@@ -288,7 +288,7 @@ public:
virtual void project_range(const Vector3 &p_normal, const Transform3D &p_transform, real_t &r_min, real_t &r_max) const override;
virtual Vector3 get_support(const Vector3 &p_normal) const override;
virtual void get_supports(const Vector3 &p_normal, int p_max, Vector3 *r_supports, int &r_amount, FeatureType &r_type) const override;
- virtual bool intersect_segment(const Vector3 &p_begin, const Vector3 &p_end, Vector3 &r_result, Vector3 &r_normal) const override;
+ virtual bool intersect_segment(const Vector3 &p_begin, const Vector3 &p_end, Vector3 &r_result, Vector3 &r_normal, bool p_hit_back_faces) const override;
virtual bool intersect_point(const Vector3 &p_point) const override;
virtual Vector3 get_closest_point_to(const Vector3 &p_point) const override;
@@ -366,11 +366,11 @@ public:
virtual void project_range(const Vector3 &p_normal, const Transform3D &p_transform, real_t &r_min, real_t &r_max) const override;
virtual Vector3 get_support(const Vector3 &p_normal) const override;
- virtual bool intersect_segment(const Vector3 &p_begin, const Vector3 &p_end, Vector3 &r_result, Vector3 &r_normal) const override;
+ virtual bool intersect_segment(const Vector3 &p_begin, const Vector3 &p_end, Vector3 &r_result, Vector3 &r_normal, bool p_hit_back_faces) const override;
virtual bool intersect_point(const Vector3 &p_point) const override;
virtual Vector3 get_closest_point_to(const Vector3 &p_point) const override;
- virtual void cull(const AABB &p_local_aabb, QueryCallback p_callback, void *p_userdata) const override;
+ virtual void cull(const AABB &p_local_aabb, QueryCallback p_callback, void *p_userdata, bool p_invert_backface_collision) const override;
virtual Vector3 get_moment_of_inertia(real_t p_mass) const override;
@@ -429,11 +429,11 @@ public:
virtual void project_range(const Vector3 &p_normal, const Transform3D &p_transform, real_t &r_min, real_t &r_max) const override;
virtual Vector3 get_support(const Vector3 &p_normal) const override;
- virtual bool intersect_segment(const Vector3 &p_begin, const Vector3 &p_end, Vector3 &r_point, Vector3 &r_normal) const override;
+ virtual bool intersect_segment(const Vector3 &p_begin, const Vector3 &p_end, Vector3 &r_point, Vector3 &r_normal, bool p_hit_back_faces) const override;
virtual bool intersect_point(const Vector3 &p_point) const override;
virtual Vector3 get_closest_point_to(const Vector3 &p_point) const override;
- virtual void cull(const AABB &p_local_aabb, QueryCallback p_callback, void *p_userdata) const override;
+ virtual void cull(const AABB &p_local_aabb, QueryCallback p_callback, void *p_userdata, bool p_invert_backface_collision) const override;
virtual Vector3 get_moment_of_inertia(real_t p_mass) const override;
@@ -448,6 +448,7 @@ struct GodotFaceShape3D : public GodotShape3D {
Vector3 normal; //cache
Vector3 vertex[3];
bool backface_collision = false;
+ bool invert_backface_collision = false;
virtual PhysicsServer3D::ShapeType get_type() const override { return PhysicsServer3D::SHAPE_CONCAVE_POLYGON; }
@@ -456,7 +457,7 @@ struct GodotFaceShape3D : public GodotShape3D {
virtual void project_range(const Vector3 &p_normal, const Transform3D &p_transform, real_t &r_min, real_t &r_max) const override;
virtual Vector3 get_support(const Vector3 &p_normal) const override;
virtual void get_supports(const Vector3 &p_normal, int p_max, Vector3 *r_supports, int &r_amount, FeatureType &r_type) const override;
- virtual bool intersect_segment(const Vector3 &p_begin, const Vector3 &p_end, Vector3 &r_result, Vector3 &r_normal) const override;
+ virtual bool intersect_segment(const Vector3 &p_begin, const Vector3 &p_end, Vector3 &r_result, Vector3 &r_normal, bool p_hit_back_faces) const override;
virtual bool intersect_point(const Vector3 &p_point) const override;
virtual Vector3 get_closest_point_to(const Vector3 &p_point) const override;
@@ -495,7 +496,7 @@ struct GodotMotionShape3D : public GodotShape3D {
}
virtual void get_supports(const Vector3 &p_normal, int p_max, Vector3 *r_supports, int &r_amount, FeatureType &r_type) const override { r_amount = 0; }
- virtual bool intersect_segment(const Vector3 &p_begin, const Vector3 &p_end, Vector3 &r_result, Vector3 &r_normal) const override { return false; }
+ virtual bool intersect_segment(const Vector3 &p_begin, const Vector3 &p_end, Vector3 &r_result, Vector3 &r_normal, bool p_hit_back_faces) const override { return false; }
virtual bool intersect_point(const Vector3 &p_point) const override { return false; }
virtual Vector3 get_closest_point_to(const Vector3 &p_point) const override { return p_point; }
diff --git a/servers/physics_3d/godot_soft_body_3d.cpp b/servers/physics_3d/godot_soft_body_3d.cpp
index 4b3e8cc0d9..43d4433302 100644
--- a/servers/physics_3d/godot_soft_body_3d.cpp
+++ b/servers/physics_3d/godot_soft_body_3d.cpp
@@ -374,7 +374,7 @@ void GodotSoftBody3D::unpin_vertex(int p_index) {
uint32_t pinned_count = pinned_vertices.size();
for (uint32_t i = 0; i < pinned_count; ++i) {
if (p_index == pinned_vertices[i]) {
- pinned_vertices.remove(i);
+ pinned_vertices.remove_at(i);
if (!soft_mesh.is_null()) {
ERR_FAIL_COND(p_index >= (int)map_visual_to_physics.size());
@@ -917,9 +917,7 @@ void GodotSoftBody3D::add_velocity(const Vector3 &p_velocity) {
}
}
-void GodotSoftBody3D::apply_forces(bool p_has_wind_forces) {
- int ac = areas.size();
-
+void GodotSoftBody3D::apply_forces(const LocalVector<GodotArea3D *> &p_wind_areas) {
if (nodes.is_empty()) {
return;
}
@@ -932,7 +930,6 @@ void GodotSoftBody3D::apply_forces(bool p_has_wind_forces) {
// Iterate over faces (try not to iterate elsewhere if possible).
for (i = 0, ni = faces.size(); i < ni; ++i) {
- bool stopped = false;
const Face &face = faces[i];
Vector3 wind_force(0, 0, 0);
@@ -941,24 +938,10 @@ void GodotSoftBody3D::apply_forces(bool p_has_wind_forces) {
volume += vec3_dot(face.n[0]->x - org, vec3_cross(face.n[1]->x - org, face.n[2]->x - org));
// Compute nodal forces from area winds.
- if (ac && p_has_wind_forces) {
- const AreaCMP *aa = &areas[0];
- for (j = ac - 1; j >= 0 && !stopped; j--) {
- PhysicsServer3D::AreaSpaceOverrideMode mode = aa[j].area->get_space_override_mode();
- switch (mode) {
- case PhysicsServer3D::AREA_SPACE_OVERRIDE_COMBINE:
- case PhysicsServer3D::AREA_SPACE_OVERRIDE_COMBINE_REPLACE: {
- wind_force += _compute_area_windforce(aa[j].area, &face);
- stopped = mode == PhysicsServer3D::AREA_SPACE_OVERRIDE_COMBINE_REPLACE;
- } break;
- case PhysicsServer3D::AREA_SPACE_OVERRIDE_REPLACE:
- case PhysicsServer3D::AREA_SPACE_OVERRIDE_REPLACE_COMBINE: {
- wind_force = _compute_area_windforce(aa[j].area, &face);
- stopped = mode == PhysicsServer3D::AREA_SPACE_OVERRIDE_REPLACE;
- } break;
- default: {
- }
- }
+ int wind_area_count = p_wind_areas.size();
+ if (wind_area_count > 0) {
+ for (j = 0; j < wind_area_count; j++) {
+ wind_force += _compute_area_windforce(p_wind_areas[j], &face);
}
for (j = 0; j < 3; j++) {
@@ -981,12 +964,6 @@ void GodotSoftBody3D::apply_forces(bool p_has_wind_forces) {
}
}
-void GodotSoftBody3D::_compute_area_gravity(const GodotArea3D *p_area) {
- Vector3 area_gravity;
- p_area->compute_gravity(get_transform().get_origin(), area_gravity);
- gravity += area_gravity;
-}
-
Vector3 GodotSoftBody3D::_compute_area_windforce(const GodotArea3D *p_area, const Face *p_face) {
real_t wfm = p_area->get_wind_force_magnitude();
real_t waf = p_area->get_wind_attenuation_factor();
@@ -1004,44 +981,59 @@ void GodotSoftBody3D::predict_motion(real_t p_delta) {
ERR_FAIL_COND(!get_space());
- GodotArea3D *def_area = get_space()->get_default_area();
- ERR_FAIL_COND(!def_area);
- gravity = def_area->get_gravity_vector() * def_area->get_gravity();
+ bool gravity_done = false;
+ Vector3 gravity;
- int ac = areas.size();
- bool stopped = false;
- bool has_wind_forces = false;
+ LocalVector<GodotArea3D *> wind_areas;
+ int ac = areas.size();
if (ac) {
areas.sort();
const AreaCMP *aa = &areas[0];
- for (int i = ac - 1; i >= 0 && !stopped; i--) {
- // Avoids unnecessary loop in apply_forces().
- has_wind_forces = has_wind_forces || aa[i].area->get_wind_force_magnitude() > CMP_EPSILON;
-
- PhysicsServer3D::AreaSpaceOverrideMode mode = aa[i].area->get_space_override_mode();
- switch (mode) {
- case PhysicsServer3D::AREA_SPACE_OVERRIDE_COMBINE:
- case PhysicsServer3D::AREA_SPACE_OVERRIDE_COMBINE_REPLACE: {
- _compute_area_gravity(aa[i].area);
- stopped = mode == PhysicsServer3D::AREA_SPACE_OVERRIDE_COMBINE_REPLACE;
- } break;
- case PhysicsServer3D::AREA_SPACE_OVERRIDE_REPLACE:
- case PhysicsServer3D::AREA_SPACE_OVERRIDE_REPLACE_COMBINE: {
- gravity = Vector3(0, 0, 0);
- _compute_area_gravity(aa[i].area);
- stopped = mode == PhysicsServer3D::AREA_SPACE_OVERRIDE_REPLACE;
- } break;
- default: {
+ for (int i = ac - 1; i >= 0; i--) {
+ if (!gravity_done) {
+ PhysicsServer3D::AreaSpaceOverrideMode area_gravity_mode = (PhysicsServer3D::AreaSpaceOverrideMode)(int)aa[i].area->get_param(PhysicsServer3D::AREA_PARAM_GRAVITY_OVERRIDE_MODE);
+ if (area_gravity_mode != PhysicsServer3D::AREA_SPACE_OVERRIDE_DISABLED) {
+ Vector3 area_gravity;
+ aa[i].area->compute_gravity(get_transform().get_origin(), area_gravity);
+ switch (area_gravity_mode) {
+ case PhysicsServer3D::AREA_SPACE_OVERRIDE_COMBINE:
+ case PhysicsServer3D::AREA_SPACE_OVERRIDE_COMBINE_REPLACE: {
+ gravity += area_gravity;
+ gravity_done = area_gravity_mode == PhysicsServer3D::AREA_SPACE_OVERRIDE_COMBINE_REPLACE;
+ } break;
+ case PhysicsServer3D::AREA_SPACE_OVERRIDE_REPLACE:
+ case PhysicsServer3D::AREA_SPACE_OVERRIDE_REPLACE_COMBINE: {
+ gravity = Vector3(0, 0, 0);
+ gravity = area_gravity;
+ gravity_done = area_gravity_mode == PhysicsServer3D::AREA_SPACE_OVERRIDE_REPLACE;
+ } break;
+ default: {
+ }
+ }
}
}
+
+ if (aa[i].area->get_wind_force_magnitude() > CMP_EPSILON) {
+ wind_areas.push_back(aa[i].area);
+ }
}
}
+ // Add default gravity and damping from space area.
+ if (!gravity_done) {
+ GodotArea3D *default_area = get_space()->get_default_area();
+ ERR_FAIL_COND(!default_area);
+
+ Vector3 default_gravity;
+ default_area->compute_gravity(get_transform().get_origin(), default_gravity);
+ gravity += default_gravity;
+ }
+
// Apply forces.
add_velocity(gravity * p_delta);
- if (pressure_coefficient > CMP_EPSILON || has_wind_forces) {
- apply_forces(has_wind_forces);
+ if (pressure_coefficient > CMP_EPSILON || !wind_areas.is_empty()) {
+ apply_forces(wind_areas);
}
// Avoid soft body from 'exploding' so use some upper threshold of maximum motion
@@ -1300,7 +1292,7 @@ struct _SoftBodyIntersectSegmentInfo {
}
};
-bool GodotSoftBodyShape3D::intersect_segment(const Vector3 &p_begin, const Vector3 &p_end, Vector3 &r_result, Vector3 &r_normal) const {
+bool GodotSoftBodyShape3D::intersect_segment(const Vector3 &p_begin, const Vector3 &p_end, Vector3 &r_result, Vector3 &r_normal, bool p_hit_back_faces) const {
_SoftBodyIntersectSegmentInfo query_info;
query_info.soft_body = soft_body;
query_info.from = p_begin;
diff --git a/servers/physics_3d/godot_soft_body_3d.h b/servers/physics_3d/godot_soft_body_3d.h
index 008d5dddb8..14ddc419cf 100644
--- a/servers/physics_3d/godot_soft_body_3d.h
+++ b/servers/physics_3d/godot_soft_body_3d.h
@@ -101,8 +101,6 @@ class GodotSoftBody3D : public GodotCollisionObject3D {
real_t drag_coefficient = 0.0; // [0,1]
LocalVector<int> pinned_vertices;
- Vector3 gravity;
-
SelfList<GodotSoftBody3D> active_list;
Set<GodotConstraint3D *> constraints;
@@ -113,7 +111,6 @@ class GodotSoftBody3D : public GodotCollisionObject3D {
uint64_t island_step = 0;
- _FORCE_INLINE_ void _compute_area_gravity(const GodotArea3D *p_area);
_FORCE_INLINE_ Vector3 _compute_area_windforce(const GodotArea3D *p_area, const Face *p_face);
public:
@@ -151,7 +148,7 @@ public:
if (index > -1) {
areas.write[index].refCount -= 1;
if (areas[index].refCount < 1) {
- areas.remove(index);
+ areas.remove_at(index);
}
}
}
@@ -232,7 +229,7 @@ private:
void add_velocity(const Vector3 &p_velocity);
- void apply_forces(bool p_has_wind_forces);
+ void apply_forces(const LocalVector<GodotArea3D *> &p_wind_areas);
bool create_from_trimesh(const Vector<int> &p_indices, const Vector<Vector3> &p_vertices);
void generate_bending_constraints(int p_distance);
@@ -257,18 +254,18 @@ class GodotSoftBodyShape3D : public GodotShape3D {
public:
GodotSoftBody3D *get_soft_body() const { return soft_body; }
- virtual PhysicsServer3D::ShapeType get_type() const { return PhysicsServer3D::SHAPE_SOFT_BODY; }
- virtual void project_range(const Vector3 &p_normal, const Transform3D &p_transform, real_t &r_min, real_t &r_max) const { r_min = r_max = 0.0; }
- virtual Vector3 get_support(const Vector3 &p_normal) const { return Vector3(); }
- virtual void get_supports(const Vector3 &p_normal, int p_max, Vector3 *r_supports, int &r_amount, FeatureType &r_type) const { r_amount = 0; }
+ virtual PhysicsServer3D::ShapeType get_type() const override { return PhysicsServer3D::SHAPE_SOFT_BODY; }
+ virtual void project_range(const Vector3 &p_normal, const Transform3D &p_transform, real_t &r_min, real_t &r_max) const override { r_min = r_max = 0.0; }
+ virtual Vector3 get_support(const Vector3 &p_normal) const override { return Vector3(); }
+ virtual void get_supports(const Vector3 &p_normal, int p_max, Vector3 *r_supports, int &r_amount, FeatureType &r_type) const override { r_amount = 0; }
- virtual bool intersect_segment(const Vector3 &p_begin, const Vector3 &p_end, Vector3 &r_result, Vector3 &r_normal) const;
- virtual bool intersect_point(const Vector3 &p_point) const;
- virtual Vector3 get_closest_point_to(const Vector3 &p_point) const;
- virtual Vector3 get_moment_of_inertia(real_t p_mass) const { return Vector3(); }
+ virtual bool intersect_segment(const Vector3 &p_begin, const Vector3 &p_end, Vector3 &r_result, Vector3 &r_normal, bool p_hit_back_faces) const override;
+ virtual bool intersect_point(const Vector3 &p_point) const override;
+ virtual Vector3 get_closest_point_to(const Vector3 &p_point) const override;
+ virtual Vector3 get_moment_of_inertia(real_t p_mass) const override { return Vector3(); }
- virtual void set_data(const Variant &p_data) {}
- virtual Variant get_data() const { return Variant(); }
+ virtual void set_data(const Variant &p_data) override {}
+ virtual Variant get_data() const override { return Variant(); }
void update_bounds();
diff --git a/servers/physics_3d/godot_space_3d.cpp b/servers/physics_3d/godot_space_3d.cpp
index 750bf3a16d..f503273c88 100644
--- a/servers/physics_3d/godot_space_3d.cpp
+++ b/servers/physics_3d/godot_space_3d.cpp
@@ -57,9 +57,9 @@ _FORCE_INLINE_ static bool _can_collide_with(GodotCollisionObject3D *p_object, u
return true;
}
-int GodotPhysicsDirectSpaceState3D::intersect_point(const Vector3 &p_point, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude, uint32_t p_collision_mask, bool p_collide_with_bodies, bool p_collide_with_areas) {
+int GodotPhysicsDirectSpaceState3D::intersect_point(const PointParameters &p_parameters, ShapeResult *r_results, int p_result_max) {
ERR_FAIL_COND_V(space->locked, false);
- int amount = space->broadphase->cull_point(p_point, space->intersection_query_results, GodotSpace3D::INTERSECTION_QUERY_MAX, space->intersection_query_subindex_results);
+ int amount = space->broadphase->cull_point(p_parameters.position, space->intersection_query_results, GodotSpace3D::INTERSECTION_QUERY_MAX, space->intersection_query_subindex_results);
int cc = 0;
//Transform3D ai = p_xform.affine_inverse();
@@ -69,13 +69,13 @@ int GodotPhysicsDirectSpaceState3D::intersect_point(const Vector3 &p_point, Shap
break;
}
- if (!_can_collide_with(space->intersection_query_results[i], p_collision_mask, p_collide_with_bodies, p_collide_with_areas)) {
+ if (!_can_collide_with(space->intersection_query_results[i], p_parameters.collision_mask, p_parameters.collide_with_bodies, p_parameters.collide_with_areas)) {
continue;
}
//area can't be picked by ray (default)
- if (p_exclude.has(space->intersection_query_results[i]->get_self())) {
+ if (p_parameters.exclude.has(space->intersection_query_results[i]->get_self())) {
continue;
}
@@ -85,7 +85,7 @@ int GodotPhysicsDirectSpaceState3D::intersect_point(const Vector3 &p_point, Shap
Transform3D inv_xform = col_obj->get_transform() * col_obj->get_shape_transform(shape_idx);
inv_xform.affine_invert();
- if (!col_obj->get_shape(shape_idx)->intersect_point(inv_xform.xform(p_point))) {
+ if (!col_obj->get_shape(shape_idx)->intersect_point(inv_xform.xform(p_parameters.position))) {
continue;
}
@@ -104,13 +104,13 @@ int GodotPhysicsDirectSpaceState3D::intersect_point(const Vector3 &p_point, Shap
return cc;
}
-bool GodotPhysicsDirectSpaceState3D::intersect_ray(const Vector3 &p_from, const Vector3 &p_to, RayResult &r_result, const Set<RID> &p_exclude, uint32_t p_collision_mask, bool p_collide_with_bodies, bool p_collide_with_areas, bool p_pick_ray) {
+bool GodotPhysicsDirectSpaceState3D::intersect_ray(const RayParameters &p_parameters, RayResult &r_result) {
ERR_FAIL_COND_V(space->locked, false);
Vector3 begin, end;
Vector3 normal;
- begin = p_from;
- end = p_to;
+ begin = p_parameters.from;
+ end = p_parameters.to;
normal = (end - begin).normalized();
int amount = space->broadphase->cull_segment(begin, end, space->intersection_query_results, GodotSpace3D::INTERSECTION_QUERY_MAX, space->intersection_query_subindex_results);
@@ -124,15 +124,15 @@ bool GodotPhysicsDirectSpaceState3D::intersect_ray(const Vector3 &p_from, const
real_t min_d = 1e10;
for (int i = 0; i < amount; i++) {
- if (!_can_collide_with(space->intersection_query_results[i], p_collision_mask, p_collide_with_bodies, p_collide_with_areas)) {
+ if (!_can_collide_with(space->intersection_query_results[i], p_parameters.collision_mask, p_parameters.collide_with_bodies, p_parameters.collide_with_areas)) {
continue;
}
- if (p_pick_ray && !(space->intersection_query_results[i]->is_ray_pickable())) {
+ if (p_parameters.pick_ray && !(space->intersection_query_results[i]->is_ray_pickable())) {
continue;
}
- if (p_exclude.has(space->intersection_query_results[i]->get_self())) {
+ if (p_parameters.exclude.has(space->intersection_query_results[i]->get_self())) {
continue;
}
@@ -148,7 +148,23 @@ bool GodotPhysicsDirectSpaceState3D::intersect_ray(const Vector3 &p_from, const
Vector3 shape_point, shape_normal;
- if (shape->intersect_segment(local_from, local_to, shape_point, shape_normal)) {
+ if (shape->intersect_point(local_from)) {
+ if (p_parameters.hit_from_inside) {
+ // Hit shape at starting point.
+ min_d = 0;
+ res_point = local_from;
+ res_normal = Vector3();
+ res_shape = shape_idx;
+ res_obj = col_obj;
+ collided = true;
+ break;
+ } else {
+ // Ignore shape when starting inside.
+ continue;
+ }
+ }
+
+ if (shape->intersect_segment(local_from, local_to, shape_point, shape_normal, p_parameters.hit_back_faces)) {
Transform3D xform = col_obj->get_transform() * col_obj->get_shape_transform(shape_idx);
shape_point = xform.xform(shape_point);
@@ -183,15 +199,15 @@ bool GodotPhysicsDirectSpaceState3D::intersect_ray(const Vector3 &p_from, const
return true;
}
-int GodotPhysicsDirectSpaceState3D::intersect_shape(const RID &p_shape, const Transform3D &p_xform, real_t p_margin, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude, uint32_t p_collision_mask, bool p_collide_with_bodies, bool p_collide_with_areas) {
+int GodotPhysicsDirectSpaceState3D::intersect_shape(const ShapeParameters &p_parameters, ShapeResult *r_results, int p_result_max) {
if (p_result_max <= 0) {
return 0;
}
- GodotShape3D *shape = GodotPhysicsServer3D::godot_singleton->shape_owner.get_or_null(p_shape);
+ GodotShape3D *shape = GodotPhysicsServer3D::godot_singleton->shape_owner.get_or_null(p_parameters.shape_rid);
ERR_FAIL_COND_V(!shape, 0);
- AABB aabb = p_xform.xform(shape->get_aabb());
+ AABB aabb = p_parameters.transform.xform(shape->get_aabb());
int amount = space->broadphase->cull_aabb(aabb, space->intersection_query_results, GodotSpace3D::INTERSECTION_QUERY_MAX, space->intersection_query_subindex_results);
@@ -204,20 +220,20 @@ int GodotPhysicsDirectSpaceState3D::intersect_shape(const RID &p_shape, const Tr
break;
}
- if (!_can_collide_with(space->intersection_query_results[i], p_collision_mask, p_collide_with_bodies, p_collide_with_areas)) {
+ if (!_can_collide_with(space->intersection_query_results[i], p_parameters.collision_mask, p_parameters.collide_with_bodies, p_parameters.collide_with_areas)) {
continue;
}
//area can't be picked by ray (default)
- if (p_exclude.has(space->intersection_query_results[i]->get_self())) {
+ if (p_parameters.exclude.has(space->intersection_query_results[i]->get_self())) {
continue;
}
const GodotCollisionObject3D *col_obj = space->intersection_query_results[i];
int shape_idx = space->intersection_query_subindex_results[i];
- if (!GodotCollisionSolver3D::solve_static(shape, p_xform, col_obj->get_shape(shape_idx), col_obj->get_transform() * col_obj->get_shape_transform(shape_idx), nullptr, nullptr, nullptr, p_margin, 0)) {
+ if (!GodotCollisionSolver3D::solve_static(shape, p_parameters.transform, col_obj->get_shape(shape_idx), col_obj->get_transform() * col_obj->get_shape_transform(shape_idx), nullptr, nullptr, nullptr, p_parameters.margin, 0)) {
continue;
}
@@ -238,36 +254,36 @@ int GodotPhysicsDirectSpaceState3D::intersect_shape(const RID &p_shape, const Tr
return cc;
}
-bool GodotPhysicsDirectSpaceState3D::cast_motion(const RID &p_shape, const Transform3D &p_xform, const Vector3 &p_motion, real_t p_margin, real_t &p_closest_safe, real_t &p_closest_unsafe, const Set<RID> &p_exclude, uint32_t p_collision_mask, bool p_collide_with_bodies, bool p_collide_with_areas, ShapeRestInfo *r_info) {
- GodotShape3D *shape = GodotPhysicsServer3D::godot_singleton->shape_owner.get_or_null(p_shape);
+bool GodotPhysicsDirectSpaceState3D::cast_motion(const ShapeParameters &p_parameters, real_t &p_closest_safe, real_t &p_closest_unsafe, ShapeRestInfo *r_info) {
+ GodotShape3D *shape = GodotPhysicsServer3D::godot_singleton->shape_owner.get_or_null(p_parameters.shape_rid);
ERR_FAIL_COND_V(!shape, false);
- AABB aabb = p_xform.xform(shape->get_aabb());
- aabb = aabb.merge(AABB(aabb.position + p_motion, aabb.size)); //motion
- aabb = aabb.grow(p_margin);
+ AABB aabb = p_parameters.transform.xform(shape->get_aabb());
+ aabb = aabb.merge(AABB(aabb.position + p_parameters.motion, aabb.size)); //motion
+ aabb = aabb.grow(p_parameters.margin);
int amount = space->broadphase->cull_aabb(aabb, space->intersection_query_results, GodotSpace3D::INTERSECTION_QUERY_MAX, space->intersection_query_subindex_results);
real_t best_safe = 1;
real_t best_unsafe = 1;
- Transform3D xform_inv = p_xform.affine_inverse();
+ Transform3D xform_inv = p_parameters.transform.affine_inverse();
GodotMotionShape3D mshape;
mshape.shape = shape;
- mshape.motion = xform_inv.basis.xform(p_motion);
+ mshape.motion = xform_inv.basis.xform(p_parameters.motion);
bool best_first = true;
- Vector3 motion_normal = p_motion.normalized();
+ Vector3 motion_normal = p_parameters.motion.normalized();
Vector3 closest_A, closest_B;
for (int i = 0; i < amount; i++) {
- if (!_can_collide_with(space->intersection_query_results[i], p_collision_mask, p_collide_with_bodies, p_collide_with_areas)) {
+ if (!_can_collide_with(space->intersection_query_results[i], p_parameters.collision_mask, p_parameters.collide_with_bodies, p_parameters.collide_with_areas)) {
continue;
}
- if (p_exclude.has(space->intersection_query_results[i]->get_self())) {
+ if (p_parameters.exclude.has(space->intersection_query_results[i]->get_self())) {
continue; //ignore excluded
}
@@ -279,14 +295,14 @@ bool GodotPhysicsDirectSpaceState3D::cast_motion(const RID &p_shape, const Trans
Transform3D col_obj_xform = col_obj->get_transform() * col_obj->get_shape_transform(shape_idx);
//test initial overlap, does it collide if going all the way?
- if (GodotCollisionSolver3D::solve_distance(&mshape, p_xform, col_obj->get_shape(shape_idx), col_obj_xform, point_A, point_B, aabb, &sep_axis)) {
+ if (GodotCollisionSolver3D::solve_distance(&mshape, p_parameters.transform, col_obj->get_shape(shape_idx), col_obj_xform, point_A, point_B, aabb, &sep_axis)) {
continue;
}
//test initial overlap, ignore objects it's inside of.
sep_axis = motion_normal;
- if (!GodotCollisionSolver3D::solve_distance(shape, p_xform, col_obj->get_shape(shape_idx), col_obj_xform, point_A, point_B, aabb, &sep_axis)) {
+ if (!GodotCollisionSolver3D::solve_distance(shape, p_parameters.transform, col_obj->get_shape(shape_idx), col_obj_xform, point_A, point_B, aabb, &sep_axis)) {
continue;
}
@@ -297,11 +313,11 @@ bool GodotPhysicsDirectSpaceState3D::cast_motion(const RID &p_shape, const Trans
for (int j = 0; j < 8; j++) { //steps should be customizable..
real_t fraction = low + (hi - low) * fraction_coeff;
- mshape.motion = xform_inv.basis.xform(p_motion * fraction);
+ mshape.motion = xform_inv.basis.xform(p_parameters.motion * fraction);
Vector3 lA, lB;
Vector3 sep = motion_normal; //important optimization for this to work fast enough
- bool collided = !GodotCollisionSolver3D::solve_distance(&mshape, p_xform, col_obj->get_shape(shape_idx), col_obj_xform, lA, lB, aabb, &sep);
+ bool collided = !GodotCollisionSolver3D::solve_distance(&mshape, p_parameters.transform, col_obj->get_shape(shape_idx), col_obj_xform, lA, lB, aabb, &sep);
if (collided) {
hi = fraction;
@@ -357,16 +373,16 @@ bool GodotPhysicsDirectSpaceState3D::cast_motion(const RID &p_shape, const Trans
return true;
}
-bool GodotPhysicsDirectSpaceState3D::collide_shape(RID p_shape, const Transform3D &p_shape_xform, real_t p_margin, Vector3 *r_results, int p_result_max, int &r_result_count, const Set<RID> &p_exclude, uint32_t p_collision_mask, bool p_collide_with_bodies, bool p_collide_with_areas) {
+bool GodotPhysicsDirectSpaceState3D::collide_shape(const ShapeParameters &p_parameters, Vector3 *r_results, int p_result_max, int &r_result_count) {
if (p_result_max <= 0) {
return false;
}
- GodotShape3D *shape = GodotPhysicsServer3D::godot_singleton->shape_owner.get_or_null(p_shape);
+ GodotShape3D *shape = GodotPhysicsServer3D::godot_singleton->shape_owner.get_or_null(p_parameters.shape_rid);
ERR_FAIL_COND_V(!shape, 0);
- AABB aabb = p_shape_xform.xform(shape->get_aabb());
- aabb = aabb.grow(p_margin);
+ AABB aabb = p_parameters.transform.xform(shape->get_aabb());
+ aabb = aabb.grow(p_parameters.margin);
int amount = space->broadphase->cull_aabb(aabb, space->intersection_query_results, GodotSpace3D::INTERSECTION_QUERY_MAX, space->intersection_query_subindex_results);
@@ -382,19 +398,19 @@ bool GodotPhysicsDirectSpaceState3D::collide_shape(RID p_shape, const Transform3
GodotPhysicsServer3D::CollCbkData *cbkptr = &cbk;
for (int i = 0; i < amount; i++) {
- if (!_can_collide_with(space->intersection_query_results[i], p_collision_mask, p_collide_with_bodies, p_collide_with_areas)) {
+ if (!_can_collide_with(space->intersection_query_results[i], p_parameters.collision_mask, p_parameters.collide_with_bodies, p_parameters.collide_with_areas)) {
continue;
}
const GodotCollisionObject3D *col_obj = space->intersection_query_results[i];
- if (p_exclude.has(col_obj->get_self())) {
+ if (p_parameters.exclude.has(col_obj->get_self())) {
continue;
}
int shape_idx = space->intersection_query_subindex_results[i];
- if (GodotCollisionSolver3D::solve_static(shape, p_shape_xform, col_obj->get_shape(shape_idx), col_obj->get_transform() * col_obj->get_shape_transform(shape_idx), cbkres, cbkptr, nullptr, p_margin)) {
+ if (GodotCollisionSolver3D::solve_static(shape, p_parameters.transform, col_obj->get_shape(shape_idx), col_obj->get_transform() * col_obj->get_shape_transform(shape_idx), cbkres, cbkptr, nullptr, p_parameters.margin)) {
collided = true;
}
}
@@ -487,28 +503,30 @@ static void _rest_cbk_result(const Vector3 &p_point_A, int p_index_A, const Vect
rd->best_result.local_shape = rd->local_shape;
}
-bool GodotPhysicsDirectSpaceState3D::rest_info(RID p_shape, const Transform3D &p_shape_xform, real_t p_margin, ShapeRestInfo *r_info, const Set<RID> &p_exclude, uint32_t p_collision_mask, bool p_collide_with_bodies, bool p_collide_with_areas) {
- GodotShape3D *shape = GodotPhysicsServer3D::godot_singleton->shape_owner.get_or_null(p_shape);
+bool GodotPhysicsDirectSpaceState3D::rest_info(const ShapeParameters &p_parameters, ShapeRestInfo *r_info) {
+ GodotShape3D *shape = GodotPhysicsServer3D::godot_singleton->shape_owner.get_or_null(p_parameters.shape_rid);
ERR_FAIL_COND_V(!shape, 0);
- real_t min_contact_depth = p_margin * TEST_MOTION_MIN_CONTACT_DEPTH_FACTOR;
-
- AABB aabb = p_shape_xform.xform(shape->get_aabb());
- aabb = aabb.grow(p_margin);
+ AABB aabb = p_parameters.transform.xform(shape->get_aabb());
+ aabb = aabb.grow(p_parameters.margin);
int amount = space->broadphase->cull_aabb(aabb, space->intersection_query_results, GodotSpace3D::INTERSECTION_QUERY_MAX, space->intersection_query_subindex_results);
_RestCallbackData rcd;
- rcd.min_allowed_depth = min_contact_depth;
+
+ // Allowed depth can't be lower than motion length, in order to handle contacts at low speed.
+ real_t motion_length = p_parameters.motion.length();
+ real_t min_contact_depth = p_parameters.margin * TEST_MOTION_MIN_CONTACT_DEPTH_FACTOR;
+ rcd.min_allowed_depth = MIN(motion_length, min_contact_depth);
for (int i = 0; i < amount; i++) {
- if (!_can_collide_with(space->intersection_query_results[i], p_collision_mask, p_collide_with_bodies, p_collide_with_areas)) {
+ if (!_can_collide_with(space->intersection_query_results[i], p_parameters.collision_mask, p_parameters.collide_with_bodies, p_parameters.collide_with_areas)) {
continue;
}
const GodotCollisionObject3D *col_obj = space->intersection_query_results[i];
- if (p_exclude.has(col_obj->get_self())) {
+ if (p_parameters.exclude.has(col_obj->get_self())) {
continue;
}
@@ -516,7 +534,7 @@ bool GodotPhysicsDirectSpaceState3D::rest_info(RID p_shape, const Transform3D &p
rcd.object = col_obj;
rcd.shape = shape_idx;
- bool sc = GodotCollisionSolver3D::solve_static(shape, p_shape_xform, col_obj->get_shape(shape_idx), col_obj->get_transform() * col_obj->get_shape_transform(shape_idx), _rest_cbk_result, &rcd, nullptr, p_margin);
+ bool sc = GodotCollisionSolver3D::solve_static(shape, p_parameters.transform, col_obj->get_shape(shape_idx), col_obj->get_transform() * col_obj->get_shape_transform(shape_idx), _rest_cbk_result, &rcd, nullptr, p_parameters.margin);
if (!sc) {
continue;
}
diff --git a/servers/physics_3d/godot_space_3d.h b/servers/physics_3d/godot_space_3d.h
index 3b36dd346c..aa5e965751 100644
--- a/servers/physics_3d/godot_space_3d.h
+++ b/servers/physics_3d/godot_space_3d.h
@@ -49,12 +49,12 @@ class GodotPhysicsDirectSpaceState3D : public PhysicsDirectSpaceState3D {
public:
GodotSpace3D *space;
- virtual int intersect_point(const Vector3 &p_point, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = UINT32_MAX, bool p_collide_with_bodies = true, bool p_collide_with_areas = false) override;
- virtual bool intersect_ray(const Vector3 &p_from, const Vector3 &p_to, RayResult &r_result, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = UINT32_MAX, bool p_collide_with_bodies = true, bool p_collide_with_areas = false, bool p_pick_ray = false) override;
- virtual int intersect_shape(const RID &p_shape, const Transform3D &p_xform, real_t p_margin, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = UINT32_MAX, bool p_collide_with_bodies = true, bool p_collide_with_areas = false) override;
- virtual bool cast_motion(const RID &p_shape, const Transform3D &p_xform, const Vector3 &p_motion, real_t p_margin, real_t &p_closest_safe, real_t &p_closest_unsafe, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = UINT32_MAX, bool p_collide_with_bodies = true, bool p_collide_with_areas = false, ShapeRestInfo *r_info = nullptr) override;
- virtual bool collide_shape(RID p_shape, const Transform3D &p_shape_xform, real_t p_margin, Vector3 *r_results, int p_result_max, int &r_result_count, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = UINT32_MAX, bool p_collide_with_bodies = true, bool p_collide_with_areas = false) override;
- virtual bool rest_info(RID p_shape, const Transform3D &p_shape_xform, real_t p_margin, ShapeRestInfo *r_info, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = UINT32_MAX, bool p_collide_with_bodies = true, bool p_collide_with_areas = false) override;
+ virtual int intersect_point(const PointParameters &p_parameters, ShapeResult *r_results, int p_result_max) override;
+ virtual bool intersect_ray(const RayParameters &p_parameters, RayResult &r_result) override;
+ virtual int intersect_shape(const ShapeParameters &p_parameters, ShapeResult *r_results, int p_result_max) override;
+ virtual bool cast_motion(const ShapeParameters &p_parameters, real_t &p_closest_safe, real_t &p_closest_unsafe, ShapeRestInfo *r_info = nullptr) override;
+ virtual bool collide_shape(const ShapeParameters &p_parameters, Vector3 *r_results, int p_result_max, int &r_result_count) override;
+ virtual bool rest_info(const ShapeParameters &p_parameters, ShapeRestInfo *r_info) override;
virtual Vector3 get_closest_point_to_object_volume(RID p_object, const Vector3 p_point) const override;
GodotPhysicsDirectSpaceState3D();
diff --git a/servers/physics_3d/godot_step_3d.cpp b/servers/physics_3d/godot_step_3d.cpp
index a8654c617b..5453c4415c 100644
--- a/servers/physics_3d/godot_step_3d.cpp
+++ b/servers/physics_3d/godot_step_3d.cpp
@@ -220,6 +220,9 @@ void GodotStep3D::step(GodotSpace3D *p_space, real_t p_delta, int p_iterations)
p_space->set_active_objects(active_count);
+ // Update the broadphase to register collision pairs.
+ p_space->update();
+
{ //profile
profile_endtime = OS::get_singleton()->get_ticks_usec();
p_space->set_elapsed_time(GodotSpace3D::ELAPSED_TIME_INTEGRATE_FORCES, profile_endtime - profile_begtime);
@@ -359,11 +362,7 @@ void GodotStep3D::step(GodotSpace3D *p_space, real_t p_delta, int p_iterations)
// Warning: _solve_island modifies the constraint islands for optimization purpose,
// their content is not reliable after these calls and shouldn't be used anymore.
- if (island_count > 1) {
- work_pool.do_work(island_count, this, &GodotStep3D::_solve_island, nullptr);
- } else if (island_count > 0) {
- _solve_island(0);
- }
+ work_pool.do_work(island_count, this, &GodotStep3D::_solve_island, nullptr);
{ //profile
profile_endtime = OS::get_singleton()->get_ticks_usec();
@@ -402,7 +401,6 @@ void GodotStep3D::step(GodotSpace3D *p_space, real_t p_delta, int p_iterations)
all_constraints.clear();
- p_space->update();
p_space->unlock();
_step++;
}
diff --git a/servers/physics_server_2d.cpp b/servers/physics_server_2d.cpp
index a6cb7dbdd9..76f0b74c72 100644
--- a/servers/physics_server_2d.cpp
+++ b/servers/physics_server_2d.cpp
@@ -78,6 +78,7 @@ void PhysicsDirectBodyState2D::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_total_angular_damp"), &PhysicsDirectBodyState2D::get_total_angular_damp);
ClassDB::bind_method(D_METHOD("get_center_of_mass"), &PhysicsDirectBodyState2D::get_center_of_mass);
+ ClassDB::bind_method(D_METHOD("get_center_of_mass_local"), &PhysicsDirectBodyState2D::get_center_of_mass_local);
ClassDB::bind_method(D_METHOD("get_inverse_mass"), &PhysicsDirectBodyState2D::get_inverse_mass);
ClassDB::bind_method(D_METHOD("get_inverse_inertia"), &PhysicsDirectBodyState2D::get_inverse_inertia);
@@ -124,6 +125,7 @@ void PhysicsDirectBodyState2D::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "total_linear_damp"), "", "get_total_linear_damp");
ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "total_gravity"), "", "get_total_gravity");
ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "center_of_mass"), "", "get_center_of_mass");
+ ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "center_of_mass_local"), "", "get_center_of_mass_local");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "angular_velocity"), "set_angular_velocity", "get_angular_velocity");
ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "linear_velocity"), "set_linear_velocity", "get_linear_velocity");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "sleeping"), "set_sleep_state", "is_sleeping");
@@ -134,95 +136,136 @@ PhysicsDirectBodyState2D::PhysicsDirectBodyState2D() {}
///////////////////////////////////////////////////////
-void PhysicsShapeQueryParameters2D::set_shape(const RES &p_shape_ref) {
- ERR_FAIL_COND(p_shape_ref.is_null());
- shape_ref = p_shape_ref;
- shape = p_shape_ref->get_rid();
-}
-
-RES PhysicsShapeQueryParameters2D::get_shape() const {
- return shape_ref;
+void PhysicsRayQueryParameters2D::set_exclude(const Vector<RID> &p_exclude) {
+ parameters.exclude.clear();
+ for (int i = 0; i < p_exclude.size(); i++) {
+ parameters.exclude.insert(p_exclude[i]);
+ }
}
-void PhysicsShapeQueryParameters2D::set_shape_rid(const RID &p_shape) {
- if (shape != p_shape) {
- shape_ref = RES();
- shape = p_shape;
+Vector<RID> PhysicsRayQueryParameters2D::get_exclude() const {
+ Vector<RID> ret;
+ ret.resize(parameters.exclude.size());
+ int idx = 0;
+ for (Set<RID>::Element *E = parameters.exclude.front(); E; E = E->next()) {
+ ret.write[idx++] = E->get();
}
+ return ret;
}
-RID PhysicsShapeQueryParameters2D::get_shape_rid() const {
- return shape;
-}
+void PhysicsRayQueryParameters2D::_bind_methods() {
+ ClassDB::bind_method(D_METHOD("set_from", "from"), &PhysicsRayQueryParameters2D::set_from);
+ ClassDB::bind_method(D_METHOD("get_from"), &PhysicsRayQueryParameters2D::get_from);
-void PhysicsShapeQueryParameters2D::set_transform(const Transform2D &p_transform) {
- transform = p_transform;
-}
+ ClassDB::bind_method(D_METHOD("set_to", "to"), &PhysicsRayQueryParameters2D::set_to);
+ ClassDB::bind_method(D_METHOD("get_to"), &PhysicsRayQueryParameters2D::get_to);
-Transform2D PhysicsShapeQueryParameters2D::get_transform() const {
- return transform;
-}
+ ClassDB::bind_method(D_METHOD("set_collision_mask", "collision_mask"), &PhysicsRayQueryParameters2D::set_collision_mask);
+ ClassDB::bind_method(D_METHOD("get_collision_mask"), &PhysicsRayQueryParameters2D::get_collision_mask);
-void PhysicsShapeQueryParameters2D::set_motion(const Vector2 &p_motion) {
- motion = p_motion;
-}
+ ClassDB::bind_method(D_METHOD("set_exclude", "exclude"), &PhysicsRayQueryParameters2D::set_exclude);
+ ClassDB::bind_method(D_METHOD("get_exclude"), &PhysicsRayQueryParameters2D::get_exclude);
-Vector2 PhysicsShapeQueryParameters2D::get_motion() const {
- return motion;
-}
+ ClassDB::bind_method(D_METHOD("set_collide_with_bodies", "enable"), &PhysicsRayQueryParameters2D::set_collide_with_bodies);
+ ClassDB::bind_method(D_METHOD("is_collide_with_bodies_enabled"), &PhysicsRayQueryParameters2D::is_collide_with_bodies_enabled);
-void PhysicsShapeQueryParameters2D::set_margin(real_t p_margin) {
- margin = p_margin;
-}
+ ClassDB::bind_method(D_METHOD("set_collide_with_areas", "enable"), &PhysicsRayQueryParameters2D::set_collide_with_areas);
+ ClassDB::bind_method(D_METHOD("is_collide_with_areas_enabled"), &PhysicsRayQueryParameters2D::is_collide_with_areas_enabled);
-real_t PhysicsShapeQueryParameters2D::get_margin() const {
- return margin;
-}
+ ClassDB::bind_method(D_METHOD("set_hit_from_inside", "enable"), &PhysicsRayQueryParameters2D::set_hit_from_inside);
+ ClassDB::bind_method(D_METHOD("is_hit_from_inside_enabled"), &PhysicsRayQueryParameters2D::is_hit_from_inside_enabled);
-void PhysicsShapeQueryParameters2D::set_collision_mask(uint32_t p_collision_mask) {
- collision_mask = p_collision_mask;
+ ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "from"), "set_from", "get_from");
+ ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "to"), "set_to", "get_to");
+ ADD_PROPERTY(PropertyInfo(Variant::INT, "collision_mask", PROPERTY_HINT_LAYERS_2D_PHYSICS), "set_collision_mask", "get_collision_mask");
+ ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "exclude", PROPERTY_HINT_ARRAY_TYPE, "RID"), "set_exclude", "get_exclude");
+ ADD_PROPERTY(PropertyInfo(Variant::BOOL, "collide_with_bodies"), "set_collide_with_bodies", "is_collide_with_bodies_enabled");
+ ADD_PROPERTY(PropertyInfo(Variant::BOOL, "collide_with_areas"), "set_collide_with_areas", "is_collide_with_areas_enabled");
+ ADD_PROPERTY(PropertyInfo(Variant::BOOL, "hit_from_inside"), "set_hit_from_inside", "is_hit_from_inside_enabled");
}
-uint32_t PhysicsShapeQueryParameters2D::get_collision_mask() const {
- return collision_mask;
-}
+///////////////////////////////////////////////////////
-void PhysicsShapeQueryParameters2D::set_exclude(const Vector<RID> &p_exclude) {
- exclude.clear();
+void PhysicsPointQueryParameters2D::set_exclude(const Vector<RID> &p_exclude) {
+ parameters.exclude.clear();
for (int i = 0; i < p_exclude.size(); i++) {
- exclude.insert(p_exclude[i]);
+ parameters.exclude.insert(p_exclude[i]);
}
}
-Vector<RID> PhysicsShapeQueryParameters2D::get_exclude() const {
+Vector<RID> PhysicsPointQueryParameters2D::get_exclude() const {
Vector<RID> ret;
- ret.resize(exclude.size());
+ ret.resize(parameters.exclude.size());
int idx = 0;
- for (Set<RID>::Element *E = exclude.front(); E; E = E->next()) {
+ for (Set<RID>::Element *E = parameters.exclude.front(); E; E = E->next()) {
ret.write[idx++] = E->get();
}
return ret;
}
-void PhysicsShapeQueryParameters2D::set_collide_with_bodies(bool p_enable) {
- collide_with_bodies = p_enable;
+void PhysicsPointQueryParameters2D::_bind_methods() {
+ ClassDB::bind_method(D_METHOD("set_position", "position"), &PhysicsPointQueryParameters2D::set_position);
+ ClassDB::bind_method(D_METHOD("get_position"), &PhysicsPointQueryParameters2D::get_position);
+
+ ClassDB::bind_method(D_METHOD("set_canvas_instance_id", "canvas_instance_id"), &PhysicsPointQueryParameters2D::set_canvas_instance_id);
+ ClassDB::bind_method(D_METHOD("get_canvas_instance_id"), &PhysicsPointQueryParameters2D::get_canvas_instance_id);
+
+ ClassDB::bind_method(D_METHOD("set_collision_mask", "collision_mask"), &PhysicsPointQueryParameters2D::set_collision_mask);
+ ClassDB::bind_method(D_METHOD("get_collision_mask"), &PhysicsPointQueryParameters2D::get_collision_mask);
+
+ ClassDB::bind_method(D_METHOD("set_exclude", "exclude"), &PhysicsPointQueryParameters2D::set_exclude);
+ ClassDB::bind_method(D_METHOD("get_exclude"), &PhysicsPointQueryParameters2D::get_exclude);
+
+ ClassDB::bind_method(D_METHOD("set_collide_with_bodies", "enable"), &PhysicsPointQueryParameters2D::set_collide_with_bodies);
+ ClassDB::bind_method(D_METHOD("is_collide_with_bodies_enabled"), &PhysicsPointQueryParameters2D::is_collide_with_bodies_enabled);
+
+ ClassDB::bind_method(D_METHOD("set_collide_with_areas", "enable"), &PhysicsPointQueryParameters2D::set_collide_with_areas);
+ ClassDB::bind_method(D_METHOD("is_collide_with_areas_enabled"), &PhysicsPointQueryParameters2D::is_collide_with_areas_enabled);
+
+ ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "position"), "set_position", "get_position");
+ ADD_PROPERTY(PropertyInfo(Variant::INT, "canvas_instance_id", PROPERTY_HINT_OBJECT_ID), "set_canvas_instance_id", "get_canvas_instance_id");
+ ADD_PROPERTY(PropertyInfo(Variant::INT, "collision_mask", PROPERTY_HINT_LAYERS_2D_PHYSICS), "set_collision_mask", "get_collision_mask");
+ ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "exclude", PROPERTY_HINT_ARRAY_TYPE, "RID"), "set_exclude", "get_exclude");
+ ADD_PROPERTY(PropertyInfo(Variant::BOOL, "collide_with_bodies"), "set_collide_with_bodies", "is_collide_with_bodies_enabled");
+ ADD_PROPERTY(PropertyInfo(Variant::BOOL, "collide_with_areas"), "set_collide_with_areas", "is_collide_with_areas_enabled");
+}
+
+///////////////////////////////////////////////////////
+
+void PhysicsShapeQueryParameters2D::set_shape(const RES &p_shape_ref) {
+ ERR_FAIL_COND(p_shape_ref.is_null());
+ shape_ref = p_shape_ref;
+ parameters.shape_rid = p_shape_ref->get_rid();
}
-bool PhysicsShapeQueryParameters2D::is_collide_with_bodies_enabled() const {
- return collide_with_bodies;
+void PhysicsShapeQueryParameters2D::set_shape_rid(const RID &p_shape) {
+ if (parameters.shape_rid != p_shape) {
+ shape_ref = RES();
+ parameters.shape_rid = p_shape;
+ }
}
-void PhysicsShapeQueryParameters2D::set_collide_with_areas(bool p_enable) {
- collide_with_areas = p_enable;
+void PhysicsShapeQueryParameters2D::set_exclude(const Vector<RID> &p_exclude) {
+ parameters.exclude.clear();
+ for (int i = 0; i < p_exclude.size(); i++) {
+ parameters.exclude.insert(p_exclude[i]);
+ }
}
-bool PhysicsShapeQueryParameters2D::is_collide_with_areas_enabled() const {
- return collide_with_areas;
+Vector<RID> PhysicsShapeQueryParameters2D::get_exclude() const {
+ Vector<RID> ret;
+ ret.resize(parameters.exclude.size());
+ int idx = 0;
+ for (Set<RID>::Element *E = parameters.exclude.front(); E; E = E->next()) {
+ ret.write[idx++] = E->get();
+ }
+ return ret;
}
void PhysicsShapeQueryParameters2D::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_shape", "shape"), &PhysicsShapeQueryParameters2D::set_shape);
ClassDB::bind_method(D_METHOD("get_shape"), &PhysicsShapeQueryParameters2D::get_shape);
+
ClassDB::bind_method(D_METHOD("set_shape_rid", "shape"), &PhysicsShapeQueryParameters2D::set_shape_rid);
ClassDB::bind_method(D_METHOD("get_shape_rid"), &PhysicsShapeQueryParameters2D::get_shape_rid);
@@ -248,7 +291,7 @@ void PhysicsShapeQueryParameters2D::_bind_methods() {
ClassDB::bind_method(D_METHOD("is_collide_with_areas_enabled"), &PhysicsShapeQueryParameters2D::is_collide_with_areas_enabled);
ADD_PROPERTY(PropertyInfo(Variant::INT, "collision_mask", PROPERTY_HINT_LAYERS_2D_PHYSICS), "set_collision_mask", "get_collision_mask");
- ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "exclude", PROPERTY_HINT_NONE, itos(Variant::RID) + ":"), "set_exclude", "get_exclude");
+ ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "exclude", PROPERTY_HINT_ARRAY_TYPE, "RID"), "set_exclude", "get_exclude");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "margin", PROPERTY_HINT_RANGE, "0,100,0.01"), "set_margin", "get_margin");
ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "motion"), "set_motion", "get_motion");
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "shape", PROPERTY_HINT_RESOURCE_TYPE, "Shape2D"), "set_shape", "get_shape");
@@ -258,36 +301,58 @@ void PhysicsShapeQueryParameters2D::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "collide_with_areas"), "set_collide_with_areas", "is_collide_with_areas_enabled");
}
-Dictionary PhysicsDirectSpaceState2D::_intersect_ray(const Vector2 &p_from, const Vector2 &p_to, const Vector<RID> &p_exclude, uint32_t p_layers, bool p_collide_with_bodies, bool p_collide_with_areas) {
- RayResult inters;
- Set<RID> exclude;
- for (int i = 0; i < p_exclude.size(); i++) {
- exclude.insert(p_exclude[i]);
- }
+///////////////////////////////////////////////////////
- bool res = intersect_ray(p_from, p_to, inters, exclude, p_layers, p_collide_with_bodies, p_collide_with_areas);
+Dictionary PhysicsDirectSpaceState2D::_intersect_ray(const Ref<PhysicsRayQueryParameters2D> &p_ray_query) {
+ ERR_FAIL_COND_V(!p_ray_query.is_valid(), Dictionary());
+
+ RayResult result;
+ bool res = intersect_ray(p_ray_query->get_parameters(), result);
if (!res) {
return Dictionary();
}
Dictionary d;
- d["position"] = inters.position;
- d["normal"] = inters.normal;
- d["collider_id"] = inters.collider_id;
- d["collider"] = inters.collider;
- d["shape"] = inters.shape;
- d["rid"] = inters.rid;
+ d["position"] = result.position;
+ d["normal"] = result.normal;
+ d["collider_id"] = result.collider_id;
+ d["collider"] = result.collider;
+ d["shape"] = result.shape;
+ d["rid"] = result.rid;
return d;
}
+Array PhysicsDirectSpaceState2D::_intersect_point(const Ref<PhysicsPointQueryParameters2D> &p_point_query, int p_max_results) {
+ Vector<ShapeResult> ret;
+ ret.resize(p_max_results);
+
+ int rc = intersect_point(p_point_query->get_parameters(), ret.ptrw(), ret.size());
+
+ if (rc == 0) {
+ return Array();
+ }
+
+ Array r;
+ r.resize(rc);
+ for (int i = 0; i < rc; i++) {
+ Dictionary d;
+ d["rid"] = ret[i].rid;
+ d["collider_id"] = ret[i].collider_id;
+ d["collider"] = ret[i].collider;
+ d["shape"] = ret[i].shape;
+ r[i] = d;
+ }
+ return r;
+}
+
Array PhysicsDirectSpaceState2D::_intersect_shape(const Ref<PhysicsShapeQueryParameters2D> &p_shape_query, int p_max_results) {
ERR_FAIL_COND_V(!p_shape_query.is_valid(), Array());
Vector<ShapeResult> sr;
sr.resize(p_max_results);
- int rc = intersect_shape(p_shape_query->shape, p_shape_query->transform, p_shape_query->motion, p_shape_query->margin, sr.ptrw(), sr.size(), p_shape_query->exclude, p_shape_query->collision_mask, p_shape_query->collide_with_bodies, p_shape_query->collide_with_areas);
+ int rc = intersect_shape(p_shape_query->get_parameters(), sr.ptrw(), sr.size());
Array ret;
ret.resize(rc);
for (int i = 0; i < rc; i++) {
@@ -306,7 +371,7 @@ Array PhysicsDirectSpaceState2D::_cast_motion(const Ref<PhysicsShapeQueryParamet
ERR_FAIL_COND_V(!p_shape_query.is_valid(), Array());
real_t closest_safe, closest_unsafe;
- bool res = cast_motion(p_shape_query->shape, p_shape_query->transform, p_shape_query->motion, p_shape_query->margin, closest_safe, closest_unsafe, p_shape_query->exclude, p_shape_query->collision_mask, p_shape_query->collide_with_bodies, p_shape_query->collide_with_areas);
+ bool res = cast_motion(p_shape_query->get_parameters(), closest_safe, closest_unsafe);
if (!res) {
return Array();
}
@@ -317,54 +382,13 @@ Array PhysicsDirectSpaceState2D::_cast_motion(const Ref<PhysicsShapeQueryParamet
return ret;
}
-Array PhysicsDirectSpaceState2D::_intersect_point_impl(const Vector2 &p_point, int p_max_results, const Vector<RID> &p_exclude, uint32_t p_layers, bool p_collide_with_bodies, bool p_collide_with_areas, bool p_filter_by_canvas, ObjectID p_canvas_instance_id) {
- Set<RID> exclude;
- for (int i = 0; i < p_exclude.size(); i++) {
- exclude.insert(p_exclude[i]);
- }
-
- Vector<ShapeResult> ret;
- ret.resize(p_max_results);
-
- int rc;
- if (p_filter_by_canvas) {
- rc = intersect_point(p_point, ret.ptrw(), ret.size(), exclude, p_layers, p_collide_with_bodies, p_collide_with_areas);
- } else {
- rc = intersect_point_on_canvas(p_point, p_canvas_instance_id, ret.ptrw(), ret.size(), exclude, p_layers, p_collide_with_bodies, p_collide_with_areas);
- }
-
- if (rc == 0) {
- return Array();
- }
-
- Array r;
- r.resize(rc);
- for (int i = 0; i < rc; i++) {
- Dictionary d;
- d["rid"] = ret[i].rid;
- d["collider_id"] = ret[i].collider_id;
- d["collider"] = ret[i].collider;
- d["shape"] = ret[i].shape;
- r[i] = d;
- }
- return r;
-}
-
-Array PhysicsDirectSpaceState2D::_intersect_point(const Vector2 &p_point, int p_max_results, const Vector<RID> &p_exclude, uint32_t p_layers, bool p_collide_with_bodies, bool p_collide_with_areas) {
- return _intersect_point_impl(p_point, p_max_results, p_exclude, p_layers, p_collide_with_bodies, p_collide_with_areas);
-}
-
-Array PhysicsDirectSpaceState2D::_intersect_point_on_canvas(const Vector2 &p_point, ObjectID p_canvas_intance_id, int p_max_results, const Vector<RID> &p_exclude, uint32_t p_layers, bool p_collide_with_bodies, bool p_collide_with_areas) {
- return _intersect_point_impl(p_point, p_max_results, p_exclude, p_layers, p_collide_with_bodies, p_collide_with_areas, true, p_canvas_intance_id);
-}
-
Array PhysicsDirectSpaceState2D::_collide_shape(const Ref<PhysicsShapeQueryParameters2D> &p_shape_query, int p_max_results) {
ERR_FAIL_COND_V(!p_shape_query.is_valid(), Array());
Vector<Vector2> ret;
ret.resize(p_max_results * 2);
int rc = 0;
- bool res = collide_shape(p_shape_query->shape, p_shape_query->transform, p_shape_query->motion, p_shape_query->margin, ret.ptrw(), p_max_results, rc, p_shape_query->exclude, p_shape_query->collision_mask, p_shape_query->collide_with_bodies, p_shape_query->collide_with_areas);
+ bool res = collide_shape(p_shape_query->get_parameters(), ret.ptrw(), p_max_results, rc);
if (!res) {
return Array();
}
@@ -381,7 +405,7 @@ Dictionary PhysicsDirectSpaceState2D::_get_rest_info(const Ref<PhysicsShapeQuery
ShapeRestInfo sri;
- bool res = rest_info(p_shape_query->shape, p_shape_query->transform, p_shape_query->motion, p_shape_query->margin, &sri, p_shape_query->exclude, p_shape_query->collision_mask, p_shape_query->collide_with_bodies, p_shape_query->collide_with_areas);
+ bool res = rest_info(p_shape_query->get_parameters(), &sri);
Dictionary r;
if (!res) {
return r;
@@ -401,13 +425,12 @@ PhysicsDirectSpaceState2D::PhysicsDirectSpaceState2D() {
}
void PhysicsDirectSpaceState2D::_bind_methods() {
- ClassDB::bind_method(D_METHOD("intersect_point", "point", "max_results", "exclude", "collision_mask", "collide_with_bodies", "collide_with_areas"), &PhysicsDirectSpaceState2D::_intersect_point, DEFVAL(32), DEFVAL(Array()), DEFVAL(UINT32_MAX), DEFVAL(true), DEFVAL(false));
- ClassDB::bind_method(D_METHOD("intersect_point_on_canvas", "point", "canvas_instance_id", "max_results", "exclude", "collision_mask", "collide_with_bodies", "collide_with_areas"), &PhysicsDirectSpaceState2D::_intersect_point_on_canvas, DEFVAL(32), DEFVAL(Array()), DEFVAL(UINT32_MAX), DEFVAL(true), DEFVAL(false));
- ClassDB::bind_method(D_METHOD("intersect_ray", "from", "to", "exclude", "collision_mask", "collide_with_bodies", "collide_with_areas"), &PhysicsDirectSpaceState2D::_intersect_ray, DEFVAL(Array()), DEFVAL(UINT32_MAX), DEFVAL(true), DEFVAL(false));
- ClassDB::bind_method(D_METHOD("intersect_shape", "shape", "max_results"), &PhysicsDirectSpaceState2D::_intersect_shape, DEFVAL(32));
- ClassDB::bind_method(D_METHOD("cast_motion", "shape"), &PhysicsDirectSpaceState2D::_cast_motion);
- ClassDB::bind_method(D_METHOD("collide_shape", "shape", "max_results"), &PhysicsDirectSpaceState2D::_collide_shape, DEFVAL(32));
- ClassDB::bind_method(D_METHOD("get_rest_info", "shape"), &PhysicsDirectSpaceState2D::_get_rest_info);
+ ClassDB::bind_method(D_METHOD("intersect_point", "parameters", "max_results"), &PhysicsDirectSpaceState2D::_intersect_point, DEFVAL(32));
+ ClassDB::bind_method(D_METHOD("intersect_ray", "parameters"), &PhysicsDirectSpaceState2D::_intersect_ray);
+ ClassDB::bind_method(D_METHOD("intersect_shape", "parameters", "max_results"), &PhysicsDirectSpaceState2D::_intersect_shape, DEFVAL(32));
+ ClassDB::bind_method(D_METHOD("cast_motion", "parameters"), &PhysicsDirectSpaceState2D::_cast_motion);
+ ClassDB::bind_method(D_METHOD("collide_shape", "parameters", "max_results"), &PhysicsDirectSpaceState2D::_collide_shape, DEFVAL(32));
+ ClassDB::bind_method(D_METHOD("get_rest_info", "parameters"), &PhysicsDirectSpaceState2D::_get_rest_info);
}
///////////////////////////////
@@ -473,7 +496,7 @@ void PhysicsTestMotionParameters2D::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "motion"), "set_motion", "get_motion");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "margin"), "set_margin", "get_margin");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "collide_separation_ray"), "set_collide_separation_ray_enabled", "is_collide_separation_ray_enabled");
- ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "exclude_bodies"), "set_exclude_bodies", "get_exclude_bodies");
+ ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "exclude_bodies", PROPERTY_HINT_ARRAY_TYPE, "RID"), "set_exclude_bodies", "get_exclude_bodies");
ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "exclude_objects"), "set_exclude_objects", "get_exclude_objects");
}
@@ -586,9 +609,6 @@ void PhysicsServer2D::_bind_methods() {
ClassDB::bind_method(D_METHOD("area_set_space", "area", "space"), &PhysicsServer2D::area_set_space);
ClassDB::bind_method(D_METHOD("area_get_space", "area"), &PhysicsServer2D::area_get_space);
- ClassDB::bind_method(D_METHOD("area_set_space_override_mode", "area", "mode"), &PhysicsServer2D::area_set_space_override_mode);
- ClassDB::bind_method(D_METHOD("area_get_space_override_mode", "area"), &PhysicsServer2D::area_get_space_override_mode);
-
ClassDB::bind_method(D_METHOD("area_add_shape", "area", "shape", "transform", "disabled"), &PhysicsServer2D::area_add_shape, DEFVAL(Transform2D()), DEFVAL(false));
ClassDB::bind_method(D_METHOD("area_set_shape", "area", "shape_idx", "shape"), &PhysicsServer2D::area_set_shape);
ClassDB::bind_method(D_METHOD("area_set_shape_transform", "area", "shape_idx", "transform"), &PhysicsServer2D::area_set_shape_transform);
@@ -616,8 +636,8 @@ void PhysicsServer2D::_bind_methods() {
ClassDB::bind_method(D_METHOD("area_attach_canvas_instance_id", "area", "id"), &PhysicsServer2D::area_attach_canvas_instance_id);
ClassDB::bind_method(D_METHOD("area_get_canvas_instance_id", "area"), &PhysicsServer2D::area_get_canvas_instance_id);
- ClassDB::bind_method(D_METHOD("area_set_monitor_callback", "area", "receiver", "method"), &PhysicsServer2D::area_set_monitor_callback);
- ClassDB::bind_method(D_METHOD("area_set_area_monitor_callback", "area", "receiver", "method"), &PhysicsServer2D::area_set_area_monitor_callback);
+ ClassDB::bind_method(D_METHOD("area_set_monitor_callback", "area", "callback"), &PhysicsServer2D::area_set_monitor_callback);
+ ClassDB::bind_method(D_METHOD("area_set_area_monitor_callback", "area", "callback"), &PhysicsServer2D::area_set_area_monitor_callback);
ClassDB::bind_method(D_METHOD("area_set_monitorable", "area", "monitorable"), &PhysicsServer2D::area_set_monitorable);
ClassDB::bind_method(D_METHOD("body_create"), &PhysicsServer2D::body_create);
@@ -732,12 +752,15 @@ void PhysicsServer2D::_bind_methods() {
BIND_ENUM_CONSTANT(SHAPE_CONCAVE_POLYGON);
BIND_ENUM_CONSTANT(SHAPE_CUSTOM);
+ BIND_ENUM_CONSTANT(AREA_PARAM_GRAVITY_OVERRIDE_MODE);
BIND_ENUM_CONSTANT(AREA_PARAM_GRAVITY);
BIND_ENUM_CONSTANT(AREA_PARAM_GRAVITY_VECTOR);
BIND_ENUM_CONSTANT(AREA_PARAM_GRAVITY_IS_POINT);
BIND_ENUM_CONSTANT(AREA_PARAM_GRAVITY_DISTANCE_SCALE);
BIND_ENUM_CONSTANT(AREA_PARAM_GRAVITY_POINT_ATTENUATION);
+ BIND_ENUM_CONSTANT(AREA_PARAM_LINEAR_DAMP_OVERRIDE_MODE);
BIND_ENUM_CONSTANT(AREA_PARAM_LINEAR_DAMP);
+ BIND_ENUM_CONSTANT(AREA_PARAM_ANGULAR_DAMP_OVERRIDE_MODE);
BIND_ENUM_CONSTANT(AREA_PARAM_ANGULAR_DAMP);
BIND_ENUM_CONSTANT(AREA_PARAM_PRIORITY);
@@ -758,10 +781,15 @@ void PhysicsServer2D::_bind_methods() {
BIND_ENUM_CONSTANT(BODY_PARAM_INERTIA);
BIND_ENUM_CONSTANT(BODY_PARAM_CENTER_OF_MASS);
BIND_ENUM_CONSTANT(BODY_PARAM_GRAVITY_SCALE);
+ BIND_ENUM_CONSTANT(BODY_PARAM_LINEAR_DAMP_MODE);
+ BIND_ENUM_CONSTANT(BODY_PARAM_ANGULAR_DAMP_MODE);
BIND_ENUM_CONSTANT(BODY_PARAM_LINEAR_DAMP);
BIND_ENUM_CONSTANT(BODY_PARAM_ANGULAR_DAMP);
BIND_ENUM_CONSTANT(BODY_PARAM_MAX);
+ BIND_ENUM_CONSTANT(BODY_DAMP_MODE_COMBINE);
+ BIND_ENUM_CONSTANT(BODY_DAMP_MODE_REPLACE);
+
BIND_ENUM_CONSTANT(BODY_STATE_TRANSFORM);
BIND_ENUM_CONSTANT(BODY_STATE_LINEAR_VELOCITY);
BIND_ENUM_CONSTANT(BODY_STATE_ANGULAR_VELOCITY);
diff --git a/servers/physics_server_2d.h b/servers/physics_server_2d.h
index f83c57407d..2bff8f5dcb 100644
--- a/servers/physics_server_2d.h
+++ b/servers/physics_server_2d.h
@@ -49,6 +49,7 @@ public:
virtual real_t get_total_angular_damp() const = 0; // get density of this body space/area
virtual Vector2 get_center_of_mass() const = 0;
+ virtual Vector2 get_center_of_mass_local() const = 0;
virtual real_t get_inverse_mass() const = 0; // get the mass
virtual real_t get_inverse_inertia() const = 0; // get density of this body space
@@ -94,60 +95,15 @@ public:
PhysicsDirectBodyState2D();
};
-//used for script
-class PhysicsShapeQueryParameters2D : public RefCounted {
- GDCLASS(PhysicsShapeQueryParameters2D, RefCounted);
- friend class PhysicsDirectSpaceState2D;
-
- RES shape_ref;
- RID shape;
- Transform2D transform;
- Vector2 motion;
- real_t margin = 0.0;
- Set<RID> exclude;
- uint32_t collision_mask = UINT32_MAX;
-
- bool collide_with_bodies = true;
- bool collide_with_areas = false;
-
-protected:
- static void _bind_methods();
-
-public:
- void set_shape(const RES &p_shape_ref);
- RES get_shape() const;
- void set_shape_rid(const RID &p_shape);
- RID get_shape_rid() const;
-
- void set_transform(const Transform2D &p_transform);
- Transform2D get_transform() const;
-
- void set_motion(const Vector2 &p_motion);
- Vector2 get_motion() const;
-
- void set_margin(real_t p_margin);
- real_t get_margin() const;
-
- void set_collision_mask(uint32_t p_mask);
- uint32_t get_collision_mask() const;
-
- void set_collide_with_bodies(bool p_enable);
- bool is_collide_with_bodies_enabled() const;
-
- void set_collide_with_areas(bool p_enable);
- bool is_collide_with_areas_enabled() const;
-
- void set_exclude(const Vector<RID> &p_exclude);
- Vector<RID> get_exclude() const;
-};
+class PhysicsRayQueryParameters2D;
+class PhysicsPointQueryParameters2D;
+class PhysicsShapeQueryParameters2D;
class PhysicsDirectSpaceState2D : public Object {
GDCLASS(PhysicsDirectSpaceState2D, Object);
- Dictionary _intersect_ray(const Vector2 &p_from, const Vector2 &p_to, const Vector<RID> &p_exclude = Vector<RID>(), uint32_t p_layers = 0, bool p_collide_with_bodies = true, bool p_collide_with_areas = false);
- Array _intersect_point(const Vector2 &p_point, int p_max_results = 32, const Vector<RID> &p_exclude = Vector<RID>(), uint32_t p_layers = 0, bool p_collide_with_bodies = true, bool p_collide_with_areas = false);
- Array _intersect_point_on_canvas(const Vector2 &p_point, ObjectID p_canvas_intance_id, int p_max_results = 32, const Vector<RID> &p_exclude = Vector<RID>(), uint32_t p_layers = 0, bool p_collide_with_bodies = true, bool p_collide_with_areas = false);
- Array _intersect_point_impl(const Vector2 &p_point, int p_max_results, const Vector<RID> &p_exclud, uint32_t p_layers, bool p_collide_with_bodies, bool p_collide_with_areas, bool p_filter_by_canvas = false, ObjectID p_canvas_instance_id = ObjectID());
+ Dictionary _intersect_ray(const Ref<PhysicsRayQueryParameters2D> &p_ray_query);
+ Array _intersect_point(const Ref<PhysicsPointQueryParameters2D> &p_point_query, int p_max_results = 32);
Array _intersect_shape(const Ref<PhysicsShapeQueryParameters2D> &p_shape_query, int p_max_results = 32);
Array _cast_motion(const Ref<PhysicsShapeQueryParameters2D> &p_shape_query);
Array _collide_shape(const Ref<PhysicsShapeQueryParameters2D> &p_shape_query, int p_max_results = 32);
@@ -157,6 +113,18 @@ protected:
static void _bind_methods();
public:
+ struct RayParameters {
+ Vector2 from;
+ Vector2 to;
+ Set<RID> exclude;
+ uint32_t collision_mask = UINT32_MAX;
+
+ bool collide_with_bodies = true;
+ bool collide_with_areas = false;
+
+ bool hit_from_inside = false;
+ };
+
struct RayResult {
Vector2 position;
Vector2 normal;
@@ -166,7 +134,7 @@ public:
int shape = 0;
};
- virtual bool intersect_ray(const Vector2 &p_from, const Vector2 &p_to, RayResult &r_result, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_layer = UINT32_MAX, bool p_collide_with_bodies = true, bool p_collide_with_areas = false) = 0;
+ virtual bool intersect_ray(const RayParameters &p_parameters, RayResult &r_result) = 0;
struct ShapeResult {
RID rid;
@@ -175,14 +143,31 @@ public:
int shape = 0;
};
- virtual int intersect_point(const Vector2 &p_point, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_layer = UINT32_MAX, bool p_collide_with_bodies = true, bool p_collide_with_areas = false, bool p_pick_point = false) = 0;
- virtual int intersect_point_on_canvas(const Vector2 &p_point, ObjectID p_canvas_instance_id, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_layer = UINT32_MAX, bool p_collide_with_bodies = true, bool p_collide_with_areas = false, bool p_pick_point = false) = 0;
+ struct PointParameters {
+ Vector2 position;
+ ObjectID canvas_instance_id;
+ Set<RID> exclude;
+ uint32_t collision_mask = UINT32_MAX;
+
+ bool collide_with_bodies = true;
+ bool collide_with_areas = false;
- virtual int intersect_shape(const RID &p_shape, const Transform2D &p_xform, const Vector2 &p_motion, real_t p_margin, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_layer = UINT32_MAX, bool p_collide_with_bodies = true, bool p_collide_with_areas = false) = 0;
+ bool pick_point = false;
+ };
+
+ virtual int intersect_point(const PointParameters &p_parameters, ShapeResult *r_results, int p_result_max) = 0;
- virtual bool cast_motion(const RID &p_shape, const Transform2D &p_xform, const Vector2 &p_motion, real_t p_margin, real_t &p_closest_safe, real_t &p_closest_unsafe, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_layer = UINT32_MAX, bool p_collide_with_bodies = true, bool p_collide_with_areas = false) = 0;
+ struct ShapeParameters {
+ RID shape_rid;
+ Transform2D transform;
+ Vector2 motion;
+ real_t margin = 0.0;
+ Set<RID> exclude;
+ uint32_t collision_mask = UINT32_MAX;
- virtual bool collide_shape(RID p_shape, const Transform2D &p_shape_xform, const Vector2 &p_motion, real_t p_margin, Vector2 *r_results, int p_result_max, int &r_result_count, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_layer = UINT32_MAX, bool p_collide_with_bodies = true, bool p_collide_with_areas = false) = 0;
+ bool collide_with_bodies = true;
+ bool collide_with_areas = false;
+ };
struct ShapeRestInfo {
Vector2 point;
@@ -190,10 +175,13 @@ public:
RID rid;
ObjectID collider_id;
int shape = 0;
- Vector2 linear_velocity; //velocity at contact point
+ Vector2 linear_velocity; // Velocity at contact point.
};
- virtual bool rest_info(RID p_shape, const Transform2D &p_shape_xform, const Vector2 &p_motion, real_t p_margin, ShapeRestInfo *r_info, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_layer = UINT32_MAX, bool p_collide_with_bodies = true, bool p_collide_with_areas = false) = 0;
+ virtual int intersect_shape(const ShapeParameters &p_parameters, ShapeResult *r_results, int p_result_max) = 0;
+ virtual bool cast_motion(const ShapeParameters &p_parameters, real_t &p_closest_safe, real_t &p_closest_unsafe) = 0;
+ virtual bool collide_shape(const ShapeParameters &p_parameters, Vector2 *r_results, int p_result_max, int &r_result_count) = 0;
+ virtual bool rest_info(const ShapeParameters &p_parameters, ShapeRestInfo *r_info) = 0;
PhysicsDirectSpaceState2D();
};
@@ -278,12 +266,15 @@ public:
//missing attenuation? missing better override?
enum AreaParameter {
+ AREA_PARAM_GRAVITY_OVERRIDE_MODE,
AREA_PARAM_GRAVITY,
AREA_PARAM_GRAVITY_VECTOR,
AREA_PARAM_GRAVITY_IS_POINT,
AREA_PARAM_GRAVITY_DISTANCE_SCALE,
AREA_PARAM_GRAVITY_POINT_ATTENUATION,
+ AREA_PARAM_LINEAR_DAMP_OVERRIDE_MODE,
AREA_PARAM_LINEAR_DAMP,
+ AREA_PARAM_ANGULAR_DAMP_OVERRIDE_MODE,
AREA_PARAM_ANGULAR_DAMP,
AREA_PARAM_PRIORITY
};
@@ -301,9 +292,6 @@ public:
AREA_SPACE_OVERRIDE_REPLACE_COMBINE // Discards all previous calculations, then keeps combining
};
- virtual void area_set_space_override_mode(RID p_area, AreaSpaceOverrideMode p_mode) = 0;
- virtual AreaSpaceOverrideMode area_get_space_override_mode(RID p_area) const = 0;
-
virtual void area_add_shape(RID p_area, RID p_shape, const Transform2D &p_transform = Transform2D(), bool p_disabled = false) = 0;
virtual void area_set_shape(RID p_area, int p_shape_idx, RID p_shape) = 0;
virtual void area_set_shape_transform(RID p_area, int p_shape_idx, const Transform2D &p_transform) = 0;
@@ -335,8 +323,8 @@ public:
virtual void area_set_monitorable(RID p_area, bool p_monitorable) = 0;
virtual void area_set_pickable(RID p_area, bool p_pickable) = 0;
- virtual void area_set_monitor_callback(RID p_area, Object *p_receiver, const StringName &p_method) = 0;
- virtual void area_set_area_monitor_callback(RID p_area, Object *p_receiver, const StringName &p_method) = 0;
+ virtual void area_set_monitor_callback(RID p_area, const Callable &p_callback) = 0;
+ virtual void area_set_area_monitor_callback(RID p_area, const Callable &p_callback) = 0;
/* BODY API */
@@ -400,11 +388,18 @@ public:
BODY_PARAM_INERTIA,
BODY_PARAM_CENTER_OF_MASS,
BODY_PARAM_GRAVITY_SCALE,
+ BODY_PARAM_LINEAR_DAMP_MODE,
+ BODY_PARAM_ANGULAR_DAMP_MODE,
BODY_PARAM_LINEAR_DAMP,
BODY_PARAM_ANGULAR_DAMP,
BODY_PARAM_MAX,
};
+ enum BodyDampMode {
+ BODY_DAMP_MODE_COMBINE,
+ BODY_DAMP_MODE_REPLACE,
+ };
+
virtual void body_set_param(RID p_body, BodyParameter p_param, const Variant &p_value) = 0;
virtual Variant body_get_param(RID p_body, BodyParameter p_param) const = 0;
@@ -585,6 +580,110 @@ public:
~PhysicsServer2D();
};
+class PhysicsRayQueryParameters2D : public RefCounted {
+ GDCLASS(PhysicsRayQueryParameters2D, RefCounted);
+
+ PhysicsDirectSpaceState2D::RayParameters parameters;
+
+protected:
+ static void _bind_methods();
+
+public:
+ const PhysicsDirectSpaceState2D::RayParameters &get_parameters() const { return parameters; }
+
+ void set_from(const Vector2 &p_from) { parameters.from = p_from; }
+ const Vector2 &get_from() const { return parameters.from; }
+
+ void set_to(const Vector2 &p_to) { parameters.to = p_to; }
+ const Vector2 &get_to() const { return parameters.to; }
+
+ void set_collision_mask(uint32_t p_mask) { parameters.collision_mask = p_mask; }
+ uint32_t get_collision_mask() const { return parameters.collision_mask; }
+
+ void set_collide_with_bodies(bool p_enable) { parameters.collide_with_bodies = p_enable; }
+ bool is_collide_with_bodies_enabled() const { return parameters.collide_with_bodies; }
+
+ void set_collide_with_areas(bool p_enable) { parameters.collide_with_areas = p_enable; }
+ bool is_collide_with_areas_enabled() const { return parameters.collide_with_areas; }
+
+ void set_hit_from_inside(bool p_enable) { parameters.hit_from_inside = p_enable; }
+ bool is_hit_from_inside_enabled() const { return parameters.hit_from_inside; }
+
+ void set_exclude(const Vector<RID> &p_exclude);
+ Vector<RID> get_exclude() const;
+};
+
+class PhysicsPointQueryParameters2D : public RefCounted {
+ GDCLASS(PhysicsPointQueryParameters2D, RefCounted);
+
+ PhysicsDirectSpaceState2D::PointParameters parameters;
+
+protected:
+ static void _bind_methods();
+
+public:
+ const PhysicsDirectSpaceState2D::PointParameters &get_parameters() const { return parameters; }
+
+ void set_position(const Vector2 &p_position) { parameters.position = p_position; }
+ const Vector2 &get_position() const { return parameters.position; }
+
+ void set_canvas_instance_id(ObjectID p_canvas_instance_id) { parameters.canvas_instance_id = p_canvas_instance_id; }
+ ObjectID get_canvas_instance_id() const { return parameters.canvas_instance_id; }
+
+ void set_collision_mask(uint32_t p_mask) { parameters.collision_mask = p_mask; }
+ uint32_t get_collision_mask() const { return parameters.collision_mask; }
+
+ void set_collide_with_bodies(bool p_enable) { parameters.collide_with_bodies = p_enable; }
+ bool is_collide_with_bodies_enabled() const { return parameters.collide_with_bodies; }
+
+ void set_collide_with_areas(bool p_enable) { parameters.collide_with_areas = p_enable; }
+ bool is_collide_with_areas_enabled() const { return parameters.collide_with_areas; }
+
+ void set_exclude(const Vector<RID> &p_exclude);
+ Vector<RID> get_exclude() const;
+};
+
+class PhysicsShapeQueryParameters2D : public RefCounted {
+ GDCLASS(PhysicsShapeQueryParameters2D, RefCounted);
+
+ PhysicsDirectSpaceState2D::ShapeParameters parameters;
+
+ RES shape_ref;
+
+protected:
+ static void _bind_methods();
+
+public:
+ const PhysicsDirectSpaceState2D::ShapeParameters &get_parameters() const { return parameters; }
+
+ void set_shape(const RES &p_shape_ref);
+ RES get_shape() const { return shape_ref; }
+
+ void set_shape_rid(const RID &p_shape);
+ RID get_shape_rid() const { return parameters.shape_rid; }
+
+ void set_transform(const Transform2D &p_transform) { parameters.transform = p_transform; }
+ const Transform2D &get_transform() const { return parameters.transform; }
+
+ void set_motion(const Vector2 &p_motion) { parameters.motion = p_motion; }
+ const Vector2 &get_motion() const { return parameters.motion; }
+
+ void set_margin(real_t p_margin) { parameters.margin = p_margin; }
+ real_t get_margin() const { return parameters.margin; }
+
+ void set_collision_mask(uint32_t p_mask) { parameters.collision_mask = p_mask; }
+ uint32_t get_collision_mask() const { return parameters.collision_mask; }
+
+ void set_collide_with_bodies(bool p_enable) { parameters.collide_with_bodies = p_enable; }
+ bool is_collide_with_bodies_enabled() const { return parameters.collide_with_bodies; }
+
+ void set_collide_with_areas(bool p_enable) { parameters.collide_with_areas = p_enable; }
+ bool is_collide_with_areas_enabled() const { return parameters.collide_with_areas; }
+
+ void set_exclude(const Vector<RID> &p_exclude);
+ Vector<RID> get_exclude() const;
+};
+
class PhysicsTestMotionParameters2D : public RefCounted {
GDCLASS(PhysicsTestMotionParameters2D, RefCounted);
@@ -692,12 +791,12 @@ VARIANT_ENUM_CAST(PhysicsServer2D::AreaParameter);
VARIANT_ENUM_CAST(PhysicsServer2D::AreaSpaceOverrideMode);
VARIANT_ENUM_CAST(PhysicsServer2D::BodyMode);
VARIANT_ENUM_CAST(PhysicsServer2D::BodyParameter);
+VARIANT_ENUM_CAST(PhysicsServer2D::BodyDampMode);
VARIANT_ENUM_CAST(PhysicsServer2D::BodyState);
VARIANT_ENUM_CAST(PhysicsServer2D::CCDMode);
VARIANT_ENUM_CAST(PhysicsServer2D::JointParam);
VARIANT_ENUM_CAST(PhysicsServer2D::JointType);
VARIANT_ENUM_CAST(PhysicsServer2D::DampedSpringParam);
-//VARIANT_ENUM_CAST( PhysicsServer2D::ObjectType );
VARIANT_ENUM_CAST(PhysicsServer2D::AreaBodyStatus);
VARIANT_ENUM_CAST(PhysicsServer2D::ProcessInfo);
diff --git a/servers/physics_server_2d_wrap_mt.h b/servers/physics_server_2d_wrap_mt.h
index 4a2f07ab1e..dda4eb6ffa 100644
--- a/servers/physics_server_2d_wrap_mt.h
+++ b/servers/physics_server_2d_wrap_mt.h
@@ -133,9 +133,6 @@ public:
FUNC2(area_set_space, RID, RID);
FUNC1RC(RID, area_get_space, RID);
- FUNC2(area_set_space_override_mode, RID, AreaSpaceOverrideMode);
- FUNC1RC(AreaSpaceOverrideMode, area_get_space_override_mode, RID);
-
FUNC4(area_add_shape, RID, RID, const Transform2D &, bool);
FUNC3(area_set_shape, RID, int, RID);
FUNC3(area_set_shape_transform, RID, int, const Transform2D &);
@@ -165,8 +162,8 @@ public:
FUNC2(area_set_monitorable, RID, bool);
FUNC2(area_set_pickable, RID, bool);
- FUNC3(area_set_monitor_callback, RID, Object *, const StringName &);
- FUNC3(area_set_area_monitor_callback, RID, Object *, const StringName &);
+ FUNC2(area_set_monitor_callback, RID, const Callable &);
+ FUNC2(area_set_area_monitor_callback, RID, const Callable &);
/* BODY API */
diff --git a/servers/physics_server_3d.cpp b/servers/physics_server_3d.cpp
index 90922cc250..373f216e01 100644
--- a/servers/physics_server_3d.cpp
+++ b/servers/physics_server_3d.cpp
@@ -77,6 +77,7 @@ void PhysicsDirectBodyState3D::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_total_angular_damp"), &PhysicsDirectBodyState3D::get_total_angular_damp);
ClassDB::bind_method(D_METHOD("get_center_of_mass"), &PhysicsDirectBodyState3D::get_center_of_mass);
+ ClassDB::bind_method(D_METHOD("get_center_of_mass_local"), &PhysicsDirectBodyState3D::get_center_of_mass_local);
ClassDB::bind_method(D_METHOD("get_principal_inertia_axes"), &PhysicsDirectBodyState3D::get_principal_inertia_axes);
ClassDB::bind_method(D_METHOD("get_inverse_mass"), &PhysicsDirectBodyState3D::get_inverse_mass);
@@ -126,6 +127,7 @@ void PhysicsDirectBodyState3D::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "inverse_inertia"), "", "get_inverse_inertia");
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "total_gravity"), "", "get_total_gravity");
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "center_of_mass"), "", "get_center_of_mass");
+ ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "center_of_mass_local"), "", "get_center_of_mass_local");
ADD_PROPERTY(PropertyInfo(Variant::BASIS, "principal_inertia_axes"), "", "get_principal_inertia_axes");
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "angular_velocity"), "set_angular_velocity", "get_angular_velocity");
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "linear_velocity"), "set_linear_velocity", "get_linear_velocity");
@@ -137,93 +139,145 @@ PhysicsDirectBodyState3D::PhysicsDirectBodyState3D() {}
///////////////////////////////////////////////////////
-void PhysicsShapeQueryParameters3D::set_shape(const RES &p_shape_ref) {
- ERR_FAIL_COND(p_shape_ref.is_null());
- shape_ref = p_shape_ref;
- shape = p_shape_ref->get_rid();
-}
-
-RES PhysicsShapeQueryParameters3D::get_shape() const {
- return shape_ref;
+void PhysicsRayQueryParameters3D::set_exclude(const Vector<RID> &p_exclude) {
+ parameters.exclude.clear();
+ for (int i = 0; i < p_exclude.size(); i++) {
+ parameters.exclude.insert(p_exclude[i]);
+ }
}
-void PhysicsShapeQueryParameters3D::set_shape_rid(const RID &p_shape) {
- if (shape != p_shape) {
- shape_ref = RES();
- shape = p_shape;
+Vector<RID> PhysicsRayQueryParameters3D::get_exclude() const {
+ Vector<RID> ret;
+ ret.resize(parameters.exclude.size());
+ int idx = 0;
+ for (Set<RID>::Element *E = parameters.exclude.front(); E; E = E->next()) {
+ ret.write[idx++] = E->get();
}
+ return ret;
}
-RID PhysicsShapeQueryParameters3D::get_shape_rid() const {
- return shape;
-}
+void PhysicsRayQueryParameters3D::_bind_methods() {
+ ClassDB::bind_method(D_METHOD("set_from", "from"), &PhysicsRayQueryParameters3D::set_from);
+ ClassDB::bind_method(D_METHOD("get_from"), &PhysicsRayQueryParameters3D::get_from);
-void PhysicsShapeQueryParameters3D::set_transform(const Transform3D &p_transform) {
- transform = p_transform;
-}
+ ClassDB::bind_method(D_METHOD("set_to", "to"), &PhysicsRayQueryParameters3D::set_to);
+ ClassDB::bind_method(D_METHOD("get_to"), &PhysicsRayQueryParameters3D::get_to);
-Transform3D PhysicsShapeQueryParameters3D::get_transform() const {
- return transform;
-}
+ ClassDB::bind_method(D_METHOD("set_collision_mask", "collision_mask"), &PhysicsRayQueryParameters3D::set_collision_mask);
+ ClassDB::bind_method(D_METHOD("get_collision_mask"), &PhysicsRayQueryParameters3D::get_collision_mask);
-void PhysicsShapeQueryParameters3D::set_margin(real_t p_margin) {
- margin = p_margin;
-}
+ ClassDB::bind_method(D_METHOD("set_exclude", "exclude"), &PhysicsRayQueryParameters3D::set_exclude);
+ ClassDB::bind_method(D_METHOD("get_exclude"), &PhysicsRayQueryParameters3D::get_exclude);
-real_t PhysicsShapeQueryParameters3D::get_margin() const {
- return margin;
-}
+ ClassDB::bind_method(D_METHOD("set_collide_with_bodies", "enable"), &PhysicsRayQueryParameters3D::set_collide_with_bodies);
+ ClassDB::bind_method(D_METHOD("is_collide_with_bodies_enabled"), &PhysicsRayQueryParameters3D::is_collide_with_bodies_enabled);
-void PhysicsShapeQueryParameters3D::set_collision_mask(uint32_t p_collision_mask) {
- collision_mask = p_collision_mask;
-}
+ ClassDB::bind_method(D_METHOD("set_collide_with_areas", "enable"), &PhysicsRayQueryParameters3D::set_collide_with_areas);
+ ClassDB::bind_method(D_METHOD("is_collide_with_areas_enabled"), &PhysicsRayQueryParameters3D::is_collide_with_areas_enabled);
-uint32_t PhysicsShapeQueryParameters3D::get_collision_mask() const {
- return collision_mask;
+ ClassDB::bind_method(D_METHOD("set_hit_from_inside", "enable"), &PhysicsRayQueryParameters3D::set_hit_from_inside);
+ ClassDB::bind_method(D_METHOD("is_hit_from_inside_enabled"), &PhysicsRayQueryParameters3D::is_hit_from_inside_enabled);
+
+ ClassDB::bind_method(D_METHOD("set_hit_back_faces", "enable"), &PhysicsRayQueryParameters3D::set_hit_back_faces);
+ ClassDB::bind_method(D_METHOD("is_hit_back_faces_enabled"), &PhysicsRayQueryParameters3D::is_hit_back_faces_enabled);
+
+ ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "from"), "set_from", "get_from");
+ ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "to"), "set_to", "get_to");
+ ADD_PROPERTY(PropertyInfo(Variant::INT, "collision_mask", PROPERTY_HINT_LAYERS_3D_PHYSICS), "set_collision_mask", "get_collision_mask");
+ ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "exclude", PROPERTY_HINT_ARRAY_TYPE, "RID"), "set_exclude", "get_exclude");
+ ADD_PROPERTY(PropertyInfo(Variant::BOOL, "collide_with_bodies"), "set_collide_with_bodies", "is_collide_with_bodies_enabled");
+ ADD_PROPERTY(PropertyInfo(Variant::BOOL, "collide_with_areas"), "set_collide_with_areas", "is_collide_with_areas_enabled");
+ ADD_PROPERTY(PropertyInfo(Variant::BOOL, "hit_from_inside"), "set_hit_from_inside", "is_hit_from_inside_enabled");
+ ADD_PROPERTY(PropertyInfo(Variant::BOOL, "hit_back_faces"), "set_hit_back_faces", "is_hit_back_faces_enabled");
}
-void PhysicsShapeQueryParameters3D::set_exclude(const Vector<RID> &p_exclude) {
- exclude.clear();
+///////////////////////////////////////////////////////
+
+void PhysicsPointQueryParameters3D::set_exclude(const Vector<RID> &p_exclude) {
+ parameters.exclude.clear();
for (int i = 0; i < p_exclude.size(); i++) {
- exclude.insert(p_exclude[i]);
+ parameters.exclude.insert(p_exclude[i]);
}
}
-Vector<RID> PhysicsShapeQueryParameters3D::get_exclude() const {
+Vector<RID> PhysicsPointQueryParameters3D::get_exclude() const {
Vector<RID> ret;
- ret.resize(exclude.size());
+ ret.resize(parameters.exclude.size());
int idx = 0;
- for (Set<RID>::Element *E = exclude.front(); E; E = E->next()) {
+ for (Set<RID>::Element *E = parameters.exclude.front(); E; E = E->next()) {
ret.write[idx++] = E->get();
}
return ret;
}
-void PhysicsShapeQueryParameters3D::set_collide_with_bodies(bool p_enable) {
- collide_with_bodies = p_enable;
+void PhysicsPointQueryParameters3D::_bind_methods() {
+ ClassDB::bind_method(D_METHOD("set_position", "position"), &PhysicsPointQueryParameters3D::set_position);
+ ClassDB::bind_method(D_METHOD("get_position"), &PhysicsPointQueryParameters3D::get_position);
+
+ ClassDB::bind_method(D_METHOD("set_collision_mask", "collision_mask"), &PhysicsPointQueryParameters3D::set_collision_mask);
+ ClassDB::bind_method(D_METHOD("get_collision_mask"), &PhysicsPointQueryParameters3D::get_collision_mask);
+
+ ClassDB::bind_method(D_METHOD("set_exclude", "exclude"), &PhysicsPointQueryParameters3D::set_exclude);
+ ClassDB::bind_method(D_METHOD("get_exclude"), &PhysicsPointQueryParameters3D::get_exclude);
+
+ ClassDB::bind_method(D_METHOD("set_collide_with_bodies", "enable"), &PhysicsPointQueryParameters3D::set_collide_with_bodies);
+ ClassDB::bind_method(D_METHOD("is_collide_with_bodies_enabled"), &PhysicsPointQueryParameters3D::is_collide_with_bodies_enabled);
+
+ ClassDB::bind_method(D_METHOD("set_collide_with_areas", "enable"), &PhysicsPointQueryParameters3D::set_collide_with_areas);
+ ClassDB::bind_method(D_METHOD("is_collide_with_areas_enabled"), &PhysicsPointQueryParameters3D::is_collide_with_areas_enabled);
+
+ ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "position"), "set_position", "get_position");
+ ADD_PROPERTY(PropertyInfo(Variant::INT, "collision_mask", PROPERTY_HINT_LAYERS_3D_PHYSICS), "set_collision_mask", "get_collision_mask");
+ ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "exclude", PROPERTY_HINT_ARRAY_TYPE, "RID"), "set_exclude", "get_exclude");
+ ADD_PROPERTY(PropertyInfo(Variant::BOOL, "collide_with_bodies"), "set_collide_with_bodies", "is_collide_with_bodies_enabled");
+ ADD_PROPERTY(PropertyInfo(Variant::BOOL, "collide_with_areas"), "set_collide_with_areas", "is_collide_with_areas_enabled");
}
-bool PhysicsShapeQueryParameters3D::is_collide_with_bodies_enabled() const {
- return collide_with_bodies;
+///////////////////////////////////////////////////////
+
+void PhysicsShapeQueryParameters3D::set_shape(const RES &p_shape_ref) {
+ ERR_FAIL_COND(p_shape_ref.is_null());
+ shape_ref = p_shape_ref;
+ parameters.shape_rid = p_shape_ref->get_rid();
+}
+
+void PhysicsShapeQueryParameters3D::set_shape_rid(const RID &p_shape) {
+ if (parameters.shape_rid != p_shape) {
+ shape_ref = RES();
+ parameters.shape_rid = p_shape;
+ }
}
-void PhysicsShapeQueryParameters3D::set_collide_with_areas(bool p_enable) {
- collide_with_areas = p_enable;
+void PhysicsShapeQueryParameters3D::set_exclude(const Vector<RID> &p_exclude) {
+ parameters.exclude.clear();
+ for (int i = 0; i < p_exclude.size(); i++) {
+ parameters.exclude.insert(p_exclude[i]);
+ }
}
-bool PhysicsShapeQueryParameters3D::is_collide_with_areas_enabled() const {
- return collide_with_areas;
+Vector<RID> PhysicsShapeQueryParameters3D::get_exclude() const {
+ Vector<RID> ret;
+ ret.resize(parameters.exclude.size());
+ int idx = 0;
+ for (Set<RID>::Element *E = parameters.exclude.front(); E; E = E->next()) {
+ ret.write[idx++] = E->get();
+ }
+ return ret;
}
void PhysicsShapeQueryParameters3D::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_shape", "shape"), &PhysicsShapeQueryParameters3D::set_shape);
ClassDB::bind_method(D_METHOD("get_shape"), &PhysicsShapeQueryParameters3D::get_shape);
+
ClassDB::bind_method(D_METHOD("set_shape_rid", "shape"), &PhysicsShapeQueryParameters3D::set_shape_rid);
ClassDB::bind_method(D_METHOD("get_shape_rid"), &PhysicsShapeQueryParameters3D::get_shape_rid);
ClassDB::bind_method(D_METHOD("set_transform", "transform"), &PhysicsShapeQueryParameters3D::set_transform);
ClassDB::bind_method(D_METHOD("get_transform"), &PhysicsShapeQueryParameters3D::get_transform);
+ ClassDB::bind_method(D_METHOD("set_motion", "motion"), &PhysicsShapeQueryParameters3D::set_motion);
+ ClassDB::bind_method(D_METHOD("get_motion"), &PhysicsShapeQueryParameters3D::get_motion);
+
ClassDB::bind_method(D_METHOD("set_margin", "margin"), &PhysicsShapeQueryParameters3D::set_margin);
ClassDB::bind_method(D_METHOD("get_margin"), &PhysicsShapeQueryParameters3D::get_margin);
@@ -240,8 +294,9 @@ void PhysicsShapeQueryParameters3D::_bind_methods() {
ClassDB::bind_method(D_METHOD("is_collide_with_areas_enabled"), &PhysicsShapeQueryParameters3D::is_collide_with_areas_enabled);
ADD_PROPERTY(PropertyInfo(Variant::INT, "collision_mask", PROPERTY_HINT_LAYERS_3D_PHYSICS), "set_collision_mask", "get_collision_mask");
- ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "exclude", PROPERTY_HINT_NONE, itos(Variant::RID) + ":"), "set_exclude", "get_exclude");
+ ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "exclude", PROPERTY_HINT_ARRAY_TYPE, "RID"), "set_exclude", "get_exclude");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "margin", PROPERTY_HINT_RANGE, "0,100,0.01"), "set_margin", "get_margin");
+ ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "motion"), "set_motion", "get_motion");
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "shape", PROPERTY_HINT_RESOURCE_TYPE, "Shape3D"), "set_shape", "get_shape");
ADD_PROPERTY(PropertyInfo(Variant::RID, "shape_rid"), "set_shape_rid", "get_shape_rid");
ADD_PROPERTY(PropertyInfo(Variant::TRANSFORM3D, "transform"), "set_transform", "get_transform");
@@ -251,36 +306,56 @@ void PhysicsShapeQueryParameters3D::_bind_methods() {
/////////////////////////////////////
-Dictionary PhysicsDirectSpaceState3D::_intersect_ray(const Vector3 &p_from, const Vector3 &p_to, const Vector<RID> &p_exclude, uint32_t p_collision_mask, bool p_collide_with_bodies, bool p_collide_with_areas) {
- RayResult inters;
- Set<RID> exclude;
- for (int i = 0; i < p_exclude.size(); i++) {
- exclude.insert(p_exclude[i]);
- }
+Dictionary PhysicsDirectSpaceState3D::_intersect_ray(const Ref<PhysicsRayQueryParameters3D> &p_ray_query) {
+ ERR_FAIL_COND_V(!p_ray_query.is_valid(), Dictionary());
- bool res = intersect_ray(p_from, p_to, inters, exclude, p_collision_mask, p_collide_with_bodies, p_collide_with_areas);
+ RayResult result;
+ bool res = intersect_ray(p_ray_query->get_parameters(), result);
if (!res) {
return Dictionary();
}
Dictionary d;
- d["position"] = inters.position;
- d["normal"] = inters.normal;
- d["collider_id"] = inters.collider_id;
- d["collider"] = inters.collider;
- d["shape"] = inters.shape;
- d["rid"] = inters.rid;
+ d["position"] = result.position;
+ d["normal"] = result.normal;
+ d["collider_id"] = result.collider_id;
+ d["collider"] = result.collider;
+ d["shape"] = result.shape;
+ d["rid"] = result.rid;
return d;
}
+Array PhysicsDirectSpaceState3D::_intersect_point(const Ref<PhysicsPointQueryParameters3D> &p_point_query, int p_max_results) {
+ Vector<ShapeResult> ret;
+ ret.resize(p_max_results);
+
+ int rc = intersect_point(p_point_query->get_parameters(), ret.ptrw(), ret.size());
+
+ if (rc == 0) {
+ return Array();
+ }
+
+ Array r;
+ r.resize(rc);
+ for (int i = 0; i < rc; i++) {
+ Dictionary d;
+ d["rid"] = ret[i].rid;
+ d["collider_id"] = ret[i].collider_id;
+ d["collider"] = ret[i].collider;
+ d["shape"] = ret[i].shape;
+ r[i] = d;
+ }
+ return r;
+}
+
Array PhysicsDirectSpaceState3D::_intersect_shape(const Ref<PhysicsShapeQueryParameters3D> &p_shape_query, int p_max_results) {
ERR_FAIL_COND_V(!p_shape_query.is_valid(), Array());
Vector<ShapeResult> sr;
sr.resize(p_max_results);
- int rc = intersect_shape(p_shape_query->shape, p_shape_query->transform, p_shape_query->margin, sr.ptrw(), sr.size(), p_shape_query->exclude, p_shape_query->collision_mask, p_shape_query->collide_with_bodies, p_shape_query->collide_with_areas);
+ int rc = intersect_shape(p_shape_query->get_parameters(), sr.ptrw(), sr.size());
Array ret;
ret.resize(rc);
for (int i = 0; i < rc; i++) {
@@ -295,11 +370,11 @@ Array PhysicsDirectSpaceState3D::_intersect_shape(const Ref<PhysicsShapeQueryPar
return ret;
}
-Array PhysicsDirectSpaceState3D::_cast_motion(const Ref<PhysicsShapeQueryParameters3D> &p_shape_query, const Vector3 &p_motion) {
+Array PhysicsDirectSpaceState3D::_cast_motion(const Ref<PhysicsShapeQueryParameters3D> &p_shape_query) {
ERR_FAIL_COND_V(!p_shape_query.is_valid(), Array());
real_t closest_safe = 1.0f, closest_unsafe = 1.0f;
- bool res = cast_motion(p_shape_query->shape, p_shape_query->transform, p_motion, p_shape_query->margin, closest_safe, closest_unsafe, p_shape_query->exclude, p_shape_query->collision_mask, p_shape_query->collide_with_bodies, p_shape_query->collide_with_areas);
+ bool res = cast_motion(p_shape_query->get_parameters(), closest_safe, closest_unsafe);
if (!res) {
return Array();
}
@@ -316,7 +391,7 @@ Array PhysicsDirectSpaceState3D::_collide_shape(const Ref<PhysicsShapeQueryParam
Vector<Vector3> ret;
ret.resize(p_max_results * 2);
int rc = 0;
- bool res = collide_shape(p_shape_query->shape, p_shape_query->transform, p_shape_query->margin, ret.ptrw(), p_max_results, rc, p_shape_query->exclude, p_shape_query->collision_mask, p_shape_query->collide_with_bodies, p_shape_query->collide_with_areas);
+ bool res = collide_shape(p_shape_query->get_parameters(), ret.ptrw(), p_max_results, rc);
if (!res) {
return Array();
}
@@ -333,7 +408,7 @@ Dictionary PhysicsDirectSpaceState3D::_get_rest_info(const Ref<PhysicsShapeQuery
ShapeRestInfo sri;
- bool res = rest_info(p_shape_query->shape, p_shape_query->transform, p_shape_query->margin, &sri, p_shape_query->exclude, p_shape_query->collision_mask, p_shape_query->collide_with_bodies, p_shape_query->collide_with_areas);
+ bool res = rest_info(p_shape_query->get_parameters(), &sri);
Dictionary r;
if (!res) {
return r;
@@ -353,11 +428,12 @@ PhysicsDirectSpaceState3D::PhysicsDirectSpaceState3D() {
}
void PhysicsDirectSpaceState3D::_bind_methods() {
- ClassDB::bind_method(D_METHOD("intersect_ray", "from", "to", "exclude", "collision_mask", "collide_with_bodies", "collide_with_areas"), &PhysicsDirectSpaceState3D::_intersect_ray, DEFVAL(Array()), DEFVAL(UINT32_MAX), DEFVAL(true), DEFVAL(false));
- ClassDB::bind_method(D_METHOD("intersect_shape", "shape", "max_results"), &PhysicsDirectSpaceState3D::_intersect_shape, DEFVAL(32));
- ClassDB::bind_method(D_METHOD("cast_motion", "shape", "motion"), &PhysicsDirectSpaceState3D::_cast_motion);
- ClassDB::bind_method(D_METHOD("collide_shape", "shape", "max_results"), &PhysicsDirectSpaceState3D::_collide_shape, DEFVAL(32));
- ClassDB::bind_method(D_METHOD("get_rest_info", "shape"), &PhysicsDirectSpaceState3D::_get_rest_info);
+ ClassDB::bind_method(D_METHOD("intersect_point", "parameters", "max_results"), &PhysicsDirectSpaceState3D::_intersect_point, DEFVAL(32));
+ ClassDB::bind_method(D_METHOD("intersect_ray", "parameters"), &PhysicsDirectSpaceState3D::_intersect_ray);
+ ClassDB::bind_method(D_METHOD("intersect_shape", "parameters", "max_results"), &PhysicsDirectSpaceState3D::_intersect_shape, DEFVAL(32));
+ ClassDB::bind_method(D_METHOD("cast_motion", "parameters"), &PhysicsDirectSpaceState3D::_cast_motion);
+ ClassDB::bind_method(D_METHOD("collide_shape", "parameters", "max_results"), &PhysicsDirectSpaceState3D::_collide_shape, DEFVAL(32));
+ ClassDB::bind_method(D_METHOD("get_rest_info", "parameters"), &PhysicsDirectSpaceState3D::_get_rest_info);
}
///////////////////////////////
@@ -427,7 +503,7 @@ void PhysicsTestMotionParameters3D::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "margin"), "set_margin", "get_margin");
ADD_PROPERTY(PropertyInfo(Variant::INT, "max_collisions"), "set_max_collisions", "get_max_collisions");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "collide_separation_ray"), "set_collide_separation_ray_enabled", "is_collide_separation_ray_enabled");
- ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "exclude_bodies"), "set_exclude_bodies", "get_exclude_bodies");
+ ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "exclude_bodies", PROPERTY_HINT_ARRAY_TYPE, "RID"), "set_exclude_bodies", "get_exclude_bodies");
ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "exclude_objects"), "set_exclude_objects", "get_exclude_objects");
}
@@ -585,9 +661,6 @@ void PhysicsServer3D::_bind_methods() {
ClassDB::bind_method(D_METHOD("area_set_space", "area", "space"), &PhysicsServer3D::area_set_space);
ClassDB::bind_method(D_METHOD("area_get_space", "area"), &PhysicsServer3D::area_get_space);
- ClassDB::bind_method(D_METHOD("area_set_space_override_mode", "area", "mode"), &PhysicsServer3D::area_set_space_override_mode);
- ClassDB::bind_method(D_METHOD("area_get_space_override_mode", "area"), &PhysicsServer3D::area_get_space_override_mode);
-
ClassDB::bind_method(D_METHOD("area_add_shape", "area", "shape", "transform", "disabled"), &PhysicsServer3D::area_add_shape, DEFVAL(Transform3D()), DEFVAL(false));
ClassDB::bind_method(D_METHOD("area_set_shape", "area", "shape_idx", "shape"), &PhysicsServer3D::area_set_shape);
ClassDB::bind_method(D_METHOD("area_set_shape_transform", "area", "shape_idx", "transform"), &PhysicsServer3D::area_set_shape_transform);
@@ -612,8 +685,8 @@ void PhysicsServer3D::_bind_methods() {
ClassDB::bind_method(D_METHOD("area_attach_object_instance_id", "area", "id"), &PhysicsServer3D::area_attach_object_instance_id);
ClassDB::bind_method(D_METHOD("area_get_object_instance_id", "area"), &PhysicsServer3D::area_get_object_instance_id);
- ClassDB::bind_method(D_METHOD("area_set_monitor_callback", "area", "receiver", "method"), &PhysicsServer3D::area_set_monitor_callback);
- ClassDB::bind_method(D_METHOD("area_set_area_monitor_callback", "area", "receiver", "method"), &PhysicsServer3D::area_set_area_monitor_callback);
+ ClassDB::bind_method(D_METHOD("area_set_monitor_callback", "area", "callback"), &PhysicsServer3D::area_set_monitor_callback);
+ ClassDB::bind_method(D_METHOD("area_set_area_monitor_callback", "area", "callback"), &PhysicsServer3D::area_set_area_monitor_callback);
ClassDB::bind_method(D_METHOD("area_set_monitorable", "area", "monitorable"), &PhysicsServer3D::area_set_monitorable);
ClassDB::bind_method(D_METHOD("area_set_ray_pickable", "area", "enable"), &PhysicsServer3D::area_set_ray_pickable);
@@ -833,12 +906,15 @@ void PhysicsServer3D::_bind_methods() {
BIND_ENUM_CONSTANT(SHAPE_SOFT_BODY);
BIND_ENUM_CONSTANT(SHAPE_CUSTOM);
+ BIND_ENUM_CONSTANT(AREA_PARAM_GRAVITY_OVERRIDE_MODE);
BIND_ENUM_CONSTANT(AREA_PARAM_GRAVITY);
BIND_ENUM_CONSTANT(AREA_PARAM_GRAVITY_VECTOR);
BIND_ENUM_CONSTANT(AREA_PARAM_GRAVITY_IS_POINT);
BIND_ENUM_CONSTANT(AREA_PARAM_GRAVITY_DISTANCE_SCALE);
BIND_ENUM_CONSTANT(AREA_PARAM_GRAVITY_POINT_ATTENUATION);
+ BIND_ENUM_CONSTANT(AREA_PARAM_LINEAR_DAMP_OVERRIDE_MODE);
BIND_ENUM_CONSTANT(AREA_PARAM_LINEAR_DAMP);
+ BIND_ENUM_CONSTANT(AREA_PARAM_ANGULAR_DAMP_OVERRIDE_MODE);
BIND_ENUM_CONSTANT(AREA_PARAM_ANGULAR_DAMP);
BIND_ENUM_CONSTANT(AREA_PARAM_PRIORITY);
BIND_ENUM_CONSTANT(AREA_PARAM_WIND_FORCE_MAGNITUDE);
@@ -863,10 +939,15 @@ void PhysicsServer3D::_bind_methods() {
BIND_ENUM_CONSTANT(BODY_PARAM_INERTIA);
BIND_ENUM_CONSTANT(BODY_PARAM_CENTER_OF_MASS);
BIND_ENUM_CONSTANT(BODY_PARAM_GRAVITY_SCALE);
+ BIND_ENUM_CONSTANT(BODY_PARAM_LINEAR_DAMP_MODE);
+ BIND_ENUM_CONSTANT(BODY_PARAM_ANGULAR_DAMP_MODE);
BIND_ENUM_CONSTANT(BODY_PARAM_LINEAR_DAMP);
BIND_ENUM_CONSTANT(BODY_PARAM_ANGULAR_DAMP);
BIND_ENUM_CONSTANT(BODY_PARAM_MAX);
+ BIND_ENUM_CONSTANT(BODY_DAMP_MODE_COMBINE);
+ BIND_ENUM_CONSTANT(BODY_DAMP_MODE_REPLACE);
+
BIND_ENUM_CONSTANT(BODY_STATE_TRANSFORM);
BIND_ENUM_CONSTANT(BODY_STATE_LINEAR_VELOCITY);
BIND_ENUM_CONSTANT(BODY_STATE_ANGULAR_VELOCITY);
diff --git a/servers/physics_server_3d.h b/servers/physics_server_3d.h
index 6f55e287c9..89a7eeee96 100644
--- a/servers/physics_server_3d.h
+++ b/servers/physics_server_3d.h
@@ -48,6 +48,7 @@ public:
virtual real_t get_total_linear_damp() const = 0;
virtual Vector3 get_center_of_mass() const = 0;
+ virtual Vector3 get_center_of_mass_local() const = 0;
virtual Basis get_principal_inertia_axes() const = 0;
virtual real_t get_inverse_mass() const = 0; // get the mass
virtual Vector3 get_inverse_inertia() const = 0; // get density of this body space
@@ -96,55 +97,18 @@ public:
PhysicsDirectBodyState3D();
};
-class PhysicsShapeQueryParameters3D : public RefCounted {
- GDCLASS(PhysicsShapeQueryParameters3D, RefCounted);
- friend class PhysicsDirectSpaceState3D;
-
- RES shape_ref;
- RID shape;
- Transform3D transform;
- real_t margin = 0.0;
- Set<RID> exclude;
- uint32_t collision_mask = UINT32_MAX;
-
- bool collide_with_bodies = true;
- bool collide_with_areas = false;
-
-protected:
- static void _bind_methods();
-
-public:
- void set_shape(const RES &p_shape_ref);
- RES get_shape() const;
- void set_shape_rid(const RID &p_shape);
- RID get_shape_rid() const;
-
- void set_transform(const Transform3D &p_transform);
- Transform3D get_transform() const;
-
- void set_margin(real_t p_margin);
- real_t get_margin() const;
-
- void set_collision_mask(uint32_t p_collision_mask);
- uint32_t get_collision_mask() const;
-
- void set_exclude(const Vector<RID> &p_exclude);
- Vector<RID> get_exclude() const;
-
- void set_collide_with_bodies(bool p_enable);
- bool is_collide_with_bodies_enabled() const;
-
- void set_collide_with_areas(bool p_enable);
- bool is_collide_with_areas_enabled() const;
-};
+class PhysicsRayQueryParameters3D;
+class PhysicsPointQueryParameters3D;
+class PhysicsShapeQueryParameters3D;
class PhysicsDirectSpaceState3D : public Object {
GDCLASS(PhysicsDirectSpaceState3D, Object);
private:
- Dictionary _intersect_ray(const Vector3 &p_from, const Vector3 &p_to, const Vector<RID> &p_exclude = Vector<RID>(), uint32_t p_collision_mask = UINT32_MAX, bool p_collide_with_bodies = true, bool p_collide_with_areas = false);
+ Dictionary _intersect_ray(const Ref<PhysicsRayQueryParameters3D> &p_ray_query);
+ Array _intersect_point(const Ref<PhysicsPointQueryParameters3D> &p_point_query, int p_max_results = 32);
Array _intersect_shape(const Ref<PhysicsShapeQueryParameters3D> &p_shape_query, int p_max_results = 32);
- Array _cast_motion(const Ref<PhysicsShapeQueryParameters3D> &p_shape_query, const Vector3 &p_motion);
+ Array _cast_motion(const Ref<PhysicsShapeQueryParameters3D> &p_shape_query);
Array _collide_shape(const Ref<PhysicsShapeQueryParameters3D> &p_shape_query, int p_max_results = 32);
Dictionary _get_rest_info(const Ref<PhysicsShapeQueryParameters3D> &p_shape_query);
@@ -152,27 +116,61 @@ protected:
static void _bind_methods();
public:
- struct ShapeResult {
+ struct RayParameters {
+ Vector3 from;
+ Vector3 to;
+ Set<RID> exclude;
+ uint32_t collision_mask = UINT32_MAX;
+
+ bool collide_with_bodies = true;
+ bool collide_with_areas = false;
+
+ bool hit_from_inside = false;
+ bool hit_back_faces = true;
+
+ bool pick_ray = false;
+ };
+
+ struct RayResult {
+ Vector3 position;
+ Vector3 normal;
RID rid;
ObjectID collider_id;
Object *collider = nullptr;
int shape = 0;
};
- virtual int intersect_point(const Vector3 &p_point, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = UINT32_MAX, bool p_collide_with_bodies = true, bool p_collide_with_areas = false) = 0;
+ virtual bool intersect_ray(const RayParameters &p_parameters, RayResult &r_result) = 0;
- struct RayResult {
- Vector3 position;
- Vector3 normal;
+ struct ShapeResult {
RID rid;
ObjectID collider_id;
Object *collider = nullptr;
int shape = 0;
};
- virtual bool intersect_ray(const Vector3 &p_from, const Vector3 &p_to, RayResult &r_result, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = UINT32_MAX, bool p_collide_with_bodies = true, bool p_collide_with_areas = false, bool p_pick_ray = false) = 0;
+ struct PointParameters {
+ Vector3 position;
+ Set<RID> exclude;
+ uint32_t collision_mask = UINT32_MAX;
+
+ bool collide_with_bodies = true;
+ bool collide_with_areas = false;
+ };
+
+ virtual int intersect_point(const PointParameters &p_parameters, ShapeResult *r_results, int p_result_max) = 0;
- virtual int intersect_shape(const RID &p_shape, const Transform3D &p_xform, real_t p_margin, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = UINT32_MAX, bool p_collide_with_bodies = true, bool p_collide_with_areas = false) = 0;
+ struct ShapeParameters {
+ RID shape_rid;
+ Transform3D transform;
+ Vector3 motion;
+ real_t margin = 0.0;
+ Set<RID> exclude;
+ uint32_t collision_mask = UINT32_MAX;
+
+ bool collide_with_bodies = true;
+ bool collide_with_areas = false;
+ };
struct ShapeRestInfo {
Vector3 point;
@@ -180,14 +178,13 @@ public:
RID rid;
ObjectID collider_id;
int shape = 0;
- Vector3 linear_velocity; //velocity at contact point
+ Vector3 linear_velocity; // Velocity at contact point.
};
- virtual bool cast_motion(const RID &p_shape, const Transform3D &p_xform, const Vector3 &p_motion, real_t p_margin, real_t &p_closest_safe, real_t &p_closest_unsafe, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = UINT32_MAX, bool p_collide_with_bodies = true, bool p_collide_with_areas = false, ShapeRestInfo *r_info = nullptr) = 0;
-
- virtual bool collide_shape(RID p_shape, const Transform3D &p_shape_xform, real_t p_margin, Vector3 *r_results, int p_result_max, int &r_result_count, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = UINT32_MAX, bool p_collide_with_bodies = true, bool p_collide_with_areas = false) = 0;
-
- virtual bool rest_info(RID p_shape, const Transform3D &p_shape_xform, real_t p_margin, ShapeRestInfo *r_info, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = UINT32_MAX, bool p_collide_with_bodies = true, bool p_collide_with_areas = false) = 0;
+ virtual int intersect_shape(const ShapeParameters &p_parameters, ShapeResult *r_results, int p_result_max) = 0;
+ virtual bool cast_motion(const ShapeParameters &p_parameters, real_t &p_closest_safe, real_t &p_closest_unsafe, ShapeRestInfo *r_info = nullptr) = 0;
+ virtual bool collide_shape(const ShapeParameters &p_parameters, Vector3 *r_results, int p_result_max, int &r_result_count) = 0;
+ virtual bool rest_info(const ShapeParameters &p_parameters, ShapeRestInfo *r_info) = 0;
virtual Vector3 get_closest_point_to_object_volume(RID p_object, const Vector3 p_point) const = 0;
@@ -291,12 +288,15 @@ public:
//missing attenuation? missing better override?
enum AreaParameter {
+ AREA_PARAM_GRAVITY_OVERRIDE_MODE,
AREA_PARAM_GRAVITY,
AREA_PARAM_GRAVITY_VECTOR,
AREA_PARAM_GRAVITY_IS_POINT,
AREA_PARAM_GRAVITY_DISTANCE_SCALE,
AREA_PARAM_GRAVITY_POINT_ATTENUATION,
+ AREA_PARAM_LINEAR_DAMP_OVERRIDE_MODE,
AREA_PARAM_LINEAR_DAMP,
+ AREA_PARAM_ANGULAR_DAMP_OVERRIDE_MODE,
AREA_PARAM_ANGULAR_DAMP,
AREA_PARAM_PRIORITY,
AREA_PARAM_WIND_FORCE_MAGNITUDE,
@@ -318,9 +318,6 @@ public:
AREA_SPACE_OVERRIDE_REPLACE_COMBINE
};
- virtual void area_set_space_override_mode(RID p_area, AreaSpaceOverrideMode p_mode) = 0;
- virtual AreaSpaceOverrideMode area_get_space_override_mode(RID p_area) const = 0;
-
virtual void area_add_shape(RID p_area, RID p_shape, const Transform3D &p_transform = Transform3D(), bool p_disabled = false) = 0;
virtual void area_set_shape(RID p_area, int p_shape_idx, RID p_shape) = 0;
virtual void area_set_shape_transform(RID p_area, int p_shape_idx, const Transform3D &p_transform) = 0;
@@ -348,8 +345,8 @@ public:
virtual void area_set_monitorable(RID p_area, bool p_monitorable) = 0;
- virtual void area_set_monitor_callback(RID p_area, Object *p_receiver, const StringName &p_method) = 0;
- virtual void area_set_area_monitor_callback(RID p_area, Object *p_receiver, const StringName &p_method) = 0;
+ virtual void area_set_monitor_callback(RID p_area, const Callable &p_callback) = 0;
+ virtual void area_set_area_monitor_callback(RID p_area, const Callable &p_callback) = 0;
virtual void area_set_ray_pickable(RID p_area, bool p_enable) = 0;
@@ -364,6 +361,11 @@ public:
BODY_MODE_DYNAMIC_LINEAR,
};
+ enum BodyDampMode {
+ BODY_DAMP_MODE_COMBINE,
+ BODY_DAMP_MODE_REPLACE,
+ };
+
virtual RID body_create() = 0;
virtual void body_set_space(RID p_body, RID p_space) = 0;
@@ -408,6 +410,8 @@ public:
BODY_PARAM_INERTIA,
BODY_PARAM_CENTER_OF_MASS,
BODY_PARAM_GRAVITY_SCALE,
+ BODY_PARAM_LINEAR_DAMP_MODE,
+ BODY_PARAM_ANGULAR_DAMP_MODE,
BODY_PARAM_LINEAR_DAMP,
BODY_PARAM_ANGULAR_DAMP,
BODY_PARAM_MAX,
@@ -778,6 +782,110 @@ public:
~PhysicsServer3D();
};
+class PhysicsRayQueryParameters3D : public RefCounted {
+ GDCLASS(PhysicsRayQueryParameters3D, RefCounted);
+
+ PhysicsDirectSpaceState3D::RayParameters parameters;
+
+protected:
+ static void _bind_methods();
+
+public:
+ const PhysicsDirectSpaceState3D::RayParameters &get_parameters() const { return parameters; }
+
+ void set_from(const Vector3 &p_from) { parameters.from = p_from; }
+ const Vector3 &get_from() const { return parameters.from; }
+
+ void set_to(const Vector3 &p_to) { parameters.to = p_to; }
+ const Vector3 &get_to() const { return parameters.to; }
+
+ void set_collision_mask(uint32_t p_mask) { parameters.collision_mask = p_mask; }
+ uint32_t get_collision_mask() const { return parameters.collision_mask; }
+
+ void set_collide_with_bodies(bool p_enable) { parameters.collide_with_bodies = p_enable; }
+ bool is_collide_with_bodies_enabled() const { return parameters.collide_with_bodies; }
+
+ void set_collide_with_areas(bool p_enable) { parameters.collide_with_areas = p_enable; }
+ bool is_collide_with_areas_enabled() const { return parameters.collide_with_areas; }
+
+ void set_hit_from_inside(bool p_enable) { parameters.hit_from_inside = p_enable; }
+ bool is_hit_from_inside_enabled() const { return parameters.hit_from_inside; }
+
+ void set_hit_back_faces(bool p_enable) { parameters.hit_back_faces = p_enable; }
+ bool is_hit_back_faces_enabled() const { return parameters.hit_back_faces; }
+
+ void set_exclude(const Vector<RID> &p_exclude);
+ Vector<RID> get_exclude() const;
+};
+
+class PhysicsPointQueryParameters3D : public RefCounted {
+ GDCLASS(PhysicsPointQueryParameters3D, RefCounted);
+
+ PhysicsDirectSpaceState3D::PointParameters parameters;
+
+protected:
+ static void _bind_methods();
+
+public:
+ const PhysicsDirectSpaceState3D::PointParameters &get_parameters() const { return parameters; }
+
+ void set_position(const Vector3 &p_position) { parameters.position = p_position; }
+ const Vector3 &get_position() const { return parameters.position; }
+
+ void set_collision_mask(uint32_t p_mask) { parameters.collision_mask = p_mask; }
+ uint32_t get_collision_mask() const { return parameters.collision_mask; }
+
+ void set_collide_with_bodies(bool p_enable) { parameters.collide_with_bodies = p_enable; }
+ bool is_collide_with_bodies_enabled() const { return parameters.collide_with_bodies; }
+
+ void set_collide_with_areas(bool p_enable) { parameters.collide_with_areas = p_enable; }
+ bool is_collide_with_areas_enabled() const { return parameters.collide_with_areas; }
+
+ void set_exclude(const Vector<RID> &p_exclude);
+ Vector<RID> get_exclude() const;
+};
+
+class PhysicsShapeQueryParameters3D : public RefCounted {
+ GDCLASS(PhysicsShapeQueryParameters3D, RefCounted);
+
+ PhysicsDirectSpaceState3D::ShapeParameters parameters;
+
+ RES shape_ref;
+
+protected:
+ static void _bind_methods();
+
+public:
+ const PhysicsDirectSpaceState3D::ShapeParameters &get_parameters() const { return parameters; }
+
+ void set_shape(const RES &p_shape_ref);
+ RES get_shape() const { return shape_ref; }
+
+ void set_shape_rid(const RID &p_shape);
+ RID get_shape_rid() const { return parameters.shape_rid; }
+
+ void set_transform(const Transform3D &p_transform) { parameters.transform = p_transform; }
+ const Transform3D &get_transform() const { return parameters.transform; }
+
+ void set_motion(const Vector3 &p_motion) { parameters.motion = p_motion; }
+ const Vector3 &get_motion() const { return parameters.motion; }
+
+ void set_margin(real_t p_margin) { parameters.margin = p_margin; }
+ real_t get_margin() const { return parameters.margin; }
+
+ void set_collision_mask(uint32_t p_mask) { parameters.collision_mask = p_mask; }
+ uint32_t get_collision_mask() const { return parameters.collision_mask; }
+
+ void set_collide_with_bodies(bool p_enable) { parameters.collide_with_bodies = p_enable; }
+ bool is_collide_with_bodies_enabled() const { return parameters.collide_with_bodies; }
+
+ void set_collide_with_areas(bool p_enable) { parameters.collide_with_areas = p_enable; }
+ bool is_collide_with_areas_enabled() const { return parameters.collide_with_areas; }
+
+ void set_exclude(const Vector<RID> &p_exclude);
+ Vector<RID> get_exclude() const;
+};
+
class PhysicsTestMotionParameters3D : public RefCounted {
GDCLASS(PhysicsTestMotionParameters3D, RefCounted);
@@ -890,6 +998,7 @@ VARIANT_ENUM_CAST(PhysicsServer3D::AreaParameter);
VARIANT_ENUM_CAST(PhysicsServer3D::AreaSpaceOverrideMode);
VARIANT_ENUM_CAST(PhysicsServer3D::BodyMode);
VARIANT_ENUM_CAST(PhysicsServer3D::BodyParameter);
+VARIANT_ENUM_CAST(PhysicsServer3D::BodyDampMode);
VARIANT_ENUM_CAST(PhysicsServer3D::BodyState);
VARIANT_ENUM_CAST(PhysicsServer3D::BodyAxis);
VARIANT_ENUM_CAST(PhysicsServer3D::PinJointParam);
diff --git a/servers/physics_server_3d_wrap_mt.h b/servers/physics_server_3d_wrap_mt.h
index 4c88ef2642..507427ecec 100644
--- a/servers/physics_server_3d_wrap_mt.h
+++ b/servers/physics_server_3d_wrap_mt.h
@@ -137,9 +137,6 @@ public:
FUNC2(area_set_space, RID, RID);
FUNC1RC(RID, area_get_space, RID);
- FUNC2(area_set_space_override_mode, RID, AreaSpaceOverrideMode);
- FUNC1RC(AreaSpaceOverrideMode, area_get_space_override_mode, RID);
-
FUNC4(area_add_shape, RID, RID, const Transform3D &, bool);
FUNC3(area_set_shape, RID, int, RID);
FUNC3(area_set_shape_transform, RID, int, const Transform3D &);
@@ -166,8 +163,8 @@ public:
FUNC2(area_set_monitorable, RID, bool);
FUNC2(area_set_ray_pickable, RID, bool);
- FUNC3(area_set_monitor_callback, RID, Object *, const StringName &);
- FUNC3(area_set_area_monitor_callback, RID, Object *, const StringName &);
+ FUNC2(area_set_monitor_callback, RID, const Callable &);
+ FUNC2(area_set_area_monitor_callback, RID, const Callable &);
/* BODY API */
diff --git a/servers/register_server_types.cpp b/servers/register_server_types.cpp
index 8be9c2114f..7004b2317c 100644
--- a/servers/register_server_types.cpp
+++ b/servers/register_server_types.cpp
@@ -209,13 +209,17 @@ void register_server_types() {
GDREGISTER_VIRTUAL_CLASS(PhysicsDirectBodyState2D);
GDREGISTER_VIRTUAL_CLASS(PhysicsDirectSpaceState2D);
+ GDREGISTER_CLASS(PhysicsRayQueryParameters2D);
+ GDREGISTER_CLASS(PhysicsPointQueryParameters2D);
+ GDREGISTER_CLASS(PhysicsShapeQueryParameters2D);
GDREGISTER_CLASS(PhysicsTestMotionParameters2D);
GDREGISTER_CLASS(PhysicsTestMotionResult2D);
- GDREGISTER_CLASS(PhysicsShapeQueryParameters2D);
- GDREGISTER_CLASS(PhysicsShapeQueryParameters3D);
GDREGISTER_VIRTUAL_CLASS(PhysicsDirectBodyState3D);
GDREGISTER_VIRTUAL_CLASS(PhysicsDirectSpaceState3D);
+ GDREGISTER_CLASS(PhysicsRayQueryParameters3D);
+ GDREGISTER_CLASS(PhysicsPointQueryParameters3D);
+ GDREGISTER_CLASS(PhysicsShapeQueryParameters3D);
GDREGISTER_CLASS(PhysicsTestMotionParameters3D);
GDREGISTER_CLASS(PhysicsTestMotionResult3D);
diff --git a/servers/rendering/rasterizer_dummy.h b/servers/rendering/rasterizer_dummy.h
index f4a44c30f9..3451ea2d39 100644
--- a/servers/rendering/rasterizer_dummy.h
+++ b/servers/rendering/rasterizer_dummy.h
@@ -195,7 +195,7 @@ public:
void set_debug_draw_mode(RS::ViewportDebugDraw p_debug_draw) override {}
RID render_buffers_create() override { return RID(); }
- void render_buffers_configure(RID p_render_buffers, RID p_render_target, int p_width, int p_height, RS::ViewportMSAA p_msaa, RS::ViewportScreenSpaceAA p_screen_space_aa, bool p_use_debanding, uint32_t p_view_count) override {}
+ void render_buffers_configure(RID p_render_buffers, RID p_render_target, int p_internal_width, int p_internal_height, int p_width, int p_height, float p_fsr_sharpness, float p_fsr_mipmap_bias, RS::ViewportMSAA p_msaa, RS::ViewportScreenSpaceAA p_screen_space_aa, bool p_use_debanding, uint32_t p_view_count) override {}
void gi_set_use_half_resolution(bool p_enable) override {}
void screen_space_roughness_limiter_set_active(bool p_enable, float p_amount, float p_curve) override {}
@@ -258,7 +258,7 @@ public:
Ref<Image> texture_2d_layer_get(RID p_texture, int p_layer) const override { return Ref<Image>(); }
Vector<Ref<Image>> texture_3d_get(RID p_texture) const override { return Vector<Ref<Image>>(); }
- void texture_replace(RID p_texture, RID p_by_texture) override {}
+ void texture_replace(RID p_texture, RID p_by_texture) override { free(p_by_texture); }
void texture_set_size_override(RID p_texture, int p_width, int p_height) override {}
void texture_set_path(RID p_texture, const String &p_path) override {}
@@ -293,8 +293,8 @@ public:
String shader_get_code(RID p_shader) const override { return ""; }
void shader_get_param_list(RID p_shader, List<PropertyInfo> *p_param_list) const override {}
- void shader_set_default_texture_param(RID p_shader, const StringName &p_name, RID p_texture) override {}
- RID shader_get_default_texture_param(RID p_shader, const StringName &p_name) const override { return RID(); }
+ void shader_set_default_texture_param(RID p_shader, const StringName &p_name, RID p_texture, int p_index) override {}
+ RID shader_get_default_texture_param(RID p_shader, const StringName &p_name, int p_index) const override { return RID(); }
Variant shader_get_param_default(RID p_material, const StringName &p_param) const override { return Variant(); }
RS::ShaderNativeSourceCode shader_get_native_source_code(RID p_shader) const override { return RS::ShaderNativeSourceCode(); };
diff --git a/servers/rendering/renderer_canvas_cull.h b/servers/rendering/renderer_canvas_cull.h
index a2fdf95c76..bdd61123df 100644
--- a/servers/rendering/renderer_canvas_cull.h
+++ b/servers/rendering/renderer_canvas_cull.h
@@ -152,7 +152,7 @@ public:
void erase_item(Item *p_item) {
int idx = find_item(p_item);
if (idx >= 0) {
- child_items.remove(idx);
+ child_items.remove_at(idx);
}
}
diff --git a/servers/rendering/renderer_compositor.h b/servers/rendering/renderer_compositor.h
index 1971c3e781..4526354d17 100644
--- a/servers/rendering/renderer_compositor.h
+++ b/servers/rendering/renderer_compositor.h
@@ -67,6 +67,7 @@ private:
protected:
static RendererCompositor *(*_create_func)();
+ bool back_end = false;
public:
static RendererCompositor *create();
@@ -88,7 +89,7 @@ public:
virtual uint64_t get_frame_number() const = 0;
virtual double get_frame_delta_time() const = 0;
- virtual bool is_low_end() const = 0;
+ _FORCE_INLINE_ virtual bool is_low_end() const { return back_end; };
virtual bool is_xr_enabled() const;
RendererCompositor();
diff --git a/servers/rendering/renderer_rd/cluster_builder_rd.cpp b/servers/rendering/renderer_rd/cluster_builder_rd.cpp
index b952ecbff0..4a98cf0831 100644
--- a/servers/rendering/renderer_rd/cluster_builder_rd.cpp
+++ b/servers/rendering/renderer_rd/cluster_builder_rd.cpp
@@ -460,14 +460,6 @@ void ClusterBuilderRD::bake_cluster() {
RD::get_singleton()->draw_list_set_push_constant(draw_list, &push_constant, sizeof(ClusterBuilderSharedDataRD::ClusterRender::PushConstant));
uint32_t instances = 1;
-#if 0
- for (uint32_t j = i+1; j < element_count; j++) {
- if (elements[i].type!=elements[j].type) {
- break;
- }
- instances++;
- }
-#endif
RD::get_singleton()->draw_list_draw(draw_list, true, instances);
i += instances;
}
diff --git a/servers/rendering/renderer_rd/effects_rd.cpp b/servers/rendering/renderer_rd/effects_rd.cpp
index fdd6939a8b..cf943901d4 100644
--- a/servers/rendering/renderer_rd/effects_rd.cpp
+++ b/servers/rendering/renderer_rd/effects_rd.cpp
@@ -237,6 +237,43 @@ RID EffectsRD::_get_compute_uniform_set_from_image_pair(RID p_texture1, RID p_te
return uniform_set;
}
+void EffectsRD::fsr_upscale(RID p_source_rd_texture, RID p_secondary_texture, RID p_destination_texture, const Size2i &p_internal_size, const Size2i &p_size, float p_fsr_upscale_sharpness) {
+ memset(&FSR_upscale.push_constant, 0, sizeof(FSRUpscalePushConstant));
+
+ int dispatch_x = (p_size.x + 15) / 16;
+ int dispatch_y = (p_size.y + 15) / 16;
+
+ RD::ComputeListID compute_list = RD::get_singleton()->compute_list_begin();
+ RD::get_singleton()->compute_list_bind_compute_pipeline(compute_list, FSR_upscale.pipeline);
+
+ FSR_upscale.push_constant.resolution_width = p_internal_size.width;
+ FSR_upscale.push_constant.resolution_height = p_internal_size.height;
+ FSR_upscale.push_constant.upscaled_width = p_size.width;
+ FSR_upscale.push_constant.upscaled_height = p_size.height;
+ FSR_upscale.push_constant.sharpness = p_fsr_upscale_sharpness;
+
+ //FSR Easc
+ FSR_upscale.push_constant.pass = FSR_UPSCALE_PASS_EASU;
+ RD::get_singleton()->compute_list_bind_uniform_set(compute_list, _get_compute_uniform_set_from_texture(p_source_rd_texture), 0);
+ RD::get_singleton()->compute_list_bind_uniform_set(compute_list, _get_uniform_set_from_image(p_secondary_texture), 1);
+
+ RD::get_singleton()->compute_list_set_push_constant(compute_list, &FSR_upscale.push_constant, sizeof(FSRUpscalePushConstant));
+
+ RD::get_singleton()->compute_list_dispatch(compute_list, dispatch_x, dispatch_y, 1);
+ RD::get_singleton()->compute_list_add_barrier(compute_list);
+
+ //FSR Rcas
+ FSR_upscale.push_constant.pass = FSR_UPSCALE_PASS_RCAS;
+ RD::get_singleton()->compute_list_bind_uniform_set(compute_list, _get_compute_uniform_set_from_texture(p_secondary_texture), 0);
+ RD::get_singleton()->compute_list_bind_uniform_set(compute_list, _get_uniform_set_from_image(p_destination_texture), 1);
+
+ RD::get_singleton()->compute_list_set_push_constant(compute_list, &FSR_upscale.push_constant, sizeof(FSRUpscalePushConstant));
+
+ RD::get_singleton()->compute_list_dispatch(compute_list, dispatch_x, dispatch_y, 1);
+
+ RD::get_singleton()->compute_list_end(compute_list);
+}
+
void EffectsRD::copy_to_atlas_fb(RID p_source_rd_texture, RID p_dest_framebuffer, const Rect2 &p_uv_rect, RD::DrawListID p_draw_list, bool p_flip_y, bool p_panorama) {
memset(&copy_to_fb.push_constant, 0, sizeof(CopyToFbPushConstant));
@@ -1888,6 +1925,27 @@ void EffectsRD::sort_buffer(RID p_uniform_set, int p_size) {
}
EffectsRD::EffectsRD(bool p_prefer_raster_effects) {
+ {
+ Vector<String> FSR_upscale_modes;
+
+#if defined(OSX_ENABLED) || defined(IPHONE_ENABLED)
+ // MoltenVK does not support some of the operations used by the normal mode of FSR. Fallback works just fine though.
+ FSR_upscale_modes.push_back("\n#define MODE_FSR_UPSCALE_FALLBACK\n");
+#else
+ // Everyone else can use normal mode when available.
+ if (RD::get_singleton()->get_device_capabilities()->supports_fsr_half_float) {
+ FSR_upscale_modes.push_back("\n#define MODE_FSR_UPSCALE_NORMAL\n");
+ } else {
+ FSR_upscale_modes.push_back("\n#define MODE_FSR_UPSCALE_FALLBACK\n");
+ }
+#endif
+
+ FSR_upscale.shader.initialize(FSR_upscale_modes);
+
+ FSR_upscale.shader_version = FSR_upscale.shader.version_create();
+ FSR_upscale.pipeline = RD::get_singleton()->compute_pipeline_create(FSR_upscale.shader.version_get_shader(FSR_upscale.shader_version, 0));
+ }
+
prefer_raster_effects = p_prefer_raster_effects;
if (prefer_raster_effects) {
@@ -2523,6 +2581,7 @@ EffectsRD::~EffectsRD() {
RD::get_singleton()->free(index_buffer); //array gets freed as dependency
RD::get_singleton()->free(filter.coefficient_buffer);
+ FSR_upscale.shader.version_free(FSR_upscale.shader_version);
if (prefer_raster_effects) {
blur_raster.shader.version_free(blur_raster.shader_version);
bokeh.raster_shader.version_free(blur_raster.shader_version);
diff --git a/servers/rendering/renderer_rd/effects_rd.h b/servers/rendering/renderer_rd/effects_rd.h
index 551e50ed25..6037127e82 100644
--- a/servers/rendering/renderer_rd/effects_rd.h
+++ b/servers/rendering/renderer_rd/effects_rd.h
@@ -45,6 +45,7 @@
#include "servers/rendering/renderer_rd/shaders/cubemap_filter_raster.glsl.gen.h"
#include "servers/rendering/renderer_rd/shaders/cubemap_roughness.glsl.gen.h"
#include "servers/rendering/renderer_rd/shaders/cubemap_roughness_raster.glsl.gen.h"
+#include "servers/rendering/renderer_rd/shaders/fsr_upscale.glsl.gen.h"
#include "servers/rendering/renderer_rd/shaders/luminance_reduce.glsl.gen.h"
#include "servers/rendering/renderer_rd/shaders/luminance_reduce_raster.glsl.gen.h"
#include "servers/rendering/renderer_rd/shaders/resolve.glsl.gen.h"
@@ -69,6 +70,28 @@ class EffectsRD {
private:
bool prefer_raster_effects;
+ enum FSRUpscalePass {
+ FSR_UPSCALE_PASS_EASU = 0,
+ FSR_UPSCALE_PASS_RCAS = 1
+ };
+
+ struct FSRUpscalePushConstant {
+ float resolution_width;
+ float resolution_height;
+ float upscaled_width;
+ float upscaled_height;
+ float sharpness;
+ int pass;
+ int _unused0, _unused1;
+ };
+
+ struct FSRUpscale {
+ FSRUpscalePushConstant push_constant;
+ FsrUpscaleShaderRD shader;
+ RID shader_version;
+ RID pipeline;
+ } FSR_upscale;
+
enum BlurRasterMode {
BLUR_MIPMAP,
@@ -754,6 +777,7 @@ private:
public:
bool get_prefer_raster_effects();
+ void fsr_upscale(RID p_source_rd_texture, RID p_secondary_texture, RID p_destination_texture, const Size2i &p_internal_size, const Size2i &p_size, float p_fsr_upscale_sharpness);
void copy_to_fb_rect(RID p_source_rd_texture, RID p_dest_framebuffer, const Rect2i &p_rect, bool p_flip_y = false, bool p_force_luminance = false, bool p_alpha_to_zero = false, bool p_srgb = false, RID p_secondary = RID());
void copy_to_rect(RID p_source_rd_texture, RID p_dest_texture, const Rect2i &p_rect, bool p_flip_y = false, bool p_force_luminance = false, bool p_all_source = false, bool p_8_bit_dst = false, bool p_alpha_to_one = false);
void copy_cubemap_to_panorama(RID p_source_cube, RID p_dest_panorama, const Size2i &p_panorama_size, float p_lod, bool p_is_array);
diff --git a/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp b/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp
index 0f5af96417..03ce2690bf 100644
--- a/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp
+++ b/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp
@@ -334,6 +334,14 @@ void RenderForwardClustered::_render_list_template(RenderingDevice::DrawListID p
const GeometryInstanceSurfaceDataCache *surf = p_params->elements[i];
const RenderElementInfo &element_info = p_params->element_info[i];
+ if ((p_pass_mode == PASS_MODE_COLOR || p_pass_mode == PASS_MODE_COLOR_SPECULAR) && !(surf->flags & GeometryInstanceSurfaceDataCache::FLAG_PASS_OPAQUE)) {
+ continue; // Objects with "Depth-prepass" transparency are included in both render lists, but should only be rendered in the transparent pass
+ }
+
+ if (surf->owner->instance_count == 0) {
+ continue;
+ }
+
push_constant.base_index = i + p_params->element_offset;
RID material_uniform_set;
@@ -954,20 +962,20 @@ void RenderForwardClustered::_fill_render_list(RenderListType p_render_list, con
bool uses_gi = false;
float fade_alpha = 1.0;
- if (p_render_list == RENDER_LIST_OPAQUE) {
- if (inst->fade_near || inst->fade_far) {
- float fade_dist = inst->transform.origin.distance_to(p_render_data->cam_transform.origin);
- if (inst->fade_far && fade_dist > inst->fade_far_begin) {
- fade_alpha = MAX(0.0, 1.0 - (fade_dist - inst->fade_far_begin) / (inst->fade_far_end - inst->fade_far_begin));
- } else if (inst->fade_near && fade_dist < inst->fade_near_end) {
- fade_alpha = MAX(0.0, (fade_dist - inst->fade_near_begin) / (inst->fade_near_end - inst->fade_near_begin));
- }
+ if (inst->fade_near || inst->fade_far) {
+ float fade_dist = inst->transform.origin.distance_to(p_render_data->cam_transform.origin);
+ if (inst->fade_far && fade_dist > inst->fade_far_begin) {
+ fade_alpha = MAX(0.0, 1.0 - (fade_dist - inst->fade_far_begin) / (inst->fade_far_end - inst->fade_far_begin));
+ } else if (inst->fade_near && fade_dist < inst->fade_near_end) {
+ fade_alpha = MAX(0.0, (fade_dist - inst->fade_near_begin) / (inst->fade_near_end - inst->fade_near_begin));
}
+ }
- fade_alpha *= inst->force_alpha * inst->parent_fade_alpha;
+ fade_alpha *= inst->force_alpha * inst->parent_fade_alpha;
- flags = (flags & ~INSTANCE_DATA_FLAGS_FADE_MASK) | (uint32_t(fade_alpha * 255.0) << INSTANCE_DATA_FLAGS_FADE_SHIFT);
+ flags = (flags & ~INSTANCE_DATA_FLAGS_FADE_MASK) | (uint32_t(fade_alpha * 255.0) << INSTANCE_DATA_FLAGS_FADE_SHIFT);
+ if (p_render_list == RENDER_LIST_OPAQUE) {
// Setup GI
if (inst->lightmap_instance.is_valid()) {
int32_t lightmap_cull_index = -1;
@@ -1202,6 +1210,7 @@ void RenderForwardClustered::_render_scene(RenderDataRD *p_render_data, const Co
scene_state.ubo.viewport_size[0] = vp_he.x;
scene_state.ubo.viewport_size[1] = vp_he.y;
scene_state.ubo.directional_light_count = 0;
+ scene_state.ubo.opaque_prepass_threshold = 0.99f;
Size2i screen_size;
RID opaque_framebuffer;
@@ -1445,6 +1454,7 @@ void RenderForwardClustered::_render_scene(RenderDataRD *p_render_data, const Co
RD::get_singleton()->draw_command_begin_label("Render Opaque Pass");
scene_state.ubo.directional_light_count = p_render_data->directional_light_count;
+ scene_state.ubo.opaque_prepass_threshold = 0.0f;
_setup_environment(p_render_data, p_render_data->reflection_probe.is_valid(), screen_size, !p_render_data->reflection_probe.is_valid(), p_default_bg_color, p_render_data->render_buffers.is_valid());
@@ -1628,6 +1638,7 @@ void RenderForwardClustered::_render_shadow_append(RID p_framebuffer, const Page
render_data.render_info = p_render_info;
scene_state.ubo.dual_paraboloid_side = p_use_dp_flip ? -1 : 1;
+ scene_state.ubo.opaque_prepass_threshold = 0.1f;
_setup_environment(&render_data, true, Vector2(1, 1), !p_flip_y, Color(), false, p_use_pancake, shadow_pass_index);
@@ -1714,6 +1725,7 @@ void RenderForwardClustered::_render_particle_collider_heightfield(RID p_fb, con
_update_render_base_uniform_set();
scene_state.ubo.dual_paraboloid_side = 0;
+ scene_state.ubo.opaque_prepass_threshold = 0.0;
_setup_environment(&render_data, true, Vector2(1, 1), true, Color(), false, false);
@@ -1751,6 +1763,7 @@ void RenderForwardClustered::_render_material(const Transform3D &p_cam_transform
scene_state.ubo.dual_paraboloid_side = 0;
scene_state.ubo.material_uv2_mode = false;
+ scene_state.ubo.opaque_prepass_threshold = 0.0f;
_setup_environment(&render_data, true, Vector2(1, 1), false, Color());
@@ -1794,6 +1807,7 @@ void RenderForwardClustered::_render_uv2(const PagedArray<GeometryInstance *> &p
scene_state.ubo.dual_paraboloid_side = 0;
scene_state.ubo.material_uv2_mode = true;
+ scene_state.ubo.opaque_prepass_threshold = 0.0;
_setup_environment(&render_data, true, Vector2(1, 1), false, Color());
@@ -1940,7 +1954,9 @@ void RenderForwardClustered::_base_uniforms_changed() {
}
void RenderForwardClustered::_update_render_base_uniform_set() {
- if (render_base_uniform_set.is_null() || !RD::get_singleton()->uniform_set_is_valid(render_base_uniform_set) || (lightmap_texture_array_version != storage->lightmap_array_get_version())) {
+ if (render_base_uniform_set.is_null() || !RD::get_singleton()->uniform_set_is_valid(render_base_uniform_set) || (lightmap_texture_array_version != storage->lightmap_array_get_version()) || base_uniform_set_updated) {
+ base_uniform_set_updated = false;
+
if (render_base_uniform_set.is_valid() && RD::get_singleton()->uniform_set_is_valid(render_base_uniform_set)) {
RD::get_singleton()->free(render_base_uniform_set);
}
@@ -1955,18 +1971,18 @@ void RenderForwardClustered::_update_render_base_uniform_set() {
u.binding = 1;
u.ids.resize(12);
RID *ids_ptr = u.ids.ptrw();
- ids_ptr[0] = storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_NEAREST, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
- ids_ptr[1] = storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
- ids_ptr[2] = storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_NEAREST_WITH_MIPMAPS, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
- ids_ptr[3] = storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR_WITH_MIPMAPS, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
- ids_ptr[4] = storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_NEAREST_WITH_MIPMAPS_ANISOTROPIC, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
- ids_ptr[5] = storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR_WITH_MIPMAPS_ANISOTROPIC, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
- ids_ptr[6] = storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_NEAREST, RS::CANVAS_ITEM_TEXTURE_REPEAT_ENABLED);
- ids_ptr[7] = storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR, RS::CANVAS_ITEM_TEXTURE_REPEAT_ENABLED);
- ids_ptr[8] = storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_NEAREST_WITH_MIPMAPS, RS::CANVAS_ITEM_TEXTURE_REPEAT_ENABLED);
- ids_ptr[9] = storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR_WITH_MIPMAPS, RS::CANVAS_ITEM_TEXTURE_REPEAT_ENABLED);
- ids_ptr[10] = storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_NEAREST_WITH_MIPMAPS_ANISOTROPIC, RS::CANVAS_ITEM_TEXTURE_REPEAT_ENABLED);
- ids_ptr[11] = storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR_WITH_MIPMAPS_ANISOTROPIC, RS::CANVAS_ITEM_TEXTURE_REPEAT_ENABLED);
+ ids_ptr[0] = storage->sampler_rd_get_custom(RS::CANVAS_ITEM_TEXTURE_FILTER_NEAREST, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
+ ids_ptr[1] = storage->sampler_rd_get_custom(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
+ ids_ptr[2] = storage->sampler_rd_get_custom(RS::CANVAS_ITEM_TEXTURE_FILTER_NEAREST_WITH_MIPMAPS, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
+ ids_ptr[3] = storage->sampler_rd_get_custom(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR_WITH_MIPMAPS, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
+ ids_ptr[4] = storage->sampler_rd_get_custom(RS::CANVAS_ITEM_TEXTURE_FILTER_NEAREST_WITH_MIPMAPS_ANISOTROPIC, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
+ ids_ptr[5] = storage->sampler_rd_get_custom(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR_WITH_MIPMAPS_ANISOTROPIC, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
+ ids_ptr[6] = storage->sampler_rd_get_custom(RS::CANVAS_ITEM_TEXTURE_FILTER_NEAREST, RS::CANVAS_ITEM_TEXTURE_REPEAT_ENABLED);
+ ids_ptr[7] = storage->sampler_rd_get_custom(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR, RS::CANVAS_ITEM_TEXTURE_REPEAT_ENABLED);
+ ids_ptr[8] = storage->sampler_rd_get_custom(RS::CANVAS_ITEM_TEXTURE_FILTER_NEAREST_WITH_MIPMAPS, RS::CANVAS_ITEM_TEXTURE_REPEAT_ENABLED);
+ ids_ptr[9] = storage->sampler_rd_get_custom(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR_WITH_MIPMAPS, RS::CANVAS_ITEM_TEXTURE_REPEAT_ENABLED);
+ ids_ptr[10] = storage->sampler_rd_get_custom(RS::CANVAS_ITEM_TEXTURE_FILTER_NEAREST_WITH_MIPMAPS_ANISOTROPIC, RS::CANVAS_ITEM_TEXTURE_REPEAT_ENABLED);
+ ids_ptr[11] = storage->sampler_rd_get_custom(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR_WITH_MIPMAPS_ANISOTROPIC, RS::CANVAS_ITEM_TEXTURE_REPEAT_ENABLED);
uniforms.push_back(u);
}
@@ -1985,19 +2001,19 @@ void RenderForwardClustered::_update_render_base_uniform_set() {
RID sampler;
switch (decals_get_filter()) {
case RS::DECAL_FILTER_NEAREST: {
- sampler = storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_NEAREST, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
+ sampler = storage->sampler_rd_get_custom(RS::CANVAS_ITEM_TEXTURE_FILTER_NEAREST, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
} break;
case RS::DECAL_FILTER_NEAREST_MIPMAPS: {
- sampler = storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_NEAREST_WITH_MIPMAPS, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
+ sampler = storage->sampler_rd_get_custom(RS::CANVAS_ITEM_TEXTURE_FILTER_NEAREST_WITH_MIPMAPS, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
} break;
case RS::DECAL_FILTER_LINEAR: {
- sampler = storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
+ sampler = storage->sampler_rd_get_custom(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
} break;
case RS::DECAL_FILTER_LINEAR_MIPMAPS: {
- sampler = storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR_WITH_MIPMAPS, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
+ sampler = storage->sampler_rd_get_custom(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR_WITH_MIPMAPS, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
} break;
case RS::DECAL_FILTER_LINEAR_MIPMAPS_ANISOTROPIC: {
- sampler = storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR_WITH_MIPMAPS_ANISOTROPIC, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
+ sampler = storage->sampler_rd_get_custom(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR_WITH_MIPMAPS_ANISOTROPIC, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
} break;
}
@@ -2012,19 +2028,19 @@ void RenderForwardClustered::_update_render_base_uniform_set() {
RID sampler;
switch (light_projectors_get_filter()) {
case RS::LIGHT_PROJECTOR_FILTER_NEAREST: {
- sampler = storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_NEAREST, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
+ sampler = storage->sampler_rd_get_custom(RS::CANVAS_ITEM_TEXTURE_FILTER_NEAREST, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
} break;
case RS::LIGHT_PROJECTOR_FILTER_NEAREST_MIPMAPS: {
- sampler = storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_NEAREST_WITH_MIPMAPS, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
+ sampler = storage->sampler_rd_get_custom(RS::CANVAS_ITEM_TEXTURE_FILTER_NEAREST_WITH_MIPMAPS, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
} break;
case RS::LIGHT_PROJECTOR_FILTER_LINEAR: {
- sampler = storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
+ sampler = storage->sampler_rd_get_custom(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
} break;
case RS::LIGHT_PROJECTOR_FILTER_LINEAR_MIPMAPS: {
- sampler = storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR_WITH_MIPMAPS, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
+ sampler = storage->sampler_rd_get_custom(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR_WITH_MIPMAPS, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
} break;
case RS::LIGHT_PROJECTOR_FILTER_LINEAR_MIPMAPS_ANISOTROPIC: {
- sampler = storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR_WITH_MIPMAPS_ANISOTROPIC, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
+ sampler = storage->sampler_rd_get_custom(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR_WITH_MIPMAPS_ANISOTROPIC, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
} break;
}
diff --git a/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.h b/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.h
index 2ba9558128..d6ab4d1db2 100644
--- a/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.h
+++ b/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.h
@@ -129,6 +129,7 @@ class RenderForwardClustered : public RendererSceneRenderRD {
virtual void _base_uniforms_changed() override;
virtual RID _render_buffers_get_normal_texture(RID p_render_buffers) override;
+ bool base_uniform_set_updated = false;
void _update_render_base_uniform_set();
RID _setup_sdfgi_render_pass_uniform_set(RID p_albedo_texture, RID p_emission_texture, RID p_emission_aniso_texture, RID p_geom_facing_texture);
RID _setup_render_pass_uniform_set(RenderListType p_render_list, const RenderDataRD *p_render_data, RID p_radiance_texture, bool p_use_directional_shadow_atlas = false, int p_index = 0);
@@ -257,7 +258,8 @@ class RenderForwardClustered : public RendererSceneRenderRD {
float roughness_limiter_amount;
float roughness_limiter_limit;
- uint32_t roughness_limiter_pad[2];
+ float opaque_prepass_threshold;
+ uint32_t roughness_limiter_pad;
float sdf_to_bounds[16];
@@ -602,6 +604,11 @@ protected:
virtual void _render_particle_collider_heightfield(RID p_fb, const Transform3D &p_cam_transform, const CameraMatrix &p_cam_projection, const PagedArray<GeometryInstance *> &p_instances) override;
public:
+ _FORCE_INLINE_ virtual void update_uniform_sets() override {
+ base_uniform_set_updated = true;
+ _update_render_base_uniform_set();
+ }
+
virtual GeometryInstance *geometry_instance_create(RID p_base) override;
virtual void geometry_instance_set_skeleton(GeometryInstance *p_geometry_instance, RID p_skeleton) override;
virtual void geometry_instance_set_material_override(GeometryInstance *p_geometry_instance, RID p_override) override;
diff --git a/servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.cpp b/servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.cpp
index b74d7f9c31..768bd1de9d 100644
--- a/servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.cpp
+++ b/servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.cpp
@@ -336,11 +336,20 @@ void SceneShaderForwardClustered::ShaderData::set_code(const String &p_code) {
valid = true;
}
-void SceneShaderForwardClustered::ShaderData::set_default_texture_param(const StringName &p_name, RID p_texture) {
+void SceneShaderForwardClustered::ShaderData::set_default_texture_param(const StringName &p_name, RID p_texture, int p_index) {
if (!p_texture.is_valid()) {
- default_texture_params.erase(p_name);
+ if (default_texture_params.has(p_name) && default_texture_params[p_name].has(p_index)) {
+ default_texture_params[p_name].erase(p_index);
+
+ if (default_texture_params[p_name].is_empty()) {
+ default_texture_params.erase(p_name);
+ }
+ }
} else {
- default_texture_params[p_name] = p_texture;
+ if (!default_texture_params.has(p_name)) {
+ default_texture_params[p_name] = Map<int, RID>();
+ }
+ default_texture_params[p_name][p_index] = p_texture;
}
}
@@ -576,6 +585,7 @@ void SceneShaderForwardClustered::init(RendererStorageRD *p_storage, const Strin
actions.renames["CUSTOM1"] = "custom1_attrib";
actions.renames["CUSTOM2"] = "custom2_attrib";
actions.renames["CUSTOM3"] = "custom3_attrib";
+ actions.renames["OUTPUT_IS_SRGB"] = "SHADER_IS_SRGB";
// not implemented but need these just in case code is in the shaders
actions.renames["VIEW_INDEX"] = "0";
@@ -640,6 +650,7 @@ void SceneShaderForwardClustered::init(RendererStorageRD *p_storage, const Strin
actions.render_mode_defines["cull_front"] = "#define DO_SIDE_CHECK\n";
actions.render_mode_defines["cull_disabled"] = "#define DO_SIDE_CHECK\n";
actions.render_mode_defines["particle_trails"] = "#define USE_PARTICLE_TRAILS\n";
+ actions.render_mode_defines["depth_draw_opaque"] = "#define USE_OPAQUE_PREPASS\n";
bool force_lambert = GLOBAL_GET("rendering/shading/overrides/force_lambert_over_burley");
diff --git a/servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.h b/servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.h
index b09bd7e065..f2a55939f4 100644
--- a/servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.h
+++ b/servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.h
@@ -135,7 +135,7 @@ public:
uint32_t ubo_size;
String code;
- Map<StringName, RID> default_texture_params;
+ Map<StringName, Map<int, RID>> default_texture_params;
DepthDraw depth_draw;
DepthTest depth_test;
@@ -166,7 +166,7 @@ public:
uint32_t index = 0;
virtual void set_code(const String &p_Code);
- virtual void set_default_texture_param(const StringName &p_name, RID p_texture);
+ virtual void set_default_texture_param(const StringName &p_name, RID p_texture, int p_index);
virtual void get_param_list(List<PropertyInfo> *p_param_list) const;
void get_instance_param_list(List<RendererStorage::InstanceShaderParam> *p_param_list) const;
diff --git a/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.cpp b/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.cpp
index 95f5b46831..445623fb86 100644
--- a/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.cpp
+++ b/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.cpp
@@ -483,6 +483,7 @@ void RenderForwardMobile::_render_scene(RenderDataRD *p_render_data, const Color
scene_state.ubo.viewport_size[0] = vp_he.x;
scene_state.ubo.viewport_size[1] = vp_he.y;
scene_state.ubo.directional_light_count = 0;
+ scene_state.ubo.opaque_prepass_threshold = 0.0;
// We can only use our full subpass approach if we're:
// - not reading from SCREEN_TEXTURE/DEPTH_TEXTURE
@@ -793,7 +794,7 @@ void RenderForwardMobile::_render_scene(RenderDataRD *p_render_data, const Color
if (using_subpass_transparent) {
RD::FramebufferFormatID fb_format = RD::get_singleton()->framebuffer_get_format(framebuffer);
- RenderListParameters render_list_params(render_list[RENDER_LIST_ALPHA].elements.ptr(), render_list[RENDER_LIST_ALPHA].element_info.ptr(), render_list[RENDER_LIST_ALPHA].elements.size(), reverse_cull, PASS_MODE_COLOR, rp_uniform_set, spec_constant_base_flags, get_debug_draw_mode() == RS::VIEWPORT_DEBUG_DRAW_WIREFRAME, Vector2(), p_render_data->lod_camera_plane, p_render_data->lod_distance_multiplier, p_render_data->screen_lod_threshold, p_render_data->view_count);
+ RenderListParameters render_list_params(render_list[RENDER_LIST_ALPHA].elements.ptr(), render_list[RENDER_LIST_ALPHA].element_info.ptr(), render_list[RENDER_LIST_ALPHA].elements.size(), reverse_cull, PASS_MODE_COLOR_TRANSPARENT, rp_uniform_set, spec_constant_base_flags, get_debug_draw_mode() == RS::VIEWPORT_DEBUG_DRAW_WIREFRAME, Vector2(), p_render_data->lod_camera_plane, p_render_data->lod_distance_multiplier, p_render_data->screen_lod_threshold, p_render_data->view_count);
render_list_params.framebuffer_format = fb_format;
if ((uint32_t)render_list_params.element_count > render_list_thread_threshold && false) {
// secondary command buffers need more testing at this time
@@ -897,6 +898,7 @@ void RenderForwardMobile::_render_shadow_append(RID p_framebuffer, const PagedAr
render_data.lod_distance_multiplier = p_lod_distance_multiplier;
scene_state.ubo.dual_paraboloid_side = p_use_dp_flip ? -1 : 1;
+ scene_state.ubo.opaque_prepass_threshold = 0.1;
_setup_environment(&render_data, true, Vector2(1, 1), !p_flip_y, Color(), false, p_use_pancake, shadow_pass_index);
@@ -978,6 +980,7 @@ void RenderForwardMobile::_render_material(const Transform3D &p_cam_transform, c
scene_state.ubo.dual_paraboloid_side = 0;
scene_state.ubo.material_uv2_mode = false;
+ scene_state.ubo.opaque_prepass_threshold = 0.0f;
RenderDataRD render_data;
render_data.cam_projection = p_cam_projection;
@@ -1089,6 +1092,7 @@ void RenderForwardMobile::_render_particle_collider_heightfield(RID p_fb, const
_update_render_base_uniform_set();
scene_state.ubo.dual_paraboloid_side = 0;
+ scene_state.ubo.opaque_prepass_threshold = 0.0;
RenderDataRD render_data;
render_data.cam_projection = p_cam_projection;
@@ -1447,13 +1451,13 @@ void RenderForwardMobile::_fill_render_list(RenderListType p_render_list, const
}
// ADD Element
- if (p_pass_mode == PASS_MODE_COLOR) {
+ if (p_pass_mode == PASS_MODE_COLOR || p_pass_mode == PASS_MODE_COLOR_TRANSPARENT) {
#ifdef DEBUG_ENABLED
bool force_alpha = unlikely(get_debug_draw_mode() == RS::VIEWPORT_DEBUG_DRAW_OVERDRAW);
#else
bool force_alpha = false;
#endif
- if (!force_alpha && (surf->flags & (GeometryInstanceSurfaceDataCache::FLAG_PASS_DEPTH | GeometryInstanceSurfaceDataCache::FLAG_PASS_OPAQUE))) {
+ if (!force_alpha && (surf->flags & GeometryInstanceSurfaceDataCache::FLAG_PASS_OPAQUE)) {
rl->add_element(surf);
}
if (force_alpha || (surf->flags & GeometryInstanceSurfaceDataCache::FLAG_PASS_ALPHA)) {
@@ -1821,6 +1825,10 @@ void RenderForwardMobile::_render_list_template(RenderingDevice::DrawListID p_dr
const RenderElementInfo &element_info = p_params->element_info[i];
const GeometryInstanceForwardMobile *inst = surf->owner;
+ if (inst->instance_count == 0) {
+ continue;
+ }
+
uint32_t base_spec_constants = p_params->spec_constant_base_flags;
// GeometryInstanceForwardMobile::PushConstant push_constant = inst->push_constant;
diff --git a/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.h b/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.h
index 74bfe16557..485d08b589 100644
--- a/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.h
+++ b/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.h
@@ -292,7 +292,8 @@ protected:
float roughness_limiter_amount;
float roughness_limiter_limit;
- uint32_t roughness_limiter_pad[2];
+ float opaque_prepass_threshold;
+ uint32_t roughness_limiter_pad;
// Fog
uint32_t fog_enabled;
diff --git a/servers/rendering/renderer_rd/forward_mobile/scene_shader_forward_mobile.cpp b/servers/rendering/renderer_rd/forward_mobile/scene_shader_forward_mobile.cpp
index 16d650a540..e6d9a60f94 100644
--- a/servers/rendering/renderer_rd/forward_mobile/scene_shader_forward_mobile.cpp
+++ b/servers/rendering/renderer_rd/forward_mobile/scene_shader_forward_mobile.cpp
@@ -325,11 +325,20 @@ void SceneShaderForwardMobile::ShaderData::set_code(const String &p_code) {
valid = true;
}
-void SceneShaderForwardMobile::ShaderData::set_default_texture_param(const StringName &p_name, RID p_texture) {
+void SceneShaderForwardMobile::ShaderData::set_default_texture_param(const StringName &p_name, RID p_texture, int p_index) {
if (!p_texture.is_valid()) {
- default_texture_params.erase(p_name);
+ if (default_texture_params.has(p_name) && default_texture_params[p_name].has(p_index)) {
+ default_texture_params[p_name].erase(p_index);
+
+ if (default_texture_params[p_name].is_empty()) {
+ default_texture_params.erase(p_name);
+ }
+ }
} else {
- default_texture_params[p_name] = p_texture;
+ if (!default_texture_params.has(p_name)) {
+ default_texture_params[p_name] = Map<int, RID>();
+ }
+ default_texture_params[p_name][p_index] = p_texture;
}
}
@@ -564,6 +573,7 @@ void SceneShaderForwardMobile::init(RendererStorageRD *p_storage, const String p
actions.renames["CUSTOM1"] = "custom1_attrib";
actions.renames["CUSTOM2"] = "custom2_attrib";
actions.renames["CUSTOM3"] = "custom3_attrib";
+ actions.renames["OUTPUT_IS_SRGB"] = "SHADER_IS_SRGB";
actions.renames["VIEW_INDEX"] = "ViewIndex";
actions.renames["VIEW_MONO_LEFT"] = "0";
@@ -627,6 +637,7 @@ void SceneShaderForwardMobile::init(RendererStorageRD *p_storage, const String p
actions.render_mode_defines["cull_front"] = "#define DO_SIDE_CHECK\n";
actions.render_mode_defines["cull_disabled"] = "#define DO_SIDE_CHECK\n";
actions.render_mode_defines["particle_trails"] = "#define USE_PARTICLE_TRAILS\n";
+ actions.render_mode_defines["depth_draw_opaque"] = "#define USE_OPAQUE_PREPASS\n";
bool force_lambert = GLOBAL_GET("rendering/shading/overrides/force_lambert_over_burley");
if (!force_lambert) {
diff --git a/servers/rendering/renderer_rd/forward_mobile/scene_shader_forward_mobile.h b/servers/rendering/renderer_rd/forward_mobile/scene_shader_forward_mobile.h
index e1c10f0206..392fac1e3e 100644
--- a/servers/rendering/renderer_rd/forward_mobile/scene_shader_forward_mobile.h
+++ b/servers/rendering/renderer_rd/forward_mobile/scene_shader_forward_mobile.h
@@ -111,7 +111,7 @@ public:
uint32_t ubo_size;
String code;
- Map<StringName, RID> default_texture_params;
+ Map<StringName, Map<int, RID>> default_texture_params;
DepthDraw depth_draw;
DepthTest depth_test;
@@ -141,7 +141,7 @@ public:
uint32_t index = 0;
virtual void set_code(const String &p_Code);
- virtual void set_default_texture_param(const StringName &p_name, RID p_texture);
+ virtual void set_default_texture_param(const StringName &p_name, RID p_texture, int p_index);
virtual void get_param_list(List<PropertyInfo> *p_param_list) const;
void get_instance_param_list(List<RendererStorage::InstanceShaderParam> *p_param_list) const;
diff --git a/servers/rendering/renderer_rd/renderer_canvas_render_rd.cpp b/servers/rendering/renderer_rd/renderer_canvas_render_rd.cpp
index 13a3e814f6..d013099cce 100644
--- a/servers/rendering/renderer_rd/renderer_canvas_render_rd.cpp
+++ b/servers/rendering/renderer_rd/renderer_canvas_render_rd.cpp
@@ -758,6 +758,10 @@ void RendererCanvasRenderRD::_render_item(RD::DrawListID p_draw_list, RID p_rend
instance_count = storage->multimesh_get_instances_to_draw(multimesh);
+ if (instance_count == 0) {
+ break;
+ }
+
RID uniform_set = storage->multimesh_get_2d_uniform_set(multimesh, shader.default_version_rd_shader, TRANSFORMS_UNIFORM_SET);
RD::get_singleton()->draw_list_bind_uniform_set(p_draw_list, uniform_set, TRANSFORMS_UNIFORM_SET);
push_constant.flags |= 1; //multimesh, trails disabled
@@ -2120,11 +2124,20 @@ void RendererCanvasRenderRD::ShaderData::set_code(const String &p_code) {
valid = true;
}
-void RendererCanvasRenderRD::ShaderData::set_default_texture_param(const StringName &p_name, RID p_texture) {
+void RendererCanvasRenderRD::ShaderData::set_default_texture_param(const StringName &p_name, RID p_texture, int p_index) {
if (!p_texture.is_valid()) {
- default_texture_params.erase(p_name);
+ if (default_texture_params.has(p_name) && default_texture_params[p_name].has(p_index)) {
+ default_texture_params[p_name].erase(p_index);
+
+ if (default_texture_params[p_name].is_empty()) {
+ default_texture_params.erase(p_name);
+ }
+ }
} else {
- default_texture_params[p_name] = p_texture;
+ if (!default_texture_params.has(p_name)) {
+ default_texture_params[p_name] = Map<int, RID>();
+ }
+ default_texture_params[p_name][p_index] = p_texture;
}
}
diff --git a/servers/rendering/renderer_rd/renderer_canvas_render_rd.h b/servers/rendering/renderer_rd/renderer_canvas_render_rd.h
index ec7d7e2854..26ccbd3bf5 100644
--- a/servers/rendering/renderer_rd/renderer_canvas_render_rd.h
+++ b/servers/rendering/renderer_rd/renderer_canvas_render_rd.h
@@ -173,14 +173,14 @@ class RendererCanvasRenderRD : public RendererCanvasRender {
uint32_t ubo_size;
String code;
- Map<StringName, RID> default_texture_params;
+ Map<StringName, Map<int, RID>> default_texture_params;
bool uses_screen_texture = false;
bool uses_sdf = false;
bool uses_time = false;
virtual void set_code(const String &p_Code);
- virtual void set_default_texture_param(const StringName &p_name, RID p_texture);
+ virtual void set_default_texture_param(const StringName &p_name, RID p_texture, int p_index);
virtual void get_param_list(List<PropertyInfo> *p_param_list) const;
virtual void get_instance_param_list(List<RendererStorage::InstanceShaderParam> *p_param_list) const;
diff --git a/servers/rendering/renderer_rd/renderer_compositor_rd.cpp b/servers/rendering/renderer_rd/renderer_compositor_rd.cpp
index 559e6d5ad7..522a8e8112 100644
--- a/servers/rendering/renderer_rd/renderer_compositor_rd.cpp
+++ b/servers/rendering/renderer_rd/renderer_compositor_rd.cpp
@@ -281,12 +281,12 @@ RendererCompositorRD::RendererCompositorRD() {
storage = memnew(RendererStorageRD);
canvas = memnew(RendererCanvasRenderRD(storage));
- uint32_t back_end = GLOBAL_GET("rendering/vulkan/rendering/back_end");
+ back_end = (bool)(int)GLOBAL_GET("rendering/vulkan/rendering/back_end");
uint32_t textures_per_stage = RD::get_singleton()->limit_get(RD::LIMIT_MAX_TEXTURES_PER_SHADER_STAGE);
- if (back_end == 1 || textures_per_stage < 48) {
+ if (back_end || textures_per_stage < 48) {
scene = memnew(RendererSceneRenderImplementation::RenderForwardMobile(storage));
- } else { // back_end == 0
+ } else { // back_end == false
// default to our high end renderer
scene = memnew(RendererSceneRenderImplementation::RenderForwardClustered(storage));
}
diff --git a/servers/rendering/renderer_rd/renderer_compositor_rd.h b/servers/rendering/renderer_rd/renderer_compositor_rd.h
index 0230c46800..f69e40e0ff 100644
--- a/servers/rendering/renderer_rd/renderer_compositor_rd.h
+++ b/servers/rendering/renderer_rd/renderer_compositor_rd.h
@@ -116,8 +116,6 @@ public:
_create_func = _create_current;
}
- virtual bool is_low_end() const { return false; }
-
static RendererCompositorRD *singleton;
RendererCompositorRD();
~RendererCompositorRD();
diff --git a/servers/rendering/renderer_rd/renderer_scene_gi_rd.cpp b/servers/rendering/renderer_rd/renderer_scene_gi_rd.cpp
index 807af00c8e..b6b5c90b39 100644
--- a/servers/rendering/renderer_rd/renderer_scene_gi_rd.cpp
+++ b/servers/rendering/renderer_rd/renderer_scene_gi_rd.cpp
@@ -3132,8 +3132,8 @@ void RendererSceneGIRD::process_gi(RID p_render_buffers, RID p_normal_roughness_
RD::TextureFormat tf;
tf.format = RD::DATA_FORMAT_R16G16B16A16_SFLOAT;
- tf.width = rb->width;
- tf.height = rb->height;
+ tf.width = rb->internal_width;
+ tf.height = rb->internal_height;
if (half_resolution) {
tf.width >>= 1;
tf.height >>= 1;
@@ -3146,13 +3146,13 @@ void RendererSceneGIRD::process_gi(RID p_render_buffers, RID p_normal_roughness_
PushConstant push_constant;
- push_constant.screen_size[0] = rb->width;
- push_constant.screen_size[1] = rb->height;
+ push_constant.screen_size[0] = rb->internal_width;
+ push_constant.screen_size[1] = rb->internal_height;
push_constant.z_near = p_projection.get_z_near();
push_constant.z_far = p_projection.get_z_far();
push_constant.orthogonal = p_projection.is_orthogonal();
- push_constant.proj_info[0] = -2.0f / (rb->width * p_projection.matrix[0][0]);
- push_constant.proj_info[1] = -2.0f / (rb->height * p_projection.matrix[1][1]);
+ push_constant.proj_info[0] = -2.0f / (rb->internal_width * p_projection.matrix[0][0]);
+ push_constant.proj_info[1] = -2.0f / (rb->internal_height * p_projection.matrix[1][1]);
push_constant.proj_info[2] = (1.0f - p_projection.matrix[0][2]) / p_projection.matrix[0][0];
push_constant.proj_info[3] = (1.0f + p_projection.matrix[1][2]) / p_projection.matrix[1][1];
push_constant.max_voxel_gi_instances = MIN((uint64_t)MAX_VOXEL_GI_INSTANCES, p_voxel_gi_instances.size());
@@ -3344,9 +3344,9 @@ void RendererSceneGIRD::process_gi(RID p_render_buffers, RID p_normal_roughness_
RD::get_singleton()->compute_list_set_push_constant(compute_list, &push_constant, sizeof(PushConstant));
if (rb->gi.using_half_size_gi) {
- RD::get_singleton()->compute_list_dispatch_threads(compute_list, rb->width >> 1, rb->height >> 1, 1);
+ RD::get_singleton()->compute_list_dispatch_threads(compute_list, rb->internal_width >> 1, rb->internal_height >> 1, 1);
} else {
- RD::get_singleton()->compute_list_dispatch_threads(compute_list, rb->width, rb->height, 1);
+ RD::get_singleton()->compute_list_dispatch_threads(compute_list, rb->internal_width, rb->internal_height, 1);
}
//do barrier later to allow oeverlap
//RD::get_singleton()->compute_list_end(RD::BARRIER_MASK_NO_BARRIER); //no barriers, let other compute, raster and transfer happen at the same time
diff --git a/servers/rendering/renderer_rd/renderer_scene_render_rd.cpp b/servers/rendering/renderer_rd/renderer_scene_render_rd.cpp
index 0ca2f051fa..ae8d91a73b 100644
--- a/servers/rendering/renderer_rd/renderer_scene_render_rd.cpp
+++ b/servers/rendering/renderer_rd/renderer_scene_render_rd.cpp
@@ -1503,8 +1503,8 @@ void RendererSceneRenderRD::_allocate_blur_textures(RenderBuffers *rb) {
RD::TextureFormat tf;
tf.format = _render_buffers_get_color_format(); // RD::DATA_FORMAT_R16G16B16A16_SFLOAT;
- tf.width = rb->width;
- tf.height = rb->height;
+ tf.width = rb->internal_width;
+ tf.height = rb->internal_height;
tf.texture_type = rb->view_count > 1 ? RD::TEXTURE_TYPE_2D_ARRAY : RD::TEXTURE_TYPE_2D;
tf.array_layers = rb->view_count;
tf.usage_bits = RD::TEXTURE_USAGE_SAMPLING_BIT | RD::TEXTURE_USAGE_CAN_COPY_TO_BIT;
@@ -1515,6 +1515,10 @@ void RendererSceneRenderRD::_allocate_blur_textures(RenderBuffers *rb) {
}
tf.mipmaps = mipmaps_required;
+ rb->sss_texture = RD::get_singleton()->texture_create(tf, RD::TextureView());
+
+ tf.width = rb->internal_width;
+ tf.height = rb->internal_height;
rb->blur[0].texture = RD::get_singleton()->texture_create(tf, RD::TextureView());
//the second one is smaller (only used for separatable part of blur)
tf.width >>= 1;
@@ -1522,8 +1526,8 @@ void RendererSceneRenderRD::_allocate_blur_textures(RenderBuffers *rb) {
tf.mipmaps--;
rb->blur[1].texture = RD::get_singleton()->texture_create(tf, RD::TextureView());
- int base_width = rb->width;
- int base_height = rb->height;
+ int base_width = rb->internal_width;
+ int base_height = rb->internal_height;
for (uint32_t i = 0; i < mipmaps_required; i++) {
RenderBuffers::Blur::Mipmap mm;
@@ -1577,8 +1581,8 @@ void RendererSceneRenderRD::_allocate_blur_textures(RenderBuffers *rb) {
// create 4 weight textures, 2 full size, 2 half size
tf.format = RD::DATA_FORMAT_R16_SFLOAT; // We could probably use DATA_FORMAT_R8_SNORM if we don't pre-multiply by blur_size but that depends on whether we can remove DEPTH_GAP
- tf.width = rb->width;
- tf.height = rb->height;
+ tf.width = rb->internal_width;
+ tf.height = rb->internal_height;
tf.texture_type = rb->view_count > 1 ? RD::TEXTURE_TYPE_2D_ARRAY : RD::TEXTURE_TYPE_2D;
tf.array_layers = rb->view_count;
tf.usage_bits = RD::TEXTURE_USAGE_SAMPLING_BIT | RD::TEXTURE_USAGE_CAN_COPY_TO_BIT | RD::TEXTURE_USAGE_COLOR_ATTACHMENT_BIT;
@@ -1656,8 +1660,8 @@ void RendererSceneRenderRD::_allocate_depth_backbuffer_textures(RenderBuffers *r
void RendererSceneRenderRD::_allocate_luminance_textures(RenderBuffers *rb) {
ERR_FAIL_COND(!rb->luminance.current.is_null());
- int w = rb->width;
- int h = rb->height;
+ int w = rb->internal_width;
+ int h = rb->internal_height;
while (true) {
w = MAX(w / 8, 1);
@@ -1709,9 +1713,26 @@ void RendererSceneRenderRD::_free_render_buffer_data(RenderBuffers *rb) {
rb->texture_fb = RID();
}
- if (rb->texture.is_valid()) {
- RD::get_singleton()->free(rb->texture);
+ if (rb->internal_texture == rb->texture && rb->internal_texture.is_valid()) {
+ RD::get_singleton()->free(rb->internal_texture);
rb->texture = RID();
+ rb->internal_texture = RID();
+ rb->upscale_texture = RID();
+ } else {
+ if (rb->texture.is_valid()) {
+ RD::get_singleton()->free(rb->texture);
+ rb->texture = RID();
+ }
+
+ if (rb->internal_texture.is_valid()) {
+ RD::get_singleton()->free(rb->internal_texture);
+ rb->internal_texture = RID();
+ }
+
+ if (rb->upscale_texture.is_valid()) {
+ RD::get_singleton()->free(rb->upscale_texture);
+ rb->upscale_texture = RID();
+ }
}
if (rb->depth_texture.is_valid()) {
@@ -1729,6 +1750,11 @@ void RendererSceneRenderRD::_free_render_buffer_data(RenderBuffers *rb) {
rb->depth_back_texture = RID();
}
+ if (rb->sss_texture.is_valid()) {
+ RD::get_singleton()->free(rb->sss_texture);
+ rb->sss_texture = RID();
+ }
+
for (int i = 0; i < 2; i++) {
for (int m = 0; m < rb->blur[i].mipmaps.size(); m++) {
// do we free the texture slice here? or is it enough to free the main texture?
@@ -1818,7 +1844,7 @@ void RendererSceneRenderRD::_process_sss(RID p_render_buffers, const CameraMatri
RenderBuffers *rb = render_buffers_owner.get_or_null(p_render_buffers);
ERR_FAIL_COND(!rb);
- bool can_use_effects = rb->width >= 8 && rb->height >= 8;
+ bool can_use_effects = rb->internal_width >= 8 && rb->internal_height >= 8;
if (!can_use_effects) {
//just copy
@@ -1829,18 +1855,18 @@ void RendererSceneRenderRD::_process_sss(RID p_render_buffers, const CameraMatri
_allocate_blur_textures(rb);
}
- storage->get_effects()->sub_surface_scattering(rb->texture, rb->blur[0].mipmaps[0].texture, rb->depth_texture, p_camera, Size2i(rb->width, rb->height), sss_scale, sss_depth_scale, sss_quality);
+ storage->get_effects()->sub_surface_scattering(rb->internal_texture, rb->sss_texture, rb->depth_texture, p_camera, Size2i(rb->internal_width, rb->internal_height), sss_scale, sss_depth_scale, sss_quality);
}
void RendererSceneRenderRD::_process_ssr(RID p_render_buffers, RID p_dest_framebuffer, RID p_normal_buffer, RID p_specular_buffer, RID p_metallic, const Color &p_metallic_mask, RID p_environment, const CameraMatrix &p_projection, bool p_use_additive) {
RenderBuffers *rb = render_buffers_owner.get_or_null(p_render_buffers);
ERR_FAIL_COND(!rb);
- bool can_use_effects = rb->width >= 8 && rb->height >= 8;
+ bool can_use_effects = rb->internal_width >= 8 && rb->internal_height >= 8;
if (!can_use_effects) {
//just copy
- storage->get_effects()->merge_specular(p_dest_framebuffer, p_specular_buffer, p_use_additive ? RID() : rb->texture, RID());
+ storage->get_effects()->merge_specular(p_dest_framebuffer, p_specular_buffer, p_use_additive ? RID() : rb->internal_texture, RID());
return;
}
@@ -1852,8 +1878,8 @@ void RendererSceneRenderRD::_process_ssr(RID p_render_buffers, RID p_dest_frameb
if (rb->ssr.depth_scaled.is_null()) {
RD::TextureFormat tf;
tf.format = RD::DATA_FORMAT_R32_SFLOAT;
- tf.width = rb->width / 2;
- tf.height = rb->height / 2;
+ tf.width = rb->internal_width / 2;
+ tf.height = rb->internal_height / 2;
tf.texture_type = RD::TEXTURE_TYPE_2D;
tf.usage_bits = RD::TEXTURE_USAGE_STORAGE_BIT;
@@ -1867,8 +1893,8 @@ void RendererSceneRenderRD::_process_ssr(RID p_render_buffers, RID p_dest_frameb
if (ssr_roughness_quality != RS::ENV_SSR_ROUGNESS_QUALITY_DISABLED && !rb->ssr.blur_radius[0].is_valid()) {
RD::TextureFormat tf;
tf.format = RD::DATA_FORMAT_R8_UNORM;
- tf.width = rb->width / 2;
- tf.height = rb->height / 2;
+ tf.width = rb->internal_width / 2;
+ tf.height = rb->internal_height / 2;
tf.texture_type = RD::TEXTURE_TYPE_2D;
tf.usage_bits = RD::TEXTURE_USAGE_STORAGE_BIT | RD::TEXTURE_USAGE_SAMPLING_BIT;
@@ -1880,8 +1906,8 @@ void RendererSceneRenderRD::_process_ssr(RID p_render_buffers, RID p_dest_frameb
_allocate_blur_textures(rb);
}
- storage->get_effects()->screen_space_reflection(rb->texture, p_normal_buffer, ssr_roughness_quality, rb->ssr.blur_radius[0], rb->ssr.blur_radius[1], p_metallic, p_metallic_mask, rb->depth_texture, rb->ssr.depth_scaled, rb->ssr.normal_scaled, rb->blur[0].mipmaps[1].texture, rb->blur[1].mipmaps[0].texture, Size2i(rb->width / 2, rb->height / 2), env->ssr_max_steps, env->ssr_fade_in, env->ssr_fade_out, env->ssr_depth_tolerance, p_projection);
- storage->get_effects()->merge_specular(p_dest_framebuffer, p_specular_buffer, p_use_additive ? RID() : rb->texture, rb->blur[0].mipmaps[1].texture);
+ storage->get_effects()->screen_space_reflection(rb->internal_texture, p_normal_buffer, ssr_roughness_quality, rb->ssr.blur_radius[0], rb->ssr.blur_radius[1], p_metallic, p_metallic_mask, rb->depth_texture, rb->ssr.depth_scaled, rb->ssr.normal_scaled, rb->blur[0].mipmaps[1].texture, rb->blur[1].mipmaps[0].texture, Size2i(rb->internal_width / 2, rb->internal_height / 2), env->ssr_max_steps, env->ssr_fade_in, env->ssr_fade_out, env->ssr_depth_tolerance, p_projection);
+ storage->get_effects()->merge_specular(p_dest_framebuffer, p_specular_buffer, p_use_additive ? RID() : rb->internal_texture, rb->blur[0].mipmaps[1].texture);
}
void RendererSceneRenderRD::_process_ssao(RID p_render_buffers, RID p_environment, RID p_normal_buffer, const CameraMatrix &p_projection) {
@@ -1918,15 +1944,15 @@ void RendererSceneRenderRD::_process_ssao(RID p_render_buffers, RID p_environmen
int half_width;
int half_height;
if (ssao_half_size) {
- buffer_width = (rb->width + 3) / 4;
- buffer_height = (rb->height + 3) / 4;
- half_width = (rb->width + 7) / 8;
- half_height = (rb->height + 7) / 8;
+ buffer_width = (rb->internal_width + 3) / 4;
+ buffer_height = (rb->internal_height + 3) / 4;
+ half_width = (rb->internal_width + 7) / 8;
+ half_height = (rb->internal_height + 7) / 8;
} else {
- buffer_width = (rb->width + 1) / 2;
- buffer_height = (rb->height + 1) / 2;
- half_width = (rb->width + 3) / 4;
- half_height = (rb->height + 3) / 4;
+ buffer_width = (rb->internal_width + 1) / 2;
+ buffer_height = (rb->internal_height + 1) / 2;
+ half_width = (rb->internal_width + 3) / 4;
+ half_height = (rb->internal_height + 3) / 4;
}
bool uniform_sets_are_invalid = false;
if (rb->ssao.depth.is_null()) {
@@ -1998,8 +2024,8 @@ void RendererSceneRenderRD::_process_ssao(RID p_render_buffers, RID p_environmen
{
RD::TextureFormat tf;
tf.format = RD::DATA_FORMAT_R8_UNORM;
- tf.width = rb->width;
- tf.height = rb->height;
+ tf.width = rb->internal_width;
+ tf.height = rb->internal_height;
tf.usage_bits = RD::TEXTURE_USAGE_SAMPLING_BIT | RD::TEXTURE_USAGE_STORAGE_BIT;
rb->ssao.ao_final = RD::get_singleton()->texture_create(tf, RD::TextureView());
RD::get_singleton()->set_resource_name(rb->ssao.ao_final, "SSAO Final");
@@ -2022,7 +2048,7 @@ void RendererSceneRenderRD::_process_ssao(RID p_render_buffers, RID p_environmen
settings.blur_passes = ssao_blur_passes;
settings.fadeout_from = ssao_fadeout_from;
settings.fadeout_to = ssao_fadeout_to;
- settings.full_screen_size = Size2i(rb->width, rb->height);
+ settings.full_screen_size = Size2i(rb->internal_width, rb->internal_height);
settings.half_screen_size = Size2i(buffer_width, buffer_height);
settings.quarter_screen_size = Size2i(half_width, half_height);
@@ -2086,7 +2112,7 @@ void RendererSceneRenderRD::_render_buffers_post_process_and_tonemap(const Rende
ERR_FAIL_COND(!rb);
RendererSceneEnvironmentRD *env = environment_owner.get_or_null(p_render_data->environment);
- //glow (if enabled)
+ // Glow and override exposure (if enabled).
CameraEffects *camfx = camera_effects_owner.get_or_null(p_render_data->camera_effects);
bool can_use_effects = rb->width >= 8 && rb->height >= 8;
@@ -2102,9 +2128,9 @@ void RendererSceneRenderRD::_render_buffers_post_process_and_tonemap(const Rende
EffectsRD::BokehBuffers buffers;
- // textures we use
- buffers.base_texture_size = Size2i(rb->width, rb->height);
- buffers.base_texture = rb->texture;
+ // Textures we use
+ buffers.base_texture_size = Size2i(rb->internal_width, rb->internal_height);
+ buffers.base_texture = rb->internal_texture;
buffers.depth_texture = rb->depth_texture;
buffers.secondary_texture = rb->blur[0].mipmaps[0].texture;
buffers.half_texture[0] = rb->blur[1].mipmaps[0].texture;
@@ -2114,7 +2140,7 @@ void RendererSceneRenderRD::_render_buffers_post_process_and_tonemap(const Rende
if (can_use_storage) {
storage->get_effects()->bokeh_dof(buffers, camfx->dof_blur_far_enabled, camfx->dof_blur_far_distance, camfx->dof_blur_far_transition, camfx->dof_blur_near_enabled, camfx->dof_blur_near_distance, camfx->dof_blur_near_transition, bokeh_size, dof_blur_bokeh_shape, dof_blur_quality, dof_blur_use_jitter, p_render_data->z_near, p_render_data->z_far, p_render_data->cam_ortogonal);
} else {
- // set framebuffers
+ // Set framebuffers.
buffers.base_fb = rb->texture_fb;
buffers.secondary_fb = rb->weight_buffers[1].fb;
buffers.half_fb[0] = rb->weight_buffers[2].fb;
@@ -2124,7 +2150,7 @@ void RendererSceneRenderRD::_render_buffers_post_process_and_tonemap(const Rende
buffers.weight_texture[2] = rb->weight_buffers[2].weight;
buffers.weight_texture[3] = rb->weight_buffers[3].weight;
- // set weight buffers
+ // Set weight buffers.
buffers.base_weight_fb = rb->base_weight_fb;
storage->get_effects()->bokeh_dof_raster(buffers, camfx->dof_blur_far_enabled, camfx->dof_blur_far_distance, camfx->dof_blur_far_transition, camfx->dof_blur_near_enabled, camfx->dof_blur_near_distance, camfx->dof_blur_near_transition, bokeh_size, dof_blur_bokeh_shape, dof_blur_quality, p_render_data->z_near, p_render_data->z_far, p_render_data->cam_ortogonal);
@@ -2143,17 +2169,17 @@ void RendererSceneRenderRD::_render_buffers_post_process_and_tonemap(const Rende
double step = env->auto_exp_speed * time_step;
if (can_use_storage) {
- storage->get_effects()->luminance_reduction(rb->texture, Size2i(rb->width, rb->height), rb->luminance.reduce, rb->luminance.current, env->min_luminance, env->max_luminance, step, set_immediate);
+ storage->get_effects()->luminance_reduction(rb->internal_texture, Size2i(rb->internal_width, rb->internal_height), rb->luminance.reduce, rb->luminance.current, env->min_luminance, env->max_luminance, step, set_immediate);
} else {
- storage->get_effects()->luminance_reduction_raster(rb->texture, Size2i(rb->width, rb->height), rb->luminance.reduce, rb->luminance.fb, rb->luminance.current, env->min_luminance, env->max_luminance, step, set_immediate);
+ storage->get_effects()->luminance_reduction_raster(rb->internal_texture, Size2i(rb->internal_width, rb->internal_height), rb->luminance.reduce, rb->luminance.fb, rb->luminance.current, env->min_luminance, env->max_luminance, step, set_immediate);
}
- //swap final reduce with prev luminance
+ // Swap final reduce with prev luminance.
SWAP(rb->luminance.current, rb->luminance.reduce.write[rb->luminance.reduce.size() - 1]);
if (!can_use_storage) {
SWAP(rb->luminance.current_fb, rb->luminance.fb.write[rb->luminance.fb.size() - 1]);
}
- RenderingServerDefault::redraw_request(); //redraw all the time if auto exposure rendering is on
+ RenderingServerDefault::redraw_request(); // Redraw all the time if auto exposure rendering is on.
RD::get_singleton()->draw_command_end_label();
}
@@ -2188,9 +2214,9 @@ void RendererSceneRenderRD::_render_buffers_post_process_and_tonemap(const Rende
luminance_texture = rb->luminance.current;
}
if (can_use_storage) {
- storage->get_effects()->gaussian_glow(rb->texture, rb->blur[1].mipmaps[i].texture, Size2i(vp_w, vp_h), env->glow_strength, glow_high_quality, true, env->glow_hdr_luminance_cap, env->exposure, env->glow_bloom, env->glow_hdr_bleed_threshold, env->glow_hdr_bleed_scale, luminance_texture, env->auto_exp_scale);
+ storage->get_effects()->gaussian_glow(rb->internal_texture, rb->blur[1].mipmaps[i].texture, Size2i(vp_w, vp_h), env->glow_strength, glow_high_quality, true, env->glow_hdr_luminance_cap, env->exposure, env->glow_bloom, env->glow_hdr_bleed_threshold, env->glow_hdr_bleed_scale, luminance_texture, env->auto_exp_scale);
} else {
- storage->get_effects()->gaussian_glow_raster(rb->texture, rb->blur[1].mipmaps[i].half_fb, rb->blur[1].mipmaps[i].half_texture, rb->blur[1].mipmaps[i].fb, Size2i(vp_w, vp_h), env->glow_strength, glow_high_quality, true, env->glow_hdr_luminance_cap, env->exposure, env->glow_bloom, env->glow_hdr_bleed_threshold, env->glow_hdr_bleed_scale, luminance_texture, env->auto_exp_scale);
+ storage->get_effects()->gaussian_glow_raster(rb->internal_texture, rb->blur[1].mipmaps[i].half_fb, rb->blur[1].mipmaps[i].half_texture, rb->blur[1].mipmaps[i].fb, Size2i(vp_w, vp_h), env->glow_strength, glow_high_quality, true, env->glow_hdr_luminance_cap, env->exposure, env->glow_bloom, env->glow_hdr_bleed_threshold, env->glow_hdr_bleed_scale, luminance_texture, env->auto_exp_scale);
}
} else {
if (can_use_storage) {
@@ -2207,7 +2233,6 @@ void RendererSceneRenderRD::_render_buffers_post_process_and_tonemap(const Rende
{
RD::get_singleton()->draw_command_begin_label("Tonemap");
- //tonemap
EffectsRD::TonemapSettings tonemap;
if (can_use_effects && env && env->auto_exposure && rb->luminance.current.is_valid()) {
@@ -2238,7 +2263,7 @@ void RendererSceneRenderRD::_render_buffers_post_process_and_tonemap(const Rende
}
tonemap.use_debanding = rb->use_debanding;
- tonemap.texture_size = Vector2i(rb->width, rb->height);
+ tonemap.texture_size = Vector2i(rb->internal_width, rb->internal_height);
if (env) {
tonemap.tonemap_mode = env->tone_mapper;
@@ -2246,6 +2271,10 @@ void RendererSceneRenderRD::_render_buffers_post_process_and_tonemap(const Rende
tonemap.exposure = env->exposure;
}
+ if (camfx && camfx->override_exposure_enabled) {
+ tonemap.exposure = camfx->override_exposure;
+ }
+
tonemap.use_color_correction = false;
tonemap.use_1d_color_correction = false;
tonemap.color_correction_texture = storage->texture_rd_get_default(RendererStorageRD::DEFAULT_RD_TEXTURE_3D_WHITE);
@@ -2265,7 +2294,15 @@ void RendererSceneRenderRD::_render_buffers_post_process_and_tonemap(const Rende
tonemap.luminance_multiplier = _render_buffers_get_luminance_multiplier();
tonemap.view_count = p_render_data->view_count;
- storage->get_effects()->tonemapper(rb->texture, storage->render_target_get_rd_framebuffer(rb->render_target), tonemap);
+ storage->get_effects()->tonemapper(rb->internal_texture, storage->render_target_get_rd_framebuffer(rb->render_target), tonemap);
+
+ RD::get_singleton()->draw_command_end_label();
+ }
+
+ if (can_use_effects && can_use_storage && (rb->internal_width != rb->width || rb->internal_height != rb->height)) {
+ RD::get_singleton()->draw_command_begin_label("FSR Upscale");
+
+ storage->get_effects()->fsr_upscale(rb->internal_texture, rb->upscale_texture, rb->texture, Size2i(rb->internal_width, rb->internal_height), Size2i(rb->width, rb->height), rb->fsr_sharpness);
RD::get_singleton()->draw_command_end_label();
}
@@ -2280,6 +2317,8 @@ void RendererSceneRenderRD::_post_process_subpass(RID p_source_texture, RID p_fr
ERR_FAIL_COND(!rb);
RendererSceneEnvironmentRD *env = environment_owner.get_or_null(p_render_data->environment);
+ // Override exposure (if enabled).
+ CameraEffects *camfx = camera_effects_owner.get_or_null(p_render_data->camera_effects);
bool can_use_effects = rb->width >= 8 && rb->height >= 8;
@@ -2293,6 +2332,10 @@ void RendererSceneRenderRD::_post_process_subpass(RID p_source_texture, RID p_fr
tonemap.white = env->white;
}
+ if (camfx && camfx->override_exposure_enabled) {
+ tonemap.exposure = camfx->override_exposure;
+ }
+
// We don't support glow or auto exposure here, if they are needed, don't use subpasses!
// The problem is that we need to use the result so far and process them before we can
// apply this to our results.
@@ -2619,14 +2662,28 @@ bool RendererSceneRenderRD::_render_buffers_can_be_storage() {
return true;
}
-void RendererSceneRenderRD::render_buffers_configure(RID p_render_buffers, RID p_render_target, int p_width, int p_height, RS::ViewportMSAA p_msaa, RenderingServer::ViewportScreenSpaceAA p_screen_space_aa, bool p_use_debanding, uint32_t p_view_count) {
+void RendererSceneRenderRD::render_buffers_configure(RID p_render_buffers, RID p_render_target, int p_internal_width, int p_internal_height, int p_width, int p_height, float p_fsr_sharpness, float p_fsr_mipmap_bias, RS::ViewportMSAA p_msaa, RenderingServer::ViewportScreenSpaceAA p_screen_space_aa, bool p_use_debanding, uint32_t p_view_count) {
ERR_FAIL_COND_MSG(p_view_count == 0, "Must have at least 1 view");
+ if (!_render_buffers_can_be_storage()) {
+ p_internal_height = p_height;
+ p_internal_width = p_width;
+ }
+
+ if (p_width != p_internal_width) {
+ float fsr_mipmap_bias = -log2f(p_width / p_internal_width) + p_fsr_mipmap_bias;
+ storage->sampler_rd_configure_custom(fsr_mipmap_bias);
+ update_uniform_sets();
+ }
+
RenderBuffers *rb = render_buffers_owner.get_or_null(p_render_buffers);
// Should we add an overrule per viewport?
+ rb->internal_width = p_internal_width;
+ rb->internal_height = p_internal_height;
rb->width = p_width;
rb->height = p_height;
+ rb->fsr_sharpness = p_fsr_sharpness;
rb->render_target = p_render_target;
rb->msaa = p_msaa;
rb->screen_space_aa = p_screen_space_aa;
@@ -2648,8 +2705,8 @@ void RendererSceneRenderRD::render_buffers_configure(RID p_render_buffers, RID p
tf.texture_type = RD::TEXTURE_TYPE_2D_ARRAY;
}
tf.format = _render_buffers_get_color_format();
- tf.width = rb->width;
- tf.height = rb->height;
+ tf.width = rb->internal_width; // If set to rb->width, msaa won't crash
+ tf.height = rb->internal_height; // If set to rb->width, msaa won't crash
tf.array_layers = rb->view_count; // create a layer for every view
tf.usage_bits = RD::TEXTURE_USAGE_SAMPLING_BIT | (_render_buffers_can_be_storage() ? RD::TEXTURE_USAGE_STORAGE_BIT : 0) | RD::TEXTURE_USAGE_COLOR_ATTACHMENT_BIT;
if (rb->msaa != RS::VIEWPORT_MSAA_DISABLED) {
@@ -2657,7 +2714,17 @@ void RendererSceneRenderRD::render_buffers_configure(RID p_render_buffers, RID p
}
tf.usage_bits |= RD::TEXTURE_USAGE_INPUT_ATTACHMENT_BIT; // only needed when using subpasses in the mobile renderer
- rb->texture = RD::get_singleton()->texture_create(tf, RD::TextureView());
+ rb->internal_texture = RD::get_singleton()->texture_create(tf, RD::TextureView());
+
+ if ((p_internal_width != p_width || p_internal_height != p_height)) {
+ tf.width = rb->width;
+ tf.height = rb->height;
+ rb->texture = RD::get_singleton()->texture_create(tf, RD::TextureView());
+ rb->upscale_texture = RD::get_singleton()->texture_create(tf, RD::TextureView());
+ } else {
+ rb->texture = rb->internal_texture;
+ rb->upscale_texture = rb->internal_texture;
+ }
}
{
@@ -2671,8 +2738,8 @@ void RendererSceneRenderRD::render_buffers_configure(RID p_render_buffers, RID p
tf.format = RD::DATA_FORMAT_R32_SFLOAT;
}
- tf.width = rb->width;
- tf.height = rb->height;
+ tf.width = rb->internal_width;
+ tf.height = rb->internal_height;
tf.usage_bits = RD::TEXTURE_USAGE_SAMPLING_BIT;
tf.array_layers = rb->view_count; // create a layer for every view
@@ -2688,16 +2755,16 @@ void RendererSceneRenderRD::render_buffers_configure(RID p_render_buffers, RID p
if (!_render_buffers_can_be_storage()) {
// ONLY USED ON MOBILE RENDERER, ONLY USED FOR POST EFFECTS!
Vector<RID> fb;
- fb.push_back(rb->texture);
+ fb.push_back(rb->internal_texture);
rb->texture_fb = RD::get_singleton()->framebuffer_create(fb, RenderingDevice::INVALID_ID, rb->view_count);
}
RID target_texture = storage->render_target_get_rd_texture(rb->render_target);
- rb->data->configure(rb->texture, rb->depth_texture, target_texture, rb->width, rb->height, p_msaa, p_view_count);
+ rb->data->configure(rb->internal_texture, rb->depth_texture, target_texture, p_internal_width, p_internal_height, p_msaa, p_view_count);
if (is_clustered_enabled()) {
- rb->cluster_builder->setup(Size2i(rb->width, rb->height), max_cluster_elements, rb->depth_texture, storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_NEAREST, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED), rb->texture);
+ rb->cluster_builder->setup(Size2i(p_internal_width, p_internal_height), max_cluster_elements, rb->depth_texture, storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_NEAREST, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED), rb->internal_texture);
}
}
@@ -3549,11 +3616,20 @@ void RendererSceneRenderRD::FogShaderData::set_code(const String &p_code) {
valid = true;
}
-void RendererSceneRenderRD::FogShaderData::set_default_texture_param(const StringName &p_name, RID p_texture) {
+void RendererSceneRenderRD::FogShaderData::set_default_texture_param(const StringName &p_name, RID p_texture, int p_index) {
if (!p_texture.is_valid()) {
- default_texture_params.erase(p_name);
+ if (default_texture_params.has(p_name) && default_texture_params[p_name].has(p_index)) {
+ default_texture_params[p_name].erase(p_index);
+
+ if (default_texture_params[p_name].is_empty()) {
+ default_texture_params.erase(p_name);
+ }
+ }
} else {
- default_texture_params[p_name] = p_texture;
+ if (!default_texture_params.has(p_name)) {
+ default_texture_params[p_name] = Map<int, RID>();
+ }
+ default_texture_params[p_name][p_index] = p_texture;
}
}
@@ -3778,6 +3854,18 @@ void RendererSceneRenderRD::_update_volumetric_fog(RID p_render_buffers, RID p_e
rb->volumetric_fog->fog_map = RD::get_singleton()->texture_create(tf, RD::TextureView());
RD::get_singleton()->set_resource_name(rb->volumetric_fog->fog_map, "Fog map");
+#if defined(OSX_ENABLED) || defined(IPHONE_ENABLED)
+ Vector<uint8_t> dm;
+ dm.resize(target_width * target_height * volumetric_fog_depth * 4);
+ dm.fill(0);
+
+ rb->volumetric_fog->density_map = RD::get_singleton()->storage_buffer_create(dm.size(), dm);
+ RD::get_singleton()->set_resource_name(rb->volumetric_fog->density_map, "Fog density map");
+ rb->volumetric_fog->light_map = RD::get_singleton()->storage_buffer_create(dm.size(), dm);
+ RD::get_singleton()->set_resource_name(rb->volumetric_fog->light_map, "Fog light map");
+ rb->volumetric_fog->emissive_map = RD::get_singleton()->storage_buffer_create(dm.size(), dm);
+ RD::get_singleton()->set_resource_name(rb->volumetric_fog->emissive_map, "Fog emissive map");
+#else
tf.format = RD::DATA_FORMAT_R32_UINT;
tf.usage_bits = RD::TEXTURE_USAGE_STORAGE_BIT | RD::TEXTURE_USAGE_CAN_COPY_TO_BIT;
rb->volumetric_fog->density_map = RD::get_singleton()->texture_create(tf, RD::TextureView());
@@ -3789,6 +3877,7 @@ void RendererSceneRenderRD::_update_volumetric_fog(RID p_render_buffers, RID p_e
rb->volumetric_fog->emissive_map = RD::get_singleton()->texture_create(tf, RD::TextureView());
RD::get_singleton()->set_resource_name(rb->volumetric_fog->emissive_map, "Fog emissive map");
RD::get_singleton()->texture_clear(rb->volumetric_fog->emissive_map, Color(0, 0, 0, 0), 0, 1, 0, 1);
+#endif
Vector<RD::Uniform> uniforms;
{
@@ -3854,7 +3943,11 @@ void RendererSceneRenderRD::_update_volumetric_fog(RID p_render_buffers, RID p_e
{
RD::Uniform u;
+#if defined(OSX_ENABLED) || defined(IPHONE_ENABLED)
+ u.uniform_type = RD::UNIFORM_TYPE_STORAGE_BUFFER;
+#else
u.uniform_type = RD::UNIFORM_TYPE_IMAGE;
+#endif
u.binding = 1;
u.ids.push_back(rb->volumetric_fog->emissive_map);
uniforms.push_back(u);
@@ -3870,7 +3963,11 @@ void RendererSceneRenderRD::_update_volumetric_fog(RID p_render_buffers, RID p_e
{
RD::Uniform u;
+#if defined(OSX_ENABLED) || defined(IPHONE_ENABLED)
+ u.uniform_type = RD::UNIFORM_TYPE_STORAGE_BUFFER;
+#else
u.uniform_type = RD::UNIFORM_TYPE_IMAGE;
+#endif
u.binding = 3;
u.ids.push_back(rb->volumetric_fog->density_map);
uniforms.push_back(u);
@@ -3878,7 +3975,11 @@ void RendererSceneRenderRD::_update_volumetric_fog(RID p_render_buffers, RID p_e
{
RD::Uniform u;
+#if defined(OSX_ENABLED) || defined(IPHONE_ENABLED)
+ u.uniform_type = RD::UNIFORM_TYPE_STORAGE_BUFFER;
+#else
u.uniform_type = RD::UNIFORM_TYPE_IMAGE;
+#endif
u.binding = 4;
u.ids.push_back(rb->volumetric_fog->light_map);
uniforms.push_back(u);
@@ -4145,14 +4246,22 @@ void RendererSceneRenderRD::_update_volumetric_fog(RID p_render_buffers, RID p_e
}
{
RD::Uniform u;
+#if defined(OSX_ENABLED) || defined(IPHONE_ENABLED)
+ u.uniform_type = RD::UNIFORM_TYPE_STORAGE_BUFFER;
+#else
u.uniform_type = RD::UNIFORM_TYPE_IMAGE;
+#endif
u.binding = 16;
u.ids.push_back(rb->volumetric_fog->density_map);
uniforms.push_back(u);
}
{
RD::Uniform u;
+#if defined(OSX_ENABLED) || defined(IPHONE_ENABLED)
+ u.uniform_type = RD::UNIFORM_TYPE_STORAGE_BUFFER;
+#else
u.uniform_type = RD::UNIFORM_TYPE_IMAGE;
+#endif
u.binding = 17;
u.ids.push_back(rb->volumetric_fog->light_map);
uniforms.push_back(u);
@@ -4160,7 +4269,11 @@ void RendererSceneRenderRD::_update_volumetric_fog(RID p_render_buffers, RID p_e
{
RD::Uniform u;
+#if defined(OSX_ENABLED) || defined(IPHONE_ENABLED)
+ u.uniform_type = RD::UNIFORM_TYPE_STORAGE_BUFFER;
+#else
u.uniform_type = RD::UNIFORM_TYPE_IMAGE;
+#endif
u.binding = 18;
u.ids.push_back(rb->volumetric_fog->emissive_map);
uniforms.push_back(u);
@@ -4686,9 +4799,7 @@ void RendererSceneRenderRD::render_scene(RID p_render_buffers, const CameraData
if (p_render_buffers.is_valid()) {
/*
_debug_draw_cluster(p_render_buffers);
-
RENDER_TIMESTAMP("Tonemap");
-
_render_buffers_post_process_and_tonemap(&render_data);
*/
diff --git a/servers/rendering/renderer_rd/renderer_scene_render_rd.h b/servers/rendering/renderer_rd/renderer_scene_render_rd.h
index baa0144d43..98ab1a2c3c 100644
--- a/servers/rendering/renderer_rd/renderer_scene_render_rd.h
+++ b/servers/rendering/renderer_rd/renderer_scene_render_rd.h
@@ -456,7 +456,11 @@ private:
struct RenderBuffers {
RenderBufferData *data = nullptr;
- int width = 0, height = 0;
+ int internal_width = 0;
+ int internal_height = 0;
+ int width = 0;
+ int height = 0;
+ float fsr_sharpness = 0.2f;
RS::ViewportMSAA msaa = RS::VIEWPORT_MSAA_DISABLED;
RS::ViewportScreenSpaceAA screen_space_aa = RS::VIEWPORT_SCREEN_SPACE_AA_DISABLED;
bool use_debanding = false;
@@ -466,9 +470,12 @@ private:
uint64_t auto_exposure_version = 1;
- RID texture; //main texture for rendering to, must be filled after done rendering
+ RID sss_texture; //texture for sss. This needs to be a different resolution than blur[0]
+ RID internal_texture; //main texture for rendering to, must be filled after done rendering
+ RID texture; //upscaled version of main texture (This uses the same resource as internal_texture if there is no upscaling)
RID depth_texture; //main depth texture
RID texture_fb; // framebuffer for the main texture, ONLY USED FOR MOBILE RENDERER POST EFFECTS, DO NOT USE FOR RENDERING 3D!!!
+ RID upscale_texture; //used when upscaling internal_texture (This uses the same resource as internal_texture if there is no upscaling)
RendererSceneGIRD::SDFGI *sdfgi = nullptr;
VolumetricFog *volumetric_fog = nullptr;
@@ -879,12 +886,12 @@ private:
String path;
String code;
- Map<StringName, RID> default_texture_params;
+ Map<StringName, Map<int, RID>> default_texture_params;
bool uses_time;
virtual void set_code(const String &p_Code);
- virtual void set_default_texture_param(const StringName &p_name, RID p_texture);
+ virtual void set_default_texture_param(const StringName &p_name, RID p_texture, int p_index);
virtual void get_param_list(List<PropertyInfo> *p_param_list) const;
virtual void get_instance_param_list(List<RendererStorage::InstanceShaderParam> *p_param_list) const;
virtual bool is_param_texture(const StringName &p_param) const;
@@ -1332,7 +1339,7 @@ public:
virtual RD::DataFormat _render_buffers_get_color_format();
virtual bool _render_buffers_can_be_storage();
virtual RID render_buffers_create() override;
- virtual void render_buffers_configure(RID p_render_buffers, RID p_render_target, int p_width, int p_height, RS::ViewportMSAA p_msaa, RS::ViewportScreenSpaceAA p_screen_space_aa, bool p_use_debanding, uint32_t p_view_count) override;
+ virtual void render_buffers_configure(RID p_render_buffers, RID p_render_target, int p_internal_width, int p_internal_height, int p_width, int p_height, float p_fsr_sharpness, float p_fsr_mipmap_bias, RS::ViewportMSAA p_msaa, RS::ViewportScreenSpaceAA p_screen_space_aa, bool p_use_debanding, uint32_t p_view_count) override;
virtual void gi_set_use_half_resolution(bool p_enable) override;
RID render_buffers_get_depth_texture(RID p_render_buffers);
@@ -1363,6 +1370,8 @@ public:
float render_buffers_get_volumetric_fog_end(RID p_render_buffers);
float render_buffers_get_volumetric_fog_detail_spread(RID p_render_buffers);
+ virtual void update_uniform_sets(){};
+
virtual void render_scene(RID p_render_buffers, const CameraData *p_camera_data, const PagedArray<GeometryInstance *> &p_instances, const PagedArray<RID> &p_lights, const PagedArray<RID> &p_reflection_probes, const PagedArray<RID> &p_voxel_gi_instances, const PagedArray<RID> &p_decals, const PagedArray<RID> &p_lightmaps, const PagedArray<RID> &p_fog_volumes, RID p_environment, RID p_camera_effects, RID p_shadow_atlas, RID p_occluder_debug_tex, RID p_reflection_atlas, RID p_reflection_probe, int p_reflection_probe_pass, float p_screen_lod_threshold, const RenderShadowData *p_render_shadows, int p_render_shadow_count, const RenderSDFGIData *p_render_sdfgi_regions, int p_render_sdfgi_region_count, const RenderSDFGIUpdateData *p_sdfgi_update_data = nullptr, RendererScene::RenderInfo *r_render_info = nullptr) override;
virtual void render_material(const Transform3D &p_cam_transform, const CameraMatrix &p_cam_projection, bool p_cam_ortogonal, const PagedArray<GeometryInstance *> &p_instances, RID p_framebuffer, const Rect2i &p_region) override;
diff --git a/servers/rendering/renderer_rd/renderer_scene_sky_rd.cpp b/servers/rendering/renderer_rd/renderer_scene_sky_rd.cpp
index ce41e191e2..a9c39fb937 100644
--- a/servers/rendering/renderer_rd/renderer_scene_sky_rd.cpp
+++ b/servers/rendering/renderer_rd/renderer_scene_sky_rd.cpp
@@ -137,11 +137,20 @@ void RendererSceneSkyRD::SkyShaderData::set_code(const String &p_code) {
valid = true;
}
-void RendererSceneSkyRD::SkyShaderData::set_default_texture_param(const StringName &p_name, RID p_texture) {
+void RendererSceneSkyRD::SkyShaderData::set_default_texture_param(const StringName &p_name, RID p_texture, int p_index) {
if (!p_texture.is_valid()) {
- default_texture_params.erase(p_name);
+ if (default_texture_params.has(p_name) && default_texture_params[p_name].has(p_index)) {
+ default_texture_params[p_name].erase(p_index);
+
+ if (default_texture_params[p_name].is_empty()) {
+ default_texture_params.erase(p_name);
+ }
+ }
} else {
- default_texture_params[p_name] = p_texture;
+ if (!default_texture_params.has(p_name)) {
+ default_texture_params[p_name] = Map<int, RID>();
+ }
+ default_texture_params[p_name][p_index] = p_texture;
}
}
diff --git a/servers/rendering/renderer_rd/renderer_scene_sky_rd.h b/servers/rendering/renderer_rd/renderer_scene_sky_rd.h
index 7f563c9bc4..8689395bea 100644
--- a/servers/rendering/renderer_rd/renderer_scene_sky_rd.h
+++ b/servers/rendering/renderer_rd/renderer_scene_sky_rd.h
@@ -118,7 +118,7 @@ private:
String path;
String code;
- Map<StringName, RID> default_texture_params;
+ Map<StringName, Map<int, RID>> default_texture_params;
bool uses_time;
bool uses_position;
@@ -127,7 +127,7 @@ private:
bool uses_light;
virtual void set_code(const String &p_Code);
- virtual void set_default_texture_param(const StringName &p_name, RID p_texture);
+ virtual void set_default_texture_param(const StringName &p_name, RID p_texture, int p_index);
virtual void get_param_list(List<PropertyInfo> *p_param_list) const;
virtual void get_instance_param_list(List<RendererStorage::InstanceShaderParam> *p_param_list) const;
virtual bool is_param_texture(const StringName &p_param) const;
diff --git a/servers/rendering/renderer_rd/renderer_storage_rd.cpp b/servers/rendering/renderer_rd/renderer_storage_rd.cpp
index 99d1b88947..04acc871b4 100644
--- a/servers/rendering/renderer_rd/renderer_storage_rd.cpp
+++ b/servers/rendering/renderer_rd/renderer_storage_rd.cpp
@@ -1227,6 +1227,100 @@ RendererStorageRD::CanvasTexture::~CanvasTexture() {
clear_sets();
}
+void RendererStorageRD::sampler_rd_configure_custom(float p_mipmap_bias) {
+ for (int i = 1; i < RS::CANVAS_ITEM_TEXTURE_FILTER_MAX; i++) {
+ for (int j = 1; j < RS::CANVAS_ITEM_TEXTURE_REPEAT_MAX; j++) {
+ RD::SamplerState sampler_state;
+ switch (i) {
+ case RS::CANVAS_ITEM_TEXTURE_FILTER_NEAREST: {
+ sampler_state.mag_filter = RD::SAMPLER_FILTER_NEAREST;
+ sampler_state.min_filter = RD::SAMPLER_FILTER_NEAREST;
+ sampler_state.max_lod = 0;
+ } break;
+ case RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR: {
+ sampler_state.mag_filter = RD::SAMPLER_FILTER_LINEAR;
+ sampler_state.min_filter = RD::SAMPLER_FILTER_LINEAR;
+ sampler_state.max_lod = 0;
+ } break;
+ case RS::CANVAS_ITEM_TEXTURE_FILTER_NEAREST_WITH_MIPMAPS: {
+ sampler_state.mag_filter = RD::SAMPLER_FILTER_NEAREST;
+ sampler_state.min_filter = RD::SAMPLER_FILTER_NEAREST;
+ if (GLOBAL_GET("rendering/textures/default_filters/use_nearest_mipmap_filter")) {
+ sampler_state.mip_filter = RD::SAMPLER_FILTER_NEAREST;
+ } else {
+ sampler_state.mip_filter = RD::SAMPLER_FILTER_LINEAR;
+ }
+ sampler_state.lod_bias = p_mipmap_bias;
+ } break;
+ case RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR_WITH_MIPMAPS: {
+ sampler_state.mag_filter = RD::SAMPLER_FILTER_LINEAR;
+ sampler_state.min_filter = RD::SAMPLER_FILTER_LINEAR;
+ if (GLOBAL_GET("rendering/textures/default_filters/use_nearest_mipmap_filter")) {
+ sampler_state.mip_filter = RD::SAMPLER_FILTER_NEAREST;
+ } else {
+ sampler_state.mip_filter = RD::SAMPLER_FILTER_LINEAR;
+ }
+ sampler_state.lod_bias = p_mipmap_bias;
+
+ } break;
+ case RS::CANVAS_ITEM_TEXTURE_FILTER_NEAREST_WITH_MIPMAPS_ANISOTROPIC: {
+ sampler_state.mag_filter = RD::SAMPLER_FILTER_NEAREST;
+ sampler_state.min_filter = RD::SAMPLER_FILTER_NEAREST;
+ if (GLOBAL_GET("rendering/textures/default_filters/use_nearest_mipmap_filter")) {
+ sampler_state.mip_filter = RD::SAMPLER_FILTER_NEAREST;
+ } else {
+ sampler_state.mip_filter = RD::SAMPLER_FILTER_LINEAR;
+ }
+ sampler_state.lod_bias = p_mipmap_bias;
+ sampler_state.use_anisotropy = true;
+ sampler_state.anisotropy_max = 1 << int(GLOBAL_GET("rendering/textures/default_filters/anisotropic_filtering_level"));
+ } break;
+ case RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR_WITH_MIPMAPS_ANISOTROPIC: {
+ sampler_state.mag_filter = RD::SAMPLER_FILTER_LINEAR;
+ sampler_state.min_filter = RD::SAMPLER_FILTER_LINEAR;
+ if (GLOBAL_GET("rendering/textures/default_filters/use_nearest_mipmap_filter")) {
+ sampler_state.mip_filter = RD::SAMPLER_FILTER_NEAREST;
+ } else {
+ sampler_state.mip_filter = RD::SAMPLER_FILTER_LINEAR;
+ }
+ sampler_state.lod_bias = p_mipmap_bias;
+ sampler_state.use_anisotropy = true;
+ sampler_state.anisotropy_max = 1 << int(GLOBAL_GET("rendering/textures/default_filters/anisotropic_filtering_level"));
+
+ } break;
+ default: {
+ }
+ }
+ switch (j) {
+ case RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED: {
+ sampler_state.repeat_u = RD::SAMPLER_REPEAT_MODE_CLAMP_TO_EDGE;
+ sampler_state.repeat_v = RD::SAMPLER_REPEAT_MODE_CLAMP_TO_EDGE;
+ sampler_state.repeat_w = RD::SAMPLER_REPEAT_MODE_CLAMP_TO_EDGE;
+
+ } break;
+ case RS::CANVAS_ITEM_TEXTURE_REPEAT_ENABLED: {
+ sampler_state.repeat_u = RD::SAMPLER_REPEAT_MODE_REPEAT;
+ sampler_state.repeat_v = RD::SAMPLER_REPEAT_MODE_REPEAT;
+ sampler_state.repeat_w = RD::SAMPLER_REPEAT_MODE_REPEAT;
+ } break;
+ case RS::CANVAS_ITEM_TEXTURE_REPEAT_MIRROR: {
+ sampler_state.repeat_u = RD::SAMPLER_REPEAT_MODE_MIRRORED_REPEAT;
+ sampler_state.repeat_v = RD::SAMPLER_REPEAT_MODE_MIRRORED_REPEAT;
+ sampler_state.repeat_w = RD::SAMPLER_REPEAT_MODE_MIRRORED_REPEAT;
+ } break;
+ default: {
+ }
+ }
+
+ if (custom_rd_samplers[i][j].is_valid()) {
+ RD::get_singleton()->free(custom_rd_samplers[i][j]);
+ }
+
+ custom_rd_samplers[i][j] = RD::get_singleton()->sampler_create(sampler_state);
+ }
+ }
+}
+
RID RendererStorageRD::canvas_texture_allocate() {
return canvas_texture_owner.allocate_rid();
}
@@ -1440,8 +1534,10 @@ void RendererStorageRD::shader_set_code(RID p_shader, const String &p_code) {
}
if (shader->data) {
- for (const KeyValue<StringName, RID> &E : shader->default_texture_parameter) {
- shader->data->set_default_texture_param(E.key, E.value);
+ for (const KeyValue<StringName, Map<int, RID>> &E : shader->default_texture_parameter) {
+ for (const KeyValue<int, RID> &E2 : E.value) {
+ shader->data->set_default_texture_param(E.key, E2.value, E2.key);
+ }
}
}
}
@@ -1471,17 +1567,26 @@ void RendererStorageRD::shader_get_param_list(RID p_shader, List<PropertyInfo> *
}
}
-void RendererStorageRD::shader_set_default_texture_param(RID p_shader, const StringName &p_name, RID p_texture) {
+void RendererStorageRD::shader_set_default_texture_param(RID p_shader, const StringName &p_name, RID p_texture, int p_index) {
Shader *shader = shader_owner.get_or_null(p_shader);
ERR_FAIL_COND(!shader);
if (p_texture.is_valid() && texture_owner.owns(p_texture)) {
- shader->default_texture_parameter[p_name] = p_texture;
+ if (!shader->default_texture_parameter.has(p_name)) {
+ shader->default_texture_parameter[p_name] = Map<int, RID>();
+ }
+ shader->default_texture_parameter[p_name][p_index] = p_texture;
} else {
- shader->default_texture_parameter.erase(p_name);
+ if (shader->default_texture_parameter.has(p_name) && shader->default_texture_parameter[p_name].has(p_index)) {
+ shader->default_texture_parameter[p_name].erase(p_index);
+
+ if (shader->default_texture_parameter[p_name].is_empty()) {
+ shader->default_texture_parameter.erase(p_name);
+ }
+ }
}
if (shader->data) {
- shader->data->set_default_texture_param(p_name, p_texture);
+ shader->data->set_default_texture_param(p_name, p_texture, p_index);
}
for (Set<Material *>::Element *E = shader->owners.front(); E; E = E->next()) {
Material *material = E->get();
@@ -1489,11 +1594,11 @@ void RendererStorageRD::shader_set_default_texture_param(RID p_shader, const Str
}
}
-RID RendererStorageRD::shader_get_default_texture_param(RID p_shader, const StringName &p_name) const {
+RID RendererStorageRD::shader_get_default_texture_param(RID p_shader, const StringName &p_name, int p_index) const {
Shader *shader = shader_owner.get_or_null(p_shader);
ERR_FAIL_COND_V(!shader, RID());
- if (shader->default_texture_parameter.has(p_name)) {
- return shader->default_texture_parameter[p_name];
+ if (shader->default_texture_parameter.has(p_name) && shader->default_texture_parameter[p_name].has(p_index)) {
+ return shader->default_texture_parameter[p_name][p_index];
}
return RID();
@@ -2610,7 +2715,7 @@ RendererStorageRD::MaterialData::~MaterialData() {
}
}
-void RendererStorageRD::MaterialData::update_textures(const Map<StringName, Variant> &p_parameters, const Map<StringName, RID> &p_default_textures, const Vector<ShaderCompilerRD::GeneratedCode::Texture> &p_texture_uniforms, RID *p_textures, bool p_use_linear_color) {
+void RendererStorageRD::MaterialData::update_textures(const Map<StringName, Variant> &p_parameters, const Map<StringName, Map<int, RID>> &p_default_textures, const Vector<ShaderCompilerRD::GeneratedCode::Texture> &p_texture_uniforms, RID *p_textures, bool p_use_linear_color) {
RendererStorageRD *singleton = (RendererStorageRD *)RendererStorage::base_singleton;
#ifdef TOOLS_ENABLED
Texture *roughness_detect_texture = nullptr;
@@ -2673,19 +2778,19 @@ void RendererStorageRD::MaterialData::update_textures(const Map<StringName, Vari
if (uniform_array_size > 0) {
if (textures.size() < uniform_array_size) {
- const Map<StringName, RID>::Element *W = p_default_textures.find(uniform_name);
+ const Map<StringName, Map<int, RID>>::Element *W = p_default_textures.find(uniform_name);
for (int j = textures.size(); j < uniform_array_size; j++) {
- if (W) {
- textures.push_back(W->get());
+ if (W && W->get().has(j)) {
+ textures.push_back(W->get()[j]);
} else {
textures.push_back(RID());
}
}
}
} else if (textures.is_empty()) {
- const Map<StringName, RID>::Element *W = p_default_textures.find(uniform_name);
- if (W) {
- textures.push_back(W->get());
+ const Map<StringName, Map<int, RID>>::Element *W = p_default_textures.find(uniform_name);
+ if (W && W->get().has(0)) {
+ textures.push_back(W->get()[0]);
}
}
}
@@ -2833,7 +2938,7 @@ void RendererStorageRD::MaterialData::free_parameters_uniform_set(RID p_uniform_
}
}
-bool RendererStorageRD::MaterialData::update_parameters_uniform_set(const Map<StringName, Variant> &p_parameters, bool p_uniform_dirty, bool p_textures_dirty, const Map<StringName, ShaderLanguage::ShaderNode::Uniform> &p_uniforms, const uint32_t *p_uniform_offsets, const Vector<ShaderCompilerRD::GeneratedCode::Texture> &p_texture_uniforms, const Map<StringName, RID> &p_default_texture_params, uint32_t p_ubo_size, RID &uniform_set, RID p_shader, uint32_t p_shader_uniform_set, uint32_t p_barrier) {
+bool RendererStorageRD::MaterialData::update_parameters_uniform_set(const Map<StringName, Variant> &p_parameters, bool p_uniform_dirty, bool p_textures_dirty, const Map<StringName, ShaderLanguage::ShaderNode::Uniform> &p_uniforms, const uint32_t *p_uniform_offsets, const Vector<ShaderCompilerRD::GeneratedCode::Texture> &p_texture_uniforms, const Map<StringName, Map<int, RID>> &p_default_texture_params, uint32_t p_ubo_size, RID &uniform_set, RID p_shader, uint32_t p_shader_uniform_set, uint32_t p_barrier) {
if ((uint32_t)ubo_data.size() != p_ubo_size) {
p_uniform_dirty = true;
if (uniform_buffer.is_valid()) {
@@ -2857,7 +2962,7 @@ bool RendererStorageRD::MaterialData::update_parameters_uniform_set(const Map<St
//check whether buffer changed
if (p_uniform_dirty && ubo_data.size()) {
- update_uniform_buffer(p_uniforms, p_uniform_offsets, p_parameters, ubo_data.ptrw(), ubo_data.size(), false);
+ update_uniform_buffer(p_uniforms, p_uniform_offsets, p_parameters, ubo_data.ptrw(), ubo_data.size(), true);
RD::get_singleton()->buffer_update(uniform_buffer, 0, ubo_data.size(), ubo_data.ptrw(), p_barrier);
}
@@ -4419,7 +4524,8 @@ void RendererStorageRD::_update_dirty_multimeshes() {
if (multimesh->data_cache_dirty_regions[i]) {
uint32_t offset = i * region_size;
uint32_t size = multimesh->stride_cache * (uint32_t)multimesh->instances * (uint32_t)sizeof(float);
- RD::get_singleton()->buffer_update(multimesh->buffer, offset, MIN(region_size, size - offset), &data[i * region_size]);
+ uint32_t region_start_index = multimesh->stride_cache * MULTIMESH_DIRTY_REGION_SIZE * i;
+ RD::get_singleton()->buffer_update(multimesh->buffer, offset, MIN(region_size, size - offset), &data[region_start_index]);
}
}
}
@@ -5747,11 +5853,20 @@ void RendererStorageRD::ParticlesShaderData::set_code(const String &p_code) {
valid = true;
}
-void RendererStorageRD::ParticlesShaderData::set_default_texture_param(const StringName &p_name, RID p_texture) {
+void RendererStorageRD::ParticlesShaderData::set_default_texture_param(const StringName &p_name, RID p_texture, int p_index) {
if (!p_texture.is_valid()) {
- default_texture_params.erase(p_name);
+ if (default_texture_params.has(p_name) && default_texture_params[p_name].has(p_index)) {
+ default_texture_params[p_name].erase(p_index);
+
+ if (default_texture_params[p_name].is_empty()) {
+ default_texture_params.erase(p_name);
+ }
+ }
} else {
- default_texture_params[p_name] = p_texture;
+ if (!default_texture_params.has(p_name)) {
+ default_texture_params[p_name] = Map<int, RID>();
+ }
+ default_texture_params[p_name][p_index] = p_texture;
}
}
@@ -9753,6 +9868,9 @@ RendererStorageRD::RendererStorageRD() {
}
}
+ //custom sampler
+ sampler_rd_configure_custom(0.0f);
+
//default rd buffers
{
Vector<uint8_t> buffer;
@@ -10083,6 +10201,15 @@ RendererStorageRD::~RendererStorageRD() {
}
}
+ //custom samplers
+ for (int i = 1; i < RS::CANVAS_ITEM_TEXTURE_FILTER_MAX; i++) {
+ for (int j = 0; j < RS::CANVAS_ITEM_TEXTURE_REPEAT_MAX; j++) {
+ if (custom_rd_samplers[i][j].is_valid()) {
+ RD::get_singleton()->free(custom_rd_samplers[i][j]);
+ }
+ }
+ }
+
//def buffers
for (int i = 0; i < DEFAULT_RD_BUFFER_MAX; i++) {
RD::get_singleton()->free(mesh_default_rd_buffers[i]);
diff --git a/servers/rendering/renderer_rd/renderer_storage_rd.h b/servers/rendering/renderer_rd/renderer_storage_rd.h
index f13bd4a7f4..9a64480c3e 100644
--- a/servers/rendering/renderer_rd/renderer_storage_rd.h
+++ b/servers/rendering/renderer_rd/renderer_storage_rd.h
@@ -135,7 +135,7 @@ public:
struct ShaderData {
virtual void set_code(const String &p_Code) = 0;
- virtual void set_default_texture_param(const StringName &p_name, RID p_texture) = 0;
+ virtual void set_default_texture_param(const StringName &p_name, RID p_texture, int p_index) = 0;
virtual void get_param_list(List<PropertyInfo> *p_param_list) const = 0;
virtual void get_instance_param_list(List<InstanceShaderParam> *p_param_list) const = 0;
@@ -152,7 +152,7 @@ public:
struct MaterialData {
void update_uniform_buffer(const Map<StringName, ShaderLanguage::ShaderNode::Uniform> &p_uniforms, const uint32_t *p_uniform_offsets, const Map<StringName, Variant> &p_parameters, uint8_t *p_buffer, uint32_t p_buffer_size, bool p_use_linear_color);
- void update_textures(const Map<StringName, Variant> &p_parameters, const Map<StringName, RID> &p_default_textures, const Vector<ShaderCompilerRD::GeneratedCode::Texture> &p_texture_uniforms, RID *p_textures, bool p_use_linear_color);
+ void update_textures(const Map<StringName, Variant> &p_parameters, const Map<StringName, Map<int, RID>> &p_default_textures, const Vector<ShaderCompilerRD::GeneratedCode::Texture> &p_texture_uniforms, RID *p_textures, bool p_use_linear_color);
virtual void set_render_priority(int p_priority) = 0;
virtual void set_next_pass(RID p_pass) = 0;
@@ -160,7 +160,7 @@ public:
virtual ~MaterialData();
//to be used internally by update_parameters, in the most common configuration of material parameters
- bool update_parameters_uniform_set(const Map<StringName, Variant> &p_parameters, bool p_uniform_dirty, bool p_textures_dirty, const Map<StringName, ShaderLanguage::ShaderNode::Uniform> &p_uniforms, const uint32_t *p_uniform_offsets, const Vector<ShaderCompilerRD::GeneratedCode::Texture> &p_texture_uniforms, const Map<StringName, RID> &p_default_texture_params, uint32_t p_ubo_size, RID &uniform_set, RID p_shader, uint32_t p_shader_uniform_set, uint32_t p_barrier = RD::BARRIER_MASK_ALL);
+ bool update_parameters_uniform_set(const Map<StringName, Variant> &p_parameters, bool p_uniform_dirty, bool p_textures_dirty, const Map<StringName, ShaderLanguage::ShaderNode::Uniform> &p_uniforms, const uint32_t *p_uniform_offsets, const Vector<ShaderCompilerRD::GeneratedCode::Texture> &p_texture_uniforms, const Map<StringName, Map<int, RID>> &p_default_texture_params, uint32_t p_ubo_size, RID &uniform_set, RID p_shader, uint32_t p_shader_uniform_set, uint32_t p_barrier = RD::BARRIER_MASK_ALL);
void free_parameters_uniform_set(RID p_uniform_set);
private:
@@ -320,6 +320,7 @@ private:
RID default_rd_textures[DEFAULT_RD_TEXTURE_MAX];
RID default_rd_samplers[RS::CANVAS_ITEM_TEXTURE_FILTER_MAX][RS::CANVAS_ITEM_TEXTURE_REPEAT_MAX];
+ RID custom_rd_samplers[RS::CANVAS_ITEM_TEXTURE_FILTER_MAX][RS::CANVAS_ITEM_TEXTURE_REPEAT_MAX];
RID default_rd_storage_buffer;
/* DECAL ATLAS */
@@ -374,7 +375,7 @@ private:
ShaderData *data;
String code;
ShaderType type;
- Map<StringName, RID> default_texture_parameter;
+ Map<StringName, Map<int, RID>> default_texture_parameter;
Set<Material *> owners;
};
@@ -883,14 +884,14 @@ private:
String path;
String code;
- Map<StringName, RID> default_texture_params;
+ Map<StringName, Map<int, RID>> default_texture_params;
RID pipeline;
bool uses_time;
virtual void set_code(const String &p_Code);
- virtual void set_default_texture_param(const StringName &p_name, RID p_texture);
+ virtual void set_default_texture_param(const StringName &p_name, RID p_texture, int p_index);
virtual void get_param_list(List<PropertyInfo> *p_param_list) const;
virtual void get_instance_param_list(List<RendererStorage::InstanceShaderParam> *p_param_list) const;
virtual bool is_param_texture(const StringName &p_param) const;
@@ -1391,6 +1392,13 @@ public:
_FORCE_INLINE_ RID sampler_rd_get_default(RS::CanvasItemTextureFilter p_filter, RS::CanvasItemTextureRepeat p_repeat) {
return default_rd_samplers[p_filter][p_repeat];
}
+ _FORCE_INLINE_ RID sampler_rd_get_custom(RS::CanvasItemTextureFilter p_filter, RS::CanvasItemTextureRepeat p_repeat) {
+ return custom_rd_samplers[p_filter][p_repeat];
+ }
+
+ void sampler_rd_configure_custom(float mipmap_bias);
+
+ void sampler_rd_set_default(float p_mipmap_bias);
/* CANVAS TEXTURE API */
@@ -1414,8 +1422,8 @@ public:
String shader_get_code(RID p_shader) const;
void shader_get_param_list(RID p_shader, List<PropertyInfo> *p_param_list) const;
- void shader_set_default_texture_param(RID p_shader, const StringName &p_name, RID p_texture);
- RID shader_get_default_texture_param(RID p_shader, const StringName &p_name) const;
+ void shader_set_default_texture_param(RID p_shader, const StringName &p_name, RID p_texture, int p_index);
+ RID shader_get_default_texture_param(RID p_shader, const StringName &p_name, int p_index) const;
Variant shader_get_param_default(RID p_shader, const StringName &p_param) const;
void shader_set_data_request_function(ShaderType p_shader_type, ShaderDataRequestFunction p_function);
diff --git a/servers/rendering/renderer_rd/shader_compiler_rd.cpp b/servers/rendering/renderer_rd/shader_compiler_rd.cpp
index 215959bb6a..f7c8ca1487 100644
--- a/servers/rendering/renderer_rd/shader_compiler_rd.cpp
+++ b/servers/rendering/renderer_rd/shader_compiler_rd.cpp
@@ -227,6 +227,13 @@ static String _prestr(SL::DataPrecision p_pres, bool p_force_highp = false) {
return "";
}
+static String _constr(bool p_is_const) {
+ if (p_is_const) {
+ return "const ";
+ }
+ return "";
+}
+
static String _qualstr(SL::ArgumentQualifier p_qual) {
switch (p_qual) {
case SL::ARGUMENT_QUALIFIER_IN:
@@ -417,9 +424,7 @@ void ShaderCompilerRD::_dump_function_deps(const SL::ShaderNode *p_node, const S
if (i > 0) {
header += ", ";
}
- if (fnode->arguments[i].is_const) {
- header += "const ";
- }
+ header += _constr(fnode->arguments[i].is_const);
if (fnode->arguments[i].type == SL::TYPE_STRUCT) {
header += _qualstr(fnode->arguments[i].qualifier) + _mkid(fnode->arguments[i].type_str) + " " + _mkid(fnode->arguments[i].name);
} else {
@@ -791,7 +796,7 @@ String ShaderCompilerRD::_dump_node_code(const SL::Node *p_node, int p_level, Ge
for (int i = 0; i < pnode->vconstants.size(); i++) {
const SL::ShaderNode::Constant &cnode = pnode->vconstants[i];
String gcode;
- gcode += "const ";
+ gcode += _constr(true);
gcode += _prestr(cnode.precision, ShaderLanguage::is_float_type(cnode.type));
if (cnode.type == SL::TYPE_STRUCT) {
gcode += _mkid(cnode.type_str);
@@ -875,9 +880,7 @@ String ShaderCompilerRD::_dump_node_code(const SL::Node *p_node, int p_level, Ge
SL::VariableDeclarationNode *vdnode = (SL::VariableDeclarationNode *)p_node;
String declaration;
- if (vdnode->is_const) {
- declaration += "const ";
- }
+ declaration += _constr(vdnode->is_const);
if (vdnode->datatype == SL::TYPE_STRUCT) {
declaration += _mkid(vdnode->struct_name);
} else {
@@ -997,9 +1000,7 @@ String ShaderCompilerRD::_dump_node_code(const SL::Node *p_node, int p_level, Ge
case SL::Node::TYPE_ARRAY_DECLARATION: {
SL::ArrayDeclarationNode *adnode = (SL::ArrayDeclarationNode *)p_node;
String declaration;
- if (adnode->is_const) {
- declaration += "const ";
- }
+ declaration += _constr(adnode->is_const);
if (adnode->datatype == SL::TYPE_STRUCT) {
declaration += _mkid(adnode->struct_name);
} else {
diff --git a/servers/rendering/renderer_rd/shader_rd.cpp b/servers/rendering/renderer_rd/shader_rd.cpp
index b9a8947fa2..2568090918 100644
--- a/servers/rendering/renderer_rd/shader_rd.cpp
+++ b/servers/rendering/renderer_rd/shader_rd.cpp
@@ -177,6 +177,9 @@ void ShaderRD::_build_variant_code(StringBuilder &builder, uint32_t p_variant, c
for (const KeyValue<StringName, CharString> &E : p_version->code_sections) {
builder.append(String("#define ") + String(E.key) + "_CODE_USED\n");
}
+#if defined(OSX_ENABLED) || defined(IPHONE_ENABLED)
+ builder.append("#define MOLTENVK_USED\n");
+#endif
} break;
case StageTemplate::Chunk::TYPE_MATERIAL_UNIFORMS: {
builder.append(p_version->uniforms.get_data()); //uniforms (same for vertex and fragment)
diff --git a/servers/rendering/renderer_rd/shaders/fsr_upscale.glsl b/servers/rendering/renderer_rd/shaders/fsr_upscale.glsl
new file mode 100644
index 0000000000..4e2ba84033
--- /dev/null
+++ b/servers/rendering/renderer_rd/shaders/fsr_upscale.glsl
@@ -0,0 +1,173 @@
+/*************************************************************************/
+/* fsr_upscale.glsl */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+
+#[compute]
+
+#version 450
+
+#VERSION_DEFINES
+
+#define A_GPU
+#define A_GLSL
+
+#ifdef MODE_FSR_UPSCALE_NORMAL
+
+#define A_HALF
+
+#endif
+
+#include "thirdparty/amd-fsr/ffx_a.h"
+
+layout(local_size_x = 64, local_size_y = 1, local_size_z = 1) in;
+
+layout(rgba16f, set = 1, binding = 0) uniform restrict writeonly image2D fsr_image;
+layout(set = 0, binding = 0) uniform sampler2D source_image;
+
+#define FSR_UPSCALE_PASS_TYPE_EASU 0
+#define FSR_UPSCALE_PASS_TYPE_RCAS 1
+
+layout(push_constant, binding = 1, std430) uniform Params {
+ float resolution_width;
+ float resolution_height;
+ float upscaled_width;
+ float upscaled_height;
+ float sharpness;
+ int pass;
+}
+params;
+
+AU4 Const0, Const1, Const2, Const3;
+
+#ifdef MODE_FSR_UPSCALE_FALLBACK
+
+#define FSR_EASU_F
+AF4 FsrEasuRF(AF2 p) {
+ AF4 res = textureGather(source_image, p, 0);
+ return res;
+}
+AF4 FsrEasuGF(AF2 p) {
+ AF4 res = textureGather(source_image, p, 1);
+ return res;
+}
+AF4 FsrEasuBF(AF2 p) {
+ AF4 res = textureGather(source_image, p, 2);
+ return res;
+}
+
+#define FSR_RCAS_F
+AF4 FsrRcasLoadF(ASU2 p) {
+ return AF4(texelFetch(source_image, ASU2(p), 0));
+}
+void FsrRcasInputF(inout AF1 r, inout AF1 g, inout AF1 b) {}
+
+#else
+
+#define FSR_EASU_H
+AH4 FsrEasuRH(AF2 p) {
+ AH4 res = AH4(textureGather(source_image, p, 0));
+ return res;
+}
+AH4 FsrEasuGH(AF2 p) {
+ AH4 res = AH4(textureGather(source_image, p, 1));
+ return res;
+}
+AH4 FsrEasuBH(AF2 p) {
+ AH4 res = AH4(textureGather(source_image, p, 2));
+ return res;
+}
+
+#define FSR_RCAS_H
+AH4 FsrRcasLoadH(ASW2 p) {
+ return AH4(texelFetch(source_image, ASU2(p), 0));
+}
+void FsrRcasInputH(inout AH1 r, inout AH1 g, inout AH1 b) {}
+
+#endif
+
+#include "thirdparty/amd-fsr/ffx_fsr1.h"
+
+void fsr_easu_pass(AU2 pos) {
+#ifdef MODE_FSR_UPSCALE_NORMAL
+
+ AH3 Gamma2Color = AH3(0, 0, 0);
+ FsrEasuH(Gamma2Color, pos, Const0, Const1, Const2, Const3);
+ imageStore(fsr_image, ASU2(pos), AH4(Gamma2Color, 1));
+
+#else
+
+ AF3 Gamma2Color = AF3(0, 0, 0);
+ FsrEasuF(Gamma2Color, pos, Const0, Const1, Const2, Const3);
+ imageStore(fsr_image, ASU2(pos), AF4(Gamma2Color, 1));
+
+#endif
+}
+
+void fsr_rcas_pass(AU2 pos) {
+#ifdef MODE_FSR_UPSCALE_NORMAL
+
+ AH3 Gamma2Color = AH3(0, 0, 0);
+ FsrRcasH(Gamma2Color.r, Gamma2Color.g, Gamma2Color.b, pos, Const0);
+ imageStore(fsr_image, ASU2(pos), AH4(Gamma2Color, 1));
+
+#else
+
+ AF3 Gamma2Color = AF3(0, 0, 0);
+ FsrRcasF(Gamma2Color.r, Gamma2Color.g, Gamma2Color.b, pos, Const0);
+ imageStore(fsr_image, ASU2(pos), AF4(Gamma2Color, 1));
+
+#endif
+}
+
+void fsr_pass(AU2 pos) {
+ if (params.pass == FSR_UPSCALE_PASS_TYPE_EASU) {
+ fsr_easu_pass(pos);
+ } else if (params.pass == FSR_UPSCALE_PASS_TYPE_RCAS) {
+ fsr_rcas_pass(pos);
+ }
+}
+
+void main() {
+ // Clang does not like unused functions. If ffx_a.h is included in the binary, clang will throw a fit and not compile so we must configure FSR in this shader
+ if (params.pass == FSR_UPSCALE_PASS_TYPE_EASU) {
+ FsrEasuCon(Const0, Const1, Const2, Const3, params.resolution_width, params.resolution_height, params.resolution_width, params.resolution_height, params.upscaled_width, params.upscaled_height);
+ } else if (params.pass == FSR_UPSCALE_PASS_TYPE_RCAS) {
+ FsrRcasCon(Const0, params.sharpness);
+ }
+
+ AU2 gxy = ARmp8x8(gl_LocalInvocationID.x) + AU2(gl_WorkGroupID.x << 4u, gl_WorkGroupID.y << 4u);
+
+ fsr_pass(gxy);
+ gxy.x += 8u;
+ fsr_pass(gxy);
+ gxy.y += 8u;
+ fsr_pass(gxy);
+ gxy.x -= 8u;
+ fsr_pass(gxy);
+}
diff --git a/servers/rendering/renderer_rd/shaders/scene_forward_clustered.glsl b/servers/rendering/renderer_rd/shaders/scene_forward_clustered.glsl
index 4119e98d15..e4628b2d5a 100644
--- a/servers/rendering/renderer_rd/shaders/scene_forward_clustered.glsl
+++ b/servers/rendering/renderer_rd/shaders/scene_forward_clustered.glsl
@@ -6,6 +6,8 @@
#include "scene_forward_clustered_inc.glsl"
+#define SHADER_IS_SRGB false
+
/* INPUT ATTRIBS */
layout(location = 0) in vec3 vertex_attrib;
@@ -358,6 +360,8 @@ void main() {
#VERSION_DEFINES
+#define SHADER_IS_SRGB false
+
/* Specialization Constants (Toggles) */
layout(constant_id = 0) const bool sc_use_forward_gi = false;
@@ -691,7 +695,7 @@ void main() {
#endif // ALPHA_ANTIALIASING_EDGE_USED
#ifdef USE_OPAQUE_PREPASS
- if (alpha < opaque_prepass_threshold) {
+ if (alpha < scene_data.opaque_prepass_threshold) {
discard;
}
#endif // USE_OPAQUE_PREPASS
@@ -1529,7 +1533,7 @@ void main() {
float size_A = sc_use_light_soft_shadows ? directional_lights.data[i].size : 0.0;
- light_compute(normal, directional_lights.data[i].direction, normalize(view), size_A, directional_lights.data[i].color * directional_lights.data[i].energy, shadow, f0, orms, 1.0,
+ light_compute(normal, directional_lights.data[i].direction, normalize(view), size_A, directional_lights.data[i].color * directional_lights.data[i].energy, shadow, f0, orms, 1.0, albedo, alpha,
#ifdef LIGHT_BACKLIGHT_USED
backlight,
#endif
@@ -1540,7 +1544,7 @@ void main() {
transmittance_z,
#endif
#ifdef LIGHT_RIM_USED
- rim, rim_tint, albedo,
+ rim, rim_tint,
#endif
#ifdef LIGHT_CLEARCOAT_USED
clearcoat, clearcoat_gloss,
@@ -1548,9 +1552,6 @@ void main() {
#ifdef LIGHT_ANISOTROPY_USED
binormal, tangent, anisotropy,
#endif
-#ifdef USE_SHADOW_TO_OPACITY
- alpha,
-#endif
diffuse_light,
specular_light);
}
@@ -1603,7 +1604,7 @@ void main() {
shadow = blur_shadow(shadow);
- light_process_omni(light_index, vertex, view, normal, vertex_ddx, vertex_ddy, f0, orms, shadow,
+ light_process_omni(light_index, vertex, view, normal, vertex_ddx, vertex_ddy, f0, orms, shadow, albedo, alpha,
#ifdef LIGHT_BACKLIGHT_USED
backlight,
#endif
@@ -1615,7 +1616,6 @@ void main() {
#ifdef LIGHT_RIM_USED
rim,
rim_tint,
- albedo,
#endif
#ifdef LIGHT_CLEARCOAT_USED
clearcoat, clearcoat_gloss,
@@ -1623,9 +1623,6 @@ void main() {
#ifdef LIGHT_ANISOTROPY_USED
tangent, binormal, anisotropy,
#endif
-#ifdef USE_SHADOW_TO_OPACITY
- alpha,
-#endif
diffuse_light, specular_light);
}
}
@@ -1679,7 +1676,7 @@ void main() {
shadow = blur_shadow(shadow);
- light_process_spot(light_index, vertex, view, normal, vertex_ddx, vertex_ddy, f0, orms, shadow,
+ light_process_spot(light_index, vertex, view, normal, vertex_ddx, vertex_ddy, f0, orms, shadow, albedo, alpha,
#ifdef LIGHT_BACKLIGHT_USED
backlight,
#endif
@@ -1691,7 +1688,6 @@ void main() {
#ifdef LIGHT_RIM_USED
rim,
rim_tint,
- albedo,
#endif
#ifdef LIGHT_CLEARCOAT_USED
clearcoat, clearcoat_gloss,
@@ -1699,9 +1695,6 @@ void main() {
#ifdef LIGHT_ANISOTROPY_USED
tangent, binormal, anisotropy,
#endif
-#ifdef USE_SHADOW_TO_OPACITY
- alpha,
-#endif
diffuse_light, specular_light);
}
}
@@ -1718,7 +1711,7 @@ void main() {
#ifdef USE_OPAQUE_PREPASS
- if (alpha < opaque_prepass_threshold) {
+ if (alpha < scene_data.opaque_prepass_threshold) {
discard;
}
@@ -1764,7 +1757,11 @@ void main() {
}
}
+#ifdef MOLTENVK_USED
+ imageStore(geom_facing_grid, grid_pos, uvec4(imageLoad(geom_facing_grid, grid_pos).r | facing_bits)); //store facing bits
+#else
imageAtomicOr(geom_facing_grid, grid_pos, facing_bits); //store facing bits
+#endif
if (length(emission) > 0.001) {
float lumas[6];
diff --git a/servers/rendering/renderer_rd/shaders/scene_forward_clustered_inc.glsl b/servers/rendering/renderer_rd/shaders/scene_forward_clustered_inc.glsl
index c8489f2137..be29cf4f58 100644
--- a/servers/rendering/renderer_rd/shaders/scene_forward_clustered_inc.glsl
+++ b/servers/rendering/renderer_rd/shaders/scene_forward_clustered_inc.glsl
@@ -208,7 +208,8 @@ layout(set = 1, binding = 0, std140) uniform SceneData {
float roughness_limiter_amount;
float roughness_limiter_limit;
- uvec2 roughness_limiter_pad;
+ float opaque_prepass_threshold;
+ uint roughness_limiter_pad;
mat4 sdf_to_bounds;
diff --git a/servers/rendering/renderer_rd/shaders/scene_forward_lights_inc.glsl b/servers/rendering/renderer_rd/shaders/scene_forward_lights_inc.glsl
index b26489ddf1..d22f936a35 100644
--- a/servers/rendering/renderer_rd/shaders/scene_forward_lights_inc.glsl
+++ b/servers/rendering/renderer_rd/shaders/scene_forward_lights_inc.glsl
@@ -73,7 +73,7 @@ vec3 F0(float metallic, float specular, vec3 albedo) {
return mix(vec3(dielectric), albedo, vec3(metallic));
}
-void light_compute(vec3 N, vec3 L, vec3 V, float A, vec3 light_color, float attenuation, vec3 f0, uint orms, float specular_amount,
+void light_compute(vec3 N, vec3 L, vec3 V, float A, vec3 light_color, float attenuation, vec3 f0, uint orms, float specular_amount, vec3 albedo, inout float alpha,
#ifdef LIGHT_BACKLIGHT_USED
vec3 backlight,
#endif
@@ -84,7 +84,7 @@ void light_compute(vec3 N, vec3 L, vec3 V, float A, vec3 light_color, float atte
float transmittance_z,
#endif
#ifdef LIGHT_RIM_USED
- float rim, float rim_tint, vec3 rim_color,
+ float rim, float rim_tint,
#endif
#ifdef LIGHT_CLEARCOAT_USED
float clearcoat, float clearcoat_gloss,
@@ -92,9 +92,6 @@ void light_compute(vec3 N, vec3 L, vec3 V, float A, vec3 light_color, float atte
#ifdef LIGHT_ANISOTROPY_USED
vec3 B, vec3 T, float anisotropy,
#endif
-#ifdef USE_SHADOW_TO_OPACITY
- inout float alpha,
-#endif
inout vec3 diffuse_light, inout vec3 specular_light) {
vec4 orms_unpacked = unpackUnorm4x8(orms);
@@ -171,7 +168,7 @@ void light_compute(vec3 N, vec3 L, vec3 V, float A, vec3 light_color, float atte
#if defined(LIGHT_RIM_USED)
float rim_light = pow(max(0.0, 1.0 - cNdotV), max(0.0, (1.0 - roughness) * 16.0));
- diffuse_light += rim_light * rim * mix(vec3(1.0), rim_color, rim_tint) * light_color;
+ diffuse_light += rim_light * rim * mix(vec3(1.0), albedo, rim_tint) * light_color;
#endif
#ifdef LIGHT_TRANSMITTANCE_USED
@@ -577,7 +574,7 @@ float light_process_omni_shadow(uint idx, vec3 vertex, vec3 normal) {
return 1.0;
}
-void light_process_omni(uint idx, vec3 vertex, vec3 eye_vec, vec3 normal, vec3 vertex_ddx, vec3 vertex_ddy, vec3 f0, uint orms, float shadow,
+void light_process_omni(uint idx, vec3 vertex, vec3 eye_vec, vec3 normal, vec3 vertex_ddx, vec3 vertex_ddy, vec3 f0, uint orms, float shadow, vec3 albedo, inout float alpha,
#ifdef LIGHT_BACKLIGHT_USED
vec3 backlight,
#endif
@@ -587,7 +584,7 @@ void light_process_omni(uint idx, vec3 vertex, vec3 eye_vec, vec3 normal, vec3 v
float transmittance_boost,
#endif
#ifdef LIGHT_RIM_USED
- float rim, float rim_tint, vec3 rim_color,
+ float rim, float rim_tint,
#endif
#ifdef LIGHT_CLEARCOAT_USED
float clearcoat, float clearcoat_gloss,
@@ -595,9 +592,6 @@ void light_process_omni(uint idx, vec3 vertex, vec3 eye_vec, vec3 normal, vec3 v
#ifdef LIGHT_ANISOTROPY_USED
vec3 binormal, vec3 tangent, float anisotropy,
#endif
-#ifdef USE_SHADOW_TO_OPACITY
- inout float alpha,
-#endif
inout vec3 diffuse_light, inout vec3 specular_light) {
vec3 light_rel_vec = omni_lights.data[idx].position - vertex;
float light_length = length(light_rel_vec);
@@ -703,7 +697,7 @@ void light_process_omni(uint idx, vec3 vertex, vec3 eye_vec, vec3 normal, vec3 v
light_attenuation *= shadow;
- light_compute(normal, normalize(light_rel_vec), eye_vec, size_A, color, light_attenuation, f0, orms, omni_lights.data[idx].specular_amount,
+ light_compute(normal, normalize(light_rel_vec), eye_vec, size_A, color, light_attenuation, f0, orms, omni_lights.data[idx].specular_amount, albedo, alpha,
#ifdef LIGHT_BACKLIGHT_USED
backlight,
#endif
@@ -714,7 +708,7 @@ void light_process_omni(uint idx, vec3 vertex, vec3 eye_vec, vec3 normal, vec3 v
transmittance_z,
#endif
#ifdef LIGHT_RIM_USED
- rim * omni_attenuation, rim_tint, rim_color,
+ rim * omni_attenuation, rim_tint,
#endif
#ifdef LIGHT_CLEARCOAT_USED
clearcoat, clearcoat_gloss,
@@ -722,9 +716,6 @@ void light_process_omni(uint idx, vec3 vertex, vec3 eye_vec, vec3 normal, vec3 v
#ifdef LIGHT_ANISOTROPY_USED
binormal, tangent, anisotropy,
#endif
-#ifdef USE_SHADOW_TO_OPACITY
- alpha,
-#endif
diffuse_light,
specular_light);
}
@@ -823,7 +814,7 @@ vec2 normal_to_panorama(vec3 n) {
return panorama_coords;
}
-void light_process_spot(uint idx, vec3 vertex, vec3 eye_vec, vec3 normal, vec3 vertex_ddx, vec3 vertex_ddy, vec3 f0, uint orms, float shadow,
+void light_process_spot(uint idx, vec3 vertex, vec3 eye_vec, vec3 normal, vec3 vertex_ddx, vec3 vertex_ddy, vec3 f0, uint orms, float shadow, vec3 albedo, inout float alpha,
#ifdef LIGHT_BACKLIGHT_USED
vec3 backlight,
#endif
@@ -833,7 +824,7 @@ void light_process_spot(uint idx, vec3 vertex, vec3 eye_vec, vec3 normal, vec3 v
float transmittance_boost,
#endif
#ifdef LIGHT_RIM_USED
- float rim, float rim_tint, vec3 rim_color,
+ float rim, float rim_tint,
#endif
#ifdef LIGHT_CLEARCOAT_USED
float clearcoat, float clearcoat_gloss,
@@ -841,9 +832,6 @@ void light_process_spot(uint idx, vec3 vertex, vec3 eye_vec, vec3 normal, vec3 v
#ifdef LIGHT_ANISOTROPY_USED
vec3 binormal, vec3 tangent, float anisotropy,
#endif
-#ifdef USE_SHADOW_TO_OPACITY
- inout float alpha,
-#endif
inout vec3 diffuse_light,
inout vec3 specular_light) {
vec3 light_rel_vec = spot_lights.data[idx].position - vertex;
@@ -910,7 +898,7 @@ void light_process_spot(uint idx, vec3 vertex, vec3 eye_vec, vec3 normal, vec3 v
}
light_attenuation *= shadow;
- light_compute(normal, normalize(light_rel_vec), eye_vec, size_A, color, light_attenuation, f0, orms, spot_lights.data[idx].specular_amount,
+ light_compute(normal, normalize(light_rel_vec), eye_vec, size_A, color, light_attenuation, f0, orms, spot_lights.data[idx].specular_amount, albedo, alpha,
#ifdef LIGHT_BACKLIGHT_USED
backlight,
#endif
@@ -921,7 +909,7 @@ void light_process_spot(uint idx, vec3 vertex, vec3 eye_vec, vec3 normal, vec3 v
transmittance_z,
#endif
#ifdef LIGHT_RIM_USED
- rim * spot_attenuation, rim_tint, rim_color,
+ rim * spot_attenuation, rim_tint,
#endif
#ifdef LIGHT_CLEARCOAT_USED
clearcoat, clearcoat_gloss,
@@ -929,9 +917,6 @@ void light_process_spot(uint idx, vec3 vertex, vec3 eye_vec, vec3 normal, vec3 v
#ifdef LIGHT_ANISOTROPY_USED
binormal, tangent, anisotropy,
#endif
-#ifdef USE_SHADOW_TO_OPACITY
- alpha,
-#endif
diffuse_light, specular_light);
}
diff --git a/servers/rendering/renderer_rd/shaders/scene_forward_mobile.glsl b/servers/rendering/renderer_rd/shaders/scene_forward_mobile.glsl
index 2f5cc58619..e92fbecfd0 100644
--- a/servers/rendering/renderer_rd/shaders/scene_forward_mobile.glsl
+++ b/servers/rendering/renderer_rd/shaders/scene_forward_mobile.glsl
@@ -7,6 +7,8 @@
/* Include our forward mobile UBOs definitions etc. */
#include "scene_forward_mobile_inc.glsl"
+#define SHADER_IS_SRGB false
+
/* INPUT ATTRIBS */
layout(location = 0) in vec3 vertex_attrib;
@@ -370,6 +372,8 @@ void main() {
#VERSION_DEFINES
+#define SHADER_IS_SRGB false
+
/* Specialization Constants */
#if !defined(MODE_RENDER_DEPTH)
@@ -701,7 +705,7 @@ void main() {
#endif // ALPHA_ANTIALIASING_EDGE_USED
#ifdef USE_OPAQUE_PREPASS
- if (alpha < opaque_prepass_threshold) {
+ if (alpha < scene_data.opaque_prepass_threshold) {
discard;
}
#endif // USE_OPAQUE_PREPASS
@@ -1345,7 +1349,7 @@ void main() {
#endif
blur_shadow(shadow);
- light_compute(normal, directional_lights.data[i].direction, normalize(view), 0.0, directional_lights.data[i].color * directional_lights.data[i].energy, shadow, f0, orms, 1.0,
+ light_compute(normal, directional_lights.data[i].direction, normalize(view), 0.0, directional_lights.data[i].color * directional_lights.data[i].energy, shadow, f0, orms, 1.0, albedo, alpha,
#ifdef LIGHT_BACKLIGHT_USED
backlight,
#endif
@@ -1358,7 +1362,7 @@ void main() {
#endif
*/
#ifdef LIGHT_RIM_USED
- rim, rim_tint, albedo,
+ rim, rim_tint,
#endif
#ifdef LIGHT_CLEARCOAT_USED
clearcoat, clearcoat_gloss,
@@ -1369,9 +1373,6 @@ void main() {
#ifdef USE_SOFT_SHADOW
directional_lights.data[i].size,
#endif
-#ifdef USE_SHADOW_TO_OPACITY
- alpha,
-#endif
diffuse_light,
specular_light);
}
@@ -1395,7 +1396,7 @@ void main() {
shadow = blur_shadow(shadow);
- light_process_omni(light_index, vertex, view, normal, vertex_ddx, vertex_ddy, f0, orms, shadow,
+ light_process_omni(light_index, vertex, view, normal, vertex_ddx, vertex_ddy, f0, orms, shadow, albedo, alpha,
#ifdef LIGHT_BACKLIGHT_USED
backlight,
#endif
@@ -1409,7 +1410,6 @@ void main() {
#ifdef LIGHT_RIM_USED
rim,
rim_tint,
- albedo,
#endif
#ifdef LIGHT_CLEARCOAT_USED
clearcoat, clearcoat_gloss,
@@ -1417,9 +1417,6 @@ void main() {
#ifdef LIGHT_ANISOTROPY_USED
tangent, binormal, anisotropy,
#endif
-#ifdef USE_SHADOW_TO_OPACITY
- alpha,
-#endif
diffuse_light, specular_light);
}
} //omni lights
@@ -1443,7 +1440,7 @@ void main() {
shadow = blur_shadow(shadow);
- light_process_spot(light_index, vertex, view, normal, vertex_ddx, vertex_ddy, f0, orms, shadow,
+ light_process_spot(light_index, vertex, view, normal, vertex_ddx, vertex_ddy, f0, orms, shadow, albedo, alpha,
#ifdef LIGHT_BACKLIGHT_USED
backlight,
#endif
@@ -1457,7 +1454,6 @@ void main() {
#ifdef LIGHT_RIM_USED
rim,
rim_tint,
- albedo,
#endif
#ifdef LIGHT_CLEARCOAT_USED
clearcoat, clearcoat_gloss,
@@ -1465,9 +1461,6 @@ void main() {
#ifdef LIGHT_ANISOTROPY_USED
tangent, binormal, anisotropy,
#endif
-#ifdef USE_SHADOW_TO_OPACITY
- alpha,
-#endif
diffuse_light, specular_light);
}
} //spot lights
@@ -1483,7 +1476,7 @@ void main() {
#ifdef USE_OPAQUE_PREPASS
- if (alpha < opaque_prepass_threshold) {
+ if (alpha < scene_data.opaque_prepass_threshold) {
discard;
}
diff --git a/servers/rendering/renderer_rd/shaders/scene_forward_mobile_inc.glsl b/servers/rendering/renderer_rd/shaders/scene_forward_mobile_inc.glsl
index eb8fb49598..a9a4fce82a 100644
--- a/servers/rendering/renderer_rd/shaders/scene_forward_mobile_inc.glsl
+++ b/servers/rendering/renderer_rd/shaders/scene_forward_mobile_inc.glsl
@@ -168,7 +168,8 @@ layout(set = 1, binding = 0, std140) uniform SceneData {
mediump float roughness_limiter_amount;
mediump float roughness_limiter_limit;
- uvec2 roughness_limiter_pad;
+ mediump float opaque_prepass_threshold;
+ uint roughness_limiter_pad;
bool fog_enabled;
highp float fog_density;
diff --git a/servers/rendering/renderer_rd/shaders/volumetric_fog.glsl b/servers/rendering/renderer_rd/shaders/volumetric_fog.glsl
index afc5d68776..181d3b272f 100644
--- a/servers/rendering/renderer_rd/shaders/volumetric_fog.glsl
+++ b/servers/rendering/renderer_rd/shaders/volumetric_fog.glsl
@@ -47,7 +47,13 @@ layout(push_constant, binding = 0, std430) uniform Params {
}
params;
+#ifdef MOLTENVK_USED
+layout(set = 1, binding = 1) volatile buffer emissive_only_map_buffer {
+ uint emissive_only_map[];
+};
+#else
layout(r32ui, set = 1, binding = 1) uniform volatile uimage3D emissive_only_map;
+#endif
layout(set = 1, binding = 2, std140) uniform SceneParams {
vec2 fog_frustum_size_begin;
@@ -71,8 +77,17 @@ layout(set = 1, binding = 2, std140) uniform SceneParams {
}
scene_params;
+#ifdef MOLTENVK_USED
+layout(set = 1, binding = 3) volatile buffer density_only_map_buffer {
+ uint density_only_map[];
+};
+layout(set = 1, binding = 4) volatile buffer light_only_map_buffer {
+ uint light_only_map[];
+};
+#else
layout(r32ui, set = 1, binding = 3) uniform volatile uimage3D density_only_map;
layout(r32ui, set = 1, binding = 4) uniform volatile uimage3D light_only_map;
+#endif
#ifdef MATERIAL_UNIFORMS_USED
layout(set = 2, binding = 0, std140) uniform MaterialUniforms{
@@ -115,6 +130,9 @@ void main() {
if (any(greaterThanEqual(pos, scene_params.fog_volume_size))) {
return; //do not compute
}
+#ifdef MOLTENVK_USED
+ uint lpos = pos.z * scene_params.fog_volume_size.x * scene_params.fog_volume_size.y + pos.y * scene_params.fog_volume_size.x + pos.x;
+#endif
vec3 posf = vec3(pos);
@@ -197,7 +215,11 @@ void main() {
density *= cull_mask;
if (abs(density) > 0.001) {
int final_density = int(density * DENSITY_SCALE);
+#ifdef MOLTENVK_USED
+ atomicAdd(density_only_map[lpos], uint(final_density));
+#else
imageAtomicAdd(density_only_map, pos, uint(final_density));
+#endif
#ifdef EMISSION_USED
{
@@ -207,7 +229,11 @@ void main() {
uvec3 emission_u = uvec3(emission.r * 511.0, emission.g * 511.0, emission.b * 255.0);
// R and G have 11 bits each and B has 10. Then pack them into a 32 bit uint
uint final_emission = emission_u.r << 21 | emission_u.g << 10 | emission_u.b;
+#ifdef MOLTENVK_USED
+ uint prev_emission = atomicAdd(emissive_only_map[lpos], final_emission);
+#else
uint prev_emission = imageAtomicAdd(emissive_only_map, pos, final_emission);
+#endif
// Adding can lead to colors overflowing, so validate
uvec3 prev_emission_u = uvec3(prev_emission >> 21, (prev_emission << 11) >> 21, prev_emission % 1024);
@@ -219,7 +245,11 @@ void main() {
if (any(overflowing)) {
uvec3 overflow_factor = mix(uvec3(0), uvec3(2047 << 21, 2047 << 10, 1023), overflowing);
uint force_max = overflow_factor.r | overflow_factor.g | overflow_factor.b;
+#ifdef MOLTENVK_USED
+ atomicOr(emissive_only_map[lpos], force_max);
+#else
imageAtomicOr(emissive_only_map, pos, force_max);
+#endif
}
}
#endif
@@ -230,7 +260,11 @@ void main() {
uvec3 scattering_u = uvec3(scattering.r * 2047.0, scattering.g * 2047.0, scattering.b * 1023.0);
// R and G have 11 bits each and B has 10. Then pack them into a 32 bit uint
uint final_scattering = scattering_u.r << 21 | scattering_u.g << 10 | scattering_u.b;
+#ifdef MOLTENVK_USED
+ uint prev_scattering = atomicAdd(light_only_map[lpos], final_scattering);
+#else
uint prev_scattering = imageAtomicAdd(light_only_map, pos, final_scattering);
+#endif
// Adding can lead to colors overflowing, so validate
uvec3 prev_scattering_u = uvec3(prev_scattering >> 21, (prev_scattering << 11) >> 21, prev_scattering % 1024);
@@ -242,7 +276,11 @@ void main() {
if (any(overflowing)) {
uvec3 overflow_factor = mix(uvec3(0), uvec3(2047 << 21, 2047 << 10, 1023), overflowing);
uint force_max = overflow_factor.r | overflow_factor.g | overflow_factor.b;
+#ifdef MOLTENVK_USED
+ atomicOr(light_only_map[lpos], force_max);
+#else
imageAtomicOr(light_only_map, pos, force_max);
+#endif
}
}
#endif // ALBEDO_USED
diff --git a/servers/rendering/renderer_rd/shaders/volumetric_fog_process.glsl b/servers/rendering/renderer_rd/shaders/volumetric_fog_process.glsl
index 3d6fbb5653..747f88960c 100644
--- a/servers/rendering/renderer_rd/shaders/volumetric_fog_process.glsl
+++ b/servers/rendering/renderer_rd/shaders/volumetric_fog_process.glsl
@@ -190,9 +190,22 @@ params;
#ifndef MODE_COPY
layout(set = 0, binding = 15) uniform texture3D prev_density_texture;
+#ifdef MOLTENVK_USED
+layout(set = 0, binding = 16) buffer density_only_map_buffer {
+ uint density_only_map[];
+};
+layout(set = 0, binding = 17) buffer light_only_map_buffer {
+ uint light_only_map[];
+};
+layout(set = 0, binding = 18) buffer emissive_only_map_buffer {
+ uint emissive_only_map[];
+};
+#else
layout(r32ui, set = 0, binding = 16) uniform uimage3D density_only_map;
layout(r32ui, set = 0, binding = 17) uniform uimage3D light_only_map;
layout(r32ui, set = 0, binding = 18) uniform uimage3D emissive_only_map;
+#endif
+
#ifdef USE_RADIANCE_CUBEMAP_ARRAY
layout(set = 0, binding = 19) uniform textureCubeArray sky_texture;
#else
@@ -272,6 +285,9 @@ void main() {
if (any(greaterThanEqual(pos, params.fog_volume_size))) {
return; //do not compute
}
+#ifdef MOLTENVK_USED
+ uint lpos = pos.z * params.fog_volume_size.x * params.fog_volume_size.y + pos.y * params.fog_volume_size.x + pos.x;
+#endif
vec3 posf = vec3(pos);
@@ -335,15 +351,28 @@ void main() {
vec3 total_light = vec3(0.0);
float total_density = params.base_density;
+#ifdef MOLTENVK_USED
+ uint local_density = density_only_map[lpos];
+#else
uint local_density = imageLoad(density_only_map, pos).x;
+#endif
+
total_density += float(int(local_density)) / DENSITY_SCALE;
total_density = max(0.0, total_density);
+#ifdef MOLTENVK_USED
+ uint scattering_u = light_only_map[lpos];
+#else
uint scattering_u = imageLoad(light_only_map, pos).x;
+#endif
vec3 scattering = vec3(scattering_u >> 21, (scattering_u << 11) >> 21, scattering_u % 1024) / vec3(2047.0, 2047.0, 1023.0);
scattering += params.base_scattering * params.base_density;
+#ifdef MOLTENVK_USED
+ uint emission_u = emissive_only_map[lpos];
+#else
uint emission_u = imageLoad(emissive_only_map, pos).x;
+#endif
vec3 emission = vec3(emission_u >> 21, (emission_u << 11) >> 21, emission_u % 1024) / vec3(511.0, 511.0, 255.0);
emission += params.base_emission * params.base_density;
@@ -673,10 +702,16 @@ void main() {
final_density = mix(final_density, reprojected_density, reproject_amount);
imageStore(density_map, pos, final_density);
+#ifdef MOLTENVK_USED
+ density_only_map[lpos] = 0;
+ light_only_map[lpos] = 0;
+ emissive_only_map[lpos] = 0;
+#else
imageStore(density_only_map, pos, uvec4(0));
imageStore(light_only_map, pos, uvec4(0));
imageStore(emissive_only_map, pos, uvec4(0));
#endif
+#endif
#ifdef MODE_FOG
diff --git a/servers/rendering/renderer_scene.h b/servers/rendering/renderer_scene.h
index b6e99e4be5..02c845581c 100644
--- a/servers/rendering/renderer_scene.h
+++ b/servers/rendering/renderer_scene.h
@@ -191,7 +191,7 @@ public:
virtual RID render_buffers_create() = 0;
- virtual void render_buffers_configure(RID p_render_buffers, RID p_render_target, int p_width, int p_height, RS::ViewportMSAA p_msaa, RS::ViewportScreenSpaceAA p_screen_space_aa, bool p_use_debanding, uint32_t p_view_count) = 0;
+ virtual void render_buffers_configure(RID p_render_buffers, RID p_render_target, int p_internal_width, int p_internal_height, int p_width, int p_height, float p_fsr_sharpness, float p_fsr_mipmap_bias, RS::ViewportMSAA p_msaa, RS::ViewportScreenSpaceAA p_screen_space_aa, bool p_use_debanding, uint32_t p_view_count) = 0;
virtual void gi_set_use_half_resolution(bool p_enable) = 0;
diff --git a/servers/rendering/renderer_scene_cull.cpp b/servers/rendering/renderer_scene_cull.cpp
index e338e526a0..5b834db178 100644
--- a/servers/rendering/renderer_scene_cull.cpp
+++ b/servers/rendering/renderer_scene_cull.cpp
@@ -644,6 +644,7 @@ void RendererSceneCull::instance_set_base(RID p_instance, RID p_base) {
scene_render->geometry_instance_set_use_dynamic_gi(geom->geometry_instance, instance->dynamic_gi);
scene_render->geometry_instance_set_cast_double_sided_shadows(geom->geometry_instance, instance->cast_shadows == RS::SHADOW_CASTING_SETTING_DOUBLE_SIDED);
scene_render->geometry_instance_set_use_lightmap(geom->geometry_instance, RID(), instance->lightmap_uv_scale, instance->lightmap_slice_index);
+ scene_render->geometry_instance_set_transparency(geom->geometry_instance, instance->transparency);
if (instance->lightmap_sh.size() == 9) {
scene_render->geometry_instance_set_lightmap_capture(geom->geometry_instance, instance->lightmap_sh.ptr());
}
@@ -839,6 +840,8 @@ void RendererSceneCull::instance_geometry_set_transparency(RID p_instance, float
Instance *instance = instance_owner.get_or_null(p_instance);
ERR_FAIL_COND(!instance);
+ instance->transparency = p_transparency;
+
if ((1 << instance->base_type) & RS::INSTANCE_GEOMETRY_MASK && instance->base_data) {
InstanceGeometryData *geom = static_cast<InstanceGeometryData *>(instance->base_data);
scene_render->geometry_instance_set_transparency(geom->geometry_instance, p_transparency);
@@ -1310,7 +1313,7 @@ void RendererSceneCull::_update_instance_visibility_dependencies(Instance *p_ins
bool needs_visibility_cull = has_visibility_range && is_geometry_instance && p_instance->array_index != -1;
if (!needs_visibility_cull && p_instance->visibility_index != -1) {
- p_instance->scenario->instance_visibility.remove(p_instance->visibility_index);
+ p_instance->scenario->instance_visibility.remove_at(p_instance->visibility_index);
p_instance->visibility_index = -1;
} else if (needs_visibility_cull && p_instance->visibility_index == -1) {
InstanceVisibilityData vd;
diff --git a/servers/rendering/renderer_scene_cull.h b/servers/rendering/renderer_scene_cull.h
index de22bc1328..e51a1fc02e 100644
--- a/servers/rendering/renderer_scene_cull.h
+++ b/servers/rendering/renderer_scene_cull.h
@@ -439,17 +439,18 @@ public:
RID self;
//scenario stuff
DynamicBVH::ID indexer_id;
- int32_t array_index;
+ int32_t array_index = -1;
int32_t visibility_index = -1;
- float visibility_range_begin;
- float visibility_range_end;
- float visibility_range_begin_margin;
- float visibility_range_end_margin;
+ float visibility_range_begin = 0.0f;
+ float visibility_range_end = 0.0f;
+ float visibility_range_begin_margin = 0.0f;
+ float visibility_range_end_margin = 0.0f;
RS::VisibilityRangeFadeMode visibility_range_fade_mode = RS::VISIBILITY_RANGE_FADE_DISABLED;
Instance *visibility_parent = nullptr;
Set<Instance *> visibility_dependencies;
- uint32_t visibility_dependencies_depth;
- Scenario *scenario;
+ uint32_t visibility_dependencies_depth = 0;
+ float transparency = 0.0f;
+ Scenario *scenario = nullptr;
SelfList<Instance> scenario_item;
//aabb stuff
@@ -1154,7 +1155,7 @@ public:
/* Render Buffers */
PASS0R(RID, render_buffers_create)
- PASS8(render_buffers_configure, RID, RID, int, int, RS::ViewportMSAA, RS::ViewportScreenSpaceAA, bool, uint32_t)
+ PASS12(render_buffers_configure, RID, RID, int, int, int, int, float, float, RS::ViewportMSAA, RS::ViewportScreenSpaceAA, bool, uint32_t)
PASS1(gi_set_use_half_resolution, bool)
/* Shadow Atlas */
diff --git a/servers/rendering/renderer_scene_render.h b/servers/rendering/renderer_scene_render.h
index 200ddc55d4..0d71ea22da 100644
--- a/servers/rendering/renderer_scene_render.h
+++ b/servers/rendering/renderer_scene_render.h
@@ -256,7 +256,7 @@ public:
virtual void set_debug_draw_mode(RS::ViewportDebugDraw p_debug_draw) = 0;
virtual RID render_buffers_create() = 0;
- virtual void render_buffers_configure(RID p_render_buffers, RID p_render_target, int p_width, int p_height, RS::ViewportMSAA p_msaa, RS::ViewportScreenSpaceAA p_screen_space_aa, bool p_use_debanding, uint32_t p_view_count) = 0;
+ virtual void render_buffers_configure(RID p_render_buffers, RID p_render_target, int p_internal_width, int p_internal_height, int p_width, int p_height, float p_fsr_sharpness, float p_fsr_mipmap_bias, RS::ViewportMSAA p_msaa, RS::ViewportScreenSpaceAA p_screen_space_aa, bool p_use_debanding, uint32_t p_view_count) = 0;
virtual void gi_set_use_half_resolution(bool p_enable) = 0;
virtual void screen_space_roughness_limiter_set_active(bool p_enable, float p_amount, float p_limit) = 0;
diff --git a/servers/rendering/renderer_storage.h b/servers/rendering/renderer_storage.h
index 2985e05e8f..8926bf24aa 100644
--- a/servers/rendering/renderer_storage.h
+++ b/servers/rendering/renderer_storage.h
@@ -183,8 +183,8 @@ public:
virtual String shader_get_code(RID p_shader) const = 0;
virtual void shader_get_param_list(RID p_shader, List<PropertyInfo> *p_param_list) const = 0;
- virtual void shader_set_default_texture_param(RID p_shader, const StringName &p_name, RID p_texture) = 0;
- virtual RID shader_get_default_texture_param(RID p_shader, const StringName &p_name) const = 0;
+ virtual void shader_set_default_texture_param(RID p_shader, const StringName &p_name, RID p_texture, int p_index) = 0;
+ virtual RID shader_get_default_texture_param(RID p_shader, const StringName &p_name, int p_index) const = 0;
virtual Variant shader_get_param_default(RID p_material, const StringName &p_param) const = 0;
virtual RS::ShaderNativeSourceCode shader_get_native_source_code(RID p_shader) const = 0;
diff --git a/servers/rendering/renderer_viewport.cpp b/servers/rendering/renderer_viewport.cpp
index c3d57a13ad..eddf5bf53d 100644
--- a/servers/rendering/renderer_viewport.cpp
+++ b/servers/rendering/renderer_viewport.cpp
@@ -77,18 +77,69 @@ void RendererViewport::_configure_3d_render_buffers(Viewport *p_viewport) {
RSG::scene->free(p_viewport->render_buffers);
p_viewport->render_buffers = RID();
} else {
- float scale_3d = p_viewport->scale_3d;
- if (Engine::get_singleton()->is_editor_hint()) {
- // Ignore the 3D viewport render scaling inside of the editor.
- // The Half Resolution 3D editor viewport option should be used instead.
- scale_3d = 1.0;
+ float scaling_3d_scale = p_viewport->scaling_3d_scale;
+
+ RS::ViewportScaling3DMode scaling_3d_mode = p_viewport->scaling_3d_mode;
+ bool scaling_enabled = true;
+
+ if ((scaling_3d_mode == RS::VIEWPORT_SCALING_3D_MODE_FSR) && (scaling_3d_scale > 1.0)) {
+ // FSR is not design for downsampling.
+ // Throw a warning and fallback to VIEWPORT_SCALING_3D_MODE_BILINEAR
+ WARN_PRINT_ONCE("FSR 3D resolution scaling does not support supersampling. Falling back to bilinear scaling.");
+ scaling_3d_mode = RS::VIEWPORT_SCALING_3D_MODE_BILINEAR;
}
- // Clamp 3D rendering resolution to reasonable values supported on most hardware.
- // This prevents freezing the engine or outright crashing on lower-end GPUs.
- const int width = CLAMP(p_viewport->size.width * scale_3d, 1, 16384);
- const int height = CLAMP(p_viewport->size.height * scale_3d, 1, 16384);
- RSG::scene->render_buffers_configure(p_viewport->render_buffers, p_viewport->render_target, width, height, p_viewport->msaa, p_viewport->screen_space_aa, p_viewport->use_debanding, p_viewport->get_view_count());
+ if ((scaling_3d_mode == RS::VIEWPORT_SCALING_3D_MODE_FSR) && !p_viewport->fsr_enabled) {
+ // FSR is not actually available.
+ // Throw a warning and fallback to disable scaling
+ WARN_PRINT_ONCE("FSR 3D resolution scaling is not available. Disabling 3D resolution scaling.");
+ scaling_enabled = false;
+ }
+
+ if (scaling_3d_scale == 1.0) {
+ scaling_enabled = false;
+ }
+
+ int width;
+ int height;
+ int render_width;
+ int render_height;
+
+ if (scaling_enabled) {
+ switch (scaling_3d_mode) {
+ case RS::VIEWPORT_SCALING_3D_MODE_BILINEAR:
+ // Clamp 3D rendering resolution to reasonable values supported on most hardware.
+ // This prevents freezing the engine or outright crashing on lower-end GPUs.
+ width = CLAMP(p_viewport->size.width * scaling_3d_scale, 1, 16384);
+ height = CLAMP(p_viewport->size.height * scaling_3d_scale, 1, 16384);
+ render_width = width;
+ render_height = height;
+ break;
+ case RS::VIEWPORT_SCALING_3D_MODE_FSR:
+ width = p_viewport->size.width;
+ height = p_viewport->size.height;
+ render_width = MAX(width * scaling_3d_scale, 1.0); // width / (width * scaling)
+ render_height = MAX(height * scaling_3d_scale, 1.0);
+ break;
+ default:
+ // This is an unknown mode.
+ WARN_PRINT_ONCE(vformat("Unknown scaling mode: %d. Disabling 3D resolution scaling.", scaling_3d_mode));
+ width = p_viewport->size.width;
+ height = p_viewport->size.height;
+ render_width = width;
+ render_height = height;
+ break;
+ }
+ } else {
+ width = p_viewport->size.width;
+ height = p_viewport->size.height;
+ render_width = width;
+ render_height = height;
+ }
+
+ p_viewport->internal_size = Size2(render_width, render_height);
+
+ RSG::scene->render_buffers_configure(p_viewport->render_buffers, p_viewport->render_target, render_width, render_height, width, height, p_viewport->fsr_sharpness, p_viewport->fsr_mipmap_bias, p_viewport->msaa, p_viewport->screen_space_aa, p_viewport->use_debanding, p_viewport->get_view_count());
}
}
}
@@ -117,7 +168,7 @@ void RendererViewport::_draw_3d(Viewport *p_viewport) {
}
float screen_lod_threshold = p_viewport->lod_threshold / float(p_viewport->size.width);
- RSG::scene->render_camera(p_viewport->render_buffers, p_viewport->camera, p_viewport->scenario, p_viewport->self, p_viewport->size, screen_lod_threshold, p_viewport->shadow_atlas, xr_interface, &p_viewport->render_info);
+ RSG::scene->render_camera(p_viewport->render_buffers, p_viewport->camera, p_viewport->scenario, p_viewport->self, p_viewport->internal_size, screen_lod_threshold, p_viewport->shadow_atlas, xr_interface, &p_viewport->render_info);
RENDER_TIMESTAMP("<End Rendering 3D Scene");
}
@@ -571,7 +622,7 @@ void RendererViewport::draw_viewports() {
// override our size, make sure it matches our required size and is created as a stereo target
vp->size = xr_interface->get_render_target_size();
uint32_t view_count = xr_interface->get_view_count();
- RSG::storage->render_target_set_size(vp->render_target, vp->size.x, vp->size.y, view_count);
+ RSG::storage->render_target_set_size(vp->render_target, vp->internal_size.x, vp->internal_size.y, view_count);
// check for an external texture destination (disabled for now, not yet supported)
// RSG::storage->render_target_set_external_texture(vp->render_target, xr_interface->get_external_texture_for_eye(leftOrMono));
@@ -662,6 +713,8 @@ void RendererViewport::viewport_initialize(RID p_rid) {
viewport->render_target = RSG::storage->render_target_create();
viewport->shadow_atlas = RSG::scene->shadow_atlas_create();
viewport->viewport_render_direct_to_screen = false;
+
+ viewport->fsr_enabled = !RSG::rasterizer->is_low_end() && !viewport->disable_3d;
}
void RendererViewport::viewport_set_use_xr(RID p_viewport, bool p_use_xr) {
@@ -676,18 +729,42 @@ void RendererViewport::viewport_set_use_xr(RID p_viewport, bool p_use_xr) {
_configure_3d_render_buffers(viewport);
}
-void RendererViewport::viewport_set_scale_3d(RID p_viewport, float p_scale_3d) {
+void RendererViewport::viewport_set_scaling_3d_mode(RID p_viewport, RS::ViewportScaling3DMode p_mode) {
+ Viewport *viewport = viewport_owner.get_or_null(p_viewport);
+ ERR_FAIL_COND(!viewport);
+
+ viewport->scaling_3d_mode = p_mode;
+ _configure_3d_render_buffers(viewport);
+}
+
+void RendererViewport::viewport_set_fsr_sharpness(RID p_viewport, float p_sharpness) {
+ Viewport *viewport = viewport_owner.get_or_null(p_viewport);
+ ERR_FAIL_COND(!viewport);
+
+ viewport->fsr_sharpness = p_sharpness;
+ _configure_3d_render_buffers(viewport);
+}
+
+void RendererViewport::viewport_set_fsr_mipmap_bias(RID p_viewport, float p_mipmap_bias) {
+ Viewport *viewport = viewport_owner.get_or_null(p_viewport);
+ ERR_FAIL_COND(!viewport);
+
+ viewport->fsr_mipmap_bias = p_mipmap_bias;
+ _configure_3d_render_buffers(viewport);
+}
+
+void RendererViewport::viewport_set_scaling_3d_scale(RID p_viewport, float p_scaling_3d_scale) {
Viewport *viewport = viewport_owner.get_or_null(p_viewport);
ERR_FAIL_COND(!viewport);
// Clamp to reasonable values that are actually useful.
// Values above 2.0 don't serve a practical purpose since the viewport
// isn't displayed with mipmaps.
- if (viewport->scale_3d == CLAMP(p_scale_3d, 0.1, 2.0)) {
+ if (viewport->scaling_3d_scale == CLAMP(p_scaling_3d_scale, 0.1, 2.0)) {
return;
}
- viewport->scale_3d = CLAMP(p_scale_3d, 0.1, 2.0);
+ viewport->scaling_3d_scale = CLAMP(p_scaling_3d_scale, 0.1, 2.0);
_configure_3d_render_buffers(viewport);
}
@@ -713,6 +790,7 @@ void RendererViewport::viewport_set_size(RID p_viewport, int p_width, int p_heig
ERR_FAIL_COND(!viewport);
viewport->size = Size2(p_width, p_height);
+
uint32_t view_count = viewport->get_view_count();
RSG::storage->render_target_set_size(viewport->render_target, p_width, p_height, view_count);
_configure_3d_render_buffers(viewport);
@@ -765,7 +843,7 @@ void RendererViewport::viewport_attach_to_screen(RID p_viewport, const Rect2 &p_
// if render_direct_to_screen was used, reset size and position
if (RSG::rasterizer->is_low_end() && viewport->viewport_render_direct_to_screen) {
RSG::storage->render_target_set_position(viewport->render_target, 0, 0);
- RSG::storage->render_target_set_size(viewport->render_target, viewport->size.x, viewport->size.y, viewport->get_view_count());
+ RSG::storage->render_target_set_size(viewport->render_target, viewport->internal_size.x, viewport->internal_size.y, viewport->get_view_count());
}
viewport->viewport_to_screen_rect = Rect2();
diff --git a/servers/rendering/renderer_viewport.h b/servers/rendering/renderer_viewport.h
index f6e6cc8e84..5bb4dbbc6f 100644
--- a/servers/rendering/renderer_viewport.h
+++ b/servers/rendering/renderer_viewport.h
@@ -49,12 +49,16 @@ public:
bool use_xr; /* use xr interface to override camera positioning and projection matrices and control output */
- float scale_3d = 1.0;
-
+ Size2i internal_size;
Size2i size;
RID camera;
RID scenario;
+ RS::ViewportScaling3DMode scaling_3d_mode;
+ float scaling_3d_scale = 1.0;
+ float fsr_sharpness = 0.2f;
+ float fsr_mipmap_bias = 0.0f;
+ bool fsr_enabled;
RS::ViewportUpdateMode update_mode;
RID render_target;
RID render_target_texture;
@@ -207,7 +211,6 @@ public:
void viewport_initialize(RID p_rid);
void viewport_set_use_xr(RID p_viewport, bool p_use_xr);
- void viewport_set_scale_3d(RID p_viewport, float p_scale_3d);
void viewport_set_size(RID p_viewport, int p_width, int p_height);
@@ -216,6 +219,12 @@ public:
void viewport_set_active(RID p_viewport, bool p_active);
void viewport_set_parent_viewport(RID p_viewport, RID p_parent_viewport);
+
+ void viewport_set_scaling_3d_mode(RID p_viewport, RS::ViewportScaling3DMode p_mode);
+ void viewport_set_scaling_3d_scale(RID p_viewport, float p_scaling_3d_scale);
+ void viewport_set_fsr_sharpness(RID p_viewport, float p_sharpness);
+ void viewport_set_fsr_mipmap_bias(RID p_viewport, float p_mipmap_bias);
+
void viewport_set_update_mode(RID p_viewport, RS::ViewportUpdateMode p_mode);
void viewport_set_vflip(RID p_viewport, bool p_enable);
diff --git a/servers/rendering/rendering_device.h b/servers/rendering/rendering_device.h
index 5eb8f1cead..563a80c12c 100644
--- a/servers/rendering/rendering_device.h
+++ b/servers/rendering/rendering_device.h
@@ -120,6 +120,7 @@ public:
// features
bool supports_multiview = false; // If true this device supports multiview options
+ bool supports_fsr_half_float = false; // If true this device supports FSR scaling 3D in half float mode, otherwise use the fallback mode
};
typedef String (*ShaderSPIRVGetCacheKeyFunction)(const Capabilities *p_capabilities);
diff --git a/servers/rendering/rendering_device_binds.h b/servers/rendering/rendering_device_binds.h
index da614877c4..2cf7821668 100644
--- a/servers/rendering/rendering_device_binds.h
+++ b/servers/rendering/rendering_device_binds.h
@@ -427,7 +427,7 @@ protected:
ClassDB::bind_method(D_METHOD("_set_versions", "versions"), &RDShaderFile::_set_versions);
ClassDB::bind_method(D_METHOD("_get_versions"), &RDShaderFile::_get_versions);
- ADD_PROPERTY(PropertyInfo(Variant::DICTIONARY, "_versions", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL), "_set_versions", "_get_versions");
+ ADD_PROPERTY(PropertyInfo(Variant::DICTIONARY, "_versions", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL), "_set_versions", "_get_versions");
ADD_PROPERTY(PropertyInfo(Variant::STRING, "base_error"), "set_base_error", "get_base_error");
}
};
diff --git a/servers/rendering/rendering_server_default.cpp b/servers/rendering/rendering_server_default.cpp
index 107c9f8040..2ce9a20b6b 100644
--- a/servers/rendering/rendering_server_default.cpp
+++ b/servers/rendering/rendering_server_default.cpp
@@ -64,14 +64,8 @@ void RenderingServerDefault::_free(RID p_rid) {
/* EVENT QUEUING */
-void RenderingServerDefault::request_frame_drawn_callback(Object *p_where, const StringName &p_method, const Variant &p_userdata) {
- ERR_FAIL_NULL(p_where);
- FrameDrawnCallbacks fdc;
- fdc.object = p_where->get_instance_id();
- fdc.method = p_method;
- fdc.param = p_userdata;
-
- frame_drawn_callbacks.push_back(fdc);
+void RenderingServerDefault::request_frame_drawn_callback(const Callable &p_callable) {
+ frame_drawn_callbacks.push_back(p_callable);
}
void RenderingServerDefault::_draw(bool p_swap_buffers, double frame_step) {
@@ -103,15 +97,13 @@ void RenderingServerDefault::_draw(bool p_swap_buffers, double frame_step) {
RSG::scene->update_visibility_notifiers();
while (frame_drawn_callbacks.front()) {
- Object *obj = ObjectDB::get_instance(frame_drawn_callbacks.front()->get().object);
- if (obj) {
- Callable::CallError ce;
- const Variant *v = &frame_drawn_callbacks.front()->get().param;
- obj->call(frame_drawn_callbacks.front()->get().method, &v, 1, ce);
- if (ce.error != Callable::CallError::CALL_OK) {
- String err = Variant::get_call_error_text(obj, frame_drawn_callbacks.front()->get().method, &v, 1, ce);
- ERR_PRINT("Error calling frame drawn function: " + err);
- }
+ Callable c = frame_drawn_callbacks.front()->get();
+ Variant result;
+ Callable::CallError ce;
+ c.call(nullptr, 0, result, ce);
+ if (ce.error != Callable::CallError::CALL_OK) {
+ String err = Variant::get_callable_error_text(c, nullptr, 0, ce);
+ ERR_PRINT("Error calling frame drawn function: " + err);
}
frame_drawn_callbacks.pop_front();
diff --git a/servers/rendering/rendering_server_default.h b/servers/rendering/rendering_server_default.h
index a25bd3dae5..b50631bb21 100644
--- a/servers/rendering/rendering_server_default.h
+++ b/servers/rendering/rendering_server_default.h
@@ -58,13 +58,7 @@ class RenderingServerDefault : public RenderingServer {
static int changes;
RID test_cube;
- struct FrameDrawnCallbacks {
- ObjectID object;
- StringName method;
- Variant param;
- };
-
- List<FrameDrawnCallbacks> frame_drawn_callbacks;
+ List<Callable> frame_drawn_callbacks;
static void _changes_changed() {}
@@ -229,8 +223,8 @@ public:
FUNC2SC(shader_get_param_list, RID, List<PropertyInfo> *)
- FUNC3(shader_set_default_texture_param, RID, const StringName &, RID)
- FUNC2RC(RID, shader_get_default_texture_param, RID, const StringName &)
+ FUNC4(shader_set_default_texture_param, RID, const StringName &, RID, int)
+ FUNC3RC(RID, shader_get_default_texture_param, RID, const StringName &, int)
FUNC2RC(Variant, shader_get_param_default, RID, const StringName &)
FUNC1RC(ShaderNativeSourceCode, shader_get_native_source_code, RID)
@@ -534,7 +528,6 @@ public:
FUNCRIDSPLIT(viewport)
FUNC2(viewport_set_use_xr, RID, bool)
- FUNC2(viewport_set_scale_3d, RID, float)
FUNC3(viewport_set_size, RID, int, int)
FUNC2(viewport_set_active, RID, bool)
@@ -545,6 +538,11 @@ public:
FUNC3(viewport_attach_to_screen, RID, const Rect2 &, int)
FUNC2(viewport_set_render_direct_to_screen, RID, bool)
+ FUNC2(viewport_set_scaling_3d_mode, RID, ViewportScaling3DMode)
+ FUNC2(viewport_set_scaling_3d_scale, RID, float)
+ FUNC2(viewport_set_fsr_sharpness, RID, float)
+ FUNC2(viewport_set_fsr_mipmap_bias, RID, float)
+
FUNC2(viewport_set_update_mode, RID, ViewportUpdateMode)
FUNC1RC(RID, viewport_get_texture, RID)
@@ -880,7 +878,7 @@ public:
/* EVENT QUEUING */
- virtual void request_frame_drawn_callback(Object *p_where, const StringName &p_method, const Variant &p_userdata) override;
+ virtual void request_frame_drawn_callback(const Callable &p_callable) override;
virtual void draw(bool p_swap_buffers, double frame_step) override;
virtual void sync() override;
diff --git a/servers/rendering/shader_language.cpp b/servers/rendering/shader_language.cpp
index ac978b994a..50719ecfc3 100644
--- a/servers/rendering/shader_language.cpp
+++ b/servers/rendering/shader_language.cpp
@@ -4920,7 +4920,9 @@ ShaderLanguage::Node *ShaderLanguage::_parse_expression(BlockNode *p_block, cons
bool error = false;
Node *n = func->arguments[argidx];
if (n->type == Node::TYPE_CONSTANT || n->type == Node::TYPE_OPERATOR) {
- error = true;
+ if (!call_function->arguments[i].is_const) {
+ error = true;
+ }
} else if (n->type == Node::TYPE_ARRAY) {
ArrayNode *an = static_cast<ArrayNode *>(n);
if (an->call_expression != nullptr || an->is_const) {
@@ -6071,7 +6073,7 @@ ShaderLanguage::Node *ShaderLanguage::_parse_expression(BlockNode *p_block, cons
_set_error("Invalid arguments to unary operator '" + get_operator_text(op->op) + "' :" + at);
return nullptr;
}
- expression.remove(i + 1);
+ expression.remove_at(i + 1);
}
} else if (is_ternary) {
@@ -6111,7 +6113,7 @@ ShaderLanguage::Node *ShaderLanguage::_parse_expression(BlockNode *p_block, cons
}
for (int i = 0; i < 4; i++) {
- expression.remove(next_op);
+ expression.remove_at(next_op);
}
} else {
@@ -6172,8 +6174,8 @@ ShaderLanguage::Node *ShaderLanguage::_parse_expression(BlockNode *p_block, cons
return nullptr;
}
- expression.remove(next_op);
- expression.remove(next_op);
+ expression.remove_at(next_op);
+ expression.remove_at(next_op);
}
}
@@ -7188,11 +7190,6 @@ Error ShaderLanguage::_parse_block(BlockNode *p_block, const FunctionInfo &p_fun
//check return type
BlockNode *b = p_block;
- if (b && b->parent_function && p_function_info.main_function) {
- _set_error(vformat("Using 'return' in '%s' processor function results in undefined behavior!", b->parent_function->name));
- return ERR_PARSE_ERROR;
- }
-
while (b && !b->parent_function) {
b = b->parent_block;
}
@@ -7202,6 +7199,11 @@ Error ShaderLanguage::_parse_block(BlockNode *p_block, const FunctionInfo &p_fun
return ERR_BUG;
}
+ if (b && b->parent_function && p_function_info.main_function) {
+ _set_error(vformat("Using 'return' in '%s' processor function results in undefined behavior!", b->parent_function->name));
+ return ERR_PARSE_ERROR;
+ }
+
String return_struct_name = String(b->parent_function->return_struct_name);
String array_size_string;
@@ -9370,15 +9372,6 @@ Error ShaderLanguage::complete(const String &p_code, const Map<StringName, Funct
limit = 4;
} break;
- case TYPE_MAT2:
- limit = 2;
- break;
- case TYPE_MAT3:
- limit = 3;
- break;
- case TYPE_MAT4:
- limit = 4;
- break;
default: {
}
}
diff --git a/servers/rendering_server.cpp b/servers/rendering_server.cpp
index 1b16949768..7a958546b6 100644
--- a/servers/rendering_server.cpp
+++ b/servers/rendering_server.cpp
@@ -1716,8 +1716,8 @@ void RenderingServer::_bind_methods() {
ClassDB::bind_method(D_METHOD("shader_get_param_list", "shader"), &RenderingServer::_shader_get_param_list);
ClassDB::bind_method(D_METHOD("shader_get_param_default", "shader", "param"), &RenderingServer::shader_get_param_default);
- ClassDB::bind_method(D_METHOD("shader_set_default_texture_param", "shader", "param", "texture"), &RenderingServer::shader_set_default_texture_param);
- ClassDB::bind_method(D_METHOD("shader_get_default_texture_param", "shader", "param"), &RenderingServer::shader_get_default_texture_param);
+ ClassDB::bind_method(D_METHOD("shader_set_default_texture_param", "shader", "param", "texture", "index"), &RenderingServer::shader_set_default_texture_param, DEFVAL(0));
+ ClassDB::bind_method(D_METHOD("shader_get_default_texture_param", "shader", "param", "index"), &RenderingServer::shader_get_default_texture_param, DEFVAL(0));
BIND_ENUM_CONSTANT(SHADER_SPATIAL);
BIND_ENUM_CONSTANT(SHADER_CANVAS_ITEM);
@@ -2165,13 +2165,16 @@ void RenderingServer::_bind_methods() {
ClassDB::bind_method(D_METHOD("viewport_create"), &RenderingServer::viewport_create);
ClassDB::bind_method(D_METHOD("viewport_set_use_xr", "viewport", "use_xr"), &RenderingServer::viewport_set_use_xr);
- ClassDB::bind_method(D_METHOD("viewport_set_scale_3d", "viewport", "scale"), &RenderingServer::viewport_set_scale_3d);
ClassDB::bind_method(D_METHOD("viewport_set_size", "viewport", "width", "height"), &RenderingServer::viewport_set_size);
ClassDB::bind_method(D_METHOD("viewport_set_active", "viewport", "active"), &RenderingServer::viewport_set_active);
ClassDB::bind_method(D_METHOD("viewport_set_parent_viewport", "viewport", "parent_viewport"), &RenderingServer::viewport_set_parent_viewport);
ClassDB::bind_method(D_METHOD("viewport_attach_to_screen", "viewport", "rect", "screen"), &RenderingServer::viewport_attach_to_screen, DEFVAL(Rect2()), DEFVAL(DisplayServer::MAIN_WINDOW_ID));
ClassDB::bind_method(D_METHOD("viewport_set_render_direct_to_screen", "viewport", "enabled"), &RenderingServer::viewport_set_render_direct_to_screen);
+ ClassDB::bind_method(D_METHOD("viewport_set_scaling_3d_mode", "viewport", "scaling_3d_mode"), &RenderingServer::viewport_set_scaling_3d_mode);
+ ClassDB::bind_method(D_METHOD("viewport_set_scaling_3d_scale", "viewport", "scale"), &RenderingServer::viewport_set_scaling_3d_scale);
+ ClassDB::bind_method(D_METHOD("viewport_set_fsr_sharpness", "viewport", "sharpness"), &RenderingServer::viewport_set_fsr_sharpness);
+ ClassDB::bind_method(D_METHOD("viewport_set_fsr_mipmap_bias", "viewport", "mipmap_bias"), &RenderingServer::viewport_set_fsr_mipmap_bias);
ClassDB::bind_method(D_METHOD("viewport_set_update_mode", "viewport", "update_mode"), &RenderingServer::viewport_set_update_mode);
ClassDB::bind_method(D_METHOD("viewport_set_clear_mode", "viewport", "clear_mode"), &RenderingServer::viewport_set_clear_mode);
ClassDB::bind_method(D_METHOD("viewport_get_texture", "viewport"), &RenderingServer::viewport_get_texture);
@@ -2213,6 +2216,10 @@ void RenderingServer::_bind_methods() {
ClassDB::bind_method(D_METHOD("viewport_get_measured_render_time_gpu", "viewport"), &RenderingServer::viewport_get_measured_render_time_gpu);
+ BIND_ENUM_CONSTANT(VIEWPORT_SCALING_3D_MODE_BILINEAR);
+ BIND_ENUM_CONSTANT(VIEWPORT_SCALING_3D_MODE_FSR);
+ BIND_ENUM_CONSTANT(VIEWPORT_SCALING_3D_MODE_MAX);
+
BIND_ENUM_CONSTANT(VIEWPORT_UPDATE_DISABLED);
BIND_ENUM_CONSTANT(VIEWPORT_UPDATE_ONCE); //then goes to disabled); must be manually updated
BIND_ENUM_CONSTANT(VIEWPORT_UPDATE_WHEN_VISIBLE); // default
@@ -2701,7 +2708,7 @@ void RenderingServer::_bind_methods() {
/* Misc */
- ClassDB::bind_method(D_METHOD("request_frame_drawn_callback", "where", "method", "userdata"), &RenderingServer::request_frame_drawn_callback);
+ ClassDB::bind_method(D_METHOD("request_frame_drawn_callback", "callable"), &RenderingServer::request_frame_drawn_callback);
ClassDB::bind_method(D_METHOD("has_changed"), &RenderingServer::has_changed);
ClassDB::bind_method(D_METHOD("get_rendering_info", "info"), &RenderingServer::get_rendering_info);
ClassDB::bind_method(D_METHOD("get_video_adapter_name"), &RenderingServer::get_video_adapter_name);
@@ -2837,12 +2844,6 @@ RenderingServer::RenderingServer() {
GLOBAL_DEF("rendering/vulkan/staging_buffer/texture_upload_region_size_px", 64);
GLOBAL_DEF("rendering/vulkan/descriptor_pools/max_descriptors_per_pool", 64);
- GLOBAL_DEF("rendering/3d/viewport/scale", 1.0);
- ProjectSettings::get_singleton()->set_custom_property_info("rendering/3d/viewport/scale",
- PropertyInfo(Variant::FLOAT,
- "rendering/3d/viewport/scale",
- PROPERTY_HINT_RANGE, "0.25,2.0,0.01"));
-
GLOBAL_DEF("rendering/shader_compiler/shader_cache/enabled", true);
GLOBAL_DEF("rendering/shader_compiler/shader_cache/compress", true);
GLOBAL_DEF("rendering/shader_compiler/shader_cache/use_zstd_compression", true);
@@ -2903,6 +2904,29 @@ RenderingServer::RenderingServer() {
ProjectSettings::get_singleton()->set_custom_property_info("rendering/anti_aliasing/screen_space_roughness_limiter/amount", PropertyInfo(Variant::FLOAT, "rendering/anti_aliasing/screen_space_roughness_limiter/amount", PROPERTY_HINT_RANGE, "0.01,4.0,0.01"));
ProjectSettings::get_singleton()->set_custom_property_info("rendering/anti_aliasing/screen_space_roughness_limiter/limit", PropertyInfo(Variant::FLOAT, "rendering/anti_aliasing/screen_space_roughness_limiter/limit", PROPERTY_HINT_RANGE, "0.01,1.0,0.01"));
+ GLOBAL_DEF_RST("rendering/scaling_3d/mode", 0);
+ GLOBAL_DEF_RST("rendering/scaling_3d/scale", 1.0);
+ GLOBAL_DEF_RST("rendering/scaling_3d/fsr_sharpness", 0.2f);
+ GLOBAL_DEF_RST("rendering/scaling_3d/fsr_mipmap_bias", 0.0f);
+ ProjectSettings::get_singleton()->set_custom_property_info("rendering/scaling_3d/mode",
+ PropertyInfo(Variant::INT,
+ "rendering/scaling_3d/mode",
+ PROPERTY_HINT_ENUM, "Bilinear (Fastest),FSR (Fast)"));
+
+ ProjectSettings::get_singleton()->set_custom_property_info("rendering/scaling_3d/scale",
+ PropertyInfo(Variant::FLOAT,
+ "rendering/scaling_3d/scale",
+ PROPERTY_HINT_RANGE, "0.25,2.0,0.01"));
+
+ ProjectSettings::get_singleton()->set_custom_property_info("rendering/scaling_3d/fsr_sharpness",
+ PropertyInfo(Variant::FLOAT,
+ "rendering/scaling_3d/fsr_sharpness",
+ PROPERTY_HINT_RANGE, "0,2,0.1"));
+ ProjectSettings::get_singleton()->set_custom_property_info("rendering/scaling_3d/fsr_mipmap_bias",
+ PropertyInfo(Variant::FLOAT,
+ "rendering/scaling_3d/fsr_mipmap_bias",
+ PROPERTY_HINT_RANGE, "-2,2,0.1"));
+
GLOBAL_DEF("rendering/textures/decals/filter", DECAL_FILTER_LINEAR_MIPMAPS);
ProjectSettings::get_singleton()->set_custom_property_info("rendering/textures/decals/filter", PropertyInfo(Variant::INT, "rendering/textures/decals/filter", PROPERTY_HINT_ENUM, "Nearest (Fast),Nearest+Mipmaps,Linear,Linear+Mipmaps,Linear+Mipmaps Anisotropic (Slow)"));
GLOBAL_DEF("rendering/textures/light_projectors/filter", LIGHT_PROJECTOR_FILTER_LINEAR_MIPMAPS);
diff --git a/servers/rendering_server.h b/servers/rendering_server.h
index 3125268e1c..85f92bc003 100644
--- a/servers/rendering_server.h
+++ b/servers/rendering_server.h
@@ -172,8 +172,8 @@ public:
virtual void shader_get_param_list(RID p_shader, List<PropertyInfo> *p_param_list) const = 0;
virtual Variant shader_get_param_default(RID p_shader, const StringName &p_param) const = 0;
- virtual void shader_set_default_texture_param(RID p_shader, const StringName &p_name, RID p_texture) = 0;
- virtual RID shader_get_default_texture_param(RID p_shader, const StringName &p_name) const = 0;
+ virtual void shader_set_default_texture_param(RID p_shader, const StringName &p_name, RID p_texture, int p_index = 0) = 0;
+ virtual RID shader_get_default_texture_param(RID p_shader, const StringName &p_name, int p_index = 0) const = 0;
struct ShaderNativeSourceCode {
struct Version {
@@ -770,8 +770,13 @@ public:
virtual RID viewport_create() = 0;
+ enum ViewportScaling3DMode {
+ VIEWPORT_SCALING_3D_MODE_BILINEAR,
+ VIEWPORT_SCALING_3D_MODE_FSR,
+ VIEWPORT_SCALING_3D_MODE_MAX
+ };
+
virtual void viewport_set_use_xr(RID p_viewport, bool p_use_xr) = 0;
- virtual void viewport_set_scale_3d(RID p_viewport, float p_scale_3d) = 0;
virtual void viewport_set_size(RID p_viewport, int p_width, int p_height) = 0;
virtual void viewport_set_active(RID p_viewport, bool p_active) = 0;
virtual void viewport_set_parent_viewport(RID p_viewport, RID p_parent_viewport) = 0;
@@ -779,6 +784,11 @@ public:
virtual void viewport_attach_to_screen(RID p_viewport, const Rect2 &p_rect = Rect2(), DisplayServer::WindowID p_screen = DisplayServer::MAIN_WINDOW_ID) = 0;
virtual void viewport_set_render_direct_to_screen(RID p_viewport, bool p_enable) = 0;
+ virtual void viewport_set_scaling_3d_mode(RID p_viewport, ViewportScaling3DMode p_scaling_3d_mode) = 0;
+ virtual void viewport_set_scaling_3d_scale(RID p_viewport, float p_scaling_3d_scale) = 0;
+ virtual void viewport_set_fsr_sharpness(RID p_viewport, float p_fsr_sharpness) = 0;
+ virtual void viewport_set_fsr_mipmap_bias(RID p_viewport, float p_fsr_mipmap_bias) = 0;
+
enum ViewportUpdateMode {
VIEWPORT_UPDATE_DISABLED,
VIEWPORT_UPDATE_ONCE, //then goes to disabled, must be manually updated
@@ -1435,10 +1445,10 @@ public:
virtual void free(RID p_rid) = 0; ///< free RIDs associated with the rendering server
- virtual void request_frame_drawn_callback(Object *p_where, const StringName &p_method, const Variant &p_userdata) = 0;
-
/* EVENT QUEUING */
+ virtual void request_frame_drawn_callback(const Callable &p_callable) = 0;
+
virtual void draw(bool p_swap_buffers = true, double frame_step = 0.0) = 0;
virtual void sync() = 0;
virtual bool has_changed() const = 0;
@@ -1561,6 +1571,7 @@ VARIANT_ENUM_CAST(RenderingServer::ParticlesEmitFlags);
VARIANT_ENUM_CAST(RenderingServer::ParticlesCollisionType);
VARIANT_ENUM_CAST(RenderingServer::ParticlesCollisionHeightfieldResolution);
VARIANT_ENUM_CAST(RenderingServer::FogVolumeShape);
+VARIANT_ENUM_CAST(RenderingServer::ViewportScaling3DMode);
VARIANT_ENUM_CAST(RenderingServer::ViewportUpdateMode);
VARIANT_ENUM_CAST(RenderingServer::ViewportClearMode);
VARIANT_ENUM_CAST(RenderingServer::ViewportMSAA);
diff --git a/servers/text/text_server_extension.cpp b/servers/text/text_server_extension.cpp
index a44fee7c95..d6d98b4f8f 100644
--- a/servers/text/text_server_extension.cpp
+++ b/servers/text/text_server_extension.cpp
@@ -55,6 +55,15 @@ void TextServerExtension::_bind_methods() {
GDVIRTUAL_BIND(_font_set_data, "font_rid", "data");
GDVIRTUAL_BIND(_font_set_data_ptr, "font_rid", "data_ptr", "data_size");
+ GDVIRTUAL_BIND(_font_set_style, "font_rid", "style");
+ GDVIRTUAL_BIND(_font_get_style, "font_rid");
+
+ GDVIRTUAL_BIND(_font_set_name, "font_rid", "name");
+ GDVIRTUAL_BIND(_font_get_name, "font_rid");
+
+ GDVIRTUAL_BIND(_font_set_style_name, "font_rid", "name_style");
+ GDVIRTUAL_BIND(_font_get_style_name, "font_rid");
+
GDVIRTUAL_BIND(_font_set_antialiased, "font_rid", "antialiased");
GDVIRTUAL_BIND(_font_is_antialiased, "font_rid");
@@ -185,6 +194,9 @@ void TextServerExtension::_bind_methods() {
GDVIRTUAL_BIND(_shaped_text_set_bidi_override, "shaped", "override");
+ GDVIRTUAL_BIND(_shaped_text_set_custom_punctuation, "shaped", "punct");
+ GDVIRTUAL_BIND(_shaped_text_get_custom_punctuation, "shaped");
+
GDVIRTUAL_BIND(_shaped_text_set_orientation, "shaped", "orientation");
GDVIRTUAL_BIND(_shaped_text_get_orientation, "shaped");
@@ -248,6 +260,7 @@ void TextServerExtension::_bind_methods() {
GDVIRTUAL_BIND(_shaped_text_draw, "shaped", "canvas", "pos", "clip_l", "clip_r", "color");
GDVIRTUAL_BIND(_shaped_text_draw_outline, "shaped", "canvas", "pos", "clip_l", "clip_r", "outline_size", "color");
+ GDVIRTUAL_BIND(_shaped_text_get_grapheme_bounds, "shaped", "pos");
GDVIRTUAL_BIND(_shaped_text_next_grapheme_pos, "shaped", "pos");
GDVIRTUAL_BIND(_shaped_text_prev_grapheme_pos, "shaped", "pos");
@@ -368,6 +381,42 @@ void TextServerExtension::font_set_data_ptr(RID p_font_rid, const uint8_t *p_dat
GDVIRTUAL_CALL(_font_set_data_ptr, p_font_rid, p_data_ptr, p_data_size);
}
+void TextServerExtension::font_set_style(RID p_font_rid, uint32_t /*FontStyle*/ p_style) {
+ GDVIRTUAL_CALL(_font_set_style, p_font_rid, p_style);
+}
+
+uint32_t /*FontStyle*/ TextServerExtension::font_get_style(RID p_font_rid) const {
+ uint32_t ret;
+ if (GDVIRTUAL_CALL(_font_get_style, p_font_rid, ret)) {
+ return ret;
+ }
+ return 0;
+}
+
+void TextServerExtension::font_set_style_name(RID p_font_rid, const String &p_name) {
+ GDVIRTUAL_CALL(_font_set_style_name, p_font_rid, p_name);
+}
+
+String TextServerExtension::font_get_style_name(RID p_font_rid) const {
+ String ret;
+ if (GDVIRTUAL_CALL(_font_get_style_name, p_font_rid, ret)) {
+ return ret;
+ }
+ return String();
+}
+
+void TextServerExtension::font_set_name(RID p_font_rid, const String &p_name) {
+ GDVIRTUAL_CALL(_font_set_name, p_font_rid, p_name);
+}
+
+String TextServerExtension::font_get_name(RID p_font_rid) const {
+ String ret;
+ if (GDVIRTUAL_CALL(_font_get_name, p_font_rid, ret)) {
+ return ret;
+ }
+ return String();
+}
+
void TextServerExtension::font_set_antialiased(RID p_font_rid, bool p_antialiased) {
GDVIRTUAL_CALL(_font_set_antialiased, p_font_rid, p_antialiased);
}
@@ -906,6 +955,18 @@ void TextServerExtension::shaped_text_set_bidi_override(RID p_shaped, const Arra
GDVIRTUAL_CALL(_shaped_text_set_bidi_override, p_shaped, p_override);
}
+void TextServerExtension::shaped_text_set_custom_punctuation(RID p_shaped, const String &p_punct) {
+ GDVIRTUAL_CALL(_shaped_text_set_custom_punctuation, p_shaped, p_punct);
+}
+
+String TextServerExtension::shaped_text_get_custom_punctuation(RID p_shaped) const {
+ String ret;
+ if (GDVIRTUAL_CALL(_shaped_text_get_custom_punctuation, p_shaped, ret)) {
+ return ret;
+ }
+ return String();
+}
+
void TextServerExtension::shaped_text_set_preserve_invalid(RID p_shaped, bool p_enabled) {
GDVIRTUAL_CALL(_shaped_text_set_preserve_invalid, p_shaped, p_enabled);
}
@@ -1232,6 +1293,14 @@ void TextServerExtension::shaped_text_draw_outline(RID p_shaped, RID p_canvas, c
shaped_text_draw_outline(p_shaped, p_canvas, p_pos, p_clip_l, p_clip_r, p_outline_size, p_color);
}
+Vector2 TextServerExtension::shaped_text_get_grapheme_bounds(RID p_shaped, int p_pos) const {
+ Vector2 ret;
+ if (GDVIRTUAL_CALL(_shaped_text_get_grapheme_bounds, p_shaped, p_pos, ret)) {
+ return ret;
+ }
+ return TextServer::shaped_text_get_grapheme_bounds(p_shaped, p_pos);
+}
+
int TextServerExtension::shaped_text_next_grapheme_pos(RID p_shaped, int p_pos) const {
int ret;
if (GDVIRTUAL_CALL(_shaped_text_next_grapheme_pos, p_shaped, p_pos, ret)) {
diff --git a/servers/text/text_server_extension.h b/servers/text/text_server_extension.h
index 954b2cf660..a2dbd25e05 100644
--- a/servers/text/text_server_extension.h
+++ b/servers/text/text_server_extension.h
@@ -84,6 +84,21 @@ public:
GDVIRTUAL2(_font_set_data, RID, const PackedByteArray &);
GDVIRTUAL3(_font_set_data_ptr, RID, GDNativeConstPtr<const uint8_t>, uint64_t);
+ virtual void font_set_style(RID p_font_rid, uint32_t /*FontStyle*/ p_style) override;
+ virtual uint32_t /*FontStyle*/ font_get_style(RID p_font_rid) const override;
+ GDVIRTUAL2(_font_set_style, RID, uint32_t);
+ GDVIRTUAL1RC(uint32_t, _font_get_style, RID);
+
+ virtual void font_set_name(RID p_font_rid, const String &p_name) override;
+ virtual String font_get_name(RID p_font_rid) const override;
+ GDVIRTUAL2(_font_set_name, RID, const String &);
+ GDVIRTUAL1RC(String, _font_get_name, RID);
+
+ virtual void font_set_style_name(RID p_font_rid, const String &p_name) override;
+ virtual String font_get_style_name(RID p_font_rid) const override;
+ GDVIRTUAL2(_font_set_style_name, RID, const String &);
+ GDVIRTUAL1RC(String, _font_get_style_name, RID);
+
virtual void font_set_antialiased(RID p_font_rid, bool p_antialiased) override;
virtual bool font_is_antialiased(RID p_font_rid) const override;
GDVIRTUAL2(_font_set_antialiased, RID, bool);
@@ -301,6 +316,11 @@ public:
virtual void shaped_text_set_bidi_override(RID p_shaped, const Array &p_override) override;
GDVIRTUAL2(_shaped_text_set_bidi_override, RID, const Array &);
+ virtual void shaped_text_set_custom_punctuation(RID p_shaped, const String &p_punct) override;
+ virtual String shaped_text_get_custom_punctuation(RID p_shaped) const override;
+ GDVIRTUAL2(_shaped_text_set_custom_punctuation, RID, String);
+ GDVIRTUAL1RC(String, _shaped_text_get_custom_punctuation, RID);
+
virtual void shaped_text_set_orientation(RID p_shaped, Orientation p_orientation = ORIENTATION_HORIZONTAL) override;
virtual Orientation shaped_text_get_orientation(RID p_shaped) const override;
GDVIRTUAL2(_shaped_text_set_orientation, RID, Orientation);
@@ -408,8 +428,10 @@ public:
GDVIRTUAL6C(_shaped_text_draw, RID, RID, const Vector2 &, float, float, const Color &);
GDVIRTUAL7C(_shaped_text_draw_outline, RID, RID, const Vector2 &, float, float, int, const Color &);
+ virtual Vector2 shaped_text_get_grapheme_bounds(RID p_shaped, int p_pos) const override;
virtual int shaped_text_next_grapheme_pos(RID p_shaped, int p_pos) const override;
virtual int shaped_text_prev_grapheme_pos(RID p_shaped, int p_pos) const override;
+ GDVIRTUAL2RC(Vector2, _shaped_text_get_grapheme_bounds, RID, int);
GDVIRTUAL2RC(int, _shaped_text_next_grapheme_pos, RID, int);
GDVIRTUAL2RC(int, _shaped_text_prev_grapheme_pos, RID, int);
diff --git a/servers/text_server.cpp b/servers/text_server.cpp
index af4718678e..3b71dc1d92 100644
--- a/servers/text_server.cpp
+++ b/servers/text_server.cpp
@@ -78,7 +78,7 @@ void TextServerManager::remove_interface(const Ref<TextServer> &p_interface) {
ERR_FAIL_COND(idx == -1);
print_verbose("TextServer: Removed interface \"" + p_interface->get_name() + "\"");
emit_signal(SNAME("interface_removed"), p_interface->get_name());
- interfaces.remove(idx);
+ interfaces.remove_at(idx);
}
int TextServerManager::get_interface_count() const {
@@ -141,7 +141,7 @@ TextServerManager::~TextServerManager() {
primary_interface.unref();
}
while (interfaces.size() > 0) {
- interfaces.remove(0);
+ interfaces.remove_at(0);
}
singleton = nullptr;
}
@@ -208,6 +208,15 @@ void TextServer::_bind_methods() {
ClassDB::bind_method(D_METHOD("font_set_data", "font_rid", "data"), &TextServer::font_set_data);
+ ClassDB::bind_method(D_METHOD("font_set_style", "font_rid", "style"), &TextServer::font_set_style);
+ ClassDB::bind_method(D_METHOD("font_get_style", "font_rid"), &TextServer::font_get_style);
+
+ ClassDB::bind_method(D_METHOD("font_set_name", "font_rid", "name"), &TextServer::font_set_name);
+ ClassDB::bind_method(D_METHOD("font_get_name", "font_rid"), &TextServer::font_get_name);
+
+ ClassDB::bind_method(D_METHOD("font_set_style_name", "font_rid", "name"), &TextServer::font_set_style_name);
+ ClassDB::bind_method(D_METHOD("font_get_style_name", "font_rid"), &TextServer::font_get_style_name);
+
ClassDB::bind_method(D_METHOD("font_set_antialiased", "font_rid", "antialiased"), &TextServer::font_set_antialiased);
ClassDB::bind_method(D_METHOD("font_is_antialiased", "font_rid"), &TextServer::font_is_antialiased);
@@ -338,6 +347,9 @@ void TextServer::_bind_methods() {
ClassDB::bind_method(D_METHOD("shaped_text_set_bidi_override", "shaped", "override"), &TextServer::shaped_text_set_bidi_override);
+ ClassDB::bind_method(D_METHOD("shaped_text_set_custom_punctuation", "shaped", "punct"), &TextServer::shaped_text_set_custom_punctuation);
+ ClassDB::bind_method(D_METHOD("shaped_text_get_custom_punctuation", "shaped"), &TextServer::shaped_text_get_custom_punctuation);
+
ClassDB::bind_method(D_METHOD("shaped_text_set_orientation", "shaped", "orientation"), &TextServer::shaped_text_set_orientation, DEFVAL(ORIENTATION_HORIZONTAL));
ClassDB::bind_method(D_METHOD("shaped_text_get_orientation", "shaped"), &TextServer::shaped_text_get_orientation);
@@ -391,6 +403,7 @@ void TextServer::_bind_methods() {
ClassDB::bind_method(D_METHOD("shaped_text_hit_test_grapheme", "shaped", "coords"), &TextServer::shaped_text_hit_test_grapheme);
ClassDB::bind_method(D_METHOD("shaped_text_hit_test_position", "shaped", "coords"), &TextServer::shaped_text_hit_test_position);
+ ClassDB::bind_method(D_METHOD("shaped_text_get_grapheme_bounds", "shaped", "pos"), &TextServer::shaped_text_get_grapheme_bounds);
ClassDB::bind_method(D_METHOD("shaped_text_next_grapheme_pos", "shaped", "pos"), &TextServer::shaped_text_next_grapheme_pos);
ClassDB::bind_method(D_METHOD("shaped_text_prev_grapheme_pos", "shaped", "pos"), &TextServer::shaped_text_prev_grapheme_pos);
@@ -470,11 +483,16 @@ void TextServer::_bind_methods() {
BIND_ENUM_CONSTANT(CONTOUR_CURVE_TAG_OFF_CONIC);
BIND_ENUM_CONSTANT(CONTOUR_CURVE_TAG_OFF_CUBIC);
- /* Font Spacing*/
+ /* Font Spacing */
BIND_ENUM_CONSTANT(SPACING_GLYPH);
BIND_ENUM_CONSTANT(SPACING_SPACE);
BIND_ENUM_CONSTANT(SPACING_TOP);
BIND_ENUM_CONSTANT(SPACING_BOTTOM);
+
+ /* Font Style */
+ BIND_ENUM_CONSTANT(FONT_BOLD);
+ BIND_ENUM_CONSTANT(FONT_ITALIC);
+ BIND_ENUM_CONSTANT(FONT_FIXED_WIDTH);
}
Vector2 TextServer::get_hex_code_box_size(int p_size, char32_t p_index) const {
@@ -1006,7 +1024,7 @@ Vector<Vector2> TextServer::shaped_text_get_selection(RID p_shaped, int p_start,
while (j < ranges.size()) {
if (Math::is_equal_approx(ranges[i].y, ranges[j].x, (real_t)UNIT_EPSILON)) {
ranges.write[i].y = ranges[j].y;
- ranges.remove(j);
+ ranges.remove_at(j);
continue;
}
j++;
@@ -1103,6 +1121,27 @@ int TextServer::shaped_text_hit_test_position(RID p_shaped, real_t p_coords) con
return 0;
}
+Vector2 TextServer::shaped_text_get_grapheme_bounds(RID p_shaped, int p_pos) const {
+ int v_size = shaped_text_get_glyph_count(p_shaped);
+ const Glyph *glyphs = shaped_text_get_glyphs(p_shaped);
+
+ real_t off = 0.0f;
+ for (int i = 0; i < v_size; i++) {
+ if ((glyphs[i].count > 0) && ((glyphs[i].index != 0) || ((glyphs[i].flags & GRAPHEME_IS_SPACE) == GRAPHEME_IS_SPACE))) {
+ if (glyphs[i].start <= p_pos && glyphs[i].end >= p_pos) {
+ real_t advance = 0.f;
+ for (int j = 0; j < glyphs[i].count; j++) {
+ advance += glyphs[i + j].advance;
+ }
+ return Vector2(off, off + advance);
+ }
+ }
+ off += glyphs[i].advance * glyphs[i].repeat;
+ }
+
+ return Vector2();
+}
+
int TextServer::shaped_text_next_grapheme_pos(RID p_shaped, int p_pos) const {
int v_size = shaped_text_get_glyph_count(p_shaped);
const Glyph *glyphs = shaped_text_get_glyphs(p_shaped);
diff --git a/servers/text_server.h b/servers/text_server.h
index a5484d8fbd..5c994feaae 100644
--- a/servers/text_server.h
+++ b/servers/text_server.h
@@ -125,6 +125,12 @@ public:
SPACING_BOTTOM,
};
+ enum FontStyle {
+ FONT_BOLD = 1 << 0,
+ FONT_ITALIC = 1 << 1,
+ FONT_FIXED_WIDTH = 1 << 2,
+ };
+
void _draw_hex_code_box_number(RID p_canvas, int p_size, const Vector2 &p_pos, uint8_t p_index, const Color &p_color) const;
protected:
@@ -144,6 +150,7 @@ protected:
int end = 0; // Substring end offset in the parent string.
String text;
+ String custom_punct;
TextServer::Direction direction = DIRECTION_LTR; // Desired text direction.
TextServer::Orientation orientation = ORIENTATION_HORIZONTAL;
@@ -224,6 +231,15 @@ public:
virtual void font_set_data(RID p_font_rid, const PackedByteArray &p_data) = 0;
virtual void font_set_data_ptr(RID p_font_rid, const uint8_t *p_data_ptr, size_t p_data_size) = 0;
+ virtual void font_set_style(RID p_font_rid, uint32_t /*FontStyle*/ p_style) = 0;
+ virtual uint32_t /*FontStyle*/ font_get_style(RID p_font_rid) const = 0;
+
+ virtual void font_set_name(RID p_font_rid, const String &p_name) = 0;
+ virtual String font_get_name(RID p_font_rid) const = 0;
+
+ virtual void font_set_style_name(RID p_font_rid, const String &p_name) = 0;
+ virtual String font_get_style_name(RID p_font_rid) const = 0;
+
virtual void font_set_antialiased(RID p_font_rid, bool p_antialiased) = 0;
virtual bool font_is_antialiased(RID p_font_rid) const = 0;
@@ -354,6 +370,9 @@ public:
virtual void shaped_text_set_bidi_override(RID p_shaped, const Array &p_override) = 0;
+ virtual void shaped_text_set_custom_punctuation(RID p_shaped, const String &p_punct) = 0;
+ virtual String shaped_text_get_custom_punctuation(RID p_shaped) const = 0;
+
virtual void shaped_text_set_orientation(RID p_shaped, Orientation p_orientation = ORIENTATION_HORIZONTAL) = 0;
virtual Orientation shaped_text_get_orientation(RID p_shaped) const = 0;
@@ -419,6 +438,7 @@ public:
virtual int shaped_text_hit_test_grapheme(RID p_shaped, float p_coords) const; // Return grapheme index.
virtual int shaped_text_hit_test_position(RID p_shaped, float p_coords) const; // Return caret/selection position.
+ virtual Vector2 shaped_text_get_grapheme_bounds(RID p_shaped, int p_pos) const;
virtual int shaped_text_next_grapheme_pos(RID p_shaped, int p_pos) const;
virtual int shaped_text_prev_grapheme_pos(RID p_shaped, int p_pos) const;
@@ -535,6 +555,7 @@ VARIANT_ENUM_CAST(TextServer::Hinting);
VARIANT_ENUM_CAST(TextServer::Feature);
VARIANT_ENUM_CAST(TextServer::ContourPointTag);
VARIANT_ENUM_CAST(TextServer::SpacingType);
+VARIANT_ENUM_CAST(TextServer::FontStyle);
GDVIRTUAL_NATIVE_PTR(Glyph);
GDVIRTUAL_NATIVE_PTR(Glyph *);
diff --git a/servers/xr_server.cpp b/servers/xr_server.cpp
index d0367ba95e..959288497d 100644
--- a/servers/xr_server.cpp
+++ b/servers/xr_server.cpp
@@ -193,7 +193,7 @@ void XRServer::remove_interface(const Ref<XRInterface> &p_interface) {
print_verbose("XR: Removed interface" + p_interface->get_name());
emit_signal(SNAME("interface_removed"), p_interface->get_name());
- interfaces.remove(idx);
+ interfaces.remove_at(idx);
};
int XRServer::get_interface_count() const {
@@ -396,7 +396,7 @@ XRServer::~XRServer() {
primary_interface.unref();
while (interfaces.size() > 0) {
- interfaces.remove(0);
+ interfaces.remove_at(0);
}
// TODO pretty sure there is a clear function or something...
diff --git a/tests/SCsub b/tests/SCsub
index 0f3c14f0bd..31466fffc1 100644
--- a/tests/SCsub
+++ b/tests/SCsub
@@ -22,6 +22,11 @@ if env_tests["platform"] == "windows":
if env_tests.msvc:
env_tests.Append(CCFLAGS=["/bigobj"])
+env_tests.add_source_files(env.tests_sources, "core/*.cpp")
+env_tests.add_source_files(env.tests_sources, "core/math/*.cpp")
+env_tests.add_source_files(env.tests_sources, "core/templates/*.cpp")
+env_tests.add_source_files(env.tests_sources, "scene/*.cpp")
+env_tests.add_source_files(env.tests_sources, "servers/*.cpp")
env_tests.add_source_files(env.tests_sources, "*.cpp")
lib = env_tests.add_library("tests", env.tests_sources)
diff --git a/tests/test_config_file.h b/tests/core/io/test_config_file.h
index e3f40e16fd..f6fbaf9a88 100644
--- a/tests/test_config_file.h
+++ b/tests/core/io/test_config_file.h
@@ -32,6 +32,7 @@
#define TEST_CONFIG_FILE_H
#include "core/io/config_file.h"
+#include "core/os/os.h"
#include "tests/test_macros.h"
diff --git a/tests/test_file_access.h b/tests/core/io/test_file_access.h
index b3da16c1d1..4ffc57afe4 100644
--- a/tests/test_file_access.h
+++ b/tests/core/io/test_file_access.h
@@ -32,7 +32,8 @@
#define TEST_FILE_ACCESS_H
#include "core/io/file_access.h"
-#include "test_utils.h"
+#include "tests/test_macros.h"
+#include "tests/test_utils.h"
namespace TestFileAccess {
diff --git a/tests/test_image.h b/tests/core/io/test_image.h
index 99c2a9380d..643d2f31ec 100644
--- a/tests/test_image.h
+++ b/tests/core/io/test_image.h
@@ -31,10 +31,10 @@
#ifndef TEST_IMAGE_H
#define TEST_IMAGE_H
-#include "core/io/file_access_pack.h"
#include "core/io/image.h"
-#include "test_utils.h"
+#include "core/os/os.h"
+#include "tests/test_utils.h"
#include "thirdparty/doctest/doctest.h"
namespace TestImage {
@@ -52,6 +52,13 @@ TEST_CASE("[Image] Instantiation") {
"A newly created image should not be compressed.");
CHECK(!image->has_mipmaps());
+ PackedByteArray image_data = image->get_data();
+ for (int i = 0; i < image_data.size(); i++) {
+ CHECK_MESSAGE(
+ image_data[i] == 0,
+ "An image created without data specified should have its data zeroed out.");
+ }
+
Ref<Image> image_copy = memnew(Image());
CHECK_MESSAGE(
image_copy->is_empty(),
@@ -62,7 +69,7 @@ TEST_CASE("[Image] Instantiation") {
image->get_data() == image_copy->get_data(),
"Duplicated images should have the same data.");
- PackedByteArray image_data = image->get_data();
+ image_data = image->get_data();
Ref<Image> image_from_data = memnew(Image(8, 4, false, Image::FORMAT_RGBA8, image_data));
CHECK_MESSAGE(
image->get_data() == image_from_data->get_data(),
@@ -214,14 +221,51 @@ TEST_CASE("[Image] Modifying pixels of an image") {
// Fill image with color
image2->fill(Color(0.5, 0.5, 0.5, 0.5));
- for (int x = 0; x < image2->get_width(); x++) {
- for (int y = 0; y < image2->get_height(); y++) {
+ for (int y = 0; y < image2->get_height(); y++) {
+ for (int x = 0; x < image2->get_width(); x++) {
CHECK_MESSAGE(
image2->get_pixel(x, y).r > 0.49,
"fill() should colorize all pixels of the image.");
}
}
+ // Fill rect with color
+ {
+ const int img_width = 3;
+ const int img_height = 3;
+ Vector<Rect2> rects;
+ rects.push_back(Rect2());
+ rects.push_back(Rect2(-5, -5, 3, 3));
+ rects.push_back(Rect2(img_width, 0, 12, 12));
+ rects.push_back(Rect2(0, img_height, 12, 12));
+ rects.push_back(Rect2(img_width + 1, img_height + 2, 12, 12));
+ rects.push_back(Rect2(1, 1, 1, 1));
+ rects.push_back(Rect2(0, 1, 2, 3));
+ rects.push_back(Rect2(-5, 0, img_width + 10, 2));
+ rects.push_back(Rect2(0, -5, 2, img_height + 10));
+ rects.push_back(Rect2(-1, -1, img_width + 1, img_height + 1));
+
+ for (const Rect2 &rect : rects) {
+ Ref<Image> img = memnew(Image(img_width, img_height, false, Image::FORMAT_RGBA8));
+ CHECK_NOTHROW_MESSAGE(
+ img->fill_rect(rect, Color(1, 1, 1, 1)),
+ "fill_rect() shouldn't throw for any rect.");
+ for (int y = 0; y < img->get_height(); y++) {
+ for (int x = 0; x < img->get_width(); x++) {
+ if (rect.abs().has_point(Point2(x, y))) {
+ CHECK_MESSAGE(
+ img->get_pixel(x, y).is_equal_approx(Color(1, 1, 1, 1)),
+ "fill_rect() should colorize all image pixels within rect bounds.");
+ } else {
+ CHECK_MESSAGE(
+ !img->get_pixel(x, y).is_equal_approx(Color(1, 1, 1, 1)),
+ "fill_rect() shouldn't colorize any image pixel out of rect bounds.");
+ }
+ }
+ }
+ }
+ }
+
// Blend two images together
image->blend_rect(image2, Rect2(Vector2(0, 0), image2->get_size()), Vector2(0, 0));
CHECK_MESSAGE(
diff --git a/tests/test_json.h b/tests/core/io/test_json.h
index 3af58dfa1c..3af58dfa1c 100644
--- a/tests/test_json.h
+++ b/tests/core/io/test_json.h
diff --git a/tests/test_marshalls.h b/tests/core/io/test_marshalls.h
index 6bd916164e..6bd916164e 100644
--- a/tests/test_marshalls.h
+++ b/tests/core/io/test_marshalls.h
diff --git a/tests/test_pck_packer.h b/tests/core/io/test_pck_packer.h
index 06e4e64963..75a4abffbe 100644
--- a/tests/test_pck_packer.h
+++ b/tests/core/io/test_pck_packer.h
@@ -35,21 +35,16 @@
#include "core/io/pck_packer.h"
#include "core/os/os.h"
+#include "tests/test_utils.h"
#include "thirdparty/doctest/doctest.h"
namespace TestPCKPacker {
-// Dummy 64-character encryption key (since it's required).
-constexpr const char *ENCRYPTION_KEY = "0000000000000000000000000000000000000000000000000000000000000000";
-
TEST_CASE("[PCKPacker] Pack an empty PCK file") {
PCKPacker pck_packer;
const String output_pck_path = OS::get_singleton()->get_cache_path().plus_file("output_empty.pck");
CHECK_MESSAGE(
- pck_packer.pck_start(
- output_pck_path,
- 32,
- ENCRYPTION_KEY) == OK,
+ pck_packer.pck_start(output_pck_path) == OK,
"Starting a PCK file should return an OK error code.");
CHECK_MESSAGE(
@@ -69,14 +64,27 @@ TEST_CASE("[PCKPacker] Pack an empty PCK file") {
"The generated empty PCK file shouldn't be too large.");
}
+TEST_CASE("[PCKPacker] Pack empty with zero alignment invalid") {
+ PCKPacker pck_packer;
+ const String output_pck_path = OS::get_singleton()->get_cache_path().plus_file("output_empty.pck");
+ ERR_PRINT_OFF;
+ CHECK_MESSAGE(pck_packer.pck_start(output_pck_path, 0) != OK, "PCK with zero alignment should fail.");
+ ERR_PRINT_ON;
+}
+
+TEST_CASE("[PCKPacker] Pack empty with invalid key") {
+ PCKPacker pck_packer;
+ const String output_pck_path = OS::get_singleton()->get_cache_path().plus_file("output_empty.pck");
+ ERR_PRINT_OFF;
+ CHECK_MESSAGE(pck_packer.pck_start(output_pck_path, 32, "") != OK, "PCK with invalid key should fail.");
+ ERR_PRINT_ON;
+}
+
TEST_CASE("[PCKPacker] Pack a PCK file with some files and directories") {
PCKPacker pck_packer;
const String output_pck_path = OS::get_singleton()->get_cache_path().plus_file("output_with_files.pck");
CHECK_MESSAGE(
- pck_packer.pck_start(
- output_pck_path,
- 32,
- ENCRYPTION_KEY) == OK,
+ pck_packer.pck_start(output_pck_path) == OK,
"Starting a PCK file should return an OK error code.");
const String base_dir = OS::get_singleton()->get_executable_path().get_base_dir();
diff --git a/tests/test_resource.h b/tests/core/io/test_resource.h
index cee3281995..cee3281995 100644
--- a/tests/test_resource.h
+++ b/tests/core/io/test_resource.h
diff --git a/tests/test_xml_parser.h b/tests/core/io/test_xml_parser.h
index 55de048d6a..2d00f29ddf 100644
--- a/tests/test_xml_parser.h
+++ b/tests/core/io/test_xml_parser.h
@@ -31,10 +31,7 @@
#ifndef TEST_XML_PARSER_H
#define TEST_XML_PARSER_H
-#include <inttypes.h>
-
#include "core/io/xml_parser.h"
-#include "core/string/ustring.h"
#include "tests/test_macros.h"
diff --git a/tests/test_aabb.h b/tests/core/math/test_aabb.h
index 2724d9481a..b838bed171 100644
--- a/tests/test_aabb.h
+++ b/tests/core/math/test_aabb.h
@@ -32,10 +32,8 @@
#define TEST_AABB_H
#include "core/math/aabb.h"
-#include "core/string/print_string.h"
-#include "tests/test_macros.h"
-#include "thirdparty/doctest/doctest.h"
+#include "tests/test_macros.h"
namespace TestAABB {
@@ -90,38 +88,38 @@ TEST_CASE("[AABB] Basic setters") {
"set_size() should result in the expected AABB.");
}
-TEST_CASE("[AABB] Area getters") {
+TEST_CASE("[AABB] Volume getters") {
AABB aabb = AABB(Vector3(-1.5, 2, -2.5), Vector3(4, 5, 6));
CHECK_MESSAGE(
- Math::is_equal_approx(aabb.get_area(), 120),
- "get_area() should return the expected value with positive size.");
+ Math::is_equal_approx(aabb.get_volume(), 120),
+ "get_volume() should return the expected value with positive size.");
CHECK_MESSAGE(
- !aabb.has_no_area(),
- "Non-empty volumetric AABB should have an area.");
+ !aabb.has_no_volume(),
+ "Non-empty volumetric AABB should have a volume.");
aabb = AABB(Vector3(-1.5, 2, -2.5), Vector3(-4, 5, 6));
CHECK_MESSAGE(
- Math::is_equal_approx(aabb.get_area(), -120),
- "get_area() should return the expected value with negative size (1 component).");
+ Math::is_equal_approx(aabb.get_volume(), -120),
+ "get_volume() should return the expected value with negative size (1 component).");
aabb = AABB(Vector3(-1.5, 2, -2.5), Vector3(-4, -5, 6));
CHECK_MESSAGE(
- Math::is_equal_approx(aabb.get_area(), 120),
- "get_area() should return the expected value with negative size (2 components).");
+ Math::is_equal_approx(aabb.get_volume(), 120),
+ "get_volume() should return the expected value with negative size (2 components).");
aabb = AABB(Vector3(-1.5, 2, -2.5), Vector3(-4, -5, -6));
CHECK_MESSAGE(
- Math::is_equal_approx(aabb.get_area(), -120),
- "get_area() should return the expected value with negative size (3 components).");
+ Math::is_equal_approx(aabb.get_volume(), -120),
+ "get_volume() should return the expected value with negative size (3 components).");
aabb = AABB(Vector3(-1.5, 2, -2.5), Vector3(4, 0, 6));
CHECK_MESSAGE(
- aabb.has_no_area(),
- "Non-empty flat AABB should not have an area.");
+ aabb.has_no_volume(),
+ "Non-empty flat AABB should not have a volume.");
CHECK_MESSAGE(
- AABB().has_no_area(),
- "Empty AABB should not have an area.");
+ AABB().has_no_volume(),
+ "Empty AABB should not have a volume.");
}
TEST_CASE("[AABB] Surface getters") {
diff --git a/tests/test_astar.h b/tests/core/math/test_astar.h
index 137c477946..2c183374ac 100644
--- a/tests/test_astar.h
+++ b/tests/core/math/test_astar.h
@@ -32,11 +32,6 @@
#define TEST_ASTAR_H
#include "core/math/a_star.h"
-#include "core/math/math_funcs.h"
-#include "core/os/os.h"
-
-#include <math.h>
-#include <stdio.h>
#include "tests/test_macros.h"
diff --git a/tests/test_basis.h b/tests/core/math/test_basis.h
index b254d9fb7f..500c069a33 100644
--- a/tests/test_basis.h
+++ b/tests/core/math/test_basis.h
@@ -31,9 +31,8 @@
#ifndef TEST_BASIS_H
#define TEST_BASIS_H
+#include "core/math/basis.h"
#include "core/math/random_number_generator.h"
-#include "core/os/os.h"
-#include "core/string/ustring.h"
#include "tests/test_macros.h"
diff --git a/tests/test_color.h b/tests/core/math/test_color.h
index bffa890ae2..82cf786f7a 100644
--- a/tests/test_color.h
+++ b/tests/core/math/test_color.h
@@ -33,7 +33,7 @@
#include "core/math/color.h"
-#include "thirdparty/doctest/doctest.h"
+#include "tests/test_macros.h"
namespace TestColor {
diff --git a/tests/test_expression.h b/tests/core/math/test_expression.h
index cb1d29389f..cb1d29389f 100644
--- a/tests/test_expression.h
+++ b/tests/core/math/test_expression.h
diff --git a/tests/test_geometry_2d.h b/tests/core/math/test_geometry_2d.h
index 25af8c355e..8f6669b572 100644
--- a/tests/test_geometry_2d.h
+++ b/tests/core/math/test_geometry_2d.h
@@ -32,7 +32,6 @@
#define TEST_GEOMETRY_2D_H
#include "core/math/geometry_2d.h"
-#include "core/templates/vector.h"
#include "thirdparty/doctest/doctest.h"
diff --git a/tests/test_geometry_3d.h b/tests/core/math/test_geometry_3d.h
index ae30737fe2..f42003ffcf 100644
--- a/tests/test_geometry_3d.h
+++ b/tests/core/math/test_geometry_3d.h
@@ -32,11 +32,7 @@
#define TEST_GEOMETRY_3D_H
#include "core/math/geometry_3d.h"
-#include "core/math/plane.h"
-#include "core/math/random_number_generator.h"
-#include "core/math/vector3.h"
#include "tests/test_macros.h"
-#include "vector"
namespace TestGeometry3D {
TEST_CASE("[Geometry3D] Closest Points Between Segments") {
diff --git a/tests/test_math.cpp b/tests/core/math/test_math.cpp
index 72272382ce..6ec9bc2473 100644
--- a/tests/test_math.cpp
+++ b/tests/core/math/test_math.cpp
@@ -30,23 +30,11 @@
#include "test_math.h"
-#include "core/io/file_access.h"
-#include "core/math/basis.h"
#include "core/math/camera_matrix.h"
#include "core/math/delaunay_3d.h"
#include "core/math/geometry_2d.h"
-#include "core/math/math_funcs.h"
-#include "core/math/transform_3d.h"
-#include "core/os/keyboard.h"
+#include "core/os/main_loop.h"
#include "core/os/os.h"
-#include "core/string/print_string.h"
-#include "core/string/ustring.h"
-#include "core/templates/vmap.h"
-#include "core/variant/method_ptrcall.h"
-#include "core/variant/variant.h"
-#include "scene/main/node.h"
-#include "scene/resources/texture.h"
-#include "servers/rendering/shader_language.h"
namespace TestMath {
diff --git a/tests/test_math.h b/tests/core/math/test_math.h
index 4375925bd5..ab5fb6a050 100644
--- a/tests/test_math.h
+++ b/tests/core/math/test_math.h
@@ -31,7 +31,7 @@
#ifndef TEST_MATH_H
#define TEST_MATH_H
-#include "core/os/main_loop.h"
+class MainLoop;
namespace TestMath {
diff --git a/tests/test_random_number_generator.h b/tests/core/math/test_random_number_generator.h
index 39c4771c19..39c4771c19 100644
--- a/tests/test_random_number_generator.h
+++ b/tests/core/math/test_random_number_generator.h
diff --git a/tests/test_rect2.h b/tests/core/math/test_rect2.h
index 3d9fe5a32e..aabb950461 100644
--- a/tests/test_rect2.h
+++ b/tests/core/math/test_rect2.h
@@ -211,26 +211,74 @@ TEST_CASE("[Rect2] Growing") {
}
TEST_CASE("[Rect2] Has point") {
+ Rect2 rect = Rect2(0, 100, 1280, 720);
CHECK_MESSAGE(
- Rect2(0, 100, 1280, 720).has_point(Vector2(500, 600)),
+ rect.has_point(Vector2(500, 600)),
"has_point() with contained Vector2 should return the expected result.");
CHECK_MESSAGE(
- !Rect2(0, 100, 1280, 720).has_point(Vector2(0, 0)),
+ !rect.has_point(Vector2(0, 0)),
"has_point() with non-contained Vector2 should return the expected result.");
CHECK_MESSAGE(
- Rect2(0, 100, 1280, 720).has_point(Vector2(0, 110)),
- "has_point() with positive Vector2 on left edge should return the expected result.");
+ rect.has_point(rect.position),
+ "has_point() with positive size should include `position`.");
+ CHECK_MESSAGE(
+ rect.has_point(rect.position + Vector2(1, 1)),
+ "has_point() with positive size should include `position + (1, 1)`.");
+ CHECK_MESSAGE(
+ !rect.has_point(rect.position + Vector2(1, -1)),
+ "has_point() with positive size should not include `position + (1, -1)`.");
+ CHECK_MESSAGE(
+ !rect.has_point(rect.position + rect.size),
+ "has_point() with positive size should not include `position + size`.");
+ CHECK_MESSAGE(
+ !rect.has_point(rect.position + rect.size + Vector2(1, 1)),
+ "has_point() with positive size should not include `position + size + (1, 1)`.");
+ CHECK_MESSAGE(
+ rect.has_point(rect.position + rect.size + Vector2(-1, -1)),
+ "has_point() with positive size should include `position + size + (-1, -1)`.");
+ CHECK_MESSAGE(
+ !rect.has_point(rect.position + rect.size + Vector2(-1, 1)),
+ "has_point() with positive size should not include `position + size + (-1, 1)`.");
+
+ CHECK_MESSAGE(
+ rect.has_point(rect.position + Vector2(0, 10)),
+ "has_point() with point located on left edge should return true.");
+ CHECK_MESSAGE(
+ !rect.has_point(rect.position + Vector2(rect.size.x, 10)),
+ "has_point() with point located on right edge should return false.");
+ CHECK_MESSAGE(
+ rect.has_point(rect.position + Vector2(10, 0)),
+ "has_point() with point located on top edge should return true.");
+ CHECK_MESSAGE(
+ !rect.has_point(rect.position + Vector2(10, rect.size.y)),
+ "has_point() with point located on bottom edge should return false.");
+
+ /*
+ // FIXME: Disabled for now until GH-37617 is fixed one way or another.
+ // More tests should then be written like for the positive size case.
+ rect = Rect2(0, 100, -1280, -720);
+ CHECK_MESSAGE(
+ rect.has_point(rect.position),
+ "has_point() with negative size should include `position`.");
CHECK_MESSAGE(
- !Rect2(0, 100, 1280, 720).has_point(Vector2(1280, 110)),
- "has_point() with positive Vector2 on right edge should return the expected result.");
+ !rect.has_point(rect.position + rect.size),
+ "has_point() with negative size should not include `position + size`.");
+ */
+ rect = Rect2(-4000, -200, 1280, 720);
+ CHECK_MESSAGE(
+ rect.has_point(rect.position + Vector2(0, 10)),
+ "has_point() with negative position and point located on left edge should return true.");
+ CHECK_MESSAGE(
+ !rect.has_point(rect.position + Vector2(rect.size.x, 10)),
+ "has_point() with negative position and point located on right edge should return false.");
CHECK_MESSAGE(
- Rect2(-4000, 100, 1280, 720).has_point(Vector2(-4000, 110)),
- "has_point() with negative Vector2 on left edge should return the expected result.");
+ rect.has_point(rect.position + Vector2(10, 0)),
+ "has_point() with negative position and point located on top edge should return true.");
CHECK_MESSAGE(
- !Rect2(-4000, 100, 1280, 720).has_point(Vector2(-2720, 110)),
- "has_point() with negative Vector2 on right edge should return the expected result.");
+ !rect.has_point(rect.position + Vector2(10, rect.size.y)),
+ "has_point() with negative position and point located on bottom edge should return false.");
}
TEST_CASE("[Rect2] Intersection") {
@@ -429,26 +477,74 @@ TEST_CASE("[Rect2i] Growing") {
}
TEST_CASE("[Rect2i] Has point") {
+ Rect2i rect = Rect2i(0, 100, 1280, 720);
CHECK_MESSAGE(
- Rect2i(0, 100, 1280, 720).has_point(Vector2i(500, 600)),
+ rect.has_point(Vector2i(500, 600)),
"has_point() with contained Vector2i should return the expected result.");
CHECK_MESSAGE(
- !Rect2i(0, 100, 1280, 720).has_point(Vector2i(0, 0)),
+ !rect.has_point(Vector2i(0, 0)),
"has_point() with non-contained Vector2i should return the expected result.");
CHECK_MESSAGE(
- Rect2i(0, 100, 1280, 720).has_point(Vector2(0, 110)),
- "has_point() with positive Vector2 on left edge should return the expected result.");
+ rect.has_point(rect.position),
+ "has_point() with positive size should include `position`.");
+ CHECK_MESSAGE(
+ rect.has_point(rect.position + Vector2i(1, 1)),
+ "has_point() with positive size should include `position + (1, 1)`.");
+ CHECK_MESSAGE(
+ !rect.has_point(rect.position + Vector2i(1, -1)),
+ "has_point() with positive size should not include `position + (1, -1)`.");
+ CHECK_MESSAGE(
+ !rect.has_point(rect.position + rect.size),
+ "has_point() with positive size should not include `position + size`.");
+ CHECK_MESSAGE(
+ !rect.has_point(rect.position + rect.size + Vector2i(1, 1)),
+ "has_point() with positive size should not include `position + size + (1, 1)`.");
+ CHECK_MESSAGE(
+ rect.has_point(rect.position + rect.size + Vector2i(-1, -1)),
+ "has_point() with positive size should include `position + size + (-1, -1)`.");
+ CHECK_MESSAGE(
+ !rect.has_point(rect.position + rect.size + Vector2i(-1, 1)),
+ "has_point() with positive size should not include `position + size + (-1, 1)`.");
+
+ CHECK_MESSAGE(
+ rect.has_point(rect.position + Vector2i(0, 10)),
+ "has_point() with point located on left edge should return true.");
+ CHECK_MESSAGE(
+ !rect.has_point(rect.position + Vector2i(rect.size.x, 10)),
+ "has_point() with point located on right edge should return false.");
+ CHECK_MESSAGE(
+ rect.has_point(rect.position + Vector2i(10, 0)),
+ "has_point() with point located on top edge should return true.");
+ CHECK_MESSAGE(
+ !rect.has_point(rect.position + Vector2i(10, rect.size.y)),
+ "has_point() with point located on bottom edge should return false.");
+
+ /*
+ // FIXME: Disabled for now until GH-37617 is fixed one way or another.
+ // More tests should then be written like for the positive size case.
+ rect = Rect2i(0, 100, -1280, -720);
+ CHECK_MESSAGE(
+ rect.has_point(rect.position),
+ "has_point() with negative size should include `position`.");
CHECK_MESSAGE(
- !Rect2i(0, 100, 1280, 720).has_point(Vector2(1280, 110)),
- "has_point() with positive Vector2 on right edge should return the expected result.");
+ !rect.has_point(rect.position + rect.size),
+ "has_point() with negative size should not include `position + size`.");
+ */
+ rect = Rect2i(-4000, -200, 1280, 720);
+ CHECK_MESSAGE(
+ rect.has_point(rect.position + Vector2i(0, 10)),
+ "has_point() with negative position and point located on left edge should return true.");
+ CHECK_MESSAGE(
+ !rect.has_point(rect.position + Vector2i(rect.size.x, 10)),
+ "has_point() with negative position and point located on right edge should return false.");
CHECK_MESSAGE(
- Rect2i(-4000, 100, 1280, 720).has_point(Vector2(-4000, 110)),
- "has_point() with negative Vector2 on left edge should return the expected result.");
+ rect.has_point(rect.position + Vector2i(10, 0)),
+ "has_point() with negative position and point located on top edge should return true.");
CHECK_MESSAGE(
- !Rect2i(-4000, 100, 1280, 720).has_point(Vector2(-2720, 110)),
- "has_point() with negative Vector2 on right edge should return the expected result.");
+ !rect.has_point(rect.position + Vector2i(10, rect.size.y)),
+ "has_point() with negative position and point located on bottom edge should return false.");
}
TEST_CASE("[Rect2i] Intersection") {
diff --git a/tests/test_class_db.h b/tests/core/object/test_class_db.h
index 4b058a4c67..4b27905485 100644
--- a/tests/test_class_db.h
+++ b/tests/core/object/test_class_db.h
@@ -31,14 +31,9 @@
#ifndef TEST_CLASS_DB_H
#define TEST_CLASS_DB_H
-#include "core/register_core_types.h"
-
+#include "core/core_bind.h"
#include "core/core_constants.h"
-#include "core/os/os.h"
-#include "core/string/string_name.h"
-#include "core/string/ustring.h"
-#include "core/templates/ordered_hash_map.h"
-#include "core/variant/variant.h"
+#include "core/object/class_db.h"
#include "tests/test_macros.h"
diff --git a/tests/test_method_bind.h b/tests/core/object/test_method_bind.h
index 879e7949e2..c3a869a8a4 100644
--- a/tests/test_method_bind.h
+++ b/tests/core/object/test_method_bind.h
@@ -35,10 +35,6 @@
#include "tests/test_macros.h"
-#include <inttypes.h>
-#include <stdio.h>
-#include <wchar.h>
-
namespace TestMethodBind {
class MethodBindTester : public Object {
diff --git a/tests/test_object.h b/tests/core/object/test_object.h
index 8cb7116a20..4109ea521a 100644
--- a/tests/test_object.h
+++ b/tests/core/object/test_object.h
@@ -32,9 +32,11 @@
#define TEST_OBJECT_H
#include "core/core_string_names.h"
+#include "core/object/class_db.h"
#include "core/object/object.h"
+#include "core/object/script_language.h"
-#include "thirdparty/doctest/doctest.h"
+#include "tests/test_macros.h"
// Declared in global namespace because of GDCLASS macro warning (Windows):
// "Unqualified friend declaration referring to type outside of the nearest enclosing namespace
diff --git a/tests/test_node_path.h b/tests/core/string/test_node_path.h
index f30fe53c5a..0216a30f8f 100644
--- a/tests/test_node_path.h
+++ b/tests/core/string/test_node_path.h
@@ -33,7 +33,7 @@
#include "core/string/node_path.h"
-#include "thirdparty/doctest/doctest.h"
+#include "tests/test_macros.h"
namespace TestNodePath {
diff --git a/tests/test_string.h b/tests/core/string/test_string.h
index 28d1089d2f..00a9a8779a 100644
--- a/tests/test_string.h
+++ b/tests/core/string/test_string.h
@@ -31,15 +31,7 @@
#ifndef TEST_STRING_H
#define TEST_STRING_H
-#include <inttypes.h>
-#include <stdio.h>
-#include <wchar.h>
-
-#include "core/io/ip_address.h"
-#include "core/os/main_loop.h"
-#include "core/os/os.h"
#include "core/string/ustring.h"
-#include "core/variant/variant.h"
#include "tests/test_macros.h"
@@ -498,12 +490,6 @@ TEST_CASE("[String] Splitting") {
}
}
-TEST_CASE("[String] Erasing") {
- String s = "Josephine is such a cute girl!";
- s.erase(s.find("cute "), String("cute ").length());
- CHECK(s == "Josephine is such a girl!");
-}
-
struct test_27_data {
char const *data;
char const *part;
diff --git a/tests/test_translation.h b/tests/core/string/test_translation.h
index 93c53bbbc9..47e06add40 100644
--- a/tests/test_translation.h
+++ b/tests/core/string/test_translation.h
@@ -39,7 +39,8 @@
#include "editor/import/resource_importer_csv_translation.h"
#endif
-#include "thirdparty/doctest/doctest.h"
+#include "tests/test_macros.h"
+#include "tests/test_utils.h"
namespace TestTranslation {
diff --git a/tests/test_command_queue.h b/tests/core/templates/test_command_queue.h
index f0d4569942..5d228f2bf6 100644
--- a/tests/test_command_queue.h
+++ b/tests/core/templates/test_command_queue.h
@@ -33,12 +33,10 @@
#include "core/config/project_settings.h"
#include "core/math/random_number_generator.h"
-#include "core/os/mutex.h"
#include "core/os/os.h"
-#include "core/os/semaphore.h"
#include "core/os/thread.h"
#include "core/templates/command_queue_mt.h"
-#include "test_macros.h"
+#include "tests/test_macros.h"
#if !defined(NO_THREADS)
diff --git a/tests/test_list.h b/tests/core/templates/test_list.h
index 52d5edff70..52d5edff70 100644
--- a/tests/test_list.h
+++ b/tests/core/templates/test_list.h
diff --git a/tests/test_local_vector.h b/tests/core/templates/test_local_vector.h
index eff2a16abc..67bcf515f9 100644
--- a/tests/test_local_vector.h
+++ b/tests/core/templates/test_local_vector.h
@@ -84,25 +84,25 @@ TEST_CASE("[LocalVector] Remove.") {
vector.push_back(3);
vector.push_back(4);
- vector.remove(0);
+ vector.remove_at(0);
CHECK(vector[0] == 1);
CHECK(vector[1] == 2);
CHECK(vector[2] == 3);
CHECK(vector[3] == 4);
- vector.remove(2);
+ vector.remove_at(2);
CHECK(vector[0] == 1);
CHECK(vector[1] == 2);
CHECK(vector[2] == 4);
- vector.remove(1);
+ vector.remove_at(1);
CHECK(vector[0] == 1);
CHECK(vector[1] == 4);
- vector.remove(0);
+ vector.remove_at(0);
CHECK(vector[0] == 4);
}
@@ -117,7 +117,7 @@ TEST_CASE("[LocalVector] Remove Unordered.") {
CHECK(vector.size() == 5);
- vector.remove_unordered(0);
+ vector.remove_at_unordered(0);
CHECK(vector.size() == 4);
@@ -128,7 +128,7 @@ TEST_CASE("[LocalVector] Remove Unordered.") {
CHECK(vector.find(4) != -1);
// Now the vector is no more ordered.
- vector.remove_unordered(vector.find(3));
+ vector.remove_at_unordered(vector.find(3));
CHECK(vector.size() == 3);
@@ -137,7 +137,7 @@ TEST_CASE("[LocalVector] Remove Unordered.") {
CHECK(vector.find(2) != -1);
CHECK(vector.find(4) != -1);
- vector.remove_unordered(vector.find(2));
+ vector.remove_at_unordered(vector.find(2));
CHECK(vector.size() == 2);
@@ -145,7 +145,7 @@ TEST_CASE("[LocalVector] Remove Unordered.") {
CHECK(vector.find(1) != -1);
CHECK(vector.find(4) != -1);
- vector.remove_unordered(vector.find(4));
+ vector.remove_at_unordered(vector.find(4));
CHECK(vector.size() == 1);
@@ -153,7 +153,7 @@ TEST_CASE("[LocalVector] Remove Unordered.") {
CHECK(vector.find(1) != -1);
// Remove the last one.
- vector.remove_unordered(0);
+ vector.remove_at_unordered(0);
CHECK(vector.is_empty());
CHECK(vector.size() == 0);
@@ -193,9 +193,9 @@ TEST_CASE("[LocalVector] Size / Resize / Reserve.") {
// Capacity is supposed to change only when the size increase.
CHECK(vector.get_capacity() >= 10);
- vector.remove(0);
- vector.remove(0);
- vector.remove(0);
+ vector.remove_at(0);
+ vector.remove_at(0);
+ vector.remove_at(0);
CHECK(vector.size() == 2);
// Capacity is supposed to change only when the size increase.
diff --git a/tests/test_lru.h b/tests/core/templates/test_lru.h
index 2802754729..9359909c53 100644
--- a/tests/test_lru.h
+++ b/tests/core/templates/test_lru.h
@@ -32,7 +32,6 @@
#define TEST_LRU_H
#include "core/templates/lru.h"
-#include "core/templates/vector.h"
#include "tests/test_macros.h"
diff --git a/tests/test_oa_hash_map.cpp b/tests/core/templates/test_oa_hash_map.cpp
index 904c01642d..904c01642d 100644
--- a/tests/test_oa_hash_map.cpp
+++ b/tests/core/templates/test_oa_hash_map.cpp
diff --git a/tests/test_oa_hash_map.h b/tests/core/templates/test_oa_hash_map.h
index 9745802cc0..f229ac94ea 100644
--- a/tests/test_oa_hash_map.h
+++ b/tests/core/templates/test_oa_hash_map.h
@@ -31,7 +31,7 @@
#ifndef TEST_OA_HASH_MAP_H
#define TEST_OA_HASH_MAP_H
-#include "core/os/main_loop.h"
+class MainLoop;
namespace TestOAHashMap {
diff --git a/tests/test_ordered_hash_map.h b/tests/core/templates/test_ordered_hash_map.h
index fbaaa224cf..35ce0fc656 100644
--- a/tests/test_ordered_hash_map.h
+++ b/tests/core/templates/test_ordered_hash_map.h
@@ -31,10 +31,7 @@
#ifndef TEST_ORDERED_HASH_MAP_H
#define TEST_ORDERED_HASH_MAP_H
-#include "core/os/os.h"
#include "core/templates/ordered_hash_map.h"
-#include "core/templates/pair.h"
-#include "core/templates/vector.h"
#include "tests/test_macros.h"
diff --git a/tests/test_paged_array.h b/tests/core/templates/test_paged_array.h
index 7efd3799f3..7efd3799f3 100644
--- a/tests/test_paged_array.h
+++ b/tests/core/templates/test_paged_array.h
diff --git a/tests/test_vector.h b/tests/core/templates/test_vector.h
index bfdf389aa7..658ca5adf1 100644
--- a/tests/test_vector.h
+++ b/tests/core/templates/test_vector.h
@@ -129,7 +129,7 @@ TEST_CASE("[Vector] Fill large array and modify it") {
CHECK(vector[200] == 0);
CHECK(vector[499'999] == 0x60d07);
CHECK(vector[999'999] == 0x60d07);
- vector.remove(200);
+ vector.remove_at(200);
CHECK(vector[200] == 0x60d07);
vector.clear();
@@ -145,7 +145,7 @@ TEST_CASE("[Vector] Copy creation") {
vector.push_back(4);
Vector<int> vector_other = Vector<int>(vector);
- vector_other.remove(0);
+ vector_other.remove_at(0);
CHECK(vector_other[0] == 1);
CHECK(vector_other[1] == 2);
CHECK(vector_other[2] == 3);
@@ -168,7 +168,7 @@ TEST_CASE("[Vector] Duplicate") {
vector.push_back(4);
Vector<int> vector_other = vector.duplicate();
- vector_other.remove(0);
+ vector_other.remove_at(0);
CHECK(vector_other[0] == 1);
CHECK(vector_other[1] == 2);
CHECK(vector_other[2] == 3);
@@ -302,7 +302,7 @@ TEST_CASE("[Vector] Find, has") {
CHECK(!vector.has(5));
}
-TEST_CASE("[Vector] Remove") {
+TEST_CASE("[Vector] Remove at") {
Vector<int> vector;
vector.push_back(0);
vector.push_back(1);
@@ -310,30 +310,30 @@ TEST_CASE("[Vector] Remove") {
vector.push_back(3);
vector.push_back(4);
- vector.remove(0);
+ vector.remove_at(0);
CHECK(vector[0] == 1);
CHECK(vector[1] == 2);
CHECK(vector[2] == 3);
CHECK(vector[3] == 4);
- vector.remove(2);
+ vector.remove_at(2);
CHECK(vector[0] == 1);
CHECK(vector[1] == 2);
CHECK(vector[2] == 4);
- vector.remove(1);
+ vector.remove_at(1);
CHECK(vector[0] == 1);
CHECK(vector[1] == 4);
- vector.remove(0);
+ vector.remove_at(0);
CHECK(vector[0] == 4);
}
-TEST_CASE("[Vector] Remove and find") {
+TEST_CASE("[Vector] Remove at and find") {
Vector<int> vector;
vector.push_back(0);
vector.push_back(1);
@@ -343,7 +343,7 @@ TEST_CASE("[Vector] Remove and find") {
CHECK(vector.size() == 5);
- vector.remove(0);
+ vector.remove_at(0);
CHECK(vector.size() == 4);
@@ -353,7 +353,7 @@ TEST_CASE("[Vector] Remove and find") {
CHECK(vector.find(3) != -1);
CHECK(vector.find(4) != -1);
- vector.remove(vector.find(3));
+ vector.remove_at(vector.find(3));
CHECK(vector.size() == 3);
@@ -362,7 +362,7 @@ TEST_CASE("[Vector] Remove and find") {
CHECK(vector.find(2) != -1);
CHECK(vector.find(4) != -1);
- vector.remove(vector.find(2));
+ vector.remove_at(vector.find(2));
CHECK(vector.size() == 2);
@@ -370,14 +370,14 @@ TEST_CASE("[Vector] Remove and find") {
CHECK(vector.find(1) != -1);
CHECK(vector.find(4) != -1);
- vector.remove(vector.find(4));
+ vector.remove_at(vector.find(4));
CHECK(vector.size() == 1);
CHECK(vector.find(4) == -1);
CHECK(vector.find(1) != -1);
- vector.remove(0);
+ vector.remove_at(0);
CHECK(vector.is_empty());
CHECK(vector.size() == 0);
@@ -412,9 +412,9 @@ TEST_CASE("[Vector] Size, resize, reserve") {
CHECK(vector.size() == 5);
- vector.remove(0);
- vector.remove(0);
- vector.remove(0);
+ vector.remove_at(0);
+ vector.remove_at(0);
+ vector.remove_at(0);
CHECK(vector.size() == 2);
diff --git a/tests/test_crypto.h b/tests/core/test_crypto.h
index 8da8c75544..3b909c7df8 100644
--- a/tests/test_crypto.h
+++ b/tests/core/test_crypto.h
@@ -33,7 +33,6 @@
#include "core/crypto/crypto.h"
#include "tests/test_macros.h"
-#include <stdio.h>
namespace TestCrypto {
diff --git a/tests/test_hashing_context.h b/tests/core/test_hashing_context.h
index 728a5f2cfa..728a5f2cfa 100644
--- a/tests/test_hashing_context.h
+++ b/tests/core/test_hashing_context.h
diff --git a/tests/test_time.h b/tests/core/test_time.h
index 28f1cb2f20..28f1cb2f20 100644
--- a/tests/test_time.h
+++ b/tests/core/test_time.h
diff --git a/tests/test_array.h b/tests/core/variant/test_array.h
index 3bd476fd27..e2e84f2962 100644
--- a/tests/test_array.h
+++ b/tests/core/variant/test_array.h
@@ -31,18 +31,31 @@
#ifndef TEST_ARRAY_H
#define TEST_ARRAY_H
-#include "core/object/class_db.h"
-#include "core/object/script_language.h"
-#include "core/templates/hashfuncs.h"
-#include "core/templates/vector.h"
#include "core/variant/array.h"
-#include "core/variant/container_type_validate.h"
-#include "core/variant/variant.h"
#include "tests/test_macros.h"
#include "tests/test_tools.h"
namespace TestArray {
+static inline Array build_array() {
+ return Array();
+}
+template <typename... Targs>
+static inline Array build_array(Variant item, Targs... Fargs) {
+ Array a = build_array(Fargs...);
+ a.push_front(item);
+ return a;
+}
+static inline Dictionary build_dictionary() {
+ return Dictionary();
+}
+template <typename... Targs>
+static inline Dictionary build_dictionary(Variant key, Variant item, Targs... Fargs) {
+ Dictionary d = build_dictionary(Fargs...);
+ d[key] = item;
+ return d;
+}
+
TEST_CASE("[Array] size(), clear(), and is_empty()") {
Array arr;
CHECK(arr.size() == 0);
@@ -116,20 +129,20 @@ TEST_CASE("[Array] has() and count()") {
CHECK(arr.count(2) == 0);
}
-TEST_CASE("[Array] remove()") {
+TEST_CASE("[Array] remove_at()") {
Array arr;
arr.push_back(1);
arr.push_back(2);
- arr.remove(0);
+ arr.remove_at(0);
CHECK(arr.size() == 1);
CHECK(int(arr[0]) == 2);
- arr.remove(0);
+ arr.remove_at(0);
CHECK(arr.size() == 0);
- // The array is now empty; try to use `remove()` again.
+ // The array is now empty; try to use `remove_at()` again.
// Normally, this prints an error message so we silence it.
ERR_PRINT_OFF;
- arr.remove(0);
+ arr.remove_at(0);
ERR_PRINT_ON;
CHECK(arr.size() == 0);
@@ -232,6 +245,221 @@ TEST_CASE("[Array] max() and min()") {
CHECK(max == 5);
CHECK(min == 2);
}
+
+TEST_CASE("[Array] Duplicate array") {
+ // a = [1, [2, 2], {3: 3}]
+ Array a = build_array(1, build_array(2, 2), build_dictionary(3, 3));
+
+ // Deep copy
+ Array deep_a = a.duplicate(true);
+ CHECK_MESSAGE(deep_a.id() != a.id(), "Should create a new array");
+ CHECK_MESSAGE(Array(deep_a[1]).id() != Array(a[1]).id(), "Should clone nested array");
+ CHECK_MESSAGE(Dictionary(deep_a[2]).id() != Dictionary(a[2]).id(), "Should clone nested dictionary");
+ CHECK_EQ(deep_a, a);
+ deep_a.push_back(1);
+ CHECK_NE(deep_a, a);
+ deep_a.pop_back();
+ Array(deep_a[1]).push_back(1);
+ CHECK_NE(deep_a, a);
+ Array(deep_a[1]).pop_back();
+ CHECK_EQ(deep_a, a);
+
+ // Shallow copy
+ Array shallow_a = a.duplicate(false);
+ CHECK_MESSAGE(shallow_a.id() != a.id(), "Should create a new array");
+ CHECK_MESSAGE(Array(shallow_a[1]).id() == Array(a[1]).id(), "Should keep nested array");
+ CHECK_MESSAGE(Dictionary(shallow_a[2]).id() == Dictionary(a[2]).id(), "Should keep nested dictionary");
+ CHECK_EQ(shallow_a, a);
+ Array(shallow_a).push_back(1);
+ CHECK_NE(shallow_a, a);
+}
+
+TEST_CASE("[Array] Duplicate recursive array") {
+ // Self recursive
+ Array a;
+ a.push_back(a);
+
+ Array a_shallow = a.duplicate(false);
+ CHECK_EQ(a, a_shallow);
+
+ // Deep copy of recursive array endup with recursion limit and return
+ // an invalid result (multiple nested arrays), the point is we should
+ // not end up with a segfault and an error log should be printed
+ ERR_PRINT_OFF;
+ a.duplicate(true);
+ ERR_PRINT_ON;
+
+ // Nested recursive
+ Array a1;
+ Array a2;
+ a2.push_back(a1);
+ a1.push_back(a2);
+
+ Array a1_shallow = a1.duplicate(false);
+ CHECK_EQ(a1, a1_shallow);
+
+ // Same deep copy issue as above
+ ERR_PRINT_OFF;
+ a1.duplicate(true);
+ ERR_PRINT_ON;
+
+ // Break the recursivity otherwise Array teardown will leak memory
+ a.clear();
+ a1.clear();
+ a2.clear();
+}
+
+TEST_CASE("[Array] Hash array") {
+ // a = [1, [2, 2], {3: 3}]
+ Array a = build_array(1, build_array(2, 2), build_dictionary(3, 3));
+ uint32_t original_hash = a.hash();
+
+ a.push_back(1);
+ CHECK_NE(a.hash(), original_hash);
+
+ a.pop_back();
+ CHECK_EQ(a.hash(), original_hash);
+
+ Array(a[1]).push_back(1);
+ CHECK_NE(a.hash(), original_hash);
+ Array(a[1]).pop_back();
+ CHECK_EQ(a.hash(), original_hash);
+
+ (Dictionary(a[2]))[1] = 1;
+ CHECK_NE(a.hash(), original_hash);
+ Dictionary(a[2]).erase(1);
+ CHECK_EQ(a.hash(), original_hash);
+
+ Array a2 = a.duplicate(true);
+ CHECK_EQ(a2.hash(), a.hash());
+}
+
+TEST_CASE("[Array] Hash recursive array") {
+ Array a1;
+ a1.push_back(a1);
+
+ Array a2;
+ a2.push_back(a2);
+
+ // Hash should reach recursion limit
+ ERR_PRINT_OFF;
+ CHECK_EQ(a1.hash(), a2.hash());
+ ERR_PRINT_ON;
+
+ // Break the recursivity otherwise Array teardown will leak memory
+ a1.clear();
+ a2.clear();
+}
+
+TEST_CASE("[Array] Empty comparison") {
+ Array a1;
+ Array a2;
+
+ // test both operator== and operator!=
+ CHECK_EQ(a1, a2);
+ CHECK_FALSE(a1 != a2);
+}
+
+TEST_CASE("[Array] Flat comparison") {
+ Array a1 = build_array(1);
+ Array a2 = build_array(1);
+ Array other_a = build_array(2);
+
+ // test both operator== and operator!=
+ CHECK_EQ(a1, a1); // compare self
+ CHECK_FALSE(a1 != a1);
+ CHECK_EQ(a1, a2); // different equivalent arrays
+ CHECK_FALSE(a1 != a2);
+ CHECK_NE(a1, other_a); // different arrays with different content
+ CHECK_FALSE(a1 == other_a);
+}
+
+TEST_CASE("[Array] Nested array comparison") {
+ // a1 = [[[1], 2], 3]
+ Array a1 = build_array(build_array(build_array(1), 2), 3);
+
+ Array a2 = a1.duplicate(true);
+
+ // other_a = [[[1, 0], 2], 3]
+ Array other_a = build_array(build_array(build_array(1, 0), 2), 3);
+
+ // test both operator== and operator!=
+ CHECK_EQ(a1, a1); // compare self
+ CHECK_FALSE(a1 != a1);
+ CHECK_EQ(a1, a2); // different equivalent arrays
+ CHECK_FALSE(a1 != a2);
+ CHECK_NE(a1, other_a); // different arrays with different content
+ CHECK_FALSE(a1 == other_a);
+}
+
+TEST_CASE("[Array] Nested dictionary comparison") {
+ // a1 = [{1: 2}, 3]
+ Array a1 = build_array(build_dictionary(1, 2), 3);
+
+ Array a2 = a1.duplicate(true);
+
+ // other_a = [{1: 0}, 3]
+ Array other_a = build_array(build_dictionary(1, 0), 3);
+
+ // test both operator== and operator!=
+ CHECK_EQ(a1, a1); // compare self
+ CHECK_FALSE(a1 != a1);
+ CHECK_EQ(a1, a2); // different equivalent arrays
+ CHECK_FALSE(a1 != a2);
+ CHECK_NE(a1, other_a); // different arrays with different content
+ CHECK_FALSE(a1 == other_a);
+}
+
+TEST_CASE("[Array] Recursive comparison") {
+ Array a1;
+ a1.push_back(a1);
+
+ Array a2;
+ a2.push_back(a2);
+
+ // Comparison should reach recursion limit
+ ERR_PRINT_OFF;
+ CHECK_EQ(a1, a2);
+ CHECK_FALSE(a1 != a2);
+ ERR_PRINT_ON;
+
+ a1.push_back(1);
+ a2.push_back(1);
+
+ // Comparison should reach recursion limit
+ ERR_PRINT_OFF;
+ CHECK_EQ(a1, a2);
+ CHECK_FALSE(a1 != a2);
+ ERR_PRINT_ON;
+
+ a1.push_back(1);
+ a2.push_back(2);
+
+ // Comparison should reach recursion limit
+ ERR_PRINT_OFF;
+ CHECK_NE(a1, a2);
+ CHECK_FALSE(a1 == a2);
+ ERR_PRINT_ON;
+
+ // Break the recursivity otherwise Array tearndown will leak memory
+ a1.clear();
+ a2.clear();
+}
+
+TEST_CASE("[Array] Recursive self comparison") {
+ Array a1;
+ Array a2;
+ a2.push_back(a1);
+ a1.push_back(a2);
+
+ CHECK_EQ(a1, a1);
+ CHECK_FALSE(a1 != a1);
+
+ // Break the recursivity otherwise Array tearndown will leak memory
+ a1.clear();
+ a2.clear();
+}
+
} // namespace TestArray
#endif // TEST_ARRAY_H
diff --git a/tests/core/variant/test_dictionary.h b/tests/core/variant/test_dictionary.h
new file mode 100644
index 0000000000..65079698a3
--- /dev/null
+++ b/tests/core/variant/test_dictionary.h
@@ -0,0 +1,505 @@
+/*************************************************************************/
+/* test_dictionary.h */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+
+#ifndef TEST_DICTIONARY_H
+#define TEST_DICTIONARY_H
+
+#include "core/variant/dictionary.h"
+#include "tests/test_macros.h"
+
+namespace TestDictionary {
+
+static inline Array build_array() {
+ return Array();
+}
+template <typename... Targs>
+static inline Array build_array(Variant item, Targs... Fargs) {
+ Array a = build_array(Fargs...);
+ a.push_front(item);
+ return a;
+}
+static inline Dictionary build_dictionary() {
+ return Dictionary();
+}
+template <typename... Targs>
+static inline Dictionary build_dictionary(Variant key, Variant item, Targs... Fargs) {
+ Dictionary d = build_dictionary(Fargs...);
+ d[key] = item;
+ return d;
+}
+
+TEST_CASE("[Dictionary] Assignment using bracket notation ([])") {
+ Dictionary map;
+ map["Hello"] = 0;
+ CHECK(int(map["Hello"]) == 0);
+ map["Hello"] = 3;
+ CHECK(int(map["Hello"]) == 3);
+ map["World!"] = 4;
+ CHECK(int(map["World!"]) == 4);
+
+ // Test non-string keys, since keys can be of any Variant type.
+ map[12345] = -5;
+ CHECK(int(map[12345]) == -5);
+ map[false] = 128;
+ CHECK(int(map[false]) == 128);
+ map[Vector2(10, 20)] = 30;
+ CHECK(int(map[Vector2(10, 20)]) == 30);
+ map[0] = 400;
+ CHECK(int(map[0]) == 400);
+ // Check that assigning 0 doesn't overwrite the value for `false`.
+ CHECK(int(map[false]) == 128);
+}
+
+TEST_CASE("[Dictionary] get_key_lists()") {
+ Dictionary map;
+ List<Variant> keys;
+ List<Variant> *ptr = &keys;
+ map.get_key_list(ptr);
+ CHECK(keys.is_empty());
+ map[1] = 3;
+ map.get_key_list(ptr);
+ CHECK(keys.size() == 1);
+ CHECK(int(keys[0]) == 1);
+ map[2] = 4;
+ map.get_key_list(ptr);
+ CHECK(keys.size() == 3);
+}
+
+TEST_CASE("[Dictionary] get_key_at_index()") {
+ Dictionary map;
+ map[4] = 3;
+ Variant val = map.get_key_at_index(0);
+ CHECK(int(val) == 4);
+ map[3] = 1;
+ val = map.get_key_at_index(0);
+ CHECK(int(val) == 4);
+ val = map.get_key_at_index(1);
+ CHECK(int(val) == 3);
+}
+
+TEST_CASE("[Dictionary] getptr()") {
+ Dictionary map;
+ map[1] = 3;
+ Variant *key = map.getptr(1);
+ CHECK(int(*key) == 3);
+ key = map.getptr(2);
+ CHECK(key == nullptr);
+}
+
+TEST_CASE("[Dictionary] get_valid()") {
+ Dictionary map;
+ map[1] = 3;
+ Variant val = map.get_valid(1);
+ CHECK(int(val) == 3);
+}
+TEST_CASE("[Dictionary] get()") {
+ Dictionary map;
+ map[1] = 3;
+ Variant val = map.get(1, -1);
+ CHECK(int(val) == 3);
+}
+
+TEST_CASE("[Dictionary] size(), empty() and clear()") {
+ Dictionary map;
+ CHECK(map.size() == 0);
+ CHECK(map.is_empty());
+ map[1] = 3;
+ CHECK(map.size() == 1);
+ CHECK(!map.is_empty());
+ map.clear();
+ CHECK(map.size() == 0);
+ CHECK(map.is_empty());
+}
+
+TEST_CASE("[Dictionary] has() and has_all()") {
+ Dictionary map;
+ CHECK(map.has(1) == false);
+ map[1] = 3;
+ CHECK(map.has(1));
+ Array keys;
+ keys.push_back(1);
+ CHECK(map.has_all(keys));
+ keys.push_back(2);
+ CHECK(map.has_all(keys) == false);
+}
+
+TEST_CASE("[Dictionary] keys() and values()") {
+ Dictionary map;
+ Array keys = map.keys();
+ Array values = map.values();
+ CHECK(keys.is_empty());
+ CHECK(values.is_empty());
+ map[1] = 3;
+ keys = map.keys();
+ values = map.values();
+ CHECK(int(keys[0]) == 1);
+ CHECK(int(values[0]) == 3);
+}
+
+TEST_CASE("[Dictionary] Duplicate dictionary") {
+ // d = {1: {1: 1}, {2: 2}: [2], [3]: 3}
+ Dictionary k2 = build_dictionary(2, 2);
+ Array k3 = build_array(3);
+ Dictionary d = build_dictionary(1, build_dictionary(1, 1), k2, build_array(2), k3, 3);
+
+ // Deep copy
+ Dictionary deep_d = d.duplicate(true);
+ CHECK_MESSAGE(deep_d.id() != d.id(), "Should create a new dictionary");
+ CHECK_MESSAGE(Dictionary(deep_d[1]).id() != Dictionary(d[1]).id(), "Should clone nested dictionary");
+ CHECK_MESSAGE(Array(deep_d[k2]).id() != Array(d[k2]).id(), "Should clone nested array");
+ CHECK_EQ(deep_d, d);
+ deep_d[0] = 0;
+ CHECK_NE(deep_d, d);
+ deep_d.erase(0);
+ Dictionary(deep_d[1]).operator[](0) = 0;
+ CHECK_NE(deep_d, d);
+ Dictionary(deep_d[1]).erase(0);
+ CHECK_EQ(deep_d, d);
+ // Keys should also be copied
+ k2[0] = 0;
+ CHECK_NE(deep_d, d);
+ k2.erase(0);
+ CHECK_EQ(deep_d, d);
+ k3.push_back(0);
+ CHECK_NE(deep_d, d);
+ k3.pop_back();
+ CHECK_EQ(deep_d, d);
+
+ // Shallow copy
+ Dictionary shallow_d = d.duplicate(false);
+ CHECK_MESSAGE(shallow_d.id() != d.id(), "Should create a new array");
+ CHECK_MESSAGE(Dictionary(shallow_d[1]).id() == Dictionary(d[1]).id(), "Should keep nested dictionary");
+ CHECK_MESSAGE(Array(shallow_d[2]).id() == Array(d[2]).id(), "Should keep nested array");
+ CHECK_EQ(shallow_d, d);
+ shallow_d[0] = 0;
+ CHECK_NE(shallow_d, d);
+ shallow_d.erase(0);
+#if 0 // TODO: recursion in dict key currently is buggy
+ // Keys should also be shallowed
+ k2[0] = 0;
+ CHECK_EQ(shallow_d, d);
+ k2.erase(0);
+ k3.push_back(0);
+ CHECK_EQ(shallow_d, d);
+#endif
+}
+
+TEST_CASE("[Dictionary] Duplicate recursive dictionary") {
+ // Self recursive
+ Dictionary d;
+ d[1] = d;
+
+ Dictionary d_shallow = d.duplicate(false);
+ CHECK_EQ(d, d_shallow);
+
+ // Deep copy of recursive dictionary endup with recursion limit and return
+ // an invalid result (multiple nested dictionaries), the point is we should
+ // not end up with a segfault and an error log should be printed
+ ERR_PRINT_OFF;
+ d.duplicate(true);
+ ERR_PRINT_ON;
+
+ // Nested recursive
+ Dictionary d1;
+ Dictionary d2;
+ d1[2] = d2;
+ d2[1] = d1;
+
+ Dictionary d1_shallow = d1.duplicate(false);
+ CHECK_EQ(d1, d1_shallow);
+
+ // Same deep copy issue as above
+ ERR_PRINT_OFF;
+ d1.duplicate(true);
+ ERR_PRINT_ON;
+
+ // Break the recursivity otherwise Dictionary teardown will leak memory
+ d.clear();
+ d1.clear();
+ d2.clear();
+}
+
+#if 0 // TODO: duplicate recursion in dict key is currently buggy
+TEST_CASE("[Dictionary] Duplicate recursive dictionary on keys") {
+ // Self recursive
+ Dictionary d;
+ d[d] = d;
+
+ Dictionary d_shallow = d.duplicate(false);
+ CHECK_EQ(d, d_shallow);
+
+ // Deep copy of recursive dictionary endup with recursion limit and return
+ // an invalid result (multiple nested dictionaries), the point is we should
+ // not end up with a segfault and an error log should be printed
+ ERR_PRINT_OFF;
+ d.duplicate(true);
+ ERR_PRINT_ON;
+
+ // Nested recursive
+ Dictionary d1;
+ Dictionary d2;
+ d1[d2] = d2;
+ d2[d1] = d1;
+
+ Dictionary d1_shallow = d1.duplicate(false);
+ CHECK_EQ(d1, d1_shallow);
+
+ // Same deep copy issue as above
+ ERR_PRINT_OFF;
+ d1.duplicate(true);
+ ERR_PRINT_ON;
+
+ // Break the recursivity otherwise Dictionary teardown will leak memory
+ d.clear();
+ d1.clear();
+ d2.clear();
+}
+#endif
+
+TEST_CASE("[Dictionary] Hash dictionary") {
+ // d = {1: {1: 1}, {2: 2}: [2], [3]: 3}
+ Dictionary k2 = build_dictionary(2, 2);
+ Array k3 = build_array(3);
+ Dictionary d = build_dictionary(1, build_dictionary(1, 1), k2, build_array(2), k3, 3);
+ uint32_t original_hash = d.hash();
+
+ // Modify dict change the hash
+ d[0] = 0;
+ CHECK_NE(d.hash(), original_hash);
+ d.erase(0);
+ CHECK_EQ(d.hash(), original_hash);
+
+ // Modify nested item change the hash
+ Dictionary(d[1]).operator[](0) = 0;
+ CHECK_NE(d.hash(), original_hash);
+ Dictionary(d[1]).erase(0);
+ Array(d[k2]).push_back(0);
+ CHECK_NE(d.hash(), original_hash);
+ Array(d[k2]).pop_back();
+
+ // Modify a key change the hash
+ k2[0] = 0;
+ CHECK_NE(d.hash(), original_hash);
+ k2.erase(0);
+ CHECK_EQ(d.hash(), original_hash);
+ k3.push_back(0);
+ CHECK_NE(d.hash(), original_hash);
+ k3.pop_back();
+ CHECK_EQ(d.hash(), original_hash);
+
+ // Duplication doesn't change the hash
+ Dictionary d2 = d.duplicate(true);
+ CHECK_EQ(d2.hash(), original_hash);
+}
+
+TEST_CASE("[Dictionary] Hash recursive dictionary") {
+ Dictionary d;
+ d[1] = d;
+
+ // Hash should reach recursion limit, we just make sure this doesn't blow up
+ ERR_PRINT_OFF;
+ d.hash();
+ ERR_PRINT_ON;
+
+ // Break the recursivity otherwise Dictionary teardown will leak memory
+ d.clear();
+}
+
+#if 0 // TODO: recursion in dict key is currently buggy
+TEST_CASE("[Dictionary] Hash recursive dictionary on keys") {
+ Dictionary d;
+ d[d] = 1;
+
+ // Hash should reach recursion limit, we just make sure this doesn't blow up
+ ERR_PRINT_OFF;
+ d.hash();
+ ERR_PRINT_ON;
+
+ // Break the recursivity otherwise Dictionary teardown will leak memory
+ d.clear();
+}
+#endif
+
+TEST_CASE("[Dictionary] Empty comparison") {
+ Dictionary d1;
+ Dictionary d2;
+
+ // test both operator== and operator!=
+ CHECK_EQ(d1, d2);
+ CHECK_FALSE(d1 != d2);
+}
+
+TEST_CASE("[Dictionary] Flat comparison") {
+ Dictionary d1 = build_dictionary(1, 1);
+ Dictionary d2 = build_dictionary(1, 1);
+ Dictionary other_d = build_dictionary(2, 1);
+
+ // test both operator== and operator!=
+ CHECK_EQ(d1, d1); // compare self
+ CHECK_FALSE(d1 != d1);
+ CHECK_EQ(d1, d2); // different equivalent arrays
+ CHECK_FALSE(d1 != d2);
+ CHECK_NE(d1, other_d); // different arrays with different content
+ CHECK_FALSE(d1 == other_d);
+}
+
+TEST_CASE("[Dictionary] Nested dictionary comparison") {
+ // d1 = {1: {2: {3: 4}}}
+ Dictionary d1 = build_dictionary(1, build_dictionary(2, build_dictionary(3, 4)));
+
+ Dictionary d2 = d1.duplicate(true);
+
+ // other_d = {1: {2: {3: 0}}}
+ Dictionary other_d = build_dictionary(1, build_dictionary(2, build_dictionary(3, 0)));
+
+ // test both operator== and operator!=
+ CHECK_EQ(d1, d1); // compare self
+ CHECK_FALSE(d1 != d1);
+ CHECK_EQ(d1, d2); // different equivalent arrays
+ CHECK_FALSE(d1 != d2);
+ CHECK_NE(d1, other_d); // different arrays with different content
+ CHECK_FALSE(d1 == other_d);
+}
+
+TEST_CASE("[Dictionary] Nested array comparison") {
+ // d1 = {1: [2, 3]}
+ Dictionary d1 = build_dictionary(1, build_array(2, 3));
+
+ Dictionary d2 = d1.duplicate(true);
+
+ // other_d = {1: [2, 0]}
+ Dictionary other_d = build_dictionary(1, build_array(2, 0));
+
+ // test both operator== and operator!=
+ CHECK_EQ(d1, d1); // compare self
+ CHECK_FALSE(d1 != d1);
+ CHECK_EQ(d1, d2); // different equivalent arrays
+ CHECK_FALSE(d1 != d2);
+ CHECK_NE(d1, other_d); // different arrays with different content
+ CHECK_FALSE(d1 == other_d);
+}
+
+TEST_CASE("[Dictionary] Recursive comparison") {
+ Dictionary d1;
+ d1[1] = d1;
+
+ Dictionary d2;
+ d2[1] = d2;
+
+ // Comparison should reach recursion limit
+ ERR_PRINT_OFF;
+ CHECK_EQ(d1, d2);
+ CHECK_FALSE(d1 != d2);
+ ERR_PRINT_ON;
+
+ d1[2] = 2;
+ d2[2] = 2;
+
+ // Comparison should reach recursion limit
+ ERR_PRINT_OFF;
+ CHECK_EQ(d1, d2);
+ CHECK_FALSE(d1 != d2);
+ ERR_PRINT_ON;
+
+ d1[3] = 3;
+ d2[3] = 0;
+
+ // Comparison should reach recursion limit
+ ERR_PRINT_OFF;
+ CHECK_NE(d1, d2);
+ CHECK_FALSE(d1 == d2);
+ ERR_PRINT_ON;
+
+ // Break the recursivity otherwise Dictionary teardown will leak memory
+ d1.clear();
+ d2.clear();
+}
+
+#if 0 // TODO: recursion in dict key is currently buggy
+TEST_CASE("[Dictionary] Recursive comparison on keys") {
+ Dictionary d1;
+ // Hash computation should reach recursion limit
+ ERR_PRINT_OFF;
+ d1[d1] = 1;
+ ERR_PRINT_ON;
+
+ Dictionary d2;
+ // Hash computation should reach recursion limit
+ ERR_PRINT_OFF;
+ d2[d2] = 1;
+ ERR_PRINT_ON;
+
+ // Comparison should reach recursion limit
+ ERR_PRINT_OFF;
+ CHECK_EQ(d1, d2);
+ CHECK_FALSE(d1 != d2);
+ ERR_PRINT_ON;
+
+ d1[2] = 2;
+ d2[2] = 2;
+
+ // Comparison should reach recursion limit
+ ERR_PRINT_OFF;
+ CHECK_EQ(d1, d2);
+ CHECK_FALSE(d1 != d2);
+ ERR_PRINT_ON;
+
+ d1[3] = 3;
+ d2[3] = 0;
+
+ // Comparison should reach recursion limit
+ ERR_PRINT_OFF;
+ CHECK_NE(d1, d2);
+ CHECK_FALSE(d1 == d2);
+ ERR_PRINT_ON;
+
+ // Break the recursivity otherwise Dictionary teardown will leak memory
+ d1.clear();
+ d2.clear();
+}
+#endif
+
+TEST_CASE("[Dictionary] Recursive self comparison") {
+ Dictionary d1;
+ Dictionary d2;
+ d1[1] = d2;
+ d2[1] = d1;
+
+ CHECK_EQ(d1, d1);
+ CHECK_FALSE(d1 != d1);
+
+ // Break the recursivity otherwise Dictionary teardown will leak memory
+ d1.clear();
+ d2.clear();
+}
+
+} // namespace TestDictionary
+
+#endif // TEST_DICTIONARY_H
diff --git a/tests/test_variant.h b/tests/core/variant/test_variant.h
index 598fe488d7..0d16fa092c 100644
--- a/tests/test_variant.h
+++ b/tests/core/variant/test_variant.h
@@ -38,6 +38,25 @@
namespace TestVariant {
+static inline Array build_array() {
+ return Array();
+}
+template <typename... Targs>
+static inline Array build_array(Variant item, Targs... Fargs) {
+ Array a = build_array(Fargs...);
+ a.push_front(item);
+ return a;
+}
+static inline Dictionary build_dictionary() {
+ return Dictionary();
+}
+template <typename... Targs>
+static inline Dictionary build_dictionary(Variant key, Variant item, Targs... Fargs) {
+ Dictionary d = build_dictionary(Fargs...);
+ d[key] = item;
+ return d;
+}
+
TEST_CASE("[Variant] Writer and parser integer") {
int64_t a32 = 2147483648; // 2^31, so out of bounds for 32-bit signed int [-2^31, +2^31-1].
String a32_str;
@@ -700,6 +719,198 @@ TEST_CASE("[Variant] Assignment To Color from Bool,Int,Float,String,Vec2,Vec2i,V
vec3i_v = col_v;
CHECK(vec3i_v.get_type() == Variant::COLOR);
}
+TEST_CASE("[Variant] Writer and parser array") {
+ Array a = build_array(1, String("hello"), build_array(Variant()));
+ String a_str;
+ VariantWriter::write_to_string(a, a_str);
+
+ CHECK_EQ(a_str, "[1, \"hello\", [null]]");
+
+ VariantParser::StreamString ss;
+ String errs;
+ int line;
+ Variant a_parsed;
+
+ ss.s = a_str;
+ VariantParser::parse(&ss, a_parsed, errs, line);
+
+ CHECK_MESSAGE(a_parsed == Variant(a), "Should parse back.");
+}
+
+TEST_CASE("[Variant] Writer recursive array") {
+ // There is no way to accurately represent a recursive array,
+ // the only thing we can do is make sure the writer doesn't blow up
+
+ // Self recursive
+ Array a;
+ a.push_back(a);
+
+ // Writer should it recursion limit while visiting the array
+ ERR_PRINT_OFF;
+ String a_str;
+ VariantWriter::write_to_string(a, a_str);
+ ERR_PRINT_ON;
+
+ // Nested recursive
+ Array a1;
+ Array a2;
+ a1.push_back(a2);
+ a2.push_back(a1);
+
+ // Writer should it recursion limit while visiting the array
+ ERR_PRINT_OFF;
+ String a1_str;
+ VariantWriter::write_to_string(a1, a1_str);
+ ERR_PRINT_ON;
+
+ // Break the recursivity otherwise Dictionary tearndown will leak memory
+ a.clear();
+ a1.clear();
+ a2.clear();
+}
+
+TEST_CASE("[Variant] Writer and parser dictionary") {
+ // d = {{1: 2}: 3, 4: "hello", 5: {null: []}}
+ Dictionary d = build_dictionary(build_dictionary(1, 2), 3, 4, String("hello"), 5, build_dictionary(Variant(), build_array()));
+ String d_str;
+ VariantWriter::write_to_string(d, d_str);
+
+ CHECK_EQ(d_str, "{\n4: \"hello\",\n5: {\nnull: []\n},\n{\n1: 2\n}: 3\n}");
+
+ VariantParser::StreamString ss;
+ String errs;
+ int line;
+ Variant d_parsed;
+
+ ss.s = d_str;
+ VariantParser::parse(&ss, d_parsed, errs, line);
+
+ CHECK_MESSAGE(d_parsed == Variant(d), "Should parse back.");
+}
+
+TEST_CASE("[Variant] Writer recursive dictionary") {
+ // There is no way to accurately represent a recursive dictionary,
+ // the only thing we can do is make sure the writer doesn't blow up
+
+ // Self recursive
+ Dictionary d;
+ d[1] = d;
+
+ // Writer should it recursion limit while visiting the dictionary
+ ERR_PRINT_OFF;
+ String d_str;
+ VariantWriter::write_to_string(d, d_str);
+ ERR_PRINT_ON;
+
+ // Nested recursive
+ Dictionary d1;
+ Dictionary d2;
+ d1[2] = d2;
+ d2[1] = d1;
+
+ // Writer should it recursion limit while visiting the dictionary
+ ERR_PRINT_OFF;
+ String d1_str;
+ VariantWriter::write_to_string(d1, d1_str);
+ ERR_PRINT_ON;
+
+ // Break the recursivity otherwise Dictionary tearndown will leak memory
+ d.clear();
+ d1.clear();
+ d2.clear();
+}
+
+#if 0 // TODO: recursion in dict key is currently buggy
+TEST_CASE("[Variant] Writer recursive dictionary on keys") {
+ // There is no way to accurately represent a recursive dictionary,
+ // the only thing we can do is make sure the writer doesn't blow up
+
+ // Self recursive
+ Dictionary d;
+ d[d] = 1;
+
+ // Writer should it recursion limit while visiting the dictionary
+ ERR_PRINT_OFF;
+ String d_str;
+ VariantWriter::write_to_string(d, d_str);
+ ERR_PRINT_ON;
+
+ // Nested recursive
+ Dictionary d1;
+ Dictionary d2;
+ d1[d2] = 2;
+ d2[d1] = 1;
+
+ // Writer should it recursion limit while visiting the dictionary
+ ERR_PRINT_OFF;
+ String d1_str;
+ VariantWriter::write_to_string(d1, d1_str);
+ ERR_PRINT_ON;
+
+ // Break the recursivity otherwise Dictionary tearndown will leak memory
+ d.clear();
+ d1.clear();
+ d2.clear();
+}
+#endif
+
+TEST_CASE("[Variant] Basic comparison") {
+ CHECK_EQ(Variant(1), Variant(1));
+ CHECK_FALSE(Variant(1) != Variant(1));
+ CHECK_NE(Variant(1), Variant(2));
+ CHECK_EQ(Variant(String("foo")), Variant(String("foo")));
+ CHECK_NE(Variant(String("foo")), Variant(String("bar")));
+ // Check "empty" version of different types are not equivalents
+ CHECK_NE(Variant(0), Variant());
+ CHECK_NE(Variant(String()), Variant());
+ CHECK_NE(Variant(Array()), Variant());
+ CHECK_NE(Variant(Dictionary()), Variant());
+}
+
+TEST_CASE("[Variant] Nested array comparison") {
+ Array a1 = build_array(1, build_array(2, 3));
+ Array a2 = build_array(1, build_array(2, 3));
+ Array a_other = build_array(1, build_array(2, 4));
+ Variant v_a1 = a1;
+ Variant v_a1_ref2 = a1;
+ Variant v_a2 = a2;
+ Variant v_a_other = a_other;
+
+ // test both operator== and operator!=
+ CHECK_EQ(v_a1, v_a1);
+ CHECK_FALSE(v_a1 != v_a1);
+ CHECK_EQ(v_a1, v_a1_ref2);
+ CHECK_FALSE(v_a1 != v_a1_ref2);
+ CHECK_EQ(v_a1, v_a2);
+ CHECK_FALSE(v_a1 != v_a2);
+ CHECK_NE(v_a1, v_a_other);
+ CHECK_FALSE(v_a1 == v_a_other);
+}
+
+TEST_CASE("[Variant] Nested dictionary comparison") {
+ Dictionary d1 = build_dictionary(build_dictionary(1, 2), build_dictionary(3, 4));
+ Dictionary d2 = build_dictionary(build_dictionary(1, 2), build_dictionary(3, 4));
+ Dictionary d_other_key = build_dictionary(build_dictionary(1, 0), build_dictionary(3, 4));
+ Dictionary d_other_val = build_dictionary(build_dictionary(1, 2), build_dictionary(3, 0));
+ Variant v_d1 = d1;
+ Variant v_d1_ref2 = d1;
+ Variant v_d2 = d2;
+ Variant v_d_other_key = d_other_key;
+ Variant v_d_other_val = d_other_val;
+
+ // test both operator== and operator!=
+ CHECK_EQ(v_d1, v_d1);
+ CHECK_FALSE(v_d1 != v_d1);
+ CHECK_EQ(v_d1, v_d1_ref2);
+ CHECK_FALSE(v_d1 != v_d1_ref2);
+ CHECK_EQ(v_d1, v_d2);
+ CHECK_FALSE(v_d1 != v_d2);
+ CHECK_NE(v_d1, v_d_other_key);
+ CHECK_FALSE(v_d1 == v_d_other_key);
+ CHECK_NE(v_d1, v_d_other_val);
+ CHECK_FALSE(v_d1 == v_d_other_val);
+}
+
} // namespace TestVariant
#endif // TEST_VARIANT_H
diff --git a/tests/test_code_edit.h b/tests/scene/test_code_edit.h
index 62235ed0ae..0467d4417b 100644
--- a/tests/test_code_edit.h
+++ b/tests/scene/test_code_edit.h
@@ -31,12 +31,7 @@
#ifndef TEST_CODE_EDIT_H
#define TEST_CODE_EDIT_H
-#include "core/input/input_map.h"
-#include "core/object/message_queue.h"
-#include "core/os/keyboard.h"
-#include "core/string/string_builder.h"
#include "scene/gui/code_edit.h"
-#include "scene/resources/default_theme/default_theme.h"
#include "tests/test_macros.h"
@@ -2337,6 +2332,20 @@ TEST_CASE("[SceneTree][CodeEdit] folding") {
CHECK_FALSE(code_edit->is_line_folded(2));
CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 2);
+ // Indent with blank lines.
+ code_edit->set_text("line1\n\tline2\n\n\nline3");
+ CHECK(code_edit->can_fold_line(0));
+ for (int i = 1; i < 2; i++) {
+ CHECK_FALSE(code_edit->can_fold_line(i));
+ code_edit->fold_line(i);
+ CHECK_FALSE(code_edit->is_line_folded(i));
+ }
+ code_edit->fold_line(0);
+ CHECK(code_edit->is_line_folded(0));
+ CHECK_FALSE(code_edit->is_line_folded(1));
+ CHECK_FALSE(code_edit->is_line_folded(2));
+ CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 2);
+
// Nested indents.
code_edit->set_text("line1\n\tline2\n\t\tline3\nline4");
CHECK(code_edit->can_fold_line(0));
@@ -2413,7 +2422,7 @@ TEST_CASE("[SceneTree][CodeEdit] folding") {
for (int i = 1; i < code_edit->get_line_count(); i++) {
CHECK_FALSE(code_edit->is_line_folded(i));
}
- CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 6);
+ CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 5);
// End of file.
code_edit->set_text("line1\n\tline2");
@@ -2495,7 +2504,7 @@ TEST_CASE("[SceneTree][CodeEdit] folding") {
// Multiline blocks.
code_edit->add_comment_delimiter("&", "&", false);
- code_edit->set_text("&line1\n\tline2&");
+ code_edit->set_text("&line1\n\tline2&\nline3");
CHECK(code_edit->can_fold_line(0));
CHECK_FALSE(code_edit->can_fold_line(1));
code_edit->fold_line(1);
@@ -2503,7 +2512,17 @@ TEST_CASE("[SceneTree][CodeEdit] folding") {
code_edit->fold_line(0);
CHECK(code_edit->is_line_folded(0));
CHECK_FALSE(code_edit->is_line_folded(1));
- CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 1);
+ CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 2);
+
+ // Multiline comment before last line.
+ code_edit->set_text("&line1\nline2&\ntest");
+ CHECK(code_edit->can_fold_line(0));
+ CHECK_FALSE(code_edit->can_fold_line(2));
+ code_edit->fold_line(1);
+ CHECK_FALSE(code_edit->is_line_folded(1));
+ code_edit->fold_line(0);
+ CHECK(code_edit->is_line_folded(0));
+ CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 2);
// Has to be full line.
code_edit->set_text("test &line1\n\tline2&");
@@ -2559,7 +2578,7 @@ TEST_CASE("[SceneTree][CodeEdit] folding") {
CHECK_FALSE(code_edit->is_line_folded(1));
CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 1);
- // Non-indented comments/ strings.
+ // Non-indented comments/strings.
// Single line
code_edit->set_text("test\n\tline1\n#line1\n#line2\n\ttest");
CHECK(code_edit->can_fold_line(0));
@@ -2581,6 +2600,50 @@ TEST_CASE("[SceneTree][CodeEdit] folding") {
CHECK_FALSE(code_edit->is_line_folded(1));
CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 4);
+ // Indent level 0->1, comment after lines
+ code_edit->set_text("line1\n\tline2\n#test");
+ CHECK(code_edit->can_fold_line(0));
+ CHECK_FALSE(code_edit->can_fold_line(1));
+ code_edit->fold_line(1);
+ CHECK_FALSE(code_edit->is_line_folded(1));
+ code_edit->fold_line(0);
+ CHECK(code_edit->is_line_folded(0));
+ CHECK_FALSE(code_edit->is_line_folded(1));
+ CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 2);
+
+ // Indent level 0->1, comment between lines
+ code_edit->set_text("line1\n#test\n\tline2\nline3");
+ CHECK(code_edit->can_fold_line(0));
+ CHECK_FALSE(code_edit->can_fold_line(2));
+ code_edit->fold_line(2);
+ CHECK_FALSE(code_edit->is_line_folded(2));
+ code_edit->fold_line(0);
+ CHECK(code_edit->is_line_folded(0));
+ CHECK_FALSE(code_edit->is_line_folded(2));
+ CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 3);
+
+ // Indent level 1->2, comment after lines
+ code_edit->set_text("\tline1\n\t\tline2\n#test");
+ CHECK(code_edit->can_fold_line(0));
+ CHECK_FALSE(code_edit->can_fold_line(1));
+ code_edit->fold_line(1);
+ CHECK_FALSE(code_edit->is_line_folded(1));
+ code_edit->fold_line(0);
+ CHECK(code_edit->is_line_folded(0));
+ CHECK_FALSE(code_edit->is_line_folded(1));
+ CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 2);
+
+ // Indent level 1->2, comment between lines
+ code_edit->set_text("\tline1\n#test\n\t\tline2\nline3");
+ CHECK(code_edit->can_fold_line(0));
+ CHECK_FALSE(code_edit->can_fold_line(2));
+ code_edit->fold_line(2);
+ CHECK_FALSE(code_edit->is_line_folded(2));
+ code_edit->fold_line(0);
+ CHECK(code_edit->is_line_folded(0));
+ CHECK_FALSE(code_edit->is_line_folded(2));
+ CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 3);
+
// Multiline
code_edit->set_text("test\n\tline1\n&line1\nline2&\n\ttest");
CHECK(code_edit->can_fold_line(0));
@@ -2678,18 +2741,18 @@ TEST_CASE("[SceneTree][CodeEdit] completion") {
/* Check typing inserts closing pair. */
code_edit->clear();
- SEND_GUI_KEY_EVENT(code_edit, KEY_BRACKETLEFT);
+ SEND_GUI_KEY_EVENT(code_edit, Key::BRACKETLEFT);
CHECK(code_edit->get_line(0) == "[]");
/* Should first match and insert smaller key. */
code_edit->clear();
- SEND_GUI_KEY_EVENT(code_edit, KEY_APOSTROPHE);
+ SEND_GUI_KEY_EVENT(code_edit, Key::APOSTROPHE);
CHECK(code_edit->get_line(0) == "''");
CHECK(code_edit->get_caret_column() == 1);
/* Move out from centre, Should match and insert larger key. */
SEND_GUI_ACTION(code_edit, "ui_text_caret_right");
- SEND_GUI_KEY_EVENT(code_edit, KEY_APOSTROPHE);
+ SEND_GUI_KEY_EVENT(code_edit, Key::APOSTROPHE);
CHECK(code_edit->get_line(0) == "''''''");
CHECK(code_edit->get_caret_column() == 3);
@@ -2698,30 +2761,30 @@ TEST_CASE("[SceneTree][CodeEdit] completion") {
CHECK(code_edit->get_line(0).is_empty());
/* If in between and typing close key should "skip". */
- SEND_GUI_KEY_EVENT(code_edit, KEY_BRACKETLEFT);
+ SEND_GUI_KEY_EVENT(code_edit, Key::BRACKETLEFT);
CHECK(code_edit->get_line(0) == "[]");
CHECK(code_edit->get_caret_column() == 1);
- SEND_GUI_KEY_EVENT(code_edit, KEY_BRACKETRIGHT);
+ SEND_GUI_KEY_EVENT(code_edit, Key::BRACKETRIGHT);
CHECK(code_edit->get_line(0) == "[]");
CHECK(code_edit->get_caret_column() == 2);
/* If current is char and inserting a string, do not autocomplete. */
code_edit->clear();
- SEND_GUI_KEY_EVENT(code_edit, KEY_A);
- SEND_GUI_KEY_EVENT(code_edit, KEY_APOSTROPHE);
+ SEND_GUI_KEY_EVENT(code_edit, Key::A);
+ SEND_GUI_KEY_EVENT(code_edit, Key::APOSTROPHE);
CHECK(code_edit->get_line(0) == "A'");
/* If in comment, do not complete. */
code_edit->add_comment_delimiter("#", "");
code_edit->clear();
- SEND_GUI_KEY_EVENT(code_edit, KEY_NUMBERSIGN);
- SEND_GUI_KEY_EVENT(code_edit, KEY_APOSTROPHE);
+ SEND_GUI_KEY_EVENT(code_edit, Key::NUMBERSIGN);
+ SEND_GUI_KEY_EVENT(code_edit, Key::APOSTROPHE);
CHECK(code_edit->get_line(0) == "#'");
/* If in string, and inserting string do not complete. */
code_edit->clear();
- SEND_GUI_KEY_EVENT(code_edit, KEY_APOSTROPHE);
- SEND_GUI_KEY_EVENT(code_edit, KEY_QUOTEDBL);
+ SEND_GUI_KEY_EVENT(code_edit, Key::APOSTROPHE);
+ SEND_GUI_KEY_EVENT(code_edit, Key::QUOTEDBL);
CHECK(code_edit->get_line(0) == "'\"'");
}
@@ -2867,7 +2930,7 @@ TEST_CASE("[SceneTree][CodeEdit] completion") {
SEND_GUI_ACTION(code_edit, "ui_down");
CHECK(code_edit->get_code_completion_selected_index() == 0);
- SEND_GUI_KEY_EVENT(code_edit, KEY_T);
+ SEND_GUI_KEY_EVENT(code_edit, Key::T);
CHECK(code_edit->get_code_completion_selected_index() == 0);
SEND_GUI_ACTION(code_edit, "ui_left");
@@ -2881,14 +2944,14 @@ TEST_CASE("[SceneTree][CodeEdit] completion") {
Point2 caret_pos = code_edit->get_caret_draw_pos();
caret_pos.y -= code_edit->get_line_height();
- SEND_GUI_MOUSE_EVENT(code_edit, caret_pos, MOUSE_BUTTON_WHEEL_DOWN, MOUSE_BUTTON_NONE);
+ SEND_GUI_MOUSE_EVENT(code_edit, caret_pos, MouseButton::WHEEL_DOWN, MouseButton::NONE);
CHECK(code_edit->get_code_completion_selected_index() == 1);
- SEND_GUI_MOUSE_EVENT(code_edit, caret_pos, MOUSE_BUTTON_WHEEL_UP, MOUSE_BUTTON_NONE);
+ SEND_GUI_MOUSE_EVENT(code_edit, caret_pos, MouseButton::WHEEL_UP, MouseButton::NONE);
CHECK(code_edit->get_code_completion_selected_index() == 0);
/* Single click selects. */
- SEND_GUI_MOUSE_EVENT(code_edit, caret_pos, MOUSE_BUTTON_LEFT, MOUSE_BUTTON_MASK_LEFT);
+ SEND_GUI_MOUSE_EVENT(code_edit, caret_pos, MouseButton::LEFT, MouseButton::MASK_LEFT);
CHECK(code_edit->get_code_completion_selected_index() == 2);
/* Double click inserts. */
@@ -3096,15 +3159,15 @@ TEST_CASE("[SceneTree][CodeEdit] symbol lookup") {
Point2 caret_pos = code_edit->get_caret_draw_pos();
caret_pos.x += 55;
- SEND_GUI_MOUSE_EVENT(code_edit, caret_pos, MOUSE_BUTTON_NONE, MOUSE_BUTTON_NONE);
+ SEND_GUI_MOUSE_EVENT(code_edit, caret_pos, MouseButton::NONE, MouseButton::NONE);
CHECK(code_edit->get_text_for_symbol_lookup() == "this is s" + String::chr(0xFFFF) + "ome text");
SIGNAL_WATCH(code_edit, "symbol_validate");
#ifdef OSX_ENABLED
- SEND_GUI_KEY_EVENT(code_edit, KEY_META);
+ SEND_GUI_KEY_EVENT(code_edit, Key::META);
#else
- SEND_GUI_KEY_EVENT(code_edit, KEY_CTRL);
+ SEND_GUI_KEY_EVENT(code_edit, Key::CTRL);
#endif
Array signal_args;
diff --git a/tests/test_curve.h b/tests/scene/test_curve.h
index e079905e35..60eafad460 100644
--- a/tests/test_curve.h
+++ b/tests/scene/test_curve.h
@@ -33,7 +33,7 @@
#include "scene/resources/curve.h"
-#include "thirdparty/doctest/doctest.h"
+#include "tests/test_macros.h"
namespace TestCurve {
diff --git a/tests/test_gradient.h b/tests/scene/test_gradient.h
index 8eaa6b2b64..fc595b02f2 100644
--- a/tests/test_gradient.h
+++ b/tests/scene/test_gradient.h
@@ -31,8 +31,6 @@
#ifndef TEST_GRADIENT_H
#define TEST_GRADIENT_H
-#include "core/math/color.h"
-#include "core/object/class_db.h"
#include "scene/resources/gradient.h"
#include "thirdparty/doctest/doctest.h"
diff --git a/tests/test_gui.cpp b/tests/scene/test_gui.cpp
index 0ec8aa78c4..5bd9390cb7 100644
--- a/tests/test_gui.cpp
+++ b/tests/scene/test_gui.cpp
@@ -32,29 +32,18 @@
#include "test_gui.h"
-#include "core/io/image_loader.h"
-#include "core/os/os.h"
-#include "core/string/print_string.h"
-#include "scene/2d/sprite_2d.h"
#include "scene/gui/button.h"
-#include "scene/gui/control.h"
#include "scene/gui/label.h"
#include "scene/gui/line_edit.h"
#include "scene/gui/menu_button.h"
#include "scene/gui/option_button.h"
#include "scene/gui/panel.h"
-#include "scene/gui/popup_menu.h"
#include "scene/gui/progress_bar.h"
#include "scene/gui/rich_text_label.h"
#include "scene/gui/scroll_bar.h"
#include "scene/gui/spin_box.h"
#include "scene/gui/tab_container.h"
-#include "scene/gui/texture_rect.h"
#include "scene/gui/tree.h"
-#include "scene/main/scene_tree.h"
-
-#include "scene/3d/camera_3d.h"
-#include "scene/main/window.h"
namespace TestGUI {
@@ -267,4 +256,4 @@ MainLoop *test() {
}
} // namespace TestGUI
-#endif
+#endif // _3D_DISABLED
diff --git a/tests/test_gui.h b/tests/scene/test_gui.h
index e5c40de7e8..84bce620e2 100644
--- a/tests/test_gui.h
+++ b/tests/scene/test_gui.h
@@ -31,7 +31,7 @@
#ifndef TEST_GUI_H
#define TEST_GUI_H
-#include "core/os/main_loop.h"
+class MainLoop;
namespace TestGUI {
diff --git a/tests/test_path_3d.h b/tests/scene/test_path_3d.h
index 9961ae6e97..1fcef3adde 100644
--- a/tests/test_path_3d.h
+++ b/tests/scene/test_path_3d.h
@@ -32,7 +32,6 @@
#define TEST_PATH_3D_H
#include "scene/3d/path_3d.h"
-#include "scene/resources/curve.h"
#include "tests/test_macros.h"
diff --git a/tests/test_path_follow_2d.h b/tests/scene/test_path_follow_2d.h
index 388b690060..ddfcc5552a 100644
--- a/tests/test_path_follow_2d.h
+++ b/tests/scene/test_path_follow_2d.h
@@ -32,7 +32,6 @@
#define TEST_PATH_FOLLOW_2D_H
#include "scene/2d/path_2d.h"
-#include "scene/resources/curve.h"
#include "tests/test_macros.h"
diff --git a/tests/test_path_follow_3d.h b/tests/scene/test_path_follow_3d.h
index b6b4c88222..6a505dbb39 100644
--- a/tests/test_path_follow_3d.h
+++ b/tests/scene/test_path_follow_3d.h
@@ -32,7 +32,6 @@
#define TEST_PATH_FOLLOW_3D_H
#include "scene/3d/path_3d.h"
-#include "scene/resources/curve.h"
#include "tests/test_macros.h"
diff --git a/tests/test_physics_2d.cpp b/tests/servers/test_physics_2d.cpp
index f6619db8fd..06aa88b5c0 100644
--- a/tests/test_physics_2d.cpp
+++ b/tests/servers/test_physics_2d.cpp
@@ -31,11 +31,6 @@
#include "test_physics_2d.h"
#include "core/os/main_loop.h"
-#include "core/os/os.h"
-#include "core/string/print_string.h"
-#include "core/templates/map.h"
-#include "scene/resources/texture.h"
-#include "servers/display_server.h"
#include "servers/physics_server_2d.h"
#include "servers/rendering_server.h"
@@ -201,10 +196,10 @@ protected:
if (mb->is_pressed()) {
Point2 p = mb->get_position();
- if (mb->get_button_index() == 1) {
+ if (mb->get_button_index() == MouseButton::LEFT) {
ray_to = p;
_do_ray_query();
- } else if (mb->get_button_index() == 2) {
+ } else if (mb->get_button_index() == MouseButton::RIGHT) {
ray_from = p;
_do_ray_query();
}
@@ -216,10 +211,10 @@ protected:
if (mm.is_valid()) {
Point2 p = mm->get_position();
- if (mm->get_button_mask() & MOUSE_BUTTON_MASK_LEFT) {
+ if ((mm->get_button_mask() & MouseButton::MASK_LEFT) != MouseButton::NONE) {
ray_to = p;
_do_ray_query();
- } else if (mm->get_button_mask() & MOUSE_BUTTON_MASK_RIGHT) {
+ } else if ((mm->get_button_mask() & MouseButton::MASK_RIGHT) != MouseButton::NONE) {
ray_from = p;
_do_ray_query();
}
diff --git a/tests/test_physics_2d.h b/tests/servers/test_physics_2d.h
index 966d49200a..2ae1053a03 100644
--- a/tests/test_physics_2d.h
+++ b/tests/servers/test_physics_2d.h
@@ -31,7 +31,7 @@
#ifndef TEST_PHYSICS_2D_H
#define TEST_PHYSICS_2D_H
-#include "core/os/main_loop.h"
+class MainLoop;
namespace TestPhysics2D {
diff --git a/tests/test_physics_3d.cpp b/tests/servers/test_physics_3d.cpp
index d839ae26b7..7cb74b1ee3 100644
--- a/tests/test_physics_3d.cpp
+++ b/tests/servers/test_physics_3d.cpp
@@ -31,12 +31,8 @@
#include "test_physics_3d.h"
#include "core/math/convex_hull.h"
-#include "core/math/math_funcs.h"
+#include "core/math/geometry_3d.h"
#include "core/os/main_loop.h"
-#include "core/os/os.h"
-#include "core/string/print_string.h"
-#include "core/templates/map.h"
-#include "servers/display_server.h"
#include "servers/physics_server_3d.h"
#include "servers/rendering_server.h"
@@ -249,12 +245,12 @@ protected:
public:
virtual void input_event(const Ref<InputEvent> &p_event) {
Ref<InputEventMouseMotion> mm = p_event;
- if (mm.is_valid() && mm->get_button_mask() & 4) {
+ if (mm.is_valid() && (mm->get_button_mask() & MouseButton::MASK_MIDDLE) != MouseButton::NONE) {
ofs_y -= mm->get_relative().y / 200.0;
ofs_x += mm->get_relative().x / 200.0;
}
- if (mm.is_valid() && mm->get_button_mask() & 1) {
+ if (mm.is_valid() && (mm->get_button_mask() & MouseButton::MASK_LEFT) != MouseButton::NONE) {
real_t y = -mm->get_relative().y / 20.0;
real_t x = mm->get_relative().x / 20.0;
diff --git a/tests/test_physics_3d.h b/tests/servers/test_physics_3d.h
index b6b66f350e..b86327cdb4 100644
--- a/tests/test_physics_3d.h
+++ b/tests/servers/test_physics_3d.h
@@ -31,7 +31,7 @@
#ifndef TEST_PHYSICS_H
#define TEST_PHYSICS_H
-#include "core/os/main_loop.h"
+class MainLoop;
namespace TestPhysics3D {
diff --git a/tests/test_render.cpp b/tests/servers/test_render.cpp
index 21b4da9b3b..183f049238 100644
--- a/tests/test_render.cpp
+++ b/tests/servers/test_render.cpp
@@ -31,12 +31,7 @@
#include "test_render.h"
#include "core/math/convex_hull.h"
-#include "core/math/math_funcs.h"
-#include "core/os/keyboard.h"
#include "core/os/main_loop.h"
-#include "core/os/os.h"
-#include "core/string/print_string.h"
-#include "servers/display_server.h"
#include "servers/rendering_server.h"
#define OBJECT_COUNT 50
diff --git a/tests/test_render.h b/tests/servers/test_render.h
index 35bb383773..1d773cb347 100644
--- a/tests/test_render.h
+++ b/tests/servers/test_render.h
@@ -31,11 +31,11 @@
#ifndef TEST_RENDER_H
#define TEST_RENDER_H
-#include "core/os/main_loop.h"
+class MainLoop;
namespace TestRender {
MainLoop *test();
}
-#endif
+#endif // TEST_RENDER_H
diff --git a/tests/test_shader_lang.cpp b/tests/servers/test_shader_lang.cpp
index 5598852f29..0591bf6adf 100644
--- a/tests/test_shader_lang.cpp
+++ b/tests/servers/test_shader_lang.cpp
@@ -30,13 +30,8 @@
#include "test_shader_lang.h"
-#include "core/io/file_access.h"
#include "core/os/main_loop.h"
#include "core/os/os.h"
-
-#include "core/string/print_string.h"
-#include "scene/gui/control.h"
-#include "scene/gui/text_edit.h"
#include "servers/rendering/shader_language.h"
typedef ShaderLanguage SL;
diff --git a/tests/test_shader_lang.h b/tests/servers/test_shader_lang.h
index 46a2e6af35..de7ec002b6 100644
--- a/tests/test_shader_lang.h
+++ b/tests/servers/test_shader_lang.h
@@ -31,7 +31,7 @@
#ifndef TEST_SHADER_LANG_H
#define TEST_SHADER_LANG_H
-#include "core/os/main_loop.h"
+class MainLoop;
namespace TestShaderLang {
diff --git a/tests/test_text_server.h b/tests/servers/test_text_server.h
index 4edffe3711..4edffe3711 100644
--- a/tests/test_text_server.h
+++ b/tests/servers/test_text_server.h
diff --git a/tests/test_dictionary.h b/tests/test_dictionary.h
deleted file mode 100644
index b94cf36109..0000000000
--- a/tests/test_dictionary.h
+++ /dev/null
@@ -1,159 +0,0 @@
-/*************************************************************************/
-/* test_dictionary.h */
-/*************************************************************************/
-/* This file is part of: */
-/* GODOT ENGINE */
-/* https://godotengine.org */
-/*************************************************************************/
-/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */
-/* Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). */
-/* */
-/* Permission is hereby granted, free of charge, to any person obtaining */
-/* a copy of this software and associated documentation files (the */
-/* "Software"), to deal in the Software without restriction, including */
-/* without limitation the rights to use, copy, modify, merge, publish, */
-/* distribute, sublicense, and/or sell copies of the Software, and to */
-/* permit persons to whom the Software is furnished to do so, subject to */
-/* the following conditions: */
-/* */
-/* The above copyright notice and this permission notice shall be */
-/* included in all copies or substantial portions of the Software. */
-/* */
-/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
-/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
-/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
-/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
-/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
-/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
-/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
-/*************************************************************************/
-
-#ifndef TEST_DICTIONARY_H
-#define TEST_DICTIONARY_H
-
-#include "core/templates/ordered_hash_map.h"
-#include "core/templates/safe_refcount.h"
-#include "core/variant/dictionary.h"
-#include "core/variant/variant.h"
-#include "tests/test_macros.h"
-
-namespace TestDictionary {
-
-TEST_CASE("[Dictionary] Assignment using bracket notation ([])") {
- Dictionary map;
- map["Hello"] = 0;
- CHECK(int(map["Hello"]) == 0);
- map["Hello"] = 3;
- CHECK(int(map["Hello"]) == 3);
- map["World!"] = 4;
- CHECK(int(map["World!"]) == 4);
-
- // Test non-string keys, since keys can be of any Variant type.
- map[12345] = -5;
- CHECK(int(map[12345]) == -5);
- map[false] = 128;
- CHECK(int(map[false]) == 128);
- map[Vector2(10, 20)] = 30;
- CHECK(int(map[Vector2(10, 20)]) == 30);
- map[0] = 400;
- CHECK(int(map[0]) == 400);
- // Check that assigning 0 doesn't overwrite the value for `false`.
- CHECK(int(map[false]) == 128);
-}
-
-TEST_CASE("[Dictionary] == and != operators") {
- Dictionary map1;
- Dictionary map2;
- CHECK(map1 != map2);
- map1[1] = 3;
- map2 = map1;
- CHECK(map1 == map2);
-}
-
-TEST_CASE("[Dictionary] get_key_lists()") {
- Dictionary map;
- List<Variant> keys;
- List<Variant> *ptr = &keys;
- map.get_key_list(ptr);
- CHECK(keys.is_empty());
- map[1] = 3;
- map.get_key_list(ptr);
- CHECK(keys.size() == 1);
- CHECK(int(keys[0]) == 1);
- map[2] = 4;
- map.get_key_list(ptr);
- CHECK(keys.size() == 3);
-}
-
-TEST_CASE("[Dictionary] get_key_at_index()") {
- Dictionary map;
- map[4] = 3;
- Variant val = map.get_key_at_index(0);
- CHECK(int(val) == 4);
- map[3] = 1;
- val = map.get_key_at_index(0);
- CHECK(int(val) == 4);
- val = map.get_key_at_index(1);
- CHECK(int(val) == 3);
-}
-
-TEST_CASE("[Dictionary] getptr()") {
- Dictionary map;
- map[1] = 3;
- Variant *key = map.getptr(1);
- CHECK(int(*key) == 3);
- key = map.getptr(2);
- CHECK(key == nullptr);
-}
-
-TEST_CASE("[Dictionary] get_valid()") {
- Dictionary map;
- map[1] = 3;
- Variant val = map.get_valid(1);
- CHECK(int(val) == 3);
-}
-TEST_CASE("[Dictionary] get()") {
- Dictionary map;
- map[1] = 3;
- Variant val = map.get(1, -1);
- CHECK(int(val) == 3);
-}
-
-TEST_CASE("[Dictionary] size(), empty() and clear()") {
- Dictionary map;
- CHECK(map.size() == 0);
- CHECK(map.is_empty());
- map[1] = 3;
- CHECK(map.size() == 1);
- CHECK(!map.is_empty());
- map.clear();
- CHECK(map.size() == 0);
- CHECK(map.is_empty());
-}
-
-TEST_CASE("[Dictionary] has() and has_all()") {
- Dictionary map;
- CHECK(map.has(1) == false);
- map[1] = 3;
- CHECK(map.has(1));
- Array keys;
- keys.push_back(1);
- CHECK(map.has_all(keys));
- keys.push_back(2);
- CHECK(map.has_all(keys) == false);
-}
-
-TEST_CASE("[Dictionary] keys() and values()") {
- Dictionary map;
- Array keys = map.keys();
- Array values = map.values();
- CHECK(keys.is_empty());
- CHECK(values.is_empty());
- map[1] = 3;
- keys = map.keys();
- values = map.values();
- CHECK(int(keys[0]) == 1);
- CHECK(int(values[0]) == 3);
-}
-} // namespace TestDictionary
-#endif // TEST_DICTIONARY_H
diff --git a/tests/test_macros.h b/tests/test_macros.h
index 2f0bc6dcfa..b04c2117b7 100644
--- a/tests/test_macros.h
+++ b/tests/test_macros.h
@@ -31,9 +31,8 @@
#ifndef TEST_MACROS_H
#define TEST_MACROS_H
-#include "core/object/callable_method_pointer.h"
-#include "core/object/class_db.h"
-#include "core/templates/map.h"
+#include "core/input/input_map.h"
+#include "core/object/message_queue.h"
#include "core/variant/variant.h"
// See documentation for doctest at:
@@ -134,7 +133,7 @@ int register_test_command(String p_command, TestFunc p_function);
// Utility macros to send an event actions to a given object
// Requires Message Queue and InputMap to be setup.
// SEND_GUI_ACTION - takes an object and a input map key. e.g SEND_GUI_ACTION(code_edit, "ui_text_newline").
-// SEND_GUI_KEY_EVENT - takes an object and a keycode set. e.g SEND_GUI_KEY_EVENT(code_edit, KEY_A | KEY_MASK_CMD).
+// SEND_GUI_KEY_EVENT - takes an object and a keycode set. e.g SEND_GUI_KEY_EVENT(code_edit, Key::A | KeyModifierMask::CMD).
// SEND_GUI_MOUSE_EVENT - takes an object, position, mouse button and mouse mask e.g SEND_GUI_MOUSE_EVENT(code_edit, Vector2(50, 50), MOUSE_BUTTON_NONE, MOUSE_BUTTON_NONE);
// SEND_GUI_DOUBLE_CLICK - takes an object and a postion. e.g SEND_GUI_DOUBLE_CLICK(code_edit, Vector2(50, 50));
@@ -173,7 +172,7 @@ int register_test_command(String p_command, TestFunc p_function);
#define SEND_GUI_DOUBLE_CLICK(m_object, m_local_pos) \
{ \
- _CREATE_GUI_MOUSE_EVENT(m_object, m_local_pos, MOUSE_BUTTON_LEFT, MOUSE_BUTTON_LEFT); \
+ _CREATE_GUI_MOUSE_EVENT(m_object, m_local_pos, MouseButton::LEFT, MouseButton::LEFT); \
event->set_double_click(true); \
m_object->get_viewport()->push_input(event); \
MessageQueue::get_singleton()->flush(); \
diff --git a/tests/test_main.cpp b/tests/test_main.cpp
index 341fb1af61..a09be08de8 100644
--- a/tests/test_main.cpp
+++ b/tests/test_main.cpp
@@ -30,62 +30,62 @@
#include "test_main.h"
-#include "core/templates/list.h"
-
-#include "test_aabb.h"
-#include "test_array.h"
-#include "test_astar.h"
-#include "test_basis.h"
-#include "test_class_db.h"
-#include "test_code_edit.h"
-#include "test_color.h"
-#include "test_command_queue.h"
-#include "test_config_file.h"
-#include "test_crypto.h"
-#include "test_curve.h"
-#include "test_dictionary.h"
-#include "test_expression.h"
-#include "test_file_access.h"
-#include "test_geometry_2d.h"
-#include "test_geometry_3d.h"
-#include "test_gradient.h"
-#include "test_gui.h"
-#include "test_hashing_context.h"
-#include "test_image.h"
-#include "test_json.h"
-#include "test_list.h"
-#include "test_local_vector.h"
-#include "test_lru.h"
-#include "test_marshalls.h"
-#include "test_math.h"
-#include "test_method_bind.h"
-#include "test_node_path.h"
-#include "test_oa_hash_map.h"
-#include "test_object.h"
-#include "test_ordered_hash_map.h"
-#include "test_paged_array.h"
-#include "test_path_3d.h"
-#include "test_pck_packer.h"
-#include "test_physics_2d.h"
-#include "test_physics_3d.h"
-#include "test_random_number_generator.h"
-#include "test_rect2.h"
-#include "test_render.h"
-#include "test_resource.h"
-#include "test_shader_lang.h"
-#include "test_string.h"
-#include "test_text_server.h"
-#include "test_time.h"
-#include "test_translation.h"
-#include "test_validate_testing.h"
-#include "test_variant.h"
-#include "test_vector.h"
-#include "test_xml_parser.h"
+#include "tests/core/io/test_config_file.h"
+#include "tests/core/io/test_file_access.h"
+#include "tests/core/io/test_image.h"
+#include "tests/core/io/test_json.h"
+#include "tests/core/io/test_marshalls.h"
+#include "tests/core/io/test_pck_packer.h"
+#include "tests/core/io/test_resource.h"
+#include "tests/core/io/test_xml_parser.h"
+#include "tests/core/math/test_aabb.h"
+#include "tests/core/math/test_astar.h"
+#include "tests/core/math/test_basis.h"
+#include "tests/core/math/test_color.h"
+#include "tests/core/math/test_expression.h"
+#include "tests/core/math/test_geometry_2d.h"
+#include "tests/core/math/test_geometry_3d.h"
+#include "tests/core/math/test_math.h"
+#include "tests/core/math/test_random_number_generator.h"
+#include "tests/core/math/test_rect2.h"
+#include "tests/core/object/test_class_db.h"
+#include "tests/core/object/test_method_bind.h"
+#include "tests/core/object/test_object.h"
+#include "tests/core/string/test_node_path.h"
+#include "tests/core/string/test_string.h"
+#include "tests/core/string/test_translation.h"
+#include "tests/core/templates/test_command_queue.h"
+#include "tests/core/templates/test_list.h"
+#include "tests/core/templates/test_local_vector.h"
+#include "tests/core/templates/test_lru.h"
+#include "tests/core/templates/test_oa_hash_map.h"
+#include "tests/core/templates/test_ordered_hash_map.h"
+#include "tests/core/templates/test_paged_array.h"
+#include "tests/core/templates/test_vector.h"
+#include "tests/core/test_crypto.h"
+#include "tests/core/test_hashing_context.h"
+#include "tests/core/test_time.h"
+#include "tests/core/variant/test_array.h"
+#include "tests/core/variant/test_dictionary.h"
+#include "tests/core/variant/test_variant.h"
+#include "tests/scene/test_code_edit.h"
+#include "tests/scene/test_curve.h"
+#include "tests/scene/test_gradient.h"
+#include "tests/scene/test_gui.h"
+#include "tests/scene/test_path_3d.h"
+#include "tests/servers/test_physics_2d.h"
+#include "tests/servers/test_physics_3d.h"
+#include "tests/servers/test_render.h"
+#include "tests/servers/test_shader_lang.h"
+#include "tests/servers/test_text_server.h"
+#include "tests/test_validate_testing.h"
#include "modules/modules_tests.gen.h"
#include "tests/test_macros.h"
+#include "scene/resources/default_theme/default_theme.h"
+
int test_main(int argc, char *argv[]) {
bool run_tests = true;
diff --git a/tests/test_tools.h b/tests/test_tools.h
index ec18610f04..e1192458d0 100644
--- a/tests/test_tools.h
+++ b/tests/test_tools.h
@@ -31,8 +31,6 @@
#ifndef TEST_TOOLS_H
#define TEST_TOOLS_H
-#include "core/error/error_macros.h"
-
struct ErrorDetector {
ErrorDetector() {
eh.errfunc = _detect_error;
diff --git a/tests/test_utils.cpp b/tests/test_utils.cpp
index 1666a257a9..890dea3ee1 100644
--- a/tests/test_utils.cpp
+++ b/tests/test_utils.cpp
@@ -28,7 +28,7 @@
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
-#include "test_utils.h"
+#include "tests/test_utils.h"
#include "core/os/os.h"
diff --git a/tests/test_utils.h b/tests/test_utils.h
index f05ab0bdb1..ccebe2e449 100644
--- a/tests/test_utils.h
+++ b/tests/test_utils.h
@@ -31,7 +31,7 @@
#ifndef TEST_UTILS_H
#define TEST_UTILS_H
-#include "core/string/ustring.h"
+class String;
namespace TestUtils {
diff --git a/thirdparty/README.md b/thirdparty/README.md
index 3ba5504920..03e9885bd0 100644
--- a/thirdparty/README.md
+++ b/thirdparty/README.md
@@ -5,10 +5,22 @@ respective folder names. Use two empty lines to separate categories for
readability.
+## amd-fsr
+
+Upstream: https://github.com/GPUOpen-Effects/FidelityFX-FSR
+Version: 1.0.2 (a21ffb8f6c13233ba336352bdff293894c706575, 2021)
+License: MIT
+
+Files extracted from upstream source:
+
+- `ffx_a.h` and `ffx_fsr1.h` from `ffx-fsr`
+- `license.txt`
+
+
## basis_universal
- Upstream: https://github.com/BinomialLLC/basis_universal
-- Version: git (ba1c3e40f1d434ebaf9a167b44e9b11d2bf0f765, 2021)
+- Version: git (646a9f826131cb0b9e14b5e4740874808315f83a, 2021)
- License: Apache 2.0
Files extracted from upstream source:
@@ -176,20 +188,20 @@ Files extracted from upstream source:
## graphite
- Upstream: https://github.com/silnrsi/graphite
-- Version: 1.3.14 (92f59dcc52f73ce747f1cdc831579ed2546884aa, 2020)
+- Version: 1.3.14 (80c52493ef42e6fe605a69dcddd2a691cd8a1380, 2021)
- License: MPL-2.0
Files extracted from upstream source:
- the `include` folder
-- the `src` folder
-- `COPYING`, `ChangeLog`
+- the `src` folder (minus `CMakeLists.txt` and `files.mk`)
+- `COPYING`
## harfbuzz
- Upstream: https://github.com/harfbuzz/harfbuzz
-- Version: 3.0.0 (9c387e20d65a7a366ac270d789f6ad266014c9e0, 2021)
+- Version: 3.1.1 (cd5c6cd0419ac5e4de975d6c476fb760bf06d2ce, 2021)
- License: MIT
Files extracted from upstream source:
@@ -235,14 +247,14 @@ Files extracted from upstream source:
## libogg
- Upstream: https://www.xiph.org/ogg
-- Version: git (c8fca6b4a02d695b1ceea39b330d4406001c03ed, 2019)
+- Version: 1.3.5 (e1774cd77f471443541596e09078e78fdc342e4f, 2021)
- License: BSD-3-Clause
Files extracted from upstream source:
- `src/*.{c,h}`
-- `include/ogg/*.h` in ogg/
-- COPYING
+- `include/ogg/*.h` in `ogg/` (run `configure` to generate `config_types.h`)
+- `COPYING`
## libpng
@@ -279,26 +291,26 @@ on top of the 1.1.1 source (not included in any stable release yet).
## libvorbis
- Upstream: https://www.xiph.org/vorbis
-- Version: 1.3.6 (2018)
+- Version: 1.3.7 (0657aee69dec8508a0011f47f3b69d7538e9d262, 2020)
- License: BSD-3-Clause
Files extracted from upstream source:
-- `src/*` except from: `lookups.pl`, `Makefile.*`
-- `include/vorbis/*.h` as vorbis/
-- COPYING
+- `lib/*` except from: `lookups.pl`, `Makefile.*`
+- `include/vorbis/*.h` as `vorbis/`
+- `COPYING`
## libwebp
- Upstream: https://chromium.googlesource.com/webm/libwebp/
-- Version: 1.1.0 (d7844e9762b61c9638c263657bd49e1690184832, 2020)
+- Version: 1.2.1 (9ce5843dbabcfd3f7c39ec7ceba9cbeb213cbfdf, 2021)
- License: BSD-3-Clause
Files extracted from upstream source:
-- `src/*` except from: .am, .rc and .in files
-- AUTHORS, COPYING, PATENTS
+- `src/*` except from: `.am`, `.rc` and `.in` files
+- `AUTHORS`, `COPYING`, `PATENTS`
Important: The files `utils/bit_reader_utils.{c,h}` have Godot-made
changes to ensure they build for Javascript/HTML5. Those
@@ -333,7 +345,7 @@ File extracted from upstream release tarball:
## meshoptimizer
- Upstream: https://github.com/zeux/meshoptimizer
-- Version: git (f5d83e879c48f8664783a69b4f50711d27549b66, 2021)
+- Version: git (f4c356d79fadb99cbf432f7e199d823581b0e19e, 2021)
- License: MIT
Files extracted from upstream repository:
@@ -350,22 +362,19 @@ found in the `patches` directory.
## miniupnpc
- Upstream: https://github.com/miniupnp/miniupnp
-- Version: 2.2.2 (81029a860baf1f727903e5b85307903b3f40cbc8, 2021)
+- Version: 2.2.3 (2df8120326ed4246e049a7a6de707539604cd514, 2021)
- License: BSD-3-Clause
Files extracted from upstream source:
-- All `*.c` and `*.h` files from `miniupnpc` to `thirdparty/miniupnpc/miniupnpc`
+- Copy `miniupnpc/src` and `miniupnpc/include` to `thirdparty/miniupnpc`
- Remove the following test or sample files:
- `listdevices.c minihttptestserver.c miniupnpcmodule.c upnpc.c upnperrors.* test* wingenminiupnpcstrings.c`
+ `listdevices.c minihttptestserver.c miniupnpcmodule.c upnpc.c upnperrors.* test*`
- `LICENSE`
-The only modified file is `miniupnpcstrings.h`, which was created for Godot
-(it is usually autogenerated by cmake). Bump the version number for miniupnpc in that
-file when upgrading.
-
-Note: The following upstream patch has been applied, remove this notice on next update.
-https://github.com/miniupnp/miniupnp/commit/3a08dd4b89af2e9effa22a136bac86f2f306fd79
+The only modified file is `src/miniupnpcstrings.h`, which was created for Godot
+(it is usually autogenerated by cmake). Bump the version number for miniupnpc in
+that file when upgrading.
## minizip
@@ -506,7 +515,7 @@ Patch files are provided in `oidn/patches/`.
## pcre2
- Upstream: http://www.pcre.org
-- Version: 10.36 (r1288, 2020)
+- Version: 10.39 (35fee4193b852cb504892352bd0155de10809889, 2021)
- License: BSD-3-Clause
Files extracted from upstream source:
@@ -599,18 +608,21 @@ comments and a patch is provided in the squish/ folder.
## tinyexr
- Upstream: https://github.com/syoyo/tinyexr
-- Version: 1.0.0 (e4b7840d9448b7d57a88384ce26143004f3c0c71, 2020)
+- Version: 1.0.1 (67010eae802211202d0797f4df2b809f4ba7442c, 2021)
- License: BSD-3-Clause
Files extracted from upstream source:
- `tinyexr.{cc,h}`
+The `tinyexr.cc` file was modified to include `zlib.h` which we provide,
+instead of `miniz.h` as an external dependency.
+
## vhacd
- Upstream: https://github.com/kmammou/v-hacd
-- Version: git (b07958e18e01d504e3af80eeaeb9f033226533d7, 2019)
+- Version: git (1a49edf29c69039df15286181f2f27e17ceb9aef, 2020)
- License: BSD-3-Clause
Files extracted from upstream source:
@@ -670,25 +682,29 @@ Patches in the `patches` directory should be re-applied after updates.
## wslay
- Upstream: https://github.com/tatsuhiro-t/wslay
-- Version: 1.1.1 (c9a84aa6df8512584c77c8cd15be9536b89c35aa, 2020)
+- Version: 1.1.1+git (45d22583b488f79d5a4e598cc7675c191c5ab53f, 2021)
- License: MIT
File extracted from upstream release tarball:
-- All `*.c` and `*.h` in `lib/` and `lib/includes/`
-- `wslay.h` has a small Godot addition to fix MSVC build.
- See `thirdparty/wslay/msvcfix.diff`
+- Run `cmake .` to generate `config.h` and `wslayver.h`.
+ Contents might need tweaking for Godot, review diff.
+- All `*.c` and `*.h` files from `lib/`
+- All `*.h` in `lib/includes/wslay/` as `wslay/`
+- `wslay/wslay.h` has a small Godot addition to fix MSVC build.
+ See `patches/msvcfix.diff`
+- `COPYING`
## xatlas
- Upstream: https://github.com/jpcy/xatlas
-- Version: git (5571fc7ef0d06832947c0a935ccdcf083f7a9264, 2020)
+- Version: git (ec707faeac3b95e6b416076a9509718cce105b6a, 2021)
- License: MIT
Files extracted from upstream source:
-- `xatlas.{cpp,h}`
+- `source/xatlas/xatlas.{cpp,h}`
- `LICENSE`
@@ -706,11 +722,11 @@ Files extracted from upstream source:
## zstd
- Upstream: https://github.com/facebook/zstd
-- Version: 1.4.8 (97a3da1df009d4dc67251de0c4b1c9d7fe286fc1, 2020)
+- Version: 1.5.0 (a488ba114ec17ea1054b9057c26a046fc122b3b6, 2021)
- License: BSD-3-Clause
Files extracted from upstream source:
-- lib/{common/,compress/,decompress/,zstd.h}
-- LICENSE
+- `lib/{common/,compress/,decompress/,zstd.h,zstd_errors.h}`
+- `LICENSE`
diff --git a/thirdparty/amd-fsr/ffx_a.h b/thirdparty/amd-fsr/ffx_a.h
new file mode 100644
index 0000000000..d04bff55cb
--- /dev/null
+++ b/thirdparty/amd-fsr/ffx_a.h
@@ -0,0 +1,2656 @@
+//==============================================================================================================================
+//
+// [A] SHADER PORTABILITY 1.20210629
+//
+//==============================================================================================================================
+// FidelityFX Super Resolution Sample
+//
+// Copyright (c) 2021 Advanced Micro Devices, Inc. All rights reserved.
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files(the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions :
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+//------------------------------------------------------------------------------------------------------------------------------
+// MIT LICENSE
+// ===========
+// Copyright (c) 2014 Michal Drobot (for concepts used in "FLOAT APPROXIMATIONS").
+// -----------
+// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation
+// files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy,
+// modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+// -----------
+// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the
+// Software.
+// -----------
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//------------------------------------------------------------------------------------------------------------------------------
+// ABOUT
+// =====
+// Common central point for high-level shading language and C portability for various shader headers.
+//------------------------------------------------------------------------------------------------------------------------------
+// DEFINES
+// =======
+// A_CPU ..... Include the CPU related code.
+// A_GPU ..... Include the GPU related code.
+// A_GLSL .... Using GLSL.
+// A_HLSL .... Using HLSL.
+// A_HLSL_6_2 Using HLSL 6.2 with new 'uint16_t' and related types (requires '-enable-16bit-types').
+// A_NO_16_BIT_CAST Don't use instructions that are not availabe in SPIR-V (needed for running A_HLSL_6_2 on Vulkan)
+// A_GCC ..... Using a GCC compatible compiler (else assume MSVC compatible compiler by default).
+// =======
+// A_BYTE .... Support 8-bit integer.
+// A_HALF .... Support 16-bit integer and floating point.
+// A_LONG .... Support 64-bit integer.
+// A_DUBL .... Support 64-bit floating point.
+// =======
+// A_WAVE .... Support wave-wide operations.
+//------------------------------------------------------------------------------------------------------------------------------
+// To get #include "ffx_a.h" working in GLSL use '#extension GL_GOOGLE_include_directive:require'.
+//------------------------------------------------------------------------------------------------------------------------------
+// SIMPLIFIED TYPE SYSTEM
+// ======================
+// - All ints will be unsigned with exception of when signed is required.
+// - Type naming simplified and shortened "A<type><#components>",
+// - H = 16-bit float (half)
+// - F = 32-bit float (float)
+// - D = 64-bit float (double)
+// - P = 1-bit integer (predicate, not using bool because 'B' is used for byte)
+// - B = 8-bit integer (byte)
+// - W = 16-bit integer (word)
+// - U = 32-bit integer (unsigned)
+// - L = 64-bit integer (long)
+// - Using "AS<type><#components>" for signed when required.
+//------------------------------------------------------------------------------------------------------------------------------
+// TODO
+// ====
+// - Make sure 'ALerp*(a,b,m)' does 'b*m+(-a*m+a)' (2 ops).
+//------------------------------------------------------------------------------------------------------------------------------
+// CHANGE LOG
+// ==========
+// 20200914 - Expanded wave ops and prx code.
+// 20200713 - Added [ZOL] section, fixed serious bugs in sRGB and Rec.709 color conversion code, etc.
+//==============================================================================================================================
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//_____________________________________________________________/\_______________________________________________________________
+//==============================================================================================================================
+// COMMON
+//==============================================================================================================================
+#define A_2PI 6.28318530718
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//_____________________________________________________________/\_______________________________________________________________
+//==============================================================================================================================
+//
+//
+// CPU
+//
+//
+//==============================================================================================================================
+#ifdef A_CPU
+ // Supporting user defined overrides.
+ #ifndef A_RESTRICT
+ #define A_RESTRICT __restrict
+ #endif
+//------------------------------------------------------------------------------------------------------------------------------
+ #ifndef A_STATIC
+ #define A_STATIC static
+ #endif
+//------------------------------------------------------------------------------------------------------------------------------
+ // Same types across CPU and GPU.
+ // Predicate uses 32-bit integer (C friendly bool).
+ typedef uint32_t AP1;
+ typedef float AF1;
+ typedef double AD1;
+ typedef uint8_t AB1;
+ typedef uint16_t AW1;
+ typedef uint32_t AU1;
+ typedef uint64_t AL1;
+ typedef int8_t ASB1;
+ typedef int16_t ASW1;
+ typedef int32_t ASU1;
+ typedef int64_t ASL1;
+//------------------------------------------------------------------------------------------------------------------------------
+ #define AD1_(a) ((AD1)(a))
+ #define AF1_(a) ((AF1)(a))
+ #define AL1_(a) ((AL1)(a))
+ #define AU1_(a) ((AU1)(a))
+//------------------------------------------------------------------------------------------------------------------------------
+ #define ASL1_(a) ((ASL1)(a))
+ #define ASU1_(a) ((ASU1)(a))
+//------------------------------------------------------------------------------------------------------------------------------
+ A_STATIC AU1 AU1_AF1(AF1 a){union{AF1 f;AU1 u;}bits;bits.f=a;return bits.u;}
+//------------------------------------------------------------------------------------------------------------------------------
+ #define A_TRUE 1
+ #define A_FALSE 0
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//_____________________________________________________________/\_______________________________________________________________
+//==============================================================================================================================
+//
+// CPU/GPU PORTING
+//
+//------------------------------------------------------------------------------------------------------------------------------
+// Get CPU and GPU to share all setup code, without duplicate code paths.
+// This uses a lower-case prefix for special vector constructs.
+// - In C restrict pointers are used.
+// - In the shading language, in/inout/out arguments are used.
+// This depends on the ability to access a vector value in both languages via array syntax (aka color[2]).
+//==============================================================================================================================
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//_____________________________________________________________/\_______________________________________________________________
+//==============================================================================================================================
+// VECTOR ARGUMENT/RETURN/INITIALIZATION PORTABILITY
+//==============================================================================================================================
+ #define retAD2 AD1 *A_RESTRICT
+ #define retAD3 AD1 *A_RESTRICT
+ #define retAD4 AD1 *A_RESTRICT
+ #define retAF2 AF1 *A_RESTRICT
+ #define retAF3 AF1 *A_RESTRICT
+ #define retAF4 AF1 *A_RESTRICT
+ #define retAL2 AL1 *A_RESTRICT
+ #define retAL3 AL1 *A_RESTRICT
+ #define retAL4 AL1 *A_RESTRICT
+ #define retAU2 AU1 *A_RESTRICT
+ #define retAU3 AU1 *A_RESTRICT
+ #define retAU4 AU1 *A_RESTRICT
+//------------------------------------------------------------------------------------------------------------------------------
+ #define inAD2 AD1 *A_RESTRICT
+ #define inAD3 AD1 *A_RESTRICT
+ #define inAD4 AD1 *A_RESTRICT
+ #define inAF2 AF1 *A_RESTRICT
+ #define inAF3 AF1 *A_RESTRICT
+ #define inAF4 AF1 *A_RESTRICT
+ #define inAL2 AL1 *A_RESTRICT
+ #define inAL3 AL1 *A_RESTRICT
+ #define inAL4 AL1 *A_RESTRICT
+ #define inAU2 AU1 *A_RESTRICT
+ #define inAU3 AU1 *A_RESTRICT
+ #define inAU4 AU1 *A_RESTRICT
+//------------------------------------------------------------------------------------------------------------------------------
+ #define inoutAD2 AD1 *A_RESTRICT
+ #define inoutAD3 AD1 *A_RESTRICT
+ #define inoutAD4 AD1 *A_RESTRICT
+ #define inoutAF2 AF1 *A_RESTRICT
+ #define inoutAF3 AF1 *A_RESTRICT
+ #define inoutAF4 AF1 *A_RESTRICT
+ #define inoutAL2 AL1 *A_RESTRICT
+ #define inoutAL3 AL1 *A_RESTRICT
+ #define inoutAL4 AL1 *A_RESTRICT
+ #define inoutAU2 AU1 *A_RESTRICT
+ #define inoutAU3 AU1 *A_RESTRICT
+ #define inoutAU4 AU1 *A_RESTRICT
+//------------------------------------------------------------------------------------------------------------------------------
+ #define outAD2 AD1 *A_RESTRICT
+ #define outAD3 AD1 *A_RESTRICT
+ #define outAD4 AD1 *A_RESTRICT
+ #define outAF2 AF1 *A_RESTRICT
+ #define outAF3 AF1 *A_RESTRICT
+ #define outAF4 AF1 *A_RESTRICT
+ #define outAL2 AL1 *A_RESTRICT
+ #define outAL3 AL1 *A_RESTRICT
+ #define outAL4 AL1 *A_RESTRICT
+ #define outAU2 AU1 *A_RESTRICT
+ #define outAU3 AU1 *A_RESTRICT
+ #define outAU4 AU1 *A_RESTRICT
+//------------------------------------------------------------------------------------------------------------------------------
+ #define varAD2(x) AD1 x[2]
+ #define varAD3(x) AD1 x[3]
+ #define varAD4(x) AD1 x[4]
+ #define varAF2(x) AF1 x[2]
+ #define varAF3(x) AF1 x[3]
+ #define varAF4(x) AF1 x[4]
+ #define varAL2(x) AL1 x[2]
+ #define varAL3(x) AL1 x[3]
+ #define varAL4(x) AL1 x[4]
+ #define varAU2(x) AU1 x[2]
+ #define varAU3(x) AU1 x[3]
+ #define varAU4(x) AU1 x[4]
+//------------------------------------------------------------------------------------------------------------------------------
+ #define initAD2(x,y) {x,y}
+ #define initAD3(x,y,z) {x,y,z}
+ #define initAD4(x,y,z,w) {x,y,z,w}
+ #define initAF2(x,y) {x,y}
+ #define initAF3(x,y,z) {x,y,z}
+ #define initAF4(x,y,z,w) {x,y,z,w}
+ #define initAL2(x,y) {x,y}
+ #define initAL3(x,y,z) {x,y,z}
+ #define initAL4(x,y,z,w) {x,y,z,w}
+ #define initAU2(x,y) {x,y}
+ #define initAU3(x,y,z) {x,y,z}
+ #define initAU4(x,y,z,w) {x,y,z,w}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//_____________________________________________________________/\_______________________________________________________________
+//==============================================================================================================================
+// SCALAR RETURN OPS
+//------------------------------------------------------------------------------------------------------------------------------
+// TODO
+// ====
+// - Replace transcendentals with manual versions.
+//==============================================================================================================================
+ #ifdef A_GCC
+ A_STATIC AD1 AAbsD1(AD1 a){return __builtin_fabs(a);}
+ A_STATIC AF1 AAbsF1(AF1 a){return __builtin_fabsf(a);}
+ A_STATIC AU1 AAbsSU1(AU1 a){return AU1_(__builtin_abs(ASU1_(a)));}
+ A_STATIC AL1 AAbsSL1(AL1 a){return AL1_(__builtin_llabs(ASL1_(a)));}
+ #else
+ A_STATIC AD1 AAbsD1(AD1 a){return fabs(a);}
+ A_STATIC AF1 AAbsF1(AF1 a){return fabsf(a);}
+ A_STATIC AU1 AAbsSU1(AU1 a){return AU1_(abs(ASU1_(a)));}
+ A_STATIC AL1 AAbsSL1(AL1 a){return AL1_(labs((long)ASL1_(a)));}
+ #endif
+//------------------------------------------------------------------------------------------------------------------------------
+ #ifdef A_GCC
+ A_STATIC AD1 ACosD1(AD1 a){return __builtin_cos(a);}
+ A_STATIC AF1 ACosF1(AF1 a){return __builtin_cosf(a);}
+ #else
+ A_STATIC AD1 ACosD1(AD1 a){return cos(a);}
+ A_STATIC AF1 ACosF1(AF1 a){return cosf(a);}
+ #endif
+//------------------------------------------------------------------------------------------------------------------------------
+ A_STATIC AD1 ADotD2(inAD2 a,inAD2 b){return a[0]*b[0]+a[1]*b[1];}
+ A_STATIC AD1 ADotD3(inAD3 a,inAD3 b){return a[0]*b[0]+a[1]*b[1]+a[2]*b[2];}
+ A_STATIC AD1 ADotD4(inAD4 a,inAD4 b){return a[0]*b[0]+a[1]*b[1]+a[2]*b[2]+a[3]*b[3];}
+ A_STATIC AF1 ADotF2(inAF2 a,inAF2 b){return a[0]*b[0]+a[1]*b[1];}
+ A_STATIC AF1 ADotF3(inAF3 a,inAF3 b){return a[0]*b[0]+a[1]*b[1]+a[2]*b[2];}
+ A_STATIC AF1 ADotF4(inAF4 a,inAF4 b){return a[0]*b[0]+a[1]*b[1]+a[2]*b[2]+a[3]*b[3];}
+//------------------------------------------------------------------------------------------------------------------------------
+ #ifdef A_GCC
+ A_STATIC AD1 AExp2D1(AD1 a){return __builtin_exp2(a);}
+ A_STATIC AF1 AExp2F1(AF1 a){return __builtin_exp2f(a);}
+ #else
+ A_STATIC AD1 AExp2D1(AD1 a){return exp2(a);}
+ A_STATIC AF1 AExp2F1(AF1 a){return exp2f(a);}
+ #endif
+//------------------------------------------------------------------------------------------------------------------------------
+ #ifdef A_GCC
+ A_STATIC AD1 AFloorD1(AD1 a){return __builtin_floor(a);}
+ A_STATIC AF1 AFloorF1(AF1 a){return __builtin_floorf(a);}
+ #else
+ A_STATIC AD1 AFloorD1(AD1 a){return floor(a);}
+ A_STATIC AF1 AFloorF1(AF1 a){return floorf(a);}
+ #endif
+//------------------------------------------------------------------------------------------------------------------------------
+ A_STATIC AD1 ALerpD1(AD1 a,AD1 b,AD1 c){return b*c+(-a*c+a);}
+ A_STATIC AF1 ALerpF1(AF1 a,AF1 b,AF1 c){return b*c+(-a*c+a);}
+//------------------------------------------------------------------------------------------------------------------------------
+ #ifdef A_GCC
+ A_STATIC AD1 ALog2D1(AD1 a){return __builtin_log2(a);}
+ A_STATIC AF1 ALog2F1(AF1 a){return __builtin_log2f(a);}
+ #else
+ A_STATIC AD1 ALog2D1(AD1 a){return log2(a);}
+ A_STATIC AF1 ALog2F1(AF1 a){return log2f(a);}
+ #endif
+//------------------------------------------------------------------------------------------------------------------------------
+ A_STATIC AD1 AMaxD1(AD1 a,AD1 b){return a>b?a:b;}
+ A_STATIC AF1 AMaxF1(AF1 a,AF1 b){return a>b?a:b;}
+ A_STATIC AL1 AMaxL1(AL1 a,AL1 b){return a>b?a:b;}
+ A_STATIC AU1 AMaxU1(AU1 a,AU1 b){return a>b?a:b;}
+//------------------------------------------------------------------------------------------------------------------------------
+ // These follow the convention that A integer types don't have signage, until they are operated on.
+ A_STATIC AL1 AMaxSL1(AL1 a,AL1 b){return (ASL1_(a)>ASL1_(b))?a:b;}
+ A_STATIC AU1 AMaxSU1(AU1 a,AU1 b){return (ASU1_(a)>ASU1_(b))?a:b;}
+//------------------------------------------------------------------------------------------------------------------------------
+ A_STATIC AD1 AMinD1(AD1 a,AD1 b){return a<b?a:b;}
+ A_STATIC AF1 AMinF1(AF1 a,AF1 b){return a<b?a:b;}
+ A_STATIC AL1 AMinL1(AL1 a,AL1 b){return a<b?a:b;}
+ A_STATIC AU1 AMinU1(AU1 a,AU1 b){return a<b?a:b;}
+//------------------------------------------------------------------------------------------------------------------------------
+ A_STATIC AL1 AMinSL1(AL1 a,AL1 b){return (ASL1_(a)<ASL1_(b))?a:b;}
+ A_STATIC AU1 AMinSU1(AU1 a,AU1 b){return (ASU1_(a)<ASU1_(b))?a:b;}
+//------------------------------------------------------------------------------------------------------------------------------
+ A_STATIC AD1 ARcpD1(AD1 a){return 1.0/a;}
+ A_STATIC AF1 ARcpF1(AF1 a){return 1.0f/a;}
+//------------------------------------------------------------------------------------------------------------------------------
+ A_STATIC AL1 AShrSL1(AL1 a,AL1 b){return AL1_(ASL1_(a)>>ASL1_(b));}
+ A_STATIC AU1 AShrSU1(AU1 a,AU1 b){return AU1_(ASU1_(a)>>ASU1_(b));}
+//------------------------------------------------------------------------------------------------------------------------------
+ #ifdef A_GCC
+ A_STATIC AD1 ASinD1(AD1 a){return __builtin_sin(a);}
+ A_STATIC AF1 ASinF1(AF1 a){return __builtin_sinf(a);}
+ #else
+ A_STATIC AD1 ASinD1(AD1 a){return sin(a);}
+ A_STATIC AF1 ASinF1(AF1 a){return sinf(a);}
+ #endif
+//------------------------------------------------------------------------------------------------------------------------------
+ #ifdef A_GCC
+ A_STATIC AD1 ASqrtD1(AD1 a){return __builtin_sqrt(a);}
+ A_STATIC AF1 ASqrtF1(AF1 a){return __builtin_sqrtf(a);}
+ #else
+ A_STATIC AD1 ASqrtD1(AD1 a){return sqrt(a);}
+ A_STATIC AF1 ASqrtF1(AF1 a){return sqrtf(a);}
+ #endif
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//_____________________________________________________________/\_______________________________________________________________
+//==============================================================================================================================
+// SCALAR RETURN OPS - DEPENDENT
+//==============================================================================================================================
+ A_STATIC AD1 AClampD1(AD1 x,AD1 n,AD1 m){return AMaxD1(n,AMinD1(x,m));}
+ A_STATIC AF1 AClampF1(AF1 x,AF1 n,AF1 m){return AMaxF1(n,AMinF1(x,m));}
+//------------------------------------------------------------------------------------------------------------------------------
+ A_STATIC AD1 AFractD1(AD1 a){return a-AFloorD1(a);}
+ A_STATIC AF1 AFractF1(AF1 a){return a-AFloorF1(a);}
+//------------------------------------------------------------------------------------------------------------------------------
+ A_STATIC AD1 APowD1(AD1 a,AD1 b){return AExp2D1(b*ALog2D1(a));}
+ A_STATIC AF1 APowF1(AF1 a,AF1 b){return AExp2F1(b*ALog2F1(a));}
+//------------------------------------------------------------------------------------------------------------------------------
+ A_STATIC AD1 ARsqD1(AD1 a){return ARcpD1(ASqrtD1(a));}
+ A_STATIC AF1 ARsqF1(AF1 a){return ARcpF1(ASqrtF1(a));}
+//------------------------------------------------------------------------------------------------------------------------------
+ A_STATIC AD1 ASatD1(AD1 a){return AMinD1(1.0,AMaxD1(0.0,a));}
+ A_STATIC AF1 ASatF1(AF1 a){return AMinF1(1.0f,AMaxF1(0.0f,a));}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//_____________________________________________________________/\_______________________________________________________________
+//==============================================================================================================================
+// VECTOR OPS
+//------------------------------------------------------------------------------------------------------------------------------
+// These are added as needed for production or prototyping, so not necessarily a complete set.
+// They follow a convention of taking in a destination and also returning the destination value to increase utility.
+//==============================================================================================================================
+ A_STATIC retAD2 opAAbsD2(outAD2 d,inAD2 a){d[0]=AAbsD1(a[0]);d[1]=AAbsD1(a[1]);return d;}
+ A_STATIC retAD3 opAAbsD3(outAD3 d,inAD3 a){d[0]=AAbsD1(a[0]);d[1]=AAbsD1(a[1]);d[2]=AAbsD1(a[2]);return d;}
+ A_STATIC retAD4 opAAbsD4(outAD4 d,inAD4 a){d[0]=AAbsD1(a[0]);d[1]=AAbsD1(a[1]);d[2]=AAbsD1(a[2]);d[3]=AAbsD1(a[3]);return d;}
+//------------------------------------------------------------------------------------------------------------------------------
+ A_STATIC retAF2 opAAbsF2(outAF2 d,inAF2 a){d[0]=AAbsF1(a[0]);d[1]=AAbsF1(a[1]);return d;}
+ A_STATIC retAF3 opAAbsF3(outAF3 d,inAF3 a){d[0]=AAbsF1(a[0]);d[1]=AAbsF1(a[1]);d[2]=AAbsF1(a[2]);return d;}
+ A_STATIC retAF4 opAAbsF4(outAF4 d,inAF4 a){d[0]=AAbsF1(a[0]);d[1]=AAbsF1(a[1]);d[2]=AAbsF1(a[2]);d[3]=AAbsF1(a[3]);return d;}
+//==============================================================================================================================
+ A_STATIC retAD2 opAAddD2(outAD2 d,inAD2 a,inAD2 b){d[0]=a[0]+b[0];d[1]=a[1]+b[1];return d;}
+ A_STATIC retAD3 opAAddD3(outAD3 d,inAD3 a,inAD3 b){d[0]=a[0]+b[0];d[1]=a[1]+b[1];d[2]=a[2]+b[2];return d;}
+ A_STATIC retAD4 opAAddD4(outAD4 d,inAD4 a,inAD4 b){d[0]=a[0]+b[0];d[1]=a[1]+b[1];d[2]=a[2]+b[2];d[3]=a[3]+b[3];return d;}
+//------------------------------------------------------------------------------------------------------------------------------
+ A_STATIC retAF2 opAAddF2(outAF2 d,inAF2 a,inAF2 b){d[0]=a[0]+b[0];d[1]=a[1]+b[1];return d;}
+ A_STATIC retAF3 opAAddF3(outAF3 d,inAF3 a,inAF3 b){d[0]=a[0]+b[0];d[1]=a[1]+b[1];d[2]=a[2]+b[2];return d;}
+ A_STATIC retAF4 opAAddF4(outAF4 d,inAF4 a,inAF4 b){d[0]=a[0]+b[0];d[1]=a[1]+b[1];d[2]=a[2]+b[2];d[3]=a[3]+b[3];return d;}
+//==============================================================================================================================
+ A_STATIC retAD2 opAAddOneD2(outAD2 d,inAD2 a,AD1 b){d[0]=a[0]+b;d[1]=a[1]+b;return d;}
+ A_STATIC retAD3 opAAddOneD3(outAD3 d,inAD3 a,AD1 b){d[0]=a[0]+b;d[1]=a[1]+b;d[2]=a[2]+b;return d;}
+ A_STATIC retAD4 opAAddOneD4(outAD4 d,inAD4 a,AD1 b){d[0]=a[0]+b;d[1]=a[1]+b;d[2]=a[2]+b;d[3]=a[3]+b;return d;}
+//------------------------------------------------------------------------------------------------------------------------------
+ A_STATIC retAF2 opAAddOneF2(outAF2 d,inAF2 a,AF1 b){d[0]=a[0]+b;d[1]=a[1]+b;return d;}
+ A_STATIC retAF3 opAAddOneF3(outAF3 d,inAF3 a,AF1 b){d[0]=a[0]+b;d[1]=a[1]+b;d[2]=a[2]+b;return d;}
+ A_STATIC retAF4 opAAddOneF4(outAF4 d,inAF4 a,AF1 b){d[0]=a[0]+b;d[1]=a[1]+b;d[2]=a[2]+b;d[3]=a[3]+b;return d;}
+//==============================================================================================================================
+ A_STATIC retAD2 opACpyD2(outAD2 d,inAD2 a){d[0]=a[0];d[1]=a[1];return d;}
+ A_STATIC retAD3 opACpyD3(outAD3 d,inAD3 a){d[0]=a[0];d[1]=a[1];d[2]=a[2];return d;}
+ A_STATIC retAD4 opACpyD4(outAD4 d,inAD4 a){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];return d;}
+//------------------------------------------------------------------------------------------------------------------------------
+ A_STATIC retAF2 opACpyF2(outAF2 d,inAF2 a){d[0]=a[0];d[1]=a[1];return d;}
+ A_STATIC retAF3 opACpyF3(outAF3 d,inAF3 a){d[0]=a[0];d[1]=a[1];d[2]=a[2];return d;}
+ A_STATIC retAF4 opACpyF4(outAF4 d,inAF4 a){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];return d;}
+//==============================================================================================================================
+ A_STATIC retAD2 opALerpD2(outAD2 d,inAD2 a,inAD2 b,inAD2 c){d[0]=ALerpD1(a[0],b[0],c[0]);d[1]=ALerpD1(a[1],b[1],c[1]);return d;}
+ A_STATIC retAD3 opALerpD3(outAD3 d,inAD3 a,inAD3 b,inAD3 c){d[0]=ALerpD1(a[0],b[0],c[0]);d[1]=ALerpD1(a[1],b[1],c[1]);d[2]=ALerpD1(a[2],b[2],c[2]);return d;}
+ A_STATIC retAD4 opALerpD4(outAD4 d,inAD4 a,inAD4 b,inAD4 c){d[0]=ALerpD1(a[0],b[0],c[0]);d[1]=ALerpD1(a[1],b[1],c[1]);d[2]=ALerpD1(a[2],b[2],c[2]);d[3]=ALerpD1(a[3],b[3],c[3]);return d;}
+//------------------------------------------------------------------------------------------------------------------------------
+ A_STATIC retAF2 opALerpF2(outAF2 d,inAF2 a,inAF2 b,inAF2 c){d[0]=ALerpF1(a[0],b[0],c[0]);d[1]=ALerpF1(a[1],b[1],c[1]);return d;}
+ A_STATIC retAF3 opALerpF3(outAF3 d,inAF3 a,inAF3 b,inAF3 c){d[0]=ALerpF1(a[0],b[0],c[0]);d[1]=ALerpF1(a[1],b[1],c[1]);d[2]=ALerpF1(a[2],b[2],c[2]);return d;}
+ A_STATIC retAF4 opALerpF4(outAF4 d,inAF4 a,inAF4 b,inAF4 c){d[0]=ALerpF1(a[0],b[0],c[0]);d[1]=ALerpF1(a[1],b[1],c[1]);d[2]=ALerpF1(a[2],b[2],c[2]);d[3]=ALerpF1(a[3],b[3],c[3]);return d;}
+//==============================================================================================================================
+ A_STATIC retAD2 opALerpOneD2(outAD2 d,inAD2 a,inAD2 b,AD1 c){d[0]=ALerpD1(a[0],b[0],c);d[1]=ALerpD1(a[1],b[1],c);return d;}
+ A_STATIC retAD3 opALerpOneD3(outAD3 d,inAD3 a,inAD3 b,AD1 c){d[0]=ALerpD1(a[0],b[0],c);d[1]=ALerpD1(a[1],b[1],c);d[2]=ALerpD1(a[2],b[2],c);return d;}
+ A_STATIC retAD4 opALerpOneD4(outAD4 d,inAD4 a,inAD4 b,AD1 c){d[0]=ALerpD1(a[0],b[0],c);d[1]=ALerpD1(a[1],b[1],c);d[2]=ALerpD1(a[2],b[2],c);d[3]=ALerpD1(a[3],b[3],c);return d;}
+//------------------------------------------------------------------------------------------------------------------------------
+ A_STATIC retAF2 opALerpOneF2(outAF2 d,inAF2 a,inAF2 b,AF1 c){d[0]=ALerpF1(a[0],b[0],c);d[1]=ALerpF1(a[1],b[1],c);return d;}
+ A_STATIC retAF3 opALerpOneF3(outAF3 d,inAF3 a,inAF3 b,AF1 c){d[0]=ALerpF1(a[0],b[0],c);d[1]=ALerpF1(a[1],b[1],c);d[2]=ALerpF1(a[2],b[2],c);return d;}
+ A_STATIC retAF4 opALerpOneF4(outAF4 d,inAF4 a,inAF4 b,AF1 c){d[0]=ALerpF1(a[0],b[0],c);d[1]=ALerpF1(a[1],b[1],c);d[2]=ALerpF1(a[2],b[2],c);d[3]=ALerpF1(a[3],b[3],c);return d;}
+//==============================================================================================================================
+ A_STATIC retAD2 opAMaxD2(outAD2 d,inAD2 a,inAD2 b){d[0]=AMaxD1(a[0],b[0]);d[1]=AMaxD1(a[1],b[1]);return d;}
+ A_STATIC retAD3 opAMaxD3(outAD3 d,inAD3 a,inAD3 b){d[0]=AMaxD1(a[0],b[0]);d[1]=AMaxD1(a[1],b[1]);d[2]=AMaxD1(a[2],b[2]);return d;}
+ A_STATIC retAD4 opAMaxD4(outAD4 d,inAD4 a,inAD4 b){d[0]=AMaxD1(a[0],b[0]);d[1]=AMaxD1(a[1],b[1]);d[2]=AMaxD1(a[2],b[2]);d[3]=AMaxD1(a[3],b[3]);return d;}
+//------------------------------------------------------------------------------------------------------------------------------
+ A_STATIC retAF2 opAMaxF2(outAF2 d,inAF2 a,inAF2 b){d[0]=AMaxF1(a[0],b[0]);d[1]=AMaxF1(a[1],b[1]);return d;}
+ A_STATIC retAF3 opAMaxF3(outAF3 d,inAF3 a,inAF3 b){d[0]=AMaxF1(a[0],b[0]);d[1]=AMaxF1(a[1],b[1]);d[2]=AMaxF1(a[2],b[2]);return d;}
+ A_STATIC retAF4 opAMaxF4(outAF4 d,inAF4 a,inAF4 b){d[0]=AMaxF1(a[0],b[0]);d[1]=AMaxF1(a[1],b[1]);d[2]=AMaxF1(a[2],b[2]);d[3]=AMaxF1(a[3],b[3]);return d;}
+//==============================================================================================================================
+ A_STATIC retAD2 opAMinD2(outAD2 d,inAD2 a,inAD2 b){d[0]=AMinD1(a[0],b[0]);d[1]=AMinD1(a[1],b[1]);return d;}
+ A_STATIC retAD3 opAMinD3(outAD3 d,inAD3 a,inAD3 b){d[0]=AMinD1(a[0],b[0]);d[1]=AMinD1(a[1],b[1]);d[2]=AMinD1(a[2],b[2]);return d;}
+ A_STATIC retAD4 opAMinD4(outAD4 d,inAD4 a,inAD4 b){d[0]=AMinD1(a[0],b[0]);d[1]=AMinD1(a[1],b[1]);d[2]=AMinD1(a[2],b[2]);d[3]=AMinD1(a[3],b[3]);return d;}
+//------------------------------------------------------------------------------------------------------------------------------
+ A_STATIC retAF2 opAMinF2(outAF2 d,inAF2 a,inAF2 b){d[0]=AMinF1(a[0],b[0]);d[1]=AMinF1(a[1],b[1]);return d;}
+ A_STATIC retAF3 opAMinF3(outAF3 d,inAF3 a,inAF3 b){d[0]=AMinF1(a[0],b[0]);d[1]=AMinF1(a[1],b[1]);d[2]=AMinF1(a[2],b[2]);return d;}
+ A_STATIC retAF4 opAMinF4(outAF4 d,inAF4 a,inAF4 b){d[0]=AMinF1(a[0],b[0]);d[1]=AMinF1(a[1],b[1]);d[2]=AMinF1(a[2],b[2]);d[3]=AMinF1(a[3],b[3]);return d;}
+//==============================================================================================================================
+ A_STATIC retAD2 opAMulD2(outAD2 d,inAD2 a,inAD2 b){d[0]=a[0]*b[0];d[1]=a[1]*b[1];return d;}
+ A_STATIC retAD3 opAMulD3(outAD3 d,inAD3 a,inAD3 b){d[0]=a[0]*b[0];d[1]=a[1]*b[1];d[2]=a[2]*b[2];return d;}
+ A_STATIC retAD4 opAMulD4(outAD4 d,inAD4 a,inAD4 b){d[0]=a[0]*b[0];d[1]=a[1]*b[1];d[2]=a[2]*b[2];d[3]=a[3]*b[3];return d;}
+//------------------------------------------------------------------------------------------------------------------------------
+ A_STATIC retAF2 opAMulF2(outAF2 d,inAF2 a,inAF2 b){d[0]=a[0]*b[0];d[1]=a[1]*b[1];return d;}
+ A_STATIC retAF3 opAMulF3(outAF3 d,inAF3 a,inAF3 b){d[0]=a[0]*b[0];d[1]=a[1]*b[1];d[2]=a[2]*b[2];return d;}
+ A_STATIC retAF4 opAMulF4(outAF4 d,inAF4 a,inAF4 b){d[0]=a[0]*b[0];d[1]=a[1]*b[1];d[2]=a[2]*b[2];d[3]=a[3]*b[3];return d;}
+//==============================================================================================================================
+ A_STATIC retAD2 opAMulOneD2(outAD2 d,inAD2 a,AD1 b){d[0]=a[0]*b;d[1]=a[1]*b;return d;}
+ A_STATIC retAD3 opAMulOneD3(outAD3 d,inAD3 a,AD1 b){d[0]=a[0]*b;d[1]=a[1]*b;d[2]=a[2]*b;return d;}
+ A_STATIC retAD4 opAMulOneD4(outAD4 d,inAD4 a,AD1 b){d[0]=a[0]*b;d[1]=a[1]*b;d[2]=a[2]*b;d[3]=a[3]*b;return d;}
+//------------------------------------------------------------------------------------------------------------------------------
+ A_STATIC retAF2 opAMulOneF2(outAF2 d,inAF2 a,AF1 b){d[0]=a[0]*b;d[1]=a[1]*b;return d;}
+ A_STATIC retAF3 opAMulOneF3(outAF3 d,inAF3 a,AF1 b){d[0]=a[0]*b;d[1]=a[1]*b;d[2]=a[2]*b;return d;}
+ A_STATIC retAF4 opAMulOneF4(outAF4 d,inAF4 a,AF1 b){d[0]=a[0]*b;d[1]=a[1]*b;d[2]=a[2]*b;d[3]=a[3]*b;return d;}
+//==============================================================================================================================
+ A_STATIC retAD2 opANegD2(outAD2 d,inAD2 a){d[0]=-a[0];d[1]=-a[1];return d;}
+ A_STATIC retAD3 opANegD3(outAD3 d,inAD3 a){d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d;}
+ A_STATIC retAD4 opANegD4(outAD4 d,inAD4 a){d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];d[3]=-a[3];return d;}
+//------------------------------------------------------------------------------------------------------------------------------
+ A_STATIC retAF2 opANegF2(outAF2 d,inAF2 a){d[0]=-a[0];d[1]=-a[1];return d;}
+ A_STATIC retAF3 opANegF3(outAF3 d,inAF3 a){d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d;}
+ A_STATIC retAF4 opANegF4(outAF4 d,inAF4 a){d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];d[3]=-a[3];return d;}
+//==============================================================================================================================
+ A_STATIC retAD2 opARcpD2(outAD2 d,inAD2 a){d[0]=ARcpD1(a[0]);d[1]=ARcpD1(a[1]);return d;}
+ A_STATIC retAD3 opARcpD3(outAD3 d,inAD3 a){d[0]=ARcpD1(a[0]);d[1]=ARcpD1(a[1]);d[2]=ARcpD1(a[2]);return d;}
+ A_STATIC retAD4 opARcpD4(outAD4 d,inAD4 a){d[0]=ARcpD1(a[0]);d[1]=ARcpD1(a[1]);d[2]=ARcpD1(a[2]);d[3]=ARcpD1(a[3]);return d;}
+//------------------------------------------------------------------------------------------------------------------------------
+ A_STATIC retAF2 opARcpF2(outAF2 d,inAF2 a){d[0]=ARcpF1(a[0]);d[1]=ARcpF1(a[1]);return d;}
+ A_STATIC retAF3 opARcpF3(outAF3 d,inAF3 a){d[0]=ARcpF1(a[0]);d[1]=ARcpF1(a[1]);d[2]=ARcpF1(a[2]);return d;}
+ A_STATIC retAF4 opARcpF4(outAF4 d,inAF4 a){d[0]=ARcpF1(a[0]);d[1]=ARcpF1(a[1]);d[2]=ARcpF1(a[2]);d[3]=ARcpF1(a[3]);return d;}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//_____________________________________________________________/\_______________________________________________________________
+//==============================================================================================================================
+// HALF FLOAT PACKING
+//==============================================================================================================================
+ // Convert float to half (in lower 16-bits of output).
+ // Same fast technique as documented here: ftp://ftp.fox-toolkit.org/pub/fasthalffloatconversion.pdf
+ // Supports denormals.
+ // Conversion rules are to make computations possibly "safer" on the GPU,
+ // -INF & -NaN -> -65504
+ // +INF & +NaN -> +65504
+ A_STATIC AU1 AU1_AH1_AF1(AF1 f){
+ static AW1 base[512]={
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0001,0x0002,0x0004,0x0008,0x0010,0x0020,0x0040,0x0080,0x0100,
+ 0x0200,0x0400,0x0800,0x0c00,0x1000,0x1400,0x1800,0x1c00,0x2000,0x2400,0x2800,0x2c00,0x3000,0x3400,0x3800,0x3c00,
+ 0x4000,0x4400,0x4800,0x4c00,0x5000,0x5400,0x5800,0x5c00,0x6000,0x6400,0x6800,0x6c00,0x7000,0x7400,0x7800,0x7bff,
+ 0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,
+ 0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,
+ 0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,
+ 0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,
+ 0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,
+ 0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,
+ 0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,0x7bff,
+ 0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,
+ 0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,
+ 0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,
+ 0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,
+ 0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,
+ 0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,
+ 0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8001,0x8002,0x8004,0x8008,0x8010,0x8020,0x8040,0x8080,0x8100,
+ 0x8200,0x8400,0x8800,0x8c00,0x9000,0x9400,0x9800,0x9c00,0xa000,0xa400,0xa800,0xac00,0xb000,0xb400,0xb800,0xbc00,
+ 0xc000,0xc400,0xc800,0xcc00,0xd000,0xd400,0xd800,0xdc00,0xe000,0xe400,0xe800,0xec00,0xf000,0xf400,0xf800,0xfbff,
+ 0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,
+ 0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,
+ 0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,
+ 0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,
+ 0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,
+ 0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,
+ 0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff,0xfbff};
+ static AB1 shift[512]={
+ 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
+ 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
+ 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
+ 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
+ 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
+ 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
+ 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x16,0x15,0x14,0x13,0x12,0x11,0x10,0x0f,
+ 0x0e,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,
+ 0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x18,
+ 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
+ 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
+ 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
+ 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
+ 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
+ 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
+ 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
+ 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
+ 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
+ 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
+ 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
+ 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
+ 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
+ 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x16,0x15,0x14,0x13,0x12,0x11,0x10,0x0f,
+ 0x0e,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,
+ 0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x18,
+ 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
+ 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
+ 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
+ 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
+ 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
+ 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
+ 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18};
+ union{AF1 f;AU1 u;}bits;bits.f=f;AU1 u=bits.u;AU1 i=u>>23;return (AU1)(base[i])+((u&0x7fffff)>>shift[i]);}
+//------------------------------------------------------------------------------------------------------------------------------
+ // Used to output packed constant.
+ A_STATIC AU1 AU1_AH2_AF2(inAF2 a){return AU1_AH1_AF1(a[0])+(AU1_AH1_AF1(a[1])<<16);}
+#endif
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//_____________________________________________________________/\_______________________________________________________________
+//==============================================================================================================================
+//
+//
+// GLSL
+//
+//
+//==============================================================================================================================
+#if defined(A_GLSL) && defined(A_GPU)
+ #ifndef A_SKIP_EXT
+ #ifdef A_HALF
+ #extension GL_EXT_shader_16bit_storage:require
+ #extension GL_EXT_shader_explicit_arithmetic_types:require
+ #endif
+//------------------------------------------------------------------------------------------------------------------------------
+ #ifdef A_LONG
+ #extension GL_ARB_gpu_shader_int64:require
+ #extension GL_NV_shader_atomic_int64:require
+ #endif
+//------------------------------------------------------------------------------------------------------------------------------
+ #ifdef A_WAVE
+ #extension GL_KHR_shader_subgroup_arithmetic:require
+ #extension GL_KHR_shader_subgroup_ballot:require
+ #extension GL_KHR_shader_subgroup_quad:require
+ #extension GL_KHR_shader_subgroup_shuffle:require
+ #endif
+ #endif
+//==============================================================================================================================
+ #define AP1 bool
+ #define AP2 bvec2
+ #define AP3 bvec3
+ #define AP4 bvec4
+//------------------------------------------------------------------------------------------------------------------------------
+ #define AF1 float
+ #define AF2 vec2
+ #define AF3 vec3
+ #define AF4 vec4
+//------------------------------------------------------------------------------------------------------------------------------
+ #define AU1 uint
+ #define AU2 uvec2
+ #define AU3 uvec3
+ #define AU4 uvec4
+//------------------------------------------------------------------------------------------------------------------------------
+ #define ASU1 int
+ #define ASU2 ivec2
+ #define ASU3 ivec3
+ #define ASU4 ivec4
+//==============================================================================================================================
+ #define AF1_AU1(x) uintBitsToFloat(AU1(x))
+ #define AF2_AU2(x) uintBitsToFloat(AU2(x))
+ #define AF3_AU3(x) uintBitsToFloat(AU3(x))
+ #define AF4_AU4(x) uintBitsToFloat(AU4(x))
+//------------------------------------------------------------------------------------------------------------------------------
+ #define AU1_AF1(x) floatBitsToUint(AF1(x))
+ #define AU2_AF2(x) floatBitsToUint(AF2(x))
+ #define AU3_AF3(x) floatBitsToUint(AF3(x))
+ #define AU4_AF4(x) floatBitsToUint(AF4(x))
+//------------------------------------------------------------------------------------------------------------------------------
+ AU1 AU1_AH1_AF1_x(AF1 a){return packHalf2x16(AF2(a,0.0));}
+ #define AU1_AH1_AF1(a) AU1_AH1_AF1_x(AF1(a))
+//------------------------------------------------------------------------------------------------------------------------------
+ #define AU1_AH2_AF2 packHalf2x16
+ #define AU1_AW2Unorm_AF2 packUnorm2x16
+ #define AU1_AB4Unorm_AF4 packUnorm4x8
+//------------------------------------------------------------------------------------------------------------------------------
+ #define AF2_AH2_AU1 unpackHalf2x16
+ #define AF2_AW2Unorm_AU1 unpackUnorm2x16
+ #define AF4_AB4Unorm_AU1 unpackUnorm4x8
+//==============================================================================================================================
+ AF1 AF1_x(AF1 a){return AF1(a);}
+ AF2 AF2_x(AF1 a){return AF2(a,a);}
+ AF3 AF3_x(AF1 a){return AF3(a,a,a);}
+ AF4 AF4_x(AF1 a){return AF4(a,a,a,a);}
+ #define AF1_(a) AF1_x(AF1(a))
+ #define AF2_(a) AF2_x(AF1(a))
+ #define AF3_(a) AF3_x(AF1(a))
+ #define AF4_(a) AF4_x(AF1(a))
+//------------------------------------------------------------------------------------------------------------------------------
+ AU1 AU1_x(AU1 a){return AU1(a);}
+ AU2 AU2_x(AU1 a){return AU2(a,a);}
+ AU3 AU3_x(AU1 a){return AU3(a,a,a);}
+ AU4 AU4_x(AU1 a){return AU4(a,a,a,a);}
+ #define AU1_(a) AU1_x(AU1(a))
+ #define AU2_(a) AU2_x(AU1(a))
+ #define AU3_(a) AU3_x(AU1(a))
+ #define AU4_(a) AU4_x(AU1(a))
+//==============================================================================================================================
+ AU1 AAbsSU1(AU1 a){return AU1(abs(ASU1(a)));}
+ AU2 AAbsSU2(AU2 a){return AU2(abs(ASU2(a)));}
+ AU3 AAbsSU3(AU3 a){return AU3(abs(ASU3(a)));}
+ AU4 AAbsSU4(AU4 a){return AU4(abs(ASU4(a)));}
+//------------------------------------------------------------------------------------------------------------------------------
+ AU1 ABfe(AU1 src,AU1 off,AU1 bits){return bitfieldExtract(src,ASU1(off),ASU1(bits));}
+ AU1 ABfi(AU1 src,AU1 ins,AU1 mask){return (ins&mask)|(src&(~mask));}
+ // Proxy for V_BFI_B32 where the 'mask' is set as 'bits', 'mask=(1<<bits)-1', and 'bits' needs to be an immediate.
+ AU1 ABfiM(AU1 src,AU1 ins,AU1 bits){return bitfieldInsert(src,ins,0,ASU1(bits));}
+//------------------------------------------------------------------------------------------------------------------------------
+ // V_MED3_F32.
+ AF1 AClampF1(AF1 x,AF1 n,AF1 m){return clamp(x,n,m);}
+ AF2 AClampF2(AF2 x,AF2 n,AF2 m){return clamp(x,n,m);}
+ AF3 AClampF3(AF3 x,AF3 n,AF3 m){return clamp(x,n,m);}
+ AF4 AClampF4(AF4 x,AF4 n,AF4 m){return clamp(x,n,m);}
+//------------------------------------------------------------------------------------------------------------------------------
+ // V_FRACT_F32 (note DX frac() is different).
+ AF1 AFractF1(AF1 x){return fract(x);}
+ AF2 AFractF2(AF2 x){return fract(x);}
+ AF3 AFractF3(AF3 x){return fract(x);}
+ AF4 AFractF4(AF4 x){return fract(x);}
+//------------------------------------------------------------------------------------------------------------------------------
+ AF1 ALerpF1(AF1 x,AF1 y,AF1 a){return mix(x,y,a);}
+ AF2 ALerpF2(AF2 x,AF2 y,AF2 a){return mix(x,y,a);}
+ AF3 ALerpF3(AF3 x,AF3 y,AF3 a){return mix(x,y,a);}
+ AF4 ALerpF4(AF4 x,AF4 y,AF4 a){return mix(x,y,a);}
+//------------------------------------------------------------------------------------------------------------------------------
+ // V_MAX3_F32.
+ AF1 AMax3F1(AF1 x,AF1 y,AF1 z){return max(x,max(y,z));}
+ AF2 AMax3F2(AF2 x,AF2 y,AF2 z){return max(x,max(y,z));}
+ AF3 AMax3F3(AF3 x,AF3 y,AF3 z){return max(x,max(y,z));}
+ AF4 AMax3F4(AF4 x,AF4 y,AF4 z){return max(x,max(y,z));}
+//------------------------------------------------------------------------------------------------------------------------------
+ AU1 AMax3SU1(AU1 x,AU1 y,AU1 z){return AU1(max(ASU1(x),max(ASU1(y),ASU1(z))));}
+ AU2 AMax3SU2(AU2 x,AU2 y,AU2 z){return AU2(max(ASU2(x),max(ASU2(y),ASU2(z))));}
+ AU3 AMax3SU3(AU3 x,AU3 y,AU3 z){return AU3(max(ASU3(x),max(ASU3(y),ASU3(z))));}
+ AU4 AMax3SU4(AU4 x,AU4 y,AU4 z){return AU4(max(ASU4(x),max(ASU4(y),ASU4(z))));}
+//------------------------------------------------------------------------------------------------------------------------------
+ AU1 AMax3U1(AU1 x,AU1 y,AU1 z){return max(x,max(y,z));}
+ AU2 AMax3U2(AU2 x,AU2 y,AU2 z){return max(x,max(y,z));}
+ AU3 AMax3U3(AU3 x,AU3 y,AU3 z){return max(x,max(y,z));}
+ AU4 AMax3U4(AU4 x,AU4 y,AU4 z){return max(x,max(y,z));}
+//------------------------------------------------------------------------------------------------------------------------------
+ AU1 AMaxSU1(AU1 a,AU1 b){return AU1(max(ASU1(a),ASU1(b)));}
+ AU2 AMaxSU2(AU2 a,AU2 b){return AU2(max(ASU2(a),ASU2(b)));}
+ AU3 AMaxSU3(AU3 a,AU3 b){return AU3(max(ASU3(a),ASU3(b)));}
+ AU4 AMaxSU4(AU4 a,AU4 b){return AU4(max(ASU4(a),ASU4(b)));}
+//------------------------------------------------------------------------------------------------------------------------------
+ // Clamp has an easier pattern match for med3 when some ordering is known.
+ // V_MED3_F32.
+ AF1 AMed3F1(AF1 x,AF1 y,AF1 z){return max(min(x,y),min(max(x,y),z));}
+ AF2 AMed3F2(AF2 x,AF2 y,AF2 z){return max(min(x,y),min(max(x,y),z));}
+ AF3 AMed3F3(AF3 x,AF3 y,AF3 z){return max(min(x,y),min(max(x,y),z));}
+ AF4 AMed3F4(AF4 x,AF4 y,AF4 z){return max(min(x,y),min(max(x,y),z));}
+//------------------------------------------------------------------------------------------------------------------------------
+ // V_MIN3_F32.
+ AF1 AMin3F1(AF1 x,AF1 y,AF1 z){return min(x,min(y,z));}
+ AF2 AMin3F2(AF2 x,AF2 y,AF2 z){return min(x,min(y,z));}
+ AF3 AMin3F3(AF3 x,AF3 y,AF3 z){return min(x,min(y,z));}
+ AF4 AMin3F4(AF4 x,AF4 y,AF4 z){return min(x,min(y,z));}
+//------------------------------------------------------------------------------------------------------------------------------
+ AU1 AMin3SU1(AU1 x,AU1 y,AU1 z){return AU1(min(ASU1(x),min(ASU1(y),ASU1(z))));}
+ AU2 AMin3SU2(AU2 x,AU2 y,AU2 z){return AU2(min(ASU2(x),min(ASU2(y),ASU2(z))));}
+ AU3 AMin3SU3(AU3 x,AU3 y,AU3 z){return AU3(min(ASU3(x),min(ASU3(y),ASU3(z))));}
+ AU4 AMin3SU4(AU4 x,AU4 y,AU4 z){return AU4(min(ASU4(x),min(ASU4(y),ASU4(z))));}
+//------------------------------------------------------------------------------------------------------------------------------
+ AU1 AMin3U1(AU1 x,AU1 y,AU1 z){return min(x,min(y,z));}
+ AU2 AMin3U2(AU2 x,AU2 y,AU2 z){return min(x,min(y,z));}
+ AU3 AMin3U3(AU3 x,AU3 y,AU3 z){return min(x,min(y,z));}
+ AU4 AMin3U4(AU4 x,AU4 y,AU4 z){return min(x,min(y,z));}
+//------------------------------------------------------------------------------------------------------------------------------
+ AU1 AMinSU1(AU1 a,AU1 b){return AU1(min(ASU1(a),ASU1(b)));}
+ AU2 AMinSU2(AU2 a,AU2 b){return AU2(min(ASU2(a),ASU2(b)));}
+ AU3 AMinSU3(AU3 a,AU3 b){return AU3(min(ASU3(a),ASU3(b)));}
+ AU4 AMinSU4(AU4 a,AU4 b){return AU4(min(ASU4(a),ASU4(b)));}
+//------------------------------------------------------------------------------------------------------------------------------
+ // Normalized trig. Valid input domain is {-256 to +256}. No GLSL compiler intrinsic exists to map to this currently.
+ // V_COS_F32.
+ AF1 ANCosF1(AF1 x){return cos(x*AF1_(A_2PI));}
+ AF2 ANCosF2(AF2 x){return cos(x*AF2_(A_2PI));}
+ AF3 ANCosF3(AF3 x){return cos(x*AF3_(A_2PI));}
+ AF4 ANCosF4(AF4 x){return cos(x*AF4_(A_2PI));}
+//------------------------------------------------------------------------------------------------------------------------------
+ // Normalized trig. Valid input domain is {-256 to +256}. No GLSL compiler intrinsic exists to map to this currently.
+ // V_SIN_F32.
+ AF1 ANSinF1(AF1 x){return sin(x*AF1_(A_2PI));}
+ AF2 ANSinF2(AF2 x){return sin(x*AF2_(A_2PI));}
+ AF3 ANSinF3(AF3 x){return sin(x*AF3_(A_2PI));}
+ AF4 ANSinF4(AF4 x){return sin(x*AF4_(A_2PI));}
+//------------------------------------------------------------------------------------------------------------------------------
+ AF1 ARcpF1(AF1 x){return AF1_(1.0)/x;}
+ AF2 ARcpF2(AF2 x){return AF2_(1.0)/x;}
+ AF3 ARcpF3(AF3 x){return AF3_(1.0)/x;}
+ AF4 ARcpF4(AF4 x){return AF4_(1.0)/x;}
+//------------------------------------------------------------------------------------------------------------------------------
+ AF1 ARsqF1(AF1 x){return AF1_(1.0)/sqrt(x);}
+ AF2 ARsqF2(AF2 x){return AF2_(1.0)/sqrt(x);}
+ AF3 ARsqF3(AF3 x){return AF3_(1.0)/sqrt(x);}
+ AF4 ARsqF4(AF4 x){return AF4_(1.0)/sqrt(x);}
+//------------------------------------------------------------------------------------------------------------------------------
+ AF1 ASatF1(AF1 x){return clamp(x,AF1_(0.0),AF1_(1.0));}
+ AF2 ASatF2(AF2 x){return clamp(x,AF2_(0.0),AF2_(1.0));}
+ AF3 ASatF3(AF3 x){return clamp(x,AF3_(0.0),AF3_(1.0));}
+ AF4 ASatF4(AF4 x){return clamp(x,AF4_(0.0),AF4_(1.0));}
+//------------------------------------------------------------------------------------------------------------------------------
+ AU1 AShrSU1(AU1 a,AU1 b){return AU1(ASU1(a)>>ASU1(b));}
+ AU2 AShrSU2(AU2 a,AU2 b){return AU2(ASU2(a)>>ASU2(b));}
+ AU3 AShrSU3(AU3 a,AU3 b){return AU3(ASU3(a)>>ASU3(b));}
+ AU4 AShrSU4(AU4 a,AU4 b){return AU4(ASU4(a)>>ASU4(b));}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//_____________________________________________________________/\_______________________________________________________________
+//==============================================================================================================================
+// GLSL BYTE
+//==============================================================================================================================
+ #ifdef A_BYTE
+ #define AB1 uint8_t
+ #define AB2 u8vec2
+ #define AB3 u8vec3
+ #define AB4 u8vec4
+//------------------------------------------------------------------------------------------------------------------------------
+ #define ASB1 int8_t
+ #define ASB2 i8vec2
+ #define ASB3 i8vec3
+ #define ASB4 i8vec4
+//------------------------------------------------------------------------------------------------------------------------------
+ AB1 AB1_x(AB1 a){return AB1(a);}
+ AB2 AB2_x(AB1 a){return AB2(a,a);}
+ AB3 AB3_x(AB1 a){return AB3(a,a,a);}
+ AB4 AB4_x(AB1 a){return AB4(a,a,a,a);}
+ #define AB1_(a) AB1_x(AB1(a))
+ #define AB2_(a) AB2_x(AB1(a))
+ #define AB3_(a) AB3_x(AB1(a))
+ #define AB4_(a) AB4_x(AB1(a))
+ #endif
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//_____________________________________________________________/\_______________________________________________________________
+//==============================================================================================================================
+// GLSL HALF
+//==============================================================================================================================
+ #ifdef A_HALF
+ #define AH1 float16_t
+ #define AH2 f16vec2
+ #define AH3 f16vec3
+ #define AH4 f16vec4
+//------------------------------------------------------------------------------------------------------------------------------
+ #define AW1 uint16_t
+ #define AW2 u16vec2
+ #define AW3 u16vec3
+ #define AW4 u16vec4
+//------------------------------------------------------------------------------------------------------------------------------
+ #define ASW1 int16_t
+ #define ASW2 i16vec2
+ #define ASW3 i16vec3
+ #define ASW4 i16vec4
+//==============================================================================================================================
+ #define AH2_AU1(x) unpackFloat2x16(AU1(x))
+ AH4 AH4_AU2_x(AU2 x){return AH4(unpackFloat2x16(x.x),unpackFloat2x16(x.y));}
+ #define AH4_AU2(x) AH4_AU2_x(AU2(x))
+ #define AW2_AU1(x) unpackUint2x16(AU1(x))
+ #define AW4_AU2(x) unpackUint4x16(pack64(AU2(x)))
+//------------------------------------------------------------------------------------------------------------------------------
+ #define AU1_AH2(x) packFloat2x16(AH2(x))
+ AU2 AU2_AH4_x(AH4 x){return AU2(packFloat2x16(x.xy),packFloat2x16(x.zw));}
+ #define AU2_AH4(x) AU2_AH4_x(AH4(x))
+ #define AU1_AW2(x) packUint2x16(AW2(x))
+ #define AU2_AW4(x) unpack32(packUint4x16(AW4(x)))
+//==============================================================================================================================
+ #define AW1_AH1(x) halfBitsToUint16(AH1(x))
+ #define AW2_AH2(x) halfBitsToUint16(AH2(x))
+ #define AW3_AH3(x) halfBitsToUint16(AH3(x))
+ #define AW4_AH4(x) halfBitsToUint16(AH4(x))
+//------------------------------------------------------------------------------------------------------------------------------
+ #define AH1_AW1(x) uint16BitsToHalf(AW1(x))
+ #define AH2_AW2(x) uint16BitsToHalf(AW2(x))
+ #define AH3_AW3(x) uint16BitsToHalf(AW3(x))
+ #define AH4_AW4(x) uint16BitsToHalf(AW4(x))
+//==============================================================================================================================
+ AH1 AH1_x(AH1 a){return AH1(a);}
+ AH2 AH2_x(AH1 a){return AH2(a,a);}
+ AH3 AH3_x(AH1 a){return AH3(a,a,a);}
+ AH4 AH4_x(AH1 a){return AH4(a,a,a,a);}
+ #define AH1_(a) AH1_x(AH1(a))
+ #define AH2_(a) AH2_x(AH1(a))
+ #define AH3_(a) AH3_x(AH1(a))
+ #define AH4_(a) AH4_x(AH1(a))
+//------------------------------------------------------------------------------------------------------------------------------
+ AW1 AW1_x(AW1 a){return AW1(a);}
+ AW2 AW2_x(AW1 a){return AW2(a,a);}
+ AW3 AW3_x(AW1 a){return AW3(a,a,a);}
+ AW4 AW4_x(AW1 a){return AW4(a,a,a,a);}
+ #define AW1_(a) AW1_x(AW1(a))
+ #define AW2_(a) AW2_x(AW1(a))
+ #define AW3_(a) AW3_x(AW1(a))
+ #define AW4_(a) AW4_x(AW1(a))
+//==============================================================================================================================
+ AW1 AAbsSW1(AW1 a){return AW1(abs(ASW1(a)));}
+ AW2 AAbsSW2(AW2 a){return AW2(abs(ASW2(a)));}
+ AW3 AAbsSW3(AW3 a){return AW3(abs(ASW3(a)));}
+ AW4 AAbsSW4(AW4 a){return AW4(abs(ASW4(a)));}
+//------------------------------------------------------------------------------------------------------------------------------
+ AH1 AClampH1(AH1 x,AH1 n,AH1 m){return clamp(x,n,m);}
+ AH2 AClampH2(AH2 x,AH2 n,AH2 m){return clamp(x,n,m);}
+ AH3 AClampH3(AH3 x,AH3 n,AH3 m){return clamp(x,n,m);}
+ AH4 AClampH4(AH4 x,AH4 n,AH4 m){return clamp(x,n,m);}
+//------------------------------------------------------------------------------------------------------------------------------
+ AH1 AFractH1(AH1 x){return fract(x);}
+ AH2 AFractH2(AH2 x){return fract(x);}
+ AH3 AFractH3(AH3 x){return fract(x);}
+ AH4 AFractH4(AH4 x){return fract(x);}
+//------------------------------------------------------------------------------------------------------------------------------
+ AH1 ALerpH1(AH1 x,AH1 y,AH1 a){return mix(x,y,a);}
+ AH2 ALerpH2(AH2 x,AH2 y,AH2 a){return mix(x,y,a);}
+ AH3 ALerpH3(AH3 x,AH3 y,AH3 a){return mix(x,y,a);}
+ AH4 ALerpH4(AH4 x,AH4 y,AH4 a){return mix(x,y,a);}
+//------------------------------------------------------------------------------------------------------------------------------
+ // No packed version of max3.
+ AH1 AMax3H1(AH1 x,AH1 y,AH1 z){return max(x,max(y,z));}
+ AH2 AMax3H2(AH2 x,AH2 y,AH2 z){return max(x,max(y,z));}
+ AH3 AMax3H3(AH3 x,AH3 y,AH3 z){return max(x,max(y,z));}
+ AH4 AMax3H4(AH4 x,AH4 y,AH4 z){return max(x,max(y,z));}
+//------------------------------------------------------------------------------------------------------------------------------
+ AW1 AMaxSW1(AW1 a,AW1 b){return AW1(max(ASU1(a),ASU1(b)));}
+ AW2 AMaxSW2(AW2 a,AW2 b){return AW2(max(ASU2(a),ASU2(b)));}
+ AW3 AMaxSW3(AW3 a,AW3 b){return AW3(max(ASU3(a),ASU3(b)));}
+ AW4 AMaxSW4(AW4 a,AW4 b){return AW4(max(ASU4(a),ASU4(b)));}
+//------------------------------------------------------------------------------------------------------------------------------
+ // No packed version of min3.
+ AH1 AMin3H1(AH1 x,AH1 y,AH1 z){return min(x,min(y,z));}
+ AH2 AMin3H2(AH2 x,AH2 y,AH2 z){return min(x,min(y,z));}
+ AH3 AMin3H3(AH3 x,AH3 y,AH3 z){return min(x,min(y,z));}
+ AH4 AMin3H4(AH4 x,AH4 y,AH4 z){return min(x,min(y,z));}
+//------------------------------------------------------------------------------------------------------------------------------
+ AW1 AMinSW1(AW1 a,AW1 b){return AW1(min(ASU1(a),ASU1(b)));}
+ AW2 AMinSW2(AW2 a,AW2 b){return AW2(min(ASU2(a),ASU2(b)));}
+ AW3 AMinSW3(AW3 a,AW3 b){return AW3(min(ASU3(a),ASU3(b)));}
+ AW4 AMinSW4(AW4 a,AW4 b){return AW4(min(ASU4(a),ASU4(b)));}
+//------------------------------------------------------------------------------------------------------------------------------
+ AH1 ARcpH1(AH1 x){return AH1_(1.0)/x;}
+ AH2 ARcpH2(AH2 x){return AH2_(1.0)/x;}
+ AH3 ARcpH3(AH3 x){return AH3_(1.0)/x;}
+ AH4 ARcpH4(AH4 x){return AH4_(1.0)/x;}
+//------------------------------------------------------------------------------------------------------------------------------
+ AH1 ARsqH1(AH1 x){return AH1_(1.0)/sqrt(x);}
+ AH2 ARsqH2(AH2 x){return AH2_(1.0)/sqrt(x);}
+ AH3 ARsqH3(AH3 x){return AH3_(1.0)/sqrt(x);}
+ AH4 ARsqH4(AH4 x){return AH4_(1.0)/sqrt(x);}
+//------------------------------------------------------------------------------------------------------------------------------
+ AH1 ASatH1(AH1 x){return clamp(x,AH1_(0.0),AH1_(1.0));}
+ AH2 ASatH2(AH2 x){return clamp(x,AH2_(0.0),AH2_(1.0));}
+ AH3 ASatH3(AH3 x){return clamp(x,AH3_(0.0),AH3_(1.0));}
+ AH4 ASatH4(AH4 x){return clamp(x,AH4_(0.0),AH4_(1.0));}
+//------------------------------------------------------------------------------------------------------------------------------
+ AW1 AShrSW1(AW1 a,AW1 b){return AW1(ASW1(a)>>ASW1(b));}
+ AW2 AShrSW2(AW2 a,AW2 b){return AW2(ASW2(a)>>ASW2(b));}
+ AW3 AShrSW3(AW3 a,AW3 b){return AW3(ASW3(a)>>ASW3(b));}
+ AW4 AShrSW4(AW4 a,AW4 b){return AW4(ASW4(a)>>ASW4(b));}
+ #endif
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//_____________________________________________________________/\_______________________________________________________________
+//==============================================================================================================================
+// GLSL DOUBLE
+//==============================================================================================================================
+ #ifdef A_DUBL
+ #define AD1 double
+ #define AD2 dvec2
+ #define AD3 dvec3
+ #define AD4 dvec4
+//------------------------------------------------------------------------------------------------------------------------------
+ AD1 AD1_x(AD1 a){return AD1(a);}
+ AD2 AD2_x(AD1 a){return AD2(a,a);}
+ AD3 AD3_x(AD1 a){return AD3(a,a,a);}
+ AD4 AD4_x(AD1 a){return AD4(a,a,a,a);}
+ #define AD1_(a) AD1_x(AD1(a))
+ #define AD2_(a) AD2_x(AD1(a))
+ #define AD3_(a) AD3_x(AD1(a))
+ #define AD4_(a) AD4_x(AD1(a))
+//==============================================================================================================================
+ AD1 AFractD1(AD1 x){return fract(x);}
+ AD2 AFractD2(AD2 x){return fract(x);}
+ AD3 AFractD3(AD3 x){return fract(x);}
+ AD4 AFractD4(AD4 x){return fract(x);}
+//------------------------------------------------------------------------------------------------------------------------------
+ AD1 ALerpD1(AD1 x,AD1 y,AD1 a){return mix(x,y,a);}
+ AD2 ALerpD2(AD2 x,AD2 y,AD2 a){return mix(x,y,a);}
+ AD3 ALerpD3(AD3 x,AD3 y,AD3 a){return mix(x,y,a);}
+ AD4 ALerpD4(AD4 x,AD4 y,AD4 a){return mix(x,y,a);}
+//------------------------------------------------------------------------------------------------------------------------------
+ AD1 ARcpD1(AD1 x){return AD1_(1.0)/x;}
+ AD2 ARcpD2(AD2 x){return AD2_(1.0)/x;}
+ AD3 ARcpD3(AD3 x){return AD3_(1.0)/x;}
+ AD4 ARcpD4(AD4 x){return AD4_(1.0)/x;}
+//------------------------------------------------------------------------------------------------------------------------------
+ AD1 ARsqD1(AD1 x){return AD1_(1.0)/sqrt(x);}
+ AD2 ARsqD2(AD2 x){return AD2_(1.0)/sqrt(x);}
+ AD3 ARsqD3(AD3 x){return AD3_(1.0)/sqrt(x);}
+ AD4 ARsqD4(AD4 x){return AD4_(1.0)/sqrt(x);}
+//------------------------------------------------------------------------------------------------------------------------------
+ AD1 ASatD1(AD1 x){return clamp(x,AD1_(0.0),AD1_(1.0));}
+ AD2 ASatD2(AD2 x){return clamp(x,AD2_(0.0),AD2_(1.0));}
+ AD3 ASatD3(AD3 x){return clamp(x,AD3_(0.0),AD3_(1.0));}
+ AD4 ASatD4(AD4 x){return clamp(x,AD4_(0.0),AD4_(1.0));}
+ #endif
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//_____________________________________________________________/\_______________________________________________________________
+//==============================================================================================================================
+// GLSL LONG
+//==============================================================================================================================
+ #ifdef A_LONG
+ #define AL1 uint64_t
+ #define AL2 u64vec2
+ #define AL3 u64vec3
+ #define AL4 u64vec4
+//------------------------------------------------------------------------------------------------------------------------------
+ #define ASL1 int64_t
+ #define ASL2 i64vec2
+ #define ASL3 i64vec3
+ #define ASL4 i64vec4
+//------------------------------------------------------------------------------------------------------------------------------
+ #define AL1_AU2(x) packUint2x32(AU2(x))
+ #define AU2_AL1(x) unpackUint2x32(AL1(x))
+//------------------------------------------------------------------------------------------------------------------------------
+ AL1 AL1_x(AL1 a){return AL1(a);}
+ AL2 AL2_x(AL1 a){return AL2(a,a);}
+ AL3 AL3_x(AL1 a){return AL3(a,a,a);}
+ AL4 AL4_x(AL1 a){return AL4(a,a,a,a);}
+ #define AL1_(a) AL1_x(AL1(a))
+ #define AL2_(a) AL2_x(AL1(a))
+ #define AL3_(a) AL3_x(AL1(a))
+ #define AL4_(a) AL4_x(AL1(a))
+//==============================================================================================================================
+ AL1 AAbsSL1(AL1 a){return AL1(abs(ASL1(a)));}
+ AL2 AAbsSL2(AL2 a){return AL2(abs(ASL2(a)));}
+ AL3 AAbsSL3(AL3 a){return AL3(abs(ASL3(a)));}
+ AL4 AAbsSL4(AL4 a){return AL4(abs(ASL4(a)));}
+//------------------------------------------------------------------------------------------------------------------------------
+ AL1 AMaxSL1(AL1 a,AL1 b){return AL1(max(ASU1(a),ASU1(b)));}
+ AL2 AMaxSL2(AL2 a,AL2 b){return AL2(max(ASU2(a),ASU2(b)));}
+ AL3 AMaxSL3(AL3 a,AL3 b){return AL3(max(ASU3(a),ASU3(b)));}
+ AL4 AMaxSL4(AL4 a,AL4 b){return AL4(max(ASU4(a),ASU4(b)));}
+//------------------------------------------------------------------------------------------------------------------------------
+ AL1 AMinSL1(AL1 a,AL1 b){return AL1(min(ASU1(a),ASU1(b)));}
+ AL2 AMinSL2(AL2 a,AL2 b){return AL2(min(ASU2(a),ASU2(b)));}
+ AL3 AMinSL3(AL3 a,AL3 b){return AL3(min(ASU3(a),ASU3(b)));}
+ AL4 AMinSL4(AL4 a,AL4 b){return AL4(min(ASU4(a),ASU4(b)));}
+ #endif
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//_____________________________________________________________/\_______________________________________________________________
+//==============================================================================================================================
+// WAVE OPERATIONS
+//==============================================================================================================================
+ #ifdef A_WAVE
+ // Where 'x' must be a compile time literal.
+ AF1 AWaveXorF1(AF1 v,AU1 x){return subgroupShuffleXor(v,x);}
+ AF2 AWaveXorF2(AF2 v,AU1 x){return subgroupShuffleXor(v,x);}
+ AF3 AWaveXorF3(AF3 v,AU1 x){return subgroupShuffleXor(v,x);}
+ AF4 AWaveXorF4(AF4 v,AU1 x){return subgroupShuffleXor(v,x);}
+ AU1 AWaveXorU1(AU1 v,AU1 x){return subgroupShuffleXor(v,x);}
+ AU2 AWaveXorU2(AU2 v,AU1 x){return subgroupShuffleXor(v,x);}
+ AU3 AWaveXorU3(AU3 v,AU1 x){return subgroupShuffleXor(v,x);}
+ AU4 AWaveXorU4(AU4 v,AU1 x){return subgroupShuffleXor(v,x);}
+//------------------------------------------------------------------------------------------------------------------------------
+ #ifdef A_HALF
+ AH2 AWaveXorH2(AH2 v,AU1 x){return AH2_AU1(subgroupShuffleXor(AU1_AH2(v),x));}
+ AH4 AWaveXorH4(AH4 v,AU1 x){return AH4_AU2(subgroupShuffleXor(AU2_AH4(v),x));}
+ AW2 AWaveXorW2(AW2 v,AU1 x){return AW2_AU1(subgroupShuffleXor(AU1_AW2(v),x));}
+ AW4 AWaveXorW4(AW4 v,AU1 x){return AW4_AU2(subgroupShuffleXor(AU2_AW4(v),x));}
+ #endif
+ #endif
+//==============================================================================================================================
+#endif
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//_____________________________________________________________/\_______________________________________________________________
+//==============================================================================================================================
+//
+//
+// HLSL
+//
+//
+//==============================================================================================================================
+#if defined(A_HLSL) && defined(A_GPU)
+ #ifdef A_HLSL_6_2
+ #define AP1 bool
+ #define AP2 bool2
+ #define AP3 bool3
+ #define AP4 bool4
+//------------------------------------------------------------------------------------------------------------------------------
+ #define AF1 float32_t
+ #define AF2 float32_t2
+ #define AF3 float32_t3
+ #define AF4 float32_t4
+//------------------------------------------------------------------------------------------------------------------------------
+ #define AU1 uint32_t
+ #define AU2 uint32_t2
+ #define AU3 uint32_t3
+ #define AU4 uint32_t4
+//------------------------------------------------------------------------------------------------------------------------------
+ #define ASU1 int32_t
+ #define ASU2 int32_t2
+ #define ASU3 int32_t3
+ #define ASU4 int32_t4
+ #else
+ #define AP1 bool
+ #define AP2 bool2
+ #define AP3 bool3
+ #define AP4 bool4
+//------------------------------------------------------------------------------------------------------------------------------
+ #define AF1 float
+ #define AF2 float2
+ #define AF3 float3
+ #define AF4 float4
+//------------------------------------------------------------------------------------------------------------------------------
+ #define AU1 uint
+ #define AU2 uint2
+ #define AU3 uint3
+ #define AU4 uint4
+//------------------------------------------------------------------------------------------------------------------------------
+ #define ASU1 int
+ #define ASU2 int2
+ #define ASU3 int3
+ #define ASU4 int4
+ #endif
+//==============================================================================================================================
+ #define AF1_AU1(x) asfloat(AU1(x))
+ #define AF2_AU2(x) asfloat(AU2(x))
+ #define AF3_AU3(x) asfloat(AU3(x))
+ #define AF4_AU4(x) asfloat(AU4(x))
+//------------------------------------------------------------------------------------------------------------------------------
+ #define AU1_AF1(x) asuint(AF1(x))
+ #define AU2_AF2(x) asuint(AF2(x))
+ #define AU3_AF3(x) asuint(AF3(x))
+ #define AU4_AF4(x) asuint(AF4(x))
+//------------------------------------------------------------------------------------------------------------------------------
+ AU1 AU1_AH1_AF1_x(AF1 a){return f32tof16(a);}
+ #define AU1_AH1_AF1(a) AU1_AH1_AF1_x(AF1(a))
+//------------------------------------------------------------------------------------------------------------------------------
+ AU1 AU1_AH2_AF2_x(AF2 a){return f32tof16(a.x)|(f32tof16(a.y)<<16);}
+ #define AU1_AH2_AF2(a) AU1_AH2_AF2_x(AF2(a))
+ #define AU1_AB4Unorm_AF4(x) D3DCOLORtoUBYTE4(AF4(x))
+//------------------------------------------------------------------------------------------------------------------------------
+ AF2 AF2_AH2_AU1_x(AU1 x){return AF2(f16tof32(x&0xFFFF),f16tof32(x>>16));}
+ #define AF2_AH2_AU1(x) AF2_AH2_AU1_x(AU1(x))
+//==============================================================================================================================
+ AF1 AF1_x(AF1 a){return AF1(a);}
+ AF2 AF2_x(AF1 a){return AF2(a,a);}
+ AF3 AF3_x(AF1 a){return AF3(a,a,a);}
+ AF4 AF4_x(AF1 a){return AF4(a,a,a,a);}
+ #define AF1_(a) AF1_x(AF1(a))
+ #define AF2_(a) AF2_x(AF1(a))
+ #define AF3_(a) AF3_x(AF1(a))
+ #define AF4_(a) AF4_x(AF1(a))
+//------------------------------------------------------------------------------------------------------------------------------
+ AU1 AU1_x(AU1 a){return AU1(a);}
+ AU2 AU2_x(AU1 a){return AU2(a,a);}
+ AU3 AU3_x(AU1 a){return AU3(a,a,a);}
+ AU4 AU4_x(AU1 a){return AU4(a,a,a,a);}
+ #define AU1_(a) AU1_x(AU1(a))
+ #define AU2_(a) AU2_x(AU1(a))
+ #define AU3_(a) AU3_x(AU1(a))
+ #define AU4_(a) AU4_x(AU1(a))
+//==============================================================================================================================
+ AU1 AAbsSU1(AU1 a){return AU1(abs(ASU1(a)));}
+ AU2 AAbsSU2(AU2 a){return AU2(abs(ASU2(a)));}
+ AU3 AAbsSU3(AU3 a){return AU3(abs(ASU3(a)));}
+ AU4 AAbsSU4(AU4 a){return AU4(abs(ASU4(a)));}
+//------------------------------------------------------------------------------------------------------------------------------
+ AU1 ABfe(AU1 src,AU1 off,AU1 bits){AU1 mask=(1u<<bits)-1;return (src>>off)&mask;}
+ AU1 ABfi(AU1 src,AU1 ins,AU1 mask){return (ins&mask)|(src&(~mask));}
+ AU1 ABfiM(AU1 src,AU1 ins,AU1 bits){AU1 mask=(1u<<bits)-1;return (ins&mask)|(src&(~mask));}
+//------------------------------------------------------------------------------------------------------------------------------
+ AF1 AClampF1(AF1 x,AF1 n,AF1 m){return max(n,min(x,m));}
+ AF2 AClampF2(AF2 x,AF2 n,AF2 m){return max(n,min(x,m));}
+ AF3 AClampF3(AF3 x,AF3 n,AF3 m){return max(n,min(x,m));}
+ AF4 AClampF4(AF4 x,AF4 n,AF4 m){return max(n,min(x,m));}
+//------------------------------------------------------------------------------------------------------------------------------
+ AF1 AFractF1(AF1 x){return x-floor(x);}
+ AF2 AFractF2(AF2 x){return x-floor(x);}
+ AF3 AFractF3(AF3 x){return x-floor(x);}
+ AF4 AFractF4(AF4 x){return x-floor(x);}
+//------------------------------------------------------------------------------------------------------------------------------
+ AF1 ALerpF1(AF1 x,AF1 y,AF1 a){return lerp(x,y,a);}
+ AF2 ALerpF2(AF2 x,AF2 y,AF2 a){return lerp(x,y,a);}
+ AF3 ALerpF3(AF3 x,AF3 y,AF3 a){return lerp(x,y,a);}
+ AF4 ALerpF4(AF4 x,AF4 y,AF4 a){return lerp(x,y,a);}
+//------------------------------------------------------------------------------------------------------------------------------
+ AF1 AMax3F1(AF1 x,AF1 y,AF1 z){return max(x,max(y,z));}
+ AF2 AMax3F2(AF2 x,AF2 y,AF2 z){return max(x,max(y,z));}
+ AF3 AMax3F3(AF3 x,AF3 y,AF3 z){return max(x,max(y,z));}
+ AF4 AMax3F4(AF4 x,AF4 y,AF4 z){return max(x,max(y,z));}
+//------------------------------------------------------------------------------------------------------------------------------
+ AU1 AMax3SU1(AU1 x,AU1 y,AU1 z){return AU1(max(ASU1(x),max(ASU1(y),ASU1(z))));}
+ AU2 AMax3SU2(AU2 x,AU2 y,AU2 z){return AU2(max(ASU2(x),max(ASU2(y),ASU2(z))));}
+ AU3 AMax3SU3(AU3 x,AU3 y,AU3 z){return AU3(max(ASU3(x),max(ASU3(y),ASU3(z))));}
+ AU4 AMax3SU4(AU4 x,AU4 y,AU4 z){return AU4(max(ASU4(x),max(ASU4(y),ASU4(z))));}
+//------------------------------------------------------------------------------------------------------------------------------
+ AU1 AMax3U1(AU1 x,AU1 y,AU1 z){return max(x,max(y,z));}
+ AU2 AMax3U2(AU2 x,AU2 y,AU2 z){return max(x,max(y,z));}
+ AU3 AMax3U3(AU3 x,AU3 y,AU3 z){return max(x,max(y,z));}
+ AU4 AMax3U4(AU4 x,AU4 y,AU4 z){return max(x,max(y,z));}
+//------------------------------------------------------------------------------------------------------------------------------
+ AU1 AMaxSU1(AU1 a,AU1 b){return AU1(max(ASU1(a),ASU1(b)));}
+ AU2 AMaxSU2(AU2 a,AU2 b){return AU2(max(ASU2(a),ASU2(b)));}
+ AU3 AMaxSU3(AU3 a,AU3 b){return AU3(max(ASU3(a),ASU3(b)));}
+ AU4 AMaxSU4(AU4 a,AU4 b){return AU4(max(ASU4(a),ASU4(b)));}
+//------------------------------------------------------------------------------------------------------------------------------
+ AF1 AMed3F1(AF1 x,AF1 y,AF1 z){return max(min(x,y),min(max(x,y),z));}
+ AF2 AMed3F2(AF2 x,AF2 y,AF2 z){return max(min(x,y),min(max(x,y),z));}
+ AF3 AMed3F3(AF3 x,AF3 y,AF3 z){return max(min(x,y),min(max(x,y),z));}
+ AF4 AMed3F4(AF4 x,AF4 y,AF4 z){return max(min(x,y),min(max(x,y),z));}
+//------------------------------------------------------------------------------------------------------------------------------
+ AF1 AMin3F1(AF1 x,AF1 y,AF1 z){return min(x,min(y,z));}
+ AF2 AMin3F2(AF2 x,AF2 y,AF2 z){return min(x,min(y,z));}
+ AF3 AMin3F3(AF3 x,AF3 y,AF3 z){return min(x,min(y,z));}
+ AF4 AMin3F4(AF4 x,AF4 y,AF4 z){return min(x,min(y,z));}
+//------------------------------------------------------------------------------------------------------------------------------
+ AU1 AMin3SU1(AU1 x,AU1 y,AU1 z){return AU1(min(ASU1(x),min(ASU1(y),ASU1(z))));}
+ AU2 AMin3SU2(AU2 x,AU2 y,AU2 z){return AU2(min(ASU2(x),min(ASU2(y),ASU2(z))));}
+ AU3 AMin3SU3(AU3 x,AU3 y,AU3 z){return AU3(min(ASU3(x),min(ASU3(y),ASU3(z))));}
+ AU4 AMin3SU4(AU4 x,AU4 y,AU4 z){return AU4(min(ASU4(x),min(ASU4(y),ASU4(z))));}
+//------------------------------------------------------------------------------------------------------------------------------
+ AU1 AMin3U1(AU1 x,AU1 y,AU1 z){return min(x,min(y,z));}
+ AU2 AMin3U2(AU2 x,AU2 y,AU2 z){return min(x,min(y,z));}
+ AU3 AMin3U3(AU3 x,AU3 y,AU3 z){return min(x,min(y,z));}
+ AU4 AMin3U4(AU4 x,AU4 y,AU4 z){return min(x,min(y,z));}
+//------------------------------------------------------------------------------------------------------------------------------
+ AU1 AMinSU1(AU1 a,AU1 b){return AU1(min(ASU1(a),ASU1(b)));}
+ AU2 AMinSU2(AU2 a,AU2 b){return AU2(min(ASU2(a),ASU2(b)));}
+ AU3 AMinSU3(AU3 a,AU3 b){return AU3(min(ASU3(a),ASU3(b)));}
+ AU4 AMinSU4(AU4 a,AU4 b){return AU4(min(ASU4(a),ASU4(b)));}
+//------------------------------------------------------------------------------------------------------------------------------
+ AF1 ANCosF1(AF1 x){return cos(x*AF1_(A_2PI));}
+ AF2 ANCosF2(AF2 x){return cos(x*AF2_(A_2PI));}
+ AF3 ANCosF3(AF3 x){return cos(x*AF3_(A_2PI));}
+ AF4 ANCosF4(AF4 x){return cos(x*AF4_(A_2PI));}
+//------------------------------------------------------------------------------------------------------------------------------
+ AF1 ANSinF1(AF1 x){return sin(x*AF1_(A_2PI));}
+ AF2 ANSinF2(AF2 x){return sin(x*AF2_(A_2PI));}
+ AF3 ANSinF3(AF3 x){return sin(x*AF3_(A_2PI));}
+ AF4 ANSinF4(AF4 x){return sin(x*AF4_(A_2PI));}
+//------------------------------------------------------------------------------------------------------------------------------
+ AF1 ARcpF1(AF1 x){return rcp(x);}
+ AF2 ARcpF2(AF2 x){return rcp(x);}
+ AF3 ARcpF3(AF3 x){return rcp(x);}
+ AF4 ARcpF4(AF4 x){return rcp(x);}
+//------------------------------------------------------------------------------------------------------------------------------
+ AF1 ARsqF1(AF1 x){return rsqrt(x);}
+ AF2 ARsqF2(AF2 x){return rsqrt(x);}
+ AF3 ARsqF3(AF3 x){return rsqrt(x);}
+ AF4 ARsqF4(AF4 x){return rsqrt(x);}
+//------------------------------------------------------------------------------------------------------------------------------
+ AF1 ASatF1(AF1 x){return saturate(x);}
+ AF2 ASatF2(AF2 x){return saturate(x);}
+ AF3 ASatF3(AF3 x){return saturate(x);}
+ AF4 ASatF4(AF4 x){return saturate(x);}
+//------------------------------------------------------------------------------------------------------------------------------
+ AU1 AShrSU1(AU1 a,AU1 b){return AU1(ASU1(a)>>ASU1(b));}
+ AU2 AShrSU2(AU2 a,AU2 b){return AU2(ASU2(a)>>ASU2(b));}
+ AU3 AShrSU3(AU3 a,AU3 b){return AU3(ASU3(a)>>ASU3(b));}
+ AU4 AShrSU4(AU4 a,AU4 b){return AU4(ASU4(a)>>ASU4(b));}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//_____________________________________________________________/\_______________________________________________________________
+//==============================================================================================================================
+// HLSL BYTE
+//==============================================================================================================================
+ #ifdef A_BYTE
+ #endif
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//_____________________________________________________________/\_______________________________________________________________
+//==============================================================================================================================
+// HLSL HALF
+//==============================================================================================================================
+ #ifdef A_HALF
+ #ifdef A_HLSL_6_2
+ #define AH1 float16_t
+ #define AH2 float16_t2
+ #define AH3 float16_t3
+ #define AH4 float16_t4
+//------------------------------------------------------------------------------------------------------------------------------
+ #define AW1 uint16_t
+ #define AW2 uint16_t2
+ #define AW3 uint16_t3
+ #define AW4 uint16_t4
+//------------------------------------------------------------------------------------------------------------------------------
+ #define ASW1 int16_t
+ #define ASW2 int16_t2
+ #define ASW3 int16_t3
+ #define ASW4 int16_t4
+ #else
+ #define AH1 min16float
+ #define AH2 min16float2
+ #define AH3 min16float3
+ #define AH4 min16float4
+//------------------------------------------------------------------------------------------------------------------------------
+ #define AW1 min16uint
+ #define AW2 min16uint2
+ #define AW3 min16uint3
+ #define AW4 min16uint4
+//------------------------------------------------------------------------------------------------------------------------------
+ #define ASW1 min16int
+ #define ASW2 min16int2
+ #define ASW3 min16int3
+ #define ASW4 min16int4
+ #endif
+//==============================================================================================================================
+ // Need to use manual unpack to get optimal execution (don't use packed types in buffers directly).
+ // Unpack requires this pattern: https://gpuopen.com/first-steps-implementing-fp16/
+ AH2 AH2_AU1_x(AU1 x){AF2 t=f16tof32(AU2(x&0xFFFF,x>>16));return AH2(t);}
+ AH4 AH4_AU2_x(AU2 x){return AH4(AH2_AU1_x(x.x),AH2_AU1_x(x.y));}
+ AW2 AW2_AU1_x(AU1 x){AU2 t=AU2(x&0xFFFF,x>>16);return AW2(t);}
+ AW4 AW4_AU2_x(AU2 x){return AW4(AW2_AU1_x(x.x),AW2_AU1_x(x.y));}
+ #define AH2_AU1(x) AH2_AU1_x(AU1(x))
+ #define AH4_AU2(x) AH4_AU2_x(AU2(x))
+ #define AW2_AU1(x) AW2_AU1_x(AU1(x))
+ #define AW4_AU2(x) AW4_AU2_x(AU2(x))
+//------------------------------------------------------------------------------------------------------------------------------
+ AU1 AU1_AH2_x(AH2 x){return f32tof16(x.x)+(f32tof16(x.y)<<16);}
+ AU2 AU2_AH4_x(AH4 x){return AU2(AU1_AH2_x(x.xy),AU1_AH2_x(x.zw));}
+ AU1 AU1_AW2_x(AW2 x){return AU1(x.x)+(AU1(x.y)<<16);}
+ AU2 AU2_AW4_x(AW4 x){return AU2(AU1_AW2_x(x.xy),AU1_AW2_x(x.zw));}
+ #define AU1_AH2(x) AU1_AH2_x(AH2(x))
+ #define AU2_AH4(x) AU2_AH4_x(AH4(x))
+ #define AU1_AW2(x) AU1_AW2_x(AW2(x))
+ #define AU2_AW4(x) AU2_AW4_x(AW4(x))
+//==============================================================================================================================
+ #if defined(A_HLSL_6_2) && !defined(A_NO_16_BIT_CAST)
+ #define AW1_AH1(x) asuint16(x)
+ #define AW2_AH2(x) asuint16(x)
+ #define AW3_AH3(x) asuint16(x)
+ #define AW4_AH4(x) asuint16(x)
+ #else
+ #define AW1_AH1(a) AW1(f32tof16(AF1(a)))
+ #define AW2_AH2(a) AW2(AW1_AH1((a).x),AW1_AH1((a).y))
+ #define AW3_AH3(a) AW3(AW1_AH1((a).x),AW1_AH1((a).y),AW1_AH1((a).z))
+ #define AW4_AH4(a) AW4(AW1_AH1((a).x),AW1_AH1((a).y),AW1_AH1((a).z),AW1_AH1((a).w))
+ #endif
+//------------------------------------------------------------------------------------------------------------------------------
+ #if defined(A_HLSL_6_2) && !defined(A_NO_16_BIT_CAST)
+ #define AH1_AW1(x) asfloat16(x)
+ #define AH2_AW2(x) asfloat16(x)
+ #define AH3_AW3(x) asfloat16(x)
+ #define AH4_AW4(x) asfloat16(x)
+ #else
+ #define AH1_AW1(a) AH1(f16tof32(AU1(a)))
+ #define AH2_AW2(a) AH2(AH1_AW1((a).x),AH1_AW1((a).y))
+ #define AH3_AW3(a) AH3(AH1_AW1((a).x),AH1_AW1((a).y),AH1_AW1((a).z))
+ #define AH4_AW4(a) AH4(AH1_AW1((a).x),AH1_AW1((a).y),AH1_AW1((a).z),AH1_AW1((a).w))
+ #endif
+//==============================================================================================================================
+ AH1 AH1_x(AH1 a){return AH1(a);}
+ AH2 AH2_x(AH1 a){return AH2(a,a);}
+ AH3 AH3_x(AH1 a){return AH3(a,a,a);}
+ AH4 AH4_x(AH1 a){return AH4(a,a,a,a);}
+ #define AH1_(a) AH1_x(AH1(a))
+ #define AH2_(a) AH2_x(AH1(a))
+ #define AH3_(a) AH3_x(AH1(a))
+ #define AH4_(a) AH4_x(AH1(a))
+//------------------------------------------------------------------------------------------------------------------------------
+ AW1 AW1_x(AW1 a){return AW1(a);}
+ AW2 AW2_x(AW1 a){return AW2(a,a);}
+ AW3 AW3_x(AW1 a){return AW3(a,a,a);}
+ AW4 AW4_x(AW1 a){return AW4(a,a,a,a);}
+ #define AW1_(a) AW1_x(AW1(a))
+ #define AW2_(a) AW2_x(AW1(a))
+ #define AW3_(a) AW3_x(AW1(a))
+ #define AW4_(a) AW4_x(AW1(a))
+//==============================================================================================================================
+ AW1 AAbsSW1(AW1 a){return AW1(abs(ASW1(a)));}
+ AW2 AAbsSW2(AW2 a){return AW2(abs(ASW2(a)));}
+ AW3 AAbsSW3(AW3 a){return AW3(abs(ASW3(a)));}
+ AW4 AAbsSW4(AW4 a){return AW4(abs(ASW4(a)));}
+//------------------------------------------------------------------------------------------------------------------------------
+ AH1 AClampH1(AH1 x,AH1 n,AH1 m){return max(n,min(x,m));}
+ AH2 AClampH2(AH2 x,AH2 n,AH2 m){return max(n,min(x,m));}
+ AH3 AClampH3(AH3 x,AH3 n,AH3 m){return max(n,min(x,m));}
+ AH4 AClampH4(AH4 x,AH4 n,AH4 m){return max(n,min(x,m));}
+//------------------------------------------------------------------------------------------------------------------------------
+ // V_FRACT_F16 (note DX frac() is different).
+ AH1 AFractH1(AH1 x){return x-floor(x);}
+ AH2 AFractH2(AH2 x){return x-floor(x);}
+ AH3 AFractH3(AH3 x){return x-floor(x);}
+ AH4 AFractH4(AH4 x){return x-floor(x);}
+//------------------------------------------------------------------------------------------------------------------------------
+ AH1 ALerpH1(AH1 x,AH1 y,AH1 a){return lerp(x,y,a);}
+ AH2 ALerpH2(AH2 x,AH2 y,AH2 a){return lerp(x,y,a);}
+ AH3 ALerpH3(AH3 x,AH3 y,AH3 a){return lerp(x,y,a);}
+ AH4 ALerpH4(AH4 x,AH4 y,AH4 a){return lerp(x,y,a);}
+//------------------------------------------------------------------------------------------------------------------------------
+ AH1 AMax3H1(AH1 x,AH1 y,AH1 z){return max(x,max(y,z));}
+ AH2 AMax3H2(AH2 x,AH2 y,AH2 z){return max(x,max(y,z));}
+ AH3 AMax3H3(AH3 x,AH3 y,AH3 z){return max(x,max(y,z));}
+ AH4 AMax3H4(AH4 x,AH4 y,AH4 z){return max(x,max(y,z));}
+//------------------------------------------------------------------------------------------------------------------------------
+ AW1 AMaxSW1(AW1 a,AW1 b){return AW1(max(ASU1(a),ASU1(b)));}
+ AW2 AMaxSW2(AW2 a,AW2 b){return AW2(max(ASU2(a),ASU2(b)));}
+ AW3 AMaxSW3(AW3 a,AW3 b){return AW3(max(ASU3(a),ASU3(b)));}
+ AW4 AMaxSW4(AW4 a,AW4 b){return AW4(max(ASU4(a),ASU4(b)));}
+//------------------------------------------------------------------------------------------------------------------------------
+ AH1 AMin3H1(AH1 x,AH1 y,AH1 z){return min(x,min(y,z));}
+ AH2 AMin3H2(AH2 x,AH2 y,AH2 z){return min(x,min(y,z));}
+ AH3 AMin3H3(AH3 x,AH3 y,AH3 z){return min(x,min(y,z));}
+ AH4 AMin3H4(AH4 x,AH4 y,AH4 z){return min(x,min(y,z));}
+//------------------------------------------------------------------------------------------------------------------------------
+ AW1 AMinSW1(AW1 a,AW1 b){return AW1(min(ASU1(a),ASU1(b)));}
+ AW2 AMinSW2(AW2 a,AW2 b){return AW2(min(ASU2(a),ASU2(b)));}
+ AW3 AMinSW3(AW3 a,AW3 b){return AW3(min(ASU3(a),ASU3(b)));}
+ AW4 AMinSW4(AW4 a,AW4 b){return AW4(min(ASU4(a),ASU4(b)));}
+//------------------------------------------------------------------------------------------------------------------------------
+ AH1 ARcpH1(AH1 x){return rcp(x);}
+ AH2 ARcpH2(AH2 x){return rcp(x);}
+ AH3 ARcpH3(AH3 x){return rcp(x);}
+ AH4 ARcpH4(AH4 x){return rcp(x);}
+//------------------------------------------------------------------------------------------------------------------------------
+ AH1 ARsqH1(AH1 x){return rsqrt(x);}
+ AH2 ARsqH2(AH2 x){return rsqrt(x);}
+ AH3 ARsqH3(AH3 x){return rsqrt(x);}
+ AH4 ARsqH4(AH4 x){return rsqrt(x);}
+//------------------------------------------------------------------------------------------------------------------------------
+ AH1 ASatH1(AH1 x){return saturate(x);}
+ AH2 ASatH2(AH2 x){return saturate(x);}
+ AH3 ASatH3(AH3 x){return saturate(x);}
+ AH4 ASatH4(AH4 x){return saturate(x);}
+//------------------------------------------------------------------------------------------------------------------------------
+ AW1 AShrSW1(AW1 a,AW1 b){return AW1(ASW1(a)>>ASW1(b));}
+ AW2 AShrSW2(AW2 a,AW2 b){return AW2(ASW2(a)>>ASW2(b));}
+ AW3 AShrSW3(AW3 a,AW3 b){return AW3(ASW3(a)>>ASW3(b));}
+ AW4 AShrSW4(AW4 a,AW4 b){return AW4(ASW4(a)>>ASW4(b));}
+ #endif
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//_____________________________________________________________/\_______________________________________________________________
+//==============================================================================================================================
+// HLSL DOUBLE
+//==============================================================================================================================
+ #ifdef A_DUBL
+ #ifdef A_HLSL_6_2
+ #define AD1 float64_t
+ #define AD2 float64_t2
+ #define AD3 float64_t3
+ #define AD4 float64_t4
+ #else
+ #define AD1 double
+ #define AD2 double2
+ #define AD3 double3
+ #define AD4 double4
+ #endif
+//------------------------------------------------------------------------------------------------------------------------------
+ AD1 AD1_x(AD1 a){return AD1(a);}
+ AD2 AD2_x(AD1 a){return AD2(a,a);}
+ AD3 AD3_x(AD1 a){return AD3(a,a,a);}
+ AD4 AD4_x(AD1 a){return AD4(a,a,a,a);}
+ #define AD1_(a) AD1_x(AD1(a))
+ #define AD2_(a) AD2_x(AD1(a))
+ #define AD3_(a) AD3_x(AD1(a))
+ #define AD4_(a) AD4_x(AD1(a))
+//==============================================================================================================================
+ AD1 AFractD1(AD1 a){return a-floor(a);}
+ AD2 AFractD2(AD2 a){return a-floor(a);}
+ AD3 AFractD3(AD3 a){return a-floor(a);}
+ AD4 AFractD4(AD4 a){return a-floor(a);}
+//------------------------------------------------------------------------------------------------------------------------------
+ AD1 ALerpD1(AD1 x,AD1 y,AD1 a){return lerp(x,y,a);}
+ AD2 ALerpD2(AD2 x,AD2 y,AD2 a){return lerp(x,y,a);}
+ AD3 ALerpD3(AD3 x,AD3 y,AD3 a){return lerp(x,y,a);}
+ AD4 ALerpD4(AD4 x,AD4 y,AD4 a){return lerp(x,y,a);}
+//------------------------------------------------------------------------------------------------------------------------------
+ AD1 ARcpD1(AD1 x){return rcp(x);}
+ AD2 ARcpD2(AD2 x){return rcp(x);}
+ AD3 ARcpD3(AD3 x){return rcp(x);}
+ AD4 ARcpD4(AD4 x){return rcp(x);}
+//------------------------------------------------------------------------------------------------------------------------------
+ AD1 ARsqD1(AD1 x){return rsqrt(x);}
+ AD2 ARsqD2(AD2 x){return rsqrt(x);}
+ AD3 ARsqD3(AD3 x){return rsqrt(x);}
+ AD4 ARsqD4(AD4 x){return rsqrt(x);}
+//------------------------------------------------------------------------------------------------------------------------------
+ AD1 ASatD1(AD1 x){return saturate(x);}
+ AD2 ASatD2(AD2 x){return saturate(x);}
+ AD3 ASatD3(AD3 x){return saturate(x);}
+ AD4 ASatD4(AD4 x){return saturate(x);}
+ #endif
+//==============================================================================================================================
+// HLSL WAVE
+//==============================================================================================================================
+ #ifdef A_WAVE
+ // Where 'x' must be a compile time literal.
+ AF1 AWaveXorF1(AF1 v,AU1 x){return WaveReadLaneAt(v,WaveGetLaneIndex()^x);}
+ AF2 AWaveXorF2(AF2 v,AU1 x){return WaveReadLaneAt(v,WaveGetLaneIndex()^x);}
+ AF3 AWaveXorF3(AF3 v,AU1 x){return WaveReadLaneAt(v,WaveGetLaneIndex()^x);}
+ AF4 AWaveXorF4(AF4 v,AU1 x){return WaveReadLaneAt(v,WaveGetLaneIndex()^x);}
+ AU1 AWaveXorU1(AU1 v,AU1 x){return WaveReadLaneAt(v,WaveGetLaneIndex()^x);}
+ AU2 AWaveXorU1(AU2 v,AU1 x){return WaveReadLaneAt(v,WaveGetLaneIndex()^x);}
+ AU3 AWaveXorU1(AU3 v,AU1 x){return WaveReadLaneAt(v,WaveGetLaneIndex()^x);}
+ AU4 AWaveXorU1(AU4 v,AU1 x){return WaveReadLaneAt(v,WaveGetLaneIndex()^x);}
+//------------------------------------------------------------------------------------------------------------------------------
+ #ifdef A_HALF
+ AH2 AWaveXorH2(AH2 v,AU1 x){return AH2_AU1(WaveReadLaneAt(AU1_AH2(v),WaveGetLaneIndex()^x));}
+ AH4 AWaveXorH4(AH4 v,AU1 x){return AH4_AU2(WaveReadLaneAt(AU2_AH4(v),WaveGetLaneIndex()^x));}
+ AW2 AWaveXorW2(AW2 v,AU1 x){return AW2_AU1(WaveReadLaneAt(AU1_AW2(v),WaveGetLaneIndex()^x));}
+ AW4 AWaveXorW4(AW4 v,AU1 x){return AW4_AU1(WaveReadLaneAt(AU1_AW4(v),WaveGetLaneIndex()^x));}
+ #endif
+ #endif
+//==============================================================================================================================
+#endif
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//_____________________________________________________________/\_______________________________________________________________
+//==============================================================================================================================
+//
+//
+// GPU COMMON
+//
+//
+//==============================================================================================================================
+#ifdef A_GPU
+ // Negative and positive infinity.
+ #define A_INFP_F AF1_AU1(0x7f800000u)
+ #define A_INFN_F AF1_AU1(0xff800000u)
+//------------------------------------------------------------------------------------------------------------------------------
+ // Copy sign from 's' to positive 'd'.
+ AF1 ACpySgnF1(AF1 d,AF1 s){return AF1_AU1(AU1_AF1(d)|(AU1_AF1(s)&AU1_(0x80000000u)));}
+ AF2 ACpySgnF2(AF2 d,AF2 s){return AF2_AU2(AU2_AF2(d)|(AU2_AF2(s)&AU2_(0x80000000u)));}
+ AF3 ACpySgnF3(AF3 d,AF3 s){return AF3_AU3(AU3_AF3(d)|(AU3_AF3(s)&AU3_(0x80000000u)));}
+ AF4 ACpySgnF4(AF4 d,AF4 s){return AF4_AU4(AU4_AF4(d)|(AU4_AF4(s)&AU4_(0x80000000u)));}
+//------------------------------------------------------------------------------------------------------------------------------
+ // Single operation to return (useful to create a mask to use in lerp for branch free logic),
+ // m=NaN := 0
+ // m>=0 := 0
+ // m<0 := 1
+ // Uses the following useful floating point logic,
+ // saturate(+a*(-INF)==-INF) := 0
+ // saturate( 0*(-INF)== NaN) := 0
+ // saturate(-a*(-INF)==+INF) := 1
+ AF1 ASignedF1(AF1 m){return ASatF1(m*AF1_(A_INFN_F));}
+ AF2 ASignedF2(AF2 m){return ASatF2(m*AF2_(A_INFN_F));}
+ AF3 ASignedF3(AF3 m){return ASatF3(m*AF3_(A_INFN_F));}
+ AF4 ASignedF4(AF4 m){return ASatF4(m*AF4_(A_INFN_F));}
+//------------------------------------------------------------------------------------------------------------------------------
+ AF1 AGtZeroF1(AF1 m){return ASatF1(m*AF1_(A_INFP_F));}
+ AF2 AGtZeroF2(AF2 m){return ASatF2(m*AF2_(A_INFP_F));}
+ AF3 AGtZeroF3(AF3 m){return ASatF3(m*AF3_(A_INFP_F));}
+ AF4 AGtZeroF4(AF4 m){return ASatF4(m*AF4_(A_INFP_F));}
+//==============================================================================================================================
+ #ifdef A_HALF
+ #ifdef A_HLSL_6_2
+ #define A_INFP_H AH1_AW1((uint16_t)0x7c00u)
+ #define A_INFN_H AH1_AW1((uint16_t)0xfc00u)
+ #else
+ #define A_INFP_H AH1_AW1(0x7c00u)
+ #define A_INFN_H AH1_AW1(0xfc00u)
+ #endif
+
+//------------------------------------------------------------------------------------------------------------------------------
+ AH1 ACpySgnH1(AH1 d,AH1 s){return AH1_AW1(AW1_AH1(d)|(AW1_AH1(s)&AW1_(0x8000u)));}
+ AH2 ACpySgnH2(AH2 d,AH2 s){return AH2_AW2(AW2_AH2(d)|(AW2_AH2(s)&AW2_(0x8000u)));}
+ AH3 ACpySgnH3(AH3 d,AH3 s){return AH3_AW3(AW3_AH3(d)|(AW3_AH3(s)&AW3_(0x8000u)));}
+ AH4 ACpySgnH4(AH4 d,AH4 s){return AH4_AW4(AW4_AH4(d)|(AW4_AH4(s)&AW4_(0x8000u)));}
+//------------------------------------------------------------------------------------------------------------------------------
+ AH1 ASignedH1(AH1 m){return ASatH1(m*AH1_(A_INFN_H));}
+ AH2 ASignedH2(AH2 m){return ASatH2(m*AH2_(A_INFN_H));}
+ AH3 ASignedH3(AH3 m){return ASatH3(m*AH3_(A_INFN_H));}
+ AH4 ASignedH4(AH4 m){return ASatH4(m*AH4_(A_INFN_H));}
+//------------------------------------------------------------------------------------------------------------------------------
+ AH1 AGtZeroH1(AH1 m){return ASatH1(m*AH1_(A_INFP_H));}
+ AH2 AGtZeroH2(AH2 m){return ASatH2(m*AH2_(A_INFP_H));}
+ AH3 AGtZeroH3(AH3 m){return ASatH3(m*AH3_(A_INFP_H));}
+ AH4 AGtZeroH4(AH4 m){return ASatH4(m*AH4_(A_INFP_H));}
+ #endif
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//_____________________________________________________________/\_______________________________________________________________
+//==============================================================================================================================
+// [FIS] FLOAT INTEGER SORTABLE
+//------------------------------------------------------------------------------------------------------------------------------
+// Float to integer sortable.
+// - If sign bit=0, flip the sign bit (positives).
+// - If sign bit=1, flip all bits (negatives).
+// Integer sortable to float.
+// - If sign bit=1, flip the sign bit (positives).
+// - If sign bit=0, flip all bits (negatives).
+// Has nice side effects.
+// - Larger integers are more positive values.
+// - Float zero is mapped to center of integers (so clear to integer zero is a nice default for atomic max usage).
+// Burns 3 ops for conversion {shift,or,xor}.
+//==============================================================================================================================
+ AU1 AFisToU1(AU1 x){return x^(( AShrSU1(x,AU1_(31)))|AU1_(0x80000000));}
+ AU1 AFisFromU1(AU1 x){return x^((~AShrSU1(x,AU1_(31)))|AU1_(0x80000000));}
+//------------------------------------------------------------------------------------------------------------------------------
+ // Just adjust high 16-bit value (useful when upper part of 32-bit word is a 16-bit float value).
+ AU1 AFisToHiU1(AU1 x){return x^(( AShrSU1(x,AU1_(15)))|AU1_(0x80000000));}
+ AU1 AFisFromHiU1(AU1 x){return x^((~AShrSU1(x,AU1_(15)))|AU1_(0x80000000));}
+//------------------------------------------------------------------------------------------------------------------------------
+ #ifdef A_HALF
+ AW1 AFisToW1(AW1 x){return x^(( AShrSW1(x,AW1_(15)))|AW1_(0x8000));}
+ AW1 AFisFromW1(AW1 x){return x^((~AShrSW1(x,AW1_(15)))|AW1_(0x8000));}
+//------------------------------------------------------------------------------------------------------------------------------
+ AW2 AFisToW2(AW2 x){return x^(( AShrSW2(x,AW2_(15)))|AW2_(0x8000));}
+ AW2 AFisFromW2(AW2 x){return x^((~AShrSW2(x,AW2_(15)))|AW2_(0x8000));}
+ #endif
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//_____________________________________________________________/\_______________________________________________________________
+//==============================================================================================================================
+// [PERM] V_PERM_B32
+//------------------------------------------------------------------------------------------------------------------------------
+// Support for V_PERM_B32 started in the 3rd generation of GCN.
+//------------------------------------------------------------------------------------------------------------------------------
+// yyyyxxxx - The 'i' input.
+// 76543210
+// ========
+// HGFEDCBA - Naming on permutation.
+//------------------------------------------------------------------------------------------------------------------------------
+// TODO
+// ====
+// - Make sure compiler optimizes this.
+//==============================================================================================================================
+ #ifdef A_HALF
+ AU1 APerm0E0A(AU2 i){return((i.x )&0xffu)|((i.y<<16)&0xff0000u);}
+ AU1 APerm0F0B(AU2 i){return((i.x>> 8)&0xffu)|((i.y<< 8)&0xff0000u);}
+ AU1 APerm0G0C(AU2 i){return((i.x>>16)&0xffu)|((i.y )&0xff0000u);}
+ AU1 APerm0H0D(AU2 i){return((i.x>>24)&0xffu)|((i.y>> 8)&0xff0000u);}
+//------------------------------------------------------------------------------------------------------------------------------
+ AU1 APermHGFA(AU2 i){return((i.x )&0x000000ffu)|(i.y&0xffffff00u);}
+ AU1 APermHGFC(AU2 i){return((i.x>>16)&0x000000ffu)|(i.y&0xffffff00u);}
+ AU1 APermHGAE(AU2 i){return((i.x<< 8)&0x0000ff00u)|(i.y&0xffff00ffu);}
+ AU1 APermHGCE(AU2 i){return((i.x>> 8)&0x0000ff00u)|(i.y&0xffff00ffu);}
+ AU1 APermHAFE(AU2 i){return((i.x<<16)&0x00ff0000u)|(i.y&0xff00ffffu);}
+ AU1 APermHCFE(AU2 i){return((i.x )&0x00ff0000u)|(i.y&0xff00ffffu);}
+ AU1 APermAGFE(AU2 i){return((i.x<<24)&0xff000000u)|(i.y&0x00ffffffu);}
+ AU1 APermCGFE(AU2 i){return((i.x<< 8)&0xff000000u)|(i.y&0x00ffffffu);}
+//------------------------------------------------------------------------------------------------------------------------------
+ AU1 APermGCEA(AU2 i){return((i.x)&0x00ff00ffu)|((i.y<<8)&0xff00ff00u);}
+ AU1 APermGECA(AU2 i){return(((i.x)&0xffu)|((i.x>>8)&0xff00u)|((i.y<<16)&0xff0000u)|((i.y<<8)&0xff000000u));}
+ #endif
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//_____________________________________________________________/\_______________________________________________________________
+//==============================================================================================================================
+// [BUC] BYTE UNSIGNED CONVERSION
+//------------------------------------------------------------------------------------------------------------------------------
+// Designed to use the optimal conversion, enables the scaling to possibly be factored into other computation.
+// Works on a range of {0 to A_BUC_<32,16>}, for <32-bit, and 16-bit> respectively.
+//------------------------------------------------------------------------------------------------------------------------------
+// OPCODE NOTES
+// ============
+// GCN does not do UNORM or SNORM for bytes in opcodes.
+// - V_CVT_F32_UBYTE{0,1,2,3} - Unsigned byte to float.
+// - V_CVT_PKACC_U8_F32 - Float to unsigned byte (does bit-field insert into 32-bit integer).
+// V_PERM_B32 does byte packing with ability to zero fill bytes as well.
+// - Can pull out byte values from two sources, and zero fill upper 8-bits of packed hi and lo.
+//------------------------------------------------------------------------------------------------------------------------------
+// BYTE : FLOAT - ABuc{0,1,2,3}{To,From}U1() - Designed for V_CVT_F32_UBYTE* and V_CVT_PKACCUM_U8_F32 ops.
+// ==== =====
+// 0 : 0
+// 1 : 1
+// ...
+// 255 : 255
+// : 256 (just outside the encoding range)
+//------------------------------------------------------------------------------------------------------------------------------
+// BYTE : FLOAT - ABuc{0,1,2,3}{To,From}U2() - Designed for 16-bit denormal tricks and V_PERM_B32.
+// ==== =====
+// 0 : 0
+// 1 : 1/512
+// 2 : 1/256
+// ...
+// 64 : 1/8
+// 128 : 1/4
+// 255 : 255/512
+// : 1/2 (just outside the encoding range)
+//------------------------------------------------------------------------------------------------------------------------------
+// OPTIMAL IMPLEMENTATIONS ON AMD ARCHITECTURES
+// ============================================
+// r=ABuc0FromU1(i)
+// V_CVT_F32_UBYTE0 r,i
+// --------------------------------------------
+// r=ABuc0ToU1(d,i)
+// V_CVT_PKACCUM_U8_F32 r,i,0,d
+// --------------------------------------------
+// d=ABuc0FromU2(i)
+// Where 'k0' is an SGPR with 0x0E0A
+// Where 'k1' is an SGPR with {32768.0} packed into the lower 16-bits
+// V_PERM_B32 d,i.x,i.y,k0
+// V_PK_FMA_F16 d,d,k1.x,0
+// --------------------------------------------
+// r=ABuc0ToU2(d,i)
+// Where 'k0' is an SGPR with {1.0/32768.0} packed into the lower 16-bits
+// Where 'k1' is an SGPR with 0x????
+// Where 'k2' is an SGPR with 0x????
+// V_PK_FMA_F16 i,i,k0.x,0
+// V_PERM_B32 r.x,i,i,k1
+// V_PERM_B32 r.y,i,i,k2
+//==============================================================================================================================
+ // Peak range for 32-bit and 16-bit operations.
+ #define A_BUC_32 (255.0)
+ #define A_BUC_16 (255.0/512.0)
+//==============================================================================================================================
+ #if 1
+ // Designed to be one V_CVT_PKACCUM_U8_F32.
+ // The extra min is required to pattern match to V_CVT_PKACCUM_U8_F32.
+ AU1 ABuc0ToU1(AU1 d,AF1 i){return (d&0xffffff00u)|((min(AU1(i),255u) )&(0x000000ffu));}
+ AU1 ABuc1ToU1(AU1 d,AF1 i){return (d&0xffff00ffu)|((min(AU1(i),255u)<< 8)&(0x0000ff00u));}
+ AU1 ABuc2ToU1(AU1 d,AF1 i){return (d&0xff00ffffu)|((min(AU1(i),255u)<<16)&(0x00ff0000u));}
+ AU1 ABuc3ToU1(AU1 d,AF1 i){return (d&0x00ffffffu)|((min(AU1(i),255u)<<24)&(0xff000000u));}
+//------------------------------------------------------------------------------------------------------------------------------
+ // Designed to be one V_CVT_F32_UBYTE*.
+ AF1 ABuc0FromU1(AU1 i){return AF1((i )&255u);}
+ AF1 ABuc1FromU1(AU1 i){return AF1((i>> 8)&255u);}
+ AF1 ABuc2FromU1(AU1 i){return AF1((i>>16)&255u);}
+ AF1 ABuc3FromU1(AU1 i){return AF1((i>>24)&255u);}
+ #endif
+//==============================================================================================================================
+ #ifdef A_HALF
+ // Takes {x0,x1} and {y0,y1} and builds {{x0,y0},{x1,y1}}.
+ AW2 ABuc01ToW2(AH2 x,AH2 y){x*=AH2_(1.0/32768.0);y*=AH2_(1.0/32768.0);
+ return AW2_AU1(APermGCEA(AU2(AU1_AW2(AW2_AH2(x)),AU1_AW2(AW2_AH2(y)))));}
+//------------------------------------------------------------------------------------------------------------------------------
+ // Designed for 3 ops to do SOA to AOS and conversion.
+ AU2 ABuc0ToU2(AU2 d,AH2 i){AU1 b=AU1_AW2(AW2_AH2(i*AH2_(1.0/32768.0)));
+ return AU2(APermHGFA(AU2(d.x,b)),APermHGFC(AU2(d.y,b)));}
+ AU2 ABuc1ToU2(AU2 d,AH2 i){AU1 b=AU1_AW2(AW2_AH2(i*AH2_(1.0/32768.0)));
+ return AU2(APermHGAE(AU2(d.x,b)),APermHGCE(AU2(d.y,b)));}
+ AU2 ABuc2ToU2(AU2 d,AH2 i){AU1 b=AU1_AW2(AW2_AH2(i*AH2_(1.0/32768.0)));
+ return AU2(APermHAFE(AU2(d.x,b)),APermHCFE(AU2(d.y,b)));}
+ AU2 ABuc3ToU2(AU2 d,AH2 i){AU1 b=AU1_AW2(AW2_AH2(i*AH2_(1.0/32768.0)));
+ return AU2(APermAGFE(AU2(d.x,b)),APermCGFE(AU2(d.y,b)));}
+//------------------------------------------------------------------------------------------------------------------------------
+ // Designed for 2 ops to do both AOS to SOA, and conversion.
+ AH2 ABuc0FromU2(AU2 i){return AH2_AW2(AW2_AU1(APerm0E0A(i)))*AH2_(32768.0);}
+ AH2 ABuc1FromU2(AU2 i){return AH2_AW2(AW2_AU1(APerm0F0B(i)))*AH2_(32768.0);}
+ AH2 ABuc2FromU2(AU2 i){return AH2_AW2(AW2_AU1(APerm0G0C(i)))*AH2_(32768.0);}
+ AH2 ABuc3FromU2(AU2 i){return AH2_AW2(AW2_AU1(APerm0H0D(i)))*AH2_(32768.0);}
+ #endif
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//_____________________________________________________________/\_______________________________________________________________
+//==============================================================================================================================
+// [BSC] BYTE SIGNED CONVERSION
+//------------------------------------------------------------------------------------------------------------------------------
+// Similar to [BUC].
+// Works on a range of {-/+ A_BSC_<32,16>}, for <32-bit, and 16-bit> respectively.
+//------------------------------------------------------------------------------------------------------------------------------
+// ENCODING (without zero-based encoding)
+// ========
+// 0 = unused (can be used to mean something else)
+// 1 = lowest value
+// 128 = exact zero center (zero based encoding
+// 255 = highest value
+//------------------------------------------------------------------------------------------------------------------------------
+// Zero-based [Zb] flips the MSB bit of the byte (making 128 "exact zero" actually zero).
+// This is useful if there is a desire for cleared values to decode as zero.
+//------------------------------------------------------------------------------------------------------------------------------
+// BYTE : FLOAT - ABsc{0,1,2,3}{To,From}U2() - Designed for 16-bit denormal tricks and V_PERM_B32.
+// ==== =====
+// 0 : -127/512 (unused)
+// 1 : -126/512
+// 2 : -125/512
+// ...
+// 128 : 0
+// ...
+// 255 : 127/512
+// : 1/4 (just outside the encoding range)
+//==============================================================================================================================
+ // Peak range for 32-bit and 16-bit operations.
+ #define A_BSC_32 (127.0)
+ #define A_BSC_16 (127.0/512.0)
+//==============================================================================================================================
+ #if 1
+ AU1 ABsc0ToU1(AU1 d,AF1 i){return (d&0xffffff00u)|((min(AU1(i+128.0),255u) )&(0x000000ffu));}
+ AU1 ABsc1ToU1(AU1 d,AF1 i){return (d&0xffff00ffu)|((min(AU1(i+128.0),255u)<< 8)&(0x0000ff00u));}
+ AU1 ABsc2ToU1(AU1 d,AF1 i){return (d&0xff00ffffu)|((min(AU1(i+128.0),255u)<<16)&(0x00ff0000u));}
+ AU1 ABsc3ToU1(AU1 d,AF1 i){return (d&0x00ffffffu)|((min(AU1(i+128.0),255u)<<24)&(0xff000000u));}
+//------------------------------------------------------------------------------------------------------------------------------
+ AU1 ABsc0ToZbU1(AU1 d,AF1 i){return ((d&0xffffff00u)|((min(AU1(trunc(i)+128.0),255u) )&(0x000000ffu)))^0x00000080u;}
+ AU1 ABsc1ToZbU1(AU1 d,AF1 i){return ((d&0xffff00ffu)|((min(AU1(trunc(i)+128.0),255u)<< 8)&(0x0000ff00u)))^0x00008000u;}
+ AU1 ABsc2ToZbU1(AU1 d,AF1 i){return ((d&0xff00ffffu)|((min(AU1(trunc(i)+128.0),255u)<<16)&(0x00ff0000u)))^0x00800000u;}
+ AU1 ABsc3ToZbU1(AU1 d,AF1 i){return ((d&0x00ffffffu)|((min(AU1(trunc(i)+128.0),255u)<<24)&(0xff000000u)))^0x80000000u;}
+//------------------------------------------------------------------------------------------------------------------------------
+ AF1 ABsc0FromU1(AU1 i){return AF1((i )&255u)-128.0;}
+ AF1 ABsc1FromU1(AU1 i){return AF1((i>> 8)&255u)-128.0;}
+ AF1 ABsc2FromU1(AU1 i){return AF1((i>>16)&255u)-128.0;}
+ AF1 ABsc3FromU1(AU1 i){return AF1((i>>24)&255u)-128.0;}
+//------------------------------------------------------------------------------------------------------------------------------
+ AF1 ABsc0FromZbU1(AU1 i){return AF1(((i )&255u)^0x80u)-128.0;}
+ AF1 ABsc1FromZbU1(AU1 i){return AF1(((i>> 8)&255u)^0x80u)-128.0;}
+ AF1 ABsc2FromZbU1(AU1 i){return AF1(((i>>16)&255u)^0x80u)-128.0;}
+ AF1 ABsc3FromZbU1(AU1 i){return AF1(((i>>24)&255u)^0x80u)-128.0;}
+ #endif
+//==============================================================================================================================
+ #ifdef A_HALF
+ // Takes {x0,x1} and {y0,y1} and builds {{x0,y0},{x1,y1}}.
+ AW2 ABsc01ToW2(AH2 x,AH2 y){x=x*AH2_(1.0/32768.0)+AH2_(0.25/32768.0);y=y*AH2_(1.0/32768.0)+AH2_(0.25/32768.0);
+ return AW2_AU1(APermGCEA(AU2(AU1_AW2(AW2_AH2(x)),AU1_AW2(AW2_AH2(y)))));}
+//------------------------------------------------------------------------------------------------------------------------------
+ AU2 ABsc0ToU2(AU2 d,AH2 i){AU1 b=AU1_AW2(AW2_AH2(i*AH2_(1.0/32768.0)+AH2_(0.25/32768.0)));
+ return AU2(APermHGFA(AU2(d.x,b)),APermHGFC(AU2(d.y,b)));}
+ AU2 ABsc1ToU2(AU2 d,AH2 i){AU1 b=AU1_AW2(AW2_AH2(i*AH2_(1.0/32768.0)+AH2_(0.25/32768.0)));
+ return AU2(APermHGAE(AU2(d.x,b)),APermHGCE(AU2(d.y,b)));}
+ AU2 ABsc2ToU2(AU2 d,AH2 i){AU1 b=AU1_AW2(AW2_AH2(i*AH2_(1.0/32768.0)+AH2_(0.25/32768.0)));
+ return AU2(APermHAFE(AU2(d.x,b)),APermHCFE(AU2(d.y,b)));}
+ AU2 ABsc3ToU2(AU2 d,AH2 i){AU1 b=AU1_AW2(AW2_AH2(i*AH2_(1.0/32768.0)+AH2_(0.25/32768.0)));
+ return AU2(APermAGFE(AU2(d.x,b)),APermCGFE(AU2(d.y,b)));}
+//------------------------------------------------------------------------------------------------------------------------------
+ AU2 ABsc0ToZbU2(AU2 d,AH2 i){AU1 b=AU1_AW2(AW2_AH2(i*AH2_(1.0/32768.0)+AH2_(0.25/32768.0)))^0x00800080u;
+ return AU2(APermHGFA(AU2(d.x,b)),APermHGFC(AU2(d.y,b)));}
+ AU2 ABsc1ToZbU2(AU2 d,AH2 i){AU1 b=AU1_AW2(AW2_AH2(i*AH2_(1.0/32768.0)+AH2_(0.25/32768.0)))^0x00800080u;
+ return AU2(APermHGAE(AU2(d.x,b)),APermHGCE(AU2(d.y,b)));}
+ AU2 ABsc2ToZbU2(AU2 d,AH2 i){AU1 b=AU1_AW2(AW2_AH2(i*AH2_(1.0/32768.0)+AH2_(0.25/32768.0)))^0x00800080u;
+ return AU2(APermHAFE(AU2(d.x,b)),APermHCFE(AU2(d.y,b)));}
+ AU2 ABsc3ToZbU2(AU2 d,AH2 i){AU1 b=AU1_AW2(AW2_AH2(i*AH2_(1.0/32768.0)+AH2_(0.25/32768.0)))^0x00800080u;
+ return AU2(APermAGFE(AU2(d.x,b)),APermCGFE(AU2(d.y,b)));}
+//------------------------------------------------------------------------------------------------------------------------------
+ AH2 ABsc0FromU2(AU2 i){return AH2_AW2(AW2_AU1(APerm0E0A(i)))*AH2_(32768.0)-AH2_(0.25);}
+ AH2 ABsc1FromU2(AU2 i){return AH2_AW2(AW2_AU1(APerm0F0B(i)))*AH2_(32768.0)-AH2_(0.25);}
+ AH2 ABsc2FromU2(AU2 i){return AH2_AW2(AW2_AU1(APerm0G0C(i)))*AH2_(32768.0)-AH2_(0.25);}
+ AH2 ABsc3FromU2(AU2 i){return AH2_AW2(AW2_AU1(APerm0H0D(i)))*AH2_(32768.0)-AH2_(0.25);}
+//------------------------------------------------------------------------------------------------------------------------------
+ AH2 ABsc0FromZbU2(AU2 i){return AH2_AW2(AW2_AU1(APerm0E0A(i)^0x00800080u))*AH2_(32768.0)-AH2_(0.25);}
+ AH2 ABsc1FromZbU2(AU2 i){return AH2_AW2(AW2_AU1(APerm0F0B(i)^0x00800080u))*AH2_(32768.0)-AH2_(0.25);}
+ AH2 ABsc2FromZbU2(AU2 i){return AH2_AW2(AW2_AU1(APerm0G0C(i)^0x00800080u))*AH2_(32768.0)-AH2_(0.25);}
+ AH2 ABsc3FromZbU2(AU2 i){return AH2_AW2(AW2_AU1(APerm0H0D(i)^0x00800080u))*AH2_(32768.0)-AH2_(0.25);}
+ #endif
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//_____________________________________________________________/\_______________________________________________________________
+//==============================================================================================================================
+// HALF APPROXIMATIONS
+//------------------------------------------------------------------------------------------------------------------------------
+// These support only positive inputs.
+// Did not see value yet in specialization for range.
+// Using quick testing, ended up mostly getting the same "best" approximation for various ranges.
+// With hardware that can co-execute transcendentals, the value in approximations could be less than expected.
+// However from a latency perspective, if execution of a transcendental is 4 clk, with no packed support, -> 8 clk total.
+// And co-execution would require a compiler interleaving a lot of independent work for packed usage.
+//------------------------------------------------------------------------------------------------------------------------------
+// The one Newton Raphson iteration form of rsq() was skipped (requires 6 ops total).
+// Same with sqrt(), as this could be x*rsq() (7 ops).
+//==============================================================================================================================
+ #ifdef A_HALF
+ // Minimize squared error across full positive range, 2 ops.
+ // The 0x1de2 based approximation maps {0 to 1} input maps to < 1 output.
+ AH1 APrxLoSqrtH1(AH1 a){return AH1_AW1((AW1_AH1(a)>>AW1_(1))+AW1_(0x1de2));}
+ AH2 APrxLoSqrtH2(AH2 a){return AH2_AW2((AW2_AH2(a)>>AW2_(1))+AW2_(0x1de2));}
+ AH3 APrxLoSqrtH3(AH3 a){return AH3_AW3((AW3_AH3(a)>>AW3_(1))+AW3_(0x1de2));}
+ AH4 APrxLoSqrtH4(AH4 a){return AH4_AW4((AW4_AH4(a)>>AW4_(1))+AW4_(0x1de2));}
+//------------------------------------------------------------------------------------------------------------------------------
+ // Lower precision estimation, 1 op.
+ // Minimize squared error across {smallest normal to 16384.0}.
+ AH1 APrxLoRcpH1(AH1 a){return AH1_AW1(AW1_(0x7784)-AW1_AH1(a));}
+ AH2 APrxLoRcpH2(AH2 a){return AH2_AW2(AW2_(0x7784)-AW2_AH2(a));}
+ AH3 APrxLoRcpH3(AH3 a){return AH3_AW3(AW3_(0x7784)-AW3_AH3(a));}
+ AH4 APrxLoRcpH4(AH4 a){return AH4_AW4(AW4_(0x7784)-AW4_AH4(a));}
+//------------------------------------------------------------------------------------------------------------------------------
+ // Medium precision estimation, one Newton Raphson iteration, 3 ops.
+ AH1 APrxMedRcpH1(AH1 a){AH1 b=AH1_AW1(AW1_(0x778d)-AW1_AH1(a));return b*(-b*a+AH1_(2.0));}
+ AH2 APrxMedRcpH2(AH2 a){AH2 b=AH2_AW2(AW2_(0x778d)-AW2_AH2(a));return b*(-b*a+AH2_(2.0));}
+ AH3 APrxMedRcpH3(AH3 a){AH3 b=AH3_AW3(AW3_(0x778d)-AW3_AH3(a));return b*(-b*a+AH3_(2.0));}
+ AH4 APrxMedRcpH4(AH4 a){AH4 b=AH4_AW4(AW4_(0x778d)-AW4_AH4(a));return b*(-b*a+AH4_(2.0));}
+//------------------------------------------------------------------------------------------------------------------------------
+ // Minimize squared error across {smallest normal to 16384.0}, 2 ops.
+ AH1 APrxLoRsqH1(AH1 a){return AH1_AW1(AW1_(0x59a3)-(AW1_AH1(a)>>AW1_(1)));}
+ AH2 APrxLoRsqH2(AH2 a){return AH2_AW2(AW2_(0x59a3)-(AW2_AH2(a)>>AW2_(1)));}
+ AH3 APrxLoRsqH3(AH3 a){return AH3_AW3(AW3_(0x59a3)-(AW3_AH3(a)>>AW3_(1)));}
+ AH4 APrxLoRsqH4(AH4 a){return AH4_AW4(AW4_(0x59a3)-(AW4_AH4(a)>>AW4_(1)));}
+ #endif
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//_____________________________________________________________/\_______________________________________________________________
+//==============================================================================================================================
+// FLOAT APPROXIMATIONS
+//------------------------------------------------------------------------------------------------------------------------------
+// Michal Drobot has an excellent presentation on these: "Low Level Optimizations For GCN",
+// - Idea dates back to SGI, then to Quake 3, etc.
+// - https://michaldrobot.files.wordpress.com/2014/05/gcn_alu_opt_digitaldragons2014.pdf
+// - sqrt(x)=rsqrt(x)*x
+// - rcp(x)=rsqrt(x)*rsqrt(x) for positive x
+// - https://github.com/michaldrobot/ShaderFastLibs/blob/master/ShaderFastMathLib.h
+//------------------------------------------------------------------------------------------------------------------------------
+// These below are from perhaps less complete searching for optimal.
+// Used FP16 normal range for testing with +4096 32-bit step size for sampling error.
+// So these match up well with the half approximations.
+//==============================================================================================================================
+ AF1 APrxLoSqrtF1(AF1 a){return AF1_AU1((AU1_AF1(a)>>AU1_(1))+AU1_(0x1fbc4639));}
+ AF1 APrxLoRcpF1(AF1 a){return AF1_AU1(AU1_(0x7ef07ebb)-AU1_AF1(a));}
+ AF1 APrxMedRcpF1(AF1 a){AF1 b=AF1_AU1(AU1_(0x7ef19fff)-AU1_AF1(a));return b*(-b*a+AF1_(2.0));}
+ AF1 APrxLoRsqF1(AF1 a){return AF1_AU1(AU1_(0x5f347d74)-(AU1_AF1(a)>>AU1_(1)));}
+//------------------------------------------------------------------------------------------------------------------------------
+ AF2 APrxLoSqrtF2(AF2 a){return AF2_AU2((AU2_AF2(a)>>AU2_(1))+AU2_(0x1fbc4639));}
+ AF2 APrxLoRcpF2(AF2 a){return AF2_AU2(AU2_(0x7ef07ebb)-AU2_AF2(a));}
+ AF2 APrxMedRcpF2(AF2 a){AF2 b=AF2_AU2(AU2_(0x7ef19fff)-AU2_AF2(a));return b*(-b*a+AF2_(2.0));}
+ AF2 APrxLoRsqF2(AF2 a){return AF2_AU2(AU2_(0x5f347d74)-(AU2_AF2(a)>>AU2_(1)));}
+//------------------------------------------------------------------------------------------------------------------------------
+ AF3 APrxLoSqrtF3(AF3 a){return AF3_AU3((AU3_AF3(a)>>AU3_(1))+AU3_(0x1fbc4639));}
+ AF3 APrxLoRcpF3(AF3 a){return AF3_AU3(AU3_(0x7ef07ebb)-AU3_AF3(a));}
+ AF3 APrxMedRcpF3(AF3 a){AF3 b=AF3_AU3(AU3_(0x7ef19fff)-AU3_AF3(a));return b*(-b*a+AF3_(2.0));}
+ AF3 APrxLoRsqF3(AF3 a){return AF3_AU3(AU3_(0x5f347d74)-(AU3_AF3(a)>>AU3_(1)));}
+//------------------------------------------------------------------------------------------------------------------------------
+ AF4 APrxLoSqrtF4(AF4 a){return AF4_AU4((AU4_AF4(a)>>AU4_(1))+AU4_(0x1fbc4639));}
+ AF4 APrxLoRcpF4(AF4 a){return AF4_AU4(AU4_(0x7ef07ebb)-AU4_AF4(a));}
+ AF4 APrxMedRcpF4(AF4 a){AF4 b=AF4_AU4(AU4_(0x7ef19fff)-AU4_AF4(a));return b*(-b*a+AF4_(2.0));}
+ AF4 APrxLoRsqF4(AF4 a){return AF4_AU4(AU4_(0x5f347d74)-(AU4_AF4(a)>>AU4_(1)));}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//_____________________________________________________________/\_______________________________________________________________
+//==============================================================================================================================
+// PQ APPROXIMATIONS
+//------------------------------------------------------------------------------------------------------------------------------
+// PQ is very close to x^(1/8). The functions below Use the fast float approximation method to do
+// PQ<~>Gamma2 (4th power and fast 4th root) and PQ<~>Linear (8th power and fast 8th root). Maximum error is ~0.2%.
+//==============================================================================================================================
+// Helpers
+ AF1 Quart(AF1 a) { a = a * a; return a * a;}
+ AF1 Oct(AF1 a) { a = a * a; a = a * a; return a * a; }
+ AF2 Quart(AF2 a) { a = a * a; return a * a; }
+ AF2 Oct(AF2 a) { a = a * a; a = a * a; return a * a; }
+ AF3 Quart(AF3 a) { a = a * a; return a * a; }
+ AF3 Oct(AF3 a) { a = a * a; a = a * a; return a * a; }
+ AF4 Quart(AF4 a) { a = a * a; return a * a; }
+ AF4 Oct(AF4 a) { a = a * a; a = a * a; return a * a; }
+ //------------------------------------------------------------------------------------------------------------------------------
+ AF1 APrxPQToGamma2(AF1 a) { return Quart(a); }
+ AF1 APrxPQToLinear(AF1 a) { return Oct(a); }
+ AF1 APrxLoGamma2ToPQ(AF1 a) { return AF1_AU1((AU1_AF1(a) >> AU1_(2)) + AU1_(0x2F9A4E46)); }
+ AF1 APrxMedGamma2ToPQ(AF1 a) { AF1 b = AF1_AU1((AU1_AF1(a) >> AU1_(2)) + AU1_(0x2F9A4E46)); AF1 b4 = Quart(b); return b - b * (b4 - a) / (AF1_(4.0) * b4); }
+ AF1 APrxHighGamma2ToPQ(AF1 a) { return sqrt(sqrt(a)); }
+ AF1 APrxLoLinearToPQ(AF1 a) { return AF1_AU1((AU1_AF1(a) >> AU1_(3)) + AU1_(0x378D8723)); }
+ AF1 APrxMedLinearToPQ(AF1 a) { AF1 b = AF1_AU1((AU1_AF1(a) >> AU1_(3)) + AU1_(0x378D8723)); AF1 b8 = Oct(b); return b - b * (b8 - a) / (AF1_(8.0) * b8); }
+ AF1 APrxHighLinearToPQ(AF1 a) { return sqrt(sqrt(sqrt(a))); }
+ //------------------------------------------------------------------------------------------------------------------------------
+ AF2 APrxPQToGamma2(AF2 a) { return Quart(a); }
+ AF2 APrxPQToLinear(AF2 a) { return Oct(a); }
+ AF2 APrxLoGamma2ToPQ(AF2 a) { return AF2_AU2((AU2_AF2(a) >> AU2_(2)) + AU2_(0x2F9A4E46)); }
+ AF2 APrxMedGamma2ToPQ(AF2 a) { AF2 b = AF2_AU2((AU2_AF2(a) >> AU2_(2)) + AU2_(0x2F9A4E46)); AF2 b4 = Quart(b); return b - b * (b4 - a) / (AF1_(4.0) * b4); }
+ AF2 APrxHighGamma2ToPQ(AF2 a) { return sqrt(sqrt(a)); }
+ AF2 APrxLoLinearToPQ(AF2 a) { return AF2_AU2((AU2_AF2(a) >> AU2_(3)) + AU2_(0x378D8723)); }
+ AF2 APrxMedLinearToPQ(AF2 a) { AF2 b = AF2_AU2((AU2_AF2(a) >> AU2_(3)) + AU2_(0x378D8723)); AF2 b8 = Oct(b); return b - b * (b8 - a) / (AF1_(8.0) * b8); }
+ AF2 APrxHighLinearToPQ(AF2 a) { return sqrt(sqrt(sqrt(a))); }
+ //------------------------------------------------------------------------------------------------------------------------------
+ AF3 APrxPQToGamma2(AF3 a) { return Quart(a); }
+ AF3 APrxPQToLinear(AF3 a) { return Oct(a); }
+ AF3 APrxLoGamma2ToPQ(AF3 a) { return AF3_AU3((AU3_AF3(a) >> AU3_(2)) + AU3_(0x2F9A4E46)); }
+ AF3 APrxMedGamma2ToPQ(AF3 a) { AF3 b = AF3_AU3((AU3_AF3(a) >> AU3_(2)) + AU3_(0x2F9A4E46)); AF3 b4 = Quart(b); return b - b * (b4 - a) / (AF1_(4.0) * b4); }
+ AF3 APrxHighGamma2ToPQ(AF3 a) { return sqrt(sqrt(a)); }
+ AF3 APrxLoLinearToPQ(AF3 a) { return AF3_AU3((AU3_AF3(a) >> AU3_(3)) + AU3_(0x378D8723)); }
+ AF3 APrxMedLinearToPQ(AF3 a) { AF3 b = AF3_AU3((AU3_AF3(a) >> AU3_(3)) + AU3_(0x378D8723)); AF3 b8 = Oct(b); return b - b * (b8 - a) / (AF1_(8.0) * b8); }
+ AF3 APrxHighLinearToPQ(AF3 a) { return sqrt(sqrt(sqrt(a))); }
+ //------------------------------------------------------------------------------------------------------------------------------
+ AF4 APrxPQToGamma2(AF4 a) { return Quart(a); }
+ AF4 APrxPQToLinear(AF4 a) { return Oct(a); }
+ AF4 APrxLoGamma2ToPQ(AF4 a) { return AF4_AU4((AU4_AF4(a) >> AU4_(2)) + AU4_(0x2F9A4E46)); }
+ AF4 APrxMedGamma2ToPQ(AF4 a) { AF4 b = AF4_AU4((AU4_AF4(a) >> AU4_(2)) + AU4_(0x2F9A4E46)); AF4 b4 = Quart(b); return b - b * (b4 - a) / (AF1_(4.0) * b4); }
+ AF4 APrxHighGamma2ToPQ(AF4 a) { return sqrt(sqrt(a)); }
+ AF4 APrxLoLinearToPQ(AF4 a) { return AF4_AU4((AU4_AF4(a) >> AU4_(3)) + AU4_(0x378D8723)); }
+ AF4 APrxMedLinearToPQ(AF4 a) { AF4 b = AF4_AU4((AU4_AF4(a) >> AU4_(3)) + AU4_(0x378D8723)); AF4 b8 = Oct(b); return b - b * (b8 - a) / (AF1_(8.0) * b8); }
+ AF4 APrxHighLinearToPQ(AF4 a) { return sqrt(sqrt(sqrt(a))); }
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//_____________________________________________________________/\_______________________________________________________________
+//==============================================================================================================================
+// PARABOLIC SIN & COS
+//------------------------------------------------------------------------------------------------------------------------------
+// Approximate answers to transcendental questions.
+//------------------------------------------------------------------------------------------------------------------------------
+//==============================================================================================================================
+ #if 1
+ // Valid input range is {-1 to 1} representing {0 to 2 pi}.
+ // Output range is {-1/4 to 1/4} representing {-1 to 1}.
+ AF1 APSinF1(AF1 x){return x*abs(x)-x;} // MAD.
+ AF2 APSinF2(AF2 x){return x*abs(x)-x;}
+ AF1 APCosF1(AF1 x){x=AFractF1(x*AF1_(0.5)+AF1_(0.75));x=x*AF1_(2.0)-AF1_(1.0);return APSinF1(x);} // 3x MAD, FRACT
+ AF2 APCosF2(AF2 x){x=AFractF2(x*AF2_(0.5)+AF2_(0.75));x=x*AF2_(2.0)-AF2_(1.0);return APSinF2(x);}
+ AF2 APSinCosF1(AF1 x){AF1 y=AFractF1(x*AF1_(0.5)+AF1_(0.75));y=y*AF1_(2.0)-AF1_(1.0);return APSinF2(AF2(x,y));}
+ #endif
+//------------------------------------------------------------------------------------------------------------------------------
+ #ifdef A_HALF
+ // For a packed {sin,cos} pair,
+ // - Native takes 16 clocks and 4 issue slots (no packed transcendentals).
+ // - Parabolic takes 8 clocks and 8 issue slots (only fract is non-packed).
+ AH1 APSinH1(AH1 x){return x*abs(x)-x;}
+ AH2 APSinH2(AH2 x){return x*abs(x)-x;} // AND,FMA
+ AH1 APCosH1(AH1 x){x=AFractH1(x*AH1_(0.5)+AH1_(0.75));x=x*AH1_(2.0)-AH1_(1.0);return APSinH1(x);}
+ AH2 APCosH2(AH2 x){x=AFractH2(x*AH2_(0.5)+AH2_(0.75));x=x*AH2_(2.0)-AH2_(1.0);return APSinH2(x);} // 3x FMA, 2xFRACT, AND
+ AH2 APSinCosH1(AH1 x){AH1 y=AFractH1(x*AH1_(0.5)+AH1_(0.75));y=y*AH1_(2.0)-AH1_(1.0);return APSinH2(AH2(x,y));}
+ #endif
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//_____________________________________________________________/\_______________________________________________________________
+//==============================================================================================================================
+// [ZOL] ZERO ONE LOGIC
+//------------------------------------------------------------------------------------------------------------------------------
+// Conditional free logic designed for easy 16-bit packing, and backwards porting to 32-bit.
+//------------------------------------------------------------------------------------------------------------------------------
+// 0 := false
+// 1 := true
+//------------------------------------------------------------------------------------------------------------------------------
+// AndNot(x,y) -> !(x&y) .... One op.
+// AndOr(x,y,z) -> (x&y)|z ... One op.
+// GtZero(x) -> x>0.0 ..... One op.
+// Sel(x,y,z) -> x?y:z ..... Two ops, has no precision loss.
+// Signed(x) -> x<0.0 ..... One op.
+// ZeroPass(x,y) -> x?0:y ..... Two ops, 'y' is a pass through safe for aliasing as integer.
+//------------------------------------------------------------------------------------------------------------------------------
+// OPTIMIZATION NOTES
+// ==================
+// - On Vega to use 2 constants in a packed op, pass in as one AW2 or one AH2 'k.xy' and use as 'k.xx' and 'k.yy'.
+// For example 'a.xy*k.xx+k.yy'.
+//==============================================================================================================================
+ #if 1
+ AU1 AZolAndU1(AU1 x,AU1 y){return min(x,y);}
+ AU2 AZolAndU2(AU2 x,AU2 y){return min(x,y);}
+ AU3 AZolAndU3(AU3 x,AU3 y){return min(x,y);}
+ AU4 AZolAndU4(AU4 x,AU4 y){return min(x,y);}
+//------------------------------------------------------------------------------------------------------------------------------
+ AU1 AZolNotU1(AU1 x){return x^AU1_(1);}
+ AU2 AZolNotU2(AU2 x){return x^AU2_(1);}
+ AU3 AZolNotU3(AU3 x){return x^AU3_(1);}
+ AU4 AZolNotU4(AU4 x){return x^AU4_(1);}
+//------------------------------------------------------------------------------------------------------------------------------
+ AU1 AZolOrU1(AU1 x,AU1 y){return max(x,y);}
+ AU2 AZolOrU2(AU2 x,AU2 y){return max(x,y);}
+ AU3 AZolOrU3(AU3 x,AU3 y){return max(x,y);}
+ AU4 AZolOrU4(AU4 x,AU4 y){return max(x,y);}
+//==============================================================================================================================
+ AU1 AZolF1ToU1(AF1 x){return AU1(x);}
+ AU2 AZolF2ToU2(AF2 x){return AU2(x);}
+ AU3 AZolF3ToU3(AF3 x){return AU3(x);}
+ AU4 AZolF4ToU4(AF4 x){return AU4(x);}
+//------------------------------------------------------------------------------------------------------------------------------
+ // 2 ops, denormals don't work in 32-bit on PC (and if they are enabled, OMOD is disabled).
+ AU1 AZolNotF1ToU1(AF1 x){return AU1(AF1_(1.0)-x);}
+ AU2 AZolNotF2ToU2(AF2 x){return AU2(AF2_(1.0)-x);}
+ AU3 AZolNotF3ToU3(AF3 x){return AU3(AF3_(1.0)-x);}
+ AU4 AZolNotF4ToU4(AF4 x){return AU4(AF4_(1.0)-x);}
+//------------------------------------------------------------------------------------------------------------------------------
+ AF1 AZolU1ToF1(AU1 x){return AF1(x);}
+ AF2 AZolU2ToF2(AU2 x){return AF2(x);}
+ AF3 AZolU3ToF3(AU3 x){return AF3(x);}
+ AF4 AZolU4ToF4(AU4 x){return AF4(x);}
+//==============================================================================================================================
+ AF1 AZolAndF1(AF1 x,AF1 y){return min(x,y);}
+ AF2 AZolAndF2(AF2 x,AF2 y){return min(x,y);}
+ AF3 AZolAndF3(AF3 x,AF3 y){return min(x,y);}
+ AF4 AZolAndF4(AF4 x,AF4 y){return min(x,y);}
+//------------------------------------------------------------------------------------------------------------------------------
+ AF1 ASolAndNotF1(AF1 x,AF1 y){return (-x)*y+AF1_(1.0);}
+ AF2 ASolAndNotF2(AF2 x,AF2 y){return (-x)*y+AF2_(1.0);}
+ AF3 ASolAndNotF3(AF3 x,AF3 y){return (-x)*y+AF3_(1.0);}
+ AF4 ASolAndNotF4(AF4 x,AF4 y){return (-x)*y+AF4_(1.0);}
+//------------------------------------------------------------------------------------------------------------------------------
+ AF1 AZolAndOrF1(AF1 x,AF1 y,AF1 z){return ASatF1(x*y+z);}
+ AF2 AZolAndOrF2(AF2 x,AF2 y,AF2 z){return ASatF2(x*y+z);}
+ AF3 AZolAndOrF3(AF3 x,AF3 y,AF3 z){return ASatF3(x*y+z);}
+ AF4 AZolAndOrF4(AF4 x,AF4 y,AF4 z){return ASatF4(x*y+z);}
+//------------------------------------------------------------------------------------------------------------------------------
+ AF1 AZolGtZeroF1(AF1 x){return ASatF1(x*AF1_(A_INFP_F));}
+ AF2 AZolGtZeroF2(AF2 x){return ASatF2(x*AF2_(A_INFP_F));}
+ AF3 AZolGtZeroF3(AF3 x){return ASatF3(x*AF3_(A_INFP_F));}
+ AF4 AZolGtZeroF4(AF4 x){return ASatF4(x*AF4_(A_INFP_F));}
+//------------------------------------------------------------------------------------------------------------------------------
+ AF1 AZolNotF1(AF1 x){return AF1_(1.0)-x;}
+ AF2 AZolNotF2(AF2 x){return AF2_(1.0)-x;}
+ AF3 AZolNotF3(AF3 x){return AF3_(1.0)-x;}
+ AF4 AZolNotF4(AF4 x){return AF4_(1.0)-x;}
+//------------------------------------------------------------------------------------------------------------------------------
+ AF1 AZolOrF1(AF1 x,AF1 y){return max(x,y);}
+ AF2 AZolOrF2(AF2 x,AF2 y){return max(x,y);}
+ AF3 AZolOrF3(AF3 x,AF3 y){return max(x,y);}
+ AF4 AZolOrF4(AF4 x,AF4 y){return max(x,y);}
+//------------------------------------------------------------------------------------------------------------------------------
+ AF1 AZolSelF1(AF1 x,AF1 y,AF1 z){AF1 r=(-x)*z+z;return x*y+r;}
+ AF2 AZolSelF2(AF2 x,AF2 y,AF2 z){AF2 r=(-x)*z+z;return x*y+r;}
+ AF3 AZolSelF3(AF3 x,AF3 y,AF3 z){AF3 r=(-x)*z+z;return x*y+r;}
+ AF4 AZolSelF4(AF4 x,AF4 y,AF4 z){AF4 r=(-x)*z+z;return x*y+r;}
+//------------------------------------------------------------------------------------------------------------------------------
+ AF1 AZolSignedF1(AF1 x){return ASatF1(x*AF1_(A_INFN_F));}
+ AF2 AZolSignedF2(AF2 x){return ASatF2(x*AF2_(A_INFN_F));}
+ AF3 AZolSignedF3(AF3 x){return ASatF3(x*AF3_(A_INFN_F));}
+ AF4 AZolSignedF4(AF4 x){return ASatF4(x*AF4_(A_INFN_F));}
+//------------------------------------------------------------------------------------------------------------------------------
+ AF1 AZolZeroPassF1(AF1 x,AF1 y){return AF1_AU1((AU1_AF1(x)!=AU1_(0))?AU1_(0):AU1_AF1(y));}
+ AF2 AZolZeroPassF2(AF2 x,AF2 y){return AF2_AU2((AU2_AF2(x)!=AU2_(0))?AU2_(0):AU2_AF2(y));}
+ AF3 AZolZeroPassF3(AF3 x,AF3 y){return AF3_AU3((AU3_AF3(x)!=AU3_(0))?AU3_(0):AU3_AF3(y));}
+ AF4 AZolZeroPassF4(AF4 x,AF4 y){return AF4_AU4((AU4_AF4(x)!=AU4_(0))?AU4_(0):AU4_AF4(y));}
+ #endif
+//==============================================================================================================================
+ #ifdef A_HALF
+ AW1 AZolAndW1(AW1 x,AW1 y){return min(x,y);}
+ AW2 AZolAndW2(AW2 x,AW2 y){return min(x,y);}
+ AW3 AZolAndW3(AW3 x,AW3 y){return min(x,y);}
+ AW4 AZolAndW4(AW4 x,AW4 y){return min(x,y);}
+//------------------------------------------------------------------------------------------------------------------------------
+ AW1 AZolNotW1(AW1 x){return x^AW1_(1);}
+ AW2 AZolNotW2(AW2 x){return x^AW2_(1);}
+ AW3 AZolNotW3(AW3 x){return x^AW3_(1);}
+ AW4 AZolNotW4(AW4 x){return x^AW4_(1);}
+//------------------------------------------------------------------------------------------------------------------------------
+ AW1 AZolOrW1(AW1 x,AW1 y){return max(x,y);}
+ AW2 AZolOrW2(AW2 x,AW2 y){return max(x,y);}
+ AW3 AZolOrW3(AW3 x,AW3 y){return max(x,y);}
+ AW4 AZolOrW4(AW4 x,AW4 y){return max(x,y);}
+//==============================================================================================================================
+ // Uses denormal trick.
+ AW1 AZolH1ToW1(AH1 x){return AW1_AH1(x*AH1_AW1(AW1_(1)));}
+ AW2 AZolH2ToW2(AH2 x){return AW2_AH2(x*AH2_AW2(AW2_(1)));}
+ AW3 AZolH3ToW3(AH3 x){return AW3_AH3(x*AH3_AW3(AW3_(1)));}
+ AW4 AZolH4ToW4(AH4 x){return AW4_AH4(x*AH4_AW4(AW4_(1)));}
+//------------------------------------------------------------------------------------------------------------------------------
+ // AMD arch lacks a packed conversion opcode.
+ AH1 AZolW1ToH1(AW1 x){return AH1_AW1(x*AW1_AH1(AH1_(1.0)));}
+ AH2 AZolW2ToH2(AW2 x){return AH2_AW2(x*AW2_AH2(AH2_(1.0)));}
+ AH3 AZolW1ToH3(AW3 x){return AH3_AW3(x*AW3_AH3(AH3_(1.0)));}
+ AH4 AZolW2ToH4(AW4 x){return AH4_AW4(x*AW4_AH4(AH4_(1.0)));}
+//==============================================================================================================================
+ AH1 AZolAndH1(AH1 x,AH1 y){return min(x,y);}
+ AH2 AZolAndH2(AH2 x,AH2 y){return min(x,y);}
+ AH3 AZolAndH3(AH3 x,AH3 y){return min(x,y);}
+ AH4 AZolAndH4(AH4 x,AH4 y){return min(x,y);}
+//------------------------------------------------------------------------------------------------------------------------------
+ AH1 ASolAndNotH1(AH1 x,AH1 y){return (-x)*y+AH1_(1.0);}
+ AH2 ASolAndNotH2(AH2 x,AH2 y){return (-x)*y+AH2_(1.0);}
+ AH3 ASolAndNotH3(AH3 x,AH3 y){return (-x)*y+AH3_(1.0);}
+ AH4 ASolAndNotH4(AH4 x,AH4 y){return (-x)*y+AH4_(1.0);}
+//------------------------------------------------------------------------------------------------------------------------------
+ AH1 AZolAndOrH1(AH1 x,AH1 y,AH1 z){return ASatH1(x*y+z);}
+ AH2 AZolAndOrH2(AH2 x,AH2 y,AH2 z){return ASatH2(x*y+z);}
+ AH3 AZolAndOrH3(AH3 x,AH3 y,AH3 z){return ASatH3(x*y+z);}
+ AH4 AZolAndOrH4(AH4 x,AH4 y,AH4 z){return ASatH4(x*y+z);}
+//------------------------------------------------------------------------------------------------------------------------------
+ AH1 AZolGtZeroH1(AH1 x){return ASatH1(x*AH1_(A_INFP_H));}
+ AH2 AZolGtZeroH2(AH2 x){return ASatH2(x*AH2_(A_INFP_H));}
+ AH3 AZolGtZeroH3(AH3 x){return ASatH3(x*AH3_(A_INFP_H));}
+ AH4 AZolGtZeroH4(AH4 x){return ASatH4(x*AH4_(A_INFP_H));}
+//------------------------------------------------------------------------------------------------------------------------------
+ AH1 AZolNotH1(AH1 x){return AH1_(1.0)-x;}
+ AH2 AZolNotH2(AH2 x){return AH2_(1.0)-x;}
+ AH3 AZolNotH3(AH3 x){return AH3_(1.0)-x;}
+ AH4 AZolNotH4(AH4 x){return AH4_(1.0)-x;}
+//------------------------------------------------------------------------------------------------------------------------------
+ AH1 AZolOrH1(AH1 x,AH1 y){return max(x,y);}
+ AH2 AZolOrH2(AH2 x,AH2 y){return max(x,y);}
+ AH3 AZolOrH3(AH3 x,AH3 y){return max(x,y);}
+ AH4 AZolOrH4(AH4 x,AH4 y){return max(x,y);}
+//------------------------------------------------------------------------------------------------------------------------------
+ AH1 AZolSelH1(AH1 x,AH1 y,AH1 z){AH1 r=(-x)*z+z;return x*y+r;}
+ AH2 AZolSelH2(AH2 x,AH2 y,AH2 z){AH2 r=(-x)*z+z;return x*y+r;}
+ AH3 AZolSelH3(AH3 x,AH3 y,AH3 z){AH3 r=(-x)*z+z;return x*y+r;}
+ AH4 AZolSelH4(AH4 x,AH4 y,AH4 z){AH4 r=(-x)*z+z;return x*y+r;}
+//------------------------------------------------------------------------------------------------------------------------------
+ AH1 AZolSignedH1(AH1 x){return ASatH1(x*AH1_(A_INFN_H));}
+ AH2 AZolSignedH2(AH2 x){return ASatH2(x*AH2_(A_INFN_H));}
+ AH3 AZolSignedH3(AH3 x){return ASatH3(x*AH3_(A_INFN_H));}
+ AH4 AZolSignedH4(AH4 x){return ASatH4(x*AH4_(A_INFN_H));}
+ #endif
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//_____________________________________________________________/\_______________________________________________________________
+//==============================================================================================================================
+// COLOR CONVERSIONS
+//------------------------------------------------------------------------------------------------------------------------------
+// These are all linear to/from some other space (where 'linear' has been shortened out of the function name).
+// So 'ToGamma' is 'LinearToGamma', and 'FromGamma' is 'LinearFromGamma'.
+// These are branch free implementations.
+// The AToSrgbF1() function is useful for stores for compute shaders for GPUs without hardware linear->sRGB store conversion.
+//------------------------------------------------------------------------------------------------------------------------------
+// TRANSFER FUNCTIONS
+// ==================
+// 709 ..... Rec709 used for some HDTVs
+// Gamma ... Typically 2.2 for some PC displays, or 2.4-2.5 for CRTs, or 2.2 FreeSync2 native
+// Pq ...... PQ native for HDR10
+// Srgb .... The sRGB output, typical of PC displays, useful for 10-bit output, or storing to 8-bit UNORM without SRGB type
+// Two ..... Gamma 2.0, fastest conversion (useful for intermediate pass approximations)
+// Three ... Gamma 3.0, less fast, but good for HDR.
+//------------------------------------------------------------------------------------------------------------------------------
+// KEEPING TO SPEC
+// ===============
+// Both Rec.709 and sRGB have a linear segment which as spec'ed would intersect the curved segment 2 times.
+// (a.) For 8-bit sRGB, steps {0 to 10.3} are in the linear region (4% of the encoding range).
+// (b.) For 8-bit 709, steps {0 to 20.7} are in the linear region (8% of the encoding range).
+// Also there is a slight step in the transition regions.
+// Precision of the coefficients in the spec being the likely cause.
+// Main usage case of the sRGB code is to do the linear->sRGB converstion in a compute shader before store.
+// This is to work around lack of hardware (typically only ROP does the conversion for free).
+// To "correct" the linear segment, would be to introduce error, because hardware decode of sRGB->linear is fixed (and free).
+// So this header keeps with the spec.
+// For linear->sRGB transforms, the linear segment in some respects reduces error, because rounding in that region is linear.
+// Rounding in the curved region in hardware (and fast software code) introduces error due to rounding in non-linear.
+//------------------------------------------------------------------------------------------------------------------------------
+// FOR PQ
+// ======
+// Both input and output is {0.0-1.0}, and where output 1.0 represents 10000.0 cd/m^2.
+// All constants are only specified to FP32 precision.
+// External PQ source reference,
+// - https://github.com/ampas/aces-dev/blob/master/transforms/ctl/utilities/ACESlib.Utilities_Color.a1.0.1.ctl
+//------------------------------------------------------------------------------------------------------------------------------
+// PACKED VERSIONS
+// ===============
+// These are the A*H2() functions.
+// There is no PQ functions as FP16 seemed to not have enough precision for the conversion.
+// The remaining functions are "good enough" for 8-bit, and maybe 10-bit if not concerned about a few 1-bit errors.
+// Precision is lowest in the 709 conversion, higher in sRGB, higher still in Two and Gamma (when using 2.2 at least).
+//------------------------------------------------------------------------------------------------------------------------------
+// NOTES
+// =====
+// Could be faster for PQ conversions to be in ALU or a texture lookup depending on usage case.
+//==============================================================================================================================
+ #if 1
+ AF1 ATo709F1(AF1 c){AF3 j=AF3(0.018*4.5,4.5,0.45);AF2 k=AF2(1.099,-0.099);
+ return clamp(j.x ,c*j.y ,pow(c,j.z )*k.x +k.y );}
+ AF2 ATo709F2(AF2 c){AF3 j=AF3(0.018*4.5,4.5,0.45);AF2 k=AF2(1.099,-0.099);
+ return clamp(j.xx ,c*j.yy ,pow(c,j.zz )*k.xx +k.yy );}
+ AF3 ATo709F3(AF3 c){AF3 j=AF3(0.018*4.5,4.5,0.45);AF2 k=AF2(1.099,-0.099);
+ return clamp(j.xxx,c*j.yyy,pow(c,j.zzz)*k.xxx+k.yyy);}
+//------------------------------------------------------------------------------------------------------------------------------
+ // Note 'rcpX' is '1/x', where the 'x' is what would be used in AFromGamma().
+ AF1 AToGammaF1(AF1 c,AF1 rcpX){return pow(c,AF1_(rcpX));}
+ AF2 AToGammaF2(AF2 c,AF1 rcpX){return pow(c,AF2_(rcpX));}
+ AF3 AToGammaF3(AF3 c,AF1 rcpX){return pow(c,AF3_(rcpX));}
+//------------------------------------------------------------------------------------------------------------------------------
+ AF1 AToPqF1(AF1 x){AF1 p=pow(x,AF1_(0.159302));
+ return pow((AF1_(0.835938)+AF1_(18.8516)*p)/(AF1_(1.0)+AF1_(18.6875)*p),AF1_(78.8438));}
+ AF2 AToPqF1(AF2 x){AF2 p=pow(x,AF2_(0.159302));
+ return pow((AF2_(0.835938)+AF2_(18.8516)*p)/(AF2_(1.0)+AF2_(18.6875)*p),AF2_(78.8438));}
+ AF3 AToPqF1(AF3 x){AF3 p=pow(x,AF3_(0.159302));
+ return pow((AF3_(0.835938)+AF3_(18.8516)*p)/(AF3_(1.0)+AF3_(18.6875)*p),AF3_(78.8438));}
+//------------------------------------------------------------------------------------------------------------------------------
+ AF1 AToSrgbF1(AF1 c){AF3 j=AF3(0.0031308*12.92,12.92,1.0/2.4);AF2 k=AF2(1.055,-0.055);
+ return clamp(j.x ,c*j.y ,pow(c,j.z )*k.x +k.y );}
+ AF2 AToSrgbF2(AF2 c){AF3 j=AF3(0.0031308*12.92,12.92,1.0/2.4);AF2 k=AF2(1.055,-0.055);
+ return clamp(j.xx ,c*j.yy ,pow(c,j.zz )*k.xx +k.yy );}
+ AF3 AToSrgbF3(AF3 c){AF3 j=AF3(0.0031308*12.92,12.92,1.0/2.4);AF2 k=AF2(1.055,-0.055);
+ return clamp(j.xxx,c*j.yyy,pow(c,j.zzz)*k.xxx+k.yyy);}
+//------------------------------------------------------------------------------------------------------------------------------
+ AF1 AToTwoF1(AF1 c){return sqrt(c);}
+ AF2 AToTwoF2(AF2 c){return sqrt(c);}
+ AF3 AToTwoF3(AF3 c){return sqrt(c);}
+//------------------------------------------------------------------------------------------------------------------------------
+ AF1 AToThreeF1(AF1 c){return pow(c,AF1_(1.0/3.0));}
+ AF2 AToThreeF2(AF2 c){return pow(c,AF2_(1.0/3.0));}
+ AF3 AToThreeF3(AF3 c){return pow(c,AF3_(1.0/3.0));}
+ #endif
+//==============================================================================================================================
+ #if 1
+ // Unfortunately median won't work here.
+ AF1 AFrom709F1(AF1 c){AF3 j=AF3(0.081/4.5,1.0/4.5,1.0/0.45);AF2 k=AF2(1.0/1.099,0.099/1.099);
+ return AZolSelF1(AZolSignedF1(c-j.x ),c*j.y ,pow(c*k.x +k.y ,j.z ));}
+ AF2 AFrom709F2(AF2 c){AF3 j=AF3(0.081/4.5,1.0/4.5,1.0/0.45);AF2 k=AF2(1.0/1.099,0.099/1.099);
+ return AZolSelF2(AZolSignedF2(c-j.xx ),c*j.yy ,pow(c*k.xx +k.yy ,j.zz ));}
+ AF3 AFrom709F3(AF3 c){AF3 j=AF3(0.081/4.5,1.0/4.5,1.0/0.45);AF2 k=AF2(1.0/1.099,0.099/1.099);
+ return AZolSelF3(AZolSignedF3(c-j.xxx),c*j.yyy,pow(c*k.xxx+k.yyy,j.zzz));}
+//------------------------------------------------------------------------------------------------------------------------------
+ AF1 AFromGammaF1(AF1 c,AF1 x){return pow(c,AF1_(x));}
+ AF2 AFromGammaF2(AF2 c,AF1 x){return pow(c,AF2_(x));}
+ AF3 AFromGammaF3(AF3 c,AF1 x){return pow(c,AF3_(x));}
+//------------------------------------------------------------------------------------------------------------------------------
+ AF1 AFromPqF1(AF1 x){AF1 p=pow(x,AF1_(0.0126833));
+ return pow(ASatF1(p-AF1_(0.835938))/(AF1_(18.8516)-AF1_(18.6875)*p),AF1_(6.27739));}
+ AF2 AFromPqF1(AF2 x){AF2 p=pow(x,AF2_(0.0126833));
+ return pow(ASatF2(p-AF2_(0.835938))/(AF2_(18.8516)-AF2_(18.6875)*p),AF2_(6.27739));}
+ AF3 AFromPqF1(AF3 x){AF3 p=pow(x,AF3_(0.0126833));
+ return pow(ASatF3(p-AF3_(0.835938))/(AF3_(18.8516)-AF3_(18.6875)*p),AF3_(6.27739));}
+//------------------------------------------------------------------------------------------------------------------------------
+ // Unfortunately median won't work here.
+ AF1 AFromSrgbF1(AF1 c){AF3 j=AF3(0.04045/12.92,1.0/12.92,2.4);AF2 k=AF2(1.0/1.055,0.055/1.055);
+ return AZolSelF1(AZolSignedF1(c-j.x ),c*j.y ,pow(c*k.x +k.y ,j.z ));}
+ AF2 AFromSrgbF2(AF2 c){AF3 j=AF3(0.04045/12.92,1.0/12.92,2.4);AF2 k=AF2(1.0/1.055,0.055/1.055);
+ return AZolSelF2(AZolSignedF2(c-j.xx ),c*j.yy ,pow(c*k.xx +k.yy ,j.zz ));}
+ AF3 AFromSrgbF3(AF3 c){AF3 j=AF3(0.04045/12.92,1.0/12.92,2.4);AF2 k=AF2(1.0/1.055,0.055/1.055);
+ return AZolSelF3(AZolSignedF3(c-j.xxx),c*j.yyy,pow(c*k.xxx+k.yyy,j.zzz));}
+//------------------------------------------------------------------------------------------------------------------------------
+ AF1 AFromTwoF1(AF1 c){return c*c;}
+ AF2 AFromTwoF2(AF2 c){return c*c;}
+ AF3 AFromTwoF3(AF3 c){return c*c;}
+//------------------------------------------------------------------------------------------------------------------------------
+ AF1 AFromThreeF1(AF1 c){return c*c*c;}
+ AF2 AFromThreeF2(AF2 c){return c*c*c;}
+ AF3 AFromThreeF3(AF3 c){return c*c*c;}
+ #endif
+//==============================================================================================================================
+ #ifdef A_HALF
+ AH1 ATo709H1(AH1 c){AH3 j=AH3(0.018*4.5,4.5,0.45);AH2 k=AH2(1.099,-0.099);
+ return clamp(j.x ,c*j.y ,pow(c,j.z )*k.x +k.y );}
+ AH2 ATo709H2(AH2 c){AH3 j=AH3(0.018*4.5,4.5,0.45);AH2 k=AH2(1.099,-0.099);
+ return clamp(j.xx ,c*j.yy ,pow(c,j.zz )*k.xx +k.yy );}
+ AH3 ATo709H3(AH3 c){AH3 j=AH3(0.018*4.5,4.5,0.45);AH2 k=AH2(1.099,-0.099);
+ return clamp(j.xxx,c*j.yyy,pow(c,j.zzz)*k.xxx+k.yyy);}
+//------------------------------------------------------------------------------------------------------------------------------
+ AH1 AToGammaH1(AH1 c,AH1 rcpX){return pow(c,AH1_(rcpX));}
+ AH2 AToGammaH2(AH2 c,AH1 rcpX){return pow(c,AH2_(rcpX));}
+ AH3 AToGammaH3(AH3 c,AH1 rcpX){return pow(c,AH3_(rcpX));}
+//------------------------------------------------------------------------------------------------------------------------------
+ AH1 AToSrgbH1(AH1 c){AH3 j=AH3(0.0031308*12.92,12.92,1.0/2.4);AH2 k=AH2(1.055,-0.055);
+ return clamp(j.x ,c*j.y ,pow(c,j.z )*k.x +k.y );}
+ AH2 AToSrgbH2(AH2 c){AH3 j=AH3(0.0031308*12.92,12.92,1.0/2.4);AH2 k=AH2(1.055,-0.055);
+ return clamp(j.xx ,c*j.yy ,pow(c,j.zz )*k.xx +k.yy );}
+ AH3 AToSrgbH3(AH3 c){AH3 j=AH3(0.0031308*12.92,12.92,1.0/2.4);AH2 k=AH2(1.055,-0.055);
+ return clamp(j.xxx,c*j.yyy,pow(c,j.zzz)*k.xxx+k.yyy);}
+//------------------------------------------------------------------------------------------------------------------------------
+ AH1 AToTwoH1(AH1 c){return sqrt(c);}
+ AH2 AToTwoH2(AH2 c){return sqrt(c);}
+ AH3 AToTwoH3(AH3 c){return sqrt(c);}
+//------------------------------------------------------------------------------------------------------------------------------
+ AH1 AToThreeF1(AH1 c){return pow(c,AH1_(1.0/3.0));}
+ AH2 AToThreeF2(AH2 c){return pow(c,AH2_(1.0/3.0));}
+ AH3 AToThreeF3(AH3 c){return pow(c,AH3_(1.0/3.0));}
+ #endif
+//==============================================================================================================================
+ #ifdef A_HALF
+ AH1 AFrom709H1(AH1 c){AH3 j=AH3(0.081/4.5,1.0/4.5,1.0/0.45);AH2 k=AH2(1.0/1.099,0.099/1.099);
+ return AZolSelH1(AZolSignedH1(c-j.x ),c*j.y ,pow(c*k.x +k.y ,j.z ));}
+ AH2 AFrom709H2(AH2 c){AH3 j=AH3(0.081/4.5,1.0/4.5,1.0/0.45);AH2 k=AH2(1.0/1.099,0.099/1.099);
+ return AZolSelH2(AZolSignedH2(c-j.xx ),c*j.yy ,pow(c*k.xx +k.yy ,j.zz ));}
+ AH3 AFrom709H3(AH3 c){AH3 j=AH3(0.081/4.5,1.0/4.5,1.0/0.45);AH2 k=AH2(1.0/1.099,0.099/1.099);
+ return AZolSelH3(AZolSignedH3(c-j.xxx),c*j.yyy,pow(c*k.xxx+k.yyy,j.zzz));}
+//------------------------------------------------------------------------------------------------------------------------------
+ AH1 AFromGammaH1(AH1 c,AH1 x){return pow(c,AH1_(x));}
+ AH2 AFromGammaH2(AH2 c,AH1 x){return pow(c,AH2_(x));}
+ AH3 AFromGammaH3(AH3 c,AH1 x){return pow(c,AH3_(x));}
+//------------------------------------------------------------------------------------------------------------------------------
+ AH1 AHromSrgbF1(AH1 c){AH3 j=AH3(0.04045/12.92,1.0/12.92,2.4);AH2 k=AH2(1.0/1.055,0.055/1.055);
+ return AZolSelH1(AZolSignedH1(c-j.x ),c*j.y ,pow(c*k.x +k.y ,j.z ));}
+ AH2 AHromSrgbF2(AH2 c){AH3 j=AH3(0.04045/12.92,1.0/12.92,2.4);AH2 k=AH2(1.0/1.055,0.055/1.055);
+ return AZolSelH2(AZolSignedH2(c-j.xx ),c*j.yy ,pow(c*k.xx +k.yy ,j.zz ));}
+ AH3 AHromSrgbF3(AH3 c){AH3 j=AH3(0.04045/12.92,1.0/12.92,2.4);AH2 k=AH2(1.0/1.055,0.055/1.055);
+ return AZolSelH3(AZolSignedH3(c-j.xxx),c*j.yyy,pow(c*k.xxx+k.yyy,j.zzz));}
+//------------------------------------------------------------------------------------------------------------------------------
+ AH1 AFromTwoH1(AH1 c){return c*c;}
+ AH2 AFromTwoH2(AH2 c){return c*c;}
+ AH3 AFromTwoH3(AH3 c){return c*c;}
+//------------------------------------------------------------------------------------------------------------------------------
+ AH1 AFromThreeH1(AH1 c){return c*c*c;}
+ AH2 AFromThreeH2(AH2 c){return c*c*c;}
+ AH3 AFromThreeH3(AH3 c){return c*c*c;}
+ #endif
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//_____________________________________________________________/\_______________________________________________________________
+//==============================================================================================================================
+// CS REMAP
+//==============================================================================================================================
+ // Simple remap 64x1 to 8x8 with rotated 2x2 pixel quads in quad linear.
+ // 543210
+ // ======
+ // ..xxx.
+ // yy...y
+ AU2 ARmp8x8(AU1 a){return AU2(ABfe(a,1u,3u),ABfiM(ABfe(a,3u,3u),a,1u));}
+//==============================================================================================================================
+ // More complex remap 64x1 to 8x8 which is necessary for 2D wave reductions.
+ // 543210
+ // ======
+ // .xx..x
+ // y..yy.
+ // Details,
+ // LANE TO 8x8 MAPPING
+ // ===================
+ // 00 01 08 09 10 11 18 19
+ // 02 03 0a 0b 12 13 1a 1b
+ // 04 05 0c 0d 14 15 1c 1d
+ // 06 07 0e 0f 16 17 1e 1f
+ // 20 21 28 29 30 31 38 39
+ // 22 23 2a 2b 32 33 3a 3b
+ // 24 25 2c 2d 34 35 3c 3d
+ // 26 27 2e 2f 36 37 3e 3f
+ AU2 ARmpRed8x8(AU1 a){return AU2(ABfiM(ABfe(a,2u,3u),a,1u),ABfiM(ABfe(a,3u,3u),ABfe(a,1u,2u),2u));}
+//==============================================================================================================================
+ #ifdef A_HALF
+ AW2 ARmp8x8H(AU1 a){return AW2(ABfe(a,1u,3u),ABfiM(ABfe(a,3u,3u),a,1u));}
+ AW2 ARmpRed8x8H(AU1 a){return AW2(ABfiM(ABfe(a,2u,3u),a,1u),ABfiM(ABfe(a,3u,3u),ABfe(a,1u,2u),2u));}
+ #endif
+#endif
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//_____________________________________________________________/\_______________________________________________________________
+//==============================================================================================================================
+//
+// REFERENCE
+//
+//------------------------------------------------------------------------------------------------------------------------------
+// IEEE FLOAT RULES
+// ================
+// - saturate(NaN)=0, saturate(-INF)=0, saturate(+INF)=1
+// - {+/-}0 * {+/-}INF = NaN
+// - -INF + (+INF) = NaN
+// - {+/-}0 / {+/-}0 = NaN
+// - {+/-}INF / {+/-}INF = NaN
+// - a<(-0) := sqrt(a) = NaN (a=-0.0 won't NaN)
+// - 0 == -0
+// - 4/0 = +INF
+// - 4/-0 = -INF
+// - 4+INF = +INF
+// - 4-INF = -INF
+// - 4*(+INF) = +INF
+// - 4*(-INF) = -INF
+// - -4*(+INF) = -INF
+// - sqrt(+INF) = +INF
+//------------------------------------------------------------------------------------------------------------------------------
+// FP16 ENCODING
+// =============
+// fedcba9876543210
+// ----------------
+// ......mmmmmmmmmm 10-bit mantissa (encodes 11-bit 0.5 to 1.0 except for denormals)
+// .eeeee.......... 5-bit exponent
+// .00000.......... denormals
+// .00001.......... -14 exponent
+// .11110.......... 15 exponent
+// .111110000000000 infinity
+// .11111nnnnnnnnnn NaN with n!=0
+// s............... sign
+//------------------------------------------------------------------------------------------------------------------------------
+// FP16/INT16 ALIASING DENORMAL
+// ============================
+// 11-bit unsigned integers alias with half float denormal/normal values,
+// 1 = 2^(-24) = 1/16777216 ....................... first denormal value
+// 2 = 2^(-23)
+// ...
+// 1023 = 2^(-14)*(1-2^(-10)) = 2^(-14)*(1-1/1024) ... last denormal value
+// 1024 = 2^(-14) = 1/16384 .......................... first normal value that still maps to integers
+// 2047 .............................................. last normal value that still maps to integers
+// Scaling limits,
+// 2^15 = 32768 ...................................... largest power of 2 scaling
+// Largest pow2 conversion mapping is at *32768,
+// 1 : 2^(-9) = 1/512
+// 2 : 1/256
+// 4 : 1/128
+// 8 : 1/64
+// 16 : 1/32
+// 32 : 1/16
+// 64 : 1/8
+// 128 : 1/4
+// 256 : 1/2
+// 512 : 1
+// 1024 : 2
+// 2047 : a little less than 4
+//==============================================================================================================================
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//_____________________________________________________________/\_______________________________________________________________
+//==============================================================================================================================
+//
+//
+// GPU/CPU PORTABILITY
+//
+//
+//------------------------------------------------------------------------------------------------------------------------------
+// This is the GPU implementation.
+// See the CPU implementation for docs.
+//==============================================================================================================================
+#ifdef A_GPU
+ #define A_TRUE true
+ #define A_FALSE false
+ #define A_STATIC
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//_____________________________________________________________/\_______________________________________________________________
+//==============================================================================================================================
+// VECTOR ARGUMENT/RETURN/INITIALIZATION PORTABILITY
+//==============================================================================================================================
+ #define retAD2 AD2
+ #define retAD3 AD3
+ #define retAD4 AD4
+ #define retAF2 AF2
+ #define retAF3 AF3
+ #define retAF4 AF4
+ #define retAL2 AL2
+ #define retAL3 AL3
+ #define retAL4 AL4
+ #define retAU2 AU2
+ #define retAU3 AU3
+ #define retAU4 AU4
+//------------------------------------------------------------------------------------------------------------------------------
+ #define inAD2 in AD2
+ #define inAD3 in AD3
+ #define inAD4 in AD4
+ #define inAF2 in AF2
+ #define inAF3 in AF3
+ #define inAF4 in AF4
+ #define inAL2 in AL2
+ #define inAL3 in AL3
+ #define inAL4 in AL4
+ #define inAU2 in AU2
+ #define inAU3 in AU3
+ #define inAU4 in AU4
+//------------------------------------------------------------------------------------------------------------------------------
+ #define inoutAD2 inout AD2
+ #define inoutAD3 inout AD3
+ #define inoutAD4 inout AD4
+ #define inoutAF2 inout AF2
+ #define inoutAF3 inout AF3
+ #define inoutAF4 inout AF4
+ #define inoutAL2 inout AL2
+ #define inoutAL3 inout AL3
+ #define inoutAL4 inout AL4
+ #define inoutAU2 inout AU2
+ #define inoutAU3 inout AU3
+ #define inoutAU4 inout AU4
+//------------------------------------------------------------------------------------------------------------------------------
+ #define outAD2 out AD2
+ #define outAD3 out AD3
+ #define outAD4 out AD4
+ #define outAF2 out AF2
+ #define outAF3 out AF3
+ #define outAF4 out AF4
+ #define outAL2 out AL2
+ #define outAL3 out AL3
+ #define outAL4 out AL4
+ #define outAU2 out AU2
+ #define outAU3 out AU3
+ #define outAU4 out AU4
+//------------------------------------------------------------------------------------------------------------------------------
+ #define varAD2(x) AD2 x
+ #define varAD3(x) AD3 x
+ #define varAD4(x) AD4 x
+ #define varAF2(x) AF2 x
+ #define varAF3(x) AF3 x
+ #define varAF4(x) AF4 x
+ #define varAL2(x) AL2 x
+ #define varAL3(x) AL3 x
+ #define varAL4(x) AL4 x
+ #define varAU2(x) AU2 x
+ #define varAU3(x) AU3 x
+ #define varAU4(x) AU4 x
+//------------------------------------------------------------------------------------------------------------------------------
+ #define initAD2(x,y) AD2(x,y)
+ #define initAD3(x,y,z) AD3(x,y,z)
+ #define initAD4(x,y,z,w) AD4(x,y,z,w)
+ #define initAF2(x,y) AF2(x,y)
+ #define initAF3(x,y,z) AF3(x,y,z)
+ #define initAF4(x,y,z,w) AF4(x,y,z,w)
+ #define initAL2(x,y) AL2(x,y)
+ #define initAL3(x,y,z) AL3(x,y,z)
+ #define initAL4(x,y,z,w) AL4(x,y,z,w)
+ #define initAU2(x,y) AU2(x,y)
+ #define initAU3(x,y,z) AU3(x,y,z)
+ #define initAU4(x,y,z,w) AU4(x,y,z,w)
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//_____________________________________________________________/\_______________________________________________________________
+//==============================================================================================================================
+// SCALAR RETURN OPS
+//==============================================================================================================================
+ #define AAbsD1(a) abs(AD1(a))
+ #define AAbsF1(a) abs(AF1(a))
+//------------------------------------------------------------------------------------------------------------------------------
+ #define ACosD1(a) cos(AD1(a))
+ #define ACosF1(a) cos(AF1(a))
+//------------------------------------------------------------------------------------------------------------------------------
+ #define ADotD2(a,b) dot(AD2(a),AD2(b))
+ #define ADotD3(a,b) dot(AD3(a),AD3(b))
+ #define ADotD4(a,b) dot(AD4(a),AD4(b))
+ #define ADotF2(a,b) dot(AF2(a),AF2(b))
+ #define ADotF3(a,b) dot(AF3(a),AF3(b))
+ #define ADotF4(a,b) dot(AF4(a),AF4(b))
+//------------------------------------------------------------------------------------------------------------------------------
+ #define AExp2D1(a) exp2(AD1(a))
+ #define AExp2F1(a) exp2(AF1(a))
+//------------------------------------------------------------------------------------------------------------------------------
+ #define AFloorD1(a) floor(AD1(a))
+ #define AFloorF1(a) floor(AF1(a))
+//------------------------------------------------------------------------------------------------------------------------------
+ #define ALog2D1(a) log2(AD1(a))
+ #define ALog2F1(a) log2(AF1(a))
+//------------------------------------------------------------------------------------------------------------------------------
+ #define AMaxD1(a,b) max(a,b)
+ #define AMaxF1(a,b) max(a,b)
+ #define AMaxL1(a,b) max(a,b)
+ #define AMaxU1(a,b) max(a,b)
+//------------------------------------------------------------------------------------------------------------------------------
+ #define AMinD1(a,b) min(a,b)
+ #define AMinF1(a,b) min(a,b)
+ #define AMinL1(a,b) min(a,b)
+ #define AMinU1(a,b) min(a,b)
+//------------------------------------------------------------------------------------------------------------------------------
+ #define ASinD1(a) sin(AD1(a))
+ #define ASinF1(a) sin(AF1(a))
+//------------------------------------------------------------------------------------------------------------------------------
+ #define ASqrtD1(a) sqrt(AD1(a))
+ #define ASqrtF1(a) sqrt(AF1(a))
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//_____________________________________________________________/\_______________________________________________________________
+//==============================================================================================================================
+// SCALAR RETURN OPS - DEPENDENT
+//==============================================================================================================================
+ #define APowD1(a,b) pow(AD1(a),AF1(b))
+ #define APowF1(a,b) pow(AF1(a),AF1(b))
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//_____________________________________________________________/\_______________________________________________________________
+//==============================================================================================================================
+// VECTOR OPS
+//------------------------------------------------------------------------------------------------------------------------------
+// These are added as needed for production or prototyping, so not necessarily a complete set.
+// They follow a convention of taking in a destination and also returning the destination value to increase utility.
+//==============================================================================================================================
+ #ifdef A_DUBL
+ AD2 opAAbsD2(outAD2 d,inAD2 a){d=abs(a);return d;}
+ AD3 opAAbsD3(outAD3 d,inAD3 a){d=abs(a);return d;}
+ AD4 opAAbsD4(outAD4 d,inAD4 a){d=abs(a);return d;}
+//------------------------------------------------------------------------------------------------------------------------------
+ AD2 opAAddD2(outAD2 d,inAD2 a,inAD2 b){d=a+b;return d;}
+ AD3 opAAddD3(outAD3 d,inAD3 a,inAD3 b){d=a+b;return d;}
+ AD4 opAAddD4(outAD4 d,inAD4 a,inAD4 b){d=a+b;return d;}
+//------------------------------------------------------------------------------------------------------------------------------
+ AD2 opAAddOneD2(outAD2 d,inAD2 a,AD1 b){d=a+AD2_(b);return d;}
+ AD3 opAAddOneD3(outAD3 d,inAD3 a,AD1 b){d=a+AD3_(b);return d;}
+ AD4 opAAddOneD4(outAD4 d,inAD4 a,AD1 b){d=a+AD4_(b);return d;}
+//------------------------------------------------------------------------------------------------------------------------------
+ AD2 opACpyD2(outAD2 d,inAD2 a){d=a;return d;}
+ AD3 opACpyD3(outAD3 d,inAD3 a){d=a;return d;}
+ AD4 opACpyD4(outAD4 d,inAD4 a){d=a;return d;}
+//------------------------------------------------------------------------------------------------------------------------------
+ AD2 opALerpD2(outAD2 d,inAD2 a,inAD2 b,inAD2 c){d=ALerpD2(a,b,c);return d;}
+ AD3 opALerpD3(outAD3 d,inAD3 a,inAD3 b,inAD3 c){d=ALerpD3(a,b,c);return d;}
+ AD4 opALerpD4(outAD4 d,inAD4 a,inAD4 b,inAD4 c){d=ALerpD4(a,b,c);return d;}
+//------------------------------------------------------------------------------------------------------------------------------
+ AD2 opALerpOneD2(outAD2 d,inAD2 a,inAD2 b,AD1 c){d=ALerpD2(a,b,AD2_(c));return d;}
+ AD3 opALerpOneD3(outAD3 d,inAD3 a,inAD3 b,AD1 c){d=ALerpD3(a,b,AD3_(c));return d;}
+ AD4 opALerpOneD4(outAD4 d,inAD4 a,inAD4 b,AD1 c){d=ALerpD4(a,b,AD4_(c));return d;}
+//------------------------------------------------------------------------------------------------------------------------------
+ AD2 opAMaxD2(outAD2 d,inAD2 a,inAD2 b){d=max(a,b);return d;}
+ AD3 opAMaxD3(outAD3 d,inAD3 a,inAD3 b){d=max(a,b);return d;}
+ AD4 opAMaxD4(outAD4 d,inAD4 a,inAD4 b){d=max(a,b);return d;}
+//------------------------------------------------------------------------------------------------------------------------------
+ AD2 opAMinD2(outAD2 d,inAD2 a,inAD2 b){d=min(a,b);return d;}
+ AD3 opAMinD3(outAD3 d,inAD3 a,inAD3 b){d=min(a,b);return d;}
+ AD4 opAMinD4(outAD4 d,inAD4 a,inAD4 b){d=min(a,b);return d;}
+//------------------------------------------------------------------------------------------------------------------------------
+ AD2 opAMulD2(outAD2 d,inAD2 a,inAD2 b){d=a*b;return d;}
+ AD3 opAMulD3(outAD3 d,inAD3 a,inAD3 b){d=a*b;return d;}
+ AD4 opAMulD4(outAD4 d,inAD4 a,inAD4 b){d=a*b;return d;}
+//------------------------------------------------------------------------------------------------------------------------------
+ AD2 opAMulOneD2(outAD2 d,inAD2 a,AD1 b){d=a*AD2_(b);return d;}
+ AD3 opAMulOneD3(outAD3 d,inAD3 a,AD1 b){d=a*AD3_(b);return d;}
+ AD4 opAMulOneD4(outAD4 d,inAD4 a,AD1 b){d=a*AD4_(b);return d;}
+//------------------------------------------------------------------------------------------------------------------------------
+ AD2 opANegD2(outAD2 d,inAD2 a){d=-a;return d;}
+ AD3 opANegD3(outAD3 d,inAD3 a){d=-a;return d;}
+ AD4 opANegD4(outAD4 d,inAD4 a){d=-a;return d;}
+//------------------------------------------------------------------------------------------------------------------------------
+ AD2 opARcpD2(outAD2 d,inAD2 a){d=ARcpD2(a);return d;}
+ AD3 opARcpD3(outAD3 d,inAD3 a){d=ARcpD3(a);return d;}
+ AD4 opARcpD4(outAD4 d,inAD4 a){d=ARcpD4(a);return d;}
+ #endif
+//==============================================================================================================================
+ AF2 opAAbsF2(outAF2 d,inAF2 a){d=abs(a);return d;}
+ AF3 opAAbsF3(outAF3 d,inAF3 a){d=abs(a);return d;}
+ AF4 opAAbsF4(outAF4 d,inAF4 a){d=abs(a);return d;}
+//------------------------------------------------------------------------------------------------------------------------------
+ AF2 opAAddF2(outAF2 d,inAF2 a,inAF2 b){d=a+b;return d;}
+ AF3 opAAddF3(outAF3 d,inAF3 a,inAF3 b){d=a+b;return d;}
+ AF4 opAAddF4(outAF4 d,inAF4 a,inAF4 b){d=a+b;return d;}
+//------------------------------------------------------------------------------------------------------------------------------
+ AF2 opAAddOneF2(outAF2 d,inAF2 a,AF1 b){d=a+AF2_(b);return d;}
+ AF3 opAAddOneF3(outAF3 d,inAF3 a,AF1 b){d=a+AF3_(b);return d;}
+ AF4 opAAddOneF4(outAF4 d,inAF4 a,AF1 b){d=a+AF4_(b);return d;}
+//------------------------------------------------------------------------------------------------------------------------------
+ AF2 opACpyF2(outAF2 d,inAF2 a){d=a;return d;}
+ AF3 opACpyF3(outAF3 d,inAF3 a){d=a;return d;}
+ AF4 opACpyF4(outAF4 d,inAF4 a){d=a;return d;}
+//------------------------------------------------------------------------------------------------------------------------------
+ AF2 opALerpF2(outAF2 d,inAF2 a,inAF2 b,inAF2 c){d=ALerpF2(a,b,c);return d;}
+ AF3 opALerpF3(outAF3 d,inAF3 a,inAF3 b,inAF3 c){d=ALerpF3(a,b,c);return d;}
+ AF4 opALerpF4(outAF4 d,inAF4 a,inAF4 b,inAF4 c){d=ALerpF4(a,b,c);return d;}
+//------------------------------------------------------------------------------------------------------------------------------
+ AF2 opALerpOneF2(outAF2 d,inAF2 a,inAF2 b,AF1 c){d=ALerpF2(a,b,AF2_(c));return d;}
+ AF3 opALerpOneF3(outAF3 d,inAF3 a,inAF3 b,AF1 c){d=ALerpF3(a,b,AF3_(c));return d;}
+ AF4 opALerpOneF4(outAF4 d,inAF4 a,inAF4 b,AF1 c){d=ALerpF4(a,b,AF4_(c));return d;}
+//------------------------------------------------------------------------------------------------------------------------------
+ AF2 opAMaxF2(outAF2 d,inAF2 a,inAF2 b){d=max(a,b);return d;}
+ AF3 opAMaxF3(outAF3 d,inAF3 a,inAF3 b){d=max(a,b);return d;}
+ AF4 opAMaxF4(outAF4 d,inAF4 a,inAF4 b){d=max(a,b);return d;}
+//------------------------------------------------------------------------------------------------------------------------------
+ AF2 opAMinF2(outAF2 d,inAF2 a,inAF2 b){d=min(a,b);return d;}
+ AF3 opAMinF3(outAF3 d,inAF3 a,inAF3 b){d=min(a,b);return d;}
+ AF4 opAMinF4(outAF4 d,inAF4 a,inAF4 b){d=min(a,b);return d;}
+//------------------------------------------------------------------------------------------------------------------------------
+ AF2 opAMulF2(outAF2 d,inAF2 a,inAF2 b){d=a*b;return d;}
+ AF3 opAMulF3(outAF3 d,inAF3 a,inAF3 b){d=a*b;return d;}
+ AF4 opAMulF4(outAF4 d,inAF4 a,inAF4 b){d=a*b;return d;}
+//------------------------------------------------------------------------------------------------------------------------------
+ AF2 opAMulOneF2(outAF2 d,inAF2 a,AF1 b){d=a*AF2_(b);return d;}
+ AF3 opAMulOneF3(outAF3 d,inAF3 a,AF1 b){d=a*AF3_(b);return d;}
+ AF4 opAMulOneF4(outAF4 d,inAF4 a,AF1 b){d=a*AF4_(b);return d;}
+//------------------------------------------------------------------------------------------------------------------------------
+ AF2 opANegF2(outAF2 d,inAF2 a){d=-a;return d;}
+ AF3 opANegF3(outAF3 d,inAF3 a){d=-a;return d;}
+ AF4 opANegF4(outAF4 d,inAF4 a){d=-a;return d;}
+//------------------------------------------------------------------------------------------------------------------------------
+ AF2 opARcpF2(outAF2 d,inAF2 a){d=ARcpF2(a);return d;}
+ AF3 opARcpF3(outAF3 d,inAF3 a){d=ARcpF3(a);return d;}
+ AF4 opARcpF4(outAF4 d,inAF4 a){d=ARcpF4(a);return d;}
+#endif
diff --git a/thirdparty/amd-fsr/ffx_fsr1.h b/thirdparty/amd-fsr/ffx_fsr1.h
new file mode 100644
index 0000000000..4e0b3d5485
--- /dev/null
+++ b/thirdparty/amd-fsr/ffx_fsr1.h
@@ -0,0 +1,1199 @@
+//_____________________________________________________________/\_______________________________________________________________
+//==============================================================================================================================
+//
+//
+// AMD FidelityFX SUPER RESOLUTION [FSR 1] ::: SPATIAL SCALING & EXTRAS - v1.20210629
+//
+//
+//------------------------------------------------------------------------------------------------------------------------------
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//------------------------------------------------------------------------------------------------------------------------------
+// FidelityFX Super Resolution Sample
+//
+// Copyright (c) 2021 Advanced Micro Devices, Inc. All rights reserved.
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files(the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions :
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+//------------------------------------------------------------------------------------------------------------------------------
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//------------------------------------------------------------------------------------------------------------------------------
+// ABOUT
+// =====
+// FSR is a collection of algorithms relating to generating a higher resolution image.
+// This specific header focuses on single-image non-temporal image scaling, and related tools.
+//
+// The core functions are EASU and RCAS:
+// [EASU] Edge Adaptive Spatial Upsampling ....... 1x to 4x area range spatial scaling, clamped adaptive elliptical filter.
+// [RCAS] Robust Contrast Adaptive Sharpening .... A non-scaling variation on CAS.
+// RCAS needs to be applied after EASU as a separate pass.
+//
+// Optional utility functions are:
+// [LFGA] Linear Film Grain Applicator ........... Tool to apply film grain after scaling.
+// [SRTM] Simple Reversible Tone-Mapper .......... Linear HDR {0 to FP16_MAX} to {0 to 1} and back.
+// [TEPD] Temporal Energy Preserving Dither ...... Temporally energy preserving dithered {0 to 1} linear to gamma 2.0 conversion.
+// See each individual sub-section for inline documentation.
+//------------------------------------------------------------------------------------------------------------------------------
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//------------------------------------------------------------------------------------------------------------------------------
+// FUNCTION PERMUTATIONS
+// =====================
+// *F() ..... Single item computation with 32-bit.
+// *H() ..... Single item computation with 16-bit, with packing (aka two 16-bit ops in parallel) when possible.
+// *Hx2() ... Processing two items in parallel with 16-bit, easier packing.
+// Not all interfaces in this file have a *Hx2() form.
+//==============================================================================================================================
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//_____________________________________________________________/\_______________________________________________________________
+//==============================================================================================================================
+//
+// FSR - [EASU] EDGE ADAPTIVE SPATIAL UPSAMPLING
+//
+//------------------------------------------------------------------------------------------------------------------------------
+// EASU provides a high quality spatial-only scaling at relatively low cost.
+// Meaning EASU is appropiate for laptops and other low-end GPUs.
+// Quality from 1x to 4x area scaling is good.
+//------------------------------------------------------------------------------------------------------------------------------
+// The scalar uses a modified fast approximation to the standard lanczos(size=2) kernel.
+// EASU runs in a single pass, so it applies a directionally and anisotropically adaptive radial lanczos.
+// This is also kept as simple as possible to have minimum runtime.
+//------------------------------------------------------------------------------------------------------------------------------
+// The lanzcos filter has negative lobes, so by itself it will introduce ringing.
+// To remove all ringing, the algorithm uses the nearest 2x2 input texels as a neighborhood,
+// and limits output to the minimum and maximum of that neighborhood.
+//------------------------------------------------------------------------------------------------------------------------------
+// Input image requirements:
+//
+// Color needs to be encoded as 3 channel[red, green, blue](e.g.XYZ not supported)
+// Each channel needs to be in the range[0, 1]
+// Any color primaries are supported
+// Display / tonemapping curve needs to be as if presenting to sRGB display or similar(e.g.Gamma 2.0)
+// There should be no banding in the input
+// There should be no high amplitude noise in the input
+// There should be no noise in the input that is not at input pixel granularity
+// For performance purposes, use 32bpp formats
+//------------------------------------------------------------------------------------------------------------------------------
+// Best to apply EASU at the end of the frame after tonemapping
+// but before film grain or composite of the UI.
+//------------------------------------------------------------------------------------------------------------------------------
+// Example of including this header for D3D HLSL :
+//
+// #define A_GPU 1
+// #define A_HLSL 1
+// #define A_HALF 1
+// #include "ffx_a.h"
+// #define FSR_EASU_H 1
+// #define FSR_RCAS_H 1
+// //declare input callbacks
+// #include "ffx_fsr1.h"
+//
+// Example of including this header for Vulkan GLSL :
+//
+// #define A_GPU 1
+// #define A_GLSL 1
+// #define A_HALF 1
+// #include "ffx_a.h"
+// #define FSR_EASU_H 1
+// #define FSR_RCAS_H 1
+// //declare input callbacks
+// #include "ffx_fsr1.h"
+//
+// Example of including this header for Vulkan HLSL :
+//
+// #define A_GPU 1
+// #define A_HLSL 1
+// #define A_HLSL_6_2 1
+// #define A_NO_16_BIT_CAST 1
+// #define A_HALF 1
+// #include "ffx_a.h"
+// #define FSR_EASU_H 1
+// #define FSR_RCAS_H 1
+// //declare input callbacks
+// #include "ffx_fsr1.h"
+//
+// Example of declaring the required input callbacks for GLSL :
+// The callbacks need to gather4 for each color channel using the specified texture coordinate 'p'.
+// EASU uses gather4 to reduce position computation logic and for free Arrays of Structures to Structures of Arrays conversion.
+//
+// AH4 FsrEasuRH(AF2 p){return AH4(textureGather(sampler2D(tex,sam),p,0));}
+// AH4 FsrEasuGH(AF2 p){return AH4(textureGather(sampler2D(tex,sam),p,1));}
+// AH4 FsrEasuBH(AF2 p){return AH4(textureGather(sampler2D(tex,sam),p,2));}
+// ...
+// The FsrEasuCon function needs to be called from the CPU or GPU to set up constants.
+// The difference in viewport and input image size is there to support Dynamic Resolution Scaling.
+// To use FsrEasuCon() on the CPU, define A_CPU before including ffx_a and ffx_fsr1.
+// Including a GPU example here, the 'con0' through 'con3' values would be stored out to a constant buffer.
+// AU4 con0,con1,con2,con3;
+// FsrEasuCon(con0,con1,con2,con3,
+// 1920.0,1080.0, // Viewport size (top left aligned) in the input image which is to be scaled.
+// 3840.0,2160.0, // The size of the input image.
+// 2560.0,1440.0); // The output resolution.
+//==============================================================================================================================
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//_____________________________________________________________/\_______________________________________________________________
+//==============================================================================================================================
+// CONSTANT SETUP
+//==============================================================================================================================
+// Call to setup required constant values (works on CPU or GPU).
+A_STATIC void FsrEasuCon(
+outAU4 con0,
+outAU4 con1,
+outAU4 con2,
+outAU4 con3,
+// This the rendered image resolution being upscaled
+AF1 inputViewportInPixelsX,
+AF1 inputViewportInPixelsY,
+// This is the resolution of the resource containing the input image (useful for dynamic resolution)
+AF1 inputSizeInPixelsX,
+AF1 inputSizeInPixelsY,
+// This is the display resolution which the input image gets upscaled to
+AF1 outputSizeInPixelsX,
+AF1 outputSizeInPixelsY){
+ // Output integer position to a pixel position in viewport.
+ con0[0]=AU1_AF1(inputViewportInPixelsX*ARcpF1(outputSizeInPixelsX));
+ con0[1]=AU1_AF1(inputViewportInPixelsY*ARcpF1(outputSizeInPixelsY));
+ con0[2]=AU1_AF1(AF1_(0.5)*inputViewportInPixelsX*ARcpF1(outputSizeInPixelsX)-AF1_(0.5));
+ con0[3]=AU1_AF1(AF1_(0.5)*inputViewportInPixelsY*ARcpF1(outputSizeInPixelsY)-AF1_(0.5));
+ // Viewport pixel position to normalized image space.
+ // This is used to get upper-left of 'F' tap.
+ con1[0]=AU1_AF1(ARcpF1(inputSizeInPixelsX));
+ con1[1]=AU1_AF1(ARcpF1(inputSizeInPixelsY));
+ // Centers of gather4, first offset from upper-left of 'F'.
+ // +---+---+
+ // | | |
+ // +--(0)--+
+ // | b | c |
+ // +---F---+---+---+
+ // | e | f | g | h |
+ // +--(1)--+--(2)--+
+ // | i | j | k | l |
+ // +---+---+---+---+
+ // | n | o |
+ // +--(3)--+
+ // | | |
+ // +---+---+
+ con1[2]=AU1_AF1(AF1_( 1.0)*ARcpF1(inputSizeInPixelsX));
+ con1[3]=AU1_AF1(AF1_(-1.0)*ARcpF1(inputSizeInPixelsY));
+ // These are from (0) instead of 'F'.
+ con2[0]=AU1_AF1(AF1_(-1.0)*ARcpF1(inputSizeInPixelsX));
+ con2[1]=AU1_AF1(AF1_( 2.0)*ARcpF1(inputSizeInPixelsY));
+ con2[2]=AU1_AF1(AF1_( 1.0)*ARcpF1(inputSizeInPixelsX));
+ con2[3]=AU1_AF1(AF1_( 2.0)*ARcpF1(inputSizeInPixelsY));
+ con3[0]=AU1_AF1(AF1_( 0.0)*ARcpF1(inputSizeInPixelsX));
+ con3[1]=AU1_AF1(AF1_( 4.0)*ARcpF1(inputSizeInPixelsY));
+ con3[2]=con3[3]=0;}
+
+//If the an offset into the input image resource
+A_STATIC void FsrEasuConOffset(
+ outAU4 con0,
+ outAU4 con1,
+ outAU4 con2,
+ outAU4 con3,
+ // This the rendered image resolution being upscaled
+ AF1 inputViewportInPixelsX,
+ AF1 inputViewportInPixelsY,
+ // This is the resolution of the resource containing the input image (useful for dynamic resolution)
+ AF1 inputSizeInPixelsX,
+ AF1 inputSizeInPixelsY,
+ // This is the display resolution which the input image gets upscaled to
+ AF1 outputSizeInPixelsX,
+ AF1 outputSizeInPixelsY,
+ // This is the input image offset into the resource containing it (useful for dynamic resolution)
+ AF1 inputOffsetInPixelsX,
+ AF1 inputOffsetInPixelsY) {
+ FsrEasuCon(con0, con1, con2, con3, inputViewportInPixelsX, inputViewportInPixelsY, inputSizeInPixelsX, inputSizeInPixelsY, outputSizeInPixelsX, outputSizeInPixelsY);
+ con0[2] = AU1_AF1(AF1_(0.5) * inputViewportInPixelsX * ARcpF1(outputSizeInPixelsX) - AF1_(0.5) + inputOffsetInPixelsX);
+ con0[3] = AU1_AF1(AF1_(0.5) * inputViewportInPixelsY * ARcpF1(outputSizeInPixelsY) - AF1_(0.5) + inputOffsetInPixelsY);
+}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//_____________________________________________________________/\_______________________________________________________________
+//==============================================================================================================================
+// NON-PACKED 32-BIT VERSION
+//==============================================================================================================================
+#if defined(A_GPU)&&defined(FSR_EASU_F)
+ // Input callback prototypes, need to be implemented by calling shader
+ AF4 FsrEasuRF(AF2 p);
+ AF4 FsrEasuGF(AF2 p);
+ AF4 FsrEasuBF(AF2 p);
+//------------------------------------------------------------------------------------------------------------------------------
+ // Filtering for a given tap for the scalar.
+ void FsrEasuTapF(
+ inout AF3 aC, // Accumulated color, with negative lobe.
+ inout AF1 aW, // Accumulated weight.
+ AF2 off, // Pixel offset from resolve position to tap.
+ AF2 dir, // Gradient direction.
+ AF2 len, // Length.
+ AF1 lob, // Negative lobe strength.
+ AF1 clp, // Clipping point.
+ AF3 c){ // Tap color.
+ // Rotate offset by direction.
+ AF2 v;
+ v.x=(off.x*( dir.x))+(off.y*dir.y);
+ v.y=(off.x*(-dir.y))+(off.y*dir.x);
+ // Anisotropy.
+ v*=len;
+ // Compute distance^2.
+ AF1 d2=v.x*v.x+v.y*v.y;
+ // Limit to the window as at corner, 2 taps can easily be outside.
+ d2=min(d2,clp);
+ // Approximation of lancos2 without sin() or rcp(), or sqrt() to get x.
+ // (25/16 * (2/5 * x^2 - 1)^2 - (25/16 - 1)) * (1/4 * x^2 - 1)^2
+ // |_______________________________________| |_______________|
+ // base window
+ // The general form of the 'base' is,
+ // (a*(b*x^2-1)^2-(a-1))
+ // Where 'a=1/(2*b-b^2)' and 'b' moves around the negative lobe.
+ AF1 wB=AF1_(2.0/5.0)*d2+AF1_(-1.0);
+ AF1 wA=lob*d2+AF1_(-1.0);
+ wB*=wB;
+ wA*=wA;
+ wB=AF1_(25.0/16.0)*wB+AF1_(-(25.0/16.0-1.0));
+ AF1 w=wB*wA;
+ // Do weighted average.
+ aC+=c*w;aW+=w;}
+//------------------------------------------------------------------------------------------------------------------------------
+ // Accumulate direction and length.
+ void FsrEasuSetF(
+ inout AF2 dir,
+ inout AF1 len,
+ AF2 pp,
+ AP1 biS,AP1 biT,AP1 biU,AP1 biV,
+ AF1 lA,AF1 lB,AF1 lC,AF1 lD,AF1 lE){
+ // Compute bilinear weight, branches factor out as predicates are compiler time immediates.
+ // s t
+ // u v
+ AF1 w = AF1_(0.0);
+ if(biS)w=(AF1_(1.0)-pp.x)*(AF1_(1.0)-pp.y);
+ if(biT)w= pp.x *(AF1_(1.0)-pp.y);
+ if(biU)w=(AF1_(1.0)-pp.x)* pp.y ;
+ if(biV)w= pp.x * pp.y ;
+ // Direction is the '+' diff.
+ // a
+ // b c d
+ // e
+ // Then takes magnitude from abs average of both sides of 'c'.
+ // Length converts gradient reversal to 0, smoothly to non-reversal at 1, shaped, then adding horz and vert terms.
+ AF1 dc=lD-lC;
+ AF1 cb=lC-lB;
+ AF1 lenX=max(abs(dc),abs(cb));
+ lenX=APrxLoRcpF1(lenX);
+ AF1 dirX=lD-lB;
+ dir.x+=dirX*w;
+ lenX=ASatF1(abs(dirX)*lenX);
+ lenX*=lenX;
+ len+=lenX*w;
+ // Repeat for the y axis.
+ AF1 ec=lE-lC;
+ AF1 ca=lC-lA;
+ AF1 lenY=max(abs(ec),abs(ca));
+ lenY=APrxLoRcpF1(lenY);
+ AF1 dirY=lE-lA;
+ dir.y+=dirY*w;
+ lenY=ASatF1(abs(dirY)*lenY);
+ lenY*=lenY;
+ len+=lenY*w;}
+//------------------------------------------------------------------------------------------------------------------------------
+ void FsrEasuF(
+ out AF3 pix,
+ AU2 ip, // Integer pixel position in output.
+ AU4 con0, // Constants generated by FsrEasuCon().
+ AU4 con1,
+ AU4 con2,
+ AU4 con3){
+//------------------------------------------------------------------------------------------------------------------------------
+ // Get position of 'f'.
+ AF2 pp=AF2(ip)*AF2_AU2(con0.xy)+AF2_AU2(con0.zw);
+ AF2 fp=floor(pp);
+ pp-=fp;
+//------------------------------------------------------------------------------------------------------------------------------
+ // 12-tap kernel.
+ // b c
+ // e f g h
+ // i j k l
+ // n o
+ // Gather 4 ordering.
+ // a b
+ // r g
+ // For packed FP16, need either {rg} or {ab} so using the following setup for gather in all versions,
+ // a b <- unused (z)
+ // r g
+ // a b a b
+ // r g r g
+ // a b
+ // r g <- unused (z)
+ // Allowing dead-code removal to remove the 'z's.
+ AF2 p0=fp*AF2_AU2(con1.xy)+AF2_AU2(con1.zw);
+ // These are from p0 to avoid pulling two constants on pre-Navi hardware.
+ AF2 p1=p0+AF2_AU2(con2.xy);
+ AF2 p2=p0+AF2_AU2(con2.zw);
+ AF2 p3=p0+AF2_AU2(con3.xy);
+ AF4 bczzR=FsrEasuRF(p0);
+ AF4 bczzG=FsrEasuGF(p0);
+ AF4 bczzB=FsrEasuBF(p0);
+ AF4 ijfeR=FsrEasuRF(p1);
+ AF4 ijfeG=FsrEasuGF(p1);
+ AF4 ijfeB=FsrEasuBF(p1);
+ AF4 klhgR=FsrEasuRF(p2);
+ AF4 klhgG=FsrEasuGF(p2);
+ AF4 klhgB=FsrEasuBF(p2);
+ AF4 zzonR=FsrEasuRF(p3);
+ AF4 zzonG=FsrEasuGF(p3);
+ AF4 zzonB=FsrEasuBF(p3);
+//------------------------------------------------------------------------------------------------------------------------------
+ // Simplest multi-channel approximate luma possible (luma times 2, in 2 FMA/MAD).
+ AF4 bczzL=bczzB*AF4_(0.5)+(bczzR*AF4_(0.5)+bczzG);
+ AF4 ijfeL=ijfeB*AF4_(0.5)+(ijfeR*AF4_(0.5)+ijfeG);
+ AF4 klhgL=klhgB*AF4_(0.5)+(klhgR*AF4_(0.5)+klhgG);
+ AF4 zzonL=zzonB*AF4_(0.5)+(zzonR*AF4_(0.5)+zzonG);
+ // Rename.
+ AF1 bL=bczzL.x;
+ AF1 cL=bczzL.y;
+ AF1 iL=ijfeL.x;
+ AF1 jL=ijfeL.y;
+ AF1 fL=ijfeL.z;
+ AF1 eL=ijfeL.w;
+ AF1 kL=klhgL.x;
+ AF1 lL=klhgL.y;
+ AF1 hL=klhgL.z;
+ AF1 gL=klhgL.w;
+ AF1 oL=zzonL.z;
+ AF1 nL=zzonL.w;
+ // Accumulate for bilinear interpolation.
+ AF2 dir=AF2_(0.0);
+ AF1 len=AF1_(0.0);
+ FsrEasuSetF(dir,len,pp,true, false,false,false,bL,eL,fL,gL,jL);
+ FsrEasuSetF(dir,len,pp,false,true ,false,false,cL,fL,gL,hL,kL);
+ FsrEasuSetF(dir,len,pp,false,false,true ,false,fL,iL,jL,kL,nL);
+ FsrEasuSetF(dir,len,pp,false,false,false,true ,gL,jL,kL,lL,oL);
+//------------------------------------------------------------------------------------------------------------------------------
+ // Normalize with approximation, and cleanup close to zero.
+ AF2 dir2=dir*dir;
+ AF1 dirR=dir2.x+dir2.y;
+ AP1 zro=dirR<AF1_(1.0/32768.0);
+ dirR=APrxLoRsqF1(dirR);
+ dirR=zro?AF1_(1.0):dirR;
+ dir.x=zro?AF1_(1.0):dir.x;
+ dir*=AF2_(dirR);
+ // Transform from {0 to 2} to {0 to 1} range, and shape with square.
+ len=len*AF1_(0.5);
+ len*=len;
+ // Stretch kernel {1.0 vert|horz, to sqrt(2.0) on diagonal}.
+ AF1 stretch=(dir.x*dir.x+dir.y*dir.y)*APrxLoRcpF1(max(abs(dir.x),abs(dir.y)));
+ // Anisotropic length after rotation,
+ // x := 1.0 lerp to 'stretch' on edges
+ // y := 1.0 lerp to 2x on edges
+ AF2 len2=AF2(AF1_(1.0)+(stretch-AF1_(1.0))*len,AF1_(1.0)+AF1_(-0.5)*len);
+ // Based on the amount of 'edge',
+ // the window shifts from +/-{sqrt(2.0) to slightly beyond 2.0}.
+ AF1 lob=AF1_(0.5)+AF1_((1.0/4.0-0.04)-0.5)*len;
+ // Set distance^2 clipping point to the end of the adjustable window.
+ AF1 clp=APrxLoRcpF1(lob);
+//------------------------------------------------------------------------------------------------------------------------------
+ // Accumulation mixed with min/max of 4 nearest.
+ // b c
+ // e f g h
+ // i j k l
+ // n o
+ AF3 min4=min(AMin3F3(AF3(ijfeR.z,ijfeG.z,ijfeB.z),AF3(klhgR.w,klhgG.w,klhgB.w),AF3(ijfeR.y,ijfeG.y,ijfeB.y)),
+ AF3(klhgR.x,klhgG.x,klhgB.x));
+ AF3 max4=max(AMax3F3(AF3(ijfeR.z,ijfeG.z,ijfeB.z),AF3(klhgR.w,klhgG.w,klhgB.w),AF3(ijfeR.y,ijfeG.y,ijfeB.y)),
+ AF3(klhgR.x,klhgG.x,klhgB.x));
+ // Accumulation.
+ AF3 aC=AF3_(0.0);
+ AF1 aW=AF1_(0.0);
+ FsrEasuTapF(aC,aW,AF2( 0.0,-1.0)-pp,dir,len2,lob,clp,AF3(bczzR.x,bczzG.x,bczzB.x)); // b
+ FsrEasuTapF(aC,aW,AF2( 1.0,-1.0)-pp,dir,len2,lob,clp,AF3(bczzR.y,bczzG.y,bczzB.y)); // c
+ FsrEasuTapF(aC,aW,AF2(-1.0, 1.0)-pp,dir,len2,lob,clp,AF3(ijfeR.x,ijfeG.x,ijfeB.x)); // i
+ FsrEasuTapF(aC,aW,AF2( 0.0, 1.0)-pp,dir,len2,lob,clp,AF3(ijfeR.y,ijfeG.y,ijfeB.y)); // j
+ FsrEasuTapF(aC,aW,AF2( 0.0, 0.0)-pp,dir,len2,lob,clp,AF3(ijfeR.z,ijfeG.z,ijfeB.z)); // f
+ FsrEasuTapF(aC,aW,AF2(-1.0, 0.0)-pp,dir,len2,lob,clp,AF3(ijfeR.w,ijfeG.w,ijfeB.w)); // e
+ FsrEasuTapF(aC,aW,AF2( 1.0, 1.0)-pp,dir,len2,lob,clp,AF3(klhgR.x,klhgG.x,klhgB.x)); // k
+ FsrEasuTapF(aC,aW,AF2( 2.0, 1.0)-pp,dir,len2,lob,clp,AF3(klhgR.y,klhgG.y,klhgB.y)); // l
+ FsrEasuTapF(aC,aW,AF2( 2.0, 0.0)-pp,dir,len2,lob,clp,AF3(klhgR.z,klhgG.z,klhgB.z)); // h
+ FsrEasuTapF(aC,aW,AF2( 1.0, 0.0)-pp,dir,len2,lob,clp,AF3(klhgR.w,klhgG.w,klhgB.w)); // g
+ FsrEasuTapF(aC,aW,AF2( 1.0, 2.0)-pp,dir,len2,lob,clp,AF3(zzonR.z,zzonG.z,zzonB.z)); // o
+ FsrEasuTapF(aC,aW,AF2( 0.0, 2.0)-pp,dir,len2,lob,clp,AF3(zzonR.w,zzonG.w,zzonB.w)); // n
+//------------------------------------------------------------------------------------------------------------------------------
+ // Normalize and dering.
+ pix=min(max4,max(min4,aC*AF3_(ARcpF1(aW))));}
+#endif
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//_____________________________________________________________/\_______________________________________________________________
+//==============================================================================================================================
+// PACKED 16-BIT VERSION
+//==============================================================================================================================
+#if defined(A_GPU)&&defined(A_HALF)&&defined(FSR_EASU_H)
+// Input callback prototypes, need to be implemented by calling shader
+ AH4 FsrEasuRH(AF2 p);
+ AH4 FsrEasuGH(AF2 p);
+ AH4 FsrEasuBH(AF2 p);
+//------------------------------------------------------------------------------------------------------------------------------
+ // This runs 2 taps in parallel.
+ void FsrEasuTapH(
+ inout AH2 aCR,inout AH2 aCG,inout AH2 aCB,
+ inout AH2 aW,
+ AH2 offX,AH2 offY,
+ AH2 dir,
+ AH2 len,
+ AH1 lob,
+ AH1 clp,
+ AH2 cR,AH2 cG,AH2 cB){
+ AH2 vX,vY;
+ vX=offX* dir.xx +offY*dir.yy;
+ vY=offX*(-dir.yy)+offY*dir.xx;
+ vX*=len.x;vY*=len.y;
+ AH2 d2=vX*vX+vY*vY;
+ d2=min(d2,AH2_(clp));
+ AH2 wB=AH2_(2.0/5.0)*d2+AH2_(-1.0);
+ AH2 wA=AH2_(lob)*d2+AH2_(-1.0);
+ wB*=wB;
+ wA*=wA;
+ wB=AH2_(25.0/16.0)*wB+AH2_(-(25.0/16.0-1.0));
+ AH2 w=wB*wA;
+ aCR+=cR*w;aCG+=cG*w;aCB+=cB*w;aW+=w;}
+//------------------------------------------------------------------------------------------------------------------------------
+ // This runs 2 taps in parallel.
+ void FsrEasuSetH(
+ inout AH2 dirPX,inout AH2 dirPY,
+ inout AH2 lenP,
+ AH2 pp,
+ AP1 biST,AP1 biUV,
+ AH2 lA,AH2 lB,AH2 lC,AH2 lD,AH2 lE){
+ AH2 w = AH2_(0.0);
+ if(biST)w=(AH2(1.0,0.0)+AH2(-pp.x,pp.x))*AH2_(AH1_(1.0)-pp.y);
+ if(biUV)w=(AH2(1.0,0.0)+AH2(-pp.x,pp.x))*AH2_( pp.y);
+ // ABS is not free in the packed FP16 path.
+ AH2 dc=lD-lC;
+ AH2 cb=lC-lB;
+ AH2 lenX=max(abs(dc),abs(cb));
+ lenX=ARcpH2(lenX);
+ AH2 dirX=lD-lB;
+ dirPX+=dirX*w;
+ lenX=ASatH2(abs(dirX)*lenX);
+ lenX*=lenX;
+ lenP+=lenX*w;
+ AH2 ec=lE-lC;
+ AH2 ca=lC-lA;
+ AH2 lenY=max(abs(ec),abs(ca));
+ lenY=ARcpH2(lenY);
+ AH2 dirY=lE-lA;
+ dirPY+=dirY*w;
+ lenY=ASatH2(abs(dirY)*lenY);
+ lenY*=lenY;
+ lenP+=lenY*w;}
+//------------------------------------------------------------------------------------------------------------------------------
+ void FsrEasuH(
+ out AH3 pix,
+ AU2 ip,
+ AU4 con0,
+ AU4 con1,
+ AU4 con2,
+ AU4 con3){
+//------------------------------------------------------------------------------------------------------------------------------
+ AF2 pp=AF2(ip)*AF2_AU2(con0.xy)+AF2_AU2(con0.zw);
+ AF2 fp=floor(pp);
+ pp-=fp;
+ AH2 ppp=AH2(pp);
+//------------------------------------------------------------------------------------------------------------------------------
+ AF2 p0=fp*AF2_AU2(con1.xy)+AF2_AU2(con1.zw);
+ AF2 p1=p0+AF2_AU2(con2.xy);
+ AF2 p2=p0+AF2_AU2(con2.zw);
+ AF2 p3=p0+AF2_AU2(con3.xy);
+ AH4 bczzR=FsrEasuRH(p0);
+ AH4 bczzG=FsrEasuGH(p0);
+ AH4 bczzB=FsrEasuBH(p0);
+ AH4 ijfeR=FsrEasuRH(p1);
+ AH4 ijfeG=FsrEasuGH(p1);
+ AH4 ijfeB=FsrEasuBH(p1);
+ AH4 klhgR=FsrEasuRH(p2);
+ AH4 klhgG=FsrEasuGH(p2);
+ AH4 klhgB=FsrEasuBH(p2);
+ AH4 zzonR=FsrEasuRH(p3);
+ AH4 zzonG=FsrEasuGH(p3);
+ AH4 zzonB=FsrEasuBH(p3);
+//------------------------------------------------------------------------------------------------------------------------------
+ AH4 bczzL=bczzB*AH4_(0.5)+(bczzR*AH4_(0.5)+bczzG);
+ AH4 ijfeL=ijfeB*AH4_(0.5)+(ijfeR*AH4_(0.5)+ijfeG);
+ AH4 klhgL=klhgB*AH4_(0.5)+(klhgR*AH4_(0.5)+klhgG);
+ AH4 zzonL=zzonB*AH4_(0.5)+(zzonR*AH4_(0.5)+zzonG);
+ AH1 bL=bczzL.x;
+ AH1 cL=bczzL.y;
+ AH1 iL=ijfeL.x;
+ AH1 jL=ijfeL.y;
+ AH1 fL=ijfeL.z;
+ AH1 eL=ijfeL.w;
+ AH1 kL=klhgL.x;
+ AH1 lL=klhgL.y;
+ AH1 hL=klhgL.z;
+ AH1 gL=klhgL.w;
+ AH1 oL=zzonL.z;
+ AH1 nL=zzonL.w;
+ // This part is different, accumulating 2 taps in parallel.
+ AH2 dirPX=AH2_(0.0);
+ AH2 dirPY=AH2_(0.0);
+ AH2 lenP=AH2_(0.0);
+ FsrEasuSetH(dirPX,dirPY,lenP,ppp,true, false,AH2(bL,cL),AH2(eL,fL),AH2(fL,gL),AH2(gL,hL),AH2(jL,kL));
+ FsrEasuSetH(dirPX,dirPY,lenP,ppp,false,true ,AH2(fL,gL),AH2(iL,jL),AH2(jL,kL),AH2(kL,lL),AH2(nL,oL));
+ AH2 dir=AH2(dirPX.r+dirPX.g,dirPY.r+dirPY.g);
+ AH1 len=lenP.r+lenP.g;
+//------------------------------------------------------------------------------------------------------------------------------
+ AH2 dir2=dir*dir;
+ AH1 dirR=dir2.x+dir2.y;
+ AP1 zro=dirR<AH1_(1.0/32768.0);
+ dirR=APrxLoRsqH1(dirR);
+ dirR=zro?AH1_(1.0):dirR;
+ dir.x=zro?AH1_(1.0):dir.x;
+ dir*=AH2_(dirR);
+ len=len*AH1_(0.5);
+ len*=len;
+ AH1 stretch=(dir.x*dir.x+dir.y*dir.y)*APrxLoRcpH1(max(abs(dir.x),abs(dir.y)));
+ AH2 len2=AH2(AH1_(1.0)+(stretch-AH1_(1.0))*len,AH1_(1.0)+AH1_(-0.5)*len);
+ AH1 lob=AH1_(0.5)+AH1_((1.0/4.0-0.04)-0.5)*len;
+ AH1 clp=APrxLoRcpH1(lob);
+//------------------------------------------------------------------------------------------------------------------------------
+ // FP16 is different, using packed trick to do min and max in same operation.
+ AH2 bothR=max(max(AH2(-ijfeR.z,ijfeR.z),AH2(-klhgR.w,klhgR.w)),max(AH2(-ijfeR.y,ijfeR.y),AH2(-klhgR.x,klhgR.x)));
+ AH2 bothG=max(max(AH2(-ijfeG.z,ijfeG.z),AH2(-klhgG.w,klhgG.w)),max(AH2(-ijfeG.y,ijfeG.y),AH2(-klhgG.x,klhgG.x)));
+ AH2 bothB=max(max(AH2(-ijfeB.z,ijfeB.z),AH2(-klhgB.w,klhgB.w)),max(AH2(-ijfeB.y,ijfeB.y),AH2(-klhgB.x,klhgB.x)));
+ // This part is different for FP16, working pairs of taps at a time.
+ AH2 pR=AH2_(0.0);
+ AH2 pG=AH2_(0.0);
+ AH2 pB=AH2_(0.0);
+ AH2 pW=AH2_(0.0);
+ FsrEasuTapH(pR,pG,pB,pW,AH2( 0.0, 1.0)-ppp.xx,AH2(-1.0,-1.0)-ppp.yy,dir,len2,lob,clp,bczzR.xy,bczzG.xy,bczzB.xy);
+ FsrEasuTapH(pR,pG,pB,pW,AH2(-1.0, 0.0)-ppp.xx,AH2( 1.0, 1.0)-ppp.yy,dir,len2,lob,clp,ijfeR.xy,ijfeG.xy,ijfeB.xy);
+ FsrEasuTapH(pR,pG,pB,pW,AH2( 0.0,-1.0)-ppp.xx,AH2( 0.0, 0.0)-ppp.yy,dir,len2,lob,clp,ijfeR.zw,ijfeG.zw,ijfeB.zw);
+ FsrEasuTapH(pR,pG,pB,pW,AH2( 1.0, 2.0)-ppp.xx,AH2( 1.0, 1.0)-ppp.yy,dir,len2,lob,clp,klhgR.xy,klhgG.xy,klhgB.xy);
+ FsrEasuTapH(pR,pG,pB,pW,AH2( 2.0, 1.0)-ppp.xx,AH2( 0.0, 0.0)-ppp.yy,dir,len2,lob,clp,klhgR.zw,klhgG.zw,klhgB.zw);
+ FsrEasuTapH(pR,pG,pB,pW,AH2( 1.0, 0.0)-ppp.xx,AH2( 2.0, 2.0)-ppp.yy,dir,len2,lob,clp,zzonR.zw,zzonG.zw,zzonB.zw);
+ AH3 aC=AH3(pR.x+pR.y,pG.x+pG.y,pB.x+pB.y);
+ AH1 aW=pW.x+pW.y;
+//------------------------------------------------------------------------------------------------------------------------------
+ // Slightly different for FP16 version due to combined min and max.
+ pix=min(AH3(bothR.y,bothG.y,bothB.y),max(-AH3(bothR.x,bothG.x,bothB.x),aC*AH3_(ARcpH1(aW))));}
+#endif
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//_____________________________________________________________/\_______________________________________________________________
+//==============================================================================================================================
+//
+// FSR - [RCAS] ROBUST CONTRAST ADAPTIVE SHARPENING
+//
+//------------------------------------------------------------------------------------------------------------------------------
+// CAS uses a simplified mechanism to convert local contrast into a variable amount of sharpness.
+// RCAS uses a more exact mechanism, solving for the maximum local sharpness possible before clipping.
+// RCAS also has a built in process to limit sharpening of what it detects as possible noise.
+// RCAS sharper does not support scaling, as it should be applied after EASU scaling.
+// Pass EASU output straight into RCAS, no color conversions necessary.
+//------------------------------------------------------------------------------------------------------------------------------
+// RCAS is based on the following logic.
+// RCAS uses a 5 tap filter in a cross pattern (same as CAS),
+// w n
+// w 1 w for taps w m e
+// w s
+// Where 'w' is the negative lobe weight.
+// output = (w*(n+e+w+s)+m)/(4*w+1)
+// RCAS solves for 'w' by seeing where the signal might clip out of the {0 to 1} input range,
+// 0 == (w*(n+e+w+s)+m)/(4*w+1) -> w = -m/(n+e+w+s)
+// 1 == (w*(n+e+w+s)+m)/(4*w+1) -> w = (1-m)/(n+e+w+s-4*1)
+// Then chooses the 'w' which results in no clipping, limits 'w', and multiplies by the 'sharp' amount.
+// This solution above has issues with MSAA input as the steps along the gradient cause edge detection issues.
+// So RCAS uses 4x the maximum and 4x the minimum (depending on equation)in place of the individual taps.
+// As well as switching from 'm' to either the minimum or maximum (depending on side), to help in energy conservation.
+// This stabilizes RCAS.
+// RCAS does a simple highpass which is normalized against the local contrast then shaped,
+// 0.25
+// 0.25 -1 0.25
+// 0.25
+// This is used as a noise detection filter, to reduce the effect of RCAS on grain, and focus on real edges.
+//
+// GLSL example for the required callbacks :
+//
+// AH4 FsrRcasLoadH(ASW2 p){return AH4(imageLoad(imgSrc,ASU2(p)));}
+// void FsrRcasInputH(inout AH1 r,inout AH1 g,inout AH1 b)
+// {
+// //do any simple input color conversions here or leave empty if none needed
+// }
+//
+// FsrRcasCon need to be called from the CPU or GPU to set up constants.
+// Including a GPU example here, the 'con' value would be stored out to a constant buffer.
+//
+// AU4 con;
+// FsrRcasCon(con,
+// 0.0); // The scale is {0.0 := maximum sharpness, to N>0, where N is the number of stops (halving) of the reduction of sharpness}.
+// ---------------
+// RCAS sharpening supports a CAS-like pass-through alpha via,
+// #define FSR_RCAS_PASSTHROUGH_ALPHA 1
+// RCAS also supports a define to enable a more expensive path to avoid some sharpening of noise.
+// Would suggest it is better to apply film grain after RCAS sharpening (and after scaling) instead of using this define,
+// #define FSR_RCAS_DENOISE 1
+//==============================================================================================================================
+// This is set at the limit of providing unnatural results for sharpening.
+#define FSR_RCAS_LIMIT (0.25-(1.0/16.0))
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//_____________________________________________________________/\_______________________________________________________________
+//==============================================================================================================================
+// CONSTANT SETUP
+//==============================================================================================================================
+// Call to setup required constant values (works on CPU or GPU).
+A_STATIC void FsrRcasCon(
+outAU4 con,
+// The scale is {0.0 := maximum, to N>0, where N is the number of stops (halving) of the reduction of sharpness}.
+AF1 sharpness){
+ // Transform from stops to linear value.
+ sharpness=AExp2F1(-sharpness);
+ varAF2(hSharp)=initAF2(sharpness,sharpness);
+ con[0]=AU1_AF1(sharpness);
+ con[1]=AU1_AH2_AF2(hSharp);
+ con[2]=0;
+ con[3]=0;}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//_____________________________________________________________/\_______________________________________________________________
+//==============================================================================================================================
+// NON-PACKED 32-BIT VERSION
+//==============================================================================================================================
+#if defined(A_GPU)&&defined(FSR_RCAS_F)
+ // Input callback prototypes that need to be implemented by calling shader
+ AF4 FsrRcasLoadF(ASU2 p);
+ void FsrRcasInputF(inout AF1 r,inout AF1 g,inout AF1 b);
+//------------------------------------------------------------------------------------------------------------------------------
+ void FsrRcasF(
+ out AF1 pixR, // Output values, non-vector so port between RcasFilter() and RcasFilterH() is easy.
+ out AF1 pixG,
+ out AF1 pixB,
+ #ifdef FSR_RCAS_PASSTHROUGH_ALPHA
+ out AF1 pixA,
+ #endif
+ AU2 ip, // Integer pixel position in output.
+ AU4 con){ // Constant generated by RcasSetup().
+ // Algorithm uses minimal 3x3 pixel neighborhood.
+ // b
+ // d e f
+ // h
+ ASU2 sp=ASU2(ip);
+ AF3 b=FsrRcasLoadF(sp+ASU2( 0,-1)).rgb;
+ AF3 d=FsrRcasLoadF(sp+ASU2(-1, 0)).rgb;
+ #ifdef FSR_RCAS_PASSTHROUGH_ALPHA
+ AF4 ee=FsrRcasLoadF(sp);
+ AF3 e=ee.rgb;pixA=ee.a;
+ #else
+ AF3 e=FsrRcasLoadF(sp).rgb;
+ #endif
+ AF3 f=FsrRcasLoadF(sp+ASU2( 1, 0)).rgb;
+ AF3 h=FsrRcasLoadF(sp+ASU2( 0, 1)).rgb;
+ // Rename (32-bit) or regroup (16-bit).
+ AF1 bR=b.r;
+ AF1 bG=b.g;
+ AF1 bB=b.b;
+ AF1 dR=d.r;
+ AF1 dG=d.g;
+ AF1 dB=d.b;
+ AF1 eR=e.r;
+ AF1 eG=e.g;
+ AF1 eB=e.b;
+ AF1 fR=f.r;
+ AF1 fG=f.g;
+ AF1 fB=f.b;
+ AF1 hR=h.r;
+ AF1 hG=h.g;
+ AF1 hB=h.b;
+ // Run optional input transform.
+ FsrRcasInputF(bR,bG,bB);
+ FsrRcasInputF(dR,dG,dB);
+ FsrRcasInputF(eR,eG,eB);
+ FsrRcasInputF(fR,fG,fB);
+ FsrRcasInputF(hR,hG,hB);
+ // Luma times 2.
+ AF1 bL=bB*AF1_(0.5)+(bR*AF1_(0.5)+bG);
+ AF1 dL=dB*AF1_(0.5)+(dR*AF1_(0.5)+dG);
+ AF1 eL=eB*AF1_(0.5)+(eR*AF1_(0.5)+eG);
+ AF1 fL=fB*AF1_(0.5)+(fR*AF1_(0.5)+fG);
+ AF1 hL=hB*AF1_(0.5)+(hR*AF1_(0.5)+hG);
+ // Noise detection.
+ AF1 nz=AF1_(0.25)*bL+AF1_(0.25)*dL+AF1_(0.25)*fL+AF1_(0.25)*hL-eL;
+ nz=ASatF1(abs(nz)*APrxMedRcpF1(AMax3F1(AMax3F1(bL,dL,eL),fL,hL)-AMin3F1(AMin3F1(bL,dL,eL),fL,hL)));
+ nz=AF1_(-0.5)*nz+AF1_(1.0);
+ // Min and max of ring.
+ AF1 mn4R=min(AMin3F1(bR,dR,fR),hR);
+ AF1 mn4G=min(AMin3F1(bG,dG,fG),hG);
+ AF1 mn4B=min(AMin3F1(bB,dB,fB),hB);
+ AF1 mx4R=max(AMax3F1(bR,dR,fR),hR);
+ AF1 mx4G=max(AMax3F1(bG,dG,fG),hG);
+ AF1 mx4B=max(AMax3F1(bB,dB,fB),hB);
+ // Immediate constants for peak range.
+ AF2 peakC=AF2(1.0,-1.0*4.0);
+ // Limiters, these need to be high precision RCPs.
+ AF1 hitMinR=min(mn4R,eR)*ARcpF1(AF1_(4.0)*mx4R);
+ AF1 hitMinG=min(mn4G,eG)*ARcpF1(AF1_(4.0)*mx4G);
+ AF1 hitMinB=min(mn4B,eB)*ARcpF1(AF1_(4.0)*mx4B);
+ AF1 hitMaxR=(peakC.x-max(mx4R,eR))*ARcpF1(AF1_(4.0)*mn4R+peakC.y);
+ AF1 hitMaxG=(peakC.x-max(mx4G,eG))*ARcpF1(AF1_(4.0)*mn4G+peakC.y);
+ AF1 hitMaxB=(peakC.x-max(mx4B,eB))*ARcpF1(AF1_(4.0)*mn4B+peakC.y);
+ AF1 lobeR=max(-hitMinR,hitMaxR);
+ AF1 lobeG=max(-hitMinG,hitMaxG);
+ AF1 lobeB=max(-hitMinB,hitMaxB);
+ AF1 lobe=max(AF1_(-FSR_RCAS_LIMIT),min(AMax3F1(lobeR,lobeG,lobeB),AF1_(0.0)))*AF1_AU1(con.x);
+ // Apply noise removal.
+ #ifdef FSR_RCAS_DENOISE
+ lobe*=nz;
+ #endif
+ // Resolve, which needs the medium precision rcp approximation to avoid visible tonality changes.
+ AF1 rcpL=APrxMedRcpF1(AF1_(4.0)*lobe+AF1_(1.0));
+ pixR=(lobe*bR+lobe*dR+lobe*hR+lobe*fR+eR)*rcpL;
+ pixG=(lobe*bG+lobe*dG+lobe*hG+lobe*fG+eG)*rcpL;
+ pixB=(lobe*bB+lobe*dB+lobe*hB+lobe*fB+eB)*rcpL;
+ return;}
+#endif
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//_____________________________________________________________/\_______________________________________________________________
+//==============================================================================================================================
+// NON-PACKED 16-BIT VERSION
+//==============================================================================================================================
+#if defined(A_GPU)&&defined(A_HALF)&&defined(FSR_RCAS_H)
+ // Input callback prototypes that need to be implemented by calling shader
+ AH4 FsrRcasLoadH(ASW2 p);
+ void FsrRcasInputH(inout AH1 r,inout AH1 g,inout AH1 b);
+//------------------------------------------------------------------------------------------------------------------------------
+ void FsrRcasH(
+ out AH1 pixR, // Output values, non-vector so port between RcasFilter() and RcasFilterH() is easy.
+ out AH1 pixG,
+ out AH1 pixB,
+ #ifdef FSR_RCAS_PASSTHROUGH_ALPHA
+ out AH1 pixA,
+ #endif
+ AU2 ip, // Integer pixel position in output.
+ AU4 con){ // Constant generated by RcasSetup().
+ // Sharpening algorithm uses minimal 3x3 pixel neighborhood.
+ // b
+ // d e f
+ // h
+ ASW2 sp=ASW2(ip);
+ AH3 b=FsrRcasLoadH(sp+ASW2( 0,-1)).rgb;
+ AH3 d=FsrRcasLoadH(sp+ASW2(-1, 0)).rgb;
+ #ifdef FSR_RCAS_PASSTHROUGH_ALPHA
+ AH4 ee=FsrRcasLoadH(sp);
+ AH3 e=ee.rgb;pixA=ee.a;
+ #else
+ AH3 e=FsrRcasLoadH(sp).rgb;
+ #endif
+ AH3 f=FsrRcasLoadH(sp+ASW2( 1, 0)).rgb;
+ AH3 h=FsrRcasLoadH(sp+ASW2( 0, 1)).rgb;
+ // Rename (32-bit) or regroup (16-bit).
+ AH1 bR=b.r;
+ AH1 bG=b.g;
+ AH1 bB=b.b;
+ AH1 dR=d.r;
+ AH1 dG=d.g;
+ AH1 dB=d.b;
+ AH1 eR=e.r;
+ AH1 eG=e.g;
+ AH1 eB=e.b;
+ AH1 fR=f.r;
+ AH1 fG=f.g;
+ AH1 fB=f.b;
+ AH1 hR=h.r;
+ AH1 hG=h.g;
+ AH1 hB=h.b;
+ // Run optional input transform.
+ FsrRcasInputH(bR,bG,bB);
+ FsrRcasInputH(dR,dG,dB);
+ FsrRcasInputH(eR,eG,eB);
+ FsrRcasInputH(fR,fG,fB);
+ FsrRcasInputH(hR,hG,hB);
+ // Luma times 2.
+ AH1 bL=bB*AH1_(0.5)+(bR*AH1_(0.5)+bG);
+ AH1 dL=dB*AH1_(0.5)+(dR*AH1_(0.5)+dG);
+ AH1 eL=eB*AH1_(0.5)+(eR*AH1_(0.5)+eG);
+ AH1 fL=fB*AH1_(0.5)+(fR*AH1_(0.5)+fG);
+ AH1 hL=hB*AH1_(0.5)+(hR*AH1_(0.5)+hG);
+ // Noise detection.
+ AH1 nz=AH1_(0.25)*bL+AH1_(0.25)*dL+AH1_(0.25)*fL+AH1_(0.25)*hL-eL;
+ nz=ASatH1(abs(nz)*APrxMedRcpH1(AMax3H1(AMax3H1(bL,dL,eL),fL,hL)-AMin3H1(AMin3H1(bL,dL,eL),fL,hL)));
+ nz=AH1_(-0.5)*nz+AH1_(1.0);
+ // Min and max of ring.
+ AH1 mn4R=min(AMin3H1(bR,dR,fR),hR);
+ AH1 mn4G=min(AMin3H1(bG,dG,fG),hG);
+ AH1 mn4B=min(AMin3H1(bB,dB,fB),hB);
+ AH1 mx4R=max(AMax3H1(bR,dR,fR),hR);
+ AH1 mx4G=max(AMax3H1(bG,dG,fG),hG);
+ AH1 mx4B=max(AMax3H1(bB,dB,fB),hB);
+ // Immediate constants for peak range.
+ AH2 peakC=AH2(1.0,-1.0*4.0);
+ // Limiters, these need to be high precision RCPs.
+ AH1 hitMinR=min(mn4R,eR)*ARcpH1(AH1_(4.0)*mx4R);
+ AH1 hitMinG=min(mn4G,eG)*ARcpH1(AH1_(4.0)*mx4G);
+ AH1 hitMinB=min(mn4B,eB)*ARcpH1(AH1_(4.0)*mx4B);
+ AH1 hitMaxR=(peakC.x-max(mx4R,eR))*ARcpH1(AH1_(4.0)*mn4R+peakC.y);
+ AH1 hitMaxG=(peakC.x-max(mx4G,eG))*ARcpH1(AH1_(4.0)*mn4G+peakC.y);
+ AH1 hitMaxB=(peakC.x-max(mx4B,eB))*ARcpH1(AH1_(4.0)*mn4B+peakC.y);
+ AH1 lobeR=max(-hitMinR,hitMaxR);
+ AH1 lobeG=max(-hitMinG,hitMaxG);
+ AH1 lobeB=max(-hitMinB,hitMaxB);
+ AH1 lobe=max(AH1_(-FSR_RCAS_LIMIT),min(AMax3H1(lobeR,lobeG,lobeB),AH1_(0.0)))*AH2_AU1(con.y).x;
+ // Apply noise removal.
+ #ifdef FSR_RCAS_DENOISE
+ lobe*=nz;
+ #endif
+ // Resolve, which needs the medium precision rcp approximation to avoid visible tonality changes.
+ AH1 rcpL=APrxMedRcpH1(AH1_(4.0)*lobe+AH1_(1.0));
+ pixR=(lobe*bR+lobe*dR+lobe*hR+lobe*fR+eR)*rcpL;
+ pixG=(lobe*bG+lobe*dG+lobe*hG+lobe*fG+eG)*rcpL;
+ pixB=(lobe*bB+lobe*dB+lobe*hB+lobe*fB+eB)*rcpL;}
+#endif
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//_____________________________________________________________/\_______________________________________________________________
+//==============================================================================================================================
+// PACKED 16-BIT VERSION
+//==============================================================================================================================
+#if defined(A_GPU)&&defined(A_HALF)&&defined(FSR_RCAS_HX2)
+ // Input callback prototypes that need to be implemented by the calling shader
+ AH4 FsrRcasLoadHx2(ASW2 p);
+ void FsrRcasInputHx2(inout AH2 r,inout AH2 g,inout AH2 b);
+//------------------------------------------------------------------------------------------------------------------------------
+ // Can be used to convert from packed Structures of Arrays to Arrays of Structures for store.
+ void FsrRcasDepackHx2(out AH4 pix0,out AH4 pix1,AH2 pixR,AH2 pixG,AH2 pixB){
+ #ifdef A_HLSL
+ // Invoke a slower path for DX only, since it won't allow uninitialized values.
+ pix0.a=pix1.a=0.0;
+ #endif
+ pix0.rgb=AH3(pixR.x,pixG.x,pixB.x);
+ pix1.rgb=AH3(pixR.y,pixG.y,pixB.y);}
+//------------------------------------------------------------------------------------------------------------------------------
+ void FsrRcasHx2(
+ // Output values are for 2 8x8 tiles in a 16x8 region.
+ // pix<R,G,B>.x = left 8x8 tile
+ // pix<R,G,B>.y = right 8x8 tile
+ // This enables later processing to easily be packed as well.
+ out AH2 pixR,
+ out AH2 pixG,
+ out AH2 pixB,
+ #ifdef FSR_RCAS_PASSTHROUGH_ALPHA
+ out AH2 pixA,
+ #endif
+ AU2 ip, // Integer pixel position in output.
+ AU4 con){ // Constant generated by RcasSetup().
+ // No scaling algorithm uses minimal 3x3 pixel neighborhood.
+ ASW2 sp0=ASW2(ip);
+ AH3 b0=FsrRcasLoadHx2(sp0+ASW2( 0,-1)).rgb;
+ AH3 d0=FsrRcasLoadHx2(sp0+ASW2(-1, 0)).rgb;
+ #ifdef FSR_RCAS_PASSTHROUGH_ALPHA
+ AH4 ee0=FsrRcasLoadHx2(sp0);
+ AH3 e0=ee0.rgb;pixA.r=ee0.a;
+ #else
+ AH3 e0=FsrRcasLoadHx2(sp0).rgb;
+ #endif
+ AH3 f0=FsrRcasLoadHx2(sp0+ASW2( 1, 0)).rgb;
+ AH3 h0=FsrRcasLoadHx2(sp0+ASW2( 0, 1)).rgb;
+ ASW2 sp1=sp0+ASW2(8,0);
+ AH3 b1=FsrRcasLoadHx2(sp1+ASW2( 0,-1)).rgb;
+ AH3 d1=FsrRcasLoadHx2(sp1+ASW2(-1, 0)).rgb;
+ #ifdef FSR_RCAS_PASSTHROUGH_ALPHA
+ AH4 ee1=FsrRcasLoadHx2(sp1);
+ AH3 e1=ee1.rgb;pixA.g=ee1.a;
+ #else
+ AH3 e1=FsrRcasLoadHx2(sp1).rgb;
+ #endif
+ AH3 f1=FsrRcasLoadHx2(sp1+ASW2( 1, 0)).rgb;
+ AH3 h1=FsrRcasLoadHx2(sp1+ASW2( 0, 1)).rgb;
+ // Arrays of Structures to Structures of Arrays conversion.
+ AH2 bR=AH2(b0.r,b1.r);
+ AH2 bG=AH2(b0.g,b1.g);
+ AH2 bB=AH2(b0.b,b1.b);
+ AH2 dR=AH2(d0.r,d1.r);
+ AH2 dG=AH2(d0.g,d1.g);
+ AH2 dB=AH2(d0.b,d1.b);
+ AH2 eR=AH2(e0.r,e1.r);
+ AH2 eG=AH2(e0.g,e1.g);
+ AH2 eB=AH2(e0.b,e1.b);
+ AH2 fR=AH2(f0.r,f1.r);
+ AH2 fG=AH2(f0.g,f1.g);
+ AH2 fB=AH2(f0.b,f1.b);
+ AH2 hR=AH2(h0.r,h1.r);
+ AH2 hG=AH2(h0.g,h1.g);
+ AH2 hB=AH2(h0.b,h1.b);
+ // Run optional input transform.
+ FsrRcasInputHx2(bR,bG,bB);
+ FsrRcasInputHx2(dR,dG,dB);
+ FsrRcasInputHx2(eR,eG,eB);
+ FsrRcasInputHx2(fR,fG,fB);
+ FsrRcasInputHx2(hR,hG,hB);
+ // Luma times 2.
+ AH2 bL=bB*AH2_(0.5)+(bR*AH2_(0.5)+bG);
+ AH2 dL=dB*AH2_(0.5)+(dR*AH2_(0.5)+dG);
+ AH2 eL=eB*AH2_(0.5)+(eR*AH2_(0.5)+eG);
+ AH2 fL=fB*AH2_(0.5)+(fR*AH2_(0.5)+fG);
+ AH2 hL=hB*AH2_(0.5)+(hR*AH2_(0.5)+hG);
+ // Noise detection.
+ AH2 nz=AH2_(0.25)*bL+AH2_(0.25)*dL+AH2_(0.25)*fL+AH2_(0.25)*hL-eL;
+ nz=ASatH2(abs(nz)*APrxMedRcpH2(AMax3H2(AMax3H2(bL,dL,eL),fL,hL)-AMin3H2(AMin3H2(bL,dL,eL),fL,hL)));
+ nz=AH2_(-0.5)*nz+AH2_(1.0);
+ // Min and max of ring.
+ AH2 mn4R=min(AMin3H2(bR,dR,fR),hR);
+ AH2 mn4G=min(AMin3H2(bG,dG,fG),hG);
+ AH2 mn4B=min(AMin3H2(bB,dB,fB),hB);
+ AH2 mx4R=max(AMax3H2(bR,dR,fR),hR);
+ AH2 mx4G=max(AMax3H2(bG,dG,fG),hG);
+ AH2 mx4B=max(AMax3H2(bB,dB,fB),hB);
+ // Immediate constants for peak range.
+ AH2 peakC=AH2(1.0,-1.0*4.0);
+ // Limiters, these need to be high precision RCPs.
+ AH2 hitMinR=min(mn4R,eR)*ARcpH2(AH2_(4.0)*mx4R);
+ AH2 hitMinG=min(mn4G,eG)*ARcpH2(AH2_(4.0)*mx4G);
+ AH2 hitMinB=min(mn4B,eB)*ARcpH2(AH2_(4.0)*mx4B);
+ AH2 hitMaxR=(peakC.x-max(mx4R,eR))*ARcpH2(AH2_(4.0)*mn4R+peakC.y);
+ AH2 hitMaxG=(peakC.x-max(mx4G,eG))*ARcpH2(AH2_(4.0)*mn4G+peakC.y);
+ AH2 hitMaxB=(peakC.x-max(mx4B,eB))*ARcpH2(AH2_(4.0)*mn4B+peakC.y);
+ AH2 lobeR=max(-hitMinR,hitMaxR);
+ AH2 lobeG=max(-hitMinG,hitMaxG);
+ AH2 lobeB=max(-hitMinB,hitMaxB);
+ AH2 lobe=max(AH2_(-FSR_RCAS_LIMIT),min(AMax3H2(lobeR,lobeG,lobeB),AH2_(0.0)))*AH2_(AH2_AU1(con.y).x);
+ // Apply noise removal.
+ #ifdef FSR_RCAS_DENOISE
+ lobe*=nz;
+ #endif
+ // Resolve, which needs the medium precision rcp approximation to avoid visible tonality changes.
+ AH2 rcpL=APrxMedRcpH2(AH2_(4.0)*lobe+AH2_(1.0));
+ pixR=(lobe*bR+lobe*dR+lobe*hR+lobe*fR+eR)*rcpL;
+ pixG=(lobe*bG+lobe*dG+lobe*hG+lobe*fG+eG)*rcpL;
+ pixB=(lobe*bB+lobe*dB+lobe*hB+lobe*fB+eB)*rcpL;}
+#endif
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//_____________________________________________________________/\_______________________________________________________________
+//==============================================================================================================================
+//
+// FSR - [LFGA] LINEAR FILM GRAIN APPLICATOR
+//
+//------------------------------------------------------------------------------------------------------------------------------
+// Adding output-resolution film grain after scaling is a good way to mask both rendering and scaling artifacts.
+// Suggest using tiled blue noise as film grain input, with peak noise frequency set for a specific look and feel.
+// The 'Lfga*()' functions provide a convenient way to introduce grain.
+// These functions limit grain based on distance to signal limits.
+// This is done so that the grain is temporally energy preserving, and thus won't modify image tonality.
+// Grain application should be done in a linear colorspace.
+// The grain should be temporally changing, but have a temporal sum per pixel that adds to zero (non-biased).
+//------------------------------------------------------------------------------------------------------------------------------
+// Usage,
+// FsrLfga*(
+// color, // In/out linear colorspace color {0 to 1} ranged.
+// grain, // Per pixel grain texture value {-0.5 to 0.5} ranged, input is 3-channel to support colored grain.
+// amount); // Amount of grain (0 to 1} ranged.
+//------------------------------------------------------------------------------------------------------------------------------
+// Example if grain texture is monochrome: 'FsrLfgaF(color,AF3_(grain),amount)'
+//==============================================================================================================================
+#if defined(A_GPU)
+ // Maximum grain is the minimum distance to the signal limit.
+ void FsrLfgaF(inout AF3 c,AF3 t,AF1 a){c+=(t*AF3_(a))*min(AF3_(1.0)-c,c);}
+#endif
+//==============================================================================================================================
+#if defined(A_GPU)&&defined(A_HALF)
+ // Half precision version (slower).
+ void FsrLfgaH(inout AH3 c,AH3 t,AH1 a){c+=(t*AH3_(a))*min(AH3_(1.0)-c,c);}
+//------------------------------------------------------------------------------------------------------------------------------
+ // Packed half precision version (faster).
+ void FsrLfgaHx2(inout AH2 cR,inout AH2 cG,inout AH2 cB,AH2 tR,AH2 tG,AH2 tB,AH1 a){
+ cR+=(tR*AH2_(a))*min(AH2_(1.0)-cR,cR);cG+=(tG*AH2_(a))*min(AH2_(1.0)-cG,cG);cB+=(tB*AH2_(a))*min(AH2_(1.0)-cB,cB);}
+#endif
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//_____________________________________________________________/\_______________________________________________________________
+//==============================================================================================================================
+//
+// FSR - [SRTM] SIMPLE REVERSIBLE TONE-MAPPER
+//
+//------------------------------------------------------------------------------------------------------------------------------
+// This provides a way to take linear HDR color {0 to FP16_MAX} and convert it into a temporary {0 to 1} ranged post-tonemapped linear.
+// The tonemapper preserves RGB ratio, which helps maintain HDR color bleed during filtering.
+//------------------------------------------------------------------------------------------------------------------------------
+// Reversible tonemapper usage,
+// FsrSrtm*(color); // {0 to FP16_MAX} converted to {0 to 1}.
+// FsrSrtmInv*(color); // {0 to 1} converted into {0 to 32768, output peak safe for FP16}.
+//==============================================================================================================================
+#if defined(A_GPU)
+ void FsrSrtmF(inout AF3 c){c*=AF3_(ARcpF1(AMax3F1(c.r,c.g,c.b)+AF1_(1.0)));}
+ // The extra max solves the c=1.0 case (which is a /0).
+ void FsrSrtmInvF(inout AF3 c){c*=AF3_(ARcpF1(max(AF1_(1.0/32768.0),AF1_(1.0)-AMax3F1(c.r,c.g,c.b))));}
+#endif
+//==============================================================================================================================
+#if defined(A_GPU)&&defined(A_HALF)
+ void FsrSrtmH(inout AH3 c){c*=AH3_(ARcpH1(AMax3H1(c.r,c.g,c.b)+AH1_(1.0)));}
+ void FsrSrtmInvH(inout AH3 c){c*=AH3_(ARcpH1(max(AH1_(1.0/32768.0),AH1_(1.0)-AMax3H1(c.r,c.g,c.b))));}
+//------------------------------------------------------------------------------------------------------------------------------
+ void FsrSrtmHx2(inout AH2 cR,inout AH2 cG,inout AH2 cB){
+ AH2 rcp=ARcpH2(AMax3H2(cR,cG,cB)+AH2_(1.0));cR*=rcp;cG*=rcp;cB*=rcp;}
+ void FsrSrtmInvHx2(inout AH2 cR,inout AH2 cG,inout AH2 cB){
+ AH2 rcp=ARcpH2(max(AH2_(1.0/32768.0),AH2_(1.0)-AMax3H2(cR,cG,cB)));cR*=rcp;cG*=rcp;cB*=rcp;}
+#endif
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//_____________________________________________________________/\_______________________________________________________________
+//==============================================================================================================================
+//
+// FSR - [TEPD] TEMPORAL ENERGY PRESERVING DITHER
+//
+//------------------------------------------------------------------------------------------------------------------------------
+// Temporally energy preserving dithered {0 to 1} linear to gamma 2.0 conversion.
+// Gamma 2.0 is used so that the conversion back to linear is just to square the color.
+// The conversion comes in 8-bit and 10-bit modes, designed for output to 8-bit UNORM or 10:10:10:2 respectively.
+// Given good non-biased temporal blue noise as dither input,
+// the output dither will temporally conserve energy.
+// This is done by choosing the linear nearest step point instead of perceptual nearest.
+// See code below for details.
+//------------------------------------------------------------------------------------------------------------------------------
+// DX SPEC RULES FOR FLOAT->UNORM 8-BIT CONVERSION
+// ===============================================
+// - Output is 'uint(floor(saturate(n)*255.0+0.5))'.
+// - Thus rounding is to nearest.
+// - NaN gets converted to zero.
+// - INF is clamped to {0.0 to 1.0}.
+//==============================================================================================================================
+#if defined(A_GPU)
+ // Hand tuned integer position to dither value, with more values than simple checkerboard.
+ // Only 32-bit has enough precision for this compddation.
+ // Output is {0 to <1}.
+ AF1 FsrTepdDitF(AU2 p,AU1 f){
+ AF1 x=AF1_(p.x+f);
+ AF1 y=AF1_(p.y);
+ // The 1.61803 golden ratio.
+ AF1 a=AF1_((1.0+sqrt(5.0))/2.0);
+ // Number designed to provide a good visual pattern.
+ AF1 b=AF1_(1.0/3.69);
+ x=x*a+(y*b);
+ return AFractF1(x);}
+//------------------------------------------------------------------------------------------------------------------------------
+ // This version is 8-bit gamma 2.0.
+ // The 'c' input is {0 to 1}.
+ // Output is {0 to 1} ready for image store.
+ void FsrTepdC8F(inout AF3 c,AF1 dit){
+ AF3 n=sqrt(c);
+ n=floor(n*AF3_(255.0))*AF3_(1.0/255.0);
+ AF3 a=n*n;
+ AF3 b=n+AF3_(1.0/255.0);b=b*b;
+ // Ratio of 'a' to 'b' required to produce 'c'.
+ // APrxLoRcpF1() won't work here (at least for very high dynamic ranges).
+ // APrxMedRcpF1() is an IADD,FMA,MUL.
+ AF3 r=(c-b)*APrxMedRcpF3(a-b);
+ // Use the ratio as a cutoff to choose 'a' or 'b'.
+ // AGtZeroF1() is a MUL.
+ c=ASatF3(n+AGtZeroF3(AF3_(dit)-r)*AF3_(1.0/255.0));}
+//------------------------------------------------------------------------------------------------------------------------------
+ // This version is 10-bit gamma 2.0.
+ // The 'c' input is {0 to 1}.
+ // Output is {0 to 1} ready for image store.
+ void FsrTepdC10F(inout AF3 c,AF1 dit){
+ AF3 n=sqrt(c);
+ n=floor(n*AF3_(1023.0))*AF3_(1.0/1023.0);
+ AF3 a=n*n;
+ AF3 b=n+AF3_(1.0/1023.0);b=b*b;
+ AF3 r=(c-b)*APrxMedRcpF3(a-b);
+ c=ASatF3(n+AGtZeroF3(AF3_(dit)-r)*AF3_(1.0/1023.0));}
+#endif
+//==============================================================================================================================
+#if defined(A_GPU)&&defined(A_HALF)
+ AH1 FsrTepdDitH(AU2 p,AU1 f){
+ AF1 x=AF1_(p.x+f);
+ AF1 y=AF1_(p.y);
+ AF1 a=AF1_((1.0+sqrt(5.0))/2.0);
+ AF1 b=AF1_(1.0/3.69);
+ x=x*a+(y*b);
+ return AH1(AFractF1(x));}
+//------------------------------------------------------------------------------------------------------------------------------
+ void FsrTepdC8H(inout AH3 c,AH1 dit){
+ AH3 n=sqrt(c);
+ n=floor(n*AH3_(255.0))*AH3_(1.0/255.0);
+ AH3 a=n*n;
+ AH3 b=n+AH3_(1.0/255.0);b=b*b;
+ AH3 r=(c-b)*APrxMedRcpH3(a-b);
+ c=ASatH3(n+AGtZeroH3(AH3_(dit)-r)*AH3_(1.0/255.0));}
+//------------------------------------------------------------------------------------------------------------------------------
+ void FsrTepdC10H(inout AH3 c,AH1 dit){
+ AH3 n=sqrt(c);
+ n=floor(n*AH3_(1023.0))*AH3_(1.0/1023.0);
+ AH3 a=n*n;
+ AH3 b=n+AH3_(1.0/1023.0);b=b*b;
+ AH3 r=(c-b)*APrxMedRcpH3(a-b);
+ c=ASatH3(n+AGtZeroH3(AH3_(dit)-r)*AH3_(1.0/1023.0));}
+//==============================================================================================================================
+ // This computes dither for positions 'p' and 'p+{8,0}'.
+ AH2 FsrTepdDitHx2(AU2 p,AU1 f){
+ AF2 x;
+ x.x=AF1_(p.x+f);
+ x.y=x.x+AF1_(8.0);
+ AF1 y=AF1_(p.y);
+ AF1 a=AF1_((1.0+sqrt(5.0))/2.0);
+ AF1 b=AF1_(1.0/3.69);
+ x=x*AF2_(a)+AF2_(y*b);
+ return AH2(AFractF2(x));}
+//------------------------------------------------------------------------------------------------------------------------------
+ void FsrTepdC8Hx2(inout AH2 cR,inout AH2 cG,inout AH2 cB,AH2 dit){
+ AH2 nR=sqrt(cR);
+ AH2 nG=sqrt(cG);
+ AH2 nB=sqrt(cB);
+ nR=floor(nR*AH2_(255.0))*AH2_(1.0/255.0);
+ nG=floor(nG*AH2_(255.0))*AH2_(1.0/255.0);
+ nB=floor(nB*AH2_(255.0))*AH2_(1.0/255.0);
+ AH2 aR=nR*nR;
+ AH2 aG=nG*nG;
+ AH2 aB=nB*nB;
+ AH2 bR=nR+AH2_(1.0/255.0);bR=bR*bR;
+ AH2 bG=nG+AH2_(1.0/255.0);bG=bG*bG;
+ AH2 bB=nB+AH2_(1.0/255.0);bB=bB*bB;
+ AH2 rR=(cR-bR)*APrxMedRcpH2(aR-bR);
+ AH2 rG=(cG-bG)*APrxMedRcpH2(aG-bG);
+ AH2 rB=(cB-bB)*APrxMedRcpH2(aB-bB);
+ cR=ASatH2(nR+AGtZeroH2(dit-rR)*AH2_(1.0/255.0));
+ cG=ASatH2(nG+AGtZeroH2(dit-rG)*AH2_(1.0/255.0));
+ cB=ASatH2(nB+AGtZeroH2(dit-rB)*AH2_(1.0/255.0));}
+//------------------------------------------------------------------------------------------------------------------------------
+ void FsrTepdC10Hx2(inout AH2 cR,inout AH2 cG,inout AH2 cB,AH2 dit){
+ AH2 nR=sqrt(cR);
+ AH2 nG=sqrt(cG);
+ AH2 nB=sqrt(cB);
+ nR=floor(nR*AH2_(1023.0))*AH2_(1.0/1023.0);
+ nG=floor(nG*AH2_(1023.0))*AH2_(1.0/1023.0);
+ nB=floor(nB*AH2_(1023.0))*AH2_(1.0/1023.0);
+ AH2 aR=nR*nR;
+ AH2 aG=nG*nG;
+ AH2 aB=nB*nB;
+ AH2 bR=nR+AH2_(1.0/1023.0);bR=bR*bR;
+ AH2 bG=nG+AH2_(1.0/1023.0);bG=bG*bG;
+ AH2 bB=nB+AH2_(1.0/1023.0);bB=bB*bB;
+ AH2 rR=(cR-bR)*APrxMedRcpH2(aR-bR);
+ AH2 rG=(cG-bG)*APrxMedRcpH2(aG-bG);
+ AH2 rB=(cB-bB)*APrxMedRcpH2(aB-bB);
+ cR=ASatH2(nR+AGtZeroH2(dit-rR)*AH2_(1.0/1023.0));
+ cG=ASatH2(nG+AGtZeroH2(dit-rG)*AH2_(1.0/1023.0));
+ cB=ASatH2(nB+AGtZeroH2(dit-rB)*AH2_(1.0/1023.0));}
+#endif
diff --git a/thirdparty/amd-fsr/license.txt b/thirdparty/amd-fsr/license.txt
new file mode 100644
index 0000000000..324cba594d
--- /dev/null
+++ b/thirdparty/amd-fsr/license.txt
@@ -0,0 +1,19 @@
+Copyright (c) 2021 Advanced Micro Devices, Inc. All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/thirdparty/basis_universal/encoder/apg_bmp.c b/thirdparty/basis_universal/encoder/apg_bmp.c
index ef3d015e40..d342b20fc8 100644
--- a/thirdparty/basis_universal/encoder/apg_bmp.c
+++ b/thirdparty/basis_universal/encoder/apg_bmp.c
@@ -247,7 +247,7 @@ unsigned char* apg_bmp_read( const char* filename, int* w, int* h, unsigned int*
}
// allocate memory for the output pixels block. cast to size_t in case width and height are both the max of 65536 and n_dst_chans > 1
- unsigned char* dst_img_ptr = malloc( (size_t)width * (size_t)height * (size_t)n_dst_chans );
+ unsigned char* dst_img_ptr = (unsigned char*)malloc( (size_t)width * (size_t)height * (size_t)n_dst_chans );
if ( !dst_img_ptr ) {
free( record.data );
return NULL;
@@ -480,7 +480,7 @@ unsigned int apg_bmp_write( const char* filename, unsigned char* pixels_ptr, int
dib_hdr.bitmask_b = 0x0000FF00;
}
- uint8_t* dst_pixels_ptr = malloc( dst_pixels_padded_sz );
+ uint8_t* dst_pixels_ptr = (uint8_t*)malloc( dst_pixels_padded_sz );
if ( !dst_pixels_ptr ) { return 0; }
{
size_t dst_byte_idx = 0;
diff --git a/thirdparty/basis_universal/encoder/basisu_bc7enc.cpp b/thirdparty/basis_universal/encoder/basisu_bc7enc.cpp
index 06aa7eb8b1..22fdfa603f 100644
--- a/thirdparty/basis_universal/encoder/basisu_bc7enc.cpp
+++ b/thirdparty/basis_universal/encoder/basisu_bc7enc.cpp
@@ -174,9 +174,8 @@ static void astc_init()
} // range
}
-static inline uint32_t astc_interpolate(uint32_t l, uint32_t h, uint32_t w)
+static inline uint32_t astc_interpolate_linear(uint32_t l, uint32_t h, uint32_t w)
{
- // This is for linear values, not sRGB.
l = (l << 8) | l;
h = (h << 8) | h;
uint32_t k = (l * (64 - w) + h * w + 32) >> 6;
@@ -230,7 +229,7 @@ void bc7enc_compress_block_init()
{
uint32_t high = (h << 4) | h;
- const int k = astc_interpolate(low, high, g_bc7_weights3[BC7ENC_ASTC_4BIT_3BIT_OPTIMAL_INDEX]);
+ const int k = astc_interpolate_linear(low, high, g_bc7_weights3[BC7ENC_ASTC_4BIT_3BIT_OPTIMAL_INDEX]);
const int err = (k - c) * (k - c);
if (err < best.m_error)
@@ -259,7 +258,7 @@ void bc7enc_compress_block_init()
{
uint32_t high = (h << 4) | h;
- const int k = astc_interpolate(low, high, g_bc7_weights2[BC7ENC_ASTC_4BIT_2BIT_OPTIMAL_INDEX]);
+ const int k = astc_interpolate_linear(low, high, g_bc7_weights2[BC7ENC_ASTC_4BIT_2BIT_OPTIMAL_INDEX]);
const int err = (k - c) * (k - c);
if (err < best.m_error)
@@ -288,7 +287,7 @@ void bc7enc_compress_block_init()
{
uint32_t high = g_astc_sorted_order_unquant[7][h].m_unquant;
- const int k = astc_interpolate(low, high, g_bc7_weights2[BC7ENC_ASTC_RANGE7_2BIT_OPTIMAL_INDEX]);
+ const int k = astc_interpolate_linear(low, high, g_bc7_weights2[BC7ENC_ASTC_RANGE7_2BIT_OPTIMAL_INDEX]);
const int err = (k - c) * (k - c);
if (err < best.m_error)
@@ -317,7 +316,7 @@ void bc7enc_compress_block_init()
{
uint32_t high = g_astc_sorted_order_unquant[13][h].m_unquant;
- const int k = astc_interpolate(low, high, g_astc_weights4[BC7ENC_ASTC_RANGE13_4BIT_OPTIMAL_INDEX]);
+ const int k = astc_interpolate_linear(low, high, g_astc_weights4[BC7ENC_ASTC_RANGE13_4BIT_OPTIMAL_INDEX]);
const int err = (k - c) * (k - c);
if (err < best.m_error)
@@ -346,7 +345,7 @@ void bc7enc_compress_block_init()
{
uint32_t high = g_astc_sorted_order_unquant[13][h].m_unquant;
- const int k = astc_interpolate(low, high, g_bc7_weights2[BC7ENC_ASTC_RANGE13_2BIT_OPTIMAL_INDEX]);
+ const int k = astc_interpolate_linear(low, high, g_bc7_weights2[BC7ENC_ASTC_RANGE13_2BIT_OPTIMAL_INDEX]);
const int err = (k - c) * (k - c);
if (err < best.m_error)
@@ -375,7 +374,7 @@ void bc7enc_compress_block_init()
{
uint32_t high = g_astc_sorted_order_unquant[11][h].m_unquant;
- const int k = astc_interpolate(low, high, g_astc_weights5[BC7ENC_ASTC_RANGE11_5BIT_OPTIMAL_INDEX]);
+ const int k = astc_interpolate_linear(low, high, g_astc_weights5[BC7ENC_ASTC_RANGE11_5BIT_OPTIMAL_INDEX]);
const int err = (k - c) * (k - c);
if (err < best.m_error)
@@ -650,7 +649,7 @@ static uint64_t pack_astc_4bit_3bit_to_one_color(const color_cell_compressor_par
uint32_t low = (pResults->m_low_endpoint.m_c[i] << 4) | pResults->m_low_endpoint.m_c[i];
uint32_t high = (pResults->m_high_endpoint.m_c[i] << 4) | pResults->m_high_endpoint.m_c[i];
- p.m_c[i] = (uint8_t)astc_interpolate(low, high, g_bc7_weights3[BC7ENC_ASTC_4BIT_3BIT_OPTIMAL_INDEX]);
+ p.m_c[i] = (uint8_t)astc_interpolate_linear(low, high, g_bc7_weights3[BC7ENC_ASTC_4BIT_3BIT_OPTIMAL_INDEX]);
}
p.m_c[3] = 255;
@@ -689,7 +688,7 @@ static uint64_t pack_astc_4bit_2bit_to_one_color_rgba(const color_cell_compresso
uint32_t low = (pResults->m_low_endpoint.m_c[i] << 4) | pResults->m_low_endpoint.m_c[i];
uint32_t high = (pResults->m_high_endpoint.m_c[i] << 4) | pResults->m_high_endpoint.m_c[i];
- p.m_c[i] = (uint8_t)astc_interpolate(low, high, g_bc7_weights2[BC7ENC_ASTC_4BIT_2BIT_OPTIMAL_INDEX]);
+ p.m_c[i] = (uint8_t)astc_interpolate_linear(low, high, g_bc7_weights2[BC7ENC_ASTC_4BIT_2BIT_OPTIMAL_INDEX]);
}
uint64_t total_err = 0;
@@ -728,7 +727,7 @@ static uint64_t pack_astc_range7_2bit_to_one_color(const color_cell_compressor_p
uint32_t low = g_astc_sorted_order_unquant[7][pResults->m_low_endpoint.m_c[i]].m_unquant;
uint32_t high = g_astc_sorted_order_unquant[7][pResults->m_high_endpoint.m_c[i]].m_unquant;
- p.m_c[i] = (uint8_t)astc_interpolate(low, high, g_bc7_weights2[BC7ENC_ASTC_RANGE7_2BIT_OPTIMAL_INDEX]);
+ p.m_c[i] = (uint8_t)astc_interpolate_linear(low, high, g_bc7_weights2[BC7ENC_ASTC_RANGE7_2BIT_OPTIMAL_INDEX]);
}
p.m_c[3] = 255;
@@ -768,7 +767,7 @@ static uint64_t pack_astc_range13_2bit_to_one_color(const color_cell_compressor_
uint32_t low = g_astc_sorted_order_unquant[13][pResults->m_low_endpoint.m_c[i]].m_unquant;
uint32_t high = g_astc_sorted_order_unquant[13][pResults->m_high_endpoint.m_c[i]].m_unquant;
- p.m_c[i] = (uint8_t)astc_interpolate(low, high, g_bc7_weights2[BC7ENC_ASTC_RANGE13_2BIT_OPTIMAL_INDEX]);
+ p.m_c[i] = (uint8_t)astc_interpolate_linear(low, high, g_bc7_weights2[BC7ENC_ASTC_RANGE13_2BIT_OPTIMAL_INDEX]);
}
uint64_t total_err = 0;
@@ -807,7 +806,7 @@ static uint64_t pack_astc_range11_5bit_to_one_color(const color_cell_compressor_
uint32_t low = g_astc_sorted_order_unquant[11][pResults->m_low_endpoint.m_c[i]].m_unquant;
uint32_t high = g_astc_sorted_order_unquant[11][pResults->m_high_endpoint.m_c[i]].m_unquant;
- p.m_c[i] = (uint8_t)astc_interpolate(low, high, g_astc_weights5[BC7ENC_ASTC_RANGE11_5BIT_OPTIMAL_INDEX]);
+ p.m_c[i] = (uint8_t)astc_interpolate_linear(low, high, g_astc_weights5[BC7ENC_ASTC_RANGE11_5BIT_OPTIMAL_INDEX]);
}
uint64_t total_err = 0;
@@ -863,7 +862,7 @@ static uint64_t evaluate_solution(const color_quad_u8 *pLow, const color_quad_u8
for (uint32_t i = 1; i < (N - 1); i++)
{
for (uint32_t j = 0; j < nc; j++)
- weightedColors[i].m_c[j] = (uint8_t)(astc_interpolate(actualMinColor.m_c[j], actualMaxColor.m_c[j], pParams->m_pSelector_weights[i]));
+ weightedColors[i].m_c[j] = (uint8_t)(astc_interpolate_linear(actualMinColor.m_c[j], actualMaxColor.m_c[j], pParams->m_pSelector_weights[i]));
}
}
else
@@ -1300,7 +1299,7 @@ void check_best_overall_error(const color_cell_compressor_params *pParams, color
for (uint32_t i = 1; i < pParams->m_num_selector_weights - 1; i++)
for (uint32_t c = 0; c < 4; c++)
- colors[i].m_c[c] = (uint8_t)astc_interpolate(colors[0].m_c[c], colors[n - 1].m_c[c], pParams->m_pSelector_weights[i]);
+ colors[i].m_c[c] = (uint8_t)astc_interpolate_linear(colors[0].m_c[c], colors[n - 1].m_c[c], pParams->m_pSelector_weights[i]);
uint64_t total_err = 0;
for (uint32_t p = 0; p < pParams->m_num_pixels; p++)
@@ -1815,10 +1814,10 @@ uint64_t color_cell_compression_est_astc(
weightedColors[num_weights - 1] = highColor;
for (uint32_t i = 1; i < (num_weights - 1); i++)
{
- weightedColors[i].m_c[0] = (uint8_t)astc_interpolate(lowColor.m_c[0], highColor.m_c[0], pWeight_table[i]);
- weightedColors[i].m_c[1] = (uint8_t)astc_interpolate(lowColor.m_c[1], highColor.m_c[1], pWeight_table[i]);
- weightedColors[i].m_c[2] = (uint8_t)astc_interpolate(lowColor.m_c[2], highColor.m_c[2], pWeight_table[i]);
- weightedColors[i].m_c[3] = (num_comps == 4) ? (uint8_t)astc_interpolate(lowColor.m_c[3], highColor.m_c[3], pWeight_table[i]) : 255;
+ weightedColors[i].m_c[0] = (uint8_t)astc_interpolate_linear(lowColor.m_c[0], highColor.m_c[0], pWeight_table[i]);
+ weightedColors[i].m_c[1] = (uint8_t)astc_interpolate_linear(lowColor.m_c[1], highColor.m_c[1], pWeight_table[i]);
+ weightedColors[i].m_c[2] = (uint8_t)astc_interpolate_linear(lowColor.m_c[2], highColor.m_c[2], pWeight_table[i]);
+ weightedColors[i].m_c[3] = (num_comps == 4) ? (uint8_t)astc_interpolate_linear(lowColor.m_c[3], highColor.m_c[3], pWeight_table[i]) : 255;
}
// Compute dots and thresholds
diff --git a/thirdparty/basis_universal/encoder/basisu_bc7enc.h b/thirdparty/basis_universal/encoder/basisu_bc7enc.h
index 23469912e2..8d8b7888ca 100644
--- a/thirdparty/basis_universal/encoder/basisu_bc7enc.h
+++ b/thirdparty/basis_universal/encoder/basisu_bc7enc.h
@@ -12,6 +12,7 @@
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
+#pragma once
#include "basisu_enc.h"
#include "../transcoder/basisu_transcoder_uastc.h"
diff --git a/thirdparty/basis_universal/encoder/basisu_comp.cpp b/thirdparty/basis_universal/encoder/basisu_comp.cpp
index dc4ae11539..10f96cec4a 100644
--- a/thirdparty/basis_universal/encoder/basisu_comp.cpp
+++ b/thirdparty/basis_universal/encoder/basisu_comp.cpp
@@ -467,7 +467,10 @@ namespace basisu
return false;
}
- printf("Read source image \"%s\", %ux%u\n", pSource_filename, file_image.get_width(), file_image.get_height());
+ if (m_params.m_status_output)
+ {
+ printf("Read source image \"%s\", %ux%u\n", pSource_filename, file_image.get_width(), file_image.get_height());
+ }
// Optionally load another image and put a grayscale version of it into the alpha channel.
if ((source_file_index < m_params.m_source_alpha_filenames.size()) && (m_params.m_source_alpha_filenames[source_file_index].size()))
@@ -1427,7 +1430,10 @@ namespace basisu
return false;
}
- printf("Wrote output .basis/.ktx2 file \"%s\"\n", output_filename.c_str());
+ if (m_params.m_status_output)
+ {
+ printf("Wrote output .basis/.ktx2 file \"%s\"\n", output_filename.c_str());
+ }
}
size_t comp_size = 0;
diff --git a/thirdparty/basis_universal/encoder/basisu_enc.cpp b/thirdparty/basis_universal/encoder/basisu_enc.cpp
index f02fb62c11..daaf65badc 100644
--- a/thirdparty/basis_universal/encoder/basisu_enc.cpp
+++ b/thirdparty/basis_universal/encoder/basisu_enc.cpp
@@ -195,7 +195,7 @@ namespace basisu
{
QueryPerformanceFrequency(reinterpret_cast<LARGE_INTEGER*>(pTicks));
}
-#elif defined(__APPLE__)
+#elif defined(__APPLE__) || defined(__OpenBSD__)
#include <sys/time.h>
inline void query_counter(timer_ticks* pTicks)
{
@@ -1779,8 +1779,6 @@ namespace basisu
return nullptr;
}
- const uint32_t bytes_per_line = hdr.m_width * tga_bytes_per_pixel;
-
const uint8_t *pSrc = pBuf + sizeof(tga_header);
uint32_t bytes_remaining = buf_size - sizeof(tga_header);
diff --git a/thirdparty/basis_universal/encoder/basisu_enc.h b/thirdparty/basis_universal/encoder/basisu_enc.h
index 05c95cbc3b..0ce011452d 100644
--- a/thirdparty/basis_universal/encoder/basisu_enc.h
+++ b/thirdparty/basis_universal/encoder/basisu_enc.h
@@ -1634,6 +1634,14 @@ namespace basisu
if ((!l_weight) || (!r_weight))
{
+ l_children.resize(0);
+ new_l_child.set(0.0f);
+ l_ttsum = 0.0f;
+ l_weight = 0;
+ r_children.resize(0);
+ new_r_child.set(0.0f);
+ r_ttsum = 0.0f;
+ r_weight = 0;
TrainingVectorType firstVec;
for (uint32_t i = 0; i < node.m_training_vecs.size(); i++)
{
@@ -1660,7 +1668,7 @@ namespace basisu
}
}
- if (!l_weight)
+ if ((!l_weight) || (!r_weight))
return false;
}
diff --git a/thirdparty/basis_universal/encoder/basisu_resampler.cpp b/thirdparty/basis_universal/encoder/basisu_resampler.cpp
index e193ce83ff..f4cedf0031 100644
--- a/thirdparty/basis_universal/encoder/basisu_resampler.cpp
+++ b/thirdparty/basis_universal/encoder/basisu_resampler.cpp
@@ -15,14 +15,6 @@
#include "basisu_resampler.h"
#include "basisu_resampler_filters.h"
-#ifndef max
-#define max(a, b) (((a) > (b)) ? (a) : (b))
-#endif
-
-#ifndef min
-#define min(a, b) (((a) < (b)) ? (a) : (b))
-#endif
-
#define RESAMPLER_DEBUG 0
namespace basisu
diff --git a/thirdparty/basis_universal/encoder/cppspmd_sse.h b/thirdparty/basis_universal/encoder/cppspmd_sse.h
index b39cb82a5f..9a97eeb695 100644
--- a/thirdparty/basis_universal/encoder/cppspmd_sse.h
+++ b/thirdparty/basis_universal/encoder/cppspmd_sse.h
@@ -1327,33 +1327,15 @@ struct spmd_kernel
CPPSPMD_FORCE_INLINE float reduce_add(vfloat v)
{
__m128 k3210 = _mm_castsi128_ps(blendv_mask_epi32(_mm_setzero_si128(), _mm_castps_si128(v.m_value), m_exec.m_mask));
-
-//#if CPPSPMD_SSE2
-#if 1
- // See https://stackoverflow.com/questions/6996764/fastest-way-to-do-horizontal-sse-vector-sum-or-other-reduction/35270026#35270026
- __m128 shuf = _mm_shuffle_ps(k3210, k3210, _MM_SHUFFLE(2, 3, 0, 1));
- __m128 sums = _mm_add_ps(k3210, shuf);
- shuf = _mm_movehl_ps(shuf, sums);
- sums = _mm_add_ss(sums, shuf);
- return _mm_cvtss_f32(sums);
-#else
- // This is pretty slow.
- __m128 a = _mm_hadd_ps(k3210, k3210);
- __m128 b = _mm_hadd_ps(a, a);
- return extractf_ps_x(b);
-#endif
+ __m128 temp = _mm_add_ps(_mm_shuffle_ps(k3210, k3210, _MM_SHUFFLE(0, 1, 2, 3)), k3210);
+ return _mm_cvtss_f32(_mm_add_ss(_mm_movehl_ps(temp, temp), temp));
}
-
+
CPPSPMD_FORCE_INLINE int reduce_add(vint v)
{
__m128i k3210 = blendv_mask_epi32(_mm_setzero_si128(), v.m_value, m_exec.m_mask);
-
- // See https://stackoverflow.com/questions/6996764/fastest-way-to-do-horizontal-sse-vector-sum-or-other-reduction/35270026#35270026
- __m128i shuf = _mm_shuffle_epi32(k3210, _MM_SHUFFLE(2, 3, 0, 1));
- __m128i sums = _mm_add_epi32(k3210, shuf);
- shuf = _mm_castps_si128(_mm_movehl_ps(_mm_castsi128_ps(shuf), _mm_castsi128_ps(sums)));
- sums = _mm_add_epi32(sums, shuf);
- return extract_x(sums);
+ __m128i temp = _mm_add_epi32(_mm_shuffle_epi32(k3210, _MM_SHUFFLE(0, 1, 2, 3)), k3210);
+ return extract_x(_mm_add_epi32(_mm_castps_si128(_mm_movehl_ps(_mm_castsi128_ps(temp), _mm_castsi128_ps(temp))), temp));
}
#include "cppspmd_math_declares.h"
@@ -1686,6 +1668,12 @@ CPPSPMD_FORCE_INLINE vint uniform_shift_right_epi16(const vint& a, const vint& b
CPPSPMD_FORCE_INLINE vint undefined_vint() { return vint{ _mm_undefined_si128() }; }
CPPSPMD_FORCE_INLINE vfloat undefined_vfloat() { return vfloat{ _mm_undefined_ps() }; }
+CPPSPMD_FORCE_INLINE vint vint_lane_set(int v0, int v1, int v2, int v3) { return vint{ _mm_set_epi32(v3, v2, v1, v0) }; }
+CPPSPMD_FORCE_INLINE vfloat vfloat_lane_set(float v0, float v1, float v2, float v3) { return vfloat{ _mm_set_ps(v3, v2, v1, v0) }; }
+
+CPPSPMD_FORCE_INLINE vint vint_lane_set_r(int v3, int v2, int v1, int v0) { return vint{ _mm_set_epi32(v3, v2, v1, v0) }; }
+CPPSPMD_FORCE_INLINE vfloat vfloat_lane_set_r(float v3, float v2, float v1, float v0) { return vfloat{ _mm_set_ps(v3, v2, v1, v0) }; }
+
// control is an 8-bit immediate value containing 4 2-bit indices which shuffles the int32's in each 128-bit lane.
#define VINT_LANE_SHUFFLE_EPI32(a, control) vint(_mm_shuffle_epi32((a).m_value, control))
diff --git a/thirdparty/basis_universal/transcoder/basisu_transcoder.cpp b/thirdparty/basis_universal/transcoder/basisu_transcoder.cpp
index 29eb3c0d55..0b3733385d 100644
--- a/thirdparty/basis_universal/transcoder/basisu_transcoder.cpp
+++ b/thirdparty/basis_universal/transcoder/basisu_transcoder.cpp
@@ -10778,8 +10778,6 @@ namespace basist
return false;
}
- const bool transcode_alpha_data_to_opaque_formats = (decode_flags & cDecodeFlagsTranscodeAlphaDataToOpaqueFormats) != 0;
-
if (decode_flags & cDecodeFlagsPVRTCDecodeToNextPow2)
{
BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: cDecodeFlagsPVRTCDecodeToNextPow2 currently unsupported\n");
@@ -17336,7 +17334,6 @@ namespace basist
bool ktx2_transcoder::decompress_level_data(uint32_t level_index, basisu::uint8_vec& uncomp_data)
{
- const uint8_t* pComp_data = m_levels[level_index].m_byte_offset + m_pData;
const uint64_t comp_size = m_levels[level_index].m_byte_length;
const uint64_t uncomp_size = m_levels[level_index].m_uncompressed_byte_length;
@@ -17361,6 +17358,7 @@ namespace basist
if (m_header.m_supercompression_scheme == KTX2_SS_ZSTANDARD)
{
#if BASISD_SUPPORT_KTX2_ZSTD
+ const uint8_t* pComp_data = m_levels[level_index].m_byte_offset + m_pData;
size_t actualUncompSize = ZSTD_decompress(uncomp_data.data(), (size_t)uncomp_size, pComp_data, (size_t)comp_size);
if (ZSTD_isError(actualUncompSize))
{
diff --git a/thirdparty/certs/ca-certificates.crt b/thirdparty/certs/ca-certificates.crt
index 7d5ea3bef1..7f89e81d01 100644
--- a/thirdparty/certs/ca-certificates.crt
+++ b/thirdparty/certs/ca-certificates.crt
@@ -1,7 +1,7 @@
##
## Bundle of CA Root Certificates
##
-## Certificate data from Mozilla as of: Mon Jul 5 21:36:52 2021 GMT
+## Certificate data from Mozilla as of: Mon Nov 1 15:39:58 2021 GMT
##
## This is a bundle of X.509 certificates of public Certificate Authorities
## (CA). These were automatically extracted from Mozilla's root certificates
@@ -14,7 +14,7 @@
## Just configure this file as the SSLCACertificateFile.
##
## Conversion done with mk-ca-bundle.pl version 1.28.
-## SHA256: c8f6733d1ff4e6a4769c182971a1234f95ae079247a9c439a13423fe8ba5c24f
+## SHA256: bb36818a81feaa4cca61101e6d6276cd09e972efcb08112dfed846918ca41d7f
##
@@ -381,26 +381,6 @@ mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K
-----END CERTIFICATE-----
-DST Root CA X3
-==============
------BEGIN CERTIFICATE-----
-MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/MSQwIgYDVQQK
-ExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4X
-DTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1
-cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQAD
-ggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmT
-rE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEqOLl5CjH9
-UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9bxiqKqy69cK3FCxolkHRy
-xXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40d
-utolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0T
-AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQ
-MA0GCSqGSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikug
-dB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHRAosZy5Q6XkjE
-GB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZzR8srzJmwN0jP41ZL9c8PDHIyh8bw
-RLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubS
-fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
------END CERTIFICATE-----
-
SwissSign Gold CA - G2
======================
-----BEGIN CERTIFICATE-----
@@ -2713,7 +2693,8 @@ CBeQyh+KTOgNG3qxrdWBCUfvO6wIBHxcmbHtRwfSAjEAnbpV/KlK6O3t5nYBQnvI+GDZjVGLVTv7
jHvrZQnD+JbNR6iC8hZVdyR+EhCVBCyj
-----END CERTIFICATE-----
-# emSign Root CA - C1
+emSign Root CA - C1
+===================
-----BEGIN CERTIFICATE-----
MIIDczCCAlugAwIBAgILAK7PALrEzzL4Q7IwDQYJKoZIhvcNAQELBQAwVjELMAkGA1UEBhMCVVMx
EzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMRwwGgYDVQQDExNlbVNp
@@ -2733,7 +2714,8 @@ wC68AivTxEDkigcxHpvOJpkT+xHqmiIMERnHXhuBUDDIlhJu58tBf5E7oke3VIAb3ADMmpDqw8NQ
BmIMMMAVSKeoWXzhriKi4gp6D/piq1JM4fHfyr6DDUI=
-----END CERTIFICATE-----
-# emSign ECC Root CA - C3
+emSign ECC Root CA - C3
+=======================
-----BEGIN CERTIFICATE-----
MIICKzCCAbGgAwIBAgIKe3G2gla4EnycqDAKBggqhkjOPQQDAzBaMQswCQYDVQQGEwJVUzETMBEG
A1UECxMKZW1TaWduIFBLSTEUMBIGA1UEChMLZU11ZGhyYSBJbmMxIDAeBgNVBAMTF2VtU2lnbiBF
@@ -2747,7 +2729,8 @@ MGUCMQC02C8Cif22TGK6Q04ThHK1rt0c3ta13FaPWEBaLd4gTCKDypOofu4SQMfWh0/434UCMBwU
ZOR8loMRnLDRWmFLpg9J0wD8ofzkpf9/rdcw0Md3f76BB1UwUCAU9Vc4CqgxUQ==
-----END CERTIFICATE-----
-# Hongkong Post Root CA 3
+Hongkong Post Root CA 3
+=======================
-----BEGIN CERTIFICATE-----
MIIFzzCCA7egAwIBAgIUCBZfikyl7ADJk0DfxMauI7gcWqQwDQYJKoZIhvcNAQELBQAwbzELMAkG
A1UEBhMCSEsxEjAQBgNVBAgTCUhvbmcgS29uZzESMBAGA1UEBxMJSG9uZyBLb25nMRYwFAYDVQQK
@@ -2778,7 +2761,8 @@ hcErulWuBurQB7Lcq9CClnXO0lD+mefPL5/ndtFhKvshuzHQqp9HpLIiyhY6UFfEW0NnxWViA0kB
dBb9HxEGmpv0
-----END CERTIFICATE-----
-# Entrust Root Certification Authority - G4
+Entrust Root Certification Authority - G4
+=========================================
-----BEGIN CERTIFICATE-----
MIIGSzCCBDOgAwIBAgIRANm1Q3+vqTkPAAAAAFVlrVgwDQYJKoZIhvcNAQELBQAwgb4xCzAJBgNV
BAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3Qu
@@ -2811,7 +2795,8 @@ JOgc47OlIQ6SwJAfzyBfyjs4x7dtOvPmRLgOMWuIjnDrnBdSqEGULoe256YSxXXfW8AKbnuk5F6G
kcpG2om3PVODLAgfi49T3f+sHw==
-----END CERTIFICATE-----
-# Microsoft ECC Root Certificate Authority 2017
+Microsoft ECC Root Certificate Authority 2017
+=============================================
-----BEGIN CERTIFICATE-----
MIICWTCCAd+gAwIBAgIQZvI9r4fei7FK6gxXMQHC7DAKBggqhkjOPQQDAzBlMQswCQYDVQQGEwJV
UzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYDVQQDEy1NaWNyb3NvZnQgRUND
@@ -2826,7 +2811,8 @@ Xu5gKcs68tvWMoQZP3zVL8KxzJOuULsJMsbG7X7JNpQS5GiFBqIb0C8CMQCZ6Ra0DvpWSNSkMBaR
eNtUjGUBiudQZsIxtzm6uBoiB078a1QWIP8rtedMDE2mT3M=
-----END CERTIFICATE-----
-# Microsoft RSA Root Certificate Authority 2017
+Microsoft RSA Root Certificate Authority 2017
+=============================================
-----BEGIN CERTIFICATE-----
MIIFqDCCA5CgAwIBAgIQHtOXCV/YtLNHcB6qvn9FszANBgkqhkiG9w0BAQwFADBlMQswCQYDVQQG
EwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYDVQQDEy1NaWNyb3NvZnQg
@@ -2856,7 +2842,8 @@ c0QWbej09+CVgI+WXTik9KveCjCHk9hNAHFiRSdLOkKEW39lt2c0Ui2cFmuqqNh7o0JMcccMyj6D
5KbvtwEwXlGjefVwaaZBRA+GsCyRxj3qrg+E
-----END CERTIFICATE-----
-# e-Szigno Root CA 2017
+e-Szigno Root CA 2017
+=====================
-----BEGIN CERTIFICATE-----
MIICQDCCAeWgAwIBAgIMAVRI7yH9l1kN9QQKMAoGCCqGSM49BAMCMHExCzAJBgNVBAYTAkhVMREw
DwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UECgwNTWljcm9zZWMgTHRkLjEXMBUGA1UEYQwOVkFUSFUt
@@ -2871,7 +2858,8 @@ tVfd14pVCzbhhkT61NlojbjcI4qKDdQvfepz7L9NbKgCIQDLpbQS+ue16M9+k/zzNY9vTlp8tLxO
svxyqltZ+efcMQ==
-----END CERTIFICATE-----
-# certSIGN Root CA G2
+certSIGN Root CA G2
+===================
-----BEGIN CERTIFICATE-----
MIIFRzCCAy+gAwIBAgIJEQA0tk7GNi02MA0GCSqGSIb3DQEBCwUAMEExCzAJBgNVBAYTAlJPMRQw
EgYDVQQKEwtDRVJUU0lHTiBTQTEcMBoGA1UECxMTY2VydFNJR04gUk9PVCBDQSBHMjAeFw0xNzAy
@@ -2899,7 +2887,8 @@ NMn5X7azKFGnpyuqSfqNZSlO42sTp5SjLVFteAxEy9/eCG/Oo2Sr05WE1LlSVHJ7liXMvGnjSG4N
0MedJ5qq+BOS3R7fY581qRY27Iy4g/Q9iY/NtBde17MXQRBdJ3NghVdJIgc=
-----END CERTIFICATE-----
-# Trustwave Global Certification Authority
+Trustwave Global Certification Authority
+========================================
-----BEGIN CERTIFICATE-----
MIIF2jCCA8KgAwIBAgIMBfcOhtpJ80Y1LrqyMA0GCSqGSIb3DQEBCwUAMIGIMQswCQYDVQQGEwJV
UzERMA8GA1UECAwISWxsaW5vaXMxEDAOBgNVBAcMB0NoaWNhZ28xITAfBgNVBAoMGFRydXN0d2F2
@@ -2930,7 +2919,8 @@ Yj6RS8fZMXZC+fc8Y+wmjHMMfRod6qh8h6jCJ3zhM0EPz8/8AKAigJ5Kp28AsEFFtyLKaEjFQqKu
29FpHOTKyeC2nOnOcXHebD8WpHk=
-----END CERTIFICATE-----
-# Trustwave Global ECC P256 Certification Authority
+Trustwave Global ECC P256 Certification Authority
+=================================================
-----BEGIN CERTIFICATE-----
MIICYDCCAgegAwIBAgIMDWpfCD8oXD5Rld9dMAoGCCqGSM49BAMCMIGRMQswCQYDVQQGEwJVUzER
MA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0d2F2ZSBI
@@ -2945,7 +2935,8 @@ P62jQzBBMA8GA1UdEwEB/wQFMAMBAf8wDwYDVR0PAQH/BAUDAwcGADAdBgNVHQ4EFgQUo0EGrJBt
RM4q3wghDDcCIC0mA6AFvWvR9lz4ZcyGbbOcNEhjhAnFjXca4syc4XR7
-----END CERTIFICATE-----
-# Trustwave Global ECC P384 Certification Authority
+Trustwave Global ECC P384 Certification Authority
+=================================================
-----BEGIN CERTIFICATE-----
MIICnTCCAiSgAwIBAgIMCL2Fl2yZJ6SAaEc7MAoGCCqGSM49BAMDMIGRMQswCQYDVQQGEwJVUzER
MA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0d2F2ZSBI
@@ -2961,7 +2952,8 @@ ADBkAjA3AZKXRRJ+oPM+rRk6ct30UJMDEr5E0k9BpIycnR+j9sKS50gU/k6bpZFXrsY3crsCMGcl
CrEMXu6pY5Jv5ZAL/mYiykf9ijH3g/56vxC+GCsej/YpHpRZ744hN8tRmKVuSw==
-----END CERTIFICATE-----
-# NAVER Global Root Certification Authority
+NAVER Global Root Certification Authority
+=========================================
-----BEGIN CERTIFICATE-----
MIIFojCCA4qgAwIBAgIUAZQwHqIL3fXFMyqxQ0Rx+NZQTQ0wDQYJKoZIhvcNAQEMBQAwaTELMAkG
A1UEBhMCS1IxJjAkBgNVBAoMHU5BVkVSIEJVU0lORVNTIFBMQVRGT1JNIENvcnAuMTIwMAYDVQQD
@@ -2991,7 +2983,8 @@ I/hGoiLtk/bdmuYqh7GYVPEi92tF4+KOdh2ajcQGjTa3FPOdVGm3jjzVpG2Tgbet9r1ke8LJaDmg
kpzNNIaRkPpkUZ3+/uul9XXeifdy
-----END CERTIFICATE-----
-# AC RAIZ FNMT-RCM SERVIDORES SEGUROS
+AC RAIZ FNMT-RCM SERVIDORES SEGUROS
+===================================
-----BEGIN CERTIFICATE-----
MIICbjCCAfOgAwIBAgIQYvYybOXE42hcG2LdnC6dlTAKBggqhkjOPQQDAzB4MQswCQYDVQQGEwJF
UzERMA8GA1UECgwIRk5NVC1SQ00xDjAMBgNVBAsMBUNlcmVzMRgwFgYDVQRhDA9WQVRFUy1RMjgy
@@ -3006,7 +2999,8 @@ SM49BAMDA2kAMGYCMQCuSuMrQMN0EfKVrRYj3k4MGuZdpSRea0R7/DjiT8ucRRcRTBQnJlU5dUoD
zBOQn5ICMQD6SmxgiHPz7riYYqnOK8LZiqZwMR2vsJRM60/G49HzYqc8/5MuB1xJAWdpEgJyv+c=
-----END CERTIFICATE-----
-# GlobalSign Root R46
+GlobalSign Root R46
+===================
-----BEGIN CERTIFICATE-----
MIIFWjCCA0KgAwIBAgISEdK7udcjGJ5AXwqdLdDfJWfRMA0GCSqGSIb3DQEBDAUAMEYxCzAJBgNV
BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRwwGgYDVQQDExNHbG9iYWxTaWduIFJv
@@ -3035,7 +3029,8 @@ DEJ4Y9HiD2971KE9dJeFt0g5QdYg/NA6s/rob8SKunE3vouXsXgxT7PntgMTzlSdriVZzH81Xwj3
QEUxeCp6
-----END CERTIFICATE-----
-# GlobalSign Root E46
+GlobalSign Root E46
+===================
-----BEGIN CERTIFICATE-----
MIICCzCCAZGgAwIBAgISEdK7ujNu1LzmJGjFDYQdmOhDMAoGCCqGSM49BAMDMEYxCzAJBgNVBAYT
AkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRwwGgYDVQQDExNHbG9iYWxTaWduIFJvb3Qg
@@ -3049,7 +3044,8 @@ vLtoURMMA/cVi4RguYv/Uo7njLwcAjA8+RHUjE7AwWHCFUyqqx0LMV87HOIAl0Qx5v5zli/altP+
CAezNIm8BZ/3Hobui3A=
-----END CERTIFICATE-----
-# GLOBALTRUST 2020
+GLOBALTRUST 2020
+================
-----BEGIN CERTIFICATE-----
MIIFgjCCA2qgAwIBAgILWku9WvtPilv6ZeUwDQYJKoZIhvcNAQELBQAwTTELMAkGA1UEBhMCQVQx
IzAhBgNVBAoTGmUtY29tbWVyY2UgbW9uaXRvcmluZyBHbWJIMRkwFwYDVQQDExBHTE9CQUxUUlVT
@@ -3078,7 +3074,8 @@ YqYK6miyeUcGbvJXqBUzxvd4Sj1Ce2t+/vdG6tHrju+IaFvowdlxfv1k7/9nR4hYJS8+hge9+6jl
gqispdNpQ80xiEmEU5LAsTkbOYMBMMTyqfrQA71yN2BWHzZ8vTmR9W0Nv3vXkg==
-----END CERTIFICATE-----
-# ANF Secure Server Root CA
+ANF Secure Server Root CA
+=========================
-----BEGIN CERTIFICATE-----
MIIF7zCCA9egAwIBAgIIDdPjvGz5a7EwDQYJKoZIhvcNAQELBQAwgYQxEjAQBgNVBAUTCUc2MzI4
NzUxMDELMAkGA1UEBhMCRVMxJzAlBgNVBAoTHkFORiBBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lv
@@ -3109,7 +3106,8 @@ g77FGr8H6lnco4g175x2MjxNBiLOFeXdntiP2t7SxDnlF4HPOEfrf4htWRvfn0IUrn7PqLBmZdo3
r5+qPeoott7VMVgWglvquxl1AnMaykgaIZOQCo6ThKd9OyMYkomgjaw=
-----END CERTIFICATE-----
-# Certum EC-384 CA
+Certum EC-384 CA
+================
-----BEGIN CERTIFICATE-----
MIICZTCCAeugAwIBAgIQeI8nXIESUiClBNAt3bpz9DAKBggqhkjOPQQDAzB0MQswCQYDVQQGEwJQ
TDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2Vy
@@ -3124,7 +3122,8 @@ ADBlAjADVS2m5hjEfO/JUG7BJw+ch69u1RsIGL2SKcHvlJF40jocVYli5RsJHrpka/F2tNQCMQC0
QoSZ/6vnnvuRlydd3LBbMHHOXjgaatkl5+r3YZJW+OraNsKHZZYuciUvf9/DE8k=
-----END CERTIFICATE-----
-# Certum Trusted Root CA
+Certum Trusted Root CA
+======================
-----BEGIN CERTIFICATE-----
MIIFwDCCA6igAwIBAgIQHr9ZULjJgDdMBvfrVU+17TANBgkqhkiG9w0BAQ0FADB6MQswCQYDVQQG
EwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0g
@@ -3153,3 +3152,81 @@ WWRrJ8/vJ8HjJLWG965+Mk2weWjROeiQWMODvA8s1pfrzgzhIMfatz7DP78v3DSk+yshzWePS/Tj
OPQD8rv7gmsHINFSH5pkAnuYZttcTVoP0ISVoDwUQwbKytu4QTbaakRnh6+v40URFWkIsr4WOZck
bxJF0WddCajJFdr60qZfE2Efv4WstK2tBZQIgx51F9NxO5NQI1mg7TyRVJ12AMXDuDjb
-----END CERTIFICATE-----
+
+TunTrust Root CA
+================
+-----BEGIN CERTIFICATE-----
+MIIFszCCA5ugAwIBAgIUEwLV4kBMkkaGFmddtLu7sms+/BMwDQYJKoZIhvcNAQELBQAwYTELMAkG
+A1UEBhMCVE4xNzA1BgNVBAoMLkFnZW5jZSBOYXRpb25hbGUgZGUgQ2VydGlmaWNhdGlvbiBFbGVj
+dHJvbmlxdWUxGTAXBgNVBAMMEFR1blRydXN0IFJvb3QgQ0EwHhcNMTkwNDI2MDg1NzU2WhcNNDQw
+NDI2MDg1NzU2WjBhMQswCQYDVQQGEwJUTjE3MDUGA1UECgwuQWdlbmNlIE5hdGlvbmFsZSBkZSBD
+ZXJ0aWZpY2F0aW9uIEVsZWN0cm9uaXF1ZTEZMBcGA1UEAwwQVHVuVHJ1c3QgUm9vdCBDQTCCAiIw
+DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMPN0/y9BFPdDCA61YguBUtB9YOCfvdZn56eY+hz
+2vYGqU8ftPkLHzmMmiDQfgbU7DTZhrx1W4eI8NLZ1KMKsmwb60ksPqxd2JQDoOw05TDENX37Jk0b
+bjBU2PWARZw5rZzJJQRNmpA+TkBuimvNKWfGzC3gdOgFVwpIUPp6Q9p+7FuaDmJ2/uqdHYVy7BG7
+NegfJ7/Boce7SBbdVtfMTqDhuazb1YMZGoXRlJfXyqNlC/M4+QKu3fZnz8k/9YosRxqZbwUN/dAd
+gjH8KcwAWJeRTIAAHDOFli/LQcKLEITDCSSJH7UP2dl3RxiSlGBcx5kDPP73lad9UKGAwqmDrViW
+VSHbhlnUr8a83YFuB9tgYv7sEG7aaAH0gxupPqJbI9dkxt/con3YS7qC0lH4Zr8GRuR5KiY2eY8f
+Tpkdso8MDhz/yV3A/ZAQprE38806JG60hZC/gLkMjNWb1sjxVj8agIl6qeIbMlEsPvLfe/ZdeikZ
+juXIvTZxi11Mwh0/rViizz1wTaZQmCXcI/m4WEEIcb9PuISgjwBUFfyRbVinljvrS5YnzWuioYas
+DXxU5mZMZl+QviGaAkYt5IPCgLnPSz7ofzwB7I9ezX/SKEIBlYrilz0QIX32nRzFNKHsLA4KUiwS
+VXAkPcvCFDVDXSdOvsC9qnyW5/yeYa1E0wCXAgMBAAGjYzBhMB0GA1UdDgQWBBQGmpsfU33x9aTI
+04Y+oXNZtPdEITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFAaamx9TffH1pMjThj6hc1m0
+90QhMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAqgVutt0Vyb+zxiD2BkewhpMl
+0425yAA/l/VSJ4hxyXT968pk21vvHl26v9Hr7lxpuhbI87mP0zYuQEkHDVneixCwSQXi/5E/S7fd
+Ao74gShczNxtr18UnH1YeA32gAm56Q6XKRm4t+v4FstVEuTGfbvE7Pi1HE4+Z7/FXxttbUcoqgRY
+YdZ2vyJ/0Adqp2RT8JeNnYA/u8EH22Wv5psymsNUk8QcCMNE+3tjEUPRahphanltkE8pjkcFwRJp
+adbGNjHh/PqAulxPxOu3Mqz4dWEX1xAZufHSCe96Qp1bWgvUxpVOKs7/B9dPfhgGiPEZtdmYu65x
+xBzndFlY7wyJz4sfdZMaBBSSSFCp61cpABbjNhzI+L/wM9VBD8TMPN3pM0MBkRArHtG5Xc0yGYuP
+jCB31yLEQtyEFpslbei0VXF/sHyz03FJuc9SpAQ/3D2gu68zngowYI7bnV2UqL1g52KAdoGDDIzM
+MEZJ4gzSqK/rYXHv5yJiqfdcZGyfFoxnNidF9Ql7v/YQCvGwjVRDjAS6oz/v4jXH+XTgbzRB0L9z
+ZVcg+ZtnemZoJE6AZb0QmQZZ8mWvuMZHu/2QeItBcy6vVR/cO5JyboTT0GFMDcx2V+IthSIVNg3r
+AZ3r2OvEhJn7wAzMMujjd9qDRIueVSjAi1jTkD5OGwDxFa2DK5o=
+-----END CERTIFICATE-----
+
+HARICA TLS RSA Root CA 2021
+===========================
+-----BEGIN CERTIFICATE-----
+MIIFpDCCA4ygAwIBAgIQOcqTHO9D88aOk8f0ZIk4fjANBgkqhkiG9w0BAQsFADBsMQswCQYDVQQG
+EwJHUjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9u
+cyBDQTEkMCIGA1UEAwwbSEFSSUNBIFRMUyBSU0EgUm9vdCBDQSAyMDIxMB4XDTIxMDIxOTEwNTUz
+OFoXDTQ1MDIxMzEwNTUzN1owbDELMAkGA1UEBhMCR1IxNzA1BgNVBAoMLkhlbGxlbmljIEFjYWRl
+bWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ0ExJDAiBgNVBAMMG0hBUklDQSBUTFMgUlNB
+IFJvb3QgQ0EgMjAyMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAIvC569lmwVnlskN
+JLnQDmT8zuIkGCyEf3dRywQRNrhe7Wlxp57kJQmXZ8FHws+RFjZiPTgE4VGC/6zStGndLuwRo0Xu
+a2s7TL+MjaQenRG56Tj5eg4MmOIjHdFOY9TnuEFE+2uva9of08WRiFukiZLRgeaMOVig1mlDqa2Y
+Ulhu2wr7a89o+uOkXjpFc5gH6l8Cct4MpbOfrqkdtx2z/IpZ525yZa31MJQjB/OCFks1mJxTuy/K
+5FrZx40d/JiZ+yykgmvwKh+OC19xXFyuQnspiYHLA6OZyoieC0AJQTPb5lh6/a6ZcMBaD9YThnEv
+dmn8kN3bLW7R8pv1GmuebxWMevBLKKAiOIAkbDakO/IwkfN4E8/BPzWr8R0RI7VDIp4BkrcYAuUR
+0YLbFQDMYTfBKnya4dC6s1BG7oKsnTH4+yPiAwBIcKMJJnkVU2DzOFytOOqBAGMUuTNe3QvboEUH
+GjMJ+E20pwKmafTCWQWIZYVWrkvL4N48fS0ayOn7H6NhStYqE613TBoYm5EPWNgGVMWX+Ko/IIqm
+haZ39qb8HOLubpQzKoNQhArlT4b4UEV4AIHrW2jjJo3Me1xR9BQsQL4aYB16cmEdH2MtiKrOokWQ
+CPxrvrNQKlr9qEgYRtaQQJKQCoReaDH46+0N0x3GfZkYVVYnZS6NRcUk7M7jAgMBAAGjQjBAMA8G
+A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFApII6ZgpJIKM+qTW8VX6iVNvRLuMA4GA1UdDwEB/wQE
+AwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAPpBIqm5iFSVmewzVjIuJndftTgfvnNAUX15QvWiWkKQU
+EapobQk1OUAJ2vQJLDSle1mESSmXdMgHHkdt8s4cUCbjnj1AUz/3f5Z2EMVGpdAgS1D0NTsY9FVq
+QRtHBmg8uwkIYtlfVUKqrFOFrJVWNlar5AWMxajaH6NpvVMPxP/cyuN+8kyIhkdGGvMA9YCRotxD
+QpSbIPDRzbLrLFPCU3hKTwSUQZqPJzLB5UkZv/HywouoCjkxKLR9YjYsTewfM7Z+d21+UPCfDtcR
+j88YxeMn/ibvBZ3PzzfF0HvaO7AWhAw6k9a+F9sPPg4ZeAnHqQJyIkv3N3a6dcSFA1pj1bF1BcK5
+vZStjBWZp5N99sXzqnTPBIWUmAD04vnKJGW/4GKvyMX6ssmeVkjaef2WdhW+o45WxLM0/L5H9MG0
+qPzVMIho7suuyWPEdr6sOBjhXlzPrjoiUevRi7PzKzMHVIf6tLITe7pTBGIBnfHAT+7hOtSLIBD6
+Alfm78ELt5BGnBkpjNxvoEppaZS3JGWg/6w/zgH7IS79aPib8qXPMThcFarmlwDB31qlpzmq6YR/
+PFGoOtmUW4y/Twhx5duoXNTSpv4Ao8YWxw/ogM4cKGR0GQjTQuPOAF1/sdwTsOEFy9EgqoZ0njnn
+kf3/W9b3raYvAwtt41dU63ZTGI0RmLo=
+-----END CERTIFICATE-----
+
+HARICA TLS ECC Root CA 2021
+===========================
+-----BEGIN CERTIFICATE-----
+MIICVDCCAdugAwIBAgIQZ3SdjXfYO2rbIvT/WeK/zjAKBggqhkjOPQQDAzBsMQswCQYDVQQGEwJH
+UjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBD
+QTEkMCIGA1UEAwwbSEFSSUNBIFRMUyBFQ0MgUm9vdCBDQSAyMDIxMB4XDTIxMDIxOTExMDExMFoX
+DTQ1MDIxMzExMDEwOVowbDELMAkGA1UEBhMCR1IxNzA1BgNVBAoMLkhlbGxlbmljIEFjYWRlbWlj
+IGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ0ExJDAiBgNVBAMMG0hBUklDQSBUTFMgRUNDIFJv
+b3QgQ0EgMjAyMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABDgI/rGgltJ6rK9JOtDA4MM7KKrxcm1l
+AEeIhPyaJmuqS7psBAqIXhfyVYf8MLA04jRYVxqEU+kw2anylnTDUR9YSTHMmE5gEYd103KUkE+b
+ECUqqHgtvpBBWJAVcqeht6NCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUyRtTgRL+BNUW
+0aq8mm+3oJUZbsowDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMDA2cAMGQCMBHervjcToiwqfAi
+rcJRQO9gcS3ujwLEXQNwSaSS6sUUiHCm0w2wqsosQJz76YJumgIwK0eaB8bRwoF8yguWGEEbo/Qw
+CZ61IygNnxS2PFOiTAZpffpskcYqSUXm7LcT4Tps
+-----END CERTIFICATE-----
diff --git a/thirdparty/embree/common/sys/platform.h b/thirdparty/embree/common/sys/platform.h
index 697e07bb86..3e386c4944 100644
--- a/thirdparty/embree/common/sys/platform.h
+++ b/thirdparty/embree/common/sys/platform.h
@@ -183,7 +183,7 @@
// #define THROW_RUNTIME_ERROR(str)
// throw std::runtime_error(std::string(__FILE__) + " (" + toString(__LINE__) + "): " + std::string(str));
#define THROW_RUNTIME_ERROR(str) \
- printf(std::string(__FILE__) + " (" + toString(__LINE__) + "): " + std::string(str)), abort();
+ printf("%s (%d): %s", __FILE__, __LINE__, std::string(str).c_str()), abort();
// -- GODOT end --
#else
// -- GODOT start --
diff --git a/thirdparty/embree/kernels/common/rtcore.h b/thirdparty/embree/kernels/common/rtcore.h
index 373e49a689..f8aad7c7cb 100644
--- a/thirdparty/embree/kernels/common/rtcore.h
+++ b/thirdparty/embree/kernels/common/rtcore.h
@@ -126,7 +126,7 @@ namespace embree
// #define throw_RTCError(error,str) \
// throw rtcore_error(error,std::string(__FILE__) + " (" + toString(__LINE__) + "): " + std::string(str));
#define throw_RTCError(error,str) \
- printf(std::string(__FILE__) + " (" + toString(__LINE__) + "): " + std::string(str)), abort();
+ printf("%s (%d): %s", __FILE__, __LINE__, std::string(str).c_str()), abort();
// -- GODOT end --
#else
// -- GODOT begin --
diff --git a/thirdparty/embree/patches/godot-changes-noexcept.patch b/thirdparty/embree/patches/godot-changes-noexcept.patch
index c587a0e2be..598a7f2ddc 100644
--- a/thirdparty/embree/patches/godot-changes-noexcept.patch
+++ b/thirdparty/embree/patches/godot-changes-noexcept.patch
@@ -259,7 +259,7 @@ index 8a6d9fa0a9..697e07bb86 100644
+ // throw std::runtime_error(std::string(__FILE__) + " (" + toString(__LINE__) + "): " + std::string(str));
#define THROW_RUNTIME_ERROR(str) \
- throw std::runtime_error(std::string(__FILE__) + " (" + toString(__LINE__) + "): " + std::string(str));
-+ printf(std::string(__FILE__) + " (" + toString(__LINE__) + "): " + std::string(str)), abort();
++ printf("%s (%d): %s", __FILE__, __LINE__, std::string(str).c_str()), abort();
+ // -- GODOT end --
#else
+ // -- GODOT start --
@@ -583,7 +583,7 @@ index 4e4b24e9c2..373e49a689 100644
+ // throw rtcore_error(error,std::string(__FILE__) + " (" + toString(__LINE__) + "): " + std::string(str));
#define throw_RTCError(error,str) \
- throw rtcore_error(error,std::string(__FILE__) + " (" + toString(__LINE__) + "): " + std::string(str));
-+ printf(std::string(__FILE__) + " (" + toString(__LINE__) + "): " + std::string(str)), abort();
++ printf("%s (%d): %s", __FILE__, __LINE__, std::string(str).c_str()), abort();
+ // -- GODOT end --
#else
+ // -- GODOT begin --
diff --git a/thirdparty/graphite/ChangeLog b/thirdparty/graphite/ChangeLog
deleted file mode 100644
index e36110e1c1..0000000000
--- a/thirdparty/graphite/ChangeLog
+++ /dev/null
@@ -1,238 +0,0 @@
-1.3.14
- . Bug fixes
- . Allow features to be hidden (for aliases)
- . Move to python3
- . Rename doc files from .txt to .asc
-
-1.3.13
- . Resolve minor spacing issue in rtl non-overlap kerning
- . python3 for graphite.py
- . Better fuzzing
- . Better building on windows
-
-1.3.12
- . Graphite no longer does dumb rendering for fonts with no smarts
- . Segment caching code removed. Anything attempting to use the segment cache gets given a regular face instead
- . Add libfuzzer support
- . Builds now require C++11
- . Improvements to Windows 64 bit builds
- . Support different versions of python including 32 bit and python 3
- . Various minor bug fixes
-
-1.3.11
- . Fixes due to security review
- . Minor collision avoidance fixes
- . Fix LZ4 decompressor against high compression
-
-1.3.10
- . Address floating point build parameters to give consistent positioning results across platforms
- . Various bug fixes
-
-1.3.9
- . Add Collision COLL_ISSPACE to allow for visible spaces in collision avoidance
- . Add segment and pass direction information to tracing output
- . Bug fix rule length testing in 32-bit
- . Increase slanted margin distances for collision avoidance
- . Change kerning algorithm to simple outline expansion. Seems to make no visible difference.
- . Add trace2svg to test tools
-
-1.3.8
- . Various bug fixes arising from fuzzing
- . Fix regression that stopped piglatin from working
- . Make collision avoidance kerning give more regular results
- . Minor modification to clustering algorithm to handle variable width chars
-
-1.3.7
- . Bug fixes
- . Start to deprecate SegCache. This will be going away in a later release.
-
-1.3.6
- . Bug fixes
-
-1.3.5
- . Bug fixes
- . Security bug fix
- . Fix ARM misalignment problem
- . Track latest cmake
-
-1.3.4
- . Transition from Mercurial to Git
- . Bug fixes
- . Fix Collision Kerning ignoring some diacritics
- . Handle pass bits 16-31 to speed up fonts with > 16 passes
- . Various minor fuzz bug fixes
- . Make Coverity happy
- . Add GR_FALLTHROUGH macro for clang c++11
-
-1.3.3
- . Slight speed up in Collision Avoidance
- . Remove dead bidi code
- . Bug fixes
- . Between pass bidi reorderings and at the end
- . Decompressor fuzz bugs
- . Other fuzz bugs
-
-1.3.2
- . Remove full bidi. All segments are assumed to be single directioned.
- . Bug fixes:
- . Decompressor corner cases
- . Various fuzz bugs
-
-1.3.1
- . Deprecation warning: Full bidi support is about to be deprecated. Make contact
- if this impacts you.
- . Change compression block format slightly to conform to LZ4
- . Bug fixes:
- . Handle mono direction text with diacritics consistently. Fonts
- now see the direction they expect consistently and bidi now
- gives expected results.
- . Fixed lots of fuzz bugs
- . Coverity cleanups
- . Build now works for clang and/or asan and/or afl etc.
-
-1.3.0
- . Add collision avoidance
- . Shift Collider
- . Kern Collider
- . Octabox outlines and subboxes
- . Add compressed Silf and Glat table support
- . Bug fixes:
- . Stop loops forming in the child, sibling tree
- . Handle bidi mirroring correctly if no bidi occurring
-
-1.2.4
- . Face failure now has error code reporting via debug logging
- . can now call gr_start_logging(NULL, fname)
- . gr2fonttest --alltrace added
- . Format 14 table support
- . Not done. To be handled entirely in the compiler
- . Bidi support for Unicode 6.3 Isolating direction controls
- . Fonts no longer require a glyf/loca table. In such cases the bounding box is always 0.
- . Clang ASAN build support added for testing.
- . Handle out of memory sanely.
- . Documentation improvements
- . Bug fixes:
- . Enforce fonts having to store glyph attributes by monotonically increasing attribute number
- . zeropadding was not getting called on feature tags
- . automatic associations for unassociated characters
- . use direct engine on Mac
- . various extreme case reading 1 past the end errors fixed
- . remove tabs from sources so that it becomes readable again
-
-1.2.3
- . Bug fixes only:
- . fix byte swapping when testing cmap subtable lengths
- . work around armel compilation problems with conditional operators
- . fix pseudoglyph support for advance and bbox
-
-1.2.2
- . Add support for passKeySlot (makes Charis 2x faster) up to 32 passes
- . Add telemetry output to json if enabled in build GRAPHITE2_TELEMETRY
- . Shrink font memory footprint particularly in the fsm
- . Add -S to comparerenderer
- . Bug fixes:
- . Fix shift.x being reversed for rtl text
- . Fix faulty fallback justification
- . Fix bad cmap handling
- . Support compiling on old Solaris where bidi attributes clash with register names
- . Follow the crowd in using Windows.h
-
-1.2.1
- . Bug fixes:
- . Allow glyph reattachment
- . Allow signed glyph attributes
- . Various build problems with MacOS, old gcc versions, etc.
- . Various overrun read errors fixed
-
-1.2.0
- . API Changes:
- . Added Windows friendly gr_start_logging and gr_stop_logging, now per face
- . Added gr_make_face_with_ops, gr_make_face_with_seg_cache_and_ops
- . Added gr_make_font_with_ops
- . Added gr_face_is_char_supported
- . Added gr_face_info to give info to apps about face capabilities
- . Deprecated gr_make_face, gr_make_face_with_seg_cache, gr_make_font_with_advance_fn
- . Deprecated graphite_start_logging and graphite_stop_logging
- . These functions are stubbed now and do nothing, but do compile and link.
- . Bump API version to 3
- . Add C# wrapper to contrib
- . Handle justification information in a font and do something useful with it
- . Builds clang clean (has done for a while)
- . Bug fixes
- . Windows build and bug fixes
- . Add extra information to json debug output
- . Added windows build documentation
- . Added freetype sample code and test
-
-1.1.3
- . Default build has GRAPHITE2_COMPARE_RENDERER to OFF to reduce dependencies
- . Builds on Mac with clang
- . Debug output improvements
- . Tidy up perl wrappers
- . Fuzz tester improvements
- . Various bug fixes for bad font handling
-
-1.1.2
- . Support feature ids < 4 chars when space padded for inclusion in FF 14.
- . More fuzztesting and removal of causes of valgrind bad reads and sigabrts
- . Remove contrib/android into its own repo (http://hg.palaso.org/grandroid)
- . Update comparerenderer to latest harfbuzzng api
-
-1.1.1
- . Missing Log.h included
- . perl wrappers updated
-
-1.1.0
- . Refactored debug output to use json
- . Renamed VM_MACHINE_TYPE to GRAPHITE2_VM_TYPE
- . Renamed DISABLE_SEGCACHE to GRAPHITE2_NSEGCACE
- . Renamed DISBALE_FILE_FACE to GRAPHITE2_NFILEFACE
- . Renamed ENABLE_COMPARE_RENDERER to GRAPHTIE2_COMPARE_RENDERER
- . Renamed DOXYGEN_CONFIG to GRAPHITE2_DOXYGEN_CONFIG
- . Renamed GR2_CUSTOM_HEADER to GRAPHITE2_CUSTOM_HEADER
- . Renamed GR2_EXPORTING to GRAPHITE2_EXPORTING
- . Added GRAPHITE2_STATIC for static only builds
- . Added GRAPHITE2_NTRACING to compile out tracing code
- . Documented GRAPHITE2_{EXPORTING,STATIC,NTRACING} in hacking.txt
- . Bump libtool version to 2.1.0
- . dumb font rendering works
- . slot user attributes are now signed rather than unsigned
- . add support for long class maps
- . Rename perl library to avoid nameclash on Windows
- . Various robustness fixes
- . Moved internal .h files into src/inc
- . Parallelise fuzztest
- . General build improvements, particularly on Windows
-
-1.0.3
- . Fix UTF16 surrogate support
- . script and lang tags may be space padded or null padded
- . Remove need for WORDS_BIGENDIAN, do it all automatically
- . Remove all #include <new>. Use CLASS_NEW_DELETE instead.
- . Fix comparerenderer to work with current hbng
- . Add valgrind to fuzztest to ensure good memory use at all times
- . Fix new fuzztest exposed bugs.
- . Fix bugs exposed by Mozilla security review
- . Add continuous integration build on Windows support
-
-1.0.2
- . Fix Windows build
- . Comparerenderer uses hbng enforcing ot rendering
- . Add Bidi .hasChar support and refactor mirroring code
- . Make cmake default Release rather than debug
- . Don't compile in a boat load of TtfUtil that isn't used, saving 15% of binary
- . Chase the FSF around its latest office moves
- . WORDS_BIGENDIAN is set at the top so tests now pass on ppc, etc.
- . More words in the manual
-
-1.0.1
- . Release is the default build in cmake now.
- . Refactor cmake build to not rebuild things so much.
- . Include a missing file
- . Remove -nostdlibs, making gcc happy everywhere
- . Update comparerenderer to latest hbng interface
- . Add changelog
-
-1.0.0
- . First major release of perfect code!
-
diff --git a/thirdparty/graphite/src/Pass.cpp b/thirdparty/graphite/src/Pass.cpp
index db31c22d46..47ae2064f7 100644
--- a/thirdparty/graphite/src/Pass.cpp
+++ b/thirdparty/graphite/src/Pass.cpp
@@ -1056,12 +1056,17 @@ float Pass::resolveKern(Segment *seg, Slot *slotFix, GR_MAYBE_UNUSED Slot *start
ymin = min(by + bbb.bl.y, ymin);
for (nbor = slotFix->next(); nbor; nbor = nbor->next())
{
- if (nbor->isChildOf(base))
- continue;
if (!gc.check(nbor->gid()))
return 0.;
const Rect &bb = seg->theGlyphBBoxTemporary(nbor->gid());
SlotCollision *cNbor = seg->collisionInfo(nbor);
+ const float nby = nbor->origin().y + cNbor->shift().y;
+ if (nbor->isChildOf(base))
+ {
+ ymax = max(nby + bb.tr.y, ymax);
+ ymin = min(nby + bb.bl.y, ymin);
+ continue;
+ }
if ((bb.bl.y == 0.f && bb.tr.y == 0.f) || (cNbor->flags() & SlotCollision::COLL_ISSPACE))
{
if (m_kernColls == InWord)
diff --git a/thirdparty/harfbuzz/src/hb-aat-layout-bsln-table.hh b/thirdparty/harfbuzz/src/hb-aat-layout-bsln-table.hh
index cd36fc8953..b52844e75d 100644
--- a/thirdparty/harfbuzz/src/hb-aat-layout-bsln-table.hh
+++ b/thirdparty/harfbuzz/src/hb-aat-layout-bsln-table.hh
@@ -82,7 +82,7 @@ struct BaselineTableFormat2Part
}
protected:
- HBGlyphID stdGlyph; /* The specific glyph index number in this
+ HBGlyphID16 stdGlyph; /* The specific glyph index number in this
* font that is used to set the baseline values.
* This is the standard glyph.
* This glyph must contain a set of control points
@@ -105,7 +105,7 @@ struct BaselineTableFormat3Part
}
protected:
- HBGlyphID stdGlyph; /* ditto */
+ HBGlyphID16 stdGlyph; /* ditto */
HBUINT16 ctlPoints[32]; /* ditto */
Lookup<HBUINT16>
lookupTable; /* Lookup table that maps glyphs to their
diff --git a/thirdparty/harfbuzz/src/hb-aat-layout-common.hh b/thirdparty/harfbuzz/src/hb-aat-layout-common.hh
index e70ce97174..1dcbe92904 100644
--- a/thirdparty/harfbuzz/src/hb-aat-layout-common.hh
+++ b/thirdparty/harfbuzz/src/hb-aat-layout-common.hh
@@ -96,8 +96,8 @@ struct LookupSegmentSingle
return_trace (c->check_struct (this) && value.sanitize (c, base));
}
- HBGlyphID last; /* Last GlyphID in this segment */
- HBGlyphID first; /* First GlyphID in this segment */
+ HBGlyphID16 last; /* Last GlyphID in this segment */
+ HBGlyphID16 first; /* First GlyphID in this segment */
T value; /* The lookup value (only one) */
public:
DEFINE_SIZE_STATIC (4 + T::static_size);
@@ -162,11 +162,11 @@ struct LookupSegmentArray
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) &&
first <= last &&
- valuesZ.sanitize (c, base, last - first + 1, hb_forward<Ts> (ds)...));
+ valuesZ.sanitize (c, base, last - first + 1, std::forward<Ts> (ds)...));
}
- HBGlyphID last; /* Last GlyphID in this segment */
- HBGlyphID first; /* First GlyphID in this segment */
+ HBGlyphID16 last; /* Last GlyphID in this segment */
+ HBGlyphID16 first; /* First GlyphID in this segment */
NNOffset16To<UnsizedArrayOf<T>>
valuesZ; /* A 16-bit offset from the start of
* the table to the data. */
@@ -225,7 +225,7 @@ struct LookupSingle
return_trace (c->check_struct (this) && value.sanitize (c, base));
}
- HBGlyphID glyph; /* Last GlyphID */
+ HBGlyphID16 glyph; /* Last GlyphID */
T value; /* The lookup value (only one) */
public:
DEFINE_SIZE_STATIC (2 + T::static_size);
@@ -287,7 +287,7 @@ struct LookupFormat8
protected:
HBUINT16 format; /* Format identifier--format = 8 */
- HBGlyphID firstGlyph; /* First glyph index included in the trimmed array. */
+ HBGlyphID16 firstGlyph; /* First glyph index included in the trimmed array. */
HBUINT16 glyphCount; /* Total number of glyphs (equivalent to the last
* glyph minus the value of firstGlyph plus 1). */
UnsizedArrayOf<T>
@@ -329,7 +329,7 @@ struct LookupFormat10
protected:
HBUINT16 format; /* Format identifier--format = 8 */
HBUINT16 valueSize; /* Byte size of each value. */
- HBGlyphID firstGlyph; /* First glyph index included in the trimmed array. */
+ HBGlyphID16 firstGlyph; /* First glyph index included in the trimmed array. */
HBUINT16 glyphCount; /* Total number of glyphs (equivalent to the last
* glyph minus the value of firstGlyph plus 1). */
UnsizedArrayOf<HBUINT8>
@@ -661,7 +661,7 @@ struct ClassTable
return_trace (c->check_struct (this) && classArray.sanitize (c));
}
protected:
- HBGlyphID firstGlyph; /* First glyph index included in the trimmed array. */
+ HBGlyphID16 firstGlyph; /* First glyph index included in the trimmed array. */
Array16Of<HBUCHAR> classArray; /* The class codes (indexed by glyph index minus
* firstGlyph). */
public:
diff --git a/thirdparty/harfbuzz/src/hb-aat-layout-just-table.hh b/thirdparty/harfbuzz/src/hb-aat-layout-just-table.hh
index 556d4ad75b..d745c11431 100644
--- a/thirdparty/harfbuzz/src/hb-aat-layout-just-table.hh
+++ b/thirdparty/harfbuzz/src/hb-aat-layout-just-table.hh
@@ -100,7 +100,7 @@ struct UnconditionalAddGlyphAction
protected:
ActionSubrecordHeader
header;
- HBGlyphID addGlyph; /* Glyph that should be added if the distance factor
+ HBGlyphID16 addGlyph; /* Glyph that should be added if the distance factor
* is growing. */
public:
@@ -121,11 +121,11 @@ struct ConditionalAddGlyphAction
HBFixed substThreshold; /* Distance growth factor (in ems) at which
* this glyph is replaced and the growth factor
* recalculated. */
- HBGlyphID addGlyph; /* Glyph to be added as kashida. If this value is
+ HBGlyphID16 addGlyph; /* Glyph to be added as kashida. If this value is
* 0xFFFF, no extra glyph will be added. Note that
* generally when a glyph is added, justification
* will need to be redone. */
- HBGlyphID substGlyph; /* Glyph to be substituted for this glyph if the
+ HBGlyphID16 substGlyph; /* Glyph to be substituted for this glyph if the
* growth factor equals or exceeds the value of
* substThreshold. */
public:
@@ -170,7 +170,7 @@ struct RepeatedAddGlyphAction
ActionSubrecordHeader
header;
HBUINT16 flags; /* Currently unused; set to 0. */
- HBGlyphID glyph; /* Glyph that should be added if the distance factor
+ HBGlyphID16 glyph; /* Glyph that should be added if the distance factor
* is growing. */
public:
DEFINE_SIZE_STATIC (10);
diff --git a/thirdparty/harfbuzz/src/hb-aat-layout-kerx-table.hh b/thirdparty/harfbuzz/src/hb-aat-layout-kerx-table.hh
index d0eacf0e61..0354b47d5a 100644
--- a/thirdparty/harfbuzz/src/hb-aat-layout-kerx-table.hh
+++ b/thirdparty/harfbuzz/src/hb-aat-layout-kerx-table.hh
@@ -82,8 +82,8 @@ struct KernPair
}
protected:
- HBGlyphID left;
- HBGlyphID right;
+ HBGlyphID16 left;
+ HBGlyphID16 right;
FWORD value;
public:
DEFINE_SIZE_STATIC (6);
@@ -775,11 +775,11 @@ struct KerxSubTable
unsigned int subtable_type = get_type ();
TRACE_DISPATCH (this, subtable_type);
switch (subtable_type) {
- case 0: return_trace (c->dispatch (u.format0, hb_forward<Ts> (ds)...));
- case 1: return_trace (c->dispatch (u.format1, hb_forward<Ts> (ds)...));
- case 2: return_trace (c->dispatch (u.format2, hb_forward<Ts> (ds)...));
- case 4: return_trace (c->dispatch (u.format4, hb_forward<Ts> (ds)...));
- case 6: return_trace (c->dispatch (u.format6, hb_forward<Ts> (ds)...));
+ case 0: return_trace (c->dispatch (u.format0, std::forward<Ts> (ds)...));
+ case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
+ case 2: return_trace (c->dispatch (u.format2, std::forward<Ts> (ds)...));
+ case 4: return_trace (c->dispatch (u.format4, std::forward<Ts> (ds)...));
+ case 6: return_trace (c->dispatch (u.format6, std::forward<Ts> (ds)...));
default: return_trace (c->default_return_value ());
}
}
diff --git a/thirdparty/harfbuzz/src/hb-aat-layout-morx-table.hh b/thirdparty/harfbuzz/src/hb-aat-layout-morx-table.hh
index a807bdcfc5..b77c1f4d44 100644
--- a/thirdparty/harfbuzz/src/hb-aat-layout-morx-table.hh
+++ b/thirdparty/harfbuzz/src/hb-aat-layout-morx-table.hh
@@ -243,21 +243,21 @@ struct ContextualSubtable
if (buffer->idx == buffer->len && !mark_set)
return;
- const HBGlyphID *replacement;
+ const HBGlyphID16 *replacement;
replacement = nullptr;
if (Types::extended)
{
if (entry.data.markIndex != 0xFFFF)
{
- const Lookup<HBGlyphID> &lookup = subs[entry.data.markIndex];
+ const Lookup<HBGlyphID16> &lookup = subs[entry.data.markIndex];
replacement = lookup.get_value (buffer->info[mark].codepoint, driver->num_glyphs);
}
}
else
{
unsigned int offset = entry.data.markIndex + buffer->info[mark].codepoint;
- const UnsizedArrayOf<HBGlyphID> &subs_old = (const UnsizedArrayOf<HBGlyphID> &) subs;
+ const UnsizedArrayOf<HBGlyphID16> &subs_old = (const UnsizedArrayOf<HBGlyphID16> &) subs;
replacement = &subs_old[Types::wordOffsetToIndex (offset, table, subs_old.arrayZ)];
if (!replacement->sanitize (&c->sanitizer) || !*replacement)
replacement = nullptr;
@@ -278,14 +278,14 @@ struct ContextualSubtable
{
if (entry.data.currentIndex != 0xFFFF)
{
- const Lookup<HBGlyphID> &lookup = subs[entry.data.currentIndex];
+ const Lookup<HBGlyphID16> &lookup = subs[entry.data.currentIndex];
replacement = lookup.get_value (buffer->info[idx].codepoint, driver->num_glyphs);
}
}
else
{
unsigned int offset = entry.data.currentIndex + buffer->info[idx].codepoint;
- const UnsizedArrayOf<HBGlyphID> &subs_old = (const UnsizedArrayOf<HBGlyphID> &) subs;
+ const UnsizedArrayOf<HBGlyphID16> &subs_old = (const UnsizedArrayOf<HBGlyphID16> &) subs;
replacement = &subs_old[Types::wordOffsetToIndex (offset, table, subs_old.arrayZ)];
if (!replacement->sanitize (&c->sanitizer) || !*replacement)
replacement = nullptr;
@@ -315,7 +315,7 @@ struct ContextualSubtable
bool has_glyph_classes;
unsigned int mark;
const ContextualSubtable *table;
- const UnsizedListOfOffset16To<Lookup<HBGlyphID>, HBUINT, false> &subs;
+ const UnsizedListOfOffset16To<Lookup<HBGlyphID16>, HBUINT, false> &subs;
};
bool apply (hb_aat_apply_context_t *c) const
@@ -359,7 +359,7 @@ struct ContextualSubtable
protected:
StateTable<Types, EntryData>
machine;
- NNOffsetTo<UnsizedListOfOffset16To<Lookup<HBGlyphID>, HBUINT, false>, HBUINT>
+ NNOffsetTo<UnsizedListOfOffset16To<Lookup<HBGlyphID16>, HBUINT, false>, HBUINT>
substitutionTables;
public:
DEFINE_SIZE_STATIC (20);
@@ -531,7 +531,7 @@ struct LigatureSubtable
if (action & (LigActionStore | LigActionLast))
{
ligature_idx = Types::offsetToIndex (ligature_idx, table, ligature.arrayZ);
- const HBGlyphID &ligatureData = ligature[ligature_idx];
+ const HBGlyphID16 &ligatureData = ligature[ligature_idx];
if (unlikely (!ligatureData.sanitize (&c->sanitizer))) break;
hb_codepoint_t lig = ligatureData;
@@ -565,7 +565,7 @@ struct LigatureSubtable
const LigatureSubtable *table;
const UnsizedArrayOf<HBUINT32> &ligAction;
const UnsizedArrayOf<HBUINT16> &component;
- const UnsizedArrayOf<HBGlyphID> &ligature;
+ const UnsizedArrayOf<HBGlyphID16> &ligature;
unsigned int match_length;
unsigned int match_positions[HB_MAX_CONTEXT_LENGTH];
};
@@ -597,7 +597,7 @@ struct LigatureSubtable
ligAction; /* Offset to the ligature action table. */
NNOffsetTo<UnsizedArrayOf<HBUINT16>, HBUINT>
component; /* Offset to the component table. */
- NNOffsetTo<UnsizedArrayOf<HBGlyphID>, HBUINT>
+ NNOffsetTo<UnsizedArrayOf<HBGlyphID16>, HBUINT>
ligature; /* Offset to the actual ligature lists. */
public:
DEFINE_SIZE_STATIC (28);
@@ -620,7 +620,7 @@ struct NoncontextualSubtable
unsigned int count = c->buffer->len;
for (unsigned int i = 0; i < count; i++)
{
- const HBGlyphID *replacement = substitute.get_value (info[i].codepoint, num_glyphs);
+ const HBGlyphID16 *replacement = substitute.get_value (info[i].codepoint, num_glyphs);
if (replacement)
{
info[i].codepoint = *replacement;
@@ -641,7 +641,7 @@ struct NoncontextualSubtable
}
protected:
- Lookup<HBGlyphID> substitute;
+ Lookup<HBGlyphID16> substitute;
public:
DEFINE_SIZE_MIN (2);
};
@@ -744,7 +744,7 @@ struct InsertionSubtable
unsigned int count = (flags & MarkedInsertCount);
if (unlikely ((buffer->max_ops -= count) <= 0)) return;
unsigned int start = entry.data.markedInsertIndex;
- const HBGlyphID *glyphs = &insertionAction[start];
+ const HBGlyphID16 *glyphs = &insertionAction[start];
if (unlikely (!c->sanitizer.check_array (glyphs, count))) count = 0;
bool before = flags & MarkedInsertBefore;
@@ -772,7 +772,7 @@ struct InsertionSubtable
unsigned int count = (flags & CurrentInsertCount) >> 5;
if (unlikely ((buffer->max_ops -= count) <= 0)) return;
unsigned int start = entry.data.currentInsertIndex;
- const HBGlyphID *glyphs = &insertionAction[start];
+ const HBGlyphID16 *glyphs = &insertionAction[start];
if (unlikely (!c->sanitizer.check_array (glyphs, count))) count = 0;
bool before = flags & CurrentInsertBefore;
@@ -810,7 +810,7 @@ struct InsertionSubtable
private:
hb_aat_apply_context_t *c;
unsigned int mark;
- const UnsizedArrayOf<HBGlyphID> &insertionAction;
+ const UnsizedArrayOf<HBGlyphID16> &insertionAction;
};
bool apply (hb_aat_apply_context_t *c) const
@@ -836,7 +836,7 @@ struct InsertionSubtable
protected:
StateTable<Types, EntryData>
machine;
- NNOffsetTo<UnsizedArrayOf<HBGlyphID>, HBUINT>
+ NNOffsetTo<UnsizedArrayOf<HBGlyphID16>, HBUINT>
insertionAction; /* Byte offset from stateHeader to the start of
* the insertion glyph table. */
public:
@@ -906,11 +906,11 @@ struct ChainSubtable
unsigned int subtable_type = get_type ();
TRACE_DISPATCH (this, subtable_type);
switch (subtable_type) {
- case Rearrangement: return_trace (c->dispatch (u.rearrangement, hb_forward<Ts> (ds)...));
- case Contextual: return_trace (c->dispatch (u.contextual, hb_forward<Ts> (ds)...));
- case Ligature: return_trace (c->dispatch (u.ligature, hb_forward<Ts> (ds)...));
- case Noncontextual: return_trace (c->dispatch (u.noncontextual, hb_forward<Ts> (ds)...));
- case Insertion: return_trace (c->dispatch (u.insertion, hb_forward<Ts> (ds)...));
+ case Rearrangement: return_trace (c->dispatch (u.rearrangement, std::forward<Ts> (ds)...));
+ case Contextual: return_trace (c->dispatch (u.contextual, std::forward<Ts> (ds)...));
+ case Ligature: return_trace (c->dispatch (u.ligature, std::forward<Ts> (ds)...));
+ case Noncontextual: return_trace (c->dispatch (u.noncontextual, std::forward<Ts> (ds)...));
+ case Insertion: return_trace (c->dispatch (u.insertion, std::forward<Ts> (ds)...));
default: return_trace (c->default_return_value ());
}
}
diff --git a/thirdparty/harfbuzz/src/hb-algs.hh b/thirdparty/harfbuzz/src/hb-algs.hh
index bbe097fe01..446d87e28b 100644
--- a/thirdparty/harfbuzz/src/hb-algs.hh
+++ b/thirdparty/harfbuzz/src/hb-algs.hh
@@ -34,6 +34,9 @@
#include "hb-null.hh"
#include "hb-number.hh"
+#include <algorithm>
+#include <initializer_list>
+#include <new>
/*
* Flags
@@ -125,7 +128,7 @@ struct BEInt<Type, 2>
template <typename Type>
struct BEInt<Type, 3>
{
- static_assert (!hb_is_signed (Type), "");
+ static_assert (!std::is_signed<Type>::value, "");
public:
BEInt () = default;
constexpr BEInt (Type V) : v {uint8_t ((V >> 16) & 0xFF),
@@ -179,7 +182,7 @@ struct
{
/* Note. This is dangerous in that if it's passed an rvalue, it returns rvalue-reference. */
template <typename T> constexpr auto
- operator () (T&& v) const HB_AUTO_RETURN ( hb_forward<T> (v) )
+ operator () (T&& v) const HB_AUTO_RETURN ( std::forward<T> (v) )
}
HB_FUNCOBJ (hb_identity);
struct
@@ -203,7 +206,7 @@ HB_FUNCOBJ (hb_ridentity);
struct
{
template <typename T> constexpr bool
- operator () (T&& v) const { return bool (hb_forward<T> (v)); }
+ operator () (T&& v) const { return bool (std::forward<T> (v)); }
}
HB_FUNCOBJ (hb_bool);
@@ -215,7 +218,7 @@ struct
impl (const T& v, hb_priority<1>) const HB_RETURN (uint32_t, hb_deref (v).hash ())
template <typename T,
- hb_enable_if (hb_is_integral (T))> constexpr auto
+ hb_enable_if (std::is_integral<T>::value)> constexpr auto
impl (const T& v, hb_priority<0>) const HB_AUTO_RETURN
(
/* Knuth's multiplicative method: */
@@ -237,26 +240,26 @@ struct
/* Pointer-to-member-function. */
template <typename Appl, typename T, typename ...Ts> auto
impl (Appl&& a, hb_priority<2>, T &&v, Ts&&... ds) const HB_AUTO_RETURN
- ((hb_deref (hb_forward<T> (v)).*hb_forward<Appl> (a)) (hb_forward<Ts> (ds)...))
+ ((hb_deref (std::forward<T> (v)).*std::forward<Appl> (a)) (std::forward<Ts> (ds)...))
/* Pointer-to-member. */
template <typename Appl, typename T> auto
impl (Appl&& a, hb_priority<1>, T &&v) const HB_AUTO_RETURN
- ((hb_deref (hb_forward<T> (v))).*hb_forward<Appl> (a))
+ ((hb_deref (std::forward<T> (v))).*std::forward<Appl> (a))
/* Operator(). */
template <typename Appl, typename ...Ts> auto
impl (Appl&& a, hb_priority<0>, Ts&&... ds) const HB_AUTO_RETURN
- (hb_deref (hb_forward<Appl> (a)) (hb_forward<Ts> (ds)...))
+ (hb_deref (std::forward<Appl> (a)) (std::forward<Ts> (ds)...))
public:
template <typename Appl, typename ...Ts> auto
operator () (Appl&& a, Ts&&... ds) const HB_AUTO_RETURN
(
- impl (hb_forward<Appl> (a),
+ impl (std::forward<Appl> (a),
hb_prioritize,
- hb_forward<Ts> (ds)...)
+ std::forward<Ts> (ds)...)
)
}
HB_FUNCOBJ (hb_invoke);
@@ -275,9 +278,9 @@ struct hb_partial_t
hb_declval (V),
hb_declval (Ts)...))
{
- return hb_invoke (hb_forward<Appl> (a),
- hb_forward<V> (v),
- hb_forward<Ts> (ds)...);
+ return hb_invoke (std::forward<Appl> (a),
+ std::forward<V> (v),
+ std::forward<Ts> (ds)...);
}
template <typename T0, typename ...Ts,
unsigned P = Pos,
@@ -287,10 +290,10 @@ struct hb_partial_t
hb_declval (V),
hb_declval (Ts)...))
{
- return hb_invoke (hb_forward<Appl> (a),
- hb_forward<T0> (d0),
- hb_forward<V> (v),
- hb_forward<Ts> (ds)...);
+ return hb_invoke (std::forward<Appl> (a),
+ std::forward<T0> (d0),
+ std::forward<V> (v),
+ std::forward<Ts> (ds)...);
}
private:
@@ -324,14 +327,14 @@ auto hb_partial (Appl&& a, V&& v) HB_AUTO_RETURN
#define HB_PARTIALIZE(Pos) \
template <typename _T> \
decltype(auto) operator () (_T&& _v) const \
- { return hb_partial<Pos> (this, hb_forward<_T> (_v)); } \
+ { return hb_partial<Pos> (this, std::forward<_T> (_v)); } \
static_assert (true, "")
#else
/* https://github.com/harfbuzz/harfbuzz/issues/1724 */
#define HB_PARTIALIZE(Pos) \
template <typename _T> \
auto operator () (_T&& _v) const HB_AUTO_RETURN \
- (hb_partial<Pos> (+this, hb_forward<_T> (_v))) \
+ (hb_partial<Pos> (+this, std::forward<_T> (_v))) \
static_assert (true, "")
#endif
@@ -343,22 +346,22 @@ struct
template <typename Pred, typename Val> auto
impl (Pred&& p, Val &&v, hb_priority<1>) const HB_AUTO_RETURN
(
- hb_deref (hb_forward<Pred> (p)).has (hb_forward<Val> (v))
+ hb_deref (std::forward<Pred> (p)).has (std::forward<Val> (v))
)
template <typename Pred, typename Val> auto
impl (Pred&& p, Val &&v, hb_priority<0>) const HB_AUTO_RETURN
(
- hb_invoke (hb_forward<Pred> (p),
- hb_forward<Val> (v))
+ hb_invoke (std::forward<Pred> (p),
+ std::forward<Val> (v))
)
public:
template <typename Pred, typename Val> auto
operator () (Pred&& p, Val &&v) const HB_RETURN (bool,
- impl (hb_forward<Pred> (p),
- hb_forward<Val> (v),
+ impl (std::forward<Pred> (p),
+ std::forward<Val> (v),
hb_prioritize)
)
}
@@ -371,22 +374,22 @@ struct
template <typename Pred, typename Val> auto
impl (Pred&& p, Val &&v, hb_priority<1>) const HB_AUTO_RETURN
(
- hb_has (hb_forward<Pred> (p),
- hb_forward<Val> (v))
+ hb_has (std::forward<Pred> (p),
+ std::forward<Val> (v))
)
template <typename Pred, typename Val> auto
impl (Pred&& p, Val &&v, hb_priority<0>) const HB_AUTO_RETURN
(
- hb_forward<Pred> (p) == hb_forward<Val> (v)
+ std::forward<Pred> (p) == std::forward<Val> (v)
)
public:
template <typename Pred, typename Val> auto
operator () (Pred&& p, Val &&v) const HB_RETURN (bool,
- impl (hb_forward<Pred> (p),
- hb_forward<Val> (v),
+ impl (std::forward<Pred> (p),
+ std::forward<Val> (v),
hb_prioritize)
)
}
@@ -399,20 +402,20 @@ struct
template <typename Proj, typename Val> auto
impl (Proj&& f, Val &&v, hb_priority<2>) const HB_AUTO_RETURN
(
- hb_deref (hb_forward<Proj> (f)).get (hb_forward<Val> (v))
+ hb_deref (std::forward<Proj> (f)).get (std::forward<Val> (v))
)
template <typename Proj, typename Val> auto
impl (Proj&& f, Val &&v, hb_priority<1>) const HB_AUTO_RETURN
(
- hb_invoke (hb_forward<Proj> (f),
- hb_forward<Val> (v))
+ hb_invoke (std::forward<Proj> (f),
+ std::forward<Val> (v))
)
template <typename Proj, typename Val> auto
impl (Proj&& f, Val &&v, hb_priority<0>) const HB_AUTO_RETURN
(
- hb_forward<Proj> (f)[hb_forward<Val> (v)]
+ std::forward<Proj> (f)[std::forward<Val> (v)]
)
public:
@@ -420,8 +423,8 @@ struct
template <typename Proj, typename Val> auto
operator () (Proj&& f, Val &&v) const HB_AUTO_RETURN
(
- impl (hb_forward<Proj> (f),
- hb_forward<Val> (v),
+ impl (std::forward<Proj> (f),
+ std::forward<Val> (v),
hb_prioritize)
)
}
@@ -434,19 +437,19 @@ struct
template <typename T1, typename T2> auto
impl (T1&& v1, T2 &&v2, hb_priority<2>) const HB_AUTO_RETURN
(
- hb_forward<T2> (v2).cmp (hb_forward<T1> (v1)) == 0
+ std::forward<T2> (v2).cmp (std::forward<T1> (v1)) == 0
)
template <typename T1, typename T2> auto
impl (T1&& v1, T2 &&v2, hb_priority<1>) const HB_AUTO_RETURN
(
- hb_forward<T1> (v1).cmp (hb_forward<T2> (v2)) == 0
+ std::forward<T1> (v1).cmp (std::forward<T2> (v2)) == 0
)
template <typename T1, typename T2> auto
impl (T1&& v1, T2 &&v2, hb_priority<0>) const HB_AUTO_RETURN
(
- hb_forward<T1> (v1) == hb_forward<T2> (v2)
+ std::forward<T1> (v1) == std::forward<T2> (v2)
)
public:
@@ -454,8 +457,8 @@ struct
template <typename T1, typename T2> auto
operator () (T1&& v1, T2 &&v2) const HB_AUTO_RETURN
(
- impl (hb_forward<T1> (v1),
- hb_forward<T2> (v2),
+ impl (std::forward<T1> (v1),
+ std::forward<T2> (v2),
hb_prioritize)
)
}
@@ -515,24 +518,34 @@ struct
{
template <typename T, typename T2> constexpr auto
operator () (T&& a, T2&& b) const HB_AUTO_RETURN
- (a <= b ? hb_forward<T> (a) : hb_forward<T2> (b))
+ (a <= b ? std::forward<T> (a) : std::forward<T2> (b))
}
HB_FUNCOBJ (hb_min);
struct
{
template <typename T, typename T2> constexpr auto
operator () (T&& a, T2&& b) const HB_AUTO_RETURN
- (a >= b ? hb_forward<T> (a) : hb_forward<T2> (b))
+ (a >= b ? std::forward<T> (a) : std::forward<T2> (b))
}
HB_FUNCOBJ (hb_max);
struct
{
template <typename T, typename T2, typename T3> constexpr auto
operator () (T&& x, T2&& min, T3&& max) const HB_AUTO_RETURN
- (hb_min (hb_max (hb_forward<T> (x), hb_forward<T2> (min)), hb_forward<T3> (max)))
+ (hb_min (hb_max (std::forward<T> (x), std::forward<T2> (min)), std::forward<T3> (max)))
}
HB_FUNCOBJ (hb_clamp);
+struct
+{
+ template <typename T> void
+ operator () (T& a, T& b) const
+ {
+ using std::swap; // allow ADL
+ swap (a, b);
+ }
+}
+HB_FUNCOBJ (hb_swap);
/*
* Bithacks.
@@ -795,7 +808,7 @@ hb_ceil_to_4 (unsigned int v)
template <typename T> static inline bool
hb_in_range (T u, T lo, T hi)
{
- static_assert (!hb_is_signed<T>::value, "");
+ static_assert (!std::is_signed<T>::value, "");
/* The casts below are important as if T is smaller than int,
* the subtract results will become a signed int! */
diff --git a/thirdparty/harfbuzz/src/hb-array.hh b/thirdparty/harfbuzz/src/hb-array.hh
index ab0dd6ebe3..dd61509b2e 100644
--- a/thirdparty/harfbuzz/src/hb-array.hh
+++ b/thirdparty/harfbuzz/src/hb-array.hh
@@ -50,10 +50,10 @@ struct hb_array_t : hb_iter_with_fallback_t<hb_array_t<Type>, Type&>
/*
* Constructors.
*/
- hb_array_t () : arrayZ (nullptr), length (0), backwards_length (0) {}
- hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_), backwards_length (0) {}
+ hb_array_t () = default;
+ hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
template <unsigned int length_>
- hb_array_t (Type (&array_)[length_]) : arrayZ (array_), length (length_), backwards_length (0) {}
+ hb_array_t (Type (&array_)[length_]) : hb_array_t (array_, length_) {}
template <typename U,
hb_enable_if (hb_is_cr_convertible(U, Type))>
@@ -281,9 +281,9 @@ struct hb_array_t : hb_iter_with_fallback_t<hb_array_t<Type>, Type&>
*/
public:
- Type *arrayZ;
- unsigned int length;
- unsigned int backwards_length;
+ Type *arrayZ = nullptr;
+ unsigned int length = 0;
+ unsigned int backwards_length = 0;
};
template <typename T> inline hb_array_t<T>
hb_array (T *array, unsigned int length)
@@ -302,7 +302,7 @@ struct hb_sorted_array_t :
static constexpr bool is_random_access_iterator = true;
static constexpr bool is_sorted_iterator = true;
- hb_sorted_array_t () : hb_array_t<Type> () {}
+ hb_sorted_array_t () = default;
hb_sorted_array_t (Type *array_, unsigned int length_) : hb_array_t<Type> (array_, length_) {}
template <unsigned int length_>
hb_sorted_array_t (Type (&array_)[length_]) : hb_array_t<Type> (array_) {}
diff --git a/thirdparty/harfbuzz/src/hb-atomic.hh b/thirdparty/harfbuzz/src/hb-atomic.hh
index 93265f655f..e640d1b586 100644
--- a/thirdparty/harfbuzz/src/hb-atomic.hh
+++ b/thirdparty/harfbuzz/src/hb-atomic.hh
@@ -102,20 +102,12 @@ _hb_atomic_ptr_impl_cmplexch (const void **P, const void *O_, const void *N)
#define hb_atomic_ptr_impl_cmpexch(P,O,N) _hb_atomic_ptr_impl_cmplexch ((const void **) (P), (O), (N))
-#elif defined(HB_NO_MT)
+#else /* defined(HB_NO_MT) */
#define hb_atomic_int_impl_add(AI, V) ((*(AI) += (V)) - (V))
-
#define _hb_memory_barrier() do {} while (0)
-
#define hb_atomic_ptr_impl_cmpexch(P,O,N) (* (void **) (P) == (void *) (O) ? (* (void **) (P) = (void *) (N), true) : false)
-
-#else
-
-#error "Could not find any system to define atomic_int macros."
-#error "Check hb-atomic.hh for possible resolutions."
-
#endif
diff --git a/thirdparty/harfbuzz/src/hb-bimap.hh b/thirdparty/harfbuzz/src/hb-bimap.hh
index d409880751..d466af8b60 100644
--- a/thirdparty/harfbuzz/src/hb-bimap.hh
+++ b/thirdparty/harfbuzz/src/hb-bimap.hh
@@ -33,15 +33,14 @@
/* Bi-directional map */
struct hb_bimap_t
{
- hb_bimap_t () { init (); }
- ~hb_bimap_t () { fini (); }
-
+ /* XXX(remove) */
void init ()
{
forw_map.init ();
back_map.init ();
}
+ /* XXX(remove) */
void fini ()
{
forw_map.fini ();
@@ -99,14 +98,6 @@ struct hb_bimap_t
/* Inremental bimap: only lhs is given, rhs is incrementally assigned */
struct hb_inc_bimap_t : hb_bimap_t
{
- hb_inc_bimap_t () { init (); }
-
- void init ()
- {
- hb_bimap_t::init ();
- next_value = 0;
- }
-
/* Add a mapping from lhs to rhs with a unique value if lhs is unknown.
* Return the rhs value as the result.
*/
@@ -165,7 +156,7 @@ struct hb_inc_bimap_t : hb_bimap_t
}
protected:
- unsigned int next_value;
+ unsigned int next_value = 0;
};
#endif /* HB_BIMAP_HH */
diff --git a/thirdparty/harfbuzz/src/hb-bit-set-invertible.hh b/thirdparty/harfbuzz/src/hb-bit-set-invertible.hh
index f48b72fe63..0832b0fc23 100644
--- a/thirdparty/harfbuzz/src/hb-bit-set-invertible.hh
+++ b/thirdparty/harfbuzz/src/hb-bit-set-invertible.hh
@@ -35,10 +35,20 @@
struct hb_bit_set_invertible_t
{
hb_bit_set_t s;
- bool inverted;
-
- hb_bit_set_invertible_t () { init (); }
- ~hb_bit_set_invertible_t () { fini (); }
+ bool inverted = false;
+
+ hb_bit_set_invertible_t () = default;
+ hb_bit_set_invertible_t (hb_bit_set_invertible_t& o) = default;
+ hb_bit_set_invertible_t (hb_bit_set_invertible_t&& o) = default;
+ hb_bit_set_invertible_t& operator= (const hb_bit_set_invertible_t& o) = default;
+ hb_bit_set_invertible_t& operator= (hb_bit_set_invertible_t&& o) = default;
+ friend void swap (hb_bit_set_invertible_t &a, hb_bit_set_invertible_t &b)
+ {
+ if (likely (!a.s.successful || !b.s.successful))
+ return;
+ hb_swap (a.inverted, b.inverted);
+ hb_swap (a.s, b.s);
+ }
void init () { s.init (); inverted = false; }
void fini () { s.fini (); }
diff --git a/thirdparty/harfbuzz/src/hb-bit-set.hh b/thirdparty/harfbuzz/src/hb-bit-set.hh
index c21778d88e..a471ee48b5 100644
--- a/thirdparty/harfbuzz/src/hb-bit-set.hh
+++ b/thirdparty/harfbuzz/src/hb-bit-set.hh
@@ -35,13 +35,22 @@
struct hb_bit_set_t
{
- hb_bit_set_t () { init (); }
- ~hb_bit_set_t () { fini (); }
+ hb_bit_set_t () = default;
+ ~hb_bit_set_t () = default;
hb_bit_set_t (const hb_bit_set_t& other) : hb_bit_set_t () { set (other); }
- void operator= (const hb_bit_set_t& other) { set (other); }
- // TODO Add move construtor/assign
- // TODO Add constructor for Iterator; with specialization for (sorted) vector / array?
+ hb_bit_set_t ( hb_bit_set_t&& other) : hb_bit_set_t () { hb_swap (*this, other); }
+ hb_bit_set_t& operator= (const hb_bit_set_t& other) { set (other); return *this; }
+ hb_bit_set_t& operator= (hb_bit_set_t&& other) { hb_swap (*this, other); return *this; }
+ friend void swap (hb_bit_set_t &a, hb_bit_set_t &b)
+ {
+ if (likely (!a.successful || !b.successful))
+ return;
+ hb_swap (a.population, b.population);
+ hb_swap (a.last_page_lookup, b.last_page_lookup);
+ hb_swap (a.page_map, b.page_map);
+ hb_swap (a.pages, b.pages);
+ }
void init ()
{
@@ -67,9 +76,9 @@ struct hb_bit_set_t
uint32_t index;
};
- bool successful; /* Allocations successful */
- mutable unsigned int population;
- mutable unsigned int last_page_lookup;
+ bool successful = true; /* Allocations successful */
+ mutable unsigned int population = 0;
+ mutable unsigned int last_page_lookup = 0;
hb_sorted_vector_t<page_map_t> page_map;
hb_vector_t<page_t> pages;
diff --git a/thirdparty/harfbuzz/src/hb-buffer.cc b/thirdparty/harfbuzz/src/hb-buffer.cc
index c6591ca230..b4f7f72374 100644
--- a/thirdparty/harfbuzz/src/hb-buffer.cc
+++ b/thirdparty/harfbuzz/src/hb-buffer.cc
@@ -224,6 +224,7 @@ hb_buffer_t::reset ()
flags = HB_BUFFER_FLAG_DEFAULT;
replacement = HB_BUFFER_REPLACEMENT_CODEPOINT_DEFAULT;
invisible = 0;
+ not_found = 0;
clear ();
}
@@ -608,6 +609,7 @@ DEFINE_NULL_INSTANCE (hb_buffer_t) =
HB_BUFFER_CLUSTER_LEVEL_DEFAULT,
HB_BUFFER_REPLACEMENT_CODEPOINT_DEFAULT,
0, /* invisible */
+ 0, /* not_found */
HB_BUFFER_SCRATCH_FLAG_DEFAULT,
HB_BUFFER_MAX_LEN_DEFAULT,
HB_BUFFER_MAX_OPS_DEFAULT,
@@ -1158,6 +1160,46 @@ hb_buffer_get_invisible_glyph (hb_buffer_t *buffer)
return buffer->invisible;
}
+/**
+ * hb_buffer_set_not_found_glyph:
+ * @buffer: An #hb_buffer_t
+ * @not_found: the not-found #hb_codepoint_t
+ *
+ * Sets the #hb_codepoint_t that replaces characters not found in
+ * the font during shaping.
+ *
+ * The not-found glyph defaults to zero, sometimes knows as the
+ * ".notdef" glyph. This API allows for differentiating the two.
+ *
+ * Since: 3.1.0
+ **/
+void
+hb_buffer_set_not_found_glyph (hb_buffer_t *buffer,
+ hb_codepoint_t not_found)
+{
+ if (unlikely (hb_object_is_immutable (buffer)))
+ return;
+
+ buffer->not_found = not_found;
+}
+
+/**
+ * hb_buffer_get_not_found_glyph:
+ * @buffer: An #hb_buffer_t
+ *
+ * See hb_buffer_set_not_found_glyph().
+ *
+ * Return value:
+ * The @buffer not-found #hb_codepoint_t
+ *
+ * Since: 3.1.0
+ **/
+hb_codepoint_t
+hb_buffer_get_not_found_glyph (hb_buffer_t *buffer)
+{
+ return buffer->not_found;
+}
+
/**
* hb_buffer_reset:
diff --git a/thirdparty/harfbuzz/src/hb-buffer.h b/thirdparty/harfbuzz/src/hb-buffer.h
index 865ccb2273..a183cb9d4a 100644
--- a/thirdparty/harfbuzz/src/hb-buffer.h
+++ b/thirdparty/harfbuzz/src/hb-buffer.h
@@ -383,6 +383,13 @@ hb_buffer_set_invisible_glyph (hb_buffer_t *buffer,
HB_EXTERN hb_codepoint_t
hb_buffer_get_invisible_glyph (hb_buffer_t *buffer);
+HB_EXTERN void
+hb_buffer_set_not_found_glyph (hb_buffer_t *buffer,
+ hb_codepoint_t not_found);
+
+HB_EXTERN hb_codepoint_t
+hb_buffer_get_not_found_glyph (hb_buffer_t *buffer);
+
HB_EXTERN void
hb_buffer_reset (hb_buffer_t *buffer);
diff --git a/thirdparty/harfbuzz/src/hb-buffer.hh b/thirdparty/harfbuzz/src/hb-buffer.hh
index 8635ebd35f..bde28933e4 100644
--- a/thirdparty/harfbuzz/src/hb-buffer.hh
+++ b/thirdparty/harfbuzz/src/hb-buffer.hh
@@ -93,6 +93,7 @@ struct hb_buffer_t
hb_buffer_cluster_level_t cluster_level;
hb_codepoint_t replacement; /* U+FFFD or something else. */
hb_codepoint_t invisible; /* 0 or something else. */
+ hb_codepoint_t not_found; /* 0 or something else. */
hb_buffer_scratch_flags_t scratch_flags; /* Have space-fallback, etc. */
unsigned int max_len; /* Maximum allowed len. */
int max_ops; /* Maximum allowed operations. */
diff --git a/thirdparty/harfbuzz/src/hb-debug.hh b/thirdparty/harfbuzz/src/hb-debug.hh
index f80c8980ba..3ac7440e80 100644
--- a/thirdparty/harfbuzz/src/hb-debug.hh
+++ b/thirdparty/harfbuzz/src/hb-debug.hh
@@ -302,7 +302,7 @@ struct hb_auto_trace_t
{
if (unlikely (returned)) {
fprintf (stderr, "OUCH, double calls to return_trace(). This is a bug, please report.\n");
- return hb_forward<T> (v);
+ return std::forward<T> (v);
}
_hb_debug_msg<max_level> (what, obj, func, true, plevel ? *plevel : 1, -1,
@@ -311,7 +311,7 @@ struct hb_auto_trace_t
if (plevel) --*plevel;
plevel = nullptr;
returned = true;
- return hb_forward<T> (v);
+ return std::forward<T> (v);
}
private:
@@ -333,7 +333,7 @@ struct hb_auto_trace_t<0, ret_t>
template <typename T>
T ret (T&& v,
const char *func HB_UNUSED = nullptr,
- unsigned int line HB_UNUSED = 0) { return hb_forward<T> (v); }
+ unsigned int line HB_UNUSED = 0) { return std::forward<T> (v); }
};
/* For disabled tracing; optimize out everything.
@@ -343,7 +343,7 @@ struct hb_no_trace_t {
template <typename T>
T ret (T&& v,
const char *func HB_UNUSED = nullptr,
- unsigned int line HB_UNUSED = 0) { return hb_forward<T> (v); }
+ unsigned int line HB_UNUSED = 0) { return std::forward<T> (v); }
};
#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
diff --git a/thirdparty/harfbuzz/src/hb-directwrite.cc b/thirdparty/harfbuzz/src/hb-directwrite.cc
index 8f6d73b639..db7b53b259 100644
--- a/thirdparty/harfbuzz/src/hb-directwrite.cc
+++ b/thirdparty/harfbuzz/src/hb-directwrite.cc
@@ -43,6 +43,14 @@
* Functions for using HarfBuzz with DirectWrite fonts.
**/
+/* Declare object creator for dynamic support of DWRITE */
+typedef HRESULT (* WINAPI t_DWriteCreateFactory)(
+ DWRITE_FACTORY_TYPE factoryType,
+ REFIID iid,
+ IUnknown **factory
+);
+
+
/*
* DirectWrite font stream helpers
*/
@@ -137,6 +145,7 @@ public:
struct hb_directwrite_face_data_t
{
+ HMODULE dwrite_dll;
IDWriteFactory *dwriteFactory;
IDWriteFontFile *fontFile;
DWriteFontFileStream *fontFileStream;
@@ -158,12 +167,33 @@ _hb_directwrite_shaper_face_data_create (hb_face_t *face)
return nullptr; \
} HB_STMT_END
+ data->dwrite_dll = LoadLibrary (TEXT ("DWRITE"));
+ if (unlikely (!data->dwrite_dll))
+ FAIL ("Cannot find DWrite.DLL");
+
+ t_DWriteCreateFactory p_DWriteCreateFactory;
+
+#if defined(__GNUC__)
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wcast-function-type"
+#endif
+
+ p_DWriteCreateFactory = (t_DWriteCreateFactory)
+ GetProcAddress (data->dwrite_dll, "DWriteCreateFactory");
+
+#if defined(__GNUC__)
+#pragma GCC diagnostic pop
+#endif
+
+ if (unlikely (!p_DWriteCreateFactory))
+ FAIL ("Cannot find DWriteCreateFactory().");
+
HRESULT hr;
// TODO: factory and fontFileLoader should be cached separately
IDWriteFactory* dwriteFactory;
- hr = DWriteCreateFactory (DWRITE_FACTORY_TYPE_SHARED, __uuidof (IDWriteFactory),
- (IUnknown**) &dwriteFactory);
+ hr = p_DWriteCreateFactory (DWRITE_FACTORY_TYPE_SHARED, __uuidof (IDWriteFactory),
+ (IUnknown**) &dwriteFactory);
if (unlikely (hr != S_OK))
FAIL ("Failed to run DWriteCreateFactory().");
@@ -227,6 +257,8 @@ _hb_directwrite_shaper_face_data_destroy (hb_directwrite_face_data_t *data)
delete data->fontFileStream;
if (data->faceBlob)
hb_blob_destroy (data->faceBlob);
+ if (data->dwrite_dll)
+ FreeLibrary (data->dwrite_dll);
if (data)
delete data;
}
diff --git a/thirdparty/harfbuzz/src/hb-dispatch.hh b/thirdparty/harfbuzz/src/hb-dispatch.hh
index 4b2b65a8de..37ca681465 100644
--- a/thirdparty/harfbuzz/src/hb-dispatch.hh
+++ b/thirdparty/harfbuzz/src/hb-dispatch.hh
@@ -50,7 +50,7 @@ struct hb_dispatch_context_t
bool may_dispatch (const T *obj HB_UNUSED, const F *format HB_UNUSED) { return true; }
template <typename T, typename ...Ts>
return_t dispatch (const T &obj, Ts&&... ds)
- { return obj.dispatch (thiz (), hb_forward<Ts> (ds)...); }
+ { return obj.dispatch (thiz (), std::forward<Ts> (ds)...); }
static return_t no_dispatch_return_value () { return Context::default_return_value (); }
static bool stop_sublookup_iteration (const return_t r HB_UNUSED) { return false; }
unsigned debug_depth = 0;
diff --git a/thirdparty/harfbuzz/src/hb-font.hh b/thirdparty/harfbuzz/src/hb-font.hh
index 8fc7f44d44..1b7f445e8b 100644
--- a/thirdparty/harfbuzz/src/hb-font.hh
+++ b/thirdparty/harfbuzz/src/hb-font.hh
@@ -217,9 +217,10 @@ struct hb_font_t
}
hb_bool_t get_nominal_glyph (hb_codepoint_t unicode,
- hb_codepoint_t *glyph)
+ hb_codepoint_t *glyph,
+ hb_codepoint_t not_found = 0)
{
- *glyph = 0;
+ *glyph = not_found;
return klass->get.f.nominal_glyph (this, user_data,
unicode, glyph,
klass->user_data.nominal_glyph);
@@ -238,9 +239,10 @@ struct hb_font_t
}
hb_bool_t get_variation_glyph (hb_codepoint_t unicode, hb_codepoint_t variation_selector,
- hb_codepoint_t *glyph)
+ hb_codepoint_t *glyph,
+ hb_codepoint_t not_found = 0)
{
- *glyph = 0;
+ *glyph = not_found;
return klass->get.f.variation_glyph (this, user_data,
unicode, variation_selector, glyph,
klass->user_data.variation_glyph);
@@ -618,9 +620,7 @@ struct hb_font_t
}
hb_position_t em_mult (int16_t v, int64_t mult)
- {
- return (hb_position_t) ((v * mult) >> 16);
- }
+ { return (hb_position_t) ((v * mult + 32768) >> 16); }
hb_position_t em_scalef (float v, int scale)
{ return (hb_position_t) roundf (v * scale / face->get_upem ()); }
float em_fscale (int16_t v, int scale)
diff --git a/thirdparty/harfbuzz/src/hb-iter.hh b/thirdparty/harfbuzz/src/hb-iter.hh
index b8c4472636..87b8ed880d 100644
--- a/thirdparty/harfbuzz/src/hb-iter.hh
+++ b/thirdparty/harfbuzz/src/hb-iter.hh
@@ -162,7 +162,7 @@ struct
{
template <typename T> hb_iter_type<T>
operator () (T&& c) const
- { return hb_deref (hb_forward<T> (c)).iter (); }
+ { return hb_deref (std::forward<T> (c)).iter (); }
/* Specialization for C arrays. */
@@ -353,7 +353,7 @@ static inline auto end (Iterable&& iterable) HB_AUTO_RETURN (hb_iter (iterable).
template <typename Lhs, typename Rhs,
hb_requires (hb_is_iterator (Lhs))>
static inline auto
-operator | (Lhs&& lhs, Rhs&& rhs) HB_AUTO_RETURN (hb_forward<Rhs> (rhs) (hb_forward<Lhs> (lhs)))
+operator | (Lhs&& lhs, Rhs&& rhs) HB_AUTO_RETURN (std::forward<Rhs> (rhs) (std::forward<Lhs> (lhs)))
/* hb_map(), hb_filter(), hb_reduce() */
@@ -674,8 +674,8 @@ struct hb_iota_iter_t :
template <typename S2 = S>
auto
inc (hb_type_identity<S2> s, hb_priority<1>)
- -> hb_void_t<decltype (hb_invoke (hb_forward<S2> (s), hb_declval<T&> ()))>
- { v = hb_invoke (hb_forward<S2> (s), v); }
+ -> hb_void_t<decltype (hb_invoke (std::forward<S2> (s), hb_declval<T&> ()))>
+ { v = hb_invoke (std::forward<S2> (s), v); }
void
inc (S s, hb_priority<0>)
@@ -874,7 +874,7 @@ struct
Proj&& f = hb_identity) const
{
for (auto it = hb_iter (c); it; ++it)
- if (!hb_match (hb_forward<Pred> (p), hb_get (hb_forward<Proj> (f), *it)))
+ if (!hb_match (std::forward<Pred> (p), hb_get (std::forward<Proj> (f), *it)))
return false;
return true;
}
@@ -891,7 +891,7 @@ struct
Proj&& f = hb_identity) const
{
for (auto it = hb_iter (c); it; ++it)
- if (hb_match (hb_forward<Pred> (p), hb_get (hb_forward<Proj> (f), *it)))
+ if (hb_match (std::forward<Pred> (p), hb_get (std::forward<Proj> (f), *it)))
return true;
return false;
}
@@ -908,7 +908,7 @@ struct
Proj&& f = hb_identity) const
{
for (auto it = hb_iter (c); it; ++it)
- if (hb_match (hb_forward<Pred> (p), hb_get (hb_forward<Proj> (f), *it)))
+ if (hb_match (std::forward<Pred> (p), hb_get (std::forward<Proj> (f), *it)))
return false;
return true;
}
diff --git a/thirdparty/harfbuzz/src/hb-map.hh b/thirdparty/harfbuzz/src/hb-map.hh
index dcd5267d74..bb4a0eb5d1 100644
--- a/thirdparty/harfbuzz/src/hb-map.hh
+++ b/thirdparty/harfbuzz/src/hb-map.hh
@@ -35,16 +35,35 @@
*/
template <typename K, typename V,
- K kINVALID = hb_is_pointer (K) ? 0 : hb_is_signed (K) ? hb_int_min (K) : (K) -1,
- V vINVALID = hb_is_pointer (V) ? 0 : hb_is_signed (V) ? hb_int_min (V) : (V) -1>
+ K kINVALID = hb_is_pointer (K) ? 0 : std::is_signed<K>::value ? hb_int_min (K) : (K) -1,
+ V vINVALID = hb_is_pointer (V) ? 0 : std::is_signed<V>::value ? hb_int_min (V) : (V) -1>
struct hb_hashmap_t
{
- HB_DELETE_COPY_ASSIGN (hb_hashmap_t);
+ static constexpr K INVALID_KEY = kINVALID;
+ static constexpr V INVALID_VALUE = vINVALID;
+
hb_hashmap_t () { init (); }
~hb_hashmap_t () { fini (); }
- static_assert (hb_is_integral (K) || hb_is_pointer (K), "");
- static_assert (hb_is_integral (V) || hb_is_pointer (V), "");
+ hb_hashmap_t (const hb_hashmap_t& o) : hb_hashmap_t () { hb_copy (o, *this); }
+ hb_hashmap_t (hb_hashmap_t&& o) : hb_hashmap_t () { hb_swap (*this, o); }
+ hb_hashmap_t& operator= (const hb_hashmap_t& o) { hb_copy (o, *this); return *this; }
+ hb_hashmap_t& operator= (hb_hashmap_t&& o) { hb_swap (*this, o); return *this; }
+
+ hb_hashmap_t (std::initializer_list<hb_pair_t<K, V>> lst) : hb_hashmap_t ()
+ {
+ for (auto&& item : lst)
+ set (item.first, item.second);
+ }
+ template <typename Iterable,
+ hb_requires (hb_is_iterable (Iterable))>
+ hb_hashmap_t (const Iterable &o) : hb_hashmap_t ()
+ {
+ hb_copy (o, *this);
+ }
+
+ static_assert (std::is_integral<K>::value || hb_is_pointer (K), "");
+ static_assert (std::is_integral<V>::value || hb_is_pointer (V), "");
struct item_t
{
@@ -70,6 +89,16 @@ struct hb_hashmap_t
unsigned int prime;
item_t *items;
+ friend void swap (hb_hashmap_t& a, hb_hashmap_t& b)
+ {
+ if (unlikely (!a.successful || !b.successful))
+ return;
+ hb_swap (a.population, b.population);
+ hb_swap (a.occupancy, b.occupancy);
+ hb_swap (a.mask, b.mask);
+ hb_swap (a.prime, b.prime);
+ hb_swap (a.items, b.items);
+ }
void init_shallow ()
{
successful = true;
@@ -133,17 +162,15 @@ struct hb_hashmap_t
if (old_items[i].is_real ())
set_with_hash (old_items[i].key,
old_items[i].hash,
- old_items[i].value);
+ std::move (old_items[i].value));
hb_free (old_items);
return true;
}
- bool set (K key, V value)
- {
- return set_with_hash (key, hb_hash (key), value);
- }
+ bool set (K key, const V& value) { return set_with_hash (key, hb_hash (key), value); }
+ bool set (K key, V&& value) { return set_with_hash (key, hb_hash (key), std::move (value)); }
V get (K key) const
{
@@ -213,7 +240,8 @@ struct hb_hashmap_t
protected:
- bool set_with_hash (K key, uint32_t hash, V value)
+ template <typename VV>
+ bool set_with_hash (K key, uint32_t hash, VV&& value)
{
if (unlikely (!successful)) return false;
if (unlikely (key == kINVALID)) return true;
@@ -321,7 +349,22 @@ struct hb_hashmap_t
struct hb_map_t : hb_hashmap_t<hb_codepoint_t,
hb_codepoint_t,
HB_MAP_VALUE_INVALID,
- HB_MAP_VALUE_INVALID> {};
-
+ HB_MAP_VALUE_INVALID>
+{
+ using hashmap = hb_hashmap_t<hb_codepoint_t,
+ hb_codepoint_t,
+ HB_MAP_VALUE_INVALID,
+ HB_MAP_VALUE_INVALID>;
+
+ hb_map_t () = default;
+ ~hb_map_t () = default;
+ hb_map_t (hb_map_t& o) = default;
+ hb_map_t& operator= (const hb_map_t& other) = default;
+ hb_map_t& operator= (hb_map_t&& other) = default;
+ hb_map_t (std::initializer_list<hb_pair_t<hb_codepoint_t, hb_codepoint_t>> lst) : hashmap (lst) {}
+ template <typename Iterable,
+ hb_requires (hb_is_iterable (Iterable))>
+ hb_map_t (const Iterable &o) : hashmap (o) {}
+};
#endif /* HB_MAP_HH */
diff --git a/thirdparty/harfbuzz/src/hb-meta.hh b/thirdparty/harfbuzz/src/hb-meta.hh
index a714bc2bf0..0ea5774a9f 100644
--- a/thirdparty/harfbuzz/src/hb-meta.hh
+++ b/thirdparty/harfbuzz/src/hb-meta.hh
@@ -29,6 +29,9 @@
#include "hb.hh"
+#include <type_traits>
+#include <utility>
+
/*
* C++ template meta-programming & fundamentals used with them.
@@ -129,40 +132,7 @@ template <typename T> using hb_add_pointer = decltype (_hb_try_add_pointer<T> (h
/* TODO Add feature-parity to std::decay. */
template <typename T> using hb_decay = hb_remove_const<hb_remove_reference<T>>;
-
-template<bool B, class T, class F>
-struct _hb_conditional { typedef T type; };
-template<class T, class F>
-struct _hb_conditional<false, T, F> { typedef F type; };
-template<bool B, class T, class F>
-using hb_conditional = typename _hb_conditional<B, T, F>::type;
-
-
-template <typename From, typename To>
-struct hb_is_convertible
-{
- private:
- static constexpr bool from_void = hb_is_same (void, hb_decay<From>);
- static constexpr bool to_void = hb_is_same (void, hb_decay<To> );
- static constexpr bool either_void = from_void || to_void;
- static constexpr bool both_void = from_void && to_void;
-
- static hb_true_type impl2 (hb_conditional<to_void, int, To>);
-
- template <typename T>
- static auto impl (hb_priority<1>) -> decltype (impl2 (hb_declval (T)));
- template <typename T>
- static hb_false_type impl (hb_priority<0>);
- public:
- static constexpr bool value = both_void ||
- (!either_void &&
- decltype (impl<hb_conditional<from_void, int, From>> (hb_prioritize))::value);
-};
-#define hb_is_convertible(From,To) hb_is_convertible<From, To>::value
-
-template <typename Base, typename Derived>
-using hb_is_base_of = hb_is_convertible<hb_decay<Derived> *, hb_decay<Base> *>;
-#define hb_is_base_of(Base,Derived) hb_is_base_of<Base, Derived>::value
+#define hb_is_convertible(From,To) std::is_convertible<From, To>::value
template <typename From, typename To>
using hb_is_cr_convertible = hb_bool_constant<
@@ -172,20 +142,11 @@ using hb_is_cr_convertible = hb_bool_constant<
>;
#define hb_is_cr_convertible(From,To) hb_is_cr_convertible<From, To>::value
-/* std::move and std::forward */
-
-template <typename T>
-static constexpr hb_remove_reference<T>&& hb_move (T&& t) { return (hb_remove_reference<T>&&) (t); }
-
-template <typename T>
-static constexpr T&& hb_forward (hb_remove_reference<T>& t) { return (T&&) t; }
-template <typename T>
-static constexpr T&& hb_forward (hb_remove_reference<T>&& t) { return (T&&) t; }
struct
{
template <typename T> constexpr auto
- operator () (T&& v) const HB_AUTO_RETURN (hb_forward<T> (v))
+ operator () (T&& v) const HB_AUTO_RETURN (std::forward<T> (v))
template <typename T> constexpr auto
operator () (T *v) const HB_AUTO_RETURN (*v)
@@ -195,7 +156,7 @@ HB_FUNCOBJ (hb_deref);
struct
{
template <typename T> constexpr auto
- operator () (T&& v) const HB_AUTO_RETURN (hb_forward<T> (v))
+ operator () (T&& v) const HB_AUTO_RETURN (std::forward<T> (v))
template <typename T> constexpr auto
operator () (T& v) const HB_AUTO_RETURN (hb_addressof (v))
@@ -226,50 +187,6 @@ struct hb_reference_wrapper<T&>
/* Type traits */
-template <typename T>
-using hb_is_integral = hb_bool_constant<
- hb_is_same (hb_decay<T>, char) ||
- hb_is_same (hb_decay<T>, signed char) ||
- hb_is_same (hb_decay<T>, unsigned char) ||
- hb_is_same (hb_decay<T>, signed int) ||
- hb_is_same (hb_decay<T>, unsigned int) ||
- hb_is_same (hb_decay<T>, signed short) ||
- hb_is_same (hb_decay<T>, unsigned short) ||
- hb_is_same (hb_decay<T>, signed long) ||
- hb_is_same (hb_decay<T>, unsigned long) ||
- hb_is_same (hb_decay<T>, signed long long) ||
- hb_is_same (hb_decay<T>, unsigned long long) ||
- false
->;
-#define hb_is_integral(T) hb_is_integral<T>::value
-template <typename T>
-using hb_is_floating_point = hb_bool_constant<
- hb_is_same (hb_decay<T>, float) ||
- hb_is_same (hb_decay<T>, double) ||
- hb_is_same (hb_decay<T>, long double) ||
- false
->;
-#define hb_is_floating_point(T) hb_is_floating_point<T>::value
-template <typename T>
-using hb_is_arithmetic = hb_bool_constant<
- hb_is_integral (T) ||
- hb_is_floating_point (T) ||
- false
->;
-#define hb_is_arithmetic(T) hb_is_arithmetic<T>::value
-
-
-template <typename T, bool is_arithmetic> struct hb_is_signed_;
-template <typename T> struct hb_is_signed_<T, false> : hb_false_type {};
-template <typename T> struct hb_is_signed_<T, true> : hb_bool_constant<(T) -1 < (T) 0> {};
-template <typename T> struct hb_is_signed : hb_is_signed_<T, hb_is_arithmetic (T)> {};
-#define hb_is_signed(T) hb_is_signed<T>::value
-template <typename T, bool is_arithmetic> struct hb_is_unsigned_;
-template <typename T> struct hb_is_unsigned_<T, false> : hb_false_type {};
-template <typename T> struct hb_is_unsigned_<T, true> : hb_bool_constant<(T) 0 < (T) -1> {};
-template <typename T> struct hb_is_unsigned : hb_is_unsigned_<T, hb_is_arithmetic (T)> {};
-#define hb_is_unsigned(T) hb_is_unsigned<T>::value
-
template <typename T> struct hb_int_min;
template <> struct hb_int_min<char> : hb_integral_constant<char, CHAR_MIN> {};
template <> struct hb_int_min<signed char> : hb_integral_constant<signed char, SCHAR_MIN> {};
@@ -309,108 +226,6 @@ template <> struct hb_int_max<unsigned long long> : hb_integral_constant<unsigne
TypeName(const TypeName&) = delete; \
void operator=(const TypeName&) = delete
-template <typename T, typename>
-struct _hb_is_destructible : hb_false_type {};
-template <typename T>
-struct _hb_is_destructible<T, hb_void_t<decltype (hb_declval (T).~T ())>> : hb_true_type {};
-template <typename T>
-using hb_is_destructible = _hb_is_destructible<T, void>;
-#define hb_is_destructible(T) hb_is_destructible<T>::value
-
-template <typename T, typename, typename ...Ts>
-struct _hb_is_constructible : hb_false_type {};
-template <typename T, typename ...Ts>
-struct _hb_is_constructible<T, hb_void_t<decltype (T (hb_declval (Ts)...))>, Ts...> : hb_true_type {};
-template <typename T, typename ...Ts>
-using hb_is_constructible = _hb_is_constructible<T, void, Ts...>;
-#define hb_is_constructible(...) hb_is_constructible<__VA_ARGS__>::value
-
-template <typename T>
-using hb_is_default_constructible = hb_is_constructible<T>;
-#define hb_is_default_constructible(T) hb_is_default_constructible<T>::value
-
-template <typename T>
-using hb_is_copy_constructible = hb_is_constructible<T, hb_add_lvalue_reference<hb_add_const<T>>>;
-#define hb_is_copy_constructible(T) hb_is_copy_constructible<T>::value
-
-template <typename T>
-using hb_is_move_constructible = hb_is_constructible<T, hb_add_rvalue_reference<hb_add_const<T>>>;
-#define hb_is_move_constructible(T) hb_is_move_constructible<T>::value
-
-template <typename T, typename U, typename>
-struct _hb_is_assignable : hb_false_type {};
-template <typename T, typename U>
-struct _hb_is_assignable<T, U, hb_void_t<decltype (hb_declval (T) = hb_declval (U))>> : hb_true_type {};
-template <typename T, typename U>
-using hb_is_assignable = _hb_is_assignable<T, U, void>;
-#define hb_is_assignable(T,U) hb_is_assignable<T, U>::value
-
-template <typename T>
-using hb_is_copy_assignable = hb_is_assignable<hb_add_lvalue_reference<T>,
- hb_add_lvalue_reference<hb_add_const<T>>>;
-#define hb_is_copy_assignable(T) hb_is_copy_assignable<T>::value
-
-template <typename T>
-using hb_is_move_assignable = hb_is_assignable<hb_add_lvalue_reference<T>,
- hb_add_rvalue_reference<T>>;
-#define hb_is_move_assignable(T) hb_is_move_assignable<T>::value
-
-/* Trivial versions. */
-
-template <typename T> union hb_trivial { T value; };
-
-template <typename T>
-using hb_is_trivially_destructible= hb_is_destructible<hb_trivial<T>>;
-#define hb_is_trivially_destructible(T) hb_is_trivially_destructible<T>::value
-
-/* Don't know how to do the following. */
-//template <typename T, typename ...Ts>
-//using hb_is_trivially_constructible= hb_is_constructible<hb_trivial<T>, hb_trivial<Ts>...>;
-//#define hb_is_trivially_constructible(...) hb_is_trivially_constructible<__VA_ARGS__>::value
-
-template <typename T>
-using hb_is_trivially_default_constructible= hb_is_default_constructible<hb_trivial<T>>;
-#define hb_is_trivially_default_constructible(T) hb_is_trivially_default_constructible<T>::value
-
-template <typename T>
-using hb_is_trivially_copy_constructible= hb_is_copy_constructible<hb_trivial<T>>;
-#define hb_is_trivially_copy_constructible(T) hb_is_trivially_copy_constructible<T>::value
-
-template <typename T>
-using hb_is_trivially_move_constructible= hb_is_move_constructible<hb_trivial<T>>;
-#define hb_is_trivially_move_constructible(T) hb_is_trivially_move_constructible<T>::value
-
-/* Don't know how to do the following. */
-//template <typename T, typename U>
-//using hb_is_trivially_assignable= hb_is_assignable<hb_trivial<T>, hb_trivial<U>>;
-//#define hb_is_trivially_assignable(T,U) hb_is_trivially_assignable<T, U>::value
-
-template <typename T>
-using hb_is_trivially_copy_assignable= hb_is_copy_assignable<hb_trivial<T>>;
-#define hb_is_trivially_copy_assignable(T) hb_is_trivially_copy_assignable<T>::value
-
-template <typename T>
-using hb_is_trivially_move_assignable= hb_is_move_assignable<hb_trivial<T>>;
-#define hb_is_trivially_move_assignable(T) hb_is_trivially_move_assignable<T>::value
-
-template <typename T>
-using hb_is_trivially_copyable= hb_bool_constant<
- hb_is_trivially_destructible (T) &&
- (!hb_is_move_assignable (T) || hb_is_trivially_move_assignable (T)) &&
- (!hb_is_move_constructible (T) || hb_is_trivially_move_constructible (T)) &&
- (!hb_is_copy_assignable (T) || hb_is_trivially_copy_assignable (T)) &&
- (!hb_is_copy_constructible (T) || hb_is_trivially_copy_constructible (T)) &&
- true
->;
-#define hb_is_trivially_copyable(T) hb_is_trivially_copyable<T>::value
-
-template <typename T>
-using hb_is_trivial= hb_bool_constant<
- hb_is_trivially_copyable (T) &&
- hb_is_trivially_default_constructible (T)
->;
-#define hb_is_trivial(T) hb_is_trivial<T>::value
-
/* hb_unwrap_type (T)
* If T has no T::type, returns T. Otherwise calls itself on T::type recursively.
*/
diff --git a/thirdparty/harfbuzz/src/hb-mutex.hh b/thirdparty/harfbuzz/src/hb-mutex.hh
index a9227a741d..6914b22450 100644
--- a/thirdparty/harfbuzz/src/hb-mutex.hh
+++ b/thirdparty/harfbuzz/src/hb-mutex.hh
@@ -47,7 +47,7 @@
/* Defined externally, i.e. in config.h; must have typedef'ed hb_mutex_impl_t as well. */
-#elif !defined(HB_NO_MT) && (defined(HAVE_PTHREAD) || defined(__APPLE__))
+#elif !defined(HB_NO_MT) && !defined(HB_MUTEX_IMPL_STD_MUTEX) && (defined(HAVE_PTHREAD) || defined(__APPLE__))
#include <pthread.h>
typedef pthread_mutex_t hb_mutex_impl_t;
@@ -57,7 +57,7 @@ typedef pthread_mutex_t hb_mutex_impl_t;
#define hb_mutex_impl_finish(M) pthread_mutex_destroy (M)
-#elif !defined(HB_NO_MT) && defined(_WIN32)
+#elif !defined(HB_NO_MT) && !defined(HB_MUTEX_IMPL_STD_MUTEX) && defined(_WIN32)
typedef CRITICAL_SECTION hb_mutex_impl_t;
#if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
@@ -70,7 +70,17 @@ typedef CRITICAL_SECTION hb_mutex_impl_t;
#define hb_mutex_impl_finish(M) DeleteCriticalSection (M)
-#elif defined(HB_NO_MT)
+#elif !defined(HB_NO_MT)
+
+#include <mutex>
+typedef std::mutex hb_mutex_impl_t;
+#define hb_mutex_impl_init(M) HB_STMT_START { new (M) hb_mutex_impl_t; } HB_STMT_END
+#define hb_mutex_impl_lock(M) (M)->lock ()
+#define hb_mutex_impl_unlock(M) (M)->unlock ()
+#define hb_mutex_impl_finish(M) HB_STMT_START { (M)->~hb_mutex_impl_t(); } HB_STMT_END
+
+
+#else /* defined(HB_NO_MT) */
typedef int hb_mutex_impl_t;
#define hb_mutex_impl_init(M) HB_STMT_START {} HB_STMT_END
@@ -79,22 +89,21 @@ typedef int hb_mutex_impl_t;
#define hb_mutex_impl_finish(M) HB_STMT_START {} HB_STMT_END
-#else
-
-#error "Could not find any system to define mutex macros."
-#error "Check hb-mutex.hh for possible resolutions."
-
#endif
struct hb_mutex_t
{
- hb_mutex_impl_t m;
-
- void init () { hb_mutex_impl_init (&m); }
- void lock () { hb_mutex_impl_lock (&m); }
- void unlock () { hb_mutex_impl_unlock (&m); }
- void fini () { hb_mutex_impl_finish (&m); }
+ /* Create space for, but do not initialize m. */
+ alignas(hb_mutex_impl_t) char m[sizeof (hb_mutex_impl_t)];
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wcast-align"
+ void init () { hb_mutex_impl_init ((hb_mutex_impl_t *) m); }
+ void lock () { hb_mutex_impl_lock ((hb_mutex_impl_t *) m); }
+ void unlock () { hb_mutex_impl_unlock ((hb_mutex_impl_t *) m); }
+ void fini () { hb_mutex_impl_finish ((hb_mutex_impl_t *) m); }
+#pragma GCC diagnostic pop
};
struct hb_lock_t
diff --git a/thirdparty/harfbuzz/src/hb-open-type.hh b/thirdparty/harfbuzz/src/hb-open-type.hh
index 49653ce97e..7e524177f6 100644
--- a/thirdparty/harfbuzz/src/hb-open-type.hh
+++ b/thirdparty/harfbuzz/src/hb-open-type.hh
@@ -64,7 +64,7 @@ struct IntType
IntType& operator = (Type i) { v = i; return *this; }
/* For reason we define cast out operator for signed/unsigned, instead of Type, see:
* https://github.com/harfbuzz/harfbuzz/pull/2875/commits/09836013995cab2b9f07577a179ad7b024130467 */
- operator hb_conditional<hb_is_signed (Type), signed, unsigned> () const { return v; }
+ operator typename std::conditional<std::is_signed<Type>::value, signed, unsigned>::type () const { return v; }
bool operator == (const IntType &o) const { return (Type) v == (Type) o.v; }
bool operator != (const IntType &o) const { return !(*this == o); }
@@ -86,7 +86,7 @@ struct IntType
return pb->cmp (*pa);
}
template <typename Type2,
- hb_enable_if (hb_is_integral (Type2) &&
+ hb_enable_if (std::is_integral<Type2>::value &&
sizeof (Type2) < sizeof (int) &&
sizeof (Type) < sizeof (int))>
int cmp (Type2 a) const
@@ -122,6 +122,15 @@ typedef IntType<int32_t> HBINT32; /* 32-bit signed integer. */
* Works for unsigned, but not signed, since we rely on compiler for sign-extension. */
typedef IntType<uint32_t, 3> HBUINT24; /* 24-bit unsigned integer. */
+/* 15-bit unsigned number; top bit used for extension. */
+struct HBUINT15 : HBUINT16
+{
+ /* TODO Flesh out; actually mask top bit. */
+ HBUINT15& operator = (uint16_t i ) { HBUINT16::operator= (i); return *this; }
+ public:
+ DEFINE_SIZE_STATIC (2);
+};
+
/* 16-bit signed integer (HBINT16) that describes a quantity in FUnits. */
typedef HBINT16 FWORD;
@@ -182,9 +191,9 @@ struct Tag : HBUINT32
};
/* Glyph index number, same as uint16 (length = 16 bits) */
-struct HBGlyphID : HBUINT16
+struct HBGlyphID16 : HBUINT16
{
- HBGlyphID& operator = (uint16_t i) { HBUINT16::operator= (i); return *this; }
+ HBGlyphID16& operator = (uint16_t i) { HBUINT16::operator= (i); return *this; }
};
/* Script/language-system/feature index */
@@ -332,7 +341,7 @@ struct OffsetTo : Offset<OffsetType, has_null>
s->push ();
- bool ret = c->dispatch (src_base+src, hb_forward<Ts> (ds)...);
+ bool ret = c->dispatch (src_base+src, std::forward<Ts> (ds)...);
if (ret || !has_null)
s->add_link (*this, s->pop_pack ());
@@ -349,7 +358,7 @@ struct OffsetTo : Offset<OffsetType, has_null>
*this = 0;
Type* obj = c->push<Type> ();
- bool ret = obj->serialize (c, hb_forward<Ts> (ds)...);
+ bool ret = obj->serialize (c, std::forward<Ts> (ds)...);
if (ret)
c->add_link (*this, c->pop_pack ());
@@ -375,7 +384,7 @@ struct OffsetTo : Offset<OffsetType, has_null>
c->push ();
- bool ret = c->copy (src_base+src, hb_forward<Ts> (ds)...);
+ bool ret = c->copy (src_base+src, std::forward<Ts> (ds)...);
c->add_link (*this, c->pop_pack (), whence, dst_bias);
@@ -401,7 +410,7 @@ struct OffsetTo : Offset<OffsetType, has_null>
TRACE_SANITIZE (this);
return_trace (sanitize_shallow (c, base) &&
(this->is_null () ||
- c->dispatch (StructAtOffset<Type> (base, *this), hb_forward<Ts> (ds)...) ||
+ c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
neuter (c)));
}
@@ -509,9 +518,9 @@ struct UnsizedArrayOf
{
TRACE_SANITIZE (this);
if (unlikely (!sanitize_shallow (c, count))) return_trace (false);
- if (!sizeof... (Ts) && hb_is_trivially_copyable (Type)) return_trace (true);
+ if (!sizeof... (Ts) && std::is_trivially_copyable<Type>::value) return_trace (true);
for (unsigned int i = 0; i < count; i++)
- if (unlikely (!c->dispatch (arrayZ[i], hb_forward<Ts> (ds)...)))
+ if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
return_trace (false);
return_trace (true);
}
@@ -556,7 +565,7 @@ struct UnsizedListOfOffset16To : UnsizedArray16OfOffsetTo<Type, OffsetType, has_
{
TRACE_SANITIZE (this);
return_trace ((UnsizedArray16OfOffsetTo<Type, OffsetType, has_null>
- ::sanitize (c, count, this, hb_forward<Ts> (ds)...)));
+ ::sanitize (c, count, this, std::forward<Ts> (ds)...)));
}
};
@@ -698,10 +707,10 @@ struct ArrayOf
{
TRACE_SANITIZE (this);
if (unlikely (!sanitize_shallow (c))) return_trace (false);
- if (!sizeof... (Ts) && hb_is_trivially_copyable (Type)) return_trace (true);
+ if (!sizeof... (Ts) && std::is_trivially_copyable<Type>::value) return_trace (true);
unsigned int count = len;
for (unsigned int i = 0; i < count; i++)
- if (unlikely (!c->dispatch (arrayZ[i], hb_forward<Ts> (ds)...)))
+ if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
return_trace (false);
return_trace (true);
}
@@ -759,7 +768,7 @@ struct List16OfOffset16To : Array16OfOffset16To<Type>
bool sanitize (hb_sanitize_context_t *c, Ts&&... ds) const
{
TRACE_SANITIZE (this);
- return_trace (Array16OfOffset16To<Type>::sanitize (c, this, hb_forward<Ts> (ds)...));
+ return_trace (Array16OfOffset16To<Type>::sanitize (c, this, std::forward<Ts> (ds)...));
}
};
@@ -826,10 +835,10 @@ struct HeadlessArrayOf
{
TRACE_SANITIZE (this);
if (unlikely (!sanitize_shallow (c))) return_trace (false);
- if (!sizeof... (Ts) && hb_is_trivially_copyable (Type)) return_trace (true);
+ if (!sizeof... (Ts) && std::is_trivially_copyable<Type>::value) return_trace (true);
unsigned int count = get_length ();
for (unsigned int i = 0; i < count; i++)
- if (unlikely (!c->dispatch (arrayZ[i], hb_forward<Ts> (ds)...)))
+ if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
return_trace (false);
return_trace (true);
}
@@ -875,10 +884,10 @@ struct ArrayOfM1
{
TRACE_SANITIZE (this);
if (unlikely (!sanitize_shallow (c))) return_trace (false);
- if (!sizeof... (Ts) && hb_is_trivially_copyable (Type)) return_trace (true);
+ if (!sizeof... (Ts) && std::is_trivially_copyable<Type>::value) return_trace (true);
unsigned int count = lenM1 + 1;
for (unsigned int i = 0; i < count; i++)
- if (unlikely (!c->dispatch (arrayZ[i], hb_forward<Ts> (ds)...)))
+ if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
return_trace (false);
return_trace (true);
}
@@ -1061,10 +1070,10 @@ struct VarSizedBinSearchArrayOf
{
TRACE_SANITIZE (this);
if (unlikely (!sanitize_shallow (c))) return_trace (false);
- if (!sizeof... (Ts) && hb_is_trivially_copyable (Type)) return_trace (true);
+ if (!sizeof... (Ts) && std::is_trivially_copyable<Type>::value) return_trace (true);
unsigned int count = get_length ();
for (unsigned int i = 0; i < count; i++)
- if (unlikely (!(*this)[i].sanitize (c, hb_forward<Ts> (ds)...)))
+ if (unlikely (!(*this)[i].sanitize (c, std::forward<Ts> (ds)...)))
return_trace (false);
return_trace (true);
}
diff --git a/thirdparty/harfbuzz/src/hb-ot-cff-common.hh b/thirdparty/harfbuzz/src/hb-ot-cff-common.hh
index eaaf5e12ec..180c87cb89 100644
--- a/thirdparty/harfbuzz/src/hb-ot-cff-common.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-cff-common.hh
@@ -373,7 +373,7 @@ struct Dict : UnsizedByteStr
{
TRACE_SERIALIZE (this);
for (unsigned int i = 0; i < dictval.get_count (); i++)
- if (unlikely (!opszr.serialize (c, dictval[i], hb_forward<Ts> (ds)...)))
+ if (unlikely (!opszr.serialize (c, dictval[i], std::forward<Ts> (ds)...)))
return_trace (false);
return_trace (true);
diff --git a/thirdparty/harfbuzz/src/hb-ot-cmap-table.hh b/thirdparty/harfbuzz/src/hb-ot-cmap-table.hh
index b904bb46a8..c8a2af1e82 100644
--- a/thirdparty/harfbuzz/src/hb-ot-cmap-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-cmap-table.hh
@@ -604,7 +604,7 @@ struct CmapSubtableTrimmed
UINT length; /* Byte length of this subtable. */
UINT language; /* Ignore. */
UINT startCharCode; /* First character code covered. */
- ArrayOf<HBGlyphID, UINT>
+ ArrayOf<HBGlyphID16, UINT>
glyphIdArray; /* Array of glyph index values for character
* codes in the range. */
public:
@@ -900,7 +900,7 @@ struct UVSMapping
}
HBUINT24 unicodeValue; /* Base Unicode value of the UVS */
- HBGlyphID glyphID; /* Glyph ID of the UVS */
+ HBGlyphID16 glyphID; /* Glyph ID of the UVS */
public:
DEFINE_SIZE_STATIC (5);
};
diff --git a/thirdparty/harfbuzz/src/hb-ot-color-cbdt-table.hh b/thirdparty/harfbuzz/src/hb-ot-color-cbdt-table.hh
index 6c31d1b53e..14459914ee 100644
--- a/thirdparty/harfbuzz/src/hb-ot-color-cbdt-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-color-cbdt-table.hh
@@ -508,8 +508,8 @@ struct IndexSubtableRecord
offset, length, format);
}
- HBGlyphID firstGlyphIndex;
- HBGlyphID lastGlyphIndex;
+ HBGlyphID16 firstGlyphIndex;
+ HBGlyphID16 lastGlyphIndex;
Offset32To<IndexSubtable> offsetToSubtable;
public:
DEFINE_SIZE_STATIC (8);
@@ -679,8 +679,8 @@ struct BitmapSizeTable
HBUINT32 colorRef;
SBitLineMetrics horizontal;
SBitLineMetrics vertical;
- HBGlyphID startGlyphIndex;
- HBGlyphID endGlyphIndex;
+ HBGlyphID16 startGlyphIndex;
+ HBGlyphID16 endGlyphIndex;
HBUINT8 ppemX;
HBUINT8 ppemY;
HBUINT8 bitDepth;
diff --git a/thirdparty/harfbuzz/src/hb-ot-color-colr-table.hh b/thirdparty/harfbuzz/src/hb-ot-color-colr-table.hh
index 007ff3f47b..03476faba7 100644
--- a/thirdparty/harfbuzz/src/hb-ot-color-colr-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-color-colr-table.hh
@@ -30,6 +30,7 @@
#include "hb-open-type.hh"
#include "hb-ot-layout-common.hh"
+#include "hb-ot-var-common.hh"
/*
* COLR -- Color
@@ -42,7 +43,7 @@
#endif
#ifndef COLRV1_ENABLE_SUBSETTING
-#define COLRV1_ENABLE_SUBSETTING 0
+#define COLRV1_ENABLE_SUBSETTING 1
#endif
namespace OT {
@@ -121,7 +122,7 @@ struct LayerRecord
}
public:
- HBGlyphID glyphId; /* Glyph ID of layer glyph */
+ HBGlyphID16 glyphId; /* Glyph ID of layer glyph */
Index colorIdx; /* Index value to use with a
* selected color palette.
* An index value of 0xFFFF
@@ -148,7 +149,7 @@ struct BaseGlyphRecord
}
public:
- HBGlyphID glyphId; /* Glyph ID of reference glyph */
+ HBGlyphID16 glyphId; /* Glyph ID of reference glyph */
HBUINT16 firstLayerIdx; /* Index (from beginning of
* the Layer Records) to the
* layer record. There will be
@@ -163,15 +164,31 @@ struct BaseGlyphRecord
template <typename T>
struct Variable
{
+ Variable<T>* copy (hb_serialize_context_t *c) const
+ {
+ TRACE_SERIALIZE (this);
+ return_trace (c->embed (this));
+ }
+
+ void closurev1 (hb_colrv1_closure_context_t* c) const
+ { value.closurev1 (c); }
+
+ bool subset (hb_subset_context_t *c) const
+ {
+ TRACE_SUBSET (this);
+ if (!value.subset (c)) return_trace (false);
+ return_trace (c->serializer->embed (varIdxBase));
+ }
+
bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
- return_trace (c->check_struct (this));
+ return_trace (c->check_struct (this) && value.sanitize (c));
}
protected:
T value;
- VarIdx varIdx;
+ VarIdx varIdxBase;
public:
DEFINE_SIZE_STATIC (4 + T::static_size);
};
@@ -179,51 +196,46 @@ struct Variable
template <typename T>
struct NoVariable
{
- bool sanitize (hb_sanitize_context_t *c) const
+ NoVariable<T>* copy (hb_serialize_context_t *c) const
{
- TRACE_SANITIZE (this);
- return_trace (c->check_struct (this));
+ TRACE_SERIALIZE (this);
+ return_trace (c->embed (this));
}
- T value;
- public:
- DEFINE_SIZE_STATIC (T::static_size);
-};
-
-// Color structures
+ void closurev1 (hb_colrv1_closure_context_t* c) const
+ { value.closurev1 (c); }
-template <template<typename> class Var>
-struct ColorIndex
-{
bool subset (hb_subset_context_t *c) const
{
TRACE_SUBSET (this);
- auto *out = c->serializer->embed (*this);
- if (unlikely (!out)) return_trace (false);
- return_trace (c->serializer->check_assign (out->paletteIndex, c->plan->colr_palettes->get (paletteIndex),
- HB_SERIALIZE_ERROR_INT_OVERFLOW));
+ return_trace (value.subset (c));
}
bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
- return_trace (c->check_struct (this));
+ return_trace (c->check_struct (this) && value.sanitize (c));
}
- HBUINT16 paletteIndex;
- Var<F2DOT14> alpha;
+ T value;
public:
- DEFINE_SIZE_STATIC (2 + Var<F2DOT14>::static_size);
+ DEFINE_SIZE_STATIC (T::static_size);
};
-template <template<typename> class Var>
+// Color structures
+
struct ColorStop
{
+ void closurev1 (hb_colrv1_closure_context_t* c) const
+ { c->add_palette_index (paletteIndex); }
+
bool subset (hb_subset_context_t *c) const
{
TRACE_SUBSET (this);
- if (unlikely (!c->serializer->embed (stopOffset))) return_trace (false);
- return_trace (color.subset (c));
+ auto *out = c->serializer->embed (*this);
+ if (unlikely (!out)) return_trace (false);
+ return_trace (c->serializer->check_assign (out->paletteIndex, c->plan->colr_palettes->get (paletteIndex),
+ HB_SERIALIZE_ERROR_INT_OVERFLOW));
}
bool sanitize (hb_sanitize_context_t *c) const
@@ -232,10 +244,11 @@ struct ColorStop
return_trace (c->check_struct (this));
}
- Var<F2DOT14> stopOffset;
- ColorIndex<Var> color;
+ F2DOT14 stopOffset;
+ HBUINT16 paletteIndex;
+ F2DOT14 alpha;
public:
- DEFINE_SIZE_STATIC (Var<F2DOT14>::static_size + ColorIndex<Var>::static_size);
+ DEFINE_SIZE_STATIC (2 + 2 * F2DOT14::static_size);
};
struct Extend : HBUINT8
@@ -252,6 +265,12 @@ struct Extend : HBUINT8
template <template<typename> class Var>
struct ColorLine
{
+ void closurev1 (hb_colrv1_closure_context_t* c) const
+ {
+ for (const auto &stop : stops.iter ())
+ stop.closurev1 (c);
+ }
+
bool subset (hb_subset_context_t *c) const
{
TRACE_SUBSET (this);
@@ -276,8 +295,8 @@ struct ColorLine
stops.sanitize (c));
}
- Extend extend;
- Array16Of<ColorStop<Var>> stops;
+ Extend extend;
+ Array16Of<Var<ColorStop>> stops;
public:
DEFINE_SIZE_ARRAY_SIZED (3, stops);
};
@@ -331,7 +350,6 @@ struct CompositeMode : HBUINT8
DEFINE_SIZE_STATIC (1);
};
-template <template<typename> class Var>
struct Affine2x3
{
bool sanitize (hb_sanitize_context_t *c) const
@@ -340,14 +358,14 @@ struct Affine2x3
return_trace (c->check_struct (this));
}
- Var<HBFixed> xx;
- Var<HBFixed> yx;
- Var<HBFixed> xy;
- Var<HBFixed> yy;
- Var<HBFixed> dx;
- Var<HBFixed> dy;
+ HBFixed xx;
+ HBFixed yx;
+ HBFixed xy;
+ HBFixed yy;
+ HBFixed dx;
+ HBFixed dy;
public:
- DEFINE_SIZE_STATIC (6 * Var<HBFixed>::static_size);
+ DEFINE_SIZE_STATIC (6 * HBFixed::static_size);
};
struct PaintColrLayers
@@ -373,22 +391,23 @@ struct PaintColrLayers
HBUINT8 format; /* format = 1 */
HBUINT8 numLayers;
- HBUINT32 firstLayerIndex; /* index into COLRv1::layersV1 */
+ HBUINT32 firstLayerIndex; /* index into COLRv1::layerList */
public:
DEFINE_SIZE_STATIC (6);
};
-template <template<typename> class Var>
struct PaintSolid
{
void closurev1 (hb_colrv1_closure_context_t* c) const
- { c->add_palette_index (color.paletteIndex); }
+ { c->add_palette_index (paletteIndex); }
bool subset (hb_subset_context_t *c) const
{
TRACE_SUBSET (this);
- if (unlikely (!c->serializer->embed (format))) return_trace (false);
- return_trace (color.subset (c));
+ auto *out = c->serializer->embed (*this);
+ if (unlikely (!out)) return_trace (false);
+ return_trace (c->serializer->check_assign (out->paletteIndex, c->plan->colr_palettes->get (paletteIndex),
+ HB_SERIALIZE_ERROR_INT_OVERFLOW));
}
bool sanitize (hb_sanitize_context_t *c) const
@@ -397,20 +416,18 @@ struct PaintSolid
return_trace (c->check_struct (this));
}
- HBUINT8 format; /* format = 2(noVar) or 3(Var)*/
- ColorIndex<Var> color;
+ HBUINT8 format; /* format = 2(noVar) or 3(Var)*/
+ HBUINT16 paletteIndex;
+ F2DOT14 alpha;
public:
- DEFINE_SIZE_STATIC (1 + ColorIndex<Var>::static_size);
+ DEFINE_SIZE_STATIC (3 + F2DOT14::static_size);
};
template <template<typename> class Var>
struct PaintLinearGradient
{
void closurev1 (hb_colrv1_closure_context_t* c) const
- {
- for (const auto &stop : (this+colorLine).stops.iter ())
- c->add_palette_index (stop.color.paletteIndex);
- }
+ { (this+colorLine).closurev1 (c); }
bool subset (hb_subset_context_t *c) const
{
@@ -430,19 +447,22 @@ struct PaintLinearGradient
HBUINT8 format; /* format = 4(noVar) or 5 (Var) */
Offset24To<ColorLine<Var>> colorLine; /* Offset (from beginning of PaintLinearGradient
* table) to ColorLine subtable. */
- Var<FWORD> x0;
- Var<FWORD> y0;
- Var<FWORD> x1;
- Var<FWORD> y1;
- Var<FWORD> x2;
- Var<FWORD> y2;
+ FWORD x0;
+ FWORD y0;
+ FWORD x1;
+ FWORD y1;
+ FWORD x2;
+ FWORD y2;
public:
- DEFINE_SIZE_STATIC (4 + 6 * Var<FWORD>::static_size);
+ DEFINE_SIZE_STATIC (4 + 6 * FWORD::static_size);
};
template <template<typename> class Var>
struct PaintRadialGradient
{
+ void closurev1 (hb_colrv1_closure_context_t* c) const
+ { (this+colorLine).closurev1 (c); }
+
bool subset (hb_subset_context_t *c) const
{
TRACE_SUBSET (this);
@@ -452,12 +472,6 @@ struct PaintRadialGradient
return_trace (out->colorLine.serialize_subset (c, colorLine, this));
}
- void closurev1 (hb_colrv1_closure_context_t* c) const
- {
- for (const auto &stop : (this+colorLine).stops.iter ())
- c->add_palette_index (stop.color.paletteIndex);
- }
-
bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
@@ -467,19 +481,22 @@ struct PaintRadialGradient
HBUINT8 format; /* format = 6(noVar) or 7 (Var) */
Offset24To<ColorLine<Var>> colorLine; /* Offset (from beginning of PaintRadialGradient
* table) to ColorLine subtable. */
- Var<FWORD> x0;
- Var<FWORD> y0;
- Var<UFWORD> radius0;
- Var<FWORD> x1;
- Var<FWORD> y1;
- Var<UFWORD> radius1;
+ FWORD x0;
+ FWORD y0;
+ UFWORD radius0;
+ FWORD x1;
+ FWORD y1;
+ UFWORD radius1;
public:
- DEFINE_SIZE_STATIC (4 + 6 * Var<FWORD>::static_size);
+ DEFINE_SIZE_STATIC (4 + 6 * FWORD::static_size);
};
template <template<typename> class Var>
struct PaintSweepGradient
{
+ void closurev1 (hb_colrv1_closure_context_t* c) const
+ { (this+colorLine).closurev1 (c); }
+
bool subset (hb_subset_context_t *c) const
{
TRACE_SUBSET (this);
@@ -489,12 +506,6 @@ struct PaintSweepGradient
return_trace (out->colorLine.serialize_subset (c, colorLine, this));
}
- void closurev1 (hb_colrv1_closure_context_t* c) const
- {
- for (const auto &stop : (this+colorLine).stops.iter ())
- c->add_palette_index (stop.color.paletteIndex);
- }
-
bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
@@ -504,12 +515,12 @@ struct PaintSweepGradient
HBUINT8 format; /* format = 8(noVar) or 9 (Var) */
Offset24To<ColorLine<Var>> colorLine; /* Offset (from beginning of PaintSweepGradient
* table) to ColorLine subtable. */
- Var<FWORD> centerX;
- Var<FWORD> centerY;
- Var<HBFixed> startAngle;
- Var<HBFixed> endAngle;
+ FWORD centerX;
+ FWORD centerY;
+ F2DOT14 startAngle;
+ F2DOT14 endAngle;
public:
- DEFINE_SIZE_STATIC (2 * Var<FWORD>::static_size + 2 * Var<HBFixed>::static_size);
+ DEFINE_SIZE_STATIC (4 + 2 * FWORD::static_size + 2 * F2DOT14::static_size);
};
struct Paint;
@@ -580,24 +591,25 @@ struct PaintTransform
TRACE_SUBSET (this);
auto *out = c->serializer->embed (this);
if (unlikely (!out)) return_trace (false);
-
+ if (!out->transform.serialize_copy (c->serializer, transform, this)) return_trace (false);
return_trace (out->src.serialize_subset (c, src, this));
}
bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
- return_trace (c->check_struct (this) && src.sanitize (c, this));
+ return_trace (c->check_struct (this) &&
+ src.sanitize (c, this) &&
+ transform.sanitize (c, this));
}
- HBUINT8 format; /* format = 12(noVar) or 13 (Var) */
- Offset24To<Paint> src; /* Offset (from beginning of PaintTransform table) to Paint subtable. */
- Affine2x3<Var> transform;
+ HBUINT8 format; /* format = 12(noVar) or 13 (Var) */
+ Offset24To<Paint> src; /* Offset (from beginning of PaintTransform table) to Paint subtable. */
+ Offset24To<Var<Affine2x3>> transform;
public:
- DEFINE_SIZE_STATIC (4 + Affine2x3<Var>::static_size);
+ DEFINE_SIZE_STATIC (7);
};
-template <template<typename> class Var>
struct PaintTranslate
{
HB_INTERNAL void closurev1 (hb_colrv1_closure_context_t* c) const;
@@ -619,14 +631,13 @@ struct PaintTranslate
HBUINT8 format; /* format = 14(noVar) or 15 (Var) */
Offset24To<Paint> src; /* Offset (from beginning of PaintTranslate table) to Paint subtable. */
- Var<HBFixed> dx;
- Var<HBFixed> dy;
+ FWORD dx;
+ FWORD dy;
public:
- DEFINE_SIZE_STATIC (4 + Var<HBFixed>::static_size);
+ DEFINE_SIZE_STATIC (4 + 2 * FWORD::static_size);
};
-template <template<typename> class Var>
-struct PaintRotate
+struct PaintScale
{
HB_INTERNAL void closurev1 (hb_colrv1_closure_context_t* c) const;
@@ -646,15 +657,150 @@ struct PaintRotate
}
HBUINT8 format; /* format = 16 (noVar) or 17(Var) */
+ Offset24To<Paint> src; /* Offset (from beginning of PaintScale table) to Paint subtable. */
+ F2DOT14 scaleX;
+ F2DOT14 scaleY;
+ public:
+ DEFINE_SIZE_STATIC (4 + 2 * F2DOT14::static_size);
+};
+
+struct PaintScaleAroundCenter
+{
+ HB_INTERNAL void closurev1 (hb_colrv1_closure_context_t* c) const;
+
+ bool subset (hb_subset_context_t *c) const
+ {
+ TRACE_SUBSET (this);
+ auto *out = c->serializer->embed (this);
+ if (unlikely (!out)) return_trace (false);
+
+ return_trace (out->src.serialize_subset (c, src, this));
+ }
+
+ bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this) && src.sanitize (c, this));
+ }
+
+ HBUINT8 format; /* format = 18 (noVar) or 19(Var) */
+ Offset24To<Paint> src; /* Offset (from beginning of PaintScaleAroundCenter table) to Paint subtable. */
+ F2DOT14 scaleX;
+ F2DOT14 scaleY;
+ FWORD centerX;
+ FWORD centerY;
+ public:
+ DEFINE_SIZE_STATIC (4 + 2 * F2DOT14::static_size + 2 * FWORD::static_size);
+};
+
+struct PaintScaleUniform
+{
+ HB_INTERNAL void closurev1 (hb_colrv1_closure_context_t* c) const;
+
+ bool subset (hb_subset_context_t *c) const
+ {
+ TRACE_SUBSET (this);
+ auto *out = c->serializer->embed (this);
+ if (unlikely (!out)) return_trace (false);
+
+ return_trace (out->src.serialize_subset (c, src, this));
+ }
+
+ bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this) && src.sanitize (c, this));
+ }
+
+ HBUINT8 format; /* format = 20 (noVar) or 21(Var) */
+ Offset24To<Paint> src; /* Offset (from beginning of PaintScaleUniform table) to Paint subtable. */
+ F2DOT14 scale;
+ public:
+ DEFINE_SIZE_STATIC (4 + F2DOT14::static_size);
+};
+
+struct PaintScaleUniformAroundCenter
+{
+ HB_INTERNAL void closurev1 (hb_colrv1_closure_context_t* c) const;
+
+ bool subset (hb_subset_context_t *c) const
+ {
+ TRACE_SUBSET (this);
+ auto *out = c->serializer->embed (this);
+ if (unlikely (!out)) return_trace (false);
+
+ return_trace (out->src.serialize_subset (c, src, this));
+ }
+
+ bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this) && src.sanitize (c, this));
+ }
+
+ HBUINT8 format; /* format = 22 (noVar) or 23(Var) */
+ Offset24To<Paint> src; /* Offset (from beginning of PaintScaleUniformAroundCenter table) to Paint subtable. */
+ F2DOT14 scale;
+ FWORD centerX;
+ FWORD centerY;
+ public:
+ DEFINE_SIZE_STATIC (4 + F2DOT14::static_size + 2 * FWORD::static_size);
+};
+
+struct PaintRotate
+{
+ HB_INTERNAL void closurev1 (hb_colrv1_closure_context_t* c) const;
+
+ bool subset (hb_subset_context_t *c) const
+ {
+ TRACE_SUBSET (this);
+ auto *out = c->serializer->embed (this);
+ if (unlikely (!out)) return_trace (false);
+
+ return_trace (out->src.serialize_subset (c, src, this));
+ }
+
+ bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this) && src.sanitize (c, this));
+ }
+
+ HBUINT8 format; /* format = 24 (noVar) or 25(Var) */
Offset24To<Paint> src; /* Offset (from beginning of PaintRotate table) to Paint subtable. */
- Var<HBFixed> angle;
- Var<HBFixed> centerX;
- Var<HBFixed> centerY;
+ F2DOT14 angle;
public:
- DEFINE_SIZE_STATIC (4 + 3 * Var<HBFixed>::static_size);
+ DEFINE_SIZE_STATIC (4 + F2DOT14::static_size);
+};
+
+struct PaintRotateAroundCenter
+{
+ HB_INTERNAL void closurev1 (hb_colrv1_closure_context_t* c) const;
+
+ bool subset (hb_subset_context_t *c) const
+ {
+ TRACE_SUBSET (this);
+ auto *out = c->serializer->embed (this);
+ if (unlikely (!out)) return_trace (false);
+
+ return_trace (out->src.serialize_subset (c, src, this));
+ }
+
+ bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this) && src.sanitize (c, this));
+ }
+
+ HBUINT8 format; /* format = 26 (noVar) or 27(Var) */
+ Offset24To<Paint> src; /* Offset (from beginning of PaintRotateAroundCenter table) to Paint subtable. */
+ F2DOT14 angle;
+ FWORD centerX;
+ FWORD centerY;
+ public:
+ DEFINE_SIZE_STATIC (4 + F2DOT14::static_size + 2 * FWORD::static_size);
};
-template <template<typename> class Var>
struct PaintSkew
{
HB_INTERNAL void closurev1 (hb_colrv1_closure_context_t* c) const;
@@ -674,14 +820,41 @@ struct PaintSkew
return_trace (c->check_struct (this) && src.sanitize (c, this));
}
- HBUINT8 format; /* format = 18(noVar) or 19 (Var) */
+ HBUINT8 format; /* format = 28(noVar) or 29 (Var) */
Offset24To<Paint> src; /* Offset (from beginning of PaintSkew table) to Paint subtable. */
- Var<HBFixed> xSkewAngle;
- Var<HBFixed> ySkewAngle;
- Var<HBFixed> centerX;
- Var<HBFixed> centerY;
+ F2DOT14 xSkewAngle;
+ F2DOT14 ySkewAngle;
public:
- DEFINE_SIZE_STATIC (4 + 4 * Var<HBFixed>::static_size);
+ DEFINE_SIZE_STATIC (4 + 2 * F2DOT14::static_size);
+};
+
+struct PaintSkewAroundCenter
+{
+ HB_INTERNAL void closurev1 (hb_colrv1_closure_context_t* c) const;
+
+ bool subset (hb_subset_context_t *c) const
+ {
+ TRACE_SUBSET (this);
+ auto *out = c->serializer->embed (this);
+ if (unlikely (!out)) return_trace (false);
+
+ return_trace (out->src.serialize_subset (c, src, this));
+ }
+
+ bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this) && src.sanitize (c, this));
+ }
+
+ HBUINT8 format; /* format = 30(noVar) or 31 (Var) */
+ Offset24To<Paint> src; /* Offset (from beginning of PaintSkewAroundCenter table) to Paint subtable. */
+ F2DOT14 xSkewAngle;
+ F2DOT14 ySkewAngle;
+ FWORD centerX;
+ FWORD centerY;
+ public:
+ DEFINE_SIZE_STATIC (4 + 2 * F2DOT14::static_size + 2 * FWORD::static_size);
};
struct PaintComposite
@@ -706,7 +879,7 @@ struct PaintComposite
backdrop.sanitize (c, this));
}
- HBUINT8 format; /* format = 20 */
+ HBUINT8 format; /* format = 32 */
Offset24To<Paint> src; /* Offset (from beginning of PaintComposite table) to source Paint subtable. */
CompositeMode mode; /* If mode is unrecognized use COMPOSITE_CLEAR */
Offset24To<Paint> backdrop; /* Offset (from beginning of PaintComposite table) to backdrop Paint subtable. */
@@ -714,6 +887,179 @@ struct PaintComposite
DEFINE_SIZE_STATIC (8);
};
+struct ClipBoxFormat1
+{
+ bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this));
+ }
+
+ public:
+ HBUINT8 format; /* format = 1(noVar) or 2(Var)*/
+ FWORD xMin;
+ FWORD yMin;
+ FWORD xMax;
+ FWORD yMax;
+ public:
+ DEFINE_SIZE_STATIC (1 + 4 * FWORD::static_size);
+};
+
+struct ClipBoxFormat2 : Variable<ClipBoxFormat1> {};
+
+struct ClipBox
+{
+ ClipBox* copy (hb_serialize_context_t *c) const
+ {
+ TRACE_SERIALIZE (this);
+ switch (u.format) {
+ case 1: return_trace (reinterpret_cast<ClipBox *> (c->embed (u.format1)));
+ case 2: return_trace (reinterpret_cast<ClipBox *> (c->embed (u.format2)));
+ default:return_trace (nullptr);
+ }
+ }
+
+ template <typename context_t, typename ...Ts>
+ typename context_t::return_t dispatch (context_t *c, Ts&&... ds) const
+ {
+ TRACE_DISPATCH (this, u.format);
+ if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
+ switch (u.format) {
+ case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
+ case 2: return_trace (c->dispatch (u.format2, std::forward<Ts> (ds)...));
+ default:return_trace (c->default_return_value ());
+ }
+ }
+
+ protected:
+ union {
+ HBUINT8 format; /* Format identifier */
+ ClipBoxFormat1 format1;
+ ClipBoxFormat2 format2;
+ } u;
+};
+
+struct ClipRecord
+{
+ ClipRecord* copy (hb_serialize_context_t *c, const void *base) const
+ {
+ TRACE_SERIALIZE (this);
+ auto *out = c->embed (this);
+ if (unlikely (!out)) return_trace (nullptr);
+ if (!out->clipBox.serialize_copy (c, clipBox, base)) return_trace (nullptr);
+ return_trace (out);
+ }
+
+ bool sanitize (hb_sanitize_context_t *c, const void *base) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this) && clipBox.sanitize (c, base));
+ }
+
+ public:
+ HBUINT16 startGlyphID; // first gid clip applies to
+ HBUINT16 endGlyphID; // last gid clip applies to, inclusive
+ Offset24To<ClipBox> clipBox; // Box or VarBox
+ public:
+ DEFINE_SIZE_STATIC (7);
+};
+
+struct ClipList
+{
+ unsigned serialize_clip_records (hb_serialize_context_t *c,
+ const hb_set_t& gids,
+ const hb_map_t& gid_offset_map) const
+ {
+ TRACE_SERIALIZE (this);
+ if (gids.is_empty () ||
+ gid_offset_map.get_population () != gids.get_population ())
+ return_trace (0);
+
+ unsigned count = 0;
+
+ hb_codepoint_t start_gid= gids.get_min ();
+ hb_codepoint_t prev_gid = start_gid;
+
+ unsigned offset = gid_offset_map.get (start_gid);
+ unsigned prev_offset = offset;
+ for (const hb_codepoint_t _ : gids.iter ())
+ {
+ if (_ == start_gid) continue;
+
+ offset = gid_offset_map.get (_);
+ if (_ == prev_gid + 1 && offset == prev_offset)
+ {
+ prev_gid = _;
+ continue;
+ }
+
+ ClipRecord record;
+ record.startGlyphID = start_gid;
+ record.endGlyphID = prev_gid;
+ record.clipBox = prev_offset;
+
+ if (!c->copy (record, this)) return_trace (0);
+ count++;
+
+ start_gid = _;
+ prev_gid = _;
+ prev_offset = offset;
+ }
+
+ //last one
+ {
+ ClipRecord record;
+ record.startGlyphID = start_gid;
+ record.endGlyphID = prev_gid;
+ record.clipBox = prev_offset;
+ if (!c->copy (record, this)) return_trace (0);
+ count++;
+ }
+ return_trace (count);
+ }
+
+ bool subset (hb_subset_context_t *c) const
+ {
+ TRACE_SUBSET (this);
+ auto *out = c->serializer->start_embed (*this);
+ if (unlikely (!c->serializer->extend_min (out))) return_trace (false);
+ if (!c->serializer->check_assign (out->format, format, HB_SERIALIZE_ERROR_INT_OVERFLOW)) return_trace (false);
+
+ const hb_set_t& glyphset = *c->plan->_glyphset;
+ const hb_map_t &glyph_map = *c->plan->glyph_map;
+
+ hb_map_t new_gid_offset_map;
+ hb_set_t new_gids;
+ for (const ClipRecord& record : clips.iter ())
+ {
+ unsigned start_gid = record.startGlyphID;
+ unsigned end_gid = record.endGlyphID;
+ for (unsigned gid = start_gid; gid <= end_gid; gid++)
+ {
+ if (!glyphset.has (gid) || !glyph_map.has (gid)) continue;
+ unsigned new_gid = glyph_map.get (gid);
+ new_gid_offset_map.set (new_gid, record.clipBox);
+ new_gids.add (new_gid);
+ }
+ }
+
+ unsigned count = serialize_clip_records (c->serializer, new_gids, new_gid_offset_map);
+ if (!count) return_trace (false);
+ return_trace (c->serializer->check_assign (out->clips.len, count, HB_SERIALIZE_ERROR_INT_OVERFLOW));
+ }
+
+ bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this) && clips.sanitize (c, this));
+ }
+
+ HBUINT8 format; // Set to 1.
+ Array32Of<ClipRecord> clips; // Clip records, sorted by startGlyphID
+ public:
+ DEFINE_SIZE_ARRAY_SIZED (5, clips);
+};
+
struct Paint
{
template <typename context_t, typename ...Ts>
@@ -722,57 +1068,81 @@ struct Paint
TRACE_DISPATCH (this, u.format);
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
switch (u.format) {
- case 1: return_trace (c->dispatch (u.paintformat1, hb_forward<Ts> (ds)...));
- case 2: return_trace (c->dispatch (u.paintformat2, hb_forward<Ts> (ds)...));
- case 3: return_trace (c->dispatch (u.paintformat3, hb_forward<Ts> (ds)...));
- case 4: return_trace (c->dispatch (u.paintformat4, hb_forward<Ts> (ds)...));
- case 5: return_trace (c->dispatch (u.paintformat5, hb_forward<Ts> (ds)...));
- case 6: return_trace (c->dispatch (u.paintformat6, hb_forward<Ts> (ds)...));
- case 7: return_trace (c->dispatch (u.paintformat7, hb_forward<Ts> (ds)...));
- case 8: return_trace (c->dispatch (u.paintformat8, hb_forward<Ts> (ds)...));
- case 9: return_trace (c->dispatch (u.paintformat9, hb_forward<Ts> (ds)...));
- case 10: return_trace (c->dispatch (u.paintformat10, hb_forward<Ts> (ds)...));
- case 11: return_trace (c->dispatch (u.paintformat11, hb_forward<Ts> (ds)...));
- case 12: return_trace (c->dispatch (u.paintformat12, hb_forward<Ts> (ds)...));
- case 13: return_trace (c->dispatch (u.paintformat13, hb_forward<Ts> (ds)...));
- case 14: return_trace (c->dispatch (u.paintformat14, hb_forward<Ts> (ds)...));
- case 15: return_trace (c->dispatch (u.paintformat15, hb_forward<Ts> (ds)...));
- case 16: return_trace (c->dispatch (u.paintformat16, hb_forward<Ts> (ds)...));
- case 17: return_trace (c->dispatch (u.paintformat17, hb_forward<Ts> (ds)...));
- case 18: return_trace (c->dispatch (u.paintformat18, hb_forward<Ts> (ds)...));
- case 19: return_trace (c->dispatch (u.paintformat19, hb_forward<Ts> (ds)...));
- case 20: return_trace (c->dispatch (u.paintformat20, hb_forward<Ts> (ds)...));
+ case 1: return_trace (c->dispatch (u.paintformat1, std::forward<Ts> (ds)...));
+ case 2: return_trace (c->dispatch (u.paintformat2, std::forward<Ts> (ds)...));
+ case 3: return_trace (c->dispatch (u.paintformat3, std::forward<Ts> (ds)...));
+ case 4: return_trace (c->dispatch (u.paintformat4, std::forward<Ts> (ds)...));
+ case 5: return_trace (c->dispatch (u.paintformat5, std::forward<Ts> (ds)...));
+ case 6: return_trace (c->dispatch (u.paintformat6, std::forward<Ts> (ds)...));
+ case 7: return_trace (c->dispatch (u.paintformat7, std::forward<Ts> (ds)...));
+ case 8: return_trace (c->dispatch (u.paintformat8, std::forward<Ts> (ds)...));
+ case 9: return_trace (c->dispatch (u.paintformat9, std::forward<Ts> (ds)...));
+ case 10: return_trace (c->dispatch (u.paintformat10, std::forward<Ts> (ds)...));
+ case 11: return_trace (c->dispatch (u.paintformat11, std::forward<Ts> (ds)...));
+ case 12: return_trace (c->dispatch (u.paintformat12, std::forward<Ts> (ds)...));
+ case 13: return_trace (c->dispatch (u.paintformat13, std::forward<Ts> (ds)...));
+ case 14: return_trace (c->dispatch (u.paintformat14, std::forward<Ts> (ds)...));
+ case 15: return_trace (c->dispatch (u.paintformat15, std::forward<Ts> (ds)...));
+ case 16: return_trace (c->dispatch (u.paintformat16, std::forward<Ts> (ds)...));
+ case 17: return_trace (c->dispatch (u.paintformat17, std::forward<Ts> (ds)...));
+ case 18: return_trace (c->dispatch (u.paintformat18, std::forward<Ts> (ds)...));
+ case 19: return_trace (c->dispatch (u.paintformat19, std::forward<Ts> (ds)...));
+ case 20: return_trace (c->dispatch (u.paintformat20, std::forward<Ts> (ds)...));
+ case 21: return_trace (c->dispatch (u.paintformat21, std::forward<Ts> (ds)...));
+ case 22: return_trace (c->dispatch (u.paintformat22, std::forward<Ts> (ds)...));
+ case 23: return_trace (c->dispatch (u.paintformat23, std::forward<Ts> (ds)...));
+ case 24: return_trace (c->dispatch (u.paintformat24, std::forward<Ts> (ds)...));
+ case 25: return_trace (c->dispatch (u.paintformat25, std::forward<Ts> (ds)...));
+ case 26: return_trace (c->dispatch (u.paintformat26, std::forward<Ts> (ds)...));
+ case 27: return_trace (c->dispatch (u.paintformat27, std::forward<Ts> (ds)...));
+ case 28: return_trace (c->dispatch (u.paintformat28, std::forward<Ts> (ds)...));
+ case 29: return_trace (c->dispatch (u.paintformat29, std::forward<Ts> (ds)...));
+ case 30: return_trace (c->dispatch (u.paintformat30, std::forward<Ts> (ds)...));
+ case 31: return_trace (c->dispatch (u.paintformat31, std::forward<Ts> (ds)...));
+ case 32: return_trace (c->dispatch (u.paintformat32, std::forward<Ts> (ds)...));
default:return_trace (c->default_return_value ());
}
}
protected:
union {
- HBUINT8 format;
- PaintColrLayers paintformat1;
- PaintSolid<NoVariable> paintformat2;
- PaintSolid<Variable> paintformat3;
- PaintLinearGradient<NoVariable> paintformat4;
- PaintLinearGradient<Variable> paintformat5;
- PaintRadialGradient<NoVariable> paintformat6;
- PaintRadialGradient<Variable> paintformat7;
- PaintSweepGradient<NoVariable> paintformat8;
- PaintSweepGradient<Variable> paintformat9;
- PaintGlyph paintformat10;
- PaintColrGlyph paintformat11;
- PaintTransform<NoVariable> paintformat12;
- PaintTransform<Variable> paintformat13;
- PaintTranslate<NoVariable> paintformat14;
- PaintTranslate<Variable> paintformat15;
- PaintRotate<NoVariable> paintformat16;
- PaintRotate<Variable> paintformat17;
- PaintSkew<NoVariable> paintformat18;
- PaintSkew<Variable> paintformat19;
- PaintComposite paintformat20;
+ HBUINT8 format;
+ PaintColrLayers paintformat1;
+ PaintSolid paintformat2;
+ Variable<PaintSolid> paintformat3;
+ PaintLinearGradient<NoVariable> paintformat4;
+ Variable<PaintLinearGradient<Variable>> paintformat5;
+ PaintRadialGradient<NoVariable> paintformat6;
+ Variable<PaintRadialGradient<Variable>> paintformat7;
+ PaintSweepGradient<NoVariable> paintformat8;
+ Variable<PaintSweepGradient<Variable>> paintformat9;
+ PaintGlyph paintformat10;
+ PaintColrGlyph paintformat11;
+ PaintTransform<NoVariable> paintformat12;
+ PaintTransform<Variable> paintformat13;
+ PaintTranslate paintformat14;
+ Variable<PaintTranslate> paintformat15;
+ PaintScale paintformat16;
+ Variable<PaintScale> paintformat17;
+ PaintScaleAroundCenter paintformat18;
+ Variable<PaintScaleAroundCenter> paintformat19;
+ PaintScaleUniform paintformat20;
+ Variable<PaintScaleUniform> paintformat21;
+ PaintScaleUniformAroundCenter paintformat22;
+ Variable<PaintScaleUniformAroundCenter> paintformat23;
+ PaintRotate paintformat24;
+ Variable<PaintRotate> paintformat25;
+ PaintRotateAroundCenter paintformat26;
+ Variable<PaintRotateAroundCenter> paintformat27;
+ PaintSkew paintformat28;
+ Variable<PaintSkew> paintformat29;
+ PaintSkewAroundCenter paintformat30;
+ Variable<PaintSkewAroundCenter> paintformat31;
+ PaintComposite paintformat32;
} u;
};
-struct BaseGlyphV1Record
+struct BaseGlyphPaintRecord
{
int cmp (hb_codepoint_t g) const
{ return g < glyphId ? -1 : g > glyphId ? 1 : 0; }
@@ -797,14 +1167,14 @@ struct BaseGlyphV1Record
}
public:
- HBGlyphID glyphId; /* Glyph ID of reference glyph */
- Offset32To<Paint> paint; /* Offset (from beginning of BaseGlyphV1Record array) to Paint,
+ HBGlyphID16 glyphId; /* Glyph ID of reference glyph */
+ Offset32To<Paint> paint; /* Offset (from beginning of BaseGlyphPaintRecord array) to Paint,
* Typically PaintColrLayers */
public:
DEFINE_SIZE_STATIC (6);
};
-struct BaseGlyphV1List : SortedArray32Of<BaseGlyphV1Record>
+struct BaseGlyphList : SortedArray32Of<BaseGlyphPaintRecord>
{
bool subset (hb_subset_context_t *c) const
{
@@ -828,11 +1198,11 @@ struct BaseGlyphV1List : SortedArray32Of<BaseGlyphV1Record>
bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
- return_trace (SortedArray32Of<BaseGlyphV1Record>::sanitize (c, this));
+ return_trace (SortedArray32Of<BaseGlyphPaintRecord>::sanitize (c, this));
}
};
-struct LayerV1List : Array32OfOffset32To<Paint>
+struct LayerList : Array32OfOffset32To<Paint>
{
const Paint& get_paint (unsigned i) const
{ return this+(*this)[i]; }
@@ -952,24 +1322,24 @@ struct COLR
hb_set_t visited_glyphs;
hb_colrv1_closure_context_t c (this, &visited_glyphs, layer_indices, palette_indices);
- const BaseGlyphV1List &baseglyphV1_records = this+baseGlyphsV1List;
+ const BaseGlyphList &baseglyph_paintrecords = this+baseGlyphList;
- for (const BaseGlyphV1Record &baseglyphV1record: baseglyphV1_records.iter ())
+ for (const BaseGlyphPaintRecord &baseglyph_paintrecord: baseglyph_paintrecords.iter ())
{
- unsigned gid = baseglyphV1record.glyphId;
+ unsigned gid = baseglyph_paintrecord.glyphId;
if (!glyphset->has (gid)) continue;
- const Paint &paint = &baseglyphV1_records+baseglyphV1record.paint;
+ const Paint &paint = &baseglyph_paintrecords+baseglyph_paintrecord.paint;
paint.dispatch (&c);
}
hb_set_union (glyphset, &visited_glyphs);
}
- const LayerV1List& get_layerV1List () const
- { return (this+layersV1); }
+ const LayerList& get_layerList () const
+ { return (this+layerList); }
- const BaseGlyphV1List& get_baseglyphV1List () const
- { return (this+baseGlyphsV1List); }
+ const BaseGlyphList& get_baseglyphList () const
+ { return (this+baseGlyphList); }
bool sanitize (hb_sanitize_context_t *c) const
{
@@ -979,8 +1349,10 @@ struct COLR
(this+layersZ).sanitize (c, numLayers) &&
(version == 0 ||
(COLRV1_ENABLE_SUBSETTING && version == 1 &&
- baseGlyphsV1List.sanitize (c, this) &&
- layersV1.sanitize (c, this) &&
+ baseGlyphList.sanitize (c, this) &&
+ layerList.sanitize (c, this) &&
+ clipList.sanitize (c, this) &&
+ varIdxMap.sanitize (c, this) &&
varStore.sanitize (c, this))));
}
@@ -996,19 +1368,17 @@ struct COLR
if (unlikely (base_it.len () != layer_it.len ()))
return_trace (false);
- if (unlikely (!c->extend_min (this))) return_trace (false);
this->version = version;
numLayers = 0;
numBaseGlyphs = base_it.len ();
- if (base_it.len () == 0)
+ if (numBaseGlyphs == 0)
{
baseGlyphsZ = 0;
layersZ = 0;
return_trace (true);
}
- baseGlyphsZ = COLR::min_size;
- layersZ = COLR::min_size + numBaseGlyphs * BaseGlyphRecord::min_size;
+ c->push ();
for (const hb_item_type<BaseIterator> _ : + base_it.iter ())
{
auto* record = c->embed (_);
@@ -1016,10 +1386,14 @@ struct COLR
record->firstLayerIdx = numLayers;
numLayers += record->numLayers;
}
+ c->add_link (baseGlyphsZ, c->pop_pack ());
+ c->push ();
for (const hb_item_type<LayerIterator>& _ : + layer_it.iter ())
_.as_array ().copy (c);
+ c->add_link (layersZ, c->pop_pack ());
+
return_trace (true);
}
@@ -1033,9 +1407,9 @@ struct COLR
return record;
}
- const BaseGlyphV1Record* get_base_glyphV1_record (hb_codepoint_t gid) const
+ const BaseGlyphPaintRecord* get_base_glyph_paintrecord (hb_codepoint_t gid) const
{
- const BaseGlyphV1Record* record = &(this+baseGlyphsV1List).bsearch ((unsigned) gid);
+ const BaseGlyphPaintRecord* record = &(this+baseGlyphList).bsearch ((unsigned) gid);
if ((record && (hb_codepoint_t) record->glyphId != gid))
record = nullptr;
return record;
@@ -1101,23 +1475,26 @@ struct COLR
return_trace (false);
COLR *colr_prime = c->serializer->start_embed<COLR> ();
- bool ret = colr_prime->serialize_V0 (c->serializer, version, base_it, layer_it);
+ if (unlikely (!c->serializer->extend_min (colr_prime))) return_trace (false);
+
+ if (version == 0)
+ return_trace (colr_prime->serialize_V0 (c->serializer, version, base_it, layer_it));
- if (version == 0) return_trace (ret);
auto snap = c->serializer->snapshot ();
- if (!c->serializer->allocate_size<void> (3 * HBUINT32::static_size)) return_trace (false);
- if (!colr_prime->baseGlyphsV1List.serialize_subset (c, baseGlyphsV1List, this))
+ if (!c->serializer->allocate_size<void> (5 * HBUINT32::static_size)) return_trace (false);
+ if (!colr_prime->baseGlyphList.serialize_subset (c, baseGlyphList, this))
{
if (c->serializer->in_error ()) return_trace (false);
//no more COLRv1 glyphs: downgrade to version 0
c->serializer->revert (snap);
- colr_prime->version = 0;
- return_trace (true);
+ return_trace (colr_prime->serialize_V0 (c->serializer, 0, base_it, layer_it));
}
- if (!colr_prime->layersV1.serialize_subset (c, layersV1, this)) return_trace (false);
+ if (!colr_prime->serialize_V0 (c->serializer, version, base_it, layer_it)) return_trace (false);
- colr_prime->varStore = 0;
+ colr_prime->layerList.serialize_subset (c, layerList, this);
+ colr_prime->clipList.serialize_subset (c, clipList, this);
+ colr_prime->varIdxMap.serialize_copy (c->serializer, varIdxMap, this);
//TODO: subset varStore once it's implemented in fonttools
return_trace (true);
}
@@ -1131,8 +1508,10 @@ struct COLR
layersZ; /* Offset to Layer Records. */
HBUINT16 numLayers; /* Number of Layer Records. */
// Version-1 additions
- Offset32To<BaseGlyphV1List> baseGlyphsV1List;
- Offset32To<LayerV1List> layersV1;
+ Offset32To<BaseGlyphList> baseGlyphList;
+ Offset32To<LayerList> layerList;
+ Offset32To<ClipList> clipList; // Offset to ClipList table (may be NULL)
+ Offset32To<DeltaSetIndexMap> varIdxMap; // Offset to DeltaSetIndexMap table (may be NULL)
Offset32To<VariationStore> varStore;
public:
DEFINE_SIZE_MIN (14);
diff --git a/thirdparty/harfbuzz/src/hb-ot-color-colrv1-closure.hh b/thirdparty/harfbuzz/src/hb-ot-color-colrv1-closure.hh
index 4124efe0b1..ca85ba6ad6 100644
--- a/thirdparty/harfbuzz/src/hb-ot-color-colrv1-closure.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-color-colrv1-closure.hh
@@ -40,7 +40,7 @@ namespace OT {
HB_INTERNAL void PaintColrLayers::closurev1 (hb_colrv1_closure_context_t* c) const
{
c->add_layer_indices (firstLayerIndex, numLayers);
- const LayerV1List &paint_offset_lists = c->get_colr_table ()->get_layerV1List ();
+ const LayerList &paint_offset_lists = c->get_colr_table ()->get_layerList ();
for (unsigned i = firstLayerIndex; i < firstLayerIndex + numLayers; i++)
{
const Paint &paint = hb_addressof (paint_offset_lists) + paint_offset_lists[i];
@@ -57,37 +57,44 @@ HB_INTERNAL void PaintGlyph::closurev1 (hb_colrv1_closure_context_t* c) const
HB_INTERNAL void PaintColrGlyph::closurev1 (hb_colrv1_closure_context_t* c) const
{
const COLR *colr_table = c->get_colr_table ();
- const BaseGlyphV1Record* baseglyphV1_record = colr_table->get_base_glyphV1_record (gid);
- if (!baseglyphV1_record) return;
+ const BaseGlyphPaintRecord* baseglyph_paintrecord = colr_table->get_base_glyph_paintrecord (gid);
+ if (!baseglyph_paintrecord) return;
c->add_glyph (gid);
- const BaseGlyphV1List &baseglyphV1_list = colr_table->get_baseglyphV1List ();
- (&baseglyphV1_list+baseglyphV1_record->paint).dispatch (c);
+ const BaseGlyphList &baseglyph_list = colr_table->get_baseglyphList ();
+ (&baseglyph_list+baseglyph_paintrecord->paint).dispatch (c);
}
template <template<typename> class Var>
HB_INTERNAL void PaintTransform<Var>::closurev1 (hb_colrv1_closure_context_t* c) const
-{
- (this+src).dispatch (c);
-}
+{ (this+src).dispatch (c); }
-template <template<typename> class Var>
-HB_INTERNAL void PaintTranslate<Var>::closurev1 (hb_colrv1_closure_context_t* c) const
-{
- (this+src).dispatch (c);
-}
+HB_INTERNAL void PaintTranslate::closurev1 (hb_colrv1_closure_context_t* c) const
+{ (this+src).dispatch (c); }
-template <template<typename> class Var>
-HB_INTERNAL void PaintRotate<Var>::closurev1 (hb_colrv1_closure_context_t* c) const
-{
- (this+src).dispatch (c);
-}
+HB_INTERNAL void PaintScale::closurev1 (hb_colrv1_closure_context_t* c) const
+{ (this+src).dispatch (c); }
-template <template<typename> class Var>
-HB_INTERNAL void PaintSkew<Var>::closurev1 (hb_colrv1_closure_context_t* c) const
-{
- (this+src).dispatch (c);
-}
+HB_INTERNAL void PaintScaleAroundCenter::closurev1 (hb_colrv1_closure_context_t* c) const
+{ (this+src).dispatch (c); }
+
+HB_INTERNAL void PaintScaleUniform::closurev1 (hb_colrv1_closure_context_t* c) const
+{ (this+src).dispatch (c); }
+
+HB_INTERNAL void PaintScaleUniformAroundCenter::closurev1 (hb_colrv1_closure_context_t* c) const
+{ (this+src).dispatch (c); }
+
+HB_INTERNAL void PaintRotate::closurev1 (hb_colrv1_closure_context_t* c) const
+{ (this+src).dispatch (c); }
+
+HB_INTERNAL void PaintRotateAroundCenter::closurev1 (hb_colrv1_closure_context_t* c) const
+{ (this+src).dispatch (c); }
+
+HB_INTERNAL void PaintSkew::closurev1 (hb_colrv1_closure_context_t* c) const
+{ (this+src).dispatch (c); }
+
+HB_INTERNAL void PaintSkewAroundCenter::closurev1 (hb_colrv1_closure_context_t* c) const
+{ (this+src).dispatch (c); }
HB_INTERNAL void PaintComposite::closurev1 (hb_colrv1_closure_context_t* c) const
{
diff --git a/thirdparty/harfbuzz/src/hb-ot-glyf-table.hh b/thirdparty/harfbuzz/src/hb-ot-glyf-table.hh
index ff7b9b2d25..6b419ea1ac 100644
--- a/thirdparty/harfbuzz/src/hb-ot-glyf-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-glyf-table.hh
@@ -388,7 +388,7 @@ struct glyf
protected:
HBUINT16 flags;
- HBGlyphID glyphIndex;
+ HBGlyphID16 glyphIndex;
public:
DEFINE_SIZE_MIN (4);
};
@@ -1118,7 +1118,7 @@ struct glyf
while (it)
{
auto item = *(it++);
- operation_count +=
+ operation_count =
add_gid_and_children (item.get_glyph_index (), gids_to_retain, depth, operation_count);
}
diff --git a/thirdparty/harfbuzz/src/hb-ot-head-table.hh b/thirdparty/harfbuzz/src/hb-ot-head-table.hh
index ac588e3af6..20991aab2b 100644
--- a/thirdparty/harfbuzz/src/hb-ot-head-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-head-table.hh
@@ -72,12 +72,14 @@ struct head
UNDERLINE = 1u<<2,
OUTLINE = 1u<<3,
SHADOW = 1u<<4,
- CONDENSED = 1u<<5
+ CONDENSED = 1u<<5,
+ EXPANDED = 1u<<6,
};
bool is_bold () const { return macStyle & BOLD; }
bool is_italic () const { return macStyle & ITALIC; }
bool is_condensed () const { return macStyle & CONDENSED; }
+ bool is_expanded () const { return macStyle & EXPANDED; }
bool sanitize (hb_sanitize_context_t *c) const
{
diff --git a/thirdparty/harfbuzz/src/hb-ot-kern-table.hh b/thirdparty/harfbuzz/src/hb-ot-kern-table.hh
index 3563cab8bd..ffa11bc249 100644
--- a/thirdparty/harfbuzz/src/hb-ot-kern-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-kern-table.hh
@@ -134,11 +134,11 @@ struct KernSubTable
switch (subtable_type) {
case 0: return_trace (c->dispatch (u.format0));
#ifndef HB_NO_AAT_SHAPE
- case 1: return_trace (u.header.apple ? c->dispatch (u.format1, hb_forward<Ts> (ds)...) : c->default_return_value ());
+ case 1: return_trace (u.header.apple ? c->dispatch (u.format1, std::forward<Ts> (ds)...) : c->default_return_value ());
#endif
case 2: return_trace (c->dispatch (u.format2));
#ifndef HB_NO_AAT_SHAPE
- case 3: return_trace (u.header.apple ? c->dispatch (u.format3, hb_forward<Ts> (ds)...) : c->default_return_value ());
+ case 3: return_trace (u.header.apple ? c->dispatch (u.format3, std::forward<Ts> (ds)...) : c->default_return_value ());
#endif
default: return_trace (c->default_return_value ());
}
@@ -325,9 +325,9 @@ struct kern
unsigned int subtable_type = get_type ();
TRACE_DISPATCH (this, subtable_type);
switch (subtable_type) {
- case 0: return_trace (c->dispatch (u.ot, hb_forward<Ts> (ds)...));
+ case 0: return_trace (c->dispatch (u.ot, std::forward<Ts> (ds)...));
#ifndef HB_NO_AAT_SHAPE
- case 1: return_trace (c->dispatch (u.aat, hb_forward<Ts> (ds)...));
+ case 1: return_trace (c->dispatch (u.aat, std::forward<Ts> (ds)...));
#endif
default: return_trace (c->default_return_value ());
}
diff --git a/thirdparty/harfbuzz/src/hb-ot-layout-base-table.hh b/thirdparty/harfbuzz/src/hb-ot-layout-base-table.hh
index 492947751e..eb4c3b46e2 100644
--- a/thirdparty/harfbuzz/src/hb-ot-layout-base-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-layout-base-table.hh
@@ -73,7 +73,7 @@ struct BaseCoordFormat2
protected:
HBUINT16 format; /* Format identifier--format = 2 */
FWORD coordinate; /* X or Y value, in design units */
- HBGlyphID referenceGlyph; /* Glyph ID of control glyph */
+ HBGlyphID16 referenceGlyph; /* Glyph ID of control glyph */
HBUINT16 coordPoint; /* Index of contour point on the
* reference glyph */
public:
diff --git a/thirdparty/harfbuzz/src/hb-ot-layout-common.hh b/thirdparty/harfbuzz/src/hb-ot-layout-common.hh
index 65f499a00d..5d98278bed 100644
--- a/thirdparty/harfbuzz/src/hb-ot-layout-common.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-layout-common.hh
@@ -89,7 +89,7 @@ static inline void ClassDef_serialize (hb_serialize_context_t *c,
static void ClassDef_remap_and_serialize (hb_serialize_context_t *c,
const hb_map_t &gid_klass_map,
- hb_sorted_vector_t<HBGlyphID> &glyphs,
+ hb_sorted_vector_t<HBGlyphID16> &glyphs,
const hb_set_t &klasses,
bool use_class_zero,
hb_map_t *klass_map /*INOUT*/);
@@ -237,9 +237,9 @@ struct subset_offset_array_t
template <typename T>
bool operator () (T&& offset)
{
+ auto snap = subset_context->serializer->snapshot ();
auto *o = out.serialize_append (subset_context->serializer);
if (unlikely (!o)) return false;
- auto snap = subset_context->serializer->snapshot ();
bool ret = o->serialize_subset (subset_context, offset, base);
if (!ret)
{
@@ -268,9 +268,9 @@ struct subset_offset_array_arg_t
template <typename T>
bool operator () (T&& offset)
{
+ auto snap = subset_context->serializer->snapshot ();
auto *o = out.serialize_append (subset_context->serializer);
if (unlikely (!o)) return false;
- auto snap = subset_context->serializer->snapshot ();
bool ret = o->serialize_subset (subset_context, offset, base, arg);
if (!ret)
{
@@ -346,6 +346,43 @@ struct
}
HB_FUNCOBJ (subset_record_array);
+
+template<typename OutputArray>
+struct serialize_math_record_array_t
+{
+ serialize_math_record_array_t (hb_serialize_context_t *serialize_context_,
+ OutputArray& out_,
+ const void *base_) : serialize_context (serialize_context_),
+ out (out_), base (base_) {}
+
+ template <typename T>
+ bool operator () (T&& record)
+ {
+ if (!serialize_context->copy (record, base)) return false;
+ out.len++;
+ return true;
+ }
+
+ private:
+ hb_serialize_context_t *serialize_context;
+ OutputArray &out;
+ const void *base;
+};
+
+/*
+ * Helper to serialize an array of MATH records.
+ */
+struct
+{
+ template<typename OutputArray>
+ serialize_math_record_array_t<OutputArray>
+ operator () (hb_serialize_context_t *serialize_context, OutputArray& out,
+ const void *base) const
+ { return serialize_math_record_array_t<OutputArray> (serialize_context, out, base); }
+
+}
+HB_FUNCOBJ (serialize_math_record_array);
+
/*
*
* OpenType Layout Common Table Formats
@@ -508,8 +545,8 @@ struct RangeRecord
bool collect_coverage (set_t *glyphs) const
{ return glyphs->add_range (first, last); }
- HBGlyphID first; /* First GlyphID in the range */
- HBGlyphID last; /* Last GlyphID in the range */
+ HBGlyphID16 first; /* First GlyphID in the range */
+ HBGlyphID16 last; /* Last GlyphID in the range */
HBUINT16 value; /* Value */
public:
DEFINE_SIZE_STATIC (6);
@@ -1249,7 +1286,7 @@ struct Lookup
TRACE_DISPATCH (this, lookup_type);
unsigned int count = get_subtable_count ();
for (unsigned int i = 0; i < count; i++) {
- typename context_t::return_t r = get_subtable<TSubTable> (i).dispatch (c, lookup_type, hb_forward<Ts> (ds)...);
+ typename context_t::return_t r = get_subtable<TSubTable> (i).dispatch (c, lookup_type, std::forward<Ts> (ds)...);
if (c->stop_sublookup_iteration (r))
return_trace (r);
}
@@ -1299,7 +1336,7 @@ struct Lookup
outMarkFilteringSet = markFilteringSet;
}
- return_trace (true);
+ return_trace (out->subTable.len);
}
template <typename TSubTable>
@@ -1454,7 +1491,7 @@ struct CoverageFormat1
protected:
HBUINT16 coverageFormat; /* Format identifier--format = 1 */
- SortedArray16Of<HBGlyphID>
+ SortedArray16Of<HBGlyphID16>
glyphArray; /* Array of GlyphIDs--in numerical order */
public:
DEFINE_SIZE_ARRAY (4, glyphArray);
@@ -1832,7 +1869,7 @@ Coverage_serialize (hb_serialize_context_t *c,
static void ClassDef_remap_and_serialize (hb_serialize_context_t *c,
const hb_map_t &gid_klass_map,
- hb_sorted_vector_t<HBGlyphID> &glyphs,
+ hb_sorted_vector_t<HBGlyphID16> &glyphs,
const hb_set_t &klasses,
bool use_class_zero,
hb_map_t *klass_map /*INOUT*/)
@@ -1859,7 +1896,7 @@ static void ClassDef_remap_and_serialize (hb_serialize_context_t *c,
auto it =
+ glyphs.iter ()
- | hb_map_retains_sorting ([&] (const HBGlyphID& gid) -> hb_pair_t<hb_codepoint_t, unsigned>
+ | hb_map_retains_sorting ([&] (const HBGlyphID16& gid) -> hb_pair_t<hb_codepoint_t, unsigned>
{
unsigned new_klass = klass_map->get (gid_klass_map[gid]);
return hb_pair ((hb_codepoint_t)gid, new_klass);
@@ -1926,7 +1963,7 @@ struct ClassDefFormat1
const hb_set_t &glyphset = *c->plan->glyphset_gsub ();
const hb_map_t &glyph_map = *c->plan->glyph_map;
- hb_sorted_vector_t<HBGlyphID> glyphs;
+ hb_sorted_vector_t<HBGlyphID16> glyphs;
hb_set_t orig_klasses;
hb_map_t gid_org_klass_map;
@@ -2044,9 +2081,25 @@ struct ClassDefFormat1
intersect_glyphs->add (startGlyph + i);
}
+ void intersected_classes (const hb_set_t *glyphs, hb_set_t *intersect_classes) const
+ {
+ if (glyphs->is_empty ()) return;
+ hb_codepoint_t end_glyph = startGlyph + classValue.len - 1;
+ if (glyphs->get_min () < startGlyph ||
+ glyphs->get_max () > end_glyph)
+ intersect_classes->add (0);
+
+ for (const auto& _ : + hb_enumerate (classValue))
+ {
+ hb_codepoint_t g = startGlyph + _.first;
+ if (glyphs->has (g))
+ intersect_classes->add (_.second);
+ }
+ }
+
protected:
HBUINT16 classFormat; /* Format identifier--format = 1 */
- HBGlyphID startGlyph; /* First GlyphID of the classValueArray */
+ HBGlyphID16 startGlyph; /* First GlyphID of the classValueArray */
Array16Of<HBUINT16>
classValue; /* Array of Class Values--one per GlyphID */
public:
@@ -2128,7 +2181,7 @@ struct ClassDefFormat2
const hb_set_t &glyphset = *c->plan->glyphset_gsub ();
const hb_map_t &glyph_map = *c->plan->glyph_map;
- hb_sorted_vector_t<HBGlyphID> glyphs;
+ hb_sorted_vector_t<HBGlyphID16> glyphs;
hb_set_t orig_klasses;
hb_map_t gid_org_klass_map;
@@ -2277,6 +2330,31 @@ struct ClassDefFormat2
}
}
+ void intersected_classes (const hb_set_t *glyphs, hb_set_t *intersect_classes) const
+ {
+ if (glyphs->is_empty ()) return;
+
+ unsigned count = rangeRecord.len;
+ hb_codepoint_t g = HB_SET_VALUE_INVALID;
+ for (unsigned int i = 0; i < count; i++)
+ {
+ if (!hb_set_next (glyphs, &g))
+ break;
+ if (g < rangeRecord[i].first)
+ {
+ intersect_classes->add (0);
+ break;
+ }
+ g = rangeRecord[i].last;
+ }
+ if (g != HB_SET_VALUE_INVALID && hb_set_next (glyphs, &g))
+ intersect_classes->add (0);
+
+ for (const RangeRecord& record : rangeRecord.iter ())
+ if (record.intersects (glyphs))
+ intersect_classes->add (record.value);
+ }
+
protected:
HBUINT16 classFormat; /* Format identifier--format = 2 */
SortedArray16Of<RangeRecord>
@@ -2429,6 +2507,16 @@ struct ClassDef
}
}
+ void intersected_classes (const hb_set_t *glyphs, hb_set_t *intersect_classes) const
+ {
+ switch (u.format) {
+ case 1: return u.format1.intersected_classes (glyphs, intersect_classes);
+ case 2: return u.format2.intersected_classes (glyphs, intersect_classes);
+ default:return;
+ }
+ }
+
+
protected:
union {
HBUINT16 format; /* Format identifier */
@@ -2543,7 +2631,7 @@ struct VarRegionList
public:
HBUINT16 axisCount;
- HBUINT16 regionCount;
+ HBUINT15 regionCount;
protected:
UnsizedArrayOf<VarRegionAxis>
axesZ;
@@ -2947,7 +3035,7 @@ struct Condition
TRACE_DISPATCH (this, u.format);
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
switch (u.format) {
- case 1: return_trace (c->dispatch (u.format1, hb_forward<Ts> (ds)...));
+ case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
default:return_trace (c->default_return_value ());
}
}
diff --git a/thirdparty/harfbuzz/src/hb-ot-layout-gdef-table.hh b/thirdparty/harfbuzz/src/hb-ot-layout-gdef-table.hh
index 31a4a3e84c..aea644f3e1 100644
--- a/thirdparty/harfbuzz/src/hb-ot-layout-gdef-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-layout-gdef-table.hh
@@ -84,7 +84,7 @@ struct AttachList
bool subset (hb_subset_context_t *c) const
{
TRACE_SUBSET (this);
- const hb_set_t &glyphset = *c->plan->glyphset ();
+ const hb_set_t &glyphset = *c->plan->glyphset_gsub ();
const hb_map_t &glyph_map = *c->plan->glyph_map;
auto *out = c->serializer->start_embed (*this);
@@ -248,9 +248,9 @@ struct CaretValue
TRACE_DISPATCH (this, u.format);
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
switch (u.format) {
- case 1: return_trace (c->dispatch (u.format1, hb_forward<Ts> (ds)...));
- case 2: return_trace (c->dispatch (u.format2, hb_forward<Ts> (ds)...));
- case 3: return_trace (c->dispatch (u.format3, hb_forward<Ts> (ds)...));
+ case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
+ case 2: return_trace (c->dispatch (u.format2, std::forward<Ts> (ds)...));
+ case 3: return_trace (c->dispatch (u.format3, std::forward<Ts> (ds)...));
default:return_trace (c->default_return_value ());
}
}
@@ -371,7 +371,7 @@ struct LigCaretList
bool subset (hb_subset_context_t *c) const
{
TRACE_SUBSET (this);
- const hb_set_t &glyphset = *c->plan->glyphset ();
+ const hb_set_t &glyphset = *c->plan->glyphset_gsub ();
const hb_map_t &glyph_map = *c->plan->glyph_map;
auto *out = c->serializer->start_embed (*this);
diff --git a/thirdparty/harfbuzz/src/hb-ot-layout-gpos-table.hh b/thirdparty/harfbuzz/src/hb-ot-layout-gpos-table.hh
index 1e305518f5..a8fb5c7acb 100644
--- a/thirdparty/harfbuzz/src/hb-ot-layout-gpos-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-layout-gpos-table.hh
@@ -1050,8 +1050,8 @@ struct SinglePos
TRACE_DISPATCH (this, u.format);
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
switch (u.format) {
- case 1: return_trace (c->dispatch (u.format1, hb_forward<Ts> (ds)...));
- case 2: return_trace (c->dispatch (u.format2, hb_forward<Ts> (ds)...));
+ case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
+ case 2: return_trace (c->dispatch (u.format2, std::forward<Ts> (ds)...));
default:return_trace (c->default_return_value ());
}
}
@@ -1144,7 +1144,7 @@ struct PairValueRecord
}
protected:
- HBGlyphID secondGlyph; /* GlyphID of second glyph in the
+ HBGlyphID16 secondGlyph; /* GlyphID of second glyph in the
* pair--first glyph is listed in the
* Coverage table */
ValueRecord values; /* Positioning data for the first glyph
@@ -1220,9 +1220,9 @@ struct PairSet
record_size);
if (record)
{
- /* Note the intentional use of "|" instead of short-circuit "||". */
- if (valueFormats[0].apply_value (c, this, &record->values[0], buffer->cur_pos()) |
- valueFormats[1].apply_value (c, this, &record->values[len1], buffer->pos[pos]))
+ bool applied_first = valueFormats[0].apply_value (c, this, &record->values[0], buffer->cur_pos());
+ bool applied_second = valueFormats[1].apply_value (c, this, &record->values[len1], buffer->pos[pos]);
+ if (applied_first || applied_second)
buffer->unsafe_to_break (buffer->idx, pos + 1);
if (len2)
pos++;
@@ -1386,9 +1386,9 @@ struct PairPosFormat1
| hb_filter (glyphset, hb_first)
| hb_filter ([this, c, out] (const Offset16To<PairSet>& _)
{
+ auto snap = c->serializer->snapshot ();
auto *o = out->pairSet.serialize_append (c->serializer);
if (unlikely (!o)) return false;
- auto snap = c->serializer->snapshot ();
bool ret = o->serialize_subset (c, _, this, valueFormat, out->valueFormat);
if (!ret)
{
@@ -1560,9 +1560,9 @@ struct PairPosFormat2
if (unlikely (klass1 >= class1Count || klass2 >= class2Count)) return_trace (false);
const Value *v = &values[record_len * (klass1 * class2Count + klass2)];
- /* Note the intentional use of "|" instead of short-circuit "||". */
- if (valueFormat1.apply_value (c, this, v, buffer->cur_pos()) |
- valueFormat2.apply_value (c, this, v + len1, buffer->pos[skippy_iter.idx]))
+ bool applied_first = valueFormat1.apply_value (c, this, v, buffer->cur_pos());
+ bool applied_second = valueFormat2.apply_value (c, this, v + len1, buffer->pos[skippy_iter.idx]);
+ if (applied_first || applied_second)
buffer->unsafe_to_break (buffer->idx, skippy_iter.idx + 1);
buffer->idx = skippy_iter.idx;
@@ -1702,8 +1702,8 @@ struct PairPos
TRACE_DISPATCH (this, u.format);
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
switch (u.format) {
- case 1: return_trace (c->dispatch (u.format1, hb_forward<Ts> (ds)...));
- case 2: return_trace (c->dispatch (u.format2, hb_forward<Ts> (ds)...));
+ case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
+ case 2: return_trace (c->dispatch (u.format2, std::forward<Ts> (ds)...));
default:return_trace (c->default_return_value ());
}
}
@@ -1959,7 +1959,7 @@ struct CursivePos
TRACE_DISPATCH (this, u.format);
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
switch (u.format) {
- case 1: return_trace (c->dispatch (u.format1, hb_forward<Ts> (ds)...));
+ case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
default:return_trace (c->default_return_value ());
}
}
@@ -2194,7 +2194,7 @@ struct MarkBasePos
TRACE_DISPATCH (this, u.format);
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
switch (u.format) {
- case 1: return_trace (c->dispatch (u.format1, hb_forward<Ts> (ds)...));
+ case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
default:return_trace (c->default_return_value ());
}
}
@@ -2434,7 +2434,7 @@ struct MarkLigPos
TRACE_DISPATCH (this, u.format);
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
switch (u.format) {
- case 1: return_trace (c->dispatch (u.format1, hb_forward<Ts> (ds)...));
+ case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
default:return_trace (c->default_return_value ());
}
}
@@ -2653,7 +2653,7 @@ struct MarkMarkPos
TRACE_DISPATCH (this, u.format);
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
switch (u.format) {
- case 1: return_trace (c->dispatch (u.format1, hb_forward<Ts> (ds)...));
+ case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
default:return_trace (c->default_return_value ());
}
}
@@ -2704,15 +2704,15 @@ struct PosLookupSubTable
{
TRACE_DISPATCH (this, lookup_type);
switch (lookup_type) {
- case Single: return_trace (u.single.dispatch (c, hb_forward<Ts> (ds)...));
- case Pair: return_trace (u.pair.dispatch (c, hb_forward<Ts> (ds)...));
- case Cursive: return_trace (u.cursive.dispatch (c, hb_forward<Ts> (ds)...));
- case MarkBase: return_trace (u.markBase.dispatch (c, hb_forward<Ts> (ds)...));
- case MarkLig: return_trace (u.markLig.dispatch (c, hb_forward<Ts> (ds)...));
- case MarkMark: return_trace (u.markMark.dispatch (c, hb_forward<Ts> (ds)...));
- case Context: return_trace (u.context.dispatch (c, hb_forward<Ts> (ds)...));
- case ChainContext: return_trace (u.chainContext.dispatch (c, hb_forward<Ts> (ds)...));
- case Extension: return_trace (u.extension.dispatch (c, hb_forward<Ts> (ds)...));
+ case Single: return_trace (u.single.dispatch (c, std::forward<Ts> (ds)...));
+ case Pair: return_trace (u.pair.dispatch (c, std::forward<Ts> (ds)...));
+ case Cursive: return_trace (u.cursive.dispatch (c, std::forward<Ts> (ds)...));
+ case MarkBase: return_trace (u.markBase.dispatch (c, std::forward<Ts> (ds)...));
+ case MarkLig: return_trace (u.markLig.dispatch (c, std::forward<Ts> (ds)...));
+ case MarkMark: return_trace (u.markMark.dispatch (c, std::forward<Ts> (ds)...));
+ case Context: return_trace (u.context.dispatch (c, std::forward<Ts> (ds)...));
+ case ChainContext: return_trace (u.chainContext.dispatch (c, std::forward<Ts> (ds)...));
+ case Extension: return_trace (u.extension.dispatch (c, std::forward<Ts> (ds)...));
default: return_trace (c->default_return_value ());
}
}
@@ -2800,7 +2800,7 @@ struct PosLookup : Lookup
template <typename context_t, typename ...Ts>
typename context_t::return_t dispatch (context_t *c, Ts&&... ds) const
- { return Lookup::dispatch<SubTable> (c, hb_forward<Ts> (ds)...); }
+ { return Lookup::dispatch<SubTable> (c, std::forward<Ts> (ds)...); }
bool subset (hb_subset_context_t *c) const
{ return Lookup::subset<SubTable> (c); }
diff --git a/thirdparty/harfbuzz/src/hb-ot-layout-gsub-table.hh b/thirdparty/harfbuzz/src/hb-ot-layout-gsub-table.hh
index 393ada1351..710c5fbbb9 100644
--- a/thirdparty/harfbuzz/src/hb-ot-layout-gsub-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-layout-gsub-table.hh
@@ -225,7 +225,7 @@ struct SingleSubstFormat2
+ hb_zip (this+coverage, substitute)
| hb_filter (glyphset, hb_first)
| hb_filter (glyphset, hb_second)
- | hb_map_retains_sorting ([&] (hb_pair_t<hb_codepoint_t, const HBGlyphID &> p) -> hb_codepoint_pair_t
+ | hb_map_retains_sorting ([&] (hb_pair_t<hb_codepoint_t, const HBGlyphID16 &> p) -> hb_codepoint_pair_t
{ return hb_pair (glyph_map[p.first], glyph_map[p.second]); })
;
@@ -245,7 +245,7 @@ struct SingleSubstFormat2
Offset16To<Coverage>
coverage; /* Offset to Coverage table--from
* beginning of Substitution table */
- Array16Of<HBGlyphID>
+ Array16Of<HBGlyphID16>
substitute; /* Array of substitute
* GlyphIDs--ordered by Coverage Index */
public:
@@ -290,8 +290,8 @@ struct SingleSubst
TRACE_DISPATCH (this, u.format);
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
switch (u.format) {
- case 1: return_trace (c->dispatch (u.format1, hb_forward<Ts> (ds)...));
- case 2: return_trace (c->dispatch (u.format2, hb_forward<Ts> (ds)...));
+ case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
+ case 2: return_trace (c->dispatch (u.format2, std::forward<Ts> (ds)...));
default:return_trace (c->default_return_value ());
}
}
@@ -391,7 +391,7 @@ struct Sequence
}
protected:
- Array16Of<HBGlyphID>
+ Array16Of<HBGlyphID16>
substitute; /* String of GlyphIDs to substitute */
public:
DEFINE_SIZE_ARRAY (2, substitute);
@@ -443,9 +443,9 @@ struct MultipleSubstFormat1
}
bool serialize (hb_serialize_context_t *c,
- hb_sorted_array_t<const HBGlyphID> glyphs,
+ hb_sorted_array_t<const HBGlyphID16> glyphs,
hb_array_t<const unsigned int> substitute_len_list,
- hb_array_t<const HBGlyphID> substitute_glyphs_list)
+ hb_array_t<const HBGlyphID16> substitute_glyphs_list)
{
TRACE_SERIALIZE (this);
if (unlikely (!c->extend_min (this))) return_trace (false);
@@ -504,9 +504,9 @@ struct MultipleSubstFormat1
struct MultipleSubst
{
bool serialize (hb_serialize_context_t *c,
- hb_sorted_array_t<const HBGlyphID> glyphs,
+ hb_sorted_array_t<const HBGlyphID16> glyphs,
hb_array_t<const unsigned int> substitute_len_list,
- hb_array_t<const HBGlyphID> substitute_glyphs_list)
+ hb_array_t<const HBGlyphID16> substitute_glyphs_list)
{
TRACE_SERIALIZE (this);
if (unlikely (!c->extend_min (u.format))) return_trace (false);
@@ -524,7 +524,7 @@ struct MultipleSubst
TRACE_DISPATCH (this, u.format);
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
switch (u.format) {
- case 1: return_trace (c->dispatch (u.format1, hb_forward<Ts> (ds)...));
+ case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
default:return_trace (c->default_return_value ());
}
}
@@ -624,7 +624,7 @@ struct AlternateSet
}
protected:
- Array16Of<HBGlyphID>
+ Array16Of<HBGlyphID16>
alternates; /* Array of alternate GlyphIDs--in
* arbitrary order */
public:
@@ -686,9 +686,9 @@ struct AlternateSubstFormat1
}
bool serialize (hb_serialize_context_t *c,
- hb_sorted_array_t<const HBGlyphID> glyphs,
+ hb_sorted_array_t<const HBGlyphID16> glyphs,
hb_array_t<const unsigned int> alternate_len_list,
- hb_array_t<const HBGlyphID> alternate_glyphs_list)
+ hb_array_t<const HBGlyphID16> alternate_glyphs_list)
{
TRACE_SERIALIZE (this);
if (unlikely (!c->extend_min (this))) return_trace (false);
@@ -747,9 +747,9 @@ struct AlternateSubstFormat1
struct AlternateSubst
{
bool serialize (hb_serialize_context_t *c,
- hb_sorted_array_t<const HBGlyphID> glyphs,
+ hb_sorted_array_t<const HBGlyphID16> glyphs,
hb_array_t<const unsigned int> alternate_len_list,
- hb_array_t<const HBGlyphID> alternate_glyphs_list)
+ hb_array_t<const HBGlyphID16> alternate_glyphs_list)
{
TRACE_SERIALIZE (this);
if (unlikely (!c->extend_min (u.format))) return_trace (false);
@@ -767,7 +767,7 @@ struct AlternateSubst
TRACE_DISPATCH (this, u.format);
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
switch (u.format) {
- case 1: return_trace (c->dispatch (u.format1, hb_forward<Ts> (ds)...));
+ case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
default:return_trace (c->default_return_value ());
}
}
@@ -861,13 +861,15 @@ struct Ligature
return_trace (true);
}
- bool subset (hb_subset_context_t *c) const
+ bool subset (hb_subset_context_t *c, unsigned coverage_idx) const
{
TRACE_SUBSET (this);
const hb_set_t &glyphset = *c->plan->glyphset_gsub ();
const hb_map_t &glyph_map = *c->plan->glyph_map;
if (!intersects (&glyphset) || !glyphset.has (ligGlyph)) return_trace (false);
+ // Ensure Coverage table is always packed after this.
+ c->serializer->add_virtual_link (coverage_idx);
auto it =
+ hb_iter (component)
@@ -888,8 +890,8 @@ struct Ligature
}
protected:
- HBGlyphID ligGlyph; /* GlyphID of ligature to substitute */
- HeadlessArrayOf<HBGlyphID>
+ HBGlyphID16 ligGlyph; /* GlyphID of ligature to substitute */
+ HeadlessArrayOf<HBGlyphID16>
component; /* Array of component GlyphIDs--start
* with the second component--ordered
* in writing direction */
@@ -949,9 +951,9 @@ struct LigatureSet
}
bool serialize (hb_serialize_context_t *c,
- hb_array_t<const HBGlyphID> ligatures,
+ hb_array_t<const HBGlyphID16> ligatures,
hb_array_t<const unsigned int> component_count_list,
- hb_array_t<const HBGlyphID> &component_list /* Starting from second for each ligature */)
+ hb_array_t<const HBGlyphID16> &component_list /* Starting from second for each ligature */)
{
TRACE_SERIALIZE (this);
if (unlikely (!c->extend_min (this))) return_trace (false);
@@ -968,16 +970,21 @@ struct LigatureSet
return_trace (true);
}
- bool subset (hb_subset_context_t *c) const
+ bool subset (hb_subset_context_t *c, unsigned coverage_idx) const
{
TRACE_SUBSET (this);
auto *out = c->serializer->start_embed (*this);
if (unlikely (!c->serializer->extend_min (out))) return_trace (false);
+ hb_iter (ligature)
- | hb_filter (subset_offset_array (c, out->ligature, this))
+ | hb_filter (subset_offset_array (c, out->ligature, this, coverage_idx))
| hb_drain
;
+
+ if (bool (out->ligature))
+ // Ensure Coverage table is always packed after this.
+ c->serializer->add_virtual_link (coverage_idx);
+
return_trace (bool (out->ligature));
}
@@ -1059,11 +1066,11 @@ struct LigatureSubstFormat1
}
bool serialize (hb_serialize_context_t *c,
- hb_sorted_array_t<const HBGlyphID> first_glyphs,
+ hb_sorted_array_t<const HBGlyphID16> first_glyphs,
hb_array_t<const unsigned int> ligature_per_first_glyph_count_list,
- hb_array_t<const HBGlyphID> ligatures_list,
+ hb_array_t<const HBGlyphID16> ligatures_list,
hb_array_t<const unsigned int> component_count_list,
- hb_array_t<const HBGlyphID> component_list /* Starting from second for each ligature */)
+ hb_array_t<const HBGlyphID16> component_list /* Starting from second for each ligature */)
{
TRACE_SERIALIZE (this);
if (unlikely (!c->extend_min (this))) return_trace (false);
@@ -1092,15 +1099,38 @@ struct LigatureSubstFormat1
if (unlikely (!c->serializer->extend_min (out))) return_trace (false);
out->format = format;
- hb_sorted_vector_t<hb_codepoint_t> new_coverage;
- + hb_zip (this+coverage, ligatureSet)
+ // Due to a bug in some older versions of windows 7 the Coverage table must be
+ // packed after the LigatureSet and Ligature tables, so serialize Coverage first
+ // which places it last in the packed order.
+ hb_set_t new_coverage;
+ + hb_zip (this+coverage, hb_iter (ligatureSet) | hb_map (hb_add (this)))
| hb_filter (glyphset, hb_first)
- | hb_filter (subset_offset_array (c, out->ligatureSet, this), hb_second)
+ | hb_filter ([&] (const LigatureSet& _) {
+ return _.intersects (&glyphset);
+ }, hb_second)
| hb_map (hb_first)
- | hb_map (glyph_map)
- | hb_sink (new_coverage)
+ | hb_sink (new_coverage);
+
+ if (!c->serializer->push<Coverage> ()
+ ->serialize (c->serializer,
+ + new_coverage.iter () | hb_map_retains_sorting (glyph_map)))
+ {
+ c->serializer->pop_discard ();
+ return_trace (false);
+ }
+
+ unsigned coverage_idx = c->serializer->pop_pack ();
+ c->serializer->add_link (out->coverage, coverage_idx);
+
+ + hb_zip (this+coverage, ligatureSet)
+ | hb_filter (new_coverage, hb_first)
+ | hb_map (hb_second)
+ // to ensure that the repacker always orders the coverage table after the LigatureSet
+ // and LigatureSubtable's they will be linked to the Coverage table via a virtual link
+ // the coverage table object idx is passed down to facilitate this.
+ | hb_apply (subset_offset_array (c, out->ligatureSet, this, coverage_idx))
;
- out->coverage.serialize_serialize (c->serializer, new_coverage.iter ());
+
return_trace (bool (new_coverage));
}
@@ -1125,11 +1155,11 @@ struct LigatureSubstFormat1
struct LigatureSubst
{
bool serialize (hb_serialize_context_t *c,
- hb_sorted_array_t<const HBGlyphID> first_glyphs,
+ hb_sorted_array_t<const HBGlyphID16> first_glyphs,
hb_array_t<const unsigned int> ligature_per_first_glyph_count_list,
- hb_array_t<const HBGlyphID> ligatures_list,
+ hb_array_t<const HBGlyphID16> ligatures_list,
hb_array_t<const unsigned int> component_count_list,
- hb_array_t<const HBGlyphID> component_list /* Starting from second for each ligature */)
+ hb_array_t<const HBGlyphID16> component_list /* Starting from second for each ligature */)
{
TRACE_SERIALIZE (this);
if (unlikely (!c->extend_min (u.format))) return_trace (false);
@@ -1152,7 +1182,7 @@ struct LigatureSubst
TRACE_DISPATCH (this, u.format);
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
switch (u.format) {
- case 1: return_trace (c->dispatch (u.format1, hb_forward<Ts> (ds)...));
+ case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
default:return_trace (c->default_return_value ());
}
}
@@ -1208,7 +1238,7 @@ struct ReverseChainSingleSubstFormat1
if (!intersects (c->glyphs)) return;
const Array16OfOffset16To<Coverage> &lookahead = StructAfter<Array16OfOffset16To<Coverage>> (backtrack);
- const Array16Of<HBGlyphID> &substitute = StructAfter<Array16Of<HBGlyphID>> (lookahead);
+ const Array16Of<HBGlyphID16> &substitute = StructAfter<Array16Of<HBGlyphID16>> (lookahead);
+ hb_zip (this+coverage, substitute)
| hb_filter (c->parent_active_glyphs (), hb_first)
@@ -1234,7 +1264,7 @@ struct ReverseChainSingleSubstFormat1
for (unsigned int i = 0; i < count; i++)
if (unlikely (!(this+lookahead[i]).collect_coverage (c->after))) return;
- const Array16Of<HBGlyphID> &substitute = StructAfter<Array16Of<HBGlyphID>> (lookahead);
+ const Array16Of<HBGlyphID16> &substitute = StructAfter<Array16Of<HBGlyphID16>> (lookahead);
count = substitute.len;
c->output->add_array (substitute.arrayZ, substitute.len);
}
@@ -1254,7 +1284,7 @@ struct ReverseChainSingleSubstFormat1
if (likely (index == NOT_COVERED)) return_trace (false);
const Array16OfOffset16To<Coverage> &lookahead = StructAfter<Array16OfOffset16To<Coverage>> (backtrack);
- const Array16Of<HBGlyphID> &substitute = StructAfter<Array16Of<HBGlyphID>> (lookahead);
+ const Array16Of<HBGlyphID16> &substitute = StructAfter<Array16Of<HBGlyphID16>> (lookahead);
if (unlikely (index >= substitute.len)) return_trace (false);
@@ -1317,7 +1347,7 @@ struct ReverseChainSingleSubstFormat1
if (!serialize_coverage_offset_array (c, backtrack_iter)) return_trace (false);
if (!serialize_coverage_offset_array (c, lookahead_iter)) return_trace (false);
- auto *substitute_out = c->serializer->start_embed<Array16Of<HBGlyphID>> ();
+ auto *substitute_out = c->serializer->start_embed<Array16Of<HBGlyphID16>> ();
auto substitutes =
+ coverage_subst_iter
| hb_map (hb_second)
@@ -1342,13 +1372,13 @@ struct ReverseChainSingleSubstFormat1
const hb_map_t &glyph_map = *c->plan->glyph_map;
const Array16OfOffset16To<Coverage> &lookahead = StructAfter<Array16OfOffset16To<Coverage>> (backtrack);
- const Array16Of<HBGlyphID> &substitute = StructAfter<Array16Of<HBGlyphID>> (lookahead);
+ const Array16Of<HBGlyphID16> &substitute = StructAfter<Array16Of<HBGlyphID16>> (lookahead);
auto it =
+ hb_zip (this+coverage, substitute)
| hb_filter (glyphset, hb_first)
| hb_filter (glyphset, hb_second)
- | hb_map_retains_sorting ([&] (hb_pair_t<hb_codepoint_t, const HBGlyphID &> p) -> hb_codepoint_pair_t
+ | hb_map_retains_sorting ([&] (hb_pair_t<hb_codepoint_t, const HBGlyphID16 &> p) -> hb_codepoint_pair_t
{ return hb_pair (glyph_map[p.first], glyph_map[p.second]); })
;
@@ -1363,7 +1393,7 @@ struct ReverseChainSingleSubstFormat1
const Array16OfOffset16To<Coverage> &lookahead = StructAfter<Array16OfOffset16To<Coverage>> (backtrack);
if (!lookahead.sanitize (c, this))
return_trace (false);
- const Array16Of<HBGlyphID> &substitute = StructAfter<Array16Of<HBGlyphID>> (lookahead);
+ const Array16Of<HBGlyphID16> &substitute = StructAfter<Array16Of<HBGlyphID16>> (lookahead);
return_trace (substitute.sanitize (c));
}
@@ -1380,7 +1410,7 @@ struct ReverseChainSingleSubstFormat1
lookaheadX; /* Array of coverage tables
* in lookahead sequence, in glyph
* sequence order */
- Array16Of<HBGlyphID>
+ Array16Of<HBGlyphID16>
substituteX; /* Array of substitute
* GlyphIDs--ordered by Coverage Index */
public:
@@ -1395,7 +1425,7 @@ struct ReverseChainSingleSubst
TRACE_DISPATCH (this, u.format);
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
switch (u.format) {
- case 1: return_trace (c->dispatch (u.format1, hb_forward<Ts> (ds)...));
+ case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
default:return_trace (c->default_return_value ());
}
}
@@ -1434,14 +1464,14 @@ struct SubstLookupSubTable
{
TRACE_DISPATCH (this, lookup_type);
switch (lookup_type) {
- case Single: return_trace (u.single.dispatch (c, hb_forward<Ts> (ds)...));
- case Multiple: return_trace (u.multiple.dispatch (c, hb_forward<Ts> (ds)...));
- case Alternate: return_trace (u.alternate.dispatch (c, hb_forward<Ts> (ds)...));
- case Ligature: return_trace (u.ligature.dispatch (c, hb_forward<Ts> (ds)...));
- case Context: return_trace (u.context.dispatch (c, hb_forward<Ts> (ds)...));
- case ChainContext: return_trace (u.chainContext.dispatch (c, hb_forward<Ts> (ds)...));
- case Extension: return_trace (u.extension.dispatch (c, hb_forward<Ts> (ds)...));
- case ReverseChainSingle: return_trace (u.reverseChainContextSingle.dispatch (c, hb_forward<Ts> (ds)...));
+ case Single: return_trace (u.single.dispatch (c, std::forward<Ts> (ds)...));
+ case Multiple: return_trace (u.multiple.dispatch (c, std::forward<Ts> (ds)...));
+ case Alternate: return_trace (u.alternate.dispatch (c, std::forward<Ts> (ds)...));
+ case Ligature: return_trace (u.ligature.dispatch (c, std::forward<Ts> (ds)...));
+ case Context: return_trace (u.context.dispatch (c, std::forward<Ts> (ds)...));
+ case ChainContext: return_trace (u.chainContext.dispatch (c, std::forward<Ts> (ds)...));
+ case Extension: return_trace (u.extension.dispatch (c, std::forward<Ts> (ds)...));
+ case ReverseChainSingle: return_trace (u.reverseChainContextSingle.dispatch (c, std::forward<Ts> (ds)...));
default: return_trace (c->default_return_value ());
}
}
@@ -1561,8 +1591,8 @@ struct SubstLookup : Lookup
bool serialize_single (hb_serialize_context_t *c,
uint32_t lookup_props,
- hb_sorted_array_t<const HBGlyphID> glyphs,
- hb_array_t<const HBGlyphID> substitutes)
+ hb_sorted_array_t<const HBGlyphID16> glyphs,
+ hb_array_t<const HBGlyphID16> substitutes)
{
TRACE_SERIALIZE (this);
if (unlikely (!Lookup::serialize (c, SubTable::Single, lookup_props, 1))) return_trace (false);
@@ -1577,9 +1607,9 @@ struct SubstLookup : Lookup
bool serialize_multiple (hb_serialize_context_t *c,
uint32_t lookup_props,
- hb_sorted_array_t<const HBGlyphID> glyphs,
+ hb_sorted_array_t<const HBGlyphID16> glyphs,
hb_array_t<const unsigned int> substitute_len_list,
- hb_array_t<const HBGlyphID> substitute_glyphs_list)
+ hb_array_t<const HBGlyphID16> substitute_glyphs_list)
{
TRACE_SERIALIZE (this);
if (unlikely (!Lookup::serialize (c, SubTable::Multiple, lookup_props, 1))) return_trace (false);
@@ -1598,9 +1628,9 @@ struct SubstLookup : Lookup
bool serialize_alternate (hb_serialize_context_t *c,
uint32_t lookup_props,
- hb_sorted_array_t<const HBGlyphID> glyphs,
+ hb_sorted_array_t<const HBGlyphID16> glyphs,
hb_array_t<const unsigned int> alternate_len_list,
- hb_array_t<const HBGlyphID> alternate_glyphs_list)
+ hb_array_t<const HBGlyphID16> alternate_glyphs_list)
{
TRACE_SERIALIZE (this);
if (unlikely (!Lookup::serialize (c, SubTable::Alternate, lookup_props, 1))) return_trace (false);
@@ -1620,11 +1650,11 @@ struct SubstLookup : Lookup
bool serialize_ligature (hb_serialize_context_t *c,
uint32_t lookup_props,
- hb_sorted_array_t<const HBGlyphID> first_glyphs,
+ hb_sorted_array_t<const HBGlyphID16> first_glyphs,
hb_array_t<const unsigned int> ligature_per_first_glyph_count_list,
- hb_array_t<const HBGlyphID> ligatures_list,
+ hb_array_t<const HBGlyphID16> ligatures_list,
hb_array_t<const unsigned int> component_count_list,
- hb_array_t<const HBGlyphID> component_list /* Starting from second for each ligature */)
+ hb_array_t<const HBGlyphID16> component_list /* Starting from second for each ligature */)
{
TRACE_SERIALIZE (this);
if (unlikely (!Lookup::serialize (c, SubTable::Ligature, lookup_props, 1))) return_trace (false);
@@ -1667,7 +1697,7 @@ struct SubstLookup : Lookup
template <typename context_t, typename ...Ts>
typename context_t::return_t dispatch (context_t *c, Ts&&... ds) const
- { return Lookup::dispatch<SubTable> (c, hb_forward<Ts> (ds)...); }
+ { return Lookup::dispatch<SubTable> (c, std::forward<Ts> (ds)...); }
bool subset (hb_subset_context_t *c) const
{ return Lookup::subset<SubTable> (c); }
diff --git a/thirdparty/harfbuzz/src/hb-ot-layout-gsubgpos.hh b/thirdparty/harfbuzz/src/hb-ot-layout-gsubgpos.hh
index 626abc5577..c0ed2bcc03 100644
--- a/thirdparty/harfbuzz/src/hb-ot-layout-gsubgpos.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-layout-gsubgpos.hh
@@ -1210,15 +1210,14 @@ static inline bool match_lookahead (hb_ot_apply_context_t *c,
struct LookupRecord
{
- LookupRecord* copy (hb_serialize_context_t *c,
- const hb_map_t *lookup_map) const
+ bool serialize (hb_serialize_context_t *c,
+ const hb_map_t *lookup_map) const
{
TRACE_SERIALIZE (this);
auto *out = c->embed (*this);
- if (unlikely (!out)) return_trace (nullptr);
+ if (unlikely (!out)) return_trace (false);
- out->lookupListIndex = hb_map_get (lookup_map, lookupListIndex);
- return_trace (out);
+ return_trace (c->check_assign (out->lookupListIndex, lookup_map->get (lookupListIndex), HB_SERIALIZE_ERROR_INT_OVERFLOW));
}
bool sanitize (hb_sanitize_context_t *c) const
@@ -1235,6 +1234,24 @@ struct LookupRecord
DEFINE_SIZE_STATIC (4);
};
+static unsigned serialize_lookuprecord_array (hb_serialize_context_t *c,
+ const hb_array_t<const LookupRecord> lookupRecords,
+ const hb_map_t *lookup_map)
+{
+ unsigned count = 0;
+ for (const LookupRecord& r : lookupRecords)
+ {
+ if (!lookup_map->has (r.lookupListIndex))
+ continue;
+
+ if (!r.serialize (c, lookup_map))
+ return 0;
+
+ count++;
+ }
+ return count;
+}
+
enum ContextFormat { SimpleContext = 1, ClassBasedContext = 2, CoverageBasedContext = 3 };
static void context_closure_recurse_lookups (hb_closure_context_t *c,
@@ -1605,8 +1622,6 @@ struct Rule
if (unlikely (!c->extend_min (out))) return_trace (false);
out->inputCount = inputCount;
- out->lookupCount = lookupCount;
-
const hb_array_t<const HBUINT16> input = inputZ.as_array (inputCount - 1);
for (const auto org : input)
{
@@ -1617,17 +1632,9 @@ struct Rule
const UnsizedArrayOf<LookupRecord> &lookupRecord = StructAfter<UnsizedArrayOf<LookupRecord>>
(inputZ.as_array ((inputCount ? inputCount - 1 : 0)));
- for (unsigned i = 0; i < (unsigned) lookupCount; i++)
- {
- if (!lookup_map->has (lookupRecord[i].lookupListIndex))
- {
- out->lookupCount--;
- continue;
- }
- c->copy (lookupRecord[i], lookup_map);
- }
- return_trace (true);
+ unsigned count = serialize_lookuprecord_array (c, lookupRecord.as_array (lookupCount), lookup_map);
+ return_trace (c->check_assign (out->lookupCount, count, HB_SERIALIZE_ERROR_INT_OVERFLOW));
}
bool subset (hb_subset_context_t *c,
@@ -1752,10 +1759,10 @@ struct RuleSet
for (const Offset16To<Rule>& _ : rule)
{
if (!_) continue;
+ auto o_snap = c->serializer->snapshot ();
auto *o = out->rule.serialize_append (c->serializer);
if (unlikely (!o)) continue;
- auto o_snap = c->serializer->snapshot ();
if (!o->serialize_subset (c, _, this, lookup_map, klass_map))
{
out->rule.pop ();
@@ -1943,12 +1950,20 @@ struct ContextFormat2
&class_def
};
+ hb_set_t retained_coverage_glyphs;
+ (this+coverage).intersected_coverage_glyphs (glyphs, &retained_coverage_glyphs);
+
+ hb_set_t coverage_glyph_classes;
+ class_def.intersected_classes (&retained_coverage_glyphs, &coverage_glyph_classes);
+
+
return
+ hb_iter (ruleSet)
| hb_map (hb_add (this))
| hb_enumerate
| hb_map ([&] (const hb_pair_t<unsigned, const RuleSet &> p)
{ return class_def.intersects_class (glyphs, p.first) &&
+ coverage_glyph_classes.has (p.first) &&
p.second.intersects (glyphs, lookup_context); })
| hb_any
;
@@ -2069,9 +2084,16 @@ struct ContextFormat2
hb_map_t klass_map;
out->classDef.serialize_subset (c, classDef, this, &klass_map);
+ const hb_set_t* glyphset = c->plan->glyphset_gsub ();
+ hb_set_t retained_coverage_glyphs;
+ (this+coverage).intersected_coverage_glyphs (glyphset, &retained_coverage_glyphs);
+
+ hb_set_t coverage_glyph_classes;
+ (this+classDef).intersected_classes (&retained_coverage_glyphs, &coverage_glyph_classes);
+
const hb_map_t *lookup_map = c->table_tag == HB_OT_TAG_GSUB ? c->plan->gsub_lookups : c->plan->gpos_lookups;
bool ret = true;
- int non_zero_index = 0, index = 0;
+ int non_zero_index = -1, index = 0;
for (const auto& _ : + hb_enumerate (ruleSet)
| hb_filter (klass_map, hb_first))
{
@@ -2082,13 +2104,14 @@ struct ContextFormat2
break;
}
- if (o->serialize_subset (c, _.second, this, lookup_map, &klass_map))
+ if (coverage_glyph_classes.has (_.first) &&
+ o->serialize_subset (c, _.second, this, lookup_map, &klass_map))
non_zero_index = index;
index++;
}
- if (!ret) return_trace (ret);
+ if (!ret || non_zero_index == -1) return_trace (false);
//prune empty trailing ruleSets
--index;
@@ -2226,7 +2249,6 @@ struct ContextFormat3
out->format = format;
out->glyphCount = glyphCount;
- out->lookupCount = lookupCount;
auto coverages = coverageZ.as_array (glyphCount);
@@ -2238,19 +2260,12 @@ struct ContextFormat3
if (!o->serialize_subset (c, offset, this)) return_trace (false);
}
- const LookupRecord *lookupRecord = &StructAfter<LookupRecord> (coverageZ.as_array (glyphCount));
+ const UnsizedArrayOf<LookupRecord>& lookupRecord = StructAfter<UnsizedArrayOf<LookupRecord>> (coverageZ.as_array (glyphCount));
const hb_map_t *lookup_map = c->table_tag == HB_OT_TAG_GSUB ? c->plan->gsub_lookups : c->plan->gpos_lookups;
- for (unsigned i = 0; i < (unsigned) lookupCount; i++)
- {
- if (!lookup_map->has (lookupRecord[i].lookupListIndex))
- {
- out->lookupCount--;
- continue;
- }
- c->serializer->copy (lookupRecord[i], lookup_map);
- }
- return_trace (true);
+
+ unsigned count = serialize_lookuprecord_array (c->serializer, lookupRecord.as_array (lookupCount), lookup_map);
+ return_trace (c->serializer->check_assign (out->lookupCount, count, HB_SERIALIZE_ERROR_INT_OVERFLOW));
}
bool sanitize (hb_sanitize_context_t *c) const
@@ -2289,9 +2304,9 @@ struct Context
TRACE_DISPATCH (this, u.format);
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
switch (u.format) {
- case 1: return_trace (c->dispatch (u.format1, hb_forward<Ts> (ds)...));
- case 2: return_trace (c->dispatch (u.format2, hb_forward<Ts> (ds)...));
- case 3: return_trace (c->dispatch (u.format3, hb_forward<Ts> (ds)...));
+ case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
+ case 2: return_trace (c->dispatch (u.format2, std::forward<Ts> (ds)...));
+ case 3: return_trace (c->dispatch (u.format3, std::forward<Ts> (ds)...));
default:return_trace (c->default_return_value ());
}
}
@@ -2539,15 +2554,15 @@ struct ChainRule
c->copy ((HBUINT16) g);
}
- ChainRule* copy (hb_serialize_context_t *c,
- const hb_map_t *lookup_map,
- const hb_map_t *backtrack_map,
- const hb_map_t *input_map = nullptr,
- const hb_map_t *lookahead_map = nullptr) const
+ bool serialize (hb_serialize_context_t *c,
+ const hb_map_t *lookup_map,
+ const hb_map_t *backtrack_map,
+ const hb_map_t *input_map = nullptr,
+ const hb_map_t *lookahead_map = nullptr) const
{
TRACE_SERIALIZE (this);
auto *out = c->start_embed (this);
- if (unlikely (!out)) return_trace (nullptr);
+ if (unlikely (!out)) return_trace (false);
const hb_map_t *mapping = backtrack_map;
serialize_array (c, backtrack.len, + backtrack.iter ()
@@ -2566,19 +2581,10 @@ struct ChainRule
const Array16Of<LookupRecord> &lookupRecord = StructAfter<Array16Of<LookupRecord>> (lookahead);
HBUINT16* lookupCount = c->embed (&(lookupRecord.len));
- if (!lookupCount) return_trace (nullptr);
+ if (!lookupCount) return_trace (false);
- for (unsigned i = 0; i < lookupRecord.len; i++)
- {
- if (!lookup_map->has (lookupRecord[i].lookupListIndex))
- {
- (*lookupCount)--;
- continue;
- }
- if (!c->copy (lookupRecord[i], lookup_map)) return_trace (nullptr);
- }
-
- return_trace (out);
+ unsigned count = serialize_lookuprecord_array (c, lookupRecord.as_array (), lookup_map);
+ return_trace (c->check_assign (*lookupCount, count, HB_SERIALIZE_ERROR_INT_OVERFLOW));
}
bool subset (hb_subset_context_t *c,
@@ -2600,7 +2606,7 @@ struct ChainRule
!hb_all (lookahead, glyphset))
return_trace (false);
- copy (c->serializer, lookup_map, c->plan->glyph_map);
+ serialize (c->serializer, lookup_map, c->plan->glyph_map);
}
else
{
@@ -2609,7 +2615,7 @@ struct ChainRule
!hb_all (lookahead, lookahead_map))
return_trace (false);
- copy (c->serializer, lookup_map, backtrack_map, input_map, lookahead_map);
+ serialize (c->serializer, lookup_map, backtrack_map, input_map, lookahead_map);
}
return_trace (true);
@@ -2724,10 +2730,10 @@ struct ChainRuleSet
for (const Offset16To<ChainRule>& _ : rule)
{
if (!_) continue;
+ auto o_snap = c->serializer->snapshot ();
auto *o = out->rule.serialize_append (c->serializer);
if (unlikely (!o)) continue;
- auto o_snap = c->serializer->snapshot ();
if (!o->serialize_subset (c, _, this,
lookup_map,
backtrack_klass_map,
@@ -2920,12 +2926,19 @@ struct ChainContextFormat2
&lookahead_class_def}
};
+ hb_set_t retained_coverage_glyphs;
+ (this+coverage).intersected_coverage_glyphs (glyphs, &retained_coverage_glyphs);
+
+ hb_set_t coverage_glyph_classes;
+ input_class_def.intersected_classes (&retained_coverage_glyphs, &coverage_glyph_classes);
+
return
+ hb_iter (ruleSet)
| hb_map (hb_add (this))
| hb_enumerate
| hb_map ([&] (const hb_pair_t<unsigned, const ChainRuleSet &> p)
{ return input_class_def.intersects_class (glyphs, p.first) &&
+ coverage_glyph_classes.has (p.first) &&
p.second.intersects (glyphs, lookup_context); })
| hb_any
;
@@ -3080,13 +3093,19 @@ struct ChainContextFormat2
lookahead_klass_map)))
return_trace (false);
+ const hb_set_t* glyphset = c->plan->glyphset_gsub ();
+ hb_set_t retained_coverage_glyphs;
+ (this+coverage).intersected_coverage_glyphs (glyphset, &retained_coverage_glyphs);
+
+ hb_set_t coverage_glyph_classes;
+ (this+inputClassDef).intersected_classes (&retained_coverage_glyphs, &coverage_glyph_classes);
+
int non_zero_index = -1, index = 0;
bool ret = true;
const hb_map_t *lookup_map = c->table_tag == HB_OT_TAG_GSUB ? c->plan->gsub_lookups : c->plan->gpos_lookups;
auto last_non_zero = c->serializer->snapshot ();
- for (const Offset16To<ChainRuleSet>& _ : + hb_enumerate (ruleSet)
- | hb_filter (input_klass_map, hb_first)
- | hb_map (hb_second))
+ for (const auto& _ : + hb_enumerate (ruleSet)
+ | hb_filter (input_klass_map, hb_first))
{
auto *o = out->ruleSet.serialize_append (c->serializer);
if (unlikely (!o))
@@ -3094,7 +3113,8 @@ struct ChainContextFormat2
ret = false;
break;
}
- if (o->serialize_subset (c, _, this,
+ if (coverage_glyph_classes.has (_.first) &&
+ o->serialize_subset (c, _.second, this,
lookup_map,
&backtrack_klass_map,
&input_klass_map,
@@ -3107,7 +3127,7 @@ struct ChainContextFormat2
index++;
}
- if (!ret) return_trace (ret);
+ if (!ret || non_zero_index == -1) return_trace (false);
// prune empty trailing ruleSets
if (index > non_zero_index) {
@@ -3318,22 +3338,12 @@ struct ChainContextFormat3
const Array16Of<LookupRecord> &lookupRecord = StructAfter<Array16Of<LookupRecord>> (lookahead);
const hb_map_t *lookup_map = c->table_tag == HB_OT_TAG_GSUB ? c->plan->gsub_lookups : c->plan->gpos_lookups;
- hb_set_t lookup_indices;
- for (unsigned i = 0; i < (unsigned) lookupRecord.len; i++)
- if (lookup_map->has (lookupRecord[i].lookupListIndex))
- lookup_indices.add (i);
- HBUINT16 lookupCount;
- lookupCount = lookup_indices.get_population ();
- if (!c->serializer->copy (lookupCount)) return_trace (false);
+ HBUINT16 *lookupCount = c->serializer->copy<HBUINT16> (lookupRecord.len);
+ if (!lookupCount) return_trace (false);
- for (unsigned i : lookup_indices.iter ())
- {
- if (!c->serializer->copy (lookupRecord[i], lookup_map))
- return_trace (false);
- }
-
- return_trace (true);
+ unsigned count = serialize_lookuprecord_array (c->serializer, lookupRecord.as_array (), lookup_map);
+ return_trace (c->serializer->check_assign (*lookupCount, count, HB_SERIALIZE_ERROR_INT_OVERFLOW));
}
bool sanitize (hb_sanitize_context_t *c) const
@@ -3378,9 +3388,9 @@ struct ChainContext
TRACE_DISPATCH (this, u.format);
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
switch (u.format) {
- case 1: return_trace (c->dispatch (u.format1, hb_forward<Ts> (ds)...));
- case 2: return_trace (c->dispatch (u.format2, hb_forward<Ts> (ds)...));
- case 3: return_trace (c->dispatch (u.format3, hb_forward<Ts> (ds)...));
+ case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
+ case 2: return_trace (c->dispatch (u.format2, std::forward<Ts> (ds)...));
+ case 3: return_trace (c->dispatch (u.format3, std::forward<Ts> (ds)...));
default:return_trace (c->default_return_value ());
}
}
@@ -3409,7 +3419,7 @@ struct ExtensionFormat1
{
TRACE_DISPATCH (this, format);
if (unlikely (!c->may_dispatch (this, this))) return_trace (c->no_dispatch_return_value ());
- return_trace (get_subtable<typename T::SubTable> ().dispatch (c, get_type (), hb_forward<Ts> (ds)...));
+ return_trace (get_subtable<typename T::SubTable> ().dispatch (c, get_type (), std::forward<Ts> (ds)...));
}
void collect_variation_indices (hb_collect_variation_indices_context_t *c) const
@@ -3489,7 +3499,7 @@ struct Extension
TRACE_DISPATCH (this, u.format);
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
switch (u.format) {
- case 1: return_trace (u.format1.dispatch (c, hb_forward<Ts> (ds)...));
+ case 1: return_trace (u.format1.dispatch (c, std::forward<Ts> (ds)...));
default:return_trace (c->default_return_value ());
}
}
@@ -3678,57 +3688,72 @@ struct GSUBGPOS
const hb_set_t *feature_indices,
hb_map_t *duplicate_feature_map /* OUT */) const
{
+ if (feature_indices->is_empty ()) return;
+ hb_hashmap_t<hb_tag_t, hb_set_t *, (unsigned)-1, nullptr> unique_features;
//find out duplicate features after subset
- unsigned prev = 0xFFFFu;
for (unsigned i : feature_indices->iter ())
{
- if (prev == 0xFFFFu)
+ hb_tag_t t = get_feature_tag (i);
+ if (t == unique_features.INVALID_KEY) continue;
+ if (!unique_features.has (t))
{
+ hb_set_t* indices = hb_set_create ();
+ if (unlikely (indices == hb_set_get_empty () ||
+ !unique_features.set (t, indices)))
+ {
+ hb_set_destroy (indices);
+ for (auto _ : unique_features.iter ())
+ hb_set_destroy (_.second);
+ return;
+ }
+ if (unique_features.get (t))
+ unique_features.get (t)->add (i);
duplicate_feature_map->set (i, i);
- prev = i;
continue;
}
- hb_tag_t t = get_feature_tag (i);
- hb_tag_t prev_t = get_feature_tag (prev);
- if (t != prev_t)
+ bool found = false;
+
+ hb_set_t* same_tag_features = unique_features.get (t);
+ for (unsigned other_f_index : same_tag_features->iter ())
{
- duplicate_feature_map->set (i, i);
- prev = i;
- continue;
- }
+ const Feature& f = get_feature (i);
+ const Feature& other_f = get_feature (other_f_index);
- const Feature& f = get_feature (i);
- const Feature& prev_f = get_feature (prev);
+ auto f_iter =
+ + hb_iter (f.lookupIndex)
+ | hb_filter (lookup_indices)
+ ;
- auto f_iter =
- + hb_iter (f.lookupIndex)
- | hb_filter (lookup_indices)
- ;
+ auto other_f_iter =
+ + hb_iter (other_f.lookupIndex)
+ | hb_filter (lookup_indices)
+ ;
- auto prev_iter =
- + hb_iter (prev_f.lookupIndex)
- | hb_filter (lookup_indices)
- ;
+ bool is_equal = true;
+ for (; f_iter && other_f_iter; f_iter++, other_f_iter++)
+ {
+ unsigned a = *f_iter;
+ unsigned b = *other_f_iter;
+ if (a != b) { is_equal = false; break; }
+ }
- if (f_iter.len () != prev_iter.len ())
- {
- duplicate_feature_map->set (i, i);
- prev = i;
- continue;
- }
+ if (is_equal == false || f_iter || other_f_iter) continue;
- bool is_equal = true;
- for (auto _ : + hb_zip (f_iter, prev_iter))
- if (_.first != _.second) { is_equal = false; break; }
+ found = true;
+ duplicate_feature_map->set (i, other_f_index);
+ break;
+ }
- if (is_equal == true) duplicate_feature_map->set (i, prev);
- else
+ if (found == false)
{
+ same_tag_features->add (i);
duplicate_feature_map->set (i, i);
- prev = i;
}
}
+
+ for (auto _ : unique_features.iter ())
+ hb_set_destroy (_.second);
}
void prune_features (const hb_map_t *lookup_indices, /* IN */
diff --git a/thirdparty/harfbuzz/src/hb-ot-layout-jstf-table.hh b/thirdparty/harfbuzz/src/hb-ot-layout-jstf-table.hh
index 3b2293dff0..a1c125b11b 100644
--- a/thirdparty/harfbuzz/src/hb-ot-layout-jstf-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-layout-jstf-table.hh
@@ -136,7 +136,7 @@ struct JstfLangSys : List16OfOffset16To<JstfPriority>
* ExtenderGlyphs -- Extender Glyph Table
*/
-typedef SortedArray16Of<HBGlyphID> ExtenderGlyphs;
+typedef SortedArray16Of<HBGlyphID16> ExtenderGlyphs;
/*
diff --git a/thirdparty/harfbuzz/src/hb-ot-layout.cc b/thirdparty/harfbuzz/src/hb-ot-layout.cc
index 0454af2063..fbdedd0e20 100644
--- a/thirdparty/harfbuzz/src/hb-ot-layout.cc
+++ b/thirdparty/harfbuzz/src/hb-ot-layout.cc
@@ -613,7 +613,7 @@ hb_ot_layout_table_get_feature_tags (hb_face_t *face,
* hb_ot_layout_table_find_feature:
* @face: #hb_face_t to work upon
* @table_tag: #HB_OT_TAG_GSUB or #HB_OT_TAG_GPOS
- * @feature_tag: The #hb_tag_t og the requested feature tag
+ * @feature_tag: The #hb_tag_t of the requested feature tag
* @feature_index: (out): The index of the requested feature
*
* Fetches the index for a given feature tag in the specified face's GSUB table
@@ -688,8 +688,8 @@ hb_ot_layout_script_get_language_tags (hb_face_t *face,
*
* Return value: %true if the language tag is found, %false otherwise
*
- * Since: ??
- * Deprecated: ??
+ * Since: 0.6.0
+ * Deprecated: 2.0.0
**/
hb_bool_t
hb_ot_layout_script_find_language (hb_face_t *face,
@@ -717,10 +717,14 @@ hb_ot_layout_script_find_language (hb_face_t *face,
* @language_tags: The array of language tags
* @language_index: (out): The index of the requested language
*
- * Fetches the index of a given language tag in the specified face's GSUB table
- * or GPOS table, underneath the specified script index.
+ * Fetches the index of the first language tag fom @language_tags that is present
+ * in the specified face's GSUB or GPOS table, underneath the specified script
+ * index.
*
- * Return value: %true if the language tag is found, %false otherwise
+ * If none of the given language tags is found, %false is returned and
+ * @language_index is set to the default language index.
+ *
+ * Return value: %true if one of the given language tags is found, %false otherwise
*
* Since: 2.0.0
**/
@@ -746,7 +750,8 @@ hb_ot_layout_script_select_language (hb_face_t *face,
if (s.find_lang_sys_index (HB_OT_TAG_DEFAULT_LANGUAGE, language_index))
return false;
- if (language_index) *language_index = HB_OT_LAYOUT_DEFAULT_LANGUAGE_INDEX;
+ if (language_index)
+ *language_index = HB_OT_LAYOUT_DEFAULT_LANGUAGE_INDEX;
return false;
}
@@ -1013,24 +1018,15 @@ struct hb_collect_features_context_t
}
has_feature_filter = true;
+ hb_set_t features_set;
for (; *features; features++)
- {
- hb_tag_t tag = *features;
- unsigned index;
- g.find_feature_index (tag, &index);
- if (index == OT::Index::NOT_FOUND_INDEX) continue;
+ features_set.add (*features);
- feature_indices_filter.add(index);
- for (int i = (int) index - 1; i >= 0; i--)
- {
- if (g.get_feature_tag (i) != tag) break;
- feature_indices_filter.add(i);
- }
- for (unsigned i = index + 1; i < g.get_feature_count (); i++)
- {
- if (g.get_feature_tag (i) != tag) break;
+ for (unsigned i = 0; i < g.get_feature_count (); i++)
+ {
+ hb_tag_t tag = g.get_feature_tag (i);
+ if (features_set.has (tag))
feature_indices_filter.add(i);
- }
}
}
@@ -2011,14 +2007,14 @@ struct hb_get_glyph_alternates_dispatch_t :
private:
template <typename T, typename ...Ts> auto
_dispatch (const T &obj, hb_priority<1>, Ts&&... ds) HB_AUTO_RETURN
- ( obj.get_glyph_alternates (hb_forward<Ts> (ds)...) )
+ ( obj.get_glyph_alternates (std::forward<Ts> (ds)...) )
template <typename T, typename ...Ts> auto
_dispatch (const T &obj, hb_priority<0>, Ts&&... ds) HB_AUTO_RETURN
( default_return_value () )
public:
template <typename T, typename ...Ts> auto
dispatch (const T &obj, Ts&&... ds) HB_AUTO_RETURN
- ( _dispatch (obj, hb_prioritize, hb_forward<Ts> (ds)...) )
+ ( _dispatch (obj, hb_prioritize, std::forward<Ts> (ds)...) )
};
/**
diff --git a/thirdparty/harfbuzz/src/hb-ot-layout.hh b/thirdparty/harfbuzz/src/hb-ot-layout.hh
index bcc014ee98..b15d053835 100644
--- a/thirdparty/harfbuzz/src/hb-ot-layout.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-layout.hh
@@ -187,7 +187,7 @@ _hb_clear_syllables (const hb_ot_shape_plan_t *plan HB_UNUSED,
* - General_Category: 5 bits.
* - A bit each for:
* * Is it Default_Ignorable(); we have a modified Default_Ignorable().
- * * Whether it's one of the three Mongolian Free Variation Selectors,
+ * * Whether it's one of the four Mongolian Free Variation Selectors,
* CGJ, or other characters that are hidden but should not be ignored
* like most other Default_Ignorable()s do during matching.
* * Whether it's a grapheme continuation.
@@ -202,7 +202,7 @@ _hb_clear_syllables (const hb_ot_shape_plan_t *plan HB_UNUSED,
enum hb_unicode_props_flags_t {
UPROPS_MASK_GEN_CAT = 0x001Fu,
UPROPS_MASK_IGNORABLE = 0x0020u,
- UPROPS_MASK_HIDDEN = 0x0040u, /* MONGOLIAN FREE VARIATION SELECTOR 1..3, or TAG characters */
+ UPROPS_MASK_HIDDEN = 0x0040u, /* MONGOLIAN FREE VARIATION SELECTOR 1..4, or TAG characters */
UPROPS_MASK_CONTINUATION=0x0080u,
/* If GEN_CAT=FORMAT, top byte masks: */
@@ -236,7 +236,7 @@ _hb_glyph_info_set_unicode_props (hb_glyph_info_t *info, hb_buffer_t *buffer)
* FVSes are GC=Mn, we have use a separate bit to remember them.
* Fixes:
* https://github.com/harfbuzz/harfbuzz/issues/234 */
- else if (unlikely (hb_in_range<hb_codepoint_t> (u, 0x180Bu, 0x180Du))) props |= UPROPS_MASK_HIDDEN;
+ else if (unlikely (hb_in_ranges<hb_codepoint_t> (u, 0x180Bu, 0x180Du, 0x180Fu, 0x180Fu))) props |= UPROPS_MASK_HIDDEN;
/* TAG characters need similar treatment. Fixes:
* https://github.com/harfbuzz/harfbuzz/issues/463 */
else if (unlikely (hb_in_range<hb_codepoint_t> (u, 0xE0020u, 0xE007Fu))) props |= UPROPS_MASK_HIDDEN;
diff --git a/thirdparty/harfbuzz/src/hb-ot-math-table.hh b/thirdparty/harfbuzz/src/hb-ot-math-table.hh
index 5916ad29f2..c2e365dbd6 100644
--- a/thirdparty/harfbuzz/src/hb-ot-math-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-math-table.hh
@@ -41,6 +41,16 @@ struct MathValueRecord
hb_position_t get_y_value (hb_font_t *font, const void *base) const
{ return font->em_scale_y (value) + (base+deviceTable).get_y_delta (font); }
+ MathValueRecord* copy (hb_serialize_context_t *c, const void *base) const
+ {
+ TRACE_SERIALIZE (this);
+ auto *out = c->embed (this);
+ if (unlikely (!out)) return_trace (nullptr);
+ out->deviceTable.serialize_copy (c, deviceTable, base, 0, hb_serialize_context_t::Head);
+
+ return_trace (out);
+ }
+
bool sanitize (hb_sanitize_context_t *c, const void *base) const
{
TRACE_SANITIZE (this);
@@ -59,6 +69,29 @@ struct MathValueRecord
struct MathConstants
{
+ MathConstants* copy (hb_serialize_context_t *c) const
+ {
+ TRACE_SERIALIZE (this);
+ auto *out = c->start_embed (this);
+ if (unlikely (!out)) return_trace (nullptr);
+
+ HBINT16 *p = c->allocate_size<HBINT16> (HBINT16::static_size * 2);
+ if (unlikely (!p)) return_trace (nullptr);
+ memcpy (p, percentScaleDown, HBINT16::static_size * 2);
+
+ HBUINT16 *m = c->allocate_size<HBUINT16> (HBUINT16::static_size * 2);
+ if (unlikely (!m)) return_trace (nullptr);
+ memcpy (m, minHeight, HBUINT16::static_size * 2);
+
+ unsigned count = ARRAY_LENGTH (mathValueRecords);
+ for (unsigned i = 0; i < count; i++)
+ if (!c->copy (mathValueRecords[i], this))
+ return_trace (nullptr);
+
+ if (!c->embed (radicalDegreeBottomRaisePercent)) return_trace (nullptr);
+ return_trace (out);
+ }
+
bool sanitize_math_value_records (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
@@ -165,6 +198,28 @@ struct MathConstants
struct MathItalicsCorrectionInfo
{
+ bool subset (hb_subset_context_t *c) const
+ {
+ TRACE_SUBSET (this);
+ const hb_set_t &glyphset = *c->plan->_glyphset_mathed;
+ const hb_map_t &glyph_map = *c->plan->glyph_map;
+
+ auto *out = c->serializer->start_embed (*this);
+ if (unlikely (!c->serializer->extend_min (out))) return_trace (false);
+
+ hb_sorted_vector_t<hb_codepoint_t> new_coverage;
+ + hb_zip (this+coverage, italicsCorrection)
+ | hb_filter (glyphset, hb_first)
+ | hb_filter (serialize_math_record_array (c->serializer, out->italicsCorrection, this), hb_second)
+ | hb_map (hb_first)
+ | hb_map (glyph_map)
+ | hb_sink (new_coverage)
+ ;
+
+ out->coverage.serialize_serialize (c->serializer, new_coverage.iter ());
+ return_trace (true);
+ }
+
bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
@@ -196,6 +251,28 @@ struct MathItalicsCorrectionInfo
struct MathTopAccentAttachment
{
+ bool subset (hb_subset_context_t *c) const
+ {
+ TRACE_SUBSET (this);
+ const hb_set_t &glyphset = *c->plan->_glyphset_mathed;
+ const hb_map_t &glyph_map = *c->plan->glyph_map;
+
+ auto *out = c->serializer->start_embed (*this);
+ if (unlikely (!c->serializer->extend_min (out))) return_trace (false);
+
+ hb_sorted_vector_t<hb_codepoint_t> new_coverage;
+ + hb_zip (this+topAccentCoverage, topAccentAttachment)
+ | hb_filter (glyphset, hb_first)
+ | hb_filter (serialize_math_record_array (c->serializer, out->topAccentAttachment, this), hb_second)
+ | hb_map (hb_first)
+ | hb_map (glyph_map)
+ | hb_sink (new_coverage)
+ ;
+
+ out->topAccentCoverage.serialize_serialize (c->serializer, new_coverage.iter ());
+ return_trace (true);
+ }
+
bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
@@ -229,6 +306,22 @@ struct MathTopAccentAttachment
struct MathKern
{
+ MathKern* copy (hb_serialize_context_t *c) const
+ {
+ TRACE_SERIALIZE (this);
+ auto *out = c->start_embed (this);
+ if (unlikely (!out)) return_trace (nullptr);
+
+ if (unlikely (!c->embed (heightCount))) return_trace (nullptr);
+
+ unsigned count = 2 * heightCount + 1;
+ for (unsigned i = 0; i < count; i++)
+ if (!c->copy (mathValueRecordsZ.arrayZ[i], this))
+ return_trace (nullptr);
+
+ return_trace (out);
+ }
+
bool sanitize_math_value_records (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
@@ -295,6 +388,19 @@ struct MathKern
struct MathKernInfoRecord
{
+ MathKernInfoRecord* copy (hb_serialize_context_t *c, const void *base) const
+ {
+ TRACE_SERIALIZE (this);
+ auto *out = c->embed (this);
+ if (unlikely (!out)) return_trace (nullptr);
+
+ unsigned count = ARRAY_LENGTH (mathKern);
+ for (unsigned i = 0; i < count; i++)
+ out->mathKern[i].serialize_copy (c, mathKern[i], base, 0, hb_serialize_context_t::Head);
+
+ return_trace (out);
+ }
+
bool sanitize (hb_sanitize_context_t *c, const void *base) const
{
TRACE_SANITIZE (this);
@@ -328,6 +434,28 @@ struct MathKernInfoRecord
struct MathKernInfo
{
+ bool subset (hb_subset_context_t *c) const
+ {
+ TRACE_SUBSET (this);
+ const hb_set_t &glyphset = *c->plan->_glyphset_mathed;
+ const hb_map_t &glyph_map = *c->plan->glyph_map;
+
+ auto *out = c->serializer->start_embed (*this);
+ if (unlikely (!c->serializer->extend_min (out))) return_trace (false);
+
+ hb_sorted_vector_t<hb_codepoint_t> new_coverage;
+ + hb_zip (this+mathKernCoverage, mathKernInfoRecords)
+ | hb_filter (glyphset, hb_first)
+ | hb_filter (serialize_math_record_array (c->serializer, out->mathKernInfoRecords, this), hb_second)
+ | hb_map (hb_first)
+ | hb_map (glyph_map)
+ | hb_sink (new_coverage)
+ ;
+
+ out->mathKernCoverage.serialize_serialize (c->serializer, new_coverage.iter ());
+ return_trace (true);
+ }
+
bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
@@ -365,6 +493,30 @@ struct MathKernInfo
struct MathGlyphInfo
{
+ bool subset (hb_subset_context_t *c) const
+ {
+ TRACE_SUBSET (this);
+ auto *out = c->serializer->embed (*this);
+ if (unlikely (!out)) return_trace (false);
+
+ out->mathItalicsCorrectionInfo.serialize_subset (c, mathItalicsCorrectionInfo, this);
+ out->mathTopAccentAttachment.serialize_subset (c, mathTopAccentAttachment, this);
+
+ const hb_set_t &glyphset = *c->plan->_glyphset_mathed;
+ const hb_map_t &glyph_map = *c->plan->glyph_map;
+
+ auto it =
+ + hb_iter (this+extendedShapeCoverage)
+ | hb_filter (glyphset)
+ | hb_map_retains_sorting (glyph_map)
+ ;
+
+ out->extendedShapeCoverage.serialize_serialize (c->serializer, it);
+
+ out->mathKernInfo.serialize_subset (c, mathKernInfo, this);
+ return_trace (true);
+ }
+
bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
@@ -420,14 +572,27 @@ struct MathGlyphVariantRecord
{
friend struct MathGlyphConstruction;
+ bool subset (hb_subset_context_t *c) const
+ {
+ TRACE_SUBSET (this);
+ auto *out = c->serializer->embed (this);
+ if (unlikely (!out)) return_trace (false);
+
+ const hb_map_t& glyph_map = *c->plan->glyph_map;
+ return_trace (c->serializer->check_assign (out->variantGlyph, glyph_map.get (variantGlyph), HB_SERIALIZE_ERROR_INT_OVERFLOW));
+ }
+
bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this));
}
+ void closure_glyphs (hb_set_t *variant_glyphs) const
+ { variant_glyphs->add (variantGlyph); }
+
protected:
- HBGlyphID variantGlyph; /* Glyph ID for the variant. */
+ HBGlyphID16 variantGlyph; /* Glyph ID for the variant. */
HBUINT16 advanceMeasurement; /* Advance width/height, in design units, of the
* variant, in the direction of requested
* glyph extension. */
@@ -450,6 +615,16 @@ struct PartFlags : HBUINT16
struct MathGlyphPartRecord
{
+ bool subset (hb_subset_context_t *c) const
+ {
+ TRACE_SUBSET (this);
+ auto *out = c->serializer->embed (this);
+ if (unlikely (!out)) return_trace (false);
+
+ const hb_map_t& glyph_map = *c->plan->glyph_map;
+ return_trace (c->serializer->check_assign (out->glyph, glyph_map.get (glyph), HB_SERIALIZE_ERROR_INT_OVERFLOW));
+ }
+
bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
@@ -474,8 +649,11 @@ struct MathGlyphPartRecord
(partFlags & PartFlags::Defined);
}
+ void closure_glyphs (hb_set_t *variant_glyphs) const
+ { variant_glyphs->add (glyph); }
+
protected:
- HBGlyphID glyph; /* Glyph ID for the part. */
+ HBGlyphID16 glyph; /* Glyph ID for the part. */
HBUINT16 startConnectorLength;
/* Advance width/ height of the straight bar
* connector material, in design units, is at
@@ -497,6 +675,20 @@ struct MathGlyphPartRecord
struct MathGlyphAssembly
{
+ bool subset (hb_subset_context_t *c) const
+ {
+ TRACE_SUBSET (this);
+ auto *out = c->serializer->start_embed (*this);
+ if (unlikely (!out)) return_trace (false);
+
+ if (!c->serializer->copy (italicsCorrection, this)) return_trace (false);
+ if (!c->serializer->copy<HBUINT16> (partRecords.len)) return_trace (false);
+
+ for (const auto& record : partRecords.iter ())
+ if (!record.subset (c)) return_trace (false);
+ return_trace (true);
+ }
+
bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
@@ -526,6 +718,12 @@ struct MathGlyphAssembly
return partRecords.len;
}
+ void closure_glyphs (hb_set_t *variant_glyphs) const
+ {
+ for (const auto& _ : partRecords.iter ())
+ _.closure_glyphs (variant_glyphs);
+ }
+
protected:
MathValueRecord
italicsCorrection;
@@ -543,6 +741,22 @@ struct MathGlyphAssembly
struct MathGlyphConstruction
{
+ bool subset (hb_subset_context_t *c) const
+ {
+ TRACE_SUBSET (this);
+ auto *out = c->serializer->start_embed (*this);
+ if (unlikely (!c->serializer->extend_min (out))) return_trace (false);
+
+ out->glyphAssembly.serialize_subset (c, glyphAssembly, this);
+
+ if (!c->serializer->check_assign (out->mathGlyphVariantRecord.len, mathGlyphVariantRecord.len, HB_SERIALIZE_ERROR_INT_OVERFLOW))
+ return_trace (false);
+ for (const auto& record : mathGlyphVariantRecord.iter ())
+ if (!record.subset (c)) return_trace (false);
+
+ return_trace (true);
+ }
+
bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
@@ -569,6 +783,14 @@ struct MathGlyphConstruction
return mathGlyphVariantRecord.len;
}
+ void closure_glyphs (hb_set_t *variant_glyphs) const
+ {
+ (this+glyphAssembly).closure_glyphs (variant_glyphs);
+
+ for (const auto& _ : mathGlyphVariantRecord.iter ())
+ _.closure_glyphs (variant_glyphs);
+ }
+
protected:
/* Offset to MathGlyphAssembly table for this shape - from the beginning of
MathGlyphConstruction table. May be NULL. */
@@ -583,6 +805,91 @@ struct MathGlyphConstruction
struct MathVariants
{
+ void closure_glyphs (const hb_set_t *glyph_set,
+ hb_set_t *variant_glyphs) const
+ {
+ const hb_array_t<const Offset16To<MathGlyphConstruction>> glyph_construction_offsets = glyphConstruction.as_array (vertGlyphCount + horizGlyphCount);
+
+ if (vertGlyphCoverage)
+ {
+ const auto vert_offsets = glyph_construction_offsets.sub_array (0, vertGlyphCount);
+ + hb_zip (this+vertGlyphCoverage, vert_offsets)
+ | hb_filter (glyph_set, hb_first)
+ | hb_map (hb_second)
+ | hb_map (hb_add (this))
+ | hb_apply ([=] (const MathGlyphConstruction &_) { _.closure_glyphs (variant_glyphs); })
+ ;
+ }
+
+ if (horizGlyphCoverage)
+ {
+ const auto hori_offsets = glyph_construction_offsets.sub_array (vertGlyphCount, horizGlyphCount);
+ + hb_zip (this+horizGlyphCoverage, hori_offsets)
+ | hb_filter (glyph_set, hb_first)
+ | hb_map (hb_second)
+ | hb_map (hb_add (this))
+ | hb_apply ([=] (const MathGlyphConstruction &_) { _.closure_glyphs (variant_glyphs); })
+ ;
+ }
+ }
+
+ void collect_coverage_and_indices (hb_sorted_vector_t<hb_codepoint_t>& new_coverage,
+ const Offset16To<Coverage>& coverage,
+ unsigned i,
+ unsigned end_index,
+ hb_set_t& indices,
+ const hb_set_t& glyphset,
+ const hb_map_t& glyph_map) const
+ {
+ if (!coverage) return;
+
+ for (const auto _ : (this+coverage).iter ())
+ {
+ if (i >= end_index) return;
+ if (glyphset.has (_))
+ {
+ unsigned new_gid = glyph_map.get (_);
+ new_coverage.push (new_gid);
+ indices.add (i);
+ }
+ i++;
+ }
+ }
+
+ bool subset (hb_subset_context_t *c) const
+ {
+ TRACE_SUBSET (this);
+ const hb_set_t &glyphset = *c->plan->_glyphset_mathed;
+ const hb_map_t &glyph_map = *c->plan->glyph_map;
+
+ auto *out = c->serializer->start_embed (*this);
+ if (unlikely (!c->serializer->extend_min (out))) return_trace (false);
+ if (!c->serializer->check_assign (out->minConnectorOverlap, minConnectorOverlap, HB_SERIALIZE_ERROR_INT_OVERFLOW))
+ return_trace (false);
+
+ hb_sorted_vector_t<hb_codepoint_t> new_vert_coverage;
+ hb_sorted_vector_t<hb_codepoint_t> new_hori_coverage;
+ hb_set_t indices;
+ collect_coverage_and_indices (new_vert_coverage, vertGlyphCoverage, 0, vertGlyphCount, indices, glyphset, glyph_map);
+ collect_coverage_and_indices (new_hori_coverage, horizGlyphCoverage, vertGlyphCount, vertGlyphCount + horizGlyphCount, indices, glyphset, glyph_map);
+
+ if (!c->serializer->check_assign (out->vertGlyphCount, new_vert_coverage.length, HB_SERIALIZE_ERROR_INT_OVERFLOW))
+ return_trace (false);
+ if (!c->serializer->check_assign (out->horizGlyphCount, new_hori_coverage.length, HB_SERIALIZE_ERROR_INT_OVERFLOW))
+ return_trace (false);
+
+ for (unsigned i : indices.iter ())
+ {
+ auto *o = c->serializer->embed (glyphConstruction[i]);
+ if (!o) return_trace (false);
+ o->serialize_subset (c, glyphConstruction[i], this);
+ }
+
+ out->vertGlyphCoverage.serialize_serialize (c->serializer, new_vert_coverage.iter ());
+ out->horizGlyphCoverage.serialize_serialize (c->serializer, new_hori_coverage.iter ());
+ return_trace (true);
+ }
+
bool sanitize_offsets (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
@@ -690,6 +997,28 @@ struct MATH
bool has_data () const { return version.to_int (); }
+ void closure_glyphs (hb_set_t *glyph_set) const
+ {
+ if (mathVariants)
+ {
+ hb_set_t variant_glyphs;
+ (this+mathVariants).closure_glyphs (glyph_set, &variant_glyphs);
+ hb_set_union (glyph_set, &variant_glyphs);
+ }
+ }
+
+ bool subset (hb_subset_context_t *c) const
+ {
+ TRACE_SUBSET (this);
+ auto *out = c->serializer->embed (*this);
+ if (unlikely (!out)) return_trace (false);
+
+ out->mathConstants.serialize_copy (c->serializer, mathConstants, this, 0, hb_serialize_context_t::Head);
+ out->mathGlyphInfo.serialize_subset (c, mathGlyphInfo, this);
+ out->mathVariants.serialize_subset (c, mathVariants, this);
+ return_trace (true);
+ }
+
bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
diff --git a/thirdparty/harfbuzz/src/hb-ot-name.h b/thirdparty/harfbuzz/src/hb-ot-name.h
index 9359014c8a..1ea4b55e5c 100644
--- a/thirdparty/harfbuzz/src/hb-ot-name.h
+++ b/thirdparty/harfbuzz/src/hb-ot-name.h
@@ -36,12 +36,42 @@ HB_BEGIN_DECLS
/**
* hb_ot_name_id_t:
+ * @HB_OT_NAME_ID_COPYRIGHT: Copyright notice
+ * @HB_OT_NAME_ID_FONT_FAMILY: Font Family name
+ * @HB_OT_NAME_ID_FONT_SUBFAMILY: Font Subfamily name
+ * @HB_OT_NAME_ID_UNIQUE_ID: Unique font identifier
+ * @HB_OT_NAME_ID_FULL_NAME: Full font name that reflects
+ * all family and relevant subfamily descriptors
+ * @HB_OT_NAME_ID_VERSION_STRING: Version string
+ * @HB_OT_NAME_ID_POSTSCRIPT_NAME: PostScript name for the font
+ * @HB_OT_NAME_ID_TRADEMARK: Trademark
+ * @HB_OT_NAME_ID_MANUFACTURER: Manufacturer Name
+ * @HB_OT_NAME_ID_DESIGNER: Designer
+ * @HB_OT_NAME_ID_DESCRIPTION: Description
+ * @HB_OT_NAME_ID_VENDOR_URL: URL of font vendor
+ * @HB_OT_NAME_ID_DESIGNER_URL: URL of typeface designer
+ * @HB_OT_NAME_ID_LICENSE: License Description
+ * @HB_OT_NAME_ID_LICENSE_URL: URL where additional licensing
+ * information can be found
+ * @HB_OT_NAME_ID_TYPOGRAPHIC_FAMILY: Typographic Family name
+ * @HB_OT_NAME_ID_TYPOGRAPHIC_SUBFAMILY: Typographic Subfamily name
+ * @HB_OT_NAME_ID_MAC_FULL_NAME: Compatible Full Name for MacOS
+ * @HB_OT_NAME_ID_SAMPLE_TEXT: Sample text
+ * @HB_OT_NAME_ID_CID_FINDFONT_NAME: PostScript CID findfont name
+ * @HB_OT_NAME_ID_WWS_FAMILY: WWS Family Name
+ * @HB_OT_NAME_ID_WWS_SUBFAMILY: WWS Subfamily Name
+ * @HB_OT_NAME_ID_LIGHT_BACKGROUND: Light Background Palette
+ * @HB_OT_NAME_ID_DARK_BACKGROUND: Dark Background Palette
+ * @HB_OT_NAME_ID_VARIATIONS_PS_PREFIX: Variations PostScript Name Prefix
* @HB_OT_NAME_ID_INVALID: Value to represent a nonexistent name ID.
*
* An integral type representing an OpenType 'name' table name identifier.
* There are predefined name IDs, as well as name IDs return from other
* API. These can be used to fetch name strings from a font face.
*
+ * For more information on these fields, see the
+ * [OpenType spec](https://docs.microsoft.com/en-us/typography/opentype/spec/name#name-ids).
+ *
* Since: 2.0.0
**/
enum
diff --git a/thirdparty/harfbuzz/src/hb-ot-shape-complex-arabic-fallback.hh b/thirdparty/harfbuzz/src/hb-ot-shape-complex-arabic-fallback.hh
index 2b3b134ae3..78f46c1cac 100644
--- a/thirdparty/harfbuzz/src/hb-ot-shape-complex-arabic-fallback.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-shape-complex-arabic-fallback.hh
@@ -49,8 +49,8 @@ arabic_fallback_synthesize_lookup_single (const hb_ot_shape_plan_t *plan HB_UNUS
hb_font_t *font,
unsigned int feature_index)
{
- OT::HBGlyphID glyphs[SHAPING_TABLE_LAST - SHAPING_TABLE_FIRST + 1];
- OT::HBGlyphID substitutes[SHAPING_TABLE_LAST - SHAPING_TABLE_FIRST + 1];
+ OT::HBGlyphID16 glyphs[SHAPING_TABLE_LAST - SHAPING_TABLE_FIRST + 1];
+ OT::HBGlyphID16 substitutes[SHAPING_TABLE_LAST - SHAPING_TABLE_FIRST + 1];
unsigned int num_glyphs = 0;
/* Populate arrays */
@@ -78,7 +78,7 @@ arabic_fallback_synthesize_lookup_single (const hb_ot_shape_plan_t *plan HB_UNUS
/* Bubble-sort or something equally good!
* May not be good-enough for presidential candidate interviews, but good-enough for us... */
hb_stable_sort (&glyphs[0], num_glyphs,
- (int(*)(const OT::HBUINT16*, const OT::HBUINT16 *)) OT::HBGlyphID::cmp,
+ (int(*)(const OT::HBUINT16*, const OT::HBUINT16 *)) OT::HBGlyphID16::cmp,
&substitutes[0]);
@@ -99,15 +99,15 @@ static OT::SubstLookup *
arabic_fallback_synthesize_lookup_ligature (const hb_ot_shape_plan_t *plan HB_UNUSED,
hb_font_t *font)
{
- OT::HBGlyphID first_glyphs[ARRAY_LENGTH_CONST (ligature_table)];
+ OT::HBGlyphID16 first_glyphs[ARRAY_LENGTH_CONST (ligature_table)];
unsigned int first_glyphs_indirection[ARRAY_LENGTH_CONST (ligature_table)];
unsigned int ligature_per_first_glyph_count_list[ARRAY_LENGTH_CONST (first_glyphs)];
unsigned int num_first_glyphs = 0;
/* We know that all our ligatures are 2-component */
- OT::HBGlyphID ligature_list[ARRAY_LENGTH_CONST (first_glyphs) * ARRAY_LENGTH_CONST(ligature_table[0].ligatures)];
+ OT::HBGlyphID16 ligature_list[ARRAY_LENGTH_CONST (first_glyphs) * ARRAY_LENGTH_CONST(ligature_table[0].ligatures)];
unsigned int component_count_list[ARRAY_LENGTH_CONST (ligature_list)];
- OT::HBGlyphID component_list[ARRAY_LENGTH_CONST (ligature_list) * 1/* One extra component per ligature */];
+ OT::HBGlyphID16 component_list[ARRAY_LENGTH_CONST (ligature_list) * 1/* One extra component per ligature */];
unsigned int num_ligatures = 0;
/* Populate arrays */
@@ -125,7 +125,7 @@ arabic_fallback_synthesize_lookup_ligature (const hb_ot_shape_plan_t *plan HB_UN
num_first_glyphs++;
}
hb_stable_sort (&first_glyphs[0], num_first_glyphs,
- (int(*)(const OT::HBUINT16*, const OT::HBUINT16 *)) OT::HBGlyphID::cmp,
+ (int(*)(const OT::HBUINT16*, const OT::HBUINT16 *)) OT::HBGlyphID16::cmp,
&first_glyphs_indirection[0]);
/* Now that the first-glyphs are sorted, walk again, populate ligatures. */
diff --git a/thirdparty/harfbuzz/src/hb-ot-shape-complex-arabic.cc b/thirdparty/harfbuzz/src/hb-ot-shape-complex-arabic.cc
index 1f8c1410fc..222c5d6b71 100644
--- a/thirdparty/harfbuzz/src/hb-ot-shape-complex-arabic.cc
+++ b/thirdparty/harfbuzz/src/hb-ot-shape-complex-arabic.cc
@@ -349,7 +349,7 @@ mongolian_variation_selectors (hb_buffer_t *buffer)
unsigned int count = buffer->len;
hb_glyph_info_t *info = buffer->info;
for (unsigned int i = 1; i < count; i++)
- if (unlikely (hb_in_range<hb_codepoint_t> (info[i].codepoint, 0x180Bu, 0x180Du)))
+ if (unlikely (hb_in_ranges<hb_codepoint_t> (info[i].codepoint, 0x180Bu, 0x180Du, 0x180Fu, 0x180Fu)))
info[i].arabic_shaping_action() = info[i - 1].arabic_shaping_action();
}
diff --git a/thirdparty/harfbuzz/src/hb-ot-shape-complex-indic.cc b/thirdparty/harfbuzz/src/hb-ot-shape-complex-indic.cc
index 0983a32848..4a8781c8f8 100644
--- a/thirdparty/harfbuzz/src/hb-ot-shape-complex-indic.cc
+++ b/thirdparty/harfbuzz/src/hb-ot-shape-complex-indic.cc
@@ -202,9 +202,6 @@ collect_features_indic (hb_ot_shape_planner_t *plan)
for (; i < INDIC_NUM_FEATURES; i++)
map->add_feature (indic_features[i]);
- map->enable_feature (HB_TAG('c','a','l','t'));
- map->enable_feature (HB_TAG('c','l','i','g'));
-
map->add_gsub_pause (_hb_clear_syllables);
}
diff --git a/thirdparty/harfbuzz/src/hb-ot-shape-complex-khmer.hh b/thirdparty/harfbuzz/src/hb-ot-shape-complex-khmer.hh
index e24d68a8b5..35bfbb64d5 100644
--- a/thirdparty/harfbuzz/src/hb-ot-shape-complex-khmer.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-shape-complex-khmer.hh
@@ -49,13 +49,15 @@ enum khmer_category_t
//OT_VPst = 29,
};
+using khmer_position_t = indic_position_t;
+
static inline void
set_khmer_properties (hb_glyph_info_t &info)
{
hb_codepoint_t u = info.codepoint;
unsigned int type = hb_indic_get_categories (u);
khmer_category_t cat = (khmer_category_t) (type & 0xFFu);
- indic_position_t pos = (indic_position_t) (type >> 8);
+ khmer_position_t pos = (khmer_position_t) (type >> 8);
/*
diff --git a/thirdparty/harfbuzz/src/hb-ot-shape-complex-myanmar-machine.hh b/thirdparty/harfbuzz/src/hb-ot-shape-complex-myanmar-machine.hh
index c09497896d..f4ef33004d 100644
--- a/thirdparty/harfbuzz/src/hb-ot-shape-complex-myanmar-machine.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-shape-complex-myanmar-machine.hh
@@ -51,6 +51,7 @@ enum myanmar_syllable_type_t {
#define myanmar_syllable_machine_ex_H 4u
#define myanmar_syllable_machine_ex_IV 2u
#define myanmar_syllable_machine_ex_MH 21u
+#define myanmar_syllable_machine_ex_ML 33u
#define myanmar_syllable_machine_ex_MR 22u
#define myanmar_syllable_machine_ex_MW 23u
#define myanmar_syllable_machine_ex_MY 24u
@@ -67,35 +68,36 @@ enum myanmar_syllable_type_t {
#define myanmar_syllable_machine_ex_ZWNJ 5u
-#line 71 "hb-ot-shape-complex-myanmar-machine.hh"
+#line 72 "hb-ot-shape-complex-myanmar-machine.hh"
static const unsigned char _myanmar_syllable_machine_trans_keys[] = {
- 1u, 32u, 3u, 30u, 5u, 29u, 5u, 8u, 5u, 29u, 3u, 25u, 5u, 25u, 5u, 25u,
- 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 1u, 16u, 3u, 29u, 3u, 29u, 3u, 29u,
- 3u, 29u, 3u, 29u, 3u, 30u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u,
- 5u, 29u, 5u, 8u, 5u, 29u, 3u, 25u, 5u, 25u, 5u, 25u, 3u, 29u, 3u, 29u,
- 3u, 29u, 3u, 29u, 1u, 16u, 3u, 30u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u,
- 3u, 29u, 3u, 30u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 30u,
- 3u, 29u, 1u, 32u, 1u, 32u, 8u, 8u, 0
+ 1u, 33u, 3u, 33u, 5u, 29u, 5u, 8u, 5u, 29u, 3u, 25u, 5u, 25u, 5u, 25u,
+ 3u, 33u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 33u, 1u, 16u, 3u, 33u, 3u, 33u,
+ 3u, 29u, 3u, 29u, 3u, 29u, 3u, 30u, 3u, 29u, 3u, 33u, 3u, 33u, 3u, 33u,
+ 3u, 33u, 3u, 33u, 5u, 29u, 5u, 8u, 5u, 29u, 3u, 25u, 5u, 25u, 5u, 25u,
+ 3u, 33u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 33u, 1u, 16u, 3u, 33u, 3u, 33u,
+ 3u, 33u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 30u, 3u, 29u, 3u, 33u, 3u, 33u,
+ 3u, 33u, 3u, 33u, 3u, 33u, 3u, 33u, 3u, 33u, 1u, 33u, 1u, 32u, 8u, 8u,
+ 0
};
static const char _myanmar_syllable_machine_key_spans[] = {
- 32, 28, 25, 4, 25, 23, 21, 21,
- 27, 27, 27, 27, 16, 27, 27, 27,
- 27, 27, 28, 27, 27, 27, 27, 27,
- 25, 4, 25, 23, 21, 21, 27, 27,
- 27, 27, 16, 28, 27, 27, 27, 27,
- 27, 28, 27, 27, 27, 27, 27, 28,
- 27, 32, 32, 1
+ 33, 31, 25, 4, 25, 23, 21, 21,
+ 31, 27, 27, 27, 31, 16, 31, 31,
+ 27, 27, 27, 28, 27, 31, 31, 31,
+ 31, 31, 25, 4, 25, 23, 21, 21,
+ 31, 27, 27, 27, 31, 16, 31, 31,
+ 31, 27, 27, 27, 28, 27, 31, 31,
+ 31, 31, 31, 31, 31, 33, 32, 1
};
static const short _myanmar_syllable_machine_index_offsets[] = {
- 0, 33, 62, 88, 93, 119, 143, 165,
- 187, 215, 243, 271, 299, 316, 344, 372,
- 400, 428, 456, 485, 513, 541, 569, 597,
- 625, 651, 656, 682, 706, 728, 750, 778,
- 806, 834, 862, 879, 908, 936, 964, 992,
- 1020, 1048, 1077, 1105, 1133, 1161, 1189, 1217,
- 1246, 1274, 1307, 1340
+ 0, 34, 66, 92, 97, 123, 147, 169,
+ 191, 223, 251, 279, 307, 339, 356, 388,
+ 420, 448, 476, 504, 533, 561, 593, 625,
+ 657, 689, 721, 747, 752, 778, 802, 824,
+ 846, 878, 906, 934, 962, 994, 1011, 1043,
+ 1075, 1107, 1135, 1163, 1191, 1220, 1248, 1280,
+ 1312, 1344, 1376, 1408, 1440, 1472, 1506, 1539
};
static const char _myanmar_syllable_machine_indicies[] = {
@@ -103,192 +105,217 @@ static const char _myanmar_syllable_machine_indicies[] = {
0, 6, 1, 0, 0, 0, 0, 7,
0, 8, 9, 0, 10, 11, 12, 13,
14, 15, 16, 17, 18, 19, 20, 1,
- 0, 22, 23, 24, 24, 21, 25, 21,
- 26, 21, 21, 21, 21, 21, 21, 21,
- 27, 21, 21, 28, 29, 30, 31, 32,
- 33, 34, 35, 36, 37, 21, 24, 24,
- 21, 25, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 38, 21, 21, 21, 21,
- 21, 21, 32, 21, 21, 21, 36, 21,
- 24, 24, 21, 25, 21, 24, 24, 21,
- 25, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 32, 21, 21, 21, 36, 21, 39,
- 21, 24, 24, 21, 25, 21, 32, 21,
- 21, 21, 21, 21, 21, 21, 40, 21,
- 21, 21, 21, 21, 21, 32, 21, 24,
- 24, 21, 25, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 40, 21, 21, 21,
- 21, 21, 21, 32, 21, 24, 24, 21,
- 25, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 32, 21, 22, 21, 24, 24, 21,
- 25, 21, 26, 21, 21, 21, 21, 21,
- 21, 21, 41, 21, 21, 41, 21, 21,
- 21, 32, 42, 21, 21, 36, 21, 22,
- 21, 24, 24, 21, 25, 21, 26, 21,
- 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 32, 21, 21,
- 21, 36, 21, 22, 21, 24, 24, 21,
- 25, 21, 26, 21, 21, 21, 21, 21,
- 21, 21, 41, 21, 21, 21, 21, 21,
- 21, 32, 42, 21, 21, 36, 21, 22,
- 21, 24, 24, 21, 25, 21, 26, 21,
- 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 32, 42, 21,
- 21, 36, 21, 1, 1, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 1, 21, 22, 21, 24, 24,
- 21, 25, 21, 26, 21, 21, 21, 21,
- 21, 21, 21, 27, 21, 21, 28, 29,
- 30, 31, 32, 33, 34, 35, 36, 21,
- 22, 21, 24, 24, 21, 25, 21, 26,
- 21, 21, 21, 21, 21, 21, 21, 43,
- 21, 21, 21, 21, 21, 21, 32, 33,
- 34, 35, 36, 21, 22, 21, 24, 24,
- 21, 25, 21, 26, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 32, 33, 34, 35, 36, 21,
- 22, 21, 24, 24, 21, 25, 21, 26,
- 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 32, 33,
- 34, 21, 36, 21, 22, 21, 24, 24,
- 21, 25, 21, 26, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 32, 21, 34, 21, 36, 21,
- 22, 21, 24, 24, 21, 25, 21, 26,
- 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 32, 33,
- 34, 35, 36, 43, 21, 22, 21, 24,
- 24, 21, 25, 21, 26, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 28,
- 21, 30, 21, 32, 33, 34, 35, 36,
- 21, 22, 21, 24, 24, 21, 25, 21,
- 26, 21, 21, 21, 21, 21, 21, 21,
- 43, 21, 21, 28, 21, 21, 21, 32,
- 33, 34, 35, 36, 21, 22, 21, 24,
- 24, 21, 25, 21, 26, 21, 21, 21,
- 21, 21, 21, 21, 44, 21, 21, 28,
- 29, 30, 21, 32, 33, 34, 35, 36,
- 21, 22, 21, 24, 24, 21, 25, 21,
- 26, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 28, 29, 30, 21, 32,
- 33, 34, 35, 36, 21, 22, 23, 24,
- 24, 21, 25, 21, 26, 21, 21, 21,
- 21, 21, 21, 21, 27, 21, 21, 28,
- 29, 30, 31, 32, 33, 34, 35, 36,
- 21, 46, 46, 45, 5, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 47, 45,
- 45, 45, 45, 45, 45, 14, 45, 45,
- 45, 18, 45, 46, 46, 45, 5, 45,
- 46, 46, 45, 5, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 14, 45, 45, 45,
- 18, 45, 48, 45, 46, 46, 45, 5,
- 45, 14, 45, 45, 45, 45, 45, 45,
- 45, 49, 45, 45, 45, 45, 45, 45,
- 14, 45, 46, 46, 45, 5, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 49,
- 45, 45, 45, 45, 45, 45, 14, 45,
- 46, 46, 45, 5, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 14, 45, 2, 45,
- 46, 46, 45, 5, 45, 6, 45, 45,
- 45, 45, 45, 45, 45, 50, 45, 45,
- 50, 45, 45, 45, 14, 51, 45, 45,
- 18, 45, 2, 45, 46, 46, 45, 5,
- 45, 6, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45,
- 14, 45, 45, 45, 18, 45, 2, 45,
- 46, 46, 45, 5, 45, 6, 45, 45,
- 45, 45, 45, 45, 45, 50, 45, 45,
- 45, 45, 45, 45, 14, 51, 45, 45,
- 18, 45, 2, 45, 46, 46, 45, 5,
- 45, 6, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45,
- 14, 51, 45, 45, 18, 45, 52, 52,
- 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 52, 45, 2,
- 3, 46, 46, 45, 5, 45, 6, 45,
- 45, 45, 45, 45, 45, 45, 8, 45,
- 45, 10, 11, 12, 13, 14, 15, 16,
- 17, 18, 19, 45, 2, 45, 46, 46,
- 45, 5, 45, 6, 45, 45, 45, 45,
- 45, 45, 45, 8, 45, 45, 10, 11,
- 12, 13, 14, 15, 16, 17, 18, 45,
- 2, 45, 46, 46, 45, 5, 45, 6,
- 45, 45, 45, 45, 45, 45, 45, 53,
- 45, 45, 45, 45, 45, 45, 14, 15,
- 16, 17, 18, 45, 2, 45, 46, 46,
- 45, 5, 45, 6, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 14, 15, 16, 17, 18, 45,
- 2, 45, 46, 46, 45, 5, 45, 6,
- 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 14, 15,
- 16, 45, 18, 45, 2, 45, 46, 46,
- 45, 5, 45, 6, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 14, 45, 16, 45, 18, 45,
- 2, 45, 46, 46, 45, 5, 45, 6,
- 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 14, 15,
- 16, 17, 18, 53, 45, 2, 45, 46,
- 46, 45, 5, 45, 6, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 10,
- 45, 12, 45, 14, 15, 16, 17, 18,
- 45, 2, 45, 46, 46, 45, 5, 45,
- 6, 45, 45, 45, 45, 45, 45, 45,
- 53, 45, 45, 10, 45, 45, 45, 14,
- 15, 16, 17, 18, 45, 2, 45, 46,
- 46, 45, 5, 45, 6, 45, 45, 45,
- 45, 45, 45, 45, 54, 45, 45, 10,
- 11, 12, 45, 14, 15, 16, 17, 18,
- 45, 2, 45, 46, 46, 45, 5, 45,
- 6, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 10, 11, 12, 45, 14,
- 15, 16, 17, 18, 45, 2, 3, 46,
- 46, 45, 5, 45, 6, 45, 45, 45,
- 45, 45, 45, 45, 8, 45, 45, 10,
- 11, 12, 13, 14, 15, 16, 17, 18,
- 45, 22, 23, 24, 24, 21, 25, 21,
- 26, 21, 21, 21, 21, 21, 21, 21,
- 55, 21, 21, 28, 29, 30, 31, 32,
- 33, 34, 35, 36, 37, 21, 22, 56,
- 24, 24, 21, 25, 21, 26, 21, 21,
- 21, 21, 21, 21, 21, 27, 21, 21,
- 28, 29, 30, 31, 32, 33, 34, 35,
- 36, 21, 1, 1, 2, 3, 46, 46,
- 45, 5, 45, 6, 1, 45, 45, 45,
- 45, 1, 45, 8, 45, 45, 10, 11,
- 12, 13, 14, 15, 16, 17, 18, 19,
- 45, 1, 45, 1, 1, 57, 57, 57,
- 57, 57, 57, 57, 57, 1, 57, 57,
- 57, 57, 1, 57, 57, 57, 57, 57,
- 57, 57, 57, 57, 57, 57, 57, 57,
- 57, 57, 1, 57, 58, 57, 0
+ 21, 0, 23, 24, 25, 25, 22, 26,
+ 22, 27, 22, 22, 22, 22, 22, 22,
+ 22, 28, 22, 22, 29, 30, 31, 32,
+ 33, 34, 35, 36, 37, 38, 22, 22,
+ 39, 22, 25, 25, 22, 26, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 40,
+ 22, 22, 22, 22, 22, 22, 33, 22,
+ 22, 22, 37, 22, 25, 25, 22, 26,
+ 22, 25, 25, 22, 26, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 33, 22, 22,
+ 22, 37, 22, 41, 22, 25, 25, 22,
+ 26, 22, 33, 22, 22, 22, 22, 22,
+ 22, 22, 42, 22, 22, 22, 22, 22,
+ 22, 33, 22, 25, 25, 22, 26, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22,
+ 42, 22, 22, 22, 22, 22, 22, 33,
+ 22, 25, 25, 22, 26, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 33, 22, 23,
+ 22, 25, 25, 22, 26, 22, 27, 22,
+ 22, 22, 22, 22, 22, 22, 43, 22,
+ 22, 44, 22, 22, 22, 33, 45, 22,
+ 22, 37, 22, 22, 22, 43, 22, 23,
+ 22, 25, 25, 22, 26, 22, 27, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 33, 22, 22,
+ 22, 37, 22, 23, 22, 25, 25, 22,
+ 26, 22, 27, 22, 22, 22, 22, 22,
+ 22, 22, 43, 22, 22, 22, 22, 22,
+ 22, 33, 45, 22, 22, 37, 22, 23,
+ 22, 25, 25, 22, 26, 22, 27, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 33, 45, 22,
+ 22, 37, 22, 23, 22, 25, 25, 22,
+ 26, 22, 27, 22, 22, 22, 22, 22,
+ 22, 22, 43, 22, 22, 22, 22, 22,
+ 22, 33, 45, 22, 22, 37, 22, 22,
+ 22, 43, 22, 1, 1, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 1, 22, 23, 22, 25, 25,
+ 22, 26, 22, 27, 22, 22, 22, 22,
+ 22, 22, 22, 28, 22, 22, 29, 30,
+ 31, 32, 33, 34, 35, 36, 37, 22,
+ 22, 22, 39, 22, 23, 22, 25, 25,
+ 22, 26, 22, 27, 22, 22, 22, 22,
+ 22, 22, 22, 46, 22, 22, 22, 22,
+ 22, 22, 33, 34, 35, 36, 37, 22,
+ 22, 22, 39, 22, 23, 22, 25, 25,
+ 22, 26, 22, 27, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 33, 34, 35, 36, 37, 22,
+ 23, 22, 25, 25, 22, 26, 22, 27,
+ 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 33, 34,
+ 35, 22, 37, 22, 23, 22, 25, 25,
+ 22, 26, 22, 27, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 33, 22, 35, 22, 37, 22,
+ 23, 22, 25, 25, 22, 26, 22, 27,
+ 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 33, 34,
+ 35, 36, 37, 46, 22, 23, 22, 25,
+ 25, 22, 26, 22, 27, 22, 22, 22,
+ 22, 22, 22, 22, 46, 22, 22, 22,
+ 22, 22, 22, 33, 34, 35, 36, 37,
+ 22, 23, 22, 25, 25, 22, 26, 22,
+ 27, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 29, 22, 31, 22, 33,
+ 34, 35, 36, 37, 22, 22, 22, 39,
+ 22, 23, 22, 25, 25, 22, 26, 22,
+ 27, 22, 22, 22, 22, 22, 22, 22,
+ 46, 22, 22, 29, 22, 22, 22, 33,
+ 34, 35, 36, 37, 22, 22, 22, 39,
+ 22, 23, 22, 25, 25, 22, 26, 22,
+ 27, 22, 22, 22, 22, 22, 22, 22,
+ 47, 22, 22, 29, 30, 31, 22, 33,
+ 34, 35, 36, 37, 22, 22, 22, 39,
+ 22, 23, 22, 25, 25, 22, 26, 22,
+ 27, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 29, 30, 31, 22, 33,
+ 34, 35, 36, 37, 22, 22, 22, 39,
+ 22, 23, 24, 25, 25, 22, 26, 22,
+ 27, 22, 22, 22, 22, 22, 22, 22,
+ 28, 22, 22, 29, 30, 31, 32, 33,
+ 34, 35, 36, 37, 22, 22, 22, 39,
+ 22, 49, 49, 48, 5, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 50, 48,
+ 48, 48, 48, 48, 48, 14, 48, 48,
+ 48, 18, 48, 49, 49, 48, 5, 48,
+ 49, 49, 48, 5, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 14, 48, 48, 48,
+ 18, 48, 51, 48, 49, 49, 48, 5,
+ 48, 14, 48, 48, 48, 48, 48, 48,
+ 48, 52, 48, 48, 48, 48, 48, 48,
+ 14, 48, 49, 49, 48, 5, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 52,
+ 48, 48, 48, 48, 48, 48, 14, 48,
+ 49, 49, 48, 5, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 14, 48, 2, 48,
+ 49, 49, 48, 5, 48, 6, 48, 48,
+ 48, 48, 48, 48, 48, 53, 48, 48,
+ 54, 48, 48, 48, 14, 55, 48, 48,
+ 18, 48, 48, 48, 53, 48, 2, 48,
+ 49, 49, 48, 5, 48, 6, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 14, 48, 48, 48,
+ 18, 48, 2, 48, 49, 49, 48, 5,
+ 48, 6, 48, 48, 48, 48, 48, 48,
+ 48, 53, 48, 48, 48, 48, 48, 48,
+ 14, 55, 48, 48, 18, 48, 2, 48,
+ 49, 49, 48, 5, 48, 6, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 14, 55, 48, 48,
+ 18, 48, 2, 48, 49, 49, 48, 5,
+ 48, 6, 48, 48, 48, 48, 48, 48,
+ 48, 53, 48, 48, 48, 48, 48, 48,
+ 14, 55, 48, 48, 18, 48, 48, 48,
+ 53, 48, 56, 56, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 56, 48, 2, 3, 49, 49, 48,
+ 5, 48, 6, 48, 48, 48, 48, 48,
+ 48, 48, 8, 48, 48, 10, 11, 12,
+ 13, 14, 15, 16, 17, 18, 19, 48,
+ 48, 21, 48, 2, 48, 49, 49, 48,
+ 5, 48, 6, 48, 48, 48, 48, 48,
+ 48, 48, 8, 48, 48, 10, 11, 12,
+ 13, 14, 15, 16, 17, 18, 48, 48,
+ 48, 21, 48, 2, 48, 49, 49, 48,
+ 5, 48, 6, 48, 48, 48, 48, 48,
+ 48, 48, 57, 48, 48, 48, 48, 48,
+ 48, 14, 15, 16, 17, 18, 48, 48,
+ 48, 21, 48, 2, 48, 49, 49, 48,
+ 5, 48, 6, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 14, 15, 16, 17, 18, 48, 2,
+ 48, 49, 49, 48, 5, 48, 6, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 14, 15, 16,
+ 48, 18, 48, 2, 48, 49, 49, 48,
+ 5, 48, 6, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 14, 48, 16, 48, 18, 48, 2,
+ 48, 49, 49, 48, 5, 48, 6, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 14, 15, 16,
+ 17, 18, 57, 48, 2, 48, 49, 49,
+ 48, 5, 48, 6, 48, 48, 48, 48,
+ 48, 48, 48, 57, 48, 48, 48, 48,
+ 48, 48, 14, 15, 16, 17, 18, 48,
+ 2, 48, 49, 49, 48, 5, 48, 6,
+ 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 10, 48, 12, 48, 14, 15,
+ 16, 17, 18, 48, 48, 48, 21, 48,
+ 2, 48, 49, 49, 48, 5, 48, 6,
+ 48, 48, 48, 48, 48, 48, 48, 57,
+ 48, 48, 10, 48, 48, 48, 14, 15,
+ 16, 17, 18, 48, 48, 48, 21, 48,
+ 2, 48, 49, 49, 48, 5, 48, 6,
+ 48, 48, 48, 48, 48, 48, 48, 58,
+ 48, 48, 10, 11, 12, 48, 14, 15,
+ 16, 17, 18, 48, 48, 48, 21, 48,
+ 2, 48, 49, 49, 48, 5, 48, 6,
+ 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 10, 11, 12, 48, 14, 15,
+ 16, 17, 18, 48, 48, 48, 21, 48,
+ 2, 3, 49, 49, 48, 5, 48, 6,
+ 48, 48, 48, 48, 48, 48, 48, 8,
+ 48, 48, 10, 11, 12, 13, 14, 15,
+ 16, 17, 18, 48, 48, 48, 21, 48,
+ 23, 24, 25, 25, 22, 26, 22, 27,
+ 22, 22, 22, 22, 22, 22, 22, 59,
+ 22, 22, 29, 30, 31, 32, 33, 34,
+ 35, 36, 37, 38, 22, 22, 39, 22,
+ 23, 60, 25, 25, 22, 26, 22, 27,
+ 22, 22, 22, 22, 22, 22, 22, 28,
+ 22, 22, 29, 30, 31, 32, 33, 34,
+ 35, 36, 37, 22, 22, 22, 39, 22,
+ 1, 1, 2, 3, 49, 49, 48, 5,
+ 48, 6, 1, 48, 48, 48, 48, 1,
+ 48, 8, 48, 48, 10, 11, 12, 13,
+ 14, 15, 16, 17, 18, 19, 48, 1,
+ 21, 48, 1, 1, 61, 61, 61, 61,
+ 61, 61, 61, 61, 1, 61, 61, 61,
+ 61, 1, 61, 61, 61, 61, 61, 61,
+ 61, 61, 61, 61, 61, 61, 61, 61,
+ 61, 1, 61, 62, 61, 0
};
static const char _myanmar_syllable_machine_trans_targs[] = {
- 0, 1, 24, 34, 0, 25, 31, 47,
- 36, 50, 37, 42, 43, 44, 27, 39,
- 40, 41, 30, 46, 51, 0, 2, 12,
- 0, 3, 9, 13, 14, 19, 20, 21,
- 5, 16, 17, 18, 8, 23, 4, 6,
- 7, 10, 11, 15, 22, 0, 0, 26,
- 28, 29, 32, 33, 35, 38, 45, 48,
- 49, 0, 0
+ 0, 1, 26, 37, 0, 27, 33, 51,
+ 39, 54, 40, 46, 47, 48, 29, 42,
+ 43, 44, 32, 50, 55, 45, 0, 2,
+ 13, 0, 3, 9, 14, 15, 21, 22,
+ 23, 5, 17, 18, 19, 8, 25, 20,
+ 4, 6, 7, 10, 12, 11, 16, 24,
+ 0, 0, 28, 30, 31, 34, 36, 35,
+ 38, 41, 49, 52, 53, 0, 0
};
static const char _myanmar_syllable_machine_trans_actions[] = {
3, 0, 0, 0, 4, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 5, 0, 0,
- 6, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5, 0,
+ 0, 6, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 7, 8, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 9, 10
+ 7, 8, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 9, 10
};
static const char _myanmar_syllable_machine_to_state_actions[] = {
@@ -298,7 +325,7 @@ static const char _myanmar_syllable_machine_to_state_actions[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0
+ 0, 0, 0, 0, 0, 0, 0, 0
};
static const char _myanmar_syllable_machine_from_state_actions[] = {
@@ -308,17 +335,17 @@ static const char _myanmar_syllable_machine_from_state_actions[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0
+ 0, 0, 0, 0, 0, 0, 0, 0
};
static const short _myanmar_syllable_machine_eof_trans[] = {
- 0, 22, 22, 22, 22, 22, 22, 22,
- 22, 22, 22, 22, 22, 22, 22, 22,
- 22, 22, 22, 22, 22, 22, 22, 22,
- 46, 46, 46, 46, 46, 46, 46, 46,
- 46, 46, 46, 46, 46, 46, 46, 46,
- 46, 46, 46, 46, 46, 46, 46, 22,
- 22, 46, 58, 58
+ 0, 23, 23, 23, 23, 23, 23, 23,
+ 23, 23, 23, 23, 23, 23, 23, 23,
+ 23, 23, 23, 23, 23, 23, 23, 23,
+ 23, 23, 49, 49, 49, 49, 49, 49,
+ 49, 49, 49, 49, 49, 49, 49, 49,
+ 49, 49, 49, 49, 49, 49, 49, 49,
+ 49, 49, 49, 23, 23, 49, 62, 62
};
static const int myanmar_syllable_machine_start = 0;
@@ -332,7 +359,7 @@ static const int myanmar_syllable_machine_en_main = 0;
-#line 101 "hb-ot-shape-complex-myanmar-machine.rl"
+#line 102 "hb-ot-shape-complex-myanmar-machine.rl"
#define found_syllable(syllable_type) \
@@ -351,7 +378,7 @@ find_syllables_myanmar (hb_buffer_t *buffer)
int cs;
hb_glyph_info_t *info = buffer->info;
-#line 355 "hb-ot-shape-complex-myanmar-machine.hh"
+#line 382 "hb-ot-shape-complex-myanmar-machine.hh"
{
cs = myanmar_syllable_machine_start;
ts = 0;
@@ -359,7 +386,7 @@ find_syllables_myanmar (hb_buffer_t *buffer)
act = 0;
}
-#line 121 "hb-ot-shape-complex-myanmar-machine.rl"
+#line 122 "hb-ot-shape-complex-myanmar-machine.rl"
p = 0;
@@ -367,7 +394,7 @@ find_syllables_myanmar (hb_buffer_t *buffer)
unsigned int syllable_serial = 1;
-#line 371 "hb-ot-shape-complex-myanmar-machine.hh"
+#line 398 "hb-ot-shape-complex-myanmar-machine.hh"
{
int _slen;
int _trans;
@@ -381,7 +408,7 @@ _resume:
#line 1 "NONE"
{ts = p;}
break;
-#line 385 "hb-ot-shape-complex-myanmar-machine.hh"
+#line 412 "hb-ot-shape-complex-myanmar-machine.hh"
}
_keys = _myanmar_syllable_machine_trans_keys + (cs<<1);
@@ -400,38 +427,38 @@ _eof_trans:
switch ( _myanmar_syllable_machine_trans_actions[_trans] ) {
case 6:
-#line 93 "hb-ot-shape-complex-myanmar-machine.rl"
+#line 94 "hb-ot-shape-complex-myanmar-machine.rl"
{te = p+1;{ found_syllable (myanmar_consonant_syllable); }}
break;
case 4:
-#line 94 "hb-ot-shape-complex-myanmar-machine.rl"
+#line 95 "hb-ot-shape-complex-myanmar-machine.rl"
{te = p+1;{ found_syllable (myanmar_non_myanmar_cluster); }}
break;
case 10:
-#line 95 "hb-ot-shape-complex-myanmar-machine.rl"
+#line 96 "hb-ot-shape-complex-myanmar-machine.rl"
{te = p+1;{ found_syllable (myanmar_punctuation_cluster); }}
break;
case 8:
-#line 96 "hb-ot-shape-complex-myanmar-machine.rl"
+#line 97 "hb-ot-shape-complex-myanmar-machine.rl"
{te = p+1;{ found_syllable (myanmar_broken_cluster); }}
break;
case 3:
-#line 97 "hb-ot-shape-complex-myanmar-machine.rl"
+#line 98 "hb-ot-shape-complex-myanmar-machine.rl"
{te = p+1;{ found_syllable (myanmar_non_myanmar_cluster); }}
break;
case 5:
-#line 93 "hb-ot-shape-complex-myanmar-machine.rl"
+#line 94 "hb-ot-shape-complex-myanmar-machine.rl"
{te = p;p--;{ found_syllable (myanmar_consonant_syllable); }}
break;
case 7:
-#line 96 "hb-ot-shape-complex-myanmar-machine.rl"
+#line 97 "hb-ot-shape-complex-myanmar-machine.rl"
{te = p;p--;{ found_syllable (myanmar_broken_cluster); }}
break;
case 9:
-#line 97 "hb-ot-shape-complex-myanmar-machine.rl"
+#line 98 "hb-ot-shape-complex-myanmar-machine.rl"
{te = p;p--;{ found_syllable (myanmar_non_myanmar_cluster); }}
break;
-#line 435 "hb-ot-shape-complex-myanmar-machine.hh"
+#line 462 "hb-ot-shape-complex-myanmar-machine.hh"
}
_again:
@@ -440,7 +467,7 @@ _again:
#line 1 "NONE"
{ts = 0;}
break;
-#line 444 "hb-ot-shape-complex-myanmar-machine.hh"
+#line 471 "hb-ot-shape-complex-myanmar-machine.hh"
}
if ( ++p != pe )
@@ -456,7 +483,7 @@ _again:
}
-#line 129 "hb-ot-shape-complex-myanmar-machine.rl"
+#line 130 "hb-ot-shape-complex-myanmar-machine.rl"
}
diff --git a/thirdparty/harfbuzz/src/hb-ot-shape-complex-myanmar.cc b/thirdparty/harfbuzz/src/hb-ot-shape-complex-myanmar.cc
index 6e92a9b0ae..e6ae75e8f2 100644
--- a/thirdparty/harfbuzz/src/hb-ot-shape-complex-myanmar.cc
+++ b/thirdparty/harfbuzz/src/hb-ot-shape-complex-myanmar.cc
@@ -185,7 +185,7 @@ initial_reordering_consonant_syllable (hb_buffer_t *buffer,
info[i].myanmar_position() = POS_BASE_C;
i++;
}
- indic_position_t pos = POS_AFTER_MAIN;
+ myanmar_position_t pos = POS_AFTER_MAIN;
/* The following loop may be ugly, but it implements all of
* Myanmar reordering! */
for (; i < end; i++)
diff --git a/thirdparty/harfbuzz/src/hb-ot-shape-complex-myanmar.hh b/thirdparty/harfbuzz/src/hb-ot-shape-complex-myanmar.hh
index a6d68aae57..7fbca3878f 100644
--- a/thirdparty/harfbuzz/src/hb-ot-shape-complex-myanmar.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-shape-complex-myanmar.hh
@@ -56,8 +56,10 @@ enum myanmar_category_t {
OT_VS = 30, /* Variation selectors */
OT_P = 31, /* Punctuation */
OT_D = 32, /* Digits except zero */
+ OT_ML = 33, /* Various consonant medial types */
};
+using myanmar_position_t = indic_position_t;
static inline void
set_myanmar_properties (hb_glyph_info_t &info)
@@ -65,7 +67,7 @@ set_myanmar_properties (hb_glyph_info_t &info)
hb_codepoint_t u = info.codepoint;
unsigned int type = hb_indic_get_categories (u);
unsigned int cat = type & 0xFFu;
- indic_position_t pos = (indic_position_t) (type >> 8);
+ myanmar_position_t pos = (myanmar_position_t) (type >> 8);
/* Myanmar
* https://docs.microsoft.com/en-us/typography/script-development/myanmar#analyze
@@ -114,10 +116,14 @@ set_myanmar_properties (hb_glyph_info_t &info)
cat = OT_D; /* XXX The spec says D0, but Uniscribe doesn't seem to do. */
break;
- case 0x103Eu: case 0x1060u:
+ case 0x103Eu:
cat = OT_MH;
break;
+ case 0x1060u:
+ cat = OT_ML;
+ break;
+
case 0x103Cu:
cat = OT_MR;
break;
diff --git a/thirdparty/harfbuzz/src/hb-ot-shape-complex-use-machine.hh b/thirdparty/harfbuzz/src/hb-ot-shape-complex-use-machine.hh
index bb046a72ec..c3920b2cc6 100644
--- a/thirdparty/harfbuzz/src/hb-ot-shape-complex-use-machine.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-shape-complex-use-machine.hh
@@ -41,7 +41,6 @@
#define USE(Cat) use_syllable_machine_ex_##Cat
enum use_syllable_type_t {
- use_independent_cluster,
use_virama_terminated_cluster,
use_sakot_terminated_cluster,
use_standard_cluster,
@@ -54,8 +53,9 @@ enum use_syllable_type_t {
};
-#line 58 "hb-ot-shape-complex-use-machine.hh"
+#line 57 "hb-ot-shape-complex-use-machine.hh"
#define use_syllable_machine_ex_B 1u
+#define use_syllable_machine_ex_CGJ 6u
#define use_syllable_machine_ex_CMAbv 31u
#define use_syllable_machine_ex_CMBlw 32u
#define use_syllable_machine_ex_CS 43u
@@ -78,7 +78,6 @@ enum use_syllable_type_t {
#define use_syllable_machine_ex_N 4u
#define use_syllable_machine_ex_O 0u
#define use_syllable_machine_ex_R 18u
-#define use_syllable_machine_ex_S 19u
#define use_syllable_machine_ex_SB 51u
#define use_syllable_machine_ex_SE 52u
#define use_syllable_machine_ex_SMAbv 41u
@@ -96,280 +95,278 @@ enum use_syllable_type_t {
#define use_syllable_machine_ex_ZWNJ 14u
-#line 100 "hb-ot-shape-complex-use-machine.hh"
+#line 99 "hb-ot-shape-complex-use-machine.hh"
static const unsigned char _use_syllable_machine_trans_keys[] = {
- 1u, 1u, 1u, 1u, 0u, 51u, 11u, 48u, 11u, 48u, 1u, 1u, 22u, 48u, 23u, 48u,
+ 0u, 51u, 41u, 42u, 42u, 42u, 11u, 48u, 11u, 48u, 1u, 1u, 22u, 48u, 23u, 48u,
24u, 47u, 25u, 47u, 26u, 47u, 45u, 46u, 46u, 46u, 24u, 48u, 24u, 48u, 24u, 48u,
1u, 1u, 24u, 48u, 23u, 48u, 23u, 48u, 23u, 48u, 22u, 48u, 22u, 48u, 22u, 48u,
- 11u, 48u, 1u, 48u, 13u, 13u, 4u, 4u, 11u, 48u, 41u, 42u, 42u, 42u, 11u, 48u,
- 22u, 48u, 23u, 48u, 24u, 47u, 25u, 47u, 26u, 47u, 45u, 46u, 46u, 46u, 24u, 48u,
- 24u, 48u, 24u, 48u, 24u, 48u, 23u, 48u, 23u, 48u, 23u, 48u, 22u, 48u, 22u, 48u,
- 22u, 48u, 11u, 48u, 1u, 48u, 1u, 1u, 4u, 4u, 13u, 13u, 1u, 48u, 11u, 48u,
- 41u, 42u, 42u, 42u, 1u, 5u, 50u, 52u, 49u, 52u, 49u, 51u, 0
+ 11u, 48u, 1u, 48u, 13u, 13u, 4u, 4u, 11u, 48u, 11u, 48u, 1u, 1u, 22u, 48u,
+ 23u, 48u, 24u, 47u, 25u, 47u, 26u, 47u, 45u, 46u, 46u, 46u, 24u, 48u, 24u, 48u,
+ 24u, 48u, 1u, 1u, 24u, 48u, 23u, 48u, 23u, 48u, 23u, 48u, 22u, 48u, 22u, 48u,
+ 22u, 48u, 11u, 48u, 1u, 48u, 4u, 4u, 13u, 13u, 1u, 48u, 11u, 48u, 41u, 42u,
+ 42u, 42u, 1u, 5u, 50u, 52u, 49u, 52u, 49u, 51u, 0
};
static const char _use_syllable_machine_key_spans[] = {
- 1, 1, 52, 38, 38, 1, 27, 26,
+ 52, 2, 1, 38, 38, 1, 27, 26,
24, 23, 22, 2, 1, 25, 25, 25,
1, 25, 26, 26, 26, 27, 27, 27,
- 38, 48, 1, 1, 38, 2, 1, 38,
- 27, 26, 24, 23, 22, 2, 1, 25,
- 25, 25, 25, 26, 26, 26, 27, 27,
- 27, 38, 48, 1, 1, 1, 48, 38,
- 2, 1, 5, 3, 4, 3
+ 38, 48, 1, 1, 38, 38, 1, 27,
+ 26, 24, 23, 22, 2, 1, 25, 25,
+ 25, 1, 25, 26, 26, 26, 27, 27,
+ 27, 38, 48, 1, 1, 48, 38, 2,
+ 1, 5, 3, 4, 3
};
static const short _use_syllable_machine_index_offsets[] = {
- 0, 2, 4, 57, 96, 135, 137, 165,
- 192, 217, 241, 264, 267, 269, 295, 321,
- 347, 349, 375, 402, 429, 456, 484, 512,
- 540, 579, 628, 630, 632, 671, 674, 676,
- 715, 743, 770, 795, 819, 842, 845, 847,
- 873, 899, 925, 951, 978, 1005, 1032, 1060,
- 1088, 1116, 1155, 1204, 1206, 1208, 1210, 1259,
- 1298, 1301, 1303, 1309, 1313, 1318
+ 0, 53, 56, 58, 97, 136, 138, 166,
+ 193, 218, 242, 265, 268, 270, 296, 322,
+ 348, 350, 376, 403, 430, 457, 485, 513,
+ 541, 580, 629, 631, 633, 672, 711, 713,
+ 741, 768, 793, 817, 840, 843, 845, 871,
+ 897, 923, 925, 951, 978, 1005, 1032, 1060,
+ 1088, 1116, 1155, 1204, 1206, 1208, 1257, 1296,
+ 1299, 1301, 1307, 1311, 1316
};
static const char _use_syllable_machine_indicies[] = {
- 1, 0, 2, 0, 3, 4, 5, 5,
- 6, 7, 5, 5, 5, 5, 5, 1,
- 8, 9, 5, 5, 5, 5, 10, 11,
- 5, 5, 12, 13, 14, 15, 16, 17,
- 18, 12, 19, 20, 21, 22, 23, 24,
- 5, 25, 26, 27, 5, 28, 29, 30,
- 31, 32, 33, 34, 8, 35, 5, 36,
- 5, 38, 39, 37, 37, 37, 37, 37,
- 37, 37, 37, 37, 40, 41, 42, 43,
- 44, 45, 46, 40, 47, 4, 48, 49,
- 50, 51, 37, 52, 53, 54, 37, 37,
- 37, 37, 55, 56, 57, 58, 39, 37,
- 38, 39, 37, 37, 37, 37, 37, 37,
- 37, 37, 37, 40, 41, 42, 43, 44,
- 45, 46, 40, 47, 48, 48, 49, 50,
- 51, 37, 52, 53, 54, 37, 37, 37,
- 37, 55, 56, 57, 58, 39, 37, 38,
- 59, 40, 41, 42, 43, 44, 37, 37,
- 37, 37, 37, 37, 49, 50, 51, 37,
- 52, 53, 54, 37, 37, 37, 37, 41,
- 56, 57, 58, 60, 37, 41, 42, 43,
- 44, 37, 37, 37, 37, 37, 37, 37,
- 37, 37, 37, 52, 53, 54, 37, 37,
- 37, 37, 37, 56, 57, 58, 60, 37,
- 42, 43, 44, 37, 37, 37, 37, 37,
- 37, 37, 37, 37, 37, 37, 37, 37,
- 37, 37, 37, 37, 37, 56, 57, 58,
- 37, 43, 44, 37, 37, 37, 37, 37,
- 37, 37, 37, 37, 37, 37, 37, 37,
- 37, 37, 37, 37, 37, 56, 57, 58,
- 37, 44, 37, 37, 37, 37, 37, 37,
- 37, 37, 37, 37, 37, 37, 37, 37,
- 37, 37, 37, 37, 56, 57, 58, 37,
- 56, 57, 37, 57, 37, 42, 43, 44,
- 37, 37, 37, 37, 37, 37, 37, 37,
- 37, 37, 52, 53, 54, 37, 37, 37,
- 37, 37, 56, 57, 58, 60, 37, 42,
- 43, 44, 37, 37, 37, 37, 37, 37,
- 37, 37, 37, 37, 37, 53, 54, 37,
- 37, 37, 37, 37, 56, 57, 58, 60,
- 37, 42, 43, 44, 37, 37, 37, 37,
- 37, 37, 37, 37, 37, 37, 37, 37,
- 54, 37, 37, 37, 37, 37, 56, 57,
- 58, 60, 37, 62, 61, 42, 43, 44,
- 37, 37, 37, 37, 37, 37, 37, 37,
- 37, 37, 37, 37, 37, 37, 37, 37,
- 37, 37, 56, 57, 58, 60, 37, 41,
- 42, 43, 44, 37, 37, 37, 37, 37,
- 37, 49, 50, 51, 37, 52, 53, 54,
- 37, 37, 37, 37, 41, 56, 57, 58,
- 60, 37, 41, 42, 43, 44, 37, 37,
- 37, 37, 37, 37, 37, 50, 51, 37,
- 52, 53, 54, 37, 37, 37, 37, 41,
- 56, 57, 58, 60, 37, 41, 42, 43,
- 44, 37, 37, 37, 37, 37, 37, 37,
- 37, 51, 37, 52, 53, 54, 37, 37,
- 37, 37, 41, 56, 57, 58, 60, 37,
- 40, 41, 42, 43, 44, 37, 46, 40,
- 37, 37, 37, 49, 50, 51, 37, 52,
- 53, 54, 37, 37, 37, 37, 41, 56,
- 57, 58, 60, 37, 40, 41, 42, 43,
- 44, 37, 37, 40, 37, 37, 37, 49,
- 50, 51, 37, 52, 53, 54, 37, 37,
- 37, 37, 41, 56, 57, 58, 60, 37,
- 40, 41, 42, 43, 44, 45, 46, 40,
- 37, 37, 37, 49, 50, 51, 37, 52,
- 53, 54, 37, 37, 37, 37, 41, 56,
- 57, 58, 60, 37, 38, 39, 37, 37,
- 37, 37, 37, 37, 37, 37, 37, 40,
- 41, 42, 43, 44, 45, 46, 40, 47,
- 37, 48, 49, 50, 51, 37, 52, 53,
- 54, 37, 37, 37, 37, 55, 56, 57,
- 58, 39, 37, 38, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 41, 42, 43, 44, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 52,
- 53, 54, 59, 59, 59, 59, 59, 56,
- 57, 58, 60, 59, 64, 63, 6, 65,
- 38, 39, 37, 37, 37, 37, 37, 37,
- 37, 37, 37, 40, 41, 42, 43, 44,
- 45, 46, 40, 47, 4, 48, 49, 50,
- 51, 37, 52, 53, 54, 37, 11, 66,
- 37, 55, 56, 57, 58, 39, 37, 11,
- 66, 67, 66, 67, 1, 69, 68, 68,
- 68, 68, 68, 68, 68, 68, 68, 12,
- 13, 14, 15, 16, 17, 18, 12, 19,
- 21, 21, 22, 23, 24, 68, 25, 26,
- 27, 68, 68, 68, 68, 31, 32, 33,
- 34, 69, 68, 12, 13, 14, 15, 16,
- 68, 68, 68, 68, 68, 68, 22, 23,
- 24, 68, 25, 26, 27, 68, 68, 68,
- 68, 13, 32, 33, 34, 70, 68, 13,
- 14, 15, 16, 68, 68, 68, 68, 68,
- 68, 68, 68, 68, 68, 25, 26, 27,
- 68, 68, 68, 68, 68, 32, 33, 34,
- 70, 68, 14, 15, 16, 68, 68, 68,
- 68, 68, 68, 68, 68, 68, 68, 68,
- 68, 68, 68, 68, 68, 68, 68, 32,
- 33, 34, 68, 15, 16, 68, 68, 68,
- 68, 68, 68, 68, 68, 68, 68, 68,
- 68, 68, 68, 68, 68, 68, 68, 32,
- 33, 34, 68, 16, 68, 68, 68, 68,
- 68, 68, 68, 68, 68, 68, 68, 68,
- 68, 68, 68, 68, 68, 68, 32, 33,
- 34, 68, 32, 33, 68, 33, 68, 14,
- 15, 16, 68, 68, 68, 68, 68, 68,
- 68, 68, 68, 68, 25, 26, 27, 68,
- 68, 68, 68, 68, 32, 33, 34, 70,
- 68, 14, 15, 16, 68, 68, 68, 68,
- 68, 68, 68, 68, 68, 68, 68, 26,
- 27, 68, 68, 68, 68, 68, 32, 33,
- 34, 70, 68, 14, 15, 16, 68, 68,
- 68, 68, 68, 68, 68, 68, 68, 68,
- 68, 68, 27, 68, 68, 68, 68, 68,
- 32, 33, 34, 70, 68, 14, 15, 16,
- 68, 68, 68, 68, 68, 68, 68, 68,
- 68, 68, 68, 68, 68, 68, 68, 68,
- 68, 68, 32, 33, 34, 70, 68, 13,
- 14, 15, 16, 68, 68, 68, 68, 68,
- 68, 22, 23, 24, 68, 25, 26, 27,
- 68, 68, 68, 68, 13, 32, 33, 34,
- 70, 68, 13, 14, 15, 16, 68, 68,
- 68, 68, 68, 68, 68, 23, 24, 68,
- 25, 26, 27, 68, 68, 68, 68, 13,
- 32, 33, 34, 70, 68, 13, 14, 15,
- 16, 68, 68, 68, 68, 68, 68, 68,
- 68, 24, 68, 25, 26, 27, 68, 68,
- 68, 68, 13, 32, 33, 34, 70, 68,
- 12, 13, 14, 15, 16, 68, 18, 12,
- 68, 68, 68, 22, 23, 24, 68, 25,
- 26, 27, 68, 68, 68, 68, 13, 32,
- 33, 34, 70, 68, 12, 13, 14, 15,
- 16, 68, 68, 12, 68, 68, 68, 22,
- 23, 24, 68, 25, 26, 27, 68, 68,
- 68, 68, 13, 32, 33, 34, 70, 68,
- 12, 13, 14, 15, 16, 17, 18, 12,
- 68, 68, 68, 22, 23, 24, 68, 25,
- 26, 27, 68, 68, 68, 68, 13, 32,
- 33, 34, 70, 68, 1, 69, 68, 68,
- 68, 68, 68, 68, 68, 68, 68, 12,
- 13, 14, 15, 16, 17, 18, 12, 19,
- 68, 21, 22, 23, 24, 68, 25, 26,
- 27, 68, 68, 68, 68, 31, 32, 33,
- 34, 69, 68, 1, 68, 68, 68, 68,
- 68, 68, 68, 68, 68, 68, 68, 68,
- 68, 68, 68, 68, 68, 68, 68, 68,
- 68, 13, 14, 15, 16, 68, 68, 68,
- 68, 68, 68, 68, 68, 68, 68, 25,
- 26, 27, 68, 68, 68, 68, 68, 32,
- 33, 34, 70, 68, 1, 71, 72, 68,
- 9, 68, 4, 68, 68, 68, 4, 68,
- 68, 68, 68, 68, 1, 69, 9, 68,
- 68, 68, 68, 68, 68, 68, 68, 12,
- 13, 14, 15, 16, 17, 18, 12, 19,
- 20, 21, 22, 23, 24, 68, 25, 26,
- 27, 68, 28, 29, 68, 31, 32, 33,
- 34, 69, 68, 1, 69, 68, 68, 68,
- 68, 68, 68, 68, 68, 68, 12, 13,
- 14, 15, 16, 17, 18, 12, 19, 20,
- 21, 22, 23, 24, 68, 25, 26, 27,
- 68, 68, 68, 68, 31, 32, 33, 34,
- 69, 68, 28, 29, 68, 29, 68, 4,
- 71, 71, 71, 4, 71, 74, 73, 35,
- 73, 35, 74, 73, 74, 73, 35, 73,
- 36, 73, 0
+ 0, 1, 2, 2, 3, 4, 2, 2,
+ 2, 2, 2, 5, 6, 7, 2, 2,
+ 2, 2, 8, 2, 2, 2, 9, 10,
+ 11, 12, 13, 14, 15, 9, 16, 17,
+ 18, 19, 20, 21, 2, 22, 23, 24,
+ 2, 25, 26, 27, 28, 29, 30, 31,
+ 6, 32, 2, 33, 2, 0, 35, 34,
+ 35, 34, 37, 38, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 39, 40, 41,
+ 42, 43, 44, 45, 39, 46, 1, 47,
+ 48, 49, 50, 36, 51, 52, 53, 36,
+ 36, 36, 36, 54, 55, 56, 57, 38,
+ 36, 37, 38, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 39, 40, 41, 42,
+ 43, 44, 45, 39, 46, 47, 47, 48,
+ 49, 50, 36, 51, 52, 53, 36, 36,
+ 36, 36, 54, 55, 56, 57, 38, 36,
+ 37, 58, 39, 40, 41, 42, 43, 36,
+ 36, 36, 36, 36, 36, 48, 49, 50,
+ 36, 51, 52, 53, 36, 36, 36, 36,
+ 40, 55, 56, 57, 59, 36, 40, 41,
+ 42, 43, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 51, 52, 53, 36,
+ 36, 36, 36, 36, 55, 56, 57, 59,
+ 36, 41, 42, 43, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 55, 56,
+ 57, 36, 42, 43, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 55, 56,
+ 57, 36, 43, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 55, 56, 57,
+ 36, 55, 56, 36, 56, 36, 41, 42,
+ 43, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 51, 52, 53, 36, 36,
+ 36, 36, 36, 55, 56, 57, 59, 36,
+ 41, 42, 43, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 52, 53,
+ 36, 36, 36, 36, 36, 55, 56, 57,
+ 59, 36, 41, 42, 43, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 53, 36, 36, 36, 36, 36, 55,
+ 56, 57, 59, 36, 61, 60, 41, 42,
+ 43, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 55, 56, 57, 59, 36,
+ 40, 41, 42, 43, 36, 36, 36, 36,
+ 36, 36, 48, 49, 50, 36, 51, 52,
+ 53, 36, 36, 36, 36, 40, 55, 56,
+ 57, 59, 36, 40, 41, 42, 43, 36,
+ 36, 36, 36, 36, 36, 36, 49, 50,
+ 36, 51, 52, 53, 36, 36, 36, 36,
+ 40, 55, 56, 57, 59, 36, 40, 41,
+ 42, 43, 36, 36, 36, 36, 36, 36,
+ 36, 36, 50, 36, 51, 52, 53, 36,
+ 36, 36, 36, 40, 55, 56, 57, 59,
+ 36, 39, 40, 41, 42, 43, 36, 45,
+ 39, 36, 36, 36, 48, 49, 50, 36,
+ 51, 52, 53, 36, 36, 36, 36, 40,
+ 55, 56, 57, 59, 36, 39, 40, 41,
+ 42, 43, 36, 36, 39, 36, 36, 36,
+ 48, 49, 50, 36, 51, 52, 53, 36,
+ 36, 36, 36, 40, 55, 56, 57, 59,
+ 36, 39, 40, 41, 42, 43, 44, 45,
+ 39, 36, 36, 36, 48, 49, 50, 36,
+ 51, 52, 53, 36, 36, 36, 36, 40,
+ 55, 56, 57, 59, 36, 37, 38, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36,
+ 39, 40, 41, 42, 43, 44, 45, 39,
+ 46, 36, 47, 48, 49, 50, 36, 51,
+ 52, 53, 36, 36, 36, 36, 54, 55,
+ 56, 57, 38, 36, 37, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 40, 41, 42, 43, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58,
+ 51, 52, 53, 58, 58, 58, 58, 58,
+ 55, 56, 57, 59, 58, 63, 62, 3,
+ 64, 37, 38, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 39, 40, 41, 42,
+ 43, 44, 45, 39, 46, 1, 47, 48,
+ 49, 50, 36, 51, 52, 53, 36, 0,
+ 35, 36, 54, 55, 56, 57, 38, 36,
+ 5, 6, 65, 65, 65, 65, 65, 65,
+ 65, 65, 65, 9, 10, 11, 12, 13,
+ 14, 15, 9, 16, 18, 18, 19, 20,
+ 21, 65, 22, 23, 24, 65, 65, 65,
+ 65, 28, 29, 30, 31, 6, 65, 5,
+ 65, 9, 10, 11, 12, 13, 65, 65,
+ 65, 65, 65, 65, 19, 20, 21, 65,
+ 22, 23, 24, 65, 65, 65, 65, 10,
+ 29, 30, 31, 66, 65, 10, 11, 12,
+ 13, 65, 65, 65, 65, 65, 65, 65,
+ 65, 65, 65, 22, 23, 24, 65, 65,
+ 65, 65, 65, 29, 30, 31, 66, 65,
+ 11, 12, 13, 65, 65, 65, 65, 65,
+ 65, 65, 65, 65, 65, 65, 65, 65,
+ 65, 65, 65, 65, 65, 29, 30, 31,
+ 65, 12, 13, 65, 65, 65, 65, 65,
+ 65, 65, 65, 65, 65, 65, 65, 65,
+ 65, 65, 65, 65, 65, 29, 30, 31,
+ 65, 13, 65, 65, 65, 65, 65, 65,
+ 65, 65, 65, 65, 65, 65, 65, 65,
+ 65, 65, 65, 65, 29, 30, 31, 65,
+ 29, 30, 65, 30, 65, 11, 12, 13,
+ 65, 65, 65, 65, 65, 65, 65, 65,
+ 65, 65, 22, 23, 24, 65, 65, 65,
+ 65, 65, 29, 30, 31, 66, 65, 11,
+ 12, 13, 65, 65, 65, 65, 65, 65,
+ 65, 65, 65, 65, 65, 23, 24, 65,
+ 65, 65, 65, 65, 29, 30, 31, 66,
+ 65, 11, 12, 13, 65, 65, 65, 65,
+ 65, 65, 65, 65, 65, 65, 65, 65,
+ 24, 65, 65, 65, 65, 65, 29, 30,
+ 31, 66, 65, 67, 65, 11, 12, 13,
+ 65, 65, 65, 65, 65, 65, 65, 65,
+ 65, 65, 65, 65, 65, 65, 65, 65,
+ 65, 65, 29, 30, 31, 66, 65, 10,
+ 11, 12, 13, 65, 65, 65, 65, 65,
+ 65, 19, 20, 21, 65, 22, 23, 24,
+ 65, 65, 65, 65, 10, 29, 30, 31,
+ 66, 65, 10, 11, 12, 13, 65, 65,
+ 65, 65, 65, 65, 65, 20, 21, 65,
+ 22, 23, 24, 65, 65, 65, 65, 10,
+ 29, 30, 31, 66, 65, 10, 11, 12,
+ 13, 65, 65, 65, 65, 65, 65, 65,
+ 65, 21, 65, 22, 23, 24, 65, 65,
+ 65, 65, 10, 29, 30, 31, 66, 65,
+ 9, 10, 11, 12, 13, 65, 15, 9,
+ 65, 65, 65, 19, 20, 21, 65, 22,
+ 23, 24, 65, 65, 65, 65, 10, 29,
+ 30, 31, 66, 65, 9, 10, 11, 12,
+ 13, 65, 65, 9, 65, 65, 65, 19,
+ 20, 21, 65, 22, 23, 24, 65, 65,
+ 65, 65, 10, 29, 30, 31, 66, 65,
+ 9, 10, 11, 12, 13, 14, 15, 9,
+ 65, 65, 65, 19, 20, 21, 65, 22,
+ 23, 24, 65, 65, 65, 65, 10, 29,
+ 30, 31, 66, 65, 5, 6, 65, 65,
+ 65, 65, 65, 65, 65, 65, 65, 9,
+ 10, 11, 12, 13, 14, 15, 9, 16,
+ 65, 18, 19, 20, 21, 65, 22, 23,
+ 24, 65, 65, 65, 65, 28, 29, 30,
+ 31, 6, 65, 5, 65, 65, 65, 65,
+ 65, 65, 65, 65, 65, 65, 65, 65,
+ 65, 65, 65, 65, 65, 65, 65, 65,
+ 65, 10, 11, 12, 13, 65, 65, 65,
+ 65, 65, 65, 65, 65, 65, 65, 22,
+ 23, 24, 65, 65, 65, 65, 65, 29,
+ 30, 31, 66, 65, 68, 65, 7, 65,
+ 1, 65, 65, 65, 1, 65, 65, 65,
+ 65, 65, 5, 6, 7, 65, 65, 65,
+ 65, 65, 65, 65, 65, 9, 10, 11,
+ 12, 13, 14, 15, 9, 16, 17, 18,
+ 19, 20, 21, 65, 22, 23, 24, 65,
+ 25, 26, 65, 28, 29, 30, 31, 6,
+ 65, 5, 6, 65, 65, 65, 65, 65,
+ 65, 65, 65, 65, 9, 10, 11, 12,
+ 13, 14, 15, 9, 16, 17, 18, 19,
+ 20, 21, 65, 22, 23, 24, 65, 65,
+ 65, 65, 28, 29, 30, 31, 6, 65,
+ 25, 26, 65, 26, 65, 1, 69, 69,
+ 69, 1, 69, 71, 70, 32, 70, 32,
+ 71, 70, 71, 70, 32, 70, 33, 70,
+ 0
};
static const char _use_syllable_machine_trans_targs[] = {
- 2, 31, 42, 2, 3, 2, 26, 28,
- 51, 52, 54, 29, 32, 33, 34, 35,
- 36, 46, 47, 48, 55, 49, 43, 44,
- 45, 39, 40, 41, 56, 57, 58, 50,
- 37, 38, 2, 59, 61, 2, 4, 5,
- 6, 7, 8, 9, 10, 21, 22, 23,
- 24, 18, 19, 20, 13, 14, 15, 25,
- 11, 12, 2, 2, 16, 2, 17, 2,
- 27, 2, 30, 2, 2, 0, 1, 2,
- 53, 2, 60
+ 1, 3, 0, 26, 28, 29, 30, 51,
+ 53, 31, 32, 33, 34, 35, 46, 47,
+ 48, 54, 49, 43, 44, 45, 38, 39,
+ 40, 55, 56, 57, 50, 36, 37, 0,
+ 58, 60, 0, 2, 0, 4, 5, 6,
+ 7, 8, 9, 10, 21, 22, 23, 24,
+ 18, 19, 20, 13, 14, 15, 25, 11,
+ 12, 0, 0, 16, 0, 17, 0, 27,
+ 0, 0, 41, 42, 52, 0, 0, 59
};
static const char _use_syllable_machine_trans_actions[] = {
- 1, 2, 2, 5, 0, 6, 0, 0,
- 0, 0, 2, 0, 2, 2, 0, 0,
- 0, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 0, 0, 0, 2,
- 0, 0, 7, 0, 0, 8, 0, 0,
+ 0, 0, 3, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 9, 10, 0, 11, 0, 12,
- 0, 13, 0, 14, 15, 0, 0, 16,
- 0, 17, 0
+ 0, 0, 0, 0, 0, 0, 0, 4,
+ 0, 0, 5, 0, 6, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 7, 8, 0, 9, 0, 10, 0,
+ 11, 12, 0, 0, 0, 13, 14, 0
};
static const char _use_syllable_machine_to_state_actions[] = {
- 0, 0, 3, 0, 0, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0
+ 0, 0, 0, 0, 0
};
static const char _use_syllable_machine_from_state_actions[] = {
- 0, 0, 4, 0, 0, 0, 0, 0,
+ 2, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0
+ 0, 0, 0, 0, 0
};
static const short _use_syllable_machine_eof_trans[] = {
- 1, 1, 0, 38, 38, 60, 38, 38,
- 38, 38, 38, 38, 38, 38, 38, 38,
- 62, 38, 38, 38, 38, 38, 38, 38,
- 38, 60, 64, 66, 38, 68, 68, 69,
- 69, 69, 69, 69, 69, 69, 69, 69,
- 69, 69, 69, 69, 69, 69, 69, 69,
- 69, 69, 69, 72, 69, 69, 69, 69,
- 69, 69, 72, 74, 74, 74
+ 0, 35, 35, 37, 37, 59, 37, 37,
+ 37, 37, 37, 37, 37, 37, 37, 37,
+ 61, 37, 37, 37, 37, 37, 37, 37,
+ 37, 59, 63, 65, 37, 66, 66, 66,
+ 66, 66, 66, 66, 66, 66, 66, 66,
+ 66, 66, 66, 66, 66, 66, 66, 66,
+ 66, 66, 66, 66, 66, 66, 66, 66,
+ 66, 70, 71, 71, 71
};
-static const int use_syllable_machine_start = 2;
-static const int use_syllable_machine_first_final = 2;
+static const int use_syllable_machine_start = 0;
+static const int use_syllable_machine_first_final = 0;
static const int use_syllable_machine_error = -1;
-static const int use_syllable_machine_en_main = 2;
+static const int use_syllable_machine_en_main = 0;
-#line 59 "hb-ot-shape-complex-use-machine.rl"
+#line 58 "hb-ot-shape-complex-use-machine.rl"
-#line 176 "hb-ot-shape-complex-use-machine.rl"
+#line 179 "hb-ot-shape-complex-use-machine.rl"
#define found_syllable(syllable_type) \
@@ -422,8 +419,8 @@ HB_FUNCOBJ (machine_index);
static bool
-not_standard_default_ignorable (const hb_glyph_info_t &i)
-{ return !(i.use_category() == USE(O) && _hb_glyph_info_is_default_ignorable (&i)); }
+not_ccs_default_ignorable (const hb_glyph_info_t &i)
+{ return !(i.use_category() == USE(CGJ) && _hb_glyph_info_is_default_ignorable (&i)); }
static inline void
find_syllables_use (hb_buffer_t *buffer)
@@ -432,13 +429,13 @@ find_syllables_use (hb_buffer_t *buffer)
auto p =
+ hb_iter (info, buffer->len)
| hb_enumerate
- | hb_filter ([] (const hb_glyph_info_t &i) { return not_standard_default_ignorable (i); },
+ | hb_filter ([] (const hb_glyph_info_t &i) { return not_ccs_default_ignorable (i); },
hb_second)
| hb_filter ([&] (const hb_pair_t<unsigned, const hb_glyph_info_t &> p)
{
if (p.second.use_category() == USE(ZWNJ))
for (unsigned i = p.first + 1; i < buffer->len; ++i)
- if (not_standard_default_ignorable (info[i]))
+ if (not_ccs_default_ignorable (info[i]))
return !_hb_glyph_info_is_unicode_mark (&info[i]);
return true;
})
@@ -452,7 +449,7 @@ find_syllables_use (hb_buffer_t *buffer)
unsigned int act HB_UNUSED;
int cs;
-#line 456 "hb-ot-shape-complex-use-machine.hh"
+#line 453 "hb-ot-shape-complex-use-machine.hh"
{
cs = use_syllable_machine_start;
ts = 0;
@@ -460,12 +457,12 @@ find_syllables_use (hb_buffer_t *buffer)
act = 0;
}
-#line 260 "hb-ot-shape-complex-use-machine.rl"
+#line 263 "hb-ot-shape-complex-use-machine.rl"
unsigned int syllable_serial = 1;
-#line 469 "hb-ot-shape-complex-use-machine.hh"
+#line 466 "hb-ot-shape-complex-use-machine.hh"
{
int _slen;
int _trans;
@@ -475,11 +472,11 @@ find_syllables_use (hb_buffer_t *buffer)
goto _test_eof;
_resume:
switch ( _use_syllable_machine_from_state_actions[cs] ) {
- case 4:
+ case 2:
#line 1 "NONE"
{ts = p;}
break;
-#line 483 "hb-ot-shape-complex-use-machine.hh"
+#line 480 "hb-ot-shape-complex-use-machine.hh"
}
_keys = _use_syllable_machine_trans_keys + (cs<<1);
@@ -497,76 +494,64 @@ _eof_trans:
goto _again;
switch ( _use_syllable_machine_trans_actions[_trans] ) {
- case 2:
-#line 1 "NONE"
- {te = p+1;}
- break;
- case 5:
-#line 163 "hb-ot-shape-complex-use-machine.rl"
- {te = p+1;{ found_syllable (use_independent_cluster); }}
- break;
- case 9:
-#line 166 "hb-ot-shape-complex-use-machine.rl"
+ case 7:
+#line 169 "hb-ot-shape-complex-use-machine.rl"
{te = p+1;{ found_syllable (use_standard_cluster); }}
break;
- case 7:
-#line 171 "hb-ot-shape-complex-use-machine.rl"
+ case 4:
+#line 174 "hb-ot-shape-complex-use-machine.rl"
{te = p+1;{ found_syllable (use_broken_cluster); }}
break;
- case 6:
-#line 172 "hb-ot-shape-complex-use-machine.rl"
+ case 3:
+#line 175 "hb-ot-shape-complex-use-machine.rl"
{te = p+1;{ found_syllable (use_non_cluster); }}
break;
- case 10:
-#line 164 "hb-ot-shape-complex-use-machine.rl"
+ case 8:
+#line 167 "hb-ot-shape-complex-use-machine.rl"
{te = p;p--;{ found_syllable (use_virama_terminated_cluster); }}
break;
- case 11:
-#line 165 "hb-ot-shape-complex-use-machine.rl"
+ case 9:
+#line 168 "hb-ot-shape-complex-use-machine.rl"
{te = p;p--;{ found_syllable (use_sakot_terminated_cluster); }}
break;
- case 8:
-#line 166 "hb-ot-shape-complex-use-machine.rl"
+ case 6:
+#line 169 "hb-ot-shape-complex-use-machine.rl"
{te = p;p--;{ found_syllable (use_standard_cluster); }}
break;
- case 13:
-#line 167 "hb-ot-shape-complex-use-machine.rl"
+ case 11:
+#line 170 "hb-ot-shape-complex-use-machine.rl"
{te = p;p--;{ found_syllable (use_number_joiner_terminated_cluster); }}
break;
- case 12:
-#line 168 "hb-ot-shape-complex-use-machine.rl"
+ case 10:
+#line 171 "hb-ot-shape-complex-use-machine.rl"
{te = p;p--;{ found_syllable (use_numeral_cluster); }}
break;
- case 14:
-#line 169 "hb-ot-shape-complex-use-machine.rl"
+ case 5:
+#line 172 "hb-ot-shape-complex-use-machine.rl"
{te = p;p--;{ found_syllable (use_symbol_cluster); }}
break;
- case 17:
-#line 170 "hb-ot-shape-complex-use-machine.rl"
+ case 14:
+#line 173 "hb-ot-shape-complex-use-machine.rl"
{te = p;p--;{ found_syllable (use_hieroglyph_cluster); }}
break;
- case 15:
-#line 171 "hb-ot-shape-complex-use-machine.rl"
+ case 12:
+#line 174 "hb-ot-shape-complex-use-machine.rl"
{te = p;p--;{ found_syllable (use_broken_cluster); }}
break;
- case 16:
-#line 172 "hb-ot-shape-complex-use-machine.rl"
+ case 13:
+#line 175 "hb-ot-shape-complex-use-machine.rl"
{te = p;p--;{ found_syllable (use_non_cluster); }}
break;
- case 1:
-#line 171 "hb-ot-shape-complex-use-machine.rl"
- {{p = ((te))-1;}{ found_syllable (use_broken_cluster); }}
- break;
-#line 561 "hb-ot-shape-complex-use-machine.hh"
+#line 546 "hb-ot-shape-complex-use-machine.hh"
}
_again:
switch ( _use_syllable_machine_to_state_actions[cs] ) {
- case 3:
+ case 1:
#line 1 "NONE"
{ts = 0;}
break;
-#line 570 "hb-ot-shape-complex-use-machine.hh"
+#line 555 "hb-ot-shape-complex-use-machine.hh"
}
if ( ++p != pe )
@@ -582,7 +567,7 @@ _again:
}
-#line 265 "hb-ot-shape-complex-use-machine.rl"
+#line 268 "hb-ot-shape-complex-use-machine.rl"
}
diff --git a/thirdparty/harfbuzz/src/hb-ot-shape-complex-use-table.hh b/thirdparty/harfbuzz/src/hb-ot-shape-complex-use-table.hh
index 7903a0ef89..7a3a995c8c 100644
--- a/thirdparty/harfbuzz/src/hb-ot-shape-complex-use-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-shape-complex-use-table.hh
@@ -2,7 +2,7 @@
/*
* The following table is generated by running:
*
- * ./gen-use-table.py IndicSyllabicCategory.txt IndicPositionalCategory.txt UnicodeData.txt ArabicShaping.txt Blocks.txt IndicSyllabicCategory-Additional.txt IndicPositionalCategory-Additional.txt
+ * ./gen-use-table.py IndicSyllabicCategory.txt IndicPositionalCategory.txt ArabicShaping.txt DerivedCoreProperties.txt UnicodeData.txt Blocks.txt Scripts.txt IndicSyllabicCategory-Additional.txt IndicPositionalCategory-Additional.txt
*
* on files with these headers:
*
@@ -12,22 +12,28 @@
* # Date: 2021-05-22, 01:01:00 GMT [KW, RP]
* # ArabicShaping-14.0.0.txt
* # Date: 2021-05-21, 01:54:00 GMT [KW, RP]
+ * # DerivedCoreProperties-14.0.0.txt
+ * # Date: 2021-08-12, 23:12:53 GMT
* # Blocks-14.0.0.txt
* # Date: 2021-01-22, 23:29:00 GMT [KW]
+ * # Scripts-14.0.0.txt
+ * # Date: 2021-07-10, 00:35:31 GMT
* # Override values For Indic_Syllabic_Category
* # Not derivable
* # Initial version based on Unicode 7.0 by Andrew Glass 2014-03-17
- * # Updated for Unicode 10.0 by Andrew Glass 2017-07-25
- * # Updated for Unicode 12.1 by Andrew Glass 2019-05-24
- * # Updated for Unicode 13.0 by Andrew Glass 2020-07-28
+ * # Updated for Unicode 10.0 by Andrew Glass 2017-07-25
+ * # Updated for Unicode 12.1 by Andrew Glass 2019-05-24
+ * # Updated for Unicode 13.0 by Andrew Glass 2020-07-28
+ * # Updated for Unicode 14.0 by Andrew Glass 2021-09-25
* # Override values For Indic_Positional_Category
* # Not derivable
* # Initial version based on Unicode 7.0 by Andrew Glass 2014-03-17
- * # Updated for Unicode 10.0 by Andrew Glass 2017-07-25
+ * # Updated for Unicode 10.0 by Andrew Glass 2017-07-25
* # Ammended for Unicode 10.0 by Andrew Glass 2018-09-21
- * # Updated for L2/19-083 by Andrew Glass 2019-05-06
- * # Updated for Unicode 12.1 by Andrew Glass 2019-05-30
- * # Updated for Unicode 13.0 by Andrew Glass 2020-07-28
+ * # Updated for L2/19-083 by Andrew Glass 2019-05-06
+ * # Updated for Unicode 12.1 by Andrew Glass 2019-05-30
+ * # Updated for Unicode 13.0 by Andrew Glass 2020-07-28
+ * # Updated for Unicode 14.0 by Andrew Glass 2021-09-28
* UnicodeData.txt does not have a header.
*/
@@ -41,6 +47,7 @@
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-macros"
#define B USE(B) /* BASE */
+#define CGJ USE(CGJ) /* CGJ */
#define CS USE(CS) /* CONS_WITH_STACKER */
#define G USE(G) /* HIEROGLYPH */
#define GB USE(GB) /* BASE_OTHER */
@@ -51,7 +58,6 @@
#define N USE(N) /* BASE_NUM */
#define O USE(O) /* OTHER */
#define R USE(R) /* REPHA */
-#define S USE(S) /* SYM */
#define SB USE(SB) /* HIEROGLYPH_SEGMENT_BEGIN */
#define SE USE(SE) /* HIEROGLYPH_SEGMENT_END */
#define SUB USE(SUB) /* CONS_SUB */
@@ -101,14 +107,20 @@ static const uint8_t use_table[] = {
/* 00C0 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O,
/* 00D0 */ O, O, O, O, O, O, O, GB,
-#define use_offset_0x0640u 80
+#define use_offset_0x0348u 80
+
+
+ /* Combining Diacritical Marks */
+ O, O, O, O, O, O, O, CGJ,
+
+#define use_offset_0x0640u 88
/* Arabic */
/* 0640 */ B, O, O, O, O, O, O, O,
-#define use_offset_0x07c8u 88
+#define use_offset_0x07c8u 96
/* NKo */
@@ -117,7 +129,7 @@ static const uint8_t use_table[] = {
/* 07E0 */ B, B, B, B, B, B, B, B, B, B, B, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv,
/* 07F0 */ VMAbv, VMAbv, VMAbv, VMAbv, O, O, O, O, O, O, B, O, O, VMAbv, O, O,
-#define use_offset_0x0840u 144
+#define use_offset_0x0840u 152
/* Mandaic */
@@ -125,7 +137,7 @@ static const uint8_t use_table[] = {
/* 0840 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
/* 0850 */ B, B, B, B, B, B, B, B, B, CMBlw, CMBlw, CMBlw, O, O, O, O,
-#define use_offset_0x0900u 176
+#define use_offset_0x0900u 184
/* Devanagari */
@@ -238,7 +250,7 @@ static const uint8_t use_table[] = {
/* 0DE0 */ O, O, O, O, O, O, B, B, B, B, B, B, B, B, B, B,
/* 0DF0 */ O, O, VPst, VPst, O, O, O, O,
-#define use_offset_0x0f00u 1448
+#define use_offset_0x0f00u 1456
/* Tibetan */
@@ -257,7 +269,7 @@ static const uint8_t use_table[] = {
/* 0FB0 */ SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, O, O, O,
/* 0FC0 */ O, O, O, O, O, O, FBlw, O,
-#define use_offset_0x1000u 1648
+#define use_offset_0x1000u 1656
/* Myanmar */
@@ -273,7 +285,7 @@ static const uint8_t use_table[] = {
/* 1080 */ B, B, MBlw, VPst, VPre, VAbv, VAbv, VMPst, VMPst, VMPst, VMPst, VMPst, VMPst, VMBlw, B, VMPst,
/* 1090 */ B, B, B, B, B, B, B, B, B, B, VMPst, VMPst, VPst, VAbv, O, O,
-#define use_offset_0x1700u 1808
+#define use_offset_0x1700u 1816
/* Tagalog */
@@ -301,7 +313,7 @@ static const uint8_t use_table[] = {
/* 1780 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
/* 1790 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
/* 17A0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
- /* 17B0 */ B, B, B, B, O, O, VPst, VAbv, VAbv, VAbv, VAbv, VBlw, VBlw, VBlw, VPre, VPre,
+ /* 17B0 */ B, B, B, B, CGJ, CGJ, VPst, VAbv, VAbv, VAbv, VAbv, VBlw, VBlw, VBlw, VPre, VPre,
/* 17C0 */ VPre, VPre, VPre, VPre, VPre, VPre, VMAbv, VMPst, VPst, VMAbv, VMAbv, FMAbv, FAbv, CMAbv, FMAbv, VMAbv,
/* 17D0 */ FMAbv, VAbv, H, FMAbv, O, O, O, O, O, O, O, O, B, FMAbv, O, O,
/* 17E0 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O,
@@ -309,7 +321,7 @@ static const uint8_t use_table[] = {
/* Mongolian */
- /* 1800 */ B, O, O, O, O, O, O, B, O, O, B, O, O, O, O, O,
+ /* 1800 */ B, O, O, O, O, O, O, B, O, O, B, CGJ, CGJ, CGJ, O, CGJ,
/* 1810 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O,
/* 1820 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
/* 1830 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
@@ -321,7 +333,7 @@ static const uint8_t use_table[] = {
/* 1890 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
/* 18A0 */ B, B, B, B, B, B, B, B, B, CMBlw, B, O, O, O, O, O,
-#define use_offset_0x1900u 2240
+#define use_offset_0x1900u 2248
/* Limbu */
@@ -365,7 +377,7 @@ static const uint8_t use_table[] = {
/* 1A80 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O,
/* 1A90 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O,
-#define use_offset_0x1b00u 2656
+#define use_offset_0x1b00u 2664
/* Balinese */
@@ -376,7 +388,7 @@ static const uint8_t use_table[] = {
/* 1B30 */ B, B, B, B, CMAbv, VPst, VAbv, VAbv, VBlw, VBlw, VBlw, VBlw, VAbv, VAbv, VPre, VPre,
/* 1B40 */ VPre, VPre, VAbv, VAbv, H, B, B, B, B, B, B, B, B, O, O, O,
/* 1B50 */ B, B, B, B, B, B, B, B, B, B, O, GB, GB, O, O, GB,
- /* 1B60 */ O, S, GB, S, S, S, S, S, GB, S, S, SMAbv, SMBlw, SMAbv, SMAbv, SMAbv,
+ /* 1B60 */ O, O, GB, O, O, O, O, O, GB, O, O, SMAbv, SMBlw, SMAbv, SMAbv, SMAbv,
/* 1B70 */ SMAbv, SMAbv, SMAbv, SMAbv, O, O, O, O, O, O, O, O, O, O, O, O,
/* Sundanese */
@@ -401,7 +413,7 @@ static const uint8_t use_table[] = {
/* 1C30 */ FAbv, FAbv, FAbv, FAbv, VMPre, VMPre, FMAbv, CMBlw, O, O, O, O, O, O, O, O,
/* 1C40 */ B, B, B, B, B, B, B, B, B, B, O, O, O, B, B, B,
-#define use_offset_0x1cd0u 2992
+#define use_offset_0x1cd0u 3000
/* Vedic Extensions */
@@ -410,20 +422,20 @@ static const uint8_t use_table[] = {
/* 1CE0 */ VMAbv, VMPst, VMBlw, VMBlw, VMBlw, VMBlw, VMBlw, VMBlw, VMBlw, O, O, O, O, VMBlw, O, O,
/* 1CF0 */ O, O, O, O, VMAbv, CS, CS, VMPst, VMAbv, VMAbv, GB, O, O, O, O, O,
-#define use_offset_0x1df8u 3040
+#define use_offset_0x1df8u 3048
/* Combining Diacritical Marks Supplement */
O, O, O, FMAbv, O, O, O, O,
-#define use_offset_0x2008u 3048
+#define use_offset_0x2008u 3056
/* General Punctuation */
- O, O, O, O, ZWNJ, O, O, O,
+ O, O, O, O, ZWNJ, CGJ, O, O,
/* 2010 */ GB, GB, GB, GB, GB, O, O, O,
-#define use_offset_0x2070u 3064
+#define use_offset_0x2070u 3072
/* Superscripts and Subscripts */
@@ -431,20 +443,20 @@ static const uint8_t use_table[] = {
/* 2070 */ O, O, O, O, FMPst, O, O, O, O, O, O, O, O, O, O, O,
/* 2080 */ O, O, FMPst, FMPst, FMPst, O, O, O,
-#define use_offset_0x20f0u 3088
+#define use_offset_0x20f0u 3096
/* Combining Diacritical Marks for Symbols */
/* 20F0 */ VMAbv, O, O, O, O, O, O, O,
-#define use_offset_0x25c8u 3096
+#define use_offset_0x25c8u 3104
/* Geometric Shapes */
O, O, O, O, B, O, O, O,
-#define use_offset_0x2d30u 3104
+#define use_offset_0x2d30u 3112
/* Tifinagh */
@@ -455,7 +467,7 @@ static const uint8_t use_table[] = {
/* 2D60 */ B, B, B, B, B, B, B, B, O, O, O, O, O, O, O, B,
/* 2D70 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, H,
-#define use_offset_0xa800u 3184
+#define use_offset_0xa800u 3192
/* Syloti Nagri */
@@ -542,7 +554,7 @@ static const uint8_t use_table[] = {
/* AAE0 */ B, B, B, B, B, B, B, B, B, B, B, VPre, VBlw, VAbv, VPre, VPst,
/* AAF0 */ O, O, O, O, O, VMPst, H, O,
-#define use_offset_0xabc0u 3944
+#define use_offset_0xabc0u 3952
/* Meetei Mayek */
@@ -552,7 +564,25 @@ static const uint8_t use_table[] = {
/* ABE0 */ B, B, B, VPst, VPst, VAbv, VPst, VPst, VBlw, VPst, VPst, O, VMPst, VBlw, O, O,
/* ABF0 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O,
-#define use_offset_0x10a00u 4008
+#define use_offset_0xfe00u 4016
+
+
+ /* Variation Selectors */
+
+ /* FE00 */ CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ,
+
+#define use_offset_0x10570u 4032
+
+
+ /* Vithkuqi */
+
+ /* 10570 */ B, B, B, B, B, B, B, B, B, B, B, O, B, B, B, B,
+ /* 10580 */ B, B, B, B, B, B, B, B, B, B, B, O, B, B, B, B,
+ /* 10590 */ B, B, B, O, B, B, O, B, B, B, B, B, B, B, B, B,
+ /* 105A0 */ B, B, O, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 105B0 */ B, B, O, B, B, B, B, B, B, B, O, B, B, O, O, O,
+
+#define use_offset_0x10a00u 4112
/* Kharoshthi */
@@ -563,16 +593,16 @@ static const uint8_t use_table[] = {
/* 10A30 */ B, B, B, B, B, B, O, O, CMAbv, CMBlw, CMBlw, O, O, O, O, H,
/* 10A40 */ B, B, B, B, B, B, B, B, B, O, O, O, O, O, O, O,
-#define use_offset_0x10ac0u 4088
+#define use_offset_0x10ac0u 4192
/* Manichaean */
/* 10AC0 */ B, B, B, B, B, B, B, B, O, B, B, B, B, B, B, B,
/* 10AD0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
- /* 10AE0 */ B, B, B, B, B, CMBlw, CMBlw, O,
+ /* 10AE0 */ B, B, B, B, B, CMBlw, CMBlw, O, O, O, O, B, B, B, B, B,
-#define use_offset_0x10b80u 4128
+#define use_offset_0x10b80u 4240
/* Psalter Pahlavi */
@@ -581,7 +611,7 @@ static const uint8_t use_table[] = {
/* 10B90 */ B, B, O, O, O, O, O, O, O, O, O, O, O, O, O, O,
/* 10BA0 */ O, O, O, O, O, O, O, O, O, B, B, B, B, B, B, O,
-#define use_offset_0x10d00u 4176
+#define use_offset_0x10d00u 4288
/* Hanifi Rohingya */
@@ -591,7 +621,7 @@ static const uint8_t use_table[] = {
/* 10D20 */ B, B, B, B, VMAbv, VMAbv, VMAbv, CMAbv, O, O, O, O, O, O, O, O,
/* 10D30 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O,
-#define use_offset_0x10e80u 4240
+#define use_offset_0x10e80u 4352
/* Yezidi */
@@ -601,17 +631,22 @@ static const uint8_t use_table[] = {
/* 10EA0 */ B, B, B, B, B, B, B, B, B, B, O, VAbv, VAbv, O, O, O,
/* 10EB0 */ B, B, O, O, O, O, O, O,
-#define use_offset_0x10f30u 4296
+#define use_offset_0x10f30u 4408
/* Sogdian */
/* 10F30 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
/* 10F40 */ B, B, B, B, B, B, VMBlw, VMBlw, VMBlw, VMBlw, VMBlw, VMBlw, VMBlw, VMBlw, VMBlw, VMBlw,
- /* 10F50 */ VMBlw, B, B, B, B, O, O, O,
+ /* 10F50 */ VMBlw, B, B, B, B, O, O, O, O, O, O, O, O, O, O, O,
+ /* 10F60 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O,
-#define use_offset_0x10fb0u 4336
+ /* Old Uyghur */
+ /* 10F70 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 10F80 */ B, B, CMBlw, CMBlw, CMBlw, CMBlw, O, O, O, O, O, O, O, O, O, O,
+ /* 10F90 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O,
+ /* 10FA0 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O,
/* Chorasmian */
@@ -627,7 +662,7 @@ static const uint8_t use_table[] = {
/* 11010 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
/* 11020 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
/* 11030 */ B, B, B, B, B, B, B, B, VAbv, VAbv, VAbv, VAbv, VBlw, VBlw, VBlw, VBlw,
- /* 11040 */ VBlw, VBlw, VAbv, VAbv, VAbv, VAbv, HVM, O, O, O, O, O, O, O, O, O,
+ /* 11040 */ VBlw, VBlw, VAbv, VAbv, VAbv, VAbv, H, O, O, O, O, O, O, O, O, O,
/* 11050 */ O, O, N, N, N, N, N, N, N, N, N, N, N, N, N, N,
/* 11060 */ N, N, N, N, N, N, B, B, B, B, B, B, B, B, B, B,
/* 11070 */ VAbv, B, B, VAbv, VAbv, B, O, O, O, O, O, O, O, O, O, HN,
@@ -640,7 +675,7 @@ static const uint8_t use_table[] = {
/* 110B0 */ VPst, VPre, VPst, VBlw, VBlw, VAbv, VAbv, VPst, VPst, H, CMBlw, O, O, O, O, O,
/* 110C0 */ O, O, VBlw, O, O, O, O, O,
-#define use_offset_0x11100u 4616
+#define use_offset_0x11100u 4816
/* Chakma */
@@ -678,7 +713,7 @@ static const uint8_t use_table[] = {
/* 11220 */ B, B, B, B, B, B, B, B, B, B, B, B, VPst, VPst, VPst, VBlw,
/* 11230 */ VAbv, VAbv, VAbv, VAbv, VMAbv, H, CMAbv, CMAbv, O, O, O, O, O, O, VMAbv, O,
-#define use_offset_0x11280u 4936
+#define use_offset_0x11280u 5136
/* Multani */
@@ -706,7 +741,7 @@ static const uint8_t use_table[] = {
/* 11360 */ B, B, VPst, VPst, O, O, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, O, O, O,
/* 11370 */ VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, O, O, O,
-#define use_offset_0x11400u 5184
+#define use_offset_0x11400u 5384
/* Newa */
@@ -729,7 +764,7 @@ static const uint8_t use_table[] = {
/* 114C0 */ VMAbv, VMAbv, H, CMBlw, B, O, O, O, O, O, O, O, O, O, O, O,
/* 114D0 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O,
-#define use_offset_0x11580u 5408
+#define use_offset_0x11580u 5608
/* Siddham */
@@ -773,7 +808,7 @@ static const uint8_t use_table[] = {
/* 11730 */ B, B, B, B, B, B, B, B, B, B, B, B, O, O, O, O,
/* 11740 */ B, B, B, B, B, B, B, O,
-#define use_offset_0x11800u 5864
+#define use_offset_0x11800u 6064
/* Dogra */
@@ -783,7 +818,7 @@ static const uint8_t use_table[] = {
/* 11820 */ B, B, B, B, B, B, B, B, B, B, B, B, VPst, VPre, VPst, VBlw,
/* 11830 */ VBlw, VBlw, VBlw, VAbv, VAbv, VAbv, VAbv, VMAbv, VMPst, H, CMBlw, O, O, O, O, O,
-#define use_offset_0x11900u 5928
+#define use_offset_0x11900u 6128
/* Dives Akuru */
@@ -795,7 +830,7 @@ static const uint8_t use_table[] = {
/* 11940 */ MPst, R, MPst, CMBlw, O, O, O, O, O, O, O, O, O, O, O, O,
/* 11950 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O,
-#define use_offset_0x119a0u 6024
+#define use_offset_0x119a0u 6224
/* Nandinagari */
@@ -823,7 +858,7 @@ static const uint8_t use_table[] = {
/* 11A80 */ B, B, B, B, R, R, R, R, R, R, FBlw, FBlw, FBlw, FBlw, FBlw, FBlw,
/* 11A90 */ FBlw, FBlw, FBlw, FBlw, FBlw, FBlw, VMAbv, VMPst, CMAbv, H, O, O, O, B, O, O,
-#define use_offset_0x11c00u 6280
+#define use_offset_0x11c00u 6480
/* Bhaiksuki */
@@ -844,7 +879,7 @@ static const uint8_t use_table[] = {
/* 11CA0 */ SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, O, SUB, SUB, SUB, SUB, SUB, SUB, SUB,
/* 11CB0 */ VBlw, VPre, VBlw, VAbv, VPst, VMAbv, VMAbv, O,
-#define use_offset_0x11d00u 6464
+#define use_offset_0x11d00u 6664
/* Masaram Gondi */
@@ -864,7 +899,7 @@ static const uint8_t use_table[] = {
/* 11D90 */ VAbv, VAbv, O, VPst, VPst, VMAbv, VMPst, H, O, O, O, O, O, O, O, O,
/* 11DA0 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O,
-#define use_offset_0x11ee0u 6640
+#define use_offset_0x11ee0u 6840
/* Makasar */
@@ -872,85 +907,92 @@ static const uint8_t use_table[] = {
/* 11EE0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
/* 11EF0 */ B, B, GB, VAbv, VBlw, VPre, VPst, O,
-#define use_offset_0x13000u 6664
+#define use_offset_0x13000u 6864
/* Egyptian Hieroglyphs */
- /* 13000 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 13010 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 13020 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 13030 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 13040 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 13050 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 13060 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 13070 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 13080 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 13090 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 130A0 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 130B0 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 130C0 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 130D0 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 130E0 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 130F0 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 13100 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 13110 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 13120 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 13130 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 13140 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 13150 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 13160 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 13170 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 13180 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 13190 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 131A0 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 131B0 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 131C0 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 131D0 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 131E0 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 131F0 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 13200 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 13210 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 13220 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 13230 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 13240 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 13250 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 13260 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 13270 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 13280 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 13290 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 132A0 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 132B0 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 132C0 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 132D0 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 132E0 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 132F0 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 13300 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 13310 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 13320 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 13330 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 13340 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 13350 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 13360 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 13370 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 13380 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 13390 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 133A0 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 133B0 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 133C0 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 133D0 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 133E0 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 133F0 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 13400 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 13410 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
- /* 13420 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, O,
+ /* 13000 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 13010 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 13020 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 13030 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 13040 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 13050 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 13060 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 13070 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 13080 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 13090 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 130A0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 130B0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 130C0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 130D0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 130E0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 130F0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 13100 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 13110 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 13120 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 13130 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 13140 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 13150 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 13160 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 13170 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 13180 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 13190 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 131A0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 131B0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 131C0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 131D0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 131E0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 131F0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 13200 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 13210 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 13220 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 13230 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 13240 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 13250 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 13260 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 13270 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 13280 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 13290 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 132A0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 132B0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 132C0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 132D0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 132E0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 132F0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 13300 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 13310 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 13320 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 13330 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 13340 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 13350 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 13360 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 13370 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 13380 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 13390 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 133A0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 133B0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 133C0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 133D0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 133E0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 133F0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 13400 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 13410 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 13420 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, O,
/* Egyptian Hieroglyph Format Controls */
- /* 13430 */ J, J, J, J, J, J, J, SB, SE, O, O, O, O, O, O, O,
+ /* 13430 */ H, H, H, H, H, H, H, B, B, O, O, O, O, O, O, O,
+
+#define use_offset_0x16ac0u 7952
-#define use_offset_0x16b00u 7752
+ /* Tangsa */
+
+ /* 16AC0 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O,
+ /* 16AD0 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O,
+ /* 16AE0 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O,
+ /* 16AF0 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O,
/* Pahawh Hmong */
@@ -959,7 +1001,7 @@ static const uint8_t use_table[] = {
/* 16B20 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
/* 16B30 */ VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, O,
-#define use_offset_0x16f00u 7808
+#define use_offset_0x16f00u 8072
/* Miao */
@@ -975,14 +1017,14 @@ static const uint8_t use_table[] = {
/* 16F80 */ VBlw, VBlw, VBlw, VBlw, VBlw, VBlw, VBlw, VBlw, O, O, O, O, O, O, O, VMBlw,
/* 16F90 */ VMBlw, VMBlw, VMBlw, O, O, O, O, O,
-#define use_offset_0x16fe0u 7960
+#define use_offset_0x16fe0u 8224
/* Ideographic Symbols and Punctuation */
/* 16FE0 */ O, O, O, O, B, O, O, O,
-#define use_offset_0x18b00u 7968
+#define use_offset_0x18b00u 8232
/* Khitan Small Script */
@@ -1018,7 +1060,7 @@ static const uint8_t use_table[] = {
/* 18CC0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
/* 18CD0 */ B, B, B, B, B, B, O, O,
-#define use_offset_0x1bc00u 8440
+#define use_offset_0x1bc00u 8704
/* Duployan */
@@ -1034,7 +1076,7 @@ static const uint8_t use_table[] = {
/* 1BC80 */ B, B, B, B, B, B, B, B, B, O, O, O, O, O, O, O,
/* 1BC90 */ B, B, B, B, B, B, B, B, B, B, O, O, O, CMBlw, CMBlw, O,
-#define use_offset_0x1e100u 8600
+#define use_offset_0x1e100u 8864
/* Nyiakeng Puachue Hmong */
@@ -1045,8 +1087,14 @@ static const uint8_t use_table[] = {
/* 1E130 */ VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, B, B, B, B, B, B, B, O, O,
/* 1E140 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, B, B,
-#define use_offset_0x1e2c0u 8680
+#define use_offset_0x1e290u 8944
+
+
+ /* Toto */
+ /* 1E290 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 1E2A0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, VMAbv, O,
+ /* 1E2B0 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O,
/* Wancho */
@@ -1055,7 +1103,7 @@ static const uint8_t use_table[] = {
/* 1E2E0 */ B, B, B, B, B, B, B, B, B, B, B, B, VMAbv, VMAbv, VMAbv, VMAbv,
/* 1E2F0 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O,
-#define use_offset_0x1e900u 8744
+#define use_offset_0x1e900u 9056
/* Adlam */
@@ -1067,7 +1115,28 @@ static const uint8_t use_table[] = {
/* 1E940 */ B, B, B, B, CMAbv, CMAbv, CMAbv, CMAbv, CMAbv, CMAbv, CMAbv, B, O, O, O, O,
/* 1E950 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O,
-}; /* Table items: 8840; occupancy: 79% */
+#define use_offset_0xe0100u 9152
+
+
+ /* Variation Selectors Supplement */
+
+ /* E0100 */ CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ,
+ /* E0110 */ CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ,
+ /* E0120 */ CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ,
+ /* E0130 */ CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ,
+ /* E0140 */ CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ,
+ /* E0150 */ CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ,
+ /* E0160 */ CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ,
+ /* E0170 */ CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ,
+ /* E0180 */ CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ,
+ /* E0190 */ CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ,
+ /* E01A0 */ CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ,
+ /* E01B0 */ CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ,
+ /* E01C0 */ CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ,
+ /* E01D0 */ CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ,
+ /* E01E0 */ CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ,
+
+}; /* Table items: 9392; occupancy: 79% */
static inline uint8_t
hb_use_get_category (hb_codepoint_t u)
@@ -1077,6 +1146,7 @@ hb_use_get_category (hb_codepoint_t u)
case 0x0u:
if (hb_in_range<hb_codepoint_t> (u, 0x0028u, 0x003Fu)) return use_table[u - 0x0028u + use_offset_0x0028u];
if (hb_in_range<hb_codepoint_t> (u, 0x00A0u, 0x00D7u)) return use_table[u - 0x00A0u + use_offset_0x00a0u];
+ if (hb_in_range<hb_codepoint_t> (u, 0x0348u, 0x034Fu)) return use_table[u - 0x0348u + use_offset_0x0348u];
if (hb_in_range<hb_codepoint_t> (u, 0x0640u, 0x0647u)) return use_table[u - 0x0640u + use_offset_0x0640u];
if (hb_in_range<hb_codepoint_t> (u, 0x07C8u, 0x07FFu)) return use_table[u - 0x07C8u + use_offset_0x07c8u];
if (hb_in_range<hb_codepoint_t> (u, 0x0840u, 0x085Fu)) return use_table[u - 0x0840u + use_offset_0x0840u];
@@ -1106,18 +1176,22 @@ hb_use_get_category (hb_codepoint_t u)
if (hb_in_range<hb_codepoint_t> (u, 0xABC0u, 0xABFFu)) return use_table[u - 0xABC0u + use_offset_0xabc0u];
break;
+ case 0xFu:
+ if (hb_in_range<hb_codepoint_t> (u, 0xFE00u, 0xFE0Fu)) return use_table[u - 0xFE00u + use_offset_0xfe00u];
+ break;
+
case 0x10u:
+ if (hb_in_range<hb_codepoint_t> (u, 0x10570u, 0x105BFu)) return use_table[u - 0x10570u + use_offset_0x10570u];
if (hb_in_range<hb_codepoint_t> (u, 0x10A00u, 0x10A4Fu)) return use_table[u - 0x10A00u + use_offset_0x10a00u];
- if (hb_in_range<hb_codepoint_t> (u, 0x10AC0u, 0x10AE7u)) return use_table[u - 0x10AC0u + use_offset_0x10ac0u];
+ if (hb_in_range<hb_codepoint_t> (u, 0x10AC0u, 0x10AEFu)) return use_table[u - 0x10AC0u + use_offset_0x10ac0u];
if (hb_in_range<hb_codepoint_t> (u, 0x10B80u, 0x10BAFu)) return use_table[u - 0x10B80u + use_offset_0x10b80u];
if (hb_in_range<hb_codepoint_t> (u, 0x10D00u, 0x10D3Fu)) return use_table[u - 0x10D00u + use_offset_0x10d00u];
if (hb_in_range<hb_codepoint_t> (u, 0x10E80u, 0x10EB7u)) return use_table[u - 0x10E80u + use_offset_0x10e80u];
- if (hb_in_range<hb_codepoint_t> (u, 0x10F30u, 0x10F57u)) return use_table[u - 0x10F30u + use_offset_0x10f30u];
- if (hb_in_range<hb_codepoint_t> (u, 0x10FB0u, 0x110C7u)) return use_table[u - 0x10FB0u + use_offset_0x10fb0u];
+ if (hb_in_range<hb_codepoint_t> (u, 0x10F30u, 0x110C7u)) return use_table[u - 0x10F30u + use_offset_0x10f30u];
break;
case 0x11u:
- if (hb_in_range<hb_codepoint_t> (u, 0x10FB0u, 0x110C7u)) return use_table[u - 0x10FB0u + use_offset_0x10fb0u];
+ if (hb_in_range<hb_codepoint_t> (u, 0x10F30u, 0x110C7u)) return use_table[u - 0x10F30u + use_offset_0x10f30u];
if (hb_in_range<hb_codepoint_t> (u, 0x11100u, 0x1123Fu)) return use_table[u - 0x11100u + use_offset_0x11100u];
if (hb_in_range<hb_codepoint_t> (u, 0x11280u, 0x11377u)) return use_table[u - 0x11280u + use_offset_0x11280u];
if (hb_in_range<hb_codepoint_t> (u, 0x11400u, 0x114DFu)) return use_table[u - 0x11400u + use_offset_0x11400u];
@@ -1135,7 +1209,7 @@ hb_use_get_category (hb_codepoint_t u)
break;
case 0x16u:
- if (hb_in_range<hb_codepoint_t> (u, 0x16B00u, 0x16B37u)) return use_table[u - 0x16B00u + use_offset_0x16b00u];
+ if (hb_in_range<hb_codepoint_t> (u, 0x16AC0u, 0x16B37u)) return use_table[u - 0x16AC0u + use_offset_0x16ac0u];
if (hb_in_range<hb_codepoint_t> (u, 0x16F00u, 0x16F97u)) return use_table[u - 0x16F00u + use_offset_0x16f00u];
if (hb_in_range<hb_codepoint_t> (u, 0x16FE0u, 0x16FE7u)) return use_table[u - 0x16FE0u + use_offset_0x16fe0u];
break;
@@ -1150,10 +1224,14 @@ hb_use_get_category (hb_codepoint_t u)
case 0x1Eu:
if (hb_in_range<hb_codepoint_t> (u, 0x1E100u, 0x1E14Fu)) return use_table[u - 0x1E100u + use_offset_0x1e100u];
- if (hb_in_range<hb_codepoint_t> (u, 0x1E2C0u, 0x1E2FFu)) return use_table[u - 0x1E2C0u + use_offset_0x1e2c0u];
+ if (hb_in_range<hb_codepoint_t> (u, 0x1E290u, 0x1E2FFu)) return use_table[u - 0x1E290u + use_offset_0x1e290u];
if (hb_in_range<hb_codepoint_t> (u, 0x1E900u, 0x1E95Fu)) return use_table[u - 0x1E900u + use_offset_0x1e900u];
break;
+ case 0xE0u:
+ if (hb_in_range<hb_codepoint_t> (u, 0xE0100u, 0xE01EFu)) return use_table[u - 0xE0100u + use_offset_0xe0100u];
+ break;
+
default:
break;
}
@@ -1161,6 +1239,7 @@ hb_use_get_category (hb_codepoint_t u)
}
#undef B
+#undef CGJ
#undef CS
#undef G
#undef GB
@@ -1171,7 +1250,6 @@ hb_use_get_category (hb_codepoint_t u)
#undef N
#undef O
#undef R
-#undef S
#undef SB
#undef SE
#undef SUB
diff --git a/thirdparty/harfbuzz/src/hb-ot-shape-complex-use.cc b/thirdparty/harfbuzz/src/hb-ot-shape-complex-use.cc
index 1e4804c4a2..70b637933d 100644
--- a/thirdparty/harfbuzz/src/hb-ot-shape-complex-use.cc
+++ b/thirdparty/harfbuzz/src/hb-ot-shape-complex-use.cc
@@ -257,7 +257,6 @@ setup_topographical_masks (const hb_ot_shape_plan_t *plan,
use_syllable_type_t syllable_type = (use_syllable_type_t) (info[start].syllable() & 0x0F);
switch (syllable_type)
{
- case use_independent_cluster:
case use_symbol_cluster:
case use_hieroglyph_cluster:
case use_non_cluster:
diff --git a/thirdparty/harfbuzz/src/hb-ot-shape-normalize.cc b/thirdparty/harfbuzz/src/hb-ot-shape-normalize.cc
index 778b5b8bd8..839cc9122c 100644
--- a/thirdparty/harfbuzz/src/hb-ot-shape-normalize.cc
+++ b/thirdparty/harfbuzz/src/hb-ot-shape-normalize.cc
@@ -171,7 +171,7 @@ decompose_current_character (const hb_ot_shape_normalize_context_t *c, bool shor
hb_codepoint_t u = buffer->cur().codepoint;
hb_codepoint_t glyph = 0;
- if (shortest && c->font->get_nominal_glyph (u, &glyph))
+ if (shortest && c->font->get_nominal_glyph (u, &glyph, c->not_found))
{
next_char (buffer, glyph);
return;
@@ -183,7 +183,7 @@ decompose_current_character (const hb_ot_shape_normalize_context_t *c, bool shor
return;
}
- if (!shortest && c->font->get_nominal_glyph (u, &glyph))
+ if (!shortest && c->font->get_nominal_glyph (u, &glyph, c->not_found))
{
next_char (buffer, glyph);
return;
@@ -312,6 +312,7 @@ _hb_ot_shape_normalize (const hb_ot_shape_plan_t *plan,
buffer,
font,
buffer->unicode,
+ buffer->not_found,
plan->shaper->decompose ? plan->shaper->decompose : decompose_unicode,
plan->shaper->compose ? plan->shaper->compose : compose_unicode
};
diff --git a/thirdparty/harfbuzz/src/hb-ot-shape-normalize.hh b/thirdparty/harfbuzz/src/hb-ot-shape-normalize.hh
index 04f1a80091..12c78a2352 100644
--- a/thirdparty/harfbuzz/src/hb-ot-shape-normalize.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-shape-normalize.hh
@@ -56,6 +56,7 @@ struct hb_ot_shape_normalize_context_t
hb_buffer_t *buffer;
hb_font_t *font;
hb_unicode_funcs_t *unicode;
+ const hb_codepoint_t not_found;
bool (*decompose) (const hb_ot_shape_normalize_context_t *c,
hb_codepoint_t ab,
hb_codepoint_t *a,
diff --git a/thirdparty/harfbuzz/src/hb-ot-shape.cc b/thirdparty/harfbuzz/src/hb-ot-shape.cc
index 0e215c24f7..4e8a4bc3d1 100644
--- a/thirdparty/harfbuzz/src/hb-ot-shape.cc
+++ b/thirdparty/harfbuzz/src/hb-ot-shape.cc
@@ -150,23 +150,25 @@ hb_ot_shape_planner_t::compile (hb_ot_shape_plan_t &plan,
*/
#ifndef HB_NO_AAT_SHAPE
- bool has_gsub = hb_ot_layout_has_substitution (face);
+ bool has_kerx = hb_aat_layout_has_positioning (face);
+ bool has_gsub = !apply_morx && hb_ot_layout_has_substitution (face);
#endif
bool has_gpos = !disable_gpos && hb_ot_layout_has_positioning (face);
if (false)
;
#ifndef HB_NO_AAT_SHAPE
- else if (hb_aat_layout_has_positioning (face) && !(has_gsub && has_gpos))
+ /* Prefer GPOS over kerx if GSUB is present;
+ * https://github.com/harfbuzz/harfbuzz/issues/3008 */
+ else if (has_kerx && !(has_gsub && has_gpos))
plan.apply_kerx = true;
#endif
- else if (!apply_morx && has_gpos)
+ else if (has_gpos)
plan.apply_gpos = true;
if (!plan.apply_kerx && (!has_gpos_kern || !plan.apply_gpos))
{
- /* Apparently Apple applies kerx if GPOS kern was not applied. */
#ifndef HB_NO_AAT_SHAPE
- if (hb_aat_layout_has_positioning (face))
+ if (has_kerx)
plan.apply_kerx = true;
else
#endif
diff --git a/thirdparty/harfbuzz/src/hb-ot-var-common.hh b/thirdparty/harfbuzz/src/hb-ot-var-common.hh
new file mode 100644
index 0000000000..0eafb949d5
--- /dev/null
+++ b/thirdparty/harfbuzz/src/hb-ot-var-common.hh
@@ -0,0 +1,264 @@
+/*
+ * Copyright © 2021 Google, Inc.
+ *
+ * This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ */
+
+#ifndef HB_OT_VAR_COMMON_HH
+#define HB_OT_VAR_COMMON_HH
+
+#include "hb-ot-layout-common.hh"
+
+
+namespace OT {
+
+struct DeltaSetIndexMapFormat0
+{
+ friend struct DeltaSetIndexMap;
+
+ private:
+ DeltaSetIndexMapFormat0* copy (hb_serialize_context_t *c) const
+ {
+ TRACE_SERIALIZE (this);
+ auto *out = c->start_embed (this);
+ if (unlikely (!out)) return_trace (nullptr);
+
+ unsigned total_size = min_size + mapCount * get_width ();
+ HBUINT8 *p = c->allocate_size<HBUINT8> (total_size);
+ if (unlikely (!p)) return_trace (nullptr);
+
+ memcpy (p, this, HBUINT8::static_size * total_size);
+ return_trace (out);
+ }
+
+ template <typename T>
+ bool serialize (hb_serialize_context_t *c, const T &plan)
+ {
+ unsigned int width = plan.get_width ();
+ unsigned int inner_bit_count = plan.get_inner_bit_count ();
+ const hb_array_t<const uint32_t> output_map = plan.get_output_map ();
+
+ TRACE_SERIALIZE (this);
+ if (unlikely (output_map.length && ((((inner_bit_count-1)&~0xF)!=0) || (((width-1)&~0x3)!=0))))
+ return_trace (false);
+ if (unlikely (!c->extend_min (this))) return_trace (false);
+
+ entryFormat = ((width-1)<<4)|(inner_bit_count-1);
+ mapCount = output_map.length;
+ HBUINT8 *p = c->allocate_size<HBUINT8> (width * output_map.length);
+ if (unlikely (!p)) return_trace (false);
+ for (unsigned int i = 0; i < output_map.length; i++)
+ {
+ unsigned int v = output_map[i];
+ unsigned int outer = v >> 16;
+ unsigned int inner = v & 0xFFFF;
+ unsigned int u = (outer << inner_bit_count) | inner;
+ for (unsigned int w = width; w > 0;)
+ {
+ p[--w] = u;
+ u >>= 8;
+ }
+ p += width;
+ }
+ return_trace (true);
+ }
+
+ uint32_t map (unsigned int v) const /* Returns 16.16 outer.inner. */
+ {
+ /* If count is zero, pass value unchanged. This takes
+ * care of direct mapping for advance map. */
+ if (!mapCount)
+ return v;
+
+ if (v >= mapCount)
+ v = mapCount - 1;
+
+ unsigned int u = 0;
+ { /* Fetch it. */
+ unsigned int w = get_width ();
+ const HBUINT8 *p = mapDataZ.arrayZ + w * v;
+ for (; w; w--)
+ u = (u << 8) + *p++;
+ }
+
+ { /* Repack it. */
+ unsigned int n = get_inner_bit_count ();
+ unsigned int outer = u >> n;
+ unsigned int inner = u & ((1 << n) - 1);
+ u = (outer<<16) | inner;
+ }
+
+ return u;
+ }
+
+ unsigned get_map_count () const { return mapCount; }
+ unsigned get_width () const { return ((entryFormat >> 4) & 3) + 1; }
+ unsigned get_inner_bit_count () const { return (entryFormat & 0xF) + 1; }
+
+
+ bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this) &&
+ c->check_range (mapDataZ.arrayZ,
+ mapCount,
+ get_width ()));
+ }
+
+ protected:
+ HBUINT8 format; /* Format identifier--format = 0 */
+ HBUINT8 entryFormat; /* A packed field that describes the compressed
+ * representation of delta-set indices. */
+ HBUINT16 mapCount; /* The number of mapping entries. */
+ UnsizedArrayOf<HBUINT8>
+ mapDataZ; /* The delta-set index mapping data. */
+
+ public:
+ DEFINE_SIZE_ARRAY (4, mapDataZ);
+};
+
+struct DeltaSetIndexMapFormat1
+{
+ friend struct DeltaSetIndexMap;
+
+ private:
+ DeltaSetIndexMapFormat1* copy (hb_serialize_context_t *c) const
+ {
+ TRACE_SERIALIZE (this);
+ auto *out = c->start_embed (this);
+ if (unlikely (!out)) return_trace (nullptr);
+
+ unsigned total_size = min_size + mapCount * get_width ();
+ HBUINT8 *p = c->allocate_size<HBUINT8> (total_size);
+ if (unlikely (!p)) return_trace (nullptr);
+
+ memcpy (p, this, HBUINT8::static_size * total_size);
+ return_trace (out);
+ }
+
+ unsigned get_map_count () const { return mapCount; }
+ unsigned get_width () const { return ((entryFormat >> 4) & 3) + 1; }
+ unsigned get_inner_bit_count () const { return (entryFormat & 0xF) + 1; }
+
+ bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this) &&
+ c->check_range (mapDataZ.arrayZ,
+ mapCount,
+ get_width ()));
+ }
+
+ protected:
+ HBUINT8 format; /* Format identifier--format = 1 */
+ HBUINT8 entryFormat; /* A packed field that describes the compressed
+ * representation of delta-set indices. */
+ HBUINT32 mapCount; /* The number of mapping entries. */
+ UnsizedArrayOf<HBUINT8>
+ mapDataZ; /* The delta-set index mapping data. */
+
+ public:
+ DEFINE_SIZE_ARRAY (6, mapDataZ);
+};
+
+struct DeltaSetIndexMap
+{
+ template <typename T>
+ bool serialize (hb_serialize_context_t *c, const T &plan)
+ {
+ TRACE_SERIALIZE (this);
+ switch (u.format) {
+ case 0: return_trace (u.format0.serialize (c, plan));
+ default:return_trace (false);
+ }
+ }
+
+ uint32_t map (unsigned v) const
+ {
+ switch (u.format) {
+ case 0: return (u.format0.map (v));
+ default:return v;
+ }
+ }
+
+ unsigned get_map_count () const
+ {
+ switch (u.format) {
+ case 0: return u.format0.get_map_count ();
+ case 1: return u.format1.get_map_count ();
+ default:return 0;
+ }
+ }
+
+ unsigned get_width () const
+ {
+ switch (u.format) {
+ case 0: return u.format0.get_width ();
+ case 1: return u.format1.get_width ();
+ default:return 0;
+ }
+ }
+
+ unsigned get_inner_bit_count () const
+ {
+ switch (u.format) {
+ case 0: return u.format0.get_inner_bit_count ();
+ case 1: return u.format1.get_inner_bit_count ();
+ default:return 0;
+ }
+ }
+
+ bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ if (!u.format.sanitize (c)) return_trace (false);
+ switch (u.format) {
+ case 0: return_trace (u.format0.sanitize (c));
+ case 1: return_trace (u.format1.sanitize (c));
+ default:return_trace (true);
+ }
+ }
+
+ DeltaSetIndexMap* copy (hb_serialize_context_t *c) const
+ {
+ TRACE_SERIALIZE (this);
+ switch (u.format) {
+ case 0: return_trace (reinterpret_cast<DeltaSetIndexMap *> (u.format0.copy (c)));
+ case 1: return_trace (reinterpret_cast<DeltaSetIndexMap *> (u.format1.copy (c)));
+ default:return_trace (nullptr);
+ }
+ }
+
+ protected:
+ union {
+ HBUINT8 format; /* Format identifier */
+ DeltaSetIndexMapFormat0 format0;
+ DeltaSetIndexMapFormat1 format1;
+ } u;
+ public:
+ DEFINE_SIZE_UNION (1, format);
+};
+
+} /* namespace OT */
+
+
+#endif /* HB_OT_VAR_COMMON_HH */
diff --git a/thirdparty/harfbuzz/src/hb-ot-var-hvar-table.hh b/thirdparty/harfbuzz/src/hb-ot-var-hvar-table.hh
index 72217e7f29..074b6a3785 100644
--- a/thirdparty/harfbuzz/src/hb-ot-var-hvar-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-var-hvar-table.hh
@@ -28,97 +28,11 @@
#define HB_OT_VAR_HVAR_TABLE_HH
#include "hb-ot-layout-common.hh"
-
+#include "hb-ot-var-common.hh"
namespace OT {
-struct DeltaSetIndexMap
-{
- bool sanitize (hb_sanitize_context_t *c) const
- {
- TRACE_SANITIZE (this);
- return_trace (c->check_struct (this) &&
- c->check_range (mapDataZ.arrayZ,
- mapCount,
- get_width ()));
- }
-
- template <typename T>
- bool serialize (hb_serialize_context_t *c, const T &plan)
- {
- unsigned int width = plan.get_width ();
- unsigned int inner_bit_count = plan.get_inner_bit_count ();
- const hb_array_t<const uint32_t> output_map = plan.get_output_map ();
-
- TRACE_SERIALIZE (this);
- if (unlikely (output_map.length && ((((inner_bit_count-1)&~0xF)!=0) || (((width-1)&~0x3)!=0))))
- return_trace (false);
- if (unlikely (!c->extend_min (this))) return_trace (false);
-
- format = ((width-1)<<4)|(inner_bit_count-1);
- mapCount = output_map.length;
- HBUINT8 *p = c->allocate_size<HBUINT8> (width * output_map.length);
- if (unlikely (!p)) return_trace (false);
- for (unsigned int i = 0; i < output_map.length; i++)
- {
- unsigned int v = output_map[i];
- unsigned int outer = v >> 16;
- unsigned int inner = v & 0xFFFF;
- unsigned int u = (outer << inner_bit_count) | inner;
- for (unsigned int w = width; w > 0;)
- {
- p[--w] = u;
- u >>= 8;
- }
- p += width;
- }
- return_trace (true);
- }
-
- uint32_t map (unsigned int v) const /* Returns 16.16 outer.inner. */
- {
- /* If count is zero, pass value unchanged. This takes
- * care of direct mapping for advance map. */
- if (!mapCount)
- return v;
-
- if (v >= mapCount)
- v = mapCount - 1;
-
- unsigned int u = 0;
- { /* Fetch it. */
- unsigned int w = get_width ();
- const HBUINT8 *p = mapDataZ.arrayZ + w * v;
- for (; w; w--)
- u = (u << 8) + *p++;
- }
-
- { /* Repack it. */
- unsigned int n = get_inner_bit_count ();
- unsigned int outer = u >> n;
- unsigned int inner = u & ((1 << n) - 1);
- u = (outer<<16) | inner;
- }
-
- return u;
- }
-
- unsigned int get_map_count () const { return mapCount; }
- unsigned int get_width () const { return ((format >> 4) & 3) + 1; }
- unsigned int get_inner_bit_count () const { return (format & 0xF) + 1; }
-
- protected:
- HBUINT16 format; /* A packed field that describes the compressed
- * representation of delta-set indices. */
- HBUINT16 mapCount; /* The number of mapping entries. */
- UnsizedArrayOf<HBUINT8>
- mapDataZ; /* The delta-set index mapping data. */
-
- public:
- DEFINE_SIZE_ARRAY (4, mapDataZ);
-};
-
struct index_map_subset_plan_t
{
enum index_map_index_t {
diff --git a/thirdparty/harfbuzz/src/hb-ot-vorg-table.hh b/thirdparty/harfbuzz/src/hb-ot-vorg-table.hh
index efa7737d6f..811e13919e 100644
--- a/thirdparty/harfbuzz/src/hb-ot-vorg-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-vorg-table.hh
@@ -48,7 +48,7 @@ struct VertOriginMetric
}
public:
- HBGlyphID glyph;
+ HBGlyphID16 glyph;
FWORD vertOriginY;
public:
diff --git a/thirdparty/harfbuzz/src/hb-repacker.hh b/thirdparty/harfbuzz/src/hb-repacker.hh
index b02128b5c4..26faa56ea8 100644
--- a/thirdparty/harfbuzz/src/hb-repacker.hh
+++ b/thirdparty/harfbuzz/src/hb-repacker.hh
@@ -33,6 +33,10 @@
#include "hb-serialize.hh"
#include "hb-vector.hh"
+/*
+ * For a detailed writeup on the overflow resolution algorithm see:
+ * docs/repacker.md
+ */
struct graph_t
{
@@ -40,23 +44,58 @@ struct graph_t
{
vertex_t () :
distance (0),
- incoming_edges (0),
+ space (0),
+ parents (),
start (0),
end (0),
priority(0) {}
- void fini () { obj.fini (); }
+ void fini () {
+ obj.fini ();
+ parents.fini ();
+ }
hb_serialize_context_t::object_t obj;
int64_t distance;
- unsigned incoming_edges;
+ int64_t space;
+ hb_vector_t<unsigned> parents;
unsigned start;
unsigned end;
unsigned priority;
bool is_shared () const
{
- return incoming_edges > 1;
+ return parents.length > 1;
+ }
+
+ unsigned incoming_edges () const
+ {
+ return parents.length;
+ }
+
+ void remove_parent (unsigned parent_index)
+ {
+ for (unsigned i = 0; i < parents.length; i++)
+ {
+ if (parents[i] != parent_index) continue;
+ parents.remove (i);
+ break;
+ }
+ }
+
+ void remap_parents (const hb_vector_t<unsigned>& id_map)
+ {
+ for (unsigned i = 0; i < parents.length; i++)
+ parents[i] = id_map[parents[i]];
+ }
+
+ void remap_parent (unsigned old_index, unsigned new_index)
+ {
+ for (unsigned i = 0; i < parents.length; i++)
+ {
+ if (parents[i] == old_index)
+ parents[i] = new_index;
+ }
}
bool is_leaf () const
@@ -77,7 +116,7 @@ struct graph_t
int64_t modified_distance =
hb_min (hb_max(distance + distance_modifier (), 0), 0x7FFFFFFFFF);
- return (modified_distance << 24) | (0x00FFFFFF & order);
+ return (modified_distance << 22) | (0x003FFFFF & order);
}
int64_t distance_modifier () const
@@ -91,34 +130,7 @@ struct graph_t
struct overflow_record_t
{
unsigned parent;
- const hb_serialize_context_t::object_t::link_t* link;
- };
-
- struct clone_buffer_t
- {
- clone_buffer_t () : head (nullptr), tail (nullptr) {}
-
- bool copy (const hb_serialize_context_t::object_t& object)
- {
- fini ();
- unsigned size = object.tail - object.head;
- head = (char*) hb_malloc (size);
- if (!head) return false;
-
- memcpy (head, object.head, size);
- tail = head + size;
- return true;
- }
-
- char* head;
- char* tail;
-
- void fini ()
- {
- if (!head) return;
- hb_free (head);
- head = nullptr;
- }
+ unsigned child;
};
/*
@@ -129,11 +141,12 @@ struct graph_t
* serializer
*/
graph_t (const hb_vector_t<hb_serialize_context_t::object_t *>& objects)
- : edge_count_invalid (true),
+ : parents_invalid (true),
distance_invalid (true),
positions_invalid (true),
successful (true)
{
+ num_roots_for_space_.push (1);
bool removed_nil = false;
for (unsigned i = 0; i < objects.length; i++)
{
@@ -160,12 +173,13 @@ struct graph_t
~graph_t ()
{
vertices_.fini_deep ();
- clone_buffers_.fini_deep ();
}
bool in_error () const
{
- return !successful || vertices_.in_error () || clone_buffers_.in_error ();
+ return !successful ||
+ vertices_.in_error () ||
+ num_roots_for_space_.in_error ();
}
const vertex_t& root () const
@@ -226,12 +240,13 @@ struct graph_t
hb_vector_t<unsigned> queue;
hb_vector_t<vertex_t> sorted_graph;
+ if (unlikely (!check_success (sorted_graph.resize (vertices_.length)))) return;
hb_vector_t<unsigned> id_map;
if (unlikely (!check_success (id_map.resize (vertices_.length)))) return;
hb_vector_t<unsigned> removed_edges;
if (unlikely (!check_success (removed_edges.resize (vertices_.length)))) return;
- update_incoming_edge_count ();
+ update_parents ();
queue.push (root_idx ());
int new_id = vertices_.length - 1;
@@ -242,12 +257,12 @@ struct graph_t
queue.remove (0);
vertex_t& next = vertices_[next_id];
- sorted_graph.push (next);
+ sorted_graph[new_id] = next;
id_map[next_id] = new_id--;
for (const auto& link : next.obj.links) {
removed_edges[link.objidx]++;
- if (!(vertices_[link.objidx].incoming_edges - removed_edges[link.objidx]))
+ if (!(vertices_[link.objidx].incoming_edges () - removed_edges[link.objidx]))
queue.push (link.objidx);
}
}
@@ -255,14 +270,11 @@ struct graph_t
check_success (!queue.in_error ());
check_success (!sorted_graph.in_error ());
if (!check_success (new_id == -1))
- DEBUG_MSG (SUBSET_REPACK, nullptr, "Graph is not fully connected.");
-
- remap_obj_indices (id_map, &sorted_graph);
+ print_orphaned_nodes ();
- sorted_graph.as_array ().reverse ();
+ remap_all_obj_indices (id_map, &sorted_graph);
- vertices_.fini_deep ();
- vertices_ = sorted_graph;
+ hb_swap (vertices_, sorted_graph);
sorted_graph.fini_deep ();
}
@@ -283,12 +295,13 @@ struct graph_t
hb_priority_queue_t queue;
hb_vector_t<vertex_t> sorted_graph;
+ if (unlikely (!check_success (sorted_graph.resize (vertices_.length)))) return;
hb_vector_t<unsigned> id_map;
if (unlikely (!check_success (id_map.resize (vertices_.length)))) return;
hb_vector_t<unsigned> removed_edges;
if (unlikely (!check_success (removed_edges.resize (vertices_.length)))) return;
- update_incoming_edge_count ();
+ update_parents ();
queue.insert (root ().modified_distance (0), root_idx ());
int new_id = root_idx ();
@@ -298,12 +311,12 @@ struct graph_t
unsigned next_id = queue.pop_minimum().second;
vertex_t& next = vertices_[next_id];
- sorted_graph.push (next);
+ sorted_graph[new_id] = next;
id_map[next_id] = new_id--;
for (const auto& link : next.obj.links) {
removed_edges[link.objidx]++;
- if (!(vertices_[link.objidx].incoming_edges - removed_edges[link.objidx]))
+ if (!(vertices_[link.objidx].incoming_edges () - removed_edges[link.objidx]))
// Add the order that the links were encountered to the priority.
// This ensures that ties between priorities objects are broken in a consistent
// way. More specifically this is set up so that if a set of objects have the same
@@ -317,66 +330,264 @@ struct graph_t
check_success (!queue.in_error ());
check_success (!sorted_graph.in_error ());
if (!check_success (new_id == -1))
- DEBUG_MSG (SUBSET_REPACK, nullptr, "Graph is not fully connected.");
-
- remap_obj_indices (id_map, &sorted_graph);
+ print_orphaned_nodes ();
- sorted_graph.as_array ().reverse ();
+ remap_all_obj_indices (id_map, &sorted_graph);
- vertices_.fini_deep ();
- vertices_ = sorted_graph;
+ hb_swap (vertices_, sorted_graph);
sorted_graph.fini_deep ();
}
/*
- * Creates a copy of child and re-assigns the link from
- * parent to the clone. The copy is a shallow copy, objects
- * linked from child are not duplicated.
+ * Assign unique space numbers to each connected subgraph of 32 bit offset(s).
*/
- void duplicate (unsigned parent_idx, unsigned child_idx)
+ bool assign_32bit_spaces ()
{
- DEBUG_MSG (SUBSET_REPACK, nullptr, " Duplicating %d => %d",
- parent_idx, child_idx);
+ unsigned root_index = root_idx ();
+ hb_set_t visited;
+ hb_set_t roots;
+ for (unsigned i = 0; i <= root_index; i++)
+ {
+ for (auto& l : vertices_[i].obj.links)
+ {
+ if (l.width == 4 && !l.is_signed)
+ {
+ roots.add (l.objidx);
+ find_subgraph (l.objidx, visited);
+ }
+ }
+ }
+
+ // Mark everything not in the subgraphs of 32 bit roots as visited.
+ // This prevents 32 bit subgraphs from being connected via nodes not in the 32 bit subgraphs.
+ visited.invert ();
+
+ if (!roots) return false;
+
+ while (roots)
+ {
+ unsigned next = HB_SET_VALUE_INVALID;
+ if (!roots.next (&next)) break;
+
+ hb_set_t connected_roots;
+ find_connected_nodes (next, roots, visited, connected_roots);
+ isolate_subgraph (connected_roots);
+
+ unsigned next_space = this->next_space ();
+ num_roots_for_space_.push (0);
+ for (unsigned root : connected_roots)
+ {
+ DEBUG_MSG (SUBSET_REPACK, nullptr, "Subgraph %u gets space %u", root, next_space);
+ vertices_[root].space = next_space;
+ num_roots_for_space_[next_space] = num_roots_for_space_[next_space] + 1;
+ distance_invalid = true;
+ positions_invalid = true;
+ }
+
+ // TODO(grieger): special case for GSUB/GPOS use extension promotions to move 16 bit space
+ // into the 32 bit space as needed, instead of using isolation.
+ }
+
+ return true;
+ }
+
+ /*
+ * Isolates the subgraph of nodes reachable from root. Any links to nodes in the subgraph
+ * that originate from outside of the subgraph will be removed by duplicating the linked to
+ * object.
+ *
+ * Indices stored in roots will be updated if any of the roots are duplicated to new indices.
+ */
+ bool isolate_subgraph (hb_set_t& roots)
+ {
+ update_parents ();
+ hb_hashmap_t<unsigned, unsigned> subgraph;
+
+ // incoming edges to root_idx should be all 32 bit in length so we don't need to de-dup these
+ // set the subgraph incoming edge count to match all of root_idx's incoming edges
+ hb_set_t parents;
+ for (unsigned root_idx : roots)
+ {
+ subgraph.set (root_idx, wide_parents (root_idx, parents));
+ find_subgraph (root_idx, subgraph);
+ }
+
+ unsigned original_root_idx = root_idx ();
+ hb_hashmap_t<unsigned, unsigned> index_map;
+ bool made_changes = false;
+ for (auto entry : subgraph.iter ())
+ {
+ const auto& node = vertices_[entry.first];
+ unsigned subgraph_incoming_edges = entry.second;
+
+ if (subgraph_incoming_edges < node.incoming_edges ())
+ {
+ // Only de-dup objects with incoming links from outside the subgraph.
+ made_changes = true;
+ duplicate_subgraph (entry.first, index_map);
+ }
+ }
+
+ if (!made_changes)
+ return false;
+ if (original_root_idx != root_idx ()
+ && parents.has (original_root_idx))
+ {
+ // If the root idx has changed since parents was determined, update root idx in parents
+ parents.add (root_idx ());
+ parents.del (original_root_idx);
+ }
+
+ auto new_subgraph =
+ + subgraph.keys ()
+ | hb_map([&] (unsigned node_idx) {
+ if (index_map.has (node_idx)) return index_map[node_idx];
+ return node_idx;
+ })
+ ;
+
+ remap_obj_indices (index_map, new_subgraph);
+ remap_obj_indices (index_map, parents.iter (), true);
+
+ // Update roots set with new indices as needed.
+ unsigned next = HB_SET_VALUE_INVALID;
+ while (roots.next (&next))
+ {
+ if (index_map.has (next))
+ {
+ roots.del (next);
+ roots.add (index_map[next]);
+ }
+ }
+
+ return true;
+ }
+
+ void find_subgraph (unsigned node_idx, hb_hashmap_t<unsigned, unsigned>& subgraph)
+ {
+ for (const auto& link : vertices_[node_idx].obj.links)
+ {
+ if (subgraph.has (link.objidx))
+ {
+ subgraph.set (link.objidx, subgraph[link.objidx] + 1);
+ continue;
+ }
+ subgraph.set (link.objidx, 1);
+ find_subgraph (link.objidx, subgraph);
+ }
+ }
+
+ void find_subgraph (unsigned node_idx, hb_set_t& subgraph)
+ {
+ if (subgraph.has (node_idx)) return;
+ subgraph.add (node_idx);
+ for (const auto& link : vertices_[node_idx].obj.links)
+ find_subgraph (link.objidx, subgraph);
+ }
+
+ /*
+ * duplicates all nodes in the subgraph reachable from node_idx. Does not re-assign
+ * links. index_map is updated with mappings from old id to new id. If a duplication has already
+ * been performed for a given index, then it will be skipped.
+ */
+ void duplicate_subgraph (unsigned node_idx, hb_hashmap_t<unsigned, unsigned>& index_map)
+ {
+ if (index_map.has (node_idx))
+ return;
+
+ index_map.set (node_idx, duplicate (node_idx));
+ for (const auto& l : object (node_idx).links) {
+ duplicate_subgraph (l.objidx, index_map);
+ }
+ }
+
+ /*
+ * Creates a copy of node_idx and returns it's new index.
+ */
+ unsigned duplicate (unsigned node_idx)
+ {
positions_invalid = true;
+ distance_invalid = true;
auto* clone = vertices_.push ();
- auto& child = vertices_[child_idx];
- clone_buffer_t* buffer = clone_buffers_.push ();
- if (vertices_.in_error ()
- || clone_buffers_.in_error ()
- || !check_success (buffer->copy (child.obj))) {
- return;
+ auto& child = vertices_[node_idx];
+ if (vertices_.in_error ()) {
+ return -1;
}
- clone->obj.head = buffer->head;
- clone->obj.tail = buffer->tail;
+ clone->obj.head = child.obj.head;
+ clone->obj.tail = child.obj.tail;
clone->distance = child.distance;
+ clone->space = child.space;
+ clone->parents.reset ();
+ unsigned clone_idx = vertices_.length - 2;
for (const auto& l : child.obj.links)
+ {
clone->obj.links.push (l);
+ vertices_[l.objidx].parents.push (clone_idx);
+ }
check_success (!clone->obj.links.in_error ());
+ // The last object is the root of the graph, so swap back the root to the end.
+ // The root's obj idx does change, however since it's root nothing else refers to it.
+ // all other obj idx's will be unaffected.
+ vertex_t root = vertices_[vertices_.length - 2];
+ vertices_[clone_idx] = *clone;
+ vertices_[vertices_.length - 1] = root;
+
+ // Since the root moved, update the parents arrays of all children on the root.
+ for (const auto& l : root.obj.links)
+ vertices_[l.objidx].remap_parent (root_idx () - 1, root_idx ());
+
+ return clone_idx;
+ }
+
+ /*
+ * Creates a copy of child and re-assigns the link from
+ * parent to the clone. The copy is a shallow copy, objects
+ * linked from child are not duplicated.
+ */
+ bool duplicate (unsigned parent_idx, unsigned child_idx)
+ {
+ update_parents ();
+
+ unsigned links_to_child = 0;
+ for (const auto& l : vertices_[parent_idx].obj.links)
+ {
+ if (l.objidx == child_idx) links_to_child++;
+ }
+
+ if (vertices_[child_idx].incoming_edges () <= links_to_child)
+ {
+ // Can't duplicate this node, doing so would orphan the original one as all remaining links
+ // to child are from parent.
+ DEBUG_MSG (SUBSET_REPACK, nullptr, " Not duplicating %d => %d",
+ parent_idx, child_idx);
+ return false;
+ }
+
+ DEBUG_MSG (SUBSET_REPACK, nullptr, " Duplicating %d => %d",
+ parent_idx, child_idx);
+
+ unsigned clone_idx = duplicate (child_idx);
+ if (clone_idx == (unsigned) -1) return false;
+ // duplicate shifts the root node idx, so if parent_idx was root update it.
+ if (parent_idx == clone_idx) parent_idx++;
+
auto& parent = vertices_[parent_idx];
- unsigned clone_idx = vertices_.length - 2;
for (unsigned i = 0; i < parent.obj.links.length; i++)
{
auto& l = parent.obj.links[i];
- if (l.objidx == child_idx)
- {
- l.objidx = clone_idx;
- clone->incoming_edges++;
- child.incoming_edges--;
- }
+ if (l.objidx != child_idx)
+ continue;
+
+ reassign_link (l, parent_idx, clone_idx);
}
- // The last object is the root of the graph, so swap back the root to the end.
- // The root's obj idx does change, however since it's root nothing else refers to it.
- // all other obj idx's will be unaffected.
- vertex_t root = vertices_[vertices_.length - 2];
- vertices_[vertices_.length - 2] = *clone;
- vertices_[vertices_.length - 1] = root;
+ return true;
}
/*
@@ -414,7 +625,7 @@ struct graph_t
overflow_record_t r;
r.parent = parent_idx;
- r.link = &link;
+ r.child = link.objidx;
overflows->push (r);
}
}
@@ -423,48 +634,134 @@ struct graph_t
return overflows->length;
}
+ void print_orphaned_nodes ()
+ {
+ if (!DEBUG_ENABLED(SUBSET_REPACK)) return;
+
+ DEBUG_MSG (SUBSET_REPACK, nullptr, "Graph is not fully connected.");
+ parents_invalid = true;
+ update_parents();
+
+ for (unsigned i = 0; i < root_idx (); i++)
+ {
+ const auto& v = vertices_[i];
+ if (!v.parents)
+ DEBUG_MSG (SUBSET_REPACK, nullptr, "Node %u is orphaned.", i);
+ }
+ }
+
void print_overflows (const hb_vector_t<overflow_record_t>& overflows)
{
if (!DEBUG_ENABLED(SUBSET_REPACK)) return;
- update_incoming_edge_count ();
+ update_parents ();
for (const auto& o : overflows)
{
- const auto& child = vertices_[o.link->objidx];
- DEBUG_MSG (SUBSET_REPACK, nullptr, " overflow from %d => %d (%d incoming , %d outgoing)",
+ const auto& parent = vertices_[o.parent];
+ const auto& child = vertices_[o.child];
+ DEBUG_MSG (SUBSET_REPACK, nullptr,
+ " overflow from "
+ "%4d (%4d in, %4d out, space %2d) => "
+ "%4d (%4d in, %4d out, space %2d)",
o.parent,
- o.link->objidx,
- child.incoming_edges,
- child.obj.links.length);
+ parent.incoming_edges (),
+ parent.obj.links.length,
+ space_for (o.parent),
+ o.child,
+ child.incoming_edges (),
+ child.obj.links.length,
+ space_for (o.child));
}
}
+ unsigned num_roots_for_space (unsigned space) const
+ {
+ return num_roots_for_space_[space];
+ }
+
+ unsigned next_space () const
+ {
+ return num_roots_for_space_.length;
+ }
+
+ void move_to_new_space (unsigned index)
+ {
+ auto& node = vertices_[index];
+ num_roots_for_space_.push (1);
+ num_roots_for_space_[node.space] = num_roots_for_space_[node.space] - 1;
+ node.space = num_roots_for_space_.length - 1;
+ }
+
+ unsigned space_for (unsigned index, unsigned* root = nullptr) const
+ {
+ const auto& node = vertices_[index];
+ if (node.space)
+ {
+ if (root != nullptr)
+ *root = index;
+ return node.space;
+ }
+
+ if (!node.parents)
+ {
+ if (root)
+ *root = index;
+ return 0;
+ }
+
+ return space_for (node.parents[0], root);
+ }
+
void err_other_error () { this->successful = false; }
private:
+ /*
+ * Returns the numbers of incoming edges that are 32bits wide.
+ */
+ unsigned wide_parents (unsigned node_idx, hb_set_t& parents) const
+ {
+ unsigned count = 0;
+ hb_set_t visited;
+ for (unsigned p : vertices_[node_idx].parents)
+ {
+ if (visited.has (p)) continue;
+ visited.add (p);
+
+ for (const auto& l : vertices_[p].obj.links)
+ {
+ if (l.objidx == node_idx && l.width == 4 && !l.is_signed)
+ {
+ count++;
+ parents.add (p);
+ }
+ }
+ }
+ return count;
+ }
+
bool check_success (bool success)
{ return this->successful && (success || (err_other_error (), false)); }
/*
* Creates a map from objid to # of incoming edges.
*/
- void update_incoming_edge_count ()
+ void update_parents ()
{
- if (!edge_count_invalid) return;
+ if (!parents_invalid) return;
for (unsigned i = 0; i < vertices_.length; i++)
- vertices_[i].incoming_edges = 0;
+ vertices_[i].parents.reset ();
- for (const vertex_t& v : vertices_)
+ for (unsigned p = 0; p < vertices_.length; p++)
{
- for (auto& l : v.obj.links)
+ for (auto& l : vertices_[p].obj.links)
{
- vertices_[l.objidx].incoming_edges++;
+ vertices_[l.objidx].parents.push (p);
}
}
- edge_count_invalid = false;
+ parents_invalid = false;
}
/*
@@ -515,23 +812,25 @@ struct graph_t
hb_priority_queue_t queue;
queue.insert (0, vertices_.length - 1);
- hb_set_t visited;
+ hb_vector_t<bool> visited;
+ visited.resize (vertices_.length);
while (!queue.in_error () && !queue.is_empty ())
{
unsigned next_idx = queue.pop_minimum ().second;
- if (visited.has (next_idx)) continue;
+ if (visited[next_idx]) continue;
const auto& next = vertices_[next_idx];
int64_t next_distance = vertices_[next_idx].distance;
- visited.add (next_idx);
+ visited[next_idx] = true;
for (const auto& link : next.obj.links)
{
- if (visited.has (link.objidx)) continue;
+ if (visited[link.objidx]) continue;
const auto& child = vertices_[link.objidx].obj;
- int64_t child_weight = child.tail - child.head +
- ((int64_t) 1 << (link.width * 8));
+ unsigned link_width = link.width ? link.width : 4; // treat virtual offsets as 32 bits wide
+ int64_t child_weight = (child.tail - child.head) +
+ ((int64_t) 1 << (link_width * 8)) * (vertices_[link.objidx].space + 1);
int64_t child_distance = next_distance + child_weight;
if (child_distance < vertices_[link.objidx].distance)
@@ -545,7 +844,7 @@ struct graph_t
check_success (!queue.in_error ());
if (!check_success (queue.is_empty ()))
{
- DEBUG_MSG (SUBSET_REPACK, nullptr, "Graph is not fully connected.");
+ print_orphaned_nodes ();
return;
}
@@ -576,6 +875,10 @@ struct graph_t
bool is_valid_offset (int64_t offset,
const hb_serialize_context_t::object_t::link_t& link) const
{
+ if (unlikely (!link.width))
+ // Virtual links can't overflow.
+ return link.is_signed || offset >= 0;
+
if (link.is_signed)
{
if (link.width == 4)
@@ -595,13 +898,50 @@ struct graph_t
}
/*
+ * Updates a link in the graph to point to a different object. Corrects the
+ * parents vector on the previous and new child nodes.
+ */
+ void reassign_link (hb_serialize_context_t::object_t::link_t& link,
+ unsigned parent_idx,
+ unsigned new_idx)
+ {
+ unsigned old_idx = link.objidx;
+ link.objidx = new_idx;
+ vertices_[old_idx].remove_parent (parent_idx);
+ vertices_[new_idx].parents.push (parent_idx);
+ }
+
+ /*
+ * Updates all objidx's in all links using the provided mapping. Corrects incoming edge counts.
+ */
+ template<typename Iterator, hb_requires (hb_is_iterator (Iterator))>
+ void remap_obj_indices (const hb_hashmap_t<unsigned, unsigned>& id_map,
+ Iterator subgraph,
+ bool only_wide = false)
+ {
+ if (!id_map) return;
+ for (unsigned i : subgraph)
+ {
+ for (unsigned j = 0; j < vertices_[i].obj.links.length; j++)
+ {
+ auto& link = vertices_[i].obj.links[j];
+ if (!id_map.has (link.objidx)) continue;
+ if (only_wide && !(link.width == 4 && !link.is_signed)) continue;
+
+ reassign_link (link, i, id_map[link.objidx]);
+ }
+ }
+ }
+
+ /*
* Updates all objidx's in all links using the provided mapping.
*/
- void remap_obj_indices (const hb_vector_t<unsigned>& id_map,
- hb_vector_t<vertex_t>* sorted_graph) const
+ void remap_all_obj_indices (const hb_vector_t<unsigned>& id_map,
+ hb_vector_t<vertex_t>* sorted_graph) const
{
for (unsigned i = 0; i < sorted_graph->length; i++)
{
+ (*sorted_graph)[i].remap_parents (id_map);
for (unsigned j = 0; j < (*sorted_graph)[i].obj.links.length; j++)
{
auto& link = (*sorted_graph)[i].obj.links[j];
@@ -631,6 +971,9 @@ struct graph_t
{
switch (link.width)
{
+ case 0:
+ // Virtual links aren't serialized.
+ return;
case 4:
if (link.is_signed)
{
@@ -656,17 +999,120 @@ struct graph_t
}
}
+ /*
+ * Finds all nodes in targets that are reachable from start_idx, nodes in visited will be skipped.
+ * For this search the graph is treated as being undirected.
+ *
+ * Connected targets will be added to connected and removed from targets. All visited nodes
+ * will be added to visited.
+ */
+ void find_connected_nodes (unsigned start_idx,
+ hb_set_t& targets,
+ hb_set_t& visited,
+ hb_set_t& connected)
+ {
+ if (visited.has (start_idx)) return;
+ visited.add (start_idx);
+
+ if (targets.has (start_idx))
+ {
+ targets.del (start_idx);
+ connected.add (start_idx);
+ }
+
+ const auto& v = vertices_[start_idx];
+
+ // Graph is treated as undirected so search children and parents of start_idx
+ for (const auto& l : v.obj.links)
+ find_connected_nodes (l.objidx, targets, visited, connected);
+
+ for (unsigned p : v.parents)
+ find_connected_nodes (p, targets, visited, connected);
+ }
+
public:
// TODO(garretrieger): make private, will need to move most of offset overflow code into graph.
hb_vector_t<vertex_t> vertices_;
private:
- hb_vector_t<clone_buffer_t> clone_buffers_;
- bool edge_count_invalid;
+ bool parents_invalid;
bool distance_invalid;
bool positions_invalid;
bool successful;
+ hb_vector_t<unsigned> num_roots_for_space_;
};
+static bool _try_isolating_subgraphs (const hb_vector_t<graph_t::overflow_record_t>& overflows,
+ graph_t& sorted_graph)
+{
+ for (int i = overflows.length - 1; i >= 0; i--)
+ {
+ const graph_t::overflow_record_t& r = overflows[i];
+ unsigned root = 0;
+ unsigned space = sorted_graph.space_for (r.parent, &root);
+ if (!space) continue;
+ if (sorted_graph.num_roots_for_space (space) <= 1) continue;
+
+ DEBUG_MSG (SUBSET_REPACK, nullptr, "Overflow in space %d moving subgraph %d to space %d.",
+ space,
+ root,
+ sorted_graph.next_space ());
+
+ hb_set_t roots;
+ roots.add (root);
+ sorted_graph.isolate_subgraph (roots);
+ for (unsigned new_root : roots)
+ sorted_graph.move_to_new_space (new_root);
+ return true;
+ }
+ return false;
+}
+
+static bool _process_overflows (const hb_vector_t<graph_t::overflow_record_t>& overflows,
+ hb_set_t& priority_bumped_parents,
+ graph_t& sorted_graph)
+{
+ bool resolution_attempted = false;
+
+ // Try resolving the furthest overflows first.
+ for (int i = overflows.length - 1; i >= 0; i--)
+ {
+ const graph_t::overflow_record_t& r = overflows[i];
+ const auto& child = sorted_graph.vertices_[r.child];
+ if (child.is_shared ())
+ {
+ // The child object is shared, we may be able to eliminate the overflow
+ // by duplicating it.
+ if (!sorted_graph.duplicate (r.parent, r.child)) continue;
+ return true;
+ }
+
+ if (child.is_leaf () && !priority_bumped_parents.has (r.parent))
+ {
+ // This object is too far from it's parent, attempt to move it closer.
+ //
+ // TODO(garretrieger): initially limiting this to leaf's since they can be
+ // moved closer with fewer consequences. However, this can
+ // likely can be used for non-leafs as well.
+ // TODO(garretrieger): add a maximum priority, don't try to raise past this.
+ // TODO(garretrieger): also try lowering priority of the parent. Make it
+ // get placed further up in the ordering, closer to it's children.
+ // this is probably preferable if the total size of the parent object
+ // is < then the total size of the children (and the parent can be moved).
+ // Since in that case moving the parent will cause a smaller increase in
+ // the length of other offsets.
+ sorted_graph.raise_childrens_priority (r.parent);
+ priority_bumped_parents.add (r.parent);
+ resolution_attempted = true;
+ continue;
+ }
+
+ // TODO(garretrieger): add additional offset resolution strategies
+ // - Promotion to extension lookups.
+ // - Table splitting.
+ }
+
+ return resolution_attempted;
+}
/*
* Attempts to modify the topological sorting of the provided object graph to
@@ -677,10 +1123,15 @@ struct graph_t
* If necessary the structure of the graph may be modified in ways that do not
* affect the functionality of the graph. For example shared objects may be
* duplicated.
+ *
+ * For a detailed writeup describing how the algorithm operates see:
+ * docs/repacker.md
*/
inline void
hb_resolve_overflows (const hb_vector_t<hb_serialize_context_t::object_t *>& packed,
- hb_serialize_context_t* c) {
+ hb_tag_t table_tag,
+ hb_serialize_context_t* c,
+ unsigned max_rounds = 10) {
// Kahn sort is ~twice as fast as shortest distance sort and works for many fonts
// so try it first to save time.
graph_t sorted_graph (packed);
@@ -693,68 +1144,36 @@ hb_resolve_overflows (const hb_vector_t<hb_serialize_context_t::object_t *>& pac
sorted_graph.sort_shortest_distance ();
+ if ((table_tag == HB_OT_TAG_GPOS
+ || table_tag == HB_OT_TAG_GSUB)
+ && sorted_graph.will_overflow ())
+ {
+ DEBUG_MSG (SUBSET_REPACK, nullptr, "Assigning spaces to 32 bit subgraphs.");
+ if (sorted_graph.assign_32bit_spaces ())
+ sorted_graph.sort_shortest_distance ();
+ }
+
unsigned round = 0;
hb_vector_t<graph_t::overflow_record_t> overflows;
// TODO(garretrieger): select a good limit for max rounds.
while (!sorted_graph.in_error ()
&& sorted_graph.will_overflow (&overflows)
- && round++ < 10) {
- DEBUG_MSG (SUBSET_REPACK, nullptr, "=== Over flow resolution round %d ===", round);
+ && round++ < max_rounds) {
+ DEBUG_MSG (SUBSET_REPACK, nullptr, "=== Overflow resolution round %d ===", round);
sorted_graph.print_overflows (overflows);
- bool resolution_attempted = false;
hb_set_t priority_bumped_parents;
- // Try resolving the furthest overflows first.
- for (int i = overflows.length - 1; i >= 0; i--)
+
+ if (!_try_isolating_subgraphs (overflows, sorted_graph))
{
- const graph_t::overflow_record_t& r = overflows[i];
- const auto& child = sorted_graph.vertices_[r.link->objidx];
- if (child.is_shared ())
+ if (!_process_overflows (overflows, priority_bumped_parents, sorted_graph))
{
- // The child object is shared, we may be able to eliminate the overflow
- // by duplicating it.
- sorted_graph.duplicate (r.parent, r.link->objidx);
- resolution_attempted = true;
-
- // Stop processing overflows for this round so that object order can be
- // updated to account for the newly added object.
+ DEBUG_MSG (SUBSET_REPACK, nullptr, "No resolution available :(");
break;
}
-
- if (child.is_leaf () && !priority_bumped_parents.has (r.parent))
- {
- // This object is too far from it's parent, attempt to move it closer.
- //
- // TODO(garretrieger): initially limiting this to leaf's since they can be
- // moved closer with fewer consequences. However, this can
- // likely can be used for non-leafs as well.
- // TODO(garretrieger): add a maximum priority, don't try to raise past this.
- // TODO(garretrieger): also try lowering priority of the parent. Make it
- // get placed further up in the ordering, closer to it's children.
- // this is probably preferable if the total size of the parent object
- // is < then the total size of the children (and the parent can be moved).
- // Since in that case moving the parent will cause a smaller increase in
- // the length of other offsets.
- sorted_graph.raise_childrens_priority (r.parent);
- priority_bumped_parents.add (r.parent);
- resolution_attempted = true;
- continue;
- }
-
- // TODO(garretrieger): add additional offset resolution strategies
- // - Promotion to extension lookups.
- // - Table splitting.
- }
-
- if (resolution_attempted)
- {
- sorted_graph.sort_shortest_distance ();
- continue;
}
- DEBUG_MSG (SUBSET_REPACK, nullptr, "No resolution available :(");
- c->err (HB_SERIALIZE_ERROR_OFFSET_OVERFLOW);
- return;
+ sorted_graph.sort_shortest_distance ();
}
if (sorted_graph.in_error ())
@@ -762,8 +1181,14 @@ hb_resolve_overflows (const hb_vector_t<hb_serialize_context_t::object_t *>& pac
c->err (HB_SERIALIZE_ERROR_OTHER);
return;
}
+
+ if (sorted_graph.will_overflow ())
+ {
+ c->err (HB_SERIALIZE_ERROR_OFFSET_OVERFLOW);
+ DEBUG_MSG (SUBSET_REPACK, nullptr, "Offset overflow resolution failed.");
+ return;
+ }
sorted_graph.serialize (c);
}
-
#endif /* HB_REPACKER_HH */
diff --git a/thirdparty/harfbuzz/src/hb-sanitize.hh b/thirdparty/harfbuzz/src/hb-sanitize.hh
index 56c46015a6..2e536c7a81 100644
--- a/thirdparty/harfbuzz/src/hb-sanitize.hh
+++ b/thirdparty/harfbuzz/src/hb-sanitize.hh
@@ -145,14 +145,14 @@ struct hb_sanitize_context_t :
private:
template <typename T, typename ...Ts> auto
_dispatch (const T &obj, hb_priority<1>, Ts&&... ds) HB_AUTO_RETURN
- ( obj.sanitize (this, hb_forward<Ts> (ds)...) )
+ ( obj.sanitize (this, std::forward<Ts> (ds)...) )
template <typename T, typename ...Ts> auto
_dispatch (const T &obj, hb_priority<0>, Ts&&... ds) HB_AUTO_RETURN
- ( obj.dispatch (this, hb_forward<Ts> (ds)...) )
+ ( obj.dispatch (this, std::forward<Ts> (ds)...) )
public:
template <typename T, typename ...Ts> auto
dispatch (const T &obj, Ts&&... ds) HB_AUTO_RETURN
- ( _dispatch (obj, hb_prioritize, hb_forward<Ts> (ds)...) )
+ ( _dispatch (obj, hb_prioritize, std::forward<Ts> (ds)...) )
void init (hb_blob_t *b)
diff --git a/thirdparty/harfbuzz/src/hb-serialize.hh b/thirdparty/harfbuzz/src/hb-serialize.hh
index 7212d9872a..57689916f6 100644
--- a/thirdparty/harfbuzz/src/hb-serialize.hh
+++ b/thirdparty/harfbuzz/src/hb-serialize.hh
@@ -189,8 +189,8 @@ struct hb_serialize_context_t
{ return check_success (!hb_deref (obj).in_error ()); }
template <typename T1, typename... Ts> bool propagate_error (T1 &&o1, Ts&&... os)
- { return propagate_error (hb_forward<T1> (o1)) &&
- propagate_error (hb_forward<Ts> (os)...); }
+ { return propagate_error (std::forward<T1> (o1)) &&
+ propagate_error (std::forward<Ts> (os)...); }
/* To be called around main operation. */
template <typename Type>
@@ -358,6 +358,35 @@ struct hb_serialize_context_t
assert (packed.tail ()->head == tail);
}
+ // Adds a virtual link from the current object to objidx. A virtual link is not associated with
+ // an actual offset field. They are solely used to enforce ordering constraints between objects.
+ // Adding a virtual link from object a to object b will ensure that object b is always packed after
+ // object a in the final serialized order.
+ //
+ // This is useful in certain situtations where there needs to be a specific ordering in the
+ // final serialization. Such as when platform bugs require certain orderings, or to provide
+ // guidance to the repacker for better offset overflow resolution.
+ void add_virtual_link (objidx_t objidx)
+ {
+ if (unlikely (in_error ())) return;
+
+ if (!objidx)
+ return;
+
+ assert (current);
+
+ auto& link = *current->links.push ();
+ if (current->links.in_error ())
+ err (HB_SERIALIZE_ERROR_OTHER);
+
+ link.width = 0;
+ link.objidx = objidx;
+ link.is_signed = 0;
+ link.whence = 0;
+ link.position = 0;
+ link.bias = 0;
+ }
+
template <typename T>
void add_link (T &ofs, objidx_t objidx,
whence_t whence = Head,
@@ -376,11 +405,22 @@ struct hb_serialize_context_t
err (HB_SERIALIZE_ERROR_OTHER);
link.width = sizeof (T);
- link.is_signed = hb_is_signed (hb_unwrap_type (T));
+ link.objidx = objidx;
+ if (unlikely (!sizeof (T)))
+ {
+ // This link is not associated with an actual offset and exists merely to enforce
+ // an ordering constraint.
+ link.is_signed = 0;
+ link.whence = 0;
+ link.position = 0;
+ link.bias = 0;
+ return;
+ }
+
+ link.is_signed = std::is_signed<hb_unwrap_type (T)>::value;
link.whence = (unsigned) whence;
link.position = (const char *) &ofs - current->head;
link.bias = bias;
- link.objidx = objidx;
}
unsigned to_bias (const void *base) const
@@ -402,6 +442,8 @@ struct hb_serialize_context_t
for (const object_t* parent : ++hb_iter (packed))
for (const object_t::link_t &link : parent->links)
{
+ if (unlikely (!link.width)) continue; // Don't need to resolve virtual offsets
+
const object_t* child = packed[link.objidx];
if (unlikely (!child)) { err (HB_SERIALIZE_ERROR_OTHER); return; }
unsigned offset = 0;
@@ -494,7 +536,7 @@ struct hb_serialize_context_t
template <typename Type, typename ...Ts> auto
_copy (const Type &src, hb_priority<1>, Ts&&... ds) HB_RETURN
- (Type *, src.copy (this, hb_forward<Ts> (ds)...))
+ (Type *, src.copy (this, std::forward<Ts> (ds)...))
template <typename Type> auto
_copy (const Type &src, hb_priority<0>) -> decltype (&(hb_declval<Type> () = src))
@@ -509,16 +551,16 @@ struct hb_serialize_context_t
* instead of memcpy(). */
template <typename Type, typename ...Ts>
Type *copy (const Type &src, Ts&&... ds)
- { return _copy (src, hb_prioritize, hb_forward<Ts> (ds)...); }
+ { return _copy (src, hb_prioritize, std::forward<Ts> (ds)...); }
template <typename Type, typename ...Ts>
Type *copy (const Type *src, Ts&&... ds)
- { return copy (*src, hb_forward<Ts> (ds)...); }
+ { return copy (*src, std::forward<Ts> (ds)...); }
template<typename Iterator,
hb_requires (hb_is_iterator (Iterator)),
typename ...Ts>
void copy_all (Iterator it, Ts&&... ds)
- { for (decltype (*it) _ : it) copy (_, hb_forward<Ts> (ds)...); }
+ { for (decltype (*it) _ : it) copy (_, std::forward<Ts> (ds)...); }
template <typename Type>
hb_serialize_context_t& operator << (const Type &obj) & { embed (obj); return *this; }
@@ -546,10 +588,10 @@ struct hb_serialize_context_t
template <typename Type, typename ...Ts>
Type *extend (Type *obj, Ts&&... ds)
- { return extend_size (obj, obj->get_size (hb_forward<Ts> (ds)...)); }
+ { return extend_size (obj, obj->get_size (std::forward<Ts> (ds)...)); }
template <typename Type, typename ...Ts>
Type *extend (Type &obj, Ts&&... ds)
- { return extend (hb_addressof (obj), hb_forward<Ts> (ds)...); }
+ { return extend (hb_addressof (obj), std::forward<Ts> (ds)...); }
/* Output routines. */
hb_bytes_t copy_bytes () const
diff --git a/thirdparty/harfbuzz/src/hb-set-digest.hh b/thirdparty/harfbuzz/src/hb-set-digest.hh
index 1ef1ba5fb2..7d4979b73b 100644
--- a/thirdparty/harfbuzz/src/hb-set-digest.hh
+++ b/thirdparty/harfbuzz/src/hb-set-digest.hh
@@ -168,15 +168,17 @@ struct hb_set_digest_combiner_t
* There is not much science to this: it's a result of intuition
* and testing.
*/
-typedef hb_set_digest_combiner_t
-<
- hb_set_digest_lowest_bits_t<unsigned long, 4>,
+using hb_set_digest_t =
hb_set_digest_combiner_t
<
- hb_set_digest_lowest_bits_t<unsigned long, 0>,
- hb_set_digest_lowest_bits_t<unsigned long, 9>
+ hb_set_digest_lowest_bits_t<unsigned long, 4>,
+ hb_set_digest_combiner_t
+ <
+ hb_set_digest_lowest_bits_t<unsigned long, 0>,
+ hb_set_digest_lowest_bits_t<unsigned long, 9>
+ >
>
-> hb_set_digest_t;
+;
#endif /* HB_SET_DIGEST_HH */
diff --git a/thirdparty/harfbuzz/src/hb-set.hh b/thirdparty/harfbuzz/src/hb-set.hh
index 437e234361..8841427189 100644
--- a/thirdparty/harfbuzz/src/hb-set.hh
+++ b/thirdparty/harfbuzz/src/hb-set.hh
@@ -42,9 +42,22 @@ struct hb_sparseset_t
~hb_sparseset_t () { fini (); }
hb_sparseset_t (const hb_sparseset_t& other) : hb_sparseset_t () { set (other); }
- void operator= (const hb_sparseset_t& other) { set (other); }
- // TODO Add move construtor/assign
- // TODO Add constructor for Iterator
+ hb_sparseset_t (hb_sparseset_t&& other) : hb_sparseset_t () { s = std::move (other.s); }
+ hb_sparseset_t& operator= (const hb_sparseset_t& other) { set (other); return *this; }
+ hb_sparseset_t& operator= (hb_sparseset_t&& other) { hb_swap (*this, other); return *this; }
+ friend void swap (hb_sparseset_t& a, hb_sparseset_t& b) { hb_swap (a.s, b.s); }
+
+ hb_sparseset_t (std::initializer_list<hb_codepoint_t> lst) : hb_sparseset_t ()
+ {
+ for (auto&& item : lst)
+ add (item);
+ }
+ template <typename Iterable,
+ hb_requires (hb_is_iterable (Iterable))>
+ hb_sparseset_t (const Iterable &o) : hb_sparseset_t ()
+ {
+ hb_copy (o, *this);
+ }
void init_shallow () { s.init (); }
void init ()
@@ -140,7 +153,18 @@ struct hb_sparseset_t
operator iter_t () const { return iter (); }
};
-struct hb_set_t : hb_sparseset_t<hb_bit_set_invertible_t> {};
+struct hb_set_t : hb_sparseset_t<hb_bit_set_invertible_t>
+{
+ hb_set_t () = default;
+ ~hb_set_t () = default;
+ hb_set_t (hb_set_t& o) = default;
+ hb_set_t& operator= (const hb_set_t& other) = default;
+ hb_set_t& operator= (hb_set_t&& other) = default;
+ hb_set_t (std::initializer_list<hb_codepoint_t> lst) : hb_sparseset_t<hb_bit_set_invertible_t> (lst) {}
+ template <typename Iterable,
+ hb_requires (hb_is_iterable (Iterable))>
+ hb_set_t (const Iterable &o) : hb_sparseset_t<hb_bit_set_invertible_t> (o) {}
+};
static_assert (hb_set_t::INVALID == HB_SET_VALUE_INVALID, "");
diff --git a/thirdparty/harfbuzz/src/hb-style.cc b/thirdparty/harfbuzz/src/hb-style.cc
index dfb1017c88..f1b44cea53 100644
--- a/thirdparty/harfbuzz/src/hb-style.cc
+++ b/thirdparty/harfbuzz/src/hb-style.cc
@@ -113,7 +113,9 @@ hb_style_get_value (hb_font_t *font, hb_style_tag_t style_tag)
case HB_STYLE_TAG_WIDTH:
return face->table.OS2->has_data ()
? face->table.OS2->get_width ()
- : (face->table.head->is_condensed () ? 75 : 100);
+ : (face->table.head->is_condensed () ? 75 :
+ face->table.head->is_expanded () ? 125 :
+ 100);
case HB_STYLE_TAG_WEIGHT:
return face->table.OS2->has_data ()
? face->table.OS2->usWeightClass
diff --git a/thirdparty/harfbuzz/src/hb-subset-input.hh b/thirdparty/harfbuzz/src/hb-subset-input.hh
index a3e28b0562..07c0e22676 100644
--- a/thirdparty/harfbuzz/src/hb-subset-input.hh
+++ b/thirdparty/harfbuzz/src/hb-subset-input.hh
@@ -42,17 +42,19 @@ struct hb_subset_input_t
{
hb_object_header_t header;
+ struct sets_t {
+ hb_set_t *glyphs;
+ hb_set_t *unicodes;
+ hb_set_t *no_subset_tables;
+ hb_set_t *drop_tables;
+ hb_set_t *name_ids;
+ hb_set_t *name_languages;
+ hb_set_t *layout_features;
+ };
+
union {
- struct {
- hb_set_t *glyphs;
- hb_set_t *unicodes;
- hb_set_t *no_subset_tables;
- hb_set_t *drop_tables;
- hb_set_t *name_ids;
- hb_set_t *name_languages;
- hb_set_t *layout_features;
- } sets;
- hb_set_t* set_ptrs[sizeof (sets) / sizeof (hb_set_t*)];
+ sets_t sets;
+ hb_set_t* set_ptrs[sizeof (sets_t) / sizeof (hb_set_t*)];
};
unsigned flags;
diff --git a/thirdparty/harfbuzz/src/hb-subset-plan.cc b/thirdparty/harfbuzz/src/hb-subset-plan.cc
index 677df35fad..1e195ff660 100644
--- a/thirdparty/harfbuzz/src/hb-subset-plan.cc
+++ b/thirdparty/harfbuzz/src/hb-subset-plan.cc
@@ -38,6 +38,7 @@
#include "hb-ot-color-colrv1-closure.hh"
#include "hb-ot-var-fvar-table.hh"
#include "hb-ot-stat-table.hh"
+#include "hb-ot-math-table.hh"
typedef hb_hashmap_t<unsigned, hb_set_t *, (unsigned)-1, nullptr> script_langsys_map;
@@ -221,6 +222,50 @@ _cmap_closure (hb_face_t *face,
cmap.fini ();
}
+static void _colr_closure (hb_face_t *face,
+ hb_map_t *layers_map,
+ hb_map_t *palettes_map,
+ hb_set_t *glyphs_colred)
+{
+ OT::COLR::accelerator_t colr;
+ colr.init (face);
+ if (!colr.is_valid ()) return;
+
+ unsigned iteration_count = 0;
+ hb_set_t palette_indices, layer_indices;
+ unsigned glyphs_num;
+ {
+ glyphs_num = glyphs_colred->get_population ();
+
+ // Collect all glyphs referenced by COLRv0
+ hb_set_t glyphset_colrv0;
+ for (hb_codepoint_t gid : glyphs_colred->iter ())
+ colr.closure_glyphs (gid, &glyphset_colrv0);
+
+ glyphs_colred->union_ (glyphset_colrv0);
+
+ //closure for COLRv1
+ colr.closure_forV1 (glyphs_colred, &layer_indices, &palette_indices);
+ } while (iteration_count++ <= HB_CLOSURE_MAX_STAGES &&
+ glyphs_num != glyphs_colred->get_population ());
+
+ colr.closure_V0palette_indices (glyphs_colred, &palette_indices);
+ _remap_indexes (&layer_indices, layers_map);
+ _remap_palette_indexes (&palette_indices, palettes_map);
+ colr.fini ();
+}
+
+static inline void
+_math_closure (hb_face_t *face,
+ hb_set_t *glyphset)
+{
+ hb_blob_ptr_t<OT::MATH> math = hb_sanitize_context_t ().reference_table<OT::MATH> (face);
+ if (math->has_data ())
+ math->closure_glyphs (glyphset);
+ math.destroy ();
+}
+
+
static inline void
_remove_invalid_gids (hb_set_t *glyphs,
unsigned int num_glyphs)
@@ -301,12 +346,10 @@ _populate_gids_to_retain (hb_subset_plan_t* plan,
#ifndef HB_NO_SUBSET_CFF
OT::cff1::accelerator_t cff;
#endif
- OT::COLR::accelerator_t colr;
glyf.init (plan->source);
#ifndef HB_NO_SUBSET_CFF
cff.init (plan->source);
#endif
- colr.init (plan->source);
plan->_glyphset_gsub->add (0); // Not-def
@@ -334,30 +377,17 @@ _populate_gids_to_retain (hb_subset_plan_t* plan,
#endif
_remove_invalid_gids (plan->_glyphset_gsub, plan->source->get_num_glyphs ());
- // Collect all glyphs referenced by COLRv0
- hb_set_t* cur_glyphset = plan->_glyphset_gsub;
- hb_set_t glyphset_colrv0;
- if (colr.is_valid ())
- {
- glyphset_colrv0.union_ (*cur_glyphset);
- for (hb_codepoint_t gid : cur_glyphset->iter ())
- colr.closure_glyphs (gid, &glyphset_colrv0);
- cur_glyphset = &glyphset_colrv0;
- }
+ hb_set_set (plan->_glyphset_mathed, plan->_glyphset_gsub);
+ _math_closure (plan->source, plan->_glyphset_mathed);
+ _remove_invalid_gids (plan->_glyphset_mathed, plan->source->get_num_glyphs ());
- hb_set_t palette_indices;
- colr.closure_V0palette_indices (cur_glyphset, &palette_indices);
-
- hb_set_t layer_indices;
- colr.closure_forV1 (cur_glyphset, &layer_indices, &palette_indices);
- _remap_indexes (&layer_indices, plan->colrv1_layers);
- _remap_palette_indexes (&palette_indices, plan->colr_palettes);
- colr.fini ();
- _remove_invalid_gids (cur_glyphset, plan->source->get_num_glyphs ());
+ hb_set_t cur_glyphset = *plan->_glyphset_mathed;
+ _colr_closure (plan->source, plan->colrv1_layers, plan->colr_palettes, &cur_glyphset);
+ _remove_invalid_gids (&cur_glyphset, plan->source->get_num_glyphs ());
// Populate a full set of glyphs to retain by adding all referenced
// composite glyphs.
- for (hb_codepoint_t gid : cur_glyphset->iter ())
+ for (hb_codepoint_t gid : cur_glyphset.iter ())
{
glyf.add_gid_and_children (gid, plan->_glyphset);
#ifndef HB_NO_SUBSET_CFF
@@ -468,6 +498,7 @@ hb_subset_plan_create (hb_face_t *face,
plan->_glyphset = hb_set_create ();
plan->_glyphset_gsub = hb_set_create ();
+ plan->_glyphset_mathed = hb_set_create ();
plan->codepoint_to_glyph = hb_map_create ();
plan->glyph_map = hb_map_create ();
plan->reverse_glyph_map = hb_map_create ();
@@ -535,6 +566,7 @@ hb_subset_plan_destroy (hb_subset_plan_t *plan)
hb_map_destroy (plan->reverse_glyph_map);
hb_set_destroy (plan->_glyphset);
hb_set_destroy (plan->_glyphset_gsub);
+ hb_set_destroy (plan->_glyphset_mathed);
hb_map_destroy (plan->gsub_lookups);
hb_map_destroy (plan->gpos_lookups);
hb_map_destroy (plan->gsub_features);
diff --git a/thirdparty/harfbuzz/src/hb-subset-plan.hh b/thirdparty/harfbuzz/src/hb-subset-plan.hh
index 92a4e27ccc..c30feeb42f 100644
--- a/thirdparty/harfbuzz/src/hb-subset-plan.hh
+++ b/thirdparty/harfbuzz/src/hb-subset-plan.hh
@@ -77,6 +77,7 @@ struct hb_subset_plan_t
unsigned int _num_output_glyphs;
hb_set_t *_glyphset;
hb_set_t *_glyphset_gsub;
+ hb_set_t *_glyphset_mathed;
//active lookups we'd like to retain
hb_map_t *gsub_lookups;
diff --git a/thirdparty/harfbuzz/src/hb-subset.cc b/thirdparty/harfbuzz/src/hb-subset.cc
index 34f92e0d81..048bdf1888 100644
--- a/thirdparty/harfbuzz/src/hb-subset.cc
+++ b/thirdparty/harfbuzz/src/hb-subset.cc
@@ -52,6 +52,7 @@
#include "hb-ot-layout-gpos-table.hh"
#include "hb-ot-var-gvar-table.hh"
#include "hb-ot-var-hvar-table.hh"
+#include "hb-ot-math-table.hh"
#include "hb-repacker.hh"
/**
@@ -109,7 +110,7 @@ _repack (hb_tag_t tag, const hb_serialize_context_t& c)
return nullptr;
hb_serialize_context_t repacked ((void *) buf, buf_size);
- hb_resolve_overflows (c.object_graph (), &repacked);
+ hb_resolve_overflows (c.object_graph (), tag, &repacked);
if (unlikely (repacked.in_error ()))
// TODO(garretrieger): refactor so we can share the resize/retry logic with the subset
@@ -305,6 +306,7 @@ _subset_table (hb_subset_plan_t *plan, hb_tag_t tag)
case HB_OT_TAG_CPAL: return _subset<const OT::CPAL> (plan);
case HB_OT_TAG_CBLC: return _subset<const OT::CBLC> (plan);
case HB_OT_TAG_CBDT: return true; /* skip CBDT, handled by CBLC */
+ case HB_OT_TAG_MATH: return _subset<const OT::MATH> (plan);
#ifndef HB_NO_SUBSET_CFF
case HB_OT_TAG_cff1: return _subset<const OT::cff1> (plan);
diff --git a/thirdparty/harfbuzz/src/hb-subset.hh b/thirdparty/harfbuzz/src/hb-subset.hh
index c9b01c67f3..98c5f06fbf 100644
--- a/thirdparty/harfbuzz/src/hb-subset.hh
+++ b/thirdparty/harfbuzz/src/hb-subset.hh
@@ -45,14 +45,14 @@ struct hb_subset_context_t :
private:
template <typename T, typename ...Ts> auto
_dispatch (const T &obj, hb_priority<1>, Ts&&... ds) HB_AUTO_RETURN
- ( obj.subset (this, hb_forward<Ts> (ds)...) )
+ ( obj.subset (this, std::forward<Ts> (ds)...) )
template <typename T, typename ...Ts> auto
_dispatch (const T &obj, hb_priority<0>, Ts&&... ds) HB_AUTO_RETURN
- ( obj.dispatch (this, hb_forward<Ts> (ds)...) )
+ ( obj.dispatch (this, std::forward<Ts> (ds)...) )
public:
template <typename T, typename ...Ts> auto
dispatch (const T &obj, Ts&&... ds) HB_AUTO_RETURN
- ( _dispatch (obj, hb_prioritize, hb_forward<Ts> (ds)...) )
+ ( _dispatch (obj, hb_prioritize, std::forward<Ts> (ds)...) )
hb_blob_t *source_blob;
hb_subset_plan_t *plan;
diff --git a/thirdparty/harfbuzz/src/hb-unicode.hh b/thirdparty/harfbuzz/src/hb-unicode.hh
index 0a79944107..4c28bb0cdf 100644
--- a/thirdparty/harfbuzz/src/hb-unicode.hh
+++ b/thirdparty/harfbuzz/src/hb-unicode.hh
@@ -121,7 +121,7 @@ HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS_SIMPLE
static hb_bool_t
is_variation_selector (hb_codepoint_t unicode)
{
- /* U+180B..180D MONGOLIAN FREE VARIATION SELECTORs are handled in the
+ /* U+180B..180D, U+180F MONGOLIAN FREE VARIATION SELECTORs are handled in the
* Arabic shaper. No need to match them here. */
return unlikely (hb_in_ranges<hb_codepoint_t> (unicode,
0xFE00u, 0xFE0Fu, /* VARIATION SELECTOR-1..16 */
@@ -136,7 +136,7 @@ HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS_SIMPLE
* As such, we make exceptions for those four.
* Also ignoring U+1BCA0..1BCA3. https://github.com/harfbuzz/harfbuzz/issues/503
*
- * Unicode 7.0:
+ * Unicode 14.0:
* $ grep '; Default_Ignorable_Code_Point ' DerivedCoreProperties.txt | sed 's/;.*#/#/'
* 00AD # Cf SOFT HYPHEN
* 034F # Mn COMBINING GRAPHEME JOINER
@@ -145,6 +145,7 @@ HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS_SIMPLE
* 17B4..17B5 # Mn [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA
* 180B..180D # Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE
* 180E # Cf MONGOLIAN VOWEL SEPARATOR
+ * 180F # Mn MONGOLIAN FREE VARIATION SELECTOR FOUR
* 200B..200F # Cf [5] ZERO WIDTH SPACE..RIGHT-TO-LEFT MARK
* 202A..202E # Cf [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE
* 2060..2064 # Cf [5] WORD JOINER..INVISIBLE PLUS
diff --git a/thirdparty/harfbuzz/src/hb-vector.hh b/thirdparty/harfbuzz/src/hb-vector.hh
index 110d457caf..b0a1e5e966 100644
--- a/thirdparty/harfbuzz/src/hb-vector.hh
+++ b/thirdparty/harfbuzz/src/hb-vector.hh
@@ -38,10 +38,23 @@ struct hb_vector_t
typedef Type item_t;
static constexpr unsigned item_size = hb_static_size (Type);
- hb_vector_t () { init (); }
- hb_vector_t (const hb_vector_t &o)
+ hb_vector_t () = default;
+ hb_vector_t (std::initializer_list<Type> lst) : hb_vector_t ()
+ {
+ alloc (lst.size ());
+ for (auto&& item : lst)
+ push (item);
+ }
+ template <typename Iterable,
+ hb_requires (hb_is_iterable (Iterable))>
+ hb_vector_t (const Iterable &o) : hb_vector_t ()
+ {
+ if (hb_iter (o).is_random_access_iterator)
+ alloc (hb_len (hb_iter (o)));
+ hb_copy (o, *this);
+ }
+ hb_vector_t (const hb_vector_t &o) : hb_vector_t ()
{
- init ();
alloc (o.length);
hb_copy (o, *this);
}
@@ -55,11 +68,11 @@ struct hb_vector_t
~hb_vector_t () { fini (); }
private:
- int allocated; /* == -1 means allocation failed. */
+ int allocated = 0; /* == -1 means allocation failed. */
public:
- unsigned int length;
+ unsigned int length = 0;
public:
- Type *arrayZ;
+ Type *arrayZ = nullptr;
void init ()
{
@@ -87,6 +100,13 @@ struct hb_vector_t
resize (0);
}
+ friend void swap (hb_vector_t& a, hb_vector_t& b)
+ {
+ hb_swap (a.allocated, b.allocated);
+ hb_swap (a.length, b.length);
+ hb_swap (a.arrayZ, b.arrayZ);
+ }
+
hb_vector_t& operator = (const hb_vector_t &o)
{
reset ();
@@ -96,11 +116,7 @@ struct hb_vector_t
}
hb_vector_t& operator = (hb_vector_t &&o)
{
- fini ();
- allocated = o.allocated;
- length = o.length;
- arrayZ = o.arrayZ;
- o.init ();
+ hb_swap (*this, o);
return *this;
}
@@ -134,7 +150,7 @@ struct hb_vector_t
/* Sink interface. */
template <typename T>
- hb_vector_t& operator << (T&& v) { push (hb_forward<T> (v)); return *this; }
+ hb_vector_t& operator << (T&& v) { push (std::forward<T> (v)); return *this; }
hb_array_t< Type> as_array () { return hb_array (arrayZ, length); }
hb_array_t<const Type> as_array () const { return hb_array (arrayZ, length); }
@@ -182,7 +198,7 @@ struct hb_vector_t
// the created copy to leak memory since we won't have stored a
// reference to it.
return p;
- *p = hb_forward<T> (v);
+ *p = std::forward<T> (v);
return p;
}
@@ -239,7 +255,7 @@ struct hb_vector_t
Type pop ()
{
if (!length) return Null (Type);
- return hb_move (arrayZ[--length]); /* Does this move actually work? */
+ return std::move (arrayZ[--length]); /* Does this move actually work? */
}
void remove (unsigned int i)
@@ -295,6 +311,19 @@ struct hb_vector_t
template <typename Type>
struct hb_sorted_vector_t : hb_vector_t<Type>
{
+ hb_sorted_vector_t () = default;
+ ~hb_sorted_vector_t () = default;
+ hb_sorted_vector_t (hb_sorted_vector_t& o) = default;
+ hb_sorted_vector_t (hb_sorted_vector_t &&o) = default;
+ hb_sorted_vector_t (std::initializer_list<Type> lst) : hb_vector_t<Type> (lst) {}
+ template <typename Iterable,
+ hb_requires (hb_is_iterable (Iterable))>
+ hb_sorted_vector_t (const Iterable &o) : hb_vector_t<Type> (o) {}
+ hb_sorted_vector_t& operator = (const hb_sorted_vector_t &o) = default;
+ hb_sorted_vector_t& operator = (hb_sorted_vector_t &&o) = default;
+ friend void swap (hb_sorted_vector_t& a, hb_sorted_vector_t& b)
+ { hb_swap ((hb_vector_t<Type>&) (a), (hb_vector_t<Type>&) (b)); }
+
hb_sorted_array_t< Type> as_array () { return hb_sorted_array (this->arrayZ, this->length); }
hb_sorted_array_t<const Type> as_array () const { return hb_sorted_array (this->arrayZ, this->length); }
diff --git a/thirdparty/harfbuzz/src/hb-version.h b/thirdparty/harfbuzz/src/hb-version.h
index 70325f88eb..1a4f0bf62a 100644
--- a/thirdparty/harfbuzz/src/hb-version.h
+++ b/thirdparty/harfbuzz/src/hb-version.h
@@ -47,20 +47,20 @@ HB_BEGIN_DECLS
*
* The minor component of the library version available at compile-time.
*/
-#define HB_VERSION_MINOR 0
+#define HB_VERSION_MINOR 1
/**
* HB_VERSION_MICRO:
*
* The micro component of the library version available at compile-time.
*/
-#define HB_VERSION_MICRO 0
+#define HB_VERSION_MICRO 1
/**
* HB_VERSION_STRING:
*
* A string literal containing the library version available at compile-time.
*/
-#define HB_VERSION_STRING "3.0.0"
+#define HB_VERSION_STRING "3.1.1"
/**
* HB_VERSION_ATLEAST:
diff --git a/thirdparty/harfbuzz/src/hb.hh b/thirdparty/harfbuzz/src/hb.hh
index 829b5a1ab7..1f14267525 100644
--- a/thirdparty/harfbuzz/src/hb.hh
+++ b/thirdparty/harfbuzz/src/hb.hh
@@ -62,6 +62,7 @@
/* Error. Should never happen. */
#ifndef HB_NO_PRAGMA_GCC_DIAGNOSTIC_ERROR
+#pragma GCC diagnostic error "-Wbitwise-instead-of-logical"
#pragma GCC diagnostic error "-Wcast-align"
#pragma GCC diagnostic error "-Wcast-function-type"
#pragma GCC diagnostic error "-Wdelete-non-virtual-dtor"
diff --git a/thirdparty/libogg/framing.c b/thirdparty/libogg/framing.c
index 83601199ad..724d116d7f 100644
--- a/thirdparty/libogg/framing.c
+++ b/thirdparty/libogg/framing.c
@@ -597,9 +597,14 @@ char *ogg_sync_buffer(ogg_sync_state *oy, long size){
if(size>oy->storage-oy->fill){
/* We need to extend the internal buffer */
- long newsize=size+oy->fill+4096; /* an extra page to be nice */
+ long newsize;
void *ret;
+ if(size>INT_MAX-4096-oy->fill){
+ ogg_sync_clear(oy);
+ return NULL;
+ }
+ newsize=size+oy->fill+4096; /* an extra page to be nice */
if(oy->data)
ret=_ogg_realloc(oy->data,newsize);
else
@@ -1564,7 +1569,7 @@ void test_pack(const int *pl, const int **headers, int byteskip,
byteskipcount=byteskip;
}
- ogg_sync_wrote(&oy,next-buf);
+ ogg_sync_wrote(&oy,(long)(next-buf));
while(1){
int ret=ogg_sync_pageout(&oy,&og_de);
diff --git a/thirdparty/libogg/ogg/config_types.h b/thirdparty/libogg/ogg/config_types.h
index 4dc8393fdc..1a87df6423 100644
--- a/thirdparty/libogg/ogg/config_types.h
+++ b/thirdparty/libogg/ogg/config_types.h
@@ -1,7 +1,20 @@
#ifndef __CONFIG_TYPES_H__
#define __CONFIG_TYPES_H__
-#include <stdint.h>
+/* these are filled in by configure or cmake*/
+#define INCLUDE_INTTYPES_H 1
+#define INCLUDE_STDINT_H 1
+#define INCLUDE_SYS_TYPES_H 1
+
+#if INCLUDE_INTTYPES_H
+# include <inttypes.h>
+#endif
+#if INCLUDE_STDINT_H
+# include <stdint.h>
+#endif
+#if INCLUDE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
typedef int16_t ogg_int16_t;
typedef uint16_t ogg_uint16_t;
diff --git a/thirdparty/libvorbis/COPYING b/thirdparty/libvorbis/COPYING
index 153b926a15..fb456a87bd 100644
--- a/thirdparty/libvorbis/COPYING
+++ b/thirdparty/libvorbis/COPYING
@@ -1,4 +1,4 @@
-Copyright (c) 2002-2018 Xiph.org Foundation
+Copyright (c) 2002-2020 Xiph.org Foundation
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
diff --git a/thirdparty/libvorbis/analysis.c b/thirdparty/libvorbis/analysis.c
index 0e11a167be..14919737eb 100644
--- a/thirdparty/libvorbis/analysis.c
+++ b/thirdparty/libvorbis/analysis.c
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/backends.h b/thirdparty/libvorbis/backends.h
index 22809d46d5..670b0b902e 100644
--- a/thirdparty/libvorbis/backends.h
+++ b/thirdparty/libvorbis/backends.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/barkmel.c b/thirdparty/libvorbis/barkmel.c
index 4b19935f30..f833c30211 100644
--- a/thirdparty/libvorbis/barkmel.c
+++ b/thirdparty/libvorbis/barkmel.c
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/bitrate.c b/thirdparty/libvorbis/bitrate.c
index 96055140f7..132553cbee 100644
--- a/thirdparty/libvorbis/bitrate.c
+++ b/thirdparty/libvorbis/bitrate.c
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/bitrate.h b/thirdparty/libvorbis/bitrate.h
index 655a68cc09..48fa150596 100644
--- a/thirdparty/libvorbis/bitrate.h
+++ b/thirdparty/libvorbis/bitrate.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/block.c b/thirdparty/libvorbis/block.c
index db245b3e69..6a50da0843 100644
--- a/thirdparty/libvorbis/block.c
+++ b/thirdparty/libvorbis/block.c
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2015 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/books/coupled/res_books_51.h b/thirdparty/libvorbis/books/coupled/res_books_51.h
index 47df4b221b..eb569c6f04 100644
--- a/thirdparty/libvorbis/books/coupled/res_books_51.h
+++ b/thirdparty/libvorbis/books/coupled/res_books_51.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2010 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
*
diff --git a/thirdparty/libvorbis/books/coupled/res_books_stereo.h b/thirdparty/libvorbis/books/coupled/res_books_stereo.h
index 61d934046d..7b53cb972b 100644
--- a/thirdparty/libvorbis/books/coupled/res_books_stereo.h
+++ b/thirdparty/libvorbis/books/coupled/res_books_stereo.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/books/floor/floor_books.h b/thirdparty/libvorbis/books/floor/floor_books.h
index 67d5f31a3b..d26664f766 100644
--- a/thirdparty/libvorbis/books/floor/floor_books.h
+++ b/thirdparty/libvorbis/books/floor/floor_books.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/books/uncoupled/res_books_uncoupled.h b/thirdparty/libvorbis/books/uncoupled/res_books_uncoupled.h
index 3d658ec470..107e22f9e3 100644
--- a/thirdparty/libvorbis/books/uncoupled/res_books_uncoupled.h
+++ b/thirdparty/libvorbis/books/uncoupled/res_books_uncoupled.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/codebook.c b/thirdparty/libvorbis/codebook.c
index 78672e222d..7a0c206783 100644
--- a/thirdparty/libvorbis/codebook.c
+++ b/thirdparty/libvorbis/codebook.c
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2015 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/codebook.h b/thirdparty/libvorbis/codebook.h
index 08440c6962..7d4e2aae4f 100644
--- a/thirdparty/libvorbis/codebook.h
+++ b/thirdparty/libvorbis/codebook.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2015 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/codec_internal.h b/thirdparty/libvorbis/codec_internal.h
index e522be18da..2ecf5e5c73 100644
--- a/thirdparty/libvorbis/codec_internal.h
+++ b/thirdparty/libvorbis/codec_internal.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/envelope.c b/thirdparty/libvorbis/envelope.c
index da75237542..22d39aa6e0 100644
--- a/thirdparty/libvorbis/envelope.c
+++ b/thirdparty/libvorbis/envelope.c
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/envelope.h b/thirdparty/libvorbis/envelope.h
index f466efde8a..2ef60a82ca 100644
--- a/thirdparty/libvorbis/envelope.h
+++ b/thirdparty/libvorbis/envelope.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/floor0.c b/thirdparty/libvorbis/floor0.c
index 443c0e5a96..f4a6d4d559 100644
--- a/thirdparty/libvorbis/floor0.c
+++ b/thirdparty/libvorbis/floor0.c
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2015 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/floor1.c b/thirdparty/libvorbis/floor1.c
index 673e954c53..c4fe3ea7e7 100644
--- a/thirdparty/libvorbis/floor1.c
+++ b/thirdparty/libvorbis/floor1.c
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2015 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/highlevel.h b/thirdparty/libvorbis/highlevel.h
index 337b75bfa4..7690e3ebfb 100644
--- a/thirdparty/libvorbis/highlevel.h
+++ b/thirdparty/libvorbis/highlevel.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/info.c b/thirdparty/libvorbis/info.c
index 3fbb7c757a..f2e39e387e 100644
--- a/thirdparty/libvorbis/info.c
+++ b/thirdparty/libvorbis/info.c
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2015 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
@@ -19,7 +19,6 @@
#include <stdlib.h>
#include <string.h>
-#include <ctype.h>
#include <ogg/ogg.h>
#include "vorbis/codec.h"
#include "codec_internal.h"
@@ -30,8 +29,8 @@
#include "misc.h"
#include "os.h"
-#define GENERAL_VENDOR_STRING "Xiph.Org libVorbis 1.3.6"
-#define ENCODE_VENDOR_STRING "Xiph.Org libVorbis I 20180316 (Now 100% fewer shells)"
+#define GENERAL_VENDOR_STRING "Xiph.Org libVorbis 1.3.7"
+#define ENCODE_VENDOR_STRING "Xiph.Org libVorbis I 20200704 (Reducing Environment)"
/* helpers */
static void _v_writestring(oggpack_buffer *o,const char *s, int bytes){
@@ -47,6 +46,10 @@ static void _v_readstring(oggpack_buffer *o,char *buf,int bytes){
}
}
+static int _v_toupper(int c) {
+ return (c >= 'a' && c <= 'z') ? (c & ~('a' - 'A')) : c;
+}
+
void vorbis_comment_init(vorbis_comment *vc){
memset(vc,0,sizeof(*vc));
}
@@ -78,7 +81,7 @@ void vorbis_comment_add_tag(vorbis_comment *vc, const char *tag, const char *con
static int tagcompare(const char *s1, const char *s2, int n){
int c=0;
while(c < n){
- if(toupper(s1[c]) != toupper(s2[c]))
+ if(_v_toupper(s1[c]) != _v_toupper(s2[c]))
return !0;
c++;
}
@@ -203,6 +206,7 @@ void vorbis_info_clear(vorbis_info *vi){
static int _vorbis_unpack_info(vorbis_info *vi,oggpack_buffer *opb){
codec_setup_info *ci=vi->codec_setup;
+ int bs;
if(!ci)return(OV_EFAULT);
vi->version=oggpack_read(opb,32);
@@ -215,8 +219,12 @@ static int _vorbis_unpack_info(vorbis_info *vi,oggpack_buffer *opb){
vi->bitrate_nominal=(ogg_int32_t)oggpack_read(opb,32);
vi->bitrate_lower=(ogg_int32_t)oggpack_read(opb,32);
- ci->blocksizes[0]=1<<oggpack_read(opb,4);
- ci->blocksizes[1]=1<<oggpack_read(opb,4);
+ bs = oggpack_read(opb,4);
+ if(bs<0)goto err_out;
+ ci->blocksizes[0]=1<<bs;
+ bs = oggpack_read(opb,4);
+ if(bs<0)goto err_out;
+ ci->blocksizes[1]=1<<bs;
if(vi->rate<1)goto err_out;
if(vi->channels<1)goto err_out;
diff --git a/thirdparty/libvorbis/lookup.c b/thirdparty/libvorbis/lookup.c
index 1cc1f88ee9..7cd01a44d3 100644
--- a/thirdparty/libvorbis/lookup.c
+++ b/thirdparty/libvorbis/lookup.c
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/lookup.h b/thirdparty/libvorbis/lookup.h
index 4bc0f3a206..ec05014f44 100644
--- a/thirdparty/libvorbis/lookup.h
+++ b/thirdparty/libvorbis/lookup.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/lookup_data.h b/thirdparty/libvorbis/lookup_data.h
index 5de3cfdc7e..7935715a70 100644
--- a/thirdparty/libvorbis/lookup_data.h
+++ b/thirdparty/libvorbis/lookup_data.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/lpc.c b/thirdparty/libvorbis/lpc.c
index 798f4cf076..877da47f8e 100644
--- a/thirdparty/libvorbis/lpc.c
+++ b/thirdparty/libvorbis/lpc.c
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/lpc.h b/thirdparty/libvorbis/lpc.h
index 9cc79451b6..4f59e6d32d 100644
--- a/thirdparty/libvorbis/lpc.h
+++ b/thirdparty/libvorbis/lpc.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/lsp.c b/thirdparty/libvorbis/lsp.c
index 8588054515..8afa305f50 100644
--- a/thirdparty/libvorbis/lsp.c
+++ b/thirdparty/libvorbis/lsp.c
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
@@ -15,9 +15,10 @@
The LSP generation code is taken (with minimal modification and a
few bugfixes) from "On the Computation of the LSP Frequencies" by
Joseph Rothweiler (see http://www.rothweiler.us for contact info).
+
The paper is available at:
- http://www.myown1.com/joe/lsf
+ https://web.archive.org/web/20110810174000/http://home.myfairpoint.net/vzenxj75/myown1/joe/lsf/index.html
********************************************************************/
diff --git a/thirdparty/libvorbis/lsp.h b/thirdparty/libvorbis/lsp.h
index 8a8d10e978..68b38daf16 100644
--- a/thirdparty/libvorbis/lsp.h
+++ b/thirdparty/libvorbis/lsp.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/mapping0.c b/thirdparty/libvorbis/mapping0.c
index ccb4493d4c..efa0fbcd93 100644
--- a/thirdparty/libvorbis/mapping0.c
+++ b/thirdparty/libvorbis/mapping0.c
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2010 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/masking.h b/thirdparty/libvorbis/masking.h
index 955e18c719..7a196a37eb 100644
--- a/thirdparty/libvorbis/masking.h
+++ b/thirdparty/libvorbis/masking.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/mdct.c b/thirdparty/libvorbis/mdct.c
index f3f1ed805b..2a0ff8d01b 100644
--- a/thirdparty/libvorbis/mdct.c
+++ b/thirdparty/libvorbis/mdct.c
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/mdct.h b/thirdparty/libvorbis/mdct.h
index 3b8c9ba4a2..ceaea617a3 100644
--- a/thirdparty/libvorbis/mdct.h
+++ b/thirdparty/libvorbis/mdct.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/misc.h b/thirdparty/libvorbis/misc.h
index 13788445a3..eac5160e88 100644
--- a/thirdparty/libvorbis/misc.h
+++ b/thirdparty/libvorbis/misc.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2015 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/modes/floor_all.h b/thirdparty/libvorbis/modes/floor_all.h
index 20928aac87..2e3d4a5012 100644
--- a/thirdparty/libvorbis/modes/floor_all.h
+++ b/thirdparty/libvorbis/modes/floor_all.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/modes/psych_11.h b/thirdparty/libvorbis/modes/psych_11.h
index cc5eea2402..9d8ed357ee 100644
--- a/thirdparty/libvorbis/modes/psych_11.h
+++ b/thirdparty/libvorbis/modes/psych_11.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/modes/psych_16.h b/thirdparty/libvorbis/modes/psych_16.h
index 477cb4d90f..49cbf7c4b2 100644
--- a/thirdparty/libvorbis/modes/psych_16.h
+++ b/thirdparty/libvorbis/modes/psych_16.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/modes/psych_44.h b/thirdparty/libvorbis/modes/psych_44.h
index 6c9eaa4e5f..d15509b71d 100644
--- a/thirdparty/libvorbis/modes/psych_44.h
+++ b/thirdparty/libvorbis/modes/psych_44.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/modes/psych_8.h b/thirdparty/libvorbis/modes/psych_8.h
index 277db8436c..a19817f760 100644
--- a/thirdparty/libvorbis/modes/psych_8.h
+++ b/thirdparty/libvorbis/modes/psych_8.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/modes/residue_16.h b/thirdparty/libvorbis/modes/residue_16.h
index 3e05471cec..15e161c862 100644
--- a/thirdparty/libvorbis/modes/residue_16.h
+++ b/thirdparty/libvorbis/modes/residue_16.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/modes/residue_44.h b/thirdparty/libvorbis/modes/residue_44.h
index e89bc0e486..3f982695a7 100644
--- a/thirdparty/libvorbis/modes/residue_44.h
+++ b/thirdparty/libvorbis/modes/residue_44.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/modes/residue_44p51.h b/thirdparty/libvorbis/modes/residue_44p51.h
index 7f33e250e2..8ac5f65e62 100644
--- a/thirdparty/libvorbis/modes/residue_44p51.h
+++ b/thirdparty/libvorbis/modes/residue_44p51.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2010 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/modes/residue_44u.h b/thirdparty/libvorbis/modes/residue_44u.h
index e55ac12548..2f3595e49f 100644
--- a/thirdparty/libvorbis/modes/residue_44u.h
+++ b/thirdparty/libvorbis/modes/residue_44u.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/modes/residue_8.h b/thirdparty/libvorbis/modes/residue_8.h
index ae123a276a..b836f79c84 100644
--- a/thirdparty/libvorbis/modes/residue_8.h
+++ b/thirdparty/libvorbis/modes/residue_8.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/modes/setup_11.h b/thirdparty/libvorbis/modes/setup_11.h
index 0cbcaafcb2..5ade5dd169 100644
--- a/thirdparty/libvorbis/modes/setup_11.h
+++ b/thirdparty/libvorbis/modes/setup_11.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/modes/setup_16.h b/thirdparty/libvorbis/modes/setup_16.h
index d59ad70d2e..8b2daafa3f 100644
--- a/thirdparty/libvorbis/modes/setup_16.h
+++ b/thirdparty/libvorbis/modes/setup_16.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/modes/setup_22.h b/thirdparty/libvorbis/modes/setup_22.h
index bc38af9630..eef5a4e7da 100644
--- a/thirdparty/libvorbis/modes/setup_22.h
+++ b/thirdparty/libvorbis/modes/setup_22.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/modes/setup_32.h b/thirdparty/libvorbis/modes/setup_32.h
index f66a0bcd00..f87cb767d0 100644
--- a/thirdparty/libvorbis/modes/setup_32.h
+++ b/thirdparty/libvorbis/modes/setup_32.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/modes/setup_44.h b/thirdparty/libvorbis/modes/setup_44.h
index a189b5fb95..12d592808e 100644
--- a/thirdparty/libvorbis/modes/setup_44.h
+++ b/thirdparty/libvorbis/modes/setup_44.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/modes/setup_44p51.h b/thirdparty/libvorbis/modes/setup_44p51.h
index 3bde7b340c..4d49173ffb 100644
--- a/thirdparty/libvorbis/modes/setup_44p51.h
+++ b/thirdparty/libvorbis/modes/setup_44p51.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2010 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/modes/setup_44u.h b/thirdparty/libvorbis/modes/setup_44u.h
index 7ae3af6b2a..2dd8bf701f 100644
--- a/thirdparty/libvorbis/modes/setup_44u.h
+++ b/thirdparty/libvorbis/modes/setup_44u.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/modes/setup_8.h b/thirdparty/libvorbis/modes/setup_8.h
index 7502556879..16b02e01b7 100644
--- a/thirdparty/libvorbis/modes/setup_8.h
+++ b/thirdparty/libvorbis/modes/setup_8.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/modes/setup_X.h b/thirdparty/libvorbis/modes/setup_X.h
index 2229a5ef2f..27807c10b4 100644
--- a/thirdparty/libvorbis/modes/setup_X.h
+++ b/thirdparty/libvorbis/modes/setup_X.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/os.h b/thirdparty/libvorbis/os.h
index 416a401dd1..9ded7358d4 100644
--- a/thirdparty/libvorbis/os.h
+++ b/thirdparty/libvorbis/os.h
@@ -8,7 +8,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2015 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
@@ -60,7 +60,7 @@ void *_alloca(size_t size);
# define FAST_HYPOT hypot
#endif
-#endif
+#endif /* _V_IFDEFJAIL_H_ */
#ifdef HAVE_ALLOCA_H
# include <alloca.h>
@@ -80,7 +80,7 @@ void *_alloca(size_t size);
/* Special i386 GCC implementation */
-#if defined(__i386__) && defined(__GNUC__) && !defined(__BEOS__)
+#if defined(__i386__) && defined(__GNUC__) && !defined(__BEOS__) && !defined(__SSE2_MATH__)
# define VORBIS_FPU_CONTROL
/* both GCC and MSVC are kinda stupid about rounding/casting to int.
Because of encapsulation constraints (GCC can't see inside the asm
@@ -119,8 +119,7 @@ static inline int vorbis_ftoi(double f){ /* yes, double! Otherwise,
/* MSVC inline assembly. 32 bit only; inline ASM isn't implemented in the
* 64 bit compiler and doesn't work on arm. */
-#if defined(_MSC_VER) && !defined(_WIN64) && \
- !defined(_WIN32_WCE) && !defined(_M_ARM)
+#if defined(_MSC_VER) && defined(_M_IX86) && !defined(_WIN32_WCE)
# define VORBIS_FPU_CONTROL
typedef ogg_int16_t vorbis_fpu_control;
@@ -147,7 +146,7 @@ static __inline void vorbis_fpu_restore(vorbis_fpu_control fpu){
/* Optimized code path for x86_64 builds. Uses SSE2 intrinsics. This can be
done safely because all x86_64 CPUs supports SSE2. */
-#if (defined(_MSC_VER) && defined(_WIN64)) || (defined(__GNUC__) && defined (__x86_64__))
+#if (defined(_MSC_VER) && defined(_M_X64)) || (defined(__GNUC__) && defined (__SSE2_MATH__))
# define VORBIS_FPU_CONTROL
typedef ogg_int16_t vorbis_fpu_control;
@@ -174,7 +173,7 @@ static __inline void vorbis_fpu_restore(vorbis_fpu_control fpu){
typedef int vorbis_fpu_control;
-static int vorbis_ftoi(double f){
+STIN int vorbis_ftoi(double f){
/* Note: MSVC and GCC (at least on some systems) round towards zero, thus,
the floor() call is required to ensure correct roudning of
negative numbers */
diff --git a/thirdparty/libvorbis/psy.c b/thirdparty/libvorbis/psy.c
index 422c6f1e41..036b094aa7 100644
--- a/thirdparty/libvorbis/psy.c
+++ b/thirdparty/libvorbis/psy.c
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2010 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
@@ -599,11 +599,12 @@ static void bark_noise_hybridmp(int n,const long *b,
XY[i] = tXY;
}
- for (i = 0, x = 0.f;; i++, x += 1.f) {
+ for (i = 0, x = 0.f; i < n; i++, x += 1.f) {
lo = b[i] >> 16;
- if( lo>=0 ) break;
hi = b[i] & 0xffff;
+ if( lo>=0 || -lo>=n ) break;
+ if( hi>=n ) break;
tN = N[hi] + N[-lo];
tX = X[hi] - X[-lo];
@@ -615,17 +616,17 @@ static void bark_noise_hybridmp(int n,const long *b,
B = tN * tXY - tX * tY;
D = tN * tXX - tX * tX;
R = (A + x * B) / D;
- if (R < 0.f)
- R = 0.f;
+ if (R < 0.f) R = 0.f;
noise[i] = R - offset;
}
- for ( ;; i++, x += 1.f) {
+ for ( ; i < n; i++, x += 1.f) {
lo = b[i] >> 16;
hi = b[i] & 0xffff;
- if(hi>=n)break;
+ if( lo<0 || lo>=n ) break;
+ if( hi>=n ) break;
tN = N[hi] - N[lo];
tX = X[hi] - X[lo];
@@ -641,6 +642,7 @@ static void bark_noise_hybridmp(int n,const long *b,
noise[i] = R - offset;
}
+
for ( ; i < n; i++, x += 1.f) {
R = (A + x * B) / D;
@@ -651,10 +653,11 @@ static void bark_noise_hybridmp(int n,const long *b,
if (fixed <= 0) return;
- for (i = 0, x = 0.f;; i++, x += 1.f) {
+ for (i = 0, x = 0.f; i < n; i++, x += 1.f) {
hi = i + fixed / 2;
lo = hi - fixed;
- if(lo>=0)break;
+ if ( hi>=n ) break;
+ if ( lo>=0 ) break;
tN = N[hi] + N[-lo];
tX = X[hi] - X[-lo];
@@ -670,11 +673,12 @@ static void bark_noise_hybridmp(int n,const long *b,
if (R - offset < noise[i]) noise[i] = R - offset;
}
- for ( ;; i++, x += 1.f) {
+ for ( ; i < n; i++, x += 1.f) {
hi = i + fixed / 2;
lo = hi - fixed;
- if(hi>=n)break;
+ if ( hi>=n ) break;
+ if ( lo<0 ) break;
tN = N[hi] - N[lo];
tX = X[hi] - X[lo];
diff --git a/thirdparty/libvorbis/psy.h b/thirdparty/libvorbis/psy.h
index ab2534db3a..d9a04e8b74 100644
--- a/thirdparty/libvorbis/psy.h
+++ b/thirdparty/libvorbis/psy.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/psytune.c b/thirdparty/libvorbis/psytune.c
index 6952136c6b..67223e5118 100644
--- a/thirdparty/libvorbis/psytune.c
+++ b/thirdparty/libvorbis/psytune.c
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/registry.c b/thirdparty/libvorbis/registry.c
index 74f7ef0396..db0f67b2e2 100644
--- a/thirdparty/libvorbis/registry.c
+++ b/thirdparty/libvorbis/registry.c
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/registry.h b/thirdparty/libvorbis/registry.h
index 599d959942..b823aa6091 100644
--- a/thirdparty/libvorbis/registry.h
+++ b/thirdparty/libvorbis/registry.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/res0.c b/thirdparty/libvorbis/res0.c
index 6d623d730f..c931aded38 100644
--- a/thirdparty/libvorbis/res0.c
+++ b/thirdparty/libvorbis/res0.c
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2010 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
@@ -30,9 +30,6 @@
#include "misc.h"
#include "os.h"
-//#define TRAIN_RES 1
-//#define TRAIN_RESAUX 1
-
#if defined(TRAIN_RES) || defined (TRAIN_RESAUX)
#include <stdio.h>
#endif
diff --git a/thirdparty/libvorbis/scales.h b/thirdparty/libvorbis/scales.h
index 18bc4e7518..3c2ae48d9e 100644
--- a/thirdparty/libvorbis/scales.h
+++ b/thirdparty/libvorbis/scales.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/sharedbook.c b/thirdparty/libvorbis/sharedbook.c
index 4545d4f459..62a9a00afb 100644
--- a/thirdparty/libvorbis/sharedbook.c
+++ b/thirdparty/libvorbis/sharedbook.c
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2015 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
@@ -50,7 +50,7 @@ long _float32_pack(float val){
sign=0x80000000;
val= -val;
}
- exp= floor(log(val)/log(2.f)+.001); //+epsilon
+ exp= floor(log(val)/log(2.f)+.001); /* +epsilon */
mant=rint(ldexp(val,(VQ_FMAN-1)-exp));
exp=(exp+VQ_FEXP_BIAS)<<VQ_FMAN;
@@ -62,7 +62,15 @@ float _float32_unpack(long val){
int sign=val&0x80000000;
long exp =(val&0x7fe00000L)>>VQ_FMAN;
if(sign)mant= -mant;
- return(ldexp(mant,exp-(VQ_FMAN-1)-VQ_FEXP_BIAS));
+ exp=exp-(VQ_FMAN-1)-VQ_FEXP_BIAS;
+ /* clamp excessive exponent values */
+ if (exp>63){
+ exp=63;
+ }
+ if (exp<-63){
+ exp=-63;
+ }
+ return(ldexp(mant,exp));
}
/* given a list of word lengths, generate a list of codewords. Works
@@ -294,7 +302,7 @@ int vorbis_book_init_encode(codebook *c,const static_codebook *s){
c->used_entries=s->entries;
c->dim=s->dim;
c->codelist=_make_words(s->lengthlist,s->entries,0);
- //c->valuelist=_book_unquantize(s,s->entries,NULL);
+ /* c->valuelist=_book_unquantize(s,s->entries,NULL); */
c->quantvals=_book_maptype1_quantvals(s);
c->minval=(int)rint(_float32_unpack(s->q_min));
c->delta=(int)rint(_float32_unpack(s->q_delta));
@@ -573,6 +581,7 @@ void run_test(static_codebook *b,float *comp){
exit(1);
}
}
+ free(out);
}
int main(){
diff --git a/thirdparty/libvorbis/smallft.c b/thirdparty/libvorbis/smallft.c
index 6d528af423..4ffabab4bb 100644
--- a/thirdparty/libvorbis/smallft.c
+++ b/thirdparty/libvorbis/smallft.c
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/smallft.h b/thirdparty/libvorbis/smallft.h
index 9e867c67d2..02fe8f9cd4 100644
--- a/thirdparty/libvorbis/smallft.h
+++ b/thirdparty/libvorbis/smallft.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/synthesis.c b/thirdparty/libvorbis/synthesis.c
index 5f6092c3d3..3e2d681270 100644
--- a/thirdparty/libvorbis/synthesis.c
+++ b/thirdparty/libvorbis/synthesis.c
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2015 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/vorbis/codec.h b/thirdparty/libvorbis/vorbis/codec.h
index 42aa29138e..f8a912bc26 100644
--- a/thirdparty/libvorbis/vorbis/codec.h
+++ b/thirdparty/libvorbis/vorbis/codec.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2001 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
********************************************************************
diff --git a/thirdparty/libvorbis/vorbis/vorbisenc.h b/thirdparty/libvorbis/vorbis/vorbisenc.h
index 55f3b4a667..085b15e669 100644
--- a/thirdparty/libvorbis/vorbis/vorbisenc.h
+++ b/thirdparty/libvorbis/vorbis/vorbisenc.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2001 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/vorbis/vorbisfile.h b/thirdparty/libvorbis/vorbis/vorbisfile.h
index 56626119bb..3d65393f52 100644
--- a/thirdparty/libvorbis/vorbis/vorbisfile.h
+++ b/thirdparty/libvorbis/vorbis/vorbisfile.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/vorbisenc.c b/thirdparty/libvorbis/vorbisenc.c
index 4a4607cb41..cf3806a6e1 100644
--- a/thirdparty/libvorbis/vorbisenc.c
+++ b/thirdparty/libvorbis/vorbisenc.c
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2015 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
@@ -684,6 +684,7 @@ int vorbis_encode_setup_init(vorbis_info *vi){
highlevel_encode_setup *hi=&ci->hi;
if(ci==NULL)return(OV_EINVAL);
+ if(vi->channels<1||vi->channels>255)return(OV_EINVAL);
if(!hi->impulse_block_p)i0=1;
/* too low/high an ATH floater is nonsensical, but doesn't break anything */
@@ -1210,7 +1211,7 @@ int vorbis_encode_ctl(vorbis_info *vi,int number,void *arg){
hi->req,
hi->managed,
&new_base);
- if(!hi->setup)return OV_EIMPL;
+ if(!new_template)return OV_EIMPL;
hi->setup=new_template;
hi->base_setting=new_base;
vorbis_encode_setup_setting(vi,vi->channels,vi->rate);
diff --git a/thirdparty/libvorbis/vorbisfile.c b/thirdparty/libvorbis/vorbisfile.c
index b570c3c5f6..9219c2f2dc 100644
--- a/thirdparty/libvorbis/vorbisfile.c
+++ b/thirdparty/libvorbis/vorbisfile.c
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2015 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
@@ -264,6 +264,10 @@ static ogg_int64_t _get_prev_page_serial(OggVorbis_File *vf, ogg_int64_t begin,
}
}
}
+ /*We started from the beginning of the stream and found nothing.
+ This should be impossible unless the contents of the stream changed out
+ from under us after we read from it.*/
+ if(!begin&&vf->offset<0)return OV_EBADLINK;
}
/* we're not interested in the page... just the serialno and granpos. */
@@ -1230,7 +1234,6 @@ double ov_time_total(OggVorbis_File *vf,int i){
int ov_raw_seek(OggVorbis_File *vf,ogg_int64_t pos){
ogg_stream_state work_os;
- int ret;
if(vf->ready_state<OPENED)return(OV_EINVAL);
if(!vf->seekable)
@@ -1253,8 +1256,12 @@ int ov_raw_seek(OggVorbis_File *vf,ogg_int64_t pos){
vf->current_serialno); /* must set serialno */
vorbis_synthesis_restart(&vf->vd);
- ret=_seek_helper(vf,pos);
- if(ret)goto seek_error;
+ if(_seek_helper(vf,pos)) {
+ /* dump the machine so we're in a known state */
+ vf->pcm_offset=-1;
+ _decode_clear(vf);
+ return OV_EBADLINK;
+ }
/* we need to make sure the pcm_offset is set, but we don't want to
advance the raw cursor past good packets just to get to the first
@@ -1388,13 +1395,6 @@ int ov_raw_seek(OggVorbis_File *vf,ogg_int64_t pos){
vf->bittrack=0.f;
vf->samptrack=0.f;
return(0);
-
- seek_error:
- /* dump the machine so we're in a known state */
- vf->pcm_offset=-1;
- ogg_stream_clear(&work_os);
- _decode_clear(vf);
- return OV_EBADLINK;
}
/* Page granularity seek (faster than sample granularity because we
@@ -1964,6 +1964,7 @@ long ov_read_filter(OggVorbis_File *vf,char *buffer,int length,
long samples;
if(vf->ready_state<OPENED)return(OV_EINVAL);
+ if(word<=0)return(OV_EINVAL);
while(1){
if(vf->ready_state==INITSET){
@@ -1989,6 +1990,8 @@ long ov_read_filter(OggVorbis_File *vf,char *buffer,int length,
long channels=ov_info(vf,-1)->channels;
long bytespersample=word * channels;
vorbis_fpu_control fpu;
+
+ if(channels<1||channels>255)return(OV_EINVAL);
if(samples>length/bytespersample)samples=length/bytespersample;
if(samples <= 0)
diff --git a/thirdparty/libvorbis/window.c b/thirdparty/libvorbis/window.c
index b3b7ce0163..2151b278d1 100644
--- a/thirdparty/libvorbis/window.c
+++ b/thirdparty/libvorbis/window.c
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/window.h b/thirdparty/libvorbis/window.h
index 6ac260749e..33d83f85f9 100644
--- a/thirdparty/libvorbis/window.h
+++ b/thirdparty/libvorbis/window.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libwebp/AUTHORS b/thirdparty/libwebp/AUTHORS
index 0d70b7fb2a..30abde0326 100644
--- a/thirdparty/libwebp/AUTHORS
+++ b/thirdparty/libwebp/AUTHORS
@@ -1,9 +1,15 @@
Contributors:
+- Aidan O'Loan (aidanol at gmail dot com)
- Alan Browning (browning at google dot com)
- Charles Munger (clm at google dot com)
+- Cheng Yi (cyi at google dot com)
- Christian Duvivier (cduvivier at google dot com)
+- Christopher Degawa (ccom at randomderp dot com)
+- Clement Courbet (courbet at google dot com)
- Djordje Pesut (djordje dot pesut at imgtec dot com)
- Hui Su (huisu at google dot com)
+- Ilya Kurdyukov (jpegqs at gmail dot com)
+- Ingvar Stepanyan (rreverser at google dot com)
- James Zern (jzern at google dot com)
- Jan Engelhardt (jengelh at medozas dot de)
- Jehan (jehan at girinstud dot io)
@@ -20,6 +26,7 @@ Contributors:
- Mislav Bradac (mislavm at google dot com)
- Nico Weber (thakis at chromium dot org)
- Noel Chromium (noel at chromium dot org)
+- Oliver Wolff (oliver dot wolff at qt dot io)
- Owen Rodley (orodley at google dot com)
- Parag Salasakar (img dot mips1 at gmail dot com)
- Pascal Massimino (pascal dot massimino at gmail dot com)
@@ -38,5 +45,7 @@ Contributors:
- Vikas Arora (vikasa at google dot com)
- Vincent Rabaud (vrabaud at google dot com)
- Vlad Tsyrklevich (vtsyrklevich at chromium dot org)
+- Wan-Teh Chang (wtc at google dot com)
- Yang Zhang (yang dot zhang at arm dot com)
- Yannis Guyon (yguyon at google dot com)
+- Zhi An Ng (zhin at chromium dot org)
diff --git a/thirdparty/libwebp/src/dec/alpha_dec.c b/thirdparty/libwebp/src/dec/alpha_dec.c
index bce735bfc2..0b93a30b32 100644
--- a/thirdparty/libwebp/src/dec/alpha_dec.c
+++ b/thirdparty/libwebp/src/dec/alpha_dec.c
@@ -183,7 +183,7 @@ const uint8_t* VP8DecompressAlphaRows(VP8Decoder* const dec,
assert(dec != NULL && io != NULL);
if (row < 0 || num_rows <= 0 || row + num_rows > height) {
- return NULL; // sanity check.
+ return NULL;
}
if (!dec->is_alpha_decoded_) {
diff --git a/thirdparty/libwebp/src/dec/buffer_dec.c b/thirdparty/libwebp/src/dec/buffer_dec.c
index 3cd94eb4d9..4786cf0ddb 100644
--- a/thirdparty/libwebp/src/dec/buffer_dec.c
+++ b/thirdparty/libwebp/src/dec/buffer_dec.c
@@ -102,7 +102,7 @@ static VP8StatusCode AllocateBuffer(WebPDecBuffer* const buffer) {
int stride;
uint64_t size;
- if ((uint64_t)w * kModeBpp[mode] >= (1ull << 32)) {
+ if ((uint64_t)w * kModeBpp[mode] >= (1ull << 31)) {
return VP8_STATUS_INVALID_PARAM;
}
stride = w * kModeBpp[mode];
@@ -117,7 +117,6 @@ static VP8StatusCode AllocateBuffer(WebPDecBuffer* const buffer) {
}
total_size = size + 2 * uv_size + a_size;
- // Security/sanity checks
output = (uint8_t*)WebPSafeMalloc(total_size, sizeof(*output));
if (output == NULL) {
return VP8_STATUS_OUT_OF_MEMORY;
@@ -156,11 +155,11 @@ VP8StatusCode WebPFlipBuffer(WebPDecBuffer* const buffer) {
}
if (WebPIsRGBMode(buffer->colorspace)) {
WebPRGBABuffer* const buf = &buffer->u.RGBA;
- buf->rgba += (buffer->height - 1) * buf->stride;
+ buf->rgba += (int64_t)(buffer->height - 1) * buf->stride;
buf->stride = -buf->stride;
} else {
WebPYUVABuffer* const buf = &buffer->u.YUVA;
- const int H = buffer->height;
+ const int64_t H = buffer->height;
buf->y += (H - 1) * buf->y_stride;
buf->y_stride = -buf->y_stride;
buf->u += ((H - 1) >> 1) * buf->u_stride;
@@ -188,8 +187,7 @@ VP8StatusCode WebPAllocateDecBuffer(int width, int height,
const int ch = options->crop_height;
const int x = options->crop_left & ~1;
const int y = options->crop_top & ~1;
- if (x < 0 || y < 0 || cw <= 0 || ch <= 0 ||
- x + cw > width || y + ch > height) {
+ if (!WebPCheckCropDimensions(width, height, x, y, cw, ch)) {
return VP8_STATUS_INVALID_PARAM; // out of frame boundary.
}
width = cw;
diff --git a/thirdparty/libwebp/src/dec/frame_dec.c b/thirdparty/libwebp/src/dec/frame_dec.c
index 04609a8e56..91ca1f8609 100644
--- a/thirdparty/libwebp/src/dec/frame_dec.c
+++ b/thirdparty/libwebp/src/dec/frame_dec.c
@@ -705,7 +705,7 @@ static int AllocateMemory(VP8Decoder* const dec) {
+ cache_size + alpha_size + WEBP_ALIGN_CST;
uint8_t* mem;
- if (needed != (size_t)needed) return 0; // check for overflow
+ if (!CheckSizeOverflow(needed)) return 0; // check for overflow
if (needed > dec->mem_size_) {
WebPSafeFree(dec->mem_);
dec->mem_size_ = 0;
diff --git a/thirdparty/libwebp/src/dec/io_dec.c b/thirdparty/libwebp/src/dec/io_dec.c
index e603f19c98..5ef6298886 100644
--- a/thirdparty/libwebp/src/dec/io_dec.c
+++ b/thirdparty/libwebp/src/dec/io_dec.c
@@ -25,21 +25,16 @@
static int EmitYUV(const VP8Io* const io, WebPDecParams* const p) {
WebPDecBuffer* output = p->output;
const WebPYUVABuffer* const buf = &output->u.YUVA;
- uint8_t* const y_dst = buf->y + io->mb_y * buf->y_stride;
- uint8_t* const u_dst = buf->u + (io->mb_y >> 1) * buf->u_stride;
- uint8_t* const v_dst = buf->v + (io->mb_y >> 1) * buf->v_stride;
+ uint8_t* const y_dst = buf->y + (size_t)io->mb_y * buf->y_stride;
+ uint8_t* const u_dst = buf->u + (size_t)(io->mb_y >> 1) * buf->u_stride;
+ uint8_t* const v_dst = buf->v + (size_t)(io->mb_y >> 1) * buf->v_stride;
const int mb_w = io->mb_w;
const int mb_h = io->mb_h;
const int uv_w = (mb_w + 1) / 2;
const int uv_h = (mb_h + 1) / 2;
- int j;
- for (j = 0; j < mb_h; ++j) {
- memcpy(y_dst + j * buf->y_stride, io->y + j * io->y_stride, mb_w);
- }
- for (j = 0; j < uv_h; ++j) {
- memcpy(u_dst + j * buf->u_stride, io->u + j * io->uv_stride, uv_w);
- memcpy(v_dst + j * buf->v_stride, io->v + j * io->uv_stride, uv_w);
- }
+ WebPCopyPlane(io->y, io->y_stride, y_dst, buf->y_stride, mb_w, mb_h);
+ WebPCopyPlane(io->u, io->uv_stride, u_dst, buf->u_stride, uv_w, uv_h);
+ WebPCopyPlane(io->v, io->uv_stride, v_dst, buf->v_stride, uv_w, uv_h);
return io->mb_h;
}
@@ -47,7 +42,7 @@ static int EmitYUV(const VP8Io* const io, WebPDecParams* const p) {
static int EmitSampledRGB(const VP8Io* const io, WebPDecParams* const p) {
WebPDecBuffer* const output = p->output;
WebPRGBABuffer* const buf = &output->u.RGBA;
- uint8_t* const dst = buf->rgba + io->mb_y * buf->stride;
+ uint8_t* const dst = buf->rgba + (size_t)io->mb_y * buf->stride;
WebPSamplerProcessPlane(io->y, io->y_stride,
io->u, io->v, io->uv_stride,
dst, buf->stride, io->mb_w, io->mb_h,
@@ -62,7 +57,7 @@ static int EmitSampledRGB(const VP8Io* const io, WebPDecParams* const p) {
static int EmitFancyRGB(const VP8Io* const io, WebPDecParams* const p) {
int num_lines_out = io->mb_h; // a priori guess
const WebPRGBABuffer* const buf = &p->output->u.RGBA;
- uint8_t* dst = buf->rgba + io->mb_y * buf->stride;
+ uint8_t* dst = buf->rgba + (size_t)io->mb_y * buf->stride;
WebPUpsampleLinePairFunc upsample = WebPUpsamplers[p->output->colorspace];
const uint8_t* cur_y = io->y;
const uint8_t* cur_u = io->u;
@@ -133,7 +128,7 @@ static int EmitAlphaYUV(const VP8Io* const io, WebPDecParams* const p,
const WebPYUVABuffer* const buf = &p->output->u.YUVA;
const int mb_w = io->mb_w;
const int mb_h = io->mb_h;
- uint8_t* dst = buf->a + io->mb_y * buf->a_stride;
+ uint8_t* dst = buf->a + (size_t)io->mb_y * buf->a_stride;
int j;
(void)expected_num_lines_out;
assert(expected_num_lines_out == mb_h);
@@ -186,7 +181,7 @@ static int EmitAlphaRGB(const VP8Io* const io, WebPDecParams* const p,
(colorspace == MODE_ARGB || colorspace == MODE_Argb);
const WebPRGBABuffer* const buf = &p->output->u.RGBA;
int num_rows;
- const int start_y = GetAlphaSourceRow(io, &alpha, &num_rows);
+ const size_t start_y = GetAlphaSourceRow(io, &alpha, &num_rows);
uint8_t* const base_rgba = buf->rgba + start_y * buf->stride;
uint8_t* const dst = base_rgba + (alpha_first ? 0 : 3);
const int has_alpha = WebPDispatchAlpha(alpha, io->width, mb_w,
@@ -210,7 +205,7 @@ static int EmitAlphaRGBA4444(const VP8Io* const io, WebPDecParams* const p,
const WEBP_CSP_MODE colorspace = p->output->colorspace;
const WebPRGBABuffer* const buf = &p->output->u.RGBA;
int num_rows;
- const int start_y = GetAlphaSourceRow(io, &alpha, &num_rows);
+ const size_t start_y = GetAlphaSourceRow(io, &alpha, &num_rows);
uint8_t* const base_rgba = buf->rgba + start_y * buf->stride;
#if (WEBP_SWAP_16BIT_CSP == 1)
uint8_t* alpha_dst = base_rgba;
@@ -276,9 +271,9 @@ static int EmitRescaledYUV(const VP8Io* const io, WebPDecParams* const p) {
static int EmitRescaledAlphaYUV(const VP8Io* const io, WebPDecParams* const p,
int expected_num_lines_out) {
const WebPYUVABuffer* const buf = &p->output->u.YUVA;
- uint8_t* const dst_a = buf->a + p->last_y * buf->a_stride;
+ uint8_t* const dst_a = buf->a + (size_t)p->last_y * buf->a_stride;
if (io->a != NULL) {
- uint8_t* const dst_y = buf->y + p->last_y * buf->y_stride;
+ uint8_t* const dst_y = buf->y + (size_t)p->last_y * buf->y_stride;
const int num_lines_out = Rescale(io->a, io->width, io->mb_h, p->scaler_a);
assert(expected_num_lines_out == num_lines_out);
if (num_lines_out > 0) { // unmultiply the Y
@@ -303,46 +298,57 @@ static int InitYUVRescaler(const VP8Io* const io, WebPDecParams* const p) {
const int uv_out_height = (out_height + 1) >> 1;
const int uv_in_width = (io->mb_w + 1) >> 1;
const int uv_in_height = (io->mb_h + 1) >> 1;
- const size_t work_size = 2 * out_width; // scratch memory for luma rescaler
+ // scratch memory for luma rescaler
+ const size_t work_size = 2 * (size_t)out_width;
const size_t uv_work_size = 2 * uv_out_width; // and for each u/v ones
- size_t tmp_size, rescaler_size;
+ uint64_t total_size;
+ size_t rescaler_size;
rescaler_t* work;
WebPRescaler* scalers;
const int num_rescalers = has_alpha ? 4 : 3;
- tmp_size = (work_size + 2 * uv_work_size) * sizeof(*work);
+ total_size = ((uint64_t)work_size + 2 * uv_work_size) * sizeof(*work);
if (has_alpha) {
- tmp_size += work_size * sizeof(*work);
+ total_size += (uint64_t)work_size * sizeof(*work);
}
rescaler_size = num_rescalers * sizeof(*p->scaler_y) + WEBP_ALIGN_CST;
+ total_size += rescaler_size;
+ if (!CheckSizeOverflow(total_size)) {
+ return 0;
+ }
- p->memory = WebPSafeMalloc(1ULL, tmp_size + rescaler_size);
+ p->memory = WebPSafeMalloc(1ULL, (size_t)total_size);
if (p->memory == NULL) {
return 0; // memory error
}
work = (rescaler_t*)p->memory;
- scalers = (WebPRescaler*)WEBP_ALIGN((const uint8_t*)work + tmp_size);
+ scalers = (WebPRescaler*)WEBP_ALIGN(
+ (const uint8_t*)work + total_size - rescaler_size);
p->scaler_y = &scalers[0];
p->scaler_u = &scalers[1];
p->scaler_v = &scalers[2];
p->scaler_a = has_alpha ? &scalers[3] : NULL;
- WebPRescalerInit(p->scaler_y, io->mb_w, io->mb_h,
- buf->y, out_width, out_height, buf->y_stride, 1,
- work);
- WebPRescalerInit(p->scaler_u, uv_in_width, uv_in_height,
- buf->u, uv_out_width, uv_out_height, buf->u_stride, 1,
- work + work_size);
- WebPRescalerInit(p->scaler_v, uv_in_width, uv_in_height,
- buf->v, uv_out_width, uv_out_height, buf->v_stride, 1,
- work + work_size + uv_work_size);
+ if (!WebPRescalerInit(p->scaler_y, io->mb_w, io->mb_h,
+ buf->y, out_width, out_height, buf->y_stride, 1,
+ work) ||
+ !WebPRescalerInit(p->scaler_u, uv_in_width, uv_in_height,
+ buf->u, uv_out_width, uv_out_height, buf->u_stride, 1,
+ work + work_size) ||
+ !WebPRescalerInit(p->scaler_v, uv_in_width, uv_in_height,
+ buf->v, uv_out_width, uv_out_height, buf->v_stride, 1,
+ work + work_size + uv_work_size)) {
+ return 0;
+ }
p->emit = EmitRescaledYUV;
if (has_alpha) {
- WebPRescalerInit(p->scaler_a, io->mb_w, io->mb_h,
- buf->a, out_width, out_height, buf->a_stride, 1,
- work + work_size + 2 * uv_work_size);
+ if (!WebPRescalerInit(p->scaler_a, io->mb_w, io->mb_h,
+ buf->a, out_width, out_height, buf->a_stride, 1,
+ work + work_size + 2 * uv_work_size)) {
+ return 0;
+ }
p->emit_alpha = EmitRescaledAlphaYUV;
WebPInitAlphaProcessing();
}
@@ -356,7 +362,7 @@ static int ExportRGB(WebPDecParams* const p, int y_pos) {
const WebPYUV444Converter convert =
WebPYUV444Converters[p->output->colorspace];
const WebPRGBABuffer* const buf = &p->output->u.RGBA;
- uint8_t* dst = buf->rgba + y_pos * buf->stride;
+ uint8_t* dst = buf->rgba + (size_t)y_pos * buf->stride;
int num_lines_out = 0;
// For RGB rescaling, because of the YUV420, current scan position
// U/V can be +1/-1 line from the Y one. Hence the double test.
@@ -383,15 +389,15 @@ static int EmitRescaledRGB(const VP8Io* const io, WebPDecParams* const p) {
while (j < mb_h) {
const int y_lines_in =
WebPRescalerImport(p->scaler_y, mb_h - j,
- io->y + j * io->y_stride, io->y_stride);
+ io->y + (size_t)j * io->y_stride, io->y_stride);
j += y_lines_in;
if (WebPRescaleNeededLines(p->scaler_u, uv_mb_h - uv_j)) {
- const int u_lines_in =
- WebPRescalerImport(p->scaler_u, uv_mb_h - uv_j,
- io->u + uv_j * io->uv_stride, io->uv_stride);
- const int v_lines_in =
- WebPRescalerImport(p->scaler_v, uv_mb_h - uv_j,
- io->v + uv_j * io->uv_stride, io->uv_stride);
+ const int u_lines_in = WebPRescalerImport(
+ p->scaler_u, uv_mb_h - uv_j, io->u + (size_t)uv_j * io->uv_stride,
+ io->uv_stride);
+ const int v_lines_in = WebPRescalerImport(
+ p->scaler_v, uv_mb_h - uv_j, io->v + (size_t)uv_j * io->uv_stride,
+ io->uv_stride);
(void)v_lines_in; // remove a gcc warning
assert(u_lines_in == v_lines_in);
uv_j += u_lines_in;
@@ -403,7 +409,7 @@ static int EmitRescaledRGB(const VP8Io* const io, WebPDecParams* const p) {
static int ExportAlpha(WebPDecParams* const p, int y_pos, int max_lines_out) {
const WebPRGBABuffer* const buf = &p->output->u.RGBA;
- uint8_t* const base_rgba = buf->rgba + y_pos * buf->stride;
+ uint8_t* const base_rgba = buf->rgba + (size_t)y_pos * buf->stride;
const WEBP_CSP_MODE colorspace = p->output->colorspace;
const int alpha_first =
(colorspace == MODE_ARGB || colorspace == MODE_Argb);
@@ -431,7 +437,7 @@ static int ExportAlpha(WebPDecParams* const p, int y_pos, int max_lines_out) {
static int ExportAlphaRGBA4444(WebPDecParams* const p, int y_pos,
int max_lines_out) {
const WebPRGBABuffer* const buf = &p->output->u.RGBA;
- uint8_t* const base_rgba = buf->rgba + y_pos * buf->stride;
+ uint8_t* const base_rgba = buf->rgba + (size_t)y_pos * buf->stride;
#if (WEBP_SWAP_16BIT_CSP == 1)
uint8_t* alpha_dst = base_rgba;
#else
@@ -470,7 +476,7 @@ static int EmitRescaledAlphaRGB(const VP8Io* const io, WebPDecParams* const p,
int lines_left = expected_num_out_lines;
const int y_end = p->last_y + lines_left;
while (lines_left > 0) {
- const int row_offset = scaler->src_y - io->mb_y;
+ const int64_t row_offset = (int64_t)scaler->src_y - io->mb_y;
WebPRescalerImport(scaler, io->mb_h + io->mb_y - scaler->src_y,
io->a + row_offset * io->width, io->width);
lines_left -= p->emit_alpha_row(p, y_end - lines_left, lines_left);
@@ -485,51 +491,58 @@ static int InitRGBRescaler(const VP8Io* const io, WebPDecParams* const p) {
const int out_height = io->scaled_height;
const int uv_in_width = (io->mb_w + 1) >> 1;
const int uv_in_height = (io->mb_h + 1) >> 1;
- const size_t work_size = 2 * out_width; // scratch memory for one rescaler
+ // scratch memory for one rescaler
+ const size_t work_size = 2 * (size_t)out_width;
rescaler_t* work; // rescalers work area
uint8_t* tmp; // tmp storage for scaled YUV444 samples before RGB conversion
- size_t tmp_size1, tmp_size2, total_size, rescaler_size;
+ uint64_t tmp_size1, tmp_size2, total_size;
+ size_t rescaler_size;
WebPRescaler* scalers;
const int num_rescalers = has_alpha ? 4 : 3;
- tmp_size1 = 3 * work_size;
- tmp_size2 = 3 * out_width;
- if (has_alpha) {
- tmp_size1 += work_size;
- tmp_size2 += out_width;
- }
+ tmp_size1 = (uint64_t)num_rescalers * work_size;
+ tmp_size2 = (uint64_t)num_rescalers * out_width;
total_size = tmp_size1 * sizeof(*work) + tmp_size2 * sizeof(*tmp);
rescaler_size = num_rescalers * sizeof(*p->scaler_y) + WEBP_ALIGN_CST;
+ total_size += rescaler_size;
+ if (!CheckSizeOverflow(total_size)) {
+ return 0;
+ }
- p->memory = WebPSafeMalloc(1ULL, total_size + rescaler_size);
+ p->memory = WebPSafeMalloc(1ULL, (size_t)total_size);
if (p->memory == NULL) {
return 0; // memory error
}
work = (rescaler_t*)p->memory;
tmp = (uint8_t*)(work + tmp_size1);
- scalers = (WebPRescaler*)WEBP_ALIGN((const uint8_t*)work + total_size);
+ scalers = (WebPRescaler*)WEBP_ALIGN(
+ (const uint8_t*)work + total_size - rescaler_size);
p->scaler_y = &scalers[0];
p->scaler_u = &scalers[1];
p->scaler_v = &scalers[2];
p->scaler_a = has_alpha ? &scalers[3] : NULL;
- WebPRescalerInit(p->scaler_y, io->mb_w, io->mb_h,
- tmp + 0 * out_width, out_width, out_height, 0, 1,
- work + 0 * work_size);
- WebPRescalerInit(p->scaler_u, uv_in_width, uv_in_height,
- tmp + 1 * out_width, out_width, out_height, 0, 1,
- work + 1 * work_size);
- WebPRescalerInit(p->scaler_v, uv_in_width, uv_in_height,
- tmp + 2 * out_width, out_width, out_height, 0, 1,
- work + 2 * work_size);
+ if (!WebPRescalerInit(p->scaler_y, io->mb_w, io->mb_h,
+ tmp + 0 * out_width, out_width, out_height, 0, 1,
+ work + 0 * work_size) ||
+ !WebPRescalerInit(p->scaler_u, uv_in_width, uv_in_height,
+ tmp + 1 * out_width, out_width, out_height, 0, 1,
+ work + 1 * work_size) ||
+ !WebPRescalerInit(p->scaler_v, uv_in_width, uv_in_height,
+ tmp + 2 * out_width, out_width, out_height, 0, 1,
+ work + 2 * work_size)) {
+ return 0;
+ }
p->emit = EmitRescaledRGB;
WebPInitYUV444Converters();
if (has_alpha) {
- WebPRescalerInit(p->scaler_a, io->mb_w, io->mb_h,
- tmp + 3 * out_width, out_width, out_height, 0, 1,
- work + 3 * work_size);
+ if (!WebPRescalerInit(p->scaler_a, io->mb_w, io->mb_h,
+ tmp + 3 * out_width, out_width, out_height, 0, 1,
+ work + 3 * work_size)) {
+ return 0;
+ }
p->emit_alpha = EmitRescaledAlphaRGB;
if (p->output->colorspace == MODE_RGBA_4444 ||
p->output->colorspace == MODE_rgbA_4444) {
diff --git a/thirdparty/libwebp/src/dec/vp8_dec.c b/thirdparty/libwebp/src/dec/vp8_dec.c
index 57efb69041..5f405e4c2a 100644
--- a/thirdparty/libwebp/src/dec/vp8_dec.c
+++ b/thirdparty/libwebp/src/dec/vp8_dec.c
@@ -335,7 +335,7 @@ int VP8GetHeaders(VP8Decoder* const dec, VP8Io* const io) {
io->scaled_width = io->width;
io->scaled_height = io->height;
- io->mb_w = io->width; // sanity check
+ io->mb_w = io->width; // for soundness
io->mb_h = io->height; // ditto
VP8ResetProba(&dec->proba_);
@@ -494,13 +494,11 @@ static int GetCoeffsAlt(VP8BitReader* const br,
return 16;
}
-static WEBP_TSAN_IGNORE_FUNCTION void InitGetCoeffs(void) {
- if (GetCoeffs == NULL) {
- if (VP8GetCPUInfo != NULL && VP8GetCPUInfo(kSlowSSSE3)) {
- GetCoeffs = GetCoeffsAlt;
- } else {
- GetCoeffs = GetCoeffsFast;
- }
+WEBP_DSP_INIT_FUNC(InitGetCoeffs) {
+ if (VP8GetCPUInfo != NULL && VP8GetCPUInfo(kSlowSSSE3)) {
+ GetCoeffs = GetCoeffsAlt;
+ } else {
+ GetCoeffs = GetCoeffsFast;
}
}
diff --git a/thirdparty/libwebp/src/dec/vp8i_dec.h b/thirdparty/libwebp/src/dec/vp8i_dec.h
index 600a684410..20526a87c4 100644
--- a/thirdparty/libwebp/src/dec/vp8i_dec.h
+++ b/thirdparty/libwebp/src/dec/vp8i_dec.h
@@ -31,8 +31,8 @@ extern "C" {
// version numbers
#define DEC_MAJ_VERSION 1
-#define DEC_MIN_VERSION 1
-#define DEC_REV_VERSION 0
+#define DEC_MIN_VERSION 2
+#define DEC_REV_VERSION 1
// YUV-cache parameters. Cache is 32-bytes wide (= one cacheline).
// Constraints are: We need to store one 16x16 block of luma samples (y),
diff --git a/thirdparty/libwebp/src/dec/vp8l_dec.c b/thirdparty/libwebp/src/dec/vp8l_dec.c
index 93615d4ed2..73c3b54fff 100644
--- a/thirdparty/libwebp/src/dec/vp8l_dec.c
+++ b/thirdparty/libwebp/src/dec/vp8l_dec.c
@@ -559,8 +559,11 @@ static int AllocateAndInitRescaler(VP8LDecoder* const dec, VP8Io* const io) {
memory += work_size * sizeof(*work);
scaled_data = (uint32_t*)memory;
- WebPRescalerInit(dec->rescaler, in_width, in_height, (uint8_t*)scaled_data,
- out_width, out_height, 0, num_channels, work);
+ if (!WebPRescalerInit(dec->rescaler, in_width, in_height,
+ (uint8_t*)scaled_data, out_width, out_height,
+ 0, num_channels, work)) {
+ return 0;
+ }
return 1;
}
#endif // WEBP_REDUCE_SIZE
@@ -574,13 +577,14 @@ static int AllocateAndInitRescaler(VP8LDecoder* const dec, VP8Io* const io) {
static int Export(WebPRescaler* const rescaler, WEBP_CSP_MODE colorspace,
int rgba_stride, uint8_t* const rgba) {
uint32_t* const src = (uint32_t*)rescaler->dst;
+ uint8_t* dst = rgba;
const int dst_width = rescaler->dst_width;
int num_lines_out = 0;
while (WebPRescalerHasPendingOutput(rescaler)) {
- uint8_t* const dst = rgba + num_lines_out * rgba_stride;
WebPRescalerExportRow(rescaler);
WebPMultARGBRow(src, dst_width, 1);
VP8LConvertFromBGRA(src, dst_width, colorspace, dst);
+ dst += rgba_stride;
++num_lines_out;
}
return num_lines_out;
@@ -594,8 +598,8 @@ static int EmitRescaledRowsRGBA(const VP8LDecoder* const dec,
int num_lines_in = 0;
int num_lines_out = 0;
while (num_lines_in < mb_h) {
- uint8_t* const row_in = in + num_lines_in * in_stride;
- uint8_t* const row_out = out + num_lines_out * out_stride;
+ uint8_t* const row_in = in + (uint64_t)num_lines_in * in_stride;
+ uint8_t* const row_out = out + (uint64_t)num_lines_out * out_stride;
const int lines_left = mb_h - num_lines_in;
const int needed_lines = WebPRescaleNeededLines(dec->rescaler, lines_left);
int lines_imported;
@@ -796,7 +800,8 @@ static void ProcessRows(VP8LDecoder* const dec, int row) {
const WebPDecBuffer* const output = dec->output_;
if (WebPIsRGBMode(output->colorspace)) { // convert to RGBA
const WebPRGBABuffer* const buf = &output->u.RGBA;
- uint8_t* const rgba = buf->rgba + dec->last_out_row_ * buf->stride;
+ uint8_t* const rgba =
+ buf->rgba + (int64_t)dec->last_out_row_ * buf->stride;
const int num_rows_out =
#if !defined(WEBP_REDUCE_SIZE)
io->use_scaling ?
@@ -947,7 +952,6 @@ static WEBP_INLINE void CopyBlock8b(uint8_t* const dst, int dist, int length) {
break;
default:
goto Copy;
- break;
}
CopySmallPattern8b(src, dst, length, pattern);
return;
@@ -1515,7 +1519,7 @@ static int AllocateInternalBuffers32b(VP8LDecoder* const dec, int final_width) {
assert(dec->width_ <= final_width);
dec->pixels_ = (uint32_t*)WebPSafeMalloc(total_num_pixels, sizeof(uint32_t));
if (dec->pixels_ == NULL) {
- dec->argb_cache_ = NULL; // for sanity check
+ dec->argb_cache_ = NULL; // for soundness
dec->status_ = VP8_STATUS_OUT_OF_MEMORY;
return 0;
}
@@ -1525,7 +1529,7 @@ static int AllocateInternalBuffers32b(VP8LDecoder* const dec, int final_width) {
static int AllocateInternalBuffers8b(VP8LDecoder* const dec) {
const uint64_t total_num_pixels = (uint64_t)dec->width_ * dec->height_;
- dec->argb_cache_ = NULL; // for sanity check
+ dec->argb_cache_ = NULL; // for soundness
dec->pixels_ = (uint32_t*)WebPSafeMalloc(total_num_pixels, sizeof(uint8_t));
if (dec->pixels_ == NULL) {
dec->status_ = VP8_STATUS_OUT_OF_MEMORY;
@@ -1667,7 +1671,6 @@ int VP8LDecodeImage(VP8LDecoder* const dec) {
VP8Io* io = NULL;
WebPDecParams* params = NULL;
- // Sanity checks.
if (dec == NULL) return 0;
assert(dec->hdr_.huffman_tables_ != NULL);
diff --git a/thirdparty/libwebp/src/dec/webp_dec.c b/thirdparty/libwebp/src/dec/webp_dec.c
index 42d098874d..77a54c55d2 100644
--- a/thirdparty/libwebp/src/dec/webp_dec.c
+++ b/thirdparty/libwebp/src/dec/webp_dec.c
@@ -785,6 +785,13 @@ VP8StatusCode WebPDecode(const uint8_t* data, size_t data_size,
//------------------------------------------------------------------------------
// Cropping and rescaling.
+int WebPCheckCropDimensions(int image_width, int image_height,
+ int x, int y, int w, int h) {
+ return !(x < 0 || y < 0 || w <= 0 || h <= 0 ||
+ x >= image_width || w > image_width || w > image_width - x ||
+ y >= image_height || h > image_height || h > image_height - y);
+}
+
int WebPIoInitFromOptions(const WebPDecoderOptions* const options,
VP8Io* const io, WEBP_CSP_MODE src_colorspace) {
const int W = io->width;
@@ -792,7 +799,7 @@ int WebPIoInitFromOptions(const WebPDecoderOptions* const options,
int x = 0, y = 0, w = W, h = H;
// Cropping
- io->use_cropping = (options != NULL) && (options->use_cropping > 0);
+ io->use_cropping = (options != NULL) && options->use_cropping;
if (io->use_cropping) {
w = options->crop_width;
h = options->crop_height;
@@ -802,7 +809,7 @@ int WebPIoInitFromOptions(const WebPDecoderOptions* const options,
x &= ~1;
y &= ~1;
}
- if (x < 0 || y < 0 || w <= 0 || h <= 0 || x + w > W || y + h > H) {
+ if (!WebPCheckCropDimensions(W, H, x, y, w, h)) {
return 0; // out of frame boundary error
}
}
@@ -814,7 +821,7 @@ int WebPIoInitFromOptions(const WebPDecoderOptions* const options,
io->mb_h = h;
// Scaling
- io->use_scaling = (options != NULL) && (options->use_scaling > 0);
+ io->use_scaling = (options != NULL) && options->use_scaling;
if (io->use_scaling) {
int scaled_width = options->scaled_width;
int scaled_height = options->scaled_height;
@@ -835,8 +842,8 @@ int WebPIoInitFromOptions(const WebPDecoderOptions* const options,
if (io->use_scaling) {
// disable filter (only for large downscaling ratio).
- io->bypass_filtering = (io->scaled_width < W * 3 / 4) &&
- (io->scaled_height < H * 3 / 4);
+ io->bypass_filtering |= (io->scaled_width < W * 3 / 4) &&
+ (io->scaled_height < H * 3 / 4);
io->fancy_upsampling = 0;
}
return 1;
diff --git a/thirdparty/libwebp/src/dec/webpi_dec.h b/thirdparty/libwebp/src/dec/webpi_dec.h
index 24baff5d27..3b97388c71 100644
--- a/thirdparty/libwebp/src/dec/webpi_dec.h
+++ b/thirdparty/libwebp/src/dec/webpi_dec.h
@@ -77,6 +77,10 @@ VP8StatusCode WebPParseHeaders(WebPHeaderStructure* const headers);
//------------------------------------------------------------------------------
// Misc utils
+// Returns true if crop dimensions are within image bounds.
+int WebPCheckCropDimensions(int image_width, int image_height,
+ int x, int y, int w, int h);
+
// Initializes VP8Io with custom setup, io and teardown functions. The default
// hooks will use the supplied 'params' as io->opaque handle.
void WebPInitCustomIo(WebPDecParams* const params, VP8Io* const io);
diff --git a/thirdparty/libwebp/src/demux/anim_decode.c b/thirdparty/libwebp/src/demux/anim_decode.c
index 05dd707371..2bf4dcffe0 100644
--- a/thirdparty/libwebp/src/demux/anim_decode.c
+++ b/thirdparty/libwebp/src/demux/anim_decode.c
@@ -87,11 +87,19 @@ WebPAnimDecoder* WebPAnimDecoderNewInternal(
int abi_version) {
WebPAnimDecoderOptions options;
WebPAnimDecoder* dec = NULL;
+ WebPBitstreamFeatures features;
if (webp_data == NULL ||
WEBP_ABI_IS_INCOMPATIBLE(abi_version, WEBP_DEMUX_ABI_VERSION)) {
return NULL;
}
+ // Validate the bitstream before doing expensive allocations. The demuxer may
+ // be more tolerant than the decoder.
+ if (WebPGetFeatures(webp_data->bytes, webp_data->size, &features) !=
+ VP8_STATUS_OK) {
+ return NULL;
+ }
+
// Note: calloc() so that the pointer members are initialized to NULL.
dec = (WebPAnimDecoder*)WebPSafeCalloc(1ULL, sizeof(*dec));
if (dec == NULL) goto Error;
@@ -145,7 +153,7 @@ static int ZeroFillCanvas(uint8_t* buf, uint32_t canvas_width,
uint32_t canvas_height) {
const uint64_t size =
(uint64_t)canvas_width * canvas_height * NUM_CHANNELS * sizeof(*buf);
- if (size != (size_t)size) return 0;
+ if (!CheckSizeOverflow(size)) return 0;
memset(buf, 0, (size_t)size);
return 1;
}
@@ -166,7 +174,7 @@ static void ZeroFillFrameRect(uint8_t* buf, int buf_stride, int x_offset,
static int CopyCanvas(const uint8_t* src, uint8_t* dst,
uint32_t width, uint32_t height) {
const uint64_t size = (uint64_t)width * height * NUM_CHANNELS;
- if (size != (size_t)size) return 0;
+ if (!CheckSizeOverflow(size)) return 0;
assert(src != NULL && dst != NULL);
memcpy(dst, src, (size_t)size);
return 1;
@@ -346,12 +354,15 @@ int WebPAnimDecoderGetNext(WebPAnimDecoder* dec,
{
const uint8_t* in = iter.fragment.bytes;
const size_t in_size = iter.fragment.size;
- const size_t out_offset =
- (iter.y_offset * width + iter.x_offset) * NUM_CHANNELS;
+ const uint32_t stride = width * NUM_CHANNELS; // at most 25 + 2 bits
+ const uint64_t out_offset = (uint64_t)iter.y_offset * stride +
+ (uint64_t)iter.x_offset * NUM_CHANNELS; // 53b
+ const uint64_t size = (uint64_t)iter.height * stride; // at most 25 + 27b
WebPDecoderConfig* const config = &dec->config_;
WebPRGBABuffer* const buf = &config->output.u.RGBA;
- buf->stride = NUM_CHANNELS * width;
- buf->size = buf->stride * iter.height;
+ if ((size_t)size != size) goto Error;
+ buf->stride = (int)stride;
+ buf->size = (size_t)size;
buf->rgba = dec->curr_frame_ + out_offset;
if (WebPDecode(in, in_size, config) != VP8_STATUS_OK) {
diff --git a/thirdparty/libwebp/src/demux/demux.c b/thirdparty/libwebp/src/demux/demux.c
index 1b3cc2e0a8..547a7725de 100644
--- a/thirdparty/libwebp/src/demux/demux.c
+++ b/thirdparty/libwebp/src/demux/demux.c
@@ -24,8 +24,8 @@
#include "src/webp/format_constants.h"
#define DMUX_MAJ_VERSION 1
-#define DMUX_MIN_VERSION 1
-#define DMUX_REV_VERSION 0
+#define DMUX_MIN_VERSION 2
+#define DMUX_REV_VERSION 1
typedef struct {
size_t start_; // start location of the data
@@ -221,12 +221,16 @@ static ParseStatus StoreFrame(int frame_num, uint32_t min_size,
const size_t chunk_start_offset = mem->start_;
const uint32_t fourcc = ReadLE32(mem);
const uint32_t payload_size = ReadLE32(mem);
- const uint32_t payload_size_padded = payload_size + (payload_size & 1);
- const size_t payload_available = (payload_size_padded > MemDataSize(mem))
- ? MemDataSize(mem) : payload_size_padded;
- const size_t chunk_size = CHUNK_HEADER_SIZE + payload_available;
+ uint32_t payload_size_padded;
+ size_t payload_available;
+ size_t chunk_size;
if (payload_size > MAX_CHUNK_PAYLOAD) return PARSE_ERROR;
+
+ payload_size_padded = payload_size + (payload_size & 1);
+ payload_available = (payload_size_padded > MemDataSize(mem))
+ ? MemDataSize(mem) : payload_size_padded;
+ chunk_size = CHUNK_HEADER_SIZE + payload_available;
if (SizeIsInvalid(mem, payload_size_padded)) return PARSE_ERROR;
if (payload_size_padded > MemDataSize(mem)) status = PARSE_NEED_MORE_DATA;
@@ -312,6 +316,7 @@ static ParseStatus ParseAnimationFrame(
int bits;
MemBuffer* const mem = &dmux->mem_;
Frame* frame;
+ size_t start_offset;
ParseStatus status =
NewFrame(mem, ANMF_CHUNK_SIZE, frame_chunk_size, &frame);
if (status != PARSE_OK) return status;
@@ -332,7 +337,11 @@ static ParseStatus ParseAnimationFrame(
// Store a frame only if the animation flag is set there is some data for
// this frame is available.
+ start_offset = mem->start_;
status = StoreFrame(dmux->num_frames_ + 1, anmf_payload_size, mem, frame);
+ if (status != PARSE_ERROR && mem->start_ - start_offset > anmf_payload_size) {
+ status = PARSE_ERROR;
+ }
if (status != PARSE_ERROR && is_animation && frame->frame_num_ > 0) {
added_frame = AddFrame(dmux, frame);
if (added_frame) {
@@ -446,9 +455,11 @@ static ParseStatus ParseVP8XChunks(WebPDemuxer* const dmux) {
const size_t chunk_start_offset = mem->start_;
const uint32_t fourcc = ReadLE32(mem);
const uint32_t chunk_size = ReadLE32(mem);
- const uint32_t chunk_size_padded = chunk_size + (chunk_size & 1);
+ uint32_t chunk_size_padded;
if (chunk_size > MAX_CHUNK_PAYLOAD) return PARSE_ERROR;
+
+ chunk_size_padded = chunk_size + (chunk_size & 1);
if (SizeIsInvalid(mem, chunk_size_padded)) return PARSE_ERROR;
switch (fourcc) {
diff --git a/thirdparty/libwebp/src/dsp/alpha_processing.c b/thirdparty/libwebp/src/dsp/alpha_processing.c
index 819d1391f2..1892929a43 100644
--- a/thirdparty/libwebp/src/dsp/alpha_processing.c
+++ b/thirdparty/libwebp/src/dsp/alpha_processing.c
@@ -157,7 +157,8 @@ void WebPMultARGBRow_C(uint32_t* const ptr, int width, int inverse) {
}
}
-void WebPMultRow_C(uint8_t* const ptr, const uint8_t* const alpha,
+void WebPMultRow_C(uint8_t* WEBP_RESTRICT const ptr,
+ const uint8_t* WEBP_RESTRICT const alpha,
int width, int inverse) {
int x;
for (x = 0; x < width; ++x) {
@@ -178,7 +179,8 @@ void WebPMultRow_C(uint8_t* const ptr, const uint8_t* const alpha,
#undef MFIX
void (*WebPMultARGBRow)(uint32_t* const ptr, int width, int inverse);
-void (*WebPMultRow)(uint8_t* const ptr, const uint8_t* const alpha,
+void (*WebPMultRow)(uint8_t* WEBP_RESTRICT const ptr,
+ const uint8_t* WEBP_RESTRICT const alpha,
int width, int inverse);
//------------------------------------------------------------------------------
@@ -193,8 +195,8 @@ void WebPMultARGBRows(uint8_t* ptr, int stride, int width, int num_rows,
}
}
-void WebPMultRows(uint8_t* ptr, int stride,
- const uint8_t* alpha, int alpha_stride,
+void WebPMultRows(uint8_t* WEBP_RESTRICT ptr, int stride,
+ const uint8_t* WEBP_RESTRICT alpha, int alpha_stride,
int width, int num_rows, int inverse) {
int n;
for (n = 0; n < num_rows; ++n) {
@@ -290,9 +292,9 @@ static void ApplyAlphaMultiply_16b_C(uint8_t* rgba4444,
}
#if !WEBP_NEON_OMIT_C_CODE
-static int DispatchAlpha_C(const uint8_t* alpha, int alpha_stride,
+static int DispatchAlpha_C(const uint8_t* WEBP_RESTRICT alpha, int alpha_stride,
int width, int height,
- uint8_t* dst, int dst_stride) {
+ uint8_t* WEBP_RESTRICT dst, int dst_stride) {
uint32_t alpha_mask = 0xff;
int i, j;
@@ -309,9 +311,10 @@ static int DispatchAlpha_C(const uint8_t* alpha, int alpha_stride,
return (alpha_mask != 0xff);
}
-static void DispatchAlphaToGreen_C(const uint8_t* alpha, int alpha_stride,
- int width, int height,
- uint32_t* dst, int dst_stride) {
+static void DispatchAlphaToGreen_C(const uint8_t* WEBP_RESTRICT alpha,
+ int alpha_stride, int width, int height,
+ uint32_t* WEBP_RESTRICT dst,
+ int dst_stride) {
int i, j;
for (j = 0; j < height; ++j) {
for (i = 0; i < width; ++i) {
@@ -322,9 +325,9 @@ static void DispatchAlphaToGreen_C(const uint8_t* alpha, int alpha_stride,
}
}
-static int ExtractAlpha_C(const uint8_t* argb, int argb_stride,
+static int ExtractAlpha_C(const uint8_t* WEBP_RESTRICT argb, int argb_stride,
int width, int height,
- uint8_t* alpha, int alpha_stride) {
+ uint8_t* WEBP_RESTRICT alpha, int alpha_stride) {
uint8_t alpha_mask = 0xff;
int i, j;
@@ -340,7 +343,8 @@ static int ExtractAlpha_C(const uint8_t* argb, int argb_stride,
return (alpha_mask == 0xff);
}
-static void ExtractGreen_C(const uint32_t* argb, uint8_t* alpha, int size) {
+static void ExtractGreen_C(const uint32_t* WEBP_RESTRICT argb,
+ uint8_t* WEBP_RESTRICT alpha, int size) {
int i;
for (i = 0; i < size; ++i) alpha[i] = argb[i] >> 8;
}
@@ -359,6 +363,11 @@ static int HasAlpha32b_C(const uint8_t* src, int length) {
return 0;
}
+static void AlphaReplace_C(uint32_t* src, int length, uint32_t color) {
+ int x;
+ for (x = 0; x < length; ++x) if ((src[x] >> 24) == 0) src[x] = color;
+}
+
//------------------------------------------------------------------------------
// Simple channel manipulations.
@@ -367,8 +376,11 @@ static WEBP_INLINE uint32_t MakeARGB32(int a, int r, int g, int b) {
}
#ifdef WORDS_BIGENDIAN
-static void PackARGB_C(const uint8_t* a, const uint8_t* r, const uint8_t* g,
- const uint8_t* b, int len, uint32_t* out) {
+static void PackARGB_C(const uint8_t* WEBP_RESTRICT a,
+ const uint8_t* WEBP_RESTRICT r,
+ const uint8_t* WEBP_RESTRICT g,
+ const uint8_t* WEBP_RESTRICT b,
+ int len, uint32_t* WEBP_RESTRICT out) {
int i;
for (i = 0; i < len; ++i) {
out[i] = MakeARGB32(a[4 * i], r[4 * i], g[4 * i], b[4 * i]);
@@ -376,8 +388,10 @@ static void PackARGB_C(const uint8_t* a, const uint8_t* r, const uint8_t* g,
}
#endif
-static void PackRGB_C(const uint8_t* r, const uint8_t* g, const uint8_t* b,
- int len, int step, uint32_t* out) {
+static void PackRGB_C(const uint8_t* WEBP_RESTRICT r,
+ const uint8_t* WEBP_RESTRICT g,
+ const uint8_t* WEBP_RESTRICT b,
+ int len, int step, uint32_t* WEBP_RESTRICT out) {
int i, offset = 0;
for (i = 0; i < len; ++i) {
out[i] = MakeARGB32(0xff, r[offset], g[offset], b[offset]);
@@ -387,19 +401,26 @@ static void PackRGB_C(const uint8_t* r, const uint8_t* g, const uint8_t* b,
void (*WebPApplyAlphaMultiply)(uint8_t*, int, int, int, int);
void (*WebPApplyAlphaMultiply4444)(uint8_t*, int, int, int);
-int (*WebPDispatchAlpha)(const uint8_t*, int, int, int, uint8_t*, int);
-void (*WebPDispatchAlphaToGreen)(const uint8_t*, int, int, int, uint32_t*, int);
-int (*WebPExtractAlpha)(const uint8_t*, int, int, int, uint8_t*, int);
-void (*WebPExtractGreen)(const uint32_t* argb, uint8_t* alpha, int size);
+int (*WebPDispatchAlpha)(const uint8_t* WEBP_RESTRICT, int, int, int,
+ uint8_t* WEBP_RESTRICT, int);
+void (*WebPDispatchAlphaToGreen)(const uint8_t* WEBP_RESTRICT, int, int, int,
+ uint32_t* WEBP_RESTRICT, int);
+int (*WebPExtractAlpha)(const uint8_t* WEBP_RESTRICT, int, int, int,
+ uint8_t* WEBP_RESTRICT, int);
+void (*WebPExtractGreen)(const uint32_t* WEBP_RESTRICT argb,
+ uint8_t* WEBP_RESTRICT alpha, int size);
#ifdef WORDS_BIGENDIAN
void (*WebPPackARGB)(const uint8_t* a, const uint8_t* r, const uint8_t* g,
const uint8_t* b, int, uint32_t*);
#endif
-void (*WebPPackRGB)(const uint8_t* r, const uint8_t* g, const uint8_t* b,
- int len, int step, uint32_t* out);
+void (*WebPPackRGB)(const uint8_t* WEBP_RESTRICT r,
+ const uint8_t* WEBP_RESTRICT g,
+ const uint8_t* WEBP_RESTRICT b,
+ int len, int step, uint32_t* WEBP_RESTRICT out);
int (*WebPHasAlpha8b)(const uint8_t* src, int length);
int (*WebPHasAlpha32b)(const uint8_t* src, int length);
+void (*WebPAlphaReplace)(uint32_t* src, int length, uint32_t color);
//------------------------------------------------------------------------------
// Init function
@@ -428,13 +449,14 @@ WEBP_DSP_INIT_FUNC(WebPInitAlphaProcessing) {
WebPHasAlpha8b = HasAlpha8b_C;
WebPHasAlpha32b = HasAlpha32b_C;
+ WebPAlphaReplace = AlphaReplace_C;
// If defined, use CPUInfo() to overwrite some pointers with faster versions.
if (VP8GetCPUInfo != NULL) {
-#if defined(WEBP_USE_SSE2)
+#if defined(WEBP_HAVE_SSE2)
if (VP8GetCPUInfo(kSSE2)) {
WebPInitAlphaProcessingSSE2();
-#if defined(WEBP_USE_SSE41)
+#if defined(WEBP_HAVE_SSE41)
if (VP8GetCPUInfo(kSSE4_1)) {
WebPInitAlphaProcessingSSE41();
}
@@ -448,7 +470,7 @@ WEBP_DSP_INIT_FUNC(WebPInitAlphaProcessing) {
#endif
}
-#if defined(WEBP_USE_NEON)
+#if defined(WEBP_HAVE_NEON)
if (WEBP_NEON_OMIT_C_CODE ||
(VP8GetCPUInfo != NULL && VP8GetCPUInfo(kNEON))) {
WebPInitAlphaProcessingNEON();
@@ -469,4 +491,5 @@ WEBP_DSP_INIT_FUNC(WebPInitAlphaProcessing) {
assert(WebPPackRGB != NULL);
assert(WebPHasAlpha8b != NULL);
assert(WebPHasAlpha32b != NULL);
+ assert(WebPAlphaReplace != NULL);
}
diff --git a/thirdparty/libwebp/src/dsp/alpha_processing_neon.c b/thirdparty/libwebp/src/dsp/alpha_processing_neon.c
index 9d55421704..9e0ace9421 100644
--- a/thirdparty/libwebp/src/dsp/alpha_processing_neon.c
+++ b/thirdparty/libwebp/src/dsp/alpha_processing_neon.c
@@ -80,9 +80,9 @@ static void ApplyAlphaMultiply_NEON(uint8_t* rgba, int alpha_first,
//------------------------------------------------------------------------------
-static int DispatchAlpha_NEON(const uint8_t* alpha, int alpha_stride,
- int width, int height,
- uint8_t* dst, int dst_stride) {
+static int DispatchAlpha_NEON(const uint8_t* WEBP_RESTRICT alpha,
+ int alpha_stride, int width, int height,
+ uint8_t* WEBP_RESTRICT dst, int dst_stride) {
uint32_t alpha_mask = 0xffffffffu;
uint8x8_t mask8 = vdup_n_u8(0xff);
uint32_t tmp[2];
@@ -112,9 +112,10 @@ static int DispatchAlpha_NEON(const uint8_t* alpha, int alpha_stride,
return (alpha_mask != 0xffffffffu);
}
-static void DispatchAlphaToGreen_NEON(const uint8_t* alpha, int alpha_stride,
- int width, int height,
- uint32_t* dst, int dst_stride) {
+static void DispatchAlphaToGreen_NEON(const uint8_t* WEBP_RESTRICT alpha,
+ int alpha_stride, int width, int height,
+ uint32_t* WEBP_RESTRICT dst,
+ int dst_stride) {
int i, j;
uint8x8x4_t greens; // leave A/R/B channels zero'd.
greens.val[0] = vdup_n_u8(0);
@@ -131,9 +132,9 @@ static void DispatchAlphaToGreen_NEON(const uint8_t* alpha, int alpha_stride,
}
}
-static int ExtractAlpha_NEON(const uint8_t* argb, int argb_stride,
+static int ExtractAlpha_NEON(const uint8_t* WEBP_RESTRICT argb, int argb_stride,
int width, int height,
- uint8_t* alpha, int alpha_stride) {
+ uint8_t* WEBP_RESTRICT alpha, int alpha_stride) {
uint32_t alpha_mask = 0xffffffffu;
uint8x8_t mask8 = vdup_n_u8(0xff);
uint32_t tmp[2];
@@ -161,8 +162,8 @@ static int ExtractAlpha_NEON(const uint8_t* argb, int argb_stride,
return (alpha_mask == 0xffffffffu);
}
-static void ExtractGreen_NEON(const uint32_t* argb,
- uint8_t* alpha, int size) {
+static void ExtractGreen_NEON(const uint32_t* WEBP_RESTRICT argb,
+ uint8_t* WEBP_RESTRICT alpha, int size) {
int i;
for (i = 0; i + 16 <= size; i += 16) {
const uint8x16x4_t rgbX = vld4q_u8((const uint8_t*)(argb + i));
diff --git a/thirdparty/libwebp/src/dsp/alpha_processing_sse2.c b/thirdparty/libwebp/src/dsp/alpha_processing_sse2.c
index 2871c56d84..a5f8c9f7c7 100644
--- a/thirdparty/libwebp/src/dsp/alpha_processing_sse2.c
+++ b/thirdparty/libwebp/src/dsp/alpha_processing_sse2.c
@@ -18,9 +18,9 @@
//------------------------------------------------------------------------------
-static int DispatchAlpha_SSE2(const uint8_t* alpha, int alpha_stride,
- int width, int height,
- uint8_t* dst, int dst_stride) {
+static int DispatchAlpha_SSE2(const uint8_t* WEBP_RESTRICT alpha,
+ int alpha_stride, int width, int height,
+ uint8_t* WEBP_RESTRICT dst, int dst_stride) {
// alpha_and stores an 'and' operation of all the alpha[] values. The final
// value is not 0xff if any of the alpha[] is not equal to 0xff.
uint32_t alpha_and = 0xff;
@@ -72,9 +72,10 @@ static int DispatchAlpha_SSE2(const uint8_t* alpha, int alpha_stride,
return (alpha_and != 0xff);
}
-static void DispatchAlphaToGreen_SSE2(const uint8_t* alpha, int alpha_stride,
- int width, int height,
- uint32_t* dst, int dst_stride) {
+static void DispatchAlphaToGreen_SSE2(const uint8_t* WEBP_RESTRICT alpha,
+ int alpha_stride, int width, int height,
+ uint32_t* WEBP_RESTRICT dst,
+ int dst_stride) {
int i, j;
const __m128i zero = _mm_setzero_si128();
const int limit = width & ~15;
@@ -98,9 +99,9 @@ static void DispatchAlphaToGreen_SSE2(const uint8_t* alpha, int alpha_stride,
}
}
-static int ExtractAlpha_SSE2(const uint8_t* argb, int argb_stride,
+static int ExtractAlpha_SSE2(const uint8_t* WEBP_RESTRICT argb, int argb_stride,
int width, int height,
- uint8_t* alpha, int alpha_stride) {
+ uint8_t* WEBP_RESTRICT alpha, int alpha_stride) {
// alpha_and stores an 'and' operation of all the alpha[] values. The final
// value is not 0xff if any of the alpha[] is not equal to 0xff.
uint32_t alpha_and = 0xff;
@@ -265,6 +266,27 @@ static int HasAlpha32b_SSE2(const uint8_t* src, int length) {
return 0;
}
+static void AlphaReplace_SSE2(uint32_t* src, int length, uint32_t color) {
+ const __m128i m_color = _mm_set1_epi32(color);
+ const __m128i zero = _mm_setzero_si128();
+ int i = 0;
+ for (; i + 8 <= length; i += 8) {
+ const __m128i a0 = _mm_loadu_si128((const __m128i*)(src + i + 0));
+ const __m128i a1 = _mm_loadu_si128((const __m128i*)(src + i + 4));
+ const __m128i b0 = _mm_srai_epi32(a0, 24);
+ const __m128i b1 = _mm_srai_epi32(a1, 24);
+ const __m128i c0 = _mm_cmpeq_epi32(b0, zero);
+ const __m128i c1 = _mm_cmpeq_epi32(b1, zero);
+ const __m128i d0 = _mm_and_si128(c0, m_color);
+ const __m128i d1 = _mm_and_si128(c1, m_color);
+ const __m128i e0 = _mm_andnot_si128(c0, a0);
+ const __m128i e1 = _mm_andnot_si128(c1, a1);
+ _mm_storeu_si128((__m128i*)(src + i + 0), _mm_or_si128(d0, e0));
+ _mm_storeu_si128((__m128i*)(src + i + 4), _mm_or_si128(d1, e1));
+ }
+ for (; i < length; ++i) if ((src[i] >> 24) == 0) src[i] = color;
+}
+
// -----------------------------------------------------------------------------
// Apply alpha value to rows
@@ -296,7 +318,8 @@ static void MultARGBRow_SSE2(uint32_t* const ptr, int width, int inverse) {
if (width > 0) WebPMultARGBRow_C(ptr + x, width, inverse);
}
-static void MultRow_SSE2(uint8_t* const ptr, const uint8_t* const alpha,
+static void MultRow_SSE2(uint8_t* WEBP_RESTRICT const ptr,
+ const uint8_t* WEBP_RESTRICT const alpha,
int width, int inverse) {
int x = 0;
if (!inverse) {
@@ -334,6 +357,7 @@ WEBP_TSAN_IGNORE_FUNCTION void WebPInitAlphaProcessingSSE2(void) {
WebPHasAlpha8b = HasAlpha8b_SSE2;
WebPHasAlpha32b = HasAlpha32b_SSE2;
+ WebPAlphaReplace = AlphaReplace_SSE2;
}
#else // !WEBP_USE_SSE2
diff --git a/thirdparty/libwebp/src/dsp/alpha_processing_sse41.c b/thirdparty/libwebp/src/dsp/alpha_processing_sse41.c
index 56040f9c88..cdf877ce49 100644
--- a/thirdparty/libwebp/src/dsp/alpha_processing_sse41.c
+++ b/thirdparty/libwebp/src/dsp/alpha_processing_sse41.c
@@ -19,9 +19,9 @@
//------------------------------------------------------------------------------
-static int ExtractAlpha_SSE41(const uint8_t* argb, int argb_stride,
- int width, int height,
- uint8_t* alpha, int alpha_stride) {
+static int ExtractAlpha_SSE41(const uint8_t* WEBP_RESTRICT argb,
+ int argb_stride, int width, int height,
+ uint8_t* WEBP_RESTRICT alpha, int alpha_stride) {
// alpha_and stores an 'and' operation of all the alpha[] values. The final
// value is not 0xff if any of the alpha[] is not equal to 0xff.
uint32_t alpha_and = 0xff;
diff --git a/thirdparty/libwebp/src/dsp/cost.c b/thirdparty/libwebp/src/dsp/cost.c
index cc681cdd4b..460ec4f2a7 100644
--- a/thirdparty/libwebp/src/dsp/cost.c
+++ b/thirdparty/libwebp/src/dsp/cost.c
@@ -395,12 +395,12 @@ WEBP_DSP_INIT_FUNC(VP8EncDspCostInit) {
VP8EncDspCostInitMIPSdspR2();
}
#endif
-#if defined(WEBP_USE_SSE2)
+#if defined(WEBP_HAVE_SSE2)
if (VP8GetCPUInfo(kSSE2)) {
VP8EncDspCostInitSSE2();
}
#endif
-#if defined(WEBP_USE_NEON)
+#if defined(WEBP_HAVE_NEON)
if (VP8GetCPUInfo(kNEON)) {
VP8EncDspCostInitNEON();
}
diff --git a/thirdparty/libwebp/src/dsp/cpu.c b/thirdparty/libwebp/src/dsp/cpu.c
index 0fa5b6a5ce..3145e190a4 100644
--- a/thirdparty/libwebp/src/dsp/cpu.c
+++ b/thirdparty/libwebp/src/dsp/cpu.c
@@ -55,12 +55,18 @@ static WEBP_INLINE void GetCPUInfo(int cpu_info[4], int info_type) {
: "=a"(cpu_info[0]), "=b"(cpu_info[1]), "=c"(cpu_info[2]), "=d"(cpu_info[3])
: "a"(info_type), "c"(0));
}
-#elif (defined(_M_X64) || defined(_M_IX86)) && \
- defined(_MSC_FULL_VER) && _MSC_FULL_VER >= 150030729 // >= VS2008 SP1
+#elif defined(_MSC_VER) && (defined(_M_X64) || defined(_M_IX86))
+
+#if defined(_MSC_FULL_VER) && _MSC_FULL_VER >= 150030729 // >= VS2008 SP1
#include <intrin.h>
#define GetCPUInfo(info, type) __cpuidex(info, type, 0) // set ecx=0
-#elif defined(WEBP_MSC_SSE2)
+#define WEBP_HAVE_MSC_CPUID
+#elif _MSC_VER > 1310
+#include <intrin.h>
#define GetCPUInfo __cpuid
+#define WEBP_HAVE_MSC_CPUID
+#endif
+
#endif
// NaCl has no support for xgetbv or the raw opcode.
@@ -94,7 +100,7 @@ static WEBP_INLINE uint64_t xgetbv(void) {
#define xgetbv() 0U // no AVX for older x64 or unrecognized toolchains.
#endif
-#if defined(__i386__) || defined(__x86_64__) || defined(WEBP_MSC_SSE2)
+#if defined(__i386__) || defined(__x86_64__) || defined(WEBP_HAVE_MSC_CPUID)
// helper function for run-time detection of slow SSSE3 platforms
static int CheckSlowModel(int info) {
@@ -179,9 +185,34 @@ static int AndroidCPUInfo(CPUFeature feature) {
return 0;
}
VP8CPUInfo VP8GetCPUInfo = AndroidCPUInfo;
-#elif defined(WEBP_USE_NEON)
-// define a dummy function to enable turning off NEON at runtime by setting
-// VP8DecGetCPUInfo = NULL
+#elif defined(EMSCRIPTEN) // also needs to be before generic NEON test
+// Use compile flags as an indicator of SIMD support instead of a runtime check.
+static int wasmCPUInfo(CPUFeature feature) {
+ switch (feature) {
+#ifdef WEBP_HAVE_SSE2
+ case kSSE2:
+ return 1;
+#endif
+#ifdef WEBP_HAVE_SSE41
+ case kSSE3:
+ case kSlowSSSE3:
+ case kSSE4_1:
+ return 1;
+#endif
+#ifdef WEBP_HAVE_NEON
+ case kNEON:
+ return 1;
+#endif
+ default:
+ break;
+ }
+ return 0;
+}
+VP8CPUInfo VP8GetCPUInfo = wasmCPUInfo;
+#elif defined(WEBP_HAVE_NEON)
+// In most cases this function doesn't check for NEON support (it's assumed by
+// the configuration), but enables turning off NEON at runtime, for testing
+// purposes, by setting VP8DecGetCPUInfo = NULL.
static int armCPUInfo(CPUFeature feature) {
if (feature != kNEON) return 0;
#if defined(__linux__) && defined(WEBP_HAVE_NEON_RTCD)
diff --git a/thirdparty/libwebp/src/dsp/dec.c b/thirdparty/libwebp/src/dsp/dec.c
index 1119842dd3..537c701282 100644
--- a/thirdparty/libwebp/src/dsp/dec.c
+++ b/thirdparty/libwebp/src/dsp/dec.c
@@ -807,10 +807,10 @@ WEBP_DSP_INIT_FUNC(VP8DspInit) {
// If defined, use CPUInfo() to overwrite some pointers with faster versions.
if (VP8GetCPUInfo != NULL) {
-#if defined(WEBP_USE_SSE2)
+#if defined(WEBP_HAVE_SSE2)
if (VP8GetCPUInfo(kSSE2)) {
VP8DspInitSSE2();
-#if defined(WEBP_USE_SSE41)
+#if defined(WEBP_HAVE_SSE41)
if (VP8GetCPUInfo(kSSE4_1)) {
VP8DspInitSSE41();
}
@@ -834,7 +834,7 @@ WEBP_DSP_INIT_FUNC(VP8DspInit) {
#endif
}
-#if defined(WEBP_USE_NEON)
+#if defined(WEBP_HAVE_NEON)
if (WEBP_NEON_OMIT_C_CODE ||
(VP8GetCPUInfo != NULL && VP8GetCPUInfo(kNEON))) {
VP8DspInitNEON();
diff --git a/thirdparty/libwebp/src/dsp/dec_neon.c b/thirdparty/libwebp/src/dsp/dec_neon.c
index 239ec4167e..fa851707e2 100644
--- a/thirdparty/libwebp/src/dsp/dec_neon.c
+++ b/thirdparty/libwebp/src/dsp/dec_neon.c
@@ -1283,12 +1283,12 @@ static void DC4_NEON(uint8_t* dst) { // DC
const uint8x8_t A = vld1_u8(dst - BPS); // top row
const uint16x4_t p0 = vpaddl_u8(A); // cascading summation of the top
const uint16x4_t p1 = vpadd_u16(p0, p0);
- const uint16x8_t L0 = vmovl_u8(vld1_u8(dst + 0 * BPS - 1));
- const uint16x8_t L1 = vmovl_u8(vld1_u8(dst + 1 * BPS - 1));
- const uint16x8_t L2 = vmovl_u8(vld1_u8(dst + 2 * BPS - 1));
- const uint16x8_t L3 = vmovl_u8(vld1_u8(dst + 3 * BPS - 1));
- const uint16x8_t s0 = vaddq_u16(L0, L1);
- const uint16x8_t s1 = vaddq_u16(L2, L3);
+ const uint8x8_t L0 = vld1_u8(dst + 0 * BPS - 1);
+ const uint8x8_t L1 = vld1_u8(dst + 1 * BPS - 1);
+ const uint8x8_t L2 = vld1_u8(dst + 2 * BPS - 1);
+ const uint8x8_t L3 = vld1_u8(dst + 3 * BPS - 1);
+ const uint16x8_t s0 = vaddl_u8(L0, L1);
+ const uint16x8_t s1 = vaddl_u8(L2, L3);
const uint16x8_t s01 = vaddq_u16(s0, s1);
const uint16x8_t sum = vaddq_u16(s01, vcombine_u16(p1, p1));
const uint8x8_t dc0 = vrshrn_n_u16(sum, 3); // (sum + 4) >> 3
@@ -1429,8 +1429,7 @@ static WEBP_INLINE void DC8_NEON(uint8_t* dst, int do_top, int do_left) {
if (do_top) {
const uint8x8_t A = vld1_u8(dst - BPS); // top row
#if defined(__aarch64__)
- const uint16x8_t B = vmovl_u8(A);
- const uint16_t p2 = vaddvq_u16(B);
+ const uint16_t p2 = vaddlv_u8(A);
sum_top = vdupq_n_u16(p2);
#else
const uint16x4_t p0 = vpaddl_u8(A); // cascading summation of the top
@@ -1441,18 +1440,18 @@ static WEBP_INLINE void DC8_NEON(uint8_t* dst, int do_top, int do_left) {
}
if (do_left) {
- const uint16x8_t L0 = vmovl_u8(vld1_u8(dst + 0 * BPS - 1));
- const uint16x8_t L1 = vmovl_u8(vld1_u8(dst + 1 * BPS - 1));
- const uint16x8_t L2 = vmovl_u8(vld1_u8(dst + 2 * BPS - 1));
- const uint16x8_t L3 = vmovl_u8(vld1_u8(dst + 3 * BPS - 1));
- const uint16x8_t L4 = vmovl_u8(vld1_u8(dst + 4 * BPS - 1));
- const uint16x8_t L5 = vmovl_u8(vld1_u8(dst + 5 * BPS - 1));
- const uint16x8_t L6 = vmovl_u8(vld1_u8(dst + 6 * BPS - 1));
- const uint16x8_t L7 = vmovl_u8(vld1_u8(dst + 7 * BPS - 1));
- const uint16x8_t s0 = vaddq_u16(L0, L1);
- const uint16x8_t s1 = vaddq_u16(L2, L3);
- const uint16x8_t s2 = vaddq_u16(L4, L5);
- const uint16x8_t s3 = vaddq_u16(L6, L7);
+ const uint8x8_t L0 = vld1_u8(dst + 0 * BPS - 1);
+ const uint8x8_t L1 = vld1_u8(dst + 1 * BPS - 1);
+ const uint8x8_t L2 = vld1_u8(dst + 2 * BPS - 1);
+ const uint8x8_t L3 = vld1_u8(dst + 3 * BPS - 1);
+ const uint8x8_t L4 = vld1_u8(dst + 4 * BPS - 1);
+ const uint8x8_t L5 = vld1_u8(dst + 5 * BPS - 1);
+ const uint8x8_t L6 = vld1_u8(dst + 6 * BPS - 1);
+ const uint8x8_t L7 = vld1_u8(dst + 7 * BPS - 1);
+ const uint16x8_t s0 = vaddl_u8(L0, L1);
+ const uint16x8_t s1 = vaddl_u8(L2, L3);
+ const uint16x8_t s2 = vaddl_u8(L4, L5);
+ const uint16x8_t s3 = vaddl_u8(L6, L7);
const uint16x8_t s01 = vaddq_u16(s0, s1);
const uint16x8_t s23 = vaddq_u16(s2, s3);
sum_left = vaddq_u16(s01, s23);
@@ -1512,29 +1511,34 @@ static WEBP_INLINE void DC16_NEON(uint8_t* dst, int do_top, int do_left) {
if (do_top) {
const uint8x16_t A = vld1q_u8(dst - BPS); // top row
+#if defined(__aarch64__)
+ const uint16_t p3 = vaddlvq_u8(A);
+ sum_top = vdupq_n_u16(p3);
+#else
const uint16x8_t p0 = vpaddlq_u8(A); // cascading summation of the top
const uint16x4_t p1 = vadd_u16(vget_low_u16(p0), vget_high_u16(p0));
const uint16x4_t p2 = vpadd_u16(p1, p1);
const uint16x4_t p3 = vpadd_u16(p2, p2);
sum_top = vcombine_u16(p3, p3);
+#endif
}
if (do_left) {
int i;
sum_left = vdupq_n_u16(0);
for (i = 0; i < 16; i += 8) {
- const uint16x8_t L0 = vmovl_u8(vld1_u8(dst + (i + 0) * BPS - 1));
- const uint16x8_t L1 = vmovl_u8(vld1_u8(dst + (i + 1) * BPS - 1));
- const uint16x8_t L2 = vmovl_u8(vld1_u8(dst + (i + 2) * BPS - 1));
- const uint16x8_t L3 = vmovl_u8(vld1_u8(dst + (i + 3) * BPS - 1));
- const uint16x8_t L4 = vmovl_u8(vld1_u8(dst + (i + 4) * BPS - 1));
- const uint16x8_t L5 = vmovl_u8(vld1_u8(dst + (i + 5) * BPS - 1));
- const uint16x8_t L6 = vmovl_u8(vld1_u8(dst + (i + 6) * BPS - 1));
- const uint16x8_t L7 = vmovl_u8(vld1_u8(dst + (i + 7) * BPS - 1));
- const uint16x8_t s0 = vaddq_u16(L0, L1);
- const uint16x8_t s1 = vaddq_u16(L2, L3);
- const uint16x8_t s2 = vaddq_u16(L4, L5);
- const uint16x8_t s3 = vaddq_u16(L6, L7);
+ const uint8x8_t L0 = vld1_u8(dst + (i + 0) * BPS - 1);
+ const uint8x8_t L1 = vld1_u8(dst + (i + 1) * BPS - 1);
+ const uint8x8_t L2 = vld1_u8(dst + (i + 2) * BPS - 1);
+ const uint8x8_t L3 = vld1_u8(dst + (i + 3) * BPS - 1);
+ const uint8x8_t L4 = vld1_u8(dst + (i + 4) * BPS - 1);
+ const uint8x8_t L5 = vld1_u8(dst + (i + 5) * BPS - 1);
+ const uint8x8_t L6 = vld1_u8(dst + (i + 6) * BPS - 1);
+ const uint8x8_t L7 = vld1_u8(dst + (i + 7) * BPS - 1);
+ const uint16x8_t s0 = vaddl_u8(L0, L1);
+ const uint16x8_t s1 = vaddl_u8(L2, L3);
+ const uint16x8_t s2 = vaddl_u8(L4, L5);
+ const uint16x8_t s3 = vaddl_u8(L6, L7);
const uint16x8_t s01 = vaddq_u16(s0, s1);
const uint16x8_t s23 = vaddq_u16(s2, s3);
const uint16x8_t sum = vaddq_u16(s01, s23);
diff --git a/thirdparty/libwebp/src/dsp/dsp.h b/thirdparty/libwebp/src/dsp/dsp.h
index a784de334a..513e159bb3 100644
--- a/thirdparty/libwebp/src/dsp/dsp.h
+++ b/thirdparty/libwebp/src/dsp/dsp.h
@@ -27,6 +27,23 @@ extern "C" {
#define BPS 32 // this is the common stride for enc/dec
//------------------------------------------------------------------------------
+// WEBP_RESTRICT
+
+// Declares a pointer with the restrict type qualifier if available.
+// This allows code to hint to the compiler that only this pointer references a
+// particular object or memory region within the scope of the block in which it
+// is declared. This may allow for improved optimizations due to the lack of
+// pointer aliasing. See also:
+// https://en.cppreference.com/w/c/language/restrict
+#if defined(__GNUC__)
+#define WEBP_RESTRICT __restrict__
+#elif defined(_MSC_VER)
+#define WEBP_RESTRICT __restrict
+#else
+#define WEBP_RESTRICT
+#endif
+
+//------------------------------------------------------------------------------
// CPU detection
#if defined(__GNUC__)
@@ -51,9 +68,7 @@ extern "C" {
# define __has_builtin(x) 0
#endif
-// for now, none of the optimizations below are available in emscripten
-#if !defined(EMSCRIPTEN)
-
+#if !defined(HAVE_CONFIG_H)
#if defined(_MSC_VER) && _MSC_VER > 1310 && \
(defined(_M_X64) || defined(_M_IX86))
#define WEBP_MSC_SSE2 // Visual C++ SSE2 targets
@@ -63,23 +78,37 @@ extern "C" {
(defined(_M_X64) || defined(_M_IX86))
#define WEBP_MSC_SSE41 // Visual C++ SSE4.1 targets
#endif
+#endif
// WEBP_HAVE_* are used to indicate the presence of the instruction set in dsp
// files without intrinsics, allowing the corresponding Init() to be called.
// Files containing intrinsics will need to be built targeting the instruction
// set so should succeed on one of the earlier tests.
-#if defined(__SSE2__) || defined(WEBP_MSC_SSE2) || defined(WEBP_HAVE_SSE2)
+#if (defined(__SSE2__) || defined(WEBP_MSC_SSE2)) && \
+ (!defined(HAVE_CONFIG_H) || defined(WEBP_HAVE_SSE2))
#define WEBP_USE_SSE2
#endif
-#if defined(__SSE4_1__) || defined(WEBP_MSC_SSE41) || defined(WEBP_HAVE_SSE41)
+#if defined(WEBP_USE_SSE2) && !defined(WEBP_HAVE_SSE2)
+#define WEBP_HAVE_SSE2
+#endif
+
+#if (defined(__SSE4_1__) || defined(WEBP_MSC_SSE41)) && \
+ (!defined(HAVE_CONFIG_H) || defined(WEBP_HAVE_SSE41))
#define WEBP_USE_SSE41
#endif
+#if defined(WEBP_USE_SSE41) && !defined(WEBP_HAVE_SSE41)
+#define WEBP_HAVE_SSE41
+#endif
+
+#undef WEBP_MSC_SSE41
+#undef WEBP_MSC_SSE2
+
// The intrinsics currently cause compiler errors with arm-nacl-gcc and the
// inline assembly would need to be modified for use with Native Client.
-#if (defined(__ARM_NEON__) || \
- defined(__aarch64__) || defined(WEBP_HAVE_NEON)) && \
+#if ((defined(__ARM_NEON__) || defined(__aarch64__)) && \
+ (!defined(HAVE_CONFIG_H) || defined(WEBP_HAVE_NEON))) && \
!defined(__native_client__)
#define WEBP_USE_NEON
#endif
@@ -95,6 +124,10 @@ extern "C" {
#define WEBP_USE_INTRINSICS
#endif
+#if defined(WEBP_USE_NEON) && !defined(WEBP_HAVE_NEON)
+#define WEBP_HAVE_NEON
+#endif
+
#if defined(__mips__) && !defined(__mips64) && \
defined(__mips_isa_rev) && (__mips_isa_rev >= 1) && (__mips_isa_rev < 6)
#define WEBP_USE_MIPS32
@@ -110,13 +143,11 @@ extern "C" {
#define WEBP_USE_MSA
#endif
-#endif /* EMSCRIPTEN */
-
#ifndef WEBP_DSP_OMIT_C_CODE
#define WEBP_DSP_OMIT_C_CODE 1
#endif
-#if (defined(__aarch64__) || defined(__ARM_NEON__)) && WEBP_DSP_OMIT_C_CODE
+#if defined(WEBP_USE_NEON) && WEBP_DSP_OMIT_C_CODE
#define WEBP_NEON_OMIT_C_CODE 1
#else
#define WEBP_NEON_OMIT_C_CODE 0
@@ -193,6 +224,12 @@ extern "C" {
#endif
#endif
+// If 'ptr' is NULL, returns NULL. Otherwise returns 'ptr + off'.
+// Prevents undefined behavior sanitizer nullptr-with-nonzero-offset warning.
+#if !defined(WEBP_OFFSET_PTR)
+#define WEBP_OFFSET_PTR(ptr, off) (((ptr) == NULL) ? NULL : ((ptr) + (off)))
+#endif
+
// Regularize the definition of WEBP_SWAP_16BIT_CSP (backward compatibility)
#if !defined(WEBP_SWAP_16BIT_CSP)
#define WEBP_SWAP_16BIT_CSP 0
@@ -572,26 +609,29 @@ extern void (*WebPApplyAlphaMultiply4444)(
// Dispatch the values from alpha[] plane to the ARGB destination 'dst'.
// Returns true if alpha[] plane has non-trivial values different from 0xff.
-extern int (*WebPDispatchAlpha)(const uint8_t* alpha, int alpha_stride,
- int width, int height,
- uint8_t* dst, int dst_stride);
+extern int (*WebPDispatchAlpha)(const uint8_t* WEBP_RESTRICT alpha,
+ int alpha_stride, int width, int height,
+ uint8_t* WEBP_RESTRICT dst, int dst_stride);
// Transfer packed 8b alpha[] values to green channel in dst[], zero'ing the
// A/R/B values. 'dst_stride' is the stride for dst[] in uint32_t units.
-extern void (*WebPDispatchAlphaToGreen)(const uint8_t* alpha, int alpha_stride,
- int width, int height,
- uint32_t* dst, int dst_stride);
+extern void (*WebPDispatchAlphaToGreen)(const uint8_t* WEBP_RESTRICT alpha,
+ int alpha_stride, int width, int height,
+ uint32_t* WEBP_RESTRICT dst,
+ int dst_stride);
// Extract the alpha values from 32b values in argb[] and pack them into alpha[]
// (this is the opposite of WebPDispatchAlpha).
// Returns true if there's only trivial 0xff alpha values.
-extern int (*WebPExtractAlpha)(const uint8_t* argb, int argb_stride,
- int width, int height,
- uint8_t* alpha, int alpha_stride);
+extern int (*WebPExtractAlpha)(const uint8_t* WEBP_RESTRICT argb,
+ int argb_stride, int width, int height,
+ uint8_t* WEBP_RESTRICT alpha,
+ int alpha_stride);
// Extract the green values from 32b values in argb[] and pack them into alpha[]
// (this is the opposite of WebPDispatchAlphaToGreen).
-extern void (*WebPExtractGreen)(const uint32_t* argb, uint8_t* alpha, int size);
+extern void (*WebPExtractGreen)(const uint32_t* WEBP_RESTRICT argb,
+ uint8_t* WEBP_RESTRICT alpha, int size);
// Pre-Multiply operation transforms x into x * A / 255 (where x=Y,R,G or B).
// Un-Multiply operation transforms x into x * 255 / A.
@@ -604,34 +644,42 @@ void WebPMultARGBRows(uint8_t* ptr, int stride, int width, int num_rows,
int inverse);
// Same for a row of single values, with side alpha values.
-extern void (*WebPMultRow)(uint8_t* const ptr, const uint8_t* const alpha,
+extern void (*WebPMultRow)(uint8_t* WEBP_RESTRICT const ptr,
+ const uint8_t* WEBP_RESTRICT const alpha,
int width, int inverse);
// Same a WebPMultRow(), but for several 'num_rows' rows.
-void WebPMultRows(uint8_t* ptr, int stride,
- const uint8_t* alpha, int alpha_stride,
+void WebPMultRows(uint8_t* WEBP_RESTRICT ptr, int stride,
+ const uint8_t* WEBP_RESTRICT alpha, int alpha_stride,
int width, int num_rows, int inverse);
// Plain-C versions, used as fallback by some implementations.
-void WebPMultRow_C(uint8_t* const ptr, const uint8_t* const alpha,
+void WebPMultRow_C(uint8_t* WEBP_RESTRICT const ptr,
+ const uint8_t* WEBP_RESTRICT const alpha,
int width, int inverse);
void WebPMultARGBRow_C(uint32_t* const ptr, int width, int inverse);
#ifdef WORDS_BIGENDIAN
// ARGB packing function: a/r/g/b input is rgba or bgra order.
-extern void (*WebPPackARGB)(const uint8_t* a, const uint8_t* r,
- const uint8_t* g, const uint8_t* b, int len,
- uint32_t* out);
+extern void (*WebPPackARGB)(const uint8_t* WEBP_RESTRICT a,
+ const uint8_t* WEBP_RESTRICT r,
+ const uint8_t* WEBP_RESTRICT g,
+ const uint8_t* WEBP_RESTRICT b,
+ int len, uint32_t* WEBP_RESTRICT out);
#endif
// RGB packing function. 'step' can be 3 or 4. r/g/b input is rgb or bgr order.
-extern void (*WebPPackRGB)(const uint8_t* r, const uint8_t* g, const uint8_t* b,
- int len, int step, uint32_t* out);
+extern void (*WebPPackRGB)(const uint8_t* WEBP_RESTRICT r,
+ const uint8_t* WEBP_RESTRICT g,
+ const uint8_t* WEBP_RESTRICT b,
+ int len, int step, uint32_t* WEBP_RESTRICT out);
// This function returns true if src[i] contains a value different from 0xff.
extern int (*WebPHasAlpha8b)(const uint8_t* src, int length);
// This function returns true if src[4*i] contains a value different from 0xff.
extern int (*WebPHasAlpha32b)(const uint8_t* src, int length);
+// replaces transparent values in src[] by 'color'.
+extern void (*WebPAlphaReplace)(uint32_t* src, int length, uint32_t color);
// To be called first before using the above.
void WebPInitAlphaProcessing(void);
diff --git a/thirdparty/libwebp/src/dsp/enc.c b/thirdparty/libwebp/src/dsp/enc.c
index 2fddbc4c52..ea47a3fd95 100644
--- a/thirdparty/libwebp/src/dsp/enc.c
+++ b/thirdparty/libwebp/src/dsp/enc.c
@@ -773,10 +773,10 @@ WEBP_DSP_INIT_FUNC(VP8EncDspInit) {
// If defined, use CPUInfo() to overwrite some pointers with faster versions.
if (VP8GetCPUInfo != NULL) {
-#if defined(WEBP_USE_SSE2)
+#if defined(WEBP_HAVE_SSE2)
if (VP8GetCPUInfo(kSSE2)) {
VP8EncDspInitSSE2();
-#if defined(WEBP_USE_SSE41)
+#if defined(WEBP_HAVE_SSE41)
if (VP8GetCPUInfo(kSSE4_1)) {
VP8EncDspInitSSE41();
}
@@ -800,7 +800,7 @@ WEBP_DSP_INIT_FUNC(VP8EncDspInit) {
#endif
}
-#if defined(WEBP_USE_NEON)
+#if defined(WEBP_HAVE_NEON)
if (WEBP_NEON_OMIT_C_CODE ||
(VP8GetCPUInfo != NULL && VP8GetCPUInfo(kNEON))) {
VP8EncDspInitNEON();
diff --git a/thirdparty/libwebp/src/dsp/filters.c b/thirdparty/libwebp/src/dsp/filters.c
index 9e910d99c9..4506567ba3 100644
--- a/thirdparty/libwebp/src/dsp/filters.c
+++ b/thirdparty/libwebp/src/dsp/filters.c
@@ -254,7 +254,7 @@ WEBP_DSP_INIT_FUNC(VP8FiltersInit) {
#endif
if (VP8GetCPUInfo != NULL) {
-#if defined(WEBP_USE_SSE2)
+#if defined(WEBP_HAVE_SSE2)
if (VP8GetCPUInfo(kSSE2)) {
VP8FiltersInitSSE2();
}
@@ -271,7 +271,7 @@ WEBP_DSP_INIT_FUNC(VP8FiltersInit) {
#endif
}
-#if defined(WEBP_USE_NEON)
+#if defined(WEBP_HAVE_NEON)
if (WEBP_NEON_OMIT_C_CODE ||
(VP8GetCPUInfo != NULL && VP8GetCPUInfo(kNEON))) {
VP8FiltersInitNEON();
diff --git a/thirdparty/libwebp/src/dsp/filters_sse2.c b/thirdparty/libwebp/src/dsp/filters_sse2.c
index 4b3f2d020f..5c33ec15e2 100644
--- a/thirdparty/libwebp/src/dsp/filters_sse2.c
+++ b/thirdparty/libwebp/src/dsp/filters_sse2.c
@@ -320,7 +320,12 @@ extern void VP8FiltersInitSSE2(void);
WEBP_TSAN_IGNORE_FUNCTION void VP8FiltersInitSSE2(void) {
WebPUnfilters[WEBP_FILTER_HORIZONTAL] = HorizontalUnfilter_SSE2;
+#if defined(CHROMIUM)
+ // TODO(crbug.com/654974)
+ (void)VerticalUnfilter_SSE2;
+#else
WebPUnfilters[WEBP_FILTER_VERTICAL] = VerticalUnfilter_SSE2;
+#endif
WebPUnfilters[WEBP_FILTER_GRADIENT] = GradientUnfilter_SSE2;
WebPFilters[WEBP_FILTER_HORIZONTAL] = HorizontalFilter_SSE2;
diff --git a/thirdparty/libwebp/src/dsp/lossless.c b/thirdparty/libwebp/src/dsp/lossless.c
index aad5f43ec9..d8bbb02b35 100644
--- a/thirdparty/libwebp/src/dsp/lossless.c
+++ b/thirdparty/libwebp/src/dsp/lossless.c
@@ -107,62 +107,62 @@ static WEBP_INLINE uint32_t Select(uint32_t a, uint32_t b, uint32_t c) {
//------------------------------------------------------------------------------
// Predictors
-static uint32_t Predictor0_C(uint32_t left, const uint32_t* const top) {
+uint32_t VP8LPredictor0_C(uint32_t left, const uint32_t* const top) {
(void)top;
(void)left;
return ARGB_BLACK;
}
-static uint32_t Predictor1_C(uint32_t left, const uint32_t* const top) {
+uint32_t VP8LPredictor1_C(uint32_t left, const uint32_t* const top) {
(void)top;
return left;
}
-static uint32_t Predictor2_C(uint32_t left, const uint32_t* const top) {
+uint32_t VP8LPredictor2_C(uint32_t left, const uint32_t* const top) {
(void)left;
return top[0];
}
-static uint32_t Predictor3_C(uint32_t left, const uint32_t* const top) {
+uint32_t VP8LPredictor3_C(uint32_t left, const uint32_t* const top) {
(void)left;
return top[1];
}
-static uint32_t Predictor4_C(uint32_t left, const uint32_t* const top) {
+uint32_t VP8LPredictor4_C(uint32_t left, const uint32_t* const top) {
(void)left;
return top[-1];
}
-static uint32_t Predictor5_C(uint32_t left, const uint32_t* const top) {
+uint32_t VP8LPredictor5_C(uint32_t left, const uint32_t* const top) {
const uint32_t pred = Average3(left, top[0], top[1]);
return pred;
}
-static uint32_t Predictor6_C(uint32_t left, const uint32_t* const top) {
+uint32_t VP8LPredictor6_C(uint32_t left, const uint32_t* const top) {
const uint32_t pred = Average2(left, top[-1]);
return pred;
}
-static uint32_t Predictor7_C(uint32_t left, const uint32_t* const top) {
+uint32_t VP8LPredictor7_C(uint32_t left, const uint32_t* const top) {
const uint32_t pred = Average2(left, top[0]);
return pred;
}
-static uint32_t Predictor8_C(uint32_t left, const uint32_t* const top) {
+uint32_t VP8LPredictor8_C(uint32_t left, const uint32_t* const top) {
const uint32_t pred = Average2(top[-1], top[0]);
(void)left;
return pred;
}
-static uint32_t Predictor9_C(uint32_t left, const uint32_t* const top) {
+uint32_t VP8LPredictor9_C(uint32_t left, const uint32_t* const top) {
const uint32_t pred = Average2(top[0], top[1]);
(void)left;
return pred;
}
-static uint32_t Predictor10_C(uint32_t left, const uint32_t* const top) {
+uint32_t VP8LPredictor10_C(uint32_t left, const uint32_t* const top) {
const uint32_t pred = Average4(left, top[-1], top[0], top[1]);
return pred;
}
-static uint32_t Predictor11_C(uint32_t left, const uint32_t* const top) {
+uint32_t VP8LPredictor11_C(uint32_t left, const uint32_t* const top) {
const uint32_t pred = Select(top[0], left, top[-1]);
return pred;
}
-static uint32_t Predictor12_C(uint32_t left, const uint32_t* const top) {
+uint32_t VP8LPredictor12_C(uint32_t left, const uint32_t* const top) {
const uint32_t pred = ClampedAddSubtractFull(left, top[0], top[-1]);
return pred;
}
-static uint32_t Predictor13_C(uint32_t left, const uint32_t* const top) {
+uint32_t VP8LPredictor13_C(uint32_t left, const uint32_t* const top) {
const uint32_t pred = ClampedAddSubtractHalf(left, top[0], top[-1]);
return pred;
}
@@ -182,18 +182,18 @@ static void PredictorAdd1_C(const uint32_t* in, const uint32_t* upper,
out[i] = left = VP8LAddPixels(in[i], left);
}
}
-GENERATE_PREDICTOR_ADD(Predictor2_C, PredictorAdd2_C)
-GENERATE_PREDICTOR_ADD(Predictor3_C, PredictorAdd3_C)
-GENERATE_PREDICTOR_ADD(Predictor4_C, PredictorAdd4_C)
-GENERATE_PREDICTOR_ADD(Predictor5_C, PredictorAdd5_C)
-GENERATE_PREDICTOR_ADD(Predictor6_C, PredictorAdd6_C)
-GENERATE_PREDICTOR_ADD(Predictor7_C, PredictorAdd7_C)
-GENERATE_PREDICTOR_ADD(Predictor8_C, PredictorAdd8_C)
-GENERATE_PREDICTOR_ADD(Predictor9_C, PredictorAdd9_C)
-GENERATE_PREDICTOR_ADD(Predictor10_C, PredictorAdd10_C)
-GENERATE_PREDICTOR_ADD(Predictor11_C, PredictorAdd11_C)
-GENERATE_PREDICTOR_ADD(Predictor12_C, PredictorAdd12_C)
-GENERATE_PREDICTOR_ADD(Predictor13_C, PredictorAdd13_C)
+GENERATE_PREDICTOR_ADD(VP8LPredictor2_C, PredictorAdd2_C)
+GENERATE_PREDICTOR_ADD(VP8LPredictor3_C, PredictorAdd3_C)
+GENERATE_PREDICTOR_ADD(VP8LPredictor4_C, PredictorAdd4_C)
+GENERATE_PREDICTOR_ADD(VP8LPredictor5_C, PredictorAdd5_C)
+GENERATE_PREDICTOR_ADD(VP8LPredictor6_C, PredictorAdd6_C)
+GENERATE_PREDICTOR_ADD(VP8LPredictor7_C, PredictorAdd7_C)
+GENERATE_PREDICTOR_ADD(VP8LPredictor8_C, PredictorAdd8_C)
+GENERATE_PREDICTOR_ADD(VP8LPredictor9_C, PredictorAdd9_C)
+GENERATE_PREDICTOR_ADD(VP8LPredictor10_C, PredictorAdd10_C)
+GENERATE_PREDICTOR_ADD(VP8LPredictor11_C, PredictorAdd11_C)
+GENERATE_PREDICTOR_ADD(VP8LPredictor12_C, PredictorAdd12_C)
+GENERATE_PREDICTOR_ADD(VP8LPredictor13_C, PredictorAdd13_C)
//------------------------------------------------------------------------------
@@ -562,7 +562,6 @@ VP8LPredictorFunc VP8LPredictors[16];
// exposed plain-C implementations
VP8LPredictorAddSubFunc VP8LPredictorsAdd_C[16];
-VP8LPredictorFunc VP8LPredictors_C[16];
VP8LTransformColorInverseFunc VP8LTransformColorInverse;
@@ -576,6 +575,7 @@ VP8LMapARGBFunc VP8LMapColor32b;
VP8LMapAlphaFunc VP8LMapColor8b;
extern void VP8LDspInitSSE2(void);
+extern void VP8LDspInitSSE41(void);
extern void VP8LDspInitNEON(void);
extern void VP8LDspInitMIPSdspR2(void);
extern void VP8LDspInitMSA(void);
@@ -600,8 +600,7 @@ extern void VP8LDspInitMSA(void);
} while (0);
WEBP_DSP_INIT_FUNC(VP8LDspInit) {
- COPY_PREDICTOR_ARRAY(Predictor, VP8LPredictors)
- COPY_PREDICTOR_ARRAY(Predictor, VP8LPredictors_C)
+ COPY_PREDICTOR_ARRAY(VP8LPredictor, VP8LPredictors)
COPY_PREDICTOR_ARRAY(PredictorAdd, VP8LPredictorsAdd)
COPY_PREDICTOR_ARRAY(PredictorAdd, VP8LPredictorsAdd_C)
@@ -623,9 +622,14 @@ WEBP_DSP_INIT_FUNC(VP8LDspInit) {
// If defined, use CPUInfo() to overwrite some pointers with faster versions.
if (VP8GetCPUInfo != NULL) {
-#if defined(WEBP_USE_SSE2)
+#if defined(WEBP_HAVE_SSE2)
if (VP8GetCPUInfo(kSSE2)) {
VP8LDspInitSSE2();
+#if defined(WEBP_HAVE_SSE41)
+ if (VP8GetCPUInfo(kSSE4_1)) {
+ VP8LDspInitSSE41();
+ }
+#endif
}
#endif
#if defined(WEBP_USE_MIPS_DSP_R2)
@@ -640,7 +644,7 @@ WEBP_DSP_INIT_FUNC(VP8LDspInit) {
#endif
}
-#if defined(WEBP_USE_NEON)
+#if defined(WEBP_HAVE_NEON)
if (WEBP_NEON_OMIT_C_CODE ||
(VP8GetCPUInfo != NULL && VP8GetCPUInfo(kNEON))) {
VP8LDspInitNEON();
diff --git a/thirdparty/libwebp/src/dsp/lossless.h b/thirdparty/libwebp/src/dsp/lossless.h
index f709cc86b2..ebd316d1ed 100644
--- a/thirdparty/libwebp/src/dsp/lossless.h
+++ b/thirdparty/libwebp/src/dsp/lossless.h
@@ -30,7 +30,22 @@ extern "C" {
typedef uint32_t (*VP8LPredictorFunc)(uint32_t left, const uint32_t* const top);
extern VP8LPredictorFunc VP8LPredictors[16];
-extern VP8LPredictorFunc VP8LPredictors_C[16];
+
+uint32_t VP8LPredictor0_C(uint32_t left, const uint32_t* const top);
+uint32_t VP8LPredictor1_C(uint32_t left, const uint32_t* const top);
+uint32_t VP8LPredictor2_C(uint32_t left, const uint32_t* const top);
+uint32_t VP8LPredictor3_C(uint32_t left, const uint32_t* const top);
+uint32_t VP8LPredictor4_C(uint32_t left, const uint32_t* const top);
+uint32_t VP8LPredictor5_C(uint32_t left, const uint32_t* const top);
+uint32_t VP8LPredictor6_C(uint32_t left, const uint32_t* const top);
+uint32_t VP8LPredictor7_C(uint32_t left, const uint32_t* const top);
+uint32_t VP8LPredictor8_C(uint32_t left, const uint32_t* const top);
+uint32_t VP8LPredictor9_C(uint32_t left, const uint32_t* const top);
+uint32_t VP8LPredictor10_C(uint32_t left, const uint32_t* const top);
+uint32_t VP8LPredictor11_C(uint32_t left, const uint32_t* const top);
+uint32_t VP8LPredictor12_C(uint32_t left, const uint32_t* const top);
+uint32_t VP8LPredictor13_C(uint32_t left, const uint32_t* const top);
+
// These Add/Sub function expects upper[-1] and out[-1] to be readable.
typedef void (*VP8LPredictorAddSubFunc)(const uint32_t* in,
const uint32_t* upper, int num_pixels,
diff --git a/thirdparty/libwebp/src/dsp/lossless_common.h b/thirdparty/libwebp/src/dsp/lossless_common.h
index 9c2ebe6809..96a106f9ee 100644
--- a/thirdparty/libwebp/src/dsp/lossless_common.h
+++ b/thirdparty/libwebp/src/dsp/lossless_common.h
@@ -184,19 +184,6 @@ static void PREDICTOR_ADD(const uint32_t* in, const uint32_t* upper, \
} \
}
-// It subtracts the prediction from the input pixel and stores the residual
-// in the output pixel.
-#define GENERATE_PREDICTOR_SUB(PREDICTOR, PREDICTOR_SUB) \
-static void PREDICTOR_SUB(const uint32_t* in, const uint32_t* upper, \
- int num_pixels, uint32_t* out) { \
- int x; \
- assert(upper != NULL); \
- for (x = 0; x < num_pixels; ++x) { \
- const uint32_t pred = (PREDICTOR)(in[x - 1], upper + x); \
- out[x] = VP8LSubPixels(in[x], pred); \
- } \
-}
-
#ifdef __cplusplus
} // extern "C"
#endif
diff --git a/thirdparty/libwebp/src/dsp/lossless_enc.c b/thirdparty/libwebp/src/dsp/lossless_enc.c
index 9c36055afc..c3e8537ade 100644
--- a/thirdparty/libwebp/src/dsp/lossless_enc.c
+++ b/thirdparty/libwebp/src/dsp/lossless_enc.c
@@ -329,6 +329,15 @@ const uint8_t kPrefixEncodeExtraBitsValue[PREFIX_LOOKUP_IDX_MAX] = {
static float FastSLog2Slow_C(uint32_t v) {
assert(v >= LOG_LOOKUP_IDX_MAX);
if (v < APPROX_LOG_WITH_CORRECTION_MAX) {
+#if !defined(WEBP_HAVE_SLOW_CLZ_CTZ)
+ // use clz if available
+ const int log_cnt = BitsLog2Floor(v) - 7;
+ const uint32_t y = 1 << log_cnt;
+ int correction = 0;
+ const float v_f = (float)v;
+ const uint32_t orig_v = v;
+ v >>= log_cnt;
+#else
int log_cnt = 0;
uint32_t y = 1;
int correction = 0;
@@ -339,6 +348,7 @@ static float FastSLog2Slow_C(uint32_t v) {
v = v >> 1;
y = y << 1;
} while (v >= LOG_LOOKUP_IDX_MAX);
+#endif
// vf = (2^log_cnt) * Xf; where y = 2^log_cnt and Xf < 256
// Xf = floor(Xf) * (1 + (v % y) / v)
// log2(Xf) = log2(floor(Xf)) + log2(1 + (v % y) / v)
@@ -355,6 +365,14 @@ static float FastSLog2Slow_C(uint32_t v) {
static float FastLog2Slow_C(uint32_t v) {
assert(v >= LOG_LOOKUP_IDX_MAX);
if (v < APPROX_LOG_WITH_CORRECTION_MAX) {
+#if !defined(WEBP_HAVE_SLOW_CLZ_CTZ)
+ // use clz if available
+ const int log_cnt = BitsLog2Floor(v) - 7;
+ const uint32_t y = 1 << log_cnt;
+ const uint32_t orig_v = v;
+ double log_2;
+ v >>= log_cnt;
+#else
int log_cnt = 0;
uint32_t y = 1;
const uint32_t orig_v = v;
@@ -364,6 +382,7 @@ static float FastLog2Slow_C(uint32_t v) {
v = v >> 1;
y = y << 1;
} while (v >= LOG_LOOKUP_IDX_MAX);
+#endif
log_2 = kLog2Table[v] + log_cnt;
if (orig_v >= APPROX_LOG_MAX) {
// Since the division is still expensive, add this correction factor only
@@ -702,140 +721,6 @@ void VP8LHistogramAdd(const VP8LHistogram* const a,
//------------------------------------------------------------------------------
// Image transforms.
-static WEBP_INLINE uint32_t Average2(uint32_t a0, uint32_t a1) {
- return (((a0 ^ a1) & 0xfefefefeu) >> 1) + (a0 & a1);
-}
-
-static WEBP_INLINE uint32_t Average3(uint32_t a0, uint32_t a1, uint32_t a2) {
- return Average2(Average2(a0, a2), a1);
-}
-
-static WEBP_INLINE uint32_t Average4(uint32_t a0, uint32_t a1,
- uint32_t a2, uint32_t a3) {
- return Average2(Average2(a0, a1), Average2(a2, a3));
-}
-
-static WEBP_INLINE uint32_t Clip255(uint32_t a) {
- if (a < 256) {
- return a;
- }
- // return 0, when a is a negative integer.
- // return 255, when a is positive.
- return ~a >> 24;
-}
-
-static WEBP_INLINE int AddSubtractComponentFull(int a, int b, int c) {
- return Clip255(a + b - c);
-}
-
-static WEBP_INLINE uint32_t ClampedAddSubtractFull(uint32_t c0, uint32_t c1,
- uint32_t c2) {
- const int a = AddSubtractComponentFull(c0 >> 24, c1 >> 24, c2 >> 24);
- const int r = AddSubtractComponentFull((c0 >> 16) & 0xff,
- (c1 >> 16) & 0xff,
- (c2 >> 16) & 0xff);
- const int g = AddSubtractComponentFull((c0 >> 8) & 0xff,
- (c1 >> 8) & 0xff,
- (c2 >> 8) & 0xff);
- const int b = AddSubtractComponentFull(c0 & 0xff, c1 & 0xff, c2 & 0xff);
- return ((uint32_t)a << 24) | (r << 16) | (g << 8) | b;
-}
-
-static WEBP_INLINE int AddSubtractComponentHalf(int a, int b) {
- return Clip255(a + (a - b) / 2);
-}
-
-static WEBP_INLINE uint32_t ClampedAddSubtractHalf(uint32_t c0, uint32_t c1,
- uint32_t c2) {
- const uint32_t ave = Average2(c0, c1);
- const int a = AddSubtractComponentHalf(ave >> 24, c2 >> 24);
- const int r = AddSubtractComponentHalf((ave >> 16) & 0xff, (c2 >> 16) & 0xff);
- const int g = AddSubtractComponentHalf((ave >> 8) & 0xff, (c2 >> 8) & 0xff);
- const int b = AddSubtractComponentHalf((ave >> 0) & 0xff, (c2 >> 0) & 0xff);
- return ((uint32_t)a << 24) | (r << 16) | (g << 8) | b;
-}
-
-// gcc-4.9 on ARM generates incorrect code in Select() when Sub3() is inlined.
-#if defined(__arm__) && \
- (LOCAL_GCC_VERSION == 0x409 || LOCAL_GCC_VERSION == 0x408)
-# define LOCAL_INLINE __attribute__ ((noinline))
-#else
-# define LOCAL_INLINE WEBP_INLINE
-#endif
-
-static LOCAL_INLINE int Sub3(int a, int b, int c) {
- const int pb = b - c;
- const int pa = a - c;
- return abs(pb) - abs(pa);
-}
-
-#undef LOCAL_INLINE
-
-static WEBP_INLINE uint32_t Select(uint32_t a, uint32_t b, uint32_t c) {
- const int pa_minus_pb =
- Sub3((a >> 24) , (b >> 24) , (c >> 24) ) +
- Sub3((a >> 16) & 0xff, (b >> 16) & 0xff, (c >> 16) & 0xff) +
- Sub3((a >> 8) & 0xff, (b >> 8) & 0xff, (c >> 8) & 0xff) +
- Sub3((a ) & 0xff, (b ) & 0xff, (c ) & 0xff);
- return (pa_minus_pb <= 0) ? a : b;
-}
-
-//------------------------------------------------------------------------------
-// Predictors
-
-static uint32_t Predictor2(uint32_t left, const uint32_t* const top) {
- (void)left;
- return top[0];
-}
-static uint32_t Predictor3(uint32_t left, const uint32_t* const top) {
- (void)left;
- return top[1];
-}
-static uint32_t Predictor4(uint32_t left, const uint32_t* const top) {
- (void)left;
- return top[-1];
-}
-static uint32_t Predictor5(uint32_t left, const uint32_t* const top) {
- const uint32_t pred = Average3(left, top[0], top[1]);
- return pred;
-}
-static uint32_t Predictor6(uint32_t left, const uint32_t* const top) {
- const uint32_t pred = Average2(left, top[-1]);
- return pred;
-}
-static uint32_t Predictor7(uint32_t left, const uint32_t* const top) {
- const uint32_t pred = Average2(left, top[0]);
- return pred;
-}
-static uint32_t Predictor8(uint32_t left, const uint32_t* const top) {
- const uint32_t pred = Average2(top[-1], top[0]);
- (void)left;
- return pred;
-}
-static uint32_t Predictor9(uint32_t left, const uint32_t* const top) {
- const uint32_t pred = Average2(top[0], top[1]);
- (void)left;
- return pred;
-}
-static uint32_t Predictor10(uint32_t left, const uint32_t* const top) {
- const uint32_t pred = Average4(left, top[-1], top[0], top[1]);
- return pred;
-}
-static uint32_t Predictor11(uint32_t left, const uint32_t* const top) {
- const uint32_t pred = Select(top[0], left, top[-1]);
- return pred;
-}
-static uint32_t Predictor12(uint32_t left, const uint32_t* const top) {
- const uint32_t pred = ClampedAddSubtractFull(left, top[0], top[-1]);
- return pred;
-}
-static uint32_t Predictor13(uint32_t left, const uint32_t* const top) {
- const uint32_t pred = ClampedAddSubtractHalf(left, top[0], top[-1]);
- return pred;
-}
-
-//------------------------------------------------------------------------------
-
static void PredictorSub0_C(const uint32_t* in, const uint32_t* upper,
int num_pixels, uint32_t* out) {
int i;
@@ -850,18 +735,33 @@ static void PredictorSub1_C(const uint32_t* in, const uint32_t* upper,
(void)upper;
}
-GENERATE_PREDICTOR_SUB(Predictor2, PredictorSub2_C)
-GENERATE_PREDICTOR_SUB(Predictor3, PredictorSub3_C)
-GENERATE_PREDICTOR_SUB(Predictor4, PredictorSub4_C)
-GENERATE_PREDICTOR_SUB(Predictor5, PredictorSub5_C)
-GENERATE_PREDICTOR_SUB(Predictor6, PredictorSub6_C)
-GENERATE_PREDICTOR_SUB(Predictor7, PredictorSub7_C)
-GENERATE_PREDICTOR_SUB(Predictor8, PredictorSub8_C)
-GENERATE_PREDICTOR_SUB(Predictor9, PredictorSub9_C)
-GENERATE_PREDICTOR_SUB(Predictor10, PredictorSub10_C)
-GENERATE_PREDICTOR_SUB(Predictor11, PredictorSub11_C)
-GENERATE_PREDICTOR_SUB(Predictor12, PredictorSub12_C)
-GENERATE_PREDICTOR_SUB(Predictor13, PredictorSub13_C)
+// It subtracts the prediction from the input pixel and stores the residual
+// in the output pixel.
+#define GENERATE_PREDICTOR_SUB(PREDICTOR_I) \
+static void PredictorSub##PREDICTOR_I##_C(const uint32_t* in, \
+ const uint32_t* upper, \
+ int num_pixels, uint32_t* out) { \
+ int x; \
+ assert(upper != NULL); \
+ for (x = 0; x < num_pixels; ++x) { \
+ const uint32_t pred = \
+ VP8LPredictor##PREDICTOR_I##_C(in[x - 1], upper + x); \
+ out[x] = VP8LSubPixels(in[x], pred); \
+ } \
+}
+
+GENERATE_PREDICTOR_SUB(2)
+GENERATE_PREDICTOR_SUB(3)
+GENERATE_PREDICTOR_SUB(4)
+GENERATE_PREDICTOR_SUB(5)
+GENERATE_PREDICTOR_SUB(6)
+GENERATE_PREDICTOR_SUB(7)
+GENERATE_PREDICTOR_SUB(8)
+GENERATE_PREDICTOR_SUB(9)
+GENERATE_PREDICTOR_SUB(10)
+GENERATE_PREDICTOR_SUB(11)
+GENERATE_PREDICTOR_SUB(12)
+GENERATE_PREDICTOR_SUB(13)
//------------------------------------------------------------------------------
@@ -962,10 +862,10 @@ WEBP_DSP_INIT_FUNC(VP8LEncDspInit) {
// If defined, use CPUInfo() to overwrite some pointers with faster versions.
if (VP8GetCPUInfo != NULL) {
-#if defined(WEBP_USE_SSE2)
+#if defined(WEBP_HAVE_SSE2)
if (VP8GetCPUInfo(kSSE2)) {
VP8LEncDspInitSSE2();
-#if defined(WEBP_USE_SSE41)
+#if defined(WEBP_HAVE_SSE41)
if (VP8GetCPUInfo(kSSE4_1)) {
VP8LEncDspInitSSE41();
}
@@ -989,7 +889,7 @@ WEBP_DSP_INIT_FUNC(VP8LEncDspInit) {
#endif
}
-#if defined(WEBP_USE_NEON)
+#if defined(WEBP_HAVE_NEON)
if (WEBP_NEON_OMIT_C_CODE ||
(VP8GetCPUInfo != NULL && VP8GetCPUInfo(kNEON))) {
VP8LEncDspInitNEON();
diff --git a/thirdparty/libwebp/src/dsp/lossless_enc_sse2.c b/thirdparty/libwebp/src/dsp/lossless_enc_sse2.c
index e676f6fdc9..b2f83b871c 100644
--- a/thirdparty/libwebp/src/dsp/lossless_enc_sse2.c
+++ b/thirdparty/libwebp/src/dsp/lossless_enc_sse2.c
@@ -232,76 +232,55 @@ static void AddVectorEq_SSE2(const uint32_t* a, uint32_t* out, int size) {
//------------------------------------------------------------------------------
// Entropy
-// Checks whether the X or Y contribution is worth computing and adding.
-// Used in loop unrolling.
-#define ANALYZE_X_OR_Y(x_or_y, j) \
- do { \
- if ((x_or_y)[i + (j)] != 0) retval -= VP8LFastSLog2((x_or_y)[i + (j)]); \
- } while (0)
-
-// Checks whether the X + Y contribution is worth computing and adding.
-// Used in loop unrolling.
-#define ANALYZE_XY(j) \
- do { \
- if (tmp[j] != 0) { \
- retval -= VP8LFastSLog2(tmp[j]); \
- ANALYZE_X_OR_Y(X, j); \
- } \
- } while (0)
+// TODO(https://crbug.com/webp/499): this function produces different results
+// from the C code due to use of double/float resulting in output differences
+// when compared to -noasm.
+#if !(defined(WEBP_HAVE_SLOW_CLZ_CTZ) || defined(__i386__) || defined(_M_IX86))
static float CombinedShannonEntropy_SSE2(const int X[256], const int Y[256]) {
int i;
double retval = 0.;
- int sumX, sumXY;
- int32_t tmp[4];
- __m128i zero = _mm_setzero_si128();
- // Sums up X + Y, 4 ints at a time (and will merge it at the end for sumXY).
- __m128i sumXY_128 = zero;
- __m128i sumX_128 = zero;
-
- for (i = 0; i < 256; i += 4) {
- const __m128i x = _mm_loadu_si128((const __m128i*)(X + i));
- const __m128i y = _mm_loadu_si128((const __m128i*)(Y + i));
-
- // Check if any X is non-zero: this actually provides a speedup as X is
- // usually sparse.
- if (_mm_movemask_epi8(_mm_cmpeq_epi32(x, zero)) != 0xFFFF) {
- const __m128i xy_128 = _mm_add_epi32(x, y);
- sumXY_128 = _mm_add_epi32(sumXY_128, xy_128);
-
- sumX_128 = _mm_add_epi32(sumX_128, x);
-
- // Analyze the different X + Y.
- _mm_storeu_si128((__m128i*)tmp, xy_128);
-
- ANALYZE_XY(0);
- ANALYZE_XY(1);
- ANALYZE_XY(2);
- ANALYZE_XY(3);
- } else {
- // X is fully 0, so only deal with Y.
- sumXY_128 = _mm_add_epi32(sumXY_128, y);
-
- ANALYZE_X_OR_Y(Y, 0);
- ANALYZE_X_OR_Y(Y, 1);
- ANALYZE_X_OR_Y(Y, 2);
- ANALYZE_X_OR_Y(Y, 3);
+ int sumX = 0, sumXY = 0;
+ const __m128i zero = _mm_setzero_si128();
+
+ for (i = 0; i < 256; i += 16) {
+ const __m128i x0 = _mm_loadu_si128((const __m128i*)(X + i + 0));
+ const __m128i y0 = _mm_loadu_si128((const __m128i*)(Y + i + 0));
+ const __m128i x1 = _mm_loadu_si128((const __m128i*)(X + i + 4));
+ const __m128i y1 = _mm_loadu_si128((const __m128i*)(Y + i + 4));
+ const __m128i x2 = _mm_loadu_si128((const __m128i*)(X + i + 8));
+ const __m128i y2 = _mm_loadu_si128((const __m128i*)(Y + i + 8));
+ const __m128i x3 = _mm_loadu_si128((const __m128i*)(X + i + 12));
+ const __m128i y3 = _mm_loadu_si128((const __m128i*)(Y + i + 12));
+ const __m128i x4 = _mm_packs_epi16(_mm_packs_epi32(x0, x1),
+ _mm_packs_epi32(x2, x3));
+ const __m128i y4 = _mm_packs_epi16(_mm_packs_epi32(y0, y1),
+ _mm_packs_epi32(y2, y3));
+ const int32_t mx = _mm_movemask_epi8(_mm_cmpgt_epi8(x4, zero));
+ int32_t my = _mm_movemask_epi8(_mm_cmpgt_epi8(y4, zero)) | mx;
+ while (my) {
+ const int32_t j = BitsCtz(my);
+ int xy;
+ if ((mx >> j) & 1) {
+ const int x = X[i + j];
+ sumXY += x;
+ retval -= VP8LFastSLog2(x);
+ }
+ xy = X[i + j] + Y[i + j];
+ sumX += xy;
+ retval -= VP8LFastSLog2(xy);
+ my &= my - 1;
}
}
-
- // Sum up sumX_128 to get sumX.
- _mm_storeu_si128((__m128i*)tmp, sumX_128);
- sumX = tmp[3] + tmp[2] + tmp[1] + tmp[0];
-
- // Sum up sumXY_128 to get sumXY.
- _mm_storeu_si128((__m128i*)tmp, sumXY_128);
- sumXY = tmp[3] + tmp[2] + tmp[1] + tmp[0];
-
retval += VP8LFastSLog2(sumX) + VP8LFastSLog2(sumXY);
return (float)retval;
}
-#undef ANALYZE_X_OR_Y
-#undef ANALYZE_XY
+
+#else
+
+#define DONT_USE_COMBINED_SHANNON_ENTROPY_SSE2_FUNC // won't be faster
+
+#endif
//------------------------------------------------------------------------------
@@ -460,20 +439,22 @@ static void PredictorSub0_SSE2(const uint32_t* in, const uint32_t* upper,
(void)upper;
}
-#define GENERATE_PREDICTOR_1(X, IN) \
-static void PredictorSub##X##_SSE2(const uint32_t* in, const uint32_t* upper, \
- int num_pixels, uint32_t* out) { \
- int i; \
- for (i = 0; i + 4 <= num_pixels; i += 4) { \
- const __m128i src = _mm_loadu_si128((const __m128i*)&in[i]); \
- const __m128i pred = _mm_loadu_si128((const __m128i*)&(IN)); \
- const __m128i res = _mm_sub_epi8(src, pred); \
- _mm_storeu_si128((__m128i*)&out[i], res); \
- } \
- if (i != num_pixels) { \
- VP8LPredictorsSub_C[(X)](in + i, upper + i, num_pixels - i, out + i); \
- } \
-}
+#define GENERATE_PREDICTOR_1(X, IN) \
+ static void PredictorSub##X##_SSE2(const uint32_t* const in, \
+ const uint32_t* const upper, \
+ int num_pixels, uint32_t* const out) { \
+ int i; \
+ for (i = 0; i + 4 <= num_pixels; i += 4) { \
+ const __m128i src = _mm_loadu_si128((const __m128i*)&in[i]); \
+ const __m128i pred = _mm_loadu_si128((const __m128i*)&(IN)); \
+ const __m128i res = _mm_sub_epi8(src, pred); \
+ _mm_storeu_si128((__m128i*)&out[i], res); \
+ } \
+ if (i != num_pixels) { \
+ VP8LPredictorsSub_C[(X)](in + i, WEBP_OFFSET_PTR(upper, i), \
+ num_pixels - i, out + i); \
+ } \
+ }
GENERATE_PREDICTOR_1(1, in[i - 1]) // Predictor1: L
GENERATE_PREDICTOR_1(2, upper[i]) // Predictor2: T
@@ -657,7 +638,9 @@ WEBP_TSAN_IGNORE_FUNCTION void VP8LEncDspInitSSE2(void) {
VP8LCollectColorRedTransforms = CollectColorRedTransforms_SSE2;
VP8LAddVector = AddVector_SSE2;
VP8LAddVectorEq = AddVectorEq_SSE2;
+#if !defined(DONT_USE_COMBINED_SHANNON_ENTROPY_SSE2_FUNC)
VP8LCombinedShannonEntropy = CombinedShannonEntropy_SSE2;
+#endif
VP8LVectorMismatch = VectorMismatch_SSE2;
VP8LBundleColorMap = BundleColorMap_SSE2;
diff --git a/thirdparty/libwebp/src/dsp/lossless_enc_sse41.c b/thirdparty/libwebp/src/dsp/lossless_enc_sse41.c
index 719d8ed25e..ad358a6f25 100644
--- a/thirdparty/libwebp/src/dsp/lossless_enc_sse41.c
+++ b/thirdparty/libwebp/src/dsp/lossless_enc_sse41.c
@@ -44,46 +44,47 @@ static void SubtractGreenFromBlueAndRed_SSE41(uint32_t* argb_data,
//------------------------------------------------------------------------------
// Color Transform
-#define SPAN 8
+#define MK_CST_16(HI, LO) \
+ _mm_set1_epi32((int)(((uint32_t)(HI) << 16) | ((LO) & 0xffff)))
+
static void CollectColorBlueTransforms_SSE41(const uint32_t* argb, int stride,
int tile_width, int tile_height,
int green_to_blue, int red_to_blue,
int histo[]) {
- const __m128i mults_r = _mm_set1_epi16(CST_5b(red_to_blue));
- const __m128i mults_g = _mm_set1_epi16(CST_5b(green_to_blue));
- const __m128i mask_g = _mm_set1_epi16((short)0xff00); // green mask
- const __m128i mask_gb = _mm_set1_epi32(0xffff); // green/blue mask
- const __m128i mask_b = _mm_set1_epi16(0x00ff); // blue mask
- const __m128i shuffler_lo = _mm_setr_epi8(-1, 2, -1, 6, -1, 10, -1, 14, -1,
- -1, -1, -1, -1, -1, -1, -1);
- const __m128i shuffler_hi = _mm_setr_epi8(-1, -1, -1, -1, -1, -1, -1, -1, -1,
- 2, -1, 6, -1, 10, -1, 14);
- int y;
- for (y = 0; y < tile_height; ++y) {
- const uint32_t* const src = argb + y * stride;
- int i, x;
- for (x = 0; x + SPAN <= tile_width; x += SPAN) {
- uint16_t values[SPAN];
- const __m128i in0 = _mm_loadu_si128((__m128i*)&src[x + 0]);
- const __m128i in1 = _mm_loadu_si128((__m128i*)&src[x + SPAN / 2]);
- const __m128i r0 = _mm_shuffle_epi8(in0, shuffler_lo);
- const __m128i r1 = _mm_shuffle_epi8(in1, shuffler_hi);
- const __m128i r = _mm_or_si128(r0, r1); // r 0
- const __m128i gb0 = _mm_and_si128(in0, mask_gb);
- const __m128i gb1 = _mm_and_si128(in1, mask_gb);
- const __m128i gb = _mm_packus_epi32(gb0, gb1); // g b
- const __m128i g = _mm_and_si128(gb, mask_g); // g 0
- const __m128i A = _mm_mulhi_epi16(r, mults_r); // x dbr
- const __m128i B = _mm_mulhi_epi16(g, mults_g); // x dbg
- const __m128i C = _mm_sub_epi8(gb, B); // x b'
- const __m128i D = _mm_sub_epi8(C, A); // x b''
- const __m128i E = _mm_and_si128(D, mask_b); // 0 b''
- _mm_storeu_si128((__m128i*)values, E);
- for (i = 0; i < SPAN; ++i) ++histo[values[i]];
+ const __m128i mult =
+ MK_CST_16(CST_5b(red_to_blue) + 256,CST_5b(green_to_blue));
+ const __m128i perm =
+ _mm_setr_epi8(-1, 1, -1, 2, -1, 5, -1, 6, -1, 9, -1, 10, -1, 13, -1, 14);
+ if (tile_width >= 4) {
+ int y;
+ for (y = 0; y < tile_height; ++y) {
+ const uint32_t* const src = argb + y * stride;
+ const __m128i A1 = _mm_loadu_si128((const __m128i*)src);
+ const __m128i B1 = _mm_shuffle_epi8(A1, perm);
+ const __m128i C1 = _mm_mulhi_epi16(B1, mult);
+ const __m128i D1 = _mm_sub_epi16(A1, C1);
+ __m128i E = _mm_add_epi16(_mm_srli_epi32(D1, 16), D1);
+ int x;
+ for (x = 4; x + 4 <= tile_width; x += 4) {
+ const __m128i A2 = _mm_loadu_si128((const __m128i*)(src + x));
+ __m128i B2, C2, D2;
+ ++histo[_mm_extract_epi8(E, 0)];
+ B2 = _mm_shuffle_epi8(A2, perm);
+ ++histo[_mm_extract_epi8(E, 4)];
+ C2 = _mm_mulhi_epi16(B2, mult);
+ ++histo[_mm_extract_epi8(E, 8)];
+ D2 = _mm_sub_epi16(A2, C2);
+ ++histo[_mm_extract_epi8(E, 12)];
+ E = _mm_add_epi16(_mm_srli_epi32(D2, 16), D2);
+ }
+ ++histo[_mm_extract_epi8(E, 0)];
+ ++histo[_mm_extract_epi8(E, 4)];
+ ++histo[_mm_extract_epi8(E, 8)];
+ ++histo[_mm_extract_epi8(E, 12)];
}
}
{
- const int left_over = tile_width & (SPAN - 1);
+ const int left_over = tile_width & 3;
if (left_over > 0) {
VP8LCollectColorBlueTransforms_C(argb + tile_width - left_over, stride,
left_over, tile_height,
@@ -95,33 +96,37 @@ static void CollectColorBlueTransforms_SSE41(const uint32_t* argb, int stride,
static void CollectColorRedTransforms_SSE41(const uint32_t* argb, int stride,
int tile_width, int tile_height,
int green_to_red, int histo[]) {
- const __m128i mults_g = _mm_set1_epi16(CST_5b(green_to_red));
- const __m128i mask_g = _mm_set1_epi32(0x00ff00); // green mask
- const __m128i mask = _mm_set1_epi16(0xff);
-
- int y;
- for (y = 0; y < tile_height; ++y) {
- const uint32_t* const src = argb + y * stride;
- int i, x;
- for (x = 0; x + SPAN <= tile_width; x += SPAN) {
- uint16_t values[SPAN];
- const __m128i in0 = _mm_loadu_si128((__m128i*)&src[x + 0]);
- const __m128i in1 = _mm_loadu_si128((__m128i*)&src[x + SPAN / 2]);
- const __m128i g0 = _mm_and_si128(in0, mask_g); // 0 0 | g 0
- const __m128i g1 = _mm_and_si128(in1, mask_g);
- const __m128i g = _mm_packus_epi32(g0, g1); // g 0
- const __m128i A0 = _mm_srli_epi32(in0, 16); // 0 0 | x r
- const __m128i A1 = _mm_srli_epi32(in1, 16);
- const __m128i A = _mm_packus_epi32(A0, A1); // x r
- const __m128i B = _mm_mulhi_epi16(g, mults_g); // x dr
- const __m128i C = _mm_sub_epi8(A, B); // x r'
- const __m128i D = _mm_and_si128(C, mask); // 0 r'
- _mm_storeu_si128((__m128i*)values, D);
- for (i = 0; i < SPAN; ++i) ++histo[values[i]];
+
+ const __m128i mult = MK_CST_16(0, CST_5b(green_to_red));
+ const __m128i mask_g = _mm_set1_epi32(0x0000ff00);
+ if (tile_width >= 4) {
+ int y;
+ for (y = 0; y < tile_height; ++y) {
+ const uint32_t* const src = argb + y * stride;
+ const __m128i A1 = _mm_loadu_si128((const __m128i*)src);
+ const __m128i B1 = _mm_and_si128(A1, mask_g);
+ const __m128i C1 = _mm_madd_epi16(B1, mult);
+ __m128i D = _mm_sub_epi16(A1, C1);
+ int x;
+ for (x = 4; x + 4 <= tile_width; x += 4) {
+ const __m128i A2 = _mm_loadu_si128((const __m128i*)(src + x));
+ __m128i B2, C2;
+ ++histo[_mm_extract_epi8(D, 2)];
+ B2 = _mm_and_si128(A2, mask_g);
+ ++histo[_mm_extract_epi8(D, 6)];
+ C2 = _mm_madd_epi16(B2, mult);
+ ++histo[_mm_extract_epi8(D, 10)];
+ ++histo[_mm_extract_epi8(D, 14)];
+ D = _mm_sub_epi16(A2, C2);
+ }
+ ++histo[_mm_extract_epi8(D, 2)];
+ ++histo[_mm_extract_epi8(D, 6)];
+ ++histo[_mm_extract_epi8(D, 10)];
+ ++histo[_mm_extract_epi8(D, 14)];
}
}
{
- const int left_over = tile_width & (SPAN - 1);
+ const int left_over = tile_width & 3;
if (left_over > 0) {
VP8LCollectColorRedTransforms_C(argb + tile_width - left_over, stride,
left_over, tile_height, green_to_red,
@@ -130,6 +135,8 @@ static void CollectColorRedTransforms_SSE41(const uint32_t* argb, int stride,
}
}
+#undef MK_CST_16
+
//------------------------------------------------------------------------------
// Entry point
diff --git a/thirdparty/libwebp/src/dsp/lossless_sse2.c b/thirdparty/libwebp/src/dsp/lossless_sse2.c
index aef0cee1b3..3a0eb440db 100644
--- a/thirdparty/libwebp/src/dsp/lossless_sse2.c
+++ b/thirdparty/libwebp/src/dsp/lossless_sse2.c
@@ -18,7 +18,6 @@
#include "src/dsp/common_sse2.h"
#include "src/dsp/lossless.h"
#include "src/dsp/lossless_common.h"
-#include <assert.h>
#include <emmintrin.h>
//------------------------------------------------------------------------------
diff --git a/thirdparty/libwebp/src/dsp/lossless_sse41.c b/thirdparty/libwebp/src/dsp/lossless_sse41.c
new file mode 100644
index 0000000000..b0d6daa7fe
--- /dev/null
+++ b/thirdparty/libwebp/src/dsp/lossless_sse41.c
@@ -0,0 +1,132 @@
+// Copyright 2021 Google Inc. All Rights Reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the COPYING file in the root of the source
+// tree. An additional intellectual property rights grant can be found
+// in the file PATENTS. All contributing project authors may
+// be found in the AUTHORS file in the root of the source tree.
+// -----------------------------------------------------------------------------
+//
+// SSE41 variant of methods for lossless decoder
+
+#include "src/dsp/dsp.h"
+
+#if defined(WEBP_USE_SSE41)
+
+#include "src/dsp/common_sse41.h"
+#include "src/dsp/lossless.h"
+#include "src/dsp/lossless_common.h"
+
+//------------------------------------------------------------------------------
+// Color-space conversion functions
+
+static void TransformColorInverse_SSE41(const VP8LMultipliers* const m,
+ const uint32_t* const src,
+ int num_pixels, uint32_t* dst) {
+// sign-extended multiplying constants, pre-shifted by 5.
+#define CST(X) (((int16_t)(m->X << 8)) >> 5) // sign-extend
+ const __m128i mults_rb = _mm_set1_epi32((uint32_t)CST(green_to_red_) << 16 |
+ (CST(green_to_blue_) & 0xffff));
+ const __m128i mults_b2 = _mm_set1_epi32(CST(red_to_blue_));
+#undef CST
+ const __m128i mask_ag = _mm_set1_epi32(0xff00ff00);
+ const __m128i perm1 = _mm_setr_epi8(-1, 1, -1, 1, -1, 5, -1, 5,
+ -1, 9, -1, 9, -1, 13, -1, 13);
+ const __m128i perm2 = _mm_setr_epi8(-1, 2, -1, -1, -1, 6, -1, -1,
+ -1, 10, -1, -1, -1, 14, -1, -1);
+ int i;
+ for (i = 0; i + 4 <= num_pixels; i += 4) {
+ const __m128i A = _mm_loadu_si128((const __m128i*)(src + i));
+ const __m128i B = _mm_shuffle_epi8(A, perm1); // argb -> g0g0
+ const __m128i C = _mm_mulhi_epi16(B, mults_rb);
+ const __m128i D = _mm_add_epi8(A, C);
+ const __m128i E = _mm_shuffle_epi8(D, perm2);
+ const __m128i F = _mm_mulhi_epi16(E, mults_b2);
+ const __m128i G = _mm_add_epi8(D, F);
+ const __m128i out = _mm_blendv_epi8(G, A, mask_ag);
+ _mm_storeu_si128((__m128i*)&dst[i], out);
+ }
+ // Fall-back to C-version for left-overs.
+ if (i != num_pixels) {
+ VP8LTransformColorInverse_C(m, src + i, num_pixels - i, dst + i);
+ }
+}
+
+//------------------------------------------------------------------------------
+
+#define ARGB_TO_RGB_SSE41 do { \
+ while (num_pixels >= 16) { \
+ const __m128i in0 = _mm_loadu_si128(in + 0); \
+ const __m128i in1 = _mm_loadu_si128(in + 1); \
+ const __m128i in2 = _mm_loadu_si128(in + 2); \
+ const __m128i in3 = _mm_loadu_si128(in + 3); \
+ const __m128i a0 = _mm_shuffle_epi8(in0, perm0); \
+ const __m128i a1 = _mm_shuffle_epi8(in1, perm1); \
+ const __m128i a2 = _mm_shuffle_epi8(in2, perm2); \
+ const __m128i a3 = _mm_shuffle_epi8(in3, perm3); \
+ const __m128i b0 = _mm_blend_epi16(a0, a1, 0xc0); \
+ const __m128i b1 = _mm_blend_epi16(a1, a2, 0xf0); \
+ const __m128i b2 = _mm_blend_epi16(a2, a3, 0xfc); \
+ _mm_storeu_si128(out + 0, b0); \
+ _mm_storeu_si128(out + 1, b1); \
+ _mm_storeu_si128(out + 2, b2); \
+ in += 4; \
+ out += 3; \
+ num_pixels -= 16; \
+ } \
+} while (0)
+
+static void ConvertBGRAToRGB_SSE41(const uint32_t* src, int num_pixels,
+ uint8_t* dst) {
+ const __m128i* in = (const __m128i*)src;
+ __m128i* out = (__m128i*)dst;
+ const __m128i perm0 = _mm_setr_epi8(2, 1, 0, 6, 5, 4, 10, 9,
+ 8, 14, 13, 12, -1, -1, -1, -1);
+ const __m128i perm1 = _mm_shuffle_epi32(perm0, 0x39);
+ const __m128i perm2 = _mm_shuffle_epi32(perm0, 0x4e);
+ const __m128i perm3 = _mm_shuffle_epi32(perm0, 0x93);
+
+ ARGB_TO_RGB_SSE41;
+
+ // left-overs
+ if (num_pixels > 0) {
+ VP8LConvertBGRAToRGB_C((const uint32_t*)in, num_pixels, (uint8_t*)out);
+ }
+}
+
+static void ConvertBGRAToBGR_SSE41(const uint32_t* src,
+ int num_pixels, uint8_t* dst) {
+ const __m128i* in = (const __m128i*)src;
+ __m128i* out = (__m128i*)dst;
+ const __m128i perm0 = _mm_setr_epi8(0, 1, 2, 4, 5, 6, 8, 9, 10,
+ 12, 13, 14, -1, -1, -1, -1);
+ const __m128i perm1 = _mm_shuffle_epi32(perm0, 0x39);
+ const __m128i perm2 = _mm_shuffle_epi32(perm0, 0x4e);
+ const __m128i perm3 = _mm_shuffle_epi32(perm0, 0x93);
+
+ ARGB_TO_RGB_SSE41;
+
+ // left-overs
+ if (num_pixels > 0) {
+ VP8LConvertBGRAToBGR_C((const uint32_t*)in, num_pixels, (uint8_t*)out);
+ }
+}
+
+#undef ARGB_TO_RGB_SSE41
+
+//------------------------------------------------------------------------------
+// Entry point
+
+extern void VP8LDspInitSSE41(void);
+
+WEBP_TSAN_IGNORE_FUNCTION void VP8LDspInitSSE41(void) {
+ VP8LTransformColorInverse = TransformColorInverse_SSE41;
+ VP8LConvertBGRAToRGB = ConvertBGRAToRGB_SSE41;
+ VP8LConvertBGRAToBGR = ConvertBGRAToBGR_SSE41;
+}
+
+#else // !WEBP_USE_SSE41
+
+WEBP_DSP_INIT_STUB(VP8LDspInitSSE41)
+
+#endif // WEBP_USE_SSE41
diff --git a/thirdparty/libwebp/src/dsp/rescaler.c b/thirdparty/libwebp/src/dsp/rescaler.c
index c5a01e82df..14620ce4f1 100644
--- a/thirdparty/libwebp/src/dsp/rescaler.c
+++ b/thirdparty/libwebp/src/dsp/rescaler.c
@@ -38,8 +38,9 @@ void WebPRescalerImportRowExpand_C(WebPRescaler* const wrk,
int x_out = channel;
// simple bilinear interpolation
int accum = wrk->x_add;
- int left = src[x_in];
- int right = (wrk->src_width > 1) ? src[x_in + x_stride] : left;
+ rescaler_t left = (rescaler_t)src[x_in];
+ rescaler_t right =
+ (wrk->src_width > 1) ? (rescaler_t)src[x_in + x_stride] : left;
x_in += x_stride;
while (1) {
wrk->frow[x_out] = right * wrk->x_add + (left - right) * accum;
@@ -50,7 +51,7 @@ void WebPRescalerImportRowExpand_C(WebPRescaler* const wrk,
left = right;
x_in += x_stride;
assert(x_in < wrk->src_width * x_stride);
- right = src[x_in];
+ right = (rescaler_t)src[x_in];
accum += wrk->x_add;
}
}
@@ -213,7 +214,7 @@ WEBP_DSP_INIT_FUNC(WebPRescalerDspInit) {
WebPRescalerImportRowShrink = WebPRescalerImportRowShrink_C;
if (VP8GetCPUInfo != NULL) {
-#if defined(WEBP_USE_SSE2)
+#if defined(WEBP_HAVE_SSE2)
if (VP8GetCPUInfo(kSSE2)) {
WebPRescalerDspInitSSE2();
}
@@ -235,7 +236,7 @@ WEBP_DSP_INIT_FUNC(WebPRescalerDspInit) {
#endif
}
-#if defined(WEBP_USE_NEON)
+#if defined(WEBP_HAVE_NEON)
if (WEBP_NEON_OMIT_C_CODE ||
(VP8GetCPUInfo != NULL && VP8GetCPUInfo(kNEON))) {
WebPRescalerDspInitNEON();
diff --git a/thirdparty/libwebp/src/dsp/ssim.c b/thirdparty/libwebp/src/dsp/ssim.c
index 989ce8254c..f85c2e6e5b 100644
--- a/thirdparty/libwebp/src/dsp/ssim.c
+++ b/thirdparty/libwebp/src/dsp/ssim.c
@@ -150,7 +150,7 @@ WEBP_DSP_INIT_FUNC(VP8SSIMDspInit) {
#endif
if (VP8GetCPUInfo != NULL) {
-#if defined(WEBP_USE_SSE2)
+#if defined(WEBP_HAVE_SSE2)
if (VP8GetCPUInfo(kSSE2)) {
VP8SSIMDspInitSSE2();
}
diff --git a/thirdparty/libwebp/src/dsp/upsampling.c b/thirdparty/libwebp/src/dsp/upsampling.c
index 9b60da5bbb..87f771f3eb 100644
--- a/thirdparty/libwebp/src/dsp/upsampling.c
+++ b/thirdparty/libwebp/src/dsp/upsampling.c
@@ -233,12 +233,12 @@ WEBP_DSP_INIT_FUNC(WebPInitYUV444Converters) {
WebPYUV444Converters[MODE_rgbA_4444] = WebPYuv444ToRgba4444_C;
if (VP8GetCPUInfo != NULL) {
-#if defined(WEBP_USE_SSE2)
+#if defined(WEBP_HAVE_SSE2)
if (VP8GetCPUInfo(kSSE2)) {
WebPInitYUV444ConvertersSSE2();
}
#endif
-#if defined(WEBP_USE_SSE41)
+#if defined(WEBP_HAVE_SSE41)
if (VP8GetCPUInfo(kSSE4_1)) {
WebPInitYUV444ConvertersSSE41();
}
@@ -278,12 +278,12 @@ WEBP_DSP_INIT_FUNC(WebPInitUpsamplers) {
// If defined, use CPUInfo() to overwrite some pointers with faster versions.
if (VP8GetCPUInfo != NULL) {
-#if defined(WEBP_USE_SSE2)
+#if defined(WEBP_HAVE_SSE2)
if (VP8GetCPUInfo(kSSE2)) {
WebPInitUpsamplersSSE2();
}
#endif
-#if defined(WEBP_USE_SSE41)
+#if defined(WEBP_HAVE_SSE41)
if (VP8GetCPUInfo(kSSE4_1)) {
WebPInitUpsamplersSSE41();
}
@@ -300,7 +300,7 @@ WEBP_DSP_INIT_FUNC(WebPInitUpsamplers) {
#endif
}
-#if defined(WEBP_USE_NEON)
+#if defined(WEBP_HAVE_NEON)
if (WEBP_NEON_OMIT_C_CODE ||
(VP8GetCPUInfo != NULL && VP8GetCPUInfo(kNEON))) {
WebPInitUpsamplersNEON();
diff --git a/thirdparty/libwebp/src/dsp/yuv.c b/thirdparty/libwebp/src/dsp/yuv.c
index 14e67fc28e..48466f8b11 100644
--- a/thirdparty/libwebp/src/dsp/yuv.c
+++ b/thirdparty/libwebp/src/dsp/yuv.c
@@ -90,16 +90,16 @@ WEBP_DSP_INIT_FUNC(WebPInitSamplers) {
// If defined, use CPUInfo() to overwrite some pointers with faster versions.
if (VP8GetCPUInfo != NULL) {
-#if defined(WEBP_USE_SSE2)
+#if defined(WEBP_HAVE_SSE2)
if (VP8GetCPUInfo(kSSE2)) {
WebPInitSamplersSSE2();
}
-#endif // WEBP_USE_SSE2
-#if defined(WEBP_USE_SSE41)
+#endif // WEBP_HAVE_SSE2
+#if defined(WEBP_HAVE_SSE41)
if (VP8GetCPUInfo(kSSE4_1)) {
WebPInitSamplersSSE41();
}
-#endif // WEBP_USE_SSE41
+#endif // WEBP_HAVE_SSE41
#if defined(WEBP_USE_MIPS32)
if (VP8GetCPUInfo(kMIPS32)) {
WebPInitSamplersMIPS32();
@@ -276,26 +276,26 @@ WEBP_DSP_INIT_FUNC(WebPInitConvertARGBToYUV) {
#endif
if (VP8GetCPUInfo != NULL) {
-#if defined(WEBP_USE_SSE2)
+#if defined(WEBP_HAVE_SSE2)
if (VP8GetCPUInfo(kSSE2)) {
WebPInitConvertARGBToYUVSSE2();
WebPInitSharpYUVSSE2();
}
-#endif // WEBP_USE_SSE2
-#if defined(WEBP_USE_SSE41)
+#endif // WEBP_HAVE_SSE2
+#if defined(WEBP_HAVE_SSE41)
if (VP8GetCPUInfo(kSSE4_1)) {
WebPInitConvertARGBToYUVSSE41();
}
-#endif // WEBP_USE_SSE41
+#endif // WEBP_HAVE_SSE41
}
-#if defined(WEBP_USE_NEON)
+#if defined(WEBP_HAVE_NEON)
if (WEBP_NEON_OMIT_C_CODE ||
(VP8GetCPUInfo != NULL && VP8GetCPUInfo(kNEON))) {
WebPInitConvertARGBToYUVNEON();
WebPInitSharpYUVNEON();
}
-#endif // WEBP_USE_NEON
+#endif // WEBP_HAVE_NEON
assert(WebPConvertARGBToY != NULL);
assert(WebPConvertARGBToUV != NULL);
diff --git a/thirdparty/libwebp/src/enc/alpha_enc.c b/thirdparty/libwebp/src/enc/alpha_enc.c
index dce9ca957d..0b54f3e6ec 100644
--- a/thirdparty/libwebp/src/enc/alpha_enc.c
+++ b/thirdparty/libwebp/src/enc/alpha_enc.c
@@ -303,7 +303,7 @@ static int EncodeAlpha(VP8Encoder* const enc,
int ok = 1;
const int reduce_levels = (quality < 100);
- // quick sanity checks
+ // quick correctness checks
assert((uint64_t)data_size == (uint64_t)width * height); // as per spec
assert(enc != NULL && pic != NULL && pic->a != NULL);
assert(output != NULL && output_size != NULL);
@@ -361,7 +361,7 @@ static int EncodeAlpha(VP8Encoder* const enc,
//------------------------------------------------------------------------------
// Main calls
-static int CompressAlphaJob(void* arg1, void* dummy) {
+static int CompressAlphaJob(void* arg1, void* unused) {
VP8Encoder* const enc = (VP8Encoder*)arg1;
const WebPConfig* config = enc->config_;
uint8_t* alpha_data = NULL;
@@ -375,13 +375,13 @@ static int CompressAlphaJob(void* arg1, void* dummy) {
filter, effort_level, &alpha_data, &alpha_size)) {
return 0;
}
- if (alpha_size != (uint32_t)alpha_size) { // Sanity check.
+ if (alpha_size != (uint32_t)alpha_size) { // Soundness check.
WebPSafeFree(alpha_data);
return 0;
}
enc->alpha_data_size_ = (uint32_t)alpha_size;
enc->alpha_data_ = alpha_data;
- (void)dummy;
+ (void)unused;
return 1;
}
diff --git a/thirdparty/libwebp/src/enc/analysis_enc.c b/thirdparty/libwebp/src/enc/analysis_enc.c
index 687757ae03..ebb784261c 100644
--- a/thirdparty/libwebp/src/enc/analysis_enc.c
+++ b/thirdparty/libwebp/src/enc/analysis_enc.c
@@ -126,16 +126,6 @@ static void InitHistogram(VP8Histogram* const histo) {
histo->last_non_zero = 1;
}
-static void MergeHistograms(const VP8Histogram* const in,
- VP8Histogram* const out) {
- if (in->max_value > out->max_value) {
- out->max_value = in->max_value;
- }
- if (in->last_non_zero > out->last_non_zero) {
- out->last_non_zero = in->last_non_zero;
- }
-}
-
//------------------------------------------------------------------------------
// Simplified k-Means, to assign Nb segments based on alpha-histogram
@@ -285,49 +275,6 @@ static int FastMBAnalyze(VP8EncIterator* const it) {
return 0;
}
-static int MBAnalyzeBestIntra4Mode(VP8EncIterator* const it,
- int best_alpha) {
- uint8_t modes[16];
- const int max_mode = MAX_INTRA4_MODE;
- int i4_alpha;
- VP8Histogram total_histo;
- int cur_histo = 0;
- InitHistogram(&total_histo);
-
- VP8IteratorStartI4(it);
- do {
- int mode;
- int best_mode_alpha = DEFAULT_ALPHA;
- VP8Histogram histos[2];
- const uint8_t* const src = it->yuv_in_ + Y_OFF_ENC + VP8Scan[it->i4_];
-
- VP8MakeIntra4Preds(it);
- for (mode = 0; mode < max_mode; ++mode) {
- int alpha;
-
- InitHistogram(&histos[cur_histo]);
- VP8CollectHistogram(src, it->yuv_p_ + VP8I4ModeOffsets[mode],
- 0, 1, &histos[cur_histo]);
- alpha = GetAlpha(&histos[cur_histo]);
- if (IS_BETTER_ALPHA(alpha, best_mode_alpha)) {
- best_mode_alpha = alpha;
- modes[it->i4_] = mode;
- cur_histo ^= 1; // keep track of best histo so far.
- }
- }
- // accumulate best histogram
- MergeHistograms(&histos[cur_histo ^ 1], &total_histo);
- // Note: we reuse the original samples for predictors
- } while (VP8IteratorRotateI4(it, it->yuv_in_ + Y_OFF_ENC));
-
- i4_alpha = GetAlpha(&total_histo);
- if (IS_BETTER_ALPHA(i4_alpha, best_alpha)) {
- VP8SetIntra4Mode(it, modes);
- best_alpha = i4_alpha;
- }
- return best_alpha;
-}
-
static int MBAnalyzeBestUVMode(VP8EncIterator* const it) {
int best_alpha = DEFAULT_ALPHA;
int smallest_alpha = 0;
@@ -371,13 +318,6 @@ static void MBAnalyze(VP8EncIterator* const it,
best_alpha = FastMBAnalyze(it);
} else {
best_alpha = MBAnalyzeBestIntra16Mode(it);
- if (enc->method_ >= 5) {
- // We go and make a fast decision for intra4/intra16.
- // It's usually not a good and definitive pick, but helps seeding the
- // stats about level bit-cost.
- // TODO(skal): improve criterion.
- best_alpha = MBAnalyzeBestIntra4Mode(it, best_alpha);
- }
}
best_uv_alpha = MBAnalyzeBestUVMode(it);
diff --git a/thirdparty/libwebp/src/enc/backward_references_enc.c b/thirdparty/libwebp/src/enc/backward_references_enc.c
index d445b40fc5..519b36a091 100644
--- a/thirdparty/libwebp/src/enc/backward_references_enc.c
+++ b/thirdparty/libwebp/src/enc/backward_references_enc.c
@@ -11,13 +11,14 @@
//
#include <assert.h>
+#include <float.h>
#include <math.h>
-#include "src/enc/backward_references_enc.h"
-#include "src/enc/histogram_enc.h"
+#include "src/dsp/dsp.h"
#include "src/dsp/lossless.h"
#include "src/dsp/lossless_common.h"
-#include "src/dsp/dsp.h"
+#include "src/enc/backward_references_enc.h"
+#include "src/enc/histogram_enc.h"
#include "src/utils/color_cache_utils.h"
#include "src/utils/utils.h"
@@ -103,6 +104,20 @@ void VP8LBackwardRefsClear(VP8LBackwardRefs* const refs) {
}
}
+// Swaps the content of two VP8LBackwardRefs.
+static void BackwardRefsSwap(VP8LBackwardRefs* const refs1,
+ VP8LBackwardRefs* const refs2) {
+ const int point_to_refs1 =
+ (refs1->tail_ != NULL && refs1->tail_ == &refs1->refs_);
+ const int point_to_refs2 =
+ (refs2->tail_ != NULL && refs2->tail_ == &refs2->refs_);
+ const VP8LBackwardRefs tmp = *refs1;
+ *refs1 = *refs2;
+ *refs2 = tmp;
+ if (point_to_refs2) refs1->tail_ = &refs1->refs_;
+ if (point_to_refs1) refs2->tail_ = &refs2->refs_;
+}
+
void VP8LBackwardRefsInit(VP8LBackwardRefs* const refs, int block_size) {
assert(refs != NULL);
memset(refs, 0, sizeof(*refs));
@@ -154,6 +169,22 @@ static PixOrCopyBlock* BackwardRefsNewBlock(VP8LBackwardRefs* const refs) {
return b;
}
+// Return 1 on success, 0 on error.
+static int BackwardRefsClone(const VP8LBackwardRefs* const from,
+ VP8LBackwardRefs* const to) {
+ const PixOrCopyBlock* block_from = from->refs_;
+ VP8LClearBackwardRefs(to);
+ while (block_from != NULL) {
+ PixOrCopyBlock* const block_to = BackwardRefsNewBlock(to);
+ if (block_to == NULL) return 0;
+ memcpy(block_to->start_, block_from->start_,
+ block_from->size_ * sizeof(PixOrCopy));
+ block_to->size_ = block_from->size_;
+ block_from = block_from->next_;
+ }
+ return 1;
+}
+
extern void VP8LBackwardRefsCursorAdd(VP8LBackwardRefs* const refs,
const PixOrCopy v);
void VP8LBackwardRefsCursorAdd(VP8LBackwardRefs* const refs,
@@ -753,12 +784,18 @@ static int CalculateBestCacheSize(const uint32_t* argb, int quality,
}
}
} else {
+ int code, extra_bits, extra_bits_value;
// We should compute the contribution of the (distance,length)
// histograms but those are the same independently from the cache size.
// As those constant contributions are in the end added to the other
- // histogram contributions, we can safely ignore them.
+ // histogram contributions, we can ignore them, except for the length
+ // prefix that is part of the literal_ histogram.
int len = PixOrCopyLength(v);
uint32_t argb_prev = *argb ^ 0xffffffffu;
+ VP8LPrefixEncode(len, &code, &extra_bits, &extra_bits_value);
+ for (i = 0; i <= cache_bits_max; ++i) {
+ ++histos[i]->literal_[NUM_LITERAL_CODES + code];
+ }
// Update the color caches.
do {
if (*argb != argb_prev) {
@@ -842,16 +879,21 @@ extern int VP8LBackwardReferencesTraceBackwards(
int xsize, int ysize, const uint32_t* const argb, int cache_bits,
const VP8LHashChain* const hash_chain,
const VP8LBackwardRefs* const refs_src, VP8LBackwardRefs* const refs_dst);
-static VP8LBackwardRefs* GetBackwardReferences(
- int width, int height, const uint32_t* const argb, int quality,
- int lz77_types_to_try, int* const cache_bits,
- const VP8LHashChain* const hash_chain, VP8LBackwardRefs* best,
- VP8LBackwardRefs* worst) {
- const int cache_bits_initial = *cache_bits;
- double bit_cost_best = -1;
+static int GetBackwardReferences(int width, int height,
+ const uint32_t* const argb, int quality,
+ int lz77_types_to_try, int cache_bits_max,
+ int do_no_cache,
+ const VP8LHashChain* const hash_chain,
+ VP8LBackwardRefs* const refs,
+ int* const cache_bits_best) {
VP8LHistogram* histo = NULL;
- int lz77_type, lz77_type_best = 0;
+ int i, lz77_type;
+ // Index 0 is for a color cache, index 1 for no cache (if needed).
+ int lz77_types_best[2] = {0, 0};
+ double bit_costs_best[2] = {DBL_MAX, DBL_MAX};
VP8LHashChain hash_chain_box;
+ VP8LBackwardRefs* const refs_tmp = &refs[do_no_cache ? 2 : 1];
+ int status = 0;
memset(&hash_chain_box, 0, sizeof(hash_chain_box));
histo = VP8LAllocateHistogram(MAX_COLOR_CACHE_BITS);
@@ -860,86 +902,129 @@ static VP8LBackwardRefs* GetBackwardReferences(
for (lz77_type = 1; lz77_types_to_try;
lz77_types_to_try &= ~lz77_type, lz77_type <<= 1) {
int res = 0;
- double bit_cost;
- int cache_bits_tmp = cache_bits_initial;
+ double bit_cost = 0.;
if ((lz77_types_to_try & lz77_type) == 0) continue;
switch (lz77_type) {
case kLZ77RLE:
- res = BackwardReferencesRle(width, height, argb, 0, worst);
+ res = BackwardReferencesRle(width, height, argb, 0, refs_tmp);
break;
case kLZ77Standard:
// Compute LZ77 with no cache (0 bits), as the ideal LZ77 with a color
// cache is not that different in practice.
- res = BackwardReferencesLz77(width, height, argb, 0, hash_chain, worst);
+ res = BackwardReferencesLz77(width, height, argb, 0, hash_chain,
+ refs_tmp);
break;
case kLZ77Box:
if (!VP8LHashChainInit(&hash_chain_box, width * height)) goto Error;
res = BackwardReferencesLz77Box(width, height, argb, 0, hash_chain,
- &hash_chain_box, worst);
+ &hash_chain_box, refs_tmp);
break;
default:
assert(0);
}
if (!res) goto Error;
- // Next, try with a color cache and update the references.
- if (!CalculateBestCacheSize(argb, quality, worst, &cache_bits_tmp)) {
- goto Error;
- }
- if (cache_bits_tmp > 0) {
- if (!BackwardRefsWithLocalCache(argb, cache_bits_tmp, worst)) {
- goto Error;
+ // Start with the no color cache case.
+ for (i = 1; i >= 0; --i) {
+ int cache_bits = (i == 1) ? 0 : cache_bits_max;
+
+ if (i == 1 && !do_no_cache) continue;
+
+ if (i == 0) {
+ // Try with a color cache.
+ if (!CalculateBestCacheSize(argb, quality, refs_tmp, &cache_bits)) {
+ goto Error;
+ }
+ if (cache_bits > 0) {
+ if (!BackwardRefsWithLocalCache(argb, cache_bits, refs_tmp)) {
+ goto Error;
+ }
+ }
}
- }
- // Keep the best backward references.
- VP8LHistogramCreate(histo, worst, cache_bits_tmp);
- bit_cost = VP8LHistogramEstimateBits(histo);
- if (lz77_type_best == 0 || bit_cost < bit_cost_best) {
- VP8LBackwardRefs* const tmp = worst;
- worst = best;
- best = tmp;
- bit_cost_best = bit_cost;
- *cache_bits = cache_bits_tmp;
- lz77_type_best = lz77_type;
+ if (i == 0 && do_no_cache && cache_bits == 0) {
+ // No need to re-compute bit_cost as it was computed at i == 1.
+ } else {
+ VP8LHistogramCreate(histo, refs_tmp, cache_bits);
+ bit_cost = VP8LHistogramEstimateBits(histo);
+ }
+
+ if (bit_cost < bit_costs_best[i]) {
+ if (i == 1) {
+ // Do not swap as the full cache analysis would have the wrong
+ // VP8LBackwardRefs to start with.
+ if (!BackwardRefsClone(refs_tmp, &refs[1])) goto Error;
+ } else {
+ BackwardRefsSwap(refs_tmp, &refs[0]);
+ }
+ bit_costs_best[i] = bit_cost;
+ lz77_types_best[i] = lz77_type;
+ if (i == 0) *cache_bits_best = cache_bits;
+ }
}
}
- assert(lz77_type_best > 0);
+ assert(lz77_types_best[0] > 0);
+ assert(!do_no_cache || lz77_types_best[1] > 0);
// Improve on simple LZ77 but only for high quality (TraceBackwards is
// costly).
- if ((lz77_type_best == kLZ77Standard || lz77_type_best == kLZ77Box) &&
- quality >= 25) {
- const VP8LHashChain* const hash_chain_tmp =
- (lz77_type_best == kLZ77Standard) ? hash_chain : &hash_chain_box;
- if (VP8LBackwardReferencesTraceBackwards(width, height, argb, *cache_bits,
- hash_chain_tmp, best, worst)) {
- double bit_cost_trace;
- VP8LHistogramCreate(histo, worst, *cache_bits);
- bit_cost_trace = VP8LHistogramEstimateBits(histo);
- if (bit_cost_trace < bit_cost_best) best = worst;
+ for (i = 1; i >= 0; --i) {
+ if (i == 1 && !do_no_cache) continue;
+ if ((lz77_types_best[i] == kLZ77Standard ||
+ lz77_types_best[i] == kLZ77Box) &&
+ quality >= 25) {
+ const VP8LHashChain* const hash_chain_tmp =
+ (lz77_types_best[i] == kLZ77Standard) ? hash_chain : &hash_chain_box;
+ const int cache_bits = (i == 1) ? 0 : *cache_bits_best;
+ if (VP8LBackwardReferencesTraceBackwards(width, height, argb, cache_bits,
+ hash_chain_tmp, &refs[i],
+ refs_tmp)) {
+ double bit_cost_trace;
+ VP8LHistogramCreate(histo, refs_tmp, cache_bits);
+ bit_cost_trace = VP8LHistogramEstimateBits(histo);
+ if (bit_cost_trace < bit_costs_best[i]) {
+ BackwardRefsSwap(refs_tmp, &refs[i]);
+ }
+ }
}
- }
- BackwardReferences2DLocality(width, best);
+ BackwardReferences2DLocality(width, &refs[i]);
+
+ if (i == 1 && lz77_types_best[0] == lz77_types_best[1] &&
+ *cache_bits_best == 0) {
+ // If the best cache size is 0 and we have the same best LZ77, just copy
+ // the data over and stop here.
+ if (!BackwardRefsClone(&refs[1], &refs[0])) goto Error;
+ break;
+ }
+ }
+ status = 1;
Error:
VP8LHashChainClear(&hash_chain_box);
VP8LFreeHistogram(histo);
- return best;
+ return status;
}
-VP8LBackwardRefs* VP8LGetBackwardReferences(
+WebPEncodingError VP8LGetBackwardReferences(
int width, int height, const uint32_t* const argb, int quality,
- int low_effort, int lz77_types_to_try, int* const cache_bits,
- const VP8LHashChain* const hash_chain, VP8LBackwardRefs* const refs_tmp1,
- VP8LBackwardRefs* const refs_tmp2) {
+ int low_effort, int lz77_types_to_try, int cache_bits_max, int do_no_cache,
+ const VP8LHashChain* const hash_chain, VP8LBackwardRefs* const refs,
+ int* const cache_bits_best) {
if (low_effort) {
- return GetBackwardReferencesLowEffort(width, height, argb, cache_bits,
- hash_chain, refs_tmp1);
+ VP8LBackwardRefs* refs_best;
+ *cache_bits_best = cache_bits_max;
+ refs_best = GetBackwardReferencesLowEffort(
+ width, height, argb, cache_bits_best, hash_chain, refs);
+ if (refs_best == NULL) return VP8_ENC_ERROR_OUT_OF_MEMORY;
+ // Set it in first position.
+ BackwardRefsSwap(refs_best, &refs[0]);
} else {
- return GetBackwardReferences(width, height, argb, quality,
- lz77_types_to_try, cache_bits, hash_chain,
- refs_tmp1, refs_tmp2);
+ if (!GetBackwardReferences(width, height, argb, quality, lz77_types_to_try,
+ cache_bits_max, do_no_cache, hash_chain, refs,
+ cache_bits_best)) {
+ return VP8_ENC_ERROR_OUT_OF_MEMORY;
+ }
}
+ return VP8_ENC_OK;
}
diff --git a/thirdparty/libwebp/src/enc/backward_references_enc.h b/thirdparty/libwebp/src/enc/backward_references_enc.h
index 103ddfdcb7..4c0267b41e 100644
--- a/thirdparty/libwebp/src/enc/backward_references_enc.h
+++ b/thirdparty/libwebp/src/enc/backward_references_enc.h
@@ -16,6 +16,7 @@
#include <assert.h>
#include <stdlib.h>
#include "src/webp/types.h"
+#include "src/webp/encode.h"
#include "src/webp/format_constants.h"
#ifdef __cplusplus
@@ -218,14 +219,19 @@ enum VP8LLZ77Type {
// Evaluates best possible backward references for specified quality.
// The input cache_bits to 'VP8LGetBackwardReferences' sets the maximum cache
// bits to use (passing 0 implies disabling the local color cache).
-// The optimal cache bits is evaluated and set for the *cache_bits parameter.
-// The return value is the pointer to the best of the two backward refs viz,
-// refs[0] or refs[1].
-VP8LBackwardRefs* VP8LGetBackwardReferences(
+// The optimal cache bits is evaluated and set for the *cache_bits_best
+// parameter with the matching refs_best.
+// If do_no_cache == 0, refs is an array of 2 values and the best
+// VP8LBackwardRefs is put in the first element.
+// If do_no_cache != 0, refs is an array of 3 values and the best
+// VP8LBackwardRefs is put in the first element, the best value with no-cache in
+// the second element.
+// In both cases, the last element is used as temporary internally.
+WebPEncodingError VP8LGetBackwardReferences(
int width, int height, const uint32_t* const argb, int quality,
- int low_effort, int lz77_types_to_try, int* const cache_bits,
- const VP8LHashChain* const hash_chain, VP8LBackwardRefs* const refs_tmp1,
- VP8LBackwardRefs* const refs_tmp2);
+ int low_effort, int lz77_types_to_try, int cache_bits_max, int do_no_cache,
+ const VP8LHashChain* const hash_chain, VP8LBackwardRefs* const refs,
+ int* const cache_bits_best);
#ifdef __cplusplus
}
diff --git a/thirdparty/libwebp/src/enc/config_enc.c b/thirdparty/libwebp/src/enc/config_enc.c
index 9d4828978e..3518b41403 100644
--- a/thirdparty/libwebp/src/enc/config_enc.c
+++ b/thirdparty/libwebp/src/enc/config_enc.c
@@ -39,6 +39,8 @@ int WebPConfigInitInternal(WebPConfig* config,
config->partitions = 0;
config->segments = 4;
config->pass = 1;
+ config->qmin = 0;
+ config->qmax = 100;
config->show_compressed = 0;
config->preprocessing = 0;
config->autofilter = 0;
@@ -106,6 +108,9 @@ int WebPValidateConfig(const WebPConfig* config) {
if (config->filter_type < 0 || config->filter_type > 1) return 0;
if (config->autofilter < 0 || config->autofilter > 1) return 0;
if (config->pass < 1 || config->pass > 10) return 0;
+ if (config->qmin < 0 || config->qmax > 100 || config->qmin > config->qmax) {
+ return 0;
+ }
if (config->show_compressed < 0 || config->show_compressed > 1) return 0;
if (config->preprocessing < 0 || config->preprocessing > 7) return 0;
if (config->partitions < 0 || config->partitions > 3) return 0;
diff --git a/thirdparty/libwebp/src/enc/frame_enc.c b/thirdparty/libwebp/src/enc/frame_enc.c
index 1aec376e44..af538d83ba 100644
--- a/thirdparty/libwebp/src/enc/frame_enc.c
+++ b/thirdparty/libwebp/src/enc/frame_enc.c
@@ -31,10 +31,15 @@
// we allow 2k of extra head-room in PARTITION0 limit.
#define PARTITION0_SIZE_LIMIT ((VP8_MAX_PARTITION0_SIZE - 2048ULL) << 11)
+static float Clamp(float v, float min, float max) {
+ return (v < min) ? min : (v > max) ? max : v;
+}
+
typedef struct { // struct for organizing convergence in either size or PSNR
int is_first;
float dq;
float q, last_q;
+ float qmin, qmax;
double value, last_value; // PSNR or size
double target;
int do_size_search;
@@ -47,7 +52,9 @@ static int InitPassStats(const VP8Encoder* const enc, PassStats* const s) {
s->is_first = 1;
s->dq = 10.f;
- s->q = s->last_q = enc->config_->quality;
+ s->qmin = 1.f * enc->config_->qmin;
+ s->qmax = 1.f * enc->config_->qmax;
+ s->q = s->last_q = Clamp(enc->config_->quality, s->qmin, s->qmax);
s->target = do_size_search ? (double)target_size
: (target_PSNR > 0.) ? target_PSNR
: 40.; // default, just in case
@@ -56,10 +63,6 @@ static int InitPassStats(const VP8Encoder* const enc, PassStats* const s) {
return do_size_search;
}
-static float Clamp(float v, float min, float max) {
- return (v < min) ? min : (v > max) ? max : v;
-}
-
static float ComputeNextQ(PassStats* const s) {
float dq;
if (s->is_first) {
@@ -75,7 +78,7 @@ static float ComputeNextQ(PassStats* const s) {
s->dq = Clamp(dq, -30.f, 30.f);
s->last_q = s->q;
s->last_value = s->value;
- s->q = Clamp(s->q + s->dq, 0.f, 100.f);
+ s->q = Clamp(s->q + s->dq, s->qmin, s->qmax);
return s->q;
}
@@ -848,9 +851,10 @@ int VP8EncTokenLoop(VP8Encoder* const enc) {
}
#if (DEBUG_SEARCH > 0)
- printf("#%2d metric:%.1lf -> %.1lf last_q=%.2lf q=%.2lf dq=%.2lf\n",
+ printf("#%2d metric:%.1lf -> %.1lf last_q=%.2lf q=%.2lf dq=%.2lf "
+ " range:[%.1f, %.1f]\n",
num_pass_left, stats.last_value, stats.value,
- stats.last_q, stats.q, stats.dq);
+ stats.last_q, stats.q, stats.dq, stats.qmin, stats.qmax);
#endif
if (enc->max_i4_header_bits_ > 0 && size_p0 > PARTITION0_SIZE_LIMIT) {
++num_pass_left;
diff --git a/thirdparty/libwebp/src/enc/histogram_enc.c b/thirdparty/libwebp/src/enc/histogram_enc.c
index a4e6bf3a98..38a0cebcab 100644
--- a/thirdparty/libwebp/src/enc/histogram_enc.c
+++ b/thirdparty/libwebp/src/enc/histogram_enc.c
@@ -208,6 +208,7 @@ void VP8LHistogramAddSinglePixOrCopy(VP8LHistogram* const histo,
} else if (PixOrCopyIsCacheIdx(v)) {
const int literal_ix =
NUM_LITERAL_CODES + NUM_LENGTH_CODES + PixOrCopyCacheIdx(v);
+ assert(histo->palette_code_bits_ != 0);
++histo->literal_[literal_ix];
} else {
int code, extra_bits;
@@ -1170,13 +1171,15 @@ static void RemoveEmptyHistograms(VP8LHistogramSet* const image_histo) {
int VP8LGetHistoImageSymbols(int xsize, int ysize,
const VP8LBackwardRefs* const refs,
int quality, int low_effort,
- int histo_bits, int cache_bits,
+ int histogram_bits, int cache_bits,
VP8LHistogramSet* const image_histo,
VP8LHistogram* const tmp_histo,
uint16_t* const histogram_symbols) {
int ok = 0;
- const int histo_xsize = histo_bits ? VP8LSubSampleSize(xsize, histo_bits) : 1;
- const int histo_ysize = histo_bits ? VP8LSubSampleSize(ysize, histo_bits) : 1;
+ const int histo_xsize =
+ histogram_bits ? VP8LSubSampleSize(xsize, histogram_bits) : 1;
+ const int histo_ysize =
+ histogram_bits ? VP8LSubSampleSize(ysize, histogram_bits) : 1;
const int image_histo_raw_size = histo_xsize * histo_ysize;
VP8LHistogramSet* const orig_histo =
VP8LAllocateHistogramSet(image_histo_raw_size, cache_bits);
@@ -1192,7 +1195,7 @@ int VP8LGetHistoImageSymbols(int xsize, int ysize,
if (orig_histo == NULL || map_tmp == NULL) goto Error;
// Construct the histograms from backward references.
- HistogramBuild(xsize, histo_bits, refs, orig_histo);
+ HistogramBuild(xsize, histogram_bits, refs, orig_histo);
// Copies the histograms and computes its bit_cost.
// histogram_symbols is optimized
HistogramCopyAndAnalyze(orig_histo, image_histo, &num_used,
diff --git a/thirdparty/libwebp/src/enc/histogram_enc.h b/thirdparty/libwebp/src/enc/histogram_enc.h
index 54c2d21783..c3428b5d55 100644
--- a/thirdparty/libwebp/src/enc/histogram_enc.h
+++ b/thirdparty/libwebp/src/enc/histogram_enc.h
@@ -64,8 +64,8 @@ void VP8LHistogramCreate(VP8LHistogram* const p,
const VP8LBackwardRefs* const refs,
int palette_code_bits);
-// Return the size of the histogram for a given palette_code_bits.
-int VP8LGetHistogramSize(int palette_code_bits);
+// Return the size of the histogram for a given cache_bits.
+int VP8LGetHistogramSize(int cache_bits);
// Set the palette_code_bits and reset the stats.
// If init_arrays is true, the arrays are also filled with 0's.
@@ -110,7 +110,7 @@ int VP8LGetHistoImageSymbols(int xsize, int ysize,
const VP8LBackwardRefs* const refs,
int quality, int low_effort,
int histogram_bits, int cache_bits,
- VP8LHistogramSet* const image_in,
+ VP8LHistogramSet* const image_histo,
VP8LHistogram* const tmp_histo,
uint16_t* const histogram_symbols);
diff --git a/thirdparty/libwebp/src/enc/picture_csp_enc.c b/thirdparty/libwebp/src/enc/picture_csp_enc.c
index 718e014ed2..35eede9635 100644
--- a/thirdparty/libwebp/src/enc/picture_csp_enc.c
+++ b/thirdparty/libwebp/src/enc/picture_csp_enc.c
@@ -61,16 +61,14 @@ static int CheckNonOpaque(const uint8_t* alpha, int width, int height,
// Checking for the presence of non-opaque alpha.
int WebPPictureHasTransparency(const WebPPicture* picture) {
if (picture == NULL) return 0;
- if (!picture->use_argb) {
- return CheckNonOpaque(picture->a, picture->width, picture->height,
- 1, picture->a_stride);
- } else {
+ if (picture->use_argb) {
const int alpha_offset = ALPHA_OFFSET;
return CheckNonOpaque((const uint8_t*)picture->argb + alpha_offset,
picture->width, picture->height,
4, picture->argb_stride * sizeof(*picture->argb));
}
- return 0;
+ return CheckNonOpaque(picture->a, picture->width, picture->height,
+ 1, picture->a_stride);
}
//------------------------------------------------------------------------------
@@ -90,8 +88,9 @@ int WebPPictureHasTransparency(const WebPPicture* picture) {
static int kLinearToGammaTab[kGammaTabSize + 1];
static uint16_t kGammaToLinearTab[256];
static volatile int kGammaTablesOk = 0;
+static void InitGammaTables(void);
-static WEBP_TSAN_IGNORE_FUNCTION void InitGammaTables(void) {
+WEBP_DSP_INIT_FUNC(InitGammaTables) {
if (!kGammaTablesOk) {
int v;
const double scale = (double)(1 << kGammaTabFix) / kGammaScale;
@@ -181,8 +180,9 @@ static uint32_t kLinearToGammaTabS[kGammaTabSize + 2];
#define GAMMA_TO_LINEAR_BITS 14
static uint32_t kGammaToLinearTabS[MAX_Y_T + 1]; // size scales with Y_FIX
static volatile int kGammaTablesSOk = 0;
+static void InitGammaTablesS(void);
-static WEBP_TSAN_IGNORE_FUNCTION void InitGammaTablesS(void) {
+WEBP_DSP_INIT_FUNC(InitGammaTablesS) {
assert(2 * GAMMA_TO_LINEAR_BITS < 32); // we use uint32_t intermediate values
if (!kGammaTablesSOk) {
int v;
diff --git a/thirdparty/libwebp/src/enc/picture_rescale_enc.c b/thirdparty/libwebp/src/enc/picture_rescale_enc.c
index 58a6ae7b9d..a75f5d9c06 100644
--- a/thirdparty/libwebp/src/enc/picture_rescale_enc.c
+++ b/thirdparty/libwebp/src/enc/picture_rescale_enc.c
@@ -164,22 +164,25 @@ int WebPPictureCrop(WebPPicture* pic,
//------------------------------------------------------------------------------
// Simple picture rescaler
-static void RescalePlane(const uint8_t* src,
- int src_width, int src_height, int src_stride,
- uint8_t* dst,
- int dst_width, int dst_height, int dst_stride,
- rescaler_t* const work,
- int num_channels) {
+static int RescalePlane(const uint8_t* src,
+ int src_width, int src_height, int src_stride,
+ uint8_t* dst,
+ int dst_width, int dst_height, int dst_stride,
+ rescaler_t* const work,
+ int num_channels) {
WebPRescaler rescaler;
int y = 0;
- WebPRescalerInit(&rescaler, src_width, src_height,
- dst, dst_width, dst_height, dst_stride,
- num_channels, work);
+ if (!WebPRescalerInit(&rescaler, src_width, src_height,
+ dst, dst_width, dst_height, dst_stride,
+ num_channels, work)) {
+ return 0;
+ }
while (y < src_height) {
y += WebPRescalerImport(&rescaler, src_height - y,
src + y * src_stride, src_stride);
WebPRescalerExport(&rescaler);
}
+ return 1;
}
static void AlphaMultiplyARGB(WebPPicture* const pic, int inverse) {
@@ -222,25 +225,28 @@ int WebPPictureRescale(WebPPicture* pic, int width, int height) {
// If present, we need to rescale alpha first (for AlphaMultiplyY).
if (pic->a != NULL) {
WebPInitAlphaProcessing();
- RescalePlane(pic->a, prev_width, prev_height, pic->a_stride,
- tmp.a, width, height, tmp.a_stride, work, 1);
+ if (!RescalePlane(pic->a, prev_width, prev_height, pic->a_stride,
+ tmp.a, width, height, tmp.a_stride, work, 1)) {
+ return 0;
+ }
}
// We take transparency into account on the luma plane only. That's not
// totally exact blending, but still is a good approximation.
AlphaMultiplyY(pic, 0);
- RescalePlane(pic->y, prev_width, prev_height, pic->y_stride,
- tmp.y, width, height, tmp.y_stride, work, 1);
+ if (!RescalePlane(pic->y, prev_width, prev_height, pic->y_stride,
+ tmp.y, width, height, tmp.y_stride, work, 1) ||
+ !RescalePlane(pic->u,
+ HALVE(prev_width), HALVE(prev_height), pic->uv_stride,
+ tmp.u,
+ HALVE(width), HALVE(height), tmp.uv_stride, work, 1) ||
+ !RescalePlane(pic->v,
+ HALVE(prev_width), HALVE(prev_height), pic->uv_stride,
+ tmp.v,
+ HALVE(width), HALVE(height), tmp.uv_stride, work, 1)) {
+ return 0;
+ }
AlphaMultiplyY(&tmp, 1);
-
- RescalePlane(pic->u,
- HALVE(prev_width), HALVE(prev_height), pic->uv_stride,
- tmp.u,
- HALVE(width), HALVE(height), tmp.uv_stride, work, 1);
- RescalePlane(pic->v,
- HALVE(prev_width), HALVE(prev_height), pic->uv_stride,
- tmp.v,
- HALVE(width), HALVE(height), tmp.uv_stride, work, 1);
} else {
work = (rescaler_t*)WebPSafeMalloc(2ULL * width * 4, sizeof(*work));
if (work == NULL) {
@@ -252,11 +258,12 @@ int WebPPictureRescale(WebPPicture* pic, int width, int height) {
// the premultiplication afterward (while preserving the alpha channel).
WebPInitAlphaProcessing();
AlphaMultiplyARGB(pic, 0);
- RescalePlane((const uint8_t*)pic->argb, prev_width, prev_height,
- pic->argb_stride * 4,
- (uint8_t*)tmp.argb, width, height,
- tmp.argb_stride * 4,
- work, 4);
+ if (!RescalePlane((const uint8_t*)pic->argb, prev_width, prev_height,
+ pic->argb_stride * 4,
+ (uint8_t*)tmp.argb, width, height,
+ tmp.argb_stride * 4, work, 4)) {
+ return 0;
+ }
AlphaMultiplyARGB(&tmp, 1);
}
WebPPictureFree(pic);
diff --git a/thirdparty/libwebp/src/enc/picture_tools_enc.c b/thirdparty/libwebp/src/enc/picture_tools_enc.c
index d0e8a495da..38cb01534a 100644
--- a/thirdparty/libwebp/src/enc/picture_tools_enc.c
+++ b/thirdparty/libwebp/src/enc/picture_tools_enc.c
@@ -83,6 +83,19 @@ static int SmoothenBlock(const uint8_t* a_ptr, int a_stride, uint8_t* y_ptr,
return (count == 0);
}
+void WebPReplaceTransparentPixels(WebPPicture* const pic, uint32_t color) {
+ if (pic != NULL && pic->use_argb) {
+ int y = pic->height;
+ uint32_t* argb = pic->argb;
+ color &= 0xffffffu; // force alpha=0
+ WebPInitAlphaProcessing();
+ while (y-- > 0) {
+ WebPAlphaReplace(argb, pic->width, color);
+ argb += pic->argb_stride;
+ }
+ }
+}
+
void WebPCleanupTransparentArea(WebPPicture* pic) {
int x, y, w, h;
if (pic == NULL) return;
@@ -165,24 +178,6 @@ void WebPCleanupTransparentArea(WebPPicture* pic) {
#undef SIZE
#undef SIZE2
-void WebPCleanupTransparentAreaLossless(WebPPicture* const pic) {
- int x, y, w, h;
- uint32_t* argb;
- assert(pic != NULL && pic->use_argb);
- w = pic->width;
- h = pic->height;
- argb = pic->argb;
-
- for (y = 0; y < h; ++y) {
- for (x = 0; x < w; ++x) {
- if ((argb[x] & 0xff000000) == 0) {
- argb[x] = 0x00000000;
- }
- }
- argb += pic->argb_stride;
- }
-}
-
//------------------------------------------------------------------------------
// Blend color and remove transparency info
diff --git a/thirdparty/libwebp/src/enc/syntax_enc.c b/thirdparty/libwebp/src/enc/syntax_enc.c
index a9e5a6cf0f..e18cf650ca 100644
--- a/thirdparty/libwebp/src/enc/syntax_enc.c
+++ b/thirdparty/libwebp/src/enc/syntax_enc.c
@@ -349,7 +349,7 @@ int VP8EncWrite(VP8Encoder* const enc) {
(enc->alpha_data_size_ & 1);
riff_size += CHUNK_HEADER_SIZE + padded_alpha_size;
}
- // Sanity check.
+ // RIFF size should fit in 32-bits.
if (riff_size > 0xfffffffeU) {
return WebPEncodingSetError(pic, VP8_ENC_ERROR_FILE_TOO_BIG);
}
diff --git a/thirdparty/libwebp/src/enc/vp8i_enc.h b/thirdparty/libwebp/src/enc/vp8i_enc.h
index fedcaeea27..67e9509367 100644
--- a/thirdparty/libwebp/src/enc/vp8i_enc.h
+++ b/thirdparty/libwebp/src/enc/vp8i_enc.h
@@ -31,8 +31,8 @@ extern "C" {
// version numbers
#define ENC_MAJ_VERSION 1
-#define ENC_MIN_VERSION 1
-#define ENC_REV_VERSION 0
+#define ENC_MIN_VERSION 2
+#define ENC_REV_VERSION 1
enum { MAX_LF_LEVELS = 64, // Maximum loop filter level
MAX_VARIABLE_LEVEL = 67, // last (inclusive) level with variable cost
@@ -286,8 +286,7 @@ int VP8IteratorNext(VP8EncIterator* const it);
// save the yuv_out_ boundary values to top_/left_ arrays for next iterations.
void VP8IteratorSaveBoundary(VP8EncIterator* const it);
// Report progression based on macroblock rows. Return 0 for user-abort request.
-int VP8IteratorProgress(const VP8EncIterator* const it,
- int final_delta_percent);
+int VP8IteratorProgress(const VP8EncIterator* const it, int delta);
// Intra4x4 iterations
void VP8IteratorStartI4(VP8EncIterator* const it);
// returns true if not done.
@@ -505,9 +504,9 @@ int WebPPictureAllocARGB(WebPPicture* const picture, int width, int height);
// Returns false in case of error (invalid param, out-of-memory).
int WebPPictureAllocYUVA(WebPPicture* const picture, int width, int height);
-// Clean-up the RGB samples under fully transparent area, to help lossless
-// compressibility (no guarantee, though). Assumes that pic->use_argb is true.
-void WebPCleanupTransparentAreaLossless(WebPPicture* const pic);
+// Replace samples that are fully transparent by 'color' to help compressibility
+// (no guarantee, though). Assumes pic->use_argb is true.
+void WebPReplaceTransparentPixels(WebPPicture* const pic, uint32_t color);
//------------------------------------------------------------------------------
diff --git a/thirdparty/libwebp/src/enc/vp8l_enc.c b/thirdparty/libwebp/src/enc/vp8l_enc.c
index 2efd403f77..e330e716f1 100644
--- a/thirdparty/libwebp/src/enc/vp8l_enc.c
+++ b/thirdparty/libwebp/src/enc/vp8l_enc.c
@@ -65,25 +65,22 @@ static WEBP_INLINE void SwapColor(uint32_t* const col1, uint32_t* const col2) {
*col2 = tmp;
}
-static void GreedyMinimizeDeltas(uint32_t palette[], int num_colors) {
- // Find greedily always the closest color of the predicted color to minimize
- // deltas in the palette. This reduces storage needs since the
- // palette is stored with delta encoding.
- uint32_t predict = 0x00000000;
- int i, k;
- for (i = 0; i < num_colors; ++i) {
- int best_ix = i;
- uint32_t best_score = ~0U;
- for (k = i; k < num_colors; ++k) {
- const uint32_t cur_score = PaletteColorDistance(palette[k], predict);
- if (best_score > cur_score) {
- best_score = cur_score;
- best_ix = k;
- }
+static WEBP_INLINE int SearchColorNoIdx(const uint32_t sorted[], uint32_t color,
+ int num_colors) {
+ int low = 0, hi = num_colors;
+ if (sorted[low] == color) return low; // loop invariant: sorted[low] != color
+ while (1) {
+ const int mid = (low + hi) >> 1;
+ if (sorted[mid] == color) {
+ return mid;
+ } else if (sorted[mid] < color) {
+ low = mid;
+ } else {
+ hi = mid;
}
- SwapColor(&palette[best_ix], &palette[i]);
- predict = palette[i];
}
+ assert(0);
+ return 0;
}
// The palette has been sorted by alpha. This function checks if the other
@@ -92,7 +89,8 @@ static void GreedyMinimizeDeltas(uint32_t palette[], int num_colors) {
// no benefit to re-organize them greedily. A monotonic development
// would be spotted in green-only situations (like lossy alpha) or gray-scale
// images.
-static int PaletteHasNonMonotonousDeltas(uint32_t palette[], int num_colors) {
+static int PaletteHasNonMonotonousDeltas(const uint32_t* const palette,
+ int num_colors) {
uint32_t predict = 0x000000;
int i;
uint8_t sign_found = 0x00;
@@ -115,28 +113,215 @@ static int PaletteHasNonMonotonousDeltas(uint32_t palette[], int num_colors) {
return (sign_found & (sign_found << 1)) != 0; // two consequent signs.
}
+static void PaletteSortMinimizeDeltas(const uint32_t* const palette_sorted,
+ int num_colors, uint32_t* const palette) {
+ uint32_t predict = 0x00000000;
+ int i, k;
+ memcpy(palette, palette_sorted, num_colors * sizeof(*palette));
+ if (!PaletteHasNonMonotonousDeltas(palette_sorted, num_colors)) return;
+ // Find greedily always the closest color of the predicted color to minimize
+ // deltas in the palette. This reduces storage needs since the
+ // palette is stored with delta encoding.
+ for (i = 0; i < num_colors; ++i) {
+ int best_ix = i;
+ uint32_t best_score = ~0U;
+ for (k = i; k < num_colors; ++k) {
+ const uint32_t cur_score = PaletteColorDistance(palette[k], predict);
+ if (best_score > cur_score) {
+ best_score = cur_score;
+ best_ix = k;
+ }
+ }
+ SwapColor(&palette[best_ix], &palette[i]);
+ predict = palette[i];
+ }
+}
+
+// Sort palette in increasing order and prepare an inverse mapping array.
+static void PrepareMapToPalette(const uint32_t palette[], uint32_t num_colors,
+ uint32_t sorted[], uint32_t idx_map[]) {
+ uint32_t i;
+ memcpy(sorted, palette, num_colors * sizeof(*sorted));
+ qsort(sorted, num_colors, sizeof(*sorted), PaletteCompareColorsForQsort);
+ for (i = 0; i < num_colors; ++i) {
+ idx_map[SearchColorNoIdx(sorted, palette[i], num_colors)] = i;
+ }
+}
+
// -----------------------------------------------------------------------------
-// Palette
+// Modified Zeng method from "A Survey on Palette Reordering
+// Methods for Improving the Compression of Color-Indexed Images" by Armando J.
+// Pinho and Antonio J. R. Neves.
+
+// Finds the biggest cooccurrence in the matrix.
+static void CoOccurrenceFindMax(const uint32_t* const cooccurrence,
+ uint32_t num_colors, uint8_t* const c1,
+ uint8_t* const c2) {
+ // Find the index that is most frequently located adjacent to other
+ // (different) indexes.
+ uint32_t best_sum = 0u;
+ uint32_t i, j, best_cooccurrence;
+ *c1 = 0u;
+ for (i = 0; i < num_colors; ++i) {
+ uint32_t sum = 0;
+ for (j = 0; j < num_colors; ++j) sum += cooccurrence[i * num_colors + j];
+ if (sum > best_sum) {
+ best_sum = sum;
+ *c1 = i;
+ }
+ }
+ // Find the index that is most frequently found adjacent to *c1.
+ *c2 = 0u;
+ best_cooccurrence = 0u;
+ for (i = 0; i < num_colors; ++i) {
+ if (cooccurrence[*c1 * num_colors + i] > best_cooccurrence) {
+ best_cooccurrence = cooccurrence[*c1 * num_colors + i];
+ *c2 = i;
+ }
+ }
+ assert(*c1 != *c2);
+}
-// If number of colors in the image is less than or equal to MAX_PALETTE_SIZE,
-// creates a palette and returns true, else returns false.
-static int AnalyzeAndCreatePalette(const WebPPicture* const pic,
- int low_effort,
- uint32_t palette[MAX_PALETTE_SIZE],
- int* const palette_size) {
- const int num_colors = WebPGetColorPalette(pic, palette);
- if (num_colors > MAX_PALETTE_SIZE) {
- *palette_size = 0;
- return 0;
+// Builds the cooccurrence matrix
+static WebPEncodingError CoOccurrenceBuild(const WebPPicture* const pic,
+ const uint32_t* const palette,
+ uint32_t num_colors,
+ uint32_t* cooccurrence) {
+ uint32_t *lines, *line_top, *line_current, *line_tmp;
+ int x, y;
+ const uint32_t* src = pic->argb;
+ uint32_t prev_pix = ~src[0];
+ uint32_t prev_idx = 0u;
+ uint32_t idx_map[MAX_PALETTE_SIZE] = {0};
+ uint32_t palette_sorted[MAX_PALETTE_SIZE];
+ lines = (uint32_t*)WebPSafeMalloc(2 * pic->width, sizeof(*lines));
+ if (lines == NULL) return VP8_ENC_ERROR_OUT_OF_MEMORY;
+ line_top = &lines[0];
+ line_current = &lines[pic->width];
+ PrepareMapToPalette(palette, num_colors, palette_sorted, idx_map);
+ for (y = 0; y < pic->height; ++y) {
+ for (x = 0; x < pic->width; ++x) {
+ const uint32_t pix = src[x];
+ if (pix != prev_pix) {
+ prev_idx = idx_map[SearchColorNoIdx(palette_sorted, pix, num_colors)];
+ prev_pix = pix;
+ }
+ line_current[x] = prev_idx;
+ // 4-connectivity is what works best as mentioned in "On the relation
+ // between Memon's and the modified Zeng's palette reordering methods".
+ if (x > 0 && prev_idx != line_current[x - 1]) {
+ const uint32_t left_idx = line_current[x - 1];
+ ++cooccurrence[prev_idx * num_colors + left_idx];
+ ++cooccurrence[left_idx * num_colors + prev_idx];
+ }
+ if (y > 0 && prev_idx != line_top[x]) {
+ const uint32_t top_idx = line_top[x];
+ ++cooccurrence[prev_idx * num_colors + top_idx];
+ ++cooccurrence[top_idx * num_colors + prev_idx];
+ }
+ }
+ line_tmp = line_top;
+ line_top = line_current;
+ line_current = line_tmp;
+ src += pic->argb_stride;
+ }
+ WebPSafeFree(lines);
+ return VP8_ENC_OK;
+}
+
+struct Sum {
+ uint8_t index;
+ uint32_t sum;
+};
+
+// Implements the modified Zeng method from "A Survey on Palette Reordering
+// Methods for Improving the Compression of Color-Indexed Images" by Armando J.
+// Pinho and Antonio J. R. Neves.
+static WebPEncodingError PaletteSortModifiedZeng(
+ const WebPPicture* const pic, const uint32_t* const palette_sorted,
+ uint32_t num_colors, uint32_t* const palette) {
+ uint32_t i, j, ind;
+ uint8_t remapping[MAX_PALETTE_SIZE];
+ uint32_t* cooccurrence;
+ struct Sum sums[MAX_PALETTE_SIZE];
+ uint32_t first, last;
+ uint32_t num_sums;
+ // TODO(vrabaud) check whether one color images should use palette or not.
+ if (num_colors <= 1) return VP8_ENC_OK;
+ // Build the co-occurrence matrix.
+ cooccurrence =
+ (uint32_t*)WebPSafeCalloc(num_colors * num_colors, sizeof(*cooccurrence));
+ if (cooccurrence == NULL) return VP8_ENC_ERROR_OUT_OF_MEMORY;
+ if (CoOccurrenceBuild(pic, palette_sorted, num_colors, cooccurrence) !=
+ VP8_ENC_OK) {
+ WebPSafeFree(cooccurrence);
+ return VP8_ENC_ERROR_OUT_OF_MEMORY;
+ }
+
+ // Initialize the mapping list with the two best indices.
+ CoOccurrenceFindMax(cooccurrence, num_colors, &remapping[0], &remapping[1]);
+
+ // We need to append and prepend to the list of remapping. To this end, we
+ // actually define the next start/end of the list as indices in a vector (with
+ // a wrap around when the end is reached).
+ first = 0;
+ last = 1;
+ num_sums = num_colors - 2; // -2 because we know the first two values
+ if (num_sums > 0) {
+ // Initialize the sums with the first two remappings and find the best one
+ struct Sum* best_sum = &sums[0];
+ best_sum->index = 0u;
+ best_sum->sum = 0u;
+ for (i = 0, j = 0; i < num_colors; ++i) {
+ if (i == remapping[0] || i == remapping[1]) continue;
+ sums[j].index = i;
+ sums[j].sum = cooccurrence[i * num_colors + remapping[0]] +
+ cooccurrence[i * num_colors + remapping[1]];
+ if (sums[j].sum > best_sum->sum) best_sum = &sums[j];
+ ++j;
+ }
+
+ while (num_sums > 0) {
+ const uint8_t best_index = best_sum->index;
+ // Compute delta to know if we need to prepend or append the best index.
+ int32_t delta = 0;
+ const int32_t n = num_colors - num_sums;
+ for (ind = first, j = 0; (ind + j) % num_colors != last + 1; ++j) {
+ const uint16_t l_j = remapping[(ind + j) % num_colors];
+ delta += (n - 1 - 2 * (int32_t)j) *
+ (int32_t)cooccurrence[best_index * num_colors + l_j];
+ }
+ if (delta > 0) {
+ first = (first == 0) ? num_colors - 1 : first - 1;
+ remapping[first] = best_index;
+ } else {
+ ++last;
+ remapping[last] = best_index;
+ }
+ // Remove best_sum from sums.
+ *best_sum = sums[num_sums - 1];
+ --num_sums;
+ // Update all the sums and find the best one.
+ best_sum = &sums[0];
+ for (i = 0; i < num_sums; ++i) {
+ sums[i].sum += cooccurrence[best_index * num_colors + sums[i].index];
+ if (sums[i].sum > best_sum->sum) best_sum = &sums[i];
+ }
+ }
}
- *palette_size = num_colors;
- qsort(palette, num_colors, sizeof(*palette), PaletteCompareColorsForQsort);
- if (!low_effort && PaletteHasNonMonotonousDeltas(palette, num_colors)) {
- GreedyMinimizeDeltas(palette, num_colors);
+ assert((last + 1) % num_colors == first);
+ WebPSafeFree(cooccurrence);
+
+ // Re-map the palette.
+ for (i = 0; i < num_colors; ++i) {
+ palette[i] = palette_sorted[remapping[(first + i) % num_colors]];
}
- return 1;
+ return VP8_ENC_OK;
}
+// -----------------------------------------------------------------------------
+// Palette
+
// These five modes are evaluated and their respective entropy is computed.
typedef enum {
kDirect = 0,
@@ -144,10 +329,18 @@ typedef enum {
kSubGreen = 2,
kSpatialSubGreen = 3,
kPalette = 4,
- kNumEntropyIx = 5
+ kPaletteAndSpatial = 5,
+ kNumEntropyIx = 6
} EntropyIx;
typedef enum {
+ kSortedDefault = 0,
+ kMinimizeDelta = 1,
+ kModifiedZeng = 2,
+ kUnusedPalette = 3,
+} PaletteSorting;
+
+typedef enum {
kHistoAlpha = 0,
kHistoAlphaPred,
kHistoGreen,
@@ -354,14 +547,21 @@ static int GetTransformBits(int method, int histo_bits) {
}
// Set of parameters to be used in each iteration of the cruncher.
-#define CRUNCH_CONFIGS_LZ77_MAX 2
+#define CRUNCH_SUBCONFIGS_MAX 2
+typedef struct {
+ int lz77_;
+ int do_no_cache_;
+} CrunchSubConfig;
typedef struct {
int entropy_idx_;
- int lz77s_types_to_try_[CRUNCH_CONFIGS_LZ77_MAX];
- int lz77s_types_to_try_size_;
+ PaletteSorting palette_sorting_type_;
+ CrunchSubConfig sub_configs_[CRUNCH_SUBCONFIGS_MAX];
+ int sub_configs_size_;
} CrunchConfig;
-#define CRUNCH_CONFIGS_MAX kNumEntropyIx
+// +2 because we add a palette sorting configuration for kPalette and
+// kPaletteAndSpatial.
+#define CRUNCH_CONFIGS_MAX (kNumEntropyIx + 2)
static int EncoderAnalyze(VP8LEncoder* const enc,
CrunchConfig crunch_configs[CRUNCH_CONFIGS_MAX],
@@ -376,11 +576,20 @@ static int EncoderAnalyze(VP8LEncoder* const enc,
int i;
int use_palette;
int n_lz77s;
+ // If set to 0, analyze the cache with the computed cache value. If 1, also
+ // analyze with no-cache.
+ int do_no_cache = 0;
assert(pic != NULL && pic->argb != NULL);
- use_palette =
- AnalyzeAndCreatePalette(pic, low_effort,
- enc->palette_, &enc->palette_size_);
+ // Check whether a palette is possible.
+ enc->palette_size_ = WebPGetColorPalette(pic, enc->palette_sorted_);
+ use_palette = (enc->palette_size_ <= MAX_PALETTE_SIZE);
+ if (!use_palette) {
+ enc->palette_size_ = 0;
+ } else {
+ qsort(enc->palette_sorted_, enc->palette_size_,
+ sizeof(*enc->palette_sorted_), PaletteCompareColorsForQsort);
+ }
// Empirical bit sizes.
enc->histo_bits_ = GetHistoBits(method, use_palette,
@@ -390,6 +599,8 @@ static int EncoderAnalyze(VP8LEncoder* const enc,
if (low_effort) {
// AnalyzeEntropy is somewhat slow.
crunch_configs[0].entropy_idx_ = use_palette ? kPalette : kSpatialSubGreen;
+ crunch_configs[0].palette_sorting_type_ =
+ use_palette ? kSortedDefault : kUnusedPalette;
n_lz77s = 1;
*crunch_configs_size = 1;
} else {
@@ -402,29 +613,59 @@ static int EncoderAnalyze(VP8LEncoder* const enc,
return 0;
}
if (method == 6 && config->quality == 100) {
+ do_no_cache = 1;
// Go brute force on all transforms.
*crunch_configs_size = 0;
for (i = 0; i < kNumEntropyIx; ++i) {
- if (i != kPalette || use_palette) {
+ // We can only apply kPalette or kPaletteAndSpatial if we can indeed use
+ // a palette.
+ if ((i != kPalette && i != kPaletteAndSpatial) || use_palette) {
assert(*crunch_configs_size < CRUNCH_CONFIGS_MAX);
- crunch_configs[(*crunch_configs_size)++].entropy_idx_ = i;
+ crunch_configs[(*crunch_configs_size)].entropy_idx_ = i;
+ if (use_palette && (i == kPalette || i == kPaletteAndSpatial)) {
+ crunch_configs[(*crunch_configs_size)].palette_sorting_type_ =
+ kMinimizeDelta;
+ ++*crunch_configs_size;
+ // Also add modified Zeng's method.
+ crunch_configs[(*crunch_configs_size)].entropy_idx_ = i;
+ crunch_configs[(*crunch_configs_size)].palette_sorting_type_ =
+ kModifiedZeng;
+ } else {
+ crunch_configs[(*crunch_configs_size)].palette_sorting_type_ =
+ kUnusedPalette;
+ }
+ ++*crunch_configs_size;
}
}
} else {
// Only choose the guessed best transform.
*crunch_configs_size = 1;
crunch_configs[0].entropy_idx_ = min_entropy_ix;
+ crunch_configs[0].palette_sorting_type_ =
+ use_palette ? kMinimizeDelta : kUnusedPalette;
+ if (config->quality >= 75 && method == 5) {
+ // Test with and without color cache.
+ do_no_cache = 1;
+ // If we have a palette, also check in combination with spatial.
+ if (min_entropy_ix == kPalette) {
+ *crunch_configs_size = 2;
+ crunch_configs[1].entropy_idx_ = kPaletteAndSpatial;
+ crunch_configs[1].palette_sorting_type_ = kMinimizeDelta;
+ }
+ }
}
}
// Fill in the different LZ77s.
- assert(n_lz77s <= CRUNCH_CONFIGS_LZ77_MAX);
+ assert(n_lz77s <= CRUNCH_SUBCONFIGS_MAX);
for (i = 0; i < *crunch_configs_size; ++i) {
int j;
for (j = 0; j < n_lz77s; ++j) {
- crunch_configs[i].lz77s_types_to_try_[j] =
+ assert(j < CRUNCH_SUBCONFIGS_MAX);
+ crunch_configs[i].sub_configs_[j].lz77_ =
(j == 0) ? kLZ77Standard | kLZ77RLE : kLZ77Box;
+ crunch_configs[i].sub_configs_[j].do_no_cache_ = do_no_cache;
}
- crunch_configs[i].lz77s_types_to_try_size_ = n_lz77s;
+ crunch_configs[i].sub_configs_size_ = n_lz77s;
}
return 1;
}
@@ -440,7 +681,7 @@ static int EncoderInit(VP8LEncoder* const enc) {
int i;
if (!VP8LHashChainInit(&enc->hash_chain_, pix_cnt)) return 0;
- for (i = 0; i < 3; ++i) VP8LBackwardRefsInit(&enc->refs_[i], refs_block_size);
+ for (i = 0; i < 4; ++i) VP8LBackwardRefsInit(&enc->refs_[i], refs_block_size);
return 1;
}
@@ -769,13 +1010,10 @@ static WebPEncodingError StoreImageToBitMask(
}
// Special case of EncodeImageInternal() for cache-bits=0, histo_bits=31
-static WebPEncodingError EncodeImageNoHuffman(VP8LBitWriter* const bw,
- const uint32_t* const argb,
- VP8LHashChain* const hash_chain,
- VP8LBackwardRefs* const refs_tmp1,
- VP8LBackwardRefs* const refs_tmp2,
- int width, int height,
- int quality, int low_effort) {
+static WebPEncodingError EncodeImageNoHuffman(
+ VP8LBitWriter* const bw, const uint32_t* const argb,
+ VP8LHashChain* const hash_chain, VP8LBackwardRefs* const refs_array,
+ int width, int height, int quality, int low_effort) {
int i;
int max_tokens = 0;
WebPEncodingError err = VP8_ENC_OK;
@@ -798,13 +1036,11 @@ static WebPEncodingError EncodeImageNoHuffman(VP8LBitWriter* const bw,
err = VP8_ENC_ERROR_OUT_OF_MEMORY;
goto Error;
}
- refs = VP8LGetBackwardReferences(width, height, argb, quality, 0,
- kLZ77Standard | kLZ77RLE, &cache_bits,
- hash_chain, refs_tmp1, refs_tmp2);
- if (refs == NULL) {
- err = VP8_ENC_ERROR_OUT_OF_MEMORY;
- goto Error;
- }
+ err = VP8LGetBackwardReferences(
+ width, height, argb, quality, /*low_effort=*/0, kLZ77Standard | kLZ77RLE,
+ cache_bits, /*do_no_cache=*/0, hash_chain, refs_array, &cache_bits);
+ if (err != VP8_ENC_OK) goto Error;
+ refs = &refs_array[0];
histogram_image = VP8LAllocateHistogramSet(1, cache_bits);
if (histogram_image == NULL) {
err = VP8_ENC_ERROR_OUT_OF_MEMORY;
@@ -860,11 +1096,11 @@ static WebPEncodingError EncodeImageNoHuffman(VP8LBitWriter* const bw,
static WebPEncodingError EncodeImageInternal(
VP8LBitWriter* const bw, const uint32_t* const argb,
- VP8LHashChain* const hash_chain, VP8LBackwardRefs refs_array[3], int width,
+ VP8LHashChain* const hash_chain, VP8LBackwardRefs refs_array[4], int width,
int height, int quality, int low_effort, int use_cache,
const CrunchConfig* const config, int* cache_bits, int histogram_bits,
size_t init_byte_position, int* const hdr_size, int* const data_size) {
- WebPEncodingError err = VP8_ENC_OK;
+ WebPEncodingError err = VP8_ENC_ERROR_OUT_OF_MEMORY;
const uint32_t histogram_image_xysize =
VP8LSubSampleSize(width, histogram_bits) *
VP8LSubSampleSize(height, histogram_bits);
@@ -876,103 +1112,103 @@ static WebPEncodingError EncodeImageInternal(
3ULL * CODE_LENGTH_CODES, sizeof(*huff_tree));
HuffmanTreeToken* tokens = NULL;
HuffmanTreeCode* huffman_codes = NULL;
- VP8LBackwardRefs* refs_best;
- VP8LBackwardRefs* refs_tmp;
uint16_t* const histogram_symbols =
(uint16_t*)WebPSafeMalloc(histogram_image_xysize,
sizeof(*histogram_symbols));
- int lz77s_idx;
+ int sub_configs_idx;
+ int cache_bits_init, write_histogram_image;
VP8LBitWriter bw_init = *bw, bw_best;
int hdr_size_tmp;
+ VP8LHashChain hash_chain_histogram; // histogram image hash chain
+ size_t bw_size_best = ~(size_t)0;
assert(histogram_bits >= MIN_HUFFMAN_BITS);
assert(histogram_bits <= MAX_HUFFMAN_BITS);
assert(hdr_size != NULL);
assert(data_size != NULL);
- if (histogram_symbols == NULL) {
- err = VP8_ENC_ERROR_OUT_OF_MEMORY;
+ // Make sure we can allocate the different objects.
+ memset(&hash_chain_histogram, 0, sizeof(hash_chain_histogram));
+ if (huff_tree == NULL || histogram_symbols == NULL ||
+ !VP8LHashChainInit(&hash_chain_histogram, histogram_image_xysize) ||
+ !VP8LHashChainFill(hash_chain, quality, argb, width, height,
+ low_effort)) {
goto Error;
}
-
if (use_cache) {
// If the value is different from zero, it has been set during the
// palette analysis.
- if (*cache_bits == 0) *cache_bits = MAX_COLOR_CACHE_BITS;
+ cache_bits_init = (*cache_bits == 0) ? MAX_COLOR_CACHE_BITS : *cache_bits;
} else {
- *cache_bits = 0;
+ cache_bits_init = 0;
}
- // 'best_refs' is the reference to the best backward refs and points to one
- // of refs_array[0] or refs_array[1].
- // Calculate backward references from ARGB image.
- if (huff_tree == NULL ||
- !VP8LHashChainFill(hash_chain, quality, argb, width, height,
- low_effort) ||
- !VP8LBitWriterInit(&bw_best, 0) ||
- (config->lz77s_types_to_try_size_ > 1 &&
+ // If several iterations will happen, clone into bw_best.
+ if (!VP8LBitWriterInit(&bw_best, 0) ||
+ ((config->sub_configs_size_ > 1 ||
+ config->sub_configs_[0].do_no_cache_) &&
!VP8LBitWriterClone(bw, &bw_best))) {
- err = VP8_ENC_ERROR_OUT_OF_MEMORY;
goto Error;
}
- for (lz77s_idx = 0; lz77s_idx < config->lz77s_types_to_try_size_;
- ++lz77s_idx) {
- refs_best = VP8LGetBackwardReferences(
- width, height, argb, quality, low_effort,
- config->lz77s_types_to_try_[lz77s_idx], cache_bits, hash_chain,
- &refs_array[0], &refs_array[1]);
- if (refs_best == NULL) {
- err = VP8_ENC_ERROR_OUT_OF_MEMORY;
- goto Error;
- }
- // Keep the best references aside and use the other element from the first
- // two as a temporary for later usage.
- refs_tmp = &refs_array[refs_best == &refs_array[0] ? 1 : 0];
-
- histogram_image =
- VP8LAllocateHistogramSet(histogram_image_xysize, *cache_bits);
- tmp_histo = VP8LAllocateHistogram(*cache_bits);
- if (histogram_image == NULL || tmp_histo == NULL) {
- err = VP8_ENC_ERROR_OUT_OF_MEMORY;
- goto Error;
- }
-
- // Build histogram image and symbols from backward references.
- if (!VP8LGetHistoImageSymbols(width, height, refs_best, quality, low_effort,
- histogram_bits, *cache_bits, histogram_image,
- tmp_histo, histogram_symbols)) {
- err = VP8_ENC_ERROR_OUT_OF_MEMORY;
- goto Error;
- }
- // Create Huffman bit lengths and codes for each histogram image.
- histogram_image_size = histogram_image->size;
- bit_array_size = 5 * histogram_image_size;
- huffman_codes = (HuffmanTreeCode*)WebPSafeCalloc(bit_array_size,
- sizeof(*huffman_codes));
- // Note: some histogram_image entries may point to tmp_histos[], so the
- // latter need to outlive the following call to GetHuffBitLengthsAndCodes().
- if (huffman_codes == NULL ||
- !GetHuffBitLengthsAndCodes(histogram_image, huffman_codes)) {
- err = VP8_ENC_ERROR_OUT_OF_MEMORY;
- goto Error;
- }
- // Free combined histograms.
- VP8LFreeHistogramSet(histogram_image);
- histogram_image = NULL;
-
- // Free scratch histograms.
- VP8LFreeHistogram(tmp_histo);
- tmp_histo = NULL;
+ for (sub_configs_idx = 0; sub_configs_idx < config->sub_configs_size_;
+ ++sub_configs_idx) {
+ const CrunchSubConfig* const sub_config =
+ &config->sub_configs_[sub_configs_idx];
+ int cache_bits_best, i_cache;
+ err = VP8LGetBackwardReferences(width, height, argb, quality, low_effort,
+ sub_config->lz77_, cache_bits_init,
+ sub_config->do_no_cache_, hash_chain,
+ &refs_array[0], &cache_bits_best);
+ if (err != VP8_ENC_OK) goto Error;
- // Color Cache parameters.
- if (*cache_bits > 0) {
- VP8LPutBits(bw, 1, 1);
- VP8LPutBits(bw, *cache_bits, 4);
- } else {
- VP8LPutBits(bw, 0, 1);
- }
+ for (i_cache = 0; i_cache < (sub_config->do_no_cache_ ? 2 : 1); ++i_cache) {
+ const int cache_bits_tmp = (i_cache == 0) ? cache_bits_best : 0;
+ // Speed-up: no need to study the no-cache case if it was already studied
+ // in i_cache == 0.
+ if (i_cache == 1 && cache_bits_best == 0) break;
+
+ // Reset the bit writer for this iteration.
+ VP8LBitWriterReset(&bw_init, bw);
+
+ // Build histogram image and symbols from backward references.
+ histogram_image =
+ VP8LAllocateHistogramSet(histogram_image_xysize, cache_bits_tmp);
+ tmp_histo = VP8LAllocateHistogram(cache_bits_tmp);
+ if (histogram_image == NULL || tmp_histo == NULL ||
+ !VP8LGetHistoImageSymbols(width, height, &refs_array[i_cache],
+ quality, low_effort, histogram_bits,
+ cache_bits_tmp, histogram_image, tmp_histo,
+ histogram_symbols)) {
+ goto Error;
+ }
+ // Create Huffman bit lengths and codes for each histogram image.
+ histogram_image_size = histogram_image->size;
+ bit_array_size = 5 * histogram_image_size;
+ huffman_codes = (HuffmanTreeCode*)WebPSafeCalloc(bit_array_size,
+ sizeof(*huffman_codes));
+ // Note: some histogram_image entries may point to tmp_histos[], so the
+ // latter need to outlive the following call to
+ // GetHuffBitLengthsAndCodes().
+ if (huffman_codes == NULL ||
+ !GetHuffBitLengthsAndCodes(histogram_image, huffman_codes)) {
+ goto Error;
+ }
+ // Free combined histograms.
+ VP8LFreeHistogramSet(histogram_image);
+ histogram_image = NULL;
+
+ // Free scratch histograms.
+ VP8LFreeHistogram(tmp_histo);
+ tmp_histo = NULL;
+
+ // Color Cache parameters.
+ if (cache_bits_tmp > 0) {
+ VP8LPutBits(bw, 1, 1);
+ VP8LPutBits(bw, cache_bits_tmp, 4);
+ } else {
+ VP8LPutBits(bw, 0, 1);
+ }
- // Huffman image + meta huffman.
- {
- const int write_histogram_image = (histogram_image_size > 1);
+ // Huffman image + meta huffman.
+ write_histogram_image = (histogram_image_size > 1);
VP8LPutBits(bw, write_histogram_image, 1);
if (write_histogram_image) {
uint32_t* const histogram_argb =
@@ -980,10 +1216,7 @@ static WebPEncodingError EncodeImageInternal(
sizeof(*histogram_argb));
int max_index = 0;
uint32_t i;
- if (histogram_argb == NULL) {
- err = VP8_ENC_ERROR_OUT_OF_MEMORY;
- goto Error;
- }
+ if (histogram_argb == NULL) goto Error;
for (i = 0; i < histogram_image_xysize; ++i) {
const int symbol_index = histogram_symbols[i] & 0xffff;
histogram_argb[i] = (symbol_index << 8);
@@ -995,65 +1228,64 @@ static WebPEncodingError EncodeImageInternal(
VP8LPutBits(bw, histogram_bits - 2, 3);
err = EncodeImageNoHuffman(
- bw, histogram_argb, hash_chain, refs_tmp, &refs_array[2],
+ bw, histogram_argb, &hash_chain_histogram, &refs_array[2],
VP8LSubSampleSize(width, histogram_bits),
VP8LSubSampleSize(height, histogram_bits), quality, low_effort);
WebPSafeFree(histogram_argb);
if (err != VP8_ENC_OK) goto Error;
}
- }
- // Store Huffman codes.
- {
- int i;
- int max_tokens = 0;
- // Find maximum number of symbols for the huffman tree-set.
- for (i = 0; i < 5 * histogram_image_size; ++i) {
- HuffmanTreeCode* const codes = &huffman_codes[i];
- if (max_tokens < codes->num_symbols) {
- max_tokens = codes->num_symbols;
+ // Store Huffman codes.
+ {
+ int i;
+ int max_tokens = 0;
+ // Find maximum number of symbols for the huffman tree-set.
+ for (i = 0; i < 5 * histogram_image_size; ++i) {
+ HuffmanTreeCode* const codes = &huffman_codes[i];
+ if (max_tokens < codes->num_symbols) {
+ max_tokens = codes->num_symbols;
+ }
+ }
+ tokens = (HuffmanTreeToken*)WebPSafeMalloc(max_tokens, sizeof(*tokens));
+ if (tokens == NULL) goto Error;
+ for (i = 0; i < 5 * histogram_image_size; ++i) {
+ HuffmanTreeCode* const codes = &huffman_codes[i];
+ StoreHuffmanCode(bw, huff_tree, tokens, codes);
+ ClearHuffmanTreeIfOnlyOneSymbol(codes);
}
}
- tokens = (HuffmanTreeToken*)WebPSafeMalloc(max_tokens, sizeof(*tokens));
- if (tokens == NULL) {
- err = VP8_ENC_ERROR_OUT_OF_MEMORY;
- goto Error;
+ // Store actual literals.
+ hdr_size_tmp = (int)(VP8LBitWriterNumBytes(bw) - init_byte_position);
+ err = StoreImageToBitMask(bw, width, histogram_bits, &refs_array[i_cache],
+ histogram_symbols, huffman_codes);
+ if (err != VP8_ENC_OK) goto Error;
+ // Keep track of the smallest image so far.
+ if (VP8LBitWriterNumBytes(bw) < bw_size_best) {
+ bw_size_best = VP8LBitWriterNumBytes(bw);
+ *cache_bits = cache_bits_tmp;
+ *hdr_size = hdr_size_tmp;
+ *data_size =
+ (int)(VP8LBitWriterNumBytes(bw) - init_byte_position - *hdr_size);
+ VP8LBitWriterSwap(bw, &bw_best);
}
- for (i = 0; i < 5 * histogram_image_size; ++i) {
- HuffmanTreeCode* const codes = &huffman_codes[i];
- StoreHuffmanCode(bw, huff_tree, tokens, codes);
- ClearHuffmanTreeIfOnlyOneSymbol(codes);
+ WebPSafeFree(tokens);
+ tokens = NULL;
+ if (huffman_codes != NULL) {
+ WebPSafeFree(huffman_codes->codes);
+ WebPSafeFree(huffman_codes);
+ huffman_codes = NULL;
}
}
- // Store actual literals.
- hdr_size_tmp = (int)(VP8LBitWriterNumBytes(bw) - init_byte_position);
- err = StoreImageToBitMask(bw, width, histogram_bits, refs_best,
- histogram_symbols, huffman_codes);
- // Keep track of the smallest image so far.
- if (lz77s_idx == 0 ||
- VP8LBitWriterNumBytes(bw) < VP8LBitWriterNumBytes(&bw_best)) {
- *hdr_size = hdr_size_tmp;
- *data_size =
- (int)(VP8LBitWriterNumBytes(bw) - init_byte_position - *hdr_size);
- VP8LBitWriterSwap(bw, &bw_best);
- }
- // Reset the bit writer for the following iteration if any.
- if (config->lz77s_types_to_try_size_ > 1) VP8LBitWriterReset(&bw_init, bw);
- WebPSafeFree(tokens);
- tokens = NULL;
- if (huffman_codes != NULL) {
- WebPSafeFree(huffman_codes->codes);
- WebPSafeFree(huffman_codes);
- huffman_codes = NULL;
- }
}
VP8LBitWriterSwap(bw, &bw_best);
+ err = VP8_ENC_OK;
Error:
WebPSafeFree(tokens);
WebPSafeFree(huff_tree);
VP8LFreeHistogramSet(histogram_image);
VP8LFreeHistogram(tmp_histo);
+ VP8LHashChainClear(&hash_chain_histogram);
if (huffman_codes != NULL) {
WebPSafeFree(huffman_codes->codes);
WebPSafeFree(huffman_codes);
@@ -1095,8 +1327,7 @@ static WebPEncodingError ApplyPredictFilter(const VP8LEncoder* const enc,
VP8LPutBits(bw, pred_bits - 2, 3);
return EncodeImageNoHuffman(
bw, enc->transform_data_, (VP8LHashChain*)&enc->hash_chain_,
- (VP8LBackwardRefs*)&enc->refs_[0], // cast const away
- (VP8LBackwardRefs*)&enc->refs_[1], transform_width, transform_height,
+ (VP8LBackwardRefs*)&enc->refs_[0], transform_width, transform_height,
quality, low_effort);
}
@@ -1116,8 +1347,7 @@ static WebPEncodingError ApplyCrossColorFilter(const VP8LEncoder* const enc,
VP8LPutBits(bw, ccolor_transform_bits - 2, 3);
return EncodeImageNoHuffman(
bw, enc->transform_data_, (VP8LHashChain*)&enc->hash_chain_,
- (VP8LBackwardRefs*)&enc->refs_[0], // cast const away
- (VP8LBackwardRefs*)&enc->refs_[1], transform_width, transform_height,
+ (VP8LBackwardRefs*)&enc->refs_[0], transform_width, transform_height,
quality, low_effort);
}
@@ -1272,22 +1502,6 @@ static WebPEncodingError MakeInputImageCopy(VP8LEncoder* const enc) {
// -----------------------------------------------------------------------------
-static WEBP_INLINE int SearchColorNoIdx(const uint32_t sorted[], uint32_t color,
- int hi) {
- int low = 0;
- if (sorted[low] == color) return low; // loop invariant: sorted[low] != color
- while (1) {
- const int mid = (low + hi) >> 1;
- if (sorted[mid] == color) {
- return mid;
- } else if (sorted[mid] < color) {
- low = mid;
- } else {
- hi = mid;
- }
- }
-}
-
#define APPLY_PALETTE_GREEDY_MAX 4
static WEBP_INLINE uint32_t SearchColorGreedy(const uint32_t palette[],
@@ -1322,17 +1536,6 @@ static WEBP_INLINE uint32_t ApplyPaletteHash2(uint32_t color) {
(32 - PALETTE_INV_SIZE_BITS);
}
-// Sort palette in increasing order and prepare an inverse mapping array.
-static void PrepareMapToPalette(const uint32_t palette[], int num_colors,
- uint32_t sorted[], uint32_t idx_map[]) {
- int i;
- memcpy(sorted, palette, num_colors * sizeof(*sorted));
- qsort(sorted, num_colors, sizeof(*sorted), PaletteCompareColorsForQsort);
- for (i = 0; i < num_colors; ++i) {
- idx_map[SearchColorNoIdx(sorted, palette[i], num_colors)] = i;
- }
-}
-
// Use 1 pixel cache for ARGB pixels.
#define APPLY_PALETTE_FOR(COLOR_INDEX) do { \
uint32_t prev_pix = palette[0]; \
@@ -1464,8 +1667,8 @@ static WebPEncodingError EncodePalette(VP8LBitWriter* const bw, int low_effort,
}
tmp_palette[0] = palette[0];
return EncodeImageNoHuffman(bw, tmp_palette, &enc->hash_chain_,
- &enc->refs_[0], &enc->refs_[1], palette_size, 1,
- 20 /* quality */, low_effort);
+ &enc->refs_[0], palette_size, 1, /*quality=*/20,
+ low_effort);
}
// -----------------------------------------------------------------------------
@@ -1491,7 +1694,7 @@ static void VP8LEncoderDelete(VP8LEncoder* enc) {
if (enc != NULL) {
int i;
VP8LHashChainClear(&enc->hash_chain_);
- for (i = 0; i < 3; ++i) VP8LBackwardRefsClear(&enc->refs_[i]);
+ for (i = 0; i < 4; ++i) VP8LBackwardRefsClear(&enc->refs_[i]);
ClearTransformBuffer(enc);
WebPSafeFree(enc);
}
@@ -1541,7 +1744,7 @@ static int EncodeStreamHook(void* input, void* data2) {
int data_size = 0;
int use_delta_palette = 0;
int idx;
- size_t best_size = 0;
+ size_t best_size = ~(size_t)0;
VP8LBitWriter bw_init = *bw, bw_best;
(void)data2;
@@ -1553,12 +1756,15 @@ static int EncodeStreamHook(void* input, void* data2) {
for (idx = 0; idx < num_crunch_configs; ++idx) {
const int entropy_idx = crunch_configs[idx].entropy_idx_;
- enc->use_palette_ = (entropy_idx == kPalette);
+ enc->use_palette_ =
+ (entropy_idx == kPalette) || (entropy_idx == kPaletteAndSpatial);
enc->use_subtract_green_ =
(entropy_idx == kSubGreen) || (entropy_idx == kSpatialSubGreen);
- enc->use_predict_ =
- (entropy_idx == kSpatial) || (entropy_idx == kSpatialSubGreen);
- if (low_effort) {
+ enc->use_predict_ = (entropy_idx == kSpatial) ||
+ (entropy_idx == kSpatialSubGreen) ||
+ (entropy_idx == kPaletteAndSpatial);
+ // When using a palette, R/B==0, hence no need to test for cross-color.
+ if (low_effort || enc->use_palette_) {
enc->use_cross_color_ = 0;
} else {
enc->use_cross_color_ = red_and_blue_always_zero ? 0 : enc->use_predict_;
@@ -1590,6 +1796,19 @@ static int EncodeStreamHook(void* input, void* data2) {
// Encode palette
if (enc->use_palette_) {
+ if (crunch_configs[idx].palette_sorting_type_ == kSortedDefault) {
+ // Nothing to do, we have already sorted the palette.
+ memcpy(enc->palette_, enc->palette_sorted_,
+ enc->palette_size_ * sizeof(*enc->palette_));
+ } else if (crunch_configs[idx].palette_sorting_type_ == kMinimizeDelta) {
+ PaletteSortMinimizeDeltas(enc->palette_sorted_, enc->palette_size_,
+ enc->palette_);
+ } else {
+ assert(crunch_configs[idx].palette_sorting_type_ == kModifiedZeng);
+ err = PaletteSortModifiedZeng(enc->pic_, enc->palette_sorted_,
+ enc->palette_size_, enc->palette_);
+ if (err != VP8_ENC_OK) goto Error;
+ }
err = EncodePalette(bw, low_effort, enc);
if (err != VP8_ENC_OK) goto Error;
err = MapImageFromPalette(enc, use_delta_palette);
@@ -1640,7 +1859,7 @@ static int EncodeStreamHook(void* input, void* data2) {
if (err != VP8_ENC_OK) goto Error;
// If we are better than what we already have.
- if (idx == 0 || VP8LBitWriterNumBytes(bw) < best_size) {
+ if (VP8LBitWriterNumBytes(bw) < best_size) {
best_size = VP8LBitWriterNumBytes(bw);
// Store the BitWriter.
VP8LBitWriterSwap(bw, &bw_best);
@@ -1754,6 +1973,8 @@ WebPEncodingError VP8LEncodeStream(const WebPConfig* const config,
enc_side->palette_size_ = enc_main->palette_size_;
memcpy(enc_side->palette_, enc_main->palette_,
sizeof(enc_main->palette_));
+ memcpy(enc_side->palette_sorted_, enc_main->palette_sorted_,
+ sizeof(enc_main->palette_sorted_));
param->enc_ = enc_side;
}
// Create the workers.
@@ -1816,7 +2037,7 @@ Error:
}
#undef CRUNCH_CONFIGS_MAX
-#undef CRUNCH_CONFIGS_LZ77_MAX
+#undef CRUNCH_SUBCONFIGS_MAX
int VP8LEncodeImage(const WebPConfig* const config,
const WebPPicture* const picture) {
diff --git a/thirdparty/libwebp/src/enc/vp8li_enc.h b/thirdparty/libwebp/src/enc/vp8li_enc.h
index d2d0fc509c..00de48946c 100644
--- a/thirdparty/libwebp/src/enc/vp8li_enc.h
+++ b/thirdparty/libwebp/src/enc/vp8li_enc.h
@@ -69,9 +69,11 @@ typedef struct {
int use_palette_;
int palette_size_;
uint32_t palette_[MAX_PALETTE_SIZE];
+ // Sorted version of palette_ for cache purposes.
+ uint32_t palette_sorted_[MAX_PALETTE_SIZE];
// Some 'scratch' (potentially large) objects.
- struct VP8LBackwardRefs refs_[3]; // Backward Refs array for temporaries.
+ struct VP8LBackwardRefs refs_[4]; // Backward Refs array for temporaries.
VP8LHashChain hash_chain_; // HashChain data for constructing
// backward references.
} VP8LEncoder;
diff --git a/thirdparty/libwebp/src/enc/webp_enc.c b/thirdparty/libwebp/src/enc/webp_enc.c
index 9f4b10c26c..ce2db2e94b 100644
--- a/thirdparty/libwebp/src/enc/webp_enc.c
+++ b/thirdparty/libwebp/src/enc/webp_enc.c
@@ -400,7 +400,7 @@ int WebPEncode(const WebPConfig* config, WebPPicture* pic) {
}
if (!config->exact) {
- WebPCleanupTransparentAreaLossless(pic);
+ WebPReplaceTransparentPixels(pic, 0x000000);
}
ok = VP8LEncodeImage(config, pic); // Sets pic->error in case of problem.
diff --git a/thirdparty/libwebp/src/mux/anim_encode.c b/thirdparty/libwebp/src/mux/anim_encode.c
index 7be99068f6..7078d9ae6b 100644
--- a/thirdparty/libwebp/src/mux/anim_encode.c
+++ b/thirdparty/libwebp/src/mux/anim_encode.c
@@ -248,9 +248,6 @@ WebPAnimEncoder* WebPAnimEncoderNewInternal(
enc = (WebPAnimEncoder*)WebPSafeCalloc(1, sizeof(*enc));
if (enc == NULL) return NULL;
- // sanity inits, so we can call WebPAnimEncoderDelete():
- enc->encoded_frames_ = NULL;
- enc->mux_ = NULL;
MarkNoError(enc);
// Dimensions and options.
@@ -421,7 +418,7 @@ static void MinimizeChangeRectangle(const WebPPicture* const src,
const int max_allowed_diff_lossy = QualityToMaxDiff(quality);
const int max_allowed_diff = is_lossless ? 0 : max_allowed_diff_lossy;
- // Sanity checks.
+ // Assumption/correctness checks.
assert(src->width == dst->width && src->height == dst->height);
assert(rect->x_offset_ + rect->width_ <= dst->width);
assert(rect->y_offset_ + rect->height_ <= dst->height);
@@ -949,7 +946,8 @@ static int IncreasePreviousDuration(WebPAnimEncoder* const enc, int duration) {
int new_duration;
assert(enc->count_ >= 1);
- assert(prev_enc_frame->sub_frame_.duration ==
+ assert(!prev_enc_frame->is_key_frame_ ||
+ prev_enc_frame->sub_frame_.duration ==
prev_enc_frame->key_frame_.duration);
assert(prev_enc_frame->sub_frame_.duration ==
(prev_enc_frame->sub_frame_.duration & (MAX_DURATION - 1)));
@@ -966,7 +964,7 @@ static int IncreasePreviousDuration(WebPAnimEncoder* const enc, int duration) {
0x10, 0x88, 0x88, 0x08
};
const WebPData lossless_1x1 = {
- lossless_1x1_bytes, sizeof(lossless_1x1_bytes)
+ lossless_1x1_bytes, sizeof(lossless_1x1_bytes)
};
const uint8_t lossy_1x1_bytes[] = {
0x52, 0x49, 0x46, 0x46, 0x40, 0x00, 0x00, 0x00, 0x57, 0x45, 0x42, 0x50,
@@ -1358,6 +1356,12 @@ int WebPAnimEncoderAdd(WebPAnimEncoder* enc, WebPPicture* frame, int timestamp,
if (!IncreasePreviousDuration(enc, (int)prev_frame_duration)) {
return 0;
}
+ // IncreasePreviousDuration() may add a frame to avoid exceeding
+ // MAX_DURATION which could cause CacheFrame() to over read encoded_frames_
+ // before the next flush.
+ if (enc->count_ == enc->size_ && !FlushFrames(enc)) {
+ return 0;
+ }
} else {
enc->first_timestamp_ = timestamp;
}
diff --git a/thirdparty/libwebp/src/mux/muxedit.c b/thirdparty/libwebp/src/mux/muxedit.c
index ccf14b2a0c..02c3edecd7 100644
--- a/thirdparty/libwebp/src/mux/muxedit.c
+++ b/thirdparty/libwebp/src/mux/muxedit.c
@@ -235,7 +235,6 @@ WebPMuxError WebPMuxSetImage(WebPMux* mux, const WebPData* bitstream,
WebPMuxImage wpi;
WebPMuxError err;
- // Sanity checks.
if (mux == NULL || bitstream == NULL || bitstream->bytes == NULL ||
bitstream->size > MAX_CHUNK_PAYLOAD) {
return WEBP_MUX_INVALID_ARGUMENT;
@@ -267,7 +266,6 @@ WebPMuxError WebPMuxPushFrame(WebPMux* mux, const WebPMuxFrameInfo* info,
WebPMuxImage wpi;
WebPMuxError err;
- // Sanity checks.
if (mux == NULL || info == NULL) return WEBP_MUX_INVALID_ARGUMENT;
if (info->id != WEBP_CHUNK_ANMF) return WEBP_MUX_INVALID_ARGUMENT;
diff --git a/thirdparty/libwebp/src/mux/muxi.h b/thirdparty/libwebp/src/mux/muxi.h
index ad3e1bdb97..330da66754 100644
--- a/thirdparty/libwebp/src/mux/muxi.h
+++ b/thirdparty/libwebp/src/mux/muxi.h
@@ -28,8 +28,8 @@ extern "C" {
// Defines and constants.
#define MUX_MAJ_VERSION 1
-#define MUX_MIN_VERSION 1
-#define MUX_REV_VERSION 0
+#define MUX_MIN_VERSION 2
+#define MUX_REV_VERSION 1
// Chunk object.
typedef struct WebPChunk WebPChunk;
diff --git a/thirdparty/libwebp/src/mux/muxread.c b/thirdparty/libwebp/src/mux/muxread.c
index ae3b876bc5..80050396e1 100644
--- a/thirdparty/libwebp/src/mux/muxread.c
+++ b/thirdparty/libwebp/src/mux/muxread.c
@@ -56,7 +56,7 @@ static WebPMuxError ChunkVerifyAndAssign(WebPChunk* chunk,
uint32_t chunk_size;
WebPData chunk_data;
- // Sanity checks.
+ // Correctness checks.
if (data_size < CHUNK_HEADER_SIZE) return WEBP_MUX_NOT_ENOUGH_DATA;
chunk_size = GetLE32(data + TAG_SIZE);
if (chunk_size > MAX_CHUNK_PAYLOAD) return WEBP_MUX_BAD_DATA;
@@ -155,7 +155,6 @@ static int MuxImageParse(const WebPChunk* const chunk, int copy_data,
break;
default:
goto Fail;
- break;
}
subchunk_size = ChunkDiskSize(&subchunk);
bytes += subchunk_size;
@@ -187,7 +186,6 @@ WebPMux* WebPMuxCreateInternal(const WebPData* bitstream, int copy_data,
WebPChunk** chunk_list_ends[WEBP_CHUNK_NIL + 1] = { NULL };
ChunkInit(&chunk);
- // Sanity checks.
if (WEBP_ABI_IS_INCOMPATIBLE(version, WEBP_MUX_ABI_VERSION)) {
return NULL; // version mismatch
}
@@ -264,7 +262,6 @@ WebPMux* WebPMuxCreateInternal(const WebPData* bitstream, int copy_data,
if (!MuxImageParse(&chunk, copy_data, wpi)) goto Err;
ChunkRelease(&chunk);
goto PushImage;
- break;
default: // A non-image chunk.
if (wpi->is_partial_) goto Err; // Encountered a non-image chunk before
// getting all chunks of an image.
@@ -483,7 +480,6 @@ WebPMuxError WebPMuxGetFrame(
WebPMuxError err;
WebPMuxImage* wpi;
- // Sanity checks.
if (mux == NULL || frame == NULL) {
return WEBP_MUX_INVALID_ARGUMENT;
}
diff --git a/thirdparty/libwebp/src/utils/bit_reader_inl_utils.h b/thirdparty/libwebp/src/utils/bit_reader_inl_utils.h
index 46b3880706..404b9a6d8c 100644
--- a/thirdparty/libwebp/src/utils/bit_reader_inl_utils.h
+++ b/thirdparty/libwebp/src/utils/bit_reader_inl_utils.h
@@ -55,7 +55,7 @@ void VP8LoadFinalBytes(VP8BitReader* const br);
// makes sure br->value_ has at least BITS bits worth of data
static WEBP_UBSAN_IGNORE_UNDEF WEBP_INLINE
-void VP8LoadNewBytes(VP8BitReader* const br) {
+void VP8LoadNewBytes(VP8BitReader* WEBP_RESTRICT const br) {
assert(br != NULL && br->buf_ != NULL);
// Read 'BITS' bits at a time if possible.
if (br->buf_ < br->buf_max_) {
@@ -104,7 +104,7 @@ void VP8LoadNewBytes(VP8BitReader* const br) {
}
// Read a bit with proba 'prob'. Speed-critical function!
-static WEBP_INLINE int VP8GetBit(VP8BitReader* const br,
+static WEBP_INLINE int VP8GetBit(VP8BitReader* WEBP_RESTRICT const br,
int prob, const char label[]) {
// Don't move this declaration! It makes a big speed difference to store
// 'range' *before* calling VP8LoadNewBytes(), even if this function doesn't
@@ -137,7 +137,8 @@ static WEBP_INLINE int VP8GetBit(VP8BitReader* const br,
// simplified version of VP8GetBit() for prob=0x80 (note shift is always 1 here)
static WEBP_UBSAN_IGNORE_UNSIGNED_OVERFLOW WEBP_INLINE
-int VP8GetSigned(VP8BitReader* const br, int v, const char label[]) {
+int VP8GetSigned(VP8BitReader* WEBP_RESTRICT const br, int v,
+ const char label[]) {
if (br->bits_ < 0) {
VP8LoadNewBytes(br);
}
@@ -155,7 +156,7 @@ int VP8GetSigned(VP8BitReader* const br, int v, const char label[]) {
}
}
-static WEBP_INLINE int VP8GetBitAlt(VP8BitReader* const br,
+static WEBP_INLINE int VP8GetBitAlt(VP8BitReader* WEBP_RESTRICT const br,
int prob, const char label[]) {
// Don't move this declaration! It makes a big speed difference to store
// 'range' *before* calling VP8LoadNewBytes(), even if this function doesn't
diff --git a/thirdparty/libwebp/src/utils/bit_reader_utils.c b/thirdparty/libwebp/src/utils/bit_reader_utils.c
index 60271c0ae0..857cd60988 100644
--- a/thirdparty/libwebp/src/utils/bit_reader_utils.c
+++ b/thirdparty/libwebp/src/utils/bit_reader_utils.c
@@ -41,14 +41,7 @@ void VP8InitBitReader(VP8BitReader* const br,
br->bits_ = -8; // to load the very first 8bits
br->eof_ = 0;
VP8BitReaderSetBuffer(br, start, size);
-// -- GODOT -- begin
-#ifdef JAVASCRIPT_ENABLED // html5 required aligned reads
- while(((uintptr_t)br->buf_ & 1) != 0 && !br->eof_)
- VP8LoadFinalBytes(br);
-#else
VP8LoadNewBytes(br);
-#endif
-// -- GODOT -- end
}
void VP8RemapBitReader(VP8BitReader* const br, ptrdiff_t offset) {
diff --git a/thirdparty/libwebp/src/utils/bit_reader_utils.h b/thirdparty/libwebp/src/utils/bit_reader_utils.h
index 199dacf224..e64156e318 100644
--- a/thirdparty/libwebp/src/utils/bit_reader_utils.h
+++ b/thirdparty/libwebp/src/utils/bit_reader_utils.h
@@ -58,12 +58,6 @@ extern "C" {
// BITS can be any multiple of 8 from 8 to 56 (inclusive).
// Pick values that fit natural register size.
-// -- GODOT -- start
-#ifdef JAVASCRIPT_ENABLED
-#define BITS 16
-#else
-// -- GODOT -- end
-
#if defined(__i386__) || defined(_M_IX86) // x86 32bit
#define BITS 24
#elif defined(__x86_64__) || defined(_M_X64) // x86 64bit
@@ -78,10 +72,6 @@ extern "C" {
#define BITS 24
#endif
-// -- GODOT -- start
-#endif
-// -- GODOT -- end
-
//------------------------------------------------------------------------------
// Derived types and constants:
// bit_t = natural register type for storing 'value_' (which is BITS+8 bits)
diff --git a/thirdparty/libwebp/src/utils/bit_writer_utils.c b/thirdparty/libwebp/src/utils/bit_writer_utils.c
index bef0e31ca5..2f408508f1 100644
--- a/thirdparty/libwebp/src/utils/bit_writer_utils.c
+++ b/thirdparty/libwebp/src/utils/bit_writer_utils.c
@@ -278,7 +278,7 @@ void VP8LPutBitsFlushBits(VP8LBitWriter* const bw) {
// If needed, make some room by flushing some bits out.
if (bw->cur_ + VP8L_WRITER_BYTES > bw->end_) {
const uint64_t extra_size = (bw->end_ - bw->buf_) + MIN_EXTRA_SIZE;
- if (extra_size != (size_t)extra_size ||
+ if (!CheckSizeOverflow(extra_size) ||
!VP8LBitWriterResize(bw, (size_t)extra_size)) {
bw->cur_ = bw->buf_;
bw->error_ = 1;
@@ -314,7 +314,7 @@ void VP8LPutBitsInternal(VP8LBitWriter* const bw, uint32_t bits, int n_bits) {
while (used >= VP8L_WRITER_BITS) {
if (bw->cur_ + VP8L_WRITER_BYTES > bw->end_) {
const uint64_t extra_size = (bw->end_ - bw->buf_) + MIN_EXTRA_SIZE;
- if (extra_size != (size_t)extra_size ||
+ if (!CheckSizeOverflow(extra_size) ||
!VP8LBitWriterResize(bw, (size_t)extra_size)) {
bw->cur_ = bw->buf_;
bw->error_ = 1;
diff --git a/thirdparty/libwebp/src/utils/color_cache_utils.c b/thirdparty/libwebp/src/utils/color_cache_utils.c
index b09f538e8b..7b5222b6e5 100644
--- a/thirdparty/libwebp/src/utils/color_cache_utils.c
+++ b/thirdparty/libwebp/src/utils/color_cache_utils.c
@@ -20,22 +20,22 @@
//------------------------------------------------------------------------------
// VP8LColorCache.
-int VP8LColorCacheInit(VP8LColorCache* const cc, int hash_bits) {
+int VP8LColorCacheInit(VP8LColorCache* const color_cache, int hash_bits) {
const int hash_size = 1 << hash_bits;
- assert(cc != NULL);
+ assert(color_cache != NULL);
assert(hash_bits > 0);
- cc->colors_ = (uint32_t*)WebPSafeCalloc((uint64_t)hash_size,
- sizeof(*cc->colors_));
- if (cc->colors_ == NULL) return 0;
- cc->hash_shift_ = 32 - hash_bits;
- cc->hash_bits_ = hash_bits;
+ color_cache->colors_ = (uint32_t*)WebPSafeCalloc(
+ (uint64_t)hash_size, sizeof(*color_cache->colors_));
+ if (color_cache->colors_ == NULL) return 0;
+ color_cache->hash_shift_ = 32 - hash_bits;
+ color_cache->hash_bits_ = hash_bits;
return 1;
}
-void VP8LColorCacheClear(VP8LColorCache* const cc) {
- if (cc != NULL) {
- WebPSafeFree(cc->colors_);
- cc->colors_ = NULL;
+void VP8LColorCacheClear(VP8LColorCache* const color_cache) {
+ if (color_cache != NULL) {
+ WebPSafeFree(color_cache->colors_);
+ color_cache->colors_ = NULL;
}
}
diff --git a/thirdparty/libwebp/src/utils/huffman_encode_utils.c b/thirdparty/libwebp/src/utils/huffman_encode_utils.c
index 6f3b1bbe02..fd7a47d8f7 100644
--- a/thirdparty/libwebp/src/utils/huffman_encode_utils.c
+++ b/thirdparty/libwebp/src/utils/huffman_encode_utils.c
@@ -404,8 +404,7 @@ static void ConvertBitDepthsToSymbols(HuffmanTreeCode* const tree) {
// Main entry point
void VP8LCreateHuffmanTree(uint32_t* const histogram, int tree_depth_limit,
- uint8_t* const buf_rle,
- HuffmanTree* const huff_tree,
+ uint8_t* const buf_rle, HuffmanTree* const huff_tree,
HuffmanTreeCode* const huff_code) {
const int num_symbols = huff_code->num_symbols;
memset(buf_rle, 0, num_symbols * sizeof(*buf_rle));
diff --git a/thirdparty/libwebp/src/utils/huffman_encode_utils.h b/thirdparty/libwebp/src/utils/huffman_encode_utils.h
index 3e6763ce49..3f7f1d8074 100644
--- a/thirdparty/libwebp/src/utils/huffman_encode_utils.h
+++ b/thirdparty/libwebp/src/utils/huffman_encode_utils.h
@@ -51,7 +51,7 @@ int VP8LCreateCompressedHuffmanTree(const HuffmanTreeCode* const tree,
// huffman code tree.
void VP8LCreateHuffmanTree(uint32_t* const histogram, int tree_depth_limit,
uint8_t* const buf_rle, HuffmanTree* const huff_tree,
- HuffmanTreeCode* const tree);
+ HuffmanTreeCode* const huff_code);
#ifdef __cplusplus
}
diff --git a/thirdparty/libwebp/src/utils/rescaler_utils.c b/thirdparty/libwebp/src/utils/rescaler_utils.c
index 4bcae24af5..a0581a14b1 100644
--- a/thirdparty/libwebp/src/utils/rescaler_utils.c
+++ b/thirdparty/libwebp/src/utils/rescaler_utils.c
@@ -12,66 +12,74 @@
// Author: Skal (pascal.massimino@gmail.com)
#include <assert.h>
+#include <limits.h>
#include <stdlib.h>
#include <string.h>
#include "src/dsp/dsp.h"
#include "src/utils/rescaler_utils.h"
+#include "src/utils/utils.h"
//------------------------------------------------------------------------------
-void WebPRescalerInit(WebPRescaler* const wrk, int src_width, int src_height,
- uint8_t* const dst,
- int dst_width, int dst_height, int dst_stride,
- int num_channels, rescaler_t* const work) {
+int WebPRescalerInit(WebPRescaler* const rescaler,
+ int src_width, int src_height,
+ uint8_t* const dst,
+ int dst_width, int dst_height, int dst_stride,
+ int num_channels, rescaler_t* const work) {
const int x_add = src_width, x_sub = dst_width;
const int y_add = src_height, y_sub = dst_height;
- wrk->x_expand = (src_width < dst_width);
- wrk->y_expand = (src_height < dst_height);
- wrk->src_width = src_width;
- wrk->src_height = src_height;
- wrk->dst_width = dst_width;
- wrk->dst_height = dst_height;
- wrk->src_y = 0;
- wrk->dst_y = 0;
- wrk->dst = dst;
- wrk->dst_stride = dst_stride;
- wrk->num_channels = num_channels;
+ const uint64_t total_size = 2ull * dst_width * num_channels * sizeof(*work);
+ if (!CheckSizeOverflow(total_size)) return 0;
+
+ rescaler->x_expand = (src_width < dst_width);
+ rescaler->y_expand = (src_height < dst_height);
+ rescaler->src_width = src_width;
+ rescaler->src_height = src_height;
+ rescaler->dst_width = dst_width;
+ rescaler->dst_height = dst_height;
+ rescaler->src_y = 0;
+ rescaler->dst_y = 0;
+ rescaler->dst = dst;
+ rescaler->dst_stride = dst_stride;
+ rescaler->num_channels = num_channels;
// for 'x_expand', we use bilinear interpolation
- wrk->x_add = wrk->x_expand ? (x_sub - 1) : x_add;
- wrk->x_sub = wrk->x_expand ? (x_add - 1) : x_sub;
- if (!wrk->x_expand) { // fx_scale is not used otherwise
- wrk->fx_scale = WEBP_RESCALER_FRAC(1, wrk->x_sub);
+ rescaler->x_add = rescaler->x_expand ? (x_sub - 1) : x_add;
+ rescaler->x_sub = rescaler->x_expand ? (x_add - 1) : x_sub;
+ if (!rescaler->x_expand) { // fx_scale is not used otherwise
+ rescaler->fx_scale = WEBP_RESCALER_FRAC(1, rescaler->x_sub);
}
// vertical scaling parameters
- wrk->y_add = wrk->y_expand ? y_add - 1 : y_add;
- wrk->y_sub = wrk->y_expand ? y_sub - 1 : y_sub;
- wrk->y_accum = wrk->y_expand ? wrk->y_sub : wrk->y_add;
- if (!wrk->y_expand) {
+ rescaler->y_add = rescaler->y_expand ? y_add - 1 : y_add;
+ rescaler->y_sub = rescaler->y_expand ? y_sub - 1 : y_sub;
+ rescaler->y_accum = rescaler->y_expand ? rescaler->y_sub : rescaler->y_add;
+ if (!rescaler->y_expand) {
// This is WEBP_RESCALER_FRAC(dst_height, x_add * y_add) without the cast.
- // Its value is <= WEBP_RESCALER_ONE, because dst_height <= wrk->y_add, and
- // wrk->x_add >= 1;
- const uint64_t ratio =
- (uint64_t)dst_height * WEBP_RESCALER_ONE / (wrk->x_add * wrk->y_add);
+ // Its value is <= WEBP_RESCALER_ONE, because dst_height <= rescaler->y_add
+ // and rescaler->x_add >= 1;
+ const uint64_t num = (uint64_t)dst_height * WEBP_RESCALER_ONE;
+ const uint64_t den = (uint64_t)rescaler->x_add * rescaler->y_add;
+ const uint64_t ratio = num / den;
if (ratio != (uint32_t)ratio) {
// When ratio == WEBP_RESCALER_ONE, we can't represent the ratio with the
// current fixed-point precision. This happens when src_height ==
- // wrk->y_add (which == src_height), and wrk->x_add == 1.
+ // rescaler->y_add (which == src_height), and rescaler->x_add == 1.
// => We special-case fxy_scale = 0, in WebPRescalerExportRow().
- wrk->fxy_scale = 0;
+ rescaler->fxy_scale = 0;
} else {
- wrk->fxy_scale = (uint32_t)ratio;
+ rescaler->fxy_scale = (uint32_t)ratio;
}
- wrk->fy_scale = WEBP_RESCALER_FRAC(1, wrk->y_sub);
+ rescaler->fy_scale = WEBP_RESCALER_FRAC(1, rescaler->y_sub);
} else {
- wrk->fy_scale = WEBP_RESCALER_FRAC(1, wrk->x_add);
- // wrk->fxy_scale is unused here.
+ rescaler->fy_scale = WEBP_RESCALER_FRAC(1, rescaler->x_add);
+ // rescaler->fxy_scale is unused here.
}
- wrk->irow = work;
- wrk->frow = work + num_channels * dst_width;
- memset(work, 0, 2 * dst_width * num_channels * sizeof(*work));
+ rescaler->irow = work;
+ rescaler->frow = work + num_channels * dst_width;
+ memset(work, 0, (size_t)total_size);
WebPRescalerDspInit();
+ return 1;
}
int WebPRescalerGetScaledDimensions(int src_width, int src_height,
@@ -82,6 +90,7 @@ int WebPRescalerGetScaledDimensions(int src_width, int src_height,
{
int width = *scaled_width;
int height = *scaled_height;
+ const int max_size = INT_MAX / 2;
// if width is unspecified, scale original proportionally to height ratio.
if (width == 0 && src_height > 0) {
@@ -94,7 +103,7 @@ int WebPRescalerGetScaledDimensions(int src_width, int src_height,
(int)(((uint64_t)src_height * width + src_width - 1) / src_width);
}
// Check if the overall dimensions still make sense.
- if (width <= 0 || height <= 0) {
+ if (width <= 0 || height <= 0 || width > max_size || height > max_size) {
return 0;
}
@@ -107,31 +116,34 @@ int WebPRescalerGetScaledDimensions(int src_width, int src_height,
//------------------------------------------------------------------------------
// all-in-one calls
-int WebPRescaleNeededLines(const WebPRescaler* const wrk, int max_num_lines) {
- const int num_lines = (wrk->y_accum + wrk->y_sub - 1) / wrk->y_sub;
+int WebPRescaleNeededLines(const WebPRescaler* const rescaler,
+ int max_num_lines) {
+ const int num_lines =
+ (rescaler->y_accum + rescaler->y_sub - 1) / rescaler->y_sub;
return (num_lines > max_num_lines) ? max_num_lines : num_lines;
}
-int WebPRescalerImport(WebPRescaler* const wrk, int num_lines,
+int WebPRescalerImport(WebPRescaler* const rescaler, int num_lines,
const uint8_t* src, int src_stride) {
int total_imported = 0;
- while (total_imported < num_lines && !WebPRescalerHasPendingOutput(wrk)) {
- if (wrk->y_expand) {
- rescaler_t* const tmp = wrk->irow;
- wrk->irow = wrk->frow;
- wrk->frow = tmp;
+ while (total_imported < num_lines &&
+ !WebPRescalerHasPendingOutput(rescaler)) {
+ if (rescaler->y_expand) {
+ rescaler_t* const tmp = rescaler->irow;
+ rescaler->irow = rescaler->frow;
+ rescaler->frow = tmp;
}
- WebPRescalerImportRow(wrk, src);
- if (!wrk->y_expand) { // Accumulate the contribution of the new row.
+ WebPRescalerImportRow(rescaler, src);
+ if (!rescaler->y_expand) { // Accumulate the contribution of the new row.
int x;
- for (x = 0; x < wrk->num_channels * wrk->dst_width; ++x) {
- wrk->irow[x] += wrk->frow[x];
+ for (x = 0; x < rescaler->num_channels * rescaler->dst_width; ++x) {
+ rescaler->irow[x] += rescaler->frow[x];
}
}
- ++wrk->src_y;
+ ++rescaler->src_y;
src += src_stride;
++total_imported;
- wrk->y_accum -= wrk->y_sub;
+ rescaler->y_accum -= rescaler->y_sub;
}
return total_imported;
}
diff --git a/thirdparty/libwebp/src/utils/rescaler_utils.h b/thirdparty/libwebp/src/utils/rescaler_utils.h
index ca41e42c4a..ef201ef86c 100644
--- a/thirdparty/libwebp/src/utils/rescaler_utils.h
+++ b/thirdparty/libwebp/src/utils/rescaler_utils.h
@@ -47,12 +47,13 @@ struct WebPRescaler {
};
// Initialize a rescaler given scratch area 'work' and dimensions of src & dst.
-void WebPRescalerInit(WebPRescaler* const rescaler,
- int src_width, int src_height,
- uint8_t* const dst,
- int dst_width, int dst_height, int dst_stride,
- int num_channels,
- rescaler_t* const work);
+// Returns false in case of error.
+int WebPRescalerInit(WebPRescaler* const rescaler,
+ int src_width, int src_height,
+ uint8_t* const dst,
+ int dst_width, int dst_height, int dst_stride,
+ int num_channels,
+ rescaler_t* const work);
// If either 'scaled_width' or 'scaled_height' (but not both) is 0 the value
// will be calculated preserving the aspect ratio, otherwise the values are
diff --git a/thirdparty/libwebp/src/utils/utils.c b/thirdparty/libwebp/src/utils/utils.c
index 764f752b82..9e464c16ce 100644
--- a/thirdparty/libwebp/src/utils/utils.c
+++ b/thirdparty/libwebp/src/utils/utils.c
@@ -101,6 +101,9 @@ static void Increment(int* const v) {
#if defined(MALLOC_LIMIT)
{
const char* const malloc_limit_str = getenv("MALLOC_LIMIT");
+#if MALLOC_LIMIT > 1
+ mem_limit = (size_t)MALLOC_LIMIT;
+#endif
if (malloc_limit_str != NULL) {
mem_limit = atoi(malloc_limit_str);
}
@@ -169,16 +172,16 @@ static int CheckSizeArgumentsOverflow(uint64_t nmemb, size_t size) {
const uint64_t total_size = nmemb * size;
if (nmemb == 0) return 1;
if ((uint64_t)size > WEBP_MAX_ALLOCABLE_MEMORY / nmemb) return 0;
- if (total_size != (size_t)total_size) return 0;
+ if (!CheckSizeOverflow(total_size)) return 0;
#if defined(PRINT_MEM_INFO) && defined(MALLOC_FAIL_AT)
if (countdown_to_fail > 0 && --countdown_to_fail == 0) {
return 0; // fake fail!
}
#endif
-#if defined(MALLOC_LIMIT)
+#if defined(PRINT_MEM_INFO) && defined(MALLOC_LIMIT)
if (mem_limit > 0) {
const uint64_t new_total_mem = (uint64_t)total_mem + total_size;
- if (new_total_mem != (size_t)new_total_mem ||
+ if (!CheckSizeOverflow(new_total_mem) ||
new_total_mem > mem_limit) {
return 0; // fake fail!
}
@@ -231,7 +234,7 @@ void WebPFree(void* ptr) {
void WebPCopyPlane(const uint8_t* src, int src_stride,
uint8_t* dst, int dst_stride, int width, int height) {
assert(src != NULL && dst != NULL);
- assert(src_stride >= width && dst_stride >= width);
+ assert(abs(src_stride) >= width && abs(dst_stride) >= width);
while (height-- > 0) {
memcpy(dst, src, width);
src += src_stride;
diff --git a/thirdparty/libwebp/src/utils/utils.h b/thirdparty/libwebp/src/utils/utils.h
index 2a3ec92678..ef04f108fe 100644
--- a/thirdparty/libwebp/src/utils/utils.h
+++ b/thirdparty/libwebp/src/utils/utils.h
@@ -42,6 +42,10 @@ extern "C" {
#endif
#endif // WEBP_MAX_ALLOCABLE_MEMORY
+static WEBP_INLINE int CheckSizeOverflow(uint64_t size) {
+ return size == (size_t)size;
+}
+
// size-checking safe malloc/calloc: verify that the requested size is not too
// large, or return NULL. You don't need to call these for constructs like
// malloc(sizeof(foo)), but only if there's picture-dependent size involved
@@ -107,24 +111,33 @@ static WEBP_INLINE void PutLE32(uint8_t* const data, uint32_t val) {
PutLE16(data + 2, (int)(val >> 16));
}
-// Returns (int)floor(log2(n)). n must be > 0.
// use GNU builtins where available.
#if defined(__GNUC__) && \
((__GNUC__ == 3 && __GNUC_MINOR__ >= 4) || __GNUC__ >= 4)
+// Returns (int)floor(log2(n)). n must be > 0.
static WEBP_INLINE int BitsLog2Floor(uint32_t n) {
return 31 ^ __builtin_clz(n);
}
+// counts the number of trailing zero
+static WEBP_INLINE int BitsCtz(uint32_t n) { return __builtin_ctz(n); }
#elif defined(_MSC_VER) && _MSC_VER > 1310 && \
(defined(_M_X64) || defined(_M_IX86))
#include <intrin.h>
#pragma intrinsic(_BitScanReverse)
+#pragma intrinsic(_BitScanForward)
static WEBP_INLINE int BitsLog2Floor(uint32_t n) {
- unsigned long first_set_bit;
+ unsigned long first_set_bit; // NOLINT (runtime/int)
_BitScanReverse(&first_set_bit, n);
return first_set_bit;
}
-#else // default: use the C-version.
+static WEBP_INLINE int BitsCtz(uint32_t n) {
+ unsigned long first_set_bit; // NOLINT (runtime/int)
+ _BitScanForward(&first_set_bit, n);
+ return first_set_bit;
+}
+#else // default: use the (slow) C-version.
+#define WEBP_HAVE_SLOW_CLZ_CTZ // signal that the Clz/Ctz function are slow
// Returns 31 ^ clz(n) = log2(n). This is the default C-implementation, either
// based on table or not. Can be used as fallback if clz() is not available.
#define WEBP_NEED_LOG_TABLE_8BIT
@@ -139,6 +152,15 @@ static WEBP_INLINE int WebPLog2FloorC(uint32_t n) {
}
static WEBP_INLINE int BitsLog2Floor(uint32_t n) { return WebPLog2FloorC(n); }
+
+static WEBP_INLINE int BitsCtz(uint32_t n) {
+ int i;
+ for (i = 0; i < 32; ++i, n >>= 1) {
+ if (n & 1) return i;
+ }
+ return 32;
+}
+
#endif
//------------------------------------------------------------------------------
diff --git a/thirdparty/libwebp/src/webp/decode.h b/thirdparty/libwebp/src/webp/decode.h
index 80dd0ef0cc..44fcd64a84 100644
--- a/thirdparty/libwebp/src/webp/decode.h
+++ b/thirdparty/libwebp/src/webp/decode.h
@@ -453,7 +453,7 @@ struct WebPDecoderOptions {
int scaled_width, scaled_height; // final resolution
int use_threads; // if true, use multi-threaded decoding
int dithering_strength; // dithering strength (0=Off, 100=full)
- int flip; // flip output vertically
+ int flip; // if true, flip output vertically
int alpha_dithering_strength; // alpha dithering strength in [0..100]
uint32_t pad[5]; // padding for later use
diff --git a/thirdparty/libwebp/src/webp/encode.h b/thirdparty/libwebp/src/webp/encode.h
index 655166e7d4..b4c599df87 100644
--- a/thirdparty/libwebp/src/webp/encode.h
+++ b/thirdparty/libwebp/src/webp/encode.h
@@ -148,7 +148,8 @@ struct WebPConfig {
int use_delta_palette; // reserved for future lossless feature
int use_sharp_yuv; // if needed, use sharp (and slow) RGB->YUV conversion
- uint32_t pad[2]; // padding for later use
+ int qmin; // minimum permissible quality factor
+ int qmax; // maximum permissible quality factor
};
// Enumerate some predefined settings for WebPConfig, depending on the type
@@ -291,6 +292,11 @@ typedef enum WebPEncodingError {
#define WEBP_MAX_DIMENSION 16383
// Main exchange structure (input samples, output bytes, statistics)
+//
+// Once WebPPictureInit() has been called, it's ok to make all the INPUT fields
+// (use_argb, y/u/v, argb, ...) point to user-owned data, even if
+// WebPPictureAlloc() has been called. Depending on the value use_argb,
+// it's guaranteed that either *argb or *y/*u/*v content will be kept untouched.
struct WebPPicture {
// INPUT
//////////////
diff --git a/thirdparty/meshoptimizer/clusterizer.cpp b/thirdparty/meshoptimizer/clusterizer.cpp
index f8aad7b49c..b1f7b359c1 100644
--- a/thirdparty/meshoptimizer/clusterizer.cpp
+++ b/thirdparty/meshoptimizer/clusterizer.cpp
@@ -368,8 +368,7 @@ static size_t kdtreeBuild(size_t offset, KDNode* nodes, size_t node_count, const
}
// split axis is one where the variance is largest
- unsigned int axis = vars[0] >= vars[1] && vars[0] >= vars[2] ? 0 : vars[1] >= vars[2] ? 1
- : 2;
+ unsigned int axis = vars[0] >= vars[1] && vars[0] >= vars[2] ? 0 : vars[1] >= vars[2] ? 1 : 2;
float split = mean[axis];
size_t middle = kdtreePartition(indices, count, points, stride, axis, split);
diff --git a/thirdparty/meshoptimizer/meshoptimizer.h b/thirdparty/meshoptimizer/meshoptimizer.h
index e44b99ce52..a420eb1098 100644
--- a/thirdparty/meshoptimizer/meshoptimizer.h
+++ b/thirdparty/meshoptimizer/meshoptimizer.h
@@ -278,9 +278,30 @@ MESHOPTIMIZER_API int meshopt_decodeVertexBuffer(void* destination, size_t verte
* meshopt_decodeFilterExp decodes exponential encoding of floating-point data with 8-bit exponent and 24-bit integer mantissa as 2^E*M.
* Each 32-bit component is decoded in isolation; stride must be divisible by 4.
*/
-MESHOPTIMIZER_EXPERIMENTAL void meshopt_decodeFilterOct(void* buffer, size_t vertex_count, size_t vertex_size);
-MESHOPTIMIZER_EXPERIMENTAL void meshopt_decodeFilterQuat(void* buffer, size_t vertex_count, size_t vertex_size);
-MESHOPTIMIZER_EXPERIMENTAL void meshopt_decodeFilterExp(void* buffer, size_t vertex_count, size_t vertex_size);
+MESHOPTIMIZER_EXPERIMENTAL void meshopt_decodeFilterOct(void* buffer, size_t count, size_t stride);
+MESHOPTIMIZER_EXPERIMENTAL void meshopt_decodeFilterQuat(void* buffer, size_t count, size_t stride);
+MESHOPTIMIZER_EXPERIMENTAL void meshopt_decodeFilterExp(void* buffer, size_t count, size_t stride);
+
+/**
+ * Vertex buffer filter encoders
+ * These functions can be used to encode data in a format that meshopt_decodeFilter can decode
+ *
+ * meshopt_encodeFilterOct encodes unit vectors with K-bit (K <= 16) signed X/Y as an output.
+ * Each component is stored as an 8-bit or 16-bit normalized integer; stride must be equal to 4 or 8. W is preserved as is.
+ * Input data must contain 4 floats for every vector (count*4 total).
+ *
+ * meshopt_encodeFilterQuat encodes unit quaternions with K-bit (4 <= K <= 16) component encoding.
+ * Each component is stored as an 16-bit integer; stride must be equal to 8.
+ * Input data must contain 4 floats for every quaternion (count*4 total).
+ *
+ * meshopt_encodeFilterExp encodes arbitrary (finite) floating-point data with 8-bit exponent and K-bit integer mantissa (1 <= K <= 24).
+ * Mantissa is shared between all components of a given vector as defined by stride; stride must be divisible by 4.
+ * Input data must contain stride/4 floats for every vector (count*stride/4 total).
+ * When individual (scalar) encoding is desired, simply pass stride=4 and adjust count accordingly.
+ */
+MESHOPTIMIZER_EXPERIMENTAL void meshopt_encodeFilterOct(void* destination, size_t count, size_t stride, int bits, const float* data);
+MESHOPTIMIZER_EXPERIMENTAL void meshopt_encodeFilterQuat(void* destination, size_t count, size_t stride, int bits, const float* data);
+MESHOPTIMIZER_EXPERIMENTAL void meshopt_encodeFilterExp(void* destination, size_t count, size_t stride, int bits, const float* data);
/**
* Experimental: Mesh simplifier
@@ -305,7 +326,7 @@ MESHOPTIMIZER_EXPERIMENTAL size_t meshopt_simplifyWithAttributes(unsigned int* d
/**
* Experimental: Mesh simplifier (sloppy)
- * Reduces the number of triangles in the mesh, sacrificing mesh apperance for simplification performance
+ * Reduces the number of triangles in the mesh, sacrificing mesh appearance for simplification performance
* The algorithm doesn't preserve mesh topology but can stop short of the target goal based on target error.
* Returns the number of indices after simplification, with destination containing new index data
* The resulting index buffer references vertices from the original vertex buffer.
diff --git a/thirdparty/meshoptimizer/simplifier.cpp b/thirdparty/meshoptimizer/simplifier.cpp
index cf5db4e119..ccc99edb1a 100644
--- a/thirdparty/meshoptimizer/simplifier.cpp
+++ b/thirdparty/meshoptimizer/simplifier.cpp
@@ -358,7 +358,7 @@ static void classifyVertices(unsigned char* result, unsigned int* loop, unsigned
#if TRACE
printf("locked: many open edges %d, disconnected seam %d, many seam edges %d, many wedges %d\n",
- int(stats[0]), int(stats[1]), int(stats[2]), int(stats[3]));
+ int(stats[0]), int(stats[1]), int(stats[2]), int(stats[3]));
#endif
}
@@ -1114,8 +1114,8 @@ static size_t performEdgeCollapses(unsigned int* collapse_remap, unsigned char*
float error_goal_perfect = edge_collapse_goal < collapse_count ? collapses[collapse_order[edge_collapse_goal]].error : 0.f;
printf("removed %d triangles, error %e (goal %e); evaluated %d/%d collapses (done %d, skipped %d, invalid %d)\n",
- int(triangle_collapses), sqrtf(result_error), sqrtf(error_goal_perfect),
- int(stats[0]), int(collapse_count), int(edge_collapses), int(stats[1]), int(stats[2]));
+ int(triangle_collapses), sqrtf(result_error), sqrtf(error_goal_perfect),
+ int(stats[0]), int(collapse_count), int(edge_collapses), int(stats[1]), int(stats[2]));
#endif
return edge_collapses;
@@ -1473,7 +1473,7 @@ size_t meshopt_simplifyWithAttributes(unsigned int* destination, const unsigned
kinds[vertex_kind[i]] += remap[i] == i;
printf("kinds: manifold %d, border %d, seam %d, complex %d, locked %d\n",
- int(kinds[Kind_Manifold]), int(kinds[Kind_Border]), int(kinds[Kind_Seam]), int(kinds[Kind_Complex]), int(kinds[Kind_Locked]));
+ int(kinds[Kind_Manifold]), int(kinds[Kind_Border]), int(kinds[Kind_Seam]), int(kinds[Kind_Complex]), int(kinds[Kind_Locked]));
#endif
Vector3* vertex_positions = allocator.allocate<Vector3>(vertex_count);
@@ -1649,9 +1649,9 @@ size_t meshopt_simplifySloppy(unsigned int* destination, const unsigned int* ind
#if TRACE
printf("pass %d (%s): grid size %d, triangles %d, %s\n",
- pass, (pass == 0) ? "guess" : (pass <= kInterpolationPasses) ? "lerp" : "binary",
- grid_size, int(triangles),
- (triangles <= target_index_count / 3) ? "under" : "over");
+ pass, (pass == 0) ? "guess" : (pass <= kInterpolationPasses) ? "lerp" : "binary",
+ grid_size, int(triangles),
+ (triangles <= target_index_count / 3) ? "under" : "over");
#endif
float tip = interpolate(float(target_index_count / 3), float(min_grid), float(min_triangles), float(grid_size), float(triangles), float(max_grid), float(max_triangles));
@@ -1778,9 +1778,9 @@ size_t meshopt_simplifyPoints(unsigned int* destination, const float* vertex_pos
#if TRACE
printf("pass %d (%s): grid size %d, vertices %d, %s\n",
- pass, (pass == 0) ? "guess" : (pass <= kInterpolationPasses) ? "lerp" : "binary",
- grid_size, int(vertices),
- (vertices <= target_vertex_count) ? "under" : "over");
+ pass, (pass == 0) ? "guess" : (pass <= kInterpolationPasses) ? "lerp" : "binary",
+ grid_size, int(vertices),
+ (vertices <= target_vertex_count) ? "under" : "over");
#endif
float tip = interpolate(float(target_vertex_count), float(min_grid), float(min_vertices), float(grid_size), float(vertices), float(max_grid), float(max_vertices));
diff --git a/thirdparty/meshoptimizer/vertexcodec.cpp b/thirdparty/meshoptimizer/vertexcodec.cpp
index 5f3ec204ab..7925ea862c 100644
--- a/thirdparty/meshoptimizer/vertexcodec.cpp
+++ b/thirdparty/meshoptimizer/vertexcodec.cpp
@@ -77,6 +77,8 @@
#endif
#ifdef SIMD_WASM
+#undef __DEPRECATED
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
#include <wasm_simd128.h>
#endif
@@ -1028,7 +1030,7 @@ static unsigned int getCpuFeatures()
return cpuinfo[2];
}
-unsigned int cpuid = getCpuFeatures();
+static unsigned int cpuid = getCpuFeatures();
#endif
} // namespace meshopt
diff --git a/thirdparty/meshoptimizer/vertexfilter.cpp b/thirdparty/meshoptimizer/vertexfilter.cpp
index 39946f46ed..606a280aa9 100644
--- a/thirdparty/meshoptimizer/vertexfilter.cpp
+++ b/thirdparty/meshoptimizer/vertexfilter.cpp
@@ -52,6 +52,7 @@
#endif
#ifdef SIMD_WASM
+#undef __DEPRECATED
#include <wasm_simd128.h>
#endif
@@ -160,7 +161,8 @@ static void decodeFilterExp(unsigned int* data, size_t count)
#endif
#if defined(SIMD_SSE) || defined(SIMD_NEON) || defined(SIMD_WASM)
-template <typename T> static void dispatchSimd(void (*process)(T*, size_t), T* data, size_t count, size_t stride)
+template <typename T>
+static void dispatchSimd(void (*process)(T*, size_t), T* data, size_t count, size_t stride)
{
assert(stride <= 4);
@@ -791,52 +793,170 @@ static void decodeFilterExpSimd(unsigned int* data, size_t count)
} // namespace meshopt
-void meshopt_decodeFilterOct(void* buffer, size_t vertex_count, size_t vertex_size)
+void meshopt_decodeFilterOct(void* buffer, size_t count, size_t stride)
{
using namespace meshopt;
- assert(vertex_size == 4 || vertex_size == 8);
+ assert(stride == 4 || stride == 8);
#if defined(SIMD_SSE) || defined(SIMD_NEON) || defined(SIMD_WASM)
- if (vertex_size == 4)
- dispatchSimd(decodeFilterOctSimd, static_cast<signed char*>(buffer), vertex_count, 4);
+ if (stride == 4)
+ dispatchSimd(decodeFilterOctSimd, static_cast<signed char*>(buffer), count, 4);
else
- dispatchSimd(decodeFilterOctSimd, static_cast<short*>(buffer), vertex_count, 4);
+ dispatchSimd(decodeFilterOctSimd, static_cast<short*>(buffer), count, 4);
#else
- if (vertex_size == 4)
- decodeFilterOct(static_cast<signed char*>(buffer), vertex_count);
+ if (stride == 4)
+ decodeFilterOct(static_cast<signed char*>(buffer), count);
else
- decodeFilterOct(static_cast<short*>(buffer), vertex_count);
+ decodeFilterOct(static_cast<short*>(buffer), count);
#endif
}
-void meshopt_decodeFilterQuat(void* buffer, size_t vertex_count, size_t vertex_size)
+void meshopt_decodeFilterQuat(void* buffer, size_t count, size_t stride)
{
using namespace meshopt;
- assert(vertex_size == 8);
- (void)vertex_size;
+ assert(stride == 8);
+ (void)stride;
#if defined(SIMD_SSE) || defined(SIMD_NEON) || defined(SIMD_WASM)
- dispatchSimd(decodeFilterQuatSimd, static_cast<short*>(buffer), vertex_count, 4);
+ dispatchSimd(decodeFilterQuatSimd, static_cast<short*>(buffer), count, 4);
#else
- decodeFilterQuat(static_cast<short*>(buffer), vertex_count);
+ decodeFilterQuat(static_cast<short*>(buffer), count);
#endif
}
-void meshopt_decodeFilterExp(void* buffer, size_t vertex_count, size_t vertex_size)
+void meshopt_decodeFilterExp(void* buffer, size_t count, size_t stride)
{
using namespace meshopt;
- assert(vertex_size % 4 == 0);
+ assert(stride > 0 && stride % 4 == 0);
#if defined(SIMD_SSE) || defined(SIMD_NEON) || defined(SIMD_WASM)
- dispatchSimd(decodeFilterExpSimd, static_cast<unsigned int*>(buffer), vertex_count * (vertex_size / 4), 1);
+ dispatchSimd(decodeFilterExpSimd, static_cast<unsigned int*>(buffer), count * (stride / 4), 1);
#else
- decodeFilterExp(static_cast<unsigned int*>(buffer), vertex_count * (vertex_size / 4));
+ decodeFilterExp(static_cast<unsigned int*>(buffer), count * (stride / 4));
#endif
}
+void meshopt_encodeFilterOct(void* destination, size_t count, size_t stride, int bits, const float* data)
+{
+ assert(stride == 4 || stride == 8);
+ assert(bits >= 1 && bits <= 16);
+
+ signed char* d8 = static_cast<signed char*>(destination);
+ short* d16 = static_cast<short*>(destination);
+
+ int bytebits = int(stride * 2);
+
+ for (size_t i = 0; i < count; ++i)
+ {
+ const float* n = &data[i * 4];
+
+ // octahedral encoding of a unit vector
+ float nx = n[0], ny = n[1], nz = n[2], nw = n[3];
+ float nl = fabsf(nx) + fabsf(ny) + fabsf(nz);
+ float ns = nl == 0.f ? 0.f : 1.f / nl;
+
+ nx *= ns;
+ ny *= ns;
+
+ float u = (nz >= 0.f) ? nx : (1 - fabsf(ny)) * (nx >= 0.f ? 1.f : -1.f);
+ float v = (nz >= 0.f) ? ny : (1 - fabsf(nx)) * (ny >= 0.f ? 1.f : -1.f);
+
+ int fu = meshopt_quantizeSnorm(u, bits);
+ int fv = meshopt_quantizeSnorm(v, bits);
+ int fo = meshopt_quantizeSnorm(1.f, bits);
+ int fw = meshopt_quantizeSnorm(nw, bytebits);
+
+ if (stride == 4)
+ {
+ d8[i * 4 + 0] = (signed char)(fu);
+ d8[i * 4 + 1] = (signed char)(fv);
+ d8[i * 4 + 2] = (signed char)(fo);
+ d8[i * 4 + 3] = (signed char)(fw);
+ }
+ else
+ {
+ d16[i * 4 + 0] = short(fu);
+ d16[i * 4 + 1] = short(fv);
+ d16[i * 4 + 2] = short(fo);
+ d16[i * 4 + 3] = short(fw);
+ }
+ }
+}
+
+void meshopt_encodeFilterQuat(void* destination_, size_t count, size_t stride, int bits, const float* data)
+{
+ assert(stride == 8);
+ assert(bits >= 4 && bits <= 16);
+ (void)stride;
+
+ short* destination = static_cast<short*>(destination_);
+
+ const float scaler = sqrtf(2.f);
+
+ for (size_t i = 0; i < count; ++i)
+ {
+ const float* q = &data[i * 4];
+ short* d = &destination[i * 4];
+
+ // establish maximum quaternion component
+ int qc = 0;
+ qc = fabsf(q[1]) > fabsf(q[qc]) ? 1 : qc;
+ qc = fabsf(q[2]) > fabsf(q[qc]) ? 2 : qc;
+ qc = fabsf(q[3]) > fabsf(q[qc]) ? 3 : qc;
+
+ // we use double-cover properties to discard the sign
+ float sign = q[qc] < 0.f ? -1.f : 1.f;
+
+ // note: we always encode a cyclical swizzle to be able to recover the order via rotation
+ d[0] = short(meshopt_quantizeSnorm(q[(qc + 1) & 3] * scaler * sign, bits));
+ d[1] = short(meshopt_quantizeSnorm(q[(qc + 2) & 3] * scaler * sign, bits));
+ d[2] = short(meshopt_quantizeSnorm(q[(qc + 3) & 3] * scaler * sign, bits));
+ d[3] = short((meshopt_quantizeSnorm(1.f, bits) & ~3) | qc);
+ }
+}
+
+void meshopt_encodeFilterExp(void* destination_, size_t count, size_t stride, int bits, const float* data)
+{
+ assert(stride > 0 && stride % 4 == 0);
+ assert(bits >= 1 && bits <= 24);
+
+ unsigned int* destination = static_cast<unsigned int*>(destination_);
+ size_t stride_float = stride / sizeof(float);
+
+ for (size_t i = 0; i < count; ++i)
+ {
+ const float* v = &data[i * stride_float];
+ unsigned int* d = &destination[i * stride_float];
+
+ // use maximum exponent to encode values; this guarantess that mantissa is [-1, 1]
+ int exp = -100;
+
+ for (size_t j = 0; j < stride_float; ++j)
+ {
+ int e;
+ frexp(v[j], &e);
+
+ exp = (exp < e) ? e : exp;
+ }
+
+ // note that we additionally scale the mantissa to make it a K-bit signed integer (K-1 bits for magnitude)
+ exp -= (bits - 1);
+
+ // compute renormalized rounded mantissa for each component
+ int mmask = (1 << 24) - 1;
+
+ for (size_t j = 0; j < stride_float; ++j)
+ {
+ int m = int(ldexp(v[j], -exp) + (v[j] >= 0 ? 0.5f : -0.5f));
+
+ d[j] = (m & mmask) | (unsigned(exp) << 24);
+ }
+ }
+}
+
#undef SIMD_SSE
#undef SIMD_NEON
#undef SIMD_WASM
diff --git a/thirdparty/miniupnpc/LICENSE b/thirdparty/miniupnpc/LICENSE
index 6ddd381baa..fe9118c07e 100644
--- a/thirdparty/miniupnpc/LICENSE
+++ b/thirdparty/miniupnpc/LICENSE
@@ -1,4 +1,4 @@
-MiniUPnPc
+MiniUPnP Project
Copyright (c) 2005-2020, Thomas BERNARD
All rights reserved.
@@ -24,4 +24,3 @@ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
-
diff --git a/thirdparty/miniupnpc/miniupnpc/igd_desc_parse.h b/thirdparty/miniupnpc/include/igd_desc_parse.h
index 0de546b697..0de546b697 100644
--- a/thirdparty/miniupnpc/miniupnpc/igd_desc_parse.h
+++ b/thirdparty/miniupnpc/include/igd_desc_parse.h
diff --git a/thirdparty/miniupnpc/miniupnpc/miniupnpc.h b/thirdparty/miniupnpc/include/miniupnpc.h
index 3aef8ea443..a10bd950a8 100644
--- a/thirdparty/miniupnpc/miniupnpc/miniupnpc.h
+++ b/thirdparty/miniupnpc/include/miniupnpc.h
@@ -1,4 +1,4 @@
-/* $Id: miniupnpc.h,v 1.58 2021/03/02 23:49:52 nanard Exp $ */
+/* $Id: miniupnpc.h,v 1.59 2021/09/28 21:39:17 nanard Exp $ */
/* vim: tabstop=4 shiftwidth=4 noexpandtab
* Project: miniupnp
* http://miniupnp.free.fr/
@@ -20,7 +20,7 @@
#define UPNPDISCOVER_MEMORY_ERROR (-102)
/* versions : */
-#define MINIUPNPC_VERSION "2.2.2"
+#define MINIUPNPC_VERSION "2.2.3"
#define MINIUPNPC_API_VERSION 17
/* Source port:
diff --git a/thirdparty/miniupnpc/miniupnpc/miniupnpc_declspec.h b/thirdparty/miniupnpc/include/miniupnpc_declspec.h
index 40adb922ec..40adb922ec 100644
--- a/thirdparty/miniupnpc/miniupnpc/miniupnpc_declspec.h
+++ b/thirdparty/miniupnpc/include/miniupnpc_declspec.h
diff --git a/thirdparty/miniupnpc/miniupnpc/miniupnpctypes.h b/thirdparty/miniupnpc/include/miniupnpctypes.h
index 307ce39699..26ed4f0059 100644
--- a/thirdparty/miniupnpc/miniupnpc/miniupnpctypes.h
+++ b/thirdparty/miniupnpc/include/miniupnpctypes.h
@@ -1,13 +1,15 @@
/* $Id: miniupnpctypes.h,v 1.1 2011/02/15 11:10:40 nanard Exp $ */
/* Miniupnp project : http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org
* Author : Thomas Bernard
- * Copyright (c) 2011 Thomas Bernard
+ * Copyright (c) 2021 Thomas Bernard
* This software is subject to the conditions detailed in the
* LICENCE file provided within this distribution */
#ifndef MINIUPNPCTYPES_H_INCLUDED
#define MINIUPNPCTYPES_H_INCLUDED
-#if (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L)
+/* Use unsigned long long when available :
+ * strtoull is C99 */
+#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
#define UNSIGNED_INTEGER unsigned long long
#define STRTOUI strtoull
#else
diff --git a/thirdparty/miniupnpc/miniupnpc/miniwget.h b/thirdparty/miniupnpc/include/miniwget.h
index f5572c2544..f5572c2544 100644
--- a/thirdparty/miniupnpc/miniupnpc/miniwget.h
+++ b/thirdparty/miniupnpc/include/miniwget.h
diff --git a/thirdparty/miniupnpc/miniupnpc/portlistingparse.h b/thirdparty/miniupnpc/include/portlistingparse.h
index e3957a3f4c..e3957a3f4c 100644
--- a/thirdparty/miniupnpc/miniupnpc/portlistingparse.h
+++ b/thirdparty/miniupnpc/include/portlistingparse.h
diff --git a/thirdparty/miniupnpc/miniupnpc/upnpcommands.h b/thirdparty/miniupnpc/include/upnpcommands.h
index 1b6d447732..1b6d447732 100644
--- a/thirdparty/miniupnpc/miniupnpc/upnpcommands.h
+++ b/thirdparty/miniupnpc/include/upnpcommands.h
diff --git a/thirdparty/miniupnpc/miniupnpc/upnpdev.h b/thirdparty/miniupnpc/include/upnpdev.h
index 9b2cb431ba..171d495be3 100644
--- a/thirdparty/miniupnpc/miniupnpc/upnpdev.h
+++ b/thirdparty/miniupnpc/include/upnpdev.h
@@ -1,8 +1,8 @@
-/* $Id: upnpdev.h,v 1.3 2020/05/29 15:57:42 nanard Exp $ */
+/* $Id: upnpdev.h,v 1.4 2021/08/21 09:45:01 nanard Exp $ */
/* Project : miniupnp
* Web : http://miniupnp.free.fr/ or https://miniupnp.tuxfamily.org/
* Author : Thomas BERNARD
- * copyright (c) 2005-2020 Thomas Bernard
+ * copyright (c) 2005-2021 Thomas Bernard
* This software is subjet to the conditions detailed in the
* provided LICENSE file. */
#ifndef UPNPDEV_H_INCLUDED
@@ -20,7 +20,7 @@ struct UPNPDev {
char * st;
char * usn;
unsigned int scope_id;
-#if defined(__STDC_VERSION) && __STDC_VERSION__ >= 199901L
+#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
/* C99 flexible array member */
char buffer[];
#elif defined(__GNUC__)
diff --git a/thirdparty/miniupnpc/miniupnpc/upnpreplyparse.h b/thirdparty/miniupnpc/include/upnpreplyparse.h
index 6badd15b26..6badd15b26 100644
--- a/thirdparty/miniupnpc/miniupnpc/upnpreplyparse.h
+++ b/thirdparty/miniupnpc/include/upnpreplyparse.h
diff --git a/thirdparty/miniupnpc/miniupnpc/addr_is_reserved.c b/thirdparty/miniupnpc/src/addr_is_reserved.c
index 7e586d7da2..18c6424201 100644
--- a/thirdparty/miniupnpc/miniupnpc/addr_is_reserved.c
+++ b/thirdparty/miniupnpc/src/addr_is_reserved.c
@@ -56,7 +56,7 @@ int addr_is_reserved(const char * addr_str)
uint32_t addr_n, address;
size_t i;
-#if defined(_WIN32) && (!defined(_WIN32_WINNT_VISTA) || (_WIN32_WINNT < _WIN32_WINNT_VISTA))
+#if defined(_WIN32) && _WIN32_WINNT < 0x0600 // _WIN32_WINNT_VISTA
addr_n = inet_addr(addr_str);
if (addr_n == INADDR_NONE)
return 1;
diff --git a/thirdparty/miniupnpc/miniupnpc/addr_is_reserved.h b/thirdparty/miniupnpc/src/addr_is_reserved.h
index f8b5d66a09..f8b5d66a09 100644
--- a/thirdparty/miniupnpc/miniupnpc/addr_is_reserved.h
+++ b/thirdparty/miniupnpc/src/addr_is_reserved.h
diff --git a/thirdparty/miniupnpc/miniupnpc/codelength.h b/thirdparty/miniupnpc/src/codelength.h
index ea0b005ffe..ea0b005ffe 100644
--- a/thirdparty/miniupnpc/miniupnpc/codelength.h
+++ b/thirdparty/miniupnpc/src/codelength.h
diff --git a/thirdparty/miniupnpc/miniupnpc/connecthostport.c b/thirdparty/miniupnpc/src/connecthostport.c
index 79f832b8db..79f832b8db 100644
--- a/thirdparty/miniupnpc/miniupnpc/connecthostport.c
+++ b/thirdparty/miniupnpc/src/connecthostport.c
diff --git a/thirdparty/miniupnpc/miniupnpc/connecthostport.h b/thirdparty/miniupnpc/src/connecthostport.h
index 701816b5b6..701816b5b6 100644
--- a/thirdparty/miniupnpc/miniupnpc/connecthostport.h
+++ b/thirdparty/miniupnpc/src/connecthostport.h
diff --git a/thirdparty/miniupnpc/miniupnpc/igd_desc_parse.c b/thirdparty/miniupnpc/src/igd_desc_parse.c
index d2999ad011..d2999ad011 100644
--- a/thirdparty/miniupnpc/miniupnpc/igd_desc_parse.c
+++ b/thirdparty/miniupnpc/src/igd_desc_parse.c
diff --git a/thirdparty/miniupnpc/miniupnpc/minisoap.c b/thirdparty/miniupnpc/src/minisoap.c
index 78606672d5..78606672d5 100644
--- a/thirdparty/miniupnpc/miniupnpc/minisoap.c
+++ b/thirdparty/miniupnpc/src/minisoap.c
diff --git a/thirdparty/miniupnpc/miniupnpc/minisoap.h b/thirdparty/miniupnpc/src/minisoap.h
index d6a45d03ba..d6a45d03ba 100644
--- a/thirdparty/miniupnpc/miniupnpc/minisoap.h
+++ b/thirdparty/miniupnpc/src/minisoap.h
diff --git a/thirdparty/miniupnpc/miniupnpc/minissdpc.c b/thirdparty/miniupnpc/src/minissdpc.c
index 5d3a0fd049..edebb1600a 100644
--- a/thirdparty/miniupnpc/miniupnpc/minissdpc.c
+++ b/thirdparty/miniupnpc/src/minissdpc.c
@@ -1,4 +1,4 @@
-/* $Id: minissdpc.c,v 1.47 2021/03/02 23:38:30 nanard Exp $ */
+/* $Id: minissdpc.c,v 1.49 2021/05/13 11:00:36 nanard Exp $ */
/* vim: tabstop=4 shiftwidth=4 noexpandtab
* Project : miniupnp
* Web : http://miniupnp.free.fr/ or https://miniupnp.tuxfamily.org/
@@ -460,7 +460,7 @@ parseMSEARCHReply(const char * reply, int size,
static int upnp_gettimeofday(struct timeval * tv)
{
#if defined(_WIN32)
-#if defined(_WIN32_WINNT_VISTA) && (_WIN32_WINNT >= _WIN32_WINNT_VISTA)
+#if _WIN32_WINNT >= 0x0600 // _WIN32_WINNT_VISTA
ULONGLONG ts = GetTickCount64();
#else
DWORD ts = GetTickCount();
@@ -469,14 +469,29 @@ static int upnp_gettimeofday(struct timeval * tv)
tv->tv_usec = (ts % 1000) * 1000;
return 0; /* success */
#elif defined(CLOCK_MONOTONIC_FAST) || defined(CLOCK_MONOTONIC)
- struct timespec ts;
- int ret_code = clock_gettime(UPNP_CLOCKID, &ts);
- if (ret_code == 0)
+#if defined(__APPLE__)
+#if defined(__clang__)
+ if (__builtin_available(macOS 10.12, iOS 10.0, tvOS 10.0, watchOS 3.0, *)) {
+#else /* !defined(__clang__) */
+ if (clock_gettime != NULL) {
+#endif /* defined(__clang__) */
+#endif /* defined(__APPLE__) */
+ struct timespec ts;
+ int ret_code = clock_gettime(UPNP_CLOCKID, &ts);
+ if (ret_code == 0)
+ {
+ tv->tv_sec = ts.tv_sec;
+ tv->tv_usec = ts.tv_nsec / 1000;
+ }
+ return ret_code;
+#if defined(__APPLE__)
+ }
+ else
{
- tv->tv_sec = ts.tv_sec;
- tv->tv_usec = ts.tv_nsec / 1000;
+ /* fall-back for earlier Apple platforms */
+ return gettimeofday(tv, NULL);
}
- return ret_code;
+#endif /* defined(__APPLE__) */
#else
return gettimeofday(tv, NULL);
#endif
@@ -705,7 +720,7 @@ ssdpDiscoverDevices(const char * const deviceTypes[],
}
}
- if(multicastif)
+ if(multicastif && multicastif[0] != '\0')
{
if(ipv6) {
#if !defined(_WIN32)
@@ -732,7 +747,7 @@ ssdpDiscoverDevices(const char * const deviceTypes[],
} else {
struct in_addr mc_if;
#if defined(_WIN32)
-#if defined(_WIN32_WINNT_VISTA) && (_WIN32_WINNT >= _WIN32_WINNT_VISTA)
+#if _WIN32_WINNT >= 0x0600 // _WIN32_WINNT_VISTA
InetPtonA(AF_INET, multicastif, &mc_if);
#else
mc_if.s_addr = inet_addr(multicastif); /* old Windows SDK do not support InetPtoA() */
diff --git a/thirdparty/miniupnpc/miniupnpc/minissdpc.h b/thirdparty/miniupnpc/src/minissdpc.h
index c99f929b9e..c99f929b9e 100644
--- a/thirdparty/miniupnpc/miniupnpc/minissdpc.h
+++ b/thirdparty/miniupnpc/src/minissdpc.h
diff --git a/thirdparty/miniupnpc/miniupnpc/miniupnpc.c b/thirdparty/miniupnpc/src/miniupnpc.c
index 696af93237..696af93237 100644
--- a/thirdparty/miniupnpc/miniupnpc/miniupnpc.c
+++ b/thirdparty/miniupnpc/src/miniupnpc.c
diff --git a/thirdparty/miniupnpc/miniupnpc/miniupnpc_socketdef.h b/thirdparty/miniupnpc/src/miniupnpc_socketdef.h
index 5986e58c76..5986e58c76 100644
--- a/thirdparty/miniupnpc/miniupnpc/miniupnpc_socketdef.h
+++ b/thirdparty/miniupnpc/src/miniupnpc_socketdef.h
diff --git a/thirdparty/miniupnpc/miniupnpc/miniupnpcstrings.h b/thirdparty/miniupnpc/src/miniupnpcstrings.h
index 7b3d04074a..eefbc8dbdd 100644
--- a/thirdparty/miniupnpc/miniupnpc/miniupnpcstrings.h
+++ b/thirdparty/miniupnpc/src/miniupnpcstrings.h
@@ -4,7 +4,7 @@
#include "core/version.h"
#define OS_STRING VERSION_NAME "/1.0"
-#define MINIUPNPC_VERSION_STRING "2.2.2"
+#define MINIUPNPC_VERSION_STRING "2.2.3"
#if 0
/* according to "UPnP Device Architecture 1.0" */
diff --git a/thirdparty/miniupnpc/miniupnpc/miniwget.c b/thirdparty/miniupnpc/src/miniwget.c
index d5b7970632..d5b7970632 100644
--- a/thirdparty/miniupnpc/miniupnpc/miniwget.c
+++ b/thirdparty/miniupnpc/src/miniwget.c
diff --git a/thirdparty/miniupnpc/miniupnpc/miniwget_private.h b/thirdparty/miniupnpc/src/miniwget_private.h
index e4eaac8085..e4eaac8085 100644
--- a/thirdparty/miniupnpc/miniupnpc/miniwget_private.h
+++ b/thirdparty/miniupnpc/src/miniwget_private.h
diff --git a/thirdparty/miniupnpc/miniupnpc/minixml.c b/thirdparty/miniupnpc/src/minixml.c
index ed2d3c759c..ed2d3c759c 100644
--- a/thirdparty/miniupnpc/miniupnpc/minixml.c
+++ b/thirdparty/miniupnpc/src/minixml.c
diff --git a/thirdparty/miniupnpc/miniupnpc/minixml.h b/thirdparty/miniupnpc/src/minixml.h
index 2e60397388..2e60397388 100644
--- a/thirdparty/miniupnpc/miniupnpc/minixml.h
+++ b/thirdparty/miniupnpc/src/minixml.h
diff --git a/thirdparty/miniupnpc/miniupnpc/minixmlvalid.c b/thirdparty/miniupnpc/src/minixmlvalid.c
index dad1488122..dad1488122 100644
--- a/thirdparty/miniupnpc/miniupnpc/minixmlvalid.c
+++ b/thirdparty/miniupnpc/src/minixmlvalid.c
diff --git a/thirdparty/miniupnpc/miniupnpc/portlistingparse.c b/thirdparty/miniupnpc/src/portlistingparse.c
index 162cf8b7ec..162cf8b7ec 100644
--- a/thirdparty/miniupnpc/miniupnpc/portlistingparse.c
+++ b/thirdparty/miniupnpc/src/portlistingparse.c
diff --git a/thirdparty/miniupnpc/miniupnpc/receivedata.c b/thirdparty/miniupnpc/src/receivedata.c
index 7f187f6e56..7f187f6e56 100644
--- a/thirdparty/miniupnpc/miniupnpc/receivedata.c
+++ b/thirdparty/miniupnpc/src/receivedata.c
diff --git a/thirdparty/miniupnpc/miniupnpc/receivedata.h b/thirdparty/miniupnpc/src/receivedata.h
index c9fdc561f8..c9fdc561f8 100644
--- a/thirdparty/miniupnpc/miniupnpc/receivedata.h
+++ b/thirdparty/miniupnpc/src/receivedata.h
diff --git a/thirdparty/miniupnpc/miniupnpc/upnpcommands.c b/thirdparty/miniupnpc/src/upnpcommands.c
index 1e1ee6786f..1e1ee6786f 100644
--- a/thirdparty/miniupnpc/miniupnpc/upnpcommands.c
+++ b/thirdparty/miniupnpc/src/upnpcommands.c
diff --git a/thirdparty/miniupnpc/miniupnpc/upnpdev.c b/thirdparty/miniupnpc/src/upnpdev.c
index d89a9934c3..d89a9934c3 100644
--- a/thirdparty/miniupnpc/miniupnpc/upnpdev.c
+++ b/thirdparty/miniupnpc/src/upnpdev.c
diff --git a/thirdparty/miniupnpc/miniupnpc/upnpreplyparse.c b/thirdparty/miniupnpc/src/upnpreplyparse.c
index 4d06f0585d..4d06f0585d 100644
--- a/thirdparty/miniupnpc/miniupnpc/upnpreplyparse.c
+++ b/thirdparty/miniupnpc/src/upnpreplyparse.c
diff --git a/thirdparty/miniupnpc/miniupnpc/win32_snprintf.h b/thirdparty/miniupnpc/src/win32_snprintf.h
index 1fc284ecff..1fc284ecff 100644
--- a/thirdparty/miniupnpc/miniupnpc/win32_snprintf.h
+++ b/thirdparty/miniupnpc/src/win32_snprintf.h
diff --git a/thirdparty/pcre2/AUTHORS b/thirdparty/pcre2/AUTHORS
index f001cb770e..bec8a1e5ad 100644
--- a/thirdparty/pcre2/AUTHORS
+++ b/thirdparty/pcre2/AUTHORS
@@ -5,10 +5,10 @@ Written by: Philip Hazel
Email local part: Philip.Hazel
Email domain: gmail.com
-University of Cambridge Computing Service,
+Retired from University of Cambridge Computing Service,
Cambridge, England.
-Copyright (c) 1997-2020 University of Cambridge
+Copyright (c) 1997-2021 University of Cambridge
All rights reserved
@@ -19,7 +19,7 @@ Written by: Zoltan Herczeg
Email local part: hzmester
Emain domain: freemail.hu
-Copyright(c) 2010-2020 Zoltan Herczeg
+Copyright(c) 2010-2021 Zoltan Herczeg
All rights reserved.
@@ -30,7 +30,7 @@ Written by: Zoltan Herczeg
Email local part: hzmester
Emain domain: freemail.hu
-Copyright(c) 2009-2020 Zoltan Herczeg
+Copyright(c) 2009-2021 Zoltan Herczeg
All rights reserved.
####
diff --git a/thirdparty/pcre2/LICENCE b/thirdparty/pcre2/LICENCE
index 155d073127..b1ec61be44 100644
--- a/thirdparty/pcre2/LICENCE
+++ b/thirdparty/pcre2/LICENCE
@@ -23,10 +23,10 @@ Written by: Philip Hazel
Email local part: Philip.Hazel
Email domain: gmail.com
-University of Cambridge Computing Service,
+Retired from University of Cambridge Computing Service,
Cambridge, England.
-Copyright (c) 1997-2020 University of Cambridge
+Copyright (c) 1997-2021 University of Cambridge
All rights reserved.
@@ -37,7 +37,7 @@ Written by: Zoltan Herczeg
Email local part: hzmester
Email domain: freemail.hu
-Copyright(c) 2010-2020 Zoltan Herczeg
+Copyright(c) 2010-2021 Zoltan Herczeg
All rights reserved.
@@ -48,7 +48,7 @@ Written by: Zoltan Herczeg
Email local part: hzmester
Email domain: freemail.hu
-Copyright(c) 2009-2020 Zoltan Herczeg
+Copyright(c) 2009-2021 Zoltan Herczeg
All rights reserved.
diff --git a/thirdparty/pcre2/src/config.h b/thirdparty/pcre2/src/config.h
index 10f4104790..a13593715e 100644
--- a/thirdparty/pcre2/src/config.h
+++ b/thirdparty/pcre2/src/config.h
@@ -85,8 +85,8 @@ sure both macros are undefined; an emulation function will then be used. */
/* Define to 1 if you have the `memmove' function. */
/* #undef HAVE_MEMMOVE */
-/* Define to 1 if you have the <memory.h> header file. */
-/* #undef HAVE_MEMORY_H */
+/* Define to 1 if you have the <minix/config.h> header file. */
+/* #undef HAVE_MINIX_CONFIG_H */
/* Define to 1 if you have the `mkostemp' function. */
/* #undef HAVE_MKOSTEMP */
@@ -103,12 +103,18 @@ sure both macros are undefined; an emulation function will then be used. */
/* Define to 1 if you have the <readline/readline.h> header file. */
/* #undef HAVE_READLINE_READLINE_H */
+/* Define to 1 if you have the `realpath' function. */
+/* #undef HAVE_REALPATH */
+
/* Define to 1 if you have the `secure_getenv' function. */
/* #undef HAVE_SECURE_GETENV */
/* Define to 1 if you have the <stdint.h> header file. */
/* #undef HAVE_STDINT_H */
+/* Define to 1 if you have the <stdio.h> header file. */
+/* #undef HAVE_STDIO_H */
+
/* Define to 1 if you have the <stdlib.h> header file. */
/* #undef HAVE_STDLIB_H */
@@ -136,6 +142,9 @@ sure both macros are undefined; an emulation function will then be used. */
/* Define to 1 if the compiler supports simple visibility declarations. */
/* #undef HAVE_VISIBILITY */
+/* Define to 1 if you have the <wchar.h> header file. */
+/* #undef HAVE_WCHAR_H */
+
/* Define to 1 if you have the <windows.h> header file. */
/* #undef HAVE_WINDOWS_H */
@@ -224,7 +233,7 @@ sure both macros are undefined; an emulation function will then be used. */
#define PACKAGE_NAME "PCRE2"
/* Define to the full name and version of this package. */
-#define PACKAGE_STRING "PCRE2 10.36"
+#define PACKAGE_STRING "PCRE2 10.39"
/* Define to the one symbol short name of this package. */
#define PACKAGE_TARNAME "pcre2"
@@ -233,7 +242,7 @@ sure both macros are undefined; an emulation function will then be used. */
#define PACKAGE_URL ""
/* Define to the version of this package. */
-#define PACKAGE_VERSION "10.36"
+#define PACKAGE_VERSION "10.39"
/* The value of PARENS_NEST_LIMIT specifies the maximum depth of nested
parentheses (of any kind) in a pattern. This limits the amount of system
@@ -286,7 +295,9 @@ sure both macros are undefined; an emulation function will then be used. */
unless SUPPORT_JIT is also defined. */
/* #undef SLJIT_PROT_EXECUTABLE_ALLOCATOR */
-/* Define to 1 if you have the ANSI C header files. */
+/* Define to 1 if all of the C90 standard headers exist (not just the ones
+ required in a freestanding environment). This macro is provided for
+ backward compatibility; new code need not use it. */
/* #undef STDC_HEADERS */
/* Define to any value to enable support for Just-In-Time compiling. */
@@ -340,35 +351,91 @@ sure both macros are undefined; an emulation function will then be used. */
#ifndef _ALL_SOURCE
# define _ALL_SOURCE 1
#endif
+/* Enable general extensions on macOS. */
+#ifndef _DARWIN_C_SOURCE
+# define _DARWIN_C_SOURCE 1
+#endif
+/* Enable general extensions on Solaris. */
+#ifndef __EXTENSIONS__
+# define __EXTENSIONS__ 1
+#endif
/* Enable GNU extensions on systems that have them. */
#ifndef _GNU_SOURCE
# define _GNU_SOURCE 1
#endif
-/* Enable threading extensions on Solaris. */
+/* Enable X/Open compliant socket functions that do not require linking
+ with -lxnet on HP-UX 11.11. */
+#ifndef _HPUX_ALT_XOPEN_SOCKET_API
+# define _HPUX_ALT_XOPEN_SOCKET_API 1
+#endif
+/* Identify the host operating system as Minix.
+ This macro does not affect the system headers' behavior.
+ A future release of Autoconf may stop defining this macro. */
+#ifndef _MINIX
+/* # undef _MINIX */
+#endif
+/* Enable general extensions on NetBSD.
+ Enable NetBSD compatibility extensions on Minix. */
+#ifndef _NETBSD_SOURCE
+# define _NETBSD_SOURCE 1
+#endif
+/* Enable OpenBSD compatibility extensions on NetBSD.
+ Oddly enough, this does nothing on OpenBSD. */
+#ifndef _OPENBSD_SOURCE
+# define _OPENBSD_SOURCE 1
+#endif
+/* Define to 1 if needed for POSIX-compatible behavior. */
+#ifndef _POSIX_SOURCE
+/* # undef _POSIX_SOURCE */
+#endif
+/* Define to 2 if needed for POSIX-compatible behavior. */
+#ifndef _POSIX_1_SOURCE
+/* # undef _POSIX_1_SOURCE */
+#endif
+/* Enable POSIX-compatible threading on Solaris. */
#ifndef _POSIX_PTHREAD_SEMANTICS
# define _POSIX_PTHREAD_SEMANTICS 1
#endif
+/* Enable extensions specified by ISO/IEC TS 18661-5:2014. */
+#ifndef __STDC_WANT_IEC_60559_ATTRIBS_EXT__
+# define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-1:2014. */
+#ifndef __STDC_WANT_IEC_60559_BFP_EXT__
+# define __STDC_WANT_IEC_60559_BFP_EXT__ 1
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-2:2015. */
+#ifndef __STDC_WANT_IEC_60559_DFP_EXT__
+# define __STDC_WANT_IEC_60559_DFP_EXT__ 1
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-4:2015. */
+#ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__
+# define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-3:2015. */
+#ifndef __STDC_WANT_IEC_60559_TYPES_EXT__
+# define __STDC_WANT_IEC_60559_TYPES_EXT__ 1
+#endif
+/* Enable extensions specified by ISO/IEC TR 24731-2:2010. */
+#ifndef __STDC_WANT_LIB_EXT2__
+# define __STDC_WANT_LIB_EXT2__ 1
+#endif
+/* Enable extensions specified by ISO/IEC 24747:2009. */
+#ifndef __STDC_WANT_MATH_SPEC_FUNCS__
+# define __STDC_WANT_MATH_SPEC_FUNCS__ 1
+#endif
/* Enable extensions on HP NonStop. */
#ifndef _TANDEM_SOURCE
# define _TANDEM_SOURCE 1
#endif
-/* Enable general extensions on Solaris. */
-#ifndef __EXTENSIONS__
-# define __EXTENSIONS__ 1
+/* Enable X/Open extensions. Define to 500 only if necessary
+ to make mbstate_t available. */
+#ifndef _XOPEN_SOURCE
+/* # undef _XOPEN_SOURCE */
#endif
/* Version number of package */
-#define VERSION "10.36"
-
-/* Define to 1 if on MINIX. */
-/* #undef _MINIX */
-
-/* Define to 2 if the system does not provide POSIX.1 features except with
- this defined. */
-/* #undef _POSIX_1_SOURCE */
-
-/* Define to 1 if you need to in order for `stat' and other things to work. */
-/* #undef _POSIX_SOURCE */
+#define VERSION "10.39"
/* Define to empty if `const' does not conform to ANSI C. */
/* #undef const */
diff --git a/thirdparty/pcre2/src/pcre2.h b/thirdparty/pcre2/src/pcre2.h
index f204ec8180..90a97d9cb7 100644
--- a/thirdparty/pcre2/src/pcre2.h
+++ b/thirdparty/pcre2/src/pcre2.h
@@ -5,7 +5,7 @@
/* This is the public header file for the PCRE library, second API, to be
#included by applications that call PCRE2 functions.
- Copyright (c) 2016-2020 University of Cambridge
+ Copyright (c) 2016-2021 University of Cambridge
-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
@@ -42,9 +42,9 @@ POSSIBILITY OF SUCH DAMAGE.
/* The current PCRE version information. */
#define PCRE2_MAJOR 10
-#define PCRE2_MINOR 36
+#define PCRE2_MINOR 39
#define PCRE2_PRERELEASE
-#define PCRE2_DATE 2020-12-04
+#define PCRE2_DATE 2021-10-29
/* When an application links to a PCRE DLL in Windows, the symbols that are
imported have to be identified as such. When building PCRE2, the appropriate
@@ -84,8 +84,8 @@ set, we ensure here that it has no effect. */
/* Have to include limits.h, stdlib.h, and inttypes.h to ensure that size_t and
uint8_t, UCHAR_MAX, etc are defined. Some systems that do have inttypes.h do
not have stdint.h, which is why we use inttypes.h, which according to the C
-standard is a superset of stdint.h. If none of these headers are available,
-the relevant values must be provided by some other means. */
+standard is a superset of stdint.h. If inttypes.h is not available the build
+will break and the relevant values must be provided by some other means. */
#include <limits.h>
#include <stdlib.h>
@@ -152,6 +152,7 @@ D is inspected during pcre2_dfa_match() execution
#define PCRE2_EXTRA_MATCH_LINE 0x00000008u /* C */
#define PCRE2_EXTRA_ESCAPED_CR_IS_LF 0x00000010u /* C */
#define PCRE2_EXTRA_ALT_BSUX 0x00000020u /* C */
+#define PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK 0x00000040u /* C */
/* These are for pcre2_jit_compile(). */
@@ -311,6 +312,7 @@ pcre2_pattern_convert(). */
#define PCRE2_ERROR_SCRIPT_RUN_NOT_AVAILABLE 196
#define PCRE2_ERROR_TOO_MANY_CAPTURES 197
#define PCRE2_ERROR_CONDITION_ATOMIC_ASSERTION_EXPECTED 198
+#define PCRE2_ERROR_BACKSLASH_K_IN_LOOKAROUND 199
/* "Expected" matching error codes: no match and partial match. */
diff --git a/thirdparty/pcre2/src/pcre2_auto_possess.c b/thirdparty/pcre2/src/pcre2_auto_possess.c
index c64cf856d1..e5e0895682 100644
--- a/thirdparty/pcre2/src/pcre2_auto_possess.c
+++ b/thirdparty/pcre2/src/pcre2_auto_possess.c
@@ -7,7 +7,7 @@ and semantics are as close as possible to those of the Perl 5 language.
Written by Philip Hazel
Original API code Copyright (c) 1997-2012 University of Cambridge
- New API code Copyright (c) 2016-2020 University of Cambridge
+ New API code Copyright (c) 2016-2021 University of Cambridge
-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
@@ -490,6 +490,7 @@ switch(c)
list[2] = (uint32_t)(end - code);
return end;
}
+
return NULL; /* Opcode not accepted */
}
@@ -1186,12 +1187,16 @@ for (;;)
c = *repeat_opcode;
if (c >= OP_CRSTAR && c <= OP_CRMINRANGE)
{
- /* end must not be NULL. */
- end = get_chr_property_list(code, utf, ucp, cb->fcc, list);
+ /* The return from get_chr_property_list() will never be NULL when
+ *code (aka c) is one of the three class opcodes. However, gcc with
+ -fanalyzer notes that a NULL return is possible, and grumbles. Hence we
+ put in a check. */
+ end = get_chr_property_list(code, utf, ucp, cb->fcc, list);
list[1] = (c & 1) == 0;
- if (compare_opcodes(end, utf, ucp, cb, list, end, &rec_limit))
+ if (end != NULL &&
+ compare_opcodes(end, utf, ucp, cb, list, end, &rec_limit))
{
switch (c)
{
diff --git a/thirdparty/pcre2/src/pcre2_compile.c b/thirdparty/pcre2/src/pcre2_compile.c
index e811f12f02..383159be76 100644
--- a/thirdparty/pcre2/src/pcre2_compile.c
+++ b/thirdparty/pcre2/src/pcre2_compile.c
@@ -7,7 +7,7 @@ and semantics are as close as possible to those of the Perl 5 language.
Written by Philip Hazel
Original API code Copyright (c) 1997-2012 University of Cambridge
- New API code Copyright (c) 2016-2020 University of Cambridge
+ New API code Copyright (c) 2016-2021 University of Cambridge
-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
@@ -137,7 +137,7 @@ static BOOL
static int
check_lookbehinds(uint32_t *, uint32_t **, parsed_recurse_check *,
- compile_block *);
+ compile_block *, int *);
/*************************************************
@@ -782,12 +782,15 @@ are allowed. */
#define PUBLIC_COMPILE_EXTRA_OPTIONS \
(PUBLIC_LITERAL_COMPILE_EXTRA_OPTIONS| \
PCRE2_EXTRA_ALLOW_SURROGATE_ESCAPES|PCRE2_EXTRA_BAD_ESCAPE_IS_LITERAL| \
- PCRE2_EXTRA_ESCAPED_CR_IS_LF|PCRE2_EXTRA_ALT_BSUX)
+ PCRE2_EXTRA_ESCAPED_CR_IS_LF|PCRE2_EXTRA_ALT_BSUX| \
+ PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK)
/* Compile time error code numbers. They are given names so that they can more
easily be tracked. When a new number is added, the tables called eint1 and
eint2 in pcre2posix.c may need to be updated, and a new error text must be
-added to compile_error_texts in pcre2_error.c. */
+added to compile_error_texts in pcre2_error.c. Also, the error codes in
+pcre2.h.in must be updated - their values are exactly 100 greater than these
+values. */
enum { ERR0 = COMPILE_ERROR_BASE,
ERR1, ERR2, ERR3, ERR4, ERR5, ERR6, ERR7, ERR8, ERR9, ERR10,
@@ -799,7 +802,7 @@ enum { ERR0 = COMPILE_ERROR_BASE,
ERR61, ERR62, ERR63, ERR64, ERR65, ERR66, ERR67, ERR68, ERR69, ERR70,
ERR71, ERR72, ERR73, ERR74, ERR75, ERR76, ERR77, ERR78, ERR79, ERR80,
ERR81, ERR82, ERR83, ERR84, ERR85, ERR86, ERR87, ERR88, ERR89, ERR90,
- ERR91, ERR92, ERR93, ERR94, ERR95, ERR96, ERR97, ERR98 };
+ ERR91, ERR92, ERR93, ERR94, ERR95, ERR96, ERR97, ERR98, ERR99 };
/* This is a table of start-of-pattern options such as (*UTF) and settings such
as (*LIMIT_MATCH=nnnn) and (*CRLF). For completeness and backward
@@ -1398,32 +1401,47 @@ static BOOL
read_repeat_counts(PCRE2_SPTR *ptrptr, PCRE2_SPTR ptrend, uint32_t *minp,
uint32_t *maxp, int *errorcodeptr)
{
-PCRE2_SPTR p = *ptrptr;
+PCRE2_SPTR p;
BOOL yield = FALSE;
+BOOL had_comma = FALSE;
int32_t min = 0;
int32_t max = REPEAT_UNLIMITED; /* This value is larger than MAX_REPEAT_COUNT */
-/* NB read_number() initializes the error code to zero. The only error is for a
-number that is too big. */
+/* Check the syntax */
+
+*errorcodeptr = 0;
+for (p = *ptrptr;; p++)
+ {
+ uint32_t c;
+ if (p >= ptrend) return FALSE;
+ c = *p;
+ if (IS_DIGIT(c)) continue;
+ if (c == CHAR_RIGHT_CURLY_BRACKET) break;
+ if (c == CHAR_COMMA)
+ {
+ if (had_comma) return FALSE;
+ had_comma = TRUE;
+ }
+ else return FALSE;
+ }
+
+/* The only error from read_number() is for a number that is too big. */
+p = *ptrptr;
if (!read_number(&p, ptrend, -1, MAX_REPEAT_COUNT, ERR5, &min, errorcodeptr))
goto EXIT;
-if (p >= ptrend) goto EXIT;
-
if (*p == CHAR_RIGHT_CURLY_BRACKET)
{
p++;
max = min;
}
-
else
{
- if (*p++ != CHAR_COMMA || p >= ptrend) goto EXIT;
- if (*p != CHAR_RIGHT_CURLY_BRACKET)
+ if (*(++p) != CHAR_RIGHT_CURLY_BRACKET)
{
if (!read_number(&p, ptrend, -1, MAX_REPEAT_COUNT, ERR5, &max,
- errorcodeptr) || p >= ptrend || *p != CHAR_RIGHT_CURLY_BRACKET)
+ errorcodeptr))
goto EXIT;
if (max < min)
{
@@ -1438,11 +1456,10 @@ yield = TRUE;
if (minp != NULL) *minp = (uint32_t)min;
if (maxp != NULL) *maxp = (uint32_t)max;
-/* Update the pattern pointer on success, or after an error, but not when
-the result is "not a repeat quantifier". */
+/* Update the pattern pointer */
EXIT:
-if (yield || *errorcodeptr != 0) *ptrptr = p;
+*ptrptr = p;
return yield;
}
@@ -1776,19 +1793,23 @@ else
{
oldptr = ptr;
ptr--; /* Back to the digit */
- if (!read_number(&ptr, ptrend, -1, INT_MAX/10 - 1, ERR61, &s,
- errorcodeptr))
- break;
- /* \1 to \9 are always back references. \8x and \9x are too; \1x to \7x
+ /* As we know we are at a digit, the only possible error from
+ read_number() is a number that is too large to be a group number. In this
+ case we fall through handle this as not a group reference. If we have
+ read a small enough number, check for a back reference.
+
+ \1 to \9 are always back references. \8x and \9x are too; \1x to \7x
are octal escapes if there are not that many previous captures. */
- if (s < 10 || oldptr[-1] >= CHAR_8 || s <= (int)cb->bracount)
+ if (read_number(&ptr, ptrend, -1, INT_MAX/10 - 1, 0, &s, errorcodeptr) &&
+ (s < 10 || oldptr[-1] >= CHAR_8 || s <= (int)cb->bracount))
{
if (s > (int)MAX_GROUP_NUMBER) *errorcodeptr = ERR61;
else escape = -s; /* Indicates a back reference */
break;
}
+
ptr = oldptr; /* Put the pointer back and fall through */
}
@@ -7781,6 +7802,16 @@ for (;; pptr++)
}
#endif
+ /* \K is forbidden in lookarounds since 10.38 because that's what Perl has
+ done. However, there's an option, in case anyone was relying on it. */
+
+ if (cb->assert_depth > 0 && meta_arg == ESC_K &&
+ (cb->cx->extra_options & PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK) == 0)
+ {
+ *errorcodeptr = ERR99;
+ return 0;
+ }
+
/* For the rest (including \X when Unicode is supported - if not it's
faulted at parse time), the OP value is the escape value when PCRE2_UCP is
not set; if it is set, these escapes do not show up here because they are
@@ -9130,7 +9161,7 @@ for (;; pptr++)
case META_LOOKAHEAD:
case META_LOOKAHEADNOT:
case META_LOOKAHEAD_NA:
- *errcodeptr = check_lookbehinds(pptr + 1, &pptr, recurses, cb);
+ *errcodeptr = check_lookbehinds(pptr + 1, &pptr, recurses, cb, lcptr);
if (*errcodeptr != 0) return -1;
/* Ignore any qualifiers that follow a lookahead assertion. */
@@ -9470,16 +9501,16 @@ Arguments
retptr if not NULL, return the ket pointer here
recurses chain of recurse_check to catch mutual recursion
cb points to the compile block
+ lcptr points to loop counter
Returns: 0 on success, or an errorcode (cb->erroroffset will be set)
*/
static int
check_lookbehinds(uint32_t *pptr, uint32_t **retptr,
- parsed_recurse_check *recurses, compile_block *cb)
+ parsed_recurse_check *recurses, compile_block *cb, int *lcptr)
{
int errorcode = 0;
-int loopcount = 0;
int nestlevel = 0;
cb->erroroffset = PCRE2_UNSET;
@@ -9605,7 +9636,7 @@ for (; *pptr != META_END; pptr++)
case META_LOOKBEHIND:
case META_LOOKBEHINDNOT:
case META_LOOKBEHIND_NA:
- if (!set_lookbehind_lengths(&pptr, &errorcode, &loopcount, recurses, cb))
+ if (!set_lookbehind_lengths(&pptr, &errorcode, lcptr, recurses, cb))
return errorcode;
break;
}
@@ -10060,7 +10091,8 @@ lengths. */
if (has_lookbehind)
{
- errorcode = check_lookbehinds(cb.parsed_pattern, NULL, NULL, &cb);
+ int loopcount = 0;
+ errorcode = check_lookbehinds(cb.parsed_pattern, NULL, NULL, &cb, &loopcount);
if (errorcode != 0) goto HAD_CB_ERROR;
}
diff --git a/thirdparty/pcre2/src/pcre2_dfa_match.c b/thirdparty/pcre2/src/pcre2_dfa_match.c
index 625695b7cb..060dc7669a 100644
--- a/thirdparty/pcre2/src/pcre2_dfa_match.c
+++ b/thirdparty/pcre2/src/pcre2_dfa_match.c
@@ -7,7 +7,7 @@ and semantics are as close as possible to those of the Perl 5 language.
Written by Philip Hazel
Original API code Copyright (c) 1997-2012 University of Cambridge
- New API code Copyright (c) 2016-2020 University of Cambridge
+ New API code Copyright (c) 2016-2021 University of Cambridge
-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
@@ -3256,8 +3256,8 @@ BOOL has_first_cu = FALSE;
BOOL has_req_cu = FALSE;
#if PCRE2_CODE_UNIT_WIDTH == 8
-BOOL memchr_not_found_first_cu = FALSE;
-BOOL memchr_not_found_first_cu2 = FALSE;
+PCRE2_SPTR memchr_found_first_cu = NULL;
+PCRE2_SPTR memchr_found_first_cu2 = NULL;
#endif
PCRE2_UCHAR first_cu = 0;
@@ -3648,13 +3648,7 @@ for (;;)
}
}
- /* Not anchored. Advance to a unique first code unit if there is one. In
- 8-bit mode, the use of memchr() gives a big speed up, even though we have
- to call it twice in caseless mode, in order to find the earliest occurrence
- of the character in either of its cases. If a call to memchr() that
- searches the rest of the subject fails to find one case, remember that in
- order not to keep on repeating the search. This can make a huge difference
- when the strings are very long and only one case is present. */
+ /* Not anchored. Advance to a unique first code unit if there is one. */
else
{
@@ -3662,43 +3656,68 @@ for (;;)
{
if (first_cu != first_cu2) /* Caseless */
{
+ /* In 16-bit and 32_bit modes we have to do our own search, so can
+ look for both cases at once. */
+
#if PCRE2_CODE_UNIT_WIDTH != 8
PCRE2_UCHAR smc;
while (start_match < end_subject &&
(smc = UCHAR21TEST(start_match)) != first_cu &&
- smc != first_cu2)
+ smc != first_cu2)
start_match++;
+#else
+ /* In 8-bit mode, the use of memchr() gives a big speed up, even
+ though we have to call it twice in order to find the earliest
+ occurrence of the code unit in either of its cases. Caching is used
+ to remember the positions of previously found code units. This can
+ make a huge difference when the strings are very long and only one
+ case is actually present. */
-#else /* 8-bit code units */
PCRE2_SPTR pp1 = NULL;
PCRE2_SPTR pp2 = NULL;
- PCRE2_SIZE cu2size = end_subject - start_match;
+ PCRE2_SIZE searchlength = end_subject - start_match;
- if (!memchr_not_found_first_cu)
+ /* If we haven't got a previously found position for first_cu, or if
+ the current starting position is later, we need to do a search. If
+ the code unit is not found, set it to the end. */
+
+ if (memchr_found_first_cu == NULL ||
+ start_match > memchr_found_first_cu)
{
- pp1 = memchr(start_match, first_cu, end_subject - start_match);
- if (pp1 == NULL) memchr_not_found_first_cu = TRUE;
- else cu2size = pp1 - start_match;
+ pp1 = memchr(start_match, first_cu, searchlength);
+ memchr_found_first_cu = (pp1 == NULL)? end_subject : pp1;
}
- /* If pp1 is not NULL, we have arranged to search only as far as pp1,
- to see if the other case is earlier, so we can set "not found" only
- when both searches have returned NULL. */
+ /* If the start is before a previously found position, use the
+ previous position, or NULL if a previous search failed. */
+
+ else pp1 = (memchr_found_first_cu == end_subject)? NULL :
+ memchr_found_first_cu;
- if (!memchr_not_found_first_cu2)
+ /* Do the same thing for the other case. */
+
+ if (memchr_found_first_cu2 == NULL ||
+ start_match > memchr_found_first_cu2)
{
- pp2 = memchr(start_match, first_cu2, cu2size);
- memchr_not_found_first_cu2 = (pp2 == NULL && pp1 == NULL);
+ pp2 = memchr(start_match, first_cu2, searchlength);
+ memchr_found_first_cu2 = (pp2 == NULL)? end_subject : pp2;
}
+ else pp2 = (memchr_found_first_cu2 == end_subject)? NULL :
+ memchr_found_first_cu2;
+
+ /* Set the start to the end of the subject if neither case was found.
+ Otherwise, use the earlier found point. */
+
if (pp1 == NULL)
start_match = (pp2 == NULL)? end_subject : pp2;
else
start_match = (pp2 == NULL || pp1 < pp2)? pp1 : pp2;
-#endif
+
+#endif /* 8-bit handling */
}
- /* The caseful case */
+ /* The caseful case is much simpler. */
else
{
diff --git a/thirdparty/pcre2/src/pcre2_error.c b/thirdparty/pcre2/src/pcre2_error.c
index c61648cb7f..3dee63d0db 100644
--- a/thirdparty/pcre2/src/pcre2_error.c
+++ b/thirdparty/pcre2/src/pcre2_error.c
@@ -7,7 +7,7 @@ and semantics are as close as possible to those of the Perl 5 language.
Written by Philip Hazel
Original API code Copyright (c) 1997-2012 University of Cambridge
- New API code Copyright (c) 2016-2019 University of Cambridge
+ New API code Copyright (c) 2016-2021 University of Cambridge
-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
@@ -186,6 +186,7 @@ static const unsigned char compile_error_texts[] =
"script runs require Unicode support, which this version of PCRE2 does not have\0"
"too many capturing groups (maximum 65535)\0"
"atomic assertion expected after (?( or (?(?C)\0"
+ "\\K is not allowed in lookarounds (but see PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK)\0"
;
/* Match-time and UTF error texts are in the same format. */
diff --git a/thirdparty/pcre2/src/pcre2_jit_compile.c b/thirdparty/pcre2/src/pcre2_jit_compile.c
index 1977d28aa5..db2ce65598 100644
--- a/thirdparty/pcre2/src/pcre2_jit_compile.c
+++ b/thirdparty/pcre2/src/pcre2_jit_compile.c
@@ -1226,7 +1226,7 @@ while (cc < ccend)
return TRUE;
}
-#define EARLY_FAIL_ENHANCE_MAX (1 + 1)
+#define EARLY_FAIL_ENHANCE_MAX (1 + 3)
/*
start:
@@ -1236,23 +1236,28 @@ start:
return: current number of iterators enhanced with fast fail
*/
-static int detect_early_fail(compiler_common *common, PCRE2_SPTR cc, int *private_data_start, sljit_s32 depth, int start)
+static int detect_early_fail(compiler_common *common, PCRE2_SPTR cc, int *private_data_start,
+ sljit_s32 depth, int start, BOOL fast_forward_allowed)
{
+PCRE2_SPTR begin = cc;
PCRE2_SPTR next_alt;
PCRE2_SPTR end;
PCRE2_SPTR accelerated_start;
+BOOL prev_fast_forward_allowed;
int result = 0;
int count;
-BOOL fast_forward_allowed = TRUE;
SLJIT_ASSERT(*cc == OP_ONCE || *cc == OP_BRA || *cc == OP_CBRA);
SLJIT_ASSERT(*cc != OP_CBRA || common->optimized_cbracket[GET2(cc, 1 + LINK_SIZE)] != 0);
SLJIT_ASSERT(start < EARLY_FAIL_ENHANCE_MAX);
+next_alt = cc + GET(cc, 1);
+if (*next_alt == OP_ALT)
+ fast_forward_allowed = FALSE;
+
do
{
count = start;
- next_alt = cc + GET(cc, 1);
cc += 1 + LINK_SIZE + ((*cc == OP_CBRA) ? IMM2_SIZE : 0);
while (TRUE)
@@ -1475,31 +1480,20 @@ do
case OP_CBRA:
end = cc + GET(cc, 1);
- if (*end == OP_KET && PRIVATE_DATA(end) == 0)
- {
- if (*cc == OP_CBRA)
- {
- if (common->optimized_cbracket[GET2(cc, 1 + LINK_SIZE)] == 0)
- break;
- cc += IMM2_SIZE;
- }
-
- cc += 1 + LINK_SIZE;
- continue;
- }
-
+ prev_fast_forward_allowed = fast_forward_allowed;
fast_forward_allowed = FALSE;
if (depth >= 4)
break;
end = bracketend(cc) - (1 + LINK_SIZE);
- if (*end != OP_KET || PRIVATE_DATA(end) != 0)
+ if (*end != OP_KET || (*cc == OP_CBRA && common->optimized_cbracket[GET2(cc, 1 + LINK_SIZE)] == 0))
break;
- if (*cc == OP_CBRA && common->optimized_cbracket[GET2(cc, 1 + LINK_SIZE)] == 0)
- break;
+ count = detect_early_fail(common, cc, private_data_start, depth + 1, count, prev_fast_forward_allowed);
+
+ if (PRIVATE_DATA(cc) != 0)
+ common->private_data_ptrs[begin - common->start] = 1;
- count = detect_early_fail(common, cc, private_data_start, depth + 1, count);
if (count < EARLY_FAIL_ENHANCE_MAX)
{
cc = end + (1 + LINK_SIZE);
@@ -1521,7 +1515,7 @@ do
{
count++;
- if (fast_forward_allowed && *next_alt == OP_KET)
+ if (fast_forward_allowed)
{
common->fast_forward_bc_ptr = accelerated_start;
common->private_data_ptrs[(accelerated_start + 1) - common->start] = ((*private_data_start) << 3) | type_skip;
@@ -1555,6 +1549,8 @@ do
return EARLY_FAIL_ENHANCE_MAX;
}
+ /* Cannot be part of a repeat. */
+ common->private_data_ptrs[begin - common->start] = 1;
count++;
if (count < EARLY_FAIL_ENHANCE_MAX)
@@ -1569,8 +1565,8 @@ do
else if (result < count)
result = count;
- fast_forward_allowed = FALSE;
cc = next_alt;
+ next_alt = cc + GET(cc, 1);
}
while (*cc == OP_ALT);
@@ -1620,11 +1616,12 @@ sljit_sw length = end - begin;
sljit_s32 min, max, i;
/* Detect fixed iterations first. */
-if (end[-(1 + LINK_SIZE)] != OP_KET)
+if (end[-(1 + LINK_SIZE)] != OP_KET || PRIVATE_DATA(begin) != 0)
return FALSE;
-/* Already detected repeat. */
-if (common->private_data_ptrs[end - common->start - LINK_SIZE] != 0)
+/* /(?:AB){4,6}/ is currently converted to /(?:AB){3}(?AB){1,3}/
+ * Skip the check of the second part. */
+if (PRIVATE_DATA(end - LINK_SIZE) == 0)
return TRUE;
next = end;
@@ -1763,6 +1760,7 @@ while (cc < ccend)
if (private_data_ptr > SLJIT_MAX_LOCAL_SIZE)
break;
+ /* When the bracket is prefixed by a zero iteration, skip the repeat check (at this point). */
if (repeat_check && (*cc == OP_ONCE || *cc == OP_BRA || *cc == OP_CBRA || *cc == OP_COND))
{
if (detect_repeat(common, cc))
@@ -1813,6 +1811,7 @@ while (cc < ccend)
case OP_COND:
/* Might be a hidden SCOND. */
+ common->private_data_ptrs[cc - common->start] = 0;
alternative = cc + GET(cc, 1);
if (*alternative == OP_KETRMAX || *alternative == OP_KETRMIN)
{
@@ -4203,9 +4202,6 @@ TMP2 is not used. Otherwise TMP2 must contain the start of the subject buffer,
and it is destroyed. Does not modify STR_PTR for invalid character sequences. */
DEFINE_COMPILER;
-SLJIT_UNUSED_ARG(backtracks);
-SLJIT_UNUSED_ARG(must_be_valid);
-
#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32
struct sljit_jump *jump;
#endif
@@ -4279,6 +4275,10 @@ if (common->invalid_utf && !must_be_valid)
}
#endif /* PCRE2_CODE_UNIT_WIDTH == [8|16|32] */
#endif /* SUPPORT_UNICODE */
+
+SLJIT_UNUSED_ARG(backtracks);
+SLJIT_UNUSED_ARG(must_be_valid);
+
OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));
}
@@ -8141,7 +8141,7 @@ switch(type)
}
else
OP2(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_UNUSED, 0, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, options), SLJIT_IMM, PCRE2_NOTEOL);
- add_jump(compiler, backtracks, JUMP(SLJIT_NOT_ZERO32));
+ add_jump(compiler, backtracks, JUMP(SLJIT_NOT_ZERO));
if (!common->endonly)
compile_simple_assertion_matchingpath(common, OP_EODN, cc, backtracks);
@@ -8161,7 +8161,7 @@ switch(type)
}
else
OP2(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_UNUSED, 0, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, options), SLJIT_IMM, PCRE2_NOTEOL);
- add_jump(compiler, backtracks, JUMP(SLJIT_NOT_ZERO32));
+ add_jump(compiler, backtracks, JUMP(SLJIT_NOT_ZERO));
check_partial(common, FALSE);
jump[0] = JUMP(SLJIT_JUMP);
JUMPHERE(jump[1]);
@@ -8201,14 +8201,14 @@ switch(type)
OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(TMP2), SLJIT_OFFSETOF(jit_arguments, begin));
add_jump(compiler, backtracks, CMP(SLJIT_GREATER, STR_PTR, 0, TMP1, 0));
OP2(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_UNUSED, 0, SLJIT_MEM1(TMP2), SLJIT_OFFSETOF(jit_arguments, options), SLJIT_IMM, PCRE2_NOTBOL);
- add_jump(compiler, backtracks, JUMP(SLJIT_NOT_ZERO32));
+ add_jump(compiler, backtracks, JUMP(SLJIT_NOT_ZERO));
}
else
{
OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, begin));
add_jump(compiler, backtracks, CMP(SLJIT_GREATER, STR_PTR, 0, TMP1, 0));
OP2(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_UNUSED, 0, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, options), SLJIT_IMM, PCRE2_NOTBOL);
- add_jump(compiler, backtracks, JUMP(SLJIT_NOT_ZERO32));
+ add_jump(compiler, backtracks, JUMP(SLJIT_NOT_ZERO));
}
return cc;
@@ -8227,7 +8227,7 @@ switch(type)
jump[1] = CMP(SLJIT_GREATER, STR_PTR, 0, TMP2, 0);
OP2(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_UNUSED, 0, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, options), SLJIT_IMM, PCRE2_NOTBOL);
}
- add_jump(compiler, backtracks, JUMP(SLJIT_NOT_ZERO32));
+ add_jump(compiler, backtracks, JUMP(SLJIT_NOT_ZERO));
jump[0] = JUMP(SLJIT_JUMP);
JUMPHERE(jump[1]);
@@ -9581,11 +9581,11 @@ free_stack(common, callout_arg_size);
/* Check return value. */
OP2(SLJIT_SUB32 | SLJIT_SET_Z | SLJIT_SET_SIG_GREATER, SLJIT_UNUSED, 0, SLJIT_RETURN_REG, 0, SLJIT_IMM, 0);
-add_jump(compiler, &backtrack->topbacktracks, JUMP(SLJIT_SIG_GREATER32));
+add_jump(compiler, &backtrack->topbacktracks, JUMP(SLJIT_SIG_GREATER));
if (common->abort_label == NULL)
- add_jump(compiler, &common->abort, JUMP(SLJIT_NOT_EQUAL32) /* SIG_LESS */);
+ add_jump(compiler, &common->abort, JUMP(SLJIT_NOT_EQUAL) /* SIG_LESS */);
else
- JUMPTO(SLJIT_NOT_EQUAL32 /* SIG_LESS */, common->abort_label);
+ JUMPTO(SLJIT_NOT_EQUAL /* SIG_LESS */, common->abort_label);
return cc + callout_length;
}
@@ -11232,7 +11232,7 @@ early_fail_type = (early_fail_ptr & 0x7);
early_fail_ptr >>= 3;
/* During recursion, these optimizations are disabled. */
-if (common->early_fail_start_ptr == 0)
+if (common->early_fail_start_ptr == 0 && common->fast_forward_bc_ptr == NULL)
{
early_fail_ptr = 0;
early_fail_type = type_skip;
@@ -13661,9 +13661,11 @@ if (!common->private_data_ptrs)
memset(common->private_data_ptrs, 0, total_length * sizeof(sljit_s32));
private_data_size = common->cbra_ptr + (re->top_bracket + 1) * sizeof(sljit_sw);
-set_private_data_ptrs(common, &private_data_size, ccend);
+
if ((re->overall_options & PCRE2_ANCHORED) == 0 && (re->overall_options & PCRE2_NO_START_OPTIMIZE) == 0 && !common->has_skip_in_assert_back)
- detect_early_fail(common, common->start, &private_data_size, 0, 0);
+ detect_early_fail(common, common->start, &private_data_size, 0, 0, TRUE);
+
+set_private_data_ptrs(common, &private_data_size, ccend);
SLJIT_ASSERT(common->early_fail_start_ptr <= common->early_fail_end_ptr);
@@ -14130,6 +14132,10 @@ PCRE2_EXP_DEFN int PCRE2_CALL_CONVENTION
pcre2_jit_compile(pcre2_code *code, uint32_t options)
{
pcre2_real_code *re = (pcre2_real_code *)code;
+#ifdef SUPPORT_JIT
+executable_functions *functions;
+static int executable_allocator_is_working = 0;
+#endif
if (code == NULL)
return PCRE2_ERROR_NULL;
@@ -14164,8 +14170,7 @@ actions are needed:
*/
#ifdef SUPPORT_JIT
-executable_functions *functions = (executable_functions *)re->executable_jit;
-static int executable_allocator_is_working = 0;
+functions = (executable_functions *)re->executable_jit;
#endif
if ((options & PCRE2_JIT_INVALID_UTF) != 0)
diff --git a/thirdparty/pcre2/src/pcre2_jit_simd_inc.h b/thirdparty/pcre2/src/pcre2_jit_simd_inc.h
index 5673d338c0..aa029cce38 100644
--- a/thirdparty/pcre2/src/pcre2_jit_simd_inc.h
+++ b/thirdparty/pcre2/src/pcre2_jit_simd_inc.h
@@ -39,7 +39,29 @@ POSSIBILITY OF SUCH DAMAGE.
-----------------------------------------------------------------------------
*/
-#if (defined SLJIT_CONFIG_X86 && SLJIT_CONFIG_X86) && !(defined SUPPORT_VALGRIND)
+#if !(defined SUPPORT_VALGRIND)
+
+#if ((defined SLJIT_CONFIG_X86 && SLJIT_CONFIG_X86) \
+ || (defined SLJIT_CONFIG_S390X && SLJIT_CONFIG_S390X))
+
+typedef enum {
+ vector_compare_match1,
+ vector_compare_match1i,
+ vector_compare_match2,
+} vector_compare_type;
+
+static SLJIT_INLINE sljit_u32 max_fast_forward_char_pair_offset(void)
+{
+#if PCRE2_CODE_UNIT_WIDTH == 8
+return 15;
+#elif PCRE2_CODE_UNIT_WIDTH == 16
+return 7;
+#elif PCRE2_CODE_UNIT_WIDTH == 32
+return 3;
+#else
+#error "Unsupported unit width"
+#endif
+}
#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32
static struct sljit_jump *jump_if_utf_char_start(struct sljit_compiler *compiler, sljit_s32 reg)
@@ -56,6 +78,10 @@ return CMP(SLJIT_NOT_EQUAL, reg, 0, SLJIT_IMM, 0xdc00);
}
#endif
+#endif /* SLJIT_CONFIG_X86 || SLJIT_CONFIG_S390X */
+
+#if (defined SLJIT_CONFIG_X86 && SLJIT_CONFIG_X86)
+
static sljit_s32 character_to_int32(PCRE2_UCHAR chr)
{
sljit_u32 value = chr;
@@ -97,13 +123,7 @@ instruction[4] = (sljit_u8)offset;
sljit_emit_op_custom(compiler, instruction, 5);
}
-typedef enum {
- sse2_compare_match1,
- sse2_compare_match1i,
- sse2_compare_match2,
-} sse2_compare_type;
-
-static void fast_forward_char_pair_sse2_compare(struct sljit_compiler *compiler, sse2_compare_type compare_type,
+static void fast_forward_char_pair_sse2_compare(struct sljit_compiler *compiler, vector_compare_type compare_type,
int step, sljit_s32 dst_ind, sljit_s32 cmp1_ind, sljit_s32 cmp2_ind, sljit_s32 tmp_ind)
{
sljit_u8 instruction[4];
@@ -112,11 +132,11 @@ instruction[1] = 0x0f;
SLJIT_ASSERT(step >= 0 && step <= 3);
-if (compare_type != sse2_compare_match2)
+if (compare_type != vector_compare_match2)
{
if (step == 0)
{
- if (compare_type == sse2_compare_match1i)
+ if (compare_type == vector_compare_match1i)
{
/* POR xmm1, xmm2/m128 */
/* instruction[0] = 0x66; */
@@ -185,14 +205,14 @@ switch (step)
static void fast_forward_char_simd(compiler_common *common, PCRE2_UCHAR char1, PCRE2_UCHAR char2, sljit_s32 offset)
{
DEFINE_COMPILER;
+sljit_u8 instruction[8];
struct sljit_label *start;
#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32
struct sljit_label *restart;
#endif
struct sljit_jump *quit;
struct sljit_jump *partial_quit[2];
-sse2_compare_type compare_type = sse2_compare_match1;
-sljit_u8 instruction[8];
+vector_compare_type compare_type = vector_compare_match1;
sljit_s32 tmp1_reg_ind = sljit_get_register_index(TMP1);
sljit_s32 str_ptr_reg_ind = sljit_get_register_index(STR_PTR);
sljit_s32 data_ind = 0;
@@ -207,12 +227,12 @@ SLJIT_UNUSED_ARG(offset);
if (char1 != char2)
{
bit = char1 ^ char2;
- compare_type = sse2_compare_match1i;
+ compare_type = vector_compare_match1i;
if (!is_powerof2(bit))
{
bit = 0;
- compare_type = sse2_compare_match2;
+ compare_type = vector_compare_match2;
}
}
@@ -349,11 +369,11 @@ if (common->utf && offset > 0)
static jump_list *fast_requested_char_simd(compiler_common *common, PCRE2_UCHAR char1, PCRE2_UCHAR char2)
{
DEFINE_COMPILER;
+sljit_u8 instruction[8];
struct sljit_label *start;
struct sljit_jump *quit;
jump_list *not_found = NULL;
-sse2_compare_type compare_type = sse2_compare_match1;
-sljit_u8 instruction[8];
+vector_compare_type compare_type = vector_compare_match1;
sljit_s32 tmp1_reg_ind = sljit_get_register_index(TMP1);
sljit_s32 str_ptr_reg_ind = sljit_get_register_index(STR_PTR);
sljit_s32 data_ind = 0;
@@ -366,12 +386,12 @@ int i;
if (char1 != char2)
{
bit = char1 ^ char2;
- compare_type = sse2_compare_match1i;
+ compare_type = vector_compare_match1i;
if (!is_powerof2(bit))
{
bit = 0;
- compare_type = sse2_compare_match2;
+ compare_type = vector_compare_match2;
}
}
@@ -476,27 +496,15 @@ return not_found;
#ifndef _WIN64
-static SLJIT_INLINE sljit_u32 max_fast_forward_char_pair_offset(void)
-{
-#if PCRE2_CODE_UNIT_WIDTH == 8
-return 15;
-#elif PCRE2_CODE_UNIT_WIDTH == 16
-return 7;
-#elif PCRE2_CODE_UNIT_WIDTH == 32
-return 3;
-#else
-#error "Unsupported unit width"
-#endif
-}
-
#define JIT_HAS_FAST_FORWARD_CHAR_PAIR_SIMD (sljit_has_cpu_feature(SLJIT_HAS_SSE2))
static void fast_forward_char_pair_simd(compiler_common *common, sljit_s32 offs1,
PCRE2_UCHAR char1a, PCRE2_UCHAR char1b, sljit_s32 offs2, PCRE2_UCHAR char2a, PCRE2_UCHAR char2b)
{
DEFINE_COMPILER;
-sse2_compare_type compare1_type = sse2_compare_match1;
-sse2_compare_type compare2_type = sse2_compare_match1;
+sljit_u8 instruction[8];
+vector_compare_type compare1_type = vector_compare_match1;
+vector_compare_type compare2_type = vector_compare_match1;
sljit_u32 bit1 = 0;
sljit_u32 bit2 = 0;
sljit_u32 diff = IN_UCHARS(offs1 - offs2);
@@ -516,7 +524,6 @@ struct sljit_label *start;
struct sljit_label *restart;
#endif
struct sljit_jump *jump[2];
-sljit_u8 instruction[8];
int i;
SLJIT_ASSERT(common->mode == PCRE2_JIT_COMPLETE && offs1 > offs2);
@@ -549,13 +556,13 @@ else
bit1 = char1a ^ char1b;
if (is_powerof2(bit1))
{
- compare1_type = sse2_compare_match1i;
+ compare1_type = vector_compare_match1i;
OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, character_to_int32(char1a | bit1));
OP1(SLJIT_MOV, TMP2, 0, SLJIT_IMM, character_to_int32(bit1));
}
else
{
- compare1_type = sse2_compare_match2;
+ compare1_type = vector_compare_match2;
bit1 = 0;
OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, character_to_int32(char1a));
OP1(SLJIT_MOV, TMP2, 0, SLJIT_IMM, character_to_int32(char1b));
@@ -578,13 +585,13 @@ else
bit2 = char2a ^ char2b;
if (is_powerof2(bit2))
{
- compare2_type = sse2_compare_match1i;
+ compare2_type = vector_compare_match1i;
OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, character_to_int32(char2a | bit2));
OP1(SLJIT_MOV, TMP2, 0, SLJIT_IMM, character_to_int32(bit2));
}
else
{
- compare2_type = sse2_compare_match2;
+ compare2_type = vector_compare_match2;
bit2 = 0;
OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, character_to_int32(char2a));
OP1(SLJIT_MOV, TMP2, 0, SLJIT_IMM, character_to_int32(char2b));
@@ -731,9 +738,6 @@ OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP1, 0);
add_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0));
-if (common->match_end_ptr != 0)
- OP1(SLJIT_MOV, STR_END, 0, SLJIT_MEM1(SLJIT_SP), common->match_end_ptr);
-
#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32
if (common->utf)
{
@@ -760,7 +764,7 @@ if (common->match_end_ptr != 0)
#undef SSE2_COMPARE_TYPE_INDEX
-#endif /* SLJIT_CONFIG_X86 && !SUPPORT_VALGRIND */
+#endif /* SLJIT_CONFIG_X86 */
#if (defined SLJIT_CONFIG_ARM_64 && SLJIT_CONFIG_ARM_64 && (defined __ARM_NEON || defined __ARM_NEON__))
@@ -1121,3 +1125,734 @@ JUMPHERE(partial_quit);
}
#endif /* SLJIT_CONFIG_ARM_64 && SLJIT_CONFIG_ARM_64 */
+
+#if (defined SLJIT_CONFIG_S390X && SLJIT_CONFIG_S390X)
+
+#if PCRE2_CODE_UNIT_WIDTH == 8
+#define VECTOR_ELEMENT_SIZE 0
+#elif PCRE2_CODE_UNIT_WIDTH == 16
+#define VECTOR_ELEMENT_SIZE 1
+#elif PCRE2_CODE_UNIT_WIDTH == 32
+#define VECTOR_ELEMENT_SIZE 2
+#else
+#error "Unsupported unit width"
+#endif
+
+static void load_from_mem_vector(struct sljit_compiler *compiler, BOOL vlbb, sljit_s32 dst_vreg,
+ sljit_s32 base_reg, sljit_s32 index_reg)
+{
+sljit_u16 instruction[3];
+
+instruction[0] = (sljit_u16)(0xe700 | (dst_vreg << 4) | index_reg);
+instruction[1] = (sljit_u16)(base_reg << 12);
+instruction[2] = (sljit_u16)((0x8 << 8) | (vlbb ? 0x07 : 0x06));
+
+sljit_emit_op_custom(compiler, instruction, 6);
+}
+
+#if PCRE2_CODE_UNIT_WIDTH == 32
+
+static void replicate_imm_vector(struct sljit_compiler *compiler, int step, sljit_s32 dst_vreg,
+ PCRE2_UCHAR chr, sljit_s32 tmp_general_reg)
+{
+sljit_u16 instruction[3];
+
+SLJIT_ASSERT(step >= 0 && step <= 1);
+
+if (chr < 0x7fff)
+ {
+ if (step == 1)
+ return;
+
+ /* VREPI */
+ instruction[0] = (sljit_u16)(0xe700 | (dst_vreg << 4));
+ instruction[1] = (sljit_u16)chr;
+ instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0x8 << 8) | 0x45);
+ sljit_emit_op_custom(compiler, instruction, 6);
+ return;
+ }
+
+if (step == 0)
+ {
+ OP1(SLJIT_MOV, tmp_general_reg, 0, SLJIT_IMM, chr);
+
+ /* VLVG */
+ instruction[0] = (sljit_u16)(0xe700 | (dst_vreg << 4) | sljit_get_register_index(tmp_general_reg));
+ instruction[1] = 0;
+ instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0x8 << 8) | 0x22);
+ sljit_emit_op_custom(compiler, instruction, 6);
+ return;
+ }
+
+/* VREP */
+instruction[0] = (sljit_u16)(0xe700 | (dst_vreg << 4) | dst_vreg);
+instruction[1] = 0;
+instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0xc << 8) | 0x4d);
+sljit_emit_op_custom(compiler, instruction, 6);
+}
+
+#endif
+
+static void fast_forward_char_pair_sse2_compare(struct sljit_compiler *compiler, vector_compare_type compare_type,
+ int step, sljit_s32 dst_ind, sljit_s32 cmp1_ind, sljit_s32 cmp2_ind, sljit_s32 tmp_ind)
+{
+sljit_u16 instruction[3];
+
+SLJIT_ASSERT(step >= 0 && step <= 2);
+
+if (step == 1)
+ {
+ /* VCEQ */
+ instruction[0] = (sljit_u16)(0xe700 | (dst_ind << 4) | dst_ind);
+ instruction[1] = (sljit_u16)(cmp1_ind << 12);
+ instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0xe << 8) | 0xf8);
+ sljit_emit_op_custom(compiler, instruction, 6);
+ return;
+ }
+
+if (compare_type != vector_compare_match2)
+ {
+ if (step == 0 && compare_type == vector_compare_match1i)
+ {
+ /* VO */
+ instruction[0] = (sljit_u16)(0xe700 | (dst_ind << 4) | dst_ind);
+ instruction[1] = (sljit_u16)(cmp2_ind << 12);
+ instruction[2] = (sljit_u16)((0xe << 8) | 0x6a);
+ sljit_emit_op_custom(compiler, instruction, 6);
+ }
+ return;
+ }
+
+switch (step)
+ {
+ case 0:
+ /* VCEQ */
+ instruction[0] = (sljit_u16)(0xe700 | (tmp_ind << 4) | dst_ind);
+ instruction[1] = (sljit_u16)(cmp2_ind << 12);
+ instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0xe << 8) | 0xf8);
+ sljit_emit_op_custom(compiler, instruction, 6);
+ return;
+
+ case 2:
+ /* VO */
+ instruction[0] = (sljit_u16)(0xe700 | (dst_ind << 4) | dst_ind);
+ instruction[1] = (sljit_u16)(tmp_ind << 12);
+ instruction[2] = (sljit_u16)((0xe << 8) | 0x6a);
+ sljit_emit_op_custom(compiler, instruction, 6);
+ return;
+ }
+}
+
+#define JIT_HAS_FAST_FORWARD_CHAR_SIMD 1
+
+static void fast_forward_char_simd(compiler_common *common, PCRE2_UCHAR char1, PCRE2_UCHAR char2, sljit_s32 offset)
+{
+DEFINE_COMPILER;
+sljit_u16 instruction[3];
+struct sljit_label *start;
+#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32
+struct sljit_label *restart;
+#endif
+struct sljit_jump *quit;
+struct sljit_jump *partial_quit[2];
+vector_compare_type compare_type = vector_compare_match1;
+sljit_s32 tmp1_reg_ind = sljit_get_register_index(TMP1);
+sljit_s32 str_ptr_reg_ind = sljit_get_register_index(STR_PTR);
+sljit_s32 data_ind = 0;
+sljit_s32 tmp_ind = 1;
+sljit_s32 cmp1_ind = 2;
+sljit_s32 cmp2_ind = 3;
+sljit_s32 zero_ind = 4;
+sljit_u32 bit = 0;
+int i;
+
+SLJIT_UNUSED_ARG(offset);
+
+if (char1 != char2)
+ {
+ bit = char1 ^ char2;
+ compare_type = vector_compare_match1i;
+
+ if (!is_powerof2(bit))
+ {
+ bit = 0;
+ compare_type = vector_compare_match2;
+ }
+ }
+
+partial_quit[0] = CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0);
+if (common->mode == PCRE2_JIT_COMPLETE)
+ add_jump(compiler, &common->failed_match, partial_quit[0]);
+
+/* First part (unaligned start) */
+
+OP2(SLJIT_ADD, TMP2, 0, STR_PTR, 0, SLJIT_IMM, 16);
+
+#if PCRE2_CODE_UNIT_WIDTH != 32
+
+/* VREPI */
+instruction[0] = (sljit_u16)(0xe700 | (cmp1_ind << 4));
+instruction[1] = (sljit_u16)(char1 | bit);
+instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0x8 << 8) | 0x45);
+sljit_emit_op_custom(compiler, instruction, 6);
+
+if (char1 != char2)
+ {
+ /* VREPI */
+ instruction[0] = (sljit_u16)(0xe700 | (cmp2_ind << 4));
+ instruction[1] = (sljit_u16)(bit != 0 ? bit : char2);
+ /* instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0x8 << 8) | 0x45); */
+ sljit_emit_op_custom(compiler, instruction, 6);
+ }
+
+#else /* PCRE2_CODE_UNIT_WIDTH == 32 */
+
+for (int i = 0; i < 2; i++)
+ {
+ replicate_imm_vector(compiler, i, cmp1_ind, char1 | bit, TMP1);
+
+ if (char1 != char2)
+ replicate_imm_vector(compiler, i, cmp2_ind, bit != 0 ? bit : char2, TMP1);
+ }
+
+#endif /* PCRE2_CODE_UNIT_WIDTH != 32 */
+
+if (compare_type == vector_compare_match2)
+ {
+ /* VREPI */
+ instruction[0] = (sljit_u16)(0xe700 | (zero_ind << 4));
+ instruction[1] = 0;
+ instruction[2] = (sljit_u16)((0x8 << 8) | 0x45);
+ sljit_emit_op_custom(compiler, instruction, 6);
+ }
+
+#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32
+restart = LABEL();
+#endif
+
+load_from_mem_vector(compiler, TRUE, data_ind, str_ptr_reg_ind, 0);
+OP2(SLJIT_AND, TMP2, 0, TMP2, 0, SLJIT_IMM, ~15);
+
+if (compare_type != vector_compare_match2)
+ {
+ if (compare_type == vector_compare_match1i)
+ fast_forward_char_pair_sse2_compare(compiler, compare_type, 0, data_ind, cmp1_ind, cmp2_ind, tmp_ind);
+
+ /* VFEE */
+ instruction[0] = (sljit_u16)(0xe700 | (data_ind << 4) | data_ind);
+ instruction[1] = (sljit_u16)((cmp1_ind << 12) | (1 << 4));
+ instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0xe << 8) | 0x80);
+ sljit_emit_op_custom(compiler, instruction, 6);
+ }
+else
+ {
+ for (i = 0; i < 3; i++)
+ fast_forward_char_pair_sse2_compare(compiler, compare_type, i, data_ind, cmp1_ind, cmp2_ind, tmp_ind);
+
+ /* VFENE */
+ instruction[0] = (sljit_u16)(0xe700 | (data_ind << 4) | data_ind);
+ instruction[1] = (sljit_u16)((zero_ind << 12) | (1 << 4));
+ instruction[2] = (sljit_u16)((0xe << 8) | 0x81);
+ sljit_emit_op_custom(compiler, instruction, 6);
+ }
+
+/* VLGVB */
+instruction[0] = (sljit_u16)(0xe700 | (tmp1_reg_ind << 4) | data_ind);
+instruction[1] = 7;
+instruction[2] = (sljit_u16)((0x4 << 8) | 0x21);
+sljit_emit_op_custom(compiler, instruction, 6);
+
+OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP1, 0);
+quit = CMP(SLJIT_LESS, STR_PTR, 0, TMP2, 0);
+
+OP2(SLJIT_SUB, STR_PTR, 0, TMP2, 0, SLJIT_IMM, 16);
+
+/* Second part (aligned) */
+start = LABEL();
+
+OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, 16);
+
+partial_quit[1] = CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0);
+if (common->mode == PCRE2_JIT_COMPLETE)
+ add_jump(compiler, &common->failed_match, partial_quit[1]);
+
+load_from_mem_vector(compiler, TRUE, data_ind, str_ptr_reg_ind, 0);
+
+if (compare_type != vector_compare_match2)
+ {
+ if (compare_type == vector_compare_match1i)
+ fast_forward_char_pair_sse2_compare(compiler, compare_type, 0, data_ind, cmp1_ind, cmp2_ind, tmp_ind);
+
+ /* VFEE */
+ instruction[0] = (sljit_u16)(0xe700 | (data_ind << 4) | data_ind);
+ instruction[1] = (sljit_u16)((cmp1_ind << 12) | (1 << 4));
+ instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0xe << 8) | 0x80);
+ sljit_emit_op_custom(compiler, instruction, 6);
+ }
+else
+ {
+ for (i = 0; i < 3; i++)
+ fast_forward_char_pair_sse2_compare(compiler, compare_type, i, data_ind, cmp1_ind, cmp2_ind, tmp_ind);
+
+ /* VFENE */
+ instruction[0] = (sljit_u16)(0xe700 | (data_ind << 4) | data_ind);
+ instruction[1] = (sljit_u16)((zero_ind << 12) | (1 << 4));
+ instruction[2] = (sljit_u16)((0xe << 8) | 0x81);
+ sljit_emit_op_custom(compiler, instruction, 6);
+ }
+
+sljit_set_current_flags(compiler, SLJIT_SET_OVERFLOW);
+JUMPTO(SLJIT_OVERFLOW, start);
+
+/* VLGVB */
+instruction[0] = (sljit_u16)(0xe700 | (tmp1_reg_ind << 4) | data_ind);
+instruction[1] = 7;
+instruction[2] = (sljit_u16)((0x4 << 8) | 0x21);
+sljit_emit_op_custom(compiler, instruction, 6);
+
+OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP1, 0);
+
+JUMPHERE(quit);
+
+if (common->mode != PCRE2_JIT_COMPLETE)
+ {
+ JUMPHERE(partial_quit[0]);
+ JUMPHERE(partial_quit[1]);
+ OP2(SLJIT_SUB | SLJIT_SET_GREATER, SLJIT_UNUSED, 0, STR_PTR, 0, STR_END, 0);
+ CMOV(SLJIT_GREATER, STR_PTR, STR_END, 0);
+ }
+else
+ add_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0));
+
+#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32
+if (common->utf && offset > 0)
+ {
+ SLJIT_ASSERT(common->mode == PCRE2_JIT_COMPLETE);
+
+ OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(-offset));
+
+ quit = jump_if_utf_char_start(compiler, TMP1);
+
+ OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));
+ add_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0));
+
+ OP2(SLJIT_ADD, TMP2, 0, STR_PTR, 0, SLJIT_IMM, 16);
+ JUMPTO(SLJIT_JUMP, restart);
+
+ JUMPHERE(quit);
+ }
+#endif
+}
+
+#define JIT_HAS_FAST_REQUESTED_CHAR_SIMD 1
+
+static jump_list *fast_requested_char_simd(compiler_common *common, PCRE2_UCHAR char1, PCRE2_UCHAR char2)
+{
+DEFINE_COMPILER;
+sljit_u16 instruction[3];
+struct sljit_label *start;
+struct sljit_jump *quit;
+jump_list *not_found = NULL;
+vector_compare_type compare_type = vector_compare_match1;
+sljit_s32 tmp1_reg_ind = sljit_get_register_index(TMP1);
+sljit_s32 tmp3_reg_ind = sljit_get_register_index(TMP3);
+sljit_s32 data_ind = 0;
+sljit_s32 tmp_ind = 1;
+sljit_s32 cmp1_ind = 2;
+sljit_s32 cmp2_ind = 3;
+sljit_s32 zero_ind = 4;
+sljit_u32 bit = 0;
+int i;
+
+if (char1 != char2)
+ {
+ bit = char1 ^ char2;
+ compare_type = vector_compare_match1i;
+
+ if (!is_powerof2(bit))
+ {
+ bit = 0;
+ compare_type = vector_compare_match2;
+ }
+ }
+
+add_jump(compiler, &not_found, CMP(SLJIT_GREATER_EQUAL, TMP1, 0, STR_END, 0));
+
+/* First part (unaligned start) */
+
+OP2(SLJIT_ADD, TMP2, 0, TMP1, 0, SLJIT_IMM, 16);
+
+#if PCRE2_CODE_UNIT_WIDTH != 32
+
+/* VREPI */
+instruction[0] = (sljit_u16)(0xe700 | (cmp1_ind << 4));
+instruction[1] = (sljit_u16)(char1 | bit);
+instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0x8 << 8) | 0x45);
+sljit_emit_op_custom(compiler, instruction, 6);
+
+if (char1 != char2)
+ {
+ /* VREPI */
+ instruction[0] = (sljit_u16)(0xe700 | (cmp2_ind << 4));
+ instruction[1] = (sljit_u16)(bit != 0 ? bit : char2);
+ /* instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0x8 << 8) | 0x45); */
+ sljit_emit_op_custom(compiler, instruction, 6);
+ }
+
+#else /* PCRE2_CODE_UNIT_WIDTH == 32 */
+
+for (int i = 0; i < 2; i++)
+ {
+ replicate_imm_vector(compiler, i, cmp1_ind, char1 | bit, TMP3);
+
+ if (char1 != char2)
+ replicate_imm_vector(compiler, i, cmp2_ind, bit != 0 ? bit : char2, TMP3);
+ }
+
+#endif /* PCRE2_CODE_UNIT_WIDTH != 32 */
+
+if (compare_type == vector_compare_match2)
+ {
+ /* VREPI */
+ instruction[0] = (sljit_u16)(0xe700 | (zero_ind << 4));
+ instruction[1] = 0;
+ instruction[2] = (sljit_u16)((0x8 << 8) | 0x45);
+ sljit_emit_op_custom(compiler, instruction, 6);
+ }
+
+load_from_mem_vector(compiler, TRUE, data_ind, tmp1_reg_ind, 0);
+OP2(SLJIT_AND, TMP2, 0, TMP2, 0, SLJIT_IMM, ~15);
+
+if (compare_type != vector_compare_match2)
+ {
+ if (compare_type == vector_compare_match1i)
+ fast_forward_char_pair_sse2_compare(compiler, compare_type, 0, data_ind, cmp1_ind, cmp2_ind, tmp_ind);
+
+ /* VFEE */
+ instruction[0] = (sljit_u16)(0xe700 | (data_ind << 4) | data_ind);
+ instruction[1] = (sljit_u16)((cmp1_ind << 12) | (1 << 4));
+ instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0xe << 8) | 0x80);
+ sljit_emit_op_custom(compiler, instruction, 6);
+ }
+else
+ {
+ for (i = 0; i < 3; i++)
+ fast_forward_char_pair_sse2_compare(compiler, compare_type, i, data_ind, cmp1_ind, cmp2_ind, tmp_ind);
+
+ /* VFENE */
+ instruction[0] = (sljit_u16)(0xe700 | (data_ind << 4) | data_ind);
+ instruction[1] = (sljit_u16)((zero_ind << 12) | (1 << 4));
+ instruction[2] = (sljit_u16)((0xe << 8) | 0x81);
+ sljit_emit_op_custom(compiler, instruction, 6);
+ }
+
+/* VLGVB */
+instruction[0] = (sljit_u16)(0xe700 | (tmp3_reg_ind << 4) | data_ind);
+instruction[1] = 7;
+instruction[2] = (sljit_u16)((0x4 << 8) | 0x21);
+sljit_emit_op_custom(compiler, instruction, 6);
+
+OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, TMP3, 0);
+quit = CMP(SLJIT_LESS, TMP1, 0, TMP2, 0);
+
+OP2(SLJIT_SUB, TMP1, 0, TMP2, 0, SLJIT_IMM, 16);
+
+/* Second part (aligned) */
+start = LABEL();
+
+OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, 16);
+
+add_jump(compiler, &not_found, CMP(SLJIT_GREATER_EQUAL, TMP1, 0, STR_END, 0));
+
+load_from_mem_vector(compiler, TRUE, data_ind, tmp1_reg_ind, 0);
+
+if (compare_type != vector_compare_match2)
+ {
+ if (compare_type == vector_compare_match1i)
+ fast_forward_char_pair_sse2_compare(compiler, compare_type, 0, data_ind, cmp1_ind, cmp2_ind, tmp_ind);
+
+ /* VFEE */
+ instruction[0] = (sljit_u16)(0xe700 | (data_ind << 4) | data_ind);
+ instruction[1] = (sljit_u16)((cmp1_ind << 12) | (1 << 4));
+ instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0xe << 8) | 0x80);
+ sljit_emit_op_custom(compiler, instruction, 6);
+ }
+else
+ {
+ for (i = 0; i < 3; i++)
+ fast_forward_char_pair_sse2_compare(compiler, compare_type, i, data_ind, cmp1_ind, cmp2_ind, tmp_ind);
+
+ /* VFENE */
+ instruction[0] = (sljit_u16)(0xe700 | (data_ind << 4) | data_ind);
+ instruction[1] = (sljit_u16)((zero_ind << 12) | (1 << 4));
+ instruction[2] = (sljit_u16)((0xe << 8) | 0x81);
+ sljit_emit_op_custom(compiler, instruction, 6);
+ }
+
+sljit_set_current_flags(compiler, SLJIT_SET_OVERFLOW);
+JUMPTO(SLJIT_OVERFLOW, start);
+
+/* VLGVB */
+instruction[0] = (sljit_u16)(0xe700 | (tmp3_reg_ind << 4) | data_ind);
+instruction[1] = 7;
+instruction[2] = (sljit_u16)((0x4 << 8) | 0x21);
+sljit_emit_op_custom(compiler, instruction, 6);
+
+OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, TMP3, 0);
+
+JUMPHERE(quit);
+add_jump(compiler, &not_found, CMP(SLJIT_GREATER_EQUAL, TMP1, 0, STR_END, 0));
+
+return not_found;
+}
+
+#define JIT_HAS_FAST_FORWARD_CHAR_PAIR_SIMD 1
+
+static void fast_forward_char_pair_simd(compiler_common *common, sljit_s32 offs1,
+ PCRE2_UCHAR char1a, PCRE2_UCHAR char1b, sljit_s32 offs2, PCRE2_UCHAR char2a, PCRE2_UCHAR char2b)
+{
+DEFINE_COMPILER;
+sljit_u16 instruction[3];
+struct sljit_label *start;
+#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32
+struct sljit_label *restart;
+#endif
+struct sljit_jump *quit;
+struct sljit_jump *jump[2];
+vector_compare_type compare1_type = vector_compare_match1;
+vector_compare_type compare2_type = vector_compare_match1;
+sljit_u32 bit1 = 0;
+sljit_u32 bit2 = 0;
+sljit_s32 diff = IN_UCHARS(offs2 - offs1);
+sljit_s32 tmp1_reg_ind = sljit_get_register_index(TMP1);
+sljit_s32 tmp2_reg_ind = sljit_get_register_index(TMP2);
+sljit_s32 str_ptr_reg_ind = sljit_get_register_index(STR_PTR);
+sljit_s32 data1_ind = 0;
+sljit_s32 data2_ind = 1;
+sljit_s32 tmp1_ind = 2;
+sljit_s32 tmp2_ind = 3;
+sljit_s32 cmp1a_ind = 4;
+sljit_s32 cmp1b_ind = 5;
+sljit_s32 cmp2a_ind = 6;
+sljit_s32 cmp2b_ind = 7;
+sljit_s32 zero_ind = 8;
+int i;
+
+SLJIT_ASSERT(common->mode == PCRE2_JIT_COMPLETE && offs1 > offs2);
+SLJIT_ASSERT(-diff <= (sljit_s32)IN_UCHARS(max_fast_forward_char_pair_offset()));
+SLJIT_ASSERT(tmp1_reg_ind != 0 && tmp2_reg_ind != 0);
+
+if (char1a != char1b)
+ {
+ bit1 = char1a ^ char1b;
+ compare1_type = vector_compare_match1i;
+
+ if (!is_powerof2(bit1))
+ {
+ bit1 = 0;
+ compare1_type = vector_compare_match2;
+ }
+ }
+
+if (char2a != char2b)
+ {
+ bit2 = char2a ^ char2b;
+ compare2_type = vector_compare_match1i;
+
+ if (!is_powerof2(bit2))
+ {
+ bit2 = 0;
+ compare2_type = vector_compare_match2;
+ }
+ }
+
+/* Initialize. */
+if (common->match_end_ptr != 0)
+ {
+ OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), common->match_end_ptr);
+ OP1(SLJIT_MOV, TMP3, 0, STR_END, 0);
+ OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, IN_UCHARS(offs1 + 1));
+
+ OP2(SLJIT_SUB | SLJIT_SET_LESS, SLJIT_UNUSED, 0, TMP1, 0, STR_END, 0);
+ CMOV(SLJIT_LESS, STR_END, TMP1, 0);
+ }
+
+OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(offs1));
+add_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0));
+OP2(SLJIT_AND, TMP2, 0, STR_PTR, 0, SLJIT_IMM, ~15);
+
+#if PCRE2_CODE_UNIT_WIDTH != 32
+
+OP2(SLJIT_SUB, TMP1, 0, STR_PTR, 0, SLJIT_IMM, -diff);
+
+/* VREPI */
+instruction[0] = (sljit_u16)(0xe700 | (cmp1a_ind << 4));
+instruction[1] = (sljit_u16)(char1a | bit1);
+instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0x8 << 8) | 0x45);
+sljit_emit_op_custom(compiler, instruction, 6);
+
+if (char1a != char1b)
+ {
+ /* VREPI */
+ instruction[0] = (sljit_u16)(0xe700 | (cmp1b_ind << 4));
+ instruction[1] = (sljit_u16)(bit1 != 0 ? bit1 : char1b);
+ /* instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0x8 << 8) | 0x45); */
+ sljit_emit_op_custom(compiler, instruction, 6);
+ }
+
+/* VREPI */
+instruction[0] = (sljit_u16)(0xe700 | (cmp2a_ind << 4));
+instruction[1] = (sljit_u16)(char2a | bit2);
+/* instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0x8 << 8) | 0x45); */
+sljit_emit_op_custom(compiler, instruction, 6);
+
+if (char2a != char2b)
+ {
+ /* VREPI */
+ instruction[0] = (sljit_u16)(0xe700 | (cmp2b_ind << 4));
+ instruction[1] = (sljit_u16)(bit2 != 0 ? bit2 : char2b);
+ /* instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0x8 << 8) | 0x45); */
+ sljit_emit_op_custom(compiler, instruction, 6);
+ }
+
+#else /* PCRE2_CODE_UNIT_WIDTH == 32 */
+
+for (int i = 0; i < 2; i++)
+ {
+ replicate_imm_vector(compiler, i, cmp1a_ind, char1a | bit1, TMP1);
+
+ if (char1a != char1b)
+ replicate_imm_vector(compiler, i, cmp1b_ind, bit1 != 0 ? bit1 : char1b, TMP1);
+
+ replicate_imm_vector(compiler, i, cmp2a_ind, char2a | bit2, TMP1);
+
+ if (char2a != char2b)
+ replicate_imm_vector(compiler, i, cmp2b_ind, bit2 != 0 ? bit2 : char2b, TMP1);
+ }
+
+OP2(SLJIT_SUB, TMP1, 0, STR_PTR, 0, SLJIT_IMM, -diff);
+
+#endif /* PCRE2_CODE_UNIT_WIDTH != 32 */
+
+/* VREPI */
+instruction[0] = (sljit_u16)(0xe700 | (zero_ind << 4));
+instruction[1] = 0;
+instruction[2] = (sljit_u16)((0x8 << 8) | 0x45);
+sljit_emit_op_custom(compiler, instruction, 6);
+
+#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32
+restart = LABEL();
+#endif
+
+jump[0] = CMP(SLJIT_LESS, TMP1, 0, TMP2, 0);
+load_from_mem_vector(compiler, TRUE, data2_ind, tmp1_reg_ind, 0);
+jump[1] = JUMP(SLJIT_JUMP);
+JUMPHERE(jump[0]);
+load_from_mem_vector(compiler, FALSE, data2_ind, tmp1_reg_ind, 0);
+JUMPHERE(jump[1]);
+
+load_from_mem_vector(compiler, TRUE, data1_ind, str_ptr_reg_ind, 0);
+OP2(SLJIT_ADD, TMP2, 0, TMP2, 0, SLJIT_IMM, 16);
+
+for (i = 0; i < 3; i++)
+ {
+ fast_forward_char_pair_sse2_compare(compiler, compare1_type, i, data1_ind, cmp1a_ind, cmp1b_ind, tmp1_ind);
+ fast_forward_char_pair_sse2_compare(compiler, compare2_type, i, data2_ind, cmp2a_ind, cmp2b_ind, tmp2_ind);
+ }
+
+/* VN */
+instruction[0] = (sljit_u16)(0xe700 | (data1_ind << 4) | data1_ind);
+instruction[1] = (sljit_u16)(data2_ind << 12);
+instruction[2] = (sljit_u16)((0xe << 8) | 0x68);
+sljit_emit_op_custom(compiler, instruction, 6);
+
+/* VFENE */
+instruction[0] = (sljit_u16)(0xe700 | (data1_ind << 4) | data1_ind);
+instruction[1] = (sljit_u16)((zero_ind << 12) | (1 << 4));
+instruction[2] = (sljit_u16)((0xe << 8) | 0x81);
+sljit_emit_op_custom(compiler, instruction, 6);
+
+/* VLGVB */
+instruction[0] = (sljit_u16)(0xe700 | (tmp1_reg_ind << 4) | data1_ind);
+instruction[1] = 7;
+instruction[2] = (sljit_u16)((0x4 << 8) | 0x21);
+sljit_emit_op_custom(compiler, instruction, 6);
+
+OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP1, 0);
+quit = CMP(SLJIT_LESS, STR_PTR, 0, TMP2, 0);
+
+OP2(SLJIT_SUB, STR_PTR, 0, TMP2, 0, SLJIT_IMM, 16);
+OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, diff);
+
+/* Main loop. */
+start = LABEL();
+
+OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, 16);
+add_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0));
+
+load_from_mem_vector(compiler, FALSE, data1_ind, str_ptr_reg_ind, 0);
+load_from_mem_vector(compiler, FALSE, data2_ind, str_ptr_reg_ind, tmp1_reg_ind);
+
+for (i = 0; i < 3; i++)
+ {
+ fast_forward_char_pair_sse2_compare(compiler, compare1_type, i, data1_ind, cmp1a_ind, cmp1b_ind, tmp1_ind);
+ fast_forward_char_pair_sse2_compare(compiler, compare2_type, i, data2_ind, cmp2a_ind, cmp2b_ind, tmp2_ind);
+ }
+
+/* VN */
+instruction[0] = (sljit_u16)(0xe700 | (data1_ind << 4) | data1_ind);
+instruction[1] = (sljit_u16)(data2_ind << 12);
+instruction[2] = (sljit_u16)((0xe << 8) | 0x68);
+sljit_emit_op_custom(compiler, instruction, 6);
+
+/* VFENE */
+instruction[0] = (sljit_u16)(0xe700 | (data1_ind << 4) | data1_ind);
+instruction[1] = (sljit_u16)((zero_ind << 12) | (1 << 4));
+instruction[2] = (sljit_u16)((0xe << 8) | 0x81);
+sljit_emit_op_custom(compiler, instruction, 6);
+
+sljit_set_current_flags(compiler, SLJIT_SET_OVERFLOW);
+JUMPTO(SLJIT_OVERFLOW, start);
+
+/* VLGVB */
+instruction[0] = (sljit_u16)(0xe700 | (tmp2_reg_ind << 4) | data1_ind);
+instruction[1] = 7;
+instruction[2] = (sljit_u16)((0x4 << 8) | 0x21);
+sljit_emit_op_custom(compiler, instruction, 6);
+
+OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP2, 0);
+
+JUMPHERE(quit);
+
+add_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0));
+
+#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32
+if (common->utf)
+ {
+ SLJIT_ASSERT(common->mode == PCRE2_JIT_COMPLETE);
+
+ OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(-offs1));
+
+ quit = jump_if_utf_char_start(compiler, TMP1);
+
+ OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));
+ add_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0));
+
+ /* TMP1 contains diff. */
+ OP2(SLJIT_AND, TMP2, 0, STR_PTR, 0, SLJIT_IMM, ~15);
+ OP2(SLJIT_SUB, TMP1, 0, STR_PTR, 0, SLJIT_IMM, -diff);
+ JUMPTO(SLJIT_JUMP, restart);
+
+ JUMPHERE(quit);
+ }
+#endif
+
+OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(offs1));
+
+if (common->match_end_ptr != 0)
+ OP1(SLJIT_MOV, STR_END, 0, TMP3, 0);
+}
+
+#endif /* SLJIT_CONFIG_S390X */
+
+#endif /* !SUPPORT_VALGRIND */
diff --git a/thirdparty/pcre2/src/pcre2_match.c b/thirdparty/pcre2/src/pcre2_match.c
index e3f78c2ca3..f28cdbb47a 100644
--- a/thirdparty/pcre2/src/pcre2_match.c
+++ b/thirdparty/pcre2/src/pcre2_match.c
@@ -7,7 +7,7 @@ and semantics are as close as possible to those of the Perl 5 language.
Written by Philip Hazel
Original API code Copyright (c) 1997-2012 University of Cambridge
- New API code Copyright (c) 2015-2020 University of Cambridge
+ New API code Copyright (c) 2015-2021 University of Cambridge
-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
@@ -818,10 +818,12 @@ fprintf(stderr, "++ op=%d\n", *Fecode);
/* N is now the frame of the recursion; the previous frame is at the
OP_RECURSE position. Go back there, copying the current subject position
- and mark, and move on past the OP_RECURSE. */
+ and mark, and the start_match position (\K might have changed it), and
+ then move on past the OP_RECURSE. */
P->eptr = Feptr;
P->mark = Fmark;
+ P->start_match = Fstart_match;
F = P;
Fecode += 1 + LINK_SIZE;
continue;
@@ -6115,8 +6117,8 @@ BOOL has_req_cu = FALSE;
BOOL startline;
#if PCRE2_CODE_UNIT_WIDTH == 8
-BOOL memchr_not_found_first_cu;
-BOOL memchr_not_found_first_cu2;
+PCRE2_SPTR memchr_found_first_cu;
+PCRE2_SPTR memchr_found_first_cu2;
#endif
PCRE2_UCHAR first_cu = 0;
@@ -6710,8 +6712,8 @@ start_partial = match_partial = NULL;
mb->hitend = FALSE;
#if PCRE2_CODE_UNIT_WIDTH == 8
-memchr_not_found_first_cu = FALSE;
-memchr_not_found_first_cu2 = FALSE;
+memchr_found_first_cu = NULL;
+memchr_found_first_cu2 = NULL;
#endif
for(;;)
@@ -6780,13 +6782,7 @@ for(;;)
}
}
- /* Not anchored. Advance to a unique first code unit if there is one. In
- 8-bit mode, the use of memchr() gives a big speed up, even though we have
- to call it twice in caseless mode, in order to find the earliest occurrence
- of the character in either of its cases. If a call to memchr() that
- searches the rest of the subject fails to find one case, remember that in
- order not to keep on repeating the search. This can make a huge difference
- when the strings are very long and only one case is present. */
+ /* Not anchored. Advance to a unique first code unit if there is one. */
else
{
@@ -6794,43 +6790,68 @@ for(;;)
{
if (first_cu != first_cu2) /* Caseless */
{
+ /* In 16-bit and 32_bit modes we have to do our own search, so can
+ look for both cases at once. */
+
#if PCRE2_CODE_UNIT_WIDTH != 8
PCRE2_UCHAR smc;
while (start_match < end_subject &&
(smc = UCHAR21TEST(start_match)) != first_cu &&
- smc != first_cu2)
+ smc != first_cu2)
start_match++;
+#else
+ /* In 8-bit mode, the use of memchr() gives a big speed up, even
+ though we have to call it twice in order to find the earliest
+ occurrence of the code unit in either of its cases. Caching is used
+ to remember the positions of previously found code units. This can
+ make a huge difference when the strings are very long and only one
+ case is actually present. */
-#else /* 8-bit code units */
PCRE2_SPTR pp1 = NULL;
PCRE2_SPTR pp2 = NULL;
- PCRE2_SIZE cu2size = end_subject - start_match;
+ PCRE2_SIZE searchlength = end_subject - start_match;
- if (!memchr_not_found_first_cu)
+ /* If we haven't got a previously found position for first_cu, or if
+ the current starting position is later, we need to do a search. If
+ the code unit is not found, set it to the end. */
+
+ if (memchr_found_first_cu == NULL ||
+ start_match > memchr_found_first_cu)
{
- pp1 = memchr(start_match, first_cu, end_subject - start_match);
- if (pp1 == NULL) memchr_not_found_first_cu = TRUE;
- else cu2size = pp1 - start_match;
+ pp1 = memchr(start_match, first_cu, searchlength);
+ memchr_found_first_cu = (pp1 == NULL)? end_subject : pp1;
}
- /* If pp1 is not NULL, we have arranged to search only as far as pp1,
- to see if the other case is earlier, so we can set "not found" only
- when both searches have returned NULL. */
+ /* If the start is before a previously found position, use the
+ previous position, or NULL if a previous search failed. */
+
+ else pp1 = (memchr_found_first_cu == end_subject)? NULL :
+ memchr_found_first_cu;
- if (!memchr_not_found_first_cu2)
+ /* Do the same thing for the other case. */
+
+ if (memchr_found_first_cu2 == NULL ||
+ start_match > memchr_found_first_cu2)
{
- pp2 = memchr(start_match, first_cu2, cu2size);
- memchr_not_found_first_cu2 = (pp2 == NULL && pp1 == NULL);
+ pp2 = memchr(start_match, first_cu2, searchlength);
+ memchr_found_first_cu2 = (pp2 == NULL)? end_subject : pp2;
}
+ else pp2 = (memchr_found_first_cu2 == end_subject)? NULL :
+ memchr_found_first_cu2;
+
+ /* Set the start to the end of the subject if neither case was found.
+ Otherwise, use the earlier found point. */
+
if (pp1 == NULL)
start_match = (pp2 == NULL)? end_subject : pp2;
else
start_match = (pp2 == NULL || pp1 < pp2)? pp1 : pp2;
-#endif
+
+#endif /* 8-bit handling */
}
- /* The caseful case */
+ /* The caseful case is much simpler. */
else
{
diff --git a/thirdparty/pcre2/src/pcre2_tables.c b/thirdparty/pcre2/src/pcre2_tables.c
index b10de45efb..c164e976e0 100644
--- a/thirdparty/pcre2/src/pcre2_tables.c
+++ b/thirdparty/pcre2/src/pcre2_tables.c
@@ -273,6 +273,7 @@ strings to make sure that UTF-8 support works on EBCDIC platforms. */
#define STRING_Cs0 STR_C STR_s "\0"
#define STRING_Cuneiform0 STR_C STR_u STR_n STR_e STR_i STR_f STR_o STR_r STR_m "\0"
#define STRING_Cypriot0 STR_C STR_y STR_p STR_r STR_i STR_o STR_t "\0"
+#define STRING_Cypro_Minoan0 STR_C STR_y STR_p STR_r STR_o STR_UNDERSCORE STR_M STR_i STR_n STR_o STR_a STR_n "\0"
#define STRING_Cyrillic0 STR_C STR_y STR_r STR_i STR_l STR_l STR_i STR_c "\0"
#define STRING_Deseret0 STR_D STR_e STR_s STR_e STR_r STR_e STR_t "\0"
#define STRING_Devanagari0 STR_D STR_e STR_v STR_a STR_n STR_a STR_g STR_a STR_r STR_i "\0"
@@ -371,6 +372,7 @@ strings to make sure that UTF-8 support works on EBCDIC platforms. */
#define STRING_Old_Sogdian0 STR_O STR_l STR_d STR_UNDERSCORE STR_S STR_o STR_g STR_d STR_i STR_a STR_n "\0"
#define STRING_Old_South_Arabian0 STR_O STR_l STR_d STR_UNDERSCORE STR_S STR_o STR_u STR_t STR_h STR_UNDERSCORE STR_A STR_r STR_a STR_b STR_i STR_a STR_n "\0"
#define STRING_Old_Turkic0 STR_O STR_l STR_d STR_UNDERSCORE STR_T STR_u STR_r STR_k STR_i STR_c "\0"
+#define STRING_Old_Uyghur0 STR_O STR_l STR_d STR_UNDERSCORE STR_U STR_y STR_g STR_h STR_u STR_r "\0"
#define STRING_Oriya0 STR_O STR_r STR_i STR_y STR_a "\0"
#define STRING_Osage0 STR_O STR_s STR_a STR_g STR_e "\0"
#define STRING_Osmanya0 STR_O STR_s STR_m STR_a STR_n STR_y STR_a "\0"
@@ -415,6 +417,7 @@ strings to make sure that UTF-8 support works on EBCDIC platforms. */
#define STRING_Tai_Viet0 STR_T STR_a STR_i STR_UNDERSCORE STR_V STR_i STR_e STR_t "\0"
#define STRING_Takri0 STR_T STR_a STR_k STR_r STR_i "\0"
#define STRING_Tamil0 STR_T STR_a STR_m STR_i STR_l "\0"
+#define STRING_Tangsa0 STR_T STR_a STR_n STR_g STR_s STR_a "\0"
#define STRING_Tangut0 STR_T STR_a STR_n STR_g STR_u STR_t "\0"
#define STRING_Telugu0 STR_T STR_e STR_l STR_u STR_g STR_u "\0"
#define STRING_Thaana0 STR_T STR_h STR_a STR_a STR_n STR_a "\0"
@@ -422,9 +425,11 @@ strings to make sure that UTF-8 support works on EBCDIC platforms. */
#define STRING_Tibetan0 STR_T STR_i STR_b STR_e STR_t STR_a STR_n "\0"
#define STRING_Tifinagh0 STR_T STR_i STR_f STR_i STR_n STR_a STR_g STR_h "\0"
#define STRING_Tirhuta0 STR_T STR_i STR_r STR_h STR_u STR_t STR_a "\0"
+#define STRING_Toto0 STR_T STR_o STR_t STR_o "\0"
#define STRING_Ugaritic0 STR_U STR_g STR_a STR_r STR_i STR_t STR_i STR_c "\0"
#define STRING_Unknown0 STR_U STR_n STR_k STR_n STR_o STR_w STR_n "\0"
#define STRING_Vai0 STR_V STR_a STR_i "\0"
+#define STRING_Vithkuqi0 STR_V STR_i STR_t STR_h STR_k STR_u STR_q STR_i "\0"
#define STRING_Wancho0 STR_W STR_a STR_n STR_c STR_h STR_o "\0"
#define STRING_Warang_Citi0 STR_W STR_a STR_r STR_a STR_n STR_g STR_UNDERSCORE STR_C STR_i STR_t STR_i "\0"
#define STRING_Xan0 STR_X STR_a STR_n "\0"
@@ -476,6 +481,7 @@ const char PRIV(utt_names)[] =
STRING_Cs0
STRING_Cuneiform0
STRING_Cypriot0
+ STRING_Cypro_Minoan0
STRING_Cyrillic0
STRING_Deseret0
STRING_Devanagari0
@@ -574,6 +580,7 @@ const char PRIV(utt_names)[] =
STRING_Old_Sogdian0
STRING_Old_South_Arabian0
STRING_Old_Turkic0
+ STRING_Old_Uyghur0
STRING_Oriya0
STRING_Osage0
STRING_Osmanya0
@@ -618,6 +625,7 @@ const char PRIV(utt_names)[] =
STRING_Tai_Viet0
STRING_Takri0
STRING_Tamil0
+ STRING_Tangsa0
STRING_Tangut0
STRING_Telugu0
STRING_Thaana0
@@ -625,9 +633,11 @@ const char PRIV(utt_names)[] =
STRING_Tibetan0
STRING_Tifinagh0
STRING_Tirhuta0
+ STRING_Toto0
STRING_Ugaritic0
STRING_Unknown0
STRING_Vai0
+ STRING_Vithkuqi0
STRING_Wancho0
STRING_Warang_Citi0
STRING_Xan0
@@ -679,172 +689,177 @@ const ucp_type_table PRIV(utt)[] = {
{ 255, PT_PC, ucp_Cs },
{ 258, PT_SC, ucp_Cuneiform },
{ 268, PT_SC, ucp_Cypriot },
- { 276, PT_SC, ucp_Cyrillic },
- { 285, PT_SC, ucp_Deseret },
- { 293, PT_SC, ucp_Devanagari },
- { 304, PT_SC, ucp_Dives_Akuru },
- { 316, PT_SC, ucp_Dogra },
- { 322, PT_SC, ucp_Duployan },
- { 331, PT_SC, ucp_Egyptian_Hieroglyphs },
- { 352, PT_SC, ucp_Elbasan },
- { 360, PT_SC, ucp_Elymaic },
- { 368, PT_SC, ucp_Ethiopic },
- { 377, PT_SC, ucp_Georgian },
- { 386, PT_SC, ucp_Glagolitic },
- { 397, PT_SC, ucp_Gothic },
- { 404, PT_SC, ucp_Grantha },
- { 412, PT_SC, ucp_Greek },
- { 418, PT_SC, ucp_Gujarati },
- { 427, PT_SC, ucp_Gunjala_Gondi },
- { 441, PT_SC, ucp_Gurmukhi },
- { 450, PT_SC, ucp_Han },
- { 454, PT_SC, ucp_Hangul },
- { 461, PT_SC, ucp_Hanifi_Rohingya },
- { 477, PT_SC, ucp_Hanunoo },
- { 485, PT_SC, ucp_Hatran },
- { 492, PT_SC, ucp_Hebrew },
- { 499, PT_SC, ucp_Hiragana },
- { 508, PT_SC, ucp_Imperial_Aramaic },
- { 525, PT_SC, ucp_Inherited },
- { 535, PT_SC, ucp_Inscriptional_Pahlavi },
- { 557, PT_SC, ucp_Inscriptional_Parthian },
- { 580, PT_SC, ucp_Javanese },
- { 589, PT_SC, ucp_Kaithi },
- { 596, PT_SC, ucp_Kannada },
- { 604, PT_SC, ucp_Katakana },
- { 613, PT_SC, ucp_Kayah_Li },
- { 622, PT_SC, ucp_Kharoshthi },
- { 633, PT_SC, ucp_Khitan_Small_Script },
- { 653, PT_SC, ucp_Khmer },
- { 659, PT_SC, ucp_Khojki },
- { 666, PT_SC, ucp_Khudawadi },
- { 676, PT_GC, ucp_L },
- { 678, PT_LAMP, 0 },
- { 681, PT_SC, ucp_Lao },
- { 685, PT_SC, ucp_Latin },
- { 691, PT_SC, ucp_Lepcha },
- { 698, PT_SC, ucp_Limbu },
- { 704, PT_SC, ucp_Linear_A },
- { 713, PT_SC, ucp_Linear_B },
- { 722, PT_SC, ucp_Lisu },
- { 727, PT_PC, ucp_Ll },
- { 730, PT_PC, ucp_Lm },
- { 733, PT_PC, ucp_Lo },
- { 736, PT_PC, ucp_Lt },
- { 739, PT_PC, ucp_Lu },
- { 742, PT_SC, ucp_Lycian },
- { 749, PT_SC, ucp_Lydian },
- { 756, PT_GC, ucp_M },
- { 758, PT_SC, ucp_Mahajani },
- { 767, PT_SC, ucp_Makasar },
- { 775, PT_SC, ucp_Malayalam },
- { 785, PT_SC, ucp_Mandaic },
- { 793, PT_SC, ucp_Manichaean },
- { 804, PT_SC, ucp_Marchen },
- { 812, PT_SC, ucp_Masaram_Gondi },
- { 826, PT_PC, ucp_Mc },
- { 829, PT_PC, ucp_Me },
- { 832, PT_SC, ucp_Medefaidrin },
- { 844, PT_SC, ucp_Meetei_Mayek },
- { 857, PT_SC, ucp_Mende_Kikakui },
- { 871, PT_SC, ucp_Meroitic_Cursive },
- { 888, PT_SC, ucp_Meroitic_Hieroglyphs },
- { 909, PT_SC, ucp_Miao },
- { 914, PT_PC, ucp_Mn },
- { 917, PT_SC, ucp_Modi },
- { 922, PT_SC, ucp_Mongolian },
- { 932, PT_SC, ucp_Mro },
- { 936, PT_SC, ucp_Multani },
- { 944, PT_SC, ucp_Myanmar },
- { 952, PT_GC, ucp_N },
- { 954, PT_SC, ucp_Nabataean },
- { 964, PT_SC, ucp_Nandinagari },
- { 976, PT_PC, ucp_Nd },
- { 979, PT_SC, ucp_New_Tai_Lue },
- { 991, PT_SC, ucp_Newa },
- { 996, PT_SC, ucp_Nko },
- { 1000, PT_PC, ucp_Nl },
- { 1003, PT_PC, ucp_No },
- { 1006, PT_SC, ucp_Nushu },
- { 1012, PT_SC, ucp_Nyiakeng_Puachue_Hmong },
- { 1035, PT_SC, ucp_Ogham },
- { 1041, PT_SC, ucp_Ol_Chiki },
- { 1050, PT_SC, ucp_Old_Hungarian },
- { 1064, PT_SC, ucp_Old_Italic },
- { 1075, PT_SC, ucp_Old_North_Arabian },
- { 1093, PT_SC, ucp_Old_Permic },
- { 1104, PT_SC, ucp_Old_Persian },
- { 1116, PT_SC, ucp_Old_Sogdian },
- { 1128, PT_SC, ucp_Old_South_Arabian },
- { 1146, PT_SC, ucp_Old_Turkic },
- { 1157, PT_SC, ucp_Oriya },
- { 1163, PT_SC, ucp_Osage },
- { 1169, PT_SC, ucp_Osmanya },
- { 1177, PT_GC, ucp_P },
- { 1179, PT_SC, ucp_Pahawh_Hmong },
- { 1192, PT_SC, ucp_Palmyrene },
- { 1202, PT_SC, ucp_Pau_Cin_Hau },
- { 1214, PT_PC, ucp_Pc },
- { 1217, PT_PC, ucp_Pd },
- { 1220, PT_PC, ucp_Pe },
- { 1223, PT_PC, ucp_Pf },
- { 1226, PT_SC, ucp_Phags_Pa },
- { 1235, PT_SC, ucp_Phoenician },
- { 1246, PT_PC, ucp_Pi },
- { 1249, PT_PC, ucp_Po },
- { 1252, PT_PC, ucp_Ps },
- { 1255, PT_SC, ucp_Psalter_Pahlavi },
- { 1271, PT_SC, ucp_Rejang },
- { 1278, PT_SC, ucp_Runic },
- { 1284, PT_GC, ucp_S },
- { 1286, PT_SC, ucp_Samaritan },
- { 1296, PT_SC, ucp_Saurashtra },
- { 1307, PT_PC, ucp_Sc },
- { 1310, PT_SC, ucp_Sharada },
- { 1318, PT_SC, ucp_Shavian },
- { 1326, PT_SC, ucp_Siddham },
- { 1334, PT_SC, ucp_SignWriting },
- { 1346, PT_SC, ucp_Sinhala },
- { 1354, PT_PC, ucp_Sk },
- { 1357, PT_PC, ucp_Sm },
- { 1360, PT_PC, ucp_So },
- { 1363, PT_SC, ucp_Sogdian },
- { 1371, PT_SC, ucp_Sora_Sompeng },
- { 1384, PT_SC, ucp_Soyombo },
- { 1392, PT_SC, ucp_Sundanese },
- { 1402, PT_SC, ucp_Syloti_Nagri },
- { 1415, PT_SC, ucp_Syriac },
- { 1422, PT_SC, ucp_Tagalog },
- { 1430, PT_SC, ucp_Tagbanwa },
- { 1439, PT_SC, ucp_Tai_Le },
- { 1446, PT_SC, ucp_Tai_Tham },
- { 1455, PT_SC, ucp_Tai_Viet },
- { 1464, PT_SC, ucp_Takri },
- { 1470, PT_SC, ucp_Tamil },
- { 1476, PT_SC, ucp_Tangut },
- { 1483, PT_SC, ucp_Telugu },
- { 1490, PT_SC, ucp_Thaana },
- { 1497, PT_SC, ucp_Thai },
- { 1502, PT_SC, ucp_Tibetan },
- { 1510, PT_SC, ucp_Tifinagh },
- { 1519, PT_SC, ucp_Tirhuta },
- { 1527, PT_SC, ucp_Ugaritic },
- { 1536, PT_SC, ucp_Unknown },
- { 1544, PT_SC, ucp_Vai },
- { 1548, PT_SC, ucp_Wancho },
- { 1555, PT_SC, ucp_Warang_Citi },
- { 1567, PT_ALNUM, 0 },
- { 1571, PT_PXSPACE, 0 },
- { 1575, PT_SPACE, 0 },
- { 1579, PT_UCNC, 0 },
- { 1583, PT_WORD, 0 },
- { 1587, PT_SC, ucp_Yezidi },
- { 1594, PT_SC, ucp_Yi },
- { 1597, PT_GC, ucp_Z },
- { 1599, PT_SC, ucp_Zanabazar_Square },
- { 1616, PT_PC, ucp_Zl },
- { 1619, PT_PC, ucp_Zp },
- { 1622, PT_PC, ucp_Zs }
+ { 276, PT_SC, ucp_Cypro_Minoan },
+ { 289, PT_SC, ucp_Cyrillic },
+ { 298, PT_SC, ucp_Deseret },
+ { 306, PT_SC, ucp_Devanagari },
+ { 317, PT_SC, ucp_Dives_Akuru },
+ { 329, PT_SC, ucp_Dogra },
+ { 335, PT_SC, ucp_Duployan },
+ { 344, PT_SC, ucp_Egyptian_Hieroglyphs },
+ { 365, PT_SC, ucp_Elbasan },
+ { 373, PT_SC, ucp_Elymaic },
+ { 381, PT_SC, ucp_Ethiopic },
+ { 390, PT_SC, ucp_Georgian },
+ { 399, PT_SC, ucp_Glagolitic },
+ { 410, PT_SC, ucp_Gothic },
+ { 417, PT_SC, ucp_Grantha },
+ { 425, PT_SC, ucp_Greek },
+ { 431, PT_SC, ucp_Gujarati },
+ { 440, PT_SC, ucp_Gunjala_Gondi },
+ { 454, PT_SC, ucp_Gurmukhi },
+ { 463, PT_SC, ucp_Han },
+ { 467, PT_SC, ucp_Hangul },
+ { 474, PT_SC, ucp_Hanifi_Rohingya },
+ { 490, PT_SC, ucp_Hanunoo },
+ { 498, PT_SC, ucp_Hatran },
+ { 505, PT_SC, ucp_Hebrew },
+ { 512, PT_SC, ucp_Hiragana },
+ { 521, PT_SC, ucp_Imperial_Aramaic },
+ { 538, PT_SC, ucp_Inherited },
+ { 548, PT_SC, ucp_Inscriptional_Pahlavi },
+ { 570, PT_SC, ucp_Inscriptional_Parthian },
+ { 593, PT_SC, ucp_Javanese },
+ { 602, PT_SC, ucp_Kaithi },
+ { 609, PT_SC, ucp_Kannada },
+ { 617, PT_SC, ucp_Katakana },
+ { 626, PT_SC, ucp_Kayah_Li },
+ { 635, PT_SC, ucp_Kharoshthi },
+ { 646, PT_SC, ucp_Khitan_Small_Script },
+ { 666, PT_SC, ucp_Khmer },
+ { 672, PT_SC, ucp_Khojki },
+ { 679, PT_SC, ucp_Khudawadi },
+ { 689, PT_GC, ucp_L },
+ { 691, PT_LAMP, 0 },
+ { 694, PT_SC, ucp_Lao },
+ { 698, PT_SC, ucp_Latin },
+ { 704, PT_SC, ucp_Lepcha },
+ { 711, PT_SC, ucp_Limbu },
+ { 717, PT_SC, ucp_Linear_A },
+ { 726, PT_SC, ucp_Linear_B },
+ { 735, PT_SC, ucp_Lisu },
+ { 740, PT_PC, ucp_Ll },
+ { 743, PT_PC, ucp_Lm },
+ { 746, PT_PC, ucp_Lo },
+ { 749, PT_PC, ucp_Lt },
+ { 752, PT_PC, ucp_Lu },
+ { 755, PT_SC, ucp_Lycian },
+ { 762, PT_SC, ucp_Lydian },
+ { 769, PT_GC, ucp_M },
+ { 771, PT_SC, ucp_Mahajani },
+ { 780, PT_SC, ucp_Makasar },
+ { 788, PT_SC, ucp_Malayalam },
+ { 798, PT_SC, ucp_Mandaic },
+ { 806, PT_SC, ucp_Manichaean },
+ { 817, PT_SC, ucp_Marchen },
+ { 825, PT_SC, ucp_Masaram_Gondi },
+ { 839, PT_PC, ucp_Mc },
+ { 842, PT_PC, ucp_Me },
+ { 845, PT_SC, ucp_Medefaidrin },
+ { 857, PT_SC, ucp_Meetei_Mayek },
+ { 870, PT_SC, ucp_Mende_Kikakui },
+ { 884, PT_SC, ucp_Meroitic_Cursive },
+ { 901, PT_SC, ucp_Meroitic_Hieroglyphs },
+ { 922, PT_SC, ucp_Miao },
+ { 927, PT_PC, ucp_Mn },
+ { 930, PT_SC, ucp_Modi },
+ { 935, PT_SC, ucp_Mongolian },
+ { 945, PT_SC, ucp_Mro },
+ { 949, PT_SC, ucp_Multani },
+ { 957, PT_SC, ucp_Myanmar },
+ { 965, PT_GC, ucp_N },
+ { 967, PT_SC, ucp_Nabataean },
+ { 977, PT_SC, ucp_Nandinagari },
+ { 989, PT_PC, ucp_Nd },
+ { 992, PT_SC, ucp_New_Tai_Lue },
+ { 1004, PT_SC, ucp_Newa },
+ { 1009, PT_SC, ucp_Nko },
+ { 1013, PT_PC, ucp_Nl },
+ { 1016, PT_PC, ucp_No },
+ { 1019, PT_SC, ucp_Nushu },
+ { 1025, PT_SC, ucp_Nyiakeng_Puachue_Hmong },
+ { 1048, PT_SC, ucp_Ogham },
+ { 1054, PT_SC, ucp_Ol_Chiki },
+ { 1063, PT_SC, ucp_Old_Hungarian },
+ { 1077, PT_SC, ucp_Old_Italic },
+ { 1088, PT_SC, ucp_Old_North_Arabian },
+ { 1106, PT_SC, ucp_Old_Permic },
+ { 1117, PT_SC, ucp_Old_Persian },
+ { 1129, PT_SC, ucp_Old_Sogdian },
+ { 1141, PT_SC, ucp_Old_South_Arabian },
+ { 1159, PT_SC, ucp_Old_Turkic },
+ { 1170, PT_SC, ucp_Old_Uyghur },
+ { 1181, PT_SC, ucp_Oriya },
+ { 1187, PT_SC, ucp_Osage },
+ { 1193, PT_SC, ucp_Osmanya },
+ { 1201, PT_GC, ucp_P },
+ { 1203, PT_SC, ucp_Pahawh_Hmong },
+ { 1216, PT_SC, ucp_Palmyrene },
+ { 1226, PT_SC, ucp_Pau_Cin_Hau },
+ { 1238, PT_PC, ucp_Pc },
+ { 1241, PT_PC, ucp_Pd },
+ { 1244, PT_PC, ucp_Pe },
+ { 1247, PT_PC, ucp_Pf },
+ { 1250, PT_SC, ucp_Phags_Pa },
+ { 1259, PT_SC, ucp_Phoenician },
+ { 1270, PT_PC, ucp_Pi },
+ { 1273, PT_PC, ucp_Po },
+ { 1276, PT_PC, ucp_Ps },
+ { 1279, PT_SC, ucp_Psalter_Pahlavi },
+ { 1295, PT_SC, ucp_Rejang },
+ { 1302, PT_SC, ucp_Runic },
+ { 1308, PT_GC, ucp_S },
+ { 1310, PT_SC, ucp_Samaritan },
+ { 1320, PT_SC, ucp_Saurashtra },
+ { 1331, PT_PC, ucp_Sc },
+ { 1334, PT_SC, ucp_Sharada },
+ { 1342, PT_SC, ucp_Shavian },
+ { 1350, PT_SC, ucp_Siddham },
+ { 1358, PT_SC, ucp_SignWriting },
+ { 1370, PT_SC, ucp_Sinhala },
+ { 1378, PT_PC, ucp_Sk },
+ { 1381, PT_PC, ucp_Sm },
+ { 1384, PT_PC, ucp_So },
+ { 1387, PT_SC, ucp_Sogdian },
+ { 1395, PT_SC, ucp_Sora_Sompeng },
+ { 1408, PT_SC, ucp_Soyombo },
+ { 1416, PT_SC, ucp_Sundanese },
+ { 1426, PT_SC, ucp_Syloti_Nagri },
+ { 1439, PT_SC, ucp_Syriac },
+ { 1446, PT_SC, ucp_Tagalog },
+ { 1454, PT_SC, ucp_Tagbanwa },
+ { 1463, PT_SC, ucp_Tai_Le },
+ { 1470, PT_SC, ucp_Tai_Tham },
+ { 1479, PT_SC, ucp_Tai_Viet },
+ { 1488, PT_SC, ucp_Takri },
+ { 1494, PT_SC, ucp_Tamil },
+ { 1500, PT_SC, ucp_Tangsa },
+ { 1507, PT_SC, ucp_Tangut },
+ { 1514, PT_SC, ucp_Telugu },
+ { 1521, PT_SC, ucp_Thaana },
+ { 1528, PT_SC, ucp_Thai },
+ { 1533, PT_SC, ucp_Tibetan },
+ { 1541, PT_SC, ucp_Tifinagh },
+ { 1550, PT_SC, ucp_Tirhuta },
+ { 1558, PT_SC, ucp_Toto },
+ { 1563, PT_SC, ucp_Ugaritic },
+ { 1572, PT_SC, ucp_Unknown },
+ { 1580, PT_SC, ucp_Vai },
+ { 1584, PT_SC, ucp_Vithkuqi },
+ { 1593, PT_SC, ucp_Wancho },
+ { 1600, PT_SC, ucp_Warang_Citi },
+ { 1612, PT_ALNUM, 0 },
+ { 1616, PT_PXSPACE, 0 },
+ { 1620, PT_SPACE, 0 },
+ { 1624, PT_UCNC, 0 },
+ { 1628, PT_WORD, 0 },
+ { 1632, PT_SC, ucp_Yezidi },
+ { 1639, PT_SC, ucp_Yi },
+ { 1642, PT_GC, ucp_Z },
+ { 1644, PT_SC, ucp_Zanabazar_Square },
+ { 1661, PT_PC, ucp_Zl },
+ { 1664, PT_PC, ucp_Zp },
+ { 1667, PT_PC, ucp_Zs }
};
const size_t PRIV(utt_size) = sizeof(PRIV(utt)) / sizeof(ucp_type_table);
diff --git a/thirdparty/pcre2/src/pcre2_ucd.c b/thirdparty/pcre2/src/pcre2_ucd.c
index 46e23ff06b..0b8ac75bd4 100644
--- a/thirdparty/pcre2/src/pcre2_ucd.c
+++ b/thirdparty/pcre2/src/pcre2_ucd.c
@@ -20,7 +20,7 @@ needed. */
/* Unicode character database. */
/* This file was autogenerated by the MultiStage2.py script. */
-/* Total size: 101044 bytes, block size: 128. */
+/* Total size: 102844 bytes, block size: 128. */
/* The tables herein are needed only when UCP support is built,
and in PCRE2 that happens automatically with UTF support.
@@ -39,7 +39,7 @@ const uint16_t PRIV(ucd_stage2)[] = {0};
const uint32_t PRIV(ucd_caseless_sets)[] = {0};
#else
-const char *PRIV(unicode_version) = "13.0.0";
+const char *PRIV(unicode_version) = "14.0.0";
/* If the 32-bit library is run in non-32-bit mode, character values
greater than 0x10ffff may be encountered. For these we set up a
@@ -116,16 +116,16 @@ set of decimal digits. It is used to ensure that all the digits in
a script run come from the same set. */
const uint32_t PRIV(ucd_digit_sets)[] = {
- 65, /* Number of subsequent values */
+ 66, /* Number of subsequent values */
0x00039, 0x00669, 0x006f9, 0x007c9, 0x0096f, 0x009ef, 0x00a6f, 0x00aef,
0x00b6f, 0x00bef, 0x00c6f, 0x00cef, 0x00d6f, 0x00def, 0x00e59, 0x00ed9,
0x00f29, 0x01049, 0x01099, 0x017e9, 0x01819, 0x0194f, 0x019d9, 0x01a89,
0x01a99, 0x01b59, 0x01bb9, 0x01c49, 0x01c59, 0x0a629, 0x0a8d9, 0x0a909,
0x0a9d9, 0x0a9f9, 0x0aa59, 0x0abf9, 0x0ff19, 0x104a9, 0x10d39, 0x1106f,
0x110f9, 0x1113f, 0x111d9, 0x112f9, 0x11459, 0x114d9, 0x11659, 0x116c9,
- 0x11739, 0x118e9, 0x11959, 0x11c59, 0x11d59, 0x11da9, 0x16a69, 0x16b59,
- 0x1d7d7, 0x1d7e1, 0x1d7eb, 0x1d7f5, 0x1d7ff, 0x1e149, 0x1e2f9, 0x1e959,
- 0x1fbf9,
+ 0x11739, 0x118e9, 0x11959, 0x11c59, 0x11d59, 0x11da9, 0x16a69, 0x16ac9,
+ 0x16b59, 0x1d7d7, 0x1d7e1, 0x1d7eb, 0x1d7f5, 0x1d7ff, 0x1e149, 0x1e2f9,
+ 0x1e959, 0x1fbf9,
};
/* This vector is a list of lists of scripts for the Script Extension
@@ -135,55 +135,59 @@ const uint8_t PRIV(ucd_script_sets)[] = {
/* 0 */ 0,
/* 1 */ 1, 11, 0,
/* 4 */ 1, 144, 0,
- /* 7 */ 1, 50, 0,
- /* 10 */ 1, 56, 0,
- /* 13 */ 3, 15, 0,
- /* 16 */ 4, 23, 0,
- /* 19 */ 6, 84, 0,
- /* 22 */ 12, 36, 0,
- /* 25 */ 13, 18, 0,
- /* 28 */ 13, 34, 0,
- /* 31 */ 13, 118, 0,
- /* 34 */ 13, 50, 0,
- /* 37 */ 15, 107, 0,
- /* 40 */ 15, 150, 0,
- /* 43 */ 15, 100, 0,
- /* 46 */ 15, 54, 0,
- /* 49 */ 17, 34, 0,
- /* 52 */ 107, 54, 0,
- /* 55 */ 21, 108, 0,
- /* 58 */ 22, 129, 0,
- /* 61 */ 23, 34, 0,
- /* 64 */ 27, 30, 0,
- /* 67 */ 29, 150, 0,
- /* 70 */ 34, 38, 0,
- /* 73 */ 38, 65, 0,
- /* 76 */ 1, 50, 56, 0,
- /* 80 */ 1, 56, 156, 0,
- /* 84 */ 3, 96, 49, 0,
- /* 88 */ 96, 39, 53, 0,
- /* 92 */ 12, 110, 36, 0,
- /* 96 */ 15, 107, 29, 0,
- /* 100 */ 15, 107, 34, 0,
- /* 104 */ 23, 27, 30, 0,
- /* 108 */ 69, 34, 39, 0,
- /* 112 */ 3, 15, 107, 29, 0,
- /* 117 */ 7, 25, 52, 51, 0,
- /* 122 */ 15, 142, 85, 111, 0,
- /* 127 */ 1, 144, 50, 56, 156, 0,
- /* 133 */ 4, 24, 23, 27, 30, 0,
- /* 139 */ 4, 24, 23, 27, 30, 61, 0,
- /* 146 */ 15, 29, 37, 44, 54, 55, 0,
- /* 153 */ 132, 1, 95, 112, 121, 144, 148, 50, 0,
- /* 162 */ 3, 15, 107, 29, 150, 44, 55, 124, 0,
- /* 171 */ 15, 142, 21, 22, 108, 85, 111, 114, 109, 102, 124, 0,
- /* 183 */ 3, 15, 107, 21, 22, 29, 34, 37, 44, 54, 55, 124, 0,
- /* 196 */ 3, 15, 107, 21, 22, 29, 34, 37, 44, 100, 54, 55, 124, 0,
- /* 210 */ 15, 142, 21, 22, 108, 29, 85, 111, 114, 150, 109, 102, 124, 0,
- /* 224 */ 15, 142, 21, 22, 108, 29, 85, 111, 37, 114, 150, 109, 102, 124, 0,
- /* 239 */ 3, 15, 142, 143, 138, 107, 21, 22, 29, 111, 37, 150, 44, 109, 48, 49, 102, 54, 55, 124, 0,
- /* 260 */ 3, 15, 142, 143, 138, 107, 21, 22, 29, 35, 111, 37, 150, 44, 109, 48, 49, 102, 54, 55, 124, 0,
- /* 282 */
+ /* 7 */ 1, 64, 0,
+ /* 10 */ 1, 50, 0,
+ /* 13 */ 1, 56, 0,
+ /* 16 */ 3, 15, 0,
+ /* 19 */ 4, 23, 0,
+ /* 22 */ 6, 84, 0,
+ /* 25 */ 12, 36, 0,
+ /* 28 */ 13, 18, 0,
+ /* 31 */ 13, 34, 0,
+ /* 34 */ 13, 118, 0,
+ /* 37 */ 13, 50, 0,
+ /* 40 */ 15, 107, 0,
+ /* 43 */ 15, 150, 0,
+ /* 46 */ 15, 100, 0,
+ /* 49 */ 15, 54, 0,
+ /* 52 */ 17, 34, 0,
+ /* 55 */ 107, 54, 0,
+ /* 58 */ 21, 108, 0,
+ /* 61 */ 22, 129, 0,
+ /* 64 */ 23, 34, 0,
+ /* 67 */ 27, 30, 0,
+ /* 70 */ 29, 150, 0,
+ /* 73 */ 34, 38, 0,
+ /* 76 */ 112, 158, 0,
+ /* 79 */ 38, 65, 0,
+ /* 82 */ 1, 50, 56, 0,
+ /* 86 */ 1, 56, 156, 0,
+ /* 90 */ 3, 96, 49, 0,
+ /* 94 */ 96, 39, 53, 0,
+ /* 98 */ 157, 12, 36, 0,
+ /* 102 */ 12, 110, 36, 0,
+ /* 106 */ 15, 107, 29, 0,
+ /* 110 */ 15, 107, 34, 0,
+ /* 114 */ 23, 27, 30, 0,
+ /* 118 */ 69, 34, 39, 0,
+ /* 122 */ 3, 15, 107, 29, 0,
+ /* 127 */ 7, 25, 52, 51, 0,
+ /* 132 */ 15, 142, 85, 111, 0,
+ /* 137 */ 4, 24, 23, 27, 30, 0,
+ /* 143 */ 1, 64, 144, 50, 56, 156, 0,
+ /* 150 */ 4, 24, 23, 27, 30, 61, 0,
+ /* 157 */ 15, 29, 37, 44, 54, 55, 0,
+ /* 164 */ 132, 1, 64, 144, 50, 56, 156, 0,
+ /* 172 */ 3, 15, 107, 29, 150, 44, 55, 124, 0,
+ /* 181 */ 132, 1, 95, 112, 158, 121, 144, 148, 50, 0,
+ /* 191 */ 15, 142, 21, 22, 108, 85, 111, 114, 109, 102, 124, 0,
+ /* 203 */ 3, 15, 107, 21, 22, 29, 34, 37, 44, 54, 55, 124, 0,
+ /* 216 */ 3, 15, 107, 21, 22, 29, 34, 37, 44, 100, 54, 55, 124, 0,
+ /* 230 */ 15, 142, 21, 22, 108, 29, 85, 111, 114, 150, 109, 102, 124, 0,
+ /* 244 */ 15, 142, 21, 22, 108, 29, 85, 111, 37, 114, 150, 109, 102, 124, 0,
+ /* 259 */ 3, 15, 142, 143, 138, 107, 21, 22, 29, 111, 37, 150, 44, 109, 48, 49, 102, 54, 55, 124, 0,
+ /* 280 */ 3, 15, 142, 143, 138, 107, 21, 22, 29, 35, 111, 37, 150, 44, 109, 48, 49, 102, 54, 55, 124, 0,
+ /* 302 */
};
/* These are the main two-stage UCD tables. The fields in each record are:
@@ -192,7 +196,7 @@ offset to multichar other cases or zero (8 bits), offset to other case
or zero (32 bits, signed), script extension (16 bits, signed), and a dummy
16-bit field to make the whole thing a multiple of 4 bytes. */
-const ucd_record PRIV(ucd_records)[] = { /* 11700 bytes, record size 12 */
+const ucd_record PRIV(ucd_records)[] = { /* 11964 bytes, record size 12 */
{ 10, 0, 2, 0, 0, 10, 256, }, /* 0 */
{ 10, 0, 2, 0, 0, 10, 0, }, /* 1 */
{ 10, 0, 1, 0, 0, 10, 0, }, /* 2 */
@@ -390,9 +394,9 @@ const ucd_record PRIV(ucd_records)[] = { /* 11700 bytes, record size 12 */
{ 13, 9, 12, 88, 1, 13, 0, }, /* 194 */
{ 13, 5, 12, 88, -1, 13, 0, }, /* 195 */
{ 13, 26, 12, 0, 0, 13, 0, }, /* 196 */
- { 13, 12, 3, 0, 0, -31, 0, }, /* 197 */
- { 13, 12, 3, 0, 0, -25, 0, }, /* 198 */
- { 28, 12, 3, 0, 0, -28, 0, }, /* 199 */
+ { 13, 12, 3, 0, 0, -34, 0, }, /* 197 */
+ { 13, 12, 3, 0, 0, -28, 0, }, /* 198 */
+ { 28, 12, 3, 0, 0, -31, 0, }, /* 199 */
{ 13, 11, 3, 0, 0, 13, 0, }, /* 200 */
{ 13, 9, 12, 0, 15, 13, 0, }, /* 201 */
{ 13, 5, 12, 0, -15, 13, 0, }, /* 202 */
@@ -413,761 +417,783 @@ const ucd_record PRIV(ucd_records)[] = { /* 11700 bytes, record size 12 */
{ 1, 25, 12, 0, 0, 1, 0, }, /* 217 */
{ 1, 21, 12, 0, 0, 1, 0, }, /* 218 */
{ 1, 23, 12, 0, 0, 1, 0, }, /* 219 */
- { 10, 21, 12, 0, 0, -127, 0, }, /* 220 */
+ { 10, 21, 12, 0, 0, -143, 0, }, /* 220 */
{ 1, 26, 12, 0, 0, 1, 0, }, /* 221 */
{ 1, 12, 3, 0, 0, 1, 0, }, /* 222 */
- { 1, 1, 2, 0, 0, -76, 0, }, /* 223 */
- { 1, 7, 12, 0, 0, 1, 0, }, /* 224 */
- { 10, 6, 12, 0, 0, -153, 0, }, /* 225 */
- { 28, 12, 3, 0, 0, -7, 0, }, /* 226 */
- { 1, 13, 12, 0, 0, -80, 0, }, /* 227 */
- { 1, 21, 12, 0, 0, -4, 0, }, /* 228 */
- { 1, 6, 12, 0, 0, 1, 0, }, /* 229 */
- { 1, 13, 12, 0, 0, 1, 0, }, /* 230 */
- { 50, 21, 12, 0, 0, 50, 0, }, /* 231 */
- { 50, 1, 4, 0, 0, 50, 0, }, /* 232 */
- { 50, 7, 12, 0, 0, 50, 0, }, /* 233 */
- { 50, 12, 3, 0, 0, 50, 0, }, /* 234 */
- { 56, 7, 12, 0, 0, 56, 0, }, /* 235 */
- { 56, 12, 3, 0, 0, 56, 0, }, /* 236 */
- { 64, 13, 12, 0, 0, 64, 0, }, /* 237 */
- { 64, 7, 12, 0, 0, 64, 0, }, /* 238 */
- { 64, 12, 3, 0, 0, 64, 0, }, /* 239 */
- { 64, 6, 12, 0, 0, 64, 0, }, /* 240 */
- { 64, 26, 12, 0, 0, 64, 0, }, /* 241 */
- { 64, 21, 12, 0, 0, 64, 0, }, /* 242 */
- { 64, 23, 12, 0, 0, 64, 0, }, /* 243 */
- { 90, 7, 12, 0, 0, 90, 0, }, /* 244 */
- { 90, 12, 3, 0, 0, 90, 0, }, /* 245 */
- { 90, 6, 12, 0, 0, 90, 0, }, /* 246 */
- { 90, 21, 12, 0, 0, 90, 0, }, /* 247 */
- { 95, 7, 12, 0, 0, 95, 0, }, /* 248 */
- { 95, 12, 3, 0, 0, 95, 0, }, /* 249 */
- { 95, 21, 12, 0, 0, 95, 0, }, /* 250 */
- { 15, 12, 3, 0, 0, 15, 0, }, /* 251 */
- { 15, 10, 5, 0, 0, 15, 0, }, /* 252 */
- { 15, 7, 12, 0, 0, 15, 0, }, /* 253 */
- { 28, 12, 3, 0, 0, -196, 0, }, /* 254 */
- { 28, 12, 3, 0, 0, -183, 0, }, /* 255 */
- { 10, 21, 12, 0, 0, -239, 0, }, /* 256 */
- { 10, 21, 12, 0, 0, -260, 0, }, /* 257 */
- { 15, 13, 12, 0, 0, -122, 0, }, /* 258 */
- { 15, 21, 12, 0, 0, 15, 0, }, /* 259 */
- { 15, 6, 12, 0, 0, 15, 0, }, /* 260 */
- { 3, 7, 12, 0, 0, 3, 0, }, /* 261 */
- { 3, 12, 3, 0, 0, 3, 0, }, /* 262 */
- { 3, 10, 5, 0, 0, 3, 0, }, /* 263 */
- { 3, 10, 3, 0, 0, 3, 0, }, /* 264 */
- { 3, 13, 12, 0, 0, -84, 0, }, /* 265 */
- { 3, 23, 12, 0, 0, 3, 0, }, /* 266 */
- { 3, 15, 12, 0, 0, 3, 0, }, /* 267 */
- { 3, 26, 12, 0, 0, 3, 0, }, /* 268 */
- { 3, 21, 12, 0, 0, 3, 0, }, /* 269 */
- { 22, 12, 3, 0, 0, 22, 0, }, /* 270 */
- { 22, 10, 5, 0, 0, 22, 0, }, /* 271 */
- { 22, 7, 12, 0, 0, 22, 0, }, /* 272 */
- { 22, 13, 12, 0, 0, -58, 0, }, /* 273 */
- { 22, 21, 12, 0, 0, 22, 0, }, /* 274 */
- { 21, 12, 3, 0, 0, 21, 0, }, /* 275 */
- { 21, 10, 5, 0, 0, 21, 0, }, /* 276 */
- { 21, 7, 12, 0, 0, 21, 0, }, /* 277 */
- { 21, 13, 12, 0, 0, -55, 0, }, /* 278 */
- { 21, 21, 12, 0, 0, 21, 0, }, /* 279 */
- { 21, 23, 12, 0, 0, 21, 0, }, /* 280 */
- { 44, 12, 3, 0, 0, 44, 0, }, /* 281 */
- { 44, 10, 5, 0, 0, 44, 0, }, /* 282 */
- { 44, 7, 12, 0, 0, 44, 0, }, /* 283 */
- { 44, 10, 3, 0, 0, 44, 0, }, /* 284 */
- { 44, 13, 12, 0, 0, 44, 0, }, /* 285 */
- { 44, 26, 12, 0, 0, 44, 0, }, /* 286 */
- { 44, 15, 12, 0, 0, 44, 0, }, /* 287 */
- { 54, 12, 3, 0, 0, 54, 0, }, /* 288 */
- { 54, 7, 12, 0, 0, 54, 0, }, /* 289 */
- { 54, 10, 3, 0, 0, 54, 0, }, /* 290 */
- { 54, 10, 5, 0, 0, 54, 0, }, /* 291 */
- { 54, 13, 12, 0, 0, -52, 0, }, /* 292 */
- { 54, 15, 12, 0, 0, -52, 0, }, /* 293 */
- { 54, 26, 12, 0, 0, -52, 0, }, /* 294 */
- { 54, 26, 12, 0, 0, 54, 0, }, /* 295 */
- { 54, 23, 12, 0, 0, 54, 0, }, /* 296 */
- { 55, 12, 3, 0, 0, 55, 0, }, /* 297 */
- { 55, 10, 5, 0, 0, 55, 0, }, /* 298 */
- { 55, 7, 12, 0, 0, 55, 0, }, /* 299 */
- { 55, 13, 12, 0, 0, 55, 0, }, /* 300 */
- { 55, 21, 12, 0, 0, 55, 0, }, /* 301 */
- { 55, 15, 12, 0, 0, 55, 0, }, /* 302 */
- { 55, 26, 12, 0, 0, 55, 0, }, /* 303 */
- { 29, 7, 12, 0, 0, 29, 0, }, /* 304 */
- { 29, 12, 3, 0, 0, 29, 0, }, /* 305 */
- { 29, 10, 5, 0, 0, 29, 0, }, /* 306 */
- { 29, 21, 12, 0, 0, 29, 0, }, /* 307 */
- { 29, 10, 3, 0, 0, 29, 0, }, /* 308 */
- { 29, 13, 12, 0, 0, -67, 0, }, /* 309 */
- { 37, 12, 3, 0, 0, 37, 0, }, /* 310 */
- { 37, 10, 5, 0, 0, 37, 0, }, /* 311 */
- { 37, 7, 12, 0, 0, 37, 0, }, /* 312 */
- { 37, 10, 3, 0, 0, 37, 0, }, /* 313 */
- { 37, 7, 4, 0, 0, 37, 0, }, /* 314 */
- { 37, 26, 12, 0, 0, 37, 0, }, /* 315 */
- { 37, 15, 12, 0, 0, 37, 0, }, /* 316 */
- { 37, 13, 12, 0, 0, 37, 0, }, /* 317 */
- { 48, 12, 3, 0, 0, 48, 0, }, /* 318 */
- { 48, 10, 5, 0, 0, 48, 0, }, /* 319 */
- { 48, 7, 12, 0, 0, 48, 0, }, /* 320 */
- { 48, 10, 3, 0, 0, 48, 0, }, /* 321 */
- { 48, 13, 12, 0, 0, 48, 0, }, /* 322 */
- { 48, 21, 12, 0, 0, 48, 0, }, /* 323 */
- { 57, 7, 12, 0, 0, 57, 0, }, /* 324 */
- { 57, 12, 3, 0, 0, 57, 0, }, /* 325 */
- { 57, 7, 5, 0, 0, 57, 0, }, /* 326 */
- { 57, 6, 12, 0, 0, 57, 0, }, /* 327 */
- { 57, 21, 12, 0, 0, 57, 0, }, /* 328 */
- { 57, 13, 12, 0, 0, 57, 0, }, /* 329 */
- { 33, 7, 12, 0, 0, 33, 0, }, /* 330 */
- { 33, 12, 3, 0, 0, 33, 0, }, /* 331 */
- { 33, 7, 5, 0, 0, 33, 0, }, /* 332 */
- { 33, 6, 12, 0, 0, 33, 0, }, /* 333 */
- { 33, 13, 12, 0, 0, 33, 0, }, /* 334 */
- { 58, 7, 12, 0, 0, 58, 0, }, /* 335 */
- { 58, 26, 12, 0, 0, 58, 0, }, /* 336 */
- { 58, 21, 12, 0, 0, 58, 0, }, /* 337 */
- { 58, 12, 3, 0, 0, 58, 0, }, /* 338 */
- { 58, 13, 12, 0, 0, 58, 0, }, /* 339 */
- { 58, 15, 12, 0, 0, 58, 0, }, /* 340 */
- { 58, 22, 12, 0, 0, 58, 0, }, /* 341 */
- { 58, 18, 12, 0, 0, 58, 0, }, /* 342 */
- { 58, 10, 5, 0, 0, 58, 0, }, /* 343 */
- { 39, 7, 12, 0, 0, 39, 0, }, /* 344 */
- { 39, 10, 12, 0, 0, 39, 0, }, /* 345 */
- { 39, 12, 3, 0, 0, 39, 0, }, /* 346 */
- { 39, 10, 5, 0, 0, 39, 0, }, /* 347 */
- { 39, 13, 12, 0, 0, -88, 0, }, /* 348 */
- { 39, 21, 12, 0, 0, 39, 0, }, /* 349 */
- { 39, 13, 12, 0, 0, 39, 0, }, /* 350 */
- { 39, 26, 12, 0, 0, 39, 0, }, /* 351 */
- { 17, 9, 12, 0, 7264, 17, 0, }, /* 352 */
- { 17, 5, 12, 0, 3008, 17, 0, }, /* 353 */
- { 10, 21, 12, 0, 0, -49, 0, }, /* 354 */
- { 17, 6, 12, 0, 0, 17, 0, }, /* 355 */
- { 24, 7, 6, 0, 0, 24, 0, }, /* 356 */
- { 24, 7, 7, 0, 0, 24, 0, }, /* 357 */
- { 24, 7, 8, 0, 0, 24, 0, }, /* 358 */
- { 16, 7, 12, 0, 0, 16, 0, }, /* 359 */
- { 16, 12, 3, 0, 0, 16, 0, }, /* 360 */
- { 16, 21, 12, 0, 0, 16, 0, }, /* 361 */
- { 16, 15, 12, 0, 0, 16, 0, }, /* 362 */
- { 16, 26, 12, 0, 0, 16, 0, }, /* 363 */
- { 9, 9, 12, 0, 38864, 9, 0, }, /* 364 */
- { 9, 9, 12, 0, 8, 9, 0, }, /* 365 */
- { 9, 5, 12, 0, -8, 9, 0, }, /* 366 */
- { 8, 17, 12, 0, 0, 8, 0, }, /* 367 */
- { 8, 7, 12, 0, 0, 8, 0, }, /* 368 */
- { 8, 26, 12, 0, 0, 8, 0, }, /* 369 */
- { 8, 21, 12, 0, 0, 8, 0, }, /* 370 */
- { 41, 29, 12, 0, 0, 41, 0, }, /* 371 */
- { 41, 7, 12, 0, 0, 41, 0, }, /* 372 */
- { 41, 22, 12, 0, 0, 41, 0, }, /* 373 */
- { 41, 18, 12, 0, 0, 41, 0, }, /* 374 */
- { 46, 7, 12, 0, 0, 46, 0, }, /* 375 */
- { 46, 14, 12, 0, 0, 46, 0, }, /* 376 */
- { 51, 7, 12, 0, 0, 51, 0, }, /* 377 */
- { 51, 12, 3, 0, 0, 51, 0, }, /* 378 */
- { 25, 7, 12, 0, 0, 25, 0, }, /* 379 */
- { 25, 12, 3, 0, 0, 25, 0, }, /* 380 */
- { 10, 21, 12, 0, 0, -117, 0, }, /* 381 */
- { 7, 7, 12, 0, 0, 7, 0, }, /* 382 */
- { 7, 12, 3, 0, 0, 7, 0, }, /* 383 */
- { 52, 7, 12, 0, 0, 52, 0, }, /* 384 */
- { 52, 12, 3, 0, 0, 52, 0, }, /* 385 */
- { 32, 7, 12, 0, 0, 32, 0, }, /* 386 */
- { 32, 12, 3, 0, 0, 32, 0, }, /* 387 */
- { 32, 10, 5, 0, 0, 32, 0, }, /* 388 */
- { 32, 21, 12, 0, 0, 32, 0, }, /* 389 */
- { 32, 6, 12, 0, 0, 32, 0, }, /* 390 */
- { 32, 23, 12, 0, 0, 32, 0, }, /* 391 */
- { 32, 13, 12, 0, 0, 32, 0, }, /* 392 */
- { 32, 15, 12, 0, 0, 32, 0, }, /* 393 */
- { 38, 21, 12, 0, 0, 38, 0, }, /* 394 */
- { 10, 21, 12, 0, 0, -73, 0, }, /* 395 */
- { 38, 17, 12, 0, 0, 38, 0, }, /* 396 */
- { 38, 12, 3, 0, 0, 38, 0, }, /* 397 */
- { 38, 1, 2, 0, 0, 38, 0, }, /* 398 */
- { 38, 13, 12, 0, 0, 38, 0, }, /* 399 */
- { 38, 7, 12, 0, 0, 38, 0, }, /* 400 */
- { 38, 6, 12, 0, 0, 38, 0, }, /* 401 */
- { 35, 7, 12, 0, 0, 35, 0, }, /* 402 */
- { 35, 12, 3, 0, 0, 35, 0, }, /* 403 */
- { 35, 10, 5, 0, 0, 35, 0, }, /* 404 */
- { 35, 26, 12, 0, 0, 35, 0, }, /* 405 */
- { 35, 21, 12, 0, 0, 35, 0, }, /* 406 */
- { 35, 13, 12, 0, 0, 35, 0, }, /* 407 */
- { 53, 7, 12, 0, 0, 53, 0, }, /* 408 */
- { 40, 7, 12, 0, 0, 40, 0, }, /* 409 */
- { 40, 13, 12, 0, 0, 40, 0, }, /* 410 */
- { 40, 15, 12, 0, 0, 40, 0, }, /* 411 */
- { 40, 26, 12, 0, 0, 40, 0, }, /* 412 */
- { 32, 26, 12, 0, 0, 32, 0, }, /* 413 */
- { 6, 7, 12, 0, 0, 6, 0, }, /* 414 */
- { 6, 12, 3, 0, 0, 6, 0, }, /* 415 */
- { 6, 10, 5, 0, 0, 6, 0, }, /* 416 */
- { 6, 21, 12, 0, 0, 6, 0, }, /* 417 */
- { 91, 7, 12, 0, 0, 91, 0, }, /* 418 */
- { 91, 10, 5, 0, 0, 91, 0, }, /* 419 */
- { 91, 12, 3, 0, 0, 91, 0, }, /* 420 */
- { 91, 10, 12, 0, 0, 91, 0, }, /* 421 */
- { 91, 13, 12, 0, 0, 91, 0, }, /* 422 */
- { 91, 21, 12, 0, 0, 91, 0, }, /* 423 */
- { 91, 6, 12, 0, 0, 91, 0, }, /* 424 */
- { 28, 11, 3, 0, 0, 28, 0, }, /* 425 */
- { 62, 12, 3, 0, 0, 62, 0, }, /* 426 */
- { 62, 10, 5, 0, 0, 62, 0, }, /* 427 */
- { 62, 7, 12, 0, 0, 62, 0, }, /* 428 */
- { 62, 10, 3, 0, 0, 62, 0, }, /* 429 */
- { 62, 13, 12, 0, 0, 62, 0, }, /* 430 */
- { 62, 21, 12, 0, 0, 62, 0, }, /* 431 */
- { 62, 26, 12, 0, 0, 62, 0, }, /* 432 */
- { 76, 12, 3, 0, 0, 76, 0, }, /* 433 */
- { 76, 10, 5, 0, 0, 76, 0, }, /* 434 */
- { 76, 7, 12, 0, 0, 76, 0, }, /* 435 */
- { 76, 13, 12, 0, 0, 76, 0, }, /* 436 */
- { 93, 7, 12, 0, 0, 93, 0, }, /* 437 */
- { 93, 12, 3, 0, 0, 93, 0, }, /* 438 */
- { 93, 10, 5, 0, 0, 93, 0, }, /* 439 */
- { 93, 21, 12, 0, 0, 93, 0, }, /* 440 */
- { 70, 7, 12, 0, 0, 70, 0, }, /* 441 */
- { 70, 10, 5, 0, 0, 70, 0, }, /* 442 */
- { 70, 12, 3, 0, 0, 70, 0, }, /* 443 */
- { 70, 21, 12, 0, 0, 70, 0, }, /* 444 */
- { 70, 13, 12, 0, 0, 70, 0, }, /* 445 */
- { 73, 13, 12, 0, 0, 73, 0, }, /* 446 */
- { 73, 7, 12, 0, 0, 73, 0, }, /* 447 */
- { 73, 6, 12, 0, 0, 73, 0, }, /* 448 */
- { 73, 21, 12, 0, 0, 73, 0, }, /* 449 */
- { 13, 5, 12, 63, -6222, 13, 0, }, /* 450 */
- { 13, 5, 12, 67, -6221, 13, 0, }, /* 451 */
- { 13, 5, 12, 71, -6212, 13, 0, }, /* 452 */
- { 13, 5, 12, 75, -6210, 13, 0, }, /* 453 */
- { 13, 5, 12, 79, -6210, 13, 0, }, /* 454 */
- { 13, 5, 12, 79, -6211, 13, 0, }, /* 455 */
- { 13, 5, 12, 84, -6204, 13, 0, }, /* 456 */
- { 13, 5, 12, 88, -6180, 13, 0, }, /* 457 */
- { 13, 5, 12, 108, 35267, 13, 0, }, /* 458 */
- { 17, 9, 12, 0, -3008, 17, 0, }, /* 459 */
- { 76, 21, 12, 0, 0, 76, 0, }, /* 460 */
- { 28, 12, 3, 0, 0, -112, 0, }, /* 461 */
- { 28, 12, 3, 0, 0, 15, 0, }, /* 462 */
- { 10, 21, 12, 0, 0, -37, 0, }, /* 463 */
- { 28, 12, 3, 0, 0, -13, 0, }, /* 464 */
- { 28, 12, 3, 0, 0, -43, 0, }, /* 465 */
- { 28, 12, 3, 0, 0, -146, 0, }, /* 466 */
- { 10, 10, 5, 0, 0, -13, 0, }, /* 467 */
- { 10, 7, 12, 0, 0, -40, 0, }, /* 468 */
- { 10, 7, 12, 0, 0, -13, 0, }, /* 469 */
- { 10, 7, 12, 0, 0, 15, 0, }, /* 470 */
- { 10, 7, 12, 0, 0, -162, 0, }, /* 471 */
- { 10, 7, 12, 0, 0, -37, 0, }, /* 472 */
- { 28, 12, 3, 0, 0, -96, 0, }, /* 473 */
- { 10, 10, 5, 0, 0, 3, 0, }, /* 474 */
- { 28, 12, 3, 0, 0, -37, 0, }, /* 475 */
- { 10, 7, 12, 0, 0, 150, 0, }, /* 476 */
- { 13, 5, 12, 0, 0, 13, 0, }, /* 477 */
- { 13, 6, 12, 0, 0, 13, 0, }, /* 478 */
- { 34, 5, 12, 0, 35332, 34, 0, }, /* 479 */
- { 34, 5, 12, 0, 3814, 34, 0, }, /* 480 */
- { 34, 5, 12, 0, 35384, 34, 0, }, /* 481 */
- { 28, 12, 3, 0, 0, -34, 0, }, /* 482 */
- { 34, 9, 12, 92, 1, 34, 0, }, /* 483 */
- { 34, 5, 12, 92, -1, 34, 0, }, /* 484 */
- { 34, 5, 12, 92, -58, 34, 0, }, /* 485 */
- { 34, 9, 12, 0, -7615, 34, 0, }, /* 486 */
- { 20, 5, 12, 0, 8, 20, 0, }, /* 487 */
- { 20, 9, 12, 0, -8, 20, 0, }, /* 488 */
- { 20, 5, 12, 0, 74, 20, 0, }, /* 489 */
- { 20, 5, 12, 0, 86, 20, 0, }, /* 490 */
- { 20, 5, 12, 0, 100, 20, 0, }, /* 491 */
- { 20, 5, 12, 0, 128, 20, 0, }, /* 492 */
- { 20, 5, 12, 0, 112, 20, 0, }, /* 493 */
- { 20, 5, 12, 0, 126, 20, 0, }, /* 494 */
- { 20, 8, 12, 0, -8, 20, 0, }, /* 495 */
- { 20, 5, 12, 0, 9, 20, 0, }, /* 496 */
- { 20, 9, 12, 0, -74, 20, 0, }, /* 497 */
- { 20, 8, 12, 0, -9, 20, 0, }, /* 498 */
- { 20, 5, 12, 21, -7173, 20, 0, }, /* 499 */
- { 20, 9, 12, 0, -86, 20, 0, }, /* 500 */
- { 20, 9, 12, 0, -100, 20, 0, }, /* 501 */
- { 20, 9, 12, 0, -112, 20, 0, }, /* 502 */
- { 20, 9, 12, 0, -128, 20, 0, }, /* 503 */
- { 20, 9, 12, 0, -126, 20, 0, }, /* 504 */
- { 28, 1, 3, 0, 0, 28, 0, }, /* 505 */
- { 28, 1, 13, 0, 0, 28, 0, }, /* 506 */
- { 10, 27, 2, 0, 0, 10, 0, }, /* 507 */
- { 10, 28, 2, 0, 0, 10, 0, }, /* 508 */
- { 10, 29, 12, 0, 0, -70, 0, }, /* 509 */
- { 10, 21, 14, 0, 0, 10, 0, }, /* 510 */
- { 0, 2, 2, 0, 0, 0, 0, }, /* 511 */
- { 28, 12, 3, 0, 0, -100, 0, }, /* 512 */
- { 10, 9, 12, 0, 0, 10, 0, }, /* 513 */
- { 10, 5, 12, 0, 0, 10, 0, }, /* 514 */
- { 20, 9, 12, 96, -7517, 20, 0, }, /* 515 */
- { 34, 9, 12, 100, -8383, 34, 0, }, /* 516 */
- { 34, 9, 12, 104, -8262, 34, 0, }, /* 517 */
- { 34, 9, 12, 0, 28, 34, 0, }, /* 518 */
- { 10, 7, 12, 0, 0, 10, 0, }, /* 519 */
- { 10, 5, 14, 0, 0, 10, 0, }, /* 520 */
- { 34, 5, 12, 0, -28, 34, 0, }, /* 521 */
- { 34, 14, 12, 0, 16, 34, 0, }, /* 522 */
- { 34, 14, 12, 0, -16, 34, 0, }, /* 523 */
- { 34, 14, 12, 0, 0, 34, 0, }, /* 524 */
- { 10, 25, 14, 0, 0, 10, 0, }, /* 525 */
- { 10, 26, 12, 0, 26, 10, 0, }, /* 526 */
- { 10, 26, 14, 0, 26, 10, 0, }, /* 527 */
- { 10, 26, 12, 0, -26, 10, 0, }, /* 528 */
- { 5, 26, 12, 0, 0, 5, 0, }, /* 529 */
- { 18, 9, 12, 0, 48, 18, 0, }, /* 530 */
- { 18, 5, 12, 0, -48, 18, 0, }, /* 531 */
- { 34, 9, 12, 0, -10743, 34, 0, }, /* 532 */
- { 34, 9, 12, 0, -3814, 34, 0, }, /* 533 */
- { 34, 9, 12, 0, -10727, 34, 0, }, /* 534 */
- { 34, 5, 12, 0, -10795, 34, 0, }, /* 535 */
- { 34, 5, 12, 0, -10792, 34, 0, }, /* 536 */
- { 34, 9, 12, 0, -10780, 34, 0, }, /* 537 */
- { 34, 9, 12, 0, -10749, 34, 0, }, /* 538 */
- { 34, 9, 12, 0, -10783, 34, 0, }, /* 539 */
- { 34, 9, 12, 0, -10782, 34, 0, }, /* 540 */
- { 34, 9, 12, 0, -10815, 34, 0, }, /* 541 */
- { 11, 5, 12, 0, 0, 11, 0, }, /* 542 */
- { 11, 26, 12, 0, 0, 11, 0, }, /* 543 */
- { 11, 12, 3, 0, 0, 11, 0, }, /* 544 */
- { 11, 21, 12, 0, 0, 11, 0, }, /* 545 */
- { 11, 15, 12, 0, 0, 11, 0, }, /* 546 */
- { 17, 5, 12, 0, -7264, 17, 0, }, /* 547 */
- { 59, 7, 12, 0, 0, 59, 0, }, /* 548 */
- { 59, 6, 12, 0, 0, 59, 0, }, /* 549 */
- { 59, 21, 12, 0, 0, 59, 0, }, /* 550 */
- { 59, 12, 3, 0, 0, 59, 0, }, /* 551 */
- { 13, 12, 3, 0, 0, 13, 0, }, /* 552 */
- { 10, 21, 12, 0, 0, -25, 0, }, /* 553 */
- { 23, 26, 12, 0, 0, 23, 0, }, /* 554 */
- { 10, 21, 12, 0, 0, -139, 0, }, /* 555 */
- { 10, 21, 12, 0, 0, -133, 0, }, /* 556 */
- { 23, 6, 12, 0, 0, 23, 0, }, /* 557 */
- { 10, 7, 12, 0, 0, 23, 0, }, /* 558 */
- { 23, 14, 12, 0, 0, 23, 0, }, /* 559 */
- { 10, 22, 12, 0, 0, -139, 0, }, /* 560 */
- { 10, 18, 12, 0, 0, -139, 0, }, /* 561 */
- { 10, 26, 12, 0, 0, -133, 0, }, /* 562 */
- { 10, 17, 12, 0, 0, -133, 0, }, /* 563 */
- { 10, 22, 12, 0, 0, -133, 0, }, /* 564 */
- { 10, 18, 12, 0, 0, -133, 0, }, /* 565 */
- { 28, 12, 3, 0, 0, -16, 0, }, /* 566 */
- { 24, 10, 3, 0, 0, 24, 0, }, /* 567 */
- { 10, 17, 14, 0, 0, -133, 0, }, /* 568 */
- { 10, 6, 12, 0, 0, -64, 0, }, /* 569 */
- { 10, 7, 12, 0, 0, -104, 0, }, /* 570 */
- { 10, 21, 14, 0, 0, -104, 0, }, /* 571 */
- { 10, 26, 12, 0, 0, 23, 0, }, /* 572 */
- { 27, 7, 12, 0, 0, 27, 0, }, /* 573 */
- { 28, 12, 3, 0, 0, -64, 0, }, /* 574 */
- { 10, 24, 12, 0, 0, -64, 0, }, /* 575 */
- { 27, 6, 12, 0, 0, 27, 0, }, /* 576 */
- { 10, 17, 12, 0, 0, -64, 0, }, /* 577 */
- { 30, 7, 12, 0, 0, 30, 0, }, /* 578 */
- { 30, 6, 12, 0, 0, 30, 0, }, /* 579 */
- { 4, 7, 12, 0, 0, 4, 0, }, /* 580 */
- { 24, 7, 12, 0, 0, 24, 0, }, /* 581 */
- { 10, 15, 12, 0, 0, 23, 0, }, /* 582 */
- { 24, 26, 12, 0, 0, 24, 0, }, /* 583 */
- { 10, 26, 14, 0, 0, 23, 0, }, /* 584 */
- { 30, 26, 12, 0, 0, 30, 0, }, /* 585 */
- { 23, 7, 12, 0, 0, 23, 0, }, /* 586 */
- { 61, 7, 12, 0, 0, 61, 0, }, /* 587 */
- { 61, 6, 12, 0, 0, 61, 0, }, /* 588 */
- { 61, 26, 12, 0, 0, 61, 0, }, /* 589 */
- { 86, 7, 12, 0, 0, 86, 0, }, /* 590 */
- { 86, 6, 12, 0, 0, 86, 0, }, /* 591 */
- { 86, 21, 12, 0, 0, 86, 0, }, /* 592 */
- { 77, 7, 12, 0, 0, 77, 0, }, /* 593 */
- { 77, 6, 12, 0, 0, 77, 0, }, /* 594 */
- { 77, 21, 12, 0, 0, 77, 0, }, /* 595 */
- { 77, 13, 12, 0, 0, 77, 0, }, /* 596 */
- { 13, 9, 12, 108, 1, 13, 0, }, /* 597 */
- { 13, 5, 12, 108, -35267, 13, 0, }, /* 598 */
- { 13, 7, 12, 0, 0, 13, 0, }, /* 599 */
- { 13, 21, 12, 0, 0, 13, 0, }, /* 600 */
- { 79, 7, 12, 0, 0, 79, 0, }, /* 601 */
- { 79, 14, 12, 0, 0, 79, 0, }, /* 602 */
- { 79, 12, 3, 0, 0, 79, 0, }, /* 603 */
- { 79, 21, 12, 0, 0, 79, 0, }, /* 604 */
- { 10, 24, 12, 0, 0, -61, 0, }, /* 605 */
- { 34, 9, 12, 0, -35332, 34, 0, }, /* 606 */
- { 34, 9, 12, 0, -42280, 34, 0, }, /* 607 */
- { 34, 5, 12, 0, 48, 34, 0, }, /* 608 */
- { 34, 9, 12, 0, -42308, 34, 0, }, /* 609 */
- { 34, 9, 12, 0, -42319, 34, 0, }, /* 610 */
- { 34, 9, 12, 0, -42315, 34, 0, }, /* 611 */
- { 34, 9, 12, 0, -42305, 34, 0, }, /* 612 */
- { 34, 9, 12, 0, -42258, 34, 0, }, /* 613 */
- { 34, 9, 12, 0, -42282, 34, 0, }, /* 614 */
- { 34, 9, 12, 0, -42261, 34, 0, }, /* 615 */
- { 34, 9, 12, 0, 928, 34, 0, }, /* 616 */
- { 34, 9, 12, 0, -48, 34, 0, }, /* 617 */
- { 34, 9, 12, 0, -42307, 34, 0, }, /* 618 */
- { 34, 9, 12, 0, -35384, 34, 0, }, /* 619 */
- { 49, 7, 12, 0, 0, 49, 0, }, /* 620 */
- { 49, 12, 3, 0, 0, 49, 0, }, /* 621 */
- { 49, 10, 5, 0, 0, 49, 0, }, /* 622 */
- { 49, 26, 12, 0, 0, 49, 0, }, /* 623 */
- { 10, 15, 12, 0, 0, -224, 0, }, /* 624 */
- { 10, 15, 12, 0, 0, -210, 0, }, /* 625 */
- { 10, 26, 12, 0, 0, -171, 0, }, /* 626 */
- { 10, 23, 12, 0, 0, -171, 0, }, /* 627 */
- { 65, 7, 12, 0, 0, 65, 0, }, /* 628 */
- { 65, 21, 12, 0, 0, 65, 0, }, /* 629 */
- { 75, 10, 5, 0, 0, 75, 0, }, /* 630 */
- { 75, 7, 12, 0, 0, 75, 0, }, /* 631 */
- { 75, 12, 3, 0, 0, 75, 0, }, /* 632 */
- { 75, 21, 12, 0, 0, 75, 0, }, /* 633 */
- { 75, 13, 12, 0, 0, 75, 0, }, /* 634 */
- { 15, 12, 3, 0, 0, -13, 0, }, /* 635 */
- { 15, 7, 12, 0, 0, -46, 0, }, /* 636 */
- { 69, 13, 12, 0, 0, 69, 0, }, /* 637 */
- { 69, 7, 12, 0, 0, 69, 0, }, /* 638 */
- { 69, 12, 3, 0, 0, 69, 0, }, /* 639 */
- { 10, 21, 12, 0, 0, -108, 0, }, /* 640 */
- { 69, 21, 12, 0, 0, 69, 0, }, /* 641 */
- { 74, 7, 12, 0, 0, 74, 0, }, /* 642 */
- { 74, 12, 3, 0, 0, 74, 0, }, /* 643 */
- { 74, 10, 5, 0, 0, 74, 0, }, /* 644 */
- { 74, 21, 12, 0, 0, 74, 0, }, /* 645 */
- { 84, 12, 3, 0, 0, 84, 0, }, /* 646 */
- { 84, 10, 5, 0, 0, 84, 0, }, /* 647 */
- { 84, 7, 12, 0, 0, 84, 0, }, /* 648 */
- { 84, 21, 12, 0, 0, 84, 0, }, /* 649 */
- { 10, 6, 12, 0, 0, -19, 0, }, /* 650 */
- { 84, 13, 12, 0, 0, 84, 0, }, /* 651 */
- { 39, 6, 12, 0, 0, 39, 0, }, /* 652 */
- { 68, 7, 12, 0, 0, 68, 0, }, /* 653 */
- { 68, 12, 3, 0, 0, 68, 0, }, /* 654 */
- { 68, 10, 5, 0, 0, 68, 0, }, /* 655 */
- { 68, 13, 12, 0, 0, 68, 0, }, /* 656 */
- { 68, 21, 12, 0, 0, 68, 0, }, /* 657 */
- { 92, 7, 12, 0, 0, 92, 0, }, /* 658 */
- { 92, 12, 3, 0, 0, 92, 0, }, /* 659 */
- { 92, 6, 12, 0, 0, 92, 0, }, /* 660 */
- { 92, 21, 12, 0, 0, 92, 0, }, /* 661 */
- { 87, 7, 12, 0, 0, 87, 0, }, /* 662 */
- { 87, 10, 5, 0, 0, 87, 0, }, /* 663 */
- { 87, 12, 3, 0, 0, 87, 0, }, /* 664 */
- { 87, 21, 12, 0, 0, 87, 0, }, /* 665 */
- { 87, 6, 12, 0, 0, 87, 0, }, /* 666 */
- { 34, 5, 12, 0, -928, 34, 0, }, /* 667 */
- { 9, 5, 12, 0, -38864, 9, 0, }, /* 668 */
- { 87, 13, 12, 0, 0, 87, 0, }, /* 669 */
- { 24, 7, 9, 0, 0, 24, 0, }, /* 670 */
- { 24, 7, 10, 0, 0, 24, 0, }, /* 671 */
- { 0, 4, 12, 0, 0, 0, 0, }, /* 672 */
- { 0, 3, 12, 0, 0, 0, 0, }, /* 673 */
- { 26, 25, 12, 0, 0, 26, 0, }, /* 674 */
- { 1, 24, 12, 0, 0, 1, 0, }, /* 675 */
- { 1, 7, 12, 0, 0, -10, 0, }, /* 676 */
- { 1, 26, 12, 0, 0, -10, 0, }, /* 677 */
- { 10, 6, 3, 0, 0, -64, 0, }, /* 678 */
- { 36, 7, 12, 0, 0, 36, 0, }, /* 679 */
- { 10, 21, 12, 0, 0, -22, 0, }, /* 680 */
- { 10, 15, 12, 0, 0, -92, 0, }, /* 681 */
- { 10, 26, 12, 0, 0, -22, 0, }, /* 682 */
- { 20, 14, 12, 0, 0, 20, 0, }, /* 683 */
- { 20, 15, 12, 0, 0, 20, 0, }, /* 684 */
- { 20, 26, 12, 0, 0, 20, 0, }, /* 685 */
- { 71, 7, 12, 0, 0, 71, 0, }, /* 686 */
- { 67, 7, 12, 0, 0, 67, 0, }, /* 687 */
- { 28, 12, 3, 0, 0, -1, 0, }, /* 688 */
- { 10, 15, 12, 0, 0, -1, 0, }, /* 689 */
- { 42, 7, 12, 0, 0, 42, 0, }, /* 690 */
- { 42, 15, 12, 0, 0, 42, 0, }, /* 691 */
- { 19, 7, 12, 0, 0, 19, 0, }, /* 692 */
- { 19, 14, 12, 0, 0, 19, 0, }, /* 693 */
- { 118, 7, 12, 0, 0, 118, 0, }, /* 694 */
- { 118, 12, 3, 0, 0, 118, 0, }, /* 695 */
- { 60, 7, 12, 0, 0, 60, 0, }, /* 696 */
- { 60, 21, 12, 0, 0, 60, 0, }, /* 697 */
- { 43, 7, 12, 0, 0, 43, 0, }, /* 698 */
- { 43, 21, 12, 0, 0, 43, 0, }, /* 699 */
- { 43, 14, 12, 0, 0, 43, 0, }, /* 700 */
- { 14, 9, 12, 0, 40, 14, 0, }, /* 701 */
- { 14, 5, 12, 0, -40, 14, 0, }, /* 702 */
- { 47, 7, 12, 0, 0, 47, 0, }, /* 703 */
- { 45, 7, 12, 0, 0, 45, 0, }, /* 704 */
- { 45, 13, 12, 0, 0, 45, 0, }, /* 705 */
- { 136, 9, 12, 0, 40, 136, 0, }, /* 706 */
- { 136, 5, 12, 0, -40, 136, 0, }, /* 707 */
- { 106, 7, 12, 0, 0, 106, 0, }, /* 708 */
- { 104, 7, 12, 0, 0, 104, 0, }, /* 709 */
- { 104, 21, 12, 0, 0, 104, 0, }, /* 710 */
- { 110, 7, 12, 0, 0, 110, 0, }, /* 711 */
- { 12, 7, 12, 0, 0, 12, 0, }, /* 712 */
- { 81, 7, 12, 0, 0, 81, 0, }, /* 713 */
- { 81, 21, 12, 0, 0, 81, 0, }, /* 714 */
- { 81, 15, 12, 0, 0, 81, 0, }, /* 715 */
- { 120, 7, 12, 0, 0, 120, 0, }, /* 716 */
- { 120, 26, 12, 0, 0, 120, 0, }, /* 717 */
- { 120, 15, 12, 0, 0, 120, 0, }, /* 718 */
- { 116, 7, 12, 0, 0, 116, 0, }, /* 719 */
- { 116, 15, 12, 0, 0, 116, 0, }, /* 720 */
- { 128, 7, 12, 0, 0, 128, 0, }, /* 721 */
- { 128, 15, 12, 0, 0, 128, 0, }, /* 722 */
- { 66, 7, 12, 0, 0, 66, 0, }, /* 723 */
- { 66, 15, 12, 0, 0, 66, 0, }, /* 724 */
- { 66, 21, 12, 0, 0, 66, 0, }, /* 725 */
- { 72, 7, 12, 0, 0, 72, 0, }, /* 726 */
- { 72, 21, 12, 0, 0, 72, 0, }, /* 727 */
- { 98, 7, 12, 0, 0, 98, 0, }, /* 728 */
- { 97, 7, 12, 0, 0, 97, 0, }, /* 729 */
- { 97, 15, 12, 0, 0, 97, 0, }, /* 730 */
- { 31, 7, 12, 0, 0, 31, 0, }, /* 731 */
- { 31, 12, 3, 0, 0, 31, 0, }, /* 732 */
- { 31, 15, 12, 0, 0, 31, 0, }, /* 733 */
- { 31, 21, 12, 0, 0, 31, 0, }, /* 734 */
- { 88, 7, 12, 0, 0, 88, 0, }, /* 735 */
- { 88, 15, 12, 0, 0, 88, 0, }, /* 736 */
- { 88, 21, 12, 0, 0, 88, 0, }, /* 737 */
- { 117, 7, 12, 0, 0, 117, 0, }, /* 738 */
- { 117, 15, 12, 0, 0, 117, 0, }, /* 739 */
- { 112, 7, 12, 0, 0, 112, 0, }, /* 740 */
- { 112, 26, 12, 0, 0, 112, 0, }, /* 741 */
- { 112, 12, 3, 0, 0, 112, 0, }, /* 742 */
- { 112, 15, 12, 0, 0, 112, 0, }, /* 743 */
- { 112, 21, 12, 0, 0, 112, 0, }, /* 744 */
- { 78, 7, 12, 0, 0, 78, 0, }, /* 745 */
- { 78, 21, 12, 0, 0, 78, 0, }, /* 746 */
- { 83, 7, 12, 0, 0, 83, 0, }, /* 747 */
- { 83, 15, 12, 0, 0, 83, 0, }, /* 748 */
- { 82, 7, 12, 0, 0, 82, 0, }, /* 749 */
- { 82, 15, 12, 0, 0, 82, 0, }, /* 750 */
- { 121, 7, 12, 0, 0, 121, 0, }, /* 751 */
- { 121, 21, 12, 0, 0, 121, 0, }, /* 752 */
- { 121, 15, 12, 0, 0, 121, 0, }, /* 753 */
- { 89, 7, 12, 0, 0, 89, 0, }, /* 754 */
- { 130, 9, 12, 0, 64, 130, 0, }, /* 755 */
- { 130, 5, 12, 0, -64, 130, 0, }, /* 756 */
- { 130, 15, 12, 0, 0, 130, 0, }, /* 757 */
- { 144, 7, 12, 0, 0, 144, 0, }, /* 758 */
- { 144, 12, 3, 0, 0, 144, 0, }, /* 759 */
- { 144, 13, 12, 0, 0, 144, 0, }, /* 760 */
- { 1, 15, 12, 0, 0, 1, 0, }, /* 761 */
- { 156, 7, 12, 0, 0, 156, 0, }, /* 762 */
- { 156, 12, 3, 0, 0, 156, 0, }, /* 763 */
- { 156, 17, 12, 0, 0, 156, 0, }, /* 764 */
- { 147, 7, 12, 0, 0, 147, 0, }, /* 765 */
- { 147, 15, 12, 0, 0, 147, 0, }, /* 766 */
- { 148, 7, 12, 0, 0, 148, 0, }, /* 767 */
- { 148, 12, 3, 0, 0, 148, 0, }, /* 768 */
- { 148, 15, 12, 0, 0, 148, 0, }, /* 769 */
- { 148, 21, 12, 0, 0, 148, 0, }, /* 770 */
- { 153, 7, 12, 0, 0, 153, 0, }, /* 771 */
- { 153, 15, 12, 0, 0, 153, 0, }, /* 772 */
- { 149, 7, 12, 0, 0, 149, 0, }, /* 773 */
- { 94, 10, 5, 0, 0, 94, 0, }, /* 774 */
- { 94, 12, 3, 0, 0, 94, 0, }, /* 775 */
- { 94, 7, 12, 0, 0, 94, 0, }, /* 776 */
- { 94, 21, 12, 0, 0, 94, 0, }, /* 777 */
- { 94, 15, 12, 0, 0, 94, 0, }, /* 778 */
- { 94, 13, 12, 0, 0, 94, 0, }, /* 779 */
- { 85, 12, 3, 0, 0, 85, 0, }, /* 780 */
- { 85, 10, 5, 0, 0, 85, 0, }, /* 781 */
- { 85, 7, 12, 0, 0, 85, 0, }, /* 782 */
- { 85, 21, 12, 0, 0, 85, 0, }, /* 783 */
- { 85, 1, 4, 0, 0, 85, 0, }, /* 784 */
- { 101, 7, 12, 0, 0, 101, 0, }, /* 785 */
- { 101, 13, 12, 0, 0, 101, 0, }, /* 786 */
- { 96, 12, 3, 0, 0, 96, 0, }, /* 787 */
- { 96, 7, 12, 0, 0, 96, 0, }, /* 788 */
- { 96, 10, 5, 0, 0, 96, 0, }, /* 789 */
- { 96, 13, 12, 0, 0, 96, 0, }, /* 790 */
- { 96, 21, 12, 0, 0, 96, 0, }, /* 791 */
- { 111, 7, 12, 0, 0, 111, 0, }, /* 792 */
- { 111, 12, 3, 0, 0, 111, 0, }, /* 793 */
- { 111, 21, 12, 0, 0, 111, 0, }, /* 794 */
- { 100, 12, 3, 0, 0, 100, 0, }, /* 795 */
- { 100, 10, 5, 0, 0, 100, 0, }, /* 796 */
- { 100, 7, 12, 0, 0, 100, 0, }, /* 797 */
- { 100, 7, 4, 0, 0, 100, 0, }, /* 798 */
- { 100, 21, 12, 0, 0, 100, 0, }, /* 799 */
- { 100, 13, 12, 0, 0, 100, 0, }, /* 800 */
- { 48, 15, 12, 0, 0, 48, 0, }, /* 801 */
- { 108, 7, 12, 0, 0, 108, 0, }, /* 802 */
- { 108, 10, 5, 0, 0, 108, 0, }, /* 803 */
- { 108, 12, 3, 0, 0, 108, 0, }, /* 804 */
- { 108, 21, 12, 0, 0, 108, 0, }, /* 805 */
- { 129, 7, 12, 0, 0, 129, 0, }, /* 806 */
- { 129, 21, 12, 0, 0, 129, 0, }, /* 807 */
- { 109, 7, 12, 0, 0, 109, 0, }, /* 808 */
- { 109, 12, 3, 0, 0, 109, 0, }, /* 809 */
- { 109, 10, 5, 0, 0, 109, 0, }, /* 810 */
- { 109, 13, 12, 0, 0, 109, 0, }, /* 811 */
- { 107, 12, 3, 0, 0, 107, 0, }, /* 812 */
- { 107, 12, 3, 0, 0, -52, 0, }, /* 813 */
- { 107, 10, 5, 0, 0, 107, 0, }, /* 814 */
- { 107, 10, 5, 0, 0, -52, 0, }, /* 815 */
- { 107, 7, 12, 0, 0, 107, 0, }, /* 816 */
- { 28, 12, 3, 0, 0, -52, 0, }, /* 817 */
- { 107, 10, 3, 0, 0, 107, 0, }, /* 818 */
- { 135, 7, 12, 0, 0, 135, 0, }, /* 819 */
- { 135, 10, 5, 0, 0, 135, 0, }, /* 820 */
- { 135, 12, 3, 0, 0, 135, 0, }, /* 821 */
- { 135, 21, 12, 0, 0, 135, 0, }, /* 822 */
- { 135, 13, 12, 0, 0, 135, 0, }, /* 823 */
- { 124, 7, 12, 0, 0, 124, 0, }, /* 824 */
- { 124, 10, 3, 0, 0, 124, 0, }, /* 825 */
- { 124, 10, 5, 0, 0, 124, 0, }, /* 826 */
- { 124, 12, 3, 0, 0, 124, 0, }, /* 827 */
- { 124, 21, 12, 0, 0, 124, 0, }, /* 828 */
- { 124, 13, 12, 0, 0, 124, 0, }, /* 829 */
- { 123, 7, 12, 0, 0, 123, 0, }, /* 830 */
- { 123, 10, 3, 0, 0, 123, 0, }, /* 831 */
- { 123, 10, 5, 0, 0, 123, 0, }, /* 832 */
- { 123, 12, 3, 0, 0, 123, 0, }, /* 833 */
- { 123, 21, 12, 0, 0, 123, 0, }, /* 834 */
- { 114, 7, 12, 0, 0, 114, 0, }, /* 835 */
- { 114, 10, 5, 0, 0, 114, 0, }, /* 836 */
- { 114, 12, 3, 0, 0, 114, 0, }, /* 837 */
- { 114, 21, 12, 0, 0, 114, 0, }, /* 838 */
- { 114, 13, 12, 0, 0, 114, 0, }, /* 839 */
- { 102, 7, 12, 0, 0, 102, 0, }, /* 840 */
- { 102, 12, 3, 0, 0, 102, 0, }, /* 841 */
- { 102, 10, 5, 0, 0, 102, 0, }, /* 842 */
- { 102, 13, 12, 0, 0, 102, 0, }, /* 843 */
- { 126, 7, 12, 0, 0, 126, 0, }, /* 844 */
- { 126, 12, 3, 0, 0, 126, 0, }, /* 845 */
- { 126, 10, 5, 0, 0, 126, 0, }, /* 846 */
- { 126, 13, 12, 0, 0, 126, 0, }, /* 847 */
- { 126, 15, 12, 0, 0, 126, 0, }, /* 848 */
- { 126, 21, 12, 0, 0, 126, 0, }, /* 849 */
- { 126, 26, 12, 0, 0, 126, 0, }, /* 850 */
- { 142, 7, 12, 0, 0, 142, 0, }, /* 851 */
- { 142, 10, 5, 0, 0, 142, 0, }, /* 852 */
- { 142, 12, 3, 0, 0, 142, 0, }, /* 853 */
- { 142, 21, 12, 0, 0, 142, 0, }, /* 854 */
- { 125, 9, 12, 0, 32, 125, 0, }, /* 855 */
- { 125, 5, 12, 0, -32, 125, 0, }, /* 856 */
- { 125, 13, 12, 0, 0, 125, 0, }, /* 857 */
- { 125, 15, 12, 0, 0, 125, 0, }, /* 858 */
- { 125, 7, 12, 0, 0, 125, 0, }, /* 859 */
- { 154, 7, 12, 0, 0, 154, 0, }, /* 860 */
- { 154, 10, 3, 0, 0, 154, 0, }, /* 861 */
- { 154, 10, 5, 0, 0, 154, 0, }, /* 862 */
- { 154, 12, 3, 0, 0, 154, 0, }, /* 863 */
- { 154, 7, 4, 0, 0, 154, 0, }, /* 864 */
- { 154, 21, 12, 0, 0, 154, 0, }, /* 865 */
- { 154, 13, 12, 0, 0, 154, 0, }, /* 866 */
- { 150, 7, 12, 0, 0, 150, 0, }, /* 867 */
- { 150, 10, 5, 0, 0, 150, 0, }, /* 868 */
- { 150, 12, 3, 0, 0, 150, 0, }, /* 869 */
- { 150, 21, 12, 0, 0, 150, 0, }, /* 870 */
- { 141, 7, 12, 0, 0, 141, 0, }, /* 871 */
- { 141, 12, 3, 0, 0, 141, 0, }, /* 872 */
- { 141, 10, 5, 0, 0, 141, 0, }, /* 873 */
- { 141, 7, 4, 0, 0, 141, 0, }, /* 874 */
- { 141, 21, 12, 0, 0, 141, 0, }, /* 875 */
- { 140, 7, 12, 0, 0, 140, 0, }, /* 876 */
- { 140, 12, 3, 0, 0, 140, 0, }, /* 877 */
- { 140, 10, 5, 0, 0, 140, 0, }, /* 878 */
- { 140, 7, 4, 0, 0, 140, 0, }, /* 879 */
- { 140, 21, 12, 0, 0, 140, 0, }, /* 880 */
- { 122, 7, 12, 0, 0, 122, 0, }, /* 881 */
- { 133, 7, 12, 0, 0, 133, 0, }, /* 882 */
- { 133, 10, 5, 0, 0, 133, 0, }, /* 883 */
- { 133, 12, 3, 0, 0, 133, 0, }, /* 884 */
- { 133, 21, 12, 0, 0, 133, 0, }, /* 885 */
- { 133, 13, 12, 0, 0, 133, 0, }, /* 886 */
- { 133, 15, 12, 0, 0, 133, 0, }, /* 887 */
- { 134, 21, 12, 0, 0, 134, 0, }, /* 888 */
- { 134, 7, 12, 0, 0, 134, 0, }, /* 889 */
- { 134, 12, 3, 0, 0, 134, 0, }, /* 890 */
- { 134, 10, 5, 0, 0, 134, 0, }, /* 891 */
- { 138, 7, 12, 0, 0, 138, 0, }, /* 892 */
- { 138, 12, 3, 0, 0, 138, 0, }, /* 893 */
- { 138, 7, 4, 0, 0, 138, 0, }, /* 894 */
- { 138, 13, 12, 0, 0, 138, 0, }, /* 895 */
- { 143, 7, 12, 0, 0, 143, 0, }, /* 896 */
- { 143, 10, 5, 0, 0, 143, 0, }, /* 897 */
- { 143, 12, 3, 0, 0, 143, 0, }, /* 898 */
- { 143, 13, 12, 0, 0, 143, 0, }, /* 899 */
- { 145, 7, 12, 0, 0, 145, 0, }, /* 900 */
- { 145, 12, 3, 0, 0, 145, 0, }, /* 901 */
- { 145, 10, 5, 0, 0, 145, 0, }, /* 902 */
- { 145, 21, 12, 0, 0, 145, 0, }, /* 903 */
- { 54, 15, 12, 0, 0, 54, 0, }, /* 904 */
- { 54, 21, 12, 0, 0, 54, 0, }, /* 905 */
- { 63, 7, 12, 0, 0, 63, 0, }, /* 906 */
- { 63, 14, 12, 0, 0, 63, 0, }, /* 907 */
- { 63, 21, 12, 0, 0, 63, 0, }, /* 908 */
- { 80, 7, 12, 0, 0, 80, 0, }, /* 909 */
- { 80, 1, 2, 0, 0, 80, 0, }, /* 910 */
- { 127, 7, 12, 0, 0, 127, 0, }, /* 911 */
- { 115, 7, 12, 0, 0, 115, 0, }, /* 912 */
- { 115, 13, 12, 0, 0, 115, 0, }, /* 913 */
- { 115, 21, 12, 0, 0, 115, 0, }, /* 914 */
- { 103, 7, 12, 0, 0, 103, 0, }, /* 915 */
- { 103, 12, 3, 0, 0, 103, 0, }, /* 916 */
- { 103, 21, 12, 0, 0, 103, 0, }, /* 917 */
- { 119, 7, 12, 0, 0, 119, 0, }, /* 918 */
- { 119, 12, 3, 0, 0, 119, 0, }, /* 919 */
- { 119, 21, 12, 0, 0, 119, 0, }, /* 920 */
- { 119, 26, 12, 0, 0, 119, 0, }, /* 921 */
- { 119, 6, 12, 0, 0, 119, 0, }, /* 922 */
- { 119, 13, 12, 0, 0, 119, 0, }, /* 923 */
- { 119, 15, 12, 0, 0, 119, 0, }, /* 924 */
- { 146, 9, 12, 0, 32, 146, 0, }, /* 925 */
- { 146, 5, 12, 0, -32, 146, 0, }, /* 926 */
- { 146, 15, 12, 0, 0, 146, 0, }, /* 927 */
- { 146, 21, 12, 0, 0, 146, 0, }, /* 928 */
- { 99, 7, 12, 0, 0, 99, 0, }, /* 929 */
- { 99, 12, 3, 0, 0, 99, 0, }, /* 930 */
- { 99, 10, 5, 0, 0, 99, 0, }, /* 931 */
- { 99, 6, 12, 0, 0, 99, 0, }, /* 932 */
- { 137, 6, 12, 0, 0, 137, 0, }, /* 933 */
- { 139, 6, 12, 0, 0, 139, 0, }, /* 934 */
- { 155, 12, 3, 0, 0, 155, 0, }, /* 935 */
- { 23, 10, 5, 0, 0, 23, 0, }, /* 936 */
- { 137, 7, 12, 0, 0, 137, 0, }, /* 937 */
- { 155, 7, 12, 0, 0, 155, 0, }, /* 938 */
- { 139, 7, 12, 0, 0, 139, 0, }, /* 939 */
- { 105, 7, 12, 0, 0, 105, 0, }, /* 940 */
- { 105, 26, 12, 0, 0, 105, 0, }, /* 941 */
- { 105, 12, 3, 0, 0, 105, 0, }, /* 942 */
- { 105, 21, 12, 0, 0, 105, 0, }, /* 943 */
- { 10, 1, 2, 0, 0, 105, 0, }, /* 944 */
- { 10, 10, 3, 0, 0, 10, 0, }, /* 945 */
- { 10, 10, 5, 0, 0, 10, 0, }, /* 946 */
- { 20, 12, 3, 0, 0, 20, 0, }, /* 947 */
- { 131, 26, 12, 0, 0, 131, 0, }, /* 948 */
- { 131, 12, 3, 0, 0, 131, 0, }, /* 949 */
- { 131, 21, 12, 0, 0, 131, 0, }, /* 950 */
- { 18, 12, 3, 0, 0, 18, 0, }, /* 951 */
- { 151, 7, 12, 0, 0, 151, 0, }, /* 952 */
- { 151, 12, 3, 0, 0, 151, 0, }, /* 953 */
- { 151, 6, 12, 0, 0, 151, 0, }, /* 954 */
- { 151, 13, 12, 0, 0, 151, 0, }, /* 955 */
- { 151, 26, 12, 0, 0, 151, 0, }, /* 956 */
- { 152, 7, 12, 0, 0, 152, 0, }, /* 957 */
- { 152, 12, 3, 0, 0, 152, 0, }, /* 958 */
- { 152, 13, 12, 0, 0, 152, 0, }, /* 959 */
- { 152, 23, 12, 0, 0, 152, 0, }, /* 960 */
- { 113, 7, 12, 0, 0, 113, 0, }, /* 961 */
- { 113, 15, 12, 0, 0, 113, 0, }, /* 962 */
- { 113, 12, 3, 0, 0, 113, 0, }, /* 963 */
- { 132, 9, 12, 0, 34, 132, 0, }, /* 964 */
- { 132, 5, 12, 0, -34, 132, 0, }, /* 965 */
- { 132, 12, 3, 0, 0, 132, 0, }, /* 966 */
- { 132, 6, 12, 0, 0, 132, 0, }, /* 967 */
- { 132, 13, 12, 0, 0, 132, 0, }, /* 968 */
- { 132, 21, 12, 0, 0, 132, 0, }, /* 969 */
- { 0, 2, 14, 0, 0, 0, 0, }, /* 970 */
- { 10, 26, 11, 0, 0, 10, 0, }, /* 971 */
- { 27, 26, 12, 0, 0, 27, 0, }, /* 972 */
- { 10, 24, 3, 0, 0, 10, 0, }, /* 973 */
- { 10, 1, 3, 0, 0, 10, 0, }, /* 974 */
+ { 1, 1, 2, 0, 0, -82, 0, }, /* 223 */
+ { 10, 21, 12, 0, 0, -164, 0, }, /* 224 */
+ { 1, 7, 12, 0, 0, 1, 0, }, /* 225 */
+ { 10, 6, 12, 0, 0, -181, 0, }, /* 226 */
+ { 28, 12, 3, 0, 0, -10, 0, }, /* 227 */
+ { 1, 13, 12, 0, 0, -86, 0, }, /* 228 */
+ { 1, 21, 12, 0, 0, -4, 0, }, /* 229 */
+ { 1, 6, 12, 0, 0, 1, 0, }, /* 230 */
+ { 1, 13, 12, 0, 0, 1, 0, }, /* 231 */
+ { 50, 21, 12, 0, 0, 50, 0, }, /* 232 */
+ { 50, 1, 4, 0, 0, 50, 0, }, /* 233 */
+ { 50, 7, 12, 0, 0, 50, 0, }, /* 234 */
+ { 50, 12, 3, 0, 0, 50, 0, }, /* 235 */
+ { 56, 7, 12, 0, 0, 56, 0, }, /* 236 */
+ { 56, 12, 3, 0, 0, 56, 0, }, /* 237 */
+ { 64, 13, 12, 0, 0, 64, 0, }, /* 238 */
+ { 64, 7, 12, 0, 0, 64, 0, }, /* 239 */
+ { 64, 12, 3, 0, 0, 64, 0, }, /* 240 */
+ { 64, 6, 12, 0, 0, 64, 0, }, /* 241 */
+ { 64, 26, 12, 0, 0, 64, 0, }, /* 242 */
+ { 64, 21, 12, 0, 0, 64, 0, }, /* 243 */
+ { 64, 23, 12, 0, 0, 64, 0, }, /* 244 */
+ { 90, 7, 12, 0, 0, 90, 0, }, /* 245 */
+ { 90, 12, 3, 0, 0, 90, 0, }, /* 246 */
+ { 90, 6, 12, 0, 0, 90, 0, }, /* 247 */
+ { 90, 21, 12, 0, 0, 90, 0, }, /* 248 */
+ { 95, 7, 12, 0, 0, 95, 0, }, /* 249 */
+ { 95, 12, 3, 0, 0, 95, 0, }, /* 250 */
+ { 95, 21, 12, 0, 0, 95, 0, }, /* 251 */
+ { 1, 24, 12, 0, 0, 1, 0, }, /* 252 */
+ { 15, 12, 3, 0, 0, 15, 0, }, /* 253 */
+ { 15, 10, 5, 0, 0, 15, 0, }, /* 254 */
+ { 15, 7, 12, 0, 0, 15, 0, }, /* 255 */
+ { 28, 12, 3, 0, 0, -216, 0, }, /* 256 */
+ { 28, 12, 3, 0, 0, -203, 0, }, /* 257 */
+ { 10, 21, 12, 0, 0, -259, 0, }, /* 258 */
+ { 10, 21, 12, 0, 0, -280, 0, }, /* 259 */
+ { 15, 13, 12, 0, 0, -132, 0, }, /* 260 */
+ { 15, 21, 12, 0, 0, 15, 0, }, /* 261 */
+ { 15, 6, 12, 0, 0, 15, 0, }, /* 262 */
+ { 3, 7, 12, 0, 0, 3, 0, }, /* 263 */
+ { 3, 12, 3, 0, 0, 3, 0, }, /* 264 */
+ { 3, 10, 5, 0, 0, 3, 0, }, /* 265 */
+ { 3, 10, 3, 0, 0, 3, 0, }, /* 266 */
+ { 3, 13, 12, 0, 0, -90, 0, }, /* 267 */
+ { 3, 23, 12, 0, 0, 3, 0, }, /* 268 */
+ { 3, 15, 12, 0, 0, 3, 0, }, /* 269 */
+ { 3, 26, 12, 0, 0, 3, 0, }, /* 270 */
+ { 3, 21, 12, 0, 0, 3, 0, }, /* 271 */
+ { 22, 12, 3, 0, 0, 22, 0, }, /* 272 */
+ { 22, 10, 5, 0, 0, 22, 0, }, /* 273 */
+ { 22, 7, 12, 0, 0, 22, 0, }, /* 274 */
+ { 22, 13, 12, 0, 0, -61, 0, }, /* 275 */
+ { 22, 21, 12, 0, 0, 22, 0, }, /* 276 */
+ { 21, 12, 3, 0, 0, 21, 0, }, /* 277 */
+ { 21, 10, 5, 0, 0, 21, 0, }, /* 278 */
+ { 21, 7, 12, 0, 0, 21, 0, }, /* 279 */
+ { 21, 13, 12, 0, 0, -58, 0, }, /* 280 */
+ { 21, 21, 12, 0, 0, 21, 0, }, /* 281 */
+ { 21, 23, 12, 0, 0, 21, 0, }, /* 282 */
+ { 44, 12, 3, 0, 0, 44, 0, }, /* 283 */
+ { 44, 10, 5, 0, 0, 44, 0, }, /* 284 */
+ { 44, 7, 12, 0, 0, 44, 0, }, /* 285 */
+ { 44, 10, 3, 0, 0, 44, 0, }, /* 286 */
+ { 44, 13, 12, 0, 0, 44, 0, }, /* 287 */
+ { 44, 26, 12, 0, 0, 44, 0, }, /* 288 */
+ { 44, 15, 12, 0, 0, 44, 0, }, /* 289 */
+ { 54, 12, 3, 0, 0, 54, 0, }, /* 290 */
+ { 54, 7, 12, 0, 0, 54, 0, }, /* 291 */
+ { 54, 10, 3, 0, 0, 54, 0, }, /* 292 */
+ { 54, 10, 5, 0, 0, 54, 0, }, /* 293 */
+ { 54, 13, 12, 0, 0, -55, 0, }, /* 294 */
+ { 54, 15, 12, 0, 0, -55, 0, }, /* 295 */
+ { 54, 26, 12, 0, 0, -55, 0, }, /* 296 */
+ { 54, 26, 12, 0, 0, 54, 0, }, /* 297 */
+ { 54, 23, 12, 0, 0, 54, 0, }, /* 298 */
+ { 55, 12, 3, 0, 0, 55, 0, }, /* 299 */
+ { 55, 10, 5, 0, 0, 55, 0, }, /* 300 */
+ { 55, 7, 12, 0, 0, 55, 0, }, /* 301 */
+ { 55, 13, 12, 0, 0, 55, 0, }, /* 302 */
+ { 55, 21, 12, 0, 0, 55, 0, }, /* 303 */
+ { 55, 15, 12, 0, 0, 55, 0, }, /* 304 */
+ { 55, 26, 12, 0, 0, 55, 0, }, /* 305 */
+ { 29, 7, 12, 0, 0, 29, 0, }, /* 306 */
+ { 29, 12, 3, 0, 0, 29, 0, }, /* 307 */
+ { 29, 10, 5, 0, 0, 29, 0, }, /* 308 */
+ { 29, 21, 12, 0, 0, 29, 0, }, /* 309 */
+ { 29, 10, 3, 0, 0, 29, 0, }, /* 310 */
+ { 29, 13, 12, 0, 0, -70, 0, }, /* 311 */
+ { 37, 12, 3, 0, 0, 37, 0, }, /* 312 */
+ { 37, 10, 5, 0, 0, 37, 0, }, /* 313 */
+ { 37, 7, 12, 0, 0, 37, 0, }, /* 314 */
+ { 37, 10, 3, 0, 0, 37, 0, }, /* 315 */
+ { 37, 7, 4, 0, 0, 37, 0, }, /* 316 */
+ { 37, 26, 12, 0, 0, 37, 0, }, /* 317 */
+ { 37, 15, 12, 0, 0, 37, 0, }, /* 318 */
+ { 37, 13, 12, 0, 0, 37, 0, }, /* 319 */
+ { 48, 12, 3, 0, 0, 48, 0, }, /* 320 */
+ { 48, 10, 5, 0, 0, 48, 0, }, /* 321 */
+ { 48, 7, 12, 0, 0, 48, 0, }, /* 322 */
+ { 48, 10, 3, 0, 0, 48, 0, }, /* 323 */
+ { 48, 13, 12, 0, 0, 48, 0, }, /* 324 */
+ { 48, 21, 12, 0, 0, 48, 0, }, /* 325 */
+ { 57, 7, 12, 0, 0, 57, 0, }, /* 326 */
+ { 57, 12, 3, 0, 0, 57, 0, }, /* 327 */
+ { 57, 7, 5, 0, 0, 57, 0, }, /* 328 */
+ { 57, 6, 12, 0, 0, 57, 0, }, /* 329 */
+ { 57, 21, 12, 0, 0, 57, 0, }, /* 330 */
+ { 57, 13, 12, 0, 0, 57, 0, }, /* 331 */
+ { 33, 7, 12, 0, 0, 33, 0, }, /* 332 */
+ { 33, 12, 3, 0, 0, 33, 0, }, /* 333 */
+ { 33, 7, 5, 0, 0, 33, 0, }, /* 334 */
+ { 33, 6, 12, 0, 0, 33, 0, }, /* 335 */
+ { 33, 13, 12, 0, 0, 33, 0, }, /* 336 */
+ { 58, 7, 12, 0, 0, 58, 0, }, /* 337 */
+ { 58, 26, 12, 0, 0, 58, 0, }, /* 338 */
+ { 58, 21, 12, 0, 0, 58, 0, }, /* 339 */
+ { 58, 12, 3, 0, 0, 58, 0, }, /* 340 */
+ { 58, 13, 12, 0, 0, 58, 0, }, /* 341 */
+ { 58, 15, 12, 0, 0, 58, 0, }, /* 342 */
+ { 58, 22, 12, 0, 0, 58, 0, }, /* 343 */
+ { 58, 18, 12, 0, 0, 58, 0, }, /* 344 */
+ { 58, 10, 5, 0, 0, 58, 0, }, /* 345 */
+ { 39, 7, 12, 0, 0, 39, 0, }, /* 346 */
+ { 39, 10, 12, 0, 0, 39, 0, }, /* 347 */
+ { 39, 12, 3, 0, 0, 39, 0, }, /* 348 */
+ { 39, 10, 5, 0, 0, 39, 0, }, /* 349 */
+ { 39, 13, 12, 0, 0, -94, 0, }, /* 350 */
+ { 39, 21, 12, 0, 0, 39, 0, }, /* 351 */
+ { 39, 13, 12, 0, 0, 39, 0, }, /* 352 */
+ { 39, 26, 12, 0, 0, 39, 0, }, /* 353 */
+ { 17, 9, 12, 0, 7264, 17, 0, }, /* 354 */
+ { 17, 5, 12, 0, 3008, 17, 0, }, /* 355 */
+ { 10, 21, 12, 0, 0, -52, 0, }, /* 356 */
+ { 17, 6, 12, 0, 0, 17, 0, }, /* 357 */
+ { 24, 7, 6, 0, 0, 24, 0, }, /* 358 */
+ { 24, 7, 7, 0, 0, 24, 0, }, /* 359 */
+ { 24, 7, 8, 0, 0, 24, 0, }, /* 360 */
+ { 16, 7, 12, 0, 0, 16, 0, }, /* 361 */
+ { 16, 12, 3, 0, 0, 16, 0, }, /* 362 */
+ { 16, 21, 12, 0, 0, 16, 0, }, /* 363 */
+ { 16, 15, 12, 0, 0, 16, 0, }, /* 364 */
+ { 16, 26, 12, 0, 0, 16, 0, }, /* 365 */
+ { 9, 9, 12, 0, 38864, 9, 0, }, /* 366 */
+ { 9, 9, 12, 0, 8, 9, 0, }, /* 367 */
+ { 9, 5, 12, 0, -8, 9, 0, }, /* 368 */
+ { 8, 17, 12, 0, 0, 8, 0, }, /* 369 */
+ { 8, 7, 12, 0, 0, 8, 0, }, /* 370 */
+ { 8, 26, 12, 0, 0, 8, 0, }, /* 371 */
+ { 8, 21, 12, 0, 0, 8, 0, }, /* 372 */
+ { 41, 29, 12, 0, 0, 41, 0, }, /* 373 */
+ { 41, 7, 12, 0, 0, 41, 0, }, /* 374 */
+ { 41, 22, 12, 0, 0, 41, 0, }, /* 375 */
+ { 41, 18, 12, 0, 0, 41, 0, }, /* 376 */
+ { 46, 7, 12, 0, 0, 46, 0, }, /* 377 */
+ { 46, 14, 12, 0, 0, 46, 0, }, /* 378 */
+ { 51, 7, 12, 0, 0, 51, 0, }, /* 379 */
+ { 51, 12, 3, 0, 0, 51, 0, }, /* 380 */
+ { 51, 10, 5, 0, 0, 51, 0, }, /* 381 */
+ { 25, 7, 12, 0, 0, 25, 0, }, /* 382 */
+ { 25, 12, 3, 0, 0, 25, 0, }, /* 383 */
+ { 25, 10, 5, 0, 0, 25, 0, }, /* 384 */
+ { 10, 21, 12, 0, 0, -127, 0, }, /* 385 */
+ { 7, 7, 12, 0, 0, 7, 0, }, /* 386 */
+ { 7, 12, 3, 0, 0, 7, 0, }, /* 387 */
+ { 52, 7, 12, 0, 0, 52, 0, }, /* 388 */
+ { 52, 12, 3, 0, 0, 52, 0, }, /* 389 */
+ { 32, 7, 12, 0, 0, 32, 0, }, /* 390 */
+ { 32, 12, 3, 0, 0, 32, 0, }, /* 391 */
+ { 32, 10, 5, 0, 0, 32, 0, }, /* 392 */
+ { 32, 21, 12, 0, 0, 32, 0, }, /* 393 */
+ { 32, 6, 12, 0, 0, 32, 0, }, /* 394 */
+ { 32, 23, 12, 0, 0, 32, 0, }, /* 395 */
+ { 32, 13, 12, 0, 0, 32, 0, }, /* 396 */
+ { 32, 15, 12, 0, 0, 32, 0, }, /* 397 */
+ { 38, 21, 12, 0, 0, 38, 0, }, /* 398 */
+ { 10, 21, 12, 0, 0, -79, 0, }, /* 399 */
+ { 38, 17, 12, 0, 0, 38, 0, }, /* 400 */
+ { 38, 12, 3, 0, 0, 38, 0, }, /* 401 */
+ { 38, 1, 2, 0, 0, 38, 0, }, /* 402 */
+ { 38, 13, 12, 0, 0, 38, 0, }, /* 403 */
+ { 38, 7, 12, 0, 0, 38, 0, }, /* 404 */
+ { 38, 6, 12, 0, 0, 38, 0, }, /* 405 */
+ { 35, 7, 12, 0, 0, 35, 0, }, /* 406 */
+ { 35, 12, 3, 0, 0, 35, 0, }, /* 407 */
+ { 35, 10, 5, 0, 0, 35, 0, }, /* 408 */
+ { 35, 26, 12, 0, 0, 35, 0, }, /* 409 */
+ { 35, 21, 12, 0, 0, 35, 0, }, /* 410 */
+ { 35, 13, 12, 0, 0, 35, 0, }, /* 411 */
+ { 53, 7, 12, 0, 0, 53, 0, }, /* 412 */
+ { 40, 7, 12, 0, 0, 40, 0, }, /* 413 */
+ { 40, 13, 12, 0, 0, 40, 0, }, /* 414 */
+ { 40, 15, 12, 0, 0, 40, 0, }, /* 415 */
+ { 40, 26, 12, 0, 0, 40, 0, }, /* 416 */
+ { 32, 26, 12, 0, 0, 32, 0, }, /* 417 */
+ { 6, 7, 12, 0, 0, 6, 0, }, /* 418 */
+ { 6, 12, 3, 0, 0, 6, 0, }, /* 419 */
+ { 6, 10, 5, 0, 0, 6, 0, }, /* 420 */
+ { 6, 21, 12, 0, 0, 6, 0, }, /* 421 */
+ { 91, 7, 12, 0, 0, 91, 0, }, /* 422 */
+ { 91, 10, 5, 0, 0, 91, 0, }, /* 423 */
+ { 91, 12, 3, 0, 0, 91, 0, }, /* 424 */
+ { 91, 10, 12, 0, 0, 91, 0, }, /* 425 */
+ { 91, 13, 12, 0, 0, 91, 0, }, /* 426 */
+ { 91, 21, 12, 0, 0, 91, 0, }, /* 427 */
+ { 91, 6, 12, 0, 0, 91, 0, }, /* 428 */
+ { 28, 11, 3, 0, 0, 28, 0, }, /* 429 */
+ { 62, 12, 3, 0, 0, 62, 0, }, /* 430 */
+ { 62, 10, 5, 0, 0, 62, 0, }, /* 431 */
+ { 62, 7, 12, 0, 0, 62, 0, }, /* 432 */
+ { 62, 10, 3, 0, 0, 62, 0, }, /* 433 */
+ { 62, 13, 12, 0, 0, 62, 0, }, /* 434 */
+ { 62, 21, 12, 0, 0, 62, 0, }, /* 435 */
+ { 62, 26, 12, 0, 0, 62, 0, }, /* 436 */
+ { 76, 12, 3, 0, 0, 76, 0, }, /* 437 */
+ { 76, 10, 5, 0, 0, 76, 0, }, /* 438 */
+ { 76, 7, 12, 0, 0, 76, 0, }, /* 439 */
+ { 76, 13, 12, 0, 0, 76, 0, }, /* 440 */
+ { 93, 7, 12, 0, 0, 93, 0, }, /* 441 */
+ { 93, 12, 3, 0, 0, 93, 0, }, /* 442 */
+ { 93, 10, 5, 0, 0, 93, 0, }, /* 443 */
+ { 93, 21, 12, 0, 0, 93, 0, }, /* 444 */
+ { 70, 7, 12, 0, 0, 70, 0, }, /* 445 */
+ { 70, 10, 5, 0, 0, 70, 0, }, /* 446 */
+ { 70, 12, 3, 0, 0, 70, 0, }, /* 447 */
+ { 70, 21, 12, 0, 0, 70, 0, }, /* 448 */
+ { 70, 13, 12, 0, 0, 70, 0, }, /* 449 */
+ { 73, 13, 12, 0, 0, 73, 0, }, /* 450 */
+ { 73, 7, 12, 0, 0, 73, 0, }, /* 451 */
+ { 73, 6, 12, 0, 0, 73, 0, }, /* 452 */
+ { 73, 21, 12, 0, 0, 73, 0, }, /* 453 */
+ { 13, 5, 12, 63, -6222, 13, 0, }, /* 454 */
+ { 13, 5, 12, 67, -6221, 13, 0, }, /* 455 */
+ { 13, 5, 12, 71, -6212, 13, 0, }, /* 456 */
+ { 13, 5, 12, 75, -6210, 13, 0, }, /* 457 */
+ { 13, 5, 12, 79, -6210, 13, 0, }, /* 458 */
+ { 13, 5, 12, 79, -6211, 13, 0, }, /* 459 */
+ { 13, 5, 12, 84, -6204, 13, 0, }, /* 460 */
+ { 13, 5, 12, 88, -6180, 13, 0, }, /* 461 */
+ { 13, 5, 12, 108, 35267, 13, 0, }, /* 462 */
+ { 17, 9, 12, 0, -3008, 17, 0, }, /* 463 */
+ { 76, 21, 12, 0, 0, 76, 0, }, /* 464 */
+ { 28, 12, 3, 0, 0, -122, 0, }, /* 465 */
+ { 28, 12, 3, 0, 0, 15, 0, }, /* 466 */
+ { 10, 21, 12, 0, 0, -40, 0, }, /* 467 */
+ { 28, 12, 3, 0, 0, -16, 0, }, /* 468 */
+ { 28, 12, 3, 0, 0, -46, 0, }, /* 469 */
+ { 28, 12, 3, 0, 0, -157, 0, }, /* 470 */
+ { 10, 10, 5, 0, 0, -16, 0, }, /* 471 */
+ { 10, 7, 12, 0, 0, -43, 0, }, /* 472 */
+ { 10, 7, 12, 0, 0, -16, 0, }, /* 473 */
+ { 10, 7, 12, 0, 0, 15, 0, }, /* 474 */
+ { 10, 7, 12, 0, 0, -172, 0, }, /* 475 */
+ { 10, 7, 12, 0, 0, -40, 0, }, /* 476 */
+ { 28, 12, 3, 0, 0, -106, 0, }, /* 477 */
+ { 10, 10, 5, 0, 0, 3, 0, }, /* 478 */
+ { 28, 12, 3, 0, 0, -40, 0, }, /* 479 */
+ { 10, 7, 12, 0, 0, 150, 0, }, /* 480 */
+ { 13, 5, 12, 0, 0, 13, 0, }, /* 481 */
+ { 13, 6, 12, 0, 0, 13, 0, }, /* 482 */
+ { 34, 5, 12, 0, 35332, 34, 0, }, /* 483 */
+ { 34, 5, 12, 0, 3814, 34, 0, }, /* 484 */
+ { 34, 5, 12, 0, 35384, 34, 0, }, /* 485 */
+ { 28, 12, 3, 0, 0, -37, 0, }, /* 486 */
+ { 28, 12, 3, 0, 0, 50, 0, }, /* 487 */
+ { 34, 9, 12, 92, 1, 34, 0, }, /* 488 */
+ { 34, 5, 12, 92, -1, 34, 0, }, /* 489 */
+ { 34, 5, 12, 92, -58, 34, 0, }, /* 490 */
+ { 34, 9, 12, 0, -7615, 34, 0, }, /* 491 */
+ { 20, 5, 12, 0, 8, 20, 0, }, /* 492 */
+ { 20, 9, 12, 0, -8, 20, 0, }, /* 493 */
+ { 20, 5, 12, 0, 74, 20, 0, }, /* 494 */
+ { 20, 5, 12, 0, 86, 20, 0, }, /* 495 */
+ { 20, 5, 12, 0, 100, 20, 0, }, /* 496 */
+ { 20, 5, 12, 0, 128, 20, 0, }, /* 497 */
+ { 20, 5, 12, 0, 112, 20, 0, }, /* 498 */
+ { 20, 5, 12, 0, 126, 20, 0, }, /* 499 */
+ { 20, 8, 12, 0, -8, 20, 0, }, /* 500 */
+ { 20, 5, 12, 0, 9, 20, 0, }, /* 501 */
+ { 20, 9, 12, 0, -74, 20, 0, }, /* 502 */
+ { 20, 8, 12, 0, -9, 20, 0, }, /* 503 */
+ { 20, 5, 12, 21, -7173, 20, 0, }, /* 504 */
+ { 20, 9, 12, 0, -86, 20, 0, }, /* 505 */
+ { 20, 9, 12, 0, -100, 20, 0, }, /* 506 */
+ { 20, 9, 12, 0, -112, 20, 0, }, /* 507 */
+ { 20, 9, 12, 0, -128, 20, 0, }, /* 508 */
+ { 20, 9, 12, 0, -126, 20, 0, }, /* 509 */
+ { 28, 1, 3, 0, 0, 28, 0, }, /* 510 */
+ { 28, 1, 13, 0, 0, 28, 0, }, /* 511 */
+ { 10, 27, 2, 0, 0, 10, 0, }, /* 512 */
+ { 10, 28, 2, 0, 0, 10, 0, }, /* 513 */
+ { 10, 29, 12, 0, 0, -73, 0, }, /* 514 */
+ { 10, 21, 14, 0, 0, 10, 0, }, /* 515 */
+ { 0, 2, 2, 0, 0, 0, 0, }, /* 516 */
+ { 28, 12, 3, 0, 0, -110, 0, }, /* 517 */
+ { 10, 9, 12, 0, 0, 10, 0, }, /* 518 */
+ { 10, 5, 12, 0, 0, 10, 0, }, /* 519 */
+ { 20, 9, 12, 96, -7517, 20, 0, }, /* 520 */
+ { 34, 9, 12, 100, -8383, 34, 0, }, /* 521 */
+ { 34, 9, 12, 104, -8262, 34, 0, }, /* 522 */
+ { 34, 9, 12, 0, 28, 34, 0, }, /* 523 */
+ { 10, 7, 12, 0, 0, 10, 0, }, /* 524 */
+ { 10, 5, 14, 0, 0, 10, 0, }, /* 525 */
+ { 34, 5, 12, 0, -28, 34, 0, }, /* 526 */
+ { 34, 14, 12, 0, 16, 34, 0, }, /* 527 */
+ { 34, 14, 12, 0, -16, 34, 0, }, /* 528 */
+ { 34, 14, 12, 0, 0, 34, 0, }, /* 529 */
+ { 10, 25, 14, 0, 0, 10, 0, }, /* 530 */
+ { 10, 26, 12, 0, 26, 10, 0, }, /* 531 */
+ { 10, 26, 14, 0, 26, 10, 0, }, /* 532 */
+ { 10, 26, 12, 0, -26, 10, 0, }, /* 533 */
+ { 5, 26, 12, 0, 0, 5, 0, }, /* 534 */
+ { 18, 9, 12, 0, 48, 18, 0, }, /* 535 */
+ { 18, 5, 12, 0, -48, 18, 0, }, /* 536 */
+ { 34, 9, 12, 0, -10743, 34, 0, }, /* 537 */
+ { 34, 9, 12, 0, -3814, 34, 0, }, /* 538 */
+ { 34, 9, 12, 0, -10727, 34, 0, }, /* 539 */
+ { 34, 5, 12, 0, -10795, 34, 0, }, /* 540 */
+ { 34, 5, 12, 0, -10792, 34, 0, }, /* 541 */
+ { 34, 9, 12, 0, -10780, 34, 0, }, /* 542 */
+ { 34, 9, 12, 0, -10749, 34, 0, }, /* 543 */
+ { 34, 9, 12, 0, -10783, 34, 0, }, /* 544 */
+ { 34, 9, 12, 0, -10782, 34, 0, }, /* 545 */
+ { 34, 9, 12, 0, -10815, 34, 0, }, /* 546 */
+ { 11, 5, 12, 0, 0, 11, 0, }, /* 547 */
+ { 11, 26, 12, 0, 0, 11, 0, }, /* 548 */
+ { 11, 12, 3, 0, 0, 11, 0, }, /* 549 */
+ { 11, 21, 12, 0, 0, 11, 0, }, /* 550 */
+ { 11, 15, 12, 0, 0, 11, 0, }, /* 551 */
+ { 17, 5, 12, 0, -7264, 17, 0, }, /* 552 */
+ { 59, 7, 12, 0, 0, 59, 0, }, /* 553 */
+ { 59, 6, 12, 0, 0, 59, 0, }, /* 554 */
+ { 59, 21, 12, 0, 0, 59, 0, }, /* 555 */
+ { 59, 12, 3, 0, 0, 59, 0, }, /* 556 */
+ { 13, 12, 3, 0, 0, 13, 0, }, /* 557 */
+ { 10, 21, 12, 0, 0, -28, 0, }, /* 558 */
+ { 23, 26, 12, 0, 0, 23, 0, }, /* 559 */
+ { 10, 21, 12, 0, 0, -150, 0, }, /* 560 */
+ { 10, 21, 12, 0, 0, -137, 0, }, /* 561 */
+ { 23, 6, 12, 0, 0, 23, 0, }, /* 562 */
+ { 10, 7, 12, 0, 0, 23, 0, }, /* 563 */
+ { 23, 14, 12, 0, 0, 23, 0, }, /* 564 */
+ { 10, 22, 12, 0, 0, -150, 0, }, /* 565 */
+ { 10, 18, 12, 0, 0, -150, 0, }, /* 566 */
+ { 10, 26, 12, 0, 0, -137, 0, }, /* 567 */
+ { 10, 17, 12, 0, 0, -137, 0, }, /* 568 */
+ { 10, 22, 12, 0, 0, -137, 0, }, /* 569 */
+ { 10, 18, 12, 0, 0, -137, 0, }, /* 570 */
+ { 28, 12, 3, 0, 0, -19, 0, }, /* 571 */
+ { 24, 10, 3, 0, 0, 24, 0, }, /* 572 */
+ { 10, 17, 14, 0, 0, -137, 0, }, /* 573 */
+ { 10, 6, 12, 0, 0, -67, 0, }, /* 574 */
+ { 10, 7, 12, 0, 0, -114, 0, }, /* 575 */
+ { 10, 21, 14, 0, 0, -114, 0, }, /* 576 */
+ { 10, 26, 12, 0, 0, 23, 0, }, /* 577 */
+ { 27, 7, 12, 0, 0, 27, 0, }, /* 578 */
+ { 28, 12, 3, 0, 0, -67, 0, }, /* 579 */
+ { 10, 24, 12, 0, 0, -67, 0, }, /* 580 */
+ { 27, 6, 12, 0, 0, 27, 0, }, /* 581 */
+ { 10, 17, 12, 0, 0, -67, 0, }, /* 582 */
+ { 30, 7, 12, 0, 0, 30, 0, }, /* 583 */
+ { 30, 6, 12, 0, 0, 30, 0, }, /* 584 */
+ { 4, 7, 12, 0, 0, 4, 0, }, /* 585 */
+ { 24, 7, 12, 0, 0, 24, 0, }, /* 586 */
+ { 10, 15, 12, 0, 0, 23, 0, }, /* 587 */
+ { 24, 26, 12, 0, 0, 24, 0, }, /* 588 */
+ { 10, 26, 14, 0, 0, 23, 0, }, /* 589 */
+ { 30, 26, 12, 0, 0, 30, 0, }, /* 590 */
+ { 23, 7, 12, 0, 0, 23, 0, }, /* 591 */
+ { 61, 7, 12, 0, 0, 61, 0, }, /* 592 */
+ { 61, 6, 12, 0, 0, 61, 0, }, /* 593 */
+ { 61, 26, 12, 0, 0, 61, 0, }, /* 594 */
+ { 86, 7, 12, 0, 0, 86, 0, }, /* 595 */
+ { 86, 6, 12, 0, 0, 86, 0, }, /* 596 */
+ { 86, 21, 12, 0, 0, 86, 0, }, /* 597 */
+ { 77, 7, 12, 0, 0, 77, 0, }, /* 598 */
+ { 77, 6, 12, 0, 0, 77, 0, }, /* 599 */
+ { 77, 21, 12, 0, 0, 77, 0, }, /* 600 */
+ { 77, 13, 12, 0, 0, 77, 0, }, /* 601 */
+ { 13, 9, 12, 108, 1, 13, 0, }, /* 602 */
+ { 13, 5, 12, 108, -35267, 13, 0, }, /* 603 */
+ { 13, 7, 12, 0, 0, 13, 0, }, /* 604 */
+ { 13, 21, 12, 0, 0, 13, 0, }, /* 605 */
+ { 79, 7, 12, 0, 0, 79, 0, }, /* 606 */
+ { 79, 14, 12, 0, 0, 79, 0, }, /* 607 */
+ { 79, 12, 3, 0, 0, 79, 0, }, /* 608 */
+ { 79, 21, 12, 0, 0, 79, 0, }, /* 609 */
+ { 10, 24, 12, 0, 0, -64, 0, }, /* 610 */
+ { 34, 9, 12, 0, -35332, 34, 0, }, /* 611 */
+ { 34, 9, 12, 0, -42280, 34, 0, }, /* 612 */
+ { 34, 5, 12, 0, 48, 34, 0, }, /* 613 */
+ { 34, 9, 12, 0, -42308, 34, 0, }, /* 614 */
+ { 34, 9, 12, 0, -42319, 34, 0, }, /* 615 */
+ { 34, 9, 12, 0, -42315, 34, 0, }, /* 616 */
+ { 34, 9, 12, 0, -42305, 34, 0, }, /* 617 */
+ { 34, 9, 12, 0, -42258, 34, 0, }, /* 618 */
+ { 34, 9, 12, 0, -42282, 34, 0, }, /* 619 */
+ { 34, 9, 12, 0, -42261, 34, 0, }, /* 620 */
+ { 34, 9, 12, 0, 928, 34, 0, }, /* 621 */
+ { 34, 9, 12, 0, -48, 34, 0, }, /* 622 */
+ { 34, 9, 12, 0, -42307, 34, 0, }, /* 623 */
+ { 34, 9, 12, 0, -35384, 34, 0, }, /* 624 */
+ { 49, 7, 12, 0, 0, 49, 0, }, /* 625 */
+ { 49, 12, 3, 0, 0, 49, 0, }, /* 626 */
+ { 49, 10, 5, 0, 0, 49, 0, }, /* 627 */
+ { 49, 26, 12, 0, 0, 49, 0, }, /* 628 */
+ { 10, 15, 12, 0, 0, -244, 0, }, /* 629 */
+ { 10, 15, 12, 0, 0, -230, 0, }, /* 630 */
+ { 10, 26, 12, 0, 0, -191, 0, }, /* 631 */
+ { 10, 23, 12, 0, 0, -191, 0, }, /* 632 */
+ { 65, 7, 12, 0, 0, 65, 0, }, /* 633 */
+ { 65, 21, 12, 0, 0, 65, 0, }, /* 634 */
+ { 75, 10, 5, 0, 0, 75, 0, }, /* 635 */
+ { 75, 7, 12, 0, 0, 75, 0, }, /* 636 */
+ { 75, 12, 3, 0, 0, 75, 0, }, /* 637 */
+ { 75, 21, 12, 0, 0, 75, 0, }, /* 638 */
+ { 75, 13, 12, 0, 0, 75, 0, }, /* 639 */
+ { 15, 12, 3, 0, 0, -16, 0, }, /* 640 */
+ { 15, 7, 12, 0, 0, -49, 0, }, /* 641 */
+ { 69, 13, 12, 0, 0, 69, 0, }, /* 642 */
+ { 69, 7, 12, 0, 0, 69, 0, }, /* 643 */
+ { 69, 12, 3, 0, 0, 69, 0, }, /* 644 */
+ { 10, 21, 12, 0, 0, -118, 0, }, /* 645 */
+ { 69, 21, 12, 0, 0, 69, 0, }, /* 646 */
+ { 74, 7, 12, 0, 0, 74, 0, }, /* 647 */
+ { 74, 12, 3, 0, 0, 74, 0, }, /* 648 */
+ { 74, 10, 5, 0, 0, 74, 0, }, /* 649 */
+ { 74, 21, 12, 0, 0, 74, 0, }, /* 650 */
+ { 84, 12, 3, 0, 0, 84, 0, }, /* 651 */
+ { 84, 10, 5, 0, 0, 84, 0, }, /* 652 */
+ { 84, 7, 12, 0, 0, 84, 0, }, /* 653 */
+ { 84, 21, 12, 0, 0, 84, 0, }, /* 654 */
+ { 10, 6, 12, 0, 0, -22, 0, }, /* 655 */
+ { 84, 13, 12, 0, 0, 84, 0, }, /* 656 */
+ { 39, 6, 12, 0, 0, 39, 0, }, /* 657 */
+ { 68, 7, 12, 0, 0, 68, 0, }, /* 658 */
+ { 68, 12, 3, 0, 0, 68, 0, }, /* 659 */
+ { 68, 10, 5, 0, 0, 68, 0, }, /* 660 */
+ { 68, 13, 12, 0, 0, 68, 0, }, /* 661 */
+ { 68, 21, 12, 0, 0, 68, 0, }, /* 662 */
+ { 92, 7, 12, 0, 0, 92, 0, }, /* 663 */
+ { 92, 12, 3, 0, 0, 92, 0, }, /* 664 */
+ { 92, 6, 12, 0, 0, 92, 0, }, /* 665 */
+ { 92, 21, 12, 0, 0, 92, 0, }, /* 666 */
+ { 87, 7, 12, 0, 0, 87, 0, }, /* 667 */
+ { 87, 10, 5, 0, 0, 87, 0, }, /* 668 */
+ { 87, 12, 3, 0, 0, 87, 0, }, /* 669 */
+ { 87, 21, 12, 0, 0, 87, 0, }, /* 670 */
+ { 87, 6, 12, 0, 0, 87, 0, }, /* 671 */
+ { 34, 5, 12, 0, -928, 34, 0, }, /* 672 */
+ { 9, 5, 12, 0, -38864, 9, 0, }, /* 673 */
+ { 87, 13, 12, 0, 0, 87, 0, }, /* 674 */
+ { 24, 7, 9, 0, 0, 24, 0, }, /* 675 */
+ { 24, 7, 10, 0, 0, 24, 0, }, /* 676 */
+ { 0, 4, 12, 0, 0, 0, 0, }, /* 677 */
+ { 0, 3, 12, 0, 0, 0, 0, }, /* 678 */
+ { 26, 25, 12, 0, 0, 26, 0, }, /* 679 */
+ { 10, 18, 12, 0, 0, -7, 0, }, /* 680 */
+ { 10, 22, 12, 0, 0, -7, 0, }, /* 681 */
+ { 1, 7, 12, 0, 0, -13, 0, }, /* 682 */
+ { 1, 26, 12, 0, 0, -13, 0, }, /* 683 */
+ { 10, 6, 3, 0, 0, -67, 0, }, /* 684 */
+ { 36, 7, 12, 0, 0, 36, 0, }, /* 685 */
+ { 10, 21, 12, 0, 0, -98, 0, }, /* 686 */
+ { 10, 21, 12, 0, 0, -25, 0, }, /* 687 */
+ { 10, 15, 12, 0, 0, -102, 0, }, /* 688 */
+ { 10, 26, 12, 0, 0, -25, 0, }, /* 689 */
+ { 20, 14, 12, 0, 0, 20, 0, }, /* 690 */
+ { 20, 15, 12, 0, 0, 20, 0, }, /* 691 */
+ { 20, 26, 12, 0, 0, 20, 0, }, /* 692 */
+ { 71, 7, 12, 0, 0, 71, 0, }, /* 693 */
+ { 67, 7, 12, 0, 0, 67, 0, }, /* 694 */
+ { 28, 12, 3, 0, 0, -1, 0, }, /* 695 */
+ { 10, 15, 12, 0, 0, -1, 0, }, /* 696 */
+ { 42, 7, 12, 0, 0, 42, 0, }, /* 697 */
+ { 42, 15, 12, 0, 0, 42, 0, }, /* 698 */
+ { 19, 7, 12, 0, 0, 19, 0, }, /* 699 */
+ { 19, 14, 12, 0, 0, 19, 0, }, /* 700 */
+ { 118, 7, 12, 0, 0, 118, 0, }, /* 701 */
+ { 118, 12, 3, 0, 0, 118, 0, }, /* 702 */
+ { 60, 7, 12, 0, 0, 60, 0, }, /* 703 */
+ { 60, 21, 12, 0, 0, 60, 0, }, /* 704 */
+ { 43, 7, 12, 0, 0, 43, 0, }, /* 705 */
+ { 43, 21, 12, 0, 0, 43, 0, }, /* 706 */
+ { 43, 14, 12, 0, 0, 43, 0, }, /* 707 */
+ { 14, 9, 12, 0, 40, 14, 0, }, /* 708 */
+ { 14, 5, 12, 0, -40, 14, 0, }, /* 709 */
+ { 47, 7, 12, 0, 0, 47, 0, }, /* 710 */
+ { 45, 7, 12, 0, 0, 45, 0, }, /* 711 */
+ { 45, 13, 12, 0, 0, 45, 0, }, /* 712 */
+ { 136, 9, 12, 0, 40, 136, 0, }, /* 713 */
+ { 136, 5, 12, 0, -40, 136, 0, }, /* 714 */
+ { 106, 7, 12, 0, 0, 106, 0, }, /* 715 */
+ { 104, 7, 12, 0, 0, 104, 0, }, /* 716 */
+ { 104, 21, 12, 0, 0, 104, 0, }, /* 717 */
+ { 161, 9, 12, 0, 39, 161, 0, }, /* 718 */
+ { 161, 5, 12, 0, -39, 161, 0, }, /* 719 */
+ { 110, 7, 12, 0, 0, 110, 0, }, /* 720 */
+ { 12, 7, 12, 0, 0, 12, 0, }, /* 721 */
+ { 81, 7, 12, 0, 0, 81, 0, }, /* 722 */
+ { 81, 21, 12, 0, 0, 81, 0, }, /* 723 */
+ { 81, 15, 12, 0, 0, 81, 0, }, /* 724 */
+ { 120, 7, 12, 0, 0, 120, 0, }, /* 725 */
+ { 120, 26, 12, 0, 0, 120, 0, }, /* 726 */
+ { 120, 15, 12, 0, 0, 120, 0, }, /* 727 */
+ { 116, 7, 12, 0, 0, 116, 0, }, /* 728 */
+ { 116, 15, 12, 0, 0, 116, 0, }, /* 729 */
+ { 128, 7, 12, 0, 0, 128, 0, }, /* 730 */
+ { 128, 15, 12, 0, 0, 128, 0, }, /* 731 */
+ { 66, 7, 12, 0, 0, 66, 0, }, /* 732 */
+ { 66, 15, 12, 0, 0, 66, 0, }, /* 733 */
+ { 66, 21, 12, 0, 0, 66, 0, }, /* 734 */
+ { 72, 7, 12, 0, 0, 72, 0, }, /* 735 */
+ { 72, 21, 12, 0, 0, 72, 0, }, /* 736 */
+ { 98, 7, 12, 0, 0, 98, 0, }, /* 737 */
+ { 97, 7, 12, 0, 0, 97, 0, }, /* 738 */
+ { 97, 15, 12, 0, 0, 97, 0, }, /* 739 */
+ { 31, 7, 12, 0, 0, 31, 0, }, /* 740 */
+ { 31, 12, 3, 0, 0, 31, 0, }, /* 741 */
+ { 31, 15, 12, 0, 0, 31, 0, }, /* 742 */
+ { 31, 21, 12, 0, 0, 31, 0, }, /* 743 */
+ { 88, 7, 12, 0, 0, 88, 0, }, /* 744 */
+ { 88, 15, 12, 0, 0, 88, 0, }, /* 745 */
+ { 88, 21, 12, 0, 0, 88, 0, }, /* 746 */
+ { 117, 7, 12, 0, 0, 117, 0, }, /* 747 */
+ { 117, 15, 12, 0, 0, 117, 0, }, /* 748 */
+ { 112, 7, 12, 0, 0, 112, 0, }, /* 749 */
+ { 112, 26, 12, 0, 0, 112, 0, }, /* 750 */
+ { 112, 12, 3, 0, 0, 112, 0, }, /* 751 */
+ { 112, 15, 12, 0, 0, 112, 0, }, /* 752 */
+ { 112, 21, 12, 0, 0, 112, 0, }, /* 753 */
+ { 112, 21, 12, 0, 0, -76, 0, }, /* 754 */
+ { 78, 7, 12, 0, 0, 78, 0, }, /* 755 */
+ { 78, 21, 12, 0, 0, 78, 0, }, /* 756 */
+ { 83, 7, 12, 0, 0, 83, 0, }, /* 757 */
+ { 83, 15, 12, 0, 0, 83, 0, }, /* 758 */
+ { 82, 7, 12, 0, 0, 82, 0, }, /* 759 */
+ { 82, 15, 12, 0, 0, 82, 0, }, /* 760 */
+ { 121, 7, 12, 0, 0, 121, 0, }, /* 761 */
+ { 121, 21, 12, 0, 0, 121, 0, }, /* 762 */
+ { 121, 15, 12, 0, 0, 121, 0, }, /* 763 */
+ { 89, 7, 12, 0, 0, 89, 0, }, /* 764 */
+ { 130, 9, 12, 0, 64, 130, 0, }, /* 765 */
+ { 130, 5, 12, 0, -64, 130, 0, }, /* 766 */
+ { 130, 15, 12, 0, 0, 130, 0, }, /* 767 */
+ { 144, 7, 12, 0, 0, 144, 0, }, /* 768 */
+ { 144, 12, 3, 0, 0, 144, 0, }, /* 769 */
+ { 144, 13, 12, 0, 0, 144, 0, }, /* 770 */
+ { 1, 15, 12, 0, 0, 1, 0, }, /* 771 */
+ { 156, 7, 12, 0, 0, 156, 0, }, /* 772 */
+ { 156, 12, 3, 0, 0, 156, 0, }, /* 773 */
+ { 156, 17, 12, 0, 0, 156, 0, }, /* 774 */
+ { 147, 7, 12, 0, 0, 147, 0, }, /* 775 */
+ { 147, 15, 12, 0, 0, 147, 0, }, /* 776 */
+ { 148, 7, 12, 0, 0, 148, 0, }, /* 777 */
+ { 148, 12, 3, 0, 0, 148, 0, }, /* 778 */
+ { 148, 15, 12, 0, 0, 148, 0, }, /* 779 */
+ { 148, 21, 12, 0, 0, 148, 0, }, /* 780 */
+ { 158, 7, 12, 0, 0, 158, 0, }, /* 781 */
+ { 158, 12, 3, 0, 0, 158, 0, }, /* 782 */
+ { 158, 21, 12, 0, 0, 158, 0, }, /* 783 */
+ { 153, 7, 12, 0, 0, 153, 0, }, /* 784 */
+ { 153, 15, 12, 0, 0, 153, 0, }, /* 785 */
+ { 149, 7, 12, 0, 0, 149, 0, }, /* 786 */
+ { 94, 10, 5, 0, 0, 94, 0, }, /* 787 */
+ { 94, 12, 3, 0, 0, 94, 0, }, /* 788 */
+ { 94, 7, 12, 0, 0, 94, 0, }, /* 789 */
+ { 94, 21, 12, 0, 0, 94, 0, }, /* 790 */
+ { 94, 15, 12, 0, 0, 94, 0, }, /* 791 */
+ { 94, 13, 12, 0, 0, 94, 0, }, /* 792 */
+ { 85, 12, 3, 0, 0, 85, 0, }, /* 793 */
+ { 85, 10, 5, 0, 0, 85, 0, }, /* 794 */
+ { 85, 7, 12, 0, 0, 85, 0, }, /* 795 */
+ { 85, 21, 12, 0, 0, 85, 0, }, /* 796 */
+ { 85, 1, 4, 0, 0, 85, 0, }, /* 797 */
+ { 101, 7, 12, 0, 0, 101, 0, }, /* 798 */
+ { 101, 13, 12, 0, 0, 101, 0, }, /* 799 */
+ { 96, 12, 3, 0, 0, 96, 0, }, /* 800 */
+ { 96, 7, 12, 0, 0, 96, 0, }, /* 801 */
+ { 96, 10, 5, 0, 0, 96, 0, }, /* 802 */
+ { 96, 13, 12, 0, 0, 96, 0, }, /* 803 */
+ { 96, 21, 12, 0, 0, 96, 0, }, /* 804 */
+ { 111, 7, 12, 0, 0, 111, 0, }, /* 805 */
+ { 111, 12, 3, 0, 0, 111, 0, }, /* 806 */
+ { 111, 21, 12, 0, 0, 111, 0, }, /* 807 */
+ { 100, 12, 3, 0, 0, 100, 0, }, /* 808 */
+ { 100, 10, 5, 0, 0, 100, 0, }, /* 809 */
+ { 100, 7, 12, 0, 0, 100, 0, }, /* 810 */
+ { 100, 7, 4, 0, 0, 100, 0, }, /* 811 */
+ { 100, 21, 12, 0, 0, 100, 0, }, /* 812 */
+ { 100, 13, 12, 0, 0, 100, 0, }, /* 813 */
+ { 48, 15, 12, 0, 0, 48, 0, }, /* 814 */
+ { 108, 7, 12, 0, 0, 108, 0, }, /* 815 */
+ { 108, 10, 5, 0, 0, 108, 0, }, /* 816 */
+ { 108, 12, 3, 0, 0, 108, 0, }, /* 817 */
+ { 108, 21, 12, 0, 0, 108, 0, }, /* 818 */
+ { 129, 7, 12, 0, 0, 129, 0, }, /* 819 */
+ { 129, 21, 12, 0, 0, 129, 0, }, /* 820 */
+ { 109, 7, 12, 0, 0, 109, 0, }, /* 821 */
+ { 109, 12, 3, 0, 0, 109, 0, }, /* 822 */
+ { 109, 10, 5, 0, 0, 109, 0, }, /* 823 */
+ { 109, 13, 12, 0, 0, 109, 0, }, /* 824 */
+ { 107, 12, 3, 0, 0, 107, 0, }, /* 825 */
+ { 107, 12, 3, 0, 0, -55, 0, }, /* 826 */
+ { 107, 10, 5, 0, 0, 107, 0, }, /* 827 */
+ { 107, 10, 5, 0, 0, -55, 0, }, /* 828 */
+ { 107, 7, 12, 0, 0, 107, 0, }, /* 829 */
+ { 28, 12, 3, 0, 0, -55, 0, }, /* 830 */
+ { 107, 10, 3, 0, 0, 107, 0, }, /* 831 */
+ { 135, 7, 12, 0, 0, 135, 0, }, /* 832 */
+ { 135, 10, 5, 0, 0, 135, 0, }, /* 833 */
+ { 135, 12, 3, 0, 0, 135, 0, }, /* 834 */
+ { 135, 21, 12, 0, 0, 135, 0, }, /* 835 */
+ { 135, 13, 12, 0, 0, 135, 0, }, /* 836 */
+ { 124, 7, 12, 0, 0, 124, 0, }, /* 837 */
+ { 124, 10, 3, 0, 0, 124, 0, }, /* 838 */
+ { 124, 10, 5, 0, 0, 124, 0, }, /* 839 */
+ { 124, 12, 3, 0, 0, 124, 0, }, /* 840 */
+ { 124, 21, 12, 0, 0, 124, 0, }, /* 841 */
+ { 124, 13, 12, 0, 0, 124, 0, }, /* 842 */
+ { 123, 7, 12, 0, 0, 123, 0, }, /* 843 */
+ { 123, 10, 3, 0, 0, 123, 0, }, /* 844 */
+ { 123, 10, 5, 0, 0, 123, 0, }, /* 845 */
+ { 123, 12, 3, 0, 0, 123, 0, }, /* 846 */
+ { 123, 21, 12, 0, 0, 123, 0, }, /* 847 */
+ { 114, 7, 12, 0, 0, 114, 0, }, /* 848 */
+ { 114, 10, 5, 0, 0, 114, 0, }, /* 849 */
+ { 114, 12, 3, 0, 0, 114, 0, }, /* 850 */
+ { 114, 21, 12, 0, 0, 114, 0, }, /* 851 */
+ { 114, 13, 12, 0, 0, 114, 0, }, /* 852 */
+ { 102, 7, 12, 0, 0, 102, 0, }, /* 853 */
+ { 102, 12, 3, 0, 0, 102, 0, }, /* 854 */
+ { 102, 10, 5, 0, 0, 102, 0, }, /* 855 */
+ { 102, 21, 12, 0, 0, 102, 0, }, /* 856 */
+ { 102, 13, 12, 0, 0, 102, 0, }, /* 857 */
+ { 126, 7, 12, 0, 0, 126, 0, }, /* 858 */
+ { 126, 12, 3, 0, 0, 126, 0, }, /* 859 */
+ { 126, 10, 12, 0, 0, 126, 0, }, /* 860 */
+ { 126, 10, 5, 0, 0, 126, 0, }, /* 861 */
+ { 126, 13, 12, 0, 0, 126, 0, }, /* 862 */
+ { 126, 15, 12, 0, 0, 126, 0, }, /* 863 */
+ { 126, 21, 12, 0, 0, 126, 0, }, /* 864 */
+ { 126, 26, 12, 0, 0, 126, 0, }, /* 865 */
+ { 142, 7, 12, 0, 0, 142, 0, }, /* 866 */
+ { 142, 10, 5, 0, 0, 142, 0, }, /* 867 */
+ { 142, 12, 3, 0, 0, 142, 0, }, /* 868 */
+ { 142, 21, 12, 0, 0, 142, 0, }, /* 869 */
+ { 125, 9, 12, 0, 32, 125, 0, }, /* 870 */
+ { 125, 5, 12, 0, -32, 125, 0, }, /* 871 */
+ { 125, 13, 12, 0, 0, 125, 0, }, /* 872 */
+ { 125, 15, 12, 0, 0, 125, 0, }, /* 873 */
+ { 125, 7, 12, 0, 0, 125, 0, }, /* 874 */
+ { 154, 7, 12, 0, 0, 154, 0, }, /* 875 */
+ { 154, 10, 3, 0, 0, 154, 0, }, /* 876 */
+ { 154, 10, 5, 0, 0, 154, 0, }, /* 877 */
+ { 154, 12, 3, 0, 0, 154, 0, }, /* 878 */
+ { 154, 7, 4, 0, 0, 154, 0, }, /* 879 */
+ { 154, 21, 12, 0, 0, 154, 0, }, /* 880 */
+ { 154, 13, 12, 0, 0, 154, 0, }, /* 881 */
+ { 150, 7, 12, 0, 0, 150, 0, }, /* 882 */
+ { 150, 10, 5, 0, 0, 150, 0, }, /* 883 */
+ { 150, 12, 3, 0, 0, 150, 0, }, /* 884 */
+ { 150, 21, 12, 0, 0, 150, 0, }, /* 885 */
+ { 141, 7, 12, 0, 0, 141, 0, }, /* 886 */
+ { 141, 12, 3, 0, 0, 141, 0, }, /* 887 */
+ { 141, 10, 5, 0, 0, 141, 0, }, /* 888 */
+ { 141, 7, 4, 0, 0, 141, 0, }, /* 889 */
+ { 141, 21, 12, 0, 0, 141, 0, }, /* 890 */
+ { 140, 7, 12, 0, 0, 140, 0, }, /* 891 */
+ { 140, 12, 3, 0, 0, 140, 0, }, /* 892 */
+ { 140, 10, 5, 0, 0, 140, 0, }, /* 893 */
+ { 140, 7, 4, 0, 0, 140, 0, }, /* 894 */
+ { 140, 21, 12, 0, 0, 140, 0, }, /* 895 */
+ { 122, 7, 12, 0, 0, 122, 0, }, /* 896 */
+ { 133, 7, 12, 0, 0, 133, 0, }, /* 897 */
+ { 133, 10, 5, 0, 0, 133, 0, }, /* 898 */
+ { 133, 12, 3, 0, 0, 133, 0, }, /* 899 */
+ { 133, 21, 12, 0, 0, 133, 0, }, /* 900 */
+ { 133, 13, 12, 0, 0, 133, 0, }, /* 901 */
+ { 133, 15, 12, 0, 0, 133, 0, }, /* 902 */
+ { 134, 21, 12, 0, 0, 134, 0, }, /* 903 */
+ { 134, 7, 12, 0, 0, 134, 0, }, /* 904 */
+ { 134, 12, 3, 0, 0, 134, 0, }, /* 905 */
+ { 134, 10, 5, 0, 0, 134, 0, }, /* 906 */
+ { 138, 7, 12, 0, 0, 138, 0, }, /* 907 */
+ { 138, 12, 3, 0, 0, 138, 0, }, /* 908 */
+ { 138, 7, 4, 0, 0, 138, 0, }, /* 909 */
+ { 138, 13, 12, 0, 0, 138, 0, }, /* 910 */
+ { 143, 7, 12, 0, 0, 143, 0, }, /* 911 */
+ { 143, 10, 5, 0, 0, 143, 0, }, /* 912 */
+ { 143, 12, 3, 0, 0, 143, 0, }, /* 913 */
+ { 143, 13, 12, 0, 0, 143, 0, }, /* 914 */
+ { 145, 7, 12, 0, 0, 145, 0, }, /* 915 */
+ { 145, 12, 3, 0, 0, 145, 0, }, /* 916 */
+ { 145, 10, 5, 0, 0, 145, 0, }, /* 917 */
+ { 145, 21, 12, 0, 0, 145, 0, }, /* 918 */
+ { 54, 15, 12, 0, 0, 54, 0, }, /* 919 */
+ { 54, 21, 12, 0, 0, 54, 0, }, /* 920 */
+ { 63, 7, 12, 0, 0, 63, 0, }, /* 921 */
+ { 63, 14, 12, 0, 0, 63, 0, }, /* 922 */
+ { 63, 21, 12, 0, 0, 63, 0, }, /* 923 */
+ { 157, 7, 12, 0, 0, 157, 0, }, /* 924 */
+ { 157, 21, 12, 0, 0, 157, 0, }, /* 925 */
+ { 80, 7, 12, 0, 0, 80, 0, }, /* 926 */
+ { 80, 1, 2, 0, 0, 80, 0, }, /* 927 */
+ { 127, 7, 12, 0, 0, 127, 0, }, /* 928 */
+ { 115, 7, 12, 0, 0, 115, 0, }, /* 929 */
+ { 115, 13, 12, 0, 0, 115, 0, }, /* 930 */
+ { 115, 21, 12, 0, 0, 115, 0, }, /* 931 */
+ { 159, 7, 12, 0, 0, 159, 0, }, /* 932 */
+ { 159, 13, 12, 0, 0, 159, 0, }, /* 933 */
+ { 103, 7, 12, 0, 0, 103, 0, }, /* 934 */
+ { 103, 12, 3, 0, 0, 103, 0, }, /* 935 */
+ { 103, 21, 12, 0, 0, 103, 0, }, /* 936 */
+ { 119, 7, 12, 0, 0, 119, 0, }, /* 937 */
+ { 119, 12, 3, 0, 0, 119, 0, }, /* 938 */
+ { 119, 21, 12, 0, 0, 119, 0, }, /* 939 */
+ { 119, 26, 12, 0, 0, 119, 0, }, /* 940 */
+ { 119, 6, 12, 0, 0, 119, 0, }, /* 941 */
+ { 119, 13, 12, 0, 0, 119, 0, }, /* 942 */
+ { 119, 15, 12, 0, 0, 119, 0, }, /* 943 */
+ { 146, 9, 12, 0, 32, 146, 0, }, /* 944 */
+ { 146, 5, 12, 0, -32, 146, 0, }, /* 945 */
+ { 146, 15, 12, 0, 0, 146, 0, }, /* 946 */
+ { 146, 21, 12, 0, 0, 146, 0, }, /* 947 */
+ { 99, 7, 12, 0, 0, 99, 0, }, /* 948 */
+ { 99, 12, 3, 0, 0, 99, 0, }, /* 949 */
+ { 99, 10, 5, 0, 0, 99, 0, }, /* 950 */
+ { 99, 6, 12, 0, 0, 99, 0, }, /* 951 */
+ { 137, 6, 12, 0, 0, 137, 0, }, /* 952 */
+ { 139, 6, 12, 0, 0, 139, 0, }, /* 953 */
+ { 23, 21, 12, 0, 0, 23, 0, }, /* 954 */
+ { 155, 12, 3, 0, 0, 155, 0, }, /* 955 */
+ { 23, 10, 5, 0, 0, 23, 0, }, /* 956 */
+ { 137, 7, 12, 0, 0, 137, 0, }, /* 957 */
+ { 155, 7, 12, 0, 0, 155, 0, }, /* 958 */
+ { 139, 7, 12, 0, 0, 139, 0, }, /* 959 */
+ { 105, 7, 12, 0, 0, 105, 0, }, /* 960 */
+ { 105, 26, 12, 0, 0, 105, 0, }, /* 961 */
+ { 105, 12, 3, 0, 0, 105, 0, }, /* 962 */
+ { 105, 21, 12, 0, 0, 105, 0, }, /* 963 */
+ { 10, 1, 2, 0, 0, 105, 0, }, /* 964 */
+ { 10, 10, 3, 0, 0, 10, 0, }, /* 965 */
+ { 10, 10, 5, 0, 0, 10, 0, }, /* 966 */
+ { 20, 12, 3, 0, 0, 20, 0, }, /* 967 */
+ { 131, 26, 12, 0, 0, 131, 0, }, /* 968 */
+ { 131, 12, 3, 0, 0, 131, 0, }, /* 969 */
+ { 131, 21, 12, 0, 0, 131, 0, }, /* 970 */
+ { 18, 12, 3, 0, 0, 18, 0, }, /* 971 */
+ { 151, 7, 12, 0, 0, 151, 0, }, /* 972 */
+ { 151, 12, 3, 0, 0, 151, 0, }, /* 973 */
+ { 151, 6, 12, 0, 0, 151, 0, }, /* 974 */
+ { 151, 13, 12, 0, 0, 151, 0, }, /* 975 */
+ { 151, 26, 12, 0, 0, 151, 0, }, /* 976 */
+ { 160, 7, 12, 0, 0, 160, 0, }, /* 977 */
+ { 160, 12, 3, 0, 0, 160, 0, }, /* 978 */
+ { 152, 7, 12, 0, 0, 152, 0, }, /* 979 */
+ { 152, 12, 3, 0, 0, 152, 0, }, /* 980 */
+ { 152, 13, 12, 0, 0, 152, 0, }, /* 981 */
+ { 152, 23, 12, 0, 0, 152, 0, }, /* 982 */
+ { 113, 7, 12, 0, 0, 113, 0, }, /* 983 */
+ { 113, 15, 12, 0, 0, 113, 0, }, /* 984 */
+ { 113, 12, 3, 0, 0, 113, 0, }, /* 985 */
+ { 132, 9, 12, 0, 34, 132, 0, }, /* 986 */
+ { 132, 5, 12, 0, -34, 132, 0, }, /* 987 */
+ { 132, 12, 3, 0, 0, 132, 0, }, /* 988 */
+ { 132, 6, 12, 0, 0, 132, 0, }, /* 989 */
+ { 132, 13, 12, 0, 0, 132, 0, }, /* 990 */
+ { 132, 21, 12, 0, 0, 132, 0, }, /* 991 */
+ { 0, 2, 14, 0, 0, 0, 0, }, /* 992 */
+ { 10, 26, 11, 0, 0, 10, 0, }, /* 993 */
+ { 27, 26, 12, 0, 0, 27, 0, }, /* 994 */
+ { 10, 24, 3, 0, 0, 10, 0, }, /* 995 */
+ { 10, 1, 3, 0, 0, 10, 0, }, /* 996 */
};
const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */
@@ -1190,51 +1216,51 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */
98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+8000 */
98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+8800 */
98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+9000 */
- 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,100, /* U+9800 */
-101,102,102,102,102,102,102,102,102,103,104,104,105,106,107,108, /* U+A000 */
-109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,117, /* U+A800 */
-118,119,120,121,122,123,117,118,119,120,121,122,123,117,118,119, /* U+B000 */
-120,121,122,123,117,118,119,120,121,122,123,117,118,119,120,121, /* U+B800 */
-122,123,117,118,119,120,121,122,123,117,118,119,120,121,122,123, /* U+C000 */
-117,118,119,120,121,122,123,117,118,119,120,121,122,123,117,118, /* U+C800 */
-119,120,121,122,123,117,118,119,120,121,122,123,117,118,119,124, /* U+D000 */
-125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+D800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+E000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+E800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F000 */
-126,126, 98, 98,127,128,129,130,131,131,132,133,134,135,136,137, /* U+F800 */
-138,139,140,141,142,143,144,145,146,147,148,142,149,149,150,142, /* U+10000 */
-151,152,153,154,155,156,157,158,159,160,161,142,162,163,164,165, /* U+10800 */
-166,167,168,169,170,171,172,142,173,174,142,175,176,177,178,142, /* U+11000 */
-179,180,181,182,183,184,142,142,185,186,187,188,142,189,142,190, /* U+11800 */
-191,191,191,191,191,191,191,192,193,191,194,142,142,142,142,142, /* U+12000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+12800 */
-195,195,195,195,195,195,195,195,196,142,142,142,142,142,142,142, /* U+13000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+13800 */
-142,142,142,142,142,142,142,142,197,197,197,197,198,142,142,142, /* U+14000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+14800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+15000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+15800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+16000 */
-199,199,199,199,200,201,202,203,142,142,142,142,204,205,206,207, /* U+16800 */
-208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, /* U+17000 */
-208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, /* U+17800 */
-208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,209, /* U+18000 */
-208,208,208,208,208,208,210,210,210,211,212,142,142,142,142,142, /* U+18800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+19000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+19800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+1A000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+1A800 */
-213,214,215,216,216,217,142,142,142,142,142,142,142,142,142,142, /* U+1B000 */
-142,142,142,142,142,142,142,142,218,219,142,142,142,142,142,142, /* U+1B800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+1C000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+1C800 */
- 71,220,221,222,223,224,225,142,226,227,228,229,230,231,232,233, /* U+1D000 */
-234,234,234,234,235,236,142,142,142,142,142,142,142,142,142,142, /* U+1D800 */
-237,142,238,142,142,239,142,142,142,142,142,142,142,142,142,142, /* U+1E000 */
-240,241,242,142,142,142,142,142,243,244,245,142,246,247,142,142, /* U+1E800 */
-248,249,250,251,252,253,254,255,254,254,256,254,257,258,259,260, /* U+1F000 */
-261,262,263,264,265,266, 71,267,253,253,253,253,253,253,253,268, /* U+1F800 */
+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+9800 */
+100,101,101,101,101,101,101,101,101,102,103,103,104,105,106,107, /* U+A000 */
+108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,116, /* U+A800 */
+117,118,119,120,121,122,116,117,118,119,120,121,122,116,117,118, /* U+B000 */
+119,120,121,122,116,117,118,119,120,121,122,116,117,118,119,120, /* U+B800 */
+121,122,116,117,118,119,120,121,122,116,117,118,119,120,121,122, /* U+C000 */
+116,117,118,119,120,121,122,116,117,118,119,120,121,122,116,117, /* U+C800 */
+118,119,120,121,122,116,117,118,119,120,121,122,116,117,118,123, /* U+D000 */
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, /* U+D800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+E000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+E800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F000 */
+125,125, 98, 98,126,127,128,129,130,130,131,132,133,134,135,136, /* U+F800 */
+137,138,139,140,141,142,143,144,145,146,147,148,149,149,150,151, /* U+10000 */
+152,153,154,155,156,157,158,159,160,161,162,141,163,164,165,166, /* U+10800 */
+167,168,169,170,171,172,173,141,174,175,141,176,177,178,179,141, /* U+11000 */
+180,181,182,183,184,185,141,141,186,187,188,189,141,190,141,191, /* U+11800 */
+192,192,192,192,192,192,192,193,194,192,195,141,141,141,141,141, /* U+12000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,196, /* U+12800 */
+197,197,197,197,197,197,197,197,198,141,141,141,141,141,141,141, /* U+13000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+13800 */
+141,141,141,141,141,141,141,141,199,199,199,199,200,141,141,141, /* U+14000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+14800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+15000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+15800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+16000 */
+201,201,201,201,202,203,204,205,141,141,141,141,206,207,208,209, /* U+16800 */
+210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210, /* U+17000 */
+210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210, /* U+17800 */
+210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,211, /* U+18000 */
+210,210,210,210,210,210,212,212,212,213,214,141,141,141,141,141, /* U+18800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+19000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+19800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+1A000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,215, /* U+1A800 */
+216,217,218,219,219,220,141,141,141,141,141,141,141,141,141,141, /* U+1B000 */
+141,141,141,141,141,141,141,141,221,222,141,141,141,141,141,141, /* U+1B800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+1C000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,223,224, /* U+1C800 */
+ 71,225,226,227,228,229,230,141,231,232,233,234,235,236,237,238, /* U+1D000 */
+239,239,239,239,240,241,141,141,141,141,141,141,141,141,242,141, /* U+1D800 */
+243,141,244,141,141,245,141,141,141,141,141,141,141,141,141,246, /* U+1E000 */
+247,248,249,141,141,141,141,141,250,251,252,141,253,254,141,141, /* U+1E800 */
+255,256,257,258,259,260,261,262,261,261,263,261,264,265,266,267, /* U+1F000 */
+268,269,270,261,271,272, 71,273,260,260,260,260,260,260,260,274, /* U+1F800 */
98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+20000 */
98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+20800 */
98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+21000 */
@@ -1255,469 +1281,469 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */
98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+28800 */
98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+29000 */
98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+29800 */
- 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,269, 98, 98, /* U+2A000 */
+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,275, 98, 98, /* U+2A000 */
98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+2A800 */
- 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,270, 98, /* U+2B000 */
-271, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+2B800 */
+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,276, 98, /* U+2B000 */
+277, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+2B800 */
98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+2C000 */
- 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,272, 98, 98, /* U+2C800 */
+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,278, 98, 98, /* U+2C800 */
98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+2D000 */
98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+2D800 */
98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+2E000 */
- 98, 98, 98, 98, 98, 98, 98,273,142,142,142,142,142,142,142,142, /* U+2E800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+2F000 */
- 98, 98, 98, 98,274,142,142,142,142,142,142,142,142,142,142,142, /* U+2F800 */
+ 98, 98, 98, 98, 98, 98, 98,279,141,141,141,141,141,141,141,141, /* U+2E800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+2F000 */
+ 98, 98, 98, 98,280,141,141,141,141,141,141,141,141,141,141,141, /* U+2F800 */
98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+30000 */
98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+30800 */
- 98, 98, 98, 98, 98, 98,275,142,142,142,142,142,142,142,142,142, /* U+31000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+31800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+32000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+32800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+33000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+33800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+34000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+34800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+35000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+35800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+36000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+36800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+37000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+37800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+38000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+38800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+39000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+39800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+3A000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+3A800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+3B000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+3B800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+3C000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+3C800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+3D000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+3D800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+3E000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+3E800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+3F000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+3F800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+40000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+40800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+41000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+41800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+42000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+42800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+43000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+43800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+44000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+44800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+45000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+45800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+46000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+46800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+47000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+47800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+48000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+48800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+49000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+49800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+4A000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+4A800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+4B000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+4B800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+4C000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+4C800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+4D000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+4D800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+4E000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+4E800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+4F000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+4F800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+50000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+50800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+51000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+51800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+52000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+52800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+53000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+53800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+54000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+54800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+55000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+55800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+56000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+56800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+57000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+57800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+58000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+58800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+59000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+59800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+5A000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+5A800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+5B000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+5B800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+5C000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+5C800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+5D000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+5D800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+5E000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+5E800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+5F000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+5F800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+60000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+60800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+61000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+61800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+62000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+62800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+63000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+63800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+64000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+64800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+65000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+65800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+66000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+66800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+67000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+67800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+68000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+68800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+69000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+69800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+6A000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+6A800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+6B000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+6B800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+6C000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+6C800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+6D000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+6D800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+6E000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+6E800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+6F000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+6F800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+70000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+70800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+71000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+71800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+72000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+72800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+73000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+73800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+74000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+74800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+75000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+75800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+76000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+76800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+77000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+77800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+78000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+78800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+79000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+79800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+7A000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+7A800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+7B000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+7B800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+7C000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+7C800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+7D000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+7D800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+7E000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+7E800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+7F000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+7F800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+80000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+80800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+81000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+81800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+82000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+82800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+83000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+83800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+84000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+84800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+85000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+85800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+86000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+86800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+87000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+87800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+88000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+88800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+89000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+89800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+8A000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+8A800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+8B000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+8B800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+8C000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+8C800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+8D000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+8D800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+8E000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+8E800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+8F000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+8F800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+90000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+90800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+91000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+91800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+92000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+92800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+93000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+93800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+94000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+94800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+95000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+95800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+96000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+96800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+97000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+97800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+98000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+98800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+99000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+99800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+9A000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+9A800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+9B000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+9B800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+9C000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+9C800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+9D000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+9D800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+9E000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+9E800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+9F000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+9F800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A0000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A0800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A1000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A1800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A2000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A2800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A3000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A3800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A4000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A4800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A5000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A5800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A6000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A6800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A7000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A7800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A8000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A8800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A9000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A9800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+AA000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+AA800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+AB000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+AB800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+AC000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+AC800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+AD000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+AD800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+AE000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+AE800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+AF000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+AF800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B0000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B0800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B1000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B1800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B2000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B2800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B3000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B3800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B4000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B4800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B5000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B5800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B6000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B6800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B7000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B7800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B8000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B8800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B9000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B9800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+BA000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+BA800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+BB000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+BB800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+BC000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+BC800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+BD000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+BD800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+BE000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+BE800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+BF000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+BF800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C0000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C0800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C1000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C1800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C2000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C2800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C3000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C3800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C4000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C4800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C5000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C5800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C6000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C6800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C7000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C7800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C8000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C8800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C9000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C9800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+CA000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+CA800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+CB000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+CB800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+CC000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+CC800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+CD000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+CD800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+CE000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+CE800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+CF000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+CF800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D0000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D0800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D1000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D1800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D2000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D2800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D3000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D3800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D4000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D4800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D5000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D5800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D6000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D6800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D7000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D7800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D8000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D8800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D9000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D9800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+DA000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+DA800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+DB000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+DB800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+DC000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+DC800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+DD000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+DD800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+DE000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+DE800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+DF000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+DF800 */
-276,277,278,279,277,277,277,277,277,277,277,277,277,277,277,277, /* U+E0000 */
-277,277,277,277,277,277,277,277,277,277,277,277,277,277,277,277, /* U+E0800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E1000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E1800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E2000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E2800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E3000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E3800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E4000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E4800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E5000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E5800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E6000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E6800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E7000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E7800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E8000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E8800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E9000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E9800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+EA000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+EA800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+EB000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+EB800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+EC000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+EC800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+ED000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+ED800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+EE000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+EE800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+EF000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+EF800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F0000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F0800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F1000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F1800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F2000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F2800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F3000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F3800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F4000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F4800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F5000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F5800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F6000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F6800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F7000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F7800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F8000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F8800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F9000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F9800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+FA000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+FA800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+FB000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+FB800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+FC000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+FC800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+FD000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+FD800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+FE000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+FE800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+FF000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,280, /* U+FF800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+100000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+100800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+101000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+101800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+102000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+102800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+103000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+103800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+104000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+104800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+105000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+105800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+106000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+106800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+107000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+107800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+108000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+108800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+109000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+109800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+10A000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+10A800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+10B000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+10B800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+10C000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+10C800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+10D000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+10D800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+10E000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+10E800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+10F000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,280, /* U+10F800 */
+ 98, 98, 98, 98, 98, 98,281,141,141,141,141,141,141,141,141,141, /* U+31000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+31800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+32000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+32800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+33000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+33800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+34000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+34800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+35000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+35800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+36000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+36800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+37000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+37800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+38000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+38800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+39000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+39800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+3A000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+3A800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+3B000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+3B800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+3C000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+3C800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+3D000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+3D800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+3E000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+3E800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+3F000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+3F800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+40000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+40800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+41000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+41800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+42000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+42800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+43000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+43800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+44000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+44800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+45000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+45800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+46000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+46800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+47000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+47800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+48000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+48800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+49000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+49800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+4A000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+4A800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+4B000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+4B800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+4C000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+4C800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+4D000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+4D800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+4E000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+4E800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+4F000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+4F800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+50000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+50800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+51000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+51800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+52000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+52800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+53000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+53800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+54000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+54800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+55000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+55800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+56000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+56800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+57000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+57800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+58000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+58800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+59000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+59800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+5A000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+5A800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+5B000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+5B800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+5C000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+5C800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+5D000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+5D800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+5E000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+5E800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+5F000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+5F800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+60000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+60800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+61000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+61800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+62000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+62800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+63000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+63800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+64000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+64800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+65000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+65800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+66000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+66800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+67000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+67800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+68000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+68800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+69000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+69800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+6A000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+6A800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+6B000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+6B800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+6C000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+6C800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+6D000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+6D800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+6E000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+6E800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+6F000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+6F800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+70000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+70800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+71000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+71800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+72000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+72800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+73000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+73800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+74000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+74800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+75000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+75800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+76000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+76800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+77000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+77800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+78000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+78800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+79000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+79800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+7A000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+7A800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+7B000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+7B800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+7C000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+7C800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+7D000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+7D800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+7E000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+7E800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+7F000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+7F800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+80000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+80800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+81000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+81800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+82000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+82800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+83000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+83800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+84000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+84800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+85000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+85800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+86000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+86800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+87000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+87800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+88000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+88800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+89000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+89800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+8A000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+8A800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+8B000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+8B800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+8C000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+8C800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+8D000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+8D800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+8E000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+8E800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+8F000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+8F800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+90000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+90800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+91000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+91800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+92000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+92800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+93000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+93800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+94000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+94800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+95000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+95800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+96000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+96800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+97000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+97800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+98000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+98800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+99000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+99800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+9A000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+9A800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+9B000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+9B800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+9C000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+9C800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+9D000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+9D800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+9E000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+9E800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+9F000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+9F800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A0000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A0800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A1000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A1800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A2000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A2800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A3000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A3800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A4000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A4800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A5000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A5800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A6000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A6800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A7000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A7800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A8000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A8800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A9000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A9800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+AA000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+AA800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+AB000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+AB800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+AC000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+AC800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+AD000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+AD800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+AE000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+AE800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+AF000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+AF800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B0000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B0800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B1000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B1800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B2000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B2800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B3000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B3800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B4000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B4800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B5000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B5800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B6000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B6800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B7000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B7800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B8000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B8800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B9000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B9800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+BA000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+BA800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+BB000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+BB800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+BC000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+BC800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+BD000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+BD800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+BE000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+BE800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+BF000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+BF800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C0000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C0800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C1000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C1800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C2000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C2800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C3000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C3800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C4000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C4800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C5000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C5800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C6000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C6800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C7000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C7800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C8000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C8800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C9000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C9800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+CA000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+CA800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+CB000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+CB800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+CC000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+CC800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+CD000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+CD800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+CE000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+CE800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+CF000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+CF800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D0000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D0800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D1000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D1800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D2000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D2800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D3000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D3800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D4000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D4800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D5000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D5800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D6000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D6800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D7000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D7800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D8000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D8800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D9000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D9800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+DA000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+DA800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+DB000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+DB800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+DC000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+DC800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+DD000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+DD800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+DE000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+DE800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+DF000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+DF800 */
+282,283,284,285,283,283,283,283,283,283,283,283,283,283,283,283, /* U+E0000 */
+283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283, /* U+E0800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E1000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E1800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E2000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E2800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E3000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E3800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E4000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E4800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E5000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E5800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E6000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E6800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E7000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E7800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E8000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E8800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E9000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E9800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+EA000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+EA800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+EB000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+EB800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+EC000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+EC800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+ED000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+ED800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+EE000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+EE800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+EF000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+EF800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F0000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F0800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F1000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F1800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F2000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F2800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F3000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F3800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F4000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F4800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F5000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F5800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F6000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F6800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F7000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F7800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F8000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F8800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F9000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F9800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+FA000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+FA800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+FB000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+FB800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+FC000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+FC800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+FD000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+FD800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+FE000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+FE800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+FF000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,286, /* U+FF800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+100000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+100800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+101000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+101800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+102000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+102800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+103000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+103800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+104000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+104800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+105000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+105800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+106000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+106800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+107000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+107800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+108000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+108800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+109000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+109800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+10A000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+10A800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+10B000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+10B800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+10C000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+10C800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+10D000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+10D800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+10E000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+10E800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+10F000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,286, /* U+10F800 */
};
-const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
+const uint16_t PRIV(ucd_stage2)[] = { /* 73472 bytes, block = 128 */
/* block 0 */
0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 3, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
@@ -1840,463 +1866,463 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
/* block 12 */
215,215,215,215,215,216,217,217,217,218,218,219,220,218,221,221,
-222,222,222,222,222,222,222,222,222,222,222,220,223,120,218,220,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-225,224,224,224,224,224,224,224,224,224,224,226,226,226,226,226,
-226,226,226,226,226,226,222,222,222,222,222,222,222,222,222,222,
-227,227,227,227,227,227,227,227,227,227,218,218,218,218,224,224,
-226,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
+222,222,222,222,222,222,222,222,222,222,222,220,223,218,218,224,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+226,225,225,225,225,225,225,225,225,225,225,227,227,227,227,227,
+227,227,227,227,227,227,222,222,222,222,222,222,222,222,222,222,
+228,228,228,228,228,228,228,228,228,228,218,218,218,218,225,225,
+227,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
/* block 13 */
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,228,224,222,222,222,222,222,222,222,216,221,222,
-222,222,222,222,222,229,229,222,222,221,222,222,222,222,224,224,
-230,230,230,230,230,230,230,230,230,230,224,224,224,221,221,224,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,229,225,222,222,222,222,222,222,222,216,221,222,
+222,222,222,222,222,230,230,222,222,221,222,222,222,222,225,225,
+231,231,231,231,231,231,231,231,231,231,225,225,225,221,221,225,
/* block 14 */
-231,231,231,231,231,231,231,231,231,231,231,231,231,231,120,232,
-233,234,233,233,233,233,233,233,233,233,233,233,233,233,233,233,
-233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,
+232,232,232,232,232,232,232,232,232,232,232,232,232,232,120,233,
+234,235,234,234,234,234,234,234,234,234,234,234,234,234,234,234,
234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,
-234,234,234,234,234,234,234,234,234,234,234,120,120,233,233,233,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
+235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,
+235,235,235,235,235,235,235,235,235,235,235,120,120,234,234,234,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
/* block 15 */
-235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,
-235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,
-235,235,235,235,235,235,236,236,236,236,236,236,236,236,236,236,
-236,235,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-237,237,237,237,237,237,237,237,237,237,238,238,238,238,238,238,
-238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,
-238,238,238,238,238,238,238,238,238,238,238,239,239,239,239,239,
-239,239,239,239,240,240,241,242,242,242,240,120,120,239,243,243,
+236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,
+236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,
+236,236,236,236,236,236,237,237,237,237,237,237,237,237,237,237,
+237,236,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+238,238,238,238,238,238,238,238,238,238,239,239,239,239,239,239,
+239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,
+239,239,239,239,239,239,239,239,239,239,239,240,240,240,240,240,
+240,240,240,240,241,241,242,243,243,243,241,120,120,240,244,244,
/* block 16 */
-244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,
-244,244,244,244,244,244,245,245,245,245,246,245,245,245,245,245,
-245,245,245,245,246,245,245,245,246,245,245,245,245,245,120,120,
-247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,120,
-248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,
-248,248,248,248,248,248,248,248,248,249,249,249,120,120,250,120,
-233,233,233,233,233,233,233,233,233,233,233,120,120,120,120,120,
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,
+245,245,245,245,245,245,246,246,246,246,247,246,246,246,246,246,
+246,246,246,246,247,246,246,246,247,246,246,246,246,246,120,120,
+248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,120,
+249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,
+249,249,249,249,249,249,249,249,249,250,250,250,120,120,251,120,
+234,234,234,234,234,234,234,234,234,234,234,120,120,120,120,120,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
/* block 17 */
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,120,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,120,120,120,120,120,120,120,120,
-120,120,120,222,222,222,222,222,222,222,222,222,222,222,222,222,
+225,225,225,225,225,225,225,225,252,225,225,225,225,225,225,120,
+215,215,120,120,120,120,120,120,222,222,222,222,222,222,222,222,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,230,222,222,222,222,222,222,
+222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,
222,222,216,222,222,222,222,222,222,222,222,222,222,222,222,222,
222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,
/* block 18 */
-251,251,251,252,253,253,253,253,253,253,253,253,253,253,253,253,
-253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,
-253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,
-253,253,253,253,253,253,253,253,253,253,251,252,251,253,252,252,
-252,251,251,251,251,251,251,251,251,252,252,252,252,251,252,252,
-253,254,255,113,113,251,251,251,253,253,253,253,253,253,253,253,
-253,253,251,251,256,257,258,258,258,258,258,258,258,258,258,258,
-259,260,253,253,253,253,253,253,253,253,253,253,253,253,253,253,
+253,253,253,254,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,253,254,253,255,254,254,
+254,253,253,253,253,253,253,253,253,254,254,254,254,253,254,254,
+255,256,257,113,113,253,253,253,255,255,255,255,255,255,255,255,
+255,255,253,253,258,259,260,260,260,260,260,260,260,260,260,260,
+261,262,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
/* block 19 */
-261,262,263,263,120,261,261,261,261,261,261,261,261,120,120,261,
-261,120,120,261,261,261,261,261,261,261,261,261,261,261,261,261,
-261,261,261,261,261,261,261,261,261,120,261,261,261,261,261,261,
-261,120,261,120,120,120,261,261,261,261,120,120,262,261,264,263,
-263,262,262,262,262,120,120,263,263,120,120,263,263,262,261,120,
-120,120,120,120,120,120,120,264,120,120,120,120,261,261,120,261,
-261,261,262,262,120,120,265,265,265,265,265,265,265,265,265,265,
-261,261,266,266,267,267,267,267,267,267,268,266,261,269,262,120,
+263,264,265,265,120,263,263,263,263,263,263,263,263,120,120,263,
+263,120,120,263,263,263,263,263,263,263,263,263,263,263,263,263,
+263,263,263,263,263,263,263,263,263,120,263,263,263,263,263,263,
+263,120,263,120,120,120,263,263,263,263,120,120,264,263,266,265,
+265,264,264,264,264,120,120,265,265,120,120,265,265,264,263,120,
+120,120,120,120,120,120,120,266,120,120,120,120,263,263,120,263,
+263,263,264,264,120,120,267,267,267,267,267,267,267,267,267,267,
+263,263,268,268,269,269,269,269,269,269,270,268,263,271,264,120,
/* block 20 */
-120,270,270,271,120,272,272,272,272,272,272,120,120,120,120,272,
-272,120,120,272,272,272,272,272,272,272,272,272,272,272,272,272,
-272,272,272,272,272,272,272,272,272,120,272,272,272,272,272,272,
-272,120,272,272,120,272,272,120,272,272,120,120,270,120,271,271,
-271,270,270,120,120,120,120,270,270,120,120,270,270,270,120,120,
-120,270,120,120,120,120,120,120,120,272,272,272,272,120,272,120,
-120,120,120,120,120,120,273,273,273,273,273,273,273,273,273,273,
-270,270,272,272,272,270,274,120,120,120,120,120,120,120,120,120,
+120,272,272,273,120,274,274,274,274,274,274,120,120,120,120,274,
+274,120,120,274,274,274,274,274,274,274,274,274,274,274,274,274,
+274,274,274,274,274,274,274,274,274,120,274,274,274,274,274,274,
+274,120,274,274,120,274,274,120,274,274,120,120,272,120,273,273,
+273,272,272,120,120,120,120,272,272,120,120,272,272,272,120,120,
+120,272,120,120,120,120,120,120,120,274,274,274,274,120,274,120,
+120,120,120,120,120,120,275,275,275,275,275,275,275,275,275,275,
+272,272,274,274,274,272,276,120,120,120,120,120,120,120,120,120,
/* block 21 */
-120,275,275,276,120,277,277,277,277,277,277,277,277,277,120,277,
-277,277,120,277,277,277,277,277,277,277,277,277,277,277,277,277,
-277,277,277,277,277,277,277,277,277,120,277,277,277,277,277,277,
-277,120,277,277,120,277,277,277,277,277,120,120,275,277,276,276,
-276,275,275,275,275,275,120,275,275,276,120,276,276,275,120,120,
-277,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-277,277,275,275,120,120,278,278,278,278,278,278,278,278,278,278,
-279,280,120,120,120,120,120,120,120,277,275,275,275,275,275,275,
+120,277,277,278,120,279,279,279,279,279,279,279,279,279,120,279,
+279,279,120,279,279,279,279,279,279,279,279,279,279,279,279,279,
+279,279,279,279,279,279,279,279,279,120,279,279,279,279,279,279,
+279,120,279,279,120,279,279,279,279,279,120,120,277,279,278,278,
+278,277,277,277,277,277,120,277,277,278,120,278,278,277,120,120,
+279,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+279,279,277,277,120,120,280,280,280,280,280,280,280,280,280,280,
+281,282,120,120,120,120,120,120,120,279,277,277,277,277,277,277,
/* block 22 */
-120,281,282,282,120,283,283,283,283,283,283,283,283,120,120,283,
-283,120,120,283,283,283,283,283,283,283,283,283,283,283,283,283,
-283,283,283,283,283,283,283,283,283,120,283,283,283,283,283,283,
-283,120,283,283,120,283,283,283,283,283,120,120,281,283,284,281,
-282,281,281,281,281,120,120,282,282,120,120,282,282,281,120,120,
-120,120,120,120,120,281,281,284,120,120,120,120,283,283,120,283,
-283,283,281,281,120,120,285,285,285,285,285,285,285,285,285,285,
-286,283,287,287,287,287,287,287,120,120,120,120,120,120,120,120,
+120,283,284,284,120,285,285,285,285,285,285,285,285,120,120,285,
+285,120,120,285,285,285,285,285,285,285,285,285,285,285,285,285,
+285,285,285,285,285,285,285,285,285,120,285,285,285,285,285,285,
+285,120,285,285,120,285,285,285,285,285,120,120,283,285,286,283,
+284,283,283,283,283,120,120,284,284,120,120,284,284,283,120,120,
+120,120,120,120,120,283,283,286,120,120,120,120,285,285,120,285,
+285,285,283,283,120,120,287,287,287,287,287,287,287,287,287,287,
+288,285,289,289,289,289,289,289,120,120,120,120,120,120,120,120,
/* block 23 */
-120,120,288,289,120,289,289,289,289,289,289,120,120,120,289,289,
-289,120,289,289,289,289,120,120,120,289,289,120,289,120,289,289,
-120,120,120,289,289,120,120,120,289,289,289,120,120,120,289,289,
-289,289,289,289,289,289,289,289,289,289,120,120,120,120,290,291,
-288,291,291,120,120,120,291,291,291,120,291,291,291,288,120,120,
-289,120,120,120,120,120,120,290,120,120,120,120,120,120,120,120,
-120,120,120,120,120,120,292,292,292,292,292,292,292,292,292,292,
-293,293,293,294,295,295,295,295,295,296,295,120,120,120,120,120,
+120,120,290,291,120,291,291,291,291,291,291,120,120,120,291,291,
+291,120,291,291,291,291,120,120,120,291,291,120,291,120,291,291,
+120,120,120,291,291,120,120,120,291,291,291,120,120,120,291,291,
+291,291,291,291,291,291,291,291,291,291,120,120,120,120,292,293,
+290,293,293,120,120,120,293,293,293,120,293,293,293,290,120,120,
+291,120,120,120,120,120,120,292,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,294,294,294,294,294,294,294,294,294,294,
+295,295,295,296,297,297,297,297,297,298,297,120,120,120,120,120,
/* block 24 */
-297,298,298,298,297,299,299,299,299,299,299,299,299,120,299,299,
-299,120,299,299,299,299,299,299,299,299,299,299,299,299,299,299,
-299,299,299,299,299,299,299,299,299,120,299,299,299,299,299,299,
-299,299,299,299,299,299,299,299,299,299,120,120,120,299,297,297,
-297,298,298,298,298,120,297,297,297,120,297,297,297,297,120,120,
-120,120,120,120,120,297,297,120,299,299,299,120,120,120,120,120,
-299,299,297,297,120,120,300,300,300,300,300,300,300,300,300,300,
-120,120,120,120,120,120,120,301,302,302,302,302,302,302,302,303,
+299,300,300,300,299,301,301,301,301,301,301,301,301,120,301,301,
+301,120,301,301,301,301,301,301,301,301,301,301,301,301,301,301,
+301,301,301,301,301,301,301,301,301,120,301,301,301,301,301,301,
+301,301,301,301,301,301,301,301,301,301,120,120,299,301,299,299,
+299,300,300,300,300,120,299,299,299,120,299,299,299,299,120,120,
+120,120,120,120,120,299,299,120,301,301,301,120,120,301,120,120,
+301,301,299,299,120,120,302,302,302,302,302,302,302,302,302,302,
+120,120,120,120,120,120,120,303,304,304,304,304,304,304,304,305,
/* block 25 */
-304,305,306,306,307,304,304,304,304,304,304,304,304,120,304,304,
-304,120,304,304,304,304,304,304,304,304,304,304,304,304,304,304,
-304,304,304,304,304,304,304,304,304,120,304,304,304,304,304,304,
-304,304,304,304,120,304,304,304,304,304,120,120,305,304,306,305,
-306,306,308,306,306,120,305,306,306,120,306,306,305,305,120,120,
-120,120,120,120,120,308,308,120,120,120,120,120,120,120,304,120,
-304,304,305,305,120,120,309,309,309,309,309,309,309,309,309,309,
-120,304,304,120,120,120,120,120,120,120,120,120,120,120,120,120,
+306,307,308,308,309,306,306,306,306,306,306,306,306,120,306,306,
+306,120,306,306,306,306,306,306,306,306,306,306,306,306,306,306,
+306,306,306,306,306,306,306,306,306,120,306,306,306,306,306,306,
+306,306,306,306,120,306,306,306,306,306,120,120,307,306,308,307,
+308,308,310,308,308,120,307,308,308,120,308,308,307,307,120,120,
+120,120,120,120,120,310,310,120,120,120,120,120,120,306,306,120,
+306,306,307,307,120,120,311,311,311,311,311,311,311,311,311,311,
+120,306,306,120,120,120,120,120,120,120,120,120,120,120,120,120,
/* block 26 */
-310,310,311,311,312,312,312,312,312,312,312,312,312,120,312,312,
-312,120,312,312,312,312,312,312,312,312,312,312,312,312,312,312,
-312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,
-312,312,312,312,312,312,312,312,312,312,312,310,310,312,313,311,
-311,310,310,310,310,120,311,311,311,120,311,311,311,310,314,315,
-120,120,120,120,312,312,312,313,316,316,316,316,316,316,316,312,
-312,312,310,310,120,120,317,317,317,317,317,317,317,317,317,317,
-316,316,316,316,316,316,316,316,316,315,312,312,312,312,312,312,
+312,312,313,313,314,314,314,314,314,314,314,314,314,120,314,314,
+314,120,314,314,314,314,314,314,314,314,314,314,314,314,314,314,
+314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,
+314,314,314,314,314,314,314,314,314,314,314,312,312,314,315,313,
+313,312,312,312,312,120,313,313,313,120,313,313,313,312,316,317,
+120,120,120,120,314,314,314,315,318,318,318,318,318,318,318,314,
+314,314,312,312,120,120,319,319,319,319,319,319,319,319,319,319,
+318,318,318,318,318,318,318,318,318,317,314,314,314,314,314,314,
/* block 27 */
-120,318,319,319,120,320,320,320,320,320,320,320,320,320,320,320,
-320,320,320,320,320,320,320,120,120,120,320,320,320,320,320,320,
-320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,
-320,320,120,320,320,320,320,320,320,320,320,320,120,320,120,120,
-320,320,320,320,320,320,320,120,120,120,318,120,120,120,120,321,
-319,319,318,318,318,120,318,120,319,319,319,319,319,319,319,321,
-120,120,120,120,120,120,322,322,322,322,322,322,322,322,322,322,
-120,120,319,319,323,120,120,120,120,120,120,120,120,120,120,120,
+120,320,321,321,120,322,322,322,322,322,322,322,322,322,322,322,
+322,322,322,322,322,322,322,120,120,120,322,322,322,322,322,322,
+322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,
+322,322,120,322,322,322,322,322,322,322,322,322,120,322,120,120,
+322,322,322,322,322,322,322,120,120,120,320,120,120,120,120,323,
+321,321,320,320,320,120,320,120,321,321,321,321,321,321,321,323,
+120,120,120,120,120,120,324,324,324,324,324,324,324,324,324,324,
+120,120,321,321,325,120,120,120,120,120,120,120,120,120,120,120,
/* block 28 */
-120,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,
-324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,
-324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,
-324,325,324,326,325,325,325,325,325,325,325,120,120,120,120, 6,
-324,324,324,324,324,324,327,325,325,325,325,325,325,325,325,328,
-329,329,329,329,329,329,329,329,329,329,328,328,120,120,120,120,
+120,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,
+326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,
+326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,
+326,327,326,328,327,327,327,327,327,327,327,120,120,120,120, 6,
+326,326,326,326,326,326,329,327,327,327,327,327,327,327,327,330,
+331,331,331,331,331,331,331,331,331,331,330,330,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
/* block 29 */
-120,330,330,120,330,120,330,330,330,330,330,120,330,330,330,330,
-330,330,330,330,330,330,330,330,330,330,330,330,330,330,330,330,
-330,330,330,330,120,330,120,330,330,330,330,330,330,330,330,330,
-330,331,330,332,331,331,331,331,331,331,331,331,331,330,120,120,
-330,330,330,330,330,120,333,120,331,331,331,331,331,331,120,120,
-334,334,334,334,334,334,334,334,334,334,120,120,330,330,330,330,
+120,332,332,120,332,120,332,332,332,332,332,120,332,332,332,332,
+332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,
+332,332,332,332,120,332,120,332,332,332,332,332,332,332,332,332,
+332,333,332,334,333,333,333,333,333,333,333,333,333,332,120,120,
+332,332,332,332,332,120,335,120,333,333,333,333,333,333,120,120,
+336,336,336,336,336,336,336,336,336,336,120,120,332,332,332,332,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
/* block 30 */
-335,336,336,336,337,337,337,337,337,337,337,337,337,337,337,337,
-337,337,337,336,337,336,336,336,338,338,336,336,336,336,336,336,
-339,339,339,339,339,339,339,339,339,339,340,340,340,340,340,340,
-340,340,340,340,336,338,336,338,336,338,341,342,341,342,343,343,
-335,335,335,335,335,335,335,335,120,335,335,335,335,335,335,335,
-335,335,335,335,335,335,335,335,335,335,335,335,335,335,335,335,
-335,335,335,335,335,335,335,335,335,335,335,335,335,120,120,120,
-120,338,338,338,338,338,338,338,338,338,338,338,338,338,338,343,
+337,338,338,338,339,339,339,339,339,339,339,339,339,339,339,339,
+339,339,339,338,339,338,338,338,340,340,338,338,338,338,338,338,
+341,341,341,341,341,341,341,341,341,341,342,342,342,342,342,342,
+342,342,342,342,338,340,338,340,338,340,343,344,343,344,345,345,
+337,337,337,337,337,337,337,337,120,337,337,337,337,337,337,337,
+337,337,337,337,337,337,337,337,337,337,337,337,337,337,337,337,
+337,337,337,337,337,337,337,337,337,337,337,337,337,120,120,120,
+120,340,340,340,340,340,340,340,340,340,340,340,340,340,340,345,
/* block 31 */
-338,338,338,338,338,337,338,338,335,335,335,335,335,338,338,338,
-338,338,338,338,338,338,338,338,120,338,338,338,338,338,338,338,
-338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,
-338,338,338,338,338,338,338,338,338,338,338,338,338,120,336,336,
-336,336,336,336,336,336,338,336,336,336,336,336,336,120,336,336,
-337,337,337,337,337, 20, 20, 20, 20,337,337,120,120,120,120,120,
+340,340,340,340,340,339,340,340,337,337,337,337,337,340,340,340,
+340,340,340,340,340,340,340,340,120,340,340,340,340,340,340,340,
+340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,
+340,340,340,340,340,340,340,340,340,340,340,340,340,120,338,338,
+338,338,338,338,338,338,340,338,338,338,338,338,338,120,338,338,
+339,339,339,339,339, 20, 20, 20, 20,339,339,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
/* block 32 */
-344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,
-344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,
-344,344,344,344,344,344,344,344,344,344,344,345,345,346,346,346,
-346,347,346,346,346,346,346,346,345,346,346,347,347,346,346,344,
-348,348,348,348,348,348,348,348,348,348,349,349,349,349,349,349,
-344,344,344,344,344,344,347,347,346,346,344,344,344,344,346,346,
-346,344,345,345,345,344,344,345,345,345,345,345,345,345,344,344,
-344,346,346,346,346,344,344,344,344,344,344,344,344,344,344,344,
+346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,
+346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,
+346,346,346,346,346,346,346,346,346,346,346,347,347,348,348,348,
+348,349,348,348,348,348,348,348,347,348,348,349,349,348,348,346,
+350,350,350,350,350,350,350,350,350,350,351,351,351,351,351,351,
+346,346,346,346,346,346,349,349,348,348,346,346,346,346,348,348,
+348,346,347,347,347,346,346,347,347,347,347,347,347,347,346,346,
+346,348,348,348,348,346,346,346,346,346,346,346,346,346,346,346,
/* block 33 */
-344,344,346,345,347,346,346,345,345,345,345,345,345,346,344,345,
-350,350,350,350,350,350,350,350,350,350,345,345,345,346,351,351,
-352,352,352,352,352,352,352,352,352,352,352,352,352,352,352,352,
-352,352,352,352,352,352,352,352,352,352,352,352,352,352,352,352,
-352,352,352,352,352,352,120,352,120,120,120,120,120,352,120,120,
-353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,
-353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,
-353,353,353,353,353,353,353,353,353,353,353,354,355,353,353,353,
+346,346,348,347,349,348,348,347,347,347,347,347,347,348,346,347,
+352,352,352,352,352,352,352,352,352,352,347,347,347,348,353,353,
+354,354,354,354,354,354,354,354,354,354,354,354,354,354,354,354,
+354,354,354,354,354,354,354,354,354,354,354,354,354,354,354,354,
+354,354,354,354,354,354,120,354,120,120,120,120,120,354,120,120,
+355,355,355,355,355,355,355,355,355,355,355,355,355,355,355,355,
+355,355,355,355,355,355,355,355,355,355,355,355,355,355,355,355,
+355,355,355,355,355,355,355,355,355,355,355,356,357,355,355,355,
/* block 34 */
-356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,
-356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,
-356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,
-356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,
-356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,
-356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,
-357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,
-357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,
-
-/* block 35 */
-357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,
-357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,
-357,357,357,357,357,357,357,357,358,358,358,358,358,358,358,358,
358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,
358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,
358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,
358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,
358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,
-
-/* block 36 */
-359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,
-359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,
+358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,
359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,
359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,
-359,359,359,359,359,359,359,359,359,120,359,359,359,359,120,120,
-359,359,359,359,359,359,359,120,359,120,359,359,359,359,120,120,
+
+/* block 35 */
359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,
359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,
+359,359,359,359,359,359,359,359,360,360,360,360,360,360,360,360,
+360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,
+360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,
+360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,
+360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,
+360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,
+
+/* block 36 */
+361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,
+361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,
+361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,
+361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,
+361,361,361,361,361,361,361,361,361,120,361,361,361,361,120,120,
+361,361,361,361,361,361,361,120,361,120,361,361,361,361,120,120,
+361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,
+361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,
/* block 37 */
-359,359,359,359,359,359,359,359,359,120,359,359,359,359,120,120,
-359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,
-359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,
-359,120,359,359,359,359,120,120,359,359,359,359,359,359,359,120,
-359,120,359,359,359,359,120,120,359,359,359,359,359,359,359,359,
-359,359,359,359,359,359,359,120,359,359,359,359,359,359,359,359,
-359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,
-359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,
+361,361,361,361,361,361,361,361,361,120,361,361,361,361,120,120,
+361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,
+361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,
+361,120,361,361,361,361,120,120,361,361,361,361,361,361,361,120,
+361,120,361,361,361,361,120,120,361,361,361,361,361,361,361,361,
+361,361,361,361,361,361,361,120,361,361,361,361,361,361,361,361,
+361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,
+361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,
/* block 38 */
-359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,
-359,120,359,359,359,359,120,120,359,359,359,359,359,359,359,359,
-359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,
-359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,
-359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,
-359,359,359,359,359,359,359,359,359,359,359,120,120,360,360,360,
-361,361,361,361,361,361,361,361,361,362,362,362,362,362,362,362,
-362,362,362,362,362,362,362,362,362,362,362,362,362,120,120,120,
+361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,
+361,120,361,361,361,361,120,120,361,361,361,361,361,361,361,361,
+361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,
+361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,
+361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,
+361,361,361,361,361,361,361,361,361,361,361,120,120,362,362,362,
+363,363,363,363,363,363,363,363,363,364,364,364,364,364,364,364,
+364,364,364,364,364,364,364,364,364,364,364,364,364,120,120,120,
/* block 39 */
-359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,
-363,363,363,363,363,363,363,363,363,363,120,120,120,120,120,120,
-364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,
-364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,
-364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,
-364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,
-364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,
-365,365,365,365,365,365,120,120,366,366,366,366,366,366,120,120,
+361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,
+365,365,365,365,365,365,365,365,365,365,120,120,120,120,120,120,
+366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,
+366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,
+366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,
+366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,
+366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,
+367,367,367,367,367,367,120,120,368,368,368,368,368,368,120,120,
/* block 40 */
-367,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,
-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,
-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,
-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,
-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,
-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,
-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,
-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,
+369,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,
+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,
+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,
+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,
+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,
+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,
+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,
+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,
/* block 41 */
-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,
-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,
-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,
-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,
-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,
-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,
-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,
-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,
+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,
+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,
+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,
+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,
+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,
+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,
+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,
+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,
/* block 42 */
-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,
-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,
-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,
-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,
-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,
-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,
-368,368,368,368,368,368,368,368,368,368,368,368,368,369,370,368,
-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,
+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,
+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,
+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,
+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,
+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,
+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,
+370,370,370,370,370,370,370,370,370,370,370,370,370,371,372,370,
+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,
/* block 43 */
-371,372,372,372,372,372,372,372,372,372,372,372,372,372,372,372,
-372,372,372,372,372,372,372,372,372,372,372,373,374,120,120,120,
-375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,
-375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,
-375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,
-375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,
-375,375,375,375,375,375,375,375,375,375,375, 5, 5, 5,376,376,
-376,375,375,375,375,375,375,375,375,120,120,120,120,120,120,120,
+373,374,374,374,374,374,374,374,374,374,374,374,374,374,374,374,
+374,374,374,374,374,374,374,374,374,374,374,375,376,120,120,120,
+377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,
+377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,
+377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,
+377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,
+377,377,377,377,377,377,377,377,377,377,377, 5, 5, 5,378,378,
+378,377,377,377,377,377,377,377,377,120,120,120,120,120,120,120,
/* block 44 */
-377,377,377,377,377,377,377,377,377,377,377,377,377,120,377,377,
-377,377,378,378,378,120,120,120,120,120,120,120,120,120,120,120,
379,379,379,379,379,379,379,379,379,379,379,379,379,379,379,379,
-379,379,380,380,380,381,381,120,120,120,120,120,120,120,120,120,
+379,379,380,380,380,381,120,120,120,120,120,120,120,120,120,379,
382,382,382,382,382,382,382,382,382,382,382,382,382,382,382,382,
-382,382,383,383,120,120,120,120,120,120,120,120,120,120,120,120,
-384,384,384,384,384,384,384,384,384,384,384,384,384,120,384,384,
-384,120,385,385,120,120,120,120,120,120,120,120,120,120,120,120,
+382,382,383,383,384,385,385,120,120,120,120,120,120,120,120,120,
+386,386,386,386,386,386,386,386,386,386,386,386,386,386,386,386,
+386,386,387,387,120,120,120,120,120,120,120,120,120,120,120,120,
+388,388,388,388,388,388,388,388,388,388,388,388,388,120,388,388,
+388,120,389,389,120,120,120,120,120,120,120,120,120,120,120,120,
/* block 45 */
-386,386,386,386,386,386,386,386,386,386,386,386,386,386,386,386,
-386,386,386,386,386,386,386,386,386,386,386,386,386,386,386,386,
-386,386,386,386,386,386,386,386,386,386,386,386,386,386,386,386,
-386,386,386,386,387,387,388,387,387,387,387,387,387,387,388,388,
-388,388,388,388,388,388,387,388,388,387,387,387,387,387,387,387,
-387,387,387,387,389,389,389,390,389,389,389,391,386,387,120,120,
-392,392,392,392,392,392,392,392,392,392,120,120,120,120,120,120,
-393,393,393,393,393,393,393,393,393,393,120,120,120,120,120,120,
+390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,
+390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,
+390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,
+390,390,390,390,391,391,392,391,391,391,391,391,391,391,392,392,
+392,392,392,392,392,392,391,392,392,391,391,391,391,391,391,391,
+391,391,391,391,393,393,393,394,393,393,393,395,390,391,120,120,
+396,396,396,396,396,396,396,396,396,396,120,120,120,120,120,120,
+397,397,397,397,397,397,397,397,397,397,120,120,120,120,120,120,
/* block 46 */
-394,394,395,395,394,395,396,394,394,394,394,397,397,397,398,120,
-399,399,399,399,399,399,399,399,399,399,120,120,120,120,120,120,
-400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,
-400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,
-400,400,400,401,400,400,400,400,400,400,400,400,400,400,400,400,
-400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,
-400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,
-400,400,400,400,400,400,400,400,400,120,120,120,120,120,120,120,
+398,398,399,399,398,399,400,398,398,398,398,401,401,401,402,401,
+403,403,403,403,403,403,403,403,403,403,120,120,120,120,120,120,
+404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,
+404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,
+404,404,404,405,404,404,404,404,404,404,404,404,404,404,404,404,
+404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,
+404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,
+404,404,404,404,404,404,404,404,404,120,120,120,120,120,120,120,
/* block 47 */
-400,400,400,400,400,397,397,400,400,400,400,400,400,400,400,400,
-400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,
-400,400,400,400,400,400,400,400,400,397,400,120,120,120,120,120,
-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,
-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,
-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,
-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,
-368,368,368,368,368,368,120,120,120,120,120,120,120,120,120,120,
+404,404,404,404,404,401,401,404,404,404,404,404,404,404,404,404,
+404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,
+404,404,404,404,404,404,404,404,404,401,404,120,120,120,120,120,
+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,
+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,
+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,
+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,
+370,370,370,370,370,370,120,120,120,120,120,120,120,120,120,120,
/* block 48 */
-402,402,402,402,402,402,402,402,402,402,402,402,402,402,402,402,
-402,402,402,402,402,402,402,402,402,402,402,402,402,402,402,120,
-403,403,403,404,404,404,404,403,403,404,404,404,120,120,120,120,
-404,404,403,404,404,404,404,404,404,403,403,403,120,120,120,120,
-405,120,120,120,406,406,407,407,407,407,407,407,407,407,407,407,
-408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,
-408,408,408,408,408,408,408,408,408,408,408,408,408,408,120,120,
-408,408,408,408,408,120,120,120,120,120,120,120,120,120,120,120,
+406,406,406,406,406,406,406,406,406,406,406,406,406,406,406,406,
+406,406,406,406,406,406,406,406,406,406,406,406,406,406,406,120,
+407,407,407,408,408,408,408,407,407,408,408,408,120,120,120,120,
+408,408,407,408,408,408,408,408,408,407,407,407,120,120,120,120,
+409,120,120,120,410,410,411,411,411,411,411,411,411,411,411,411,
+412,412,412,412,412,412,412,412,412,412,412,412,412,412,412,412,
+412,412,412,412,412,412,412,412,412,412,412,412,412,412,120,120,
+412,412,412,412,412,120,120,120,120,120,120,120,120,120,120,120,
/* block 49 */
-409,409,409,409,409,409,409,409,409,409,409,409,409,409,409,409,
-409,409,409,409,409,409,409,409,409,409,409,409,409,409,409,409,
-409,409,409,409,409,409,409,409,409,409,409,409,120,120,120,120,
-409,409,409,409,409,409,409,409,409,409,409,409,409,409,409,409,
-409,409,409,409,409,409,409,409,409,409,120,120,120,120,120,120,
-410,410,410,410,410,410,410,410,410,410,411,120,120,120,412,412,
413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,
413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,
+413,413,413,413,413,413,413,413,413,413,413,413,120,120,120,120,
+413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,
+413,413,413,413,413,413,413,413,413,413,120,120,120,120,120,120,
+414,414,414,414,414,414,414,414,414,414,415,120,120,120,416,416,
+417,417,417,417,417,417,417,417,417,417,417,417,417,417,417,417,
+417,417,417,417,417,417,417,417,417,417,417,417,417,417,417,417,
/* block 50 */
-414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,
-414,414,414,414,414,414,414,415,415,416,416,415,120,120,417,417,
-418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,
-418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,
418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,
-418,418,418,418,418,419,420,419,420,420,420,420,420,420,420,120,
-420,421,420,421,421,420,420,420,420,420,420,420,420,419,419,419,
-419,419,419,420,420,420,420,420,420,420,420,420,420,120,120,420,
+418,418,418,418,418,418,418,419,419,420,420,419,120,120,421,421,
+422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,
+422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,
+422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,
+422,422,422,422,422,423,424,423,424,424,424,424,424,424,424,120,
+424,425,424,425,425,424,424,424,424,424,424,424,424,423,423,423,
+423,423,423,424,424,424,424,424,424,424,424,424,424,120,120,424,
/* block 51 */
-422,422,422,422,422,422,422,422,422,422,120,120,120,120,120,120,
-422,422,422,422,422,422,422,422,422,422,120,120,120,120,120,120,
-423,423,423,423,423,423,423,424,423,423,423,423,423,423,120,120,
-113,113,113,113,113,113,113,113,113,113,113,113,113,113,425,113,
-113,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+426,426,426,426,426,426,426,426,426,426,120,120,120,120,120,120,
+426,426,426,426,426,426,426,426,426,426,120,120,120,120,120,120,
+427,427,427,427,427,427,427,428,427,427,427,427,427,427,120,120,
+113,113,113,113,113,113,113,113,113,113,113,113,113,113,429,113,
+113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
/* block 52 */
-426,426,426,426,427,428,428,428,428,428,428,428,428,428,428,428,
-428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,
-428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,
-428,428,428,428,426,429,426,426,426,426,426,427,426,427,427,427,
-427,427,426,427,427,428,428,428,428,428,428,428,120,120,120,120,
-430,430,430,430,430,430,430,430,430,430,431,431,431,431,431,431,
-431,432,432,432,432,432,432,432,432,432,432,426,426,426,426,426,
-426,426,426,426,432,432,432,432,432,432,432,432,432,120,120,120,
+430,430,430,430,431,432,432,432,432,432,432,432,432,432,432,432,
+432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,
+432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,
+432,432,432,432,430,433,430,430,430,430,430,431,430,431,431,431,
+431,431,430,431,431,432,432,432,432,432,432,432,432,120,120,120,
+434,434,434,434,434,434,434,434,434,434,435,435,435,435,435,435,
+435,436,436,436,436,436,436,436,436,436,436,430,430,430,430,430,
+430,430,430,430,436,436,436,436,436,436,436,436,436,435,435,120,
/* block 53 */
-433,433,434,435,435,435,435,435,435,435,435,435,435,435,435,435,
-435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,
-435,434,433,433,433,433,434,434,433,433,434,433,433,433,435,435,
-436,436,436,436,436,436,436,436,436,436,435,435,435,435,435,435,
-437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,
-437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,
-437,437,437,437,437,437,438,439,438,438,439,439,439,438,439,438,
-438,438,439,439,120,120,120,120,120,120,120,120,440,440,440,440,
-
-/* block 54 */
+437,437,438,439,439,439,439,439,439,439,439,439,439,439,439,439,
+439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,
+439,438,437,437,437,437,438,438,437,437,438,437,437,437,439,439,
+440,440,440,440,440,440,440,440,440,440,439,439,439,439,439,439,
441,441,441,441,441,441,441,441,441,441,441,441,441,441,441,441,
441,441,441,441,441,441,441,441,441,441,441,441,441,441,441,441,
-441,441,441,441,442,442,442,442,442,442,442,442,443,443,443,443,
-443,443,443,443,442,442,443,443,120,120,120,444,444,444,444,444,
-445,445,445,445,445,445,445,445,445,445,120,120,120,441,441,441,
-446,446,446,446,446,446,446,446,446,446,447,447,447,447,447,447,
-447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,
-447,447,447,447,447,447,447,447,448,448,448,448,448,448,449,449,
+441,441,441,441,441,441,442,443,442,442,443,443,443,442,443,442,
+442,442,443,443,120,120,120,120,120,120,120,120,444,444,444,444,
+
+/* block 54 */
+445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,
+445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,
+445,445,445,445,446,446,446,446,446,446,446,446,447,447,447,447,
+447,447,447,447,446,446,447,447,120,120,120,448,448,448,448,448,
+449,449,449,449,449,449,449,449,449,449,120,120,120,445,445,445,
+450,450,450,450,450,450,450,450,450,450,451,451,451,451,451,451,
+451,451,451,451,451,451,451,451,451,451,451,451,451,451,451,451,
+451,451,451,451,451,451,451,451,452,452,452,452,452,452,453,453,
/* block 55 */
-450,451,452,453,454,455,456,457,458,120,120,120,120,120,120,120,
-459,459,459,459,459,459,459,459,459,459,459,459,459,459,459,459,
-459,459,459,459,459,459,459,459,459,459,459,459,459,459,459,459,
-459,459,459,459,459,459,459,459,459,459,459,120,120,459,459,459,
-460,460,460,460,460,460,460,460,120,120,120,120,120,120,120,120,
-461,462,461,463,462,464,464,465,464,465,466,462,465,465,462,462,
-465,467,462,462,462,462,462,462,462,468,469,470,470,464,470,470,
-470,470,471,472,473,469,469,474,475,475,476,120,120,120,120,120,
+454,455,456,457,458,459,460,461,462,120,120,120,120,120,120,120,
+463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,
+463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,
+463,463,463,463,463,463,463,463,463,463,463,120,120,463,463,463,
+464,464,464,464,464,464,464,464,120,120,120,120,120,120,120,120,
+465,466,465,467,466,468,468,469,468,469,470,466,469,469,466,466,
+469,471,466,466,466,466,466,466,466,472,473,474,474,468,474,474,
+474,474,475,476,477,473,473,478,479,479,480,120,120,120,120,120,
/* block 56 */
35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35,128,128,128,128,128,477,110,110,110,110,
+ 35, 35, 35, 35, 35, 35,128,128,128,128,128,481,110,110,110,110,
110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,
110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,
110,110,110,110,110,110,110,110,110,110,110,110,110,121,121,121,
121,121,110,110,110,110,121,121,121,121,121, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35,478,479, 35, 35, 35,480, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35,482,483, 35, 35, 35,484, 35, 35,
/* block 57 */
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,481, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,485, 35,
35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,110,110,110,110,110,
110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,
110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,121,
114,114,113,113,113,113,113,113,113,113,113,113,113,113,113,113,
113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,
113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,
-113,113,113,113,113,113,113,113,482,113,120,113,113,113,113,113,
+113,113,113,113,113,113,113,113,486,113,487,113,113,113,113,113,
/* block 58 */
32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,
@@ -2305,12 +2331,12 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,
32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,
32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,
-483,484, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,
+488,489, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,
32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,
/* block 59 */
32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,
- 32, 33, 32, 33, 32, 33, 35, 35, 35, 35, 35,485, 35, 35,486, 35,
+ 32, 33, 32, 33, 32, 33, 35, 35, 35, 35, 35,490, 35, 35,491, 35,
32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,
32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,
32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,
@@ -2319,33 +2345,33 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,
/* block 60 */
-487,487,487,487,487,487,487,487,488,488,488,488,488,488,488,488,
-487,487,487,487,487,487,120,120,488,488,488,488,488,488,120,120,
-487,487,487,487,487,487,487,487,488,488,488,488,488,488,488,488,
-487,487,487,487,487,487,487,487,488,488,488,488,488,488,488,488,
-487,487,487,487,487,487,120,120,488,488,488,488,488,488,120,120,
-128,487,128,487,128,487,128,487,120,488,120,488,120,488,120,488,
-487,487,487,487,487,487,487,487,488,488,488,488,488,488,488,488,
-489,489,490,490,490,490,491,491,492,492,493,493,494,494,120,120,
+492,492,492,492,492,492,492,492,493,493,493,493,493,493,493,493,
+492,492,492,492,492,492,120,120,493,493,493,493,493,493,120,120,
+492,492,492,492,492,492,492,492,493,493,493,493,493,493,493,493,
+492,492,492,492,492,492,492,492,493,493,493,493,493,493,493,493,
+492,492,492,492,492,492,120,120,493,493,493,493,493,493,120,120,
+128,492,128,492,128,492,128,492,120,493,120,493,120,493,120,493,
+492,492,492,492,492,492,492,492,493,493,493,493,493,493,493,493,
+494,494,495,495,495,495,496,496,497,497,498,498,499,499,120,120,
/* block 61 */
-487,487,487,487,487,487,487,487,495,495,495,495,495,495,495,495,
-487,487,487,487,487,487,487,487,495,495,495,495,495,495,495,495,
-487,487,487,487,487,487,487,487,495,495,495,495,495,495,495,495,
-487,487,128,496,128,120,128,128,488,488,497,497,498,119,499,119,
-119,119,128,496,128,120,128,128,500,500,500,500,498,119,119,119,
-487,487,128,128,120,120,128,128,488,488,501,501,120,119,119,119,
-487,487,128,128,128,169,128,128,488,488,502,502,174,119,119,119,
-120,120,128,496,128,120,128,128,503,503,504,504,498,119,119,120,
+492,492,492,492,492,492,492,492,500,500,500,500,500,500,500,500,
+492,492,492,492,492,492,492,492,500,500,500,500,500,500,500,500,
+492,492,492,492,492,492,492,492,500,500,500,500,500,500,500,500,
+492,492,128,501,128,120,128,128,493,493,502,502,503,119,504,119,
+119,119,128,501,128,120,128,128,505,505,505,505,503,119,119,119,
+492,492,128,128,120,120,128,128,493,493,506,506,120,119,119,119,
+492,492,128,128,128,169,128,128,493,493,507,507,174,119,119,119,
+120,120,128,501,128,120,128,128,508,508,509,509,503,119,119,120,
/* block 62 */
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 24,505,506, 24, 24,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 24,510,511, 24, 24,
10, 10, 10, 10, 10, 10, 5, 5, 23, 27, 7, 23, 23, 27, 7, 23,
- 5, 5, 5, 5, 5, 5, 5, 5,507,508, 24, 24, 24, 24, 24,509,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 23, 27, 5,510, 5, 5, 16,
- 16, 5, 5, 5, 9, 7, 8, 5, 5,510, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5,512,513, 24, 24, 24, 24, 24,514,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 23, 27, 5,515, 5, 5, 16,
+ 16, 5, 5, 5, 9, 7, 8, 5, 5,515, 5, 5, 5, 5, 5, 5,
5, 5, 9, 5, 16, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4,
- 24, 24, 24, 24, 24,511, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24,516, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
25,110,120,120, 25, 25, 25, 25, 25, 25, 9, 9, 9, 7, 8,110,
/* block 63 */
@@ -2353,24 +2379,24 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
110,110,110,110,110,110,110,110,110,110,110,110,110,120,120,120,
6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-113,113,113,113,113,113,113,113,113,113,113,113,113,425,425,425,
-425,113,425,425,425,113,113,113,113,113,113,113,113,113,113,113,
-512,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+ 6,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+113,113,113,113,113,113,113,113,113,113,113,113,113,429,429,429,
+429,113,429,429,429,113,113,113,113,113,113,113,113,113,113,113,
+517,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
/* block 64 */
- 20, 20,513, 20, 20, 20, 20,513, 20, 20,514,513,513,513,514,514,
-513,513,513,514, 20,513, 20, 20, 9,513,513,513,513,513, 20, 20,
- 20, 20, 21, 20,513, 20,515, 20,513, 20,516,517,513,513, 20,514,
-513,513,518,513,514,519,519,519,519,520, 20, 20,514,514,513,513,
- 9, 9, 9, 9, 9,513,514,514,514,514, 20, 9, 20, 20,521, 20,
+ 20, 20,518, 20, 20, 20, 20,518, 20, 20,519,518,518,518,519,519,
+518,518,518,519, 20,518, 20, 20, 9,518,518,518,518,518, 20, 20,
+ 20, 20, 21, 20,518, 20,520, 20,518, 20,521,522,518,518, 20,519,
+518,518,523,518,519,524,524,524,524,525, 20, 20,519,519,518,518,
+ 9, 9, 9, 9, 9,518,519,519,519,519, 20, 9, 20, 20,526, 20,
25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
-522,522,522,522,522,522,522,522,522,522,522,522,522,522,522,522,
-523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,
+527,527,527,527,527,527,527,527,527,527,527,527,527,527,527,527,
+528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,
/* block 65 */
-524,524,524, 32, 33,524,524,524,524, 25, 20, 20,120,120,120,120,
- 9, 9, 9, 9,525, 21, 21, 21, 21, 21, 9, 9, 20, 20, 20, 20,
+529,529,529, 32, 33,529,529,529,529, 25, 20, 20,120,120,120,120,
+ 9, 9, 9, 9,530, 21, 21, 21, 21, 21, 9, 9, 20, 20, 20, 20,
9, 20, 20, 9, 20, 20, 9, 20, 20, 21, 21, 20, 20, 20, 9, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 9, 9,
@@ -2422,10 +2448,10 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
- 20, 20, 20, 20, 20, 20,526,526,526,526,526,526,526,526,526,526,
-526,526,527,526,526,526,526,526,526,526,526,526,526,526,526,526,
-528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,
-528,528,528,528,528,528,528,528,528,528, 25, 25, 25, 25, 25, 25,
+ 20, 20, 20, 20, 20, 20,531,531,531,531,531,531,531,531,531,531,
+531,531,532,531,531,531,531,531,531,531,531,531,531,531,531,531,
+533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,
+533,533,533,533,533,533,533,533,533,533, 25, 25, 25, 25, 25, 25,
25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
/* block 71 */
@@ -2446,7 +2472,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
21, 9, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
- 20, 20, 20, 20, 20, 20, 20, 20, 9, 9, 9,525,525,525,525, 9,
+ 20, 20, 20, 20, 20, 20, 20, 20, 9, 9, 9,530,530,530,530, 9,
/* block 73 */
21, 21, 21, 21, 21, 21, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21,
@@ -2455,7 +2481,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,525,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,530,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
/* block 74 */
@@ -2489,20 +2515,20 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
/* block 77 */
-529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,
-529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,
-529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,
-529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,
-529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,
-529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,
-529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,
-529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,
+534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,
+534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,
+534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,
+534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,
+534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,
+534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,
+534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,
+534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,
/* block 78 */
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9,525,525, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9,530,530, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
@@ -2539,14 +2565,14 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
/* block 82 */
-530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,
-530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,
-530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,120,
-531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,
-531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,
-531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,120,
- 32, 33,532,533,534,535,536, 32, 33, 32, 33, 32, 33,537,538,539,
-540, 35, 32, 33, 35, 32, 33, 35, 35, 35, 35, 35,110,110,541,541,
+535,535,535,535,535,535,535,535,535,535,535,535,535,535,535,535,
+535,535,535,535,535,535,535,535,535,535,535,535,535,535,535,535,
+535,535,535,535,535,535,535,535,535,535,535,535,535,535,535,535,
+536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,
+536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,
+536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,
+ 32, 33,537,538,539,540,541, 32, 33, 32, 33, 32, 33,542,543,544,
+545, 35, 32, 33, 35, 32, 33, 35, 35, 35, 35, 35,110,110,546,546,
/* block 83 */
165,166,165,166,165,166,165,166,165,166,165,166,165,166,165,166,
@@ -2555,138 +2581,138 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
165,166,165,166,165,166,165,166,165,166,165,166,165,166,165,166,
165,166,165,166,165,166,165,166,165,166,165,166,165,166,165,166,
165,166,165,166,165,166,165,166,165,166,165,166,165,166,165,166,
-165,166,165,166,542,543,543,543,543,543,543,165,166,165,166,544,
-544,544,165,166,120,120,120,120,120,545,545,545,545,546,545,545,
+165,166,165,166,547,548,548,548,548,548,548,165,166,165,166,549,
+549,549,165,166,120,120,120,120,120,550,550,550,550,551,550,550,
/* block 84 */
-547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,
-547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,
-547,547,547,547,547,547,120,547,120,120,120,120,120,547,120,120,
-548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,
-548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,
-548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,
-548,548,548,548,548,548,548,548,120,120,120,120,120,120,120,549,
-550,120,120,120,120,120,120,120,120,120,120,120,120,120,120,551,
-
-/* block 85 */
-359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,
-359,359,359,359,359,359,359,120,120,120,120,120,120,120,120,120,
-359,359,359,359,359,359,359,120,359,359,359,359,359,359,359,120,
-359,359,359,359,359,359,359,120,359,359,359,359,359,359,359,120,
-359,359,359,359,359,359,359,120,359,359,359,359,359,359,359,120,
-359,359,359,359,359,359,359,120,359,359,359,359,359,359,359,120,
552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,
552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,
+552,552,552,552,552,552,120,552,120,120,120,120,120,552,120,120,
+553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,
+553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,
+553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,
+553,553,553,553,553,553,553,553,120,120,120,120,120,120,120,554,
+555,120,120,120,120,120,120,120,120,120,120,120,120,120,120,556,
+
+/* block 85 */
+361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,
+361,361,361,361,361,361,361,120,120,120,120,120,120,120,120,120,
+361,361,361,361,361,361,361,120,361,361,361,361,361,361,361,120,
+361,361,361,361,361,361,361,120,361,361,361,361,361,361,361,120,
+361,361,361,361,361,361,361,120,361,361,361,361,361,361,361,120,
+361,361,361,361,361,361,361,120,361,361,361,361,361,361,361,120,
+557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,
+557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,
/* block 86 */
5, 5, 23, 27, 23, 27, 5, 5, 5, 23, 27, 5, 23, 27, 5, 5,
5, 5, 5, 5, 5, 5, 5, 10, 5, 5, 10, 5, 23, 27, 5, 5,
23, 27, 7, 8, 7, 8, 7, 8, 7, 8, 5, 5, 5, 5, 5,111,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 10, 10, 5, 5, 5, 5,
- 10, 5, 7,553, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 20, 20, 5,120,120,120,120,120,120,120,120,120,120,120,120,120,
+ 10, 5, 7,558, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 20, 20, 5, 5, 5, 7, 8, 7, 8, 7, 8, 7, 8, 10,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
/* block 87 */
-554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,
-554,554,554,554,554,554,554,554,554,554,120,554,554,554,554,554,
-554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,
-554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,
-554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,
-554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,
-554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,
-554,554,554,554,120,120,120,120,120,120,120,120,120,120,120,120,
+559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,
+559,559,559,559,559,559,559,559,559,559,120,559,559,559,559,559,
+559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,
+559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,
+559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,
+559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,
+559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,
+559,559,559,559,120,120,120,120,120,120,120,120,120,120,120,120,
/* block 88 */
-554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,
-554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,
-554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,
-554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,
-554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,
-554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,
-554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,
-554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,
+559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,
+559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,
+559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,
+559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,
+559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,
+559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,
+559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,
+559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,
/* block 89 */
-554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,
-554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,
-554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,
-554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,
-554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,
-554,554,554,554,554,554,120,120,120,120,120,120,120,120,120,120,
+559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,
+559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,
+559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,
+559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,
+559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,
+559,559,559,559,559,559,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,120,120,120,120,
/* block 90 */
- 4,555,555,556, 20,557,558,559,560,561,560,561,560,561,560,561,
-560,561, 20,562,560,561,560,561,560,561,560,561,563,564,565,565,
- 20,559,559,559,559,559,559,559,559,559,566,566,566,566,567,567,
-568,569,569,569,569,569, 20,562,559,559,559,557,570,571,572,572,
-120,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,
-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,
-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,
-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,
-
-/* block 91 */
-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,
-573,573,573,573,573,573,573,120,120,574,574,575,575,576,576,573,
-577,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,
+ 4,560,560,561, 20,562,563,564,565,566,565,566,565,566,565,566,
+565,566, 20,567,565,566,565,566,565,566,565,566,568,569,570,570,
+ 20,564,564,564,564,564,564,564,564,564,571,571,571,571,572,572,
+573,574,574,574,574,574, 20,567,564,564,564,562,575,576,577,577,
+120,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,
578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,
578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,
578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,
+
+/* block 91 */
578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,
-578,578,578,578,578,578,578,578,578,578,578,555,569,579,579,578,
+578,578,578,578,578,578,578,120,120,579,579,580,580,581,581,578,
+582,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,
+583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,
+583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,
+583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,
+583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,
+583,583,583,583,583,583,583,583,583,583,583,560,574,584,584,583,
/* block 92 */
-120,120,120,120,120,580,580,580,580,580,580,580,580,580,580,580,
-580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,
-580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,
-120,581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,
-581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,
-581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,
-581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,
-581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,
+120,120,120,120,120,585,585,585,585,585,585,585,585,585,585,585,
+585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,
+585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,
+120,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
+586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
+586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
+586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
+586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
/* block 93 */
-581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,120,
-572,572,582,582,582,582,572,572,572,572,572,572,572,572,572,572,
-580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,
-580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,
-572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,
-572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,
-572,572,572,572,120,120,120,120,120,120,120,120,120,120,120,120,
-578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,
+586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,120,
+577,577,587,587,587,587,577,577,577,577,577,577,577,577,577,577,
+585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,
+585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,
+577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,
+577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,
+577,577,577,577,120,120,120,120,120,120,120,120,120,120,120,120,
+583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,
/* block 94 */
-583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,
-583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,120,
-582,582,582,582,582,582,582,582,582,582,572,572,572,572,572,572,
-572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,
-572,572,572,572,572,572,572,572, 25, 25, 25, 25, 25, 25, 25, 25,
+588,588,588,588,588,588,588,588,588,588,588,588,588,588,588,588,
+588,588,588,588,588,588,588,588,588,588,588,588,588,588,588,120,
+587,587,587,587,587,587,587,587,587,587,577,577,577,577,577,577,
+577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,
+577,577,577,577,577,577,577,577, 25, 25, 25, 25, 25, 25, 25, 25,
20, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
-583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,
-583,583,583,583,583,583,583,583,583,583,583,583,583,583,583, 20,
+588,588,588,588,588,588,588,588,588,588,588,588,588,588,588,588,
+588,588,588,588,588,588,588,588,588,588,588,588,588,588,588, 20,
/* block 95 */
-582,582,582,582,582,582,582,582,582,582,572,572,572,572,572,572,
-572,572,572,572,572,572,572,584,572,584,572,572,572,572,572,572,
-572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,
-572, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
-572,572,572,572,572,572,572,572,572,572,572,572, 20, 20, 20, 20,
-585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,
-585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,
-585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,572,
+587,587,587,587,587,587,587,587,587,587,577,577,577,577,577,577,
+577,577,577,577,577,577,577,589,577,589,577,577,577,577,577,577,
+577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,
+577, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+577,577,577,577,577,577,577,577,577,577,577,577, 20, 20, 20, 20,
+590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,
+590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,
+590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,577,
/* block 96 */
-585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,
-585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,
-585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,
-585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,
-585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,
-585,585,585,585,585,585,585,585,572,572,572,572,572,572,572,572,
-572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,
-572, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,572,572,572,572,572,
+590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,
+590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,
+590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,
+590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,
+590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,
+590,590,590,590,590,590,590,590,577,577,577,577,577,577,577,577,
+577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,
+577, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,577,577,577,577,577,
/* block 97 */
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
@@ -2695,450 +2721,440 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
-572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,
-572,572,572,572,572,572,572,572,572,572,572,572,572,572,572, 20,
+577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,
+577,577,577,577,577,577,577,577,577,577,577,577,577,577,577, 20,
/* block 98 */
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
/* block 99 */
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
/* block 100 */
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,120,120,120,
+592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,
+592,592,592,592,592,593,592,592,592,592,592,592,592,592,592,592,
+592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,
+592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,
+592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,
+592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,
+592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,
+592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,
/* block 101 */
-587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,
-587,587,587,587,587,588,587,587,587,587,587,587,587,587,587,587,
-587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,
-587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,
-587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,
-587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,
-587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,
-587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,
+592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,
+592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,
+592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,
+592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,
+592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,
+592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,
+592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,
+592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,
/* block 102 */
-587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,
-587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,
-587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,
-587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,
-587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,
-587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,
-587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,
-587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,
+592,592,592,592,592,592,592,592,592,592,592,592,592,120,120,120,
+594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,
+594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,
+594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,
+594,594,594,594,594,594,594,120,120,120,120,120,120,120,120,120,
+595,595,595,595,595,595,595,595,595,595,595,595,595,595,595,595,
+595,595,595,595,595,595,595,595,595,595,595,595,595,595,595,595,
+595,595,595,595,595,595,595,595,596,596,596,596,596,596,597,597,
/* block 103 */
-587,587,587,587,587,587,587,587,587,587,587,587,587,120,120,120,
-589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,
-589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,
-589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,
-589,589,589,589,589,589,589,120,120,120,120,120,120,120,120,120,
-590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,
-590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,
-590,590,590,590,590,590,590,590,591,591,591,591,591,591,592,592,
+598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,
+598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,
+598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,
+598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,
+598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,
+598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,
+598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,
+598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,
/* block 104 */
-593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,
-593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,
-593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,
-593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,
-593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,
-593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,
-593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,
-593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,
-
-/* block 105 */
-593,593,593,593,593,593,593,593,593,593,593,593,594,595,595,595,
-593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,
-596,596,596,596,596,596,596,596,596,596,593,593,120,120,120,120,
+598,598,598,598,598,598,598,598,598,598,598,598,599,600,600,600,
+598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,
+601,601,601,601,601,601,601,601,601,601,598,598,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-192,193,192,193,192,193,192,193,192,193,597,598,192,193,192,193,
+192,193,192,193,192,193,192,193,192,193,602,603,192,193,192,193,
192,193,192,193,192,193,192,193,192,193,192,193,192,193,192,193,
-192,193,192,193,192,193,192,193,192,193,192,193,192,193,599,198,
-200,200,200,600,552,552,552,552,552,552,552,552,552,552,600,478,
+192,193,192,193,192,193,192,193,192,193,192,193,192,193,604,198,
+200,200,200,605,557,557,557,557,557,557,557,557,557,557,605,482,
-/* block 106 */
+/* block 105 */
192,193,192,193,192,193,192,193,192,193,192,193,192,193,192,193,
-192,193,192,193,192,193,192,193,192,193,192,193,478,478,552,552,
-601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,
-601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,
-601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,
-601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,
-601,601,601,601,601,601,602,602,602,602,602,602,602,602,602,602,
-603,603,604,604,604,604,604,604,120,120,120,120,120,120,120,120,
+192,193,192,193,192,193,192,193,192,193,192,193,482,482,557,557,
+606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,
+606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,
+606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,
+606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,
+606,606,606,606,606,606,607,607,607,607,607,607,607,607,607,607,
+608,608,609,609,609,609,609,609,120,120,120,120,120,120,120,120,
-/* block 107 */
-605,605,605,605,605,605,605,605, 15, 15, 15, 15, 15, 15, 15, 15,
+/* block 106 */
+610,610,610,610,610,610,610,610, 15, 15, 15, 15, 15, 15, 15, 15,
15, 15, 15, 15, 15, 15, 15,111,111,111,111,111,111,111,111,111,
15, 15, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,
35, 35, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,
32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,
32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,
32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,
-110, 35, 35, 35, 35, 35, 35, 35, 35, 32, 33, 32, 33,606, 32, 33,
+110, 35, 35, 35, 35, 35, 35, 35, 35, 32, 33, 32, 33,611, 32, 33,
-/* block 108 */
- 32, 33, 32, 33, 32, 33, 32, 33,111, 15, 15, 32, 33,607, 35, 22,
- 32, 33, 32, 33,608, 35, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,
- 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,609,610,611,612,609, 35,
-613,614,615,616, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,
-120,120, 32, 33,617,618,619, 32, 33, 32, 33,120,120,120,120,120,
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+/* block 107 */
+ 32, 33, 32, 33, 32, 33, 32, 33,111, 15, 15, 32, 33,612, 35, 22,
+ 32, 33, 32, 33,613, 35, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,
+ 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,614,615,616,617,614, 35,
+618,619,620,621, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,
+ 32, 33, 32, 33,622,623,624, 32, 33, 32, 33,120,120,120,120,120,
+ 32, 33,120, 35,120, 35, 32, 33, 32, 33,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-120,120,120,120,120, 32, 33, 22,110,110, 35, 22, 22, 22, 22, 22,
+120,120,110,110,110, 32, 33, 22,110,110, 35, 22, 22, 22, 22, 22,
+
+/* block 108 */
+625,625,626,625,625,625,626,625,625,625,625,626,625,625,625,625,
+625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,
+625,625,625,627,627,626,626,627,628,628,628,628,626,120,120,120,
+629,629,629,630,630,630,631,631,632,631,120,120,120,120,120,120,
+633,633,633,633,633,633,633,633,633,633,633,633,633,633,633,633,
+633,633,633,633,633,633,633,633,633,633,633,633,633,633,633,633,
+633,633,633,633,633,633,633,633,633,633,633,633,633,633,633,633,
+633,633,633,633,634,634,634,634,120,120,120,120,120,120,120,120,
/* block 109 */
-620,620,621,620,620,620,621,620,620,620,620,621,620,620,620,620,
-620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,
-620,620,620,622,622,621,621,622,623,623,623,623,621,120,120,120,
-624,624,624,625,625,625,626,626,627,626,120,120,120,120,120,120,
-628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,
-628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,
-628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,
-628,628,628,628,629,629,629,629,120,120,120,120,120,120,120,120,
+635,635,636,636,636,636,636,636,636,636,636,636,636,636,636,636,
+636,636,636,636,636,636,636,636,636,636,636,636,636,636,636,636,
+636,636,636,636,636,636,636,636,636,636,636,636,636,636,636,636,
+636,636,636,636,635,635,635,635,635,635,635,635,635,635,635,635,
+635,635,635,635,637,637,120,120,120,120,120,120,120,120,638,638,
+639,639,639,639,639,639,639,639,639,639,120,120,120,120,120,120,
+253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,
+253,640,255,641,255,255,255,255,261,261,261,255,261,255,255,253,
/* block 110 */
-630,630,631,631,631,631,631,631,631,631,631,631,631,631,631,631,
-631,631,631,631,631,631,631,631,631,631,631,631,631,631,631,631,
-631,631,631,631,631,631,631,631,631,631,631,631,631,631,631,631,
-631,631,631,631,630,630,630,630,630,630,630,630,630,630,630,630,
-630,630,630,630,632,632,120,120,120,120,120,120,120,120,633,633,
-634,634,634,634,634,634,634,634,634,634,120,120,120,120,120,120,
-251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,
-251,635,253,636,253,253,253,253,259,259,259,253,259,253,253,251,
+642,642,642,642,642,642,642,642,642,642,643,643,643,643,643,643,
+643,643,643,643,643,643,643,643,643,643,643,643,643,643,643,643,
+643,643,643,643,643,643,644,644,644,644,644,644,644,644,645,646,
+647,647,647,647,647,647,647,647,647,647,647,647,647,647,647,647,
+647,647,647,647,647,647,647,648,648,648,648,648,648,648,648,648,
+648,648,649,649,120,120,120,120,120,120,120,120,120,120,120,650,
+358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,
+358,358,358,358,358,358,358,358,358,358,358,358,358,120,120,120,
/* block 111 */
-637,637,637,637,637,637,637,637,637,637,638,638,638,638,638,638,
-638,638,638,638,638,638,638,638,638,638,638,638,638,638,638,638,
-638,638,638,638,638,638,639,639,639,639,639,639,639,639,640,641,
-642,642,642,642,642,642,642,642,642,642,642,642,642,642,642,642,
-642,642,642,642,642,642,642,643,643,643,643,643,643,643,643,643,
-643,643,644,644,120,120,120,120,120,120,120,120,120,120,120,645,
-356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,
-356,356,356,356,356,356,356,356,356,356,356,356,356,120,120,120,
-
-/* block 112 */
-646,646,646,647,648,648,648,648,648,648,648,648,648,648,648,648,
-648,648,648,648,648,648,648,648,648,648,648,648,648,648,648,648,
-648,648,648,648,648,648,648,648,648,648,648,648,648,648,648,648,
-648,648,648,646,647,647,646,646,646,646,647,647,646,646,647,647,
-647,649,649,649,649,649,649,649,649,649,649,649,649,649,120,650,
-651,651,651,651,651,651,651,651,651,651,120,120,120,120,649,649,
-344,344,344,344,344,346,652,344,344,344,344,344,344,344,344,344,
-350,350,350,350,350,350,350,350,350,350,344,344,344,344,344,120,
-
-/* block 113 */
+651,651,651,652,653,653,653,653,653,653,653,653,653,653,653,653,
653,653,653,653,653,653,653,653,653,653,653,653,653,653,653,653,
653,653,653,653,653,653,653,653,653,653,653,653,653,653,653,653,
-653,653,653,653,653,653,653,653,653,654,654,654,654,654,654,655,
-655,654,654,655,655,654,654,120,120,120,120,120,120,120,120,120,
-653,653,653,654,653,653,653,653,653,653,653,653,654,655,120,120,
-656,656,656,656,656,656,656,656,656,656,120,120,657,657,657,657,
-344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,
-652,344,344,344,344,344,344,351,351,351,344,345,346,345,344,344,
+653,653,653,651,652,652,651,651,651,651,652,652,651,651,652,652,
+652,654,654,654,654,654,654,654,654,654,654,654,654,654,120,655,
+656,656,656,656,656,656,656,656,656,656,120,120,120,120,654,654,
+346,346,346,346,346,348,657,346,346,346,346,346,346,346,346,346,
+352,352,352,352,352,352,352,352,352,352,346,346,346,346,346,120,
-/* block 114 */
-658,658,658,658,658,658,658,658,658,658,658,658,658,658,658,658,
+/* block 112 */
658,658,658,658,658,658,658,658,658,658,658,658,658,658,658,658,
658,658,658,658,658,658,658,658,658,658,658,658,658,658,658,658,
-659,658,659,659,659,658,658,659,659,658,658,658,658,658,659,659,
-658,659,658,120,120,120,120,120,120,120,120,120,120,120,120,120,
-120,120,120,120,120,120,120,120,120,120,120,658,658,660,661,661,
-662,662,662,662,662,662,662,662,662,662,662,663,664,664,663,663,
-665,665,662,666,666,663,664,120,120,120,120,120,120,120,120,120,
+658,658,658,658,658,658,658,658,658,659,659,659,659,659,659,660,
+660,659,659,660,660,659,659,120,120,120,120,120,120,120,120,120,
+658,658,658,659,658,658,658,658,658,658,658,658,659,660,120,120,
+661,661,661,661,661,661,661,661,661,661,120,120,662,662,662,662,
+346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,
+657,346,346,346,346,346,346,353,353,353,346,347,348,347,346,346,
-/* block 115 */
-120,359,359,359,359,359,359,120,120,359,359,359,359,359,359,120,
-120,359,359,359,359,359,359,120,120,120,120,120,120,120,120,120,
-359,359,359,359,359,359,359,120,359,359,359,359,359,359,359,120,
+/* block 113 */
+663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,
+663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,
+663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,
+664,663,664,664,664,663,663,664,664,663,663,663,663,663,664,664,
+663,664,663,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,663,663,665,666,666,
+667,667,667,667,667,667,667,667,667,667,667,668,669,669,668,668,
+670,670,667,671,671,668,669,120,120,120,120,120,120,120,120,120,
+
+/* block 114 */
+120,361,361,361,361,361,361,120,120,361,361,361,361,361,361,120,
+120,361,361,361,361,361,361,120,120,120,120,120,120,120,120,120,
+361,361,361,361,361,361,361,120,361,361,361,361,361,361,361,120,
35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35,667, 35, 35, 35, 35, 35, 35, 35, 15,110,110,110,110,
+ 35, 35, 35,672, 35, 35, 35, 35, 35, 35, 35, 15,110,110,110,110,
35, 35, 35, 35, 35,128, 35, 35, 35,110, 15, 15,120,120,120,120,
-668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,
+673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,
+
+/* block 115 */
+673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,
+673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,
+673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,
+673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,
+667,667,667,667,667,667,667,667,667,667,667,667,667,667,667,667,
+667,667,667,667,667,667,667,667,667,667,667,667,667,667,667,667,
+667,667,667,668,668,669,668,668,669,668,668,670,668,669,120,120,
+674,674,674,674,674,674,674,674,674,674,120,120,120,120,120,120,
/* block 116 */
-668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,
-668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,
-668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,
-668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,
-662,662,662,662,662,662,662,662,662,662,662,662,662,662,662,662,
-662,662,662,662,662,662,662,662,662,662,662,662,662,662,662,662,
-662,662,662,663,663,664,663,663,664,663,663,665,663,664,120,120,
-669,669,669,669,669,669,669,669,669,669,120,120,120,120,120,120,
+675,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
+676,676,676,676,676,676,676,676,676,676,676,676,675,676,676,676,
+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
+676,676,676,676,676,676,676,676,675,676,676,676,676,676,676,676,
+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
+676,676,676,676,675,676,676,676,676,676,676,676,676,676,676,676,
+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
+675,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
/* block 117 */
-670,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
-671,671,671,671,671,671,671,671,671,671,671,671,670,671,671,671,
-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
-671,671,671,671,671,671,671,671,670,671,671,671,671,671,671,671,
-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
-671,671,671,671,670,671,671,671,671,671,671,671,671,671,671,671,
-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
-670,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
+676,676,676,676,676,676,676,676,676,676,676,676,675,676,676,676,
+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
+676,676,676,676,676,676,676,676,675,676,676,676,676,676,676,676,
+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
+676,676,676,676,675,676,676,676,676,676,676,676,676,676,676,676,
+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
+675,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
+676,676,676,676,676,676,676,676,676,676,676,676,675,676,676,676,
/* block 118 */
-671,671,671,671,671,671,671,671,671,671,671,671,670,671,671,671,
-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
-671,671,671,671,671,671,671,671,670,671,671,671,671,671,671,671,
-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
-671,671,671,671,670,671,671,671,671,671,671,671,671,671,671,671,
-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
-670,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
-671,671,671,671,671,671,671,671,671,671,671,671,670,671,671,671,
+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
+676,676,676,676,676,676,676,676,675,676,676,676,676,676,676,676,
+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
+676,676,676,676,675,676,676,676,676,676,676,676,676,676,676,676,
+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
+675,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
+676,676,676,676,676,676,676,676,676,676,676,676,675,676,676,676,
+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
/* block 119 */
-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
-671,671,671,671,671,671,671,671,670,671,671,671,671,671,671,671,
-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
-671,671,671,671,670,671,671,671,671,671,671,671,671,671,671,671,
-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
-670,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
-671,671,671,671,671,671,671,671,671,671,671,671,670,671,671,671,
-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
+676,676,676,676,676,676,676,676,675,676,676,676,676,676,676,676,
+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
+676,676,676,676,675,676,676,676,676,676,676,676,676,676,676,676,
+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
+675,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
+676,676,676,676,676,676,676,676,676,676,676,676,675,676,676,676,
+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
+676,676,676,676,676,676,676,676,675,676,676,676,676,676,676,676,
/* block 120 */
-671,671,671,671,671,671,671,671,670,671,671,671,671,671,671,671,
-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
-671,671,671,671,670,671,671,671,671,671,671,671,671,671,671,671,
-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
-670,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
-671,671,671,671,671,671,671,671,671,671,671,671,670,671,671,671,
-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
-671,671,671,671,671,671,671,671,670,671,671,671,671,671,671,671,
+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
+676,676,676,676,675,676,676,676,676,676,676,676,676,676,676,676,
+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
+675,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
+676,676,676,676,676,676,676,676,676,676,676,676,675,676,676,676,
+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
+676,676,676,676,676,676,676,676,675,676,676,676,676,676,676,676,
+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
/* block 121 */
-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
-671,671,671,671,670,671,671,671,671,671,671,671,671,671,671,671,
-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
-670,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
-671,671,671,671,671,671,671,671,671,671,671,671,670,671,671,671,
-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
-671,671,671,671,671,671,671,671,670,671,671,671,671,671,671,671,
-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
+676,676,676,676,675,676,676,676,676,676,676,676,676,676,676,676,
+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
+675,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
+676,676,676,676,676,676,676,676,676,676,676,676,675,676,676,676,
+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
+676,676,676,676,676,676,676,676,675,676,676,676,676,676,676,676,
+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
+676,676,676,676,675,676,676,676,676,676,676,676,676,676,676,676,
/* block 122 */
-671,671,671,671,670,671,671,671,671,671,671,671,671,671,671,671,
-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
-670,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
-671,671,671,671,671,671,671,671,671,671,671,671,670,671,671,671,
-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
-671,671,671,671,671,671,671,671,670,671,671,671,671,671,671,671,
-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
-671,671,671,671,670,671,671,671,671,671,671,671,671,671,671,671,
+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
+675,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
+676,676,676,676,676,676,676,676,676,676,676,676,675,676,676,676,
+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
+676,676,676,676,676,676,676,676,675,676,676,676,676,676,676,676,
+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
+676,676,676,676,675,676,676,676,676,676,676,676,676,676,676,676,
+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
/* block 123 */
-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
-670,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
-671,671,671,671,671,671,671,671,671,671,671,671,670,671,671,671,
-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
-671,671,671,671,671,671,671,671,670,671,671,671,671,671,671,671,
-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
-671,671,671,671,670,671,671,671,671,671,671,671,671,671,671,671,
-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
+676,676,676,676,676,676,676,676,675,676,676,676,676,676,676,676,
+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
+676,676,676,676,120,120,120,120,120,120,120,120,120,120,120,120,
+359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,
+359,359,359,359,359,359,359,120,120,120,120,360,360,360,360,360,
+360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,
+360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,
+360,360,360,360,360,360,360,360,360,360,360,360,120,120,120,120,
/* block 124 */
-671,671,671,671,671,671,671,671,670,671,671,671,671,671,671,671,
-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
-671,671,671,671,120,120,120,120,120,120,120,120,120,120,120,120,
-357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,
-357,357,357,357,357,357,357,120,120,120,120,358,358,358,358,358,
-358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,
-358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,
-358,358,358,358,358,358,358,358,358,358,358,358,120,120,120,120,
+677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,
+677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,
+677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,
+677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,
+677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,
+677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,
+677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,
+677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,
/* block 125 */
-672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,
-672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,
-672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,
-672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,
-672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,
-672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,
-672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,
-672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,
+678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,
+678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,
+678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,
+678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,
+678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,
+678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,
+678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,
+678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,
/* block 126 */
-673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,
-673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,
-673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,
-673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,
-673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,
-673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,
-673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,
-673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,120,120,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
/* block 127 */
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,120,120,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-
-/* block 128 */
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,120,120,120,120,120,120,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-/* block 129 */
+/* block 128 */
35, 35, 35, 35, 35, 35, 35,120,120,120,120,120,120,120,120,120,
120,120,120,206,206,206,206,206,120,120,120,120,120,214,211,214,
-214,214,214,214,214,214,214,214,214,674,214,214,214,214,214,214,
+214,214,214,214,214,214,214,214,214,679,214,214,214,214,214,214,
214,214,214,214,214,214,214,120,214,214,214,214,214,120,214,120,
214,214,120,214,214,120,214,214,214,214,214,214,214,214,214,214,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+
+/* block 129 */
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,252,252,252,252,252,252,252,252,252,252,252,252,252,252,
+252,252,252,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
/* block 130 */
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,675,675,675,675,675,675,675,675,675,675,675,675,675,675,
-675,675,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-120,120,120,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
/* block 131 */
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,680,681,
+221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
/* block 132 */
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224, 8, 7,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+120,120,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,120,120,120,120,120,120,120,221,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-
-/* block 133 */
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-120,120,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-224,224,676,224,224,224,224,224,224,224,224,224,219,677,120,120,
+225,225,682,225,225,225,225,225,225,225,225,225,219,683,221,221,
-/* block 134 */
+/* block 133 */
113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,
5, 5, 5, 5, 5, 5, 5, 7, 8, 5,120,120,120,120,120,120,
-113,113,113,113,113,113,113,113,113,113,113,113,113,113,552,552,
+113,113,113,113,113,113,113,113,113,113,113,113,113,113,557,557,
5, 10, 10, 16, 16, 7, 8, 7, 8, 7, 8, 7, 8, 7, 8, 7,
- 8, 7, 8, 7, 8,556,556, 7, 8, 5, 5, 5, 5, 16, 16, 16,
+ 8, 7, 8, 7, 8,561,561, 7, 8, 5, 5, 5, 5, 16, 16, 16,
5, 5, 5,120, 5, 5, 5, 5, 10, 7, 8, 7, 8, 7, 8, 5,
5, 5, 9, 10, 9, 9, 9,120, 5, 6, 5, 5,120,120,120,120,
-224,224,224,224,224,120,224,224,224,224,224,224,224,224,224,224,
+225,225,225,225,225,120,225,225,225,225,225,225,225,225,225,225,
-/* block 135 */
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,120,120, 24,
+/* block 134 */
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,120,120, 24,
-/* block 136 */
+/* block 135 */
120, 5, 5, 5, 6, 5, 5, 5, 7, 8, 5, 9, 5, 10, 5, 5,
11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 5, 5, 9, 9, 9, 5,
5, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 7, 5, 8, 15, 16,
15, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 7, 9, 8, 9, 7,
- 8,555,560,561,555,555,578,578,578,578,578,578,578,578,578,578,
-569,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,
+ 8,560,565,566,560,560,583,583,583,583,583,583,583,583,583,583,
+574,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,
-/* block 137 */
-578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,
-578,578,578,578,578,578,578,578,578,578,578,578,578,578,678,678,
-581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,
-581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,120,
-120,120,581,581,581,581,581,581,120,120,581,581,581,581,581,581,
-120,120,581,581,581,581,581,581,120,120,581,581,581,120,120,120,
+/* block 136 */
+583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,
+583,583,583,583,583,583,583,583,583,583,583,583,583,583,684,684,
+586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
+586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,120,
+120,120,586,586,586,586,586,586,120,120,586,586,586,586,586,586,
+120,120,586,586,586,586,586,586,120,120,586,586,586,120,120,120,
6, 6, 9, 15, 20, 6, 6,120, 20, 9, 9, 9, 9, 20, 20,120,
-511,511,511,511,511,511,511,511,511, 24, 24, 24, 20, 20,120,120,
+516,516,516,516,516,516,516,516,516, 24, 24, 24, 20, 20,120,120,
-/* block 138 */
-679,679,679,679,679,679,679,679,679,679,679,679,120,679,679,679,
-679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,
-679,679,679,679,679,679,679,120,679,679,679,679,679,679,679,679,
-679,679,679,679,679,679,679,679,679,679,679,120,679,679,120,679,
-679,679,679,679,679,679,679,679,679,679,679,679,679,679,120,120,
-679,679,679,679,679,679,679,679,679,679,679,679,679,679,120,120,
+/* block 137 */
+685,685,685,685,685,685,685,685,685,685,685,685,120,685,685,685,
+685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,
+685,685,685,685,685,685,685,120,685,685,685,685,685,685,685,685,
+685,685,685,685,685,685,685,685,685,685,685,120,685,685,120,685,
+685,685,685,685,685,685,685,685,685,685,685,685,685,685,120,120,
+685,685,685,685,685,685,685,685,685,685,685,685,685,685,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+/* block 138 */
+685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,
+685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,
+685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,
+685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,
+685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,
+685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,
+685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,
+685,685,685,685,685,685,685,685,685,685,685,120,120,120,120,120,
+
/* block 139 */
-679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,
-679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,
-679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,
-679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,
-679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,
-679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,
-679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,
-679,679,679,679,679,679,679,679,679,679,679,120,120,120,120,120,
+686,686,687,120,120,120,120,688,688,688,688,688,688,688,688,688,
+688,688,688,688,688,688,688,688,688,688,688,688,688,688,688,688,
+688,688,688,688,688,688,688,688,688,688,688,688,688,688,688,688,
+688,688,688,688,120,120,120,689,689,689,689,689,689,689,689,689,
+690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,
+690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,
+690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,
+690,690,690,690,690,691,691,691,691,692,692,692,692,692,692,692,
/* block 140 */
-680,680,680,120,120,120,120,681,681,681,681,681,681,681,681,681,
-681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,
-681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,
-681,681,681,681,120,120,120,682,682,682,682,682,682,682,682,682,
-683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,
-683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,
-683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,
-683,683,683,683,683,684,684,684,684,685,685,685,685,685,685,685,
-
-/* block 141 */
-685,685,685,685,685,685,685,685,685,685,684,684,685,685,685,120,
+692,692,692,692,692,692,692,692,692,692,691,691,692,692,692,120,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,120,120,120,
-685,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+692,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,113,120,120,
-/* block 142 */
+/* block 141 */
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
@@ -3148,499 +3164,519 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-/* block 143 */
-686,686,686,686,686,686,686,686,686,686,686,686,686,686,686,686,
-686,686,686,686,686,686,686,686,686,686,686,686,686,120,120,120,
-687,687,687,687,687,687,687,687,687,687,687,687,687,687,687,687,
-687,687,687,687,687,687,687,687,687,687,687,687,687,687,687,687,
-687,687,687,687,687,687,687,687,687,687,687,687,687,687,687,687,
-687,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-688,689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,
-689,689,689,689,689,689,689,689,689,689,689,689,120,120,120,120,
-
-/* block 144 */
-690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,
-690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,
-691,691,691,691,120,120,120,120,120,120,120,120,120,690,690,690,
-692,692,692,692,692,692,692,692,692,692,692,692,692,692,692,692,
-692,693,692,692,692,692,692,692,692,692,693,120,120,120,120,120,
+/* block 142 */
+693,693,693,693,693,693,693,693,693,693,693,693,693,693,693,693,
+693,693,693,693,693,693,693,693,693,693,693,693,693,120,120,120,
694,694,694,694,694,694,694,694,694,694,694,694,694,694,694,694,
694,694,694,694,694,694,694,694,694,694,694,694,694,694,694,694,
-694,694,694,694,694,694,695,695,695,695,695,120,120,120,120,120,
-
-/* block 145 */
-696,696,696,696,696,696,696,696,696,696,696,696,696,696,696,696,
-696,696,696,696,696,696,696,696,696,696,696,696,696,696,120,697,
-698,698,698,698,698,698,698,698,698,698,698,698,698,698,698,698,
-698,698,698,698,698,698,698,698,698,698,698,698,698,698,698,698,
-698,698,698,698,120,120,120,120,698,698,698,698,698,698,698,698,
-699,700,700,700,700,700,120,120,120,120,120,120,120,120,120,120,
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+694,694,694,694,694,694,694,694,694,694,694,694,694,694,694,694,
+694,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+695,696,696,696,696,696,696,696,696,696,696,696,696,696,696,696,
+696,696,696,696,696,696,696,696,696,696,696,696,120,120,120,120,
-/* block 146 */
+/* block 143 */
+697,697,697,697,697,697,697,697,697,697,697,697,697,697,697,697,
+697,697,697,697,697,697,697,697,697,697,697,697,697,697,697,697,
+698,698,698,698,120,120,120,120,120,120,120,120,120,697,697,697,
+699,699,699,699,699,699,699,699,699,699,699,699,699,699,699,699,
+699,700,699,699,699,699,699,699,699,699,700,120,120,120,120,120,
701,701,701,701,701,701,701,701,701,701,701,701,701,701,701,701,
701,701,701,701,701,701,701,701,701,701,701,701,701,701,701,701,
-701,701,701,701,701,701,701,701,702,702,702,702,702,702,702,702,
-702,702,702,702,702,702,702,702,702,702,702,702,702,702,702,702,
-702,702,702,702,702,702,702,702,702,702,702,702,702,702,702,702,
-703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,
-703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,
-703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,
+701,701,701,701,701,701,702,702,702,702,702,120,120,120,120,120,
-/* block 147 */
-704,704,704,704,704,704,704,704,704,704,704,704,704,704,704,704,
-704,704,704,704,704,704,704,704,704,704,704,704,704,704,120,120,
-705,705,705,705,705,705,705,705,705,705,120,120,120,120,120,120,
-706,706,706,706,706,706,706,706,706,706,706,706,706,706,706,706,
-706,706,706,706,706,706,706,706,706,706,706,706,706,706,706,706,
-706,706,706,706,120,120,120,120,707,707,707,707,707,707,707,707,
-707,707,707,707,707,707,707,707,707,707,707,707,707,707,707,707,
-707,707,707,707,707,707,707,707,707,707,707,707,120,120,120,120,
+/* block 144 */
+703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,
+703,703,703,703,703,703,703,703,703,703,703,703,703,703,120,704,
+705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,
+705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,
+705,705,705,705,120,120,120,120,705,705,705,705,705,705,705,705,
+706,707,707,707,707,707,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-/* block 148 */
+/* block 145 */
708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,
708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,
-708,708,708,708,708,708,708,708,120,120,120,120,120,120,120,120,
+708,708,708,708,708,708,708,708,709,709,709,709,709,709,709,709,
709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,
709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,
-709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,
-709,709,709,709,120,120,120,120,120,120,120,120,120,120,120,710,
+710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,
+710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,
+710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,
+
+/* block 146 */
+711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,
+711,711,711,711,711,711,711,711,711,711,711,711,711,711,120,120,
+712,712,712,712,712,712,712,712,712,712,120,120,120,120,120,120,
+713,713,713,713,713,713,713,713,713,713,713,713,713,713,713,713,
+713,713,713,713,713,713,713,713,713,713,713,713,713,713,713,713,
+713,713,713,713,120,120,120,120,714,714,714,714,714,714,714,714,
+714,714,714,714,714,714,714,714,714,714,714,714,714,714,714,714,
+714,714,714,714,714,714,714,714,714,714,714,714,120,120,120,120,
+
+/* block 147 */
+715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,
+715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,
+715,715,715,715,715,715,715,715,120,120,120,120,120,120,120,120,
+716,716,716,716,716,716,716,716,716,716,716,716,716,716,716,716,
+716,716,716,716,716,716,716,716,716,716,716,716,716,716,716,716,
+716,716,716,716,716,716,716,716,716,716,716,716,716,716,716,716,
+716,716,716,716,120,120,120,120,120,120,120,120,120,120,120,717,
+718,718,718,718,718,718,718,718,718,718,718,120,718,718,718,718,
+
+/* block 148 */
+718,718,718,718,718,718,718,718,718,718,718,120,718,718,718,718,
+718,718,718,120,718,718,120,719,719,719,719,719,719,719,719,719,
+719,719,120,719,719,719,719,719,719,719,719,719,719,719,719,719,
+719,719,120,719,719,719,719,719,719,719,120,719,719,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
/* block 149 */
-711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,
-711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,
-711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,
-711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,
-711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,
-711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,
-711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,
-711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,
+720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,
+720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,
+720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,
+720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,
+720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,
+720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,
+720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,
+720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,
/* block 150 */
-711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,
-711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,
-711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,
-711,711,711,711,711,711,711,120,120,120,120,120,120,120,120,120,
-711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,
-711,711,711,711,711,711,120,120,120,120,120,120,120,120,120,120,
-711,711,711,711,711,711,711,711,120,120,120,120,120,120,120,120,
+720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,
+720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,
+720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,
+720,720,720,720,720,720,720,120,120,120,120,120,120,120,120,120,
+720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,
+720,720,720,720,720,720,120,120,120,120,120,120,120,120,120,120,
+720,720,720,720,720,720,720,720,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
/* block 151 */
-712,712,712,712,712,712,120,120,712,120,712,712,712,712,712,712,
-712,712,712,712,712,712,712,712,712,712,712,712,712,712,712,712,
-712,712,712,712,712,712,712,712,712,712,712,712,712,712,712,712,
-712,712,712,712,712,712,120,712,712,120,120,120,712,120,120,712,
-713,713,713,713,713,713,713,713,713,713,713,713,713,713,713,713,
-713,713,713,713,713,713,120,714,715,715,715,715,715,715,715,715,
-716,716,716,716,716,716,716,716,716,716,716,716,716,716,716,716,
-716,716,716,716,716,716,716,717,717,718,718,718,718,718,718,718,
-
-/* block 152 */
-719,719,719,719,719,719,719,719,719,719,719,719,719,719,719,719,
-719,719,719,719,719,719,719,719,719,719,719,719,719,719,719,120,
-120,120,120,120,120,120,120,720,720,720,720,720,720,720,720,720,
+110,110,110,110,110,110,120,110,110,110,110,110,110,110,110,110,
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,
+110,120,110,110,110,110,110,110,110,110,110,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+
+/* block 152 */
+721,721,721,721,721,721,120,120,721,120,721,721,721,721,721,721,
+721,721,721,721,721,721,721,721,721,721,721,721,721,721,721,721,
721,721,721,721,721,721,721,721,721,721,721,721,721,721,721,721,
-721,721,721,120,721,721,120,120,120,120,120,722,722,722,722,722,
+721,721,721,721,721,721,120,721,721,120,120,120,721,120,120,721,
+722,722,722,722,722,722,722,722,722,722,722,722,722,722,722,722,
+722,722,722,722,722,722,120,723,724,724,724,724,724,724,724,724,
+725,725,725,725,725,725,725,725,725,725,725,725,725,725,725,725,
+725,725,725,725,725,725,725,726,726,727,727,727,727,727,727,727,
/* block 153 */
-723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,
-723,723,723,723,723,723,724,724,724,724,724,724,120,120,120,725,
-726,726,726,726,726,726,726,726,726,726,726,726,726,726,726,726,
-726,726,726,726,726,726,726,726,726,726,120,120,120,120,120,727,
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+728,728,728,728,728,728,728,728,728,728,728,728,728,728,728,728,
+728,728,728,728,728,728,728,728,728,728,728,728,728,728,728,120,
+120,120,120,120,120,120,120,729,729,729,729,729,729,729,729,729,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+730,730,730,730,730,730,730,730,730,730,730,730,730,730,730,730,
+730,730,730,120,730,730,120,120,120,120,120,731,731,731,731,731,
/* block 154 */
-728,728,728,728,728,728,728,728,728,728,728,728,728,728,728,728,
-728,728,728,728,728,728,728,728,728,728,728,728,728,728,728,728,
-729,729,729,729,729,729,729,729,729,729,729,729,729,729,729,729,
-729,729,729,729,729,729,729,729,120,120,120,120,730,730,729,729,
-730,730,730,730,730,730,730,730,730,730,730,730,730,730,730,730,
-120,120,730,730,730,730,730,730,730,730,730,730,730,730,730,730,
-730,730,730,730,730,730,730,730,730,730,730,730,730,730,730,730,
-730,730,730,730,730,730,730,730,730,730,730,730,730,730,730,730,
+732,732,732,732,732,732,732,732,732,732,732,732,732,732,732,732,
+732,732,732,732,732,732,733,733,733,733,733,733,120,120,120,734,
+735,735,735,735,735,735,735,735,735,735,735,735,735,735,735,735,
+735,735,735,735,735,735,735,735,735,735,120,120,120,120,120,736,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
/* block 155 */
-731,732,732,732,120,732,732,120,120,120,120,120,732,732,732,732,
-731,731,731,731,120,731,731,731,120,731,731,731,731,731,731,731,
-731,731,731,731,731,731,731,731,731,731,731,731,731,731,731,731,
-731,731,731,731,731,731,120,120,732,732,732,120,120,120,120,732,
-733,733,733,733,733,733,733,733,733,120,120,120,120,120,120,120,
-734,734,734,734,734,734,734,734,734,120,120,120,120,120,120,120,
-735,735,735,735,735,735,735,735,735,735,735,735,735,735,735,735,
-735,735,735,735,735,735,735,735,735,735,735,735,735,736,736,737,
+737,737,737,737,737,737,737,737,737,737,737,737,737,737,737,737,
+737,737,737,737,737,737,737,737,737,737,737,737,737,737,737,737,
+738,738,738,738,738,738,738,738,738,738,738,738,738,738,738,738,
+738,738,738,738,738,738,738,738,120,120,120,120,739,739,738,738,
+739,739,739,739,739,739,739,739,739,739,739,739,739,739,739,739,
+120,120,739,739,739,739,739,739,739,739,739,739,739,739,739,739,
+739,739,739,739,739,739,739,739,739,739,739,739,739,739,739,739,
+739,739,739,739,739,739,739,739,739,739,739,739,739,739,739,739,
/* block 156 */
-738,738,738,738,738,738,738,738,738,738,738,738,738,738,738,738,
-738,738,738,738,738,738,738,738,738,738,738,738,738,739,739,739,
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-740,740,740,740,740,740,740,740,741,740,740,740,740,740,740,740,
+740,741,741,741,120,741,741,120,120,120,120,120,741,741,741,741,
+740,740,740,740,120,740,740,740,120,740,740,740,740,740,740,740,
740,740,740,740,740,740,740,740,740,740,740,740,740,740,740,740,
-740,740,740,740,740,742,742,120,120,120,120,743,743,743,743,743,
-744,744,744,744,744,744,744,120,120,120,120,120,120,120,120,120,
+740,740,740,740,740,740,120,120,741,741,741,120,120,120,120,741,
+742,742,742,742,742,742,742,742,742,120,120,120,120,120,120,120,
+743,743,743,743,743,743,743,743,743,120,120,120,120,120,120,120,
+744,744,744,744,744,744,744,744,744,744,744,744,744,744,744,744,
+744,744,744,744,744,744,744,744,744,744,744,744,744,745,745,746,
/* block 157 */
-745,745,745,745,745,745,745,745,745,745,745,745,745,745,745,745,
-745,745,745,745,745,745,745,745,745,745,745,745,745,745,745,745,
-745,745,745,745,745,745,745,745,745,745,745,745,745,745,745,745,
-745,745,745,745,745,745,120,120,120,746,746,746,746,746,746,746,
747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,
-747,747,747,747,747,747,120,120,748,748,748,748,748,748,748,748,
+747,747,747,747,747,747,747,747,747,747,747,747,747,748,748,748,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+749,749,749,749,749,749,749,749,750,749,749,749,749,749,749,749,
749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,
-749,749,749,120,120,120,120,120,750,750,750,750,750,750,750,750,
+749,749,749,749,749,751,751,120,120,120,120,752,752,752,752,752,
+753,753,754,753,753,753,753,120,120,120,120,120,120,120,120,120,
/* block 158 */
-751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,
-751,751,120,120,120,120,120,120,120,752,752,752,752,120,120,120,
-120,120,120,120,120,120,120,120,120,753,753,753,753,753,753,753,
+755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,
+755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,
+755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,
+755,755,755,755,755,755,120,120,120,756,756,756,756,756,756,756,
+757,757,757,757,757,757,757,757,757,757,757,757,757,757,757,757,
+757,757,757,757,757,757,120,120,758,758,758,758,758,758,758,758,
+759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,
+759,759,759,120,120,120,120,120,760,760,760,760,760,760,760,760,
+
+/* block 159 */
+761,761,761,761,761,761,761,761,761,761,761,761,761,761,761,761,
+761,761,120,120,120,120,120,120,120,762,762,762,762,120,120,120,
+120,120,120,120,120,120,120,120,120,763,763,763,763,763,763,763,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-/* block 159 */
-754,754,754,754,754,754,754,754,754,754,754,754,754,754,754,754,
-754,754,754,754,754,754,754,754,754,754,754,754,754,754,754,754,
-754,754,754,754,754,754,754,754,754,754,754,754,754,754,754,754,
-754,754,754,754,754,754,754,754,754,754,754,754,754,754,754,754,
-754,754,754,754,754,754,754,754,754,120,120,120,120,120,120,120,
+/* block 160 */
+764,764,764,764,764,764,764,764,764,764,764,764,764,764,764,764,
+764,764,764,764,764,764,764,764,764,764,764,764,764,764,764,764,
+764,764,764,764,764,764,764,764,764,764,764,764,764,764,764,764,
+764,764,764,764,764,764,764,764,764,764,764,764,764,764,764,764,
+764,764,764,764,764,764,764,764,764,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-/* block 160 */
-755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,
-755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,
-755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,
-755,755,755,120,120,120,120,120,120,120,120,120,120,120,120,120,
-756,756,756,756,756,756,756,756,756,756,756,756,756,756,756,756,
-756,756,756,756,756,756,756,756,756,756,756,756,756,756,756,756,
-756,756,756,756,756,756,756,756,756,756,756,756,756,756,756,756,
-756,756,756,120,120,120,120,120,120,120,757,757,757,757,757,757,
-
/* block 161 */
-758,758,758,758,758,758,758,758,758,758,758,758,758,758,758,758,
-758,758,758,758,758,758,758,758,758,758,758,758,758,758,758,758,
-758,758,758,758,759,759,759,759,120,120,120,120,120,120,120,120,
-760,760,760,760,760,760,760,760,760,760,120,120,120,120,120,120,
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,
+765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,
+765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,
+765,765,765,120,120,120,120,120,120,120,120,120,120,120,120,120,
+766,766,766,766,766,766,766,766,766,766,766,766,766,766,766,766,
+766,766,766,766,766,766,766,766,766,766,766,766,766,766,766,766,
+766,766,766,766,766,766,766,766,766,766,766,766,766,766,766,766,
+766,766,766,120,120,120,120,120,120,120,767,767,767,767,767,767,
/* block 162 */
+768,768,768,768,768,768,768,768,768,768,768,768,768,768,768,768,
+768,768,768,768,768,768,768,768,768,768,768,768,768,768,768,768,
+768,768,768,768,769,769,769,769,120,120,120,120,120,120,120,120,
+770,770,770,770,770,770,770,770,770,770,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-761,761,761,761,761,761,761,761,761,761,761,761,761,761,761,761,
-761,761,761,761,761,761,761,761,761,761,761,761,761,761,761,120,
/* block 163 */
-762,762,762,762,762,762,762,762,762,762,762,762,762,762,762,762,
-762,762,762,762,762,762,762,762,762,762,762,762,762,762,762,762,
-762,762,762,762,762,762,762,762,762,762,120,763,763,764,120,120,
-762,762,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,
+771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,120,
/* block 164 */
-765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,
-765,765,765,765,765,765,765,765,765,765,765,765,765,766,766,766,
-766,766,766,766,766,766,766,765,120,120,120,120,120,120,120,120,
-767,767,767,767,767,767,767,767,767,767,767,767,767,767,767,767,
-767,767,767,767,767,767,768,768,768,768,768,768,768,768,768,768,
-768,769,769,769,769,770,770,770,770,770,120,120,120,120,120,120,
+772,772,772,772,772,772,772,772,772,772,772,772,772,772,772,772,
+772,772,772,772,772,772,772,772,772,772,772,772,772,772,772,772,
+772,772,772,772,772,772,772,772,772,772,120,773,773,774,120,120,
+772,772,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
/* block 165 */
+775,775,775,775,775,775,775,775,775,775,775,775,775,775,775,775,
+775,775,775,775,775,775,775,775,775,775,775,775,775,776,776,776,
+776,776,776,776,776,776,776,775,120,120,120,120,120,120,120,120,
+777,777,777,777,777,777,777,777,777,777,777,777,777,777,777,777,
+777,777,777,777,777,777,778,778,778,778,778,778,778,778,778,778,
+778,779,779,779,779,780,780,780,780,780,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,
+
+/* block 166 */
+781,781,782,782,782,782,783,783,783,783,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,
-771,771,771,771,771,772,772,772,772,772,772,772,120,120,120,120,
+784,784,784,784,784,784,784,784,784,784,784,784,784,784,784,784,
+784,784,784,784,784,785,785,785,785,785,785,785,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,
-773,773,773,773,773,773,773,120,120,120,120,120,120,120,120,120,
-
-/* block 166 */
-774,775,774,776,776,776,776,776,776,776,776,776,776,776,776,776,
-776,776,776,776,776,776,776,776,776,776,776,776,776,776,776,776,
-776,776,776,776,776,776,776,776,776,776,776,776,776,776,776,776,
-776,776,776,776,776,776,776,776,775,775,775,775,775,775,775,775,
-775,775,775,775,775,775,775,777,777,777,777,777,777,777,120,120,
-120,120,778,778,778,778,778,778,778,778,778,778,778,778,778,778,
-778,778,778,778,778,778,779,779,779,779,779,779,779,779,779,779,
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,775,
+786,786,786,786,786,786,786,786,786,786,786,786,786,786,786,786,
+786,786,786,786,786,786,786,120,120,120,120,120,120,120,120,120,
/* block 167 */
-780,780,781,782,782,782,782,782,782,782,782,782,782,782,782,782,
-782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,
-782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,
-781,781,781,780,780,780,780,781,781,780,780,783,783,784,783,783,
-783,783,120,120,120,120,120,120,120,120,120,120,120,784,120,120,
-785,785,785,785,785,785,785,785,785,785,785,785,785,785,785,785,
-785,785,785,785,785,785,785,785,785,120,120,120,120,120,120,120,
-786,786,786,786,786,786,786,786,786,786,120,120,120,120,120,120,
+787,788,787,789,789,789,789,789,789,789,789,789,789,789,789,789,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
+789,789,789,789,789,789,789,789,788,788,788,788,788,788,788,788,
+788,788,788,788,788,788,788,790,790,790,790,790,790,790,120,120,
+120,120,791,791,791,791,791,791,791,791,791,791,791,791,791,791,
+791,791,791,791,791,791,792,792,792,792,792,792,792,792,792,792,
+788,789,789,788,788,789,120,120,120,120,120,120,120,120,120,788,
/* block 168 */
-787,787,787,788,788,788,788,788,788,788,788,788,788,788,788,788,
-788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,
-788,788,788,788,788,788,788,787,787,787,787,787,789,787,787,787,
-787,787,787,787,787,120,790,790,790,790,790,790,790,790,790,790,
-791,791,791,791,788,789,789,788,120,120,120,120,120,120,120,120,
-792,792,792,792,792,792,792,792,792,792,792,792,792,792,792,792,
-792,792,792,792,792,792,792,792,792,792,792,792,792,792,792,792,
-792,792,792,793,794,794,792,120,120,120,120,120,120,120,120,120,
+793,793,794,795,795,795,795,795,795,795,795,795,795,795,795,795,
+795,795,795,795,795,795,795,795,795,795,795,795,795,795,795,795,
+795,795,795,795,795,795,795,795,795,795,795,795,795,795,795,795,
+794,794,794,793,793,793,793,794,794,793,793,796,796,797,796,796,
+796,796,793,120,120,120,120,120,120,120,120,120,120,797,120,120,
+798,798,798,798,798,798,798,798,798,798,798,798,798,798,798,798,
+798,798,798,798,798,798,798,798,798,120,120,120,120,120,120,120,
+799,799,799,799,799,799,799,799,799,799,120,120,120,120,120,120,
/* block 169 */
-795,795,796,797,797,797,797,797,797,797,797,797,797,797,797,797,
-797,797,797,797,797,797,797,797,797,797,797,797,797,797,797,797,
-797,797,797,797,797,797,797,797,797,797,797,797,797,797,797,797,
-797,797,797,796,796,796,795,795,795,795,795,795,795,795,795,796,
-796,797,798,798,797,799,799,799,799,795,795,795,795,799,796,795,
-800,800,800,800,800,800,800,800,800,800,797,799,797,799,799,799,
-120,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,
-801,801,801,801,801,120,120,120,120,120,120,120,120,120,120,120,
+800,800,800,801,801,801,801,801,801,801,801,801,801,801,801,801,
+801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,
+801,801,801,801,801,801,801,800,800,800,800,800,802,800,800,800,
+800,800,800,800,800,120,803,803,803,803,803,803,803,803,803,803,
+804,804,804,804,801,802,802,801,120,120,120,120,120,120,120,120,
+805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,
+805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,
+805,805,805,806,807,807,805,120,120,120,120,120,120,120,120,120,
/* block 170 */
-802,802,802,802,802,802,802,802,802,802,802,802,802,802,802,802,
-802,802,120,802,802,802,802,802,802,802,802,802,802,802,802,802,
-802,802,802,802,802,802,802,802,802,802,802,802,803,803,803,804,
-804,804,803,803,804,803,804,804,805,805,805,805,805,805,804,120,
+808,808,809,810,810,810,810,810,810,810,810,810,810,810,810,810,
+810,810,810,810,810,810,810,810,810,810,810,810,810,810,810,810,
+810,810,810,810,810,810,810,810,810,810,810,810,810,810,810,810,
+810,810,810,809,809,809,808,808,808,808,808,808,808,808,808,809,
+809,810,811,811,810,812,812,812,812,808,808,808,808,812,809,808,
+813,813,813,813,813,813,813,813,813,813,810,812,810,812,812,812,
+120,814,814,814,814,814,814,814,814,814,814,814,814,814,814,814,
+814,814,814,814,814,120,120,120,120,120,120,120,120,120,120,120,
+
+/* block 171 */
+815,815,815,815,815,815,815,815,815,815,815,815,815,815,815,815,
+815,815,120,815,815,815,815,815,815,815,815,815,815,815,815,815,
+815,815,815,815,815,815,815,815,815,815,815,815,816,816,816,817,
+817,817,816,816,817,816,817,817,818,818,818,818,818,818,817,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-/* block 171 */
-806,806,806,806,806,806,806,120,806,120,806,806,806,806,120,806,
-806,806,806,806,806,806,806,806,806,806,806,806,806,806,120,806,
-806,806,806,806,806,806,806,806,806,807,120,120,120,120,120,120,
-808,808,808,808,808,808,808,808,808,808,808,808,808,808,808,808,
-808,808,808,808,808,808,808,808,808,808,808,808,808,808,808,808,
-808,808,808,808,808,808,808,808,808,808,808,808,808,808,808,809,
-810,810,810,809,809,809,809,809,809,809,809,120,120,120,120,120,
-811,811,811,811,811,811,811,811,811,811,120,120,120,120,120,120,
-
/* block 172 */
-812,813,814,815,120,816,816,816,816,816,816,816,816,120,120,816,
-816,120,120,816,816,816,816,816,816,816,816,816,816,816,816,816,
-816,816,816,816,816,816,816,816,816,120,816,816,816,816,816,816,
-816,120,816,816,120,816,816,816,816,816,120,817,813,816,818,814,
-812,814,814,814,814,120,120,814,814,120,120,814,814,814,120,120,
-816,120,120,120,120,120,120,818,120,120,120,120,120,816,816,816,
-816,816,814,814,120,120,812,812,812,812,812,812,812,120,120,120,
-812,812,812,812,812,120,120,120,120,120,120,120,120,120,120,120,
+819,819,819,819,819,819,819,120,819,120,819,819,819,819,120,819,
+819,819,819,819,819,819,819,819,819,819,819,819,819,819,120,819,
+819,819,819,819,819,819,819,819,819,820,120,120,120,120,120,120,
+821,821,821,821,821,821,821,821,821,821,821,821,821,821,821,821,
+821,821,821,821,821,821,821,821,821,821,821,821,821,821,821,821,
+821,821,821,821,821,821,821,821,821,821,821,821,821,821,821,822,
+823,823,823,822,822,822,822,822,822,822,822,120,120,120,120,120,
+824,824,824,824,824,824,824,824,824,824,120,120,120,120,120,120,
/* block 173 */
-819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,
-819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,
-819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,
-819,819,819,819,819,820,820,820,821,821,821,821,821,821,821,821,
-820,820,821,821,821,820,821,819,819,819,819,822,822,822,822,822,
-823,823,823,823,823,823,823,823,823,823,822,822,120,822,821,819,
-819,819,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+825,826,827,828,120,829,829,829,829,829,829,829,829,120,120,829,
+829,120,120,829,829,829,829,829,829,829,829,829,829,829,829,829,
+829,829,829,829,829,829,829,829,829,120,829,829,829,829,829,829,
+829,120,829,829,120,829,829,829,829,829,120,830,826,829,831,827,
+825,827,827,827,827,120,120,827,827,120,120,827,827,827,120,120,
+829,120,120,120,120,120,120,831,120,120,120,120,120,829,829,829,
+829,829,827,827,120,120,825,825,825,825,825,825,825,120,120,120,
+825,825,825,825,825,120,120,120,120,120,120,120,120,120,120,120,
/* block 174 */
-824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,
-824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,
-824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,
-825,826,826,827,827,827,827,827,827,826,827,826,826,825,826,827,
-827,826,827,827,824,824,828,824,120,120,120,120,120,120,120,120,
-829,829,829,829,829,829,829,829,829,829,120,120,120,120,120,120,
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+832,832,832,832,832,832,832,832,832,832,832,832,832,832,832,832,
+832,832,832,832,832,832,832,832,832,832,832,832,832,832,832,832,
+832,832,832,832,832,832,832,832,832,832,832,832,832,832,832,832,
+832,832,832,832,832,833,833,833,834,834,834,834,834,834,834,834,
+833,833,834,834,834,833,834,832,832,832,832,835,835,835,835,835,
+836,836,836,836,836,836,836,836,836,836,835,835,120,835,834,832,
+832,832,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
/* block 175 */
-830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,
-830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,
-830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,831,
-832,832,833,833,833,833,120,120,832,832,832,832,833,833,832,833,
-833,834,834,834,834,834,834,834,834,834,834,834,834,834,834,834,
-834,834,834,834,834,834,834,834,830,830,830,830,833,833,120,120,
+837,837,837,837,837,837,837,837,837,837,837,837,837,837,837,837,
+837,837,837,837,837,837,837,837,837,837,837,837,837,837,837,837,
+837,837,837,837,837,837,837,837,837,837,837,837,837,837,837,837,
+838,839,839,840,840,840,840,840,840,839,840,839,839,838,839,840,
+840,839,840,840,837,837,841,837,120,120,120,120,120,120,120,120,
+842,842,842,842,842,842,842,842,842,842,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
/* block 176 */
-835,835,835,835,835,835,835,835,835,835,835,835,835,835,835,835,
-835,835,835,835,835,835,835,835,835,835,835,835,835,835,835,835,
-835,835,835,835,835,835,835,835,835,835,835,835,835,835,835,835,
-836,836,836,837,837,837,837,837,837,837,837,836,836,837,836,837,
-837,838,838,838,835,120,120,120,120,120,120,120,120,120,120,120,
-839,839,839,839,839,839,839,839,839,839,120,120,120,120,120,120,
-394,394,394,394,394,394,394,394,394,394,394,394,394,120,120,120,
+843,843,843,843,843,843,843,843,843,843,843,843,843,843,843,843,
+843,843,843,843,843,843,843,843,843,843,843,843,843,843,843,843,
+843,843,843,843,843,843,843,843,843,843,843,843,843,843,843,844,
+845,845,846,846,846,846,120,120,845,845,845,845,846,846,845,846,
+846,847,847,847,847,847,847,847,847,847,847,847,847,847,847,847,
+847,847,847,847,847,847,847,847,843,843,843,843,846,846,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
/* block 177 */
-840,840,840,840,840,840,840,840,840,840,840,840,840,840,840,840,
-840,840,840,840,840,840,840,840,840,840,840,840,840,840,840,840,
-840,840,840,840,840,840,840,840,840,840,840,841,842,841,842,842,
-841,841,841,841,841,841,842,841,840,120,120,120,120,120,120,120,
-843,843,843,843,843,843,843,843,843,843,120,120,120,120,120,120,
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+848,848,848,848,848,848,848,848,848,848,848,848,848,848,848,848,
+848,848,848,848,848,848,848,848,848,848,848,848,848,848,848,848,
+848,848,848,848,848,848,848,848,848,848,848,848,848,848,848,848,
+849,849,849,850,850,850,850,850,850,850,850,849,849,850,849,850,
+850,851,851,851,848,120,120,120,120,120,120,120,120,120,120,120,
+852,852,852,852,852,852,852,852,852,852,120,120,120,120,120,120,
+398,398,398,398,398,398,398,398,398,398,398,398,398,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
/* block 178 */
-844,844,844,844,844,844,844,844,844,844,844,844,844,844,844,844,
-844,844,844,844,844,844,844,844,844,844,844,120,120,845,845,845,
-846,846,845,845,845,845,846,845,845,845,845,845,120,120,120,120,
-847,847,847,847,847,847,847,847,847,847,848,848,849,849,849,850,
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+853,853,853,853,853,853,853,853,853,853,853,853,853,853,853,853,
+853,853,853,853,853,853,853,853,853,853,853,853,853,853,853,853,
+853,853,853,853,853,853,853,853,853,853,853,854,855,854,855,855,
+854,854,854,854,854,854,855,854,853,856,120,120,120,120,120,120,
+857,857,857,857,857,857,857,857,857,857,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
/* block 179 */
-851,851,851,851,851,851,851,851,851,851,851,851,851,851,851,851,
-851,851,851,851,851,851,851,851,851,851,851,851,851,851,851,851,
-851,851,851,851,851,851,851,851,851,851,851,851,852,852,852,853,
-853,853,853,853,853,853,853,853,852,853,853,854,120,120,120,120,
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+858,858,858,858,858,858,858,858,858,858,858,858,858,858,858,858,
+858,858,858,858,858,858,858,858,858,858,858,120,120,859,859,859,
+860,860,859,859,859,859,861,859,859,859,859,859,120,120,120,120,
+862,862,862,862,862,862,862,862,862,862,863,863,864,864,864,865,
+858,858,858,858,858,858,858,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
/* block 180 */
+866,866,866,866,866,866,866,866,866,866,866,866,866,866,866,866,
+866,866,866,866,866,866,866,866,866,866,866,866,866,866,866,866,
+866,866,866,866,866,866,866,866,866,866,866,866,867,867,867,868,
+868,868,868,868,868,868,868,868,867,868,868,869,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-855,855,855,855,855,855,855,855,855,855,855,855,855,855,855,855,
-855,855,855,855,855,855,855,855,855,855,855,855,855,855,855,855,
-856,856,856,856,856,856,856,856,856,856,856,856,856,856,856,856,
-856,856,856,856,856,856,856,856,856,856,856,856,856,856,856,856,
-857,857,857,857,857,857,857,857,857,857,858,858,858,858,858,858,
-858,858,858,120,120,120,120,120,120,120,120,120,120,120,120,859,
/* block 181 */
-860,860,860,860,860,860,860,120,120,860,120,120,860,860,860,860,
-860,860,860,860,120,860,860,120,860,860,860,860,860,860,860,860,
-860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,
-861,862,862,862,862,862,120,862,862,120,120,863,863,862,863,864,
-862,864,862,863,865,865,865,120,120,120,120,120,120,120,120,120,
-866,866,866,866,866,866,866,866,866,866,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,
+870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,
+871,871,871,871,871,871,871,871,871,871,871,871,871,871,871,871,
+871,871,871,871,871,871,871,871,871,871,871,871,871,871,871,871,
+872,872,872,872,872,872,872,872,872,872,873,873,873,873,873,873,
+873,873,873,120,120,120,120,120,120,120,120,120,120,120,120,874,
/* block 182 */
+875,875,875,875,875,875,875,120,120,875,120,120,875,875,875,875,
+875,875,875,875,120,875,875,120,875,875,875,875,875,875,875,875,
+875,875,875,875,875,875,875,875,875,875,875,875,875,875,875,875,
+876,877,877,877,877,877,120,877,877,120,120,878,878,877,878,879,
+877,879,877,878,880,880,880,120,120,120,120,120,120,120,120,120,
+881,881,881,881,881,881,881,881,881,881,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-867,867,867,867,867,867,867,867,120,120,867,867,867,867,867,867,
-867,867,867,867,867,867,867,867,867,867,867,867,867,867,867,867,
-867,867,867,867,867,867,867,867,867,867,867,867,867,867,867,867,
-867,868,868,868,869,869,869,869,120,120,869,869,868,868,868,868,
-869,867,870,867,868,120,120,120,120,120,120,120,120,120,120,120,
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
/* block 183 */
-871,872,872,872,872,872,872,872,872,872,872,871,871,871,871,871,
-871,871,871,871,871,871,871,871,871,871,871,871,871,871,871,871,
-871,871,871,871,871,871,871,871,871,871,871,871,871,871,871,871,
-871,871,871,872,872,872,872,872,872,873,874,872,872,872,872,875,
-875,875,875,875,875,875,875,872,120,120,120,120,120,120,120,120,
-876,877,877,877,877,877,877,878,878,877,877,877,876,876,876,876,
-876,876,876,876,876,876,876,876,876,876,876,876,876,876,876,876,
-876,876,876,876,876,876,876,876,876,876,876,876,876,876,876,876,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+882,882,882,882,882,882,882,882,120,120,882,882,882,882,882,882,
+882,882,882,882,882,882,882,882,882,882,882,882,882,882,882,882,
+882,882,882,882,882,882,882,882,882,882,882,882,882,882,882,882,
+882,883,883,883,884,884,884,884,120,120,884,884,883,883,883,883,
+884,882,885,882,883,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
/* block 184 */
-876,876,876,876,879,879,879,879,879,879,877,877,877,877,877,877,
-877,877,877,877,877,877,877,878,877,877,880,880,880,876,880,880,
-880,880,880,120,120,120,120,120,120,120,120,120,120,120,120,120,
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-881,881,881,881,881,881,881,881,881,881,881,881,881,881,881,881,
-881,881,881,881,881,881,881,881,881,881,881,881,881,881,881,881,
-881,881,881,881,881,881,881,881,881,881,881,881,881,881,881,881,
-881,881,881,881,881,881,881,881,881,120,120,120,120,120,120,120,
+886,887,887,887,887,887,887,887,887,887,887,886,886,886,886,886,
+886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,
+886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,
+886,886,886,887,887,887,887,887,887,888,889,887,887,887,887,890,
+890,890,890,890,890,890,890,887,120,120,120,120,120,120,120,120,
+891,892,892,892,892,892,892,893,893,892,892,892,891,891,891,891,
+891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,
+891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,
/* block 185 */
-882,882,882,882,882,882,882,882,882,120,882,882,882,882,882,882,
-882,882,882,882,882,882,882,882,882,882,882,882,882,882,882,882,
-882,882,882,882,882,882,882,882,882,882,882,882,882,882,882,883,
-884,884,884,884,884,884,884,120,884,884,884,884,884,884,883,884,
-882,885,885,885,885,885,120,120,120,120,120,120,120,120,120,120,
-886,886,886,886,886,886,886,886,886,886,887,887,887,887,887,887,
-887,887,887,887,887,887,887,887,887,887,887,887,887,120,120,120,
-888,888,889,889,889,889,889,889,889,889,889,889,889,889,889,889,
+891,891,891,891,894,894,894,894,894,894,892,892,892,892,892,892,
+892,892,892,892,892,892,892,893,892,892,895,895,895,891,895,895,
+895,895,895,120,120,120,120,120,120,120,120,120,120,120,120,120,
+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,
+896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,
+896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,
+896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,
+896,896,896,896,896,896,896,896,896,120,120,120,120,120,120,120,
/* block 186 */
-889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,
-120,120,890,890,890,890,890,890,890,890,890,890,890,890,890,890,
-890,890,890,890,890,890,890,890,120,891,890,890,890,890,890,890,
-890,891,890,890,891,890,890,120,120,120,120,120,120,120,120,120,
+897,897,897,897,897,897,897,897,897,120,897,897,897,897,897,897,
+897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,
+897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,898,
+899,899,899,899,899,899,899,120,899,899,899,899,899,899,898,899,
+897,900,900,900,900,900,120,120,120,120,120,120,120,120,120,120,
+901,901,901,901,901,901,901,901,901,901,902,902,902,902,902,902,
+902,902,902,902,902,902,902,902,902,902,902,902,902,120,120,120,
+903,903,904,904,904,904,904,904,904,904,904,904,904,904,904,904,
+
+/* block 187 */
+904,904,904,904,904,904,904,904,904,904,904,904,904,904,904,904,
+120,120,905,905,905,905,905,905,905,905,905,905,905,905,905,905,
+905,905,905,905,905,905,905,905,120,906,905,905,905,905,905,905,
+905,906,905,905,906,905,905,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-/* block 187 */
-892,892,892,892,892,892,892,120,892,892,120,892,892,892,892,892,
-892,892,892,892,892,892,892,892,892,892,892,892,892,892,892,892,
-892,892,892,892,892,892,892,892,892,892,892,892,892,892,892,892,
-892,893,893,893,893,893,893,120,120,120,893,120,893,893,120,893,
-893,893,893,893,893,893,894,893,120,120,120,120,120,120,120,120,
-895,895,895,895,895,895,895,895,895,895,120,120,120,120,120,120,
-896,896,896,896,896,896,120,896,896,120,896,896,896,896,896,896,
-896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,
-
/* block 188 */
-896,896,896,896,896,896,896,896,896,896,897,897,897,897,897,120,
-898,898,120,897,897,898,897,898,896,120,120,120,120,120,120,120,
-899,899,899,899,899,899,899,899,899,899,120,120,120,120,120,120,
+907,907,907,907,907,907,907,120,907,907,120,907,907,907,907,907,
+907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,
+907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,
+907,908,908,908,908,908,908,120,120,120,908,120,908,908,120,908,
+908,908,908,908,908,908,909,908,120,120,120,120,120,120,120,120,
+910,910,910,910,910,910,910,910,910,910,120,120,120,120,120,120,
+911,911,911,911,911,911,120,911,911,120,911,911,911,911,911,911,
+911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,
+
+/* block 189 */
+911,911,911,911,911,911,911,911,911,911,912,912,912,912,912,120,
+913,913,120,912,912,913,912,913,911,120,120,120,120,120,120,120,
+914,914,914,914,914,914,914,914,914,914,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-/* block 189 */
+/* block 190 */
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,
-900,900,900,901,901,902,902,903,903,120,120,120,120,120,120,120,
+915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,
+915,915,915,916,916,917,917,918,918,120,120,120,120,120,120,120,
-/* block 190 */
+/* block 191 */
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-590,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-904,904,904,904,904,904,904,904,904,904,904,904,904,904,904,904,
-293,293,904,293,904,295,295,295,295,295,295,295,295,296,296,296,
-296,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,
-295,295,120,120,120,120,120,120,120,120,120,120,120,120,120,905,
-
-/* block 191 */
-906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,
-906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,
-906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,
-906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,
-906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,
-906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,
-906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,
-906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,
+595,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+919,919,919,919,919,919,919,919,919,919,919,919,919,919,919,919,
+295,295,919,295,919,297,297,297,297,297,297,297,297,298,298,298,
+298,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,
+297,297,120,120,120,120,120,120,120,120,120,120,120,120,120,920,
/* block 192 */
-906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,
-906,906,906,906,906,906,906,906,906,906,120,120,120,120,120,120,
+921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,
+921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,
+921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,
+921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,
+921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,
+921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,
+921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,
+921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,
+
+/* block 193 */
+921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,
+921,921,921,921,921,921,921,921,921,921,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
@@ -3648,108 +3684,118 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-/* block 193 */
-907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,
-907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,
-907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,
-907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,
-907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,
-907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,
-907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,120,
-908,908,908,908,908,120,120,120,120,120,120,120,120,120,120,120,
-
/* block 194 */
-906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,
-906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,
-906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,
-906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,
-906,906,906,906,120,120,120,120,120,120,120,120,120,120,120,120,
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,
+922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,
+922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,
+922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,
+922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,
+922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,
+922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,120,
+923,923,923,923,923,120,120,120,120,120,120,120,120,120,120,120,
/* block 195 */
-909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,
-909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,
-909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,
-909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,
-909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,
-909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,
-909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,
-909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,
-
-/* block 196 */
-909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,
-909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,
-909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,120,
-910,910,910,910,910,910,910,910,910,120,120,120,120,120,120,120,
+921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,
+921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,
+921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,
+921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,
+921,921,921,921,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+
+/* block 196 */
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+924,924,924,924,924,924,924,924,924,924,924,924,924,924,924,924,
+924,924,924,924,924,924,924,924,924,924,924,924,924,924,924,924,
+924,924,924,924,924,924,924,924,924,924,924,924,924,924,924,924,
+924,924,924,924,924,924,924,924,924,924,924,924,924,924,924,924,
+924,924,924,924,924,924,924,924,924,924,924,924,924,924,924,924,
+924,924,924,924,924,924,924,924,924,924,924,924,924,924,924,924,
+924,925,925,120,120,120,120,120,120,120,120,120,120,120,120,120,
/* block 197 */
-911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,
-911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,
-911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,
-911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,
-911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,
-911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,
-911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,
-911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,
+926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,
+926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,
+926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,
+926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,
+926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,
+926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,
+926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,
+926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,
/* block 198 */
-911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,
-911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,
-911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,
-911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,
-911,911,911,911,911,911,911,120,120,120,120,120,120,120,120,120,
+926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,
+926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,
+926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,120,
+927,927,927,927,927,927,927,927,927,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
/* block 199 */
-601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,
-601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,
-601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,
-601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,
-601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,
-601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,
-601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,
-601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,
+928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,
+928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,
+928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,
+928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,
+928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,
+928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,
+928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,
+928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,
/* block 200 */
-601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,
-601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,
-601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,
-601,601,601,601,601,601,601,601,601,120,120,120,120,120,120,120,
-912,912,912,912,912,912,912,912,912,912,912,912,912,912,912,912,
-912,912,912,912,912,912,912,912,912,912,912,912,912,912,912,120,
-913,913,913,913,913,913,913,913,913,913,120,120,120,120,914,914,
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-
-/* block 201 */
+928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,
+928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,
+928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,
+928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,
+928,928,928,928,928,928,928,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,
-915,915,915,915,915,915,915,915,915,915,915,915,915,915,120,120,
-916,916,916,916,916,917,120,120,120,120,120,120,120,120,120,120,
+
+/* block 201 */
+606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,
+606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,
+606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,
+606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,
+606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,
+606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,
+606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,
+606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,
/* block 202 */
-918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,
-918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,
-918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,
-919,919,919,919,919,919,919,920,920,920,920,920,921,921,921,921,
-922,922,922,922,920,921,120,120,120,120,120,120,120,120,120,120,
-923,923,923,923,923,923,923,923,923,923,120,924,924,924,924,924,
-924,924,120,918,918,918,918,918,918,918,918,918,918,918,918,918,
-918,918,918,918,918,918,918,918,120,120,120,120,120,918,918,918,
+606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,
+606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,
+606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,
+606,606,606,606,606,606,606,606,606,120,120,120,120,120,120,120,
+929,929,929,929,929,929,929,929,929,929,929,929,929,929,929,929,
+929,929,929,929,929,929,929,929,929,929,929,929,929,929,929,120,
+930,930,930,930,930,930,930,930,930,930,120,120,120,120,931,931,
+932,932,932,932,932,932,932,932,932,932,932,932,932,932,932,932,
/* block 203 */
-918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,
+932,932,932,932,932,932,932,932,932,932,932,932,932,932,932,932,
+932,932,932,932,932,932,932,932,932,932,932,932,932,932,932,932,
+932,932,932,932,932,932,932,932,932,932,932,932,932,932,932,932,
+932,932,932,932,932,932,932,932,932,932,932,932,932,932,932,120,
+933,933,933,933,933,933,933,933,933,933,120,120,120,120,120,120,
+934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,
+934,934,934,934,934,934,934,934,934,934,934,934,934,934,120,120,
+935,935,935,935,935,936,120,120,120,120,120,120,120,120,120,120,
+
+/* block 204 */
+937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,
+937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,
+937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,
+938,938,938,938,938,938,938,939,939,939,939,939,940,940,940,940,
+941,941,941,941,939,940,120,120,120,120,120,120,120,120,120,120,
+942,942,942,942,942,942,942,942,942,942,120,943,943,943,943,943,
+943,943,120,937,937,937,937,937,937,937,937,937,937,937,937,937,
+937,937,937,937,937,937,937,937,120,120,120,120,120,937,937,937,
+
+/* block 205 */
+937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
@@ -3758,19 +3804,19 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-/* block 204 */
+/* block 206 */
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-925,925,925,925,925,925,925,925,925,925,925,925,925,925,925,925,
-925,925,925,925,925,925,925,925,925,925,925,925,925,925,925,925,
-926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,
-926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,
+944,944,944,944,944,944,944,944,944,944,944,944,944,944,944,944,
+944,944,944,944,944,944,944,944,944,944,944,944,944,944,944,944,
+945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,
+945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,
-/* block 205 */
-927,927,927,927,927,927,927,927,927,927,927,927,927,927,927,927,
-927,927,927,927,927,927,927,928,928,928,928,120,120,120,120,120,
+/* block 207 */
+946,946,946,946,946,946,946,946,946,946,946,946,946,946,946,946,
+946,946,946,946,946,946,946,947,947,947,947,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
@@ -3778,68 +3824,68 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-/* block 206 */
-929,929,929,929,929,929,929,929,929,929,929,929,929,929,929,929,
-929,929,929,929,929,929,929,929,929,929,929,929,929,929,929,929,
-929,929,929,929,929,929,929,929,929,929,929,929,929,929,929,929,
-929,929,929,929,929,929,929,929,929,929,929,929,929,929,929,929,
-929,929,929,929,929,929,929,929,929,929,929,120,120,120,120,930,
-929,931,931,931,931,931,931,931,931,931,931,931,931,931,931,931,
-931,931,931,931,931,931,931,931,931,931,931,931,931,931,931,931,
-931,931,931,931,931,931,931,931,931,931,931,931,931,931,931,931,
+/* block 208 */
+948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,
+948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,
+948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,
+948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,
+948,948,948,948,948,948,948,948,948,948,948,120,120,120,120,949,
+948,950,950,950,950,950,950,950,950,950,950,950,950,950,950,950,
+950,950,950,950,950,950,950,950,950,950,950,950,950,950,950,950,
+950,950,950,950,950,950,950,950,950,950,950,950,950,950,950,950,
-/* block 207 */
-931,931,931,931,931,931,931,931,120,120,120,120,120,120,120,930,
-930,930,930,932,932,932,932,932,932,932,932,932,932,932,932,932,
+/* block 209 */
+950,950,950,950,950,950,950,950,120,120,120,120,120,120,120,949,
+949,949,949,951,951,951,951,951,951,951,951,951,951,951,951,951,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-933,934, 5,111,935,120,120,120,120,120,120,120,120,120,120,120,
-936,936,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-
-/* block 208 */
-937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,
-937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,
-937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,
-937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,
-937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,
-937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,
-937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,
-937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,
-
-/* block 209 */
-937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,
-937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,
-937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,
-937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,
-937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,
-937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,
-937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,
-937,937,937,937,937,937,937,937,120,120,120,120,120,120,120,120,
+952,953,954,562,955,120,120,120,120,120,120,120,120,120,120,120,
+956,956,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
/* block 210 */
-938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,
-938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,
-938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,
-938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,
-938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,
-938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,
-938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,
-938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,
+957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,
+957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,
+957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,
+957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,
+957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,
+957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,
+957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,
+957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,
/* block 211 */
-938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,
-938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,
-938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,
-938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,
-938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,
-938,938,938,938,938,938,120,120,120,120,120,120,120,120,120,120,
+957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,
+957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,
+957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,
+957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,
+957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,
+957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,
+957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,
+957,957,957,957,957,957,957,957,120,120,120,120,120,120,120,120,
+
+/* block 212 */
+958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,
+958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,
+958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,
+958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,
+958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,
+958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,
+958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,
+958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,
+
+/* block 213 */
+958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,
+958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,
+958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,
+958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,
+958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,
+958,958,958,958,958,958,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-/* block 212 */
-937,937,937,937,937,937,937,937,937,120,120,120,120,120,120,120,
+/* block 214 */
+957,957,957,957,957,957,957,957,957,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
@@ -3848,77 +3894,107 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-/* block 213 */
-578,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,
-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,
-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,
-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,
-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,
-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,
-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,
-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,
-
-/* block 214 */
-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,
-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,
-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,
-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,
-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,
-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,
-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,
-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,
-
/* block 215 */
-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,
-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-573,573,573,120,120,120,120,120,120,120,120,120,120,120,120,120,
-120,120,120,120,578,578,578,578,120,120,120,120,120,120,120,120,
-939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+584,584,584,584,120,584,584,584,584,584,584,584,120,584,584,120,
/* block 216 */
-939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,
-939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,
-939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,
-939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,
-939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,
-939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,
-939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,
-939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,
+583,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,
+578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,
+578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,
+578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,
+578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,
+578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,
+578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,
+578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,
/* block 217 */
-939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,
-939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,
-939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,
-939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,
-939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,
-939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,
-939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,
-939,939,939,939,939,939,939,939,939,939,939,939,120,120,120,120,
+578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,
+578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,
+578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,
+578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,
+578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,
+578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,
+578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,
+578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,
/* block 218 */
-940,940,940,940,940,940,940,940,940,940,940,940,940,940,940,940,
-940,940,940,940,940,940,940,940,940,940,940,940,940,940,940,940,
-940,940,940,940,940,940,940,940,940,940,940,940,940,940,940,940,
-940,940,940,940,940,940,940,940,940,940,940,940,940,940,940,940,
-940,940,940,940,940,940,940,940,940,940,940,940,940,940,940,940,
-940,940,940,940,940,940,940,940,940,940,940,940,940,940,940,940,
-940,940,940,940,940,940,940,940,940,940,940,120,120,120,120,120,
-940,940,940,940,940,940,940,940,940,940,940,940,940,120,120,120,
+578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,
+578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,
+583,583,583,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+578,578,578,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,583,583,583,583,120,120,120,120,120,120,120,120,
+959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,
/* block 219 */
-940,940,940,940,940,940,940,940,940,120,120,120,120,120,120,120,
-940,940,940,940,940,940,940,940,940,940,120,120,941,942,942,943,
-944,944,944,944,120,120,120,120,120,120,120,120,120,120,120,120,
+959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,
+959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,
+959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,
+959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,
+959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,
+959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,
+959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,
+959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,
+
+/* block 220 */
+959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,
+959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,
+959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,
+959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,
+959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,
+959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,
+959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,
+959,959,959,959,959,959,959,959,959,959,959,959,120,120,120,120,
+
+/* block 221 */
+960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,
+960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,
+960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,
+960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,
+960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,
+960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,
+960,960,960,960,960,960,960,960,960,960,960,120,120,120,120,120,
+960,960,960,960,960,960,960,960,960,960,960,960,960,120,120,120,
+
+/* block 222 */
+960,960,960,960,960,960,960,960,960,120,120,120,120,120,120,120,
+960,960,960,960,960,960,960,960,960,960,120,120,961,962,962,963,
+964,964,964,964,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-/* block 220 */
+/* block 223 */
+113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,
+113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,
+113,113,113,113,113,113,113,113,113,113,113,113,113,113,120,120,
+113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,
+113,113,113,113,113,113,113,120,120,120,120,120,120,120,120,120,
+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+
+/* block 224 */
+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+ 20, 20, 20, 20,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+
+/* block 225 */
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
@@ -3928,37 +4004,37 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20,120,120,120,120,120,120,120,120,120,120,
-/* block 221 */
+/* block 226 */
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20,120,120, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
- 20, 20, 20, 20, 20,945,946,113,113,113, 20, 20, 20,946,945,945,
-945,945,945, 24, 24, 24, 24, 24, 24, 24, 24,113,113,113,113,113,
+ 20, 20, 20, 20, 20,965,966,113,113,113, 20, 20, 20,966,965,965,
+965,965,965, 24, 24, 24, 24, 24, 24, 24, 24,113,113,113,113,113,
-/* block 222 */
+/* block 227 */
113,113,113, 20, 20,113,113,113,113,113,113,113, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20,113,113,113,113, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
- 20, 20, 20, 20, 20, 20, 20, 20, 20,120,120,120,120,120,120,120,
+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-/* block 223 */
-685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,
-685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,
-685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,
-685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,
-685,685,947,947,947,685,120,120,120,120,120,120,120,120,120,120,
+/* block 228 */
+692,692,692,692,692,692,692,692,692,692,692,692,692,692,692,692,
+692,692,692,692,692,692,692,692,692,692,692,692,692,692,692,692,
+692,692,692,692,692,692,692,692,692,692,692,692,692,692,692,692,
+692,692,692,692,692,692,692,692,692,692,692,692,692,692,692,692,
+692,692,967,967,967,692,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-/* block 224 */
+/* block 229 */
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
@@ -3968,187 +4044,207 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
25, 25, 25, 25,120,120,120,120,120,120,120,120,120,120,120,120,
-/* block 225 */
+/* block 230 */
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20,120,120,120,120,120,120,120,120,120,
-582,582,582,582,582,582,582,582,582,582,582,582,582,582,582,582,
-582,582, 25, 25, 25, 25, 25, 25, 25,120,120,120,120,120,120,120,
+587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,
+587,587, 25, 25, 25, 25, 25, 25, 25,120,120,120,120,120,120,120,
-/* block 226 */
-513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,
-513,513,513,513,513,513,513,513,513,513,514,514,514,514,514,514,
-514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,
-514,514,514,514,513,513,513,513,513,513,513,513,513,513,513,513,
-513,513,513,513,513,513,513,513,513,513,513,513,513,513,514,514,
-514,514,514,514,514,120,514,514,514,514,514,514,514,514,514,514,
-514,514,514,514,514,514,514,514,513,513,513,513,513,513,513,513,
-513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,
+/* block 231 */
+518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,
+518,518,518,518,518,518,518,518,518,518,519,519,519,519,519,519,
+519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,
+519,519,519,519,518,518,518,518,518,518,518,518,518,518,518,518,
+518,518,518,518,518,518,518,518,518,518,518,518,518,518,519,519,
+519,519,519,519,519,120,519,519,519,519,519,519,519,519,519,519,
+519,519,519,519,519,519,519,519,518,518,518,518,518,518,518,518,
+518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,
-/* block 227 */
-513,513,514,514,514,514,514,514,514,514,514,514,514,514,514,514,
-514,514,514,514,514,514,514,514,514,514,514,514,513,120,513,513,
-120,120,513,120,120,513,513,120,120,513,513,513,513,120,513,513,
-513,513,513,513,513,513,514,514,514,514,120,514,120,514,514,514,
-514,514,514,514,120,514,514,514,514,514,514,514,514,514,514,514,
-513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,
-513,513,513,513,513,513,513,513,513,513,514,514,514,514,514,514,
-514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,
+/* block 232 */
+518,518,519,519,519,519,519,519,519,519,519,519,519,519,519,519,
+519,519,519,519,519,519,519,519,519,519,519,519,518,120,518,518,
+120,120,518,120,120,518,518,120,120,518,518,518,518,120,518,518,
+518,518,518,518,518,518,519,519,519,519,120,519,120,519,519,519,
+519,519,519,519,120,519,519,519,519,519,519,519,519,519,519,519,
+518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,
+518,518,518,518,518,518,518,518,518,518,519,519,519,519,519,519,
+519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,
-/* block 228 */
-514,514,514,514,513,513,120,513,513,513,513,120,120,513,513,513,
-513,513,513,513,513,120,513,513,513,513,513,513,513,120,514,514,
-514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,
-514,514,514,514,514,514,514,514,513,513,120,513,513,513,513,120,
-513,513,513,513,513,120,513,120,120,120,513,513,513,513,513,513,
-513,120,514,514,514,514,514,514,514,514,514,514,514,514,514,514,
-514,514,514,514,514,514,514,514,514,514,514,514,513,513,513,513,
-513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,
+/* block 233 */
+519,519,519,519,518,518,120,518,518,518,518,120,120,518,518,518,
+518,518,518,518,518,120,518,518,518,518,518,518,518,120,519,519,
+519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,
+519,519,519,519,519,519,519,519,518,518,120,518,518,518,518,120,
+518,518,518,518,518,120,518,120,120,120,518,518,518,518,518,518,
+518,120,519,519,519,519,519,519,519,519,519,519,519,519,519,519,
+519,519,519,519,519,519,519,519,519,519,519,519,518,518,518,518,
+518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,
-/* block 229 */
-513,513,513,513,513,513,514,514,514,514,514,514,514,514,514,514,
-514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,
-513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,
-513,513,513,513,513,513,513,513,513,513,514,514,514,514,514,514,
-514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,
-514,514,514,514,513,513,513,513,513,513,513,513,513,513,513,513,
-513,513,513,513,513,513,513,513,513,513,513,513,513,513,514,514,
-514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,
+/* block 234 */
+518,518,518,518,518,518,519,519,519,519,519,519,519,519,519,519,
+519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,
+518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,
+518,518,518,518,518,518,518,518,518,518,519,519,519,519,519,519,
+519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,
+519,519,519,519,518,518,518,518,518,518,518,518,518,518,518,518,
+518,518,518,518,518,518,518,518,518,518,518,518,518,518,519,519,
+519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,
-/* block 230 */
-514,514,514,514,514,514,514,514,513,513,513,513,513,513,513,513,
-513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,
-513,513,514,514,514,514,514,514,514,514,514,514,514,514,514,514,
-514,514,514,514,514,514,514,514,514,514,514,514,513,513,513,513,
-513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,
-513,513,513,513,513,513,514,514,514,514,514,514,514,514,514,514,
-514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,
-513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,
+/* block 235 */
+519,519,519,519,519,519,519,519,518,518,518,518,518,518,518,518,
+518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,
+518,518,519,519,519,519,519,519,519,519,519,519,519,519,519,519,
+519,519,519,519,519,519,519,519,519,519,519,519,518,518,518,518,
+518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,
+518,518,518,518,518,518,519,519,519,519,519,519,519,519,519,519,
+519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,
+518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,
-/* block 231 */
-513,513,513,513,513,513,513,513,513,513,514,514,514,514,514,514,
-514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,
-514,514,514,514,514,514,120,120,513,513,513,513,513,513,513,513,
-513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,
-513, 9,514,514,514,514,514,514,514,514,514,514,514,514,514,514,
-514,514,514,514,514,514,514,514,514,514,514, 9,514,514,514,514,
-514,514,513,513,513,513,513,513,513,513,513,513,513,513,513,513,
-513,513,513,513,513,513,513,513,513,513,513, 9,514,514,514,514,
+/* block 236 */
+518,518,518,518,518,518,518,518,518,518,519,519,519,519,519,519,
+519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,
+519,519,519,519,519,519,120,120,518,518,518,518,518,518,518,518,
+518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,
+518, 9,519,519,519,519,519,519,519,519,519,519,519,519,519,519,
+519,519,519,519,519,519,519,519,519,519,519, 9,519,519,519,519,
+519,519,518,518,518,518,518,518,518,518,518,518,518,518,518,518,
+518,518,518,518,518,518,518,518,518,518,518, 9,519,519,519,519,
-/* block 232 */
-514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,
-514,514,514,514,514, 9,514,514,514,514,514,514,513,513,513,513,
-513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,
-513,513,513,513,513, 9,514,514,514,514,514,514,514,514,514,514,
-514,514,514,514,514,514,514,514,514,514,514,514,514,514,514, 9,
-514,514,514,514,514,514,513,513,513,513,513,513,513,513,513,513,
-513,513,513,513,513,513,513,513,513,513,513,513,513,513,513, 9,
-514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,
+/* block 237 */
+519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,
+519,519,519,519,519, 9,519,519,519,519,519,519,518,518,518,518,
+518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,
+518,518,518,518,518, 9,519,519,519,519,519,519,519,519,519,519,
+519,519,519,519,519,519,519,519,519,519,519,519,519,519,519, 9,
+519,519,519,519,519,519,518,518,518,518,518,518,518,518,518,518,
+518,518,518,518,518,518,518,518,518,518,518,518,518,518,518, 9,
+519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,
-/* block 233 */
-514,514,514,514,514,514,514,514,514, 9,514,514,514,514,514,514,
-513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,
-513,513,513,513,513,513,513,513,513, 9,514,514,514,514,514,514,
-514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,
-514,514,514, 9,514,514,514,514,514,514,513,514,120,120, 11, 11,
+/* block 238 */
+519,519,519,519,519,519,519,519,519, 9,519,519,519,519,519,519,
+518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,
+518,518,518,518,518,518,518,518,518, 9,519,519,519,519,519,519,
+519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,
+519,519,519, 9,519,519,519,519,519,519,518,519,120,120, 11, 11,
11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
-/* block 234 */
-948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,
-948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,
-948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,
-948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,
-948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,
-948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,
-948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,
-948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,
+/* block 239 */
+968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,
+968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,
+968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,
+968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,
+968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,
+968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,
+968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,
+968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,
-/* block 235 */
-949,949,949,949,949,949,949,949,949,949,949,949,949,949,949,949,
-949,949,949,949,949,949,949,949,949,949,949,949,949,949,949,949,
-949,949,949,949,949,949,949,949,949,949,949,949,949,949,949,949,
-949,949,949,949,949,949,949,948,948,948,948,949,949,949,949,949,
-949,949,949,949,949,949,949,949,949,949,949,949,949,949,949,949,
-949,949,949,949,949,949,949,949,949,949,949,949,949,949,949,949,
-949,949,949,949,949,949,949,949,949,949,949,949,949,948,948,948,
-948,948,948,948,948,949,948,948,948,948,948,948,948,948,948,948,
+/* block 240 */
+969,969,969,969,969,969,969,969,969,969,969,969,969,969,969,969,
+969,969,969,969,969,969,969,969,969,969,969,969,969,969,969,969,
+969,969,969,969,969,969,969,969,969,969,969,969,969,969,969,969,
+969,969,969,969,969,969,969,968,968,968,968,969,969,969,969,969,
+969,969,969,969,969,969,969,969,969,969,969,969,969,969,969,969,
+969,969,969,969,969,969,969,969,969,969,969,969,969,969,969,969,
+969,969,969,969,969,969,969,969,969,969,969,969,969,968,968,968,
+968,968,968,968,968,969,968,968,968,968,968,968,968,968,968,968,
-/* block 236 */
-948,948,948,948,949,948,948,950,950,950,950,950,120,120,120,120,
-120,120,120,120,120,120,120,120,120,120,120,949,949,949,949,949,
-120,949,949,949,949,949,949,949,949,949,949,949,949,949,949,949,
+/* block 241 */
+968,968,968,968,969,968,968,970,970,970,970,970,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,969,969,969,969,969,
+120,969,969,969,969,969,969,969,969,969,969,969,969,969,969,969,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-/* block 237 */
-951,951,951,951,951,951,951,120,951,951,951,951,951,951,951,951,
-951,951,951,951,951,951,951,951,951,120,120,951,951,951,951,951,
-951,951,120,951,951,120,951,951,951,951,951,120,120,120,120,120,
+/* block 242 */
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 22, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-/* block 238 */
-952,952,952,952,952,952,952,952,952,952,952,952,952,952,952,952,
-952,952,952,952,952,952,952,952,952,952,952,952,952,952,952,952,
-952,952,952,952,952,952,952,952,952,952,952,952,952,120,120,120,
-953,953,953,953,953,953,953,954,954,954,954,954,954,954,120,120,
-955,955,955,955,955,955,955,955,955,955,120,120,120,120,952,956,
+/* block 243 */
+971,971,971,971,971,971,971,120,971,971,971,971,971,971,971,971,
+971,971,971,971,971,971,971,971,971,120,120,971,971,971,971,971,
+971,971,120,971,971,120,971,971,971,971,971,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-/* block 239 */
+/* block 244 */
+972,972,972,972,972,972,972,972,972,972,972,972,972,972,972,972,
+972,972,972,972,972,972,972,972,972,972,972,972,972,972,972,972,
+972,972,972,972,972,972,972,972,972,972,972,972,972,120,120,120,
+973,973,973,973,973,973,973,974,974,974,974,974,974,974,120,120,
+975,975,975,975,975,975,975,975,975,975,120,120,120,120,972,976,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+
+/* block 245 */
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,
-957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,
-957,957,957,957,957,957,957,957,957,957,957,957,958,958,958,958,
-959,959,959,959,959,959,959,959,959,959,120,120,120,120,120,960,
+977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,
+977,977,977,977,977,977,977,977,977,977,977,977,977,977,978,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+979,979,979,979,979,979,979,979,979,979,979,979,979,979,979,979,
+979,979,979,979,979,979,979,979,979,979,979,979,979,979,979,979,
+979,979,979,979,979,979,979,979,979,979,979,979,980,980,980,980,
+981,981,981,981,981,981,981,981,981,981,120,120,120,120,120,982,
-/* block 240 */
-961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,
-961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,
-961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,
-961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,
-961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,
-961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,
-961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,
-961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,
+/* block 246 */
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+361,361,361,361,361,361,361,120,361,361,361,361,120,361,361,120,
+361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,120,
-/* block 241 */
-961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,
-961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,
-961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,
-961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,
-961,961,961,961,961,120,120,962,962,962,962,962,962,962,962,962,
-963,963,963,963,963,963,963,120,120,120,120,120,120,120,120,120,
+/* block 247 */
+983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,
+983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,
+983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,
+983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,
+983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,
+983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,
+983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,
+983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,
+
+/* block 248 */
+983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,
+983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,
+983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,
+983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,
+983,983,983,983,983,120,120,984,984,984,984,984,984,984,984,984,
+985,985,985,985,985,985,985,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-/* block 242 */
-964,964,964,964,964,964,964,964,964,964,964,964,964,964,964,964,
-964,964,964,964,964,964,964,964,964,964,964,964,964,964,964,964,
-964,964,965,965,965,965,965,965,965,965,965,965,965,965,965,965,
-965,965,965,965,965,965,965,965,965,965,965,965,965,965,965,965,
-965,965,965,965,966,966,966,966,966,966,966,967,120,120,120,120,
-968,968,968,968,968,968,968,968,968,968,120,120,120,120,969,969,
+/* block 249 */
+986,986,986,986,986,986,986,986,986,986,986,986,986,986,986,986,
+986,986,986,986,986,986,986,986,986,986,986,986,986,986,986,986,
+986,986,987,987,987,987,987,987,987,987,987,987,987,987,987,987,
+987,987,987,987,987,987,987,987,987,987,987,987,987,987,987,987,
+987,987,987,987,988,988,988,988,988,988,988,989,120,120,120,120,
+990,990,990,990,990,990,990,990,990,990,120,120,120,120,991,991,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-/* block 243 */
+/* block 250 */
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
@@ -4158,7 +4254,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
-/* block 244 */
+/* block 251 */
25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 20, 25, 25, 25,
@@ -4168,7 +4264,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-/* block 245 */
+/* block 252 */
120, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 20, 25,
@@ -4178,47 +4274,47 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-/* block 246 */
-224,224,224,224,120,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-120,224,224,120,224,120,120,224,120,224,224,224,224,224,224,224,
-224,224,224,120,224,224,224,224,120,224,120,224,120,120,120,120,
-120,120,224,120,120,120,120,224,120,224,120,224,120,224,224,224,
-120,224,224,120,224,120,120,224,120,224,120,224,120,224,120,224,
-120,224,224,120,224,120,120,224,224,224,224,120,224,224,224,224,
-224,224,224,120,224,224,224,224,120,224,224,224,224,120,224,120,
+/* block 253 */
+225,225,225,225,120,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+120,225,225,120,225,120,120,225,120,225,225,225,225,225,225,225,
+225,225,225,120,225,225,225,225,120,225,120,225,120,120,120,120,
+120,120,225,120,120,120,120,225,120,225,120,225,120,225,225,225,
+120,225,225,120,225,120,120,225,120,225,120,225,120,225,120,225,
+120,225,225,120,225,120,120,225,225,225,225,120,225,225,225,225,
+225,225,225,120,225,225,225,225,120,225,225,225,225,120,225,120,
-/* block 247 */
-224,224,224,224,224,224,224,224,224,224,120,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,120,120,120,120,
-120,224,224,224,120,224,224,224,224,224,120,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,120,120,120,120,
+/* block 254 */
+225,225,225,225,225,225,225,225,225,225,120,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,120,120,120,120,
+120,225,225,225,120,225,225,225,225,225,120,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
217,217,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-/* block 248 */
+/* block 255 */
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,970,970,970,970,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,992,992,992,992,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
-/* block 249 */
+/* block 256 */
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21,970,970,970,970,970,970,970,970,970,970,970,970,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,970,
-970, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
-970, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
-970, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21,992,992,992,992,992,992,992,992,992,992,992,992,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,992,
+992, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+992, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+992, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21,970,970,970,970,970,970,970,970,970,970,
+ 21, 21, 21, 21, 21, 21,992,992,992,992,992,992,992,992,992,992,
-/* block 250 */
+/* block 257 */
25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 21, 21, 21,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21,
@@ -4228,37 +4324,37 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21,
21, 21, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21,
-/* block 251 */
+/* block 258 */
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 20,
20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 20, 20, 20, 20, 20,
- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21,970,970,
-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,
-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,
-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,
-970,970,970,970,970,970,971,971,971,971,971,971,971,971,971,971,
-971,971,971,971,971,971,971,971,971,971,971,971,971,971,971,971,
+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21,992,992,
+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,
+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,
+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,
+992,992,992,992,992,992,993,993,993,993,993,993,993,993,993,993,
+993,993,993,993,993,993,993,993,993,993,993,993,993,993,993,993,
-/* block 252 */
-972, 21, 21,970,970,970,970,970,970,970,970,970,970,970,970,970,
+/* block 259 */
+994, 21, 21,992,992,992,992,992,992,992,992,992,992,992,992,992,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21,
- 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 20,970,970,970,970,
- 20, 20, 20, 20, 20, 20, 20, 20, 20,970,970,970,970,970,970,970,
-584,584,970,970,970,970,970,970,970,970,970,970,970,970,970,970,
- 21, 21, 21, 21, 21, 21,970,970,970,970,970,970,970,970,970,970,
-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,
+ 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 20,992,992,992,992,
+ 20, 20, 20, 20, 20, 20, 20, 20, 20,992,992,992,992,992,992,992,
+589,589,992,992,992,992,992,992,992,992,992,992,992,992,992,992,
+ 21, 21, 21, 21, 21, 21,992,992,992,992,992,992,992,992,992,992,
+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,
-/* block 253 */
-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,
-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,
-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,
-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,
-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,
-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,
-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,
-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,
+/* block 260 */
+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,
+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,
+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,
+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,
+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,
+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,
+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,
+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,
-/* block 254 */
+/* block 261 */
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
@@ -4268,7 +4364,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
-/* block 255 */
+/* block 262 */
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
@@ -4276,9 +4372,9 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,973,973,973,973,973,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,995,995,995,995,995,
-/* block 256 */
+/* block 263 */
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
@@ -4288,7 +4384,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
-/* block 257 */
+/* block 264 */
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
@@ -4298,17 +4394,17 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
-/* block 258 */
+/* block 265 */
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21,970,970,970,970,970,970,970,970,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,970,970,970,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,970,970,970,
+ 21, 21, 21, 21, 21, 21, 21, 21,992,992,992,992,992, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,992,992,992,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,992,992,992,
-/* block 259 */
+/* block 266 */
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
@@ -4316,39 +4412,39 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
- 20, 20, 20, 20,970,970,970,970,970,970,970,970,970,970,970,970,
+ 20, 20, 20, 20,992,992,992,992,992,992,992,992,992,992,992,992,
-/* block 260 */
+/* block 267 */
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
- 20, 20, 20, 20, 20, 21, 21, 21, 21,970,970,970,970,970,970,970,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,970,970,970,970,
-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,
+ 20, 20, 20, 20, 20, 21, 21, 21, 21,992,992,992,992,992,992,992,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,992,992,992,992,
+ 21,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,
-/* block 261 */
- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,970,970,970,970,
+/* block 268 */
+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,992,992,992,992,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
- 20, 20, 20, 20, 20, 20, 20, 20,970,970,970,970,970,970,970,970,
- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,970,970,970,970,970,970,
+ 20, 20, 20, 20, 20, 20, 20, 20,992,992,992,992,992,992,992,992,
+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,992,992,992,992,992,992,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
-/* block 262 */
- 20, 20, 20, 20, 20, 20, 20, 20,970,970,970,970,970,970,970,970,
+/* block 269 */
+ 20, 20, 20, 20, 20, 20, 20, 20,992,992,992,992,992,992,992,992,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,970,970,
- 21, 21,970,970,970,970,970,970,970,970,970,970,970,970,970,970,
-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,
-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,
-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,
-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,
+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,992,992,
+ 21, 21,992,992,992,992,992,992,992,992,992,992,992,992,992,992,
+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,
+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,
+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,
+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,
-/* block 263 */
+/* block 270 */
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
@@ -4356,39 +4452,29 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
21, 21, 21, 21, 21, 21, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21,970, 21, 21, 21, 21, 21, 21,
-
-/* block 264 */
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,970, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
-/* block 265 */
+/* block 271 */
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21,970,970,970,970,970,970,970,970,970,970,970,970,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,970,970,
- 21, 21, 21, 21, 21,970,970,970, 21, 21, 21,970,970,970,970,970,
+ 21, 21, 21, 21,992,992,992,992,992,992,992,992,992,992,992,992,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,992,992,
+ 21, 21, 21, 21, 21,992,992,992, 21, 21, 21, 21, 21,992,992,992,
-/* block 266 */
- 21, 21, 21, 21, 21, 21, 21,970,970,970,970,970,970,970,970,970,
+/* block 272 */
+ 21, 21, 21, 21, 21, 21, 21,992,992,992,992,992,992,992,992,992,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21,970,970,970,970,970,970,970,
- 21, 21, 21, 21, 21, 21, 21,970,970,970,970,970,970,970,970,970,
- 21, 21, 21,970,970,970,970,970,970,970,970,970,970,970,970,970,
- 21, 21, 21, 21, 21, 21, 21,970,970,970,970,970,970,970,970,970,
-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,
-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,992,992,992,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,992,992,992,992,992,
+ 21, 21, 21, 21, 21, 21,992,992,992,992,992,992,992,992,992,992,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,992,992,992,992,992,992,
+ 21, 21, 21, 21, 21, 21, 21, 21,992,992,992,992,992,992,992,992,
+ 21, 21, 21, 21, 21, 21, 21,992,992,992,992,992,992,992,992,992,
-/* block 267 */
+/* block 273 */
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20,120, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
@@ -4398,69 +4484,69 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
11, 11, 11, 11, 11, 11, 11, 11, 11, 11,120,120,120,120,120,120,
-/* block 268 */
-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,
-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,
-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,
-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,
-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,
-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,
-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,
-970,970,970,970,970,970,970,970,970,970,970,970,970,970,120,120,
+/* block 274 */
+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,
+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,
+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,
+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,
+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,
+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,
+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,
+992,992,992,992,992,992,992,992,992,992,992,992,992,992,120,120,
-/* block 269 */
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,120,120,
+/* block 275 */
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-/* block 270 */
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,120,120,120,120,120,120,120,120,120,120,120,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
+/* block 276 */
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,120,120,120,120,120,120,120,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
-/* block 271 */
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,120,120,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
+/* block 277 */
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,120,120,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
-/* block 272 */
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
+/* block 278 */
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
-/* block 273 */
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+/* block 279 */
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-/* block 274 */
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,120,120,
+/* block 280 */
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
@@ -4468,37 +4554,37 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-/* block 275 */
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,120,120,120,120,120,
+/* block 281 */
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-/* block 276 */
-511, 24,511,511,511,511,511,511,511,511,511,511,511,511,511,511,
-511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,
-974,974,974,974,974,974,974,974,974,974,974,974,974,974,974,974,
-974,974,974,974,974,974,974,974,974,974,974,974,974,974,974,974,
-974,974,974,974,974,974,974,974,974,974,974,974,974,974,974,974,
-974,974,974,974,974,974,974,974,974,974,974,974,974,974,974,974,
-974,974,974,974,974,974,974,974,974,974,974,974,974,974,974,974,
-974,974,974,974,974,974,974,974,974,974,974,974,974,974,974,974,
+/* block 282 */
+516, 24,516,516,516,516,516,516,516,516,516,516,516,516,516,516,
+516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,
+996,996,996,996,996,996,996,996,996,996,996,996,996,996,996,996,
+996,996,996,996,996,996,996,996,996,996,996,996,996,996,996,996,
+996,996,996,996,996,996,996,996,996,996,996,996,996,996,996,996,
+996,996,996,996,996,996,996,996,996,996,996,996,996,996,996,996,
+996,996,996,996,996,996,996,996,996,996,996,996,996,996,996,996,
+996,996,996,996,996,996,996,996,996,996,996,996,996,996,996,996,
-/* block 277 */
-511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,
-511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,
-511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,
-511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,
-511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,
-511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,
-511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,
-511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,
+/* block 283 */
+516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,
+516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,
+516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,
+516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,
+516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,
+516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,
+516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,
+516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,
-/* block 278 */
+/* block 284 */
113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,
113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,
113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,
@@ -4508,7 +4594,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,
113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,
-/* block 279 */
+/* block 285 */
113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,
113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,
113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,
@@ -4516,17 +4602,17 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,
113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,
113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,
-511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,
-
-/* block 280 */
-673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,
-673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,
-673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,
-673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,
-673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,
-673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,
-673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,
-673,673,673,673,673,673,673,673,673,673,673,673,673,673,120,120,
+516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,
+
+/* block 286 */
+678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,
+678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,
+678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,
+678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,
+678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,
+678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,
+678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,
+678,678,678,678,678,678,678,678,678,678,678,678,678,678,120,120,
};
diff --git a/thirdparty/pcre2/src/pcre2_ucp.h b/thirdparty/pcre2/src/pcre2_ucp.h
index 9538062c71..d84f269e87 100644
--- a/thirdparty/pcre2/src/pcre2_ucp.h
+++ b/thirdparty/pcre2/src/pcre2_ucp.h
@@ -291,7 +291,13 @@ enum {
ucp_Chorasmian,
ucp_Dives_Akuru,
ucp_Khitan_Small_Script,
- ucp_Yezidi
+ ucp_Yezidi,
+ /* New for Unicode 14.0.0 */
+ ucp_Cypro_Minoan,
+ ucp_Old_Uyghur,
+ ucp_Tangsa,
+ ucp_Toto,
+ ucp_Vithkuqi
};
#endif /* PCRE2_UCP_H_IDEMPOTENT_GUARD */
diff --git a/thirdparty/pcre2/src/sljit/sljitConfigInternal.h b/thirdparty/pcre2/src/sljit/sljitConfigInternal.h
index eb1132db30..7bb9990a59 100644
--- a/thirdparty/pcre2/src/sljit/sljitConfigInternal.h
+++ b/thirdparty/pcre2/src/sljit/sljitConfigInternal.h
@@ -158,6 +158,8 @@ extern "C" {
#define SLJIT_CONFIG_MIPS_64 1
#elif defined(__sparc__) || defined(__sparc)
#define SLJIT_CONFIG_SPARC_32 1
+#elif defined(__s390x__)
+#define SLJIT_CONFIG_S390X 1
#else
/* Unsupported architecture */
#define SLJIT_CONFIG_UNSUPPORTED 1
@@ -759,6 +761,18 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void* ptr);
#define SLJIT_NUMBER_OF_SCRATCH_FLOAT_REGISTERS \
(SLJIT_NUMBER_OF_FLOAT_REGISTERS - SLJIT_NUMBER_OF_SAVED_FLOAT_REGISTERS)
+/********************************/
+/* CPU status flags management. */
+/********************************/
+
+#if (defined SLJIT_CONFIG_ARM_32 && SLJIT_CONFIG_ARM_32) \
+ || (defined SLJIT_CONFIG_ARM_64 && SLJIT_CONFIG_ARM_64) \
+ || (defined SLJIT_CONFIG_MIPS && SLJIT_CONFIG_MIPS) \
+ || (defined SLJIT_CONFIG_SPARC && SLJIT_CONFIG_SPARC) \
+ || (defined SLJIT_CONFIG_S390X && SLJIT_CONFIG_S390X)
+#define SLJIT_HAS_STATUS_FLAGS_STATE 1
+#endif
+
/*************************************/
/* Debug and verbose related macros. */
/*************************************/
diff --git a/thirdparty/pcre2/src/sljit/sljitExecAllocator.c b/thirdparty/pcre2/src/sljit/sljitExecAllocator.c
index 61a32f23e9..6e5bf78e45 100644
--- a/thirdparty/pcre2/src/sljit/sljitExecAllocator.c
+++ b/thirdparty/pcre2/src/sljit/sljitExecAllocator.c
@@ -79,6 +79,7 @@
*/
#ifdef _WIN32
+#define SLJIT_UPDATE_WX_FLAGS(from, to, enable_exec)
static SLJIT_INLINE void* alloc_chunk(sljit_uw size)
{
@@ -91,96 +92,108 @@ static SLJIT_INLINE void free_chunk(void *chunk, sljit_uw size)
VirtualFree(chunk, 0, MEM_RELEASE);
}
-#else
-
-#ifdef __APPLE__
-#ifdef MAP_ANON
-/* Configures TARGET_OS_OSX when appropriate */
-#include <TargetConditionals.h>
-
-#if TARGET_OS_OSX && defined(MAP_JIT)
-#include <sys/utsname.h>
-#endif /* TARGET_OS_OSX && MAP_JIT */
-
-#ifdef MAP_JIT
+#else /* POSIX */
+#if defined(__APPLE__) && defined(MAP_JIT)
/*
On macOS systems, returns MAP_JIT if it is defined _and_ we're running on a
- version where it's OK to have more than one JIT block.
+ version where it's OK to have more than one JIT block or where MAP_JIT is
+ required.
On non-macOS systems, returns MAP_JIT if it is defined.
*/
+#include <TargetConditionals.h>
+#if TARGET_OS_OSX
+#if defined SLJIT_CONFIG_X86 && SLJIT_CONFIG_X86
+#ifdef MAP_ANON
+#include <sys/utsname.h>
+#include <stdlib.h>
+
+#define SLJIT_MAP_JIT (get_map_jit_flag())
+
static SLJIT_INLINE int get_map_jit_flag()
{
-#if TARGET_OS_OSX
- sljit_sw page_size = get_page_alignment() + 1;
+ sljit_sw page_size;
void *ptr;
+ struct utsname name;
static int map_jit_flag = -1;
- /*
- The following code is thread safe because multiple initialization
- sets map_jit_flag to the same value and the code has no side-effects.
- Changing the kernel version witout system restart is (very) unlikely.
- */
- if (map_jit_flag == -1) {
- struct utsname name;
-
+ if (map_jit_flag < 0) {
map_jit_flag = 0;
uname(&name);
- /* Kernel version for 10.14.0 (Mojave) */
+ /* Kernel version for 10.14.0 (Mojave) or later */
if (atoi(name.release) >= 18) {
+ page_size = get_page_alignment() + 1;
/* Only use MAP_JIT if a hardened runtime is used */
+ ptr = mmap(NULL, page_size, PROT_WRITE | PROT_EXEC,
+ MAP_PRIVATE | MAP_ANON, -1, 0);
- ptr = mmap(NULL, page_size, PROT_WRITE | PROT_EXEC, MAP_PRIVATE | MAP_ANON, -1, 0);
-
- if (ptr == MAP_FAILED) {
- map_jit_flag = MAP_JIT;
- } else {
+ if (ptr != MAP_FAILED)
munmap(ptr, page_size);
- }
+ else
+ map_jit_flag = MAP_JIT;
}
}
-
return map_jit_flag;
-#else /* !TARGET_OS_OSX */
- return MAP_JIT;
-#endif /* TARGET_OS_OSX */
}
-
-#endif /* MAP_JIT */
#endif /* MAP_ANON */
-#endif /* __APPLE__ */
+#else /* !SLJIT_CONFIG_X86 */
+#if !(defined SLJIT_CONFIG_ARM && SLJIT_CONFIG_ARM)
+#error Unsupported architecture
+#endif /* SLJIT_CONFIG_ARM */
+#include <pthread.h>
+
+#define SLJIT_MAP_JIT (MAP_JIT)
+#define SLJIT_UPDATE_WX_FLAGS(from, to, enable_exec) \
+ apple_update_wx_flags(enable_exec)
+
+static SLJIT_INLINE void apple_update_wx_flags(sljit_s32 enable_exec)
+{
+ pthread_jit_write_protect_np(enable_exec);
+}
+#endif /* SLJIT_CONFIG_X86 */
+#else /* !TARGET_OS_OSX */
+#define SLJIT_MAP_JIT (MAP_JIT)
+#endif /* TARGET_OS_OSX */
+#endif /* __APPLE__ && MAP_JIT */
+#ifndef SLJIT_UPDATE_WX_FLAGS
+#define SLJIT_UPDATE_WX_FLAGS(from, to, enable_exec)
+#endif /* !SLJIT_UPDATE_WX_FLAGS */
+#ifndef SLJIT_MAP_JIT
+#define SLJIT_MAP_JIT (0)
+#endif /* !SLJIT_MAP_JIT */
static SLJIT_INLINE void* alloc_chunk(sljit_uw size)
{
void *retval;
- const int prot = PROT_READ | PROT_WRITE | PROT_EXEC;
-
-#ifdef MAP_ANON
+ int prot = PROT_READ | PROT_WRITE | PROT_EXEC;
+ int flags = MAP_PRIVATE;
+ int fd = -1;
- int flags = MAP_PRIVATE | MAP_ANON;
-
-#ifdef MAP_JIT
- flags |= get_map_jit_flag();
+#ifdef PROT_MAX
+ prot |= PROT_MAX(prot);
#endif
- retval = mmap(NULL, size, prot, flags, -1, 0);
+#ifdef MAP_ANON
+ flags |= MAP_ANON | SLJIT_MAP_JIT;
#else /* !MAP_ANON */
if (SLJIT_UNLIKELY((dev_zero < 0) && open_dev_zero()))
return NULL;
- retval = mmap(NULL, size, prot, MAP_PRIVATE, dev_zero, 0);
+ fd = dev_zero;
#endif /* MAP_ANON */
+ retval = mmap(NULL, size, prot, flags, fd, 0);
if (retval == MAP_FAILED)
- retval = NULL;
- else {
- if (mprotect(retval, size, prot) < 0) {
- munmap(retval, size);
- retval = NULL;
- }
+ return NULL;
+
+ if (mprotect(retval, size, PROT_READ | PROT_WRITE | PROT_EXEC) < 0) {
+ munmap(retval, size);
+ return NULL;
}
+ SLJIT_UPDATE_WX_FLAGS(retval, (uint8_t *)retval + size, 0);
+
return retval;
}
@@ -189,7 +202,7 @@ static SLJIT_INLINE void free_chunk(void *chunk, sljit_uw size)
munmap(chunk, size);
}
-#endif
+#endif /* windows */
/* --------------------------------------------------------------------- */
/* Common functions */
@@ -261,6 +274,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_malloc_exec(sljit_uw size)
while (free_block) {
if (free_block->size >= size) {
chunk_size = free_block->size;
+ SLJIT_UPDATE_WX_FLAGS(NULL, NULL, 0);
if (chunk_size > size + 64) {
/* We just cut a block from the end of the free block. */
chunk_size -= size;
@@ -326,6 +340,7 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_free_exec(void* ptr)
allocated_size -= header->size;
/* Connecting free blocks together if possible. */
+ SLJIT_UPDATE_WX_FLAGS(NULL, NULL, 0);
/* If header->prev_size == 0, free_block will equal to header.
In this case, free_block->header.size will be > 0. */
@@ -358,6 +373,7 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_free_exec(void* ptr)
}
}
+ SLJIT_UPDATE_WX_FLAGS(NULL, NULL, 1);
SLJIT_ALLOCATOR_UNLOCK();
}
@@ -367,6 +383,7 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_free_unused_memory_exec(void)
struct free_block* next_free_block;
SLJIT_ALLOCATOR_LOCK();
+ SLJIT_UPDATE_WX_FLAGS(NULL, NULL, 0);
free_block = free_blocks;
while (free_block) {
@@ -381,5 +398,6 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_free_unused_memory_exec(void)
}
SLJIT_ASSERT((total_size && free_blocks) || (!total_size && !free_blocks));
+ SLJIT_UPDATE_WX_FLAGS(NULL, NULL, 1);
SLJIT_ALLOCATOR_UNLOCK();
}
diff --git a/thirdparty/pcre2/src/sljit/sljitLir.c b/thirdparty/pcre2/src/sljit/sljitLir.c
index d817c90b3a..a24a99ab87 100644
--- a/thirdparty/pcre2/src/sljit/sljitLir.c
+++ b/thirdparty/pcre2/src/sljit/sljitLir.c
@@ -532,13 +532,21 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_set_put_label(struct sljit_put_label *put_la
put_label->label = label;
}
+#define SLJIT_CURRENT_FLAGS_ALL \
+ (SLJIT_CURRENT_FLAGS_I32_OP | SLJIT_CURRENT_FLAGS_ADD_SUB | SLJIT_CURRENT_FLAGS_COMPARE)
+
SLJIT_API_FUNC_ATTRIBUTE void sljit_set_current_flags(struct sljit_compiler *compiler, sljit_s32 current_flags)
{
SLJIT_UNUSED_ARG(compiler);
SLJIT_UNUSED_ARG(current_flags);
+#if (defined SLJIT_HAS_STATUS_FLAGS_STATE && SLJIT_HAS_STATUS_FLAGS_STATE)
+ compiler->status_flags_state = current_flags;
+#endif
+
#if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS)
- if ((current_flags & ~(VARIABLE_FLAG_MASK | SLJIT_I32_OP | SLJIT_SET_Z)) == 0) {
+ compiler->last_flags = 0;
+ if ((current_flags & ~(VARIABLE_FLAG_MASK | SLJIT_SET_Z | SLJIT_CURRENT_FLAGS_ALL)) == 0) {
compiler->last_flags = GET_FLAG_TYPE(current_flags) | (current_flags & (SLJIT_I32_OP | SLJIT_SET_Z));
}
#endif
@@ -968,7 +976,7 @@ static const char* fop2_names[] = {
};
#define JUMP_POSTFIX(type) \
- ((type & 0xff) <= SLJIT_MUL_NOT_OVERFLOW ? ((type & SLJIT_I32_OP) ? "32" : "") \
+ ((type & 0xff) <= SLJIT_NOT_OVERFLOW ? ((type & SLJIT_I32_OP) ? "32" : "") \
: ((type & 0xff) <= SLJIT_ORDERED_F64 ? ((type & SLJIT_F32_OP) ? ".f32" : ".f64") : ""))
static char* jump_names[] = {
@@ -978,7 +986,6 @@ static char* jump_names[] = {
(char*)"sig_less", (char*)"sig_greater_equal",
(char*)"sig_greater", (char*)"sig_less_equal",
(char*)"overflow", (char*)"not_overflow",
- (char*)"mul_overflow", (char*)"mul_not_overflow",
(char*)"carry", (char*)"",
(char*)"equal", (char*)"not_equal",
(char*)"less", (char*)"greater_equal",
@@ -1278,7 +1285,7 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_op2(struct sljit_compiler
case SLJIT_MUL:
CHECK_ARGUMENT(!(op & SLJIT_SET_Z));
CHECK_ARGUMENT(!(op & VARIABLE_FLAG_MASK)
- || GET_FLAG_TYPE(op) == SLJIT_MUL_OVERFLOW);
+ || GET_FLAG_TYPE(op) == SLJIT_OVERFLOW);
break;
case SLJIT_ADD:
CHECK_ARGUMENT(!(op & VARIABLE_FLAG_MASK)
@@ -1601,9 +1608,7 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_jump(struct sljit_compile
CHECK_ARGUMENT(compiler->last_flags & SLJIT_SET_Z);
else
CHECK_ARGUMENT((type & 0xff) == (compiler->last_flags & 0xff)
- || ((type & 0xff) == SLJIT_NOT_OVERFLOW && (compiler->last_flags & 0xff) == SLJIT_OVERFLOW)
- || ((type & 0xff) == SLJIT_MUL_NOT_OVERFLOW && (compiler->last_flags & 0xff) == SLJIT_MUL_OVERFLOW));
- CHECK_ARGUMENT((type & SLJIT_I32_OP) == (compiler->last_flags & SLJIT_I32_OP));
+ || ((type & 0xff) == SLJIT_NOT_OVERFLOW && (compiler->last_flags & 0xff) == SLJIT_OVERFLOW));
}
#endif
#if (defined SLJIT_VERBOSE && SLJIT_VERBOSE)
@@ -1818,8 +1823,7 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_op_flags(struct sljit_com
CHECK_ARGUMENT(compiler->last_flags & SLJIT_SET_Z);
else
CHECK_ARGUMENT((type & 0xff) == (compiler->last_flags & 0xff)
- || ((type & 0xff) == SLJIT_NOT_OVERFLOW && (compiler->last_flags & 0xff) == SLJIT_OVERFLOW)
- || ((type & 0xff) == SLJIT_MUL_NOT_OVERFLOW && (compiler->last_flags & 0xff) == SLJIT_MUL_OVERFLOW));
+ || ((type & 0xff) == SLJIT_NOT_OVERFLOW && (compiler->last_flags & 0xff) == SLJIT_OVERFLOW));
FUNCTION_CHECK_DST(dst, dstw, 0);
@@ -1858,8 +1862,7 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_cmov(struct sljit_compile
CHECK_ARGUMENT(compiler->last_flags & SLJIT_SET_Z);
else
CHECK_ARGUMENT((type & 0xff) == (compiler->last_flags & 0xff)
- || ((type & 0xff) == SLJIT_NOT_OVERFLOW && (compiler->last_flags & 0xff) == SLJIT_OVERFLOW)
- || ((type & 0xff) == SLJIT_MUL_NOT_OVERFLOW && (compiler->last_flags & 0xff) == SLJIT_MUL_OVERFLOW));
+ || ((type & 0xff) == SLJIT_NOT_OVERFLOW && (compiler->last_flags & 0xff) == SLJIT_OVERFLOW));
#endif
#if (defined SLJIT_VERBOSE && SLJIT_VERBOSE)
if (SLJIT_UNLIKELY(!!compiler->verbose)) {
diff --git a/thirdparty/pcre2/src/sljit/sljitLir.h b/thirdparty/pcre2/src/sljit/sljitLir.h
index 93d2804675..0eb62fc21b 100644
--- a/thirdparty/pcre2/src/sljit/sljitLir.h
+++ b/thirdparty/pcre2/src/sljit/sljitLir.h
@@ -412,6 +412,10 @@ struct sljit_compiler {
/* Executable size for statistical purposes. */
sljit_uw executable_size;
+#if (defined SLJIT_HAS_STATUS_FLAGS_STATE && SLJIT_HAS_STATUS_FLAGS_STATE)
+ sljit_s32 status_flags_state;
+#endif
+
#if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32)
sljit_s32 args;
sljit_s32 locals_offset;
@@ -460,7 +464,7 @@ struct sljit_compiler {
#if (defined SLJIT_CONFIG_S390X && SLJIT_CONFIG_S390X)
/* Need to allocate register save area to make calls. */
- sljit_s32 have_save_area;
+ sljit_s32 mode;
#endif
#if (defined SLJIT_VERBOSE && SLJIT_VERBOSE)
@@ -996,7 +1000,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile
#define SLJIT_SUBC (SLJIT_OP2_BASE + 3)
#define SLJIT_SUBC32 (SLJIT_SUBC | SLJIT_I32_OP)
/* Note: integer mul
- Flags: MUL_OVERFLOW */
+ Flags: OVERFLOW */
#define SLJIT_MUL (SLJIT_OP2_BASE + 4)
#define SLJIT_MUL32 (SLJIT_MUL | SLJIT_I32_OP)
/* Flags: Z */
@@ -1141,89 +1145,69 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_label* sljit_emit_label(struct sljit_compi
/* Integer comparison types. */
#define SLJIT_EQUAL 0
-#define SLJIT_EQUAL32 (SLJIT_EQUAL | SLJIT_I32_OP)
-#define SLJIT_ZERO 0
-#define SLJIT_ZERO32 (SLJIT_ZERO | SLJIT_I32_OP)
+#define SLJIT_ZERO SLJIT_EQUAL
#define SLJIT_NOT_EQUAL 1
-#define SLJIT_NOT_EQUAL32 (SLJIT_NOT_EQUAL | SLJIT_I32_OP)
-#define SLJIT_NOT_ZERO 1
-#define SLJIT_NOT_ZERO32 (SLJIT_NOT_ZERO | SLJIT_I32_OP)
+#define SLJIT_NOT_ZERO SLJIT_NOT_EQUAL
#define SLJIT_LESS 2
-#define SLJIT_LESS32 (SLJIT_LESS | SLJIT_I32_OP)
#define SLJIT_SET_LESS SLJIT_SET(SLJIT_LESS)
#define SLJIT_GREATER_EQUAL 3
-#define SLJIT_GREATER_EQUAL32 (SLJIT_GREATER_EQUAL | SLJIT_I32_OP)
#define SLJIT_SET_GREATER_EQUAL SLJIT_SET(SLJIT_GREATER_EQUAL)
#define SLJIT_GREATER 4
-#define SLJIT_GREATER32 (SLJIT_GREATER | SLJIT_I32_OP)
#define SLJIT_SET_GREATER SLJIT_SET(SLJIT_GREATER)
#define SLJIT_LESS_EQUAL 5
-#define SLJIT_LESS_EQUAL32 (SLJIT_LESS_EQUAL | SLJIT_I32_OP)
#define SLJIT_SET_LESS_EQUAL SLJIT_SET(SLJIT_LESS_EQUAL)
#define SLJIT_SIG_LESS 6
-#define SLJIT_SIG_LESS32 (SLJIT_SIG_LESS | SLJIT_I32_OP)
#define SLJIT_SET_SIG_LESS SLJIT_SET(SLJIT_SIG_LESS)
#define SLJIT_SIG_GREATER_EQUAL 7
-#define SLJIT_SIG_GREATER_EQUAL32 (SLJIT_SIG_GREATER_EQUAL | SLJIT_I32_OP)
#define SLJIT_SET_SIG_GREATER_EQUAL SLJIT_SET(SLJIT_SIG_GREATER_EQUAL)
#define SLJIT_SIG_GREATER 8
-#define SLJIT_SIG_GREATER32 (SLJIT_SIG_GREATER | SLJIT_I32_OP)
#define SLJIT_SET_SIG_GREATER SLJIT_SET(SLJIT_SIG_GREATER)
#define SLJIT_SIG_LESS_EQUAL 9
-#define SLJIT_SIG_LESS_EQUAL32 (SLJIT_SIG_LESS_EQUAL | SLJIT_I32_OP)
#define SLJIT_SET_SIG_LESS_EQUAL SLJIT_SET(SLJIT_SIG_LESS_EQUAL)
#define SLJIT_OVERFLOW 10
-#define SLJIT_OVERFLOW32 (SLJIT_OVERFLOW | SLJIT_I32_OP)
#define SLJIT_SET_OVERFLOW SLJIT_SET(SLJIT_OVERFLOW)
#define SLJIT_NOT_OVERFLOW 11
-#define SLJIT_NOT_OVERFLOW32 (SLJIT_NOT_OVERFLOW | SLJIT_I32_OP)
-
-#define SLJIT_MUL_OVERFLOW 12
-#define SLJIT_MUL_OVERFLOW32 (SLJIT_MUL_OVERFLOW | SLJIT_I32_OP)
-#define SLJIT_SET_MUL_OVERFLOW SLJIT_SET(SLJIT_MUL_OVERFLOW)
-#define SLJIT_MUL_NOT_OVERFLOW 13
-#define SLJIT_MUL_NOT_OVERFLOW32 (SLJIT_MUL_NOT_OVERFLOW | SLJIT_I32_OP)
/* There is no SLJIT_CARRY or SLJIT_NOT_CARRY. */
-#define SLJIT_SET_CARRY SLJIT_SET(14)
+#define SLJIT_SET_CARRY SLJIT_SET(12)
/* Floating point comparison types. */
-#define SLJIT_EQUAL_F64 16
+#define SLJIT_EQUAL_F64 14
#define SLJIT_EQUAL_F32 (SLJIT_EQUAL_F64 | SLJIT_F32_OP)
#define SLJIT_SET_EQUAL_F SLJIT_SET(SLJIT_EQUAL_F64)
-#define SLJIT_NOT_EQUAL_F64 17
+#define SLJIT_NOT_EQUAL_F64 15
#define SLJIT_NOT_EQUAL_F32 (SLJIT_NOT_EQUAL_F64 | SLJIT_F32_OP)
#define SLJIT_SET_NOT_EQUAL_F SLJIT_SET(SLJIT_NOT_EQUAL_F64)
-#define SLJIT_LESS_F64 18
+#define SLJIT_LESS_F64 16
#define SLJIT_LESS_F32 (SLJIT_LESS_F64 | SLJIT_F32_OP)
#define SLJIT_SET_LESS_F SLJIT_SET(SLJIT_LESS_F64)
-#define SLJIT_GREATER_EQUAL_F64 19
+#define SLJIT_GREATER_EQUAL_F64 17
#define SLJIT_GREATER_EQUAL_F32 (SLJIT_GREATER_EQUAL_F64 | SLJIT_F32_OP)
#define SLJIT_SET_GREATER_EQUAL_F SLJIT_SET(SLJIT_GREATER_EQUAL_F64)
-#define SLJIT_GREATER_F64 20
+#define SLJIT_GREATER_F64 18
#define SLJIT_GREATER_F32 (SLJIT_GREATER_F64 | SLJIT_F32_OP)
#define SLJIT_SET_GREATER_F SLJIT_SET(SLJIT_GREATER_F64)
-#define SLJIT_LESS_EQUAL_F64 21
+#define SLJIT_LESS_EQUAL_F64 19
#define SLJIT_LESS_EQUAL_F32 (SLJIT_LESS_EQUAL_F64 | SLJIT_F32_OP)
#define SLJIT_SET_LESS_EQUAL_F SLJIT_SET(SLJIT_LESS_EQUAL_F64)
-#define SLJIT_UNORDERED_F64 22
+#define SLJIT_UNORDERED_F64 20
#define SLJIT_UNORDERED_F32 (SLJIT_UNORDERED_F64 | SLJIT_F32_OP)
#define SLJIT_SET_UNORDERED_F SLJIT_SET(SLJIT_UNORDERED_F64)
-#define SLJIT_ORDERED_F64 23
+#define SLJIT_ORDERED_F64 21
#define SLJIT_ORDERED_F32 (SLJIT_ORDERED_F64 | SLJIT_F32_OP)
#define SLJIT_SET_ORDERED_F SLJIT_SET(SLJIT_ORDERED_F64)
/* Unconditional jump types. */
-#define SLJIT_JUMP 24
+#define SLJIT_JUMP 22
/* Fast calling method. See sljit_emit_fast_enter / SLJIT_FAST_RETURN. */
-#define SLJIT_FAST_CALL 25
+#define SLJIT_FAST_CALL 23
/* Called function must be declared with the SLJIT_FUNC attribute. */
-#define SLJIT_CALL 26
+#define SLJIT_CALL 24
/* Called function must be declared with cdecl attribute.
This is the default attribute for C functions. */
-#define SLJIT_CALL_CDECL 27
+#define SLJIT_CALL_CDECL 25
/* The target can be changed during runtime (see: sljit_set_jump_addr). */
#define SLJIT_REWRITABLE_JUMP 0x1000
@@ -1534,8 +1518,22 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_get_float_register_index(sljit_s32 reg)
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_custom(struct sljit_compiler *compiler,
void *instruction, sljit_s32 size);
-/* Define the currently available CPU status flags. It is usually used after an
- sljit_emit_op_custom call to define which flags are set. */
+/* Flags were set by a 32 bit operation. */
+#define SLJIT_CURRENT_FLAGS_I32_OP SLJIT_I32_OP
+
+/* Flags were set by an ADD, ADDC, SUB, SUBC, or NEG operation. */
+#define SLJIT_CURRENT_FLAGS_ADD_SUB 0x01
+
+/* Flags were set by a SUB with unused destination.
+ Must be combined with SLJIT_CURRENT_FLAGS_ADD_SUB. */
+#define SLJIT_CURRENT_FLAGS_COMPARE 0x02
+
+/* Define the currently available CPU status flags. It is usually used after
+ an sljit_emit_label or sljit_emit_op_custom operations to define which CPU
+ status flags are available.
+
+ The current_flags must be a valid combination of SLJIT_SET_* and
+ SLJIT_CURRENT_FLAGS_* constants. */
SLJIT_API_FUNC_ATTRIBUTE void sljit_set_current_flags(struct sljit_compiler *compiler,
sljit_s32 current_flags);
diff --git a/thirdparty/pcre2/src/sljit/sljitNativeARM_32.c b/thirdparty/pcre2/src/sljit/sljitNativeARM_32.c
index ae8479f031..74cf55fcd2 100644
--- a/thirdparty/pcre2/src/sljit/sljitNativeARM_32.c
+++ b/thirdparty/pcre2/src/sljit/sljitNativeARM_32.c
@@ -1197,6 +1197,8 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl
case SLJIT_ADD:
SLJIT_ASSERT(!(flags & INV_IMM));
+ compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB;
+
if ((flags & (UNUSED_RETURN | SET_FLAGS)) == (UNUSED_RETURN | SET_FLAGS) && !(flags & ARGS_SWAPPED))
return push_inst(compiler, CMN | SET_FLAGS | RN(src1) | ((src2 & SRC2_IMM) ? src2 : RM(src2)));
return push_inst(compiler, ADD | (flags & SET_FLAGS) | RD(dst) | RN(src1) | ((src2 & SRC2_IMM) ? src2 : RM(src2)));
@@ -1207,6 +1209,8 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl
case SLJIT_SUB:
SLJIT_ASSERT(!(flags & INV_IMM));
+ compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB;
+
if ((flags & (UNUSED_RETURN | SET_FLAGS)) == (UNUSED_RETURN | SET_FLAGS) && !(flags & ARGS_SWAPPED))
return push_inst(compiler, CMP | SET_FLAGS | RN(src1) | ((src2 & SRC2_IMM) ? src2 : RM(src2)));
return push_inst(compiler, (!(flags & ARGS_SWAPPED) ? SUB : RSB) | (flags & SET_FLAGS)
@@ -1220,6 +1224,7 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl
case SLJIT_MUL:
SLJIT_ASSERT(!(flags & INV_IMM));
SLJIT_ASSERT(!(src2 & SRC2_IMM));
+ compiler->status_flags_state = 0;
if (!HAS_FLAGS(op))
return push_inst(compiler, MUL | (reg_map[dst] << 16) | (reg_map[src2] << 8) | reg_map[src1]);
@@ -2153,16 +2158,14 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fast_enter(struct sljit_compiler *
/* Conditional instructions */
/* --------------------------------------------------------------------- */
-static sljit_uw get_cc(sljit_s32 type)
+static sljit_uw get_cc(struct sljit_compiler *compiler, sljit_s32 type)
{
switch (type) {
case SLJIT_EQUAL:
- case SLJIT_MUL_NOT_OVERFLOW:
case SLJIT_EQUAL_F64:
return 0x00000000;
case SLJIT_NOT_EQUAL:
- case SLJIT_MUL_OVERFLOW:
case SLJIT_NOT_EQUAL_F64:
return 0x10000000;
@@ -2195,10 +2198,16 @@ static sljit_uw get_cc(sljit_s32 type)
return 0xd0000000;
case SLJIT_OVERFLOW:
+ if (!(compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD_SUB))
+ return 0x10000000;
+
case SLJIT_UNORDERED_F64:
return 0x60000000;
case SLJIT_NOT_OVERFLOW:
+ if (!(compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD_SUB))
+ return 0x00000000;
+
case SLJIT_ORDERED_F64:
return 0x70000000;
@@ -2242,7 +2251,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compile
if (type >= SLJIT_FAST_CALL)
PTR_FAIL_IF(prepare_blx(compiler));
PTR_FAIL_IF(push_inst_with_unique_literal(compiler, ((EMIT_DATA_TRANSFER(WORD_SIZE | LOAD_DATA, 1,
- type <= SLJIT_JUMP ? TMP_PC : TMP_REG1, TMP_PC, 0)) & ~COND_MASK) | get_cc(type), 0));
+ type <= SLJIT_JUMP ? TMP_PC : TMP_REG1, TMP_PC, 0)) & ~COND_MASK) | get_cc(compiler, type), 0));
if (jump->flags & SLJIT_REWRITABLE_JUMP) {
jump->addr = compiler->size;
@@ -2260,7 +2269,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compile
if (type >= SLJIT_FAST_CALL)
jump->flags |= IS_BL;
PTR_FAIL_IF(emit_imm(compiler, TMP_REG1, 0));
- PTR_FAIL_IF(push_inst(compiler, (((type <= SLJIT_JUMP ? BX : BLX) | RM(TMP_REG1)) & ~COND_MASK) | get_cc(type)));
+ PTR_FAIL_IF(push_inst(compiler, (((type <= SLJIT_JUMP ? BX : BLX) | RM(TMP_REG1)) & ~COND_MASK) | get_cc(compiler, type)));
jump->addr = compiler->size;
#endif
return jump;
@@ -2589,7 +2598,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co
ADJUST_LOCAL_OFFSET(dst, dstw);
op = GET_OPCODE(op);
- cc = get_cc(type & 0xff);
+ cc = get_cc(compiler, type & 0xff);
dst_reg = FAST_IS_REG(dst) ? dst : TMP_REG1;
if (op < SLJIT_ADD) {
@@ -2629,7 +2638,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_cmov(struct sljit_compiler *compil
dst_reg &= ~SLJIT_I32_OP;
- cc = get_cc(type & 0xff);
+ cc = get_cc(compiler, type & 0xff);
if (SLJIT_UNLIKELY(src & SLJIT_IMM)) {
tmp = get_imm(srcw);
diff --git a/thirdparty/pcre2/src/sljit/sljitNativeARM_64.c b/thirdparty/pcre2/src/sljit/sljitNativeARM_64.c
index 52267e7df7..3f0f5fcc30 100644
--- a/thirdparty/pcre2/src/sljit/sljitNativeARM_64.c
+++ b/thirdparty/pcre2/src/sljit/sljitNativeARM_64.c
@@ -644,6 +644,7 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s
imm = -imm;
/* Fall through. */
case SLJIT_ADD:
+ compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB;
if (imm == 0) {
CHECK_FLAGS(1 << 29);
return push_inst(compiler, ((op == SLJIT_ADD ? ADDI : SUBI) ^ inv_bits) | RD(dst) | RN(reg));
@@ -781,6 +782,7 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s
break; /* Set flags. */
case SLJIT_NEG:
SLJIT_ASSERT(arg1 == TMP_REG1);
+ compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB;
if (flags & SET_FLAGS)
inv_bits |= 1 << 29;
return push_inst(compiler, (SUB ^ inv_bits) | RD(dst) | RN(TMP_ZERO) | RM(arg2));
@@ -789,17 +791,20 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s
return push_inst(compiler, (CLZ ^ inv_bits) | RD(dst) | RN(arg2));
case SLJIT_ADD:
CHECK_FLAGS(1 << 29);
+ compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB;
return push_inst(compiler, (ADD ^ inv_bits) | RD(dst) | RN(arg1) | RM(arg2));
case SLJIT_ADDC:
CHECK_FLAGS(1 << 29);
return push_inst(compiler, (ADC ^ inv_bits) | RD(dst) | RN(arg1) | RM(arg2));
case SLJIT_SUB:
CHECK_FLAGS(1 << 29);
+ compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB;
return push_inst(compiler, (SUB ^ inv_bits) | RD(dst) | RN(arg1) | RM(arg2));
case SLJIT_SUBC:
CHECK_FLAGS(1 << 29);
return push_inst(compiler, (SBC ^ inv_bits) | RD(dst) | RN(arg1) | RM(arg2));
case SLJIT_MUL:
+ compiler->status_flags_state = 0;
if (!(flags & SET_FLAGS))
return push_inst(compiler, (MADD ^ inv_bits) | RD(dst) | RN(arg1) | RM(arg2) | RT2(TMP_ZERO));
if (flags & INT_OP) {
@@ -1600,16 +1605,14 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fast_enter(struct sljit_compiler *
/* Conditional instructions */
/* --------------------------------------------------------------------- */
-static sljit_uw get_cc(sljit_s32 type)
+static sljit_uw get_cc(struct sljit_compiler *compiler, sljit_s32 type)
{
switch (type) {
case SLJIT_EQUAL:
- case SLJIT_MUL_NOT_OVERFLOW:
case SLJIT_EQUAL_F64:
return 0x1;
case SLJIT_NOT_EQUAL:
- case SLJIT_MUL_OVERFLOW:
case SLJIT_NOT_EQUAL_F64:
return 0x0;
@@ -1642,10 +1645,16 @@ static sljit_uw get_cc(sljit_s32 type)
return 0xc;
case SLJIT_OVERFLOW:
+ if (!(compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD_SUB))
+ return 0x0;
+
case SLJIT_UNORDERED_F64:
return 0x7;
case SLJIT_NOT_OVERFLOW:
+ if (!(compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD_SUB))
+ return 0x1;
+
case SLJIT_ORDERED_F64:
return 0x6;
@@ -1685,7 +1694,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compile
if (type < SLJIT_JUMP) {
jump->flags |= IS_COND;
- PTR_FAIL_IF(push_inst(compiler, B_CC | (6 << 5) | get_cc(type)));
+ PTR_FAIL_IF(push_inst(compiler, B_CC | (6 << 5) | get_cc(compiler, type)));
}
else if (type >= SLJIT_FAST_CALL)
jump->flags |= IS_BL;
@@ -1799,7 +1808,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co
CHECK(check_sljit_emit_op_flags(compiler, op, dst, dstw, type));
ADJUST_LOCAL_OFFSET(dst, dstw);
- cc = get_cc(type & 0xff);
+ cc = get_cc(compiler, type & 0xff);
dst_r = FAST_IS_REG(dst) ? dst : TMP_REG1;
if (GET_OPCODE(op) < SLJIT_ADD) {
@@ -1854,7 +1863,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_cmov(struct sljit_compiler *compil
srcw = 0;
}
- cc = get_cc(type & 0xff);
+ cc = get_cc(compiler, type & 0xff);
dst_reg &= ~SLJIT_I32_OP;
return push_inst(compiler, (CSEL ^ inv_bits) | (cc << 12) | RD(dst_reg) | RN(dst_reg) | RM(src));
diff --git a/thirdparty/pcre2/src/sljit/sljitNativeARM_T2_32.c b/thirdparty/pcre2/src/sljit/sljitNativeARM_T2_32.c
index 4624882f42..e35dbe99b3 100644
--- a/thirdparty/pcre2/src/sljit/sljitNativeARM_T2_32.c
+++ b/thirdparty/pcre2/src/sljit/sljitNativeARM_T2_32.c
@@ -610,6 +610,7 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s
Although some clever things could be done here, "NOT IMM" does not worth the efforts. */
break;
case SLJIT_ADD:
+ compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB;
nimm = -(sljit_sw)imm;
if (IS_2_LO_REGS(reg, dst)) {
if (imm <= 0x7)
@@ -643,6 +644,7 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s
break;
case SLJIT_SUB:
/* SUB operation can be replaced by ADD because of the negative carry flag. */
+ compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB;
if (flags & ARG1_IMM) {
if (imm == 0 && IS_2_LO_REGS(reg, dst))
return push_inst16(compiler, RSBSI | RD3(dst) | RN3(reg));
@@ -801,6 +803,7 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s
FAIL_IF(push_inst32(compiler, CLZ | RN4(arg2) | RD4(dst) | RM4(arg2)));
return SLJIT_SUCCESS;
case SLJIT_ADD:
+ compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB;
if (IS_3_LO_REGS(dst, arg1, arg2))
return push_inst16(compiler, ADDS | RD3(dst) | RN3(arg1) | RM3(arg2));
if (dst == arg1 && !(flags & SET_FLAGS))
@@ -811,6 +814,7 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s
return push_inst16(compiler, ADCS | RD3(dst) | RN3(arg2));
return push_inst32(compiler, ADC_W | (flags & SET_FLAGS) | RD4(dst) | RN4(arg1) | RM4(arg2));
case SLJIT_SUB:
+ compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB;
if (flags & UNUSED_RETURN) {
if (IS_2_LO_REGS(arg1, arg2))
return push_inst16(compiler, CMP | RD3(arg1) | RN3(arg2));
@@ -824,6 +828,7 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s
return push_inst16(compiler, SBCS | RD3(dst) | RN3(arg2));
return push_inst32(compiler, SBC_W | (flags & SET_FLAGS) | RD4(dst) | RN4(arg1) | RM4(arg2));
case SLJIT_MUL:
+ compiler->status_flags_state = 0;
if (!(flags & SET_FLAGS))
return push_inst32(compiler, MUL | RD4(dst) | RN4(arg1) | RM4(arg2));
SLJIT_ASSERT(dst != TMP_REG2);
@@ -1760,16 +1765,14 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fast_enter(struct sljit_compiler *
/* Conditional instructions */
/* --------------------------------------------------------------------- */
-static sljit_uw get_cc(sljit_s32 type)
+static sljit_uw get_cc(struct sljit_compiler *compiler, sljit_s32 type)
{
switch (type) {
case SLJIT_EQUAL:
- case SLJIT_MUL_NOT_OVERFLOW:
case SLJIT_EQUAL_F64:
return 0x0;
case SLJIT_NOT_EQUAL:
- case SLJIT_MUL_OVERFLOW:
case SLJIT_NOT_EQUAL_F64:
return 0x1;
@@ -1802,10 +1805,16 @@ static sljit_uw get_cc(sljit_s32 type)
return 0xd;
case SLJIT_OVERFLOW:
+ if (!(compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD_SUB))
+ return 0x1;
+
case SLJIT_UNORDERED_F64:
return 0x6;
case SLJIT_NOT_OVERFLOW:
+ if (!(compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD_SUB))
+ return 0x0;
+
case SLJIT_ORDERED_F64:
return 0x7;
@@ -1847,7 +1856,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compile
PTR_FAIL_IF(emit_imm32_const(compiler, TMP_REG1, 0));
if (type < SLJIT_JUMP) {
jump->flags |= IS_COND;
- cc = get_cc(type);
+ cc = get_cc(compiler, type);
jump->flags |= cc << 8;
PTR_FAIL_IF(push_inst16(compiler, IT | (cc << 4) | 0x8));
}
@@ -2177,7 +2186,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co
ADJUST_LOCAL_OFFSET(dst, dstw);
op = GET_OPCODE(op);
- cc = get_cc(type & 0xff);
+ cc = get_cc(compiler, type & 0xff);
dst_r = FAST_IS_REG(dst) ? dst : TMP_REG1;
if (op < SLJIT_ADD) {
@@ -2229,7 +2238,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_cmov(struct sljit_compiler *compil
dst_reg &= ~SLJIT_I32_OP;
- cc = get_cc(type & 0xff);
+ cc = get_cc(compiler, type & 0xff);
if (!(src & SLJIT_IMM)) {
FAIL_IF(push_inst16(compiler, IT | (cc << 4) | 0x8));
diff --git a/thirdparty/pcre2/src/sljit/sljitNativeMIPS_32.c b/thirdparty/pcre2/src/sljit/sljitNativeMIPS_32.c
index f887ee1311..a90345f1f8 100644
--- a/thirdparty/pcre2/src/sljit/sljitNativeMIPS_32.c
+++ b/thirdparty/pcre2/src/sljit/sljitNativeMIPS_32.c
@@ -367,7 +367,7 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl
case SLJIT_MUL:
SLJIT_ASSERT(!(flags & SRC2_IMM));
- if (GET_FLAG_TYPE(op) != SLJIT_MUL_OVERFLOW) {
+ if (GET_FLAG_TYPE(op) != SLJIT_OVERFLOW) {
#if (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 1)
return push_inst(compiler, MUL | S(src1) | T(src2) | D(dst), DR(dst));
#else /* SLJIT_MIPS_REV < 1 */
diff --git a/thirdparty/pcre2/src/sljit/sljitNativeMIPS_64.c b/thirdparty/pcre2/src/sljit/sljitNativeMIPS_64.c
index 5ab9b7d06b..1f22e49ed9 100644
--- a/thirdparty/pcre2/src/sljit/sljitNativeMIPS_64.c
+++ b/thirdparty/pcre2/src/sljit/sljitNativeMIPS_64.c
@@ -458,7 +458,7 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl
case SLJIT_MUL:
SLJIT_ASSERT(!(flags & SRC2_IMM));
- if (GET_FLAG_TYPE(op) != SLJIT_MUL_OVERFLOW) {
+ if (GET_FLAG_TYPE(op) != SLJIT_OVERFLOW) {
#if (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 6)
return push_inst(compiler, SELECT_OP(DMUL, MUL) | S(src1) | T(src2) | D(dst), DR(dst));
#elif (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 1)
diff --git a/thirdparty/pcre2/src/sljit/sljitNativeMIPS_common.c b/thirdparty/pcre2/src/sljit/sljitNativeMIPS_common.c
index ecf4dac4c8..fd747695a7 100644
--- a/thirdparty/pcre2/src/sljit/sljitNativeMIPS_common.c
+++ b/thirdparty/pcre2/src/sljit/sljitNativeMIPS_common.c
@@ -1377,6 +1377,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile
return emit_op(compiler, op, flags, dst, dstw, TMP_REG1, 0, src, srcw);
case SLJIT_NEG:
+ compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB;
return emit_op(compiler, SLJIT_SUB | GET_ALL_FLAGS(op), flags | IMM_OP, dst, dstw, SLJIT_IMM, 0, src, srcw);
case SLJIT_CLZ:
@@ -1424,13 +1425,16 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile
switch (GET_OPCODE(op)) {
case SLJIT_ADD:
case SLJIT_ADDC:
+ compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB;
return emit_op(compiler, op, flags | CUMULATIVE_OP | IMM_OP, dst, dstw, src1, src1w, src2, src2w);
case SLJIT_SUB:
case SLJIT_SUBC:
+ compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB;
return emit_op(compiler, op, flags | IMM_OP, dst, dstw, src1, src1w, src2, src2w);
case SLJIT_MUL:
+ compiler->status_flags_state = 0;
return emit_op(compiler, op, flags | CUMULATIVE_OP, dst, dstw, src1, src1w, src2, src2w);
case SLJIT_AND:
@@ -1860,7 +1864,6 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compile
case SLJIT_SIG_LESS:
case SLJIT_SIG_GREATER:
case SLJIT_OVERFLOW:
- case SLJIT_MUL_OVERFLOW:
BR_Z(OTHER_FLAG);
break;
case SLJIT_GREATER_EQUAL:
@@ -1868,7 +1871,6 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compile
case SLJIT_SIG_GREATER_EQUAL:
case SLJIT_SIG_LESS_EQUAL:
case SLJIT_NOT_OVERFLOW:
- case SLJIT_MUL_NOT_OVERFLOW:
BR_NZ(OTHER_FLAG);
break;
case SLJIT_NOT_EQUAL_F64:
@@ -2127,8 +2129,12 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co
FAIL_IF(push_inst(compiler, SLTIU | SA(EQUAL_FLAG) | TA(dst_ar) | IMM(1), dst_ar));
src_ar = dst_ar;
break;
- case SLJIT_MUL_OVERFLOW:
- case SLJIT_MUL_NOT_OVERFLOW:
+ case SLJIT_OVERFLOW:
+ case SLJIT_NOT_OVERFLOW:
+ if (compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD_SUB) {
+ src_ar = OTHER_FLAG;
+ break;
+ }
FAIL_IF(push_inst(compiler, SLTIU | SA(OTHER_FLAG) | TA(dst_ar) | IMM(1), dst_ar));
src_ar = dst_ar;
type ^= 0x1; /* Flip type bit for the XORI below. */
@@ -2219,7 +2225,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_cmov(struct sljit_compiler *compil
case SLJIT_SIG_LESS:
case SLJIT_SIG_GREATER:
case SLJIT_OVERFLOW:
- case SLJIT_MUL_OVERFLOW:
ins = MOVN | TA(OTHER_FLAG);
break;
case SLJIT_GREATER_EQUAL:
@@ -2227,7 +2232,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_cmov(struct sljit_compiler *compil
case SLJIT_SIG_GREATER_EQUAL:
case SLJIT_SIG_LESS_EQUAL:
case SLJIT_NOT_OVERFLOW:
- case SLJIT_MUL_NOT_OVERFLOW:
ins = MOVZ | TA(OTHER_FLAG);
break;
case SLJIT_EQUAL_F64:
diff --git a/thirdparty/pcre2/src/sljit/sljitNativePPC_32.c b/thirdparty/pcre2/src/sljit/sljitNativePPC_32.c
index 7d9ec5338f..6ddb5508ec 100644
--- a/thirdparty/pcre2/src/sljit/sljitNativePPC_32.c
+++ b/thirdparty/pcre2/src/sljit/sljitNativePPC_32.c
@@ -119,9 +119,10 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl
SLJIT_ASSERT(src2 == TMP_REG2);
return push_inst(compiler, ADDIC | D(dst) | A(src1) | compiler->imm);
}
+ SLJIT_ASSERT(!(flags & ALT_FORM4));
if (!(flags & ALT_SET_FLAGS))
return push_inst(compiler, ADD | D(dst) | A(src1) | B(src2));
- if (flags & ALT_FORM4)
+ if (flags & ALT_FORM5)
return push_inst(compiler, ADDC | RC(ALT_SET_FLAGS) | D(dst) | A(src1) | B(src2));
return push_inst(compiler, ADD | RC(flags) | D(dst) | A(src1) | B(src2));
@@ -143,24 +144,29 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl
}
if (flags & ALT_FORM2) {
+ if (flags & ALT_FORM3) {
+ FAIL_IF(push_inst(compiler, CMPI | CRD(0) | A(src1) | compiler->imm));
+ if (!(flags & ALT_FORM4))
+ return SLJIT_SUCCESS;
+ return push_inst(compiler, ADDI | D(dst) | A(src1) | (-compiler->imm & 0xffff));
+ }
+ FAIL_IF(push_inst(compiler, CMP | CRD(0) | A(src1) | B(src2)));
+ if (!(flags & ALT_FORM4))
+ return SLJIT_SUCCESS;
+ return push_inst(compiler, SUBF | D(dst) | A(src2) | B(src1));
+ }
+
+ if (flags & ALT_FORM3) {
/* Setting XER SO is not enough, CR SO is also needed. */
return push_inst(compiler, SUBF | OE(ALT_SET_FLAGS) | RC(ALT_SET_FLAGS) | D(dst) | A(src2) | B(src1));
}
- if (flags & ALT_FORM3) {
+ if (flags & ALT_FORM4) {
/* Flags does not set: BIN_IMM_EXTS unnecessary. */
SLJIT_ASSERT(src2 == TMP_REG2);
return push_inst(compiler, SUBFIC | D(dst) | A(src1) | compiler->imm);
}
- if (flags & ALT_FORM4) {
- if (flags & ALT_FORM5) {
- SLJIT_ASSERT(src2 == TMP_REG2);
- return push_inst(compiler, CMPI | CRD(0) | A(src1) | compiler->imm);
- }
- return push_inst(compiler, CMP | CRD(0) | A(src1) | B(src2));
- }
-
if (!(flags & ALT_SET_FLAGS))
return push_inst(compiler, SUBF | D(dst) | A(src2) | B(src1));
if (flags & ALT_FORM5)
diff --git a/thirdparty/pcre2/src/sljit/sljitNativePPC_64.c b/thirdparty/pcre2/src/sljit/sljitNativePPC_64.c
index 92147d2a5d..cbdf2dd8a2 100644
--- a/thirdparty/pcre2/src/sljit/sljitNativePPC_64.c
+++ b/thirdparty/pcre2/src/sljit/sljitNativePPC_64.c
@@ -252,10 +252,17 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl
BIN_IMM_EXTS();
return push_inst(compiler, ADDIC | D(dst) | A(src1) | compiler->imm);
}
+ if (flags & ALT_FORM4) {
+ if (flags & ALT_FORM5)
+ FAIL_IF(push_inst(compiler, ADDI | D(dst) | A(src1) | compiler->imm));
+ else
+ FAIL_IF(push_inst(compiler, ADD | D(dst) | A(src1) | B(src2)));
+ return push_inst(compiler, CMPI | A(dst) | 0);
+ }
if (!(flags & ALT_SET_FLAGS))
return push_inst(compiler, ADD | D(dst) | A(src1) | B(src2));
BIN_EXTS();
- if (flags & ALT_FORM4)
+ if (flags & ALT_FORM5)
return push_inst(compiler, ADDC | RC(ALT_SET_FLAGS) | D(dst) | A(src1) | B(src2));
return push_inst(compiler, ADD | RC(flags) | D(dst) | A(src1) | B(src2));
@@ -278,6 +285,19 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl
}
if (flags & ALT_FORM2) {
+ if (flags & ALT_FORM3) {
+ FAIL_IF(push_inst(compiler, CMPI | CRD(0 | ((flags & ALT_SIGN_EXT) ? 0 : 1)) | A(src1) | compiler->imm));
+ if (!(flags & ALT_FORM4))
+ return SLJIT_SUCCESS;
+ return push_inst(compiler, ADDI | D(dst) | A(src1) | (-compiler->imm & 0xffff));
+ }
+ FAIL_IF(push_inst(compiler, CMP | CRD(0 | ((flags & ALT_SIGN_EXT) ? 0 : 1)) | A(src1) | B(src2)));
+ if (!(flags & ALT_FORM4))
+ return SLJIT_SUCCESS;
+ return push_inst(compiler, SUBF | D(dst) | A(src2) | B(src1));
+ }
+
+ if (flags & ALT_FORM3) {
if (flags & ALT_SIGN_EXT) {
FAIL_IF(push_inst(compiler, RLDI(TMP_REG1, src1, 32, 31, 1)));
src1 = TMP_REG1;
@@ -291,20 +311,12 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl
return SLJIT_SUCCESS;
}
- if (flags & ALT_FORM3) {
+ if (flags & ALT_FORM4) {
/* Flags does not set: BIN_IMM_EXTS unnecessary. */
SLJIT_ASSERT(src2 == TMP_REG2);
return push_inst(compiler, SUBFIC | D(dst) | A(src1) | compiler->imm);
}
- if (flags & ALT_FORM4) {
- if (flags & ALT_FORM5) {
- SLJIT_ASSERT(src2 == TMP_REG2);
- return push_inst(compiler, CMPI | CRD(0 | ((flags & ALT_SIGN_EXT) ? 0 : 1)) | A(src1) | compiler->imm);
- }
- return push_inst(compiler, CMP | CRD(0 | ((flags & ALT_SIGN_EXT) ? 0 : 1)) | A(src1) | B(src2));
- }
-
if (!(flags & ALT_SET_FLAGS))
return push_inst(compiler, SUBF | D(dst) | A(src2) | B(src1));
BIN_EXTS();
diff --git a/thirdparty/pcre2/src/sljit/sljitNativePPC_common.c b/thirdparty/pcre2/src/sljit/sljitNativePPC_common.c
index d84562ce09..2174dbb07b 100644
--- a/thirdparty/pcre2/src/sljit/sljitNativePPC_common.c
+++ b/thirdparty/pcre2/src/sljit/sljitNativePPC_common.c
@@ -1324,6 +1324,25 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile
((src) & SLJIT_IMM)
#endif
+#if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
+#define TEST_ADD_FORM1(op) \
+ (GET_FLAG_TYPE(op) == SLJIT_OVERFLOW \
+ || (op & (SLJIT_I32_OP | SLJIT_SET_Z | VARIABLE_FLAG_MASK)) == (SLJIT_I32_OP | SLJIT_SET_Z | SLJIT_SET_CARRY))
+#define TEST_SUB_FORM2(op) \
+ ((GET_FLAG_TYPE(op) >= SLJIT_SIG_LESS && GET_FLAG_TYPE(op) <= SLJIT_SIG_LESS_EQUAL) \
+ || (op & (SLJIT_I32_OP | SLJIT_SET_Z | VARIABLE_FLAG_MASK)) == (SLJIT_I32_OP | SLJIT_SET_Z))
+#define TEST_SUB_FORM3(op) \
+ (GET_FLAG_TYPE(op) == SLJIT_OVERFLOW \
+ || (op & (SLJIT_I32_OP | SLJIT_SET_Z)) == (SLJIT_I32_OP | SLJIT_SET_Z))
+#else
+#define TEST_ADD_FORM1(op) \
+ (GET_FLAG_TYPE(op) == SLJIT_OVERFLOW)
+#define TEST_SUB_FORM2(op) \
+ (GET_FLAG_TYPE(op) >= SLJIT_SIG_LESS && GET_FLAG_TYPE(op) <= SLJIT_SIG_LESS_EQUAL)
+#define TEST_SUB_FORM3(op) \
+ (GET_FLAG_TYPE(op) == SLJIT_OVERFLOW)
+#endif
+
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compiler, sljit_s32 op,
sljit_s32 dst, sljit_sw dstw,
sljit_s32 src1, sljit_sw src1w,
@@ -1362,7 +1381,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile
switch (GET_OPCODE(op)) {
case SLJIT_ADD:
- if (GET_FLAG_TYPE(op) == SLJIT_OVERFLOW)
+ if (TEST_ADD_FORM1(op))
return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM1, dst, dstw, src1, src1w, src2, src2w);
if (!HAS_FLAGS(op) && ((src1 | src2) & SLJIT_IMM)) {
@@ -1392,6 +1411,20 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile
return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM2 | ALT_FORM4, dst, dstw, src2, src2w, TMP_REG2, 0);
}
}
+
+#if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
+ if ((op & (SLJIT_I32_OP | SLJIT_SET_Z)) == (SLJIT_I32_OP | SLJIT_SET_Z)) {
+ if (TEST_SL_IMM(src2, src2w)) {
+ compiler->imm = src2w & 0xffff;
+ return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM4 | ALT_FORM5, dst, dstw, src1, src1w, TMP_REG2, 0);
+ }
+ if (TEST_SL_IMM(src1, src1w)) {
+ compiler->imm = src1w & 0xffff;
+ return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM4 | ALT_FORM5, dst, dstw, src2, src2w, TMP_REG2, 0);
+ }
+ return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM4, dst, dstw, src1, src1w, src2, src2w);
+ }
+#endif
if (HAS_FLAGS(op)) {
if (TEST_SL_IMM(src2, src2w)) {
compiler->imm = src2w & 0xffff;
@@ -1402,7 +1435,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile
return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM3, dst, dstw, src2, src2w, TMP_REG2, 0);
}
}
- return emit_op(compiler, SLJIT_ADD, flags | ((GET_FLAG_TYPE(op) == GET_FLAG_TYPE(SLJIT_SET_CARRY)) ? ALT_FORM4 : 0), dst, dstw, src1, src1w, src2, src2w);
+ return emit_op(compiler, SLJIT_ADD, flags | ((GET_FLAG_TYPE(op) == GET_FLAG_TYPE(SLJIT_SET_CARRY)) ? ALT_FORM5 : 0), dst, dstw, src1, src1w, src2, src2w);
case SLJIT_ADDC:
return emit_op(compiler, SLJIT_ADDC, flags, dst, dstw, src1, src1w, src2, src2w);
@@ -1424,18 +1457,36 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile
return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM1 | ALT_FORM3, dst, dstw, src1, src1w, src2, src2w);
}
- if (GET_FLAG_TYPE(op) == SLJIT_OVERFLOW)
+ if (dst == SLJIT_UNUSED && GET_FLAG_TYPE(op) <= SLJIT_SIG_LESS_EQUAL) {
+ if (TEST_SL_IMM(src2, src2w)) {
+ compiler->imm = src2w & 0xffff;
+ return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM2 | ALT_FORM3, dst, dstw, src1, src1w, TMP_REG2, 0);
+ }
return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM2, dst, dstw, src1, src1w, src2, src2w);
+ }
- if (!HAS_FLAGS(op) && ((src1 | src2) & SLJIT_IMM)) {
- if (TEST_SL_IMM(src2, -src2w)) {
- compiler->imm = (-src2w) & 0xffff;
- return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM2, dst, dstw, src1, src1w, TMP_REG2, 0);
- }
- if (TEST_SL_IMM(src1, src1w)) {
- compiler->imm = src1w & 0xffff;
- return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM3, dst, dstw, src2, src2w, TMP_REG2, 0);
+ if (TEST_SUB_FORM2(op)) {
+ if ((src2 & SLJIT_IMM) && src2w >= -SIMM_MAX && src2w <= SIMM_MAX) {
+ compiler->imm = src2w & 0xffff;
+ return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM2 | ALT_FORM3 | ALT_FORM4, dst, dstw, src1, src1w, TMP_REG2, 0);
}
+ return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM2 | ALT_FORM4, dst, dstw, src1, src1w, src2, src2w);
+ }
+
+ if (TEST_SUB_FORM3(op))
+ return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM3, dst, dstw, src1, src1w, src2, src2w);
+
+ if (TEST_SL_IMM(src2, -src2w)) {
+ compiler->imm = (-src2w) & 0xffff;
+ return emit_op(compiler, SLJIT_ADD, flags | (!HAS_FLAGS(op) ? ALT_FORM2 : ALT_FORM3), dst, dstw, src1, src1w, TMP_REG2, 0);
+ }
+
+ if (TEST_SL_IMM(src1, src1w) && !(op & SLJIT_SET_Z)) {
+ compiler->imm = src1w & 0xffff;
+ return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM4, dst, dstw, src2, src2w, TMP_REG2, 0);
+ }
+
+ if (!HAS_FLAGS(op)) {
if (TEST_SH_IMM(src2, -src2w)) {
compiler->imm = ((-src2w) >> 16) & 0xffff;
return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM2 | ALT_FORM3, dst, dstw, src1, src1w, TMP_REG2, 0);
@@ -1447,18 +1498,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile
}
}
- if (dst == SLJIT_UNUSED && GET_FLAG_TYPE(op) != GET_FLAG_TYPE(SLJIT_SET_CARRY)) {
- if (TEST_SL_IMM(src2, src2w)) {
- compiler->imm = src2w & 0xffff;
- return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM4 | ALT_FORM5, dst, dstw, src1, src1w, TMP_REG2, 0);
- }
- return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM4, dst, dstw, src1, src1w, src2, src2w);
- }
-
- if (TEST_SL_IMM(src2, -src2w)) {
- compiler->imm = (-src2w) & 0xffff;
- return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM3, dst, dstw, src1, src1w, TMP_REG2, 0);
- }
/* We know ALT_SIGN_EXT is set if it is an SLJIT_I32_OP on 64 bit systems. */
return emit_op(compiler, SLJIT_SUB, flags | ((GET_FLAG_TYPE(op) == GET_FLAG_TYPE(SLJIT_SET_CARRY)) ? ALT_FORM5 : 0), dst, dstw, src1, src1w, src2, src2w);
@@ -1536,6 +1575,10 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile
return SLJIT_SUCCESS;
}
+#undef TEST_ADD_FORM1
+#undef TEST_SUB_FORM2
+#undef TEST_SUB_FORM3
+
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_src(struct sljit_compiler *compiler, sljit_s32 op,
sljit_s32 src, sljit_sw srcw)
{
@@ -1941,11 +1984,9 @@ static sljit_ins get_bo_bi_flags(sljit_s32 type)
return (4 << 21) | ((4 + 1) << 16);
case SLJIT_OVERFLOW:
- case SLJIT_MUL_OVERFLOW:
return (12 << 21) | (3 << 16);
case SLJIT_NOT_OVERFLOW:
- case SLJIT_MUL_NOT_OVERFLOW:
return (4 << 21) | (3 << 16);
case SLJIT_EQUAL_F64:
@@ -2143,12 +2184,10 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co
break;
case SLJIT_OVERFLOW:
- case SLJIT_MUL_OVERFLOW:
cr_bit = 3;
break;
case SLJIT_NOT_OVERFLOW:
- case SLJIT_MUL_NOT_OVERFLOW:
cr_bit = 3;
invert = 1;
break;
diff --git a/thirdparty/pcre2/src/sljit/sljitNativeS390X.c b/thirdparty/pcre2/src/sljit/sljitNativeS390X.c
index a8b65112d4..716491ec72 100644
--- a/thirdparty/pcre2/src/sljit/sljitNativeS390X.c
+++ b/thirdparty/pcre2/src/sljit/sljitNativeS390X.c
@@ -42,10 +42,10 @@ SLJIT_API_FUNC_ATTRIBUTE const char* sljit_get_platform_name(void)
typedef sljit_uw sljit_ins;
/* Instruction tags (most significant halfword). */
-const sljit_ins sljit_ins_const = (sljit_ins)1 << 48;
+static const sljit_ins sljit_ins_const = (sljit_ins)1 << 48;
static const sljit_u8 reg_map[SLJIT_NUMBER_OF_REGISTERS + 4] = {
- 14, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 0, 1
+ 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 0, 1
};
/* there are also a[2-15] available, but they are slower to access and
@@ -66,22 +66,22 @@ typedef sljit_uw sljit_gpr;
* will be retired ASAP (TODO: carenas)
*/
-const sljit_gpr r0 = 0; /* reg_map[SLJIT_NUMBER_OF_REGISTERS + 2]: 0 in address calculations; reserved */
-const sljit_gpr r1 = 1; /* reg_map[SLJIT_NUMBER_OF_REGISTERS + 3]: reserved */
-const sljit_gpr r2 = 2; /* reg_map[1]: 1st argument */
-const sljit_gpr r3 = 3; /* reg_map[2]: 2nd argument */
-const sljit_gpr r4 = 4; /* reg_map[3]: 3rd argument */
-const sljit_gpr r5 = 5; /* reg_map[4]: 4th argument */
-const sljit_gpr r6 = 6; /* reg_map[5]: 5th argument; 1st saved register */
-const sljit_gpr r7 = 7; /* reg_map[6] */
-const sljit_gpr r8 = 8; /* reg_map[7] */
-const sljit_gpr r9 = 9; /* reg_map[8] */
-const sljit_gpr r10 = 10; /* reg_map[9] */
-const sljit_gpr r11 = 11; /* reg_map[10] */
-const sljit_gpr r12 = 12; /* reg_map[11]: GOT */
-const sljit_gpr r13 = 13; /* reg_map[12]: Literal Pool pointer */
-const sljit_gpr r14 = 14; /* reg_map[0]: return address and flag register */
-const sljit_gpr r15 = 15; /* reg_map[SLJIT_NUMBER_OF_REGISTERS + 1]: stack pointer */
+static const sljit_gpr r0 = 0; /* reg_map[SLJIT_NUMBER_OF_REGISTERS + 2]: 0 in address calculations; reserved */
+static const sljit_gpr r1 = 1; /* reg_map[SLJIT_NUMBER_OF_REGISTERS + 3]: reserved */
+static const sljit_gpr r2 = 2; /* reg_map[1]: 1st argument */
+static const sljit_gpr r3 = 3; /* reg_map[2]: 2nd argument */
+static const sljit_gpr r4 = 4; /* reg_map[3]: 3rd argument */
+static const sljit_gpr r5 = 5; /* reg_map[4]: 4th argument */
+static const sljit_gpr r6 = 6; /* reg_map[5]: 5th argument; 1st saved register */
+static const sljit_gpr r7 = 7; /* reg_map[6] */
+static const sljit_gpr r8 = 8; /* reg_map[7] */
+static const sljit_gpr r9 = 9; /* reg_map[8] */
+static const sljit_gpr r10 = 10; /* reg_map[9] */
+static const sljit_gpr r11 = 11; /* reg_map[10] */
+static const sljit_gpr r12 = 12; /* reg_map[11]: GOT */
+static const sljit_gpr r13 = 13; /* reg_map[12]: Literal Pool pointer */
+static const sljit_gpr r14 = 14; /* reg_map[0]: return address and flag register */
+static const sljit_gpr r15 = 15; /* reg_map[SLJIT_NUMBER_OF_REGISTERS + 1]: stack pointer */
/* WARNING: r12 and r13 shouldn't be used as per ABI recommendation */
/* TODO(carenas): r12 might conflict in PIC code, reserve? */
@@ -100,8 +100,8 @@ const sljit_gpr r15 = 15; /* reg_map[SLJIT_NUMBER_OF_REGISTERS + 1]: stack point
/* Link registers. The normal link register is r14, but since
we use that for flags we need to use r0 instead to do fast
calls so that flags are preserved. */
-const sljit_gpr link_r = 14; /* r14 */
-const sljit_gpr fast_link_r = 0; /* r0 */
+static const sljit_gpr link_r = 14; /* r14 */
+static const sljit_gpr fast_link_r = 0; /* r0 */
/* Flag register layout:
@@ -110,7 +110,7 @@ const sljit_gpr fast_link_r = 0; /* r0 */
| ZERO | 0 | 0 | C C |///////|
+---------------+---+---+-------+-------+
*/
-const sljit_gpr flag_r = 14; /* r14 */
+static const sljit_gpr flag_r = 14; /* r14 */
struct sljit_s390x_const {
struct sljit_const const_; /* must be first */
@@ -120,8 +120,7 @@ struct sljit_s390x_const {
/* Convert SLJIT register to hardware register. */
static SLJIT_INLINE sljit_gpr gpr(sljit_s32 r)
{
- SLJIT_ASSERT(r != SLJIT_UNUSED);
- SLJIT_ASSERT(r < (sljit_s32)(sizeof(reg_map) / sizeof(reg_map[0])));
+ SLJIT_ASSERT(r >= 0 && r < (sljit_s32)(sizeof(reg_map) / sizeof(reg_map[0])));
return reg_map[r];
}
@@ -172,51 +171,93 @@ static sljit_s32 encode_inst(void **ptr, sljit_ins ins)
return SLJIT_SUCCESS;
}
+#define SLJIT_ADD_SUB_NO_COMPARE(status_flags_state) \
+ (((status_flags_state) & (SLJIT_CURRENT_FLAGS_ADD_SUB | SLJIT_CURRENT_FLAGS_COMPARE)) == SLJIT_CURRENT_FLAGS_ADD_SUB)
+
/* Map the given type to a 4-bit condition code mask. */
-static SLJIT_INLINE sljit_u8 get_cc(sljit_s32 type) {
- const sljit_u8 eq = 1 << 3; /* equal {,to zero} */
- const sljit_u8 lt = 1 << 2; /* less than {,zero} */
- const sljit_u8 gt = 1 << 1; /* greater than {,zero} */
- const sljit_u8 ov = 1 << 0; /* {overflow,NaN} */
+static SLJIT_INLINE sljit_u8 get_cc(struct sljit_compiler *compiler, sljit_s32 type) {
+ const sljit_u8 cc0 = 1 << 3; /* equal {,to zero} */
+ const sljit_u8 cc1 = 1 << 2; /* less than {,zero} */
+ const sljit_u8 cc2 = 1 << 1; /* greater than {,zero} */
+ const sljit_u8 cc3 = 1 << 0; /* {overflow,NaN} */
switch (type) {
case SLJIT_EQUAL:
+ if (SLJIT_ADD_SUB_NO_COMPARE(compiler->status_flags_state)) {
+ sljit_s32 type = GET_FLAG_TYPE(compiler->status_flags_state);
+ if (type >= SLJIT_SIG_LESS && type <= SLJIT_SIG_LESS_EQUAL)
+ return cc0;
+ if (type == SLJIT_OVERFLOW)
+ return (cc0 | cc3);
+ return (cc0 | cc2);
+ }
+
case SLJIT_EQUAL_F64:
- return eq;
+ return cc0;
case SLJIT_NOT_EQUAL:
+ if (SLJIT_ADD_SUB_NO_COMPARE(compiler->status_flags_state)) {
+ sljit_s32 type = GET_FLAG_TYPE(compiler->status_flags_state);
+ if (type >= SLJIT_SIG_LESS && type <= SLJIT_SIG_LESS_EQUAL)
+ return (cc1 | cc2 | cc3);
+ if (type == SLJIT_OVERFLOW)
+ return (cc1 | cc2);
+ return (cc1 | cc3);
+ }
+
case SLJIT_NOT_EQUAL_F64:
- return ~eq;
+ return (cc1 | cc2 | cc3);
case SLJIT_LESS:
+ return cc1;
+
+ case SLJIT_GREATER_EQUAL:
+ return (cc0 | cc2 | cc3);
+
+ case SLJIT_GREATER:
+ if (compiler->status_flags_state & SLJIT_CURRENT_FLAGS_COMPARE)
+ return cc2;
+ return cc3;
+
+ case SLJIT_LESS_EQUAL:
+ if (compiler->status_flags_state & SLJIT_CURRENT_FLAGS_COMPARE)
+ return (cc0 | cc1);
+ return (cc0 | cc1 | cc2);
+
case SLJIT_SIG_LESS:
case SLJIT_LESS_F64:
- return lt;
+ return cc1;
- case SLJIT_LESS_EQUAL:
case SLJIT_SIG_LESS_EQUAL:
case SLJIT_LESS_EQUAL_F64:
- return (lt | eq);
+ return (cc0 | cc1);
- case SLJIT_GREATER:
case SLJIT_SIG_GREATER:
- case SLJIT_GREATER_F64:
- return gt;
+ /* Overflow is considered greater, see SLJIT_SUB. */
+ return cc2 | cc3;
- case SLJIT_GREATER_EQUAL:
case SLJIT_SIG_GREATER_EQUAL:
- case SLJIT_GREATER_EQUAL_F64:
- return (gt | eq);
+ return (cc0 | cc2 | cc3);
case SLJIT_OVERFLOW:
- case SLJIT_MUL_OVERFLOW:
+ if (compiler->status_flags_state & SLJIT_SET_Z)
+ return (cc2 | cc3);
+
case SLJIT_UNORDERED_F64:
- return ov;
+ return cc3;
case SLJIT_NOT_OVERFLOW:
- case SLJIT_MUL_NOT_OVERFLOW:
+ if (compiler->status_flags_state & SLJIT_SET_Z)
+ return (cc0 | cc1);
+
case SLJIT_ORDERED_F64:
- return ~ov;
+ return (cc0 | cc1 | cc2);
+
+ case SLJIT_GREATER_F64:
+ return cc2;
+
+ case SLJIT_GREATER_EQUAL_F64:
+ return (cc0 | cc2);
}
SLJIT_UNREACHABLE();
@@ -346,19 +387,20 @@ HAVE_FACILITY(have_misc2, MISCELLANEOUS_INSTRUCTION_EXTENSIONS_2_FACILITY)
#define is_u32(d) (0 <= (d) && (d) <= 0xffffffffL)
#define CHECK_SIGNED(v, bitlen) \
- ((v) == (((v) << (sizeof(v) * 8 - bitlen)) >> (sizeof(v) * 8 - bitlen)))
+ ((v) >= -(1 << ((bitlen) - 1)) && (v) < (1 << ((bitlen) - 1)))
+#define is_s8(d) CHECK_SIGNED((d), 8)
#define is_s16(d) CHECK_SIGNED((d), 16)
#define is_s20(d) CHECK_SIGNED((d), 20)
-#define is_s32(d) CHECK_SIGNED((d), 32)
+#define is_s32(d) ((d) == (sljit_s32)(d))
-static SLJIT_INLINE sljit_uw disp_s20(sljit_s32 d)
+static SLJIT_INLINE sljit_ins disp_s20(sljit_s32 d)
{
+ SLJIT_ASSERT(is_s20(d));
+
sljit_uw dh = (d >> 12) & 0xff;
sljit_uw dl = (d << 8) & 0xfff00;
-
- SLJIT_ASSERT(is_s20(d));
- return dh | dl;
+ return (dh | dl) << 8;
}
/* TODO(carenas): variadic macro is not strictly needed */
@@ -372,12 +414,6 @@ SLJIT_S390X_INSTRUCTION(name, sljit_gpr dst, sljit_gpr src) \
return (pattern) | ((dst & 0xf) << 4) | (src & 0xf); \
}
-/* ADD */
-SLJIT_S390X_RR(ar, 0x1a00)
-
-/* ADD LOGICAL */
-SLJIT_S390X_RR(alr, 0x1e00)
-
/* AND */
SLJIT_S390X_RR(nr, 0x1400)
@@ -387,12 +423,6 @@ SLJIT_S390X_RR(basr, 0x0d00)
/* BRANCH ON CONDITION */
SLJIT_S390X_RR(bcr, 0x0700) /* TODO(mundaym): type for mask? */
-/* COMPARE */
-SLJIT_S390X_RR(cr, 0x1900)
-
-/* COMPARE LOGICAL */
-SLJIT_S390X_RR(clr, 0x1500)
-
/* DIVIDE */
SLJIT_S390X_RR(dr, 0x1d00)
@@ -408,12 +438,6 @@ SLJIT_S390X_RR(lcr, 0x1300)
/* OR */
SLJIT_S390X_RR(or, 0x1600)
-/* SUBTRACT */
-SLJIT_S390X_RR(sr, 0x1b00)
-
-/* SUBTRACT LOGICAL */
-SLJIT_S390X_RR(slr, 0x1f00)
-
#undef SLJIT_S390X_RR
/* RRE form instructions */
@@ -423,25 +447,9 @@ SLJIT_S390X_INSTRUCTION(name, sljit_gpr dst, sljit_gpr src) \
return (pattern) | ((dst & 0xf) << 4) | (src & 0xf); \
}
-/* ADD */
-SLJIT_S390X_RRE(agr, 0xb9080000)
-
-/* ADD LOGICAL */
-SLJIT_S390X_RRE(algr, 0xb90a0000)
-
-/* ADD LOGICAL WITH CARRY */
-SLJIT_S390X_RRE(alcr, 0xb9980000)
-SLJIT_S390X_RRE(alcgr, 0xb9880000)
-
/* AND */
SLJIT_S390X_RRE(ngr, 0xb9800000)
-/* COMPARE */
-SLJIT_S390X_RRE(cgr, 0xb9200000)
-
-/* COMPARE LOGICAL */
-SLJIT_S390X_RRE(clgr, 0xb9210000)
-
/* DIVIDE LOGICAL */
SLJIT_S390X_RRE(dlr, 0xb9970000)
SLJIT_S390X_RRE(dlgr, 0xb9870000)
@@ -482,8 +490,6 @@ SLJIT_S390X_RRE(llghr, 0xb9850000)
SLJIT_S390X_RRE(mlgr, 0xb9860000)
/* MULTIPLY SINGLE */
-SLJIT_S390X_RRE(msr, 0xb2520000)
-SLJIT_S390X_RRE(msgr, 0xb90c0000)
SLJIT_S390X_RRE(msgfr, 0xb91c0000)
/* OR */
@@ -492,13 +498,6 @@ SLJIT_S390X_RRE(ogr, 0xb9810000)
/* SUBTRACT */
SLJIT_S390X_RRE(sgr, 0xb9090000)
-/* SUBTRACT LOGICAL */
-SLJIT_S390X_RRE(slgr, 0xb90b0000)
-
-/* SUBTRACT LOGICAL WITH BORROW */
-SLJIT_S390X_RRE(slbr, 0xb9990000)
-SLJIT_S390X_RRE(slbgr, 0xb9890000)
-
#undef SLJIT_S390X_RRE
/* RI-a form instructions */
@@ -509,13 +508,8 @@ SLJIT_S390X_INSTRUCTION(name, sljit_gpr reg, imm_type imm) \
}
/* ADD HALFWORD IMMEDIATE */
-SLJIT_S390X_RIA(ahi, 0xa70a0000, sljit_s16)
SLJIT_S390X_RIA(aghi, 0xa70b0000, sljit_s16)
-/* COMPARE HALFWORD IMMEDIATE */
-SLJIT_S390X_RIA(chi, 0xa70e0000, sljit_s16)
-SLJIT_S390X_RIA(cghi, 0xa70f0000, sljit_s16)
-
/* LOAD HALFWORD IMMEDIATE */
SLJIT_S390X_RIA(lhi, 0xa7080000, sljit_s16)
SLJIT_S390X_RIA(lghi, 0xa7090000, sljit_s16)
@@ -533,9 +527,6 @@ SLJIT_S390X_RIA(mghi, 0xa70d0000, sljit_s16)
/* OR IMMEDIATE */
SLJIT_S390X_RIA(oilh, 0xa50a0000, sljit_u16)
-/* TEST UNDER MASK */
-SLJIT_S390X_RIA(tmlh, 0xa7000000, sljit_u16)
-
#undef SLJIT_S390X_RIA
/* RIL-a form instructions (requires extended immediate facility) */
@@ -547,30 +538,13 @@ SLJIT_S390X_INSTRUCTION(name, sljit_gpr reg, imm_type imm) \
}
/* ADD IMMEDIATE */
-SLJIT_S390X_RILA(afi, 0xc20900000000, sljit_s32)
SLJIT_S390X_RILA(agfi, 0xc20800000000, sljit_s32)
/* ADD IMMEDIATE HIGH */
SLJIT_S390X_RILA(aih, 0xcc0800000000, sljit_s32) /* TODO(mundaym): high-word facility? */
-/* ADD LOGICAL IMMEDIATE */
-SLJIT_S390X_RILA(alfi, 0xc20b00000000, sljit_u32)
-SLJIT_S390X_RILA(algfi, 0xc20a00000000, sljit_u32)
-
/* AND IMMEDIATE */
SLJIT_S390X_RILA(nihf, 0xc00a00000000, sljit_u32)
-SLJIT_S390X_RILA(nilf, 0xc00b00000000, sljit_u32)
-
-/* COMPARE IMMEDIATE */
-SLJIT_S390X_RILA(cfi, 0xc20d00000000, sljit_s32)
-SLJIT_S390X_RILA(cgfi, 0xc20c00000000, sljit_s32)
-
-/* COMPARE IMMEDIATE HIGH */
-SLJIT_S390X_RILA(cih, 0xcc0d00000000, sljit_s32) /* TODO(mundaym): high-word facility? */
-
-/* COMPARE LOGICAL IMMEDIATE */
-SLJIT_S390X_RILA(clfi, 0xc20f00000000, sljit_u32)
-SLJIT_S390X_RILA(clgfi, 0xc20e00000000, sljit_u32)
/* EXCLUSIVE OR IMMEDIATE */
SLJIT_S390X_RILA(xilf, 0xc00700000000, sljit_u32)
@@ -586,8 +560,8 @@ SLJIT_S390X_RILA(lgfi, 0xc00100000000, sljit_s32)
SLJIT_S390X_RILA(llihf, 0xc00e00000000, sljit_u32)
SLJIT_S390X_RILA(llilf, 0xc00f00000000, sljit_u32)
-/* OR IMMEDIATE */
-SLJIT_S390X_RILA(oilf, 0xc00d00000000, sljit_u32)
+/* SUBTRACT LOGICAL IMMEDIATE */
+SLJIT_S390X_RILA(slfi, 0xc20500000000, sljit_u32)
#undef SLJIT_S390X_RILA
@@ -606,18 +580,6 @@ SLJIT_S390X_INSTRUCTION(name, sljit_gpr r, sljit_u16 d, sljit_gpr x, sljit_gpr b
return (pattern) | ri | xi | bi | di; \
}
-/* ADD */
-SLJIT_S390X_RXA(a, 0x5a000000)
-
-/* ADD LOGICAL */
-SLJIT_S390X_RXA(al, 0x5e000000)
-
-/* AND */
-SLJIT_S390X_RXA(n, 0x54000000)
-
-/* EXCLUSIVE OR */
-SLJIT_S390X_RXA(x, 0x57000000)
-
/* LOAD */
SLJIT_S390X_RXA(l, 0x58000000)
@@ -630,9 +592,6 @@ SLJIT_S390X_RXA(lh, 0x48000000)
/* MULTIPLY SINGLE */
SLJIT_S390X_RXA(ms, 0x71000000)
-/* OR */
-SLJIT_S390X_RXA(o, 0x56000000)
-
/* STORE */
SLJIT_S390X_RXA(st, 0x50000000)
@@ -642,12 +601,6 @@ SLJIT_S390X_RXA(stc, 0x42000000)
/* STORE HALFWORD */
SLJIT_S390X_RXA(sth, 0x40000000)
-/* SUBTRACT */
-SLJIT_S390X_RXA(s, 0x5b000000)
-
-/* SUBTRACT LOGICAL */
-SLJIT_S390X_RXA(sl, 0x5f000000)
-
#undef SLJIT_S390X_RXA
/* RXY-a instructions */
@@ -660,31 +613,11 @@ SLJIT_S390X_INSTRUCTION(name, sljit_gpr r, sljit_s32 d, sljit_gpr x, sljit_gpr b
ri = (sljit_ins)(r & 0xf) << 36; \
xi = (sljit_ins)(x & 0xf) << 32; \
bi = (sljit_ins)(b & 0xf) << 28; \
- di = (sljit_ins)disp_s20(d) << 8; \
+ di = disp_s20(d); \
\
return (pattern) | ri | xi | bi | di; \
}
-/* ADD */
-SLJIT_S390X_RXYA(ay, 0xe3000000005a, have_ldisp())
-SLJIT_S390X_RXYA(ag, 0xe30000000008, 1)
-
-/* ADD LOGICAL */
-SLJIT_S390X_RXYA(aly, 0xe3000000005e, have_ldisp())
-SLJIT_S390X_RXYA(alg, 0xe3000000000a, 1)
-
-/* ADD LOGICAL WITH CARRY */
-SLJIT_S390X_RXYA(alc, 0xe30000000098, 1)
-SLJIT_S390X_RXYA(alcg, 0xe30000000088, 1)
-
-/* AND */
-SLJIT_S390X_RXYA(ny, 0xe30000000054, have_ldisp())
-SLJIT_S390X_RXYA(ng, 0xe30000000080, 1)
-
-/* EXCLUSIVE OR */
-SLJIT_S390X_RXYA(xy, 0xe30000000057, have_ldisp())
-SLJIT_S390X_RXYA(xg, 0xe30000000082, 1)
-
/* LOAD */
SLJIT_S390X_RXYA(ly, 0xe30000000058, have_ldisp())
SLJIT_S390X_RXYA(lg, 0xe30000000004, 1)
@@ -713,10 +646,6 @@ SLJIT_S390X_RXYA(llgh, 0xe30000000091, 1)
SLJIT_S390X_RXYA(msy, 0xe30000000051, have_ldisp())
SLJIT_S390X_RXYA(msg, 0xe3000000000c, 1)
-/* OR */
-SLJIT_S390X_RXYA(oy, 0xe30000000056, have_ldisp())
-SLJIT_S390X_RXYA(og, 0xe30000000081, 1)
-
/* STORE */
SLJIT_S390X_RXYA(sty, 0xe30000000050, have_ldisp())
SLJIT_S390X_RXYA(stg, 0xe30000000024, 1)
@@ -727,41 +656,8 @@ SLJIT_S390X_RXYA(stcy, 0xe30000000072, have_ldisp())
/* STORE HALFWORD */
SLJIT_S390X_RXYA(sthy, 0xe30000000070, have_ldisp())
-/* SUBTRACT */
-SLJIT_S390X_RXYA(sy, 0xe3000000005b, have_ldisp())
-SLJIT_S390X_RXYA(sg, 0xe30000000009, 1)
-
-/* SUBTRACT LOGICAL */
-SLJIT_S390X_RXYA(sly, 0xe3000000005f, have_ldisp())
-SLJIT_S390X_RXYA(slg, 0xe3000000000b, 1)
-
-/* SUBTRACT LOGICAL WITH BORROW */
-SLJIT_S390X_RXYA(slb, 0xe30000000099, 1)
-SLJIT_S390X_RXYA(slbg, 0xe30000000089, 1)
-
#undef SLJIT_S390X_RXYA
-/* RS-a instructions */
-#define SLJIT_S390X_RSA(name, pattern) \
-SLJIT_S390X_INSTRUCTION(name, sljit_gpr reg, sljit_sw d, sljit_gpr b) \
-{ \
- sljit_ins r1 = (sljit_ins)(reg & 0xf) << 20; \
- sljit_ins b2 = (sljit_ins)(b & 0xf) << 12; \
- sljit_ins d2 = (sljit_ins)(d & 0xfff); \
- return (pattern) | r1 | b2 | d2; \
-}
-
-/* SHIFT LEFT SINGLE LOGICAL */
-SLJIT_S390X_RSA(sll, 0x89000000)
-
-/* SHIFT RIGHT SINGLE */
-SLJIT_S390X_RSA(sra, 0x8a000000)
-
-/* SHIFT RIGHT SINGLE LOGICAL */
-SLJIT_S390X_RSA(srl, 0x88000000)
-
-#undef SLJIT_S390X_RSA
-
/* RSY-a instructions */
#define SLJIT_S390X_RSYA(name, pattern, cond) \
SLJIT_S390X_INSTRUCTION(name, sljit_gpr dst, sljit_gpr src, sljit_sw d, sljit_gpr b) \
@@ -772,7 +668,7 @@ SLJIT_S390X_INSTRUCTION(name, sljit_gpr dst, sljit_gpr src, sljit_sw d, sljit_gp
r1 = (sljit_ins)(dst & 0xf) << 36; \
r3 = (sljit_ins)(src & 0xf) << 32; \
b2 = (sljit_ins)(b & 0xf) << 28; \
- d2 = (sljit_ins)disp_s20(d) << 8; \
+ d2 = disp_s20(d); \
\
return (pattern) | r1 | r3 | b2 | d2; \
}
@@ -786,9 +682,6 @@ SLJIT_S390X_RSYA(sllg, 0xeb000000000d, 1)
/* SHIFT RIGHT SINGLE */
SLJIT_S390X_RSYA(srag, 0xeb000000000a, 1)
-/* SHIFT RIGHT SINGLE LOGICAL */
-SLJIT_S390X_RSYA(srlg, 0xeb000000000c, 1)
-
/* STORE MULTIPLE */
SLJIT_S390X_RSYA(stmg, 0xeb0000000024, 1)
@@ -831,26 +724,6 @@ SLJIT_S390X_RIEF(risbhg, 0xec000000005d)
#undef SLJIT_S390X_RIEF
-/* RRF-a instructions */
-#define SLJIT_S390X_RRFA(name, pattern, cond) \
-SLJIT_S390X_INSTRUCTION(name, sljit_gpr dst, sljit_gpr src1, sljit_gpr src2) \
-{ \
- sljit_ins r1, r2, r3; \
-\
- SLJIT_ASSERT(cond); \
- r1 = (sljit_ins)(dst & 0xf) << 4; \
- r2 = (sljit_ins)(src1 & 0xf); \
- r3 = (sljit_ins)(src2 & 0xf) << 12; \
-\
- return (pattern) | r3 | r1 | r2; \
-}
-
-/* MULTIPLY */
-SLJIT_S390X_RRFA(msrkc, 0xb9fd0000, have_misc2())
-SLJIT_S390X_RRFA(msgrkc, 0xb9ed0000, have_misc2())
-
-#undef SLJIT_S390X_RRFA
-
/* RRF-c instructions (require load/store-on-condition 1 facility) */
#define SLJIT_S390X_RRFC(name, pattern) \
SLJIT_S390X_INSTRUCTION(name, sljit_gpr dst, sljit_gpr src, sljit_uw mask) \
@@ -919,6 +792,13 @@ SLJIT_S390X_INSTRUCTION(br, sljit_gpr target)
return 0x07f0 | target;
}
+SLJIT_S390X_INSTRUCTION(brc, sljit_uw mask, sljit_sw target)
+{
+ sljit_ins m1 = (sljit_ins)(mask & 0xf) << 20;
+ sljit_ins ri2 = (sljit_ins)target & 0xffff;
+ return 0xa7040000L | m1 | ri2;
+}
+
SLJIT_S390X_INSTRUCTION(brcl, sljit_uw mask, sljit_sw target)
{
sljit_ins m1 = (sljit_ins)(mask & 0xf) << 36;
@@ -940,6 +820,12 @@ SLJIT_S390X_INSTRUCTION(ipm, sljit_gpr dst)
return 0xb2220000 | ((sljit_ins)(dst & 0xf) << 4);
}
+/* SET PROGRAM MASK */
+SLJIT_S390X_INSTRUCTION(spm, sljit_gpr dst)
+{
+ return 0x0400 | ((sljit_ins)(dst & 0xf) << 4);
+}
+
/* ROTATE THEN INSERT SELECTED BITS HIGH (ZERO) */
SLJIT_S390X_INSTRUCTION(risbhgz, sljit_gpr dst, sljit_gpr src, sljit_u8 start, sljit_u8 end, sljit_u8 rot)
{
@@ -948,30 +834,20 @@ SLJIT_S390X_INSTRUCTION(risbhgz, sljit_gpr dst, sljit_gpr src, sljit_u8 start, s
#undef SLJIT_S390X_INSTRUCTION
-/* load condition code as needed to match type */
-static sljit_s32 push_load_cc(struct sljit_compiler *compiler, sljit_s32 type)
+static sljit_s32 update_zero_overflow(struct sljit_compiler *compiler, sljit_s32 op, sljit_gpr dst_r)
{
- type &= ~SLJIT_I32_OP;
- switch (type) {
- case SLJIT_ZERO:
- case SLJIT_NOT_ZERO:
- return push_inst(compiler, cih(flag_r, 0));
- break;
- default:
- return push_inst(compiler, tmlh(flag_r, 0x3000));
- break;
- }
- return SLJIT_SUCCESS;
-}
-
-static sljit_s32 push_store_zero_flag(struct sljit_compiler *compiler, sljit_s32 op, sljit_gpr source)
-{
- /* insert low 32-bits into high 32-bits of flag register */
- FAIL_IF(push_inst(compiler, risbhgz(flag_r, source, 0, 31, 32)));
- if (!(op & SLJIT_I32_OP)) {
- /* OR high 32-bits with high 32-bits of flag register */
- return push_inst(compiler, rosbg(flag_r, source, 0, 31, 0));
- }
+ /* Condition codes: bits 18 and 19.
+ Transformation:
+ 0 (zero and no overflow) : unchanged
+ 1 (non-zero and no overflow) : unchanged
+ 2 (zero and overflow) : decreased by 1
+ 3 (non-zero and overflow) : decreased by 1 if non-zero */
+ FAIL_IF(push_inst(compiler, brc(0xc, 2 + 2 + ((op & SLJIT_I32_OP) ? 1 : 2) + 2 + 3 + 1)));
+ FAIL_IF(push_inst(compiler, ipm(flag_r)));
+ FAIL_IF(push_inst(compiler, (op & SLJIT_I32_OP) ? or(dst_r, dst_r) : ogr(dst_r, dst_r)));
+ FAIL_IF(push_inst(compiler, brc(0x8, 2 + 3)));
+ FAIL_IF(push_inst(compiler, slfi(flag_r, 0x10000000)));
+ FAIL_IF(push_inst(compiler, spm(flag_r)));
return SLJIT_SUCCESS;
}
@@ -1088,18 +964,19 @@ static sljit_s32 make_addr_bx(struct sljit_compiler *compiler,
#define WHEN(cond, r, i1, i2, addr) \
(cond) ? EVAL(i1, r, addr) : EVAL(i2, r, addr)
+/* May clobber tmp1. */
static sljit_s32 load_word(struct sljit_compiler *compiler, sljit_gpr dst,
sljit_s32 src, sljit_sw srcw,
- sljit_gpr tmp /* clobbered */, sljit_s32 is_32bit)
+ sljit_s32 is_32bit)
{
struct addr addr;
sljit_ins ins;
SLJIT_ASSERT(src & SLJIT_MEM);
if (have_ldisp() || !is_32bit)
- FAIL_IF(make_addr_bxy(compiler, &addr, src, srcw, tmp));
+ FAIL_IF(make_addr_bxy(compiler, &addr, src, srcw, tmp1));
else
- FAIL_IF(make_addr_bx(compiler, &addr, src, srcw, tmp));
+ FAIL_IF(make_addr_bx(compiler, &addr, src, srcw, tmp1));
if (is_32bit)
ins = WHEN(is_u12(addr.offset), dst, l, ly, addr);
@@ -1109,18 +986,19 @@ static sljit_s32 load_word(struct sljit_compiler *compiler, sljit_gpr dst,
return push_inst(compiler, ins);
}
+/* May clobber tmp1. */
static sljit_s32 store_word(struct sljit_compiler *compiler, sljit_gpr src,
sljit_s32 dst, sljit_sw dstw,
- sljit_gpr tmp /* clobbered */, sljit_s32 is_32bit)
+ sljit_s32 is_32bit)
{
struct addr addr;
sljit_ins ins;
SLJIT_ASSERT(dst & SLJIT_MEM);
if (have_ldisp() || !is_32bit)
- FAIL_IF(make_addr_bxy(compiler, &addr, dst, dstw, tmp));
+ FAIL_IF(make_addr_bxy(compiler, &addr, dst, dstw, tmp1));
else
- FAIL_IF(make_addr_bx(compiler, &addr, dst, dstw, tmp));
+ FAIL_IF(make_addr_bx(compiler, &addr, dst, dstw, tmp1));
if (is_32bit)
ins = WHEN(is_u12(addr.offset), src, st, sty, addr);
@@ -1132,6 +1010,358 @@ static sljit_s32 store_word(struct sljit_compiler *compiler, sljit_gpr src,
#undef WHEN
+static sljit_s32 emit_move(struct sljit_compiler *compiler,
+ sljit_gpr dst_r,
+ sljit_s32 src, sljit_sw srcw)
+{
+ SLJIT_ASSERT(!SLOW_IS_REG(src) || dst_r != gpr(src & REG_MASK));
+
+ if (src & SLJIT_IMM)
+ return push_load_imm_inst(compiler, dst_r, srcw);
+
+ if (src & SLJIT_MEM)
+ return load_word(compiler, dst_r, src, srcw, (compiler->mode & SLJIT_I32_OP) != 0);
+
+ sljit_gpr src_r = gpr(src & REG_MASK);
+ return push_inst(compiler, (compiler->mode & SLJIT_I32_OP) ? lr(dst_r, src_r) : lgr(dst_r, src_r));
+}
+
+static sljit_s32 emit_rr(struct sljit_compiler *compiler, sljit_ins ins,
+ sljit_s32 dst,
+ sljit_s32 src1, sljit_sw src1w,
+ sljit_s32 src2, sljit_sw src2w)
+{
+ sljit_gpr dst_r = tmp0;
+ sljit_gpr src_r = tmp1;
+ sljit_s32 needs_move = 1;
+
+ if (SLOW_IS_REG(dst)) {
+ dst_r = gpr(dst & REG_MASK);
+
+ if (dst == src1)
+ needs_move = 0;
+ else if (dst == src2) {
+ dst_r = tmp0;
+ needs_move = 2;
+ }
+ }
+
+ if (needs_move)
+ FAIL_IF(emit_move(compiler, dst_r, src1, src1w));
+
+ if (FAST_IS_REG(src2))
+ src_r = gpr(src2 & REG_MASK);
+ else
+ FAIL_IF(emit_move(compiler, tmp1, src2, src2w));
+
+ FAIL_IF(push_inst(compiler, ins | (dst_r << 4) | src_r));
+
+ if (needs_move != 2)
+ return SLJIT_SUCCESS;
+
+ dst_r = gpr(dst & REG_MASK);
+ return push_inst(compiler, (compiler->mode & SLJIT_I32_OP) ? lr(dst_r, tmp0) : lgr(dst_r, tmp0));
+}
+
+static sljit_s32 emit_rrf(struct sljit_compiler *compiler, sljit_ins ins,
+ sljit_s32 dst,
+ sljit_s32 src1, sljit_sw src1w,
+ sljit_s32 src2, sljit_sw src2w)
+{
+ sljit_gpr dst_r = SLOW_IS_REG(dst) ? gpr(dst & REG_MASK) : tmp0;
+ sljit_gpr src1_r = tmp0;
+ sljit_gpr src2_r = tmp1;
+
+ if (FAST_IS_REG(src1))
+ src1_r = gpr(src1 & REG_MASK);
+ else
+ FAIL_IF(emit_move(compiler, tmp0, src1, src1w));
+
+ if (FAST_IS_REG(src2))
+ src2_r = gpr(src2 & REG_MASK);
+ else
+ FAIL_IF(emit_move(compiler, tmp1, src2, src2w));
+
+ return push_inst(compiler, ins | (dst_r << 4) | src1_r | (src2_r << 12));
+}
+
+typedef enum {
+ RI_A,
+ RIL_A,
+} emit_ril_type;
+
+static sljit_s32 emit_ri(struct sljit_compiler *compiler, sljit_ins ins,
+ sljit_s32 dst,
+ sljit_s32 src1, sljit_sw src1w,
+ sljit_sw src2w,
+ emit_ril_type type)
+{
+ sljit_gpr dst_r = tmp0;
+ sljit_s32 needs_move = 1;
+
+ if (SLOW_IS_REG(dst)) {
+ dst_r = gpr(dst & REG_MASK);
+
+ if (dst == src1)
+ needs_move = 0;
+ }
+
+ if (needs_move)
+ FAIL_IF(emit_move(compiler, dst_r, src1, src1w));
+
+ if (type == RIL_A)
+ return push_inst(compiler, ins | (dst_r << 36) | (src2w & 0xffffffff));
+ return push_inst(compiler, ins | (dst_r << 20) | (src2w & 0xffff));
+}
+
+static sljit_s32 emit_rie_d(struct sljit_compiler *compiler, sljit_ins ins,
+ sljit_s32 dst,
+ sljit_s32 src1, sljit_sw src1w,
+ sljit_sw src2w)
+{
+ sljit_gpr dst_r = SLOW_IS_REG(dst) ? gpr(dst & REG_MASK) : tmp0;
+ sljit_gpr src_r = tmp0;
+
+ if (!SLOW_IS_REG(src1))
+ FAIL_IF(emit_move(compiler, tmp0, src1, src1w));
+ else
+ src_r = gpr(src1 & REG_MASK);
+
+ return push_inst(compiler, ins | (dst_r << 36) | (src_r << 32) | (src2w & 0xffff) << 16);
+}
+
+typedef enum {
+ RX_A,
+ RXY_A,
+} emit_rx_type;
+
+static sljit_s32 emit_rx(struct sljit_compiler *compiler, sljit_ins ins,
+ sljit_s32 dst,
+ sljit_s32 src1, sljit_sw src1w,
+ sljit_s32 src2, sljit_sw src2w,
+ emit_rx_type type)
+{
+ sljit_gpr dst_r = tmp0;
+ sljit_s32 needs_move = 1;
+ sljit_gpr base, index;
+
+ SLJIT_ASSERT(src2 & SLJIT_MEM);
+
+ if (SLOW_IS_REG(dst)) {
+ dst_r = gpr(dst);
+
+ if (dst == src1)
+ needs_move = 0;
+ else if (dst == (src2 & REG_MASK) || (dst == OFFS_REG(src2))) {
+ dst_r = tmp0;
+ needs_move = 2;
+ }
+ }
+
+ if (needs_move)
+ FAIL_IF(emit_move(compiler, dst_r, src1, src1w));
+
+ base = gpr(src2 & REG_MASK);
+ index = tmp0;
+
+ if (src2 & OFFS_REG_MASK) {
+ index = gpr(OFFS_REG(src2));
+
+ if (src2w != 0) {
+ FAIL_IF(push_inst(compiler, sllg(tmp1, index, src2w & 0x3, 0)));
+ src2w = 0;
+ index = tmp1;
+ }
+ } else if ((type == RX_A && !is_u12(src2w)) || (type == RXY_A && !is_s20(src2w))) {
+ FAIL_IF(push_load_imm_inst(compiler, tmp1, src2w));
+
+ if (src2 & REG_MASK)
+ index = tmp1;
+ else
+ base = tmp1;
+ src2w = 0;
+ }
+
+ if (type == RX_A)
+ ins |= (dst_r << 20) | (index << 16) | (base << 12) | src2w;
+ else
+ ins |= (dst_r << 36) | (index << 32) | (base << 28) | disp_s20(src2w);
+
+ FAIL_IF(push_inst(compiler, ins));
+
+ if (needs_move != 2)
+ return SLJIT_SUCCESS;
+
+ dst_r = gpr(dst);
+ return push_inst(compiler, (compiler->mode & SLJIT_I32_OP) ? lr(dst_r, tmp0) : lgr(dst_r, tmp0));
+}
+
+static sljit_s32 emit_siy(struct sljit_compiler *compiler, sljit_ins ins,
+ sljit_s32 dst, sljit_sw dstw,
+ sljit_sw srcw)
+{
+ SLJIT_ASSERT(dst & SLJIT_MEM);
+
+ sljit_gpr dst_r = tmp1;
+
+ if (dst & OFFS_REG_MASK) {
+ sljit_gpr index = tmp1;
+
+ if ((dstw & 0x3) == 0)
+ index = gpr(OFFS_REG(dst));
+ else
+ FAIL_IF(push_inst(compiler, sllg(tmp1, index, dstw & 0x3, 0)));
+
+ FAIL_IF(push_inst(compiler, la(tmp1, 0, dst_r, index)));
+ dstw = 0;
+ }
+ else if (!is_s20(dstw)) {
+ FAIL_IF(push_load_imm_inst(compiler, tmp1, dstw));
+
+ if (dst & REG_MASK)
+ FAIL_IF(push_inst(compiler, la(tmp1, 0, dst_r, tmp1)));
+
+ dstw = 0;
+ }
+ else
+ dst_r = gpr(dst & REG_MASK);
+
+ return push_inst(compiler, ins | ((srcw & 0xff) << 32) | (dst_r << 28) | disp_s20(dstw));
+}
+
+struct ins_forms {
+ sljit_ins op_r;
+ sljit_ins op_gr;
+ sljit_ins op_rk;
+ sljit_ins op_grk;
+ sljit_ins op;
+ sljit_ins op_y;
+ sljit_ins op_g;
+};
+
+static sljit_s32 emit_commutative(struct sljit_compiler *compiler, const struct ins_forms *forms,
+ sljit_s32 dst, sljit_sw dstw,
+ sljit_s32 src1, sljit_sw src1w,
+ sljit_s32 src2, sljit_sw src2w)
+{
+ sljit_s32 mode = compiler->mode;
+ sljit_ins ins, ins_k;
+
+ if ((src1 | src2) & SLJIT_MEM) {
+ sljit_ins ins12, ins20;
+
+ if (mode & SLJIT_I32_OP) {
+ ins12 = forms->op;
+ ins20 = forms->op_y;
+ }
+ else {
+ ins12 = 0;
+ ins20 = forms->op_g;
+ }
+
+ if (ins12 && ins20) {
+ /* Extra instructions needed for address computation can be executed independently. */
+ if ((src2 & SLJIT_MEM) && (!(src1 & SLJIT_MEM)
+ || ((src1 & OFFS_REG_MASK) ? (src1w & 0x3) == 0 : is_s20(src1w)))) {
+ if ((src2 & OFFS_REG_MASK) || is_u12(src2w) || !is_s20(src2w))
+ return emit_rx(compiler, ins12, dst, src1, src1w, src2, src2w, RX_A);
+
+ return emit_rx(compiler, ins20, dst, src1, src1w, src2, src2w, RXY_A);
+ }
+
+ if (src1 & SLJIT_MEM) {
+ if ((src1 & OFFS_REG_MASK) || is_u12(src1w) || !is_s20(src1w))
+ return emit_rx(compiler, ins12, dst, src2, src2w, src1, src1w, RX_A);
+
+ return emit_rx(compiler, ins20, dst, src2, src2w, src1, src1w, RXY_A);
+ }
+ }
+ else if (ins12 || ins20) {
+ emit_rx_type rx_type;
+
+ if (ins12) {
+ rx_type = RX_A;
+ ins = ins12;
+ }
+ else {
+ rx_type = RXY_A;
+ ins = ins20;
+ }
+
+ if ((src2 & SLJIT_MEM) && (!(src1 & SLJIT_MEM)
+ || ((src1 & OFFS_REG_MASK) ? (src1w & 0x3) == 0 : (rx_type == RX_A ? is_u12(src1w) : is_s20(src1w)))))
+ return emit_rx(compiler, ins, dst, src1, src1w, src2, src2w, rx_type);
+
+ if (src1 & SLJIT_MEM)
+ return emit_rx(compiler, ins, dst, src2, src2w, src1, src1w, rx_type);
+ }
+ }
+
+ if (mode & SLJIT_I32_OP) {
+ ins = forms->op_r;
+ ins_k = forms->op_rk;
+ }
+ else {
+ ins = forms->op_gr;
+ ins_k = forms->op_grk;
+ }
+
+ SLJIT_ASSERT(ins != 0 || ins_k != 0);
+
+ if (ins && SLOW_IS_REG(dst)) {
+ if (dst == src1)
+ return emit_rr(compiler, ins, dst, src1, src1w, src2, src2w);
+
+ if (dst == src2)
+ return emit_rr(compiler, ins, dst, src2, src2w, src1, src1w);
+ }
+
+ if (ins_k == 0)
+ return emit_rr(compiler, ins, dst, src1, src1w, src2, src2w);
+
+ return emit_rrf(compiler, ins_k, dst, src1, src1w, src2, src2w);
+}
+
+static sljit_s32 emit_non_commutative(struct sljit_compiler *compiler, const struct ins_forms *forms,
+ sljit_s32 dst, sljit_sw dstw,
+ sljit_s32 src1, sljit_sw src1w,
+ sljit_s32 src2, sljit_sw src2w)
+{
+ sljit_s32 mode = compiler->mode;
+ sljit_ins ins;
+
+ if (src2 & SLJIT_MEM) {
+ sljit_ins ins12, ins20;
+
+ if (mode & SLJIT_I32_OP) {
+ ins12 = forms->op;
+ ins20 = forms->op_y;
+ }
+ else {
+ ins12 = 0;
+ ins20 = forms->op_g;
+ }
+
+ if (ins12 && ins20) {
+ if ((src2 & OFFS_REG_MASK) || is_u12(src2w) || !is_s20(src2w))
+ return emit_rx(compiler, ins12, dst, src1, src1w, src2, src2w, RX_A);
+
+ return emit_rx(compiler, ins20, dst, src1, src1w, src2, src2w, RXY_A);
+ }
+ else if (ins12)
+ return emit_rx(compiler, ins12, dst, src1, src1w, src2, src2w, RX_A);
+ else if (ins20)
+ return emit_rx(compiler, ins20, dst, src1, src1w, src2, src2w, RXY_A);
+ }
+
+ ins = (mode & SLJIT_I32_OP) ? forms->op_rk : forms->op_grk;
+
+ if (ins == 0 || (SLOW_IS_REG(dst) && dst == src1))
+ return emit_rr(compiler, (mode & SLJIT_I32_OP) ? forms->op_r : forms->op_gr, dst, src1, src1w, src2, src2w);
+
+ return emit_rrf(compiler, ins, dst, src1, src1w, src2, src2w);
+}
+
SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compiler)
{
struct sljit_label *label;
@@ -1465,7 +1695,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compile
op = GET_OPCODE(op) | (op & SLJIT_I32_OP);
switch (op) {
case SLJIT_BREAKPOINT:
- /* TODO(mundaym): insert real breakpoint? */
+ /* The following invalid instruction is emitted by gdb. */
+ return push_inst(compiler, 0x0001 /* 2-byte trap */);
case SLJIT_NOP:
return push_inst(compiler, 0x0700 /* 2-byte nop */);
case SLJIT_LMUL_UW:
@@ -1559,6 +1790,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile
/* TODO(carenas): implement prefetch? */
return SLJIT_SUCCESS;
}
+
if (opcode >= SLJIT_MOV && opcode <= SLJIT_MOV_P) {
/* LOAD REGISTER */
if (FAST_IS_REG(dst) && FAST_IS_REG(src)) {
@@ -1609,11 +1841,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile
SLJIT_UNREACHABLE();
}
FAIL_IF(push_inst(compiler, ins));
- if (HAS_FLAGS(op)) {
- /* only handle zero flag */
- SLJIT_ASSERT(!(op & VARIABLE_FLAG_MASK));
- return push_store_zero_flag(compiler, op, dst_r);
- }
return SLJIT_SUCCESS;
}
/* LOAD IMMEDIATE */
@@ -1690,11 +1917,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile
SLJIT_UNREACHABLE();
}
FAIL_IF(push_inst(compiler, ins));
- if (HAS_FLAGS(op)) {
- /* only handle zero flag */
- SLJIT_ASSERT(!(op & VARIABLE_FLAG_MASK));
- return push_store_zero_flag(compiler, op, reg);
- }
return SLJIT_SUCCESS;
}
/* STORE and STORE IMMEDIATE */
@@ -1723,11 +1945,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile
case SLJIT_MOV_P:
case SLJIT_MOV:
FAIL_IF(push_inst(compiler, LEVAL(stg)));
- if (HAS_FLAGS(op)) {
- /* only handle zero flag */
- SLJIT_ASSERT(!(op & VARIABLE_FLAG_MASK));
- return push_store_zero_flag(compiler, op, reg);
- }
return SLJIT_SUCCESS;
default:
SLJIT_UNREACHABLE();
@@ -1767,11 +1984,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile
FAIL_IF(make_addr_bxy(compiler, &mem, dst, dstw, tmp1));
FAIL_IF(push_inst(compiler,
EVAL(stg, tmp0, mem)));
- if (HAS_FLAGS(op)) {
- /* only handle zero flag */
- SLJIT_ASSERT(!(op & VARIABLE_FLAG_MASK));
- return push_store_zero_flag(compiler, op, tmp0);
- }
return SLJIT_SUCCESS;
default:
SLJIT_UNREACHABLE();
@@ -1785,7 +1997,9 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile
dst_r = SLOW_IS_REG(dst) ? gpr(REG_MASK & dst) : tmp0;
src_r = FAST_IS_REG(src) ? gpr(REG_MASK & src) : tmp0;
if (src & SLJIT_MEM)
- FAIL_IF(load_word(compiler, src_r, src, srcw, tmp1, src & SLJIT_I32_OP));
+ FAIL_IF(load_word(compiler, src_r, src, srcw, src & SLJIT_I32_OP));
+
+ compiler->status_flags_state = op & (VARIABLE_FLAG_MASK | SLJIT_SET_Z);
/* TODO(mundaym): optimize loads and stores */
switch (opcode | (op & SLJIT_I32_OP)) {
@@ -1810,9 +2024,11 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile
}
break;
case SLJIT_NEG:
+ compiler->status_flags_state |= SLJIT_CURRENT_FLAGS_ADD_SUB;
FAIL_IF(push_inst(compiler, lcgr(dst_r, src_r)));
break;
case SLJIT_NEG32:
+ compiler->status_flags_state |= SLJIT_CURRENT_FLAGS_ADD_SUB;
FAIL_IF(push_inst(compiler, lcr(dst_r, src_r)));
break;
case SLJIT_CLZ:
@@ -1839,17 +2055,12 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile
SLJIT_UNREACHABLE();
}
- /* write condition code to emulated flag register */
- if (op & VARIABLE_FLAG_MASK)
- FAIL_IF(push_inst(compiler, ipm(flag_r)));
-
- /* write zero flag to emulated flag register */
- if (op & SLJIT_SET_Z)
- FAIL_IF(push_store_zero_flag(compiler, op, dst_r));
+ if ((op & (SLJIT_SET_Z | VARIABLE_FLAG_MASK)) == (SLJIT_SET_Z | SLJIT_SET_OVERFLOW))
+ FAIL_IF(update_zero_overflow(compiler, op, dst_r));
/* TODO(carenas): doesn't need FAIL_IF */
if ((dst != SLJIT_UNUSED) && (dst & SLJIT_MEM))
- FAIL_IF(store_word(compiler, dst_r, dst, dstw, tmp1, op & SLJIT_I32_OP));
+ FAIL_IF(store_word(compiler, dst_r, dst, dstw, op & SLJIT_I32_OP));
return SLJIT_SUCCESS;
}
@@ -1887,530 +2098,554 @@ static SLJIT_INLINE int sets_signed_flag(sljit_s32 op)
return 0;
}
-/* Report whether we have an instruction for:
- op dst src imm
- where dst and src are separate registers. */
-static int have_op_3_imm(sljit_s32 op, sljit_sw imm) {
- return 0; /* TODO(mundaym): implement */
-}
-
-/* Report whether we have an instruction for:
- op reg imm
- where reg is both a source and the destination. */
-static int have_op_2_imm(sljit_s32 op, sljit_sw imm) {
- switch (GET_OPCODE(op) | (op & SLJIT_I32_OP)) {
- case SLJIT_ADD32:
- case SLJIT_ADD:
- if (!HAS_FLAGS(op) || sets_signed_flag(op))
- return have_eimm() ? is_s32(imm) : is_s16(imm);
+static const struct ins_forms add_forms = {
+ 0x1a00, /* ar */
+ 0xb9080000, /* agr */
+ 0xb9f80000, /* ark */
+ 0xb9e80000, /* agrk */
+ 0x5a000000, /* a */
+ 0xe3000000005a, /* ay */
+ 0xe30000000008, /* ag */
+};
- return have_eimm() && is_u32(imm);
- case SLJIT_MUL32:
- case SLJIT_MUL:
- /* TODO(mundaym): general extension check */
- /* for ms{,g}fi */
- if (op & VARIABLE_FLAG_MASK)
- return 0;
-
- return have_genext() && is_s16(imm);
- case SLJIT_OR32:
- case SLJIT_XOR32:
- case SLJIT_AND32:
- /* only use if have extended immediate facility */
- /* this ensures flags are set correctly */
- return have_eimm();
- case SLJIT_AND:
- case SLJIT_OR:
- case SLJIT_XOR:
- /* TODO(mundaym): make this more flexible */
- /* avoid using immediate variations, flags */
- /* won't be set correctly */
- return 0;
- case SLJIT_ADDC32:
- case SLJIT_ADDC:
- /* no ADD LOGICAL WITH CARRY IMMEDIATE */
- return 0;
- case SLJIT_SUB:
- case SLJIT_SUB32:
- case SLJIT_SUBC:
- case SLJIT_SUBC32:
- /* no SUBTRACT IMMEDIATE */
- /* TODO(mundaym): SUBTRACT LOGICAL IMMEDIATE */
- return 0;
- }
- return 0;
-}
+static const struct ins_forms logical_add_forms = {
+ 0x1e00, /* alr */
+ 0xb90a0000, /* algr */
+ 0xb9fa0000, /* alrk */
+ 0xb9ea0000, /* algrk */
+ 0x5e000000, /* al */
+ 0xe3000000005e, /* aly */
+ 0xe3000000000a, /* alg */
+};
-SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compiler, sljit_s32 op,
+static sljit_s32 sljit_emit_add(struct sljit_compiler *compiler, sljit_s32 op,
sljit_s32 dst, sljit_sw dstw,
sljit_s32 src1, sljit_sw src1w,
sljit_s32 src2, sljit_sw src2w)
{
- CHECK_ERROR();
- CHECK(check_sljit_emit_op2(compiler, op, dst, dstw, src1, src1w, src2, src2w));
- ADJUST_LOCAL_OFFSET(dst, dstw);
- ADJUST_LOCAL_OFFSET(src1, src1w);
- ADJUST_LOCAL_OFFSET(src2, src2w);
-
- if (dst == SLJIT_UNUSED && !HAS_FLAGS(op))
- return SLJIT_SUCCESS;
-
- sljit_gpr dst_r = SLOW_IS_REG(dst) ? gpr(dst & REG_MASK) : tmp0;
+ int sets_overflow = (op & VARIABLE_FLAG_MASK) == SLJIT_SET_OVERFLOW;
+ int sets_zero_overflow = (op & (SLJIT_SET_Z | VARIABLE_FLAG_MASK)) == (SLJIT_SET_Z | SLJIT_SET_OVERFLOW);
+ const struct ins_forms *forms;
+ sljit_ins ins;
- if (is_commutative(op)) {
- #define SWAP_ARGS \
- do { \
- sljit_s32 t = src1; \
- sljit_sw tw = src1w; \
- src1 = src2; \
- src1w = src2w; \
- src2 = t; \
- src2w = tw; \
- } while(0);
-
- /* prefer immediate in src2 */
- if (src1 & SLJIT_IMM) {
- SWAP_ARGS
+ if (src2 & SLJIT_IMM) {
+ if (!sets_zero_overflow && is_s8(src2w) && (src1 & SLJIT_MEM) && (dst == src1 && dstw == src1w)) {
+ if (sets_overflow)
+ ins = (op & SLJIT_I32_OP) ? 0xeb000000006a /* asi */ : 0xeb000000007a /* agsi */;
+ else
+ ins = (op & SLJIT_I32_OP) ? 0xeb000000006e /* alsi */ : 0xeb000000007e /* algsi */;
+ return emit_siy(compiler, ins, dst, dstw, src2w);
}
- /* prefer to have src1 use same register as dst */
- if (FAST_IS_REG(src2) && gpr(src2 & REG_MASK) == dst_r) {
- SWAP_ARGS
+ if (is_s16(src2w)) {
+ if (sets_overflow)
+ ins = (op & SLJIT_I32_OP) ? 0xec00000000d8 /* ahik */ : 0xec00000000d9 /* aghik */;
+ else
+ ins = (op & SLJIT_I32_OP) ? 0xec00000000da /* alhsik */ : 0xec00000000db /* alghsik */;
+ FAIL_IF(emit_rie_d(compiler, ins, dst, src1, src1w, src2w));
+ goto done;
}
- /* prefer memory argument in src2 */
- if (FAST_IS_REG(src2) && (src1 & SLJIT_MEM)) {
- SWAP_ARGS
+ if (!sets_overflow) {
+ if ((op & SLJIT_I32_OP) || is_u32(src2w)) {
+ ins = (op & SLJIT_I32_OP) ? 0xc20b00000000 /* alfi */ : 0xc20a00000000 /* algfi */;
+ FAIL_IF(emit_ri(compiler, ins, dst, src1, src1w, src2w, RIL_A));
+ goto done;
+ }
+ if (is_u32(-src2w)) {
+ FAIL_IF(emit_ri(compiler, 0xc20400000000 /* slgfi */, dst, src1, src1w, -src2w, RIL_A));
+ goto done;
+ }
+ }
+ else if ((op & SLJIT_I32_OP) || is_s32(src2w)) {
+ ins = (op & SLJIT_I32_OP) ? 0xc20900000000 /* afi */ : 0xc20800000000 /* agfi */;
+ FAIL_IF(emit_ri(compiler, ins, dst, src1, src1w, src2w, RIL_A));
+ goto done;
}
- #undef SWAP_ARGS
}
- /* src1 must be in a register */
- sljit_gpr src1_r = FAST_IS_REG(src1) ? gpr(src1 & REG_MASK) : tmp0;
- if (src1 & SLJIT_IMM)
- FAIL_IF(push_load_imm_inst(compiler, src1_r, src1w));
-
- if (src1 & SLJIT_MEM)
- FAIL_IF(load_word(compiler, src1_r, src1, src1w, tmp1, op & SLJIT_I32_OP));
-
- /* emit comparison before subtract */
- if (GET_OPCODE(op) == SLJIT_SUB && (op & VARIABLE_FLAG_MASK)) {
- sljit_sw cmp = 0;
- switch (GET_FLAG_TYPE(op)) {
- case SLJIT_LESS:
- case SLJIT_LESS_EQUAL:
- case SLJIT_GREATER:
- case SLJIT_GREATER_EQUAL:
- cmp = 1; /* unsigned */
- break;
- case SLJIT_EQUAL:
- case SLJIT_SIG_LESS:
- case SLJIT_SIG_LESS_EQUAL:
- case SLJIT_SIG_GREATER:
- case SLJIT_SIG_GREATER_EQUAL:
- cmp = -1; /* signed */
- break;
- }
- if (cmp) {
- /* clear flags - no need to generate now */
- op &= ~VARIABLE_FLAG_MASK;
- sljit_gpr src2_r = FAST_IS_REG(src2) ? gpr(src2 & REG_MASK) : tmp1;
- if (src2 & SLJIT_IMM) {
- #define LEVAL(i) i(src1_r, src2w)
- if (cmp > 0 && is_u32(src2w)) {
- /* unsigned */
- FAIL_IF(push_inst(compiler,
- WHEN2(op & SLJIT_I32_OP, clfi, clgfi)));
- }
- else if (cmp < 0 && is_s16(src2w)) {
- /* signed */
- FAIL_IF(push_inst(compiler,
- WHEN2(op & SLJIT_I32_OP, chi, cghi)));
- }
- else if (cmp < 0 && is_s32(src2w)) {
- /* signed */
- FAIL_IF(push_inst(compiler,
- WHEN2(op & SLJIT_I32_OP, cfi, cgfi)));
- }
- #undef LEVAL
- #define LEVAL(i) i(src1_r, src2_r)
- else {
- FAIL_IF(push_load_imm_inst(compiler, src2_r, src2w));
- if (cmp > 0) {
- /* unsigned */
- FAIL_IF(push_inst(compiler,
- WHEN2(op & SLJIT_I32_OP, clr, clgr)));
- }
- if (cmp < 0) {
- /* signed */
- FAIL_IF(push_inst(compiler,
- WHEN2(op & SLJIT_I32_OP, cr, cgr)));
- }
+ forms = sets_overflow ? &add_forms : &logical_add_forms;
+ FAIL_IF(emit_commutative(compiler, forms, dst, dstw, src1, src1w, src2, src2w));
+
+done:
+ if (sets_zero_overflow)
+ FAIL_IF(update_zero_overflow(compiler, op, SLOW_IS_REG(dst) ? gpr(dst & REG_MASK) : tmp0));
+
+ if (dst & SLJIT_MEM)
+ return store_word(compiler, tmp0, dst, dstw, op & SLJIT_I32_OP);
+
+ return SLJIT_SUCCESS;
+}
+
+static const struct ins_forms sub_forms = {
+ 0x1b00, /* sr */
+ 0xb9090000, /* sgr */
+ 0xb9f90000, /* srk */
+ 0xb9e90000, /* sgrk */
+ 0x5b000000, /* s */
+ 0xe3000000005b, /* sy */
+ 0xe30000000009, /* sg */
+};
+
+static const struct ins_forms logical_sub_forms = {
+ 0x1f00, /* slr */
+ 0xb90b0000, /* slgr */
+ 0xb9fb0000, /* slrk */
+ 0xb9eb0000, /* slgrk */
+ 0x5f000000, /* sl */
+ 0xe3000000005f, /* sly */
+ 0xe3000000000b, /* slg */
+};
+
+static sljit_s32 sljit_emit_sub(struct sljit_compiler *compiler, sljit_s32 op,
+ sljit_s32 dst, sljit_sw dstw,
+ sljit_s32 src1, sljit_sw src1w,
+ sljit_s32 src2, sljit_sw src2w)
+{
+ int sets_signed = sets_signed_flag(op);
+ int sets_zero_overflow = (op & (SLJIT_SET_Z | VARIABLE_FLAG_MASK)) == (SLJIT_SET_Z | SLJIT_SET_OVERFLOW);
+ const struct ins_forms *forms;
+ sljit_ins ins;
+
+ if (dst == SLJIT_UNUSED && GET_FLAG_TYPE(op) <= SLJIT_SIG_LESS_EQUAL) {
+ int compare_signed = GET_FLAG_TYPE(op) >= SLJIT_SIG_LESS;
+
+ compiler->status_flags_state |= SLJIT_CURRENT_FLAGS_COMPARE;
+
+ if (src2 & SLJIT_IMM) {
+ if (compare_signed || ((op & VARIABLE_FLAG_MASK) == 0 && is_s32(src2w)))
+ {
+ if ((op & SLJIT_I32_OP) || is_s32(src2w)) {
+ ins = (op & SLJIT_I32_OP) ? 0xc20d00000000 /* cfi */ : 0xc20c00000000 /* cgfi */;
+ return emit_ri(compiler, ins, src1, src1, src1w, src2w, RIL_A);
}
}
else {
- if (src2 & SLJIT_MEM) {
- /* TODO(mundaym): comparisons with memory */
- /* load src2 into register */
- FAIL_IF(load_word(compiler, src2_r, src2, src2w, tmp1, op & SLJIT_I32_OP));
+ if ((op & SLJIT_I32_OP) || is_u32(src2w)) {
+ ins = (op & SLJIT_I32_OP) ? 0xc20f00000000 /* clfi */ : 0xc20e00000000 /* clgfi */;
+ return emit_ri(compiler, ins, src1, src1, src1w, src2w, RIL_A);
}
- if (cmp > 0) {
- /* unsigned */
- FAIL_IF(push_inst(compiler,
- WHEN2(op & SLJIT_I32_OP, clr, clgr)));
- }
- if (cmp < 0) {
- /* signed */
- FAIL_IF(push_inst(compiler,
- WHEN2(op & SLJIT_I32_OP, cr, cgr)));
- }
- #undef LEVAL
+ if (is_s16(src2w))
+ return emit_rie_d(compiler, 0xec00000000db /* alghsik */, SLJIT_UNUSED, src1, src1w, src2w);
}
- FAIL_IF(push_inst(compiler, ipm(flag_r)));
}
- }
+ else if (src2 & SLJIT_MEM) {
+ if ((op & SLJIT_I32_OP) && ((src2 & OFFS_REG_MASK) || is_u12(src2w))) {
+ ins = compare_signed ? 0x59000000 /* c */ : 0x55000000 /* cl */;
+ return emit_rx(compiler, ins, src1, src1, src1w, src2, src2w, RX_A);
+ }
- if (!HAS_FLAGS(op) && dst == SLJIT_UNUSED)
- return SLJIT_SUCCESS;
+ if (compare_signed)
+ ins = (op & SLJIT_I32_OP) ? 0xe30000000059 /* cy */ : 0xe30000000020 /* cg */;
+ else
+ ins = (op & SLJIT_I32_OP) ? 0xe30000000055 /* cly */ : 0xe30000000021 /* clg */;
+ return emit_rx(compiler, ins, src1, src1, src1w, src2, src2w, RXY_A);
+ }
- /* need to specify signed or logical operation */
- int signed_flags = sets_signed_flag(op);
+ if (compare_signed)
+ ins = (op & SLJIT_I32_OP) ? 0x1900 /* cr */ : 0xb9200000 /* cgr */;
+ else
+ ins = (op & SLJIT_I32_OP) ? 0x1500 /* clr */ : 0xb9210000 /* clgr */;
+ return emit_rr(compiler, ins, src1, src1, src1w, src2, src2w);
+ }
- if (is_shift(op)) {
- /* handle shifts first, they have more constraints than other operations */
- sljit_sw d = 0;
- sljit_gpr b = FAST_IS_REG(src2) ? gpr(src2 & REG_MASK) : r0;
- if (src2 & SLJIT_IMM)
- d = src2w & ((op & SLJIT_I32_OP) ? 31 : 63);
+ if (src2 & SLJIT_IMM) {
+ sljit_sw neg_src2w = -src2w;
- if (src2 & SLJIT_MEM) {
- /* shift amount (b) cannot be in r0 (i.e. tmp0) */
- FAIL_IF(load_word(compiler, tmp1, src2, src2w, tmp1, op & SLJIT_I32_OP));
- b = tmp1;
- }
- /* src1 and dst share the same register in the base 32-bit ISA */
- /* TODO(mundaym): not needed when distinct-operand facility is available */
- int workaround_alias = op & SLJIT_I32_OP && src1_r != dst_r;
- if (workaround_alias) {
- /* put src1 into tmp0 so we can overwrite it */
- FAIL_IF(push_inst(compiler, lr(tmp0, src1_r)));
- src1_r = tmp0;
- }
- switch (GET_OPCODE(op) | (op & SLJIT_I32_OP)) {
- case SLJIT_SHL:
- FAIL_IF(push_inst(compiler, sllg(dst_r, src1_r, d, b)));
- break;
- case SLJIT_SHL32:
- FAIL_IF(push_inst(compiler, sll(src1_r, d, b)));
- break;
- case SLJIT_LSHR:
- FAIL_IF(push_inst(compiler, srlg(dst_r, src1_r, d, b)));
- break;
- case SLJIT_LSHR32:
- FAIL_IF(push_inst(compiler, srl(src1_r, d, b)));
- break;
- case SLJIT_ASHR:
- FAIL_IF(push_inst(compiler, srag(dst_r, src1_r, d, b)));
- break;
- case SLJIT_ASHR32:
- FAIL_IF(push_inst(compiler, sra(src1_r, d, b)));
- break;
- default:
- SLJIT_UNREACHABLE();
+ if (sets_signed || neg_src2w != 0 || (op & (SLJIT_SET_Z | VARIABLE_FLAG_MASK)) == 0) {
+ if (!sets_zero_overflow && is_s8(neg_src2w) && (src1 & SLJIT_MEM) && (dst == src1 && dstw == src1w)) {
+ if (sets_signed)
+ ins = (op & SLJIT_I32_OP) ? 0xeb000000006a /* asi */ : 0xeb000000007a /* agsi */;
+ else
+ ins = (op & SLJIT_I32_OP) ? 0xeb000000006e /* alsi */ : 0xeb000000007e /* algsi */;
+ return emit_siy(compiler, ins, dst, dstw, neg_src2w);
+ }
+
+ if (is_s16(neg_src2w)) {
+ if (sets_signed)
+ ins = (op & SLJIT_I32_OP) ? 0xec00000000d8 /* ahik */ : 0xec00000000d9 /* aghik */;
+ else
+ ins = (op & SLJIT_I32_OP) ? 0xec00000000da /* alhsik */ : 0xec00000000db /* alghsik */;
+ FAIL_IF(emit_rie_d(compiler, ins, dst, src1, src1w, neg_src2w));
+ goto done;
+ }
}
- if (workaround_alias && dst_r != src1_r)
- FAIL_IF(push_inst(compiler, lr(dst_r, src1_r)));
- }
- else if ((GET_OPCODE(op) == SLJIT_MUL) && HAS_FLAGS(op)) {
- /* multiply instructions do not generally set flags so we need to manually */
- /* detect overflow conditions */
- /* TODO(mundaym): 64-bit overflow */
- SLJIT_ASSERT(GET_FLAG_TYPE(op) == SLJIT_MUL_OVERFLOW ||
- GET_FLAG_TYPE(op) == SLJIT_MUL_NOT_OVERFLOW);
- sljit_gpr src2_r = FAST_IS_REG(src2) ? gpr(src2 & REG_MASK) : tmp1;
- if (src2 & SLJIT_IMM) {
- /* load src2 into register */
- FAIL_IF(push_load_imm_inst(compiler, src2_r, src2w));
+ if (!sets_signed) {
+ if ((op & SLJIT_I32_OP) || is_u32(src2w)) {
+ ins = (op & SLJIT_I32_OP) ? 0xc20500000000 /* slfi */ : 0xc20400000000 /* slgfi */;
+ FAIL_IF(emit_ri(compiler, ins, dst, src1, src1w, src2w, RIL_A));
+ goto done;
+ }
+ if (is_u32(neg_src2w)) {
+ FAIL_IF(emit_ri(compiler, 0xc20a00000000 /* algfi */, dst, src1, src1w, neg_src2w, RIL_A));
+ goto done;
+ }
}
- if (src2 & SLJIT_MEM) {
- /* load src2 into register */
- FAIL_IF(load_word(compiler, src2_r, src2, src2w, tmp1, op & SLJIT_I32_OP));
+ else if ((op & SLJIT_I32_OP) || is_s32(neg_src2w)) {
+ ins = (op & SLJIT_I32_OP) ? 0xc20900000000 /* afi */ : 0xc20800000000 /* agfi */;
+ FAIL_IF(emit_ri(compiler, ins, dst, src1, src1w, neg_src2w, RIL_A));
+ goto done;
}
- if (have_misc2()) {
- #define LEVAL(i) i(dst_r, src1_r, src2_r)
- FAIL_IF(push_inst(compiler,
- WHEN2(op & SLJIT_I32_OP, msrkc, msgrkc)));
- #undef LEVAL
+ }
+
+ forms = sets_signed ? &sub_forms : &logical_sub_forms;
+ FAIL_IF(emit_non_commutative(compiler, forms, dst, dstw, src1, src1w, src2, src2w));
+
+done:
+ if (sets_signed) {
+ sljit_gpr dst_r = SLOW_IS_REG(dst) ? gpr(dst & REG_MASK) : tmp0;
+
+ if ((op & VARIABLE_FLAG_MASK) != SLJIT_SET_OVERFLOW) {
+ /* In case of overflow, the sign bit of the two source operands must be different, and
+ - the first operand is greater if the sign bit of the result is set
+ - the first operand is less if the sign bit of the result is not set
+ The -result operation sets the corrent sign, because the result cannot be zero.
+ The overflow is considered greater, since the result must be equal to INT_MIN so its sign bit is set. */
+ FAIL_IF(push_inst(compiler, brc(0xe, 2 + 2)));
+ FAIL_IF(push_inst(compiler, (op & SLJIT_I32_OP) ? lcr(tmp1, dst_r) : lcgr(tmp1, dst_r)));
}
- else if (op & SLJIT_I32_OP) {
- op &= ~VARIABLE_FLAG_MASK;
- FAIL_IF(push_inst(compiler, lgfr(tmp0, src1_r)));
- FAIL_IF(push_inst(compiler, msgfr(tmp0, src2_r)));
- if (dst_r != tmp0) {
- FAIL_IF(push_inst(compiler, lr(dst_r, tmp0)));
- }
- FAIL_IF(push_inst(compiler, aih(tmp0, 1)));
- FAIL_IF(push_inst(compiler, nihf(tmp0, ~1U)));
- FAIL_IF(push_inst(compiler, ipm(flag_r)));
- FAIL_IF(push_inst(compiler, oilh(flag_r, 0x2000)));
+ else if (op & SLJIT_SET_Z)
+ FAIL_IF(update_zero_overflow(compiler, op, dst_r));
+ }
+
+ if (dst & SLJIT_MEM)
+ return store_word(compiler, tmp0, dst, dstw, op & SLJIT_I32_OP);
+
+ return SLJIT_SUCCESS;
+}
+
+static const struct ins_forms multiply_forms = {
+ 0xb2520000, /* msr */
+ 0xb90c0000, /* msgr */
+ 0xb9fd0000, /* msrkc */
+ 0xb9ed0000, /* msgrkc */
+ 0x71000000, /* ms */
+ 0xe30000000051, /* msy */
+ 0xe3000000000c, /* msg */
+};
+
+static const struct ins_forms multiply_overflow_forms = {
+ 0,
+ 0,
+ 0xb9fd0000, /* msrkc */
+ 0xb9ed0000, /* msgrkc */
+ 0,
+ 0xe30000000053, /* msc */
+ 0xe30000000083, /* msgc */
+};
+
+static sljit_s32 sljit_emit_multiply(struct sljit_compiler *compiler, sljit_s32 op,
+ sljit_s32 dst, sljit_sw dstw,
+ sljit_s32 src1, sljit_sw src1w,
+ sljit_s32 src2, sljit_sw src2w)
+{
+ sljit_ins ins;
+
+ if (HAS_FLAGS(op)) {
+ /* if have_misc2 fails, this operation should be emulated. 32 bit emulation:
+ FAIL_IF(push_inst(compiler, lgfr(tmp0, src1_r)));
+ FAIL_IF(push_inst(compiler, msgfr(tmp0, src2_r)));
+ if (dst_r != tmp0) {
+ FAIL_IF(push_inst(compiler, lr(dst_r, tmp0)));
}
- else
- return SLJIT_ERR_UNSUPPORTED;
+ FAIL_IF(push_inst(compiler, aih(tmp0, 1)));
+ FAIL_IF(push_inst(compiler, nihf(tmp0, ~1U)));
+ FAIL_IF(push_inst(compiler, ipm(flag_r)));
+ FAIL_IF(push_inst(compiler, oilh(flag_r, 0x2000))); */
+ return emit_commutative(compiler, &multiply_overflow_forms, dst, dstw, src1, src1w, src2, src2w);
}
- else if ((GET_OPCODE(op) == SLJIT_SUB) && (op & SLJIT_SET_Z) && !signed_flags) {
- /* subtract logical instructions do not set the right flags unfortunately */
- /* instead, negate src2 and issue an add logical */
- /* TODO(mundaym): distinct operand facility where needed */
- if (src1_r != dst_r && src1_r != tmp0) {
- #define LEVAL(i) i(tmp0, src1_r)
- FAIL_IF(push_inst(compiler,
- WHEN2(op & SLJIT_I32_OP, lr, lgr)));
- src1_r = tmp0;
- #undef LEVAL
- }
- sljit_gpr src2_r = FAST_IS_REG(src2) ? gpr(src2 & REG_MASK) : tmp1;
- if (src2 & SLJIT_IMM) {
- /* load src2 into register */
- FAIL_IF(push_load_imm_inst(compiler, src2_r, src2w));
+
+ if (src2 & SLJIT_IMM) {
+ if (is_s16(src2w)) {
+ ins = (op & SLJIT_I32_OP) ? 0xa70c0000 /* mhi */ : 0xa70d0000 /* mghi */;
+ return emit_ri(compiler, ins, dst, src1, src1w, src2w, RI_A);
}
- if (src2 & SLJIT_MEM) {
- /* load src2 into register */
- FAIL_IF(load_word(compiler, src2_r, src2, src2w, tmp1, op & SLJIT_I32_OP));
+
+ if (is_s32(src2w)) {
+ ins = (op & SLJIT_I32_OP) ? 0xc20100000000 /* msfi */ : 0xc20000000000 /* msgfi */;
+ return emit_ri(compiler, ins, dst, src1, src1w, src2w, RIL_A);
}
- if (op & SLJIT_I32_OP) {
- FAIL_IF(push_inst(compiler, lcr(tmp1, src2_r)));
- FAIL_IF(push_inst(compiler, alr(src1_r, tmp1)));
- if (src1_r != dst_r)
- FAIL_IF(push_inst(compiler, lr(dst_r, src1_r)));
+ }
+
+ return emit_commutative(compiler, &multiply_forms, dst, dstw, src1, src1w, src2, src2w);
+}
+
+static sljit_s32 sljit_emit_bitwise_imm(struct sljit_compiler *compiler, sljit_s32 type,
+ sljit_s32 dst, sljit_sw dstw,
+ sljit_s32 src1, sljit_sw src1w,
+ sljit_uw imm, sljit_s32 count16)
+{
+ sljit_s32 mode = compiler->mode;
+ sljit_gpr dst_r = tmp0;
+ sljit_s32 needs_move = 1;
+
+ if (SLOW_IS_REG(dst)) {
+ dst_r = gpr(dst & REG_MASK);
+ if (dst == src1)
+ needs_move = 0;
+ }
+
+ if (needs_move)
+ FAIL_IF(emit_move(compiler, dst_r, src1, src1w));
+
+ if (type == SLJIT_AND) {
+ if (!(mode & SLJIT_I32_OP))
+ FAIL_IF(push_inst(compiler, 0xc00a00000000 /* nihf */ | (dst_r << 36) | (imm >> 32)));
+ return push_inst(compiler, 0xc00b00000000 /* nilf */ | (dst_r << 36) | (imm & 0xffffffff));
+ }
+ else if (type == SLJIT_OR) {
+ if (count16 >= 3) {
+ FAIL_IF(push_inst(compiler, 0xc00c00000000 /* oihf */ | (dst_r << 36) | (imm >> 32)));
+ return push_inst(compiler, 0xc00d00000000 /* oilf */ | (dst_r << 36) | (imm & 0xffffffff));
}
- else {
- FAIL_IF(push_inst(compiler, lcgr(tmp1, src2_r)));
- FAIL_IF(push_inst(compiler, algr(src1_r, tmp1)));
- if (src1_r != dst_r)
- FAIL_IF(push_inst(compiler, lgr(dst_r, src1_r)));
+
+ if (count16 >= 2) {
+ if ((imm & 0x00000000ffffffffull) == 0)
+ return push_inst(compiler, 0xc00c00000000 /* oihf */ | (dst_r << 36) | (imm >> 32));
+ if ((imm & 0xffffffff00000000ull) == 0)
+ return push_inst(compiler, 0xc00d00000000 /* oilf */ | (dst_r << 36) | (imm & 0xffffffff));
}
+
+ if ((imm & 0xffff000000000000ull) != 0)
+ FAIL_IF(push_inst(compiler, 0xa5080000 /* oihh */ | (dst_r << 20) | (imm >> 48)));
+ if ((imm & 0x0000ffff00000000ull) != 0)
+ FAIL_IF(push_inst(compiler, 0xa5090000 /* oihl */ | (dst_r << 20) | ((imm >> 32) & 0xffff)));
+ if ((imm & 0x00000000ffff0000ull) != 0)
+ FAIL_IF(push_inst(compiler, 0xa50a0000 /* oilh */ | (dst_r << 20) | ((imm >> 16) & 0xffff)));
+ if ((imm & 0x000000000000ffffull) != 0 || imm == 0)
+ return push_inst(compiler, 0xa50b0000 /* oill */ | (dst_r << 20) | (imm & 0xffff));
+ return SLJIT_SUCCESS;
}
- else if ((src2 & SLJIT_IMM) && (src1_r == dst_r) && have_op_2_imm(op, src2w)) {
- switch (GET_OPCODE(op) | (op & SLJIT_I32_OP)) {
- #define LEVAL(i) i(dst_r, src2w)
- case SLJIT_ADD:
- if (!HAS_FLAGS(op) || signed_flags) {
- FAIL_IF(push_inst(compiler,
- WHEN2(is_s16(src2w), aghi, agfi)));
- }
- else
- FAIL_IF(push_inst(compiler, LEVAL(algfi)));
- break;
- case SLJIT_ADD32:
- if (!HAS_FLAGS(op) || signed_flags)
- FAIL_IF(push_inst(compiler,
- WHEN2(is_s16(src2w), ahi, afi)));
+ if ((imm & 0xffffffff00000000ull) != 0)
+ FAIL_IF(push_inst(compiler, 0xc00600000000 /* xihf */ | (dst_r << 36) | (imm >> 32)));
+ if ((imm & 0x00000000ffffffffull) != 0 || imm == 0)
+ return push_inst(compiler, 0xc00700000000 /* xilf */ | (dst_r << 36) | (imm & 0xffffffff));
+ return SLJIT_SUCCESS;
+}
+
+static const struct ins_forms bitwise_and_forms = {
+ 0x1400, /* nr */
+ 0xb9800000, /* ngr */
+ 0xb9f40000, /* nrk */
+ 0xb9e40000, /* ngrk */
+ 0x54000000, /* n */
+ 0xe30000000054, /* ny */
+ 0xe30000000080, /* ng */
+};
+
+static const struct ins_forms bitwise_or_forms = {
+ 0x1600, /* or */
+ 0xb9810000, /* ogr */
+ 0xb9f60000, /* ork */
+ 0xb9e60000, /* ogrk */
+ 0x56000000, /* o */
+ 0xe30000000056, /* oy */
+ 0xe30000000081, /* og */
+};
+
+static const struct ins_forms bitwise_xor_forms = {
+ 0x1700, /* xr */
+ 0xb9820000, /* xgr */
+ 0xb9f70000, /* xrk */
+ 0xb9e70000, /* xgrk */
+ 0x57000000, /* x */
+ 0xe30000000057, /* xy */
+ 0xe30000000082, /* xg */
+};
+
+static sljit_s32 sljit_emit_bitwise(struct sljit_compiler *compiler, sljit_s32 op,
+ sljit_s32 dst, sljit_sw dstw,
+ sljit_s32 src1, sljit_sw src1w,
+ sljit_s32 src2, sljit_sw src2w)
+{
+ sljit_s32 type = GET_OPCODE(op);
+ const struct ins_forms *forms;
+
+ if ((src2 & SLJIT_IMM) && (!(op & SLJIT_SET_Z) || (type == SLJIT_AND && dst == SLJIT_UNUSED))) {
+ sljit_s32 count16 = 0;
+ sljit_uw imm = (sljit_uw)src2w;
+
+ if (op & SLJIT_I32_OP)
+ imm &= 0xffffffffull;
+
+ if ((imm & 0x000000000000ffffull) != 0 || imm == 0)
+ count16++;
+ if ((imm & 0x00000000ffff0000ull) != 0)
+ count16++;
+ if ((imm & 0x0000ffff00000000ull) != 0)
+ count16++;
+ if ((imm & 0xffff000000000000ull) != 0)
+ count16++;
+
+ if (type == SLJIT_AND && dst == SLJIT_UNUSED && count16 == 1) {
+ sljit_gpr src_r = tmp0;
+
+ if (FAST_IS_REG(src1))
+ src_r = gpr(src1 & REG_MASK);
else
- FAIL_IF(push_inst(compiler, LEVAL(alfi)));
-
- break;
- #undef LEVAL /* TODO(carenas): move down and refactor? */
- case SLJIT_MUL:
- FAIL_IF(push_inst(compiler, mhi(dst_r, src2w)));
- break;
- case SLJIT_MUL32:
- FAIL_IF(push_inst(compiler, mghi(dst_r, src2w)));
- break;
- case SLJIT_OR32:
- FAIL_IF(push_inst(compiler, oilf(dst_r, src2w)));
- break;
- case SLJIT_XOR32:
- FAIL_IF(push_inst(compiler, xilf(dst_r, src2w)));
- break;
- case SLJIT_AND32:
- FAIL_IF(push_inst(compiler, nilf(dst_r, src2w)));
- break;
- default:
- SLJIT_UNREACHABLE();
+ FAIL_IF(emit_move(compiler, tmp0, src1, src1w));
+
+ if ((imm & 0x000000000000ffffull) != 0 || imm == 0)
+ return push_inst(compiler, 0xa7010000 | (src_r << 20) | imm);
+ if ((imm & 0x00000000ffff0000ull) != 0)
+ return push_inst(compiler, 0xa7000000 | (src_r << 20) | (imm >> 16));
+ if ((imm & 0x0000ffff00000000ull) != 0)
+ return push_inst(compiler, 0xa7030000 | (src_r << 20) | (imm >> 32));
+ return push_inst(compiler, 0xa7020000 | (src_r << 20) | (imm >> 48));
}
+
+ if (!(op & SLJIT_SET_Z))
+ return sljit_emit_bitwise_imm(compiler, type, dst, dstw, src1, src1w, imm, count16);
}
- else if ((src2 & SLJIT_IMM) && have_op_3_imm(op, src2w)) {
- abort(); /* TODO(mundaym): implement */
+
+ if (type == SLJIT_AND)
+ forms = &bitwise_and_forms;
+ else if (type == SLJIT_OR)
+ forms = &bitwise_or_forms;
+ else
+ forms = &bitwise_xor_forms;
+
+ return emit_commutative(compiler, forms, dst, dstw, src1, src1w, src2, src2w);
+}
+
+static sljit_s32 sljit_emit_shift(struct sljit_compiler *compiler, sljit_s32 op,
+ sljit_s32 dst, sljit_sw dstw,
+ sljit_s32 src1, sljit_sw src1w,
+ sljit_s32 src2, sljit_sw src2w)
+{
+ sljit_s32 type = GET_OPCODE(op);
+ sljit_gpr dst_r = SLOW_IS_REG(dst) ? gpr(dst & REG_MASK) : tmp0;
+ sljit_gpr src_r = tmp0;
+ sljit_gpr base_r = tmp0;
+ sljit_ins imm = 0;
+ sljit_ins ins;
+
+ if (FAST_IS_REG(src1))
+ src_r = gpr(src1 & REG_MASK);
+ else
+ FAIL_IF(emit_move(compiler, tmp0, src1, src1w));
+
+ if (src2 & SLJIT_IMM)
+ imm = src2w & ((op & SLJIT_I32_OP) ? 0x1f : 0x3f);
+ else if (FAST_IS_REG(src2))
+ base_r = gpr(src2 & REG_MASK);
+ else {
+ FAIL_IF(emit_move(compiler, tmp1, src2, src2w));
+ base_r = tmp1;
}
- else if ((src2 & SLJIT_MEM) && (dst_r == src1_r)) {
- /* most 32-bit instructions can only handle 12-bit immediate offsets */
- int need_u12 = !have_ldisp() &&
- (op & SLJIT_I32_OP) &&
- (GET_OPCODE(op) != SLJIT_ADDC) &&
- (GET_OPCODE(op) != SLJIT_SUBC);
- struct addr mem;
- if (need_u12)
- FAIL_IF(make_addr_bx(compiler, &mem, src2, src2w, tmp1));
+
+ if ((op & SLJIT_I32_OP) && dst_r == src_r) {
+ if (type == SLJIT_SHL)
+ ins = 0x89000000 /* sll */;
+ else if (type == SLJIT_LSHR)
+ ins = 0x88000000 /* srl */;
else
- FAIL_IF(make_addr_bxy(compiler, &mem, src2, src2w, tmp1));
-
- int can_u12 = is_u12(mem.offset) ? 1 : 0;
- sljit_ins ins = 0;
- switch (GET_OPCODE(op) | (op & SLJIT_I32_OP)) {
- /* 64-bit ops */
- #define LEVAL(i) EVAL(i, dst_r, mem)
- case SLJIT_ADD:
- ins = WHEN2(signed_flags, ag, alg);
- break;
- case SLJIT_SUB:
- ins = WHEN2(signed_flags, sg, slg);
- break;
- case SLJIT_ADDC:
- ins = LEVAL(alcg);
- break;
- case SLJIT_SUBC:
- ins = LEVAL(slbg);
- break;
- case SLJIT_MUL:
- ins = LEVAL(msg);
- break;
- case SLJIT_OR:
- ins = LEVAL(og);
- break;
- case SLJIT_XOR:
- ins = LEVAL(xg);
- break;
- case SLJIT_AND:
- ins = LEVAL(ng);
- break;
- /* 32-bit ops */
- case SLJIT_ADD32:
- if (signed_flags)
- ins = WHEN2(can_u12, a, ay);
- else
- ins = WHEN2(can_u12, al, aly);
- break;
- case SLJIT_SUB32:
- if (signed_flags)
- ins = WHEN2(can_u12, s, sy);
- else
- ins = WHEN2(can_u12, sl, sly);
- break;
- case SLJIT_ADDC32:
- ins = LEVAL(alc);
- break;
- case SLJIT_SUBC32:
- ins = LEVAL(slb);
- break;
- case SLJIT_MUL32:
- ins = WHEN2(can_u12, ms, msy);
- break;
- case SLJIT_OR32:
- ins = WHEN2(can_u12, o, oy);
- break;
- case SLJIT_XOR32:
- ins = WHEN2(can_u12, x, xy);
- break;
- case SLJIT_AND32:
- ins = WHEN2(can_u12, n, ny);
- break;
- #undef LEVAL
- default:
- SLJIT_UNREACHABLE();
- }
- FAIL_IF(push_inst(compiler, ins));
+ ins = 0x8a000000 /* sra */;
+
+ FAIL_IF(push_inst(compiler, ins | (dst_r << 20) | (base_r << 12) | imm));
}
else {
- sljit_gpr src2_r = FAST_IS_REG(src2) ? gpr(src2 & REG_MASK) : tmp1;
- if (src2 & SLJIT_IMM) {
- /* load src2 into register */
- FAIL_IF(push_load_imm_inst(compiler, src2_r, src2w));
- }
- if (src2 & SLJIT_MEM) {
- /* load src2 into register */
- FAIL_IF(load_word(compiler, src2_r, src2, src2w, tmp1, op & SLJIT_I32_OP));
- }
- /* TODO(mundaym): distinct operand facility where needed */
- #define LEVAL(i) i(tmp0, src1_r)
- if (src1_r != dst_r && src1_r != tmp0) {
- FAIL_IF(push_inst(compiler,
- WHEN2(op & SLJIT_I32_OP, lr, lgr)));
- src1_r = tmp0;
- }
- #undef LEVAL
- sljit_ins ins = 0;
- switch (GET_OPCODE(op) | (op & SLJIT_I32_OP)) {
- #define LEVAL(i) i(src1_r, src2_r)
- /* 64-bit ops */
- case SLJIT_ADD:
- ins = WHEN2(signed_flags, agr, algr);
- break;
- case SLJIT_SUB:
- ins = WHEN2(signed_flags, sgr, slgr);
- break;
- case SLJIT_ADDC:
- ins = LEVAL(alcgr);
- break;
- case SLJIT_SUBC:
- ins = LEVAL(slbgr);
- break;
- case SLJIT_MUL:
- ins = LEVAL(msgr);
- break;
- case SLJIT_AND:
- ins = LEVAL(ngr);
- break;
- case SLJIT_OR:
- ins = LEVAL(ogr);
- break;
- case SLJIT_XOR:
- ins = LEVAL(xgr);
- break;
- /* 32-bit ops */
- case SLJIT_ADD32:
- ins = WHEN2(signed_flags, ar, alr);
- break;
- case SLJIT_SUB32:
- ins = WHEN2(signed_flags, sr, slr);
- break;
- case SLJIT_ADDC32:
- ins = LEVAL(alcr);
- break;
- case SLJIT_SUBC32:
- ins = LEVAL(slbr);
- break;
- case SLJIT_MUL32:
- ins = LEVAL(msr);
- break;
- case SLJIT_AND32:
- ins = LEVAL(nr);
- break;
- case SLJIT_OR32:
- ins = LEVAL(or);
- break;
- case SLJIT_XOR32:
- ins = LEVAL(xr);
- break;
- #undef LEVAL
- default:
- SLJIT_UNREACHABLE();
- }
- FAIL_IF(push_inst(compiler, ins));
- #define LEVAL(i) i(dst_r, src1_r)
- if (src1_r != dst_r)
- FAIL_IF(push_inst(compiler,
- WHEN2(op & SLJIT_I32_OP, lr, lgr)));
- #undef LEVAL
+ if (type == SLJIT_SHL)
+ ins = (op & SLJIT_I32_OP) ? 0xeb00000000df /* sllk */ : 0xeb000000000d /* sllg */;
+ else if (type == SLJIT_LSHR)
+ ins = (op & SLJIT_I32_OP) ? 0xeb00000000de /* srlk */ : 0xeb000000000c /* srlg */;
+ else
+ ins = (op & SLJIT_I32_OP) ? 0xeb00000000dc /* srak */ : 0xeb000000000a /* srag */;
+
+ FAIL_IF(push_inst(compiler, ins | (dst_r << 36) | (src_r << 32) | (base_r << 28) | (imm << 16)));
}
- /* write condition code to emulated flag register */
- if (op & VARIABLE_FLAG_MASK)
- FAIL_IF(push_inst(compiler, ipm(flag_r)));
+ if ((op & SLJIT_SET_Z) && type != SLJIT_ASHR)
+ return push_inst(compiler, (op & SLJIT_I32_OP) ? or(dst_r, dst_r) : ogr(dst_r, dst_r));
+
+ return SLJIT_SUCCESS;
+}
+
+static const struct ins_forms addc_forms = {
+ 0xb9980000, /* alcr */
+ 0xb9880000, /* alcgr */
+ 0,
+ 0,
+ 0,
+ 0xe30000000098, /* alc */
+ 0xe30000000088, /* alcg */
+};
+
+static const struct ins_forms subc_forms = {
+ 0xb9990000, /* slbr */
+ 0xb9890000, /* slbgr */
+ 0,
+ 0,
+ 0,
+ 0xe30000000099, /* slb */
+ 0xe30000000089, /* slbg */
+};
+
+SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compiler, sljit_s32 op,
+ sljit_s32 dst, sljit_sw dstw,
+ sljit_s32 src1, sljit_sw src1w,
+ sljit_s32 src2, sljit_sw src2w)
+{
+ CHECK_ERROR();
+ CHECK(check_sljit_emit_op2(compiler, op, dst, dstw, src1, src1w, src2, src2w));
+ ADJUST_LOCAL_OFFSET(dst, dstw);
+ ADJUST_LOCAL_OFFSET(src1, src1w);
+ ADJUST_LOCAL_OFFSET(src2, src2w);
+
+ if (dst == SLJIT_UNUSED && !HAS_FLAGS(op))
+ return SLJIT_SUCCESS;
- /* write zero flag to emulated flag register */
- if (op & SLJIT_SET_Z)
- FAIL_IF(push_store_zero_flag(compiler, op, dst_r));
+ compiler->mode = op & SLJIT_I32_OP;
+ compiler->status_flags_state = op & (VARIABLE_FLAG_MASK | SLJIT_SET_Z);
+
+ if (GET_OPCODE(op) >= SLJIT_ADD || GET_OPCODE(op) <= SLJIT_SUBC)
+ compiler->status_flags_state |= SLJIT_CURRENT_FLAGS_ADD_SUB;
+
+ if (is_commutative(op) && (src1 & SLJIT_IMM) && !(src2 & SLJIT_IMM)) {
+ src1 ^= src2;
+ src2 ^= src1;
+ src1 ^= src2;
+
+ src1w ^= src2w;
+ src2w ^= src1w;
+ src1w ^= src2w;
+ }
- /* finally write the result to memory if required */
- if (dst & SLJIT_MEM) {
- SLJIT_ASSERT(dst_r != tmp1);
- /* TODO(carenas): s/FAIL_IF/ return */
- FAIL_IF(store_word(compiler, dst_r, dst, dstw, tmp1, op & SLJIT_I32_OP));
+ switch (GET_OPCODE(op)) {
+ case SLJIT_ADD:
+ return sljit_emit_add(compiler, op, dst, dstw, src1, src1w, src2, src2w);
+ case SLJIT_ADDC:
+ FAIL_IF(emit_commutative(compiler, &addc_forms, dst, dstw, src1, src1w, src2, src2w));
+ if (dst & SLJIT_MEM)
+ return store_word(compiler, tmp0, dst, dstw, op & SLJIT_I32_OP);
+ return SLJIT_SUCCESS;
+ case SLJIT_SUB:
+ return sljit_emit_sub(compiler, op, dst, dstw, src1, src1w, src2, src2w);
+ case SLJIT_SUBC:
+ FAIL_IF(emit_non_commutative(compiler, &subc_forms, dst, dstw, src1, src1w, src2, src2w));
+ if (dst & SLJIT_MEM)
+ return store_word(compiler, tmp0, dst, dstw, op & SLJIT_I32_OP);
+ return SLJIT_SUCCESS;
+ case SLJIT_MUL:
+ FAIL_IF(sljit_emit_multiply(compiler, op, dst, dstw, src1, src1w, src2, src2w));
+ break;
+ case SLJIT_AND:
+ case SLJIT_OR:
+ case SLJIT_XOR:
+ FAIL_IF(sljit_emit_bitwise(compiler, op, dst, dstw, src1, src1w, src2, src2w));
+ break;
+ case SLJIT_SHL:
+ case SLJIT_LSHR:
+ case SLJIT_ASHR:
+ FAIL_IF(sljit_emit_shift(compiler, op, dst, dstw, src1, src1w, src2, src2w));
+ break;
}
+ if (dst & SLJIT_MEM)
+ return store_word(compiler, tmp0, dst, dstw, op & SLJIT_I32_OP);
return SLJIT_SUCCESS;
}
@@ -2428,7 +2663,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_src(
case SLJIT_FAST_RETURN:
src_r = FAST_IS_REG(src) ? gpr(src) : tmp1;
if (src & SLJIT_MEM)
- FAIL_IF(load_word(compiler, tmp1, src, srcw, tmp1, 0));
+ FAIL_IF(load_word(compiler, tmp1, src, srcw, 0));
return push_inst(compiler, br(src_r));
case SLJIT_SKIP_FRAMES_BEFORE_FAST_RETURN:
@@ -2507,7 +2742,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fast_enter(struct sljit_compiler *
return push_inst(compiler, lgr(gpr(dst), fast_link_r));
/* memory */
- return store_word(compiler, fast_link_r, dst, dstw, tmp1, 0);
+ return store_word(compiler, fast_link_r, dst, dstw, 0);
}
/* --------------------------------------------------------------------- */
@@ -2532,15 +2767,11 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_label* sljit_emit_label(struct sljit_compi
SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compiler *compiler, sljit_s32 type)
{
- sljit_u8 mask = ((type & 0xff) < SLJIT_JUMP) ? get_cc(type & 0xff) : 0xf;
+ sljit_u8 mask = ((type & 0xff) < SLJIT_JUMP) ? get_cc(compiler, type & 0xff) : 0xf;
CHECK_ERROR_PTR();
CHECK_PTR(check_sljit_emit_jump(compiler, type));
- /* reload condition code */
- if (mask != 0xf)
- PTR_FAIL_IF(push_load_cc(compiler, type & 0xff));
-
/* record jump */
struct sljit_jump *jump = (struct sljit_jump *)
ensure_abuf(compiler, sizeof(struct sljit_jump));
@@ -2585,7 +2816,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_ijump(struct sljit_compiler *compi
FAIL_IF(push_load_imm_inst(compiler, src_r, srcw));
}
else if (src & SLJIT_MEM)
- FAIL_IF(load_word(compiler, src_r, src, srcw, tmp1, 0 /* 64-bit */));
+ FAIL_IF(load_word(compiler, src_r, src, srcw, 0 /* 64-bit */));
/* emit jump instruction */
if (type >= SLJIT_FAST_CALL)
@@ -2613,7 +2844,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co
sljit_s32 dst, sljit_sw dstw,
sljit_s32 type)
{
- sljit_u8 mask = get_cc(type & 0xff);
+ sljit_u8 mask = get_cc(compiler, type & 0xff);
CHECK_ERROR();
CHECK(check_sljit_emit_op_flags(compiler, op, dst, dstw, type));
@@ -2624,9 +2855,11 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co
case SLJIT_AND:
case SLJIT_OR:
case SLJIT_XOR:
+ compiler->status_flags_state = op & SLJIT_SET_Z;
+
/* dst is also source operand */
if (dst & SLJIT_MEM)
- FAIL_IF(load_word(compiler, dst_r, dst, dstw, tmp1, op & SLJIT_I32_OP));
+ FAIL_IF(load_word(compiler, dst_r, dst, dstw, op & SLJIT_I32_OP));
break;
case SLJIT_MOV:
@@ -2638,9 +2871,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co
SLJIT_UNREACHABLE();
}
- if (mask != 0xf)
- FAIL_IF(push_load_cc(compiler, type & 0xff));
-
/* TODO(mundaym): fold into cmov helper function? */
#define LEVAL(i) i(loc_r, 1, mask)
if (have_lscond2()) {
@@ -2671,14 +2901,9 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co
#undef LEVAL
}
- /* set zero flag if needed */
- if (op & SLJIT_SET_Z)
- FAIL_IF(push_store_zero_flag(compiler, op, dst_r));
-
/* store result to memory if required */
- /* TODO(carenas): s/FAIL_IF/ return */
if (dst & SLJIT_MEM)
- FAIL_IF(store_word(compiler, dst_r, dst, dstw, tmp1, op & SLJIT_I32_OP));
+ return store_word(compiler, dst_r, dst, dstw, op & SLJIT_I32_OP);
return SLJIT_SUCCESS;
}
@@ -2687,16 +2912,13 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_cmov(struct sljit_compiler *compil
sljit_s32 dst_reg,
sljit_s32 src, sljit_sw srcw)
{
- sljit_u8 mask = get_cc(type & 0xff);
+ sljit_u8 mask = get_cc(compiler, type & 0xff);
sljit_gpr dst_r = gpr(dst_reg & ~SLJIT_I32_OP);
sljit_gpr src_r = FAST_IS_REG(src) ? gpr(src) : tmp0;
CHECK_ERROR();
CHECK(check_sljit_emit_cmov(compiler, type, dst_reg, src, srcw));
- if (mask != 0xf)
- FAIL_IF(push_load_cc(compiler, type & 0xff));
-
if (src & SLJIT_IMM) {
/* TODO(mundaym): fast path with lscond2 */
FAIL_IF(push_load_imm_inst(compiler, src_r, srcw));
@@ -2750,7 +2972,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_const* sljit_emit_const(struct sljit_compi
}
if (dst & SLJIT_MEM)
- PTR_FAIL_IF(store_word(compiler, dst_r, dst, dstw, tmp1, 0 /* always 64-bit */));
+ PTR_FAIL_IF(store_word(compiler, dst_r, dst, dstw, 0 /* always 64-bit */));
return (struct sljit_const*)const_;
}
@@ -2797,7 +3019,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_put_label *sljit_emit_put_label(
}
if (dst & SLJIT_MEM)
- PTR_FAIL_IF(store_word(compiler, dst_r, dst, dstw, tmp1, 0));
+ PTR_FAIL_IF(store_word(compiler, dst_r, dst, dstw, 0));
return put_label;
}
diff --git a/thirdparty/pcre2/src/sljit/sljitNativeSPARC_32.c b/thirdparty/pcre2/src/sljit/sljitNativeSPARC_32.c
index e5167f02ba..28886405af 100644
--- a/thirdparty/pcre2/src/sljit/sljitNativeSPARC_32.c
+++ b/thirdparty/pcre2/src/sljit/sljitNativeSPARC_32.c
@@ -93,18 +93,21 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl
return push_inst(compiler, ADD | D(dst) | S1(dst) | IMM(1), UNMOVABLE_INS);
case SLJIT_ADD:
+ compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB;
return push_inst(compiler, ADD | (flags & SET_FLAGS) | D(dst) | S1(src1) | ARG2(flags, src2), DR(dst) | (flags & SET_FLAGS));
case SLJIT_ADDC:
return push_inst(compiler, ADDC | (flags & SET_FLAGS) | D(dst) | S1(src1) | ARG2(flags, src2), DR(dst) | (flags & SET_FLAGS));
case SLJIT_SUB:
+ compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB;
return push_inst(compiler, SUB | (flags & SET_FLAGS) | D(dst) | S1(src1) | ARG2(flags, src2), DR(dst) | (flags & SET_FLAGS));
case SLJIT_SUBC:
return push_inst(compiler, SUBC | (flags & SET_FLAGS) | D(dst) | S1(src1) | ARG2(flags, src2), DR(dst) | (flags & SET_FLAGS));
case SLJIT_MUL:
+ compiler->status_flags_state = 0;
FAIL_IF(push_inst(compiler, SMUL | D(dst) | S1(src1) | ARG2(flags, src2), DR(dst)));
if (!(flags & SET_FLAGS))
return SLJIT_SUCCESS;
diff --git a/thirdparty/pcre2/src/sljit/sljitNativeSPARC_common.c b/thirdparty/pcre2/src/sljit/sljitNativeSPARC_common.c
index 544d80d028..e833f09d7a 100644
--- a/thirdparty/pcre2/src/sljit/sljitNativeSPARC_common.c
+++ b/thirdparty/pcre2/src/sljit/sljitNativeSPARC_common.c
@@ -1275,16 +1275,14 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_label* sljit_emit_label(struct sljit_compi
return label;
}
-static sljit_ins get_cc(sljit_s32 type)
+static sljit_ins get_cc(struct sljit_compiler *compiler, sljit_s32 type)
{
switch (type) {
case SLJIT_EQUAL:
- case SLJIT_MUL_NOT_OVERFLOW:
case SLJIT_NOT_EQUAL_F64: /* Unordered. */
return DA(0x1);
case SLJIT_NOT_EQUAL:
- case SLJIT_MUL_OVERFLOW:
case SLJIT_EQUAL_F64:
return DA(0x9);
@@ -1317,10 +1315,16 @@ static sljit_ins get_cc(sljit_s32 type)
return DA(0x2);
case SLJIT_OVERFLOW:
+ if (!(compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD_SUB))
+ return DA(0x9);
+
case SLJIT_UNORDERED_F64:
return DA(0x7);
case SLJIT_NOT_OVERFLOW:
+ if (!(compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD_SUB))
+ return DA(0x1);
+
case SLJIT_ORDERED_F64:
return DA(0xf);
@@ -1347,7 +1351,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compile
if (((compiler->delay_slot & DST_INS_MASK) != UNMOVABLE_INS) && !(compiler->delay_slot & ICC_IS_SET))
jump->flags |= IS_MOVABLE;
#if (defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32)
- PTR_FAIL_IF(push_inst(compiler, BICC | get_cc(type ^ 1) | 5, UNMOVABLE_INS));
+ PTR_FAIL_IF(push_inst(compiler, BICC | get_cc(compiler, type ^ 1) | 5, UNMOVABLE_INS));
#else
#error "Implementation required"
#endif
@@ -1357,7 +1361,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compile
if (((compiler->delay_slot & DST_INS_MASK) != UNMOVABLE_INS) && !(compiler->delay_slot & FCC_IS_SET))
jump->flags |= IS_MOVABLE;
#if (defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32)
- PTR_FAIL_IF(push_inst(compiler, FBFCC | get_cc(type ^ 1) | 5, UNMOVABLE_INS));
+ PTR_FAIL_IF(push_inst(compiler, FBFCC | get_cc(compiler, type ^ 1) | 5, UNMOVABLE_INS));
#else
#error "Implementation required"
#endif
@@ -1474,9 +1478,9 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co
type &= 0xff;
if (type < SLJIT_EQUAL_F64)
- FAIL_IF(push_inst(compiler, BICC | get_cc(type) | 3, UNMOVABLE_INS));
+ FAIL_IF(push_inst(compiler, BICC | get_cc(compiler, type) | 3, UNMOVABLE_INS));
else
- FAIL_IF(push_inst(compiler, FBFCC | get_cc(type) | 3, UNMOVABLE_INS));
+ FAIL_IF(push_inst(compiler, FBFCC | get_cc(compiler, type) | 3, UNMOVABLE_INS));
FAIL_IF(push_inst(compiler, OR | D(reg) | S1(0) | IMM(1), UNMOVABLE_INS));
FAIL_IF(push_inst(compiler, OR | D(reg) | S1(0) | IMM(0), UNMOVABLE_INS));
diff --git a/thirdparty/pcre2/src/sljit/sljitNativeX86_common.c b/thirdparty/pcre2/src/sljit/sljitNativeX86_common.c
index ddcc5ebf76..515d98aefd 100644
--- a/thirdparty/pcre2/src/sljit/sljitNativeX86_common.c
+++ b/thirdparty/pcre2/src/sljit/sljitNativeX86_common.c
@@ -411,11 +411,9 @@ static sljit_u8 get_jump_code(sljit_s32 type)
return 0x8e /* jle */;
case SLJIT_OVERFLOW:
- case SLJIT_MUL_OVERFLOW:
return 0x80 /* jo */;
case SLJIT_NOT_OVERFLOW:
- case SLJIT_MUL_NOT_OVERFLOW:
return 0x81 /* jno */;
case SLJIT_UNORDERED_F64:
diff --git a/thirdparty/pcre2/src/sljit/sljitUtils.c b/thirdparty/pcre2/src/sljit/sljitUtils.c
index 08ca35cf37..9bce714735 100644
--- a/thirdparty/pcre2/src/sljit/sljitUtils.c
+++ b/thirdparty/pcre2/src/sljit/sljitUtils.c
@@ -48,7 +48,7 @@ static HANDLE allocator_lock;
static SLJIT_INLINE void allocator_grab_lock(void)
{
HANDLE lock;
- if (SLJIT_UNLIKELY(!allocator_lock)) {
+ if (SLJIT_UNLIKELY(!InterlockedCompareExchangePointer(&allocator_lock, NULL, NULL))) {
lock = CreateMutex(NULL, FALSE, NULL);
if (InterlockedCompareExchangePointer(&allocator_lock, lock, NULL))
CloseHandle(lock);
@@ -146,9 +146,13 @@ static SLJIT_INLINE sljit_sw get_page_alignment(void) {
#include <unistd.h>
static SLJIT_INLINE sljit_sw get_page_alignment(void) {
- static sljit_sw sljit_page_align;
- if (!sljit_page_align) {
+ static sljit_sw sljit_page_align = -1;
+ if (sljit_page_align < 0) {
+#ifdef _SC_PAGESIZE
sljit_page_align = sysconf(_SC_PAGESIZE);
+#else
+ sljit_page_align = getpagesize();
+#endif
/* Should never happen. */
if (sljit_page_align < 0)
sljit_page_align = 4096;
diff --git a/thirdparty/pcre2/src/sljit/sljitWXExecAllocator.c b/thirdparty/pcre2/src/sljit/sljitWXExecAllocator.c
index 6ef71f7d83..72d5b8dd2b 100644
--- a/thirdparty/pcre2/src/sljit/sljitWXExecAllocator.c
+++ b/thirdparty/pcre2/src/sljit/sljitWXExecAllocator.c
@@ -121,14 +121,18 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_malloc_exec(sljit_uw size)
static pthread_mutex_t se_lock = PTHREAD_MUTEX_INITIALIZER;
#endif
static int se_protected = !SLJIT_PROT_WX;
+ int prot = PROT_READ | PROT_WRITE | SLJIT_PROT_WX;
sljit_uw* ptr;
if (SLJIT_UNLIKELY(se_protected < 0))
return NULL;
+#ifdef PROT_MAX
+ prot |= PROT_MAX(PROT_READ | PROT_WRITE | PROT_EXEC);
+#endif
+
size += sizeof(sljit_uw);
- ptr = (sljit_uw*)mmap(NULL, size, PROT_READ | PROT_WRITE | SLJIT_PROT_WX,
- MAP_PRIVATE | MAP_ANON, -1, 0);
+ ptr = (sljit_uw*)mmap(NULL, size, prot, MAP_PRIVATE | MAP_ANON, -1, 0);
if (ptr == MAP_FAILED)
return NULL;
diff --git a/thirdparty/tinyexr/tinyexr.cc b/thirdparty/tinyexr/tinyexr.cc
index fef8f66c98..70115ea5c2 100644
--- a/thirdparty/tinyexr/tinyexr.cc
+++ b/thirdparty/tinyexr/tinyexr.cc
@@ -4,5 +4,9 @@
#endif
#endif
+// -- GODOT start --
+#include <zlib.h> // Should come before including tinyexr.
+// -- GODOT end --
+
#define TINYEXR_IMPLEMENTATION
#include "tinyexr.h"
diff --git a/thirdparty/tinyexr/tinyexr.h b/thirdparty/tinyexr/tinyexr.h
index a3e7b23161..969f07ad79 100644
--- a/thirdparty/tinyexr/tinyexr.h
+++ b/thirdparty/tinyexr/tinyexr.h
@@ -1,7 +1,7 @@
#ifndef TINYEXR_H_
#define TINYEXR_H_
/*
-Copyright (c) 2014 - 2020, Syoyo Fujita and many contributors.
+Copyright (c) 2014 - 2021, Syoyo Fujita and many contributors.
All rights reserved.
Redistribution and use in source and binary forms, with or without
@@ -65,6 +65,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// End of OpenEXR license -------------------------------------------------
+
//
//
// Do this:
@@ -88,7 +89,21 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
extern "C" {
#endif
-// Use embedded miniz or not to decode ZIP format pixel. Linking with zlib
+#if defined(_M_IX86) || defined(_M_X64) || defined(__i386__) || \
+ defined(__i386) || defined(__i486__) || defined(__i486) || \
+ defined(i386) || defined(__ia64__) || defined(__x86_64__)
+#define TINYEXR_X86_OR_X64_CPU 1
+#else
+#define TINYEXR_X86_OR_X64_CPU 0
+#endif
+
+#if (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) || TINYEXR_X86_OR_X64_CPU
+#define TINYEXR_LITTLE_ENDIAN 1
+#else
+#define TINYEXR_LITTLE_ENDIAN 0
+#endif
+
+// Use miniz or not to decode ZIP format pixel. Linking with zlib
// required if this flas is 0.
#ifndef TINYEXR_USE_MINIZ
#define TINYEXR_USE_MINIZ (1)
@@ -162,9 +177,13 @@ extern "C" {
typedef struct _EXRVersion {
int version; // this must be 2
- int tiled; // tile format image
+ // tile format image;
+ // not zero for only a single-part "normal" tiled file (according to spec.)
+ int tiled;
int long_name; // long name attribute
- int non_image; // deep image(EXR 2.0)
+ // deep image(EXR 2.0);
+ // for a multi-part file, indicates that at least one part is of type deep* (according to spec.)
+ int non_image;
int multipart; // multi-part(EXR 2.0)
} EXRVersion;
@@ -222,6 +241,8 @@ typedef struct _EXRHeader {
int tile_rounding_mode;
int long_name;
+ // for a single-part file, agree with the version field bit 11
+ // for a multi-part file, it is consistent with the type of part
int non_image;
int multipart;
unsigned int header_len;
@@ -244,7 +265,11 @@ typedef struct _EXRHeader {
// ParseEXRHeaderFrom(Meomory|File), then users
// can edit it(only valid for HALF pixel type
// channel)
-
+ // name attribute required for multipart files;
+ // must be unique and non empty (according to spec.);
+ // use EXRSetNameAttr for setting value;
+ // max 255 character allowed - excluding terminating zero
+ char name[256];
} EXRHeader;
typedef struct _EXRMultiPartHeader {
@@ -256,6 +281,10 @@ typedef struct _EXRMultiPartHeader {
typedef struct _EXRImage {
EXRTile *tiles; // Tiled pixel data. The application must reconstruct image
// from tiles manually. NULL if scanline format.
+ struct _EXRImage* next_level; // NULL if scanline format or image is the last level.
+ int level_x; // x level index
+ int level_y; // y level index
+
unsigned char **images; // image[channels][pixels]. NULL if tiled format.
int width;
@@ -339,9 +368,15 @@ extern int SaveEXR(const float *data, const int width, const int height,
const int components, const int save_as_fp16,
const char *filename, const char **err);
+// Returns the number of resolution levels of the image (including the base)
+extern int EXRNumLevels(const EXRImage* exr_image);
+
// Initialize EXRHeader struct
extern void InitEXRHeader(EXRHeader *exr_header);
+// Set name attribute of EXRHeader struct (it makes a copy)
+extern void EXRSetNameAttr(EXRHeader *exr_header, const char* name);
+
// Initialize EXRImage struct
extern void InitEXRImage(EXRImage *exr_image);
@@ -465,6 +500,30 @@ extern size_t SaveEXRImageToMemory(const EXRImage *image,
const EXRHeader *exr_header,
unsigned char **memory, const char **err);
+// Saves multi-channel, multi-frame OpenEXR image to a memory.
+// Image is compressed using EXRImage.compression value.
+// File global attributes (eg. display_window) must be set in the first header.
+// Returns negative value and may set error string in `err` when there's an
+// error
+// When there was an error message, Application must free `err` with
+// FreeEXRErrorMessage()
+extern int SaveEXRMultipartImageToFile(const EXRImage *images,
+ const EXRHeader **exr_headers,
+ unsigned int num_parts,
+ const char *filename, const char **err);
+
+// Saves multi-channel, multi-frame OpenEXR image to a memory.
+// Image is compressed using EXRImage.compression value.
+// File global attributes (eg. display_window) must be set in the first header.
+// Return the number of bytes if success.
+// Return zero and will set error string in `err` when there's an
+// error.
+// When there was an error message, Application must free `err` with
+// FreeEXRErrorMessage()
+extern size_t SaveEXRMultipartImageToMemory(const EXRImage *images,
+ const EXRHeader **exr_headers,
+ unsigned int num_parts,
+ unsigned char **memory, const char **err);
// Loads single-frame OpenEXR deep image.
// Application must free memory of variables in DeepImage(image, offset_table)
// Returns negative value and may set error string in `err` when there's an
@@ -514,6 +573,9 @@ extern int LoadEXRFromMemory(float **out_rgba, int *width, int *height,
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
+#ifndef NOMINMAX
+#define NOMINMAX
+#endif
#include <windows.h> // for UTF-8
#endif
@@ -530,8 +592,11 @@ extern int LoadEXRFromMemory(float **out_rgba, int *width, int *height,
#include <limits>
#include <string>
#include <vector>
+#include <set>
-#if __cplusplus > 199711L
+// https://stackoverflow.com/questions/5047971/how-do-i-check-for-c11-support
+#if __cplusplus > 199711L || (defined(_MSC_VER) && _MSC_VER >= 1900)
+#define TINYEXR_HAS_CXX11 (1)
// C++11
#include <cstdint>
@@ -547,6 +612,7 @@ extern int LoadEXRFromMemory(float **out_rgba, int *width, int *height,
#endif
#if TINYEXR_USE_MINIZ
+#include <miniz.h>
#else
// Issue #46. Please include your own zlib-compatible API header before
// including `tinyexr.h`
@@ -588,6467 +654,6 @@ typedef long long tinyexr_int64;
#endif
#endif
-#if TINYEXR_USE_MINIZ
-
-namespace miniz {
-
-#ifdef __clang__
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wc++11-long-long"
-#pragma clang diagnostic ignored "-Wold-style-cast"
-#pragma clang diagnostic ignored "-Wpadded"
-#pragma clang diagnostic ignored "-Wsign-conversion"
-#pragma clang diagnostic ignored "-Wc++11-extensions"
-#pragma clang diagnostic ignored "-Wconversion"
-#pragma clang diagnostic ignored "-Wunused-function"
-#pragma clang diagnostic ignored "-Wc++98-compat-pedantic"
-#pragma clang diagnostic ignored "-Wundef"
-
-#if __has_warning("-Wcomma")
-#pragma clang diagnostic ignored "-Wcomma"
-#endif
-
-#if __has_warning("-Wmacro-redefined")
-#pragma clang diagnostic ignored "-Wmacro-redefined"
-#endif
-
-#if __has_warning("-Wcast-qual")
-#pragma clang diagnostic ignored "-Wcast-qual"
-#endif
-
-#if __has_warning("-Wzero-as-null-pointer-constant")
-#pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant"
-#endif
-
-#if __has_warning("-Wtautological-constant-compare")
-#pragma clang diagnostic ignored "-Wtautological-constant-compare"
-#endif
-
-#if __has_warning("-Wextra-semi-stmt")
-#pragma clang diagnostic ignored "-Wextra-semi-stmt"
-#endif
-
-#endif
-
-/* miniz.c v1.15 - public domain deflate/inflate, zlib-subset, ZIP
- reading/writing/appending, PNG writing
- See "unlicense" statement at the end of this file.
- Rich Geldreich <richgel99@gmail.com>, last updated Oct. 13, 2013
- Implements RFC 1950: http://www.ietf.org/rfc/rfc1950.txt and RFC 1951:
- http://www.ietf.org/rfc/rfc1951.txt
-
- Most API's defined in miniz.c are optional. For example, to disable the
- archive related functions just define
- MINIZ_NO_ARCHIVE_APIS, or to get rid of all stdio usage define MINIZ_NO_STDIO
- (see the list below for more macros).
-
- * Change History
- 10/13/13 v1.15 r4 - Interim bugfix release while I work on the next major
- release with Zip64 support (almost there!):
- - Critical fix for the MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY bug
- (thanks kahmyong.moon@hp.com) which could cause locate files to not find
- files. This bug
- would only have occurred in earlier versions if you explicitly used this
- flag, OR if you used mz_zip_extract_archive_file_to_heap() or
- mz_zip_add_mem_to_archive_file_in_place()
- (which used this flag). If you can't switch to v1.15 but want to fix
- this bug, just remove the uses of this flag from both helper funcs (and of
- course don't use the flag).
- - Bugfix in mz_zip_reader_extract_to_mem_no_alloc() from kymoon when
- pUser_read_buf is not NULL and compressed size is > uncompressed size
- - Fixing mz_zip_reader_extract_*() funcs so they don't try to extract
- compressed data from directory entries, to account for weird zipfiles which
- contain zero-size compressed data on dir entries.
- Hopefully this fix won't cause any issues on weird zip archives,
- because it assumes the low 16-bits of zip external attributes are DOS
- attributes (which I believe they always are in practice).
- - Fixing mz_zip_reader_is_file_a_directory() so it doesn't check the
- internal attributes, just the filename and external attributes
- - mz_zip_reader_init_file() - missing MZ_FCLOSE() call if the seek failed
- - Added cmake support for Linux builds which builds all the examples,
- tested with clang v3.3 and gcc v4.6.
- - Clang fix for tdefl_write_image_to_png_file_in_memory() from toffaletti
- - Merged MZ_FORCEINLINE fix from hdeanclark
- - Fix <time.h> include before config #ifdef, thanks emil.brink
- - Added tdefl_write_image_to_png_file_in_memory_ex(): supports Y flipping
- (super useful for OpenGL apps), and explicit control over the compression
- level (so you can
- set it to 1 for real-time compression).
- - Merged in some compiler fixes from paulharris's github repro.
- - Retested this build under Windows (VS 2010, including static analysis),
- tcc 0.9.26, gcc v4.6 and clang v3.3.
- - Added example6.c, which dumps an image of the mandelbrot set to a PNG
- file.
- - Modified example2 to help test the
- MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY flag more.
- - In r3: Bugfix to mz_zip_writer_add_file() found during merge: Fix
- possible src file fclose() leak if alignment bytes+local header file write
- faiiled
- - In r4: Minor bugfix to mz_zip_writer_add_from_zip_reader():
- Was pushing the wrong central dir header offset, appears harmless in this
- release, but it became a problem in the zip64 branch
- 5/20/12 v1.14 - MinGW32/64 GCC 4.6.1 compiler fixes: added MZ_FORCEINLINE,
- #include <time.h> (thanks fermtect).
- 5/19/12 v1.13 - From jason@cornsyrup.org and kelwert@mtu.edu - Fix
- mz_crc32() so it doesn't compute the wrong CRC-32's when mz_ulong is 64-bit.
- - Temporarily/locally slammed in "typedef unsigned long mz_ulong" and
- re-ran a randomized regression test on ~500k files.
- - Eliminated a bunch of warnings when compiling with GCC 32-bit/64.
- - Ran all examples, miniz.c, and tinfl.c through MSVC 2008's /analyze
- (static analysis) option and fixed all warnings (except for the silly
- "Use of the comma-operator in a tested expression.." analysis warning,
- which I purposely use to work around a MSVC compiler warning).
- - Created 32-bit and 64-bit Codeblocks projects/workspace. Built and
- tested Linux executables. The codeblocks workspace is compatible with
- Linux+Win32/x64.
- - Added miniz_tester solution/project, which is a useful little app
- derived from LZHAM's tester app that I use as part of the regression test.
- - Ran miniz.c and tinfl.c through another series of regression testing on
- ~500,000 files and archives.
- - Modified example5.c so it purposely disables a bunch of high-level
- functionality (MINIZ_NO_STDIO, etc.). (Thanks to corysama for the
- MINIZ_NO_STDIO bug report.)
- - Fix ftell() usage in examples so they exit with an error on files which
- are too large (a limitation of the examples, not miniz itself).
- 4/12/12 v1.12 - More comments, added low-level example5.c, fixed a couple
- minor level_and_flags issues in the archive API's.
- level_and_flags can now be set to MZ_DEFAULT_COMPRESSION. Thanks to Bruce
- Dawson <bruced@valvesoftware.com> for the feedback/bug report.
- 5/28/11 v1.11 - Added statement from unlicense.org
- 5/27/11 v1.10 - Substantial compressor optimizations:
- - Level 1 is now ~4x faster than before. The L1 compressor's throughput
- now varies between 70-110MB/sec. on a
- - Core i7 (actual throughput varies depending on the type of data, and x64
- vs. x86).
- - Improved baseline L2-L9 compression perf. Also, greatly improved
- compression perf. issues on some file types.
- - Refactored the compression code for better readability and
- maintainability.
- - Added level 10 compression level (L10 has slightly better ratio than
- level 9, but could have a potentially large
- drop in throughput on some files).
- 5/15/11 v1.09 - Initial stable release.
-
- * Low-level Deflate/Inflate implementation notes:
-
- Compression: Use the "tdefl" API's. The compressor supports raw, static,
- and dynamic blocks, lazy or
- greedy parsing, match length filtering, RLE-only, and Huffman-only streams.
- It performs and compresses
- approximately as well as zlib.
-
- Decompression: Use the "tinfl" API's. The entire decompressor is
- implemented as a single function
- coroutine: see tinfl_decompress(). It supports decompression into a 32KB
- (or larger power of 2) wrapping buffer, or into a memory
- block large enough to hold the entire file.
-
- The low-level tdefl/tinfl API's do not make any use of dynamic memory
- allocation.
-
- * zlib-style API notes:
-
- miniz.c implements a fairly large subset of zlib. There's enough
- functionality present for it to be a drop-in
- zlib replacement in many apps:
- The z_stream struct, optional memory allocation callbacks
- deflateInit/deflateInit2/deflate/deflateReset/deflateEnd/deflateBound
- inflateInit/inflateInit2/inflate/inflateEnd
- compress, compress2, compressBound, uncompress
- CRC-32, Adler-32 - Using modern, minimal code size, CPU cache friendly
- routines.
- Supports raw deflate streams or standard zlib streams with adler-32
- checking.
-
- Limitations:
- The callback API's are not implemented yet. No support for gzip headers or
- zlib static dictionaries.
- I've tried to closely emulate zlib's various flavors of stream flushing
- and return status codes, but
- there are no guarantees that miniz.c pulls this off perfectly.
-
- * PNG writing: See the tdefl_write_image_to_png_file_in_memory() function,
- originally written by
- Alex Evans. Supports 1-4 bytes/pixel images.
-
- * ZIP archive API notes:
-
- The ZIP archive API's where designed with simplicity and efficiency in
- mind, with just enough abstraction to
- get the job done with minimal fuss. There are simple API's to retrieve file
- information, read files from
- existing archives, create new archives, append new files to existing
- archives, or clone archive data from
- one archive to another. It supports archives located in memory or the heap,
- on disk (using stdio.h),
- or you can specify custom file read/write callbacks.
-
- - Archive reading: Just call this function to read a single file from a
- disk archive:
-
- void *mz_zip_extract_archive_file_to_heap(const char *pZip_filename, const
- char *pArchive_name,
- size_t *pSize, mz_uint zip_flags);
-
- For more complex cases, use the "mz_zip_reader" functions. Upon opening an
- archive, the entire central
- directory is located and read as-is into memory, and subsequent file access
- only occurs when reading individual files.
-
- - Archives file scanning: The simple way is to use this function to scan a
- loaded archive for a specific file:
-
- int mz_zip_reader_locate_file(mz_zip_archive *pZip, const char *pName,
- const char *pComment, mz_uint flags);
-
- The locate operation can optionally check file comments too, which (as one
- example) can be used to identify
- multiple versions of the same file in an archive. This function uses a
- simple linear search through the central
- directory, so it's not very fast.
-
- Alternately, you can iterate through all the files in an archive (using
- mz_zip_reader_get_num_files()) and
- retrieve detailed info on each file by calling mz_zip_reader_file_stat().
-
- - Archive creation: Use the "mz_zip_writer" functions. The ZIP writer
- immediately writes compressed file data
- to disk and builds an exact image of the central directory in memory. The
- central directory image is written
- all at once at the end of the archive file when the archive is finalized.
-
- The archive writer can optionally align each file's local header and file
- data to any power of 2 alignment,
- which can be useful when the archive will be read from optical media. Also,
- the writer supports placing
- arbitrary data blobs at the very beginning of ZIP archives. Archives
- written using either feature are still
- readable by any ZIP tool.
-
- - Archive appending: The simple way to add a single file to an archive is
- to call this function:
-
- mz_bool mz_zip_add_mem_to_archive_file_in_place(const char *pZip_filename,
- const char *pArchive_name,
- const void *pBuf, size_t buf_size, const void *pComment, mz_uint16
- comment_size, mz_uint level_and_flags);
-
- The archive will be created if it doesn't already exist, otherwise it'll be
- appended to.
- Note the appending is done in-place and is not an atomic operation, so if
- something goes wrong
- during the operation it's possible the archive could be left without a
- central directory (although the local
- file headers and file data will be fine, so the archive will be
- recoverable).
-
- For more complex archive modification scenarios:
- 1. The safest way is to use a mz_zip_reader to read the existing archive,
- cloning only those bits you want to
- preserve into a new archive using using the
- mz_zip_writer_add_from_zip_reader() function (which compiles the
- compressed file data as-is). When you're done, delete the old archive and
- rename the newly written archive, and
- you're done. This is safe but requires a bunch of temporary disk space or
- heap memory.
-
- 2. Or, you can convert an mz_zip_reader in-place to an mz_zip_writer using
- mz_zip_writer_init_from_reader(),
- append new files as needed, then finalize the archive which will write an
- updated central directory to the
- original archive. (This is basically what
- mz_zip_add_mem_to_archive_file_in_place() does.) There's a
- possibility that the archive's central directory could be lost with this
- method if anything goes wrong, though.
-
- - ZIP archive support limitations:
- No zip64 or spanning support. Extraction functions can only handle
- unencrypted, stored or deflated files.
- Requires streams capable of seeking.
-
- * This is a header file library, like stb_image.c. To get only a header file,
- either cut and paste the
- below header, or create miniz.h, #define MINIZ_HEADER_FILE_ONLY, and then
- include miniz.c from it.
-
- * Important: For best perf. be sure to customize the below macros for your
- target platform:
- #define MINIZ_USE_UNALIGNED_LOADS_AND_STORES 1
- #define MINIZ_LITTLE_ENDIAN 1
- #define MINIZ_HAS_64BIT_REGISTERS 1
-
- * On platforms using glibc, Be sure to "#define _LARGEFILE64_SOURCE 1" before
- including miniz.c to ensure miniz
- uses the 64-bit variants: fopen64(), stat64(), etc. Otherwise you won't be
- able to process large files
- (i.e. 32-bit stat() fails for me on files > 0x7FFFFFFF bytes).
-*/
-
-#ifndef MINIZ_HEADER_INCLUDED
-#define MINIZ_HEADER_INCLUDED
-
-//#include <stdlib.h>
-
-// Defines to completely disable specific portions of miniz.c:
-// If all macros here are defined the only functionality remaining will be
-// CRC-32, adler-32, tinfl, and tdefl.
-
-// Define MINIZ_NO_STDIO to disable all usage and any functions which rely on
-// stdio for file I/O.
-//#define MINIZ_NO_STDIO
-
-// If MINIZ_NO_TIME is specified then the ZIP archive functions will not be able
-// to get the current time, or
-// get/set file times, and the C run-time funcs that get/set times won't be
-// called.
-// The current downside is the times written to your archives will be from 1979.
-#define MINIZ_NO_TIME
-
-// Define MINIZ_NO_ARCHIVE_APIS to disable all ZIP archive API's.
-#define MINIZ_NO_ARCHIVE_APIS
-
-// Define MINIZ_NO_ARCHIVE_APIS to disable all writing related ZIP archive
-// API's.
-//#define MINIZ_NO_ARCHIVE_WRITING_APIS
-
-// Define MINIZ_NO_ZLIB_APIS to remove all ZLIB-style compression/decompression
-// API's.
-//#define MINIZ_NO_ZLIB_APIS
-
-// Define MINIZ_NO_ZLIB_COMPATIBLE_NAME to disable zlib names, to prevent
-// conflicts against stock zlib.
-//#define MINIZ_NO_ZLIB_COMPATIBLE_NAMES
-
-// Define MINIZ_NO_MALLOC to disable all calls to malloc, free, and realloc.
-// Note if MINIZ_NO_MALLOC is defined then the user must always provide custom
-// user alloc/free/realloc
-// callbacks to the zlib and archive API's, and a few stand-alone helper API's
-// which don't provide custom user
-// functions (such as tdefl_compress_mem_to_heap() and
-// tinfl_decompress_mem_to_heap()) won't work.
-//#define MINIZ_NO_MALLOC
-
-#if defined(__TINYC__) && (defined(__linux) || defined(__linux__))
-// TODO: Work around "error: include file 'sys\utime.h' when compiling with tcc
-// on Linux
-#define MINIZ_NO_TIME
-#endif
-
-#if !defined(MINIZ_NO_TIME) && !defined(MINIZ_NO_ARCHIVE_APIS)
-//#include <time.h>
-#endif
-
-#if defined(_M_IX86) || defined(_M_X64) || defined(__i386__) || \
- defined(__i386) || defined(__i486__) || defined(__i486) || \
- defined(i386) || defined(__ia64__) || defined(__x86_64__)
-// MINIZ_X86_OR_X64_CPU is only used to help set the below macros.
-#define MINIZ_X86_OR_X64_CPU 1
-#endif
-
-#if defined(__sparcv9)
-// Big endian
-#else
-#if (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) || MINIZ_X86_OR_X64_CPU
-// Set MINIZ_LITTLE_ENDIAN to 1 if the processor is little endian.
-#define MINIZ_LITTLE_ENDIAN 1
-#endif
-#endif
-
-#if MINIZ_X86_OR_X64_CPU
-// Set MINIZ_USE_UNALIGNED_LOADS_AND_STORES to 1 on CPU's that permit efficient
-// integer loads and stores from unaligned addresses.
-//#define MINIZ_USE_UNALIGNED_LOADS_AND_STORES 1
-#define MINIZ_USE_UNALIGNED_LOADS_AND_STORES \
- 0 // disable to suppress compiler warnings
-#endif
-
-#if defined(_M_X64) || defined(_WIN64) || defined(__MINGW64__) || \
- defined(_LP64) || defined(__LP64__) || defined(__ia64__) || \
- defined(__x86_64__)
-// Set MINIZ_HAS_64BIT_REGISTERS to 1 if operations on 64-bit integers are
-// reasonably fast (and don't involve compiler generated calls to helper
-// functions).
-#define MINIZ_HAS_64BIT_REGISTERS 1
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// ------------------- zlib-style API Definitions.
-
-// For more compatibility with zlib, miniz.c uses unsigned long for some
-// parameters/struct members. Beware: mz_ulong can be either 32 or 64-bits!
-typedef unsigned long mz_ulong;
-
-// mz_free() internally uses the MZ_FREE() macro (which by default calls free()
-// unless you've modified the MZ_MALLOC macro) to release a block allocated from
-// the heap.
-void mz_free(void *p);
-
-#define MZ_ADLER32_INIT (1)
-// mz_adler32() returns the initial adler-32 value to use when called with
-// ptr==NULL.
-mz_ulong mz_adler32(mz_ulong adler, const unsigned char *ptr, size_t buf_len);
-
-#define MZ_CRC32_INIT (0)
-// mz_crc32() returns the initial CRC-32 value to use when called with
-// ptr==NULL.
-mz_ulong mz_crc32(mz_ulong crc, const unsigned char *ptr, size_t buf_len);
-
-// Compression strategies.
-enum {
- MZ_DEFAULT_STRATEGY = 0,
- MZ_FILTERED = 1,
- MZ_HUFFMAN_ONLY = 2,
- MZ_RLE = 3,
- MZ_FIXED = 4
-};
-
-// Method
-#define MZ_DEFLATED 8
-
-#ifndef MINIZ_NO_ZLIB_APIS
-
-// Heap allocation callbacks.
-// Note that mz_alloc_func parameter types purpsosely differ from zlib's:
-// items/size is size_t, not unsigned long.
-typedef void *(*mz_alloc_func)(void *opaque, size_t items, size_t size);
-typedef void (*mz_free_func)(void *opaque, void *address);
-typedef void *(*mz_realloc_func)(void *opaque, void *address, size_t items,
- size_t size);
-
-#define MZ_VERSION "9.1.15"
-#define MZ_VERNUM 0x91F0
-#define MZ_VER_MAJOR 9
-#define MZ_VER_MINOR 1
-#define MZ_VER_REVISION 15
-#define MZ_VER_SUBREVISION 0
-
-// Flush values. For typical usage you only need MZ_NO_FLUSH and MZ_FINISH. The
-// other values are for advanced use (refer to the zlib docs).
-enum {
- MZ_NO_FLUSH = 0,
- MZ_PARTIAL_FLUSH = 1,
- MZ_SYNC_FLUSH = 2,
- MZ_FULL_FLUSH = 3,
- MZ_FINISH = 4,
- MZ_BLOCK = 5
-};
-
-// Return status codes. MZ_PARAM_ERROR is non-standard.
-enum {
- MZ_OK = 0,
- MZ_STREAM_END = 1,
- MZ_NEED_DICT = 2,
- MZ_ERRNO = -1,
- MZ_STREAM_ERROR = -2,
- MZ_DATA_ERROR = -3,
- MZ_MEM_ERROR = -4,
- MZ_BUF_ERROR = -5,
- MZ_VERSION_ERROR = -6,
- MZ_PARAM_ERROR = -10000
-};
-
-// Compression levels: 0-9 are the standard zlib-style levels, 10 is best
-// possible compression (not zlib compatible, and may be very slow),
-// MZ_DEFAULT_COMPRESSION=MZ_DEFAULT_LEVEL.
-enum {
- MZ_NO_COMPRESSION = 0,
- MZ_BEST_SPEED = 1,
- MZ_BEST_COMPRESSION = 9,
- MZ_UBER_COMPRESSION = 10,
- MZ_DEFAULT_LEVEL = 6,
- MZ_DEFAULT_COMPRESSION = -1
-};
-
-// Window bits
-#define MZ_DEFAULT_WINDOW_BITS 15
-
-struct mz_internal_state;
-
-// Compression/decompression stream struct.
-typedef struct mz_stream_s {
- const unsigned char *next_in; // pointer to next byte to read
- unsigned int avail_in; // number of bytes available at next_in
- mz_ulong total_in; // total number of bytes consumed so far
-
- unsigned char *next_out; // pointer to next byte to write
- unsigned int avail_out; // number of bytes that can be written to next_out
- mz_ulong total_out; // total number of bytes produced so far
-
- char *msg; // error msg (unused)
- struct mz_internal_state *state; // internal state, allocated by zalloc/zfree
-
- mz_alloc_func
- zalloc; // optional heap allocation function (defaults to malloc)
- mz_free_func zfree; // optional heap free function (defaults to free)
- void *opaque; // heap alloc function user pointer
-
- int data_type; // data_type (unused)
- mz_ulong adler; // adler32 of the source or uncompressed data
- mz_ulong reserved; // not used
-} mz_stream;
-
-typedef mz_stream *mz_streamp;
-
-// Returns the version string of miniz.c.
-const char *mz_version(void);
-
-// mz_deflateInit() initializes a compressor with default options:
-// Parameters:
-// pStream must point to an initialized mz_stream struct.
-// level must be between [MZ_NO_COMPRESSION, MZ_BEST_COMPRESSION].
-// level 1 enables a specially optimized compression function that's been
-// optimized purely for performance, not ratio.
-// (This special func. is currently only enabled when
-// MINIZ_USE_UNALIGNED_LOADS_AND_STORES and MINIZ_LITTLE_ENDIAN are defined.)
-// Return values:
-// MZ_OK on success.
-// MZ_STREAM_ERROR if the stream is bogus.
-// MZ_PARAM_ERROR if the input parameters are bogus.
-// MZ_MEM_ERROR on out of memory.
-int mz_deflateInit(mz_streamp pStream, int level);
-
-// mz_deflateInit2() is like mz_deflate(), except with more control:
-// Additional parameters:
-// method must be MZ_DEFLATED
-// window_bits must be MZ_DEFAULT_WINDOW_BITS (to wrap the deflate stream with
-// zlib header/adler-32 footer) or -MZ_DEFAULT_WINDOW_BITS (raw deflate/no
-// header or footer)
-// mem_level must be between [1, 9] (it's checked but ignored by miniz.c)
-int mz_deflateInit2(mz_streamp pStream, int level, int method, int window_bits,
- int mem_level, int strategy);
-
-// Quickly resets a compressor without having to reallocate anything. Same as
-// calling mz_deflateEnd() followed by mz_deflateInit()/mz_deflateInit2().
-int mz_deflateReset(mz_streamp pStream);
-
-// mz_deflate() compresses the input to output, consuming as much of the input
-// and producing as much output as possible.
-// Parameters:
-// pStream is the stream to read from and write to. You must initialize/update
-// the next_in, avail_in, next_out, and avail_out members.
-// flush may be MZ_NO_FLUSH, MZ_PARTIAL_FLUSH/MZ_SYNC_FLUSH, MZ_FULL_FLUSH, or
-// MZ_FINISH.
-// Return values:
-// MZ_OK on success (when flushing, or if more input is needed but not
-// available, and/or there's more output to be written but the output buffer
-// is full).
-// MZ_STREAM_END if all input has been consumed and all output bytes have been
-// written. Don't call mz_deflate() on the stream anymore.
-// MZ_STREAM_ERROR if the stream is bogus.
-// MZ_PARAM_ERROR if one of the parameters is invalid.
-// MZ_BUF_ERROR if no forward progress is possible because the input and/or
-// output buffers are empty. (Fill up the input buffer or free up some output
-// space and try again.)
-int mz_deflate(mz_streamp pStream, int flush);
-
-// mz_deflateEnd() deinitializes a compressor:
-// Return values:
-// MZ_OK on success.
-// MZ_STREAM_ERROR if the stream is bogus.
-int mz_deflateEnd(mz_streamp pStream);
-
-// mz_deflateBound() returns a (very) conservative upper bound on the amount of
-// data that could be generated by deflate(), assuming flush is set to only
-// MZ_NO_FLUSH or MZ_FINISH.
-mz_ulong mz_deflateBound(mz_streamp pStream, mz_ulong source_len);
-
-// Single-call compression functions mz_compress() and mz_compress2():
-// Returns MZ_OK on success, or one of the error codes from mz_deflate() on
-// failure.
-int mz_compress(unsigned char *pDest, mz_ulong *pDest_len,
- const unsigned char *pSource, mz_ulong source_len);
-int mz_compress2(unsigned char *pDest, mz_ulong *pDest_len,
- const unsigned char *pSource, mz_ulong source_len, int level);
-
-// mz_compressBound() returns a (very) conservative upper bound on the amount of
-// data that could be generated by calling mz_compress().
-mz_ulong mz_compressBound(mz_ulong source_len);
-
-// Initializes a decompressor.
-int mz_inflateInit(mz_streamp pStream);
-
-// mz_inflateInit2() is like mz_inflateInit() with an additional option that
-// controls the window size and whether or not the stream has been wrapped with
-// a zlib header/footer:
-// window_bits must be MZ_DEFAULT_WINDOW_BITS (to parse zlib header/footer) or
-// -MZ_DEFAULT_WINDOW_BITS (raw deflate).
-int mz_inflateInit2(mz_streamp pStream, int window_bits);
-
-// Decompresses the input stream to the output, consuming only as much of the
-// input as needed, and writing as much to the output as possible.
-// Parameters:
-// pStream is the stream to read from and write to. You must initialize/update
-// the next_in, avail_in, next_out, and avail_out members.
-// flush may be MZ_NO_FLUSH, MZ_SYNC_FLUSH, or MZ_FINISH.
-// On the first call, if flush is MZ_FINISH it's assumed the input and output
-// buffers are both sized large enough to decompress the entire stream in a
-// single call (this is slightly faster).
-// MZ_FINISH implies that there are no more source bytes available beside
-// what's already in the input buffer, and that the output buffer is large
-// enough to hold the rest of the decompressed data.
-// Return values:
-// MZ_OK on success. Either more input is needed but not available, and/or
-// there's more output to be written but the output buffer is full.
-// MZ_STREAM_END if all needed input has been consumed and all output bytes
-// have been written. For zlib streams, the adler-32 of the decompressed data
-// has also been verified.
-// MZ_STREAM_ERROR if the stream is bogus.
-// MZ_DATA_ERROR if the deflate stream is invalid.
-// MZ_PARAM_ERROR if one of the parameters is invalid.
-// MZ_BUF_ERROR if no forward progress is possible because the input buffer is
-// empty but the inflater needs more input to continue, or if the output
-// buffer is not large enough. Call mz_inflate() again
-// with more input data, or with more room in the output buffer (except when
-// using single call decompression, described above).
-int mz_inflate(mz_streamp pStream, int flush);
-
-// Deinitializes a decompressor.
-int mz_inflateEnd(mz_streamp pStream);
-
-// Single-call decompression.
-// Returns MZ_OK on success, or one of the error codes from mz_inflate() on
-// failure.
-int mz_uncompress(unsigned char *pDest, mz_ulong *pDest_len,
- const unsigned char *pSource, mz_ulong source_len);
-
-// Returns a string description of the specified error code, or NULL if the
-// error code is invalid.
-const char *mz_error(int err);
-
-// Redefine zlib-compatible names to miniz equivalents, so miniz.c can be used
-// as a drop-in replacement for the subset of zlib that miniz.c supports.
-// Define MINIZ_NO_ZLIB_COMPATIBLE_NAMES to disable zlib-compatibility if you
-// use zlib in the same project.
-#ifndef MINIZ_NO_ZLIB_COMPATIBLE_NAMES
-typedef unsigned char Byte;
-typedef unsigned int uInt;
-typedef mz_ulong uLong;
-typedef Byte Bytef;
-typedef uInt uIntf;
-typedef char charf;
-typedef int intf;
-typedef void *voidpf;
-typedef uLong uLongf;
-typedef void *voidp;
-typedef void *const voidpc;
-#define Z_NULL 0
-#define Z_NO_FLUSH MZ_NO_FLUSH
-#define Z_PARTIAL_FLUSH MZ_PARTIAL_FLUSH
-#define Z_SYNC_FLUSH MZ_SYNC_FLUSH
-#define Z_FULL_FLUSH MZ_FULL_FLUSH
-#define Z_FINISH MZ_FINISH
-#define Z_BLOCK MZ_BLOCK
-#define Z_OK MZ_OK
-#define Z_STREAM_END MZ_STREAM_END
-#define Z_NEED_DICT MZ_NEED_DICT
-#define Z_ERRNO MZ_ERRNO
-#define Z_STREAM_ERROR MZ_STREAM_ERROR
-#define Z_DATA_ERROR MZ_DATA_ERROR
-#define Z_MEM_ERROR MZ_MEM_ERROR
-#define Z_BUF_ERROR MZ_BUF_ERROR
-#define Z_VERSION_ERROR MZ_VERSION_ERROR
-#define Z_PARAM_ERROR MZ_PARAM_ERROR
-#define Z_NO_COMPRESSION MZ_NO_COMPRESSION
-#define Z_BEST_SPEED MZ_BEST_SPEED
-#define Z_BEST_COMPRESSION MZ_BEST_COMPRESSION
-#define Z_DEFAULT_COMPRESSION MZ_DEFAULT_COMPRESSION
-#define Z_DEFAULT_STRATEGY MZ_DEFAULT_STRATEGY
-#define Z_FILTERED MZ_FILTERED
-#define Z_HUFFMAN_ONLY MZ_HUFFMAN_ONLY
-#define Z_RLE MZ_RLE
-#define Z_FIXED MZ_FIXED
-#define Z_DEFLATED MZ_DEFLATED
-#define Z_DEFAULT_WINDOW_BITS MZ_DEFAULT_WINDOW_BITS
-#define alloc_func mz_alloc_func
-#define free_func mz_free_func
-#define internal_state mz_internal_state
-#define z_stream mz_stream
-#define deflateInit mz_deflateInit
-#define deflateInit2 mz_deflateInit2
-#define deflateReset mz_deflateReset
-#define deflate mz_deflate
-#define deflateEnd mz_deflateEnd
-#define deflateBound mz_deflateBound
-#define compress mz_compress
-#define compress2 mz_compress2
-#define compressBound mz_compressBound
-#define inflateInit mz_inflateInit
-#define inflateInit2 mz_inflateInit2
-#define inflate mz_inflate
-#define inflateEnd mz_inflateEnd
-#define uncompress mz_uncompress
-#define crc32 mz_crc32
-#define adler32 mz_adler32
-#define MAX_WBITS 15
-#define MAX_MEM_LEVEL 9
-#define zError mz_error
-#define ZLIB_VERSION MZ_VERSION
-#define ZLIB_VERNUM MZ_VERNUM
-#define ZLIB_VER_MAJOR MZ_VER_MAJOR
-#define ZLIB_VER_MINOR MZ_VER_MINOR
-#define ZLIB_VER_REVISION MZ_VER_REVISION
-#define ZLIB_VER_SUBREVISION MZ_VER_SUBREVISION
-#define zlibVersion mz_version
-#define zlib_version mz_version()
-#endif // #ifndef MINIZ_NO_ZLIB_COMPATIBLE_NAMES
-
-#endif // MINIZ_NO_ZLIB_APIS
-
-// ------------------- Types and macros
-
-typedef unsigned char mz_uint8;
-typedef signed short mz_int16;
-typedef unsigned short mz_uint16;
-typedef unsigned int mz_uint32;
-typedef unsigned int mz_uint;
-typedef long long mz_int64;
-typedef unsigned long long mz_uint64;
-typedef int mz_bool;
-
-#define MZ_FALSE (0)
-#define MZ_TRUE (1)
-
-// An attempt to work around MSVC's spammy "warning C4127: conditional
-// expression is constant" message.
-#ifdef _MSC_VER
-#define MZ_MACRO_END while (0, 0)
-#else
-#define MZ_MACRO_END while (0)
-#endif
-
-// ------------------- ZIP archive reading/writing
-
-#ifndef MINIZ_NO_ARCHIVE_APIS
-
-enum {
- MZ_ZIP_MAX_IO_BUF_SIZE = 64 * 1024,
- MZ_ZIP_MAX_ARCHIVE_FILENAME_SIZE = 260,
- MZ_ZIP_MAX_ARCHIVE_FILE_COMMENT_SIZE = 256
-};
-
-typedef struct {
- mz_uint32 m_file_index;
- mz_uint32 m_central_dir_ofs;
- mz_uint16 m_version_made_by;
- mz_uint16 m_version_needed;
- mz_uint16 m_bit_flag;
- mz_uint16 m_method;
-#ifndef MINIZ_NO_TIME
- time_t m_time;
-#endif
- mz_uint32 m_crc32;
- mz_uint64 m_comp_size;
- mz_uint64 m_uncomp_size;
- mz_uint16 m_internal_attr;
- mz_uint32 m_external_attr;
- mz_uint64 m_local_header_ofs;
- mz_uint32 m_comment_size;
- char m_filename[MZ_ZIP_MAX_ARCHIVE_FILENAME_SIZE];
- char m_comment[MZ_ZIP_MAX_ARCHIVE_FILE_COMMENT_SIZE];
-} mz_zip_archive_file_stat;
-
-typedef size_t (*mz_file_read_func)(void *pOpaque, mz_uint64 file_ofs,
- void *pBuf, size_t n);
-typedef size_t (*mz_file_write_func)(void *pOpaque, mz_uint64 file_ofs,
- const void *pBuf, size_t n);
-
-struct mz_zip_internal_state_tag;
-typedef struct mz_zip_internal_state_tag mz_zip_internal_state;
-
-typedef enum {
- MZ_ZIP_MODE_INVALID = 0,
- MZ_ZIP_MODE_READING = 1,
- MZ_ZIP_MODE_WRITING = 2,
- MZ_ZIP_MODE_WRITING_HAS_BEEN_FINALIZED = 3
-} mz_zip_mode;
-
-typedef struct mz_zip_archive_tag {
- mz_uint64 m_archive_size;
- mz_uint64 m_central_directory_file_ofs;
- mz_uint m_total_files;
- mz_zip_mode m_zip_mode;
-
- mz_uint m_file_offset_alignment;
-
- mz_alloc_func m_pAlloc;
- mz_free_func m_pFree;
- mz_realloc_func m_pRealloc;
- void *m_pAlloc_opaque;
-
- mz_file_read_func m_pRead;
- mz_file_write_func m_pWrite;
- void *m_pIO_opaque;
-
- mz_zip_internal_state *m_pState;
-
-} mz_zip_archive;
-
-typedef enum {
- MZ_ZIP_FLAG_CASE_SENSITIVE = 0x0100,
- MZ_ZIP_FLAG_IGNORE_PATH = 0x0200,
- MZ_ZIP_FLAG_COMPRESSED_DATA = 0x0400,
- MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY = 0x0800
-} mz_zip_flags;
-
-// ZIP archive reading
-
-// Inits a ZIP archive reader.
-// These functions read and validate the archive's central directory.
-mz_bool mz_zip_reader_init(mz_zip_archive *pZip, mz_uint64 size,
- mz_uint32 flags);
-mz_bool mz_zip_reader_init_mem(mz_zip_archive *pZip, const void *pMem,
- size_t size, mz_uint32 flags);
-
-#ifndef MINIZ_NO_STDIO
-mz_bool mz_zip_reader_init_file(mz_zip_archive *pZip, const char *pFilename,
- mz_uint32 flags);
-#endif
-
-// Returns the total number of files in the archive.
-mz_uint mz_zip_reader_get_num_files(mz_zip_archive *pZip);
-
-// Returns detailed information about an archive file entry.
-mz_bool mz_zip_reader_file_stat(mz_zip_archive *pZip, mz_uint file_index,
- mz_zip_archive_file_stat *pStat);
-
-// Determines if an archive file entry is a directory entry.
-mz_bool mz_zip_reader_is_file_a_directory(mz_zip_archive *pZip,
- mz_uint file_index);
-mz_bool mz_zip_reader_is_file_encrypted(mz_zip_archive *pZip,
- mz_uint file_index);
-
-// Retrieves the filename of an archive file entry.
-// Returns the number of bytes written to pFilename, or if filename_buf_size is
-// 0 this function returns the number of bytes needed to fully store the
-// filename.
-mz_uint mz_zip_reader_get_filename(mz_zip_archive *pZip, mz_uint file_index,
- char *pFilename, mz_uint filename_buf_size);
-
-// Attempts to locates a file in the archive's central directory.
-// Valid flags: MZ_ZIP_FLAG_CASE_SENSITIVE, MZ_ZIP_FLAG_IGNORE_PATH
-// Returns -1 if the file cannot be found.
-int mz_zip_reader_locate_file(mz_zip_archive *pZip, const char *pName,
- const char *pComment, mz_uint flags);
-
-// Extracts a archive file to a memory buffer using no memory allocation.
-mz_bool mz_zip_reader_extract_to_mem_no_alloc(mz_zip_archive *pZip,
- mz_uint file_index, void *pBuf,
- size_t buf_size, mz_uint flags,
- void *pUser_read_buf,
- size_t user_read_buf_size);
-mz_bool mz_zip_reader_extract_file_to_mem_no_alloc(
- mz_zip_archive *pZip, const char *pFilename, void *pBuf, size_t buf_size,
- mz_uint flags, void *pUser_read_buf, size_t user_read_buf_size);
-
-// Extracts a archive file to a memory buffer.
-mz_bool mz_zip_reader_extract_to_mem(mz_zip_archive *pZip, mz_uint file_index,
- void *pBuf, size_t buf_size,
- mz_uint flags);
-mz_bool mz_zip_reader_extract_file_to_mem(mz_zip_archive *pZip,
- const char *pFilename, void *pBuf,
- size_t buf_size, mz_uint flags);
-
-// Extracts a archive file to a dynamically allocated heap buffer.
-void *mz_zip_reader_extract_to_heap(mz_zip_archive *pZip, mz_uint file_index,
- size_t *pSize, mz_uint flags);
-void *mz_zip_reader_extract_file_to_heap(mz_zip_archive *pZip,
- const char *pFilename, size_t *pSize,
- mz_uint flags);
-
-// Extracts a archive file using a callback function to output the file's data.
-mz_bool mz_zip_reader_extract_to_callback(mz_zip_archive *pZip,
- mz_uint file_index,
- mz_file_write_func pCallback,
- void *pOpaque, mz_uint flags);
-mz_bool mz_zip_reader_extract_file_to_callback(mz_zip_archive *pZip,
- const char *pFilename,
- mz_file_write_func pCallback,
- void *pOpaque, mz_uint flags);
-
-#ifndef MINIZ_NO_STDIO
-// Extracts a archive file to a disk file and sets its last accessed and
-// modified times.
-// This function only extracts files, not archive directory records.
-mz_bool mz_zip_reader_extract_to_file(mz_zip_archive *pZip, mz_uint file_index,
- const char *pDst_filename, mz_uint flags);
-mz_bool mz_zip_reader_extract_file_to_file(mz_zip_archive *pZip,
- const char *pArchive_filename,
- const char *pDst_filename,
- mz_uint flags);
-#endif
-
-// Ends archive reading, freeing all allocations, and closing the input archive
-// file if mz_zip_reader_init_file() was used.
-mz_bool mz_zip_reader_end(mz_zip_archive *pZip);
-
-// ZIP archive writing
-
-#ifndef MINIZ_NO_ARCHIVE_WRITING_APIS
-
-// Inits a ZIP archive writer.
-mz_bool mz_zip_writer_init(mz_zip_archive *pZip, mz_uint64 existing_size);
-mz_bool mz_zip_writer_init_heap(mz_zip_archive *pZip,
- size_t size_to_reserve_at_beginning,
- size_t initial_allocation_size);
-
-#ifndef MINIZ_NO_STDIO
-mz_bool mz_zip_writer_init_file(mz_zip_archive *pZip, const char *pFilename,
- mz_uint64 size_to_reserve_at_beginning);
-#endif
-
-// Converts a ZIP archive reader object into a writer object, to allow efficient
-// in-place file appends to occur on an existing archive.
-// For archives opened using mz_zip_reader_init_file, pFilename must be the
-// archive's filename so it can be reopened for writing. If the file can't be
-// reopened, mz_zip_reader_end() will be called.
-// For archives opened using mz_zip_reader_init_mem, the memory block must be
-// growable using the realloc callback (which defaults to realloc unless you've
-// overridden it).
-// Finally, for archives opened using mz_zip_reader_init, the mz_zip_archive's
-// user provided m_pWrite function cannot be NULL.
-// Note: In-place archive modification is not recommended unless you know what
-// you're doing, because if execution stops or something goes wrong before
-// the archive is finalized the file's central directory will be hosed.
-mz_bool mz_zip_writer_init_from_reader(mz_zip_archive *pZip,
- const char *pFilename);
-
-// Adds the contents of a memory buffer to an archive. These functions record
-// the current local time into the archive.
-// To add a directory entry, call this method with an archive name ending in a
-// forwardslash with empty buffer.
-// level_and_flags - compression level (0-10, see MZ_BEST_SPEED,
-// MZ_BEST_COMPRESSION, etc.) logically OR'd with zero or more mz_zip_flags, or
-// just set to MZ_DEFAULT_COMPRESSION.
-mz_bool mz_zip_writer_add_mem(mz_zip_archive *pZip, const char *pArchive_name,
- const void *pBuf, size_t buf_size,
- mz_uint level_and_flags);
-mz_bool mz_zip_writer_add_mem_ex(mz_zip_archive *pZip,
- const char *pArchive_name, const void *pBuf,
- size_t buf_size, const void *pComment,
- mz_uint16 comment_size,
- mz_uint level_and_flags, mz_uint64 uncomp_size,
- mz_uint32 uncomp_crc32);
-
-#ifndef MINIZ_NO_STDIO
-// Adds the contents of a disk file to an archive. This function also records
-// the disk file's modified time into the archive.
-// level_and_flags - compression level (0-10, see MZ_BEST_SPEED,
-// MZ_BEST_COMPRESSION, etc.) logically OR'd with zero or more mz_zip_flags, or
-// just set to MZ_DEFAULT_COMPRESSION.
-mz_bool mz_zip_writer_add_file(mz_zip_archive *pZip, const char *pArchive_name,
- const char *pSrc_filename, const void *pComment,
- mz_uint16 comment_size, mz_uint level_and_flags);
-#endif
-
-// Adds a file to an archive by fully cloning the data from another archive.
-// This function fully clones the source file's compressed data (no
-// recompression), along with its full filename, extra data, and comment fields.
-mz_bool mz_zip_writer_add_from_zip_reader(mz_zip_archive *pZip,
- mz_zip_archive *pSource_zip,
- mz_uint file_index);
-
-// Finalizes the archive by writing the central directory records followed by
-// the end of central directory record.
-// After an archive is finalized, the only valid call on the mz_zip_archive
-// struct is mz_zip_writer_end().
-// An archive must be manually finalized by calling this function for it to be
-// valid.
-mz_bool mz_zip_writer_finalize_archive(mz_zip_archive *pZip);
-mz_bool mz_zip_writer_finalize_heap_archive(mz_zip_archive *pZip, void **pBuf,
- size_t *pSize);
-
-// Ends archive writing, freeing all allocations, and closing the output file if
-// mz_zip_writer_init_file() was used.
-// Note for the archive to be valid, it must have been finalized before ending.
-mz_bool mz_zip_writer_end(mz_zip_archive *pZip);
-
-// Misc. high-level helper functions:
-
-// mz_zip_add_mem_to_archive_file_in_place() efficiently (but not atomically)
-// appends a memory blob to a ZIP archive.
-// level_and_flags - compression level (0-10, see MZ_BEST_SPEED,
-// MZ_BEST_COMPRESSION, etc.) logically OR'd with zero or more mz_zip_flags, or
-// just set to MZ_DEFAULT_COMPRESSION.
-mz_bool mz_zip_add_mem_to_archive_file_in_place(
- const char *pZip_filename, const char *pArchive_name, const void *pBuf,
- size_t buf_size, const void *pComment, mz_uint16 comment_size,
- mz_uint level_and_flags);
-
-// Reads a single file from an archive into a heap block.
-// Returns NULL on failure.
-void *mz_zip_extract_archive_file_to_heap(const char *pZip_filename,
- const char *pArchive_name,
- size_t *pSize, mz_uint zip_flags);
-
-#endif // #ifndef MINIZ_NO_ARCHIVE_WRITING_APIS
-
-#endif // #ifndef MINIZ_NO_ARCHIVE_APIS
-
-// ------------------- Low-level Decompression API Definitions
-
-// Decompression flags used by tinfl_decompress().
-// TINFL_FLAG_PARSE_ZLIB_HEADER: If set, the input has a valid zlib header and
-// ends with an adler32 checksum (it's a valid zlib stream). Otherwise, the
-// input is a raw deflate stream.
-// TINFL_FLAG_HAS_MORE_INPUT: If set, there are more input bytes available
-// beyond the end of the supplied input buffer. If clear, the input buffer
-// contains all remaining input.
-// TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF: If set, the output buffer is large
-// enough to hold the entire decompressed stream. If clear, the output buffer is
-// at least the size of the dictionary (typically 32KB).
-// TINFL_FLAG_COMPUTE_ADLER32: Force adler-32 checksum computation of the
-// decompressed bytes.
-enum {
- TINFL_FLAG_PARSE_ZLIB_HEADER = 1,
- TINFL_FLAG_HAS_MORE_INPUT = 2,
- TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF = 4,
- TINFL_FLAG_COMPUTE_ADLER32 = 8
-};
-
-// High level decompression functions:
-// tinfl_decompress_mem_to_heap() decompresses a block in memory to a heap block
-// allocated via malloc().
-// On entry:
-// pSrc_buf, src_buf_len: Pointer and size of the Deflate or zlib source data
-// to decompress.
-// On return:
-// Function returns a pointer to the decompressed data, or NULL on failure.
-// *pOut_len will be set to the decompressed data's size, which could be larger
-// than src_buf_len on uncompressible data.
-// The caller must call mz_free() on the returned block when it's no longer
-// needed.
-void *tinfl_decompress_mem_to_heap(const void *pSrc_buf, size_t src_buf_len,
- size_t *pOut_len, int flags);
-
-// tinfl_decompress_mem_to_mem() decompresses a block in memory to another block
-// in memory.
-// Returns TINFL_DECOMPRESS_MEM_TO_MEM_FAILED on failure, or the number of bytes
-// written on success.
-#define TINFL_DECOMPRESS_MEM_TO_MEM_FAILED ((size_t)(-1))
-size_t tinfl_decompress_mem_to_mem(void *pOut_buf, size_t out_buf_len,
- const void *pSrc_buf, size_t src_buf_len,
- int flags);
-
-// tinfl_decompress_mem_to_callback() decompresses a block in memory to an
-// internal 32KB buffer, and a user provided callback function will be called to
-// flush the buffer.
-// Returns 1 on success or 0 on failure.
-typedef int (*tinfl_put_buf_func_ptr)(const void *pBuf, int len, void *pUser);
-int tinfl_decompress_mem_to_callback(const void *pIn_buf, size_t *pIn_buf_size,
- tinfl_put_buf_func_ptr pPut_buf_func,
- void *pPut_buf_user, int flags);
-
-struct tinfl_decompressor_tag;
-typedef struct tinfl_decompressor_tag tinfl_decompressor;
-
-// Max size of LZ dictionary.
-#define TINFL_LZ_DICT_SIZE 32768
-
-// Return status.
-typedef enum {
- TINFL_STATUS_BAD_PARAM = -3,
- TINFL_STATUS_ADLER32_MISMATCH = -2,
- TINFL_STATUS_FAILED = -1,
- TINFL_STATUS_DONE = 0,
- TINFL_STATUS_NEEDS_MORE_INPUT = 1,
- TINFL_STATUS_HAS_MORE_OUTPUT = 2
-} tinfl_status;
-
-// Initializes the decompressor to its initial state.
-#define tinfl_init(r) \
- do { \
- (r)->m_state = 0; \
- } \
- MZ_MACRO_END
-#define tinfl_get_adler32(r) (r)->m_check_adler32
-
-// Main low-level decompressor coroutine function. This is the only function
-// actually needed for decompression. All the other functions are just
-// high-level helpers for improved usability.
-// This is a universal API, i.e. it can be used as a building block to build any
-// desired higher level decompression API. In the limit case, it can be called
-// once per every byte input or output.
-tinfl_status tinfl_decompress(tinfl_decompressor *r,
- const mz_uint8 *pIn_buf_next,
- size_t *pIn_buf_size, mz_uint8 *pOut_buf_start,
- mz_uint8 *pOut_buf_next, size_t *pOut_buf_size,
- const mz_uint32 decomp_flags);
-
-// Internal/private bits follow.
-enum {
- TINFL_MAX_HUFF_TABLES = 3,
- TINFL_MAX_HUFF_SYMBOLS_0 = 288,
- TINFL_MAX_HUFF_SYMBOLS_1 = 32,
- TINFL_MAX_HUFF_SYMBOLS_2 = 19,
- TINFL_FAST_LOOKUP_BITS = 10,
- TINFL_FAST_LOOKUP_SIZE = 1 << TINFL_FAST_LOOKUP_BITS
-};
-
-typedef struct {
- mz_uint8 m_code_size[TINFL_MAX_HUFF_SYMBOLS_0];
- mz_int16 m_look_up[TINFL_FAST_LOOKUP_SIZE],
- m_tree[TINFL_MAX_HUFF_SYMBOLS_0 * 2];
-} tinfl_huff_table;
-
-#if MINIZ_HAS_64BIT_REGISTERS
-#define TINFL_USE_64BIT_BITBUF 1
-#endif
-
-#if TINFL_USE_64BIT_BITBUF
-typedef mz_uint64 tinfl_bit_buf_t;
-#define TINFL_BITBUF_SIZE (64)
-#else
-typedef mz_uint32 tinfl_bit_buf_t;
-#define TINFL_BITBUF_SIZE (32)
-#endif
-
-struct tinfl_decompressor_tag {
- mz_uint32 m_state, m_num_bits, m_zhdr0, m_zhdr1, m_z_adler32, m_final, m_type,
- m_check_adler32, m_dist, m_counter, m_num_extra,
- m_table_sizes[TINFL_MAX_HUFF_TABLES];
- tinfl_bit_buf_t m_bit_buf;
- size_t m_dist_from_out_buf_start;
- tinfl_huff_table m_tables[TINFL_MAX_HUFF_TABLES];
- mz_uint8 m_raw_header[4],
- m_len_codes[TINFL_MAX_HUFF_SYMBOLS_0 + TINFL_MAX_HUFF_SYMBOLS_1 + 137];
-};
-
-// ------------------- Low-level Compression API Definitions
-
-// Set TDEFL_LESS_MEMORY to 1 to use less memory (compression will be slightly
-// slower, and raw/dynamic blocks will be output more frequently).
-#define TDEFL_LESS_MEMORY 0
-
-// tdefl_init() compression flags logically OR'd together (low 12 bits contain
-// the max. number of probes per dictionary search):
-// TDEFL_DEFAULT_MAX_PROBES: The compressor defaults to 128 dictionary probes
-// per dictionary search. 0=Huffman only, 1=Huffman+LZ (fastest/crap
-// compression), 4095=Huffman+LZ (slowest/best compression).
-enum {
- TDEFL_HUFFMAN_ONLY = 0,
- TDEFL_DEFAULT_MAX_PROBES = 128,
- TDEFL_MAX_PROBES_MASK = 0xFFF
-};
-
-// TDEFL_WRITE_ZLIB_HEADER: If set, the compressor outputs a zlib header before
-// the deflate data, and the Adler-32 of the source data at the end. Otherwise,
-// you'll get raw deflate data.
-// TDEFL_COMPUTE_ADLER32: Always compute the adler-32 of the input data (even
-// when not writing zlib headers).
-// TDEFL_GREEDY_PARSING_FLAG: Set to use faster greedy parsing, instead of more
-// efficient lazy parsing.
-// TDEFL_NONDETERMINISTIC_PARSING_FLAG: Enable to decrease the compressor's
-// initialization time to the minimum, but the output may vary from run to run
-// given the same input (depending on the contents of memory).
-// TDEFL_RLE_MATCHES: Only look for RLE matches (matches with a distance of 1)
-// TDEFL_FILTER_MATCHES: Discards matches <= 5 chars if enabled.
-// TDEFL_FORCE_ALL_STATIC_BLOCKS: Disable usage of optimized Huffman tables.
-// TDEFL_FORCE_ALL_RAW_BLOCKS: Only use raw (uncompressed) deflate blocks.
-// The low 12 bits are reserved to control the max # of hash probes per
-// dictionary lookup (see TDEFL_MAX_PROBES_MASK).
-enum {
- TDEFL_WRITE_ZLIB_HEADER = 0x01000,
- TDEFL_COMPUTE_ADLER32 = 0x02000,
- TDEFL_GREEDY_PARSING_FLAG = 0x04000,
- TDEFL_NONDETERMINISTIC_PARSING_FLAG = 0x08000,
- TDEFL_RLE_MATCHES = 0x10000,
- TDEFL_FILTER_MATCHES = 0x20000,
- TDEFL_FORCE_ALL_STATIC_BLOCKS = 0x40000,
- TDEFL_FORCE_ALL_RAW_BLOCKS = 0x80000
-};
-
-// High level compression functions:
-// tdefl_compress_mem_to_heap() compresses a block in memory to a heap block
-// allocated via malloc().
-// On entry:
-// pSrc_buf, src_buf_len: Pointer and size of source block to compress.
-// flags: The max match finder probes (default is 128) logically OR'd against
-// the above flags. Higher probes are slower but improve compression.
-// On return:
-// Function returns a pointer to the compressed data, or NULL on failure.
-// *pOut_len will be set to the compressed data's size, which could be larger
-// than src_buf_len on uncompressible data.
-// The caller must free() the returned block when it's no longer needed.
-void *tdefl_compress_mem_to_heap(const void *pSrc_buf, size_t src_buf_len,
- size_t *pOut_len, int flags);
-
-// tdefl_compress_mem_to_mem() compresses a block in memory to another block in
-// memory.
-// Returns 0 on failure.
-size_t tdefl_compress_mem_to_mem(void *pOut_buf, size_t out_buf_len,
- const void *pSrc_buf, size_t src_buf_len,
- int flags);
-
-// Compresses an image to a compressed PNG file in memory.
-// On entry:
-// pImage, w, h, and num_chans describe the image to compress. num_chans may be
-// 1, 2, 3, or 4.
-// The image pitch in bytes per scanline will be w*num_chans. The leftmost
-// pixel on the top scanline is stored first in memory.
-// level may range from [0,10], use MZ_NO_COMPRESSION, MZ_BEST_SPEED,
-// MZ_BEST_COMPRESSION, etc. or a decent default is MZ_DEFAULT_LEVEL
-// If flip is true, the image will be flipped on the Y axis (useful for OpenGL
-// apps).
-// On return:
-// Function returns a pointer to the compressed data, or NULL on failure.
-// *pLen_out will be set to the size of the PNG image file.
-// The caller must mz_free() the returned heap block (which will typically be
-// larger than *pLen_out) when it's no longer needed.
-void *tdefl_write_image_to_png_file_in_memory_ex(const void *pImage, int w,
- int h, int num_chans,
- size_t *pLen_out,
- mz_uint level, mz_bool flip);
-void *tdefl_write_image_to_png_file_in_memory(const void *pImage, int w, int h,
- int num_chans, size_t *pLen_out);
-
-// Output stream interface. The compressor uses this interface to write
-// compressed data. It'll typically be called TDEFL_OUT_BUF_SIZE at a time.
-typedef mz_bool (*tdefl_put_buf_func_ptr)(const void *pBuf, int len,
- void *pUser);
-
-// tdefl_compress_mem_to_output() compresses a block to an output stream. The
-// above helpers use this function internally.
-mz_bool tdefl_compress_mem_to_output(const void *pBuf, size_t buf_len,
- tdefl_put_buf_func_ptr pPut_buf_func,
- void *pPut_buf_user, int flags);
-
-enum {
- TDEFL_MAX_HUFF_TABLES = 3,
- TDEFL_MAX_HUFF_SYMBOLS_0 = 288,
- TDEFL_MAX_HUFF_SYMBOLS_1 = 32,
- TDEFL_MAX_HUFF_SYMBOLS_2 = 19,
- TDEFL_LZ_DICT_SIZE = 32768,
- TDEFL_LZ_DICT_SIZE_MASK = TDEFL_LZ_DICT_SIZE - 1,
- TDEFL_MIN_MATCH_LEN = 3,
- TDEFL_MAX_MATCH_LEN = 258
-};
-
-// TDEFL_OUT_BUF_SIZE MUST be large enough to hold a single entire compressed
-// output block (using static/fixed Huffman codes).
-#if TDEFL_LESS_MEMORY
-enum {
- TDEFL_LZ_CODE_BUF_SIZE = 24 * 1024,
- TDEFL_OUT_BUF_SIZE = (TDEFL_LZ_CODE_BUF_SIZE * 13) / 10,
- TDEFL_MAX_HUFF_SYMBOLS = 288,
- TDEFL_LZ_HASH_BITS = 12,
- TDEFL_LEVEL1_HASH_SIZE_MASK = 4095,
- TDEFL_LZ_HASH_SHIFT = (TDEFL_LZ_HASH_BITS + 2) / 3,
- TDEFL_LZ_HASH_SIZE = 1 << TDEFL_LZ_HASH_BITS
-};
-#else
-enum {
- TDEFL_LZ_CODE_BUF_SIZE = 64 * 1024,
- TDEFL_OUT_BUF_SIZE = (TDEFL_LZ_CODE_BUF_SIZE * 13) / 10,
- TDEFL_MAX_HUFF_SYMBOLS = 288,
- TDEFL_LZ_HASH_BITS = 15,
- TDEFL_LEVEL1_HASH_SIZE_MASK = 4095,
- TDEFL_LZ_HASH_SHIFT = (TDEFL_LZ_HASH_BITS + 2) / 3,
- TDEFL_LZ_HASH_SIZE = 1 << TDEFL_LZ_HASH_BITS
-};
-#endif
-
-// The low-level tdefl functions below may be used directly if the above helper
-// functions aren't flexible enough. The low-level functions don't make any heap
-// allocations, unlike the above helper functions.
-typedef enum {
- TDEFL_STATUS_BAD_PARAM = -2,
- TDEFL_STATUS_PUT_BUF_FAILED = -1,
- TDEFL_STATUS_OKAY = 0,
- TDEFL_STATUS_DONE = 1
-} tdefl_status;
-
-// Must map to MZ_NO_FLUSH, MZ_SYNC_FLUSH, etc. enums
-typedef enum {
- TDEFL_NO_FLUSH = 0,
- TDEFL_SYNC_FLUSH = 2,
- TDEFL_FULL_FLUSH = 3,
- TDEFL_FINISH = 4
-} tdefl_flush;
-
-// tdefl's compression state structure.
-typedef struct {
- tdefl_put_buf_func_ptr m_pPut_buf_func;
- void *m_pPut_buf_user;
- mz_uint m_flags, m_max_probes[2];
- int m_greedy_parsing;
- mz_uint m_adler32, m_lookahead_pos, m_lookahead_size, m_dict_size;
- mz_uint8 *m_pLZ_code_buf, *m_pLZ_flags, *m_pOutput_buf, *m_pOutput_buf_end;
- mz_uint m_num_flags_left, m_total_lz_bytes, m_lz_code_buf_dict_pos, m_bits_in,
- m_bit_buffer;
- mz_uint m_saved_match_dist, m_saved_match_len, m_saved_lit,
- m_output_flush_ofs, m_output_flush_remaining, m_finished, m_block_index,
- m_wants_to_finish;
- tdefl_status m_prev_return_status;
- const void *m_pIn_buf;
- void *m_pOut_buf;
- size_t *m_pIn_buf_size, *m_pOut_buf_size;
- tdefl_flush m_flush;
- const mz_uint8 *m_pSrc;
- size_t m_src_buf_left, m_out_buf_ofs;
- mz_uint8 m_dict[TDEFL_LZ_DICT_SIZE + TDEFL_MAX_MATCH_LEN - 1];
- mz_uint16 m_huff_count[TDEFL_MAX_HUFF_TABLES][TDEFL_MAX_HUFF_SYMBOLS];
- mz_uint16 m_huff_codes[TDEFL_MAX_HUFF_TABLES][TDEFL_MAX_HUFF_SYMBOLS];
- mz_uint8 m_huff_code_sizes[TDEFL_MAX_HUFF_TABLES][TDEFL_MAX_HUFF_SYMBOLS];
- mz_uint8 m_lz_code_buf[TDEFL_LZ_CODE_BUF_SIZE];
- mz_uint16 m_next[TDEFL_LZ_DICT_SIZE];
- mz_uint16 m_hash[TDEFL_LZ_HASH_SIZE];
- mz_uint8 m_output_buf[TDEFL_OUT_BUF_SIZE];
-} tdefl_compressor;
-
-// Initializes the compressor.
-// There is no corresponding deinit() function because the tdefl API's do not
-// dynamically allocate memory.
-// pBut_buf_func: If NULL, output data will be supplied to the specified
-// callback. In this case, the user should call the tdefl_compress_buffer() API
-// for compression.
-// If pBut_buf_func is NULL the user should always call the tdefl_compress()
-// API.
-// flags: See the above enums (TDEFL_HUFFMAN_ONLY, TDEFL_WRITE_ZLIB_HEADER,
-// etc.)
-tdefl_status tdefl_init(tdefl_compressor *d,
- tdefl_put_buf_func_ptr pPut_buf_func,
- void *pPut_buf_user, int flags);
-
-// Compresses a block of data, consuming as much of the specified input buffer
-// as possible, and writing as much compressed data to the specified output
-// buffer as possible.
-tdefl_status tdefl_compress(tdefl_compressor *d, const void *pIn_buf,
- size_t *pIn_buf_size, void *pOut_buf,
- size_t *pOut_buf_size, tdefl_flush flush);
-
-// tdefl_compress_buffer() is only usable when the tdefl_init() is called with a
-// non-NULL tdefl_put_buf_func_ptr.
-// tdefl_compress_buffer() always consumes the entire input buffer.
-tdefl_status tdefl_compress_buffer(tdefl_compressor *d, const void *pIn_buf,
- size_t in_buf_size, tdefl_flush flush);
-
-tdefl_status tdefl_get_prev_return_status(tdefl_compressor *d);
-mz_uint32 tdefl_get_adler32(tdefl_compressor *d);
-
-// Can't use tdefl_create_comp_flags_from_zip_params if MINIZ_NO_ZLIB_APIS isn't
-// defined, because it uses some of its macros.
-#ifndef MINIZ_NO_ZLIB_APIS
-// Create tdefl_compress() flags given zlib-style compression parameters.
-// level may range from [0,10] (where 10 is absolute max compression, but may be
-// much slower on some files)
-// window_bits may be -15 (raw deflate) or 15 (zlib)
-// strategy may be either MZ_DEFAULT_STRATEGY, MZ_FILTERED, MZ_HUFFMAN_ONLY,
-// MZ_RLE, or MZ_FIXED
-mz_uint tdefl_create_comp_flags_from_zip_params(int level, int window_bits,
- int strategy);
-#endif // #ifndef MINIZ_NO_ZLIB_APIS
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif // MINIZ_HEADER_INCLUDED
-
-// ------------------- End of Header: Implementation follows. (If you only want
-// the header, define MINIZ_HEADER_FILE_ONLY.)
-
-#ifndef MINIZ_HEADER_FILE_ONLY
-
-typedef unsigned char mz_validate_uint16[sizeof(mz_uint16) == 2 ? 1 : -1];
-typedef unsigned char mz_validate_uint32[sizeof(mz_uint32) == 4 ? 1 : -1];
-typedef unsigned char mz_validate_uint64[sizeof(mz_uint64) == 8 ? 1 : -1];
-
-//#include <assert.h>
-//#include <string.h>
-
-#define MZ_ASSERT(x) assert(x)
-
-#ifdef MINIZ_NO_MALLOC
-#define MZ_MALLOC(x) NULL
-#define MZ_FREE(x) (void)x, ((void)0)
-#define MZ_REALLOC(p, x) NULL
-#else
-#define MZ_MALLOC(x) malloc(x)
-#define MZ_FREE(x) free(x)
-#define MZ_REALLOC(p, x) realloc(p, x)
-#endif
-
-#define MZ_MAX(a, b) (((a) > (b)) ? (a) : (b))
-#define MZ_MIN(a, b) (((a) < (b)) ? (a) : (b))
-#define MZ_CLEAR_OBJ(obj) memset(&(obj), 0, sizeof(obj))
-
-#if MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN
-#define MZ_READ_LE16(p) *((const mz_uint16 *)(p))
-#define MZ_READ_LE32(p) *((const mz_uint32 *)(p))
-#else
-#define MZ_READ_LE16(p) \
- ((mz_uint32)(((const mz_uint8 *)(p))[0]) | \
- ((mz_uint32)(((const mz_uint8 *)(p))[1]) << 8U))
-#define MZ_READ_LE32(p) \
- ((mz_uint32)(((const mz_uint8 *)(p))[0]) | \
- ((mz_uint32)(((const mz_uint8 *)(p))[1]) << 8U) | \
- ((mz_uint32)(((const mz_uint8 *)(p))[2]) << 16U) | \
- ((mz_uint32)(((const mz_uint8 *)(p))[3]) << 24U))
-#endif
-
-#ifdef _MSC_VER
-#define MZ_FORCEINLINE __forceinline
-#elif defined(__GNUC__)
-#define MZ_FORCEINLINE inline __attribute__((__always_inline__))
-#else
-#define MZ_FORCEINLINE inline
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// ------------------- zlib-style API's
-
-mz_ulong mz_adler32(mz_ulong adler, const unsigned char *ptr, size_t buf_len) {
- mz_uint32 i, s1 = (mz_uint32)(adler & 0xffff), s2 = (mz_uint32)(adler >> 16);
- size_t block_len = buf_len % 5552;
- if (!ptr) return MZ_ADLER32_INIT;
- while (buf_len) {
- for (i = 0; i + 7 < block_len; i += 8, ptr += 8) {
- s1 += ptr[0], s2 += s1;
- s1 += ptr[1], s2 += s1;
- s1 += ptr[2], s2 += s1;
- s1 += ptr[3], s2 += s1;
- s1 += ptr[4], s2 += s1;
- s1 += ptr[5], s2 += s1;
- s1 += ptr[6], s2 += s1;
- s1 += ptr[7], s2 += s1;
- }
- for (; i < block_len; ++i) s1 += *ptr++, s2 += s1;
- s1 %= 65521U, s2 %= 65521U;
- buf_len -= block_len;
- block_len = 5552;
- }
- return (s2 << 16) + s1;
-}
-
-// Karl Malbrain's compact CRC-32. See "A compact CCITT crc16 and crc32 C
-// implementation that balances processor cache usage against speed":
-// http://www.geocities.com/malbrain/
-mz_ulong mz_crc32(mz_ulong crc, const mz_uint8 *ptr, size_t buf_len) {
- static const mz_uint32 s_crc32[16] = {
- 0, 0x1db71064, 0x3b6e20c8, 0x26d930ac, 0x76dc4190, 0x6b6b51f4,
- 0x4db26158, 0x5005713c, 0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c,
- 0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c};
- mz_uint32 crcu32 = (mz_uint32)crc;
- if (!ptr) return MZ_CRC32_INIT;
- crcu32 = ~crcu32;
- while (buf_len--) {
- mz_uint8 b = *ptr++;
- crcu32 = (crcu32 >> 4) ^ s_crc32[(crcu32 & 0xF) ^ (b & 0xF)];
- crcu32 = (crcu32 >> 4) ^ s_crc32[(crcu32 & 0xF) ^ (b >> 4)];
- }
- return ~crcu32;
-}
-
-void mz_free(void *p) { MZ_FREE(p); }
-
-#ifndef MINIZ_NO_ZLIB_APIS
-
-static void *def_alloc_func(void *opaque, size_t items, size_t size) {
- (void)opaque, (void)items, (void)size;
- return MZ_MALLOC(items * size);
-}
-static void def_free_func(void *opaque, void *address) {
- (void)opaque, (void)address;
- MZ_FREE(address);
-}
-// static void *def_realloc_func(void *opaque, void *address, size_t items,
-// size_t size) {
-// (void)opaque, (void)address, (void)items, (void)size;
-// return MZ_REALLOC(address, items * size);
-//}
-
-const char *mz_version(void) { return MZ_VERSION; }
-
-int mz_deflateInit(mz_streamp pStream, int level) {
- return mz_deflateInit2(pStream, level, MZ_DEFLATED, MZ_DEFAULT_WINDOW_BITS, 9,
- MZ_DEFAULT_STRATEGY);
-}
-
-int mz_deflateInit2(mz_streamp pStream, int level, int method, int window_bits,
- int mem_level, int strategy) {
- tdefl_compressor *pComp;
- mz_uint comp_flags =
- TDEFL_COMPUTE_ADLER32 |
- tdefl_create_comp_flags_from_zip_params(level, window_bits, strategy);
-
- if (!pStream) return MZ_STREAM_ERROR;
- if ((method != MZ_DEFLATED) || ((mem_level < 1) || (mem_level > 9)) ||
- ((window_bits != MZ_DEFAULT_WINDOW_BITS) &&
- (-window_bits != MZ_DEFAULT_WINDOW_BITS)))
- return MZ_PARAM_ERROR;
-
- pStream->data_type = 0;
- pStream->adler = MZ_ADLER32_INIT;
- pStream->msg = NULL;
- pStream->reserved = 0;
- pStream->total_in = 0;
- pStream->total_out = 0;
- if (!pStream->zalloc) pStream->zalloc = def_alloc_func;
- if (!pStream->zfree) pStream->zfree = def_free_func;
-
- pComp = (tdefl_compressor *)pStream->zalloc(pStream->opaque, 1,
- sizeof(tdefl_compressor));
- if (!pComp) return MZ_MEM_ERROR;
-
- pStream->state = (struct mz_internal_state *)pComp;
-
- if (tdefl_init(pComp, NULL, NULL, comp_flags) != TDEFL_STATUS_OKAY) {
- mz_deflateEnd(pStream);
- return MZ_PARAM_ERROR;
- }
-
- return MZ_OK;
-}
-
-int mz_deflateReset(mz_streamp pStream) {
- if ((!pStream) || (!pStream->state) || (!pStream->zalloc) ||
- (!pStream->zfree))
- return MZ_STREAM_ERROR;
- pStream->total_in = pStream->total_out = 0;
- tdefl_init((tdefl_compressor *)pStream->state, NULL, NULL,
- ((tdefl_compressor *)pStream->state)->m_flags);
- return MZ_OK;
-}
-
-int mz_deflate(mz_streamp pStream, int flush) {
- size_t in_bytes, out_bytes;
- mz_ulong orig_total_in, orig_total_out;
- int mz_status = MZ_OK;
-
- if ((!pStream) || (!pStream->state) || (flush < 0) || (flush > MZ_FINISH) ||
- (!pStream->next_out))
- return MZ_STREAM_ERROR;
- if (!pStream->avail_out) return MZ_BUF_ERROR;
-
- if (flush == MZ_PARTIAL_FLUSH) flush = MZ_SYNC_FLUSH;
-
- if (((tdefl_compressor *)pStream->state)->m_prev_return_status ==
- TDEFL_STATUS_DONE)
- return (flush == MZ_FINISH) ? MZ_STREAM_END : MZ_BUF_ERROR;
-
- orig_total_in = pStream->total_in;
- orig_total_out = pStream->total_out;
- for (;;) {
- tdefl_status defl_status;
- in_bytes = pStream->avail_in;
- out_bytes = pStream->avail_out;
-
- defl_status = tdefl_compress((tdefl_compressor *)pStream->state,
- pStream->next_in, &in_bytes, pStream->next_out,
- &out_bytes, (tdefl_flush)flush);
- pStream->next_in += (mz_uint)in_bytes;
- pStream->avail_in -= (mz_uint)in_bytes;
- pStream->total_in += (mz_uint)in_bytes;
- pStream->adler = tdefl_get_adler32((tdefl_compressor *)pStream->state);
-
- pStream->next_out += (mz_uint)out_bytes;
- pStream->avail_out -= (mz_uint)out_bytes;
- pStream->total_out += (mz_uint)out_bytes;
-
- if (defl_status < 0) {
- mz_status = MZ_STREAM_ERROR;
- break;
- } else if (defl_status == TDEFL_STATUS_DONE) {
- mz_status = MZ_STREAM_END;
- break;
- } else if (!pStream->avail_out)
- break;
- else if ((!pStream->avail_in) && (flush != MZ_FINISH)) {
- if ((flush) || (pStream->total_in != orig_total_in) ||
- (pStream->total_out != orig_total_out))
- break;
- return MZ_BUF_ERROR; // Can't make forward progress without some input.
- }
- }
- return mz_status;
-}
-
-int mz_deflateEnd(mz_streamp pStream) {
- if (!pStream) return MZ_STREAM_ERROR;
- if (pStream->state) {
- pStream->zfree(pStream->opaque, pStream->state);
- pStream->state = NULL;
- }
- return MZ_OK;
-}
-
-mz_ulong mz_deflateBound(mz_streamp pStream, mz_ulong source_len) {
- (void)pStream;
- // This is really over conservative. (And lame, but it's actually pretty
- // tricky to compute a true upper bound given the way tdefl's blocking works.)
- return MZ_MAX(128 + (source_len * 110) / 100,
- 128 + source_len + ((source_len / (31 * 1024)) + 1) * 5);
-}
-
-int mz_compress2(unsigned char *pDest, mz_ulong *pDest_len,
- const unsigned char *pSource, mz_ulong source_len, int level) {
- int status;
- mz_stream stream;
- memset(&stream, 0, sizeof(stream));
-
- // In case mz_ulong is 64-bits (argh I hate longs).
- if ((source_len | *pDest_len) > 0xFFFFFFFFU) return MZ_PARAM_ERROR;
-
- stream.next_in = pSource;
- stream.avail_in = (mz_uint32)source_len;
- stream.next_out = pDest;
- stream.avail_out = (mz_uint32)*pDest_len;
-
- status = mz_deflateInit(&stream, level);
- if (status != MZ_OK) return status;
-
- status = mz_deflate(&stream, MZ_FINISH);
- if (status != MZ_STREAM_END) {
- mz_deflateEnd(&stream);
- return (status == MZ_OK) ? MZ_BUF_ERROR : status;
- }
-
- *pDest_len = stream.total_out;
- return mz_deflateEnd(&stream);
-}
-
-int mz_compress(unsigned char *pDest, mz_ulong *pDest_len,
- const unsigned char *pSource, mz_ulong source_len) {
- return mz_compress2(pDest, pDest_len, pSource, source_len,
- MZ_DEFAULT_COMPRESSION);
-}
-
-mz_ulong mz_compressBound(mz_ulong source_len) {
- return mz_deflateBound(NULL, source_len);
-}
-
-typedef struct {
- tinfl_decompressor m_decomp;
- mz_uint m_dict_ofs, m_dict_avail, m_first_call, m_has_flushed;
- int m_window_bits;
- mz_uint8 m_dict[TINFL_LZ_DICT_SIZE];
- tinfl_status m_last_status;
-} inflate_state;
-
-int mz_inflateInit2(mz_streamp pStream, int window_bits) {
- inflate_state *pDecomp;
- if (!pStream) return MZ_STREAM_ERROR;
- if ((window_bits != MZ_DEFAULT_WINDOW_BITS) &&
- (-window_bits != MZ_DEFAULT_WINDOW_BITS))
- return MZ_PARAM_ERROR;
-
- pStream->data_type = 0;
- pStream->adler = 0;
- pStream->msg = NULL;
- pStream->total_in = 0;
- pStream->total_out = 0;
- pStream->reserved = 0;
- if (!pStream->zalloc) pStream->zalloc = def_alloc_func;
- if (!pStream->zfree) pStream->zfree = def_free_func;
-
- pDecomp = (inflate_state *)pStream->zalloc(pStream->opaque, 1,
- sizeof(inflate_state));
- if (!pDecomp) return MZ_MEM_ERROR;
-
- pStream->state = (struct mz_internal_state *)pDecomp;
-
- tinfl_init(&pDecomp->m_decomp);
- pDecomp->m_dict_ofs = 0;
- pDecomp->m_dict_avail = 0;
- pDecomp->m_last_status = TINFL_STATUS_NEEDS_MORE_INPUT;
- pDecomp->m_first_call = 1;
- pDecomp->m_has_flushed = 0;
- pDecomp->m_window_bits = window_bits;
-
- return MZ_OK;
-}
-
-int mz_inflateInit(mz_streamp pStream) {
- return mz_inflateInit2(pStream, MZ_DEFAULT_WINDOW_BITS);
-}
-
-int mz_inflate(mz_streamp pStream, int flush) {
- inflate_state *pState;
- mz_uint n, first_call, decomp_flags = TINFL_FLAG_COMPUTE_ADLER32;
- size_t in_bytes, out_bytes, orig_avail_in;
- tinfl_status status;
-
- if ((!pStream) || (!pStream->state)) return MZ_STREAM_ERROR;
- if (flush == MZ_PARTIAL_FLUSH) flush = MZ_SYNC_FLUSH;
- if ((flush) && (flush != MZ_SYNC_FLUSH) && (flush != MZ_FINISH))
- return MZ_STREAM_ERROR;
-
- pState = (inflate_state *)pStream->state;
- if (pState->m_window_bits > 0) decomp_flags |= TINFL_FLAG_PARSE_ZLIB_HEADER;
- orig_avail_in = pStream->avail_in;
-
- first_call = pState->m_first_call;
- pState->m_first_call = 0;
- if (pState->m_last_status < 0) return MZ_DATA_ERROR;
-
- if (pState->m_has_flushed && (flush != MZ_FINISH)) return MZ_STREAM_ERROR;
- pState->m_has_flushed |= (flush == MZ_FINISH);
-
- if ((flush == MZ_FINISH) && (first_call)) {
- // MZ_FINISH on the first call implies that the input and output buffers are
- // large enough to hold the entire compressed/decompressed file.
- decomp_flags |= TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF;
- in_bytes = pStream->avail_in;
- out_bytes = pStream->avail_out;
- status = tinfl_decompress(&pState->m_decomp, pStream->next_in, &in_bytes,
- pStream->next_out, pStream->next_out, &out_bytes,
- decomp_flags);
- pState->m_last_status = status;
- pStream->next_in += (mz_uint)in_bytes;
- pStream->avail_in -= (mz_uint)in_bytes;
- pStream->total_in += (mz_uint)in_bytes;
- pStream->adler = tinfl_get_adler32(&pState->m_decomp);
- pStream->next_out += (mz_uint)out_bytes;
- pStream->avail_out -= (mz_uint)out_bytes;
- pStream->total_out += (mz_uint)out_bytes;
-
- if (status < 0)
- return MZ_DATA_ERROR;
- else if (status != TINFL_STATUS_DONE) {
- pState->m_last_status = TINFL_STATUS_FAILED;
- return MZ_BUF_ERROR;
- }
- return MZ_STREAM_END;
- }
- // flush != MZ_FINISH then we must assume there's more input.
- if (flush != MZ_FINISH) decomp_flags |= TINFL_FLAG_HAS_MORE_INPUT;
-
- if (pState->m_dict_avail) {
- n = MZ_MIN(pState->m_dict_avail, pStream->avail_out);
- memcpy(pStream->next_out, pState->m_dict + pState->m_dict_ofs, n);
- pStream->next_out += n;
- pStream->avail_out -= n;
- pStream->total_out += n;
- pState->m_dict_avail -= n;
- pState->m_dict_ofs = (pState->m_dict_ofs + n) & (TINFL_LZ_DICT_SIZE - 1);
- return ((pState->m_last_status == TINFL_STATUS_DONE) &&
- (!pState->m_dict_avail))
- ? MZ_STREAM_END
- : MZ_OK;
- }
-
- for (;;) {
- in_bytes = pStream->avail_in;
- out_bytes = TINFL_LZ_DICT_SIZE - pState->m_dict_ofs;
-
- status = tinfl_decompress(
- &pState->m_decomp, pStream->next_in, &in_bytes, pState->m_dict,
- pState->m_dict + pState->m_dict_ofs, &out_bytes, decomp_flags);
- pState->m_last_status = status;
-
- pStream->next_in += (mz_uint)in_bytes;
- pStream->avail_in -= (mz_uint)in_bytes;
- pStream->total_in += (mz_uint)in_bytes;
- pStream->adler = tinfl_get_adler32(&pState->m_decomp);
-
- pState->m_dict_avail = (mz_uint)out_bytes;
-
- n = MZ_MIN(pState->m_dict_avail, pStream->avail_out);
- memcpy(pStream->next_out, pState->m_dict + pState->m_dict_ofs, n);
- pStream->next_out += n;
- pStream->avail_out -= n;
- pStream->total_out += n;
- pState->m_dict_avail -= n;
- pState->m_dict_ofs = (pState->m_dict_ofs + n) & (TINFL_LZ_DICT_SIZE - 1);
-
- if (status < 0)
- return MZ_DATA_ERROR; // Stream is corrupted (there could be some
- // uncompressed data left in the output dictionary -
- // oh well).
- else if ((status == TINFL_STATUS_NEEDS_MORE_INPUT) && (!orig_avail_in))
- return MZ_BUF_ERROR; // Signal caller that we can't make forward progress
- // without supplying more input or by setting flush
- // to MZ_FINISH.
- else if (flush == MZ_FINISH) {
- // The output buffer MUST be large to hold the remaining uncompressed data
- // when flush==MZ_FINISH.
- if (status == TINFL_STATUS_DONE)
- return pState->m_dict_avail ? MZ_BUF_ERROR : MZ_STREAM_END;
- // status here must be TINFL_STATUS_HAS_MORE_OUTPUT, which means there's
- // at least 1 more byte on the way. If there's no more room left in the
- // output buffer then something is wrong.
- else if (!pStream->avail_out)
- return MZ_BUF_ERROR;
- } else if ((status == TINFL_STATUS_DONE) || (!pStream->avail_in) ||
- (!pStream->avail_out) || (pState->m_dict_avail))
- break;
- }
-
- return ((status == TINFL_STATUS_DONE) && (!pState->m_dict_avail))
- ? MZ_STREAM_END
- : MZ_OK;
-}
-
-int mz_inflateEnd(mz_streamp pStream) {
- if (!pStream) return MZ_STREAM_ERROR;
- if (pStream->state) {
- pStream->zfree(pStream->opaque, pStream->state);
- pStream->state = NULL;
- }
- return MZ_OK;
-}
-
-int mz_uncompress(unsigned char *pDest, mz_ulong *pDest_len,
- const unsigned char *pSource, mz_ulong source_len) {
- mz_stream stream;
- int status;
- memset(&stream, 0, sizeof(stream));
-
- // In case mz_ulong is 64-bits (argh I hate longs).
- if ((source_len | *pDest_len) > 0xFFFFFFFFU) return MZ_PARAM_ERROR;
-
- stream.next_in = pSource;
- stream.avail_in = (mz_uint32)source_len;
- stream.next_out = pDest;
- stream.avail_out = (mz_uint32)*pDest_len;
-
- status = mz_inflateInit(&stream);
- if (status != MZ_OK) return status;
-
- status = mz_inflate(&stream, MZ_FINISH);
- if (status != MZ_STREAM_END) {
- mz_inflateEnd(&stream);
- return ((status == MZ_BUF_ERROR) && (!stream.avail_in)) ? MZ_DATA_ERROR
- : status;
- }
- *pDest_len = stream.total_out;
-
- return mz_inflateEnd(&stream);
-}
-
-const char *mz_error(int err) {
- static struct {
- int m_err;
- const char *m_pDesc;
- } s_error_descs[] = {{MZ_OK, ""},
- {MZ_STREAM_END, "stream end"},
- {MZ_NEED_DICT, "need dictionary"},
- {MZ_ERRNO, "file error"},
- {MZ_STREAM_ERROR, "stream error"},
- {MZ_DATA_ERROR, "data error"},
- {MZ_MEM_ERROR, "out of memory"},
- {MZ_BUF_ERROR, "buf error"},
- {MZ_VERSION_ERROR, "version error"},
- {MZ_PARAM_ERROR, "parameter error"}};
- mz_uint i;
- for (i = 0; i < sizeof(s_error_descs) / sizeof(s_error_descs[0]); ++i)
- if (s_error_descs[i].m_err == err) return s_error_descs[i].m_pDesc;
- return NULL;
-}
-
-#endif // MINIZ_NO_ZLIB_APIS
-
-// ------------------- Low-level Decompression (completely independent from all
-// compression API's)
-
-#define TINFL_MEMCPY(d, s, l) memcpy(d, s, l)
-#define TINFL_MEMSET(p, c, l) memset(p, c, l)
-
-#define TINFL_CR_BEGIN \
- switch (r->m_state) { \
- case 0:
-#define TINFL_CR_RETURN(state_index, result) \
- do { \
- status = result; \
- r->m_state = state_index; \
- goto common_exit; \
- case state_index:; \
- } \
- MZ_MACRO_END
-#define TINFL_CR_RETURN_FOREVER(state_index, result) \
- do { \
- for (;;) { \
- TINFL_CR_RETURN(state_index, result); \
- } \
- } \
- MZ_MACRO_END
-#define TINFL_CR_FINISH }
-
-// TODO: If the caller has indicated that there's no more input, and we attempt
-// to read beyond the input buf, then something is wrong with the input because
-// the inflator never
-// reads ahead more than it needs to. Currently TINFL_GET_BYTE() pads the end of
-// the stream with 0's in this scenario.
-#define TINFL_GET_BYTE(state_index, c) \
- do { \
- if (pIn_buf_cur >= pIn_buf_end) { \
- for (;;) { \
- if (decomp_flags & TINFL_FLAG_HAS_MORE_INPUT) { \
- TINFL_CR_RETURN(state_index, TINFL_STATUS_NEEDS_MORE_INPUT); \
- if (pIn_buf_cur < pIn_buf_end) { \
- c = *pIn_buf_cur++; \
- break; \
- } \
- } else { \
- c = 0; \
- break; \
- } \
- } \
- } else \
- c = *pIn_buf_cur++; \
- } \
- MZ_MACRO_END
-
-#define TINFL_NEED_BITS(state_index, n) \
- do { \
- mz_uint c; \
- TINFL_GET_BYTE(state_index, c); \
- bit_buf |= (((tinfl_bit_buf_t)c) << num_bits); \
- num_bits += 8; \
- } while (num_bits < (mz_uint)(n))
-#define TINFL_SKIP_BITS(state_index, n) \
- do { \
- if (num_bits < (mz_uint)(n)) { \
- TINFL_NEED_BITS(state_index, n); \
- } \
- bit_buf >>= (n); \
- num_bits -= (n); \
- } \
- MZ_MACRO_END
-#define TINFL_GET_BITS(state_index, b, n) \
- do { \
- if (num_bits < (mz_uint)(n)) { \
- TINFL_NEED_BITS(state_index, n); \
- } \
- b = bit_buf & ((1 << (n)) - 1); \
- bit_buf >>= (n); \
- num_bits -= (n); \
- } \
- MZ_MACRO_END
-
-// TINFL_HUFF_BITBUF_FILL() is only used rarely, when the number of bytes
-// remaining in the input buffer falls below 2.
-// It reads just enough bytes from the input stream that are needed to decode
-// the next Huffman code (and absolutely no more). It works by trying to fully
-// decode a
-// Huffman code by using whatever bits are currently present in the bit buffer.
-// If this fails, it reads another byte, and tries again until it succeeds or
-// until the
-// bit buffer contains >=15 bits (deflate's max. Huffman code size).
-#define TINFL_HUFF_BITBUF_FILL(state_index, pHuff) \
- do { \
- temp = (pHuff)->m_look_up[bit_buf & (TINFL_FAST_LOOKUP_SIZE - 1)]; \
- if (temp >= 0) { \
- code_len = temp >> 9; \
- if ((code_len) && (num_bits >= code_len)) break; \
- } else if (num_bits > TINFL_FAST_LOOKUP_BITS) { \
- code_len = TINFL_FAST_LOOKUP_BITS; \
- do { \
- temp = (pHuff)->m_tree[~temp + ((bit_buf >> code_len++) & 1)]; \
- } while ((temp < 0) && (num_bits >= (code_len + 1))); \
- if (temp >= 0) break; \
- } \
- TINFL_GET_BYTE(state_index, c); \
- bit_buf |= (((tinfl_bit_buf_t)c) << num_bits); \
- num_bits += 8; \
- } while (num_bits < 15);
-
-// TINFL_HUFF_DECODE() decodes the next Huffman coded symbol. It's more complex
-// than you would initially expect because the zlib API expects the decompressor
-// to never read
-// beyond the final byte of the deflate stream. (In other words, when this macro
-// wants to read another byte from the input, it REALLY needs another byte in
-// order to fully
-// decode the next Huffman code.) Handling this properly is particularly
-// important on raw deflate (non-zlib) streams, which aren't followed by a byte
-// aligned adler-32.
-// The slow path is only executed at the very end of the input buffer.
-#define TINFL_HUFF_DECODE(state_index, sym, pHuff) \
- do { \
- int temp; \
- mz_uint code_len, c; \
- if (num_bits < 15) { \
- if ((pIn_buf_end - pIn_buf_cur) < 2) { \
- TINFL_HUFF_BITBUF_FILL(state_index, pHuff); \
- } else { \
- bit_buf |= (((tinfl_bit_buf_t)pIn_buf_cur[0]) << num_bits) | \
- (((tinfl_bit_buf_t)pIn_buf_cur[1]) << (num_bits + 8)); \
- pIn_buf_cur += 2; \
- num_bits += 16; \
- } \
- } \
- if ((temp = (pHuff)->m_look_up[bit_buf & (TINFL_FAST_LOOKUP_SIZE - 1)]) >= \
- 0) \
- code_len = temp >> 9, temp &= 511; \
- else { \
- code_len = TINFL_FAST_LOOKUP_BITS; \
- do { \
- temp = (pHuff)->m_tree[~temp + ((bit_buf >> code_len++) & 1)]; \
- } while (temp < 0); \
- } \
- sym = temp; \
- bit_buf >>= code_len; \
- num_bits -= code_len; \
- } \
- MZ_MACRO_END
-
-tinfl_status tinfl_decompress(tinfl_decompressor *r,
- const mz_uint8 *pIn_buf_next,
- size_t *pIn_buf_size, mz_uint8 *pOut_buf_start,
- mz_uint8 *pOut_buf_next, size_t *pOut_buf_size,
- const mz_uint32 decomp_flags) {
- static const int s_length_base[31] = {
- 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
- 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0};
- static const int s_length_extra[31] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
- 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4,
- 4, 4, 5, 5, 5, 5, 0, 0, 0};
- static const int s_dist_base[32] = {
- 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33,
- 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537,
- 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577, 0, 0};
- static const int s_dist_extra[32] = {0, 0, 0, 0, 1, 1, 2, 2, 3, 3,
- 4, 4, 5, 5, 6, 6, 7, 7, 8, 8,
- 9, 9, 10, 10, 11, 11, 12, 12, 13, 13};
- static const mz_uint8 s_length_dezigzag[19] = {
- 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
- static const int s_min_table_sizes[3] = {257, 1, 4};
-
- tinfl_status status = TINFL_STATUS_FAILED;
- mz_uint32 num_bits, dist, counter, num_extra;
- tinfl_bit_buf_t bit_buf;
- const mz_uint8 *pIn_buf_cur = pIn_buf_next, *const pIn_buf_end =
- pIn_buf_next + *pIn_buf_size;
- mz_uint8 *pOut_buf_cur = pOut_buf_next, *const pOut_buf_end =
- pOut_buf_next + *pOut_buf_size;
- size_t out_buf_size_mask =
- (decomp_flags & TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF)
- ? (size_t)-1
- : ((pOut_buf_next - pOut_buf_start) + *pOut_buf_size) - 1,
- dist_from_out_buf_start;
-
- // Ensure the output buffer's size is a power of 2, unless the output buffer
- // is large enough to hold the entire output file (in which case it doesn't
- // matter).
- if (((out_buf_size_mask + 1) & out_buf_size_mask) ||
- (pOut_buf_next < pOut_buf_start)) {
- *pIn_buf_size = *pOut_buf_size = 0;
- return TINFL_STATUS_BAD_PARAM;
- }
-
- num_bits = r->m_num_bits;
- bit_buf = r->m_bit_buf;
- dist = r->m_dist;
- counter = r->m_counter;
- num_extra = r->m_num_extra;
- dist_from_out_buf_start = r->m_dist_from_out_buf_start;
- TINFL_CR_BEGIN
-
- bit_buf = num_bits = dist = counter = num_extra = r->m_zhdr0 = r->m_zhdr1 = 0;
- r->m_z_adler32 = r->m_check_adler32 = 1;
- if (decomp_flags & TINFL_FLAG_PARSE_ZLIB_HEADER) {
- TINFL_GET_BYTE(1, r->m_zhdr0);
- TINFL_GET_BYTE(2, r->m_zhdr1);
- counter = (((r->m_zhdr0 * 256 + r->m_zhdr1) % 31 != 0) ||
- (r->m_zhdr1 & 32) || ((r->m_zhdr0 & 15) != 8));
- if (!(decomp_flags & TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF))
- counter |= (((1U << (8U + (r->m_zhdr0 >> 4))) > 32768U) ||
- ((out_buf_size_mask + 1) <
- (size_t)(1ULL << (8U + (r->m_zhdr0 >> 4)))));
- if (counter) {
- TINFL_CR_RETURN_FOREVER(36, TINFL_STATUS_FAILED);
- }
- }
-
- do {
- TINFL_GET_BITS(3, r->m_final, 3);
- r->m_type = r->m_final >> 1;
- if (r->m_type == 0) {
- TINFL_SKIP_BITS(5, num_bits & 7);
- for (counter = 0; counter < 4; ++counter) {
- if (num_bits)
- TINFL_GET_BITS(6, r->m_raw_header[counter], 8);
- else
- TINFL_GET_BYTE(7, r->m_raw_header[counter]);
- }
- if ((counter = (r->m_raw_header[0] | (r->m_raw_header[1] << 8))) !=
- (mz_uint)(0xFFFF ^
- (r->m_raw_header[2] | (r->m_raw_header[3] << 8)))) {
- TINFL_CR_RETURN_FOREVER(39, TINFL_STATUS_FAILED);
- }
- while ((counter) && (num_bits)) {
- TINFL_GET_BITS(51, dist, 8);
- while (pOut_buf_cur >= pOut_buf_end) {
- TINFL_CR_RETURN(52, TINFL_STATUS_HAS_MORE_OUTPUT);
- }
- *pOut_buf_cur++ = (mz_uint8)dist;
- counter--;
- }
- while (counter) {
- size_t n;
- while (pOut_buf_cur >= pOut_buf_end) {
- TINFL_CR_RETURN(9, TINFL_STATUS_HAS_MORE_OUTPUT);
- }
- while (pIn_buf_cur >= pIn_buf_end) {
- if (decomp_flags & TINFL_FLAG_HAS_MORE_INPUT) {
- TINFL_CR_RETURN(38, TINFL_STATUS_NEEDS_MORE_INPUT);
- } else {
- TINFL_CR_RETURN_FOREVER(40, TINFL_STATUS_FAILED);
- }
- }
- n = MZ_MIN(MZ_MIN((size_t)(pOut_buf_end - pOut_buf_cur),
- (size_t)(pIn_buf_end - pIn_buf_cur)),
- counter);
- TINFL_MEMCPY(pOut_buf_cur, pIn_buf_cur, n);
- pIn_buf_cur += n;
- pOut_buf_cur += n;
- counter -= (mz_uint)n;
- }
- } else if (r->m_type == 3) {
- TINFL_CR_RETURN_FOREVER(10, TINFL_STATUS_FAILED);
- } else {
- if (r->m_type == 1) {
- mz_uint8 *p = r->m_tables[0].m_code_size;
- mz_uint i;
- r->m_table_sizes[0] = 288;
- r->m_table_sizes[1] = 32;
- TINFL_MEMSET(r->m_tables[1].m_code_size, 5, 32);
- for (i = 0; i <= 143; ++i) *p++ = 8;
- for (; i <= 255; ++i) *p++ = 9;
- for (; i <= 279; ++i) *p++ = 7;
- for (; i <= 287; ++i) *p++ = 8;
- } else {
- for (counter = 0; counter < 3; counter++) {
- TINFL_GET_BITS(11, r->m_table_sizes[counter], "\05\05\04"[counter]);
- r->m_table_sizes[counter] += s_min_table_sizes[counter];
- }
- MZ_CLEAR_OBJ(r->m_tables[2].m_code_size);
- for (counter = 0; counter < r->m_table_sizes[2]; counter++) {
- mz_uint s;
- TINFL_GET_BITS(14, s, 3);
- r->m_tables[2].m_code_size[s_length_dezigzag[counter]] = (mz_uint8)s;
- }
- r->m_table_sizes[2] = 19;
- }
- for (; (int)r->m_type >= 0; r->m_type--) {
- int tree_next, tree_cur;
- tinfl_huff_table *pTable;
- mz_uint i, j, used_syms, total, sym_index, next_code[17],
- total_syms[16];
- pTable = &r->m_tables[r->m_type];
- MZ_CLEAR_OBJ(total_syms);
- MZ_CLEAR_OBJ(pTable->m_look_up);
- MZ_CLEAR_OBJ(pTable->m_tree);
- for (i = 0; i < r->m_table_sizes[r->m_type]; ++i)
- total_syms[pTable->m_code_size[i]]++;
- used_syms = 0, total = 0;
- next_code[0] = next_code[1] = 0;
- for (i = 1; i <= 15; ++i) {
- used_syms += total_syms[i];
- next_code[i + 1] = (total = ((total + total_syms[i]) << 1));
- }
- if ((65536 != total) && (used_syms > 1)) {
- TINFL_CR_RETURN_FOREVER(35, TINFL_STATUS_FAILED);
- }
- for (tree_next = -1, sym_index = 0;
- sym_index < r->m_table_sizes[r->m_type]; ++sym_index) {
- mz_uint rev_code = 0, l, cur_code,
- code_size = pTable->m_code_size[sym_index];
- if (!code_size) continue;
- cur_code = next_code[code_size]++;
- for (l = code_size; l > 0; l--, cur_code >>= 1)
- rev_code = (rev_code << 1) | (cur_code & 1);
- if (code_size <= TINFL_FAST_LOOKUP_BITS) {
- mz_int16 k = (mz_int16)((code_size << 9) | sym_index);
- while (rev_code < TINFL_FAST_LOOKUP_SIZE) {
- pTable->m_look_up[rev_code] = k;
- rev_code += (1 << code_size);
- }
- continue;
- }
- if (0 ==
- (tree_cur = pTable->m_look_up[rev_code &
- (TINFL_FAST_LOOKUP_SIZE - 1)])) {
- pTable->m_look_up[rev_code & (TINFL_FAST_LOOKUP_SIZE - 1)] =
- (mz_int16)tree_next;
- tree_cur = tree_next;
- tree_next -= 2;
- }
- rev_code >>= (TINFL_FAST_LOOKUP_BITS - 1);
- for (j = code_size; j > (TINFL_FAST_LOOKUP_BITS + 1); j--) {
- tree_cur -= ((rev_code >>= 1) & 1);
- if (!pTable->m_tree[-tree_cur - 1]) {
- pTable->m_tree[-tree_cur - 1] = (mz_int16)tree_next;
- tree_cur = tree_next;
- tree_next -= 2;
- } else
- tree_cur = pTable->m_tree[-tree_cur - 1];
- }
- tree_cur -= ((rev_code >>= 1) & 1);
- pTable->m_tree[-tree_cur - 1] = (mz_int16)sym_index;
- }
- if (r->m_type == 2) {
- for (counter = 0;
- counter < (r->m_table_sizes[0] + r->m_table_sizes[1]);) {
- mz_uint s;
- TINFL_HUFF_DECODE(16, dist, &r->m_tables[2]);
- if (dist < 16) {
- r->m_len_codes[counter++] = (mz_uint8)dist;
- continue;
- }
- if ((dist == 16) && (!counter)) {
- TINFL_CR_RETURN_FOREVER(17, TINFL_STATUS_FAILED);
- }
- num_extra = "\02\03\07"[dist - 16];
- TINFL_GET_BITS(18, s, num_extra);
- s += "\03\03\013"[dist - 16];
- TINFL_MEMSET(r->m_len_codes + counter,
- (dist == 16) ? r->m_len_codes[counter - 1] : 0, s);
- counter += s;
- }
- if ((r->m_table_sizes[0] + r->m_table_sizes[1]) != counter) {
- TINFL_CR_RETURN_FOREVER(21, TINFL_STATUS_FAILED);
- }
- TINFL_MEMCPY(r->m_tables[0].m_code_size, r->m_len_codes,
- r->m_table_sizes[0]);
- TINFL_MEMCPY(r->m_tables[1].m_code_size,
- r->m_len_codes + r->m_table_sizes[0],
- r->m_table_sizes[1]);
- }
- }
- for (;;) {
- mz_uint8 *pSrc;
- for (;;) {
- if (((pIn_buf_end - pIn_buf_cur) < 4) ||
- ((pOut_buf_end - pOut_buf_cur) < 2)) {
- TINFL_HUFF_DECODE(23, counter, &r->m_tables[0]);
- if (counter >= 256) break;
- while (pOut_buf_cur >= pOut_buf_end) {
- TINFL_CR_RETURN(24, TINFL_STATUS_HAS_MORE_OUTPUT);
- }
- *pOut_buf_cur++ = (mz_uint8)counter;
- } else {
- int sym2;
- mz_uint code_len;
-#if TINFL_USE_64BIT_BITBUF
- if (num_bits < 30) {
- bit_buf |=
- (((tinfl_bit_buf_t)MZ_READ_LE32(pIn_buf_cur)) << num_bits);
- pIn_buf_cur += 4;
- num_bits += 32;
- }
-#else
- if (num_bits < 15) {
- bit_buf |=
- (((tinfl_bit_buf_t)MZ_READ_LE16(pIn_buf_cur)) << num_bits);
- pIn_buf_cur += 2;
- num_bits += 16;
- }
-#endif
- if ((sym2 =
- r->m_tables[0]
- .m_look_up[bit_buf & (TINFL_FAST_LOOKUP_SIZE - 1)]) >=
- 0)
- code_len = sym2 >> 9;
- else {
- code_len = TINFL_FAST_LOOKUP_BITS;
- do {
- sym2 = r->m_tables[0]
- .m_tree[~sym2 + ((bit_buf >> code_len++) & 1)];
- } while (sym2 < 0);
- }
- counter = sym2;
- bit_buf >>= code_len;
- num_bits -= code_len;
- if (counter & 256) break;
-
-#if !TINFL_USE_64BIT_BITBUF
- if (num_bits < 15) {
- bit_buf |=
- (((tinfl_bit_buf_t)MZ_READ_LE16(pIn_buf_cur)) << num_bits);
- pIn_buf_cur += 2;
- num_bits += 16;
- }
-#endif
- if ((sym2 =
- r->m_tables[0]
- .m_look_up[bit_buf & (TINFL_FAST_LOOKUP_SIZE - 1)]) >=
- 0)
- code_len = sym2 >> 9;
- else {
- code_len = TINFL_FAST_LOOKUP_BITS;
- do {
- sym2 = r->m_tables[0]
- .m_tree[~sym2 + ((bit_buf >> code_len++) & 1)];
- } while (sym2 < 0);
- }
- bit_buf >>= code_len;
- num_bits -= code_len;
-
- pOut_buf_cur[0] = (mz_uint8)counter;
- if (sym2 & 256) {
- pOut_buf_cur++;
- counter = sym2;
- break;
- }
- pOut_buf_cur[1] = (mz_uint8)sym2;
- pOut_buf_cur += 2;
- }
- }
- if ((counter &= 511) == 256) break;
-
- num_extra = s_length_extra[counter - 257];
- counter = s_length_base[counter - 257];
- if (num_extra) {
- mz_uint extra_bits;
- TINFL_GET_BITS(25, extra_bits, num_extra);
- counter += extra_bits;
- }
-
- TINFL_HUFF_DECODE(26, dist, &r->m_tables[1]);
- num_extra = s_dist_extra[dist];
- dist = s_dist_base[dist];
- if (num_extra) {
- mz_uint extra_bits;
- TINFL_GET_BITS(27, extra_bits, num_extra);
- dist += extra_bits;
- }
-
- dist_from_out_buf_start = pOut_buf_cur - pOut_buf_start;
- if ((dist > dist_from_out_buf_start) &&
- (decomp_flags & TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF)) {
- TINFL_CR_RETURN_FOREVER(37, TINFL_STATUS_FAILED);
- }
-
- pSrc = pOut_buf_start +
- ((dist_from_out_buf_start - dist) & out_buf_size_mask);
-
- if ((MZ_MAX(pOut_buf_cur, pSrc) + counter) > pOut_buf_end) {
- while (counter--) {
- while (pOut_buf_cur >= pOut_buf_end) {
- TINFL_CR_RETURN(53, TINFL_STATUS_HAS_MORE_OUTPUT);
- }
- *pOut_buf_cur++ =
- pOut_buf_start[(dist_from_out_buf_start++ - dist) &
- out_buf_size_mask];
- }
- continue;
- }
-#if MINIZ_USE_UNALIGNED_LOADS_AND_STORES
- else if ((counter >= 9) && (counter <= dist)) {
- const mz_uint8 *pSrc_end = pSrc + (counter & ~7);
- do {
- ((mz_uint32 *)pOut_buf_cur)[0] = ((const mz_uint32 *)pSrc)[0];
- ((mz_uint32 *)pOut_buf_cur)[1] = ((const mz_uint32 *)pSrc)[1];
- pOut_buf_cur += 8;
- } while ((pSrc += 8) < pSrc_end);
- if ((counter &= 7) < 3) {
- if (counter) {
- pOut_buf_cur[0] = pSrc[0];
- if (counter > 1) pOut_buf_cur[1] = pSrc[1];
- pOut_buf_cur += counter;
- }
- continue;
- }
- }
-#endif
- do {
- pOut_buf_cur[0] = pSrc[0];
- pOut_buf_cur[1] = pSrc[1];
- pOut_buf_cur[2] = pSrc[2];
- pOut_buf_cur += 3;
- pSrc += 3;
- } while ((int)(counter -= 3) > 2);
- if ((int)counter > 0) {
- pOut_buf_cur[0] = pSrc[0];
- if ((int)counter > 1) pOut_buf_cur[1] = pSrc[1];
- pOut_buf_cur += counter;
- }
- }
- }
- } while (!(r->m_final & 1));
- if (decomp_flags & TINFL_FLAG_PARSE_ZLIB_HEADER) {
- TINFL_SKIP_BITS(32, num_bits & 7);
- for (counter = 0; counter < 4; ++counter) {
- mz_uint s;
- if (num_bits)
- TINFL_GET_BITS(41, s, 8);
- else
- TINFL_GET_BYTE(42, s);
- r->m_z_adler32 = (r->m_z_adler32 << 8) | s;
- }
- }
- TINFL_CR_RETURN_FOREVER(34, TINFL_STATUS_DONE);
- TINFL_CR_FINISH
-
-common_exit:
- r->m_num_bits = num_bits;
- r->m_bit_buf = bit_buf;
- r->m_dist = dist;
- r->m_counter = counter;
- r->m_num_extra = num_extra;
- r->m_dist_from_out_buf_start = dist_from_out_buf_start;
- *pIn_buf_size = pIn_buf_cur - pIn_buf_next;
- *pOut_buf_size = pOut_buf_cur - pOut_buf_next;
- if ((decomp_flags &
- (TINFL_FLAG_PARSE_ZLIB_HEADER | TINFL_FLAG_COMPUTE_ADLER32)) &&
- (status >= 0)) {
- const mz_uint8 *ptr = pOut_buf_next;
- size_t buf_len = *pOut_buf_size;
- mz_uint32 i, s1 = r->m_check_adler32 & 0xffff,
- s2 = r->m_check_adler32 >> 16;
- size_t block_len = buf_len % 5552;
- while (buf_len) {
- for (i = 0; i + 7 < block_len; i += 8, ptr += 8) {
- s1 += ptr[0], s2 += s1;
- s1 += ptr[1], s2 += s1;
- s1 += ptr[2], s2 += s1;
- s1 += ptr[3], s2 += s1;
- s1 += ptr[4], s2 += s1;
- s1 += ptr[5], s2 += s1;
- s1 += ptr[6], s2 += s1;
- s1 += ptr[7], s2 += s1;
- }
- for (; i < block_len; ++i) s1 += *ptr++, s2 += s1;
- s1 %= 65521U, s2 %= 65521U;
- buf_len -= block_len;
- block_len = 5552;
- }
- r->m_check_adler32 = (s2 << 16) + s1;
- if ((status == TINFL_STATUS_DONE) &&
- (decomp_flags & TINFL_FLAG_PARSE_ZLIB_HEADER) &&
- (r->m_check_adler32 != r->m_z_adler32))
- status = TINFL_STATUS_ADLER32_MISMATCH;
- }
- return status;
-}
-
-// Higher level helper functions.
-void *tinfl_decompress_mem_to_heap(const void *pSrc_buf, size_t src_buf_len,
- size_t *pOut_len, int flags) {
- tinfl_decompressor decomp;
- void *pBuf = NULL, *pNew_buf;
- size_t src_buf_ofs = 0, out_buf_capacity = 0;
- *pOut_len = 0;
- tinfl_init(&decomp);
- for (;;) {
- size_t src_buf_size = src_buf_len - src_buf_ofs,
- dst_buf_size = out_buf_capacity - *pOut_len, new_out_buf_capacity;
- tinfl_status status = tinfl_decompress(
- &decomp, (const mz_uint8 *)pSrc_buf + src_buf_ofs, &src_buf_size,
- (mz_uint8 *)pBuf, pBuf ? (mz_uint8 *)pBuf + *pOut_len : NULL,
- &dst_buf_size,
- (flags & ~TINFL_FLAG_HAS_MORE_INPUT) |
- TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF);
- if ((status < 0) || (status == TINFL_STATUS_NEEDS_MORE_INPUT)) {
- MZ_FREE(pBuf);
- *pOut_len = 0;
- return NULL;
- }
- src_buf_ofs += src_buf_size;
- *pOut_len += dst_buf_size;
- if (status == TINFL_STATUS_DONE) break;
- new_out_buf_capacity = out_buf_capacity * 2;
- if (new_out_buf_capacity < 128) new_out_buf_capacity = 128;
- pNew_buf = MZ_REALLOC(pBuf, new_out_buf_capacity);
- if (!pNew_buf) {
- MZ_FREE(pBuf);
- *pOut_len = 0;
- return NULL;
- }
- pBuf = pNew_buf;
- out_buf_capacity = new_out_buf_capacity;
- }
- return pBuf;
-}
-
-size_t tinfl_decompress_mem_to_mem(void *pOut_buf, size_t out_buf_len,
- const void *pSrc_buf, size_t src_buf_len,
- int flags) {
- tinfl_decompressor decomp;
- tinfl_status status;
- tinfl_init(&decomp);
- status =
- tinfl_decompress(&decomp, (const mz_uint8 *)pSrc_buf, &src_buf_len,
- (mz_uint8 *)pOut_buf, (mz_uint8 *)pOut_buf, &out_buf_len,
- (flags & ~TINFL_FLAG_HAS_MORE_INPUT) |
- TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF);
- return (status != TINFL_STATUS_DONE) ? TINFL_DECOMPRESS_MEM_TO_MEM_FAILED
- : out_buf_len;
-}
-
-int tinfl_decompress_mem_to_callback(const void *pIn_buf, size_t *pIn_buf_size,
- tinfl_put_buf_func_ptr pPut_buf_func,
- void *pPut_buf_user, int flags) {
- int result = 0;
- tinfl_decompressor decomp;
- mz_uint8 *pDict = (mz_uint8 *)MZ_MALLOC(TINFL_LZ_DICT_SIZE);
- size_t in_buf_ofs = 0, dict_ofs = 0;
- if (!pDict) return TINFL_STATUS_FAILED;
- tinfl_init(&decomp);
- for (;;) {
- size_t in_buf_size = *pIn_buf_size - in_buf_ofs,
- dst_buf_size = TINFL_LZ_DICT_SIZE - dict_ofs;
- tinfl_status status =
- tinfl_decompress(&decomp, (const mz_uint8 *)pIn_buf + in_buf_ofs,
- &in_buf_size, pDict, pDict + dict_ofs, &dst_buf_size,
- (flags & ~(TINFL_FLAG_HAS_MORE_INPUT |
- TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF)));
- in_buf_ofs += in_buf_size;
- if ((dst_buf_size) &&
- (!(*pPut_buf_func)(pDict + dict_ofs, (int)dst_buf_size, pPut_buf_user)))
- break;
- if (status != TINFL_STATUS_HAS_MORE_OUTPUT) {
- result = (status == TINFL_STATUS_DONE);
- break;
- }
- dict_ofs = (dict_ofs + dst_buf_size) & (TINFL_LZ_DICT_SIZE - 1);
- }
- MZ_FREE(pDict);
- *pIn_buf_size = in_buf_ofs;
- return result;
-}
-
-// ------------------- Low-level Compression (independent from all decompression
-// API's)
-
-// Purposely making these tables static for faster init and thread safety.
-static const mz_uint16 s_tdefl_len_sym[256] = {
- 257, 258, 259, 260, 261, 262, 263, 264, 265, 265, 266, 266, 267, 267, 268,
- 268, 269, 269, 269, 269, 270, 270, 270, 270, 271, 271, 271, 271, 272, 272,
- 272, 272, 273, 273, 273, 273, 273, 273, 273, 273, 274, 274, 274, 274, 274,
- 274, 274, 274, 275, 275, 275, 275, 275, 275, 275, 275, 276, 276, 276, 276,
- 276, 276, 276, 276, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277,
- 277, 277, 277, 277, 277, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278,
- 278, 278, 278, 278, 278, 278, 279, 279, 279, 279, 279, 279, 279, 279, 279,
- 279, 279, 279, 279, 279, 279, 279, 280, 280, 280, 280, 280, 280, 280, 280,
- 280, 280, 280, 280, 280, 280, 280, 280, 281, 281, 281, 281, 281, 281, 281,
- 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
- 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 282, 282, 282, 282, 282,
- 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282,
- 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 283, 283, 283,
- 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283,
- 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 284,
- 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284,
- 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284,
- 285};
-
-static const mz_uint8 s_tdefl_len_extra[256] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0};
-
-static const mz_uint8 s_tdefl_small_dist_sym[512] = {
- 0, 1, 2, 3, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8,
- 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17};
-
-static const mz_uint8 s_tdefl_small_dist_extra[512] = {
- 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7};
-
-static const mz_uint8 s_tdefl_large_dist_sym[128] = {
- 0, 0, 18, 19, 20, 20, 21, 21, 22, 22, 22, 22, 23, 23, 23, 23, 24, 24, 24,
- 24, 24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
- 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
- 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29};
-
-static const mz_uint8 s_tdefl_large_dist_extra[128] = {
- 0, 0, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13};
-
-// Radix sorts tdefl_sym_freq[] array by 16-bit key m_key. Returns ptr to sorted
-// values.
-typedef struct {
- mz_uint16 m_key, m_sym_index;
-} tdefl_sym_freq;
-static tdefl_sym_freq *tdefl_radix_sort_syms(mz_uint num_syms,
- tdefl_sym_freq *pSyms0,
- tdefl_sym_freq *pSyms1) {
- mz_uint32 total_passes = 2, pass_shift, pass, i, hist[256 * 2];
- tdefl_sym_freq *pCur_syms = pSyms0, *pNew_syms = pSyms1;
- MZ_CLEAR_OBJ(hist);
- for (i = 0; i < num_syms; i++) {
- mz_uint freq = pSyms0[i].m_key;
- hist[freq & 0xFF]++;
- hist[256 + ((freq >> 8) & 0xFF)]++;
- }
- while ((total_passes > 1) && (num_syms == hist[(total_passes - 1) * 256]))
- total_passes--;
- for (pass_shift = 0, pass = 0; pass < total_passes; pass++, pass_shift += 8) {
- const mz_uint32 *pHist = &hist[pass << 8];
- mz_uint offsets[256], cur_ofs = 0;
- for (i = 0; i < 256; i++) {
- offsets[i] = cur_ofs;
- cur_ofs += pHist[i];
- }
- for (i = 0; i < num_syms; i++)
- pNew_syms[offsets[(pCur_syms[i].m_key >> pass_shift) & 0xFF]++] =
- pCur_syms[i];
- {
- tdefl_sym_freq *t = pCur_syms;
- pCur_syms = pNew_syms;
- pNew_syms = t;
- }
- }
- return pCur_syms;
-}
-
-// tdefl_calculate_minimum_redundancy() originally written by: Alistair Moffat,
-// alistair@cs.mu.oz.au, Jyrki Katajainen, jyrki@diku.dk, November 1996.
-static void tdefl_calculate_minimum_redundancy(tdefl_sym_freq *A, int n) {
- int root, leaf, next, avbl, used, dpth;
- if (n == 0)
- return;
- else if (n == 1) {
- A[0].m_key = 1;
- return;
- }
- A[0].m_key += A[1].m_key;
- root = 0;
- leaf = 2;
- for (next = 1; next < n - 1; next++) {
- if (leaf >= n || A[root].m_key < A[leaf].m_key) {
- A[next].m_key = A[root].m_key;
- A[root++].m_key = (mz_uint16)next;
- } else
- A[next].m_key = A[leaf++].m_key;
- if (leaf >= n || (root < next && A[root].m_key < A[leaf].m_key)) {
- A[next].m_key = (mz_uint16)(A[next].m_key + A[root].m_key);
- A[root++].m_key = (mz_uint16)next;
- } else
- A[next].m_key = (mz_uint16)(A[next].m_key + A[leaf++].m_key);
- }
- A[n - 2].m_key = 0;
- for (next = n - 3; next >= 0; next--)
- A[next].m_key = A[A[next].m_key].m_key + 1;
- avbl = 1;
- used = dpth = 0;
- root = n - 2;
- next = n - 1;
- while (avbl > 0) {
- while (root >= 0 && (int)A[root].m_key == dpth) {
- used++;
- root--;
- }
- while (avbl > used) {
- A[next--].m_key = (mz_uint16)(dpth);
- avbl--;
- }
- avbl = 2 * used;
- dpth++;
- used = 0;
- }
-}
-
-// Limits canonical Huffman code table's max code size.
-enum { TDEFL_MAX_SUPPORTED_HUFF_CODESIZE = 32 };
-static void tdefl_huffman_enforce_max_code_size(int *pNum_codes,
- int code_list_len,
- int max_code_size) {
- int i;
- mz_uint32 total = 0;
- if (code_list_len <= 1) return;
- for (i = max_code_size + 1; i <= TDEFL_MAX_SUPPORTED_HUFF_CODESIZE; i++)
- pNum_codes[max_code_size] += pNum_codes[i];
- for (i = max_code_size; i > 0; i--)
- total += (((mz_uint32)pNum_codes[i]) << (max_code_size - i));
- while (total != (1UL << max_code_size)) {
- pNum_codes[max_code_size]--;
- for (i = max_code_size - 1; i > 0; i--)
- if (pNum_codes[i]) {
- pNum_codes[i]--;
- pNum_codes[i + 1] += 2;
- break;
- }
- total--;
- }
-}
-
-static void tdefl_optimize_huffman_table(tdefl_compressor *d, int table_num,
- int table_len, int code_size_limit,
- int static_table) {
- int i, j, l, num_codes[1 + TDEFL_MAX_SUPPORTED_HUFF_CODESIZE];
- mz_uint next_code[TDEFL_MAX_SUPPORTED_HUFF_CODESIZE + 1];
- MZ_CLEAR_OBJ(num_codes);
- if (static_table) {
- for (i = 0; i < table_len; i++)
- num_codes[d->m_huff_code_sizes[table_num][i]]++;
- } else {
- tdefl_sym_freq syms0[TDEFL_MAX_HUFF_SYMBOLS], syms1[TDEFL_MAX_HUFF_SYMBOLS],
- *pSyms;
- int num_used_syms = 0;
- const mz_uint16 *pSym_count = &d->m_huff_count[table_num][0];
- for (i = 0; i < table_len; i++)
- if (pSym_count[i]) {
- syms0[num_used_syms].m_key = (mz_uint16)pSym_count[i];
- syms0[num_used_syms++].m_sym_index = (mz_uint16)i;
- }
-
- pSyms = tdefl_radix_sort_syms(num_used_syms, syms0, syms1);
- tdefl_calculate_minimum_redundancy(pSyms, num_used_syms);
-
- for (i = 0; i < num_used_syms; i++) num_codes[pSyms[i].m_key]++;
-
- tdefl_huffman_enforce_max_code_size(num_codes, num_used_syms,
- code_size_limit);
-
- MZ_CLEAR_OBJ(d->m_huff_code_sizes[table_num]);
- MZ_CLEAR_OBJ(d->m_huff_codes[table_num]);
- for (i = 1, j = num_used_syms; i <= code_size_limit; i++)
- for (l = num_codes[i]; l > 0; l--)
- d->m_huff_code_sizes[table_num][pSyms[--j].m_sym_index] = (mz_uint8)(i);
- }
-
- next_code[1] = 0;
- for (j = 0, i = 2; i <= code_size_limit; i++)
- next_code[i] = j = ((j + num_codes[i - 1]) << 1);
-
- for (i = 0; i < table_len; i++) {
- mz_uint rev_code = 0, code, code_size;
- if ((code_size = d->m_huff_code_sizes[table_num][i]) == 0) continue;
- code = next_code[code_size]++;
- for (l = code_size; l > 0; l--, code >>= 1)
- rev_code = (rev_code << 1) | (code & 1);
- d->m_huff_codes[table_num][i] = (mz_uint16)rev_code;
- }
-}
-
-#define TDEFL_PUT_BITS(b, l) \
- do { \
- mz_uint bits = b; \
- mz_uint len = l; \
- MZ_ASSERT(bits <= ((1U << len) - 1U)); \
- d->m_bit_buffer |= (bits << d->m_bits_in); \
- d->m_bits_in += len; \
- while (d->m_bits_in >= 8) { \
- if (d->m_pOutput_buf < d->m_pOutput_buf_end) \
- *d->m_pOutput_buf++ = (mz_uint8)(d->m_bit_buffer); \
- d->m_bit_buffer >>= 8; \
- d->m_bits_in -= 8; \
- } \
- } \
- MZ_MACRO_END
-
-#define TDEFL_RLE_PREV_CODE_SIZE() \
- { \
- if (rle_repeat_count) { \
- if (rle_repeat_count < 3) { \
- d->m_huff_count[2][prev_code_size] = (mz_uint16)( \
- d->m_huff_count[2][prev_code_size] + rle_repeat_count); \
- while (rle_repeat_count--) \
- packed_code_sizes[num_packed_code_sizes++] = prev_code_size; \
- } else { \
- d->m_huff_count[2][16] = (mz_uint16)(d->m_huff_count[2][16] + 1); \
- packed_code_sizes[num_packed_code_sizes++] = 16; \
- packed_code_sizes[num_packed_code_sizes++] = \
- (mz_uint8)(rle_repeat_count - 3); \
- } \
- rle_repeat_count = 0; \
- } \
- }
-
-#define TDEFL_RLE_ZERO_CODE_SIZE() \
- { \
- if (rle_z_count) { \
- if (rle_z_count < 3) { \
- d->m_huff_count[2][0] = \
- (mz_uint16)(d->m_huff_count[2][0] + rle_z_count); \
- while (rle_z_count--) packed_code_sizes[num_packed_code_sizes++] = 0; \
- } else if (rle_z_count <= 10) { \
- d->m_huff_count[2][17] = (mz_uint16)(d->m_huff_count[2][17] + 1); \
- packed_code_sizes[num_packed_code_sizes++] = 17; \
- packed_code_sizes[num_packed_code_sizes++] = \
- (mz_uint8)(rle_z_count - 3); \
- } else { \
- d->m_huff_count[2][18] = (mz_uint16)(d->m_huff_count[2][18] + 1); \
- packed_code_sizes[num_packed_code_sizes++] = 18; \
- packed_code_sizes[num_packed_code_sizes++] = \
- (mz_uint8)(rle_z_count - 11); \
- } \
- rle_z_count = 0; \
- } \
- }
-
-static mz_uint8 s_tdefl_packed_code_size_syms_swizzle[] = {
- 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
-
-static void tdefl_start_dynamic_block(tdefl_compressor *d) {
- int num_lit_codes, num_dist_codes, num_bit_lengths;
- mz_uint i, total_code_sizes_to_pack, num_packed_code_sizes, rle_z_count,
- rle_repeat_count, packed_code_sizes_index;
- mz_uint8
- code_sizes_to_pack[TDEFL_MAX_HUFF_SYMBOLS_0 + TDEFL_MAX_HUFF_SYMBOLS_1],
- packed_code_sizes[TDEFL_MAX_HUFF_SYMBOLS_0 + TDEFL_MAX_HUFF_SYMBOLS_1],
- prev_code_size = 0xFF;
-
- d->m_huff_count[0][256] = 1;
-
- tdefl_optimize_huffman_table(d, 0, TDEFL_MAX_HUFF_SYMBOLS_0, 15, MZ_FALSE);
- tdefl_optimize_huffman_table(d, 1, TDEFL_MAX_HUFF_SYMBOLS_1, 15, MZ_FALSE);
-
- for (num_lit_codes = 286; num_lit_codes > 257; num_lit_codes--)
- if (d->m_huff_code_sizes[0][num_lit_codes - 1]) break;
- for (num_dist_codes = 30; num_dist_codes > 1; num_dist_codes--)
- if (d->m_huff_code_sizes[1][num_dist_codes - 1]) break;
-
- memcpy(code_sizes_to_pack, &d->m_huff_code_sizes[0][0], num_lit_codes);
- memcpy(code_sizes_to_pack + num_lit_codes, &d->m_huff_code_sizes[1][0],
- num_dist_codes);
- total_code_sizes_to_pack = num_lit_codes + num_dist_codes;
- num_packed_code_sizes = 0;
- rle_z_count = 0;
- rle_repeat_count = 0;
-
- memset(&d->m_huff_count[2][0], 0,
- sizeof(d->m_huff_count[2][0]) * TDEFL_MAX_HUFF_SYMBOLS_2);
- for (i = 0; i < total_code_sizes_to_pack; i++) {
- mz_uint8 code_size = code_sizes_to_pack[i];
- if (!code_size) {
- TDEFL_RLE_PREV_CODE_SIZE();
- if (++rle_z_count == 138) {
- TDEFL_RLE_ZERO_CODE_SIZE();
- }
- } else {
- TDEFL_RLE_ZERO_CODE_SIZE();
- if (code_size != prev_code_size) {
- TDEFL_RLE_PREV_CODE_SIZE();
- d->m_huff_count[2][code_size] =
- (mz_uint16)(d->m_huff_count[2][code_size] + 1);
- packed_code_sizes[num_packed_code_sizes++] = code_size;
- } else if (++rle_repeat_count == 6) {
- TDEFL_RLE_PREV_CODE_SIZE();
- }
- }
- prev_code_size = code_size;
- }
- if (rle_repeat_count) {
- TDEFL_RLE_PREV_CODE_SIZE();
- } else {
- TDEFL_RLE_ZERO_CODE_SIZE();
- }
-
- tdefl_optimize_huffman_table(d, 2, TDEFL_MAX_HUFF_SYMBOLS_2, 7, MZ_FALSE);
-
- TDEFL_PUT_BITS(2, 2);
-
- TDEFL_PUT_BITS(num_lit_codes - 257, 5);
- TDEFL_PUT_BITS(num_dist_codes - 1, 5);
-
- for (num_bit_lengths = 18; num_bit_lengths >= 0; num_bit_lengths--)
- if (d->m_huff_code_sizes
- [2][s_tdefl_packed_code_size_syms_swizzle[num_bit_lengths]])
- break;
- num_bit_lengths = MZ_MAX(4, (num_bit_lengths + 1));
- TDEFL_PUT_BITS(num_bit_lengths - 4, 4);
- for (i = 0; (int)i < num_bit_lengths; i++)
- TDEFL_PUT_BITS(
- d->m_huff_code_sizes[2][s_tdefl_packed_code_size_syms_swizzle[i]], 3);
-
- for (packed_code_sizes_index = 0;
- packed_code_sizes_index < num_packed_code_sizes;) {
- mz_uint code = packed_code_sizes[packed_code_sizes_index++];
- MZ_ASSERT(code < TDEFL_MAX_HUFF_SYMBOLS_2);
- TDEFL_PUT_BITS(d->m_huff_codes[2][code], d->m_huff_code_sizes[2][code]);
- if (code >= 16)
- TDEFL_PUT_BITS(packed_code_sizes[packed_code_sizes_index++],
- "\02\03\07"[code - 16]);
- }
-}
-
-static void tdefl_start_static_block(tdefl_compressor *d) {
- mz_uint i;
- mz_uint8 *p = &d->m_huff_code_sizes[0][0];
-
- for (i = 0; i <= 143; ++i) *p++ = 8;
- for (; i <= 255; ++i) *p++ = 9;
- for (; i <= 279; ++i) *p++ = 7;
- for (; i <= 287; ++i) *p++ = 8;
-
- memset(d->m_huff_code_sizes[1], 5, 32);
-
- tdefl_optimize_huffman_table(d, 0, 288, 15, MZ_TRUE);
- tdefl_optimize_huffman_table(d, 1, 32, 15, MZ_TRUE);
-
- TDEFL_PUT_BITS(1, 2);
-}
-
-static const mz_uint mz_bitmasks[17] = {
- 0x0000, 0x0001, 0x0003, 0x0007, 0x000F, 0x001F, 0x003F, 0x007F, 0x00FF,
- 0x01FF, 0x03FF, 0x07FF, 0x0FFF, 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF};
-
-#if MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN && \
- MINIZ_HAS_64BIT_REGISTERS
-static mz_bool tdefl_compress_lz_codes(tdefl_compressor *d) {
- mz_uint flags;
- mz_uint8 *pLZ_codes;
- mz_uint8 *pOutput_buf = d->m_pOutput_buf;
- mz_uint8 *pLZ_code_buf_end = d->m_pLZ_code_buf;
- mz_uint64 bit_buffer = d->m_bit_buffer;
- mz_uint bits_in = d->m_bits_in;
-
-#define TDEFL_PUT_BITS_FAST(b, l) \
- { \
- bit_buffer |= (((mz_uint64)(b)) << bits_in); \
- bits_in += (l); \
- }
-
- flags = 1;
- for (pLZ_codes = d->m_lz_code_buf; pLZ_codes < pLZ_code_buf_end;
- flags >>= 1) {
- if (flags == 1) flags = *pLZ_codes++ | 0x100;
-
- if (flags & 1) {
- mz_uint s0, s1, n0, n1, sym, num_extra_bits;
- mz_uint match_len = pLZ_codes[0],
- match_dist = *(const mz_uint16 *)(pLZ_codes + 1);
- pLZ_codes += 3;
-
- MZ_ASSERT(d->m_huff_code_sizes[0][s_tdefl_len_sym[match_len]]);
- TDEFL_PUT_BITS_FAST(d->m_huff_codes[0][s_tdefl_len_sym[match_len]],
- d->m_huff_code_sizes[0][s_tdefl_len_sym[match_len]]);
- TDEFL_PUT_BITS_FAST(match_len & mz_bitmasks[s_tdefl_len_extra[match_len]],
- s_tdefl_len_extra[match_len]);
-
- // This sequence coaxes MSVC into using cmov's vs. jmp's.
- s0 = s_tdefl_small_dist_sym[match_dist & 511];
- n0 = s_tdefl_small_dist_extra[match_dist & 511];
- s1 = s_tdefl_large_dist_sym[match_dist >> 8];
- n1 = s_tdefl_large_dist_extra[match_dist >> 8];
- sym = (match_dist < 512) ? s0 : s1;
- num_extra_bits = (match_dist < 512) ? n0 : n1;
-
- MZ_ASSERT(d->m_huff_code_sizes[1][sym]);
- TDEFL_PUT_BITS_FAST(d->m_huff_codes[1][sym],
- d->m_huff_code_sizes[1][sym]);
- TDEFL_PUT_BITS_FAST(match_dist & mz_bitmasks[num_extra_bits],
- num_extra_bits);
- } else {
- mz_uint lit = *pLZ_codes++;
- MZ_ASSERT(d->m_huff_code_sizes[0][lit]);
- TDEFL_PUT_BITS_FAST(d->m_huff_codes[0][lit],
- d->m_huff_code_sizes[0][lit]);
-
- if (((flags & 2) == 0) && (pLZ_codes < pLZ_code_buf_end)) {
- flags >>= 1;
- lit = *pLZ_codes++;
- MZ_ASSERT(d->m_huff_code_sizes[0][lit]);
- TDEFL_PUT_BITS_FAST(d->m_huff_codes[0][lit],
- d->m_huff_code_sizes[0][lit]);
-
- if (((flags & 2) == 0) && (pLZ_codes < pLZ_code_buf_end)) {
- flags >>= 1;
- lit = *pLZ_codes++;
- MZ_ASSERT(d->m_huff_code_sizes[0][lit]);
- TDEFL_PUT_BITS_FAST(d->m_huff_codes[0][lit],
- d->m_huff_code_sizes[0][lit]);
- }
- }
- }
-
- if (pOutput_buf >= d->m_pOutput_buf_end) return MZ_FALSE;
-
- *(mz_uint64 *)pOutput_buf = bit_buffer;
- pOutput_buf += (bits_in >> 3);
- bit_buffer >>= (bits_in & ~7);
- bits_in &= 7;
- }
-
-#undef TDEFL_PUT_BITS_FAST
-
- d->m_pOutput_buf = pOutput_buf;
- d->m_bits_in = 0;
- d->m_bit_buffer = 0;
-
- while (bits_in) {
- mz_uint32 n = MZ_MIN(bits_in, 16);
- TDEFL_PUT_BITS((mz_uint)bit_buffer & mz_bitmasks[n], n);
- bit_buffer >>= n;
- bits_in -= n;
- }
-
- TDEFL_PUT_BITS(d->m_huff_codes[0][256], d->m_huff_code_sizes[0][256]);
-
- return (d->m_pOutput_buf < d->m_pOutput_buf_end);
-}
-#else
-static mz_bool tdefl_compress_lz_codes(tdefl_compressor *d) {
- mz_uint flags;
- mz_uint8 *pLZ_codes;
-
- flags = 1;
- for (pLZ_codes = d->m_lz_code_buf; pLZ_codes < d->m_pLZ_code_buf;
- flags >>= 1) {
- if (flags == 1) flags = *pLZ_codes++ | 0x100;
- if (flags & 1) {
- mz_uint sym, num_extra_bits;
- mz_uint match_len = pLZ_codes[0],
- match_dist = (pLZ_codes[1] | (pLZ_codes[2] << 8));
- pLZ_codes += 3;
-
- MZ_ASSERT(d->m_huff_code_sizes[0][s_tdefl_len_sym[match_len]]);
- TDEFL_PUT_BITS(d->m_huff_codes[0][s_tdefl_len_sym[match_len]],
- d->m_huff_code_sizes[0][s_tdefl_len_sym[match_len]]);
- TDEFL_PUT_BITS(match_len & mz_bitmasks[s_tdefl_len_extra[match_len]],
- s_tdefl_len_extra[match_len]);
-
- if (match_dist < 512) {
- sym = s_tdefl_small_dist_sym[match_dist];
- num_extra_bits = s_tdefl_small_dist_extra[match_dist];
- } else {
- sym = s_tdefl_large_dist_sym[match_dist >> 8];
- num_extra_bits = s_tdefl_large_dist_extra[match_dist >> 8];
- }
- MZ_ASSERT(d->m_huff_code_sizes[1][sym]);
- TDEFL_PUT_BITS(d->m_huff_codes[1][sym], d->m_huff_code_sizes[1][sym]);
- TDEFL_PUT_BITS(match_dist & mz_bitmasks[num_extra_bits], num_extra_bits);
- } else {
- mz_uint lit = *pLZ_codes++;
- MZ_ASSERT(d->m_huff_code_sizes[0][lit]);
- TDEFL_PUT_BITS(d->m_huff_codes[0][lit], d->m_huff_code_sizes[0][lit]);
- }
- }
-
- TDEFL_PUT_BITS(d->m_huff_codes[0][256], d->m_huff_code_sizes[0][256]);
-
- return (d->m_pOutput_buf < d->m_pOutput_buf_end);
-}
-#endif // MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN &&
- // MINIZ_HAS_64BIT_REGISTERS
-
-static mz_bool tdefl_compress_block(tdefl_compressor *d, mz_bool static_block) {
- if (static_block)
- tdefl_start_static_block(d);
- else
- tdefl_start_dynamic_block(d);
- return tdefl_compress_lz_codes(d);
-}
-
-static int tdefl_flush_block(tdefl_compressor *d, int flush) {
- mz_uint saved_bit_buf, saved_bits_in;
- mz_uint8 *pSaved_output_buf;
- mz_bool comp_block_succeeded = MZ_FALSE;
- int n, use_raw_block =
- ((d->m_flags & TDEFL_FORCE_ALL_RAW_BLOCKS) != 0) &&
- (d->m_lookahead_pos - d->m_lz_code_buf_dict_pos) <= d->m_dict_size;
- mz_uint8 *pOutput_buf_start =
- ((d->m_pPut_buf_func == NULL) &&
- ((*d->m_pOut_buf_size - d->m_out_buf_ofs) >= TDEFL_OUT_BUF_SIZE))
- ? ((mz_uint8 *)d->m_pOut_buf + d->m_out_buf_ofs)
- : d->m_output_buf;
-
- d->m_pOutput_buf = pOutput_buf_start;
- d->m_pOutput_buf_end = d->m_pOutput_buf + TDEFL_OUT_BUF_SIZE - 16;
-
- MZ_ASSERT(!d->m_output_flush_remaining);
- d->m_output_flush_ofs = 0;
- d->m_output_flush_remaining = 0;
-
- *d->m_pLZ_flags = (mz_uint8)(*d->m_pLZ_flags >> d->m_num_flags_left);
- d->m_pLZ_code_buf -= (d->m_num_flags_left == 8);
-
- if ((d->m_flags & TDEFL_WRITE_ZLIB_HEADER) && (!d->m_block_index)) {
- TDEFL_PUT_BITS(0x78, 8);
- TDEFL_PUT_BITS(0x01, 8);
- }
-
- TDEFL_PUT_BITS(flush == TDEFL_FINISH, 1);
-
- pSaved_output_buf = d->m_pOutput_buf;
- saved_bit_buf = d->m_bit_buffer;
- saved_bits_in = d->m_bits_in;
-
- if (!use_raw_block)
- comp_block_succeeded =
- tdefl_compress_block(d, (d->m_flags & TDEFL_FORCE_ALL_STATIC_BLOCKS) ||
- (d->m_total_lz_bytes < 48));
-
- // If the block gets expanded, forget the current contents of the output
- // buffer and send a raw block instead.
- if (((use_raw_block) ||
- ((d->m_total_lz_bytes) && ((d->m_pOutput_buf - pSaved_output_buf + 1U) >=
- d->m_total_lz_bytes))) &&
- ((d->m_lookahead_pos - d->m_lz_code_buf_dict_pos) <= d->m_dict_size)) {
- mz_uint i;
- d->m_pOutput_buf = pSaved_output_buf;
- d->m_bit_buffer = saved_bit_buf, d->m_bits_in = saved_bits_in;
- TDEFL_PUT_BITS(0, 2);
- if (d->m_bits_in) {
- TDEFL_PUT_BITS(0, 8 - d->m_bits_in);
- }
- for (i = 2; i; --i, d->m_total_lz_bytes ^= 0xFFFF) {
- TDEFL_PUT_BITS(d->m_total_lz_bytes & 0xFFFF, 16);
- }
- for (i = 0; i < d->m_total_lz_bytes; ++i) {
- TDEFL_PUT_BITS(
- d->m_dict[(d->m_lz_code_buf_dict_pos + i) & TDEFL_LZ_DICT_SIZE_MASK],
- 8);
- }
- }
- // Check for the extremely unlikely (if not impossible) case of the compressed
- // block not fitting into the output buffer when using dynamic codes.
- else if (!comp_block_succeeded) {
- d->m_pOutput_buf = pSaved_output_buf;
- d->m_bit_buffer = saved_bit_buf, d->m_bits_in = saved_bits_in;
- tdefl_compress_block(d, MZ_TRUE);
- }
-
- if (flush) {
- if (flush == TDEFL_FINISH) {
- if (d->m_bits_in) {
- TDEFL_PUT_BITS(0, 8 - d->m_bits_in);
- }
- if (d->m_flags & TDEFL_WRITE_ZLIB_HEADER) {
- mz_uint i, a = d->m_adler32;
- for (i = 0; i < 4; i++) {
- TDEFL_PUT_BITS((a >> 24) & 0xFF, 8);
- a <<= 8;
- }
- }
- } else {
- mz_uint i, z = 0;
- TDEFL_PUT_BITS(0, 3);
- if (d->m_bits_in) {
- TDEFL_PUT_BITS(0, 8 - d->m_bits_in);
- }
- for (i = 2; i; --i, z ^= 0xFFFF) {
- TDEFL_PUT_BITS(z & 0xFFFF, 16);
- }
- }
- }
-
- MZ_ASSERT(d->m_pOutput_buf < d->m_pOutput_buf_end);
-
- memset(&d->m_huff_count[0][0], 0,
- sizeof(d->m_huff_count[0][0]) * TDEFL_MAX_HUFF_SYMBOLS_0);
- memset(&d->m_huff_count[1][0], 0,
- sizeof(d->m_huff_count[1][0]) * TDEFL_MAX_HUFF_SYMBOLS_1);
-
- d->m_pLZ_code_buf = d->m_lz_code_buf + 1;
- d->m_pLZ_flags = d->m_lz_code_buf;
- d->m_num_flags_left = 8;
- d->m_lz_code_buf_dict_pos += d->m_total_lz_bytes;
- d->m_total_lz_bytes = 0;
- d->m_block_index++;
-
- if ((n = (int)(d->m_pOutput_buf - pOutput_buf_start)) != 0) {
- if (d->m_pPut_buf_func) {
- *d->m_pIn_buf_size = d->m_pSrc - (const mz_uint8 *)d->m_pIn_buf;
- if (!(*d->m_pPut_buf_func)(d->m_output_buf, n, d->m_pPut_buf_user))
- return (d->m_prev_return_status = TDEFL_STATUS_PUT_BUF_FAILED);
- } else if (pOutput_buf_start == d->m_output_buf) {
- int bytes_to_copy = (int)MZ_MIN(
- (size_t)n, (size_t)(*d->m_pOut_buf_size - d->m_out_buf_ofs));
- memcpy((mz_uint8 *)d->m_pOut_buf + d->m_out_buf_ofs, d->m_output_buf,
- bytes_to_copy);
- d->m_out_buf_ofs += bytes_to_copy;
- if ((n -= bytes_to_copy) != 0) {
- d->m_output_flush_ofs = bytes_to_copy;
- d->m_output_flush_remaining = n;
- }
- } else {
- d->m_out_buf_ofs += n;
- }
- }
-
- return d->m_output_flush_remaining;
-}
-
-#if MINIZ_USE_UNALIGNED_LOADS_AND_STORES
-#define TDEFL_READ_UNALIGNED_WORD(p) *(const mz_uint16 *)(p)
-static MZ_FORCEINLINE void tdefl_find_match(
- tdefl_compressor *d, mz_uint lookahead_pos, mz_uint max_dist,
- mz_uint max_match_len, mz_uint *pMatch_dist, mz_uint *pMatch_len) {
- mz_uint dist, pos = lookahead_pos & TDEFL_LZ_DICT_SIZE_MASK,
- match_len = *pMatch_len, probe_pos = pos, next_probe_pos,
- probe_len;
- mz_uint num_probes_left = d->m_max_probes[match_len >= 32];
- const mz_uint16 *s = (const mz_uint16 *)(d->m_dict + pos), *p, *q;
- mz_uint16 c01 = TDEFL_READ_UNALIGNED_WORD(&d->m_dict[pos + match_len - 1]),
- s01 = TDEFL_READ_UNALIGNED_WORD(s);
- MZ_ASSERT(max_match_len <= TDEFL_MAX_MATCH_LEN);
- if (max_match_len <= match_len) return;
- for (;;) {
- for (;;) {
- if (--num_probes_left == 0) return;
-#define TDEFL_PROBE \
- next_probe_pos = d->m_next[probe_pos]; \
- if ((!next_probe_pos) || \
- ((dist = (mz_uint16)(lookahead_pos - next_probe_pos)) > max_dist)) \
- return; \
- probe_pos = next_probe_pos & TDEFL_LZ_DICT_SIZE_MASK; \
- if (TDEFL_READ_UNALIGNED_WORD(&d->m_dict[probe_pos + match_len - 1]) == c01) \
- break;
- TDEFL_PROBE;
- TDEFL_PROBE;
- TDEFL_PROBE;
- }
- if (!dist) break;
- q = (const mz_uint16 *)(d->m_dict + probe_pos);
- if (TDEFL_READ_UNALIGNED_WORD(q) != s01) continue;
- p = s;
- probe_len = 32;
- do {
- } while (
- (TDEFL_READ_UNALIGNED_WORD(++p) == TDEFL_READ_UNALIGNED_WORD(++q)) &&
- (TDEFL_READ_UNALIGNED_WORD(++p) == TDEFL_READ_UNALIGNED_WORD(++q)) &&
- (TDEFL_READ_UNALIGNED_WORD(++p) == TDEFL_READ_UNALIGNED_WORD(++q)) &&
- (TDEFL_READ_UNALIGNED_WORD(++p) == TDEFL_READ_UNALIGNED_WORD(++q)) &&
- (--probe_len > 0));
- if (!probe_len) {
- *pMatch_dist = dist;
- *pMatch_len = MZ_MIN(max_match_len, TDEFL_MAX_MATCH_LEN);
- break;
- } else if ((probe_len = ((mz_uint)(p - s) * 2) +
- (mz_uint)(*(const mz_uint8 *)p ==
- *(const mz_uint8 *)q)) > match_len) {
- *pMatch_dist = dist;
- if ((*pMatch_len = match_len = MZ_MIN(max_match_len, probe_len)) ==
- max_match_len)
- break;
- c01 = TDEFL_READ_UNALIGNED_WORD(&d->m_dict[pos + match_len - 1]);
- }
- }
-}
-#else
-static MZ_FORCEINLINE void tdefl_find_match(
- tdefl_compressor *d, mz_uint lookahead_pos, mz_uint max_dist,
- mz_uint max_match_len, mz_uint *pMatch_dist, mz_uint *pMatch_len) {
- mz_uint dist, pos = lookahead_pos & TDEFL_LZ_DICT_SIZE_MASK,
- match_len = *pMatch_len, probe_pos = pos, next_probe_pos,
- probe_len;
- mz_uint num_probes_left = d->m_max_probes[match_len >= 32];
- const mz_uint8 *s = d->m_dict + pos, *p, *q;
- mz_uint8 c0 = d->m_dict[pos + match_len], c1 = d->m_dict[pos + match_len - 1];
- MZ_ASSERT(max_match_len <= TDEFL_MAX_MATCH_LEN);
- if (max_match_len <= match_len) return;
- for (;;) {
- for (;;) {
- if (--num_probes_left == 0) return;
-#define TDEFL_PROBE \
- next_probe_pos = d->m_next[probe_pos]; \
- if ((!next_probe_pos) || \
- ((dist = (mz_uint16)(lookahead_pos - next_probe_pos)) > max_dist)) \
- return; \
- probe_pos = next_probe_pos & TDEFL_LZ_DICT_SIZE_MASK; \
- if ((d->m_dict[probe_pos + match_len] == c0) && \
- (d->m_dict[probe_pos + match_len - 1] == c1)) \
- break;
- TDEFL_PROBE;
- TDEFL_PROBE;
- TDEFL_PROBE;
- }
- if (!dist) break;
- p = s;
- q = d->m_dict + probe_pos;
- for (probe_len = 0; probe_len < max_match_len; probe_len++)
- if (*p++ != *q++) break;
- if (probe_len > match_len) {
- *pMatch_dist = dist;
- if ((*pMatch_len = match_len = probe_len) == max_match_len) return;
- c0 = d->m_dict[pos + match_len];
- c1 = d->m_dict[pos + match_len - 1];
- }
- }
-}
-#endif // #if MINIZ_USE_UNALIGNED_LOADS_AND_STORES
-
-#if MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN
-static mz_bool tdefl_compress_fast(tdefl_compressor *d) {
- // Faster, minimally featured LZRW1-style match+parse loop with better
- // register utilization. Intended for applications where raw throughput is
- // valued more highly than ratio.
- mz_uint lookahead_pos = d->m_lookahead_pos,
- lookahead_size = d->m_lookahead_size, dict_size = d->m_dict_size,
- total_lz_bytes = d->m_total_lz_bytes,
- num_flags_left = d->m_num_flags_left;
- mz_uint8 *pLZ_code_buf = d->m_pLZ_code_buf, *pLZ_flags = d->m_pLZ_flags;
- mz_uint cur_pos = lookahead_pos & TDEFL_LZ_DICT_SIZE_MASK;
-
- while ((d->m_src_buf_left) || ((d->m_flush) && (lookahead_size))) {
- const mz_uint TDEFL_COMP_FAST_LOOKAHEAD_SIZE = 4096;
- mz_uint dst_pos =
- (lookahead_pos + lookahead_size) & TDEFL_LZ_DICT_SIZE_MASK;
- mz_uint num_bytes_to_process = (mz_uint)MZ_MIN(
- d->m_src_buf_left, TDEFL_COMP_FAST_LOOKAHEAD_SIZE - lookahead_size);
- d->m_src_buf_left -= num_bytes_to_process;
- lookahead_size += num_bytes_to_process;
-
- while (num_bytes_to_process) {
- mz_uint32 n = MZ_MIN(TDEFL_LZ_DICT_SIZE - dst_pos, num_bytes_to_process);
- memcpy(d->m_dict + dst_pos, d->m_pSrc, n);
- if (dst_pos < (TDEFL_MAX_MATCH_LEN - 1))
- memcpy(d->m_dict + TDEFL_LZ_DICT_SIZE + dst_pos, d->m_pSrc,
- MZ_MIN(n, (TDEFL_MAX_MATCH_LEN - 1) - dst_pos));
- d->m_pSrc += n;
- dst_pos = (dst_pos + n) & TDEFL_LZ_DICT_SIZE_MASK;
- num_bytes_to_process -= n;
- }
-
- dict_size = MZ_MIN(TDEFL_LZ_DICT_SIZE - lookahead_size, dict_size);
- if ((!d->m_flush) && (lookahead_size < TDEFL_COMP_FAST_LOOKAHEAD_SIZE))
- break;
-
- while (lookahead_size >= 4) {
- mz_uint cur_match_dist, cur_match_len = 1;
- mz_uint8 *pCur_dict = d->m_dict + cur_pos;
- mz_uint first_trigram = (*(const mz_uint32 *)pCur_dict) & 0xFFFFFF;
- mz_uint hash =
- (first_trigram ^ (first_trigram >> (24 - (TDEFL_LZ_HASH_BITS - 8)))) &
- TDEFL_LEVEL1_HASH_SIZE_MASK;
- mz_uint probe_pos = d->m_hash[hash];
- d->m_hash[hash] = (mz_uint16)lookahead_pos;
-
- if (((cur_match_dist = (mz_uint16)(lookahead_pos - probe_pos)) <=
- dict_size) &&
- ((*(const mz_uint32 *)(d->m_dict +
- (probe_pos &= TDEFL_LZ_DICT_SIZE_MASK)) &
- 0xFFFFFF) == first_trigram)) {
- const mz_uint16 *p = (const mz_uint16 *)pCur_dict;
- const mz_uint16 *q = (const mz_uint16 *)(d->m_dict + probe_pos);
- mz_uint32 probe_len = 32;
- do {
- } while ((TDEFL_READ_UNALIGNED_WORD(++p) ==
- TDEFL_READ_UNALIGNED_WORD(++q)) &&
- (TDEFL_READ_UNALIGNED_WORD(++p) ==
- TDEFL_READ_UNALIGNED_WORD(++q)) &&
- (TDEFL_READ_UNALIGNED_WORD(++p) ==
- TDEFL_READ_UNALIGNED_WORD(++q)) &&
- (TDEFL_READ_UNALIGNED_WORD(++p) ==
- TDEFL_READ_UNALIGNED_WORD(++q)) &&
- (--probe_len > 0));
- cur_match_len = ((mz_uint)(p - (const mz_uint16 *)pCur_dict) * 2) +
- (mz_uint)(*(const mz_uint8 *)p == *(const mz_uint8 *)q);
- if (!probe_len)
- cur_match_len = cur_match_dist ? TDEFL_MAX_MATCH_LEN : 0;
-
- if ((cur_match_len < TDEFL_MIN_MATCH_LEN) ||
- ((cur_match_len == TDEFL_MIN_MATCH_LEN) &&
- (cur_match_dist >= 8U * 1024U))) {
- cur_match_len = 1;
- *pLZ_code_buf++ = (mz_uint8)first_trigram;
- *pLZ_flags = (mz_uint8)(*pLZ_flags >> 1);
- d->m_huff_count[0][(mz_uint8)first_trigram]++;
- } else {
- mz_uint32 s0, s1;
- cur_match_len = MZ_MIN(cur_match_len, lookahead_size);
-
- MZ_ASSERT((cur_match_len >= TDEFL_MIN_MATCH_LEN) &&
- (cur_match_dist >= 1) &&
- (cur_match_dist <= TDEFL_LZ_DICT_SIZE));
-
- cur_match_dist--;
-
- pLZ_code_buf[0] = (mz_uint8)(cur_match_len - TDEFL_MIN_MATCH_LEN);
- *(mz_uint16 *)(&pLZ_code_buf[1]) = (mz_uint16)cur_match_dist;
- pLZ_code_buf += 3;
- *pLZ_flags = (mz_uint8)((*pLZ_flags >> 1) | 0x80);
-
- s0 = s_tdefl_small_dist_sym[cur_match_dist & 511];
- s1 = s_tdefl_large_dist_sym[cur_match_dist >> 8];
- d->m_huff_count[1][(cur_match_dist < 512) ? s0 : s1]++;
-
- d->m_huff_count[0][s_tdefl_len_sym[cur_match_len -
- TDEFL_MIN_MATCH_LEN]]++;
- }
- } else {
- *pLZ_code_buf++ = (mz_uint8)first_trigram;
- *pLZ_flags = (mz_uint8)(*pLZ_flags >> 1);
- d->m_huff_count[0][(mz_uint8)first_trigram]++;
- }
-
- if (--num_flags_left == 0) {
- num_flags_left = 8;
- pLZ_flags = pLZ_code_buf++;
- }
-
- total_lz_bytes += cur_match_len;
- lookahead_pos += cur_match_len;
- dict_size = MZ_MIN(dict_size + cur_match_len, TDEFL_LZ_DICT_SIZE);
- cur_pos = (cur_pos + cur_match_len) & TDEFL_LZ_DICT_SIZE_MASK;
- MZ_ASSERT(lookahead_size >= cur_match_len);
- lookahead_size -= cur_match_len;
-
- if (pLZ_code_buf > &d->m_lz_code_buf[TDEFL_LZ_CODE_BUF_SIZE - 8]) {
- int n;
- d->m_lookahead_pos = lookahead_pos;
- d->m_lookahead_size = lookahead_size;
- d->m_dict_size = dict_size;
- d->m_total_lz_bytes = total_lz_bytes;
- d->m_pLZ_code_buf = pLZ_code_buf;
- d->m_pLZ_flags = pLZ_flags;
- d->m_num_flags_left = num_flags_left;
- if ((n = tdefl_flush_block(d, 0)) != 0)
- return (n < 0) ? MZ_FALSE : MZ_TRUE;
- total_lz_bytes = d->m_total_lz_bytes;
- pLZ_code_buf = d->m_pLZ_code_buf;
- pLZ_flags = d->m_pLZ_flags;
- num_flags_left = d->m_num_flags_left;
- }
- }
-
- while (lookahead_size) {
- mz_uint8 lit = d->m_dict[cur_pos];
-
- total_lz_bytes++;
- *pLZ_code_buf++ = lit;
- *pLZ_flags = (mz_uint8)(*pLZ_flags >> 1);
- if (--num_flags_left == 0) {
- num_flags_left = 8;
- pLZ_flags = pLZ_code_buf++;
- }
-
- d->m_huff_count[0][lit]++;
-
- lookahead_pos++;
- dict_size = MZ_MIN(dict_size + 1, TDEFL_LZ_DICT_SIZE);
- cur_pos = (cur_pos + 1) & TDEFL_LZ_DICT_SIZE_MASK;
- lookahead_size--;
-
- if (pLZ_code_buf > &d->m_lz_code_buf[TDEFL_LZ_CODE_BUF_SIZE - 8]) {
- int n;
- d->m_lookahead_pos = lookahead_pos;
- d->m_lookahead_size = lookahead_size;
- d->m_dict_size = dict_size;
- d->m_total_lz_bytes = total_lz_bytes;
- d->m_pLZ_code_buf = pLZ_code_buf;
- d->m_pLZ_flags = pLZ_flags;
- d->m_num_flags_left = num_flags_left;
- if ((n = tdefl_flush_block(d, 0)) != 0)
- return (n < 0) ? MZ_FALSE : MZ_TRUE;
- total_lz_bytes = d->m_total_lz_bytes;
- pLZ_code_buf = d->m_pLZ_code_buf;
- pLZ_flags = d->m_pLZ_flags;
- num_flags_left = d->m_num_flags_left;
- }
- }
- }
-
- d->m_lookahead_pos = lookahead_pos;
- d->m_lookahead_size = lookahead_size;
- d->m_dict_size = dict_size;
- d->m_total_lz_bytes = total_lz_bytes;
- d->m_pLZ_code_buf = pLZ_code_buf;
- d->m_pLZ_flags = pLZ_flags;
- d->m_num_flags_left = num_flags_left;
- return MZ_TRUE;
-}
-#endif // MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN
-
-static MZ_FORCEINLINE void tdefl_record_literal(tdefl_compressor *d,
- mz_uint8 lit) {
- d->m_total_lz_bytes++;
- *d->m_pLZ_code_buf++ = lit;
- *d->m_pLZ_flags = (mz_uint8)(*d->m_pLZ_flags >> 1);
- if (--d->m_num_flags_left == 0) {
- d->m_num_flags_left = 8;
- d->m_pLZ_flags = d->m_pLZ_code_buf++;
- }
- d->m_huff_count[0][lit]++;
-}
-
-static MZ_FORCEINLINE void tdefl_record_match(tdefl_compressor *d,
- mz_uint match_len,
- mz_uint match_dist) {
- mz_uint32 s0, s1;
-
- MZ_ASSERT((match_len >= TDEFL_MIN_MATCH_LEN) && (match_dist >= 1) &&
- (match_dist <= TDEFL_LZ_DICT_SIZE));
-
- d->m_total_lz_bytes += match_len;
-
- d->m_pLZ_code_buf[0] = (mz_uint8)(match_len - TDEFL_MIN_MATCH_LEN);
-
- match_dist -= 1;
- d->m_pLZ_code_buf[1] = (mz_uint8)(match_dist & 0xFF);
- d->m_pLZ_code_buf[2] = (mz_uint8)(match_dist >> 8);
- d->m_pLZ_code_buf += 3;
-
- *d->m_pLZ_flags = (mz_uint8)((*d->m_pLZ_flags >> 1) | 0x80);
- if (--d->m_num_flags_left == 0) {
- d->m_num_flags_left = 8;
- d->m_pLZ_flags = d->m_pLZ_code_buf++;
- }
-
- s0 = s_tdefl_small_dist_sym[match_dist & 511];
- s1 = s_tdefl_large_dist_sym[(match_dist >> 8) & 127];
- d->m_huff_count[1][(match_dist < 512) ? s0 : s1]++;
-
- if (match_len >= TDEFL_MIN_MATCH_LEN)
- d->m_huff_count[0][s_tdefl_len_sym[match_len - TDEFL_MIN_MATCH_LEN]]++;
-}
-
-static mz_bool tdefl_compress_normal(tdefl_compressor *d) {
- const mz_uint8 *pSrc = d->m_pSrc;
- size_t src_buf_left = d->m_src_buf_left;
- tdefl_flush flush = d->m_flush;
-
- while ((src_buf_left) || ((flush) && (d->m_lookahead_size))) {
- mz_uint len_to_move, cur_match_dist, cur_match_len, cur_pos;
- // Update dictionary and hash chains. Keeps the lookahead size equal to
- // TDEFL_MAX_MATCH_LEN.
- if ((d->m_lookahead_size + d->m_dict_size) >= (TDEFL_MIN_MATCH_LEN - 1)) {
- mz_uint dst_pos = (d->m_lookahead_pos + d->m_lookahead_size) &
- TDEFL_LZ_DICT_SIZE_MASK,
- ins_pos = d->m_lookahead_pos + d->m_lookahead_size - 2;
- mz_uint hash = (d->m_dict[ins_pos & TDEFL_LZ_DICT_SIZE_MASK]
- << TDEFL_LZ_HASH_SHIFT) ^
- d->m_dict[(ins_pos + 1) & TDEFL_LZ_DICT_SIZE_MASK];
- mz_uint num_bytes_to_process = (mz_uint)MZ_MIN(
- src_buf_left, TDEFL_MAX_MATCH_LEN - d->m_lookahead_size);
- const mz_uint8 *pSrc_end = pSrc + num_bytes_to_process;
- src_buf_left -= num_bytes_to_process;
- d->m_lookahead_size += num_bytes_to_process;
- while (pSrc != pSrc_end) {
- mz_uint8 c = *pSrc++;
- d->m_dict[dst_pos] = c;
- if (dst_pos < (TDEFL_MAX_MATCH_LEN - 1))
- d->m_dict[TDEFL_LZ_DICT_SIZE + dst_pos] = c;
- hash = ((hash << TDEFL_LZ_HASH_SHIFT) ^ c) & (TDEFL_LZ_HASH_SIZE - 1);
- d->m_next[ins_pos & TDEFL_LZ_DICT_SIZE_MASK] = d->m_hash[hash];
- d->m_hash[hash] = (mz_uint16)(ins_pos);
- dst_pos = (dst_pos + 1) & TDEFL_LZ_DICT_SIZE_MASK;
- ins_pos++;
- }
- } else {
- while ((src_buf_left) && (d->m_lookahead_size < TDEFL_MAX_MATCH_LEN)) {
- mz_uint8 c = *pSrc++;
- mz_uint dst_pos = (d->m_lookahead_pos + d->m_lookahead_size) &
- TDEFL_LZ_DICT_SIZE_MASK;
- src_buf_left--;
- d->m_dict[dst_pos] = c;
- if (dst_pos < (TDEFL_MAX_MATCH_LEN - 1))
- d->m_dict[TDEFL_LZ_DICT_SIZE + dst_pos] = c;
- if ((++d->m_lookahead_size + d->m_dict_size) >= TDEFL_MIN_MATCH_LEN) {
- mz_uint ins_pos = d->m_lookahead_pos + (d->m_lookahead_size - 1) - 2;
- mz_uint hash = ((d->m_dict[ins_pos & TDEFL_LZ_DICT_SIZE_MASK]
- << (TDEFL_LZ_HASH_SHIFT * 2)) ^
- (d->m_dict[(ins_pos + 1) & TDEFL_LZ_DICT_SIZE_MASK]
- << TDEFL_LZ_HASH_SHIFT) ^
- c) &
- (TDEFL_LZ_HASH_SIZE - 1);
- d->m_next[ins_pos & TDEFL_LZ_DICT_SIZE_MASK] = d->m_hash[hash];
- d->m_hash[hash] = (mz_uint16)(ins_pos);
- }
- }
- }
- d->m_dict_size =
- MZ_MIN(TDEFL_LZ_DICT_SIZE - d->m_lookahead_size, d->m_dict_size);
- if ((!flush) && (d->m_lookahead_size < TDEFL_MAX_MATCH_LEN)) break;
-
- // Simple lazy/greedy parsing state machine.
- len_to_move = 1;
- cur_match_dist = 0;
- cur_match_len =
- d->m_saved_match_len ? d->m_saved_match_len : (TDEFL_MIN_MATCH_LEN - 1);
- cur_pos = d->m_lookahead_pos & TDEFL_LZ_DICT_SIZE_MASK;
- if (d->m_flags & (TDEFL_RLE_MATCHES | TDEFL_FORCE_ALL_RAW_BLOCKS)) {
- if ((d->m_dict_size) && (!(d->m_flags & TDEFL_FORCE_ALL_RAW_BLOCKS))) {
- mz_uint8 c = d->m_dict[(cur_pos - 1) & TDEFL_LZ_DICT_SIZE_MASK];
- cur_match_len = 0;
- while (cur_match_len < d->m_lookahead_size) {
- if (d->m_dict[cur_pos + cur_match_len] != c) break;
- cur_match_len++;
- }
- if (cur_match_len < TDEFL_MIN_MATCH_LEN)
- cur_match_len = 0;
- else
- cur_match_dist = 1;
- }
- } else {
- tdefl_find_match(d, d->m_lookahead_pos, d->m_dict_size,
- d->m_lookahead_size, &cur_match_dist, &cur_match_len);
- }
- if (((cur_match_len == TDEFL_MIN_MATCH_LEN) &&
- (cur_match_dist >= 8U * 1024U)) ||
- (cur_pos == cur_match_dist) ||
- ((d->m_flags & TDEFL_FILTER_MATCHES) && (cur_match_len <= 5))) {
- cur_match_dist = cur_match_len = 0;
- }
- if (d->m_saved_match_len) {
- if (cur_match_len > d->m_saved_match_len) {
- tdefl_record_literal(d, (mz_uint8)d->m_saved_lit);
- if (cur_match_len >= 128) {
- tdefl_record_match(d, cur_match_len, cur_match_dist);
- d->m_saved_match_len = 0;
- len_to_move = cur_match_len;
- } else {
- d->m_saved_lit = d->m_dict[cur_pos];
- d->m_saved_match_dist = cur_match_dist;
- d->m_saved_match_len = cur_match_len;
- }
- } else {
- tdefl_record_match(d, d->m_saved_match_len, d->m_saved_match_dist);
- len_to_move = d->m_saved_match_len - 1;
- d->m_saved_match_len = 0;
- }
- } else if (!cur_match_dist)
- tdefl_record_literal(d,
- d->m_dict[MZ_MIN(cur_pos, sizeof(d->m_dict) - 1)]);
- else if ((d->m_greedy_parsing) || (d->m_flags & TDEFL_RLE_MATCHES) ||
- (cur_match_len >= 128)) {
- tdefl_record_match(d, cur_match_len, cur_match_dist);
- len_to_move = cur_match_len;
- } else {
- d->m_saved_lit = d->m_dict[MZ_MIN(cur_pos, sizeof(d->m_dict) - 1)];
- d->m_saved_match_dist = cur_match_dist;
- d->m_saved_match_len = cur_match_len;
- }
- // Move the lookahead forward by len_to_move bytes.
- d->m_lookahead_pos += len_to_move;
- MZ_ASSERT(d->m_lookahead_size >= len_to_move);
- d->m_lookahead_size -= len_to_move;
- d->m_dict_size =
- MZ_MIN(d->m_dict_size + len_to_move, (mz_uint)TDEFL_LZ_DICT_SIZE);
- // Check if it's time to flush the current LZ codes to the internal output
- // buffer.
- if ((d->m_pLZ_code_buf > &d->m_lz_code_buf[TDEFL_LZ_CODE_BUF_SIZE - 8]) ||
- ((d->m_total_lz_bytes > 31 * 1024) &&
- (((((mz_uint)(d->m_pLZ_code_buf - d->m_lz_code_buf) * 115) >> 7) >=
- d->m_total_lz_bytes) ||
- (d->m_flags & TDEFL_FORCE_ALL_RAW_BLOCKS)))) {
- int n;
- d->m_pSrc = pSrc;
- d->m_src_buf_left = src_buf_left;
- if ((n = tdefl_flush_block(d, 0)) != 0)
- return (n < 0) ? MZ_FALSE : MZ_TRUE;
- }
- }
-
- d->m_pSrc = pSrc;
- d->m_src_buf_left = src_buf_left;
- return MZ_TRUE;
-}
-
-static tdefl_status tdefl_flush_output_buffer(tdefl_compressor *d) {
- if (d->m_pIn_buf_size) {
- *d->m_pIn_buf_size = d->m_pSrc - (const mz_uint8 *)d->m_pIn_buf;
- }
-
- if (d->m_pOut_buf_size) {
- size_t n = MZ_MIN(*d->m_pOut_buf_size - d->m_out_buf_ofs,
- d->m_output_flush_remaining);
- memcpy((mz_uint8 *)d->m_pOut_buf + d->m_out_buf_ofs,
- d->m_output_buf + d->m_output_flush_ofs, n);
- d->m_output_flush_ofs += (mz_uint)n;
- d->m_output_flush_remaining -= (mz_uint)n;
- d->m_out_buf_ofs += n;
-
- *d->m_pOut_buf_size = d->m_out_buf_ofs;
- }
-
- return (d->m_finished && !d->m_output_flush_remaining) ? TDEFL_STATUS_DONE
- : TDEFL_STATUS_OKAY;
-}
-
-tdefl_status tdefl_compress(tdefl_compressor *d, const void *pIn_buf,
- size_t *pIn_buf_size, void *pOut_buf,
- size_t *pOut_buf_size, tdefl_flush flush) {
- if (!d) {
- if (pIn_buf_size) *pIn_buf_size = 0;
- if (pOut_buf_size) *pOut_buf_size = 0;
- return TDEFL_STATUS_BAD_PARAM;
- }
-
- d->m_pIn_buf = pIn_buf;
- d->m_pIn_buf_size = pIn_buf_size;
- d->m_pOut_buf = pOut_buf;
- d->m_pOut_buf_size = pOut_buf_size;
- d->m_pSrc = (const mz_uint8 *)(pIn_buf);
- d->m_src_buf_left = pIn_buf_size ? *pIn_buf_size : 0;
- d->m_out_buf_ofs = 0;
- d->m_flush = flush;
-
- if (((d->m_pPut_buf_func != NULL) ==
- ((pOut_buf != NULL) || (pOut_buf_size != NULL))) ||
- (d->m_prev_return_status != TDEFL_STATUS_OKAY) ||
- (d->m_wants_to_finish && (flush != TDEFL_FINISH)) ||
- (pIn_buf_size && *pIn_buf_size && !pIn_buf) ||
- (pOut_buf_size && *pOut_buf_size && !pOut_buf)) {
- if (pIn_buf_size) *pIn_buf_size = 0;
- if (pOut_buf_size) *pOut_buf_size = 0;
- return (d->m_prev_return_status = TDEFL_STATUS_BAD_PARAM);
- }
- d->m_wants_to_finish |= (flush == TDEFL_FINISH);
-
- if ((d->m_output_flush_remaining) || (d->m_finished))
- return (d->m_prev_return_status = tdefl_flush_output_buffer(d));
-
-#if MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN
- if (((d->m_flags & TDEFL_MAX_PROBES_MASK) == 1) &&
- ((d->m_flags & TDEFL_GREEDY_PARSING_FLAG) != 0) &&
- ((d->m_flags & (TDEFL_FILTER_MATCHES | TDEFL_FORCE_ALL_RAW_BLOCKS |
- TDEFL_RLE_MATCHES)) == 0)) {
- if (!tdefl_compress_fast(d)) return d->m_prev_return_status;
- } else
-#endif // #if MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN
- {
- if (!tdefl_compress_normal(d)) return d->m_prev_return_status;
- }
-
- if ((d->m_flags & (TDEFL_WRITE_ZLIB_HEADER | TDEFL_COMPUTE_ADLER32)) &&
- (pIn_buf))
- d->m_adler32 =
- (mz_uint32)mz_adler32(d->m_adler32, (const mz_uint8 *)pIn_buf,
- d->m_pSrc - (const mz_uint8 *)pIn_buf);
-
- if ((flush) && (!d->m_lookahead_size) && (!d->m_src_buf_left) &&
- (!d->m_output_flush_remaining)) {
- if (tdefl_flush_block(d, flush) < 0) return d->m_prev_return_status;
- d->m_finished = (flush == TDEFL_FINISH);
- if (flush == TDEFL_FULL_FLUSH) {
- MZ_CLEAR_OBJ(d->m_hash);
- MZ_CLEAR_OBJ(d->m_next);
- d->m_dict_size = 0;
- }
- }
-
- return (d->m_prev_return_status = tdefl_flush_output_buffer(d));
-}
-
-tdefl_status tdefl_compress_buffer(tdefl_compressor *d, const void *pIn_buf,
- size_t in_buf_size, tdefl_flush flush) {
- MZ_ASSERT(d->m_pPut_buf_func);
- return tdefl_compress(d, pIn_buf, &in_buf_size, NULL, NULL, flush);
-}
-
-tdefl_status tdefl_init(tdefl_compressor *d,
- tdefl_put_buf_func_ptr pPut_buf_func,
- void *pPut_buf_user, int flags) {
- d->m_pPut_buf_func = pPut_buf_func;
- d->m_pPut_buf_user = pPut_buf_user;
- d->m_flags = (mz_uint)(flags);
- d->m_max_probes[0] = 1 + ((flags & 0xFFF) + 2) / 3;
- d->m_greedy_parsing = (flags & TDEFL_GREEDY_PARSING_FLAG) != 0;
- d->m_max_probes[1] = 1 + (((flags & 0xFFF) >> 2) + 2) / 3;
- if (!(flags & TDEFL_NONDETERMINISTIC_PARSING_FLAG)) MZ_CLEAR_OBJ(d->m_hash);
- d->m_lookahead_pos = d->m_lookahead_size = d->m_dict_size =
- d->m_total_lz_bytes = d->m_lz_code_buf_dict_pos = d->m_bits_in = 0;
- d->m_output_flush_ofs = d->m_output_flush_remaining = d->m_finished =
- d->m_block_index = d->m_bit_buffer = d->m_wants_to_finish = 0;
- d->m_pLZ_code_buf = d->m_lz_code_buf + 1;
- d->m_pLZ_flags = d->m_lz_code_buf;
- d->m_num_flags_left = 8;
- d->m_pOutput_buf = d->m_output_buf;
- d->m_pOutput_buf_end = d->m_output_buf;
- d->m_prev_return_status = TDEFL_STATUS_OKAY;
- d->m_saved_match_dist = d->m_saved_match_len = d->m_saved_lit = 0;
- d->m_adler32 = 1;
- d->m_pIn_buf = NULL;
- d->m_pOut_buf = NULL;
- d->m_pIn_buf_size = NULL;
- d->m_pOut_buf_size = NULL;
- d->m_flush = TDEFL_NO_FLUSH;
- d->m_pSrc = NULL;
- d->m_src_buf_left = 0;
- d->m_out_buf_ofs = 0;
- memset(&d->m_huff_count[0][0], 0,
- sizeof(d->m_huff_count[0][0]) * TDEFL_MAX_HUFF_SYMBOLS_0);
- memset(&d->m_huff_count[1][0], 0,
- sizeof(d->m_huff_count[1][0]) * TDEFL_MAX_HUFF_SYMBOLS_1);
- return TDEFL_STATUS_OKAY;
-}
-
-tdefl_status tdefl_get_prev_return_status(tdefl_compressor *d) {
- return d->m_prev_return_status;
-}
-
-mz_uint32 tdefl_get_adler32(tdefl_compressor *d) { return d->m_adler32; }
-
-mz_bool tdefl_compress_mem_to_output(const void *pBuf, size_t buf_len,
- tdefl_put_buf_func_ptr pPut_buf_func,
- void *pPut_buf_user, int flags) {
- tdefl_compressor *pComp;
- mz_bool succeeded;
- if (((buf_len) && (!pBuf)) || (!pPut_buf_func)) return MZ_FALSE;
- pComp = (tdefl_compressor *)MZ_MALLOC(sizeof(tdefl_compressor));
- if (!pComp) return MZ_FALSE;
- succeeded = (tdefl_init(pComp, pPut_buf_func, pPut_buf_user, flags) ==
- TDEFL_STATUS_OKAY);
- succeeded =
- succeeded && (tdefl_compress_buffer(pComp, pBuf, buf_len, TDEFL_FINISH) ==
- TDEFL_STATUS_DONE);
- MZ_FREE(pComp);
- return succeeded;
-}
-
-typedef struct {
- size_t m_size, m_capacity;
- mz_uint8 *m_pBuf;
- mz_bool m_expandable;
-} tdefl_output_buffer;
-
-static mz_bool tdefl_output_buffer_putter(const void *pBuf, int len,
- void *pUser) {
- tdefl_output_buffer *p = (tdefl_output_buffer *)pUser;
- size_t new_size = p->m_size + len;
- if (new_size > p->m_capacity) {
- size_t new_capacity = p->m_capacity;
- mz_uint8 *pNew_buf;
- if (!p->m_expandable) return MZ_FALSE;
- do {
- new_capacity = MZ_MAX(128U, new_capacity << 1U);
- } while (new_size > new_capacity);
- pNew_buf = (mz_uint8 *)MZ_REALLOC(p->m_pBuf, new_capacity);
- if (!pNew_buf) return MZ_FALSE;
- p->m_pBuf = pNew_buf;
- p->m_capacity = new_capacity;
- }
- memcpy((mz_uint8 *)p->m_pBuf + p->m_size, pBuf, len);
- p->m_size = new_size;
- return MZ_TRUE;
-}
-
-void *tdefl_compress_mem_to_heap(const void *pSrc_buf, size_t src_buf_len,
- size_t *pOut_len, int flags) {
- tdefl_output_buffer out_buf;
- MZ_CLEAR_OBJ(out_buf);
- if (!pOut_len)
- return MZ_FALSE;
- else
- *pOut_len = 0;
- out_buf.m_expandable = MZ_TRUE;
- if (!tdefl_compress_mem_to_output(
- pSrc_buf, src_buf_len, tdefl_output_buffer_putter, &out_buf, flags))
- return NULL;
- *pOut_len = out_buf.m_size;
- return out_buf.m_pBuf;
-}
-
-size_t tdefl_compress_mem_to_mem(void *pOut_buf, size_t out_buf_len,
- const void *pSrc_buf, size_t src_buf_len,
- int flags) {
- tdefl_output_buffer out_buf;
- MZ_CLEAR_OBJ(out_buf);
- if (!pOut_buf) return 0;
- out_buf.m_pBuf = (mz_uint8 *)pOut_buf;
- out_buf.m_capacity = out_buf_len;
- if (!tdefl_compress_mem_to_output(
- pSrc_buf, src_buf_len, tdefl_output_buffer_putter, &out_buf, flags))
- return 0;
- return out_buf.m_size;
-}
-
-#ifndef MINIZ_NO_ZLIB_APIS
-static const mz_uint s_tdefl_num_probes[11] = {0, 1, 6, 32, 16, 32,
- 128, 256, 512, 768, 1500};
-
-// level may actually range from [0,10] (10 is a "hidden" max level, where we
-// want a bit more compression and it's fine if throughput to fall off a cliff
-// on some files).
-mz_uint tdefl_create_comp_flags_from_zip_params(int level, int window_bits,
- int strategy) {
- mz_uint comp_flags =
- s_tdefl_num_probes[(level >= 0) ? MZ_MIN(10, level) : MZ_DEFAULT_LEVEL] |
- ((level <= 3) ? TDEFL_GREEDY_PARSING_FLAG : 0);
- if (window_bits > 0) comp_flags |= TDEFL_WRITE_ZLIB_HEADER;
-
- if (!level)
- comp_flags |= TDEFL_FORCE_ALL_RAW_BLOCKS;
- else if (strategy == MZ_FILTERED)
- comp_flags |= TDEFL_FILTER_MATCHES;
- else if (strategy == MZ_HUFFMAN_ONLY)
- comp_flags &= ~TDEFL_MAX_PROBES_MASK;
- else if (strategy == MZ_FIXED)
- comp_flags |= TDEFL_FORCE_ALL_STATIC_BLOCKS;
- else if (strategy == MZ_RLE)
- comp_flags |= TDEFL_RLE_MATCHES;
-
- return comp_flags;
-}
-#endif // MINIZ_NO_ZLIB_APIS
-
-#ifdef _MSC_VER
-#pragma warning(push)
-#pragma warning(disable : 4204) // nonstandard extension used : non-constant
- // aggregate initializer (also supported by GNU
- // C and C99, so no big deal)
-#pragma warning(disable : 4244) // 'initializing': conversion from '__int64' to
- // 'int', possible loss of data
-#pragma warning(disable : 4267) // 'argument': conversion from '__int64' to
- // 'int', possible loss of data
-#pragma warning(disable : 4996) // 'strdup': The POSIX name for this item is
- // deprecated. Instead, use the ISO C and C++
- // conformant name: _strdup.
-#endif
-
-// Simple PNG writer function by Alex Evans, 2011. Released into the public
-// domain: https://gist.github.com/908299, more context at
-// http://altdevblogaday.org/2011/04/06/a-smaller-jpg-encoder/.
-// This is actually a modification of Alex's original code so PNG files
-// generated by this function pass pngcheck.
-void *tdefl_write_image_to_png_file_in_memory_ex(const void *pImage, int w,
- int h, int num_chans,
- size_t *pLen_out,
- mz_uint level, mz_bool flip) {
- // Using a local copy of this array here in case MINIZ_NO_ZLIB_APIS was
- // defined.
- static const mz_uint s_tdefl_png_num_probes[11] = {
- 0, 1, 6, 32, 16, 32, 128, 256, 512, 768, 1500};
- tdefl_compressor *pComp =
- (tdefl_compressor *)MZ_MALLOC(sizeof(tdefl_compressor));
- tdefl_output_buffer out_buf;
- int i, bpl = w * num_chans, y, z;
- mz_uint32 c;
- *pLen_out = 0;
- if (!pComp) return NULL;
- MZ_CLEAR_OBJ(out_buf);
- out_buf.m_expandable = MZ_TRUE;
- out_buf.m_capacity = 57 + MZ_MAX(64, (1 + bpl) * h);
- if (NULL == (out_buf.m_pBuf = (mz_uint8 *)MZ_MALLOC(out_buf.m_capacity))) {
- MZ_FREE(pComp);
- return NULL;
- }
- // write dummy header
- for (z = 41; z; --z) tdefl_output_buffer_putter(&z, 1, &out_buf);
- // compress image data
- tdefl_init(
- pComp, tdefl_output_buffer_putter, &out_buf,
- s_tdefl_png_num_probes[MZ_MIN(10, level)] | TDEFL_WRITE_ZLIB_HEADER);
- for (y = 0; y < h; ++y) {
- tdefl_compress_buffer(pComp, &z, 1, TDEFL_NO_FLUSH);
- tdefl_compress_buffer(pComp,
- (mz_uint8 *)pImage + (flip ? (h - 1 - y) : y) * bpl,
- bpl, TDEFL_NO_FLUSH);
- }
- if (tdefl_compress_buffer(pComp, NULL, 0, TDEFL_FINISH) !=
- TDEFL_STATUS_DONE) {
- MZ_FREE(pComp);
- MZ_FREE(out_buf.m_pBuf);
- return NULL;
- }
- // write real header
- *pLen_out = out_buf.m_size - 41;
- {
- static const mz_uint8 chans[] = {0x00, 0x00, 0x04, 0x02, 0x06};
- mz_uint8 pnghdr[41] = {0x89,
- 0x50,
- 0x4e,
- 0x47,
- 0x0d,
- 0x0a,
- 0x1a,
- 0x0a,
- 0x00,
- 0x00,
- 0x00,
- 0x0d,
- 0x49,
- 0x48,
- 0x44,
- 0x52,
- 0,
- 0,
- (mz_uint8)(w >> 8),
- (mz_uint8)w,
- 0,
- 0,
- (mz_uint8)(h >> 8),
- (mz_uint8)h,
- 8,
- chans[num_chans],
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- (mz_uint8)(*pLen_out >> 24),
- (mz_uint8)(*pLen_out >> 16),
- (mz_uint8)(*pLen_out >> 8),
- (mz_uint8)*pLen_out,
- 0x49,
- 0x44,
- 0x41,
- 0x54};
- c = (mz_uint32)mz_crc32(MZ_CRC32_INIT, pnghdr + 12, 17);
- for (i = 0; i < 4; ++i, c <<= 8)
- ((mz_uint8 *)(pnghdr + 29))[i] = (mz_uint8)(c >> 24);
- memcpy(out_buf.m_pBuf, pnghdr, 41);
- }
- // write footer (IDAT CRC-32, followed by IEND chunk)
- if (!tdefl_output_buffer_putter(
- "\0\0\0\0\0\0\0\0\x49\x45\x4e\x44\xae\x42\x60\x82", 16, &out_buf)) {
- *pLen_out = 0;
- MZ_FREE(pComp);
- MZ_FREE(out_buf.m_pBuf);
- return NULL;
- }
- c = (mz_uint32)mz_crc32(MZ_CRC32_INIT, out_buf.m_pBuf + 41 - 4,
- *pLen_out + 4);
- for (i = 0; i < 4; ++i, c <<= 8)
- (out_buf.m_pBuf + out_buf.m_size - 16)[i] = (mz_uint8)(c >> 24);
- // compute final size of file, grab compressed data buffer and return
- *pLen_out += 57;
- MZ_FREE(pComp);
- return out_buf.m_pBuf;
-}
-void *tdefl_write_image_to_png_file_in_memory(const void *pImage, int w, int h,
- int num_chans, size_t *pLen_out) {
- // Level 6 corresponds to TDEFL_DEFAULT_MAX_PROBES or MZ_DEFAULT_LEVEL (but we
- // can't depend on MZ_DEFAULT_LEVEL being available in case the zlib API's
- // where #defined out)
- return tdefl_write_image_to_png_file_in_memory_ex(pImage, w, h, num_chans,
- pLen_out, 6, MZ_FALSE);
-}
-
-// ------------------- .ZIP archive reading
-
-#ifndef MINIZ_NO_ARCHIVE_APIS
-#error "No arvhive APIs"
-
-#ifdef MINIZ_NO_STDIO
-#define MZ_FILE void *
-#else
-#include <stdio.h>
-#include <sys/stat.h>
-
-#if defined(_MSC_VER) || defined(__MINGW64__)
-static FILE *mz_fopen(const char *pFilename, const char *pMode) {
- FILE *pFile = NULL;
- fopen_s(&pFile, pFilename, pMode);
- return pFile;
-}
-static FILE *mz_freopen(const char *pPath, const char *pMode, FILE *pStream) {
- FILE *pFile = NULL;
- if (freopen_s(&pFile, pPath, pMode, pStream)) return NULL;
- return pFile;
-}
-#ifndef MINIZ_NO_TIME
-#include <sys/utime.h>
-#endif
-#define MZ_FILE FILE
-#define MZ_FOPEN mz_fopen
-#define MZ_FCLOSE fclose
-#define MZ_FREAD fread
-#define MZ_FWRITE fwrite
-#define MZ_FTELL64 _ftelli64
-#define MZ_FSEEK64 _fseeki64
-#define MZ_FILE_STAT_STRUCT _stat
-#define MZ_FILE_STAT _stat
-#define MZ_FFLUSH fflush
-#define MZ_FREOPEN mz_freopen
-#define MZ_DELETE_FILE remove
-#elif defined(__MINGW32__)
-#ifndef MINIZ_NO_TIME
-#include <sys/utime.h>
-#endif
-#define MZ_FILE FILE
-#define MZ_FOPEN(f, m) fopen(f, m)
-#define MZ_FCLOSE fclose
-#define MZ_FREAD fread
-#define MZ_FWRITE fwrite
-#define MZ_FTELL64 ftello64
-#define MZ_FSEEK64 fseeko64
-#define MZ_FILE_STAT_STRUCT _stat
-#define MZ_FILE_STAT _stat
-#define MZ_FFLUSH fflush
-#define MZ_FREOPEN(f, m, s) freopen(f, m, s)
-#define MZ_DELETE_FILE remove
-#elif defined(__TINYC__)
-#ifndef MINIZ_NO_TIME
-#include <sys/utime.h>
-#endif
-#define MZ_FILE FILE
-#define MZ_FOPEN(f, m) fopen(f, m)
-#define MZ_FCLOSE fclose
-#define MZ_FREAD fread
-#define MZ_FWRITE fwrite
-#define MZ_FTELL64 ftell
-#define MZ_FSEEK64 fseek
-#define MZ_FILE_STAT_STRUCT stat
-#define MZ_FILE_STAT stat
-#define MZ_FFLUSH fflush
-#define MZ_FREOPEN(f, m, s) freopen(f, m, s)
-#define MZ_DELETE_FILE remove
-#elif defined(__GNUC__) && defined(_LARGEFILE64_SOURCE) && _LARGEFILE64_SOURCE
-#ifndef MINIZ_NO_TIME
-#include <utime.h>
-#endif
-#define MZ_FILE FILE
-#define MZ_FOPEN(f, m) fopen64(f, m)
-#define MZ_FCLOSE fclose
-#define MZ_FREAD fread
-#define MZ_FWRITE fwrite
-#define MZ_FTELL64 ftello64
-#define MZ_FSEEK64 fseeko64
-#define MZ_FILE_STAT_STRUCT stat64
-#define MZ_FILE_STAT stat64
-#define MZ_FFLUSH fflush
-#define MZ_FREOPEN(p, m, s) freopen64(p, m, s)
-#define MZ_DELETE_FILE remove
-#else
-#ifndef MINIZ_NO_TIME
-#include <utime.h>
-#endif
-#define MZ_FILE FILE
-#define MZ_FOPEN(f, m) fopen(f, m)
-#define MZ_FCLOSE fclose
-#define MZ_FREAD fread
-#define MZ_FWRITE fwrite
-#define MZ_FTELL64 ftello
-#define MZ_FSEEK64 fseeko
-#define MZ_FILE_STAT_STRUCT stat
-#define MZ_FILE_STAT stat
-#define MZ_FFLUSH fflush
-#define MZ_FREOPEN(f, m, s) freopen(f, m, s)
-#define MZ_DELETE_FILE remove
-#endif // #ifdef _MSC_VER
-#endif // #ifdef MINIZ_NO_STDIO
-
-#define MZ_TOLOWER(c) ((((c) >= 'A') && ((c) <= 'Z')) ? ((c) - 'A' + 'a') : (c))
-
-// Various ZIP archive enums. To completely avoid cross platform compiler
-// alignment and platform endian issues, miniz.c doesn't use structs for any of
-// this stuff.
-enum {
- // ZIP archive identifiers and record sizes
- MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG = 0x06054b50,
- MZ_ZIP_CENTRAL_DIR_HEADER_SIG = 0x02014b50,
- MZ_ZIP_LOCAL_DIR_HEADER_SIG = 0x04034b50,
- MZ_ZIP_LOCAL_DIR_HEADER_SIZE = 30,
- MZ_ZIP_CENTRAL_DIR_HEADER_SIZE = 46,
- MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE = 22,
- // Central directory header record offsets
- MZ_ZIP_CDH_SIG_OFS = 0,
- MZ_ZIP_CDH_VERSION_MADE_BY_OFS = 4,
- MZ_ZIP_CDH_VERSION_NEEDED_OFS = 6,
- MZ_ZIP_CDH_BIT_FLAG_OFS = 8,
- MZ_ZIP_CDH_METHOD_OFS = 10,
- MZ_ZIP_CDH_FILE_TIME_OFS = 12,
- MZ_ZIP_CDH_FILE_DATE_OFS = 14,
- MZ_ZIP_CDH_CRC32_OFS = 16,
- MZ_ZIP_CDH_COMPRESSED_SIZE_OFS = 20,
- MZ_ZIP_CDH_DECOMPRESSED_SIZE_OFS = 24,
- MZ_ZIP_CDH_FILENAME_LEN_OFS = 28,
- MZ_ZIP_CDH_EXTRA_LEN_OFS = 30,
- MZ_ZIP_CDH_COMMENT_LEN_OFS = 32,
- MZ_ZIP_CDH_DISK_START_OFS = 34,
- MZ_ZIP_CDH_INTERNAL_ATTR_OFS = 36,
- MZ_ZIP_CDH_EXTERNAL_ATTR_OFS = 38,
- MZ_ZIP_CDH_LOCAL_HEADER_OFS = 42,
- // Local directory header offsets
- MZ_ZIP_LDH_SIG_OFS = 0,
- MZ_ZIP_LDH_VERSION_NEEDED_OFS = 4,
- MZ_ZIP_LDH_BIT_FLAG_OFS = 6,
- MZ_ZIP_LDH_METHOD_OFS = 8,
- MZ_ZIP_LDH_FILE_TIME_OFS = 10,
- MZ_ZIP_LDH_FILE_DATE_OFS = 12,
- MZ_ZIP_LDH_CRC32_OFS = 14,
- MZ_ZIP_LDH_COMPRESSED_SIZE_OFS = 18,
- MZ_ZIP_LDH_DECOMPRESSED_SIZE_OFS = 22,
- MZ_ZIP_LDH_FILENAME_LEN_OFS = 26,
- MZ_ZIP_LDH_EXTRA_LEN_OFS = 28,
- // End of central directory offsets
- MZ_ZIP_ECDH_SIG_OFS = 0,
- MZ_ZIP_ECDH_NUM_THIS_DISK_OFS = 4,
- MZ_ZIP_ECDH_NUM_DISK_CDIR_OFS = 6,
- MZ_ZIP_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS = 8,
- MZ_ZIP_ECDH_CDIR_TOTAL_ENTRIES_OFS = 10,
- MZ_ZIP_ECDH_CDIR_SIZE_OFS = 12,
- MZ_ZIP_ECDH_CDIR_OFS_OFS = 16,
- MZ_ZIP_ECDH_COMMENT_SIZE_OFS = 20,
-};
-
-typedef struct {
- void *m_p;
- size_t m_size, m_capacity;
- mz_uint m_element_size;
-} mz_zip_array;
-
-struct mz_zip_internal_state_tag {
- mz_zip_array m_central_dir;
- mz_zip_array m_central_dir_offsets;
- mz_zip_array m_sorted_central_dir_offsets;
- MZ_FILE *m_pFile;
- void *m_pMem;
- size_t m_mem_size;
- size_t m_mem_capacity;
-};
-
-#define MZ_ZIP_ARRAY_SET_ELEMENT_SIZE(array_ptr, element_size) \
- (array_ptr)->m_element_size = element_size
-#define MZ_ZIP_ARRAY_ELEMENT(array_ptr, element_type, index) \
- ((element_type *)((array_ptr)->m_p))[index]
-
-static MZ_FORCEINLINE void mz_zip_array_clear(mz_zip_archive *pZip,
- mz_zip_array *pArray) {
- pZip->m_pFree(pZip->m_pAlloc_opaque, pArray->m_p);
- memset(pArray, 0, sizeof(mz_zip_array));
-}
-
-static mz_bool mz_zip_array_ensure_capacity(mz_zip_archive *pZip,
- mz_zip_array *pArray,
- size_t min_new_capacity,
- mz_uint growing) {
- void *pNew_p;
- size_t new_capacity = min_new_capacity;
- MZ_ASSERT(pArray->m_element_size);
- if (pArray->m_capacity >= min_new_capacity) return MZ_TRUE;
- if (growing) {
- new_capacity = MZ_MAX(1, pArray->m_capacity);
- while (new_capacity < min_new_capacity) new_capacity *= 2;
- }
- if (NULL == (pNew_p = pZip->m_pRealloc(pZip->m_pAlloc_opaque, pArray->m_p,
- pArray->m_element_size, new_capacity)))
- return MZ_FALSE;
- pArray->m_p = pNew_p;
- pArray->m_capacity = new_capacity;
- return MZ_TRUE;
-}
-
-static MZ_FORCEINLINE mz_bool mz_zip_array_reserve(mz_zip_archive *pZip,
- mz_zip_array *pArray,
- size_t new_capacity,
- mz_uint growing) {
- if (new_capacity > pArray->m_capacity) {
- if (!mz_zip_array_ensure_capacity(pZip, pArray, new_capacity, growing))
- return MZ_FALSE;
- }
- return MZ_TRUE;
-}
-
-static MZ_FORCEINLINE mz_bool mz_zip_array_resize(mz_zip_archive *pZip,
- mz_zip_array *pArray,
- size_t new_size,
- mz_uint growing) {
- if (new_size > pArray->m_capacity) {
- if (!mz_zip_array_ensure_capacity(pZip, pArray, new_size, growing))
- return MZ_FALSE;
- }
- pArray->m_size = new_size;
- return MZ_TRUE;
-}
-
-static MZ_FORCEINLINE mz_bool mz_zip_array_ensure_room(mz_zip_archive *pZip,
- mz_zip_array *pArray,
- size_t n) {
- return mz_zip_array_reserve(pZip, pArray, pArray->m_size + n, MZ_TRUE);
-}
-
-static MZ_FORCEINLINE mz_bool mz_zip_array_push_back(mz_zip_archive *pZip,
- mz_zip_array *pArray,
- const void *pElements,
- size_t n) {
- size_t orig_size = pArray->m_size;
- if (!mz_zip_array_resize(pZip, pArray, orig_size + n, MZ_TRUE))
- return MZ_FALSE;
- memcpy((mz_uint8 *)pArray->m_p + orig_size * pArray->m_element_size,
- pElements, n * pArray->m_element_size);
- return MZ_TRUE;
-}
-
-#ifndef MINIZ_NO_TIME
-static time_t mz_zip_dos_to_time_t(int dos_time, int dos_date) {
- struct tm tm;
- memset(&tm, 0, sizeof(tm));
- tm.tm_isdst = -1;
- tm.tm_year = ((dos_date >> 9) & 127) + 1980 - 1900;
- tm.tm_mon = ((dos_date >> 5) & 15) - 1;
- tm.tm_mday = dos_date & 31;
- tm.tm_hour = (dos_time >> 11) & 31;
- tm.tm_min = (dos_time >> 5) & 63;
- tm.tm_sec = (dos_time << 1) & 62;
- return mktime(&tm);
-}
-
-static void mz_zip_time_to_dos_time(time_t time, mz_uint16 *pDOS_time,
- mz_uint16 *pDOS_date) {
-#ifdef _MSC_VER
- struct tm tm_struct;
- struct tm *tm = &tm_struct;
- errno_t err = localtime_s(tm, &time);
- if (err) {
- *pDOS_date = 0;
- *pDOS_time = 0;
- return;
- }
-#else
- struct tm *tm = localtime(&time);
-#endif
- *pDOS_time = (mz_uint16)(((tm->tm_hour) << 11) + ((tm->tm_min) << 5) +
- ((tm->tm_sec) >> 1));
- *pDOS_date = (mz_uint16)(((tm->tm_year + 1900 - 1980) << 9) +
- ((tm->tm_mon + 1) << 5) + tm->tm_mday);
-}
-#endif
-
-#ifndef MINIZ_NO_STDIO
-static mz_bool mz_zip_get_file_modified_time(const char *pFilename,
- mz_uint16 *pDOS_time,
- mz_uint16 *pDOS_date) {
-#ifdef MINIZ_NO_TIME
- (void)pFilename;
- *pDOS_date = *pDOS_time = 0;
-#else
- struct MZ_FILE_STAT_STRUCT file_stat;
- // On Linux with x86 glibc, this call will fail on large files (>= 0x80000000
- // bytes) unless you compiled with _LARGEFILE64_SOURCE. Argh.
- if (MZ_FILE_STAT(pFilename, &file_stat) != 0) return MZ_FALSE;
- mz_zip_time_to_dos_time(file_stat.st_mtime, pDOS_time, pDOS_date);
-#endif // #ifdef MINIZ_NO_TIME
- return MZ_TRUE;
-}
-
-#ifndef MINIZ_NO_TIME
-static mz_bool mz_zip_set_file_times(const char *pFilename, time_t access_time,
- time_t modified_time) {
- struct utimbuf t;
- t.actime = access_time;
- t.modtime = modified_time;
- return !utime(pFilename, &t);
-}
-#endif // #ifndef MINIZ_NO_TIME
-#endif // #ifndef MINIZ_NO_STDIO
-
-static mz_bool mz_zip_reader_init_internal(mz_zip_archive *pZip,
- mz_uint32 flags) {
- (void)flags;
- if ((!pZip) || (pZip->m_pState) || (pZip->m_zip_mode != MZ_ZIP_MODE_INVALID))
- return MZ_FALSE;
-
- if (!pZip->m_pAlloc) pZip->m_pAlloc = def_alloc_func;
- if (!pZip->m_pFree) pZip->m_pFree = def_free_func;
- if (!pZip->m_pRealloc) pZip->m_pRealloc = def_realloc_func;
-
- pZip->m_zip_mode = MZ_ZIP_MODE_READING;
- pZip->m_archive_size = 0;
- pZip->m_central_directory_file_ofs = 0;
- pZip->m_total_files = 0;
-
- if (NULL == (pZip->m_pState = (mz_zip_internal_state *)pZip->m_pAlloc(
- pZip->m_pAlloc_opaque, 1, sizeof(mz_zip_internal_state))))
- return MZ_FALSE;
- memset(pZip->m_pState, 0, sizeof(mz_zip_internal_state));
- MZ_ZIP_ARRAY_SET_ELEMENT_SIZE(&pZip->m_pState->m_central_dir,
- sizeof(mz_uint8));
- MZ_ZIP_ARRAY_SET_ELEMENT_SIZE(&pZip->m_pState->m_central_dir_offsets,
- sizeof(mz_uint32));
- MZ_ZIP_ARRAY_SET_ELEMENT_SIZE(&pZip->m_pState->m_sorted_central_dir_offsets,
- sizeof(mz_uint32));
- return MZ_TRUE;
-}
-
-static MZ_FORCEINLINE mz_bool
-mz_zip_reader_filename_less(const mz_zip_array *pCentral_dir_array,
- const mz_zip_array *pCentral_dir_offsets,
- mz_uint l_index, mz_uint r_index) {
- const mz_uint8 *pL = &MZ_ZIP_ARRAY_ELEMENT(
- pCentral_dir_array, mz_uint8,
- MZ_ZIP_ARRAY_ELEMENT(pCentral_dir_offsets, mz_uint32,
- l_index)),
- *pE;
- const mz_uint8 *pR = &MZ_ZIP_ARRAY_ELEMENT(
- pCentral_dir_array, mz_uint8,
- MZ_ZIP_ARRAY_ELEMENT(pCentral_dir_offsets, mz_uint32, r_index));
- mz_uint l_len = MZ_READ_LE16(pL + MZ_ZIP_CDH_FILENAME_LEN_OFS),
- r_len = MZ_READ_LE16(pR + MZ_ZIP_CDH_FILENAME_LEN_OFS);
- mz_uint8 l = 0, r = 0;
- pL += MZ_ZIP_CENTRAL_DIR_HEADER_SIZE;
- pR += MZ_ZIP_CENTRAL_DIR_HEADER_SIZE;
- pE = pL + MZ_MIN(l_len, r_len);
- while (pL < pE) {
- if ((l = MZ_TOLOWER(*pL)) != (r = MZ_TOLOWER(*pR))) break;
- pL++;
- pR++;
- }
- return (pL == pE) ? (l_len < r_len) : (l < r);
-}
-
-#define MZ_SWAP_UINT32(a, b) \
- do { \
- mz_uint32 t = a; \
- a = b; \
- b = t; \
- } \
- MZ_MACRO_END
-
-// Heap sort of lowercased filenames, used to help accelerate plain central
-// directory searches by mz_zip_reader_locate_file(). (Could also use qsort(),
-// but it could allocate memory.)
-static void mz_zip_reader_sort_central_dir_offsets_by_filename(
- mz_zip_archive *pZip) {
- mz_zip_internal_state *pState = pZip->m_pState;
- const mz_zip_array *pCentral_dir_offsets = &pState->m_central_dir_offsets;
- const mz_zip_array *pCentral_dir = &pState->m_central_dir;
- mz_uint32 *pIndices = &MZ_ZIP_ARRAY_ELEMENT(
- &pState->m_sorted_central_dir_offsets, mz_uint32, 0);
- const int size = pZip->m_total_files;
- int start = (size - 2) >> 1, end;
- while (start >= 0) {
- int child, root = start;
- for (;;) {
- if ((child = (root << 1) + 1) >= size) break;
- child +=
- (((child + 1) < size) &&
- (mz_zip_reader_filename_less(pCentral_dir, pCentral_dir_offsets,
- pIndices[child], pIndices[child + 1])));
- if (!mz_zip_reader_filename_less(pCentral_dir, pCentral_dir_offsets,
- pIndices[root], pIndices[child]))
- break;
- MZ_SWAP_UINT32(pIndices[root], pIndices[child]);
- root = child;
- }
- start--;
- }
-
- end = size - 1;
- while (end > 0) {
- int child, root = 0;
- MZ_SWAP_UINT32(pIndices[end], pIndices[0]);
- for (;;) {
- if ((child = (root << 1) + 1) >= end) break;
- child +=
- (((child + 1) < end) &&
- mz_zip_reader_filename_less(pCentral_dir, pCentral_dir_offsets,
- pIndices[child], pIndices[child + 1]));
- if (!mz_zip_reader_filename_less(pCentral_dir, pCentral_dir_offsets,
- pIndices[root], pIndices[child]))
- break;
- MZ_SWAP_UINT32(pIndices[root], pIndices[child]);
- root = child;
- }
- end--;
- }
-}
-
-static mz_bool mz_zip_reader_read_central_dir(mz_zip_archive *pZip,
- mz_uint32 flags) {
- mz_uint cdir_size, num_this_disk, cdir_disk_index;
- mz_uint64 cdir_ofs;
- mz_int64 cur_file_ofs;
- const mz_uint8 *p;
- mz_uint32 buf_u32[4096 / sizeof(mz_uint32)];
- mz_uint8 *pBuf = (mz_uint8 *)buf_u32;
- mz_bool sort_central_dir =
- ((flags & MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY) == 0);
- // Basic sanity checks - reject files which are too small, and check the first
- // 4 bytes of the file to make sure a local header is there.
- if (pZip->m_archive_size < MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE)
- return MZ_FALSE;
- // Find the end of central directory record by scanning the file from the end
- // towards the beginning.
- cur_file_ofs =
- MZ_MAX((mz_int64)pZip->m_archive_size - (mz_int64)sizeof(buf_u32), 0);
- for (;;) {
- int i,
- n = (int)MZ_MIN(sizeof(buf_u32), pZip->m_archive_size - cur_file_ofs);
- if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pBuf, n) != (mz_uint)n)
- return MZ_FALSE;
- for (i = n - 4; i >= 0; --i)
- if (MZ_READ_LE32(pBuf + i) == MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG) break;
- if (i >= 0) {
- cur_file_ofs += i;
- break;
- }
- if ((!cur_file_ofs) || ((pZip->m_archive_size - cur_file_ofs) >=
- (0xFFFF + MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE)))
- return MZ_FALSE;
- cur_file_ofs = MZ_MAX(cur_file_ofs - (sizeof(buf_u32) - 3), 0);
- }
- // Read and verify the end of central directory record.
- if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pBuf,
- MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) !=
- MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE)
- return MZ_FALSE;
- if ((MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_SIG_OFS) !=
- MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG) ||
- ((pZip->m_total_files =
- MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_CDIR_TOTAL_ENTRIES_OFS)) !=
- MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS)))
- return MZ_FALSE;
-
- num_this_disk = MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_NUM_THIS_DISK_OFS);
- cdir_disk_index = MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_NUM_DISK_CDIR_OFS);
- if (((num_this_disk | cdir_disk_index) != 0) &&
- ((num_this_disk != 1) || (cdir_disk_index != 1)))
- return MZ_FALSE;
-
- if ((cdir_size = MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_CDIR_SIZE_OFS)) <
- pZip->m_total_files * MZ_ZIP_CENTRAL_DIR_HEADER_SIZE)
- return MZ_FALSE;
-
- cdir_ofs = MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_CDIR_OFS_OFS);
- if ((cdir_ofs + (mz_uint64)cdir_size) > pZip->m_archive_size) return MZ_FALSE;
-
- pZip->m_central_directory_file_ofs = cdir_ofs;
-
- if (pZip->m_total_files) {
- mz_uint i, n;
-
- // Read the entire central directory into a heap block, and allocate another
- // heap block to hold the unsorted central dir file record offsets, and
- // another to hold the sorted indices.
- if ((!mz_zip_array_resize(pZip, &pZip->m_pState->m_central_dir, cdir_size,
- MZ_FALSE)) ||
- (!mz_zip_array_resize(pZip, &pZip->m_pState->m_central_dir_offsets,
- pZip->m_total_files, MZ_FALSE)))
- return MZ_FALSE;
-
- if (sort_central_dir) {
- if (!mz_zip_array_resize(pZip,
- &pZip->m_pState->m_sorted_central_dir_offsets,
- pZip->m_total_files, MZ_FALSE))
- return MZ_FALSE;
- }
-
- if (pZip->m_pRead(pZip->m_pIO_opaque, cdir_ofs,
- pZip->m_pState->m_central_dir.m_p,
- cdir_size) != cdir_size)
- return MZ_FALSE;
-
- // Now create an index into the central directory file records, do some
- // basic sanity checking on each record, and check for zip64 entries (which
- // are not yet supported).
- p = (const mz_uint8 *)pZip->m_pState->m_central_dir.m_p;
- for (n = cdir_size, i = 0; i < pZip->m_total_files; ++i) {
- mz_uint total_header_size, comp_size, decomp_size, disk_index;
- if ((n < MZ_ZIP_CENTRAL_DIR_HEADER_SIZE) ||
- (MZ_READ_LE32(p) != MZ_ZIP_CENTRAL_DIR_HEADER_SIG))
- return MZ_FALSE;
- MZ_ZIP_ARRAY_ELEMENT(&pZip->m_pState->m_central_dir_offsets, mz_uint32,
- i) =
- (mz_uint32)(p - (const mz_uint8 *)pZip->m_pState->m_central_dir.m_p);
- if (sort_central_dir)
- MZ_ZIP_ARRAY_ELEMENT(&pZip->m_pState->m_sorted_central_dir_offsets,
- mz_uint32, i) = i;
- comp_size = MZ_READ_LE32(p + MZ_ZIP_CDH_COMPRESSED_SIZE_OFS);
- decomp_size = MZ_READ_LE32(p + MZ_ZIP_CDH_DECOMPRESSED_SIZE_OFS);
- if (((!MZ_READ_LE32(p + MZ_ZIP_CDH_METHOD_OFS)) &&
- (decomp_size != comp_size)) ||
- (decomp_size && !comp_size) || (decomp_size == 0xFFFFFFFF) ||
- (comp_size == 0xFFFFFFFF))
- return MZ_FALSE;
- disk_index = MZ_READ_LE16(p + MZ_ZIP_CDH_DISK_START_OFS);
- if ((disk_index != num_this_disk) && (disk_index != 1)) return MZ_FALSE;
- if (((mz_uint64)MZ_READ_LE32(p + MZ_ZIP_CDH_LOCAL_HEADER_OFS) +
- MZ_ZIP_LOCAL_DIR_HEADER_SIZE + comp_size) > pZip->m_archive_size)
- return MZ_FALSE;
- if ((total_header_size = MZ_ZIP_CENTRAL_DIR_HEADER_SIZE +
- MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS) +
- MZ_READ_LE16(p + MZ_ZIP_CDH_EXTRA_LEN_OFS) +
- MZ_READ_LE16(p + MZ_ZIP_CDH_COMMENT_LEN_OFS)) >
- n)
- return MZ_FALSE;
- n -= total_header_size;
- p += total_header_size;
- }
- }
-
- if (sort_central_dir)
- mz_zip_reader_sort_central_dir_offsets_by_filename(pZip);
-
- return MZ_TRUE;
-}
-
-mz_bool mz_zip_reader_init(mz_zip_archive *pZip, mz_uint64 size,
- mz_uint32 flags) {
- if ((!pZip) || (!pZip->m_pRead)) return MZ_FALSE;
- if (!mz_zip_reader_init_internal(pZip, flags)) return MZ_FALSE;
- pZip->m_archive_size = size;
- if (!mz_zip_reader_read_central_dir(pZip, flags)) {
- mz_zip_reader_end(pZip);
- return MZ_FALSE;
- }
- return MZ_TRUE;
-}
-
-static size_t mz_zip_mem_read_func(void *pOpaque, mz_uint64 file_ofs,
- void *pBuf, size_t n) {
- mz_zip_archive *pZip = (mz_zip_archive *)pOpaque;
- size_t s = (file_ofs >= pZip->m_archive_size)
- ? 0
- : (size_t)MZ_MIN(pZip->m_archive_size - file_ofs, n);
- memcpy(pBuf, (const mz_uint8 *)pZip->m_pState->m_pMem + file_ofs, s);
- return s;
-}
-
-mz_bool mz_zip_reader_init_mem(mz_zip_archive *pZip, const void *pMem,
- size_t size, mz_uint32 flags) {
- if (!mz_zip_reader_init_internal(pZip, flags)) return MZ_FALSE;
- pZip->m_archive_size = size;
- pZip->m_pRead = mz_zip_mem_read_func;
- pZip->m_pIO_opaque = pZip;
-#ifdef __cplusplus
- pZip->m_pState->m_pMem = const_cast<void *>(pMem);
-#else
- pZip->m_pState->m_pMem = (void *)pMem;
-#endif
- pZip->m_pState->m_mem_size = size;
- if (!mz_zip_reader_read_central_dir(pZip, flags)) {
- mz_zip_reader_end(pZip);
- return MZ_FALSE;
- }
- return MZ_TRUE;
-}
-
-#ifndef MINIZ_NO_STDIO
-static size_t mz_zip_file_read_func(void *pOpaque, mz_uint64 file_ofs,
- void *pBuf, size_t n) {
- mz_zip_archive *pZip = (mz_zip_archive *)pOpaque;
- mz_int64 cur_ofs = MZ_FTELL64(pZip->m_pState->m_pFile);
- if (((mz_int64)file_ofs < 0) ||
- (((cur_ofs != (mz_int64)file_ofs)) &&
- (MZ_FSEEK64(pZip->m_pState->m_pFile, (mz_int64)file_ofs, SEEK_SET))))
- return 0;
- return MZ_FREAD(pBuf, 1, n, pZip->m_pState->m_pFile);
-}
-
-mz_bool mz_zip_reader_init_file(mz_zip_archive *pZip, const char *pFilename,
- mz_uint32 flags) {
- mz_uint64 file_size;
- MZ_FILE *pFile = MZ_FOPEN(pFilename, "rb");
- if (!pFile) return MZ_FALSE;
- if (MZ_FSEEK64(pFile, 0, SEEK_END)) {
- MZ_FCLOSE(pFile);
- return MZ_FALSE;
- }
- file_size = MZ_FTELL64(pFile);
- if (!mz_zip_reader_init_internal(pZip, flags)) {
- MZ_FCLOSE(pFile);
- return MZ_FALSE;
- }
- pZip->m_pRead = mz_zip_file_read_func;
- pZip->m_pIO_opaque = pZip;
- pZip->m_pState->m_pFile = pFile;
- pZip->m_archive_size = file_size;
- if (!mz_zip_reader_read_central_dir(pZip, flags)) {
- mz_zip_reader_end(pZip);
- return MZ_FALSE;
- }
- return MZ_TRUE;
-}
-#endif // #ifndef MINIZ_NO_STDIO
-
-mz_uint mz_zip_reader_get_num_files(mz_zip_archive *pZip) {
- return pZip ? pZip->m_total_files : 0;
-}
-
-static MZ_FORCEINLINE const mz_uint8 *mz_zip_reader_get_cdh(
- mz_zip_archive *pZip, mz_uint file_index) {
- if ((!pZip) || (!pZip->m_pState) || (file_index >= pZip->m_total_files) ||
- (pZip->m_zip_mode != MZ_ZIP_MODE_READING))
- return NULL;
- return &MZ_ZIP_ARRAY_ELEMENT(
- &pZip->m_pState->m_central_dir, mz_uint8,
- MZ_ZIP_ARRAY_ELEMENT(&pZip->m_pState->m_central_dir_offsets, mz_uint32,
- file_index));
-}
-
-mz_bool mz_zip_reader_is_file_encrypted(mz_zip_archive *pZip,
- mz_uint file_index) {
- mz_uint m_bit_flag;
- const mz_uint8 *p = mz_zip_reader_get_cdh(pZip, file_index);
- if (!p) return MZ_FALSE;
- m_bit_flag = MZ_READ_LE16(p + MZ_ZIP_CDH_BIT_FLAG_OFS);
- return (m_bit_flag & 1);
-}
-
-mz_bool mz_zip_reader_is_file_a_directory(mz_zip_archive *pZip,
- mz_uint file_index) {
- mz_uint filename_len, external_attr;
- const mz_uint8 *p = mz_zip_reader_get_cdh(pZip, file_index);
- if (!p) return MZ_FALSE;
-
- // First see if the filename ends with a '/' character.
- filename_len = MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS);
- if (filename_len) {
- if (*(p + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + filename_len - 1) == '/')
- return MZ_TRUE;
- }
-
- // Bugfix: This code was also checking if the internal attribute was non-zero,
- // which wasn't correct.
- // Most/all zip writers (hopefully) set DOS file/directory attributes in the
- // low 16-bits, so check for the DOS directory flag and ignore the source OS
- // ID in the created by field.
- // FIXME: Remove this check? Is it necessary - we already check the filename.
- external_attr = MZ_READ_LE32(p + MZ_ZIP_CDH_EXTERNAL_ATTR_OFS);
- if ((external_attr & 0x10) != 0) return MZ_TRUE;
-
- return MZ_FALSE;
-}
-
-mz_bool mz_zip_reader_file_stat(mz_zip_archive *pZip, mz_uint file_index,
- mz_zip_archive_file_stat *pStat) {
- mz_uint n;
- const mz_uint8 *p = mz_zip_reader_get_cdh(pZip, file_index);
- if ((!p) || (!pStat)) return MZ_FALSE;
-
- // Unpack the central directory record.
- pStat->m_file_index = file_index;
- pStat->m_central_dir_ofs = MZ_ZIP_ARRAY_ELEMENT(
- &pZip->m_pState->m_central_dir_offsets, mz_uint32, file_index);
- pStat->m_version_made_by = MZ_READ_LE16(p + MZ_ZIP_CDH_VERSION_MADE_BY_OFS);
- pStat->m_version_needed = MZ_READ_LE16(p + MZ_ZIP_CDH_VERSION_NEEDED_OFS);
- pStat->m_bit_flag = MZ_READ_LE16(p + MZ_ZIP_CDH_BIT_FLAG_OFS);
- pStat->m_method = MZ_READ_LE16(p + MZ_ZIP_CDH_METHOD_OFS);
-#ifndef MINIZ_NO_TIME
- pStat->m_time =
- mz_zip_dos_to_time_t(MZ_READ_LE16(p + MZ_ZIP_CDH_FILE_TIME_OFS),
- MZ_READ_LE16(p + MZ_ZIP_CDH_FILE_DATE_OFS));
-#endif
- pStat->m_crc32 = MZ_READ_LE32(p + MZ_ZIP_CDH_CRC32_OFS);
- pStat->m_comp_size = MZ_READ_LE32(p + MZ_ZIP_CDH_COMPRESSED_SIZE_OFS);
- pStat->m_uncomp_size = MZ_READ_LE32(p + MZ_ZIP_CDH_DECOMPRESSED_SIZE_OFS);
- pStat->m_internal_attr = MZ_READ_LE16(p + MZ_ZIP_CDH_INTERNAL_ATTR_OFS);
- pStat->m_external_attr = MZ_READ_LE32(p + MZ_ZIP_CDH_EXTERNAL_ATTR_OFS);
- pStat->m_local_header_ofs = MZ_READ_LE32(p + MZ_ZIP_CDH_LOCAL_HEADER_OFS);
-
- // Copy as much of the filename and comment as possible.
- n = MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS);
- n = MZ_MIN(n, MZ_ZIP_MAX_ARCHIVE_FILENAME_SIZE - 1);
- memcpy(pStat->m_filename, p + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE, n);
- pStat->m_filename[n] = '\0';
-
- n = MZ_READ_LE16(p + MZ_ZIP_CDH_COMMENT_LEN_OFS);
- n = MZ_MIN(n, MZ_ZIP_MAX_ARCHIVE_FILE_COMMENT_SIZE - 1);
- pStat->m_comment_size = n;
- memcpy(pStat->m_comment,
- p + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE +
- MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS) +
- MZ_READ_LE16(p + MZ_ZIP_CDH_EXTRA_LEN_OFS),
- n);
- pStat->m_comment[n] = '\0';
-
- return MZ_TRUE;
-}
-
-mz_uint mz_zip_reader_get_filename(mz_zip_archive *pZip, mz_uint file_index,
- char *pFilename, mz_uint filename_buf_size) {
- mz_uint n;
- const mz_uint8 *p = mz_zip_reader_get_cdh(pZip, file_index);
- if (!p) {
- if (filename_buf_size) pFilename[0] = '\0';
- return 0;
- }
- n = MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS);
- if (filename_buf_size) {
- n = MZ_MIN(n, filename_buf_size - 1);
- memcpy(pFilename, p + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE, n);
- pFilename[n] = '\0';
- }
- return n + 1;
-}
-
-static MZ_FORCEINLINE mz_bool mz_zip_reader_string_equal(const char *pA,
- const char *pB,
- mz_uint len,
- mz_uint flags) {
- mz_uint i;
- if (flags & MZ_ZIP_FLAG_CASE_SENSITIVE) return 0 == memcmp(pA, pB, len);
- for (i = 0; i < len; ++i)
- if (MZ_TOLOWER(pA[i]) != MZ_TOLOWER(pB[i])) return MZ_FALSE;
- return MZ_TRUE;
-}
-
-static MZ_FORCEINLINE int mz_zip_reader_filename_compare(
- const mz_zip_array *pCentral_dir_array,
- const mz_zip_array *pCentral_dir_offsets, mz_uint l_index, const char *pR,
- mz_uint r_len) {
- const mz_uint8 *pL = &MZ_ZIP_ARRAY_ELEMENT(
- pCentral_dir_array, mz_uint8,
- MZ_ZIP_ARRAY_ELEMENT(pCentral_dir_offsets, mz_uint32,
- l_index)),
- *pE;
- mz_uint l_len = MZ_READ_LE16(pL + MZ_ZIP_CDH_FILENAME_LEN_OFS);
- mz_uint8 l = 0, r = 0;
- pL += MZ_ZIP_CENTRAL_DIR_HEADER_SIZE;
- pE = pL + MZ_MIN(l_len, r_len);
- while (pL < pE) {
- if ((l = MZ_TOLOWER(*pL)) != (r = MZ_TOLOWER(*pR))) break;
- pL++;
- pR++;
- }
- return (pL == pE) ? (int)(l_len - r_len) : (l - r);
-}
-
-static int mz_zip_reader_locate_file_binary_search(mz_zip_archive *pZip,
- const char *pFilename) {
- mz_zip_internal_state *pState = pZip->m_pState;
- const mz_zip_array *pCentral_dir_offsets = &pState->m_central_dir_offsets;
- const mz_zip_array *pCentral_dir = &pState->m_central_dir;
- mz_uint32 *pIndices = &MZ_ZIP_ARRAY_ELEMENT(
- &pState->m_sorted_central_dir_offsets, mz_uint32, 0);
- const int size = pZip->m_total_files;
- const mz_uint filename_len = (mz_uint)strlen(pFilename);
- int l = 0, h = size - 1;
- while (l <= h) {
- int m = (l + h) >> 1, file_index = pIndices[m],
- comp =
- mz_zip_reader_filename_compare(pCentral_dir, pCentral_dir_offsets,
- file_index, pFilename, filename_len);
- if (!comp)
- return file_index;
- else if (comp < 0)
- l = m + 1;
- else
- h = m - 1;
- }
- return -1;
-}
-
-int mz_zip_reader_locate_file(mz_zip_archive *pZip, const char *pName,
- const char *pComment, mz_uint flags) {
- mz_uint file_index;
- size_t name_len, comment_len;
- if ((!pZip) || (!pZip->m_pState) || (!pName) ||
- (pZip->m_zip_mode != MZ_ZIP_MODE_READING))
- return -1;
- if (((flags & (MZ_ZIP_FLAG_IGNORE_PATH | MZ_ZIP_FLAG_CASE_SENSITIVE)) == 0) &&
- (!pComment) && (pZip->m_pState->m_sorted_central_dir_offsets.m_size))
- return mz_zip_reader_locate_file_binary_search(pZip, pName);
- name_len = strlen(pName);
- if (name_len > 0xFFFF) return -1;
- comment_len = pComment ? strlen(pComment) : 0;
- if (comment_len > 0xFFFF) return -1;
- for (file_index = 0; file_index < pZip->m_total_files; file_index++) {
- const mz_uint8 *pHeader = &MZ_ZIP_ARRAY_ELEMENT(
- &pZip->m_pState->m_central_dir, mz_uint8,
- MZ_ZIP_ARRAY_ELEMENT(&pZip->m_pState->m_central_dir_offsets, mz_uint32,
- file_index));
- mz_uint filename_len = MZ_READ_LE16(pHeader + MZ_ZIP_CDH_FILENAME_LEN_OFS);
- const char *pFilename =
- (const char *)pHeader + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE;
- if (filename_len < name_len) continue;
- if (comment_len) {
- mz_uint file_extra_len = MZ_READ_LE16(pHeader + MZ_ZIP_CDH_EXTRA_LEN_OFS),
- file_comment_len =
- MZ_READ_LE16(pHeader + MZ_ZIP_CDH_COMMENT_LEN_OFS);
- const char *pFile_comment = pFilename + filename_len + file_extra_len;
- if ((file_comment_len != comment_len) ||
- (!mz_zip_reader_string_equal(pComment, pFile_comment,
- file_comment_len, flags)))
- continue;
- }
- if ((flags & MZ_ZIP_FLAG_IGNORE_PATH) && (filename_len)) {
- int ofs = filename_len - 1;
- do {
- if ((pFilename[ofs] == '/') || (pFilename[ofs] == '\\') ||
- (pFilename[ofs] == ':'))
- break;
- } while (--ofs >= 0);
- ofs++;
- pFilename += ofs;
- filename_len -= ofs;
- }
- if ((filename_len == name_len) &&
- (mz_zip_reader_string_equal(pName, pFilename, filename_len, flags)))
- return file_index;
- }
- return -1;
-}
-
-mz_bool mz_zip_reader_extract_to_mem_no_alloc(mz_zip_archive *pZip,
- mz_uint file_index, void *pBuf,
- size_t buf_size, mz_uint flags,
- void *pUser_read_buf,
- size_t user_read_buf_size) {
- int status = TINFL_STATUS_DONE;
- mz_uint64 needed_size, cur_file_ofs, comp_remaining,
- out_buf_ofs = 0, read_buf_size, read_buf_ofs = 0, read_buf_avail;
- mz_zip_archive_file_stat file_stat;
- void *pRead_buf;
- mz_uint32
- local_header_u32[(MZ_ZIP_LOCAL_DIR_HEADER_SIZE + sizeof(mz_uint32) - 1) /
- sizeof(mz_uint32)];
- mz_uint8 *pLocal_header = (mz_uint8 *)local_header_u32;
- tinfl_decompressor inflator;
-
- if ((buf_size) && (!pBuf)) return MZ_FALSE;
-
- if (!mz_zip_reader_file_stat(pZip, file_index, &file_stat)) return MZ_FALSE;
-
- // Empty file, or a directory (but not always a directory - I've seen odd zips
- // with directories that have compressed data which inflates to 0 bytes)
- if (!file_stat.m_comp_size) return MZ_TRUE;
-
- // Entry is a subdirectory (I've seen old zips with dir entries which have
- // compressed deflate data which inflates to 0 bytes, but these entries claim
- // to uncompress to 512 bytes in the headers).
- // I'm torn how to handle this case - should it fail instead?
- if (mz_zip_reader_is_file_a_directory(pZip, file_index)) return MZ_TRUE;
-
- // Encryption and patch files are not supported.
- if (file_stat.m_bit_flag & (1 | 32)) return MZ_FALSE;
-
- // This function only supports stored and deflate.
- if ((!(flags & MZ_ZIP_FLAG_COMPRESSED_DATA)) && (file_stat.m_method != 0) &&
- (file_stat.m_method != MZ_DEFLATED))
- return MZ_FALSE;
-
- // Ensure supplied output buffer is large enough.
- needed_size = (flags & MZ_ZIP_FLAG_COMPRESSED_DATA) ? file_stat.m_comp_size
- : file_stat.m_uncomp_size;
- if (buf_size < needed_size) return MZ_FALSE;
-
- // Read and parse the local directory entry.
- cur_file_ofs = file_stat.m_local_header_ofs;
- if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pLocal_header,
- MZ_ZIP_LOCAL_DIR_HEADER_SIZE) !=
- MZ_ZIP_LOCAL_DIR_HEADER_SIZE)
- return MZ_FALSE;
- if (MZ_READ_LE32(pLocal_header) != MZ_ZIP_LOCAL_DIR_HEADER_SIG)
- return MZ_FALSE;
-
- cur_file_ofs += MZ_ZIP_LOCAL_DIR_HEADER_SIZE +
- MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_FILENAME_LEN_OFS) +
- MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_EXTRA_LEN_OFS);
- if ((cur_file_ofs + file_stat.m_comp_size) > pZip->m_archive_size)
- return MZ_FALSE;
-
- if ((flags & MZ_ZIP_FLAG_COMPRESSED_DATA) || (!file_stat.m_method)) {
- // The file is stored or the caller has requested the compressed data.
- if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pBuf,
- (size_t)needed_size) != needed_size)
- return MZ_FALSE;
- return ((flags & MZ_ZIP_FLAG_COMPRESSED_DATA) != 0) ||
- (mz_crc32(MZ_CRC32_INIT, (const mz_uint8 *)pBuf,
- (size_t)file_stat.m_uncomp_size) == file_stat.m_crc32);
- }
-
- // Decompress the file either directly from memory or from a file input
- // buffer.
- tinfl_init(&inflator);
-
- if (pZip->m_pState->m_pMem) {
- // Read directly from the archive in memory.
- pRead_buf = (mz_uint8 *)pZip->m_pState->m_pMem + cur_file_ofs;
- read_buf_size = read_buf_avail = file_stat.m_comp_size;
- comp_remaining = 0;
- } else if (pUser_read_buf) {
- // Use a user provided read buffer.
- if (!user_read_buf_size) return MZ_FALSE;
- pRead_buf = (mz_uint8 *)pUser_read_buf;
- read_buf_size = user_read_buf_size;
- read_buf_avail = 0;
- comp_remaining = file_stat.m_comp_size;
- } else {
- // Temporarily allocate a read buffer.
- read_buf_size =
- MZ_MIN(file_stat.m_comp_size, (mz_uint)MZ_ZIP_MAX_IO_BUF_SIZE);
-#ifdef _MSC_VER
- if (((0, sizeof(size_t) == sizeof(mz_uint32))) &&
- (read_buf_size > 0x7FFFFFFF))
-#else
- if (((sizeof(size_t) == sizeof(mz_uint32))) && (read_buf_size > 0x7FFFFFFF))
-#endif
- return MZ_FALSE;
- if (NULL == (pRead_buf = pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1,
- (size_t)read_buf_size)))
- return MZ_FALSE;
- read_buf_avail = 0;
- comp_remaining = file_stat.m_comp_size;
- }
-
- do {
- size_t in_buf_size,
- out_buf_size = (size_t)(file_stat.m_uncomp_size - out_buf_ofs);
- if ((!read_buf_avail) && (!pZip->m_pState->m_pMem)) {
- read_buf_avail = MZ_MIN(read_buf_size, comp_remaining);
- if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pRead_buf,
- (size_t)read_buf_avail) != read_buf_avail) {
- status = TINFL_STATUS_FAILED;
- break;
- }
- cur_file_ofs += read_buf_avail;
- comp_remaining -= read_buf_avail;
- read_buf_ofs = 0;
- }
- in_buf_size = (size_t)read_buf_avail;
- status = tinfl_decompress(
- &inflator, (mz_uint8 *)pRead_buf + read_buf_ofs, &in_buf_size,
- (mz_uint8 *)pBuf, (mz_uint8 *)pBuf + out_buf_ofs, &out_buf_size,
- TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF |
- (comp_remaining ? TINFL_FLAG_HAS_MORE_INPUT : 0));
- read_buf_avail -= in_buf_size;
- read_buf_ofs += in_buf_size;
- out_buf_ofs += out_buf_size;
- } while (status == TINFL_STATUS_NEEDS_MORE_INPUT);
-
- if (status == TINFL_STATUS_DONE) {
- // Make sure the entire file was decompressed, and check its CRC.
- if ((out_buf_ofs != file_stat.m_uncomp_size) ||
- (mz_crc32(MZ_CRC32_INIT, (const mz_uint8 *)pBuf,
- (size_t)file_stat.m_uncomp_size) != file_stat.m_crc32))
- status = TINFL_STATUS_FAILED;
- }
-
- if ((!pZip->m_pState->m_pMem) && (!pUser_read_buf))
- pZip->m_pFree(pZip->m_pAlloc_opaque, pRead_buf);
-
- return status == TINFL_STATUS_DONE;
-}
-
-mz_bool mz_zip_reader_extract_file_to_mem_no_alloc(
- mz_zip_archive *pZip, const char *pFilename, void *pBuf, size_t buf_size,
- mz_uint flags, void *pUser_read_buf, size_t user_read_buf_size) {
- int file_index = mz_zip_reader_locate_file(pZip, pFilename, NULL, flags);
- if (file_index < 0) return MZ_FALSE;
- return mz_zip_reader_extract_to_mem_no_alloc(pZip, file_index, pBuf, buf_size,
- flags, pUser_read_buf,
- user_read_buf_size);
-}
-
-mz_bool mz_zip_reader_extract_to_mem(mz_zip_archive *pZip, mz_uint file_index,
- void *pBuf, size_t buf_size,
- mz_uint flags) {
- return mz_zip_reader_extract_to_mem_no_alloc(pZip, file_index, pBuf, buf_size,
- flags, NULL, 0);
-}
-
-mz_bool mz_zip_reader_extract_file_to_mem(mz_zip_archive *pZip,
- const char *pFilename, void *pBuf,
- size_t buf_size, mz_uint flags) {
- return mz_zip_reader_extract_file_to_mem_no_alloc(pZip, pFilename, pBuf,
- buf_size, flags, NULL, 0);
-}
-
-void *mz_zip_reader_extract_to_heap(mz_zip_archive *pZip, mz_uint file_index,
- size_t *pSize, mz_uint flags) {
- mz_uint64 comp_size, uncomp_size, alloc_size;
- const mz_uint8 *p = mz_zip_reader_get_cdh(pZip, file_index);
- void *pBuf;
-
- if (pSize) *pSize = 0;
- if (!p) return NULL;
-
- comp_size = MZ_READ_LE32(p + MZ_ZIP_CDH_COMPRESSED_SIZE_OFS);
- uncomp_size = MZ_READ_LE32(p + MZ_ZIP_CDH_DECOMPRESSED_SIZE_OFS);
-
- alloc_size = (flags & MZ_ZIP_FLAG_COMPRESSED_DATA) ? comp_size : uncomp_size;
-#ifdef _MSC_VER
- if (((0, sizeof(size_t) == sizeof(mz_uint32))) && (alloc_size > 0x7FFFFFFF))
-#else
- if (((sizeof(size_t) == sizeof(mz_uint32))) && (alloc_size > 0x7FFFFFFF))
-#endif
- return NULL;
- if (NULL ==
- (pBuf = pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1, (size_t)alloc_size)))
- return NULL;
-
- if (!mz_zip_reader_extract_to_mem(pZip, file_index, pBuf, (size_t)alloc_size,
- flags)) {
- pZip->m_pFree(pZip->m_pAlloc_opaque, pBuf);
- return NULL;
- }
-
- if (pSize) *pSize = (size_t)alloc_size;
- return pBuf;
-}
-
-void *mz_zip_reader_extract_file_to_heap(mz_zip_archive *pZip,
- const char *pFilename, size_t *pSize,
- mz_uint flags) {
- int file_index = mz_zip_reader_locate_file(pZip, pFilename, NULL, flags);
- if (file_index < 0) {
- if (pSize) *pSize = 0;
- return MZ_FALSE;
- }
- return mz_zip_reader_extract_to_heap(pZip, file_index, pSize, flags);
-}
-
-mz_bool mz_zip_reader_extract_to_callback(mz_zip_archive *pZip,
- mz_uint file_index,
- mz_file_write_func pCallback,
- void *pOpaque, mz_uint flags) {
- int status = TINFL_STATUS_DONE;
- mz_uint file_crc32 = MZ_CRC32_INIT;
- mz_uint64 read_buf_size, read_buf_ofs = 0, read_buf_avail, comp_remaining,
- out_buf_ofs = 0, cur_file_ofs;
- mz_zip_archive_file_stat file_stat;
- void *pRead_buf = NULL;
- void *pWrite_buf = NULL;
- mz_uint32
- local_header_u32[(MZ_ZIP_LOCAL_DIR_HEADER_SIZE + sizeof(mz_uint32) - 1) /
- sizeof(mz_uint32)];
- mz_uint8 *pLocal_header = (mz_uint8 *)local_header_u32;
-
- if (!mz_zip_reader_file_stat(pZip, file_index, &file_stat)) return MZ_FALSE;
-
- // Empty file, or a directory (but not always a directory - I've seen odd zips
- // with directories that have compressed data which inflates to 0 bytes)
- if (!file_stat.m_comp_size) return MZ_TRUE;
-
- // Entry is a subdirectory (I've seen old zips with dir entries which have
- // compressed deflate data which inflates to 0 bytes, but these entries claim
- // to uncompress to 512 bytes in the headers).
- // I'm torn how to handle this case - should it fail instead?
- if (mz_zip_reader_is_file_a_directory(pZip, file_index)) return MZ_TRUE;
-
- // Encryption and patch files are not supported.
- if (file_stat.m_bit_flag & (1 | 32)) return MZ_FALSE;
-
- // This function only supports stored and deflate.
- if ((!(flags & MZ_ZIP_FLAG_COMPRESSED_DATA)) && (file_stat.m_method != 0) &&
- (file_stat.m_method != MZ_DEFLATED))
- return MZ_FALSE;
-
- // Read and parse the local directory entry.
- cur_file_ofs = file_stat.m_local_header_ofs;
- if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pLocal_header,
- MZ_ZIP_LOCAL_DIR_HEADER_SIZE) !=
- MZ_ZIP_LOCAL_DIR_HEADER_SIZE)
- return MZ_FALSE;
- if (MZ_READ_LE32(pLocal_header) != MZ_ZIP_LOCAL_DIR_HEADER_SIG)
- return MZ_FALSE;
-
- cur_file_ofs += MZ_ZIP_LOCAL_DIR_HEADER_SIZE +
- MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_FILENAME_LEN_OFS) +
- MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_EXTRA_LEN_OFS);
- if ((cur_file_ofs + file_stat.m_comp_size) > pZip->m_archive_size)
- return MZ_FALSE;
-
- // Decompress the file either directly from memory or from a file input
- // buffer.
- if (pZip->m_pState->m_pMem) {
- pRead_buf = (mz_uint8 *)pZip->m_pState->m_pMem + cur_file_ofs;
- read_buf_size = read_buf_avail = file_stat.m_comp_size;
- comp_remaining = 0;
- } else {
- read_buf_size =
- MZ_MIN(file_stat.m_comp_size, (mz_uint)MZ_ZIP_MAX_IO_BUF_SIZE);
- if (NULL == (pRead_buf = pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1,
- (size_t)read_buf_size)))
- return MZ_FALSE;
- read_buf_avail = 0;
- comp_remaining = file_stat.m_comp_size;
- }
-
- if ((flags & MZ_ZIP_FLAG_COMPRESSED_DATA) || (!file_stat.m_method)) {
- // The file is stored or the caller has requested the compressed data.
- if (pZip->m_pState->m_pMem) {
-#ifdef _MSC_VER
- if (((0, sizeof(size_t) == sizeof(mz_uint32))) &&
- (file_stat.m_comp_size > 0xFFFFFFFF))
-#else
- if (((sizeof(size_t) == sizeof(mz_uint32))) &&
- (file_stat.m_comp_size > 0xFFFFFFFF))
-#endif
- return MZ_FALSE;
- if (pCallback(pOpaque, out_buf_ofs, pRead_buf,
- (size_t)file_stat.m_comp_size) != file_stat.m_comp_size)
- status = TINFL_STATUS_FAILED;
- else if (!(flags & MZ_ZIP_FLAG_COMPRESSED_DATA))
- file_crc32 =
- (mz_uint32)mz_crc32(file_crc32, (const mz_uint8 *)pRead_buf,
- (size_t)file_stat.m_comp_size);
- cur_file_ofs += file_stat.m_comp_size;
- out_buf_ofs += file_stat.m_comp_size;
- comp_remaining = 0;
- } else {
- while (comp_remaining) {
- read_buf_avail = MZ_MIN(read_buf_size, comp_remaining);
- if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pRead_buf,
- (size_t)read_buf_avail) != read_buf_avail) {
- status = TINFL_STATUS_FAILED;
- break;
- }
-
- if (!(flags & MZ_ZIP_FLAG_COMPRESSED_DATA))
- file_crc32 = (mz_uint32)mz_crc32(
- file_crc32, (const mz_uint8 *)pRead_buf, (size_t)read_buf_avail);
-
- if (pCallback(pOpaque, out_buf_ofs, pRead_buf,
- (size_t)read_buf_avail) != read_buf_avail) {
- status = TINFL_STATUS_FAILED;
- break;
- }
- cur_file_ofs += read_buf_avail;
- out_buf_ofs += read_buf_avail;
- comp_remaining -= read_buf_avail;
- }
- }
- } else {
- tinfl_decompressor inflator;
- tinfl_init(&inflator);
-
- if (NULL == (pWrite_buf = pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1,
- TINFL_LZ_DICT_SIZE)))
- status = TINFL_STATUS_FAILED;
- else {
- do {
- mz_uint8 *pWrite_buf_cur =
- (mz_uint8 *)pWrite_buf + (out_buf_ofs & (TINFL_LZ_DICT_SIZE - 1));
- size_t in_buf_size,
- out_buf_size =
- TINFL_LZ_DICT_SIZE - (out_buf_ofs & (TINFL_LZ_DICT_SIZE - 1));
- if ((!read_buf_avail) && (!pZip->m_pState->m_pMem)) {
- read_buf_avail = MZ_MIN(read_buf_size, comp_remaining);
- if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pRead_buf,
- (size_t)read_buf_avail) != read_buf_avail) {
- status = TINFL_STATUS_FAILED;
- break;
- }
- cur_file_ofs += read_buf_avail;
- comp_remaining -= read_buf_avail;
- read_buf_ofs = 0;
- }
-
- in_buf_size = (size_t)read_buf_avail;
- status = tinfl_decompress(
- &inflator, (const mz_uint8 *)pRead_buf + read_buf_ofs, &in_buf_size,
- (mz_uint8 *)pWrite_buf, pWrite_buf_cur, &out_buf_size,
- comp_remaining ? TINFL_FLAG_HAS_MORE_INPUT : 0);
- read_buf_avail -= in_buf_size;
- read_buf_ofs += in_buf_size;
-
- if (out_buf_size) {
- if (pCallback(pOpaque, out_buf_ofs, pWrite_buf_cur, out_buf_size) !=
- out_buf_size) {
- status = TINFL_STATUS_FAILED;
- break;
- }
- file_crc32 =
- (mz_uint32)mz_crc32(file_crc32, pWrite_buf_cur, out_buf_size);
- if ((out_buf_ofs += out_buf_size) > file_stat.m_uncomp_size) {
- status = TINFL_STATUS_FAILED;
- break;
- }
- }
- } while ((status == TINFL_STATUS_NEEDS_MORE_INPUT) ||
- (status == TINFL_STATUS_HAS_MORE_OUTPUT));
- }
- }
-
- if ((status == TINFL_STATUS_DONE) &&
- (!(flags & MZ_ZIP_FLAG_COMPRESSED_DATA))) {
- // Make sure the entire file was decompressed, and check its CRC.
- if ((out_buf_ofs != file_stat.m_uncomp_size) ||
- (file_crc32 != file_stat.m_crc32))
- status = TINFL_STATUS_FAILED;
- }
-
- if (!pZip->m_pState->m_pMem) pZip->m_pFree(pZip->m_pAlloc_opaque, pRead_buf);
- if (pWrite_buf) pZip->m_pFree(pZip->m_pAlloc_opaque, pWrite_buf);
-
- return status == TINFL_STATUS_DONE;
-}
-
-mz_bool mz_zip_reader_extract_file_to_callback(mz_zip_archive *pZip,
- const char *pFilename,
- mz_file_write_func pCallback,
- void *pOpaque, mz_uint flags) {
- int file_index = mz_zip_reader_locate_file(pZip, pFilename, NULL, flags);
- if (file_index < 0) return MZ_FALSE;
- return mz_zip_reader_extract_to_callback(pZip, file_index, pCallback, pOpaque,
- flags);
-}
-
-#ifndef MINIZ_NO_STDIO
-static size_t mz_zip_file_write_callback(void *pOpaque, mz_uint64 ofs,
- const void *pBuf, size_t n) {
- (void)ofs;
- return MZ_FWRITE(pBuf, 1, n, (MZ_FILE *)pOpaque);
-}
-
-mz_bool mz_zip_reader_extract_to_file(mz_zip_archive *pZip, mz_uint file_index,
- const char *pDst_filename,
- mz_uint flags) {
- mz_bool status;
- mz_zip_archive_file_stat file_stat;
- MZ_FILE *pFile;
- if (!mz_zip_reader_file_stat(pZip, file_index, &file_stat)) return MZ_FALSE;
- pFile = MZ_FOPEN(pDst_filename, "wb");
- if (!pFile) return MZ_FALSE;
- status = mz_zip_reader_extract_to_callback(
- pZip, file_index, mz_zip_file_write_callback, pFile, flags);
- if (MZ_FCLOSE(pFile) == EOF) return MZ_FALSE;
-#ifndef MINIZ_NO_TIME
- if (status)
- mz_zip_set_file_times(pDst_filename, file_stat.m_time, file_stat.m_time);
-#endif
- return status;
-}
-#endif // #ifndef MINIZ_NO_STDIO
-
-mz_bool mz_zip_reader_end(mz_zip_archive *pZip) {
- if ((!pZip) || (!pZip->m_pState) || (!pZip->m_pAlloc) || (!pZip->m_pFree) ||
- (pZip->m_zip_mode != MZ_ZIP_MODE_READING))
- return MZ_FALSE;
-
- if (pZip->m_pState) {
- mz_zip_internal_state *pState = pZip->m_pState;
- pZip->m_pState = NULL;
- mz_zip_array_clear(pZip, &pState->m_central_dir);
- mz_zip_array_clear(pZip, &pState->m_central_dir_offsets);
- mz_zip_array_clear(pZip, &pState->m_sorted_central_dir_offsets);
-
-#ifndef MINIZ_NO_STDIO
- if (pState->m_pFile) {
- MZ_FCLOSE(pState->m_pFile);
- pState->m_pFile = NULL;
- }
-#endif // #ifndef MINIZ_NO_STDIO
-
- pZip->m_pFree(pZip->m_pAlloc_opaque, pState);
- }
- pZip->m_zip_mode = MZ_ZIP_MODE_INVALID;
-
- return MZ_TRUE;
-}
-
-#ifndef MINIZ_NO_STDIO
-mz_bool mz_zip_reader_extract_file_to_file(mz_zip_archive *pZip,
- const char *pArchive_filename,
- const char *pDst_filename,
- mz_uint flags) {
- int file_index =
- mz_zip_reader_locate_file(pZip, pArchive_filename, NULL, flags);
- if (file_index < 0) return MZ_FALSE;
- return mz_zip_reader_extract_to_file(pZip, file_index, pDst_filename, flags);
-}
-#endif
-
-// ------------------- .ZIP archive writing
-
-#ifndef MINIZ_NO_ARCHIVE_WRITING_APIS
-
-static void mz_write_le16(mz_uint8 *p, mz_uint16 v) {
- p[0] = (mz_uint8)v;
- p[1] = (mz_uint8)(v >> 8);
-}
-static void mz_write_le32(mz_uint8 *p, mz_uint32 v) {
- p[0] = (mz_uint8)v;
- p[1] = (mz_uint8)(v >> 8);
- p[2] = (mz_uint8)(v >> 16);
- p[3] = (mz_uint8)(v >> 24);
-}
-#define MZ_WRITE_LE16(p, v) mz_write_le16((mz_uint8 *)(p), (mz_uint16)(v))
-#define MZ_WRITE_LE32(p, v) mz_write_le32((mz_uint8 *)(p), (mz_uint32)(v))
-
-mz_bool mz_zip_writer_init(mz_zip_archive *pZip, mz_uint64 existing_size) {
- if ((!pZip) || (pZip->m_pState) || (!pZip->m_pWrite) ||
- (pZip->m_zip_mode != MZ_ZIP_MODE_INVALID))
- return MZ_FALSE;
-
- if (pZip->m_file_offset_alignment) {
- // Ensure user specified file offset alignment is a power of 2.
- if (pZip->m_file_offset_alignment & (pZip->m_file_offset_alignment - 1))
- return MZ_FALSE;
- }
-
- if (!pZip->m_pAlloc) pZip->m_pAlloc = def_alloc_func;
- if (!pZip->m_pFree) pZip->m_pFree = def_free_func;
- if (!pZip->m_pRealloc) pZip->m_pRealloc = def_realloc_func;
-
- pZip->m_zip_mode = MZ_ZIP_MODE_WRITING;
- pZip->m_archive_size = existing_size;
- pZip->m_central_directory_file_ofs = 0;
- pZip->m_total_files = 0;
-
- if (NULL == (pZip->m_pState = (mz_zip_internal_state *)pZip->m_pAlloc(
- pZip->m_pAlloc_opaque, 1, sizeof(mz_zip_internal_state))))
- return MZ_FALSE;
- memset(pZip->m_pState, 0, sizeof(mz_zip_internal_state));
- MZ_ZIP_ARRAY_SET_ELEMENT_SIZE(&pZip->m_pState->m_central_dir,
- sizeof(mz_uint8));
- MZ_ZIP_ARRAY_SET_ELEMENT_SIZE(&pZip->m_pState->m_central_dir_offsets,
- sizeof(mz_uint32));
- MZ_ZIP_ARRAY_SET_ELEMENT_SIZE(&pZip->m_pState->m_sorted_central_dir_offsets,
- sizeof(mz_uint32));
- return MZ_TRUE;
-}
-
-static size_t mz_zip_heap_write_func(void *pOpaque, mz_uint64 file_ofs,
- const void *pBuf, size_t n) {
- mz_zip_archive *pZip = (mz_zip_archive *)pOpaque;
- mz_zip_internal_state *pState = pZip->m_pState;
- mz_uint64 new_size = MZ_MAX(file_ofs + n, pState->m_mem_size);
-#ifdef _MSC_VER
- if ((!n) ||
- ((0, sizeof(size_t) == sizeof(mz_uint32)) && (new_size > 0x7FFFFFFF)))
-#else
- if ((!n) ||
- ((sizeof(size_t) == sizeof(mz_uint32)) && (new_size > 0x7FFFFFFF)))
-#endif
- return 0;
- if (new_size > pState->m_mem_capacity) {
- void *pNew_block;
- size_t new_capacity = MZ_MAX(64, pState->m_mem_capacity);
- while (new_capacity < new_size) new_capacity *= 2;
- if (NULL == (pNew_block = pZip->m_pRealloc(
- pZip->m_pAlloc_opaque, pState->m_pMem, 1, new_capacity)))
- return 0;
- pState->m_pMem = pNew_block;
- pState->m_mem_capacity = new_capacity;
- }
- memcpy((mz_uint8 *)pState->m_pMem + file_ofs, pBuf, n);
- pState->m_mem_size = (size_t)new_size;
- return n;
-}
-
-mz_bool mz_zip_writer_init_heap(mz_zip_archive *pZip,
- size_t size_to_reserve_at_beginning,
- size_t initial_allocation_size) {
- pZip->m_pWrite = mz_zip_heap_write_func;
- pZip->m_pIO_opaque = pZip;
- if (!mz_zip_writer_init(pZip, size_to_reserve_at_beginning)) return MZ_FALSE;
- if (0 != (initial_allocation_size = MZ_MAX(initial_allocation_size,
- size_to_reserve_at_beginning))) {
- if (NULL == (pZip->m_pState->m_pMem = pZip->m_pAlloc(
- pZip->m_pAlloc_opaque, 1, initial_allocation_size))) {
- mz_zip_writer_end(pZip);
- return MZ_FALSE;
- }
- pZip->m_pState->m_mem_capacity = initial_allocation_size;
- }
- return MZ_TRUE;
-}
-
-#ifndef MINIZ_NO_STDIO
-static size_t mz_zip_file_write_func(void *pOpaque, mz_uint64 file_ofs,
- const void *pBuf, size_t n) {
- mz_zip_archive *pZip = (mz_zip_archive *)pOpaque;
- mz_int64 cur_ofs = MZ_FTELL64(pZip->m_pState->m_pFile);
- if (((mz_int64)file_ofs < 0) ||
- (((cur_ofs != (mz_int64)file_ofs)) &&
- (MZ_FSEEK64(pZip->m_pState->m_pFile, (mz_int64)file_ofs, SEEK_SET))))
- return 0;
- return MZ_FWRITE(pBuf, 1, n, pZip->m_pState->m_pFile);
-}
-
-mz_bool mz_zip_writer_init_file(mz_zip_archive *pZip, const char *pFilename,
- mz_uint64 size_to_reserve_at_beginning) {
- MZ_FILE *pFile;
- pZip->m_pWrite = mz_zip_file_write_func;
- pZip->m_pIO_opaque = pZip;
- if (!mz_zip_writer_init(pZip, size_to_reserve_at_beginning)) return MZ_FALSE;
- if (NULL == (pFile = MZ_FOPEN(pFilename, "wb"))) {
- mz_zip_writer_end(pZip);
- return MZ_FALSE;
- }
- pZip->m_pState->m_pFile = pFile;
- if (size_to_reserve_at_beginning) {
- mz_uint64 cur_ofs = 0;
- char buf[4096];
- MZ_CLEAR_OBJ(buf);
- do {
- size_t n = (size_t)MZ_MIN(sizeof(buf), size_to_reserve_at_beginning);
- if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_ofs, buf, n) != n) {
- mz_zip_writer_end(pZip);
- return MZ_FALSE;
- }
- cur_ofs += n;
- size_to_reserve_at_beginning -= n;
- } while (size_to_reserve_at_beginning);
- }
- return MZ_TRUE;
-}
-#endif // #ifndef MINIZ_NO_STDIO
-
-mz_bool mz_zip_writer_init_from_reader(mz_zip_archive *pZip,
- const char *pFilename) {
- mz_zip_internal_state *pState;
- if ((!pZip) || (!pZip->m_pState) || (pZip->m_zip_mode != MZ_ZIP_MODE_READING))
- return MZ_FALSE;
- // No sense in trying to write to an archive that's already at the support max
- // size
- if ((pZip->m_total_files == 0xFFFF) ||
- ((pZip->m_archive_size + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE +
- MZ_ZIP_LOCAL_DIR_HEADER_SIZE) > 0xFFFFFFFF))
- return MZ_FALSE;
-
- pState = pZip->m_pState;
-
- if (pState->m_pFile) {
-#ifdef MINIZ_NO_STDIO
- pFilename;
- return MZ_FALSE;
-#else
- // Archive is being read from stdio - try to reopen as writable.
- if (pZip->m_pIO_opaque != pZip) return MZ_FALSE;
- if (!pFilename) return MZ_FALSE;
- pZip->m_pWrite = mz_zip_file_write_func;
- if (NULL ==
- (pState->m_pFile = MZ_FREOPEN(pFilename, "r+b", pState->m_pFile))) {
- // The mz_zip_archive is now in a bogus state because pState->m_pFile is
- // NULL, so just close it.
- mz_zip_reader_end(pZip);
- return MZ_FALSE;
- }
-#endif // #ifdef MINIZ_NO_STDIO
- } else if (pState->m_pMem) {
- // Archive lives in a memory block. Assume it's from the heap that we can
- // resize using the realloc callback.
- if (pZip->m_pIO_opaque != pZip) return MZ_FALSE;
- pState->m_mem_capacity = pState->m_mem_size;
- pZip->m_pWrite = mz_zip_heap_write_func;
- }
- // Archive is being read via a user provided read function - make sure the
- // user has specified a write function too.
- else if (!pZip->m_pWrite)
- return MZ_FALSE;
-
- // Start writing new files at the archive's current central directory
- // location.
- pZip->m_archive_size = pZip->m_central_directory_file_ofs;
- pZip->m_zip_mode = MZ_ZIP_MODE_WRITING;
- pZip->m_central_directory_file_ofs = 0;
-
- return MZ_TRUE;
-}
-
-mz_bool mz_zip_writer_add_mem(mz_zip_archive *pZip, const char *pArchive_name,
- const void *pBuf, size_t buf_size,
- mz_uint level_and_flags) {
- return mz_zip_writer_add_mem_ex(pZip, pArchive_name, pBuf, buf_size, NULL, 0,
- level_and_flags, 0, 0);
-}
-
-typedef struct {
- mz_zip_archive *m_pZip;
- mz_uint64 m_cur_archive_file_ofs;
- mz_uint64 m_comp_size;
-} mz_zip_writer_add_state;
-
-static mz_bool mz_zip_writer_add_put_buf_callback(const void *pBuf, int len,
- void *pUser) {
- mz_zip_writer_add_state *pState = (mz_zip_writer_add_state *)pUser;
- if ((int)pState->m_pZip->m_pWrite(pState->m_pZip->m_pIO_opaque,
- pState->m_cur_archive_file_ofs, pBuf,
- len) != len)
- return MZ_FALSE;
- pState->m_cur_archive_file_ofs += len;
- pState->m_comp_size += len;
- return MZ_TRUE;
-}
-
-static mz_bool mz_zip_writer_create_local_dir_header(
- mz_zip_archive *pZip, mz_uint8 *pDst, mz_uint16 filename_size,
- mz_uint16 extra_size, mz_uint64 uncomp_size, mz_uint64 comp_size,
- mz_uint32 uncomp_crc32, mz_uint16 method, mz_uint16 bit_flags,
- mz_uint16 dos_time, mz_uint16 dos_date) {
- (void)pZip;
- memset(pDst, 0, MZ_ZIP_LOCAL_DIR_HEADER_SIZE);
- MZ_WRITE_LE32(pDst + MZ_ZIP_LDH_SIG_OFS, MZ_ZIP_LOCAL_DIR_HEADER_SIG);
- MZ_WRITE_LE16(pDst + MZ_ZIP_LDH_VERSION_NEEDED_OFS, method ? 20 : 0);
- MZ_WRITE_LE16(pDst + MZ_ZIP_LDH_BIT_FLAG_OFS, bit_flags);
- MZ_WRITE_LE16(pDst + MZ_ZIP_LDH_METHOD_OFS, method);
- MZ_WRITE_LE16(pDst + MZ_ZIP_LDH_FILE_TIME_OFS, dos_time);
- MZ_WRITE_LE16(pDst + MZ_ZIP_LDH_FILE_DATE_OFS, dos_date);
- MZ_WRITE_LE32(pDst + MZ_ZIP_LDH_CRC32_OFS, uncomp_crc32);
- MZ_WRITE_LE32(pDst + MZ_ZIP_LDH_COMPRESSED_SIZE_OFS, comp_size);
- MZ_WRITE_LE32(pDst + MZ_ZIP_LDH_DECOMPRESSED_SIZE_OFS, uncomp_size);
- MZ_WRITE_LE16(pDst + MZ_ZIP_LDH_FILENAME_LEN_OFS, filename_size);
- MZ_WRITE_LE16(pDst + MZ_ZIP_LDH_EXTRA_LEN_OFS, extra_size);
- return MZ_TRUE;
-}
-
-static mz_bool mz_zip_writer_create_central_dir_header(
- mz_zip_archive *pZip, mz_uint8 *pDst, mz_uint16 filename_size,
- mz_uint16 extra_size, mz_uint16 comment_size, mz_uint64 uncomp_size,
- mz_uint64 comp_size, mz_uint32 uncomp_crc32, mz_uint16 method,
- mz_uint16 bit_flags, mz_uint16 dos_time, mz_uint16 dos_date,
- mz_uint64 local_header_ofs, mz_uint32 ext_attributes) {
- (void)pZip;
- memset(pDst, 0, MZ_ZIP_CENTRAL_DIR_HEADER_SIZE);
- MZ_WRITE_LE32(pDst + MZ_ZIP_CDH_SIG_OFS, MZ_ZIP_CENTRAL_DIR_HEADER_SIG);
- MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_VERSION_NEEDED_OFS, method ? 20 : 0);
- MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_BIT_FLAG_OFS, bit_flags);
- MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_METHOD_OFS, method);
- MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_FILE_TIME_OFS, dos_time);
- MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_FILE_DATE_OFS, dos_date);
- MZ_WRITE_LE32(pDst + MZ_ZIP_CDH_CRC32_OFS, uncomp_crc32);
- MZ_WRITE_LE32(pDst + MZ_ZIP_CDH_COMPRESSED_SIZE_OFS, comp_size);
- MZ_WRITE_LE32(pDst + MZ_ZIP_CDH_DECOMPRESSED_SIZE_OFS, uncomp_size);
- MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_FILENAME_LEN_OFS, filename_size);
- MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_EXTRA_LEN_OFS, extra_size);
- MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_COMMENT_LEN_OFS, comment_size);
- MZ_WRITE_LE32(pDst + MZ_ZIP_CDH_EXTERNAL_ATTR_OFS, ext_attributes);
- MZ_WRITE_LE32(pDst + MZ_ZIP_CDH_LOCAL_HEADER_OFS, local_header_ofs);
- return MZ_TRUE;
-}
-
-static mz_bool mz_zip_writer_add_to_central_dir(
- mz_zip_archive *pZip, const char *pFilename, mz_uint16 filename_size,
- const void *pExtra, mz_uint16 extra_size, const void *pComment,
- mz_uint16 comment_size, mz_uint64 uncomp_size, mz_uint64 comp_size,
- mz_uint32 uncomp_crc32, mz_uint16 method, mz_uint16 bit_flags,
- mz_uint16 dos_time, mz_uint16 dos_date, mz_uint64 local_header_ofs,
- mz_uint32 ext_attributes) {
- mz_zip_internal_state *pState = pZip->m_pState;
- mz_uint32 central_dir_ofs = (mz_uint32)pState->m_central_dir.m_size;
- size_t orig_central_dir_size = pState->m_central_dir.m_size;
- mz_uint8 central_dir_header[MZ_ZIP_CENTRAL_DIR_HEADER_SIZE];
-
- // No zip64 support yet
- if ((local_header_ofs > 0xFFFFFFFF) ||
- (((mz_uint64)pState->m_central_dir.m_size +
- MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + filename_size + extra_size +
- comment_size) > 0xFFFFFFFF))
- return MZ_FALSE;
-
- if (!mz_zip_writer_create_central_dir_header(
- pZip, central_dir_header, filename_size, extra_size, comment_size,
- uncomp_size, comp_size, uncomp_crc32, method, bit_flags, dos_time,
- dos_date, local_header_ofs, ext_attributes))
- return MZ_FALSE;
-
- if ((!mz_zip_array_push_back(pZip, &pState->m_central_dir, central_dir_header,
- MZ_ZIP_CENTRAL_DIR_HEADER_SIZE)) ||
- (!mz_zip_array_push_back(pZip, &pState->m_central_dir, pFilename,
- filename_size)) ||
- (!mz_zip_array_push_back(pZip, &pState->m_central_dir, pExtra,
- extra_size)) ||
- (!mz_zip_array_push_back(pZip, &pState->m_central_dir, pComment,
- comment_size)) ||
- (!mz_zip_array_push_back(pZip, &pState->m_central_dir_offsets,
- &central_dir_ofs, 1))) {
- // Try to push the central directory array back into its original state.
- mz_zip_array_resize(pZip, &pState->m_central_dir, orig_central_dir_size,
- MZ_FALSE);
- return MZ_FALSE;
- }
-
- return MZ_TRUE;
-}
-
-static mz_bool mz_zip_writer_validate_archive_name(const char *pArchive_name) {
- // Basic ZIP archive filename validity checks: Valid filenames cannot start
- // with a forward slash, cannot contain a drive letter, and cannot use
- // DOS-style backward slashes.
- if (*pArchive_name == '/') return MZ_FALSE;
- while (*pArchive_name) {
- if ((*pArchive_name == '\\') || (*pArchive_name == ':')) return MZ_FALSE;
- pArchive_name++;
- }
- return MZ_TRUE;
-}
-
-static mz_uint mz_zip_writer_compute_padding_needed_for_file_alignment(
- mz_zip_archive *pZip) {
- mz_uint32 n;
- if (!pZip->m_file_offset_alignment) return 0;
- n = (mz_uint32)(pZip->m_archive_size & (pZip->m_file_offset_alignment - 1));
- return (pZip->m_file_offset_alignment - n) &
- (pZip->m_file_offset_alignment - 1);
-}
-
-static mz_bool mz_zip_writer_write_zeros(mz_zip_archive *pZip,
- mz_uint64 cur_file_ofs, mz_uint32 n) {
- char buf[4096];
- memset(buf, 0, MZ_MIN(sizeof(buf), n));
- while (n) {
- mz_uint32 s = MZ_MIN(sizeof(buf), n);
- if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_file_ofs, buf, s) != s)
- return MZ_FALSE;
- cur_file_ofs += s;
- n -= s;
- }
- return MZ_TRUE;
-}
-
-mz_bool mz_zip_writer_add_mem_ex(mz_zip_archive *pZip,
- const char *pArchive_name, const void *pBuf,
- size_t buf_size, const void *pComment,
- mz_uint16 comment_size,
- mz_uint level_and_flags, mz_uint64 uncomp_size,
- mz_uint32 uncomp_crc32) {
- mz_uint16 method = 0, dos_time = 0, dos_date = 0;
- mz_uint level, ext_attributes = 0, num_alignment_padding_bytes;
- mz_uint64 local_dir_header_ofs = pZip->m_archive_size,
- cur_archive_file_ofs = pZip->m_archive_size, comp_size = 0;
- size_t archive_name_size;
- mz_uint8 local_dir_header[MZ_ZIP_LOCAL_DIR_HEADER_SIZE];
- tdefl_compressor *pComp = NULL;
- mz_bool store_data_uncompressed;
- mz_zip_internal_state *pState;
-
- if ((int)level_and_flags < 0) level_and_flags = MZ_DEFAULT_LEVEL;
- level = level_and_flags & 0xF;
- store_data_uncompressed =
- ((!level) || (level_and_flags & MZ_ZIP_FLAG_COMPRESSED_DATA));
-
- if ((!pZip) || (!pZip->m_pState) ||
- (pZip->m_zip_mode != MZ_ZIP_MODE_WRITING) || ((buf_size) && (!pBuf)) ||
- (!pArchive_name) || ((comment_size) && (!pComment)) ||
- (pZip->m_total_files == 0xFFFF) || (level > MZ_UBER_COMPRESSION))
- return MZ_FALSE;
-
- pState = pZip->m_pState;
-
- if ((!(level_and_flags & MZ_ZIP_FLAG_COMPRESSED_DATA)) && (uncomp_size))
- return MZ_FALSE;
- // No zip64 support yet
- if ((buf_size > 0xFFFFFFFF) || (uncomp_size > 0xFFFFFFFF)) return MZ_FALSE;
- if (!mz_zip_writer_validate_archive_name(pArchive_name)) return MZ_FALSE;
-
-#ifndef MINIZ_NO_TIME
- {
- time_t cur_time;
- time(&cur_time);
- mz_zip_time_to_dos_time(cur_time, &dos_time, &dos_date);
- }
-#endif // #ifndef MINIZ_NO_TIME
-
- archive_name_size = strlen(pArchive_name);
- if (archive_name_size > 0xFFFF) return MZ_FALSE;
-
- num_alignment_padding_bytes =
- mz_zip_writer_compute_padding_needed_for_file_alignment(pZip);
-
- // no zip64 support yet
- if ((pZip->m_total_files == 0xFFFF) ||
- ((pZip->m_archive_size + num_alignment_padding_bytes +
- MZ_ZIP_LOCAL_DIR_HEADER_SIZE + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE +
- comment_size + archive_name_size) > 0xFFFFFFFF))
- return MZ_FALSE;
-
- if ((archive_name_size) && (pArchive_name[archive_name_size - 1] == '/')) {
- // Set DOS Subdirectory attribute bit.
- ext_attributes |= 0x10;
- // Subdirectories cannot contain data.
- if ((buf_size) || (uncomp_size)) return MZ_FALSE;
- }
-
- // Try to do any allocations before writing to the archive, so if an
- // allocation fails the file remains unmodified. (A good idea if we're doing
- // an in-place modification.)
- if ((!mz_zip_array_ensure_room(
- pZip, &pState->m_central_dir,
- MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + archive_name_size + comment_size)) ||
- (!mz_zip_array_ensure_room(pZip, &pState->m_central_dir_offsets, 1)))
- return MZ_FALSE;
-
- if ((!store_data_uncompressed) && (buf_size)) {
- if (NULL == (pComp = (tdefl_compressor *)pZip->m_pAlloc(
- pZip->m_pAlloc_opaque, 1, sizeof(tdefl_compressor))))
- return MZ_FALSE;
- }
-
- if (!mz_zip_writer_write_zeros(
- pZip, cur_archive_file_ofs,
- num_alignment_padding_bytes + sizeof(local_dir_header))) {
- pZip->m_pFree(pZip->m_pAlloc_opaque, pComp);
- return MZ_FALSE;
- }
- local_dir_header_ofs += num_alignment_padding_bytes;
- if (pZip->m_file_offset_alignment) {
- MZ_ASSERT((local_dir_header_ofs & (pZip->m_file_offset_alignment - 1)) ==
- 0);
- }
- cur_archive_file_ofs +=
- num_alignment_padding_bytes + sizeof(local_dir_header);
-
- MZ_CLEAR_OBJ(local_dir_header);
- if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs, pArchive_name,
- archive_name_size) != archive_name_size) {
- pZip->m_pFree(pZip->m_pAlloc_opaque, pComp);
- return MZ_FALSE;
- }
- cur_archive_file_ofs += archive_name_size;
-
- if (!(level_and_flags & MZ_ZIP_FLAG_COMPRESSED_DATA)) {
- uncomp_crc32 =
- (mz_uint32)mz_crc32(MZ_CRC32_INIT, (const mz_uint8 *)pBuf, buf_size);
- uncomp_size = buf_size;
- if (uncomp_size <= 3) {
- level = 0;
- store_data_uncompressed = MZ_TRUE;
- }
- }
-
- if (store_data_uncompressed) {
- if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs, pBuf,
- buf_size) != buf_size) {
- pZip->m_pFree(pZip->m_pAlloc_opaque, pComp);
- return MZ_FALSE;
- }
-
- cur_archive_file_ofs += buf_size;
- comp_size = buf_size;
-
- if (level_and_flags & MZ_ZIP_FLAG_COMPRESSED_DATA) method = MZ_DEFLATED;
- } else if (buf_size) {
- mz_zip_writer_add_state state;
-
- state.m_pZip = pZip;
- state.m_cur_archive_file_ofs = cur_archive_file_ofs;
- state.m_comp_size = 0;
-
- if ((tdefl_init(pComp, mz_zip_writer_add_put_buf_callback, &state,
- tdefl_create_comp_flags_from_zip_params(
- level, -15, MZ_DEFAULT_STRATEGY)) !=
- TDEFL_STATUS_OKAY) ||
- (tdefl_compress_buffer(pComp, pBuf, buf_size, TDEFL_FINISH) !=
- TDEFL_STATUS_DONE)) {
- pZip->m_pFree(pZip->m_pAlloc_opaque, pComp);
- return MZ_FALSE;
- }
-
- comp_size = state.m_comp_size;
- cur_archive_file_ofs = state.m_cur_archive_file_ofs;
-
- method = MZ_DEFLATED;
- }
-
- pZip->m_pFree(pZip->m_pAlloc_opaque, pComp);
- pComp = NULL;
-
- // no zip64 support yet
- if ((comp_size > 0xFFFFFFFF) || (cur_archive_file_ofs > 0xFFFFFFFF))
- return MZ_FALSE;
-
- if (!mz_zip_writer_create_local_dir_header(
- pZip, local_dir_header, (mz_uint16)archive_name_size, 0, uncomp_size,
- comp_size, uncomp_crc32, method, 0, dos_time, dos_date))
- return MZ_FALSE;
-
- if (pZip->m_pWrite(pZip->m_pIO_opaque, local_dir_header_ofs, local_dir_header,
- sizeof(local_dir_header)) != sizeof(local_dir_header))
- return MZ_FALSE;
-
- if (!mz_zip_writer_add_to_central_dir(
- pZip, pArchive_name, (mz_uint16)archive_name_size, NULL, 0, pComment,
- comment_size, uncomp_size, comp_size, uncomp_crc32, method, 0,
- dos_time, dos_date, local_dir_header_ofs, ext_attributes))
- return MZ_FALSE;
-
- pZip->m_total_files++;
- pZip->m_archive_size = cur_archive_file_ofs;
-
- return MZ_TRUE;
-}
-
-#ifndef MINIZ_NO_STDIO
-mz_bool mz_zip_writer_add_file(mz_zip_archive *pZip, const char *pArchive_name,
- const char *pSrc_filename, const void *pComment,
- mz_uint16 comment_size,
- mz_uint level_and_flags) {
- mz_uint uncomp_crc32 = MZ_CRC32_INIT, level, num_alignment_padding_bytes;
- mz_uint16 method = 0, dos_time = 0, dos_date = 0, ext_attributes = 0;
- mz_uint64 local_dir_header_ofs = pZip->m_archive_size,
- cur_archive_file_ofs = pZip->m_archive_size, uncomp_size = 0,
- comp_size = 0;
- size_t archive_name_size;
- mz_uint8 local_dir_header[MZ_ZIP_LOCAL_DIR_HEADER_SIZE];
- MZ_FILE *pSrc_file = NULL;
-
- if ((int)level_and_flags < 0) level_and_flags = MZ_DEFAULT_LEVEL;
- level = level_and_flags & 0xF;
-
- if ((!pZip) || (!pZip->m_pState) ||
- (pZip->m_zip_mode != MZ_ZIP_MODE_WRITING) || (!pArchive_name) ||
- ((comment_size) && (!pComment)) || (level > MZ_UBER_COMPRESSION))
- return MZ_FALSE;
- if (level_and_flags & MZ_ZIP_FLAG_COMPRESSED_DATA) return MZ_FALSE;
- if (!mz_zip_writer_validate_archive_name(pArchive_name)) return MZ_FALSE;
-
- archive_name_size = strlen(pArchive_name);
- if (archive_name_size > 0xFFFF) return MZ_FALSE;
-
- num_alignment_padding_bytes =
- mz_zip_writer_compute_padding_needed_for_file_alignment(pZip);
-
- // no zip64 support yet
- if ((pZip->m_total_files == 0xFFFF) ||
- ((pZip->m_archive_size + num_alignment_padding_bytes +
- MZ_ZIP_LOCAL_DIR_HEADER_SIZE + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE +
- comment_size + archive_name_size) > 0xFFFFFFFF))
- return MZ_FALSE;
-
- if (!mz_zip_get_file_modified_time(pSrc_filename, &dos_time, &dos_date))
- return MZ_FALSE;
-
- pSrc_file = MZ_FOPEN(pSrc_filename, "rb");
- if (!pSrc_file) return MZ_FALSE;
- MZ_FSEEK64(pSrc_file, 0, SEEK_END);
- uncomp_size = MZ_FTELL64(pSrc_file);
- MZ_FSEEK64(pSrc_file, 0, SEEK_SET);
-
- if (uncomp_size > 0xFFFFFFFF) {
- // No zip64 support yet
- MZ_FCLOSE(pSrc_file);
- return MZ_FALSE;
- }
- if (uncomp_size <= 3) level = 0;
-
- if (!mz_zip_writer_write_zeros(
- pZip, cur_archive_file_ofs,
- num_alignment_padding_bytes + sizeof(local_dir_header))) {
- MZ_FCLOSE(pSrc_file);
- return MZ_FALSE;
- }
- local_dir_header_ofs += num_alignment_padding_bytes;
- if (pZip->m_file_offset_alignment) {
- MZ_ASSERT((local_dir_header_ofs & (pZip->m_file_offset_alignment - 1)) ==
- 0);
- }
- cur_archive_file_ofs +=
- num_alignment_padding_bytes + sizeof(local_dir_header);
-
- MZ_CLEAR_OBJ(local_dir_header);
- if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs, pArchive_name,
- archive_name_size) != archive_name_size) {
- MZ_FCLOSE(pSrc_file);
- return MZ_FALSE;
- }
- cur_archive_file_ofs += archive_name_size;
-
- if (uncomp_size) {
- mz_uint64 uncomp_remaining = uncomp_size;
- void *pRead_buf =
- pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1, MZ_ZIP_MAX_IO_BUF_SIZE);
- if (!pRead_buf) {
- MZ_FCLOSE(pSrc_file);
- return MZ_FALSE;
- }
-
- if (!level) {
- while (uncomp_remaining) {
- mz_uint n =
- (mz_uint)MZ_MIN((mz_uint)MZ_ZIP_MAX_IO_BUF_SIZE, uncomp_remaining);
- if ((MZ_FREAD(pRead_buf, 1, n, pSrc_file) != n) ||
- (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs, pRead_buf,
- n) != n)) {
- pZip->m_pFree(pZip->m_pAlloc_opaque, pRead_buf);
- MZ_FCLOSE(pSrc_file);
- return MZ_FALSE;
- }
- uncomp_crc32 =
- (mz_uint32)mz_crc32(uncomp_crc32, (const mz_uint8 *)pRead_buf, n);
- uncomp_remaining -= n;
- cur_archive_file_ofs += n;
- }
- comp_size = uncomp_size;
- } else {
- mz_bool result = MZ_FALSE;
- mz_zip_writer_add_state state;
- tdefl_compressor *pComp = (tdefl_compressor *)pZip->m_pAlloc(
- pZip->m_pAlloc_opaque, 1, sizeof(tdefl_compressor));
- if (!pComp) {
- pZip->m_pFree(pZip->m_pAlloc_opaque, pRead_buf);
- MZ_FCLOSE(pSrc_file);
- return MZ_FALSE;
- }
-
- state.m_pZip = pZip;
- state.m_cur_archive_file_ofs = cur_archive_file_ofs;
- state.m_comp_size = 0;
-
- if (tdefl_init(pComp, mz_zip_writer_add_put_buf_callback, &state,
- tdefl_create_comp_flags_from_zip_params(
- level, -15, MZ_DEFAULT_STRATEGY)) !=
- TDEFL_STATUS_OKAY) {
- pZip->m_pFree(pZip->m_pAlloc_opaque, pComp);
- pZip->m_pFree(pZip->m_pAlloc_opaque, pRead_buf);
- MZ_FCLOSE(pSrc_file);
- return MZ_FALSE;
- }
-
- for (;;) {
- size_t in_buf_size = (mz_uint32)MZ_MIN(uncomp_remaining,
- (mz_uint)MZ_ZIP_MAX_IO_BUF_SIZE);
- tdefl_status status;
-
- if (MZ_FREAD(pRead_buf, 1, in_buf_size, pSrc_file) != in_buf_size)
- break;
-
- uncomp_crc32 = (mz_uint32)mz_crc32(
- uncomp_crc32, (const mz_uint8 *)pRead_buf, in_buf_size);
- uncomp_remaining -= in_buf_size;
-
- status = tdefl_compress_buffer(
- pComp, pRead_buf, in_buf_size,
- uncomp_remaining ? TDEFL_NO_FLUSH : TDEFL_FINISH);
- if (status == TDEFL_STATUS_DONE) {
- result = MZ_TRUE;
- break;
- } else if (status != TDEFL_STATUS_OKAY)
- break;
- }
-
- pZip->m_pFree(pZip->m_pAlloc_opaque, pComp);
-
- if (!result) {
- pZip->m_pFree(pZip->m_pAlloc_opaque, pRead_buf);
- MZ_FCLOSE(pSrc_file);
- return MZ_FALSE;
- }
-
- comp_size = state.m_comp_size;
- cur_archive_file_ofs = state.m_cur_archive_file_ofs;
-
- method = MZ_DEFLATED;
- }
-
- pZip->m_pFree(pZip->m_pAlloc_opaque, pRead_buf);
- }
-
- MZ_FCLOSE(pSrc_file);
- pSrc_file = NULL;
-
- // no zip64 support yet
- if ((comp_size > 0xFFFFFFFF) || (cur_archive_file_ofs > 0xFFFFFFFF))
- return MZ_FALSE;
-
- if (!mz_zip_writer_create_local_dir_header(
- pZip, local_dir_header, (mz_uint16)archive_name_size, 0, uncomp_size,
- comp_size, uncomp_crc32, method, 0, dos_time, dos_date))
- return MZ_FALSE;
-
- if (pZip->m_pWrite(pZip->m_pIO_opaque, local_dir_header_ofs, local_dir_header,
- sizeof(local_dir_header)) != sizeof(local_dir_header))
- return MZ_FALSE;
-
- if (!mz_zip_writer_add_to_central_dir(
- pZip, pArchive_name, (mz_uint16)archive_name_size, NULL, 0, pComment,
- comment_size, uncomp_size, comp_size, uncomp_crc32, method, 0,
- dos_time, dos_date, local_dir_header_ofs, ext_attributes))
- return MZ_FALSE;
-
- pZip->m_total_files++;
- pZip->m_archive_size = cur_archive_file_ofs;
-
- return MZ_TRUE;
-}
-#endif // #ifndef MINIZ_NO_STDIO
-
-mz_bool mz_zip_writer_add_from_zip_reader(mz_zip_archive *pZip,
- mz_zip_archive *pSource_zip,
- mz_uint file_index) {
- mz_uint n, bit_flags, num_alignment_padding_bytes;
- mz_uint64 comp_bytes_remaining, local_dir_header_ofs;
- mz_uint64 cur_src_file_ofs, cur_dst_file_ofs;
- mz_uint32
- local_header_u32[(MZ_ZIP_LOCAL_DIR_HEADER_SIZE + sizeof(mz_uint32) - 1) /
- sizeof(mz_uint32)];
- mz_uint8 *pLocal_header = (mz_uint8 *)local_header_u32;
- mz_uint8 central_header[MZ_ZIP_CENTRAL_DIR_HEADER_SIZE];
- size_t orig_central_dir_size;
- mz_zip_internal_state *pState;
- void *pBuf;
- const mz_uint8 *pSrc_central_header;
-
- if ((!pZip) || (!pZip->m_pState) || (pZip->m_zip_mode != MZ_ZIP_MODE_WRITING))
- return MZ_FALSE;
- if (NULL ==
- (pSrc_central_header = mz_zip_reader_get_cdh(pSource_zip, file_index)))
- return MZ_FALSE;
- pState = pZip->m_pState;
-
- num_alignment_padding_bytes =
- mz_zip_writer_compute_padding_needed_for_file_alignment(pZip);
-
- // no zip64 support yet
- if ((pZip->m_total_files == 0xFFFF) ||
- ((pZip->m_archive_size + num_alignment_padding_bytes +
- MZ_ZIP_LOCAL_DIR_HEADER_SIZE + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE) >
- 0xFFFFFFFF))
- return MZ_FALSE;
-
- cur_src_file_ofs =
- MZ_READ_LE32(pSrc_central_header + MZ_ZIP_CDH_LOCAL_HEADER_OFS);
- cur_dst_file_ofs = pZip->m_archive_size;
-
- if (pSource_zip->m_pRead(pSource_zip->m_pIO_opaque, cur_src_file_ofs,
- pLocal_header, MZ_ZIP_LOCAL_DIR_HEADER_SIZE) !=
- MZ_ZIP_LOCAL_DIR_HEADER_SIZE)
- return MZ_FALSE;
- if (MZ_READ_LE32(pLocal_header) != MZ_ZIP_LOCAL_DIR_HEADER_SIG)
- return MZ_FALSE;
- cur_src_file_ofs += MZ_ZIP_LOCAL_DIR_HEADER_SIZE;
-
- if (!mz_zip_writer_write_zeros(pZip, cur_dst_file_ofs,
- num_alignment_padding_bytes))
- return MZ_FALSE;
- cur_dst_file_ofs += num_alignment_padding_bytes;
- local_dir_header_ofs = cur_dst_file_ofs;
- if (pZip->m_file_offset_alignment) {
- MZ_ASSERT((local_dir_header_ofs & (pZip->m_file_offset_alignment - 1)) ==
- 0);
- }
-
- if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_dst_file_ofs, pLocal_header,
- MZ_ZIP_LOCAL_DIR_HEADER_SIZE) !=
- MZ_ZIP_LOCAL_DIR_HEADER_SIZE)
- return MZ_FALSE;
- cur_dst_file_ofs += MZ_ZIP_LOCAL_DIR_HEADER_SIZE;
-
- n = MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_FILENAME_LEN_OFS) +
- MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_EXTRA_LEN_OFS);
- comp_bytes_remaining =
- n + MZ_READ_LE32(pSrc_central_header + MZ_ZIP_CDH_COMPRESSED_SIZE_OFS);
-
- if (NULL == (pBuf = pZip->m_pAlloc(
- pZip->m_pAlloc_opaque, 1,
- (size_t)MZ_MAX(sizeof(mz_uint32) * 4,
- MZ_MIN((mz_uint)MZ_ZIP_MAX_IO_BUF_SIZE,
- comp_bytes_remaining)))))
- return MZ_FALSE;
-
- while (comp_bytes_remaining) {
- n = (mz_uint)MZ_MIN((mz_uint)MZ_ZIP_MAX_IO_BUF_SIZE, comp_bytes_remaining);
- if (pSource_zip->m_pRead(pSource_zip->m_pIO_opaque, cur_src_file_ofs, pBuf,
- n) != n) {
- pZip->m_pFree(pZip->m_pAlloc_opaque, pBuf);
- return MZ_FALSE;
- }
- cur_src_file_ofs += n;
-
- if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_dst_file_ofs, pBuf, n) != n) {
- pZip->m_pFree(pZip->m_pAlloc_opaque, pBuf);
- return MZ_FALSE;
- }
- cur_dst_file_ofs += n;
-
- comp_bytes_remaining -= n;
- }
-
- bit_flags = MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_BIT_FLAG_OFS);
- if (bit_flags & 8) {
- // Copy data descriptor
- if (pSource_zip->m_pRead(pSource_zip->m_pIO_opaque, cur_src_file_ofs, pBuf,
- sizeof(mz_uint32) * 4) != sizeof(mz_uint32) * 4) {
- pZip->m_pFree(pZip->m_pAlloc_opaque, pBuf);
- return MZ_FALSE;
- }
-
- n = sizeof(mz_uint32) * ((MZ_READ_LE32(pBuf) == 0x08074b50) ? 4 : 3);
- if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_dst_file_ofs, pBuf, n) != n) {
- pZip->m_pFree(pZip->m_pAlloc_opaque, pBuf);
- return MZ_FALSE;
- }
-
- cur_src_file_ofs += n;
- cur_dst_file_ofs += n;
- }
- pZip->m_pFree(pZip->m_pAlloc_opaque, pBuf);
-
- // no zip64 support yet
- if (cur_dst_file_ofs > 0xFFFFFFFF) return MZ_FALSE;
-
- orig_central_dir_size = pState->m_central_dir.m_size;
-
- memcpy(central_header, pSrc_central_header, MZ_ZIP_CENTRAL_DIR_HEADER_SIZE);
- MZ_WRITE_LE32(central_header + MZ_ZIP_CDH_LOCAL_HEADER_OFS,
- local_dir_header_ofs);
- if (!mz_zip_array_push_back(pZip, &pState->m_central_dir, central_header,
- MZ_ZIP_CENTRAL_DIR_HEADER_SIZE))
- return MZ_FALSE;
-
- n = MZ_READ_LE16(pSrc_central_header + MZ_ZIP_CDH_FILENAME_LEN_OFS) +
- MZ_READ_LE16(pSrc_central_header + MZ_ZIP_CDH_EXTRA_LEN_OFS) +
- MZ_READ_LE16(pSrc_central_header + MZ_ZIP_CDH_COMMENT_LEN_OFS);
- if (!mz_zip_array_push_back(
- pZip, &pState->m_central_dir,
- pSrc_central_header + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE, n)) {
- mz_zip_array_resize(pZip, &pState->m_central_dir, orig_central_dir_size,
- MZ_FALSE);
- return MZ_FALSE;
- }
-
- if (pState->m_central_dir.m_size > 0xFFFFFFFF) return MZ_FALSE;
- n = (mz_uint32)orig_central_dir_size;
- if (!mz_zip_array_push_back(pZip, &pState->m_central_dir_offsets, &n, 1)) {
- mz_zip_array_resize(pZip, &pState->m_central_dir, orig_central_dir_size,
- MZ_FALSE);
- return MZ_FALSE;
- }
-
- pZip->m_total_files++;
- pZip->m_archive_size = cur_dst_file_ofs;
-
- return MZ_TRUE;
-}
-
-mz_bool mz_zip_writer_finalize_archive(mz_zip_archive *pZip) {
- mz_zip_internal_state *pState;
- mz_uint64 central_dir_ofs, central_dir_size;
- mz_uint8 hdr[MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE];
-
- if ((!pZip) || (!pZip->m_pState) || (pZip->m_zip_mode != MZ_ZIP_MODE_WRITING))
- return MZ_FALSE;
-
- pState = pZip->m_pState;
-
- // no zip64 support yet
- if ((pZip->m_total_files > 0xFFFF) ||
- ((pZip->m_archive_size + pState->m_central_dir.m_size +
- MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) > 0xFFFFFFFF))
- return MZ_FALSE;
-
- central_dir_ofs = 0;
- central_dir_size = 0;
- if (pZip->m_total_files) {
- // Write central directory
- central_dir_ofs = pZip->m_archive_size;
- central_dir_size = pState->m_central_dir.m_size;
- pZip->m_central_directory_file_ofs = central_dir_ofs;
- if (pZip->m_pWrite(pZip->m_pIO_opaque, central_dir_ofs,
- pState->m_central_dir.m_p,
- (size_t)central_dir_size) != central_dir_size)
- return MZ_FALSE;
- pZip->m_archive_size += central_dir_size;
- }
-
- // Write end of central directory record
- MZ_CLEAR_OBJ(hdr);
- MZ_WRITE_LE32(hdr + MZ_ZIP_ECDH_SIG_OFS,
- MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG);
- MZ_WRITE_LE16(hdr + MZ_ZIP_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS,
- pZip->m_total_files);
- MZ_WRITE_LE16(hdr + MZ_ZIP_ECDH_CDIR_TOTAL_ENTRIES_OFS, pZip->m_total_files);
- MZ_WRITE_LE32(hdr + MZ_ZIP_ECDH_CDIR_SIZE_OFS, central_dir_size);
- MZ_WRITE_LE32(hdr + MZ_ZIP_ECDH_CDIR_OFS_OFS, central_dir_ofs);
-
- if (pZip->m_pWrite(pZip->m_pIO_opaque, pZip->m_archive_size, hdr,
- sizeof(hdr)) != sizeof(hdr))
- return MZ_FALSE;
-#ifndef MINIZ_NO_STDIO
- if ((pState->m_pFile) && (MZ_FFLUSH(pState->m_pFile) == EOF)) return MZ_FALSE;
-#endif // #ifndef MINIZ_NO_STDIO
-
- pZip->m_archive_size += sizeof(hdr);
-
- pZip->m_zip_mode = MZ_ZIP_MODE_WRITING_HAS_BEEN_FINALIZED;
- return MZ_TRUE;
-}
-
-mz_bool mz_zip_writer_finalize_heap_archive(mz_zip_archive *pZip, void **pBuf,
- size_t *pSize) {
- if ((!pZip) || (!pZip->m_pState) || (!pBuf) || (!pSize)) return MZ_FALSE;
- if (pZip->m_pWrite != mz_zip_heap_write_func) return MZ_FALSE;
- if (!mz_zip_writer_finalize_archive(pZip)) return MZ_FALSE;
-
- *pBuf = pZip->m_pState->m_pMem;
- *pSize = pZip->m_pState->m_mem_size;
- pZip->m_pState->m_pMem = NULL;
- pZip->m_pState->m_mem_size = pZip->m_pState->m_mem_capacity = 0;
- return MZ_TRUE;
-}
-
-mz_bool mz_zip_writer_end(mz_zip_archive *pZip) {
- mz_zip_internal_state *pState;
- mz_bool status = MZ_TRUE;
- if ((!pZip) || (!pZip->m_pState) || (!pZip->m_pAlloc) || (!pZip->m_pFree) ||
- ((pZip->m_zip_mode != MZ_ZIP_MODE_WRITING) &&
- (pZip->m_zip_mode != MZ_ZIP_MODE_WRITING_HAS_BEEN_FINALIZED)))
- return MZ_FALSE;
-
- pState = pZip->m_pState;
- pZip->m_pState = NULL;
- mz_zip_array_clear(pZip, &pState->m_central_dir);
- mz_zip_array_clear(pZip, &pState->m_central_dir_offsets);
- mz_zip_array_clear(pZip, &pState->m_sorted_central_dir_offsets);
-
-#ifndef MINIZ_NO_STDIO
- if (pState->m_pFile) {
- MZ_FCLOSE(pState->m_pFile);
- pState->m_pFile = NULL;
- }
-#endif // #ifndef MINIZ_NO_STDIO
-
- if ((pZip->m_pWrite == mz_zip_heap_write_func) && (pState->m_pMem)) {
- pZip->m_pFree(pZip->m_pAlloc_opaque, pState->m_pMem);
- pState->m_pMem = NULL;
- }
-
- pZip->m_pFree(pZip->m_pAlloc_opaque, pState);
- pZip->m_zip_mode = MZ_ZIP_MODE_INVALID;
- return status;
-}
-
-#ifndef MINIZ_NO_STDIO
-mz_bool mz_zip_add_mem_to_archive_file_in_place(
- const char *pZip_filename, const char *pArchive_name, const void *pBuf,
- size_t buf_size, const void *pComment, mz_uint16 comment_size,
- mz_uint level_and_flags) {
- mz_bool status, created_new_archive = MZ_FALSE;
- mz_zip_archive zip_archive;
- struct MZ_FILE_STAT_STRUCT file_stat;
- MZ_CLEAR_OBJ(zip_archive);
- if ((int)level_and_flags < 0) level_and_flags = MZ_DEFAULT_LEVEL;
- if ((!pZip_filename) || (!pArchive_name) || ((buf_size) && (!pBuf)) ||
- ((comment_size) && (!pComment)) ||
- ((level_and_flags & 0xF) > MZ_UBER_COMPRESSION))
- return MZ_FALSE;
- if (!mz_zip_writer_validate_archive_name(pArchive_name)) return MZ_FALSE;
- if (MZ_FILE_STAT(pZip_filename, &file_stat) != 0) {
- // Create a new archive.
- if (!mz_zip_writer_init_file(&zip_archive, pZip_filename, 0))
- return MZ_FALSE;
- created_new_archive = MZ_TRUE;
- } else {
- // Append to an existing archive.
- if (!mz_zip_reader_init_file(
- &zip_archive, pZip_filename,
- level_and_flags | MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY))
- return MZ_FALSE;
- if (!mz_zip_writer_init_from_reader(&zip_archive, pZip_filename)) {
- mz_zip_reader_end(&zip_archive);
- return MZ_FALSE;
- }
- }
- status =
- mz_zip_writer_add_mem_ex(&zip_archive, pArchive_name, pBuf, buf_size,
- pComment, comment_size, level_and_flags, 0, 0);
- // Always finalize, even if adding failed for some reason, so we have a valid
- // central directory. (This may not always succeed, but we can try.)
- if (!mz_zip_writer_finalize_archive(&zip_archive)) status = MZ_FALSE;
- if (!mz_zip_writer_end(&zip_archive)) status = MZ_FALSE;
- if ((!status) && (created_new_archive)) {
- // It's a new archive and something went wrong, so just delete it.
- int ignoredStatus = MZ_DELETE_FILE(pZip_filename);
- (void)ignoredStatus;
- }
- return status;
-}
-
-void *mz_zip_extract_archive_file_to_heap(const char *pZip_filename,
- const char *pArchive_name,
- size_t *pSize, mz_uint flags) {
- int file_index;
- mz_zip_archive zip_archive;
- void *p = NULL;
-
- if (pSize) *pSize = 0;
-
- if ((!pZip_filename) || (!pArchive_name)) return NULL;
-
- MZ_CLEAR_OBJ(zip_archive);
- if (!mz_zip_reader_init_file(
- &zip_archive, pZip_filename,
- flags | MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY))
- return NULL;
-
- if ((file_index = mz_zip_reader_locate_file(&zip_archive, pArchive_name, NULL,
- flags)) >= 0)
- p = mz_zip_reader_extract_to_heap(&zip_archive, file_index, pSize, flags);
-
- mz_zip_reader_end(&zip_archive);
- return p;
-}
-
-#endif // #ifndef MINIZ_NO_STDIO
-
-#endif // #ifndef MINIZ_NO_ARCHIVE_WRITING_APIS
-
-#endif // #ifndef MINIZ_NO_ARCHIVE_APIS
-
-#ifdef __cplusplus
-}
-#endif
-
-#ifdef _MSC_VER
-#pragma warning(pop)
-#endif
-
-#endif // MINIZ_HEADER_FILE_ONLY
-
-/*
- This is free and unencumbered software released into the public domain.
-
- Anyone is free to copy, modify, publish, use, compile, sell, or
- distribute this software, either in source code form or as a compiled
- binary, for any purpose, commercial or non-commercial, and by any
- means.
-
- In jurisdictions that recognize copyright laws, the author or authors
- of this software dedicate any and all copyright interest in the
- software to the public domain. We make this dedication for the benefit
- of the public at large and to the detriment of our heirs and
- successors. We intend this dedication to be an overt act of
- relinquishment in perpetuity of all present and future rights to this
- software under copyright law.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
- OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- OTHER DEALINGS IN THE SOFTWARE.
-
- For more information, please refer to <http://unlicense.org/>
-*/
-
-// ---------------------- end of miniz ----------------------------------------
-
-#ifdef __clang__
-#pragma clang diagnostic pop
-#endif
-
-} // namespace miniz
-#else
-
-// Reuse MINIZ_LITTE_ENDIAN macro
-
-#if defined(_M_IX86) || defined(_M_X64) || defined(__i386__) || \
- defined(__i386) || defined(__i486__) || defined(__i486) || \
- defined(i386) || defined(__ia64__) || defined(__x86_64__)
-// MINIZ_X86_OR_X64_CPU is only used to help set the below macros.
-#define MINIZ_X86_OR_X64_CPU 1
-#endif
-
-#if defined(__sparcv9)
-// Big endian
-#else
-#if (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) || MINIZ_X86_OR_X64_CPU
-// Set MINIZ_LITTLE_ENDIAN to 1 if the processor is little endian.
-#define MINIZ_LITTLE_ENDIAN 1
-#endif
-#endif
-
-#endif // TINYEXR_USE_MINIZ
-
// static bool IsBigEndian(void) {
// union {
// unsigned int i;
@@ -7079,7 +684,7 @@ static void cpy2(unsigned short *dst_val, const unsigned short *src_val) {
}
static void swap2(unsigned short *val) {
-#ifdef MINIZ_LITTLE_ENDIAN
+#ifdef TINYEXR_LITTLE_ENDIAN
(void)val;
#else
unsigned short tmp = *val;
@@ -7138,7 +743,7 @@ static void cpy4(float *dst_val, const float *src_val) {
#endif
static void swap4(unsigned int *val) {
-#ifdef MINIZ_LITTLE_ENDIAN
+#ifdef TINYEXR_LITTLE_ENDIAN
(void)val;
#else
unsigned int tmp = *val;
@@ -7153,7 +758,7 @@ static void swap4(unsigned int *val) {
}
static void swap4(int *val) {
-#ifdef MINIZ_LITTLE_ENDIAN
+#ifdef TINYEXR_LITTLE_ENDIAN
(void)val;
#else
int tmp = *val;
@@ -7168,7 +773,7 @@ static void swap4(int *val) {
}
static void swap4(float *val) {
-#ifdef MINIZ_LITTLE_ENDIAN
+#ifdef TINYEXR_LITTLE_ENDIAN
(void)val;
#else
float tmp = *val;
@@ -7199,7 +804,7 @@ static void cpy8(tinyexr::tinyexr_uint64 *dst_val, const tinyexr::tinyexr_uint64
#endif
static void swap8(tinyexr::tinyexr_uint64 *val) {
-#ifdef MINIZ_LITTLE_ENDIAN
+#ifdef TINYEXR_LITTLE_ENDIAN
(void)val;
#else
tinyexr::tinyexr_uint64 tmp = (*val);
@@ -7218,12 +823,11 @@ static void swap8(tinyexr::tinyexr_uint64 *val) {
}
// https://gist.github.com/rygorous/2156668
-// Reuse MINIZ_LITTLE_ENDIAN flag from miniz.
union FP32 {
unsigned int u;
float f;
struct {
-#if MINIZ_LITTLE_ENDIAN
+#if TINYEXR_LITTLE_ENDIAN
unsigned int Mantissa : 23;
unsigned int Exponent : 8;
unsigned int Sign : 1;
@@ -7243,7 +847,7 @@ union FP32 {
union FP16 {
unsigned short u;
struct {
-#if MINIZ_LITTLE_ENDIAN
+#if TINYEXR_LITTLE_ENDIAN
unsigned int Mantissa : 10;
unsigned int Exponent : 5;
unsigned int Sign : 1;
@@ -7351,7 +955,7 @@ static const char *ReadString(std::string *s, const char *ptr, size_t len) {
}
if (size_t(q - ptr) >= len) {
- (*s) = std::string();
+ (*s).clear();
return NULL;
}
@@ -7438,6 +1042,7 @@ static void WriteAttributeToMemory(std::vector<unsigned char> *out,
typedef struct {
std::string name; // less than 255 bytes long
int pixel_type;
+ int requested_pixel_type;
int x_sampling;
int y_sampling;
unsigned char p_linear;
@@ -7465,6 +1070,7 @@ struct HeaderInfo {
int chunk_count;
// Tiled format
+ int tiled; // Non-zero if the part is tiled.
int tile_size_x;
int tile_size_y;
int tile_level_mode;
@@ -7474,6 +1080,11 @@ struct HeaderInfo {
int compression_type;
+ // required for multi-part or non-image files
+ std::string name;
+ // required for multi-part or non-image files
+ std::string type;
+
void clear() {
channels.clear();
attributes.clear();
@@ -7495,6 +1106,7 @@ struct HeaderInfo {
chunk_count = 0;
// Tiled format
+ tiled = 0;
tile_size_x = 0;
tile_size_y = 0;
tile_level_mode = 0;
@@ -7502,6 +1114,9 @@ struct HeaderInfo {
header_len = 0;
compression_type = 0;
+
+ name.clear();
+ type.clear();
}
};
@@ -7558,7 +1173,7 @@ static void WriteChannelInfo(std::vector<unsigned char> &data,
// Calculate total size.
for (size_t c = 0; c < channels.size(); c++) {
- sz += strlen(channels[c].name.c_str()) + 1; // +1 for \0
+ sz += channels[c].name.length() + 1; // +1 for \0
sz += 16; // 4 * int
}
data.resize(sz + 1);
@@ -7566,12 +1181,12 @@ static void WriteChannelInfo(std::vector<unsigned char> &data,
unsigned char *p = &data.at(0);
for (size_t c = 0; c < channels.size(); c++) {
- memcpy(p, channels[c].name.c_str(), strlen(channels[c].name.c_str()));
- p += strlen(channels[c].name.c_str());
+ memcpy(p, channels[c].name.c_str(), channels[c].name.length());
+ p += channels[c].name.length();
(*p) = '\0';
p++;
- int pixel_type = channels[c].pixel_type;
+ int pixel_type = channels[c].requested_pixel_type;
int x_sampling = channels[c].x_sampling;
int y_sampling = channels[c].y_sampling;
tinyexr::swap4(&pixel_type);
@@ -7650,11 +1265,11 @@ static void CompressZip(unsigned char *dst,
// Compress the data using miniz
//
- miniz::mz_ulong outSize = miniz::mz_compressBound(src_size);
- int ret = miniz::mz_compress(
+ mz_ulong outSize = mz_compressBound(src_size);
+ int ret = mz_compress(
dst, &outSize, static_cast<const unsigned char *>(&tmpBuf.at(0)),
src_size);
- assert(ret == miniz::MZ_OK);
+ assert(ret == MZ_OK);
(void)ret;
compressedSize = outSize;
@@ -7687,8 +1302,8 @@ static bool DecompressZip(unsigned char *dst,
#if TINYEXR_USE_MINIZ
int ret =
- miniz::mz_uncompress(&tmpBuf.at(0), uncompressed_size, src, src_size);
- if (miniz::MZ_OK != ret) {
+ mz_uncompress(&tmpBuf.at(0), uncompressed_size, src, src_size);
+ if (MZ_OK != ret) {
return false;
}
#else
@@ -8989,7 +2604,8 @@ static bool getCode(int po, int rlc, long long &c, int &lc, const char *&in,
if (po == rlc) {
if (lc < 8) {
/* TinyEXR issue 78 */
- if ((in + 1) >= in_end) {
+ /* TinyEXR issue 160. in + 1 -> in */
+ if (in >= in_end) {
return false;
}
@@ -9332,7 +2948,7 @@ static bool CompressPiz(unsigned char *outPtr, unsigned int *outSize,
unsigned short minNonZero;
unsigned short maxNonZero;
-#if !MINIZ_LITTLE_ENDIAN
+#if !TINYEXR_LITTLE_ENDIAN
// @todo { PIZ compression on BigEndian architecture. }
assert(0);
return false;
@@ -9355,7 +2971,7 @@ static bool CompressPiz(unsigned char *outPtr, unsigned int *outSize,
// cd.ys = c.channel().ySampling;
size_t pixelSize = sizeof(int); // UINT and FLOAT
- if (channelInfo[c].pixel_type == TINYEXR_PIXELTYPE_HALF) {
+ if (channelInfo[c].requested_pixel_type == TINYEXR_PIXELTYPE_HALF) {
pixelSize = sizeof(short);
}
@@ -9445,10 +3061,10 @@ static bool CompressPiz(unsigned char *outPtr, unsigned int *outSize,
}
static bool DecompressPiz(unsigned char *outPtr, const unsigned char *inPtr,
- size_t tmpBufSize, size_t inLen, int num_channels,
+ size_t tmpBufSizeInBytes, size_t inLen, int num_channels,
const EXRChannelInfo *channels, int data_width,
int num_lines) {
- if (inLen == tmpBufSize) {
+ if (inLen == tmpBufSizeInBytes) {
// Data is not compressed(Issue 40).
memcpy(outPtr, inPtr, inLen);
return true;
@@ -9458,7 +3074,7 @@ static bool DecompressPiz(unsigned char *outPtr, const unsigned char *inPtr,
unsigned short minNonZero;
unsigned short maxNonZero;
-#if !MINIZ_LITTLE_ENDIAN
+#if !TINYEXR_LITTLE_ENDIAN
// @todo { PIZ compression on BigEndian architecture. }
assert(0);
return false;
@@ -9501,7 +3117,7 @@ static bool DecompressPiz(unsigned char *outPtr, const unsigned char *inPtr,
return false;
}
- std::vector<unsigned short> tmpBuffer(tmpBufSize);
+ std::vector<unsigned short> tmpBuffer(tmpBufSizeInBytes / sizeof(unsigned short));
hufUncompress(reinterpret_cast<const char *>(ptr), length, &tmpBuffer);
//
@@ -9543,7 +3159,7 @@ static bool DecompressPiz(unsigned char *outPtr, const unsigned char *inPtr,
// Expand the pixel data to their original range
//
- applyLut(lut.data(), &tmpBuffer.at(0), static_cast<int>(tmpBufSize));
+ applyLut(lut.data(), &tmpBuffer.at(0), static_cast<int>(tmpBufSizeInBytes / sizeof(unsigned short)));
for (int y = 0; y < num_lines; y++) {
for (size_t i = 0; i < channelData.size(); ++i) {
@@ -9802,6 +3418,9 @@ static bool CompressZfp(std::vector<unsigned char> *outBuf,
// -----------------------------------------------------------------
//
+// heuristics
+#define TINYEXR_DIMENSION_THRESHOLD (1024 * 8192)
+
// TODO(syoyo): Refactor function arguments.
static bool DecodePixelData(/* out */ unsigned char **out_images,
const int *requested_pixel_types,
@@ -10432,8 +4051,8 @@ static bool DecodeTiledPixelData(
const EXRAttribute *attributes, size_t num_channels,
const EXRChannelInfo *channels,
const std::vector<size_t> &channel_offset_list) {
- if (tile_size_x > data_width || tile_size_y > data_height ||
- tile_size_x * tile_offset_x > data_width ||
+ // Here, data_width and data_height are the dimensions of the current (sub)level.
+ if (tile_size_x * tile_offset_x > data_width ||
tile_size_y * tile_offset_y > data_height) {
return false;
}
@@ -10541,6 +4160,7 @@ static inline std::wstring UTF8ToWchar(const std::string &str) {
}
#endif
+
static int ParseEXRHeader(HeaderInfo *info, bool *empty_header,
const EXRVersion *version, std::string *err,
const unsigned char *buf, size_t size) {
@@ -10579,6 +4199,11 @@ static int ParseEXRHeader(HeaderInfo *info, bool *empty_header,
bool has_pixel_aspect_ratio = false;
bool has_screen_window_center = false;
bool has_screen_window_width = false;
+ bool has_name = false;
+ bool has_type = false;
+
+ info->name.clear();
+ info->type.clear();
info->data_window.min_x = 0;
info->data_window.min_y = 0;
@@ -10594,6 +4219,7 @@ static int ParseEXRHeader(HeaderInfo *info, bool *empty_header,
info->screen_window_width = -1.0f;
info->pixel_aspect_ratio = -1.0f;
+ info->tiled = 0;
info->tile_size_x = -1;
info->tile_size_y = -1;
info->tile_level_mode = -1;
@@ -10628,7 +4254,8 @@ static int ParseEXRHeader(HeaderInfo *info, bool *empty_header,
marker += marker_size;
size -= marker_size;
- if (version->tiled && attr_name.compare("tiles") == 0) {
+ // For a multipart file, the version field 9th bit is 0.
+ if ((version->tiled || version->multipart || version->non_image) && attr_name.compare("tiles") == 0) {
unsigned int x_size, y_size;
unsigned char tile_mode;
assert(data.size() == 9);
@@ -10652,7 +4279,7 @@ static int ParseEXRHeader(HeaderInfo *info, bool *empty_header,
// mode = levelMode + roundingMode * 16
info->tile_level_mode = tile_mode & 0x3;
info->tile_rounding_mode = (tile_mode >> 4) & 0x1;
-
+ info->tiled = 1;
} else if (attr_name.compare("compression") == 0) {
bool ok = false;
if (data[0] < TINYEXR_COMPRESSIONTYPE_PIZ) {
@@ -10771,6 +4398,22 @@ static int ParseEXRHeader(HeaderInfo *info, bool *empty_header,
memcpy(&info->chunk_count, &data.at(0), sizeof(int));
tinyexr::swap4(&info->chunk_count);
}
+ } else if (attr_name.compare("name") == 0) {
+ if (!data.empty() && data[0]) {
+ data.push_back(0);
+ size_t len = strlen(reinterpret_cast<const char*>(&data[0]));
+ info->name.resize(len);
+ info->name.assign(reinterpret_cast<const char*>(&data[0]), len);
+ has_name = true;
+ }
+ } else if (attr_name.compare("type") == 0) {
+ if (!data.empty() && data[0]) {
+ data.push_back(0);
+ size_t len = strlen(reinterpret_cast<const char*>(&data[0]));
+ info->type.resize(len);
+ info->type.assign(reinterpret_cast<const char*>(&data[0]), len);
+ has_type = true;
+ }
} else {
// Custom attribute(up to TINYEXR_MAX_CUSTOM_ATTRIBUTES)
if (info->attributes.size() < TINYEXR_MAX_CUSTOM_ATTRIBUTES) {
@@ -10835,6 +4478,17 @@ static int ParseEXRHeader(HeaderInfo *info, bool *empty_header,
<< std::endl;
}
+ if (version->multipart || version->non_image) {
+ if (!has_name) {
+ ss_err << "\"name\" attribute not found in the header."
+ << std::endl;
+ }
+ if (!has_type) {
+ ss_err << "\"type\" attribute not found in the header."
+ << std::endl;
+ }
+ }
+
if (!(ss_err.str().empty())) {
if (err) {
(*err) += ss_err.str();
@@ -10865,12 +4519,30 @@ static void ConvertHeader(EXRHeader *exr_header, const HeaderInfo &info) {
exr_header->data_window.max_y = info.data_window.max_y;
exr_header->line_order = info.line_order;
exr_header->compression_type = info.compression_type;
-
+ exr_header->tiled = info.tiled;
exr_header->tile_size_x = info.tile_size_x;
exr_header->tile_size_y = info.tile_size_y;
exr_header->tile_level_mode = info.tile_level_mode;
exr_header->tile_rounding_mode = info.tile_rounding_mode;
+ EXRSetNameAttr(exr_header, info.name.c_str());
+
+ if (!info.type.empty()) {
+ if (info.type == "scanlineimage") {
+ assert(!exr_header->tiled);
+ } else if (info.type == "tiledimage") {
+ assert(exr_header->tiled);
+ } else if (info.type == "deeptile") {
+ exr_header->non_image = 1;
+ assert(exr_header->tiled);
+ } else if (info.type == "deepscanline") {
+ exr_header->non_image = 1;
+ assert(!exr_header->tiled);
+ } else {
+ assert(false);
+ }
+ }
+
exr_header->num_channels = static_cast<int>(info.channels.size());
exr_header->channels = static_cast<EXRChannelInfo *>(malloc(
@@ -10932,8 +4604,216 @@ static void ConvertHeader(EXRHeader *exr_header, const HeaderInfo &info) {
exr_header->header_len = info.header_len;
}
+struct OffsetData {
+ OffsetData() : num_x_levels(0), num_y_levels(0) {}
+ std::vector<std::vector<std::vector <tinyexr::tinyexr_uint64> > > offsets;
+ int num_x_levels;
+ int num_y_levels;
+};
+
+int LevelIndex(int lx, int ly, int tile_level_mode, int num_x_levels) {
+ switch (tile_level_mode) {
+ case TINYEXR_TILE_ONE_LEVEL:
+ return 0;
+
+ case TINYEXR_TILE_MIPMAP_LEVELS:
+ return lx;
+
+ case TINYEXR_TILE_RIPMAP_LEVELS:
+ return lx + ly * num_x_levels;
+
+ default:
+ assert(false);
+ }
+ return 0;
+}
+
+static int LevelSize(int toplevel_size, int level, int tile_rounding_mode) {
+ assert(level >= 0);
+
+ int b = (int)(1u << (unsigned)level);
+ int level_size = toplevel_size / b;
+
+ if (tile_rounding_mode == TINYEXR_TILE_ROUND_UP && level_size * b < toplevel_size)
+ level_size += 1;
+
+ return std::max(level_size, 1);
+}
+
+static int DecodeTiledLevel(EXRImage* exr_image, const EXRHeader* exr_header,
+ const OffsetData& offset_data,
+ const std::vector<size_t>& channel_offset_list,
+ int pixel_data_size,
+ const unsigned char* head, const size_t size,
+ std::string* err) {
+ int num_channels = exr_header->num_channels;
+
+ int level_index = LevelIndex(exr_image->level_x, exr_image->level_y, exr_header->tile_level_mode, offset_data.num_x_levels);
+ int num_y_tiles = (int)offset_data.offsets[level_index].size();
+ assert(num_y_tiles);
+ int num_x_tiles = (int)offset_data.offsets[level_index][0].size();
+ assert(num_x_tiles);
+ int num_tiles = num_x_tiles * num_y_tiles;
+
+ int err_code = TINYEXR_SUCCESS;
+
+ enum {
+ EF_SUCCESS = 0,
+ EF_INVALID_DATA = 1,
+ EF_INSUFFICIENT_DATA = 2,
+ EF_FAILED_TO_DECODE = 4
+ };
+#if TINYEXR_HAS_CXX11 && (TINYEXR_USE_THREAD > 0)
+ std::atomic<unsigned> error_flag(EF_SUCCESS);
+#else
+ unsigned error_flag(EF_SUCCESS);
+#endif
+
+ // Although the spec says : "...the data window is subdivided into an array of smaller rectangles...",
+ // the IlmImf library allows the dimensions of the tile to be larger (or equal) than the dimensions of the data window.
+#if 0
+ if ((exr_header->tile_size_x > exr_image->width || exr_header->tile_size_y > exr_image->height) &&
+ exr_image->level_x == 0 && exr_image->level_y == 0) {
+ if (err) {
+ (*err) += "Failed to decode tile data.\n";
+ }
+ err_code = TINYEXR_ERROR_INVALID_DATA;
+ }
+#endif
+ exr_image->tiles = static_cast<EXRTile*>(
+ calloc(sizeof(EXRTile), static_cast<size_t>(num_tiles)));
+
+#if TINYEXR_HAS_CXX11 && (TINYEXR_USE_THREAD > 0)
+ std::vector<std::thread> workers;
+ std::atomic<int> tile_count(0);
+
+ int num_threads = std::max(1, int(std::thread::hardware_concurrency()));
+ if (num_threads > int(num_tiles)) {
+ num_threads = int(num_tiles);
+ }
+
+ for (int t = 0; t < num_threads; t++) {
+ workers.emplace_back(std::thread([&]()
+ {
+ int tile_idx = 0;
+ while ((tile_idx = tile_count++) < num_tiles) {
+
+#else
+#if TINYEXR_USE_OPENMP
+#pragma omp parallel for
+#endif
+ for (int tile_idx = 0; tile_idx < num_tiles; tile_idx++) {
+#endif
+ // Allocate memory for each tile.
+ exr_image->tiles[tile_idx].images = tinyexr::AllocateImage(
+ num_channels, exr_header->channels,
+ exr_header->requested_pixel_types, exr_header->tile_size_x,
+ exr_header->tile_size_y);
+
+ int x_tile = tile_idx % num_x_tiles;
+ int y_tile = tile_idx / num_x_tiles;
+ // 16 byte: tile coordinates
+ // 4 byte : data size
+ // ~ : data(uncompressed or compressed)
+ tinyexr::tinyexr_uint64 offset = offset_data.offsets[level_index][y_tile][x_tile];
+ if (offset + sizeof(int) * 5 > size) {
+ // Insufficient data size.
+ error_flag |= EF_INSUFFICIENT_DATA;
+ continue;
+ }
+
+ size_t data_size =
+ size_t(size - (offset + sizeof(int) * 5));
+ const unsigned char* data_ptr =
+ reinterpret_cast<const unsigned char*>(head + offset);
+
+ int tile_coordinates[4];
+ memcpy(tile_coordinates, data_ptr, sizeof(int) * 4);
+ tinyexr::swap4(&tile_coordinates[0]);
+ tinyexr::swap4(&tile_coordinates[1]);
+ tinyexr::swap4(&tile_coordinates[2]);
+ tinyexr::swap4(&tile_coordinates[3]);
+
+ if (tile_coordinates[2] != exr_image->level_x) {
+ // Invalid data.
+ error_flag |= EF_INVALID_DATA;
+ continue;
+ }
+ if (tile_coordinates[3] != exr_image->level_y) {
+ // Invalid data.
+ error_flag |= EF_INVALID_DATA;
+ continue;
+ }
+
+ int data_len;
+ memcpy(&data_len, data_ptr + 16,
+ sizeof(int)); // 16 = sizeof(tile_coordinates)
+ tinyexr::swap4(&data_len);
+
+ if (data_len < 2 || size_t(data_len) > data_size) {
+ // Insufficient data size.
+ error_flag |= EF_INSUFFICIENT_DATA;
+ continue;
+ }
+
+ // Move to data addr: 20 = 16 + 4;
+ data_ptr += 20;
+ bool ret = tinyexr::DecodeTiledPixelData(
+ exr_image->tiles[tile_idx].images,
+ &(exr_image->tiles[tile_idx].width),
+ &(exr_image->tiles[tile_idx].height),
+ exr_header->requested_pixel_types, data_ptr,
+ static_cast<size_t>(data_len), exr_header->compression_type,
+ exr_header->line_order,
+ exr_image->width, exr_image->height,
+ tile_coordinates[0], tile_coordinates[1], exr_header->tile_size_x,
+ exr_header->tile_size_y, static_cast<size_t>(pixel_data_size),
+ static_cast<size_t>(exr_header->num_custom_attributes),
+ exr_header->custom_attributes,
+ static_cast<size_t>(exr_header->num_channels),
+ exr_header->channels, channel_offset_list);
+
+ if (!ret) {
+ // Failed to decode tile data.
+ error_flag |= EF_FAILED_TO_DECODE;
+ }
+
+ exr_image->tiles[tile_idx].offset_x = tile_coordinates[0];
+ exr_image->tiles[tile_idx].offset_y = tile_coordinates[1];
+ exr_image->tiles[tile_idx].level_x = tile_coordinates[2];
+ exr_image->tiles[tile_idx].level_y = tile_coordinates[3];
+
+#if TINYEXR_HAS_CXX11 && (TINYEXR_USE_THREAD > 0)
+ }
+ }));
+ } // num_thread loop
+
+ for (auto& t : workers) {
+ t.join();
+ }
+
+#else
+ } // parallel for
+#endif
+
+ // Even in the event of an error, the reserved memory may be freed.
+ exr_image->num_channels = num_channels;
+ exr_image->num_tiles = static_cast<int>(num_tiles);
+
+ if (error_flag) err_code = TINYEXR_ERROR_INVALID_DATA;
+ if (err) {
+ if (error_flag & EF_INSUFFICIENT_DATA) {
+ (*err) += "Insufficient data length.\n";
+ }
+ if (error_flag & EF_FAILED_TO_DECODE) {
+ (*err) += "Failed to decode tile data.\n";
+ }
+ }
+ return err_code;
+}
+
static int DecodeChunk(EXRImage *exr_image, const EXRHeader *exr_header,
- const std::vector<tinyexr::tinyexr_uint64> &offsets,
+ const OffsetData& offset_data,
const unsigned char *head, const size_t size,
std::string *err) {
int num_channels = exr_header->num_channels;
@@ -10971,8 +4851,7 @@ static int DecodeChunk(EXRImage *exr_image, const EXRHeader *exr_header,
// Do not allow too large data_width and data_height. header invalid?
{
- const int threshold = 1024 * 8192; // heuristics
- if ((data_width > threshold) || (data_height > threshold)) {
+ if ((data_width > TINYEXR_DIMENSION_THRESHOLD) || (data_height > TINYEXR_DIMENSION_THRESHOLD)) {
if (err) {
std::stringstream ss;
ss << "data_with or data_height too large. data_width: " << data_width
@@ -10982,8 +4861,21 @@ static int DecodeChunk(EXRImage *exr_image, const EXRHeader *exr_header,
}
return TINYEXR_ERROR_INVALID_DATA;
}
+ if (exr_header->tiled) {
+ if ((exr_header->tile_size_x > TINYEXR_DIMENSION_THRESHOLD) || (exr_header->tile_size_y > TINYEXR_DIMENSION_THRESHOLD)) {
+ if (err) {
+ std::stringstream ss;
+ ss << "tile with or tile height too large. tile width: " << exr_header->tile_size_x
+ << ", "
+ << "tile height = " << exr_header->tile_size_y << std::endl;
+ (*err) += ss.str();
+ }
+ return TINYEXR_ERROR_INVALID_DATA;
+ }
+ }
}
+ const std::vector<tinyexr::tinyexr_uint64>& offsets = offset_data.offsets[0][0];
size_t num_blocks = offsets.size();
std::vector<size_t> channel_offset_list;
@@ -10998,7 +4890,11 @@ static int DecodeChunk(EXRImage *exr_image, const EXRHeader *exr_header,
return TINYEXR_ERROR_INVALID_DATA;
}
- bool invalid_data = false; // TODO(LTE): Use atomic lock for MT safety.
+#if TINYEXR_HAS_CXX11 && (TINYEXR_USE_THREAD > 0)
+ std::atomic<bool> invalid_data(false);
+#else
+ bool invalid_data(false);
+#endif
if (exr_header->tiled) {
// value check
@@ -11019,136 +4915,60 @@ static int DecodeChunk(EXRImage *exr_image, const EXRHeader *exr_header,
}
return TINYEXR_ERROR_INVALID_HEADER;
}
-
- size_t num_tiles = offsets.size(); // = # of blocks
-
- exr_image->tiles = static_cast<EXRTile *>(
- calloc(sizeof(EXRTile), static_cast<size_t>(num_tiles)));
-
- int err_code = TINYEXR_SUCCESS;
-
-#if (__cplusplus > 199711L) && (TINYEXR_USE_THREAD > 0)
-
- std::vector<std::thread> workers;
- std::atomic<size_t> tile_count(0);
-
- int num_threads = std::max(1, int(std::thread::hardware_concurrency()));
- if (num_threads > int(num_tiles)) {
- num_threads = int(num_tiles);
- }
-
- for (int t = 0; t < num_threads; t++) {
- workers.emplace_back(std::thread([&]() {
- size_t tile_idx = 0;
- while ((tile_idx = tile_count++) < num_tiles) {
-
-#else
- for (size_t tile_idx = 0; tile_idx < num_tiles; tile_idx++) {
-#endif
- // Allocate memory for each tile.
- exr_image->tiles[tile_idx].images = tinyexr::AllocateImage(
- num_channels, exr_header->channels,
- exr_header->requested_pixel_types, exr_header->tile_size_x,
- exr_header->tile_size_y);
-
- // 16 byte: tile coordinates
- // 4 byte : data size
- // ~ : data(uncompressed or compressed)
- if (offsets[tile_idx] + sizeof(int) * 5 > size) {
- // TODO(LTE): atomic
- if (err) {
- (*err) += "Insufficient data size.\n";
- }
- err_code = TINYEXR_ERROR_INVALID_DATA;
- break;
- }
-
- size_t data_size =
- size_t(size - (offsets[tile_idx] + sizeof(int) * 5));
- const unsigned char *data_ptr =
- reinterpret_cast<const unsigned char *>(head + offsets[tile_idx]);
-
- int tile_coordinates[4];
- memcpy(tile_coordinates, data_ptr, sizeof(int) * 4);
- tinyexr::swap4(&tile_coordinates[0]);
- tinyexr::swap4(&tile_coordinates[1]);
- tinyexr::swap4(&tile_coordinates[2]);
- tinyexr::swap4(&tile_coordinates[3]);
-
- // @todo{ LoD }
- if (tile_coordinates[2] != 0) {
- err_code = TINYEXR_ERROR_UNSUPPORTED_FEATURE;
- break;
- }
- if (tile_coordinates[3] != 0) {
- err_code = TINYEXR_ERROR_UNSUPPORTED_FEATURE;
- break;
- }
-
- int data_len;
- memcpy(&data_len, data_ptr + 16,
- sizeof(int)); // 16 = sizeof(tile_coordinates)
- tinyexr::swap4(&data_len);
-
- if (data_len < 4 || size_t(data_len) > data_size) {
- // TODO(LTE): atomic
- if (err) {
- (*err) += "Insufficient data length.\n";
- }
- err_code = TINYEXR_ERROR_INVALID_DATA;
- break;
- }
-
- // Move to data addr: 20 = 16 + 4;
- data_ptr += 20;
-
- bool ret = tinyexr::DecodeTiledPixelData(
- exr_image->tiles[tile_idx].images,
- &(exr_image->tiles[tile_idx].width),
- &(exr_image->tiles[tile_idx].height),
- exr_header->requested_pixel_types, data_ptr,
- static_cast<size_t>(data_len), exr_header->compression_type,
- exr_header->line_order, data_width, data_height,
- tile_coordinates[0], tile_coordinates[1], exr_header->tile_size_x,
- exr_header->tile_size_y, static_cast<size_t>(pixel_data_size),
- static_cast<size_t>(exr_header->num_custom_attributes),
- exr_header->custom_attributes,
- static_cast<size_t>(exr_header->num_channels),
- exr_header->channels, channel_offset_list);
-
- if (!ret) {
- // TODO(LTE): atomic
- if (err) {
- (*err) += "Failed to decode tile data.\n";
- }
- err_code = TINYEXR_ERROR_INVALID_DATA;
+ if (exr_header->tile_level_mode != TINYEXR_TILE_RIPMAP_LEVELS) {
+ EXRImage* level_image = NULL;
+ for (int level = 0; level < offset_data.num_x_levels; ++level) {
+ if (!level_image) {
+ level_image = exr_image;
+ } else {
+ level_image->next_level = new EXRImage;
+ InitEXRImage(level_image->next_level);
+ level_image = level_image->next_level;
+ }
+ level_image->width =
+ LevelSize(exr_header->data_window.max_x - exr_header->data_window.min_x + 1, level, exr_header->tile_rounding_mode);
+ level_image->height =
+ LevelSize(exr_header->data_window.max_y - exr_header->data_window.min_y + 1, level, exr_header->tile_rounding_mode);
+ level_image->level_x = level;
+ level_image->level_y = level;
+
+ int ret = DecodeTiledLevel(level_image, exr_header,
+ offset_data,
+ channel_offset_list,
+ pixel_data_size,
+ head, size,
+ err);
+ if (ret != TINYEXR_SUCCESS) return ret;
+ }
+ } else {
+ EXRImage* level_image = NULL;
+ for (int level_y = 0; level_y < offset_data.num_y_levels; ++level_y)
+ for (int level_x = 0; level_x < offset_data.num_x_levels; ++level_x) {
+ if (!level_image) {
+ level_image = exr_image;
+ } else {
+ level_image->next_level = new EXRImage;
+ InitEXRImage(level_image->next_level);
+ level_image = level_image->next_level;
}
- exr_image->tiles[tile_idx].offset_x = tile_coordinates[0];
- exr_image->tiles[tile_idx].offset_y = tile_coordinates[1];
- exr_image->tiles[tile_idx].level_x = tile_coordinates[2];
- exr_image->tiles[tile_idx].level_y = tile_coordinates[3];
-
-#if (__cplusplus > 199711L) && (TINYEXR_USE_THREAD > 0)
+ level_image->width =
+ LevelSize(exr_header->data_window.max_x - exr_header->data_window.min_x + 1, level_x, exr_header->tile_rounding_mode);
+ level_image->height =
+ LevelSize(exr_header->data_window.max_y - exr_header->data_window.min_y + 1, level_y, exr_header->tile_rounding_mode);
+ level_image->level_x = level_x;
+ level_image->level_y = level_y;
+
+ int ret = DecodeTiledLevel(level_image, exr_header,
+ offset_data,
+ channel_offset_list,
+ pixel_data_size,
+ head, size,
+ err);
+ if (ret != TINYEXR_SUCCESS) return ret;
}
- }));
- } // num_thread loop
-
- for (auto &t : workers) {
- t.join();
}
-
-#else
- }
-#endif
-
- if (err_code != TINYEXR_SUCCESS) {
- return err_code;
- }
-
- exr_image->num_tiles = static_cast<int>(num_tiles);
} else { // scanline format
-
// Don't allow too large image(256GB * pixel_data_size or more). Workaround
// for #104.
size_t total_data_len =
@@ -11170,7 +4990,7 @@ static int DecodeChunk(EXRImage *exr_image, const EXRHeader *exr_header,
num_channels, exr_header->channels, exr_header->requested_pixel_types,
data_width, data_height);
-#if (__cplusplus > 199711L) && (TINYEXR_USE_THREAD > 0)
+#if TINYEXR_HAS_CXX11 && (TINYEXR_USE_THREAD > 0)
std::vector<std::thread> workers;
std::atomic<int> y_count(0);
@@ -11271,7 +5091,7 @@ static int DecodeChunk(EXRImage *exr_image, const EXRHeader *exr_header,
}
}
-#if (__cplusplus > 199711L) && (TINYEXR_USE_THREAD > 0)
+#if TINYEXR_HAS_CXX11 && (TINYEXR_USE_THREAD > 0)
}
}));
}
@@ -11286,7 +5106,6 @@ static int DecodeChunk(EXRImage *exr_image, const EXRHeader *exr_header,
if (invalid_data) {
if (err) {
- std::stringstream ss;
(*err) += "Invalid data found when decoding pixels.\n";
}
return TINYEXR_ERROR_INVALID_DATA;
@@ -11343,6 +5162,370 @@ static bool ReconstructLineOffsets(
return true;
}
+
+static int FloorLog2(unsigned x) {
+ //
+ // For x > 0, floorLog2(y) returns floor(log(x)/log(2)).
+ //
+ int y = 0;
+ while (x > 1) {
+ y += 1;
+ x >>= 1u;
+ }
+ return y;
+}
+
+
+static int CeilLog2(unsigned x) {
+ //
+ // For x > 0, ceilLog2(y) returns ceil(log(x)/log(2)).
+ //
+ int y = 0;
+ int r = 0;
+ while (x > 1) {
+ if (x & 1)
+ r = 1;
+
+ y += 1;
+ x >>= 1u;
+ }
+ return y + r;
+}
+
+static int RoundLog2(int x, int tile_rounding_mode) {
+ return (tile_rounding_mode == TINYEXR_TILE_ROUND_DOWN) ? FloorLog2(static_cast<unsigned>(x)) : CeilLog2(static_cast<unsigned>(x));
+}
+
+static int CalculateNumXLevels(const EXRHeader* exr_header) {
+ int min_x = exr_header->data_window.min_x;
+ int max_x = exr_header->data_window.max_x;
+ int min_y = exr_header->data_window.min_y;
+ int max_y = exr_header->data_window.max_y;
+
+ int num = 0;
+ switch (exr_header->tile_level_mode) {
+ case TINYEXR_TILE_ONE_LEVEL:
+
+ num = 1;
+ break;
+
+ case TINYEXR_TILE_MIPMAP_LEVELS:
+
+ {
+ int w = max_x - min_x + 1;
+ int h = max_y - min_y + 1;
+ num = RoundLog2(std::max(w, h), exr_header->tile_rounding_mode) + 1;
+ }
+ break;
+
+ case TINYEXR_TILE_RIPMAP_LEVELS:
+
+ {
+ int w = max_x - min_x + 1;
+ num = RoundLog2(w, exr_header->tile_rounding_mode) + 1;
+ }
+ break;
+
+ default:
+
+ assert(false);
+ }
+
+ return num;
+}
+
+static int CalculateNumYLevels(const EXRHeader* exr_header) {
+ int min_x = exr_header->data_window.min_x;
+ int max_x = exr_header->data_window.max_x;
+ int min_y = exr_header->data_window.min_y;
+ int max_y = exr_header->data_window.max_y;
+ int num = 0;
+
+ switch (exr_header->tile_level_mode) {
+ case TINYEXR_TILE_ONE_LEVEL:
+
+ num = 1;
+ break;
+
+ case TINYEXR_TILE_MIPMAP_LEVELS:
+
+ {
+ int w = max_x - min_x + 1;
+ int h = max_y - min_y + 1;
+ num = RoundLog2(std::max(w, h), exr_header->tile_rounding_mode) + 1;
+ }
+ break;
+
+ case TINYEXR_TILE_RIPMAP_LEVELS:
+
+ {
+ int h = max_y - min_y + 1;
+ num = RoundLog2(h, exr_header->tile_rounding_mode) + 1;
+ }
+ break;
+
+ default:
+
+ assert(false);
+ }
+
+ return num;
+}
+
+static void CalculateNumTiles(std::vector<int>& numTiles,
+ int toplevel_size,
+ int size,
+ int tile_rounding_mode) {
+ for (unsigned i = 0; i < numTiles.size(); i++) {
+ int l = LevelSize(toplevel_size, i, tile_rounding_mode);
+ assert(l <= std::numeric_limits<int>::max() - size + 1);
+
+ numTiles[i] = (l + size - 1) / size;
+ }
+}
+
+static void PrecalculateTileInfo(std::vector<int>& num_x_tiles,
+ std::vector<int>& num_y_tiles,
+ const EXRHeader* exr_header) {
+ int min_x = exr_header->data_window.min_x;
+ int max_x = exr_header->data_window.max_x;
+ int min_y = exr_header->data_window.min_y;
+ int max_y = exr_header->data_window.max_y;
+
+ int num_x_levels = CalculateNumXLevels(exr_header);
+ int num_y_levels = CalculateNumYLevels(exr_header);
+
+ num_x_tiles.resize(num_x_levels);
+ num_y_tiles.resize(num_y_levels);
+
+ CalculateNumTiles(num_x_tiles,
+ max_x - min_x + 1,
+ exr_header->tile_size_x,
+ exr_header->tile_rounding_mode);
+
+ CalculateNumTiles(num_y_tiles,
+ max_y - min_y + 1,
+ exr_header->tile_size_y,
+ exr_header->tile_rounding_mode);
+}
+
+static void InitSingleResolutionOffsets(OffsetData& offset_data, size_t num_blocks) {
+ offset_data.offsets.resize(1);
+ offset_data.offsets[0].resize(1);
+ offset_data.offsets[0][0].resize(num_blocks);
+ offset_data.num_x_levels = 1;
+ offset_data.num_y_levels = 1;
+}
+
+// Return sum of tile blocks.
+static int InitTileOffsets(OffsetData& offset_data,
+ const EXRHeader* exr_header,
+ const std::vector<int>& num_x_tiles,
+ const std::vector<int>& num_y_tiles) {
+ int num_tile_blocks = 0;
+ offset_data.num_x_levels = static_cast<int>(num_x_tiles.size());
+ offset_data.num_y_levels = static_cast<int>(num_y_tiles.size());
+ switch (exr_header->tile_level_mode) {
+ case TINYEXR_TILE_ONE_LEVEL:
+ case TINYEXR_TILE_MIPMAP_LEVELS:
+ assert(offset_data.num_x_levels == offset_data.num_y_levels);
+ offset_data.offsets.resize(offset_data.num_x_levels);
+
+ for (unsigned int l = 0; l < offset_data.offsets.size(); ++l) {
+ offset_data.offsets[l].resize(num_y_tiles[l]);
+
+ for (unsigned int dy = 0; dy < offset_data.offsets[l].size(); ++dy) {
+ offset_data.offsets[l][dy].resize(num_x_tiles[l]);
+ num_tile_blocks += num_x_tiles[l];
+ }
+ }
+ break;
+
+ case TINYEXR_TILE_RIPMAP_LEVELS:
+
+ offset_data.offsets.resize(static_cast<size_t>(offset_data.num_x_levels) * static_cast<size_t>(offset_data.num_y_levels));
+
+ for (int ly = 0; ly < offset_data.num_y_levels; ++ly) {
+ for (int lx = 0; lx < offset_data.num_x_levels; ++lx) {
+ int l = ly * offset_data.num_x_levels + lx;
+ offset_data.offsets[l].resize(num_y_tiles[ly]);
+
+ for (size_t dy = 0; dy < offset_data.offsets[l].size(); ++dy) {
+ offset_data.offsets[l][dy].resize(num_x_tiles[lx]);
+ num_tile_blocks += num_x_tiles[lx];
+ }
+ }
+ }
+ break;
+
+ default:
+ assert(false);
+ }
+ return num_tile_blocks;
+}
+
+static bool IsAnyOffsetsAreInvalid(const OffsetData& offset_data) {
+ for (unsigned int l = 0; l < offset_data.offsets.size(); ++l)
+ for (unsigned int dy = 0; dy < offset_data.offsets[l].size(); ++dy)
+ for (unsigned int dx = 0; dx < offset_data.offsets[l][dy].size(); ++dx)
+ if (reinterpret_cast<const tinyexr::tinyexr_int64&>(offset_data.offsets[l][dy][dx]) <= 0)
+ return true;
+
+ return false;
+}
+
+static bool isValidTile(const EXRHeader* exr_header,
+ const OffsetData& offset_data,
+ int dx, int dy, int lx, int ly) {
+ if (lx < 0 || ly < 0 || dx < 0 || dy < 0) return false;
+ int num_x_levels = offset_data.num_x_levels;
+ int num_y_levels = offset_data.num_y_levels;
+ switch (exr_header->tile_level_mode) {
+ case TINYEXR_TILE_ONE_LEVEL:
+
+ if (lx == 0 &&
+ ly == 0 &&
+ offset_data.offsets.size() > 0 &&
+ offset_data.offsets[0].size() > static_cast<size_t>(dy) &&
+ offset_data.offsets[0][dy].size() > static_cast<size_t>(dx)) {
+ return true;
+ }
+
+ break;
+
+ case TINYEXR_TILE_MIPMAP_LEVELS:
+
+ if (lx < num_x_levels &&
+ ly < num_y_levels &&
+ offset_data.offsets.size() > static_cast<size_t>(lx) &&
+ offset_data.offsets[lx].size() > static_cast<size_t>(dy) &&
+ offset_data.offsets[lx][dy].size() > static_cast<size_t>(dx)) {
+ return true;
+ }
+
+ break;
+
+ case TINYEXR_TILE_RIPMAP_LEVELS:
+ {
+ size_t idx = static_cast<size_t>(lx) + static_cast<size_t>(ly)* static_cast<size_t>(num_x_levels);
+ if (lx < num_x_levels &&
+ ly < num_y_levels &&
+ (offset_data.offsets.size() > idx) &&
+ offset_data.offsets[idx].size() > static_cast<size_t>(dy) &&
+ offset_data.offsets[idx][dy].size() > static_cast<size_t>(dx)) {
+ return true;
+ }
+ }
+
+ break;
+
+ default:
+
+ return false;
+ }
+
+ return false;
+}
+
+static void ReconstructTileOffsets(OffsetData& offset_data,
+ const EXRHeader* exr_header,
+ const unsigned char* head, const unsigned char* marker, const size_t /*size*/,
+ bool isMultiPartFile,
+ bool isDeep) {
+ int numXLevels = offset_data.num_x_levels;
+ for (unsigned int l = 0; l < offset_data.offsets.size(); ++l) {
+ for (unsigned int dy = 0; dy < offset_data.offsets[l].size(); ++dy) {
+ for (unsigned int dx = 0; dx < offset_data.offsets[l][dy].size(); ++dx) {
+ tinyexr::tinyexr_uint64 tileOffset = marker - head;
+
+ if (isMultiPartFile) {
+ //int partNumber;
+ marker += sizeof(int);
+ }
+
+ int tileX;
+ memcpy(&tileX, marker, sizeof(int));
+ tinyexr::swap4(&tileX);
+ marker += sizeof(int);
+
+ int tileY;
+ memcpy(&tileY, marker, sizeof(int));
+ tinyexr::swap4(&tileY);
+ marker += sizeof(int);
+
+ int levelX;
+ memcpy(&levelX, marker, sizeof(int));
+ tinyexr::swap4(&levelX);
+ marker += sizeof(int);
+
+ int levelY;
+ memcpy(&levelY, marker, sizeof(int));
+ tinyexr::swap4(&levelY);
+ marker += sizeof(int);
+
+ if (isDeep) {
+ tinyexr::tinyexr_int64 packed_offset_table_size;
+ memcpy(&packed_offset_table_size, marker, sizeof(tinyexr::tinyexr_int64));
+ tinyexr::swap8(reinterpret_cast<tinyexr::tinyexr_uint64*>(&packed_offset_table_size));
+ marker += sizeof(tinyexr::tinyexr_int64);
+
+ tinyexr::tinyexr_int64 packed_sample_size;
+ memcpy(&packed_sample_size, marker, sizeof(tinyexr::tinyexr_int64));
+ tinyexr::swap8(reinterpret_cast<tinyexr::tinyexr_uint64*>(&packed_sample_size));
+ marker += sizeof(tinyexr::tinyexr_int64);
+
+ // next Int64 is unpacked sample size - skip that too
+ marker += packed_offset_table_size + packed_sample_size + 8;
+
+ } else {
+
+ int dataSize;
+ memcpy(&dataSize, marker, sizeof(int));
+ tinyexr::swap4(&dataSize);
+ marker += sizeof(int);
+ marker += dataSize;
+ }
+
+ if (!isValidTile(exr_header, offset_data,
+ tileX, tileY, levelX, levelY))
+ return;
+
+ int level_idx = LevelIndex(levelX, levelY, exr_header->tile_level_mode, numXLevels);
+ offset_data.offsets[level_idx][tileY][tileX] = tileOffset;
+ }
+ }
+ }
+}
+
+// marker output is also
+static int ReadOffsets(OffsetData& offset_data,
+ const unsigned char* head,
+ const unsigned char*& marker,
+ const size_t size,
+ const char** err) {
+ for (unsigned int l = 0; l < offset_data.offsets.size(); ++l) {
+ for (unsigned int dy = 0; dy < offset_data.offsets[l].size(); ++dy) {
+ for (unsigned int dx = 0; dx < offset_data.offsets[l][dy].size(); ++dx) {
+ tinyexr::tinyexr_uint64 offset;
+ if ((marker + sizeof(tinyexr_uint64)) >= (head + size)) {
+ tinyexr::SetErrorMessage("Insufficient data size in offset table.", err);
+ return TINYEXR_ERROR_INVALID_DATA;
+ }
+
+ memcpy(&offset, marker, sizeof(tinyexr::tinyexr_uint64));
+ tinyexr::swap8(&offset);
+ if (offset >= size) {
+ tinyexr::SetErrorMessage("Invalid offset value in DecodeEXRImage.", err);
+ return TINYEXR_ERROR_INVALID_DATA;
+ }
+ marker += sizeof(tinyexr::tinyexr_uint64); // = 8
+ offset_data.offsets[l][dy][dx] = offset;
+ }
+ }
+ }
+ return TINYEXR_SUCCESS;
+}
+
static int DecodeEXRImage(EXRImage *exr_image, const EXRHeader *exr_header,
const unsigned char *head,
const unsigned char *marker, const size_t size,
@@ -11383,100 +5566,114 @@ static int DecodeEXRImage(EXRImage *exr_image, const EXRHeader *exr_header,
// Do not allow too large data_width and data_height. header invalid?
{
- const int threshold = 1024 * 8192; // heuristics
- if (data_width > threshold) {
+ if (data_width > TINYEXR_DIMENSION_THRESHOLD) {
tinyexr::SetErrorMessage("data width too large.", err);
return TINYEXR_ERROR_INVALID_DATA;
}
- if (data_height > threshold) {
+ if (data_height > TINYEXR_DIMENSION_THRESHOLD) {
tinyexr::SetErrorMessage("data height too large.", err);
return TINYEXR_ERROR_INVALID_DATA;
}
}
- // Read offset tables.
- size_t num_blocks = 0;
-
- if (exr_header->chunk_count > 0) {
- // Use `chunkCount` attribute.
- num_blocks = static_cast<size_t>(exr_header->chunk_count);
- } else if (exr_header->tiled) {
- // @todo { LoD }
- if (exr_header->tile_size_x > data_width || exr_header->tile_size_x < 1 ||
- exr_header->tile_size_y > data_height || exr_header->tile_size_y < 1) {
- tinyexr::SetErrorMessage("tile sizes are invalid.", err);
+ if (exr_header->tiled) {
+ if (exr_header->tile_size_x > TINYEXR_DIMENSION_THRESHOLD) {
+ tinyexr::SetErrorMessage("tile width too large.", err);
return TINYEXR_ERROR_INVALID_DATA;
}
-
- size_t num_x_tiles = static_cast<size_t>(data_width) /
- static_cast<size_t>(exr_header->tile_size_x);
- if (num_x_tiles * static_cast<size_t>(exr_header->tile_size_x) <
- static_cast<size_t>(data_width)) {
- num_x_tiles++;
+ if (exr_header->tile_size_y > TINYEXR_DIMENSION_THRESHOLD) {
+ tinyexr::SetErrorMessage("tile height too large.", err);
+ return TINYEXR_ERROR_INVALID_DATA;
}
- size_t num_y_tiles = static_cast<size_t>(data_height) /
- static_cast<size_t>(exr_header->tile_size_y);
- if (num_y_tiles * static_cast<size_t>(exr_header->tile_size_y) <
- static_cast<size_t>(data_height)) {
- num_y_tiles++;
+ }
+
+ // Read offset tables.
+ OffsetData offset_data;
+ size_t num_blocks = 0;
+ // For a multi-resolution image, the size of the offset table will be calculated from the other attributes of the header.
+ // If chunk_count > 0 then chunk_count must be equal to the calculated tile count.
+ if (exr_header->tiled) {
+ {
+ std::vector<int> num_x_tiles, num_y_tiles;
+ PrecalculateTileInfo(num_x_tiles, num_y_tiles, exr_header);
+ num_blocks = InitTileOffsets(offset_data, exr_header, num_x_tiles, num_y_tiles);
+ if (exr_header->chunk_count > 0) {
+ if (exr_header->chunk_count != static_cast<int>(num_blocks)) {
+ tinyexr::SetErrorMessage("Invalid offset table size.", err);
+ return TINYEXR_ERROR_INVALID_DATA;
+ }
+ }
}
- num_blocks = num_x_tiles * num_y_tiles;
+ int ret = ReadOffsets(offset_data, head, marker, size, err);
+ if (ret != TINYEXR_SUCCESS) return ret;
+ if (IsAnyOffsetsAreInvalid(offset_data)) {
+ ReconstructTileOffsets(offset_data, exr_header,
+ head, marker, size,
+ exr_header->multipart, exr_header->non_image);
+ }
+ } else if (exr_header->chunk_count > 0) {
+ // Use `chunkCount` attribute.
+ num_blocks = static_cast<size_t>(exr_header->chunk_count);
+ InitSingleResolutionOffsets(offset_data, num_blocks);
} else {
num_blocks = static_cast<size_t>(data_height) /
- static_cast<size_t>(num_scanline_blocks);
+ static_cast<size_t>(num_scanline_blocks);
if (num_blocks * static_cast<size_t>(num_scanline_blocks) <
- static_cast<size_t>(data_height)) {
+ static_cast<size_t>(data_height)) {
num_blocks++;
}
- }
-
- std::vector<tinyexr::tinyexr_uint64> offsets(num_blocks);
-
- for (size_t y = 0; y < num_blocks; y++) {
- tinyexr::tinyexr_uint64 offset;
- // Issue #81
- if ((marker + sizeof(tinyexr_uint64)) >= (head + size)) {
- tinyexr::SetErrorMessage("Insufficient data size in offset table.", err);
- return TINYEXR_ERROR_INVALID_DATA;
- }
- memcpy(&offset, marker, sizeof(tinyexr::tinyexr_uint64));
- tinyexr::swap8(&offset);
- if (offset >= size) {
- tinyexr::SetErrorMessage("Invalid offset value in DecodeEXRImage.", err);
- return TINYEXR_ERROR_INVALID_DATA;
- }
- marker += sizeof(tinyexr::tinyexr_uint64); // = 8
- offsets[y] = offset;
+ InitSingleResolutionOffsets(offset_data, num_blocks);
}
- // If line offsets are invalid, we try to reconstruct it.
- // See OpenEXR/IlmImf/ImfScanLineInputFile.cpp::readLineOffsets() for details.
- for (size_t y = 0; y < num_blocks; y++) {
- if (offsets[y] <= 0) {
- // TODO(syoyo) Report as warning?
- // if (err) {
- // stringstream ss;
- // ss << "Incomplete lineOffsets." << std::endl;
- // (*err) += ss.str();
- //}
- bool ret =
+ if (!exr_header->tiled) {
+ std::vector<tinyexr::tinyexr_uint64>& offsets = offset_data.offsets[0][0];
+ for (size_t y = 0; y < num_blocks; y++) {
+ tinyexr::tinyexr_uint64 offset;
+ // Issue #81
+ if ((marker + sizeof(tinyexr_uint64)) >= (head + size)) {
+ tinyexr::SetErrorMessage("Insufficient data size in offset table.", err);
+ return TINYEXR_ERROR_INVALID_DATA;
+ }
+
+ memcpy(&offset, marker, sizeof(tinyexr::tinyexr_uint64));
+ tinyexr::swap8(&offset);
+ if (offset >= size) {
+ tinyexr::SetErrorMessage("Invalid offset value in DecodeEXRImage.", err);
+ return TINYEXR_ERROR_INVALID_DATA;
+ }
+ marker += sizeof(tinyexr::tinyexr_uint64); // = 8
+ offsets[y] = offset;
+ }
+
+ // If line offsets are invalid, we try to reconstruct it.
+ // See OpenEXR/IlmImf/ImfScanLineInputFile.cpp::readLineOffsets() for details.
+ for (size_t y = 0; y < num_blocks; y++) {
+ if (offsets[y] <= 0) {
+ // TODO(syoyo) Report as warning?
+ // if (err) {
+ // stringstream ss;
+ // ss << "Incomplete lineOffsets." << std::endl;
+ // (*err) += ss.str();
+ //}
+ bool ret =
ReconstructLineOffsets(&offsets, num_blocks, head, marker, size);
- if (ret) {
- // OK
- break;
- } else {
- tinyexr::SetErrorMessage(
+ if (ret) {
+ // OK
+ break;
+ } else {
+ tinyexr::SetErrorMessage(
"Cannot reconstruct lineOffset table in DecodeEXRImage.", err);
- return TINYEXR_ERROR_INVALID_DATA;
+ return TINYEXR_ERROR_INVALID_DATA;
+ }
}
}
}
{
std::string e;
- int ret = DecodeChunk(exr_image, exr_header, offsets, head, size, &e);
+ int ret = DecodeChunk(exr_image, exr_header, offset_data, head, size, &e);
if (ret != TINYEXR_SUCCESS) {
if (!e.empty()) {
@@ -11530,7 +5727,7 @@ struct LayerChannel {
};
static void ChannelsInLayer(const EXRHeader &exr_header,
- const std::string layer_name,
+ const std::string &layer_name,
std::vector<LayerChannel> &channels) {
channels.clear();
for (int c = 0; c < exr_header.num_channels; c++) {
@@ -11881,8 +6078,8 @@ int ParseEXRHeaderFromMemory(EXRHeader *exr_header, const EXRVersion *version,
ConvertHeader(exr_header, info);
- // transfoer `tiled` from version.
- exr_header->tiled = version->tiled;
+ exr_header->multipart = version->multipart ? 1 : 0;
+ exr_header->non_image = version->non_image ? 1 : 0;
return ret;
}
@@ -12087,7 +6284,7 @@ int LoadEXRImageFromFile(EXRImage *exr_image, const EXRHeader *exr_header,
FILE *fp = NULL;
#ifdef _WIN32
-#if defined(_MSC_VER) || defined(__MINGW32__) // MSVC, MinGW gcc or clang
+#if defined(_MSC_VER) || (defined(MINGW_HAS_SECURE_API) && MINGW_HAS_SECURE_API) // MSVC, MinGW GCC, or Clang.
errno_t errcode =
_wfopen_s(&fp, tinyexr::UTF8ToWchar(filename).c_str(), L"rb");
if (errcode != 0) {
@@ -12096,7 +6293,7 @@ int LoadEXRImageFromFile(EXRImage *exr_image, const EXRHeader *exr_header,
return TINYEXR_ERROR_CANT_OPEN_FILE;
}
#else
- // Unknown compiler
+ // Unknown compiler or MinGW without MINGW_HAS_SECURE_API.
fp = fopen(filename, "rb");
#endif
#else
@@ -12155,207 +6352,400 @@ int LoadEXRImageFromMemory(EXRImage *exr_image, const EXRHeader *exr_header,
err);
}
-size_t SaveEXRImageToMemory(const EXRImage *exr_image,
- const EXRHeader *exr_header,
- unsigned char **memory_out, const char **err) {
- if (exr_image == NULL || memory_out == NULL ||
- exr_header->compression_type < 0) {
- tinyexr::SetErrorMessage("Invalid argument for SaveEXRImageToMemory", err);
- return 0;
- }
+namespace tinyexr
+{
-#if !TINYEXR_USE_PIZ
- if (exr_header->compression_type == TINYEXR_COMPRESSIONTYPE_PIZ) {
- tinyexr::SetErrorMessage("PIZ compression is not supported in this build",
- err);
- return 0;
- }
-#endif
+// out_data must be allocated initially with the block-header size
+// of the current image(-part) type
+static bool EncodePixelData(/* out */ std::vector<unsigned char>& out_data,
+ const unsigned char* const* images,
+ int compression_type,
+ int /*line_order*/,
+ int width, // for tiled : tile.width
+ int /*height*/, // for tiled : header.tile_size_y
+ int x_stride, // for tiled : header.tile_size_x
+ int line_no, // for tiled : 0
+ int num_lines, // for tiled : tile.height
+ size_t pixel_data_size,
+ const std::vector<ChannelInfo>& channels,
+ const std::vector<size_t>& channel_offset_list,
+ const void* compression_param = 0) // zfp compression param
+{
+ size_t buf_size = static_cast<size_t>(width) *
+ static_cast<size_t>(num_lines) *
+ static_cast<size_t>(pixel_data_size);
+ //int last2bit = (buf_size & 3);
+ // buf_size must be multiple of four
+ //if(last2bit) buf_size += 4 - last2bit;
+ std::vector<unsigned char> buf(buf_size);
-#if !TINYEXR_USE_ZFP
- if (exr_header->compression_type == TINYEXR_COMPRESSIONTYPE_ZFP) {
- tinyexr::SetErrorMessage("ZFP compression is not supported in this build",
- err);
- return 0;
- }
-#endif
+ size_t start_y = static_cast<size_t>(line_no);
+ for (size_t c = 0; c < channels.size(); c++) {
+ if (channels[c].pixel_type == TINYEXR_PIXELTYPE_HALF) {
+ if (channels[c].requested_pixel_type == TINYEXR_PIXELTYPE_FLOAT) {
+ for (int y = 0; y < num_lines; y++) {
+ // Assume increasing Y
+ float *line_ptr = reinterpret_cast<float *>(&buf.at(
+ static_cast<size_t>(pixel_data_size * y * width) +
+ channel_offset_list[c] *
+ static_cast<size_t>(width)));
+ for (int x = 0; x < width; x++) {
+ tinyexr::FP16 h16;
+ h16.u = reinterpret_cast<const unsigned short * const *>(
+ images)[c][(y + start_y) * x_stride + x];
-#if TINYEXR_USE_ZFP
- for (size_t i = 0; i < static_cast<size_t>(exr_header->num_channels); i++) {
- if (exr_header->requested_pixel_types[i] != TINYEXR_PIXELTYPE_FLOAT) {
- tinyexr::SetErrorMessage("Pixel type must be FLOAT for ZFP compression",
- err);
- return 0;
+ tinyexr::FP32 f32 = half_to_float(h16);
+
+ tinyexr::swap4(&f32.f);
+
+ // line_ptr[x] = f32.f;
+ tinyexr::cpy4(line_ptr + x, &(f32.f));
+ }
+ }
+ } else if (channels[c].requested_pixel_type == TINYEXR_PIXELTYPE_HALF) {
+ for (int y = 0; y < num_lines; y++) {
+ // Assume increasing Y
+ unsigned short *line_ptr = reinterpret_cast<unsigned short *>(
+ &buf.at(static_cast<size_t>(pixel_data_size * y *
+ width) +
+ channel_offset_list[c] *
+ static_cast<size_t>(width)));
+ for (int x = 0; x < width; x++) {
+ unsigned short val = reinterpret_cast<const unsigned short * const *>(
+ images)[c][(y + start_y) * x_stride + x];
+
+ tinyexr::swap2(&val);
+
+ // line_ptr[x] = val;
+ tinyexr::cpy2(line_ptr + x, &val);
+ }
+ }
+ } else {
+ assert(0);
+ }
+
+ } else if (channels[c].pixel_type == TINYEXR_PIXELTYPE_FLOAT) {
+ if (channels[c].requested_pixel_type == TINYEXR_PIXELTYPE_HALF) {
+ for (int y = 0; y < num_lines; y++) {
+ // Assume increasing Y
+ unsigned short *line_ptr = reinterpret_cast<unsigned short *>(
+ &buf.at(static_cast<size_t>(pixel_data_size * y *
+ width) +
+ channel_offset_list[c] *
+ static_cast<size_t>(width)));
+ for (int x = 0; x < width; x++) {
+ tinyexr::FP32 f32;
+ f32.f = reinterpret_cast<const float * const *>(
+ images)[c][(y + start_y) * x_stride + x];
+
+ tinyexr::FP16 h16;
+ h16 = float_to_half_full(f32);
+
+ tinyexr::swap2(reinterpret_cast<unsigned short *>(&h16.u));
+
+ // line_ptr[x] = h16.u;
+ tinyexr::cpy2(line_ptr + x, &(h16.u));
+ }
+ }
+ } else if (channels[c].requested_pixel_type == TINYEXR_PIXELTYPE_FLOAT) {
+ for (int y = 0; y < num_lines; y++) {
+ // Assume increasing Y
+ float *line_ptr = reinterpret_cast<float *>(&buf.at(
+ static_cast<size_t>(pixel_data_size * y * width) +
+ channel_offset_list[c] *
+ static_cast<size_t>(width)));
+ for (int x = 0; x < width; x++) {
+ float val = reinterpret_cast<const float * const *>(
+ images)[c][(y + start_y) * x_stride + x];
+
+ tinyexr::swap4(&val);
+
+ // line_ptr[x] = val;
+ tinyexr::cpy4(line_ptr + x, &val);
+ }
+ }
+ } else {
+ assert(0);
+ }
+ } else if (channels[c].pixel_type == TINYEXR_PIXELTYPE_UINT) {
+ for (int y = 0; y < num_lines; y++) {
+ // Assume increasing Y
+ unsigned int *line_ptr = reinterpret_cast<unsigned int *>(&buf.at(
+ static_cast<size_t>(pixel_data_size * y * width) +
+ channel_offset_list[c] * static_cast<size_t>(width)));
+ for (int x = 0; x < width; x++) {
+ unsigned int val = reinterpret_cast<const unsigned int * const *>(
+ images)[c][(y + start_y) * x_stride + x];
+
+ tinyexr::swap4(&val);
+
+ // line_ptr[x] = val;
+ tinyexr::cpy4(line_ptr + x, &val);
+ }
+ }
}
}
+
+ if (compression_type == TINYEXR_COMPRESSIONTYPE_NONE) {
+ // 4 byte: scan line
+ // 4 byte: data size
+ // ~ : pixel data(uncompressed)
+ out_data.insert(out_data.end(), buf.begin(), buf.end());
+
+ } else if ((compression_type == TINYEXR_COMPRESSIONTYPE_ZIPS) ||
+ (compression_type == TINYEXR_COMPRESSIONTYPE_ZIP)) {
+#if TINYEXR_USE_MINIZ
+ std::vector<unsigned char> block(mz_compressBound(
+ static_cast<unsigned long>(buf.size())));
+#else
+ std::vector<unsigned char> block(
+ compressBound(static_cast<uLong>(buf.size())));
#endif
+ tinyexr::tinyexr_uint64 outSize = block.size();
- std::vector<unsigned char> memory;
+ tinyexr::CompressZip(&block.at(0), outSize,
+ reinterpret_cast<const unsigned char *>(&buf.at(0)),
+ static_cast<unsigned long>(buf.size()));
- // Header
- {
- const char header[] = {0x76, 0x2f, 0x31, 0x01};
- memory.insert(memory.end(), header, header + 4);
- }
+ // 4 byte: scan line
+ // 4 byte: data size
+ // ~ : pixel data(compressed)
+ unsigned int data_len = static_cast<unsigned int>(outSize); // truncate
- // Version, scanline.
- {
- char marker[] = {2, 0, 0, 0};
- /* @todo
- if (exr_header->tiled) {
- marker[1] |= 0x2;
- }
- if (exr_header->long_name) {
- marker[1] |= 0x4;
- }
- if (exr_header->non_image) {
- marker[1] |= 0x8;
- }
- if (exr_header->multipart) {
- marker[1] |= 0x10;
- }
- */
- memory.insert(memory.end(), marker, marker + 4);
- }
+ out_data.insert(out_data.end(), block.begin(), block.begin() + data_len);
- int num_scanlines = 1;
- if (exr_header->compression_type == TINYEXR_COMPRESSIONTYPE_ZIP) {
- num_scanlines = 16;
- } else if (exr_header->compression_type == TINYEXR_COMPRESSIONTYPE_PIZ) {
- num_scanlines = 32;
- } else if (exr_header->compression_type == TINYEXR_COMPRESSIONTYPE_ZFP) {
- num_scanlines = 16;
- }
+ } else if (compression_type == TINYEXR_COMPRESSIONTYPE_RLE) {
+ // (buf.size() * 3) / 2 would be enough.
+ std::vector<unsigned char> block((buf.size() * 3) / 2);
- // Write attributes.
- std::vector<tinyexr::ChannelInfo> channels;
- {
- std::vector<unsigned char> data;
+ tinyexr::tinyexr_uint64 outSize = block.size();
- for (int c = 0; c < exr_header->num_channels; c++) {
- tinyexr::ChannelInfo info;
- info.p_linear = 0;
- info.pixel_type = exr_header->requested_pixel_types[c];
- info.x_sampling = 1;
- info.y_sampling = 1;
- info.name = std::string(exr_header->channels[c].name);
- channels.push_back(info);
- }
+ tinyexr::CompressRle(&block.at(0), outSize,
+ reinterpret_cast<const unsigned char *>(&buf.at(0)),
+ static_cast<unsigned long>(buf.size()));
- tinyexr::WriteChannelInfo(data, channels);
+ // 4 byte: scan line
+ // 4 byte: data size
+ // ~ : pixel data(compressed)
+ unsigned int data_len = static_cast<unsigned int>(outSize); // truncate
+ out_data.insert(out_data.end(), block.begin(), block.begin() + data_len);
- tinyexr::WriteAttributeToMemory(&memory, "channels", "chlist", &data.at(0),
- static_cast<int>(data.size()));
- }
+ } else if (compression_type == TINYEXR_COMPRESSIONTYPE_PIZ) {
+#if TINYEXR_USE_PIZ
+ unsigned int bufLen =
+ 8192 + static_cast<unsigned int>(
+ 2 * static_cast<unsigned int>(
+ buf.size())); // @fixme { compute good bound. }
+ std::vector<unsigned char> block(bufLen);
+ unsigned int outSize = static_cast<unsigned int>(block.size());
+
+ CompressPiz(&block.at(0), &outSize,
+ reinterpret_cast<const unsigned char *>(&buf.at(0)),
+ buf.size(), channels, width, num_lines);
+
+ // 4 byte: scan line
+ // 4 byte: data size
+ // ~ : pixel data(compressed)
+ unsigned int data_len = outSize;
+ out_data.insert(out_data.end(), block.begin(), block.begin() + data_len);
- {
- int comp = exr_header->compression_type;
- tinyexr::swap4(&comp);
- tinyexr::WriteAttributeToMemory(
- &memory, "compression", "compression",
- reinterpret_cast<const unsigned char *>(&comp), 1);
- }
+#else
+ assert(0);
+#endif
+ } else if (compression_type == TINYEXR_COMPRESSIONTYPE_ZFP) {
+#if TINYEXR_USE_ZFP
+ const ZFPCompressionParam* zfp_compression_param = reinterpret_cast<const ZFPCompressionParam*>(compression_param);
+ std::vector<unsigned char> block;
+ unsigned int outSize;
- {
- int data[4] = {0, 0, exr_image->width - 1, exr_image->height - 1};
- tinyexr::swap4(&data[0]);
- tinyexr::swap4(&data[1]);
- tinyexr::swap4(&data[2]);
- tinyexr::swap4(&data[3]);
- tinyexr::WriteAttributeToMemory(
- &memory, "dataWindow", "box2i",
- reinterpret_cast<const unsigned char *>(data), sizeof(int) * 4);
- tinyexr::WriteAttributeToMemory(
- &memory, "displayWindow", "box2i",
- reinterpret_cast<const unsigned char *>(data), sizeof(int) * 4);
- }
+ tinyexr::CompressZfp(
+ &block, &outSize, reinterpret_cast<const float *>(&buf.at(0)),
+ width, num_lines, static_cast<int>(channels.size()), *zfp_compression_param);
- {
- unsigned char line_order = 0; // @fixme { read line_order from EXRHeader }
- tinyexr::WriteAttributeToMemory(&memory, "lineOrder", "lineOrder",
- &line_order, 1);
- }
+ // 4 byte: scan line
+ // 4 byte: data size
+ // ~ : pixel data(compressed)
+ unsigned int data_len = outSize;
+ out_data.insert(out_data.end(), block.begin(), block.begin() + data_len);
- {
- float aspectRatio = 1.0f;
- tinyexr::swap4(&aspectRatio);
- tinyexr::WriteAttributeToMemory(
- &memory, "pixelAspectRatio", "float",
- reinterpret_cast<const unsigned char *>(&aspectRatio), sizeof(float));
+#else
+ (void)compression_param;
+ assert(0);
+#endif
+ } else {
+ assert(0);
+ return false;
}
- {
- float center[2] = {0.0f, 0.0f};
- tinyexr::swap4(&center[0]);
- tinyexr::swap4(&center[1]);
- tinyexr::WriteAttributeToMemory(
- &memory, "screenWindowCenter", "v2f",
- reinterpret_cast<const unsigned char *>(center), 2 * sizeof(float));
+ return true;
+}
+
+static int EncodeTiledLevel(const EXRImage* level_image, const EXRHeader* exr_header,
+ const std::vector<tinyexr::ChannelInfo>& channels,
+ std::vector<std::vector<unsigned char> >& data_list,
+ size_t start_index, // for data_list
+ int num_x_tiles, int num_y_tiles,
+ const std::vector<size_t>& channel_offset_list,
+ int pixel_data_size,
+ const void* compression_param, // must be set if zfp compression is enabled
+ std::string* err) {
+ int num_tiles = num_x_tiles * num_y_tiles;
+ assert(num_tiles == level_image->num_tiles);
+
+ if ((exr_header->tile_size_x > level_image->width || exr_header->tile_size_y > level_image->height) &&
+ level_image->level_x == 0 && level_image->level_y == 0) {
+ if (err) {
+ (*err) += "Failed to encode tile data.\n";
+ }
+ return TINYEXR_ERROR_INVALID_DATA;
}
- {
- float w = static_cast<float>(exr_image->width);
- tinyexr::swap4(&w);
- tinyexr::WriteAttributeToMemory(&memory, "screenWindowWidth", "float",
- reinterpret_cast<const unsigned char *>(&w),
- sizeof(float));
+
+#if TINYEXR_HAS_CXX11 && (TINYEXR_USE_THREAD > 0)
+ std::atomic<bool> invalid_data(false);
+#else
+ bool invalid_data(false);
+#endif
+
+#if TINYEXR_HAS_CXX11 && (TINYEXR_USE_THREAD > 0)
+ std::vector<std::thread> workers;
+ std::atomic<int> tile_count(0);
+
+ int num_threads = std::max(1, int(std::thread::hardware_concurrency()));
+ if (num_threads > int(num_tiles)) {
+ num_threads = int(num_tiles);
}
- // Custom attributes
- if (exr_header->num_custom_attributes > 0) {
- for (int i = 0; i < exr_header->num_custom_attributes; i++) {
- tinyexr::WriteAttributeToMemory(
- &memory, exr_header->custom_attributes[i].name,
- exr_header->custom_attributes[i].type,
- reinterpret_cast<const unsigned char *>(
- exr_header->custom_attributes[i].value),
- exr_header->custom_attributes[i].size);
+ for (int t = 0; t < num_threads; t++) {
+ workers.emplace_back(std::thread([&]() {
+ int i = 0;
+ while ((i = tile_count++) < num_tiles) {
+
+#else
+ // Use signed int since some OpenMP compiler doesn't allow unsigned type for
+ // `parallel for`
+#if TINYEXR_USE_OPENMP
+#pragma omp parallel for
+#endif
+ for (int i = 0; i < num_tiles; i++) {
+
+#endif
+ size_t tile_idx = static_cast<size_t>(i);
+ size_t data_idx = tile_idx + start_index;
+
+ int x_tile = i % num_x_tiles;
+ int y_tile = i / num_x_tiles;
+
+ EXRTile& tile = level_image->tiles[tile_idx];
+
+ const unsigned char* const* images =
+ static_cast<const unsigned char* const*>(tile.images);
+
+ data_list[data_idx].resize(5*sizeof(int));
+ size_t data_header_size = data_list[data_idx].size();
+ bool ret = EncodePixelData(data_list[data_idx],
+ images,
+ exr_header->compression_type,
+ 0, // increasing y
+ tile.width,
+ exr_header->tile_size_y,
+ exr_header->tile_size_x,
+ 0,
+ tile.height,
+ pixel_data_size,
+ channels,
+ channel_offset_list,
+ compression_param);
+ if (!ret) {
+ invalid_data = true;
+ continue;
}
+ assert(data_list[data_idx].size() > data_header_size);
+ int data_len = static_cast<int>(data_list[data_idx].size() - data_header_size);
+ //tileX, tileY, levelX, levelY // pixel_data_size(int)
+ memcpy(&data_list[data_idx][0], &x_tile, sizeof(int));
+ memcpy(&data_list[data_idx][4], &y_tile, sizeof(int));
+ memcpy(&data_list[data_idx][8], &level_image->level_x, sizeof(int));
+ memcpy(&data_list[data_idx][12], &level_image->level_y, sizeof(int));
+ memcpy(&data_list[data_idx][16], &data_len, sizeof(int));
+
+ swap4(reinterpret_cast<int*>(&data_list[data_idx][0]));
+ swap4(reinterpret_cast<int*>(&data_list[data_idx][4]));
+ swap4(reinterpret_cast<int*>(&data_list[data_idx][8]));
+ swap4(reinterpret_cast<int*>(&data_list[data_idx][12]));
+ swap4(reinterpret_cast<int*>(&data_list[data_idx][16]));
+
+#if TINYEXR_HAS_CXX11 && (TINYEXR_USE_THREAD > 0)
}
+}));
+ }
- { // end of header
- unsigned char e = 0;
- memory.push_back(e);
+ for (auto &t : workers) {
+ t.join();
+ }
+#else
+ } // omp parallel
+#endif
+
+ if (invalid_data) {
+ if (err) {
+ (*err) += "Failed to encode tile data.\n";
+ }
+ return TINYEXR_ERROR_INVALID_DATA;
}
+ return TINYEXR_SUCCESS;
+}
- int num_blocks = exr_image->height / num_scanlines;
- if (num_blocks * num_scanlines < exr_image->height) {
- num_blocks++;
+static int NumScanlines(int compression_type) {
+ int num_scanlines = 1;
+ if (compression_type == TINYEXR_COMPRESSIONTYPE_ZIP) {
+ num_scanlines = 16;
+ } else if (compression_type == TINYEXR_COMPRESSIONTYPE_PIZ) {
+ num_scanlines = 32;
+ } else if (compression_type == TINYEXR_COMPRESSIONTYPE_ZFP) {
+ num_scanlines = 16;
}
+ return num_scanlines;
+}
- std::vector<tinyexr::tinyexr_uint64> offsets(static_cast<size_t>(num_blocks));
+static int EncodeChunk(const EXRImage* exr_image, const EXRHeader* exr_header,
+ const std::vector<ChannelInfo>& channels,
+ int num_blocks,
+ tinyexr_uint64 chunk_offset, // starting offset of current chunk
+ bool is_multipart,
+ OffsetData& offset_data, // output block offsets, must be initialized
+ std::vector<std::vector<unsigned char> >& data_list, // output
+ tinyexr_uint64& total_size, // output: ending offset of current chunk
+ std::string* err) {
+ int num_scanlines = NumScanlines(exr_header->compression_type);
- size_t headerSize = memory.size();
- tinyexr::tinyexr_uint64 offset =
- headerSize +
- static_cast<size_t>(num_blocks) *
- sizeof(
- tinyexr::tinyexr_int64); // sizeof(header) + sizeof(offsetTable)
+ data_list.resize(num_blocks);
- std::vector<std::vector<unsigned char> > data_list(
- static_cast<size_t>(num_blocks));
std::vector<size_t> channel_offset_list(
- static_cast<size_t>(exr_header->num_channels));
+ static_cast<size_t>(exr_header->num_channels));
int pixel_data_size = 0;
- size_t channel_offset = 0;
- for (size_t c = 0; c < static_cast<size_t>(exr_header->num_channels); c++) {
- channel_offset_list[c] = channel_offset;
- if (exr_header->requested_pixel_types[c] == TINYEXR_PIXELTYPE_HALF) {
- pixel_data_size += sizeof(unsigned short);
- channel_offset += sizeof(unsigned short);
- } else if (exr_header->requested_pixel_types[c] ==
- TINYEXR_PIXELTYPE_FLOAT) {
- pixel_data_size += sizeof(float);
- channel_offset += sizeof(float);
- } else if (exr_header->requested_pixel_types[c] == TINYEXR_PIXELTYPE_UINT) {
- pixel_data_size += sizeof(unsigned int);
- channel_offset += sizeof(unsigned int);
- } else {
- assert(0);
+ {
+ size_t channel_offset = 0;
+ for (size_t c = 0; c < static_cast<size_t>(exr_header->num_channels); c++) {
+ channel_offset_list[c] = channel_offset;
+ if (channels[c].requested_pixel_type == TINYEXR_PIXELTYPE_HALF) {
+ pixel_data_size += sizeof(unsigned short);
+ channel_offset += sizeof(unsigned short);
+ } else if (channels[c].requested_pixel_type ==
+ TINYEXR_PIXELTYPE_FLOAT) {
+ pixel_data_size += sizeof(float);
+ channel_offset += sizeof(float);
+ } else if (channels[c].requested_pixel_type == TINYEXR_PIXELTYPE_UINT) {
+ pixel_data_size += sizeof(unsigned int);
+ channel_offset += sizeof(unsigned int);
+ } else {
+ assert(0);
+ }
}
}
+ const void* compression_param = 0;
#if TINYEXR_USE_ZFP
tinyexr::ZFPCompressionParam zfp_compression_param;
@@ -12364,304 +6754,517 @@ size_t SaveEXRImageToMemory(const EXRImage *exr_image,
{
std::string e;
bool ret = tinyexr::FindZFPCompressionParam(
- &zfp_compression_param, exr_header->custom_attributes,
- exr_header->num_custom_attributes, &e);
+ &zfp_compression_param, exr_header->custom_attributes,
+ exr_header->num_custom_attributes, &e);
if (!ret) {
// Use predefined compression parameter.
zfp_compression_param.type = 0;
zfp_compression_param.rate = 2;
}
+ compression_param = &zfp_compression_param;
}
#endif
- // TODO(LTE): C++11 thread
+ tinyexr_uint64 offset = chunk_offset;
+ tinyexr_uint64 doffset = is_multipart ? 4u : 0u;
-// Use signed int since some OpenMP compiler doesn't allow unsigned type for
-// `parallel for`
-#if TINYEXR_USE_OPENMP
-#pragma omp parallel for
-#endif
- for (int i = 0; i < num_blocks; i++) {
- size_t ii = static_cast<size_t>(i);
- int start_y = num_scanlines * i;
- int endY = (std::min)(num_scanlines * (i + 1), exr_image->height);
- int h = endY - start_y;
-
- std::vector<unsigned char> buf(
- static_cast<size_t>(exr_image->width * h * pixel_data_size));
+ if (exr_image->tiles) {
+ const EXRImage* level_image = exr_image;
+ size_t block_idx = 0;
+ tinyexr::tinyexr_uint64 block_data_size = 0;
+ int num_levels = (exr_header->tile_level_mode != TINYEXR_TILE_RIPMAP_LEVELS) ?
+ offset_data.num_x_levels : (offset_data.num_x_levels * offset_data.num_y_levels);
+ for (int level_index = 0; level_index < num_levels; ++level_index) {
+ if (!level_image) {
+ if (err) {
+ (*err) += "Invalid number of tiled levels for EncodeChunk\n";
+ }
+ return TINYEXR_ERROR_INVALID_DATA;
+ }
- for (size_t c = 0; c < static_cast<size_t>(exr_header->num_channels); c++) {
- if (exr_header->pixel_types[c] == TINYEXR_PIXELTYPE_HALF) {
- if (exr_header->requested_pixel_types[c] == TINYEXR_PIXELTYPE_FLOAT) {
- for (int y = 0; y < h; y++) {
- // Assume increasing Y
- float *line_ptr = reinterpret_cast<float *>(&buf.at(
- static_cast<size_t>(pixel_data_size * y * exr_image->width) +
- channel_offset_list[c] *
- static_cast<size_t>(exr_image->width)));
- for (int x = 0; x < exr_image->width; x++) {
- tinyexr::FP16 h16;
- h16.u = reinterpret_cast<unsigned short **>(
- exr_image->images)[c][(y + start_y) * exr_image->width + x];
-
- tinyexr::FP32 f32 = half_to_float(h16);
-
- tinyexr::swap4(&f32.f);
-
- // line_ptr[x] = f32.f;
- tinyexr::cpy4(line_ptr + x, &(f32.f));
- }
- }
- } else if (exr_header->requested_pixel_types[c] ==
- TINYEXR_PIXELTYPE_HALF) {
- for (int y = 0; y < h; y++) {
- // Assume increasing Y
- unsigned short *line_ptr = reinterpret_cast<unsigned short *>(
- &buf.at(static_cast<size_t>(pixel_data_size * y *
- exr_image->width) +
- channel_offset_list[c] *
- static_cast<size_t>(exr_image->width)));
- for (int x = 0; x < exr_image->width; x++) {
- unsigned short val = reinterpret_cast<unsigned short **>(
- exr_image->images)[c][(y + start_y) * exr_image->width + x];
-
- tinyexr::swap2(&val);
-
- // line_ptr[x] = val;
- tinyexr::cpy2(line_ptr + x, &val);
- }
- }
- } else {
- assert(0);
+ int level_index_from_image = LevelIndex(level_image->level_x, level_image->level_y,
+ exr_header->tile_level_mode, offset_data.num_x_levels);
+ if (level_index_from_image != level_index) {
+ if (err) {
+ (*err) += "Incorrect level ordering in tiled image\n";
}
+ return TINYEXR_ERROR_INVALID_DATA;
+ }
+ int num_y_tiles = (int)offset_data.offsets[level_index].size();
+ assert(num_y_tiles);
+ int num_x_tiles = (int)offset_data.offsets[level_index][0].size();
+ assert(num_x_tiles);
+
+ std::string e;
+ int ret = EncodeTiledLevel(level_image,
+ exr_header,
+ channels,
+ data_list,
+ block_idx,
+ num_x_tiles,
+ num_y_tiles,
+ channel_offset_list,
+ pixel_data_size,
+ compression_param,
+ &e);
+ if (ret != TINYEXR_SUCCESS) {
+ if (!e.empty() && err) {
+ (*err) += e;
+ }
+ return ret;
+ }
- } else if (exr_header->pixel_types[c] == TINYEXR_PIXELTYPE_FLOAT) {
- if (exr_header->requested_pixel_types[c] == TINYEXR_PIXELTYPE_HALF) {
- for (int y = 0; y < h; y++) {
- // Assume increasing Y
- unsigned short *line_ptr = reinterpret_cast<unsigned short *>(
- &buf.at(static_cast<size_t>(pixel_data_size * y *
- exr_image->width) +
- channel_offset_list[c] *
- static_cast<size_t>(exr_image->width)));
- for (int x = 0; x < exr_image->width; x++) {
- tinyexr::FP32 f32;
- f32.f = reinterpret_cast<float **>(
- exr_image->images)[c][(y + start_y) * exr_image->width + x];
-
- tinyexr::FP16 h16;
- h16 = float_to_half_full(f32);
-
- tinyexr::swap2(reinterpret_cast<unsigned short *>(&h16.u));
-
- // line_ptr[x] = h16.u;
- tinyexr::cpy2(line_ptr + x, &(h16.u));
- }
- }
- } else if (exr_header->requested_pixel_types[c] ==
- TINYEXR_PIXELTYPE_FLOAT) {
- for (int y = 0; y < h; y++) {
- // Assume increasing Y
- float *line_ptr = reinterpret_cast<float *>(&buf.at(
- static_cast<size_t>(pixel_data_size * y * exr_image->width) +
- channel_offset_list[c] *
- static_cast<size_t>(exr_image->width)));
- for (int x = 0; x < exr_image->width; x++) {
- float val = reinterpret_cast<float **>(
- exr_image->images)[c][(y + start_y) * exr_image->width + x];
-
- tinyexr::swap4(&val);
-
- // line_ptr[x] = val;
- tinyexr::cpy4(line_ptr + x, &val);
- }
- }
- } else {
- assert(0);
+ for (size_t j = 0; j < static_cast<size_t>(num_y_tiles); ++j)
+ for (size_t i = 0; i < static_cast<size_t>(num_x_tiles); ++i) {
+ offset_data.offsets[level_index][j][i] = offset;
+ swap8(reinterpret_cast<tinyexr_uint64*>(&offset_data.offsets[level_index][j][i]));
+ offset += data_list[block_idx].size() + doffset;
+ block_data_size += data_list[block_idx].size();
+ ++block_idx;
}
- } else if (exr_header->pixel_types[c] == TINYEXR_PIXELTYPE_UINT) {
- for (int y = 0; y < h; y++) {
- // Assume increasing Y
- unsigned int *line_ptr = reinterpret_cast<unsigned int *>(&buf.at(
- static_cast<size_t>(pixel_data_size * y * exr_image->width) +
- channel_offset_list[c] * static_cast<size_t>(exr_image->width)));
- for (int x = 0; x < exr_image->width; x++) {
- unsigned int val = reinterpret_cast<unsigned int **>(
- exr_image->images)[c][(y + start_y) * exr_image->width + x];
+ level_image = level_image->next_level;
+ }
+ assert(static_cast<int>(block_idx) == num_blocks);
+ total_size = offset;
+ } else { // scanlines
+ std::vector<tinyexr::tinyexr_uint64>& offsets = offset_data.offsets[0][0];
- tinyexr::swap4(&val);
+#if TINYEXR_HAS_CXX11 && (TINYEXR_USE_THREAD > 0)
+ std::atomic<bool> invalid_data(false);
+ std::vector<std::thread> workers;
+ std::atomic<int> block_count(0);
- // line_ptr[x] = val;
- tinyexr::cpy4(line_ptr + x, &val);
- }
- }
+ int num_threads = std::min(std::max(1, int(std::thread::hardware_concurrency())), num_blocks);
+
+ for (int t = 0; t < num_threads; t++) {
+ workers.emplace_back(std::thread([&]() {
+ int i = 0;
+ while ((i = block_count++) < num_blocks) {
+
+#else
+ bool invalid_data(false);
+#if TINYEXR_USE_OPENMP
+#pragma omp parallel for
+#endif
+ for (int i = 0; i < num_blocks; i++) {
+
+#endif
+ int start_y = num_scanlines * i;
+ int end_Y = (std::min)(num_scanlines * (i + 1), exr_image->height);
+ int num_lines = end_Y - start_y;
+
+ const unsigned char* const* images =
+ static_cast<const unsigned char* const*>(exr_image->images);
+
+ data_list[i].resize(2*sizeof(int));
+ size_t data_header_size = data_list[i].size();
+
+ bool ret = EncodePixelData(data_list[i],
+ images,
+ exr_header->compression_type,
+ 0, // increasing y
+ exr_image->width,
+ exr_image->height,
+ exr_image->width,
+ start_y,
+ num_lines,
+ pixel_data_size,
+ channels,
+ channel_offset_list,
+ compression_param);
+ if (!ret) {
+ invalid_data = true;
+ continue; // "break" cannot be used with OpenMP
}
+ assert(data_list[i].size() > data_header_size);
+ int data_len = static_cast<int>(data_list[i].size() - data_header_size);
+ memcpy(&data_list[i][0], &start_y, sizeof(int));
+ memcpy(&data_list[i][4], &data_len, sizeof(int));
+
+ swap4(reinterpret_cast<int*>(&data_list[i][0]));
+ swap4(reinterpret_cast<int*>(&data_list[i][4]));
+#if TINYEXR_HAS_CXX11 && (TINYEXR_USE_THREAD > 0)
+ }
+ }));
}
- if (exr_header->compression_type == TINYEXR_COMPRESSIONTYPE_NONE) {
- // 4 byte: scan line
- // 4 byte: data size
- // ~ : pixel data(uncompressed)
- std::vector<unsigned char> header(8);
- unsigned int data_len = static_cast<unsigned int>(buf.size());
- memcpy(&header.at(0), &start_y, sizeof(int));
- memcpy(&header.at(4), &data_len, sizeof(unsigned int));
+ for (auto &t : workers) {
+ t.join();
+ }
+#else
+ } // omp parallel
+#endif
+
+ if (invalid_data) {
+ if (err) {
+ (*err) += "Failed to encode scanline data.\n";
+ }
+ return TINYEXR_ERROR_INVALID_DATA;
+ }
- tinyexr::swap4(reinterpret_cast<unsigned int *>(&header.at(0)));
- tinyexr::swap4(reinterpret_cast<unsigned int *>(&header.at(4)));
+ for (size_t i = 0; i < static_cast<size_t>(num_blocks); i++) {
+ offsets[i] = offset;
+ tinyexr::swap8(reinterpret_cast<tinyexr::tinyexr_uint64 *>(&offsets[i]));
+ offset += data_list[i].size() + doffset;
+ }
- data_list[ii].insert(data_list[ii].end(), header.begin(), header.end());
- data_list[ii].insert(data_list[ii].end(), buf.begin(),
- buf.begin() + data_len);
+ total_size = static_cast<size_t>(offset);
+ }
+ return TINYEXR_SUCCESS;
+}
- } else if ((exr_header->compression_type == TINYEXR_COMPRESSIONTYPE_ZIPS) ||
- (exr_header->compression_type == TINYEXR_COMPRESSIONTYPE_ZIP)) {
-#if TINYEXR_USE_MINIZ
- std::vector<unsigned char> block(tinyexr::miniz::mz_compressBound(
- static_cast<unsigned long>(buf.size())));
+// can save a single or multi-part image (no deep* formats)
+static size_t SaveEXRNPartImageToMemory(const EXRImage* exr_images,
+ const EXRHeader** exr_headers,
+ unsigned int num_parts,
+ unsigned char** memory_out, const char** err) {
+ if (exr_images == NULL || exr_headers == NULL || num_parts == 0 ||
+ memory_out == NULL) {
+ SetErrorMessage("Invalid argument for SaveEXRNPartImageToMemory",
+ err);
+ return 0;
+ }
+ {
+ for (unsigned int i = 0; i < num_parts; ++i) {
+ if (exr_headers[i]->compression_type < 0) {
+ SetErrorMessage("Invalid argument for SaveEXRNPartImageToMemory",
+ err);
+ return 0;
+ }
+#if !TINYEXR_USE_PIZ
+ if (exr_headers[i]->compression_type == TINYEXR_COMPRESSIONTYPE_PIZ) {
+ SetErrorMessage("PIZ compression is not supported in this build",
+ err);
+ return 0;
+ }
+#endif
+#if !TINYEXR_USE_ZFP
+ if (exr_headers[i]->compression_type == TINYEXR_COMPRESSIONTYPE_ZFP) {
+ SetErrorMessage("ZFP compression is not supported in this build",
+ err);
+ return 0;
+ }
#else
- std::vector<unsigned char> block(
- compressBound(static_cast<uLong>(buf.size())));
+ for (int c = 0; c < exr_header->num_channels; ++c) {
+ if (exr_headers[i]->requested_pixel_types[c] != TINYEXR_PIXELTYPE_FLOAT) {
+ SetErrorMessage("Pixel type must be FLOAT for ZFP compression",
+ err);
+ return 0;
+ }
+ }
#endif
- tinyexr::tinyexr_uint64 outSize = block.size();
-
- tinyexr::CompressZip(&block.at(0), outSize,
- reinterpret_cast<const unsigned char *>(&buf.at(0)),
- static_cast<unsigned long>(buf.size()));
+ }
+ }
- // 4 byte: scan line
- // 4 byte: data size
- // ~ : pixel data(compressed)
- std::vector<unsigned char> header(8);
- unsigned int data_len = static_cast<unsigned int>(outSize); // truncate
- memcpy(&header.at(0), &start_y, sizeof(int));
- memcpy(&header.at(4), &data_len, sizeof(unsigned int));
+ std::vector<unsigned char> memory;
- tinyexr::swap4(reinterpret_cast<unsigned int *>(&header.at(0)));
- tinyexr::swap4(reinterpret_cast<unsigned int *>(&header.at(4)));
+ // Header
+ {
+ const char header[] = { 0x76, 0x2f, 0x31, 0x01 };
+ memory.insert(memory.end(), header, header + 4);
+ }
- data_list[ii].insert(data_list[ii].end(), header.begin(), header.end());
- data_list[ii].insert(data_list[ii].end(), block.begin(),
- block.begin() + data_len);
+ // Version
+ // using value from the first header
+ int long_name = exr_headers[0]->long_name;
+ {
+ char marker[] = { 2, 0, 0, 0 };
+ /* @todo
+ if (exr_header->non_image) {
+ marker[1] |= 0x8;
+ }
+ */
+ // tiled
+ if (num_parts == 1 && exr_images[0].tiles) {
+ marker[1] |= 0x2;
+ }
+ // long_name
+ if (long_name) {
+ marker[1] |= 0x4;
+ }
+ // multipart
+ if (num_parts > 1) {
+ marker[1] |= 0x10;
+ }
+ memory.insert(memory.end(), marker, marker + 4);
+ }
- } else if (exr_header->compression_type == TINYEXR_COMPRESSIONTYPE_RLE) {
- // (buf.size() * 3) / 2 would be enough.
- std::vector<unsigned char> block((buf.size() * 3) / 2);
+ int total_chunk_count = 0;
+ std::vector<int> chunk_count(num_parts);
+ std::vector<OffsetData> offset_data(num_parts);
+ for (unsigned int i = 0; i < num_parts; ++i) {
+ if (!exr_images[i].tiles) {
+ int num_scanlines = NumScanlines(exr_headers[i]->compression_type);
+ chunk_count[i] =
+ (exr_images[i].height + num_scanlines - 1) / num_scanlines;
+ InitSingleResolutionOffsets(offset_data[i], chunk_count[i]);
+ total_chunk_count += chunk_count[i];
+ } else {
+ {
+ std::vector<int> num_x_tiles, num_y_tiles;
+ PrecalculateTileInfo(num_x_tiles, num_y_tiles, exr_headers[i]);
+ chunk_count[i] =
+ InitTileOffsets(offset_data[i], exr_headers[i], num_x_tiles, num_y_tiles);
+ total_chunk_count += chunk_count[i];
+ }
+ }
+ }
+ // Write attributes to memory buffer.
+ std::vector< std::vector<tinyexr::ChannelInfo> > channels(num_parts);
+ {
+ std::set<std::string> partnames;
+ for (unsigned int i = 0; i < num_parts; ++i) {
+ //channels
+ {
+ std::vector<unsigned char> data;
+
+ for (int c = 0; c < exr_headers[i]->num_channels; c++) {
+ tinyexr::ChannelInfo info;
+ info.p_linear = 0;
+ info.pixel_type = exr_headers[i]->pixel_types[c];
+ info.requested_pixel_type = exr_headers[i]->requested_pixel_types[c];
+ info.x_sampling = 1;
+ info.y_sampling = 1;
+ info.name = std::string(exr_headers[i]->channels[c].name);
+ channels[i].push_back(info);
+ }
- tinyexr::tinyexr_uint64 outSize = block.size();
+ tinyexr::WriteChannelInfo(data, channels[i]);
- tinyexr::CompressRle(&block.at(0), outSize,
- reinterpret_cast<const unsigned char *>(&buf.at(0)),
- static_cast<unsigned long>(buf.size()));
+ tinyexr::WriteAttributeToMemory(&memory, "channels", "chlist", &data.at(0),
+ static_cast<int>(data.size()));
+ }
- // 4 byte: scan line
- // 4 byte: data size
- // ~ : pixel data(compressed)
- std::vector<unsigned char> header(8);
- unsigned int data_len = static_cast<unsigned int>(outSize); // truncate
- memcpy(&header.at(0), &start_y, sizeof(int));
- memcpy(&header.at(4), &data_len, sizeof(unsigned int));
+ {
+ int comp = exr_headers[i]->compression_type;
+ swap4(&comp);
+ WriteAttributeToMemory(
+ &memory, "compression", "compression",
+ reinterpret_cast<const unsigned char*>(&comp), 1);
+ }
- tinyexr::swap4(reinterpret_cast<unsigned int *>(&header.at(0)));
- tinyexr::swap4(reinterpret_cast<unsigned int *>(&header.at(4)));
+ {
+ int data[4] = { 0, 0, exr_images[i].width - 1, exr_images[i].height - 1 };
+ swap4(&data[0]);
+ swap4(&data[1]);
+ swap4(&data[2]);
+ swap4(&data[3]);
+ WriteAttributeToMemory(
+ &memory, "dataWindow", "box2i",
+ reinterpret_cast<const unsigned char*>(data), sizeof(int) * 4);
+
+ int data0[4] = { 0, 0, exr_images[0].width - 1, exr_images[0].height - 1 };
+ swap4(&data0[0]);
+ swap4(&data0[1]);
+ swap4(&data0[2]);
+ swap4(&data0[3]);
+ // Note: must be the same across parts (currently, using value from the first header)
+ WriteAttributeToMemory(
+ &memory, "displayWindow", "box2i",
+ reinterpret_cast<const unsigned char*>(data0), sizeof(int) * 4);
+ }
- data_list[ii].insert(data_list[ii].end(), header.begin(), header.end());
- data_list[ii].insert(data_list[ii].end(), block.begin(),
- block.begin() + data_len);
+ {
+ unsigned char line_order = 0; // @fixme { read line_order from EXRHeader }
+ WriteAttributeToMemory(&memory, "lineOrder", "lineOrder",
+ &line_order, 1);
+ }
- } else if (exr_header->compression_type == TINYEXR_COMPRESSIONTYPE_PIZ) {
-#if TINYEXR_USE_PIZ
- unsigned int bufLen =
- 8192 + static_cast<unsigned int>(
- 2 * static_cast<unsigned int>(
- buf.size())); // @fixme { compute good bound. }
- std::vector<unsigned char> block(bufLen);
- unsigned int outSize = static_cast<unsigned int>(block.size());
-
- CompressPiz(&block.at(0), &outSize,
- reinterpret_cast<const unsigned char *>(&buf.at(0)),
- buf.size(), channels, exr_image->width, h);
-
- // 4 byte: scan line
- // 4 byte: data size
- // ~ : pixel data(compressed)
- std::vector<unsigned char> header(8);
- unsigned int data_len = outSize;
- memcpy(&header.at(0), &start_y, sizeof(int));
- memcpy(&header.at(4), &data_len, sizeof(unsigned int));
-
- tinyexr::swap4(reinterpret_cast<unsigned int *>(&header.at(0)));
- tinyexr::swap4(reinterpret_cast<unsigned int *>(&header.at(4)));
-
- data_list[ii].insert(data_list[ii].end(), header.begin(), header.end());
- data_list[ii].insert(data_list[ii].end(), block.begin(),
- block.begin() + data_len);
+ {
+ // Note: must be the same across parts
+ float aspectRatio = 1.0f;
+ swap4(&aspectRatio);
+ WriteAttributeToMemory(
+ &memory, "pixelAspectRatio", "float",
+ reinterpret_cast<const unsigned char*>(&aspectRatio), sizeof(float));
+ }
-#else
- assert(0);
-#endif
- } else if (exr_header->compression_type == TINYEXR_COMPRESSIONTYPE_ZFP) {
-#if TINYEXR_USE_ZFP
- std::vector<unsigned char> block;
- unsigned int outSize;
+ {
+ float center[2] = { 0.0f, 0.0f };
+ swap4(&center[0]);
+ swap4(&center[1]);
+ WriteAttributeToMemory(
+ &memory, "screenWindowCenter", "v2f",
+ reinterpret_cast<const unsigned char*>(center), 2 * sizeof(float));
+ }
- tinyexr::CompressZfp(
- &block, &outSize, reinterpret_cast<const float *>(&buf.at(0)),
- exr_image->width, h, exr_header->num_channels, zfp_compression_param);
+ {
+ float w = 1.0f;
+ swap4(&w);
+ WriteAttributeToMemory(&memory, "screenWindowWidth", "float",
+ reinterpret_cast<const unsigned char*>(&w),
+ sizeof(float));
+ }
- // 4 byte: scan line
- // 4 byte: data size
- // ~ : pixel data(compressed)
- std::vector<unsigned char> header(8);
- unsigned int data_len = outSize;
- memcpy(&header.at(0), &start_y, sizeof(int));
- memcpy(&header.at(4), &data_len, sizeof(unsigned int));
+ if (exr_images[i].tiles) {
+ unsigned char tile_mode = static_cast<unsigned char>(exr_headers[i]->tile_level_mode & 0x3);
+ if (exr_headers[i]->tile_rounding_mode) tile_mode |= (1u << 4u);
+ //unsigned char data[9] = { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
+ unsigned int datai[3] = { 0, 0, 0 };
+ unsigned char* data = reinterpret_cast<unsigned char*>(&datai[0]);
+ datai[0] = static_cast<unsigned int>(exr_headers[i]->tile_size_x);
+ datai[1] = static_cast<unsigned int>(exr_headers[i]->tile_size_y);
+ data[8] = tile_mode;
+ swap4(reinterpret_cast<unsigned int*>(&data[0]));
+ swap4(reinterpret_cast<unsigned int*>(&data[4]));
+ WriteAttributeToMemory(
+ &memory, "tiles", "tiledesc",
+ reinterpret_cast<const unsigned char*>(data), 9);
+ }
- tinyexr::swap4(reinterpret_cast<unsigned int *>(&header.at(0)));
- tinyexr::swap4(reinterpret_cast<unsigned int *>(&header.at(4)));
+ // must be present for multi-part files - according to spec.
+ if (num_parts > 1) {
+ // name
+ {
+ size_t len = 0;
+ if ((len = strlen(exr_headers[i]->name)) > 0) {
+ partnames.emplace(exr_headers[i]->name);
+ if (partnames.size() != i + 1) {
+ SetErrorMessage("'name' attributes must be unique for a multi-part file", err);
+ return 0;
+ }
+ WriteAttributeToMemory(
+ &memory, "name", "string",
+ reinterpret_cast<const unsigned char*>(exr_headers[i]->name),
+ static_cast<int>(len));
+ } else {
+ SetErrorMessage("Invalid 'name' attribute for a multi-part file", err);
+ return 0;
+ }
+ }
+ // type
+ {
+ const char* type = "scanlineimage";
+ if (exr_images[i].tiles) type = "tiledimage";
+ WriteAttributeToMemory(
+ &memory, "type", "string",
+ reinterpret_cast<const unsigned char*>(type),
+ static_cast<int>(strlen(type)));
+ }
+ // chunkCount
+ {
+ WriteAttributeToMemory(
+ &memory, "chunkCount", "int",
+ reinterpret_cast<const unsigned char*>(&chunk_count[i]),
+ 4);
+ }
+ }
- data_list[ii].insert(data_list[ii].end(), header.begin(), header.end());
- data_list[ii].insert(data_list[ii].end(), block.begin(),
- block.begin() + data_len);
+ // Custom attributes
+ if (exr_headers[i]->num_custom_attributes > 0) {
+ for (int j = 0; j < exr_headers[i]->num_custom_attributes; j++) {
+ tinyexr::WriteAttributeToMemory(
+ &memory, exr_headers[i]->custom_attributes[j].name,
+ exr_headers[i]->custom_attributes[j].type,
+ reinterpret_cast<const unsigned char*>(
+ exr_headers[i]->custom_attributes[j].value),
+ exr_headers[i]->custom_attributes[j].size);
+ }
+ }
-#else
- assert(0);
-#endif
- } else {
- assert(0);
+ { // end of header
+ memory.push_back(0);
+ }
}
- } // omp parallel
-
- for (size_t i = 0; i < static_cast<size_t>(num_blocks); i++) {
- offsets[i] = offset;
- tinyexr::swap8(reinterpret_cast<tinyexr::tinyexr_uint64 *>(&offsets[i]));
- offset += data_list[i].size();
+ }
+ if (num_parts > 1) {
+ // end of header list
+ memory.push_back(0);
}
- size_t totalSize = static_cast<size_t>(offset);
- {
- memory.insert(
- memory.end(), reinterpret_cast<unsigned char *>(&offsets.at(0)),
- reinterpret_cast<unsigned char *>(&offsets.at(0)) +
- sizeof(tinyexr::tinyexr_uint64) * static_cast<size_t>(num_blocks));
+ tinyexr_uint64 chunk_offset = memory.size() + size_t(total_chunk_count) * sizeof(tinyexr_uint64);
+
+ tinyexr_uint64 total_size = 0;
+ std::vector< std::vector< std::vector<unsigned char> > > data_lists(num_parts);
+ for (unsigned int i = 0; i < num_parts; ++i) {
+ std::string e;
+ int ret = EncodeChunk(&exr_images[i], exr_headers[i],
+ channels[i],
+ chunk_count[i],
+ // starting offset of current chunk after part-number
+ chunk_offset,
+ num_parts > 1,
+ offset_data[i], // output: block offsets, must be initialized
+ data_lists[i], // output
+ total_size, // output
+ &e);
+ if (ret != TINYEXR_SUCCESS) {
+ if (!e.empty()) {
+ tinyexr::SetErrorMessage(e, err);
+ }
+ return 0;
+ }
+ chunk_offset = total_size;
}
- if (memory.size() == 0) {
+ // Allocating required memory
+ if (total_size == 0) { // something went wrong
tinyexr::SetErrorMessage("Output memory size is zero", err);
return 0;
}
-
- (*memory_out) = static_cast<unsigned char *>(malloc(totalSize));
- memcpy((*memory_out), &memory.at(0), memory.size());
- unsigned char *memory_ptr = *memory_out + memory.size();
-
- for (size_t i = 0; i < static_cast<size_t>(num_blocks); i++) {
- memcpy(memory_ptr, &data_list[i].at(0), data_list[i].size());
- memory_ptr += data_list[i].size();
+ (*memory_out) = static_cast<unsigned char*>(malloc(total_size));
+
+ // Writing header
+ memcpy((*memory_out), &memory[0], memory.size());
+ unsigned char* memory_ptr = *memory_out + memory.size();
+ size_t sum = memory.size();
+
+ // Writing offset data for chunks
+ for (unsigned int i = 0; i < num_parts; ++i) {
+ if (exr_images[i].tiles) {
+ const EXRImage* level_image = &exr_images[i];
+ int num_levels = (exr_headers[i]->tile_level_mode != TINYEXR_TILE_RIPMAP_LEVELS) ?
+ offset_data[i].num_x_levels : (offset_data[i].num_x_levels * offset_data[i].num_y_levels);
+ for (int level_index = 0; level_index < num_levels; ++level_index) {
+ for (size_t j = 0; j < offset_data[i].offsets[level_index].size(); ++j) {
+ size_t num_bytes = sizeof(tinyexr_uint64) * offset_data[i].offsets[level_index][j].size();
+ sum += num_bytes;
+ assert(sum <= total_size);
+ memcpy(memory_ptr,
+ reinterpret_cast<unsigned char*>(&offset_data[i].offsets[level_index][j][0]),
+ num_bytes);
+ memory_ptr += num_bytes;
+ }
+ level_image = level_image->next_level;
+ }
+ } else {
+ size_t num_bytes = sizeof(tinyexr::tinyexr_uint64) * static_cast<size_t>(chunk_count[i]);
+ sum += num_bytes;
+ assert(sum <= total_size);
+ std::vector<tinyexr::tinyexr_uint64>& offsets = offset_data[i].offsets[0][0];
+ memcpy(memory_ptr, reinterpret_cast<unsigned char*>(&offsets[0]), num_bytes);
+ memory_ptr += num_bytes;
+ }
+ }
+
+ // Writing chunk data
+ for (unsigned int i = 0; i < num_parts; ++i) {
+ for (size_t j = 0; j < static_cast<size_t>(chunk_count[i]); ++j) {
+ if (num_parts > 1) {
+ sum += 4;
+ assert(sum <= total_size);
+ unsigned int part_number = i;
+ swap4(&part_number);
+ memcpy(memory_ptr, &part_number, 4);
+ memory_ptr += 4;
+ }
+ sum += data_lists[i][j].size();
+ assert(sum <= total_size);
+ memcpy(memory_ptr, &data_lists[i][j][0], data_lists[i][j].size());
+ memory_ptr += data_lists[i][j].size();
+ }
}
+ assert(sum == total_size);
+ return total_size; // OK
+}
+
+} // tinyexr
- return totalSize; // OK
+size_t SaveEXRImageToMemory(const EXRImage* exr_image,
+ const EXRHeader* exr_header,
+ unsigned char** memory_out, const char** err) {
+ return tinyexr::SaveEXRNPartImageToMemory(exr_image, &exr_header, 1, memory_out, err);
}
int SaveEXRImageToFile(const EXRImage *exr_image, const EXRHeader *exr_header,
@@ -12690,7 +7293,7 @@ int SaveEXRImageToFile(const EXRImage *exr_image, const EXRHeader *exr_header,
FILE *fp = NULL;
#ifdef _WIN32
-#if defined(_MSC_VER) || defined(__MINGW32__) // MSVC, MinGW gcc or clang
+#if defined(_MSC_VER) || (defined(MINGW_HAS_SECURE_API) && MINGW_HAS_SECURE_API) // MSVC, MinGW GCC, or Clang
errno_t errcode =
_wfopen_s(&fp, tinyexr::UTF8ToWchar(filename).c_str(), L"wb");
if (errcode != 0) {
@@ -12699,7 +7302,7 @@ int SaveEXRImageToFile(const EXRImage *exr_image, const EXRHeader *exr_header,
return TINYEXR_ERROR_CANT_WRITE_FILE;
}
#else
- // Unknown compiler
+ // Unknown compiler or MinGW without MINGW_HAS_SECURE_API.
fp = fopen(filename, "wb");
#endif
#else
@@ -12733,6 +7336,75 @@ int SaveEXRImageToFile(const EXRImage *exr_image, const EXRHeader *exr_header,
return TINYEXR_SUCCESS;
}
+size_t SaveEXRMultipartImageToMemory(const EXRImage* exr_images,
+ const EXRHeader** exr_headers,
+ unsigned int num_parts,
+ unsigned char** memory_out, const char** err) {
+ if (exr_images == NULL || exr_headers == NULL || num_parts < 2 ||
+ memory_out == NULL) {
+ tinyexr::SetErrorMessage("Invalid argument for SaveEXRNPartImageToMemory",
+ err);
+ return 0;
+ }
+ return tinyexr::SaveEXRNPartImageToMemory(exr_images, exr_headers, num_parts, memory_out, err);
+}
+
+int SaveEXRMultipartImageToFile(const EXRImage* exr_images,
+ const EXRHeader** exr_headers,
+ unsigned int num_parts,
+ const char* filename,
+ const char** err) {
+ if (exr_images == NULL || exr_headers == NULL || num_parts < 2) {
+ tinyexr::SetErrorMessage("Invalid argument for SaveEXRMultipartImageToFile",
+ err);
+ return TINYEXR_ERROR_INVALID_ARGUMENT;
+ }
+
+ FILE *fp = NULL;
+#ifdef _WIN32
+#if defined(_MSC_VER) || (defined(MINGW_HAS_SECURE_API) && MINGW_HAS_SECURE_API) // MSVC, MinGW GCC, or Clang.
+ errno_t errcode =
+ _wfopen_s(&fp, tinyexr::UTF8ToWchar(filename).c_str(), L"wb");
+ if (errcode != 0) {
+ tinyexr::SetErrorMessage("Cannot write a file: " + std::string(filename),
+ err);
+ return TINYEXR_ERROR_CANT_WRITE_FILE;
+ }
+#else
+ // Unknown compiler or MinGW without MINGW_HAS_SECURE_API.
+ fp = fopen(filename, "wb");
+#endif
+#else
+ fp = fopen(filename, "wb");
+#endif
+ if (!fp) {
+ tinyexr::SetErrorMessage("Cannot write a file: " + std::string(filename),
+ err);
+ return TINYEXR_ERROR_CANT_WRITE_FILE;
+ }
+
+ unsigned char *mem = NULL;
+ size_t mem_size = SaveEXRMultipartImageToMemory(exr_images, exr_headers, num_parts, &mem, err);
+ if (mem_size == 0) {
+ return TINYEXR_ERROR_SERIALZATION_FAILED;
+ }
+
+ size_t written_size = 0;
+ if ((mem_size > 0) && mem) {
+ written_size = fwrite(mem, 1, mem_size, fp);
+ }
+ free(mem);
+
+ fclose(fp);
+
+ if (written_size != mem_size) {
+ tinyexr::SetErrorMessage("Cannot write a file", err);
+ return TINYEXR_ERROR_CANT_WRITE_FILE;
+ }
+
+ return TINYEXR_SUCCESS;
+}
+
int LoadDeepEXR(DeepImage *deep_image, const char *filename, const char **err) {
if (deep_image == NULL) {
tinyexr::SetErrorMessage("Invalid argument for LoadDeepEXR", err);
@@ -12741,7 +7413,7 @@ int LoadDeepEXR(DeepImage *deep_image, const char *filename, const char **err) {
#ifdef _WIN32
FILE *fp = NULL;
-#if defined(_MSC_VER) || defined(__MINGW32__) // MSVC, MinGW gcc or clang
+#if defined(_MSC_VER) || (defined(MINGW_HAS_SECURE_API) && MINGW_HAS_SECURE_API) // MSVC, MinGW GCC, or Clang.
errno_t errcode =
_wfopen_s(&fp, tinyexr::UTF8ToWchar(filename).c_str(), L"rb");
if (errcode != 0) {
@@ -12750,7 +7422,7 @@ int LoadDeepEXR(DeepImage *deep_image, const char *filename, const char **err) {
return TINYEXR_ERROR_CANT_OPEN_FILE;
}
#else
- // Unknown compiler
+ // Unknown compiler or MinGW without MINGW_HAS_SECURE_API.
fp = fopen(filename, "rb");
#endif
if (!fp) {
@@ -12917,9 +7589,6 @@ int LoadDeepEXR(DeepImage *deep_image, const char *filename, const char **err) {
int data_width = dw - dx + 1;
int data_height = dh - dy + 1;
- std::vector<float> image(
- static_cast<size_t>(data_width * data_height * 4)); // 4 = RGBA
-
// Read offset tables.
int num_blocks = data_height / num_scanline_blocks;
if (num_blocks * num_scanline_blocks < data_height) {
@@ -13138,6 +7807,9 @@ void InitEXRImage(EXRImage *exr_image) {
exr_image->images = NULL;
exr_image->tiles = NULL;
+ exr_image->next_level = NULL;
+ exr_image->level_x = 0;
+ exr_image->level_y = 0;
exr_image->num_tiles = 0;
}
@@ -13184,14 +7856,43 @@ int FreeEXRHeader(EXRHeader *exr_header) {
free(exr_header->custom_attributes);
}
+ EXRSetNameAttr(exr_header, NULL);
+
return TINYEXR_SUCCESS;
}
+void EXRSetNameAttr(EXRHeader* exr_header, const char* name) {
+ if (exr_header == NULL) {
+ return;
+ }
+ memset(exr_header->name, 0, 256);
+ if (name != NULL) {
+ size_t len = std::min(strlen(name), (size_t)255);
+ if (len) {
+ memcpy(exr_header->name, name, len);
+ }
+ }
+}
+
+int EXRNumLevels(const EXRImage* exr_image) {
+ if (exr_image == NULL) return 0;
+ if(exr_image->images) return 1; // scanlines
+ int levels = 1;
+ const EXRImage* level_image = exr_image;
+ while((level_image = level_image->next_level)) ++levels;
+ return levels;
+}
+
int FreeEXRImage(EXRImage *exr_image) {
if (exr_image == NULL) {
return TINYEXR_ERROR_INVALID_ARGUMENT;
}
+ if (exr_image->next_level) {
+ FreeEXRImage(exr_image->next_level);
+ delete exr_image->next_level;
+ }
+
for (int i = 0; i < exr_image->num_channels; i++) {
if (exr_image->images && exr_image->images[i]) {
free(exr_image->images[i]);
@@ -13229,7 +7930,7 @@ int ParseEXRHeaderFromFile(EXRHeader *exr_header, const EXRVersion *exr_version,
FILE *fp = NULL;
#ifdef _WIN32
-#if defined(_MSC_VER) || defined(__MINGW32__) // MSVC, MinGW gcc or clang
+#if defined(_MSC_VER) || (defined(MINGW_HAS_SECURE_API) && MINGW_HAS_SECURE_API) // MSVC, MinGW GCC, or Clang.
errno_t errcode =
_wfopen_s(&fp, tinyexr::UTF8ToWchar(filename).c_str(), L"rb");
if (errcode != 0) {
@@ -13237,7 +7938,7 @@ int ParseEXRHeaderFromFile(EXRHeader *exr_header, const EXRVersion *exr_version,
return TINYEXR_ERROR_INVALID_FILE;
}
#else
- // Unknown compiler
+ // Unknown compiler or MinGW without MINGW_HAS_SECURE_API.
fp = fopen(filename, "rb");
#endif
#else
@@ -13333,11 +8034,11 @@ int ParseEXRMultipartHeaderFromMemory(EXRHeader ***exr_headers,
static_cast<EXRHeader **>(malloc(sizeof(EXRHeader *) * infos.size()));
for (size_t i = 0; i < infos.size(); i++) {
EXRHeader *exr_header = static_cast<EXRHeader *>(malloc(sizeof(EXRHeader)));
+ memset(exr_header, 0, sizeof(EXRHeader));
ConvertHeader(exr_header, infos[i]);
- // transfoer `tiled` from version.
- exr_header->tiled = exr_version->tiled;
+ exr_header->multipart = exr_version->multipart ? 1 : 0;
(*exr_headers)[i] = exr_header;
}
@@ -13359,7 +8060,7 @@ int ParseEXRMultipartHeaderFromFile(EXRHeader ***exr_headers, int *num_headers,
FILE *fp = NULL;
#ifdef _WIN32
-#if defined(_MSC_VER) || defined(__MINGW32__) // MSVC, MinGW gcc or clang
+#if defined(_MSC_VER) || (defined(MINGW_HAS_SECURE_API) && MINGW_HAS_SECURE_API) // MSVC, MinGW GCC, or Clang.
errno_t errcode =
_wfopen_s(&fp, tinyexr::UTF8ToWchar(filename).c_str(), L"rb");
if (errcode != 0) {
@@ -13367,7 +8068,7 @@ int ParseEXRMultipartHeaderFromFile(EXRHeader ***exr_headers, int *num_headers,
return TINYEXR_ERROR_INVALID_FILE;
}
#else
- // Unknown compiler
+ // Unknown compiler or MinGW without MINGW_HAS_SECURE_API.
fp = fopen(filename, "rb");
#endif
#else
@@ -13465,14 +8166,14 @@ int ParseEXRVersionFromFile(EXRVersion *version, const char *filename) {
FILE *fp = NULL;
#ifdef _WIN32
-#if defined(_MSC_VER) || defined(__MINGW32__) // MSVC, MinGW gcc or clang
+#if defined(_MSC_VER) || (defined(MINGW_HAS_SECURE_API) && MINGW_HAS_SECURE_API) // MSVC, MinGW GCC, or Clang.
errno_t err = _wfopen_s(&fp, tinyexr::UTF8ToWchar(filename).c_str(), L"rb");
if (err != 0) {
// TODO(syoyo): return wfopen_s erro code
return TINYEXR_ERROR_CANT_OPEN_FILE;
}
#else
- // Unknown compiler
+ // Unknown compiler or MinGW without MINGW_HAS_SECURE_API.
fp = fopen(filename, "rb");
#endif
#else
@@ -13543,51 +8244,82 @@ int LoadEXRMultipartImageFromMemory(EXRImage *exr_images,
// http://www.openexr.com/openexrfilelayout.pdf
// Load chunk offset table.
- std::vector<std::vector<tinyexr::tinyexr_uint64> > chunk_offset_table_list;
+ std::vector<tinyexr::OffsetData> chunk_offset_table_list;
+ chunk_offset_table_list.reserve(num_parts);
for (size_t i = 0; i < static_cast<size_t>(num_parts); i++) {
- std::vector<tinyexr::tinyexr_uint64> offset_table(
- static_cast<size_t>(exr_headers[i]->chunk_count));
-
- for (size_t c = 0; c < offset_table.size(); c++) {
- tinyexr::tinyexr_uint64 offset;
- memcpy(&offset, marker, 8);
- tinyexr::swap8(&offset);
+ chunk_offset_table_list.resize(chunk_offset_table_list.size() + 1);
+ tinyexr::OffsetData& offset_data = chunk_offset_table_list.back();
+ if (!exr_headers[i]->tiled || exr_headers[i]->tile_level_mode == TINYEXR_TILE_ONE_LEVEL) {
+ tinyexr::InitSingleResolutionOffsets(offset_data, exr_headers[i]->chunk_count);
+ std::vector<tinyexr::tinyexr_uint64>& offset_table = offset_data.offsets[0][0];
+
+ for (size_t c = 0; c < offset_table.size(); c++) {
+ tinyexr::tinyexr_uint64 offset;
+ memcpy(&offset, marker, 8);
+ tinyexr::swap8(&offset);
+
+ if (offset >= size) {
+ tinyexr::SetErrorMessage("Invalid offset size in EXR header chunks.",
+ err);
+ return TINYEXR_ERROR_INVALID_DATA;
+ }
- if (offset >= size) {
- tinyexr::SetErrorMessage("Invalid offset size in EXR header chunks.",
- err);
- return TINYEXR_ERROR_INVALID_DATA;
+ offset_table[c] = offset + 4; // +4 to skip 'part number'
+ marker += 8;
+ }
+ } else {
+ {
+ std::vector<int> num_x_tiles, num_y_tiles;
+ tinyexr::PrecalculateTileInfo(num_x_tiles, num_y_tiles, exr_headers[i]);
+ int num_blocks = InitTileOffsets(offset_data, exr_headers[i], num_x_tiles, num_y_tiles);
+ if (num_blocks != exr_headers[i]->chunk_count) {
+ tinyexr::SetErrorMessage("Invalid offset table size.", err);
+ return TINYEXR_ERROR_INVALID_DATA;
+ }
+ }
+ for (unsigned int l = 0; l < offset_data.offsets.size(); ++l) {
+ for (unsigned int dy = 0; dy < offset_data.offsets[l].size(); ++dy) {
+ for (unsigned int dx = 0; dx < offset_data.offsets[l][dy].size(); ++dx) {
+ tinyexr::tinyexr_uint64 offset;
+ memcpy(&offset, marker, sizeof(tinyexr::tinyexr_uint64));
+ tinyexr::swap8(&offset);
+ if (offset >= size) {
+ tinyexr::SetErrorMessage("Invalid offset size in EXR header chunks.",
+ err);
+ return TINYEXR_ERROR_INVALID_DATA;
+ }
+ offset_data.offsets[l][dy][dx] = offset + 4; // +4 to skip 'part number'
+ marker += sizeof(tinyexr::tinyexr_uint64); // = 8
+ }
+ }
}
-
- offset_table[c] = offset + 4; // +4 to skip 'part number'
- marker += 8;
}
-
- chunk_offset_table_list.push_back(offset_table);
}
// Decode image.
for (size_t i = 0; i < static_cast<size_t>(num_parts); i++) {
- std::vector<tinyexr::tinyexr_uint64> &offset_table =
- chunk_offset_table_list[i];
+ tinyexr::OffsetData &offset_data = chunk_offset_table_list[i];
// First check 'part number' is identitical to 'i'
- for (size_t c = 0; c < offset_table.size(); c++) {
- const unsigned char *part_number_addr =
- memory + offset_table[c] - 4; // -4 to move to 'part number' field.
- unsigned int part_no;
- memcpy(&part_no, part_number_addr, sizeof(unsigned int)); // 4
- tinyexr::swap4(&part_no);
-
- if (part_no != i) {
- tinyexr::SetErrorMessage("Invalid `part number' in EXR header chunks.",
- err);
- return TINYEXR_ERROR_INVALID_DATA;
- }
- }
+ for (unsigned int l = 0; l < offset_data.offsets.size(); ++l)
+ for (unsigned int dy = 0; dy < offset_data.offsets[l].size(); ++dy)
+ for (unsigned int dx = 0; dx < offset_data.offsets[l][dy].size(); ++dx) {
+
+ const unsigned char *part_number_addr =
+ memory + offset_data.offsets[l][dy][dx] - 4; // -4 to move to 'part number' field.
+ unsigned int part_no;
+ memcpy(&part_no, part_number_addr, sizeof(unsigned int)); // 4
+ tinyexr::swap4(&part_no);
+
+ if (part_no != i) {
+ tinyexr::SetErrorMessage("Invalid `part number' in EXR header chunks.",
+ err);
+ return TINYEXR_ERROR_INVALID_DATA;
+ }
+ }
std::string e;
- int ret = tinyexr::DecodeChunk(&exr_images[i], exr_headers[i], offset_table,
+ int ret = tinyexr::DecodeChunk(&exr_images[i], exr_headers[i], offset_data,
memory, size, &e);
if (ret != TINYEXR_SUCCESS) {
if (!e.empty()) {
@@ -13612,7 +8344,7 @@ int LoadEXRMultipartImageFromFile(EXRImage *exr_images,
FILE *fp = NULL;
#ifdef _WIN32
-#if defined(_MSC_VER) || defined(__MINGW32__) // MSVC, MinGW gcc or clang
+#if defined(_MSC_VER) || (defined(MINGW_HAS_SECURE_API) && MINGW_HAS_SECURE_API) // MSVC, MinGW GCC, or Clang.
errno_t errcode =
_wfopen_s(&fp, tinyexr::UTF8ToWchar(filename).c_str(), L"rb");
if (errcode != 0) {
@@ -13620,7 +8352,7 @@ int LoadEXRMultipartImageFromFile(EXRImage *exr_images,
return TINYEXR_ERROR_CANT_OPEN_FILE;
}
#else
- // Unknown compiler
+ // Unknown compiler or MinGW without MINGW_HAS_SECURE_API.
fp = fopen(filename, "rb");
#endif
#else
diff --git a/thirdparty/wslay/includes/config.h b/thirdparty/wslay/config.h
index 771ad12528..f291801ba1 100644
--- a/thirdparty/wslay/includes/config.h
+++ b/thirdparty/wslay/config.h
@@ -1,8 +1,10 @@
#ifndef CONFIG_H
#define CONFIG_H
+// -- GODOT start --
#ifdef BIG_ENDIAN_ENABLED
#define WORDS_BIGENDIAN
#endif
+// -- GODOT end --
#endif /* CONFIG_H */
diff --git a/thirdparty/wslay/msvcfix.diff b/thirdparty/wslay/patches/msvcfix.diff
index 28721844f4..f58b6d44f0 100644
--- a/thirdparty/wslay/msvcfix.diff
+++ b/thirdparty/wslay/patches/msvcfix.diff
@@ -1,8 +1,8 @@
diff --git a/thirdparty/wslay/includes/wslay/wslay.h b/thirdparty/wslay/includes/wslay/wslay.h
-index 2fde81a4e..9c751b05b 100644
+index 77a4e8253f..ac6873613f 100644
--- a/thirdparty/wslay/includes/wslay/wslay.h
+++ b/thirdparty/wslay/includes/wslay/wslay.h
-@@ -33,6 +33,12 @@ extern "C" {
+@@ -33,6 +33,13 @@ extern "C" {
#include <stdlib.h>
#include <sys/types.h>
@@ -12,6 +12,7 @@ index 2fde81a4e..9c751b05b 100644
+typedef SSIZE_T ssize_t;
+#endif
+/* GODOT END */
-
++
/*
* wslay/wslayver.h is generated from wslay/wslayver.h.in by
+ * configure. The projects which do not use autotools can set
diff --git a/thirdparty/wslay/includes/wslay/wslay.h b/thirdparty/wslay/wslay/wslay.h
index 9c751b05b7..ac6873613f 100644
--- a/thirdparty/wslay/includes/wslay/wslay.h
+++ b/thirdparty/wslay/wslay/wslay.h
@@ -25,7 +25,7 @@
#ifndef WSLAY_H
#define WSLAY_H
-#ifdef __cplusplus
+#ifdef __cplusplus
extern "C" {
#endif
@@ -155,10 +155,10 @@ enum wslay_opcode {
* These macros assume that rsv is constructed by ((RSV1 << 2) |
* (RSV2 << 1) | RSV3)
*/
-#define WSLAY_RSV_NONE ((uint8_t) 0)
-#define WSLAY_RSV1_BIT (((uint8_t) 1) << 2)
-#define WSLAY_RSV2_BIT (((uint8_t) 1) << 1)
-#define WSLAY_RSV3_BIT (((uint8_t) 1) << 0)
+#define WSLAY_RSV_NONE ((uint8_t)0)
+#define WSLAY_RSV1_BIT (((uint8_t)1) << 2)
+#define WSLAY_RSV2_BIT (((uint8_t)1) << 1)
+#define WSLAY_RSV3_BIT (((uint8_t)1) << 0)
#define wslay_get_rsv1(rsv) ((rsv >> 2) & 1)
#define wslay_get_rsv2(rsv) ((rsv >> 1) & 1)
@@ -172,7 +172,7 @@ struct wslay_frame_iocb {
* RFC6455 requires 0 unless extensions are negotiated.
*/
uint8_t rsv;
- /* 4 bit opcode */
+ /* 4 bit opcode */
uint8_t opcode;
/* payload length [0, 2**63-1] */
uint64_t payload_length;
@@ -229,6 +229,33 @@ ssize_t wslay_frame_send(wslay_frame_context_ptr ctx,
struct wslay_frame_iocb *iocb);
/*
+ * Write WebSocket frame specified in iocb to buf of length
+ * buflen. ctx must be initialized using wslay_frame_context_init()
+ * function. iocb->fin must be 1 if this is a fin frame, otherwise 0.
+ * iocb->rsv is reserved bits. iocb->opcode must be the opcode of
+ * this frame. iocb->mask must be 1 if this is masked frame,
+ * otherwise 0. iocb->payload_length is the payload_length of this
+ * frame. iocb->data must point to the payload data to be
+ * sent. iocb->data_length must be the length of the data. Unlike
+ * wslay_frame_send, this function does not call send_callback
+ * function. This function calls gen_mask_callback function if it
+ * needs new mask key. This function returns the number of bytes
+ * written to a buffer. Unlike wslay_frame_send, it includes the
+ * number of header bytes. Instead, the number of payload bytes
+ * written is assigned to *pwpayloadlen if this function succeeds. If
+ * there is not enough space left in a buffer, it returns 0. If the
+ * library detects error in iocb, this function returns
+ * WSLAY_ERR_INVALID_ARGUMENT. If callback functions report a
+ * failure, this function returns WSLAY_ERR_INVALID_CALLBACK. This
+ * function does not always send all given data in iocb. If there are
+ * remaining data to be sent, adjust data and data_length in iocb
+ * accordingly and call this function again.
+ */
+ssize_t wslay_frame_write(wslay_frame_context_ptr ctx,
+ struct wslay_frame_iocb *iocb, uint8_t *buf,
+ size_t buflen, size_t *pwpayloadlen);
+
+/*
* Receives WebSocket frame and stores it in iocb. This function
* returns the number of payload bytes received. This does not
* include header bytes. In this case, iocb will be populated as
@@ -276,9 +303,9 @@ struct wslay_event_on_msg_recv_arg {
* Callback function invoked by wslay_event_recv() when a message is
* completely received.
*/
-typedef void (*wslay_event_on_msg_recv_callback)
-(wslay_event_context_ptr ctx,
- const struct wslay_event_on_msg_recv_arg *arg, void *user_data);
+typedef void (*wslay_event_on_msg_recv_callback)(
+ wslay_event_context_ptr ctx, const struct wslay_event_on_msg_recv_arg *arg,
+ void *user_data);
struct wslay_event_on_frame_recv_start_arg {
/* fin bit; 1 for final frame, or 0. */
@@ -296,9 +323,9 @@ struct wslay_event_on_frame_recv_start_arg {
* starts to be received. This callback function is only invoked once
* for each frame.
*/
-typedef void (*wslay_event_on_frame_recv_start_callback)
-(wslay_event_context_ptr ctx,
- const struct wslay_event_on_frame_recv_start_arg *arg, void *user_data);
+typedef void (*wslay_event_on_frame_recv_start_callback)(
+ wslay_event_context_ptr ctx,
+ const struct wslay_event_on_frame_recv_start_arg *arg, void *user_data);
struct wslay_event_on_frame_recv_chunk_arg {
/* chunk of payload data */
@@ -311,16 +338,16 @@ struct wslay_event_on_frame_recv_chunk_arg {
* Callback function invoked by wslay_event_recv() when a chunk of
* frame payload is received.
*/
-typedef void (*wslay_event_on_frame_recv_chunk_callback)
-(wslay_event_context_ptr ctx,
- const struct wslay_event_on_frame_recv_chunk_arg *arg, void *user_data);
+typedef void (*wslay_event_on_frame_recv_chunk_callback)(
+ wslay_event_context_ptr ctx,
+ const struct wslay_event_on_frame_recv_chunk_arg *arg, void *user_data);
/*
* Callback function invoked by wslay_event_recv() when a frame is
* completely received.
*/
-typedef void (*wslay_event_on_frame_recv_end_callback)
-(wslay_event_context_ptr ctx, void *user_data);
+typedef void (*wslay_event_on_frame_recv_end_callback)(
+ wslay_event_context_ptr ctx, void *user_data);
/*
* Callback function invoked by wslay_event_recv() when it wants to
@@ -394,9 +421,9 @@ struct wslay_event_callbacks {
* WSLAY_ERR_NOMEM
* Out of memory.
*/
-int wslay_event_context_server_init
-(wslay_event_context_ptr *ctx,
- const struct wslay_event_callbacks *callbacks, void *user_data);
+int wslay_event_context_server_init(
+ wslay_event_context_ptr *ctx, const struct wslay_event_callbacks *callbacks,
+ void *user_data);
/*
* Initializes ctx as WebSocket client. user_data is an arbitrary
@@ -409,9 +436,9 @@ int wslay_event_context_server_init
* WSLAY_ERR_NOMEM
* Out of memory.
*/
-int wslay_event_context_client_init
-(wslay_event_context_ptr *ctx,
- const struct wslay_event_callbacks *callbacks, void *user_data);
+int wslay_event_context_client_init(
+ wslay_event_context_ptr *ctx, const struct wslay_event_callbacks *callbacks,
+ void *user_data);
/*
* Releases allocated resources for ctx.
@@ -462,8 +489,8 @@ void wslay_event_config_set_max_recv_msg_length(wslay_event_context_ptr ctx,
* or wslay_event_context_server_init() or
* wslay_event_context_client_init() are replaced with callbacks.
*/
-void wslay_event_config_set_callbacks
-(wslay_event_context_ptr ctx, const struct wslay_event_callbacks *callbacks);
+void wslay_event_config_set_callbacks(
+ wslay_event_context_ptr ctx, const struct wslay_event_callbacks *callbacks);
/*
* Receives messages from peer. When receiving
@@ -538,6 +565,50 @@ int wslay_event_recv(wslay_event_context_ptr ctx);
*/
int wslay_event_send(wslay_event_context_ptr ctx);
+/*
+ * Writes queued messages to a buffer. Unlike wslay_event_send(), this
+ * function writes messages into the given buffer. It does not use
+ * wslay_event_send_callback function. Single call of
+ * wslay_event_write() writes multiple messages until there is not
+ * enough space left in a buffer.
+ *
+ * If ctx is initialized for WebSocket client use, wslay_event_write()
+ * uses wslay_event_genmask_callback to get new mask key.
+ *
+ * buf is a pointer to buffer and its capacity is given in buflen. It
+ * should have at least 14 bytes.
+ *
+ * When a message queued using wslay_event_queue_fragmented_msg() is
+ * sent, wslay_event_write() invokes
+ * wslay_event_fragmented_msg_callback for that message.
+ *
+ * After close control frame is sent, this function calls
+ * wslay_event_set_write_enabled() with second argument 0 to disable
+ * further transmission to peer.
+ *
+ * If there are any pending messages, wslay_event_want_write() returns
+ * 1, otherwise returns 0.
+ *
+ * In case of a fatal errror which leads to negative return code, this
+ * function calls wslay_event_set_write_enabled() with second argument
+ * 0 to disable further transmission to peer.
+ *
+ * wslay_event_write() returns the number of bytes written to a buffer
+ * if it succeeds, or one of the following negative error codes:
+ *
+ * WSLAY_ERR_CALLBACK_FAILURE
+ * User defined callback function is failed.
+ *
+ * WSLAY_ERR_NOMEM
+ * Out of memory.
+ *
+ * When negative error code is returned, application must not make any
+ * further call of wslay_event_write() and must close WebSocket
+ * connection.
+ */
+ssize_t wslay_event_write(wslay_event_context_ptr ctx, uint8_t *buf,
+ size_t buflen);
+
struct wslay_event_msg {
uint8_t opcode;
const uint8_t *msg;
@@ -594,10 +665,9 @@ union wslay_event_msg_source {
* moment, return 0. If there is an error, return -1 and set error
* code WSLAY_ERR_CALLBACK_FAILURE using wslay_event_set_error().
*/
-typedef ssize_t (*wslay_event_fragmented_msg_callback)
-(wslay_event_context_ptr ctx,
- uint8_t *buf, size_t len, const union wslay_event_msg_source *source,
- int *eof, void *user_data);
+typedef ssize_t (*wslay_event_fragmented_msg_callback)(
+ wslay_event_context_ptr ctx, uint8_t *buf, size_t len,
+ const union wslay_event_msg_source *source, int *eof, void *user_data);
struct wslay_event_fragmented_msg {
/* opcode */
@@ -631,15 +701,16 @@ struct wslay_event_fragmented_msg {
* WSLAY_ERR_NOMEM
* Out of memory.
*/
-int wslay_event_queue_fragmented_msg
-(wslay_event_context_ptr ctx, const struct wslay_event_fragmented_msg *arg);
+int wslay_event_queue_fragmented_msg(
+ wslay_event_context_ptr ctx, const struct wslay_event_fragmented_msg *arg);
/*
* Extended version of wslay_event_queue_fragmented_msg which allows to set
* reserved bits.
*/
-int wslay_event_queue_fragmented_msg_ex(wslay_event_context_ptr ctx,
- const struct wslay_event_fragmented_msg *arg, uint8_t rsv);
+int wslay_event_queue_fragmented_msg_ex(
+ wslay_event_context_ptr ctx, const struct wslay_event_fragmented_msg *arg,
+ uint8_t rsv);
/*
* Queues close control frame. This function is provided just for
@@ -669,8 +740,7 @@ int wslay_event_queue_fragmented_msg_ex(wslay_event_context_ptr ctx,
* WSLAY_ERR_NOMEM
* Out of memory.
*/
-int wslay_event_queue_close(wslay_event_context_ptr ctx,
- uint16_t status_code,
+int wslay_event_queue_close(wslay_event_context_ptr ctx, uint16_t status_code,
const uint8_t *reason, size_t reason_length);
/*
diff --git a/thirdparty/wslay/includes/wslay/wslayver.h b/thirdparty/wslay/wslay/wslayver.h
index 28f2018039..28f2018039 100644
--- a/thirdparty/wslay/includes/wslay/wslayver.h
+++ b/thirdparty/wslay/wslay/wslayver.h
diff --git a/thirdparty/wslay/wslay_event.c b/thirdparty/wslay/wslay_event.c
index 140f7c01da..4c29fe4000 100644
--- a/thirdparty/wslay/wslay_event.c
+++ b/thirdparty/wslay/wslay_event.c
@@ -28,9 +28,9 @@
#include <assert.h>
#include <stdio.h>
-#include "wslay_queue.h"
#include "wslay_frame.h"
#include "wslay_net.h"
+#include "wslay_macro.h"
/* Start of utf8 dfa */
/* Copyright (c) 2008-2010 Bjoern Hoehrmann <bjoern@hoehrmann.de>
* See http://bjoern.hoehrmann.de/utf-8/decoder/dfa/ for details.
@@ -60,6 +60,7 @@
#define UTF8_ACCEPT 0
#define UTF8_REJECT 12
+/* clang-format off */
static const uint8_t utf8d[] = {
/*
* The first part of the table maps bytes to character classes that
@@ -84,14 +85,13 @@ static const uint8_t utf8d[] = {
12,12,12,12,12,12,12,36,12,36,12,12, 12,36,12,12,12,12,12,36,12,36,12,12,
12,36,12,12,12,12,12,12,12,12,12,12,
};
+/* clang-format on */
-static uint32_t
-decode(uint32_t* state, uint32_t* codep, uint32_t byte) {
+static uint32_t decode(uint32_t *state, uint32_t *codep, uint32_t byte) {
uint32_t type = utf8d[byte];
- *codep = (*state != UTF8_ACCEPT) ?
- (byte & 0x3fu) | (*codep << 6) :
- (0xff >> type) & (byte);
+ *codep = (*state != UTF8_ACCEPT) ? (byte & 0x3fu) | (*codep << 6)
+ : (0xff >> type) & (byte);
*state = utf8d[256 + *state + type];
return *state;
@@ -100,117 +100,96 @@ decode(uint32_t* state, uint32_t* codep, uint32_t byte) {
/* End of utf8 dfa */
static ssize_t wslay_event_frame_recv_callback(uint8_t *buf, size_t len,
- int flags, void *user_data)
-{
+ int flags, void *user_data) {
struct wslay_event_frame_user_data *e =
- (struct wslay_event_frame_user_data*)user_data;
+ (struct wslay_event_frame_user_data *)user_data;
return e->ctx->callbacks.recv_callback(e->ctx, buf, len, flags, e->user_data);
}
static ssize_t wslay_event_frame_send_callback(const uint8_t *data, size_t len,
- int flags, void *user_data)
-{
+ int flags, void *user_data) {
struct wslay_event_frame_user_data *e =
- (struct wslay_event_frame_user_data*)user_data;
+ (struct wslay_event_frame_user_data *)user_data;
return e->ctx->callbacks.send_callback(e->ctx, data, len, flags,
e->user_data);
}
static int wslay_event_frame_genmask_callback(uint8_t *buf, size_t len,
- void *user_data)
-{
+ void *user_data) {
struct wslay_event_frame_user_data *e =
- (struct wslay_event_frame_user_data*)user_data;
+ (struct wslay_event_frame_user_data *)user_data;
return e->ctx->callbacks.genmask_callback(e->ctx, buf, len, e->user_data);
}
-static int wslay_event_byte_chunk_init
-(struct wslay_event_byte_chunk **chunk, size_t len)
-{
- *chunk = (struct wslay_event_byte_chunk*)malloc
- (sizeof(struct wslay_event_byte_chunk));
- if(*chunk == NULL) {
+static int wslay_event_byte_chunk_init(struct wslay_event_byte_chunk **chunk,
+ size_t len) {
+ *chunk = malloc(sizeof(struct wslay_event_byte_chunk) + len);
+ if (*chunk == NULL) {
return WSLAY_ERR_NOMEM;
}
memset(*chunk, 0, sizeof(struct wslay_event_byte_chunk));
- if(len) {
- (*chunk)->data = (uint8_t*)malloc(len);
- if((*chunk)->data == NULL) {
- free(*chunk);
- return WSLAY_ERR_NOMEM;
- }
+ if (len) {
+ (*chunk)->data = (uint8_t *)(*chunk) + sizeof(**chunk);
(*chunk)->data_length = len;
}
return 0;
}
-static void wslay_event_byte_chunk_free(struct wslay_event_byte_chunk *c)
-{
- if(!c) {
- return;
- }
- free(c->data);
+static void wslay_event_byte_chunk_free(struct wslay_event_byte_chunk *c) {
free(c);
}
static void wslay_event_byte_chunk_copy(struct wslay_event_byte_chunk *c,
- size_t off,
- const uint8_t *data, size_t data_length)
-{
- memcpy(c->data+off, data, data_length);
+ size_t off, const uint8_t *data,
+ size_t data_length) {
+ memcpy(c->data + off, data, data_length);
}
-static void wslay_event_imsg_set(struct wslay_event_imsg *m,
- uint8_t fin, uint8_t rsv, uint8_t opcode)
-{
+static void wslay_event_imsg_set(struct wslay_event_imsg *m, uint8_t fin,
+ uint8_t rsv, uint8_t opcode) {
m->fin = fin;
m->rsv = rsv;
m->opcode = opcode;
m->msg_length = 0;
}
-static void wslay_event_imsg_chunks_free(struct wslay_event_imsg *m)
-{
- if(!m->chunks) {
- return;
- }
- while(!wslay_queue_empty(m->chunks)) {
- wslay_event_byte_chunk_free(wslay_queue_top(m->chunks));
- wslay_queue_pop(m->chunks);
+static void wslay_event_imsg_chunks_free(struct wslay_event_imsg *m) {
+ while (!wslay_queue_empty(&m->chunks)) {
+ struct wslay_event_byte_chunk *chunk = wslay_struct_of(
+ wslay_queue_top(&m->chunks), struct wslay_event_byte_chunk, qe);
+ wslay_queue_pop(&m->chunks);
+ wslay_event_byte_chunk_free(chunk);
}
}
-static void wslay_event_imsg_reset(struct wslay_event_imsg *m)
-{
+static void wslay_event_imsg_reset(struct wslay_event_imsg *m) {
m->opcode = 0xffu;
m->utf8state = UTF8_ACCEPT;
wslay_event_imsg_chunks_free(m);
}
-static int wslay_event_imsg_append_chunk(struct wslay_event_imsg *m, size_t len)
-{
- if(len == 0) {
+static int wslay_event_imsg_append_chunk(struct wslay_event_imsg *m,
+ size_t len) {
+ if (len == 0) {
return 0;
} else {
int r;
struct wslay_event_byte_chunk *chunk;
- if((r = wslay_event_byte_chunk_init(&chunk, len)) != 0) {
- return r;
- }
- if((r = wslay_queue_push(m->chunks, chunk)) != 0) {
+ if ((r = wslay_event_byte_chunk_init(&chunk, len)) != 0) {
return r;
}
+ wslay_queue_push(&m->chunks, &chunk->qe);
m->msg_length += len;
return 0;
}
}
-static int wslay_event_omsg_non_fragmented_init
-(struct wslay_event_omsg **m, uint8_t opcode, uint8_t rsv,
- const uint8_t *msg, size_t msg_length)
-{
- *m = (struct wslay_event_omsg*)malloc(sizeof(struct wslay_event_omsg));
- if(!*m) {
+static int wslay_event_omsg_non_fragmented_init(struct wslay_event_omsg **m,
+ uint8_t opcode, uint8_t rsv,
+ const uint8_t *msg,
+ size_t msg_length) {
+ *m = malloc(sizeof(struct wslay_event_omsg) + msg_length);
+ if (!*m) {
return WSLAY_ERR_NOMEM;
}
memset(*m, 0, sizeof(struct wslay_event_omsg));
@@ -218,28 +197,22 @@ static int wslay_event_omsg_non_fragmented_init
(*m)->opcode = opcode;
(*m)->rsv = rsv;
(*m)->type = WSLAY_NON_FRAGMENTED;
- if(msg_length) {
- (*m)->data = (uint8_t*)malloc(msg_length);
- if(!(*m)->data) {
- free(*m);
- return WSLAY_ERR_NOMEM;
- }
+ if (msg_length) {
+ (*m)->data = (uint8_t *)(*m) + sizeof(**m);
memcpy((*m)->data, msg, msg_length);
(*m)->data_length = msg_length;
}
return 0;
}
-static int wslay_event_omsg_fragmented_init
-(struct wslay_event_omsg **m, uint8_t opcode, uint8_t rsv,
- const union wslay_event_msg_source source,
- wslay_event_fragmented_msg_callback read_callback)
-{
- *m = (struct wslay_event_omsg*)malloc(sizeof(struct wslay_event_omsg));
- if(!*m) {
+static int wslay_event_omsg_fragmented_init(
+ struct wslay_event_omsg **m, uint8_t opcode, uint8_t rsv,
+ const union wslay_event_msg_source source,
+ wslay_event_fragmented_msg_callback read_callback) {
+ *m = calloc(1, sizeof(struct wslay_event_omsg));
+ if (!*m) {
return WSLAY_ERR_NOMEM;
}
- memset(*m, 0, sizeof(struct wslay_event_omsg));
(*m)->opcode = opcode;
(*m)->rsv = rsv;
(*m)->type = WSLAY_FRAGMENTED;
@@ -248,31 +221,25 @@ static int wslay_event_omsg_fragmented_init
return 0;
}
-static void wslay_event_omsg_free(struct wslay_event_omsg *m)
-{
- if(!m) {
- return;
- }
- free(m->data);
- free(m);
-}
+static void wslay_event_omsg_free(struct wslay_event_omsg *m) { free(m); }
-static uint8_t* wslay_event_flatten_queue(struct wslay_queue *queue, size_t len)
-{
- if(len == 0) {
+static uint8_t *wslay_event_flatten_queue(struct wslay_queue *queue,
+ size_t len) {
+ if (len == 0) {
return NULL;
} else {
size_t off = 0;
- uint8_t *buf = (uint8_t*)malloc(len);
- if(!buf) {
+ uint8_t *buf = malloc(len);
+ if (!buf) {
return NULL;
}
- while(!wslay_queue_empty(queue)) {
- struct wslay_event_byte_chunk *chunk = wslay_queue_top(queue);
- memcpy(buf+off, chunk->data, chunk->data_length);
+ while (!wslay_queue_empty(queue)) {
+ struct wslay_event_byte_chunk *chunk = wslay_struct_of(
+ wslay_queue_top(queue), struct wslay_event_byte_chunk, qe);
+ wslay_queue_pop(queue);
+ memcpy(buf + off, chunk->data, chunk->data_length);
off += chunk->data_length;
wslay_event_byte_chunk_free(chunk);
- wslay_queue_pop(queue);
assert(off <= len);
}
assert(len == off);
@@ -280,17 +247,15 @@ static uint8_t* wslay_event_flatten_queue(struct wslay_queue *queue, size_t len)
}
}
-static int wslay_event_is_msg_queueable(wslay_event_context_ptr ctx)
-{
+static int wslay_event_is_msg_queueable(wslay_event_context_ptr ctx) {
return ctx->write_enabled && (ctx->close_status & WSLAY_CLOSE_QUEUED) == 0;
}
int wslay_event_queue_close(wslay_event_context_ptr ctx, uint16_t status_code,
- const uint8_t *reason, size_t reason_length)
-{
- if(!wslay_event_is_msg_queueable(ctx)) {
+ const uint8_t *reason, size_t reason_length) {
+ if (!wslay_event_is_msg_queueable(ctx)) {
return WSLAY_ERR_NO_MORE_MSG;
- } else if(reason_length > 123) {
+ } else if (reason_length > 123) {
return WSLAY_ERR_INVALID_ARGUMENT;
} else {
uint8_t msg[128];
@@ -298,231 +263,203 @@ int wslay_event_queue_close(wslay_event_context_ptr ctx, uint16_t status_code,
struct wslay_event_msg arg;
uint16_t ncode;
int r;
- if(status_code == 0) {
+ if (status_code == 0) {
msg_length = 0;
} else {
ncode = htons(status_code);
memcpy(msg, &ncode, 2);
- if(reason_length) {
- memcpy(msg+2, reason, reason_length);
+ if (reason_length) {
+ memcpy(msg + 2, reason, reason_length);
}
- msg_length = reason_length+2;
+ msg_length = reason_length + 2;
}
arg.opcode = WSLAY_CONNECTION_CLOSE;
arg.msg = msg;
arg.msg_length = msg_length;
r = wslay_event_queue_msg(ctx, &arg);
- if(r == 0) {
+ if (r == 0) {
ctx->close_status |= WSLAY_CLOSE_QUEUED;
}
return r;
}
}
-static int wslay_event_queue_close_wrapper
-(wslay_event_context_ptr ctx, uint16_t status_code,
- const uint8_t *reason, size_t reason_length)
-{
+static int wslay_event_queue_close_wrapper(wslay_event_context_ptr ctx,
+ uint16_t status_code,
+ const uint8_t *reason,
+ size_t reason_length) {
int r;
ctx->read_enabled = 0;
- if((r = wslay_event_queue_close(ctx, status_code, reason, reason_length)) &&
- r != WSLAY_ERR_NO_MORE_MSG) {
+ if ((r = wslay_event_queue_close(ctx, status_code, reason, reason_length)) &&
+ r != WSLAY_ERR_NO_MORE_MSG) {
return r;
}
return 0;
}
-static int wslay_event_verify_rsv_bits(wslay_event_context_ptr ctx, uint8_t rsv)
-{
+static int wslay_event_verify_rsv_bits(wslay_event_context_ptr ctx,
+ uint8_t rsv) {
return ((rsv & ~ctx->allowed_rsv_bits) == 0);
}
int wslay_event_queue_msg(wslay_event_context_ptr ctx,
- const struct wslay_event_msg *arg)
-{
+ const struct wslay_event_msg *arg) {
return wslay_event_queue_msg_ex(ctx, arg, WSLAY_RSV_NONE);
}
int wslay_event_queue_msg_ex(wslay_event_context_ptr ctx,
- const struct wslay_event_msg *arg, uint8_t rsv)
-{
+ const struct wslay_event_msg *arg, uint8_t rsv) {
int r;
struct wslay_event_omsg *omsg;
- if(!wslay_event_is_msg_queueable(ctx)) {
+ if (!wslay_event_is_msg_queueable(ctx)) {
return WSLAY_ERR_NO_MORE_MSG;
}
/* RSV1 is not allowed for control frames */
- if((wslay_is_ctrl_frame(arg->opcode) &&
- (arg->msg_length > 125 || wslay_get_rsv1(rsv)))
- || !wslay_event_verify_rsv_bits(ctx, rsv)) {
+ if ((wslay_is_ctrl_frame(arg->opcode) &&
+ (arg->msg_length > 125 || wslay_get_rsv1(rsv))) ||
+ !wslay_event_verify_rsv_bits(ctx, rsv)) {
return WSLAY_ERR_INVALID_ARGUMENT;
}
- if((r = wslay_event_omsg_non_fragmented_init
- (&omsg, arg->opcode, rsv, arg->msg, arg->msg_length)) != 0) {
+ if ((r = wslay_event_omsg_non_fragmented_init(
+ &omsg, arg->opcode, rsv, arg->msg, arg->msg_length)) != 0) {
return r;
}
- if(wslay_is_ctrl_frame(arg->opcode)) {
- if((r = wslay_queue_push(ctx->send_ctrl_queue, omsg)) != 0) {
- return r;
- }
+ if (wslay_is_ctrl_frame(arg->opcode)) {
+ wslay_queue_push(&ctx->send_ctrl_queue, &omsg->qe);
} else {
- if((r = wslay_queue_push(ctx->send_queue, omsg)) != 0) {
- return r;
- }
+ wslay_queue_push(&ctx->send_queue, &omsg->qe);
}
++ctx->queued_msg_count;
ctx->queued_msg_length += arg->msg_length;
return 0;
}
-int wslay_event_queue_fragmented_msg
-(wslay_event_context_ptr ctx, const struct wslay_event_fragmented_msg *arg)
-{
+int wslay_event_queue_fragmented_msg(
+ wslay_event_context_ptr ctx, const struct wslay_event_fragmented_msg *arg) {
return wslay_event_queue_fragmented_msg_ex(ctx, arg, WSLAY_RSV_NONE);
}
-int wslay_event_queue_fragmented_msg_ex(wslay_event_context_ptr ctx,
- const struct wslay_event_fragmented_msg *arg, uint8_t rsv)
-{
+int wslay_event_queue_fragmented_msg_ex(
+ wslay_event_context_ptr ctx, const struct wslay_event_fragmented_msg *arg,
+ uint8_t rsv) {
int r;
struct wslay_event_omsg *omsg;
- if(!wslay_event_is_msg_queueable(ctx)) {
+ if (!wslay_event_is_msg_queueable(ctx)) {
return WSLAY_ERR_NO_MORE_MSG;
}
- if(wslay_is_ctrl_frame(arg->opcode) ||
- !wslay_event_verify_rsv_bits(ctx, rsv)) {
+ if (wslay_is_ctrl_frame(arg->opcode) ||
+ !wslay_event_verify_rsv_bits(ctx, rsv)) {
return WSLAY_ERR_INVALID_ARGUMENT;
}
- if((r = wslay_event_omsg_fragmented_init
- (&omsg, arg->opcode, rsv, arg->source, arg->read_callback)) != 0) {
- return r;
- }
- if((r = wslay_queue_push(ctx->send_queue, omsg)) != 0) {
+ if ((r = wslay_event_omsg_fragmented_init(
+ &omsg, arg->opcode, rsv, arg->source, arg->read_callback)) != 0) {
return r;
}
+ wslay_queue_push(&ctx->send_queue, &omsg->qe);
++ctx->queued_msg_count;
return 0;
}
-void wslay_event_config_set_callbacks
-(wslay_event_context_ptr ctx, const struct wslay_event_callbacks *callbacks)
-{
+void wslay_event_config_set_callbacks(
+ wslay_event_context_ptr ctx,
+ const struct wslay_event_callbacks *callbacks) {
ctx->callbacks = *callbacks;
}
-static int wslay_event_context_init
-(wslay_event_context_ptr *ctx,
- const struct wslay_event_callbacks *callbacks,
- void *user_data)
-{
+static int
+wslay_event_context_init(wslay_event_context_ptr *ctx,
+ const struct wslay_event_callbacks *callbacks,
+ void *user_data) {
int i, r;
struct wslay_frame_callbacks frame_callbacks = {
- wslay_event_frame_send_callback,
- wslay_event_frame_recv_callback,
- wslay_event_frame_genmask_callback
- };
- *ctx = (wslay_event_context_ptr)malloc(sizeof(struct wslay_event_context));
- if(!*ctx) {
+ wslay_event_frame_send_callback, wslay_event_frame_recv_callback,
+ wslay_event_frame_genmask_callback};
+ *ctx = calloc(1, sizeof(struct wslay_event_context));
+ if (!*ctx) {
return WSLAY_ERR_NOMEM;
}
- memset(*ctx, 0, sizeof(struct wslay_event_context));
wslay_event_config_set_callbacks(*ctx, callbacks);
(*ctx)->user_data = user_data;
(*ctx)->frame_user_data.ctx = *ctx;
(*ctx)->frame_user_data.user_data = user_data;
- if((r = wslay_frame_context_init(&(*ctx)->frame_ctx, &frame_callbacks,
- &(*ctx)->frame_user_data)) != 0) {
+ if ((r = wslay_frame_context_init(&(*ctx)->frame_ctx, &frame_callbacks,
+ &(*ctx)->frame_user_data)) != 0) {
wslay_event_context_free(*ctx);
return r;
}
(*ctx)->read_enabled = (*ctx)->write_enabled = 1;
- (*ctx)->send_queue = wslay_queue_new();
- if(!(*ctx)->send_queue) {
- wslay_event_context_free(*ctx);
- return WSLAY_ERR_NOMEM;
- }
- (*ctx)->send_ctrl_queue = wslay_queue_new();
- if(!(*ctx)->send_ctrl_queue) {
- wslay_event_context_free(*ctx);
- return WSLAY_ERR_NOMEM;
- }
+ wslay_queue_init(&(*ctx)->send_queue);
+ wslay_queue_init(&(*ctx)->send_ctrl_queue);
(*ctx)->queued_msg_count = 0;
(*ctx)->queued_msg_length = 0;
- for(i = 0; i < 2; ++i) {
+ for (i = 0; i < 2; ++i) {
+ wslay_queue_init(&(*ctx)->imsgs[i].chunks);
wslay_event_imsg_reset(&(*ctx)->imsgs[i]);
- (*ctx)->imsgs[i].chunks = wslay_queue_new();
- if(!(*ctx)->imsgs[i].chunks) {
- wslay_event_context_free(*ctx);
- return WSLAY_ERR_NOMEM;
- }
}
(*ctx)->imsg = &(*ctx)->imsgs[0];
(*ctx)->obufmark = (*ctx)->obuflimit = (*ctx)->obuf;
(*ctx)->status_code_sent = WSLAY_CODE_ABNORMAL_CLOSURE;
(*ctx)->status_code_recv = WSLAY_CODE_ABNORMAL_CLOSURE;
- (*ctx)->max_recv_msg_length = (1u << 31)-1;
+ (*ctx)->max_recv_msg_length = (1u << 31) - 1;
return 0;
}
-int wslay_event_context_server_init
-(wslay_event_context_ptr *ctx,
- const struct wslay_event_callbacks *callbacks,
- void *user_data)
-{
+int wslay_event_context_server_init(
+ wslay_event_context_ptr *ctx, const struct wslay_event_callbacks *callbacks,
+ void *user_data) {
int r;
- if((r = wslay_event_context_init(ctx, callbacks, user_data)) != 0) {
+ if ((r = wslay_event_context_init(ctx, callbacks, user_data)) != 0) {
return r;
}
(*ctx)->server = 1;
return 0;
}
-int wslay_event_context_client_init
-(wslay_event_context_ptr *ctx,
- const struct wslay_event_callbacks *callbacks,
- void *user_data)
-{
+int wslay_event_context_client_init(
+ wslay_event_context_ptr *ctx, const struct wslay_event_callbacks *callbacks,
+ void *user_data) {
int r;
- if((r = wslay_event_context_init(ctx, callbacks, user_data)) != 0) {
+ if ((r = wslay_event_context_init(ctx, callbacks, user_data)) != 0) {
return r;
}
(*ctx)->server = 0;
return 0;
}
-void wslay_event_context_free(wslay_event_context_ptr ctx)
-{
+void wslay_event_context_free(wslay_event_context_ptr ctx) {
int i;
- if(!ctx) {
+ if (!ctx) {
return;
}
- for(i = 0; i < 2; ++i) {
+ for (i = 0; i < 2; ++i) {
wslay_event_imsg_chunks_free(&ctx->imsgs[i]);
- wslay_queue_free(ctx->imsgs[i].chunks);
+ wslay_queue_deinit(&ctx->imsgs[i].chunks);
}
- if(ctx->send_queue) {
- while(!wslay_queue_empty(ctx->send_queue)) {
- wslay_event_omsg_free(wslay_queue_top(ctx->send_queue));
- wslay_queue_pop(ctx->send_queue);
- }
- wslay_queue_free(ctx->send_queue);
+
+ while (!wslay_queue_empty(&ctx->send_queue)) {
+ struct wslay_event_omsg *omsg = wslay_struct_of(
+ wslay_queue_top(&ctx->send_queue), struct wslay_event_omsg, qe);
+ wslay_queue_pop(&ctx->send_queue);
+ wslay_event_omsg_free(omsg);
}
- if(ctx->send_ctrl_queue) {
- while(!wslay_queue_empty(ctx->send_ctrl_queue)) {
- wslay_event_omsg_free(wslay_queue_top(ctx->send_ctrl_queue));
- wslay_queue_pop(ctx->send_ctrl_queue);
- }
- wslay_queue_free(ctx->send_ctrl_queue);
+ wslay_queue_deinit(&ctx->send_queue);
+
+ while (!wslay_queue_empty(&ctx->send_ctrl_queue)) {
+ struct wslay_event_omsg *omsg = wslay_struct_of(
+ wslay_queue_top(&ctx->send_ctrl_queue), struct wslay_event_omsg, qe);
+ wslay_queue_pop(&ctx->send_ctrl_queue);
+ wslay_event_omsg_free(omsg);
}
+ wslay_queue_deinit(&ctx->send_ctrl_queue);
+
wslay_frame_context_free(ctx->frame_ctx);
wslay_event_omsg_free(ctx->omsg);
free(ctx);
}
-static void wslay_event_call_on_frame_recv_start_callback
-(wslay_event_context_ptr ctx, const struct wslay_frame_iocb *iocb)
-{
- if(ctx->callbacks.on_frame_recv_start_callback) {
+static void wslay_event_call_on_frame_recv_start_callback(
+ wslay_event_context_ptr ctx, const struct wslay_frame_iocb *iocb) {
+ if (ctx->callbacks.on_frame_recv_start_callback) {
struct wslay_event_on_frame_recv_start_arg arg;
arg.fin = iocb->fin;
arg.rsv = iocb->rsv;
@@ -532,10 +469,9 @@ static void wslay_event_call_on_frame_recv_start_callback
}
}
-static void wslay_event_call_on_frame_recv_chunk_callback
-(wslay_event_context_ptr ctx, const struct wslay_frame_iocb *iocb)
-{
- if(ctx->callbacks.on_frame_recv_chunk_callback) {
+static void wslay_event_call_on_frame_recv_chunk_callback(
+ wslay_event_context_ptr ctx, const struct wslay_frame_iocb *iocb) {
+ if (ctx->callbacks.on_frame_recv_chunk_callback) {
struct wslay_event_on_frame_recv_chunk_arg arg;
arg.data = iocb->data;
arg.data_length = iocb->data_length;
@@ -543,205 +479,202 @@ static void wslay_event_call_on_frame_recv_chunk_callback
}
}
-static void wslay_event_call_on_frame_recv_end_callback
-(wslay_event_context_ptr ctx)
-{
- if(ctx->callbacks.on_frame_recv_end_callback) {
+static void
+wslay_event_call_on_frame_recv_end_callback(wslay_event_context_ptr ctx) {
+ if (ctx->callbacks.on_frame_recv_end_callback) {
ctx->callbacks.on_frame_recv_end_callback(ctx, ctx->user_data);
}
}
-static int wslay_event_is_valid_status_code(uint16_t status_code)
-{
- return (1000 <= status_code && status_code <= 1011 &&
- status_code != 1004 && status_code != 1005 && status_code != 1006) ||
- (3000 <= status_code && status_code <= 4999);
+static int wslay_event_is_valid_status_code(uint16_t status_code) {
+ return (1000 <= status_code && status_code <= 1011 && status_code != 1004 &&
+ status_code != 1005 && status_code != 1006) ||
+ (3000 <= status_code && status_code <= 4999);
}
-static int wslay_event_config_get_no_buffering(wslay_event_context_ptr ctx)
-{
+static int wslay_event_config_get_no_buffering(wslay_event_context_ptr ctx) {
return (ctx->config & WSLAY_CONFIG_NO_BUFFERING) > 0;
}
-int wslay_event_recv(wslay_event_context_ptr ctx)
-{
+int wslay_event_recv(wslay_event_context_ptr ctx) {
struct wslay_frame_iocb iocb;
ssize_t r;
- while(ctx->read_enabled) {
+ while (ctx->read_enabled) {
memset(&iocb, 0, sizeof(iocb));
r = wslay_frame_recv(ctx->frame_ctx, &iocb);
- if(r >= 0) {
+ if (r >= 0) {
int new_frame = 0;
/* RSV1 is not allowed on control and continuation frames */
- if((!wslay_event_verify_rsv_bits(ctx, iocb.rsv)) ||
- (wslay_get_rsv1(iocb.rsv) && (wslay_is_ctrl_frame(iocb.opcode) ||
- iocb.opcode == WSLAY_CONTINUATION_FRAME)) ||
- (ctx->server && !iocb.mask) || (!ctx->server && iocb.mask)) {
- if((r = wslay_event_queue_close_wrapper
- (ctx, WSLAY_CODE_PROTOCOL_ERROR, NULL, 0)) != 0) {
- return r;
+ if ((!wslay_event_verify_rsv_bits(ctx, iocb.rsv)) ||
+ (wslay_get_rsv1(iocb.rsv) &&
+ (wslay_is_ctrl_frame(iocb.opcode) ||
+ iocb.opcode == WSLAY_CONTINUATION_FRAME)) ||
+ (ctx->server && !iocb.mask) || (!ctx->server && iocb.mask)) {
+ if ((r = wslay_event_queue_close_wrapper(ctx, WSLAY_CODE_PROTOCOL_ERROR,
+ NULL, 0)) != 0) {
+ return (int)r;
}
break;
}
- if(ctx->imsg->opcode == 0xffu) {
- if(iocb.opcode == WSLAY_TEXT_FRAME ||
- iocb.opcode == WSLAY_BINARY_FRAME ||
- iocb.opcode == WSLAY_CONNECTION_CLOSE ||
- iocb.opcode == WSLAY_PING ||
- iocb.opcode == WSLAY_PONG) {
+ if (ctx->imsg->opcode == 0xffu) {
+ if (iocb.opcode == WSLAY_TEXT_FRAME ||
+ iocb.opcode == WSLAY_BINARY_FRAME ||
+ iocb.opcode == WSLAY_CONNECTION_CLOSE ||
+ iocb.opcode == WSLAY_PING || iocb.opcode == WSLAY_PONG) {
wslay_event_imsg_set(ctx->imsg, iocb.fin, iocb.rsv, iocb.opcode);
new_frame = 1;
} else {
- if((r = wslay_event_queue_close_wrapper
- (ctx, WSLAY_CODE_PROTOCOL_ERROR, NULL, 0)) != 0) {
- return r;
+ if ((r = wslay_event_queue_close_wrapper(
+ ctx, WSLAY_CODE_PROTOCOL_ERROR, NULL, 0)) != 0) {
+ return (int)r;
}
break;
}
- } else if(ctx->ipayloadlen == 0 && ctx->ipayloadoff == 0) {
- if(iocb.opcode == WSLAY_CONTINUATION_FRAME) {
+ } else if (ctx->ipayloadlen == 0 && ctx->ipayloadoff == 0) {
+ if (iocb.opcode == WSLAY_CONTINUATION_FRAME) {
ctx->imsg->fin = iocb.fin;
- } else if(iocb.opcode == WSLAY_CONNECTION_CLOSE ||
- iocb.opcode == WSLAY_PING ||
- iocb.opcode == WSLAY_PONG) {
+ } else if (iocb.opcode == WSLAY_CONNECTION_CLOSE ||
+ iocb.opcode == WSLAY_PING || iocb.opcode == WSLAY_PONG) {
ctx->imsg = &ctx->imsgs[1];
wslay_event_imsg_set(ctx->imsg, iocb.fin, iocb.rsv, iocb.opcode);
} else {
- if((r = wslay_event_queue_close_wrapper
- (ctx, WSLAY_CODE_PROTOCOL_ERROR, NULL, 0)) != 0) {
- return r;
+ if ((r = wslay_event_queue_close_wrapper(
+ ctx, WSLAY_CODE_PROTOCOL_ERROR, NULL, 0)) != 0) {
+ return (int)r;
}
break;
}
new_frame = 1;
}
- if(new_frame) {
- if(ctx->imsg->msg_length+iocb.payload_length >
- ctx->max_recv_msg_length) {
- if((r = wslay_event_queue_close_wrapper
- (ctx, WSLAY_CODE_MESSAGE_TOO_BIG, NULL, 0)) != 0) {
- return r;
+ if (new_frame) {
+ if (ctx->imsg->msg_length + iocb.payload_length >
+ ctx->max_recv_msg_length) {
+ if ((r = wslay_event_queue_close_wrapper(
+ ctx, WSLAY_CODE_MESSAGE_TOO_BIG, NULL, 0)) != 0) {
+ return (int)r;
}
break;
}
ctx->ipayloadlen = iocb.payload_length;
wslay_event_call_on_frame_recv_start_callback(ctx, &iocb);
- if(!wslay_event_config_get_no_buffering(ctx) ||
- wslay_is_ctrl_frame(iocb.opcode)) {
- if((r = wslay_event_imsg_append_chunk(ctx->imsg,
- iocb.payload_length)) != 0) {
+ if (!wslay_event_config_get_no_buffering(ctx) ||
+ wslay_is_ctrl_frame(iocb.opcode)) {
+ if ((r = wslay_event_imsg_append_chunk(ctx->imsg,
+ iocb.payload_length)) != 0) {
ctx->read_enabled = 0;
- return r;
+ return (int)r;
}
}
}
/* If RSV1 bit is set then it is too early for utf-8 validation */
- if((!wslay_get_rsv1(ctx->imsg->rsv) &&
- ctx->imsg->opcode == WSLAY_TEXT_FRAME) ||
- ctx->imsg->opcode == WSLAY_CONNECTION_CLOSE) {
+ if ((!wslay_get_rsv1(ctx->imsg->rsv) &&
+ ctx->imsg->opcode == WSLAY_TEXT_FRAME) ||
+ ctx->imsg->opcode == WSLAY_CONNECTION_CLOSE) {
size_t i;
- if(ctx->imsg->opcode == WSLAY_CONNECTION_CLOSE) {
+ if (ctx->imsg->opcode == WSLAY_CONNECTION_CLOSE) {
i = 2;
} else {
i = 0;
}
- for(; i < iocb.data_length; ++i) {
+ for (; i < iocb.data_length; ++i) {
uint32_t codep;
- if(decode(&ctx->imsg->utf8state, &codep,
- iocb.data[i]) == UTF8_REJECT) {
- if((r = wslay_event_queue_close_wrapper
- (ctx, WSLAY_CODE_INVALID_FRAME_PAYLOAD_DATA, NULL, 0)) != 0) {
- return r;
+ if (decode(&ctx->imsg->utf8state, &codep, iocb.data[i]) ==
+ UTF8_REJECT) {
+ if ((r = wslay_event_queue_close_wrapper(
+ ctx, WSLAY_CODE_INVALID_FRAME_PAYLOAD_DATA, NULL, 0)) !=
+ 0) {
+ return (int)r;
}
break;
}
}
}
- if(ctx->imsg->utf8state == UTF8_REJECT) {
+ if (ctx->imsg->utf8state == UTF8_REJECT) {
break;
}
wslay_event_call_on_frame_recv_chunk_callback(ctx, &iocb);
- if(iocb.data_length > 0) {
- if(!wslay_event_config_get_no_buffering(ctx) ||
- wslay_is_ctrl_frame(iocb.opcode)) {
+ if (iocb.data_length > 0) {
+ if (!wslay_event_config_get_no_buffering(ctx) ||
+ wslay_is_ctrl_frame(iocb.opcode)) {
struct wslay_event_byte_chunk *chunk;
- chunk = wslay_queue_tail(ctx->imsg->chunks);
- wslay_event_byte_chunk_copy(chunk, ctx->ipayloadoff,
- iocb.data, iocb.data_length);
+ chunk = wslay_struct_of(wslay_queue_tail(&ctx->imsg->chunks),
+ struct wslay_event_byte_chunk, qe);
+ wslay_event_byte_chunk_copy(chunk, ctx->ipayloadoff, iocb.data,
+ iocb.data_length);
}
ctx->ipayloadoff += iocb.data_length;
}
- if(ctx->ipayloadoff == ctx->ipayloadlen) {
- if(ctx->imsg->fin &&
- (ctx->imsg->opcode == WSLAY_TEXT_FRAME ||
- ctx->imsg->opcode == WSLAY_CONNECTION_CLOSE) &&
- ctx->imsg->utf8state != UTF8_ACCEPT) {
- if((r = wslay_event_queue_close_wrapper
- (ctx, WSLAY_CODE_INVALID_FRAME_PAYLOAD_DATA, NULL, 0)) != 0) {
- return r;
+ if (ctx->ipayloadoff == ctx->ipayloadlen) {
+ if (ctx->imsg->fin &&
+ (ctx->imsg->opcode == WSLAY_TEXT_FRAME ||
+ ctx->imsg->opcode == WSLAY_CONNECTION_CLOSE) &&
+ ctx->imsg->utf8state != UTF8_ACCEPT) {
+ if ((r = wslay_event_queue_close_wrapper(
+ ctx, WSLAY_CODE_INVALID_FRAME_PAYLOAD_DATA, NULL, 0)) != 0) {
+ return (int)r;
}
break;
}
wslay_event_call_on_frame_recv_end_callback(ctx);
- if(ctx->imsg->fin) {
- if(ctx->callbacks.on_msg_recv_callback ||
- ctx->imsg->opcode == WSLAY_CONNECTION_CLOSE ||
- ctx->imsg->opcode == WSLAY_PING) {
+ if (ctx->imsg->fin) {
+ if (ctx->callbacks.on_msg_recv_callback ||
+ ctx->imsg->opcode == WSLAY_CONNECTION_CLOSE ||
+ ctx->imsg->opcode == WSLAY_PING) {
struct wslay_event_on_msg_recv_arg arg;
uint16_t status_code = 0;
uint8_t *msg = NULL;
size_t msg_length = 0;
- if(!wslay_event_config_get_no_buffering(ctx) ||
- wslay_is_ctrl_frame(iocb.opcode)) {
- msg = wslay_event_flatten_queue(ctx->imsg->chunks,
+ if (!wslay_event_config_get_no_buffering(ctx) ||
+ wslay_is_ctrl_frame(iocb.opcode)) {
+ msg = wslay_event_flatten_queue(&ctx->imsg->chunks,
ctx->imsg->msg_length);
- if(ctx->imsg->msg_length && !msg) {
+ if (ctx->imsg->msg_length && !msg) {
ctx->read_enabled = 0;
return WSLAY_ERR_NOMEM;
}
msg_length = ctx->imsg->msg_length;
}
- if(ctx->imsg->opcode == WSLAY_CONNECTION_CLOSE) {
+ if (ctx->imsg->opcode == WSLAY_CONNECTION_CLOSE) {
const uint8_t *reason;
size_t reason_length;
- if(ctx->imsg->msg_length >= 2) {
+ if (ctx->imsg->msg_length >= 2) {
memcpy(&status_code, msg, 2);
status_code = ntohs(status_code);
- if(!wslay_event_is_valid_status_code(status_code)) {
+ if (!wslay_event_is_valid_status_code(status_code)) {
free(msg);
- if((r = wslay_event_queue_close_wrapper
- (ctx, WSLAY_CODE_PROTOCOL_ERROR, NULL, 0)) != 0) {
- return r;
+ if ((r = wslay_event_queue_close_wrapper(
+ ctx, WSLAY_CODE_PROTOCOL_ERROR, NULL, 0)) != 0) {
+ return (int)r;
}
break;
}
- reason = msg+2;
- reason_length = ctx->imsg->msg_length-2;
+ reason = msg + 2;
+ reason_length = ctx->imsg->msg_length - 2;
} else {
reason = NULL;
reason_length = 0;
}
ctx->close_status |= WSLAY_CLOSE_RECEIVED;
ctx->status_code_recv =
- status_code == 0 ? WSLAY_CODE_NO_STATUS_RCVD : status_code;
- if((r = wslay_event_queue_close_wrapper
- (ctx, status_code, reason, reason_length)) != 0) {
+ status_code == 0 ? WSLAY_CODE_NO_STATUS_RCVD : status_code;
+ if ((r = wslay_event_queue_close_wrapper(ctx, status_code, reason,
+ reason_length)) != 0) {
free(msg);
- return r;
+ return (int)r;
}
- } else if(ctx->imsg->opcode == WSLAY_PING) {
+ } else if (ctx->imsg->opcode == WSLAY_PING) {
struct wslay_event_msg pong_arg;
pong_arg.opcode = WSLAY_PONG;
pong_arg.msg = msg;
pong_arg.msg_length = ctx->imsg->msg_length;
- if((r = wslay_event_queue_msg(ctx, &pong_arg)) &&
- r != WSLAY_ERR_NO_MORE_MSG) {
+ if ((r = wslay_event_queue_msg(ctx, &pong_arg)) &&
+ r != WSLAY_ERR_NO_MORE_MSG) {
ctx->read_enabled = 0;
free(msg);
- return r;
+ return (int)r;
}
}
- if(ctx->callbacks.on_msg_recv_callback) {
+ if (ctx->callbacks.on_msg_recv_callback) {
arg.rsv = ctx->imsg->rsv;
arg.opcode = ctx->imsg->opcode;
arg.msg = msg;
@@ -753,17 +686,17 @@ int wslay_event_recv(wslay_event_context_ptr ctx)
free(msg);
}
wslay_event_imsg_reset(ctx->imsg);
- if(ctx->imsg == &ctx->imsgs[1]) {
+ if (ctx->imsg == &ctx->imsgs[1]) {
ctx->imsg = &ctx->imsgs[0];
}
}
ctx->ipayloadlen = ctx->ipayloadoff = 0;
}
} else {
- if(r != WSLAY_ERR_WANT_READ ||
- (ctx->error != WSLAY_ERR_WOULDBLOCK && ctx->error != 0)) {
- if((r = wslay_event_queue_close_wrapper(ctx, 0, NULL, 0)) != 0) {
- return r;
+ if (r != WSLAY_ERR_WANT_READ ||
+ (ctx->error != WSLAY_ERR_WOULDBLOCK && ctx->error != 0)) {
+ if ((r = wslay_event_queue_close_wrapper(ctx, 0, NULL, 0)) != 0) {
+ return (int)r;
}
return WSLAY_ERR_CALLBACK_FAILURE;
}
@@ -773,26 +706,25 @@ int wslay_event_recv(wslay_event_context_ptr ctx)
return 0;
}
-static void wslay_event_on_non_fragmented_msg_popped
-(wslay_event_context_ptr ctx)
-{
+static void
+wslay_event_on_non_fragmented_msg_popped(wslay_event_context_ptr ctx) {
ctx->omsg->fin = 1;
ctx->opayloadlen = ctx->omsg->data_length;
ctx->opayloadoff = 0;
}
-static struct wslay_event_omsg* wslay_event_send_ctrl_queue_pop
-(wslay_event_context_ptr ctx)
-{
+static struct wslay_event_omsg *
+wslay_event_send_ctrl_queue_pop(wslay_event_context_ptr ctx) {
/*
* If Close control frame is queued, we don't send any control frame
* other than Close.
*/
- if(ctx->close_status & WSLAY_CLOSE_QUEUED) {
- while(!wslay_queue_empty(ctx->send_ctrl_queue)) {
- struct wslay_event_omsg *msg = wslay_queue_top(ctx->send_ctrl_queue);
- wslay_queue_pop(ctx->send_ctrl_queue);
- if(msg->opcode == WSLAY_CONNECTION_CLOSE) {
+ if (ctx->close_status & WSLAY_CLOSE_QUEUED) {
+ while (!wslay_queue_empty(&ctx->send_ctrl_queue)) {
+ struct wslay_event_omsg *msg = wslay_struct_of(
+ wslay_queue_top(&ctx->send_ctrl_queue), struct wslay_event_omsg, qe);
+ wslay_queue_pop(&ctx->send_ctrl_queue);
+ if (msg->opcode == WSLAY_CONNECTION_CLOSE) {
return msg;
} else {
wslay_event_omsg_free(msg);
@@ -800,71 +732,73 @@ static struct wslay_event_omsg* wslay_event_send_ctrl_queue_pop
}
return NULL;
} else {
- struct wslay_event_omsg *msg = wslay_queue_top(ctx->send_ctrl_queue);
- wslay_queue_pop(ctx->send_ctrl_queue);
+ struct wslay_event_omsg *msg = wslay_struct_of(
+ wslay_queue_top(&ctx->send_ctrl_queue), struct wslay_event_omsg, qe);
+ wslay_queue_pop(&ctx->send_ctrl_queue);
return msg;
}
}
-int wslay_event_send(wslay_event_context_ptr ctx)
-{
+int wslay_event_send(wslay_event_context_ptr ctx) {
struct wslay_frame_iocb iocb;
ssize_t r;
- while(ctx->write_enabled &&
- (!wslay_queue_empty(ctx->send_queue) ||
- !wslay_queue_empty(ctx->send_ctrl_queue) || ctx->omsg)) {
- if(!ctx->omsg) {
- if(wslay_queue_empty(ctx->send_ctrl_queue)) {
- ctx->omsg = wslay_queue_top(ctx->send_queue);
- wslay_queue_pop(ctx->send_queue);
+ while (ctx->write_enabled &&
+ (!wslay_queue_empty(&ctx->send_queue) ||
+ !wslay_queue_empty(&ctx->send_ctrl_queue) || ctx->omsg)) {
+ if (!ctx->omsg) {
+ if (wslay_queue_empty(&ctx->send_ctrl_queue)) {
+ ctx->omsg = wslay_struct_of(wslay_queue_top(&ctx->send_queue),
+ struct wslay_event_omsg, qe);
+ wslay_queue_pop(&ctx->send_queue);
} else {
ctx->omsg = wslay_event_send_ctrl_queue_pop(ctx);
- if(ctx->omsg == NULL) {
+ if (ctx->omsg == NULL) {
break;
}
}
- if(ctx->omsg->type == WSLAY_NON_FRAGMENTED) {
+ if (ctx->omsg->type == WSLAY_NON_FRAGMENTED) {
wslay_event_on_non_fragmented_msg_popped(ctx);
}
- } else if(!wslay_is_ctrl_frame(ctx->omsg->opcode) &&
- ctx->frame_ctx->ostate == PREP_HEADER &&
- !wslay_queue_empty(ctx->send_ctrl_queue)) {
- if((r = wslay_queue_push_front(ctx->send_queue, ctx->omsg)) != 0) {
- ctx->write_enabled = 0;
- return r;
- }
+ } else if (!wslay_is_ctrl_frame(ctx->omsg->opcode) &&
+ ctx->frame_ctx->ostate == PREP_HEADER &&
+ !wslay_queue_empty(&ctx->send_ctrl_queue)) {
+ wslay_queue_push_front(&ctx->send_queue, &ctx->omsg->qe);
ctx->omsg = wslay_event_send_ctrl_queue_pop(ctx);
- if(ctx->omsg == NULL) {
+ if (ctx->omsg == NULL) {
break;
}
/* ctrl message has WSLAY_NON_FRAGMENTED */
wslay_event_on_non_fragmented_msg_popped(ctx);
}
- if(ctx->omsg->type == WSLAY_NON_FRAGMENTED) {
+ if (ctx->omsg->type == WSLAY_NON_FRAGMENTED) {
memset(&iocb, 0, sizeof(iocb));
iocb.fin = 1;
iocb.opcode = ctx->omsg->opcode;
iocb.rsv = ctx->omsg->rsv;
- iocb.mask = ctx->server^1;
- iocb.data = ctx->omsg->data+ctx->opayloadoff;
- iocb.data_length = ctx->opayloadlen-ctx->opayloadoff;
+ iocb.mask = ctx->server ^ 1;
+ iocb.data = ctx->omsg->data;
+ iocb.data_length = ctx->opayloadlen;
+ if (ctx->opayloadoff) {
+ iocb.data += ctx->opayloadoff;
+ iocb.data_length -= ctx->opayloadoff;
+ }
iocb.payload_length = ctx->opayloadlen;
r = wslay_frame_send(ctx->frame_ctx, &iocb);
- if(r >= 0) {
- ctx->opayloadoff += r;
- if(ctx->opayloadoff == ctx->opayloadlen) {
+ if (r >= 0) {
+ ctx->opayloadoff += (uint64_t)r;
+ if (ctx->opayloadoff == ctx->opayloadlen) {
--ctx->queued_msg_count;
ctx->queued_msg_length -= ctx->omsg->data_length;
- if(ctx->omsg->opcode == WSLAY_CONNECTION_CLOSE) {
+ if (ctx->omsg->opcode == WSLAY_CONNECTION_CLOSE) {
uint16_t status_code = 0;
ctx->write_enabled = 0;
ctx->close_status |= WSLAY_CLOSE_SENT;
- if(ctx->omsg->data_length >= 2) {
+ if (ctx->omsg->data_length >= 2) {
memcpy(&status_code, ctx->omsg->data, 2);
status_code = ntohs(status_code);
}
ctx->status_code_sent =
- status_code == 0 ? WSLAY_CODE_NO_STATUS_RCVD : status_code;
+ status_code == 0 ? WSLAY_CODE_NO_STATUS_RCVD : status_code;
}
wslay_event_omsg_free(ctx->omsg);
ctx->omsg = NULL;
@@ -872,30 +806,29 @@ int wslay_event_send(wslay_event_context_ptr ctx)
break;
}
} else {
- if(r != WSLAY_ERR_WANT_WRITE ||
- (ctx->error != WSLAY_ERR_WOULDBLOCK && ctx->error != 0)) {
+ if (r != WSLAY_ERR_WANT_WRITE ||
+ (ctx->error != WSLAY_ERR_WOULDBLOCK && ctx->error != 0)) {
ctx->write_enabled = 0;
return WSLAY_ERR_CALLBACK_FAILURE;
}
break;
}
} else {
- if(ctx->omsg->fin == 0 && ctx->obuflimit == ctx->obufmark) {
+ if (ctx->omsg->fin == 0 && ctx->obuflimit == ctx->obufmark) {
int eof = 0;
r = ctx->omsg->read_callback(ctx, ctx->obuf, sizeof(ctx->obuf),
- &ctx->omsg->source,
- &eof, ctx->user_data);
- if(r == 0 && eof == 0) {
+ &ctx->omsg->source, &eof, ctx->user_data);
+ if (r == 0 && eof == 0) {
break;
- } else if(r < 0) {
+ } else if (r < 0) {
ctx->write_enabled = 0;
return WSLAY_ERR_CALLBACK_FAILURE;
}
- ctx->obuflimit = ctx->obuf+r;
- if(eof) {
+ ctx->obuflimit = ctx->obuf + r;
+ if (eof) {
ctx->omsg->fin = 1;
}
- ctx->opayloadlen = r;
+ ctx->opayloadlen = (uint64_t)r;
ctx->opayloadoff = 0;
}
memset(&iocb, 0, sizeof(iocb));
@@ -904,29 +837,28 @@ int wslay_event_send(wslay_event_context_ptr ctx)
iocb.rsv = ctx->omsg->rsv;
iocb.mask = ctx->server ? 0 : 1;
iocb.data = ctx->obufmark;
- iocb.data_length = ctx->obuflimit-ctx->obufmark;
+ iocb.data_length = (size_t)(ctx->obuflimit - ctx->obufmark);
iocb.payload_length = ctx->opayloadlen;
r = wslay_frame_send(ctx->frame_ctx, &iocb);
- if(r >= 0) {
+ if (r >= 0) {
ctx->obufmark += r;
- if(ctx->obufmark == ctx->obuflimit) {
+ if (ctx->obufmark == ctx->obuflimit) {
ctx->obufmark = ctx->obuflimit = ctx->obuf;
- if(ctx->omsg->fin) {
+ if (ctx->omsg->fin) {
--ctx->queued_msg_count;
wslay_event_omsg_free(ctx->omsg);
ctx->omsg = NULL;
} else {
ctx->omsg->opcode = WSLAY_CONTINUATION_FRAME;
/* RSV1 is not set on continuation frames */
- ctx->omsg->rsv = ctx->omsg->rsv & ~WSLAY_RSV1_BIT;
+ ctx->omsg->rsv = (uint8_t)(ctx->omsg->rsv & ~WSLAY_RSV1_BIT);
}
} else {
break;
}
} else {
- if(r != WSLAY_ERR_WANT_WRITE ||
- (ctx->error != WSLAY_ERR_WOULDBLOCK &&
- ctx->error != 0)) {
+ if (r != WSLAY_ERR_WANT_WRITE ||
+ (ctx->error != WSLAY_ERR_WOULDBLOCK && ctx->error != 0)) {
ctx->write_enabled = 0;
return WSLAY_ERR_CALLBACK_FAILURE;
}
@@ -937,91 +869,214 @@ int wslay_event_send(wslay_event_context_ptr ctx)
return 0;
}
-void wslay_event_set_error(wslay_event_context_ptr ctx, int val)
-{
+ssize_t wslay_event_write(wslay_event_context_ptr ctx, uint8_t *buf,
+ size_t buflen) {
+ struct wslay_frame_iocb iocb;
+ ssize_t r;
+ uint8_t *buf_last = buf;
+ size_t wpayloadlen;
+ while (ctx->write_enabled &&
+ (!wslay_queue_empty(&ctx->send_queue) ||
+ !wslay_queue_empty(&ctx->send_ctrl_queue) || ctx->omsg)) {
+ if (!ctx->omsg) {
+ if (wslay_queue_empty(&ctx->send_ctrl_queue)) {
+ ctx->omsg = wslay_struct_of(wslay_queue_top(&ctx->send_queue),
+ struct wslay_event_omsg, qe);
+ wslay_queue_pop(&ctx->send_queue);
+ } else {
+ ctx->omsg = wslay_event_send_ctrl_queue_pop(ctx);
+ if (ctx->omsg == NULL) {
+ break;
+ }
+ }
+ if (ctx->omsg->type == WSLAY_NON_FRAGMENTED) {
+ wslay_event_on_non_fragmented_msg_popped(ctx);
+ }
+ } else if (!wslay_is_ctrl_frame(ctx->omsg->opcode) &&
+ ctx->frame_ctx->ostate == PREP_HEADER &&
+ !wslay_queue_empty(&ctx->send_ctrl_queue)) {
+ wslay_queue_push_front(&ctx->send_queue, &ctx->omsg->qe);
+ ctx->omsg = wslay_event_send_ctrl_queue_pop(ctx);
+ if (ctx->omsg == NULL) {
+ break;
+ }
+ /* ctrl message has WSLAY_NON_FRAGMENTED */
+ wslay_event_on_non_fragmented_msg_popped(ctx);
+ }
+ if (ctx->omsg->type == WSLAY_NON_FRAGMENTED) {
+ memset(&iocb, 0, sizeof(iocb));
+ iocb.fin = 1;
+ iocb.opcode = ctx->omsg->opcode;
+ iocb.rsv = ctx->omsg->rsv;
+ iocb.mask = ctx->server ^ 1;
+ iocb.data = ctx->omsg->data;
+ iocb.data_length = ctx->opayloadlen;
+ if (ctx->opayloadoff) {
+ iocb.data += ctx->opayloadoff;
+ iocb.data_length -= ctx->opayloadoff;
+ }
+ iocb.payload_length = ctx->opayloadlen;
+ r = wslay_frame_write(ctx->frame_ctx, &iocb, buf_last, buflen,
+ &wpayloadlen);
+ if (r > 0) {
+ assert((size_t)r <= buflen);
+
+ buf_last += r;
+ buflen -= (size_t)r;
+
+ ctx->opayloadoff += wpayloadlen;
+ if (ctx->opayloadoff == ctx->opayloadlen) {
+ --ctx->queued_msg_count;
+ ctx->queued_msg_length -= ctx->omsg->data_length;
+ if (ctx->omsg->opcode == WSLAY_CONNECTION_CLOSE) {
+ uint16_t status_code = 0;
+ ctx->write_enabled = 0;
+ ctx->close_status |= WSLAY_CLOSE_SENT;
+ if (ctx->omsg->data_length >= 2) {
+ memcpy(&status_code, ctx->omsg->data, 2);
+ status_code = ntohs(status_code);
+ }
+ ctx->status_code_sent =
+ status_code == 0 ? WSLAY_CODE_NO_STATUS_RCVD : status_code;
+ }
+ wslay_event_omsg_free(ctx->omsg);
+ ctx->omsg = NULL;
+ } else {
+ break;
+ }
+ } else if (r == 0) {
+ return buf_last - buf;
+ } else {
+ return WSLAY_ERR_CALLBACK_FAILURE;
+ }
+ } else {
+ if (ctx->omsg->fin == 0 && ctx->obuflimit == ctx->obufmark) {
+ int eof = 0;
+ r = ctx->omsg->read_callback(ctx, ctx->obuf, sizeof(ctx->obuf),
+ &ctx->omsg->source, &eof, ctx->user_data);
+ if (r == 0 && eof == 0) {
+ break;
+ } else if (r < 0) {
+ ctx->write_enabled = 0;
+ return WSLAY_ERR_CALLBACK_FAILURE;
+ }
+ ctx->obuflimit = ctx->obuf + r;
+ if (eof) {
+ ctx->omsg->fin = 1;
+ }
+ ctx->opayloadlen = (uint64_t)r;
+ ctx->opayloadoff = 0;
+ }
+ memset(&iocb, 0, sizeof(iocb));
+ iocb.fin = ctx->omsg->fin;
+ iocb.opcode = ctx->omsg->opcode;
+ iocb.rsv = ctx->omsg->rsv;
+ iocb.mask = ctx->server ? 0 : 1;
+ iocb.data = ctx->obufmark;
+ iocb.data_length = (size_t)(ctx->obuflimit - ctx->obufmark);
+ iocb.payload_length = ctx->opayloadlen;
+ r = wslay_frame_write(ctx->frame_ctx, &iocb, buf_last, buflen,
+ &wpayloadlen);
+ if (r > 0) {
+ assert((size_t)r <= buflen);
+
+ buf_last += r;
+ buflen -= (size_t)r;
+
+ ctx->obufmark += wpayloadlen;
+ if (ctx->obufmark == ctx->obuflimit) {
+ ctx->obufmark = ctx->obuflimit = ctx->obuf;
+ if (ctx->omsg->fin) {
+ --ctx->queued_msg_count;
+ wslay_event_omsg_free(ctx->omsg);
+ ctx->omsg = NULL;
+ } else {
+ ctx->omsg->opcode = WSLAY_CONTINUATION_FRAME;
+ /* RSV1 is not set on continuation frames */
+ ctx->omsg->rsv = (uint8_t)(ctx->omsg->rsv & ~WSLAY_RSV1_BIT);
+ }
+ } else {
+ break;
+ }
+ } else if (r == 0) {
+ return buf_last - buf;
+ } else {
+ return WSLAY_ERR_CALLBACK_FAILURE;
+ }
+ }
+ }
+ return buf_last - buf;
+}
+
+void wslay_event_set_error(wslay_event_context_ptr ctx, int val) {
ctx->error = val;
}
-int wslay_event_want_read(wslay_event_context_ptr ctx)
-{
+int wslay_event_want_read(wslay_event_context_ptr ctx) {
return ctx->read_enabled;
}
-int wslay_event_want_write(wslay_event_context_ptr ctx)
-{
+int wslay_event_want_write(wslay_event_context_ptr ctx) {
return ctx->write_enabled &&
- (!wslay_queue_empty(ctx->send_queue) ||
- !wslay_queue_empty(ctx->send_ctrl_queue) || ctx->omsg);
+ (!wslay_queue_empty(&ctx->send_queue) ||
+ !wslay_queue_empty(&ctx->send_ctrl_queue) || ctx->omsg);
}
-void wslay_event_shutdown_read(wslay_event_context_ptr ctx)
-{
+void wslay_event_shutdown_read(wslay_event_context_ptr ctx) {
ctx->read_enabled = 0;
}
-void wslay_event_shutdown_write(wslay_event_context_ptr ctx)
-{
+void wslay_event_shutdown_write(wslay_event_context_ptr ctx) {
ctx->write_enabled = 0;
}
-int wslay_event_get_read_enabled(wslay_event_context_ptr ctx)
-{
+int wslay_event_get_read_enabled(wslay_event_context_ptr ctx) {
return ctx->read_enabled;
}
-int wslay_event_get_write_enabled(wslay_event_context_ptr ctx)
-{
+int wslay_event_get_write_enabled(wslay_event_context_ptr ctx) {
return ctx->write_enabled;
}
-int wslay_event_get_close_received(wslay_event_context_ptr ctx)
-{
+int wslay_event_get_close_received(wslay_event_context_ptr ctx) {
return (ctx->close_status & WSLAY_CLOSE_RECEIVED) > 0;
}
-int wslay_event_get_close_sent(wslay_event_context_ptr ctx)
-{
+int wslay_event_get_close_sent(wslay_event_context_ptr ctx) {
return (ctx->close_status & WSLAY_CLOSE_SENT) > 0;
}
void wslay_event_config_set_allowed_rsv_bits(wslay_event_context_ptr ctx,
- uint8_t rsv)
-{
+ uint8_t rsv) {
/* We currently only allow WSLAY_RSV1_BIT or WSLAY_RSV_NONE */
ctx->allowed_rsv_bits = rsv & WSLAY_RSV1_BIT;
}
-void wslay_event_config_set_no_buffering(wslay_event_context_ptr ctx, int val)
-{
- if(val) {
+void wslay_event_config_set_no_buffering(wslay_event_context_ptr ctx, int val) {
+ if (val) {
ctx->config |= WSLAY_CONFIG_NO_BUFFERING;
} else {
- ctx->config &= ~WSLAY_CONFIG_NO_BUFFERING;
+ ctx->config &= (uint32_t)~WSLAY_CONFIG_NO_BUFFERING;
}
}
void wslay_event_config_set_max_recv_msg_length(wslay_event_context_ptr ctx,
- uint64_t val)
-{
+ uint64_t val) {
ctx->max_recv_msg_length = val;
}
-uint16_t wslay_event_get_status_code_received(wslay_event_context_ptr ctx)
-{
+uint16_t wslay_event_get_status_code_received(wslay_event_context_ptr ctx) {
return ctx->status_code_recv;
}
-uint16_t wslay_event_get_status_code_sent(wslay_event_context_ptr ctx)
-{
+uint16_t wslay_event_get_status_code_sent(wslay_event_context_ptr ctx) {
return ctx->status_code_sent;
}
-size_t wslay_event_get_queued_msg_count(wslay_event_context_ptr ctx)
-{
+size_t wslay_event_get_queued_msg_count(wslay_event_context_ptr ctx) {
return ctx->queued_msg_count;
}
-size_t wslay_event_get_queued_msg_length(wslay_event_context_ptr ctx)
-{
+size_t wslay_event_get_queued_msg_length(wslay_event_context_ptr ctx) {
return ctx->queued_msg_length;
}
diff --git a/thirdparty/wslay/wslay_event.h b/thirdparty/wslay/wslay_event.h
index 36feb9036d..e30c3d1940 100644
--- a/thirdparty/wslay/wslay_event.h
+++ b/thirdparty/wslay/wslay_event.h
@@ -31,10 +31,10 @@
#include <wslay/wslay.h>
-struct wslay_stack;
-struct wslay_queue;
+#include "wslay_queue.h"
struct wslay_event_byte_chunk {
+ struct wslay_queue_entry qe;
uint8_t *data;
size_t data_length;
};
@@ -44,16 +44,14 @@ struct wslay_event_imsg {
uint8_t rsv;
uint8_t opcode;
uint32_t utf8state;
- struct wslay_queue *chunks;
+ struct wslay_queue chunks;
size_t msg_length;
};
-enum wslay_event_msg_type {
- WSLAY_NON_FRAGMENTED,
- WSLAY_FRAGMENTED
-};
+enum wslay_event_msg_type { WSLAY_NON_FRAGMENTED, WSLAY_FRAGMENTED };
struct wslay_event_omsg {
+ struct wslay_queue_entry qe;
uint8_t fin;
uint8_t opcode;
uint8_t rsv;
@@ -77,9 +75,7 @@ enum wslay_event_close_status {
WSLAY_CLOSE_SENT = 1 << 2
};
-enum wslay_event_config {
- WSLAY_CONFIG_NO_BUFFERING = 1 << 0
-};
+enum wslay_event_config { WSLAY_CONFIG_NO_BUFFERING = 1 << 0 };
struct wslay_event_context {
/* config status, bitwise OR of enum wslay_event_config values*/
@@ -118,9 +114,9 @@ struct wslay_event_context {
is currently sent. */
struct wslay_event_omsg *omsg;
/* Queue for non-control frames */
- struct wslay_queue/*<wslay_omsg*>*/ *send_queue;
+ struct wslay_queue /*<wslay_omsg*>*/ send_queue;
/* Queue for control frames */
- struct wslay_queue/*<wslay_omsg*>*/ *send_ctrl_queue;
+ struct wslay_queue /*<wslay_omsg*>*/ send_ctrl_queue;
/* Size of send_queue + size of send_ctrl_queue */
size_t queued_msg_count;
/* The sum of message length in send_queue */
diff --git a/thirdparty/wslay/wslay_frame.c b/thirdparty/wslay/wslay_frame.c
index 445e750ca5..435044a3f4 100644
--- a/thirdparty/wslay/wslay_frame.c
+++ b/thirdparty/wslay/wslay_frame.c
@@ -34,10 +34,9 @@
int wslay_frame_context_init(wslay_frame_context_ptr *ctx,
const struct wslay_frame_callbacks *callbacks,
- void *user_data)
-{
- *ctx = (wslay_frame_context_ptr)malloc(sizeof(struct wslay_frame_context));
- if(*ctx == NULL) {
+ void *user_data) {
+ *ctx = malloc(sizeof(struct wslay_frame_context));
+ if (*ctx == NULL) {
return -1;
}
memset(*ctx, 0, sizeof(struct wslay_frame_context));
@@ -50,38 +49,35 @@ int wslay_frame_context_init(wslay_frame_context_ptr *ctx,
return 0;
}
-void wslay_frame_context_free(wslay_frame_context_ptr ctx)
-{
- free(ctx);
-}
+void wslay_frame_context_free(wslay_frame_context_ptr ctx) { free(ctx); }
ssize_t wslay_frame_send(wslay_frame_context_ptr ctx,
- struct wslay_frame_iocb *iocb)
-{
- if(iocb->data_length > iocb->payload_length) {
+ struct wslay_frame_iocb *iocb) {
+ if (iocb->data_length > iocb->payload_length) {
return WSLAY_ERR_INVALID_ARGUMENT;
}
- if(ctx->ostate == PREP_HEADER) {
+ if (ctx->ostate == PREP_HEADER) {
uint8_t *hdptr = ctx->oheader;
memset(ctx->oheader, 0, sizeof(ctx->oheader));
- *hdptr |= (iocb->fin << 7) & 0x80u;
- *hdptr |= (iocb->rsv << 4) & 0x70u;
- *hdptr |= iocb->opcode & 0xfu;
+ *hdptr |= (uint8_t)((uint8_t)(iocb->fin << 7) & 0x80u);
+ *hdptr |= (uint8_t)((uint8_t)(iocb->rsv << 4) & 0x70u);
+ /* Suppress stubborn gcc-10 warning */
+ *hdptr |= (uint8_t)((uint8_t)(iocb->opcode << 0) & 0xfu);
++hdptr;
- *hdptr |= (iocb->mask << 7) & 0x80u;
- if(wslay_is_ctrl_frame(iocb->opcode) && iocb->payload_length > 125) {
+ *hdptr |= (uint8_t)((uint8_t)(iocb->mask << 7) & 0x80u);
+ if (wslay_is_ctrl_frame(iocb->opcode) && iocb->payload_length > 125) {
return WSLAY_ERR_INVALID_ARGUMENT;
}
- if(iocb->payload_length < 126) {
- *hdptr |= iocb->payload_length;
+ if (iocb->payload_length < 126) {
+ *hdptr |= (uint8_t)iocb->payload_length;
++hdptr;
- } else if(iocb->payload_length < (1 << 16)) {
- uint16_t len = htons(iocb->payload_length);
+ } else if (iocb->payload_length < (1 << 16)) {
+ uint16_t len = htons((uint16_t)iocb->payload_length);
*hdptr |= 126;
++hdptr;
memcpy(hdptr, &len, 2);
hdptr += 2;
- } else if(iocb->payload_length < (1ull << 63)) {
+ } else if (iocb->payload_length < (1ull << 63)) {
uint64_t len = hton64(iocb->payload_length);
*hdptr |= 127;
++hdptr;
@@ -91,9 +87,9 @@ ssize_t wslay_frame_send(wslay_frame_context_ptr ctx,
/* Too large payload length */
return WSLAY_ERR_INVALID_ARGUMENT;
}
- if(iocb->mask) {
- if(ctx->callbacks.genmask_callback(ctx->omaskkey, 4,
- ctx->user_data) != 0) {
+ if (iocb->mask) {
+ if (ctx->callbacks.genmask_callback(ctx->omaskkey, 4, ctx->user_data) !=
+ 0) {
return WSLAY_ERR_INVALID_CALLBACK;
} else {
ctx->omask = 1;
@@ -107,21 +103,21 @@ ssize_t wslay_frame_send(wslay_frame_context_ptr ctx,
ctx->opayloadlen = iocb->payload_length;
ctx->opayloadoff = 0;
}
- if(ctx->ostate == SEND_HEADER) {
- ptrdiff_t len = ctx->oheaderlimit-ctx->oheadermark;
+ if (ctx->ostate == SEND_HEADER) {
+ ptrdiff_t len = ctx->oheaderlimit - ctx->oheadermark;
ssize_t r;
int flags = 0;
- if(iocb->data_length > 0) {
+ if (iocb->data_length > 0) {
flags |= WSLAY_MSG_MORE;
};
- r = ctx->callbacks.send_callback(ctx->oheadermark, len, flags,
+ r = ctx->callbacks.send_callback(ctx->oheadermark, (size_t)len, flags,
ctx->user_data);
- if(r > 0) {
- if(r > len) {
+ if (r > 0) {
+ if (r > len) {
return WSLAY_ERR_INVALID_CALLBACK;
} else {
ctx->oheadermark += r;
- if(ctx->oheadermark == ctx->oheaderlimit) {
+ if (ctx->oheadermark == ctx->oheaderlimit) {
ctx->ostate = SEND_PAYLOAD;
} else {
return WSLAY_ERR_WANT_WRITE;
@@ -131,34 +127,34 @@ ssize_t wslay_frame_send(wslay_frame_context_ptr ctx,
return WSLAY_ERR_WANT_WRITE;
}
}
- if(ctx->ostate == SEND_PAYLOAD) {
+ if (ctx->ostate == SEND_PAYLOAD) {
size_t totallen = 0;
- if(iocb->data_length > 0) {
- if(ctx->omask) {
+ if (iocb->data_length > 0) {
+ if (ctx->omask) {
uint8_t temp[4096];
const uint8_t *datamark = iocb->data,
- *datalimit = iocb->data+iocb->data_length;
- while(datamark < datalimit) {
- size_t datalen = datalimit - datamark;
- const uint8_t *writelimit = datamark+
- wslay_min(sizeof(temp), datalen);
- size_t writelen = writelimit-datamark;
+ *datalimit = iocb->data + iocb->data_length;
+ while (datamark < datalimit) {
+ size_t datalen = (size_t)(datalimit - datamark);
+ const uint8_t *writelimit =
+ datamark + wslay_min(sizeof(temp), datalen);
+ size_t writelen = (size_t)(writelimit - datamark);
ssize_t r;
size_t i;
- for(i = 0; i < writelen; ++i) {
- temp[i] = datamark[i]^ctx->omaskkey[(ctx->opayloadoff+i)%4];
+ for (i = 0; i < writelen; ++i) {
+ temp[i] = datamark[i] ^ ctx->omaskkey[(ctx->opayloadoff + i) % 4];
}
r = ctx->callbacks.send_callback(temp, writelen, 0, ctx->user_data);
- if(r > 0) {
- if((size_t)r > writelen) {
+ if (r > 0) {
+ if ((size_t)r > writelen) {
return WSLAY_ERR_INVALID_CALLBACK;
} else {
datamark += r;
- ctx->opayloadoff += r;
- totallen += r;
+ ctx->opayloadoff += (uint64_t)r;
+ totallen += (size_t)r;
}
} else {
- if(totallen > 0) {
+ if (totallen > 0) {
break;
} else {
return WSLAY_ERR_WANT_WRITE;
@@ -169,44 +165,148 @@ ssize_t wslay_frame_send(wslay_frame_context_ptr ctx,
ssize_t r;
r = ctx->callbacks.send_callback(iocb->data, iocb->data_length, 0,
ctx->user_data);
- if(r > 0) {
- if((size_t)r > iocb->data_length) {
+ if (r > 0) {
+ if ((size_t)r > iocb->data_length) {
return WSLAY_ERR_INVALID_CALLBACK;
} else {
- ctx->opayloadoff += r;
- totallen = r;
+ ctx->opayloadoff += (uint64_t)r;
+ totallen = (size_t)r;
}
} else {
return WSLAY_ERR_WANT_WRITE;
}
}
}
- if(ctx->opayloadoff == ctx->opayloadlen) {
+ if (ctx->opayloadoff == ctx->opayloadlen) {
ctx->ostate = PREP_HEADER;
}
- return totallen;
+ return (ssize_t)totallen;
}
return WSLAY_ERR_INVALID_ARGUMENT;
}
-static void wslay_shift_ibuf(wslay_frame_context_ptr ctx)
-{
- ptrdiff_t len = ctx->ibuflimit-ctx->ibufmark;
- memmove(ctx->ibuf, ctx->ibufmark, len);
- ctx->ibuflimit = ctx->ibuf+len;
+ssize_t wslay_frame_write(wslay_frame_context_ptr ctx,
+ struct wslay_frame_iocb *iocb, uint8_t *buf,
+ size_t buflen, size_t *pwpayloadlen) {
+ uint8_t *buf_last = buf;
+ size_t i;
+ size_t hdlen;
+
+ *pwpayloadlen = 0;
+
+ if (iocb->data_length > iocb->payload_length) {
+ return WSLAY_ERR_INVALID_ARGUMENT;
+ }
+
+ switch (ctx->ostate) {
+ case PREP_HEADER:
+ case PREP_HEADER_NOBUF:
+ hdlen = 2;
+ if (iocb->payload_length < 126) {
+ /* nothing to do */
+ } else if (iocb->payload_length < (1 << 16)) {
+ hdlen += 2;
+ } else if (iocb->payload_length < (1ull << 63)) {
+ hdlen += 8;
+ }
+ if (iocb->mask) {
+ hdlen += 4;
+ }
+
+ if (buflen < hdlen) {
+ ctx->ostate = PREP_HEADER_NOBUF;
+ return 0;
+ }
+
+ memset(buf_last, 0, hdlen);
+ *buf_last |= (uint8_t)((uint8_t)(iocb->fin << 7) & 0x80u);
+ *buf_last |= (uint8_t)((uint8_t)(iocb->rsv << 4) & 0x70u);
+ /* Suppress stubborn gcc-10 warning */
+ *buf_last |= (uint8_t)((uint8_t)(iocb->opcode << 0) & 0xfu);
+ ++buf_last;
+ *buf_last |= (uint8_t)((uint8_t)(iocb->mask << 7) & 0x80u);
+ if (wslay_is_ctrl_frame(iocb->opcode) && iocb->payload_length > 125) {
+ return WSLAY_ERR_INVALID_ARGUMENT;
+ }
+ if (iocb->payload_length < 126) {
+ *buf_last |= (uint8_t)iocb->payload_length;
+ ++buf_last;
+ } else if (iocb->payload_length < (1 << 16)) {
+ uint16_t len = htons((uint16_t)iocb->payload_length);
+ *buf_last |= 126;
+ ++buf_last;
+ memcpy(buf_last, &len, 2);
+ buf_last += 2;
+ } else if (iocb->payload_length < (1ull << 63)) {
+ uint64_t len = hton64(iocb->payload_length);
+ *buf_last |= 127;
+ ++buf_last;
+ memcpy(buf_last, &len, 8);
+ buf_last += 8;
+ } else {
+ /* Too large payload length */
+ return WSLAY_ERR_INVALID_ARGUMENT;
+ }
+ if (iocb->mask) {
+ if (ctx->callbacks.genmask_callback(ctx->omaskkey, 4, ctx->user_data) !=
+ 0) {
+ return WSLAY_ERR_INVALID_CALLBACK;
+ } else {
+ ctx->omask = 1;
+ memcpy(buf_last, ctx->omaskkey, 4);
+ buf_last += 4;
+ }
+ }
+ ctx->ostate = SEND_PAYLOAD;
+ ctx->opayloadlen = iocb->payload_length;
+ ctx->opayloadoff = 0;
+
+ buflen -= (size_t)(buf_last - buf);
+ /* fall through */
+ case SEND_PAYLOAD:
+ if (iocb->data_length > 0) {
+ size_t writelen = wslay_min(buflen, iocb->data_length);
+
+ if (ctx->omask) {
+ for (i = 0; i < writelen; ++i) {
+ *buf_last++ =
+ iocb->data[i] ^ ctx->omaskkey[(ctx->opayloadoff + i) % 4];
+ }
+ } else {
+ memcpy(buf_last, iocb->data, writelen);
+ buf_last += writelen;
+ }
+
+ ctx->opayloadoff += writelen;
+ *pwpayloadlen = writelen;
+ }
+
+ if (ctx->opayloadoff == ctx->opayloadlen) {
+ ctx->ostate = PREP_HEADER;
+ }
+
+ return buf_last - buf;
+ default:
+ return WSLAY_ERR_INVALID_ARGUMENT;
+ }
+}
+
+static void wslay_shift_ibuf(wslay_frame_context_ptr ctx) {
+ ptrdiff_t len = ctx->ibuflimit - ctx->ibufmark;
+ memmove(ctx->ibuf, ctx->ibufmark, (size_t)len);
+ ctx->ibuflimit = ctx->ibuf + len;
ctx->ibufmark = ctx->ibuf;
}
-static ssize_t wslay_recv(wslay_frame_context_ptr ctx)
-{
+static ssize_t wslay_recv(wslay_frame_context_ptr ctx) {
ssize_t r;
- if(ctx->ibufmark != ctx->ibuf) {
+ if (ctx->ibufmark != ctx->ibuf) {
wslay_shift_ibuf(ctx);
}
- r = ctx->callbacks.recv_callback
- (ctx->ibuflimit, ctx->ibuf+sizeof(ctx->ibuf)-ctx->ibuflimit,
- 0, ctx->user_data);
- if(r > 0) {
+ r = ctx->callbacks.recv_callback(
+ ctx->ibuflimit, (size_t)(ctx->ibuf + sizeof(ctx->ibuf) - ctx->ibuflimit),
+ 0, ctx->user_data);
+ if (r > 0) {
ctx->ibuflimit += r;
} else {
r = WSLAY_ERR_WANT_READ;
@@ -217,17 +317,16 @@ static ssize_t wslay_recv(wslay_frame_context_ptr ctx)
#define WSLAY_AVAIL_IBUF(ctx) ((size_t)(ctx->ibuflimit - ctx->ibufmark))
ssize_t wslay_frame_recv(wslay_frame_context_ptr ctx,
- struct wslay_frame_iocb *iocb)
-{
+ struct wslay_frame_iocb *iocb) {
ssize_t r;
- if(ctx->istate == RECV_HEADER1) {
+ if (ctx->istate == RECV_HEADER1) {
uint8_t fin, opcode, rsv, payloadlen;
- if(WSLAY_AVAIL_IBUF(ctx) < ctx->ireqread) {
- if((r = wslay_recv(ctx)) <= 0) {
+ if (WSLAY_AVAIL_IBUF(ctx) < ctx->ireqread) {
+ if ((r = wslay_recv(ctx)) <= 0) {
return r;
}
}
- if(WSLAY_AVAIL_IBUF(ctx) < ctx->ireqread) {
+ if (WSLAY_AVAIL_IBUF(ctx) < ctx->ireqread) {
return WSLAY_ERR_WANT_READ;
}
fin = (ctx->ibufmark[0] >> 7) & 1;
@@ -240,19 +339,19 @@ ssize_t wslay_frame_recv(wslay_frame_context_ptr ctx,
ctx->imask = (ctx->ibufmark[0] >> 7) & 1;
payloadlen = ctx->ibufmark[0] & 0x7fu;
++ctx->ibufmark;
- if(wslay_is_ctrl_frame(opcode) && (payloadlen > 125 || !fin)) {
+ if (wslay_is_ctrl_frame(opcode) && (payloadlen > 125 || !fin)) {
return WSLAY_ERR_PROTO;
}
- if(payloadlen == 126) {
+ if (payloadlen == 126) {
ctx->istate = RECV_EXT_PAYLOADLEN;
ctx->ireqread = 2;
- } else if(payloadlen == 127) {
+ } else if (payloadlen == 127) {
ctx->istate = RECV_EXT_PAYLOADLEN;
ctx->ireqread = 8;
} else {
ctx->ipayloadlen = payloadlen;
ctx->ipayloadoff = 0;
- if(ctx->imask) {
+ if (ctx->imask) {
ctx->istate = RECV_MASKKEY;
ctx->ireqread = 4;
} else {
@@ -260,42 +359,41 @@ ssize_t wslay_frame_recv(wslay_frame_context_ptr ctx,
}
}
}
- if(ctx->istate == RECV_EXT_PAYLOADLEN) {
- if(WSLAY_AVAIL_IBUF(ctx) < ctx->ireqread) {
- if((r = wslay_recv(ctx)) <= 0) {
+ if (ctx->istate == RECV_EXT_PAYLOADLEN) {
+ if (WSLAY_AVAIL_IBUF(ctx) < ctx->ireqread) {
+ if ((r = wslay_recv(ctx)) <= 0) {
return r;
}
- if(WSLAY_AVAIL_IBUF(ctx) < ctx->ireqread) {
+ if (WSLAY_AVAIL_IBUF(ctx) < ctx->ireqread) {
return WSLAY_ERR_WANT_READ;
}
}
ctx->ipayloadlen = 0;
ctx->ipayloadoff = 0;
- memcpy((uint8_t*)&ctx->ipayloadlen+(8-ctx->ireqread),
- ctx->ibufmark, ctx->ireqread);
+ memcpy((uint8_t *)&ctx->ipayloadlen + (8 - ctx->ireqread), ctx->ibufmark,
+ ctx->ireqread);
ctx->ipayloadlen = ntoh64(ctx->ipayloadlen);
ctx->ibufmark += ctx->ireqread;
- if(ctx->ireqread == 8) {
- if(ctx->ipayloadlen < (1 << 16) ||
- ctx->ipayloadlen & (1ull << 63)) {
+ if (ctx->ireqread == 8) {
+ if (ctx->ipayloadlen < (1 << 16) || ctx->ipayloadlen & (1ull << 63)) {
return WSLAY_ERR_PROTO;
}
- } else if(ctx->ipayloadlen < 126) {
+ } else if (ctx->ipayloadlen < 126) {
return WSLAY_ERR_PROTO;
}
- if(ctx->imask) {
+ if (ctx->imask) {
ctx->istate = RECV_MASKKEY;
ctx->ireqread = 4;
} else {
ctx->istate = RECV_PAYLOAD;
}
}
- if(ctx->istate == RECV_MASKKEY) {
- if(WSLAY_AVAIL_IBUF(ctx) < ctx->ireqread) {
- if((r = wslay_recv(ctx)) <= 0) {
+ if (ctx->istate == RECV_MASKKEY) {
+ if (WSLAY_AVAIL_IBUF(ctx) < ctx->ireqread) {
+ if ((r = wslay_recv(ctx)) <= 0) {
return r;
}
- if(WSLAY_AVAIL_IBUF(ctx) < ctx->ireqread) {
+ if (WSLAY_AVAIL_IBUF(ctx) < ctx->ireqread) {
return WSLAY_ERR_WANT_READ;
}
}
@@ -303,25 +401,25 @@ ssize_t wslay_frame_recv(wslay_frame_context_ptr ctx,
ctx->ibufmark += 4;
ctx->istate = RECV_PAYLOAD;
}
- if(ctx->istate == RECV_PAYLOAD) {
+ if (ctx->istate == RECV_PAYLOAD) {
uint8_t *readlimit, *readmark;
- uint64_t rempayloadlen = ctx->ipayloadlen-ctx->ipayloadoff;
- if(WSLAY_AVAIL_IBUF(ctx) == 0 && rempayloadlen > 0) {
- if((r = wslay_recv(ctx)) <= 0) {
+ uint64_t rempayloadlen = ctx->ipayloadlen - ctx->ipayloadoff;
+ if (WSLAY_AVAIL_IBUF(ctx) == 0 && rempayloadlen > 0) {
+ if ((r = wslay_recv(ctx)) <= 0) {
return r;
}
}
readmark = ctx->ibufmark;
- readlimit = WSLAY_AVAIL_IBUF(ctx) < rempayloadlen ?
- ctx->ibuflimit : ctx->ibufmark+rempayloadlen;
- if(ctx->imask) {
- for(; ctx->ibufmark != readlimit;
- ++ctx->ibufmark, ++ctx->ipayloadoff) {
+ readlimit = WSLAY_AVAIL_IBUF(ctx) < rempayloadlen
+ ? ctx->ibuflimit
+ : ctx->ibufmark + rempayloadlen;
+ if (ctx->imask) {
+ for (; ctx->ibufmark != readlimit; ++ctx->ibufmark, ++ctx->ipayloadoff) {
ctx->ibufmark[0] ^= ctx->imaskkey[ctx->ipayloadoff % 4];
}
} else {
ctx->ibufmark = readlimit;
- ctx->ipayloadoff += readlimit-readmark;
+ ctx->ipayloadoff += (uint64_t)(readlimit - readmark);
}
iocb->fin = ctx->iom.fin;
iocb->rsv = ctx->iom.rsv;
@@ -329,12 +427,12 @@ ssize_t wslay_frame_recv(wslay_frame_context_ptr ctx,
iocb->payload_length = ctx->ipayloadlen;
iocb->mask = ctx->imask;
iocb->data = readmark;
- iocb->data_length = ctx->ibufmark-readmark;
- if(ctx->ipayloadlen == ctx->ipayloadoff) {
+ iocb->data_length = (size_t)(ctx->ibufmark - readmark);
+ if (ctx->ipayloadlen == ctx->ipayloadoff) {
ctx->istate = RECV_HEADER1;
ctx->ireqread = 2;
}
- return iocb->data_length;
+ return (ssize_t)iocb->data_length;
}
return WSLAY_ERR_INVALID_ARGUMENT;
}
diff --git a/thirdparty/wslay/wslay_frame.h b/thirdparty/wslay/wslay_frame.h
index 6a75858cc7..3ac98112b5 100644
--- a/thirdparty/wslay/wslay_frame.h
+++ b/thirdparty/wslay/wslay_frame.h
@@ -33,6 +33,7 @@
enum wslay_frame_state {
PREP_HEADER,
+ PREP_HEADER_NOBUF,
SEND_HEADER,
SEND_PAYLOAD,
RECV_HEADER1,
diff --git a/thirdparty/wslay/wslay_stack.h b/thirdparty/wslay/wslay_macro.h
index 16e4e968eb..a06cff98e1 100644
--- a/thirdparty/wslay/wslay_stack.h
+++ b/thirdparty/wslay/wslay_macro.h
@@ -1,7 +1,7 @@
/*
* Wslay - The WebSocket Library
*
- * Copyright (c) 2011, 2012 Tatsuhiro Tsujikawa
+ * Copyright (c) 2020 Tatsuhiro Tsujikawa
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
@@ -22,8 +22,8 @@
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
-#ifndef WSLAY_STACK_H
-#define WSLAY_STACK_H
+#ifndef WSLAY_MACRO_H
+#define WSLAY_MACRO_H
#ifdef HAVE_CONFIG_H
# include "config.h"
@@ -31,20 +31,9 @@
#include <wslay/wslay.h>
-struct wslay_stack_cell {
- void *data;
- struct wslay_stack_cell *next;
-};
+#include <stddef.h>
-struct wslay_stack {
- struct wslay_stack_cell *top;
-};
+#define wslay_struct_of(ptr, type, member) \
+ ((type *)(void *)((char *)(ptr)-offsetof(type, member)))
-struct wslay_stack* wslay_stack_new();
-void wslay_stack_free(struct wslay_stack *stack);
-int wslay_stack_push(struct wslay_stack *stack, void *data);
-void wslay_stack_pop(struct wslay_stack *stack);
-void* wslay_stack_top(struct wslay_stack *stack);
-int wslay_stack_empty(struct wslay_stack *stack);
-
-#endif /* WSLAY_STACK_H */
+#endif /* WSLAY_MACRO_H */
diff --git a/thirdparty/wslay/wslay_net.c b/thirdparty/wslay/wslay_net.c
index d3867c21fb..e256158b4c 100644
--- a/thirdparty/wslay/wslay_net.c
+++ b/thirdparty/wslay/wslay_net.c
@@ -26,10 +26,9 @@
#ifndef WORDS_BIGENDIAN
-uint64_t wslay_byteswap64(uint64_t x)
-{
+uint64_t wslay_byteswap64(uint64_t x) {
uint64_t u = ntohl(x & 0xffffffffllu);
- uint64_t l = ntohl(x >> 32);
+ uint64_t l = ntohl((uint32_t)(x >> 32));
return (u << 32) | l;
}
diff --git a/thirdparty/wslay/wslay_queue.c b/thirdparty/wslay/wslay_queue.c
index 8d2669687d..ebde3ba83d 100644
--- a/thirdparty/wslay/wslay_queue.c
+++ b/thirdparty/wslay/wslay_queue.c
@@ -27,91 +27,51 @@
#include <string.h>
#include <assert.h>
-struct wslay_queue* wslay_queue_new(void)
-{
- struct wslay_queue *queue = (struct wslay_queue*)malloc
- (sizeof(struct wslay_queue));
- if(!queue) {
- return NULL;
- }
- queue->top = queue->tail = NULL;
- return queue;
-}
+#include "wslay_macro.h"
-void wslay_queue_free(struct wslay_queue *queue)
-{
- if(!queue) {
- return;
- } else {
- struct wslay_queue_cell *p = queue->top;
- while(p) {
- struct wslay_queue_cell *next = p->next;
- free(p);
- p = next;
- }
- free(queue);
- }
+void wslay_queue_init(struct wslay_queue *queue) {
+ queue->top = NULL;
+ queue->tail = &queue->top;
}
-int wslay_queue_push(struct wslay_queue *queue, void *data)
-{
- struct wslay_queue_cell *new_cell = (struct wslay_queue_cell*)malloc
- (sizeof(struct wslay_queue_cell));
- if(!new_cell) {
- return WSLAY_ERR_NOMEM;
- }
- new_cell->data = data;
- new_cell->next = NULL;
- if(queue->tail) {
- queue->tail->next = new_cell;
- queue->tail = new_cell;
+void wslay_queue_deinit(struct wslay_queue *queue) { (void)queue; }
- } else {
- queue->top = queue->tail = new_cell;
- }
- return 0;
+void wslay_queue_push(struct wslay_queue *queue,
+ struct wslay_queue_entry *ent) {
+ ent->next = NULL;
+ *queue->tail = ent;
+ queue->tail = &ent->next;
}
-int wslay_queue_push_front(struct wslay_queue *queue, void *data)
-{
- struct wslay_queue_cell *new_cell = (struct wslay_queue_cell*)malloc
- (sizeof(struct wslay_queue_cell));
- if(!new_cell) {
- return WSLAY_ERR_NOMEM;
- }
- new_cell->data = data;
- new_cell->next = queue->top;
- queue->top = new_cell;
- if(!queue->tail) {
- queue->tail = queue->top;
+void wslay_queue_push_front(struct wslay_queue *queue,
+ struct wslay_queue_entry *ent) {
+ ent->next = queue->top;
+ queue->top = ent;
+
+ if (ent->next == NULL) {
+ queue->tail = &ent->next;
}
- return 0;
}
-void wslay_queue_pop(struct wslay_queue *queue)
-{
- struct wslay_queue_cell *top = queue->top;
- assert(top);
- queue->top = top->next;
- if(top == queue->tail) {
- queue->tail = NULL;
+void wslay_queue_pop(struct wslay_queue *queue) {
+ assert(queue->top);
+ queue->top = queue->top->next;
+ if (queue->top == NULL) {
+ queue->tail = &queue->top;
}
- free(top);
}
-void* wslay_queue_top(struct wslay_queue *queue)
-{
+struct wslay_queue_entry *wslay_queue_top(struct wslay_queue *queue) {
assert(queue->top);
- return queue->top->data;
+ return queue->top;
}
-void* wslay_queue_tail(struct wslay_queue *queue)
-{
- assert(queue->tail);
- return queue->tail->data;
+struct wslay_queue_entry *wslay_queue_tail(struct wslay_queue *queue) {
+ assert(queue->top);
+ return wslay_struct_of(queue->tail, struct wslay_queue_entry, next);
}
-int wslay_queue_empty(struct wslay_queue *queue)
-{
+int wslay_queue_empty(struct wslay_queue *queue) {
+ assert(queue->top || queue->tail == &queue->top);
return queue->top == NULL;
}
diff --git a/thirdparty/wslay/wslay_queue.h b/thirdparty/wslay/wslay_queue.h
index 55e78a042e..fa16aea489 100644
--- a/thirdparty/wslay/wslay_queue.h
+++ b/thirdparty/wslay/wslay_queue.h
@@ -31,23 +31,23 @@
#include <wslay/wslay.h>
-struct wslay_queue_cell {
- void *data;
- struct wslay_queue_cell *next;
+struct wslay_queue_entry {
+ struct wslay_queue_entry *next;
};
struct wslay_queue {
- struct wslay_queue_cell *top;
- struct wslay_queue_cell *tail;
+ struct wslay_queue_entry *top;
+ struct wslay_queue_entry **tail;
};
-struct wslay_queue* wslay_queue_new(void);
-void wslay_queue_free(struct wslay_queue *queue);
-int wslay_queue_push(struct wslay_queue *queue, void *data);
-int wslay_queue_push_front(struct wslay_queue *queue, void *data);
+void wslay_queue_init(struct wslay_queue *queue);
+void wslay_queue_deinit(struct wslay_queue *queue);
+void wslay_queue_push(struct wslay_queue *queue, struct wslay_queue_entry *ent);
+void wslay_queue_push_front(struct wslay_queue *queue,
+ struct wslay_queue_entry *ent);
void wslay_queue_pop(struct wslay_queue *queue);
-void* wslay_queue_top(struct wslay_queue *queue);
-void* wslay_queue_tail(struct wslay_queue *queue);
+struct wslay_queue_entry *wslay_queue_top(struct wslay_queue *queue);
+struct wslay_queue_entry *wslay_queue_tail(struct wslay_queue *queue);
int wslay_queue_empty(struct wslay_queue *queue);
#endif /* WSLAY_QUEUE_H */
diff --git a/thirdparty/wslay/wslay_stack.c b/thirdparty/wslay/wslay_stack.c
deleted file mode 100644
index 0e05d74031..0000000000
--- a/thirdparty/wslay/wslay_stack.c
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Wslay - The WebSocket Library
- *
- * Copyright (c) 2011, 2012 Tatsuhiro Tsujikawa
- *
- * Permission is hereby granted, free of charge, to any person obtaining
- * a copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
- * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-#include "wslay_stack.h"
-
-#include <string.h>
-#include <assert.h>
-
-struct wslay_stack* wslay_stack_new()
-{
- struct wslay_stack *stack = (struct wslay_stack*)malloc
- (sizeof(struct wslay_stack));
- if(!stack) {
- return NULL;
- }
- stack->top = NULL;
- return stack;
-}
-
-void wslay_stack_free(struct wslay_stack *stack)
-{
- struct wslay_stack_cell *p;
- if(!stack) {
- return;
- }
- p = stack->top;
- while(p) {
- struct wslay_stack_cell *next = p->next;
- free(p);
- p = next;
- }
- free(stack);
-}
-
-int wslay_stack_push(struct wslay_stack *stack, void *data)
-{
- struct wslay_stack_cell *new_cell = (struct wslay_stack_cell*)malloc
- (sizeof(struct wslay_stack_cell));
- if(!new_cell) {
- return WSLAY_ERR_NOMEM;
- }
- new_cell->data = data;
- new_cell->next = stack->top;
- stack->top = new_cell;
- return 0;
-}
-
-void wslay_stack_pop(struct wslay_stack *stack)
-{
- struct wslay_stack_cell *top = stack->top;
- assert(top);
- stack->top = top->next;
- free(top);
-}
-
-void* wslay_stack_top(struct wslay_stack *stack)
-{
- assert(stack->top);
- return stack->top->data;
-}
-
-int wslay_stack_empty(struct wslay_stack *stack)
-{
- return stack->top == NULL;
-}
diff --git a/thirdparty/xatlas/xatlas.cpp b/thirdparty/xatlas/xatlas.cpp
index 9f66ae0067..d92ef1a83a 100644
--- a/thirdparty/xatlas/xatlas.cpp
+++ b/thirdparty/xatlas/xatlas.cpp
@@ -40,14 +40,14 @@ Copyright (c) 2012 Brandon Pelfrey
#if XATLAS_C_API
#include "xatlas_c.h"
#endif
-#include <assert.h>
-#include <float.h> // FLT_MAX
-#include <limits.h>
-#include <math.h>
#include <atomic>
#include <condition_variable>
#include <mutex>
#include <thread>
+#include <assert.h>
+#include <float.h> // FLT_MAX
+#include <limits.h>
+#include <math.h>
#define __STDC_LIMIT_MACROS
#include <stdint.h>
#include <stdio.h>
@@ -76,10 +76,7 @@ Copyright (c) 2012 Brandon Pelfrey
#define XA_XSTR(x) XA_STR(x)
#ifndef XA_ASSERT
-#define XA_ASSERT(exp) \
- if (!(exp)) { \
- XA_PRINT_WARNING("\rASSERT: %s %s %d\n", XA_XSTR(exp), __FILE__, __LINE__); \
- }
+#define XA_ASSERT(exp) if (!(exp)) { XA_PRINT_WARNING("\rASSERT: %s %s %d\n", XA_XSTR(exp), __FILE__, __LINE__); }
#endif
#ifndef XA_DEBUG_ASSERT
@@ -87,13 +84,13 @@ Copyright (c) 2012 Brandon Pelfrey
#endif
#ifndef XA_PRINT
-#define XA_PRINT(...) \
+#define XA_PRINT(...) \
if (xatlas::internal::s_print && xatlas::internal::s_printVerbose) \
xatlas::internal::s_print(__VA_ARGS__);
#endif
#ifndef XA_PRINT_WARNING
-#define XA_PRINT_WARNING(...) \
+#define XA_PRINT_WARNING(...) \
if (xatlas::internal::s_print) \
xatlas::internal::s_print(__VA_ARGS__);
#endif
@@ -145,14 +142,18 @@ Copyright (c) 2012 Brandon Pelfrey
#define XA_DEBUG_EXPORT_OBJ_INVALID_PARAMETERIZATION 0
#define XA_DEBUG_EXPORT_OBJ_RECOMPUTED_CHARTS 0
-#define XA_DEBUG_EXPORT_OBJ (0 || XA_DEBUG_EXPORT_OBJ_FACE_GROUPS || XA_DEBUG_EXPORT_OBJ_CHART_GROUPS || XA_DEBUG_EXPORT_OBJ_PLANAR_REGIONS || XA_DEBUG_EXPORT_OBJ_CHARTS || XA_DEBUG_EXPORT_OBJ_TJUNCTION || XA_DEBUG_EXPORT_OBJ_CHARTS_AFTER_PARAMETERIZATION || XA_DEBUG_EXPORT_OBJ_INVALID_PARAMETERIZATION || XA_DEBUG_EXPORT_OBJ_RECOMPUTED_CHARTS)
+#define XA_DEBUG_EXPORT_OBJ (0 \
+ || XA_DEBUG_EXPORT_OBJ_FACE_GROUPS \
+ || XA_DEBUG_EXPORT_OBJ_CHART_GROUPS \
+ || XA_DEBUG_EXPORT_OBJ_PLANAR_REGIONS \
+ || XA_DEBUG_EXPORT_OBJ_CHARTS \
+ || XA_DEBUG_EXPORT_OBJ_TJUNCTION \
+ || XA_DEBUG_EXPORT_OBJ_CHARTS_AFTER_PARAMETERIZATION \
+ || XA_DEBUG_EXPORT_OBJ_INVALID_PARAMETERIZATION \
+ || XA_DEBUG_EXPORT_OBJ_RECOMPUTED_CHARTS)
#ifdef _MSC_VER
-#define XA_FOPEN(_file, _filename, _mode) \
- { \
- if (fopen_s(&_file, _filename, _mode) != 0) \
- _file = NULL; \
- }
+#define XA_FOPEN(_file, _filename, _mode) { if (fopen_s(&_file, _filename, _mode) != 0) _file = NULL; }
#define XA_SPRINTF(_buffer, _size, _format, ...) sprintf_s(_buffer, _size, _format, __VA_ARGS__)
#else
#define XA_FOPEN(_file, _filename, _mode) _file = fopen(_filename, _mode)
@@ -172,12 +173,11 @@ typedef uint64_t Duration;
#define XA_PROFILE_START(var) const std::chrono::time_point<std::chrono::high_resolution_clock> var##Start = std::chrono::high_resolution_clock::now();
#define XA_PROFILE_END(var) internal::s_profile.var += uint64_t(std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::high_resolution_clock::now() - var##Start).count());
-#define XA_PROFILE_PRINT_AND_RESET(label, var) \
- XA_PRINT("%s%.2f seconds (%g ms)\n", label, internal::durationToSeconds(internal::s_profile.var), internal::durationToMs(internal::s_profile.var)); \
- internal::s_profile.var = 0u;
+#define XA_PROFILE_PRINT_AND_RESET(label, var) XA_PRINT("%s%.2f seconds (%g ms)\n", label, internal::durationToSeconds(internal::s_profile.var), internal::durationToMs(internal::s_profile.var)); internal::s_profile.var = 0u;
#define XA_PROFILE_ALLOC 0
-struct ProfileData {
+struct ProfileData
+{
#if XA_PROFILE_ALLOC
std::atomic<Duration> alloc;
#endif
@@ -232,11 +232,13 @@ struct ProfileData {
static ProfileData s_profile;
-static double durationToMs(Duration c) {
+static double durationToMs(Duration c)
+{
return (double)c * 0.001;
}
-static double durationToSeconds(Duration c) {
+static double durationToSeconds(Duration c)
+{
return (double)c * 0.000001;
}
#else
@@ -246,8 +248,10 @@ static double durationToSeconds(Duration c) {
#define XA_PROFILE_ALLOC 0
#endif
-struct MemTag {
- enum {
+struct MemTag
+{
+ enum
+ {
Default,
BitImage,
BVH,
@@ -270,7 +274,8 @@ struct MemTag {
};
#if XA_DEBUG_HEAP
-struct AllocHeader {
+struct AllocHeader
+{
size_t size;
const char *file;
int line;
@@ -283,10 +288,11 @@ struct AllocHeader {
static std::mutex s_allocMutex;
static AllocHeader *s_allocRoot = nullptr;
static size_t s_allocTotalCount = 0, s_allocTotalSize = 0, s_allocPeakSize = 0, s_allocCount[MemTag::Count] = { 0 }, s_allocTotalTagSize[MemTag::Count] = { 0 }, s_allocPeakTagSize[MemTag::Count] = { 0 };
-static uint32_t s_allocId = 0;
+static uint32_t s_allocId =0 ;
static constexpr uint32_t kAllocRedzone = 0x12345678;
-static void *Realloc(void *ptr, size_t size, int tag, const char *file, int line) {
+static void *Realloc(void *ptr, size_t size, int tag, const char *file, int line)
+{
std::unique_lock<std::mutex> lock(s_allocMutex);
if (!size && !ptr)
return nullptr;
@@ -347,7 +353,8 @@ static void *Realloc(void *ptr, size_t size, int tag, const char *file, int line
return newPtr + sizeof(AllocHeader);
}
-static void ReportLeaks() {
+static void ReportLeaks()
+{
printf("Checking for memory leaks...\n");
bool anyLeaks = false;
AllocHeader *header = s_allocRoot;
@@ -375,7 +382,8 @@ static void ReportLeaks() {
s_allocTotalTagSize[i] = s_allocPeakTagSize[i] = 0;
}
-static void PrintMemoryUsage() {
+static void PrintMemoryUsage()
+{
XA_PRINT("Total allocations: %zu\n", s_allocTotalCount);
XA_PRINT("Memory usage: %0.2fMB current, %0.2fMB peak\n", internal::s_allocTotalSize / 1024.0f / 1024.0f, internal::s_allocPeakSize / 1024.0f / 1024.0f);
static const char *labels[] = { // Sync with MemTag
@@ -404,7 +412,8 @@ static void PrintMemoryUsage() {
#define XA_PRINT_MEM_USAGE internal::PrintMemoryUsage();
#else
-static void *Realloc(void *ptr, size_t size, int /*tag*/, const char * /*file*/, int /*line*/) {
+static void *Realloc(void *ptr, size_t size, int /*tag*/, const char * /*file*/, int /*line*/)
+{
if (size == 0 && !ptr)
return nullptr;
if (size == 0 && s_free) {
@@ -430,75 +439,89 @@ static constexpr float kEpsilon = 0.0001f;
static constexpr float kAreaEpsilon = FLT_EPSILON;
static constexpr float kNormalEpsilon = 0.001f;
-static int align(int x, int a) {
+static int align(int x, int a)
+{
return (x + a - 1) & ~(a - 1);
}
template <typename T>
-static T max(const T &a, const T &b) {
+static T max(const T &a, const T &b)
+{
return a > b ? a : b;
}
template <typename T>
-static T min(const T &a, const T &b) {
+static T min(const T &a, const T &b)
+{
return a < b ? a : b;
}
template <typename T>
-static T max3(const T &a, const T &b, const T &c) {
+static T max3(const T &a, const T &b, const T &c)
+{
return max(a, max(b, c));
}
/// Return the maximum of the three arguments.
template <typename T>
-static T min3(const T &a, const T &b, const T &c) {
+static T min3(const T &a, const T &b, const T &c)
+{
return min(a, min(b, c));
}
/// Clamp between two values.
template <typename T>
-static T clamp(const T &x, const T &a, const T &b) {
+static T clamp(const T &x, const T &a, const T &b)
+{
return min(max(x, a), b);
}
template <typename T>
-static void swap(T &a, T &b) {
+static void swap(T &a, T &b)
+{
T temp = a;
a = b;
b = temp;
}
-union FloatUint32 {
+union FloatUint32
+{
float f;
uint32_t u;
};
-static bool isFinite(float f) {
+static bool isFinite(float f)
+{
FloatUint32 fu;
fu.f = f;
return fu.u != 0x7F800000u && fu.u != 0x7F800001u;
}
-static bool isNan(float f) {
+static bool isNan(float f)
+{
return f != f;
}
// Robust floating point comparisons:
// http://realtimecollisiondetection.net/blog/?p=89
-static bool equal(const float f0, const float f1, const float epsilon) {
+static bool equal(const float f0, const float f1, const float epsilon)
+{
//return fabs(f0-f1) <= epsilon;
return fabs(f0 - f1) <= epsilon * max3(1.0f, fabsf(f0), fabsf(f1));
}
-static int ftoi_ceil(float val) {
+static int ftoi_ceil(float val)
+{
return (int)ceilf(val);
}
-static bool isZero(const float f, const float epsilon) {
+static bool isZero(const float f, const float epsilon)
+{
return fabs(f) <= epsilon;
}
-static float square(float f) {
+static float square(float f)
+{
return f * f;
}
@@ -508,8 +531,9 @@ static float square(float f) {
* @note isPowerOfTwo(x) == true -> nextPowerOfTwo(x) == x
* @note nextPowerOfTwo(x) = 2 << log2(x-1)
*/
-static uint32_t nextPowerOfTwo(uint32_t x) {
- XA_DEBUG_ASSERT(x != 0);
+static uint32_t nextPowerOfTwo(uint32_t x)
+{
+ XA_DEBUG_ASSERT( x != 0 );
// On modern CPUs this is supposed to be as fast as using the bsr instruction.
x--;
x |= x >> 1;
@@ -520,34 +544,38 @@ static uint32_t nextPowerOfTwo(uint32_t x) {
return x + 1;
}
-class Vector2 {
+class Vector2
+{
public:
Vector2() {}
- explicit Vector2(float f) :
- x(f), y(f) {}
- Vector2(float _x, float _y) :
- x(_x), y(_y) {}
+ explicit Vector2(float f) : x(f), y(f) {}
+ Vector2(float _x, float _y): x(_x), y(_y) {}
- Vector2 operator-() const {
+ Vector2 operator-() const
+ {
return Vector2(-x, -y);
}
- void operator+=(const Vector2 &v) {
+ void operator+=(const Vector2 &v)
+ {
x += v.x;
y += v.y;
}
- void operator-=(const Vector2 &v) {
+ void operator-=(const Vector2 &v)
+ {
x -= v.x;
y -= v.y;
}
- void operator*=(float s) {
+ void operator*=(float s)
+ {
x *= s;
y *= s;
}
- void operator*=(const Vector2 &v) {
+ void operator*=(const Vector2 &v)
+ {
x *= v.x;
y *= v.y;
}
@@ -555,11 +583,13 @@ public:
float x, y;
};
-static bool operator==(const Vector2 &a, const Vector2 &b) {
+static bool operator==(const Vector2 &a, const Vector2 &b)
+{
return a.x == b.x && a.y == b.y;
}
-static bool operator!=(const Vector2 &a, const Vector2 &b) {
+static bool operator!=(const Vector2 &a, const Vector2 &b)
+{
return a.x != b.x || a.y != b.y;
}
@@ -568,33 +598,40 @@ static bool operator!=(const Vector2 &a, const Vector2 &b) {
return Vector2(a.x + b.x, a.y + b.y);
}*/
-static Vector2 operator-(const Vector2 &a, const Vector2 &b) {
+static Vector2 operator-(const Vector2 &a, const Vector2 &b)
+{
return Vector2(a.x - b.x, a.y - b.y);
}
-static Vector2 operator*(const Vector2 &v, float s) {
+static Vector2 operator*(const Vector2 &v, float s)
+{
return Vector2(v.x * s, v.y * s);
}
-static float dot(const Vector2 &a, const Vector2 &b) {
+static float dot(const Vector2 &a, const Vector2 &b)
+{
return a.x * b.x + a.y * b.y;
}
-static float lengthSquared(const Vector2 &v) {
+static float lengthSquared(const Vector2 &v)
+{
return v.x * v.x + v.y * v.y;
}
-static float length(const Vector2 &v) {
+static float length(const Vector2 &v)
+{
return sqrtf(lengthSquared(v));
}
#if XA_DEBUG
-static bool isNormalized(const Vector2 &v, float epsilon = kNormalEpsilon) {
+static bool isNormalized(const Vector2 &v, float epsilon = kNormalEpsilon)
+{
return equal(length(v), 1, epsilon);
}
#endif
-static Vector2 normalize(const Vector2 &v) {
+static Vector2 normalize(const Vector2 &v)
+{
const float l = length(v);
XA_DEBUG_ASSERT(l > 0.0f); // Never negative.
const Vector2 n = v * (1.0f / l);
@@ -602,30 +639,36 @@ static Vector2 normalize(const Vector2 &v) {
return n;
}
-static Vector2 normalizeSafe(const Vector2 &v, const Vector2 &fallback) {
+static Vector2 normalizeSafe(const Vector2 &v, const Vector2 &fallback)
+{
const float l = length(v);
if (l > 0.0f) // Never negative.
return v * (1.0f / l);
return fallback;
}
-static bool equal(const Vector2 &v1, const Vector2 &v2, float epsilon) {
+static bool equal(const Vector2 &v1, const Vector2 &v2, float epsilon)
+{
return equal(v1.x, v2.x, epsilon) && equal(v1.y, v2.y, epsilon);
}
-static Vector2 min(const Vector2 &a, const Vector2 &b) {
+static Vector2 min(const Vector2 &a, const Vector2 &b)
+{
return Vector2(min(a.x, b.x), min(a.y, b.y));
}
-static Vector2 max(const Vector2 &a, const Vector2 &b) {
+static Vector2 max(const Vector2 &a, const Vector2 &b)
+{
return Vector2(max(a.x, b.x), max(a.y, b.y));
}
-static bool isFinite(const Vector2 &v) {
+static bool isFinite(const Vector2 &v)
+{
return isFinite(v.x) && isFinite(v.y);
}
-static float triangleArea(const Vector2 &a, const Vector2 &b, const Vector2 &c) {
+static float triangleArea(const Vector2 &a, const Vector2 &b, const Vector2 &c)
+{
// IC: While it may be appealing to use the following expression:
//return (c.x * a.y + a.x * b.y + b.x * c.y - b.x * a.y - c.x * b.y - a.x * c.y) * 0.5f;
// That's actually a terrible idea. Small triangles far from the origin can end up producing fairly large floating point
@@ -639,7 +682,8 @@ static float triangleArea(const Vector2 &a, const Vector2 &b, const Vector2 &c)
return (v0.x * v1.y - v0.y * v1.x) * 0.5f;
}
-static bool linesIntersect(const Vector2 &a1, const Vector2 &a2, const Vector2 &b1, const Vector2 &b2, float epsilon) {
+static bool linesIntersect(const Vector2 &a1, const Vector2 &a2, const Vector2 &b1, const Vector2 &b2, float epsilon)
+{
const Vector2 v0 = a2 - a1;
const Vector2 v1 = b2 - b1;
const float denom = -v1.x * v0.y + v0.x * v1.y;
@@ -647,70 +691,76 @@ static bool linesIntersect(const Vector2 &a1, const Vector2 &a2, const Vector2 &
return false;
const float s = (-v0.y * (a1.x - b1.x) + v0.x * (a1.y - b1.y)) / denom;
if (s > epsilon && s < 1.0f - epsilon) {
- const float t = (v1.x * (a1.y - b1.y) - v1.y * (a1.x - b1.x)) / denom;
+ const float t = ( v1.x * (a1.y - b1.y) - v1.y * (a1.x - b1.x)) / denom;
return t > epsilon && t < 1.0f - epsilon;
}
return false;
}
-struct Vector2i {
+struct Vector2i
+{
Vector2i() {}
- Vector2i(int32_t _x, int32_t _y) :
- x(_x), y(_y) {}
+ Vector2i(int32_t _x, int32_t _y) : x(_x), y(_y) {}
int32_t x, y;
};
-class Vector3 {
+class Vector3
+{
public:
Vector3() {}
- explicit Vector3(float f) :
- x(f), y(f), z(f) {}
- Vector3(float _x, float _y, float _z) :
- x(_x), y(_y), z(_z) {}
- Vector3(const Vector2 &v, float _z) :
- x(v.x), y(v.y), z(_z) {}
-
- Vector2 xy() const {
+ explicit Vector3(float f) : x(f), y(f), z(f) {}
+ Vector3(float _x, float _y, float _z) : x(_x), y(_y), z(_z) {}
+ Vector3(const Vector2 &v, float _z) : x(v.x), y(v.y), z(_z) {}
+
+ Vector2 xy() const
+ {
return Vector2(x, y);
}
- Vector3 operator-() const {
+ Vector3 operator-() const
+ {
return Vector3(-x, -y, -z);
}
- void operator+=(const Vector3 &v) {
+ void operator+=(const Vector3 &v)
+ {
x += v.x;
y += v.y;
z += v.z;
}
- void operator-=(const Vector3 &v) {
+ void operator-=(const Vector3 &v)
+ {
x -= v.x;
y -= v.y;
z -= v.z;
}
- void operator*=(float s) {
+ void operator*=(float s)
+ {
x *= s;
y *= s;
z *= s;
}
- void operator/=(float s) {
+ void operator/=(float s)
+ {
float is = 1.0f / s;
x *= is;
y *= is;
z *= is;
}
- void operator*=(const Vector3 &v) {
+ void operator*=(const Vector3 &v)
+ {
x *= v.x;
y *= v.y;
z *= v.z;
}
- void operator/=(const Vector3 &v) {
+ void operator/=(const Vector3 &v)
+ {
x /= v.x;
y /= v.y;
z /= v.z;
@@ -719,47 +769,58 @@ public:
float x, y, z;
};
-static Vector3 operator+(const Vector3 &a, const Vector3 &b) {
+static Vector3 operator+(const Vector3 &a, const Vector3 &b)
+{
return Vector3(a.x + b.x, a.y + b.y, a.z + b.z);
}
-static Vector3 operator-(const Vector3 &a, const Vector3 &b) {
+static Vector3 operator-(const Vector3 &a, const Vector3 &b)
+{
return Vector3(a.x - b.x, a.y - b.y, a.z - b.z);
}
-static bool operator==(const Vector3 &a, const Vector3 &b) {
+static bool operator==(const Vector3 &a, const Vector3 &b)
+{
return a.x == b.x && a.y == b.y && a.z == b.z;
}
-static Vector3 cross(const Vector3 &a, const Vector3 &b) {
+static Vector3 cross(const Vector3 &a, const Vector3 &b)
+{
return Vector3(a.y * b.z - a.z * b.y, a.z * b.x - a.x * b.z, a.x * b.y - a.y * b.x);
}
-static Vector3 operator*(const Vector3 &v, float s) {
+static Vector3 operator*(const Vector3 &v, float s)
+{
return Vector3(v.x * s, v.y * s, v.z * s);
}
-static Vector3 operator/(const Vector3 &v, float s) {
+static Vector3 operator/(const Vector3 &v, float s)
+{
return v * (1.0f / s);
}
-static float dot(const Vector3 &a, const Vector3 &b) {
+static float dot(const Vector3 &a, const Vector3 &b)
+{
return a.x * b.x + a.y * b.y + a.z * b.z;
}
-static float lengthSquared(const Vector3 &v) {
+static float lengthSquared(const Vector3 &v)
+{
return v.x * v.x + v.y * v.y + v.z * v.z;
}
-static float length(const Vector3 &v) {
+static float length(const Vector3 &v)
+{
return sqrtf(lengthSquared(v));
}
-static bool isNormalized(const Vector3 &v, float epsilon = kNormalEpsilon) {
+static bool isNormalized(const Vector3 &v, float epsilon = kNormalEpsilon)
+{
return equal(length(v), 1.0f, epsilon);
}
-static Vector3 normalize(const Vector3 &v) {
+static Vector3 normalize(const Vector3 &v)
+{
const float l = length(v);
XA_DEBUG_ASSERT(l > 0.0f); // Never negative.
const Vector3 n = v * (1.0f / l);
@@ -767,103 +828,116 @@ static Vector3 normalize(const Vector3 &v) {
return n;
}
-static Vector3 normalizeSafe(const Vector3 &v, const Vector3 &fallback) {
+static Vector3 normalizeSafe(const Vector3 &v, const Vector3 &fallback)
+{
const float l = length(v);
if (l > 0.0f) // Never negative.
return v * (1.0f / l);
return fallback;
}
-static bool equal(const Vector3 &v0, const Vector3 &v1, float epsilon) {
+static bool equal(const Vector3 &v0, const Vector3 &v1, float epsilon)
+{
return fabs(v0.x - v1.x) <= epsilon && fabs(v0.y - v1.y) <= epsilon && fabs(v0.z - v1.z) <= epsilon;
}
-static Vector3 min(const Vector3 &a, const Vector3 &b) {
+static Vector3 min(const Vector3 &a, const Vector3 &b)
+{
return Vector3(min(a.x, b.x), min(a.y, b.y), min(a.z, b.z));
}
-static Vector3 max(const Vector3 &a, const Vector3 &b) {
+static Vector3 max(const Vector3 &a, const Vector3 &b)
+{
return Vector3(max(a.x, b.x), max(a.y, b.y), max(a.z, b.z));
}
#if XA_DEBUG
-bool isFinite(const Vector3 &v) {
+bool isFinite(const Vector3 &v)
+{
return isFinite(v.x) && isFinite(v.y) && isFinite(v.z);
}
#endif
-struct Extents2 {
+struct Extents2
+{
Vector2 min, max;
Extents2() {}
- Extents2(Vector2 p1, Vector2 p2) {
+ Extents2(Vector2 p1, Vector2 p2)
+ {
min = xatlas::internal::min(p1, p2);
max = xatlas::internal::max(p1, p2);
}
- void reset() {
+ void reset()
+ {
min.x = min.y = FLT_MAX;
max.x = max.y = -FLT_MAX;
}
- void add(Vector2 p) {
+ void add(Vector2 p)
+ {
min = xatlas::internal::min(min, p);
max = xatlas::internal::max(max, p);
}
- Vector2 midpoint() const {
+ Vector2 midpoint() const
+ {
return Vector2(min.x + (max.x - min.x) * 0.5f, min.y + (max.y - min.y) * 0.5f);
}
- static bool intersect(const Extents2 &e1, const Extents2 &e2) {
+ static bool intersect(const Extents2 &e1, const Extents2 &e2)
+ {
return e1.min.x <= e2.max.x && e1.max.x >= e2.min.x && e1.min.y <= e2.max.y && e1.max.y >= e2.min.y;
}
};
// From Fast-BVH
-struct AABB {
- AABB() :
- min(FLT_MAX, FLT_MAX, FLT_MAX), max(-FLT_MAX, -FLT_MAX, -FLT_MAX) {}
- AABB(const Vector3 &_min, const Vector3 &_max) :
- min(_min), max(_max) {}
- AABB(const Vector3 &p, float radius = 0.0f) :
- min(p), max(p) {
- if (radius > 0.0f)
- expand(radius);
- }
-
- bool intersect(const AABB &other) const {
+struct AABB
+{
+ AABB() : min(FLT_MAX, FLT_MAX, FLT_MAX), max(-FLT_MAX, -FLT_MAX, -FLT_MAX) {}
+ AABB(const Vector3 &_min, const Vector3 &_max) : min(_min), max(_max) { }
+ AABB(const Vector3 &p, float radius = 0.0f) : min(p), max(p) { if (radius > 0.0f) expand(radius); }
+
+ bool intersect(const AABB &other) const
+ {
return min.x <= other.max.x && max.x >= other.min.x && min.y <= other.max.y && max.y >= other.min.y && min.z <= other.max.z && max.z >= other.min.z;
}
- void expandToInclude(const Vector3 &p) {
+ void expandToInclude(const Vector3 &p)
+ {
min = internal::min(min, p);
max = internal::max(max, p);
}
- void expandToInclude(const AABB &aabb) {
+ void expandToInclude(const AABB &aabb)
+ {
min = internal::min(min, aabb.min);
max = internal::max(max, aabb.max);
}
- void expand(float amount) {
+ void expand(float amount)
+ {
min -= Vector3(amount);
max += Vector3(amount);
}
- Vector3 centroid() const {
+ Vector3 centroid() const
+ {
return min + (max - min) * 0.5f;
}
- uint32_t maxDimension() const {
+ uint32_t maxDimension() const
+ {
const Vector3 extent = max - min;
uint32_t result = 0;
if (extent.y > extent.x) {
result = 1;
if (extent.z > extent.y)
result = 2;
- } else if (extent.z > extent.x)
+ }
+ else if(extent.z > extent.x)
result = 2;
return result;
}
@@ -871,9 +945,10 @@ struct AABB {
Vector3 min, max;
};
-struct ArrayBase {
- ArrayBase(uint32_t _elementSize, int memTag = MemTag::Default) :
- buffer(nullptr), elementSize(_elementSize), size(0), capacity(0) {
+struct ArrayBase
+{
+ ArrayBase(uint32_t _elementSize, int memTag = MemTag::Default) : buffer(nullptr), elementSize(_elementSize), size(0), capacity(0)
+ {
#if XA_DEBUG_HEAP
this->memTag = memTag;
#else
@@ -881,15 +956,18 @@ struct ArrayBase {
#endif
}
- ~ArrayBase() {
+ ~ArrayBase()
+ {
XA_FREE(buffer);
}
- XA_INLINE void clear() {
+ XA_INLINE void clear()
+ {
size = 0;
}
- void copyFrom(const uint8_t *data, uint32_t length) {
+ void copyFrom(const uint8_t *data, uint32_t length)
+ {
XA_DEBUG_ASSERT(data);
XA_DEBUG_ASSERT(length > 0);
resize(length, true);
@@ -897,7 +975,8 @@ struct ArrayBase {
memcpy(buffer, data, length * elementSize);
}
- void copyTo(ArrayBase &other) const {
+ void copyTo(ArrayBase &other) const
+ {
XA_DEBUG_ASSERT(elementSize == other.elementSize);
XA_DEBUG_ASSERT(size > 0);
other.resize(size, true);
@@ -905,7 +984,8 @@ struct ArrayBase {
memcpy(other.buffer, buffer, size * elementSize);
}
- void destroy() {
+ void destroy()
+ {
size = 0;
XA_FREE(buffer);
buffer = nullptr;
@@ -914,7 +994,8 @@ struct ArrayBase {
}
// Insert the given element at the given index shifting all the elements up.
- void insertAt(uint32_t index, const uint8_t *value) {
+ void insertAt(uint32_t index, const uint8_t *value)
+ {
XA_DEBUG_ASSERT(index >= 0 && index <= size);
XA_DEBUG_ASSERT(value);
resize(size + 1, false);
@@ -925,7 +1006,8 @@ struct ArrayBase {
memcpy(&buffer[index * elementSize], value, elementSize);
}
- void moveTo(ArrayBase &other) {
+ void moveTo(ArrayBase &other)
+ {
XA_DEBUG_ASSERT(elementSize == other.elementSize);
other.destroy();
other.buffer = buffer;
@@ -939,12 +1021,14 @@ struct ArrayBase {
elementSize = size = capacity = 0;
}
- void pop_back() {
+ void pop_back()
+ {
XA_DEBUG_ASSERT(size > 0);
resize(size - 1, false);
}
- void push_back(const uint8_t *value) {
+ void push_back(const uint8_t *value)
+ {
XA_DEBUG_ASSERT(value < buffer || value >= buffer + size);
XA_DEBUG_ASSERT(value);
resize(size + 1, false);
@@ -953,7 +1037,8 @@ struct ArrayBase {
memcpy(&buffer[(size - 1) * elementSize], value, elementSize);
}
- void push_back(const ArrayBase &other) {
+ void push_back(const ArrayBase &other)
+ {
XA_DEBUG_ASSERT(elementSize == other.elementSize);
if (other.size > 0) {
const uint32_t oldSize = size;
@@ -965,7 +1050,8 @@ struct ArrayBase {
}
// Remove the element at the given index. This is an expensive operation!
- void removeAt(uint32_t index) {
+ void removeAt(uint32_t index)
+ {
XA_DEBUG_ASSERT(index >= 0 && index < size);
XA_DEBUG_ASSERT(buffer);
if (buffer) {
@@ -977,7 +1063,8 @@ struct ArrayBase {
}
// Element at index is swapped with the last element, then the array length is decremented.
- void removeAtFast(uint32_t index) {
+ void removeAtFast(uint32_t index)
+ {
XA_DEBUG_ASSERT(index >= 0 && index < size);
XA_DEBUG_ASSERT(buffer);
if (buffer) {
@@ -988,12 +1075,14 @@ struct ArrayBase {
}
}
- void reserve(uint32_t desiredSize) {
+ void reserve(uint32_t desiredSize)
+ {
if (desiredSize > capacity)
setArrayCapacity(desiredSize);
}
- void resize(uint32_t newSize, bool exact) {
+ void resize(uint32_t newSize, bool exact)
+ {
size = newSize;
if (size > capacity) {
// First allocation is always exact. Otherwise, following allocations grow array to 150% of desired size.
@@ -1006,7 +1095,8 @@ struct ArrayBase {
}
}
- void setArrayCapacity(uint32_t newCapacity) {
+ void setArrayCapacity(uint32_t newCapacity)
+ {
XA_DEBUG_ASSERT(newCapacity >= size);
if (newCapacity == 0) {
// free the buffer.
@@ -1026,7 +1116,8 @@ struct ArrayBase {
}
#if XA_DEBUG_HEAP
- void setMemTag(int _memTag) {
+ void setMemTag(int _memTag)
+ {
this->memTag = _memTag;
}
#endif
@@ -1040,27 +1131,30 @@ struct ArrayBase {
#endif
};
-template <typename T>
-class Array {
+template<typename T>
+class Array
+{
public:
- Array(int memTag = MemTag::Default) :
- m_base(sizeof(T), memTag) {}
- Array(const Array &) = delete;
+ Array(int memTag = MemTag::Default) : m_base(sizeof(T), memTag) {}
+ Array(const Array&) = delete;
Array &operator=(const Array &) = delete;
- XA_INLINE const T &operator[](uint32_t index) const {
+ XA_INLINE const T &operator[](uint32_t index) const
+ {
XA_DEBUG_ASSERT(index < m_base.size);
XA_DEBUG_ASSERT(m_base.buffer);
return ((const T *)m_base.buffer)[index];
}
- XA_INLINE T &operator[](uint32_t index) {
+ XA_INLINE T &operator[](uint32_t index)
+ {
XA_DEBUG_ASSERT(index < m_base.size);
XA_DEBUG_ASSERT(m_base.buffer);
return ((T *)m_base.buffer)[index];
}
- XA_INLINE const T &back() const {
+ XA_INLINE const T &back() const
+ {
XA_DEBUG_ASSERT(!isEmpty());
return ((const T *)m_base.buffer)[m_base.size - 1];
}
@@ -1068,7 +1162,8 @@ public:
XA_INLINE T *begin() { return (T *)m_base.buffer; }
XA_INLINE void clear() { m_base.clear(); }
- bool contains(const T &value) const {
+ bool contains(const T &value) const
+ {
for (uint32_t i = 0; i < m_base.size; i++) {
if (((const T *)m_base.buffer)[i] == value)
return true;
@@ -1093,23 +1188,27 @@ public:
void reserve(uint32_t desiredSize) { m_base.reserve(desiredSize); }
void resize(uint32_t newSize) { m_base.resize(newSize, true); }
- void runCtors() {
+ void runCtors()
+ {
for (uint32_t i = 0; i < m_base.size; i++)
new (&((T *)m_base.buffer)[i]) T;
}
- void runDtors() {
+ void runDtors()
+ {
for (uint32_t i = 0; i < m_base.size; i++)
((T *)m_base.buffer)[i].~T();
}
- void fill(const T &value) {
+ void fill(const T &value)
+ {
auto buffer = (T *)m_base.buffer;
for (uint32_t i = 0; i < m_base.size; i++)
buffer[i] = value;
}
- void fillBytes(uint8_t value) {
+ void fillBytes(uint8_t value)
+ {
if (m_base.buffer && m_base.size > 0)
memset(m_base.buffer, (int)value, m_base.size * m_base.elementSize);
}
@@ -1120,7 +1219,8 @@ public:
XA_INLINE uint32_t size() const { return m_base.size; }
- XA_INLINE void zeroOutMemory() {
+ XA_INLINE void zeroOutMemory()
+ {
if (m_base.buffer && m_base.size > 0)
memset(m_base.buffer, 0, m_base.elementSize * m_base.size);
}
@@ -1129,57 +1229,37 @@ private:
ArrayBase m_base;
};
-template <typename T>
-struct ArrayView {
- ArrayView() :
- data(nullptr), length(0) {}
- ArrayView(Array<T> &a) :
- data(a.data()), length(a.size()) {}
- ArrayView(T *_data, uint32_t _length) :
- data(_data), length(_length) {}
- ArrayView &operator=(Array<T> &a) {
- data = a.data();
- length = a.size();
- return *this;
- }
- XA_INLINE const T &operator[](uint32_t index) const {
- XA_DEBUG_ASSERT(index < length);
- return data[index];
- }
- XA_INLINE T &operator[](uint32_t index) {
- XA_DEBUG_ASSERT(index < length);
- return data[index];
- }
+template<typename T>
+struct ArrayView
+{
+ ArrayView() : data(nullptr), length(0) {}
+ ArrayView(Array<T> &a) : data(a.data()), length(a.size()) {}
+ ArrayView(T *_data, uint32_t _length) : data(_data), length(_length) {}
+ ArrayView &operator=(Array<T> &a) { data = a.data(); length = a.size(); return *this; }
+ XA_INLINE const T &operator[](uint32_t index) const { XA_DEBUG_ASSERT(index < length); return data[index]; }
+ XA_INLINE T &operator[](uint32_t index) { XA_DEBUG_ASSERT(index < length); return data[index]; }
T *data;
uint32_t length;
};
-template <typename T>
-struct ConstArrayView {
- ConstArrayView() :
- data(nullptr), length(0) {}
- ConstArrayView(const Array<T> &a) :
- data(a.data()), length(a.size()) {}
- ConstArrayView(ArrayView<T> av) :
- data(av.data), length(av.length) {}
- ConstArrayView(const T *_data, uint32_t _length) :
- data(_data), length(_length) {}
- ConstArrayView &operator=(const Array<T> &a) {
- data = a.data();
- length = a.size();
- return *this;
- }
- XA_INLINE const T &operator[](uint32_t index) const {
- XA_DEBUG_ASSERT(index < length);
- return data[index];
- }
+template<typename T>
+struct ConstArrayView
+{
+ ConstArrayView() : data(nullptr), length(0) {}
+ ConstArrayView(const Array<T> &a) : data(a.data()), length(a.size()) {}
+ ConstArrayView(ArrayView<T> av) : data(av.data), length(av.length) {}
+ ConstArrayView(const T *_data, uint32_t _length) : data(_data), length(_length) {}
+ ConstArrayView &operator=(const Array<T> &a) { data = a.data(); length = a.size(); return *this; }
+ XA_INLINE const T &operator[](uint32_t index) const { XA_DEBUG_ASSERT(index < length); return data[index]; }
const T *data;
uint32_t length;
};
/// Basis class to compute tangent space basis, ortogonalizations and to transform vectors from one space to another.
-struct Basis {
- XA_NODISCARD static Vector3 computeTangent(const Vector3 &normal) {
+struct Basis
+{
+ XA_NODISCARD static Vector3 computeTangent(const Vector3 &normal)
+ {
XA_ASSERT(isNormalized(normal));
// Choose minimum axis.
Vector3 tangent;
@@ -1195,7 +1275,8 @@ struct Basis {
return tangent;
}
- XA_NODISCARD static Vector3 computeBitangent(const Vector3 &normal, const Vector3 &tangent) {
+ XA_NODISCARD static Vector3 computeBitangent(const Vector3 &normal, const Vector3 &tangent)
+ {
return cross(normal, tangent);
}
@@ -1205,36 +1286,42 @@ struct Basis {
};
// Simple bit array.
-class BitArray {
+class BitArray
+{
public:
- BitArray() :
- m_size(0) {}
+ BitArray() : m_size(0) {}
- BitArray(uint32_t sz) {
+ BitArray(uint32_t sz)
+ {
resize(sz);
}
- void resize(uint32_t new_size) {
+ void resize(uint32_t new_size)
+ {
m_size = new_size;
m_wordArray.resize((m_size + 31) >> 5);
}
- bool get(uint32_t index) const {
+ bool get(uint32_t index) const
+ {
XA_DEBUG_ASSERT(index < m_size);
return (m_wordArray[index >> 5] & (1 << (index & 31))) != 0;
}
- void set(uint32_t index) {
+ void set(uint32_t index)
+ {
XA_DEBUG_ASSERT(index < m_size);
m_wordArray[index >> 5] |= (1 << (index & 31));
}
- void unset(uint32_t index) {
+ void unset(uint32_t index)
+ {
XA_DEBUG_ASSERT(index < m_size);
m_wordArray[index >> 5] &= ~(1 << (index & 31));
}
- void zeroOutMemory() {
+ void zeroOutMemory()
+ {
m_wordArray.zeroOutMemory();
}
@@ -1243,13 +1330,13 @@ private:
Array<uint32_t> m_wordArray;
};
-class BitImage {
+class BitImage
+{
public:
- BitImage() :
- m_width(0), m_height(0), m_rowStride(0), m_data(MemTag::BitImage) {}
+ BitImage() : m_width(0), m_height(0), m_rowStride(0), m_data(MemTag::BitImage) {}
- BitImage(uint32_t w, uint32_t h) :
- m_width(w), m_height(h), m_data(MemTag::BitImage) {
+ BitImage(uint32_t w, uint32_t h) : m_width(w), m_height(h), m_data(MemTag::BitImage)
+ {
m_rowStride = (m_width + 63) >> 6;
m_data.resize(m_rowStride * m_height);
m_data.zeroOutMemory();
@@ -1260,14 +1347,16 @@ public:
uint32_t width() const { return m_width; }
uint32_t height() const { return m_height; }
- void copyTo(BitImage &other) {
+ void copyTo(BitImage &other)
+ {
other.m_width = m_width;
other.m_height = m_height;
other.m_rowStride = m_rowStride;
m_data.copyTo(other.m_data);
}
- void resize(uint32_t w, uint32_t h, bool discard) {
+ void resize(uint32_t w, uint32_t h, bool discard)
+ {
const uint32_t rowStride = (w + 63) >> 6;
if (discard) {
m_data.resize(rowStride * h);
@@ -1291,24 +1380,28 @@ public:
m_rowStride = rowStride;
}
- bool get(uint32_t x, uint32_t y) const {
+ bool get(uint32_t x, uint32_t y) const
+ {
XA_DEBUG_ASSERT(x < m_width && y < m_height);
const uint32_t index = (x >> 6) + y * m_rowStride;
return (m_data[index] & (UINT64_C(1) << (uint64_t(x) & UINT64_C(63)))) != 0;
}
- void set(uint32_t x, uint32_t y) {
+ void set(uint32_t x, uint32_t y)
+ {
XA_DEBUG_ASSERT(x < m_width && y < m_height);
const uint32_t index = (x >> 6) + y * m_rowStride;
m_data[index] |= UINT64_C(1) << (uint64_t(x) & UINT64_C(63));
XA_DEBUG_ASSERT(get(x, y));
}
- void zeroOutMemory() {
+ void zeroOutMemory()
+ {
m_data.zeroOutMemory();
}
- bool canBlit(const BitImage &image, uint32_t offsetX, uint32_t offsetY) const {
+ bool canBlit(const BitImage &image, uint32_t offsetX, uint32_t offsetY) const
+ {
for (uint32_t y = 0; y < image.m_height; y++) {
const uint32_t thisY = y + offsetY;
if (thisY >= m_height)
@@ -1332,7 +1425,8 @@ public:
return true;
}
- void dilate(uint32_t padding) {
+ void dilate(uint32_t padding)
+ {
BitImage tmp(m_width, m_height);
for (uint32_t p = 0; p < padding; p++) {
tmp.zeroOutMemory();
@@ -1342,21 +1436,15 @@ public:
if (!b) {
if (x > 0) {
b |= get(x - 1, y);
- if (y > 0)
- b |= get(x - 1, y - 1);
- if (y < m_height - 1)
- b |= get(x - 1, y + 1);
+ if (y > 0) b |= get(x - 1, y - 1);
+ if (y < m_height - 1) b |= get(x - 1, y + 1);
}
- if (y > 0)
- b |= get(x, y - 1);
- if (y < m_height - 1)
- b |= get(x, y + 1);
+ if (y > 0) b |= get(x, y - 1);
+ if (y < m_height - 1) b |= get(x, y + 1);
if (x < m_width - 1) {
b |= get(x + 1, y);
- if (y > 0)
- b |= get(x + 1, y - 1);
- if (y < m_height - 1)
- b |= get(x + 1, y + 1);
+ if (y > 0) b |= get(x + 1, y - 1);
+ if (y < m_height - 1) b |= get(x + 1, y + 1);
}
}
if (b)
@@ -1375,10 +1463,11 @@ private:
};
// From Fast-BVH
-class BVH {
+class BVH
+{
public:
- BVH(const Array<AABB> &objectAabbs, uint32_t leafSize = 4) :
- m_objectIds(MemTag::BVH), m_nodes(MemTag::BVH) {
+ BVH(const Array<AABB> &objectAabbs, uint32_t leafSize = 4) : m_objectIds(MemTag::BVH), m_nodes(MemTag::BVH)
+ {
m_objectAabbs = &objectAabbs;
if (m_objectAabbs->isEmpty())
return;
@@ -1398,7 +1487,7 @@ public:
Node node;
m_nodes.reserve(objectAabbs.size() * 2);
uint32_t nNodes = 0;
- while (stackptr > 0) {
+ while(stackptr > 0) {
// Pop the next item off of the stack
const BuildEntry &bnode = todo[--stackptr];
const uint32_t start = bnode.start;
@@ -1411,7 +1500,7 @@ public:
// Calculate the bounding box for this node
AABB bb(objectAabbs[m_objectIds[start]]);
AABB bc(objectAabbs[m_objectIds[start]].centroid());
- for (uint32_t p = start + 1; p < end; ++p) {
+ for(uint32_t p = start + 1; p < end; ++p) {
bb.expandToInclude(objectAabbs[m_objectIds[p]]);
bc.expandToInclude(objectAabbs[m_objectIds[p]].centroid());
}
@@ -1427,7 +1516,7 @@ public:
m_nodes[bnode.parent].rightOffset--;
// When this is the second touch, this is the right child.
// The right child sets up the offset for the flat tree.
- if (m_nodes[bnode.parent].rightOffset == kTouchedTwice)
+ if (m_nodes[bnode.parent].rightOffset == kTouchedTwice )
m_nodes[bnode.parent].rightOffset = nNodes - 1 - bnode.parent;
}
// If this is a leaf, no need to subdivide.
@@ -1462,20 +1551,21 @@ public:
}
}
- void query(const AABB &queryAabb, Array<uint32_t> &result) const {
+ void query(const AABB &queryAabb, Array<uint32_t> &result) const
+ {
result.clear();
// Working set
uint32_t todo[64];
int32_t stackptr = 0;
// "Push" on the root node to the working set
todo[stackptr] = 0;
- while (stackptr >= 0) {
+ while(stackptr >= 0) {
// Pop off the next node to work on.
const int ni = todo[stackptr--];
const Node &node = m_nodes[ni];
// Is leaf -> Intersect
if (node.rightOffset == 0) {
- for (uint32_t o = 0; o < node.nPrims; ++o) {
+ for(uint32_t o = 0; o < node.nPrims; ++o) {
const uint32_t obj = node.start + o;
if (queryAabb.intersect((*m_objectAabbs)[m_objectIds[obj]]))
result.push_back(m_objectIds[obj]);
@@ -1492,12 +1582,14 @@ public:
}
private:
- struct BuildEntry {
+ struct BuildEntry
+ {
uint32_t parent; // If non-zero then this is the index of the parent. (used in offsets)
uint32_t start, end; // The range of objects in the object list covered by this node.
};
- struct Node {
+ struct Node
+ {
AABB aabb;
uint32_t start, nPrims, rightOffset;
};
@@ -1507,8 +1599,10 @@ private:
Array<Node> m_nodes;
};
-struct Fit {
- static bool computeBasis(ConstArrayView<Vector3> points, Basis *basis) {
+struct Fit
+{
+ static bool computeBasis(ConstArrayView<Vector3> points, Basis *basis)
+ {
if (computeLeastSquaresNormal(points, &basis->normal)) {
basis->tangent = Basis::computeTangent(basis->normal);
basis->bitangent = Basis::computeBitangent(basis->normal, basis->tangent);
@@ -1522,7 +1616,8 @@ private:
// Fast, and accurate to within a few degrees.
// Returns None if the points do not span a plane.
// https://www.ilikebigbits.com/2015_03_04_plane_from_points.html
- static bool computeLeastSquaresNormal(ConstArrayView<Vector3> points, Vector3 *normal) {
+ static bool computeLeastSquaresNormal(ConstArrayView<Vector3> points, Vector3 *normal)
+ {
XA_DEBUG_ASSERT(points.length >= 3);
if (points.length == 3) {
*normal = normalize(cross(points[2] - points[0], points[1] - points[0]));
@@ -1587,7 +1682,7 @@ private:
// Pick path with best conditioning:
Vector3 dir(0.0f);
if (det_max == det_x)
- dir = Vector3(det_x, xz * yz - xy * zz, xy * yz - xz * yy);
+ dir = Vector3(det_x,xz * yz - xy * zz,xy * yz - xz * yy);
else if (det_max == det_y)
dir = Vector3(xz * yz - xy * zz, det_y, xy * xz - yz * xx);
else if (det_max == det_z)
@@ -1600,7 +1695,8 @@ private:
return isNormalized(*normal);
}
- static bool computeEigen(ConstArrayView<Vector3> points, Basis *basis) {
+ static bool computeEigen(ConstArrayView<Vector3> points, Basis *basis)
+ {
float matrix[6];
computeCovariance(points, matrix);
if (matrix[0] == 0 && matrix[3] == 0 && matrix[5] == 0)
@@ -1615,7 +1711,8 @@ private:
return true;
}
- static Vector3 computeCentroid(ConstArrayView<Vector3> points) {
+ static Vector3 computeCentroid(ConstArrayView<Vector3> points)
+ {
Vector3 centroid(0.0f);
for (uint32_t i = 0; i < points.length; i++)
centroid += points[i];
@@ -1623,7 +1720,8 @@ private:
return centroid;
}
- static Vector3 computeCovariance(ConstArrayView<Vector3> points, float *covariance) {
+ static Vector3 computeCovariance(ConstArrayView<Vector3> points, float * covariance)
+ {
// compute the centroid
Vector3 centroid = computeCentroid(points);
// compute covariance matrix
@@ -1645,7 +1743,8 @@ private:
// Tridiagonal solver from Charles Bloom.
// Householder transforms followed by QL decomposition.
// Seems to be based on the code from Numerical Recipes in C.
- static bool eigenSolveSymmetric3(const float matrix[6], float eigenValues[3], Vector3 eigenVectors[3]) {
+ static bool eigenSolveSymmetric3(const float matrix[6], float eigenValues[3], Vector3 eigenVectors[3])
+ {
XA_DEBUG_ASSERT(matrix != nullptr && eigenValues != nullptr && eigenVectors != nullptr);
float subd[3];
float diag[3];
@@ -1670,7 +1769,7 @@ private:
// eigenvectors are the columns; make them the rows :
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
- (&eigenVectors[j].x)[i] = (float)work[i][j];
+ (&eigenVectors[j].x)[i] = (float) work[i][j];
}
}
// shuffle to sort by singular value :
@@ -1692,7 +1791,8 @@ private:
}
private:
- static void EigenSolver3_Tridiagonal(float mat[3][3], float *diag, float *subd) {
+ static void EigenSolver3_Tridiagonal(float mat[3][3], float *diag, float *subd)
+ {
// Householder reduction T = Q^t M Q
// Input:
// mat, symmetric 3x3 matrix M
@@ -1744,7 +1844,8 @@ private:
}
}
- static bool EigenSolver3_QLAlgorithm(float mat[3][3], float *diag, float *subd) {
+ static bool EigenSolver3_QLAlgorithm(float mat[3][3], float *diag, float *subd)
+ {
// QL iteration with implicit shifting to reduce matrix from tridiagonal
// to diagonal
const int maxiter = 32;
@@ -1754,21 +1855,21 @@ private:
int m;
for (m = ell; m <= 1; m++) {
float dd = fabsf(diag[m]) + fabsf(diag[m + 1]);
- if (fabsf(subd[m]) + dd == dd)
+ if ( fabsf(subd[m]) + dd == dd )
break;
}
- if (m == ell)
+ if ( m == ell )
break;
float g = (diag[ell + 1] - diag[ell]) / (2 * subd[ell]);
float r = sqrtf(g * g + 1);
- if (g < 0)
+ if ( g < 0 )
g = diag[m] - diag[ell] + subd[ell] / (g - r);
else
g = diag[m] - diag[ell] + subd[ell] / (g + r);
float s = 1, c = 1, p = 0;
for (int i = m - 1; i >= ell; i--) {
float f = s * subd[i], b = c * subd[i];
- if (fabsf(f) >= fabsf(g)) {
+ if ( fabsf(f) >= fabsf(g) ) {
c = g / f;
r = sqrtf(c * c + 1);
subd[i + 1] = f * r;
@@ -1794,7 +1895,7 @@ private:
subd[ell] = g;
subd[m] = 0;
}
- if (iter == maxiter)
+ if ( iter == maxiter )
// should not get here under normal circumstances
return false;
}
@@ -1802,48 +1903,56 @@ private:
}
};
-static uint32_t sdbmHash(const void *data_in, uint32_t size, uint32_t h = 5381) {
- const uint8_t *data = (const uint8_t *)data_in;
+static uint32_t sdbmHash(const void *data_in, uint32_t size, uint32_t h = 5381)
+{
+ const uint8_t *data = (const uint8_t *) data_in;
uint32_t i = 0;
while (i < size) {
- h = (h << 16) + (h << 6) - h + (uint32_t)data[i++];
+ h = (h << 16) + (h << 6) - h + (uint32_t ) data[i++];
}
return h;
}
template <typename T>
-static uint32_t hash(const T &t, uint32_t h = 5381) {
+static uint32_t hash(const T &t, uint32_t h = 5381)
+{
return sdbmHash(&t, sizeof(T), h);
}
template <typename Key>
-struct Hash {
+struct Hash
+{
uint32_t operator()(const Key &k) const { return hash(k); }
};
template <typename Key>
-struct PassthroughHash {
+struct PassthroughHash
+{
uint32_t operator()(const Key &k) const { return (uint32_t)k; }
};
template <typename Key>
-struct Equal {
+struct Equal
+{
bool operator()(const Key &k0, const Key &k1) const { return k0 == k1; }
};
-template <typename Key, typename H = Hash<Key>, typename E = Equal<Key>>
-class HashMap {
+template<typename Key, typename H = Hash<Key>, typename E = Equal<Key> >
+class HashMap
+{
public:
- HashMap(int memTag, uint32_t size) :
- m_memTag(memTag), m_size(size), m_numSlots(0), m_slots(nullptr), m_keys(memTag), m_next(memTag) {
+ HashMap(int memTag, uint32_t size) : m_memTag(memTag), m_size(size), m_numSlots(0), m_slots(nullptr), m_keys(memTag), m_next(memTag)
+ {
}
- ~HashMap() {
+ ~HashMap()
+ {
if (m_slots)
XA_FREE(m_slots);
}
- void destroy() {
+ void destroy()
+ {
if (m_slots) {
XA_FREE(m_slots);
m_slots = nullptr;
@@ -1852,7 +1961,8 @@ public:
m_next.destroy();
}
- uint32_t add(const Key &key) {
+ uint32_t add(const Key &key)
+ {
if (!m_slots)
alloc();
const uint32_t hash = computeHash(key);
@@ -1862,18 +1972,21 @@ public:
return m_keys.size() - 1;
}
- uint32_t get(const Key &key) const {
+ uint32_t get(const Key &key) const
+ {
if (!m_slots)
return UINT32_MAX;
return find(key, m_slots[computeHash(key)]);
}
- uint32_t getNext(const Key &key, uint32_t current) const {
+ uint32_t getNext(const Key &key, uint32_t current) const
+ {
return find(key, m_next[current]);
}
private:
- void alloc() {
+ void alloc()
+ {
XA_DEBUG_ASSERT(m_size > 0);
m_numSlots = nextPowerOfTwo(m_size);
auto minNumSlots = uint32_t(m_size * 1.3);
@@ -1886,12 +1999,14 @@ private:
m_next.reserve(m_size);
}
- uint32_t computeHash(const Key &key) const {
+ uint32_t computeHash(const Key &key) const
+ {
H hash;
return hash(key) & (m_numSlots - 1);
}
- uint32_t find(const Key &key, uint32_t current) const {
+ uint32_t find(const Key &key, uint32_t current) const
+ {
E equal;
while (current != UINT32_MAX) {
if (equal(m_keys[current], key))
@@ -1909,8 +2024,9 @@ private:
Array<uint32_t> m_next;
};
-template <typename T>
-static void insertionSort(T *data, uint32_t length) {
+template<typename T>
+static void insertionSort(T *data, uint32_t length)
+{
for (int32_t i = 1; i < (int32_t)length; i++) {
T x = data[i];
int32_t j = i - 1;
@@ -1922,18 +2038,21 @@ static void insertionSort(T *data, uint32_t length) {
}
}
-class KISSRng {
+class KISSRng
+{
public:
KISSRng() { reset(); }
- void reset() {
+ void reset()
+ {
x = 123456789;
y = 362436000;
z = 521288629;
c = 7654321;
}
- uint32_t getRange(uint32_t range) {
+ uint32_t getRange(uint32_t range)
+ {
if (range == 0)
return 0;
x = 69069 * x + 12345;
@@ -1952,9 +2071,11 @@ private:
// Based on Pierre Terdiman's and Michael Herf's source code.
// http://www.codercorner.com/RadixSortRevisited.htm
// http://www.stereopsis.com/radix.html
-class RadixSort {
+class RadixSort
+{
public:
- void sort(ConstArrayView<float> input) {
+ void sort(ConstArrayView<float> input)
+ {
if (input.length == 0) {
m_buffer1.clear();
m_buffer2.clear();
@@ -1983,7 +2104,8 @@ public:
}
// Access to results. m_ranks is a list of indices in sorted order, i.e. in the order you may further process your data
- const uint32_t *ranks() const {
+ const uint32_t *ranks() const
+ {
XA_DEBUG_ASSERT(m_validRanks);
return m_ranks;
}
@@ -1993,17 +2115,20 @@ private:
Array<uint32_t> m_buffer1, m_buffer2;
bool m_validRanks = false;
- void floatFlip(uint32_t &f) {
+ void floatFlip(uint32_t &f)
+ {
int32_t mask = (int32_t(f) >> 31) | 0x80000000; // Warren Hunt, Manchor Ko.
f ^= mask;
}
- void ifloatFlip(uint32_t &f) {
+ void ifloatFlip(uint32_t &f)
+ {
uint32_t mask = ((f >> 31) - 1) | 0x80000000; // Michael Herf.
f ^= mask;
}
- void createHistograms(ConstArrayView<uint32_t> input, uint32_t *histogram) {
+ void createHistograms(ConstArrayView<uint32_t> input, uint32_t *histogram)
+ {
const uint32_t bucketCount = sizeof(uint32_t);
// Init bucket pointers.
uint32_t *h[bucketCount];
@@ -2014,14 +2139,15 @@ private:
memset(histogram, 0, 256 * bucketCount * sizeof(uint32_t));
// @@ Add support for signed integers.
// Build histograms.
- const uint8_t *p = (const uint8_t *)input.data; // @@ Does this break aliasing rules?
+ const uint8_t *p = (const uint8_t *)input.data; // @@ Does this break aliasing rules?
const uint8_t *pe = p + input.length * sizeof(uint32_t);
while (p != pe) {
h[0][*p++]++, h[1][*p++]++, h[2][*p++]++, h[3][*p++]++;
}
}
- void insertionSort(ConstArrayView<float> input) {
+ void insertionSort(ConstArrayView<float> input)
+ {
if (!m_validRanks) {
m_ranks[0] = 0;
for (uint32_t i = 1; i != input.length; ++i) {
@@ -2051,7 +2177,8 @@ private:
}
}
- void radixSort(ConstArrayView<uint32_t> input) {
+ void radixSort(ConstArrayView<uint32_t> input)
+ {
const uint32_t P = sizeof(uint32_t); // pass count
// Allocate histograms & offsets on the stack
uint32_t histogram[256 * P];
@@ -2069,8 +2196,7 @@ private:
}
// Create offsets
link[0] = m_ranks2;
- for (uint32_t i = 1; i < 256; i++)
- link[i] = link[i - 1] + h[i - 1];
+ for (uint32_t i = 1; i < 256; i++) link[i] = link[i - 1] + h[i - 1];
// Perform Radix Sort
if (!m_validRanks) {
for (uint32_t i = 0; i < input.length; i++) {
@@ -2096,21 +2222,25 @@ private:
};
// Wrapping this in a class allows temporary arrays to be re-used.
-class BoundingBox2D {
+class BoundingBox2D
+{
public:
Vector2 majorAxis, minorAxis, minCorner, maxCorner;
- void clear() {
+ void clear()
+ {
m_boundaryVertices.clear();
}
- void appendBoundaryVertex(Vector2 v) {
+ void appendBoundaryVertex(Vector2 v)
+ {
m_boundaryVertices.push_back(v);
}
// This should compute convex hull and use rotating calipers to find the best box. Currently it uses a brute force method.
// If vertices are empty, the boundary vertices are used.
- void compute(ConstArrayView<Vector2> vertices = ConstArrayView<Vector2>()) {
+ void compute(ConstArrayView<Vector2> vertices = ConstArrayView<Vector2>())
+ {
XA_DEBUG_ASSERT(!m_boundaryVertices.isEmpty());
if (vertices.length == 0)
vertices = m_boundaryVertices;
@@ -2157,7 +2287,8 @@ public:
private:
// Compute the convex hull using Graham Scan.
- void convexHull(ConstArrayView<Vector2> input, Array<Vector2> &output, float epsilon) {
+ void convexHull(ConstArrayView<Vector2> input, Array<Vector2> &output, float epsilon)
+ {
m_coords.resize(input.length);
for (uint32_t i = 0; i < input.length; i++)
m_coords[i] = input[i].x;
@@ -2186,7 +2317,7 @@ private:
XA_DEBUG_ASSERT(m_top.size() >= 2);
output.push_back(m_top[0]);
output.push_back(m_top[1]);
- for (uint32_t i = 2; i < m_top.size();) {
+ for (uint32_t i = 2; i < m_top.size(); ) {
Vector2 a = output[output.size() - 2];
Vector2 b = output[output.size() - 1];
Vector2 c = m_top[i];
@@ -2202,7 +2333,7 @@ private:
XA_DEBUG_ASSERT(m_bottom.size() >= 2);
output.push_back(m_bottom[1]);
// Filter bottom list.
- for (uint32_t i = 2; i < m_bottom.size();) {
+ for (uint32_t i = 2; i < m_bottom.size(); ) {
Vector2 a = output[output.size() - 2];
Vector2 b = output[output.size() - 1];
Vector2 c = m_bottom[i];
@@ -2225,45 +2356,45 @@ private:
RadixSort m_radix;
};
-struct EdgeKey {
- EdgeKey(const EdgeKey &k) :
- v0(k.v0), v1(k.v1) {}
- EdgeKey(uint32_t _v0, uint32_t _v1) :
- v0(_v0), v1(_v1) {}
+struct EdgeKey
+{
+ EdgeKey(const EdgeKey &k) : v0(k.v0), v1(k.v1) {}
+ EdgeKey(uint32_t _v0, uint32_t _v1) : v0(_v0), v1(_v1) {}
bool operator==(const EdgeKey &k) const { return v0 == k.v0 && v1 == k.v1; }
uint32_t v0;
uint32_t v1;
};
-struct EdgeHash {
+struct EdgeHash
+{
uint32_t operator()(const EdgeKey &k) const { return k.v0 * 32768u + k.v1; }
};
-static uint32_t meshEdgeFace(uint32_t edge) {
- return edge / 3;
-}
-static uint32_t meshEdgeIndex0(uint32_t edge) {
- return edge;
-}
+static uint32_t meshEdgeFace(uint32_t edge) { return edge / 3; }
+static uint32_t meshEdgeIndex0(uint32_t edge) { return edge; }
-static uint32_t meshEdgeIndex1(uint32_t edge) {
+static uint32_t meshEdgeIndex1(uint32_t edge)
+{
const uint32_t faceFirstEdge = edge / 3 * 3;
return faceFirstEdge + (edge - faceFirstEdge + 1) % 3;
}
-struct MeshFlags {
- enum {
- HasIgnoredFaces = 1 << 0,
- HasNormals = 1 << 1,
- HasMaterials = 1 << 2
+struct MeshFlags
+{
+ enum
+ {
+ HasIgnoredFaces = 1<<0,
+ HasNormals = 1<<1,
+ HasMaterials = 1<<2
};
};
-class Mesh {
+class Mesh
+{
public:
- Mesh(float epsilon, uint32_t approxVertexCount, uint32_t approxFaceCount, uint32_t flags = 0, uint32_t id = UINT32_MAX) :
- m_epsilon(epsilon), m_flags(flags), m_id(id), m_faceIgnore(MemTag::Mesh), m_faceMaterials(MemTag::Mesh), m_indices(MemTag::MeshIndices), m_positions(MemTag::MeshPositions), m_normals(MemTag::MeshNormals), m_texcoords(MemTag::MeshTexcoords), m_nextColocalVertex(MemTag::MeshColocals), m_firstColocalVertex(MemTag::MeshColocals), m_boundaryEdges(MemTag::MeshBoundaries), m_oppositeEdges(MemTag::MeshBoundaries), m_edgeMap(MemTag::MeshEdgeMap, approxFaceCount * 3) {
+ Mesh(float epsilon, uint32_t approxVertexCount, uint32_t approxFaceCount, uint32_t flags = 0, uint32_t id = UINT32_MAX) : m_epsilon(epsilon), m_flags(flags), m_id(id), m_faceIgnore(MemTag::Mesh), m_faceMaterials(MemTag::Mesh), m_indices(MemTag::MeshIndices), m_positions(MemTag::MeshPositions), m_normals(MemTag::MeshNormals), m_texcoords(MemTag::MeshTexcoords), m_nextColocalVertex(MemTag::MeshColocals), m_firstColocalVertex(MemTag::MeshColocals), m_boundaryEdges(MemTag::MeshBoundaries), m_oppositeEdges(MemTag::MeshBoundaries), m_edgeMap(MemTag::MeshEdgeMap, approxFaceCount * 3)
+ {
m_indices.reserve(approxFaceCount * 3);
m_positions.reserve(approxVertexCount);
m_texcoords.reserve(approxVertexCount);
@@ -2278,7 +2409,8 @@ public:
uint32_t flags() const { return m_flags; }
uint32_t id() const { return m_id; }
- void addVertex(const Vector3 &pos, const Vector3 &normal = Vector3(0.0f), const Vector2 &texcoord = Vector2(0.0f)) {
+ void addVertex(const Vector3 &pos, const Vector3 &normal = Vector3(0.0f), const Vector2 &texcoord = Vector2(0.0f))
+ {
XA_DEBUG_ASSERT(isFinite(pos));
m_positions.push_back(pos);
if (m_flags & MeshFlags::HasNormals)
@@ -2286,7 +2418,8 @@ public:
m_texcoords.push_back(texcoord);
}
- void addFace(const uint32_t *indices, bool ignore = false, uint32_t material = UINT32_MAX) {
+ void addFace(const uint32_t *indices, bool ignore = false, uint32_t material = UINT32_MAX)
+ {
if (m_flags & MeshFlags::HasIgnoredFaces)
m_faceIgnore.push_back(ignore);
if (m_flags & MeshFlags::HasMaterials)
@@ -2301,7 +2434,8 @@ public:
}
}
- void createColocalsBVH() {
+ void createColocalsBVH()
+ {
const uint32_t vertexCount = m_positions.size();
Array<AABB> aabbs(MemTag::BVH);
aabbs.resize(vertexCount);
@@ -2342,7 +2476,8 @@ public:
}
}
- void createColocalsHash() {
+ void createColocalsHash()
+ {
const uint32_t vertexCount = m_positions.size();
HashMap<Vector3> positionToVertexMap(MemTag::Default, vertexCount);
for (uint32_t i = 0; i < vertexCount; i++)
@@ -2380,14 +2515,16 @@ public:
}
}
- void createColocals() {
+ void createColocals()
+ {
if (m_epsilon <= FLT_EPSILON)
createColocalsHash();
else
createColocalsBVH();
}
- void createBoundaries() {
+ void createBoundaries()
+ {
const uint32_t edgeCount = m_indices.size();
const uint32_t vertexCount = m_positions.size();
m_oppositeEdges.resize(edgeCount);
@@ -2418,7 +2555,8 @@ public:
}
/// Find edge, test all colocals.
- uint32_t findEdge(uint32_t vertex0, uint32_t vertex1) const {
+ uint32_t findEdge(uint32_t vertex0, uint32_t vertex1) const
+ {
// Try to find exact vertex match first.
{
EdgeKey key(vertex0, vertex1);
@@ -2459,12 +2597,14 @@ public:
// Edge map can be destroyed when no longer used to reduce memory usage. It's used by:
// * Mesh::createBoundaries()
// * Mesh::edgeMap() (used by MeshFaceGroups)
- void destroyEdgeMap() {
+ void destroyEdgeMap()
+ {
m_edgeMap.destroy();
}
#if XA_DEBUG_EXPORT_OBJ
- void writeObjVertices(FILE *file) const {
+ void writeObjVertices(FILE *file) const
+ {
for (uint32_t i = 0; i < m_positions.size(); i++)
fprintf(file, "v %g %g %g\n", m_positions[i].x, m_positions[i].y, m_positions[i].z);
if (m_flags & MeshFlags::HasNormals) {
@@ -2475,7 +2615,8 @@ public:
fprintf(file, "vt %g %g\n", m_texcoords[i].x, m_texcoords[i].y);
}
- void writeObjFace(FILE *file, uint32_t face, uint32_t offset = 0) const {
+ void writeObjFace(FILE *file, uint32_t face, uint32_t offset = 0) const
+ {
fprintf(file, "f ");
for (uint32_t j = 0; j < 3; j++) {
const uint32_t index = m_indices[face * 3 + j] + 1 + offset; // 1-indexed
@@ -2483,7 +2624,8 @@ public:
}
}
- void writeObjBoundaryEges(FILE *file) const {
+ void writeObjBoundaryEges(FILE *file) const
+ {
if (m_oppositeEdges.isEmpty())
return; // Boundaries haven't been created.
fprintf(file, "o boundary_edges\n");
@@ -2494,7 +2636,8 @@ public:
}
}
- void writeObjFile(const char *filename) const {
+ void writeObjFile(const char *filename) const
+ {
FILE *file;
XA_FOPEN(file, filename, "w");
if (!file)
@@ -2509,7 +2652,8 @@ public:
}
#endif
- float computeSurfaceArea() const {
+ float computeSurfaceArea() const
+ {
float area = 0;
for (uint32_t f = 0; f < faceCount(); f++)
area += computeFaceArea(f);
@@ -2518,21 +2662,24 @@ public:
}
// Returned value is always positive, even if some triangles are flipped.
- float computeParametricArea() const {
+ float computeParametricArea() const
+ {
float area = 0;
for (uint32_t f = 0; f < faceCount(); f++)
area += fabsf(computeFaceParametricArea(f)); // May be negative, depends on texcoord winding.
return area;
}
- float computeFaceArea(uint32_t face) const {
+ float computeFaceArea(uint32_t face) const
+ {
const Vector3 &p0 = m_positions[m_indices[face * 3 + 0]];
const Vector3 &p1 = m_positions[m_indices[face * 3 + 1]];
const Vector3 &p2 = m_positions[m_indices[face * 3 + 2]];
return length(cross(p1 - p0, p2 - p0)) * 0.5f;
}
- Vector3 computeFaceCentroid(uint32_t face) const {
+ Vector3 computeFaceCentroid(uint32_t face) const
+ {
Vector3 sum(0.0f);
for (uint32_t i = 0; i < 3; i++)
sum += m_positions[m_indices[face * 3 + i]];
@@ -2541,7 +2688,8 @@ public:
// Average of the edge midpoints weighted by the edge length.
// I want a point inside the triangle, but closer to the cirumcenter.
- Vector3 computeFaceCenter(uint32_t face) const {
+ Vector3 computeFaceCenter(uint32_t face) const
+ {
const Vector3 &p0 = m_positions[m_indices[face * 3 + 0]];
const Vector3 &p1 = m_positions[m_indices[face * 3 + 1]];
const Vector3 &p2 = m_positions[m_indices[face * 3 + 2]];
@@ -2554,7 +2702,8 @@ public:
return m0 + m1 + m2;
}
- Vector3 computeFaceNormal(uint32_t face) const {
+ Vector3 computeFaceNormal(uint32_t face) const
+ {
const Vector3 &p0 = m_positions[m_indices[face * 3 + 0]];
const Vector3 &p1 = m_positions[m_indices[face * 3 + 1]];
const Vector3 &p2 = m_positions[m_indices[face * 3 + 2]];
@@ -2564,7 +2713,8 @@ public:
return normalizeSafe(normalAreaScaled, Vector3(0, 0, 1));
}
- float computeFaceParametricArea(uint32_t face) const {
+ float computeFaceParametricArea(uint32_t face) const
+ {
const Vector2 &t0 = m_texcoords[m_indices[face * 3 + 0]];
const Vector2 &t1 = m_texcoords[m_indices[face * 3 + 1]];
const Vector2 &t2 = m_texcoords[m_indices[face * 3 + 2]];
@@ -2572,7 +2722,8 @@ public:
}
// @@ This is not exactly accurate, we should compare the texture coordinates...
- bool isSeam(uint32_t edge) const {
+ bool isSeam(uint32_t edge) const
+ {
const uint32_t oppositeEdge = m_oppositeEdges[edge];
if (oppositeEdge == UINT32_MAX)
return false; // boundary edge
@@ -2583,7 +2734,8 @@ public:
return m_indices[e0] != m_indices[oe1] || m_indices[e1] != m_indices[oe0];
}
- bool isTextureSeam(uint32_t edge) const {
+ bool isTextureSeam(uint32_t edge) const
+ {
const uint32_t oppositeEdge = m_oppositeEdges[edge];
if (oppositeEdge == UINT32_MAX)
return false; // boundary edge
@@ -2594,7 +2746,8 @@ public:
return m_texcoords[m_indices[e0]] != m_texcoords[m_indices[oe1]] || m_texcoords[m_indices[e1]] != m_texcoords[m_indices[oe0]];
}
- uint32_t firstColocalVertex(uint32_t vertex) const {
+ uint32_t firstColocalVertex(uint32_t vertex) const
+ {
XA_DEBUG_ASSERT(m_firstColocalVertex.size() == m_positions.size());
return m_firstColocalVertex[vertex];
}
@@ -2609,10 +2762,7 @@ public:
XA_INLINE uint32_t vertexAt(uint32_t i) const { return m_indices[i]; }
XA_INLINE const Vector3 &position(uint32_t vertex) const { return m_positions[vertex]; }
XA_INLINE ConstArrayView<Vector3> positions() const { return m_positions; }
- XA_INLINE const Vector3 &normal(uint32_t vertex) const {
- XA_DEBUG_ASSERT(m_flags & MeshFlags::HasNormals);
- return m_normals[vertex];
- }
+ XA_INLINE const Vector3 &normal(uint32_t vertex) const { XA_DEBUG_ASSERT(m_flags & MeshFlags::HasNormals); return m_normals[vertex]; }
XA_INLINE const Vector2 &texcoord(uint32_t vertex) const { return m_texcoords[vertex]; }
XA_INLINE Vector2 &texcoord(uint32_t vertex) { return m_texcoords[vertex]; }
XA_INLINE const ConstArrayView<Vector2> texcoords() const { return m_texcoords; }
@@ -2625,6 +2775,7 @@ public:
XA_INLINE const HashMap<EdgeKey, EdgeHash> &edgeMap() const { return m_edgeMap; }
private:
+
float m_epsilon;
uint32_t m_flags;
uint32_t m_id;
@@ -2647,21 +2798,24 @@ private:
HashMap<EdgeKey, EdgeHash> m_edgeMap;
public:
- class FaceEdgeIterator {
+ class FaceEdgeIterator
+ {
public:
- FaceEdgeIterator(const Mesh *mesh, uint32_t face) :
- m_mesh(mesh), m_face(face), m_relativeEdge(0) {
+ FaceEdgeIterator (const Mesh *mesh, uint32_t face) : m_mesh(mesh), m_face(face), m_relativeEdge(0)
+ {
m_edge = m_face * 3;
}
- void advance() {
+ void advance()
+ {
if (m_relativeEdge < 3) {
m_edge++;
m_relativeEdge++;
}
}
- bool isDone() const {
+ bool isDone() const
+ {
return m_relativeEdge == 3;
}
@@ -2673,7 +2827,8 @@ public:
uint32_t face() const { return m_face; }
uint32_t oppositeEdge() const { return m_mesh->m_oppositeEdges[m_edge]; }
- uint32_t oppositeFace() const {
+ uint32_t oppositeFace() const
+ {
const uint32_t oedge = m_mesh->m_oppositeEdges[m_edge];
if (oedge == UINT32_MAX)
return UINT32_MAX;
@@ -2697,18 +2852,19 @@ public:
};
};
-struct MeshFaceGroups {
+struct MeshFaceGroups
+{
typedef uint32_t Handle;
static constexpr Handle kInvalid = UINT32_MAX;
- MeshFaceGroups(const Mesh *mesh) :
- m_mesh(mesh), m_groups(MemTag::Mesh), m_firstFace(MemTag::Mesh), m_nextFace(MemTag::Mesh), m_faceCount(MemTag::Mesh) {}
+ MeshFaceGroups(const Mesh *mesh) : m_mesh(mesh), m_groups(MemTag::Mesh), m_firstFace(MemTag::Mesh), m_nextFace(MemTag::Mesh), m_faceCount(MemTag::Mesh) {}
XA_INLINE Handle groupAt(uint32_t face) const { return m_groups[face]; }
XA_INLINE uint32_t groupCount() const { return m_faceCount.size(); }
XA_INLINE uint32_t nextFace(uint32_t face) const { return m_nextFace[face]; }
XA_INLINE uint32_t faceCount(uint32_t group) const { return m_faceCount[group]; }
- void compute() {
+ void compute()
+ {
m_groups.resize(m_mesh->faceCount());
m_groups.fillBytes(0xff); // Set all faces to kInvalid
uint32_t firstUnassignedFace = 0;
@@ -2767,23 +2923,27 @@ struct MeshFaceGroups {
}
}
- class Iterator {
+ class Iterator
+ {
public:
- Iterator(const MeshFaceGroups *meshFaceGroups, Handle group) :
- m_meshFaceGroups(meshFaceGroups) {
+ Iterator(const MeshFaceGroups *meshFaceGroups, Handle group) : m_meshFaceGroups(meshFaceGroups)
+ {
XA_DEBUG_ASSERT(group != kInvalid);
m_current = m_meshFaceGroups->m_firstFace[group];
}
- void advance() {
+ void advance()
+ {
m_current = m_meshFaceGroups->m_nextFace[m_current];
}
- bool isDone() const {
+ bool isDone() const
+ {
return m_current == UINT32_MAX;
}
- uint32_t face() const {
+ uint32_t face() const
+ {
return m_current;
}
@@ -2803,7 +2963,8 @@ private:
constexpr MeshFaceGroups::Handle MeshFaceGroups::kInvalid;
#if XA_CHECK_T_JUNCTIONS
-static bool lineIntersectsPoint(const Vector3 &point, const Vector3 &lineStart, const Vector3 &lineEnd, float *t, float epsilon) {
+static bool lineIntersectsPoint(const Vector3 &point, const Vector3 &lineStart, const Vector3 &lineEnd, float *t, float epsilon)
+{
float tt;
if (!t)
t = &tt;
@@ -2821,7 +2982,8 @@ static bool lineIntersectsPoint(const Vector3 &point, const Vector3 &lineStart,
}
// Returns the number of T-junctions found.
-static int meshCheckTJunctions(const Mesh &inputMesh) {
+static int meshCheckTJunctions(const Mesh &inputMesh)
+{
int count = 0;
const uint32_t vertexCount = inputMesh.vertexCount();
const uint32_t edgeCount = inputMesh.edgeCount();
@@ -2845,10 +3007,12 @@ static int meshCheckTJunctions(const Mesh &inputMesh) {
#endif
// References invalid faces and vertices in a mesh.
-struct InvalidMeshGeometry {
+struct InvalidMeshGeometry
+{
// If meshFaceGroups is not null, invalid faces have the face group MeshFaceGroups::kInvalid.
// If meshFaceGroups is null, invalid faces are Mesh::isFaceIgnored.
- void extract(const Mesh *mesh, const MeshFaceGroups *meshFaceGroups) {
+ void extract(const Mesh *mesh, const MeshFaceGroups *meshFaceGroups)
+ {
// Copy invalid faces.
m_faces.clear();
const uint32_t meshFaceCount = mesh->faceCount();
@@ -2886,28 +3050,32 @@ private:
Array<uint32_t> m_vertexToSourceVertexMap; // Map face vertices to vertices of the source mesh.
};
-struct Progress {
- Progress(ProgressCategory category, ProgressFunc func, void *userData, uint32_t maxValue) :
- cancel(false), m_category(category), m_func(func), m_userData(userData), m_value(0), m_maxValue(maxValue), m_percent(0) {
+struct Progress
+{
+ Progress(ProgressCategory category, ProgressFunc func, void *userData, uint32_t maxValue) : cancel(false), m_category(category), m_func(func), m_userData(userData), m_value(0), m_maxValue(maxValue), m_percent(0)
+ {
if (m_func) {
if (!m_func(category, 0, userData))
cancel = true;
}
}
- ~Progress() {
+ ~Progress()
+ {
if (m_func) {
if (!m_func(m_category, 100, m_userData))
cancel = true;
}
}
- void increment(uint32_t value) {
+ void increment(uint32_t value)
+ {
m_value += value;
update();
}
- void setMaxValue(uint32_t maxValue) {
+ void setMaxValue(uint32_t maxValue)
+ {
m_maxValue = maxValue;
update();
}
@@ -2915,15 +3083,15 @@ struct Progress {
std::atomic<bool> cancel;
private:
- void update() {
+ void update()
+ {
if (!m_func)
return;
const uint32_t newPercent = uint32_t(ceilf(m_value.load() / (float)m_maxValue.load() * 100.0f));
if (newPercent != m_percent) {
// Atomic max.
uint32_t oldPercent = m_percent;
- while (oldPercent < newPercent && !m_percent.compare_exchange_weak(oldPercent, newPercent)) {
- }
+ while (oldPercent < newPercent && !m_percent.compare_exchange_weak(oldPercent, newPercent)) {}
if (!m_func(m_category, m_percent, m_userData))
cancel = true;
}
@@ -2935,31 +3103,32 @@ private:
std::atomic<uint32_t> m_value, m_maxValue, m_percent;
};
-struct Spinlock {
- void lock() {
- while (m_lock.test_and_set(std::memory_order_acquire)) {
- }
- }
+struct Spinlock
+{
+ void lock() { while(m_lock.test_and_set(std::memory_order_acquire)) {} }
void unlock() { m_lock.clear(std::memory_order_release); }
private:
std::atomic_flag m_lock = ATOMIC_FLAG_INIT;
};
-struct TaskGroupHandle {
+struct TaskGroupHandle
+{
uint32_t value = UINT32_MAX;
};
-struct Task {
+struct Task
+{
void (*func)(void *groupUserData, void *taskUserData);
void *userData; // Passed to func as taskUserData.
};
#if XA_MULTITHREADED
-class TaskScheduler {
+class TaskScheduler
+{
public:
- TaskScheduler() :
- m_shutdown(false) {
+ TaskScheduler() : m_shutdown(false)
+ {
m_threadIndex = 0;
// Max with current task scheduler usage is 1 per thread + 1 deep nesting, but allow for some slop.
m_maxGroups = std::thread::hardware_concurrency() * 4;
@@ -2978,7 +3147,8 @@ public:
}
}
- ~TaskScheduler() {
+ ~TaskScheduler()
+ {
m_shutdown = true;
for (uint32_t i = 0; i < m_workers.size(); i++) {
Worker &worker = m_workers[i];
@@ -2996,12 +3166,14 @@ public:
XA_FREE(m_groups);
}
- uint32_t threadCount() const {
+ uint32_t threadCount() const
+ {
return max(1u, std::thread::hardware_concurrency()); // Including the main thread.
}
// userData is passed to Task::func as groupUserData.
- TaskGroupHandle createTaskGroup(void *userData = nullptr, uint32_t reserveSize = 0) {
+ TaskGroupHandle createTaskGroup(void *userData = nullptr, uint32_t reserveSize = 0)
+ {
// Claim the first free group.
for (uint32_t i = 0; i < m_maxGroups; i++) {
TaskGroup &group = m_groups[i];
@@ -3025,7 +3197,8 @@ public:
return handle;
}
- void run(TaskGroupHandle handle, const Task &task) {
+ void run(TaskGroupHandle handle, const Task &task)
+ {
XA_DEBUG_ASSERT(handle.value != UINT32_MAX);
TaskGroup &group = m_groups[handle.value];
group.queueLock.lock();
@@ -3039,7 +3212,8 @@ public:
}
}
- void wait(TaskGroupHandle *handle) {
+ void wait(TaskGroupHandle *handle)
+ {
if (handle->value == UINT32_MAX) {
XA_DEBUG_ASSERT(false);
return;
@@ -3067,7 +3241,8 @@ public:
static uint32_t currentThreadIndex() { return m_threadIndex; }
private:
- struct TaskGroup {
+ struct TaskGroup
+ {
std::atomic<bool> free;
Array<Task> queue; // Items are never removed. queueHead is incremented to pop items.
uint32_t queueHead = 0;
@@ -3076,7 +3251,8 @@ private:
void *userData;
};
- struct Worker {
+ struct Worker
+ {
std::thread *thread = nullptr;
std::mutex mutex;
std::condition_variable cv;
@@ -3089,11 +3265,12 @@ private:
uint32_t m_maxGroups;
static thread_local uint32_t m_threadIndex;
- static void workerThread(TaskScheduler *scheduler, Worker *worker, uint32_t threadIndex) {
+ static void workerThread(TaskScheduler *scheduler, Worker *worker, uint32_t threadIndex)
+ {
m_threadIndex = threadIndex;
std::unique_lock<std::mutex> lock(worker->mutex);
for (;;) {
- worker->cv.wait(lock, [=] { return worker->wakeup.load(); });
+ worker->cv.wait(lock, [=]{ return worker->wakeup.load(); });
worker->wakeup = false;
for (;;) {
if (scheduler->m_shutdown)
@@ -3124,18 +3301,22 @@ private:
thread_local uint32_t TaskScheduler::m_threadIndex;
#else
-class TaskScheduler {
+class TaskScheduler
+{
public:
- ~TaskScheduler() {
+ ~TaskScheduler()
+ {
for (uint32_t i = 0; i < m_groups.size(); i++)
destroyGroup({ i });
}
- uint32_t threadCount() const {
+ uint32_t threadCount() const
+ {
return 1;
}
- TaskGroupHandle createTaskGroup(void *userData = nullptr, uint32_t reserveSize = 0) {
+ TaskGroupHandle createTaskGroup(void *userData = nullptr, uint32_t reserveSize = 0)
+ {
TaskGroup *group = XA_NEW(MemTag::Default, TaskGroup);
group->queue.reserve(reserveSize);
group->userData = userData;
@@ -3145,11 +3326,13 @@ public:
return handle;
}
- void run(TaskGroupHandle handle, Task task) {
+ void run(TaskGroupHandle handle, Task task)
+ {
m_groups[handle.value]->queue.push_back(task);
}
- void wait(TaskGroupHandle *handle) {
+ void wait(TaskGroupHandle *handle)
+ {
if (handle->value == UINT32_MAX) {
XA_DEBUG_ASSERT(false);
return;
@@ -3165,7 +3348,8 @@ public:
static uint32_t currentThreadIndex() { return 0; }
private:
- void destroyGroup(TaskGroupHandle handle) {
+ void destroyGroup(TaskGroupHandle handle)
+ {
TaskGroup *group = m_groups[handle.value];
if (group) {
group->~TaskGroup();
@@ -3174,7 +3358,8 @@ private:
}
}
- struct TaskGroup {
+ struct TaskGroup
+ {
Array<Task> queue;
void *userData;
};
@@ -3188,7 +3373,8 @@ const uint8_t TGA_TYPE_RGB = 2;
const uint8_t TGA_ORIGIN_UPPER = 0x20;
#pragma pack(push, 1)
-struct TgaHeader {
+struct TgaHeader
+{
uint8_t id_length;
uint8_t colormap_type;
uint8_t image_type;
@@ -3205,7 +3391,8 @@ struct TgaHeader {
};
#pragma pack(pop)
-static void WriteTga(const char *filename, const uint8_t *data, uint32_t width, uint32_t height) {
+static void WriteTga(const char *filename, const uint8_t *data, uint32_t width, uint32_t height)
+{
XA_DEBUG_ASSERT(sizeof(TgaHeader) == TgaHeader::Size);
FILE *f;
XA_FOPEN(f, filename, "wb");
@@ -3230,10 +3417,12 @@ static void WriteTga(const char *filename, const uint8_t *data, uint32_t width,
}
#endif
-template <typename T>
-class ThreadLocal {
+template<typename T>
+class ThreadLocal
+{
public:
- ThreadLocal() {
+ ThreadLocal()
+ {
#if XA_MULTITHREADED
const uint32_t n = std::thread::hardware_concurrency();
#else
@@ -3244,7 +3433,8 @@ public:
new (&m_array[i]) T;
}
- ~ThreadLocal() {
+ ~ThreadLocal()
+ {
#if XA_MULTITHREADED
const uint32_t n = std::thread::hardware_concurrency();
#else
@@ -3255,7 +3445,8 @@ public:
XA_FREE(m_array);
}
- T &get() const {
+ T &get() const
+ {
return m_array[TaskScheduler::currentThreadIndex()];
}
@@ -3264,10 +3455,12 @@ private:
};
// Implemented as a struct so the temporary arrays can be reused.
-struct Triangulator {
+struct Triangulator
+{
// This is doing a simple ear-clipping algorithm that skips invalid triangles. Ideally, we should
// also sort the ears by angle, start with the ones that have the smallest angle and proceed in order.
- void triangulatePolygon(ConstArrayView<Vector3> vertices, ConstArrayView<uint32_t> inputIndices, Array<uint32_t> &outputIndices) {
+ void triangulatePolygon(ConstArrayView<Vector3> vertices, ConstArrayView<uint32_t> inputIndices, Array<uint32_t> &outputIndices)
+ {
m_polygonVertices.clear();
m_polygonVertices.reserve(inputIndices.length);
outputIndices.clear();
@@ -3276,7 +3469,8 @@ struct Triangulator {
outputIndices.push_back(inputIndices[0]);
outputIndices.push_back(inputIndices[1]);
outputIndices.push_back(inputIndices[2]);
- } else {
+ }
+ else {
// Build 2D polygon projecting vertices onto normal plane.
// Faces are not necesarily planar, this is for example the case, when the face comes from filling a hole. In such cases
// it's much better to use the best fit plane.
@@ -3348,7 +3542,8 @@ struct Triangulator {
}
private:
- static bool pointInTriangle(const Vector2 &p, const Vector2 &a, const Vector2 &b, const Vector2 &c) {
+ static bool pointInTriangle(const Vector2 &p, const Vector2 &a, const Vector2 &b, const Vector2 &c)
+ {
return triangleArea(a, b, p) >= kAreaEpsilon && triangleArea(b, c, p) >= kAreaEpsilon && triangleArea(c, a, p) >= kAreaEpsilon;
}
@@ -3357,10 +3552,12 @@ private:
Array<Vector2> m_polygonPoints;
};
-class UniformGrid2 {
+class UniformGrid2
+{
public:
// indices are optional.
- void reset(ConstArrayView<Vector2> positions, ConstArrayView<uint32_t> indices = ConstArrayView<uint32_t>(), uint32_t reserveEdgeCount = 0) {
+ void reset(ConstArrayView<Vector2> positions, ConstArrayView<uint32_t> indices = ConstArrayView<uint32_t>(), uint32_t reserveEdgeCount = 0)
+ {
m_edges.clear();
if (reserveEdgeCount > 0)
m_edges.reserve(reserveEdgeCount);
@@ -3369,12 +3566,14 @@ public:
m_cellDataOffsets.clear();
}
- void append(uint32_t edge) {
+ void append(uint32_t edge)
+ {
XA_DEBUG_ASSERT(m_cellDataOffsets.isEmpty());
m_edges.push_back(edge);
}
- bool intersect(Vector2 v1, Vector2 v2, float epsilon) {
+ bool intersect(Vector2 v1, Vector2 v2, float epsilon)
+ {
const uint32_t edgeCount = m_edges.size();
bool bruteForce = edgeCount <= 20;
if (!bruteForce && m_cellDataOffsets.isEmpty())
@@ -3401,7 +3600,8 @@ public:
}
// If edges is empty, checks for intersection with all edges in the grid.
- bool intersect(float epsilon, ConstArrayView<uint32_t> edges = ConstArrayView<uint32_t>(), ConstArrayView<uint32_t> ignoreEdges = ConstArrayView<uint32_t>()) {
+ bool intersect(float epsilon, ConstArrayView<uint32_t> edges = ConstArrayView<uint32_t>(), ConstArrayView<uint32_t> ignoreEdges = ConstArrayView<uint32_t>())
+ {
bool bruteForce = m_edges.size() <= 20;
if (!bruteForce && m_cellDataOffsets.isEmpty())
bruteForce = !createGrid();
@@ -3471,7 +3671,8 @@ public:
}
#if XA_DEBUG_EXPORT_BOUNDARY_GRID
- void debugExport(const char *filename) {
+ void debugExport(const char *filename)
+ {
Array<uint8_t> image;
image.resize(m_gridWidth * m_gridHeight * 3);
for (uint32_t y = 0; y < m_gridHeight; y++) {
@@ -3493,7 +3694,8 @@ public:
#endif
private:
- bool createGrid() {
+ bool createGrid()
+ {
// Compute edge extents. Min will be the grid origin.
const uint32_t edgeCount = m_edges.size();
Extents2 edgeExtents;
@@ -3545,7 +3747,8 @@ private:
return true;
}
- void computePotentialEdges(Vector2 p1, Vector2 p2) {
+ void computePotentialEdges(Vector2 p1, Vector2 p2)
+ {
m_potentialEdges.clear();
traverse(p1, p2);
for (uint32_t j = 0; j < m_traversedCellOffsets.size(); j++) {
@@ -3563,7 +3766,8 @@ private:
}
// "A Fast Voxel Traversal Algorithm for Ray Tracing"
- void traverse(Vector2 p1, Vector2 p2) {
+ void traverse(Vector2 p1, Vector2 p2)
+ {
const Vector2 dir = p2 - p1;
const Vector2 normal = normalizeSafe(dir, Vector2(0.0f));
const int stepX = dir.x >= 0 ? 1 : -1;
@@ -3584,12 +3788,14 @@ private:
if (normal.x > kEpsilon || normal.x < -kEpsilon) {
tMaxX = (distToNextCellX * stepX) / normal.x;
tDeltaX = (m_cellSize * stepX) / normal.x;
- } else
+ }
+ else
tMaxX = tDeltaX = FLT_MAX;
if (normal.y > kEpsilon || normal.y < -kEpsilon) {
tMaxY = (distToNextCellY * stepY) / normal.y;
tDeltaY = (m_cellSize * stepY) / normal.y;
- } else
+ }
+ else
tMaxY = tDeltaY = FLT_MAX;
m_traversedCellOffsets.clear();
m_traversedCellOffsets.push_back(firstCell[0] + firstCell[1] * m_gridWidth);
@@ -3616,23 +3822,28 @@ private:
}
}
- uint32_t cellX(float x) const {
+ uint32_t cellX(float x) const
+ {
return min((uint32_t)max(0.0f, (x - m_gridOrigin.x) / m_cellSize), m_gridWidth - 1u);
}
- uint32_t cellY(float y) const {
+ uint32_t cellY(float y) const
+ {
return min((uint32_t)max(0.0f, (y - m_gridOrigin.y) / m_cellSize), m_gridHeight - 1u);
}
- Vector2 edgePosition0(uint32_t edge) const {
+ Vector2 edgePosition0(uint32_t edge) const
+ {
return m_positions[vertexAt(meshEdgeIndex0(edge))];
}
- Vector2 edgePosition1(uint32_t edge) const {
+ Vector2 edgePosition1(uint32_t edge) const
+ {
return m_positions[vertexAt(meshEdgeIndex1(edge))];
}
- uint32_t vertexAt(uint32_t index) const {
+ uint32_t vertexAt(uint32_t index) const
+ {
return m_indices.length > 0 ? m_indices[index] : index;
}
@@ -3648,13 +3859,15 @@ private:
Array<uint32_t> m_traversedCellOffsets;
};
-struct UvMeshChart {
+struct UvMeshChart
+{
Array<uint32_t> faces;
Array<uint32_t> indices;
uint32_t material;
};
-struct UvMesh {
+struct UvMesh
+{
UvMeshDecl decl;
BitArray faceIgnore;
Array<uint32_t> faceMaterials;
@@ -3664,7 +3877,8 @@ struct UvMesh {
Array<uint32_t> vertexToChartMap;
};
-struct UvMeshInstance {
+struct UvMeshInstance
+{
UvMesh *mesh;
Array<Vector2> texcoords;
};
@@ -3712,30 +3926,27 @@ struct UvMeshInstance {
* FRANCE
*/
namespace opennl {
-#define NL_NEW(T) XA_ALLOC(MemTag::OpenNL, T)
-#define NL_NEW_ARRAY(T, NB) XA_ALLOC_ARRAY(MemTag::OpenNL, T, NB)
-#define NL_RENEW_ARRAY(T, x, NB) XA_REALLOC(MemTag::OpenNL, x, T, NB)
-#define NL_DELETE(x) \
- XA_FREE(x); \
- x = nullptr
-#define NL_DELETE_ARRAY(x) \
- XA_FREE(x); \
- x = nullptr
-#define NL_CLEAR(x, T) memset(x, 0, sizeof(T));
-#define NL_CLEAR_ARRAY(T, x, NB) memset(x, 0, (size_t)(NB) * sizeof(T))
-#define NL_NEW_VECTOR(dim) XA_ALLOC_ARRAY(MemTag::OpenNL, double, dim)
-#define NL_DELETE_VECTOR(ptr) XA_FREE(ptr)
+#define NL_NEW(T) XA_ALLOC(MemTag::OpenNL, T)
+#define NL_NEW_ARRAY(T,NB) XA_ALLOC_ARRAY(MemTag::OpenNL, T, NB)
+#define NL_RENEW_ARRAY(T,x,NB) XA_REALLOC(MemTag::OpenNL, x, T, NB)
+#define NL_DELETE(x) XA_FREE(x); x = nullptr
+#define NL_DELETE_ARRAY(x) XA_FREE(x); x = nullptr
+#define NL_CLEAR(x, T) memset(x, 0, sizeof(T));
+#define NL_CLEAR_ARRAY(T,x,NB) memset(x, 0, (size_t)(NB)*sizeof(T))
+#define NL_NEW_VECTOR(dim) XA_ALLOC_ARRAY(MemTag::OpenNL, double, dim)
+#define NL_DELETE_VECTOR(ptr) XA_FREE(ptr)
struct NLMatrixStruct;
-typedef NLMatrixStruct *NLMatrix;
+typedef NLMatrixStruct * NLMatrix;
typedef void (*NLDestroyMatrixFunc)(NLMatrix M);
-typedef void (*NLMultMatrixVectorFunc)(NLMatrix M, const double *x, double *y);
+typedef void (*NLMultMatrixVectorFunc)(NLMatrix M, const double* x, double* y);
#define NL_MATRIX_SPARSE_DYNAMIC 0x1001
-#define NL_MATRIX_CRS 0x1002
-#define NL_MATRIX_OTHER 0x1006
+#define NL_MATRIX_CRS 0x1002
+#define NL_MATRIX_OTHER 0x1006
-struct NLMatrixStruct {
+struct NLMatrixStruct
+{
uint32_t m;
uint32_t n;
uint32_t type;
@@ -3745,35 +3956,39 @@ struct NLMatrixStruct {
/* Dynamic arrays for sparse row/columns */
-struct NLCoeff {
+struct NLCoeff
+{
uint32_t index;
double value;
};
-struct NLRowColumn {
+struct NLRowColumn
+{
uint32_t size;
uint32_t capacity;
- NLCoeff *coeff;
+ NLCoeff* coeff;
};
/* Compressed Row Storage */
-struct NLCRSMatrix {
+struct NLCRSMatrix
+{
uint32_t m;
uint32_t n;
uint32_t type;
NLDestroyMatrixFunc destroy_func;
NLMultMatrixVectorFunc mult_func;
- double *val;
- uint32_t *rowptr;
- uint32_t *colind;
+ double* val;
+ uint32_t* rowptr;
+ uint32_t* colind;
uint32_t nslices;
- uint32_t *sliceptr;
+ uint32_t* sliceptr;
};
/* SparseMatrix data structure */
-struct NLSparseMatrix {
+struct NLSparseMatrix
+{
uint32_t m;
uint32_t n;
uint32_t type;
@@ -3781,23 +3996,25 @@ struct NLSparseMatrix {
NLMultMatrixVectorFunc mult_func;
uint32_t diag_size;
uint32_t diag_capacity;
- NLRowColumn *row;
- NLRowColumn *column;
- double *diag;
+ NLRowColumn* row;
+ NLRowColumn* column;
+ double* diag;
uint32_t row_capacity;
uint32_t column_capacity;
};
/* NLContext data structure */
-struct NLBufferBinding {
- void *base_address;
+struct NLBufferBinding
+{
+ void* base_address;
uint32_t stride;
};
-#define NL_BUFFER_ITEM(B, i) *(double *)((void *)((char *)((B).base_address) + ((i) * (B).stride)))
+#define NL_BUFFER_ITEM(B,i) *(double*)((void*)((char*)((B).base_address)+((i)*(B).stride)))
-struct NLContext {
+struct NLContext
+{
NLBufferBinding *variable_buffer;
double *variable_value;
bool *variable_is_locked;
@@ -3821,30 +4038,35 @@ struct NLContext {
double error;
};
-static void nlDeleteMatrix(NLMatrix M) {
+static void nlDeleteMatrix(NLMatrix M)
+{
if (!M)
return;
M->destroy_func(M);
NL_DELETE(M);
}
-static void nlMultMatrixVector(NLMatrix M, const double *x, double *y) {
+static void nlMultMatrixVector(NLMatrix M, const double* x, double* y)
+{
M->mult_func(M, x, y);
}
-static void nlRowColumnConstruct(NLRowColumn *c) {
+static void nlRowColumnConstruct(NLRowColumn* c)
+{
c->size = 0;
c->capacity = 0;
c->coeff = nullptr;
}
-static void nlRowColumnDestroy(NLRowColumn *c) {
+static void nlRowColumnDestroy(NLRowColumn* c)
+{
NL_DELETE_ARRAY(c->coeff);
c->size = 0;
c->capacity = 0;
}
-static void nlRowColumnGrow(NLRowColumn *c) {
+static void nlRowColumnGrow(NLRowColumn* c)
+{
if (c->capacity != 0) {
c->capacity = 2 * c->capacity;
c->coeff = NL_RENEW_ARRAY(NLCoeff, c->coeff, c->capacity);
@@ -3855,7 +4077,8 @@ static void nlRowColumnGrow(NLRowColumn *c) {
}
}
-static void nlRowColumnAdd(NLRowColumn *c, uint32_t index, double value) {
+static void nlRowColumnAdd(NLRowColumn* c, uint32_t index, double value)
+{
for (uint32_t i = 0; i < c->size; i++) {
if (c->coeff[i].index == index) {
c->coeff[i].value += value;
@@ -3870,7 +4093,8 @@ static void nlRowColumnAdd(NLRowColumn *c, uint32_t index, double value) {
}
/* Does not check whether the index already exists */
-static void nlRowColumnAppend(NLRowColumn *c, uint32_t index, double value) {
+static void nlRowColumnAppend(NLRowColumn* c, uint32_t index, double value)
+{
if (c->size == c->capacity)
nlRowColumnGrow(c);
c->coeff[c->size].index = index;
@@ -3878,27 +4102,32 @@ static void nlRowColumnAppend(NLRowColumn *c, uint32_t index, double value) {
c->size++;
}
-static void nlRowColumnZero(NLRowColumn *c) {
+static void nlRowColumnZero(NLRowColumn* c)
+{
c->size = 0;
}
-static void nlRowColumnClear(NLRowColumn *c) {
+static void nlRowColumnClear(NLRowColumn* c)
+{
c->size = 0;
c->capacity = 0;
NL_DELETE_ARRAY(c->coeff);
}
-static int nlCoeffCompare(const void *p1, const void *p2) {
- return (((NLCoeff *)(p2))->index < ((NLCoeff *)(p1))->index);
+static int nlCoeffCompare(const void* p1, const void* p2)
+{
+ return (((NLCoeff*)(p2))->index < ((NLCoeff*)(p1))->index);
}
-static void nlRowColumnSort(NLRowColumn *c) {
+static void nlRowColumnSort(NLRowColumn* c)
+{
qsort(c->coeff, c->size, sizeof(NLCoeff), nlCoeffCompare);
}
/* CRSMatrix data structure */
-static void nlCRSMatrixDestroy(NLCRSMatrix *M) {
+static void nlCRSMatrixDestroy(NLCRSMatrix* M)
+{
NL_DELETE_ARRAY(M->val);
NL_DELETE_ARRAY(M->rowptr);
NL_DELETE_ARRAY(M->colind);
@@ -3908,7 +4137,8 @@ static void nlCRSMatrixDestroy(NLCRSMatrix *M) {
M->nslices = 0;
}
-static void nlCRSMatrixMultSlice(NLCRSMatrix *M, const double *x, double *y, uint32_t Ibegin, uint32_t Iend) {
+static void nlCRSMatrixMultSlice(NLCRSMatrix* M, const double* x, double* y, uint32_t Ibegin, uint32_t Iend)
+{
for (uint32_t i = Ibegin; i < Iend; ++i) {
double sum = 0.0;
for (uint32_t j = M->rowptr[i]; j < M->rowptr[i + 1]; ++j)
@@ -3917,13 +4147,15 @@ static void nlCRSMatrixMultSlice(NLCRSMatrix *M, const double *x, double *y, uin
}
}
-static void nlCRSMatrixMult(NLCRSMatrix *M, const double *x, double *y) {
+static void nlCRSMatrixMult(NLCRSMatrix* M, const double* x, double* y)
+{
int nslices = (int)(M->nslices);
for (int slice = 0; slice < nslices; ++slice)
nlCRSMatrixMultSlice(M, x, y, M->sliceptr[slice], M->sliceptr[slice + 1]);
}
-static void nlCRSMatrixConstruct(NLCRSMatrix *M, uint32_t m, uint32_t n, uint32_t nnz, uint32_t nslices) {
+static void nlCRSMatrixConstruct(NLCRSMatrix* M, uint32_t m, uint32_t n, uint32_t nnz, uint32_t nslices)
+{
M->m = m;
M->n = n;
M->type = NL_MATRIX_CRS;
@@ -3942,19 +4174,22 @@ static void nlCRSMatrixConstruct(NLCRSMatrix *M, uint32_t m, uint32_t n, uint32_
/* SparseMatrix data structure */
-static void nlSparseMatrixDestroyRowColumns(NLSparseMatrix *M) {
+static void nlSparseMatrixDestroyRowColumns(NLSparseMatrix* M)
+{
for (uint32_t i = 0; i < M->m; i++)
nlRowColumnDestroy(&(M->row[i]));
NL_DELETE_ARRAY(M->row);
}
-static void nlSparseMatrixDestroy(NLSparseMatrix *M) {
+static void nlSparseMatrixDestroy(NLSparseMatrix* M)
+{
XA_DEBUG_ASSERT(M->type == NL_MATRIX_SPARSE_DYNAMIC);
nlSparseMatrixDestroyRowColumns(M);
NL_DELETE_ARRAY(M->diag);
}
-static void nlSparseMatrixAdd(NLSparseMatrix *M, uint32_t i, uint32_t j, double value) {
+static void nlSparseMatrixAdd(NLSparseMatrix* M, uint32_t i, uint32_t j, double value)
+{
XA_DEBUG_ASSERT(i >= 0 && i <= M->m - 1);
XA_DEBUG_ASSERT(j >= 0 && j <= M->n - 1);
if (i == j)
@@ -3963,21 +4198,24 @@ static void nlSparseMatrixAdd(NLSparseMatrix *M, uint32_t i, uint32_t j, double
}
/* Returns the number of non-zero coefficients */
-static uint32_t nlSparseMatrixNNZ(NLSparseMatrix *M) {
+static uint32_t nlSparseMatrixNNZ(NLSparseMatrix* M)
+{
uint32_t nnz = 0;
for (uint32_t i = 0; i < M->m; i++)
nnz += M->row[i].size;
return nnz;
}
-static void nlSparseMatrixSort(NLSparseMatrix *M) {
+static void nlSparseMatrixSort(NLSparseMatrix* M)
+{
for (uint32_t i = 0; i < M->m; i++)
nlRowColumnSort(&(M->row[i]));
}
/* SparseMatrix x Vector routines, internal helper routines */
-static void nlSparseMatrix_mult_rows(NLSparseMatrix *A, const double *x, double *y) {
+static void nlSparseMatrix_mult_rows(NLSparseMatrix* A, const double* x, double* y)
+{
/*
* Note: OpenMP does not like unsigned ints
* (causes some floating point exceptions),
@@ -3985,8 +4223,8 @@ static void nlSparseMatrix_mult_rows(NLSparseMatrix *A, const double *x, double
* indices.
*/
int m = (int)(A->m);
- NLCoeff *c = nullptr;
- NLRowColumn *Ri = nullptr;
+ NLCoeff* c = nullptr;
+ NLRowColumn* Ri = nullptr;
for (int i = 0; i < m; i++) {
Ri = &(A->row[i]);
y[i] = 0;
@@ -3997,12 +4235,14 @@ static void nlSparseMatrix_mult_rows(NLSparseMatrix *A, const double *x, double
}
}
-static void nlSparseMatrixMult(NLSparseMatrix *A, const double *x, double *y) {
+static void nlSparseMatrixMult(NLSparseMatrix* A, const double* x, double* y)
+{
XA_DEBUG_ASSERT(A->type == NL_MATRIX_SPARSE_DYNAMIC);
nlSparseMatrix_mult_rows(A, x, y);
}
-static void nlSparseMatrixConstruct(NLSparseMatrix *M, uint32_t m, uint32_t n) {
+static void nlSparseMatrixConstruct(NLSparseMatrix* M, uint32_t m, uint32_t n)
+{
M->m = m;
M->n = n;
M->type = NL_MATRIX_SPARSE_DYNAMIC;
@@ -4022,23 +4262,24 @@ static void nlSparseMatrixConstruct(NLSparseMatrix *M, uint32_t m, uint32_t n) {
NL_CLEAR_ARRAY(double, M->diag, M->diag_size);
}
-static NLMatrix nlCRSMatrixNewFromSparseMatrix(NLSparseMatrix *M) {
+static NLMatrix nlCRSMatrixNewFromSparseMatrix(NLSparseMatrix* M)
+{
uint32_t nnz = nlSparseMatrixNNZ(M);
uint32_t nslices = 8; /* TODO: get number of cores */
uint32_t slice, cur_bound, cur_NNZ, cur_row;
uint32_t k;
uint32_t slice_size = nnz / nslices;
- NLCRSMatrix *CRS = NL_NEW(NLCRSMatrix);
+ NLCRSMatrix* CRS = NL_NEW(NLCRSMatrix);
NL_CLEAR(CRS, NLCRSMatrix);
nlCRSMatrixConstruct(CRS, M->m, M->n, nnz, nslices);
nlSparseMatrixSort(M);
/* Convert matrix to CRS format */
k = 0;
for (uint32_t i = 0; i < M->m; ++i) {
- NLRowColumn *Ri = &(M->row[i]);
+ NLRowColumn* Ri = &(M->row[i]);
CRS->rowptr[i] = k;
for (uint32_t ij = 0; ij < Ri->size; ij++) {
- NLCoeff *c = &(Ri->coeff[ij]);
+ NLCoeff* c = &(Ri->coeff[ij]);
CRS->val[k] = c->value;
CRS->colind[k] = c->index;
++k;
@@ -4053,8 +4294,8 @@ static NLMatrix nlCRSMatrixNewFromSparseMatrix(NLSparseMatrix *M) {
CRS->sliceptr[0] = 0;
for (slice = 1; slice < nslices; ++slice) {
while (cur_NNZ < cur_bound && cur_row < M->m) {
- ++cur_row;
cur_NNZ += CRS->rowptr[cur_row + 1] - CRS->rowptr[cur_row];
+ ++cur_row;
}
CRS->sliceptr[slice] = cur_row;
cur_bound += slice_size;
@@ -4064,17 +4305,19 @@ static NLMatrix nlCRSMatrixNewFromSparseMatrix(NLSparseMatrix *M) {
return (NLMatrix)CRS;
}
-static void nlMatrixCompress(NLMatrix *M) {
+static void nlMatrixCompress(NLMatrix* M)
+{
NLMatrix CRS = nullptr;
if ((*M)->type != NL_MATRIX_SPARSE_DYNAMIC)
return;
- CRS = nlCRSMatrixNewFromSparseMatrix((NLSparseMatrix *)*M);
+ CRS = nlCRSMatrixNewFromSparseMatrix((NLSparseMatrix*)*M);
nlDeleteMatrix(*M);
*M = CRS;
}
-static NLContext *nlNewContext() {
- NLContext *result = NL_NEW(NLContext);
+static NLContext *nlNewContext()
+{
+ NLContext* result = NL_NEW(NLContext);
NL_CLEAR(result, NLContext);
result->max_iterations = 100;
result->threshold = 1e-6;
@@ -4083,7 +4326,8 @@ static NLContext *nlNewContext() {
return result;
}
-static void nlDeleteContext(NLContext *context) {
+static void nlDeleteContext(NLContext *context)
+{
nlDeleteMatrix(context->M);
context->M = nullptr;
nlDeleteMatrix(context->P);
@@ -4101,19 +4345,22 @@ static void nlDeleteContext(NLContext *context) {
NL_DELETE(context);
}
-static double ddot(int n, const double *x, const double *y) {
+static double ddot(int n, const double *x, const double *y)
+{
double sum = 0.0;
for (int i = 0; i < n; i++)
sum += x[i] * y[i];
return sum;
}
-static void daxpy(int n, double a, const double *x, double *y) {
+static void daxpy(int n, double a, const double *x, double *y)
+{
for (int i = 0; i < n; i++)
y[i] = a * x[i] + y[i];
}
-static void dscal(int n, double a, double *x) {
+static void dscal(int n, double a, double *x)
+{
for (int i = 0; i < n; i++)
x[i] *= a;
}
@@ -4136,16 +4383,17 @@ static void dscal(int n, double a, double *x) {
* versions of matrix x vector product (CPU/GPU, sparse/dense ...)
*/
-static uint32_t nlSolveSystem_PRE_CG(NLMatrix M, NLMatrix P, double *b, double *x, double eps, uint32_t max_iter, double *sq_bnorm, double *sq_rnorm) {
- int N = (int)M->n;
- double *r = NL_NEW_VECTOR(N);
- double *d = NL_NEW_VECTOR(N);
- double *h = NL_NEW_VECTOR(N);
+static uint32_t nlSolveSystem_PRE_CG(NLMatrix M, NLMatrix P, double* b, double* x, double eps, uint32_t max_iter, double *sq_bnorm, double *sq_rnorm)
+{
+ int N = (int)M->n;
+ double* r = NL_NEW_VECTOR(N);
+ double* d = NL_NEW_VECTOR(N);
+ double* h = NL_NEW_VECTOR(N);
double *Ad = h;
uint32_t its = 0;
double rh, alpha, beta;
double b_square = ddot(N, b, b);
- double err = eps * eps * b_square;
+ double err = eps * eps*b_square;
double curr_err;
nlMultMatrixVector(M, x, r);
daxpy(N, -1., b, r);
@@ -4175,12 +4423,13 @@ static uint32_t nlSolveSystem_PRE_CG(NLMatrix M, NLMatrix P, double *b, double *
return its;
}
-static uint32_t nlSolveSystemIterative(NLContext *context, NLMatrix M, NLMatrix P, double *b_in, double *x_in, double eps, uint32_t max_iter) {
+static uint32_t nlSolveSystemIterative(NLContext *context, NLMatrix M, NLMatrix P, double* b_in, double* x_in, double eps, uint32_t max_iter)
+{
uint32_t result = 0;
double rnorm = 0.0;
double bnorm = 0.0;
- double *b = b_in;
- double *x = x_in;
+ double* b = b_in;
+ double* x = x_in;
XA_DEBUG_ASSERT(M->m == M->n);
double sq_bnorm, sq_rnorm;
result = nlSolveSystem_PRE_CG(M, P, b, x, eps, max_iter, &sq_bnorm, &sq_rnorm);
@@ -4195,9 +4444,10 @@ static uint32_t nlSolveSystemIterative(NLContext *context, NLMatrix M, NLMatrix
return result;
}
-static bool nlSolveIterative(NLContext *context) {
- double *b = context->b;
- double *x = context->x;
+static bool nlSolveIterative(NLContext *context)
+{
+ double* b = context->b;
+ double* x = context->x;
uint32_t n = context->n;
NLMatrix M = context->M;
NLMatrix P = context->P;
@@ -4209,30 +4459,34 @@ static bool nlSolveIterative(NLContext *context) {
return true;
}
-struct NLJacobiPreconditioner {
+struct NLJacobiPreconditioner
+{
uint32_t m;
uint32_t n;
uint32_t type;
NLDestroyMatrixFunc destroy_func;
NLMultMatrixVectorFunc mult_func;
- double *diag_inv;
+ double* diag_inv;
};
-static void nlJacobiPreconditionerDestroy(NLJacobiPreconditioner *M) {
+static void nlJacobiPreconditionerDestroy(NLJacobiPreconditioner* M)
+{
NL_DELETE_ARRAY(M->diag_inv);
}
-static void nlJacobiPreconditionerMult(NLJacobiPreconditioner *M, const double *x, double *y) {
+static void nlJacobiPreconditionerMult(NLJacobiPreconditioner* M, const double* x, double* y)
+{
for (uint32_t i = 0; i < M->n; ++i)
y[i] = x[i] * M->diag_inv[i];
}
-static NLMatrix nlNewJacobiPreconditioner(NLMatrix M_in) {
- NLSparseMatrix *M = nullptr;
- NLJacobiPreconditioner *result = nullptr;
+static NLMatrix nlNewJacobiPreconditioner(NLMatrix M_in)
+{
+ NLSparseMatrix* M = nullptr;
+ NLJacobiPreconditioner* result = nullptr;
XA_DEBUG_ASSERT(M_in->type == NL_MATRIX_SPARSE_DYNAMIC);
XA_DEBUG_ASSERT(M_in->m == M_in->n);
- M = (NLSparseMatrix *)M_in;
+ M = (NLSparseMatrix*)M_in;
result = NL_NEW(NLJacobiPreconditioner);
NL_CLEAR(result, NLJacobiPreconditioner);
result->m = M->m;
@@ -4250,7 +4504,8 @@ static NLMatrix nlNewJacobiPreconditioner(NLMatrix M_in) {
#define NL_NB_VARIABLES 0x101
#define NL_MAX_ITERATIONS 0x103
-static void nlSolverParameteri(NLContext *context, uint32_t pname, int param) {
+static void nlSolverParameteri(NLContext *context, uint32_t pname, int param)
+{
if (pname == NL_NB_VARIABLES) {
XA_DEBUG_ASSERT(param > 0);
context->nb_variables = (uint32_t)param;
@@ -4261,22 +4516,26 @@ static void nlSolverParameteri(NLContext *context, uint32_t pname, int param) {
}
}
-static void nlSetVariable(NLContext *context, uint32_t index, double value) {
+static void nlSetVariable(NLContext *context, uint32_t index, double value)
+{
XA_DEBUG_ASSERT(index >= 0 && index <= context->nb_variables - 1);
NL_BUFFER_ITEM(context->variable_buffer[0], index) = value;
}
-static double nlGetVariable(NLContext *context, uint32_t index) {
+static double nlGetVariable(NLContext *context, uint32_t index)
+{
XA_DEBUG_ASSERT(index >= 0 && index <= context->nb_variables - 1);
return NL_BUFFER_ITEM(context->variable_buffer[0], index);
}
-static void nlLockVariable(NLContext *context, uint32_t index) {
+static void nlLockVariable(NLContext *context, uint32_t index)
+{
XA_DEBUG_ASSERT(index >= 0 && index <= context->nb_variables - 1);
context->variable_is_locked[index] = true;
}
-static void nlVariablesToVector(NLContext *context) {
+static void nlVariablesToVector(NLContext *context)
+{
uint32_t n = context->n;
XA_DEBUG_ASSERT(context->x);
for (uint32_t k = 0; k < context->nb_systems; ++k) {
@@ -4291,7 +4550,8 @@ static void nlVariablesToVector(NLContext *context) {
}
}
-static void nlVectorToVariables(NLContext *context) {
+static void nlVectorToVariables(NLContext *context)
+{
uint32_t n = context->n;
XA_DEBUG_ASSERT(context->x);
for (uint32_t k = 0; k < context->nb_systems; ++k) {
@@ -4306,7 +4566,8 @@ static void nlVectorToVariables(NLContext *context) {
}
}
-static void nlCoefficient(NLContext *context, uint32_t index, double value) {
+static void nlCoefficient(NLContext *context, uint32_t index, double value)
+{
XA_DEBUG_ASSERT(index >= 0 && index <= context->nb_variables - 1);
if (context->variable_is_locked[index]) {
/*
@@ -4323,11 +4584,12 @@ static void nlCoefficient(NLContext *context, uint32_t index, double value) {
}
}
-#define NL_SYSTEM 0x0
-#define NL_MATRIX 0x1
-#define NL_ROW 0x2
+#define NL_SYSTEM 0x0
+#define NL_MATRIX 0x1
+#define NL_ROW 0x2
-static void nlBegin(NLContext *context, uint32_t prim) {
+static void nlBegin(NLContext *context, uint32_t prim)
+{
if (prim == NL_SYSTEM) {
XA_DEBUG_ASSERT(context->nb_variables > 0);
context->variable_buffer = NL_NEW_ARRAY(NLBufferBinding, context->nb_systems);
@@ -4336,8 +4598,8 @@ static void nlBegin(NLContext *context, uint32_t prim) {
NL_CLEAR_ARRAY(double, context->variable_value, context->nb_variables * context->nb_systems);
for (uint32_t k = 0; k < context->nb_systems; ++k) {
context->variable_buffer[k].base_address =
- context->variable_value +
- k * context->nb_variables;
+ context->variable_value +
+ k * context->nb_variables;
context->variable_buffer[k].stride = sizeof(double);
}
context->variable_is_locked = NL_NEW_ARRAY(bool, context->nb_variables);
@@ -4360,11 +4622,11 @@ static void nlBegin(NLContext *context, uint32_t prim) {
context->max_iterations = n * 5;
context->M = (NLMatrix)(NL_NEW(NLSparseMatrix));
NL_CLEAR(context->M, NLSparseMatrix);
- nlSparseMatrixConstruct((NLSparseMatrix *)(context->M), n, n);
- context->x = NL_NEW_ARRAY(double, n * context->nb_systems);
- NL_CLEAR_ARRAY(double, context->x, n * context->nb_systems);
- context->b = NL_NEW_ARRAY(double, n * context->nb_systems);
- NL_CLEAR_ARRAY(double, context->b, n * context->nb_systems);
+ nlSparseMatrixConstruct((NLSparseMatrix*)(context->M), n, n);
+ context->x = NL_NEW_ARRAY(double, n*context->nb_systems);
+ NL_CLEAR_ARRAY(double, context->x, n*context->nb_systems);
+ context->b = NL_NEW_ARRAY(double, n*context->nb_systems);
+ NL_CLEAR_ARRAY(double, context->b, n*context->nb_systems);
nlVariablesToVector(context);
nlRowColumnConstruct(&context->af);
nlRowColumnConstruct(&context->al);
@@ -4375,15 +4637,16 @@ static void nlBegin(NLContext *context, uint32_t prim) {
}
}
-static void nlEnd(NLContext *context, uint32_t prim) {
+static void nlEnd(NLContext *context, uint32_t prim)
+{
if (prim == NL_MATRIX) {
nlRowColumnClear(&context->af);
nlRowColumnClear(&context->al);
} else if (prim == NL_ROW) {
- NLRowColumn *af = &context->af;
- NLRowColumn *al = &context->al;
- NLSparseMatrix *M = (NLSparseMatrix *)context->M;
- double *b = context->b;
+ NLRowColumn* af = &context->af;
+ NLRowColumn* al = &context->al;
+ NLSparseMatrix* M = (NLSparseMatrix*)context->M;
+ double* b = context->b;
uint32_t nf = af->size;
uint32_t nl = al->size;
uint32_t n = context->n;
@@ -4404,13 +4667,14 @@ static void nlEnd(NLContext *context, uint32_t prim) {
S += al->coeff[jj].value * NL_BUFFER_ITEM(context->variable_buffer[k], j);
}
for (uint32_t jj = 0; jj < nf; jj++)
- b[k * n + af->coeff[jj].index] -= af->coeff[jj].value * S;
+ b[k*n + af->coeff[jj].index] -= af->coeff[jj].value * S;
}
context->current_row++;
}
}
-static bool nlSolve(NLContext *context) {
+static bool nlSolve(NLContext *context)
+{
nlDeleteMatrix(context->P);
context->P = nlNewJacobiPreconditioner(context->M);
nlMatrixCompress(&context->M);
@@ -4421,9 +4685,11 @@ static bool nlSolve(NLContext *context) {
} // namespace opennl
namespace raster {
-class ClippedTriangle {
+class ClippedTriangle
+{
public:
- ClippedTriangle(const Vector2 &a, const Vector2 &b, const Vector2 &c) {
+ ClippedTriangle(const Vector2 &a, const Vector2 &b, const Vector2 &c)
+ {
m_numVertices = 3;
m_activeVertexBuffer = 0;
m_verticesA[0] = a;
@@ -4434,20 +4700,20 @@ public:
m_area = 0;
}
- void clipHorizontalPlane(float offset, float clipdirection) {
- Vector2 *v = m_vertexBuffers[m_activeVertexBuffer];
+ void clipHorizontalPlane(float offset, float clipdirection)
+ {
+ Vector2 *v = m_vertexBuffers[m_activeVertexBuffer];
m_activeVertexBuffer ^= 1;
Vector2 *v2 = m_vertexBuffers[m_activeVertexBuffer];
v[m_numVertices] = v[0];
- float dy2, dy1 = offset - v[0].y;
- int dy2in, dy1in = clipdirection * dy1 >= 0;
- uint32_t p = 0;
+ float dy2, dy1 = offset - v[0].y;
+ int dy2in, dy1in = clipdirection * dy1 >= 0;
+ uint32_t p = 0;
for (uint32_t k = 0; k < m_numVertices; k++) {
- dy2 = offset - v[k + 1].y;
+ dy2 = offset - v[k + 1].y;
dy2in = clipdirection * dy2 >= 0;
- if (dy1in)
- v2[p++] = v[k];
- if (dy1in + dy2in == 1) { // not both in/out
+ if (dy1in) v2[p++] = v[k];
+ if ( dy1in + dy2in == 1 ) { // not both in/out
float dx = v[k + 1].x - v[k].x;
float dy = v[k + 1].y - v[k].y;
v2[p++] = Vector2(v[k].x + dy1 * (dx / dy), offset);
@@ -4458,20 +4724,20 @@ public:
m_numVertices = p;
}
- void clipVerticalPlane(float offset, float clipdirection) {
- Vector2 *v = m_vertexBuffers[m_activeVertexBuffer];
+ void clipVerticalPlane(float offset, float clipdirection)
+ {
+ Vector2 *v = m_vertexBuffers[m_activeVertexBuffer];
m_activeVertexBuffer ^= 1;
Vector2 *v2 = m_vertexBuffers[m_activeVertexBuffer];
v[m_numVertices] = v[0];
- float dx2, dx1 = offset - v[0].x;
- int dx2in, dx1in = clipdirection * dx1 >= 0;
- uint32_t p = 0;
+ float dx2, dx1 = offset - v[0].x;
+ int dx2in, dx1in = clipdirection * dx1 >= 0;
+ uint32_t p = 0;
for (uint32_t k = 0; k < m_numVertices; k++) {
dx2 = offset - v[k + 1].x;
dx2in = clipdirection * dx2 >= 0;
- if (dx1in)
- v2[p++] = v[k];
- if (dx1in + dx2in == 1) { // not both in/out
+ if (dx1in) v2[p++] = v[k];
+ if ( dx1in + dx2in == 1 ) { // not both in/out
float dx = v[k + 1].x - v[k].x;
float dy = v[k + 1].y - v[k].y;
v2[p++] = Vector2(offset, v[k].y + dx1 * (dy / dx));
@@ -4482,8 +4748,9 @@ public:
m_numVertices = p;
}
- void computeArea() {
- Vector2 *v = m_vertexBuffers[m_activeVertexBuffer];
+ void computeArea()
+ {
+ Vector2 *v = m_vertexBuffers[m_activeVertexBuffer];
v[m_numVertices] = v[0];
m_area = 0;
float centroidx = 0, centroidy = 0;
@@ -4497,7 +4764,8 @@ public:
m_area = 0.5f * fabsf(m_area);
}
- void clipAABox(float x0, float y0, float x1, float y1) {
+ void clipAABox(float x0, float y0, float x1, float y1)
+ {
clipVerticalPlane(x0, -1);
clipHorizontalPlane(y0, -1);
clipVerticalPlane(x1, 1);
@@ -4505,7 +4773,8 @@ public:
computeArea();
}
- float area() const {
+ float area() const
+ {
return m_area;
}
@@ -4522,9 +4791,10 @@ private:
typedef bool (*SamplingCallback)(void *param, int x, int y);
/// A triangle for rasterization.
-struct Triangle {
- Triangle(const Vector2 &_v0, const Vector2 &_v1, const Vector2 &_v2) :
- v1(_v0), v2(_v2), v3(_v1), n1(0.0f), n2(0.0f), n3(0.0f) {
+struct Triangle
+{
+ Triangle(const Vector2 &_v0, const Vector2 &_v1, const Vector2 &_v2) : v1(_v0), v2(_v2), v3(_v1), n1(0.0f), n2(0.0f), n3(0.0f)
+ {
// make sure every triangle is front facing.
flipBackface();
// Compute deltas.
@@ -4532,7 +4802,8 @@ struct Triangle {
computeUnitInwardNormals();
}
- bool isValid() {
+ bool isValid()
+ {
const Vector2 e0 = v3 - v1;
const Vector2 e1 = v2 - v1;
const float area = e0.y * e1.x - e1.y * e0.x;
@@ -4540,17 +4811,18 @@ struct Triangle {
}
// extents has to be multiple of BK_SIZE!!
- bool drawAA(const Vector2 &extents, SamplingCallback cb, void *param) {
- const float PX_INSIDE = 1.0f / sqrtf(2.0f);
- const float PX_OUTSIDE = -1.0f / sqrtf(2.0f);
+ bool drawAA(const Vector2 &extents, SamplingCallback cb, void *param)
+ {
+ const float PX_INSIDE = 1.0f/sqrtf(2.0f);
+ const float PX_OUTSIDE = -1.0f/sqrtf(2.0f);
const float BK_SIZE = 8;
- const float BK_INSIDE = sqrtf(BK_SIZE * BK_SIZE / 2.0f);
- const float BK_OUTSIDE = -sqrtf(BK_SIZE * BK_SIZE / 2.0f);
+ const float BK_INSIDE = sqrtf(BK_SIZE*BK_SIZE/2.0f);
+ const float BK_OUTSIDE = -sqrtf(BK_SIZE*BK_SIZE/2.0f);
// Bounding rectangle
float minx = floorf(max(min3(v1.x, v2.x, v3.x), 0.0f));
float miny = floorf(max(min3(v1.y, v2.y, v3.y), 0.0f));
- float maxx = ceilf(min(max3(v1.x, v2.x, v3.x), extents.x - 1.0f));
- float maxy = ceilf(min(max3(v1.y, v2.y, v3.y), extents.y - 1.0f));
+ float maxx = ceilf( min(max3(v1.x, v2.x, v3.x), extents.x - 1.0f));
+ float maxy = ceilf( min(max3(v1.y, v2.y, v3.y), extents.y - 1.0f));
// There's no reason to align the blocks to the viewport, instead we align them to the origin of the triangle bounds.
minx = floorf(minx);
miny = floorf(miny);
@@ -4575,10 +4847,9 @@ struct Triangle {
float bC = C2 + n2.x * xc + n2.y * yc;
float cC = C3 + n3.x * xc + n3.y * yc;
// Skip block when outside an edge
- if ((aC <= BK_OUTSIDE) || (bC <= BK_OUTSIDE) || (cC <= BK_OUTSIDE))
- continue;
+ if ( (aC <= BK_OUTSIDE) || (bC <= BK_OUTSIDE) || (cC <= BK_OUTSIDE) ) continue;
// Accept whole block when totally covered
- if ((aC >= BK_INSIDE) && (bC >= BK_INSIDE) && (cC >= BK_INSIDE)) {
+ if ( (aC >= BK_INSIDE) && (bC >= BK_INSIDE) && (cC >= BK_INSIDE) ) {
for (float y = y0; y < y0 + BK_SIZE; y++) {
for (float x = x0; x < x0 + BK_SIZE; x++) {
if (!cb(param, (int)x, (int)y))
@@ -4621,9 +4892,10 @@ struct Triangle {
}
private:
- void flipBackface() {
+ void flipBackface()
+ {
// check if triangle is backfacing, if so, swap two vertices
- if (((v3.x - v1.x) * (v2.y - v1.y) - (v3.y - v1.y) * (v2.x - v1.x)) < 0) {
+ if ( ((v3.x - v1.x) * (v2.y - v1.y) - (v3.y - v1.y) * (v2.x - v1.x)) < 0 ) {
Vector2 hv = v1;
v1 = v2;
v2 = hv; // swap pos
@@ -4631,7 +4903,8 @@ private:
}
// compute unit inward normals for each edge.
- void computeUnitInwardNormals() {
+ void computeUnitInwardNormals()
+ {
n1 = v1 - v2;
n1 = Vector2(-n1.y, n1.x);
n1 = n1 * (1.0f / sqrtf(dot(n1, n1)));
@@ -4649,7 +4922,8 @@ private:
};
// Process the given triangle. Returns false if rasterization was interrupted by the callback.
-static bool drawTriangle(const Vector2 &extents, const Vector2 v[3], SamplingCallback cb, void *param) {
+static bool drawTriangle(const Vector2 &extents, const Vector2 v[3], SamplingCallback cb, void *param)
+{
Triangle tri(v[0], v[1], v[2]);
// @@ It would be nice to have a conservative drawing mode that enlarges the triangle extents by one texel and is able to handle degenerate triangles.
// @@ Maybe the simplest thing to do would be raster triangle edges.
@@ -4664,19 +4938,22 @@ namespace segment {
// - Insertion is o(n)
// - Smallest element goes at the end, so that popping it is o(1).
-struct CostQueue {
- CostQueue(uint32_t size = UINT32_MAX) :
- m_maxSize(size), m_pairs(MemTag::SegmentAtlasChartCandidates) {}
+struct CostQueue
+{
+ CostQueue(uint32_t size = UINT32_MAX) : m_maxSize(size), m_pairs(MemTag::SegmentAtlasChartCandidates) {}
- float peekCost() const {
+ float peekCost() const
+ {
return m_pairs.back().cost;
}
- uint32_t peekFace() const {
+ uint32_t peekFace() const
+ {
return m_pairs.back().face;
}
- void push(float cost, uint32_t face) {
+ void push(float cost, uint32_t face)
+ {
const Pair p = { cost, face };
if (m_pairs.isEmpty() || cost < peekCost())
m_pairs.push_back(p);
@@ -4693,25 +4970,29 @@ struct CostQueue {
}
}
- uint32_t pop() {
+ uint32_t pop()
+ {
XA_DEBUG_ASSERT(!m_pairs.isEmpty());
uint32_t f = m_pairs.back().face;
m_pairs.pop_back();
return f;
}
- XA_INLINE void clear() {
+ XA_INLINE void clear()
+ {
m_pairs.clear();
}
- XA_INLINE uint32_t count() const {
+ XA_INLINE uint32_t count() const
+ {
return m_pairs.size();
}
private:
const uint32_t m_maxSize;
- struct Pair {
+ struct Pair
+ {
float cost;
uint32_t face;
};
@@ -4719,7 +5000,8 @@ private:
Array<Pair> m_pairs;
};
-struct AtlasData {
+struct AtlasData
+{
ChartOptions options;
const Mesh *mesh = nullptr;
Array<float> edgeDihedralAngles;
@@ -4729,10 +5011,10 @@ struct AtlasData {
Array<Vector3> faceNormals;
BitArray isFaceInChart;
- AtlasData() :
- edgeDihedralAngles(MemTag::SegmentAtlasMeshData), edgeLengths(MemTag::SegmentAtlasMeshData), faceAreas(MemTag::SegmentAtlasMeshData), faceNormals(MemTag::SegmentAtlasMeshData) {}
+ AtlasData() : edgeDihedralAngles(MemTag::SegmentAtlasMeshData), edgeLengths(MemTag::SegmentAtlasMeshData), faceAreas(MemTag::SegmentAtlasMeshData), faceNormals(MemTag::SegmentAtlasMeshData) {}
- void compute() {
+ void compute()
+ {
const uint32_t faceCount = mesh->faceCount();
const uint32_t edgeCount = mesh->edgeCount();
edgeDihedralAngles.resize(edgeCount);
@@ -4773,18 +5055,20 @@ struct AtlasData {
};
// If MeshDecl::vertexUvData is set on input meshes, find charts by floodfilling faces in world/model space without crossing UV seams.
-struct OriginalUvCharts {
- OriginalUvCharts(AtlasData &data) :
- m_data(data) {}
+struct OriginalUvCharts
+{
+ OriginalUvCharts(AtlasData &data) : m_data(data) {}
uint32_t chartCount() const { return m_charts.size(); }
const Basis &chartBasis(uint32_t chartIndex) const { return m_chartBasis[chartIndex]; }
- ConstArrayView<uint32_t> chartFaces(uint32_t chartIndex) const {
+ ConstArrayView<uint32_t> chartFaces(uint32_t chartIndex) const
+ {
const Chart &chart = m_charts[chartIndex];
return ConstArrayView<uint32_t>(&m_chartFaces[chart.firstFace], chart.faceCount);
}
- void compute() {
+ void compute()
+ {
m_charts.clear();
m_chartFaces.clear();
const Mesh *mesh = m_data.mesh;
@@ -4805,7 +5089,8 @@ struct OriginalUvCharts {
}
// Compute basis for each chart.
m_chartBasis.resize(m_charts.size());
- for (uint32_t c = 0; c < m_charts.size(); c++) {
+ for (uint32_t c = 0; c < m_charts.size(); c++)
+ {
const Chart &chart = m_charts[c];
m_tempPoints.resize(chart.faceCount * 3);
for (uint32_t f = 0; f < chart.faceCount; f++) {
@@ -4818,11 +5103,13 @@ struct OriginalUvCharts {
}
private:
- struct Chart {
+ struct Chart
+ {
uint32_t firstFace, faceCount;
};
- void floodfillFaces(Chart &chart) {
+ void floodfillFaces(Chart &chart)
+ {
const bool isFaceAreaNegative = m_data.faceUvAreas[m_chartFaces[chart.firstFace]] < 0.0f;
for (;;) {
bool newFaceAdded = false;
@@ -4868,13 +5155,14 @@ static uint32_t s_planarRegionsCurrentRegion;
static uint32_t s_planarRegionsCurrentVertex;
#endif
-struct PlanarCharts {
- PlanarCharts(AtlasData &data) :
- m_data(data), m_nextRegionFace(MemTag::SegmentAtlasPlanarRegions), m_faceToRegionId(MemTag::SegmentAtlasPlanarRegions) {}
+struct PlanarCharts
+{
+ PlanarCharts(AtlasData &data) : m_data(data), m_nextRegionFace(MemTag::SegmentAtlasPlanarRegions), m_faceToRegionId(MemTag::SegmentAtlasPlanarRegions) {}
const Basis &chartBasis(uint32_t chartIndex) const { return m_chartBasis[chartIndex]; }
uint32_t chartCount() const { return m_charts.size(); }
- ConstArrayView<uint32_t> chartFaces(uint32_t chartIndex) const {
+ ConstArrayView<uint32_t> chartFaces(uint32_t chartIndex) const
+ {
const Chart &chart = m_charts[chartIndex];
return ConstArrayView<uint32_t>(&m_chartFaces[chart.firstFace], chart.faceCount);
}
@@ -4883,7 +5171,8 @@ struct PlanarCharts {
uint32_t nextRegionFace(uint32_t face) const { return m_nextRegionFace[face]; }
float regionArea(uint32_t region) const { return m_regionAreas[region]; }
- void compute() {
+ void compute()
+ {
const uint32_t faceCount = m_data.mesh->faceCount();
// Precompute regions of coplanar incident faces.
m_regionFirstFace.clear();
@@ -4983,7 +5272,8 @@ struct PlanarCharts {
if (!createChart)
break;
face = m_nextRegionFace[face];
- } while (face != firstRegionFace);
+ }
+ while (face != firstRegionFace);
// Create a chart.
if (createChart) {
Chart chart;
@@ -4995,13 +5285,15 @@ struct PlanarCharts {
m_chartFaces.push_back(face);
chart.faceCount++;
face = m_nextRegionFace[face];
- } while (face != firstRegionFace);
+ }
+ while (face != firstRegionFace);
m_charts.push_back(chart);
}
}
// Compute basis for each chart using the first face normal (all faces have the same normal).
m_chartBasis.resize(m_charts.size());
- for (uint32_t c = 0; c < m_charts.size(); c++) {
+ for (uint32_t c = 0; c < m_charts.size(); c++)
+ {
const uint32_t face = m_chartFaces[m_charts[c].firstFace];
Basis &basis = m_chartBasis[c];
basis.normal = m_data.faceNormals[face];
@@ -5011,7 +5303,8 @@ struct PlanarCharts {
}
private:
- struct Chart {
+ struct Chart
+ {
uint32_t firstFace, faceCount;
};
@@ -5025,11 +5318,12 @@ private:
Array<Basis> m_chartBasis;
};
-struct ClusteredCharts {
- ClusteredCharts(AtlasData &data, const PlanarCharts &planarCharts) :
- m_data(data), m_planarCharts(planarCharts), m_texcoords(MemTag::SegmentAtlasMeshData), m_bestTriangles(10), m_placingSeeds(false) {}
+struct ClusteredCharts
+{
+ ClusteredCharts(AtlasData &data, const PlanarCharts &planarCharts) : m_data(data), m_planarCharts(planarCharts), m_texcoords(MemTag::SegmentAtlasMeshData), m_bestTriangles(10), m_placingSeeds(false) {}
- ~ClusteredCharts() {
+ ~ClusteredCharts()
+ {
const uint32_t chartCount = m_charts.size();
for (uint32_t i = 0; i < chartCount; i++) {
m_charts[i]->~Chart();
@@ -5041,7 +5335,8 @@ struct ClusteredCharts {
ConstArrayView<uint32_t> chartFaces(uint32_t chartIndex) const { return m_charts[chartIndex]->faces; }
const Basis &chartBasis(uint32_t chartIndex) const { return m_charts[chartIndex]->basis; }
- void compute() {
+ void compute()
+ {
const uint32_t faceCount = m_data.mesh->faceCount();
m_facesLeft = 0;
for (uint32_t i = 0; i < faceCount; i++) {
@@ -5087,9 +5382,9 @@ struct ClusteredCharts {
}
private:
- struct Chart {
- Chart() :
- faces(MemTag::SegmentAtlasChartFaces) {}
+ struct Chart
+ {
+ Chart() : faces(MemTag::SegmentAtlasChartFaces) {}
int id = -1;
Basis basis; // Best fit normal.
@@ -5103,7 +5398,8 @@ private:
uint32_t seed;
};
- void placeSeeds(float threshold) {
+ void placeSeeds(float threshold)
+ {
XA_PROFILE_START(clusteredChartsPlaceSeeds)
m_placingSeeds = true;
// Instead of using a predefiened number of seeds:
@@ -5119,7 +5415,8 @@ private:
}
// Returns true if any of the charts can grow more.
- void growCharts(float threshold) {
+ void growCharts(float threshold)
+ {
XA_PROFILE_START(clusteredChartsGrow)
for (;;) {
if (m_facesLeft == 0)
@@ -5165,7 +5462,8 @@ private:
XA_PROFILE_END(clusteredChartsGrow)
}
- void resetCharts() {
+ void resetCharts()
+ {
XA_PROFILE_START(clusteredChartsReset)
const uint32_t faceCount = m_data.mesh->faceCount();
for (uint32_t i = 0; i < faceCount; i++) {
@@ -5196,7 +5494,8 @@ private:
XA_PROFILE_END(clusteredChartsReset)
}
- bool relocateSeeds() {
+ bool relocateSeeds()
+ {
XA_PROFILE_START(clusteredChartsRelocateSeeds)
bool anySeedChanged = false;
const uint32_t chartCount = m_charts.size();
@@ -5209,7 +5508,8 @@ private:
return anySeedChanged;
}
- void fillHoles(float threshold) {
+ void fillHoles(float threshold)
+ {
XA_PROFILE_START(clusteredChartsFillHoles)
while (m_facesLeft > 0)
createChart(threshold);
@@ -5217,7 +5517,8 @@ private:
}
#if XA_MERGE_CHARTS
- void mergeCharts() {
+ void mergeCharts()
+ {
XA_PROFILE_START(clusteredChartsMerge)
const uint32_t chartCount = m_charts.size();
// Merge charts progressively until there's none left to merge.
@@ -5286,7 +5587,7 @@ private:
if (m_sharedBoundaryLengthsNoSeams[cc] > 0.0f && equal(m_sharedBoundaryLengthsNoSeams[cc], chart2->boundaryLength, kEpsilon))
goto merge;
if (m_sharedBoundaryLengths[cc] > 0.2f * max(0.0f, chart->boundaryLength - externalBoundaryLength) ||
- m_sharedBoundaryLengths[cc] > 0.75f * chart2->boundaryLength)
+ m_sharedBoundaryLengths[cc] > 0.75f * chart2->boundaryLength)
goto merge;
continue;
merge:
@@ -5324,7 +5625,8 @@ private:
#endif
private:
- void createChart(float threshold) {
+ void createChart(float threshold)
+ {
Chart *chart = XA_NEW(MemTag::Default, Chart);
chart->id = (int)m_charts.size();
m_charts.push_back(chart);
@@ -5355,13 +5657,15 @@ private:
}
}
- bool isChartBoundaryEdge(const Chart *chart, uint32_t edge) const {
+ bool isChartBoundaryEdge(const Chart *chart, uint32_t edge) const
+ {
const uint32_t oppositeEdge = m_data.mesh->oppositeEdge(edge);
const uint32_t oppositeFace = meshEdgeFace(oppositeEdge);
return oppositeEdge == UINT32_MAX || m_faceCharts[oppositeFace] != chart->id;
}
- bool computeChartBasis(Chart *chart, Basis *basis) {
+ bool computeChartBasis(Chart *chart, Basis *basis)
+ {
const uint32_t faceCount = chart->faces.size();
m_tempPoints.resize(chart->faces.size() * 3);
for (uint32_t i = 0; i < faceCount; i++) {
@@ -5372,7 +5676,8 @@ private:
return Fit::computeBasis(m_tempPoints, basis);
}
- bool isFaceFlipped(uint32_t face) const {
+ bool isFaceFlipped(uint32_t face) const
+ {
const Vector2 &v1 = m_texcoords[face * 3 + 0];
const Vector2 &v2 = m_texcoords[face * 3 + 1];
const Vector2 &v3 = m_texcoords[face * 3 + 2];
@@ -5380,7 +5685,8 @@ private:
return parametricArea < 0.0f;
}
- void parameterizeChart(const Chart *chart) {
+ void parameterizeChart(const Chart *chart)
+ {
const uint32_t faceCount = chart->faces.size();
for (uint32_t i = 0; i < faceCount; i++) {
const uint32_t face = chart->faces[i];
@@ -5393,7 +5699,8 @@ private:
}
// m_faceCharts for the chart faces must be set to the chart ID. Needed to compute boundary edges.
- bool isChartParameterizationValid(const Chart *chart) {
+ bool isChartParameterizationValid(const Chart *chart)
+ {
const uint32_t faceCount = chart->faces.size();
// Check for flipped faces in the parameterization. OK if all are flipped.
uint32_t flippedFaceCount = 0;
@@ -5427,7 +5734,8 @@ private:
return true;
}
- bool addFaceToChart(Chart *chart, uint32_t face) {
+ bool addFaceToChart(Chart *chart, uint32_t face)
+ {
XA_DEBUG_ASSERT(!m_data.isFaceInChart.get(face));
const uint32_t oldFaceCount = chart->faces.size();
const bool firstFace = oldFaceCount == 0;
@@ -5505,7 +5813,8 @@ private:
}
// Returns true if the seed has changed.
- bool relocateSeed(Chart *chart) {
+ bool relocateSeed(Chart *chart)
+ {
// Find the first N triangles that fit the proxy best.
const uint32_t faceCount = chart->faces.size();
m_bestTriangles.clear();
@@ -5535,7 +5844,8 @@ private:
}
// Cost is combined metrics * weights.
- float computeCost(Chart *chart, uint32_t face) const {
+ float computeCost(Chart *chart, uint32_t face) const
+ {
// Estimate boundary length and area:
const float newChartArea = computeArea(chart, face);
const float newBoundaryLength = computeBoundaryLength(chart, face);
@@ -5571,20 +5881,23 @@ private:
// Returns a value in [0-1].
// 0 if face normal is coplanar to the chart's best fit normal.
// 1 if face normal is perpendicular.
- float computeNormalDeviationMetric(Chart *chart, uint32_t face) const {
+ float computeNormalDeviationMetric(Chart *chart, uint32_t face) const
+ {
// All faces in coplanar regions have the same normal, can use any face.
const Vector3 faceNormal = m_data.faceNormals[face];
// Use plane fitting metric for now:
return min(1.0f - dot(faceNormal, chart->basis.normal), 1.0f); // @@ normal deviations should be weighted by face area
}
- float computeRoundnessMetric(Chart *chart, float newBoundaryLength, float newChartArea) const {
+ float computeRoundnessMetric(Chart *chart, float newBoundaryLength, float newChartArea) const
+ {
const float oldRoundness = square(chart->boundaryLength) / chart->area;
const float newRoundness = square(newBoundaryLength) / newChartArea;
return 1.0f - oldRoundness / newRoundness;
}
- float computeStraightnessMetric(Chart *chart, uint32_t firstFace) const {
+ float computeStraightnessMetric(Chart *chart, uint32_t firstFace) const
+ {
float l_out = 0.0f; // Length of firstFace planar region boundary that doesn't border the chart.
float l_in = 0.0f; // Length that does border the chart.
const uint32_t planarRegionId = m_planarCharts.regionIdFromFace(firstFace);
@@ -5613,7 +5926,8 @@ private:
#endif
}
- bool isNormalSeam(uint32_t edge) const {
+ bool isNormalSeam(uint32_t edge) const
+ {
const uint32_t oppositeEdge = m_data.mesh->oppositeEdge(edge);
if (oppositeEdge == UINT32_MAX)
return false; // boundary edge
@@ -5633,7 +5947,8 @@ private:
return !equal(m_data.faceNormals[f0], m_data.faceNormals[f1], kNormalEpsilon);
}
- float computeNormalSeamMetric(Chart *chart, uint32_t firstFace) const {
+ float computeNormalSeamMetric(Chart *chart, uint32_t firstFace) const
+ {
float seamFactor = 0.0f, totalLength = 0.0f;
uint32_t face = firstFace;
for (;;) {
@@ -5673,7 +5988,8 @@ private:
return seamFactor / totalLength;
}
- float computeTextureSeamMetric(Chart *chart, uint32_t firstFace) const {
+ float computeTextureSeamMetric(Chart *chart, uint32_t firstFace) const
+ {
float seamLength = 0.0f, totalLength = 0.0f;
uint32_t face = firstFace;
for (;;) {
@@ -5699,7 +6015,8 @@ private:
return seamLength / totalLength;
}
- float computeArea(Chart *chart, uint32_t firstFace) const {
+ float computeArea(Chart *chart, uint32_t firstFace) const
+ {
float area = chart->area;
uint32_t face = firstFace;
for (;;) {
@@ -5711,7 +6028,8 @@ private:
return area;
}
- float computeBoundaryLength(Chart *chart, uint32_t firstFace) const {
+ float computeBoundaryLength(Chart *chart, uint32_t firstFace) const
+ {
float boundaryLength = chart->boundaryLength;
// Add new edges, subtract edges shared with the chart.
const uint32_t planarRegionId = m_planarCharts.regionIdFromFace(firstFace);
@@ -5732,10 +6050,11 @@ private:
if (face == firstFace)
break;
}
- return max(0.0f, boundaryLength); // @@ Hack!
+ return max(0.0f, boundaryLength); // @@ Hack!
}
- bool mergeChart(Chart *owner, Chart *chart, float sharedBoundaryLength) {
+ bool mergeChart(Chart *owner, Chart *chart, float sharedBoundaryLength)
+ {
const uint32_t oldOwnerFaceCount = owner->faces.size();
const uint32_t chartFaceCount = chart->faces.size();
owner->faces.push_back(chart->faces);
@@ -5793,8 +6112,10 @@ private:
bool m_placingSeeds;
};
-struct ChartGeneratorType {
- enum Enum {
+struct ChartGeneratorType
+{
+ enum Enum
+ {
OriginalUv,
Planar,
Clustered,
@@ -5802,15 +6123,17 @@ struct ChartGeneratorType {
};
};
-struct Atlas {
- Atlas() :
- m_originalUvCharts(m_data), m_planarCharts(m_data), m_clusteredCharts(m_data, m_planarCharts) {}
+struct Atlas
+{
+ Atlas() : m_originalUvCharts(m_data), m_planarCharts(m_data), m_clusteredCharts(m_data, m_planarCharts) {}
- uint32_t chartCount() const {
+ uint32_t chartCount() const
+ {
return m_originalUvCharts.chartCount() + m_planarCharts.chartCount() + m_clusteredCharts.chartCount();
}
- ConstArrayView<uint32_t> chartFaces(uint32_t chartIndex) const {
+ ConstArrayView<uint32_t> chartFaces(uint32_t chartIndex) const
+ {
if (chartIndex < m_originalUvCharts.chartCount())
return m_originalUvCharts.chartFaces(chartIndex);
chartIndex -= m_originalUvCharts.chartCount();
@@ -5820,7 +6143,8 @@ struct Atlas {
return m_clusteredCharts.chartFaces(chartIndex);
}
- const Basis &chartBasis(uint32_t chartIndex) const {
+ const Basis &chartBasis(uint32_t chartIndex) const
+ {
if (chartIndex < m_originalUvCharts.chartCount())
return m_originalUvCharts.chartBasis(chartIndex);
chartIndex -= m_originalUvCharts.chartCount();
@@ -5830,7 +6154,8 @@ struct Atlas {
return m_clusteredCharts.chartBasis(chartIndex);
}
- ChartGeneratorType::Enum chartGeneratorType(uint32_t chartIndex) const {
+ ChartGeneratorType::Enum chartGeneratorType(uint32_t chartIndex) const
+ {
if (chartIndex < m_originalUvCharts.chartCount())
return ChartGeneratorType::OriginalUv;
chartIndex -= m_originalUvCharts.chartCount();
@@ -5839,7 +6164,8 @@ struct Atlas {
return ChartGeneratorType::Clustered;
}
- void reset(const Mesh *mesh, const ChartOptions &options) {
+ void reset(const Mesh *mesh, const ChartOptions &options)
+ {
XA_PROFILE_START(buildAtlasInit)
m_data.options = options;
m_data.mesh = mesh;
@@ -5847,7 +6173,8 @@ struct Atlas {
XA_PROFILE_END(buildAtlasInit)
}
- void compute() {
+ void compute()
+ {
if (m_data.options.useInputMeshUvs) {
XA_PROFILE_START(originalUvCharts)
m_originalUvCharts.compute();
@@ -5868,17 +6195,19 @@ private:
ClusteredCharts m_clusteredCharts;
};
-struct ComputeUvMeshChartsTaskArgs {
+struct ComputeUvMeshChartsTaskArgs
+{
UvMesh *mesh;
Progress *progress;
};
// Charts are found by floodfilling faces without crossing UV seams.
-struct ComputeUvMeshChartsTask {
- ComputeUvMeshChartsTask(ComputeUvMeshChartsTaskArgs *args) :
- m_mesh(args->mesh), m_progress(args->progress), m_uvToEdgeMap(MemTag::Default, m_mesh->indices.size()), m_faceAssigned(m_mesh->indices.size() / 3) {}
+struct ComputeUvMeshChartsTask
+{
+ ComputeUvMeshChartsTask(ComputeUvMeshChartsTaskArgs *args) : m_mesh(args->mesh), m_progress(args->progress), m_uvToEdgeMap(MemTag::Default, m_mesh->indices.size()), m_faceAssigned(m_mesh->indices.size() / 3) {}
- void run() {
+ void run()
+ {
const uint32_t vertexCount = m_mesh->texcoords.size();
const uint32_t indexCount = m_mesh->indices.size();
const uint32_t faceCount = indexCount / 3;
@@ -5932,7 +6261,8 @@ struct ComputeUvMeshChartsTask {
private:
// The chart at chartIndex doesn't have to exist yet.
- bool canAddFaceToChart(uint32_t chartIndex, uint32_t face) const {
+ bool canAddFaceToChart(uint32_t chartIndex, uint32_t face) const
+ {
if (m_faceAssigned.get(face))
return false; // Already assigned to a chart.
if (m_mesh->faceIgnore.get(face))
@@ -5949,7 +6279,8 @@ private:
return true;
}
- void addFaceToChart(uint32_t chartIndex, uint32_t face) {
+ void addFaceToChart(uint32_t chartIndex, uint32_t face)
+ {
UvMeshChart *chart = m_mesh->charts[chartIndex];
m_faceAssigned.set(face);
chart->faces.push_back(face);
@@ -5960,20 +6291,22 @@ private:
}
}
- UvMesh *const m_mesh;
- Progress *const m_progress;
+ UvMesh * const m_mesh;
+ Progress * const m_progress;
HashMap<Vector2> m_uvToEdgeMap; // Face is edge / 3.
BitArray m_faceAssigned;
};
-static void runComputeUvMeshChartsTask(void * /*groupUserData*/, void *taskUserData) {
+static void runComputeUvMeshChartsTask(void * /*groupUserData*/, void *taskUserData)
+{
XA_PROFILE_START(computeChartsThread)
ComputeUvMeshChartsTask task((ComputeUvMeshChartsTaskArgs *)taskUserData);
task.run();
XA_PROFILE_END(computeChartsThread)
}
-static bool computeUvMeshCharts(TaskScheduler *taskScheduler, ArrayView<UvMesh *> meshes, ProgressFunc progressFunc, void *progressUserData) {
+static bool computeUvMeshCharts(TaskScheduler *taskScheduler, ArrayView<UvMesh *> meshes, ProgressFunc progressFunc, void *progressUserData)
+{
uint32_t totalFaceCount = 0;
for (uint32_t i = 0; i < meshes.length; i++)
totalFaceCount += meshes[i]->indices.size() / 3;
@@ -5981,7 +6314,8 @@ static bool computeUvMeshCharts(TaskScheduler *taskScheduler, ArrayView<UvMesh *
TaskGroupHandle taskGroup = taskScheduler->createTaskGroup(nullptr, meshes.length);
Array<ComputeUvMeshChartsTaskArgs> taskArgs;
taskArgs.resize(meshes.length);
- for (uint32_t i = 0; i < meshes.length; i++) {
+ for (uint32_t i = 0; i < meshes.length; i++)
+ {
ComputeUvMeshChartsTaskArgs &args = taskArgs[i];
args.mesh = meshes[i];
args.progress = &progress;
@@ -5999,7 +6333,8 @@ static bool computeUvMeshCharts(TaskScheduler *taskScheduler, ArrayView<UvMesh *
namespace param {
// Fast sweep in 3 directions
-static bool findApproximateDiameterVertices(Mesh *mesh, uint32_t *a, uint32_t *b) {
+static bool findApproximateDiameterVertices(Mesh *mesh, uint32_t *a, uint32_t *b)
+{
XA_DEBUG_ASSERT(a != nullptr);
XA_DEBUG_ASSERT(b != nullptr);
const uint32_t vertexCount = mesh->vertexCount();
@@ -6056,7 +6391,8 @@ static bool findApproximateDiameterVertices(Mesh *mesh, uint32_t *a, uint32_t *b
// From OpenNL LSCM example.
// Computes the coordinates of the vertices of a triangle in a local 2D orthonormal basis of the triangle's plane.
-static void projectTriangle(Vector3 p0, Vector3 p1, Vector3 p2, Vector2 *z0, Vector2 *z1, Vector2 *z2) {
+static void projectTriangle(Vector3 p0, Vector3 p1, Vector3 p2, Vector2 *z0, Vector2 *z1, Vector2 *z2)
+{
Vector3 X = normalize(p1 - p0);
Vector3 Z = normalize(cross(X, p2 - p0));
Vector3 Y = cross(Z, X);
@@ -6068,24 +6404,28 @@ static void projectTriangle(Vector3 p0, Vector3 p1, Vector3 p2, Vector2 *z0, Vec
// Conformal relations from Brecht Van Lommel (based on ABF):
-static float vec_angle_cos(const Vector3 &v1, const Vector3 &v2, const Vector3 &v3) {
+static float vec_angle_cos(const Vector3 &v1, const Vector3 &v2, const Vector3 &v3)
+{
Vector3 d1 = v1 - v2;
Vector3 d2 = v3 - v2;
return clamp(dot(d1, d2) / (length(d1) * length(d2)), -1.0f, 1.0f);
}
-static float vec_angle(const Vector3 &v1, const Vector3 &v2, const Vector3 &v3) {
+static float vec_angle(const Vector3 &v1, const Vector3 &v2, const Vector3 &v3)
+{
float dot = vec_angle_cos(v1, v2, v3);
return acosf(dot);
}
-static void triangle_angles(const Vector3 &v1, const Vector3 &v2, const Vector3 &v3, float *a1, float *a2, float *a3) {
+static void triangle_angles(const Vector3 &v1, const Vector3 &v2, const Vector3 &v3, float *a1, float *a2, float *a3)
+{
*a1 = vec_angle(v3, v1, v2);
*a2 = vec_angle(v1, v2, v3);
*a3 = kPi - *a2 - *a1;
}
-static bool setup_abf_relations(opennl::NLContext *context, int id0, int id1, int id2, const Vector3 &p0, const Vector3 &p1, const Vector3 &p2) {
+static bool setup_abf_relations(opennl::NLContext *context, int id0, int id1, int id2, const Vector3 &p0, const Vector3 &p1, const Vector3 &p2)
+{
// @@ IC: Wouldn't it be more accurate to return cos and compute 1-cos^2?
// It does indeed seem to be a little bit more robust.
// @@ Need to revisit this more carefully!
@@ -6142,7 +6482,8 @@ static bool setup_abf_relations(opennl::NLContext *context, int id0, int id1, in
return true;
}
-static bool computeLeastSquaresConformalMap(Mesh *mesh) {
+static bool computeLeastSquaresConformalMap(Mesh *mesh)
+{
uint32_t lockedVertex0, lockedVertex1;
if (!findApproximateDiameterVertices(mesh, &lockedVertex0, &lockedVertex1)) {
// Mesh has no boundaries.
@@ -6189,16 +6530,16 @@ static bool computeLeastSquaresConformalMap(Mesh *mesh) {
// Note : b = 0
// Real part
opennl::nlBegin(context, NL_ROW);
- opennl::nlCoefficient(context, u0_id, -a + c);
- opennl::nlCoefficient(context, v0_id, b - d);
- opennl::nlCoefficient(context, u1_id, -c);
- opennl::nlCoefficient(context, v1_id, d);
+ opennl::nlCoefficient(context, u0_id, -a+c) ;
+ opennl::nlCoefficient(context, v0_id, b-d) ;
+ opennl::nlCoefficient(context, u1_id, -c) ;
+ opennl::nlCoefficient(context, v1_id, d) ;
opennl::nlCoefficient(context, u2_id, a);
opennl::nlEnd(context, NL_ROW);
// Imaginary part
opennl::nlBegin(context, NL_ROW);
- opennl::nlCoefficient(context, u0_id, -b + d);
- opennl::nlCoefficient(context, v0_id, -a + c);
+ opennl::nlCoefficient(context, u0_id, -b+d);
+ opennl::nlCoefficient(context, v0_id, -a+c);
opennl::nlCoefficient(context, u1_id, -d);
opennl::nlCoefficient(context, v1_id, -c);
opennl::nlCoefficient(context, v2_id, a);
@@ -6222,8 +6563,10 @@ static bool computeLeastSquaresConformalMap(Mesh *mesh) {
return true;
}
-struct PiecewiseParam {
- void reset(const Mesh *mesh) {
+struct PiecewiseParam
+{
+ void reset(const Mesh *mesh)
+ {
m_mesh = mesh;
const uint32_t faceCount = m_mesh->faceCount();
const uint32_t vertexCount = m_mesh->vertexCount();
@@ -6241,7 +6584,8 @@ struct PiecewiseParam {
ConstArrayView<uint32_t> chartFaces() const { return m_patch; }
ConstArrayView<Vector2> texcoords() const { return m_texcoords; }
- bool computeChart() {
+ bool computeChart()
+ {
// Clear per-patch state.
m_patch.clear();
m_candidates.clear();
@@ -6370,7 +6714,8 @@ struct PiecewiseParam {
}
private:
- struct Candidate {
+ struct Candidate
+ {
uint32_t face, vertex;
Candidate *prev, *next; // The previous/next candidate with the same vertex.
Vector2 position;
@@ -6380,14 +6725,10 @@ private:
float patchVertexOrient;
};
- struct CandidateIterator {
- CandidateIterator(Candidate *head) :
- m_current(head) { XA_DEBUG_ASSERT(!head->prev); }
- void advance() {
- if (m_current != nullptr) {
- m_current = m_current->next;
- }
- }
+ struct CandidateIterator
+ {
+ CandidateIterator(Candidate *head) : m_current(head) { XA_DEBUG_ASSERT(!head->prev); }
+ void advance() { if (m_current != nullptr) { m_current = m_current->next; } }
bool isDone() const { return !m_current; }
Candidate *current() { return m_current; }
@@ -6406,7 +6747,8 @@ private:
UniformGrid2 m_boundaryGrid;
Array<uint32_t> m_newBoundaryEdges, m_ignoreBoundaryEdges; // Temp arrays used when testing for boundary intersection.
- void addFaceToPatch(uint32_t face) {
+ void addFaceToPatch(uint32_t face)
+ {
XA_DEBUG_ASSERT(!m_faceInPatch.get(face));
XA_DEBUG_ASSERT(!m_faceInAnyPatch.get(face));
m_patch.push_back(face);
@@ -6446,7 +6788,8 @@ private:
}
}
- void addCandidateFace(uint32_t patchEdge, float patchVertexOrient, uint32_t face, uint32_t edge, uint32_t freeVertex) {
+ void addCandidateFace(uint32_t patchEdge, float patchVertexOrient, uint32_t face, uint32_t edge, uint32_t freeVertex)
+ {
XA_DEBUG_ASSERT(!m_faceToCandidate[face]);
Vector2 texcoords[3];
orthoProjectFace(face, texcoords);
@@ -6549,7 +6892,8 @@ private:
it.current()->maxCost = maxCost;
}
- Candidate *linkedCandidateHead(Candidate *candidate) {
+ Candidate *linkedCandidateHead(Candidate *candidate)
+ {
Candidate *current = candidate;
for (;;) {
if (!current->prev)
@@ -6559,7 +6903,8 @@ private:
return current;
}
- void removeLinkedCandidates(Candidate *head) {
+ void removeLinkedCandidates(Candidate *head)
+ {
XA_DEBUG_ASSERT(!head->prev);
Candidate *current = head;
while (current) {
@@ -6576,7 +6921,8 @@ private:
}
}
- void orthoProjectFace(uint32_t face, Vector2 *texcoords) const {
+ void orthoProjectFace(uint32_t face, Vector2 *texcoords) const
+ {
const Vector3 normal = -m_mesh->computeFaceNormal(face);
const Vector3 tangent = normalize(m_mesh->position(m_mesh->vertexAt(face * 3 + 1)) - m_mesh->position(m_mesh->vertexAt(face * 3 + 0)));
const Vector3 bitangent = cross(normal, tangent);
@@ -6586,14 +6932,16 @@ private:
}
}
- float parametricArea(const Vector2 *texcoords) const {
+ float parametricArea(const Vector2 *texcoords) const
+ {
const Vector2 &v1 = texcoords[0];
const Vector2 &v2 = texcoords[1];
const Vector2 &v3 = texcoords[2];
return ((v2.x - v1.x) * (v3.y - v1.y) - (v3.x - v1.x) * (v2.y - v1.y)) * 0.5f;
}
- float computeStretch(Vector3 p1, Vector3 p2, Vector3 p3, Vector2 t1, Vector2 t2, Vector2 t3) const {
+ float computeStretch(Vector3 p1, Vector3 p2, Vector3 p3, Vector2 t1, Vector2 t2, Vector2 t3) const
+ {
float parametricArea = ((t2.y - t1.y) * (t3.x - t1.x) - (t3.y - t1.y) * (t2.x - t1.x)) * 0.5f;
if (isZero(parametricArea, kAreaEpsilon))
return FLT_MAX;
@@ -6607,13 +6955,15 @@ private:
}
// Return value is positive if the point is one side of the edge, negative if on the other side.
- float orientToEdge(Vector2 edgeVertex0, Vector2 edgeVertex1, Vector2 point) const {
+ float orientToEdge(Vector2 edgeVertex0, Vector2 edgeVertex1, Vector2 point) const
+ {
return (edgeVertex0.x - point.x) * (edgeVertex1.y - point.y) - (edgeVertex0.y - point.y) * (edgeVertex1.x - point.x);
}
};
// Estimate quality of existing parameterization.
-struct Quality {
+struct Quality
+{
// computeBoundaryIntersection
bool boundaryIntersection = false;
@@ -6630,7 +6980,8 @@ struct Quality {
float conformalMetric = 0.0f;
float authalicMetric = 0.0f;
- void computeBoundaryIntersection(const Mesh *mesh, UniformGrid2 &boundaryGrid) {
+ void computeBoundaryIntersection(const Mesh *mesh, UniformGrid2 &boundaryGrid)
+ {
const Array<uint32_t> &boundaryEdges = mesh->boundaryEdges();
const uint32_t boundaryEdgeCount = boundaryEdges.size();
boundaryGrid.reset(mesh->texcoords(), mesh->indices(), boundaryEdgeCount);
@@ -6646,7 +6997,8 @@ struct Quality {
#endif
}
- void computeFlippedFaces(const Mesh *mesh, Array<uint32_t> *flippedFaces) {
+ void computeFlippedFaces(const Mesh *mesh, Array<uint32_t> *flippedFaces)
+ {
totalTriangleCount = flippedTriangleCount = zeroAreaTriangleCount = 0;
if (flippedFaces)
flippedFaces->clear();
@@ -6682,7 +7034,8 @@ struct Quality {
flippedFaces->clear();
flippedTriangleCount = 0;
}
- if (flippedTriangleCount > totalTriangleCount / 2) {
+ if (flippedTriangleCount > totalTriangleCount / 2)
+ {
// If more than half the triangles are flipped, reverse the flipped / not flipped classification.
flippedTriangleCount = totalTriangleCount - flippedTriangleCount;
if (flippedFaces) {
@@ -6704,7 +7057,8 @@ struct Quality {
}
}
- void computeMetrics(const Mesh *mesh) {
+ void computeMetrics(const Mesh *mesh)
+ {
totalGeometricArea = totalParametricArea = 0.0f;
stretchMetric = maxStretchMetric = conformalMetric = authalicMetric = 0.0f;
const uint32_t faceCount = mesh->faceCount();
@@ -6736,7 +7090,7 @@ struct Quality {
const float a = dot(Ss, Ss); // E
const float b = dot(Ss, St); // F
const float c = dot(St, St); // G
- // Compute eigen-values of the first fundamental form:
+ // Compute eigen-values of the first fundamental form:
const float sigma1 = sqrtf(0.5f * max(0.0f, a + c - sqrtf(square(a - c) + 4 * square(b)))); // gamma uppercase, min eigenvalue.
const float sigma2 = sqrtf(0.5f * max(0.0f, a + c + sqrtf(square(a - c) + 4 * square(b)))); // gamma lowercase, max eigenvalue.
XA_ASSERT(sigma2 > sigma1 || equal(sigma1, sigma2, kEpsilon));
@@ -6767,22 +7121,24 @@ struct Quality {
if (totalGeometricArea > 0.0f) {
const float normFactor = sqrtf(totalParametricArea / totalGeometricArea);
stretchMetric = sqrtf(stretchMetric / totalGeometricArea) * normFactor;
- maxStretchMetric *= normFactor;
+ maxStretchMetric *= normFactor;
conformalMetric = sqrtf(conformalMetric / totalGeometricArea);
authalicMetric = sqrtf(authalicMetric / totalGeometricArea);
}
}
};
-struct ChartCtorBuffers {
+struct ChartCtorBuffers
+{
Array<uint32_t> chartMeshIndices;
Array<uint32_t> unifiedMeshIndices;
};
-class Chart {
+class Chart
+{
public:
- Chart(const Basis &basis, segment::ChartGeneratorType::Enum generatorType, ConstArrayView<uint32_t> faces, const Mesh *sourceMesh, uint32_t chartGroupId, uint32_t chartId) :
- m_basis(basis), m_unifiedMesh(nullptr), m_type(ChartType::LSCM), m_generatorType(generatorType), m_tjunctionCount(0), m_originalVertexCount(0), m_isInvalid(false) {
+ Chart(const Basis &basis, segment::ChartGeneratorType::Enum generatorType, ConstArrayView<uint32_t> faces, const Mesh *sourceMesh, uint32_t chartGroupId, uint32_t chartId) : m_basis(basis), m_unifiedMesh(nullptr), m_type(ChartType::LSCM), m_generatorType(generatorType), m_tjunctionCount(0), m_originalVertexCount(0), m_isInvalid(false)
+ {
XA_UNUSED(chartGroupId);
XA_UNUSED(chartId);
m_faceToSourceFaceMap.copyFrom(faces.data, faces.length);
@@ -6813,8 +7169,7 @@ public:
m_chartVertexToUnifiedVertexMap.push_back(unifiedVertex);
m_originalVertexCount++;
}
- m_originalIndices[f * 3 + i] = sourceVertexToChartVertexMap.get(sourceVertex);
- ;
+ m_originalIndices[f * 3 + i] = sourceVertexToChartVertexMap.get(sourceVertex);;
XA_DEBUG_ASSERT(m_originalIndices[f * 3 + i] != UINT32_MAX);
unifiedIndices[i] = sourceVertexToUnifiedVertexMap.get(sourceUnifiedVertex);
XA_DEBUG_ASSERT(unifiedIndices[i] != UINT32_MAX);
@@ -6838,8 +7193,8 @@ public:
#endif
}
- Chart(ChartCtorBuffers &buffers, const Chart *parent, const Mesh *parentMesh, ConstArrayView<uint32_t> faces, ConstArrayView<Vector2> texcoords, const Mesh *sourceMesh) :
- m_unifiedMesh(nullptr), m_type(ChartType::Piecewise), m_generatorType(segment::ChartGeneratorType::Piecewise), m_tjunctionCount(0), m_originalVertexCount(0), m_isInvalid(false) {
+ Chart(ChartCtorBuffers &buffers, const Chart *parent, const Mesh *parentMesh, ConstArrayView<uint32_t> faces, ConstArrayView<Vector2> texcoords, const Mesh *sourceMesh) : m_unifiedMesh(nullptr), m_type(ChartType::Piecewise), m_generatorType(segment::ChartGeneratorType::Piecewise), m_tjunctionCount(0), m_originalVertexCount(0), m_isInvalid(false)
+ {
const uint32_t faceCount = faces.length;
m_faceToSourceFaceMap.resize(faceCount);
for (uint32_t i = 0; i < faceCount; i++)
@@ -6886,7 +7241,8 @@ public:
backupTexcoords();
}
- ~Chart() {
+ ~Chart()
+ {
if (m_unifiedMesh) {
m_unifiedMesh->~Mesh();
XA_FREE(m_unifiedMesh);
@@ -6914,7 +7270,8 @@ public:
ConstArrayView<uint32_t> originalVertices() const { return m_originalIndices; }
- void parameterize(const ChartOptions &options, UniformGrid2 &boundaryGrid) {
+ void parameterize(const ChartOptions &options, UniformGrid2 &boundaryGrid)
+ {
const uint32_t unifiedVertexCount = m_unifiedMesh->vertexCount();
if (m_generatorType == segment::ChartGeneratorType::OriginalUv) {
} else {
@@ -6938,7 +7295,8 @@ public:
XA_PROFILE_START(parameterizeChartsLSCM)
if (options.paramFunc) {
options.paramFunc(&m_unifiedMesh->position(0).x, &m_unifiedMesh->texcoord(0).x, m_unifiedMesh->vertexCount(), m_unifiedMesh->indices().data, m_unifiedMesh->indexCount());
- } else
+ }
+ else
computeLeastSquaresConformalMap(m_unifiedMesh);
XA_PROFILE_END(parameterizeChartsLSCM)
XA_PROFILE_START(parameterizeChartsEvaluateQuality)
@@ -6980,7 +7338,8 @@ public:
backupTexcoords();
}
- Vector2 computeParametricBounds() const {
+ Vector2 computeParametricBounds() const
+ {
Vector2 minCorner(FLT_MAX, FLT_MAX);
Vector2 maxCorner(-FLT_MAX, -FLT_MAX);
const uint32_t vertexCount = m_unifiedMesh->vertexCount();
@@ -6992,7 +7351,8 @@ public:
}
#if XA_CHECK_PIECEWISE_CHART_QUALITY
- void evaluateQuality(UniformGrid2 &boundaryGrid) {
+ void evaluateQuality(UniformGrid2 &boundaryGrid)
+ {
m_quality.computeBoundaryIntersection(m_unifiedMesh, boundaryGrid);
#if XA_DEBUG_EXPORT_OBJ_INVALID_PARAMETERIZATION
m_quality.computeFlippedFaces(m_unifiedMesh, &m_paramFlippedFaces);
@@ -7004,12 +7364,14 @@ public:
}
#endif
- void restoreTexcoords() {
+ void restoreTexcoords()
+ {
memcpy(m_unifiedMesh->texcoords().data, m_backupTexcoords.data(), m_unifiedMesh->vertexCount() * sizeof(Vector2));
}
private:
- void backupTexcoords() {
+ void backupTexcoords()
+ {
m_backupTexcoords.resize(m_unifiedMesh->vertexCount());
memcpy(m_backupTexcoords.data(), m_unifiedMesh->texcoords().data, m_unifiedMesh->vertexCount() * sizeof(Vector2));
}
@@ -7040,7 +7402,8 @@ private:
bool m_isInvalid;
};
-struct CreateAndParameterizeChartTaskGroupArgs {
+struct CreateAndParameterizeChartTaskGroupArgs
+{
Progress *progress;
ThreadLocal<UniformGrid2> *boundaryGrid;
ThreadLocal<ChartCtorBuffers> *chartBuffers;
@@ -7048,7 +7411,8 @@ struct CreateAndParameterizeChartTaskGroupArgs {
ThreadLocal<PiecewiseParam> *pp;
};
-struct CreateAndParameterizeChartTaskArgs {
+struct CreateAndParameterizeChartTaskArgs
+{
const Basis *basis;
Chart *chart; // output
Array<Chart *> charts; // output (if more than one chart)
@@ -7059,7 +7423,8 @@ struct CreateAndParameterizeChartTaskArgs {
uint32_t chartId;
};
-static void runCreateAndParameterizeChartTask(void *groupUserData, void *taskUserData) {
+static void runCreateAndParameterizeChartTask(void *groupUserData, void *taskUserData)
+{
XA_PROFILE_START(createChartMeshAndParameterizeThread)
auto groupArgs = (CreateAndParameterizeChartTaskGroupArgs *)groupUserData;
auto args = (CreateAndParameterizeChartTaskArgs *)taskUserData;
@@ -7130,13 +7495,15 @@ static void runCreateAndParameterizeChartTask(void *groupUserData, void *taskUse
}
// Set of charts corresponding to mesh faces in the same face group.
-class ChartGroup {
+class ChartGroup
+{
public:
- ChartGroup(uint32_t id, const Mesh *sourceMesh, const MeshFaceGroups *sourceMeshFaceGroups, MeshFaceGroups::Handle faceGroup) :
- m_id(id), m_sourceMesh(sourceMesh), m_sourceMeshFaceGroups(sourceMeshFaceGroups), m_faceGroup(faceGroup) {
+ ChartGroup(uint32_t id, const Mesh *sourceMesh, const MeshFaceGroups *sourceMeshFaceGroups, MeshFaceGroups::Handle faceGroup) : m_id(id), m_sourceMesh(sourceMesh), m_sourceMeshFaceGroups(sourceMeshFaceGroups), m_faceGroup(faceGroup)
+ {
}
- ~ChartGroup() {
+ ~ChartGroup()
+ {
for (uint32_t i = 0; i < m_charts.size(); i++) {
m_charts[i]->~Chart();
XA_FREE(m_charts[i]);
@@ -7147,7 +7514,8 @@ public:
Chart *chartAt(uint32_t i) const { return m_charts[i]; }
uint32_t faceCount() const { return m_sourceMeshFaceGroups->faceCount(m_faceGroup); }
- void computeCharts(TaskScheduler *taskScheduler, const ChartOptions &options, Progress *progress, segment::Atlas &atlas, ThreadLocal<UniformGrid2> *boundaryGrid, ThreadLocal<ChartCtorBuffers> *chartBuffers, ThreadLocal<PiecewiseParam> *piecewiseParam) {
+ void computeCharts(TaskScheduler *taskScheduler, const ChartOptions &options, Progress *progress, segment::Atlas &atlas, ThreadLocal<UniformGrid2> *boundaryGrid, ThreadLocal<ChartCtorBuffers> *chartBuffers, ThreadLocal<PiecewiseParam> *piecewiseParam)
+ {
// This function may be called multiple times, so destroy existing charts.
for (uint32_t i = 0; i < m_charts.size(); i++) {
m_charts[i]->~Chart();
@@ -7291,7 +7659,8 @@ public:
}
private:
- Mesh *createMesh() {
+ Mesh *createMesh()
+ {
XA_DEBUG_ASSERT(m_faceGroup != MeshFaceGroups::kInvalid);
// Create new mesh from the source mesh, using faces that belong to this group.
m_faceToSourceFaceMap.reserve(m_sourceMeshFaceGroups->faceCount(m_faceGroup));
@@ -7345,14 +7714,15 @@ private:
}
const uint32_t m_id;
- const Mesh *const m_sourceMesh;
- const MeshFaceGroups *const m_sourceMeshFaceGroups;
+ const Mesh * const m_sourceMesh;
+ const MeshFaceGroups * const m_sourceMeshFaceGroups;
const MeshFaceGroups::Handle m_faceGroup;
Array<uint32_t> m_faceToSourceFaceMap; // List of faces of the source mesh that belong to this chart group.
Array<Chart *> m_charts;
};
-struct ChartGroupComputeChartsTaskGroupArgs {
+struct ChartGroupComputeChartsTaskGroupArgs
+{
ThreadLocal<segment::Atlas> *atlas;
const ChartOptions *options;
Progress *progress;
@@ -7362,7 +7732,8 @@ struct ChartGroupComputeChartsTaskGroupArgs {
ThreadLocal<PiecewiseParam> *piecewiseParam;
};
-static void runChartGroupComputeChartsTask(void *groupUserData, void *taskUserData) {
+static void runChartGroupComputeChartsTask(void *groupUserData, void *taskUserData)
+{
auto args = (ChartGroupComputeChartsTaskGroupArgs *)groupUserData;
auto chartGroup = (ChartGroup *)taskUserData;
if (args->progress->cancel)
@@ -7372,7 +7743,8 @@ static void runChartGroupComputeChartsTask(void *groupUserData, void *taskUserDa
XA_PROFILE_END(chartGroupComputeChartsThread)
}
-struct MeshComputeChartsTaskGroupArgs {
+struct MeshComputeChartsTaskGroupArgs
+{
ThreadLocal<segment::Atlas> *atlas;
const ChartOptions *options;
Progress *progress;
@@ -7382,7 +7754,8 @@ struct MeshComputeChartsTaskGroupArgs {
ThreadLocal<PiecewiseParam> *piecewiseParam;
};
-struct MeshComputeChartsTaskArgs {
+struct MeshComputeChartsTaskArgs
+{
const Mesh *sourceMesh;
Array<ChartGroup *> *chartGroups; // output
InvalidMeshGeometry *invalidMeshGeometry; // output
@@ -7392,7 +7765,8 @@ struct MeshComputeChartsTaskArgs {
static uint32_t s_faceGroupsCurrentVertex = 0;
#endif
-static void runMeshComputeChartsTask(void *groupUserData, void *taskUserData) {
+static void runMeshComputeChartsTask(void *groupUserData, void *taskUserData)
+{
auto groupArgs = (MeshComputeChartsTaskGroupArgs *)groupUserData;
auto args = (MeshComputeChartsTaskArgs *)taskUserData;
if (groupArgs->progress->cancel)
@@ -7491,12 +7865,13 @@ cleanup:
}
/// An atlas is a set of chart groups.
-class Atlas {
+class Atlas
+{
public:
- Atlas() :
- m_chartsComputed(false) {}
+ Atlas() : m_chartsComputed(false) {}
- ~Atlas() {
+ ~Atlas()
+ {
for (uint32_t i = 0; i < m_meshChartGroups.size(); i++) {
for (uint32_t j = 0; j < m_meshChartGroups[i].size(); j++) {
m_meshChartGroups[i][j]->~ChartGroup();
@@ -7513,11 +7888,13 @@ public:
uint32_t chartGroupCount(uint32_t mesh) const { return m_meshChartGroups[mesh].size(); }
const ChartGroup *chartGroupAt(uint32_t mesh, uint32_t group) const { return m_meshChartGroups[mesh][group]; }
- void addMesh(const Mesh *mesh) {
+ void addMesh(const Mesh *mesh)
+ {
m_meshes.push_back(mesh);
}
- bool computeCharts(TaskScheduler *taskScheduler, const ChartOptions &options, ProgressFunc progressFunc, void *progressUserData) {
+ bool computeCharts(TaskScheduler *taskScheduler, const ChartOptions &options, ProgressFunc progressFunc, void *progressUserData)
+ {
XA_PROFILE_START(computeChartsReal)
#if XA_DEBUG_EXPORT_OBJ_PLANAR_REGIONS
segment::s_planarRegionsCurrentRegion = segment::s_planarRegionsCurrentVertex = 0;
@@ -7591,7 +7968,7 @@ public:
private:
Array<const Mesh *> m_meshes;
Array<InvalidMeshGeometry> m_invalidMeshGeometry; // 1 per mesh.
- Array<Array<ChartGroup *>> m_meshChartGroups;
+ Array<Array<ChartGroup *> > m_meshChartGroups;
bool m_chartsComputed;
};
@@ -7599,15 +7976,17 @@ private:
namespace pack {
-class AtlasImage {
+class AtlasImage
+{
public:
- AtlasImage(uint32_t width, uint32_t height) :
- m_width(width), m_height(height) {
+ AtlasImage(uint32_t width, uint32_t height) : m_width(width), m_height(height)
+ {
m_data.resize(m_width * m_height);
memset(m_data.data(), 0, sizeof(uint32_t) * m_data.size());
}
- void resize(uint32_t width, uint32_t height) {
+ void resize(uint32_t width, uint32_t height)
+ {
Array<uint32_t> data;
data.resize(width * height);
memset(data.data(), 0, sizeof(uint32_t) * data.size());
@@ -7618,7 +7997,8 @@ public:
data.moveTo(m_data);
}
- void addChart(uint32_t chartIndex, const BitImage *image, const BitImage *imageBilinear, const BitImage *imagePadding, int atlas_w, int atlas_h, int offset_x, int offset_y) {
+ void addChart(uint32_t chartIndex, const BitImage *image, const BitImage *imageBilinear, const BitImage *imagePadding, int atlas_w, int atlas_h, int offset_x, int offset_y)
+ {
const int w = image->width();
const int h = image->height();
for (int y = 0; y < h; y++) {
@@ -7644,13 +8024,15 @@ public:
}
}
- void copyTo(uint32_t *dest, uint32_t destWidth, uint32_t destHeight, int padding) const {
+ void copyTo(uint32_t *dest, uint32_t destWidth, uint32_t destHeight, int padding) const
+ {
for (uint32_t y = 0; y < destHeight; y++)
memcpy(&dest[y * destWidth], &m_data[padding + (y + padding) * m_width], destWidth * sizeof(uint32_t));
}
#if XA_DEBUG_EXPORT_ATLAS_IMAGES
- void writeTga(const char *filename, uint32_t width, uint32_t height) const {
+ void writeTga(const char *filename, uint32_t width, uint32_t height) const
+ {
Array<uint8_t> image;
image.resize(width * height * 3);
for (uint32_t y = 0; y < height; y++) {
@@ -7692,7 +8074,8 @@ private:
Array<uint32_t> m_data;
};
-struct Chart {
+struct Chart
+{
int32_t atlasIndex;
uint32_t material;
ConstArrayView<uint32_t> indices;
@@ -7711,12 +8094,14 @@ struct Chart {
uint32_t uniqueVertexCount() const { return uniqueVertices.isEmpty() ? vertices.length : uniqueVertices.size(); }
};
-struct AddChartTaskArgs {
+struct AddChartTaskArgs
+{
param::Chart *paramChart;
Chart *chart; // out
};
-static void runAddChartTask(void *groupUserData, void *taskUserData) {
+static void runAddChartTask(void *groupUserData, void *taskUserData)
+{
XA_PROFILE_START(packChartsAddChartsThread)
auto boundingBox = (ThreadLocal<BoundingBox2D> *)groupUserData;
auto args = (AddChartTaskArgs *)taskUserData;
@@ -7753,8 +8138,10 @@ static void runAddChartTask(void *groupUserData, void *taskUserData) {
XA_PROFILE_END(packChartsAddChartsThread)
}
-struct Atlas {
- ~Atlas() {
+struct Atlas
+{
+ ~Atlas()
+ {
for (uint32_t i = 0; i < m_atlasImages.size(); i++) {
m_atlasImages[i]->~AtlasImage();
XA_FREE(m_atlasImages[i]);
@@ -7778,7 +8165,8 @@ struct Atlas {
const Array<AtlasImage *> &getImages() const { return m_atlasImages; }
float getUtilization(uint32_t atlas) const { return m_utilization[atlas]; }
- void addCharts(TaskScheduler *taskScheduler, param::Atlas *paramAtlas) {
+ void addCharts(TaskScheduler *taskScheduler, param::Atlas *paramAtlas)
+ {
// Count charts.
uint32_t chartCount = 0;
for (uint32_t i = 0; i < paramAtlas->meshCount(); i++) {
@@ -7819,7 +8207,8 @@ struct Atlas {
m_charts[i] = taskArgs[i].chart;
}
- void addUvMeshCharts(UvMeshInstance *mesh) {
+ void addUvMeshCharts(UvMeshInstance *mesh)
+ {
// Copy texcoords from mesh.
mesh->texcoords.resize(mesh->mesh->texcoords.size());
memcpy(mesh->texcoords.data(), mesh->mesh->texcoords.data(), mesh->texcoords.size() * sizeof(Vector2));
@@ -7882,7 +8271,8 @@ struct Atlas {
}
// Pack charts in the smallest possible rectangle.
- bool packCharts(const PackOptions &options, ProgressFunc progressFunc, void *progressUserData) {
+ bool packCharts(const PackOptions &options, ProgressFunc progressFunc, void *progressUserData)
+ {
if (progressFunc) {
if (!progressFunc(ProgressCategory::PackCharts, 0, progressUserData))
return false;
@@ -8116,7 +8506,8 @@ struct Atlas {
int best_x = 0, best_y = 0;
int best_cw = 0, best_ch = 0;
int best_r = 0;
- for (;;) {
+ for (;;)
+ {
#if XA_DEBUG
bool firstChartInBitImage = false;
#endif
@@ -8152,7 +8543,8 @@ struct Atlas {
if (best_x + best_cw > atlasSizes[currentAtlas].x || best_y + best_ch > atlasSizes[currentAtlas].y) {
for (uint32_t j = 0; j < chartStartPositions.size(); j++)
chartStartPositions[j] = Vector2i(0, 0);
- } else {
+ }
+ else {
chartStartPositions[currentAtlas] = Vector2i(best_x, best_y);
}
}
@@ -8240,7 +8632,8 @@ struct Atlas {
}
if (m_utilization.size() > 1) {
XA_PRINT(" %u: %f%% utilization\n", i, m_utilization[i] * 100.0f);
- } else {
+ }
+ else {
XA_PRINT(" %f%% utilization\n", m_utilization[i] * 100.0f);
}
}
@@ -8259,14 +8652,16 @@ struct Atlas {
}
private:
- bool findChartLocation(const PackOptions &options, const Vector2i &startPosition, const BitImage *atlasBitImage, const BitImage *chartBitImage, const BitImage *chartBitImageRotated, int w, int h, int *best_x, int *best_y, int *best_w, int *best_h, int *best_r, uint32_t maxResolution) {
+ bool findChartLocation(const PackOptions &options, const Vector2i &startPosition, const BitImage *atlasBitImage, const BitImage *chartBitImage, const BitImage *chartBitImageRotated, int w, int h, int *best_x, int *best_y, int *best_w, int *best_h, int *best_r, uint32_t maxResolution)
+ {
const int attempts = 4096;
if (options.bruteForce || attempts >= w * h)
return findChartLocation_bruteForce(options, startPosition, atlasBitImage, chartBitImage, chartBitImageRotated, w, h, best_x, best_y, best_w, best_h, best_r, maxResolution);
return findChartLocation_random(options, atlasBitImage, chartBitImage, chartBitImageRotated, w, h, best_x, best_y, best_w, best_h, best_r, attempts, maxResolution);
}
- bool findChartLocation_bruteForce(const PackOptions &options, const Vector2i &startPosition, const BitImage *atlasBitImage, const BitImage *chartBitImage, const BitImage *chartBitImageRotated, int w, int h, int *best_x, int *best_y, int *best_w, int *best_h, int *best_r, uint32_t maxResolution) {
+ bool findChartLocation_bruteForce(const PackOptions &options, const Vector2i &startPosition, const BitImage *atlasBitImage, const BitImage *chartBitImage, const BitImage *chartBitImageRotated, int w, int h, int *best_x, int *best_y, int *best_w, int *best_h, int *best_r, uint32_t maxResolution)
+ {
const int stepSize = options.blockAlign ? 4 : 1;
int best_metric = INT_MAX;
// Try two different orientations.
@@ -8311,7 +8706,8 @@ private:
return best_metric != INT_MAX;
}
- bool findChartLocation_random(const PackOptions &options, const BitImage *atlasBitImage, const BitImage *chartBitImage, const BitImage *chartBitImageRotated, int w, int h, int *best_x, int *best_y, int *best_w, int *best_h, int *best_r, int attempts, uint32_t maxResolution) {
+ bool findChartLocation_random(const PackOptions &options, const BitImage *atlasBitImage, const BitImage *chartBitImage, const BitImage *chartBitImageRotated, int w, int h, int *best_x, int *best_y, int *best_w, int *best_h, int *best_r, int attempts, uint32_t maxResolution)
+ {
bool result = false;
const int BLOCK_SIZE = 4;
int best_metric = INT_MAX;
@@ -8366,7 +8762,8 @@ private:
return result;
}
- void addChart(BitImage *atlasBitImage, const BitImage *chartBitImage, const BitImage *chartBitImageRotated, int atlas_w, int atlas_h, int offset_x, int offset_y, int r) {
+ void addChart(BitImage *atlasBitImage, const BitImage *chartBitImage, const BitImage *chartBitImageRotated, int atlas_w, int atlas_h, int offset_x, int offset_y, int r)
+ {
XA_DEBUG_ASSERT(r == 0 || r == 1);
const BitImage *image = r == 0 ? chartBitImage : chartBitImageRotated;
const int w = image->width();
@@ -8389,7 +8786,8 @@ private:
}
}
- void bilinearExpand(const Chart *chart, BitImage *source, BitImage *dest, BitImage *destRotated, UniformGrid2 &boundaryEdgeGrid) const {
+ void bilinearExpand(const Chart *chart, BitImage *source, BitImage *dest, BitImage *destRotated, UniformGrid2 &boundaryEdgeGrid) const
+ {
boundaryEdgeGrid.reset(chart->vertices, chart->indices);
if (chart->boundaryEdges) {
const uint32_t edgeCount = chart->boundaryEdges->size();
@@ -8444,11 +8842,13 @@ private:
}
}
- struct DrawTriangleCallbackArgs {
+ struct DrawTriangleCallbackArgs
+ {
BitImage *chartBitImage, *chartBitImageRotated;
};
- static bool drawTriangleCallback(void *param, int x, int y) {
+ static bool drawTriangleCallback(void *param, int x, int y)
+ {
auto args = (DrawTriangleCallbackArgs *)param;
args->chartBitImage->set(x, y);
if (args->chartBitImageRotated)
@@ -8471,13 +8871,15 @@ private:
} // namespace internal
// Used to map triangulated polygons back to polygons.
-struct MeshPolygonMapping {
+struct MeshPolygonMapping
+{
internal::Array<uint8_t> faceVertexCount; // Copied from MeshDecl::faceVertexCount.
internal::Array<uint32_t> triangleToPolygonMap; // Triangle index (mesh face index) to polygon index.
internal::Array<uint32_t> triangleToPolygonIndicesMap; // Triangle indices to polygon indices.
};
-struct Context {
+struct Context
+{
Atlas atlas;
internal::Progress *addMeshProgress = nullptr;
internal::TaskGroupHandle addMeshTaskGroup;
@@ -8492,14 +8894,16 @@ struct Context {
bool uvMeshChartsComputed = false;
};
-Atlas *Create() {
+Atlas *Create()
+{
Context *ctx = XA_NEW(internal::MemTag::Default, Context);
memset(&ctx->atlas, 0, sizeof(Atlas));
ctx->taskScheduler = XA_NEW(internal::MemTag::Default, internal::TaskScheduler);
return &ctx->atlas;
}
-static void DestroyOutputMeshes(Context *ctx) {
+static void DestroyOutputMeshes(Context *ctx)
+{
if (!ctx->atlas.meshes)
return;
for (int i = 0; i < (int)ctx->atlas.meshCount; i++) {
@@ -8520,7 +8924,8 @@ static void DestroyOutputMeshes(Context *ctx) {
ctx->atlas.meshes = nullptr;
}
-void Destroy(Atlas *atlas) {
+void Destroy(Atlas *atlas)
+{
XA_DEBUG_ASSERT(atlas);
Context *ctx = (Context *)atlas;
if (atlas->utilization)
@@ -8567,14 +8972,15 @@ void Destroy(Atlas *atlas) {
#endif
}
-static void runAddMeshTask(void *groupUserData, void *taskUserData) {
+static void runAddMeshTask(void *groupUserData, void *taskUserData)
+{
XA_PROFILE_START(addMeshThread)
auto ctx = (Context *)groupUserData;
auto mesh = (internal::Mesh *)taskUserData;
internal::Progress *progress = ctx->addMeshProgress;
if (progress->cancel) {
XA_PROFILE_END(addMeshThread)
- return;
+ return;
}
XA_PROFILE_START(addMeshCreateColocals)
mesh->createColocals();
@@ -8587,32 +8993,37 @@ static void runAddMeshTask(void *groupUserData, void *taskUserData) {
XA_PROFILE_END(addMeshThread)
}
-static internal::Vector3 DecodePosition(const MeshDecl &meshDecl, uint32_t index) {
+static internal::Vector3 DecodePosition(const MeshDecl &meshDecl, uint32_t index)
+{
XA_DEBUG_ASSERT(meshDecl.vertexPositionData);
XA_DEBUG_ASSERT(meshDecl.vertexPositionStride > 0);
return *((const internal::Vector3 *)&((const uint8_t *)meshDecl.vertexPositionData)[meshDecl.vertexPositionStride * index]);
}
-static internal::Vector3 DecodeNormal(const MeshDecl &meshDecl, uint32_t index) {
+static internal::Vector3 DecodeNormal(const MeshDecl &meshDecl, uint32_t index)
+{
XA_DEBUG_ASSERT(meshDecl.vertexNormalData);
XA_DEBUG_ASSERT(meshDecl.vertexNormalStride > 0);
return *((const internal::Vector3 *)&((const uint8_t *)meshDecl.vertexNormalData)[meshDecl.vertexNormalStride * index]);
}
-static internal::Vector2 DecodeUv(const MeshDecl &meshDecl, uint32_t index) {
+static internal::Vector2 DecodeUv(const MeshDecl &meshDecl, uint32_t index)
+{
XA_DEBUG_ASSERT(meshDecl.vertexUvData);
XA_DEBUG_ASSERT(meshDecl.vertexUvStride > 0);
return *((const internal::Vector2 *)&((const uint8_t *)meshDecl.vertexUvData)[meshDecl.vertexUvStride * index]);
}
-static uint32_t DecodeIndex(IndexFormat format, const void *indexData, int32_t offset, uint32_t i) {
+static uint32_t DecodeIndex(IndexFormat format, const void *indexData, int32_t offset, uint32_t i)
+{
XA_DEBUG_ASSERT(indexData);
if (format == IndexFormat::UInt16)
return uint16_t((int32_t)((const uint16_t *)indexData)[i] + offset);
return uint32_t((int32_t)((const uint32_t *)indexData)[i] + offset);
}
-AddMeshError AddMesh(Atlas *atlas, const MeshDecl &meshDecl, uint32_t meshCountHint) {
+AddMeshError AddMesh(Atlas *atlas, const MeshDecl &meshDecl, uint32_t meshCountHint)
+{
XA_DEBUG_ASSERT(atlas);
if (!atlas) {
XA_PRINT_WARNING("AddMesh: atlas is null.\n");
@@ -8630,7 +9041,8 @@ AddMeshError AddMesh(Atlas *atlas, const MeshDecl &meshDecl, uint32_t meshCountH
// Don't know how many times AddMesh will be called, so progress needs to adjusted each time.
if (!ctx->addMeshProgress) {
ctx->addMeshProgress = XA_NEW_ARGS(internal::MemTag::Default, internal::Progress, ProgressCategory::AddMesh, ctx->progressFunc, ctx->progressUserData, 1);
- } else {
+ }
+ else {
ctx->addMeshProgress->setMaxValue(internal::max(ctx->meshes.size() + 1, meshCountHint));
}
XA_PROFILE_START(addMeshCopyData)
@@ -8804,7 +9216,8 @@ AddMeshError AddMesh(Atlas *atlas, const MeshDecl &meshDecl, uint32_t meshCountH
return AddMeshError::Success;
}
-void AddMeshJoin(Atlas *atlas) {
+void AddMeshJoin(Atlas *atlas)
+{
XA_DEBUG_ASSERT(atlas);
if (!atlas) {
XA_PRINT_WARNING("AddMeshJoin: atlas is null.\n");
@@ -8847,7 +9260,8 @@ void AddMeshJoin(Atlas *atlas) {
}
}
-AddMeshError AddUvMesh(Atlas *atlas, const UvMeshDecl &decl) {
+AddMeshError AddUvMesh(Atlas *atlas, const UvMeshDecl &decl)
+{
XA_DEBUG_ASSERT(atlas);
if (!atlas) {
XA_PRINT_WARNING("AddUvMesh: atlas is null.\n");
@@ -8948,7 +9362,8 @@ AddMeshError AddUvMesh(Atlas *atlas, const UvMeshDecl &decl) {
return AddMeshError::Success;
}
-void ComputeCharts(Atlas *atlas, ChartOptions options) {
+void ComputeCharts(Atlas *atlas, ChartOptions options)
+{
if (!atlas) {
XA_PRINT_WARNING("ComputeCharts: atlas is null.\n");
return;
@@ -9136,7 +9551,8 @@ void ComputeCharts(Atlas *atlas, ChartOptions options) {
XA_PRINT_MEM_USAGE
}
-void PackCharts(Atlas *atlas, PackOptions packOptions) {
+void PackCharts(Atlas *atlas, PackOptions packOptions)
+{
// Validate arguments and context state.
if (!atlas) {
XA_PRINT_WARNING("PackCharts: atlas is null.\n");
@@ -9177,7 +9593,8 @@ void PackCharts(Atlas *atlas, PackOptions packOptions) {
if (!ctx->uvMeshInstances.isEmpty()) {
for (uint32_t i = 0; i < ctx->uvMeshInstances.size(); i++)
packAtlas.addUvMeshCharts(ctx->uvMeshInstances[i]);
- } else
+ }
+ else
packAtlas.addCharts(ctx->taskScheduler, &ctx->paramAtlas);
XA_PROFILE_END(packChartsAddCharts)
XA_PROFILE_START(packCharts)
@@ -9455,7 +9872,8 @@ void PackCharts(Atlas *atlas, PackOptions packOptions) {
XA_PRINT_MEM_USAGE
}
-void Generate(Atlas *atlas, ChartOptions chartOptions, PackOptions packOptions) {
+void Generate(Atlas *atlas, ChartOptions chartOptions, PackOptions packOptions)
+{
if (!atlas) {
XA_PRINT_WARNING("Generate: atlas is null.\n");
return;
@@ -9469,7 +9887,8 @@ void Generate(Atlas *atlas, ChartOptions chartOptions, PackOptions packOptions)
PackCharts(atlas, packOptions);
}
-void SetProgressCallback(Atlas *atlas, ProgressFunc progressFunc, void *progressUserData) {
+void SetProgressCallback(Atlas *atlas, ProgressFunc progressFunc, void *progressUserData)
+{
if (!atlas) {
XA_PRINT_WARNING("SetProgressCallback: atlas is null.\n");
return;
@@ -9479,17 +9898,20 @@ void SetProgressCallback(Atlas *atlas, ProgressFunc progressFunc, void *progress
ctx->progressUserData = progressUserData;
}
-void SetAlloc(ReallocFunc reallocFunc, FreeFunc freeFunc) {
+void SetAlloc(ReallocFunc reallocFunc, FreeFunc freeFunc)
+{
internal::s_realloc = reallocFunc;
internal::s_free = freeFunc;
}
-void SetPrint(PrintFunc print, bool verbose) {
+void SetPrint(PrintFunc print, bool verbose)
+{
internal::s_print = print;
internal::s_printVerbose = verbose;
}
-const char *StringForEnum(AddMeshError error) {
+const char *StringForEnum(AddMeshError error)
+{
if (error == AddMeshError::Error)
return "Unspecified error";
if (error == AddMeshError::IndexOutOfRange)
@@ -9501,7 +9923,8 @@ const char *StringForEnum(AddMeshError error) {
return "Success";
}
-const char *StringForEnum(ProgressCategory category) {
+const char *StringForEnum(ProgressCategory category)
+{
if (category == ProgressCategory::AddMesh)
return "Adding mesh(es)";
if (category == ProgressCategory::ComputeCharts)
@@ -9529,76 +9952,93 @@ static_assert(sizeof(xatlas::PackOptions) == sizeof(xatlasPackOptions), "xatlasP
extern "C" {
#endif
-xatlasAtlas *xatlasCreate() {
+xatlasAtlas *xatlasCreate()
+{
return (xatlasAtlas *)xatlas::Create();
}
-void xatlasDestroy(xatlasAtlas *atlas) {
+void xatlasDestroy(xatlasAtlas *atlas)
+{
xatlas::Destroy((xatlas::Atlas *)atlas);
}
-xatlasAddMeshError xatlasAddMesh(xatlasAtlas *atlas, const xatlasMeshDecl *meshDecl, uint32_t meshCountHint) {
+xatlasAddMeshError xatlasAddMesh(xatlasAtlas *atlas, const xatlasMeshDecl *meshDecl, uint32_t meshCountHint)
+{
return (xatlasAddMeshError)xatlas::AddMesh((xatlas::Atlas *)atlas, *(const xatlas::MeshDecl *)meshDecl, meshCountHint);
}
-void xatlasAddMeshJoin(xatlasAtlas *atlas) {
+void xatlasAddMeshJoin(xatlasAtlas *atlas)
+{
xatlas::AddMeshJoin((xatlas::Atlas *)atlas);
}
-xatlasAddMeshError xatlasAddUvMesh(xatlasAtlas *atlas, const xatlasUvMeshDecl *decl) {
+xatlasAddMeshError xatlasAddUvMesh(xatlasAtlas *atlas, const xatlasUvMeshDecl *decl)
+{
return (xatlasAddMeshError)xatlas::AddUvMesh((xatlas::Atlas *)atlas, *(const xatlas::UvMeshDecl *)decl);
}
-void xatlasComputeCharts(xatlasAtlas *atlas, const xatlasChartOptions *chartOptions) {
+void xatlasComputeCharts(xatlasAtlas *atlas, const xatlasChartOptions *chartOptions)
+{
xatlas::ComputeCharts((xatlas::Atlas *)atlas, chartOptions ? *(xatlas::ChartOptions *)chartOptions : xatlas::ChartOptions());
}
-void xatlasPackCharts(xatlasAtlas *atlas, const xatlasPackOptions *packOptions) {
+void xatlasPackCharts(xatlasAtlas *atlas, const xatlasPackOptions *packOptions)
+{
xatlas::PackCharts((xatlas::Atlas *)atlas, packOptions ? *(xatlas::PackOptions *)packOptions : xatlas::PackOptions());
}
-void xatlasGenerate(xatlasAtlas *atlas, const xatlasChartOptions *chartOptions, const xatlasPackOptions *packOptions) {
+void xatlasGenerate(xatlasAtlas *atlas, const xatlasChartOptions *chartOptions, const xatlasPackOptions *packOptions)
+{
xatlas::Generate((xatlas::Atlas *)atlas, chartOptions ? *(xatlas::ChartOptions *)chartOptions : xatlas::ChartOptions(), packOptions ? *(xatlas::PackOptions *)packOptions : xatlas::PackOptions());
}
-void xatlasSetProgressCallback(xatlasAtlas *atlas, xatlasProgressFunc progressFunc, void *progressUserData) {
+void xatlasSetProgressCallback(xatlasAtlas *atlas, xatlasProgressFunc progressFunc, void *progressUserData)
+{
xatlas::ProgressFunc pf;
*(void **)&pf = (void *)progressFunc;
xatlas::SetProgressCallback((xatlas::Atlas *)atlas, pf, progressUserData);
}
-void xatlasSetAlloc(xatlasReallocFunc reallocFunc, xatlasFreeFunc freeFunc) {
+void xatlasSetAlloc(xatlasReallocFunc reallocFunc, xatlasFreeFunc freeFunc)
+{
xatlas::SetAlloc((xatlas::ReallocFunc)reallocFunc, (xatlas::FreeFunc)freeFunc);
}
-void xatlasSetPrint(xatlasPrintFunc print, bool verbose) {
+void xatlasSetPrint(xatlasPrintFunc print, bool verbose)
+{
xatlas::SetPrint((xatlas::PrintFunc)print, verbose);
}
-const char *xatlasAddMeshErrorString(xatlasAddMeshError error) {
+const char *xatlasAddMeshErrorString(xatlasAddMeshError error)
+{
return xatlas::StringForEnum((xatlas::AddMeshError)error);
}
-const char *xatlasProgressCategoryString(xatlasProgressCategory category) {
+const char *xatlasProgressCategoryString(xatlasProgressCategory category)
+{
return xatlas::StringForEnum((xatlas::ProgressCategory)category);
}
-void xatlasMeshDeclInit(xatlasMeshDecl *meshDecl) {
+void xatlasMeshDeclInit(xatlasMeshDecl *meshDecl)
+{
xatlas::MeshDecl init;
memcpy(meshDecl, &init, sizeof(init));
}
-void xatlasUvMeshDeclInit(xatlasUvMeshDecl *uvMeshDecl) {
+void xatlasUvMeshDeclInit(xatlasUvMeshDecl *uvMeshDecl)
+{
xatlas::UvMeshDecl init;
memcpy(uvMeshDecl, &init, sizeof(init));
}
-void xatlasChartOptionsInit(xatlasChartOptions *chartOptions) {
+void xatlasChartOptionsInit(xatlasChartOptions *chartOptions)
+{
xatlas::ChartOptions init;
memcpy(chartOptions, &init, sizeof(init));
}
-void xatlasPackOptionsInit(xatlasPackOptions *packOptions) {
+void xatlasPackOptionsInit(xatlasPackOptions *packOptions)
+{
xatlas::PackOptions init;
memcpy(packOptions, &init, sizeof(init));
}
diff --git a/thirdparty/xatlas/xatlas.h b/thirdparty/xatlas/xatlas.h
index fc40d9d49c..d66a96db21 100644
--- a/thirdparty/xatlas/xatlas.h
+++ b/thirdparty/xatlas/xatlas.h
@@ -36,7 +36,8 @@ Copyright NVIDIA Corporation 2006 -- Ignacio Castano <icastano@nvidia.com>
namespace xatlas {
-enum class ChartType {
+enum class ChartType
+{
Planar,
Ortho,
LSCM,
@@ -45,7 +46,8 @@ enum class ChartType {
};
// A group of connected faces, belonging to a single atlas.
-struct Chart {
+struct Chart
+{
uint32_t *faceArray;
uint32_t atlasIndex; // Sub-atlas index.
uint32_t faceCount;
@@ -54,7 +56,8 @@ struct Chart {
};
// Output vertex.
-struct Vertex {
+struct Vertex
+{
int32_t atlasIndex; // Sub-atlas index. -1 if the vertex doesn't exist in any atlas.
int32_t chartIndex; // -1 if the vertex doesn't exist in any chart.
float uv[2]; // Not normalized - values are in Atlas width and height range.
@@ -62,7 +65,8 @@ struct Vertex {
};
// Output mesh.
-struct Mesh {
+struct Mesh
+{
Chart *chartArray;
uint32_t *indexArray;
Vertex *vertexArray;
@@ -77,7 +81,8 @@ static const uint32_t kImageIsBilinearBit = 0x40000000;
static const uint32_t kImageIsPaddingBit = 0x20000000;
// Empty on creation. Populated after charts are packed.
-struct Atlas {
+struct Atlas
+{
uint32_t *image;
Mesh *meshes; // The output meshes, corresponding to each AddMesh call.
float *utilization; // Normalized atlas texel utilization array. E.g. a value of 0.8 means 20% empty space. atlasCount in length.
@@ -94,13 +99,15 @@ Atlas *Create();
void Destroy(Atlas *atlas);
-enum class IndexFormat {
+enum class IndexFormat
+{
UInt16,
UInt32
};
// Input mesh declaration.
-struct MeshDecl {
+struct MeshDecl
+{
const void *vertexPositionData = nullptr;
const void *vertexNormalData = nullptr; // optional
const void *vertexUvData = nullptr; // optional. The input UVs are provided as a hint to the chart generator.
@@ -131,7 +138,8 @@ struct MeshDecl {
float epsilon = 1.192092896e-07F;
};
-enum class AddMeshError {
+enum class AddMeshError
+{
Success, // No error.
Error, // Unspecified error.
IndexOutOfRange, // An index is >= MeshDecl vertexCount.
@@ -145,7 +153,8 @@ AddMeshError AddMesh(Atlas *atlas, const MeshDecl &meshDecl, uint32_t meshCountH
// Wait for AddMesh async processing to finish. ComputeCharts / Generate call this internally.
void AddMeshJoin(Atlas *atlas);
-struct UvMeshDecl {
+struct UvMeshDecl
+{
const void *vertexUvData = nullptr;
const void *indexData = nullptr; // optional
const uint32_t *faceMaterialData = nullptr; // Optional. Overlapping UVs should be assigned a different material. Must be indexCount / 3 in length.
@@ -161,7 +170,8 @@ AddMeshError AddUvMesh(Atlas *atlas, const UvMeshDecl &decl);
// Custom parameterization function. texcoords initial values are an orthogonal parameterization.
typedef void (*ParameterizeFunc)(const float *positions, float *texcoords, uint32_t vertexCount, const uint32_t *indices, uint32_t indexCount);
-struct ChartOptions {
+struct ChartOptions
+{
ParameterizeFunc paramFunc = nullptr;
float maxChartArea = 0.0f; // Don't grow charts to be larger than this. 0 means no limit.
@@ -184,7 +194,8 @@ struct ChartOptions {
// Call after all AddMesh calls. Can be called multiple times to recompute charts with different options.
void ComputeCharts(Atlas *atlas, ChartOptions options = ChartOptions());
-struct PackOptions {
+struct PackOptions
+{
// Charts larger than this will be scaled down. 0 means no limit.
uint32_t maxChartSize = 0;
@@ -227,7 +238,8 @@ void PackCharts(Atlas *atlas, PackOptions packOptions = PackOptions());
void Generate(Atlas *atlas, ChartOptions chartOptions = ChartOptions(), PackOptions packOptions = PackOptions());
// Progress tracking.
-enum class ProgressCategory {
+enum class ProgressCategory
+{
AddMesh,
ComputeCharts,
PackCharts,
diff --git a/thirdparty/zstd/common/bitstream.h b/thirdparty/zstd/common/bitstream.h
index d9a2730104..2e5a933ad3 100644
--- a/thirdparty/zstd/common/bitstream.h
+++ b/thirdparty/zstd/common/bitstream.h
@@ -1,7 +1,7 @@
/* ******************************************************************
* bitstream
* Part of FSE library
- * Copyright (c) 2013-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
*
* You can contact the author at :
* - Source repository : https://github.com/Cyan4973/FiniteStateEntropy
diff --git a/thirdparty/zstd/common/compiler.h b/thirdparty/zstd/common/compiler.h
index 3e454f38c1..a951d0adea 100644
--- a/thirdparty/zstd/common/compiler.h
+++ b/thirdparty/zstd/common/compiler.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
@@ -90,6 +90,7 @@
# endif
#endif
+
/* target attribute */
#ifndef __has_attribute
#define __has_attribute(x) 0 /* Compatibility with non-clang compilers. */
diff --git a/thirdparty/zstd/common/cpu.h b/thirdparty/zstd/common/cpu.h
index cb210593ea..8acd33be3c 100644
--- a/thirdparty/zstd/common/cpu.h
+++ b/thirdparty/zstd/common/cpu.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018-2020, Facebook, Inc.
+ * Copyright (c) Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
diff --git a/thirdparty/zstd/common/debug.c b/thirdparty/zstd/common/debug.c
index f303f4a2e5..bb863c9ea6 100644
--- a/thirdparty/zstd/common/debug.c
+++ b/thirdparty/zstd/common/debug.c
@@ -1,7 +1,7 @@
/* ******************************************************************
* debug
* Part of FSE library
- * Copyright (c) 2013-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
*
* You can contact the author at :
* - Source repository : https://github.com/Cyan4973/FiniteStateEntropy
diff --git a/thirdparty/zstd/common/debug.h b/thirdparty/zstd/common/debug.h
index 8b5734366c..3b2a320a18 100644
--- a/thirdparty/zstd/common/debug.h
+++ b/thirdparty/zstd/common/debug.h
@@ -1,7 +1,7 @@
/* ******************************************************************
* debug
* Part of FSE library
- * Copyright (c) 2013-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
*
* You can contact the author at :
* - Source repository : https://github.com/Cyan4973/FiniteStateEntropy
diff --git a/thirdparty/zstd/common/entropy_common.c b/thirdparty/zstd/common/entropy_common.c
index f9fcb1acfc..41cd69566b 100644
--- a/thirdparty/zstd/common/entropy_common.c
+++ b/thirdparty/zstd/common/entropy_common.c
@@ -1,6 +1,6 @@
/* ******************************************************************
* Common functions of New Generation Entropy library
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
*
* You can contact the author at :
* - FSE+HUF source repository : https://github.com/Cyan4973/FiniteStateEntropy
diff --git a/thirdparty/zstd/common/error_private.c b/thirdparty/zstd/common/error_private.c
index 45bba5305b..6d1135f8c3 100644
--- a/thirdparty/zstd/common/error_private.c
+++ b/thirdparty/zstd/common/error_private.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
diff --git a/thirdparty/zstd/common/error_private.h b/thirdparty/zstd/common/error_private.h
index 71b37b8dfa..6d8b9f7763 100644
--- a/thirdparty/zstd/common/error_private.h
+++ b/thirdparty/zstd/common/error_private.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
@@ -21,8 +21,8 @@ extern "C" {
/* ****************************************
* Dependencies
******************************************/
-#include "zstd_deps.h" /* size_t */
-#include "zstd_errors.h" /* enum list */
+#include "../zstd_errors.h" /* enum list */
+#include "zstd_deps.h" /* size_t */
/* ****************************************
diff --git a/thirdparty/zstd/common/fse.h b/thirdparty/zstd/common/fse.h
index dd5fc44e80..19dd4febcd 100644
--- a/thirdparty/zstd/common/fse.h
+++ b/thirdparty/zstd/common/fse.h
@@ -1,7 +1,7 @@
/* ******************************************************************
* FSE : Finite State Entropy codec
* Public Prototypes declaration
- * Copyright (c) 2013-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
*
* You can contact the author at :
* - Source repository : https://github.com/Cyan4973/FiniteStateEntropy
@@ -352,7 +352,7 @@ size_t FSE_buildDTable_raw (FSE_DTable* dt, unsigned nbBits);
size_t FSE_buildDTable_rle (FSE_DTable* dt, unsigned char symbolValue);
/**< build a fake FSE_DTable, designed to always generate the same symbolValue */
-#define FSE_DECOMPRESS_WKSP_SIZE_U32(maxTableLog, maxSymbolValue) (FSE_DTABLE_SIZE_U32(maxTableLog) + FSE_BUILD_DTABLE_WKSP_SIZE_U32(maxTableLog, maxSymbolValue))
+#define FSE_DECOMPRESS_WKSP_SIZE_U32(maxTableLog, maxSymbolValue) (FSE_DTABLE_SIZE_U32(maxTableLog) + FSE_BUILD_DTABLE_WKSP_SIZE_U32(maxTableLog, maxSymbolValue) + (FSE_MAX_SYMBOL_VALUE + 1) / 2 + 1)
#define FSE_DECOMPRESS_WKSP_SIZE(maxTableLog, maxSymbolValue) (FSE_DECOMPRESS_WKSP_SIZE_U32(maxTableLog, maxSymbolValue) * sizeof(unsigned))
size_t FSE_decompress_wksp(void* dst, size_t dstCapacity, const void* cSrc, size_t cSrcSize, unsigned maxLog, void* workSpace, size_t wkspSize);
/**< same as FSE_decompress(), using an externally allocated `workSpace` produced with `FSE_DECOMPRESS_WKSP_SIZE_U32(maxLog, maxSymbolValue)` */
diff --git a/thirdparty/zstd/common/fse_decompress.c b/thirdparty/zstd/common/fse_decompress.c
index c164430f99..f4ff58fa0a 100644
--- a/thirdparty/zstd/common/fse_decompress.c
+++ b/thirdparty/zstd/common/fse_decompress.c
@@ -1,6 +1,6 @@
/* ******************************************************************
* FSE : Finite State Entropy decoder
- * Copyright (c) 2013-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
*
* You can contact the author at :
* - FSE source repository : https://github.com/Cyan4973/FiniteStateEntropy
@@ -310,6 +310,12 @@ size_t FSE_decompress_wksp(void* dst, size_t dstCapacity, const void* cSrc, size
return FSE_decompress_wksp_bmi2(dst, dstCapacity, cSrc, cSrcSize, maxLog, workSpace, wkspSize, /* bmi2 */ 0);
}
+typedef struct {
+ short ncount[FSE_MAX_SYMBOL_VALUE + 1];
+ FSE_DTable dtable[1]; /* Dynamically sized */
+} FSE_DecompressWksp;
+
+
FORCE_INLINE_TEMPLATE size_t FSE_decompress_wksp_body(
void* dst, size_t dstCapacity,
const void* cSrc, size_t cSrcSize,
@@ -318,33 +324,37 @@ FORCE_INLINE_TEMPLATE size_t FSE_decompress_wksp_body(
{
const BYTE* const istart = (const BYTE*)cSrc;
const BYTE* ip = istart;
- short counting[FSE_MAX_SYMBOL_VALUE+1];
unsigned tableLog;
unsigned maxSymbolValue = FSE_MAX_SYMBOL_VALUE;
- FSE_DTable* const dtable = (FSE_DTable*)workSpace;
+ FSE_DecompressWksp* const wksp = (FSE_DecompressWksp*)workSpace;
+
+ DEBUG_STATIC_ASSERT((FSE_MAX_SYMBOL_VALUE + 1) % 2 == 0);
+ if (wkspSize < sizeof(*wksp)) return ERROR(GENERIC);
/* normal FSE decoding mode */
- size_t const NCountLength = FSE_readNCount_bmi2(counting, &maxSymbolValue, &tableLog, istart, cSrcSize, bmi2);
- if (FSE_isError(NCountLength)) return NCountLength;
- if (tableLog > maxLog) return ERROR(tableLog_tooLarge);
- assert(NCountLength <= cSrcSize);
- ip += NCountLength;
- cSrcSize -= NCountLength;
+ {
+ size_t const NCountLength = FSE_readNCount_bmi2(wksp->ncount, &maxSymbolValue, &tableLog, istart, cSrcSize, bmi2);
+ if (FSE_isError(NCountLength)) return NCountLength;
+ if (tableLog > maxLog) return ERROR(tableLog_tooLarge);
+ assert(NCountLength <= cSrcSize);
+ ip += NCountLength;
+ cSrcSize -= NCountLength;
+ }
if (FSE_DECOMPRESS_WKSP_SIZE(tableLog, maxSymbolValue) > wkspSize) return ERROR(tableLog_tooLarge);
- workSpace = dtable + FSE_DTABLE_SIZE_U32(tableLog);
- wkspSize -= FSE_DTABLE_SIZE(tableLog);
+ workSpace = wksp->dtable + FSE_DTABLE_SIZE_U32(tableLog);
+ wkspSize -= sizeof(*wksp) + FSE_DTABLE_SIZE(tableLog);
- CHECK_F( FSE_buildDTable_internal(dtable, counting, maxSymbolValue, tableLog, workSpace, wkspSize) );
+ CHECK_F( FSE_buildDTable_internal(wksp->dtable, wksp->ncount, maxSymbolValue, tableLog, workSpace, wkspSize) );
{
- const void* ptr = dtable;
+ const void* ptr = wksp->dtable;
const FSE_DTableHeader* DTableH = (const FSE_DTableHeader*)ptr;
const U32 fastMode = DTableH->fastMode;
/* select fast mode (static) */
- if (fastMode) return FSE_decompress_usingDTable_generic(dst, dstCapacity, ip, cSrcSize, dtable, 1);
- return FSE_decompress_usingDTable_generic(dst, dstCapacity, ip, cSrcSize, dtable, 0);
+ if (fastMode) return FSE_decompress_usingDTable_generic(dst, dstCapacity, ip, cSrcSize, wksp->dtable, 1);
+ return FSE_decompress_usingDTable_generic(dst, dstCapacity, ip, cSrcSize, wksp->dtable, 0);
}
}
diff --git a/thirdparty/zstd/common/huf.h b/thirdparty/zstd/common/huf.h
index 1afef90c7c..3d47ced030 100644
--- a/thirdparty/zstd/common/huf.h
+++ b/thirdparty/zstd/common/huf.h
@@ -1,7 +1,7 @@
/* ******************************************************************
* huff0 huffman codec,
* part of Finite State Entropy library
- * Copyright (c) 2013-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
*
* You can contact the author at :
* - Source repository : https://github.com/Cyan4973/FiniteStateEntropy
@@ -192,6 +192,7 @@ size_t HUF_decompress4X2_DCtx_wksp(HUF_DTable* dctx, void* dst, size_t dstSize,
unsigned HUF_optimalTableLog(unsigned maxTableLog, size_t srcSize, unsigned maxSymbolValue);
size_t HUF_buildCTable (HUF_CElt* CTable, const unsigned* count, unsigned maxSymbolValue, unsigned maxNbBits); /* @return : maxNbBits; CTable and count can overlap. In which case, CTable will overwrite count content */
size_t HUF_writeCTable (void* dst, size_t maxDstSize, const HUF_CElt* CTable, unsigned maxSymbolValue, unsigned huffLog);
+size_t HUF_writeCTable_wksp(void* dst, size_t maxDstSize, const HUF_CElt* CTable, unsigned maxSymbolValue, unsigned huffLog, void* workspace, size_t workspaceSize);
size_t HUF_compress4X_usingCTable(void* dst, size_t dstSize, const void* src, size_t srcSize, const HUF_CElt* CTable);
size_t HUF_estimateCompressedSize(const HUF_CElt* CTable, const unsigned* count, unsigned maxSymbolValue);
int HUF_validateCTable(const HUF_CElt* CTable, const unsigned* count, unsigned maxSymbolValue);
@@ -278,7 +279,7 @@ U32 HUF_selectDecoder (size_t dstSize, size_t cSrcSize);
* a required workspace size greater than that specified in the following
* macro.
*/
-#define HUF_DECOMPRESS_WORKSPACE_SIZE (2 << 10)
+#define HUF_DECOMPRESS_WORKSPACE_SIZE ((2 << 10) + (1 << 9))
#define HUF_DECOMPRESS_WORKSPACE_SIZE_U32 (HUF_DECOMPRESS_WORKSPACE_SIZE / sizeof(U32))
#ifndef HUF_FORCE_DECOMPRESS_X2
diff --git a/thirdparty/zstd/common/mem.h b/thirdparty/zstd/common/mem.h
index 4728ef767b..9f3b81ab9d 100644
--- a/thirdparty/zstd/common/mem.h
+++ b/thirdparty/zstd/common/mem.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
@@ -143,9 +143,7 @@ MEM_STATIC size_t MEM_swapST(size_t in);
* Prefer these methods in priority order (0 > 1 > 2)
*/
#ifndef MEM_FORCE_MEMORY_ACCESS /* can be defined externally, on command line for example */
-# if defined(__GNUC__) && ( defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_6T2__) )
-# define MEM_FORCE_MEMORY_ACCESS 2
-# elif defined(__INTEL_COMPILER) || defined(__GNUC__) || defined(__ICCARM__)
+# if defined(__INTEL_COMPILER) || defined(__GNUC__) || defined(__ICCARM__)
# define MEM_FORCE_MEMORY_ACCESS 1
# endif
#endif
@@ -308,7 +306,7 @@ MEM_STATIC void MEM_writeLE16(void* memPtr, U16 val)
MEM_STATIC U32 MEM_readLE24(const void* memPtr)
{
- return MEM_readLE16(memPtr) + (((const BYTE*)memPtr)[2] << 16);
+ return (U32)MEM_readLE16(memPtr) + ((U32)(((const BYTE*)memPtr)[2]) << 16);
}
MEM_STATIC void MEM_writeLE24(void* memPtr, U32 val)
diff --git a/thirdparty/zstd/common/pool.c b/thirdparty/zstd/common/pool.c
index 4c1b83376f..ea70b8b65a 100644
--- a/thirdparty/zstd/common/pool.c
+++ b/thirdparty/zstd/common/pool.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
diff --git a/thirdparty/zstd/common/pool.h b/thirdparty/zstd/common/pool.h
index 63954ca6ca..e18aa0708f 100644
--- a/thirdparty/zstd/common/pool.h
+++ b/thirdparty/zstd/common/pool.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
diff --git a/thirdparty/zstd/common/xxhash.c b/thirdparty/zstd/common/xxhash.c
index e708df3c33..926b33604e 100644
--- a/thirdparty/zstd/common/xxhash.c
+++ b/thirdparty/zstd/common/xxhash.c
@@ -1,6 +1,6 @@
/*
* xxHash - Fast Hash algorithm
- * Copyright (c) 2012-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
*
* You can contact the author at :
* - xxHash homepage: http://www.xxhash.com
@@ -30,9 +30,7 @@
* Prefer these methods in priority order (0 > 1 > 2)
*/
#ifndef XXH_FORCE_MEMORY_ACCESS /* can be defined externally, on command line for example */
-# if defined(__GNUC__) && ( defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_6T2__) )
-# define XXH_FORCE_MEMORY_ACCESS 2
-# elif (defined(__INTEL_COMPILER) && !defined(WIN32)) || \
+# if (defined(__INTEL_COMPILER) && !defined(WIN32)) || \
(defined(__GNUC__) && ( defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7S__) )) || \
defined(__ICCARM__)
# define XXH_FORCE_MEMORY_ACCESS 1
diff --git a/thirdparty/zstd/common/xxhash.h b/thirdparty/zstd/common/xxhash.h
index eceb55d5e0..16c1f1617b 100644
--- a/thirdparty/zstd/common/xxhash.h
+++ b/thirdparty/zstd/common/xxhash.h
@@ -1,7 +1,7 @@
/*
* xxHash - Extremely Fast Hash algorithm
* Header File
- * Copyright (c) 2012-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
*
* You can contact the author at :
* - xxHash source repository : https://github.com/Cyan4973/xxHash
diff --git a/thirdparty/zstd/common/zstd_common.c b/thirdparty/zstd/common/zstd_common.c
index 939e9f08fa..3d7e35b309 100644
--- a/thirdparty/zstd/common/zstd_common.c
+++ b/thirdparty/zstd/common/zstd_common.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
diff --git a/thirdparty/zstd/common/zstd_deps.h b/thirdparty/zstd/common/zstd_deps.h
index 0fb8b7818b..14211344a0 100644
--- a/thirdparty/zstd/common/zstd_deps.h
+++ b/thirdparty/zstd/common/zstd_deps.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Facebook, Inc.
+ * Copyright (c) Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
diff --git a/thirdparty/zstd/common/zstd_internal.h b/thirdparty/zstd/common/zstd_internal.h
index 0991f20a08..68252e987e 100644
--- a/thirdparty/zstd/common/zstd_internal.h
+++ b/thirdparty/zstd/common/zstd_internal.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
@@ -36,6 +36,11 @@
# define XXH_STATIC_LINKING_ONLY /* XXH64_state_t */
#endif
#include "xxhash.h" /* XXH_reset, update, digest */
+#ifndef ZSTD_NO_TRACE
+# include "zstd_trace.h"
+#else
+# define ZSTD_TRACE 0
+#endif
#if defined (__cplusplus)
extern "C" {
@@ -347,11 +352,18 @@ typedef enum {
* Private declarations
*********************************************/
typedef struct seqDef_s {
- U32 offset; /* Offset code of the sequence */
+ U32 offset; /* offset == rawOffset + ZSTD_REP_NUM, or equivalently, offCode + 1 */
U16 litLength;
U16 matchLength;
} seqDef;
+/* Controls whether seqStore has a single "long" litLength or matchLength. See seqStore_t. */
+typedef enum {
+ ZSTD_llt_none = 0, /* no longLengthType */
+ ZSTD_llt_literalLength = 1, /* represents a long literal */
+ ZSTD_llt_matchLength = 2 /* represents a long match */
+} ZSTD_longLengthType_e;
+
typedef struct {
seqDef* sequencesStart;
seqDef* sequences; /* ptr to end of sequences */
@@ -363,12 +375,12 @@ typedef struct {
size_t maxNbSeq;
size_t maxNbLit;
- /* longLengthPos and longLengthID to allow us to represent either a single litLength or matchLength
+ /* longLengthPos and longLengthType to allow us to represent either a single litLength or matchLength
* in the seqStore that has a value larger than U16 (if it exists). To do so, we increment
- * the existing value of the litLength or matchLength by 0x10000.
+ * the existing value of the litLength or matchLength by 0x10000.
*/
- U32 longLengthID; /* 0 == no longLength; 1 == Represent the long literal; 2 == Represent the long match; */
- U32 longLengthPos; /* Index of the sequence to apply long length modification to */
+ ZSTD_longLengthType_e longLengthType;
+ U32 longLengthPos; /* Index of the sequence to apply long length modification to */
} seqStore_t;
typedef struct {
@@ -378,7 +390,7 @@ typedef struct {
/**
* Returns the ZSTD_sequenceLength for the given sequences. It handles the decoding of long sequences
- * indicated by longLengthPos and longLengthID, and adds MINMATCH back to matchLength.
+ * indicated by longLengthPos and longLengthType, and adds MINMATCH back to matchLength.
*/
MEM_STATIC ZSTD_sequenceLength ZSTD_getSequenceLength(seqStore_t const* seqStore, seqDef const* seq)
{
@@ -386,10 +398,10 @@ MEM_STATIC ZSTD_sequenceLength ZSTD_getSequenceLength(seqStore_t const* seqStore
seqLen.litLength = seq->litLength;
seqLen.matchLength = seq->matchLength + MINMATCH;
if (seqStore->longLengthPos == (U32)(seq - seqStore->sequencesStart)) {
- if (seqStore->longLengthID == 1) {
+ if (seqStore->longLengthType == ZSTD_llt_literalLength) {
seqLen.litLength += 0xFFFF;
}
- if (seqStore->longLengthID == 2) {
+ if (seqStore->longLengthType == ZSTD_llt_matchLength) {
seqLen.matchLength += 0xFFFF;
}
}
diff --git a/thirdparty/zstd/common/zstd_trace.h b/thirdparty/zstd/common/zstd_trace.h
new file mode 100644
index 0000000000..2da5640771
--- /dev/null
+++ b/thirdparty/zstd/common/zstd_trace.h
@@ -0,0 +1,154 @@
+/*
+ * Copyright (c) Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under both the BSD-style license (found in the
+ * LICENSE file in the root directory of this source tree) and the GPLv2 (found
+ * in the COPYING file in the root directory of this source tree).
+ * You may select, at your option, one of the above-listed licenses.
+ */
+
+#ifndef ZSTD_TRACE_H
+#define ZSTD_TRACE_H
+
+#if defined (__cplusplus)
+extern "C" {
+#endif
+
+#include <stddef.h>
+
+/* weak symbol support */
+#if !defined(ZSTD_HAVE_WEAK_SYMBOLS) && defined(__GNUC__) && \
+ !defined(__APPLE__) && !defined(_WIN32) && !defined(__MINGW32__) && \
+ !defined(__CYGWIN__)
+# define ZSTD_HAVE_WEAK_SYMBOLS 1
+#else
+# define ZSTD_HAVE_WEAK_SYMBOLS 0
+#endif
+#if ZSTD_HAVE_WEAK_SYMBOLS
+# define ZSTD_WEAK_ATTR __attribute__((__weak__))
+#else
+# define ZSTD_WEAK_ATTR
+#endif
+
+/* Only enable tracing when weak symbols are available. */
+#ifndef ZSTD_TRACE
+# define ZSTD_TRACE ZSTD_HAVE_WEAK_SYMBOLS
+#endif
+
+#if ZSTD_TRACE
+
+struct ZSTD_CCtx_s;
+struct ZSTD_DCtx_s;
+struct ZSTD_CCtx_params_s;
+
+typedef struct {
+ /**
+ * ZSTD_VERSION_NUMBER
+ *
+ * This is guaranteed to be the first member of ZSTD_trace.
+ * Otherwise, this struct is not stable between versions. If
+ * the version number does not match your expectation, you
+ * should not interpret the rest of the struct.
+ */
+ unsigned version;
+ /**
+ * Non-zero if streaming (de)compression is used.
+ */
+ unsigned streaming;
+ /**
+ * The dictionary ID.
+ */
+ unsigned dictionaryID;
+ /**
+ * Is the dictionary cold?
+ * Only set on decompression.
+ */
+ unsigned dictionaryIsCold;
+ /**
+ * The dictionary size or zero if no dictionary.
+ */
+ size_t dictionarySize;
+ /**
+ * The uncompressed size of the data.
+ */
+ size_t uncompressedSize;
+ /**
+ * The compressed size of the data.
+ */
+ size_t compressedSize;
+ /**
+ * The fully resolved CCtx parameters (NULL on decompression).
+ */
+ struct ZSTD_CCtx_params_s const* params;
+ /**
+ * The ZSTD_CCtx pointer (NULL on decompression).
+ */
+ struct ZSTD_CCtx_s const* cctx;
+ /**
+ * The ZSTD_DCtx pointer (NULL on compression).
+ */
+ struct ZSTD_DCtx_s const* dctx;
+} ZSTD_Trace;
+
+/**
+ * A tracing context. It must be 0 when tracing is disabled.
+ * Otherwise, any non-zero value returned by a tracing begin()
+ * function is presented to any subsequent calls to end().
+ *
+ * Any non-zero value is treated as tracing is enabled and not
+ * interpreted by the library.
+ *
+ * Two possible uses are:
+ * * A timestamp for when the begin() function was called.
+ * * A unique key identifying the (de)compression, like the
+ * address of the [dc]ctx pointer if you need to track
+ * more information than just a timestamp.
+ */
+typedef unsigned long long ZSTD_TraceCtx;
+
+/**
+ * Trace the beginning of a compression call.
+ * @param cctx The dctx pointer for the compression.
+ * It can be used as a key to map begin() to end().
+ * @returns Non-zero if tracing is enabled. The return value is
+ * passed to ZSTD_trace_compress_end().
+ */
+ZSTD_WEAK_ATTR ZSTD_TraceCtx ZSTD_trace_compress_begin(
+ struct ZSTD_CCtx_s const* cctx);
+
+/**
+ * Trace the end of a compression call.
+ * @param ctx The return value of ZSTD_trace_compress_begin().
+ * @param trace The zstd tracing info.
+ */
+ZSTD_WEAK_ATTR void ZSTD_trace_compress_end(
+ ZSTD_TraceCtx ctx,
+ ZSTD_Trace const* trace);
+
+/**
+ * Trace the beginning of a decompression call.
+ * @param dctx The dctx pointer for the decompression.
+ * It can be used as a key to map begin() to end().
+ * @returns Non-zero if tracing is enabled. The return value is
+ * passed to ZSTD_trace_compress_end().
+ */
+ZSTD_WEAK_ATTR ZSTD_TraceCtx ZSTD_trace_decompress_begin(
+ struct ZSTD_DCtx_s const* dctx);
+
+/**
+ * Trace the end of a decompression call.
+ * @param ctx The return value of ZSTD_trace_decompress_begin().
+ * @param trace The zstd tracing info.
+ */
+ZSTD_WEAK_ATTR void ZSTD_trace_decompress_end(
+ ZSTD_TraceCtx ctx,
+ ZSTD_Trace const* trace);
+
+#endif /* ZSTD_TRACE */
+
+#if defined (__cplusplus)
+}
+#endif
+
+#endif /* ZSTD_TRACE_H */
diff --git a/thirdparty/zstd/compress/fse_compress.c b/thirdparty/zstd/compress/fse_compress.c
index 304a82b3cc..b4297ec88a 100644
--- a/thirdparty/zstd/compress/fse_compress.c
+++ b/thirdparty/zstd/compress/fse_compress.c
@@ -1,6 +1,6 @@
/* ******************************************************************
* FSE : Finite State Entropy encoder
- * Copyright (c) 2013-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
*
* You can contact the author at :
* - FSE source repository : https://github.com/Cyan4973/FiniteStateEntropy
diff --git a/thirdparty/zstd/compress/hist.c b/thirdparty/zstd/compress/hist.c
index a9659d11ad..073c57e752 100644
--- a/thirdparty/zstd/compress/hist.c
+++ b/thirdparty/zstd/compress/hist.c
@@ -1,7 +1,7 @@
/* ******************************************************************
* hist : Histogram functions
* part of Finite State Entropy project
- * Copyright (c) 2013-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
*
* You can contact the author at :
* - FSE source repository : https://github.com/Cyan4973/FiniteStateEntropy
diff --git a/thirdparty/zstd/compress/hist.h b/thirdparty/zstd/compress/hist.h
index fb9ead6834..228ed48a71 100644
--- a/thirdparty/zstd/compress/hist.h
+++ b/thirdparty/zstd/compress/hist.h
@@ -1,7 +1,7 @@
/* ******************************************************************
* hist : Histogram functions
* part of Finite State Entropy project
- * Copyright (c) 2013-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
*
* You can contact the author at :
* - FSE source repository : https://github.com/Cyan4973/FiniteStateEntropy
diff --git a/thirdparty/zstd/compress/huf_compress.c b/thirdparty/zstd/compress/huf_compress.c
index 302e08864d..485906e678 100644
--- a/thirdparty/zstd/compress/huf_compress.c
+++ b/thirdparty/zstd/compress/huf_compress.c
@@ -1,6 +1,6 @@
/* ******************************************************************
* Huffman encoder, part of New Generation Entropy library
- * Copyright (c) 2013-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
*
* You can contact the author at :
* - FSE+HUF source repository : https://github.com/Cyan4973/FiniteStateEntropy
@@ -59,7 +59,15 @@ unsigned HUF_optimalTableLog(unsigned maxTableLog, size_t srcSize, unsigned maxS
* Note : all elements within weightTable are supposed to be <= HUF_TABLELOG_MAX.
*/
#define MAX_FSE_TABLELOG_FOR_HUFF_HEADER 6
-static size_t HUF_compressWeights (void* dst, size_t dstSize, const void* weightTable, size_t wtSize)
+
+typedef struct {
+ FSE_CTable CTable[FSE_CTABLE_SIZE_U32(MAX_FSE_TABLELOG_FOR_HUFF_HEADER, HUF_TABLELOG_MAX)];
+ U32 scratchBuffer[FSE_BUILD_CTABLE_WORKSPACE_SIZE_U32(HUF_TABLELOG_MAX, MAX_FSE_TABLELOG_FOR_HUFF_HEADER)];
+ unsigned count[HUF_TABLELOG_MAX+1];
+ S16 norm[HUF_TABLELOG_MAX+1];
+} HUF_CompressWeightsWksp;
+
+static size_t HUF_compressWeights(void* dst, size_t dstSize, const void* weightTable, size_t wtSize, void* workspace, size_t workspaceSize)
{
BYTE* const ostart = (BYTE*) dst;
BYTE* op = ostart;
@@ -67,33 +75,30 @@ static size_t HUF_compressWeights (void* dst, size_t dstSize, const void* weight
unsigned maxSymbolValue = HUF_TABLELOG_MAX;
U32 tableLog = MAX_FSE_TABLELOG_FOR_HUFF_HEADER;
+ HUF_CompressWeightsWksp* wksp = (HUF_CompressWeightsWksp*)workspace;
- FSE_CTable CTable[FSE_CTABLE_SIZE_U32(MAX_FSE_TABLELOG_FOR_HUFF_HEADER, HUF_TABLELOG_MAX)];
- U32 scratchBuffer[FSE_BUILD_CTABLE_WORKSPACE_SIZE_U32(HUF_TABLELOG_MAX, MAX_FSE_TABLELOG_FOR_HUFF_HEADER)];
-
- unsigned count[HUF_TABLELOG_MAX+1];
- S16 norm[HUF_TABLELOG_MAX+1];
+ if (workspaceSize < sizeof(HUF_CompressWeightsWksp)) return ERROR(GENERIC);
/* init conditions */
if (wtSize <= 1) return 0; /* Not compressible */
/* Scan input and build symbol stats */
- { unsigned const maxCount = HIST_count_simple(count, &maxSymbolValue, weightTable, wtSize); /* never fails */
+ { unsigned const maxCount = HIST_count_simple(wksp->count, &maxSymbolValue, weightTable, wtSize); /* never fails */
if (maxCount == wtSize) return 1; /* only a single symbol in src : rle */
if (maxCount == 1) return 0; /* each symbol present maximum once => not compressible */
}
tableLog = FSE_optimalTableLog(tableLog, wtSize, maxSymbolValue);
- CHECK_F( FSE_normalizeCount(norm, tableLog, count, wtSize, maxSymbolValue, /* useLowProbCount */ 0) );
+ CHECK_F( FSE_normalizeCount(wksp->norm, tableLog, wksp->count, wtSize, maxSymbolValue, /* useLowProbCount */ 0) );
/* Write table description header */
- { CHECK_V_F(hSize, FSE_writeNCount(op, (size_t)(oend-op), norm, maxSymbolValue, tableLog) );
+ { CHECK_V_F(hSize, FSE_writeNCount(op, (size_t)(oend-op), wksp->norm, maxSymbolValue, tableLog) );
op += hSize;
}
/* Compress */
- CHECK_F( FSE_buildCTable_wksp(CTable, norm, maxSymbolValue, tableLog, scratchBuffer, sizeof(scratchBuffer)) );
- { CHECK_V_F(cSize, FSE_compress_usingCTable(op, (size_t)(oend - op), weightTable, wtSize, CTable) );
+ CHECK_F( FSE_buildCTable_wksp(wksp->CTable, wksp->norm, maxSymbolValue, tableLog, wksp->scratchBuffer, sizeof(wksp->scratchBuffer)) );
+ { CHECK_V_F(cSize, FSE_compress_usingCTable(op, (size_t)(oend - op), weightTable, wtSize, wksp->CTable) );
if (cSize == 0) return 0; /* not enough space for compressed data */
op += cSize;
}
@@ -102,29 +107,33 @@ static size_t HUF_compressWeights (void* dst, size_t dstSize, const void* weight
}
-/*! HUF_writeCTable() :
- `CTable` : Huffman tree to save, using huf representation.
- @return : size of saved CTable */
-size_t HUF_writeCTable (void* dst, size_t maxDstSize,
- const HUF_CElt* CTable, unsigned maxSymbolValue, unsigned huffLog)
-{
+typedef struct {
+ HUF_CompressWeightsWksp wksp;
BYTE bitsToWeight[HUF_TABLELOG_MAX + 1]; /* precomputed conversion table */
BYTE huffWeight[HUF_SYMBOLVALUE_MAX];
+} HUF_WriteCTableWksp;
+
+size_t HUF_writeCTable_wksp(void* dst, size_t maxDstSize,
+ const HUF_CElt* CTable, unsigned maxSymbolValue, unsigned huffLog,
+ void* workspace, size_t workspaceSize)
+{
BYTE* op = (BYTE*)dst;
U32 n;
+ HUF_WriteCTableWksp* wksp = (HUF_WriteCTableWksp*)workspace;
- /* check conditions */
+ /* check conditions */
+ if (workspaceSize < sizeof(HUF_WriteCTableWksp)) return ERROR(GENERIC);
if (maxSymbolValue > HUF_SYMBOLVALUE_MAX) return ERROR(maxSymbolValue_tooLarge);
/* convert to weight */
- bitsToWeight[0] = 0;
+ wksp->bitsToWeight[0] = 0;
for (n=1; n<huffLog+1; n++)
- bitsToWeight[n] = (BYTE)(huffLog + 1 - n);
+ wksp->bitsToWeight[n] = (BYTE)(huffLog + 1 - n);
for (n=0; n<maxSymbolValue; n++)
- huffWeight[n] = bitsToWeight[CTable[n].nbBits];
+ wksp->huffWeight[n] = wksp->bitsToWeight[CTable[n].nbBits];
/* attempt weights compression by FSE */
- { CHECK_V_F(hSize, HUF_compressWeights(op+1, maxDstSize-1, huffWeight, maxSymbolValue) );
+ { CHECK_V_F(hSize, HUF_compressWeights(op+1, maxDstSize-1, wksp->huffWeight, maxSymbolValue, &wksp->wksp, sizeof(wksp->wksp)) );
if ((hSize>1) & (hSize < maxSymbolValue/2)) { /* FSE compressed */
op[0] = (BYTE)hSize;
return hSize+1;
@@ -134,12 +143,22 @@ size_t HUF_writeCTable (void* dst, size_t maxDstSize,
if (maxSymbolValue > (256-128)) return ERROR(GENERIC); /* should not happen : likely means source cannot be compressed */
if (((maxSymbolValue+1)/2) + 1 > maxDstSize) return ERROR(dstSize_tooSmall); /* not enough space within dst buffer */
op[0] = (BYTE)(128 /*special case*/ + (maxSymbolValue-1));
- huffWeight[maxSymbolValue] = 0; /* to be sure it doesn't cause msan issue in final combination */
+ wksp->huffWeight[maxSymbolValue] = 0; /* to be sure it doesn't cause msan issue in final combination */
for (n=0; n<maxSymbolValue; n+=2)
- op[(n/2)+1] = (BYTE)((huffWeight[n] << 4) + huffWeight[n+1]);
+ op[(n/2)+1] = (BYTE)((wksp->huffWeight[n] << 4) + wksp->huffWeight[n+1]);
return ((maxSymbolValue+1)/2) + 1;
}
+/*! HUF_writeCTable() :
+ `CTable` : Huffman tree to save, using huf representation.
+ @return : size of saved CTable */
+size_t HUF_writeCTable (void* dst, size_t maxDstSize,
+ const HUF_CElt* CTable, unsigned maxSymbolValue, unsigned huffLog)
+{
+ HUF_WriteCTableWksp wksp;
+ return HUF_writeCTable_wksp(dst, maxDstSize, CTable, maxSymbolValue, huffLog, &wksp, sizeof(wksp));
+}
+
size_t HUF_readCTable (HUF_CElt* CTable, unsigned* maxSymbolValuePtr, const void* src, size_t srcSize, unsigned* hasZeroWeights)
{
@@ -732,7 +751,10 @@ static size_t HUF_compressCTable_internal(
typedef struct {
unsigned count[HUF_SYMBOLVALUE_MAX + 1];
HUF_CElt CTable[HUF_SYMBOLVALUE_MAX + 1];
- HUF_buildCTable_wksp_tables buildCTable_wksp;
+ union {
+ HUF_buildCTable_wksp_tables buildCTable_wksp;
+ HUF_WriteCTableWksp writeCTable_wksp;
+ } wksps;
} HUF_compress_tables_t;
/* HUF_compress_internal() :
@@ -795,7 +817,7 @@ HUF_compress_internal (void* dst, size_t dstSize,
huffLog = HUF_optimalTableLog(huffLog, srcSize, maxSymbolValue);
{ size_t const maxBits = HUF_buildCTable_wksp(table->CTable, table->count,
maxSymbolValue, huffLog,
- &table->buildCTable_wksp, sizeof(table->buildCTable_wksp));
+ &table->wksps.buildCTable_wksp, sizeof(table->wksps.buildCTable_wksp));
CHECK_F(maxBits);
huffLog = (U32)maxBits;
/* Zero unused symbols in CTable, so we can check it for validity */
@@ -804,7 +826,8 @@ HUF_compress_internal (void* dst, size_t dstSize,
}
/* Write table description header */
- { CHECK_V_F(hSize, HUF_writeCTable (op, dstSize, table->CTable, maxSymbolValue, huffLog) );
+ { CHECK_V_F(hSize, HUF_writeCTable_wksp(op, dstSize, table->CTable, maxSymbolValue, huffLog,
+ &table->wksps.writeCTable_wksp, sizeof(table->wksps.writeCTable_wksp)) );
/* Check if using previous huffman table is beneficial */
if (repeat && *repeat != HUF_repeat_none) {
size_t const oldSize = HUF_estimateCompressedSize(oldHufTable, table->count, maxSymbolValue);
diff --git a/thirdparty/zstd/compress/zstd_compress.c b/thirdparty/zstd/compress/zstd_compress.c
index 386b051df6..b7ee2980a7 100644
--- a/thirdparty/zstd/compress/zstd_compress.c
+++ b/thirdparty/zstd/compress/zstd_compress.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
@@ -72,6 +72,10 @@ struct ZSTD_CDict_s {
ZSTD_customMem customMem;
U32 dictID;
int compressionLevel; /* 0 indicates that advanced API was used to select CDict params */
+ ZSTD_useRowMatchFinderMode_e useRowMatchFinder; /* Indicates whether the CDict was created with params that would use
+ * row-based matchfinder. Unless the cdict is reloaded, we will use
+ * the same greedy/lazy matchfinder at compression time.
+ */
}; /* typedef'd to ZSTD_CDict within "zstd.h" */
ZSTD_CCtx* ZSTD_createCCtx(void)
@@ -202,6 +206,49 @@ size_t ZSTD_sizeof_CStream(const ZSTD_CStream* zcs)
/* private API call, for dictBuilder only */
const seqStore_t* ZSTD_getSeqStore(const ZSTD_CCtx* ctx) { return &(ctx->seqStore); }
+/* Returns true if the strategy supports using a row based matchfinder */
+static int ZSTD_rowMatchFinderSupported(const ZSTD_strategy strategy) {
+ return (strategy >= ZSTD_greedy && strategy <= ZSTD_lazy2);
+}
+
+/* Returns true if the strategy and useRowMatchFinder mode indicate that we will use the row based matchfinder
+ * for this compression.
+ */
+static int ZSTD_rowMatchFinderUsed(const ZSTD_strategy strategy, const ZSTD_useRowMatchFinderMode_e mode) {
+ assert(mode != ZSTD_urm_auto);
+ return ZSTD_rowMatchFinderSupported(strategy) && (mode == ZSTD_urm_enableRowMatchFinder);
+}
+
+/* Returns row matchfinder usage enum given an initial mode and cParams */
+static ZSTD_useRowMatchFinderMode_e ZSTD_resolveRowMatchFinderMode(ZSTD_useRowMatchFinderMode_e mode,
+ const ZSTD_compressionParameters* const cParams) {
+#if !defined(ZSTD_NO_INTRINSICS) && (defined(__SSE2__) || defined(__ARM_NEON))
+ int const kHasSIMD128 = 1;
+#else
+ int const kHasSIMD128 = 0;
+#endif
+ if (mode != ZSTD_urm_auto) return mode; /* if requested enabled, but no SIMD, we still will use row matchfinder */
+ mode = ZSTD_urm_disableRowMatchFinder;
+ if (!ZSTD_rowMatchFinderSupported(cParams->strategy)) return mode;
+ if (kHasSIMD128) {
+ if (cParams->windowLog > 14) mode = ZSTD_urm_enableRowMatchFinder;
+ } else {
+ if (cParams->windowLog > 17) mode = ZSTD_urm_enableRowMatchFinder;
+ }
+ return mode;
+}
+
+/* Returns 1 if the arguments indicate that we should allocate a chainTable, 0 otherwise */
+static int ZSTD_allocateChainTable(const ZSTD_strategy strategy,
+ const ZSTD_useRowMatchFinderMode_e useRowMatchFinder,
+ const U32 forDDSDict) {
+ assert(useRowMatchFinder != ZSTD_urm_auto);
+ /* We always should allocate a chaintable if we are allocating a matchstate for a DDS dictionary matchstate.
+ * We do not allocate a chaintable if we are using ZSTD_fast, or are using the row-based matchfinder.
+ */
+ return forDDSDict || ((strategy != ZSTD_fast) && !ZSTD_rowMatchFinderUsed(strategy, useRowMatchFinder));
+}
+
/* Returns 1 if compression parameters are such that we should
* enable long distance matching (wlog >= 27, strategy >= btopt).
* Returns 0 otherwise.
@@ -210,6 +257,14 @@ static U32 ZSTD_CParams_shouldEnableLdm(const ZSTD_compressionParameters* const
return cParams->strategy >= ZSTD_btopt && cParams->windowLog >= 27;
}
+/* Returns 1 if compression parameters are such that we should
+ * enable blockSplitter (wlog >= 17, strategy >= btopt).
+ * Returns 0 otherwise.
+ */
+static U32 ZSTD_CParams_useBlockSplitter(const ZSTD_compressionParameters* const cParams) {
+ return cParams->strategy >= ZSTD_btopt && cParams->windowLog >= 17;
+}
+
static ZSTD_CCtx_params ZSTD_makeCCtxParamsFromCParams(
ZSTD_compressionParameters cParams)
{
@@ -218,6 +273,7 @@ static ZSTD_CCtx_params ZSTD_makeCCtxParamsFromCParams(
ZSTD_CCtxParams_init(&cctxParams, ZSTD_CLEVEL_DEFAULT);
cctxParams.cParams = cParams;
+ /* Adjust advanced params according to cParams */
if (ZSTD_CParams_shouldEnableLdm(&cParams)) {
DEBUGLOG(4, "ZSTD_makeCCtxParamsFromCParams(): Including LDM into cctx params");
cctxParams.ldmParams.enableLdm = 1;
@@ -227,6 +283,12 @@ static ZSTD_CCtx_params ZSTD_makeCCtxParamsFromCParams(
assert(cctxParams.ldmParams.hashRateLog < 32);
}
+ if (ZSTD_CParams_useBlockSplitter(&cParams)) {
+ DEBUGLOG(4, "ZSTD_makeCCtxParamsFromCParams(): Including block splitting into cctx params");
+ cctxParams.splitBlocks = 1;
+ }
+
+ cctxParams.useRowMatchFinder = ZSTD_resolveRowMatchFinderMode(cctxParams.useRowMatchFinder, &cParams);
assert(!ZSTD_checkCParams(cParams));
return cctxParams;
}
@@ -269,29 +331,48 @@ size_t ZSTD_CCtxParams_init(ZSTD_CCtx_params* cctxParams, int compressionLevel)
return 0;
}
+#define ZSTD_NO_CLEVEL 0
+
+/**
+ * Initializes the cctxParams from params and compressionLevel.
+ * @param compressionLevel If params are derived from a compression level then that compression level, otherwise ZSTD_NO_CLEVEL.
+ */
+static void ZSTD_CCtxParams_init_internal(ZSTD_CCtx_params* cctxParams, ZSTD_parameters const* params, int compressionLevel)
+{
+ assert(!ZSTD_checkCParams(params->cParams));
+ ZSTD_memset(cctxParams, 0, sizeof(*cctxParams));
+ cctxParams->cParams = params->cParams;
+ cctxParams->fParams = params->fParams;
+ /* Should not matter, as all cParams are presumed properly defined.
+ * But, set it for tracing anyway.
+ */
+ cctxParams->compressionLevel = compressionLevel;
+ cctxParams->useRowMatchFinder = ZSTD_resolveRowMatchFinderMode(cctxParams->useRowMatchFinder, &params->cParams);
+ DEBUGLOG(4, "ZSTD_CCtxParams_init_internal: useRowMatchFinder=%d", cctxParams->useRowMatchFinder);
+}
+
size_t ZSTD_CCtxParams_init_advanced(ZSTD_CCtx_params* cctxParams, ZSTD_parameters params)
{
RETURN_ERROR_IF(!cctxParams, GENERIC, "NULL pointer!");
FORWARD_IF_ERROR( ZSTD_checkCParams(params.cParams) , "");
- ZSTD_memset(cctxParams, 0, sizeof(*cctxParams));
- assert(!ZSTD_checkCParams(params.cParams));
- cctxParams->cParams = params.cParams;
- cctxParams->fParams = params.fParams;
- cctxParams->compressionLevel = ZSTD_CLEVEL_DEFAULT; /* should not matter, as all cParams are presumed properly defined */
+ ZSTD_CCtxParams_init_internal(cctxParams, &params, ZSTD_NO_CLEVEL);
return 0;
}
-/* ZSTD_assignParamsToCCtxParams() :
- * params is presumed valid at this stage */
-static ZSTD_CCtx_params ZSTD_assignParamsToCCtxParams(
- const ZSTD_CCtx_params* cctxParams, const ZSTD_parameters* params)
+/**
+ * Sets cctxParams' cParams and fParams from params, but otherwise leaves them alone.
+ * @param param Validated zstd parameters.
+ */
+static void ZSTD_CCtxParams_setZstdParams(
+ ZSTD_CCtx_params* cctxParams, const ZSTD_parameters* params)
{
- ZSTD_CCtx_params ret = *cctxParams;
assert(!ZSTD_checkCParams(params->cParams));
- ret.cParams = params->cParams;
- ret.fParams = params->fParams;
- ret.compressionLevel = ZSTD_CLEVEL_DEFAULT; /* should not matter, as all cParams are presumed properly defined */
- return ret;
+ cctxParams->cParams = params->cParams;
+ cctxParams->fParams = params->fParams;
+ /* Should not matter, as all cParams are presumed properly defined.
+ * But, set it for tracing anyway.
+ */
+ cctxParams->compressionLevel = ZSTD_NO_CLEVEL;
}
ZSTD_bounds ZSTD_cParam_getBounds(ZSTD_cParameter param)
@@ -468,6 +549,21 @@ ZSTD_bounds ZSTD_cParam_getBounds(ZSTD_cParameter param)
bounds.upperBound = 1;
return bounds;
+ case ZSTD_c_splitBlocks:
+ bounds.lowerBound = 0;
+ bounds.upperBound = 1;
+ return bounds;
+
+ case ZSTD_c_useRowMatchFinder:
+ bounds.lowerBound = (int)ZSTD_urm_auto;
+ bounds.upperBound = (int)ZSTD_urm_enableRowMatchFinder;
+ return bounds;
+
+ case ZSTD_c_deterministicRefPrefix:
+ bounds.lowerBound = 0;
+ bounds.upperBound = 1;
+ return bounds;
+
default:
bounds.error = ERROR(parameter_unsupported);
return bounds;
@@ -529,6 +625,9 @@ static int ZSTD_isUpdateAuthorized(ZSTD_cParameter param)
case ZSTD_c_stableOutBuffer:
case ZSTD_c_blockDelimiters:
case ZSTD_c_validateSequences:
+ case ZSTD_c_splitBlocks:
+ case ZSTD_c_useRowMatchFinder:
+ case ZSTD_c_deterministicRefPrefix:
default:
return 0;
}
@@ -581,6 +680,9 @@ size_t ZSTD_CCtx_setParameter(ZSTD_CCtx* cctx, ZSTD_cParameter param, int value)
case ZSTD_c_stableOutBuffer:
case ZSTD_c_blockDelimiters:
case ZSTD_c_validateSequences:
+ case ZSTD_c_splitBlocks:
+ case ZSTD_c_useRowMatchFinder:
+ case ZSTD_c_deterministicRefPrefix:
break;
default: RETURN_ERROR(parameter_unsupported, "unknown parameter");
@@ -792,17 +894,32 @@ size_t ZSTD_CCtxParams_setParameter(ZSTD_CCtx_params* CCtxParams,
CCtxParams->validateSequences = value;
return CCtxParams->validateSequences;
+ case ZSTD_c_splitBlocks:
+ BOUNDCHECK(ZSTD_c_splitBlocks, value);
+ CCtxParams->splitBlocks = value;
+ return CCtxParams->splitBlocks;
+
+ case ZSTD_c_useRowMatchFinder:
+ BOUNDCHECK(ZSTD_c_useRowMatchFinder, value);
+ CCtxParams->useRowMatchFinder = (ZSTD_useRowMatchFinderMode_e)value;
+ return CCtxParams->useRowMatchFinder;
+
+ case ZSTD_c_deterministicRefPrefix:
+ BOUNDCHECK(ZSTD_c_deterministicRefPrefix, value);
+ CCtxParams->deterministicRefPrefix = !!value;
+ return CCtxParams->deterministicRefPrefix;
+
default: RETURN_ERROR(parameter_unsupported, "unknown parameter");
}
}
-size_t ZSTD_CCtx_getParameter(ZSTD_CCtx* cctx, ZSTD_cParameter param, int* value)
+size_t ZSTD_CCtx_getParameter(ZSTD_CCtx const* cctx, ZSTD_cParameter param, int* value)
{
return ZSTD_CCtxParams_getParameter(&cctx->requestedParams, param, value);
}
size_t ZSTD_CCtxParams_getParameter(
- ZSTD_CCtx_params* CCtxParams, ZSTD_cParameter param, int* value)
+ ZSTD_CCtx_params const* CCtxParams, ZSTD_cParameter param, int* value)
{
switch(param)
{
@@ -915,6 +1032,15 @@ size_t ZSTD_CCtxParams_getParameter(
case ZSTD_c_validateSequences :
*value = (int)CCtxParams->validateSequences;
break;
+ case ZSTD_c_splitBlocks :
+ *value = (int)CCtxParams->splitBlocks;
+ break;
+ case ZSTD_c_useRowMatchFinder :
+ *value = (int)CCtxParams->useRowMatchFinder;
+ break;
+ case ZSTD_c_deterministicRefPrefix:
+ *value = (int)CCtxParams->deterministicRefPrefix;
+ break;
default: RETURN_ERROR(parameter_unsupported, "unknown parameter");
}
return 0;
@@ -1188,15 +1314,26 @@ ZSTD_adjustCParams_internal(ZSTD_compressionParameters cPar,
const U64 maxWindowResize = 1ULL << (ZSTD_WINDOWLOG_MAX-1);
assert(ZSTD_checkCParams(cPar)==0);
- if (dictSize && srcSize == ZSTD_CONTENTSIZE_UNKNOWN)
- srcSize = minSrcSize;
-
switch (mode) {
- case ZSTD_cpm_noAttachDict:
case ZSTD_cpm_unknown:
+ case ZSTD_cpm_noAttachDict:
+ /* If we don't know the source size, don't make any
+ * assumptions about it. We will already have selected
+ * smaller parameters if a dictionary is in use.
+ */
+ break;
case ZSTD_cpm_createCDict:
+ /* Assume a small source size when creating a dictionary
+ * with an unkown source size.
+ */
+ if (dictSize && srcSize == ZSTD_CONTENTSIZE_UNKNOWN)
+ srcSize = minSrcSize;
break;
case ZSTD_cpm_attachDict:
+ /* Dictionary has its own dedicated parameters which have
+ * already been selected. We are selecting parameters
+ * for only the source.
+ */
dictSize = 0;
break;
default:
@@ -1213,7 +1350,8 @@ ZSTD_adjustCParams_internal(ZSTD_compressionParameters cPar,
ZSTD_highbit32(tSize-1) + 1;
if (cPar.windowLog > srcLog) cPar.windowLog = srcLog;
}
- { U32 const dictAndWindowLog = ZSTD_dictAndWindowLog(cPar.windowLog, (U64)srcSize, (U64)dictSize);
+ if (srcSize != ZSTD_CONTENTSIZE_UNKNOWN) {
+ U32 const dictAndWindowLog = ZSTD_dictAndWindowLog(cPar.windowLog, (U64)srcSize, (U64)dictSize);
U32 const cycleLog = ZSTD_cycleLog(cPar.chainLog, cPar.strategy);
if (cPar.hashLog > dictAndWindowLog+1) cPar.hashLog = dictAndWindowLog+1;
if (cycleLog > dictAndWindowLog)
@@ -1269,9 +1407,14 @@ ZSTD_compressionParameters ZSTD_getCParamsFromCCtxParams(
static size_t
ZSTD_sizeof_matchState(const ZSTD_compressionParameters* const cParams,
+ const ZSTD_useRowMatchFinderMode_e useRowMatchFinder,
+ const U32 enableDedicatedDictSearch,
const U32 forCCtx)
{
- size_t const chainSize = (cParams->strategy == ZSTD_fast) ? 0 : ((size_t)1 << cParams->chainLog);
+ /* chain table size should be 0 for fast or row-hash strategies */
+ size_t const chainSize = ZSTD_allocateChainTable(cParams->strategy, useRowMatchFinder, enableDedicatedDictSearch && !forCCtx)
+ ? ((size_t)1 << cParams->chainLog)
+ : 0;
size_t const hSize = ((size_t)1) << cParams->hashLog;
U32 const hashLog3 = (forCCtx && cParams->minMatch==3) ? MIN(ZSTD_HASHLOG3_MAX, cParams->windowLog) : 0;
size_t const h3Size = hashLog3 ? ((size_t)1) << hashLog3 : 0;
@@ -1281,24 +1424,34 @@ ZSTD_sizeof_matchState(const ZSTD_compressionParameters* const cParams,
+ hSize * sizeof(U32)
+ h3Size * sizeof(U32);
size_t const optPotentialSpace =
- ZSTD_cwksp_alloc_size((MaxML+1) * sizeof(U32))
- + ZSTD_cwksp_alloc_size((MaxLL+1) * sizeof(U32))
- + ZSTD_cwksp_alloc_size((MaxOff+1) * sizeof(U32))
- + ZSTD_cwksp_alloc_size((1<<Litbits) * sizeof(U32))
- + ZSTD_cwksp_alloc_size((ZSTD_OPT_NUM+1) * sizeof(ZSTD_match_t))
- + ZSTD_cwksp_alloc_size((ZSTD_OPT_NUM+1) * sizeof(ZSTD_optimal_t));
+ ZSTD_cwksp_aligned_alloc_size((MaxML+1) * sizeof(U32))
+ + ZSTD_cwksp_aligned_alloc_size((MaxLL+1) * sizeof(U32))
+ + ZSTD_cwksp_aligned_alloc_size((MaxOff+1) * sizeof(U32))
+ + ZSTD_cwksp_aligned_alloc_size((1<<Litbits) * sizeof(U32))
+ + ZSTD_cwksp_aligned_alloc_size((ZSTD_OPT_NUM+1) * sizeof(ZSTD_match_t))
+ + ZSTD_cwksp_aligned_alloc_size((ZSTD_OPT_NUM+1) * sizeof(ZSTD_optimal_t));
+ size_t const lazyAdditionalSpace = ZSTD_rowMatchFinderUsed(cParams->strategy, useRowMatchFinder)
+ ? ZSTD_cwksp_aligned_alloc_size(hSize*sizeof(U16))
+ : 0;
size_t const optSpace = (forCCtx && (cParams->strategy >= ZSTD_btopt))
? optPotentialSpace
: 0;
+ size_t const slackSpace = ZSTD_cwksp_slack_space_required();
+
+ /* tables are guaranteed to be sized in multiples of 64 bytes (or 16 uint32_t) */
+ ZSTD_STATIC_ASSERT(ZSTD_HASHLOG_MIN >= 4 && ZSTD_WINDOWLOG_MIN >= 4 && ZSTD_CHAINLOG_MIN >= 4);
+ assert(useRowMatchFinder != ZSTD_urm_auto);
+
DEBUGLOG(4, "chainSize: %u - hSize: %u - h3Size: %u",
(U32)chainSize, (U32)hSize, (U32)h3Size);
- return tableSpace + optSpace;
+ return tableSpace + optSpace + slackSpace + lazyAdditionalSpace;
}
static size_t ZSTD_estimateCCtxSize_usingCCtxParams_internal(
const ZSTD_compressionParameters* cParams,
const ldmParams_t* ldmParams,
const int isStatic,
+ const ZSTD_useRowMatchFinderMode_e useRowMatchFinder,
const size_t buffInSize,
const size_t buffOutSize,
const U64 pledgedSrcSize)
@@ -1308,16 +1461,16 @@ static size_t ZSTD_estimateCCtxSize_usingCCtxParams_internal(
U32 const divider = (cParams->minMatch==3) ? 3 : 4;
size_t const maxNbSeq = blockSize / divider;
size_t const tokenSpace = ZSTD_cwksp_alloc_size(WILDCOPY_OVERLENGTH + blockSize)
- + ZSTD_cwksp_alloc_size(maxNbSeq * sizeof(seqDef))
+ + ZSTD_cwksp_aligned_alloc_size(maxNbSeq * sizeof(seqDef))
+ 3 * ZSTD_cwksp_alloc_size(maxNbSeq * sizeof(BYTE));
size_t const entropySpace = ZSTD_cwksp_alloc_size(ENTROPY_WORKSPACE_SIZE);
size_t const blockStateSpace = 2 * ZSTD_cwksp_alloc_size(sizeof(ZSTD_compressedBlockState_t));
- size_t const matchStateSize = ZSTD_sizeof_matchState(cParams, /* forCCtx */ 1);
+ size_t const matchStateSize = ZSTD_sizeof_matchState(cParams, useRowMatchFinder, /* enableDedicatedDictSearch */ 0, /* forCCtx */ 1);
size_t const ldmSpace = ZSTD_ldm_getTableSize(*ldmParams);
size_t const maxNbLdmSeq = ZSTD_ldm_getMaxNbSeq(*ldmParams, blockSize);
size_t const ldmSeqSpace = ldmParams->enableLdm ?
- ZSTD_cwksp_alloc_size(maxNbLdmSeq * sizeof(rawSeq)) : 0;
+ ZSTD_cwksp_aligned_alloc_size(maxNbLdmSeq * sizeof(rawSeq)) : 0;
size_t const bufferSpace = ZSTD_cwksp_alloc_size(buffInSize)
@@ -1343,25 +1496,45 @@ size_t ZSTD_estimateCCtxSize_usingCCtxParams(const ZSTD_CCtx_params* params)
{
ZSTD_compressionParameters const cParams =
ZSTD_getCParamsFromCCtxParams(params, ZSTD_CONTENTSIZE_UNKNOWN, 0, ZSTD_cpm_noAttachDict);
+ ZSTD_useRowMatchFinderMode_e const useRowMatchFinder = ZSTD_resolveRowMatchFinderMode(params->useRowMatchFinder,
+ &cParams);
RETURN_ERROR_IF(params->nbWorkers > 0, GENERIC, "Estimate CCtx size is supported for single-threaded compression only.");
/* estimateCCtxSize is for one-shot compression. So no buffers should
* be needed. However, we still allocate two 0-sized buffers, which can
* take space under ASAN. */
return ZSTD_estimateCCtxSize_usingCCtxParams_internal(
- &cParams, &params->ldmParams, 1, 0, 0, ZSTD_CONTENTSIZE_UNKNOWN);
+ &cParams, &params->ldmParams, 1, useRowMatchFinder, 0, 0, ZSTD_CONTENTSIZE_UNKNOWN);
}
size_t ZSTD_estimateCCtxSize_usingCParams(ZSTD_compressionParameters cParams)
{
- ZSTD_CCtx_params const params = ZSTD_makeCCtxParamsFromCParams(cParams);
- return ZSTD_estimateCCtxSize_usingCCtxParams(&params);
+ ZSTD_CCtx_params initialParams = ZSTD_makeCCtxParamsFromCParams(cParams);
+ if (ZSTD_rowMatchFinderSupported(cParams.strategy)) {
+ /* Pick bigger of not using and using row-based matchfinder for greedy and lazy strategies */
+ size_t noRowCCtxSize;
+ size_t rowCCtxSize;
+ initialParams.useRowMatchFinder = ZSTD_urm_disableRowMatchFinder;
+ noRowCCtxSize = ZSTD_estimateCCtxSize_usingCCtxParams(&initialParams);
+ initialParams.useRowMatchFinder = ZSTD_urm_enableRowMatchFinder;
+ rowCCtxSize = ZSTD_estimateCCtxSize_usingCCtxParams(&initialParams);
+ return MAX(noRowCCtxSize, rowCCtxSize);
+ } else {
+ return ZSTD_estimateCCtxSize_usingCCtxParams(&initialParams);
+ }
}
static size_t ZSTD_estimateCCtxSize_internal(int compressionLevel)
{
- ZSTD_compressionParameters const cParams = ZSTD_getCParams_internal(compressionLevel, ZSTD_CONTENTSIZE_UNKNOWN, 0, ZSTD_cpm_noAttachDict);
- return ZSTD_estimateCCtxSize_usingCParams(cParams);
+ int tier = 0;
+ size_t largestSize = 0;
+ static const unsigned long long srcSizeTiers[4] = {16 KB, 128 KB, 256 KB, ZSTD_CONTENTSIZE_UNKNOWN};
+ for (; tier < 4; ++tier) {
+ /* Choose the set of cParams for a given level across all srcSizes that give the largest cctxSize */
+ ZSTD_compressionParameters const cParams = ZSTD_getCParams_internal(compressionLevel, srcSizeTiers[tier], 0, ZSTD_cpm_noAttachDict);
+ largestSize = MAX(ZSTD_estimateCCtxSize_usingCParams(cParams), largestSize);
+ }
+ return largestSize;
}
size_t ZSTD_estimateCCtxSize(int compressionLevel)
@@ -1369,6 +1542,7 @@ size_t ZSTD_estimateCCtxSize(int compressionLevel)
int level;
size_t memBudget = 0;
for (level=MIN(compressionLevel, 1); level<=compressionLevel; level++) {
+ /* Ensure monotonically increasing memory usage as compression level increases */
size_t const newMB = ZSTD_estimateCCtxSize_internal(level);
if (newMB > memBudget) memBudget = newMB;
}
@@ -1387,17 +1561,29 @@ size_t ZSTD_estimateCStreamSize_usingCCtxParams(const ZSTD_CCtx_params* params)
size_t const outBuffSize = (params->outBufferMode == ZSTD_bm_buffered)
? ZSTD_compressBound(blockSize) + 1
: 0;
+ ZSTD_useRowMatchFinderMode_e const useRowMatchFinder = ZSTD_resolveRowMatchFinderMode(params->useRowMatchFinder, &params->cParams);
return ZSTD_estimateCCtxSize_usingCCtxParams_internal(
- &cParams, &params->ldmParams, 1, inBuffSize, outBuffSize,
+ &cParams, &params->ldmParams, 1, useRowMatchFinder, inBuffSize, outBuffSize,
ZSTD_CONTENTSIZE_UNKNOWN);
}
}
size_t ZSTD_estimateCStreamSize_usingCParams(ZSTD_compressionParameters cParams)
{
- ZSTD_CCtx_params const params = ZSTD_makeCCtxParamsFromCParams(cParams);
- return ZSTD_estimateCStreamSize_usingCCtxParams(&params);
+ ZSTD_CCtx_params initialParams = ZSTD_makeCCtxParamsFromCParams(cParams);
+ if (ZSTD_rowMatchFinderSupported(cParams.strategy)) {
+ /* Pick bigger of not using and using row-based matchfinder for greedy and lazy strategies */
+ size_t noRowCCtxSize;
+ size_t rowCCtxSize;
+ initialParams.useRowMatchFinder = ZSTD_urm_disableRowMatchFinder;
+ noRowCCtxSize = ZSTD_estimateCStreamSize_usingCCtxParams(&initialParams);
+ initialParams.useRowMatchFinder = ZSTD_urm_enableRowMatchFinder;
+ rowCCtxSize = ZSTD_estimateCStreamSize_usingCCtxParams(&initialParams);
+ return MAX(noRowCCtxSize, rowCCtxSize);
+ } else {
+ return ZSTD_estimateCStreamSize_usingCCtxParams(&initialParams);
+ }
}
static size_t ZSTD_estimateCStreamSize_internal(int compressionLevel)
@@ -1522,20 +1708,27 @@ typedef enum {
ZSTD_resetTarget_CCtx
} ZSTD_resetTarget_e;
+
static size_t
ZSTD_reset_matchState(ZSTD_matchState_t* ms,
ZSTD_cwksp* ws,
const ZSTD_compressionParameters* cParams,
+ const ZSTD_useRowMatchFinderMode_e useRowMatchFinder,
const ZSTD_compResetPolicy_e crp,
const ZSTD_indexResetPolicy_e forceResetIndex,
const ZSTD_resetTarget_e forWho)
{
- size_t const chainSize = (cParams->strategy == ZSTD_fast) ? 0 : ((size_t)1 << cParams->chainLog);
+ /* disable chain table allocation for fast or row-based strategies */
+ size_t const chainSize = ZSTD_allocateChainTable(cParams->strategy, useRowMatchFinder,
+ ms->dedicatedDictSearch && (forWho == ZSTD_resetTarget_CDict))
+ ? ((size_t)1 << cParams->chainLog)
+ : 0;
size_t const hSize = ((size_t)1) << cParams->hashLog;
U32 const hashLog3 = ((forWho == ZSTD_resetTarget_CCtx) && cParams->minMatch==3) ? MIN(ZSTD_HASHLOG3_MAX, cParams->windowLog) : 0;
size_t const h3Size = hashLog3 ? ((size_t)1) << hashLog3 : 0;
DEBUGLOG(4, "reset indices : %u", forceResetIndex == ZSTDirp_reset);
+ assert(useRowMatchFinder != ZSTD_urm_auto);
if (forceResetIndex == ZSTDirp_reset) {
ZSTD_window_init(&ms->window);
ZSTD_cwksp_mark_tables_dirty(ws);
@@ -1574,11 +1767,23 @@ ZSTD_reset_matchState(ZSTD_matchState_t* ms,
ms->opt.priceTable = (ZSTD_optimal_t*)ZSTD_cwksp_reserve_aligned(ws, (ZSTD_OPT_NUM+1) * sizeof(ZSTD_optimal_t));
}
+ if (ZSTD_rowMatchFinderUsed(cParams->strategy, useRowMatchFinder)) {
+ { /* Row match finder needs an additional table of hashes ("tags") */
+ size_t const tagTableSize = hSize*sizeof(U16);
+ ms->tagTable = (U16*)ZSTD_cwksp_reserve_aligned(ws, tagTableSize);
+ if (ms->tagTable) ZSTD_memset(ms->tagTable, 0, tagTableSize);
+ }
+ { /* Switch to 32-entry rows if searchLog is 5 (or more) */
+ U32 const rowLog = cParams->searchLog < 5 ? 4 : 5;
+ assert(cParams->hashLog > rowLog);
+ ms->rowHashLog = cParams->hashLog - rowLog;
+ }
+ }
+
ms->cParams = *cParams;
RETURN_ERROR_IF(ZSTD_cwksp_reserve_failed(ws), memory_allocation,
"failed a workspace allocation in ZSTD_reset_matchState");
-
return 0;
}
@@ -1595,62 +1800,85 @@ static int ZSTD_indexTooCloseToMax(ZSTD_window_t w)
return (size_t)(w.nextSrc - w.base) > (ZSTD_CURRENT_MAX - ZSTD_INDEXOVERFLOW_MARGIN);
}
+/** ZSTD_dictTooBig():
+ * When dictionaries are larger than ZSTD_CHUNKSIZE_MAX they can't be loaded in
+ * one go generically. So we ensure that in that case we reset the tables to zero,
+ * so that we can load as much of the dictionary as possible.
+ */
+static int ZSTD_dictTooBig(size_t const loadedDictSize)
+{
+ return loadedDictSize > ZSTD_CHUNKSIZE_MAX;
+}
+
/*! ZSTD_resetCCtx_internal() :
- note : `params` are assumed fully validated at this stage */
+ * @param loadedDictSize The size of the dictionary to be loaded
+ * into the context, if any. If no dictionary is used, or the
+ * dictionary is being attached / copied, then pass 0.
+ * note : `params` are assumed fully validated at this stage.
+ */
static size_t ZSTD_resetCCtx_internal(ZSTD_CCtx* zc,
- ZSTD_CCtx_params params,
+ ZSTD_CCtx_params const* params,
U64 const pledgedSrcSize,
+ size_t const loadedDictSize,
ZSTD_compResetPolicy_e const crp,
ZSTD_buffered_policy_e const zbuff)
{
ZSTD_cwksp* const ws = &zc->workspace;
- DEBUGLOG(4, "ZSTD_resetCCtx_internal: pledgedSrcSize=%u, wlog=%u",
- (U32)pledgedSrcSize, params.cParams.windowLog);
- assert(!ZSTD_isError(ZSTD_checkCParams(params.cParams)));
+ DEBUGLOG(4, "ZSTD_resetCCtx_internal: pledgedSrcSize=%u, wlog=%u, useRowMatchFinder=%d",
+ (U32)pledgedSrcSize, params->cParams.windowLog, (int)params->useRowMatchFinder);
+ assert(!ZSTD_isError(ZSTD_checkCParams(params->cParams)));
zc->isFirstBlock = 1;
- if (params.ldmParams.enableLdm) {
+ /* Set applied params early so we can modify them for LDM,
+ * and point params at the applied params.
+ */
+ zc->appliedParams = *params;
+ params = &zc->appliedParams;
+
+ assert(params->useRowMatchFinder != ZSTD_urm_auto);
+ if (params->ldmParams.enableLdm) {
/* Adjust long distance matching parameters */
- ZSTD_ldm_adjustParameters(&params.ldmParams, &params.cParams);
- assert(params.ldmParams.hashLog >= params.ldmParams.bucketSizeLog);
- assert(params.ldmParams.hashRateLog < 32);
- zc->ldmState.hashPower = ZSTD_rollingHash_primePower(params.ldmParams.minMatchLength);
+ ZSTD_ldm_adjustParameters(&zc->appliedParams.ldmParams, &params->cParams);
+ assert(params->ldmParams.hashLog >= params->ldmParams.bucketSizeLog);
+ assert(params->ldmParams.hashRateLog < 32);
}
- { size_t const windowSize = MAX(1, (size_t)MIN(((U64)1 << params.cParams.windowLog), pledgedSrcSize));
+ { size_t const windowSize = MAX(1, (size_t)MIN(((U64)1 << params->cParams.windowLog), pledgedSrcSize));
size_t const blockSize = MIN(ZSTD_BLOCKSIZE_MAX, windowSize);
- U32 const divider = (params.cParams.minMatch==3) ? 3 : 4;
+ U32 const divider = (params->cParams.minMatch==3) ? 3 : 4;
size_t const maxNbSeq = blockSize / divider;
- size_t const buffOutSize = (zbuff == ZSTDb_buffered && params.outBufferMode == ZSTD_bm_buffered)
+ size_t const buffOutSize = (zbuff == ZSTDb_buffered && params->outBufferMode == ZSTD_bm_buffered)
? ZSTD_compressBound(blockSize) + 1
: 0;
- size_t const buffInSize = (zbuff == ZSTDb_buffered && params.inBufferMode == ZSTD_bm_buffered)
+ size_t const buffInSize = (zbuff == ZSTDb_buffered && params->inBufferMode == ZSTD_bm_buffered)
? windowSize + blockSize
: 0;
- size_t const maxNbLdmSeq = ZSTD_ldm_getMaxNbSeq(params.ldmParams, blockSize);
+ size_t const maxNbLdmSeq = ZSTD_ldm_getMaxNbSeq(params->ldmParams, blockSize);
int const indexTooClose = ZSTD_indexTooCloseToMax(zc->blockState.matchState.window);
+ int const dictTooBig = ZSTD_dictTooBig(loadedDictSize);
ZSTD_indexResetPolicy_e needsIndexReset =
- (!indexTooClose && zc->initialized) ? ZSTDirp_continue : ZSTDirp_reset;
+ (indexTooClose || dictTooBig || !zc->initialized) ? ZSTDirp_reset : ZSTDirp_continue;
size_t const neededSpace =
ZSTD_estimateCCtxSize_usingCCtxParams_internal(
- &params.cParams, &params.ldmParams, zc->staticSize != 0,
+ &params->cParams, &params->ldmParams, zc->staticSize != 0, params->useRowMatchFinder,
buffInSize, buffOutSize, pledgedSrcSize);
+ int resizeWorkspace;
+
FORWARD_IF_ERROR(neededSpace, "cctx size estimate failed!");
if (!zc->staticSize) ZSTD_cwksp_bump_oversized_duration(ws, 0);
- /* Check if workspace is large enough, alloc a new one if needed */
- {
+ { /* Check if workspace is large enough, alloc a new one if needed */
int const workspaceTooSmall = ZSTD_cwksp_sizeof(ws) < neededSpace;
int const workspaceWasteful = ZSTD_cwksp_check_wasteful(ws, neededSpace);
-
+ resizeWorkspace = workspaceTooSmall || workspaceWasteful;
DEBUGLOG(4, "Need %zu B workspace", neededSpace);
DEBUGLOG(4, "windowSize: %zu - blockSize: %zu", windowSize, blockSize);
- if (workspaceTooSmall || workspaceWasteful) {
+ if (resizeWorkspace) {
DEBUGLOG(4, "Resize workspaceSize from %zuKB to %zuKB",
ZSTD_cwksp_sizeof(ws) >> 10,
neededSpace >> 10);
@@ -1678,8 +1906,7 @@ static size_t ZSTD_resetCCtx_internal(ZSTD_CCtx* zc,
ZSTD_cwksp_clear(ws);
/* init params */
- zc->appliedParams = params;
- zc->blockState.matchState.cParams = params.cParams;
+ zc->blockState.matchState.cParams = params->cParams;
zc->pledgedSrcSizePlusOne = pledgedSrcSize+1;
zc->consumedSrcSize = 0;
zc->producedCSize = 0;
@@ -1692,6 +1919,7 @@ static size_t ZSTD_resetCCtx_internal(ZSTD_CCtx* zc,
XXH64_reset(&zc->xxhState, 0);
zc->stage = ZSTDcs_init;
zc->dictID = 0;
+ zc->dictContentSize = 0;
ZSTD_reset_compressedBlockState(zc->blockState.prevCBlock);
@@ -1709,13 +1937,13 @@ static size_t ZSTD_resetCCtx_internal(ZSTD_CCtx* zc,
zc->outBuff = (char*)ZSTD_cwksp_reserve_buffer(ws, buffOutSize);
/* ldm bucketOffsets table */
- if (params.ldmParams.enableLdm) {
+ if (params->ldmParams.enableLdm) {
/* TODO: avoid memset? */
- size_t const ldmBucketSize =
- ((size_t)1) << (params.ldmParams.hashLog -
- params.ldmParams.bucketSizeLog);
- zc->ldmState.bucketOffsets = ZSTD_cwksp_reserve_buffer(ws, ldmBucketSize);
- ZSTD_memset(zc->ldmState.bucketOffsets, 0, ldmBucketSize);
+ size_t const numBuckets =
+ ((size_t)1) << (params->ldmParams.hashLog -
+ params->ldmParams.bucketSizeLog);
+ zc->ldmState.bucketOffsets = ZSTD_cwksp_reserve_buffer(ws, numBuckets);
+ ZSTD_memset(zc->ldmState.bucketOffsets, 0, numBuckets);
}
/* sequences storage */
@@ -1729,32 +1957,28 @@ static size_t ZSTD_resetCCtx_internal(ZSTD_CCtx* zc,
FORWARD_IF_ERROR(ZSTD_reset_matchState(
&zc->blockState.matchState,
ws,
- &params.cParams,
+ &params->cParams,
+ params->useRowMatchFinder,
crp,
needsIndexReset,
ZSTD_resetTarget_CCtx), "");
/* ldm hash table */
- if (params.ldmParams.enableLdm) {
+ if (params->ldmParams.enableLdm) {
/* TODO: avoid memset? */
- size_t const ldmHSize = ((size_t)1) << params.ldmParams.hashLog;
+ size_t const ldmHSize = ((size_t)1) << params->ldmParams.hashLog;
zc->ldmState.hashTable = (ldmEntry_t*)ZSTD_cwksp_reserve_aligned(ws, ldmHSize * sizeof(ldmEntry_t));
ZSTD_memset(zc->ldmState.hashTable, 0, ldmHSize * sizeof(ldmEntry_t));
zc->ldmSequences = (rawSeq*)ZSTD_cwksp_reserve_aligned(ws, maxNbLdmSeq * sizeof(rawSeq));
zc->maxNbLdmSequences = maxNbLdmSeq;
ZSTD_window_init(&zc->ldmState.window);
- ZSTD_window_clear(&zc->ldmState.window);
zc->ldmState.loadedDictEnd = 0;
}
- /* Due to alignment, when reusing a workspace, we can actually consume
- * up to 3 extra bytes for alignment. See the comments in zstd_cwksp.h
- */
- assert(ZSTD_cwksp_used(ws) >= neededSpace &&
- ZSTD_cwksp_used(ws) <= neededSpace + 3);
-
+ assert(ZSTD_cwksp_estimated_space_within_bounds(ws, neededSpace, resizeWorkspace));
DEBUGLOG(3, "wksp: finished allocating, %zd bytes remain available", ZSTD_cwksp_available_space(ws));
+
zc->initialized = 1;
return 0;
@@ -1810,6 +2034,8 @@ ZSTD_resetCCtx_byAttachingCDict(ZSTD_CCtx* cctx,
U64 pledgedSrcSize,
ZSTD_buffered_policy_e zbuff)
{
+ DEBUGLOG(4, "ZSTD_resetCCtx_byAttachingCDict() pledgedSrcSize=%llu",
+ (unsigned long long)pledgedSrcSize);
{
ZSTD_compressionParameters adjusted_cdict_cParams = cdict->matchState.cParams;
unsigned const windowLog = params.cParams.windowLog;
@@ -1825,7 +2051,9 @@ ZSTD_resetCCtx_byAttachingCDict(ZSTD_CCtx* cctx,
params.cParams = ZSTD_adjustCParams_internal(adjusted_cdict_cParams, pledgedSrcSize,
cdict->dictContentSize, ZSTD_cpm_attachDict);
params.cParams.windowLog = windowLog;
- FORWARD_IF_ERROR(ZSTD_resetCCtx_internal(cctx, params, pledgedSrcSize,
+ params.useRowMatchFinder = cdict->useRowMatchFinder; /* cdict overrides */
+ FORWARD_IF_ERROR(ZSTD_resetCCtx_internal(cctx, &params, pledgedSrcSize,
+ /* loadedDictSize */ 0,
ZSTDcrp_makeClean, zbuff), "");
assert(cctx->appliedParams.cParams.strategy == adjusted_cdict_cParams.strategy);
}
@@ -1852,6 +2080,7 @@ ZSTD_resetCCtx_byAttachingCDict(ZSTD_CCtx* cctx,
} }
cctx->dictID = cdict->dictID;
+ cctx->dictContentSize = cdict->dictContentSize;
/* copy block state */
ZSTD_memcpy(cctx->blockState.prevCBlock, &cdict->cBlockState, sizeof(cdict->cBlockState));
@@ -1868,15 +2097,17 @@ static size_t ZSTD_resetCCtx_byCopyingCDict(ZSTD_CCtx* cctx,
const ZSTD_compressionParameters *cdict_cParams = &cdict->matchState.cParams;
assert(!cdict->matchState.dedicatedDictSearch);
-
- DEBUGLOG(4, "copying dictionary into context");
+ DEBUGLOG(4, "ZSTD_resetCCtx_byCopyingCDict() pledgedSrcSize=%llu",
+ (unsigned long long)pledgedSrcSize);
{ unsigned const windowLog = params.cParams.windowLog;
assert(windowLog != 0);
/* Copy only compression parameters related to tables. */
params.cParams = *cdict_cParams;
params.cParams.windowLog = windowLog;
- FORWARD_IF_ERROR(ZSTD_resetCCtx_internal(cctx, params, pledgedSrcSize,
+ params.useRowMatchFinder = cdict->useRowMatchFinder;
+ FORWARD_IF_ERROR(ZSTD_resetCCtx_internal(cctx, &params, pledgedSrcSize,
+ /* loadedDictSize */ 0,
ZSTDcrp_leaveDirty, zbuff), "");
assert(cctx->appliedParams.cParams.strategy == cdict_cParams->strategy);
assert(cctx->appliedParams.cParams.hashLog == cdict_cParams->hashLog);
@@ -1884,17 +2115,30 @@ static size_t ZSTD_resetCCtx_byCopyingCDict(ZSTD_CCtx* cctx,
}
ZSTD_cwksp_mark_tables_dirty(&cctx->workspace);
+ assert(params.useRowMatchFinder != ZSTD_urm_auto);
/* copy tables */
- { size_t const chainSize = (cdict_cParams->strategy == ZSTD_fast) ? 0 : ((size_t)1 << cdict_cParams->chainLog);
+ { size_t const chainSize = ZSTD_allocateChainTable(cdict_cParams->strategy, cdict->useRowMatchFinder, 0 /* DDS guaranteed disabled */)
+ ? ((size_t)1 << cdict_cParams->chainLog)
+ : 0;
size_t const hSize = (size_t)1 << cdict_cParams->hashLog;
ZSTD_memcpy(cctx->blockState.matchState.hashTable,
cdict->matchState.hashTable,
hSize * sizeof(U32));
- ZSTD_memcpy(cctx->blockState.matchState.chainTable,
+ /* Do not copy cdict's chainTable if cctx has parameters such that it would not use chainTable */
+ if (ZSTD_allocateChainTable(cctx->appliedParams.cParams.strategy, cctx->appliedParams.useRowMatchFinder, 0 /* forDDSDict */)) {
+ ZSTD_memcpy(cctx->blockState.matchState.chainTable,
cdict->matchState.chainTable,
chainSize * sizeof(U32));
+ }
+ /* copy tag table */
+ if (ZSTD_rowMatchFinderUsed(cdict_cParams->strategy, cdict->useRowMatchFinder)) {
+ size_t const tagTableSize = hSize*sizeof(U16);
+ ZSTD_memcpy(cctx->blockState.matchState.tagTable,
+ cdict->matchState.tagTable,
+ tagTableSize);
+ }
}
/* Zero the hashTable3, since the cdict never fills it */
@@ -1915,6 +2159,7 @@ static size_t ZSTD_resetCCtx_byCopyingCDict(ZSTD_CCtx* cctx,
}
cctx->dictID = cdict->dictID;
+ cctx->dictContentSize = cdict->dictContentSize;
/* copy block state */
ZSTD_memcpy(cctx->blockState.prevCBlock, &cdict->cBlockState, sizeof(cdict->cBlockState));
@@ -1957,16 +2202,18 @@ static size_t ZSTD_copyCCtx_internal(ZSTD_CCtx* dstCCtx,
U64 pledgedSrcSize,
ZSTD_buffered_policy_e zbuff)
{
- DEBUGLOG(5, "ZSTD_copyCCtx_internal");
RETURN_ERROR_IF(srcCCtx->stage!=ZSTDcs_init, stage_wrong,
"Can't copy a ctx that's not in init stage.");
-
+ DEBUGLOG(5, "ZSTD_copyCCtx_internal");
ZSTD_memcpy(&dstCCtx->customMem, &srcCCtx->customMem, sizeof(ZSTD_customMem));
{ ZSTD_CCtx_params params = dstCCtx->requestedParams;
/* Copy only compression parameters related to tables. */
params.cParams = srcCCtx->appliedParams.cParams;
+ assert(srcCCtx->appliedParams.useRowMatchFinder != ZSTD_urm_auto);
+ params.useRowMatchFinder = srcCCtx->appliedParams.useRowMatchFinder;
params.fParams = fParams;
- ZSTD_resetCCtx_internal(dstCCtx, params, pledgedSrcSize,
+ ZSTD_resetCCtx_internal(dstCCtx, &params, pledgedSrcSize,
+ /* loadedDictSize */ 0,
ZSTDcrp_leaveDirty, zbuff);
assert(dstCCtx->appliedParams.cParams.windowLog == srcCCtx->appliedParams.cParams.windowLog);
assert(dstCCtx->appliedParams.cParams.strategy == srcCCtx->appliedParams.cParams.strategy);
@@ -1978,7 +2225,11 @@ static size_t ZSTD_copyCCtx_internal(ZSTD_CCtx* dstCCtx,
ZSTD_cwksp_mark_tables_dirty(&dstCCtx->workspace);
/* copy tables */
- { size_t const chainSize = (srcCCtx->appliedParams.cParams.strategy == ZSTD_fast) ? 0 : ((size_t)1 << srcCCtx->appliedParams.cParams.chainLog);
+ { size_t const chainSize = ZSTD_allocateChainTable(srcCCtx->appliedParams.cParams.strategy,
+ srcCCtx->appliedParams.useRowMatchFinder,
+ 0 /* forDDSDict */)
+ ? ((size_t)1 << srcCCtx->appliedParams.cParams.chainLog)
+ : 0;
size_t const hSize = (size_t)1 << srcCCtx->appliedParams.cParams.hashLog;
int const h3log = srcCCtx->blockState.matchState.hashLog3;
size_t const h3Size = h3log ? ((size_t)1 << h3log) : 0;
@@ -2005,6 +2256,7 @@ static size_t ZSTD_copyCCtx_internal(ZSTD_CCtx* dstCCtx,
dstMatchState->loadedDictEnd= srcMatchState->loadedDictEnd;
}
dstCCtx->dictID = srcCCtx->dictID;
+ dstCCtx->dictContentSize = srcCCtx->dictContentSize;
/* copy block state */
ZSTD_memcpy(dstCCtx->blockState.prevCBlock, srcCCtx->blockState.prevCBlock, sizeof(*srcCCtx->blockState.prevCBlock));
@@ -2091,7 +2343,7 @@ static void ZSTD_reduceIndex (ZSTD_matchState_t* ms, ZSTD_CCtx_params const* par
ZSTD_reduceTable(ms->hashTable, hSize, reducerValue);
}
- if (params->cParams.strategy != ZSTD_fast) {
+ if (ZSTD_allocateChainTable(params->cParams.strategy, params->useRowMatchFinder, (U32)ms->dedicatedDictSearch)) {
U32 const chainSize = (U32)1 << params->cParams.chainLog;
if (params->cParams.strategy == ZSTD_btlazy2)
ZSTD_reduceTable_btlazy2(ms->chainTable, chainSize, reducerValue);
@@ -2128,9 +2380,9 @@ void ZSTD_seqToCodes(const seqStore_t* seqStorePtr)
ofCodeTable[u] = (BYTE)ZSTD_highbit32(sequences[u].offset);
mlCodeTable[u] = (BYTE)ZSTD_MLcode(mlv);
}
- if (seqStorePtr->longLengthID==1)
+ if (seqStorePtr->longLengthType==ZSTD_llt_literalLength)
llCodeTable[seqStorePtr->longLengthPos] = MaxLL;
- if (seqStorePtr->longLengthID==2)
+ if (seqStorePtr->longLengthType==ZSTD_llt_matchLength)
mlCodeTable[seqStorePtr->longLengthPos] = MaxML;
}
@@ -2144,10 +2396,158 @@ static int ZSTD_useTargetCBlockSize(const ZSTD_CCtx_params* cctxParams)
return (cctxParams->targetCBlockSize != 0);
}
-/* ZSTD_entropyCompressSequences_internal():
- * actually compresses both literals and sequences */
+/* ZSTD_blockSplitterEnabled():
+ * Returns if block splitting param is being used
+ * If used, compression will do best effort to split a block in order to improve compression ratio.
+ * Returns 1 if true, 0 otherwise. */
+static int ZSTD_blockSplitterEnabled(ZSTD_CCtx_params* cctxParams)
+{
+ DEBUGLOG(5, "ZSTD_blockSplitterEnabled(splitBlocks=%d)", cctxParams->splitBlocks);
+ return (cctxParams->splitBlocks != 0);
+}
+
+/* Type returned by ZSTD_buildSequencesStatistics containing finalized symbol encoding types
+ * and size of the sequences statistics
+ */
+typedef struct {
+ U32 LLtype;
+ U32 Offtype;
+ U32 MLtype;
+ size_t size;
+ size_t lastCountSize; /* Accounts for bug in 1.3.4. More detail in ZSTD_entropyCompressSeqStore_internal() */
+} ZSTD_symbolEncodingTypeStats_t;
+
+/* ZSTD_buildSequencesStatistics():
+ * Returns a ZSTD_symbolEncodingTypeStats_t, or a zstd error code in the `size` field.
+ * Modifies `nextEntropy` to have the appropriate values as a side effect.
+ * nbSeq must be greater than 0.
+ *
+ * entropyWkspSize must be of size at least ENTROPY_WORKSPACE_SIZE - (MaxSeq + 1)*sizeof(U32)
+ */
+static ZSTD_symbolEncodingTypeStats_t
+ZSTD_buildSequencesStatistics(seqStore_t* seqStorePtr, size_t nbSeq,
+ const ZSTD_fseCTables_t* prevEntropy, ZSTD_fseCTables_t* nextEntropy,
+ BYTE* dst, const BYTE* const dstEnd,
+ ZSTD_strategy strategy, unsigned* countWorkspace,
+ void* entropyWorkspace, size_t entropyWkspSize) {
+ BYTE* const ostart = dst;
+ const BYTE* const oend = dstEnd;
+ BYTE* op = ostart;
+ FSE_CTable* CTable_LitLength = nextEntropy->litlengthCTable;
+ FSE_CTable* CTable_OffsetBits = nextEntropy->offcodeCTable;
+ FSE_CTable* CTable_MatchLength = nextEntropy->matchlengthCTable;
+ const BYTE* const ofCodeTable = seqStorePtr->ofCode;
+ const BYTE* const llCodeTable = seqStorePtr->llCode;
+ const BYTE* const mlCodeTable = seqStorePtr->mlCode;
+ ZSTD_symbolEncodingTypeStats_t stats;
+
+ stats.lastCountSize = 0;
+ /* convert length/distances into codes */
+ ZSTD_seqToCodes(seqStorePtr);
+ assert(op <= oend);
+ assert(nbSeq != 0); /* ZSTD_selectEncodingType() divides by nbSeq */
+ /* build CTable for Literal Lengths */
+ { unsigned max = MaxLL;
+ size_t const mostFrequent = HIST_countFast_wksp(countWorkspace, &max, llCodeTable, nbSeq, entropyWorkspace, entropyWkspSize); /* can't fail */
+ DEBUGLOG(5, "Building LL table");
+ nextEntropy->litlength_repeatMode = prevEntropy->litlength_repeatMode;
+ stats.LLtype = ZSTD_selectEncodingType(&nextEntropy->litlength_repeatMode,
+ countWorkspace, max, mostFrequent, nbSeq,
+ LLFSELog, prevEntropy->litlengthCTable,
+ LL_defaultNorm, LL_defaultNormLog,
+ ZSTD_defaultAllowed, strategy);
+ assert(set_basic < set_compressed && set_rle < set_compressed);
+ assert(!(stats.LLtype < set_compressed && nextEntropy->litlength_repeatMode != FSE_repeat_none)); /* We don't copy tables */
+ { size_t const countSize = ZSTD_buildCTable(
+ op, (size_t)(oend - op),
+ CTable_LitLength, LLFSELog, (symbolEncodingType_e)stats.LLtype,
+ countWorkspace, max, llCodeTable, nbSeq,
+ LL_defaultNorm, LL_defaultNormLog, MaxLL,
+ prevEntropy->litlengthCTable,
+ sizeof(prevEntropy->litlengthCTable),
+ entropyWorkspace, entropyWkspSize);
+ if (ZSTD_isError(countSize)) {
+ DEBUGLOG(3, "ZSTD_buildCTable for LitLens failed");
+ stats.size = countSize;
+ return stats;
+ }
+ if (stats.LLtype == set_compressed)
+ stats.lastCountSize = countSize;
+ op += countSize;
+ assert(op <= oend);
+ } }
+ /* build CTable for Offsets */
+ { unsigned max = MaxOff;
+ size_t const mostFrequent = HIST_countFast_wksp(
+ countWorkspace, &max, ofCodeTable, nbSeq, entropyWorkspace, entropyWkspSize); /* can't fail */
+ /* We can only use the basic table if max <= DefaultMaxOff, otherwise the offsets are too large */
+ ZSTD_defaultPolicy_e const defaultPolicy = (max <= DefaultMaxOff) ? ZSTD_defaultAllowed : ZSTD_defaultDisallowed;
+ DEBUGLOG(5, "Building OF table");
+ nextEntropy->offcode_repeatMode = prevEntropy->offcode_repeatMode;
+ stats.Offtype = ZSTD_selectEncodingType(&nextEntropy->offcode_repeatMode,
+ countWorkspace, max, mostFrequent, nbSeq,
+ OffFSELog, prevEntropy->offcodeCTable,
+ OF_defaultNorm, OF_defaultNormLog,
+ defaultPolicy, strategy);
+ assert(!(stats.Offtype < set_compressed && nextEntropy->offcode_repeatMode != FSE_repeat_none)); /* We don't copy tables */
+ { size_t const countSize = ZSTD_buildCTable(
+ op, (size_t)(oend - op),
+ CTable_OffsetBits, OffFSELog, (symbolEncodingType_e)stats.Offtype,
+ countWorkspace, max, ofCodeTable, nbSeq,
+ OF_defaultNorm, OF_defaultNormLog, DefaultMaxOff,
+ prevEntropy->offcodeCTable,
+ sizeof(prevEntropy->offcodeCTable),
+ entropyWorkspace, entropyWkspSize);
+ if (ZSTD_isError(countSize)) {
+ DEBUGLOG(3, "ZSTD_buildCTable for Offsets failed");
+ stats.size = countSize;
+ return stats;
+ }
+ if (stats.Offtype == set_compressed)
+ stats.lastCountSize = countSize;
+ op += countSize;
+ assert(op <= oend);
+ } }
+ /* build CTable for MatchLengths */
+ { unsigned max = MaxML;
+ size_t const mostFrequent = HIST_countFast_wksp(
+ countWorkspace, &max, mlCodeTable, nbSeq, entropyWorkspace, entropyWkspSize); /* can't fail */
+ DEBUGLOG(5, "Building ML table (remaining space : %i)", (int)(oend-op));
+ nextEntropy->matchlength_repeatMode = prevEntropy->matchlength_repeatMode;
+ stats.MLtype = ZSTD_selectEncodingType(&nextEntropy->matchlength_repeatMode,
+ countWorkspace, max, mostFrequent, nbSeq,
+ MLFSELog, prevEntropy->matchlengthCTable,
+ ML_defaultNorm, ML_defaultNormLog,
+ ZSTD_defaultAllowed, strategy);
+ assert(!(stats.MLtype < set_compressed && nextEntropy->matchlength_repeatMode != FSE_repeat_none)); /* We don't copy tables */
+ { size_t const countSize = ZSTD_buildCTable(
+ op, (size_t)(oend - op),
+ CTable_MatchLength, MLFSELog, (symbolEncodingType_e)stats.MLtype,
+ countWorkspace, max, mlCodeTable, nbSeq,
+ ML_defaultNorm, ML_defaultNormLog, MaxML,
+ prevEntropy->matchlengthCTable,
+ sizeof(prevEntropy->matchlengthCTable),
+ entropyWorkspace, entropyWkspSize);
+ if (ZSTD_isError(countSize)) {
+ DEBUGLOG(3, "ZSTD_buildCTable for MatchLengths failed");
+ stats.size = countSize;
+ return stats;
+ }
+ if (stats.MLtype == set_compressed)
+ stats.lastCountSize = countSize;
+ op += countSize;
+ assert(op <= oend);
+ } }
+ stats.size = (size_t)(op-ostart);
+ return stats;
+}
+
+/* ZSTD_entropyCompressSeqStore_internal():
+ * compresses both literals and sequences
+ * Returns compressed size of block, or a zstd error.
+ */
MEM_STATIC size_t
-ZSTD_entropyCompressSequences_internal(seqStore_t* seqStorePtr,
+ZSTD_entropyCompressSeqStore_internal(seqStore_t* seqStorePtr,
const ZSTD_entropyCTables_t* prevEntropy,
ZSTD_entropyCTables_t* nextEntropy,
const ZSTD_CCtx_params* cctxParams,
@@ -2161,22 +2561,20 @@ ZSTD_entropyCompressSequences_internal(seqStore_t* seqStorePtr,
FSE_CTable* CTable_LitLength = nextEntropy->fse.litlengthCTable;
FSE_CTable* CTable_OffsetBits = nextEntropy->fse.offcodeCTable;
FSE_CTable* CTable_MatchLength = nextEntropy->fse.matchlengthCTable;
- U32 LLtype, Offtype, MLtype; /* compressed, raw or rle */
const seqDef* const sequences = seqStorePtr->sequencesStart;
+ const size_t nbSeq = seqStorePtr->sequences - seqStorePtr->sequencesStart;
const BYTE* const ofCodeTable = seqStorePtr->ofCode;
const BYTE* const llCodeTable = seqStorePtr->llCode;
const BYTE* const mlCodeTable = seqStorePtr->mlCode;
BYTE* const ostart = (BYTE*)dst;
BYTE* const oend = ostart + dstCapacity;
BYTE* op = ostart;
- size_t const nbSeq = (size_t)(seqStorePtr->sequences - seqStorePtr->sequencesStart);
- BYTE* seqHead;
- BYTE* lastNCount = NULL;
+ size_t lastCountSize;
entropyWorkspace = count + (MaxSeq + 1);
entropyWkspSize -= (MaxSeq + 1) * sizeof(*count);
- DEBUGLOG(4, "ZSTD_entropyCompressSequences_internal (nbSeq=%zu)", nbSeq);
+ DEBUGLOG(4, "ZSTD_entropyCompressSeqStore_internal (nbSeq=%zu)", nbSeq);
ZSTD_STATIC_ASSERT(HUF_WORKSPACE_SIZE >= (1<<MAX(MLFSELog,LLFSELog)));
assert(entropyWkspSize >= HUF_WORKSPACE_SIZE);
@@ -2216,95 +2614,20 @@ ZSTD_entropyCompressSequences_internal(seqStore_t* seqStorePtr,
ZSTD_memcpy(&nextEntropy->fse, &prevEntropy->fse, sizeof(prevEntropy->fse));
return (size_t)(op - ostart);
}
-
- /* seqHead : flags for FSE encoding type */
- seqHead = op++;
- assert(op <= oend);
-
- /* convert length/distances into codes */
- ZSTD_seqToCodes(seqStorePtr);
- /* build CTable for Literal Lengths */
- { unsigned max = MaxLL;
- size_t const mostFrequent = HIST_countFast_wksp(count, &max, llCodeTable, nbSeq, entropyWorkspace, entropyWkspSize); /* can't fail */
- DEBUGLOG(5, "Building LL table");
- nextEntropy->fse.litlength_repeatMode = prevEntropy->fse.litlength_repeatMode;
- LLtype = ZSTD_selectEncodingType(&nextEntropy->fse.litlength_repeatMode,
- count, max, mostFrequent, nbSeq,
- LLFSELog, prevEntropy->fse.litlengthCTable,
- LL_defaultNorm, LL_defaultNormLog,
- ZSTD_defaultAllowed, strategy);
- assert(set_basic < set_compressed && set_rle < set_compressed);
- assert(!(LLtype < set_compressed && nextEntropy->fse.litlength_repeatMode != FSE_repeat_none)); /* We don't copy tables */
- { size_t const countSize = ZSTD_buildCTable(
- op, (size_t)(oend - op),
- CTable_LitLength, LLFSELog, (symbolEncodingType_e)LLtype,
- count, max, llCodeTable, nbSeq,
- LL_defaultNorm, LL_defaultNormLog, MaxLL,
- prevEntropy->fse.litlengthCTable,
- sizeof(prevEntropy->fse.litlengthCTable),
- entropyWorkspace, entropyWkspSize);
- FORWARD_IF_ERROR(countSize, "ZSTD_buildCTable for LitLens failed");
- if (LLtype == set_compressed)
- lastNCount = op;
- op += countSize;
- assert(op <= oend);
- } }
- /* build CTable for Offsets */
- { unsigned max = MaxOff;
- size_t const mostFrequent = HIST_countFast_wksp(
- count, &max, ofCodeTable, nbSeq, entropyWorkspace, entropyWkspSize); /* can't fail */
- /* We can only use the basic table if max <= DefaultMaxOff, otherwise the offsets are too large */
- ZSTD_defaultPolicy_e const defaultPolicy = (max <= DefaultMaxOff) ? ZSTD_defaultAllowed : ZSTD_defaultDisallowed;
- DEBUGLOG(5, "Building OF table");
- nextEntropy->fse.offcode_repeatMode = prevEntropy->fse.offcode_repeatMode;
- Offtype = ZSTD_selectEncodingType(&nextEntropy->fse.offcode_repeatMode,
- count, max, mostFrequent, nbSeq,
- OffFSELog, prevEntropy->fse.offcodeCTable,
- OF_defaultNorm, OF_defaultNormLog,
- defaultPolicy, strategy);
- assert(!(Offtype < set_compressed && nextEntropy->fse.offcode_repeatMode != FSE_repeat_none)); /* We don't copy tables */
- { size_t const countSize = ZSTD_buildCTable(
- op, (size_t)(oend - op),
- CTable_OffsetBits, OffFSELog, (symbolEncodingType_e)Offtype,
- count, max, ofCodeTable, nbSeq,
- OF_defaultNorm, OF_defaultNormLog, DefaultMaxOff,
- prevEntropy->fse.offcodeCTable,
- sizeof(prevEntropy->fse.offcodeCTable),
- entropyWorkspace, entropyWkspSize);
- FORWARD_IF_ERROR(countSize, "ZSTD_buildCTable for Offsets failed");
- if (Offtype == set_compressed)
- lastNCount = op;
- op += countSize;
- assert(op <= oend);
- } }
- /* build CTable for MatchLengths */
- { unsigned max = MaxML;
- size_t const mostFrequent = HIST_countFast_wksp(
- count, &max, mlCodeTable, nbSeq, entropyWorkspace, entropyWkspSize); /* can't fail */
- DEBUGLOG(5, "Building ML table (remaining space : %i)", (int)(oend-op));
- nextEntropy->fse.matchlength_repeatMode = prevEntropy->fse.matchlength_repeatMode;
- MLtype = ZSTD_selectEncodingType(&nextEntropy->fse.matchlength_repeatMode,
- count, max, mostFrequent, nbSeq,
- MLFSELog, prevEntropy->fse.matchlengthCTable,
- ML_defaultNorm, ML_defaultNormLog,
- ZSTD_defaultAllowed, strategy);
- assert(!(MLtype < set_compressed && nextEntropy->fse.matchlength_repeatMode != FSE_repeat_none)); /* We don't copy tables */
- { size_t const countSize = ZSTD_buildCTable(
- op, (size_t)(oend - op),
- CTable_MatchLength, MLFSELog, (symbolEncodingType_e)MLtype,
- count, max, mlCodeTable, nbSeq,
- ML_defaultNorm, ML_defaultNormLog, MaxML,
- prevEntropy->fse.matchlengthCTable,
- sizeof(prevEntropy->fse.matchlengthCTable),
- entropyWorkspace, entropyWkspSize);
- FORWARD_IF_ERROR(countSize, "ZSTD_buildCTable for MatchLengths failed");
- if (MLtype == set_compressed)
- lastNCount = op;
- op += countSize;
- assert(op <= oend);
- } }
-
- *seqHead = (BYTE)((LLtype<<6) + (Offtype<<4) + (MLtype<<2));
+ {
+ ZSTD_symbolEncodingTypeStats_t stats;
+ BYTE* seqHead = op++;
+ /* build stats for sequences */
+ stats = ZSTD_buildSequencesStatistics(seqStorePtr, nbSeq,
+ &prevEntropy->fse, &nextEntropy->fse,
+ op, oend,
+ strategy, count,
+ entropyWorkspace, entropyWkspSize);
+ FORWARD_IF_ERROR(stats.size, "ZSTD_buildSequencesStatistics failed!");
+ *seqHead = (BYTE)((stats.LLtype<<6) + (stats.Offtype<<4) + (stats.MLtype<<2));
+ lastCountSize = stats.lastCountSize;
+ op += stats.size;
+ }
{ size_t const bitstreamSize = ZSTD_encodeSequences(
op, (size_t)(oend - op),
@@ -2324,9 +2647,9 @@ ZSTD_entropyCompressSequences_internal(seqStore_t* seqStorePtr,
* In this exceedingly rare case, we will simply emit an uncompressed
* block, since it isn't worth optimizing.
*/
- if (lastNCount && (op - lastNCount) < 4) {
- /* NCountSize >= 2 && bitstreamSize > 0 ==> lastCountSize == 3 */
- assert(op - lastNCount == 3);
+ if (lastCountSize && (lastCountSize + bitstreamSize) < 4) {
+ /* lastCountSize >= 2 && bitstreamSize > 0 ==> lastCountSize == 3 */
+ assert(lastCountSize + bitstreamSize == 3);
DEBUGLOG(5, "Avoiding bug in zstd decoder in versions <= 1.3.4 by "
"emitting an uncompressed block.");
return 0;
@@ -2338,7 +2661,7 @@ ZSTD_entropyCompressSequences_internal(seqStore_t* seqStorePtr,
}
MEM_STATIC size_t
-ZSTD_entropyCompressSequences(seqStore_t* seqStorePtr,
+ZSTD_entropyCompressSeqStore(seqStore_t* seqStorePtr,
const ZSTD_entropyCTables_t* prevEntropy,
ZSTD_entropyCTables_t* nextEntropy,
const ZSTD_CCtx_params* cctxParams,
@@ -2347,7 +2670,7 @@ ZSTD_entropyCompressSequences(seqStore_t* seqStorePtr,
void* entropyWorkspace, size_t entropyWkspSize,
int bmi2)
{
- size_t const cSize = ZSTD_entropyCompressSequences_internal(
+ size_t const cSize = ZSTD_entropyCompressSeqStore_internal(
seqStorePtr, prevEntropy, nextEntropy, cctxParams,
dst, dstCapacity,
entropyWorkspace, entropyWkspSize, bmi2);
@@ -2357,20 +2680,20 @@ ZSTD_entropyCompressSequences(seqStore_t* seqStorePtr,
*/
if ((cSize == ERROR(dstSize_tooSmall)) & (srcSize <= dstCapacity))
return 0; /* block not compressed */
- FORWARD_IF_ERROR(cSize, "ZSTD_entropyCompressSequences_internal failed");
+ FORWARD_IF_ERROR(cSize, "ZSTD_entropyCompressSeqStore_internal failed");
/* Check compressibility */
{ size_t const maxCSize = srcSize - ZSTD_minGain(srcSize, cctxParams->cParams.strategy);
if (cSize >= maxCSize) return 0; /* block not compressed */
}
- DEBUGLOG(4, "ZSTD_entropyCompressSequences() cSize: %zu\n", cSize);
+ DEBUGLOG(4, "ZSTD_entropyCompressSeqStore() cSize: %zu", cSize);
return cSize;
}
/* ZSTD_selectBlockCompressor() :
* Not static, but internal use only (used by long distance matcher)
* assumption : strat is a valid strategy */
-ZSTD_blockCompressor ZSTD_selectBlockCompressor(ZSTD_strategy strat, ZSTD_dictMode_e dictMode)
+ZSTD_blockCompressor ZSTD_selectBlockCompressor(ZSTD_strategy strat, ZSTD_useRowMatchFinderMode_e useRowMatchFinder, ZSTD_dictMode_e dictMode)
{
static const ZSTD_blockCompressor blockCompressor[4][ZSTD_STRATEGY_MAX+1] = {
{ ZSTD_compressBlock_fast /* default for 0 */,
@@ -2418,7 +2741,28 @@ ZSTD_blockCompressor ZSTD_selectBlockCompressor(ZSTD_strategy strat, ZSTD_dictMo
ZSTD_STATIC_ASSERT((unsigned)ZSTD_fast == 1);
assert(ZSTD_cParam_withinBounds(ZSTD_c_strategy, strat));
- selectedCompressor = blockCompressor[(int)dictMode][(int)strat];
+ DEBUGLOG(4, "Selected block compressor: dictMode=%d strat=%d rowMatchfinder=%d", (int)dictMode, (int)strat, (int)useRowMatchFinder);
+ if (ZSTD_rowMatchFinderUsed(strat, useRowMatchFinder)) {
+ static const ZSTD_blockCompressor rowBasedBlockCompressors[4][3] = {
+ { ZSTD_compressBlock_greedy_row,
+ ZSTD_compressBlock_lazy_row,
+ ZSTD_compressBlock_lazy2_row },
+ { ZSTD_compressBlock_greedy_extDict_row,
+ ZSTD_compressBlock_lazy_extDict_row,
+ ZSTD_compressBlock_lazy2_extDict_row },
+ { ZSTD_compressBlock_greedy_dictMatchState_row,
+ ZSTD_compressBlock_lazy_dictMatchState_row,
+ ZSTD_compressBlock_lazy2_dictMatchState_row },
+ { ZSTD_compressBlock_greedy_dedicatedDictSearch_row,
+ ZSTD_compressBlock_lazy_dedicatedDictSearch_row,
+ ZSTD_compressBlock_lazy2_dedicatedDictSearch_row }
+ };
+ DEBUGLOG(4, "Selecting a row-based matchfinder");
+ assert(useRowMatchFinder != ZSTD_urm_auto);
+ selectedCompressor = rowBasedBlockCompressors[(int)dictMode][(int)strat - (int)ZSTD_greedy];
+ } else {
+ selectedCompressor = blockCompressor[(int)dictMode][(int)strat];
+ }
assert(selectedCompressor != NULL);
return selectedCompressor;
}
@@ -2434,7 +2778,7 @@ void ZSTD_resetSeqStore(seqStore_t* ssPtr)
{
ssPtr->lit = ssPtr->litStart;
ssPtr->sequences = ssPtr->sequencesStart;
- ssPtr->longLengthID = 0;
+ ssPtr->longLengthType = ZSTD_llt_none;
}
typedef enum { ZSTDbss_compress, ZSTDbss_noCompress } ZSTD_buildSeqStore_e;
@@ -2487,6 +2831,7 @@ static size_t ZSTD_buildSeqStore(ZSTD_CCtx* zc, const void* src, size_t srcSize)
ZSTD_ldm_blockCompress(&zc->externSeqStore,
ms, &zc->seqStore,
zc->blockState.nextCBlock->rep,
+ zc->appliedParams.useRowMatchFinder,
src, srcSize);
assert(zc->externSeqStore.pos <= zc->externSeqStore.size);
} else if (zc->appliedParams.ldmParams.enableLdm) {
@@ -2503,10 +2848,13 @@ static size_t ZSTD_buildSeqStore(ZSTD_CCtx* zc, const void* src, size_t srcSize)
ZSTD_ldm_blockCompress(&ldmSeqStore,
ms, &zc->seqStore,
zc->blockState.nextCBlock->rep,
+ zc->appliedParams.useRowMatchFinder,
src, srcSize);
assert(ldmSeqStore.pos == ldmSeqStore.size);
} else { /* not long range mode */
- ZSTD_blockCompressor const blockCompressor = ZSTD_selectBlockCompressor(zc->appliedParams.cParams.strategy, dictMode);
+ ZSTD_blockCompressor const blockCompressor = ZSTD_selectBlockCompressor(zc->appliedParams.cParams.strategy,
+ zc->appliedParams.useRowMatchFinder,
+ dictMode);
ms->ldmSeqStore = NULL;
lastLLSize = blockCompressor(ms, &zc->seqStore, zc->blockState.nextCBlock->rep, src, srcSize);
}
@@ -2540,9 +2888,9 @@ static void ZSTD_copyBlockSequences(ZSTD_CCtx* zc)
outSeqs[i].rep = 0;
if (i == seqStore->longLengthPos) {
- if (seqStore->longLengthID == 1) {
+ if (seqStore->longLengthType == ZSTD_llt_literalLength) {
outSeqs[i].litLength += 0x10000;
- } else if (seqStore->longLengthID == 2) {
+ } else if (seqStore->longLengthType == ZSTD_llt_matchLength) {
outSeqs[i].matchLength += 0x10000;
}
}
@@ -2653,11 +3001,713 @@ static int ZSTD_maybeRLE(seqStore_t const* seqStore)
return nbSeqs < 4 && nbLits < 10;
}
-static void ZSTD_confirmRepcodesAndEntropyTables(ZSTD_CCtx* zc)
+static void ZSTD_blockState_confirmRepcodesAndEntropyTables(ZSTD_blockState_t* const bs)
{
- ZSTD_compressedBlockState_t* const tmp = zc->blockState.prevCBlock;
- zc->blockState.prevCBlock = zc->blockState.nextCBlock;
- zc->blockState.nextCBlock = tmp;
+ ZSTD_compressedBlockState_t* const tmp = bs->prevCBlock;
+ bs->prevCBlock = bs->nextCBlock;
+ bs->nextCBlock = tmp;
+}
+
+/* Writes the block header */
+static void writeBlockHeader(void* op, size_t cSize, size_t blockSize, U32 lastBlock) {
+ U32 const cBlockHeader = cSize == 1 ?
+ lastBlock + (((U32)bt_rle)<<1) + (U32)(blockSize << 3) :
+ lastBlock + (((U32)bt_compressed)<<1) + (U32)(cSize << 3);
+ MEM_writeLE24(op, cBlockHeader);
+ DEBUGLOG(3, "writeBlockHeader: cSize: %zu blockSize: %zu lastBlock: %u", cSize, blockSize, lastBlock);
+}
+
+/** ZSTD_buildBlockEntropyStats_literals() :
+ * Builds entropy for the literals.
+ * Stores literals block type (raw, rle, compressed, repeat) and
+ * huffman description table to hufMetadata.
+ * Requires ENTROPY_WORKSPACE_SIZE workspace
+ * @return : size of huffman description table or error code */
+static size_t ZSTD_buildBlockEntropyStats_literals(void* const src, size_t srcSize,
+ const ZSTD_hufCTables_t* prevHuf,
+ ZSTD_hufCTables_t* nextHuf,
+ ZSTD_hufCTablesMetadata_t* hufMetadata,
+ const int disableLiteralsCompression,
+ void* workspace, size_t wkspSize)
+{
+ BYTE* const wkspStart = (BYTE*)workspace;
+ BYTE* const wkspEnd = wkspStart + wkspSize;
+ BYTE* const countWkspStart = wkspStart;
+ unsigned* const countWksp = (unsigned*)workspace;
+ const size_t countWkspSize = (HUF_SYMBOLVALUE_MAX + 1) * sizeof(unsigned);
+ BYTE* const nodeWksp = countWkspStart + countWkspSize;
+ const size_t nodeWkspSize = wkspEnd-nodeWksp;
+ unsigned maxSymbolValue = HUF_SYMBOLVALUE_MAX;
+ unsigned huffLog = HUF_TABLELOG_DEFAULT;
+ HUF_repeat repeat = prevHuf->repeatMode;
+ DEBUGLOG(5, "ZSTD_buildBlockEntropyStats_literals (srcSize=%zu)", srcSize);
+
+ /* Prepare nextEntropy assuming reusing the existing table */
+ ZSTD_memcpy(nextHuf, prevHuf, sizeof(*prevHuf));
+
+ if (disableLiteralsCompression) {
+ DEBUGLOG(5, "set_basic - disabled");
+ hufMetadata->hType = set_basic;
+ return 0;
+ }
+
+ /* small ? don't even attempt compression (speed opt) */
+#ifndef COMPRESS_LITERALS_SIZE_MIN
+#define COMPRESS_LITERALS_SIZE_MIN 63
+#endif
+ { size_t const minLitSize = (prevHuf->repeatMode == HUF_repeat_valid) ? 6 : COMPRESS_LITERALS_SIZE_MIN;
+ if (srcSize <= minLitSize) {
+ DEBUGLOG(5, "set_basic - too small");
+ hufMetadata->hType = set_basic;
+ return 0;
+ }
+ }
+
+ /* Scan input and build symbol stats */
+ { size_t const largest = HIST_count_wksp (countWksp, &maxSymbolValue, (const BYTE*)src, srcSize, workspace, wkspSize);
+ FORWARD_IF_ERROR(largest, "HIST_count_wksp failed");
+ if (largest == srcSize) {
+ DEBUGLOG(5, "set_rle");
+ hufMetadata->hType = set_rle;
+ return 0;
+ }
+ if (largest <= (srcSize >> 7)+4) {
+ DEBUGLOG(5, "set_basic - no gain");
+ hufMetadata->hType = set_basic;
+ return 0;
+ }
+ }
+
+ /* Validate the previous Huffman table */
+ if (repeat == HUF_repeat_check && !HUF_validateCTable((HUF_CElt const*)prevHuf->CTable, countWksp, maxSymbolValue)) {
+ repeat = HUF_repeat_none;
+ }
+
+ /* Build Huffman Tree */
+ ZSTD_memset(nextHuf->CTable, 0, sizeof(nextHuf->CTable));
+ huffLog = HUF_optimalTableLog(huffLog, srcSize, maxSymbolValue);
+ { size_t const maxBits = HUF_buildCTable_wksp((HUF_CElt*)nextHuf->CTable, countWksp,
+ maxSymbolValue, huffLog,
+ nodeWksp, nodeWkspSize);
+ FORWARD_IF_ERROR(maxBits, "HUF_buildCTable_wksp");
+ huffLog = (U32)maxBits;
+ { /* Build and write the CTable */
+ size_t const newCSize = HUF_estimateCompressedSize(
+ (HUF_CElt*)nextHuf->CTable, countWksp, maxSymbolValue);
+ size_t const hSize = HUF_writeCTable_wksp(
+ hufMetadata->hufDesBuffer, sizeof(hufMetadata->hufDesBuffer),
+ (HUF_CElt*)nextHuf->CTable, maxSymbolValue, huffLog,
+ nodeWksp, nodeWkspSize);
+ /* Check against repeating the previous CTable */
+ if (repeat != HUF_repeat_none) {
+ size_t const oldCSize = HUF_estimateCompressedSize(
+ (HUF_CElt const*)prevHuf->CTable, countWksp, maxSymbolValue);
+ if (oldCSize < srcSize && (oldCSize <= hSize + newCSize || hSize + 12 >= srcSize)) {
+ DEBUGLOG(5, "set_repeat - smaller");
+ ZSTD_memcpy(nextHuf, prevHuf, sizeof(*prevHuf));
+ hufMetadata->hType = set_repeat;
+ return 0;
+ }
+ }
+ if (newCSize + hSize >= srcSize) {
+ DEBUGLOG(5, "set_basic - no gains");
+ ZSTD_memcpy(nextHuf, prevHuf, sizeof(*prevHuf));
+ hufMetadata->hType = set_basic;
+ return 0;
+ }
+ DEBUGLOG(5, "set_compressed (hSize=%u)", (U32)hSize);
+ hufMetadata->hType = set_compressed;
+ nextHuf->repeatMode = HUF_repeat_check;
+ return hSize;
+ }
+ }
+}
+
+
+/* ZSTD_buildDummySequencesStatistics():
+ * Returns a ZSTD_symbolEncodingTypeStats_t with all encoding types as set_basic,
+ * and updates nextEntropy to the appropriate repeatMode.
+ */
+static ZSTD_symbolEncodingTypeStats_t
+ZSTD_buildDummySequencesStatistics(ZSTD_fseCTables_t* nextEntropy) {
+ ZSTD_symbolEncodingTypeStats_t stats = {set_basic, set_basic, set_basic, 0, 0};
+ nextEntropy->litlength_repeatMode = FSE_repeat_none;
+ nextEntropy->offcode_repeatMode = FSE_repeat_none;
+ nextEntropy->matchlength_repeatMode = FSE_repeat_none;
+ return stats;
+}
+
+/** ZSTD_buildBlockEntropyStats_sequences() :
+ * Builds entropy for the sequences.
+ * Stores symbol compression modes and fse table to fseMetadata.
+ * Requires ENTROPY_WORKSPACE_SIZE wksp.
+ * @return : size of fse tables or error code */
+static size_t ZSTD_buildBlockEntropyStats_sequences(seqStore_t* seqStorePtr,
+ const ZSTD_fseCTables_t* prevEntropy,
+ ZSTD_fseCTables_t* nextEntropy,
+ const ZSTD_CCtx_params* cctxParams,
+ ZSTD_fseCTablesMetadata_t* fseMetadata,
+ void* workspace, size_t wkspSize)
+{
+ ZSTD_strategy const strategy = cctxParams->cParams.strategy;
+ size_t const nbSeq = seqStorePtr->sequences - seqStorePtr->sequencesStart;
+ BYTE* const ostart = fseMetadata->fseTablesBuffer;
+ BYTE* const oend = ostart + sizeof(fseMetadata->fseTablesBuffer);
+ BYTE* op = ostart;
+ unsigned* countWorkspace = (unsigned*)workspace;
+ unsigned* entropyWorkspace = countWorkspace + (MaxSeq + 1);
+ size_t entropyWorkspaceSize = wkspSize - (MaxSeq + 1) * sizeof(*countWorkspace);
+ ZSTD_symbolEncodingTypeStats_t stats;
+
+ DEBUGLOG(5, "ZSTD_buildBlockEntropyStats_sequences (nbSeq=%zu)", nbSeq);
+ stats = nbSeq != 0 ? ZSTD_buildSequencesStatistics(seqStorePtr, nbSeq,
+ prevEntropy, nextEntropy, op, oend,
+ strategy, countWorkspace,
+ entropyWorkspace, entropyWorkspaceSize)
+ : ZSTD_buildDummySequencesStatistics(nextEntropy);
+ FORWARD_IF_ERROR(stats.size, "ZSTD_buildSequencesStatistics failed!");
+ fseMetadata->llType = (symbolEncodingType_e) stats.LLtype;
+ fseMetadata->ofType = (symbolEncodingType_e) stats.Offtype;
+ fseMetadata->mlType = (symbolEncodingType_e) stats.MLtype;
+ fseMetadata->lastCountSize = stats.lastCountSize;
+ return stats.size;
+}
+
+
+/** ZSTD_buildBlockEntropyStats() :
+ * Builds entropy for the block.
+ * Requires workspace size ENTROPY_WORKSPACE_SIZE
+ *
+ * @return : 0 on success or error code
+ */
+size_t ZSTD_buildBlockEntropyStats(seqStore_t* seqStorePtr,
+ const ZSTD_entropyCTables_t* prevEntropy,
+ ZSTD_entropyCTables_t* nextEntropy,
+ const ZSTD_CCtx_params* cctxParams,
+ ZSTD_entropyCTablesMetadata_t* entropyMetadata,
+ void* workspace, size_t wkspSize)
+{
+ size_t const litSize = seqStorePtr->lit - seqStorePtr->litStart;
+ entropyMetadata->hufMetadata.hufDesSize =
+ ZSTD_buildBlockEntropyStats_literals(seqStorePtr->litStart, litSize,
+ &prevEntropy->huf, &nextEntropy->huf,
+ &entropyMetadata->hufMetadata,
+ ZSTD_disableLiteralsCompression(cctxParams),
+ workspace, wkspSize);
+ FORWARD_IF_ERROR(entropyMetadata->hufMetadata.hufDesSize, "ZSTD_buildBlockEntropyStats_literals failed");
+ entropyMetadata->fseMetadata.fseTablesSize =
+ ZSTD_buildBlockEntropyStats_sequences(seqStorePtr,
+ &prevEntropy->fse, &nextEntropy->fse,
+ cctxParams,
+ &entropyMetadata->fseMetadata,
+ workspace, wkspSize);
+ FORWARD_IF_ERROR(entropyMetadata->fseMetadata.fseTablesSize, "ZSTD_buildBlockEntropyStats_sequences failed");
+ return 0;
+}
+
+/* Returns the size estimate for the literals section (header + content) of a block */
+static size_t ZSTD_estimateBlockSize_literal(const BYTE* literals, size_t litSize,
+ const ZSTD_hufCTables_t* huf,
+ const ZSTD_hufCTablesMetadata_t* hufMetadata,
+ void* workspace, size_t wkspSize,
+ int writeEntropy)
+{
+ unsigned* const countWksp = (unsigned*)workspace;
+ unsigned maxSymbolValue = HUF_SYMBOLVALUE_MAX;
+ size_t literalSectionHeaderSize = 3 + (litSize >= 1 KB) + (litSize >= 16 KB);
+ U32 singleStream = litSize < 256;
+
+ if (hufMetadata->hType == set_basic) return litSize;
+ else if (hufMetadata->hType == set_rle) return 1;
+ else if (hufMetadata->hType == set_compressed || hufMetadata->hType == set_repeat) {
+ size_t const largest = HIST_count_wksp (countWksp, &maxSymbolValue, (const BYTE*)literals, litSize, workspace, wkspSize);
+ if (ZSTD_isError(largest)) return litSize;
+ { size_t cLitSizeEstimate = HUF_estimateCompressedSize((const HUF_CElt*)huf->CTable, countWksp, maxSymbolValue);
+ if (writeEntropy) cLitSizeEstimate += hufMetadata->hufDesSize;
+ if (!singleStream) cLitSizeEstimate += 6; /* multi-stream huffman uses 6-byte jump table */
+ return cLitSizeEstimate + literalSectionHeaderSize;
+ } }
+ assert(0); /* impossible */
+ return 0;
+}
+
+/* Returns the size estimate for the FSE-compressed symbols (of, ml, ll) of a block */
+static size_t ZSTD_estimateBlockSize_symbolType(symbolEncodingType_e type,
+ const BYTE* codeTable, size_t nbSeq, unsigned maxCode,
+ const FSE_CTable* fseCTable,
+ const U32* additionalBits,
+ short const* defaultNorm, U32 defaultNormLog, U32 defaultMax,
+ void* workspace, size_t wkspSize)
+{
+ unsigned* const countWksp = (unsigned*)workspace;
+ const BYTE* ctp = codeTable;
+ const BYTE* const ctStart = ctp;
+ const BYTE* const ctEnd = ctStart + nbSeq;
+ size_t cSymbolTypeSizeEstimateInBits = 0;
+ unsigned max = maxCode;
+
+ HIST_countFast_wksp(countWksp, &max, codeTable, nbSeq, workspace, wkspSize); /* can't fail */
+ if (type == set_basic) {
+ /* We selected this encoding type, so it must be valid. */
+ assert(max <= defaultMax);
+ (void)defaultMax;
+ cSymbolTypeSizeEstimateInBits = ZSTD_crossEntropyCost(defaultNorm, defaultNormLog, countWksp, max);
+ } else if (type == set_rle) {
+ cSymbolTypeSizeEstimateInBits = 0;
+ } else if (type == set_compressed || type == set_repeat) {
+ cSymbolTypeSizeEstimateInBits = ZSTD_fseBitCost(fseCTable, countWksp, max);
+ }
+ if (ZSTD_isError(cSymbolTypeSizeEstimateInBits)) {
+ return nbSeq * 10;
+ }
+ while (ctp < ctEnd) {
+ if (additionalBits) cSymbolTypeSizeEstimateInBits += additionalBits[*ctp];
+ else cSymbolTypeSizeEstimateInBits += *ctp; /* for offset, offset code is also the number of additional bits */
+ ctp++;
+ }
+ return cSymbolTypeSizeEstimateInBits >> 3;
+}
+
+/* Returns the size estimate for the sequences section (header + content) of a block */
+static size_t ZSTD_estimateBlockSize_sequences(const BYTE* ofCodeTable,
+ const BYTE* llCodeTable,
+ const BYTE* mlCodeTable,
+ size_t nbSeq,
+ const ZSTD_fseCTables_t* fseTables,
+ const ZSTD_fseCTablesMetadata_t* fseMetadata,
+ void* workspace, size_t wkspSize,
+ int writeEntropy)
+{
+ size_t sequencesSectionHeaderSize = 1 /* seqHead */ + 1 /* min seqSize size */ + (nbSeq >= 128) + (nbSeq >= LONGNBSEQ);
+ size_t cSeqSizeEstimate = 0;
+ cSeqSizeEstimate += ZSTD_estimateBlockSize_symbolType(fseMetadata->ofType, ofCodeTable, nbSeq, MaxOff,
+ fseTables->offcodeCTable, NULL,
+ OF_defaultNorm, OF_defaultNormLog, DefaultMaxOff,
+ workspace, wkspSize);
+ cSeqSizeEstimate += ZSTD_estimateBlockSize_symbolType(fseMetadata->llType, llCodeTable, nbSeq, MaxLL,
+ fseTables->litlengthCTable, LL_bits,
+ LL_defaultNorm, LL_defaultNormLog, MaxLL,
+ workspace, wkspSize);
+ cSeqSizeEstimate += ZSTD_estimateBlockSize_symbolType(fseMetadata->mlType, mlCodeTable, nbSeq, MaxML,
+ fseTables->matchlengthCTable, ML_bits,
+ ML_defaultNorm, ML_defaultNormLog, MaxML,
+ workspace, wkspSize);
+ if (writeEntropy) cSeqSizeEstimate += fseMetadata->fseTablesSize;
+ return cSeqSizeEstimate + sequencesSectionHeaderSize;
+}
+
+/* Returns the size estimate for a given stream of literals, of, ll, ml */
+static size_t ZSTD_estimateBlockSize(const BYTE* literals, size_t litSize,
+ const BYTE* ofCodeTable,
+ const BYTE* llCodeTable,
+ const BYTE* mlCodeTable,
+ size_t nbSeq,
+ const ZSTD_entropyCTables_t* entropy,
+ const ZSTD_entropyCTablesMetadata_t* entropyMetadata,
+ void* workspace, size_t wkspSize,
+ int writeLitEntropy, int writeSeqEntropy) {
+ size_t const literalsSize = ZSTD_estimateBlockSize_literal(literals, litSize,
+ &entropy->huf, &entropyMetadata->hufMetadata,
+ workspace, wkspSize, writeLitEntropy);
+ size_t const seqSize = ZSTD_estimateBlockSize_sequences(ofCodeTable, llCodeTable, mlCodeTable,
+ nbSeq, &entropy->fse, &entropyMetadata->fseMetadata,
+ workspace, wkspSize, writeSeqEntropy);
+ return seqSize + literalsSize + ZSTD_blockHeaderSize;
+}
+
+/* Builds entropy statistics and uses them for blocksize estimation.
+ *
+ * Returns the estimated compressed size of the seqStore, or a zstd error.
+ */
+static size_t ZSTD_buildEntropyStatisticsAndEstimateSubBlockSize(seqStore_t* seqStore, const ZSTD_CCtx* zc) {
+ ZSTD_entropyCTablesMetadata_t entropyMetadata;
+ FORWARD_IF_ERROR(ZSTD_buildBlockEntropyStats(seqStore,
+ &zc->blockState.prevCBlock->entropy,
+ &zc->blockState.nextCBlock->entropy,
+ &zc->appliedParams,
+ &entropyMetadata,
+ zc->entropyWorkspace, ENTROPY_WORKSPACE_SIZE /* statically allocated in resetCCtx */), "");
+ return ZSTD_estimateBlockSize(seqStore->litStart, (size_t)(seqStore->lit - seqStore->litStart),
+ seqStore->ofCode, seqStore->llCode, seqStore->mlCode,
+ (size_t)(seqStore->sequences - seqStore->sequencesStart),
+ &zc->blockState.nextCBlock->entropy, &entropyMetadata, zc->entropyWorkspace, ENTROPY_WORKSPACE_SIZE,
+ (int)(entropyMetadata.hufMetadata.hType == set_compressed), 1);
+}
+
+/* Returns literals bytes represented in a seqStore */
+static size_t ZSTD_countSeqStoreLiteralsBytes(const seqStore_t* const seqStore) {
+ size_t literalsBytes = 0;
+ size_t const nbSeqs = seqStore->sequences - seqStore->sequencesStart;
+ size_t i;
+ for (i = 0; i < nbSeqs; ++i) {
+ seqDef seq = seqStore->sequencesStart[i];
+ literalsBytes += seq.litLength;
+ if (i == seqStore->longLengthPos && seqStore->longLengthType == ZSTD_llt_literalLength) {
+ literalsBytes += 0x10000;
+ }
+ }
+ return literalsBytes;
+}
+
+/* Returns match bytes represented in a seqStore */
+static size_t ZSTD_countSeqStoreMatchBytes(const seqStore_t* const seqStore) {
+ size_t matchBytes = 0;
+ size_t const nbSeqs = seqStore->sequences - seqStore->sequencesStart;
+ size_t i;
+ for (i = 0; i < nbSeqs; ++i) {
+ seqDef seq = seqStore->sequencesStart[i];
+ matchBytes += seq.matchLength + MINMATCH;
+ if (i == seqStore->longLengthPos && seqStore->longLengthType == ZSTD_llt_matchLength) {
+ matchBytes += 0x10000;
+ }
+ }
+ return matchBytes;
+}
+
+/* Derives the seqStore that is a chunk of the originalSeqStore from [startIdx, endIdx).
+ * Stores the result in resultSeqStore.
+ */
+static void ZSTD_deriveSeqStoreChunk(seqStore_t* resultSeqStore,
+ const seqStore_t* originalSeqStore,
+ size_t startIdx, size_t endIdx) {
+ BYTE* const litEnd = originalSeqStore->lit;
+ size_t literalsBytes;
+ size_t literalsBytesPreceding = 0;
+
+ *resultSeqStore = *originalSeqStore;
+ if (startIdx > 0) {
+ resultSeqStore->sequences = originalSeqStore->sequencesStart + startIdx;
+ literalsBytesPreceding = ZSTD_countSeqStoreLiteralsBytes(resultSeqStore);
+ }
+
+ /* Move longLengthPos into the correct position if necessary */
+ if (originalSeqStore->longLengthType != ZSTD_llt_none) {
+ if (originalSeqStore->longLengthPos < startIdx || originalSeqStore->longLengthPos > endIdx) {
+ resultSeqStore->longLengthType = ZSTD_llt_none;
+ } else {
+ resultSeqStore->longLengthPos -= (U32)startIdx;
+ }
+ }
+ resultSeqStore->sequencesStart = originalSeqStore->sequencesStart + startIdx;
+ resultSeqStore->sequences = originalSeqStore->sequencesStart + endIdx;
+ literalsBytes = ZSTD_countSeqStoreLiteralsBytes(resultSeqStore);
+ resultSeqStore->litStart += literalsBytesPreceding;
+ if (endIdx == (size_t)(originalSeqStore->sequences - originalSeqStore->sequencesStart)) {
+ /* This accounts for possible last literals if the derived chunk reaches the end of the block */
+ resultSeqStore->lit = litEnd;
+ } else {
+ resultSeqStore->lit = resultSeqStore->litStart+literalsBytes;
+ }
+ resultSeqStore->llCode += startIdx;
+ resultSeqStore->mlCode += startIdx;
+ resultSeqStore->ofCode += startIdx;
+}
+
+/**
+ * Returns the raw offset represented by the combination of offCode, ll0, and repcode history.
+ * offCode must be an offCode representing a repcode, therefore in the range of [0, 2].
+ */
+static U32 ZSTD_resolveRepcodeToRawOffset(const U32 rep[ZSTD_REP_NUM], const U32 offCode, const U32 ll0) {
+ U32 const adjustedOffCode = offCode + ll0;
+ assert(offCode < ZSTD_REP_NUM);
+ if (adjustedOffCode == ZSTD_REP_NUM) {
+ /* litlength == 0 and offCode == 2 implies selection of first repcode - 1 */
+ assert(rep[0] > 0);
+ return rep[0] - 1;
+ }
+ return rep[adjustedOffCode];
+}
+
+/**
+ * ZSTD_seqStore_resolveOffCodes() reconciles any possible divergences in offset history that may arise
+ * due to emission of RLE/raw blocks that disturb the offset history, and replaces any repcodes within
+ * the seqStore that may be invalid.
+ *
+ * dRepcodes are updated as would be on the decompression side. cRepcodes are updated exactly in
+ * accordance with the seqStore.
+ */
+static void ZSTD_seqStore_resolveOffCodes(repcodes_t* const dRepcodes, repcodes_t* const cRepcodes,
+ seqStore_t* const seqStore, U32 const nbSeq) {
+ U32 idx = 0;
+ for (; idx < nbSeq; ++idx) {
+ seqDef* const seq = seqStore->sequencesStart + idx;
+ U32 const ll0 = (seq->litLength == 0);
+ U32 offCode = seq->offset - 1;
+ assert(seq->offset > 0);
+ if (offCode <= ZSTD_REP_MOVE) {
+ U32 const dRawOffset = ZSTD_resolveRepcodeToRawOffset(dRepcodes->rep, offCode, ll0);
+ U32 const cRawOffset = ZSTD_resolveRepcodeToRawOffset(cRepcodes->rep, offCode, ll0);
+ /* Adjust simulated decompression repcode history if we come across a mismatch. Replace
+ * the repcode with the offset it actually references, determined by the compression
+ * repcode history.
+ */
+ if (dRawOffset != cRawOffset) {
+ seq->offset = cRawOffset + ZSTD_REP_NUM;
+ }
+ }
+ /* Compression repcode history is always updated with values directly from the unmodified seqStore.
+ * Decompression repcode history may use modified seq->offset value taken from compression repcode history.
+ */
+ *dRepcodes = ZSTD_updateRep(dRepcodes->rep, seq->offset - 1, ll0);
+ *cRepcodes = ZSTD_updateRep(cRepcodes->rep, offCode, ll0);
+ }
+}
+
+/* ZSTD_compressSeqStore_singleBlock():
+ * Compresses a seqStore into a block with a block header, into the buffer dst.
+ *
+ * Returns the total size of that block (including header) or a ZSTD error code.
+ */
+static size_t ZSTD_compressSeqStore_singleBlock(ZSTD_CCtx* zc, seqStore_t* const seqStore,
+ repcodes_t* const dRep, repcodes_t* const cRep,
+ void* dst, size_t dstCapacity,
+ const void* src, size_t srcSize,
+ U32 lastBlock, U32 isPartition) {
+ const U32 rleMaxLength = 25;
+ BYTE* op = (BYTE*)dst;
+ const BYTE* ip = (const BYTE*)src;
+ size_t cSize;
+ size_t cSeqsSize;
+
+ /* In case of an RLE or raw block, the simulated decompression repcode history must be reset */
+ repcodes_t const dRepOriginal = *dRep;
+ if (isPartition)
+ ZSTD_seqStore_resolveOffCodes(dRep, cRep, seqStore, (U32)(seqStore->sequences - seqStore->sequencesStart));
+
+ cSeqsSize = ZSTD_entropyCompressSeqStore(seqStore,
+ &zc->blockState.prevCBlock->entropy, &zc->blockState.nextCBlock->entropy,
+ &zc->appliedParams,
+ op + ZSTD_blockHeaderSize, dstCapacity - ZSTD_blockHeaderSize,
+ srcSize,
+ zc->entropyWorkspace, ENTROPY_WORKSPACE_SIZE /* statically allocated in resetCCtx */,
+ zc->bmi2);
+ FORWARD_IF_ERROR(cSeqsSize, "ZSTD_entropyCompressSeqStore failed!");
+
+ if (!zc->isFirstBlock &&
+ cSeqsSize < rleMaxLength &&
+ ZSTD_isRLE((BYTE const*)src, srcSize)) {
+ /* We don't want to emit our first block as a RLE even if it qualifies because
+ * doing so will cause the decoder (cli only) to throw a "should consume all input error."
+ * This is only an issue for zstd <= v1.4.3
+ */
+ cSeqsSize = 1;
+ }
+
+ if (zc->seqCollector.collectSequences) {
+ ZSTD_copyBlockSequences(zc);
+ ZSTD_blockState_confirmRepcodesAndEntropyTables(&zc->blockState);
+ return 0;
+ }
+
+ if (zc->blockState.prevCBlock->entropy.fse.offcode_repeatMode == FSE_repeat_valid)
+ zc->blockState.prevCBlock->entropy.fse.offcode_repeatMode = FSE_repeat_check;
+
+ if (cSeqsSize == 0) {
+ cSize = ZSTD_noCompressBlock(op, dstCapacity, ip, srcSize, lastBlock);
+ FORWARD_IF_ERROR(cSize, "Nocompress block failed");
+ DEBUGLOG(4, "Writing out nocompress block, size: %zu", cSize);
+ *dRep = dRepOriginal; /* reset simulated decompression repcode history */
+ } else if (cSeqsSize == 1) {
+ cSize = ZSTD_rleCompressBlock(op, dstCapacity, *ip, srcSize, lastBlock);
+ FORWARD_IF_ERROR(cSize, "RLE compress block failed");
+ DEBUGLOG(4, "Writing out RLE block, size: %zu", cSize);
+ *dRep = dRepOriginal; /* reset simulated decompression repcode history */
+ } else {
+ ZSTD_blockState_confirmRepcodesAndEntropyTables(&zc->blockState);
+ writeBlockHeader(op, cSeqsSize, srcSize, lastBlock);
+ cSize = ZSTD_blockHeaderSize + cSeqsSize;
+ DEBUGLOG(4, "Writing out compressed block, size: %zu", cSize);
+ }
+ return cSize;
+}
+
+/* Struct to keep track of where we are in our recursive calls. */
+typedef struct {
+ U32* splitLocations; /* Array of split indices */
+ size_t idx; /* The current index within splitLocations being worked on */
+} seqStoreSplits;
+
+#define MIN_SEQUENCES_BLOCK_SPLITTING 300
+#define MAX_NB_SPLITS 196
+
+/* Helper function to perform the recursive search for block splits.
+ * Estimates the cost of seqStore prior to split, and estimates the cost of splitting the sequences in half.
+ * If advantageous to split, then we recurse down the two sub-blocks. If not, or if an error occurred in estimation, then
+ * we do not recurse.
+ *
+ * Note: The recursion depth is capped by a heuristic minimum number of sequences, defined by MIN_SEQUENCES_BLOCK_SPLITTING.
+ * In theory, this means the absolute largest recursion depth is 10 == log2(maxNbSeqInBlock/MIN_SEQUENCES_BLOCK_SPLITTING).
+ * In practice, recursion depth usually doesn't go beyond 4.
+ *
+ * Furthermore, the number of splits is capped by MAX_NB_SPLITS. At MAX_NB_SPLITS == 196 with the current existing blockSize
+ * maximum of 128 KB, this value is actually impossible to reach.
+ */
+static void ZSTD_deriveBlockSplitsHelper(seqStoreSplits* splits, size_t startIdx, size_t endIdx,
+ const ZSTD_CCtx* zc, const seqStore_t* origSeqStore) {
+ seqStore_t fullSeqStoreChunk;
+ seqStore_t firstHalfSeqStore;
+ seqStore_t secondHalfSeqStore;
+ size_t estimatedOriginalSize;
+ size_t estimatedFirstHalfSize;
+ size_t estimatedSecondHalfSize;
+ size_t midIdx = (startIdx + endIdx)/2;
+
+ if (endIdx - startIdx < MIN_SEQUENCES_BLOCK_SPLITTING || splits->idx >= MAX_NB_SPLITS) {
+ return;
+ }
+ ZSTD_deriveSeqStoreChunk(&fullSeqStoreChunk, origSeqStore, startIdx, endIdx);
+ ZSTD_deriveSeqStoreChunk(&firstHalfSeqStore, origSeqStore, startIdx, midIdx);
+ ZSTD_deriveSeqStoreChunk(&secondHalfSeqStore, origSeqStore, midIdx, endIdx);
+ estimatedOriginalSize = ZSTD_buildEntropyStatisticsAndEstimateSubBlockSize(&fullSeqStoreChunk, zc);
+ estimatedFirstHalfSize = ZSTD_buildEntropyStatisticsAndEstimateSubBlockSize(&firstHalfSeqStore, zc);
+ estimatedSecondHalfSize = ZSTD_buildEntropyStatisticsAndEstimateSubBlockSize(&secondHalfSeqStore, zc);
+ DEBUGLOG(5, "Estimated original block size: %zu -- First half split: %zu -- Second half split: %zu",
+ estimatedOriginalSize, estimatedFirstHalfSize, estimatedSecondHalfSize);
+ if (ZSTD_isError(estimatedOriginalSize) || ZSTD_isError(estimatedFirstHalfSize) || ZSTD_isError(estimatedSecondHalfSize)) {
+ return;
+ }
+ if (estimatedFirstHalfSize + estimatedSecondHalfSize < estimatedOriginalSize) {
+ ZSTD_deriveBlockSplitsHelper(splits, startIdx, midIdx, zc, origSeqStore);
+ splits->splitLocations[splits->idx] = (U32)midIdx;
+ splits->idx++;
+ ZSTD_deriveBlockSplitsHelper(splits, midIdx, endIdx, zc, origSeqStore);
+ }
+}
+
+/* Base recursive function. Populates a table with intra-block partition indices that can improve compression ratio.
+ *
+ * Returns the number of splits made (which equals the size of the partition table - 1).
+ */
+static size_t ZSTD_deriveBlockSplits(ZSTD_CCtx* zc, U32 partitions[], U32 nbSeq) {
+ seqStoreSplits splits = {partitions, 0};
+ if (nbSeq <= 4) {
+ DEBUGLOG(4, "ZSTD_deriveBlockSplits: Too few sequences to split");
+ /* Refuse to try and split anything with less than 4 sequences */
+ return 0;
+ }
+ ZSTD_deriveBlockSplitsHelper(&splits, 0, nbSeq, zc, &zc->seqStore);
+ splits.splitLocations[splits.idx] = nbSeq;
+ DEBUGLOG(5, "ZSTD_deriveBlockSplits: final nb partitions: %zu", splits.idx+1);
+ return splits.idx;
+}
+
+/* ZSTD_compressBlock_splitBlock():
+ * Attempts to split a given block into multiple blocks to improve compression ratio.
+ *
+ * Returns combined size of all blocks (which includes headers), or a ZSTD error code.
+ */
+static size_t ZSTD_compressBlock_splitBlock_internal(ZSTD_CCtx* zc, void* dst, size_t dstCapacity,
+ const void* src, size_t blockSize, U32 lastBlock, U32 nbSeq) {
+ size_t cSize = 0;
+ const BYTE* ip = (const BYTE*)src;
+ BYTE* op = (BYTE*)dst;
+ U32 partitions[MAX_NB_SPLITS];
+ size_t i = 0;
+ size_t srcBytesTotal = 0;
+ size_t numSplits = ZSTD_deriveBlockSplits(zc, partitions, nbSeq);
+ seqStore_t nextSeqStore;
+ seqStore_t currSeqStore;
+
+ /* If a block is split and some partitions are emitted as RLE/uncompressed, then repcode history
+ * may become invalid. In order to reconcile potentially invalid repcodes, we keep track of two
+ * separate repcode histories that simulate repcode history on compression and decompression side,
+ * and use the histories to determine whether we must replace a particular repcode with its raw offset.
+ *
+ * 1) cRep gets updated for each partition, regardless of whether the block was emitted as uncompressed
+ * or RLE. This allows us to retrieve the offset value that an invalid repcode references within
+ * a nocompress/RLE block.
+ * 2) dRep gets updated only for compressed partitions, and when a repcode gets replaced, will use
+ * the replacement offset value rather than the original repcode to update the repcode history.
+ * dRep also will be the final repcode history sent to the next block.
+ *
+ * See ZSTD_seqStore_resolveOffCodes() for more details.
+ */
+ repcodes_t dRep;
+ repcodes_t cRep;
+ ZSTD_memcpy(dRep.rep, zc->blockState.prevCBlock->rep, sizeof(repcodes_t));
+ ZSTD_memcpy(cRep.rep, zc->blockState.prevCBlock->rep, sizeof(repcodes_t));
+
+ DEBUGLOG(4, "ZSTD_compressBlock_splitBlock_internal (dstCapacity=%u, dictLimit=%u, nextToUpdate=%u)",
+ (unsigned)dstCapacity, (unsigned)zc->blockState.matchState.window.dictLimit,
+ (unsigned)zc->blockState.matchState.nextToUpdate);
+
+ if (numSplits == 0) {
+ size_t cSizeSingleBlock = ZSTD_compressSeqStore_singleBlock(zc, &zc->seqStore,
+ &dRep, &cRep,
+ op, dstCapacity,
+ ip, blockSize,
+ lastBlock, 0 /* isPartition */);
+ FORWARD_IF_ERROR(cSizeSingleBlock, "Compressing single block from splitBlock_internal() failed!");
+ DEBUGLOG(5, "ZSTD_compressBlock_splitBlock_internal: No splits");
+ assert(cSizeSingleBlock <= ZSTD_BLOCKSIZE_MAX + ZSTD_blockHeaderSize);
+ return cSizeSingleBlock;
+ }
+
+ ZSTD_deriveSeqStoreChunk(&currSeqStore, &zc->seqStore, 0, partitions[0]);
+ for (i = 0; i <= numSplits; ++i) {
+ size_t srcBytes;
+ size_t cSizeChunk;
+ U32 const lastPartition = (i == numSplits);
+ U32 lastBlockEntireSrc = 0;
+
+ srcBytes = ZSTD_countSeqStoreLiteralsBytes(&currSeqStore) + ZSTD_countSeqStoreMatchBytes(&currSeqStore);
+ srcBytesTotal += srcBytes;
+ if (lastPartition) {
+ /* This is the final partition, need to account for possible last literals */
+ srcBytes += blockSize - srcBytesTotal;
+ lastBlockEntireSrc = lastBlock;
+ } else {
+ ZSTD_deriveSeqStoreChunk(&nextSeqStore, &zc->seqStore, partitions[i], partitions[i+1]);
+ }
+
+ cSizeChunk = ZSTD_compressSeqStore_singleBlock(zc, &currSeqStore,
+ &dRep, &cRep,
+ op, dstCapacity,
+ ip, srcBytes,
+ lastBlockEntireSrc, 1 /* isPartition */);
+ DEBUGLOG(5, "Estimated size: %zu actual size: %zu", ZSTD_buildEntropyStatisticsAndEstimateSubBlockSize(&currSeqStore, zc), cSizeChunk);
+ FORWARD_IF_ERROR(cSizeChunk, "Compressing chunk failed!");
+
+ ip += srcBytes;
+ op += cSizeChunk;
+ dstCapacity -= cSizeChunk;
+ cSize += cSizeChunk;
+ currSeqStore = nextSeqStore;
+ assert(cSizeChunk <= ZSTD_BLOCKSIZE_MAX + ZSTD_blockHeaderSize);
+ }
+ /* cRep and dRep may have diverged during the compression. If so, we use the dRep repcodes
+ * for the next block.
+ */
+ ZSTD_memcpy(zc->blockState.prevCBlock->rep, dRep.rep, sizeof(repcodes_t));
+ return cSize;
+}
+
+static size_t ZSTD_compressBlock_splitBlock(ZSTD_CCtx* zc,
+ void* dst, size_t dstCapacity,
+ const void* src, size_t srcSize, U32 lastBlock) {
+ const BYTE* ip = (const BYTE*)src;
+ BYTE* op = (BYTE*)dst;
+ U32 nbSeq;
+ size_t cSize;
+ DEBUGLOG(4, "ZSTD_compressBlock_splitBlock");
+
+ { const size_t bss = ZSTD_buildSeqStore(zc, src, srcSize);
+ FORWARD_IF_ERROR(bss, "ZSTD_buildSeqStore failed");
+ if (bss == ZSTDbss_noCompress) {
+ if (zc->blockState.prevCBlock->entropy.fse.offcode_repeatMode == FSE_repeat_valid)
+ zc->blockState.prevCBlock->entropy.fse.offcode_repeatMode = FSE_repeat_check;
+ cSize = ZSTD_noCompressBlock(op, dstCapacity, ip, srcSize, lastBlock);
+ FORWARD_IF_ERROR(cSize, "ZSTD_noCompressBlock failed");
+ DEBUGLOG(4, "ZSTD_compressBlock_splitBlock: Nocompress block");
+ return cSize;
+ }
+ nbSeq = (U32)(zc->seqStore.sequences - zc->seqStore.sequencesStart);
+ }
+
+ assert(zc->appliedParams.splitBlocks == 1);
+ cSize = ZSTD_compressBlock_splitBlock_internal(zc, dst, dstCapacity, src, srcSize, lastBlock, nbSeq);
+ FORWARD_IF_ERROR(cSize, "Splitting blocks failed!");
+ return cSize;
}
static size_t ZSTD_compressBlock_internal(ZSTD_CCtx* zc,
@@ -2683,12 +3733,12 @@ static size_t ZSTD_compressBlock_internal(ZSTD_CCtx* zc,
if (zc->seqCollector.collectSequences) {
ZSTD_copyBlockSequences(zc);
- ZSTD_confirmRepcodesAndEntropyTables(zc);
+ ZSTD_blockState_confirmRepcodesAndEntropyTables(&zc->blockState);
return 0;
}
/* encode sequences and literals */
- cSize = ZSTD_entropyCompressSequences(&zc->seqStore,
+ cSize = ZSTD_entropyCompressSeqStore(&zc->seqStore,
&zc->blockState.prevCBlock->entropy, &zc->blockState.nextCBlock->entropy,
&zc->appliedParams,
dst, dstCapacity,
@@ -2717,7 +3767,7 @@ static size_t ZSTD_compressBlock_internal(ZSTD_CCtx* zc,
out:
if (!ZSTD_isError(cSize) && cSize > 1) {
- ZSTD_confirmRepcodesAndEntropyTables(zc);
+ ZSTD_blockState_confirmRepcodesAndEntropyTables(&zc->blockState);
}
/* We check that dictionaries have offset codes available for the first
* block. After the first block, the offcode table might not have large
@@ -2770,7 +3820,7 @@ static size_t ZSTD_compressBlock_targetCBlockSize_body(ZSTD_CCtx* zc,
size_t const maxCSize = srcSize - ZSTD_minGain(srcSize, zc->appliedParams.cParams.strategy);
FORWARD_IF_ERROR(cSize, "ZSTD_compressSuperBlock failed");
if (cSize != 0 && cSize < maxCSize + ZSTD_blockHeaderSize) {
- ZSTD_confirmRepcodesAndEntropyTables(zc);
+ ZSTD_blockState_confirmRepcodesAndEntropyTables(&zc->blockState);
return cSize;
}
}
@@ -2810,9 +3860,9 @@ static void ZSTD_overflowCorrectIfNeeded(ZSTD_matchState_t* ms,
void const* ip,
void const* iend)
{
- if (ZSTD_window_needOverflowCorrection(ms->window, iend)) {
- U32 const maxDist = (U32)1 << params->cParams.windowLog;
- U32 const cycleLog = ZSTD_cycleLog(params->cParams.chainLog, params->cParams.strategy);
+ U32 const cycleLog = ZSTD_cycleLog(params->cParams.chainLog, params->cParams.strategy);
+ U32 const maxDist = (U32)1 << params->cParams.windowLog;
+ if (ZSTD_window_needOverflowCorrection(ms->window, cycleLog, maxDist, ms->loadedDictEnd, ip, iend)) {
U32 const correction = ZSTD_window_correctOverflow(&ms->window, cycleLog, maxDist, ip);
ZSTD_STATIC_ASSERT(ZSTD_CHAINLOG_MAX <= 30);
ZSTD_STATIC_ASSERT(ZSTD_WINDOWLOG_MAX_32 <= 30);
@@ -2835,7 +3885,7 @@ static void ZSTD_overflowCorrectIfNeeded(ZSTD_matchState_t* ms,
* Frame is supposed already started (header already produced)
* @return : compressed size, or an error code
*/
-static size_t ZSTD_compress_frameChunk (ZSTD_CCtx* cctx,
+static size_t ZSTD_compress_frameChunk(ZSTD_CCtx* cctx,
void* dst, size_t dstCapacity,
const void* src, size_t srcSize,
U32 lastFrameChunk)
@@ -2875,6 +3925,10 @@ static size_t ZSTD_compress_frameChunk (ZSTD_CCtx* cctx,
FORWARD_IF_ERROR(cSize, "ZSTD_compressBlock_targetCBlockSize failed");
assert(cSize > 0);
assert(cSize <= blockSize + ZSTD_blockHeaderSize);
+ } else if (ZSTD_blockSplitterEnabled(&cctx->appliedParams)) {
+ cSize = ZSTD_compressBlock_splitBlock(cctx, op, dstCapacity, ip, blockSize, lastBlock);
+ FORWARD_IF_ERROR(cSize, "ZSTD_compressBlock_splitBlock failed");
+ assert(cSize > 0 || cctx->seqCollector.collectSequences == 1);
} else {
cSize = ZSTD_compressBlock_internal(cctx,
op+ZSTD_blockHeaderSize, dstCapacity-ZSTD_blockHeaderSize,
@@ -2954,6 +4008,26 @@ static size_t ZSTD_writeFrameHeader(void* dst, size_t dstCapacity,
return pos;
}
+/* ZSTD_writeSkippableFrame_advanced() :
+ * Writes out a skippable frame with the specified magic number variant (16 are supported),
+ * from ZSTD_MAGIC_SKIPPABLE_START to ZSTD_MAGIC_SKIPPABLE_START+15, and the desired source data.
+ *
+ * Returns the total number of bytes written, or a ZSTD error code.
+ */
+size_t ZSTD_writeSkippableFrame(void* dst, size_t dstCapacity,
+ const void* src, size_t srcSize, unsigned magicVariant) {
+ BYTE* op = (BYTE*)dst;
+ RETURN_ERROR_IF(dstCapacity < srcSize + ZSTD_SKIPPABLEHEADERSIZE /* Skippable frame overhead */,
+ dstSize_tooSmall, "Not enough room for skippable frame");
+ RETURN_ERROR_IF(srcSize > (unsigned)0xFFFFFFFF, srcSize_wrong, "Src size too large for skippable frame");
+ RETURN_ERROR_IF(magicVariant > 15, parameter_outOfBound, "Skippable frame magic number variant not supported");
+
+ MEM_writeLE32(op, (U32)(ZSTD_MAGIC_SKIPPABLE_START + magicVariant));
+ MEM_writeLE32(op+4, (U32)srcSize);
+ ZSTD_memcpy(op+8, src, srcSize);
+ return srcSize + ZSTD_SKIPPABLEHEADERSIZE;
+}
+
/* ZSTD_writeLastEmptyBlock() :
* output an empty Block with end-of-frame mark to complete a frame
* @return : size of data written into `dst` (== ZSTD_blockHeaderSize (defined in zstd_internal.h))
@@ -3010,11 +4084,12 @@ static size_t ZSTD_compressContinue_internal (ZSTD_CCtx* cctx,
if (!srcSize) return fhSize; /* do not generate an empty block if no input */
- if (!ZSTD_window_update(&ms->window, src, srcSize)) {
+ if (!ZSTD_window_update(&ms->window, src, srcSize, ms->forceNonContiguous)) {
+ ms->forceNonContiguous = 0;
ms->nextToUpdate = ms->window.dictLimit;
}
if (cctx->appliedParams.ldmParams.enableLdm) {
- ZSTD_window_update(&cctx->ldmState.window, src, srcSize);
+ ZSTD_window_update(&cctx->ldmState.window, src, srcSize, /* forceNonContiguous */ 0);
}
if (!frame) {
@@ -3082,63 +4157,86 @@ static size_t ZSTD_loadDictionaryContent(ZSTD_matchState_t* ms,
{
const BYTE* ip = (const BYTE*) src;
const BYTE* const iend = ip + srcSize;
+ int const loadLdmDict = params->ldmParams.enableLdm && ls != NULL;
+
+ /* Assert that we the ms params match the params we're being given */
+ ZSTD_assertEqualCParams(params->cParams, ms->cParams);
- ZSTD_window_update(&ms->window, src, srcSize);
+ if (srcSize > ZSTD_CHUNKSIZE_MAX) {
+ /* Allow the dictionary to set indices up to exactly ZSTD_CURRENT_MAX.
+ * Dictionaries right at the edge will immediately trigger overflow
+ * correction, but I don't want to insert extra constraints here.
+ */
+ U32 const maxDictSize = ZSTD_CURRENT_MAX - 1;
+ /* We must have cleared our windows when our source is this large. */
+ assert(ZSTD_window_isEmpty(ms->window));
+ if (loadLdmDict)
+ assert(ZSTD_window_isEmpty(ls->window));
+ /* If the dictionary is too large, only load the suffix of the dictionary. */
+ if (srcSize > maxDictSize) {
+ ip = iend - maxDictSize;
+ src = ip;
+ srcSize = maxDictSize;
+ }
+ }
+
+ DEBUGLOG(4, "ZSTD_loadDictionaryContent(): useRowMatchFinder=%d", (int)params->useRowMatchFinder);
+ ZSTD_window_update(&ms->window, src, srcSize, /* forceNonContiguous */ 0);
ms->loadedDictEnd = params->forceWindow ? 0 : (U32)(iend - ms->window.base);
+ ms->forceNonContiguous = params->deterministicRefPrefix;
- if (params->ldmParams.enableLdm && ls != NULL) {
- ZSTD_window_update(&ls->window, src, srcSize);
+ if (loadLdmDict) {
+ ZSTD_window_update(&ls->window, src, srcSize, /* forceNonContiguous */ 0);
ls->loadedDictEnd = params->forceWindow ? 0 : (U32)(iend - ls->window.base);
}
- /* Assert that we the ms params match the params we're being given */
- ZSTD_assertEqualCParams(params->cParams, ms->cParams);
-
if (srcSize <= HASH_READ_SIZE) return 0;
- while (iend - ip > HASH_READ_SIZE) {
- size_t const remaining = (size_t)(iend - ip);
- size_t const chunk = MIN(remaining, ZSTD_CHUNKSIZE_MAX);
- const BYTE* const ichunk = ip + chunk;
+ ZSTD_overflowCorrectIfNeeded(ms, ws, params, ip, iend);
- ZSTD_overflowCorrectIfNeeded(ms, ws, params, ip, ichunk);
+ if (loadLdmDict)
+ ZSTD_ldm_fillHashTable(ls, ip, iend, &params->ldmParams);
- if (params->ldmParams.enableLdm && ls != NULL)
- ZSTD_ldm_fillHashTable(ls, (const BYTE*)src, (const BYTE*)src + srcSize, &params->ldmParams);
-
- switch(params->cParams.strategy)
- {
- case ZSTD_fast:
- ZSTD_fillHashTable(ms, ichunk, dtlm);
- break;
- case ZSTD_dfast:
- ZSTD_fillDoubleHashTable(ms, ichunk, dtlm);
- break;
+ switch(params->cParams.strategy)
+ {
+ case ZSTD_fast:
+ ZSTD_fillHashTable(ms, iend, dtlm);
+ break;
+ case ZSTD_dfast:
+ ZSTD_fillDoubleHashTable(ms, iend, dtlm);
+ break;
- case ZSTD_greedy:
- case ZSTD_lazy:
- case ZSTD_lazy2:
- if (chunk >= HASH_READ_SIZE && ms->dedicatedDictSearch) {
- assert(chunk == remaining); /* must load everything in one go */
- ZSTD_dedicatedDictSearch_lazy_loadDictionary(ms, ichunk-HASH_READ_SIZE);
- } else if (chunk >= HASH_READ_SIZE) {
- ZSTD_insertAndFindFirstIndex(ms, ichunk-HASH_READ_SIZE);
+ case ZSTD_greedy:
+ case ZSTD_lazy:
+ case ZSTD_lazy2:
+ assert(srcSize >= HASH_READ_SIZE);
+ if (ms->dedicatedDictSearch) {
+ assert(ms->chainTable != NULL);
+ ZSTD_dedicatedDictSearch_lazy_loadDictionary(ms, iend-HASH_READ_SIZE);
+ } else {
+ assert(params->useRowMatchFinder != ZSTD_urm_auto);
+ if (params->useRowMatchFinder == ZSTD_urm_enableRowMatchFinder) {
+ size_t const tagTableSize = ((size_t)1 << params->cParams.hashLog) * sizeof(U16);
+ ZSTD_memset(ms->tagTable, 0, tagTableSize);
+ ZSTD_row_update(ms, iend-HASH_READ_SIZE);
+ DEBUGLOG(4, "Using row-based hash table for lazy dict");
+ } else {
+ ZSTD_insertAndFindFirstIndex(ms, iend-HASH_READ_SIZE);
+ DEBUGLOG(4, "Using chain-based hash table for lazy dict");
}
- break;
-
- case ZSTD_btlazy2: /* we want the dictionary table fully sorted */
- case ZSTD_btopt:
- case ZSTD_btultra:
- case ZSTD_btultra2:
- if (chunk >= HASH_READ_SIZE)
- ZSTD_updateTree(ms, ichunk-HASH_READ_SIZE, ichunk);
- break;
-
- default:
- assert(0); /* not possible : not a valid strategy id */
}
+ break;
+
+ case ZSTD_btlazy2: /* we want the dictionary table fully sorted */
+ case ZSTD_btopt:
+ case ZSTD_btultra:
+ case ZSTD_btultra2:
+ assert(srcSize >= HASH_READ_SIZE);
+ ZSTD_updateTree(ms, iend-HASH_READ_SIZE, iend);
+ break;
- ip = ichunk;
+ default:
+ assert(0); /* not possible : not a valid strategy id */
}
ms->nextToUpdate = (U32)(iend - ms->window.base);
@@ -3277,7 +4375,6 @@ static size_t ZSTD_loadZstdDictionary(ZSTD_compressedBlockState_t* bs,
const BYTE* const dictEnd = dictPtr + dictSize;
size_t dictID;
size_t eSize;
-
ZSTD_STATIC_ASSERT(HUF_WORKSPACE_SIZE >= (1<<MAX(MLFSELog,LLFSELog)));
assert(dictSize >= 8);
assert(MEM_readLE32(dictPtr) == ZSTD_MAGIC_DICTIONARY);
@@ -3348,6 +4445,10 @@ static size_t ZSTD_compressBegin_internal(ZSTD_CCtx* cctx,
const ZSTD_CCtx_params* params, U64 pledgedSrcSize,
ZSTD_buffered_policy_e zbuff)
{
+ size_t const dictContentSize = cdict ? cdict->dictContentSize : dictSize;
+#if ZSTD_TRACE
+ cctx->traceCtx = (ZSTD_trace_compress_begin != NULL) ? ZSTD_trace_compress_begin(cctx) : 0;
+#endif
DEBUGLOG(4, "ZSTD_compressBegin_internal: wlog=%u", params->cParams.windowLog);
/* params are supposed to be fully validated at this point */
assert(!ZSTD_isError(ZSTD_checkCParams(params->cParams)));
@@ -3362,7 +4463,8 @@ static size_t ZSTD_compressBegin_internal(ZSTD_CCtx* cctx,
return ZSTD_resetCCtx_usingCDict(cctx, cdict, params, pledgedSrcSize, zbuff);
}
- FORWARD_IF_ERROR( ZSTD_resetCCtx_internal(cctx, *params, pledgedSrcSize,
+ FORWARD_IF_ERROR( ZSTD_resetCCtx_internal(cctx, params, pledgedSrcSize,
+ dictContentSize,
ZSTDcrp_makeClean, zbuff) , "");
{ size_t const dictID = cdict ?
ZSTD_compress_insertDictionary(
@@ -3377,6 +4479,7 @@ static size_t ZSTD_compressBegin_internal(ZSTD_CCtx* cctx,
FORWARD_IF_ERROR(dictID, "ZSTD_compress_insertDictionary failed");
assert(dictID <= UINT_MAX);
cctx->dictID = (U32)dictID;
+ cctx->dictContentSize = dictContentSize;
}
return 0;
}
@@ -3405,8 +4508,8 @@ size_t ZSTD_compressBegin_advanced(ZSTD_CCtx* cctx,
const void* dict, size_t dictSize,
ZSTD_parameters params, unsigned long long pledgedSrcSize)
{
- ZSTD_CCtx_params const cctxParams =
- ZSTD_assignParamsToCCtxParams(&cctx->requestedParams, &params);
+ ZSTD_CCtx_params cctxParams;
+ ZSTD_CCtxParams_init_internal(&cctxParams, &params, ZSTD_NO_CLEVEL);
return ZSTD_compressBegin_advanced_internal(cctx,
dict, dictSize, ZSTD_dct_auto, ZSTD_dtlm_fast,
NULL /*cdict*/,
@@ -3415,9 +4518,11 @@ size_t ZSTD_compressBegin_advanced(ZSTD_CCtx* cctx,
size_t ZSTD_compressBegin_usingDict(ZSTD_CCtx* cctx, const void* dict, size_t dictSize, int compressionLevel)
{
- ZSTD_parameters const params = ZSTD_getParams_internal(compressionLevel, ZSTD_CONTENTSIZE_UNKNOWN, dictSize, ZSTD_cpm_noAttachDict);
- ZSTD_CCtx_params const cctxParams =
- ZSTD_assignParamsToCCtxParams(&cctx->requestedParams, &params);
+ ZSTD_CCtx_params cctxParams;
+ {
+ ZSTD_parameters const params = ZSTD_getParams_internal(compressionLevel, ZSTD_CONTENTSIZE_UNKNOWN, dictSize, ZSTD_cpm_noAttachDict);
+ ZSTD_CCtxParams_init_internal(&cctxParams, &params, (compressionLevel == 0) ? ZSTD_CLEVEL_DEFAULT : compressionLevel);
+ }
DEBUGLOG(4, "ZSTD_compressBegin_usingDict (dictSize=%u)", (unsigned)dictSize);
return ZSTD_compressBegin_internal(cctx, dict, dictSize, ZSTD_dct_auto, ZSTD_dtlm_fast, NULL,
&cctxParams, ZSTD_CONTENTSIZE_UNKNOWN, ZSTDb_not_buffered);
@@ -3471,6 +4576,30 @@ static size_t ZSTD_writeEpilogue(ZSTD_CCtx* cctx, void* dst, size_t dstCapacity)
return op-ostart;
}
+void ZSTD_CCtx_trace(ZSTD_CCtx* cctx, size_t extraCSize)
+{
+#if ZSTD_TRACE
+ if (cctx->traceCtx && ZSTD_trace_compress_end != NULL) {
+ int const streaming = cctx->inBuffSize > 0 || cctx->outBuffSize > 0 || cctx->appliedParams.nbWorkers > 0;
+ ZSTD_Trace trace;
+ ZSTD_memset(&trace, 0, sizeof(trace));
+ trace.version = ZSTD_VERSION_NUMBER;
+ trace.streaming = streaming;
+ trace.dictionaryID = cctx->dictID;
+ trace.dictionarySize = cctx->dictContentSize;
+ trace.uncompressedSize = cctx->consumedSrcSize;
+ trace.compressedSize = cctx->producedCSize + extraCSize;
+ trace.params = &cctx->appliedParams;
+ trace.cctx = cctx;
+ ZSTD_trace_compress_end(cctx->traceCtx, &trace);
+ }
+ cctx->traceCtx = 0;
+#else
+ (void)cctx;
+ (void)extraCSize;
+#endif
+}
+
size_t ZSTD_compressEnd (ZSTD_CCtx* cctx,
void* dst, size_t dstCapacity,
const void* src, size_t srcSize)
@@ -3493,25 +4622,10 @@ size_t ZSTD_compressEnd (ZSTD_CCtx* cctx,
(unsigned)cctx->pledgedSrcSizePlusOne-1,
(unsigned)cctx->consumedSrcSize);
}
+ ZSTD_CCtx_trace(cctx, endResult);
return cSize + endResult;
}
-static size_t ZSTD_compress_internal (ZSTD_CCtx* cctx,
- void* dst, size_t dstCapacity,
- const void* src, size_t srcSize,
- const void* dict,size_t dictSize,
- const ZSTD_parameters* params)
-{
- ZSTD_CCtx_params const cctxParams =
- ZSTD_assignParamsToCCtxParams(&cctx->requestedParams, params);
- DEBUGLOG(4, "ZSTD_compress_internal");
- return ZSTD_compress_advanced_internal(cctx,
- dst, dstCapacity,
- src, srcSize,
- dict, dictSize,
- &cctxParams);
-}
-
size_t ZSTD_compress_advanced (ZSTD_CCtx* cctx,
void* dst, size_t dstCapacity,
const void* src, size_t srcSize,
@@ -3520,11 +4634,12 @@ size_t ZSTD_compress_advanced (ZSTD_CCtx* cctx,
{
DEBUGLOG(4, "ZSTD_compress_advanced");
FORWARD_IF_ERROR(ZSTD_checkCParams(params.cParams), "");
- return ZSTD_compress_internal(cctx,
- dst, dstCapacity,
- src, srcSize,
- dict, dictSize,
- &params);
+ ZSTD_CCtxParams_init_internal(&cctx->simpleApiParams, &params, ZSTD_NO_CLEVEL);
+ return ZSTD_compress_advanced_internal(cctx,
+ dst, dstCapacity,
+ src, srcSize,
+ dict, dictSize,
+ &cctx->simpleApiParams);
}
/* Internal */
@@ -3548,11 +4663,13 @@ size_t ZSTD_compress_usingDict(ZSTD_CCtx* cctx,
const void* dict, size_t dictSize,
int compressionLevel)
{
- ZSTD_parameters const params = ZSTD_getParams_internal(compressionLevel, srcSize, dict ? dictSize : 0, ZSTD_cpm_noAttachDict);
- ZSTD_CCtx_params cctxParams = ZSTD_assignParamsToCCtxParams(&cctx->requestedParams, &params);
+ {
+ ZSTD_parameters const params = ZSTD_getParams_internal(compressionLevel, srcSize, dict ? dictSize : 0, ZSTD_cpm_noAttachDict);
+ assert(params.fParams.contentSizeFlag == 1);
+ ZSTD_CCtxParams_init_internal(&cctx->simpleApiParams, &params, (compressionLevel == 0) ? ZSTD_CLEVEL_DEFAULT: compressionLevel);
+ }
DEBUGLOG(4, "ZSTD_compress_usingDict (srcSize=%u)", (unsigned)srcSize);
- assert(params.fParams.contentSizeFlag == 1);
- return ZSTD_compress_advanced_internal(cctx, dst, dstCapacity, src, srcSize, dict, dictSize, &cctxParams);
+ return ZSTD_compress_advanced_internal(cctx, dst, dstCapacity, src, srcSize, dict, dictSize, &cctx->simpleApiParams);
}
size_t ZSTD_compressCCtx(ZSTD_CCtx* cctx,
@@ -3596,7 +4713,10 @@ size_t ZSTD_estimateCDictSize_advanced(
DEBUGLOG(5, "sizeof(ZSTD_CDict) : %u", (unsigned)sizeof(ZSTD_CDict));
return ZSTD_cwksp_alloc_size(sizeof(ZSTD_CDict))
+ ZSTD_cwksp_alloc_size(HUF_WORKSPACE_SIZE)
- + ZSTD_sizeof_matchState(&cParams, /* forCCtx */ 0)
+ /* enableDedicatedDictSearch == 1 ensures that CDict estimation will not be too small
+ * in case we are using DDS with row-hash. */
+ + ZSTD_sizeof_matchState(&cParams, ZSTD_resolveRowMatchFinderMode(ZSTD_urm_auto, &cParams),
+ /* enableDedicatedDictSearch */ 1, /* forCCtx */ 0)
+ (dictLoadMethod == ZSTD_dlm_byRef ? 0
: ZSTD_cwksp_alloc_size(ZSTD_cwksp_align(dictSize, sizeof(void *))));
}
@@ -3627,9 +4747,6 @@ static size_t ZSTD_initCDict_internal(
assert(!ZSTD_checkCParams(params.cParams));
cdict->matchState.cParams = params.cParams;
cdict->matchState.dedicatedDictSearch = params.enableDedicatedDictSearch;
- if (cdict->matchState.dedicatedDictSearch && dictSize > ZSTD_CHUNKSIZE_MAX) {
- cdict->matchState.dedicatedDictSearch = 0;
- }
if ((dictLoadMethod == ZSTD_dlm_byRef) || (!dictBuffer) || (!dictSize)) {
cdict->dictContent = dictBuffer;
} else {
@@ -3650,6 +4767,7 @@ static size_t ZSTD_initCDict_internal(
&cdict->matchState,
&cdict->workspace,
&params.cParams,
+ params.useRowMatchFinder,
ZSTDcrp_makeClean,
ZSTDirp_reset,
ZSTD_resetTarget_CDict), "");
@@ -3673,14 +4791,17 @@ static size_t ZSTD_initCDict_internal(
static ZSTD_CDict* ZSTD_createCDict_advanced_internal(size_t dictSize,
ZSTD_dictLoadMethod_e dictLoadMethod,
- ZSTD_compressionParameters cParams, ZSTD_customMem customMem)
+ ZSTD_compressionParameters cParams,
+ ZSTD_useRowMatchFinderMode_e useRowMatchFinder,
+ U32 enableDedicatedDictSearch,
+ ZSTD_customMem customMem)
{
if ((!customMem.customAlloc) ^ (!customMem.customFree)) return NULL;
{ size_t const workspaceSize =
ZSTD_cwksp_alloc_size(sizeof(ZSTD_CDict)) +
ZSTD_cwksp_alloc_size(HUF_WORKSPACE_SIZE) +
- ZSTD_sizeof_matchState(&cParams, /* forCCtx */ 0) +
+ ZSTD_sizeof_matchState(&cParams, useRowMatchFinder, enableDedicatedDictSearch, /* forCCtx */ 0) +
(dictLoadMethod == ZSTD_dlm_byRef ? 0
: ZSTD_cwksp_alloc_size(ZSTD_cwksp_align(dictSize, sizeof(void*))));
void* const workspace = ZSTD_customMalloc(workspaceSize, customMem);
@@ -3698,8 +4819,8 @@ static ZSTD_CDict* ZSTD_createCDict_advanced_internal(size_t dictSize,
assert(cdict != NULL);
ZSTD_cwksp_move(&cdict->workspace, &ws);
cdict->customMem = customMem;
- cdict->compressionLevel = 0; /* signals advanced API usage */
-
+ cdict->compressionLevel = ZSTD_NO_CLEVEL; /* signals advanced API usage */
+ cdict->useRowMatchFinder = useRowMatchFinder;
return cdict;
}
}
@@ -3751,10 +4872,13 @@ ZSTDLIB_API ZSTD_CDict* ZSTD_createCDict_advanced2(
&cctxParams, ZSTD_CONTENTSIZE_UNKNOWN, dictSize, ZSTD_cpm_createCDict);
}
+ DEBUGLOG(3, "ZSTD_createCDict_advanced2: DDS: %u", cctxParams.enableDedicatedDictSearch);
cctxParams.cParams = cParams;
+ cctxParams.useRowMatchFinder = ZSTD_resolveRowMatchFinderMode(cctxParams.useRowMatchFinder, &cParams);
cdict = ZSTD_createCDict_advanced_internal(dictSize,
dictLoadMethod, cctxParams.cParams,
+ cctxParams.useRowMatchFinder, cctxParams.enableDedicatedDictSearch,
customMem);
if (ZSTD_isError( ZSTD_initCDict_internal(cdict,
@@ -3823,7 +4947,9 @@ const ZSTD_CDict* ZSTD_initStaticCDict(
ZSTD_dictContentType_e dictContentType,
ZSTD_compressionParameters cParams)
{
- size_t const matchStateSize = ZSTD_sizeof_matchState(&cParams, /* forCCtx */ 0);
+ ZSTD_useRowMatchFinderMode_e const useRowMatchFinder = ZSTD_resolveRowMatchFinderMode(ZSTD_urm_auto, &cParams);
+ /* enableDedicatedDictSearch == 1 ensures matchstate is not too small in case this CDict will be used for DDS + row hash */
+ size_t const matchStateSize = ZSTD_sizeof_matchState(&cParams, useRowMatchFinder, /* enableDedicatedDictSearch */ 1, /* forCCtx */ 0);
size_t const neededSize = ZSTD_cwksp_alloc_size(sizeof(ZSTD_CDict))
+ (dictLoadMethod == ZSTD_dlm_byRef ? 0
: ZSTD_cwksp_alloc_size(ZSTD_cwksp_align(dictSize, sizeof(void*))))
@@ -3848,6 +4974,8 @@ const ZSTD_CDict* ZSTD_initStaticCDict(
ZSTD_CCtxParams_init(&params, 0);
params.cParams = cParams;
+ params.useRowMatchFinder = useRowMatchFinder;
+ cdict->useRowMatchFinder = useRowMatchFinder;
if (ZSTD_isError( ZSTD_initCDict_internal(cdict,
dict, dictSize,
@@ -3874,62 +5002,88 @@ unsigned ZSTD_getDictID_fromCDict(const ZSTD_CDict* cdict)
return cdict->dictID;
}
-
-/* ZSTD_compressBegin_usingCDict_advanced() :
- * cdict must be != NULL */
-size_t ZSTD_compressBegin_usingCDict_advanced(
+/* ZSTD_compressBegin_usingCDict_internal() :
+ * Implementation of various ZSTD_compressBegin_usingCDict* functions.
+ */
+static size_t ZSTD_compressBegin_usingCDict_internal(
ZSTD_CCtx* const cctx, const ZSTD_CDict* const cdict,
ZSTD_frameParameters const fParams, unsigned long long const pledgedSrcSize)
{
- DEBUGLOG(4, "ZSTD_compressBegin_usingCDict_advanced");
+ ZSTD_CCtx_params cctxParams;
+ DEBUGLOG(4, "ZSTD_compressBegin_usingCDict_internal");
RETURN_ERROR_IF(cdict==NULL, dictionary_wrong, "NULL pointer!");
- { ZSTD_CCtx_params params = cctx->requestedParams;
+ /* Initialize the cctxParams from the cdict */
+ {
+ ZSTD_parameters params;
+ params.fParams = fParams;
params.cParams = ( pledgedSrcSize < ZSTD_USE_CDICT_PARAMS_SRCSIZE_CUTOFF
|| pledgedSrcSize < cdict->dictContentSize * ZSTD_USE_CDICT_PARAMS_DICTSIZE_MULTIPLIER
|| pledgedSrcSize == ZSTD_CONTENTSIZE_UNKNOWN
- || cdict->compressionLevel == 0 )
- && (params.attachDictPref != ZSTD_dictForceLoad) ?
+ || cdict->compressionLevel == 0 ) ?
ZSTD_getCParamsFromCDict(cdict)
: ZSTD_getCParams(cdict->compressionLevel,
pledgedSrcSize,
cdict->dictContentSize);
- /* Increase window log to fit the entire dictionary and source if the
- * source size is known. Limit the increase to 19, which is the
- * window log for compression level 1 with the largest source size.
- */
- if (pledgedSrcSize != ZSTD_CONTENTSIZE_UNKNOWN) {
- U32 const limitedSrcSize = (U32)MIN(pledgedSrcSize, 1U << 19);
- U32 const limitedSrcLog = limitedSrcSize > 1 ? ZSTD_highbit32(limitedSrcSize - 1) + 1 : 1;
- params.cParams.windowLog = MAX(params.cParams.windowLog, limitedSrcLog);
- }
- params.fParams = fParams;
- return ZSTD_compressBegin_internal(cctx,
- NULL, 0, ZSTD_dct_auto, ZSTD_dtlm_fast,
- cdict,
- &params, pledgedSrcSize,
- ZSTDb_not_buffered);
+ ZSTD_CCtxParams_init_internal(&cctxParams, &params, cdict->compressionLevel);
+ }
+ /* Increase window log to fit the entire dictionary and source if the
+ * source size is known. Limit the increase to 19, which is the
+ * window log for compression level 1 with the largest source size.
+ */
+ if (pledgedSrcSize != ZSTD_CONTENTSIZE_UNKNOWN) {
+ U32 const limitedSrcSize = (U32)MIN(pledgedSrcSize, 1U << 19);
+ U32 const limitedSrcLog = limitedSrcSize > 1 ? ZSTD_highbit32(limitedSrcSize - 1) + 1 : 1;
+ cctxParams.cParams.windowLog = MAX(cctxParams.cParams.windowLog, limitedSrcLog);
}
+ return ZSTD_compressBegin_internal(cctx,
+ NULL, 0, ZSTD_dct_auto, ZSTD_dtlm_fast,
+ cdict,
+ &cctxParams, pledgedSrcSize,
+ ZSTDb_not_buffered);
+}
+
+
+/* ZSTD_compressBegin_usingCDict_advanced() :
+ * This function is DEPRECATED.
+ * cdict must be != NULL */
+size_t ZSTD_compressBegin_usingCDict_advanced(
+ ZSTD_CCtx* const cctx, const ZSTD_CDict* const cdict,
+ ZSTD_frameParameters const fParams, unsigned long long const pledgedSrcSize)
+{
+ return ZSTD_compressBegin_usingCDict_internal(cctx, cdict, fParams, pledgedSrcSize);
}
/* ZSTD_compressBegin_usingCDict() :
- * pledgedSrcSize=0 means "unknown"
- * if pledgedSrcSize>0, it will enable contentSizeFlag */
+ * cdict must be != NULL */
size_t ZSTD_compressBegin_usingCDict(ZSTD_CCtx* cctx, const ZSTD_CDict* cdict)
{
ZSTD_frameParameters const fParams = { 0 /*content*/, 0 /*checksum*/, 0 /*noDictID*/ };
- DEBUGLOG(4, "ZSTD_compressBegin_usingCDict : dictIDFlag == %u", !fParams.noDictIDFlag);
- return ZSTD_compressBegin_usingCDict_advanced(cctx, cdict, fParams, ZSTD_CONTENTSIZE_UNKNOWN);
+ return ZSTD_compressBegin_usingCDict_internal(cctx, cdict, fParams, ZSTD_CONTENTSIZE_UNKNOWN);
}
-size_t ZSTD_compress_usingCDict_advanced(ZSTD_CCtx* cctx,
+/*! ZSTD_compress_usingCDict_internal():
+ * Implementation of various ZSTD_compress_usingCDict* functions.
+ */
+static size_t ZSTD_compress_usingCDict_internal(ZSTD_CCtx* cctx,
void* dst, size_t dstCapacity,
const void* src, size_t srcSize,
const ZSTD_CDict* cdict, ZSTD_frameParameters fParams)
{
- FORWARD_IF_ERROR(ZSTD_compressBegin_usingCDict_advanced(cctx, cdict, fParams, srcSize), ""); /* will check if cdict != NULL */
+ FORWARD_IF_ERROR(ZSTD_compressBegin_usingCDict_internal(cctx, cdict, fParams, srcSize), ""); /* will check if cdict != NULL */
return ZSTD_compressEnd(cctx, dst, dstCapacity, src, srcSize);
}
+/*! ZSTD_compress_usingCDict_advanced():
+ * This function is DEPRECATED.
+ */
+size_t ZSTD_compress_usingCDict_advanced(ZSTD_CCtx* cctx,
+ void* dst, size_t dstCapacity,
+ const void* src, size_t srcSize,
+ const ZSTD_CDict* cdict, ZSTD_frameParameters fParams)
+{
+ return ZSTD_compress_usingCDict_internal(cctx, dst, dstCapacity, src, srcSize, cdict, fParams);
+}
+
/*! ZSTD_compress_usingCDict() :
* Compression using a digested Dictionary.
* Faster startup than ZSTD_compress_usingDict(), recommended when same dictionary is used multiple times.
@@ -3941,7 +5095,7 @@ size_t ZSTD_compress_usingCDict(ZSTD_CCtx* cctx,
const ZSTD_CDict* cdict)
{
ZSTD_frameParameters const fParams = { 1 /*content*/, 0 /*checksum*/, 0 /*noDictID*/ };
- return ZSTD_compress_usingCDict_advanced(cctx, dst, dstCapacity, src, srcSize, cdict, fParams);
+ return ZSTD_compress_usingCDict_internal(cctx, dst, dstCapacity, src, srcSize, cdict, fParams);
}
@@ -4071,7 +5225,7 @@ size_t ZSTD_initCStream_advanced(ZSTD_CStream* zcs,
FORWARD_IF_ERROR( ZSTD_CCtx_reset(zcs, ZSTD_reset_session_only) , "");
FORWARD_IF_ERROR( ZSTD_CCtx_setPledgedSrcSize(zcs, pledgedSrcSize) , "");
FORWARD_IF_ERROR( ZSTD_checkCParams(params.cParams) , "");
- zcs->requestedParams = ZSTD_assignParamsToCCtxParams(&zcs->requestedParams, &params);
+ ZSTD_CCtxParams_setZstdParams(&zcs->requestedParams, &params);
FORWARD_IF_ERROR( ZSTD_CCtx_loadDictionary(zcs, dict, dictSize) , "");
return 0;
}
@@ -4351,8 +5505,13 @@ static size_t ZSTD_CCtx_init_compressStream2(ZSTD_CCtx* cctx,
FORWARD_IF_ERROR( ZSTD_initLocalDict(cctx) , ""); /* Init the local dict if present. */
ZSTD_memset(&cctx->prefixDict, 0, sizeof(cctx->prefixDict)); /* single usage */
assert(prefixDict.dict==NULL || cctx->cdict==NULL); /* only one can be set */
- if (cctx->cdict)
- params.compressionLevel = cctx->cdict->compressionLevel; /* let cdict take priority in terms of compression level */
+ if (cctx->cdict && !cctx->localDict.cdict) {
+ /* Let the cdict's compression level take priority over the requested params.
+ * But do not take the cdict's compression level if the "cdict" is actually a localDict
+ * generated from ZSTD_initLocalDict().
+ */
+ params.compressionLevel = cctx->cdict->compressionLevel;
+ }
DEBUGLOG(4, "ZSTD_compressStream2 : transparent init stage");
if (endOp == ZSTD_e_end) cctx->pledgedSrcSizePlusOne = inSize + 1; /* auto-fix pledgedSrcSize */
{
@@ -4371,11 +5530,21 @@ static size_t ZSTD_CCtx_init_compressStream2(ZSTD_CCtx* cctx,
params.ldmParams.enableLdm = 1;
}
+ if (ZSTD_CParams_useBlockSplitter(&params.cParams)) {
+ DEBUGLOG(4, "Block splitter enabled by default (window size >= 128K, strategy >= btopt)");
+ params.splitBlocks = 1;
+ }
+
+ params.useRowMatchFinder = ZSTD_resolveRowMatchFinderMode(params.useRowMatchFinder, &params.cParams);
+
#ifdef ZSTD_MULTITHREAD
if ((cctx->pledgedSrcSizePlusOne-1) <= ZSTDMT_JOBSIZE_MIN) {
params.nbWorkers = 0; /* do not invoke multi-threading when src size is too small */
}
if (params.nbWorkers > 0) {
+#if ZSTD_TRACE
+ cctx->traceCtx = (ZSTD_trace_compress_begin != NULL) ? ZSTD_trace_compress_begin(cctx) : 0;
+#endif
/* mt context creation */
if (cctx->mtctx == NULL) {
DEBUGLOG(4, "ZSTD_compressStream2: creating new mtctx for nbWorkers=%u",
@@ -4389,6 +5558,10 @@ static size_t ZSTD_CCtx_init_compressStream2(ZSTD_CCtx* cctx,
cctx->mtctx,
prefixDict.dict, prefixDict.dictSize, prefixDict.dictContentType,
cctx->cdict, params, cctx->pledgedSrcSizePlusOne-1) , "");
+ cctx->dictID = cctx->cdict ? cctx->cdict->dictID : 0;
+ cctx->dictContentSize = cctx->cdict ? cctx->cdict->dictContentSize : prefixDict.dictSize;
+ cctx->consumedSrcSize = 0;
+ cctx->producedCSize = 0;
cctx->streamStage = zcss_load;
cctx->appliedParams = params;
} else
@@ -4450,8 +5623,12 @@ size_t ZSTD_compressStream2( ZSTD_CCtx* cctx,
size_t const ipos = input->pos;
size_t const opos = output->pos;
flushMin = ZSTDMT_compressStream_generic(cctx->mtctx, output, input, endOp);
+ cctx->consumedSrcSize += (U64)(input->pos - ipos);
+ cctx->producedCSize += (U64)(output->pos - opos);
if ( ZSTD_isError(flushMin)
|| (endOp == ZSTD_e_end && flushMin == 0) ) { /* compression completed */
+ if (flushMin == 0)
+ ZSTD_CCtx_trace(cctx, 0);
ZSTD_CCtx_reset(cctx, ZSTD_reset_session_only);
}
FORWARD_IF_ERROR(flushMin, "ZSTDMT_compressStream_generic failed");
@@ -4834,7 +6011,7 @@ static size_t ZSTD_compressSequences_internal(ZSTD_CCtx* cctx,
continue;
}
- compressedSeqsSize = ZSTD_entropyCompressSequences(&cctx->seqStore,
+ compressedSeqsSize = ZSTD_entropyCompressSeqStore(&cctx->seqStore,
&cctx->blockState.prevCBlock->entropy, &cctx->blockState.nextCBlock->entropy,
&cctx->appliedParams,
op + ZSTD_blockHeaderSize /* Leave space for block header */, dstCapacity - ZSTD_blockHeaderSize,
@@ -4866,7 +6043,7 @@ static size_t ZSTD_compressSequences_internal(ZSTD_CCtx* cctx,
} else {
U32 cBlockHeader;
/* Error checking and repcodes update */
- ZSTD_confirmRepcodesAndEntropyTables(cctx);
+ ZSTD_blockState_confirmRepcodesAndEntropyTables(&cctx->blockState);
if (cctx->blockState.prevCBlock->entropy.fse.offcode_repeatMode == FSE_repeat_valid)
cctx->blockState.prevCBlock->entropy.fse.offcode_repeatMode = FSE_repeat_check;
@@ -4967,6 +6144,7 @@ size_t ZSTD_endStream(ZSTD_CStream* zcs, ZSTD_outBuffer* output)
#define ZSTD_MAX_CLEVEL 22
int ZSTD_maxCLevel(void) { return ZSTD_MAX_CLEVEL; }
int ZSTD_minCLevel(void) { return (int)-ZSTD_TARGETLENGTH_MAX; }
+int ZSTD_defaultCLevel(void) { return ZSTD_CLEVEL_DEFAULT; }
static const ZSTD_compressionParameters ZSTD_defaultCParameters[4][ZSTD_MAX_CLEVEL+1] = {
{ /* "default" - for any srcSize > 256 KB */
@@ -5099,7 +6277,10 @@ static ZSTD_compressionParameters ZSTD_dedicatedDictSearch_getCParams(int const
static int ZSTD_dedicatedDictSearch_isSupported(
ZSTD_compressionParameters const* cParams)
{
- return (cParams->strategy >= ZSTD_greedy) && (cParams->strategy <= ZSTD_lazy2);
+ return (cParams->strategy >= ZSTD_greedy)
+ && (cParams->strategy <= ZSTD_lazy2)
+ && (cParams->hashLog > cParams->chainLog)
+ && (cParams->chainLog <= 24);
}
/**
@@ -5117,6 +6298,9 @@ static void ZSTD_dedicatedDictSearch_revertCParams(
case ZSTD_lazy:
case ZSTD_lazy2:
cParams->hashLog -= ZSTD_LAZY_DDSS_BUCKET_LOG;
+ if (cParams->hashLog < ZSTD_HASHLOG_MIN) {
+ cParams->hashLog = ZSTD_HASHLOG_MIN;
+ }
break;
case ZSTD_btlazy2:
case ZSTD_btopt:
@@ -5165,6 +6349,7 @@ static ZSTD_compressionParameters ZSTD_getCParams_internal(int compressionLevel,
else row = compressionLevel;
{ ZSTD_compressionParameters cp = ZSTD_defaultCParameters[tableID][row];
+ DEBUGLOG(5, "ZSTD_getCParams_internal selected tableID: %u row: %u strat: %u", tableID, row, (U32)cp.strategy);
/* acceleration factor */
if (compressionLevel < 0) {
int const clampedCompressionLevel = MAX(ZSTD_minCLevel(), compressionLevel);
diff --git a/thirdparty/zstd/compress/zstd_compress_internal.h b/thirdparty/zstd/compress/zstd_compress_internal.h
index c04998b8b1..3b04fd09f6 100644
--- a/thirdparty/zstd/compress/zstd_compress_internal.h
+++ b/thirdparty/zstd/compress/zstd_compress_internal.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
@@ -81,6 +81,53 @@ typedef struct {
ZSTD_fseCTables_t fse;
} ZSTD_entropyCTables_t;
+/***********************************************
+* Entropy buffer statistics structs and funcs *
+***********************************************/
+/** ZSTD_hufCTablesMetadata_t :
+ * Stores Literals Block Type for a super-block in hType, and
+ * huffman tree description in hufDesBuffer.
+ * hufDesSize refers to the size of huffman tree description in bytes.
+ * This metadata is populated in ZSTD_buildBlockEntropyStats_literals() */
+typedef struct {
+ symbolEncodingType_e hType;
+ BYTE hufDesBuffer[ZSTD_MAX_HUF_HEADER_SIZE];
+ size_t hufDesSize;
+} ZSTD_hufCTablesMetadata_t;
+
+/** ZSTD_fseCTablesMetadata_t :
+ * Stores symbol compression modes for a super-block in {ll, ol, ml}Type, and
+ * fse tables in fseTablesBuffer.
+ * fseTablesSize refers to the size of fse tables in bytes.
+ * This metadata is populated in ZSTD_buildBlockEntropyStats_sequences() */
+typedef struct {
+ symbolEncodingType_e llType;
+ symbolEncodingType_e ofType;
+ symbolEncodingType_e mlType;
+ BYTE fseTablesBuffer[ZSTD_MAX_FSE_HEADERS_SIZE];
+ size_t fseTablesSize;
+ size_t lastCountSize; /* This is to account for bug in 1.3.4. More detail in ZSTD_entropyCompressSeqStore_internal() */
+} ZSTD_fseCTablesMetadata_t;
+
+typedef struct {
+ ZSTD_hufCTablesMetadata_t hufMetadata;
+ ZSTD_fseCTablesMetadata_t fseMetadata;
+} ZSTD_entropyCTablesMetadata_t;
+
+/** ZSTD_buildBlockEntropyStats() :
+ * Builds entropy for the block.
+ * @return : 0 on success or error code */
+size_t ZSTD_buildBlockEntropyStats(seqStore_t* seqStorePtr,
+ const ZSTD_entropyCTables_t* prevEntropy,
+ ZSTD_entropyCTables_t* nextEntropy,
+ const ZSTD_CCtx_params* cctxParams,
+ ZSTD_entropyCTablesMetadata_t* entropyMetadata,
+ void* workspace, size_t wkspSize);
+
+/*********************************
+* Compression internals structs *
+*********************************/
+
typedef struct {
U32 off; /* Offset code (offset + ZSTD_REP_MOVE) for the match */
U32 len; /* Raw length of match */
@@ -141,14 +188,21 @@ typedef struct {
} ZSTD_compressedBlockState_t;
typedef struct {
- BYTE const* nextSrc; /* next block here to continue on current prefix */
- BYTE const* base; /* All regular indexes relative to this position */
- BYTE const* dictBase; /* extDict indexes relative to this position */
- U32 dictLimit; /* below that point, need extDict */
- U32 lowLimit; /* below that point, no more valid data */
+ BYTE const* nextSrc; /* next block here to continue on current prefix */
+ BYTE const* base; /* All regular indexes relative to this position */
+ BYTE const* dictBase; /* extDict indexes relative to this position */
+ U32 dictLimit; /* below that point, need extDict */
+ U32 lowLimit; /* below that point, no more valid data */
+ U32 nbOverflowCorrections; /* Number of times overflow correction has run since
+ * ZSTD_window_init(). Useful for debugging coredumps
+ * and for ZSTD_WINDOW_OVERFLOW_CORRECT_FREQUENTLY.
+ */
} ZSTD_window_t;
typedef struct ZSTD_matchState_t ZSTD_matchState_t;
+
+#define ZSTD_ROW_HASH_CACHE_SIZE 8 /* Size of prefetching hash cache for row-based matchfinder */
+
struct ZSTD_matchState_t {
ZSTD_window_t window; /* State for window round buffer management */
U32 loadedDictEnd; /* index of end of dictionary, within context's referential.
@@ -160,9 +214,17 @@ struct ZSTD_matchState_t {
*/
U32 nextToUpdate; /* index from which to continue table update */
U32 hashLog3; /* dispatch table for matches of len==3 : larger == faster, more memory */
+
+ U32 rowHashLog; /* For row-based matchfinder: Hashlog based on nb of rows in the hashTable.*/
+ U16* tagTable; /* For row-based matchFinder: A row-based table containing the hashes and head index. */
+ U32 hashCache[ZSTD_ROW_HASH_CACHE_SIZE]; /* For row-based matchFinder: a cache of hashes to improve speed */
+
U32* hashTable;
U32* hashTable3;
U32* chainTable;
+
+ U32 forceNonContiguous; /* Non-zero if we should force non-contiguous load for the next window update. */
+
int dedicatedDictSearch; /* Indicates whether this matchState is using the
* dedicated dictionary search structure.
*/
@@ -184,12 +246,21 @@ typedef struct {
} ldmEntry_t;
typedef struct {
+ BYTE const* split;
+ U32 hash;
+ U32 checksum;
+ ldmEntry_t* bucket;
+} ldmMatchCandidate_t;
+
+#define LDM_BATCH_SIZE 64
+
+typedef struct {
ZSTD_window_t window; /* State for the window round buffer management */
ldmEntry_t* hashTable;
U32 loadedDictEnd;
BYTE* bucketOffsets; /* Next position in bucket to insert entry */
- U64 hashPower; /* Used to compute the rolling hash.
- * Depends on ldmParams.minMatchLength */
+ size_t splitIndices[LDM_BATCH_SIZE];
+ ldmMatchCandidate_t matchCandidates[LDM_BATCH_SIZE];
} ldmState_t;
typedef struct {
@@ -246,6 +317,15 @@ struct ZSTD_CCtx_params_s {
ZSTD_sequenceFormat_e blockDelimiters;
int validateSequences;
+ /* Block splitting */
+ int splitBlocks;
+
+ /* Param for deciding whether to use row-based matchfinder */
+ ZSTD_useRowMatchFinderMode_e useRowMatchFinder;
+
+ /* Always load a dictionary in ext-dict mode (not prefix mode)? */
+ int deterministicRefPrefix;
+
/* Internal use, for createCCtxParams() and freeCCtxParams() only */
ZSTD_customMem customMem;
}; /* typedef'd to ZSTD_CCtx_params within "zstd.h" */
@@ -269,7 +349,9 @@ struct ZSTD_CCtx_s {
int bmi2; /* == 1 if the CPU supports BMI2 and 0 otherwise. CPU support is determined dynamically once per context lifetime. */
ZSTD_CCtx_params requestedParams;
ZSTD_CCtx_params appliedParams;
+ ZSTD_CCtx_params simpleApiParams; /* Param storage used by the simple API - not sticky. Must only be used in top-level simple API functions for storage. */
U32 dictID;
+ size_t dictContentSize;
ZSTD_cwksp workspace; /* manages buffer for dynamic allocations */
size_t blockSize;
@@ -321,6 +403,11 @@ struct ZSTD_CCtx_s {
#ifdef ZSTD_MULTITHREAD
ZSTDMT_CCtx* mtctx;
#endif
+
+ /* Tracing */
+#if ZSTD_TRACE
+ ZSTD_TraceCtx traceCtx;
+#endif
};
typedef enum { ZSTD_dtlm_fast, ZSTD_dtlm_full } ZSTD_dictTableLoadMethod_e;
@@ -355,7 +442,7 @@ typedef enum {
typedef size_t (*ZSTD_blockCompressor) (
ZSTD_matchState_t* bs, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
void const* src, size_t srcSize);
-ZSTD_blockCompressor ZSTD_selectBlockCompressor(ZSTD_strategy strat, ZSTD_dictMode_e dictMode);
+ZSTD_blockCompressor ZSTD_selectBlockCompressor(ZSTD_strategy strat, ZSTD_useRowMatchFinderMode_e rowMatchfinderMode, ZSTD_dictMode_e dictMode);
MEM_STATIC U32 ZSTD_LLcode(U32 litLength)
@@ -532,8 +619,8 @@ void ZSTD_storeSeq(seqStore_t* seqStorePtr, size_t litLength, const BYTE* litera
/* literal Length */
if (litLength>0xFFFF) {
- assert(seqStorePtr->longLengthID == 0); /* there can only be a single long length */
- seqStorePtr->longLengthID = 1;
+ assert(seqStorePtr->longLengthType == ZSTD_llt_none); /* there can only be a single long length */
+ seqStorePtr->longLengthType = ZSTD_llt_literalLength;
seqStorePtr->longLengthPos = (U32)(seqStorePtr->sequences - seqStorePtr->sequencesStart);
}
seqStorePtr->sequences[0].litLength = (U16)litLength;
@@ -543,8 +630,8 @@ void ZSTD_storeSeq(seqStore_t* seqStorePtr, size_t litLength, const BYTE* litera
/* match Length */
if (mlBase>0xFFFF) {
- assert(seqStorePtr->longLengthID == 0); /* there can only be a single long length */
- seqStorePtr->longLengthID = 2;
+ assert(seqStorePtr->longLengthType == ZSTD_llt_none); /* there can only be a single long length */
+ seqStorePtr->longLengthType = ZSTD_llt_matchLength;
seqStorePtr->longLengthPos = (U32)(seqStorePtr->sequences - seqStorePtr->sequencesStart);
}
seqStorePtr->sequences[0].matchLength = (U16)mlBase;
@@ -795,6 +882,13 @@ MEM_STATIC void ZSTD_window_clear(ZSTD_window_t* window)
window->dictLimit = end;
}
+MEM_STATIC U32 ZSTD_window_isEmpty(ZSTD_window_t const window)
+{
+ return window.dictLimit == 1 &&
+ window.lowLimit == 1 &&
+ (window.nextSrc - window.base) == 1;
+}
+
/**
* ZSTD_window_hasExtDict():
* Returns non-zero if the window has a non-empty extDict.
@@ -818,15 +912,69 @@ MEM_STATIC ZSTD_dictMode_e ZSTD_matchState_dictMode(const ZSTD_matchState_t *ms)
ZSTD_noDict;
}
+/* Defining this macro to non-zero tells zstd to run the overflow correction
+ * code much more frequently. This is very inefficient, and should only be
+ * used for tests and fuzzers.
+ */
+#ifndef ZSTD_WINDOW_OVERFLOW_CORRECT_FREQUENTLY
+# ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
+# define ZSTD_WINDOW_OVERFLOW_CORRECT_FREQUENTLY 1
+# else
+# define ZSTD_WINDOW_OVERFLOW_CORRECT_FREQUENTLY 0
+# endif
+#endif
+
+/**
+ * ZSTD_window_canOverflowCorrect():
+ * Returns non-zero if the indices are large enough for overflow correction
+ * to work correctly without impacting compression ratio.
+ */
+MEM_STATIC U32 ZSTD_window_canOverflowCorrect(ZSTD_window_t const window,
+ U32 cycleLog,
+ U32 maxDist,
+ U32 loadedDictEnd,
+ void const* src)
+{
+ U32 const cycleSize = 1u << cycleLog;
+ U32 const curr = (U32)((BYTE const*)src - window.base);
+ U32 const minIndexToOverflowCorrect = cycleSize + MAX(maxDist, cycleSize);
+
+ /* Adjust the min index to backoff the overflow correction frequency,
+ * so we don't waste too much CPU in overflow correction. If this
+ * computation overflows we don't really care, we just need to make
+ * sure it is at least minIndexToOverflowCorrect.
+ */
+ U32 const adjustment = window.nbOverflowCorrections + 1;
+ U32 const adjustedIndex = MAX(minIndexToOverflowCorrect * adjustment,
+ minIndexToOverflowCorrect);
+ U32 const indexLargeEnough = curr > adjustedIndex;
+
+ /* Only overflow correct early if the dictionary is invalidated already,
+ * so we don't hurt compression ratio.
+ */
+ U32 const dictionaryInvalidated = curr > maxDist + loadedDictEnd;
+
+ return indexLargeEnough && dictionaryInvalidated;
+}
+
/**
* ZSTD_window_needOverflowCorrection():
* Returns non-zero if the indices are getting too large and need overflow
* protection.
*/
MEM_STATIC U32 ZSTD_window_needOverflowCorrection(ZSTD_window_t const window,
+ U32 cycleLog,
+ U32 maxDist,
+ U32 loadedDictEnd,
+ void const* src,
void const* srcEnd)
{
U32 const curr = (U32)((BYTE const*)srcEnd - window.base);
+ if (ZSTD_WINDOW_OVERFLOW_CORRECT_FREQUENTLY) {
+ if (ZSTD_window_canOverflowCorrect(window, cycleLog, maxDist, loadedDictEnd, src)) {
+ return 1;
+ }
+ }
return curr > ZSTD_CURRENT_MAX;
}
@@ -838,7 +986,6 @@ MEM_STATIC U32 ZSTD_window_needOverflowCorrection(ZSTD_window_t const window,
*
* The least significant cycleLog bits of the indices must remain the same,
* which may be 0. Every index up to maxDist in the past must be valid.
- * NOTE: (maxDist & cycleMask) must be zero.
*/
MEM_STATIC U32 ZSTD_window_correctOverflow(ZSTD_window_t* window, U32 cycleLog,
U32 maxDist, void const* src)
@@ -862,17 +1009,25 @@ MEM_STATIC U32 ZSTD_window_correctOverflow(ZSTD_window_t* window, U32 cycleLog,
* 3. (cctx->lowLimit + 1<<windowLog) < 1<<32:
* windowLog <= 31 ==> 3<<29 + 1<<windowLog < 7<<29 < 1<<32.
*/
- U32 const cycleMask = (1U << cycleLog) - 1;
+ U32 const cycleSize = 1u << cycleLog;
+ U32 const cycleMask = cycleSize - 1;
U32 const curr = (U32)((BYTE const*)src - window->base);
U32 const currentCycle0 = curr & cycleMask;
/* Exclude zero so that newCurrent - maxDist >= 1. */
- U32 const currentCycle1 = currentCycle0 == 0 ? (1U << cycleLog) : currentCycle0;
- U32 const newCurrent = currentCycle1 + maxDist;
+ U32 const currentCycle1 = currentCycle0 == 0 ? cycleSize : currentCycle0;
+ U32 const newCurrent = currentCycle1 + MAX(maxDist, cycleSize);
U32 const correction = curr - newCurrent;
- assert((maxDist & cycleMask) == 0);
+ /* maxDist must be a power of two so that:
+ * (newCurrent & cycleMask) == (curr & cycleMask)
+ * This is required to not corrupt the chains / binary tree.
+ */
+ assert((maxDist & (maxDist - 1)) == 0);
+ assert((curr & cycleMask) == (newCurrent & cycleMask));
assert(curr > newCurrent);
- /* Loose bound, should be around 1<<29 (see above) */
- assert(correction > 1<<28);
+ if (!ZSTD_WINDOW_OVERFLOW_CORRECT_FREQUENTLY) {
+ /* Loose bound, should be around 1<<29 (see above) */
+ assert(correction > 1<<28);
+ }
window->base += correction;
window->dictBase += correction;
@@ -888,6 +1043,8 @@ MEM_STATIC U32 ZSTD_window_correctOverflow(ZSTD_window_t* window, U32 cycleLog,
assert(window->lowLimit <= newCurrent);
assert(window->dictLimit <= newCurrent);
+ ++window->nbOverflowCorrections;
+
DEBUGLOG(4, "Correction of 0x%x bytes to lowLimit=0x%x", correction,
window->lowLimit);
return correction;
@@ -997,6 +1154,7 @@ MEM_STATIC void ZSTD_window_init(ZSTD_window_t* window) {
window->dictLimit = 1; /* start from 1, so that 1st position is valid */
window->lowLimit = 1; /* it ensures first and later CCtx usages compress the same */
window->nextSrc = window->base + 1; /* see issue #1241 */
+ window->nbOverflowCorrections = 0;
}
/**
@@ -1007,7 +1165,8 @@ MEM_STATIC void ZSTD_window_init(ZSTD_window_t* window) {
* Returns non-zero if the segment is contiguous.
*/
MEM_STATIC U32 ZSTD_window_update(ZSTD_window_t* window,
- void const* src, size_t srcSize)
+ void const* src, size_t srcSize,
+ int forceNonContiguous)
{
BYTE const* const ip = (BYTE const*)src;
U32 contiguous = 1;
@@ -1017,7 +1176,7 @@ MEM_STATIC U32 ZSTD_window_update(ZSTD_window_t* window,
assert(window->base != NULL);
assert(window->dictBase != NULL);
/* Check if blocks follow each other */
- if (src != window->nextSrc) {
+ if (src != window->nextSrc || forceNonContiguous) {
/* not contiguous */
size_t const distanceFromBase = (size_t)(window->nextSrc - window->base);
DEBUGLOG(5, "Non contiguous blocks, new segment starts at %u", window->dictLimit);
@@ -1200,4 +1359,9 @@ size_t ZSTD_referenceExternalSequences(ZSTD_CCtx* cctx, rawSeq* seq, size_t nbSe
* condition for correct operation : hashLog > 1 */
U32 ZSTD_cycleLog(U32 hashLog, ZSTD_strategy strat);
+/** ZSTD_CCtx_trace() :
+ * Trace the end of a compression call.
+ */
+void ZSTD_CCtx_trace(ZSTD_CCtx* cctx, size_t extraCSize);
+
#endif /* ZSTD_COMPRESS_H */
diff --git a/thirdparty/zstd/compress/zstd_compress_literals.c b/thirdparty/zstd/compress/zstd_compress_literals.c
index 6dd1c1447a..008337bb1b 100644
--- a/thirdparty/zstd/compress/zstd_compress_literals.c
+++ b/thirdparty/zstd/compress/zstd_compress_literals.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
@@ -15,7 +15,7 @@
size_t ZSTD_noCompressLiterals (void* dst, size_t dstCapacity, const void* src, size_t srcSize)
{
- BYTE* const ostart = (BYTE* const)dst;
+ BYTE* const ostart = (BYTE*)dst;
U32 const flSize = 1 + (srcSize>31) + (srcSize>4095);
RETURN_ERROR_IF(srcSize + flSize > dstCapacity, dstSize_tooSmall, "");
@@ -42,7 +42,7 @@ size_t ZSTD_noCompressLiterals (void* dst, size_t dstCapacity, const void* src,
size_t ZSTD_compressRleLiteralsBlock (void* dst, size_t dstCapacity, const void* src, size_t srcSize)
{
- BYTE* const ostart = (BYTE* const)dst;
+ BYTE* const ostart = (BYTE*)dst;
U32 const flSize = 1 + (srcSize>31) + (srcSize>4095);
(void)dstCapacity; /* dstCapacity already guaranteed to be >=4, hence large enough */
@@ -117,7 +117,7 @@ size_t ZSTD_compressLiterals (ZSTD_hufCTables_t const* prevHuf,
}
}
- if ((cLitSize==0) | (cLitSize >= srcSize - minGain) | ERR_isError(cLitSize)) {
+ if ((cLitSize==0) || (cLitSize >= srcSize - minGain) || ERR_isError(cLitSize)) {
ZSTD_memcpy(nextHuf, prevHuf, sizeof(*prevHuf));
return ZSTD_noCompressLiterals(dst, dstCapacity, src, srcSize);
}
diff --git a/thirdparty/zstd/compress/zstd_compress_literals.h b/thirdparty/zstd/compress/zstd_compress_literals.h
index 8b08705743..9904c0cd30 100644
--- a/thirdparty/zstd/compress/zstd_compress_literals.h
+++ b/thirdparty/zstd/compress/zstd_compress_literals.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
diff --git a/thirdparty/zstd/compress/zstd_compress_sequences.c b/thirdparty/zstd/compress/zstd_compress_sequences.c
index be30c08c6b..611eabdcbb 100644
--- a/thirdparty/zstd/compress/zstd_compress_sequences.c
+++ b/thirdparty/zstd/compress/zstd_compress_sequences.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
@@ -85,6 +85,8 @@ static size_t ZSTD_entropyCost(unsigned const* count, unsigned const max, size_t
{
unsigned cost = 0;
unsigned s;
+
+ assert(total > 0);
for (s = 0; s <= max; ++s) {
unsigned norm = (unsigned)((256 * count[s]) / total);
if (count[s] != 0 && norm == 0)
@@ -232,6 +234,11 @@ ZSTD_selectEncodingType(
return set_compressed;
}
+typedef struct {
+ S16 norm[MaxSeq + 1];
+ U32 wksp[FSE_BUILD_CTABLE_WORKSPACE_SIZE_U32(MaxSeq, MaxFSELog)];
+} ZSTD_BuildCTableWksp;
+
size_t
ZSTD_buildCTable(void* dst, size_t dstCapacity,
FSE_CTable* nextCTable, U32 FSELog, symbolEncodingType_e type,
@@ -258,7 +265,7 @@ ZSTD_buildCTable(void* dst, size_t dstCapacity,
FORWARD_IF_ERROR(FSE_buildCTable_wksp(nextCTable, defaultNorm, defaultMax, defaultNormLog, entropyWorkspace, entropyWorkspaceSize), ""); /* note : could be pre-calculated */
return 0;
case set_compressed: {
- S16 norm[MaxSeq + 1];
+ ZSTD_BuildCTableWksp* wksp = (ZSTD_BuildCTableWksp*)entropyWorkspace;
size_t nbSeq_1 = nbSeq;
const U32 tableLog = FSE_optimalTableLog(FSELog, nbSeq, max);
if (count[codeTable[nbSeq-1]] > 1) {
@@ -266,11 +273,12 @@ ZSTD_buildCTable(void* dst, size_t dstCapacity,
nbSeq_1--;
}
assert(nbSeq_1 > 1);
- assert(entropyWorkspaceSize >= FSE_BUILD_CTABLE_WORKSPACE_SIZE(MaxSeq, MaxFSELog));
- FORWARD_IF_ERROR(FSE_normalizeCount(norm, tableLog, count, nbSeq_1, max, ZSTD_useLowProbCount(nbSeq_1)), "");
- { size_t const NCountSize = FSE_writeNCount(op, oend - op, norm, max, tableLog); /* overflow protected */
+ assert(entropyWorkspaceSize >= sizeof(ZSTD_BuildCTableWksp));
+ (void)entropyWorkspaceSize;
+ FORWARD_IF_ERROR(FSE_normalizeCount(wksp->norm, tableLog, count, nbSeq_1, max, ZSTD_useLowProbCount(nbSeq_1)), "");
+ { size_t const NCountSize = FSE_writeNCount(op, oend - op, wksp->norm, max, tableLog); /* overflow protected */
FORWARD_IF_ERROR(NCountSize, "FSE_writeNCount failed");
- FORWARD_IF_ERROR(FSE_buildCTable_wksp(nextCTable, norm, max, tableLog, entropyWorkspace, entropyWorkspaceSize), "");
+ FORWARD_IF_ERROR(FSE_buildCTable_wksp(nextCTable, wksp->norm, max, tableLog, wksp->wksp, sizeof(wksp->wksp)), "");
return NCountSize;
}
}
diff --git a/thirdparty/zstd/compress/zstd_compress_sequences.h b/thirdparty/zstd/compress/zstd_compress_sequences.h
index 68c6f9a5ac..7991364c2f 100644
--- a/thirdparty/zstd/compress/zstd_compress_sequences.h
+++ b/thirdparty/zstd/compress/zstd_compress_sequences.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
diff --git a/thirdparty/zstd/compress/zstd_compress_superblock.c b/thirdparty/zstd/compress/zstd_compress_superblock.c
index e23e619eef..e4e45069bc 100644
--- a/thirdparty/zstd/compress/zstd_compress_superblock.c
+++ b/thirdparty/zstd/compress/zstd_compress_superblock.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
@@ -15,288 +15,10 @@
#include "../common/zstd_internal.h" /* ZSTD_getSequenceLength */
#include "hist.h" /* HIST_countFast_wksp */
-#include "zstd_compress_internal.h"
+#include "zstd_compress_internal.h" /* ZSTD_[huf|fse|entropy]CTablesMetadata_t */
#include "zstd_compress_sequences.h"
#include "zstd_compress_literals.h"
-/*-*************************************
-* Superblock entropy buffer structs
-***************************************/
-/** ZSTD_hufCTablesMetadata_t :
- * Stores Literals Block Type for a super-block in hType, and
- * huffman tree description in hufDesBuffer.
- * hufDesSize refers to the size of huffman tree description in bytes.
- * This metadata is populated in ZSTD_buildSuperBlockEntropy_literal() */
-typedef struct {
- symbolEncodingType_e hType;
- BYTE hufDesBuffer[ZSTD_MAX_HUF_HEADER_SIZE];
- size_t hufDesSize;
-} ZSTD_hufCTablesMetadata_t;
-
-/** ZSTD_fseCTablesMetadata_t :
- * Stores symbol compression modes for a super-block in {ll, ol, ml}Type, and
- * fse tables in fseTablesBuffer.
- * fseTablesSize refers to the size of fse tables in bytes.
- * This metadata is populated in ZSTD_buildSuperBlockEntropy_sequences() */
-typedef struct {
- symbolEncodingType_e llType;
- symbolEncodingType_e ofType;
- symbolEncodingType_e mlType;
- BYTE fseTablesBuffer[ZSTD_MAX_FSE_HEADERS_SIZE];
- size_t fseTablesSize;
- size_t lastCountSize; /* This is to account for bug in 1.3.4. More detail in ZSTD_compressSubBlock_sequences() */
-} ZSTD_fseCTablesMetadata_t;
-
-typedef struct {
- ZSTD_hufCTablesMetadata_t hufMetadata;
- ZSTD_fseCTablesMetadata_t fseMetadata;
-} ZSTD_entropyCTablesMetadata_t;
-
-
-/** ZSTD_buildSuperBlockEntropy_literal() :
- * Builds entropy for the super-block literals.
- * Stores literals block type (raw, rle, compressed, repeat) and
- * huffman description table to hufMetadata.
- * @return : size of huffman description table or error code */
-static size_t ZSTD_buildSuperBlockEntropy_literal(void* const src, size_t srcSize,
- const ZSTD_hufCTables_t* prevHuf,
- ZSTD_hufCTables_t* nextHuf,
- ZSTD_hufCTablesMetadata_t* hufMetadata,
- const int disableLiteralsCompression,
- void* workspace, size_t wkspSize)
-{
- BYTE* const wkspStart = (BYTE*)workspace;
- BYTE* const wkspEnd = wkspStart + wkspSize;
- BYTE* const countWkspStart = wkspStart;
- unsigned* const countWksp = (unsigned*)workspace;
- const size_t countWkspSize = (HUF_SYMBOLVALUE_MAX + 1) * sizeof(unsigned);
- BYTE* const nodeWksp = countWkspStart + countWkspSize;
- const size_t nodeWkspSize = wkspEnd-nodeWksp;
- unsigned maxSymbolValue = 255;
- unsigned huffLog = HUF_TABLELOG_DEFAULT;
- HUF_repeat repeat = prevHuf->repeatMode;
-
- DEBUGLOG(5, "ZSTD_buildSuperBlockEntropy_literal (srcSize=%zu)", srcSize);
-
- /* Prepare nextEntropy assuming reusing the existing table */
- ZSTD_memcpy(nextHuf, prevHuf, sizeof(*prevHuf));
-
- if (disableLiteralsCompression) {
- DEBUGLOG(5, "set_basic - disabled");
- hufMetadata->hType = set_basic;
- return 0;
- }
-
- /* small ? don't even attempt compression (speed opt) */
-# define COMPRESS_LITERALS_SIZE_MIN 63
- { size_t const minLitSize = (prevHuf->repeatMode == HUF_repeat_valid) ? 6 : COMPRESS_LITERALS_SIZE_MIN;
- if (srcSize <= minLitSize) {
- DEBUGLOG(5, "set_basic - too small");
- hufMetadata->hType = set_basic;
- return 0;
- }
- }
-
- /* Scan input and build symbol stats */
- { size_t const largest = HIST_count_wksp (countWksp, &maxSymbolValue, (const BYTE*)src, srcSize, workspace, wkspSize);
- FORWARD_IF_ERROR(largest, "HIST_count_wksp failed");
- if (largest == srcSize) {
- DEBUGLOG(5, "set_rle");
- hufMetadata->hType = set_rle;
- return 0;
- }
- if (largest <= (srcSize >> 7)+4) {
- DEBUGLOG(5, "set_basic - no gain");
- hufMetadata->hType = set_basic;
- return 0;
- }
- }
-
- /* Validate the previous Huffman table */
- if (repeat == HUF_repeat_check && !HUF_validateCTable((HUF_CElt const*)prevHuf->CTable, countWksp, maxSymbolValue)) {
- repeat = HUF_repeat_none;
- }
-
- /* Build Huffman Tree */
- ZSTD_memset(nextHuf->CTable, 0, sizeof(nextHuf->CTable));
- huffLog = HUF_optimalTableLog(huffLog, srcSize, maxSymbolValue);
- { size_t const maxBits = HUF_buildCTable_wksp((HUF_CElt*)nextHuf->CTable, countWksp,
- maxSymbolValue, huffLog,
- nodeWksp, nodeWkspSize);
- FORWARD_IF_ERROR(maxBits, "HUF_buildCTable_wksp");
- huffLog = (U32)maxBits;
- { /* Build and write the CTable */
- size_t const newCSize = HUF_estimateCompressedSize(
- (HUF_CElt*)nextHuf->CTable, countWksp, maxSymbolValue);
- size_t const hSize = HUF_writeCTable(
- hufMetadata->hufDesBuffer, sizeof(hufMetadata->hufDesBuffer),
- (HUF_CElt*)nextHuf->CTable, maxSymbolValue, huffLog);
- /* Check against repeating the previous CTable */
- if (repeat != HUF_repeat_none) {
- size_t const oldCSize = HUF_estimateCompressedSize(
- (HUF_CElt const*)prevHuf->CTable, countWksp, maxSymbolValue);
- if (oldCSize < srcSize && (oldCSize <= hSize + newCSize || hSize + 12 >= srcSize)) {
- DEBUGLOG(5, "set_repeat - smaller");
- ZSTD_memcpy(nextHuf, prevHuf, sizeof(*prevHuf));
- hufMetadata->hType = set_repeat;
- return 0;
- }
- }
- if (newCSize + hSize >= srcSize) {
- DEBUGLOG(5, "set_basic - no gains");
- ZSTD_memcpy(nextHuf, prevHuf, sizeof(*prevHuf));
- hufMetadata->hType = set_basic;
- return 0;
- }
- DEBUGLOG(5, "set_compressed (hSize=%u)", (U32)hSize);
- hufMetadata->hType = set_compressed;
- nextHuf->repeatMode = HUF_repeat_check;
- return hSize;
- }
- }
-}
-
-/** ZSTD_buildSuperBlockEntropy_sequences() :
- * Builds entropy for the super-block sequences.
- * Stores symbol compression modes and fse table to fseMetadata.
- * @return : size of fse tables or error code */
-static size_t ZSTD_buildSuperBlockEntropy_sequences(seqStore_t* seqStorePtr,
- const ZSTD_fseCTables_t* prevEntropy,
- ZSTD_fseCTables_t* nextEntropy,
- const ZSTD_CCtx_params* cctxParams,
- ZSTD_fseCTablesMetadata_t* fseMetadata,
- void* workspace, size_t wkspSize)
-{
- BYTE* const wkspStart = (BYTE*)workspace;
- BYTE* const wkspEnd = wkspStart + wkspSize;
- BYTE* const countWkspStart = wkspStart;
- unsigned* const countWksp = (unsigned*)workspace;
- const size_t countWkspSize = (MaxSeq + 1) * sizeof(unsigned);
- BYTE* const cTableWksp = countWkspStart + countWkspSize;
- const size_t cTableWkspSize = wkspEnd-cTableWksp;
- ZSTD_strategy const strategy = cctxParams->cParams.strategy;
- FSE_CTable* CTable_LitLength = nextEntropy->litlengthCTable;
- FSE_CTable* CTable_OffsetBits = nextEntropy->offcodeCTable;
- FSE_CTable* CTable_MatchLength = nextEntropy->matchlengthCTable;
- const BYTE* const ofCodeTable = seqStorePtr->ofCode;
- const BYTE* const llCodeTable = seqStorePtr->llCode;
- const BYTE* const mlCodeTable = seqStorePtr->mlCode;
- size_t const nbSeq = seqStorePtr->sequences - seqStorePtr->sequencesStart;
- BYTE* const ostart = fseMetadata->fseTablesBuffer;
- BYTE* const oend = ostart + sizeof(fseMetadata->fseTablesBuffer);
- BYTE* op = ostart;
-
- assert(cTableWkspSize >= (1 << MaxFSELog) * sizeof(FSE_FUNCTION_TYPE));
- DEBUGLOG(5, "ZSTD_buildSuperBlockEntropy_sequences (nbSeq=%zu)", nbSeq);
- ZSTD_memset(workspace, 0, wkspSize);
-
- fseMetadata->lastCountSize = 0;
- /* convert length/distances into codes */
- ZSTD_seqToCodes(seqStorePtr);
- /* build CTable for Literal Lengths */
- { U32 LLtype;
- unsigned max = MaxLL;
- size_t const mostFrequent = HIST_countFast_wksp(countWksp, &max, llCodeTable, nbSeq, workspace, wkspSize); /* can't fail */
- DEBUGLOG(5, "Building LL table");
- nextEntropy->litlength_repeatMode = prevEntropy->litlength_repeatMode;
- LLtype = ZSTD_selectEncodingType(&nextEntropy->litlength_repeatMode,
- countWksp, max, mostFrequent, nbSeq,
- LLFSELog, prevEntropy->litlengthCTable,
- LL_defaultNorm, LL_defaultNormLog,
- ZSTD_defaultAllowed, strategy);
- assert(set_basic < set_compressed && set_rle < set_compressed);
- assert(!(LLtype < set_compressed && nextEntropy->litlength_repeatMode != FSE_repeat_none)); /* We don't copy tables */
- { size_t const countSize = ZSTD_buildCTable(op, oend - op, CTable_LitLength, LLFSELog, (symbolEncodingType_e)LLtype,
- countWksp, max, llCodeTable, nbSeq, LL_defaultNorm, LL_defaultNormLog, MaxLL,
- prevEntropy->litlengthCTable, sizeof(prevEntropy->litlengthCTable),
- cTableWksp, cTableWkspSize);
- FORWARD_IF_ERROR(countSize, "ZSTD_buildCTable for LitLens failed");
- if (LLtype == set_compressed)
- fseMetadata->lastCountSize = countSize;
- op += countSize;
- fseMetadata->llType = (symbolEncodingType_e) LLtype;
- } }
- /* build CTable for Offsets */
- { U32 Offtype;
- unsigned max = MaxOff;
- size_t const mostFrequent = HIST_countFast_wksp(countWksp, &max, ofCodeTable, nbSeq, workspace, wkspSize); /* can't fail */
- /* We can only use the basic table if max <= DefaultMaxOff, otherwise the offsets are too large */
- ZSTD_defaultPolicy_e const defaultPolicy = (max <= DefaultMaxOff) ? ZSTD_defaultAllowed : ZSTD_defaultDisallowed;
- DEBUGLOG(5, "Building OF table");
- nextEntropy->offcode_repeatMode = prevEntropy->offcode_repeatMode;
- Offtype = ZSTD_selectEncodingType(&nextEntropy->offcode_repeatMode,
- countWksp, max, mostFrequent, nbSeq,
- OffFSELog, prevEntropy->offcodeCTable,
- OF_defaultNorm, OF_defaultNormLog,
- defaultPolicy, strategy);
- assert(!(Offtype < set_compressed && nextEntropy->offcode_repeatMode != FSE_repeat_none)); /* We don't copy tables */
- { size_t const countSize = ZSTD_buildCTable(op, oend - op, CTable_OffsetBits, OffFSELog, (symbolEncodingType_e)Offtype,
- countWksp, max, ofCodeTable, nbSeq, OF_defaultNorm, OF_defaultNormLog, DefaultMaxOff,
- prevEntropy->offcodeCTable, sizeof(prevEntropy->offcodeCTable),
- cTableWksp, cTableWkspSize);
- FORWARD_IF_ERROR(countSize, "ZSTD_buildCTable for Offsets failed");
- if (Offtype == set_compressed)
- fseMetadata->lastCountSize = countSize;
- op += countSize;
- fseMetadata->ofType = (symbolEncodingType_e) Offtype;
- } }
- /* build CTable for MatchLengths */
- { U32 MLtype;
- unsigned max = MaxML;
- size_t const mostFrequent = HIST_countFast_wksp(countWksp, &max, mlCodeTable, nbSeq, workspace, wkspSize); /* can't fail */
- DEBUGLOG(5, "Building ML table (remaining space : %i)", (int)(oend-op));
- nextEntropy->matchlength_repeatMode = prevEntropy->matchlength_repeatMode;
- MLtype = ZSTD_selectEncodingType(&nextEntropy->matchlength_repeatMode,
- countWksp, max, mostFrequent, nbSeq,
- MLFSELog, prevEntropy->matchlengthCTable,
- ML_defaultNorm, ML_defaultNormLog,
- ZSTD_defaultAllowed, strategy);
- assert(!(MLtype < set_compressed && nextEntropy->matchlength_repeatMode != FSE_repeat_none)); /* We don't copy tables */
- { size_t const countSize = ZSTD_buildCTable(op, oend - op, CTable_MatchLength, MLFSELog, (symbolEncodingType_e)MLtype,
- countWksp, max, mlCodeTable, nbSeq, ML_defaultNorm, ML_defaultNormLog, MaxML,
- prevEntropy->matchlengthCTable, sizeof(prevEntropy->matchlengthCTable),
- cTableWksp, cTableWkspSize);
- FORWARD_IF_ERROR(countSize, "ZSTD_buildCTable for MatchLengths failed");
- if (MLtype == set_compressed)
- fseMetadata->lastCountSize = countSize;
- op += countSize;
- fseMetadata->mlType = (symbolEncodingType_e) MLtype;
- } }
- assert((size_t) (op-ostart) <= sizeof(fseMetadata->fseTablesBuffer));
- return op-ostart;
-}
-
-
-/** ZSTD_buildSuperBlockEntropy() :
- * Builds entropy for the super-block.
- * @return : 0 on success or error code */
-static size_t
-ZSTD_buildSuperBlockEntropy(seqStore_t* seqStorePtr,
- const ZSTD_entropyCTables_t* prevEntropy,
- ZSTD_entropyCTables_t* nextEntropy,
- const ZSTD_CCtx_params* cctxParams,
- ZSTD_entropyCTablesMetadata_t* entropyMetadata,
- void* workspace, size_t wkspSize)
-{
- size_t const litSize = seqStorePtr->lit - seqStorePtr->litStart;
- DEBUGLOG(5, "ZSTD_buildSuperBlockEntropy");
- entropyMetadata->hufMetadata.hufDesSize =
- ZSTD_buildSuperBlockEntropy_literal(seqStorePtr->litStart, litSize,
- &prevEntropy->huf, &nextEntropy->huf,
- &entropyMetadata->hufMetadata,
- ZSTD_disableLiteralsCompression(cctxParams),
- workspace, wkspSize);
- FORWARD_IF_ERROR(entropyMetadata->hufMetadata.hufDesSize, "ZSTD_buildSuperBlockEntropy_literal failed");
- entropyMetadata->fseMetadata.fseTablesSize =
- ZSTD_buildSuperBlockEntropy_sequences(seqStorePtr,
- &prevEntropy->fse, &nextEntropy->fse,
- cctxParams,
- &entropyMetadata->fseMetadata,
- workspace, wkspSize);
- FORWARD_IF_ERROR(entropyMetadata->fseMetadata.fseTablesSize, "ZSTD_buildSuperBlockEntropy_sequences failed");
- return 0;
-}
-
/** ZSTD_compressSubBlock_literal() :
* Compresses literals section for a sub-block.
* When we have to write the Huffman table we will sometimes choose a header
@@ -304,7 +26,7 @@ ZSTD_buildSuperBlockEntropy(seqStore_t* seqStorePtr,
* before we know the table size + compressed size, so we have a bound on the
* table size. If we guessed incorrectly, we fall back to uncompressed literals.
*
- * We write the header when writeEntropy=1 and set entropyWrriten=1 when we succeeded
+ * We write the header when writeEntropy=1 and set entropyWritten=1 when we succeeded
* in writing the header, otherwise it is set to 0.
*
* hufMetadata->hType has literals block type info.
@@ -643,8 +365,9 @@ static size_t ZSTD_estimateSubBlockSize_sequences(const BYTE* ofCodeTable,
void* workspace, size_t wkspSize,
int writeEntropy)
{
- size_t sequencesSectionHeaderSize = 3; /* Use hard coded size of 3 bytes */
+ size_t const sequencesSectionHeaderSize = 3; /* Use hard coded size of 3 bytes */
size_t cSeqSizeEstimate = 0;
+ if (nbSeq == 0) return sequencesSectionHeaderSize;
cSeqSizeEstimate += ZSTD_estimateSubBlockSize_symbolType(fseMetadata->ofType, ofCodeTable, MaxOff,
nbSeq, fseTables->offcodeCTable, NULL,
OF_defaultNorm, OF_defaultNormLog, DefaultMaxOff,
@@ -830,7 +553,7 @@ size_t ZSTD_compressSuperBlock(ZSTD_CCtx* zc,
unsigned lastBlock) {
ZSTD_entropyCTablesMetadata_t entropyMetadata;
- FORWARD_IF_ERROR(ZSTD_buildSuperBlockEntropy(&zc->seqStore,
+ FORWARD_IF_ERROR(ZSTD_buildBlockEntropyStats(&zc->seqStore,
&zc->blockState.prevCBlock->entropy,
&zc->blockState.nextCBlock->entropy,
&zc->appliedParams,
diff --git a/thirdparty/zstd/compress/zstd_compress_superblock.h b/thirdparty/zstd/compress/zstd_compress_superblock.h
index 07f4cb1dc6..176f9b106f 100644
--- a/thirdparty/zstd/compress/zstd_compress_superblock.h
+++ b/thirdparty/zstd/compress/zstd_compress_superblock.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
diff --git a/thirdparty/zstd/compress/zstd_cwksp.h b/thirdparty/zstd/compress/zstd_cwksp.h
index d65170b39c..2656d26ca2 100644
--- a/thirdparty/zstd/compress/zstd_cwksp.h
+++ b/thirdparty/zstd/compress/zstd_cwksp.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
@@ -35,6 +35,10 @@ extern "C" {
#define ZSTD_CWKSP_ASAN_REDZONE_SIZE 128
#endif
+
+/* Set our tables and aligneds to align by 64 bytes */
+#define ZSTD_CWKSP_ALIGNMENT_BYTES 64
+
/*-*************************************
* Structures
***************************************/
@@ -117,10 +121,11 @@ typedef enum {
* - Tables: these are any of several different datastructures (hash tables,
* chain tables, binary trees) that all respect a common format: they are
* uint32_t arrays, all of whose values are between 0 and (nextSrc - base).
- * Their sizes depend on the cparams.
+ * Their sizes depend on the cparams. These tables are 64-byte aligned.
*
* - Aligned: these buffers are used for various purposes that require 4 byte
- * alignment, but don't require any initialization before they're used.
+ * alignment, but don't require any initialization before they're used. These
+ * buffers are each aligned to 64 bytes.
*
* - Buffers: these buffers are used for various purposes that don't require
* any alignment or initialization before they're used. This means they can
@@ -133,8 +138,7 @@ typedef enum {
*
* 1. Objects
* 2. Buffers
- * 3. Aligned
- * 4. Tables
+ * 3. Aligned/Tables
*
* Attempts to reserve objects of different types out of order will fail.
*/
@@ -187,6 +191,8 @@ MEM_STATIC size_t ZSTD_cwksp_align(size_t size, size_t const align) {
* Since tables aren't currently redzoned, you don't need to call through this
* to figure out how much space you need for the matchState tables. Everything
* else is though.
+ *
+ * Do not use for sizing aligned buffers. Instead, use ZSTD_cwksp_aligned_alloc_size().
*/
MEM_STATIC size_t ZSTD_cwksp_alloc_size(size_t size) {
if (size == 0)
@@ -198,30 +204,110 @@ MEM_STATIC size_t ZSTD_cwksp_alloc_size(size_t size) {
#endif
}
-MEM_STATIC void ZSTD_cwksp_internal_advance_phase(
+/**
+ * Returns an adjusted alloc size that is the nearest larger multiple of 64 bytes.
+ * Used to determine the number of bytes required for a given "aligned".
+ */
+MEM_STATIC size_t ZSTD_cwksp_aligned_alloc_size(size_t size) {
+ return ZSTD_cwksp_alloc_size(ZSTD_cwksp_align(size, ZSTD_CWKSP_ALIGNMENT_BYTES));
+}
+
+/**
+ * Returns the amount of additional space the cwksp must allocate
+ * for internal purposes (currently only alignment).
+ */
+MEM_STATIC size_t ZSTD_cwksp_slack_space_required(void) {
+ /* For alignment, the wksp will always allocate an additional n_1=[1, 64] bytes
+ * to align the beginning of tables section, as well as another n_2=[0, 63] bytes
+ * to align the beginning of the aligned secion.
+ *
+ * n_1 + n_2 == 64 bytes if the cwksp is freshly allocated, due to tables and
+ * aligneds being sized in multiples of 64 bytes.
+ */
+ size_t const slackSpace = ZSTD_CWKSP_ALIGNMENT_BYTES;
+ return slackSpace;
+}
+
+
+/**
+ * Return the number of additional bytes required to align a pointer to the given number of bytes.
+ * alignBytes must be a power of two.
+ */
+MEM_STATIC size_t ZSTD_cwksp_bytes_to_align_ptr(void* ptr, const size_t alignBytes) {
+ size_t const alignBytesMask = alignBytes - 1;
+ size_t const bytes = (alignBytes - ((size_t)ptr & (alignBytesMask))) & alignBytesMask;
+ assert((alignBytes & alignBytesMask) == 0);
+ assert(bytes != ZSTD_CWKSP_ALIGNMENT_BYTES);
+ return bytes;
+}
+
+/**
+ * Internal function. Do not use directly.
+ * Reserves the given number of bytes within the aligned/buffer segment of the wksp, which
+ * counts from the end of the wksp. (as opposed to the object/table segment)
+ *
+ * Returns a pointer to the beginning of that space.
+ */
+MEM_STATIC void* ZSTD_cwksp_reserve_internal_buffer_space(ZSTD_cwksp* ws, size_t const bytes) {
+ void* const alloc = (BYTE*)ws->allocStart - bytes;
+ void* const bottom = ws->tableEnd;
+ DEBUGLOG(5, "cwksp: reserving %p %zd bytes, %zd bytes remaining",
+ alloc, bytes, ZSTD_cwksp_available_space(ws) - bytes);
+ ZSTD_cwksp_assert_internal_consistency(ws);
+ assert(alloc >= bottom);
+ if (alloc < bottom) {
+ DEBUGLOG(4, "cwksp: alloc failed!");
+ ws->allocFailed = 1;
+ return NULL;
+ }
+ if (alloc < ws->tableValidEnd) {
+ ws->tableValidEnd = alloc;
+ }
+ ws->allocStart = alloc;
+ return alloc;
+}
+
+/**
+ * Moves the cwksp to the next phase, and does any necessary allocations.
+ * Returns a 0 on success, or zstd error
+ */
+MEM_STATIC size_t ZSTD_cwksp_internal_advance_phase(
ZSTD_cwksp* ws, ZSTD_cwksp_alloc_phase_e phase) {
assert(phase >= ws->phase);
if (phase > ws->phase) {
+ /* Going from allocating objects to allocating buffers */
if (ws->phase < ZSTD_cwksp_alloc_buffers &&
phase >= ZSTD_cwksp_alloc_buffers) {
ws->tableValidEnd = ws->objectEnd;
}
+
+ /* Going from allocating buffers to allocating aligneds/tables */
if (ws->phase < ZSTD_cwksp_alloc_aligned &&
phase >= ZSTD_cwksp_alloc_aligned) {
- /* If unaligned allocations down from a too-large top have left us
- * unaligned, we need to realign our alloc ptr. Technically, this
- * can consume space that is unaccounted for in the neededSpace
- * calculation. However, I believe this can only happen when the
- * workspace is too large, and specifically when it is too large
- * by a larger margin than the space that will be consumed. */
- /* TODO: cleaner, compiler warning friendly way to do this??? */
- ws->allocStart = (BYTE*)ws->allocStart - ((size_t)ws->allocStart & (sizeof(U32)-1));
- if (ws->allocStart < ws->tableValidEnd) {
- ws->tableValidEnd = ws->allocStart;
+ { /* Align the start of the "aligned" to 64 bytes. Use [1, 64] bytes. */
+ size_t const bytesToAlign =
+ ZSTD_CWKSP_ALIGNMENT_BYTES - ZSTD_cwksp_bytes_to_align_ptr(ws->allocStart, ZSTD_CWKSP_ALIGNMENT_BYTES);
+ DEBUGLOG(5, "reserving aligned alignment addtl space: %zu", bytesToAlign);
+ ZSTD_STATIC_ASSERT((ZSTD_CWKSP_ALIGNMENT_BYTES & (ZSTD_CWKSP_ALIGNMENT_BYTES - 1)) == 0); /* power of 2 */
+ RETURN_ERROR_IF(!ZSTD_cwksp_reserve_internal_buffer_space(ws, bytesToAlign),
+ memory_allocation, "aligned phase - alignment initial allocation failed!");
+ }
+ { /* Align the start of the tables to 64 bytes. Use [0, 63] bytes */
+ void* const alloc = ws->objectEnd;
+ size_t const bytesToAlign = ZSTD_cwksp_bytes_to_align_ptr(alloc, ZSTD_CWKSP_ALIGNMENT_BYTES);
+ void* const end = (BYTE*)alloc + bytesToAlign;
+ DEBUGLOG(5, "reserving table alignment addtl space: %zu", bytesToAlign);
+ RETURN_ERROR_IF(end > ws->workspaceEnd, memory_allocation,
+ "table phase - alignment initial allocation failed!");
+ ws->objectEnd = end;
+ ws->tableEnd = end;
+ ws->tableValidEnd = end;
}
}
ws->phase = phase;
+ ZSTD_cwksp_assert_internal_consistency(ws);
}
+ return 0;
}
/**
@@ -237,38 +323,25 @@ MEM_STATIC int ZSTD_cwksp_owns_buffer(const ZSTD_cwksp* ws, const void* ptr) {
MEM_STATIC void* ZSTD_cwksp_reserve_internal(
ZSTD_cwksp* ws, size_t bytes, ZSTD_cwksp_alloc_phase_e phase) {
void* alloc;
- void* bottom = ws->tableEnd;
- ZSTD_cwksp_internal_advance_phase(ws, phase);
- alloc = (BYTE *)ws->allocStart - bytes;
-
- if (bytes == 0)
+ if (ZSTD_isError(ZSTD_cwksp_internal_advance_phase(ws, phase)) || bytes == 0) {
return NULL;
+ }
#if ZSTD_ADDRESS_SANITIZER && !defined (ZSTD_ASAN_DONT_POISON_WORKSPACE)
/* over-reserve space */
- alloc = (BYTE *)alloc - 2 * ZSTD_CWKSP_ASAN_REDZONE_SIZE;
+ bytes += 2 * ZSTD_CWKSP_ASAN_REDZONE_SIZE;
#endif
- DEBUGLOG(5, "cwksp: reserving %p %zd bytes, %zd bytes remaining",
- alloc, bytes, ZSTD_cwksp_available_space(ws) - bytes);
- ZSTD_cwksp_assert_internal_consistency(ws);
- assert(alloc >= bottom);
- if (alloc < bottom) {
- DEBUGLOG(4, "cwksp: alloc failed!");
- ws->allocFailed = 1;
- return NULL;
- }
- if (alloc < ws->tableValidEnd) {
- ws->tableValidEnd = alloc;
- }
- ws->allocStart = alloc;
+ alloc = ZSTD_cwksp_reserve_internal_buffer_space(ws, bytes);
#if ZSTD_ADDRESS_SANITIZER && !defined (ZSTD_ASAN_DONT_POISON_WORKSPACE)
/* Move alloc so there's ZSTD_CWKSP_ASAN_REDZONE_SIZE unused space on
* either size. */
- alloc = (BYTE *)alloc + ZSTD_CWKSP_ASAN_REDZONE_SIZE;
- if (ws->isStatic == ZSTD_cwksp_dynamic_alloc) {
- __asan_unpoison_memory_region(alloc, bytes);
+ if (alloc) {
+ alloc = (BYTE *)alloc + ZSTD_CWKSP_ASAN_REDZONE_SIZE;
+ if (ws->isStatic == ZSTD_cwksp_dynamic_alloc) {
+ __asan_unpoison_memory_region(alloc, bytes);
+ }
}
#endif
@@ -283,28 +356,36 @@ MEM_STATIC BYTE* ZSTD_cwksp_reserve_buffer(ZSTD_cwksp* ws, size_t bytes) {
}
/**
- * Reserves and returns memory sized on and aligned on sizeof(unsigned).
+ * Reserves and returns memory sized on and aligned on ZSTD_CWKSP_ALIGNMENT_BYTES (64 bytes).
*/
MEM_STATIC void* ZSTD_cwksp_reserve_aligned(ZSTD_cwksp* ws, size_t bytes) {
- assert((bytes & (sizeof(U32)-1)) == 0);
- return ZSTD_cwksp_reserve_internal(ws, ZSTD_cwksp_align(bytes, sizeof(U32)), ZSTD_cwksp_alloc_aligned);
+ void* ptr = ZSTD_cwksp_reserve_internal(ws, ZSTD_cwksp_align(bytes, ZSTD_CWKSP_ALIGNMENT_BYTES),
+ ZSTD_cwksp_alloc_aligned);
+ assert(((size_t)ptr & (ZSTD_CWKSP_ALIGNMENT_BYTES-1))== 0);
+ return ptr;
}
/**
- * Aligned on sizeof(unsigned). These buffers have the special property that
+ * Aligned on 64 bytes. These buffers have the special property that
* their values remain constrained, allowing us to re-use them without
* memset()-ing them.
*/
MEM_STATIC void* ZSTD_cwksp_reserve_table(ZSTD_cwksp* ws, size_t bytes) {
const ZSTD_cwksp_alloc_phase_e phase = ZSTD_cwksp_alloc_aligned;
- void* alloc = ws->tableEnd;
- void* end = (BYTE *)alloc + bytes;
- void* top = ws->allocStart;
+ void* alloc;
+ void* end;
+ void* top;
+
+ if (ZSTD_isError(ZSTD_cwksp_internal_advance_phase(ws, phase))) {
+ return NULL;
+ }
+ alloc = ws->tableEnd;
+ end = (BYTE *)alloc + bytes;
+ top = ws->allocStart;
DEBUGLOG(5, "cwksp: reserving %p table %zd bytes, %zd bytes remaining",
alloc, bytes, ZSTD_cwksp_available_space(ws) - bytes);
assert((bytes & (sizeof(U32)-1)) == 0);
- ZSTD_cwksp_internal_advance_phase(ws, phase);
ZSTD_cwksp_assert_internal_consistency(ws);
assert(end <= top);
if (end > top) {
@@ -320,6 +401,8 @@ MEM_STATIC void* ZSTD_cwksp_reserve_table(ZSTD_cwksp* ws, size_t bytes) {
}
#endif
+ assert((bytes & (ZSTD_CWKSP_ALIGNMENT_BYTES-1)) == 0);
+ assert(((size_t)alloc & (ZSTD_CWKSP_ALIGNMENT_BYTES-1))== 0);
return alloc;
}
@@ -503,7 +586,7 @@ MEM_STATIC void ZSTD_cwksp_free(ZSTD_cwksp* ws, ZSTD_customMem customMem) {
/**
* Moves the management of a workspace from one cwksp to another. The src cwksp
- * is left in an invalid state (src must be re-init()'ed before its used again).
+ * is left in an invalid state (src must be re-init()'ed before it's used again).
*/
MEM_STATIC void ZSTD_cwksp_move(ZSTD_cwksp* dst, ZSTD_cwksp* src) {
*dst = *src;
@@ -527,6 +610,24 @@ MEM_STATIC int ZSTD_cwksp_reserve_failed(const ZSTD_cwksp* ws) {
* Functions Checking Free Space
***************************************/
+/* ZSTD_alignmentSpaceWithinBounds() :
+ * Returns if the estimated space needed for a wksp is within an acceptable limit of the
+ * actual amount of space used.
+ */
+MEM_STATIC int ZSTD_cwksp_estimated_space_within_bounds(const ZSTD_cwksp* const ws,
+ size_t const estimatedSpace, int resizedWorkspace) {
+ if (resizedWorkspace) {
+ /* Resized/newly allocated wksp should have exact bounds */
+ return ZSTD_cwksp_used(ws) == estimatedSpace;
+ } else {
+ /* Due to alignment, when reusing a workspace, we can actually consume 63 fewer or more bytes
+ * than estimatedSpace. See the comments in zstd_cwksp.h for details.
+ */
+ return (ZSTD_cwksp_used(ws) >= estimatedSpace - 63) && (ZSTD_cwksp_used(ws) <= estimatedSpace + 63);
+ }
+}
+
+
MEM_STATIC size_t ZSTD_cwksp_available_space(ZSTD_cwksp* ws) {
return (size_t)((BYTE*)ws->allocStart - (BYTE*)ws->tableEnd);
}
diff --git a/thirdparty/zstd/compress/zstd_double_fast.c b/thirdparty/zstd/compress/zstd_double_fast.c
index ef12a524f7..d0d3a784dd 100644
--- a/thirdparty/zstd/compress/zstd_double_fast.c
+++ b/thirdparty/zstd/compress/zstd_double_fast.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
@@ -409,7 +409,7 @@ static size_t ZSTD_compressBlock_doubleFast_extDict_generic(
hashSmall[hSmall] = hashLong[hLong] = curr; /* update hash table */
if ((((U32)((prefixStartIndex-1) - repIndex) >= 3) /* intentional underflow : ensure repIndex doesn't overlap dict + prefix */
- & (repIndex > dictStartIndex))
+ & (offset_1 < curr+1 - dictStartIndex)) /* note: we are searching at curr+1 */
&& (MEM_read32(repMatch) == MEM_read32(ip+1)) ) {
const BYTE* repMatchEnd = repIndex < prefixStartIndex ? dictEnd : iend;
mLength = ZSTD_count_2segments(ip+1+4, repMatch+4, iend, repMatchEnd, prefixStart) + 4;
@@ -477,7 +477,7 @@ static size_t ZSTD_compressBlock_doubleFast_extDict_generic(
U32 const repIndex2 = current2 - offset_2;
const BYTE* repMatch2 = repIndex2 < prefixStartIndex ? dictBase + repIndex2 : base + repIndex2;
if ( (((U32)((prefixStartIndex-1) - repIndex2) >= 3) /* intentional overflow : ensure repIndex2 doesn't overlap dict + prefix */
- & (repIndex2 > dictStartIndex))
+ & (offset_2 < current2 - dictStartIndex))
&& (MEM_read32(repMatch2) == MEM_read32(ip)) ) {
const BYTE* const repEnd2 = repIndex2 < prefixStartIndex ? dictEnd : iend;
size_t const repLength2 = ZSTD_count_2segments(ip+4, repMatch2+4, iend, repEnd2, prefixStart) + 4;
diff --git a/thirdparty/zstd/compress/zstd_double_fast.h b/thirdparty/zstd/compress/zstd_double_fast.h
index 14d944d69b..e16b7b03a3 100644
--- a/thirdparty/zstd/compress/zstd_double_fast.h
+++ b/thirdparty/zstd/compress/zstd_double_fast.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
diff --git a/thirdparty/zstd/compress/zstd_fast.c b/thirdparty/zstd/compress/zstd_fast.c
index db7ce83d0a..4edc04dccd 100644
--- a/thirdparty/zstd/compress/zstd_fast.c
+++ b/thirdparty/zstd/compress/zstd_fast.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
@@ -242,7 +242,7 @@ size_t ZSTD_compressBlock_fast_dictMatchState_generic(
assert(endIndex - prefixStartIndex <= maxDistance);
(void)maxDistance; (void)endIndex; /* these variables are not used when assert() is disabled */
- /* ensure there will be no no underflow
+ /* ensure there will be no underflow
* when translating a dict index into a local index */
assert(prefixStartIndex >= (U32)(dictEnd - dictBase));
@@ -416,9 +416,9 @@ static size_t ZSTD_compressBlock_fast_extDict_generic(
const BYTE* const repMatch = repBase + repIndex;
hashTable[h] = curr; /* update hash table */
DEBUGLOG(7, "offset_1 = %u , curr = %u", offset_1, curr);
- assert(offset_1 <= curr +1); /* check repIndex */
- if ( (((U32)((prefixStartIndex-1) - repIndex) >= 3) /* intentional underflow */ & (repIndex > dictStartIndex))
+ if ( ( ((U32)((prefixStartIndex-1) - repIndex) >= 3) /* intentional underflow */
+ & (offset_1 < curr+1 - dictStartIndex) ) /* note: we are searching at curr+1 */
&& (MEM_read32(repMatch) == MEM_read32(ip+1)) ) {
const BYTE* const repMatchEnd = repIndex < prefixStartIndex ? dictEnd : iend;
size_t const rLength = ZSTD_count_2segments(ip+1 +4, repMatch +4, iend, repMatchEnd, prefixStart) + 4;
@@ -453,7 +453,7 @@ static size_t ZSTD_compressBlock_fast_extDict_generic(
U32 const current2 = (U32)(ip-base);
U32 const repIndex2 = current2 - offset_2;
const BYTE* const repMatch2 = repIndex2 < prefixStartIndex ? dictBase + repIndex2 : base + repIndex2;
- if ( (((U32)((prefixStartIndex-1) - repIndex2) >= 3) & (repIndex2 > dictStartIndex)) /* intentional overflow */
+ if ( (((U32)((prefixStartIndex-1) - repIndex2) >= 3) & (offset_2 < curr - dictStartIndex)) /* intentional overflow */
&& (MEM_read32(repMatch2) == MEM_read32(ip)) ) {
const BYTE* const repEnd2 = repIndex2 < prefixStartIndex ? dictEnd : iend;
size_t const repLength2 = ZSTD_count_2segments(ip+4, repMatch2+4, iend, repEnd2, prefixStart) + 4;
diff --git a/thirdparty/zstd/compress/zstd_fast.h b/thirdparty/zstd/compress/zstd_fast.h
index cf6aaa8e67..0d4a0c1090 100644
--- a/thirdparty/zstd/compress/zstd_fast.h
+++ b/thirdparty/zstd/compress/zstd_fast.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
diff --git a/thirdparty/zstd/compress/zstd_lazy.c b/thirdparty/zstd/compress/zstd_lazy.c
index 49ec1b09ef..3d523e8472 100644
--- a/thirdparty/zstd/compress/zstd_lazy.c
+++ b/thirdparty/zstd/compress/zstd_lazy.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
@@ -438,43 +438,9 @@ static size_t ZSTD_BtFindBestMatch_extDict_selectMLS (
}
}
-
-
-/* *********************************
-* Hash Chain
+/***********************************
+* Dedicated dict search
***********************************/
-#define NEXT_IN_CHAIN(d, mask) chainTable[(d) & (mask)]
-
-/* Update chains up to ip (excluded)
- Assumption : always within prefix (i.e. not within extDict) */
-FORCE_INLINE_TEMPLATE U32 ZSTD_insertAndFindFirstIndex_internal(
- ZSTD_matchState_t* ms,
- const ZSTD_compressionParameters* const cParams,
- const BYTE* ip, U32 const mls)
-{
- U32* const hashTable = ms->hashTable;
- const U32 hashLog = cParams->hashLog;
- U32* const chainTable = ms->chainTable;
- const U32 chainMask = (1 << cParams->chainLog) - 1;
- const BYTE* const base = ms->window.base;
- const U32 target = (U32)(ip - base);
- U32 idx = ms->nextToUpdate;
-
- while(idx < target) { /* catch up */
- size_t const h = ZSTD_hashPtr(base+idx, hashLog, mls);
- NEXT_IN_CHAIN(idx, chainMask) = hashTable[h];
- hashTable[h] = idx;
- idx++;
- }
-
- ms->nextToUpdate = target;
- return hashTable[ZSTD_hashPtr(ip, hashLog, mls)];
-}
-
-U32 ZSTD_insertAndFindFirstIndex(ZSTD_matchState_t* ms, const BYTE* ip) {
- const ZSTD_compressionParameters* const cParams = &ms->cParams;
- return ZSTD_insertAndFindFirstIndex_internal(ms, cParams, ip, ms->cParams.minMatch);
-}
void ZSTD_dedicatedDictSearch_lazy_loadDictionary(ZSTD_matchState_t* ms, const BYTE* const ip)
{
@@ -500,11 +466,10 @@ void ZSTD_dedicatedDictSearch_lazy_loadDictionary(ZSTD_matchState_t* ms, const B
U32* const tmpChainTable = hashTable + ((size_t)1 << hashLog);
U32 const tmpChainSize = ((1 << ZSTD_LAZY_DDSS_BUCKET_LOG) - 1) << hashLog;
U32 const tmpMinChain = tmpChainSize < target ? target - tmpChainSize : idx;
-
U32 hashIdx;
assert(ms->cParams.chainLog <= 24);
- assert(ms->cParams.hashLog >= ms->cParams.chainLog);
+ assert(ms->cParams.hashLog > ms->cParams.chainLog);
assert(idx != 0);
assert(tmpMinChain <= minChain);
@@ -535,7 +500,7 @@ void ZSTD_dedicatedDictSearch_lazy_loadDictionary(ZSTD_matchState_t* ms, const B
if (count == cacheSize) {
for (count = 0; count < chainLimit;) {
if (i < minChain) {
- if (!i || countBeyondMinChain++ > cacheSize) {
+ if (!i || ++countBeyondMinChain > cacheSize) {
/* only allow pulling `cacheSize` number of entries
* into the cache or chainTable beyond `minChain`,
* to replace the entries pulled out of the
@@ -591,6 +556,139 @@ void ZSTD_dedicatedDictSearch_lazy_loadDictionary(ZSTD_matchState_t* ms, const B
ms->nextToUpdate = target;
}
+/* Returns the longest match length found in the dedicated dict search structure.
+ * If none are longer than the argument ml, then ml will be returned.
+ */
+FORCE_INLINE_TEMPLATE
+size_t ZSTD_dedicatedDictSearch_lazy_search(size_t* offsetPtr, size_t ml, U32 nbAttempts,
+ const ZSTD_matchState_t* const dms,
+ const BYTE* const ip, const BYTE* const iLimit,
+ const BYTE* const prefixStart, const U32 curr,
+ const U32 dictLimit, const size_t ddsIdx) {
+ const U32 ddsLowestIndex = dms->window.dictLimit;
+ const BYTE* const ddsBase = dms->window.base;
+ const BYTE* const ddsEnd = dms->window.nextSrc;
+ const U32 ddsSize = (U32)(ddsEnd - ddsBase);
+ const U32 ddsIndexDelta = dictLimit - ddsSize;
+ const U32 bucketSize = (1 << ZSTD_LAZY_DDSS_BUCKET_LOG);
+ const U32 bucketLimit = nbAttempts < bucketSize - 1 ? nbAttempts : bucketSize - 1;
+ U32 ddsAttempt;
+ U32 matchIndex;
+
+ for (ddsAttempt = 0; ddsAttempt < bucketSize - 1; ddsAttempt++) {
+ PREFETCH_L1(ddsBase + dms->hashTable[ddsIdx + ddsAttempt]);
+ }
+
+ {
+ U32 const chainPackedPointer = dms->hashTable[ddsIdx + bucketSize - 1];
+ U32 const chainIndex = chainPackedPointer >> 8;
+
+ PREFETCH_L1(&dms->chainTable[chainIndex]);
+ }
+
+ for (ddsAttempt = 0; ddsAttempt < bucketLimit; ddsAttempt++) {
+ size_t currentMl=0;
+ const BYTE* match;
+ matchIndex = dms->hashTable[ddsIdx + ddsAttempt];
+ match = ddsBase + matchIndex;
+
+ if (!matchIndex) {
+ return ml;
+ }
+
+ /* guaranteed by table construction */
+ (void)ddsLowestIndex;
+ assert(matchIndex >= ddsLowestIndex);
+ assert(match+4 <= ddsEnd);
+ if (MEM_read32(match) == MEM_read32(ip)) {
+ /* assumption : matchIndex <= dictLimit-4 (by table construction) */
+ currentMl = ZSTD_count_2segments(ip+4, match+4, iLimit, ddsEnd, prefixStart) + 4;
+ }
+
+ /* save best solution */
+ if (currentMl > ml) {
+ ml = currentMl;
+ *offsetPtr = curr - (matchIndex + ddsIndexDelta) + ZSTD_REP_MOVE;
+ if (ip+currentMl == iLimit) {
+ /* best possible, avoids read overflow on next attempt */
+ return ml;
+ }
+ }
+ }
+
+ {
+ U32 const chainPackedPointer = dms->hashTable[ddsIdx + bucketSize - 1];
+ U32 chainIndex = chainPackedPointer >> 8;
+ U32 const chainLength = chainPackedPointer & 0xFF;
+ U32 const chainAttempts = nbAttempts - ddsAttempt;
+ U32 const chainLimit = chainAttempts > chainLength ? chainLength : chainAttempts;
+ U32 chainAttempt;
+
+ for (chainAttempt = 0 ; chainAttempt < chainLimit; chainAttempt++) {
+ PREFETCH_L1(ddsBase + dms->chainTable[chainIndex + chainAttempt]);
+ }
+
+ for (chainAttempt = 0 ; chainAttempt < chainLimit; chainAttempt++, chainIndex++) {
+ size_t currentMl=0;
+ const BYTE* match;
+ matchIndex = dms->chainTable[chainIndex];
+ match = ddsBase + matchIndex;
+
+ /* guaranteed by table construction */
+ assert(matchIndex >= ddsLowestIndex);
+ assert(match+4 <= ddsEnd);
+ if (MEM_read32(match) == MEM_read32(ip)) {
+ /* assumption : matchIndex <= dictLimit-4 (by table construction) */
+ currentMl = ZSTD_count_2segments(ip+4, match+4, iLimit, ddsEnd, prefixStart) + 4;
+ }
+
+ /* save best solution */
+ if (currentMl > ml) {
+ ml = currentMl;
+ *offsetPtr = curr - (matchIndex + ddsIndexDelta) + ZSTD_REP_MOVE;
+ if (ip+currentMl == iLimit) break; /* best possible, avoids read overflow on next attempt */
+ }
+ }
+ }
+ return ml;
+}
+
+
+/* *********************************
+* Hash Chain
+***********************************/
+#define NEXT_IN_CHAIN(d, mask) chainTable[(d) & (mask)]
+
+/* Update chains up to ip (excluded)
+ Assumption : always within prefix (i.e. not within extDict) */
+FORCE_INLINE_TEMPLATE U32 ZSTD_insertAndFindFirstIndex_internal(
+ ZSTD_matchState_t* ms,
+ const ZSTD_compressionParameters* const cParams,
+ const BYTE* ip, U32 const mls)
+{
+ U32* const hashTable = ms->hashTable;
+ const U32 hashLog = cParams->hashLog;
+ U32* const chainTable = ms->chainTable;
+ const U32 chainMask = (1 << cParams->chainLog) - 1;
+ const BYTE* const base = ms->window.base;
+ const U32 target = (U32)(ip - base);
+ U32 idx = ms->nextToUpdate;
+
+ while(idx < target) { /* catch up */
+ size_t const h = ZSTD_hashPtr(base+idx, hashLog, mls);
+ NEXT_IN_CHAIN(idx, chainMask) = hashTable[h];
+ hashTable[h] = idx;
+ idx++;
+ }
+
+ ms->nextToUpdate = target;
+ return hashTable[ZSTD_hashPtr(ip, hashLog, mls)];
+}
+
+U32 ZSTD_insertAndFindFirstIndex(ZSTD_matchState_t* ms, const BYTE* ip) {
+ const ZSTD_compressionParameters* const cParams = &ms->cParams;
+ return ZSTD_insertAndFindFirstIndex_internal(ms, cParams, ip, ms->cParams.minMatch);
+}
/* inlining is important to hardwire a hot branch (template emulation) */
FORCE_INLINE_TEMPLATE
@@ -661,90 +759,8 @@ size_t ZSTD_HcFindBestMatch_generic (
}
if (dictMode == ZSTD_dedicatedDictSearch) {
- const U32 ddsLowestIndex = dms->window.dictLimit;
- const BYTE* const ddsBase = dms->window.base;
- const BYTE* const ddsEnd = dms->window.nextSrc;
- const U32 ddsSize = (U32)(ddsEnd - ddsBase);
- const U32 ddsIndexDelta = dictLimit - ddsSize;
- const U32 bucketSize = (1 << ZSTD_LAZY_DDSS_BUCKET_LOG);
- const U32 bucketLimit = nbAttempts < bucketSize - 1 ? nbAttempts : bucketSize - 1;
- U32 ddsAttempt;
-
- for (ddsAttempt = 0; ddsAttempt < bucketSize - 1; ddsAttempt++) {
- PREFETCH_L1(ddsBase + dms->hashTable[ddsIdx + ddsAttempt]);
- }
-
- {
- U32 const chainPackedPointer = dms->hashTable[ddsIdx + bucketSize - 1];
- U32 const chainIndex = chainPackedPointer >> 8;
-
- PREFETCH_L1(&dms->chainTable[chainIndex]);
- }
-
- for (ddsAttempt = 0; ddsAttempt < bucketLimit; ddsAttempt++) {
- size_t currentMl=0;
- const BYTE* match;
- matchIndex = dms->hashTable[ddsIdx + ddsAttempt];
- match = ddsBase + matchIndex;
-
- if (!matchIndex) {
- return ml;
- }
-
- /* guaranteed by table construction */
- (void)ddsLowestIndex;
- assert(matchIndex >= ddsLowestIndex);
- assert(match+4 <= ddsEnd);
- if (MEM_read32(match) == MEM_read32(ip)) {
- /* assumption : matchIndex <= dictLimit-4 (by table construction) */
- currentMl = ZSTD_count_2segments(ip+4, match+4, iLimit, ddsEnd, prefixStart) + 4;
- }
-
- /* save best solution */
- if (currentMl > ml) {
- ml = currentMl;
- *offsetPtr = curr - (matchIndex + ddsIndexDelta) + ZSTD_REP_MOVE;
- if (ip+currentMl == iLimit) {
- /* best possible, avoids read overflow on next attempt */
- return ml;
- }
- }
- }
-
- {
- U32 const chainPackedPointer = dms->hashTable[ddsIdx + bucketSize - 1];
- U32 chainIndex = chainPackedPointer >> 8;
- U32 const chainLength = chainPackedPointer & 0xFF;
- U32 const chainAttempts = nbAttempts - ddsAttempt;
- U32 const chainLimit = chainAttempts > chainLength ? chainLength : chainAttempts;
- U32 chainAttempt;
-
- for (chainAttempt = 0 ; chainAttempt < chainLimit; chainAttempt++) {
- PREFETCH_L1(ddsBase + dms->chainTable[chainIndex + chainAttempt]);
- }
-
- for (chainAttempt = 0 ; chainAttempt < chainLimit; chainAttempt++, chainIndex++) {
- size_t currentMl=0;
- const BYTE* match;
- matchIndex = dms->chainTable[chainIndex];
- match = ddsBase + matchIndex;
-
- /* guaranteed by table construction */
- assert(matchIndex >= ddsLowestIndex);
- assert(match+4 <= ddsEnd);
- if (MEM_read32(match) == MEM_read32(ip)) {
- /* assumption : matchIndex <= dictLimit-4 (by table construction) */
- currentMl = ZSTD_count_2segments(ip+4, match+4, iLimit, ddsEnd, prefixStart) + 4;
- }
-
- /* save best solution */
- if (currentMl > ml) {
- ml = currentMl;
- *offsetPtr = curr - (matchIndex + ddsIndexDelta) + ZSTD_REP_MOVE;
- if (ip+currentMl == iLimit) break; /* best possible, avoids read overflow on next attempt */
- }
- }
- }
+ ml = ZSTD_dedicatedDictSearch_lazy_search(offsetPtr, ml, nbAttempts, dms,
+ ip, iLimit, prefixStart, curr, dictLimit, ddsIdx);
} else if (dictMode == ZSTD_dictMatchState) {
const U32* const dmsChainTable = dms->chainTable;
const U32 dmsChainSize = (1 << dms->cParams.chainLog);
@@ -845,11 +861,657 @@ FORCE_INLINE_TEMPLATE size_t ZSTD_HcFindBestMatch_extDict_selectMLS (
}
}
+/* *********************************
+* (SIMD) Row-based matchfinder
+***********************************/
+/* Constants for row-based hash */
+#define ZSTD_ROW_HASH_TAG_OFFSET 1 /* byte offset of hashes in the match state's tagTable from the beginning of a row */
+#define ZSTD_ROW_HASH_TAG_BITS 8 /* nb bits to use for the tag */
+#define ZSTD_ROW_HASH_TAG_MASK ((1u << ZSTD_ROW_HASH_TAG_BITS) - 1)
+
+#define ZSTD_ROW_HASH_CACHE_MASK (ZSTD_ROW_HASH_CACHE_SIZE - 1)
+
+typedef U32 ZSTD_VecMask; /* Clarifies when we are interacting with a U32 representing a mask of matches */
+
+#if !defined(ZSTD_NO_INTRINSICS) && defined(__SSE2__) /* SIMD SSE version */
+
+#include <emmintrin.h>
+typedef __m128i ZSTD_Vec128;
+
+/* Returns a 128-bit container with 128-bits from src */
+static ZSTD_Vec128 ZSTD_Vec128_read(const void* const src) {
+ return _mm_loadu_si128((ZSTD_Vec128 const*)src);
+}
+
+/* Returns a ZSTD_Vec128 with the byte "val" packed 16 times */
+static ZSTD_Vec128 ZSTD_Vec128_set8(BYTE val) {
+ return _mm_set1_epi8((char)val);
+}
+
+/* Do byte-by-byte comparison result of x and y. Then collapse 128-bit resultant mask
+ * into a 32-bit mask that is the MSB of each byte.
+ * */
+static ZSTD_VecMask ZSTD_Vec128_cmpMask8(ZSTD_Vec128 x, ZSTD_Vec128 y) {
+ return (ZSTD_VecMask)_mm_movemask_epi8(_mm_cmpeq_epi8(x, y));
+}
+
+typedef struct {
+ __m128i fst;
+ __m128i snd;
+} ZSTD_Vec256;
+
+static ZSTD_Vec256 ZSTD_Vec256_read(const void* const ptr) {
+ ZSTD_Vec256 v;
+ v.fst = ZSTD_Vec128_read(ptr);
+ v.snd = ZSTD_Vec128_read((ZSTD_Vec128 const*)ptr + 1);
+ return v;
+}
+
+static ZSTD_Vec256 ZSTD_Vec256_set8(BYTE val) {
+ ZSTD_Vec256 v;
+ v.fst = ZSTD_Vec128_set8(val);
+ v.snd = ZSTD_Vec128_set8(val);
+ return v;
+}
+
+static ZSTD_VecMask ZSTD_Vec256_cmpMask8(ZSTD_Vec256 x, ZSTD_Vec256 y) {
+ ZSTD_VecMask fstMask;
+ ZSTD_VecMask sndMask;
+ fstMask = ZSTD_Vec128_cmpMask8(x.fst, y.fst);
+ sndMask = ZSTD_Vec128_cmpMask8(x.snd, y.snd);
+ return fstMask | (sndMask << 16);
+}
+
+#elif !defined(ZSTD_NO_INTRINSICS) && defined(__ARM_NEON) /* SIMD ARM NEON Version */
+
+#include <arm_neon.h>
+typedef uint8x16_t ZSTD_Vec128;
+
+static ZSTD_Vec128 ZSTD_Vec128_read(const void* const src) {
+ return vld1q_u8((const BYTE* const)src);
+}
+
+static ZSTD_Vec128 ZSTD_Vec128_set8(BYTE val) {
+ return vdupq_n_u8(val);
+}
+
+/* Mimics '_mm_movemask_epi8()' from SSE */
+static U32 ZSTD_vmovmaskq_u8(ZSTD_Vec128 val) {
+ /* Shift out everything but the MSB bits in each byte */
+ uint16x8_t highBits = vreinterpretq_u16_u8(vshrq_n_u8(val, 7));
+ /* Merge the even lanes together with vsra (right shift and add) */
+ uint32x4_t paired16 = vreinterpretq_u32_u16(vsraq_n_u16(highBits, highBits, 7));
+ uint64x2_t paired32 = vreinterpretq_u64_u32(vsraq_n_u32(paired16, paired16, 14));
+ uint8x16_t paired64 = vreinterpretq_u8_u64(vsraq_n_u64(paired32, paired32, 28));
+ /* Extract the low 8 bits from each lane, merge */
+ return vgetq_lane_u8(paired64, 0) | ((U32)vgetq_lane_u8(paired64, 8) << 8);
+}
+
+static ZSTD_VecMask ZSTD_Vec128_cmpMask8(ZSTD_Vec128 x, ZSTD_Vec128 y) {
+ return (ZSTD_VecMask)ZSTD_vmovmaskq_u8(vceqq_u8(x, y));
+}
+
+typedef struct {
+ uint8x16_t fst;
+ uint8x16_t snd;
+} ZSTD_Vec256;
+
+static ZSTD_Vec256 ZSTD_Vec256_read(const void* const ptr) {
+ ZSTD_Vec256 v;
+ v.fst = ZSTD_Vec128_read(ptr);
+ v.snd = ZSTD_Vec128_read((ZSTD_Vec128 const*)ptr + 1);
+ return v;
+}
+
+static ZSTD_Vec256 ZSTD_Vec256_set8(BYTE val) {
+ ZSTD_Vec256 v;
+ v.fst = ZSTD_Vec128_set8(val);
+ v.snd = ZSTD_Vec128_set8(val);
+ return v;
+}
+
+static ZSTD_VecMask ZSTD_Vec256_cmpMask8(ZSTD_Vec256 x, ZSTD_Vec256 y) {
+ ZSTD_VecMask fstMask;
+ ZSTD_VecMask sndMask;
+ fstMask = ZSTD_Vec128_cmpMask8(x.fst, y.fst);
+ sndMask = ZSTD_Vec128_cmpMask8(x.snd, y.snd);
+ return fstMask | (sndMask << 16);
+}
+
+#else /* Scalar fallback version */
+
+#define VEC128_NB_SIZE_T (16 / sizeof(size_t))
+typedef struct {
+ size_t vec[VEC128_NB_SIZE_T];
+} ZSTD_Vec128;
+
+static ZSTD_Vec128 ZSTD_Vec128_read(const void* const src) {
+ ZSTD_Vec128 ret;
+ ZSTD_memcpy(ret.vec, src, VEC128_NB_SIZE_T*sizeof(size_t));
+ return ret;
+}
+
+static ZSTD_Vec128 ZSTD_Vec128_set8(BYTE val) {
+ ZSTD_Vec128 ret = { {0} };
+ int startBit = sizeof(size_t) * 8 - 8;
+ for (;startBit >= 0; startBit -= 8) {
+ unsigned j = 0;
+ for (;j < VEC128_NB_SIZE_T; ++j) {
+ ret.vec[j] |= ((size_t)val << startBit);
+ }
+ }
+ return ret;
+}
+
+/* Compare x to y, byte by byte, generating a "matches" bitfield */
+static ZSTD_VecMask ZSTD_Vec128_cmpMask8(ZSTD_Vec128 x, ZSTD_Vec128 y) {
+ ZSTD_VecMask res = 0;
+ unsigned i = 0;
+ unsigned l = 0;
+ for (; i < VEC128_NB_SIZE_T; ++i) {
+ const size_t cmp1 = x.vec[i];
+ const size_t cmp2 = y.vec[i];
+ unsigned j = 0;
+ for (; j < sizeof(size_t); ++j, ++l) {
+ if (((cmp1 >> j*8) & 0xFF) == ((cmp2 >> j*8) & 0xFF)) {
+ res |= ((U32)1 << (j+i*sizeof(size_t)));
+ }
+ }
+ }
+ return res;
+}
+
+#define VEC256_NB_SIZE_T 2*VEC128_NB_SIZE_T
+typedef struct {
+ size_t vec[VEC256_NB_SIZE_T];
+} ZSTD_Vec256;
+
+static ZSTD_Vec256 ZSTD_Vec256_read(const void* const src) {
+ ZSTD_Vec256 ret;
+ ZSTD_memcpy(ret.vec, src, VEC256_NB_SIZE_T*sizeof(size_t));
+ return ret;
+}
+
+static ZSTD_Vec256 ZSTD_Vec256_set8(BYTE val) {
+ ZSTD_Vec256 ret = { {0} };
+ int startBit = sizeof(size_t) * 8 - 8;
+ for (;startBit >= 0; startBit -= 8) {
+ unsigned j = 0;
+ for (;j < VEC256_NB_SIZE_T; ++j) {
+ ret.vec[j] |= ((size_t)val << startBit);
+ }
+ }
+ return ret;
+}
+
+/* Compare x to y, byte by byte, generating a "matches" bitfield */
+static ZSTD_VecMask ZSTD_Vec256_cmpMask8(ZSTD_Vec256 x, ZSTD_Vec256 y) {
+ ZSTD_VecMask res = 0;
+ unsigned i = 0;
+ unsigned l = 0;
+ for (; i < VEC256_NB_SIZE_T; ++i) {
+ const size_t cmp1 = x.vec[i];
+ const size_t cmp2 = y.vec[i];
+ unsigned j = 0;
+ for (; j < sizeof(size_t); ++j, ++l) {
+ if (((cmp1 >> j*8) & 0xFF) == ((cmp2 >> j*8) & 0xFF)) {
+ res |= ((U32)1 << (j+i*sizeof(size_t)));
+ }
+ }
+ }
+ return res;
+}
+
+#endif /* !defined(ZSTD_NO_INTRINSICS) && defined(__SSE2__) */
+
+/* ZSTD_VecMask_next():
+ * Starting from the LSB, returns the idx of the next non-zero bit.
+ * Basically counting the nb of trailing zeroes.
+ */
+static U32 ZSTD_VecMask_next(ZSTD_VecMask val) {
+# if defined(_MSC_VER) /* Visual */
+ unsigned long r=0;
+ return _BitScanForward(&r, val) ? (U32)r : 0;
+# elif defined(__GNUC__) && (__GNUC__ >= 3)
+ return (U32)__builtin_ctz(val);
+# else
+ /* Software ctz version: http://graphics.stanford.edu/~seander/bithacks.html#ZerosOnRightMultLookup */
+ static const U32 multiplyDeBruijnBitPosition[32] =
+ {
+ 0, 1, 28, 2, 29, 14, 24, 3, 30, 22, 20, 15, 25, 17, 4, 8,
+ 31, 27, 13, 23, 21, 19, 16, 7, 26, 12, 18, 6, 11, 5, 10, 9
+ };
+ return multiplyDeBruijnBitPosition[((U32)((v & -(int)v) * 0x077CB531U)) >> 27];
+# endif
+}
+
+/* ZSTD_VecMask_rotateRight():
+ * Rotates a bitfield to the right by "rotation" bits.
+ * If the rotation is greater than totalBits, the returned mask is 0.
+ */
+FORCE_INLINE_TEMPLATE ZSTD_VecMask
+ZSTD_VecMask_rotateRight(ZSTD_VecMask mask, U32 const rotation, U32 const totalBits) {
+ if (rotation == 0)
+ return mask;
+ switch (totalBits) {
+ default:
+ assert(0);
+ case 16:
+ return (mask >> rotation) | (U16)(mask << (16 - rotation));
+ case 32:
+ return (mask >> rotation) | (U32)(mask << (32 - rotation));
+ }
+}
+
+/* ZSTD_row_nextIndex():
+ * Returns the next index to insert at within a tagTable row, and updates the "head"
+ * value to reflect the update. Essentially cycles backwards from [0, {entries per row})
+ */
+FORCE_INLINE_TEMPLATE U32 ZSTD_row_nextIndex(BYTE* const tagRow, U32 const rowMask) {
+ U32 const next = (*tagRow - 1) & rowMask;
+ *tagRow = (BYTE)next;
+ return next;
+}
+
+/* ZSTD_isAligned():
+ * Checks that a pointer is aligned to "align" bytes which must be a power of 2.
+ */
+MEM_STATIC int ZSTD_isAligned(void const* ptr, size_t align) {
+ assert((align & (align - 1)) == 0);
+ return (((size_t)ptr) & (align - 1)) == 0;
+}
+
+/* ZSTD_row_prefetch():
+ * Performs prefetching for the hashTable and tagTable at a given row.
+ */
+FORCE_INLINE_TEMPLATE void ZSTD_row_prefetch(U32 const* hashTable, U16 const* tagTable, U32 const relRow, U32 const rowLog) {
+ PREFETCH_L1(hashTable + relRow);
+ if (rowLog == 5) {
+ PREFETCH_L1(hashTable + relRow + 16);
+ }
+ PREFETCH_L1(tagTable + relRow);
+ assert(rowLog == 4 || rowLog == 5);
+ assert(ZSTD_isAligned(hashTable + relRow, 64)); /* prefetched hash row always 64-byte aligned */
+ assert(ZSTD_isAligned(tagTable + relRow, (size_t)1 << rowLog)); /* prefetched tagRow sits on a multiple of 32 or 64 bytes */
+}
+
+/* ZSTD_row_fillHashCache():
+ * Fill up the hash cache starting at idx, prefetching up to ZSTD_ROW_HASH_CACHE_SIZE entries,
+ * but not beyond iLimit.
+ */
+static void ZSTD_row_fillHashCache(ZSTD_matchState_t* ms, const BYTE* base,
+ U32 const rowLog, U32 const mls,
+ U32 idx, const BYTE* const iLimit)
+{
+ U32 const* const hashTable = ms->hashTable;
+ U16 const* const tagTable = ms->tagTable;
+ U32 const hashLog = ms->rowHashLog;
+ U32 const maxElemsToPrefetch = (base + idx) > iLimit ? 0 : (U32)(iLimit - (base + idx) + 1);
+ U32 const lim = idx + MIN(ZSTD_ROW_HASH_CACHE_SIZE, maxElemsToPrefetch);
+
+ for (; idx < lim; ++idx) {
+ U32 const hash = (U32)ZSTD_hashPtr(base + idx, hashLog + ZSTD_ROW_HASH_TAG_BITS, mls);
+ U32 const row = (hash >> ZSTD_ROW_HASH_TAG_BITS) << rowLog;
+ ZSTD_row_prefetch(hashTable, tagTable, row, rowLog);
+ ms->hashCache[idx & ZSTD_ROW_HASH_CACHE_MASK] = hash;
+ }
+
+ DEBUGLOG(6, "ZSTD_row_fillHashCache(): [%u %u %u %u %u %u %u %u]", ms->hashCache[0], ms->hashCache[1],
+ ms->hashCache[2], ms->hashCache[3], ms->hashCache[4],
+ ms->hashCache[5], ms->hashCache[6], ms->hashCache[7]);
+}
+
+/* ZSTD_row_nextCachedHash():
+ * Returns the hash of base + idx, and replaces the hash in the hash cache with the byte at
+ * base + idx + ZSTD_ROW_HASH_CACHE_SIZE. Also prefetches the appropriate rows from hashTable and tagTable.
+ */
+FORCE_INLINE_TEMPLATE U32 ZSTD_row_nextCachedHash(U32* cache, U32 const* hashTable,
+ U16 const* tagTable, BYTE const* base,
+ U32 idx, U32 const hashLog,
+ U32 const rowLog, U32 const mls)
+{
+ U32 const newHash = (U32)ZSTD_hashPtr(base+idx+ZSTD_ROW_HASH_CACHE_SIZE, hashLog + ZSTD_ROW_HASH_TAG_BITS, mls);
+ U32 const row = (newHash >> ZSTD_ROW_HASH_TAG_BITS) << rowLog;
+ ZSTD_row_prefetch(hashTable, tagTable, row, rowLog);
+ { U32 const hash = cache[idx & ZSTD_ROW_HASH_CACHE_MASK];
+ cache[idx & ZSTD_ROW_HASH_CACHE_MASK] = newHash;
+ return hash;
+ }
+}
+
+/* ZSTD_row_update_internal():
+ * Inserts the byte at ip into the appropriate position in the hash table.
+ * Determines the relative row, and the position within the {16, 32} entry row to insert at.
+ */
+FORCE_INLINE_TEMPLATE void ZSTD_row_update_internal(ZSTD_matchState_t* ms, const BYTE* ip,
+ U32 const mls, U32 const rowLog,
+ U32 const rowMask, U32 const useCache)
+{
+ U32* const hashTable = ms->hashTable;
+ U16* const tagTable = ms->tagTable;
+ U32 const hashLog = ms->rowHashLog;
+ const BYTE* const base = ms->window.base;
+ const U32 target = (U32)(ip - base);
+ U32 idx = ms->nextToUpdate;
+
+ DEBUGLOG(6, "ZSTD_row_update_internal(): nextToUpdate=%u, current=%u", idx, target);
+ for (; idx < target; ++idx) {
+ U32 const hash = useCache ? ZSTD_row_nextCachedHash(ms->hashCache, hashTable, tagTable, base, idx, hashLog, rowLog, mls)
+ : (U32)ZSTD_hashPtr(base + idx, hashLog + ZSTD_ROW_HASH_TAG_BITS, mls);
+ U32 const relRow = (hash >> ZSTD_ROW_HASH_TAG_BITS) << rowLog;
+ U32* const row = hashTable + relRow;
+ BYTE* tagRow = (BYTE*)(tagTable + relRow); /* Though tagTable is laid out as a table of U16, each tag is only 1 byte.
+ Explicit cast allows us to get exact desired position within each row */
+ U32 const pos = ZSTD_row_nextIndex(tagRow, rowMask);
+
+ assert(hash == ZSTD_hashPtr(base + idx, hashLog + ZSTD_ROW_HASH_TAG_BITS, mls));
+ ((BYTE*)tagRow)[pos + ZSTD_ROW_HASH_TAG_OFFSET] = hash & ZSTD_ROW_HASH_TAG_MASK;
+ row[pos] = idx;
+ }
+ ms->nextToUpdate = target;
+}
+
+/* ZSTD_row_update():
+ * External wrapper for ZSTD_row_update_internal(). Used for filling the hashtable during dictionary
+ * processing.
+ */
+void ZSTD_row_update(ZSTD_matchState_t* const ms, const BYTE* ip) {
+ const U32 rowLog = ms->cParams.searchLog < 5 ? 4 : 5;
+ const U32 rowMask = (1u << rowLog) - 1;
+ const U32 mls = MIN(ms->cParams.minMatch, 6 /* mls caps out at 6 */);
+
+ DEBUGLOG(5, "ZSTD_row_update(), rowLog=%u", rowLog);
+ ZSTD_row_update_internal(ms, ip, mls, rowLog, rowMask, 0 /* dont use cache */);
+}
+
+/* Returns a ZSTD_VecMask (U32) that has the nth bit set to 1 if the newly-computed "tag" matches
+ * the hash at the nth position in a row of the tagTable.
+ */
+FORCE_INLINE_TEMPLATE
+ZSTD_VecMask ZSTD_row_getMatchMask(const BYTE* const tagRow, const BYTE tag, const U32 head, const U32 rowEntries) {
+ ZSTD_VecMask matches = 0;
+ if (rowEntries == 16) {
+ ZSTD_Vec128 hashes = ZSTD_Vec128_read(tagRow + ZSTD_ROW_HASH_TAG_OFFSET);
+ ZSTD_Vec128 expandedTags = ZSTD_Vec128_set8(tag);
+ matches = ZSTD_Vec128_cmpMask8(hashes, expandedTags);
+ } else if (rowEntries == 32) {
+ ZSTD_Vec256 hashes = ZSTD_Vec256_read(tagRow + ZSTD_ROW_HASH_TAG_OFFSET);
+ ZSTD_Vec256 expandedTags = ZSTD_Vec256_set8(tag);
+ matches = ZSTD_Vec256_cmpMask8(hashes, expandedTags);
+ } else {
+ assert(0);
+ }
+ /* Each row is a circular buffer beginning at the value of "head". So we must rotate the "matches" bitfield
+ to match up with the actual layout of the entries within the hashTable */
+ return ZSTD_VecMask_rotateRight(matches, head, rowEntries);
+}
+
+/* The high-level approach of the SIMD row based match finder is as follows:
+ * - Figure out where to insert the new entry:
+ * - Generate a hash from a byte along with an additional 1-byte "short hash". The additional byte is our "tag"
+ * - The hashTable is effectively split into groups or "rows" of 16 or 32 entries of U32, and the hash determines
+ * which row to insert into.
+ * - Determine the correct position within the row to insert the entry into. Each row of 16 or 32 can
+ * be considered as a circular buffer with a "head" index that resides in the tagTable.
+ * - Also insert the "tag" into the equivalent row and position in the tagTable.
+ * - Note: The tagTable has 17 or 33 1-byte entries per row, due to 16 or 32 tags, and 1 "head" entry.
+ * The 17 or 33 entry rows are spaced out to occur every 32 or 64 bytes, respectively,
+ * for alignment/performance reasons, leaving some bytes unused.
+ * - Use SIMD to efficiently compare the tags in the tagTable to the 1-byte "short hash" and
+ * generate a bitfield that we can cycle through to check the collisions in the hash table.
+ * - Pick the longest match.
+ */
+FORCE_INLINE_TEMPLATE
+size_t ZSTD_RowFindBestMatch_generic (
+ ZSTD_matchState_t* ms,
+ const BYTE* const ip, const BYTE* const iLimit,
+ size_t* offsetPtr,
+ const U32 mls, const ZSTD_dictMode_e dictMode,
+ const U32 rowLog)
+{
+ U32* const hashTable = ms->hashTable;
+ U16* const tagTable = ms->tagTable;
+ U32* const hashCache = ms->hashCache;
+ const U32 hashLog = ms->rowHashLog;
+ const ZSTD_compressionParameters* const cParams = &ms->cParams;
+ const BYTE* const base = ms->window.base;
+ const BYTE* const dictBase = ms->window.dictBase;
+ const U32 dictLimit = ms->window.dictLimit;
+ const BYTE* const prefixStart = base + dictLimit;
+ const BYTE* const dictEnd = dictBase + dictLimit;
+ const U32 curr = (U32)(ip-base);
+ const U32 maxDistance = 1U << cParams->windowLog;
+ const U32 lowestValid = ms->window.lowLimit;
+ const U32 withinMaxDistance = (curr - lowestValid > maxDistance) ? curr - maxDistance : lowestValid;
+ const U32 isDictionary = (ms->loadedDictEnd != 0);
+ const U32 lowLimit = isDictionary ? lowestValid : withinMaxDistance;
+ const U32 rowEntries = (1U << rowLog);
+ const U32 rowMask = rowEntries - 1;
+ const U32 cappedSearchLog = MIN(cParams->searchLog, rowLog); /* nb of searches is capped at nb entries per row */
+ U32 nbAttempts = 1U << cappedSearchLog;
+ size_t ml=4-1;
+
+ /* DMS/DDS variables that may be referenced laster */
+ const ZSTD_matchState_t* const dms = ms->dictMatchState;
+ size_t ddsIdx;
+ U32 ddsExtraAttempts; /* cctx hash tables are limited in searches, but allow extra searches into DDS */
+ U32 dmsTag;
+ U32* dmsRow;
+ BYTE* dmsTagRow;
+
+ if (dictMode == ZSTD_dedicatedDictSearch) {
+ const U32 ddsHashLog = dms->cParams.hashLog - ZSTD_LAZY_DDSS_BUCKET_LOG;
+ { /* Prefetch DDS hashtable entry */
+ ddsIdx = ZSTD_hashPtr(ip, ddsHashLog, mls) << ZSTD_LAZY_DDSS_BUCKET_LOG;
+ PREFETCH_L1(&dms->hashTable[ddsIdx]);
+ }
+ ddsExtraAttempts = cParams->searchLog > rowLog ? 1U << (cParams->searchLog - rowLog) : 0;
+ }
+
+ if (dictMode == ZSTD_dictMatchState) {
+ /* Prefetch DMS rows */
+ U32* const dmsHashTable = dms->hashTable;
+ U16* const dmsTagTable = dms->tagTable;
+ U32 const dmsHash = (U32)ZSTD_hashPtr(ip, dms->rowHashLog + ZSTD_ROW_HASH_TAG_BITS, mls);
+ U32 const dmsRelRow = (dmsHash >> ZSTD_ROW_HASH_TAG_BITS) << rowLog;
+ dmsTag = dmsHash & ZSTD_ROW_HASH_TAG_MASK;
+ dmsTagRow = (BYTE*)(dmsTagTable + dmsRelRow);
+ dmsRow = dmsHashTable + dmsRelRow;
+ ZSTD_row_prefetch(dmsHashTable, dmsTagTable, dmsRelRow, rowLog);
+ }
+
+ /* Update the hashTable and tagTable up to (but not including) ip */
+ ZSTD_row_update_internal(ms, ip, mls, rowLog, rowMask, 1 /* useCache */);
+ { /* Get the hash for ip, compute the appropriate row */
+ U32 const hash = ZSTD_row_nextCachedHash(hashCache, hashTable, tagTable, base, curr, hashLog, rowLog, mls);
+ U32 const relRow = (hash >> ZSTD_ROW_HASH_TAG_BITS) << rowLog;
+ U32 const tag = hash & ZSTD_ROW_HASH_TAG_MASK;
+ U32* const row = hashTable + relRow;
+ BYTE* tagRow = (BYTE*)(tagTable + relRow);
+ U32 const head = *tagRow & rowMask;
+ U32 matchBuffer[32 /* maximum nb entries per row */];
+ size_t numMatches = 0;
+ size_t currMatch = 0;
+ ZSTD_VecMask matches = ZSTD_row_getMatchMask(tagRow, (BYTE)tag, head, rowEntries);
+
+ /* Cycle through the matches and prefetch */
+ for (; (matches > 0) && (nbAttempts > 0); --nbAttempts, matches &= (matches - 1)) {
+ U32 const matchPos = (head + ZSTD_VecMask_next(matches)) & rowMask;
+ U32 const matchIndex = row[matchPos];
+ assert(numMatches < rowEntries);
+ if (matchIndex < lowLimit)
+ break;
+ if ((dictMode != ZSTD_extDict) || matchIndex >= dictLimit) {
+ PREFETCH_L1(base + matchIndex);
+ } else {
+ PREFETCH_L1(dictBase + matchIndex);
+ }
+ matchBuffer[numMatches++] = matchIndex;
+ }
+
+ /* Speed opt: insert current byte into hashtable too. This allows us to avoid one iteration of the loop
+ in ZSTD_row_update_internal() at the next search. */
+ {
+ U32 const pos = ZSTD_row_nextIndex(tagRow, rowMask);
+ tagRow[pos + ZSTD_ROW_HASH_TAG_OFFSET] = (BYTE)tag;
+ row[pos] = ms->nextToUpdate++;
+ }
+
+ /* Return the longest match */
+ for (; currMatch < numMatches; ++currMatch) {
+ U32 const matchIndex = matchBuffer[currMatch];
+ size_t currentMl=0;
+ assert(matchIndex < curr);
+ assert(matchIndex >= lowLimit);
+
+ if ((dictMode != ZSTD_extDict) || matchIndex >= dictLimit) {
+ const BYTE* const match = base + matchIndex;
+ assert(matchIndex >= dictLimit); /* ensures this is true if dictMode != ZSTD_extDict */
+ if (match[ml] == ip[ml]) /* potentially better */
+ currentMl = ZSTD_count(ip, match, iLimit);
+ } else {
+ const BYTE* const match = dictBase + matchIndex;
+ assert(match+4 <= dictEnd);
+ if (MEM_read32(match) == MEM_read32(ip)) /* assumption : matchIndex <= dictLimit-4 (by table construction) */
+ currentMl = ZSTD_count_2segments(ip+4, match+4, iLimit, dictEnd, prefixStart) + 4;
+ }
+
+ /* Save best solution */
+ if (currentMl > ml) {
+ ml = currentMl;
+ *offsetPtr = curr - matchIndex + ZSTD_REP_MOVE;
+ if (ip+currentMl == iLimit) break; /* best possible, avoids read overflow on next attempt */
+ }
+ }
+ }
+
+ if (dictMode == ZSTD_dedicatedDictSearch) {
+ ml = ZSTD_dedicatedDictSearch_lazy_search(offsetPtr, ml, nbAttempts + ddsExtraAttempts, dms,
+ ip, iLimit, prefixStart, curr, dictLimit, ddsIdx);
+ } else if (dictMode == ZSTD_dictMatchState) {
+ /* TODO: Measure and potentially add prefetching to DMS */
+ const U32 dmsLowestIndex = dms->window.dictLimit;
+ const BYTE* const dmsBase = dms->window.base;
+ const BYTE* const dmsEnd = dms->window.nextSrc;
+ const U32 dmsSize = (U32)(dmsEnd - dmsBase);
+ const U32 dmsIndexDelta = dictLimit - dmsSize;
+
+ { U32 const head = *dmsTagRow & rowMask;
+ U32 matchBuffer[32 /* maximum nb row entries */];
+ size_t numMatches = 0;
+ size_t currMatch = 0;
+ ZSTD_VecMask matches = ZSTD_row_getMatchMask(dmsTagRow, (BYTE)dmsTag, head, rowEntries);
+
+ for (; (matches > 0) && (nbAttempts > 0); --nbAttempts, matches &= (matches - 1)) {
+ U32 const matchPos = (head + ZSTD_VecMask_next(matches)) & rowMask;
+ U32 const matchIndex = dmsRow[matchPos];
+ if (matchIndex < dmsLowestIndex)
+ break;
+ PREFETCH_L1(dmsBase + matchIndex);
+ matchBuffer[numMatches++] = matchIndex;
+ }
+
+ /* Return the longest match */
+ for (; currMatch < numMatches; ++currMatch) {
+ U32 const matchIndex = matchBuffer[currMatch];
+ size_t currentMl=0;
+ assert(matchIndex >= dmsLowestIndex);
+ assert(matchIndex < curr);
+
+ { const BYTE* const match = dmsBase + matchIndex;
+ assert(match+4 <= dmsEnd);
+ if (MEM_read32(match) == MEM_read32(ip))
+ currentMl = ZSTD_count_2segments(ip+4, match+4, iLimit, dmsEnd, prefixStart) + 4;
+ }
+
+ if (currentMl > ml) {
+ ml = currentMl;
+ *offsetPtr = curr - (matchIndex + dmsIndexDelta) + ZSTD_REP_MOVE;
+ if (ip+currentMl == iLimit) break;
+ }
+ }
+ }
+ }
+ return ml;
+}
+
+/* Inlining is important to hardwire a hot branch (template emulation) */
+FORCE_INLINE_TEMPLATE size_t ZSTD_RowFindBestMatch_selectMLS (
+ ZSTD_matchState_t* ms,
+ const BYTE* ip, const BYTE* const iLimit,
+ const ZSTD_dictMode_e dictMode, size_t* offsetPtr, const U32 rowLog)
+{
+ switch(ms->cParams.minMatch)
+ {
+ default : /* includes case 3 */
+ case 4 : return ZSTD_RowFindBestMatch_generic(ms, ip, iLimit, offsetPtr, 4, dictMode, rowLog);
+ case 5 : return ZSTD_RowFindBestMatch_generic(ms, ip, iLimit, offsetPtr, 5, dictMode, rowLog);
+ case 7 :
+ case 6 : return ZSTD_RowFindBestMatch_generic(ms, ip, iLimit, offsetPtr, 6, dictMode, rowLog);
+ }
+}
+
+FORCE_INLINE_TEMPLATE size_t ZSTD_RowFindBestMatch_selectRowLog (
+ ZSTD_matchState_t* ms,
+ const BYTE* ip, const BYTE* const iLimit,
+ size_t* offsetPtr)
+{
+ const U32 cappedSearchLog = MIN(ms->cParams.searchLog, 5);
+ switch(cappedSearchLog)
+ {
+ default :
+ case 4 : return ZSTD_RowFindBestMatch_selectMLS(ms, ip, iLimit, ZSTD_noDict, offsetPtr, 4);
+ case 5 : return ZSTD_RowFindBestMatch_selectMLS(ms, ip, iLimit, ZSTD_noDict, offsetPtr, 5);
+ }
+}
+
+FORCE_INLINE_TEMPLATE size_t ZSTD_RowFindBestMatch_dictMatchState_selectRowLog(
+ ZSTD_matchState_t* ms,
+ const BYTE* ip, const BYTE* const iLimit,
+ size_t* offsetPtr)
+{
+ const U32 cappedSearchLog = MIN(ms->cParams.searchLog, 5);
+ switch(cappedSearchLog)
+ {
+ default :
+ case 4 : return ZSTD_RowFindBestMatch_selectMLS(ms, ip, iLimit, ZSTD_dictMatchState, offsetPtr, 4);
+ case 5 : return ZSTD_RowFindBestMatch_selectMLS(ms, ip, iLimit, ZSTD_dictMatchState, offsetPtr, 5);
+ }
+}
+
+FORCE_INLINE_TEMPLATE size_t ZSTD_RowFindBestMatch_dedicatedDictSearch_selectRowLog(
+ ZSTD_matchState_t* ms,
+ const BYTE* ip, const BYTE* const iLimit,
+ size_t* offsetPtr)
+{
+ const U32 cappedSearchLog = MIN(ms->cParams.searchLog, 5);
+ switch(cappedSearchLog)
+ {
+ default :
+ case 4 : return ZSTD_RowFindBestMatch_selectMLS(ms, ip, iLimit, ZSTD_dedicatedDictSearch, offsetPtr, 4);
+ case 5 : return ZSTD_RowFindBestMatch_selectMLS(ms, ip, iLimit, ZSTD_dedicatedDictSearch, offsetPtr, 5);
+ }
+}
+
+FORCE_INLINE_TEMPLATE size_t ZSTD_RowFindBestMatch_extDict_selectRowLog (
+ ZSTD_matchState_t* ms,
+ const BYTE* ip, const BYTE* const iLimit,
+ size_t* offsetPtr)
+{
+ const U32 cappedSearchLog = MIN(ms->cParams.searchLog, 5);
+ switch(cappedSearchLog)
+ {
+ default :
+ case 4 : return ZSTD_RowFindBestMatch_selectMLS(ms, ip, iLimit, ZSTD_extDict, offsetPtr, 4);
+ case 5 : return ZSTD_RowFindBestMatch_selectMLS(ms, ip, iLimit, ZSTD_extDict, offsetPtr, 5);
+ }
+}
+
/* *******************************
* Common parser - lazy strategy
*********************************/
-typedef enum { search_hashChain, search_binaryTree } searchMethod_e;
+typedef enum { search_hashChain=0, search_binaryTree=1, search_rowHash=2 } searchMethod_e;
FORCE_INLINE_TEMPLATE size_t
ZSTD_compressBlock_lazy_generic(
@@ -863,10 +1525,11 @@ ZSTD_compressBlock_lazy_generic(
const BYTE* ip = istart;
const BYTE* anchor = istart;
const BYTE* const iend = istart + srcSize;
- const BYTE* const ilimit = iend - 8;
+ const BYTE* const ilimit = searchMethod == search_rowHash ? iend - 8 - ZSTD_ROW_HASH_CACHE_SIZE : iend - 8;
const BYTE* const base = ms->window.base;
const U32 prefixLowestIndex = ms->window.dictLimit;
const BYTE* const prefixLowest = base + prefixLowestIndex;
+ const U32 rowLog = ms->cParams.searchLog < 5 ? 4 : 5;
typedef size_t (*searchMax_f)(
ZSTD_matchState_t* ms,
@@ -878,26 +1541,30 @@ ZSTD_compressBlock_lazy_generic(
* that should never occur (extDict modes go to the other implementation
* below and there is no DDSS for binary tree search yet).
*/
- const searchMax_f searchFuncs[4][2] = {
+ const searchMax_f searchFuncs[4][3] = {
{
ZSTD_HcFindBestMatch_selectMLS,
- ZSTD_BtFindBestMatch_selectMLS
+ ZSTD_BtFindBestMatch_selectMLS,
+ ZSTD_RowFindBestMatch_selectRowLog
},
{
NULL,
+ NULL,
NULL
},
{
ZSTD_HcFindBestMatch_dictMatchState_selectMLS,
- ZSTD_BtFindBestMatch_dictMatchState_selectMLS
+ ZSTD_BtFindBestMatch_dictMatchState_selectMLS,
+ ZSTD_RowFindBestMatch_dictMatchState_selectRowLog
},
{
ZSTD_HcFindBestMatch_dedicatedDictSearch_selectMLS,
- NULL
+ NULL,
+ ZSTD_RowFindBestMatch_dedicatedDictSearch_selectRowLog
}
};
- searchMax_f const searchMax = searchFuncs[dictMode][searchMethod == search_binaryTree];
+ searchMax_f const searchMax = searchFuncs[dictMode][(int)searchMethod];
U32 offset_1 = rep[0], offset_2 = rep[1], savedOffset=0;
const int isDMS = dictMode == ZSTD_dictMatchState;
@@ -915,9 +1582,7 @@ ZSTD_compressBlock_lazy_generic(
assert(searchMax != NULL);
- DEBUGLOG(5, "ZSTD_compressBlock_lazy_generic (dictMode=%u)", (U32)dictMode);
-
- /* init */
+ DEBUGLOG(5, "ZSTD_compressBlock_lazy_generic (dictMode=%u) (searchFunc=%u)", (U32)dictMode, (U32)searchMethod);
ip += (dictAndPrefixLength == 0);
if (dictMode == ZSTD_noDict) {
U32 const curr = (U32)(ip - base);
@@ -933,6 +1598,12 @@ ZSTD_compressBlock_lazy_generic(
assert(offset_2 <= dictAndPrefixLength);
}
+ if (searchMethod == search_rowHash) {
+ ZSTD_row_fillHashCache(ms, base, rowLog,
+ MIN(ms->cParams.minMatch, 6 /* mls caps out at 6 */),
+ ms->nextToUpdate, ilimit);
+ }
+
/* Match Loop */
#if defined(__GNUC__) && defined(__x86_64__)
/* I've measured random a 5% speed loss on levels 5 & 6 (greedy) when the
@@ -1198,6 +1869,70 @@ size_t ZSTD_compressBlock_greedy_dedicatedDictSearch(
return ZSTD_compressBlock_lazy_generic(ms, seqStore, rep, src, srcSize, search_hashChain, 0, ZSTD_dedicatedDictSearch);
}
+/* Row-based matchfinder */
+size_t ZSTD_compressBlock_lazy2_row(
+ ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
+ void const* src, size_t srcSize)
+{
+ return ZSTD_compressBlock_lazy_generic(ms, seqStore, rep, src, srcSize, search_rowHash, 2, ZSTD_noDict);
+}
+
+size_t ZSTD_compressBlock_lazy_row(
+ ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
+ void const* src, size_t srcSize)
+{
+ return ZSTD_compressBlock_lazy_generic(ms, seqStore, rep, src, srcSize, search_rowHash, 1, ZSTD_noDict);
+}
+
+size_t ZSTD_compressBlock_greedy_row(
+ ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
+ void const* src, size_t srcSize)
+{
+ return ZSTD_compressBlock_lazy_generic(ms, seqStore, rep, src, srcSize, search_rowHash, 0, ZSTD_noDict);
+}
+
+size_t ZSTD_compressBlock_lazy2_dictMatchState_row(
+ ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
+ void const* src, size_t srcSize)
+{
+ return ZSTD_compressBlock_lazy_generic(ms, seqStore, rep, src, srcSize, search_rowHash, 2, ZSTD_dictMatchState);
+}
+
+size_t ZSTD_compressBlock_lazy_dictMatchState_row(
+ ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
+ void const* src, size_t srcSize)
+{
+ return ZSTD_compressBlock_lazy_generic(ms, seqStore, rep, src, srcSize, search_rowHash, 1, ZSTD_dictMatchState);
+}
+
+size_t ZSTD_compressBlock_greedy_dictMatchState_row(
+ ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
+ void const* src, size_t srcSize)
+{
+ return ZSTD_compressBlock_lazy_generic(ms, seqStore, rep, src, srcSize, search_rowHash, 0, ZSTD_dictMatchState);
+}
+
+
+size_t ZSTD_compressBlock_lazy2_dedicatedDictSearch_row(
+ ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
+ void const* src, size_t srcSize)
+{
+ return ZSTD_compressBlock_lazy_generic(ms, seqStore, rep, src, srcSize, search_rowHash, 2, ZSTD_dedicatedDictSearch);
+}
+
+size_t ZSTD_compressBlock_lazy_dedicatedDictSearch_row(
+ ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
+ void const* src, size_t srcSize)
+{
+ return ZSTD_compressBlock_lazy_generic(ms, seqStore, rep, src, srcSize, search_rowHash, 1, ZSTD_dedicatedDictSearch);
+}
+
+size_t ZSTD_compressBlock_greedy_dedicatedDictSearch_row(
+ ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
+ void const* src, size_t srcSize)
+{
+ return ZSTD_compressBlock_lazy_generic(ms, seqStore, rep, src, srcSize, search_rowHash, 0, ZSTD_dedicatedDictSearch);
+}
FORCE_INLINE_TEMPLATE
size_t ZSTD_compressBlock_lazy_extDict_generic(
@@ -1210,7 +1945,7 @@ size_t ZSTD_compressBlock_lazy_extDict_generic(
const BYTE* ip = istart;
const BYTE* anchor = istart;
const BYTE* const iend = istart + srcSize;
- const BYTE* const ilimit = iend - 8;
+ const BYTE* const ilimit = searchMethod == search_rowHash ? iend - 8 - ZSTD_ROW_HASH_CACHE_SIZE : iend - 8;
const BYTE* const base = ms->window.base;
const U32 dictLimit = ms->window.dictLimit;
const BYTE* const prefixStart = base + dictLimit;
@@ -1218,18 +1953,28 @@ size_t ZSTD_compressBlock_lazy_extDict_generic(
const BYTE* const dictEnd = dictBase + dictLimit;
const BYTE* const dictStart = dictBase + ms->window.lowLimit;
const U32 windowLog = ms->cParams.windowLog;
+ const U32 rowLog = ms->cParams.searchLog < 5 ? 4 : 5;
typedef size_t (*searchMax_f)(
ZSTD_matchState_t* ms,
const BYTE* ip, const BYTE* iLimit, size_t* offsetPtr);
- searchMax_f searchMax = searchMethod==search_binaryTree ? ZSTD_BtFindBestMatch_extDict_selectMLS : ZSTD_HcFindBestMatch_extDict_selectMLS;
-
+ const searchMax_f searchFuncs[3] = {
+ ZSTD_HcFindBestMatch_extDict_selectMLS,
+ ZSTD_BtFindBestMatch_extDict_selectMLS,
+ ZSTD_RowFindBestMatch_extDict_selectRowLog
+ };
+ searchMax_f searchMax = searchFuncs[(int)searchMethod];
U32 offset_1 = rep[0], offset_2 = rep[1];
- DEBUGLOG(5, "ZSTD_compressBlock_lazy_extDict_generic");
+ DEBUGLOG(5, "ZSTD_compressBlock_lazy_extDict_generic (searchFunc=%u)", (U32)searchMethod);
/* init */
ip += (ip == prefixStart);
+ if (searchMethod == search_rowHash) {
+ ZSTD_row_fillHashCache(ms, base, rowLog,
+ MIN(ms->cParams.minMatch, 6 /* mls caps out at 6 */),
+ ms->nextToUpdate, ilimit);
+ }
/* Match Loop */
#if defined(__GNUC__) && defined(__x86_64__)
@@ -1249,7 +1994,8 @@ size_t ZSTD_compressBlock_lazy_extDict_generic(
const U32 repIndex = (U32)(curr+1 - offset_1);
const BYTE* const repBase = repIndex < dictLimit ? dictBase : base;
const BYTE* const repMatch = repBase + repIndex;
- if (((U32)((dictLimit-1) - repIndex) >= 3) & (repIndex > windowLow)) /* intentional overflow */
+ if ( ((U32)((dictLimit-1) - repIndex) >= 3) /* intentional overflow */
+ & (offset_1 < curr+1 - windowLow) ) /* note: we are searching at curr+1 */
if (MEM_read32(ip+1) == MEM_read32(repMatch)) {
/* repcode detected we should take it */
const BYTE* const repEnd = repIndex < dictLimit ? dictEnd : iend;
@@ -1280,7 +2026,8 @@ size_t ZSTD_compressBlock_lazy_extDict_generic(
const U32 repIndex = (U32)(curr - offset_1);
const BYTE* const repBase = repIndex < dictLimit ? dictBase : base;
const BYTE* const repMatch = repBase + repIndex;
- if (((U32)((dictLimit-1) - repIndex) >= 3) & (repIndex > windowLow)) /* intentional overflow */
+ if ( ((U32)((dictLimit-1) - repIndex) >= 3) /* intentional overflow : do not test positions overlapping 2 memory segments */
+ & (offset_1 < curr - windowLow) ) /* equivalent to `curr > repIndex >= windowLow` */
if (MEM_read32(ip) == MEM_read32(repMatch)) {
/* repcode detected */
const BYTE* const repEnd = repIndex < dictLimit ? dictEnd : iend;
@@ -1311,7 +2058,8 @@ size_t ZSTD_compressBlock_lazy_extDict_generic(
const U32 repIndex = (U32)(curr - offset_1);
const BYTE* const repBase = repIndex < dictLimit ? dictBase : base;
const BYTE* const repMatch = repBase + repIndex;
- if (((U32)((dictLimit-1) - repIndex) >= 3) & (repIndex > windowLow)) /* intentional overflow */
+ if ( ((U32)((dictLimit-1) - repIndex) >= 3) /* intentional overflow : do not test positions overlapping 2 memory segments */
+ & (offset_1 < curr - windowLow) ) /* equivalent to `curr > repIndex >= windowLow` */
if (MEM_read32(ip) == MEM_read32(repMatch)) {
/* repcode detected */
const BYTE* const repEnd = repIndex < dictLimit ? dictEnd : iend;
@@ -1357,7 +2105,8 @@ _storeSequence:
const U32 repIndex = repCurrent - offset_2;
const BYTE* const repBase = repIndex < dictLimit ? dictBase : base;
const BYTE* const repMatch = repBase + repIndex;
- if (((U32)((dictLimit-1) - repIndex) >= 3) & (repIndex > windowLow)) /* intentional overflow */
+ if ( ((U32)((dictLimit-1) - repIndex) >= 3) /* intentional overflow : do not test positions overlapping 2 memory segments */
+ & (offset_2 < repCurrent - windowLow) ) /* equivalent to `curr > repIndex >= windowLow` */
if (MEM_read32(ip) == MEM_read32(repMatch)) {
/* repcode detected we should take it */
const BYTE* const repEnd = repIndex < dictLimit ? dictEnd : iend;
@@ -1410,3 +2159,26 @@ size_t ZSTD_compressBlock_btlazy2_extDict(
{
return ZSTD_compressBlock_lazy_extDict_generic(ms, seqStore, rep, src, srcSize, search_binaryTree, 2);
}
+
+size_t ZSTD_compressBlock_greedy_extDict_row(
+ ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
+ void const* src, size_t srcSize)
+{
+ return ZSTD_compressBlock_lazy_extDict_generic(ms, seqStore, rep, src, srcSize, search_rowHash, 0);
+}
+
+size_t ZSTD_compressBlock_lazy_extDict_row(
+ ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
+ void const* src, size_t srcSize)
+
+{
+ return ZSTD_compressBlock_lazy_extDict_generic(ms, seqStore, rep, src, srcSize, search_rowHash, 1);
+}
+
+size_t ZSTD_compressBlock_lazy2_extDict_row(
+ ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
+ void const* src, size_t srcSize)
+
+{
+ return ZSTD_compressBlock_lazy_extDict_generic(ms, seqStore, rep, src, srcSize, search_rowHash, 2);
+}
diff --git a/thirdparty/zstd/compress/zstd_lazy.h b/thirdparty/zstd/compress/zstd_lazy.h
index d0214d5e73..150f7b390b 100644
--- a/thirdparty/zstd/compress/zstd_lazy.h
+++ b/thirdparty/zstd/compress/zstd_lazy.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
@@ -26,6 +26,7 @@ extern "C" {
#define ZSTD_LAZY_DDSS_BUCKET_LOG 2
U32 ZSTD_insertAndFindFirstIndex(ZSTD_matchState_t* ms, const BYTE* ip);
+void ZSTD_row_update(ZSTD_matchState_t* const ms, const BYTE* ip);
void ZSTD_dedicatedDictSearch_lazy_loadDictionary(ZSTD_matchState_t* ms, const BYTE* const ip);
@@ -43,6 +44,15 @@ size_t ZSTD_compressBlock_lazy(
size_t ZSTD_compressBlock_greedy(
ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
void const* src, size_t srcSize);
+size_t ZSTD_compressBlock_lazy2_row(
+ ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
+ void const* src, size_t srcSize);
+size_t ZSTD_compressBlock_lazy_row(
+ ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
+ void const* src, size_t srcSize);
+size_t ZSTD_compressBlock_greedy_row(
+ ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
+ void const* src, size_t srcSize);
size_t ZSTD_compressBlock_btlazy2_dictMatchState(
ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
@@ -56,6 +66,15 @@ size_t ZSTD_compressBlock_lazy_dictMatchState(
size_t ZSTD_compressBlock_greedy_dictMatchState(
ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
void const* src, size_t srcSize);
+size_t ZSTD_compressBlock_lazy2_dictMatchState_row(
+ ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
+ void const* src, size_t srcSize);
+size_t ZSTD_compressBlock_lazy_dictMatchState_row(
+ ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
+ void const* src, size_t srcSize);
+size_t ZSTD_compressBlock_greedy_dictMatchState_row(
+ ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
+ void const* src, size_t srcSize);
size_t ZSTD_compressBlock_lazy2_dedicatedDictSearch(
ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
@@ -66,6 +85,15 @@ size_t ZSTD_compressBlock_lazy_dedicatedDictSearch(
size_t ZSTD_compressBlock_greedy_dedicatedDictSearch(
ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
void const* src, size_t srcSize);
+size_t ZSTD_compressBlock_lazy2_dedicatedDictSearch_row(
+ ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
+ void const* src, size_t srcSize);
+size_t ZSTD_compressBlock_lazy_dedicatedDictSearch_row(
+ ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
+ void const* src, size_t srcSize);
+size_t ZSTD_compressBlock_greedy_dedicatedDictSearch_row(
+ ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
+ void const* src, size_t srcSize);
size_t ZSTD_compressBlock_greedy_extDict(
ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
@@ -76,9 +104,19 @@ size_t ZSTD_compressBlock_lazy_extDict(
size_t ZSTD_compressBlock_lazy2_extDict(
ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
void const* src, size_t srcSize);
+size_t ZSTD_compressBlock_greedy_extDict_row(
+ ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
+ void const* src, size_t srcSize);
+size_t ZSTD_compressBlock_lazy_extDict_row(
+ ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
+ void const* src, size_t srcSize);
+size_t ZSTD_compressBlock_lazy2_extDict_row(
+ ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
+ void const* src, size_t srcSize);
size_t ZSTD_compressBlock_btlazy2_extDict(
ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
void const* src, size_t srcSize);
+
#if defined (__cplusplus)
}
diff --git a/thirdparty/zstd/compress/zstd_ldm.c b/thirdparty/zstd/compress/zstd_ldm.c
index 3f3d7c46ab..fa4ebeabd7 100644
--- a/thirdparty/zstd/compress/zstd_ldm.c
+++ b/thirdparty/zstd/compress/zstd_ldm.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
@@ -11,13 +11,126 @@
#include "zstd_ldm.h"
#include "../common/debug.h"
+#include "../common/xxhash.h"
#include "zstd_fast.h" /* ZSTD_fillHashTable() */
#include "zstd_double_fast.h" /* ZSTD_fillDoubleHashTable() */
+#include "zstd_ldm_geartab.h"
#define LDM_BUCKET_SIZE_LOG 3
#define LDM_MIN_MATCH_LENGTH 64
#define LDM_HASH_RLOG 7
-#define LDM_HASH_CHAR_OFFSET 10
+
+typedef struct {
+ U64 rolling;
+ U64 stopMask;
+} ldmRollingHashState_t;
+
+/** ZSTD_ldm_gear_init():
+ *
+ * Initializes the rolling hash state such that it will honor the
+ * settings in params. */
+static void ZSTD_ldm_gear_init(ldmRollingHashState_t* state, ldmParams_t const* params)
+{
+ unsigned maxBitsInMask = MIN(params->minMatchLength, 64);
+ unsigned hashRateLog = params->hashRateLog;
+
+ state->rolling = ~(U32)0;
+
+ /* The choice of the splitting criterion is subject to two conditions:
+ * 1. it has to trigger on average every 2^(hashRateLog) bytes;
+ * 2. ideally, it has to depend on a window of minMatchLength bytes.
+ *
+ * In the gear hash algorithm, bit n depends on the last n bytes;
+ * so in order to obtain a good quality splitting criterion it is
+ * preferable to use bits with high weight.
+ *
+ * To match condition 1 we use a mask with hashRateLog bits set
+ * and, because of the previous remark, we make sure these bits
+ * have the highest possible weight while still respecting
+ * condition 2.
+ */
+ if (hashRateLog > 0 && hashRateLog <= maxBitsInMask) {
+ state->stopMask = (((U64)1 << hashRateLog) - 1) << (maxBitsInMask - hashRateLog);
+ } else {
+ /* In this degenerate case we simply honor the hash rate. */
+ state->stopMask = ((U64)1 << hashRateLog) - 1;
+ }
+}
+
+/** ZSTD_ldm_gear_reset()
+ * Feeds [data, data + minMatchLength) into the hash without registering any
+ * splits. This effectively resets the hash state. This is used when skipping
+ * over data, either at the beginning of a block, or skipping sections.
+ */
+static void ZSTD_ldm_gear_reset(ldmRollingHashState_t* state,
+ BYTE const* data, size_t minMatchLength)
+{
+ U64 hash = state->rolling;
+ size_t n = 0;
+
+#define GEAR_ITER_ONCE() do { \
+ hash = (hash << 1) + ZSTD_ldm_gearTab[data[n] & 0xff]; \
+ n += 1; \
+ } while (0)
+ while (n + 3 < minMatchLength) {
+ GEAR_ITER_ONCE();
+ GEAR_ITER_ONCE();
+ GEAR_ITER_ONCE();
+ GEAR_ITER_ONCE();
+ }
+ while (n < minMatchLength) {
+ GEAR_ITER_ONCE();
+ }
+#undef GEAR_ITER_ONCE
+}
+
+/** ZSTD_ldm_gear_feed():
+ *
+ * Registers in the splits array all the split points found in the first
+ * size bytes following the data pointer. This function terminates when
+ * either all the data has been processed or LDM_BATCH_SIZE splits are
+ * present in the splits array.
+ *
+ * Precondition: The splits array must not be full.
+ * Returns: The number of bytes processed. */
+static size_t ZSTD_ldm_gear_feed(ldmRollingHashState_t* state,
+ BYTE const* data, size_t size,
+ size_t* splits, unsigned* numSplits)
+{
+ size_t n;
+ U64 hash, mask;
+
+ hash = state->rolling;
+ mask = state->stopMask;
+ n = 0;
+
+#define GEAR_ITER_ONCE() do { \
+ hash = (hash << 1) + ZSTD_ldm_gearTab[data[n] & 0xff]; \
+ n += 1; \
+ if (UNLIKELY((hash & mask) == 0)) { \
+ splits[*numSplits] = n; \
+ *numSplits += 1; \
+ if (*numSplits == LDM_BATCH_SIZE) \
+ goto done; \
+ } \
+ } while (0)
+
+ while (n + 3 < size) {
+ GEAR_ITER_ONCE();
+ GEAR_ITER_ONCE();
+ GEAR_ITER_ONCE();
+ GEAR_ITER_ONCE();
+ }
+ while (n < size) {
+ GEAR_ITER_ONCE();
+ }
+
+#undef GEAR_ITER_ONCE
+
+done:
+ state->rolling = hash;
+ return n;
+}
void ZSTD_ldm_adjustParameters(ldmParams_t* params,
ZSTD_compressionParameters const* cParams)
@@ -54,41 +167,6 @@ size_t ZSTD_ldm_getMaxNbSeq(ldmParams_t params, size_t maxChunkSize)
return params.enableLdm ? (maxChunkSize / params.minMatchLength) : 0;
}
-/** ZSTD_ldm_getSmallHash() :
- * numBits should be <= 32
- * If numBits==0, returns 0.
- * @return : the most significant numBits of value. */
-static U32 ZSTD_ldm_getSmallHash(U64 value, U32 numBits)
-{
- assert(numBits <= 32);
- return numBits == 0 ? 0 : (U32)(value >> (64 - numBits));
-}
-
-/** ZSTD_ldm_getChecksum() :
- * numBitsToDiscard should be <= 32
- * @return : the next most significant 32 bits after numBitsToDiscard */
-static U32 ZSTD_ldm_getChecksum(U64 hash, U32 numBitsToDiscard)
-{
- assert(numBitsToDiscard <= 32);
- return (hash >> (64 - 32 - numBitsToDiscard)) & 0xFFFFFFFF;
-}
-
-/** ZSTD_ldm_getTag() ;
- * Given the hash, returns the most significant numTagBits bits
- * after (32 + hbits) bits.
- *
- * If there are not enough bits remaining, return the last
- * numTagBits bits. */
-static U32 ZSTD_ldm_getTag(U64 hash, U32 hbits, U32 numTagBits)
-{
- assert(numTagBits < 32 && hbits <= 32);
- if (32 - hbits < numTagBits) {
- return hash & (((U32)1 << numTagBits) - 1);
- } else {
- return (hash >> (32 - hbits - numTagBits)) & (((U32)1 << numTagBits) - 1);
- }
-}
-
/** ZSTD_ldm_getBucket() :
* Returns a pointer to the start of the bucket associated with hash. */
static ldmEntry_t* ZSTD_ldm_getBucket(
@@ -103,38 +181,12 @@ static void ZSTD_ldm_insertEntry(ldmState_t* ldmState,
size_t const hash, const ldmEntry_t entry,
ldmParams_t const ldmParams)
{
- BYTE* const bucketOffsets = ldmState->bucketOffsets;
- *(ZSTD_ldm_getBucket(ldmState, hash, ldmParams) + bucketOffsets[hash]) = entry;
- bucketOffsets[hash]++;
- bucketOffsets[hash] &= ((U32)1 << ldmParams.bucketSizeLog) - 1;
-}
+ BYTE* const pOffset = ldmState->bucketOffsets + hash;
+ unsigned const offset = *pOffset;
+
+ *(ZSTD_ldm_getBucket(ldmState, hash, ldmParams) + offset) = entry;
+ *pOffset = (BYTE)((offset + 1) & ((1u << ldmParams.bucketSizeLog) - 1));
-/** ZSTD_ldm_makeEntryAndInsertByTag() :
- *
- * Gets the small hash, checksum, and tag from the rollingHash.
- *
- * If the tag matches (1 << ldmParams.hashRateLog)-1, then
- * creates an ldmEntry from the offset, and inserts it into the hash table.
- *
- * hBits is the length of the small hash, which is the most significant hBits
- * of rollingHash. The checksum is the next 32 most significant bits, followed
- * by ldmParams.hashRateLog bits that make up the tag. */
-static void ZSTD_ldm_makeEntryAndInsertByTag(ldmState_t* ldmState,
- U64 const rollingHash,
- U32 const hBits,
- U32 const offset,
- ldmParams_t const ldmParams)
-{
- U32 const tag = ZSTD_ldm_getTag(rollingHash, hBits, ldmParams.hashRateLog);
- U32 const tagMask = ((U32)1 << ldmParams.hashRateLog) - 1;
- if (tag == tagMask) {
- U32 const hash = ZSTD_ldm_getSmallHash(rollingHash, hBits);
- U32 const checksum = ZSTD_ldm_getChecksum(rollingHash, hBits);
- ldmEntry_t entry;
- entry.offset = offset;
- entry.checksum = checksum;
- ZSTD_ldm_insertEntry(ldmState, hash, entry, ldmParams);
- }
}
/** ZSTD_ldm_countBackwardsMatch() :
@@ -212,43 +264,42 @@ static size_t ZSTD_ldm_fillFastTables(ZSTD_matchState_t* ms,
return 0;
}
-/** ZSTD_ldm_fillLdmHashTable() :
- *
- * Fills hashTable from (lastHashed + 1) to iend (non-inclusive).
- * lastHash is the rolling hash that corresponds to lastHashed.
- *
- * Returns the rolling hash corresponding to position iend-1. */
-static U64 ZSTD_ldm_fillLdmHashTable(ldmState_t* state,
- U64 lastHash, const BYTE* lastHashed,
- const BYTE* iend, const BYTE* base,
- U32 hBits, ldmParams_t const ldmParams)
-{
- U64 rollingHash = lastHash;
- const BYTE* cur = lastHashed + 1;
-
- while (cur < iend) {
- rollingHash = ZSTD_rollingHash_rotate(rollingHash, cur[-1],
- cur[ldmParams.minMatchLength-1],
- state->hashPower);
- ZSTD_ldm_makeEntryAndInsertByTag(state,
- rollingHash, hBits,
- (U32)(cur - base), ldmParams);
- ++cur;
- }
- return rollingHash;
-}
-
void ZSTD_ldm_fillHashTable(
- ldmState_t* state, const BYTE* ip,
+ ldmState_t* ldmState, const BYTE* ip,
const BYTE* iend, ldmParams_t const* params)
{
+ U32 const minMatchLength = params->minMatchLength;
+ U32 const hBits = params->hashLog - params->bucketSizeLog;
+ BYTE const* const base = ldmState->window.base;
+ BYTE const* const istart = ip;
+ ldmRollingHashState_t hashState;
+ size_t* const splits = ldmState->splitIndices;
+ unsigned numSplits;
+
DEBUGLOG(5, "ZSTD_ldm_fillHashTable");
- if ((size_t)(iend - ip) >= params->minMatchLength) {
- U64 startingHash = ZSTD_rollingHash_compute(ip, params->minMatchLength);
- ZSTD_ldm_fillLdmHashTable(
- state, startingHash, ip, iend - params->minMatchLength, state->window.base,
- params->hashLog - params->bucketSizeLog,
- *params);
+
+ ZSTD_ldm_gear_init(&hashState, params);
+ while (ip < iend) {
+ size_t hashed;
+ unsigned n;
+
+ numSplits = 0;
+ hashed = ZSTD_ldm_gear_feed(&hashState, ip, iend - ip, splits, &numSplits);
+
+ for (n = 0; n < numSplits; n++) {
+ if (ip + splits[n] >= istart + minMatchLength) {
+ BYTE const* const split = ip + splits[n] - minMatchLength;
+ U64 const xxhash = XXH64(split, minMatchLength, 0);
+ U32 const hash = (U32)(xxhash & (((U32)1 << hBits) - 1));
+ ldmEntry_t entry;
+
+ entry.offset = (U32)(split - base);
+ entry.checksum = (U32)(xxhash >> 32);
+ ZSTD_ldm_insertEntry(ldmState, hash, entry, *params);
+ }
+ }
+
+ ip += hashed;
}
}
@@ -274,11 +325,8 @@ static size_t ZSTD_ldm_generateSequences_internal(
/* LDM parameters */
int const extDict = ZSTD_window_hasExtDict(ldmState->window);
U32 const minMatchLength = params->minMatchLength;
- U64 const hashPower = ldmState->hashPower;
+ U32 const entsPerBucket = 1U << params->bucketSizeLog;
U32 const hBits = params->hashLog - params->bucketSizeLog;
- U32 const ldmBucketSize = 1U << params->bucketSizeLog;
- U32 const hashRateLog = params->hashRateLog;
- U32 const ldmTagMask = (1U << params->hashRateLog) - 1;
/* Prefix and extDict parameters */
U32 const dictLimit = ldmState->window.dictLimit;
U32 const lowestIndex = extDict ? ldmState->window.lowLimit : dictLimit;
@@ -290,45 +338,69 @@ static size_t ZSTD_ldm_generateSequences_internal(
/* Input bounds */
BYTE const* const istart = (BYTE const*)src;
BYTE const* const iend = istart + srcSize;
- BYTE const* const ilimit = iend - MAX(minMatchLength, HASH_READ_SIZE);
+ BYTE const* const ilimit = iend - HASH_READ_SIZE;
/* Input positions */
BYTE const* anchor = istart;
BYTE const* ip = istart;
- /* Rolling hash */
- BYTE const* lastHashed = NULL;
- U64 rollingHash = 0;
-
- while (ip <= ilimit) {
- size_t mLength;
- U32 const curr = (U32)(ip - base);
- size_t forwardMatchLength = 0, backwardMatchLength = 0;
- ldmEntry_t* bestEntry = NULL;
- if (ip != istart) {
- rollingHash = ZSTD_rollingHash_rotate(rollingHash, lastHashed[0],
- lastHashed[minMatchLength],
- hashPower);
- } else {
- rollingHash = ZSTD_rollingHash_compute(ip, minMatchLength);
+ /* Rolling hash state */
+ ldmRollingHashState_t hashState;
+ /* Arrays for staged-processing */
+ size_t* const splits = ldmState->splitIndices;
+ ldmMatchCandidate_t* const candidates = ldmState->matchCandidates;
+ unsigned numSplits;
+
+ if (srcSize < minMatchLength)
+ return iend - anchor;
+
+ /* Initialize the rolling hash state with the first minMatchLength bytes */
+ ZSTD_ldm_gear_init(&hashState, params);
+ ZSTD_ldm_gear_reset(&hashState, ip, minMatchLength);
+ ip += minMatchLength;
+
+ while (ip < ilimit) {
+ size_t hashed;
+ unsigned n;
+
+ numSplits = 0;
+ hashed = ZSTD_ldm_gear_feed(&hashState, ip, ilimit - ip,
+ splits, &numSplits);
+
+ for (n = 0; n < numSplits; n++) {
+ BYTE const* const split = ip + splits[n] - minMatchLength;
+ U64 const xxhash = XXH64(split, minMatchLength, 0);
+ U32 const hash = (U32)(xxhash & (((U32)1 << hBits) - 1));
+
+ candidates[n].split = split;
+ candidates[n].hash = hash;
+ candidates[n].checksum = (U32)(xxhash >> 32);
+ candidates[n].bucket = ZSTD_ldm_getBucket(ldmState, hash, *params);
+ PREFETCH_L1(candidates[n].bucket);
}
- lastHashed = ip;
- /* Do not insert and do not look for a match */
- if (ZSTD_ldm_getTag(rollingHash, hBits, hashRateLog) != ldmTagMask) {
- ip++;
- continue;
- }
+ for (n = 0; n < numSplits; n++) {
+ size_t forwardMatchLength = 0, backwardMatchLength = 0,
+ bestMatchLength = 0, mLength;
+ U32 offset;
+ BYTE const* const split = candidates[n].split;
+ U32 const checksum = candidates[n].checksum;
+ U32 const hash = candidates[n].hash;
+ ldmEntry_t* const bucket = candidates[n].bucket;
+ ldmEntry_t const* cur;
+ ldmEntry_t const* bestEntry = NULL;
+ ldmEntry_t newEntry;
+
+ newEntry.offset = (U32)(split - base);
+ newEntry.checksum = checksum;
+
+ /* If a split point would generate a sequence overlapping with
+ * the previous one, we merely register it in the hash table and
+ * move on */
+ if (split < anchor) {
+ ZSTD_ldm_insertEntry(ldmState, hash, newEntry, *params);
+ continue;
+ }
- /* Get the best entry and compute the match lengths */
- {
- ldmEntry_t* const bucket =
- ZSTD_ldm_getBucket(ldmState,
- ZSTD_ldm_getSmallHash(rollingHash, hBits),
- *params);
- ldmEntry_t* cur;
- size_t bestMatchLength = 0;
- U32 const checksum = ZSTD_ldm_getChecksum(rollingHash, hBits);
-
- for (cur = bucket; cur < bucket + ldmBucketSize; ++cur) {
+ for (cur = bucket; cur < bucket + entsPerBucket; cur++) {
size_t curForwardMatchLength, curBackwardMatchLength,
curTotalMatchLength;
if (cur->checksum != checksum || cur->offset <= lowestIndex) {
@@ -342,31 +414,23 @@ static size_t ZSTD_ldm_generateSequences_internal(
cur->offset < dictLimit ? dictEnd : iend;
BYTE const* const lowMatchPtr =
cur->offset < dictLimit ? dictStart : lowPrefixPtr;
-
- curForwardMatchLength = ZSTD_count_2segments(
- ip, pMatch, iend,
- matchEnd, lowPrefixPtr);
+ curForwardMatchLength =
+ ZSTD_count_2segments(split, pMatch, iend, matchEnd, lowPrefixPtr);
if (curForwardMatchLength < minMatchLength) {
continue;
}
- curBackwardMatchLength =
- ZSTD_ldm_countBackwardsMatch_2segments(ip, anchor,
- pMatch, lowMatchPtr,
- dictStart, dictEnd);
- curTotalMatchLength = curForwardMatchLength +
- curBackwardMatchLength;
+ curBackwardMatchLength = ZSTD_ldm_countBackwardsMatch_2segments(
+ split, anchor, pMatch, lowMatchPtr, dictStart, dictEnd);
} else { /* !extDict */
BYTE const* const pMatch = base + cur->offset;
- curForwardMatchLength = ZSTD_count(ip, pMatch, iend);
+ curForwardMatchLength = ZSTD_count(split, pMatch, iend);
if (curForwardMatchLength < minMatchLength) {
continue;
}
curBackwardMatchLength =
- ZSTD_ldm_countBackwardsMatch(ip, anchor, pMatch,
- lowPrefixPtr);
- curTotalMatchLength = curForwardMatchLength +
- curBackwardMatchLength;
+ ZSTD_ldm_countBackwardsMatch(split, anchor, pMatch, lowPrefixPtr);
}
+ curTotalMatchLength = curForwardMatchLength + curBackwardMatchLength;
if (curTotalMatchLength > bestMatchLength) {
bestMatchLength = curTotalMatchLength;
@@ -375,57 +439,54 @@ static size_t ZSTD_ldm_generateSequences_internal(
bestEntry = cur;
}
}
- }
-
- /* No match found -- continue searching */
- if (bestEntry == NULL) {
- ZSTD_ldm_makeEntryAndInsertByTag(ldmState, rollingHash,
- hBits, curr,
- *params);
- ip++;
- continue;
- }
- /* Match found */
- mLength = forwardMatchLength + backwardMatchLength;
- ip -= backwardMatchLength;
+ /* No match found -- insert an entry into the hash table
+ * and process the next candidate match */
+ if (bestEntry == NULL) {
+ ZSTD_ldm_insertEntry(ldmState, hash, newEntry, *params);
+ continue;
+ }
- {
- /* Store the sequence:
- * ip = curr - backwardMatchLength
- * The match is at (bestEntry->offset - backwardMatchLength)
- */
- U32 const matchIndex = bestEntry->offset;
- U32 const offset = curr - matchIndex;
- rawSeq* const seq = rawSeqStore->seq + rawSeqStore->size;
-
- /* Out of sequence storage */
- if (rawSeqStore->size == rawSeqStore->capacity)
- return ERROR(dstSize_tooSmall);
- seq->litLength = (U32)(ip - anchor);
- seq->matchLength = (U32)mLength;
- seq->offset = offset;
- rawSeqStore->size++;
- }
+ /* Match found */
+ offset = (U32)(split - base) - bestEntry->offset;
+ mLength = forwardMatchLength + backwardMatchLength;
+ {
+ rawSeq* const seq = rawSeqStore->seq + rawSeqStore->size;
+
+ /* Out of sequence storage */
+ if (rawSeqStore->size == rawSeqStore->capacity)
+ return ERROR(dstSize_tooSmall);
+ seq->litLength = (U32)(split - backwardMatchLength - anchor);
+ seq->matchLength = (U32)mLength;
+ seq->offset = offset;
+ rawSeqStore->size++;
+ }
- /* Insert the current entry into the hash table */
- ZSTD_ldm_makeEntryAndInsertByTag(ldmState, rollingHash, hBits,
- (U32)(lastHashed - base),
- *params);
+ /* Insert the current entry into the hash table --- it must be
+ * done after the previous block to avoid clobbering bestEntry */
+ ZSTD_ldm_insertEntry(ldmState, hash, newEntry, *params);
- assert(ip + backwardMatchLength == lastHashed);
+ anchor = split + forwardMatchLength;
- /* Fill the hash table from lastHashed+1 to ip+mLength*/
- /* Heuristic: don't need to fill the entire table at end of block */
- if (ip + mLength <= ilimit) {
- rollingHash = ZSTD_ldm_fillLdmHashTable(
- ldmState, rollingHash, lastHashed,
- ip + mLength, base, hBits, *params);
- lastHashed = ip + mLength - 1;
+ /* If we find a match that ends after the data that we've hashed
+ * then we have a repeating, overlapping, pattern. E.g. all zeros.
+ * If one repetition of the pattern matches our `stopMask` then all
+ * repetitions will. We don't need to insert them all into out table,
+ * only the first one. So skip over overlapping matches.
+ * This is a major speed boost (20x) for compressing a single byte
+ * repeated, when that byte ends up in the table.
+ */
+ if (anchor > ip + hashed) {
+ ZSTD_ldm_gear_reset(&hashState, anchor - minMatchLength, minMatchLength);
+ /* Continue the outter loop at anchor (ip + hashed == anchor). */
+ ip = anchor - hashed;
+ break;
+ }
}
- ip += mLength;
- anchor = ip;
+
+ ip += hashed;
}
+
return iend - anchor;
}
@@ -474,7 +535,7 @@ size_t ZSTD_ldm_generateSequences(
assert(chunkStart < iend);
/* 1. Perform overflow correction if necessary. */
- if (ZSTD_window_needOverflowCorrection(ldmState->window, chunkEnd)) {
+ if (ZSTD_window_needOverflowCorrection(ldmState->window, 0, maxDist, ldmState->loadedDictEnd, chunkStart, chunkEnd)) {
U32 const ldmHSize = 1U << params->hashLog;
U32 const correction = ZSTD_window_correctOverflow(
&ldmState->window, /* cycleLog */ 0, maxDist, chunkStart);
@@ -596,12 +657,13 @@ void ZSTD_ldm_skipRawSeqStoreBytes(rawSeqStore_t* rawSeqStore, size_t nbBytes) {
size_t ZSTD_ldm_blockCompress(rawSeqStore_t* rawSeqStore,
ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
+ ZSTD_useRowMatchFinderMode_e useRowMatchFinder,
void const* src, size_t srcSize)
{
const ZSTD_compressionParameters* const cParams = &ms->cParams;
unsigned const minMatch = cParams->minMatch;
ZSTD_blockCompressor const blockCompressor =
- ZSTD_selectBlockCompressor(cParams->strategy, ZSTD_matchState_dictMode(ms));
+ ZSTD_selectBlockCompressor(cParams->strategy, useRowMatchFinder, ZSTD_matchState_dictMode(ms));
/* Input bounds */
BYTE const* const istart = (BYTE const*)src;
BYTE const* const iend = istart + srcSize;
@@ -620,7 +682,7 @@ size_t ZSTD_ldm_blockCompress(rawSeqStore_t* rawSeqStore,
assert(rawSeqStore->pos <= rawSeqStore->size);
assert(rawSeqStore->size <= rawSeqStore->capacity);
- /* Loop through each sequence and apply the block compressor to the lits */
+ /* Loop through each sequence and apply the block compressor to the literals */
while (rawSeqStore->pos < rawSeqStore->size && ip < iend) {
/* maybeSplitSequence updates rawSeqStore->pos */
rawSeq const sequence = maybeSplitSequence(rawSeqStore,
diff --git a/thirdparty/zstd/compress/zstd_ldm.h b/thirdparty/zstd/compress/zstd_ldm.h
index 6561024e4c..393466fa9f 100644
--- a/thirdparty/zstd/compress/zstd_ldm.h
+++ b/thirdparty/zstd/compress/zstd_ldm.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
@@ -66,6 +66,7 @@ size_t ZSTD_ldm_generateSequences(
*/
size_t ZSTD_ldm_blockCompress(rawSeqStore_t* rawSeqStore,
ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
+ ZSTD_useRowMatchFinderMode_e useRowMatchFinder,
void const* src, size_t srcSize);
/**
@@ -73,7 +74,7 @@ size_t ZSTD_ldm_blockCompress(rawSeqStore_t* rawSeqStore,
*
* Skip past `srcSize` bytes worth of sequences in `rawSeqStore`.
* Avoids emitting matches less than `minMatch` bytes.
- * Must be called for data with is not passed to ZSTD_ldm_blockCompress().
+ * Must be called for data that is not passed to ZSTD_ldm_blockCompress().
*/
void ZSTD_ldm_skipSequences(rawSeqStore_t* rawSeqStore, size_t srcSize,
U32 const minMatch);
diff --git a/thirdparty/zstd/compress/zstd_ldm_geartab.h b/thirdparty/zstd/compress/zstd_ldm_geartab.h
new file mode 100644
index 0000000000..e5c24d856b
--- /dev/null
+++ b/thirdparty/zstd/compress/zstd_ldm_geartab.h
@@ -0,0 +1,103 @@
+/*
+ * Copyright (c) Yann Collet, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under both the BSD-style license (found in the
+ * LICENSE file in the root directory of this source tree) and the GPLv2 (found
+ * in the COPYING file in the root directory of this source tree).
+ * You may select, at your option, one of the above-listed licenses.
+ */
+
+#ifndef ZSTD_LDM_GEARTAB_H
+#define ZSTD_LDM_GEARTAB_H
+
+static U64 ZSTD_ldm_gearTab[256] = {
+ 0xf5b8f72c5f77775c, 0x84935f266b7ac412, 0xb647ada9ca730ccc,
+ 0xb065bb4b114fb1de, 0x34584e7e8c3a9fd0, 0x4e97e17c6ae26b05,
+ 0x3a03d743bc99a604, 0xcecd042422c4044f, 0x76de76c58524259e,
+ 0x9c8528f65badeaca, 0x86563706e2097529, 0x2902475fa375d889,
+ 0xafb32a9739a5ebe6, 0xce2714da3883e639, 0x21eaf821722e69e,
+ 0x37b628620b628, 0x49a8d455d88caf5, 0x8556d711e6958140,
+ 0x4f7ae74fc605c1f, 0x829f0c3468bd3a20, 0x4ffdc885c625179e,
+ 0x8473de048a3daf1b, 0x51008822b05646b2, 0x69d75d12b2d1cc5f,
+ 0x8c9d4a19159154bc, 0xc3cc10f4abbd4003, 0xd06ddc1cecb97391,
+ 0xbe48e6e7ed80302e, 0x3481db31cee03547, 0xacc3f67cdaa1d210,
+ 0x65cb771d8c7f96cc, 0x8eb27177055723dd, 0xc789950d44cd94be,
+ 0x934feadc3700b12b, 0x5e485f11edbdf182, 0x1e2e2a46fd64767a,
+ 0x2969ca71d82efa7c, 0x9d46e9935ebbba2e, 0xe056b67e05e6822b,
+ 0x94d73f55739d03a0, 0xcd7010bdb69b5a03, 0x455ef9fcd79b82f4,
+ 0x869cb54a8749c161, 0x38d1a4fa6185d225, 0xb475166f94bbe9bb,
+ 0xa4143548720959f1, 0x7aed4780ba6b26ba, 0xd0ce264439e02312,
+ 0x84366d746078d508, 0xa8ce973c72ed17be, 0x21c323a29a430b01,
+ 0x9962d617e3af80ee, 0xab0ce91d9c8cf75b, 0x530e8ee6d19a4dbc,
+ 0x2ef68c0cf53f5d72, 0xc03a681640a85506, 0x496e4e9f9c310967,
+ 0x78580472b59b14a0, 0x273824c23b388577, 0x66bf923ad45cb553,
+ 0x47ae1a5a2492ba86, 0x35e304569e229659, 0x4765182a46870b6f,
+ 0x6cbab625e9099412, 0xddac9a2e598522c1, 0x7172086e666624f2,
+ 0xdf5003ca503b7837, 0x88c0c1db78563d09, 0x58d51865acfc289d,
+ 0x177671aec65224f1, 0xfb79d8a241e967d7, 0x2be1e101cad9a49a,
+ 0x6625682f6e29186b, 0x399553457ac06e50, 0x35dffb4c23abb74,
+ 0x429db2591f54aade, 0xc52802a8037d1009, 0x6acb27381f0b25f3,
+ 0xf45e2551ee4f823b, 0x8b0ea2d99580c2f7, 0x3bed519cbcb4e1e1,
+ 0xff452823dbb010a, 0x9d42ed614f3dd267, 0x5b9313c06257c57b,
+ 0xa114b8008b5e1442, 0xc1fe311c11c13d4b, 0x66e8763ea34c5568,
+ 0x8b982af1c262f05d, 0xee8876faaa75fbb7, 0x8a62a4d0d172bb2a,
+ 0xc13d94a3b7449a97, 0x6dbbba9dc15d037c, 0xc786101f1d92e0f1,
+ 0xd78681a907a0b79b, 0xf61aaf2962c9abb9, 0x2cfd16fcd3cb7ad9,
+ 0x868c5b6744624d21, 0x25e650899c74ddd7, 0xba042af4a7c37463,
+ 0x4eb1a539465a3eca, 0xbe09dbf03b05d5ca, 0x774e5a362b5472ba,
+ 0x47a1221229d183cd, 0x504b0ca18ef5a2df, 0xdffbdfbde2456eb9,
+ 0x46cd2b2fbee34634, 0xf2aef8fe819d98c3, 0x357f5276d4599d61,
+ 0x24a5483879c453e3, 0x88026889192b4b9, 0x28da96671782dbec,
+ 0x4ef37c40588e9aaa, 0x8837b90651bc9fb3, 0xc164f741d3f0e5d6,
+ 0xbc135a0a704b70ba, 0x69cd868f7622ada, 0xbc37ba89e0b9c0ab,
+ 0x47c14a01323552f6, 0x4f00794bacee98bb, 0x7107de7d637a69d5,
+ 0x88af793bb6f2255e, 0xf3c6466b8799b598, 0xc288c616aa7f3b59,
+ 0x81ca63cf42fca3fd, 0x88d85ace36a2674b, 0xd056bd3792389e7,
+ 0xe55c396c4e9dd32d, 0xbefb504571e6c0a6, 0x96ab32115e91e8cc,
+ 0xbf8acb18de8f38d1, 0x66dae58801672606, 0x833b6017872317fb,
+ 0xb87c16f2d1c92864, 0xdb766a74e58b669c, 0x89659f85c61417be,
+ 0xc8daad856011ea0c, 0x76a4b565b6fe7eae, 0xa469d085f6237312,
+ 0xaaf0365683a3e96c, 0x4dbb746f8424f7b8, 0x638755af4e4acc1,
+ 0x3d7807f5bde64486, 0x17be6d8f5bbb7639, 0x903f0cd44dc35dc,
+ 0x67b672eafdf1196c, 0xa676ff93ed4c82f1, 0x521d1004c5053d9d,
+ 0x37ba9ad09ccc9202, 0x84e54d297aacfb51, 0xa0b4b776a143445,
+ 0x820d471e20b348e, 0x1874383cb83d46dc, 0x97edeec7a1efe11c,
+ 0xb330e50b1bdc42aa, 0x1dd91955ce70e032, 0xa514cdb88f2939d5,
+ 0x2791233fd90db9d3, 0x7b670a4cc50f7a9b, 0x77c07d2a05c6dfa5,
+ 0xe3778b6646d0a6fa, 0xb39c8eda47b56749, 0x933ed448addbef28,
+ 0xaf846af6ab7d0bf4, 0xe5af208eb666e49, 0x5e6622f73534cd6a,
+ 0x297daeca42ef5b6e, 0x862daef3d35539a6, 0xe68722498f8e1ea9,
+ 0x981c53093dc0d572, 0xfa09b0bfbf86fbf5, 0x30b1e96166219f15,
+ 0x70e7d466bdc4fb83, 0x5a66736e35f2a8e9, 0xcddb59d2b7c1baef,
+ 0xd6c7d247d26d8996, 0xea4e39eac8de1ba3, 0x539c8bb19fa3aff2,
+ 0x9f90e4c5fd508d8, 0xa34e5956fbaf3385, 0x2e2f8e151d3ef375,
+ 0x173691e9b83faec1, 0xb85a8d56bf016379, 0x8382381267408ae3,
+ 0xb90f901bbdc0096d, 0x7c6ad32933bcec65, 0x76bb5e2f2c8ad595,
+ 0x390f851a6cf46d28, 0xc3e6064da1c2da72, 0xc52a0c101cfa5389,
+ 0xd78eaf84a3fbc530, 0x3781b9e2288b997e, 0x73c2f6dea83d05c4,
+ 0x4228e364c5b5ed7, 0x9d7a3edf0da43911, 0x8edcfeda24686756,
+ 0x5e7667a7b7a9b3a1, 0x4c4f389fa143791d, 0xb08bc1023da7cddc,
+ 0x7ab4be3ae529b1cc, 0x754e6132dbe74ff9, 0x71635442a839df45,
+ 0x2f6fb1643fbe52de, 0x961e0a42cf7a8177, 0xf3b45d83d89ef2ea,
+ 0xee3de4cf4a6e3e9b, 0xcd6848542c3295e7, 0xe4cee1664c78662f,
+ 0x9947548b474c68c4, 0x25d73777a5ed8b0b, 0xc915b1d636b7fc,
+ 0x21c2ba75d9b0d2da, 0x5f6b5dcf608a64a1, 0xdcf333255ff9570c,
+ 0x633b922418ced4ee, 0xc136dde0b004b34a, 0x58cc83b05d4b2f5a,
+ 0x5eb424dda28e42d2, 0x62df47369739cd98, 0xb4e0b42485e4ce17,
+ 0x16e1f0c1f9a8d1e7, 0x8ec3916707560ebf, 0x62ba6e2df2cc9db3,
+ 0xcbf9f4ff77d83a16, 0x78d9d7d07d2bbcc4, 0xef554ce1e02c41f4,
+ 0x8d7581127eccf94d, 0xa9b53336cb3c8a05, 0x38c42c0bf45c4f91,
+ 0x640893cdf4488863, 0x80ec34bc575ea568, 0x39f324f5b48eaa40,
+ 0xe9d9ed1f8eff527f, 0x9224fc058cc5a214, 0xbaba00b04cfe7741,
+ 0x309a9f120fcf52af, 0xa558f3ec65626212, 0x424bec8b7adabe2f,
+ 0x41622513a6aea433, 0xb88da2d5324ca798, 0xd287733b245528a4,
+ 0x9a44697e6d68aec3, 0x7b1093be2f49bb28, 0x50bbec632e3d8aad,
+ 0x6cd90723e1ea8283, 0x897b9e7431b02bf3, 0x219efdcb338a7047,
+ 0x3b0311f0a27c0656, 0xdb17bf91c0db96e7, 0x8cd4fd6b4e85a5b2,
+ 0xfab071054ba6409d, 0x40d6fe831fa9dfd9, 0xaf358debad7d791e,
+ 0xeb8d0e25a65e3e58, 0xbbcbd3df14e08580, 0xcf751f27ecdab2b,
+ 0x2b4da14f2613d8f4
+};
+
+#endif /* ZSTD_LDM_GEARTAB_H */
diff --git a/thirdparty/zstd/compress/zstd_opt.c b/thirdparty/zstd/compress/zstd_opt.c
index e55c459deb..402a7e5c76 100644
--- a/thirdparty/zstd/compress/zstd_opt.c
+++ b/thirdparty/zstd/compress/zstd_opt.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Przemyslaw Skibinski, Yann Collet, Facebook, Inc.
+ * Copyright (c) Przemyslaw Skibinski, Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
diff --git a/thirdparty/zstd/compress/zstd_opt.h b/thirdparty/zstd/compress/zstd_opt.h
index 9aba8a9018..627255f53d 100644
--- a/thirdparty/zstd/compress/zstd_opt.h
+++ b/thirdparty/zstd/compress/zstd_opt.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
diff --git a/thirdparty/zstd/compress/zstdmt_compress.c b/thirdparty/zstd/compress/zstdmt_compress.c
index 50454a50b9..22aa3e1245 100644
--- a/thirdparty/zstd/compress/zstdmt_compress.c
+++ b/thirdparty/zstd/compress/zstdmt_compress.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
@@ -472,8 +472,6 @@ ZSTDMT_serialState_reset(serialState_t* serialState,
ZSTD_ldm_adjustParameters(&params.ldmParams, &params.cParams);
assert(params.ldmParams.hashLog >= params.ldmParams.bucketSizeLog);
assert(params.ldmParams.hashRateLog < 32);
- serialState->ldmState.hashPower =
- ZSTD_rollingHash_primePower(params.ldmParams.minMatchLength);
} else {
ZSTD_memset(&params.ldmParams, 0, sizeof(params.ldmParams));
}
@@ -486,10 +484,10 @@ ZSTDMT_serialState_reset(serialState_t* serialState,
size_t const hashSize = ((size_t)1 << hashLog) * sizeof(ldmEntry_t);
unsigned const bucketLog =
params.ldmParams.hashLog - params.ldmParams.bucketSizeLog;
- size_t const bucketSize = (size_t)1 << bucketLog;
unsigned const prevBucketLog =
serialState->params.ldmParams.hashLog -
serialState->params.ldmParams.bucketSizeLog;
+ size_t const numBuckets = (size_t)1 << bucketLog;
/* Size the seq pool tables */
ZSTDMT_setNbSeq(seqPool, ZSTD_ldm_getMaxNbSeq(params.ldmParams, jobSize));
/* Reset the window */
@@ -501,20 +499,20 @@ ZSTDMT_serialState_reset(serialState_t* serialState,
}
if (serialState->ldmState.bucketOffsets == NULL || prevBucketLog < bucketLog) {
ZSTD_customFree(serialState->ldmState.bucketOffsets, cMem);
- serialState->ldmState.bucketOffsets = (BYTE*)ZSTD_customMalloc(bucketSize, cMem);
+ serialState->ldmState.bucketOffsets = (BYTE*)ZSTD_customMalloc(numBuckets, cMem);
}
if (!serialState->ldmState.hashTable || !serialState->ldmState.bucketOffsets)
return 1;
/* Zero the tables */
ZSTD_memset(serialState->ldmState.hashTable, 0, hashSize);
- ZSTD_memset(serialState->ldmState.bucketOffsets, 0, bucketSize);
+ ZSTD_memset(serialState->ldmState.bucketOffsets, 0, numBuckets);
/* Update window state and fill hash table with dict */
serialState->ldmState.loadedDictEnd = 0;
if (dictSize > 0) {
if (dictContentType == ZSTD_dct_rawContent) {
BYTE const* const dictEnd = (const BYTE*)dict + dictSize;
- ZSTD_window_update(&serialState->ldmState.window, dict, dictSize);
+ ZSTD_window_update(&serialState->ldmState.window, dict, dictSize, /* forceNonContiguous */ 0);
ZSTD_ldm_fillHashTable(&serialState->ldmState, (const BYTE*)dict, dictEnd, &params.ldmParams);
serialState->ldmState.loadedDictEnd = params.forceWindow ? 0 : (U32)(dictEnd - serialState->ldmState.window.base);
} else {
@@ -571,7 +569,7 @@ static void ZSTDMT_serialState_update(serialState_t* serialState,
assert(seqStore.seq != NULL && seqStore.pos == 0 &&
seqStore.size == 0 && seqStore.capacity > 0);
assert(src.size <= serialState->params.jobSize);
- ZSTD_window_update(&serialState->ldmState.window, src.start, src.size);
+ ZSTD_window_update(&serialState->ldmState.window, src.start, src.size, /* forceNonContiguous */ 0);
error = ZSTD_ldm_generateSequences(
&serialState->ldmState, &seqStore,
&serialState->params.ldmParams, src.start, src.size);
@@ -683,6 +681,8 @@ static void ZSTDMT_compressionJob(void* jobDescription)
if (job->jobID != 0) jobParams.fParams.checksumFlag = 0;
/* Don't run LDM for the chunks, since we handle it externally */
jobParams.ldmParams.enableLdm = 0;
+ /* Correct nbWorkers to 0. */
+ jobParams.nbWorkers = 0;
/* init */
@@ -695,6 +695,10 @@ static void ZSTDMT_compressionJob(void* jobDescription)
{ size_t const forceWindowError = ZSTD_CCtxParams_setParameter(&jobParams, ZSTD_c_forceMaxWindow, !job->firstJob);
if (ZSTD_isError(forceWindowError)) JOB_ERROR(forceWindowError);
}
+ if (!job->firstJob) {
+ size_t const err = ZSTD_CCtxParams_setParameter(&jobParams, ZSTD_c_deterministicRefPrefix, 0);
+ if (ZSTD_isError(err)) JOB_ERROR(err);
+ }
{ size_t const initError = ZSTD_compressBegin_advanced_internal(cctx,
job->prefix.start, job->prefix.size, ZSTD_dct_rawContent, /* load dictionary in "content-only" mode (no header analysis) */
ZSTD_dtlm_fast,
@@ -750,6 +754,13 @@ static void ZSTDMT_compressionJob(void* jobDescription)
if (ZSTD_isError(cSize)) JOB_ERROR(cSize);
lastCBlockSize = cSize;
} }
+ if (!job->firstJob) {
+ /* Double check that we don't have an ext-dict, because then our
+ * repcode invalidation doesn't work.
+ */
+ assert(!ZSTD_window_hasExtDict(cctx->blockState.matchState.window));
+ }
+ ZSTD_CCtx_trace(cctx, 0);
_endJob:
ZSTDMT_serialState_ensureFinished(job->serial, job->jobID, job->cSize);
@@ -1239,9 +1250,8 @@ size_t ZSTDMT_initCStream_internal(
if (params.rsyncable) {
/* Aim for the targetsectionSize as the average job size. */
- U32 const jobSizeMB = (U32)(mtctx->targetSectionSize >> 20);
- U32 const rsyncBits = ZSTD_highbit32(jobSizeMB) + 20;
- assert(jobSizeMB >= 1);
+ U32 const jobSizeKB = (U32)(mtctx->targetSectionSize >> 10);
+ U32 const rsyncBits = (assert(jobSizeKB >= 1), ZSTD_highbit32(jobSizeKB) + 10);
DEBUGLOG(4, "rsyncLog = %u", rsyncBits);
mtctx->rsync.hash = 0;
mtctx->rsync.hitMask = (1ULL << rsyncBits) - 1;
diff --git a/thirdparty/zstd/compress/zstdmt_compress.h b/thirdparty/zstd/compress/zstdmt_compress.h
index 0a9e551c99..2fee2ec745 100644
--- a/thirdparty/zstd/compress/zstdmt_compress.h
+++ b/thirdparty/zstd/compress/zstdmt_compress.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
@@ -32,11 +32,11 @@
/* === Constants === */
-#ifndef ZSTDMT_NBWORKERS_MAX
-# define ZSTDMT_NBWORKERS_MAX 200
+#ifndef ZSTDMT_NBWORKERS_MAX /* a different value can be selected at compile time */
+# define ZSTDMT_NBWORKERS_MAX ((sizeof(void*)==4) /*32-bit*/ ? 64 : 256)
#endif
-#ifndef ZSTDMT_JOBSIZE_MIN
-# define ZSTDMT_JOBSIZE_MIN (1 MB)
+#ifndef ZSTDMT_JOBSIZE_MIN /* a different value can be selected at compile time */
+# define ZSTDMT_JOBSIZE_MIN (512 KB)
#endif
#define ZSTDMT_JOBLOG_MAX (MEM_32bits() ? 29 : 30)
#define ZSTDMT_JOBSIZE_MAX (MEM_32bits() ? (512 MB) : (1024 MB))
diff --git a/thirdparty/zstd/decompress/huf_decompress.c b/thirdparty/zstd/decompress/huf_decompress.c
index 1418206718..b93c9a003b 100644
--- a/thirdparty/zstd/decompress/huf_decompress.c
+++ b/thirdparty/zstd/decompress/huf_decompress.c
@@ -1,7 +1,7 @@
/* ******************************************************************
* huff0 huffman decoder,
* part of Finite State Entropy library
- * Copyright (c) 2013-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
*
* You can contact the author at :
* - FSE+HUF source repository : https://github.com/Cyan4973/FiniteStateEntropy
@@ -528,13 +528,15 @@ typedef rankValCol_t rankVal_t[HUF_TABLELOG_MAX];
static void HUF_fillDTableX2Level2(HUF_DEltX2* DTable, U32 sizeLog, const U32 consumed,
const U32* rankValOrigin, const int minWeight,
const sortedSymbol_t* sortedSymbols, const U32 sortedListSize,
- U32 nbBitsBaseline, U16 baseSeq)
+ U32 nbBitsBaseline, U16 baseSeq, U32* wksp, size_t wkspSize)
{
HUF_DEltX2 DElt;
- U32 rankVal[HUF_TABLELOG_MAX + 1];
+ U32* rankVal = wksp;
+ assert(wkspSize >= HUF_TABLELOG_MAX + 1);
+ (void)wkspSize;
/* get pre-calculated rankVal */
- ZSTD_memcpy(rankVal, rankValOrigin, sizeof(rankVal));
+ ZSTD_memcpy(rankVal, rankValOrigin, sizeof(U32) * (HUF_TABLELOG_MAX + 1));
/* fill skipped values */
if (minWeight>1) {
@@ -569,14 +571,18 @@ static void HUF_fillDTableX2Level2(HUF_DEltX2* DTable, U32 sizeLog, const U32 co
static void HUF_fillDTableX2(HUF_DEltX2* DTable, const U32 targetLog,
const sortedSymbol_t* sortedList, const U32 sortedListSize,
const U32* rankStart, rankVal_t rankValOrigin, const U32 maxWeight,
- const U32 nbBitsBaseline)
+ const U32 nbBitsBaseline, U32* wksp, size_t wkspSize)
{
- U32 rankVal[HUF_TABLELOG_MAX + 1];
+ U32* rankVal = wksp;
const int scaleLog = nbBitsBaseline - targetLog; /* note : targetLog >= srcLog, hence scaleLog <= 1 */
const U32 minBits = nbBitsBaseline - maxWeight;
U32 s;
- ZSTD_memcpy(rankVal, rankValOrigin, sizeof(rankVal));
+ assert(wkspSize >= HUF_TABLELOG_MAX + 1);
+ wksp += HUF_TABLELOG_MAX + 1;
+ wkspSize -= HUF_TABLELOG_MAX + 1;
+
+ ZSTD_memcpy(rankVal, rankValOrigin, sizeof(U32) * (HUF_TABLELOG_MAX + 1));
/* fill DTable */
for (s=0; s<sortedListSize; s++) {
@@ -594,7 +600,7 @@ static void HUF_fillDTableX2(HUF_DEltX2* DTable, const U32 targetLog,
HUF_fillDTableX2Level2(DTable+start, targetLog-nbBits, nbBits,
rankValOrigin[nbBits], minWeight,
sortedList+sortedRank, sortedListSize-sortedRank,
- nbBitsBaseline, symbol);
+ nbBitsBaseline, symbol, wksp, wkspSize);
} else {
HUF_DEltX2 DElt;
MEM_writeLE16(&(DElt.sequence), symbol);
@@ -608,6 +614,15 @@ static void HUF_fillDTableX2(HUF_DEltX2* DTable, const U32 targetLog,
}
}
+typedef struct {
+ rankValCol_t rankVal[HUF_TABLELOG_MAX];
+ U32 rankStats[HUF_TABLELOG_MAX + 1];
+ U32 rankStart0[HUF_TABLELOG_MAX + 2];
+ sortedSymbol_t sortedSymbol[HUF_SYMBOLVALUE_MAX + 1];
+ BYTE weightList[HUF_SYMBOLVALUE_MAX + 1];
+ U32 calleeWksp[HUF_READ_STATS_WORKSPACE_SIZE_U32];
+} HUF_ReadDTableX2_Workspace;
+
size_t HUF_readDTableX2_wksp(HUF_DTable* DTable,
const void* src, size_t srcSize,
void* workSpace, size_t wkspSize)
@@ -620,47 +635,32 @@ size_t HUF_readDTableX2_wksp(HUF_DTable* DTable,
HUF_DEltX2* const dt = (HUF_DEltX2*)dtPtr;
U32 *rankStart;
- rankValCol_t* rankVal;
- U32* rankStats;
- U32* rankStart0;
- sortedSymbol_t* sortedSymbol;
- BYTE* weightList;
- size_t spaceUsed32 = 0;
-
- rankVal = (rankValCol_t *)((U32 *)workSpace + spaceUsed32);
- spaceUsed32 += (sizeof(rankValCol_t) * HUF_TABLELOG_MAX) >> 2;
- rankStats = (U32 *)workSpace + spaceUsed32;
- spaceUsed32 += HUF_TABLELOG_MAX + 1;
- rankStart0 = (U32 *)workSpace + spaceUsed32;
- spaceUsed32 += HUF_TABLELOG_MAX + 2;
- sortedSymbol = (sortedSymbol_t *)workSpace + (spaceUsed32 * sizeof(U32)) / sizeof(sortedSymbol_t);
- spaceUsed32 += HUF_ALIGN(sizeof(sortedSymbol_t) * (HUF_SYMBOLVALUE_MAX + 1), sizeof(U32)) >> 2;
- weightList = (BYTE *)((U32 *)workSpace + spaceUsed32);
- spaceUsed32 += HUF_ALIGN(HUF_SYMBOLVALUE_MAX + 1, sizeof(U32)) >> 2;
-
- if ((spaceUsed32 << 2) > wkspSize) return ERROR(tableLog_tooLarge);
-
- rankStart = rankStart0 + 1;
- ZSTD_memset(rankStats, 0, sizeof(U32) * (2 * HUF_TABLELOG_MAX + 2 + 1));
+ HUF_ReadDTableX2_Workspace* const wksp = (HUF_ReadDTableX2_Workspace*)workSpace;
+
+ if (sizeof(*wksp) > wkspSize) return ERROR(GENERIC);
+
+ rankStart = wksp->rankStart0 + 1;
+ ZSTD_memset(wksp->rankStats, 0, sizeof(wksp->rankStats));
+ ZSTD_memset(wksp->rankStart0, 0, sizeof(wksp->rankStart0));
DEBUG_STATIC_ASSERT(sizeof(HUF_DEltX2) == sizeof(HUF_DTable)); /* if compiler fails here, assertion is wrong */
if (maxTableLog > HUF_TABLELOG_MAX) return ERROR(tableLog_tooLarge);
/* ZSTD_memset(weightList, 0, sizeof(weightList)); */ /* is not necessary, even though some analyzer complain ... */
- iSize = HUF_readStats(weightList, HUF_SYMBOLVALUE_MAX + 1, rankStats, &nbSymbols, &tableLog, src, srcSize);
+ iSize = HUF_readStats_wksp(wksp->weightList, HUF_SYMBOLVALUE_MAX + 1, wksp->rankStats, &nbSymbols, &tableLog, src, srcSize, wksp->calleeWksp, sizeof(wksp->calleeWksp), /* bmi2 */ 0);
if (HUF_isError(iSize)) return iSize;
/* check result */
if (tableLog > maxTableLog) return ERROR(tableLog_tooLarge); /* DTable can't fit code depth */
/* find maxWeight */
- for (maxW = tableLog; rankStats[maxW]==0; maxW--) {} /* necessarily finds a solution before 0 */
+ for (maxW = tableLog; wksp->rankStats[maxW]==0; maxW--) {} /* necessarily finds a solution before 0 */
/* Get start index of each weight */
{ U32 w, nextRankStart = 0;
for (w=1; w<maxW+1; w++) {
U32 curr = nextRankStart;
- nextRankStart += rankStats[w];
+ nextRankStart += wksp->rankStats[w];
rankStart[w] = curr;
}
rankStart[0] = nextRankStart; /* put all 0w symbols at the end of sorted list*/
@@ -670,37 +670,38 @@ size_t HUF_readDTableX2_wksp(HUF_DTable* DTable,
/* sort symbols by weight */
{ U32 s;
for (s=0; s<nbSymbols; s++) {
- U32 const w = weightList[s];
+ U32 const w = wksp->weightList[s];
U32 const r = rankStart[w]++;
- sortedSymbol[r].symbol = (BYTE)s;
- sortedSymbol[r].weight = (BYTE)w;
+ wksp->sortedSymbol[r].symbol = (BYTE)s;
+ wksp->sortedSymbol[r].weight = (BYTE)w;
}
rankStart[0] = 0; /* forget 0w symbols; this is beginning of weight(1) */
}
/* Build rankVal */
- { U32* const rankVal0 = rankVal[0];
+ { U32* const rankVal0 = wksp->rankVal[0];
{ int const rescale = (maxTableLog-tableLog) - 1; /* tableLog <= maxTableLog */
U32 nextRankVal = 0;
U32 w;
for (w=1; w<maxW+1; w++) {
U32 curr = nextRankVal;
- nextRankVal += rankStats[w] << (w+rescale);
+ nextRankVal += wksp->rankStats[w] << (w+rescale);
rankVal0[w] = curr;
} }
{ U32 const minBits = tableLog+1 - maxW;
U32 consumed;
for (consumed = minBits; consumed < maxTableLog - minBits + 1; consumed++) {
- U32* const rankValPtr = rankVal[consumed];
+ U32* const rankValPtr = wksp->rankVal[consumed];
U32 w;
for (w = 1; w < maxW+1; w++) {
rankValPtr[w] = rankVal0[w] >> consumed;
} } } }
HUF_fillDTableX2(dt, maxTableLog,
- sortedSymbol, sizeOfSort,
- rankStart0, rankVal, maxW,
- tableLog+1);
+ wksp->sortedSymbol, sizeOfSort,
+ wksp->rankStart0, wksp->rankVal, maxW,
+ tableLog+1,
+ wksp->calleeWksp, sizeof(wksp->calleeWksp) / sizeof(U32));
dtd.tableLog = (BYTE)maxTableLog;
dtd.tableType = 1;
@@ -1225,7 +1226,7 @@ size_t HUF_decompress1X1 (void* dst, size_t dstSize, const void* cSrc, size_t cS
HUF_CREATE_STATIC_DTABLEX1(DTable, HUF_TABLELOG_MAX);
return HUF_decompress1X1_DCtx (DTable, dst, dstSize, cSrc, cSrcSize);
}
-#endif
+#endif
#ifndef HUF_FORCE_DECOMPRESS_X1
size_t HUF_readDTableX2(HUF_DTable* DTable, const void* src, size_t srcSize)
diff --git a/thirdparty/zstd/decompress/zstd_ddict.c b/thirdparty/zstd/decompress/zstd_ddict.c
index f5cc23b387..ce335477b3 100644
--- a/thirdparty/zstd/decompress/zstd_ddict.c
+++ b/thirdparty/zstd/decompress/zstd_ddict.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
diff --git a/thirdparty/zstd/decompress/zstd_ddict.h b/thirdparty/zstd/decompress/zstd_ddict.h
index 8906a71c94..bd03268b50 100644
--- a/thirdparty/zstd/decompress/zstd_ddict.h
+++ b/thirdparty/zstd/decompress/zstd_ddict.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
diff --git a/thirdparty/zstd/decompress/zstd_decompress.c b/thirdparty/zstd/decompress/zstd_decompress.c
index 21f846bc77..910bc034c0 100644
--- a/thirdparty/zstd/decompress/zstd_decompress.c
+++ b/thirdparty/zstd/decompress/zstd_decompress.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
@@ -62,6 +62,7 @@
#include "../common/fse.h"
#define HUF_STATIC_LINKING_ONLY
#include "../common/huf.h"
+#include "../common/xxhash.h" /* XXH64_reset, XXH64_update, XXH64_digest, XXH64 */
#include "../common/zstd_internal.h" /* blockProperties_t */
#include "zstd_decompress_internal.h" /* ZSTD_DCtx */
#include "zstd_ddict.h" /* ZSTD_DDictDictContent */
@@ -72,6 +73,144 @@
#endif
+
+/*************************************
+ * Multiple DDicts Hashset internals *
+ *************************************/
+
+#define DDICT_HASHSET_MAX_LOAD_FACTOR_COUNT_MULT 4
+#define DDICT_HASHSET_MAX_LOAD_FACTOR_SIZE_MULT 3 /* These two constants represent SIZE_MULT/COUNT_MULT load factor without using a float.
+ * Currently, that means a 0.75 load factor.
+ * So, if count * COUNT_MULT / size * SIZE_MULT != 0, then we've exceeded
+ * the load factor of the ddict hash set.
+ */
+
+#define DDICT_HASHSET_TABLE_BASE_SIZE 64
+#define DDICT_HASHSET_RESIZE_FACTOR 2
+
+/* Hash function to determine starting position of dict insertion within the table
+ * Returns an index between [0, hashSet->ddictPtrTableSize]
+ */
+static size_t ZSTD_DDictHashSet_getIndex(const ZSTD_DDictHashSet* hashSet, U32 dictID) {
+ const U64 hash = XXH64(&dictID, sizeof(U32), 0);
+ /* DDict ptr table size is a multiple of 2, use size - 1 as mask to get index within [0, hashSet->ddictPtrTableSize) */
+ return hash & (hashSet->ddictPtrTableSize - 1);
+}
+
+/* Adds DDict to a hashset without resizing it.
+ * If inserting a DDict with a dictID that already exists in the set, replaces the one in the set.
+ * Returns 0 if successful, or a zstd error code if something went wrong.
+ */
+static size_t ZSTD_DDictHashSet_emplaceDDict(ZSTD_DDictHashSet* hashSet, const ZSTD_DDict* ddict) {
+ const U32 dictID = ZSTD_getDictID_fromDDict(ddict);
+ size_t idx = ZSTD_DDictHashSet_getIndex(hashSet, dictID);
+ const size_t idxRangeMask = hashSet->ddictPtrTableSize - 1;
+ RETURN_ERROR_IF(hashSet->ddictPtrCount == hashSet->ddictPtrTableSize, GENERIC, "Hash set is full!");
+ DEBUGLOG(4, "Hashed index: for dictID: %u is %zu", dictID, idx);
+ while (hashSet->ddictPtrTable[idx] != NULL) {
+ /* Replace existing ddict if inserting ddict with same dictID */
+ if (ZSTD_getDictID_fromDDict(hashSet->ddictPtrTable[idx]) == dictID) {
+ DEBUGLOG(4, "DictID already exists, replacing rather than adding");
+ hashSet->ddictPtrTable[idx] = ddict;
+ return 0;
+ }
+ idx &= idxRangeMask;
+ idx++;
+ }
+ DEBUGLOG(4, "Final idx after probing for dictID %u is: %zu", dictID, idx);
+ hashSet->ddictPtrTable[idx] = ddict;
+ hashSet->ddictPtrCount++;
+ return 0;
+}
+
+/* Expands hash table by factor of DDICT_HASHSET_RESIZE_FACTOR and
+ * rehashes all values, allocates new table, frees old table.
+ * Returns 0 on success, otherwise a zstd error code.
+ */
+static size_t ZSTD_DDictHashSet_expand(ZSTD_DDictHashSet* hashSet, ZSTD_customMem customMem) {
+ size_t newTableSize = hashSet->ddictPtrTableSize * DDICT_HASHSET_RESIZE_FACTOR;
+ const ZSTD_DDict** newTable = (const ZSTD_DDict**)ZSTD_customCalloc(sizeof(ZSTD_DDict*) * newTableSize, customMem);
+ const ZSTD_DDict** oldTable = hashSet->ddictPtrTable;
+ size_t oldTableSize = hashSet->ddictPtrTableSize;
+ size_t i;
+
+ DEBUGLOG(4, "Expanding DDict hash table! Old size: %zu new size: %zu", oldTableSize, newTableSize);
+ RETURN_ERROR_IF(!newTable, memory_allocation, "Expanded hashset allocation failed!");
+ hashSet->ddictPtrTable = newTable;
+ hashSet->ddictPtrTableSize = newTableSize;
+ hashSet->ddictPtrCount = 0;
+ for (i = 0; i < oldTableSize; ++i) {
+ if (oldTable[i] != NULL) {
+ FORWARD_IF_ERROR(ZSTD_DDictHashSet_emplaceDDict(hashSet, oldTable[i]), "");
+ }
+ }
+ ZSTD_customFree((void*)oldTable, customMem);
+ DEBUGLOG(4, "Finished re-hash");
+ return 0;
+}
+
+/* Fetches a DDict with the given dictID
+ * Returns the ZSTD_DDict* with the requested dictID. If it doesn't exist, then returns NULL.
+ */
+static const ZSTD_DDict* ZSTD_DDictHashSet_getDDict(ZSTD_DDictHashSet* hashSet, U32 dictID) {
+ size_t idx = ZSTD_DDictHashSet_getIndex(hashSet, dictID);
+ const size_t idxRangeMask = hashSet->ddictPtrTableSize - 1;
+ DEBUGLOG(4, "Hashed index: for dictID: %u is %zu", dictID, idx);
+ for (;;) {
+ size_t currDictID = ZSTD_getDictID_fromDDict(hashSet->ddictPtrTable[idx]);
+ if (currDictID == dictID || currDictID == 0) {
+ /* currDictID == 0 implies a NULL ddict entry */
+ break;
+ } else {
+ idx &= idxRangeMask; /* Goes to start of table when we reach the end */
+ idx++;
+ }
+ }
+ DEBUGLOG(4, "Final idx after probing for dictID %u is: %zu", dictID, idx);
+ return hashSet->ddictPtrTable[idx];
+}
+
+/* Allocates space for and returns a ddict hash set
+ * The hash set's ZSTD_DDict* table has all values automatically set to NULL to begin with.
+ * Returns NULL if allocation failed.
+ */
+static ZSTD_DDictHashSet* ZSTD_createDDictHashSet(ZSTD_customMem customMem) {
+ ZSTD_DDictHashSet* ret = (ZSTD_DDictHashSet*)ZSTD_customMalloc(sizeof(ZSTD_DDictHashSet), customMem);
+ DEBUGLOG(4, "Allocating new hash set");
+ ret->ddictPtrTable = (const ZSTD_DDict**)ZSTD_customCalloc(DDICT_HASHSET_TABLE_BASE_SIZE * sizeof(ZSTD_DDict*), customMem);
+ ret->ddictPtrTableSize = DDICT_HASHSET_TABLE_BASE_SIZE;
+ ret->ddictPtrCount = 0;
+ if (!ret || !ret->ddictPtrTable) {
+ return NULL;
+ }
+ return ret;
+}
+
+/* Frees the table of ZSTD_DDict* within a hashset, then frees the hashset itself.
+ * Note: The ZSTD_DDict* within the table are NOT freed.
+ */
+static void ZSTD_freeDDictHashSet(ZSTD_DDictHashSet* hashSet, ZSTD_customMem customMem) {
+ DEBUGLOG(4, "Freeing ddict hash set");
+ if (hashSet && hashSet->ddictPtrTable) {
+ ZSTD_customFree((void*)hashSet->ddictPtrTable, customMem);
+ }
+ if (hashSet) {
+ ZSTD_customFree(hashSet, customMem);
+ }
+}
+
+/* Public function: Adds a DDict into the ZSTD_DDictHashSet, possibly triggering a resize of the hash set.
+ * Returns 0 on success, or a ZSTD error.
+ */
+static size_t ZSTD_DDictHashSet_addDDict(ZSTD_DDictHashSet* hashSet, const ZSTD_DDict* ddict, ZSTD_customMem customMem) {
+ DEBUGLOG(4, "Adding dict ID: %u to hashset with - Count: %zu Tablesize: %zu", ZSTD_getDictID_fromDDict(ddict), hashSet->ddictPtrCount, hashSet->ddictPtrTableSize);
+ if (hashSet->ddictPtrCount * DDICT_HASHSET_MAX_LOAD_FACTOR_COUNT_MULT / hashSet->ddictPtrTableSize * DDICT_HASHSET_MAX_LOAD_FACTOR_SIZE_MULT != 0) {
+ FORWARD_IF_ERROR(ZSTD_DDictHashSet_expand(hashSet, customMem), "");
+ }
+ FORWARD_IF_ERROR(ZSTD_DDictHashSet_emplaceDDict(hashSet, ddict), "");
+ return 0;
+}
+
/*-*************************************************************
* Context management
***************************************************************/
@@ -101,6 +240,7 @@ static void ZSTD_DCtx_resetParameters(ZSTD_DCtx* dctx)
dctx->maxWindowSize = ZSTD_MAXWINDOWSIZE_DEFAULT;
dctx->outBufferMode = ZSTD_bm_buffered;
dctx->forceIgnoreChecksum = ZSTD_d_validateChecksum;
+ dctx->refMultipleDDicts = ZSTD_rmd_refSingleDDict;
}
static void ZSTD_initDCtx_internal(ZSTD_DCtx* dctx)
@@ -120,8 +260,8 @@ static void ZSTD_initDCtx_internal(ZSTD_DCtx* dctx)
dctx->noForwardProgress = 0;
dctx->oversizedDuration = 0;
dctx->bmi2 = ZSTD_cpuid_bmi2(ZSTD_cpuid());
+ dctx->ddictSet = NULL;
ZSTD_DCtx_resetParameters(dctx);
- dctx->validateChecksum = 1;
#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
dctx->dictContentEndForFuzzing = NULL;
#endif
@@ -178,6 +318,10 @@ size_t ZSTD_freeDCtx(ZSTD_DCtx* dctx)
if (dctx->legacyContext)
ZSTD_freeLegacyStreamContext(dctx->legacyContext, dctx->previousLegacyVersion);
#endif
+ if (dctx->ddictSet) {
+ ZSTD_freeDDictHashSet(dctx->ddictSet, cMem);
+ dctx->ddictSet = NULL;
+ }
ZSTD_customFree(dctx, cMem);
return 0;
}
@@ -190,6 +334,29 @@ void ZSTD_copyDCtx(ZSTD_DCtx* dstDCtx, const ZSTD_DCtx* srcDCtx)
ZSTD_memcpy(dstDCtx, srcDCtx, toCopy); /* no need to copy workspace */
}
+/* Given a dctx with a digested frame params, re-selects the correct ZSTD_DDict based on
+ * the requested dict ID from the frame. If there exists a reference to the correct ZSTD_DDict, then
+ * accordingly sets the ddict to be used to decompress the frame.
+ *
+ * If no DDict is found, then no action is taken, and the ZSTD_DCtx::ddict remains as-is.
+ *
+ * ZSTD_d_refMultipleDDicts must be enabled for this function to be called.
+ */
+static void ZSTD_DCtx_selectFrameDDict(ZSTD_DCtx* dctx) {
+ assert(dctx->refMultipleDDicts && dctx->ddictSet);
+ DEBUGLOG(4, "Adjusting DDict based on requested dict ID from frame");
+ if (dctx->ddict) {
+ const ZSTD_DDict* frameDDict = ZSTD_DDictHashSet_getDDict(dctx->ddictSet, dctx->fParams.dictID);
+ if (frameDDict) {
+ DEBUGLOG(4, "DDict found!");
+ ZSTD_clearDict(dctx);
+ dctx->dictID = dctx->fParams.dictID;
+ dctx->ddict = frameDDict;
+ dctx->dictUses = ZSTD_use_indefinitely;
+ }
+ }
+}
+
/*-*************************************************************
* Frame header decoding
@@ -441,12 +608,19 @@ unsigned long long ZSTD_getDecompressedSize(const void* src, size_t srcSize)
/** ZSTD_decodeFrameHeader() :
* `headerSize` must be the size provided by ZSTD_frameHeaderSize().
+ * If multiple DDict references are enabled, also will choose the correct DDict to use.
* @return : 0 if success, or an error code, which can be tested using ZSTD_isError() */
static size_t ZSTD_decodeFrameHeader(ZSTD_DCtx* dctx, const void* src, size_t headerSize)
{
size_t const result = ZSTD_getFrameHeader_advanced(&(dctx->fParams), src, headerSize, dctx->format);
if (ZSTD_isError(result)) return result; /* invalid header */
RETURN_ERROR_IF(result>0, srcSize_wrong, "headerSize too small");
+
+ /* Reference DDict requested by frame if dctx references multiple ddicts */
+ if (dctx->refMultipleDDicts == ZSTD_rmd_refMultipleDDicts && dctx->ddictSet) {
+ ZSTD_DCtx_selectFrameDDict(dctx);
+ }
+
#ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
/* Skip the dictID check in fuzzing mode, because it makes the search
* harder.
@@ -456,6 +630,7 @@ static size_t ZSTD_decodeFrameHeader(ZSTD_DCtx* dctx, const void* src, size_t he
#endif
dctx->validateChecksum = (dctx->fParams.checksumFlag && !dctx->forceIgnoreChecksum) ? 1 : 0;
if (dctx->validateChecksum) XXH64_reset(&dctx->xxhState, 0);
+ dctx->processedCSize += headerSize;
return 0;
}
@@ -578,7 +753,7 @@ unsigned long long ZSTD_decompressBound(const void* src, size_t srcSize)
size_t ZSTD_insertBlock(ZSTD_DCtx* dctx, const void* blockStart, size_t blockSize)
{
DEBUGLOG(5, "ZSTD_insertBlock: %u bytes", (unsigned)blockSize);
- ZSTD_checkContinuity(dctx, blockStart);
+ ZSTD_checkContinuity(dctx, blockStart, blockSize);
dctx->previousDstEnd = (const char*)blockStart + blockSize;
return blockSize;
}
@@ -610,6 +785,32 @@ static size_t ZSTD_setRleBlock(void* dst, size_t dstCapacity,
return regenSize;
}
+static void ZSTD_DCtx_trace_end(ZSTD_DCtx const* dctx, U64 uncompressedSize, U64 compressedSize, unsigned streaming)
+{
+#if ZSTD_TRACE
+ if (dctx->traceCtx && ZSTD_trace_decompress_end != NULL) {
+ ZSTD_Trace trace;
+ ZSTD_memset(&trace, 0, sizeof(trace));
+ trace.version = ZSTD_VERSION_NUMBER;
+ trace.streaming = streaming;
+ if (dctx->ddict) {
+ trace.dictionaryID = ZSTD_getDictID_fromDDict(dctx->ddict);
+ trace.dictionarySize = ZSTD_DDict_dictSize(dctx->ddict);
+ trace.dictionaryIsCold = dctx->ddictIsCold;
+ }
+ trace.uncompressedSize = (size_t)uncompressedSize;
+ trace.compressedSize = (size_t)compressedSize;
+ trace.dctx = dctx;
+ ZSTD_trace_decompress_end(dctx->traceCtx, &trace);
+ }
+#else
+ (void)dctx;
+ (void)uncompressedSize;
+ (void)compressedSize;
+ (void)streaming;
+#endif
+}
+
/*! ZSTD_decompressFrame() :
* @dctx must be properly initialized
@@ -619,8 +820,9 @@ static size_t ZSTD_decompressFrame(ZSTD_DCtx* dctx,
void* dst, size_t dstCapacity,
const void** srcPtr, size_t *srcSizePtr)
{
- const BYTE* ip = (const BYTE*)(*srcPtr);
- BYTE* const ostart = (BYTE* const)dst;
+ const BYTE* const istart = (const BYTE*)(*srcPtr);
+ const BYTE* ip = istart;
+ BYTE* const ostart = (BYTE*)dst;
BYTE* const oend = dstCapacity != 0 ? ostart + dstCapacity : ostart;
BYTE* op = ostart;
size_t remainingSrcSize = *srcSizePtr;
@@ -695,7 +897,7 @@ static size_t ZSTD_decompressFrame(ZSTD_DCtx* dctx,
ip += 4;
remainingSrcSize -= 4;
}
-
+ ZSTD_DCtx_trace_end(dctx, (U64)(op-ostart), (U64)(ip-istart), /* streaming */ 0);
/* Allow caller to get size read */
*srcPtr = ip;
*srcSizePtr = remainingSrcSize;
@@ -764,7 +966,7 @@ static size_t ZSTD_decompressMultiFrame(ZSTD_DCtx* dctx,
* use this in all cases but ddict */
FORWARD_IF_ERROR(ZSTD_decompressBegin_usingDict(dctx, dict, dictSize), "");
}
- ZSTD_checkContinuity(dctx, dst);
+ ZSTD_checkContinuity(dctx, dst, dstCapacity);
{ const size_t res = ZSTD_decompressFrame(dctx, dst, dstCapacity,
&src, &srcSize);
@@ -899,7 +1101,9 @@ size_t ZSTD_decompressContinue(ZSTD_DCtx* dctx, void* dst, size_t dstCapacity, c
DEBUGLOG(5, "ZSTD_decompressContinue (srcSize:%u)", (unsigned)srcSize);
/* Sanity check */
RETURN_ERROR_IF(srcSize != ZSTD_nextSrcSizeToDecompressWithInputSize(dctx, srcSize), srcSize_wrong, "not allowed");
- if (dstCapacity) ZSTD_checkContinuity(dctx, dst);
+ ZSTD_checkContinuity(dctx, dst, dstCapacity);
+
+ dctx->processedCSize += srcSize;
switch (dctx->stage)
{
@@ -1004,6 +1208,7 @@ size_t ZSTD_decompressContinue(ZSTD_DCtx* dctx, void* dst, size_t dstCapacity, c
dctx->expected = 4;
dctx->stage = ZSTDds_checkChecksum;
} else {
+ ZSTD_DCtx_trace_end(dctx, dctx->decodedSize, dctx->processedCSize, /* streaming */ 1);
dctx->expected = 0; /* ends here */
dctx->stage = ZSTDds_getFrameHeaderSize;
}
@@ -1023,6 +1228,7 @@ size_t ZSTD_decompressContinue(ZSTD_DCtx* dctx, void* dst, size_t dstCapacity, c
DEBUGLOG(4, "ZSTD_decompressContinue: checksum : calculated %08X :: %08X read", (unsigned)h32, (unsigned)check32);
RETURN_ERROR_IF(check32 != h32, checksum_wrong, "");
}
+ ZSTD_DCtx_trace_end(dctx, dctx->decodedSize, dctx->processedCSize, /* streaming */ 1);
dctx->expected = 0;
dctx->stage = ZSTDds_getFrameHeaderSize;
return 0;
@@ -1176,8 +1382,12 @@ static size_t ZSTD_decompress_insertDictionary(ZSTD_DCtx* dctx, const void* dict
size_t ZSTD_decompressBegin(ZSTD_DCtx* dctx)
{
assert(dctx != NULL);
+#if ZSTD_TRACE
+ dctx->traceCtx = (ZSTD_trace_decompress_begin != NULL) ? ZSTD_trace_decompress_begin(dctx) : 0;
+#endif
dctx->expected = ZSTD_startingInputLength(dctx->format); /* dctx->format must be properly set */
dctx->stage = ZSTDds_getFrameHeaderSize;
+ dctx->processedCSize = 0;
dctx->decodedSize = 0;
dctx->previousDstEnd = NULL;
dctx->prefixStart = NULL;
@@ -1391,6 +1601,16 @@ size_t ZSTD_DCtx_refDDict(ZSTD_DCtx* dctx, const ZSTD_DDict* ddict)
if (ddict) {
dctx->ddict = ddict;
dctx->dictUses = ZSTD_use_indefinitely;
+ if (dctx->refMultipleDDicts == ZSTD_rmd_refMultipleDDicts) {
+ if (dctx->ddictSet == NULL) {
+ dctx->ddictSet = ZSTD_createDDictHashSet(dctx->customMem);
+ if (!dctx->ddictSet) {
+ RETURN_ERROR(memory_allocation, "Failed to allocate memory for hash set!");
+ }
+ }
+ assert(!dctx->staticSize); /* Impossible: ddictSet cannot have been allocated if static dctx */
+ FORWARD_IF_ERROR(ZSTD_DDictHashSet_addDDict(dctx->ddictSet, ddict, dctx->customMem), "");
+ }
}
return 0;
}
@@ -1436,6 +1656,10 @@ ZSTD_bounds ZSTD_dParam_getBounds(ZSTD_dParameter dParam)
bounds.lowerBound = (int)ZSTD_d_validateChecksum;
bounds.upperBound = (int)ZSTD_d_ignoreChecksum;
return bounds;
+ case ZSTD_d_refMultipleDDicts:
+ bounds.lowerBound = (int)ZSTD_rmd_refSingleDDict;
+ bounds.upperBound = (int)ZSTD_rmd_refMultipleDDicts;
+ return bounds;
default:;
}
bounds.error = ERROR(parameter_unsupported);
@@ -1473,6 +1697,9 @@ size_t ZSTD_DCtx_getParameter(ZSTD_DCtx* dctx, ZSTD_dParameter param, int* value
case ZSTD_d_forceIgnoreChecksum:
*value = (int)dctx->forceIgnoreChecksum;
return 0;
+ case ZSTD_d_refMultipleDDicts:
+ *value = (int)dctx->refMultipleDDicts;
+ return 0;
default:;
}
RETURN_ERROR(parameter_unsupported, "");
@@ -1499,6 +1726,13 @@ size_t ZSTD_DCtx_setParameter(ZSTD_DCtx* dctx, ZSTD_dParameter dParam, int value
CHECK_DBOUNDS(ZSTD_d_forceIgnoreChecksum, value);
dctx->forceIgnoreChecksum = (ZSTD_forceIgnoreChecksum_e)value;
return 0;
+ case ZSTD_d_refMultipleDDicts:
+ CHECK_DBOUNDS(ZSTD_d_refMultipleDDicts, value);
+ if (dctx->staticSize != 0) {
+ RETURN_ERROR(parameter_unsupported, "Static dctx does not support multiple DDicts!");
+ }
+ dctx->refMultipleDDicts = (ZSTD_refMultipleDDicts_e)value;
+ return 0;
default:;
}
RETURN_ERROR(parameter_unsupported, "");
@@ -1680,6 +1914,9 @@ size_t ZSTD_decompressStream(ZSTD_DStream* zds, ZSTD_outBuffer* output, ZSTD_inB
} }
#endif
{ size_t const hSize = ZSTD_getFrameHeader_advanced(&zds->fParams, zds->headerBuffer, zds->lhSize, zds->format);
+ if (zds->refMultipleDDicts && zds->ddictSet) {
+ ZSTD_DCtx_selectFrameDDict(zds);
+ }
DEBUGLOG(5, "header size : %u", (U32)hSize);
if (ZSTD_isError(hSize)) {
#if defined(ZSTD_LEGACY_SUPPORT) && (ZSTD_LEGACY_SUPPORT>=1)
diff --git a/thirdparty/zstd/decompress/zstd_decompress_block.c b/thirdparty/zstd/decompress/zstd_decompress_block.c
index 19cbdc5c16..349dcdc333 100644
--- a/thirdparty/zstd/decompress/zstd_decompress_block.c
+++ b/thirdparty/zstd/decompress/zstd_decompress_block.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
@@ -577,7 +577,7 @@ static size_t ZSTD_buildSeqTable(ZSTD_seqSymbol* DTableSpace, const ZSTD_seqSymb
size_t ZSTD_decodeSeqHeaders(ZSTD_DCtx* dctx, int* nbSeqPtr,
const void* src, size_t srcSize)
{
- const BYTE* const istart = (const BYTE* const)src;
+ const BYTE* const istart = (const BYTE*)src;
const BYTE* const iend = istart + srcSize;
const BYTE* ip = istart;
int nbSeq;
@@ -658,7 +658,6 @@ typedef struct {
size_t litLength;
size_t matchLength;
size_t offset;
- const BYTE* match;
} seq_t;
typedef struct {
@@ -672,9 +671,6 @@ typedef struct {
ZSTD_fseState stateOffb;
ZSTD_fseState stateML;
size_t prevOffset[ZSTD_REP_NUM];
- const BYTE* prefixStart;
- const BYTE* dictEnd;
- size_t pos;
} seqState_t;
/*! ZSTD_overlapCopy8() :
@@ -936,10 +932,9 @@ ZSTD_updateFseStateWithDInfo(ZSTD_fseState* DStatePtr, BIT_DStream_t* bitD, ZSTD
: 0)
typedef enum { ZSTD_lo_isRegularOffset, ZSTD_lo_isLongOffset=1 } ZSTD_longOffset_e;
-typedef enum { ZSTD_p_noPrefetch=0, ZSTD_p_prefetch=1 } ZSTD_prefetch_e;
FORCE_INLINE_TEMPLATE seq_t
-ZSTD_decodeSequence(seqState_t* seqState, const ZSTD_longOffset_e longOffsets, const ZSTD_prefetch_e prefetch)
+ZSTD_decodeSequence(seqState_t* seqState, const ZSTD_longOffset_e longOffsets)
{
seq_t seq;
ZSTD_seqSymbol const llDInfo = seqState->stateLL.table[seqState->stateLL.state];
@@ -1014,14 +1009,6 @@ ZSTD_decodeSequence(seqState_t* seqState, const ZSTD_longOffset_e longOffsets, c
DEBUGLOG(6, "seq: litL=%u, matchL=%u, offset=%u",
(U32)seq.litLength, (U32)seq.matchLength, (U32)seq.offset);
- if (prefetch == ZSTD_p_prefetch) {
- size_t const pos = seqState->pos + seq.litLength;
- const BYTE* const matchBase = (seq.offset > pos) ? seqState->dictEnd : seqState->prefixStart;
- seq.match = matchBase + pos - seq.offset; /* note : this operation can overflow when seq.offset is really too large, which can only happen when input is corrupted.
- * No consequence though : no memory access will occur, offset is only used for prefetching */
- seqState->pos = pos + seq.matchLength;
- }
-
/* ANS state update
* gcc-9.0.0 does 2.5% worse with ZSTD_updateFseStateWithDInfo().
* clang-9.2.0 does 7% worse with ZSTD_updateFseState().
@@ -1108,7 +1095,7 @@ ZSTD_decompressSequences_body( ZSTD_DCtx* dctx,
{
const BYTE* ip = (const BYTE*)seqStart;
const BYTE* const iend = ip + seqSize;
- BYTE* const ostart = (BYTE* const)dst;
+ BYTE* const ostart = (BYTE*)dst;
BYTE* const oend = ostart + maxDstSize;
BYTE* op = ostart;
const BYTE* litPtr = dctx->litPtr;
@@ -1122,7 +1109,6 @@ ZSTD_decompressSequences_body( ZSTD_DCtx* dctx,
/* Regen sequences */
if (nbSeq) {
seqState_t seqState;
- size_t error = 0;
dctx->fseEntropy = 1;
{ U32 i; for (i=0; i<ZSTD_REP_NUM; i++) seqState.prevOffset[i] = dctx->entropy.rep[i]; }
RETURN_ERROR_IF(
@@ -1156,13 +1142,14 @@ ZSTD_decompressSequences_body( ZSTD_DCtx* dctx,
* If you see most cycles served out of the DSB you've hit the good case.
* If it is pretty even then you may be in an okay case.
*
- * I've been able to reproduce this issue on the following CPUs:
+ * This issue has been reproduced on the following CPUs:
* - Kabylake: Macbook Pro (15-inch, 2019) 2.4 GHz Intel Core i9
* Use Instruments->Counters to get DSB/MITE cycles.
* I never got performance swings, but I was able to
* go from the good case of mostly DSB to half of the
* cycles served from MITE.
* - Coffeelake: Intel i9-9900k
+ * - Coffeelake: Intel i7-9700k
*
* I haven't been able to reproduce the instability or DSB misses on any
* of the following CPUS:
@@ -1175,33 +1162,35 @@ ZSTD_decompressSequences_body( ZSTD_DCtx* dctx,
*
* https://gist.github.com/terrelln/9889fc06a423fd5ca6e99351564473f4
*/
+ __asm__(".p2align 6");
+ __asm__("nop");
__asm__(".p2align 5");
__asm__("nop");
+# if __GNUC__ >= 9
+ /* better for gcc-9 and gcc-10, worse for clang and gcc-8 */
+ __asm__(".p2align 3");
+# else
__asm__(".p2align 4");
+# endif
#endif
for ( ; ; ) {
- seq_t const sequence = ZSTD_decodeSequence(&seqState, isLongOffset, ZSTD_p_noPrefetch);
+ seq_t const sequence = ZSTD_decodeSequence(&seqState, isLongOffset);
size_t const oneSeqSize = ZSTD_execSequence(op, oend, sequence, &litPtr, litEnd, prefixStart, vBase, dictEnd);
#if defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION) && defined(FUZZING_ASSERT_VALID_SEQUENCE)
assert(!ZSTD_isError(oneSeqSize));
if (frame) ZSTD_assertValidSequence(dctx, op, oend, sequence, prefixStart, vBase);
#endif
+ if (UNLIKELY(ZSTD_isError(oneSeqSize)))
+ return oneSeqSize;
DEBUGLOG(6, "regenerated sequence size : %u", (U32)oneSeqSize);
- BIT_reloadDStream(&(seqState.DStream));
op += oneSeqSize;
- /* gcc and clang both don't like early returns in this loop.
- * Instead break and check for an error at the end of the loop.
- */
- if (UNLIKELY(ZSTD_isError(oneSeqSize))) {
- error = oneSeqSize;
+ if (UNLIKELY(!--nbSeq))
break;
- }
- if (UNLIKELY(!--nbSeq)) break;
+ BIT_reloadDStream(&(seqState.DStream));
}
/* check if reached exact end */
DEBUGLOG(5, "ZSTD_decompressSequences_body: after decode loop, remaining nbSeq : %i", nbSeq);
- if (ZSTD_isError(error)) return error;
RETURN_ERROR_IF(nbSeq, corruption_detected, "");
RETURN_ERROR_IF(BIT_reloadDStream(&seqState.DStream) < BIT_DStream_completed, corruption_detected, "");
/* save reps for next block */
@@ -1232,6 +1221,24 @@ ZSTD_decompressSequences_default(ZSTD_DCtx* dctx,
#endif /* ZSTD_FORCE_DECOMPRESS_SEQUENCES_LONG */
#ifndef ZSTD_FORCE_DECOMPRESS_SEQUENCES_SHORT
+
+FORCE_INLINE_TEMPLATE size_t
+ZSTD_prefetchMatch(size_t prefetchPos, seq_t const sequence,
+ const BYTE* const prefixStart, const BYTE* const dictEnd)
+{
+ prefetchPos += sequence.litLength;
+ { const BYTE* const matchBase = (sequence.offset > prefetchPos) ? dictEnd : prefixStart;
+ const BYTE* const match = matchBase + prefetchPos - sequence.offset; /* note : this operation can overflow when seq.offset is really too large, which can only happen when input is corrupted.
+ * No consequence though : memory address is only used for prefetching, not for dereferencing */
+ PREFETCH_L1(match); PREFETCH_L1(match+CACHELINE_SIZE); /* note : it's safe to invoke PREFETCH() on any memory address, including invalid ones */
+ }
+ return prefetchPos + sequence.matchLength;
+}
+
+/* This decoding function employs prefetching
+ * to reduce latency impact of cache misses.
+ * It's generally employed when block contains a significant portion of long-distance matches
+ * or when coupled with a "cold" dictionary */
FORCE_INLINE_TEMPLATE size_t
ZSTD_decompressSequencesLong_body(
ZSTD_DCtx* dctx,
@@ -1242,7 +1249,7 @@ ZSTD_decompressSequencesLong_body(
{
const BYTE* ip = (const BYTE*)seqStart;
const BYTE* const iend = ip + seqSize;
- BYTE* const ostart = (BYTE* const)dst;
+ BYTE* const ostart = (BYTE*)dst;
BYTE* const oend = ostart + maxDstSize;
BYTE* op = ostart;
const BYTE* litPtr = dctx->litPtr;
@@ -1254,18 +1261,17 @@ ZSTD_decompressSequencesLong_body(
/* Regen sequences */
if (nbSeq) {
-#define STORED_SEQS 4
+#define STORED_SEQS 8
#define STORED_SEQS_MASK (STORED_SEQS-1)
-#define ADVANCED_SEQS 4
+#define ADVANCED_SEQS STORED_SEQS
seq_t sequences[STORED_SEQS];
int const seqAdvance = MIN(nbSeq, ADVANCED_SEQS);
seqState_t seqState;
int seqNb;
+ size_t prefetchPos = (size_t)(op-prefixStart); /* track position relative to prefixStart */
+
dctx->fseEntropy = 1;
{ int i; for (i=0; i<ZSTD_REP_NUM; i++) seqState.prevOffset[i] = dctx->entropy.rep[i]; }
- seqState.prefixStart = prefixStart;
- seqState.pos = (size_t)(op-prefixStart);
- seqState.dictEnd = dictEnd;
assert(dst != NULL);
assert(iend >= ip);
RETURN_ERROR_IF(
@@ -1277,21 +1283,23 @@ ZSTD_decompressSequencesLong_body(
/* prepare in advance */
for (seqNb=0; (BIT_reloadDStream(&seqState.DStream) <= BIT_DStream_completed) && (seqNb<seqAdvance); seqNb++) {
- sequences[seqNb] = ZSTD_decodeSequence(&seqState, isLongOffset, ZSTD_p_prefetch);
- PREFETCH_L1(sequences[seqNb].match); PREFETCH_L1(sequences[seqNb].match + sequences[seqNb].matchLength - 1); /* note : it's safe to invoke PREFETCH() on any memory address, including invalid ones */
+ seq_t const sequence = ZSTD_decodeSequence(&seqState, isLongOffset);
+ prefetchPos = ZSTD_prefetchMatch(prefetchPos, sequence, prefixStart, dictEnd);
+ sequences[seqNb] = sequence;
}
RETURN_ERROR_IF(seqNb<seqAdvance, corruption_detected, "");
/* decode and decompress */
for ( ; (BIT_reloadDStream(&(seqState.DStream)) <= BIT_DStream_completed) && (seqNb<nbSeq) ; seqNb++) {
- seq_t const sequence = ZSTD_decodeSequence(&seqState, isLongOffset, ZSTD_p_prefetch);
+ seq_t const sequence = ZSTD_decodeSequence(&seqState, isLongOffset);
size_t const oneSeqSize = ZSTD_execSequence(op, oend, sequences[(seqNb-ADVANCED_SEQS) & STORED_SEQS_MASK], &litPtr, litEnd, prefixStart, dictStart, dictEnd);
#if defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION) && defined(FUZZING_ASSERT_VALID_SEQUENCE)
assert(!ZSTD_isError(oneSeqSize));
if (frame) ZSTD_assertValidSequence(dctx, op, oend, sequences[(seqNb-ADVANCED_SEQS) & STORED_SEQS_MASK], prefixStart, dictStart);
#endif
if (ZSTD_isError(oneSeqSize)) return oneSeqSize;
- PREFETCH_L1(sequence.match); PREFETCH_L1(sequence.match + sequence.matchLength - 1); /* note : it's safe to invoke PREFETCH() on any memory address, including invalid ones */
+
+ prefetchPos = ZSTD_prefetchMatch(prefetchPos, sequence, prefixStart, dictEnd);
sequences[seqNb & STORED_SEQS_MASK] = sequence;
op += oneSeqSize;
}
@@ -1517,9 +1525,9 @@ ZSTD_decompressBlock_internal(ZSTD_DCtx* dctx,
}
-void ZSTD_checkContinuity(ZSTD_DCtx* dctx, const void* dst)
+void ZSTD_checkContinuity(ZSTD_DCtx* dctx, const void* dst, size_t dstSize)
{
- if (dst != dctx->previousDstEnd) { /* not contiguous */
+ if (dst != dctx->previousDstEnd && dstSize > 0) { /* not contiguous */
dctx->dictEnd = dctx->previousDstEnd;
dctx->virtualStart = (const char*)dst - ((const char*)(dctx->previousDstEnd) - (const char*)(dctx->prefixStart));
dctx->prefixStart = dst;
@@ -1533,7 +1541,7 @@ size_t ZSTD_decompressBlock(ZSTD_DCtx* dctx,
const void* src, size_t srcSize)
{
size_t dSize;
- ZSTD_checkContinuity(dctx, dst);
+ ZSTD_checkContinuity(dctx, dst, dstCapacity);
dSize = ZSTD_decompressBlock_internal(dctx, dst, dstCapacity, src, srcSize, /* frame */ 0);
dctx->previousDstEnd = (char*)dst + dSize;
return dSize;
diff --git a/thirdparty/zstd/decompress/zstd_decompress_block.h b/thirdparty/zstd/decompress/zstd_decompress_block.h
index b5715c168e..049a0cd84c 100644
--- a/thirdparty/zstd/decompress/zstd_decompress_block.h
+++ b/thirdparty/zstd/decompress/zstd_decompress_block.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
diff --git a/thirdparty/zstd/decompress/zstd_decompress_internal.h b/thirdparty/zstd/decompress/zstd_decompress_internal.h
index f80b471e99..ebda0c9031 100644
--- a/thirdparty/zstd/decompress/zstd_decompress_internal.h
+++ b/thirdparty/zstd/decompress/zstd_decompress_internal.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
@@ -99,6 +99,13 @@ typedef enum {
ZSTD_use_once = 1 /* Use the dictionary once and set to ZSTD_dont_use */
} ZSTD_dictUses_e;
+/* Hashset for storing references to multiple ZSTD_DDict within ZSTD_DCtx */
+typedef struct {
+ const ZSTD_DDict** ddictPtrTable;
+ size_t ddictPtrTableSize;
+ size_t ddictPtrCount;
+} ZSTD_DDictHashSet;
+
struct ZSTD_DCtx_s
{
const ZSTD_seqSymbol* LLTptr;
@@ -113,6 +120,7 @@ struct ZSTD_DCtx_s
const void* dictEnd; /* end of previous segment */
size_t expected;
ZSTD_frameHeader fParams;
+ U64 processedCSize;
U64 decodedSize;
blockType_e bType; /* used in ZSTD_decompressContinue(), store blockType between block header decoding and block decompression stages */
ZSTD_dStage stage;
@@ -136,6 +144,8 @@ struct ZSTD_DCtx_s
U32 dictID;
int ddictIsCold; /* if == 1 : dictionary is "new" for working context, and presumed "cold" (not in cpu cache) */
ZSTD_dictUses_e dictUses;
+ ZSTD_DDictHashSet* ddictSet; /* Hash set for multiple ddicts */
+ ZSTD_refMultipleDDicts_e refMultipleDDicts; /* User specified: if == 1, will allow references to multiple DDicts. Default == 0 (disabled) */
/* streaming */
ZSTD_dStreamStage streamStage;
@@ -166,6 +176,11 @@ struct ZSTD_DCtx_s
void const* dictContentBeginForFuzzing;
void const* dictContentEndForFuzzing;
#endif
+
+ /* Tracing */
+#if ZSTD_TRACE
+ ZSTD_TraceCtx traceCtx;
+#endif
}; /* typedef'd to ZSTD_DCtx within "zstd.h" */
@@ -184,7 +199,7 @@ size_t ZSTD_loadDEntropy(ZSTD_entropyDTables_t* entropy,
* If yes, do nothing (continue on current segment).
* If not, classify previous segment as "external dictionary", and start a new segment.
* This function cannot fail. */
-void ZSTD_checkContinuity(ZSTD_DCtx* dctx, const void* dst);
+void ZSTD_checkContinuity(ZSTD_DCtx* dctx, const void* dst, size_t dstSize);
#endif /* ZSTD_DECOMPRESS_INTERNAL_H */
diff --git a/thirdparty/zstd/zstd.h b/thirdparty/zstd/zstd.h
index b0ecdf5538..4651e6c4dc 100644
--- a/thirdparty/zstd/zstd.h
+++ b/thirdparty/zstd/zstd.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
@@ -71,8 +71,8 @@ extern "C" {
/*------ Version ------*/
#define ZSTD_VERSION_MAJOR 1
-#define ZSTD_VERSION_MINOR 4
-#define ZSTD_VERSION_RELEASE 8
+#define ZSTD_VERSION_MINOR 5
+#define ZSTD_VERSION_RELEASE 0
#define ZSTD_VERSION_NUMBER (ZSTD_VERSION_MAJOR *100*100 + ZSTD_VERSION_MINOR *100 + ZSTD_VERSION_RELEASE)
/*! ZSTD_versionNumber() :
@@ -109,7 +109,6 @@ ZSTDLIB_API const char* ZSTD_versionString(void);
#define ZSTD_BLOCKSIZE_MAX (1<<ZSTD_BLOCKSIZELOG_MAX)
-
/***************************************
* Simple API
***************************************/
@@ -166,7 +165,7 @@ ZSTDLIB_API unsigned long long ZSTD_getFrameContentSize(const void *src, size_t
* @return : decompressed size of `src` frame content _if known and not empty_, 0 otherwise. */
ZSTDLIB_API unsigned long long ZSTD_getDecompressedSize(const void* src, size_t srcSize);
-/*! ZSTD_findFrameCompressedSize() :
+/*! ZSTD_findFrameCompressedSize() : Requires v1.4.0+
* `src` should point to the start of a ZSTD frame or skippable frame.
* `srcSize` must be >= first frame size
* @return : the compressed size of the first frame starting at `src`,
@@ -180,8 +179,9 @@ ZSTDLIB_API size_t ZSTD_findFrameCompressedSize(const void* src, size_t srcSize)
ZSTDLIB_API size_t ZSTD_compressBound(size_t srcSize); /*!< maximum compressed size in worst case single-pass scenario */
ZSTDLIB_API unsigned ZSTD_isError(size_t code); /*!< tells if a `size_t` function result is an error code */
ZSTDLIB_API const char* ZSTD_getErrorName(size_t code); /*!< provides readable string from an error code */
-ZSTDLIB_API int ZSTD_minCLevel(void); /*!< minimum negative compression level allowed */
+ZSTDLIB_API int ZSTD_minCLevel(void); /*!< minimum negative compression level allowed, requires v1.4.0+ */
ZSTDLIB_API int ZSTD_maxCLevel(void); /*!< maximum compression level available */
+ZSTDLIB_API int ZSTD_defaultCLevel(void); /*!< default compression level, specified by ZSTD_CLEVEL_DEFAULT, requires v1.5.0+ */
/***************************************
@@ -199,7 +199,7 @@ ZSTDLIB_API int ZSTD_maxCLevel(void); /*!< maximum compres
*/
typedef struct ZSTD_CCtx_s ZSTD_CCtx;
ZSTDLIB_API ZSTD_CCtx* ZSTD_createCCtx(void);
-ZSTDLIB_API size_t ZSTD_freeCCtx(ZSTD_CCtx* cctx);
+ZSTDLIB_API size_t ZSTD_freeCCtx(ZSTD_CCtx* cctx); /* accept NULL pointer */
/*! ZSTD_compressCCtx() :
* Same as ZSTD_compress(), using an explicit ZSTD_CCtx.
@@ -222,7 +222,7 @@ ZSTDLIB_API size_t ZSTD_compressCCtx(ZSTD_CCtx* cctx,
* Use one context per thread for parallel execution. */
typedef struct ZSTD_DCtx_s ZSTD_DCtx;
ZSTDLIB_API ZSTD_DCtx* ZSTD_createDCtx(void);
-ZSTDLIB_API size_t ZSTD_freeDCtx(ZSTD_DCtx* dctx);
+ZSTDLIB_API size_t ZSTD_freeDCtx(ZSTD_DCtx* dctx); /* accept NULL pointer */
/*! ZSTD_decompressDCtx() :
* Same as ZSTD_decompress(),
@@ -234,9 +234,9 @@ ZSTDLIB_API size_t ZSTD_decompressDCtx(ZSTD_DCtx* dctx,
const void* src, size_t srcSize);
-/***************************************
-* Advanced compression API
-***************************************/
+/*********************************************
+* Advanced compression API (Requires v1.4.0+)
+**********************************************/
/* API design :
* Parameters are pushed one by one into an existing context,
@@ -266,7 +266,6 @@ typedef enum { ZSTD_fast=1,
Only the order (from fast to strong) is guaranteed */
} ZSTD_strategy;
-
typedef enum {
/* compression parameters
@@ -332,7 +331,6 @@ typedef enum {
* The higher the value of selected strategy, the more complex it is,
* resulting in stronger and slower compression.
* Special: value 0 means "use default strategy". */
-
/* LDM mode parameters */
ZSTD_c_enableLongDistanceMatching=160, /* Enable long distance matching.
* This parameter is designed to improve compression ratio
@@ -389,7 +387,7 @@ typedef enum {
ZSTD_c_jobSize=401, /* Size of a compression job. This value is enforced only when nbWorkers >= 1.
* Each compression job is completed in parallel, so this value can indirectly impact the nb of active threads.
* 0 means default, which is dynamically determined based on compression parameters.
- * Job size must be a minimum of overlap size, or 1 MB, whichever is largest.
+ * Job size must be a minimum of overlap size, or ZSTDMT_JOBSIZE_MIN (= 512 KB), whichever is largest.
* The minimum size is automatically and transparently enforced. */
ZSTD_c_overlapLog=402, /* Control the overlap size, as a fraction of window size.
* The overlap size is an amount of data reloaded from previous job at the beginning of a new job.
@@ -419,6 +417,8 @@ typedef enum {
* ZSTD_c_stableOutBuffer
* ZSTD_c_blockDelimiters
* ZSTD_c_validateSequences
+ * ZSTD_c_splitBlocks
+ * ZSTD_c_useRowMatchFinder
* Because they are not stable, it's necessary to define ZSTD_STATIC_LINKING_ONLY to access them.
* note : never ever use experimentalParam? names directly;
* also, the enums values themselves are unstable and can still change.
@@ -434,7 +434,10 @@ typedef enum {
ZSTD_c_experimentalParam9=1006,
ZSTD_c_experimentalParam10=1007,
ZSTD_c_experimentalParam11=1008,
- ZSTD_c_experimentalParam12=1009
+ ZSTD_c_experimentalParam12=1009,
+ ZSTD_c_experimentalParam13=1010,
+ ZSTD_c_experimentalParam14=1011,
+ ZSTD_c_experimentalParam15=1012
} ZSTD_cParameter;
typedef struct {
@@ -519,9 +522,9 @@ ZSTDLIB_API size_t ZSTD_compress2( ZSTD_CCtx* cctx,
const void* src, size_t srcSize);
-/***************************************
-* Advanced decompression API
-***************************************/
+/***********************************************
+* Advanced decompression API (Requires v1.4.0+)
+************************************************/
/* The advanced API pushes parameters one by one into an existing DCtx context.
* Parameters are sticky, and remain valid for all following frames
@@ -546,12 +549,14 @@ typedef enum {
* ZSTD_d_format
* ZSTD_d_stableOutBuffer
* ZSTD_d_forceIgnoreChecksum
+ * ZSTD_d_refMultipleDDicts
* Because they are not stable, it's necessary to define ZSTD_STATIC_LINKING_ONLY to access them.
* note : never ever use experimentalParam? names directly
*/
ZSTD_d_experimentalParam1=1000,
ZSTD_d_experimentalParam2=1001,
- ZSTD_d_experimentalParam3=1002
+ ZSTD_d_experimentalParam3=1002,
+ ZSTD_d_experimentalParam4=1003
} ZSTD_dParameter;
@@ -665,7 +670,7 @@ typedef ZSTD_CCtx ZSTD_CStream; /**< CCtx and CStream are now effectively same
/* Continue to distinguish them for compatibility with older versions <= v1.2.0 */
/*===== ZSTD_CStream management functions =====*/
ZSTDLIB_API ZSTD_CStream* ZSTD_createCStream(void);
-ZSTDLIB_API size_t ZSTD_freeCStream(ZSTD_CStream* zcs);
+ZSTDLIB_API size_t ZSTD_freeCStream(ZSTD_CStream* zcs); /* accept NULL pointer */
/*===== Streaming compression functions =====*/
typedef enum {
@@ -681,7 +686,7 @@ typedef enum {
: note : multithreaded compression will block to flush as much output as possible. */
} ZSTD_EndDirective;
-/*! ZSTD_compressStream2() :
+/*! ZSTD_compressStream2() : Requires v1.4.0+
* Behaves about the same as ZSTD_compressStream, with additional control on end directive.
* - Compression parameters are pushed into CCtx before starting compression, using ZSTD_CCtx_set*()
* - Compression parameters cannot be changed once compression is started (save a list of exceptions in multi-threading mode)
@@ -727,11 +732,11 @@ ZSTDLIB_API size_t ZSTD_CStreamOutSize(void); /**< recommended size for output
/* *****************************************************************************
- * This following is a legacy streaming API.
+ * This following is a legacy streaming API, available since v1.0+ .
* It can be replaced by ZSTD_CCtx_reset() and ZSTD_compressStream2().
* It is redundant, but remains fully supported.
- * Advanced parameters and dictionary compression can only be used through the
- * new API.
+ * Streaming in combination with advanced parameters and dictionary compression
+ * can only be used through the new API.
******************************************************************************/
/*!
@@ -786,7 +791,7 @@ typedef ZSTD_DCtx ZSTD_DStream; /**< DCtx and DStream are now effectively same
/* For compatibility with versions <= v1.2.0, prefer differentiating them. */
/*===== ZSTD_DStream management functions =====*/
ZSTDLIB_API ZSTD_DStream* ZSTD_createDStream(void);
-ZSTDLIB_API size_t ZSTD_freeDStream(ZSTD_DStream* zds);
+ZSTDLIB_API size_t ZSTD_freeDStream(ZSTD_DStream* zds); /* accept NULL pointer */
/*===== Streaming decompression functions =====*/
@@ -809,7 +814,7 @@ ZSTDLIB_API size_t ZSTD_DStreamOutSize(void); /*!< recommended size for output
/*! ZSTD_compress_usingDict() :
* Compression at an explicit compression level using a Dictionary.
* A dictionary can be any arbitrary data segment (also called a prefix),
- * or a buffer with specified information (see dictBuilder/zdict.h).
+ * or a buffer with specified information (see zdict.h).
* Note : This function loads the dictionary, resulting in significant startup delay.
* It's intended for a dictionary used only once.
* Note 2 : When `dict == NULL || dictSize < 8` no dictionary is used. */
@@ -852,7 +857,8 @@ ZSTDLIB_API ZSTD_CDict* ZSTD_createCDict(const void* dictBuffer, size_t dictSize
int compressionLevel);
/*! ZSTD_freeCDict() :
- * Function frees memory allocated by ZSTD_createCDict(). */
+ * Function frees memory allocated by ZSTD_createCDict().
+ * If a NULL pointer is passed, no operation is performed. */
ZSTDLIB_API size_t ZSTD_freeCDict(ZSTD_CDict* CDict);
/*! ZSTD_compress_usingCDict() :
@@ -874,7 +880,8 @@ typedef struct ZSTD_DDict_s ZSTD_DDict;
ZSTDLIB_API ZSTD_DDict* ZSTD_createDDict(const void* dictBuffer, size_t dictSize);
/*! ZSTD_freeDDict() :
- * Function frees memory allocated with ZSTD_createDDict() */
+ * Function frees memory allocated with ZSTD_createDDict()
+ * If a NULL pointer is passed, no operation is performed. */
ZSTDLIB_API size_t ZSTD_freeDDict(ZSTD_DDict* ddict);
/*! ZSTD_decompress_usingDDict() :
@@ -890,19 +897,25 @@ ZSTDLIB_API size_t ZSTD_decompress_usingDDict(ZSTD_DCtx* dctx,
* Dictionary helper functions
*******************************/
-/*! ZSTD_getDictID_fromDict() :
+/*! ZSTD_getDictID_fromDict() : Requires v1.4.0+
* Provides the dictID stored within dictionary.
* if @return == 0, the dictionary is not conformant with Zstandard specification.
* It can still be loaded, but as a content-only dictionary. */
ZSTDLIB_API unsigned ZSTD_getDictID_fromDict(const void* dict, size_t dictSize);
-/*! ZSTD_getDictID_fromDDict() :
+/*! ZSTD_getDictID_fromCDict() : Requires v1.5.0+
+ * Provides the dictID of the dictionary loaded into `cdict`.
+ * If @return == 0, the dictionary is not conformant to Zstandard specification, or empty.
+ * Non-conformant dictionaries can still be loaded, but as content-only dictionaries. */
+ZSTDLIB_API unsigned ZSTD_getDictID_fromCDict(const ZSTD_CDict* cdict);
+
+/*! ZSTD_getDictID_fromDDict() : Requires v1.4.0+
* Provides the dictID of the dictionary loaded into `ddict`.
* If @return == 0, the dictionary is not conformant to Zstandard specification, or empty.
* Non-conformant dictionaries can still be loaded, but as content-only dictionaries. */
ZSTDLIB_API unsigned ZSTD_getDictID_fromDDict(const ZSTD_DDict* ddict);
-/*! ZSTD_getDictID_fromFrame() :
+/*! ZSTD_getDictID_fromFrame() : Requires v1.4.0+
* Provides the dictID required to decompressed the frame stored within `src`.
* If @return == 0, the dictID could not be decoded.
* This could for one of the following reasons :
@@ -916,7 +929,7 @@ ZSTDLIB_API unsigned ZSTD_getDictID_fromFrame(const void* src, size_t srcSize);
/*******************************************************************************
- * Advanced dictionary and prefix API
+ * Advanced dictionary and prefix API (Requires v1.4.0+)
*
* This API allows dictionaries to be used with ZSTD_compress2(),
* ZSTD_compressStream2(), and ZSTD_decompress(). Dictionaries are sticky, and
@@ -925,7 +938,7 @@ ZSTDLIB_API unsigned ZSTD_getDictID_fromFrame(const void* src, size_t srcSize);
******************************************************************************/
-/*! ZSTD_CCtx_loadDictionary() :
+/*! ZSTD_CCtx_loadDictionary() : Requires v1.4.0+
* Create an internal CDict from `dict` buffer.
* Decompression will have to use same dictionary.
* @result : 0, or an error code (which can be tested with ZSTD_isError()).
@@ -944,11 +957,11 @@ ZSTDLIB_API unsigned ZSTD_getDictID_fromFrame(const void* src, size_t srcSize);
* to precisely select how dictionary content must be interpreted. */
ZSTDLIB_API size_t ZSTD_CCtx_loadDictionary(ZSTD_CCtx* cctx, const void* dict, size_t dictSize);
-/*! ZSTD_CCtx_refCDict() :
+/*! ZSTD_CCtx_refCDict() : Requires v1.4.0+
* Reference a prepared dictionary, to be used for all next compressed frames.
* Note that compression parameters are enforced from within CDict,
* and supersede any compression parameter previously set within CCtx.
- * The parameters ignored are labled as "superseded-by-cdict" in the ZSTD_cParameter enum docs.
+ * The parameters ignored are labelled as "superseded-by-cdict" in the ZSTD_cParameter enum docs.
* The ignored parameters will be used again if the CCtx is returned to no-dictionary mode.
* The dictionary will remain valid for future compressed frames using same CCtx.
* @result : 0, or an error code (which can be tested with ZSTD_isError()).
@@ -958,7 +971,7 @@ ZSTDLIB_API size_t ZSTD_CCtx_loadDictionary(ZSTD_CCtx* cctx, const void* dict, s
* Note 2 : CDict is just referenced, its lifetime must outlive its usage within CCtx. */
ZSTDLIB_API size_t ZSTD_CCtx_refCDict(ZSTD_CCtx* cctx, const ZSTD_CDict* cdict);
-/*! ZSTD_CCtx_refPrefix() :
+/*! ZSTD_CCtx_refPrefix() : Requires v1.4.0+
* Reference a prefix (single-usage dictionary) for next compressed frame.
* A prefix is **only used once**. Tables are discarded at end of frame (ZSTD_e_end).
* Decompression will need same prefix to properly regenerate data.
@@ -979,7 +992,7 @@ ZSTDLIB_API size_t ZSTD_CCtx_refCDict(ZSTD_CCtx* cctx, const ZSTD_CDict* cdict);
ZSTDLIB_API size_t ZSTD_CCtx_refPrefix(ZSTD_CCtx* cctx,
const void* prefix, size_t prefixSize);
-/*! ZSTD_DCtx_loadDictionary() :
+/*! ZSTD_DCtx_loadDictionary() : Requires v1.4.0+
* Create an internal DDict from dict buffer,
* to be used to decompress next frames.
* The dictionary remains valid for all future frames, until explicitly invalidated.
@@ -996,9 +1009,16 @@ ZSTDLIB_API size_t ZSTD_CCtx_refPrefix(ZSTD_CCtx* cctx,
*/
ZSTDLIB_API size_t ZSTD_DCtx_loadDictionary(ZSTD_DCtx* dctx, const void* dict, size_t dictSize);
-/*! ZSTD_DCtx_refDDict() :
+/*! ZSTD_DCtx_refDDict() : Requires v1.4.0+
* Reference a prepared dictionary, to be used to decompress next frames.
* The dictionary remains active for decompression of future frames using same DCtx.
+ *
+ * If called with ZSTD_d_refMultipleDDicts enabled, repeated calls of this function
+ * will store the DDict references in a table, and the DDict used for decompression
+ * will be determined at decompression time, as per the dict ID in the frame.
+ * The memory for the table is allocated on the first call to refDDict, and can be
+ * freed with ZSTD_freeDCtx().
+ *
* @result : 0, or an error code (which can be tested with ZSTD_isError()).
* Note 1 : Currently, only one dictionary can be managed.
* Referencing a new dictionary effectively "discards" any previous one.
@@ -1007,7 +1027,7 @@ ZSTDLIB_API size_t ZSTD_DCtx_loadDictionary(ZSTD_DCtx* dctx, const void* dict, s
*/
ZSTDLIB_API size_t ZSTD_DCtx_refDDict(ZSTD_DCtx* dctx, const ZSTD_DDict* ddict);
-/*! ZSTD_DCtx_refPrefix() :
+/*! ZSTD_DCtx_refPrefix() : Requires v1.4.0+
* Reference a prefix (single-usage dictionary) to decompress next frame.
* This is the reverse operation of ZSTD_CCtx_refPrefix(),
* and must use the same prefix as the one used during compression.
@@ -1028,7 +1048,7 @@ ZSTDLIB_API size_t ZSTD_DCtx_refPrefix(ZSTD_DCtx* dctx,
/* === Memory management === */
-/*! ZSTD_sizeof_*() :
+/*! ZSTD_sizeof_*() : Requires v1.4.0+
* These functions give the _current_ memory usage of selected object.
* Note that object memory usage can evolve (increase or decrease) over time. */
ZSTDLIB_API size_t ZSTD_sizeof_CCtx(const ZSTD_CCtx* cctx);
@@ -1053,6 +1073,28 @@ ZSTDLIB_API size_t ZSTD_sizeof_DDict(const ZSTD_DDict* ddict);
#if defined(ZSTD_STATIC_LINKING_ONLY) && !defined(ZSTD_H_ZSTD_STATIC_LINKING_ONLY)
#define ZSTD_H_ZSTD_STATIC_LINKING_ONLY
+/* Deprecation warnings :
+ * Should these warnings be a problem, it is generally possible to disable them,
+ * typically with -Wno-deprecated-declarations for gcc or _CRT_SECURE_NO_WARNINGS in Visual.
+ * Otherwise, it's also possible to define ZSTD_DISABLE_DEPRECATE_WARNINGS.
+ */
+#ifdef ZSTD_DISABLE_DEPRECATE_WARNINGS
+# define ZSTD_DEPRECATED(message) ZSTDLIB_API /* disable deprecation warnings */
+#else
+# if defined (__cplusplus) && (__cplusplus >= 201402) /* C++14 or greater */
+# define ZSTD_DEPRECATED(message) [[deprecated(message)]] ZSTDLIB_API
+# elif (defined(GNUC) && (GNUC > 4 || (GNUC == 4 && GNUC_MINOR >= 5))) || defined(__clang__)
+# define ZSTD_DEPRECATED(message) ZSTDLIB_API __attribute__((deprecated(message)))
+# elif defined(__GNUC__) && (__GNUC__ >= 3)
+# define ZSTD_DEPRECATED(message) ZSTDLIB_API __attribute__((deprecated))
+# elif defined(_MSC_VER)
+# define ZSTD_DEPRECATED(message) ZSTDLIB_API __declspec(deprecated(message))
+# else
+# pragma message("WARNING: You need to implement ZSTD_DEPRECATED for this compiler")
+# define ZSTD_DEPRECATED(message) ZSTDLIB_API
+# endif
+#endif /* ZSTD_DISABLE_DEPRECATE_WARNINGS */
+
/****************************************************************************************
* experimental API (static linking only)
****************************************************************************************
@@ -1206,6 +1248,12 @@ typedef enum {
} ZSTD_forceIgnoreChecksum_e;
typedef enum {
+ /* Note: this enum controls ZSTD_d_refMultipleDDicts */
+ ZSTD_rmd_refSingleDDict = 0,
+ ZSTD_rmd_refMultipleDDicts = 1
+} ZSTD_refMultipleDDicts_e;
+
+typedef enum {
/* Note: this enum and the behavior it controls are effectively internal
* implementation details of the compressor. They are expected to continue
* to evolve and should be considered only in the context of extremely
@@ -1253,6 +1301,11 @@ typedef enum {
ZSTD_lcm_uncompressed = 2 /**< Always emit uncompressed literals. */
} ZSTD_literalCompressionMode_e;
+typedef enum {
+ ZSTD_urm_auto = 0, /* Automatically determine whether or not we use row matchfinder */
+ ZSTD_urm_disableRowMatchFinder = 1, /* Never use row matchfinder */
+ ZSTD_urm_enableRowMatchFinder = 2 /* Always use row matchfinder when applicable */
+} ZSTD_useRowMatchFinderMode_e;
/***************************************
* Frame size functions
@@ -1286,7 +1339,7 @@ ZSTDLIB_API unsigned long long ZSTD_findDecompressedSize(const void* src, size_t
* `srcSize` must be the _exact_ size of this series
* (i.e. there should be a frame boundary at `src + srcSize`)
* @return : - upper-bound for the decompressed size of all data in all successive frames
- * - if an error occured: ZSTD_CONTENTSIZE_ERROR
+ * - if an error occurred: ZSTD_CONTENTSIZE_ERROR
*
* note 1 : an error can occur if `src` contains an invalid or incorrectly formatted frame.
* note 2 : the upper-bound is exact when the decompressed size field is available in every ZSTD encoded frame of `src`.
@@ -1372,6 +1425,23 @@ ZSTDLIB_API size_t ZSTD_compressSequences(ZSTD_CCtx* const cctx, void* dst, size
const void* src, size_t srcSize);
+/*! ZSTD_writeSkippableFrame() :
+ * Generates a zstd skippable frame containing data given by src, and writes it to dst buffer.
+ *
+ * Skippable frames begin with a a 4-byte magic number. There are 16 possible choices of magic number,
+ * ranging from ZSTD_MAGIC_SKIPPABLE_START to ZSTD_MAGIC_SKIPPABLE_START+15.
+ * As such, the parameter magicVariant controls the exact skippable frame magic number variant used, so
+ * the magic number used will be ZSTD_MAGIC_SKIPPABLE_START + magicVariant.
+ *
+ * Returns an error if destination buffer is not large enough, if the source size is not representable
+ * with a 4-byte unsigned int, or if the parameter magicVariant is greater than 15 (and therefore invalid).
+ *
+ * @return : number of bytes written or a ZSTD error.
+ */
+ZSTDLIB_API size_t ZSTD_writeSkippableFrame(void* dst, size_t dstCapacity,
+ const void* src, size_t srcSize, unsigned magicVariant);
+
+
/***************************************
* Memory management
***************************************/
@@ -1506,13 +1576,14 @@ ZSTDLIB_API ZSTD_CDict* ZSTD_createCDict_advanced(const void* dict, size_t dictS
* Note that the lifetime of such pool must exist while being used.
* ZSTD_CCtx_refThreadPool assigns a thread pool to a context (use NULL argument value
* to use an internal thread pool).
- * ZSTD_freeThreadPool frees a thread pool.
+ * ZSTD_freeThreadPool frees a thread pool, accepts NULL pointer.
*/
typedef struct POOL_ctx_s ZSTD_threadPool;
ZSTDLIB_API ZSTD_threadPool* ZSTD_createThreadPool(size_t numThreads);
-ZSTDLIB_API void ZSTD_freeThreadPool (ZSTD_threadPool* pool);
+ZSTDLIB_API void ZSTD_freeThreadPool (ZSTD_threadPool* pool); /* accept NULL pointer */
ZSTDLIB_API size_t ZSTD_CCtx_refThreadPool(ZSTD_CCtx* cctx, ZSTD_threadPool* pool);
+
/*
* This API is temporary and is expected to change or disappear in the future!
*/
@@ -1523,10 +1594,12 @@ ZSTDLIB_API ZSTD_CDict* ZSTD_createCDict_advanced2(
const ZSTD_CCtx_params* cctxParams,
ZSTD_customMem customMem);
-ZSTDLIB_API ZSTD_DDict* ZSTD_createDDict_advanced(const void* dict, size_t dictSize,
- ZSTD_dictLoadMethod_e dictLoadMethod,
- ZSTD_dictContentType_e dictContentType,
- ZSTD_customMem customMem);
+ZSTDLIB_API ZSTD_DDict* ZSTD_createDDict_advanced(
+ const void* dict, size_t dictSize,
+ ZSTD_dictLoadMethod_e dictLoadMethod,
+ ZSTD_dictContentType_e dictContentType,
+ ZSTD_customMem customMem);
+
/***************************************
* Advanced compression functions
@@ -1540,12 +1613,6 @@ ZSTDLIB_API ZSTD_DDict* ZSTD_createDDict_advanced(const void* dict, size_t dictS
* note: equivalent to ZSTD_createCDict_advanced(), with dictLoadMethod==ZSTD_dlm_byRef */
ZSTDLIB_API ZSTD_CDict* ZSTD_createCDict_byReference(const void* dictBuffer, size_t dictSize, int compressionLevel);
-/*! ZSTD_getDictID_fromCDict() :
- * Provides the dictID of the dictionary loaded into `cdict`.
- * If @return == 0, the dictionary is not conformant to Zstandard specification, or empty.
- * Non-conformant dictionaries can still be loaded, but as content-only dictionaries. */
-ZSTDLIB_API unsigned ZSTD_getDictID_fromCDict(const ZSTD_CDict* cdict);
-
/*! ZSTD_getCParams() :
* @return ZSTD_compressionParameters structure for a selected compression level and estimated srcSize.
* `estimatedSrcSize` value is optional, select 0 if not known */
@@ -1572,18 +1639,20 @@ ZSTDLIB_API ZSTD_compressionParameters ZSTD_adjustCParams(ZSTD_compressionParame
/*! ZSTD_compress_advanced() :
* Note : this function is now DEPRECATED.
* It can be replaced by ZSTD_compress2(), in combination with ZSTD_CCtx_setParameter() and other parameter setters.
- * This prototype will be marked as deprecated and generate compilation warning on reaching v1.5.x */
-ZSTDLIB_API size_t ZSTD_compress_advanced(ZSTD_CCtx* cctx,
+ * This prototype will generate compilation warnings. */
+ZSTD_DEPRECATED("use ZSTD_compress2")
+size_t ZSTD_compress_advanced(ZSTD_CCtx* cctx,
void* dst, size_t dstCapacity,
const void* src, size_t srcSize,
const void* dict,size_t dictSize,
ZSTD_parameters params);
/*! ZSTD_compress_usingCDict_advanced() :
- * Note : this function is now REDUNDANT.
+ * Note : this function is now DEPRECATED.
* It can be replaced by ZSTD_compress2(), in combination with ZSTD_CCtx_loadDictionary() and other parameter setters.
- * This prototype will be marked as deprecated and generate compilation warning in some future version */
-ZSTDLIB_API size_t ZSTD_compress_usingCDict_advanced(ZSTD_CCtx* cctx,
+ * This prototype will generate compilation warnings. */
+ZSTD_DEPRECATED("use ZSTD_compress2 with ZSTD_CCtx_loadDictionary")
+size_t ZSTD_compress_usingCDict_advanced(ZSTD_CCtx* cctx,
void* dst, size_t dstCapacity,
const void* src, size_t srcSize,
const ZSTD_CDict* cdict,
@@ -1645,7 +1714,7 @@ ZSTDLIB_API size_t ZSTD_CCtx_refPrefix_advanced(ZSTD_CCtx* cctx, const void* pre
/* Controls how the literals are compressed (default is auto).
* The value must be of type ZSTD_literalCompressionMode_e.
- * See ZSTD_literalCompressionMode_t enum definition for details.
+ * See ZSTD_literalCompressionMode_e enum definition for details.
*/
#define ZSTD_c_literalCompressionMode ZSTD_c_experimentalParam5
@@ -1797,12 +1866,52 @@ ZSTDLIB_API size_t ZSTD_CCtx_refPrefix_advanced(ZSTD_CCtx* cctx, const void* pre
*/
#define ZSTD_c_validateSequences ZSTD_c_experimentalParam12
+/* ZSTD_c_splitBlocks
+ * Default is 0 == disabled. Set to 1 to enable block splitting.
+ *
+ * Will attempt to split blocks in order to improve compression ratio at the cost of speed.
+ */
+#define ZSTD_c_splitBlocks ZSTD_c_experimentalParam13
+
+/* ZSTD_c_useRowMatchFinder
+ * Default is ZSTD_urm_auto.
+ * Controlled with ZSTD_useRowMatchFinderMode_e enum.
+ *
+ * By default, in ZSTD_urm_auto, when finalizing the compression parameters, the library
+ * will decide at runtime whether to use the row-based matchfinder based on support for SIMD
+ * instructions as well as the windowLog.
+ *
+ * Set to ZSTD_urm_disableRowMatchFinder to never use row-based matchfinder.
+ * Set to ZSTD_urm_enableRowMatchFinder to force usage of row-based matchfinder.
+ */
+#define ZSTD_c_useRowMatchFinder ZSTD_c_experimentalParam14
+
+/* ZSTD_c_deterministicRefPrefix
+ * Default is 0 == disabled. Set to 1 to enable.
+ *
+ * Zstd produces different results for prefix compression when the prefix is
+ * directly adjacent to the data about to be compressed vs. when it isn't.
+ * This is because zstd detects that the two buffers are contiguous and it can
+ * use a more efficient match finding algorithm. However, this produces different
+ * results than when the two buffers are non-contiguous. This flag forces zstd
+ * to always load the prefix in non-contiguous mode, even if it happens to be
+ * adjacent to the data, to guarantee determinism.
+ *
+ * If you really care about determinism when using a dictionary or prefix,
+ * like when doing delta compression, you should select this option. It comes
+ * at a speed penalty of about ~2.5% if the dictionary and data happened to be
+ * contiguous, and is free if they weren't contiguous. We don't expect that
+ * intentionally making the dictionary and data contiguous will be worth the
+ * cost to memcpy() the data.
+ */
+#define ZSTD_c_deterministicRefPrefix ZSTD_c_experimentalParam15
+
/*! ZSTD_CCtx_getParameter() :
* Get the requested compression parameter value, selected by enum ZSTD_cParameter,
* and store it into int* value.
* @return : 0, or an error code (which can be tested with ZSTD_isError()).
*/
-ZSTDLIB_API size_t ZSTD_CCtx_getParameter(ZSTD_CCtx* cctx, ZSTD_cParameter param, int* value);
+ZSTDLIB_API size_t ZSTD_CCtx_getParameter(const ZSTD_CCtx* cctx, ZSTD_cParameter param, int* value);
/*! ZSTD_CCtx_params :
@@ -1817,13 +1926,13 @@ ZSTDLIB_API size_t ZSTD_CCtx_getParameter(ZSTD_CCtx* cctx, ZSTD_cParameter param
* These parameters will be applied to
* all subsequent frames.
* - ZSTD_compressStream2() : Do compression using the CCtx.
- * - ZSTD_freeCCtxParams() : Free the memory.
+ * - ZSTD_freeCCtxParams() : Free the memory, accept NULL pointer.
*
* This can be used with ZSTD_estimateCCtxSize_advanced_usingCCtxParams()
* for static allocation of CCtx for single-threaded compression.
*/
ZSTDLIB_API ZSTD_CCtx_params* ZSTD_createCCtxParams(void);
-ZSTDLIB_API size_t ZSTD_freeCCtxParams(ZSTD_CCtx_params* params);
+ZSTDLIB_API size_t ZSTD_freeCCtxParams(ZSTD_CCtx_params* params); /* accept NULL pointer */
/*! ZSTD_CCtxParams_reset() :
* Reset params to default values.
@@ -1842,7 +1951,7 @@ ZSTDLIB_API size_t ZSTD_CCtxParams_init(ZSTD_CCtx_params* cctxParams, int compre
*/
ZSTDLIB_API size_t ZSTD_CCtxParams_init_advanced(ZSTD_CCtx_params* cctxParams, ZSTD_parameters params);
-/*! ZSTD_CCtxParams_setParameter() :
+/*! ZSTD_CCtxParams_setParameter() : Requires v1.4.0+
* Similar to ZSTD_CCtx_setParameter.
* Set one compression parameter, selected by enum ZSTD_cParameter.
* Parameters must be applied to a ZSTD_CCtx using
@@ -1857,7 +1966,7 @@ ZSTDLIB_API size_t ZSTD_CCtxParams_setParameter(ZSTD_CCtx_params* params, ZSTD_c
* Get the requested value of one compression parameter, selected by enum ZSTD_cParameter.
* @result : 0, or an error code (which can be tested with ZSTD_isError()).
*/
-ZSTDLIB_API size_t ZSTD_CCtxParams_getParameter(ZSTD_CCtx_params* params, ZSTD_cParameter param, int* value);
+ZSTDLIB_API size_t ZSTD_CCtxParams_getParameter(const ZSTD_CCtx_params* params, ZSTD_cParameter param, int* value);
/*! ZSTD_CCtx_setParametersUsingCCtxParams() :
* Apply a set of ZSTD_CCtx_params to the compression context.
@@ -1983,12 +2092,38 @@ ZSTDLIB_API size_t ZSTD_DCtx_getParameter(ZSTD_DCtx* dctx, ZSTD_dParameter param
*/
#define ZSTD_d_forceIgnoreChecksum ZSTD_d_experimentalParam3
+/* ZSTD_d_refMultipleDDicts
+ * Experimental parameter.
+ * Default is 0 == disabled. Set to 1 to enable
+ *
+ * If enabled and dctx is allocated on the heap, then additional memory will be allocated
+ * to store references to multiple ZSTD_DDict. That is, multiple calls of ZSTD_refDDict()
+ * using a given ZSTD_DCtx, rather than overwriting the previous DDict reference, will instead
+ * store all references. At decompression time, the appropriate dictID is selected
+ * from the set of DDicts based on the dictID in the frame.
+ *
+ * Usage is simply calling ZSTD_refDDict() on multiple dict buffers.
+ *
+ * Param has values of byte ZSTD_refMultipleDDicts_e
+ *
+ * WARNING: Enabling this parameter and calling ZSTD_DCtx_refDDict(), will trigger memory
+ * allocation for the hash table. ZSTD_freeDCtx() also frees this memory.
+ * Memory is allocated as per ZSTD_DCtx::customMem.
+ *
+ * Although this function allocates memory for the table, the user is still responsible for
+ * memory management of the underlying ZSTD_DDict* themselves.
+ */
+#define ZSTD_d_refMultipleDDicts ZSTD_d_experimentalParam4
+
+
/*! ZSTD_DCtx_setFormat() :
+ * This function is REDUNDANT. Prefer ZSTD_DCtx_setParameter().
* Instruct the decoder context about what kind of data to decode next.
* This instruction is mandatory to decode data without a fully-formed header,
* such ZSTD_f_zstd1_magicless for example.
* @return : 0, or an error code (which can be tested using ZSTD_isError()). */
-ZSTDLIB_API size_t ZSTD_DCtx_setFormat(ZSTD_DCtx* dctx, ZSTD_format_e format);
+ZSTD_DEPRECATED("use ZSTD_DCtx_setParameter() instead")
+size_t ZSTD_DCtx_setFormat(ZSTD_DCtx* dctx, ZSTD_format_e format);
/*! ZSTD_decompressStream_simpleArgs() :
* Same as ZSTD_decompressStream(),
@@ -2012,7 +2147,7 @@ ZSTDLIB_API size_t ZSTD_decompressStream_simpleArgs (
/*===== Advanced Streaming compression functions =====*/
/*! ZSTD_initCStream_srcSize() :
- * This function is deprecated, and equivalent to:
+ * This function is DEPRECATED, and equivalent to:
* ZSTD_CCtx_reset(zcs, ZSTD_reset_session_only);
* ZSTD_CCtx_refCDict(zcs, NULL); // clear the dictionary (if any)
* ZSTD_CCtx_setParameter(zcs, ZSTD_c_compressionLevel, compressionLevel);
@@ -2021,15 +2156,15 @@ ZSTDLIB_API size_t ZSTD_decompressStream_simpleArgs (
* pledgedSrcSize must be correct. If it is not known at init time, use
* ZSTD_CONTENTSIZE_UNKNOWN. Note that, for compatibility with older programs,
* "0" also disables frame content size field. It may be enabled in the future.
- * Note : this prototype will be marked as deprecated and generate compilation warnings on reaching v1.5.x
+ * This prototype will generate compilation warnings.
*/
-ZSTDLIB_API size_t
-ZSTD_initCStream_srcSize(ZSTD_CStream* zcs,
+ZSTD_DEPRECATED("use ZSTD_CCtx_reset, see zstd.h for detailed instructions")
+size_t ZSTD_initCStream_srcSize(ZSTD_CStream* zcs,
int compressionLevel,
unsigned long long pledgedSrcSize);
/*! ZSTD_initCStream_usingDict() :
- * This function is deprecated, and is equivalent to:
+ * This function is DEPRECATED, and is equivalent to:
* ZSTD_CCtx_reset(zcs, ZSTD_reset_session_only);
* ZSTD_CCtx_setParameter(zcs, ZSTD_c_compressionLevel, compressionLevel);
* ZSTD_CCtx_loadDictionary(zcs, dict, dictSize);
@@ -2038,15 +2173,15 @@ ZSTD_initCStream_srcSize(ZSTD_CStream* zcs,
* dict == NULL or dictSize < 8, in which case no dict is used.
* Note: dict is loaded with ZSTD_dct_auto (treated as a full zstd dictionary if
* it begins with ZSTD_MAGIC_DICTIONARY, else as raw content) and ZSTD_dlm_byCopy.
- * Note : this prototype will be marked as deprecated and generate compilation warnings on reaching v1.5.x
+ * This prototype will generate compilation warnings.
*/
-ZSTDLIB_API size_t
-ZSTD_initCStream_usingDict(ZSTD_CStream* zcs,
+ZSTD_DEPRECATED("use ZSTD_CCtx_reset, see zstd.h for detailed instructions")
+size_t ZSTD_initCStream_usingDict(ZSTD_CStream* zcs,
const void* dict, size_t dictSize,
int compressionLevel);
/*! ZSTD_initCStream_advanced() :
- * This function is deprecated, and is approximately equivalent to:
+ * This function is DEPRECATED, and is approximately equivalent to:
* ZSTD_CCtx_reset(zcs, ZSTD_reset_session_only);
* // Pseudocode: Set each zstd parameter and leave the rest as-is.
* for ((param, value) : params) {
@@ -2058,23 +2193,24 @@ ZSTD_initCStream_usingDict(ZSTD_CStream* zcs,
* dict is loaded with ZSTD_dct_auto and ZSTD_dlm_byCopy.
* pledgedSrcSize must be correct.
* If srcSize is not known at init time, use value ZSTD_CONTENTSIZE_UNKNOWN.
- * Note : this prototype will be marked as deprecated and generate compilation warnings on reaching v1.5.x
+ * This prototype will generate compilation warnings.
*/
-ZSTDLIB_API size_t
-ZSTD_initCStream_advanced(ZSTD_CStream* zcs,
+ZSTD_DEPRECATED("use ZSTD_CCtx_reset, see zstd.h for detailed instructions")
+size_t ZSTD_initCStream_advanced(ZSTD_CStream* zcs,
const void* dict, size_t dictSize,
ZSTD_parameters params,
unsigned long long pledgedSrcSize);
/*! ZSTD_initCStream_usingCDict() :
- * This function is deprecated, and equivalent to:
+ * This function is DEPRECATED, and equivalent to:
* ZSTD_CCtx_reset(zcs, ZSTD_reset_session_only);
* ZSTD_CCtx_refCDict(zcs, cdict);
- *
+ *
* note : cdict will just be referenced, and must outlive compression session
- * Note : this prototype will be marked as deprecated and generate compilation warnings on reaching v1.5.x
+ * This prototype will generate compilation warnings.
*/
-ZSTDLIB_API size_t ZSTD_initCStream_usingCDict(ZSTD_CStream* zcs, const ZSTD_CDict* cdict);
+ZSTD_DEPRECATED("use ZSTD_CCtx_reset and ZSTD_CCtx_refCDict, see zstd.h for detailed instructions")
+size_t ZSTD_initCStream_usingCDict(ZSTD_CStream* zcs, const ZSTD_CDict* cdict);
/*! ZSTD_initCStream_usingCDict_advanced() :
* This function is DEPRECATED, and is approximately equivalent to:
@@ -2089,18 +2225,21 @@ ZSTDLIB_API size_t ZSTD_initCStream_usingCDict(ZSTD_CStream* zcs, const ZSTD_CDi
* same as ZSTD_initCStream_usingCDict(), with control over frame parameters.
* pledgedSrcSize must be correct. If srcSize is not known at init time, use
* value ZSTD_CONTENTSIZE_UNKNOWN.
- * Note : this prototype will be marked as deprecated and generate compilation warnings on reaching v1.5.x
+ * This prototype will generate compilation warnings.
*/
-ZSTDLIB_API size_t
-ZSTD_initCStream_usingCDict_advanced(ZSTD_CStream* zcs,
+ZSTD_DEPRECATED("use ZSTD_CCtx_reset and ZSTD_CCtx_refCDict, see zstd.h for detailed instructions")
+size_t ZSTD_initCStream_usingCDict_advanced(ZSTD_CStream* zcs,
const ZSTD_CDict* cdict,
ZSTD_frameParameters fParams,
unsigned long long pledgedSrcSize);
/*! ZSTD_resetCStream() :
- * This function is deprecated, and is equivalent to:
+ * This function is DEPRECATED, and is equivalent to:
* ZSTD_CCtx_reset(zcs, ZSTD_reset_session_only);
* ZSTD_CCtx_setPledgedSrcSize(zcs, pledgedSrcSize);
+ * Note: ZSTD_resetCStream() interprets pledgedSrcSize == 0 as ZSTD_CONTENTSIZE_UNKNOWN, but
+ * ZSTD_CCtx_setPledgedSrcSize() does not do the same, so ZSTD_CONTENTSIZE_UNKNOWN must be
+ * explicitly specified.
*
* start a new frame, using same parameters from previous frame.
* This is typically useful to skip dictionary loading stage, since it will re-use it in-place.
@@ -2110,9 +2249,10 @@ ZSTD_initCStream_usingCDict_advanced(ZSTD_CStream* zcs,
* For the time being, pledgedSrcSize==0 is interpreted as "srcSize unknown" for compatibility with older programs,
* but it will change to mean "empty" in future version, so use macro ZSTD_CONTENTSIZE_UNKNOWN instead.
* @return : 0, or an error code (which can be tested using ZSTD_isError())
- * Note : this prototype will be marked as deprecated and generate compilation warnings on reaching v1.5.x
+ * This prototype will generate compilation warnings.
*/
-ZSTDLIB_API size_t ZSTD_resetCStream(ZSTD_CStream* zcs, unsigned long long pledgedSrcSize);
+ZSTD_DEPRECATED("use ZSTD_CCtx_reset, see zstd.h for detailed instructions")
+size_t ZSTD_resetCStream(ZSTD_CStream* zcs, unsigned long long pledgedSrcSize);
typedef struct {
@@ -2199,8 +2339,7 @@ ZSTDLIB_API size_t ZSTD_resetDStream(ZSTD_DStream* zds);
ZSTD_CCtx object can be re-used multiple times within successive compression operations.
Start by initializing a context.
- Use ZSTD_compressBegin(), or ZSTD_compressBegin_usingDict() for dictionary compression,
- or ZSTD_compressBegin_advanced(), for finer parameter control.
+ Use ZSTD_compressBegin(), or ZSTD_compressBegin_usingDict() for dictionary compression.
It's also possible to duplicate a reference context which has already been initialized, using ZSTD_copyCCtx()
Then, consume your input using ZSTD_compressContinue().
@@ -2225,15 +2364,17 @@ ZSTDLIB_API size_t ZSTD_resetDStream(ZSTD_DStream* zds);
/*===== Buffer-less streaming compression functions =====*/
ZSTDLIB_API size_t ZSTD_compressBegin(ZSTD_CCtx* cctx, int compressionLevel);
ZSTDLIB_API size_t ZSTD_compressBegin_usingDict(ZSTD_CCtx* cctx, const void* dict, size_t dictSize, int compressionLevel);
-ZSTDLIB_API size_t ZSTD_compressBegin_advanced(ZSTD_CCtx* cctx, const void* dict, size_t dictSize, ZSTD_parameters params, unsigned long long pledgedSrcSize); /**< pledgedSrcSize : If srcSize is not known at init time, use ZSTD_CONTENTSIZE_UNKNOWN */
ZSTDLIB_API size_t ZSTD_compressBegin_usingCDict(ZSTD_CCtx* cctx, const ZSTD_CDict* cdict); /**< note: fails if cdict==NULL */
-ZSTDLIB_API size_t ZSTD_compressBegin_usingCDict_advanced(ZSTD_CCtx* const cctx, const ZSTD_CDict* const cdict, ZSTD_frameParameters const fParams, unsigned long long const pledgedSrcSize); /* compression parameters are already set within cdict. pledgedSrcSize must be correct. If srcSize is not known, use macro ZSTD_CONTENTSIZE_UNKNOWN */
ZSTDLIB_API size_t ZSTD_copyCCtx(ZSTD_CCtx* cctx, const ZSTD_CCtx* preparedCCtx, unsigned long long pledgedSrcSize); /**< note: if pledgedSrcSize is not known, use ZSTD_CONTENTSIZE_UNKNOWN */
ZSTDLIB_API size_t ZSTD_compressContinue(ZSTD_CCtx* cctx, void* dst, size_t dstCapacity, const void* src, size_t srcSize);
ZSTDLIB_API size_t ZSTD_compressEnd(ZSTD_CCtx* cctx, void* dst, size_t dstCapacity, const void* src, size_t srcSize);
-
+/* The ZSTD_compressBegin_advanced() and ZSTD_compressBegin_usingCDict_advanced() are now DEPRECATED and will generate a compiler warning */
+ZSTD_DEPRECATED("use advanced API to access custom parameters")
+size_t ZSTD_compressBegin_advanced(ZSTD_CCtx* cctx, const void* dict, size_t dictSize, ZSTD_parameters params, unsigned long long pledgedSrcSize); /**< pledgedSrcSize : If srcSize is not known at init time, use ZSTD_CONTENTSIZE_UNKNOWN */
+ZSTD_DEPRECATED("use advanced API to access custom parameters")
+size_t ZSTD_compressBegin_usingCDict_advanced(ZSTD_CCtx* const cctx, const ZSTD_CDict* const cdict, ZSTD_frameParameters const fParams, unsigned long long const pledgedSrcSize); /* compression parameters are already set within cdict. pledgedSrcSize must be correct. If srcSize is not known, use macro ZSTD_CONTENTSIZE_UNKNOWN */
/**
Buffer-less streaming decompression (synchronous mode)
diff --git a/thirdparty/zstd/common/zstd_errors.h b/thirdparty/zstd/zstd_errors.h
index 6d0d003004..fa3686b772 100644
--- a/thirdparty/zstd/common/zstd_errors.h
+++ b/thirdparty/zstd/zstd_errors.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
diff --git a/version.py b/version.py
index 517a47f568..663f90b942 100644
--- a/version.py
+++ b/version.py
@@ -7,3 +7,4 @@ status = "dev"
module_config = ""
year = 2021
website = "https://godotengine.org"
+docs = "latest"